From cfac3feb85c9adb1ed2abaa1422ef524a050d3cd Mon Sep 17 00:00:00 2001 From: bkaradzic Date: Sun, 7 Oct 2012 20:41:18 -0700 Subject: [PATCH] Added more examples. --- 3rdparty/glsl-optimizer/.emacs-dirvars | 10 - 3rdparty/glsl-optimizer/.gitignore | 12 +- 3rdparty/glsl-optimizer/README.md | 12 +- 3rdparty/glsl-optimizer/autogen.sh | 14 +- .../glsl-optimizer/contrib/glslopt/Main.cpp | 148 + .../glsl-optimizer/contrib/glslopt/Makefile | 16 + .../glsl-optimizer/contrib/glslopt/Readme | 13 + .../contrib/glslopt/SourceFiles | 105 + .../contrib/glslopt/glslopt.bdgcfg | 10 + .../contrib/glslopt/glslopt.sln | 26 + .../contrib/glslopt/glslopt.vcproj | 897 + 3rdparty/glsl-optimizer/generateParsers.sh | 2 +- 3rdparty/glsl-optimizer/include/GL/gl.h | 2241 - 3rdparty/glsl-optimizer/include/GL/glext.h | 11488 -- 3rdparty/glsl-optimizer/removeDeletedByUs.sh | 3 + 3rdparty/glsl-optimizer/src/.gitignore | 1 + .../glsl-optimizer/src/glsl/.dir-locals.el | 3 + 3rdparty/glsl-optimizer/src/glsl/.gitignore | 4 + 3rdparty/glsl-optimizer/src/glsl/Makefile | 99 + 3rdparty/glsl-optimizer/src/glsl/README | 1 - 3rdparty/glsl-optimizer/src/glsl/SConscript | 92 +- 3rdparty/glsl-optimizer/src/glsl/TODO | 15 - 3rdparty/glsl-optimizer/src/glsl/ast.h | 252 +- .../glsl-optimizer/src/glsl/ast_function.cpp | 649 +- .../glsl-optimizer/src/glsl/ast_to_hir.cpp | 856 +- 3rdparty/glsl-optimizer/src/glsl/ast_type.cpp | 112 +- 3rdparty/glsl-optimizer/src/glsl/autogen.sh | 12 - .../src/glsl/builtin_function.cpp | 12881 +- .../glsl-optimizer/src/glsl/builtin_stubs.cpp | 1 + .../glsl-optimizer/src/glsl/builtin_types.h | 27 + ...{ir_variable.cpp => builtin_variables.cpp} | 496 +- .../src/glsl/builtin_variables.h | 110 - .../src/glsl/builtins/glsl/inverse.glsl | 106 + .../src/glsl/builtins/ir/{abs => abs.ir} | 0 .../glsl-optimizer/src/glsl/builtins/ir/acos | 22 - .../src/glsl/builtins/ir/acos.ir | 29 + .../src/glsl/builtins/ir/{acosh => acosh.ir} | 6 +- .../src/glsl/builtins/ir/{all => all.ir} | 0 .../src/glsl/builtins/ir/{any => any.ir} | 0 .../src/glsl/builtins/ir/{asin => asin.ir} | 0 .../glsl-optimizer/src/glsl/builtins/ir/asinh | 21 - .../src/glsl/builtins/ir/asinh.ir | 53 + .../src/glsl/builtins/ir/{atan => atan.ir} | 80 +- .../src/glsl/builtins/ir/{atanh => atanh.ir} | 18 +- .../src/glsl/builtins/ir/{ceil => ceil.ir} | 0 .../src/glsl/builtins/ir/{clamp => clamp.ir} | 42 +- .../src/glsl/builtins/ir/{cos => cos.ir} | 0 .../src/glsl/builtins/ir/{cosh => cosh.ir} | 6 +- .../src/glsl/builtins/ir/{cross => cross.ir} | 0 .../src/glsl/builtins/ir/{dFdx => dFdx.ir} | 0 .../src/glsl/builtins/ir/{dFdy => dFdy.ir} | 0 .../glsl/builtins/ir/{degrees => degrees.ir} | 0 .../builtins/ir/{distance => distance.ir} | 0 .../src/glsl/builtins/ir/{dot => dot.ir} | 0 .../src/glsl/builtins/ir/{equal => equal.ir} | 0 .../src/glsl/builtins/ir/{exp => exp.ir} | 0 .../src/glsl/builtins/ir/{exp2 => exp2.ir} | 0 .../ir/{faceforward => faceforward.ir} | 0 .../src/glsl/builtins/ir/floatBitsToInt.ir | 21 + .../src/glsl/builtins/ir/floatBitsToUint.ir | 21 + .../src/glsl/builtins/ir/{floor => floor.ir} | 0 .../src/glsl/builtins/ir/{fract => fract.ir} | 0 .../builtins/ir/{ftransform => ftransform.ir} | 0 .../glsl/builtins/ir/{fwidth => fwidth.ir} | 0 .../ir/{greaterThan => greaterThan.ir} | 0 .../{greaterThanEqual => greaterThanEqual.ir} | 0 .../src/glsl/builtins/ir/intBitsToFloat.ir | 21 + .../ir/{inversesqrt => inversesqrt.ir} | 0 .../src/glsl/builtins/ir/isinf.ir | 17 + .../src/glsl/builtins/ir/isnan.ir | 17 + .../glsl/builtins/ir/{length => length.ir} | 0 .../builtins/ir/{lessThan => lessThan.ir} | 0 .../ir/{lessThanEqual => lessThanEqual.ir} | 0 .../src/glsl/builtins/ir/{log => log.ir} | 0 .../src/glsl/builtins/ir/{log2 => log2.ir} | 0 .../ir/{matrixCompMult => matrixCompMult.ir} | 0 .../src/glsl/builtins/ir/{max => max.ir} | 0 .../src/glsl/builtins/ir/{min => min.ir} | 0 .../src/glsl/builtins/ir/{mix => mix.ir} | 16 +- .../src/glsl/builtins/ir/{mod => mod.ir} | 0 .../src/glsl/builtins/ir/{modf => modf.ir} | 0 .../glsl/builtins/ir/{noise1 => noise1.ir} | 0 .../glsl/builtins/ir/{noise2 => noise2.ir} | 0 .../glsl/builtins/ir/{noise3 => noise3.ir} | 0 .../glsl/builtins/ir/{noise4 => noise4.ir} | 4 +- .../src/glsl/builtins/ir/normalize | 21 - .../src/glsl/builtins/ir/normalize.ir | 21 + .../src/glsl/builtins/ir/{not => not.ir} | 0 .../builtins/ir/{notEqual => notEqual.ir} | 0 .../ir/{outerProduct => outerProduct.ir} | 0 .../src/glsl/builtins/ir/{pow => pow.ir} | 0 .../glsl/builtins/ir/{radians => radians.ir} | 0 .../glsl/builtins/ir/{reflect => reflect.ir} | 0 .../glsl/builtins/ir/{refract => refract.ir} | 0 .../src/glsl/builtins/ir/{round => round.ir} | 0 .../builtins/ir/{roundEven => roundEven.ir} | 0 .../src/glsl/builtins/ir/{sign => sign.ir} | 0 .../src/glsl/builtins/ir/{sin => sin.ir} | 0 .../src/glsl/builtins/ir/{sinh => sinh.ir} | 6 +- .../builtins/ir/{smoothstep => smoothstep.ir} | 0 .../src/glsl/builtins/ir/{sqrt => sqrt.ir} | 0 .../src/glsl/builtins/ir/{step => step.ir} | 0 .../src/glsl/builtins/ir/{tan => tan.ir} | 0 .../src/glsl/builtins/ir/{tanh => tanh.ir} | 0 .../builtins/ir/{transpose => transpose.ir} | 0 .../src/glsl/builtins/ir/{trunc => trunc.ir} | 0 .../src/glsl/builtins/ir/uintBitsToFloat.ir | 21 + .../src/glsl/builtins/profiles/100.frag | 294 - .../src/glsl/builtins/profiles/100.glsl | 296 + .../src/glsl/builtins/profiles/100.vert | 294 - .../src/glsl/builtins/profiles/110.frag | 326 +- .../src/glsl/builtins/profiles/110.glsl | 332 + .../src/glsl/builtins/profiles/110.vert | 328 +- .../src/glsl/builtins/profiles/120.frag | 357 - .../src/glsl/builtins/profiles/120.glsl | 364 + .../src/glsl/builtins/profiles/120.vert | 362 - .../src/glsl/builtins/profiles/130.frag | 934 +- .../src/glsl/builtins/profiles/130.glsl | 904 + .../src/glsl/builtins/profiles/130.vert | 1025 - .../src/glsl/builtins/profiles/140.frag | 140 + .../src/glsl/builtins/profiles/140.glsl | 989 + .../profiles/ARB_shader_bit_encoding.glsl | 22 + .../profiles/ARB_shader_texture_lod.frag | 47 - ...e_lod.vert => ARB_shader_texture_lod.glsl} | 0 ...tangle.frag => ARB_texture_rectangle.glsl} | 0 .../profiles/ARB_texture_rectangle.vert | 7 - .../profiles/EXT_shadow_samplers.frag | 2 + .../profiles/OES_EGL_image_external.glsl | 6 + .../profiles/OES_standard_derivatives.frag | 3 + .../glsl/builtins/tools/generate_builtins.py | 63 +- .../glsl/builtins/tools/texture_builtins.py | 113 +- .../glsl-optimizer/src/glsl/glcpp/.gitignore | 5 + .../glsl-optimizer/src/glsl/glcpp/glcpp-lex.c | 516 +- .../glsl-optimizer/src/glsl/glcpp/glcpp-lex.l | 59 +- .../src/glsl/glcpp/glcpp-parse.c | 1337 +- .../src/glsl/glcpp/glcpp-parse.h | 84 +- .../src/glsl/glcpp/glcpp-parse.y | 227 +- .../glsl-optimizer/src/glsl/glcpp/glcpp.c | 5 +- .../glsl-optimizer/src/glsl/glcpp/glcpp.h | 9 +- 3rdparty/glsl-optimizer/src/glsl/glcpp/pp.c | 40 +- .../tests/070-undefined-macro-in-expression.c | 2 - ...0-undefined-macro-in-expression.c.expected | 2 - .../glcpp/tests/086-reserved-macro-names.c | 2 - .../tests/086-reserved-macro-names.c.expected | 7 - .../src/glsl/glcpp/tests/091-hash-line.c | 8 - .../glsl/glcpp/tests/091-hash-line.c.expected | 13 - .../src/glsl/glcpp/tests/glcpp-test | 80 - .../glsl-optimizer/src/glsl/glsl_lexer.cpp | 1800 +- .../glsl-optimizer/src/glsl/glsl_lexer.ll | 78 +- .../src/glsl/glsl_optimizer.cpp | 221 +- .../glsl-optimizer/src/glsl/glsl_parser.cpp | 3645 +- .../glsl-optimizer/src/glsl/glsl_parser.h | 513 +- .../glsl-optimizer/src/glsl/glsl_parser.yy | 472 +- .../src/glsl/glsl_parser_extras.cpp | 213 +- .../src/glsl/glsl_parser_extras.h | 61 +- .../glsl-optimizer/src/glsl/glsl_types.cpp | 351 +- 3rdparty/glsl-optimizer/src/glsl/glsl_types.h | 69 +- .../src/glsl/hir_field_selection.cpp | 2 +- 3rdparty/glsl-optimizer/src/glsl/ir.cpp | 293 +- 3rdparty/glsl-optimizer/src/glsl/ir.h | 447 +- .../src/glsl/ir_basic_block.cpp | 75 +- .../glsl-optimizer/src/glsl/ir_builder.cpp | 206 + 3rdparty/glsl-optimizer/src/glsl/ir_builder.h | 111 + 3rdparty/glsl-optimizer/src/glsl/ir_clone.cpp | 42 +- .../src/glsl/ir_constant_expression.cpp | 779 +- .../src/glsl/ir_expression_flattening.cpp | 6 +- .../glsl-optimizer/src/glsl/ir_function.cpp | 13 +- .../src/glsl/ir_function_can_inline.cpp | 4 +- .../src/glsl/ir_function_detect_recursion.cpp | 6 +- .../src/glsl/ir_hierarchical_visitor.cpp | 9 + .../src/glsl/ir_hierarchical_visitor.h | 1 + .../glsl-optimizer/src/glsl/ir_hv_accept.cpp | 30 +- .../glsl-optimizer/src/glsl/ir_optimization.h | 25 +- .../src/glsl/ir_print_glsl_visitor.cpp | 300 +- .../src/glsl/ir_print_visitor.cpp | 47 +- .../src/glsl/ir_print_visitor.h | 1 + .../glsl-optimizer/src/glsl/ir_reader.cpp | 170 +- .../src/glsl/ir_rvalue_visitor.cpp | 130 +- .../src/glsl/ir_rvalue_visitor.h | 33 +- .../src/glsl/ir_set_program_inouts.cpp | 85 +- 3rdparty/glsl-optimizer/src/glsl/ir_uniform.h | 162 + .../src/glsl/ir_unused_structs.cpp | 2 +- .../glsl-optimizer/src/glsl/ir_validate.cpp | 61 +- .../src/glsl/ir_variable_refcount.cpp | 27 +- .../src/glsl/ir_variable_refcount.h | 9 +- 3rdparty/glsl-optimizer/src/glsl/ir_visitor.h | 1 + .../src/glsl/link_functions.cpp | 6 +- .../src/glsl/link_uniform_initializers.cpp | 181 + .../glsl-optimizer/src/glsl/link_uniforms.cpp | 650 + 3rdparty/glsl-optimizer/src/glsl/linker.cpp | 1650 +- 3rdparty/glsl-optimizer/src/glsl/linker.h | 70 + .../glsl-optimizer/src/glsl/loop_analysis.cpp | 28 + .../glsl-optimizer/src/glsl/loop_analysis.h | 23 + .../glsl-optimizer/src/glsl/loop_controls.cpp | 9 +- .../glsl-optimizer/src/glsl/loop_unroll.cpp | 39 + .../src/glsl/lower_clip_distance.cpp | 344 + .../src/glsl/lower_discard_flow.cpp | 144 + .../src/glsl/lower_if_to_cond_assign.cpp | 3 + .../src/glsl/lower_instructions.cpp | 127 +- .../glsl-optimizer/src/glsl/lower_jumps.cpp | 1 + .../src/glsl/lower_output_reads.cpp | 157 + .../src/glsl/lower_texture_projection.cpp | 99 - .../src/glsl/lower_ubo_reference.cpp | 313 + .../lower_variable_index_to_cond_assign.cpp | 2 +- .../src/glsl/lower_vec_index_to_swizzle.cpp | 22 +- .../glsl-optimizer/src/glsl/lower_vector.cpp | 2 +- 3rdparty/glsl-optimizer/src/glsl/main.cpp | 22 +- .../glsl-optimizer/src/glsl/msvc/.gitignore | 1 + .../src/glsl/msvc/mesaglsl2.vcproj | 60 +- .../glsl-optimizer/src/glsl/opt_algebraic.cpp | 38 +- .../src/glsl/opt_array_splitting.cpp | 407 + .../src/glsl/opt_constant_folding.cpp | 16 +- .../src/glsl/opt_constant_propagation.cpp | 29 +- .../src/glsl/opt_constant_variable.cpp | 18 +- .../src/glsl/opt_copy_propagation.cpp | 8 +- .../glsl/opt_copy_propagation_elements.cpp | 34 +- .../glsl-optimizer/src/glsl/opt_dead_code.cpp | 25 +- .../src/glsl/opt_dead_code_local.cpp | 160 +- .../src/glsl/opt_dead_functions.cpp | 7 +- .../src/glsl/opt_discard_simplification.cpp | 204 - .../src/glsl/opt_function_inlining.cpp | 117 +- .../src/glsl/opt_if_simplification.cpp | 13 + .../src/glsl/opt_noop_swizzle.cpp | 4 + .../src/glsl/opt_redundant_jumps.cpp | 4 + .../src/glsl/opt_structure_splitting.cpp | 54 +- .../src/glsl/opt_swizzle_swizzle.cpp | 4 + .../src/glsl/opt_tree_grafting.cpp | 54 +- 3rdparty/glsl-optimizer/src/glsl/ralloc.c | 44 +- 3rdparty/glsl-optimizer/src/glsl/ralloc.h | 59 + .../glsl-optimizer/src/glsl/s_expression.cpp | 36 +- .../src/glsl/standalone_scaffolding.cpp | 12 +- .../src/glsl/standalone_scaffolding.h | 4 + 3rdparty/glsl-optimizer/src/glsl/strtod.c | 3 +- .../xcode/mesaglsl2.xcodeproj/project.pbxproj | 110 +- .../glsl-optimizer/src/mapi/glapi/.gitignore | 11 - .../glsl-optimizer/src/mapi/glapi/glapi.h | 181 - .../glsl-optimizer/src/mapi/glapi/glthread.h | 20 - .../glsl-optimizer/src/mapi/mapi/u_compiler.h | 48 - .../glsl-optimizer/src/mapi/mapi/u_current.h | 87 - .../glsl-optimizer/src/mapi/mapi/u_thread.h | 201 - 3rdparty/glsl-optimizer/src/mesa/.gitignore | 6 +- .../glsl-optimizer/src/mesa/main/.gitignore | 6 +- .../glsl-optimizer/src/mesa/main/compiler.h | 71 +- .../glsl-optimizer/src/mesa/main/config.h | 107 +- .../glsl-optimizer/src/mesa/main/context.h | 266 +- 3rdparty/glsl-optimizer/src/mesa/main/core.h | 9 - 3rdparty/glsl-optimizer/src/mesa/main/dd.h | 1104 - .../glsl-optimizer/src/mesa/main/extensions.h | 96 - .../glsl-optimizer/src/mesa/main/formats.h | 270 - .../glsl-optimizer/src/mesa/main/glheader.h | 151 +- .../glsl-optimizer/src/mesa/main/glminimal.h | 398 + .../glsl-optimizer/src/mesa/main/imports.h | 354 +- .../glsl-optimizer/src/mesa/main/macros.h | 281 +- .../glsl-optimizer/src/mesa/main/mfeatures.h | 146 - .../glsl-optimizer/src/mesa/main/mtypes.h | 3000 +- .../glsl-optimizer/src/mesa/main/shaderobj.h | 137 - .../src/mesa/main/simple_list.h | 11 +- .../glsl-optimizer/src/mesa/main/uniforms.h | 208 - .../glsl-optimizer/src/mesa/main/version.h | 60 - .../glsl-optimizer/src/mesa/math/m_matrix.h | 212 - .../src/mesa/program/hash_table.c | 44 +- .../src/mesa/program/hash_table.h | 139 +- .../src/mesa/program/ir_to_mesa.h | 41 - .../src/mesa/program/prog_instruction.h | 360 - .../src/mesa/program/prog_parameter.h | 129 +- .../src/mesa/program/prog_statevars.h | 25 +- .../src/mesa/program/prog_uniform.h | 89 - .../src/mesa/program/symbol_table.c | 1 + .../tests/fragment/array-const-ir.txt | 94 +- .../tests/fragment/array-const-irES.txt | 94 +- .../tests/fragment/array-const-out.txt | 24 +- .../tests/fragment/array-const-outES.txt | 40 +- .../tests/fragment/array-constconst-ir.txt | 94 +- .../tests/fragment/array-constconst-irES.txt | 94 +- .../tests/fragment/array-constconst-out.txt | 24 +- .../tests/fragment/array-constconst-outES.txt | 40 +- .../glsl-optimizer/tests/fragment/ast-ir.txt | 88 +- .../glsl-optimizer/tests/fragment/ast-out.txt | 28 +- .../tests/fragment/basic-in.txt | 10 +- .../tests/fragment/basic-ir.txt | 14 +- .../tests/fragment/basic-irES.txt | 16 +- .../tests/fragment/basic-out.txt | 2 +- .../tests/fragment/bug-global-init-ir.txt | 10 +- .../tests/fragment/bug-global-init-out.txt | 5 +- .../tests/fragment/bug-inline-names-in.txt | 19 + .../tests/fragment/bug-inline-names-ir.txt | 36 + .../tests/fragment/bug-inline-names-out.txt | 6 + .../tests/fragment/bug-loop-null-from-ir.txt | 62 +- .../tests/fragment/bug-op-parens-ir.txt | 26 +- .../fragment/complex-alphabumpspec-ir.txt | 215 - .../fragment/complex-alphabumpspec-out.txt | 35 - .../fragment/complex-collectshadows-ir.txt | 191 - .../fragment/complex-collectshadows-irES.txt | 193 - .../fragment/complex-collectshadows-out.txt | 42 - .../fragment/complex-collectshadows-outES.txt | 65 - .../tests/fragment/complex-flare-ir.txt | 30 - .../tests/fragment/complex-flare-irES.txt | 32 - .../fragment/complex-fxaa-preset1-ir.txt | 609 - .../fragment/complex-fxaa-preset1-out.txt | 279 - .../fragment/complex-fxaa-preset3-ir.txt | 583 - .../fragment/complex-fxaa-preset3-out.txt | 285 - .../complex-fxaa3-11-consolepc-ir.txt | 320 - .../complex-fxaa3-11-consolepc-irES.txt | 317 - .../complex-fxaa3-11-consolepc-out.txt | 99 - .../complex-fxaa3-11-consolepc-outES.txt | 105 - .../fragment/complex-fxaa3-11-pc39-ir.txt | 1542 - .../fragment/complex-fxaa3-11-pc39-irES.txt | 1542 - .../fragment/complex-fxaa3-11-pc39-out.txt | 669 - .../fragment/complex-fxaa3-11-pc39-outES.txt | 773 - .../tests/fragment/complex-particle-ir.txt | 46 - .../tests/fragment/complex-particle-irES.txt | 46 - .../fragment/complex-prepasslight-ir.txt | 529 - .../fragment/complex-prepasslight-irES.txt | 529 - .../fragment/complex-prepasslight-out.txt | 87 - .../fragment/complex-prepasslight-outES.txt | 157 - .../tests/fragment/complex-treeleaf-ir.txt | 381 - .../tests/fragment/complex-treeleaf-irES.txt | 381 - .../tests/fragment/complex-treeleaf-out.txt | 51 - .../tests/fragment/complex-treeleaf-outES.txt | 73 - .../tests/fragment/derivatives-ir.txt | 342 +- .../tests/fragment/derivatives-irES.txt | 348 +- .../tests/fragment/derivatives-out.txt | 10 +- .../tests/fragment/derivatives-outES.txt | 20 +- .../tests/fragment/estest1-ir.txt | 66 +- .../tests/fragment/glsl120-basic-in.txt | 22 + .../tests/fragment/glsl120-basic-ir.txt | 40 + .../tests/fragment/glsl120-basic-out.txt | 13 + .../tests/fragment/glsl140-basic-in.txt | 10 + .../tests/fragment/glsl140-basic-ir.txt | 10 + .../tests/fragment/glsl140-basic-out.txt | 8 + .../tests/fragment/in-struct-ret-vals-ir.txt | 64 +- .../fragment/in-struct-ret-vals-irES.txt | 66 +- .../tests/fragment/in-struct-ret-vals-out.txt | 8 +- .../fragment/in-struct-ret-vals-outES.txt | 12 +- .../tests/fragment/in-vals-ret-vals-irES.txt | 50 +- .../tests/fragment/in-vals-ret-vals-outES.txt | 12 +- .../tests/fragment/intrinsics-ir.txt | 578 +- .../tests/fragment/intrinsics-irES.txt | 578 +- .../tests/fragment/intrinsics-out.txt | 148 +- .../tests/fragment/intrinsics-outES.txt | 182 +- .../tests/fragment/loop-for-inES.txt | 23 + .../tests/fragment/loop-for-irES.txt | 61 + .../tests/fragment/loop-for-outES.txt | 26 + .../fragment/loop-forafterdiscard-inES.txt | 24 + .../fragment/loop-forafterdiscard-irES.txt | 62 + .../fragment/loop-forafterdiscard-outES.txt | 29 + .../fragment/loop-forarounddiscard-inES.txt | 25 + .../fragment/loop-forarounddiscard-irES.txt | 64 + .../fragment/loop-forarounddiscard-outES.txt | 29 + .../tests/fragment/loop-forunbounded-inES.txt | 24 + .../tests/fragment/loop-forunbounded-irES.txt | 63 + .../fragment/loop-forunbounded-outES.txt | 35 + .../tests/fragment/nested-inlining-in.txt | 20 + .../tests/fragment/nested-inlining-ir.txt | 33 + .../tests/fragment/nested-inlining-out.txt | 20 + .../tests/fragment/opt-copyprop-struct-ir.txt | 28 +- .../fragment/opt-copyprop-struct-out.txt | 2 +- .../fragment/opt-copypropelems-swizzle-ir.txt | 28 +- .../opt-copypropelems-swizzle-out.txt | 14 +- .../tests/fragment/opt-dead-texloads-in.txt | 20 + .../tests/fragment/opt-dead-texloads-ir.txt | 25 + .../tests/fragment/opt-dead-texloads-out.txt | 10 + .../tests/fragment/opt-deadcode-ir.txt | 76 +- .../tests/fragment/opt-deadcode-out.txt | 4 +- .../tests/fragment/opt-deadcodestruct-ir.txt | 30 +- .../fragment/opt-grafting-precision-irES.txt | 42 +- .../fragment/opt-grafting-precision-outES.txt | 14 +- .../fragment/opt-inline-inoutstruct-ir.txt | 18 +- .../fragment/opt-movevars-sideeffect-inES.txt | 22 + .../fragment/opt-movevars-sideeffect-irES.txt | 48 + .../opt-movevars-sideeffect-outES.txt | 17 + .../opt-movevars-sideeffect2-inES.txt | 16 + .../opt-movevars-sideeffect2-irES.txt | 42 + .../opt-movevars-sideeffect2-outES.txt | 28 + .../fragment/opt-movevars-simple-inES.txt | 14 + .../fragment/opt-movevars-simple-irES.txt | 32 + .../fragment/opt-movevars-simple-outES.txt | 15 + .../tests/fragment/opt-vec-var-index-ir.txt | 48 +- .../tests/fragment/pp-basic-ir.txt | 16 +- .../tests/fragment/prec-inlineexpr1-irES.txt | 78 +- .../tests/fragment/prec-inlineexpr1-outES.txt | 16 +- .../tests/fragment/prec-inlineexpr2-irES.txt | 78 +- .../tests/fragment/prec-inlineexpr2-outES.txt | 16 +- .../tests/fragment/prec-temps-irES.txt | 158 +- .../tests/fragment/prec-temps-outES.txt | 16 +- .../tests/fragment/prec-tempssimple-irES.txt | 60 +- .../tests/fragment/prec-tempssimple-outES.txt | 14 +- .../tests/fragment/prec-treegrafting-inES.txt | 13 + .../tests/fragment/prec-treegrafting-irES.txt | 22 + .../fragment/prec-treegrafting-outES.txt | 14 + .../tests/fragment/small-float-in.txt | 6 + .../tests/fragment/small-float-ir.txt | 10 + .../tests/fragment/small-float-out.txt | 6 + .../fragment/struct-array-var-index-ir.txt | 30 +- .../tests/fragment/struct-unused-ir.txt | 8 +- .../tests/fragment/swizzle-writemask-ir.txt | 22 +- .../tests/fragment/swizzle-writemask-out.txt | 8 +- .../tests/fragment/syntax-irES.txt | 58 +- .../tests/fragment/ternary-ir.txt | 110 +- .../tests/fragment/ternary-irES.txt | 114 +- .../tests/fragment/ternary-out.txt | 58 +- .../tests/fragment/ternary-outES.txt | 56 +- .../tests/fragment/ternary-vec4-ir.txt | 232 +- .../tests/fragment/ternary-vec4-irES.txt | 232 +- .../tests/fragment/ternary-vec4-out.txt | 2 +- .../tests/fragment/ternary-vec4-outES.txt | 2 +- .../tests/fragment/tex2dlod-ir.txt | 50 +- .../tests/fragment/tex2dlod-irES.txt | 50 +- .../tests/fragment/tex2dlod-out.txt | 5 +- .../tests/fragment/tex2dlod-outES.txt | 9 +- .../tests/fragment/tex2dshadow-in.txt | 19 + .../tests/fragment/tex2dshadow-inES.txt | 20 + .../tests/fragment/tex2dshadow-ir.txt | 60 + .../tests/fragment/tex2dshadow-irES.txt | 61 + .../tests/fragment/tex2dshadow-out.txt | 7 + .../tests/fragment/tex2dshadow-outES.txt | 8 + .../tests/fragment/texProj-inES.txt | 20 + .../tests/fragment/texProj-irES.txt | 47 + .../tests/fragment/texProj-outES.txt | 12 + .../tests/fragment/types-writemask-ir.txt | 20 +- .../tests/fragment/types-writemask-out.txt | 8 +- .../fragment/unity-Bumped_Diffuse-ir.txt | 159 - .../fragment/unity-Bumped_Diffuse-out.txt | 18 - .../fragment/unity-Bumped_Diffuse1-ir.txt | 163 - .../fragment/unity-Bumped_Diffuse1-out.txt | 24 - .../fragment/unity-Bumped_Specular-ir.txt | 234 - .../fragment/unity-Bumped_Specular-out.txt | 35 - .../fragment/unity-Bumped_Specular1-ir.txt | 215 - .../fragment/unity-Bumped_Specular1-out.txt | 33 - .../fragment/unity-Bumped_Specular2-ir.txt | 320 - .../fragment/unity-Bumped_Specular2-out.txt | 30 - .../tests/fragment/unity-Decal-ir.txt | 167 - .../tests/fragment/unity-Decal-out.txt | 27 - .../tests/fragment/unity-Decal1-ir.txt | 176 - .../tests/fragment/unity-Decal1-out.txt | 28 - .../tests/fragment/unity-Decal2-ir.txt | 157 - .../tests/fragment/unity-Decal2-out.txt | 30 - .../tests/fragment/unity-Diffuse-ir.txt | 166 - .../tests/fragment/unity-Diffuse-out.txt | 19 - .../tests/fragment/unity-Diffuse1-ir.txt | 95 - .../tests/fragment/unity-Diffuse1-out.txt | 8 - .../tests/fragment/unity-Diffuse2-ir.txt | 281 - .../tests/fragment/unity-Diffuse2-out.txt | 22 - ...unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt | 150 - ...nity-Diffuse_Alpha_Shadowed_ZWrite-out.txt | 18 - .../fragment/unity-Diffuse_Detail-ir.txt | 197 - .../fragment/unity-Diffuse_Detail-out.txt | 28 - .../fragment/unity-Diffuse_Detail1-ir.txt | 102 - .../fragment/unity-Diffuse_Detail1-out.txt | 8 - .../unity-FX_Glass_Stained_BumpDistort-ir.txt | 95 - .../fragment/unity-FX_Water_(simple)-ir.txt | 116 - .../fragment/unity-FX_Water_(simple)-out.txt | 27 - .../tests/fragment/unity-Grab_Invert-ir.txt | 38 - ...ty-Hidden_Camera-DepthNormalTexture-ir.txt | 128 - ...y-Hidden_Camera-DepthNormalTexture-out.txt | 22 - ...y-Hidden_Camera-DepthNormalTexture1-ir.txt | 128 - ...-Hidden_Camera-DepthNormalTexture1-out.txt | 22 - .../unity-Hidden_Camera-DepthTexture-ir.txt | 52 - ...nity-Hidden_Color_Correction_Effect-ir.txt | 70 - .../unity-Hidden_Edge_Detect_X-ir.txt | 84 - .../unity-Hidden_Edge_Detect_X-out.txt | 22 - .../fragment/unity-Hidden_GlowConeTap-ir.txt | 66 - .../fragment/unity-Hidden_GlowConeTap-out.txt | 15 - .../unity-Hidden_Glow_Downsample-ir.txt | 85 - .../unity-Hidden_Glow_Downsample-out.txt | 19 - .../unity-Hidden_Grayscale_Effect-ir.txt | 75 - .../unity-Hidden_Grayscale_Effect-out.txt | 16 - ...Hidden_Internal-CombineDepthNormals-ir.txt | 143 - ...idden_Internal-CombineDepthNormals-out.txt | 32 - ...nity-Hidden_Internal-GUITextureBlit-ir.txt | 60 - ...ity-Hidden_Internal-GUITextureBlit-out.txt | 10 - ...nity-Hidden_Internal-GUITextureClip-ir.txt | 60 - ...ity-Hidden_Internal-GUITextureClip-out.txt | 12 - .../unity-Hidden_Internal-Halo-ir.txt | 51 - ...dden_Internal-PrePassCollectShadows-ir.txt | 191 - ...den_Internal-PrePassCollectShadows-out.txt | 42 - ...ity-Hidden_Internal-PrePassLighting-ir.txt | 408 - ...ty-Hidden_Internal-PrePassLighting-out.txt | 68 - .../unity-Hidden_Noise_Shader_RGB-ir.txt | 75 - .../unity-Hidden_Noise_Shader_RGB-out.txt | 15 - .../unity-Hidden_Noise_Shader_YUV-ir.txt | 96 - .../unity-Hidden_Noise_Shader_YUV-out.txt | 22 - .../unity-Hidden_Sepiatone_Effect-ir.txt | 59 - .../unity-Hidden_Sepiatone_Effect-out.txt | 11 - .../unity-Hidden_Shadow-ScreenBlur-ir.txt | 217 - .../unity-Hidden_Shadow-ScreenBlur-out.txt | 44 - .../unity-Hidden_ShowDepthNTexture-ir.txt | 132 - .../unity-Hidden_ShowDepthNTexture-out.txt | 23 - .../unity-Hidden_ShowDepthTexture-ir.txt | 72 - .../unity-Hidden_ShowDepthTexture-out.txt | 13 - ...-Hidden_TerrainEngine_BillboardTree-ir.txt | 66 - ...Hidden_TerrainEngine_BillboardTree-out.txt | 14 - ...e_Details_BillboardWavingDoublePass-ir.txt | 170 - ..._Details_BillboardWavingDoublePass-out.txt | 27 - ..._Details_BillboardWavingDoublePass1-ir.txt | 189 - ...Details_BillboardWavingDoublePass1-out.txt | 29 - ..._Details_BillboardWavingDoublePass2-ir.txt | 108 - ...den_TerrainEngine_Details_Vertexlit-ir.txt | 175 - ...en_TerrainEngine_Details_Vertexlit-out.txt | 18 - ...en_TerrainEngine_Details_Vertexlit1-ir.txt | 290 - ...n_TerrainEngine_Details_Vertexlit1-out.txt | 21 - ...rainEngine_Details_WavingDoublePass-ir.txt | 192 - ...ainEngine_Details_WavingDoublePass-out.txt | 30 - ...ainEngine_Details_WavingDoublePass1-ir.txt | 207 - ...inEngine_Details_WavingDoublePass1-out.txt | 31 - ...ainEngine_Details_WavingDoublePass2-ir.txt | 156 - ...inEngine_Details_WavingDoublePass2-out.txt | 26 - ..._My_Soft_Occlusion_Leaves_rendertex-ir.txt | 44 - ...ngine_Soft_Occlusion_Bark_rendertex-ir.txt | 56 - ...gine_Soft_Occlusion_Bark_rendertex-out.txt | 9 - ...ine_Soft_Occlusion_Leaves_rendertex-ir.txt | 70 - ...ne_Soft_Occlusion_Leaves_rendertex-out.txt | 18 - ...ainEngine_Splatmap_Lightmap-AddPass-ir.txt | 221 - ...inEngine_Splatmap_Lightmap-AddPass-out.txt | 27 - ...inEngine_Splatmap_Lightmap-AddPass1-ir.txt | 188 - ...nEngine_Splatmap_Lightmap-AddPass1-out.txt | 26 - ...nEngine_Splatmap_Lightmap-FirstPass-ir.txt | 188 - ...Engine_Splatmap_Lightmap-FirstPass-out.txt | 26 - ...Engine_Splatmap_Lightmap-FirstPass1-ir.txt | 333 - ...ngine_Splatmap_Lightmap-FirstPass1-out.txt | 29 - ...y-Hidden_Tree_Bark_Shader_Rendertex-ir.txt | 54 - ...-Hidden_Tree_Bark_Shader_Rendertex-out.txt | 12 - ...y-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt | 65 - ...-Hidden_Tree_Leaf_Shader_Rendertex-out.txt | 18 - ...y-Hidden_Tree_Optimized_Bark_Shader-ir.txt | 243 - ...-Hidden_Tree_Optimized_Bark_Shader-out.txt | 34 - ...-Hidden_Tree_Optimized_Bark_Shader1-ir.txt | 122 - ...Hidden_Tree_Optimized_Bark_Shader1-out.txt | 10 - ...y-Hidden_Tree_Optimized_Leaf_Shader-ir.txt | 361 - ...-Hidden_Tree_Optimized_Leaf_Shader-out.txt | 45 - ...-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt | 384 - ...Hidden_Tree_Optimized_Leaf_Shader1-out.txt | 51 - .../unity-Hidden_Twirt_Effect_Shader-ir.txt | 91 - .../fragment/unity-Hidden_Twist_Effect-ir.txt | 287 - .../unity-Hidden_Twist_Effect-out.txt | 24 - ..._Shaders_Lightmapped_Bumped_Diffuse-ir.txt | 185 - ...Shaders_Lightmapped_Bumped_Diffuse-out.txt | 23 - ...Shaders_Lightmapped_Bumped_Diffuse2-ir.txt | 178 - ...haders_Lightmapped_Bumped_Diffuse2-out.txt | 32 - ...-Legacy_Shaders_Lightmapped_Diffuse-ir.txt | 196 - ...Legacy_Shaders_Lightmapped_Diffuse-out.txt | 22 - .../fragment/unity-MobileBumpSpec-irES.txt | 187 - .../fragment/unity-MobileBumpSpec-outES.txt | 31 - ...ity-Nature_My_Soft_Occlusion_Leaves-ir.txt | 44 - .../unity-Nature_Soft_Occlusion_Bark-ir.txt | 187 - .../unity-Nature_Soft_Occlusion_Bark-out.txt | 22 - .../unity-Nature_Soft_Occlusion_Bark1-ir.txt | 155 - .../unity-Nature_Soft_Occlusion_Bark1-out.txt | 17 - .../unity-Nature_Soft_Occlusion_Bark2-ir.txt | 117 - .../unity-Nature_Soft_Occlusion_Bark2-out.txt | 8 - .../unity-Nature_Soft_Occlusion_Bark3-ir.txt | 311 - .../unity-Nature_Soft_Occlusion_Leaves-ir.txt | 183 - ...unity-Nature_Soft_Occlusion_Leaves-out.txt | 31 - ...unity-Nature_Soft_Occlusion_Leaves1-ir.txt | 147 - ...nity-Nature_Soft_Occlusion_Leaves1-out.txt | 27 - ...unity-Nature_Soft_Occlusion_Leaves2-ir.txt | 292 - ...nity-Nature_Soft_Occlusion_Leaves2-out.txt | 30 - ...unity-Nature_Soft_Occlusion_Leaves3-ir.txt | 137 - ...nity-Nature_Soft_Occlusion_Leaves3-out.txt | 18 - ...ty-Nature_Vegetation_Two_Pass_unlit-ir.txt | 60 - .../fragment/unity-Parallax_Diffuse-ir.txt | 246 - .../fragment/unity-Parallax_Diffuse-out.txt | 32 - .../fragment/unity-Parallax_Diffuse1-ir.txt | 217 - .../fragment/unity-Parallax_Diffuse1-out.txt | 34 - .../fragment/unity-Parallax_Diffuse2-ir.txt | 362 - .../fragment/unity-Parallax_Diffuse2-out.txt | 37 - .../fragment/unity-Parallax_Specular-ir.txt | 292 - .../fragment/unity-Parallax_Specular-out.txt | 49 - .../fragment/unity-Particles_Additive-ir.txt | 45 - .../unity-Particles_Additive_(Soft)-ir.txt | 51 - .../unity-Particles_Additive_(Soft)-out.txt | 11 - ...Particles_Alpha_Blended_Premultiply-ir.txt | 44 - .../fragment/unity-Particles_Multiply-ir.txt | 52 - .../unity-Particles_Multiply_(Double)-ir.txt | 59 - .../unity-Particles_Multiply_(Double)-out.txt | 11 - .../unity-Particles__Additive-Multiply-ir.txt | 56 - ...unity-Particles__Additive-Multiply-out.txt | 12 - .../unity-Reflective_Bumped_Diffuse-ir.txt | 199 - .../unity-Reflective_Bumped_Diffuse-out.txt | 26 - .../unity-Reflective_Bumped_Diffuse1-ir.txt | 386 - .../unity-Reflective_Bumped_Diffuse1-out.txt | 51 - .../unity-Reflective_Bumped_Specular-ir.txt | 249 - .../unity-Reflective_Bumped_Specular-out.txt | 38 - .../unity-Reflective_Bumped_Specular1-ir.txt | 189 - .../unity-Reflective_Bumped_Specular1-out.txt | 19 - .../unity-Reflective_Bumped_Specular2-ir.txt | 253 - .../unity-Reflective_Bumped_Specular2-out.txt | 51 - .../unity-Reflective_Bumped_Unlit-ir.txt | 139 - .../unity-Reflective_Bumped_Unlit-out.txt | 23 - .../fragment/unity-Reflective_Diffuse-ir.txt | 206 - .../fragment/unity-Reflective_Diffuse-out.txt | 25 - .../fragment/unity-Reflective_Diffuse1-ir.txt | 167 - .../unity-Reflective_Diffuse1-out.txt | 26 - .../unity-Reflective_Parallax_Diffuse-ir.txt | 282 - .../unity-Reflective_Parallax_Diffuse-out.txt | 40 - .../unity-Reflective_Parallax_Diffuse1-ir.txt | 292 - ...unity-Reflective_Parallax_Diffuse1-out.txt | 57 - .../unity-Reflective_Parallax_Specular-ir.txt | 290 - ...unity-Reflective_Parallax_Specular-out.txt | 49 - ...unity-Reflective_Parallax_Specular1-ir.txt | 279 - ...nity-Reflective_Parallax_Specular1-out.txt | 47 - .../fragment/unity-Reflective_Specular-ir.txt | 245 - .../unity-Reflective_Specular-out.txt | 35 - .../unity-Reflective_Specular1-ir.txt | 121 - .../unity-Reflective_Specular1-out.txt | 9 - .../unity-Reflective_Specular2-ir.txt | 179 - .../unity-Reflective_Specular2-out.txt | 29 - .../fragment/unity-RenderFX_Skybox-ir.txt | 60 - .../fragment/unity-RenderFX_Skybox-out.txt | 12 - .../unity-RenderFX_Skybox_Cubed-ir.txt | 50 - .../unity-RenderFX_Skybox_Cubed-out.txt | 12 - .../unity-Self-Illumin_Bumped_Diffuse-ir.txt | 219 - .../unity-Self-Illumin_Bumped_Diffuse-out.txt | 28 - .../unity-Self-Illumin_Bumped_Diffuse1-ir.txt | 170 - ...unity-Self-Illumin_Bumped_Diffuse1-out.txt | 18 - .../unity-Self-Illumin_Bumped_Diffuse2-ir.txt | 180 - ...unity-Self-Illumin_Bumped_Diffuse2-out.txt | 30 - .../unity-Self-Illumin_Bumped_Specular-ir.txt | 177 - ...unity-Self-Illumin_Bumped_Specular-out.txt | 19 - ...unity-Self-Illumin_Bumped_Specular1-ir.txt | 192 - ...nity-Self-Illumin_Bumped_Specular1-out.txt | 35 - .../unity-Self-Illumin_Diffuse-ir.txt | 166 - .../unity-Self-Illumin_Diffuse-out.txt | 17 - .../unity-Self-Illumin_Diffuse1-ir.txt | 298 - .../unity-Self-Illumin_Diffuse1-out.txt | 28 - ...unity-Self-Illumin_Parallax_Diffuse-ir.txt | 269 - ...nity-Self-Illumin_Parallax_Diffuse-out.txt | 37 - ...nity-Self-Illumin_Parallax_Diffuse1-ir.txt | 237 - ...ity-Self-Illumin_Parallax_Diffuse1-out.txt | 32 - ...nity-Self-Illumin_Parallax_Diffuse2-ir.txt | 239 - ...ity-Self-Illumin_Parallax_Diffuse2-out.txt | 38 - ...nity-Self-Illumin_Parallax_Specular-ir.txt | 285 - ...ity-Self-Illumin_Parallax_Specular-out.txt | 48 - ...ity-Self-Illumin_Parallax_Specular1-ir.txt | 288 - ...ty-Self-Illumin_Parallax_Specular1-out.txt | 49 - .../unity-Self-Illumin_Specular-ir.txt | 237 - .../unity-Self-Illumin_Specular-out.txt | 34 - .../unity-Self-Illumin_Specular1-ir.txt | 113 - .../unity-Self-Illumin_Specular1-out.txt | 9 - .../unity-Self-Illumin_Specular2-ir.txt | 310 - .../unity-Self-Illumin_Specular2-out.txt | 33 - .../tests/fragment/unity-Specular-ir.txt | 226 - .../tests/fragment/unity-Specular-out.txt | 32 - .../tests/fragment/unity-Specular1-ir.txt | 102 - .../tests/fragment/unity-Specular1-out.txt | 9 - .../tests/fragment/unity-Specular2-ir.txt | 293 - .../tests/fragment/unity-Specular2-out.txt | 25 - .../tests/fragment/unity-Surface_2UV-ir.txt | 186 - .../tests/fragment/unity-Surface_2UV-out.txt | 22 - .../tests/fragment/unity-Surface_2UV1-ir.txt | 135 - .../tests/fragment/unity-Surface_2UV1-out.txt | 19 - .../unity-Surface_Colored_Specular-ir.txt | 228 - .../unity-Surface_Colored_Specular-out.txt | 26 - .../unity-Surface_Colored_Specular1-ir.txt | 98 - .../unity-Surface_Colored_Specular1-out.txt | 8 - .../fragment/unity-Surface_Custom_Data-ir.txt | 158 - .../unity-Surface_Custom_Data-out.txt | 16 - .../unity-Surface_Custom_Data1-ir.txt | 144 - .../unity-Surface_Custom_Data1-out.txt | 13 - .../unity-Surface_Custom_Data2-ir.txt | 270 - .../unity-Surface_Custom_Data2-out.txt | 18 - .../fragment/unity-Surface_DecalAdd-ir.txt | 147 - .../fragment/unity-Surface_DecalAdd-out.txt | 14 - .../unity-Surface_DecalAddBump3-ir.txt | 187 - .../unity-Surface_DecalAddBump3-out.txt | 22 - .../unity-Surface_DecalAddBump5-ir.txt | 179 - .../unity-Surface_DecalAddBump5-out.txt | 22 - .../unity-Surface_Diffuse_Wrapped-ir.txt | 149 - .../unity-Surface_Diffuse_Wrapped-out.txt | 14 - .../tests/fragment/unity-Surface_Rim-ir.txt | 261 - .../tests/fragment/unity-Surface_Rim-out.txt | 13 - .../tests/fragment/unity-Surface_Rim1-ir.txt | 272 - .../tests/fragment/unity-Surface_Rim1-out.txt | 21 - .../tests/fragment/unity-Surface_Rim2-ir.txt | 312 - .../tests/fragment/unity-Surface_Rim2-out.txt | 24 - .../fragment/unity-Surface_Rim_Bump-ir.txt | 319 - .../fragment/unity-Surface_Rim_Bump-out.txt | 25 - .../fragment/unity-Surface_Rim_Bump1-ir.txt | 301 - .../fragment/unity-Surface_Rim_Bump1-out.txt | 23 - .../fragment/unity-Surface_ScreenPos-ir.txt | 180 - .../fragment/unity-Surface_ScreenPos-out.txt | 18 - .../fragment/unity-Surface_ScreenPos1-ir.txt | 162 - .../fragment/unity-Surface_ScreenPos1-out.txt | 16 - .../fragment/unity-Surface_ScreenPos2-ir.txt | 97 - .../fragment/unity-Surface_ScreenPos2-out.txt | 8 - .../unity-Surface_ScreenPosAlbedo-ir.txt | 94 - .../unity-Surface_ScreenPosAlbedo-out.txt | 8 - .../unity-Surface_ScreenPosAlbedo1-ir.txt | 135 - .../unity-Surface_ScreenPosAlbedo1-out.txt | 18 - .../fragment/unity-Surface_Slices-ir.txt | 201 - .../fragment/unity-Surface_Slices-out.txt | 32 - .../fragment/unity-Surface_Slices1-ir.txt | 150 - .../fragment/unity-Surface_Slices1-out.txt | 27 - .../fragment/unity-Surface_Slices2-ir.txt | 295 - .../fragment/unity-Surface_Slices2-out.txt | 30 - .../fragment/unity-Surface_Slices3-ir.txt | 325 - .../fragment/unity-Surface_Slices3-out.txt | 51 - .../fragment/unity-Surface_WorldRefl-ir.txt | 138 - .../fragment/unity-Surface_WorldRefl-out.txt | 13 - .../fragment/unity-Surface_WorldRefl1-ir.txt | 87 - .../fragment/unity-Surface_WorldRefl1-out.txt | 8 - .../fragment/unity-Test_CgNormals-ir.txt | 35 - .../fragment/unity-Test_FontShaderCull-ir.txt | 39 - ...unity-Test_VertexShaderDepthTexture-ir.txt | 50 - .../unity-Test_VertexShaderTexture-ir.txt | 38 - .../unity-Tests_Blend_Many_Textures-ir.txt | 132 - .../fragment/unity-Tests_Fwd-Def-Vert-ir.txt | 146 - .../fragment/unity-Tests_Fwd-Def-Vert-out.txt | 11 - .../fragment/unity-Tests_Fwd-Def-Vert1-ir.txt | 84 - .../unity-Tests_Fwd-Def-Vert1-out.txt | 8 - .../fragment/unity-TexGen_Cube_Refl-ir.txt | 44 - .../tests/fragment/unity-Toon_Basic-ir.txt | 59 - .../tests/fragment/unity-Toon_Lighted-ir.txt | 163 - .../tests/fragment/unity-Toon_Lighted-out.txt | 21 - .../unity-Transparent_Bumped_Specular-ir.txt | 229 - .../unity-Transparent_Bumped_Specular-out.txt | 38 - ...y-Transparent_Cutout_Bumped_Diffuse-ir.txt | 178 - ...-Transparent_Cutout_Bumped_Diffuse-out.txt | 32 - ...-Transparent_Cutout_Bumped_Diffuse1-ir.txt | 174 - ...Transparent_Cutout_Bumped_Diffuse1-out.txt | 32 - ...-Transparent_Cutout_Bumped_Specular-ir.txt | 180 - ...Transparent_Cutout_Bumped_Specular-out.txt | 35 - ...Transparent_Cutout_Bumped_Specular1-ir.txt | 186 - ...ransparent_Cutout_Bumped_Specular1-out.txt | 39 - .../unity-Transparent_Cutout_Diffuse-ir.txt | 198 - .../unity-Transparent_Cutout_Diffuse-out.txt | 32 - .../unity-Transparent_Cutout_Specular-ir.txt | 196 - .../unity-Transparent_Cutout_Specular-out.txt | 36 - .../unity-Transparent_Cutout_Specular1-ir.txt | 219 - ...unity-Transparent_Cutout_Specular1-out.txt | 44 - .../unity-Transparent_Cutout_Specular2-ir.txt | 304 - ...unity-Transparent_Cutout_Specular2-out.txt | 37 - .../fragment/unity-Transparent_Diffuse-ir.txt | 169 - .../unity-Transparent_Diffuse-out.txt | 20 - .../unity-Transparent_Specular-ir.txt | 194 - .../unity-Transparent_Specular-out.txt | 29 - .../fragment/unity-TreeCreatorLeavesRT-ir.txt | 158 - .../unity-TreeCreatorLeavesRT-out.txt | 55 - .../unity-Tree_Editor_Bark_Shader-ir.txt | 214 - .../unity-Tree_Editor_Bark_Shader-out.txt | 28 - .../unity-Tree_Editor_Bark_Shader1-ir.txt | 237 - .../unity-Tree_Editor_Bark_Shader1-out.txt | 34 - .../unity-Tree_Editor_Leaf_Shader-ir.txt | 383 - .../unity-Tree_Editor_Leaf_Shader-out.txt | 54 - .../unity-Tree_Editor_Leaf_Shader1-ir.txt | 383 - .../unity-Tree_Editor_Leaf_Shader1-out.txt | 57 - .../fragment/unity-Vertex_Colored-ir.txt | 55 - .../fragment/unity-currently_adapted-ir.txt | 92 - .../fragment/unity-currently_adapted-out.txt | 24 - .../tests/fragment/varyings-ir.txt | 42 +- .../tests/fragment/varyings-irES.txt | 44 +- .../tests/fragment/vface-ir.txt | 28 +- .../tests/fragment/vface-irES.txt | 28 +- .../glsl-optimizer/tests/fragment/vpos-ir.txt | 34 +- .../tests/fragment/vpos-irES.txt | 34 +- ...bumpspec-in.txt => z-alphabumpspec-in.txt} | 0 .../tests/fragment/z-alphabumpspec-ir.txt | 215 + .../tests/fragment/z-alphabumpspec-out.txt | 32 + ...shadows-in.txt => z-collectshadows-in.txt} | 0 ...ows-inES.txt => z-collectshadows-inES.txt} | 0 .../tests/fragment/z-collectshadows-ir.txt | 191 + .../tests/fragment/z-collectshadows-irES.txt | 193 + .../tests/fragment/z-collectshadows-out.txt | 42 + .../tests/fragment/z-collectshadows-outES.txt | 65 + .../{complex-flare-in.txt => z-flare-in.txt} | 0 ...omplex-flare-inES.txt => z-flare-inES.txt} | 0 .../tests/fragment/z-flare-ir.txt | 30 + .../tests/fragment/z-flare-irES.txt | 32 + ...{complex-flare-out.txt => z-flare-out.txt} | 0 ...plex-flare-outES.txt => z-flare-outES.txt} | 0 ...a-preset1-in.txt => z-fxaa-preset1-in.txt} | 0 .../tests/fragment/z-fxaa-preset1-ir.txt | 603 + .../tests/fragment/z-fxaa-preset1-out.txt | 269 + ...a-preset3-in.txt => z-fxaa-preset3-in.txt} | 0 .../tests/fragment/z-fxaa-preset3-ir.txt | 577 + .../tests/fragment/z-fxaa-preset3-out.txt | 269 + ...epc-in.txt => z-fxaa3-11-consolepc-in.txt} | 0 ...inES.txt => z-fxaa3-11-consolepc-inES.txt} | 0 .../fragment/z-fxaa3-11-consolepc-ir.txt | 314 + .../fragment/z-fxaa3-11-consolepc-irES.txt | 311 + .../fragment/z-fxaa3-11-consolepc-out.txt | 70 + .../fragment/z-fxaa3-11-consolepc-outES.txt | 84 + ...-11-pc39-in.txt => z-fxaa3-11-pc39-in.txt} | 0 ...pc39-inES.txt => z-fxaa3-11-pc39-inES.txt} | 0 .../tests/fragment/z-fxaa3-11-pc39-ir.txt | 1476 + .../tests/fragment/z-fxaa3-11-pc39-irES.txt | 1476 + .../tests/fragment/z-fxaa3-11-pc39-out.txt | 553 + .../tests/fragment/z-fxaa3-11-pc39-outES.txt | 657 + ...plex-particle-in.txt => z-particle-in.txt} | 0 ...-particle-inES.txt => z-particle-inES.txt} | 0 .../tests/fragment/z-particle-ir.txt | 46 + .../tests/fragment/z-particle-irES.txt | 46 + ...ex-particle-out.txt => z-particle-out.txt} | 0 ...article-outES.txt => z-particle-outES.txt} | 0 ...passlight-in.txt => z-prepasslight-in.txt} | 0 ...light-inES.txt => z-prepasslight-inES.txt} | 0 .../tests/fragment/z-prepasslight-ir.txt | 529 + .../tests/fragment/z-prepasslight-irES.txt | 529 + .../tests/fragment/z-prepasslight-out.txt | 89 + .../tests/fragment/z-prepasslight-outES.txt | 161 + ...plex-treeleaf-in.txt => z-treeleaf-in.txt} | 0 ...-treeleaf-inES.txt => z-treeleaf-inES.txt} | 0 .../tests/fragment/z-treeleaf-ir.txt | 381 + .../tests/fragment/z-treeleaf-irES.txt | 381 + .../tests/fragment/z-treeleaf-out.txt | 45 + .../tests/fragment/z-treeleaf-outES.txt | 71 + .../tests/fragment/z-treeleafloop-inES.txt | 81 + .../tests/fragment/z-treeleafloop-irES.txt | 167 + .../tests/fragment/z-treeleafloop-outES.txt | 85 + ...ffuse-in.txt => zun-Bumped_Diffuse-in.txt} | 0 .../tests/fragment/zun-Bumped_Diffuse-ir.txt | 159 + .../tests/fragment/zun-Bumped_Diffuse-out.txt | 16 + ...use1-in.txt => zun-Bumped_Diffuse1-in.txt} | 0 .../tests/fragment/zun-Bumped_Diffuse1-ir.txt | 163 + .../fragment/zun-Bumped_Diffuse1-out.txt | 24 + ...ular-in.txt => zun-Bumped_Specular-in.txt} | 0 .../tests/fragment/zun-Bumped_Specular-ir.txt | 234 + .../fragment/zun-Bumped_Specular-out.txt | 33 + ...ar1-in.txt => zun-Bumped_Specular1-in.txt} | 0 .../fragment/zun-Bumped_Specular1-ir.txt | 215 + .../fragment/zun-Bumped_Specular1-out.txt | 31 + ...ar2-in.txt => zun-Bumped_Specular2-in.txt} | 0 .../fragment/zun-Bumped_Specular2-ir.txt | 320 + .../fragment/zun-Bumped_Specular2-out.txt | 30 + .../{unity-Decal-in.txt => zun-Decal-in.txt} | 0 .../tests/fragment/zun-Decal-ir.txt | 167 + .../tests/fragment/zun-Decal-out.txt | 27 + ...{unity-Decal1-in.txt => zun-Decal1-in.txt} | 0 .../tests/fragment/zun-Decal1-ir.txt | 176 + .../tests/fragment/zun-Decal1-out.txt | 28 + ...{unity-Decal2-in.txt => zun-Decal2-in.txt} | 0 .../tests/fragment/zun-Decal2-ir.txt | 157 + .../tests/fragment/zun-Decal2-out.txt | 30 + ...nity-Diffuse-in.txt => zun-Diffuse-in.txt} | 0 .../tests/fragment/zun-Diffuse-ir.txt | 166 + .../tests/fragment/zun-Diffuse-out.txt | 19 + ...ty-Diffuse1-in.txt => zun-Diffuse1-in.txt} | 0 .../tests/fragment/zun-Diffuse1-ir.txt | 95 + .../tests/fragment/zun-Diffuse1-out.txt | 8 + ...ty-Diffuse2-in.txt => zun-Diffuse2-in.txt} | 0 .../tests/fragment/zun-Diffuse2-ir.txt | 281 + .../tests/fragment/zun-Diffuse2-out.txt | 22 + ... zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt} | 0 .../zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt | 150 + .../zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt | 19 + ...etail-in.txt => zun-Diffuse_Detail-in.txt} | 0 .../tests/fragment/zun-Diffuse_Detail-ir.txt | 197 + .../tests/fragment/zun-Diffuse_Detail-out.txt | 26 + ...ail1-in.txt => zun-Diffuse_Detail1-in.txt} | 0 .../tests/fragment/zun-Diffuse_Detail1-ir.txt | 102 + .../fragment/zun-Diffuse_Detail1-out.txt | 8 + ...> zun-FX_Glass_Stained_BumpDistort-in.txt} | 0 .../zun-FX_Glass_Stained_BumpDistort-ir.txt | 95 + ... zun-FX_Glass_Stained_BumpDistort-out.txt} | 10 +- ...e)-in.txt => zun-FX_Water_(simple)-in.txt} | 0 .../fragment/zun-FX_Water_(simple)-ir.txt | 116 + .../fragment/zun-FX_Water_(simple)-out.txt | 19 + ...b_Invert-in.txt => zun-Grab_Invert-in.txt} | 0 .../tests/fragment/zun-Grab_Invert-ir.txt | 38 + ...Invert-out.txt => zun-Grab_Invert-out.txt} | 0 ...n-Hidden_Camera-DepthNormalTexture-in.txt} | 0 ...un-Hidden_Camera-DepthNormalTexture-ir.txt | 128 + ...n-Hidden_Camera-DepthNormalTexture-out.txt | 22 + ...-Hidden_Camera-DepthNormalTexture1-in.txt} | 0 ...n-Hidden_Camera-DepthNormalTexture1-ir.txt | 128 + ...-Hidden_Camera-DepthNormalTexture1-out.txt | 22 + ... => zun-Hidden_Camera-DepthTexture-in.txt} | 0 .../zun-Hidden_Camera-DepthTexture-ir.txt | 52 + ...=> zun-Hidden_Camera-DepthTexture-out.txt} | 6 +- ...zun-Hidden_Color_Correction_Effect-in.txt} | 0 .../zun-Hidden_Color_Correction_Effect-ir.txt | 70 + ...un-Hidden_Color_Correction_Effect-out.txt} | 0 ...in.txt => zun-Hidden_Edge_Detect_X-in.txt} | 0 .../fragment/zun-Hidden_Edge_Detect_X-ir.txt | 84 + .../fragment/zun-Hidden_Edge_Detect_X-out.txt | 18 + ...p-in.txt => zun-Hidden_GlowConeTap-in.txt} | 0 .../fragment/zun-Hidden_GlowConeTap-ir.txt | 66 + .../fragment/zun-Hidden_GlowConeTap-out.txt | 16 + ....txt => zun-Hidden_Glow_Downsample-in.txt} | 0 .../zun-Hidden_Glow_Downsample-ir.txt | 85 + .../zun-Hidden_Glow_Downsample-out.txt | 14 + ...txt => zun-Hidden_Grayscale_Effect-in.txt} | 0 .../zun-Hidden_Grayscale_Effect-ir.txt | 75 + .../zun-Hidden_Grayscale_Effect-out.txt | 16 + ...idden_Internal-CombineDepthNormals-in.txt} | 0 ...Hidden_Internal-CombineDepthNormals-ir.txt | 143 + ...idden_Internal-CombineDepthNormals-out.txt | 32 + ...zun-Hidden_Internal-GUITextureBlit-in.txt} | 0 .../zun-Hidden_Internal-GUITextureBlit-ir.txt | 60 + ...zun-Hidden_Internal-GUITextureBlit-out.txt | 10 + ...zun-Hidden_Internal-GUITextureClip-in.txt} | 0 .../zun-Hidden_Internal-GUITextureClip-ir.txt | 60 + ...zun-Hidden_Internal-GUITextureClip-out.txt | 12 + ...in.txt => zun-Hidden_Internal-Halo-in.txt} | 0 .../fragment/zun-Hidden_Internal-Halo-ir.txt | 51 + ...t.txt => zun-Hidden_Internal-Halo-out.txt} | 0 ...den_Internal-PrePassCollectShadows-in.txt} | 0 ...dden_Internal-PrePassCollectShadows-ir.txt | 191 + ...den_Internal-PrePassCollectShadows-out.txt | 42 + ...un-Hidden_Internal-PrePassLighting-in.txt} | 0 ...zun-Hidden_Internal-PrePassLighting-ir.txt | 408 + ...un-Hidden_Internal-PrePassLighting-out.txt | 68 + ...txt => zun-Hidden_Noise_Shader_RGB-in.txt} | 0 .../zun-Hidden_Noise_Shader_RGB-ir.txt | 75 + .../zun-Hidden_Noise_Shader_RGB-out.txt | 15 + ...txt => zun-Hidden_Noise_Shader_YUV-in.txt} | 0 .../zun-Hidden_Noise_Shader_YUV-ir.txt | 96 + .../zun-Hidden_Noise_Shader_YUV-out.txt | 22 + ...txt => zun-Hidden_Sepiatone_Effect-in.txt} | 0 .../zun-Hidden_Sepiatone_Effect-ir.txt | 59 + .../zun-Hidden_Sepiatone_Effect-out.txt | 11 + ...xt => zun-Hidden_Shadow-ScreenBlur-in.txt} | 0 .../zun-Hidden_Shadow-ScreenBlur-ir.txt | 217 + .../zun-Hidden_Shadow-ScreenBlur-out.txt | 44 + ...xt => zun-Hidden_ShowDepthNTexture-in.txt} | 0 .../zun-Hidden_ShowDepthNTexture-ir.txt | 132 + .../zun-Hidden_ShowDepthNTexture-out.txt | 23 + ...txt => zun-Hidden_ShowDepthTexture-in.txt} | 0 .../zun-Hidden_ShowDepthTexture-ir.txt | 72 + .../zun-Hidden_ShowDepthTexture-out.txt | 13 + ...Hidden_TerrainEngine_BillboardTree-in.txt} | 0 ...-Hidden_TerrainEngine_BillboardTree-ir.txt | 66 + ...Hidden_TerrainEngine_BillboardTree-out.txt | 14 + ..._Details_BillboardWavingDoublePass-in.txt} | 0 ...e_Details_BillboardWavingDoublePass-ir.txt | 170 + ..._Details_BillboardWavingDoublePass-out.txt | 24 + ...Details_BillboardWavingDoublePass1-in.txt} | 0 ..._Details_BillboardWavingDoublePass1-ir.txt | 189 + ...Details_BillboardWavingDoublePass1-out.txt | 27 + ...Details_BillboardWavingDoublePass2-in.txt} | 0 ..._Details_BillboardWavingDoublePass2-ir.txt | 108 + ...etails_BillboardWavingDoublePass2-out.txt} | 6 +- ...en_TerrainEngine_Details_Vertexlit-in.txt} | 0 ...den_TerrainEngine_Details_Vertexlit-ir.txt | 175 + ...en_TerrainEngine_Details_Vertexlit-out.txt | 18 + ...n_TerrainEngine_Details_Vertexlit1-in.txt} | 0 ...en_TerrainEngine_Details_Vertexlit1-ir.txt | 290 + ...n_TerrainEngine_Details_Vertexlit1-out.txt | 21 + ...ainEngine_Details_WavingDoublePass-in.txt} | 0 ...rainEngine_Details_WavingDoublePass-ir.txt | 192 + ...ainEngine_Details_WavingDoublePass-out.txt | 25 + ...inEngine_Details_WavingDoublePass1-in.txt} | 0 ...ainEngine_Details_WavingDoublePass1-ir.txt | 207 + ...inEngine_Details_WavingDoublePass1-out.txt | 27 + ...inEngine_Details_WavingDoublePass2-in.txt} | 0 ...ainEngine_Details_WavingDoublePass2-ir.txt | 156 + ...inEngine_Details_WavingDoublePass2-out.txt | 24 + ...My_Soft_Occlusion_Leaves_rendertex-in.txt} | 0 ..._My_Soft_Occlusion_Leaves_rendertex-ir.txt | 44 + ...y_Soft_Occlusion_Leaves_rendertex-out.txt} | 0 ...gine_Soft_Occlusion_Bark_rendertex-in.txt} | 0 ...ngine_Soft_Occlusion_Bark_rendertex-ir.txt | 56 + ...gine_Soft_Occlusion_Bark_rendertex-out.txt | 9 + ...ne_Soft_Occlusion_Leaves_rendertex-in.txt} | 0 ...ine_Soft_Occlusion_Leaves_rendertex-ir.txt | 70 + ...ne_Soft_Occlusion_Leaves_rendertex-out.txt | 17 + ...inEngine_Splatmap_Lightmap-AddPass-in.txt} | 0 ...ainEngine_Splatmap_Lightmap-AddPass-ir.txt | 221 + ...inEngine_Splatmap_Lightmap-AddPass-out.txt | 27 + ...nEngine_Splatmap_Lightmap-AddPass1-in.txt} | 0 ...inEngine_Splatmap_Lightmap-AddPass1-ir.txt | 188 + ...nEngine_Splatmap_Lightmap-AddPass1-out.txt | 26 + ...Engine_Splatmap_Lightmap-FirstPass-in.txt} | 0 ...nEngine_Splatmap_Lightmap-FirstPass-ir.txt | 188 + ...Engine_Splatmap_Lightmap-FirstPass-out.txt | 26 + ...ngine_Splatmap_Lightmap-FirstPass1-in.txt} | 0 ...Engine_Splatmap_Lightmap-FirstPass1-ir.txt | 333 + ...ngine_Splatmap_Lightmap-FirstPass1-out.txt | 29 + ...-Hidden_Tree_Bark_Shader_Rendertex-in.txt} | 0 ...n-Hidden_Tree_Bark_Shader_Rendertex-ir.txt | 54 + ...-Hidden_Tree_Bark_Shader_Rendertex-out.txt | 9 + ...-Hidden_Tree_Leaf_Shader_Rendertex-in.txt} | 0 ...n-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt | 65 + ...-Hidden_Tree_Leaf_Shader_Rendertex-out.txt | 17 + ...-Hidden_Tree_Optimized_Bark_Shader-in.txt} | 0 ...n-Hidden_Tree_Optimized_Bark_Shader-ir.txt | 243 + ...-Hidden_Tree_Optimized_Bark_Shader-out.txt | 32 + ...Hidden_Tree_Optimized_Bark_Shader1-in.txt} | 0 ...-Hidden_Tree_Optimized_Bark_Shader1-ir.txt | 122 + ...Hidden_Tree_Optimized_Bark_Shader1-out.txt | 10 + ...-Hidden_Tree_Optimized_Leaf_Shader-in.txt} | 0 ...n-Hidden_Tree_Optimized_Leaf_Shader-ir.txt | 361 + ...-Hidden_Tree_Optimized_Leaf_Shader-out.txt | 39 + ...Hidden_Tree_Optimized_Leaf_Shader1-in.txt} | 0 ...-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt | 384 + ...Hidden_Tree_Optimized_Leaf_Shader1-out.txt | 43 + ... => zun-Hidden_Twirt_Effect_Shader-in.txt} | 0 .../zun-Hidden_Twirt_Effect_Shader-ir.txt | 91 + ...=> zun-Hidden_Twirt_Effect_Shader-out.txt} | 4 +- ...-in.txt => zun-Hidden_Twist_Effect-in.txt} | 0 .../fragment/zun-Hidden_Twist_Effect-ir.txt | 287 + .../fragment/zun-Hidden_Twist_Effect-out.txt | 26 + ...Shaders_Lightmapped_Bumped_Diffuse-in.txt} | 0 ..._Shaders_Lightmapped_Bumped_Diffuse-ir.txt | 185 + ...Shaders_Lightmapped_Bumped_Diffuse-out.txt | 23 + ...haders_Lightmapped_Bumped_Diffuse2-in.txt} | 0 ...Shaders_Lightmapped_Bumped_Diffuse2-ir.txt | 178 + ...haders_Lightmapped_Bumped_Diffuse2-out.txt | 32 + ...Legacy_Shaders_Lightmapped_Diffuse-in.txt} | 0 ...-Legacy_Shaders_Lightmapped_Diffuse-ir.txt | 196 + ...Legacy_Shaders_Lightmapped_Diffuse-out.txt | 20 + ...c-inES.txt => zun-MobileBumpSpec-inES.txt} | 0 .../fragment/zun-MobileBumpSpec-irES.txt | 187 + .../fragment/zun-MobileBumpSpec-outES.txt | 31 + ...un-Nature_My_Soft_Occlusion_Leaves-in.txt} | 0 ...zun-Nature_My_Soft_Occlusion_Leaves-ir.txt | 44 + ...n-Nature_My_Soft_Occlusion_Leaves-out.txt} | 0 ... => zun-Nature_Soft_Occlusion_Bark-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark-ir.txt | 187 + .../zun-Nature_Soft_Occlusion_Bark-out.txt | 20 + ...=> zun-Nature_Soft_Occlusion_Bark1-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark1-ir.txt | 155 + .../zun-Nature_Soft_Occlusion_Bark1-out.txt | 17 + ...=> zun-Nature_Soft_Occlusion_Bark2-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark2-ir.txt | 117 + .../zun-Nature_Soft_Occlusion_Bark2-out.txt | 10 + ...=> zun-Nature_Soft_Occlusion_Bark3-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark3-ir.txt | 311 + ...> zun-Nature_Soft_Occlusion_Bark3-out.txt} | 24 +- ...> zun-Nature_Soft_Occlusion_Leaves-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Leaves-ir.txt | 183 + .../zun-Nature_Soft_Occlusion_Leaves-out.txt | 26 + ... zun-Nature_Soft_Occlusion_Leaves1-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Leaves1-ir.txt | 147 + .../zun-Nature_Soft_Occlusion_Leaves1-out.txt | 25 + ... zun-Nature_Soft_Occlusion_Leaves2-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Leaves2-ir.txt | 292 + .../zun-Nature_Soft_Occlusion_Leaves2-out.txt | 28 + ... zun-Nature_Soft_Occlusion_Leaves3-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Leaves3-ir.txt | 137 + .../zun-Nature_Soft_Occlusion_Leaves3-out.txt | 18 + ...n-Nature_Vegetation_Two_Pass_unlit-in.txt} | 0 ...un-Nature_Vegetation_Two_Pass_unlit-ir.txt | 60 + ...-Nature_Vegetation_Two_Pass_unlit-out.txt} | 6 +- ...use-in.txt => zun-Parallax_Diffuse-in.txt} | 0 .../fragment/zun-Parallax_Diffuse-ir.txt | 246 + .../fragment/zun-Parallax_Diffuse-out.txt | 32 + ...e1-in.txt => zun-Parallax_Diffuse1-in.txt} | 0 .../fragment/zun-Parallax_Diffuse1-ir.txt | 217 + .../fragment/zun-Parallax_Diffuse1-out.txt | 34 + ...e2-in.txt => zun-Parallax_Diffuse2-in.txt} | 0 .../fragment/zun-Parallax_Diffuse2-ir.txt | 362 + .../fragment/zun-Parallax_Diffuse2-out.txt | 37 + ...ar-in.txt => zun-Parallax_Specular-in.txt} | 0 .../fragment/zun-Parallax_Specular-ir.txt | 292 + .../fragment/zun-Parallax_Specular-out.txt | 45 + ...e-in.txt => zun-Particles_Additive-in.txt} | 0 .../fragment/zun-Particles_Additive-ir.txt | 45 + ...out.txt => zun-Particles_Additive-out.txt} | 0 ...t => zun-Particles_Additive_(Soft)-in.txt} | 0 .../zun-Particles_Additive_(Soft)-ir.txt | 51 + .../zun-Particles_Additive_(Soft)-out.txt | 11 + ...articles_Alpha_Blended_Premultiply-in.txt} | 0 ...Particles_Alpha_Blended_Premultiply-ir.txt | 44 + ...rticles_Alpha_Blended_Premultiply-out.txt} | 0 ...y-in.txt => zun-Particles_Multiply-in.txt} | 0 .../fragment/zun-Particles_Multiply-ir.txt | 52 + ...out.txt => zun-Particles_Multiply-out.txt} | 0 ...=> zun-Particles_Multiply_(Double)-in.txt} | 0 .../zun-Particles_Multiply_(Double)-ir.txt | 59 + .../zun-Particles_Multiply_(Double)-out.txt | 11 + ...> zun-Particles__Additive-Multiply-in.txt} | 0 .../zun-Particles__Additive-Multiply-ir.txt | 56 + .../zun-Particles__Additive-Multiply-out.txt | 12 + ...t => zun-Reflective_Bumped_Diffuse-in.txt} | 0 .../zun-Reflective_Bumped_Diffuse-ir.txt | 199 + .../zun-Reflective_Bumped_Diffuse-out.txt | 26 + ... => zun-Reflective_Bumped_Diffuse1-in.txt} | 0 .../zun-Reflective_Bumped_Diffuse1-ir.txt | 386 + .../zun-Reflective_Bumped_Diffuse1-out.txt | 49 + ... => zun-Reflective_Bumped_Specular-in.txt} | 0 .../zun-Reflective_Bumped_Specular-ir.txt | 249 + .../zun-Reflective_Bumped_Specular-out.txt | 36 + ...=> zun-Reflective_Bumped_Specular1-in.txt} | 0 .../zun-Reflective_Bumped_Specular1-ir.txt | 189 + .../zun-Reflective_Bumped_Specular1-out.txt | 17 + ...=> zun-Reflective_Bumped_Specular2-in.txt} | 0 .../zun-Reflective_Bumped_Specular2-ir.txt | 253 + .../zun-Reflective_Bumped_Specular2-out.txt | 49 + ...txt => zun-Reflective_Bumped_Unlit-in.txt} | 0 .../zun-Reflective_Bumped_Unlit-ir.txt | 139 + .../zun-Reflective_Bumped_Unlit-out.txt | 27 + ...e-in.txt => zun-Reflective_Diffuse-in.txt} | 0 .../fragment/zun-Reflective_Diffuse-ir.txt | 206 + .../fragment/zun-Reflective_Diffuse-out.txt | 23 + ...-in.txt => zun-Reflective_Diffuse1-in.txt} | 0 .../fragment/zun-Reflective_Diffuse1-ir.txt | 167 + .../fragment/zun-Reflective_Diffuse1-out.txt | 26 + ...=> zun-Reflective_Parallax_Diffuse-in.txt} | 0 .../zun-Reflective_Parallax_Diffuse-ir.txt | 282 + .../zun-Reflective_Parallax_Diffuse-out.txt | 38 + ...> zun-Reflective_Parallax_Diffuse1-in.txt} | 0 .../zun-Reflective_Parallax_Diffuse1-ir.txt | 292 + .../zun-Reflective_Parallax_Diffuse1-out.txt | 55 + ...> zun-Reflective_Parallax_Specular-in.txt} | 0 .../zun-Reflective_Parallax_Specular-ir.txt | 290 + .../zun-Reflective_Parallax_Specular-out.txt | 47 + ... zun-Reflective_Parallax_Specular1-in.txt} | 0 .../zun-Reflective_Parallax_Specular1-ir.txt | 279 + .../zun-Reflective_Parallax_Specular1-out.txt | 45 + ...-in.txt => zun-Reflective_Specular-in.txt} | 0 .../fragment/zun-Reflective_Specular-ir.txt | 245 + .../fragment/zun-Reflective_Specular-out.txt | 33 + ...in.txt => zun-Reflective_Specular1-in.txt} | 0 .../fragment/zun-Reflective_Specular1-ir.txt | 121 + .../fragment/zun-Reflective_Specular1-out.txt | 9 + ...in.txt => zun-Reflective_Specular2-in.txt} | 0 .../fragment/zun-Reflective_Specular2-ir.txt | 179 + .../fragment/zun-Reflective_Specular2-out.txt | 29 + ...ybox-in.txt => zun-RenderFX_Skybox-in.txt} | 0 .../tests/fragment/zun-RenderFX_Skybox-ir.txt | 60 + .../fragment/zun-RenderFX_Skybox-out.txt | 12 + ...n.txt => zun-RenderFX_Skybox_Cubed-in.txt} | 0 .../fragment/zun-RenderFX_Skybox_Cubed-ir.txt | 50 + .../zun-RenderFX_Skybox_Cubed-out.txt | 12 + ...=> zun-Self-Illumin_Bumped_Diffuse-in.txt} | 0 .../zun-Self-Illumin_Bumped_Diffuse-ir.txt | 219 + .../zun-Self-Illumin_Bumped_Diffuse-out.txt | 26 + ...> zun-Self-Illumin_Bumped_Diffuse1-in.txt} | 0 .../zun-Self-Illumin_Bumped_Diffuse1-ir.txt | 170 + .../zun-Self-Illumin_Bumped_Diffuse1-out.txt | 16 + ...> zun-Self-Illumin_Bumped_Diffuse2-in.txt} | 0 .../zun-Self-Illumin_Bumped_Diffuse2-ir.txt | 180 + .../zun-Self-Illumin_Bumped_Diffuse2-out.txt | 30 + ...> zun-Self-Illumin_Bumped_Specular-in.txt} | 0 .../zun-Self-Illumin_Bumped_Specular-ir.txt | 177 + .../zun-Self-Illumin_Bumped_Specular-out.txt | 17 + ... zun-Self-Illumin_Bumped_Specular1-in.txt} | 0 .../zun-Self-Illumin_Bumped_Specular1-ir.txt | 192 + .../zun-Self-Illumin_Bumped_Specular1-out.txt | 35 + ...in.txt => zun-Self-Illumin_Diffuse-in.txt} | 0 .../fragment/zun-Self-Illumin_Diffuse-ir.txt | 166 + .../fragment/zun-Self-Illumin_Diffuse-out.txt | 17 + ...n.txt => zun-Self-Illumin_Diffuse1-in.txt} | 0 .../fragment/zun-Self-Illumin_Diffuse1-ir.txt | 298 + .../zun-Self-Illumin_Diffuse1-out.txt | 28 + ... zun-Self-Illumin_Parallax_Diffuse-in.txt} | 0 .../zun-Self-Illumin_Parallax_Diffuse-ir.txt | 269 + .../zun-Self-Illumin_Parallax_Diffuse-out.txt | 35 + ...zun-Self-Illumin_Parallax_Diffuse1-in.txt} | 0 .../zun-Self-Illumin_Parallax_Diffuse1-ir.txt | 237 + ...zun-Self-Illumin_Parallax_Diffuse1-out.txt | 32 + ...zun-Self-Illumin_Parallax_Diffuse2-in.txt} | 0 .../zun-Self-Illumin_Parallax_Diffuse2-ir.txt | 239 + ...zun-Self-Illumin_Parallax_Diffuse2-out.txt | 38 + ...zun-Self-Illumin_Parallax_Specular-in.txt} | 0 .../zun-Self-Illumin_Parallax_Specular-ir.txt | 285 + ...zun-Self-Illumin_Parallax_Specular-out.txt | 46 + ...un-Self-Illumin_Parallax_Specular1-in.txt} | 0 ...zun-Self-Illumin_Parallax_Specular1-ir.txt | 288 + ...un-Self-Illumin_Parallax_Specular1-out.txt | 47 + ...n.txt => zun-Self-Illumin_Specular-in.txt} | 0 .../fragment/zun-Self-Illumin_Specular-ir.txt | 237 + .../zun-Self-Illumin_Specular-out.txt | 32 + ....txt => zun-Self-Illumin_Specular1-in.txt} | 0 .../zun-Self-Illumin_Specular1-ir.txt | 113 + .../zun-Self-Illumin_Specular1-out.txt | 9 + ....txt => zun-Self-Illumin_Specular2-in.txt} | 0 .../zun-Self-Illumin_Specular2-ir.txt | 310 + .../zun-Self-Illumin_Specular2-out.txt | 33 + ...ty-Specular-in.txt => zun-Specular-in.txt} | 0 .../tests/fragment/zun-Specular-ir.txt | 226 + .../tests/fragment/zun-Specular-out.txt | 30 + ...-Specular1-in.txt => zun-Specular1-in.txt} | 0 .../tests/fragment/zun-Specular1-ir.txt | 102 + .../tests/fragment/zun-Specular1-out.txt | 9 + ...-Specular2-in.txt => zun-Specular2-in.txt} | 0 .../tests/fragment/zun-Specular2-ir.txt | 293 + .../tests/fragment/zun-Specular2-out.txt | 25 + ...face_2UV-in.txt => zun-Surface_2UV-in.txt} | 0 .../tests/fragment/zun-Surface_2UV-ir.txt | 186 + .../tests/fragment/zun-Surface_2UV-out.txt | 20 + ...ce_2UV1-in.txt => zun-Surface_2UV1-in.txt} | 0 .../tests/fragment/zun-Surface_2UV1-ir.txt | 135 + .../tests/fragment/zun-Surface_2UV1-out.txt | 19 + ...xt => zun-Surface_Colored_Specular-in.txt} | 0 .../zun-Surface_Colored_Specular-ir.txt | 228 + .../zun-Surface_Colored_Specular-out.txt | 24 + ...t => zun-Surface_Colored_Specular1-in.txt} | 0 .../zun-Surface_Colored_Specular1-ir.txt | 98 + .../zun-Surface_Colored_Specular1-out.txt | 8 + ...-in.txt => zun-Surface_Custom_Data-in.txt} | 0 .../fragment/zun-Surface_Custom_Data-ir.txt | 158 + .../fragment/zun-Surface_Custom_Data-out.txt | 16 + ...in.txt => zun-Surface_Custom_Data1-in.txt} | 0 .../fragment/zun-Surface_Custom_Data1-ir.txt | 144 + .../fragment/zun-Surface_Custom_Data1-out.txt | 13 + ...in.txt => zun-Surface_Custom_Data2-in.txt} | 0 .../fragment/zun-Surface_Custom_Data2-ir.txt | 270 + .../fragment/zun-Surface_Custom_Data2-out.txt | 18 + ...Add-in.txt => zun-Surface_DecalAdd-in.txt} | 0 .../fragment/zun-Surface_DecalAdd-ir.txt | 147 + .../fragment/zun-Surface_DecalAdd-out.txt | 14 + ...n.txt => zun-Surface_DecalAddBump3-in.txt} | 0 .../fragment/zun-Surface_DecalAddBump3-ir.txt | 187 + .../zun-Surface_DecalAddBump3-out.txt | 22 + ...n.txt => zun-Surface_DecalAddBump5-in.txt} | 0 .../fragment/zun-Surface_DecalAddBump5-ir.txt | 179 + .../zun-Surface_DecalAddBump5-out.txt | 22 + ...txt => zun-Surface_Diffuse_Wrapped-in.txt} | 0 .../zun-Surface_Diffuse_Wrapped-ir.txt | 149 + .../zun-Surface_Diffuse_Wrapped-out.txt | 14 + ...face_Rim-in.txt => zun-Surface_Rim-in.txt} | 0 .../tests/fragment/zun-Surface_Rim-ir.txt | 261 + .../tests/fragment/zun-Surface_Rim-out.txt | 13 + ...ce_Rim1-in.txt => zun-Surface_Rim1-in.txt} | 0 .../tests/fragment/zun-Surface_Rim1-ir.txt | 272 + .../tests/fragment/zun-Surface_Rim1-out.txt | 21 + ...ce_Rim2-in.txt => zun-Surface_Rim2-in.txt} | 0 .../tests/fragment/zun-Surface_Rim2-ir.txt | 312 + .../tests/fragment/zun-Surface_Rim2-out.txt | 24 + ...ump-in.txt => zun-Surface_Rim_Bump-in.txt} | 0 .../fragment/zun-Surface_Rim_Bump-ir.txt | 319 + .../fragment/zun-Surface_Rim_Bump-out.txt | 23 + ...p1-in.txt => zun-Surface_Rim_Bump1-in.txt} | 0 .../fragment/zun-Surface_Rim_Bump1-ir.txt | 301 + .../fragment/zun-Surface_Rim_Bump1-out.txt | 23 + ...os-in.txt => zun-Surface_ScreenPos-in.txt} | 0 .../fragment/zun-Surface_ScreenPos-ir.txt | 180 + .../fragment/zun-Surface_ScreenPos-out.txt | 16 + ...1-in.txt => zun-Surface_ScreenPos1-in.txt} | 0 .../fragment/zun-Surface_ScreenPos1-ir.txt | 162 + .../fragment/zun-Surface_ScreenPos1-out.txt | 16 + ...2-in.txt => zun-Surface_ScreenPos2-in.txt} | 0 .../fragment/zun-Surface_ScreenPos2-ir.txt | 97 + .../fragment/zun-Surface_ScreenPos2-out.txt | 8 + ...txt => zun-Surface_ScreenPosAlbedo-in.txt} | 0 .../zun-Surface_ScreenPosAlbedo-ir.txt | 94 + .../zun-Surface_ScreenPosAlbedo-out.txt | 8 + ...xt => zun-Surface_ScreenPosAlbedo1-in.txt} | 0 .../zun-Surface_ScreenPosAlbedo1-ir.txt | 135 + .../zun-Surface_ScreenPosAlbedo1-out.txt | 18 + ...lices-in.txt => zun-Surface_Slices-in.txt} | 0 .../tests/fragment/zun-Surface_Slices-ir.txt | 201 + .../tests/fragment/zun-Surface_Slices-out.txt | 24 + ...ces1-in.txt => zun-Surface_Slices1-in.txt} | 0 .../tests/fragment/zun-Surface_Slices1-ir.txt | 150 + .../fragment/zun-Surface_Slices1-out.txt | 23 + ...ces2-in.txt => zun-Surface_Slices2-in.txt} | 0 .../tests/fragment/zun-Surface_Slices2-ir.txt | 295 + .../fragment/zun-Surface_Slices2-out.txt | 26 + ...ces3-in.txt => zun-Surface_Slices3-in.txt} | 0 .../tests/fragment/zun-Surface_Slices3-ir.txt | 325 + .../fragment/zun-Surface_Slices3-out.txt | 41 + ...fl-in.txt => zun-Surface_WorldRefl-in.txt} | 0 .../fragment/zun-Surface_WorldRefl-ir.txt | 138 + .../fragment/zun-Surface_WorldRefl-out.txt | 13 + ...1-in.txt => zun-Surface_WorldRefl1-in.txt} | 0 .../fragment/zun-Surface_WorldRefl1-ir.txt | 87 + .../fragment/zun-Surface_WorldRefl1-out.txt | 8 + ...rmals-in.txt => zun-Test_CgNormals-in.txt} | 0 .../tests/fragment/zun-Test_CgNormals-ir.txt | 35 + ...als-out.txt => zun-Test_CgNormals-out.txt} | 0 ...-in.txt => zun-Test_FontShaderCull-in.txt} | 0 .../fragment/zun-Test_FontShaderCull-ir.txt | 39 + ...ut.txt => zun-Test_FontShaderCull-out.txt} | 0 ... zun-Test_VertexShaderDepthTexture-in.txt} | 0 .../zun-Test_VertexShaderDepthTexture-ir.txt | 50 + ...zun-Test_VertexShaderDepthTexture-out.txt} | 0 ...xt => zun-Test_VertexShaderTexture-in.txt} | 0 .../zun-Test_VertexShaderTexture-ir.txt | 38 + ...t => zun-Test_VertexShaderTexture-out.txt} | 0 ...t => zun-Tests_Blend_Many_Textures-in.txt} | 0 .../zun-Tests_Blend_Many_Textures-ir.txt | 132 + ... => zun-Tests_Blend_Many_Textures-out.txt} | 0 ...t-in.txt => zun-Tests_Fwd-Def-Vert-in.txt} | 0 .../fragment/zun-Tests_Fwd-Def-Vert-ir.txt | 146 + .../fragment/zun-Tests_Fwd-Def-Vert-out.txt | 8 + ...-in.txt => zun-Tests_Fwd-Def-Vert1-in.txt} | 0 .../fragment/zun-Tests_Fwd-Def-Vert1-ir.txt | 84 + .../fragment/zun-Tests_Fwd-Def-Vert1-out.txt | 8 + ...efl-in.txt => zun-TexGen_Cube_Refl-in.txt} | 0 .../fragment/zun-TexGen_Cube_Refl-ir.txt | 44 + ...l-out.txt => zun-TexGen_Cube_Refl-out.txt} | 0 ...oon_Basic-in.txt => zun-Toon_Basic-in.txt} | 0 .../tests/fragment/zun-Toon_Basic-ir.txt | 59 + ...n_Basic-out.txt => zun-Toon_Basic-out.txt} | 0 ...Lighted-in.txt => zun-Toon_Lighted-in.txt} | 0 .../tests/fragment/zun-Toon_Lighted-ir.txt | 163 + .../tests/fragment/zun-Toon_Lighted-out.txt | 16 + ...=> zun-Transparent_Bumped_Specular-in.txt} | 0 .../zun-Transparent_Bumped_Specular-ir.txt | 229 + .../zun-Transparent_Bumped_Specular-out.txt | 36 + ...-Transparent_Cutout_Bumped_Diffuse-in.txt} | 0 ...n-Transparent_Cutout_Bumped_Diffuse-ir.txt | 178 + ...-Transparent_Cutout_Bumped_Diffuse-out.txt | 30 + ...Transparent_Cutout_Bumped_Diffuse1-in.txt} | 0 ...-Transparent_Cutout_Bumped_Diffuse1-ir.txt | 174 + ...Transparent_Cutout_Bumped_Diffuse1-out.txt | 30 + ...Transparent_Cutout_Bumped_Specular-in.txt} | 0 ...-Transparent_Cutout_Bumped_Specular-ir.txt | 180 + ...Transparent_Cutout_Bumped_Specular-out.txt | 27 + ...ransparent_Cutout_Bumped_Specular1-in.txt} | 0 ...Transparent_Cutout_Bumped_Specular1-ir.txt | 186 + ...ransparent_Cutout_Bumped_Specular1-out.txt | 35 + ... => zun-Transparent_Cutout_Diffuse-in.txt} | 0 .../zun-Transparent_Cutout_Diffuse-ir.txt | 198 + .../zun-Transparent_Cutout_Diffuse-out.txt | 28 + ...=> zun-Transparent_Cutout_Specular-in.txt} | 0 .../zun-Transparent_Cutout_Specular-ir.txt | 196 + .../zun-Transparent_Cutout_Specular-out.txt | 32 + ...> zun-Transparent_Cutout_Specular1-in.txt} | 0 .../zun-Transparent_Cutout_Specular1-ir.txt | 219 + .../zun-Transparent_Cutout_Specular1-out.txt | 38 + ...> zun-Transparent_Cutout_Specular2-in.txt} | 0 .../zun-Transparent_Cutout_Specular2-ir.txt | 304 + .../zun-Transparent_Cutout_Specular2-out.txt | 33 + ...-in.txt => zun-Transparent_Diffuse-in.txt} | 0 .../fragment/zun-Transparent_Diffuse-ir.txt | 169 + .../fragment/zun-Transparent_Diffuse-out.txt | 22 + ...in.txt => zun-Transparent_Specular-in.txt} | 0 .../fragment/zun-Transparent_Specular-ir.txt | 194 + .../fragment/zun-Transparent_Specular-out.txt | 29 + ...-in.txt => zun-TreeCreatorLeavesRT-in.txt} | 0 .../fragment/zun-TreeCreatorLeavesRT-ir.txt | 158 + .../fragment/zun-TreeCreatorLeavesRT-out.txt | 47 + ...txt => zun-Tree_Editor_Bark_Shader-in.txt} | 0 .../zun-Tree_Editor_Bark_Shader-ir.txt | 214 + .../zun-Tree_Editor_Bark_Shader-out.txt | 26 + ...xt => zun-Tree_Editor_Bark_Shader1-in.txt} | 0 .../zun-Tree_Editor_Bark_Shader1-ir.txt | 237 + .../zun-Tree_Editor_Bark_Shader1-out.txt | 32 + ...txt => zun-Tree_Editor_Leaf_Shader-in.txt} | 0 .../zun-Tree_Editor_Leaf_Shader-ir.txt | 383 + .../zun-Tree_Editor_Leaf_Shader-out.txt | 42 + ...xt => zun-Tree_Editor_Leaf_Shader1-in.txt} | 0 .../zun-Tree_Editor_Leaf_Shader1-ir.txt | 383 + .../zun-Tree_Editor_Leaf_Shader1-out.txt | 47 + ...lored-in.txt => zun-Vertex_Colored-in.txt} | 0 .../tests/fragment/zun-Vertex_Colored-ir.txt | 55 + ...red-out.txt => zun-Vertex_Colored-out.txt} | 0 ...ed-in.txt => zun-currently_adapted-in.txt} | 0 .../fragment/zun-currently_adapted-ir.txt | 92 + .../fragment/zun-currently_adapted-out.txt | 23 + .../fragment/zunity-MotionBlur-TileMax-in.txt | 46 + .../fragment/zunity-MotionBlur-TileMax-ir.txt | 117 + .../zunity-MotionBlur-TileMax-out.txt | 68 + .../tests/glsl_optimizer_tests.cpp | 64 +- .../tests/vertex/MF-GodRays-irES.txt | 874 +- .../tests/vertex/MF-GodRays-outES.txt | 128 +- .../tests/vertex/bug-varying-const-in.txt | 10 + .../tests/vertex/bug-varying-const-ir.txt | 16 + .../tests/vertex/bug-varying-const-out.txt | 10 + .../tests/vertex/complex-alphabumpspec-ir.txt | 301 - .../tests/vertex/complex-particle-ir.txt | 72 - .../tests/vertex/complex-particle-irES.txt | 77 - .../tests/vertex/complex-prepasslight-ir.txt | 96 - .../vertex/complex-prepasslight-irES.txt | 101 - .../tests/vertex/complex-treeleaf-ir.txt | 428 - .../tests/vertex/complex-treeleaf-irES.txt | 433 - .../tests/vertex/complex-treeleaf-out.txt | 100 - .../tests/vertex/complex-treeleaf-outES.txt | 109 - .../tests/vertex/glsl140-basic-in.txt | 14 + .../tests/vertex/glsl140-basic-ir.txt | 18 + .../tests/vertex/glsl140-basic-out.txt | 14 + .../tests/vertex/glsl140-integers-in.txt | 26 + .../tests/vertex/glsl140-integers-ir.txt | 48 + .../tests/vertex/glsl140-integers-out.txt | 21 + .../tests/vertex/loops-for-ir.txt | 214 +- .../tests/vertex/loops-for-out.txt | 38 +- .../tests/vertex/loops-forsimple-ir.txt | 42 +- .../tests/vertex/loops-forsimple-out.txt | 12 +- .../tests/vertex/loops-forvarious-inES.txt | 71 + .../tests/vertex/loops-forvarious-irES.txt | 164 + .../tests/vertex/loops-forvarious-outES.txt | 64 + .../tests/vertex/loops-forwithcalls-ir.txt | 46 +- .../tests/vertex/loops-forwithcalls-out.txt | 12 +- .../tests/vertex/opt-inline-varnames-ir.txt | 72 +- .../tests/vertex/opt-inline-varnames-out.txt | 4 +- .../tests/vertex/opt-matrix-constr-ir.txt | 34 +- .../vertex/opt-matrix-transpose-mul-irES.txt | 284 +- .../vertex/opt-matrix-transpose-mul-outES.txt | 46 +- .../tests/vertex/opt-negsub-ir.txt | 58 +- .../tests/vertex/opt-unroll-in.txt | 42 + .../tests/vertex/opt-unroll-ir.txt | 98 + .../tests/vertex/opt-unroll-out.txt | 35 + .../glsl-optimizer/tests/vertex/types-ir.txt | 132 +- .../tests/vertex/types-irES.txt | 136 +- .../glsl-optimizer/tests/vertex/types-out.txt | 2 +- .../tests/vertex/types-outES.txt | 2 +- .../tests/vertex/unity-Bumped_Diffuse-ir.txt | 177 - .../tests/vertex/unity-Bumped_Diffuse-out.txt | 47 - .../tests/vertex/unity-Bumped_Diffuse1-ir.txt | 132 - .../vertex/unity-Bumped_Diffuse1-out.txt | 28 - .../tests/vertex/unity-Bumped_Specular-ir.txt | 439 - .../vertex/unity-Bumped_Specular-out.txt | 108 - .../vertex/unity-Bumped_Specular2-ir.txt | 147 - .../vertex/unity-Bumped_Specular2-out.txt | 37 - .../tests/vertex/unity-Decal-ir.txt | 164 - .../tests/vertex/unity-Diffuse-ir.txt | 172 - .../tests/vertex/unity-Diffuse2-ir.txt | 147 - .../tests/vertex/unity-Diffuse2-out.txt | 37 - ...unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt | 218 - ...nity-Diffuse_Alpha_Shadowed_ZWrite-out.txt | 53 - .../unity-FX_Glass_Stained_BumpDistort-ir.txt | 106 - ...unity-FX_Glass_Stained_BumpDistort-out.txt | 27 - .../vertex/unity-FX_Water_(simple)-ir.txt | 120 - .../tests/vertex/unity-Grab_Invert-ir.txt | 53 - ...ty-Hidden_Camera-DepthNormalTexture-ir.txt | 177 - ...y-Hidden_Camera-DepthNormalTexture-out.txt | 36 - ...y-Hidden_Camera-DepthNormalTexture1-ir.txt | 249 - ...-Hidden_Camera-DepthNormalTexture1-out.txt | 36 - .../unity-Hidden_Camera-DepthTexture-ir.txt | 134 - .../unity-Hidden_Camera-DepthTexture-out.txt | 36 - .../unity-Hidden_Glow_Downsample-ir.txt | 130 - .../unity-Hidden_Glow_Downsample-out.txt | 38 - ...nity-Hidden_Internal-GUITextureClip-ir.txt | 87 - ...ity-Hidden_Internal-PrePassLighting-ir.txt | 93 - ...ty-Hidden_Internal-PrePassLighting-out.txt | 22 - .../unity-Hidden_Noise_Shader_RGB-ir.txt | 97 - .../unity-Hidden_Noise_Shader_RGB-out.txt | 23 - ...-Hidden_TerrainEngine_BillboardTree-ir.txt | 154 - ...Hidden_TerrainEngine_BillboardTree-out.txt | 44 - ...e_Details_BillboardWavingDoublePass-ir.txt | 527 - ..._Details_BillboardWavingDoublePass-out.txt | 119 - ..._Details_BillboardWavingDoublePass1-ir.txt | 375 - ...Details_BillboardWavingDoublePass1-out.txt | 83 - ..._Details_BillboardWavingDoublePass2-ir.txt | 292 - ...Details_BillboardWavingDoublePass2-out.txt | 67 - ...ainEngine_Details_WavingDoublePass1-ir.txt | 346 - ...inEngine_Details_WavingDoublePass1-out.txt | 63 - ...ngine_Soft_Occlusion_Bark_rendertex-ir.txt | 227 - ...gine_Soft_Occlusion_Bark_rendertex-out.txt | 52 - ...ine_Soft_Occlusion_Leaves_rendertex-ir.txt | 227 - ...ne_Soft_Occlusion_Leaves_rendertex-out.txt | 52 - ...ainEngine_Splatmap_Lightmap-AddPass-ir.txt | 384 - ...inEngine_Splatmap_Lightmap-AddPass-out.txt | 96 - ...Engine_Splatmap_Lightmap-FirstPass1-ir.txt | 175 - ...y-Hidden_Tree_Bark_Shader_Rendertex-ir.txt | 126 - ...-Hidden_Tree_Bark_Shader_Rendertex-out.txt | 21 - ...y-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt | 185 - ...-Hidden_Tree_Leaf_Shader_Rendertex-out.txt | 29 - ...y-Hidden_Tree_Optimized_Bark_Shader-ir.txt | 395 - ...-Hidden_Tree_Optimized_Bark_Shader-out.txt | 96 - ...-Hidden_Tree_Optimized_Bark_Shader1-ir.txt | 262 - ...Hidden_Tree_Optimized_Bark_Shader1-out.txt | 48 - ...y-Hidden_Tree_Optimized_Leaf_Shader-ir.txt | 443 - ...-Hidden_Tree_Optimized_Leaf_Shader-out.txt | 109 - ...-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt | 454 - ...Hidden_Tree_Optimized_Leaf_Shader1-out.txt | 114 - .../vertex/unity-Hidden_Twist_Effect-ir.txt | 90 - ..._Shaders_Lightmapped_Bumped_Diffuse-ir.txt | 178 - .../unity-Nature_Soft_Occlusion_Bark-ir.txt | 251 - .../unity-Nature_Soft_Occlusion_Bark-out.txt | 52 - .../unity-Nature_Soft_Occlusion_Bark2-ir.txt | 161 - .../unity-Nature_Soft_Occlusion_Bark2-out.txt | 29 - .../unity-Nature_Soft_Occlusion_Bark3-ir.txt | 216 - .../unity-Nature_Soft_Occlusion_Bark3-out.txt | 56 - ...unity-Nature_Soft_Occlusion_Leaves1-ir.txt | 212 - ...nity-Nature_Soft_Occlusion_Leaves1-out.txt | 46 - ...unity-Nature_Soft_Occlusion_Leaves3-ir.txt | 172 - ...nity-Nature_Soft_Occlusion_Leaves3-out.txt | 34 - .../vertex/unity-Parallax_Diffuse-ir.txt | 439 - .../vertex/unity-Parallax_Diffuse-out.txt | 108 - .../vertex/unity-Parallax_Diffuse1-ir.txt | 202 - .../vertex/unity-Parallax_Diffuse1-out.txt | 52 - .../vertex/unity-Parallax_Diffuse2-ir.txt | 217 - .../tests/vertex/unity-Particles_Blend-ir.txt | 70 - .../unity-Reflective_Bumped_Diffuse-ir.txt | 178 - .../unity-Reflective_Bumped_Diffuse1-ir.txt | 277 - .../unity-Reflective_Bumped_Specular-ir.txt | 206 - .../unity-Reflective_Bumped_Specular1-ir.txt | 177 - .../unity-Reflective_Bumped_Specular1-out.txt | 47 - .../unity-Reflective_Bumped_Specular2-ir.txt | 262 - .../unity-Reflective_Bumped_Unlit-ir.txt | 189 - .../vertex/unity-Reflective_Diffuse-ir.txt | 171 - .../vertex/unity-Reflective_Diffuse1-ir.txt | 197 - .../vertex/unity-Reflective_Diffuse1-out.txt | 43 - .../unity-Reflective_Parallax_Diffuse-ir.txt | 205 - .../unity-Reflective_Parallax_Diffuse1-ir.txt | 274 - .../unity-Reflective_Parallax_Specular-ir.txt | 206 - ...unity-Reflective_Parallax_Specular1-ir.txt | 206 - .../vertex/unity-Reflective_Specular-ir.txt | 191 - .../vertex/unity-Reflective_Specular1-ir.txt | 104 - .../vertex/unity-Reflective_Specular2-ir.txt | 197 - .../vertex/unity-Reflective_Specular2-out.txt | 43 - .../vertex/unity-RenderFX_Skybox_Cubed-ir.txt | 54 - .../unity-Self-Illumin_Bumped_Diffuse-ir.txt | 178 - ...unity-Self-Illumin_Bumped_Specular1-ir.txt | 135 - .../vertex/unity-Self-Illumin_Diffuse1-ir.txt | 150 - ...unity-Self-Illumin_Parallax_Diffuse-ir.txt | 205 - ...ity-Self-Illumin_Parallax_Specular1-ir.txt | 206 - .../unity-Self-Illumin_Specular1-ir.txt | 104 - .../tests/vertex/unity-ShowDestAlpha-ir.txt | 38 - .../tests/vertex/unity-Specular-ir.txt | 191 - .../tests/vertex/unity-Specular1-ir.txt | 104 - .../tests/vertex/unity-Specular2-ir.txt | 147 - .../tests/vertex/unity-Specular2-out.txt | 37 - .../tests/vertex/unity-Surface_2UV-ir.txt | 174 - .../tests/vertex/unity-Surface_2UV1-ir.txt | 135 - .../unity-Surface_Colored_Specular-ir.txt | 194 - .../unity-Surface_Colored_Specular1-ir.txt | 104 - .../vertex/unity-Surface_Custom_Data-ir.txt | 186 - .../vertex/unity-Surface_Custom_Data1-ir.txt | 186 - .../vertex/unity-Surface_Custom_Data2-ir.txt | 161 - .../vertex/unity-Surface_Custom_Data2-out.txt | 36 - .../vertex/unity-Surface_DecalAddBump-ir.txt | 161 - .../vertex/unity-Surface_DecalAddBump1-ir.txt | 132 - .../unity-Surface_DecalAddBump1-out.txt | 28 - .../vertex/unity-Surface_DecalAddBump2-ir.txt | 183 - .../vertex/unity-Surface_DecalAddBump3-ir.txt | 306 - .../unity-Surface_Diffuse_Wrapped-ir.txt | 172 - .../tests/vertex/unity-Surface_Rim-ir.txt | 161 - .../tests/vertex/unity-Surface_Rim1-ir.txt | 209 - .../tests/vertex/unity-Surface_Rim1-out.txt | 55 - .../tests/vertex/unity-Surface_Rim2-ir.txt | 224 - .../vertex/unity-Surface_Rim_Bump-ir.txt | 175 - .../vertex/unity-Surface_Rim_Bump1-ir.txt | 176 - .../vertex/unity-Surface_ScreenPos-ir.txt | 160 - .../vertex/unity-Surface_ScreenPos1-ir.txt | 161 - .../vertex/unity-Surface_ScreenPos2-ir.txt | 104 - .../unity-Surface_ScreenPosAlbedo-ir.txt | 104 - .../unity-Surface_ScreenPosAlbedo1-ir.txt | 132 - .../unity-Surface_ScreenPosAlbedo1-out.txt | 33 - .../tests/vertex/unity-Surface_Slices-ir.txt | 181 - .../tests/vertex/unity-Surface_Slices1-ir.txt | 143 - .../vertex/unity-Surface_Slices1-out.txt | 33 - .../tests/vertex/unity-Surface_Slices2-ir.txt | 158 - .../vertex/unity-Surface_Slices2-out.txt | 42 - .../tests/vertex/unity-Surface_Slices3-ir.txt | 146 - .../vertex/unity-Surface_WorldRefl-ir.txt | 190 - .../vertex/unity-Surface_WorldRefl-out.txt | 40 - .../vertex/unity-Surface_WorldRefl1-ir.txt | 104 - .../tests/vertex/unity-Test_CgNormals-ir.txt | 91 - ...unity-Test_VertexShaderDepthTexture-ir.txt | 83 - .../unity-Test_VertexShaderTexture-ir.txt | 83 - .../unity-Test_VertexShaderTexture-out.txt | 16 - .../vertex/unity-TexGen_Cube_Refl-ir.txt | 104 - .../vertex/unity-TexGen_Cube_Refl-out.txt | 19 - .../tests/vertex/unity-Toon_Basic-ir.txt | 76 - .../unity-Transparent_Bumped_Specular-ir.txt | 206 - ...y-Transparent_Cutout_Bumped_Diffuse-ir.txt | 166 - ...-Transparent_Cutout_Bumped_Diffuse1-ir.txt | 132 - ...Transparent_Cutout_Bumped_Diffuse1-out.txt | 28 - ...-Transparent_Cutout_Bumped_Specular-ir.txt | 180 - ...Transparent_Cutout_Bumped_Specular-out.txt | 48 - ...Transparent_Cutout_Bumped_Specular1-ir.txt | 132 - ...ransparent_Cutout_Bumped_Specular1-out.txt | 28 - .../unity-Transparent_Cutout_Diffuse-ir.txt | 171 - .../unity-Transparent_Cutout_Specular-ir.txt | 181 - .../vertex/unity-Transparent_Specular-ir.txt | 192 - .../vertex/unity-TreeCreatorLeavesRT-ir.txt | 276 - .../vertex/unity-TreeCreatorLeavesRT-out.txt | 72 - .../unity-Tree_Editor_Bark_Shader-ir.txt | 384 - .../unity-Tree_Editor_Bark_Shader-out.txt | 91 - .../unity-Tree_Editor_Bark_Shader1-ir.txt | 395 - .../unity-Tree_Editor_Bark_Shader1-out.txt | 96 - .../unity-Tree_Editor_Leaf_Shader-ir.txt | 454 - .../unity-Tree_Editor_Leaf_Shader-out.txt | 114 - .../unity-Tree_Editor_Leaf_Shader1-ir.txt | 398 - .../unity-Tree_Editor_Leaf_Shader1-out.txt | 89 - .../tests/vertex/unity-Vertex_Colored-ir.txt | 106 - ...bumpspec-in.txt => z-alphabumpspec-in.txt} | 0 .../tests/vertex/z-alphabumpspec-ir.txt | 301 + ...mpspec-out.txt => z-alphabumpspec-out.txt} | 50 +- ...plex-particle-in.txt => z-particle-in.txt} | 0 ...-particle-inES.txt => z-particle-inES.txt} | 0 .../tests/vertex/z-particle-ir.txt | 72 + .../tests/vertex/z-particle-irES.txt | 77 + ...ex-particle-out.txt => z-particle-out.txt} | 0 ...article-outES.txt => z-particle-outES.txt} | 0 ...passlight-in.txt => z-prepasslight-in.txt} | 0 ...light-inES.txt => z-prepasslight-inES.txt} | 0 .../tests/vertex/z-prepasslight-ir.txt | 96 + .../tests/vertex/z-prepasslight-irES.txt | 101 + ...sslight-out.txt => z-prepasslight-out.txt} | 19 +- ...ght-outES.txt => z-prepasslight-outES.txt} | 19 +- ...plex-treeleaf-in.txt => z-treeleaf-in.txt} | 0 ...-treeleaf-inES.txt => z-treeleaf-inES.txt} | 0 .../tests/vertex/z-treeleaf-ir.txt | 428 + .../tests/vertex/z-treeleaf-irES.txt | 433 + .../tests/vertex/z-treeleaf-out.txt | 100 + .../tests/vertex/z-treeleaf-outES.txt | 109 + ...ffuse-in.txt => zun-Bumped_Diffuse-in.txt} | 0 .../tests/vertex/zun-Bumped_Diffuse-ir.txt | 177 + .../tests/vertex/zun-Bumped_Diffuse-out.txt | 35 + ...use1-in.txt => zun-Bumped_Diffuse1-in.txt} | 0 .../tests/vertex/zun-Bumped_Diffuse1-ir.txt | 132 + .../tests/vertex/zun-Bumped_Diffuse1-out.txt | 27 + ...ular-in.txt => zun-Bumped_Specular-in.txt} | 0 .../tests/vertex/zun-Bumped_Specular-ir.txt | 439 + .../tests/vertex/zun-Bumped_Specular-out.txt | 107 + ...ar2-in.txt => zun-Bumped_Specular2-in.txt} | 0 .../tests/vertex/zun-Bumped_Specular2-ir.txt | 147 + .../tests/vertex/zun-Bumped_Specular2-out.txt | 36 + .../{unity-Decal-in.txt => zun-Decal-in.txt} | 0 .../tests/vertex/zun-Decal-ir.txt | 164 + ...{unity-Decal-out.txt => zun-Decal-out.txt} | 0 ...nity-Diffuse-in.txt => zun-Diffuse-in.txt} | 0 .../tests/vertex/zun-Diffuse-ir.txt | 172 + ...ty-Diffuse-out.txt => zun-Diffuse-out.txt} | 0 ...ty-Diffuse2-in.txt => zun-Diffuse2-in.txt} | 0 .../tests/vertex/zun-Diffuse2-ir.txt | 147 + .../tests/vertex/zun-Diffuse2-out.txt | 36 + ... zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt} | 0 .../zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt | 218 + .../zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt | 53 + ...> zun-FX_Glass_Stained_BumpDistort-in.txt} | 0 .../zun-FX_Glass_Stained_BumpDistort-ir.txt | 106 + .../zun-FX_Glass_Stained_BumpDistort-out.txt | 29 + ...e)-in.txt => zun-FX_Water_(simple)-in.txt} | 0 .../tests/vertex/zun-FX_Water_(simple)-ir.txt | 120 + ...-out.txt => zun-FX_Water_(simple)-out.txt} | 13 +- ...b_Invert-in.txt => zun-Grab_Invert-in.txt} | 0 .../tests/vertex/zun-Grab_Invert-ir.txt | 53 + ...Invert-out.txt => zun-Grab_Invert-out.txt} | 0 ...n-Hidden_Camera-DepthNormalTexture-in.txt} | 0 ...un-Hidden_Camera-DepthNormalTexture-ir.txt | 177 + ...n-Hidden_Camera-DepthNormalTexture-out.txt | 36 + ...-Hidden_Camera-DepthNormalTexture1-in.txt} | 0 ...n-Hidden_Camera-DepthNormalTexture1-ir.txt | 249 + ...-Hidden_Camera-DepthNormalTexture1-out.txt | 36 + ... => zun-Hidden_Camera-DepthTexture-in.txt} | 0 .../zun-Hidden_Camera-DepthTexture-ir.txt | 134 + .../zun-Hidden_Camera-DepthTexture-out.txt | 34 + ....txt => zun-Hidden_Glow_Downsample-in.txt} | 0 .../vertex/zun-Hidden_Glow_Downsample-ir.txt | 130 + .../vertex/zun-Hidden_Glow_Downsample-out.txt | 39 + ...zun-Hidden_Internal-GUITextureClip-in.txt} | 0 .../zun-Hidden_Internal-GUITextureClip-ir.txt | 87 + ...un-Hidden_Internal-GUITextureClip-out.txt} | 0 ...un-Hidden_Internal-PrePassLighting-in.txt} | 0 ...zun-Hidden_Internal-PrePassLighting-ir.txt | 93 + ...un-Hidden_Internal-PrePassLighting-out.txt | 21 + ...txt => zun-Hidden_Noise_Shader_RGB-in.txt} | 0 .../vertex/zun-Hidden_Noise_Shader_RGB-ir.txt | 97 + .../zun-Hidden_Noise_Shader_RGB-out.txt | 25 + ...Hidden_TerrainEngine_BillboardTree-in.txt} | 0 ...-Hidden_TerrainEngine_BillboardTree-ir.txt | 154 + ...Hidden_TerrainEngine_BillboardTree-out.txt | 42 + ..._Details_BillboardWavingDoublePass-in.txt} | 0 ...e_Details_BillboardWavingDoublePass-ir.txt | 527 + ..._Details_BillboardWavingDoublePass-out.txt | 119 + ...Details_BillboardWavingDoublePass1-in.txt} | 0 ..._Details_BillboardWavingDoublePass1-ir.txt | 375 + ...Details_BillboardWavingDoublePass1-out.txt | 83 + ...Details_BillboardWavingDoublePass2-in.txt} | 0 ..._Details_BillboardWavingDoublePass2-ir.txt | 292 + ...Details_BillboardWavingDoublePass2-out.txt | 67 + ...inEngine_Details_WavingDoublePass1-in.txt} | 0 ...ainEngine_Details_WavingDoublePass1-ir.txt | 346 + ...inEngine_Details_WavingDoublePass1-out.txt | 63 + ...gine_Soft_Occlusion_Bark_rendertex-in.txt} | 0 ...ngine_Soft_Occlusion_Bark_rendertex-ir.txt | 227 + ...gine_Soft_Occlusion_Bark_rendertex-out.txt | 52 + ...ne_Soft_Occlusion_Leaves_rendertex-in.txt} | 0 ...ine_Soft_Occlusion_Leaves_rendertex-ir.txt | 227 + ...ne_Soft_Occlusion_Leaves_rendertex-out.txt | 52 + ...inEngine_Splatmap_Lightmap-AddPass-in.txt} | 0 ...ainEngine_Splatmap_Lightmap-AddPass-ir.txt | 384 + ...inEngine_Splatmap_Lightmap-AddPass-out.txt | 95 + ...ngine_Splatmap_Lightmap-FirstPass1-in.txt} | 0 ...Engine_Splatmap_Lightmap-FirstPass1-ir.txt | 175 + ...gine_Splatmap_Lightmap-FirstPass1-out.txt} | 41 +- ...-Hidden_Tree_Bark_Shader_Rendertex-in.txt} | 0 ...n-Hidden_Tree_Bark_Shader_Rendertex-ir.txt | 126 + ...-Hidden_Tree_Bark_Shader_Rendertex-out.txt | 21 + ...-Hidden_Tree_Leaf_Shader_Rendertex-in.txt} | 0 ...n-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt | 185 + ...-Hidden_Tree_Leaf_Shader_Rendertex-out.txt | 29 + ...-Hidden_Tree_Optimized_Bark_Shader-in.txt} | 0 ...n-Hidden_Tree_Optimized_Bark_Shader-ir.txt | 395 + ...-Hidden_Tree_Optimized_Bark_Shader-out.txt | 96 + ...Hidden_Tree_Optimized_Bark_Shader1-in.txt} | 0 ...-Hidden_Tree_Optimized_Bark_Shader1-ir.txt | 262 + ...Hidden_Tree_Optimized_Bark_Shader1-out.txt | 48 + ...-Hidden_Tree_Optimized_Leaf_Shader-in.txt} | 0 ...n-Hidden_Tree_Optimized_Leaf_Shader-ir.txt | 443 + ...-Hidden_Tree_Optimized_Leaf_Shader-out.txt | 109 + ...Hidden_Tree_Optimized_Leaf_Shader1-in.txt} | 0 ...-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt | 454 + ...Hidden_Tree_Optimized_Leaf_Shader1-out.txt | 114 + ...-in.txt => zun-Hidden_Twist_Effect-in.txt} | 0 .../vertex/zun-Hidden_Twist_Effect-ir.txt | 90 + ...ut.txt => zun-Hidden_Twist_Effect-out.txt} | 0 ...Shaders_Lightmapped_Bumped_Diffuse-in.txt} | 0 ..._Shaders_Lightmapped_Bumped_Diffuse-ir.txt | 178 + ...haders_Lightmapped_Bumped_Diffuse-out.txt} | 2 +- ... => zun-Nature_Soft_Occlusion_Bark-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark-ir.txt | 251 + .../zun-Nature_Soft_Occlusion_Bark-out.txt | 52 + ...=> zun-Nature_Soft_Occlusion_Bark2-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark2-ir.txt | 161 + .../zun-Nature_Soft_Occlusion_Bark2-out.txt | 29 + ...=> zun-Nature_Soft_Occlusion_Bark3-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Bark3-ir.txt | 216 + .../zun-Nature_Soft_Occlusion_Bark3-out.txt | 56 + ... zun-Nature_Soft_Occlusion_Leaves1-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Leaves1-ir.txt | 212 + .../zun-Nature_Soft_Occlusion_Leaves1-out.txt | 45 + ... zun-Nature_Soft_Occlusion_Leaves3-in.txt} | 0 .../zun-Nature_Soft_Occlusion_Leaves3-ir.txt | 172 + .../zun-Nature_Soft_Occlusion_Leaves3-out.txt | 34 + ...use-in.txt => zun-Parallax_Diffuse-in.txt} | 0 .../tests/vertex/zun-Parallax_Diffuse-ir.txt | 439 + .../tests/vertex/zun-Parallax_Diffuse-out.txt | 107 + ...e1-in.txt => zun-Parallax_Diffuse1-in.txt} | 0 .../tests/vertex/zun-Parallax_Diffuse1-ir.txt | 202 + ...-out.txt => zun-Parallax_Diffuse1-out.txt} | 30 +- ...e2-in.txt => zun-Parallax_Diffuse2-in.txt} | 0 .../tests/vertex/zun-Parallax_Diffuse2-ir.txt | 217 + .../vertex/zun-Parallax_Diffuse2-out.txt | 60 + ...lend-in.txt => zun-Particles_Blend-in.txt} | 0 .../tests/vertex/zun-Particles_Blend-ir.txt | 70 + ...nd-out.txt => zun-Particles_Blend-out.txt} | 0 ...t => zun-Reflective_Bumped_Diffuse-in.txt} | 0 .../zun-Reflective_Bumped_Diffuse-ir.txt | 178 + ... => zun-Reflective_Bumped_Diffuse-out.txt} | 2 +- ... => zun-Reflective_Bumped_Diffuse1-in.txt} | 0 .../zun-Reflective_Bumped_Diffuse1-ir.txt | 277 + ...=> zun-Reflective_Bumped_Diffuse1-out.txt} | 37 +- ... => zun-Reflective_Bumped_Specular-in.txt} | 0 .../zun-Reflective_Bumped_Specular-ir.txt | 206 + ...=> zun-Reflective_Bumped_Specular-out.txt} | 2 +- ...=> zun-Reflective_Bumped_Specular1-in.txt} | 0 .../zun-Reflective_Bumped_Specular1-ir.txt | 177 + .../zun-Reflective_Bumped_Specular1-out.txt | 35 + ...=> zun-Reflective_Bumped_Specular2-in.txt} | 0 .../zun-Reflective_Bumped_Specular2-ir.txt | 262 + ...> zun-Reflective_Bumped_Specular2-out.txt} | 29 +- ...txt => zun-Reflective_Bumped_Unlit-in.txt} | 0 .../vertex/zun-Reflective_Bumped_Unlit-ir.txt | 189 + ...xt => zun-Reflective_Bumped_Unlit-out.txt} | 2 +- ...e-in.txt => zun-Reflective_Diffuse-in.txt} | 0 .../vertex/zun-Reflective_Diffuse-ir.txt | 171 + ...out.txt => zun-Reflective_Diffuse-out.txt} | 0 ...-in.txt => zun-Reflective_Diffuse1-in.txt} | 0 .../vertex/zun-Reflective_Diffuse1-ir.txt | 197 + .../vertex/zun-Reflective_Diffuse1-out.txt | 44 + ...=> zun-Reflective_Parallax_Diffuse-in.txt} | 0 .../zun-Reflective_Parallax_Diffuse-ir.txt | 205 + ...> zun-Reflective_Parallax_Diffuse-out.txt} | 2 +- ...> zun-Reflective_Parallax_Diffuse1-in.txt} | 0 .../zun-Reflective_Parallax_Diffuse1-ir.txt | 274 + ... zun-Reflective_Parallax_Diffuse1-out.txt} | 43 +- ...> zun-Reflective_Parallax_Specular-in.txt} | 0 .../zun-Reflective_Parallax_Specular-ir.txt | 206 + ... zun-Reflective_Parallax_Specular-out.txt} | 2 +- ... zun-Reflective_Parallax_Specular1-in.txt} | 0 .../zun-Reflective_Parallax_Specular1-ir.txt | 206 + ...zun-Reflective_Parallax_Specular1-out.txt} | 2 +- ...-in.txt => zun-Reflective_Specular-in.txt} | 0 .../vertex/zun-Reflective_Specular-ir.txt | 191 + ...ut.txt => zun-Reflective_Specular-out.txt} | 0 ...in.txt => zun-Reflective_Specular1-in.txt} | 0 .../vertex/zun-Reflective_Specular1-ir.txt | 104 + ...t.txt => zun-Reflective_Specular1-out.txt} | 0 ...in.txt => zun-Reflective_Specular2-in.txt} | 0 .../vertex/zun-Reflective_Specular2-ir.txt | 197 + .../vertex/zun-Reflective_Specular2-out.txt | 44 + ...n.txt => zun-RenderFX_Skybox_Cubed-in.txt} | 0 .../vertex/zun-RenderFX_Skybox_Cubed-ir.txt | 54 + ....txt => zun-RenderFX_Skybox_Cubed-out.txt} | 0 ...=> zun-Self-Illumin_Bumped_Diffuse-in.txt} | 0 .../zun-Self-Illumin_Bumped_Diffuse-ir.txt | 178 + ...> zun-Self-Illumin_Bumped_Diffuse-out.txt} | 2 +- ... zun-Self-Illumin_Bumped_Specular1-in.txt} | 0 .../zun-Self-Illumin_Bumped_Specular1-ir.txt | 135 + ...zun-Self-Illumin_Bumped_Specular1-out.txt} | 27 +- ...n.txt => zun-Self-Illumin_Diffuse1-in.txt} | 0 .../vertex/zun-Self-Illumin_Diffuse1-ir.txt | 150 + ....txt => zun-Self-Illumin_Diffuse1-out.txt} | 35 +- ... zun-Self-Illumin_Parallax_Diffuse-in.txt} | 0 .../zun-Self-Illumin_Parallax_Diffuse-ir.txt | 205 + ...zun-Self-Illumin_Parallax_Diffuse-out.txt} | 2 +- ...un-Self-Illumin_Parallax_Specular1-in.txt} | 0 ...zun-Self-Illumin_Parallax_Specular1-ir.txt | 206 + ...n-Self-Illumin_Parallax_Specular1-out.txt} | 2 +- ....txt => zun-Self-Illumin_Specular1-in.txt} | 0 .../vertex/zun-Self-Illumin_Specular1-ir.txt | 104 + ...txt => zun-Self-Illumin_Specular1-out.txt} | 0 ...tAlpha-in.txt => zun-ShowDestAlpha-in.txt} | 0 .../tests/vertex/zun-ShowDestAlpha-ir.txt | 38 + ...lpha-out.txt => zun-ShowDestAlpha-out.txt} | 0 ...ty-Specular-in.txt => zun-Specular-in.txt} | 0 .../tests/vertex/zun-Specular-ir.txt | 191 + ...-Specular-out.txt => zun-Specular-out.txt} | 0 ...-Specular1-in.txt => zun-Specular1-in.txt} | 0 .../tests/vertex/zun-Specular1-ir.txt | 104 + ...pecular1-out.txt => zun-Specular1-out.txt} | 0 ...-Specular2-in.txt => zun-Specular2-in.txt} | 0 .../tests/vertex/zun-Specular2-ir.txt | 147 + .../tests/vertex/zun-Specular2-out.txt | 36 + ...face_2UV-in.txt => zun-Surface_2UV-in.txt} | 0 .../tests/vertex/zun-Surface_2UV-ir.txt | 174 + ...ce_2UV-out.txt => zun-Surface_2UV-out.txt} | 0 ...ce_2UV1-in.txt => zun-Surface_2UV1-in.txt} | 0 .../tests/vertex/zun-Surface_2UV1-ir.txt | 135 + ..._2UV1-out.txt => zun-Surface_2UV1-out.txt} | 27 +- ...xt => zun-Surface_Colored_Specular-in.txt} | 0 .../zun-Surface_Colored_Specular-ir.txt | 194 + ...t => zun-Surface_Colored_Specular-out.txt} | 0 ...t => zun-Surface_Colored_Specular1-in.txt} | 0 .../zun-Surface_Colored_Specular1-ir.txt | 104 + ... => zun-Surface_Colored_Specular1-out.txt} | 0 ...-in.txt => zun-Surface_Custom_Data-in.txt} | 0 .../vertex/zun-Surface_Custom_Data-ir.txt | 186 + ...ut.txt => zun-Surface_Custom_Data-out.txt} | 0 ...in.txt => zun-Surface_Custom_Data1-in.txt} | 0 .../vertex/zun-Surface_Custom_Data1-ir.txt | 186 + ...t.txt => zun-Surface_Custom_Data1-out.txt} | 0 ...in.txt => zun-Surface_Custom_Data2-in.txt} | 0 .../vertex/zun-Surface_Custom_Data2-ir.txt | 161 + .../vertex/zun-Surface_Custom_Data2-out.txt | 35 + ...in.txt => zun-Surface_DecalAddBump-in.txt} | 0 .../vertex/zun-Surface_DecalAddBump-ir.txt | 161 + ...t.txt => zun-Surface_DecalAddBump-out.txt} | 0 ...n.txt => zun-Surface_DecalAddBump1-in.txt} | 0 .../vertex/zun-Surface_DecalAddBump1-ir.txt | 132 + .../vertex/zun-Surface_DecalAddBump1-out.txt | 27 + ...n.txt => zun-Surface_DecalAddBump2-in.txt} | 0 .../vertex/zun-Surface_DecalAddBump2-ir.txt | 183 + ....txt => zun-Surface_DecalAddBump2-out.txt} | 0 ...n.txt => zun-Surface_DecalAddBump3-in.txt} | 0 .../vertex/zun-Surface_DecalAddBump3-ir.txt | 306 + ....txt => zun-Surface_DecalAddBump3-out.txt} | 67 +- ...txt => zun-Surface_Diffuse_Wrapped-in.txt} | 0 .../vertex/zun-Surface_Diffuse_Wrapped-ir.txt | 172 + ...xt => zun-Surface_Diffuse_Wrapped-out.txt} | 0 ...face_Rim-in.txt => zun-Surface_Rim-in.txt} | 0 .../tests/vertex/zun-Surface_Rim-ir.txt | 161 + ...ce_Rim-out.txt => zun-Surface_Rim-out.txt} | 0 ...ce_Rim1-in.txt => zun-Surface_Rim1-in.txt} | 0 .../tests/vertex/zun-Surface_Rim1-ir.txt | 209 + ..._Rim2-out.txt => zun-Surface_Rim1-out.txt} | 30 +- ...ce_Rim2-in.txt => zun-Surface_Rim2-in.txt} | 0 .../tests/vertex/zun-Surface_Rim2-ir.txt | 224 + .../tests/vertex/zun-Surface_Rim2-out.txt | 63 + ...ump-in.txt => zun-Surface_Rim_Bump-in.txt} | 0 .../tests/vertex/zun-Surface_Rim_Bump-ir.txt | 175 + ...p-out.txt => zun-Surface_Rim_Bump-out.txt} | 2 +- ...p1-in.txt => zun-Surface_Rim_Bump1-in.txt} | 0 .../tests/vertex/zun-Surface_Rim_Bump1-ir.txt | 176 + ...-out.txt => zun-Surface_Rim_Bump1-out.txt} | 2 +- ...os-in.txt => zun-Surface_ScreenPos-in.txt} | 0 .../tests/vertex/zun-Surface_ScreenPos-ir.txt | 160 + ...-out.txt => zun-Surface_ScreenPos-out.txt} | 0 ...1-in.txt => zun-Surface_ScreenPos1-in.txt} | 0 .../vertex/zun-Surface_ScreenPos1-ir.txt | 161 + ...out.txt => zun-Surface_ScreenPos1-out.txt} | 0 ...2-in.txt => zun-Surface_ScreenPos2-in.txt} | 0 .../vertex/zun-Surface_ScreenPos2-ir.txt | 104 + ...out.txt => zun-Surface_ScreenPos2-out.txt} | 0 ...txt => zun-Surface_ScreenPosAlbedo-in.txt} | 0 .../vertex/zun-Surface_ScreenPosAlbedo-ir.txt | 104 + ...xt => zun-Surface_ScreenPosAlbedo-out.txt} | 0 ...xt => zun-Surface_ScreenPosAlbedo1-in.txt} | 0 .../zun-Surface_ScreenPosAlbedo1-ir.txt | 132 + .../zun-Surface_ScreenPosAlbedo1-out.txt | 31 + ...lices-in.txt => zun-Surface_Slices-in.txt} | 0 .../tests/vertex/zun-Surface_Slices-ir.txt | 181 + ...ces-out.txt => zun-Surface_Slices-out.txt} | 0 ...ces1-in.txt => zun-Surface_Slices1-in.txt} | 0 .../tests/vertex/zun-Surface_Slices1-ir.txt | 143 + .../tests/vertex/zun-Surface_Slices1-out.txt | 32 + ...ces2-in.txt => zun-Surface_Slices2-in.txt} | 0 .../tests/vertex/zun-Surface_Slices2-ir.txt | 158 + .../tests/vertex/zun-Surface_Slices2-out.txt | 41 + ...ces3-in.txt => zun-Surface_Slices3-in.txt} | 0 .../tests/vertex/zun-Surface_Slices3-ir.txt | 146 + ...s3-out.txt => zun-Surface_Slices3-out.txt} | 0 ...fl-in.txt => zun-Surface_WorldRefl-in.txt} | 0 .../tests/vertex/zun-Surface_WorldRefl-ir.txt | 190 + .../vertex/zun-Surface_WorldRefl-out.txt | 42 + ...1-in.txt => zun-Surface_WorldRefl1-in.txt} | 0 .../vertex/zun-Surface_WorldRefl1-ir.txt | 104 + ...out.txt => zun-Surface_WorldRefl1-out.txt} | 0 ...rmals-in.txt => zun-Test_CgNormals-in.txt} | 0 .../tests/vertex/zun-Test_CgNormals-ir.txt | 91 + ...als-out.txt => zun-Test_CgNormals-out.txt} | 0 ... zun-Test_VertexShaderDepthTexture-in.txt} | 0 .../zun-Test_VertexShaderDepthTexture-ir.txt | 83 + ...zun-Test_VertexShaderDepthTexture-out.txt} | 11 +- ...xt => zun-Test_VertexShaderTexture-in.txt} | 0 .../zun-Test_VertexShaderTexture-ir.txt | 83 + .../zun-Test_VertexShaderTexture-out.txt | 13 + ...efl-in.txt => zun-TexGen_Cube_Refl-in.txt} | 0 .../tests/vertex/zun-TexGen_Cube_Refl-ir.txt | 104 + .../tests/vertex/zun-TexGen_Cube_Refl-out.txt | 21 + ...oon_Basic-in.txt => zun-Toon_Basic-in.txt} | 0 .../tests/vertex/zun-Toon_Basic-ir.txt | 76 + ...n_Basic-out.txt => zun-Toon_Basic-out.txt} | 0 ...=> zun-Transparent_Bumped_Specular-in.txt} | 0 .../zun-Transparent_Bumped_Specular-ir.txt | 206 + ...> zun-Transparent_Bumped_Specular-out.txt} | 2 +- ...-Transparent_Cutout_Bumped_Diffuse-in.txt} | 0 ...n-Transparent_Cutout_Bumped_Diffuse-ir.txt | 166 + ...Transparent_Cutout_Bumped_Diffuse-out.txt} | 2 +- ...Transparent_Cutout_Bumped_Diffuse1-in.txt} | 0 ...-Transparent_Cutout_Bumped_Diffuse1-ir.txt | 132 + ...Transparent_Cutout_Bumped_Diffuse1-out.txt | 27 + ...Transparent_Cutout_Bumped_Specular-in.txt} | 0 ...-Transparent_Cutout_Bumped_Specular-ir.txt | 180 + ...Transparent_Cutout_Bumped_Specular-out.txt | 36 + ...ransparent_Cutout_Bumped_Specular1-in.txt} | 0 ...Transparent_Cutout_Bumped_Specular1-ir.txt | 132 + ...ransparent_Cutout_Bumped_Specular1-out.txt | 27 + ... => zun-Transparent_Cutout_Diffuse-in.txt} | 0 .../zun-Transparent_Cutout_Diffuse-ir.txt | 171 + ...=> zun-Transparent_Cutout_Diffuse-out.txt} | 0 ...=> zun-Transparent_Cutout_Specular-in.txt} | 0 .../zun-Transparent_Cutout_Specular-ir.txt | 181 + ...> zun-Transparent_Cutout_Specular-out.txt} | 0 ...in.txt => zun-Transparent_Specular-in.txt} | 0 .../vertex/zun-Transparent_Specular-ir.txt | 192 + ...t.txt => zun-Transparent_Specular-out.txt} | 0 ...-in.txt => zun-TreeCreatorLeavesRT-in.txt} | 0 .../vertex/zun-TreeCreatorLeavesRT-ir.txt | 276 + .../vertex/zun-TreeCreatorLeavesRT-out.txt | 72 + ...txt => zun-Tree_Editor_Bark_Shader-in.txt} | 0 .../vertex/zun-Tree_Editor_Bark_Shader-ir.txt | 384 + .../zun-Tree_Editor_Bark_Shader-out.txt | 91 + ...xt => zun-Tree_Editor_Bark_Shader1-in.txt} | 0 .../zun-Tree_Editor_Bark_Shader1-ir.txt | 395 + .../zun-Tree_Editor_Bark_Shader1-out.txt | 96 + ...txt => zun-Tree_Editor_Leaf_Shader-in.txt} | 0 .../vertex/zun-Tree_Editor_Leaf_Shader-ir.txt | 454 + .../zun-Tree_Editor_Leaf_Shader-out.txt | 114 + ...xt => zun-Tree_Editor_Leaf_Shader1-in.txt} | 0 .../zun-Tree_Editor_Leaf_Shader1-ir.txt | 398 + .../zun-Tree_Editor_Leaf_Shader1-out.txt | 89 + ...lored-in.txt => zun-Vertex_Colored-in.txt} | 0 .../tests/vertex/zun-Vertex_Colored-ir.txt | 106 + ...red-out.txt => zun-Vertex_Colored-out.txt} | 0 3rdparty/openctm/COMPILING.txt | 100 + 3rdparty/openctm/LICENSE.txt | 20 + 3rdparty/openctm/Makefile.linux | 65 + 3rdparty/openctm/Makefile.macosx | 64 + 3rdparty/openctm/Makefile.mingw | 45 + 3rdparty/openctm/Makefile.msvc | 45 + 3rdparty/openctm/README.txt | 152 + 3rdparty/openctm/bindings/delphi/OpenCTM.pas | 189 + 3rdparty/openctm/bindings/python/ctminfo.py | 61 + 3rdparty/openctm/bindings/python/openctm.py | 204 + 3rdparty/openctm/build-src.sh | 77 + 3rdparty/openctm/doc/DevelopersManual.tex | 678 + 3rdparty/openctm/doc/Doxyfile | 1417 + 3rdparty/openctm/doc/DoxygenFooter.html | 6 + 3rdparty/openctm/doc/FormatSpecification.tex | 678 + 3rdparty/openctm/doc/Makefile.linux | 58 + 3rdparty/openctm/doc/Makefile.macosx | 56 + 3rdparty/openctm/doc/Makefile.win | 58 + 3rdparty/openctm/doc/ctmconv.1 | 92 + 3rdparty/openctm/doc/ctmviewer.1 | 86 + 3rdparty/openctm/doc/grid.pdf | Bin 0 -> 6564 bytes 3rdparty/openctm/doc/grid.svg | 407 + 3rdparty/openctm/doc/logo.pdf | Bin 0 -> 2885 bytes 3rdparty/openctm/doc/openctm-tex.sty | 33 + 3rdparty/openctm/lib/Makefile.linux | 81 + 3rdparty/openctm/lib/Makefile.macosx | 80 + 3rdparty/openctm/lib/Makefile.mingw | 87 + 3rdparty/openctm/lib/Makefile.msvc | 103 + 3rdparty/openctm/lib/compressMG1.c | 324 + 3rdparty/openctm/lib/compressMG2.c | 1319 + 3rdparty/openctm/lib/compressRAW.c | 181 + 3rdparty/openctm/lib/internal.h | 147 + 3rdparty/openctm/lib/liblzma/Alloc.c | 127 + 3rdparty/openctm/lib/liblzma/Alloc.h | 34 + 3rdparty/openctm/lib/liblzma/LzFind.c | 751 + 3rdparty/openctm/lib/liblzma/LzFind.h | 107 + 3rdparty/openctm/lib/liblzma/LzHash.h | 54 + 3rdparty/openctm/lib/liblzma/LzmaDec.c | 1007 + 3rdparty/openctm/lib/liblzma/LzmaDec.h | 223 + 3rdparty/openctm/lib/liblzma/LzmaEnc.c | 2281 + 3rdparty/openctm/lib/liblzma/LzmaEnc.h | 72 + 3rdparty/openctm/lib/liblzma/LzmaLib.c | 48 + 3rdparty/openctm/lib/liblzma/LzmaLib.h | 136 + 3rdparty/openctm/lib/liblzma/NameMangle.h | 84 + 3rdparty/openctm/lib/liblzma/Types.h | 210 + 3rdparty/openctm/lib/liblzma/readme.txt | 7 + 3rdparty/openctm/lib/make.depend | 15 + 3rdparty/openctm/lib/openctm-mingw1.def | 32 + 3rdparty/openctm/lib/openctm-mingw2.def | 32 + 3rdparty/openctm/lib/openctm-msvc.def | 32 + 3rdparty/openctm/lib/openctm.c | 1423 + 3rdparty/openctm/lib/openctm.h | 655 + 3rdparty/openctm/lib/openctm.rc | 26 + 3rdparty/openctm/lib/openctmpp.h | 377 + 3rdparty/openctm/lib/stream.c | 512 + .../openctm/plugins/blender/openctm_export.py | 332 + .../openctm/plugins/blender/openctm_import.py | 226 + 3rdparty/openctm/plugins/blender/readme.txt | 48 + .../plugins/maya/openctm_translator.py | 196 + 3rdparty/openctm/plugins/maya/readme.txt | 31 + 3rdparty/openctm/tools/3ds.cpp | 432 + 3rdparty/openctm/tools/3ds.h | 40 + 3rdparty/openctm/tools/Makefile.linux | 112 + 3rdparty/openctm/tools/Makefile.macosx | 117 + 3rdparty/openctm/tools/Makefile.mingw | 119 + 3rdparty/openctm/tools/Makefile.msvc | 119 + 3rdparty/openctm/tools/bin2c.cpp | 74 + 3rdparty/openctm/tools/common.cpp | 97 + 3rdparty/openctm/tools/common.h | 54 + 3rdparty/openctm/tools/convoptions.cpp | 190 + 3rdparty/openctm/tools/convoptions.h | 68 + 3rdparty/openctm/tools/ctm.cpp | 166 + 3rdparty/openctm/tools/ctm.h | 40 + 3rdparty/openctm/tools/ctmbench.cpp | 189 + 3rdparty/openctm/tools/ctmconv.cpp | 234 + 3rdparty/openctm/tools/ctmconv.rc | 27 + 3rdparty/openctm/tools/ctmviewer.cpp | 1787 + 3rdparty/openctm/tools/ctmviewer.exe.manifest | 14 + 3rdparty/openctm/tools/ctmviewer.rc | 29 + 3rdparty/openctm/tools/dae.cpp | 725 + 3rdparty/openctm/tools/dae.h | 40 + 3rdparty/openctm/tools/glew/GL/glew.h | 12262 ++ 3rdparty/openctm/tools/glew/GL/glxew.h | 1397 + 3rdparty/openctm/tools/glew/GL/wglew.h | 1165 + 3rdparty/openctm/tools/glew/LICENSE.txt | 73 + 3rdparty/openctm/tools/glew/glew.c | 12180 ++ .../openctm/tools/icons/Document-open.svg | 448 + .../openctm/tools/icons/Document-save.svg | 557 + 3rdparty/openctm/tools/icons/Help-browser.svg | 218 + 3rdparty/openctm/tools/icons/Texture.svg | 66 + 3rdparty/openctm/tools/icons/icon_help.h | 229 + 3rdparty/openctm/tools/icons/icon_open.h | 229 + 3rdparty/openctm/tools/icons/icon_save.h | 229 + 3rdparty/openctm/tools/icons/icon_texture.h | 229 + 3rdparty/openctm/tools/icons/openctm.ico | Bin 0 -> 32038 bytes 3rdparty/openctm/tools/icons/readme.txt | 18 + 3rdparty/openctm/tools/image.cpp | 134 + 3rdparty/openctm/tools/image.h | 92 + 3rdparty/openctm/tools/jpeg/Makefile.am | 133 + 3rdparty/openctm/tools/jpeg/Makefile.in | 1089 + 3rdparty/openctm/tools/jpeg/Makefile.mingw | 222 + 3rdparty/openctm/tools/jpeg/README | 322 + 3rdparty/openctm/tools/jpeg/aclocal.m4 | 8990 ++ 3rdparty/openctm/tools/jpeg/ansi2knr.1 | 36 + 3rdparty/openctm/tools/jpeg/ansi2knr.c | 739 + 3rdparty/openctm/tools/jpeg/cderror.h | 132 + 3rdparty/openctm/tools/jpeg/cdjpeg.c | 181 + 3rdparty/openctm/tools/jpeg/cdjpeg.h | 187 + 3rdparty/openctm/tools/jpeg/change.log | 270 + 3rdparty/openctm/tools/jpeg/cjpeg.1 | 325 + 3rdparty/openctm/tools/jpeg/cjpeg.c | 616 + 3rdparty/openctm/tools/jpeg/ckconfig.c | 402 + 3rdparty/openctm/tools/jpeg/coderules.txt | 118 + 3rdparty/openctm/tools/jpeg/config.guess | 1561 + 3rdparty/openctm/tools/jpeg/config.sub | 1686 + 3rdparty/openctm/tools/jpeg/configure | 17139 +++ 3rdparty/openctm/tools/jpeg/configure.ac | 317 + 3rdparty/openctm/tools/jpeg/depcomp | 630 + 3rdparty/openctm/tools/jpeg/djpeg.1 | 251 + 3rdparty/openctm/tools/jpeg/djpeg.c | 617 + 3rdparty/openctm/tools/jpeg/example.c | 433 + 3rdparty/openctm/tools/jpeg/filelist.txt | 215 + 3rdparty/openctm/tools/jpeg/install-sh | 520 + 3rdparty/openctm/tools/jpeg/install.txt | 1097 + 3rdparty/openctm/tools/jpeg/jaricom.c | 148 + 3rdparty/openctm/tools/jpeg/jcapimin.c | 282 + 3rdparty/openctm/tools/jpeg/jcapistd.c | 161 + 3rdparty/openctm/tools/jpeg/jcarith.c | 921 + 3rdparty/openctm/tools/jpeg/jccoefct.c | 453 + 3rdparty/openctm/tools/jpeg/jccolor.c | 459 + 3rdparty/openctm/tools/jpeg/jcdctmgr.c | 482 + 3rdparty/openctm/tools/jpeg/jchuff.c | 1612 + 3rdparty/openctm/tools/jpeg/jcinit.c | 65 + 3rdparty/openctm/tools/jpeg/jcmainct.c | 293 + 3rdparty/openctm/tools/jpeg/jcmarker.c | 667 + 3rdparty/openctm/tools/jpeg/jcmaster.c | 770 + 3rdparty/openctm/tools/jpeg/jcomapi.c | 106 + 3rdparty/openctm/tools/jpeg/jconfig.bcc | 48 + 3rdparty/openctm/tools/jpeg/jconfig.cfg | 45 + 3rdparty/openctm/tools/jpeg/jconfig.dj | 38 + 3rdparty/openctm/tools/jpeg/jconfig.linux | 38 + 3rdparty/openctm/tools/jpeg/jconfig.mac | 43 + 3rdparty/openctm/tools/jpeg/jconfig.macosx | 37 + 3rdparty/openctm/tools/jpeg/jconfig.manx | 43 + 3rdparty/openctm/tools/jpeg/jconfig.mc6 | 52 + 3rdparty/openctm/tools/jpeg/jconfig.mingw | 38 + 3rdparty/openctm/tools/jpeg/jconfig.sas | 43 + 3rdparty/openctm/tools/jpeg/jconfig.st | 42 + 3rdparty/openctm/tools/jpeg/jconfig.txt | 155 + 3rdparty/openctm/tools/jpeg/jconfig.vc | 45 + 3rdparty/openctm/tools/jpeg/jconfig.vms | 37 + 3rdparty/openctm/tools/jpeg/jconfig.wat | 38 + 3rdparty/openctm/tools/jpeg/jcparam.c | 632 + 3rdparty/openctm/tools/jpeg/jcprepct.c | 358 + 3rdparty/openctm/tools/jpeg/jcsample.c | 545 + 3rdparty/openctm/tools/jpeg/jctrans.c | 381 + 3rdparty/openctm/tools/jpeg/jdapimin.c | 396 + 3rdparty/openctm/tools/jpeg/jdapistd.c | 275 + 3rdparty/openctm/tools/jpeg/jdarith.c | 762 + 3rdparty/openctm/tools/jpeg/jdatadst.c | 151 + 3rdparty/openctm/tools/jpeg/jdatasrc.c | 212 + 3rdparty/openctm/tools/jpeg/jdcoefct.c | 736 + 3rdparty/openctm/tools/jpeg/jdcolor.c | 396 + 3rdparty/openctm/tools/jpeg/jdct.h | 393 + 3rdparty/openctm/tools/jpeg/jddctmgr.c | 382 + 3rdparty/openctm/tools/jpeg/jdhuff.c | 1309 + 3rdparty/openctm/tools/jpeg/jdinput.c | 384 + 3rdparty/openctm/tools/jpeg/jdmainct.c | 512 + 3rdparty/openctm/tools/jpeg/jdmarker.c | 1360 + 3rdparty/openctm/tools/jpeg/jdmaster.c | 663 + 3rdparty/openctm/tools/jpeg/jdmerge.c | 400 + 3rdparty/openctm/tools/jpeg/jdosabcc.obj | Bin 0 -> 775 bytes 3rdparty/openctm/tools/jpeg/jdosamsc.obj | Bin 0 -> 657 bytes 3rdparty/openctm/tools/jpeg/jdosaobj.txt | 16 + 3rdparty/openctm/tools/jpeg/jdpostct.c | 290 + 3rdparty/openctm/tools/jpeg/jdsample.c | 361 + 3rdparty/openctm/tools/jpeg/jdtrans.c | 136 + 3rdparty/openctm/tools/jpeg/jerror.c | 252 + 3rdparty/openctm/tools/jpeg/jerror.h | 304 + 3rdparty/openctm/tools/jpeg/jfdctflt.c | 174 + 3rdparty/openctm/tools/jpeg/jfdctfst.c | 230 + 3rdparty/openctm/tools/jpeg/jfdctint.c | 4348 + 3rdparty/openctm/tools/jpeg/jidctflt.c | 242 + 3rdparty/openctm/tools/jpeg/jidctfst.c | 368 + 3rdparty/openctm/tools/jpeg/jidctint.c | 5137 + 3rdparty/openctm/tools/jpeg/jinclude.h | 91 + 3rdparty/openctm/tools/jpeg/jmemansi.c | 167 + 3rdparty/openctm/tools/jpeg/jmemdos.c | 638 + 3rdparty/openctm/tools/jpeg/jmemdosa.asm | 379 + 3rdparty/openctm/tools/jpeg/jmemmac.c | 289 + 3rdparty/openctm/tools/jpeg/jmemmgr.c | 1118 + 3rdparty/openctm/tools/jpeg/jmemname.c | 276 + 3rdparty/openctm/tools/jpeg/jmemnobs.c | 109 + 3rdparty/openctm/tools/jpeg/jmemsys.h | 198 + 3rdparty/openctm/tools/jpeg/jmorecfg.h | 371 + 3rdparty/openctm/tools/jpeg/jpegint.h | 395 + 3rdparty/openctm/tools/jpeg/jpeglib.h | 1135 + 3rdparty/openctm/tools/jpeg/jpegtran.1 | 272 + 3rdparty/openctm/tools/jpeg/jpegtran.c | 546 + 3rdparty/openctm/tools/jpeg/jquant1.c | 856 + 3rdparty/openctm/tools/jpeg/jquant2.c | 1310 + 3rdparty/openctm/tools/jpeg/jutils.c | 179 + 3rdparty/openctm/tools/jpeg/jversion.h | 14 + 3rdparty/openctm/tools/jpeg/libjpeg.map | 4 + 3rdparty/openctm/tools/jpeg/libjpeg.txt | 3067 + 3rdparty/openctm/tools/jpeg/ltmain.sh | 8406 ++ 3rdparty/openctm/tools/jpeg/makcjpeg.st | 36 + 3rdparty/openctm/tools/jpeg/makdjpeg.st | 36 + 3rdparty/openctm/tools/jpeg/makeadsw.vc6 | 77 + 3rdparty/openctm/tools/jpeg/makeasln.vc9 | 33 + 3rdparty/openctm/tools/jpeg/makecdep.vc6 | 82 + 3rdparty/openctm/tools/jpeg/makecdsp.vc6 | 130 + 3rdparty/openctm/tools/jpeg/makecmak.vc6 | 159 + 3rdparty/openctm/tools/jpeg/makecvcp.vc9 | 186 + 3rdparty/openctm/tools/jpeg/makeddep.vc6 | 82 + 3rdparty/openctm/tools/jpeg/makeddsp.vc6 | 130 + 3rdparty/openctm/tools/jpeg/makedmak.vc6 | 159 + 3rdparty/openctm/tools/jpeg/makedvcp.vc9 | 186 + 3rdparty/openctm/tools/jpeg/makefile.ansi | 220 + 3rdparty/openctm/tools/jpeg/makefile.bcc | 291 + 3rdparty/openctm/tools/jpeg/makefile.dj | 226 + 3rdparty/openctm/tools/jpeg/makefile.linux | 221 + 3rdparty/openctm/tools/jpeg/makefile.macosx | 221 + 3rdparty/openctm/tools/jpeg/makefile.manx | 220 + 3rdparty/openctm/tools/jpeg/makefile.mc6 | 255 + 3rdparty/openctm/tools/jpeg/makefile.mms | 224 + 3rdparty/openctm/tools/jpeg/makefile.sas | 258 + 3rdparty/openctm/tools/jpeg/makefile.unix | 234 + 3rdparty/openctm/tools/jpeg/makefile.vc | 220 + 3rdparty/openctm/tools/jpeg/makefile.vms | 142 + 3rdparty/openctm/tools/jpeg/makefile.wat | 239 + 3rdparty/openctm/tools/jpeg/makejdep.vc6 | 423 + 3rdparty/openctm/tools/jpeg/makejdsp.vc6 | 285 + 3rdparty/openctm/tools/jpeg/makejdsw.vc6 | 29 + 3rdparty/openctm/tools/jpeg/makejmak.vc6 | 425 + 3rdparty/openctm/tools/jpeg/makejsln.vc9 | 17 + 3rdparty/openctm/tools/jpeg/makejvcp.vc9 | 328 + 3rdparty/openctm/tools/jpeg/makeproj.mac | 213 + 3rdparty/openctm/tools/jpeg/makerdep.vc6 | 6 + 3rdparty/openctm/tools/jpeg/makerdsp.vc6 | 78 + 3rdparty/openctm/tools/jpeg/makermak.vc6 | 110 + 3rdparty/openctm/tools/jpeg/makervcp.vc9 | 133 + 3rdparty/openctm/tools/jpeg/maketdep.vc6 | 43 + 3rdparty/openctm/tools/jpeg/maketdsp.vc6 | 122 + 3rdparty/openctm/tools/jpeg/maketmak.vc6 | 131 + 3rdparty/openctm/tools/jpeg/maketvcp.vc9 | 178 + 3rdparty/openctm/tools/jpeg/makewdep.vc6 | 6 + 3rdparty/openctm/tools/jpeg/makewdsp.vc6 | 78 + 3rdparty/openctm/tools/jpeg/makewmak.vc6 | 110 + 3rdparty/openctm/tools/jpeg/makewvcp.vc9 | 133 + 3rdparty/openctm/tools/jpeg/makljpeg.st | 68 + 3rdparty/openctm/tools/jpeg/maktjpeg.st | 30 + 3rdparty/openctm/tools/jpeg/makvms.opt | 4 + 3rdparty/openctm/tools/jpeg/missing | 376 + 3rdparty/openctm/tools/jpeg/rdbmp.c | 439 + 3rdparty/openctm/tools/jpeg/rdcolmap.c | 253 + 3rdparty/openctm/tools/jpeg/rdgif.c | 38 + 3rdparty/openctm/tools/jpeg/rdjpgcom.1 | 63 + 3rdparty/openctm/tools/jpeg/rdjpgcom.c | 515 + 3rdparty/openctm/tools/jpeg/rdppm.c | 459 + 3rdparty/openctm/tools/jpeg/rdrle.c | 387 + 3rdparty/openctm/tools/jpeg/rdswitch.c | 365 + 3rdparty/openctm/tools/jpeg/rdtarga.c | 500 + 3rdparty/openctm/tools/jpeg/readme.dos | 15 + 3rdparty/openctm/tools/jpeg/structure.txt | 945 + 3rdparty/openctm/tools/jpeg/testimg.bmp | Bin 0 -> 35050 bytes 3rdparty/openctm/tools/jpeg/testimg.jpg | Bin 0 -> 5764 bytes 3rdparty/openctm/tools/jpeg/testimg.ppm | 4 + 3rdparty/openctm/tools/jpeg/testimgp.jpg | Bin 0 -> 5645 bytes 3rdparty/openctm/tools/jpeg/testorig.jpg | Bin 0 -> 5770 bytes 3rdparty/openctm/tools/jpeg/testprog.jpg | Bin 0 -> 5655 bytes 3rdparty/openctm/tools/jpeg/transupp.c | 1533 + 3rdparty/openctm/tools/jpeg/transupp.h | 205 + 3rdparty/openctm/tools/jpeg/usage.txt | 605 + 3rdparty/openctm/tools/jpeg/wizard.txt | 211 + 3rdparty/openctm/tools/jpeg/wrbmp.c | 442 + 3rdparty/openctm/tools/jpeg/wrgif.c | 399 + 3rdparty/openctm/tools/jpeg/wrjpgcom.1 | 103 + 3rdparty/openctm/tools/jpeg/wrjpgcom.c | 583 + 3rdparty/openctm/tools/jpeg/wrppm.c | 269 + 3rdparty/openctm/tools/jpeg/wrrle.c | 305 + 3rdparty/openctm/tools/jpeg/wrtarga.c | 253 + 3rdparty/openctm/tools/lwo.cpp | 636 + 3rdparty/openctm/tools/lwo.h | 40 + 3rdparty/openctm/tools/mesh.cpp | 214 + 3rdparty/openctm/tools/mesh.h | 195 + 3rdparty/openctm/tools/meshio.cpp | 112 + 3rdparty/openctm/tools/meshio.h | 46 + 3rdparty/openctm/tools/obj.cpp | 347 + 3rdparty/openctm/tools/obj.h | 40 + 3rdparty/openctm/tools/off.cpp | 253 + 3rdparty/openctm/tools/off.h | 40 + 3rdparty/openctm/tools/phong.frag | 62 + 3rdparty/openctm/tools/phong.vert | 48 + 3rdparty/openctm/tools/ply.cpp | 320 + 3rdparty/openctm/tools/ply.h | 40 + 3rdparty/openctm/tools/pnglite/pnglite.c | 877 + 3rdparty/openctm/tools/pnglite/pnglite.h | 227 + 3rdparty/openctm/tools/rply/LICENSE | 20 + 3rdparty/openctm/tools/rply/rply.c | 1497 + 3rdparty/openctm/tools/rply/rply.h | 365 + 3rdparty/openctm/tools/stl.cpp | 238 + 3rdparty/openctm/tools/stl.h | 40 + 3rdparty/openctm/tools/sysdialog.h | 98 + 3rdparty/openctm/tools/sysdialog_gtk.cpp | 217 + 3rdparty/openctm/tools/sysdialog_mac.mm | 149 + 3rdparty/openctm/tools/sysdialog_win.cpp | 203 + 3rdparty/openctm/tools/systimer.cpp | 75 + 3rdparty/openctm/tools/systimer.h | 66 + 3rdparty/openctm/tools/tinyxml/Makefile.linux | 35 + .../openctm/tools/tinyxml/Makefile.macosx | 35 + 3rdparty/openctm/tools/tinyxml/Makefile.mingw | 35 + 3rdparty/openctm/tools/tinyxml/Makefile.msvc | 35 + 3rdparty/openctm/tools/tinyxml/changes.txt | 269 + 3rdparty/openctm/tools/tinyxml/readme.txt | 530 + 3rdparty/openctm/tools/tinyxml/tinystr.cpp | 116 + 3rdparty/openctm/tools/tinyxml/tinystr.h | 319 + 3rdparty/openctm/tools/tinyxml/tinyxml.cpp | 1888 + 3rdparty/openctm/tools/tinyxml/tinyxml.h | 1802 + .../openctm/tools/tinyxml/tinyxmlerror.cpp | 53 + .../openctm/tools/tinyxml/tinyxmlparser.cpp | 1638 + 3rdparty/openctm/tools/wrl.cpp | 305 + 3rdparty/openctm/tools/wrl.h | 40 + 3rdparty/openctm/tools/zlib/Makefile.linux | 39 + 3rdparty/openctm/tools/zlib/Makefile.macosx | 39 + 3rdparty/openctm/tools/zlib/Makefile.mingw | 39 + 3rdparty/openctm/tools/zlib/Makefile.msvc | 39 + 3rdparty/openctm/tools/zlib/README | 125 + 3rdparty/openctm/tools/zlib/adler32.c | 149 + 3rdparty/openctm/tools/zlib/compress.c | 79 + 3rdparty/openctm/tools/zlib/crc32.c | 423 + 3rdparty/openctm/tools/zlib/crc32.h | 441 + 3rdparty/openctm/tools/zlib/deflate.c | 1736 + 3rdparty/openctm/tools/zlib/deflate.h | 331 + 3rdparty/openctm/tools/zlib/gzio.c | 1026 + 3rdparty/openctm/tools/zlib/infback.c | 623 + 3rdparty/openctm/tools/zlib/inffast.c | 318 + 3rdparty/openctm/tools/zlib/inffast.h | 11 + 3rdparty/openctm/tools/zlib/inffixed.h | 94 + 3rdparty/openctm/tools/zlib/inflate.c | 1368 + 3rdparty/openctm/tools/zlib/inflate.h | 115 + 3rdparty/openctm/tools/zlib/inftrees.c | 329 + 3rdparty/openctm/tools/zlib/inftrees.h | 55 + 3rdparty/openctm/tools/zlib/minigzip.c | 322 + 3rdparty/openctm/tools/zlib/trees.c | 1219 + 3rdparty/openctm/tools/zlib/trees.h | 128 + 3rdparty/openctm/tools/zlib/uncompr.c | 61 + 3rdparty/openctm/tools/zlib/zconf.h | 332 + 3rdparty/openctm/tools/zlib/zlib.h | 1357 + 3rdparty/openctm/tools/zlib/zutil.c | 318 + 3rdparty/openctm/tools/zlib/zutil.h | 269 + 3rdparty/openctm/win-installer.iss | 249 + examples/00-helloworld/helloworld.cpp | 2 +- examples/01-cubes/cubes.cpp | 13 +- examples/01-cubes/fs_cubes.sc | 2 + examples/01-cubes/makefile | 95 +- examples/01-cubes/shaders/dx9/fs_cubes.bin | Bin 129 -> 0 bytes examples/01-cubes/shaders/dx9/vs_cubes.bin | Bin 287 -> 0 bytes examples/01-cubes/vs_cubes.sc | 2 +- examples/02-metaballs/common.sh | 6 - examples/02-metaballs/fs_metaballs.sc | 4 +- examples/02-metaballs/makefile | 95 +- examples/02-metaballs/metaballs.cpp | 2 +- .../shaders/dx11/fs_metaballs.bin | Bin 729 -> 0 bytes .../02-metaballs/shaders/dx9/fs_metaballs.bin | Bin 261 -> 0 bytes .../02-metaballs/shaders/dx9/vs_metaballs.bin | Bin 397 -> 0 bytes .../shaders/gles/fs_metaballs.bin | Bin 275 -> 0 bytes .../shaders/glsl/fs_metaballs.bin | Bin 236 -> 0 bytes examples/02-metaballs/vs_metaballs.sc | 2 +- examples/03-raymarch/fs_raymarching.sc | 131 + examples/03-raymarch/iq_sdf.sh | 82 + examples/03-raymarch/makefile | 9 + examples/03-raymarch/raymarch.cpp | 323 + examples/03-raymarch/varying.def.sc | 6 + examples/03-raymarch/vs_raymarching.sc | 16 + examples/04-mesh/bun_zipper.ply | 105410 +++++++++++++++ examples/04-mesh/fs_mesh.sc | 54 + examples/04-mesh/makefile | 9 + examples/04-mesh/mesh.cpp | 316 + examples/04-mesh/varying.def.sc | 10 + examples/04-mesh/vs_mesh.sc | 29 + examples/{01-cubes => common}/common.sh | 0 examples/common/math.h | 112 + examples/common/varying.def.sc | 10 + examples/runtime/meshes/bunny.ctm | Bin 0 -> 213750 bytes .../shaders/dx11/fs_cubes.bin | Bin examples/runtime/shaders/dx11/fs_mesh.bin | Bin 0 -> 2266 bytes .../runtime/shaders/dx11/fs_metaballs.bin | Bin 0 -> 889 bytes .../runtime/shaders/dx11/fs_raymarching.bin | Bin 0 -> 10694 bytes .../shaders/dx11/vs_cubes.bin | Bin examples/runtime/shaders/dx11/vs_mesh.bin | Bin 0 -> 1978 bytes .../shaders/dx11/vs_metaballs.bin | Bin .../runtime/shaders/dx11/vs_raymarching.bin | Bin 0 -> 1175 bytes examples/runtime/shaders/dx9/fs_cubes.bin | Bin 0 -> 129 bytes examples/runtime/shaders/dx9/fs_mesh.bin | Bin 0 -> 1270 bytes examples/runtime/shaders/dx9/fs_metaballs.bin | Bin 0 -> 473 bytes .../runtime/shaders/dx9/fs_raymarching.bin | Bin 0 -> 47422 bytes examples/runtime/shaders/dx9/vs_cubes.bin | Bin 0 -> 311 bytes examples/runtime/shaders/dx9/vs_mesh.bin | Bin 0 -> 954 bytes examples/runtime/shaders/dx9/vs_metaballs.bin | Bin 0 -> 433 bytes .../runtime/shaders/dx9/vs_raymarching.bin | Bin 0 -> 347 bytes .../shaders/gles/fs_cubes.bin | Bin examples/runtime/shaders/gles/fs_mesh.bin | Bin 0 -> 1248 bytes .../runtime/shaders/gles/fs_metaballs.bin | Bin 0 -> 358 bytes .../runtime/shaders/gles/fs_raymarching.bin | 234 + .../shaders/gles/vs_cubes.bin | Bin examples/runtime/shaders/gles/vs_mesh.bin | Bin 0 -> 1283 bytes .../shaders/gles/vs_metaballs.bin | Bin .../runtime/shaders/gles/vs_raymarching.bin | Bin 0 -> 393 bytes .../shaders/glsl/fs_cubes.bin | Bin examples/runtime/shaders/glsl/fs_mesh.bin | Bin 0 -> 1209 bytes .../runtime/shaders/glsl/fs_metaballs.bin | Bin 0 -> 319 bytes .../runtime/shaders/glsl/fs_raymarching.bin | 232 + .../shaders/glsl/vs_cubes.bin | Bin examples/runtime/shaders/glsl/vs_mesh.bin | Bin 0 -> 1244 bytes .../shaders/glsl/vs_metaballs.bin | Bin .../runtime/shaders/glsl/vs_raymarching.bin | Bin 0 -> 354 bytes include/bgfx.h | 1108 +- premake/example-01-cubes.lua | 2 +- premake/example-02-metaballs.lua | 2 +- premake/example-03-raymarch.lua | 36 + premake/example-04-mesh.lua | 42 + premake/openctm.lua | 74 + premake/premake4.lua | 3 + premake/shader.mk | 96 + premake/shaderc.lua | 3 + src/bgfx.cpp | 36 +- src/bgfx_p.h | 5 +- src/renderer_d3d11.cpp | 24 +- src/renderer_d3d9.cpp | 21 +- src/renderer_gl.cpp | 28 +- tools/bin/shaderc.exe | Bin 1117696 -> 1077248 bytes tools/shaderc.cpp | 167 +- 2357 files changed, 389777 insertions(+), 116988 deletions(-) delete mode 100644 3rdparty/glsl-optimizer/.emacs-dirvars create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/Main.cpp create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/Makefile create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/Readme create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/SourceFiles create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/glslopt.bdgcfg create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/glslopt.sln create mode 100644 3rdparty/glsl-optimizer/contrib/glslopt/glslopt.vcproj delete mode 100644 3rdparty/glsl-optimizer/include/GL/gl.h delete mode 100644 3rdparty/glsl-optimizer/include/GL/glext.h create mode 100644 3rdparty/glsl-optimizer/src/.gitignore create mode 100644 3rdparty/glsl-optimizer/src/glsl/.dir-locals.el create mode 100644 3rdparty/glsl-optimizer/src/glsl/Makefile delete mode 100644 3rdparty/glsl-optimizer/src/glsl/autogen.sh rename 3rdparty/glsl-optimizer/src/glsl/{ir_variable.cpp => builtin_variables.cpp} (58%) delete mode 100644 3rdparty/glsl-optimizer/src/glsl/builtin_variables.h create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/glsl/inverse.glsl rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{abs => abs.ir} (100%) delete mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos.ir rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{acosh => acosh.ir} (84%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{all => all.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{any => any.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{asin => asin.ir} (100%) delete mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh.ir rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{atan => atan.ir} (55%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{atanh => atanh.ir} (54%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{ceil => ceil.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{clamp => clamp.ir} (56%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{cos => cos.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{cosh => cosh.ir} (84%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{cross => cross.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{dFdx => dFdx.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{dFdy => dFdy.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{degrees => degrees.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{distance => distance.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{dot => dot.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{equal => equal.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{exp => exp.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{exp2 => exp2.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{faceforward => faceforward.ir} (100%) create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToInt.ir create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToUint.ir rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{floor => floor.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{fract => fract.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{ftransform => ftransform.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{fwidth => fwidth.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{greaterThan => greaterThan.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{greaterThanEqual => greaterThanEqual.ir} (100%) create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/intBitsToFloat.ir rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{inversesqrt => inversesqrt.ir} (100%) create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/isinf.ir create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/isnan.ir rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{length => length.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{lessThan => lessThan.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{lessThanEqual => lessThanEqual.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{log => log.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{log2 => log2.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{matrixCompMult => matrixCompMult.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{max => max.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{min => min.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{mix => mix.ir} (62%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{mod => mod.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{modf => modf.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{noise1 => noise1.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{noise2 => noise2.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{noise3 => noise3.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{noise4 => noise4.ir} (96%) delete mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize.ir rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{not => not.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{notEqual => notEqual.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{outerProduct => outerProduct.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{pow => pow.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{radians => radians.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{reflect => reflect.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{refract => refract.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{round => round.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{roundEven => roundEven.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{sign => sign.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{sin => sin.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{sinh => sinh.ir} (84%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{smoothstep => smoothstep.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{sqrt => sqrt.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{step => step.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{tan => tan.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{tanh => tanh.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{transpose => transpose.ir} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/ir/{trunc => trunc.ir} (100%) create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/ir/uintBitsToFloat.ir create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.glsl create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.glsl create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.glsl create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.glsl create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.frag create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.glsl create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl rename 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/{ARB_shader_texture_lod.vert => ARB_shader_texture_lod.glsl} (100%) rename 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/{ARB_texture_rectangle.frag => ARB_texture_rectangle.glsl} (100%) delete mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.vert create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/EXT_shadow_samplers.frag create mode 100644 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_EGL_image_external.glsl delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c.expected delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c.expected delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c.expected delete mode 100644 3rdparty/glsl-optimizer/src/glsl/glcpp/tests/glcpp-test create mode 100644 3rdparty/glsl-optimizer/src/glsl/ir_builder.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/ir_builder.h create mode 100644 3rdparty/glsl-optimizer/src/glsl/ir_uniform.h create mode 100644 3rdparty/glsl-optimizer/src/glsl/link_uniform_initializers.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/link_uniforms.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/lower_clip_distance.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/lower_discard_flow.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/lower_output_reads.cpp delete mode 100644 3rdparty/glsl-optimizer/src/glsl/lower_texture_projection.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/lower_ubo_reference.cpp create mode 100644 3rdparty/glsl-optimizer/src/glsl/opt_array_splitting.cpp delete mode 100644 3rdparty/glsl-optimizer/src/glsl/opt_discard_simplification.cpp delete mode 100644 3rdparty/glsl-optimizer/src/mapi/glapi/.gitignore delete mode 100644 3rdparty/glsl-optimizer/src/mapi/glapi/glapi.h delete mode 100644 3rdparty/glsl-optimizer/src/mapi/glapi/glthread.h delete mode 100644 3rdparty/glsl-optimizer/src/mapi/mapi/u_compiler.h delete mode 100644 3rdparty/glsl-optimizer/src/mapi/mapi/u_current.h delete mode 100644 3rdparty/glsl-optimizer/src/mapi/mapi/u_thread.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/main/extensions.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/main/formats.h create mode 100644 3rdparty/glsl-optimizer/src/mesa/main/glminimal.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/main/mfeatures.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/main/shaderobj.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/main/uniforms.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/main/version.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/math/m_matrix.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/program/ir_to_mesa.h delete mode 100644 3rdparty/glsl-optimizer/src/mesa/program/prog_uniform.h create mode 100644 3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-outES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-flare-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-flare-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-outES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-outES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-particle-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-particle-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-outES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-for-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-for-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-for-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/nested-inlining-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/nested-inlining-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/nested-inlining-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/small-float-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/small-float-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/small-float-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/texProj-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/texProj-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/texProj-outES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Decal-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Decal-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-outES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-alphabumpspec-in.txt => z-alphabumpspec-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-collectshadows-in.txt => z-collectshadows-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-collectshadows-inES.txt => z-collectshadows-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-flare-in.txt => z-flare-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-flare-inES.txt => z-flare-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-flare-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-flare-irES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-flare-out.txt => z-flare-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-flare-outES.txt => z-flare-outES.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-fxaa-preset1-in.txt => z-fxaa-preset1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-fxaa-preset3-in.txt => z-fxaa-preset3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-fxaa3-11-consolepc-in.txt => z-fxaa3-11-consolepc-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-fxaa3-11-consolepc-inES.txt => z-fxaa3-11-consolepc-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-outES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-fxaa3-11-pc39-in.txt => z-fxaa3-11-pc39-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-fxaa3-11-pc39-inES.txt => z-fxaa3-11-pc39-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-outES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-particle-in.txt => z-particle-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-particle-inES.txt => z-particle-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-particle-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-particle-irES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-particle-out.txt => z-particle-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-particle-outES.txt => z-particle-outES.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-prepasslight-in.txt => z-prepasslight-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-prepasslight-inES.txt => z-prepasslight-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{complex-treeleaf-in.txt => z-treeleaf-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{complex-treeleaf-inES.txt => z-treeleaf-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Bumped_Diffuse-in.txt => zun-Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Bumped_Diffuse1-in.txt => zun-Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Bumped_Specular-in.txt => zun-Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Bumped_Specular1-in.txt => zun-Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Bumped_Specular2-in.txt => zun-Bumped_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Decal-in.txt => zun-Decal-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Decal-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Decal-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Decal1-in.txt => zun-Decal1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Decal2-in.txt => zun-Decal2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Diffuse-in.txt => zun-Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Diffuse1-in.txt => zun-Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Diffuse2-in.txt => zun-Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Diffuse_Alpha_Shadowed_ZWrite-in.txt => zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Diffuse_Detail-in.txt => zun-Diffuse_Detail-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Diffuse_Detail1-in.txt => zun-Diffuse_Detail1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-FX_Glass_Stained_BumpDistort-in.txt => zun-FX_Glass_Stained_BumpDistort-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-FX_Glass_Stained_BumpDistort-out.txt => zun-FX_Glass_Stained_BumpDistort-out.txt} (51%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-FX_Water_(simple)-in.txt => zun-FX_Water_(simple)-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Grab_Invert-in.txt => zun-Grab_Invert-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Grab_Invert-out.txt => zun-Grab_Invert-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Camera-DepthNormalTexture-in.txt => zun-Hidden_Camera-DepthNormalTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Camera-DepthNormalTexture1-in.txt => zun-Hidden_Camera-DepthNormalTexture1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Camera-DepthTexture-in.txt => zun-Hidden_Camera-DepthTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Camera-DepthTexture-out.txt => zun-Hidden_Camera-DepthTexture-out.txt} (53%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Color_Correction_Effect-in.txt => zun-Hidden_Color_Correction_Effect-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Color_Correction_Effect-out.txt => zun-Hidden_Color_Correction_Effect-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Edge_Detect_X-in.txt => zun-Hidden_Edge_Detect_X-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_GlowConeTap-in.txt => zun-Hidden_GlowConeTap-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Glow_Downsample-in.txt => zun-Hidden_Glow_Downsample-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Grayscale_Effect-in.txt => zun-Hidden_Grayscale_Effect-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-CombineDepthNormals-in.txt => zun-Hidden_Internal-CombineDepthNormals-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-GUITextureBlit-in.txt => zun-Hidden_Internal-GUITextureBlit-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-GUITextureClip-in.txt => zun-Hidden_Internal-GUITextureClip-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-Halo-in.txt => zun-Hidden_Internal-Halo-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-Halo-out.txt => zun-Hidden_Internal-Halo-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-PrePassCollectShadows-in.txt => zun-Hidden_Internal-PrePassCollectShadows-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Internal-PrePassLighting-in.txt => zun-Hidden_Internal-PrePassLighting-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Noise_Shader_RGB-in.txt => zun-Hidden_Noise_Shader_RGB-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Noise_Shader_YUV-in.txt => zun-Hidden_Noise_Shader_YUV-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Sepiatone_Effect-in.txt => zun-Hidden_Sepiatone_Effect-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Shadow-ScreenBlur-in.txt => zun-Hidden_Shadow-ScreenBlur-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_ShowDepthNTexture-in.txt => zun-Hidden_ShowDepthNTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_ShowDepthTexture-in.txt => zun-Hidden_ShowDepthTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_BillboardTree-in.txt => zun-Hidden_TerrainEngine_BillboardTree-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt} (54%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_Vertexlit-in.txt => zun-Hidden_TerrainEngine_Details_Vertexlit-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_Vertexlit1-in.txt => zun-Hidden_TerrainEngine_Details_Vertexlit1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_WavingDoublePass-in.txt => zun-Hidden_TerrainEngine_Details_WavingDoublePass-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt => zun-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Details_WavingDoublePass2-in.txt => zun-Hidden_TerrainEngine_Details_WavingDoublePass2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-in.txt => zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-out.txt => zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt => zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt => zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-in.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-in.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Tree_Bark_Shader_Rendertex-in.txt => zun-Hidden_Tree_Bark_Shader_Rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Tree_Leaf_Shader_Rendertex-in.txt => zun-Hidden_Tree_Leaf_Shader_Rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Tree_Optimized_Bark_Shader-in.txt => zun-Hidden_Tree_Optimized_Bark_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Tree_Optimized_Bark_Shader1-in.txt => zun-Hidden_Tree_Optimized_Bark_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Tree_Optimized_Leaf_Shader-in.txt => zun-Hidden_Tree_Optimized_Leaf_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Tree_Optimized_Leaf_Shader1-in.txt => zun-Hidden_Tree_Optimized_Leaf_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Twirt_Effect_Shader-in.txt => zun-Hidden_Twirt_Effect_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Twirt_Effect_Shader-out.txt => zun-Hidden_Twirt_Effect_Shader-out.txt} (67%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Hidden_Twist_Effect-in.txt => zun-Hidden_Twist_Effect-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt => zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-in.txt => zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Legacy_Shaders_Lightmapped_Diffuse-in.txt => zun-Legacy_Shaders_Lightmapped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-MobileBumpSpec-inES.txt => zun-MobileBumpSpec-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_My_Soft_Occlusion_Leaves-in.txt => zun-Nature_My_Soft_Occlusion_Leaves-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_My_Soft_Occlusion_Leaves-out.txt => zun-Nature_My_Soft_Occlusion_Leaves-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Bark-in.txt => zun-Nature_Soft_Occlusion_Bark-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Bark1-in.txt => zun-Nature_Soft_Occlusion_Bark1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Bark2-in.txt => zun-Nature_Soft_Occlusion_Bark2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Bark3-in.txt => zun-Nature_Soft_Occlusion_Bark3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Bark3-out.txt => zun-Nature_Soft_Occlusion_Bark3-out.txt} (57%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Leaves-in.txt => zun-Nature_Soft_Occlusion_Leaves-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Leaves1-in.txt => zun-Nature_Soft_Occlusion_Leaves1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Leaves2-in.txt => zun-Nature_Soft_Occlusion_Leaves2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Soft_Occlusion_Leaves3-in.txt => zun-Nature_Soft_Occlusion_Leaves3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Vegetation_Two_Pass_unlit-in.txt => zun-Nature_Vegetation_Two_Pass_unlit-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Nature_Vegetation_Two_Pass_unlit-out.txt => zun-Nature_Vegetation_Two_Pass_unlit-out.txt} (76%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Parallax_Diffuse-in.txt => zun-Parallax_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Parallax_Diffuse1-in.txt => zun-Parallax_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Parallax_Diffuse2-in.txt => zun-Parallax_Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Parallax_Specular-in.txt => zun-Parallax_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Additive-in.txt => zun-Particles_Additive-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Additive-out.txt => zun-Particles_Additive-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Additive_(Soft)-in.txt => zun-Particles_Additive_(Soft)-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Alpha_Blended_Premultiply-in.txt => zun-Particles_Alpha_Blended_Premultiply-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Alpha_Blended_Premultiply-out.txt => zun-Particles_Alpha_Blended_Premultiply-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Multiply-in.txt => zun-Particles_Multiply-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Multiply-out.txt => zun-Particles_Multiply-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles_Multiply_(Double)-in.txt => zun-Particles_Multiply_(Double)-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Particles__Additive-Multiply-in.txt => zun-Particles__Additive-Multiply-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Bumped_Diffuse-in.txt => zun-Reflective_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Bumped_Diffuse1-in.txt => zun-Reflective_Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Bumped_Specular-in.txt => zun-Reflective_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Bumped_Specular1-in.txt => zun-Reflective_Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Bumped_Specular2-in.txt => zun-Reflective_Bumped_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Bumped_Unlit-in.txt => zun-Reflective_Bumped_Unlit-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Diffuse-in.txt => zun-Reflective_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Diffuse1-in.txt => zun-Reflective_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Parallax_Diffuse-in.txt => zun-Reflective_Parallax_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Parallax_Diffuse1-in.txt => zun-Reflective_Parallax_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Parallax_Specular-in.txt => zun-Reflective_Parallax_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Parallax_Specular1-in.txt => zun-Reflective_Parallax_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Specular-in.txt => zun-Reflective_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Specular1-in.txt => zun-Reflective_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Reflective_Specular2-in.txt => zun-Reflective_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-RenderFX_Skybox-in.txt => zun-RenderFX_Skybox-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-RenderFX_Skybox_Cubed-in.txt => zun-RenderFX_Skybox_Cubed-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Bumped_Diffuse-in.txt => zun-Self-Illumin_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Bumped_Diffuse1-in.txt => zun-Self-Illumin_Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Bumped_Diffuse2-in.txt => zun-Self-Illumin_Bumped_Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Bumped_Specular-in.txt => zun-Self-Illumin_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Bumped_Specular1-in.txt => zun-Self-Illumin_Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Diffuse-in.txt => zun-Self-Illumin_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Diffuse1-in.txt => zun-Self-Illumin_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Parallax_Diffuse-in.txt => zun-Self-Illumin_Parallax_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Parallax_Diffuse1-in.txt => zun-Self-Illumin_Parallax_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Parallax_Diffuse2-in.txt => zun-Self-Illumin_Parallax_Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Parallax_Specular-in.txt => zun-Self-Illumin_Parallax_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Parallax_Specular1-in.txt => zun-Self-Illumin_Parallax_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Specular-in.txt => zun-Self-Illumin_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Specular1-in.txt => zun-Self-Illumin_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Self-Illumin_Specular2-in.txt => zun-Self-Illumin_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Specular-in.txt => zun-Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Specular1-in.txt => zun-Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Specular2-in.txt => zun-Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_2UV-in.txt => zun-Surface_2UV-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_2UV1-in.txt => zun-Surface_2UV1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Colored_Specular-in.txt => zun-Surface_Colored_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Colored_Specular1-in.txt => zun-Surface_Colored_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Custom_Data-in.txt => zun-Surface_Custom_Data-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Custom_Data1-in.txt => zun-Surface_Custom_Data1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Custom_Data2-in.txt => zun-Surface_Custom_Data2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_DecalAdd-in.txt => zun-Surface_DecalAdd-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_DecalAddBump3-in.txt => zun-Surface_DecalAddBump3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_DecalAddBump5-in.txt => zun-Surface_DecalAddBump5-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Diffuse_Wrapped-in.txt => zun-Surface_Diffuse_Wrapped-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Rim-in.txt => zun-Surface_Rim-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Rim1-in.txt => zun-Surface_Rim1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Rim2-in.txt => zun-Surface_Rim2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Rim_Bump-in.txt => zun-Surface_Rim_Bump-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Rim_Bump1-in.txt => zun-Surface_Rim_Bump1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_ScreenPos-in.txt => zun-Surface_ScreenPos-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_ScreenPos1-in.txt => zun-Surface_ScreenPos1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_ScreenPos2-in.txt => zun-Surface_ScreenPos2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_ScreenPosAlbedo-in.txt => zun-Surface_ScreenPosAlbedo-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_ScreenPosAlbedo1-in.txt => zun-Surface_ScreenPosAlbedo1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Slices-in.txt => zun-Surface_Slices-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Slices1-in.txt => zun-Surface_Slices1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Slices2-in.txt => zun-Surface_Slices2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_Slices3-in.txt => zun-Surface_Slices3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_WorldRefl-in.txt => zun-Surface_WorldRefl-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Surface_WorldRefl1-in.txt => zun-Surface_WorldRefl1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_CgNormals-in.txt => zun-Test_CgNormals-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_CgNormals-out.txt => zun-Test_CgNormals-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_FontShaderCull-in.txt => zun-Test_FontShaderCull-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_FontShaderCull-out.txt => zun-Test_FontShaderCull-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_VertexShaderDepthTexture-in.txt => zun-Test_VertexShaderDepthTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_VertexShaderDepthTexture-out.txt => zun-Test_VertexShaderDepthTexture-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_VertexShaderTexture-in.txt => zun-Test_VertexShaderTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Test_VertexShaderTexture-out.txt => zun-Test_VertexShaderTexture-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tests_Blend_Many_Textures-in.txt => zun-Tests_Blend_Many_Textures-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tests_Blend_Many_Textures-out.txt => zun-Tests_Blend_Many_Textures-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tests_Fwd-Def-Vert-in.txt => zun-Tests_Fwd-Def-Vert-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tests_Fwd-Def-Vert1-in.txt => zun-Tests_Fwd-Def-Vert1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-TexGen_Cube_Refl-in.txt => zun-TexGen_Cube_Refl-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-TexGen_Cube_Refl-out.txt => zun-TexGen_Cube_Refl-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Toon_Basic-in.txt => zun-Toon_Basic-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Toon_Basic-out.txt => zun-Toon_Basic-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Toon_Lighted-in.txt => zun-Toon_Lighted-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Bumped_Specular-in.txt => zun-Transparent_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Bumped_Diffuse-in.txt => zun-Transparent_Cutout_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Bumped_Diffuse1-in.txt => zun-Transparent_Cutout_Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Bumped_Specular-in.txt => zun-Transparent_Cutout_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Bumped_Specular1-in.txt => zun-Transparent_Cutout_Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Diffuse-in.txt => zun-Transparent_Cutout_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Specular-in.txt => zun-Transparent_Cutout_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Specular1-in.txt => zun-Transparent_Cutout_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Cutout_Specular2-in.txt => zun-Transparent_Cutout_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Diffuse-in.txt => zun-Transparent_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Transparent_Specular-in.txt => zun-Transparent_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-TreeCreatorLeavesRT-in.txt => zun-TreeCreatorLeavesRT-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tree_Editor_Bark_Shader-in.txt => zun-Tree_Editor_Bark_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tree_Editor_Bark_Shader1-in.txt => zun-Tree_Editor_Bark_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tree_Editor_Leaf_Shader-in.txt => zun-Tree_Editor_Leaf_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Tree_Editor_Leaf_Shader1-in.txt => zun-Tree_Editor_Leaf_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Vertex_Colored-in.txt => zun-Vertex_Colored-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-ir.txt rename 3rdparty/glsl-optimizer/tests/fragment/{unity-Vertex_Colored-out.txt => zun-Vertex_Colored-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/fragment/{unity-currently_adapted-in.txt => zun-currently_adapted-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-particle-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-particle-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-irES.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-inES.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/opt-unroll-in.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/opt-unroll-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/opt-unroll-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Decal-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-ir.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-out.txt delete mode 100644 3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{complex-alphabumpspec-in.txt => z-alphabumpspec-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{complex-alphabumpspec-out.txt => z-alphabumpspec-out.txt} (62%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-particle-in.txt => z-particle-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-particle-inES.txt => z-particle-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-particle-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-particle-irES.txt rename 3rdparty/glsl-optimizer/tests/vertex/{complex-particle-out.txt => z-particle-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-particle-outES.txt => z-particle-outES.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-prepasslight-in.txt => z-prepasslight-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-prepasslight-inES.txt => z-prepasslight-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-irES.txt rename 3rdparty/glsl-optimizer/tests/vertex/{complex-prepasslight-out.txt => z-prepasslight-out.txt} (61%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-prepasslight-outES.txt => z-prepasslight-outES.txt} (67%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-treeleaf-in.txt => z-treeleaf-in.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{complex-treeleaf-inES.txt => z-treeleaf-inES.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-irES.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-out.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Bumped_Diffuse-in.txt => zun-Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Bumped_Diffuse1-in.txt => zun-Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Bumped_Specular-in.txt => zun-Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Bumped_Specular2-in.txt => zun-Bumped_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Decal-in.txt => zun-Decal-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Decal-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Decal-out.txt => zun-Decal-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Diffuse-in.txt => zun-Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Diffuse-out.txt => zun-Diffuse-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Diffuse2-in.txt => zun-Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Diffuse_Alpha_Shadowed_ZWrite-in.txt => zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-FX_Glass_Stained_BumpDistort-in.txt => zun-FX_Glass_Stained_BumpDistort-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-FX_Water_(simple)-in.txt => zun-FX_Water_(simple)-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-FX_Water_(simple)-out.txt => zun-FX_Water_(simple)-out.txt} (68%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Grab_Invert-in.txt => zun-Grab_Invert-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Grab_Invert-out.txt => zun-Grab_Invert-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Camera-DepthNormalTexture-in.txt => zun-Hidden_Camera-DepthNormalTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Camera-DepthNormalTexture1-in.txt => zun-Hidden_Camera-DepthNormalTexture1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Camera-DepthTexture-in.txt => zun-Hidden_Camera-DepthTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Glow_Downsample-in.txt => zun-Hidden_Glow_Downsample-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Internal-GUITextureClip-in.txt => zun-Hidden_Internal-GUITextureClip-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Internal-GUITextureClip-out.txt => zun-Hidden_Internal-GUITextureClip-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Internal-PrePassLighting-in.txt => zun-Hidden_Internal-PrePassLighting-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Noise_Shader_RGB-in.txt => zun-Hidden_Noise_Shader_RGB-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_BillboardTree-in.txt => zun-Hidden_TerrainEngine_BillboardTree-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt => zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt => zun-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt => zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt => zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt => zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt} (63%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Tree_Bark_Shader_Rendertex-in.txt => zun-Hidden_Tree_Bark_Shader_Rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Tree_Leaf_Shader_Rendertex-in.txt => zun-Hidden_Tree_Leaf_Shader_Rendertex-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Tree_Optimized_Bark_Shader-in.txt => zun-Hidden_Tree_Optimized_Bark_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Tree_Optimized_Bark_Shader1-in.txt => zun-Hidden_Tree_Optimized_Bark_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Tree_Optimized_Leaf_Shader-in.txt => zun-Hidden_Tree_Optimized_Leaf_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Tree_Optimized_Leaf_Shader1-in.txt => zun-Hidden_Tree_Optimized_Leaf_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Twist_Effect-in.txt => zun-Hidden_Twist_Effect-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Hidden_Twist_Effect-out.txt => zun-Hidden_Twist_Effect-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt => zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Diffuse-out.txt => zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt} (93%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Nature_Soft_Occlusion_Bark-in.txt => zun-Nature_Soft_Occlusion_Bark-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Nature_Soft_Occlusion_Bark2-in.txt => zun-Nature_Soft_Occlusion_Bark2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Nature_Soft_Occlusion_Bark3-in.txt => zun-Nature_Soft_Occlusion_Bark3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Nature_Soft_Occlusion_Leaves1-in.txt => zun-Nature_Soft_Occlusion_Leaves1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Nature_Soft_Occlusion_Leaves3-in.txt => zun-Nature_Soft_Occlusion_Leaves3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Parallax_Diffuse-in.txt => zun-Parallax_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Parallax_Diffuse1-in.txt => zun-Parallax_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Parallax_Diffuse2-out.txt => zun-Parallax_Diffuse1-out.txt} (62%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Parallax_Diffuse2-in.txt => zun-Parallax_Diffuse2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Particles_Blend-in.txt => zun-Particles_Blend-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Particles_Blend-out.txt => zun-Particles_Blend-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Diffuse-in.txt => zun-Reflective_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt => zun-Reflective_Bumped_Diffuse-out.txt} (93%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Diffuse1-in.txt => zun-Reflective_Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Diffuse1-out.txt => zun-Reflective_Bumped_Diffuse1-out.txt} (78%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Specular-in.txt => zun-Reflective_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Specular-out.txt => zun-Reflective_Bumped_Specular-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Specular1-in.txt => zun-Reflective_Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Specular2-in.txt => zun-Reflective_Bumped_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Specular2-out.txt => zun-Reflective_Bumped_Specular2-out.txt} (78%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Unlit-in.txt => zun-Reflective_Bumped_Unlit-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Bumped_Unlit-out.txt => zun-Reflective_Bumped_Unlit-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Diffuse-in.txt => zun-Reflective_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Diffuse-out.txt => zun-Reflective_Diffuse-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Diffuse1-in.txt => zun-Reflective_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Diffuse-in.txt => zun-Reflective_Parallax_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Diffuse-out.txt => zun-Reflective_Parallax_Diffuse-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Diffuse1-in.txt => zun-Reflective_Parallax_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Diffuse1-out.txt => zun-Reflective_Parallax_Diffuse1-out.txt} (72%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Specular-in.txt => zun-Reflective_Parallax_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Specular-out.txt => zun-Reflective_Parallax_Specular-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Specular1-in.txt => zun-Reflective_Parallax_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Parallax_Specular1-out.txt => zun-Reflective_Parallax_Specular1-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Specular-in.txt => zun-Reflective_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Specular-out.txt => zun-Reflective_Specular-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Specular1-in.txt => zun-Reflective_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Specular1-out.txt => zun-Reflective_Specular1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Reflective_Specular2-in.txt => zun-Reflective_Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-RenderFX_Skybox_Cubed-in.txt => zun-RenderFX_Skybox_Cubed-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-RenderFX_Skybox_Cubed-out.txt => zun-RenderFX_Skybox_Cubed-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Bumped_Diffuse-in.txt => zun-Self-Illumin_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Bumped_Diffuse-out.txt => zun-Self-Illumin_Bumped_Diffuse-out.txt} (92%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Bumped_Specular1-in.txt => zun-Self-Illumin_Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Bumped_Specular1-out.txt => zun-Self-Illumin_Bumped_Specular1-out.txt} (53%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Diffuse1-in.txt => zun-Self-Illumin_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Diffuse1-out.txt => zun-Self-Illumin_Diffuse1-out.txt} (61%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Parallax_Diffuse-in.txt => zun-Self-Illumin_Parallax_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Parallax_Diffuse-out.txt => zun-Self-Illumin_Parallax_Diffuse-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Parallax_Specular1-in.txt => zun-Self-Illumin_Parallax_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Parallax_Specular1-out.txt => zun-Self-Illumin_Parallax_Specular1-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Specular1-in.txt => zun-Self-Illumin_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Self-Illumin_Specular1-out.txt => zun-Self-Illumin_Specular1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-ShowDestAlpha-in.txt => zun-ShowDestAlpha-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-ShowDestAlpha-out.txt => zun-ShowDestAlpha-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Specular-in.txt => zun-Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Specular-out.txt => zun-Specular-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Specular1-in.txt => zun-Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Specular1-out.txt => zun-Specular1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Specular2-in.txt => zun-Specular2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_2UV-in.txt => zun-Surface_2UV-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_2UV-out.txt => zun-Surface_2UV-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_2UV1-in.txt => zun-Surface_2UV1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_2UV1-out.txt => zun-Surface_2UV1-out.txt} (53%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Colored_Specular-in.txt => zun-Surface_Colored_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Colored_Specular-out.txt => zun-Surface_Colored_Specular-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Colored_Specular1-in.txt => zun-Surface_Colored_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Colored_Specular1-out.txt => zun-Surface_Colored_Specular1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Custom_Data-in.txt => zun-Surface_Custom_Data-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Custom_Data-out.txt => zun-Surface_Custom_Data-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Custom_Data1-in.txt => zun-Surface_Custom_Data1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Custom_Data1-out.txt => zun-Surface_Custom_Data1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Custom_Data2-in.txt => zun-Surface_Custom_Data2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump-in.txt => zun-Surface_DecalAddBump-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump-out.txt => zun-Surface_DecalAddBump-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump1-in.txt => zun-Surface_DecalAddBump1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump2-in.txt => zun-Surface_DecalAddBump2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump2-out.txt => zun-Surface_DecalAddBump2-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump3-in.txt => zun-Surface_DecalAddBump3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_DecalAddBump3-out.txt => zun-Surface_DecalAddBump3-out.txt} (55%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Diffuse_Wrapped-in.txt => zun-Surface_Diffuse_Wrapped-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Diffuse_Wrapped-out.txt => zun-Surface_Diffuse_Wrapped-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim-in.txt => zun-Surface_Rim-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim-out.txt => zun-Surface_Rim-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim1-in.txt => zun-Surface_Rim1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim2-out.txt => zun-Surface_Rim1-out.txt} (63%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim2-in.txt => zun-Surface_Rim2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim_Bump-in.txt => zun-Surface_Rim_Bump-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim_Bump-out.txt => zun-Surface_Rim_Bump-out.txt} (92%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim_Bump1-in.txt => zun-Surface_Rim_Bump1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Rim_Bump1-out.txt => zun-Surface_Rim_Bump1-out.txt} (92%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPos-in.txt => zun-Surface_ScreenPos-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPos-out.txt => zun-Surface_ScreenPos-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPos1-in.txt => zun-Surface_ScreenPos1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPos1-out.txt => zun-Surface_ScreenPos1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPos2-in.txt => zun-Surface_ScreenPos2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPos2-out.txt => zun-Surface_ScreenPos2-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPosAlbedo-in.txt => zun-Surface_ScreenPosAlbedo-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPosAlbedo-out.txt => zun-Surface_ScreenPosAlbedo-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_ScreenPosAlbedo1-in.txt => zun-Surface_ScreenPosAlbedo1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Slices-in.txt => zun-Surface_Slices-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Slices-out.txt => zun-Surface_Slices-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Slices1-in.txt => zun-Surface_Slices1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Slices2-in.txt => zun-Surface_Slices2-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Slices3-in.txt => zun-Surface_Slices3-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_Slices3-out.txt => zun-Surface_Slices3-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_WorldRefl-in.txt => zun-Surface_WorldRefl-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_WorldRefl1-in.txt => zun-Surface_WorldRefl1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Surface_WorldRefl1-out.txt => zun-Surface_WorldRefl1-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Test_CgNormals-in.txt => zun-Test_CgNormals-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Test_CgNormals-out.txt => zun-Test_CgNormals-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Test_VertexShaderDepthTexture-in.txt => zun-Test_VertexShaderDepthTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Test_VertexShaderDepthTexture-out.txt => zun-Test_VertexShaderDepthTexture-out.txt} (61%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Test_VertexShaderTexture-in.txt => zun-Test_VertexShaderTexture-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-TexGen_Cube_Refl-in.txt => zun-TexGen_Cube_Refl-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Toon_Basic-in.txt => zun-Toon_Basic-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Toon_Basic-out.txt => zun-Toon_Basic-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Bumped_Specular-in.txt => zun-Transparent_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Bumped_Specular-out.txt => zun-Transparent_Bumped_Specular-out.txt} (94%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Bumped_Diffuse-in.txt => zun-Transparent_Cutout_Bumped_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Bumped_Diffuse-out.txt => zun-Transparent_Cutout_Bumped_Diffuse-out.txt} (91%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Bumped_Diffuse1-in.txt => zun-Transparent_Cutout_Bumped_Diffuse1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Bumped_Specular-in.txt => zun-Transparent_Cutout_Bumped_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Bumped_Specular1-in.txt => zun-Transparent_Cutout_Bumped_Specular1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Diffuse-in.txt => zun-Transparent_Cutout_Diffuse-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Diffuse-out.txt => zun-Transparent_Cutout_Diffuse-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Specular-in.txt => zun-Transparent_Cutout_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Cutout_Specular-out.txt => zun-Transparent_Cutout_Specular-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Specular-in.txt => zun-Transparent_Specular-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Transparent_Specular-out.txt => zun-Transparent_Specular-out.txt} (100%) rename 3rdparty/glsl-optimizer/tests/vertex/{unity-TreeCreatorLeavesRT-in.txt => zun-TreeCreatorLeavesRT-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Tree_Editor_Bark_Shader-in.txt => zun-Tree_Editor_Bark_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Tree_Editor_Bark_Shader1-in.txt => zun-Tree_Editor_Bark_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Tree_Editor_Leaf_Shader-in.txt => zun-Tree_Editor_Leaf_Shader-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Tree_Editor_Leaf_Shader1-in.txt => zun-Tree_Editor_Leaf_Shader1-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-ir.txt create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-out.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Vertex_Colored-in.txt => zun-Vertex_Colored-in.txt} (100%) create mode 100644 3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-ir.txt rename 3rdparty/glsl-optimizer/tests/vertex/{unity-Vertex_Colored-out.txt => zun-Vertex_Colored-out.txt} (100%) create mode 100644 3rdparty/openctm/COMPILING.txt create mode 100644 3rdparty/openctm/LICENSE.txt create mode 100644 3rdparty/openctm/Makefile.linux create mode 100644 3rdparty/openctm/Makefile.macosx create mode 100644 3rdparty/openctm/Makefile.mingw create mode 100644 3rdparty/openctm/Makefile.msvc create mode 100644 3rdparty/openctm/README.txt create mode 100644 3rdparty/openctm/bindings/delphi/OpenCTM.pas create mode 100644 3rdparty/openctm/bindings/python/ctminfo.py create mode 100644 3rdparty/openctm/bindings/python/openctm.py create mode 100644 3rdparty/openctm/build-src.sh create mode 100644 3rdparty/openctm/doc/DevelopersManual.tex create mode 100644 3rdparty/openctm/doc/Doxyfile create mode 100644 3rdparty/openctm/doc/DoxygenFooter.html create mode 100644 3rdparty/openctm/doc/FormatSpecification.tex create mode 100644 3rdparty/openctm/doc/Makefile.linux create mode 100644 3rdparty/openctm/doc/Makefile.macosx create mode 100644 3rdparty/openctm/doc/Makefile.win create mode 100644 3rdparty/openctm/doc/ctmconv.1 create mode 100644 3rdparty/openctm/doc/ctmviewer.1 create mode 100644 3rdparty/openctm/doc/grid.pdf create mode 100644 3rdparty/openctm/doc/grid.svg create mode 100644 3rdparty/openctm/doc/logo.pdf create mode 100644 3rdparty/openctm/doc/openctm-tex.sty create mode 100644 3rdparty/openctm/lib/Makefile.linux create mode 100644 3rdparty/openctm/lib/Makefile.macosx create mode 100644 3rdparty/openctm/lib/Makefile.mingw create mode 100644 3rdparty/openctm/lib/Makefile.msvc create mode 100644 3rdparty/openctm/lib/compressMG1.c create mode 100644 3rdparty/openctm/lib/compressMG2.c create mode 100644 3rdparty/openctm/lib/compressRAW.c create mode 100644 3rdparty/openctm/lib/internal.h create mode 100644 3rdparty/openctm/lib/liblzma/Alloc.c create mode 100644 3rdparty/openctm/lib/liblzma/Alloc.h create mode 100644 3rdparty/openctm/lib/liblzma/LzFind.c create mode 100644 3rdparty/openctm/lib/liblzma/LzFind.h create mode 100644 3rdparty/openctm/lib/liblzma/LzHash.h create mode 100644 3rdparty/openctm/lib/liblzma/LzmaDec.c create mode 100644 3rdparty/openctm/lib/liblzma/LzmaDec.h create mode 100644 3rdparty/openctm/lib/liblzma/LzmaEnc.c create mode 100644 3rdparty/openctm/lib/liblzma/LzmaEnc.h create mode 100644 3rdparty/openctm/lib/liblzma/LzmaLib.c create mode 100644 3rdparty/openctm/lib/liblzma/LzmaLib.h create mode 100644 3rdparty/openctm/lib/liblzma/NameMangle.h create mode 100644 3rdparty/openctm/lib/liblzma/Types.h create mode 100644 3rdparty/openctm/lib/liblzma/readme.txt create mode 100644 3rdparty/openctm/lib/make.depend create mode 100644 3rdparty/openctm/lib/openctm-mingw1.def create mode 100644 3rdparty/openctm/lib/openctm-mingw2.def create mode 100644 3rdparty/openctm/lib/openctm-msvc.def create mode 100644 3rdparty/openctm/lib/openctm.c create mode 100644 3rdparty/openctm/lib/openctm.h create mode 100644 3rdparty/openctm/lib/openctm.rc create mode 100644 3rdparty/openctm/lib/openctmpp.h create mode 100644 3rdparty/openctm/lib/stream.c create mode 100644 3rdparty/openctm/plugins/blender/openctm_export.py create mode 100644 3rdparty/openctm/plugins/blender/openctm_import.py create mode 100644 3rdparty/openctm/plugins/blender/readme.txt create mode 100644 3rdparty/openctm/plugins/maya/openctm_translator.py create mode 100644 3rdparty/openctm/plugins/maya/readme.txt create mode 100644 3rdparty/openctm/tools/3ds.cpp create mode 100644 3rdparty/openctm/tools/3ds.h create mode 100644 3rdparty/openctm/tools/Makefile.linux create mode 100644 3rdparty/openctm/tools/Makefile.macosx create mode 100644 3rdparty/openctm/tools/Makefile.mingw create mode 100644 3rdparty/openctm/tools/Makefile.msvc create mode 100644 3rdparty/openctm/tools/bin2c.cpp create mode 100644 3rdparty/openctm/tools/common.cpp create mode 100644 3rdparty/openctm/tools/common.h create mode 100644 3rdparty/openctm/tools/convoptions.cpp create mode 100644 3rdparty/openctm/tools/convoptions.h create mode 100644 3rdparty/openctm/tools/ctm.cpp create mode 100644 3rdparty/openctm/tools/ctm.h create mode 100644 3rdparty/openctm/tools/ctmbench.cpp create mode 100644 3rdparty/openctm/tools/ctmconv.cpp create mode 100644 3rdparty/openctm/tools/ctmconv.rc create mode 100644 3rdparty/openctm/tools/ctmviewer.cpp create mode 100644 3rdparty/openctm/tools/ctmviewer.exe.manifest create mode 100644 3rdparty/openctm/tools/ctmviewer.rc create mode 100644 3rdparty/openctm/tools/dae.cpp create mode 100644 3rdparty/openctm/tools/dae.h create mode 100644 3rdparty/openctm/tools/glew/GL/glew.h create mode 100644 3rdparty/openctm/tools/glew/GL/glxew.h create mode 100644 3rdparty/openctm/tools/glew/GL/wglew.h create mode 100644 3rdparty/openctm/tools/glew/LICENSE.txt create mode 100644 3rdparty/openctm/tools/glew/glew.c create mode 100644 3rdparty/openctm/tools/icons/Document-open.svg create mode 100644 3rdparty/openctm/tools/icons/Document-save.svg create mode 100644 3rdparty/openctm/tools/icons/Help-browser.svg create mode 100644 3rdparty/openctm/tools/icons/Texture.svg create mode 100644 3rdparty/openctm/tools/icons/icon_help.h create mode 100644 3rdparty/openctm/tools/icons/icon_open.h create mode 100644 3rdparty/openctm/tools/icons/icon_save.h create mode 100644 3rdparty/openctm/tools/icons/icon_texture.h create mode 100644 3rdparty/openctm/tools/icons/openctm.ico create mode 100644 3rdparty/openctm/tools/icons/readme.txt create mode 100644 3rdparty/openctm/tools/image.cpp create mode 100644 3rdparty/openctm/tools/image.h create mode 100644 3rdparty/openctm/tools/jpeg/Makefile.am create mode 100644 3rdparty/openctm/tools/jpeg/Makefile.in create mode 100644 3rdparty/openctm/tools/jpeg/Makefile.mingw create mode 100644 3rdparty/openctm/tools/jpeg/README create mode 100644 3rdparty/openctm/tools/jpeg/aclocal.m4 create mode 100644 3rdparty/openctm/tools/jpeg/ansi2knr.1 create mode 100644 3rdparty/openctm/tools/jpeg/ansi2knr.c create mode 100644 3rdparty/openctm/tools/jpeg/cderror.h create mode 100644 3rdparty/openctm/tools/jpeg/cdjpeg.c create mode 100644 3rdparty/openctm/tools/jpeg/cdjpeg.h create mode 100644 3rdparty/openctm/tools/jpeg/change.log create mode 100644 3rdparty/openctm/tools/jpeg/cjpeg.1 create mode 100644 3rdparty/openctm/tools/jpeg/cjpeg.c create mode 100644 3rdparty/openctm/tools/jpeg/ckconfig.c create mode 100644 3rdparty/openctm/tools/jpeg/coderules.txt create mode 100644 3rdparty/openctm/tools/jpeg/config.guess create mode 100644 3rdparty/openctm/tools/jpeg/config.sub create mode 100644 3rdparty/openctm/tools/jpeg/configure create mode 100644 3rdparty/openctm/tools/jpeg/configure.ac create mode 100644 3rdparty/openctm/tools/jpeg/depcomp create mode 100644 3rdparty/openctm/tools/jpeg/djpeg.1 create mode 100644 3rdparty/openctm/tools/jpeg/djpeg.c create mode 100644 3rdparty/openctm/tools/jpeg/example.c create mode 100644 3rdparty/openctm/tools/jpeg/filelist.txt create mode 100644 3rdparty/openctm/tools/jpeg/install-sh create mode 100644 3rdparty/openctm/tools/jpeg/install.txt create mode 100644 3rdparty/openctm/tools/jpeg/jaricom.c create mode 100644 3rdparty/openctm/tools/jpeg/jcapimin.c create mode 100644 3rdparty/openctm/tools/jpeg/jcapistd.c create mode 100644 3rdparty/openctm/tools/jpeg/jcarith.c create mode 100644 3rdparty/openctm/tools/jpeg/jccoefct.c create mode 100644 3rdparty/openctm/tools/jpeg/jccolor.c create mode 100644 3rdparty/openctm/tools/jpeg/jcdctmgr.c create mode 100644 3rdparty/openctm/tools/jpeg/jchuff.c create mode 100644 3rdparty/openctm/tools/jpeg/jcinit.c create mode 100644 3rdparty/openctm/tools/jpeg/jcmainct.c create mode 100644 3rdparty/openctm/tools/jpeg/jcmarker.c create mode 100644 3rdparty/openctm/tools/jpeg/jcmaster.c create mode 100644 3rdparty/openctm/tools/jpeg/jcomapi.c create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.bcc create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.cfg create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.dj create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.linux create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.mac create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.macosx create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.manx create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.mc6 create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.mingw create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.sas create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.st create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.txt create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.vc create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.vms create mode 100644 3rdparty/openctm/tools/jpeg/jconfig.wat create mode 100644 3rdparty/openctm/tools/jpeg/jcparam.c create mode 100644 3rdparty/openctm/tools/jpeg/jcprepct.c create mode 100644 3rdparty/openctm/tools/jpeg/jcsample.c create mode 100644 3rdparty/openctm/tools/jpeg/jctrans.c create mode 100644 3rdparty/openctm/tools/jpeg/jdapimin.c create mode 100644 3rdparty/openctm/tools/jpeg/jdapistd.c create mode 100644 3rdparty/openctm/tools/jpeg/jdarith.c create mode 100644 3rdparty/openctm/tools/jpeg/jdatadst.c create mode 100644 3rdparty/openctm/tools/jpeg/jdatasrc.c create mode 100644 3rdparty/openctm/tools/jpeg/jdcoefct.c create mode 100644 3rdparty/openctm/tools/jpeg/jdcolor.c create mode 100644 3rdparty/openctm/tools/jpeg/jdct.h create mode 100644 3rdparty/openctm/tools/jpeg/jddctmgr.c create mode 100644 3rdparty/openctm/tools/jpeg/jdhuff.c create mode 100644 3rdparty/openctm/tools/jpeg/jdinput.c create mode 100644 3rdparty/openctm/tools/jpeg/jdmainct.c create mode 100644 3rdparty/openctm/tools/jpeg/jdmarker.c create mode 100644 3rdparty/openctm/tools/jpeg/jdmaster.c create mode 100644 3rdparty/openctm/tools/jpeg/jdmerge.c create mode 100644 3rdparty/openctm/tools/jpeg/jdosabcc.obj create mode 100644 3rdparty/openctm/tools/jpeg/jdosamsc.obj create mode 100644 3rdparty/openctm/tools/jpeg/jdosaobj.txt create mode 100644 3rdparty/openctm/tools/jpeg/jdpostct.c create mode 100644 3rdparty/openctm/tools/jpeg/jdsample.c create mode 100644 3rdparty/openctm/tools/jpeg/jdtrans.c create mode 100644 3rdparty/openctm/tools/jpeg/jerror.c create mode 100644 3rdparty/openctm/tools/jpeg/jerror.h create mode 100644 3rdparty/openctm/tools/jpeg/jfdctflt.c create mode 100644 3rdparty/openctm/tools/jpeg/jfdctfst.c create mode 100644 3rdparty/openctm/tools/jpeg/jfdctint.c create mode 100644 3rdparty/openctm/tools/jpeg/jidctflt.c create mode 100644 3rdparty/openctm/tools/jpeg/jidctfst.c create mode 100644 3rdparty/openctm/tools/jpeg/jidctint.c create mode 100644 3rdparty/openctm/tools/jpeg/jinclude.h create mode 100644 3rdparty/openctm/tools/jpeg/jmemansi.c create mode 100644 3rdparty/openctm/tools/jpeg/jmemdos.c create mode 100644 3rdparty/openctm/tools/jpeg/jmemdosa.asm create mode 100644 3rdparty/openctm/tools/jpeg/jmemmac.c create mode 100644 3rdparty/openctm/tools/jpeg/jmemmgr.c create mode 100644 3rdparty/openctm/tools/jpeg/jmemname.c create mode 100644 3rdparty/openctm/tools/jpeg/jmemnobs.c create mode 100644 3rdparty/openctm/tools/jpeg/jmemsys.h create mode 100644 3rdparty/openctm/tools/jpeg/jmorecfg.h create mode 100644 3rdparty/openctm/tools/jpeg/jpegint.h create mode 100644 3rdparty/openctm/tools/jpeg/jpeglib.h create mode 100644 3rdparty/openctm/tools/jpeg/jpegtran.1 create mode 100644 3rdparty/openctm/tools/jpeg/jpegtran.c create mode 100644 3rdparty/openctm/tools/jpeg/jquant1.c create mode 100644 3rdparty/openctm/tools/jpeg/jquant2.c create mode 100644 3rdparty/openctm/tools/jpeg/jutils.c create mode 100644 3rdparty/openctm/tools/jpeg/jversion.h create mode 100644 3rdparty/openctm/tools/jpeg/libjpeg.map create mode 100644 3rdparty/openctm/tools/jpeg/libjpeg.txt create mode 100644 3rdparty/openctm/tools/jpeg/ltmain.sh create mode 100644 3rdparty/openctm/tools/jpeg/makcjpeg.st create mode 100644 3rdparty/openctm/tools/jpeg/makdjpeg.st create mode 100644 3rdparty/openctm/tools/jpeg/makeadsw.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makeasln.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makecdep.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makecdsp.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makecmak.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makecvcp.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makeddep.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makeddsp.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makedmak.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makedvcp.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makefile.ansi create mode 100644 3rdparty/openctm/tools/jpeg/makefile.bcc create mode 100644 3rdparty/openctm/tools/jpeg/makefile.dj create mode 100644 3rdparty/openctm/tools/jpeg/makefile.linux create mode 100644 3rdparty/openctm/tools/jpeg/makefile.macosx create mode 100644 3rdparty/openctm/tools/jpeg/makefile.manx create mode 100644 3rdparty/openctm/tools/jpeg/makefile.mc6 create mode 100644 3rdparty/openctm/tools/jpeg/makefile.mms create mode 100644 3rdparty/openctm/tools/jpeg/makefile.sas create mode 100644 3rdparty/openctm/tools/jpeg/makefile.unix create mode 100644 3rdparty/openctm/tools/jpeg/makefile.vc create mode 100644 3rdparty/openctm/tools/jpeg/makefile.vms create mode 100644 3rdparty/openctm/tools/jpeg/makefile.wat create mode 100644 3rdparty/openctm/tools/jpeg/makejdep.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makejdsp.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makejdsw.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makejmak.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makejsln.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makejvcp.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makeproj.mac create mode 100644 3rdparty/openctm/tools/jpeg/makerdep.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makerdsp.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makermak.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makervcp.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/maketdep.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/maketdsp.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/maketmak.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/maketvcp.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makewdep.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makewdsp.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makewmak.vc6 create mode 100644 3rdparty/openctm/tools/jpeg/makewvcp.vc9 create mode 100644 3rdparty/openctm/tools/jpeg/makljpeg.st create mode 100644 3rdparty/openctm/tools/jpeg/maktjpeg.st create mode 100644 3rdparty/openctm/tools/jpeg/makvms.opt create mode 100644 3rdparty/openctm/tools/jpeg/missing create mode 100644 3rdparty/openctm/tools/jpeg/rdbmp.c create mode 100644 3rdparty/openctm/tools/jpeg/rdcolmap.c create mode 100644 3rdparty/openctm/tools/jpeg/rdgif.c create mode 100644 3rdparty/openctm/tools/jpeg/rdjpgcom.1 create mode 100644 3rdparty/openctm/tools/jpeg/rdjpgcom.c create mode 100644 3rdparty/openctm/tools/jpeg/rdppm.c create mode 100644 3rdparty/openctm/tools/jpeg/rdrle.c create mode 100644 3rdparty/openctm/tools/jpeg/rdswitch.c create mode 100644 3rdparty/openctm/tools/jpeg/rdtarga.c create mode 100644 3rdparty/openctm/tools/jpeg/readme.dos create mode 100644 3rdparty/openctm/tools/jpeg/structure.txt create mode 100644 3rdparty/openctm/tools/jpeg/testimg.bmp create mode 100644 3rdparty/openctm/tools/jpeg/testimg.jpg create mode 100644 3rdparty/openctm/tools/jpeg/testimg.ppm create mode 100644 3rdparty/openctm/tools/jpeg/testimgp.jpg create mode 100644 3rdparty/openctm/tools/jpeg/testorig.jpg create mode 100644 3rdparty/openctm/tools/jpeg/testprog.jpg create mode 100644 3rdparty/openctm/tools/jpeg/transupp.c create mode 100644 3rdparty/openctm/tools/jpeg/transupp.h create mode 100644 3rdparty/openctm/tools/jpeg/usage.txt create mode 100644 3rdparty/openctm/tools/jpeg/wizard.txt create mode 100644 3rdparty/openctm/tools/jpeg/wrbmp.c create mode 100644 3rdparty/openctm/tools/jpeg/wrgif.c create mode 100644 3rdparty/openctm/tools/jpeg/wrjpgcom.1 create mode 100644 3rdparty/openctm/tools/jpeg/wrjpgcom.c create mode 100644 3rdparty/openctm/tools/jpeg/wrppm.c create mode 100644 3rdparty/openctm/tools/jpeg/wrrle.c create mode 100644 3rdparty/openctm/tools/jpeg/wrtarga.c create mode 100644 3rdparty/openctm/tools/lwo.cpp create mode 100644 3rdparty/openctm/tools/lwo.h create mode 100644 3rdparty/openctm/tools/mesh.cpp create mode 100644 3rdparty/openctm/tools/mesh.h create mode 100644 3rdparty/openctm/tools/meshio.cpp create mode 100644 3rdparty/openctm/tools/meshio.h create mode 100644 3rdparty/openctm/tools/obj.cpp create mode 100644 3rdparty/openctm/tools/obj.h create mode 100644 3rdparty/openctm/tools/off.cpp create mode 100644 3rdparty/openctm/tools/off.h create mode 100644 3rdparty/openctm/tools/phong.frag create mode 100644 3rdparty/openctm/tools/phong.vert create mode 100644 3rdparty/openctm/tools/ply.cpp create mode 100644 3rdparty/openctm/tools/ply.h create mode 100644 3rdparty/openctm/tools/pnglite/pnglite.c create mode 100644 3rdparty/openctm/tools/pnglite/pnglite.h create mode 100644 3rdparty/openctm/tools/rply/LICENSE create mode 100644 3rdparty/openctm/tools/rply/rply.c create mode 100644 3rdparty/openctm/tools/rply/rply.h create mode 100644 3rdparty/openctm/tools/stl.cpp create mode 100644 3rdparty/openctm/tools/stl.h create mode 100644 3rdparty/openctm/tools/sysdialog.h create mode 100644 3rdparty/openctm/tools/sysdialog_gtk.cpp create mode 100644 3rdparty/openctm/tools/sysdialog_mac.mm create mode 100644 3rdparty/openctm/tools/sysdialog_win.cpp create mode 100644 3rdparty/openctm/tools/systimer.cpp create mode 100644 3rdparty/openctm/tools/systimer.h create mode 100644 3rdparty/openctm/tools/tinyxml/Makefile.linux create mode 100644 3rdparty/openctm/tools/tinyxml/Makefile.macosx create mode 100644 3rdparty/openctm/tools/tinyxml/Makefile.mingw create mode 100644 3rdparty/openctm/tools/tinyxml/Makefile.msvc create mode 100644 3rdparty/openctm/tools/tinyxml/changes.txt create mode 100644 3rdparty/openctm/tools/tinyxml/readme.txt create mode 100644 3rdparty/openctm/tools/tinyxml/tinystr.cpp create mode 100644 3rdparty/openctm/tools/tinyxml/tinystr.h create mode 100644 3rdparty/openctm/tools/tinyxml/tinyxml.cpp create mode 100644 3rdparty/openctm/tools/tinyxml/tinyxml.h create mode 100644 3rdparty/openctm/tools/tinyxml/tinyxmlerror.cpp create mode 100644 3rdparty/openctm/tools/tinyxml/tinyxmlparser.cpp create mode 100644 3rdparty/openctm/tools/wrl.cpp create mode 100644 3rdparty/openctm/tools/wrl.h create mode 100644 3rdparty/openctm/tools/zlib/Makefile.linux create mode 100644 3rdparty/openctm/tools/zlib/Makefile.macosx create mode 100644 3rdparty/openctm/tools/zlib/Makefile.mingw create mode 100644 3rdparty/openctm/tools/zlib/Makefile.msvc create mode 100644 3rdparty/openctm/tools/zlib/README create mode 100644 3rdparty/openctm/tools/zlib/adler32.c create mode 100644 3rdparty/openctm/tools/zlib/compress.c create mode 100644 3rdparty/openctm/tools/zlib/crc32.c create mode 100644 3rdparty/openctm/tools/zlib/crc32.h create mode 100644 3rdparty/openctm/tools/zlib/deflate.c create mode 100644 3rdparty/openctm/tools/zlib/deflate.h create mode 100644 3rdparty/openctm/tools/zlib/gzio.c create mode 100644 3rdparty/openctm/tools/zlib/infback.c create mode 100644 3rdparty/openctm/tools/zlib/inffast.c create mode 100644 3rdparty/openctm/tools/zlib/inffast.h create mode 100644 3rdparty/openctm/tools/zlib/inffixed.h create mode 100644 3rdparty/openctm/tools/zlib/inflate.c create mode 100644 3rdparty/openctm/tools/zlib/inflate.h create mode 100644 3rdparty/openctm/tools/zlib/inftrees.c create mode 100644 3rdparty/openctm/tools/zlib/inftrees.h create mode 100644 3rdparty/openctm/tools/zlib/minigzip.c create mode 100644 3rdparty/openctm/tools/zlib/trees.c create mode 100644 3rdparty/openctm/tools/zlib/trees.h create mode 100644 3rdparty/openctm/tools/zlib/uncompr.c create mode 100644 3rdparty/openctm/tools/zlib/zconf.h create mode 100644 3rdparty/openctm/tools/zlib/zlib.h create mode 100644 3rdparty/openctm/tools/zlib/zutil.c create mode 100644 3rdparty/openctm/tools/zlib/zutil.h create mode 100644 3rdparty/openctm/win-installer.iss delete mode 100644 examples/01-cubes/shaders/dx9/fs_cubes.bin delete mode 100644 examples/01-cubes/shaders/dx9/vs_cubes.bin delete mode 100644 examples/02-metaballs/common.sh delete mode 100644 examples/02-metaballs/shaders/dx11/fs_metaballs.bin delete mode 100644 examples/02-metaballs/shaders/dx9/fs_metaballs.bin delete mode 100644 examples/02-metaballs/shaders/dx9/vs_metaballs.bin delete mode 100644 examples/02-metaballs/shaders/gles/fs_metaballs.bin delete mode 100644 examples/02-metaballs/shaders/glsl/fs_metaballs.bin create mode 100644 examples/03-raymarch/fs_raymarching.sc create mode 100644 examples/03-raymarch/iq_sdf.sh create mode 100644 examples/03-raymarch/makefile create mode 100644 examples/03-raymarch/raymarch.cpp create mode 100644 examples/03-raymarch/varying.def.sc create mode 100644 examples/03-raymarch/vs_raymarching.sc create mode 100644 examples/04-mesh/bun_zipper.ply create mode 100644 examples/04-mesh/fs_mesh.sc create mode 100644 examples/04-mesh/makefile create mode 100644 examples/04-mesh/mesh.cpp create mode 100644 examples/04-mesh/varying.def.sc create mode 100644 examples/04-mesh/vs_mesh.sc rename examples/{01-cubes => common}/common.sh (100%) create mode 100644 examples/common/varying.def.sc create mode 100644 examples/runtime/meshes/bunny.ctm rename examples/{01-cubes => runtime}/shaders/dx11/fs_cubes.bin (100%) create mode 100644 examples/runtime/shaders/dx11/fs_mesh.bin create mode 100644 examples/runtime/shaders/dx11/fs_metaballs.bin create mode 100644 examples/runtime/shaders/dx11/fs_raymarching.bin rename examples/{01-cubes => runtime}/shaders/dx11/vs_cubes.bin (100%) create mode 100644 examples/runtime/shaders/dx11/vs_mesh.bin rename examples/{02-metaballs => runtime}/shaders/dx11/vs_metaballs.bin (100%) create mode 100644 examples/runtime/shaders/dx11/vs_raymarching.bin create mode 100644 examples/runtime/shaders/dx9/fs_cubes.bin create mode 100644 examples/runtime/shaders/dx9/fs_mesh.bin create mode 100644 examples/runtime/shaders/dx9/fs_metaballs.bin create mode 100644 examples/runtime/shaders/dx9/fs_raymarching.bin create mode 100644 examples/runtime/shaders/dx9/vs_cubes.bin create mode 100644 examples/runtime/shaders/dx9/vs_mesh.bin create mode 100644 examples/runtime/shaders/dx9/vs_metaballs.bin create mode 100644 examples/runtime/shaders/dx9/vs_raymarching.bin rename examples/{01-cubes => runtime}/shaders/gles/fs_cubes.bin (100%) create mode 100644 examples/runtime/shaders/gles/fs_mesh.bin create mode 100644 examples/runtime/shaders/gles/fs_metaballs.bin create mode 100644 examples/runtime/shaders/gles/fs_raymarching.bin rename examples/{01-cubes => runtime}/shaders/gles/vs_cubes.bin (100%) create mode 100644 examples/runtime/shaders/gles/vs_mesh.bin rename examples/{02-metaballs => runtime}/shaders/gles/vs_metaballs.bin (100%) create mode 100644 examples/runtime/shaders/gles/vs_raymarching.bin rename examples/{01-cubes => runtime}/shaders/glsl/fs_cubes.bin (100%) create mode 100644 examples/runtime/shaders/glsl/fs_mesh.bin create mode 100644 examples/runtime/shaders/glsl/fs_metaballs.bin create mode 100644 examples/runtime/shaders/glsl/fs_raymarching.bin rename examples/{01-cubes => runtime}/shaders/glsl/vs_cubes.bin (100%) create mode 100644 examples/runtime/shaders/glsl/vs_mesh.bin rename examples/{02-metaballs => runtime}/shaders/glsl/vs_metaballs.bin (100%) create mode 100644 examples/runtime/shaders/glsl/vs_raymarching.bin create mode 100644 premake/example-03-raymarch.lua create mode 100644 premake/example-04-mesh.lua create mode 100644 premake/openctm.lua create mode 100644 premake/shader.mk diff --git a/3rdparty/glsl-optimizer/.emacs-dirvars b/3rdparty/glsl-optimizer/.emacs-dirvars deleted file mode 100644 index 33945f91e..000000000 --- a/3rdparty/glsl-optimizer/.emacs-dirvars +++ /dev/null @@ -1,10 +0,0 @@ -;; -*- emacs-lisp -*- -;; -;; This file is processed by the dirvars emacs package. Each variable -;; setting below is performed when this dirvars file is loaded. -;; -indent-tabs-mode: nil -tab-width: 8 -c-basic-offset: 3 -kde-emacs-after-parent-string: "" -evaluate: (c-set-offset 'inline-open '0) diff --git a/3rdparty/glsl-optimizer/.gitignore b/3rdparty/glsl-optimizer/.gitignore index 0f9c9ff1f..a60412b25 100644 --- a/3rdparty/glsl-optimizer/.gitignore +++ b/3rdparty/glsl-optimizer/.gitignore @@ -2,6 +2,8 @@ *.dll *.exe *.ilk +*.la +*.lo *.o *.obj *.os @@ -10,6 +12,7 @@ *.pyc *.pyo *.so +*.so.* *.sw[a-z] *.tar *.tar.bz2 @@ -18,9 +21,11 @@ *~ depend depend.bak +bin/ltmain.sh lib lib64 configure +configure.lineno autom4te.cache aclocal.m4 config.log @@ -29,8 +34,14 @@ cscope* .scon* config.py build +libtool manifest.txt +Makefile.in .dir-locals.el +.deps/ +.libs/ +/Makefile + *.pbxuser *.perspectivev3 *.mode1v3 @@ -50,7 +61,6 @@ CMakeCache.txt .cproject glsl_main glsl_test -glcpp glslopt glsl_compiler .settings/ diff --git a/3rdparty/glsl-optimizer/README.md b/3rdparty/glsl-optimizer/README.md index 8c3531f17..32e4fa978 100644 --- a/3rdparty/glsl-optimizer/README.md +++ b/3rdparty/glsl-optimizer/README.md @@ -10,11 +10,12 @@ unfortunately they *also* lack offline shader compilers. So using a GLSL optimiz before can make the shader run much faster on a platform like that. See performance numbers in [this blog post](http://aras-p.info/blog/2010/09/29/glsl-optimizer/). -Almost all actual code is [Mesa 3D's GLSL2](http://cgit.freedesktop.org/mesa/mesa/log/?h=glsl2) -compiler; all this library does is spits out optimized GLSL back. +Almost all actual code is [Mesa 3D's GLSL](http://cgit.freedesktop.org/mesa/mesa/log/) +compiler; all this library does is spits out optimized GLSL back, and adds GLES type precision +handling to the optimizer. This GLSL optimizer is made for [Unity's](http://unity3d.com/) purposes and is built-in -in [Unity 3.0](http://unity3d.com/unity/whats-new/unity-3). +in [Unity 3](http://unity3d.com/unity/whats-new/unity-3) and later. GLSL Optimizer is licensed according to the terms of the MIT license. @@ -46,5 +47,6 @@ Interface for the library is `src/glsl/glsl_optimizer.h`. General usage is: Notes ----- -* I haven't checked if/how it works with higher GLSL versions than the - default (1.10?). +* GLSL versions 1.10 and 1.20 are supported. 1.10 is the default, use #version 120 to specify +1.20. +* GLSL ES version 1.00 is supported. diff --git a/3rdparty/glsl-optimizer/autogen.sh b/3rdparty/glsl-optimizer/autogen.sh index c76bf8b07..626d21334 100644 --- a/3rdparty/glsl-optimizer/autogen.sh +++ b/3rdparty/glsl-optimizer/autogen.sh @@ -3,16 +3,12 @@ srcdir=`dirname "$0"` test -z "$srcdir" && srcdir=. -SRCDIR=`(cd "$srcdir" && pwd)` ORIGDIR=`pwd` - -if test "x$SRCDIR" != "x$ORIGDIR"; then - echo "Mesa cannot be built when srcdir != builddir" 1>&2 - exit 1 -fi - -MAKEFLAGS="" +cd "$srcdir" autoreconf -v --install || exit 1 +cd $ORIGDIR || exit $? -"$srcdir"/configure "$@" +if test -z "$NOCONFIGURE"; then + "$srcdir"/configure "$@" +fi diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/Main.cpp b/3rdparty/glsl-optimizer/contrib/glslopt/Main.cpp new file mode 100644 index 000000000..c9e2546bc --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/Main.cpp @@ -0,0 +1,148 @@ +#include +#include +#include +#include "glsl_optimizer.h" + +static glslopt_ctx* gContext = 0; + +static int printhelp(const char* msg) +{ + if (msg) printf("%s\n\n\n", msg); + printf("Usage: glslopt <-f|-v> []\n"); + printf("\t-f : fragment shader\n"); + printf("\t-v : vertex shader\n"); + printf("\n\tIf no output specified, output is to [input].out.\n"); + return 1; +} + +static bool init() +{ + gContext = glslopt_initialize(false); + if( !gContext ) + return false; + return true; +} + +static void term() +{ + glslopt_cleanup(gContext); +} + +static char* loadFile(const char* filename) +{ + FILE* file = fopen(filename, "rt"); + if( !file ) + { + printf("Failed to open %s for reading\n", filename); + return 0; + } + + fseek(file, 0, SEEK_END); + const int size = ftell(file); + fseek(file, 0, SEEK_SET); + + char* result = new char[size+1]; + const int count = (int)fread(result, 1, size, file); + result[count] = 0; + + fclose(file); + return result; +} + +static bool saveFile(const char* filename, const char* data) +{ + int size = (int)strlen(data)+1; + + FILE* file = fopen(filename, "wt"); + if( !file ) + { + printf( "Failed to open %s for writing\n", filename); + return false; + } + + if( 1 != fwrite(data,size,1,file) ) + { + printf( "Failed to write to %s\n", filename); + fclose(file); + return false; + } + + fclose(file); + return true; +} + +static bool compileShader(const char* dstfilename, const char* srcfilename, bool vertexShader) +{ + const char* originalShader = loadFile(srcfilename); + if( !originalShader ) + return false; + + const glslopt_shader_type type = vertexShader ? kGlslOptShaderVertex : kGlslOptShaderFragment; + + glslopt_shader* shader = glslopt_optimize(gContext, type, originalShader, 0); + if( !glslopt_get_status(shader) ) + { + printf( "Failed to compile %s:\n\n%s\n", srcfilename, glslopt_get_log(shader)); + return false; + } + + const char* optimizedShader = glslopt_get_output(shader); + + if( !saveFile(dstfilename, optimizedShader) ) + return false; + + delete[] originalShader; + return true; +} + +int main(int argc, char* argv[]) +{ + if( argc < 3 ) + return printhelp(NULL); + + bool vertexShader = false, freename = false; + const char* source = 0; + char* dest = 0; + + for( int i=1; i < argc; i++ ) + { + if( argv[i][0] == '-' ) + { + if( 0 == strcmp("-v", argv[i]) ) + vertexShader = true; + if( 0 == strcmp("-f", argv[i]) ) + vertexShader = false; + } + else + { + if( source == 0 ) + source = argv[i]; + else if( dest == 0 ) + dest = argv[i]; + } + } + + if( !source ) + return printhelp("Must give a source"); + + if( !init() ) + { + printf("Failed to initialize glslopt!\n"); + return 1; + } + + if ( !dest ) { + dest = (char *) calloc(strlen(source)+5, sizeof(char)); + snprintf(dest, strlen(source)+5, "%s.out", source); + freename = true; + } + + int result = 0; + if( !compileShader(dest, source, vertexShader) ) + result = 1; + + if( freename ) free(dest); + + term(); + return result; +} diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/Makefile b/3rdparty/glsl-optimizer/contrib/glslopt/Makefile new file mode 100644 index 000000000..0719bfded --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/Makefile @@ -0,0 +1,16 @@ +# Linux build for the sample app + +OBJS = Main.o + +.PHONY: clean all + +LDFLAGS += -Wl,-O1 -Wl,-gc-sections +CPPFLAGS += -I ../../src/glsl -L ../../src/glsl +CXXFLAGS += -Wall -Os -s + +all: $(OBJS) + g++ -o glslopt Main.o $(CPPFLAGS) -lglslopt $(CXXFLAGS) $(LDFLAGS) + +clean: + rm -f glslopt $(OBJS) + diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/Readme b/3rdparty/glsl-optimizer/contrib/glslopt/Readme new file mode 100644 index 000000000..7d28ecdda --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/Readme @@ -0,0 +1,13 @@ +This is a small sample program to get you quickly up and running, it transforms an input textfile +to an output textfile. The input source textfile should be a fully preprocessed GLSL shader and +the output should be a simple shader in textform. + +The project file is generated by BadgerConfig. + +VS2005 +BadgerConfig + + + + +Jim Tilander, Santa Monica 2010 diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/SourceFiles b/3rdparty/glsl-optimizer/contrib/glslopt/SourceFiles new file mode 100644 index 000000000..cb7f2793c --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/SourceFiles @@ -0,0 +1,105 @@ +# +# Console files... +# + Main.cpp + Readme + +# +# Original test program .. +# +#../../src/glsl/glsl_optimizer_main.cpp + + +# +# Mesa GLSL2 + GLSL Optimizer +# + + ../../src/mesa/program/hash_table.c + ../../src/mesa/program/hash_table.h + ../../src/mesa/program/symbol_table.c + ../../src/mesa/program/symbol_table.h + ../../src/talloc/talloc.c + ../../src/talloc/talloc.h + ../../src/glsl/ast.h + ../../src/glsl/ast_expr.cpp + ../../src/glsl/ast_function.cpp + ../../src/glsl/ast_to_hir.cpp + ../../src/glsl/ast_type.cpp + ../../src/glsl/builtin_function.cpp + ../../src/glsl/builtin_types.h + ../../src/glsl/builtin_variables.h + ../../src/glsl/glsl_lexer.cpp + ../../src/glsl/glsl_lexer.lpp + ../../src/glsl/glsl_optimizer.cpp + ../../src/glsl/glsl_optimizer.h + ../../src/glsl/glsl_parser.cpp + ../../src/glsl/glsl_parser.h + ../../src/glsl/glsl_parser.ypp + ../../src/glsl/glsl_parser_extras.cpp + ../../src/glsl/glsl_parser_extras.h + ../../src/glsl/glsl_symbol_table.h + ../../src/glsl/glsl_types.cpp + ../../src/glsl/glsl_types.h + ../../src/glsl/hir_field_selection.cpp + ../../src/glsl/ir.cpp + ../../src/glsl/ir.h + ../../src/glsl/ir_algebraic.cpp + ../../src/glsl/ir_basic_block.cpp + ../../src/glsl/ir_basic_block.h + ../../src/glsl/ir_clone.cpp + ../../src/glsl/ir_constant_expression.cpp + ../../src/glsl/ir_constant_folding.cpp + ../../src/glsl/ir_constant_propagation.cpp + ../../src/glsl/ir_constant_variable.cpp + ../../src/glsl/ir_copy_propagation.cpp + ../../src/glsl/ir_dead_code.cpp + ../../src/glsl/ir_dead_code_local.cpp + ../../src/glsl/ir_dead_functions.cpp + ../../src/glsl/ir_div_to_mul_rcp.cpp + ../../src/glsl/ir_expression_flattening.cpp + ../../src/glsl/ir_expression_flattening.h + ../../src/glsl/ir_function.cpp + ../../src/glsl/ir_function_can_inline.cpp + ../../src/glsl/ir_function_inlining.cpp + ../../src/glsl/ir_function_inlining.h + ../../src/glsl/ir_hierarchical_visitor.cpp + ../../src/glsl/ir_hierarchical_visitor.h + ../../src/glsl/ir_hv_accept.cpp + ../../src/glsl/ir_if_return.cpp + ../../src/glsl/ir_if_simplification.cpp + ../../src/glsl/ir_if_to_cond_assign.cpp + ../../src/glsl/ir_import_prototypes.cpp + ../../src/glsl/ir_mat_op_to_vec.cpp + ../../src/glsl/ir_mod_to_fract.cpp + ../../src/glsl/ir_noop_swizzle.cpp + ../../src/glsl/ir_optimization.h + ../../src/glsl/ir_print_glsl_visitor.cpp + ../../src/glsl/ir_print_glsl_visitor.h + ../../src/glsl/ir_print_visitor.cpp + ../../src/glsl/ir_print_visitor.h + ../../src/glsl/ir_reader.cpp + ../../src/glsl/ir_reader.h + ../../src/glsl/ir_rvalue_visitor.cpp + ../../src/glsl/ir_rvalue_visitor.h + ../../src/glsl/ir_structure_splitting.cpp + ../../src/glsl/ir_sub_to_add_neg.cpp + ../../src/glsl/ir_swizzle_swizzle.cpp + ../../src/glsl/ir_tree_grafting.cpp + ../../src/glsl/ir_unused_structs.cpp + ../../src/glsl/ir_unused_structs.h + ../../src/glsl/ir_validate.cpp + ../../src/glsl/ir_variable.cpp + ../../src/glsl/ir_variable_refcount.cpp + ../../src/glsl/ir_variable_refcount.h + ../../src/glsl/ir_vec_index_to_cond_assign.cpp + ../../src/glsl/ir_vec_index_to_swizzle.cpp + ../../src/glsl/ir_visitor.h + ../../src/glsl/link_functions.cpp + ../../src/glsl/linker.cpp + ../../src/glsl/linker.h + ../../src/glsl/list.h + #../../src/glsl/main.cpp + ../../src/glsl/program.h + ../../src/glsl/s_expression.cpp + ../../src/glsl/s_expression.h + ../../src/glsl/msvc/msvccompat.h diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.bdgcfg b/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.bdgcfg new file mode 100644 index 000000000..50b693678 --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.bdgcfg @@ -0,0 +1,10 @@ +[General] +Type = ConsoleApplication +SourceFiles = SourceFiles +Platform = Tool + +[Project] +IncludePaths=../../src/talloc;../../include;../../src/mesa;../../src/mapi;../../src/glsl/msvc;../../src/glsl +Defines=snprintf=_snprintf;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE +DisabledVcWarnings=4291;4996;4800;4099;4244;4018;4245 +Libraries=opengl32.lib \ No newline at end of file diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.sln b/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.sln new file mode 100644 index 000000000..19d967a3c --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glslopt", "glslopt.vcproj", "{790F4C89-6715-EB39-C392-3FC1D1DB9618}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Final|Win32 = Final|Win32 + Profile|Win32 = Profile|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Debug|Win32.ActiveCfg = Debug|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Debug|Win32.Build.0 = Debug|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Final|Win32.ActiveCfg = Final|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Final|Win32.Build.0 = Final|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Profile|Win32.ActiveCfg = Profile|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Profile|Win32.Build.0 = Profile|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Release|Win32.ActiveCfg = Release|Win32 + {790F4C89-6715-EB39-C392-3FC1D1DB9618}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.vcproj b/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.vcproj new file mode 100644 index 000000000..1d046a7a1 --- /dev/null +++ b/3rdparty/glsl-optimizer/contrib/glslopt/glslopt.vcproj @@ -0,0 +1,897 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/glsl-optimizer/generateParsers.sh b/3rdparty/glsl-optimizer/generateParsers.sh index dc1c0c75b..5b9cdfb90 100644 --- a/3rdparty/glsl-optimizer/generateParsers.sh +++ b/3rdparty/glsl-optimizer/generateParsers.sh @@ -1,5 +1,5 @@ #! /bin/sh flex --nounistd -osrc/glsl/glcpp/glcpp-lex.c src/glsl/glcpp/glcpp-lex.l flex --nounistd -osrc/glsl/glsl_lexer.cpp src/glsl/glsl_lexer.ll -bison -v -o "src/glsl/glcpp/glcpp-parse.c" --defines=src/glsl/glcpp/glcpp-parse.h src/glsl/glcpp/glcpp-parse.y +bison -v -o "src/glsl/glcpp/glcpp-parse.c" -p "glcpp_parser_" --defines=src/glsl/glcpp/glcpp-parse.h src/glsl/glcpp/glcpp-parse.y bison -v -o "src/glsl/glsl_parser.cpp" -p "_mesa_glsl_" --defines=src/glsl/glsl_parser.h src/glsl/glsl_parser.yy diff --git a/3rdparty/glsl-optimizer/include/GL/gl.h b/3rdparty/glsl-optimizer/include/GL/gl.h deleted file mode 100644 index bca550fa2..000000000 --- a/3rdparty/glsl-optimizer/include/GL/gl.h +++ /dev/null @@ -1,2241 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.6 - * - * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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. - */ - - -#ifndef __gl_h_ -#define __gl_h_ - -#if defined(USE_MGL_NAMESPACE) -#include "gl_mangle.h" -#endif - - -/********************************************************************** - * Begin system-specific stuff. Do not do any of this when building - * for SciTech SNAP, as this is all done before this header file is - * included. - */ -#if !defined(__SCITECH_SNAP__) - -#if defined(__BEOS__) -#include /* to get some BeOS-isms */ -#endif - -#if !defined(OPENSTEP) && (defined(NeXT) || defined(NeXT_PDO)) -#define OPENSTEP -#endif - -#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) -#define __WIN32__ -#endif - -#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) -# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ -# define GLAPI __declspec(dllexport) -# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ -# define GLAPI __declspec(dllimport) -# else /* for use with static link lib build of Win32 edition only */ -# define GLAPI extern -# endif /* _STATIC_MESA support */ -# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ -# define GLAPIENTRY -# else -# define GLAPIENTRY __stdcall -# endif -#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ -# define GLAPI extern -# define GLAPIENTRY __stdcall -#elif defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define GLAPI __attribute__((visibility("default"))) -# define GLAPIENTRY -#endif /* WIN32 && !CYGWIN */ - -#if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__) -# define PRAGMA_EXPORT_SUPPORTED 1 -#endif - -/* - * WINDOWS: Include windows.h here to define APIENTRY. - * It is also useful when applications include this file by - * including only glut.h, since glut.h depends on windows.h. - * Applications needing to include windows.h with parms other - * than "WIN32_LEAN_AND_MEAN" may include windows.h before - * glut.h or gl.h. - */ -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include -#endif - -#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_WIN32_WCE) \ - && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP) \ - && !defined(__CYGWIN__) || defined(__MINGW32__) -#include -#endif - -#if defined(macintosh) && PRAGMA_IMPORT_SUPPORTED -#pragma import on -#endif - -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef APIENTRY -#define APIENTRY GLAPIENTRY -#endif - -/* "P" suffix to be used for a pointer to a function */ -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifndef GLAPIENTRYP -#define GLAPIENTRYP GLAPIENTRY * -#endif - -#ifdef CENTERLINE_CLPP -#define signed -#endif - -#if defined(PRAGMA_EXPORT_SUPPORTED) -#pragma export on -#endif - -#endif /* !__SCITECH_SNAP__ */ -/* - * End system-specific stuff. - **********************************************************************/ - - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define GL_VERSION_1_1 1 -#define GL_VERSION_1_2 1 -#define GL_VERSION_1_3 1 -#define GL_ARB_imaging 1 - - -/* - * Datatypes - */ -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ - - - -/* - * Constants - */ - -/* Boolean values */ -#define GL_FALSE 0x0 -#define GL_TRUE 0x1 - -/* Data types */ -#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 - -/* Primitives */ -#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 - -/* Vertex Arrays */ -#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 - -/* Matrix Mode */ -#define GL_MATRIX_MODE 0x0BA0 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 - -/* Points */ -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_POINT_SIZE_RANGE 0x0B12 - -/* Lines */ -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_WIDTH_RANGE 0x0B22 - -/* Polygons */ -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#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_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 - -/* Display Lists */ -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_LIST_MODE 0x0B30 - -/* Depth buffer */ -#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_DEPTH_TEST 0x0B71 -#define GL_DEPTH_BITS 0x0D56 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_COMPONENT 0x1902 - -/* Lighting */ -#define GL_LIGHTING 0x0B50 -#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_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_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_SHININESS 0x1601 -#define GL_EMISSION 0x1600 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_SHADE_MODEL 0x0B54 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_NORMALIZE 0x0BA1 - -/* User clipping planes */ -#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 - -/* Accumulation buffer */ -#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_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_ACCUM 0x0100 -#define GL_ADD 0x0104 -#define GL_LOAD 0x0101 -#define GL_MULT 0x0103 -#define GL_RETURN 0x0102 - -/* Alpha testing */ -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_ALPHA_TEST_FUNC 0x0BC1 - -/* Blending */ -#define GL_BLEND 0x0BE2 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND_DST 0x0BE0 -#define GL_ZERO 0x0 -#define GL_ONE 0x1 -#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 - -/* Render Mode */ -#define GL_FEEDBACK 0x1C01 -#define GL_RENDER 0x1C00 -#define GL_SELECT 0x1C02 - -/* Feedback */ -#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_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 - -/* Selection */ -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 - -/* Fog */ -#define GL_FOG 0x0B60 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_COLOR 0x0B66 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_LINEAR 0x2601 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 - -/* Logic Ops */ -#define GL_LOGIC_OP 0x0BF1 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_CLEAR 0x1500 -#define GL_SET 0x150F -#define GL_COPY 0x1503 -#define GL_COPY_INVERTED 0x150C -#define GL_NOOP 0x1505 -#define GL_INVERT 0x150A -#define GL_AND 0x1501 -#define GL_NAND 0x150E -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_XOR 0x1506 -#define GL_EQUIV 0x1509 -#define GL_AND_REVERSE 0x1502 -#define GL_AND_INVERTED 0x1504 -#define GL_OR_REVERSE 0x150B -#define GL_OR_INVERTED 0x150D - -/* Stencil */ -#define GL_STENCIL_BITS 0x0D57 -#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_STENCIL_INDEX 0x1901 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 - -/* Buffers, Pixel Drawing/Reading */ -#define GL_NONE 0x0 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -/*GL_FRONT 0x0404 */ -/*GL_BACK 0x0405 */ -/*GL_FRONT_AND_BACK 0x0408 */ -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_COLOR_INDEX 0x1900 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_ALPHA_BITS 0x0D55 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_INDEX_BITS 0x0D51 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_READ_BUFFER 0x0C02 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_BITMAP 0x1A00 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_DITHER 0x0BD0 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 - -/* Implementation limits */ -#define GL_MAX_LIST_NESTING 0x0B31 -#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 - -/* Gets */ -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_MODE 0x0C30 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_RENDER_MODE 0x0C40 -#define GL_RGBA_MODE 0x0C31 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_VIEWPORT 0x0BA2 - -/* Evaluators */ -#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_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 - -/* Hints */ -#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_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* Scissor box */ -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 - -/* Pixel Mode / Transfer */ -#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_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_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#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_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#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_PACK_ALIGNMENT 0x0D05 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 - -/* Texture mapping */ -#define GL_TEXTURE_ENV 0x2300 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#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_TEXTURE_GEN_MODE 0x2500 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_TEXTURE_COMPONENTS 0x1003 -#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_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_LINEAR 0x2400 -#define GL_EYE_PLANE 0x2502 -#define GL_SPHERE_MAP 0x2402 -#define GL_DECAL 0x2101 -#define GL_MODULATE 0x2100 -#define GL_NEAREST 0x2600 -#define GL_REPEAT 0x2901 -#define GL_CLAMP 0x2900 -#define GL_S 0x2000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 - -/* Utility */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* Errors */ -#define GL_NO_ERROR 0x0 -#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 - -/* glPush/PopAttrib bits */ -#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 - - -/* OpenGL 1.1 */ -#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_TEXTURE_INTERNAL_FORMAT 0x1003 -#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_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF - - - -/* - * Miscellaneous - */ - -GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); - -GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glClear( GLbitfield mask ); - -GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); - -GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); - -GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); - -GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); - -GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); - -GLAPI void GLAPIENTRY glCullFace( GLenum mode ); - -GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); - -GLAPI void GLAPIENTRY glPointSize( GLfloat size ); - -GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); - -GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); - -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 glGetPolygonStipple( GLubyte *mask ); - -GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); - -GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); - -GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); - -GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); - -GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); - -GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glEnable( GLenum cap ); - -GLAPI void GLAPIENTRY glDisable( GLenum cap ); - -GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); - - -GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ - -GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ - - -GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); - -GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); - -GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); - -GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); - -GLAPI void GLAPIENTRY glPopAttrib( void ); - - -GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ - -GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ - - -GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); - -GLAPI GLenum GLAPIENTRY glGetError( void ); - -GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); - -GLAPI void GLAPIENTRY glFinish( void ); - -GLAPI void GLAPIENTRY glFlush( void ); - -GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); - - -/* - * Depth Buffer - */ - -GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); - -GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); - -GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); - -GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); - - -/* - * Accumulation Buffer - */ - -GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); - -GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); - - -/* - * Transformation - */ - -GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); - -GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, - GLsizei width, GLsizei height ); - -GLAPI void GLAPIENTRY glPushMatrix( void ); - -GLAPI void GLAPIENTRY glPopMatrix( void ); - -GLAPI void GLAPIENTRY glLoadIdentity( void ); - -GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); - -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 glTranslated( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); - - -/* - * Display Lists - */ - -GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); - -GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); - -GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); - -GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); - -GLAPI void GLAPIENTRY glEndList( void ); - -GLAPI void GLAPIENTRY glCallList( GLuint list ); - -GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, - const GLvoid *lists ); - -GLAPI void GLAPIENTRY glListBase( GLuint base ); - - -/* - * Drawing Functions - */ - -GLAPI void GLAPIENTRY glBegin( GLenum mode ); - -GLAPI void GLAPIENTRY glEnd( void ); - - -GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); -GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); -GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); -GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); -GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); - -GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); -GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glIndexd( GLdouble c ); -GLAPI void GLAPIENTRY glIndexf( GLfloat c ); -GLAPI void GLAPIENTRY glIndexi( GLint c ); -GLAPI void GLAPIENTRY glIndexs( GLshort c ); -GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); -GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); -GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); -GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); -GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); -GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); -GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); -GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); -GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); -GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); -GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); -GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); - -GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, - GLbyte blue, GLbyte alpha ); -GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, - GLdouble blue, GLdouble alpha ); -GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha ); -GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, - GLint blue, GLint alpha ); -GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, - GLshort blue, GLshort alpha ); -GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha ); -GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, - GLuint blue, GLuint alpha ); -GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, - GLushort blue, GLushort alpha ); - - -GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); - -GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); - - -GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); -GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); -GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); -GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); - -GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); -GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); -GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); -GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); -GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); -GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); -GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); -GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); -GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); -GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); -GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); -GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); -GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); - - -GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); -GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); -GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); -GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); - - -/* - * Vertex Arrays (1.1) - */ - -GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); - -GLAPI void GLAPIENTRY glArrayElement( GLint i ); - -GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); - -GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, - GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, - const GLvoid *pointer ); - -/* - * Lighting - */ - -GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); - -GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, - const 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 glLightModelf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); - - -/* - * Raster functions - */ - -GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); - -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 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 glGetPixelMapfv( GLenum map, GLfloat *values ); -GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); -GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); - -GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, - GLfloat xorig, GLfloat yorig, - GLfloat xmove, GLfloat ymove, - const GLubyte *bitmap ); - -GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - GLvoid *pixels ); - -GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum type ); - -/* - * Stenciling - */ - -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 glClearStencil( GLint s ); - - - -/* - * Texture mapping - */ - -GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); -GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); -GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const 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 glTexEnvf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, - const 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 glGetTexLevelParameterfv( GLenum target, GLint level, - GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, - GLenum pname, 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 glGetTexImage( GLenum target, GLint level, - GLenum format, GLenum type, - GLvoid *pixels ); - - -/* 1.1 functions */ - -GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); - -GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); - -GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); - -GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, - const GLuint *textures, - const GLclampf *priorities ); - -GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, - const GLuint *textures, - GLboolean *residences ); - -GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); - - -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 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 ); - - -/* - * Evaluators - */ - -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 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 glEvalCoord1d( GLdouble u ); -GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); - -GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); -GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); - -GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); - -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 glEvalPoint1( GLint i ); - -GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); - -GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); - -GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); - - -/* - * Fog - */ - -GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); - -GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); - -GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); - - -/* - * Selection and Feedback - */ - -GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); - -GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); - -GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); - -GLAPI void GLAPIENTRY glInitNames( void ); - -GLAPI void GLAPIENTRY glLoadName( GLuint name ); - -GLAPI void GLAPIENTRY glPushName( GLuint name ); - -GLAPI void GLAPIENTRY glPopName( void ); - - - -/* - * OpenGL 1.2 - */ - -#define GL_RESCALE_NORMAL 0x803A -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#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 0x8033 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#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_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_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#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_TEXTURE_BINDING_3D 0x806A - -GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, - GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLsizei depth, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLsizei width, - GLsizei height, GLsizei depth, - GLenum format, - GLenum type, const GLvoid *pixels); - -GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLint x, - GLint y, GLsizei width, - GLsizei height ); - -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - - -/* - * GL_ARB_imaging - */ - -#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_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_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_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#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_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_BLEND_EQUATION 0x8009 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_BLEND_COLOR 0x8005 - - -GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, - GLsizei width, GLenum format, - GLenum type, const GLvoid *table ); - -GLAPI void GLAPIENTRY glColorSubTable( GLenum target, - GLsizei start, GLsizei count, - GLenum format, GLenum type, - const GLvoid *data ); - -GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, - const GLint *params); - -GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, - const GLfloat *params); - -GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, - GLenum type, GLvoid *table ); - -GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); - -GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, - GLenum internalformat, GLboolean sink ); - -GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); - -GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, - GLenum format, GLenum type, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, - GLboolean sink ); - -GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); - -GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, - GLenum format, GLenum types, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, - GLenum internalformat, GLsizei width, GLenum format, GLenum type, - const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, - GLfloat params ); - -GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); - -GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, - GLint params ); - -GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width, - GLsizei height); - -GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, - GLenum type, GLvoid *image ); - -GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *row, const GLvoid *column ); - -GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, - GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); - -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); - - - -/* - * OpenGL 1.3 - */ - -/* multitexture */ -#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 -/* texture_cube_map */ -#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 -/* texture_compression */ -#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_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -/* multisample */ -#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_MULTISAMPLE_BIT 0x20000000 -/* transpose_matrix */ -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -/* texture_env_combine */ -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#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_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -/* texture_env_dot3 */ -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -/* texture_border_clamp */ -#define GL_CLAMP_TO_BORDER 0x812D - -GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); - -GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); - - -GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); - - -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); - - - -/* - * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) - */ -#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 - -GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); -GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); -GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); -GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); -GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); -GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); -GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); - -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); - -#endif /* GL_ARB_multitexture */ - - - -/* - * Define this token if you want "old-style" header file behaviour (extensions - * defined in gl.h). Otherwise, extensions will be included from glext.h. - */ -#if defined(GL_GLEXT_LEGACY) - -/* All extensions that used to be here are now found in glext.h */ - -#else /* GL_GLEXT_LEGACY */ - -#include - -#endif /* GL_GLEXT_LEGACY */ - - - -#if GL_ARB_shader_objects - -#ifndef GL_MESA_shader_debug -#define GL_MESA_shader_debug 1 - -#define GL_DEBUG_OBJECT_MESA 0x8759 -#define GL_DEBUG_PRINT_MESA 0x875A -#define GL_DEBUG_ASSERT_MESA 0x875B - -GLAPI GLhandleARB GLAPIENTRY glCreateDebugObjectMESA (void); -GLAPI void GLAPIENTRY glClearDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType); -GLAPI void GLAPIENTRY glGetDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType, GLsizei maxLength, - GLsizei *length, GLcharARB *debugLog); -GLAPI GLsizei GLAPIENTRY glGetDebugLogLengthMESA (GLhandleARB obj, GLenum logType, GLenum shaderType); - -#endif /* GL_MESA_shader_debug */ - -#endif /* GL_ARB_shader_objects */ - - -/* - * ???. GL_MESA_packed_depth_stencil - * XXX obsolete - */ -#ifndef GL_MESA_packed_depth_stencil -#define GL_MESA_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_MESA 0x8750 -#define GL_UNSIGNED_INT_24_8_MESA 0x8751 -#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 -#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 -#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 - -#endif /* GL_MESA_packed_depth_stencil */ - - -#ifndef GL_MESA_program_debug -#define GL_MESA_program_debug 1 - -#define GL_FRAGMENT_PROGRAM_POSITION_MESA 0x8bb0 -#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA 0x8bb1 -#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8bb2 -#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8bb3 -#define GL_VERTEX_PROGRAM_POSITION_MESA 0x8bb4 -#define GL_VERTEX_PROGRAM_CALLBACK_MESA 0x8bb5 -#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA 0x8bb6 -#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA 0x8bb7 - -typedef void (*GLprogramcallbackMESA)(GLenum target, GLvoid *data); - -GLAPI void GLAPIENTRY glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, GLvoid *data); - -GLAPI void GLAPIENTRY glGetProgramRegisterfvMESA(GLenum target, GLsizei len, const GLubyte *name, GLfloat *v); - -#endif /* GL_MESA_program_debug */ - - -#ifndef GL_MESA_texture_array -#define GL_MESA_texture_array 1 - -/* GL_MESA_texture_array uses the same enum values as GL_EXT_texture_array. - */ -#ifndef GL_EXT_texture_array - -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferTextureLayerEXT(GLenum target, - GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif /* GL_GLEXT_PROTOTYPES */ - -#if 0 -/* (temporarily) disabled because of collision with typedef in glext.h - * that happens if apps include both gl.h and glext.h - */ -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, - GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif - -#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 GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#endif - -#endif - - -#ifndef GL_ATI_blend_equation_separate -#define GL_ATI_blend_equation_separate 1 - -#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D - -GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); - -#endif /* GL_ATI_blend_equation_separate */ - - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -typedef void* GLeglImageOES; -#endif - -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - - -/** - ** NOTE!!!!! If you add new functions to this file, or update - ** glext.h be sure to regenerate the gl_mangle.h file. See comments - ** in that file for details. - **/ - - - -/********************************************************************** - * Begin system-specific stuff - */ -#if defined(PRAGMA_EXPORT_SUPPORTED) -#pragma export off -#endif - -#if defined(macintosh) && PRAGMA_IMPORT_SUPPORTED -#pragma import off -#endif -/* - * End system-specific stuff - **********************************************************************/ - - -#ifdef __cplusplus -} -#endif - -#endif /* __gl_h_ */ diff --git a/3rdparty/glsl-optimizer/include/GL/glext.h b/3rdparty/glsl-optimizer/include/GL/glext.h deleted file mode 100644 index 09400215b..000000000 --- a/3rdparty/glsl-optimizer/include/GL/glext.h +++ /dev/null @@ -1,11488 +0,0 @@ -#ifndef __glext_h_ -#define __glext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007-2011 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. -*/ - -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated $Date: 2011-08-08 00:34:29 -0700 (Mon, 08 Aug 2011) $ */ -/* Current version at http://www.opengl.org/registry/ */ -#define GL_GLEXT_VERSION 72 -/* Function declaration macros - to move into glplatform.h */ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -#ifndef GL_VERSION_1_2 -#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_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_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_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_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_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif - -#ifndef GL_VERSION_1_2_DEPRECATED -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#endif - -#ifndef GL_ARB_imaging -#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 -#endif - -#ifndef GL_ARB_imaging_DEPRECATED -#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_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif - -#ifndef GL_VERSION_1_3 -#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_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_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_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#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_CLAMP_TO_BORDER 0x812D -#endif - -#ifndef GL_VERSION_1_3_DEPRECATED -#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_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#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_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#endif - -#ifndef GL_VERSION_1_4 -#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_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#endif - -#ifndef GL_VERSION_1_4_DEPRECATED -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#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_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif - -#ifndef GL_VERSION_1_5 -#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_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 -#endif - -#ifndef GL_VERSION_1_5_DEPRECATED -#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_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC1_ALPHA 0x8589 -#define GL_SRC2_ALPHA 0x858A -#endif - -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB 0x8009 -#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_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_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#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 -#endif - -#ifndef GL_VERSION_2_0_DEPRECATED -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -#endif - -#ifndef GL_VERSION_2_1 -#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_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#endif - -#ifndef GL_VERSION_2_1_DEPRECATED -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#endif - -#ifndef GL_VERSION_3_0 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_DEPTH_BUFFER 0x8223 -#define GL_STENCIL_BUFFER 0x8224 -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -/* Reuse tokens from ARB_depth_buffer_float */ -/* reuse GL_DEPTH_COMPONENT32F */ -/* reuse GL_DEPTH32F_STENCIL8 */ -/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */ -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_DEFAULT */ -/* reuse GL_FRAMEBUFFER_UNDEFINED */ -/* reuse GL_DEPTH_STENCIL_ATTACHMENT */ -/* reuse GL_INDEX */ -/* reuse GL_MAX_RENDERBUFFER_SIZE */ -/* reuse GL_DEPTH_STENCIL */ -/* reuse GL_UNSIGNED_INT_24_8 */ -/* reuse GL_DEPTH24_STENCIL8 */ -/* reuse GL_TEXTURE_STENCIL_SIZE */ -/* reuse GL_TEXTURE_RED_TYPE */ -/* reuse GL_TEXTURE_GREEN_TYPE */ -/* reuse GL_TEXTURE_BLUE_TYPE */ -/* reuse GL_TEXTURE_ALPHA_TYPE */ -/* reuse GL_TEXTURE_DEPTH_TYPE */ -/* reuse GL_UNSIGNED_NORMALIZED */ -/* reuse GL_FRAMEBUFFER_BINDING */ -/* reuse GL_DRAW_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_BINDING */ -/* reuse GL_READ_FRAMEBUFFER */ -/* reuse GL_DRAW_FRAMEBUFFER */ -/* reuse GL_READ_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_SAMPLES */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* reuse GL_FRAMEBUFFER_COMPLETE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ -/* reuse GL_FRAMEBUFFER_UNSUPPORTED */ -/* reuse GL_MAX_COLOR_ATTACHMENTS */ -/* reuse GL_COLOR_ATTACHMENT0 */ -/* reuse GL_COLOR_ATTACHMENT1 */ -/* reuse GL_COLOR_ATTACHMENT2 */ -/* reuse GL_COLOR_ATTACHMENT3 */ -/* reuse GL_COLOR_ATTACHMENT4 */ -/* reuse GL_COLOR_ATTACHMENT5 */ -/* reuse GL_COLOR_ATTACHMENT6 */ -/* reuse GL_COLOR_ATTACHMENT7 */ -/* reuse GL_COLOR_ATTACHMENT8 */ -/* reuse GL_COLOR_ATTACHMENT9 */ -/* reuse GL_COLOR_ATTACHMENT10 */ -/* reuse GL_COLOR_ATTACHMENT11 */ -/* reuse GL_COLOR_ATTACHMENT12 */ -/* reuse GL_COLOR_ATTACHMENT13 */ -/* reuse GL_COLOR_ATTACHMENT14 */ -/* reuse GL_COLOR_ATTACHMENT15 */ -/* reuse GL_DEPTH_ATTACHMENT */ -/* reuse GL_STENCIL_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER */ -/* reuse GL_RENDERBUFFER */ -/* reuse GL_RENDERBUFFER_WIDTH */ -/* reuse GL_RENDERBUFFER_HEIGHT */ -/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */ -/* reuse GL_STENCIL_INDEX1 */ -/* reuse GL_STENCIL_INDEX4 */ -/* reuse GL_STENCIL_INDEX8 */ -/* reuse GL_STENCIL_INDEX16 */ -/* reuse GL_RENDERBUFFER_RED_SIZE */ -/* reuse GL_RENDERBUFFER_GREEN_SIZE */ -/* reuse GL_RENDERBUFFER_BLUE_SIZE */ -/* reuse GL_RENDERBUFFER_ALPHA_SIZE */ -/* reuse GL_RENDERBUFFER_DEPTH_SIZE */ -/* reuse GL_RENDERBUFFER_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ -/* reuse GL_MAX_SAMPLES */ -/* Reuse tokens from ARB_framebuffer_sRGB */ -/* reuse GL_FRAMEBUFFER_SRGB */ -/* Reuse tokens from ARB_half_float_vertex */ -/* reuse GL_HALF_FLOAT */ -/* Reuse tokens from ARB_map_buffer_range */ -/* reuse GL_MAP_READ_BIT */ -/* reuse GL_MAP_WRITE_BIT */ -/* reuse GL_MAP_INVALIDATE_RANGE_BIT */ -/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */ -/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */ -/* reuse GL_MAP_UNSYNCHRONIZED_BIT */ -/* Reuse tokens from ARB_texture_compression_rgtc */ -/* reuse GL_COMPRESSED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_RG_RGTC2 */ -/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */ -/* Reuse tokens from ARB_texture_rg */ -/* reuse GL_RG */ -/* reuse GL_RG_INTEGER */ -/* reuse GL_R8 */ -/* reuse GL_R16 */ -/* reuse GL_RG8 */ -/* reuse GL_RG16 */ -/* reuse GL_R16F */ -/* reuse GL_R32F */ -/* reuse GL_RG16F */ -/* reuse GL_RG32F */ -/* reuse GL_R8I */ -/* reuse GL_R8UI */ -/* reuse GL_R16I */ -/* reuse GL_R16UI */ -/* reuse GL_R32I */ -/* reuse GL_R32UI */ -/* reuse GL_RG8I */ -/* reuse GL_RG8UI */ -/* reuse GL_RG16I */ -/* reuse GL_RG16UI */ -/* reuse GL_RG32I */ -/* reuse GL_RG32UI */ -/* Reuse tokens from ARB_vertex_array_object */ -/* reuse GL_VERTEX_ARRAY_BINDING */ -#endif - -#ifndef GL_VERSION_3_0_DEPRECATED -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_TEXTURE_LUMINANCE_TYPE */ -/* reuse GL_TEXTURE_INTENSITY_TYPE */ -#endif - -#ifndef GL_VERSION_3_1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -/* Reuse tokens from ARB_copy_buffer */ -/* reuse GL_COPY_READ_BUFFER */ -/* reuse GL_COPY_WRITE_BUFFER */ -/* Reuse tokens from ARB_draw_instanced (none) */ -/* Reuse tokens from ARB_uniform_buffer_object */ -/* reuse GL_UNIFORM_BUFFER */ -/* reuse GL_UNIFORM_BUFFER_BINDING */ -/* reuse GL_UNIFORM_BUFFER_START */ -/* reuse GL_UNIFORM_BUFFER_SIZE */ -/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */ -/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */ -/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */ -/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */ -/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */ -/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */ -/* reuse GL_ACTIVE_UNIFORM_BLOCKS */ -/* reuse GL_UNIFORM_TYPE */ -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_INDEX */ -/* reuse GL_UNIFORM_OFFSET */ -/* reuse GL_UNIFORM_ARRAY_STRIDE */ -/* reuse GL_UNIFORM_MATRIX_STRIDE */ -/* reuse GL_UNIFORM_IS_ROW_MAJOR */ -/* reuse GL_UNIFORM_BLOCK_BINDING */ -/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */ -/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_INVALID_INDEX */ -#endif - -#ifndef GL_VERSION_3_2 -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* Reuse tokens from ARB_depth_clamp */ -/* reuse GL_DEPTH_CLAMP */ -/* Reuse tokens from ARB_draw_elements_base_vertex (none) */ -/* Reuse tokens from ARB_fragment_coord_conventions (none) */ -/* Reuse tokens from ARB_provoking_vertex */ -/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -/* Reuse tokens from ARB_seamless_cube_map */ -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ -/* Reuse tokens from ARB_sync */ -/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */ -/* reuse GL_OBJECT_TYPE */ -/* reuse GL_SYNC_CONDITION */ -/* reuse GL_SYNC_STATUS */ -/* reuse GL_SYNC_FLAGS */ -/* reuse GL_SYNC_FENCE */ -/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */ -/* reuse GL_UNSIGNALED */ -/* reuse GL_SIGNALED */ -/* reuse GL_ALREADY_SIGNALED */ -/* reuse GL_TIMEOUT_EXPIRED */ -/* reuse GL_CONDITION_SATISFIED */ -/* reuse GL_WAIT_FAILED */ -/* reuse GL_TIMEOUT_IGNORED */ -/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */ -/* reuse GL_TIMEOUT_IGNORED */ -/* Reuse tokens from ARB_texture_multisample */ -/* reuse GL_SAMPLE_POSITION */ -/* reuse GL_SAMPLE_MASK */ -/* reuse GL_SAMPLE_MASK_VALUE */ -/* reuse GL_MAX_SAMPLE_MASK_WORDS */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_SAMPLES */ -/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */ -/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */ -/* reuse GL_MAX_INTEGER_SAMPLES */ -/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */ -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -/* Reuse tokens from ARB_blend_func_extended */ -/* reuse GL_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_ALPHA */ -/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */ -/* Reuse tokens from ARB_explicit_attrib_location (none) */ -/* Reuse tokens from ARB_occlusion_query2 */ -/* reuse GL_ANY_SAMPLES_PASSED */ -/* Reuse tokens from ARB_sampler_objects */ -/* reuse GL_SAMPLER_BINDING */ -/* Reuse tokens from ARB_shader_bit_encoding (none) */ -/* Reuse tokens from ARB_texture_rgb10_a2ui */ -/* reuse GL_RGB10_A2UI */ -/* Reuse tokens from ARB_texture_swizzle */ -/* reuse GL_TEXTURE_SWIZZLE_R */ -/* reuse GL_TEXTURE_SWIZZLE_G */ -/* reuse GL_TEXTURE_SWIZZLE_B */ -/* reuse GL_TEXTURE_SWIZZLE_A */ -/* reuse GL_TEXTURE_SWIZZLE_RGBA */ -/* Reuse tokens from ARB_timer_query */ -/* reuse GL_TIME_ELAPSED */ -/* reuse GL_TIMESTAMP */ -/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */ -/* reuse GL_INT_2_10_10_10_REV */ -#endif - -#ifndef GL_VERSION_4_0 -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -/* Reuse tokens from ARB_texture_query_lod (none) */ -/* Reuse tokens from ARB_draw_buffers_blend (none) */ -/* Reuse tokens from ARB_draw_indirect */ -/* reuse GL_DRAW_INDIRECT_BUFFER */ -/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */ -/* Reuse tokens from ARB_gpu_shader5 */ -/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -/* Reuse tokens from ARB_gpu_shader_fp64 */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -/* Reuse tokens from ARB_shader_subroutine */ -/* reuse GL_ACTIVE_SUBROUTINES */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */ -/* reuse GL_MAX_SUBROUTINES */ -/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ -/* reuse GL_COMPATIBLE_SUBROUTINES */ -/* Reuse tokens from ARB_tessellation_shader */ -/* reuse GL_PATCHES */ -/* reuse GL_PATCH_VERTICES */ -/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */ -/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */ -/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */ -/* reuse GL_TESS_GEN_MODE */ -/* reuse GL_TESS_GEN_SPACING */ -/* reuse GL_TESS_GEN_VERTEX_ORDER */ -/* reuse GL_TESS_GEN_POINT_MODE */ -/* reuse GL_ISOLINES */ -/* reuse GL_FRACTIONAL_ODD */ -/* reuse GL_FRACTIONAL_EVEN */ -/* reuse GL_MAX_PATCH_VERTICES */ -/* reuse GL_MAX_TESS_GEN_LEVEL */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_PATCH_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_CONTROL_SHADER */ -/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */ -/* Reuse tokens from ARB_transform_feedback2 */ -/* reuse GL_TRANSFORM_FEEDBACK */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ -/* reuse GL_TRANSFORM_FEEDBACK_BINDING */ -/* Reuse tokens from ARB_transform_feedback3 */ -/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif - -#ifndef GL_VERSION_4_1 -/* Reuse tokens from ARB_ES2_compatibility */ -/* reuse GL_FIXED */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */ -/* reuse GL_LOW_FLOAT */ -/* reuse GL_MEDIUM_FLOAT */ -/* reuse GL_HIGH_FLOAT */ -/* reuse GL_LOW_INT */ -/* reuse GL_MEDIUM_INT */ -/* reuse GL_HIGH_INT */ -/* reuse GL_SHADER_COMPILER */ -/* reuse GL_NUM_SHADER_BINARY_FORMATS */ -/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */ -/* reuse GL_MAX_VARYING_VECTORS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */ -/* Reuse tokens from ARB_get_program_binary */ -/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */ -/* reuse GL_PROGRAM_BINARY_LENGTH */ -/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */ -/* reuse GL_PROGRAM_BINARY_FORMATS */ -/* Reuse tokens from ARB_separate_shader_objects */ -/* reuse GL_VERTEX_SHADER_BIT */ -/* reuse GL_FRAGMENT_SHADER_BIT */ -/* reuse GL_GEOMETRY_SHADER_BIT */ -/* reuse GL_TESS_CONTROL_SHADER_BIT */ -/* reuse GL_TESS_EVALUATION_SHADER_BIT */ -/* reuse GL_ALL_SHADER_BITS */ -/* reuse GL_PROGRAM_SEPARABLE */ -/* reuse GL_ACTIVE_PROGRAM */ -/* reuse GL_PROGRAM_PIPELINE_BINDING */ -/* Reuse tokens from ARB_shader_precision (none) */ -/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */ -/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */ -/* reuse GL_MAX_VIEWPORTS */ -/* reuse GL_VIEWPORT_SUBPIXEL_BITS */ -/* reuse GL_VIEWPORT_BOUNDS_RANGE */ -/* reuse GL_LAYER_PROVOKING_VERTEX */ -/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */ -/* reuse GL_UNDEFINED_VERTEX */ -#endif - -#ifndef GL_VERSION_4_2 -/* Reuse tokens from ARB_base_instance (none) */ -/* Reuse tokens from ARB_shading_language_420pack (none) */ -/* Reuse tokens from ARB_transform_feedback_instanced (none) */ -/* Reuse tokens from ARB_compressed_texture_pixel_storage */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE */ -/* reuse GL_PACK_COMPRESSED_BLOCK_WIDTH */ -/* reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT */ -/* reuse GL_PACK_COMPRESSED_BLOCK_DEPTH */ -/* reuse GL_PACK_COMPRESSED_BLOCK_SIZE */ -/* Reuse tokens from ARB_conservative_depth (none) */ -/* Reuse tokens from ARB_internalformat_query */ -/* reuse GL_NUM_SAMPLE_COUNTS */ -/* Reuse tokens from ARB_map_buffer_alignment */ -/* reuse GL_MIN_MAP_BUFFER_ALIGNMENT */ -/* Reuse tokens from ARB_shader_atomic_counters */ -/* reuse GL_ATOMIC_COUNTER_BUFFER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_BINDING */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_START */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_SIZE */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_VERTEX_ATOMIC_COUNTERS */ -/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */ -/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */ -/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS */ -/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS */ -/* reuse GL_MAX_COMBINED_ATOMIC_COUNTERS */ -/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */ -/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */ -/* reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */ -/* reuse GL_UNSIGNED_INT_ATOMIC_COUNTER */ -/* Reuse tokens from ARB_shader_image_load_store */ -/* reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */ -/* reuse GL_ELEMENT_ARRAY_BARRIER_BIT */ -/* reuse GL_UNIFORM_BARRIER_BIT */ -/* reuse GL_TEXTURE_FETCH_BARRIER_BIT */ -/* reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */ -/* reuse GL_COMMAND_BARRIER_BIT */ -/* reuse GL_PIXEL_BUFFER_BARRIER_BIT */ -/* reuse GL_TEXTURE_UPDATE_BARRIER_BIT */ -/* reuse GL_BUFFER_UPDATE_BARRIER_BIT */ -/* reuse GL_FRAMEBUFFER_BARRIER_BIT */ -/* reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT */ -/* reuse GL_ATOMIC_COUNTER_BARRIER_BIT */ -/* reuse GL_ALL_BARRIER_BITS */ -/* reuse GL_MAX_IMAGE_UNITS */ -/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */ -/* reuse GL_IMAGE_BINDING_NAME */ -/* reuse GL_IMAGE_BINDING_LEVEL */ -/* reuse GL_IMAGE_BINDING_LAYERED */ -/* reuse GL_IMAGE_BINDING_LAYER */ -/* reuse GL_IMAGE_BINDING_ACCESS */ -/* reuse GL_IMAGE_1D */ -/* reuse GL_IMAGE_2D */ -/* reuse GL_IMAGE_3D */ -/* reuse GL_IMAGE_2D_RECT */ -/* reuse GL_IMAGE_CUBE */ -/* reuse GL_IMAGE_BUFFER */ -/* reuse GL_IMAGE_1D_ARRAY */ -/* reuse GL_IMAGE_2D_ARRAY */ -/* reuse GL_IMAGE_CUBE_MAP_ARRAY */ -/* reuse GL_IMAGE_2D_MULTISAMPLE */ -/* reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_INT_IMAGE_1D */ -/* reuse GL_INT_IMAGE_2D */ -/* reuse GL_INT_IMAGE_3D */ -/* reuse GL_INT_IMAGE_2D_RECT */ -/* reuse GL_INT_IMAGE_CUBE */ -/* reuse GL_INT_IMAGE_BUFFER */ -/* reuse GL_INT_IMAGE_1D_ARRAY */ -/* reuse GL_INT_IMAGE_2D_ARRAY */ -/* reuse GL_INT_IMAGE_CUBE_MAP_ARRAY */ -/* reuse GL_INT_IMAGE_2D_MULTISAMPLE */ -/* reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_1D */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D */ -/* reuse GL_UNSIGNED_INT_IMAGE_3D */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_RECT */ -/* reuse GL_UNSIGNED_INT_IMAGE_CUBE */ -/* reuse GL_UNSIGNED_INT_IMAGE_BUFFER */ -/* reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_MAX_IMAGE_SAMPLES */ -/* reuse GL_IMAGE_BINDING_FORMAT */ -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */ -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */ -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */ -/* reuse GL_MAX_VERTEX_IMAGE_UNIFORMS */ -/* reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */ -/* reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */ -/* reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS */ -/* reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS */ -/* reuse GL_MAX_COMBINED_IMAGE_UNIFORMS */ -/* Reuse tokens from ARB_shading_language_packing (none) */ -/* Reuse tokens from ARB_texture_storage */ -/* reuse GL_TEXTURE_IMMUTABLE_FORMAT */ -#endif - -#ifndef GL_ARB_multitexture -#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 -#endif - -#ifndef GL_ARB_transpose_matrix -#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 -#endif - -#ifndef GL_ARB_multisample -#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 -#endif - -#ifndef GL_ARB_texture_env_add -#endif - -#ifndef GL_ARB_texture_cube_map -#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 -#endif - -#ifndef GL_ARB_texture_compression -#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 -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif - -#ifndef GL_ARB_point_parameters -#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 -#endif - -#ifndef GL_ARB_vertex_blend -#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_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#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 -#endif - -#ifndef GL_ARB_matrix_palette -#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 -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#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 GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif - -#ifndef GL_ARB_depth_texture -#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 -#endif - -#ifndef GL_ARB_shadow -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif - -#ifndef GL_ARB_window_pos -#endif - -#ifndef GL_ARB_vertex_program -#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 -#endif - -#ifndef GL_ARB_fragment_program -#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 -#endif - -#ifndef GL_ARB_vertex_buffer_object -#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 -#endif - -#ifndef GL_ARB_occlusion_query -#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 -#endif - -#ifndef GL_ARB_shader_objects -#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 -#endif - -#ifndef GL_ARB_vertex_shader -#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 -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#endif - -#ifndef GL_ARB_point_sprite -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#endif - -#ifndef GL_ARB_draw_buffers -#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 -#endif - -#ifndef GL_ARB_texture_rectangle -#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 -#endif - -#ifndef GL_ARB_color_buffer_float -#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 -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_HALF_FLOAT_ARB 0x140B -#endif - -#ifndef GL_ARB_texture_float -#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 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 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#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 -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#endif - -#ifndef GL_ARB_draw_instanced -#endif - -#ifndef GL_ARB_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#endif - -#ifndef GL_ARB_framebuffer_object_DEPRECATED -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#endif - -#ifndef GL_ARB_geometry_shader4 -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_HALF_FLOAT 0x140B -#endif - -#ifndef GL_ARB_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -#endif - -#ifndef GL_ARB_map_buffer_range -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#endif - -#ifndef GL_ARB_texture_buffer_object -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#endif - -#ifndef GL_ARB_texture_rg -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#endif - -#ifndef GL_ARB_uniform_buffer_object -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -#endif - -#ifndef GL_ARB_compatibility -/* ARB_compatibility just defines tokens from core 3.0 */ -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#endif - -#ifndef GL_ARB_shader_texture_lod -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_DEPTH_CLAMP 0x864F -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#endif - -#ifndef GL_ARB_provoking_vertex -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#endif - -#ifndef GL_ARB_sync -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#endif - -#ifndef GL_ARB_texture_multisample -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -#endif - -#ifndef GL_ARB_vertex_array_bgra -/* reuse GL_BGRA */ -#endif - -#ifndef GL_ARB_draw_buffers_blend -#endif - -#ifndef GL_ARB_sample_shading -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -#endif - -#ifndef GL_ARB_texture_cube_map_array -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#endif - -#ifndef GL_ARB_texture_gather -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#endif - -#ifndef GL_ARB_texture_query_lod -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -#endif - -#ifndef GL_ARB_texture_compression_bptc -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_SRC1_COLOR 0x88F9 -/* reuse GL_SRC1_ALPHA */ -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#endif - -#ifndef GL_ARB_explicit_attrib_location -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_SAMPLER_BINDING 0x8919 -#endif - -#ifndef GL_ARB_shader_bit_encoding -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_RGB10_A2UI 0x906F -#endif - -#ifndef GL_ARB_texture_swizzle -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#endif - -#ifndef GL_ARB_timer_query -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */ -#define GL_INT_2_10_10_10_REV 0x8D9F -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#endif - -#ifndef GL_ARB_gpu_shader5 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -/* reuse GL_TRIANGLES */ -/* reuse GL_QUADS */ -#define GL_ISOLINES 0x8E7A -/* reuse GL_EQUAL */ -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -/* reuse GL_CCW */ -/* reuse GL_CW */ -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -/* reuse GL_RGB32F */ -/* reuse GL_RGB32UI */ -/* reuse GL_RGB32I */ -#endif - -#ifndef GL_ARB_transform_feedback2 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#endif - -#ifndef GL_ARB_get_program_binary -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#endif - -#ifndef GL_ARB_separate_shader_objects -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#endif - -#ifndef GL_ARB_shader_precision -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -/* reuse GL_RGB32I */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -#endif - -#ifndef GL_ARB_viewport_array -/* reuse GL_SCISSOR_BOX */ -/* reuse GL_VIEWPORT */ -/* reuse GL_DEPTH_RANGE */ -/* reuse GL_SCISSOR_TEST */ -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -#endif - -#ifndef GL_ARB_cl_event -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -#endif - -#ifndef GL_ARB_debug_output -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -#endif - -#ifndef GL_ARB_robustness -/* reuse GL_NO_ERROR */ -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -#endif - -#ifndef GL_ARB_shader_stencil_export -#endif - -#ifndef GL_ARB_base_instance -#endif - -#ifndef GL_ARB_shading_language_420pack -#endif - -#ifndef GL_ARB_transform_feedback_instanced -#endif - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#endif - -#ifndef GL_ARB_conservative_depth -#endif - -#ifndef GL_ARB_internalformat_query -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#endif - -#ifndef GL_ARB_map_buffer_alignment -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC -#endif - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#endif - -#ifndef GL_ARB_shader_image_load_store -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#endif - -#ifndef GL_ARB_shading_language_packing -#endif - -#ifndef GL_ARB_texture_storage -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -#endif - -#ifndef GL_EXT_abgr -#define GL_ABGR_EXT 0x8000 -#endif - -#ifndef GL_EXT_blend_color -#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 -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif - -#ifndef GL_EXT_texture -#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 GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif - -#ifndef GL_EXT_texture3D -#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 -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif - -#ifndef GL_EXT_subtexture -#endif - -#ifndef GL_EXT_copy_texture -#endif - -#ifndef GL_EXT_histogram -#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 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif - -#ifndef GL_EXT_convolution -#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 -#endif - -#ifndef GL_SGI_color_matrix -#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 -#endif - -#ifndef GL_SGI_color_table -#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 -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif - -#ifndef GL_SGIS_texture4D -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif - -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif - -#ifndef GL_EXT_texture_object -#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 -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif - -#ifndef GL_EXT_packed_pixels -#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 -#endif - -#ifndef GL_SGIS_texture_lod -#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 -#endif - -#ifndef GL_SGIS_multisample -#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 -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif - -#ifndef GL_EXT_vertex_array -#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 -#endif - -#ifndef GL_EXT_misc_attribute -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif - -#ifndef GL_SGIX_shadow -#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 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif - -#ifndef GL_EXT_blend_logic_op -#endif - -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif - -#ifndef GL_SGIS_texture_select -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif - -#ifndef GL_EXT_point_parameters -#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 -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif - -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif - -#ifndef GL_SGIX_texture_scale_bias -#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 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#endif - -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif - -#ifndef GL_SGIX_flush_raster -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif - -#ifndef GL_HP_image_transform -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif - -#ifndef GL_INGR_palette_buffer -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif - -#ifndef GL_EXT_color_subtable -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#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_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 GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif - -#ifndef GL_EXT_paletted_texture -#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 -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif - -#ifndef GL_EXT_index_texture -#endif - -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif - -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#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 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif - -#ifndef GL_SGIX_impact_pixel_texture -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif - -#ifndef GL_EXT_bgra -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#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 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#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 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#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 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#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 -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif - -#ifndef GL_EXT_multi_draw_arrays -#endif - -#ifndef GL_EXT_fog_coord -#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 -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif - -#ifndef GL_EXT_coordinate_frame -#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 -#endif - -#ifndef GL_EXT_texture_env_combine -#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 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif - -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif - -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif - -#ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#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 -#endif - -#ifndef GL_SUN_vertex -#endif - -#ifndef GL_EXT_blend_func_separate -#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 -#endif - -#ifndef GL_INGR_color_clamp -#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 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -#ifndef GL_EXT_texture_cube_map -#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 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif - -#ifndef GL_EXT_texture_env_add -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#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 -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -#ifndef GL_NV_vertex_array_range -#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 -#endif - -#ifndef GL_NV_register_combiners -#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 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif - -#ifndef GL_NV_blend_square -#endif - -#ifndef GL_NV_texture_env_combine4 -#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 -#endif - -#ifndef GL_MESA_resize_buffers -#endif - -#ifndef GL_MESA_window_pos -#endif - -#ifndef GL_EXT_texture_compression_s3tc -#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 -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#endif - -#ifndef GL_IBM_vertex_array_lists -#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 -#endif - -#ifndef GL_SGIX_subsample -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif - -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif - -#ifndef GL_3DFX_tbuffer -#endif - -#ifndef GL_EXT_multisample -#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 -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif - -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif - -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif - -#ifndef GL_NV_evaluators -#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 -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif - -#ifndef GL_NV_texture_compression_vtc -#endif - -#ifndef GL_NV_texture_rectangle -#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 -#endif - -#ifndef GL_NV_texture_shader -#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_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#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 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif - -#ifndef GL_NV_vertex_program -#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 -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif - -#ifndef GL_OML_interlace -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif - -#ifndef GL_OML_subsample -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif - -#ifndef GL_OML_resample -#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 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif - -#ifndef GL_ATI_envmap_bumpmap -#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 -#endif - -#ifndef GL_ATI_fragment_shader -#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_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#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_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#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 -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#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_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif - -#ifndef GL_ATI_pn_triangles -#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 -#endif - -#ifndef GL_ATI_vertex_array_object -#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 -#endif - -#ifndef GL_EXT_vertex_shader -#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_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_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 -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -#endif - -#ifndef GL_ATI_element_array -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif - -#ifndef GL_SUN_mesh_array -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_DEPTH_CLAMP_NV 0x864F -#endif - -#ifndef GL_NV_occlusion_query -#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 -#endif - -#ifndef GL_NV_point_sprite -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif - -#ifndef GL_NV_texture_shader3 -#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 -#endif - -#ifndef GL_NV_vertex_program1_1 -#endif - -#ifndef GL_EXT_shadow_funcs -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif - -#ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -#endif - -#ifndef GL_APPLE_fence -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif - -#ifndef GL_APPLE_vertex_array_range -#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_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -#ifndef GL_S3_s3tc -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#endif - -#ifndef GL_ATI_draw_buffers -#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 -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif - -#ifndef GL_ATI_texture_float -#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 -#endif - -#ifndef GL_NV_float_buffer -#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 -#endif - -#ifndef GL_NV_fragment_program -#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 -#endif - -#ifndef GL_NV_half_float -#define GL_HALF_FLOAT_NV 0x140B -#endif - -#ifndef GL_NV_pixel_data_range -#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 -#endif - -#ifndef GL_NV_primitive_restart -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif - -#ifndef GL_NV_vertex_program2 -#endif - -#ifndef GL_ATI_map_object_buffer -#endif - -#ifndef GL_ATI_separate_stencil -#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 -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#endif - -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif - -#ifndef GL_MESA_pack_invert -#define GL_PACK_INVERT_MESA 0x8758 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#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 -#endif - -#ifndef GL_NV_fragment_program_option -#endif - -#ifndef GL_NV_fragment_program2 -#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 -#endif - -#ifndef GL_NV_vertex_program2_option -/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ -/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ -#endif - -#ifndef GL_NV_vertex_program3 -/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ -#endif - -#ifndef GL_EXT_framebuffer_object -#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 -#endif - -#ifndef GL_GREMEDY_string_marker -#endif - -#ifndef GL_EXT_packed_depth_stencil -#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 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#endif - -#ifndef GL_EXT_texture_sRGB -#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 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -#ifndef GL_MESAX_texture_stack -#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 -#endif - -#ifndef GL_EXT_timer_query -#define GL_TIME_ELAPSED_EXT 0x88BF -#endif - -#ifndef GL_EXT_gpu_program_parameters -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#endif - -#ifndef GL_NV_gpu_program4 -#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 -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -#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_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#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_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */ -/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */ -/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */ -/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */ -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#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 -/* reuse GL_LINES_ADJACENCY_EXT */ -/* reuse GL_LINE_STRIP_ADJACENCY_EXT */ -/* reuse GL_TRIANGLES_ADJACENCY_EXT */ -/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -/* reuse GL_PROGRAM_POINT_SIZE_EXT */ -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -#endif - -#ifndef GL_EXT_gpu_shader4 -#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 -#endif - -#ifndef GL_EXT_draw_instanced -#endif - -#ifndef GL_EXT_packed_float -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif - -#ifndef GL_EXT_texture_array -#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 GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -#endif - -#ifndef GL_EXT_texture_buffer_object -#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 -#endif - -#ifndef GL_EXT_texture_compression_latc -#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 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#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 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif - -#ifndef GL_NV_depth_buffer_float -#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 -#endif - -#ifndef GL_NV_fragment_program4 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#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 -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif - -#ifndef GL_NV_geometry_shader4 -#endif - -#ifndef GL_NV_parameter_buffer_object -#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 -#endif - -#ifndef GL_EXT_draw_buffers2 -#endif - -#ifndef GL_NV_transform_feedback -#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_ATTRIBS_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 -#define GL_LAYER_NV 0x8DAA -#define GL_NEXT_BUFFER_NV -2 -#define GL_SKIP_COMPONENTS4_NV -3 -#define GL_SKIP_COMPONENTS3_NV -4 -#define GL_SKIP_COMPONENTS2_NV -5 -#define GL_SKIP_COMPONENTS1_NV -6 -#endif - -#ifndef GL_EXT_bindable_uniform -#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 -#endif - -#ifndef GL_EXT_texture_integer -#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 -#endif - -#ifndef GL_GREMEDY_frame_terminator -#endif - -#ifndef GL_NV_conditional_render -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -#endif - -#ifndef GL_NV_present_video -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B -#endif - -#ifndef GL_EXT_transform_feedback -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -#endif - -#ifndef GL_EXT_direct_state_access -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -#endif - -#ifndef GL_EXT_vertex_array_bgra -/* reuse GL_BGRA */ -#endif - -#ifndef GL_EXT_texture_swizzle -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#endif - -#ifndef GL_NV_explicit_multisample -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 -#endif - -#ifndef GL_NV_transform_feedback2 -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 -#endif - -#ifndef GL_ATI_meminfo -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#endif - -#ifndef GL_AMD_performance_monitor -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -#endif - -#ifndef GL_AMD_texture_texture4 -#endif - -#ifndef GL_AMD_vertex_shader_tesselator -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 -#endif - -#ifndef GL_EXT_provoking_vertex -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F -#endif - -#ifndef GL_EXT_texture_snorm -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B -/* reuse GL_RED_SNORM */ -/* reuse GL_RG_SNORM */ -/* reuse GL_RGB_SNORM */ -/* reuse GL_RGBA_SNORM */ -/* reuse GL_R8_SNORM */ -/* reuse GL_RG8_SNORM */ -/* reuse GL_RGB8_SNORM */ -/* reuse GL_RGBA8_SNORM */ -/* reuse GL_R16_SNORM */ -/* reuse GL_RG16_SNORM */ -/* reuse GL_RGB16_SNORM */ -/* reuse GL_RGBA16_SNORM */ -/* reuse GL_SIGNED_NORMALIZED */ -#endif - -#ifndef GL_AMD_draw_buffers_blend -#endif - -#ifndef GL_APPLE_texture_range -#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 -/* reuse GL_STORAGE_CACHED_APPLE */ -/* reuse GL_STORAGE_SHARED_APPLE */ -#endif - -#ifndef GL_APPLE_float_pixels -#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 -#endif - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 -#endif - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#endif - -#ifndef GL_APPLE_object_purgeable -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D -#endif - -#ifndef GL_APPLE_row_bytes -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#endif - -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */ -/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */ -#endif - -#ifndef GL_NV_video_capture -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C -#endif - -#ifndef GL_NV_copy_image -#endif - -#ifndef GL_EXT_separate_shader_objects -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -#endif - -#ifndef GL_NV_parameter_buffer_object2 -#endif - -#ifndef GL_NV_shader_buffer_load -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -#endif - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 -#endif - -#ifndef GL_NV_texture_barrier -#endif - -#ifndef GL_AMD_shader_stencil_export -#endif - -#ifndef GL_AMD_seamless_cubemap_per_texture -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ -#endif - -#ifndef GL_AMD_conservative_depth -#endif - -#ifndef GL_EXT_shader_image_load_store -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -#endif - -#ifndef GL_EXT_vertex_attrib_64bit -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -#endif - -#ifndef GL_NV_gpu_program5 -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F -#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -#endif - -#ifndef GL_NV_gpu_shader5 -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -/* reuse GL_PATCHES */ -#endif - -#ifndef GL_NV_shader_buffer_store -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -/* reuse GL_READ_WRITE */ -/* reuse GL_WRITE_ONLY */ -#endif - -#ifndef GL_NV_tessellation_program5 -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 -#endif - -#ifndef GL_NV_vertex_attrib_integer_64bit -/* reuse GL_INT64_NV */ -/* reuse GL_UNSIGNED_INT64_NV */ -#endif - -#ifndef GL_NV_multisample_coverage -#define GL_COVERAGE_SAMPLES_NV 0x80A9 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#endif - -#ifndef GL_AMD_name_gen_delete -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 -#endif - -#ifndef GL_AMD_debug_output -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -#endif - -#ifndef GL_NV_vdpau_interop -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -#endif - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#endif - -#ifndef GL_AMD_depth_clamp_separate -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F -#endif - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#endif - -#ifndef GL_NV_texture_multisample -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 -#endif - -#ifndef GL_AMD_blend_minmax_factor -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D -#endif - -#ifndef GL_AMD_sample_positions -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F -#endif - -#ifndef GL_EXT_x11_sync_object -#define GL_SYNC_X11_FENCE_EXT 0x90E1 -#endif - -#ifndef GL_AMD_multi_draw_indirect -#endif - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for program/shader text and shader object handles */ -typedef char GLcharARB; -typedef unsigned int GLhandleARB; -#endif - -/* GL type for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif - -#ifndef GL_EXT_timer_query -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_ARB_sync -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#ifndef GL_ARB_cl_event -/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ -struct _cl_context; -struct _cl_event; -#endif - -#ifndef GL_ARB_debug_output -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_AMD_debug_output -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_NV_vdpau_interop -typedef GLintptr GLvdpauSurfaceNV; -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_2_DEPRECATED -#define GL_VERSION_1_2_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogram (GLenum target); -GLAPI void APIENTRY glResetMinmax (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -#endif - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_VERSION_1_3_DEPRECATED -#define GL_VERSION_1_3_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientActiveTexture (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -#endif - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_VERSION_1_4_DEPRECATED -#define GL_VERSION_1_4_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordf (GLfloat coord); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); -GLAPI void APIENTRY glFogCoordd (GLdouble coord); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2iv (const GLint *v); -GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); -GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3iv (const GLint *v); -GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -/* OpenGL 3.0 also reuses entry points from these extensions: */ -/* ARB_framebuffer_object */ -/* ARB_map_buffer_range */ -/* ARB_vertex_array_object */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -#endif - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -/* OpenGL 3.1 also reuses entry points from these extensions: */ -/* ARB_copy_buffer */ -/* ARB_uniform_buffer_object */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -#endif - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -/* OpenGL 3.2 also reuses entry points from these extensions: */ -/* ARB_draw_elements_base_vertex */ -/* ARB_provoking_vertex */ -/* ARB_sync */ -/* ARB_texture_multisample */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -/* OpenGL 3.3 also reuses entry points from these extensions: */ -/* ARB_blend_func_extended */ -/* ARB_sampler_objects */ -/* ARB_explicit_attrib_location, but it has none */ -/* ARB_occlusion_query2 (no entry points) */ -/* ARB_shader_bit_encoding (no entry points) */ -/* ARB_texture_rgb10_a2ui (no entry points) */ -/* ARB_texture_swizzle (no entry points) */ -/* ARB_timer_query */ -/* ARB_vertex_type_2_10_10_10_rev */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -/* OpenGL 4.0 also reuses entry points from these extensions: */ -/* ARB_texture_query_lod (no entry points) */ -/* ARB_draw_indirect */ -/* ARB_gpu_shader5 (no entry points) */ -/* ARB_gpu_shader_fp64 */ -/* ARB_shader_subroutine */ -/* ARB_tessellation_shader */ -/* ARB_texture_buffer_object_rgb32 (no entry points) */ -/* ARB_texture_cube_map_array (no entry points) */ -/* ARB_texture_gather (no entry points) */ -/* ARB_transform_feedback2 */ -/* ARB_transform_feedback3 */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLclampf value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLclampf value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -/* OpenGL 4.1 reuses entry points from these extensions: */ -/* ARB_ES2_compatibility */ -/* ARB_get_program_binary */ -/* ARB_separate_shader_objects */ -/* ARB_shader_precision (no entry points) */ -/* ARB_vertex_attrib_64bit */ -/* ARB_viewport_array */ -#endif - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 -/* OpenGL 4.2 reuses entry points from these extensions: */ -/* ARB_base_instance */ -/* ARB_shading_language_420pack (no entry points) */ -/* ARB_transform_feedback_instanced */ -/* ARB_compressed_texture_pixel_storage (no entry points) */ -/* ARB_conservative_depth (no entry points) */ -/* ARB_internalformat_query */ -/* ARB_map_buffer_alignment (no entry points) */ -/* ARB_shader_atomic_counters */ -/* ARB_shader_image_load_store */ -/* ARB_shading_language_packing (no entry points) */ -/* ARB_texture_storage */ -#endif - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#endif - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf value, GLboolean invert); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (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 (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#endif - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); -GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); -GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); -GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); -GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); -GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); -GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); -GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); -GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glVertexBlendARB (GLint count); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#endif - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#endif - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#endif - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#endif - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); -GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); -GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQueryARB (GLenum target); -GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#endif - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#endif - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); -#endif - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLclampf value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value); -#endif - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#endif - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#endif - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -#endif - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); -#endif - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLclampf n, GLclampf f); -GLAPI void APIENTRY glClearDepthf (GLclampf d); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLclampf d); -#endif - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* *strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* *strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -#endif - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLclampd *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLclampd n, GLclampd f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#endif - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); -GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); -GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); -#endif - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 -#endif - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei primcount); -GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei primcount); -#endif - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 -#endif - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 -#endif - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -#endif - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 -#endif - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); -#endif - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 -#endif - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogramEXT (GLenum target); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#endif - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint i); -GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); -GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); -GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); -GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); -GLAPI void APIENTRY glTextureLightEXT (GLenum pname); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -#endif - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); -GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); -GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); -GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#endif - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (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); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (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); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); -#endif - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#endif - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#endif - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); -GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GLAPI void APIENTRY glFinishFenceNV (GLuint fence); -GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#endif - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#endif - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); -GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); -GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#endif - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#endif - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); -GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glColorFragmentOp3ATI (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); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); -GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); -GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr); -GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); -GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); -GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); -GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); -GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); -GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); -GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); -GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); -GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); -GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); -GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#endif - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#endif - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#endif - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#endif - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -/* This is really a WGL extension, but defines some associated GL enums. - * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. - */ -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#endif - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#endif - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#endif - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#endif - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#endif - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#endif - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#endif - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#endif - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#endif - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#endif - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#endif - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -#endif - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); -GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#endif - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#endif - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRenderNV (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#endif - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); -GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); -GLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); -GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid *img); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid *img); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -#endif - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -#endif - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -#endif - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); -#endif - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedbackNV (void); -GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -#endif - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 -#endif - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 -#endif - -#ifndef GL_AMD_vertex_shader_tesselator -#define GL_AMD_vertex_shader_tesselator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); -GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -#endif - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer); -GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#endif - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 -#endif - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 -#endif - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); -GLAPI void APIENTRY glActiveProgramEXT (GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); -#endif - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -#endif - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); -GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); -GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); -GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); -GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); -GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); -GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); -GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); -GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); -GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); -GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); -GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); -#endif - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureBarrierNV (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); -#endif - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 -#endif - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 -#endif - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 -#endif - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); -#endif - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -#endif - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); -#endif - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif - -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -#endif - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -#endif - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); -GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -#endif - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); -GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); -GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); -#endif - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress); -GLAPI void APIENTRY glVDPAUFiniNV (void); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); -GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress); -typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 -#endif - -#ifndef GL_AMD_depth_clamp_separate -#define GL_AMD_depth_clamp_separate 1 -#endif - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#endif - -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#endif - -#ifndef GL_AMD_blend_minmax_factor -#define GL_AMD_blend_minmax_factor 1 -#endif - -#ifndef GL_AMD_sample_positions -#define GL_AMD_sample_positions 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); -#endif - -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#endif - -#ifndef GL_AMD_multi_draw_indirect -#define GL_AMD_multi_draw_indirect 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -#endif - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/3rdparty/glsl-optimizer/removeDeletedByUs.sh b/3rdparty/glsl-optimizer/removeDeletedByUs.sh index 0e42d490b..3ecbc7e0d 100644 --- a/3rdparty/glsl-optimizer/removeDeletedByUs.sh +++ b/3rdparty/glsl-optimizer/removeDeletedByUs.sh @@ -1,5 +1,8 @@ #! /bin/sh git rm -rf docs +git rm -rf src/egl git rm -rf src/mesa/drivers git rm -rf src/gallium +git rm -rf src/glx +git rm -rf src/gtest git rm -rf $(git status --porcelain | awk '/^DU/ {print $NF}') diff --git a/3rdparty/glsl-optimizer/src/.gitignore b/3rdparty/glsl-optimizer/src/.gitignore new file mode 100644 index 000000000..5fc607b9e --- /dev/null +++ b/3rdparty/glsl-optimizer/src/.gitignore @@ -0,0 +1 @@ +/Makefile diff --git a/3rdparty/glsl-optimizer/src/glsl/.dir-locals.el b/3rdparty/glsl-optimizer/src/glsl/.dir-locals.el new file mode 100644 index 000000000..be19e29a5 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/.dir-locals.el @@ -0,0 +1,3 @@ +((c-mode . ((c-basic-offset . 3))) + (c++-mode . ((c-basic-offset . 3))) +) diff --git a/3rdparty/glsl-optimizer/src/glsl/.gitignore b/3rdparty/glsl-optimizer/src/glsl/.gitignore index 2013db6f5..4d3b577ce 100644 --- a/3rdparty/glsl-optimizer/src/glsl/.gitignore +++ b/3rdparty/glsl-optimizer/src/glsl/.gitignore @@ -1,4 +1,8 @@ glsl_compiler +glsl_lexer.cc +glsl_parser.cc +glsl_parser.h glsl_parser.output builtin_compiler glsl_test + diff --git a/3rdparty/glsl-optimizer/src/glsl/Makefile b/3rdparty/glsl-optimizer/src/glsl/Makefile new file mode 100644 index 000000000..e09b7f961 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/Makefile @@ -0,0 +1,99 @@ +# A simple makefile to build glsl-optimizer on linux + +CPPFLAGS += -I../talloc \ + -I../mesa \ + -I../mapi + +CXXFLAGS += -s -Wall -Os -fdata-sections -ffunction-sections +CFLAGS += -s -Wall -Os -fdata-sections -ffunction-sections + +# This list gleaned from the VC project file. Update when needed +SRC = ast_expr.cpp \ + ast_function.cpp \ + ast_to_hir.cpp \ + ast_type.cpp \ + builtin_function.cpp \ + glsl_lexer.cpp \ + glsl_optimizer.cpp \ + glsl_parser.cpp \ + glsl_parser_extras.cpp \ + glsl_symbol_table.cpp \ + glsl_types.cpp \ + hir_field_selection.cpp \ + ir.cpp \ + ir_basic_block.cpp \ + ir_clone.cpp \ + ir_constant_expression.cpp \ + ir_expression_flattening.cpp \ + ir_function.cpp \ + ir_function_can_inline.cpp \ + ir_function_detect_recursion.cpp \ + ir_hierarchical_visitor.cpp \ + ir_hv_accept.cpp \ + ir_import_prototypes.cpp \ + ir_print_glsl_visitor.cpp \ + ir_print_visitor.cpp \ + ir_reader.cpp \ + ir_rvalue_visitor.cpp \ + ir_unused_structs.cpp \ + ir_validate.cpp \ + ir_variable.cpp \ + ir_variable_refcount.cpp \ + link_functions.cpp \ + linker.cpp \ + loop_analysis.cpp \ + loop_controls.cpp \ + loop_unroll.cpp \ + lower_discard.cpp \ + lower_if_to_cond_assign.cpp \ + lower_instructions.cpp \ + lower_jumps.cpp \ + lower_mat_op_to_vec.cpp \ + lower_noise.cpp \ + lower_variable_index_to_cond_assign.cpp \ + lower_vec_index_to_cond_assign.cpp \ + lower_vec_index_to_swizzle.cpp \ + lower_vector.cpp \ + main.cpp \ + opt_algebraic.cpp \ + opt_constant_folding.cpp \ + opt_constant_propagation.cpp \ + opt_constant_variable.cpp \ + opt_copy_propagation.cpp \ + opt_copy_propagation_elements.cpp \ + opt_dead_code.cpp \ + opt_dead_code_local.cpp \ + opt_dead_functions.cpp \ + opt_discard_simplification.cpp \ + opt_function_inlining.cpp \ + opt_if_simplification.cpp \ + opt_noop_swizzle.cpp \ + opt_redundant_jumps.cpp \ + opt_structure_splitting.cpp \ + opt_swizzle_swizzle.cpp \ + opt_tree_grafting.cpp \ + ralloc.c \ + s_expression.cpp \ + standalone_scaffolding.cpp \ + strtod.c \ + glcpp/glcpp-lex.c \ + glcpp/glcpp-parse.c \ + glcpp/glcpp.c \ + glcpp/pp.c \ + ../mesa/program/hash_table.c \ + ../mesa/program/symbol_table.c + + +OBJS1 = $(SRC:.cpp=.o) +OBJS = $(OBJS1:.c=.o) + +LIBNAME = libglslopt.a + +.PHONY: clean all + +all: $(OBJS) + ar cr $(LIBNAME) $(OBJS) + ranlib $(LIBNAME) + +clean: + rm -f $(OBJS) $(LIBNAME) diff --git a/3rdparty/glsl-optimizer/src/glsl/README b/3rdparty/glsl-optimizer/src/glsl/README index dd80a53d4..0a0afccdc 100644 --- a/3rdparty/glsl-optimizer/src/glsl/README +++ b/3rdparty/glsl-optimizer/src/glsl/README @@ -177,7 +177,6 @@ ir_unop_fract was added. The following areas need updating to add a new expression type: ir.h (new enum) -ir.cpp:get_num_operands() (used for ir_reader) ir.cpp:operator_strs (used for ir_reader) ir_constant_expression.cpp (you probably want to be able to constant fold) ir_validate.cpp (check users have the right types) diff --git a/3rdparty/glsl-optimizer/src/glsl/SConscript b/3rdparty/glsl-optimizer/src/glsl/SConscript index 1da58a91f..6314c7551 100644 --- a/3rdparty/glsl-optimizer/src/glsl/SConscript +++ b/3rdparty/glsl-optimizer/src/glsl/SConscript @@ -14,10 +14,10 @@ env.Prepend(CPPPATH = [ '#src/glsl/glcpp', ]) -# Make glcpp/glcpp-parse.h and glsl_parser.h reacheable from the include path -env.Append(CPPPATH = [Dir('.').abspath]) +# Make glcpp-parse.h and glsl_parser.h reachable from the include path. +env.Append(CPPPATH = [Dir('.').abspath, Dir('glcpp').abspath]) -env.Append(YACCFLAGS = '-d') +env.Append(YACCFLAGS = '-d -p "glcpp_parser_"') parser_env = env.Clone() parser_env.Append(YACCFLAGS = [ @@ -25,81 +25,30 @@ parser_env.Append(YACCFLAGS = [ '-p', '_mesa_glsl_', ]) +# without this line scons will expect "glsl_parser.hpp" instead of +# "glsl_parser.h", causing glsl_parser.cpp to be regenerated every time +parser_env['YACCHXXFILESUFFIX'] = '.h' + glcpp_lexer = env.CFile('glcpp/glcpp-lex.c', 'glcpp/glcpp-lex.l') glcpp_parser = env.CFile('glcpp/glcpp-parse.c', 'glcpp/glcpp-parse.y') glsl_lexer = parser_env.CXXFile('glsl_lexer.cpp', 'glsl_lexer.ll') glsl_parser = parser_env.CXXFile('glsl_parser.cpp', 'glsl_parser.yy') +# common generated sources glsl_sources = [ glcpp_lexer, glcpp_parser[0], - 'glcpp/pp.c', - 'ast_expr.cpp', - 'ast_function.cpp', - 'ast_to_hir.cpp', - 'ast_type.cpp', glsl_lexer, glsl_parser[0], - 'glsl_parser_extras.cpp', - 'glsl_types.cpp', - 'glsl_symbol_table.cpp', - 'hir_field_selection.cpp', - 'ir_basic_block.cpp', - 'ir_clone.cpp', - 'ir_constant_expression.cpp', - 'ir.cpp', - 'ir_expression_flattening.cpp', - 'ir_function_can_inline.cpp', - 'ir_function_detect_recursion.cpp', - 'ir_function.cpp', - 'ir_hierarchical_visitor.cpp', - 'ir_hv_accept.cpp', - 'ir_import_prototypes.cpp', - 'ir_print_visitor.cpp', - 'ir_reader.cpp', - 'ir_rvalue_visitor.cpp', - 'ir_set_program_inouts.cpp', - 'ir_validate.cpp', - 'ir_variable.cpp', - 'ir_variable_refcount.cpp', - 'linker.cpp', - 'link_functions.cpp', - 'loop_analysis.cpp', - 'loop_controls.cpp', - 'loop_unroll.cpp', - 'lower_discard.cpp', - 'lower_if_to_cond_assign.cpp', - 'lower_instructions.cpp', - 'lower_jumps.cpp', - 'lower_mat_op_to_vec.cpp', - 'lower_noise.cpp', - 'lower_variable_index_to_cond_assign.cpp', - 'lower_vec_index_to_cond_assign.cpp', - 'lower_vec_index_to_swizzle.cpp', - 'lower_vector.cpp', - 'opt_algebraic.cpp', - 'opt_constant_folding.cpp', - 'opt_constant_propagation.cpp', - 'opt_constant_variable.cpp', - 'opt_copy_propagation.cpp', - 'opt_copy_propagation_elements.cpp', - 'opt_dead_code.cpp', - 'opt_dead_code_local.cpp', - 'opt_dead_functions.cpp', - 'opt_discard_simplification.cpp', - 'opt_function_inlining.cpp', - 'opt_if_simplification.cpp', - 'opt_noop_swizzle.cpp', - 'opt_redundant_jumps.cpp', - 'opt_structure_splitting.cpp', - 'opt_swizzle_swizzle.cpp', - 'opt_tree_grafting.cpp', - 'ralloc.c', - 's_expression.cpp', - 'standalone_scaffolding.cpp', - 'strtod.c', ] +# parse Makefile.sources +source_lists = env.ParseSourceList('Makefile.sources') + +# add non-generated sources +for l in ('LIBGLCPP_FILES', 'LIBGLSL_FILES', 'LIBGLSL_CXX_FILES'): + glsl_sources += source_lists[l] + if env['msvc']: env.Prepend(CPPPATH = ['#/src/getopt']) env.PrependUnique(LIBS = [getopt]) @@ -112,16 +61,19 @@ else: env.Command('hash_table.c', '#src/mesa/program/hash_table.c', Copy('$TARGET', '$SOURCE')) env.Command('symbol_table.c', '#src/mesa/program/symbol_table.c', Copy('$TARGET', '$SOURCE')) - main_obj = env.StaticObject('main.cpp') + compiler_objs = env.StaticObject(source_lists['GLSL_COMPILER_CXX_FILES']) mesa_objs = env.StaticObject([ 'hash_table.c', 'symbol_table.c', ]) + compiler_objs += mesa_objs + builtin_compiler = env.Program( target = 'builtin_compiler', - source = main_obj + glsl_sources + ['builtin_stubs.cpp'] + mesa_objs, + source = compiler_objs + glsl_sources + \ + source_lists['BUILTIN_COMPILER_CXX_FILES'], ) # SCons builtin dependency scanner doesn't detect that glsl_lexer.ll @@ -135,7 +87,7 @@ else: command = python_cmd + ' $SCRIPT $SOURCE > $TARGET' ) - env.Depends(builtin_glsl_function, ['builtins/tools/generate_builtins.py', 'builtins/tools/texture_builtins.py'] + Glob('builtins/ir/*')) + env.Depends(builtin_glsl_function, ['builtins/tools/generate_builtins.py', '#src/glsl/builtins/tools/texture_builtins.py'] + Glob('builtins/ir/*')) Export('builtin_glsl_function') @@ -172,7 +124,7 @@ env.Prepend(LIBS = [glsl]) glsl2 = env.Program( target = 'glsl2', - source = main_obj + mesa_objs, + source = compiler_objs, ) env.Alias('glsl2', glsl2) diff --git a/3rdparty/glsl-optimizer/src/glsl/TODO b/3rdparty/glsl-optimizer/src/glsl/TODO index c99d7e152..bd077a856 100644 --- a/3rdparty/glsl-optimizer/src/glsl/TODO +++ b/3rdparty/glsl-optimizer/src/glsl/TODO @@ -6,22 +6,7 @@ constant index values. For others it is more complicated. Perhaps these cases should be silently converted to uniforms? -- Implement support for ir_binop_dot in ir_algebraic.cpp. Perform - transformations such as "dot(v, vec3(0.0, 1.0, 0.0))" -> v.y. - - Track source locations throughout the IR. There are currently several places where we cannot emit line numbers for errors (and currently emit 0:0) because we've "lost" the line number information. This is particularly noticeable at link time. - -1.30 features: - -- Implement AST-to-HIR conversion of switch-statements - - switch - - case - - Update break to correcly handle mixed nexting of switch-statements - and loops. - -- Implement support for gl_ClipDistance. This is non-trivial because - gl_ClipDistance is exposed as a float[8], but all hardware actually - implements it as vec4[2]. \ No newline at end of file diff --git a/3rdparty/glsl-optimizer/src/glsl/ast.h b/3rdparty/glsl-optimizer/src/glsl/ast.h index 52226d6f4..3047855ad 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ast.h +++ b/3rdparty/glsl-optimizer/src/glsl/ast.h @@ -206,7 +206,8 @@ public: subexpressions[0] = NULL; subexpressions[1] = NULL; subexpressions[2] = NULL; - primary_expression.identifier = (char *) identifier; + primary_expression.identifier = identifier; + this->non_lvalue_description = NULL; } static const char *operator_string(enum ast_operators op); @@ -221,7 +222,7 @@ public: ast_expression *subexpressions[3]; union { - char *identifier; + const char *identifier; int int_constant; float float_constant; unsigned uint_constant; @@ -234,6 +235,18 @@ public: * \c ast_function_call */ exec_list expressions; + + /** + * For things that can't be l-values, this describes what it is. + * + * This text is used by the code that generates IR for assignments to + * detect and emit useful messages for assignments to some things that + * can't be l-values. For example, pre- or post-incerement expressions. + * + * \note + * This pointer may be \c NULL. + */ + const char *non_lvalue_description; }; class ast_expression_bin : public ast_expression { @@ -304,11 +317,11 @@ public: class ast_declaration : public ast_node { public: - ast_declaration(char *identifier, int is_array, ast_expression *array_size, + ast_declaration(const char *identifier, int is_array, ast_expression *array_size, ast_expression *initializer); virtual void print(void) const; - char *identifier; + const char *identifier; int is_array; ast_expression *array_size; @@ -325,6 +338,25 @@ enum { }; struct ast_type_qualifier { + /* Callers of this ralloc-based new need not call delete. It's + * easier to just ralloc_free 'ctx' (or any of its ancestors). */ + static void* operator new(size_t size, void *ctx) + { + void *node; + + node = rzalloc_size(ctx, size); + assert(node != NULL); + + return node; + } + + /* If the user *does* call delete, that's OK, we will just + * ralloc_free in that case. */ + static void operator delete(void *table) + { + ralloc_free(table); + } + union { struct { unsigned invariant:1; @@ -350,6 +382,11 @@ struct ast_type_qualifier { * qualifier is used. */ unsigned explicit_location:1; + /** + * Flag set if GL_ARB_explicit_attrib_location "index" layout + * qualifier is used. + */ + unsigned explicit_index:1; /** \name Layout qualifiers for GL_AMD_conservative_depth */ /** \{ */ @@ -358,6 +395,15 @@ struct ast_type_qualifier { unsigned depth_less:1; unsigned depth_unchanged:1; /** \} */ + + /** \name Layout qualifiers for GL_ARB_uniform_buffer_object */ + /** \{ */ + unsigned std140:1; + unsigned shared:1; + unsigned packed:1; + unsigned column_major:1; + unsigned row_major:1; + /** \} */ } /** \brief Set of flags, accessed by name. */ q; @@ -372,7 +418,14 @@ struct ast_type_qualifier { * \note * This field is only valid if \c explicit_location is set. */ - unsigned location; + int location; + /** + * Index specified via GL_ARB_explicit_attrib_location layout + * + * \note + * This field is only valid if \c explicit_index is set. + */ + int index; /** * Return true if and only if an interpolation qualifier is present. @@ -390,86 +443,35 @@ struct ast_type_qualifier { * returned string is undefined but not null. */ const char *interpolation_string() const; + + bool merge_qualifier(YYLTYPE *loc, + _mesa_glsl_parse_state *state, + ast_type_qualifier q); }; +class ast_declarator_list; + class ast_struct_specifier : public ast_node { public: - ast_struct_specifier(char *identifier, ast_node *declarator_list); + ast_struct_specifier(const char *identifier, + ast_declarator_list *declarator_list); virtual void print(void) const; virtual ir_rvalue *hir(exec_list *instructions, struct _mesa_glsl_parse_state *state); - char *name; + const char *name; + /* List of ast_declarator_list * */ exec_list declarations; }; -enum ast_types { - ast_void, - ast_float, - ast_int, - ast_uint, - ast_bool, - ast_vec2, - ast_vec3, - ast_vec4, - ast_bvec2, - ast_bvec3, - ast_bvec4, - ast_ivec2, - ast_ivec3, - ast_ivec4, - ast_uvec2, - ast_uvec3, - ast_uvec4, - ast_mat2, - ast_mat2x3, - ast_mat2x4, - ast_mat3x2, - ast_mat3, - ast_mat3x4, - ast_mat4x2, - ast_mat4x3, - ast_mat4, - ast_sampler1d, - ast_sampler2d, - ast_sampler2drect, - ast_sampler3d, - ast_samplercube, - ast_sampler1dshadow, - ast_sampler2dshadow, - ast_sampler2drectshadow, - ast_samplercubeshadow, - ast_sampler1darray, - ast_sampler2darray, - ast_sampler1darrayshadow, - ast_sampler2darrayshadow, - ast_isampler1d, - ast_isampler2d, - ast_isampler3d, - ast_isamplercube, - ast_isampler1darray, - ast_isampler2darray, - ast_usampler1d, - ast_usampler2d, - ast_usampler3d, - ast_usamplercube, - ast_usampler1darray, - ast_usampler2darray, - - ast_struct, - ast_type_name -}; - class ast_type_specifier : public ast_node { public: - ast_type_specifier(int specifier); - /** Construct a type specifier from a type name */ ast_type_specifier(const char *name) - : type_specifier(ast_type_name), type_name(name), structure(NULL), + : type_name(name), structure(NULL), is_array(false), array_size(NULL), precision(ast_precision_none), is_precision_statement(false) { @@ -478,7 +480,7 @@ public: /** Construct a type specifier from a structure definition */ ast_type_specifier(ast_struct_specifier *s) - : type_specifier(ast_struct), type_name(s->name), structure(s), + : type_name(s->name), structure(s), is_array(false), array_size(NULL), precision(ast_precision_none), is_precision_statement(false) { @@ -493,8 +495,6 @@ public: ir_rvalue *hir(exec_list *, struct _mesa_glsl_parse_state *); - enum ast_types type_specifier; - const char *type_name; ast_struct_specifier *structure; @@ -545,6 +545,12 @@ public: * is used to note these cases when no type is specified. */ int invariant; + + /** + * Flag indicating that these declarators are in a uniform block, + * allowing UBO type qualifiers. + */ + bool ubo_qualifiers_valid; }; @@ -563,7 +569,7 @@ public: struct _mesa_glsl_parse_state *state); ast_fully_specified_type *type; - char *identifier; + const char *identifier; int is_array; ast_expression *array_size; @@ -594,7 +600,7 @@ public: struct _mesa_glsl_parse_state *state); ast_fully_specified_type *return_type; - char *identifier; + const char *identifier; exec_list parameters; @@ -637,13 +643,78 @@ public: class ast_case_label : public ast_node { public: + ast_case_label(ast_expression *test_value); + virtual void print(void) const; + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); /** - * An expression of NULL means 'default'. + * An test value of NULL means 'default'. */ - ast_expression *expression; + ast_expression *test_value; }; + +class ast_case_label_list : public ast_node { +public: + ast_case_label_list(void); + virtual void print(void) const; + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + + /** + * A list of case labels. + */ + exec_list labels; +}; + + +class ast_case_statement : public ast_node { +public: + ast_case_statement(ast_case_label_list *labels); + virtual void print(void) const; + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + + ast_case_label_list *labels; + + /** + * A list of statements. + */ + exec_list stmts; +}; + + +class ast_case_statement_list : public ast_node { +public: + ast_case_statement_list(void); + virtual void print(void) const; + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + + /** + * A list of cases. + */ + exec_list cases; +}; + + +class ast_switch_body : public ast_node { +public: + ast_switch_body(ast_case_statement_list *stmts); + virtual void print(void) const; + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + + ast_case_statement_list *stmts; +}; + + class ast_selection_statement : public ast_node { public: ast_selection_statement(ast_expression *condition, @@ -662,8 +733,18 @@ public: class ast_switch_statement : public ast_node { public: - ast_expression *expression; - exec_list statements; + ast_switch_statement(ast_expression *test_expression, + ast_node *body); + virtual void print(void) const; + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + + ast_expression *test_expression; + ast_node *body; + +protected: + void test_to_hir(exec_list *, struct _mesa_glsl_parse_state *); }; class ast_iteration_statement : public ast_node { @@ -728,6 +809,25 @@ public: ast_function *prototype; ast_compound_statement *body; }; + +class ast_uniform_block : public ast_node { +public: + ast_uniform_block(ast_type_qualifier layout, + const char *block_name, + ast_declarator_list *member_list) + : layout(layout), block_name(block_name) + { + declarations.push_degenerate_list_at_head(&member_list->link); + } + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + + ast_type_qualifier layout; + const char *block_name; + /** List of ast_declarator_list * */ + exec_list declarations; +}; /*@}*/ extern void diff --git a/3rdparty/glsl-optimizer/src/glsl/ast_function.cpp b/3rdparty/glsl-optimizer/src/glsl/ast_function.cpp index 3647e7cc9..1c13a1176 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ast_function.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ast_function.cpp @@ -83,7 +83,7 @@ prototype_string(const glsl_type *return_type, const char *name, const char *comma = ""; foreach_list(node, parameters) { - const ir_instruction *const param = (ir_instruction *) node; + const ir_variable *const param = (ir_variable *) node; ralloc_asprintf_append(&str, "%s%s", comma, param->type->name); comma = ", "; @@ -93,282 +93,393 @@ prototype_string(const glsl_type *return_type, const char *name, return str; } -static glsl_precision precision_from_call (const ir_function_signature* sig, glsl_precision max_prec, glsl_precision first_prec) + +static glsl_precision precision_for_call (const ir_function_signature* sig, glsl_precision max_prec, glsl_precision first_prec) { if (sig->precision != glsl_precision_undefined) return sig->precision; - + // if return type is boolean, treat as lowp if (sig->return_type->base_type == GLSL_TYPE_BOOL) return glsl_precision_low; - + // if it's a built-in texture function, precision comes from sampler (1st param) precision if (sig->is_builtin) { if (strncmp (sig->function_name(), "texture", 7) == 0) return first_prec; - + if (strncmp (sig->function_name(), "shadow", 6) == 0) + return first_prec; } // other built-in: max precision of parameters if (sig->is_builtin) return max_prec; - + // otherwise: undefined - return glsl_precision_undefined; + return glsl_precision_undefined; } +static glsl_precision precision_for_call (const ir_function_signature* sig, exec_list *actual_parameters) +{ + glsl_precision prec_params_max = glsl_precision_undefined; + glsl_precision prec_params_first = glsl_precision_undefined; + int params_counter = 0; + + exec_list_iterator actual_iter = actual_parameters->iterator(); + exec_list_iterator formal_iter = sig->parameters.iterator(); + + while (actual_iter.has_next()) + { + ir_rvalue *actual = (ir_rvalue *) actual_iter.get(); + ir_variable *formal = (ir_variable *) formal_iter.get(); + assert(actual != NULL); + assert(formal != NULL); + glsl_precision param_prec = (glsl_precision)formal->precision; + if (param_prec == glsl_precision_undefined) + param_prec = actual->get_precision(); + prec_params_max = higher_precision (prec_params_max, param_prec); + if (params_counter == 0) + prec_params_first = param_prec; + + actual_iter.next(); + formal_iter.next(); + ++params_counter; + } + + return precision_for_call (sig, prec_params_max, prec_params_first); +} + + +/** + * Verify that 'out' and 'inout' actual parameters are lvalues. Also, verify + * that 'const_in' formal parameters (an extension in our IR) correspond to + * ir_constant actual parameters. + */ +static bool +verify_parameter_modes(_mesa_glsl_parse_state *state, + ir_function_signature *sig, + exec_list &actual_ir_parameters, + exec_list &actual_ast_parameters) +{ + exec_node *actual_ir_node = actual_ir_parameters.head; + exec_node *actual_ast_node = actual_ast_parameters.head; + + foreach_list(formal_node, &sig->parameters) { + /* The lists must be the same length. */ + assert(!actual_ir_node->is_tail_sentinel()); + assert(!actual_ast_node->is_tail_sentinel()); + + const ir_variable *const formal = (ir_variable *) formal_node; + const ir_rvalue *const actual = (ir_rvalue *) actual_ir_node; + const ast_expression *const actual_ast = + exec_node_data(ast_expression, actual_ast_node, link); + + /* FIXME: 'loc' is incorrect (as of 2011-01-21). It is always + * FIXME: 0:0(0). + */ + YYLTYPE loc = actual_ast->get_location(); + + /* Verify that 'const_in' parameters are ir_constants. */ + if (formal->mode == ir_var_const_in && + actual->ir_type != ir_type_constant) { + _mesa_glsl_error(&loc, state, + "parameter `in %s' must be a constant expression", + formal->name); + return false; + } + + /* Verify that 'out' and 'inout' actual parameters are lvalues. */ + if (formal->mode == ir_var_out || formal->mode == ir_var_inout) { + const char *mode = NULL; + switch (formal->mode) { + case ir_var_out: mode = "out"; break; + case ir_var_inout: mode = "inout"; break; + default: assert(false); break; + } + + /* This AST-based check catches errors like f(i++). The IR-based + * is_lvalue() is insufficient because the actual parameter at the + * IR-level is just a temporary value, which is an l-value. + */ + if (actual_ast->non_lvalue_description != NULL) { + _mesa_glsl_error(&loc, state, + "function parameter '%s %s' references a %s", + mode, formal->name, + actual_ast->non_lvalue_description); + return false; + } + + ir_variable *var = actual->variable_referenced(); + if (var) + var->assigned = true; + + if (var && var->read_only) { + _mesa_glsl_error(&loc, state, + "function parameter '%s %s' references the " + "read-only variable '%s'", + mode, formal->name, + actual->variable_referenced()->name); + return false; + } else if (!actual->is_lvalue()) { + _mesa_glsl_error(&loc, state, + "function parameter '%s %s' is not an lvalue", + mode, formal->name); + return false; + } + } + + actual_ir_node = actual_ir_node->next; + actual_ast_node = actual_ast_node->next; + } + return true; +} + +/** + * If a function call is generated, \c call_ir will point to it on exit. + * Otherwise \c call_ir will be set to \c NULL. + */ static ir_rvalue * -match_function_by_name(exec_list *instructions, const char *name, - YYLTYPE *loc, exec_list *actual_parameters, +generate_call(exec_list *instructions, ir_function_signature *sig, + YYLTYPE *loc, exec_list *actual_parameters, + ir_call **call_ir, + struct _mesa_glsl_parse_state *state) +{ + void *ctx = state; + exec_list post_call_conversions; + + *call_ir = NULL; + + /* Perform implicit conversion of arguments. For out parameters, we need + * to place them in a temporary variable and do the conversion after the + * call takes place. Since we haven't emitted the call yet, we'll place + * the post-call conversions in a temporary exec_list, and emit them later. + */ + exec_list_iterator actual_iter = actual_parameters->iterator(); + exec_list_iterator formal_iter = sig->parameters.iterator(); + + while (actual_iter.has_next()) { + ir_rvalue *actual = (ir_rvalue *) actual_iter.get(); + ir_variable *formal = (ir_variable *) formal_iter.get(); + + assert(actual != NULL); + assert(formal != NULL); + + if (formal->type->is_numeric() || formal->type->is_boolean()) { + switch (formal->mode) { + case ir_var_const_in: + case ir_var_in: { + ir_rvalue *converted + = convert_component(actual, formal->type); + actual->replace_with(converted); + break; + } + case ir_var_out: + if (actual->type != formal->type) { + /* To convert an out parameter, we need to create a + * temporary variable to hold the value before conversion, + * and then perform the conversion after the function call + * returns. + * + * This has the effect of transforming code like this: + * + * void f(out int x); + * float value; + * f(value); + * + * Into IR that's equivalent to this: + * + * void f(out int x); + * float value; + * int out_parameter_conversion; + * f(out_parameter_conversion); + * value = float(out_parameter_conversion); + */ + ir_variable *tmp = + new(ctx) ir_variable(formal->type, + "out_parameter_conversion", + ir_var_temporary, precision_for_call(sig,actual_parameters)); + instructions->push_tail(tmp); + ir_dereference_variable *deref_tmp_1 + = new(ctx) ir_dereference_variable(tmp); + ir_dereference_variable *deref_tmp_2 + = new(ctx) ir_dereference_variable(tmp); + ir_rvalue *converted_tmp + = convert_component(deref_tmp_1, actual->type); + ir_assignment *assignment + = new(ctx) ir_assignment(actual, converted_tmp); + post_call_conversions.push_tail(assignment); + actual->replace_with(deref_tmp_2); + } + break; + case ir_var_inout: + /* Inout parameters should never require conversion, since that + * would require an implicit conversion to exist both to and + * from the formal parameter type, and there are no + * bidirectional implicit conversions. + */ + assert (actual->type == formal->type); + break; + default: + assert (!"Illegal formal parameter mode"); + break; + } + } + + actual_iter.next(); + formal_iter.next(); + } + + /* If the function call is a constant expression, don't generate any + * instructions; just generate an ir_constant. + * + * Function calls were first allowed to be constant expressions in GLSL 1.20. + */ + if (state->language_version >= 120) { + ir_constant *value = sig->constant_expression_value(actual_parameters, NULL); + if (value != NULL) { + return value; + } + } + + ir_dereference_variable *deref = NULL; + if (!sig->return_type->is_void()) { + /* Create a new temporary to hold the return value. */ + ir_variable *var; + + var = new(ctx) ir_variable(sig->return_type, + ralloc_asprintf(ctx, "%s_retval", + sig->function_name()), + ir_var_temporary, precision_for_call(sig,actual_parameters)); + instructions->push_tail(var); + + deref = new(ctx) ir_dereference_variable(var); + } + ir_call *call = new(ctx) ir_call(sig, deref, actual_parameters); + instructions->push_tail(call); + + /* Also emit any necessary out-parameter conversions. */ + instructions->append_list(&post_call_conversions); + + return deref ? deref->clone(ctx, NULL) : NULL; +} + +/** + * Given a function name and parameter list, find the matching signature. + */ +static ir_function_signature * +match_function_by_name(const char *name, + exec_list *actual_parameters, struct _mesa_glsl_parse_state *state) { void *ctx = state; ir_function *f = state->symbols->get_function(name); - ir_function_signature *sig; + ir_function_signature *local_sig = NULL; + ir_function_signature *sig = NULL; - sig = f ? f->matching_signature(actual_parameters) : NULL; + /* Is the function hidden by a record type constructor? */ + if (state->symbols->get_type(name)) + goto done; /* no match */ - /* FINISHME: This doesn't handle the case where shader X contains a - * FINISHME: matching signature but shader X + N contains an _exact_ - * FINISHME: matching signature. - */ - if (sig == NULL - && (f == NULL || state->es_shader || !f->has_user_signature()) - && state->symbols->get_type(name) == NULL - && (state->language_version == 110 - || state->symbols->get_variable(name) == NULL)) { - /* The current shader doesn't contain a matching function or signature. - * Before giving up, look for the prototype in the built-in functions. - */ - for (unsigned i = 0; i < state->num_builtins_to_link; i++) { - ir_function *builtin; - builtin = state->builtins_to_link[i]->symbols->get_function(name); - sig = builtin ? builtin->matching_signature(actual_parameters) : NULL; - if (sig != NULL) { - if (f == NULL) { - f = new(ctx) ir_function(name); - state->symbols->add_global_function(f); - emit_function(state, f); - } + /* Is the function hidden by a variable (impossible in 1.10)? */ + if (state->language_version != 110 && state->symbols->get_variable(name)) + goto done; /* no match */ - f->add_signature(sig->clone_prototype(f, NULL)); - break; - } + if (f != NULL) { + /* Look for a match in the local shader. If exact, we're done. */ + bool is_exact = false; + sig = local_sig = f->matching_signature(actual_parameters, &is_exact); + if (is_exact) + goto done; + + if (!state->es_shader && f->has_user_signature()) { + /* In desktop GL, the presence of a user-defined signature hides any + * built-in signatures, so we must ignore them. In contrast, in ES2 + * user-defined signatures add new overloads, so we must proceed. + */ + goto done; } } - glsl_precision prec_params_max = glsl_precision_undefined; - glsl_precision prec_params_first = glsl_precision_undefined; - int params_counter = 0; - exec_list post_call_conversions; + /* Local shader has no exact candidates; check the built-ins. */ + _mesa_glsl_initialize_functions(state); + for (unsigned i = 0; i < state->num_builtins_to_link; i++) { + ir_function *builtin = + state->builtins_to_link[i]->symbols->get_function(name); + if (builtin == NULL) + continue; + bool is_exact = false; + ir_function_signature *builtin_sig = + builtin->matching_signature(actual_parameters, &is_exact); + + if (builtin_sig == NULL) + continue; + + /* If the built-in signature is exact, we can stop. */ + if (is_exact) { + sig = builtin_sig; + goto done; + } + + if (sig == NULL) { + /* We found an inexact match, which is better than nothing. However, + * we should keep searching for an exact match. + */ + sig = builtin_sig; + } + } + +done: if (sig != NULL) { - /* Verify that 'out' and 'inout' actual parameters are lvalues. This - * isn't done in ir_function::matching_signature because that function - * cannot generate the necessary diagnostics. - * - * Also, validate that 'const_in' formal parameters (an extension of our - * IR) correspond to ir_constant actual parameters. - * - * Also, perform implicit conversion of arguments. Note: to implicitly - * convert out parameters, we need to place them in a temporary - * variable, and do the conversion after the call takes place. Since we - * haven't emitted the call yet, we'll place the post-call conversions - * in a temporary exec_list, and emit them later. - */ - exec_list_iterator actual_iter = actual_parameters->iterator(); - exec_list_iterator formal_iter = sig->parameters.iterator(); - - while (actual_iter.has_next()) { - ir_rvalue *actual = (ir_rvalue *) actual_iter.get(); - ir_variable *formal = (ir_variable *) formal_iter.get(); - - assert(actual != NULL); - assert(formal != NULL); - - glsl_precision param_prec = (glsl_precision)formal->precision; - if (param_prec == glsl_precision_undefined) - param_prec = actual->get_precision(); - prec_params_max = higher_precision (prec_params_max, param_prec); - if (params_counter == 0) - prec_params_first = param_prec; - - if (formal->mode == ir_var_const_in && !actual->as_constant()) { - _mesa_glsl_error(loc, state, - "parameter `%s' must be a constant expression", - formal->name); + /* If the match is from a linked built-in shader, import the prototype. */ + if (sig != local_sig) { + if (f == NULL) { + f = new(ctx) ir_function(name); + state->symbols->add_global_function(f); + emit_function(state, f); } - - if ((formal->mode == ir_var_out) - || (formal->mode == ir_var_inout)) { - const char *mode = NULL; - switch (formal->mode) { - case ir_var_out: mode = "out"; break; - case ir_var_inout: mode = "inout"; break; - default: assert(false); break; - } - /* FIXME: 'loc' is incorrect (as of 2011-01-21). It is always - * FIXME: 0:0(0). - */ - if (actual->variable_referenced() - && actual->variable_referenced()->read_only) { - _mesa_glsl_error(loc, state, - "function parameter '%s %s' references the " - "read-only variable '%s'", - mode, formal->name, - actual->variable_referenced()->name); - - } else if (!actual->is_lvalue()) { - _mesa_glsl_error(loc, state, - "function parameter '%s %s' is not an lvalue", - mode, formal->name); - } - } - - if (formal->type->is_numeric() || formal->type->is_boolean()) { - switch (formal->mode) { - case ir_var_in: { - ir_rvalue *converted - = convert_component(actual, formal->type); - actual->replace_with(converted); - break; - } - case ir_var_out: - if (actual->type != formal->type) { - /* To convert an out parameter, we need to create a - * temporary variable to hold the value before conversion, - * and then perform the conversion after the function call - * returns. - * - * This has the effect of transforming code like this: - * - * void f(out int x); - * float value; - * f(value); - * - * Into IR that's equivalent to this: - * - * void f(out int x); - * float value; - * int out_parameter_conversion; - * f(out_parameter_conversion); - * value = float(out_parameter_conversion); - */ - ir_variable *tmp = - new(ctx) ir_variable(formal->type, - "out_parameter_conversion", - ir_var_temporary, (glsl_precision)formal->precision); - instructions->push_tail(tmp); - ir_dereference_variable *deref_tmp_1 - = new(ctx) ir_dereference_variable(tmp); - ir_dereference_variable *deref_tmp_2 - = new(ctx) ir_dereference_variable(tmp); - ir_rvalue *converted_tmp - = convert_component(deref_tmp_1, actual->type); - ir_assignment *assignment - = new(ctx) ir_assignment(actual, converted_tmp); - post_call_conversions.push_tail(assignment); - actual->replace_with(deref_tmp_2); - } - break; - case ir_var_inout: - /* Inout parameters should never require conversion, since that - * would require an implicit conversion to exist both to and - * from the formal parameter type, and there are no - * bidirectional implicit conversions. - */ - assert (actual->type == formal->type); - break; - default: - assert (!"Illegal formal parameter mode"); - break; - } - } - - actual_iter.next(); - formal_iter.next(); - ++params_counter; + f->add_signature(sig->clone_prototype(f, NULL)); } - - glsl_precision call_prec = precision_from_call(sig, prec_params_max, prec_params_first); - - /* Always insert the call in the instruction stream, and return a deref - * of its return val if it returns a value, since we don't know if - * the rvalue is going to be assigned to anything or not. - * - * Also insert any out parameter conversions after the call. - */ - ir_call *call = new(ctx) ir_call(sig, actual_parameters); - ir_dereference_variable *deref; - if (!sig->return_type->is_void()) { - /* If the function call is a constant expression, don't - * generate the instructions to call it; just generate an - * ir_constant representing the constant value. - * - * Function calls can only be constant expressions starting - * in GLSL 1.20. - */ - if (state->language_version >= 120) { - ir_constant *const_val = call->constant_expression_value(); - if (const_val) { - return const_val; - } - } - - ir_variable *var; - - var = new(ctx) ir_variable(sig->return_type, - ralloc_asprintf(ctx, "%s_retval", - sig->function_name()), - ir_var_temporary, call_prec); - instructions->push_tail(var); - call->set_precision (call_prec); - - deref = new(ctx) ir_dereference_variable(var); - ir_assignment *assign = new(ctx) ir_assignment(deref, call, NULL); - instructions->push_tail(assign); - - deref = new(ctx) ir_dereference_variable(var); - } else { - instructions->push_tail(call); - deref = NULL; - } - instructions->append_list(&post_call_conversions); - return deref; - } else { - char *str = prototype_string(NULL, name, actual_parameters); - - _mesa_glsl_error(loc, state, "no matching function for call to `%s'", - str); - ralloc_free(str); - - const char *prefix = "candidates are: "; - - for (int i = -1; i < (int) state->num_builtins_to_link; i++) { - glsl_symbol_table *syms = i >= 0 ? state->builtins_to_link[i]->symbols - : state->symbols; - f = syms->get_function(name); - if (f == NULL) - continue; - - foreach_list (node, &f->signatures) { - ir_function_signature *sig = (ir_function_signature *) node; - - str = prototype_string(sig->return_type, f->name, &sig->parameters); - _mesa_glsl_error(loc, state, "%s%s", prefix, str); - ralloc_free(str); - - prefix = " "; - } - - } - - return ir_call::get_error_instruction(ctx); } + return sig; } +/** + * Raise a "no matching function" error, listing all possible overloads the + * compiler considered so developers can figure out what went wrong. + */ +static void +no_matching_function_error(const char *name, + YYLTYPE *loc, + exec_list *actual_parameters, + _mesa_glsl_parse_state *state) +{ + char *str = prototype_string(NULL, name, actual_parameters); + _mesa_glsl_error(loc, state, "no matching function for call to `%s'", str); + ralloc_free(str); + + const char *prefix = "candidates are: "; + + for (int i = -1; i < (int) state->num_builtins_to_link; i++) { + glsl_symbol_table *syms = i >= 0 ? state->builtins_to_link[i]->symbols + : state->symbols; + ir_function *f = syms->get_function(name); + if (f == NULL) + continue; + + foreach_list (node, &f->signatures) { + ir_function_signature *sig = (ir_function_signature *) node; + + str = prototype_string(sig->return_type, f->name, &sig->parameters); + _mesa_glsl_error(loc, state, "%s%s", prefix, str); + ralloc_free(str); + + prefix = " "; + } + } +} /** * Perform automatic type conversion of constructor parameters @@ -400,8 +511,7 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) result = new(ctx) ir_expression(ir_unop_i2u, src); break; case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_i2u, - new(ctx) ir_expression(ir_unop_f2i, src)); + result = new(ctx) ir_expression(ir_unop_f2u, src); break; case GLSL_TYPE_BOOL: result = new(ctx) ir_expression(ir_unop_i2u, @@ -541,7 +651,7 @@ process_array_constructor(exec_list *instructions, "parameter%s", (constructor_type->length != 0) ? "at least" : "exactly", min_param, (min_param <= 1) ? "" : "s"); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } if (constructor_type->length == 0) { @@ -601,7 +711,7 @@ process_array_constructor(exec_list *instructions, return new(ctx) ir_constant(constructor_type, &actual_parameters); ir_variable *var = new(ctx) ir_variable(constructor_type, "array_ctor", - ir_var_temporary, glsl_precision_undefined); ///@TODO + ir_var_temporary, glsl_precision_undefined); instructions->push_tail(var); int i = 0; @@ -687,7 +797,7 @@ emit_inline_vector_constructor(const glsl_type *type, unsigned ast_precision, ir_rvalue *first_param = (ir_rvalue *)parameters->head; ir_rvalue *rhs = new(ctx) ir_swizzle(first_param, 0, 0, 0, 0, lhs_components); - var->precision = higher_precision ((glsl_precision)var->precision, rhs->get_precision()); + var->precision = higher_precision ((glsl_precision)var->precision, rhs->get_precision()); ir_dereference_variable *lhs = new(ctx) ir_dereference_variable(var); const unsigned mask = (1U << lhs_components) - 1; @@ -854,7 +964,7 @@ assign_to_matrix_column(ir_variable *var, unsigned column, unsigned row_base, * body. */ ir_rvalue * -emit_inline_matrix_constructor(const glsl_type *type, unsigned ast_precision, +emit_inline_matrix_constructor(const glsl_type *type, int ast_precision, exec_list *instructions, exec_list *parameters, void *ctx) @@ -1180,7 +1290,7 @@ ast_function_expression::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "unknown type `%s' (structure name " "may be shadowed by a variable with the same name)", type->type_name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } @@ -1189,14 +1299,14 @@ ast_function_expression::hir(exec_list *instructions, if (constructor_type->is_sampler()) { _mesa_glsl_error(& loc, state, "cannot construct sampler type `%s'", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } if (constructor_type->is_array()) { if (state->language_version <= 110) { _mesa_glsl_error(& loc, state, "array constructors forbidden in GLSL 1.10"); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } return process_array_constructor(instructions, constructor_type, @@ -1227,7 +1337,7 @@ ast_function_expression::hir(exec_list *instructions, "insufficient parameters to constructor " "for `%s'", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } if (apply_implicit_conversion(constructor_type->fields.structure[i].type, @@ -1241,7 +1351,7 @@ ast_function_expression::hir(exec_list *instructions, constructor_type->fields.structure[i].name, ir->type->name, constructor_type->fields.structure[i].type->name); - return ir_call::get_error_instruction(ctx);; + return ir_rvalue::error_value(ctx);; } node = node->next; @@ -1250,7 +1360,7 @@ ast_function_expression::hir(exec_list *instructions, if (!node->is_tail_sentinel()) { _mesa_glsl_error(&loc, state, "too many parameters in constructor " "for `%s'", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } ir_rvalue *const constant = @@ -1264,7 +1374,7 @@ ast_function_expression::hir(exec_list *instructions, } if (!constructor_type->is_numeric() && !constructor_type->is_boolean()) - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); /* Total number of components of the type being constructed. */ const unsigned type_components = constructor_type->components(); @@ -1291,14 +1401,14 @@ ast_function_expression::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "too many parameters to `%s' " "constructor", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } if (!result->type->is_numeric() && !result->type->is_boolean()) { _mesa_glsl_error(& loc, state, "cannot construct `%s' from a " "non-numeric data type", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } /* Count the number of matrix and nonmatrix parameters. This @@ -1323,7 +1433,7 @@ ast_function_expression::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "cannot construct `%s' from a " "matrix in GLSL 1.10", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } /* From page 50 (page 56 of the PDF) of the GLSL 1.50 spec: @@ -1337,7 +1447,7 @@ ast_function_expression::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "for matrix `%s' constructor, " "matrix must be only parameter", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } /* From page 28 (page 34 of the PDF) of the GLSL 1.10 spec: @@ -1351,7 +1461,7 @@ ast_function_expression::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "too few components to construct " "`%s'", constructor_type->name); - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } /* Later, we cast each parameter to the same base type as the @@ -1374,7 +1484,7 @@ ast_function_expression::hir(exec_list *instructions, var->constant_value = matrix->constant_expression_value(); /* Replace the matrix with dereferences of its columns. */ - for (unsigned int i = 0; i < matrix->type->matrix_columns; i++) { + for (int i = 0; i < matrix->type->matrix_columns; i++) { matrix->insert_before(new (ctx) ir_dereference_array(var, new(ctx) ir_constant(i))); } @@ -1432,16 +1542,31 @@ ast_function_expression::hir(exec_list *instructions, } } else { const ast_expression *id = subexpressions[0]; + const char *func_name = id->primary_expression.identifier; YYLTYPE loc = id->get_location(); exec_list actual_parameters; process_parameters(instructions, &actual_parameters, &this->expressions, state); - return match_function_by_name(instructions, - id->primary_expression.identifier, & loc, - &actual_parameters, state); + ir_function_signature *sig = + match_function_by_name(func_name, &actual_parameters, state); + + ir_call *call = NULL; + ir_rvalue *value = NULL; + if (sig == NULL) { + no_matching_function_error(func_name, &loc, &actual_parameters, state); + value = ir_rvalue::error_value(ctx); + } else if (!verify_parameter_modes(state, sig, actual_parameters, this->expressions)) { + /* an error has already been emitted */ + value = ir_rvalue::error_value(ctx); + } else { + value = generate_call(instructions, sig, &loc, &actual_parameters, + &call, state); + } + + return value; } - return ir_call::get_error_instruction(ctx); + return ir_rvalue::error_value(ctx); } diff --git a/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp b/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp index 50efa8c1a..8a3229673 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ast_to_hir.cpp @@ -54,13 +54,17 @@ #include "glsl_parser_extras.h" #include "ast.h" #include "glsl_types.h" +#include "program/hash_table.h" #include "ir.h" +static void +detect_conflicting_assignments(struct _mesa_glsl_parse_state *state, + exec_list *instructions); + void _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) { _mesa_glsl_initialize_variables(instructions, state); - _mesa_glsl_initialize_functions(state); state->symbols->language_version = state->language_version; @@ -87,6 +91,7 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) ast->hir(instructions, state); detect_recursion_unlinked(state, instructions); + detect_conflicting_assignments(state, instructions); state->toplevel_ir = NULL; } @@ -665,30 +670,44 @@ mark_whole_array_access(ir_rvalue *access) ir_rvalue * do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state, + const char *non_lvalue_description, ir_rvalue *lhs, ir_rvalue *rhs, bool is_initializer, YYLTYPE lhs_loc) { void *ctx = state; bool error_emitted = (lhs->type->is_error() || rhs->type->is_error()); + ir_variable *lhs_var = lhs->variable_referenced(); + if (lhs_var) + lhs_var->assigned = true; + if (!error_emitted) { - if (lhs->variable_referenced() != NULL - && lhs->variable_referenced()->read_only) { + if (non_lvalue_description != NULL) { + _mesa_glsl_error(&lhs_loc, state, + "assignment to %s", + non_lvalue_description); + error_emitted = true; + } else if (lhs->variable_referenced() != NULL + && lhs->variable_referenced()->read_only) { _mesa_glsl_error(&lhs_loc, state, "assignment to read-only variable '%s'", lhs->variable_referenced()->name); error_emitted = true; + } else if (state->language_version <= 110 && lhs->type->is_array()) { + /* From page 32 (page 38 of the PDF) of the GLSL 1.10 spec: + * + * "Other binary or unary expressions, non-dereferenced + * arrays, function names, swizzles with repeated fields, + * and constants cannot be l-values." + */ + _mesa_glsl_error(&lhs_loc, state, "whole array assignment is not " + "allowed in GLSL 1.10 or GLSL ES 1.00."); + error_emitted = true; } else if (!lhs->is_lvalue()) { _mesa_glsl_error(& lhs_loc, state, "non-lvalue in assignment"); error_emitted = true; } - - if (state->es_shader && lhs->type->is_array()) { - _mesa_glsl_error(&lhs_loc, state, "whole array assignment is not " - "allowed in GLSL ES 1.00."); - error_emitted = true; - } } ir_rvalue *new_rhs = @@ -723,6 +742,7 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state, rhs->type->array_size()); d->type = var->type; } + mark_whole_array_access(rhs); mark_whole_array_access(lhs); } @@ -752,13 +772,11 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state, ir_var_temporary, precision_from_ir(rhs)); ir_dereference_variable *deref_var = new(ctx) ir_dereference_variable(var); instructions->push_tail(var); - instructions->push_tail(new(ctx) ir_assignment(deref_var, - rhs, - NULL)); + instructions->push_tail(new(ctx) ir_assignment(deref_var, rhs)); deref_var = new(ctx) ir_dereference_variable(var); if (!error_emitted) - instructions->push_tail(new(ctx) ir_assignment(lhs, deref_var, NULL)); + instructions->push_tail(new(ctx) ir_assignment(lhs, deref_var)); return new(ctx) ir_dereference_variable(var); } @@ -775,12 +793,7 @@ get_lvalue_copy(exec_list *instructions, ir_rvalue *lvalue) var->mode = ir_var_auto; instructions->push_tail(new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var), - lvalue, NULL)); - - /* Once we've created this temporary, mark it read only so it's no - * longer considered an lvalue. - */ - var->read_only = true; + lvalue)); return new(ctx) ir_dereference_variable(var); } @@ -905,6 +918,66 @@ get_scalar_boolean_operand(exec_list *instructions, return new(ctx) ir_constant(true); } +/** + * If name refers to a builtin array whose maximum allowed size is less than + * size, report an error and return true. Otherwise return false. + */ +static bool +check_builtin_array_max_size(const char *name, unsigned size, + YYLTYPE loc, struct _mesa_glsl_parse_state *state) +{ + if ((strcmp("gl_TexCoord", name) == 0) + && (size > state->Const.MaxTextureCoords)) { + /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec: + * + * "The size [of gl_TexCoord] can be at most + * gl_MaxTextureCoords." + */ + _mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot " + "be larger than gl_MaxTextureCoords (%u)\n", + state->Const.MaxTextureCoords); + return true; + } else if (strcmp("gl_ClipDistance", name) == 0 + && size > state->Const.MaxClipPlanes) { + /* From section 7.1 (Vertex Shader Special Variables) of the + * GLSL 1.30 spec: + * + * "The gl_ClipDistance array is predeclared as unsized and + * must be sized by the shader either redeclaring it with a + * size or indexing it only with integral constant + * expressions. ... The size can be at most + * gl_MaxClipDistances." + */ + _mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot " + "be larger than gl_MaxClipDistances (%u)\n", + state->Const.MaxClipPlanes); + return true; + } + return false; +} + +/** + * Create the constant 1, of a which is appropriate for incrementing and + * decrementing values of the given GLSL type. For example, if type is vec4, + * this creates a constant value of 1.0 having type float. + * + * If the given type is invalid for increment and decrement operators, return + * a floating point 1--the error will be detected later. + */ +static ir_rvalue * +constant_one_for_inc_dec(void *ctx, const glsl_type *type) +{ + switch (type->base_type) { + case GLSL_TYPE_UINT: + return new(ctx) ir_constant((unsigned) 1); + case GLSL_TYPE_INT: + return new(ctx) ir_constant(1); + default: + case GLSL_TYPE_FLOAT: + return new(ctx) ir_constant(1.0f); + } +} + ir_rvalue * ast_expression::hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) @@ -978,7 +1051,9 @@ ast_expression::hir(exec_list *instructions, op[0] = this->subexpressions[0]->hir(instructions, state); op[1] = this->subexpressions[1]->hir(instructions, state); - result = do_assignment(instructions, state, op[0], op[1], false, + result = do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, + op[0], op[1], false, this->subexpressions[0]->get_location()); error_emitted = result->type->is_error(); break; @@ -1133,7 +1208,7 @@ ast_expression::hir(exec_list *instructions, error_emitted = true; } - type = op[0]->type; + type = error_emitted ? glsl_type::error_type : op[0]->type; result = new(ctx) ir_expression(ir_unop_bit_not, type, op[0], NULL); break; @@ -1144,15 +1219,9 @@ ast_expression::hir(exec_list *instructions, op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1, "RHS", &error_emitted); - ir_constant *op0_const = op[0]->constant_expression_value(); - if (op0_const) { - if (op0_const->value.b[0]) { - instructions->append_list(&rhs_instructions); - result = op[1]; - } else { - result = op0_const; - } - type = glsl_type::bool_type; + if (rhs_instructions.is_empty()) { + result = new(ctx) ir_expression(ir_binop_logic_and, op[0], op[1]); + type = result->type; } else { ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type, "and_tmp", @@ -1165,12 +1234,12 @@ ast_expression::hir(exec_list *instructions, stmt->then_instructions.append_list(&rhs_instructions); ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp); ir_assignment *const then_assign = - new(ctx) ir_assignment(then_deref, op[1], NULL); + new(ctx) ir_assignment(then_deref, op[1]); stmt->then_instructions.push_tail(then_assign); ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp); ir_assignment *const else_assign = - new(ctx) ir_assignment(else_deref, new(ctx) ir_constant(false), NULL); + new(ctx) ir_assignment(else_deref, new(ctx) ir_constant(false)); stmt->else_instructions.push_tail(else_assign); result = new(ctx) ir_dereference_variable(tmp); @@ -1186,14 +1255,9 @@ ast_expression::hir(exec_list *instructions, op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1, "RHS", &error_emitted); - ir_constant *op0_const = op[0]->constant_expression_value(); - if (op0_const) { - if (op0_const->value.b[0]) { - result = op0_const; - } else { - result = op[1]; - } - type = glsl_type::bool_type; + if (rhs_instructions.is_empty()) { + result = new(ctx) ir_expression(ir_binop_logic_or, op[0], op[1]); + type = result->type; } else { ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type, "or_tmp", @@ -1205,13 +1269,13 @@ ast_expression::hir(exec_list *instructions, ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp); ir_assignment *const then_assign = - new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true), NULL); + new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true)); stmt->then_instructions.push_tail(then_assign); stmt->else_instructions.append_list(&rhs_instructions); ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp); ir_assignment *const else_assign = - new(ctx) ir_assignment(else_deref, op[1], NULL); + new(ctx) ir_assignment(else_deref, op[1]); stmt->else_instructions.push_tail(else_assign); result = new(ctx) ir_dereference_variable(tmp); @@ -1259,6 +1323,7 @@ ast_expression::hir(exec_list *instructions, op[0], op[1]); result = do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, op[0]->clone(ctx, NULL), temp_rhs, false, this->subexpressions[0]->get_location()); error_emitted = (op[0]->type->is_error()); @@ -1284,6 +1349,7 @@ ast_expression::hir(exec_list *instructions, op[0], op[1]); result = do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, op[0]->clone(ctx, NULL), temp_rhs, false, this->subexpressions[0]->get_location()); error_emitted = type->is_error(); @@ -1298,8 +1364,9 @@ ast_expression::hir(exec_list *instructions, &loc); ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], type, op[0], op[1]); - result = do_assignment(instructions, state, op[0]->clone(ctx, NULL), - temp_rhs, false, + result = do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, + op[0]->clone(ctx, NULL), temp_rhs, false, this->subexpressions[0]->get_location()); error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); break; @@ -1314,8 +1381,9 @@ ast_expression::hir(exec_list *instructions, state, &loc); ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], type, op[0], op[1]); - result = do_assignment(instructions, state, op[0]->clone(ctx, NULL), - temp_rhs, false, + result = do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, + op[0]->clone(ctx, NULL), temp_rhs, false, this->subexpressions[0]->get_location()); error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); break; @@ -1395,14 +1463,14 @@ ast_expression::hir(exec_list *instructions, ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp); ir_assignment *const then_assign = - new(ctx) ir_assignment(then_deref, op[1], NULL); + new(ctx) ir_assignment(then_deref, op[1]); stmt->then_instructions.push_tail(then_assign); else_instructions.move_nodes_to(& stmt->else_instructions); ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp); ir_assignment *const else_assign = - new(ctx) ir_assignment(else_deref, op[2], NULL); + new(ctx) ir_assignment(else_deref, op[2]); stmt->else_instructions.push_tail(else_assign); result = new(ctx) ir_dereference_variable(tmp); @@ -1412,11 +1480,11 @@ ast_expression::hir(exec_list *instructions, case ast_pre_inc: case ast_pre_dec: { + this->non_lvalue_description = (this->oper == ast_pre_inc) + ? "pre-increment operation" : "pre-decrement operation"; + op[0] = this->subexpressions[0]->hir(instructions, state); - if (op[0]->type->base_type == GLSL_TYPE_FLOAT) - op[1] = new(ctx) ir_constant(1.0f); - else - op[1] = new(ctx) ir_constant(1); + op[1] = constant_one_for_inc_dec(ctx, op[0]->type); type = arithmetic_result_type(op[0], op[1], false, state, & loc); @@ -1425,6 +1493,7 @@ ast_expression::hir(exec_list *instructions, op[0], op[1]); result = do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, op[0]->clone(ctx, NULL), temp_rhs, false, this->subexpressions[0]->get_location()); error_emitted = op[0]->type->is_error(); @@ -1433,11 +1502,10 @@ ast_expression::hir(exec_list *instructions, case ast_post_inc: case ast_post_dec: { + this->non_lvalue_description = (this->oper == ast_post_inc) + ? "post-increment operation" : "post-decrement operation"; op[0] = this->subexpressions[0]->hir(instructions, state); - if (op[0]->type->base_type == GLSL_TYPE_FLOAT) - op[1] = new(ctx) ir_constant(1.0f); - else - op[1] = new(ctx) ir_constant(1); + op[1] = constant_one_for_inc_dec(ctx, op[0]->type); error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); @@ -1453,6 +1521,7 @@ ast_expression::hir(exec_list *instructions, result = get_lvalue_copy(instructions, op[0]->clone(ctx, NULL)); (void)do_assignment(instructions, state, + this->subexpressions[0]->non_lvalue_description, op[0]->clone(ctx, NULL), temp_rhs, false, this->subexpressions[0]->get_location()); @@ -1563,8 +1632,15 @@ ast_expression::hir(exec_list *instructions, * FINISHME: array access limits be added to ir_dereference? */ ir_variable *const v = array->whole_variable_referenced(); - if ((v != NULL) && (unsigned(idx) > v->max_array_access)) + if ((v != NULL) && (unsigned(idx) > v->max_array_access)) { v->max_array_access = idx; + + /* Check whether this access will, as a side effect, implicitly + * cause the size of a built-in array to be too large. + */ + if (check_builtin_array_max_size(v->name, idx+1, loc, state)) + error_emitted = true; + } } } else if (array->type->array_size() == 0) { _mesa_glsl_error(&loc, state, "unsized array index must be constant"); @@ -1636,14 +1712,14 @@ ast_expression::hir(exec_list *instructions, ir_variable *var = state->symbols->get_variable(this->primary_expression.identifier); - result = new(ctx) ir_dereference_variable(var); - if (var != NULL) { var->used = true; + result = new(ctx) ir_dereference_variable(var); } else { _mesa_glsl_error(& loc, state, "`%s' undeclared", this->primary_expression.identifier); + result = ir_rvalue::error_value(ctx); error_emitted = true; } break; @@ -1776,7 +1852,17 @@ process_array_type(YYLTYPE *loc, const glsl_type *base, ast_node *array_size, { unsigned length = 0; - /* FINISHME: Reject delcarations of multidimensional arrays. */ + /* From page 19 (page 25) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + if (base->is_array()) { + _mesa_glsl_error(loc, state, + "invalid array of `%s' (only one-dimensional arrays " + "may be declared)", + base->name); + return glsl_type::error_type; + } if (array_size != NULL) { exec_list dummy_instructions; @@ -1844,7 +1930,8 @@ static void apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, ir_variable *var, struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) + YYLTYPE *loc, + bool ubo_qualifiers_valid) { if (qual->flags.q.invariant) { if (var->used) { @@ -1926,11 +2013,22 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, } if (qual->flags.q.flat) - var->interpolation = ir_var_flat; + var->interpolation = INTERP_QUALIFIER_FLAT; else if (qual->flags.q.noperspective) - var->interpolation = ir_var_noperspective; + var->interpolation = INTERP_QUALIFIER_NOPERSPECTIVE; + else if (qual->flags.q.smooth) + var->interpolation = INTERP_QUALIFIER_SMOOTH; else - var->interpolation = ir_var_smooth; + var->interpolation = INTERP_QUALIFIER_NONE; + + if (var->interpolation != INTERP_QUALIFIER_NONE && + !(state->target == vertex_shader && var->mode == ir_var_out) && + !(state->target == fragment_shader && var->mode == ir_var_in)) { + _mesa_glsl_error(loc, state, + "interpolation qualifier `%s' can only be applied to " + "vertex shader outputs and fragment shader inputs.", + var->interpolation_string()); + } var->pixel_center_integer = qual->flags.q.pixel_center_integer; var->origin_upper_left = qual->flags.q.origin_upper_left; @@ -2001,14 +2099,36 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, } else { var->location = qual->location; } + + if (qual->flags.q.explicit_index) { + /* From the GLSL 4.30 specification, section 4.4.2 (Output + * Layout Qualifiers): + * + * "It is also a compile-time error if a fragment shader + * sets a layout index to less than 0 or greater than 1." + * + * Older specifications don't mandate a behavior; we take + * this as a clarification and always generate the error. + */ + if (qual->index < 0 || qual->index > 1) { + _mesa_glsl_error(loc, state, + "explicit index may only be 0 or 1\n"); + } else { + var->explicit_index = true; + var->index = qual->index; + } + } } + } else if (qual->flags.q.explicit_index) { + _mesa_glsl_error(loc, state, + "explicit index requires explicit location\n"); } /* Does the declaration use the 'layout' keyword? */ const bool uses_layout = qual->flags.q.pixel_center_integer || qual->flags.q.origin_upper_left - || qual->flags.q.explicit_location; + || qual->flags.q.explicit_location; /* no need for index since it relies on location */ /* Does the declaration use the deprecated 'attribute' or 'varying' * keywords? @@ -2026,6 +2146,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, * The following extension do not allow the deprecated keywords: * * GL_AMD_conservative_depth + * GL_ARB_conservative_depth * GL_ARB_gpu_shader5 * GL_ARB_separate_shader_objects * GL_ARB_tesselation_shader @@ -2058,9 +2179,11 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, + qual->flags.q.depth_less + qual->flags.q.depth_unchanged; if (depth_layout_count > 0 - && !state->AMD_conservative_depth_enable) { + && !state->AMD_conservative_depth_enable + && !state->ARB_conservative_depth_enable) { _mesa_glsl_error(loc, state, - "extension GL_AMD_conservative_depth must be enabled " + "extension GL_AMD_conservative_depth or " + "GL_ARB_conservative_depth must be enabled " "to use depth layout qualifiers"); } else if (depth_layout_count > 0 && strcmp(var->name, "gl_FragDepth") != 0) { @@ -2084,8 +2207,21 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, else var->depth_layout = ir_depth_layout_none; - if (var->type->is_array() && state->language_version != 110) { - var->array_lvalue = true; + if (qual->flags.q.std140 || + qual->flags.q.packed || + qual->flags.q.shared) { + _mesa_glsl_error(loc, state, + "uniform block layout qualifiers std140, packed, and " + "shared can only be applied to uniform blocks, not " + "members"); + } + + if (!ubo_qualifiers_valid && + (qual->flags.q.row_major || qual->flags.q.column_major)) { + _mesa_glsl_error(loc, state, + "uniform block layout qualifiers row_major and " + "column_major can only be applied to uniform block " + "members"); } } @@ -2134,18 +2270,9 @@ get_variable_being_redeclared(ir_variable *var, ast_declaration *decl, * FINISHME: required or not. */ - /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec: - * - * "The size [of gl_TexCoord] can be at most - * gl_MaxTextureCoords." - */ const unsigned size = unsigned(var->type->array_size()); - if ((strcmp("gl_TexCoord", var->name) == 0) - && (size > state->Const.MaxTextureCoords)) { - _mesa_glsl_error(& loc, state, "`gl_TexCoord' array size cannot " - "be larger than gl_MaxTextureCoords (%u)\n", - state->Const.MaxTextureCoords); - } else if ((size > 0) && (size <= earlier->max_array_access)) { + check_builtin_array_max_size(var->name, size, loc, state); + if ((size > 0) && (size <= earlier->max_array_access)) { _mesa_glsl_error(& loc, state, "array size must be > %u due to " "previous access", earlier->max_array_access); @@ -2186,7 +2313,8 @@ get_variable_being_redeclared(ir_variable *var, ast_declaration *decl, earlier->interpolation = var->interpolation; /* Layout qualifiers for gl_FragDepth. */ - } else if (state->AMD_conservative_depth_enable + } else if ((state->AMD_conservative_depth_enable || + state->ARB_conservative_depth_enable) && strcmp(var->name, "gl_FragDepth") == 0 && earlier->type == var->type && earlier->mode == var->mode) { @@ -2310,12 +2438,16 @@ process_initializer(ir_variable *var, ast_declaration *decl, const glsl_type *initializer_type; if (!type->qualifier.flags.q.uniform) { result = do_assignment(initializer_instructions, state, + NULL, lhs, rhs, true, type->get_location()); initializer_type = result->type; } else initializer_type = rhs->type; + var->constant_initializer = rhs->constant_expression_value(); + var->has_initializer = true; + /* If the declared variable is an unsized array, it must inherrit * its full type from the initializer. A declaration such as * @@ -2434,14 +2566,32 @@ ast_declarator_list::hir(exec_list *instructions, decl_type = this->type->specifier->glsl_type(& type_name, state); if (this->declarations.is_empty()) { - if (decl_type != NULL) { - /* Warn if this empty declaration is not for declaring a structure. - */ - if (this->type->specifier->structure == NULL) { + /* If there is no structure involved in the program text, there are two + * possible scenarios: + * + * - The program text contained something like 'vec4;'. This is an + * empty declaration. It is valid but weird. Emit a warning. + * + * - The program text contained something like 'S;' and 'S' is not the + * name of a known structure type. This is both invalid and weird. + * Emit an error. + * + * Note that if decl_type is NULL and there is a structure involved, + * there must have been some sort of error with the structure. In this + * case we assume that an error was already generated on this line of + * code for the structure. There is no need to generate an additional, + * confusing error. + */ + assert(this->type->specifier->structure == NULL || decl_type != NULL + || state->error); + if (this->type->specifier->structure == NULL) { + if (decl_type != NULL) { _mesa_glsl_warning(&loc, state, "empty declaration"); + } else { + _mesa_glsl_error(&loc, state, + "invalid type `%s' in empty declaration", + type_name); } - } else { - _mesa_glsl_error(& loc, state, "incomplete declaration"); } } @@ -2469,6 +2619,8 @@ ast_declarator_list::hir(exec_list *instructions, if (decl->is_array) { var_type = process_array_type(&loc, decl_type, decl->array_size, state); + if (var_type->is_error()) + continue; } else { var_type = decl_type; } @@ -2505,7 +2657,7 @@ ast_declarator_list::hir(exec_list *instructions, } apply_type_qualifier_to_variable(& this->type->qualifier, var, state, - & loc); + & loc, this->ubo_qualifiers_valid); apply_precision_to_variable(this->type->specifier, var, state); if (this->type->qualifier.flags.q.invariant) { @@ -2622,7 +2774,7 @@ ast_declarator_list::hir(exec_list *instructions, && state->current_function == NULL && var->type->is_integer() && var->mode == ir_var_out - && var->interpolation != ir_var_flat) { + && var->interpolation != INTERP_QUALIFIER_FLAT) { _mesa_glsl_error(&loc, state, "If a vertex output is an integer, " "then it must be qualified with 'flat'"); @@ -2795,6 +2947,18 @@ ast_declarator_list::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "identifier `%s' uses reserved `gl_' prefix", decl->identifier); + else if (strstr(decl->identifier, "__")) { + /* From page 14 (page 20 of the PDF) of the GLSL 1.10 + * spec: + * + * "In addition, all identifiers containing two + * consecutive underscores (__) are reserved as + * possible future keywords." + */ + _mesa_glsl_error(& loc, state, + "identifier `%s' uses reserved `__' string", + decl->identifier); + } /* Add the variable to the symbol table. Note that the initializer's * IR was already processed earlier (though it hasn't been emitted @@ -2899,7 +3063,7 @@ ast_parameter_declarator::hir(exec_list *instructions, type = process_array_type(&loc, type, this->array_size, state); } - if (type->array_size() == 0) { + if (!type->is_error() && type->array_size() == 0) { _mesa_glsl_error(&loc, state, "arrays passed as parameters must have " "a declared size."); type = glsl_type::error_type; @@ -2911,7 +3075,8 @@ ast_parameter_declarator::hir(exec_list *instructions, /* Apply any specified qualifiers to the parameter declaration. Note that * for function parameters the default mode is 'in'. */ - apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc); + apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc, + false); apply_precision_to_variable(this->type->specifier, var, state); /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec: @@ -2926,6 +3091,26 @@ ast_parameter_declarator::hir(exec_list *instructions, type = glsl_type::error_type; } + /* From page 39 (page 45 of the PDF) of the GLSL 1.10 spec: + * + * "When calling a function, expressions that do not evaluate to + * l-values cannot be passed to parameters declared as out or inout." + * + * From page 32 (page 38 of the PDF) of the GLSL 1.10 spec: + * + * "Other binary or unary expressions, non-dereferenced arrays, + * function names, swizzles with repeated fields, and constants + * cannot be l-values." + * + * So for GLSL 1.10, passing an array as an out or inout parameter is not + * allowed. This restriction is removed in GLSL 1.20, and in GLSL ES. + */ + if ((var->mode == ir_var_inout || var->mode == ir_var_out) + && type->is_array() && state->language_version == 110) { + _mesa_glsl_error(&loc, state, "Arrays cannot be out or inout parameters in GLSL 1.10"); + type = glsl_type::error_type; + } + instructions->push_tail(var); /* Parameter declarations do not have r-values. @@ -2987,6 +3172,12 @@ ast_function::hir(exec_list *instructions, const char *const name = identifier; + /* New functions are always added to the top-level IR instruction stream, + * so this instruction list pointer is ignored. See also emit_function + * (called below). + */ + (void) instructions; + /* From page 21 (page 27 of the PDF) of the GLSL 1.20 spec, * * "Function declarations (prototypes) cannot occur inside of functions; @@ -3259,34 +3450,47 @@ ast_jump_statement::hir(exec_list *instructions, case ast_break: case ast_continue: - /* FINISHME: Handle switch-statements. They cannot contain 'continue', - * FINISHME: and they use a different IR instruction for 'break'. - */ - /* FINISHME: Correctly handle the nesting. If a switch-statement is - * FINISHME: inside a loop, a 'continue' is valid and will bind to the - * FINISHME: loop. - */ - if (state->loop_or_switch_nesting == NULL) { + if (mode == ast_continue && + state->loop_nesting_ast == NULL) { YYLTYPE loc = this->get_location(); _mesa_glsl_error(& loc, state, - "`%s' may only appear in a loop", - (mode == ast_break) ? "break" : "continue"); - } else { - ir_loop *const loop = state->loop_or_switch_nesting->as_loop(); + "continue may only appear in a loop"); + } else if (mode == ast_break && + state->loop_nesting_ast == NULL && + state->switch_state.switch_nesting_ast == NULL) { + YYLTYPE loc = this->get_location(); - /* Inline the for loop expression again, since we don't know - * where near the end of the loop body the normal copy of it + _mesa_glsl_error(& loc, state, + "break may only appear in a loop or a switch"); + } else { + /* For a loop, inline the for loop expression again, + * since we don't know where near the end of + * the loop body the normal copy of it * is going to be placed. */ - if (mode == ast_continue && - state->loop_or_switch_nesting_ast->rest_expression) { - state->loop_or_switch_nesting_ast->rest_expression->hir(instructions, - state); + if (state->loop_nesting_ast != NULL && + mode == ast_continue && + state->loop_nesting_ast->rest_expression) { + state->loop_nesting_ast->rest_expression->hir(instructions, + state); } - if (loop != NULL) { - ir_loop_jump *const jump = + if (state->switch_state.is_switch_innermost && + mode == ast_break) { + /* Force break out of switch by setting is_break switch state. + */ + ir_variable *const is_break_var = state->switch_state.is_break_var; + ir_dereference_variable *const deref_is_break_var = + new(ctx) ir_dereference_variable(is_break_var); + ir_constant *const true_val = new(ctx) ir_constant(true); + ir_assignment *const set_break_var = + new(ctx) ir_assignment(deref_is_break_var, true_val); + + instructions->push_tail(set_break_var); + } + else { + ir_loop_jump *const jump = new(ctx) ir_loop_jump((mode == ast_break) ? ir_loop_jump::jump_break : ir_loop_jump::jump_continue); @@ -3349,6 +3553,256 @@ ast_selection_statement::hir(exec_list *instructions, } +ir_rvalue * +ast_switch_statement::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + void *ctx = state; + + ir_rvalue *const test_expression = + this->test_expression->hir(instructions, state); + + /* From page 66 (page 55 of the PDF) of the GLSL 1.50 spec: + * + * "The type of init-expression in a switch statement must be a + * scalar integer." + */ + if (!test_expression->type->is_scalar() || + !test_expression->type->is_integer()) { + YYLTYPE loc = this->test_expression->get_location(); + + _mesa_glsl_error(& loc, + state, + "switch-statement expression must be scalar " + "integer"); + } + + /* Track the switch-statement nesting in a stack-like manner. + */ + struct glsl_switch_state saved = state->switch_state; + + state->switch_state.is_switch_innermost = true; + state->switch_state.switch_nesting_ast = this; + state->switch_state.labels_ht = hash_table_ctor(0, hash_table_pointer_hash, + hash_table_pointer_compare); + state->switch_state.previous_default = NULL; + + /* Initalize is_fallthru state to false. + */ + ir_rvalue *const is_fallthru_val = new (ctx) ir_constant(false); + state->switch_state.is_fallthru_var = + new(ctx) ir_variable(glsl_type::bool_type, + "switch_is_fallthru_tmp", + ir_var_temporary, glsl_precision_low); + instructions->push_tail(state->switch_state.is_fallthru_var); + + ir_dereference_variable *deref_is_fallthru_var = + new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var); + instructions->push_tail(new(ctx) ir_assignment(deref_is_fallthru_var, + is_fallthru_val)); + + /* Initalize is_break state to false. + */ + ir_rvalue *const is_break_val = new (ctx) ir_constant(false); + state->switch_state.is_break_var = new(ctx) ir_variable(glsl_type::bool_type, + "switch_is_break_tmp", + ir_var_temporary, glsl_precision_low); + instructions->push_tail(state->switch_state.is_break_var); + + ir_dereference_variable *deref_is_break_var = + new(ctx) ir_dereference_variable(state->switch_state.is_break_var); + instructions->push_tail(new(ctx) ir_assignment(deref_is_break_var, + is_break_val)); + + /* Cache test expression. + */ + test_to_hir(instructions, state); + + /* Emit code for body of switch stmt. + */ + body->hir(instructions, state); + + hash_table_dtor(state->switch_state.labels_ht); + + state->switch_state = saved; + + /* Switch statements do not have r-values. */ + return NULL; +} + + +void +ast_switch_statement::test_to_hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + void *ctx = state; + + /* Cache value of test expression. */ + ir_rvalue *const test_val = + test_expression->hir(instructions, + state); + + state->switch_state.test_var = new(ctx) ir_variable(test_val->type, + "switch_test_tmp", + ir_var_temporary, test_val->get_precision()); + ir_dereference_variable *deref_test_var = + new(ctx) ir_dereference_variable(state->switch_state.test_var); + + instructions->push_tail(state->switch_state.test_var); + instructions->push_tail(new(ctx) ir_assignment(deref_test_var, test_val)); +} + + +ir_rvalue * +ast_switch_body::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + if (stmts != NULL) + stmts->hir(instructions, state); + + /* Switch bodies do not have r-values. */ + return NULL; +} + +ir_rvalue * +ast_case_statement_list::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + foreach_list_typed (ast_case_statement, case_stmt, link, & this->cases) + case_stmt->hir(instructions, state); + + /* Case statements do not have r-values. */ + return NULL; +} + +ir_rvalue * +ast_case_statement::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + labels->hir(instructions, state); + + /* Conditionally set fallthru state based on break state. */ + ir_constant *const false_val = new(state) ir_constant(false); + ir_dereference_variable *const deref_is_fallthru_var = + new(state) ir_dereference_variable(state->switch_state.is_fallthru_var); + ir_dereference_variable *const deref_is_break_var = + new(state) ir_dereference_variable(state->switch_state.is_break_var); + ir_assignment *const reset_fallthru_on_break = + new(state) ir_assignment(deref_is_fallthru_var, + false_val, + deref_is_break_var); + instructions->push_tail(reset_fallthru_on_break); + + /* Guard case statements depending on fallthru state. */ + ir_dereference_variable *const deref_fallthru_guard = + new(state) ir_dereference_variable(state->switch_state.is_fallthru_var); + ir_if *const test_fallthru = new(state) ir_if(deref_fallthru_guard); + + foreach_list_typed (ast_node, stmt, link, & this->stmts) + stmt->hir(& test_fallthru->then_instructions, state); + + instructions->push_tail(test_fallthru); + + /* Case statements do not have r-values. */ + return NULL; +} + + +ir_rvalue * +ast_case_label_list::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + foreach_list_typed (ast_case_label, label, link, & this->labels) + label->hir(instructions, state); + + /* Case labels do not have r-values. */ + return NULL; +} + +ir_rvalue * +ast_case_label::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + void *ctx = state; + + ir_dereference_variable *deref_fallthru_var = + new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var); + + ir_rvalue *const true_val = new(ctx) ir_constant(true); + + /* If not default case, ... */ + if (this->test_value != NULL) { + /* Conditionally set fallthru state based on + * comparison of cached test expression value to case label. + */ + ir_rvalue *const label_rval = this->test_value->hir(instructions, state); + ir_constant *label_const = label_rval->constant_expression_value(); + + if (!label_const) { + YYLTYPE loc = this->test_value->get_location(); + + _mesa_glsl_error(& loc, state, + "switch statement case label must be a " + "constant expression"); + + /* Stuff a dummy value in to allow processing to continue. */ + label_const = new(ctx) ir_constant(0); + } else { + ast_expression *previous_label = (ast_expression *) + hash_table_find(state->switch_state.labels_ht, + (void *)(uintptr_t)label_const->value.u[0]); + + if (previous_label) { + YYLTYPE loc = this->test_value->get_location(); + _mesa_glsl_error(& loc, state, + "duplicate case value"); + + loc = previous_label->get_location(); + _mesa_glsl_error(& loc, state, + "this is the previous case label"); + } else { + hash_table_insert(state->switch_state.labels_ht, + this->test_value, + (void *)(uintptr_t)label_const->value.u[0]); + } + } + + ir_dereference_variable *deref_test_var = + new(ctx) ir_dereference_variable(state->switch_state.test_var); + + ir_rvalue *const test_cond = new(ctx) ir_expression(ir_binop_all_equal, + label_const, + deref_test_var); + + ir_assignment *set_fallthru_on_test = + new(ctx) ir_assignment(deref_fallthru_var, + true_val, + test_cond); + + instructions->push_tail(set_fallthru_on_test); + } else { /* default case */ + if (state->switch_state.previous_default) { + YYLTYPE loc = this->get_location(); + _mesa_glsl_error(& loc, state, + "multiple default labels in one switch"); + + loc = state->switch_state.previous_default->get_location(); + _mesa_glsl_error(& loc, state, + "this is the first default label"); + } + state->switch_state.previous_default = this; + + /* Set falltrhu state. */ + ir_assignment *set_fallthru = + new(ctx) ir_assignment(deref_fallthru_var, true_val); + + instructions->push_tail(set_fallthru); + } + + /* Case statements do not have r-values. */ + return NULL; +} + void ast_iteration_statement::condition_to_hir(ir_loop *stmt, struct _mesa_glsl_parse_state *state) @@ -3370,8 +3824,7 @@ ast_iteration_statement::condition_to_hir(ir_loop *stmt, * like 'if (!condition) break;' as the loop termination condition. */ ir_rvalue *const not_cond = - new(ctx) ir_expression(ir_unop_logic_not, glsl_type::bool_type, cond, - NULL); + new(ctx) ir_expression(ir_unop_logic_not, cond); ir_if *const if_stmt = new(ctx) ir_if(not_cond); @@ -3402,13 +3855,16 @@ ast_iteration_statement::hir(exec_list *instructions, ir_loop *const stmt = new(ctx) ir_loop(); instructions->push_tail(stmt); - /* Track the current loop and / or switch-statement nesting. - */ - ir_instruction *const nesting = state->loop_or_switch_nesting; - ast_iteration_statement *nesting_ast = state->loop_or_switch_nesting_ast; + /* Track the current loop nesting. */ + ast_iteration_statement *nesting_ast = state->loop_nesting_ast; - state->loop_or_switch_nesting = stmt; - state->loop_or_switch_nesting_ast = this; + state->loop_nesting_ast = this; + + /* Likewise, indicate that following code is closest to a loop, + * NOT closest to a switch. + */ + bool saved_is_switch_innermost = state->switch_state.is_switch_innermost; + state->switch_state.is_switch_innermost = false; if (mode != ast_do_while) condition_to_hir(stmt, state); @@ -3425,10 +3881,9 @@ ast_iteration_statement::hir(exec_list *instructions, if (mode != ast_do_while) state->symbols->pop_scope(); - /* Restore previous nesting before returning. - */ - state->loop_or_switch_nesting = nesting; - state->loop_or_switch_nesting_ast = nesting_ast; + /* Restore previous nesting before returning. */ + state->loop_nesting_ast = nesting_ast; + state->switch_state.is_switch_innermost = saved_is_switch_innermost; /* Loops do not have r-values. */ @@ -3480,8 +3935,8 @@ ast_type_specifier::hir(exec_list *instructions, "arrays"); return NULL; } - if (this->type_specifier != ast_float - && this->type_specifier != ast_int) { + if (strcmp(this->type_name, "float") != 0 && + strcmp(this->type_name, "int") != 0) { _mesa_glsl_error(&loc, state, "default precision statements apply only to types " "float and int"); @@ -3583,3 +4038,154 @@ ast_struct_specifier::hir(exec_list *instructions, */ return NULL; } + +static struct gl_uniform_block * +get_next_uniform_block(struct _mesa_glsl_parse_state *state) +{ + if (state->num_uniform_blocks >= state->uniform_block_array_size) { + state->uniform_block_array_size *= 2; + if (state->uniform_block_array_size <= 4) + state->uniform_block_array_size = 4; + + state->uniform_blocks = reralloc(state, + state->uniform_blocks, + struct gl_uniform_block, + state->uniform_block_array_size); + } + + memset(&state->uniform_blocks[state->num_uniform_blocks], + 0, sizeof(*state->uniform_blocks)); + return &state->uniform_blocks[state->num_uniform_blocks++]; +} + +ir_rvalue * +ast_uniform_block::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + /* The ast_uniform_block has a list of ast_declarator_lists. We + * need to turn those into ir_variables with an association + * with this uniform block. + */ + struct gl_uniform_block *ubo = get_next_uniform_block(state); + ubo->Name = ralloc_strdup(state->uniform_blocks, this->block_name); + + unsigned int num_variables = 0; + foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) { + foreach_list_const(node, &decl_list->declarations) { + num_variables++; + } + } + + bool block_row_major = this->layout.flags.q.row_major; + + ubo->Uniforms = rzalloc_array(state->uniform_blocks, + struct gl_uniform_buffer_variable, + num_variables); + + foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) { + exec_list declared_variables; + + decl_list->hir(&declared_variables, state); + + foreach_list_const(node, &declared_variables) { + struct ir_variable *var = (ir_variable *)node; + + struct gl_uniform_buffer_variable *ubo_var = + &ubo->Uniforms[ubo->NumUniforms++]; + + var->uniform_block = ubo - state->uniform_blocks; + + ubo_var->Name = ralloc_strdup(state->uniform_blocks, var->name); + ubo_var->Type = var->type; + ubo_var->Buffer = ubo - state->uniform_blocks; + ubo_var->Offset = 0; /* Assigned at link time. */ + + if (var->type->is_matrix() || + (var->type->is_array() && var->type->fields.array->is_matrix())) { + ubo_var->RowMajor = block_row_major; + if (decl_list->type->qualifier.flags.q.row_major) + ubo_var->RowMajor = true; + else if (decl_list->type->qualifier.flags.q.column_major) + ubo_var->RowMajor = false; + } + + /* From the GL_ARB_uniform_buffer_object spec: + * + * "Sampler types are not allowed inside of uniform + * blocks. All other types, arrays, and structures + * allowed for uniforms are allowed within a uniform + * block." + */ + if (var->type->contains_sampler()) { + YYLTYPE loc = decl_list->get_location(); + _mesa_glsl_error(&loc, state, + "Uniform in non-default uniform block contains sampler\n"); + } + } + + instructions->append_list(&declared_variables); + } + + return NULL; +} + +static void +detect_conflicting_assignments(struct _mesa_glsl_parse_state *state, + exec_list *instructions) +{ + bool gl_FragColor_assigned = false; + bool gl_FragData_assigned = false; + bool user_defined_fs_output_assigned = false; + ir_variable *user_defined_fs_output = NULL; + + /* It would be nice to have proper location information. */ + YYLTYPE loc; + memset(&loc, 0, sizeof(loc)); + + foreach_list(node, instructions) { + ir_variable *var = ((ir_instruction *)node)->as_variable(); + + if (!var || !var->assigned) + continue; + + if (strcmp(var->name, "gl_FragColor") == 0) + gl_FragColor_assigned = true; + else if (strcmp(var->name, "gl_FragData") == 0) + gl_FragData_assigned = true; + else if (strncmp(var->name, "gl_", 3) != 0) { + if (state->target == fragment_shader && + (var->mode == ir_var_out || var->mode == ir_var_inout)) { + user_defined_fs_output_assigned = true; + user_defined_fs_output = var; + } + } + } + + /* From the GLSL 1.30 spec: + * + * "If a shader statically assigns a value to gl_FragColor, it + * may not assign a value to any element of gl_FragData. If a + * shader statically writes a value to any element of + * gl_FragData, it may not assign a value to + * gl_FragColor. That is, a shader may assign values to either + * gl_FragColor or gl_FragData, but not both. Multiple shaders + * linked together must also consistently write just one of + * these variables. Similarly, if user declared output + * variables are in use (statically assigned to), then the + * built-in variables gl_FragColor and gl_FragData may not be + * assigned to. These incorrect usages all generate compile + * time errors." + */ + if (gl_FragColor_assigned && gl_FragData_assigned) { + _mesa_glsl_error(&loc, state, "fragment shader writes to both " + "`gl_FragColor' and `gl_FragData'\n"); + } else if (gl_FragColor_assigned && user_defined_fs_output_assigned) { + _mesa_glsl_error(&loc, state, "fragment shader writes to both " + "`gl_FragColor' and `%s'\n", + user_defined_fs_output->name); + } else if (gl_FragData_assigned && user_defined_fs_output_assigned) { + _mesa_glsl_error(&loc, state, "fragment shader writes to both " + "`gl_FragData' and `%s'\n", + user_defined_fs_output->name); + } +} diff --git a/3rdparty/glsl-optimizer/src/glsl/ast_type.cpp b/3rdparty/glsl-optimizer/src/glsl/ast_type.cpp index c680ae5f6..29493e2f6 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ast_type.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ast_type.cpp @@ -29,7 +29,7 @@ extern "C" { void ast_type_specifier::print(void) const { - if (type_specifier == ast_struct) { + if (structure) { structure->print(); } else { printf("%s ", type_name); @@ -46,71 +46,6 @@ ast_type_specifier::print(void) const } } -ast_type_specifier::ast_type_specifier(int specifier) - : type_specifier(ast_types(specifier)), type_name(NULL), structure(NULL), - is_array(false), array_size(NULL), precision(ast_precision_none), - is_precision_statement(false) -{ - static const char *const names[] = { - "void", - "float", - "int", - "uint", - "bool", - "vec2", - "vec3", - "vec4", - "bvec2", - "bvec3", - "bvec4", - "ivec2", - "ivec3", - "ivec4", - "uvec2", - "uvec3", - "uvec4", - "mat2", - "mat2x3", - "mat2x4", - "mat3x2", - "mat3", - "mat3x4", - "mat4x2", - "mat4x3", - "mat4", - "sampler1D", - "sampler2D", - "sampler2DRect", - "sampler3D", - "samplerCube", - "sampler1DShadow", - "sampler2DShadow", - "sampler2DRectShadow", - "samplerCubeShadow", - "sampler1DArray", - "sampler2DArray", - "sampler1DArrayShadow", - "sampler2DArrayShadow", - "isampler1D", - "isampler2D", - "isampler3D", - "isamplerCube", - "isampler1DArray", - "isampler2DArray", - "usampler1D", - "usampler2D", - "usampler3D", - "usamplerCube", - "usampler1DArray", - "usampler2DArray", - - NULL, /* ast_struct */ - NULL /* ast_type_name */ - }; - - type_name = names[specifier]; -} - bool ast_fully_specified_type::has_qualifiers() const { @@ -136,3 +71,48 @@ ast_type_qualifier::interpolation_string() const else return NULL; } + +bool +ast_type_qualifier::merge_qualifier(YYLTYPE *loc, + _mesa_glsl_parse_state *state, + ast_type_qualifier q) +{ + ast_type_qualifier ubo_mat_mask; + ubo_mat_mask.flags.i = 0; + ubo_mat_mask.flags.q.row_major = 1; + ubo_mat_mask.flags.q.column_major = 1; + + ast_type_qualifier ubo_layout_mask; + ubo_layout_mask.flags.i = 0; + ubo_layout_mask.flags.q.std140 = 1; + ubo_layout_mask.flags.q.packed = 1; + ubo_layout_mask.flags.q.shared = 1; + + /* Uniform block layout qualifiers get to overwrite each + * other (rightmost having priority), while all other + * qualifiers currently don't allow duplicates. + */ + + if ((this->flags.i & q.flags.i & ~(ubo_mat_mask.flags.i | + ubo_layout_mask.flags.i)) != 0) { + _mesa_glsl_error(loc, state, + "duplicate layout qualifiers used\n"); + return false; + } + + if ((q.flags.i & ubo_mat_mask.flags.i) != 0) + this->flags.i &= ~ubo_mat_mask.flags.i; + if ((q.flags.i & ubo_layout_mask.flags.i) != 0) + this->flags.i &= ~ubo_layout_mask.flags.i; + + this->flags.i |= q.flags.i; + + if (q.flags.q.explicit_location) + this->location = q.location; + + if (q.flags.q.explicit_index) + this->index = q.index; + + return true; +} + diff --git a/3rdparty/glsl-optimizer/src/glsl/autogen.sh b/3rdparty/glsl-optimizer/src/glsl/autogen.sh deleted file mode 100644 index 904cd6746..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/autogen.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -ORIGDIR=`pwd` -cd $srcdir - -autoreconf -v --install || exit 1 -cd $ORIGDIR || exit $? - -$srcdir/configure --enable-maintainer-mode "$@" diff --git a/3rdparty/glsl-optimizer/src/glsl/builtin_function.cpp b/3rdparty/glsl-optimizer/src/glsl/builtin_function.cpp index d5f6e093b..2d7708068 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtin_function.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/builtin_function.cpp @@ -37,16 +37,19 @@ read_builtins(GLenum target, const char *protos, const char **functions, unsigne { struct gl_context fakeCtx; fakeCtx.API = API_OPENGL; - fakeCtx.Const.GLSLVersion = 130; + fakeCtx.Const.GLSLVersion = 140; fakeCtx.Extensions.ARB_ES2_compatibility = true; + fakeCtx.Const.ForceGLSLExtensionsWarn = false; gl_shader *sh = _mesa_new_shader(NULL, 0, target); struct _mesa_glsl_parse_state *st = new(sh) _mesa_glsl_parse_state(&fakeCtx, target, sh); - st->language_version = 130; - st->symbols->language_version = 130; + st->language_version = 140; + st->symbols->language_version = 140; st->ARB_texture_rectangle_enable = true; st->EXT_texture_array_enable = true; + st->OES_EGL_image_external_enable = true; + st->ARB_shader_bit_encoding_enable = true; _mesa_glsl_initialize_types(st); sh->ir = new(sh) exec_list; @@ -125,23 +128,30 @@ static const char builtin_acos[] = " (signature float\n" " (parameters\n" " (declare (in) float x))\n" - " ((return (expression float - (constant float (1.5707963))\n" - " (call asin ((var_ref x)))))))\n" + " ((declare () float s)\n" + " (call asin (var_ref s) ((var_ref x)))\n" + " (return (expression float - (constant float (1.5707964)) (var_ref s)))))\n" + "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" - " ((return (expression vec2 - (constant float (1.5707963))\n" - " (call asin ((var_ref x)))))))\n" + " ((declare () vec2 s)\n" + " (call asin (var_ref s) ((var_ref x)))\n" + " (return (expression vec2 - (constant float (1.5707964)) (var_ref s)))))\n" + "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" - " ((return (expression vec3 - (constant float (1.5707963))\n" - " (call asin ((var_ref x)))))))\n" + " ((declare () vec3 s)\n" + " (call asin (var_ref s) ((var_ref x)))\n" + " (return (expression vec3 - (constant float (1.5707964)) (var_ref s)))))\n" + "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ((return (expression vec4 - (constant float (1.5707963))\n" - " (call asin ((var_ref x)))))))\n" + " ((declare () vec4 s)\n" + " (call asin (var_ref s) ((var_ref x)))\n" + " (return (expression vec4 - (constant float (1.5707964)) (var_ref s)))))\n" "))\n" "" ; @@ -155,17 +165,17 @@ static const char builtin_acosh[] = " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" - " ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))\n" + " ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant float (1)))))))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" - " ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))\n" + " ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant float (1)))))))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))\n" + " ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant float (1)))))))))\n" "))\n" "" ; @@ -324,22 +334,54 @@ static const char builtin_asinh[] = " (signature float\n" " (parameters\n" " (declare (in) float x))\n" - " ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))\n" + " ((return (expression float *\n" + " (expression float sign (var_ref x))\n" + " (expression float log\n" + " (expression float +\n" + " (expression float abs (var_ref x))\n" + " (expression float sqrt\n" + " (expression float +\n" + " (expression float * (var_ref x) (var_ref x))\n" + " (constant float (1))))))))))\n" "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" - " ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))\n" + " ((return (expression vec2 *\n" + " (expression vec2 sign (var_ref x))\n" + " (expression vec2 log\n" + " (expression vec2 +\n" + " (expression vec2 abs (var_ref x))\n" + " (expression vec2 sqrt\n" + " (expression vec2 +\n" + " (expression vec2 * (var_ref x) (var_ref x))\n" + " (constant float (1))))))))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" - " ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))\n" + " ((return (expression vec3 *\n" + " (expression vec3 sign (var_ref x))\n" + " (expression vec3 log\n" + " (expression vec3 +\n" + " (expression vec3 abs (var_ref x))\n" + " (expression vec3 sqrt\n" + " (expression vec3 +\n" + " (expression vec3 * (var_ref x) (var_ref x))\n" + " (constant float (1))))))))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))\n" + " ((return (expression vec4 *\n" + " (expression vec4 sign (var_ref x))\n" + " (expression vec4 log\n" + " (expression vec4 +\n" + " (expression vec4 abs (var_ref x))\n" + " (expression vec4 sqrt\n" + " (expression vec4 +\n" + " (expression vec4 * (var_ref x) (var_ref x))\n" + " (constant float (1))))))))))\n" "))\n" "" ; @@ -348,50 +390,62 @@ static const char builtin_atan[] = " (signature float\n" " (parameters\n" " (declare (in) float y_over_x))\n" - " ((return (call asin ((expression float *\n" + " ((declare () float s)\n" + " (call asin (var_ref s)\n" + " ((expression float *\n" " (var_ref y_over_x)\n" " (expression float rsq\n" " (expression float +\n" " (expression float *\n" " (var_ref y_over_x)\n" " (var_ref y_over_x))\n" - " (constant float (1.0))))))))))\n" + " (constant float (1.0)))))))\n" + " (return (var_ref s))))\n" "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y_over_x))\n" - " ((return (call asin ((expression vec2 *\n" + " ((declare () vec2 s)\n" + " (call asin (var_ref s)\n" + " ((expression vec2 *\n" " (var_ref y_over_x)\n" " (expression vec2 rsq\n" " (expression vec2 +\n" " (expression vec2 *\n" " (var_ref y_over_x)\n" " (var_ref y_over_x))\n" - " (constant float (1.0))))))))))\n" + " (constant float (1.0)))))))\n" + " (return (var_ref s))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y_over_x))\n" - " ((return (call asin ((expression vec3 *\n" + " ((declare () vec3 s)\n" + " (call asin (var_ref s)\n" + " ((expression vec3 *\n" " (var_ref y_over_x)\n" " (expression vec3 rsq\n" " (expression vec3 +\n" " (expression vec3 *\n" " (var_ref y_over_x)\n" " (var_ref y_over_x))\n" - " (constant float (1.0))))))))))\n" + " (constant float (1.0)))))))\n" + " (return (var_ref s))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y_over_x))\n" - " ((return (call asin ((expression vec4 *\n" + " ((declare () vec4 s)\n" + " (call asin (var_ref s)\n" + " ((expression vec4 *\n" " (var_ref y_over_x)\n" " (expression vec4 rsq\n" " (expression vec4 +\n" " (expression vec4 *\n" " (var_ref y_over_x)\n" " (var_ref y_over_x))\n" - " (constant float (1.0))))))))))\n" + " (constant float (1.0)))))))\n" + " (return (var_ref s))))\n" "\n" " (signature float\n" " (parameters\n" @@ -403,7 +457,7 @@ static const char builtin_atan[] = " (if (expression bool >\n" " (expression float abs (var_ref x))\n" " (expression float * (constant float (1.0e-8)) (expression float abs (var_ref y)))) (\n" - " (assign (x) (var_ref r) (call atan ((expression float / (var_ref y) (var_ref x)))))\n" + " (call atan (var_ref r) ((expression float / (var_ref y) (var_ref x))))\n" " (if (expression bool < (var_ref x) (constant float (0.000000)) ) (\n" " (if (expression bool >= (var_ref y) (constant float (0.000000)) )\n" " ((assign (x) (var_ref r) (expression float + (var_ref r) (constant float (3.141593)))))\n" @@ -428,12 +482,11 @@ static const char builtin_atan[] = " (declare (in) vec2 y)\n" " (declare (in) vec2 x))\n" " ((declare () vec2 r)\n" - " (assign (x) (var_ref r)\n" - " (call atan ((swiz x (var_ref y))\n" - " (swiz x (var_ref x)))))\n" - " (assign (y) (var_ref r)\n" - " (call atan ((swiz y (var_ref y))\n" - " (swiz y (var_ref x)))))\n" + " (declare () float temp)\n" + " (call atan (var_ref temp) ((swiz x (var_ref y)) (swiz x (var_ref x))))\n" + " (assign (x) (var_ref r) (var_ref temp))\n" + " (call atan (var_ref temp) ((swiz y (var_ref y)) (swiz y (var_ref x))))\n" + " (assign (y) (var_ref r) (var_ref temp))\n" " (return (var_ref r))))\n" "\n" " (signature vec3\n" @@ -441,15 +494,13 @@ static const char builtin_atan[] = " (declare (in) vec3 y)\n" " (declare (in) vec3 x))\n" " ((declare () vec3 r)\n" - " (assign (x) (var_ref r)\n" - " (call atan ((swiz x (var_ref y))\n" - " (swiz x (var_ref x)))))\n" - " (assign (y) (var_ref r)\n" - " (call atan ((swiz y (var_ref y))\n" - " (swiz y (var_ref x)))))\n" - " (assign (z) (var_ref r)\n" - " (call atan ((swiz z (var_ref y))\n" - " (swiz z (var_ref x)))))\n" + " (declare () float temp)\n" + " (call atan (var_ref temp) ((swiz x (var_ref y)) (swiz x (var_ref x))))\n" + " (assign (x) (var_ref r) (var_ref temp))\n" + " (call atan (var_ref temp) ((swiz y (var_ref y)) (swiz y (var_ref x))))\n" + " (assign (y) (var_ref r) (var_ref temp))\n" + " (call atan (var_ref temp) ((swiz z (var_ref y)) (swiz z (var_ref x))))\n" + " (assign (z) (var_ref r) (var_ref temp))\n" " (return (var_ref r))))\n" "\n" " (signature vec4\n" @@ -457,19 +508,16 @@ static const char builtin_atan[] = " (declare (in) vec4 y)\n" " (declare (in) vec4 x))\n" " ((declare () vec4 r)\n" - " (assign (x) (var_ref r)\n" - " (call atan ((swiz x (var_ref y))\n" - " (swiz x (var_ref x)))))\n" - " (assign (y) (var_ref r)\n" - " (call atan ((swiz y (var_ref y))\n" - " (swiz y (var_ref x)))))\n" - " (assign (z) (var_ref r)\n" - " (call atan ((swiz z (var_ref y))\n" - " (swiz z (var_ref x)))))\n" - " (assign (w) (var_ref r)\n" - " (call atan ((swiz w (var_ref y))\n" - " (swiz w (var_ref x)))))\n" - " (return (var_ref r)))))\n" + " (declare () float temp)\n" + " (call atan (var_ref temp) ((swiz x (var_ref y)) (swiz x (var_ref x))))\n" + " (assign (x) (var_ref r) (var_ref temp))\n" + " (call atan (var_ref temp) ((swiz y (var_ref y)) (swiz y (var_ref x))))\n" + " (assign (y) (var_ref r) (var_ref temp))\n" + " (call atan (var_ref temp) ((swiz z (var_ref y)) (swiz z (var_ref x))))\n" + " (assign (z) (var_ref r) (var_ref temp))\n" + " (call atan (var_ref temp) ((swiz w (var_ref y)) (swiz w (var_ref x))))\n" + " (assign (w) (var_ref r) (var_ref temp))\n" + " (return (var_ref r))))\n" "\n" "))\n" "" @@ -488,29 +536,29 @@ static const char builtin_atanh[] = " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" - " ((return (expression vec2 * (constant vec2 (0.5))\n" + " ((return (expression vec2 * (constant float (0.5))\n" " (expression vec2 log\n" " (expression vec2 /\n" - " (expression vec2 + (constant vec2 (1)) (var_ref x))\n" - " (expression vec2 - (constant vec2 (1)) (var_ref x))))))))\n" + " (expression vec2 + (constant float (1)) (var_ref x))\n" + " (expression vec2 - (constant float (1)) (var_ref x))))))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" - " ((return (expression vec3 * (constant vec3 (0.5))\n" + " ((return (expression vec3 * (constant float (0.5))\n" " (expression vec3 log\n" " (expression vec3 /\n" - " (expression vec3 + (constant vec3 (1)) (var_ref x))\n" - " (expression vec3 - (constant vec3 (1)) (var_ref x))))))))\n" + " (expression vec3 + (constant float (1)) (var_ref x))\n" + " (expression vec3 - (constant float (1)) (var_ref x))))))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ((return (expression vec4 * (constant vec4 (0.5))\n" + " ((return (expression vec4 * (constant float (0.5))\n" " (expression vec4 log\n" " (expression vec4 /\n" - " (expression vec4 + (constant vec4 (1)) (var_ref x))\n" - " (expression vec4 - (constant vec4 (1)) (var_ref x))))))))\n" + " (expression vec4 + (constant float (1)) (var_ref x))\n" + " (expression vec4 - (constant float (1)) (var_ref x))))))))\n" "))\n" "" ; @@ -545,147 +593,147 @@ static const char builtin_clamp[] = " (declare (in) float arg0)\n" " (declare (in) float arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression float max (expression float min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression float clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 arg0)\n" " (declare (in) vec2 arg1)\n" " (declare (in) vec2 arg2))\n" - " ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression vec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 arg0)\n" " (declare (in) vec3 arg1)\n" " (declare (in) vec3 arg2))\n" - " ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression vec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 arg0)\n" " (declare (in) vec4 arg1)\n" " (declare (in) vec4 arg2))\n" - " ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression vec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 arg0)\n" " (declare (in) float arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression vec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 arg0)\n" " (declare (in) float arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression vec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 arg0)\n" " (declare (in) float arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression vec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature int\n" " (parameters\n" " (declare (in) int arg0)\n" " (declare (in) int arg1)\n" " (declare (in) int arg2))\n" - " ((return (expression int max (expression int min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression int clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature ivec2\n" " (parameters\n" " (declare (in) ivec2 arg0)\n" " (declare (in) ivec2 arg1)\n" " (declare (in) ivec2 arg2))\n" - " ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression ivec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature ivec3\n" " (parameters\n" " (declare (in) ivec3 arg0)\n" " (declare (in) ivec3 arg1)\n" " (declare (in) ivec3 arg2))\n" - " ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression ivec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature ivec4\n" " (parameters\n" " (declare (in) ivec4 arg0)\n" " (declare (in) ivec4 arg1)\n" " (declare (in) ivec4 arg2))\n" - " ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression ivec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature ivec2\n" " (parameters\n" " (declare (in) ivec2 arg0)\n" " (declare (in) int arg1)\n" " (declare (in) int arg2))\n" - " ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression ivec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature ivec3\n" " (parameters\n" " (declare (in) ivec3 arg0)\n" " (declare (in) int arg1)\n" " (declare (in) int arg2))\n" - " ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression ivec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature ivec4\n" " (parameters\n" " (declare (in) ivec4 arg0)\n" " (declare (in) int arg1)\n" " (declare (in) int arg2))\n" - " ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression ivec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uint\n" " (parameters\n" " (declare (in) uint arg0)\n" " (declare (in) uint arg1)\n" " (declare (in) uint arg2))\n" - " ((return (expression uint max (expression uint min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uint clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uvec2\n" " (parameters\n" " (declare (in) uvec2 arg0)\n" " (declare (in) uvec2 arg1)\n" " (declare (in) uvec2 arg2))\n" - " ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uvec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uvec3\n" " (parameters\n" " (declare (in) uvec3 arg0)\n" " (declare (in) uvec3 arg1)\n" " (declare (in) uvec3 arg2))\n" - " ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uvec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uvec4\n" " (parameters\n" " (declare (in) uvec4 arg0)\n" " (declare (in) uvec4 arg1)\n" " (declare (in) uvec4 arg2))\n" - " ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uvec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uvec2\n" " (parameters\n" " (declare (in) uvec2 arg0)\n" " (declare (in) uint arg1)\n" " (declare (in) uint arg2))\n" - " ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uvec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uvec3\n" " (parameters\n" " (declare (in) uvec3 arg0)\n" " (declare (in) uint arg1)\n" " (declare (in) uint arg2))\n" - " ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uvec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature uvec4\n" " (parameters\n" " (declare (in) uvec4 arg0)\n" " (declare (in) uint arg1)\n" " (declare (in) uint arg2))\n" - " ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n" + " ((return (expression uvec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "))\n" "" ; @@ -725,21 +773,21 @@ static const char builtin_cosh[] = " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" - " ((return (expression vec2 * (constant vec2 (0.5))\n" + " ((return (expression vec2 * (constant float (0.5))\n" " (expression vec2 +\n" " (expression vec2 exp (var_ref x))\n" " (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" - " ((return (expression vec3 * (constant vec3 (0.5))\n" + " ((return (expression vec3 * (constant float (0.5))\n" " (expression vec3 +\n" " (expression vec3 exp (var_ref x))\n" " (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ((return (expression vec4 * (constant vec4 (0.5))\n" + " ((return (expression vec4 * (constant float (0.5))\n" " (expression vec4 +\n" " (expression vec4 exp (var_ref x))\n" " (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n" @@ -1056,6 +1104,54 @@ static const char builtin_faceforward[] = "))\n" "" ; +static const char builtin_floatBitsToInt[] = + "((function floatBitsToInt\n" + " (signature int\n" + " (parameters\n" + " (declare (in) float arg))\n" + " ((return (expression int bitcast_f2i (var_ref arg)))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) vec2 arg))\n" + " ((return (expression ivec2 bitcast_f2i (var_ref arg)))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) vec3 arg))\n" + " ((return (expression ivec3 bitcast_f2i (var_ref arg)))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) vec4 arg))\n" + " ((return (expression ivec4 bitcast_f2i (var_ref arg)))))\n" + "))\n" + "" +; +static const char builtin_floatBitsToUint[] = + "((function floatBitsToUint\n" + " (signature uint\n" + " (parameters\n" + " (declare (in) float arg))\n" + " ((return (expression uint bitcast_f2u (var_ref arg)))))\n" + "\n" + " (signature uvec2\n" + " (parameters\n" + " (declare (in) vec2 arg))\n" + " ((return (expression uvec2 bitcast_f2u (var_ref arg)))))\n" + "\n" + " (signature uvec3\n" + " (parameters\n" + " (declare (in) vec3 arg))\n" + " ((return (expression uvec3 bitcast_f2u (var_ref arg)))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) vec4 arg))\n" + " ((return (expression uvec4 bitcast_f2u (var_ref arg)))))\n" + "))\n" + "" +; static const char builtin_floor[] = "((function floor\n" " (signature float\n" @@ -1265,6 +1361,227 @@ static const char builtin_greaterThanEqual[] = "))\n" "" ; +static const char builtin_intBitsToFloat[] = + "((function intBitsToFloat\n" + " (signature float\n" + " (parameters\n" + " (declare (in) int arg))\n" + " ((return (expression float bitcast_i2f (var_ref arg)))))\n" + "\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) ivec2 arg))\n" + " ((return (expression vec2 bitcast_i2f (var_ref arg)))))\n" + "\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) ivec3 arg))\n" + " ((return (expression vec3 bitcast_i2f (var_ref arg)))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) ivec4 arg))\n" + " ((return (expression vec4 bitcast_i2f (var_ref arg)))))\n" + "))\n" + "" +; +static const char builtin_inverse[] = + "(\n" + "(function inverse\n" + " (signature mat2\n" + " (parameters\n" + " (declare (in) mat2 m))\n" + " (\n" + " (declare () float det)\n" + " (declare () mat2 adj)\n" + " (declare (temporary) float assignment_tmp)\n" + " (assign (x) (var_ref assignment_tmp) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (0))) (var_ref assignment_tmp)) \n" + " (declare (temporary) float assignment_tmp@2)\n" + " (assign (x) (var_ref assignment_tmp@2) (expression float neg (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (1))) (var_ref assignment_tmp@2)) \n" + " (declare (temporary) float assignment_tmp@3)\n" + " (assign (x) (var_ref assignment_tmp@3) (expression float neg (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (0))) (var_ref assignment_tmp@3)) \n" + " (declare (temporary) float assignment_tmp@4)\n" + " (assign (x) (var_ref assignment_tmp@4) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (1))) (var_ref assignment_tmp@4)) \n" + " (declare (temporary) float assignment_tmp@5)\n" + " (assign (x) (var_ref assignment_tmp@5) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1)))))) \n" + " (assign (x) (var_ref det) (var_ref assignment_tmp@5)) \n" + " (return (expression mat2 / (var_ref adj) (var_ref det)))))\n" + " (signature mat3\n" + " (parameters\n" + " (declare (in) mat3 m))\n" + " (\n" + " (declare () float det)\n" + " (declare () mat3 adj)\n" + " (declare (temporary) float assignment_tmp)\n" + " (assign (x) (var_ref assignment_tmp) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (0))) (var_ref assignment_tmp)) \n" + " (declare (temporary) float assignment_tmp@6)\n" + " (assign (x) (var_ref assignment_tmp@6) (expression float neg (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (0))) (var_ref assignment_tmp@6)) \n" + " (declare (temporary) float assignment_tmp@7)\n" + " (assign (x) (var_ref assignment_tmp@7) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1)))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (0))) (var_ref assignment_tmp@7)) \n" + " (declare (temporary) float assignment_tmp@8)\n" + " (assign (x) (var_ref assignment_tmp@8) (expression float neg (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (1))) (var_ref assignment_tmp@8)) \n" + " (declare (temporary) float assignment_tmp@9)\n" + " (assign (x) (var_ref assignment_tmp@9) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2)))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (1))) (var_ref assignment_tmp@9)) \n" + " (declare (temporary) float assignment_tmp@10)\n" + " (assign (x) (var_ref assignment_tmp@10) (expression float neg (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (1))) (var_ref assignment_tmp@10)) \n" + " (declare (temporary) float assignment_tmp@11)\n" + " (assign (x) (var_ref assignment_tmp@11) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2)))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (2))) (var_ref assignment_tmp@11)) \n" + " (declare (temporary) float assignment_tmp@12)\n" + " (assign (x) (var_ref assignment_tmp@12) (expression float neg (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (2))) (var_ref assignment_tmp@12)) \n" + " (declare (temporary) float assignment_tmp@13)\n" + " (assign (x) (var_ref assignment_tmp@13) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1)))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (2))) (var_ref assignment_tmp@13)) \n" + " (declare (temporary) float assignment_tmp@14)\n" + " (assign (x) (var_ref assignment_tmp@14) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1)))))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))))))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0)))))))) \n" + " (assign (x) (var_ref det) (var_ref assignment_tmp@14)) \n" + " (return (expression mat3 / (var_ref adj) (var_ref det)))))\n" + " (signature mat4\n" + " (parameters\n" + " (declare (in) mat4 m))\n" + " (\n" + " (declare () float det)\n" + " (declare () mat4 adj)\n" + " (declare () float SubFactor18)\n" + " (declare () float SubFactor17)\n" + " (declare () float SubFactor16)\n" + " (declare () float SubFactor15)\n" + " (declare () float SubFactor14)\n" + " (declare () float SubFactor13)\n" + " (declare () float SubFactor12)\n" + " (declare () float SubFactor11)\n" + " (declare () float SubFactor10)\n" + " (declare () float SubFactor09)\n" + " (declare () float SubFactor08)\n" + " (declare () float SubFactor07)\n" + " (declare () float SubFactor06)\n" + " (declare () float SubFactor05)\n" + " (declare () float SubFactor04)\n" + " (declare () float SubFactor03)\n" + " (declare () float SubFactor02)\n" + " (declare () float SubFactor01)\n" + " (declare () float SubFactor00)\n" + " (declare (temporary) float assignment_tmp)\n" + " (assign (x) (var_ref assignment_tmp) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor00) (var_ref assignment_tmp)) \n" + " (declare (temporary) float assignment_tmp@15)\n" + " (assign (x) (var_ref assignment_tmp@15) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor01) (var_ref assignment_tmp@15)) \n" + " (declare (temporary) float assignment_tmp@16)\n" + " (assign (x) (var_ref assignment_tmp@16) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))))) \n" + " (assign (x) (var_ref SubFactor02) (var_ref assignment_tmp@16)) \n" + " (declare (temporary) float assignment_tmp@17)\n" + " (assign (x) (var_ref assignment_tmp@17) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor03) (var_ref assignment_tmp@17)) \n" + " (declare (temporary) float assignment_tmp@18)\n" + " (assign (x) (var_ref assignment_tmp@18) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))))) \n" + " (assign (x) (var_ref SubFactor04) (var_ref assignment_tmp@18)) \n" + " (declare (temporary) float assignment_tmp@19)\n" + " (assign (x) (var_ref assignment_tmp@19) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1)))))) \n" + " (assign (x) (var_ref SubFactor05) (var_ref assignment_tmp@19)) \n" + " (declare (temporary) float assignment_tmp@20)\n" + " (assign (x) (var_ref assignment_tmp@20) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor06) (var_ref assignment_tmp@20)) \n" + " (declare (temporary) float assignment_tmp@21)\n" + " (assign (x) (var_ref assignment_tmp@21) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor07) (var_ref assignment_tmp@21)) \n" + " (declare (temporary) float assignment_tmp@22)\n" + " (assign (x) (var_ref assignment_tmp@22) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))))) \n" + " (assign (x) (var_ref SubFactor08) (var_ref assignment_tmp@22)) \n" + " (declare (temporary) float assignment_tmp@23)\n" + " (assign (x) (var_ref assignment_tmp@23) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor09) (var_ref assignment_tmp@23)) \n" + " (declare (temporary) float assignment_tmp@24)\n" + " (assign (x) (var_ref assignment_tmp@24) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))))) \n" + " (assign (x) (var_ref SubFactor10) (var_ref assignment_tmp@24)) \n" + " (declare (temporary) float assignment_tmp@25)\n" + " (assign (x) (var_ref assignment_tmp@25) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor11) (var_ref assignment_tmp@25)) \n" + " (declare (temporary) float assignment_tmp@26)\n" + " (assign (x) (var_ref assignment_tmp@26) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (3))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1)))))) \n" + " (assign (x) (var_ref SubFactor12) (var_ref assignment_tmp@26)) \n" + " (declare (temporary) float assignment_tmp@27)\n" + " (assign (x) (var_ref assignment_tmp@27) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor13) (var_ref assignment_tmp@27)) \n" + " (declare (temporary) float assignment_tmp@28)\n" + " (assign (x) (var_ref assignment_tmp@28) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor14) (var_ref assignment_tmp@28)) \n" + " (declare (temporary) float assignment_tmp@29)\n" + " (assign (x) (var_ref assignment_tmp@29) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))))) \n" + " (assign (x) (var_ref SubFactor15) (var_ref assignment_tmp@29)) \n" + " (declare (temporary) float assignment_tmp@30)\n" + " (assign (x) (var_ref assignment_tmp@30) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (3)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3)))))) \n" + " (assign (x) (var_ref SubFactor16) (var_ref assignment_tmp@30)) \n" + " (declare (temporary) float assignment_tmp@31)\n" + " (assign (x) (var_ref assignment_tmp@31) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (2)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2)))))) \n" + " (assign (x) (var_ref SubFactor17) (var_ref assignment_tmp@31)) \n" + " (declare (temporary) float assignment_tmp@32)\n" + " (assign (x) (var_ref assignment_tmp@32) (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (1)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (2))) (constant int (0))) (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1)))))) \n" + " (assign (x) (var_ref SubFactor18) (var_ref assignment_tmp@32)) \n" + " (declare (temporary) float assignment_tmp@33)\n" + " (assign (x) (var_ref assignment_tmp@33) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (var_ref SubFactor00)) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (var_ref SubFactor01))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3))) (var_ref SubFactor02)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (0))) (var_ref assignment_tmp@33)) \n" + " (declare (temporary) float assignment_tmp@34)\n" + " (assign (x) (var_ref assignment_tmp@34) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (var_ref SubFactor00)) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (var_ref SubFactor03))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3))) (var_ref SubFactor04))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (0))) (var_ref assignment_tmp@34)) \n" + " (declare (temporary) float assignment_tmp@35)\n" + " (assign (x) (var_ref assignment_tmp@35) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (var_ref SubFactor01)) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (var_ref SubFactor03))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (3))) (var_ref SubFactor05)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (0))) (var_ref assignment_tmp@35)) \n" + " (declare (temporary) float assignment_tmp@36)\n" + " (assign (x) (var_ref assignment_tmp@36) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (0))) (var_ref SubFactor02)) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (1))) (var_ref SubFactor04))) (expression float * (array_ref (array_ref (var_ref m) (constant int (1))) (constant int (2))) (var_ref SubFactor05))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (3))) (constant int (0))) (var_ref assignment_tmp@36)) \n" + " (declare (temporary) float assignment_tmp@37)\n" + " (assign (x) (var_ref assignment_tmp@37) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor00)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor01))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor02))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (1))) (var_ref assignment_tmp@37)) \n" + " (declare (temporary) float assignment_tmp@38)\n" + " (assign (x) (var_ref assignment_tmp@38) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor00)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor03))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor04)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (1))) (var_ref assignment_tmp@38)) \n" + " (declare (temporary) float assignment_tmp@39)\n" + " (assign (x) (var_ref assignment_tmp@39) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor01)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor03))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor05))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (1))) (var_ref assignment_tmp@39)) \n" + " (declare (temporary) float assignment_tmp@40)\n" + " (assign (x) (var_ref assignment_tmp@40) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor02)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor04))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor05)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (3))) (constant int (1))) (var_ref assignment_tmp@40)) \n" + " (declare (temporary) float assignment_tmp@41)\n" + " (assign (x) (var_ref assignment_tmp@41) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor06)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor07))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor08)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (2))) (var_ref assignment_tmp@41)) \n" + " (declare (temporary) float assignment_tmp@42)\n" + " (assign (x) (var_ref assignment_tmp@42) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor06)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor09))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor10))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (2))) (var_ref assignment_tmp@42)) \n" + " (declare (temporary) float assignment_tmp@43)\n" + " (assign (x) (var_ref assignment_tmp@43) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor11)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor09))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor12)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (2))) (var_ref assignment_tmp@43)) \n" + " (declare (temporary) float assignment_tmp@44)\n" + " (assign (x) (var_ref assignment_tmp@44) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor08)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor10))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor12))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (3))) (constant int (2))) (var_ref assignment_tmp@44)) \n" + " (declare (temporary) float assignment_tmp@45)\n" + " (assign (x) (var_ref assignment_tmp@45) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor13)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor14))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor15))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (3))) (var_ref assignment_tmp@45)) \n" + " (declare (temporary) float assignment_tmp@46)\n" + " (assign (x) (var_ref assignment_tmp@46) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor13)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor16))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor17)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (3))) (var_ref assignment_tmp@46)) \n" + " (declare (temporary) float assignment_tmp@47)\n" + " (assign (x) (var_ref assignment_tmp@47) (expression float neg (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor14)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor16))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (var_ref SubFactor18))))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (3))) (var_ref assignment_tmp@47)) \n" + " (declare (temporary) float assignment_tmp@48)\n" + " (assign (x) (var_ref assignment_tmp@48) (expression float + (expression float - (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (var_ref SubFactor15)) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (var_ref SubFactor17))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (var_ref SubFactor18)))) \n" + " (assign (x) (array_ref (array_ref (var_ref adj) (constant int (3))) (constant int (3))) (var_ref assignment_tmp@48)) \n" + " (declare (temporary) float assignment_tmp@49)\n" + " (assign (x) (var_ref assignment_tmp@49) (expression float + (expression float + (expression float + (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (0))) (array_ref (array_ref (var_ref adj) (constant int (0))) (constant int (0)))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (1))) (array_ref (array_ref (var_ref adj) (constant int (1))) (constant int (0))))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (2))) (array_ref (array_ref (var_ref adj) (constant int (2))) (constant int (0))))) (expression float * (array_ref (array_ref (var_ref m) (constant int (0))) (constant int (3))) (array_ref (array_ref (var_ref adj) (constant int (3))) (constant int (0)))))) \n" + " (assign (x) (var_ref det) (var_ref assignment_tmp@49)) \n" + " (return (expression mat4 / (var_ref adj) (var_ref det)))))))" +; static const char builtin_inversesqrt[] = "((function inversesqrt\n" " (signature float\n" @@ -1289,6 +1606,46 @@ static const char builtin_inversesqrt[] = "))\n" "" ; +static const char builtin_isinf[] = + "((function isinf\n" + " (signature bool\n" + " (parameters\n" + " (declare (in) float x))\n" + " ((return (expression bool == (expression float abs (var_ref x)) (constant float (+INF))))))\n" + " (signature bvec2\n" + " (parameters\n" + " (declare (in) vec2 x))\n" + " ((return (expression bvec2 == (expression vec2 abs (var_ref x)) (constant vec2 (+INF +INF))))))\n" + " (signature bvec3\n" + " (parameters\n" + " (declare (in) vec3 x))\n" + " ((return (expression bvec3 == (expression vec3 abs (var_ref x)) (constant vec3 (+INF +INF +INF))))))\n" + " (signature bvec4\n" + " (parameters\n" + " (declare (in) vec4 x))\n" + " ((return (expression bvec4 == (expression vec4 abs (var_ref x)) (constant vec4 (+INF +INF +INF +INF))))))))\n" + "" +; +static const char builtin_isnan[] = + "((function isnan\n" + " (signature bool\n" + " (parameters\n" + " (declare (in) float x))\n" + " ((return (expression bool != (var_ref x) (var_ref x)))))\n" + " (signature bvec2\n" + " (parameters\n" + " (declare (in) vec2 x))\n" + " ((return (expression bvec2 != (var_ref x) (var_ref x)))))\n" + " (signature bvec3\n" + " (parameters\n" + " (declare (in) vec3 x))\n" + " ((return (expression bvec3 != (var_ref x) (var_ref x)))))\n" + " (signature bvec4\n" + " (parameters\n" + " (declare (in) vec4 x))\n" + " ((return (expression bvec4 != (var_ref x) (var_ref x)))))))\n" + "" +; static const char builtin_length[] = "((function length\n" " (signature float\n" @@ -1838,56 +2195,56 @@ static const char builtin_mix[] = " (declare (in) float arg0)\n" " (declare (in) float arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression float + (expression float * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression float * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression float mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 arg0)\n" " (declare (in) vec2 arg1)\n" " (declare (in) vec2 arg2))\n" - " ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression vec2 - (constant float (1.000000)) (var_ref arg2))) (expression vec2 * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression vec2 mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 arg0)\n" " (declare (in) vec3 arg1)\n" " (declare (in) vec3 arg2))\n" - " ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression vec3 - (constant float (1.000000)) (var_ref arg2))) (expression vec3 * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression vec3 mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 arg0)\n" " (declare (in) vec4 arg1)\n" " (declare (in) vec4 arg2))\n" - " ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression vec4 - (constant float (1.000000)) (var_ref arg2))) (expression vec4 * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression vec4 mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 arg0)\n" " (declare (in) vec2 arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression vec2 * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression vec2 mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 arg0)\n" " (declare (in) vec3 arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression vec3 * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression vec3 mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 arg0)\n" " (declare (in) vec4 arg1)\n" " (declare (in) float arg2))\n" - " ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression vec4 * (var_ref arg1) (var_ref arg2))))))\n" + " ((return (expression vec4 mix (var_ref arg0) (var_ref arg1) (var_ref arg2)))))\n" "\n" " (signature float\n" " (parameters\n" " (declare (in) float v1)\n" " (declare (in) float v2)\n" " (declare (in) bool a))\n" - " ((assign (var_ref a) (var_ref v1) (var_ref v2))\n" + " ((assign (var_ref a) (x) (var_ref v1) (var_ref v2))\n" " (return (var_ref v1))))\n" "\n" " (signature vec2\n" @@ -2256,9 +2613,9 @@ static const char builtin_noise4[] = " (assign (x) (var_ref _p) (expression float + (var_ref p) (constant float (1559.0))) )\n" "\n" " (assign (x) (var_ref _x) (expression float noise(var_ref p)))\n" - " (assign (x) (var_ref _y) (expression float noise(expression float + (var_ref p) (constant float (601.0 313.0 29.0 277.0)))))\n" + " (assign (x) (var_ref _y) (expression float noise(expression float + (var_ref p) (constant float (601.0)))))\n" " (assign (x) (var_ref _z) (expression float noise(var_ref _p)))\n" - " (assign (x) (var_ref _w) (expression float noise(expression float + (var_ref _p) (constant float (601.0 313.0 29.0 277.0)))))\n" + " (assign (x) (var_ref _w) (expression float noise(expression float + (var_ref _p) (constant float (601.0)))))\n" "\n" " (assign (x) (var_ref _r) (var_ref _x))\n" " (assign (y) (var_ref _r) (var_ref _y))\n" @@ -2279,17 +2636,17 @@ static const char builtin_normalize[] = " (signature vec2\n" " (parameters\n" " (declare (in) vec2 arg0))\n" - " ((return (expression vec2 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n" + " ((return (expression vec2 normalize (var_ref arg0)))))\n" "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 arg0))\n" - " ((return (expression vec3 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n" + " ((return (expression vec3 normalize (var_ref arg0)))))\n" "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 arg0))\n" - " ((return (expression vec4 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n" + " ((return (expression vec4 normalize (var_ref arg0)))))\n" "))\n" "" ; @@ -2753,16 +3110,16 @@ static const char builtin_shadow1D[] = "((function shadow1D\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -2771,16 +3128,16 @@ static const char builtin_shadow1DArray[] = "((function shadow1DArray\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -2789,10 +3146,10 @@ static const char builtin_shadow1DArrayLod[] = "((function shadow1DArrayLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -2801,11 +3158,11 @@ static const char builtin_shadow1DGradARB[] = "((function shadow1DGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -2814,10 +3171,10 @@ static const char builtin_shadow1DLod[] = "((function shadow1DLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -2826,16 +3183,16 @@ static const char builtin_shadow1DProj[] = "((function shadow1DProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -2844,11 +3201,11 @@ static const char builtin_shadow1DProjGradARB[] = "((function shadow1DProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -2857,10 +3214,10 @@ static const char builtin_shadow1DProjLod[] = "((function shadow1DProjLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -2869,16 +3226,16 @@ static const char builtin_shadow2D[] = "((function shadow2D\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -2887,9 +3244,20 @@ static const char builtin_shadow2DArray[] = "((function shadow2DArray\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArrayShadow sampler)\n" + " (declare (in) sampler2DArrayShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz w (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + "))\n" + "" +; +static const char builtin_shadow2DEXT[] = + "((function shadow2DEXT\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) vec3 P) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -2898,11 +3266,11 @@ static const char builtin_shadow2DGradARB[] = "((function shadow2DGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -2911,10 +3279,10 @@ static const char builtin_shadow2DLod[] = "((function shadow2DLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -2923,16 +3291,27 @@ static const char builtin_shadow2DProj[] = "((function shadow2DProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + "))\n" + "" +; +static const char builtin_shadow2DProjEXT[] = + "((function shadow2DProjEXT\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) vec4 P) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -2941,11 +3320,11 @@ static const char builtin_shadow2DProjGradARB[] = "((function shadow2DProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -2954,10 +3333,10 @@ static const char builtin_shadow2DProjLod[] = "((function shadow2DProjLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -2966,9 +3345,9 @@ static const char builtin_shadow2DRect[] = "((function shadow2DRect\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -2977,11 +3356,11 @@ static const char builtin_shadow2DRectGradARB[] = "((function shadow2DRectGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -2990,9 +3369,9 @@ static const char builtin_shadow2DRectProj[] = "((function shadow2DRectProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -3001,11 +3380,11 @@ static const char builtin_shadow2DRectProjGradARB[] = "((function shadow2DRectProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -3091,21 +3470,21 @@ static const char builtin_sinh[] = " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" - " ((return (expression vec2 * (constant vec2 (0.5))\n" + " ((return (expression vec2 * (constant float (0.5))\n" " (expression vec2 -\n" " (expression vec2 exp (var_ref x))\n" " (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" - " ((return (expression vec3 * (constant vec3 (0.5))\n" + " ((return (expression vec3 * (constant float (0.5))\n" " (expression vec3 -\n" " (expression vec3 exp (var_ref x))\n" " (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ((return (expression vec4 * (constant vec4 (0.5))\n" + " ((return (expression vec4 * (constant float (0.5))\n" " (expression vec4 -\n" " (expression vec4 exp (var_ref x))\n" " (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n" @@ -3383,109 +3762,151 @@ static const char builtin_texelFetch[] = "((function texelFetch\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) int P) \n" " (declare (in) int lod) )\n" " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) int P) \n" " (declare (in) int lod) )\n" " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) int P) \n" " (declare (in) int lod) )\n" " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) )\n" " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) )\n" " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) )\n" " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) )\n" " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) )\n" " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) )\n" " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) ivec2 P) )\n" + " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (constant int (0))\n" + "))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) ivec2 P) )\n" + " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (constant int (0))\n" + "))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) ivec2 P) )\n" + " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (constant int (0))\n" + "))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) )\n" " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) )\n" " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) )\n" " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) )\n" " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) )\n" " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) )\n" " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerBuffer sampler) \n" + " (declare (in) int P) )\n" + " ((return (txf vec4 (var_ref sampler) (var_ref P) 0 (constant int (0))\n" + "))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isamplerBuffer sampler) \n" + " (declare (in) int P) )\n" + " ((return (txf ivec4 (var_ref sampler) (var_ref P) 0 (constant int (0))\n" + "))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usamplerBuffer sampler) \n" + " (declare (in) int P) )\n" + " ((return (txf uvec4 (var_ref sampler) (var_ref P) 0 (constant int (0))\n" + "))))\n" + "\n" "))\n" "" ; @@ -3493,7 +3914,7 @@ static const char builtin_texelFetchOffset[] = "((function texelFetchOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) int P) \n" " (declare (in) int lod) \n" " (declare (const_in) int offset) )\n" @@ -3501,7 +3922,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) int P) \n" " (declare (in) int lod) \n" " (declare (const_in) int offset) )\n" @@ -3509,7 +3930,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) int P) \n" " (declare (in) int lod) \n" " (declare (const_in) int offset) )\n" @@ -3517,7 +3938,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec2 offset) )\n" @@ -3525,7 +3946,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec2 offset) )\n" @@ -3533,7 +3954,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec2 offset) )\n" @@ -3541,7 +3962,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec3 offset) )\n" @@ -3549,7 +3970,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec3 offset) )\n" @@ -3557,7 +3978,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec3 offset) )\n" @@ -3565,7 +3986,31 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) ivec2 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txf vec4 (var_ref sampler) (var_ref P) (var_ref offset) (constant int (0))\n" + "))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) ivec2 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txf ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (constant int (0))\n" + "))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) ivec2 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txf uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (constant int (0))\n" + "))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) \n" " (declare (const_in) int offset) )\n" @@ -3573,7 +4018,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) \n" " (declare (const_in) int offset) )\n" @@ -3581,7 +4026,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) ivec2 P) \n" " (declare (in) int lod) \n" " (declare (const_in) int offset) )\n" @@ -3589,7 +4034,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec2 offset) )\n" @@ -3597,7 +4042,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec2 offset) )\n" @@ -3605,7 +4050,7 @@ static const char builtin_texelFetchOffset[] = "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) ivec3 P) \n" " (declare (in) int lod) \n" " (declare (const_in) ivec2 offset) )\n" @@ -3618,302 +4063,326 @@ static const char builtin_texture[] = "((function texture\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isamplerCube sampler)\n" + " (declare (in) isamplerCube sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usamplerCube sampler)\n" + " (declare (in) usamplerCube sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex float (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) samplerCubeShadow sampler)\n" + " (declare (in) samplerCubeShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex float (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DArrayShadow sampler)\n" + " (declare (in) sampler2DArrayShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex float (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz w (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) float P) \n" - " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec2 P) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" - " (declare (in) float P) \n" - " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec2 P) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" - " (declare (in) float P) \n" - " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isampler2D sampler)\n" - " (declare (in) vec2 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usampler2D sampler)\n" - " (declare (in) vec2 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isampler3D sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usampler3D sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isamplerCube sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usamplerCube sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" - " (declare (in) vec2 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" - " (declare (in) vec2 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" - " (declare (in) vec2 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec2 P) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" + " (declare (in) vec3 P) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler) \n" + " (declare (in) float P) \n" + " (declare (in) float bias) )\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler) \n" + " (declare (in) float P) \n" + " (declare (in) float bias) )\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler) \n" + " (declare (in) float P) \n" + " (declare (in) float bias) )\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isamplerCube sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usamplerCube sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) samplerCubeShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) float bias) )\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) samplerCubeShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DArrayShadow sampler)\n" + " (declare (in) sampler2DArrayShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz w (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -3922,16 +4391,16 @@ static const char builtin_texture1D[] = "((function texture1D\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -3940,16 +4409,16 @@ static const char builtin_texture1DArray[] = "((function texture1DArray\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -3958,10 +4427,10 @@ static const char builtin_texture1DArrayLod[] = "((function texture1DArrayLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -3970,27 +4439,27 @@ static const char builtin_texture1DGradARB[] = "((function texture1DGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -3999,10 +4468,10 @@ static const char builtin_texture1DLod[] = "((function texture1DLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4011,29 +4480,29 @@ static const char builtin_texture1DProj[] = "((function texture1DProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -4042,51 +4511,51 @@ static const char builtin_texture1DProjGradARB[] = "((function texture1DProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4095,17 +4564,17 @@ static const char builtin_texture1DProjLod[] = "((function texture1DProjLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4114,16 +4583,22 @@ static const char builtin_texture2D[] = "((function texture2D\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerExternalOES sampler) \n" + " (declare (in) vec2 P) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -4132,16 +4607,16 @@ static const char builtin_texture2DArray[] = "((function texture2DArray\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -4150,10 +4625,10 @@ static const char builtin_texture2DArrayLod[] = "((function texture2DArrayLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4162,27 +4637,27 @@ static const char builtin_texture2DGradARB[] = "((function texture2DGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4191,27 +4666,27 @@ static const char builtin_texture2DGradEXT[] = "((function texture2DGradEXT\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4220,10 +4695,10 @@ static const char builtin_texture2DLod[] = "((function texture2DLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4232,10 +4707,10 @@ static const char builtin_texture2DLodEXT[] = "((function texture2DLodEXT\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4244,29 +4719,41 @@ static const char builtin_texture2DProj[] = "((function texture2DProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerExternalOES sampler) \n" + " (declare (in) vec3 P) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerExternalOES sampler) \n" + " (declare (in) vec4 P) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -4275,51 +4762,51 @@ static const char builtin_texture2DProjGradARB[] = "((function texture2DProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4328,51 +4815,51 @@ static const char builtin_texture2DProjGradEXT[] = "((function texture2DProjGradEXT\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4381,17 +4868,17 @@ static const char builtin_texture2DProjLod[] = "((function texture2DProjLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4400,17 +4887,17 @@ static const char builtin_texture2DProjLodEXT[] = "((function texture2DProjLodEXT\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4419,9 +4906,9 @@ static const char builtin_texture2DRect[] = "((function texture2DRect\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -4430,11 +4917,11 @@ static const char builtin_texture2DRectGradARB[] = "((function texture2DRectGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4443,15 +4930,15 @@ static const char builtin_texture2DRectProj[] = "((function texture2DRectProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" "))\n" "" @@ -4460,19 +4947,19 @@ static const char builtin_texture2DRectProjGradARB[] = "((function texture2DRectProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4481,16 +4968,16 @@ static const char builtin_texture3D[] = "((function texture3D\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -4499,27 +4986,27 @@ static const char builtin_texture3DGradARB[] = "((function texture3DGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4528,10 +5015,10 @@ static const char builtin_texture3DLod[] = "((function texture3DLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4540,16 +5027,16 @@ static const char builtin_texture3DProj[] = "((function texture3DProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -4558,27 +5045,27 @@ static const char builtin_texture3DProjGradARB[] = "((function texture3DProjGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4587,10 +5074,10 @@ static const char builtin_texture3DProjLod[] = "((function texture3DProjLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4599,16 +5086,16 @@ static const char builtin_textureCube[] = "((function textureCube\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -4617,27 +5104,27 @@ static const char builtin_textureCubeGradARB[] = "((function textureCubeGradARB\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isamplerCube sampler)\n" + " (declare (in) isamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usamplerCube sampler)\n" + " (declare (in) usamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4646,27 +5133,27 @@ static const char builtin_textureCubeGradEXT[] = "((function textureCubeGradEXT\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isamplerCube sampler)\n" + " (declare (in) isamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usamplerCube sampler)\n" + " (declare (in) usamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4675,10 +5162,10 @@ static const char builtin_textureCubeLod[] = "((function textureCubeLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4687,10 +5174,10 @@ static const char builtin_textureCubeLodEXT[] = "((function textureCubeLodEXT\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -4699,187 +5186,219 @@ static const char builtin_textureGrad[] = "((function textureGrad\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isamplerCube sampler)\n" + " (declare (in) isamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usamplerCube sampler)\n" + " (declare (in) usamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) \n" - " (declare (in) vec2 dPdx) \n" - " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) vec2 P) \n" - " (declare (in) vec2 dPdx) \n" - " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) vec2 P) \n" - " (declare (in) vec2 dPdx) \n" - " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) samplerCubeShadow sampler)\n" + " (declare (in) samplerCubeShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DArrayShadow sampler) \n" + " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) sampler2DArrayShadow sampler)\n" - " (declare (in) vec4 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz xyz (var_ref P)) 0 1 (swiz w (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -4888,201 +5407,210 @@ static const char builtin_textureGradOffset[] = "((function textureGradOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" - " (declare (const_in) ivec3 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isamplerCube sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" - " (declare (const_in) ivec3 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usamplerCube sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" - " (declare (const_in) ivec3 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" - " (declare (const_in) int offset) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler2DRect sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" - " (declare (const_in) int offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler2DRect sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" - " (declare (const_in) int offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" - " (declare (const_in) ivec2 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" - " (declare (const_in) ivec2 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) \n" + " (declare (const_in) int offset) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) \n" + " (declare (const_in) int offset) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) \n" + " (declare (const_in) int offset) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" - " (declare (in) vec2 dPdx) \n" - " (declare (in) vec2 dPdy) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DArrayShadow sampler)\n" + " (declare (in) sampler2DArrayShadow sampler) \n" " (declare (in) vec4 P) \n" - " (declare (in) vec3 dPdx) \n" - " (declare (in) vec3 dPdy) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd float (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) 1 (swiz w (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -5091,150 +5619,150 @@ static const char builtin_textureLod[] = "((function textureLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) samplerCube sampler)\n" + " (declare (in) samplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isamplerCube sampler)\n" + " (declare (in) isamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usamplerCube sampler)\n" + " (declare (in) usamplerCube sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl float (var_ref sampler) (swiz x (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl float (var_ref sampler) (swiz xy (var_ref P)) 0 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -5243,147 +5771,147 @@ static const char builtin_textureLodOffset[] = "((function textureLodOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" "))\n" "" @@ -5392,273 +5920,301 @@ static const char builtin_textureOffset[] = "((function textureOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler2DRect sampler) \n" " (declare (in) vec2 P) \n" - " (declare (const_in) int offset) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler2DRect sampler) \n" " (declare (in) vec2 P) \n" - " (declare (const_in) int offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler2DRect sampler) \n" " (declare (in) vec2 P) \n" - " (declare (const_in) int offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" - "\n" - " (signature ivec4\n" - " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (const_in) ivec2 offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" - "\n" - " (signature uvec4\n" - " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (const_in) ivec2 offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec3 P) \n" - " (declare (const_in) int offset) )\n" - " ((return (tex float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) ))))\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (const_in) int offset) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (const_in) int offset) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler) \n" + " (declare (in) vec2 P) \n" + " (declare (const_in) int offset) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DArrayShadow sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) int offset) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) float P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) float P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) float P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec3 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec3 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec3 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1DArray sampler)\n" + " (declare (in) sampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1DArray sampler)\n" + " (declare (in) isampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1DArray sampler)\n" + " (declare (in) usampler1DArray sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2DArray sampler)\n" + " (declare (in) sampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2DArray sampler)\n" + " (declare (in) isampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2DArray sampler)\n" + " (declare (in) usampler2DArray sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) 1 () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) sampler1DArrayShadow sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) 1 (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" "))\n" "" @@ -5667,224 +6223,266 @@ static const char builtin_textureProj[] = "((function textureProj\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex float (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) )\n" - " ((return (tex float (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec3 P) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec3 P) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec3 P) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec4 P) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec4 P) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec4 P) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DRectShadow sampler) \n" + " (declare (in) vec4 P) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) 0 ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) 0 (var_ref bias) ))))\n" "\n" "))\n" "" @@ -5893,139 +6491,195 @@ static const char builtin_textureProjGrad[] = "((function textureProjGrad\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 P) \n" - " (declare (in) float dPdx) \n" - " (declare (in) float dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) )\n" - " ((return (txd float (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) 0 ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -6034,156 +6688,219 @@ static const char builtin_textureProjGradOffset[] = "((function textureProjGradOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float dPdx) \n" " (declare (in) float dPdy) \n" " (declare (const_in) int offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txd vec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txd ivec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec3 dPdx) \n" " (declare (in) vec3 dPdy) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txd uvec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd vec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 P) \n" - " (declare (in) float dPdx) \n" - " (declare (in) float dPdy) \n" - " (declare (const_in) int offset) )\n" - " ((return (txd float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) vec2 dPdx) \n" " (declare (in) vec2 dPdy) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txd float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) float dPdx) \n" + " (declare (in) float dPdy) \n" + " (declare (const_in) int offset) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (in) vec2 dPdx) \n" + " (declare (in) vec2 dPdy) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (txd float (var_ref sampler) (var_ref P) (var_ref offset) ((var_ref dPdx) (var_ref dPdy)) ))))\n" "\n" "))\n" "" @@ -6192,122 +6909,122 @@ static const char builtin_textureProjLod[] = "((function textureProjLod\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz xyz (var_ref P)) 0 (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl float (var_ref sampler) (swiz x (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) )\n" - " ((return (txl float (var_ref sampler) (swiz xy (var_ref P)) 0 (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) 0 (var_ref lod) ))))\n" "\n" "))\n" "" @@ -6316,139 +7033,139 @@ static const char builtin_textureProjLodOffset[] = "((function textureProjLodOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txl vec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txl ivec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (txl uvec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref lod) ))))\n" + " ((return (txl uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) int offset) )\n" - " ((return (txl float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (in) float lod) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (txl float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n" + " ((return (txl float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref lod) ))))\n" "\n" "))\n" "" @@ -6457,258 +7174,492 @@ static const char builtin_textureProjOffset[] = "((function textureProjOffset\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (tex vec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (tex ivec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec3 offset) )\n" - " ((return (tex uvec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () ))))\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec3 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex vec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex ivec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex uvec4 (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler2DRectShadow sampler) \n" " (declare (in) vec4 P) \n" - " (declare (const_in) int offset) )\n" - " ((return (tex float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " (declare (const_in) ivec2 offset) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" + " (declare (in) vec4 P) \n" + " (declare (const_in) int offset) )\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" + "\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) )\n" - " ((return (tex float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n" + " ((return (tex float (var_ref sampler) (var_ref P) (var_ref offset) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec2 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz y (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler1D sampler)\n" + " (declare (in) sampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler1D sampler)\n" + " (declare (in) isampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler1D sampler)\n" + " (declare (in) usampler1D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec3 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz z (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler2D sampler)\n" + " (declare (in) sampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler2D sampler)\n" + " (declare (in) isampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler2D sampler)\n" + " (declare (in) usampler2D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature vec4\n" " (parameters\n" - " (declare (in) sampler3D sampler)\n" + " (declare (in) sampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec3 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb vec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb vec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature ivec4\n" " (parameters\n" - " (declare (in) isampler3D sampler)\n" + " (declare (in) isampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec3 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb ivec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb ivec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature uvec4\n" " (parameters\n" - " (declare (in) usampler3D sampler)\n" + " (declare (in) usampler3D sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec3 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb uvec4 (var_ref sampler) (swiz xyz (var_ref P)) (var_ref offset) (swiz w (var_ref P)) () (var_ref bias) ))))\n" + " ((return (txb uvec4 (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) sampler1DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) int offset) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz x (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" "\n" " (signature float\n" " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) sampler2DShadow sampler) \n" " (declare (in) vec4 P) \n" " (declare (const_in) ivec2 offset) \n" " (declare (in) float bias) )\n" - " ((return (txb float (var_ref sampler) (swiz xy (var_ref P)) (var_ref offset) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n" + " ((return (txb float (var_ref sampler) (var_ref P) (var_ref offset) (var_ref bias) ))))\n" + "\n" + "))\n" + "" +; +static const char builtin_textureSize[] = + "((function textureSize\n" + " (signature int\n" + " (parameters\n" + " (declare (in) sampler1D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs int (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature int\n" + " (parameters\n" + " (declare (in) isampler1D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs int (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature int\n" + " (parameters\n" + " (declare (in) usampler1D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs int (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) sampler2D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) isampler2D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) usampler2D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) sampler3D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) isampler3D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) usampler3D sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) samplerCube sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) isamplerCube sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) usamplerCube sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature int\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs int (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) samplerCubeShadow sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) sampler1DArrayShadow sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec2 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) sampler2DArrayShadow sampler) \n" + " (declare (in) int lod) )\n" + " ((return (txs ivec3 (var_ref sampler) (var_ref lod) ))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) sampler2DRect sampler) )\n" + " ((return (txs ivec2 (var_ref sampler) (constant int (0))\n" + "))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) isampler2DRect sampler) )\n" + " ((return (txs ivec2 (var_ref sampler) (constant int (0))\n" + "))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) usampler2DRect sampler) )\n" + " ((return (txs ivec2 (var_ref sampler) (constant int (0))\n" + "))))\n" + "\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) sampler2DRectShadow sampler) )\n" + " ((return (txs ivec2 (var_ref sampler) (constant int (0))\n" + "))))\n" + "\n" + " (signature int\n" + " (parameters\n" + " (declare (in) samplerBuffer sampler) )\n" + " ((return (txs int (var_ref sampler) (constant int (0))\n" + "))))\n" + "\n" + " (signature int\n" + " (parameters\n" + " (declare (in) isamplerBuffer sampler) )\n" + " ((return (txs int (var_ref sampler) (constant int (0))\n" + "))))\n" + "\n" + " (signature int\n" + " (parameters\n" + " (declare (in) usamplerBuffer sampler) )\n" + " ((return (txs int (var_ref sampler) (constant int (0))\n" + "))))\n" "\n" "))\n" "" @@ -6879,608 +7830,539 @@ static const char builtin_trunc[] = "))\n" "" ; +static const char builtin_uintBitsToFloat[] = + "((function uintBitsToFloat\n" + " (signature float\n" + " (parameters\n" + " (declare (in) uint arg))\n" + " ((return (expression float bitcast_u2f (var_ref arg)))))\n" + "\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) uvec2 arg))\n" + " ((return (expression vec2 bitcast_u2f (var_ref arg)))))\n" + "\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) uvec3 arg))\n" + " ((return (expression vec3 bitcast_u2f (var_ref arg)))))\n" + "\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) uvec4 arg))\n" + " ((return (expression vec4 bitcast_u2f (var_ref arg)))))\n" + "))\n" + "" +; static const char prototypes_for_100_frag[] = + "(\n" + "(function texture2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureCube\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ())))" +; +static const char *functions_for_100_frag [] = { + builtin_texture2D, + builtin_texture2DProj, + builtin_textureCube, +}; +static const char prototypes_for_100_glsl[] = "(\n" "(function radians\n" " (signature float\n" " (parameters\n" " (declare (in) float degrees))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 degrees))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 degrees))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 degrees))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function degrees\n" " (signature float\n" " (parameters\n" " (declare (in) float radians))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 radians))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 radians))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 radians))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sin\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function cos\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function tan\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function asin\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function acos\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function atan\n" " (signature float\n" " (parameters\n" " (declare (in) float y)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) float y_over_x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y_over_x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y_over_x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y_over_x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function pow\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function exp\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function log\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function exp2\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function log2\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sqrt\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function inversesqrt\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function abs\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sign\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function floor\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function ceil\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function fract\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function mod\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function min\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function max\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function clamp\n" " (signature float\n" " (parameters\n" @@ -7488,50 +8370,42 @@ static const char prototypes_for_100_frag[] = " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 minVal)\n" " (declare (in) vec2 maxVal))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 minVal)\n" " (declare (in) vec3 maxVal))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 minVal)\n" " (declare (in) vec4 maxVal))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function mix\n" " (signature float\n" " (parameters\n" @@ -7539,94 +8413,78 @@ static const char prototypes_for_100_frag[] = " (declare (in) float y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y)\n" " (declare (in) vec2 a))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y)\n" " (declare (in) vec3 a))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y)\n" " (declare (in) vec4 a))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y)\n" " (declare (in) float a))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function step\n" " (signature float\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 edge)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 edge)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 edge)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function smoothstep\n" " (signature float\n" " (parameters\n" @@ -7634,154 +8492,124 @@ static const char prototypes_for_100_frag[] = " (declare (in) float edge1)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 edge0)\n" " (declare (in) vec2 edge1)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 edge0)\n" " (declare (in) vec3 edge1)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 edge0)\n" " (declare (in) vec4 edge1)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function length\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function distance\n" " (signature float\n" " (parameters\n" " (declare (in) float p0)\n" " (declare (in) float p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 p0)\n" " (declare (in) vec2 p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 p0)\n" " (declare (in) vec3 p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 p0)\n" " (declare (in) vec4 p1))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function dot\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function cross\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function normalize\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function faceforward\n" " (signature float\n" " (parameters\n" @@ -7789,55 +8617,45 @@ static const char prototypes_for_100_frag[] = " (declare (in) float I)\n" " (declare (in) float Nref))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 N)\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 Nref))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 N)\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 Nref))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 N)\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 Nref))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function reflect\n" " (signature float\n" " (parameters\n" " (declare (in) float I)\n" " (declare (in) float N))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 N))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 N))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 N))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function refract\n" " (signature float\n" " (parameters\n" @@ -7845,425 +8663,320 @@ static const char prototypes_for_100_frag[] = " (declare (in) float N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 N)\n" " (declare (in) float eta))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function matrixCompMult\n" " (signature mat2\n" " (parameters\n" " (declare (in) mat2 x)\n" " (declare (in) mat2 y))\n" " ())\n" - "\n" " (signature mat3\n" " (parameters\n" " (declare (in) mat3 x)\n" " (declare (in) mat3 y))\n" " ())\n" - "\n" " (signature mat4\n" " (parameters\n" " (declare (in) mat4 x)\n" " (declare (in) mat4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function lessThan\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function lessThanEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function greaterThan\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function greaterThanEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function equal\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x)\n" " (declare (in) bvec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x)\n" " (declare (in) bvec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x)\n" " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function notEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x)\n" " (declare (in) bvec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x)\n" " (declare (in) bvec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x)\n" " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function any\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function all\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function not\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCube\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; -static const char *functions_for_100_frag [] = { +static const char *functions_for_100_glsl [] = { builtin_abs, builtin_acos, builtin_all, @@ -8315,1359 +9028,13 @@ static const char *functions_for_100_frag [] = { }; static const char prototypes_for_100_vert[] = "(\n" - "(function radians\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float degrees))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 degrees))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 degrees))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 degrees))\n" - " ())\n" - ")\n" - "\n" - "(function degrees\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float radians))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 radians))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 radians))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 radians))\n" - " ())\n" - ")\n" - "\n" - "(function sin\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function cos\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function tan\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function asin\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function acos\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function atan\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float y)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 y)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 y)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 y)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float y_over_x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 y_over_x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 y_over_x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 y_over_x))\n" - " ())\n" - ")\n" - "\n" - "(function pow\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function exp\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function log\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function exp2\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function log2\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function sqrt\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function inversesqrt\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function abs\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function sign\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function floor\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function ceil\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function fract\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function mod\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function min\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" - "(function max\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" - "(function clamp\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 minVal)\n" - " (declare (in) vec2 maxVal))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 minVal)\n" - " (declare (in) vec3 maxVal))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 minVal)\n" - " (declare (in) vec4 maxVal))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - ")\n" - "\n" - "(function mix\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y)\n" - " (declare (in) vec2 a))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y)\n" - " (declare (in) vec3 a))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y)\n" - " (declare (in) vec4 a))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y)\n" - " (declare (in) float a))\n" - " ())\n" - ")\n" - "\n" - "(function step\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 edge)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 edge)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 edge)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function smoothstep\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 edge0)\n" - " (declare (in) vec2 edge1)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 edge0)\n" - " (declare (in) vec3 edge1)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 edge0)\n" - " (declare (in) vec4 edge1)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function length\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function distance\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p0)\n" - " (declare (in) float p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 p0)\n" - " (declare (in) vec2 p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 p0)\n" - " (declare (in) vec3 p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 p0)\n" - " (declare (in) vec4 p1))\n" - " ())\n" - ")\n" - "\n" - "(function dot\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function cross\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - ")\n" - "\n" - "(function normalize\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function faceforward\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float N)\n" - " (declare (in) float I)\n" - " (declare (in) float Nref))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 N)\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 Nref))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 N)\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 Nref))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 N)\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 Nref))\n" - " ())\n" - ")\n" - "\n" - "(function reflect\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float I)\n" - " (declare (in) float N))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 N))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 N))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 N))\n" - " ())\n" - ")\n" - "\n" - "(function refract\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float I)\n" - " (declare (in) float N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 N)\n" - " (declare (in) float eta))\n" - " ())\n" - ")\n" - "\n" - "(function matrixCompMult\n" - " (signature mat2\n" - " (parameters\n" - " (declare (in) mat2 x)\n" - " (declare (in) mat2 y))\n" - " ())\n" - "\n" - " (signature mat3\n" - " (parameters\n" - " (declare (in) mat3 x)\n" - " (declare (in) mat3 y))\n" - " ())\n" - "\n" - " (signature mat4\n" - " (parameters\n" - " (declare (in) mat4 x)\n" - " (declare (in) mat4 y))\n" - " ())\n" - ")\n" - "\n" - "(function lessThan\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function lessThanEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function greaterThan\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function greaterThanEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function equal\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x)\n" - " (declare (in) bvec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x)\n" - " (declare (in) bvec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x)\n" - " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function notEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x)\n" - " (declare (in) bvec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x)\n" - " (declare (in) bvec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x)\n" - " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function any\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function all\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function not\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function texture2D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" "(function texture2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -9675,689 +9042,658 @@ static const char prototypes_for_100_vert[] = " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function textureCube\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_100_vert [] = { - builtin_abs, - builtin_acos, - builtin_all, - builtin_any, - builtin_asin, - builtin_atan, - builtin_ceil, - builtin_clamp, - builtin_cos, - builtin_cross, - builtin_degrees, - builtin_distance, - builtin_dot, - builtin_equal, - builtin_exp, - builtin_exp2, - builtin_faceforward, - builtin_floor, - builtin_fract, - builtin_greaterThan, - builtin_greaterThanEqual, - builtin_inversesqrt, - builtin_length, - builtin_lessThan, - builtin_lessThanEqual, - builtin_log, - builtin_log2, - builtin_matrixCompMult, - builtin_max, - builtin_min, - builtin_mix, - builtin_mod, - builtin_normalize, - builtin_not, - builtin_notEqual, - builtin_pow, - builtin_radians, - builtin_reflect, - builtin_refract, - builtin_sign, - builtin_sin, - builtin_smoothstep, - builtin_sqrt, - builtin_step, - builtin_tan, - builtin_texture2D, builtin_texture2DLod, - builtin_texture2DProj, builtin_texture2DProjLod, - builtin_textureCube, builtin_textureCubeLod, }; static const char prototypes_for_110_frag[] = + "(\n" + "(function texture1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureCube\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function dFdx\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function dFdy\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function fwidth\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ())))" +; +static const char *functions_for_110_frag [] = { + builtin_dFdx, + builtin_dFdy, + builtin_fwidth, + builtin_shadow1D, + builtin_shadow1DProj, + builtin_shadow2D, + builtin_shadow2DProj, + builtin_texture1D, + builtin_texture1DProj, + builtin_texture2D, + builtin_texture2DProj, + builtin_texture3D, + builtin_texture3DProj, + builtin_textureCube, +}; +static const char prototypes_for_110_glsl[] = "(\n" "(function radians\n" " (signature float\n" " (parameters\n" " (declare (in) float degrees))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 degrees))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 degrees))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 degrees))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function degrees\n" " (signature float\n" " (parameters\n" " (declare (in) float radians))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 radians))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 radians))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 radians))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sin\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function cos\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function tan\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function asin\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function acos\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function atan\n" " (signature float\n" " (parameters\n" " (declare (in) float y)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) float y_over_x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y_over_x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y_over_x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y_over_x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function pow\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function exp\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function log\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function exp2\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function log2\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sqrt\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function inversesqrt\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function abs\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sign\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function floor\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function ceil\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function fract\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function mod\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function min\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function max\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function clamp\n" " (signature float\n" " (parameters\n" @@ -10365,50 +9701,42 @@ static const char prototypes_for_110_frag[] = " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 minVal)\n" " (declare (in) vec2 maxVal))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 minVal)\n" " (declare (in) vec3 maxVal))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 minVal)\n" " (declare (in) vec4 maxVal))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function mix\n" " (signature float\n" " (parameters\n" @@ -10416,94 +9744,78 @@ static const char prototypes_for_110_frag[] = " (declare (in) float y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y)\n" " (declare (in) vec2 a))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y)\n" " (declare (in) vec3 a))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y)\n" " (declare (in) vec4 a))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y)\n" " (declare (in) float a))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function step\n" " (signature float\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 edge)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 edge)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 edge)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function smoothstep\n" " (signature float\n" " (parameters\n" @@ -10511,154 +9823,124 @@ static const char prototypes_for_110_frag[] = " (declare (in) float edge1)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 edge0)\n" " (declare (in) vec2 edge1)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 edge0)\n" " (declare (in) vec3 edge1)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 edge0)\n" " (declare (in) vec4 edge1)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function length\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function distance\n" " (signature float\n" " (parameters\n" " (declare (in) float p0)\n" " (declare (in) float p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 p0)\n" " (declare (in) vec2 p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 p0)\n" " (declare (in) vec3 p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 p0)\n" " (declare (in) vec4 p1))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function dot\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function cross\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function normalize\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function faceforward\n" " (signature float\n" " (parameters\n" @@ -10666,55 +9948,45 @@ static const char prototypes_for_110_frag[] = " (declare (in) float I)\n" " (declare (in) float Nref))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 N)\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 Nref))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 N)\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 Nref))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 N)\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 Nref))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function reflect\n" " (signature float\n" " (parameters\n" " (declare (in) float I)\n" " (declare (in) float N))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 N))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 N))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 N))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function refract\n" " (signature float\n" " (parameters\n" @@ -10722,712 +9994,441 @@ static const char prototypes_for_110_frag[] = " (declare (in) float N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 N)\n" " (declare (in) float eta))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function matrixCompMult\n" " (signature mat2\n" " (parameters\n" " (declare (in) mat2 x)\n" " (declare (in) mat2 y))\n" " ())\n" - "\n" " (signature mat3\n" " (parameters\n" " (declare (in) mat3 x)\n" " (declare (in) mat3 y))\n" " ())\n" - "\n" " (signature mat4\n" " (parameters\n" " (declare (in) mat4 x)\n" " (declare (in) mat4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function lessThan\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function lessThanEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function greaterThan\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function greaterThanEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function equal\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x)\n" " (declare (in) bvec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x)\n" " (declare (in) bvec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x)\n" " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function notEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x)\n" " (declare (in) bvec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x)\n" " (declare (in) bvec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x)\n" " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function any\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function all\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function not\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) float coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) float coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec2 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec2 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCube\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" - "(function dFdx\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 p))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 p))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" - "(function dFdy\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 p))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 p))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" - "(function fwidth\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 p))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 p))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise1\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise2\n" " (signature vec2\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise3\n" " (signature vec3\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise4\n" " (signature vec4\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; -static const char *functions_for_110_frag [] = { +static const char *functions_for_110_glsl [] = { builtin_abs, builtin_acos, builtin_all, @@ -11438,8 +10439,6 @@ static const char *functions_for_110_frag [] = { builtin_clamp, builtin_cos, builtin_cross, - builtin_dFdx, - builtin_dFdy, builtin_degrees, builtin_distance, builtin_dot, @@ -11449,7 +10448,6 @@ static const char *functions_for_110_frag [] = { builtin_faceforward, builtin_floor, builtin_fract, - builtin_fwidth, builtin_greaterThan, builtin_greaterThanEqual, builtin_inversesqrt, @@ -11494,1365 +10492,17 @@ static const char *functions_for_110_frag [] = { }; static const char prototypes_for_110_vert[] = "(\n" - "(function radians\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float degrees))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 degrees))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 degrees))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 degrees))\n" - " ())\n" - ")\n" - "\n" - "(function degrees\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float radians))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 radians))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 radians))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 radians))\n" - " ())\n" - ")\n" - "\n" - "(function sin\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function cos\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function tan\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function asin\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function acos\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function atan\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float y)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 y)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 y)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 y)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float y_over_x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 y_over_x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 y_over_x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 y_over_x))\n" - " ())\n" - ")\n" - "\n" - "(function pow\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function exp\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function log\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function exp2\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function log2\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function sqrt\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function inversesqrt\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function abs\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function sign\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function floor\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function ceil\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function fract\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function mod\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function min\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" - "(function max\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" - "(function clamp\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 minVal)\n" - " (declare (in) vec2 maxVal))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 minVal)\n" - " (declare (in) vec3 maxVal))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 minVal)\n" - " (declare (in) vec4 maxVal))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - ")\n" - "\n" - "(function mix\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y)\n" - " (declare (in) vec2 a))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y)\n" - " (declare (in) vec3 a))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y)\n" - " (declare (in) vec4 a))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y)\n" - " (declare (in) float a))\n" - " ())\n" - ")\n" - "\n" - "(function step\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 edge)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 edge)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 edge)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function smoothstep\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 edge0)\n" - " (declare (in) vec2 edge1)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 edge0)\n" - " (declare (in) vec3 edge1)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 edge0)\n" - " (declare (in) vec4 edge1)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function length\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function distance\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p0)\n" - " (declare (in) float p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 p0)\n" - " (declare (in) vec2 p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 p0)\n" - " (declare (in) vec3 p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 p0)\n" - " (declare (in) vec4 p1))\n" - " ())\n" - ")\n" - "\n" - "(function dot\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function cross\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - ")\n" - "\n" - "(function normalize\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" "(function ftransform\n" " (signature vec4\n" " (parameters)\n" - " ())\n" - ")\n" - "\n" - "(function faceforward\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float N)\n" - " (declare (in) float I)\n" - " (declare (in) float Nref))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 N)\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 Nref))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 N)\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 Nref))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 N)\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 Nref))\n" - " ())\n" - ")\n" - "\n" - "(function reflect\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float I)\n" - " (declare (in) float N))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 N))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 N))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 N))\n" - " ())\n" - ")\n" - "\n" - "(function refract\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float I)\n" - " (declare (in) float N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 N)\n" - " (declare (in) float eta))\n" - " ())\n" - ")\n" - "\n" - "(function matrixCompMult\n" - " (signature mat2\n" - " (parameters\n" - " (declare (in) mat2 x)\n" - " (declare (in) mat2 y))\n" - " ())\n" - "\n" - " (signature mat3\n" - " (parameters\n" - " (declare (in) mat3 x)\n" - " (declare (in) mat3 y))\n" - " ())\n" - "\n" - " (signature mat4\n" - " (parameters\n" - " (declare (in) mat4 x)\n" - " (declare (in) mat4 y))\n" - " ())\n" - ")\n" - "\n" - "(function lessThan\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function lessThanEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function greaterThan\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function greaterThanEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function equal\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x)\n" - " (declare (in) bvec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x)\n" - " (declare (in) bvec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x)\n" - " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function notEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x)\n" - " (declare (in) bvec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x)\n" - " (declare (in) bvec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x)\n" - " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function any\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function all\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function not\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function texture1D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) float coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture1DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec2 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) float coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -12860,46 +10510,19 @@ static const char prototypes_for_110_vert[] = " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function texture2D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -12907,900 +10530,709 @@ static const char prototypes_for_110_vert[] = " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function texture3D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture3DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function textureCube\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function shadow1D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow1DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function noise1\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function noise2\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function noise3\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function noise4\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_110_vert [] = { - builtin_abs, - builtin_acos, - builtin_all, - builtin_any, - builtin_asin, - builtin_atan, - builtin_ceil, - builtin_clamp, - builtin_cos, - builtin_cross, - builtin_degrees, - builtin_distance, - builtin_dot, - builtin_equal, - builtin_exp, - builtin_exp2, - builtin_faceforward, - builtin_floor, - builtin_fract, builtin_ftransform, - builtin_greaterThan, - builtin_greaterThanEqual, - builtin_inversesqrt, - builtin_length, - builtin_lessThan, - builtin_lessThanEqual, - builtin_log, - builtin_log2, - builtin_matrixCompMult, - builtin_max, - builtin_min, - builtin_mix, - builtin_mod, - builtin_noise1, - builtin_noise2, - builtin_noise3, - builtin_noise4, - builtin_normalize, - builtin_not, - builtin_notEqual, - builtin_pow, - builtin_radians, - builtin_reflect, - builtin_refract, - builtin_shadow1D, builtin_shadow1DLod, - builtin_shadow1DProj, builtin_shadow1DProjLod, - builtin_shadow2D, builtin_shadow2DLod, - builtin_shadow2DProj, builtin_shadow2DProjLod, - builtin_sign, - builtin_sin, - builtin_smoothstep, - builtin_sqrt, - builtin_step, - builtin_tan, - builtin_texture1D, builtin_texture1DLod, - builtin_texture1DProj, builtin_texture1DProjLod, - builtin_texture2D, builtin_texture2DLod, - builtin_texture2DProj, builtin_texture2DProjLod, - builtin_texture3D, builtin_texture3DLod, - builtin_texture3DProj, builtin_texture3DProjLod, - builtin_textureCube, builtin_textureCubeLod, }; static const char prototypes_for_120_frag[] = + "(\n" + "(function texture1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureCube\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function dFdx\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function dFdy\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function fwidth\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ())))" +; +static const char *functions_for_120_frag [] = { + builtin_dFdx, + builtin_dFdy, + builtin_fwidth, + builtin_shadow1D, + builtin_shadow1DProj, + builtin_shadow2D, + builtin_shadow2DProj, + builtin_texture1D, + builtin_texture1DProj, + builtin_texture2D, + builtin_texture2DProj, + builtin_texture3D, + builtin_texture3DProj, + builtin_textureCube, +}; +static const char prototypes_for_120_glsl[] = "(\n" "(function radians\n" " (signature float\n" " (parameters\n" " (declare (in) float degrees))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 degrees))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 degrees))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 degrees))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function degrees\n" " (signature float\n" " (parameters\n" " (declare (in) float radians))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 radians))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 radians))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 radians))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sin\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function cos\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function tan\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function asin\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function acos\n" " (signature float\n" " (parameters\n" " (declare (in) float angle))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 angle))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 angle))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function atan\n" " (signature float\n" " (parameters\n" " (declare (in) float y)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) float y_over_x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 y_over_x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 y_over_x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 y_over_x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function pow\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function exp\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function log\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function exp2\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function log2\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sqrt\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function inversesqrt\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function abs\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function sign\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function floor\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function ceil\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function fract\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function mod\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function min\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function max\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function clamp\n" " (signature float\n" " (parameters\n" @@ -13808,50 +11240,42 @@ static const char prototypes_for_120_frag[] = " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 minVal)\n" " (declare (in) vec2 maxVal))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 minVal)\n" " (declare (in) vec3 maxVal))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 minVal)\n" " (declare (in) vec4 maxVal))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) float minVal)\n" " (declare (in) float maxVal))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function mix\n" " (signature float\n" " (parameters\n" @@ -13859,94 +11283,78 @@ static const char prototypes_for_120_frag[] = " (declare (in) float y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y)\n" " (declare (in) vec2 a))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y)\n" " (declare (in) vec3 a))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y)\n" " (declare (in) vec4 a))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y)\n" " (declare (in) float a))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y)\n" " (declare (in) float a))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function step\n" " (signature float\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 edge)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 edge)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 edge)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) float edge)\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function smoothstep\n" " (signature float\n" " (parameters\n" @@ -13954,154 +11362,124 @@ static const char prototypes_for_120_frag[] = " (declare (in) float edge1)\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 edge0)\n" " (declare (in) vec2 edge1)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 edge0)\n" " (declare (in) vec3 edge1)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 edge0)\n" " (declare (in) vec4 edge1)\n" " (declare (in) vec4 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) float edge0)\n" " (declare (in) float edge1)\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function length\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function distance\n" " (signature float\n" " (parameters\n" " (declare (in) float p0)\n" " (declare (in) float p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 p0)\n" " (declare (in) vec2 p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 p0)\n" " (declare (in) vec3 p1))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 p0)\n" " (declare (in) vec4 p1))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function dot\n" " (signature float\n" " (parameters\n" " (declare (in) float x)\n" " (declare (in) float y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function cross\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function normalize\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function faceforward\n" " (signature float\n" " (parameters\n" @@ -14109,55 +11487,45 @@ static const char prototypes_for_120_frag[] = " (declare (in) float I)\n" " (declare (in) float Nref))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 N)\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 Nref))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 N)\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 Nref))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 N)\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 Nref))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function reflect\n" " (signature float\n" " (parameters\n" " (declare (in) float I)\n" " (declare (in) float N))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 N))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 N))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 N))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function refract\n" " (signature float\n" " (parameters\n" @@ -14165,851 +11533,554 @@ static const char prototypes_for_120_frag[] = " (declare (in) float N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 I)\n" " (declare (in) vec2 N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 I)\n" " (declare (in) vec3 N)\n" " (declare (in) float eta))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 I)\n" " (declare (in) vec4 N)\n" " (declare (in) float eta))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function matrixCompMult\n" " (signature mat2\n" " (parameters\n" " (declare (in) mat2 x)\n" " (declare (in) mat2 y))\n" " ())\n" - "\n" " (signature mat3\n" " (parameters\n" " (declare (in) mat3 x)\n" " (declare (in) mat3 y))\n" " ())\n" - "\n" " (signature mat4\n" " (parameters\n" " (declare (in) mat4 x)\n" " (declare (in) mat4 y))\n" " ())\n" - "\n" " (signature mat2x3\n" " (parameters\n" " (declare (in) mat2x3 x)\n" " (declare (in) mat2x3 y))\n" " ())\n" - "\n" " (signature mat2x4\n" " (parameters\n" " (declare (in) mat2x4 x)\n" " (declare (in) mat2x4 y))\n" " ())\n" - "\n" " (signature mat3x2\n" " (parameters\n" " (declare (in) mat3x2 x)\n" " (declare (in) mat3x2 y))\n" " ())\n" - "\n" " (signature mat3x4\n" " (parameters\n" " (declare (in) mat3x4 x)\n" " (declare (in) mat3x4 y))\n" " ())\n" - "\n" " (signature mat4x2\n" " (parameters\n" " (declare (in) mat4x2 x)\n" " (declare (in) mat4x2 y))\n" " ())\n" - "\n" " (signature mat4x3\n" " (parameters\n" " (declare (in) mat4x3 x)\n" " (declare (in) mat4x3 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function outerProduct\n" " (signature mat2\n" " (parameters\n" " (declare (in) vec2 c)\n" " (declare (in) vec2 r))\n" " ())\n" - "\n" " (signature mat3\n" " (parameters\n" " (declare (in) vec3 c)\n" " (declare (in) vec3 r))\n" " ())\n" - "\n" " (signature mat4\n" " (parameters\n" " (declare (in) vec4 c)\n" " (declare (in) vec4 r))\n" " ())\n" - "\n" " (signature mat2x3\n" " (parameters\n" " (declare (in) vec3 c)\n" " (declare (in) vec2 r))\n" " ())\n" - "\n" " (signature mat3x2\n" " (parameters\n" " (declare (in) vec2 c)\n" " (declare (in) vec3 r))\n" " ())\n" - "\n" " (signature mat2x4\n" " (parameters\n" " (declare (in) vec4 c)\n" " (declare (in) vec2 r))\n" " ())\n" - "\n" " (signature mat4x2\n" " (parameters\n" " (declare (in) vec2 c)\n" " (declare (in) vec4 r))\n" " ())\n" - "\n" " (signature mat3x4\n" " (parameters\n" " (declare (in) vec4 c)\n" " (declare (in) vec3 r))\n" " ())\n" - "\n" " (signature mat4x3\n" " (parameters\n" " (declare (in) vec3 c)\n" " (declare (in) vec4 r))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function transpose\n" " (signature mat2\n" " (parameters\n" " (declare (in) mat2 m))\n" " ())\n" - "\n" " (signature mat3\n" " (parameters\n" " (declare (in) mat3 m))\n" " ())\n" - "\n" " (signature mat4\n" " (parameters\n" " (declare (in) mat4 m))\n" " ())\n" - "\n" " (signature mat2x3\n" " (parameters\n" " (declare (in) mat3x2 m))\n" " ())\n" - "\n" " (signature mat3x2\n" " (parameters\n" " (declare (in) mat2x3 m))\n" " ())\n" - "\n" " (signature mat2x4\n" " (parameters\n" " (declare (in) mat4x2 m))\n" " ())\n" - "\n" " (signature mat4x2\n" " (parameters\n" " (declare (in) mat2x4 m))\n" " ())\n" - "\n" " (signature mat3x4\n" " (parameters\n" " (declare (in) mat4x3 m))\n" " ())\n" - "\n" " (signature mat4x3\n" " (parameters\n" " (declare (in) mat3x4 m))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function lessThan\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function lessThanEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function greaterThan\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function greaterThanEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function equal\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x)\n" " (declare (in) bvec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x)\n" " (declare (in) bvec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x)\n" " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function notEqual\n" " (signature bvec2\n" " (parameters\n" " (declare (in) vec2 x)\n" " (declare (in) vec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) vec3 x)\n" " (declare (in) vec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) vec4 x)\n" " (declare (in) vec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) ivec2 x)\n" " (declare (in) ivec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) ivec3 x)\n" " (declare (in) ivec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) ivec4 x)\n" " (declare (in) ivec4 y))\n" " ())\n" - "\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x)\n" " (declare (in) bvec2 y))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x)\n" " (declare (in) bvec3 y))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x)\n" " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function any\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function all\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bool\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function not\n" " (signature bvec2\n" " (parameters\n" " (declare (in) bvec2 x))\n" " ())\n" - "\n" " (signature bvec3\n" " (parameters\n" " (declare (in) bvec3 x))\n" " ())\n" - "\n" " (signature bvec4\n" " (parameters\n" " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) float coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) float coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec2 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec2 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCube\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2D\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec3 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec4 coord)\n" - " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" - "(function dFdx\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 p))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 p))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" - "(function dFdy\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 p))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 p))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" - "(function fwidth\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 p))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 p))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise1\n" " (signature float\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature float\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise2\n" " (signature vec2\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise3\n" " (signature vec3\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function noise4\n" " (signature vec4\n" " (parameters\n" " (declare (in) float x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec2 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec3 x))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; -static const char *functions_for_120_frag [] = { +static const char *functions_for_120_glsl [] = { builtin_abs, builtin_acos, builtin_all, @@ -15020,8 +12091,6 @@ static const char *functions_for_120_frag [] = { builtin_clamp, builtin_cos, builtin_cross, - builtin_dFdx, - builtin_dFdy, builtin_degrees, builtin_distance, builtin_dot, @@ -15031,7 +12100,6 @@ static const char *functions_for_120_frag [] = { builtin_faceforward, builtin_floor, builtin_fract, - builtin_fwidth, builtin_greaterThan, builtin_greaterThanEqual, builtin_inversesqrt, @@ -15078,1504 +12146,17 @@ static const char *functions_for_120_frag [] = { }; static const char prototypes_for_120_vert[] = "(\n" - "(function radians\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float degrees))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 degrees))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 degrees))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 degrees))\n" - " ())\n" - ")\n" - "\n" - "(function degrees\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float radians))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 radians))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 radians))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 radians))\n" - " ())\n" - ")\n" - "\n" - "(function sin\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function cos\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function tan\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function asin\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function acos\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float angle))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 angle))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 angle))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 angle))\n" - " ())\n" - ")\n" - "\n" - "(function atan\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float y)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 y)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 y)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 y)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float y_over_x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 y_over_x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 y_over_x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 y_over_x))\n" - " ())\n" - ")\n" - "\n" - "(function pow\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function exp\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function log\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function exp2\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function log2\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function sqrt\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function inversesqrt\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function abs\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function sign\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function floor\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function ceil\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function fract\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function mod\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function min\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" - "(function max\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float y))\n" - " ())\n" - ")\n" - "\n" - "(function clamp\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 minVal)\n" - " (declare (in) vec2 maxVal))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 minVal)\n" - " (declare (in) vec3 maxVal))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 minVal)\n" - " (declare (in) vec4 maxVal))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) float minVal)\n" - " (declare (in) float maxVal))\n" - " ())\n" - ")\n" - "\n" - "(function mix\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y)\n" - " (declare (in) vec2 a))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y)\n" - " (declare (in) vec3 a))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y)\n" - " (declare (in) vec4 a))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y)\n" - " (declare (in) float a))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y)\n" - " (declare (in) float a))\n" - " ())\n" - ")\n" - "\n" - "(function step\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 edge)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 edge)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 edge)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float edge)\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function smoothstep\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 edge0)\n" - " (declare (in) vec2 edge1)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 edge0)\n" - " (declare (in) vec3 edge1)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 edge0)\n" - " (declare (in) vec4 edge1)\n" - " (declare (in) vec4 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float edge0)\n" - " (declare (in) float edge1)\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function length\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function distance\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float p0)\n" - " (declare (in) float p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 p0)\n" - " (declare (in) vec2 p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 p0)\n" - " (declare (in) vec3 p1))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 p0)\n" - " (declare (in) vec4 p1))\n" - " ())\n" - ")\n" - "\n" - "(function dot\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x)\n" - " (declare (in) float y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function cross\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - ")\n" - "\n" - "(function normalize\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" "(function ftransform\n" " (signature vec4\n" " (parameters)\n" - " ())\n" - ")\n" - "\n" - "(function faceforward\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float N)\n" - " (declare (in) float I)\n" - " (declare (in) float Nref))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 N)\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 Nref))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 N)\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 Nref))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 N)\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 Nref))\n" - " ())\n" - ")\n" - "\n" - "(function reflect\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float I)\n" - " (declare (in) float N))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 N))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 N))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 N))\n" - " ())\n" - ")\n" - "\n" - "(function refract\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float I)\n" - " (declare (in) float N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 I)\n" - " (declare (in) vec2 N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 I)\n" - " (declare (in) vec3 N)\n" - " (declare (in) float eta))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 I)\n" - " (declare (in) vec4 N)\n" - " (declare (in) float eta))\n" - " ())\n" - ")\n" - "\n" - "(function matrixCompMult\n" - " (signature mat2\n" - " (parameters\n" - " (declare (in) mat2 x)\n" - " (declare (in) mat2 y))\n" - " ())\n" - "\n" - " (signature mat3\n" - " (parameters\n" - " (declare (in) mat3 x)\n" - " (declare (in) mat3 y))\n" - " ())\n" - "\n" - " (signature mat4\n" - " (parameters\n" - " (declare (in) mat4 x)\n" - " (declare (in) mat4 y))\n" - " ())\n" - "\n" - " (signature mat2x3\n" - " (parameters\n" - " (declare (in) mat2x3 x)\n" - " (declare (in) mat2x3 y))\n" - " ())\n" - "\n" - " (signature mat2x4\n" - " (parameters\n" - " (declare (in) mat2x4 x)\n" - " (declare (in) mat2x4 y))\n" - " ())\n" - "\n" - " (signature mat3x2\n" - " (parameters\n" - " (declare (in) mat3x2 x)\n" - " (declare (in) mat3x2 y))\n" - " ())\n" - "\n" - " (signature mat3x4\n" - " (parameters\n" - " (declare (in) mat3x4 x)\n" - " (declare (in) mat3x4 y))\n" - " ())\n" - "\n" - " (signature mat4x2\n" - " (parameters\n" - " (declare (in) mat4x2 x)\n" - " (declare (in) mat4x2 y))\n" - " ())\n" - "\n" - " (signature mat4x3\n" - " (parameters\n" - " (declare (in) mat4x3 x)\n" - " (declare (in) mat4x3 y))\n" - " ())\n" - ")\n" - "\n" - "(function outerProduct\n" - " (signature mat2\n" - " (parameters\n" - " (declare (in) vec2 c)\n" - " (declare (in) vec2 r))\n" - " ())\n" - "\n" - " (signature mat3\n" - " (parameters\n" - " (declare (in) vec3 c)\n" - " (declare (in) vec3 r))\n" - " ())\n" - "\n" - " (signature mat4\n" - " (parameters\n" - " (declare (in) vec4 c)\n" - " (declare (in) vec4 r))\n" - " ())\n" - "\n" - " (signature mat2x3\n" - " (parameters\n" - " (declare (in) vec3 c)\n" - " (declare (in) vec2 r))\n" - " ())\n" - "\n" - " (signature mat3x2\n" - " (parameters\n" - " (declare (in) vec2 c)\n" - " (declare (in) vec3 r))\n" - " ())\n" - "\n" - " (signature mat2x4\n" - " (parameters\n" - " (declare (in) vec4 c)\n" - " (declare (in) vec2 r))\n" - " ())\n" - "\n" - " (signature mat4x2\n" - " (parameters\n" - " (declare (in) vec2 c)\n" - " (declare (in) vec4 r))\n" - " ())\n" - "\n" - " (signature mat3x4\n" - " (parameters\n" - " (declare (in) vec4 c)\n" - " (declare (in) vec3 r))\n" - " ())\n" - "\n" - " (signature mat4x3\n" - " (parameters\n" - " (declare (in) vec3 c)\n" - " (declare (in) vec4 r))\n" - " ())\n" - ")\n" - "\n" - "(function transpose\n" - " (signature mat2\n" - " (parameters\n" - " (declare (in) mat2 m))\n" - " ())\n" - "\n" - " (signature mat3\n" - " (parameters\n" - " (declare (in) mat3 m))\n" - " ())\n" - "\n" - " (signature mat4\n" - " (parameters\n" - " (declare (in) mat4 m))\n" - " ())\n" - "\n" - " (signature mat2x3\n" - " (parameters\n" - " (declare (in) mat3x2 m))\n" - " ())\n" - "\n" - " (signature mat3x2\n" - " (parameters\n" - " (declare (in) mat2x3 m))\n" - " ())\n" - "\n" - " (signature mat2x4\n" - " (parameters\n" - " (declare (in) mat4x2 m))\n" - " ())\n" - "\n" - " (signature mat4x2\n" - " (parameters\n" - " (declare (in) mat2x4 m))\n" - " ())\n" - "\n" - " (signature mat3x4\n" - " (parameters\n" - " (declare (in) mat4x3 m))\n" - " ())\n" - "\n" - " (signature mat4x3\n" - " (parameters\n" - " (declare (in) mat3x4 m))\n" - " ())\n" - ")\n" - "\n" - "(function lessThan\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function lessThanEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function greaterThan\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function greaterThanEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function equal\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x)\n" - " (declare (in) bvec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x)\n" - " (declare (in) bvec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x)\n" - " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function notEqual\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) vec2 x)\n" - " (declare (in) vec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) vec3 x)\n" - " (declare (in) vec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) vec4 x)\n" - " (declare (in) vec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) ivec2 x)\n" - " (declare (in) ivec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) ivec3 x)\n" - " (declare (in) ivec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) ivec4 x)\n" - " (declare (in) ivec4 y))\n" - " ())\n" - "\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x)\n" - " (declare (in) bvec2 y))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x)\n" - " (declare (in) bvec3 y))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x)\n" - " (declare (in) bvec4 y))\n" - " ())\n" - ")\n" - "\n" - "(function any\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function all\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bool\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function not\n" - " (signature bvec2\n" - " (parameters\n" - " (declare (in) bvec2 x))\n" - " ())\n" - "\n" - " (signature bvec3\n" - " (parameters\n" - " (declare (in) bvec3 x))\n" - " ())\n" - "\n" - " (signature bvec4\n" - " (parameters\n" - " (declare (in) bvec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function texture1D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) float coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture1DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec2 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) float coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -16583,46 +12164,19 @@ static const char prototypes_for_120_vert[] = " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function texture2D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -16630,607 +12184,825 @@ static const char prototypes_for_120_vert[] = " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function texture3D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture3DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function textureCube\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function shadow1D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2D\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow1DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function noise1\n" - " (signature float\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature float\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function noise2\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec2\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function noise3\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec3\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - "(function noise4\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) float x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec2 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec3 x))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) vec4 x))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_120_vert [] = { - builtin_abs, - builtin_acos, - builtin_all, - builtin_any, - builtin_asin, - builtin_atan, - builtin_ceil, - builtin_clamp, - builtin_cos, - builtin_cross, - builtin_degrees, - builtin_distance, - builtin_dot, - builtin_equal, - builtin_exp, - builtin_exp2, - builtin_faceforward, - builtin_floor, - builtin_fract, builtin_ftransform, - builtin_greaterThan, - builtin_greaterThanEqual, - builtin_inversesqrt, - builtin_length, - builtin_lessThan, - builtin_lessThanEqual, - builtin_log, - builtin_log2, - builtin_matrixCompMult, - builtin_max, - builtin_min, - builtin_mix, - builtin_mod, - builtin_noise1, - builtin_noise2, - builtin_noise3, - builtin_noise4, - builtin_normalize, - builtin_not, - builtin_notEqual, - builtin_outerProduct, - builtin_pow, - builtin_radians, - builtin_reflect, - builtin_refract, - builtin_shadow1D, builtin_shadow1DLod, - builtin_shadow1DProj, builtin_shadow1DProjLod, - builtin_shadow2D, builtin_shadow2DLod, - builtin_shadow2DProj, builtin_shadow2DProjLod, - builtin_sign, - builtin_sin, - builtin_smoothstep, - builtin_sqrt, - builtin_step, - builtin_tan, - builtin_texture1D, builtin_texture1DLod, - builtin_texture1DProj, builtin_texture1DProjLod, - builtin_texture2D, builtin_texture2DLod, - builtin_texture2DProj, builtin_texture2DProjLod, - builtin_texture3D, builtin_texture3DLod, - builtin_texture3DProj, builtin_texture3DProjLod, - builtin_textureCube, builtin_textureCubeLod, - builtin_transpose, }; static const char prototypes_for_130_frag[] = -{' ','(',' ','(','f','u','n','c','t','i','o','n',' ','r','a','d','i','a','n','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','v','e','c','4',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','e','g','r','e','e','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c', -'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')', -' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n' -,'g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c', -'l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r' -,'s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e' -,'c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n', -'a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c' -,'3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e' -,'c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e' -,'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','e','x','p','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','o','g','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','b','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e' -,'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','i','g','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','l','o','o','r',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v', -'e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','r','u','n','c',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(', -'f','u','n','c','t','i','o','n',' ','r','o','u','n','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ' -,'r','o','u','n','d','E','v','e','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','e','i','l',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r', -'e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r', -'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v', -'e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','o','d','f',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','f','l','o','a','t',' ','i',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','2',' ','i',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v', -'e','c','3',' ','i',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','4',' ','i',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p' -,'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n', -'a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','a','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p', -'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v', -'e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','l','a','m','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2', -' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ' -,'m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a' -,'r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v', -'e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','i','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p', -'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e', -'c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o' -,'a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','m','o','o','t','h','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','v','e','c','3',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','e','n','g','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','i','s','t','a','n','c','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l', -'o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','1',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','1',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','1',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m', -'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','1',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m', -'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','r','o','s','s',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','r','m','a','l','i','z','e',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','a','c','e','f','o','r','w','a','r','d',' ','(','s','i','g','n','a','t','u', -'r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c', -'l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','r','e','f','l','e','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t' -,'u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','r','e','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','a','t','r','i','x','C','o','m','p','M','u','l','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t' -,'u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a' -,'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e' -,'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','o','u','t','e','r','P','r','o','d','u','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r', -'e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c', -'4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','r','a','n','s','p','o','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ', -'m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e', -'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','m',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(', -'s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p' -,'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ', -'x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ', -'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(', -'\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','e','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ', -'b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t', -'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d', -'e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','t','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i', -'v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i', -'g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','n','y',' ','(', -'s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','l','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r', -'e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4', -' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t' -,'u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e' -,'r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e', -'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c', -'3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s' -,'a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g', -'n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r', -'r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g', -'n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p' -,'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3' -,'D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ', -'P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a' -,'r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t', -' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i', -'a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')', -' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s' -,'a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a', -'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s' -,'i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e', -'c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l' -,'e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c' -,'l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t', -' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m', -'p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e', -'r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c', -'4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v' -,'e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e', -'t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u' -,'r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r' -,'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d', -'e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c' -,'l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i', -'g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n' -,'a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s' -,'e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c' -,'l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b', -'i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a' -,'t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a' -,'t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s' -,'a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S' -,'h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s', -'a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a' -,'r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e', -'r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e' -,'c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ', -'o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o' -,'f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')', -'\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n', -')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a' -,'r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o' -,'a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a' -,'m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t', -'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d', -'e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e', -' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d', -'e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3' -,'D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ' -,'P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1' -,'D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(', -'s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(', -'\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a' -,'r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a' -,'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f' -,'f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p', -'l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e' -,'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f' -,'s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D' -,'A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v' -,'e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s', -'a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e' -,'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u', -'s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h' -,'a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e', -' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a', -'m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a' -,'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o' -,'f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a', -'m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a' -,'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f' -,'s','e','t',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p', -'l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v', -'e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c' -,'2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s' -,'i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r', -'2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l', -'o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i', -'g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c', -'2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r' -,'e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e', -'c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c' -,'l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n', -'a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e', -' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ', -'P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e', -'r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a', -'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d' -,'P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l' -,'e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t' -,'i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l', -'o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c' -,'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c' -,'2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a' -,'r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c' -,'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v' -,'e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a' -,'d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','o',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e' -,'c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a' -,'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a', -'m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e', -'c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1', -'D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w', -'2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o', -'w','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ', -'s','h','a','d','o','w','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c' -,'t','i','o','n',' ','s','h','a','d','o','w','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e' -,'c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','F','d','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r' -,'e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','F','d','y',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r', -'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','w','i','d','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','1',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','2',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e', -'c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','3',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i' -,'g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','4',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v' -,'e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ',')'} ; + "(\n" + "(function texture\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isamplerCube sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usamplerCube sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) samplerCubeShadow sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureOffset\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DArrayShadow samp)\n" + " (declare (in) vec3 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureProjOffset\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow s)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow s)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureCube\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function dFdx\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function dFdy\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function fwidth\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ())))" +; static const char *functions_for_130_frag [] = { + builtin_dFdx, + builtin_dFdy, + builtin_fwidth, + builtin_shadow1D, + builtin_shadow1DProj, + builtin_shadow2D, + builtin_shadow2DProj, + builtin_texture, + builtin_texture1D, + builtin_texture1DProj, + builtin_texture2D, + builtin_texture2DProj, + builtin_texture3D, + builtin_texture3DProj, + builtin_textureCube, + builtin_textureOffset, + builtin_textureProj, + builtin_textureProjOffset, +}; +static const char prototypes_for_130_glsl[] = +{'(', +'(','f','u','n','c','t','i','o','n',' ','r','a','d','i','a','n','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','d','e','g','r','e','e','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','e','x','p','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','o','g','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','b','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','i','g','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','f','l','o','o','r',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','r','u','n','c',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d','E','v','e','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','e','i','l',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','o','d','f',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','f','l','o','a','t',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','2',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','3',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','4',' ','i',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','a','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','l','a','m','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','i','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','o','o','l',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','a',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','m','o','o','t','h','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','s','n','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','s','i','n','f',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','e','n','g','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','d','i','s','t','a','n','c','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','1',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','d','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','r','o','s','s',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','r','m','a','l','i','z','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','f','a','c','e','f','o','r','w','a','r','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N','r','e','f',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','e','f','l','e','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','e','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','a','t','r','i','x','C','o','m','p','M','u','l','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','o','u','t','e','r','P','r','o','d','u','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','r','a','n','s','p','o','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','m',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','e','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','t','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','n','y',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','l','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','S','i','z','e',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','1',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','2',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','3',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','4',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',')'} ; +static const char *functions_for_130_glsl [] = { builtin_abs, builtin_acos, builtin_acosh, @@ -17245,8 +13017,6 @@ static const char *functions_for_130_frag [] = { builtin_cos, builtin_cosh, builtin_cross, - builtin_dFdx, - builtin_dFdy, builtin_degrees, builtin_distance, builtin_dot, @@ -17256,10 +13026,11 @@ static const char *functions_for_130_frag [] = { builtin_faceforward, builtin_floor, builtin_fract, - builtin_fwidth, builtin_greaterThan, builtin_greaterThanEqual, builtin_inversesqrt, + builtin_isinf, + builtin_isnan, builtin_length, builtin_lessThan, builtin_lessThanEqual, @@ -17328,313 +13099,771 @@ static const char *functions_for_130_frag [] = { builtin_textureProjGradOffset, builtin_textureProjLod, builtin_textureProjLodOffset, + builtin_textureProjOffset, + builtin_textureSize, builtin_transpose, builtin_trunc, }; static const char prototypes_for_130_vert[] = -{' ','(',' ','(','f','u','n','c','t','i','o','n',' ','r','a','d','i','a','n','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','v','e','c','4',' ','d','e','g','r','e','e','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','e','g','r','e','e','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c', -'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r','a','d','i','a','n','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')', -' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n' -,'g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c', -'l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r' -,'s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y','_','o','v','e','r','_','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e' -,'c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n', -'a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c' -,'3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e' -,'c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e' -,'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','e','x','p','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','o','g','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','b','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e' -,'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','i','g','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','l','o','o','r',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v', -'e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','r','u','n','c',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(', -'f','u','n','c','t','i','o','n',' ','r','o','u','n','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ' -,'r','o','u','n','d','E','v','e','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','e','i','l',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r', -'e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r', -'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v', -'e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','o','d','f',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','f','l','o','a','t',' ','i',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','2',' ','i',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v', -'e','c','3',' ','i',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','4',' ','i',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p' -,'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n', -'a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','a','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p', -'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v', -'e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','l','a','m','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2', -' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ' -,'m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a' -,'r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v', -'e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','i','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p', -'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e', -'c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o' -,'a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','m','o','o','t','h','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','v','e','c','3',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','e','n','g','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','i','s','t','a','n','c','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l', -'o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','1',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','1',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','1',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m', -'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','1',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','d','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m', -'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','c','r','o','s','s',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','r','m','a','l','i','z','e',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','t','r','a','n','s','f','o','r','m',' ','(','s','i','g','n','a','t','u','r', -'e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','f','a','c','e','f','o','r','w','a','r','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N','r','e','f',')','\n', -')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N','r','e','f',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','r','e','f','l','e','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e', -'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c', -'4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','r','e','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','m','a','t','r','i','x','C','o','m','p','M','u','l','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r', -'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'m','a','t','2','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a' -,'t','3','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','o','u','t','e','r','P','r','o','d','u','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m' -,'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e', -'c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'v','e','c','4',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','r','a','n','s','p','o','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e' -,'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','m',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','m',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c' -,'2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a' -,'r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ', -'x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2', -' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i', -'g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e', -'c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','e','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r' -,'s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e', -'c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')','\n',')',' ','(', -'\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','t','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ' -,'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e', -' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m' -,'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','n','y',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','a','l','l',' ','(','s','i','g','n','a','t','u','r', -'e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(', -'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')', -' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l' -,'e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e', -'c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u' -,'s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n', -'a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e', -'r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l' -,'o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n' -,')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c' -,'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m' -,'p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l' -,'e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A' -,'r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a' -,'y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e', -'c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ' -,'v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v' -,'e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s', -'a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e' -,'c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(', -'\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c' -,'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l' -,'e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c' -,'l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t', -' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i', -'a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ', -'u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r', -'s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a', -'m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s', -'a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ', -'P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d', -'e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D', -' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r', -'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o', -'a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2' -,'D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4', -' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d',' ','(','s','i','g','n','a','t','u','r', -'e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e' -,'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a', -'m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a' -,'t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(', -'s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u' -,'r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e', -'c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r', -'a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','O','f' -,'f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r', -'e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m' -,'e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m' -,'p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S' -,'h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r' -,'a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a', -'m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s' -,'a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p' -,'l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e' -,'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ' -,'b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ', -'s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(' -,'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e' -,'t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t' -,'e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l', -'a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m', -'p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(', -'s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c', -'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e', -'t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c', -'l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n', -')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e' -,'c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e' -,'c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l' -,'e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4', -' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')', -' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')', -' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a' -,'t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e', -'c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')', -' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r' -,'a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(', -'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')', -' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p', -'a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p' -,'l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v', -'e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l' -,'o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(', -'s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a', -'m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l' -,'o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i', -'g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l' -,'o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(' -,'i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c' -,'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e', -'r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c', -'l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a', -'t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')', -' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r' -,'s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v' -,'e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u' -,'s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d', -'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i', -'g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ' -,'d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c' -,'3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c' -,'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l' -,'a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ' -,'s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i' -,'v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ', -'d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c', -'l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a', -'m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e' -,'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d' -,'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d' -,'P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p' -,'l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a', -'m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d' -,'y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d', -'e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ', -'i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d' -,'e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u', -'r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r', -'e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(' -,'d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t', -'u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a', -'r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3' -,'D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')','\n',')',' ','(','\n',')',')',' ','(', -'s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','o',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r' -,'e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'v','e','c','2',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a', -'r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n' -,'c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ', -'f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n', -')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(', -'d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e', -'c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')', -'\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r', -'e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(', -'p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u' -,'n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e', -' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i', -'n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(', -'i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c' -,'l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e' -,'r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c', -'4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i' -,'n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','1',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(' -,'s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','2',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a', -'t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','3',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3', -' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ','(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','4',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e' -,'r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')','\n',')',' ','(','\n',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')','\n',')',' ','(','\n',')',')',' ',')',' ',')'} ; + "(\n" + "(function ftransform\n" + " (signature vec4\n" + " (parameters)\n" + " ())))" +; static const char *functions_for_130_vert [] = { + builtin_ftransform, +}; +static const char prototypes_for_140_frag[] = + "(\n" + "(function texture\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isamplerCube sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usamplerCube sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) samplerCubeShadow sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DArrayShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureOffset\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) float P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1DArray sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2DArray sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DArrayShadow samp)\n" + " (declare (in) vec3 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureProjOffset\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec2 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler1D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec3 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler2D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) isampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) usampler3D sampler)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec3 offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler1DShadow s)\n" + " (declare (in) vec4 P)\n" + " (declare (in) int offset)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow s)\n" + " (declare (in) vec4 P)\n" + " (declare (in) ivec2 offset)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) float coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec2 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function texture3DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler3D sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function textureCube\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerCube sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow1DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler1DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function shadow2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 coord)\n" + " (declare (in) float bias))\n" + " ()))\n" + "(function dFdx\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function dFdy\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ()))\n" + "(function fwidth\n" + " (signature float\n" + " (parameters\n" + " (declare (in) float p))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) vec2 p))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) vec3 p))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) vec4 p))\n" + " ())))" +; +static const char *functions_for_140_frag [] = { + builtin_dFdx, + builtin_dFdy, + builtin_fwidth, + builtin_shadow1D, + builtin_shadow1DProj, + builtin_shadow2D, + builtin_shadow2DProj, + builtin_texture, + builtin_texture1D, + builtin_texture1DProj, + builtin_texture2D, + builtin_texture2DProj, + builtin_texture3D, + builtin_texture3DProj, + builtin_textureCube, + builtin_textureOffset, + builtin_textureProj, + builtin_textureProjOffset, +}; +static const char prototypes_for_140_glsl[] = +{'(', +'(','f','u','n','c','t','i','o','n',' ','r','a','d','i','a','n','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','d','e','g','r','e','e','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','e','x','p','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','o','g','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','b','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','i','g','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','f','l','o','o','r',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','r','u','n','c',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d','E','v','e','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','e','i','l',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','o','d','f',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','f','l','o','a','t',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','2',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','3',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','4',' ','i',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','a','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','l','a','m','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','i','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','o','o','l',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','a',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','m','o','o','t','h','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','s','n','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','s','i','n','f',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','e','n','g','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','d','i','s','t','a','n','c','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','1',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','d','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','c','r','o','s','s',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','r','m','a','l','i','z','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','f','a','c','e','f','o','r','w','a','r','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N','r','e','f',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','e','f','l','e','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','r','e','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','m','a','t','r','i','x','C','o','m','p','M','u','l','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','o','u','t','e','r','P','r','o','d','u','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','r','a','n','s','p','o','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','m',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','e','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','t','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','n','y',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','a','l','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','S','i','z','e',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','B','u','f','f','e','r',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','B','u','f','f','e','r',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','B','u','f','f','e','r',' ','s','a','m','p','l','e','r',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','B','u','f','f','e','r',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','B','u','f','f','e','r',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','B','u','f','f','e','r',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f','s','e','t',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d','O','f','f','s','e','t',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','R','e','c','t',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','R','e','c','t','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','o','f','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','o',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','o',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','1',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','2',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','3',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')', +'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','4',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',')'} ; +static const char *functions_for_140_glsl [] = { builtin_abs, builtin_acos, builtin_acosh, @@ -17658,10 +13887,12 @@ static const char *functions_for_130_vert [] = { builtin_faceforward, builtin_floor, builtin_fract, - builtin_ftransform, builtin_greaterThan, builtin_greaterThanEqual, + builtin_inverse, builtin_inversesqrt, + builtin_isinf, + builtin_isnan, builtin_length, builtin_lessThan, builtin_lessThanEqual, @@ -17730,9 +13961,88 @@ static const char *functions_for_130_vert [] = { builtin_textureProjGradOffset, builtin_textureProjLod, builtin_textureProjLodOffset, + builtin_textureProjOffset, + builtin_textureSize, builtin_transpose, builtin_trunc, }; +static const char prototypes_for_ARB_shader_bit_encoding_glsl[] = + "(\n" + "(function floatBitsToInt\n" + " (signature int\n" + " (parameters\n" + " (declare (in) float value))\n" + " ())\n" + " (signature ivec2\n" + " (parameters\n" + " (declare (in) vec2 value))\n" + " ())\n" + " (signature ivec3\n" + " (parameters\n" + " (declare (in) vec3 value))\n" + " ())\n" + " (signature ivec4\n" + " (parameters\n" + " (declare (in) vec4 value))\n" + " ()))\n" + "(function floatBitsToUint\n" + " (signature uint\n" + " (parameters\n" + " (declare (in) float value))\n" + " ())\n" + " (signature uvec2\n" + " (parameters\n" + " (declare (in) vec2 value))\n" + " ())\n" + " (signature uvec3\n" + " (parameters\n" + " (declare (in) vec3 value))\n" + " ())\n" + " (signature uvec4\n" + " (parameters\n" + " (declare (in) vec4 value))\n" + " ()))\n" + "(function intBitsToFloat\n" + " (signature float\n" + " (parameters\n" + " (declare (in) int value))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) ivec2 value))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) ivec3 value))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) ivec4 value))\n" + " ()))\n" + "(function uintBitsToFloat\n" + " (signature float\n" + " (parameters\n" + " (declare (in) uint value))\n" + " ())\n" + " (signature vec2\n" + " (parameters\n" + " (declare (in) uvec2 value))\n" + " ())\n" + " (signature vec3\n" + " (parameters\n" + " (declare (in) uvec3 value))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) uvec4 value))\n" + " ())))" +; +static const char *functions_for_ARB_shader_bit_encoding_glsl [] = { + builtin_floatBitsToInt, + builtin_floatBitsToUint, + builtin_intBitsToFloat, + builtin_uintBitsToFloat, +}; static const char prototypes_for_ARB_shader_texture_lod_frag[] = "(\n" "(function texture1DLod\n" @@ -17741,9 +14051,7 @@ static const char prototypes_for_ARB_shader_texture_lod_frag[] = " (declare (in) sampler1D sampler)\n" " (declare (in) float coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -17751,24 +14059,19 @@ static const char prototypes_for_ARB_shader_texture_lod_frag[] = " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjLod\n" " (signature vec4\n" " (parameters\n" @@ -17776,283 +14079,76 @@ static const char prototypes_for_ARB_shader_texture_lod_frag[] = " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DShadow sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DShadow sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - "(function texture1DGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) float P)\n" - " (declare (in) float dPdx)\n" - " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture1DProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec2 P)\n" - " (declare (in) float dPdx)\n" - " (declare (in) float dPdy))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1D sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) float dPdx)\n" - " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec2 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2D sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture3DGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) vec3 dPdx)\n" - " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture3DProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler3D sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) vec3 dPdx)\n" - " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function textureCubeGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) samplerCube sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) vec3 dPdx)\n" - " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function shadow1DGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) float dPdx)\n" - " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function shadow1DProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler1DShadow sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) float dPdx)\n" - " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DShadow sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DRectGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" - " (declare (in) vec2 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DRectProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DRectGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" - " (declare (in) vec3 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DRectProjGradARB\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" - " (declare (in) vec4 P)\n" - " (declare (in) vec2 dPdx)\n" - " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_ARB_shader_texture_lod_frag [] = { - builtin_shadow1DGradARB, builtin_shadow1DLod, - builtin_shadow1DProjGradARB, builtin_shadow1DProjLod, - builtin_shadow2DGradARB, builtin_shadow2DLod, - builtin_shadow2DProjGradARB, builtin_shadow2DProjLod, - builtin_shadow2DRectGradARB, - builtin_shadow2DRectProjGradARB, - builtin_texture1DGradARB, builtin_texture1DLod, - builtin_texture1DProjGradARB, builtin_texture1DProjLod, - builtin_texture2DGradARB, builtin_texture2DLod, - builtin_texture2DProjGradARB, builtin_texture2DProjLod, - builtin_texture2DRectGradARB, - builtin_texture2DRectProjGradARB, - builtin_texture3DGradARB, builtin_texture3DLod, - builtin_texture3DProjGradARB, builtin_texture3DProjLod, - builtin_textureCubeGradARB, builtin_textureCubeLod, }; -static const char prototypes_for_ARB_shader_texture_lod_vert[] = +static const char prototypes_for_ARB_shader_texture_lod_glsl[] = "(\n" "(function texture1DGradARB\n" " (signature vec4\n" @@ -18061,9 +14157,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) float P)\n" " (declare (in) float dPdx)\n" " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18072,16 +14166,13 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) float dPdx)\n" " (declare (in) float dPdy))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1D sampler)\n" " (declare (in) vec4 P)\n" " (declare (in) float dPdx)\n" " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18089,9 +14180,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec2 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18100,16 +14189,13 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18117,9 +14203,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec3 P)\n" " (declare (in) vec3 dPdx)\n" " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18127,9 +14211,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec4 P)\n" " (declare (in) vec3 dPdx)\n" " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18137,9 +14219,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec3 P)\n" " (declare (in) vec3 dPdx)\n" " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18147,9 +14227,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec3 P)\n" " (declare (in) float dPdx)\n" " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18157,9 +14235,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec4 P)\n" " (declare (in) float dPdx)\n" " (declare (in) float dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18167,9 +14243,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec3 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18177,9 +14251,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec4 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DRectGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18187,9 +14259,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec2 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DRectProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18198,16 +14268,13 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DRect sampler)\n" " (declare (in) vec4 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DRectGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18215,9 +14282,7 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec3 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DRectProjGradARB\n" " (signature vec4\n" " (parameters\n" @@ -18225,12 +14290,9 @@ static const char prototypes_for_ARB_shader_texture_lod_vert[] = " (declare (in) vec4 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; -static const char *functions_for_ARB_shader_texture_lod_vert [] = { +static const char *functions_for_ARB_shader_texture_lod_glsl [] = { builtin_shadow1DGradARB, builtin_shadow1DProjGradARB, builtin_shadow2DGradARB, @@ -18247,97 +14309,39 @@ static const char *functions_for_ARB_shader_texture_lod_vert [] = { builtin_texture3DProjGradARB, builtin_textureCubeGradARB, }; -static const char prototypes_for_ARB_texture_rectangle_frag[] = +static const char prototypes_for_ARB_texture_rectangle_glsl[] = "(\n" "(function texture2DRect\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DRect sampler)\n" " (declare (in) vec2 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DRectProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DRect sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DRect sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DRect\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DRectShadow sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DRectProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DRectShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; -static const char *functions_for_ARB_texture_rectangle_frag [] = { - builtin_shadow2DRect, - builtin_shadow2DRectProj, - builtin_texture2DRect, - builtin_texture2DRectProj, -}; -static const char prototypes_for_ARB_texture_rectangle_vert[] = - "(\n" - "(function texture2DRect\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" - " (declare (in) vec2 coord))\n" - " ())\n" - ")\n" - "\n" - "(function texture2DRectProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - "\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRect sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DRect\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" - " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" - "(function shadow2DRectProj\n" - " (signature vec4\n" - " (parameters\n" - " (declare (in) sampler2DRectShadow sampler)\n" - " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - ")" -; -static const char *functions_for_ARB_texture_rectangle_vert [] = { +static const char *functions_for_ARB_texture_rectangle_glsl [] = { builtin_shadow2DRect, builtin_shadow2DRectProj, builtin_texture2DRect, @@ -18351,9 +14355,7 @@ static const char prototypes_for_EXT_shader_texture_lod_frag[] = " (declare (in) sampler2D sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjLodEXT\n" " (signature vec4\n" " (parameters\n" @@ -18361,24 +14363,19 @@ static const char prototypes_for_EXT_shader_texture_lod_frag[] = " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeLodEXT\n" " (signature vec4\n" " (parameters\n" " (declare (in) samplerCube sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DGradEXT\n" " (signature vec4\n" " (parameters\n" @@ -18386,9 +14383,7 @@ static const char prototypes_for_EXT_shader_texture_lod_frag[] = " (declare (in) vec2 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjGradEXT\n" " (signature vec4\n" " (parameters\n" @@ -18397,16 +14392,13 @@ static const char prototypes_for_EXT_shader_texture_lod_frag[] = " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeGradEXT\n" " (signature vec4\n" " (parameters\n" @@ -18414,10 +14406,7 @@ static const char prototypes_for_EXT_shader_texture_lod_frag[] = " (declare (in) vec3 P)\n" " (declare (in) vec3 dPdx)\n" " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_EXT_shader_texture_lod_frag [] = { builtin_texture2DGradEXT, @@ -18436,9 +14425,7 @@ static const char prototypes_for_EXT_shader_texture_lod_vert[] = " (declare (in) vec2 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DProjGradEXT\n" " (signature vec4\n" " (parameters\n" @@ -18447,16 +14434,13 @@ static const char prototypes_for_EXT_shader_texture_lod_vert[] = " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2D sampler)\n" " (declare (in) vec4 P)\n" " (declare (in) vec2 dPdx)\n" " (declare (in) vec2 dPdy))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function textureCubeGradEXT\n" " (signature vec4\n" " (parameters\n" @@ -18464,16 +14448,32 @@ static const char prototypes_for_EXT_shader_texture_lod_vert[] = " (declare (in) vec3 P)\n" " (declare (in) vec3 dPdx)\n" " (declare (in) vec3 dPdy))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_EXT_shader_texture_lod_vert [] = { builtin_texture2DGradEXT, builtin_texture2DProjGradEXT, builtin_textureCubeGradEXT, }; +static const char prototypes_for_EXT_shadow_samplers_frag[] = + "(\n" + "(function shadow2DEXT\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec3 coord))\n" + " ()))\n" + "(function shadow2DProjEXT\n" + " (signature float\n" + " (parameters\n" + " (declare (in) sampler2DShadow sampler)\n" + " (declare (in) vec4 coord))\n" + " ())))" +; +static const char *functions_for_EXT_shadow_samplers_frag [] = { + builtin_shadow2DEXT, + builtin_shadow2DProjEXT, +}; static const char prototypes_for_EXT_texture_array_frag[] = "(\n" "(function texture1DArray\n" @@ -18482,54 +14482,42 @@ static const char prototypes_for_EXT_texture_array_frag[] = " (declare (in) sampler1DArray sampler)\n" " (declare (in) vec2 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DArray sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DArray\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DArray sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DArray sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DArray\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DArrayShadow sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DArrayShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DArray\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DArrayShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_EXT_texture_array_frag [] = { builtin_shadow1DArray, @@ -18544,61 +14532,46 @@ static const char prototypes_for_EXT_texture_array_vert[] = " (parameters\n" " (declare (in) sampler1DArray sampler)\n" " (declare (in) vec2 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture1DArrayLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DArray sampler)\n" " (declare (in) vec2 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DArray\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DArray sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture2DArrayLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DArray sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DArray\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DArrayShadow sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow1DArrayLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler1DArrayShadow sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function shadow2DArray\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler2DArrayShadow sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_EXT_texture_array_vert [] = { builtin_shadow1DArray, @@ -18609,6 +14582,30 @@ static const char *functions_for_EXT_texture_array_vert [] = { builtin_texture2DArray, builtin_texture2DArrayLod, }; +static const char prototypes_for_OES_EGL_image_external_glsl[] = + "(\n" + "(function texture2D\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerExternalOES sampler)\n" + " (declare (in) vec2 coord))\n" + " ()))\n" + "(function texture2DProj\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerExternalOES sampler)\n" + " (declare (in) vec3 coord))\n" + " ())\n" + " (signature vec4\n" + " (parameters\n" + " (declare (in) samplerExternalOES sampler)\n" + " (declare (in) vec4 coord))\n" + " ())))" +; +static const char *functions_for_OES_EGL_image_external_glsl [] = { + builtin_texture2D, + builtin_texture2DProj, +}; static const char prototypes_for_OES_standard_derivatives_frag[] = "(\n" "(function dFdx\n" @@ -18616,68 +14613,52 @@ static const char prototypes_for_OES_standard_derivatives_frag[] = " (parameters\n" " (declare (in) float p))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 p))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 p))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function dFdy\n" " (signature float\n" " (parameters\n" " (declare (in) float p))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 p))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 p))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function fwidth\n" " (signature float\n" " (parameters\n" " (declare (in) float p))\n" " ())\n" - "\n" " (signature vec2\n" " (parameters\n" " (declare (in) vec2 p))\n" " ())\n" - "\n" " (signature vec3\n" " (parameters\n" " (declare (in) vec3 p))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) vec4 p))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_OES_standard_derivatives_frag [] = { builtin_dFdx, @@ -18692,31 +14673,24 @@ static const char prototypes_for_OES_texture_3D_frag[] = " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord))\n" " ())\n" - "\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float bias))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_OES_texture_3D_frag [] = { builtin_texture3D, @@ -18729,36 +14703,27 @@ static const char prototypes_for_OES_texture_3D_vert[] = " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProj\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec3 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" + " ()))\n" "(function texture3DProjLod\n" " (signature vec4\n" " (parameters\n" " (declare (in) sampler3D sampler)\n" " (declare (in) vec4 coord)\n" " (declare (in) float lod))\n" - " ())\n" - ")\n" - "\n" - ")" + " ())))" ; static const char *functions_for_OES_texture_3D_vert [] = { builtin_texture3D, @@ -18766,9 +14731,9 @@ static const char *functions_for_OES_texture_3D_vert [] = { builtin_texture3DProj, builtin_texture3DProjLod, }; -static gl_shader *builtin_profiles[19]; +static gl_shader *builtin_profiles[27]; -void *builtin_mem_ctx = NULL; +static void *builtin_mem_ctx = NULL; void _mesa_glsl_release_functions(void) @@ -18800,13 +14765,15 @@ _mesa_read_profile(struct _mesa_glsl_parse_state *state, void _mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state) { + /* If we've already initialized the built-ins, bail early. */ + if (state->num_builtins_to_link > 0) + return; + if (builtin_mem_ctx == NULL) { builtin_mem_ctx = ralloc_context(NULL); // "GLSL built-in functions" memset(&builtin_profiles, 0, sizeof(builtin_profiles)); } - state->num_builtins_to_link = 0; - if (state->target == fragment_shader && state->language_version == 100) { _mesa_read_profile(state, 0, prototypes_for_100_frag, @@ -18814,127 +14781,183 @@ _mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state) Elements(functions_for_100_frag)); } - if (state->target == vertex_shader && state->language_version == 100) { + if (state->language_version == 100) { _mesa_read_profile(state, 1, + prototypes_for_100_glsl, + functions_for_100_glsl, + Elements(functions_for_100_glsl)); + } + + if (state->target == vertex_shader && state->language_version == 100) { + _mesa_read_profile(state, 2, prototypes_for_100_vert, functions_for_100_vert, Elements(functions_for_100_vert)); } if (state->target == fragment_shader && state->language_version == 110) { - _mesa_read_profile(state, 2, + _mesa_read_profile(state, 3, prototypes_for_110_frag, functions_for_110_frag, Elements(functions_for_110_frag)); } + if (state->language_version == 110) { + _mesa_read_profile(state, 4, + prototypes_for_110_glsl, + functions_for_110_glsl, + Elements(functions_for_110_glsl)); + } + if (state->target == vertex_shader && state->language_version == 110) { - _mesa_read_profile(state, 3, + _mesa_read_profile(state, 5, prototypes_for_110_vert, functions_for_110_vert, Elements(functions_for_110_vert)); } if (state->target == fragment_shader && state->language_version == 120) { - _mesa_read_profile(state, 4, + _mesa_read_profile(state, 6, prototypes_for_120_frag, functions_for_120_frag, Elements(functions_for_120_frag)); } + if (state->language_version == 120) { + _mesa_read_profile(state, 7, + prototypes_for_120_glsl, + functions_for_120_glsl, + Elements(functions_for_120_glsl)); + } + if (state->target == vertex_shader && state->language_version == 120) { - _mesa_read_profile(state, 5, + _mesa_read_profile(state, 8, prototypes_for_120_vert, functions_for_120_vert, Elements(functions_for_120_vert)); } if (state->target == fragment_shader && state->language_version == 130) { - _mesa_read_profile(state, 6, + _mesa_read_profile(state, 9, prototypes_for_130_frag, functions_for_130_frag, Elements(functions_for_130_frag)); } + if (state->language_version == 130) { + _mesa_read_profile(state, 10, + prototypes_for_130_glsl, + functions_for_130_glsl, + Elements(functions_for_130_glsl)); + } + if (state->target == vertex_shader && state->language_version == 130) { - _mesa_read_profile(state, 7, + _mesa_read_profile(state, 11, prototypes_for_130_vert, functions_for_130_vert, Elements(functions_for_130_vert)); } + if (state->target == fragment_shader && state->language_version == 140) { + _mesa_read_profile(state, 12, + prototypes_for_140_frag, + functions_for_140_frag, + Elements(functions_for_140_frag)); + } + + if (state->language_version == 140) { + _mesa_read_profile(state, 13, + prototypes_for_140_glsl, + functions_for_140_glsl, + Elements(functions_for_140_glsl)); + } + + if (state->ARB_shader_bit_encoding_enable) { + _mesa_read_profile(state, 14, + prototypes_for_ARB_shader_bit_encoding_glsl, + functions_for_ARB_shader_bit_encoding_glsl, + Elements(functions_for_ARB_shader_bit_encoding_glsl)); + } + if (state->target == fragment_shader && state->ARB_shader_texture_lod_enable) { - _mesa_read_profile(state, 8, + _mesa_read_profile(state, 15, prototypes_for_ARB_shader_texture_lod_frag, functions_for_ARB_shader_texture_lod_frag, Elements(functions_for_ARB_shader_texture_lod_frag)); } - if (state->target == vertex_shader && state->ARB_shader_texture_lod_enable) { - _mesa_read_profile(state, 9, - prototypes_for_ARB_shader_texture_lod_vert, - functions_for_ARB_shader_texture_lod_vert, - Elements(functions_for_ARB_shader_texture_lod_vert)); + if (state->ARB_shader_texture_lod_enable) { + _mesa_read_profile(state, 16, + prototypes_for_ARB_shader_texture_lod_glsl, + functions_for_ARB_shader_texture_lod_glsl, + Elements(functions_for_ARB_shader_texture_lod_glsl)); } - if (state->target == fragment_shader && state->ARB_texture_rectangle_enable) { - _mesa_read_profile(state, 10, - prototypes_for_ARB_texture_rectangle_frag, - functions_for_ARB_texture_rectangle_frag, - Elements(functions_for_ARB_texture_rectangle_frag)); - } - - if (state->target == vertex_shader && state->ARB_texture_rectangle_enable) { - _mesa_read_profile(state, 11, - prototypes_for_ARB_texture_rectangle_vert, - functions_for_ARB_texture_rectangle_vert, - Elements(functions_for_ARB_texture_rectangle_vert)); + if (state->ARB_texture_rectangle_enable) { + _mesa_read_profile(state, 17, + prototypes_for_ARB_texture_rectangle_glsl, + functions_for_ARB_texture_rectangle_glsl, + Elements(functions_for_ARB_texture_rectangle_glsl)); } if (state->target == fragment_shader && state->EXT_shader_texture_lod_enable) { - _mesa_read_profile(state, 12, + _mesa_read_profile(state, 18, prototypes_for_EXT_shader_texture_lod_frag, functions_for_EXT_shader_texture_lod_frag, Elements(functions_for_EXT_shader_texture_lod_frag)); } if (state->target == vertex_shader && state->EXT_shader_texture_lod_enable) { - _mesa_read_profile(state, 13, + _mesa_read_profile(state, 19, prototypes_for_EXT_shader_texture_lod_vert, functions_for_EXT_shader_texture_lod_vert, Elements(functions_for_EXT_shader_texture_lod_vert)); } + if (state->target == fragment_shader && state->EXT_shadow_samplers_enable) { + _mesa_read_profile(state, 20, + prototypes_for_EXT_shadow_samplers_frag, + functions_for_EXT_shadow_samplers_frag, + Elements(functions_for_EXT_shadow_samplers_frag)); + } + if (state->target == fragment_shader && state->EXT_texture_array_enable) { - _mesa_read_profile(state, 14, + _mesa_read_profile(state, 21, prototypes_for_EXT_texture_array_frag, functions_for_EXT_texture_array_frag, Elements(functions_for_EXT_texture_array_frag)); } if (state->target == vertex_shader && state->EXT_texture_array_enable) { - _mesa_read_profile(state, 15, + _mesa_read_profile(state, 22, prototypes_for_EXT_texture_array_vert, functions_for_EXT_texture_array_vert, Elements(functions_for_EXT_texture_array_vert)); } + if (state->OES_EGL_image_external_enable) { + _mesa_read_profile(state, 23, + prototypes_for_OES_EGL_image_external_glsl, + functions_for_OES_EGL_image_external_glsl, + Elements(functions_for_OES_EGL_image_external_glsl)); + } + if (state->target == fragment_shader && state->OES_standard_derivatives_enable) { - _mesa_read_profile(state, 16, + _mesa_read_profile(state, 24, prototypes_for_OES_standard_derivatives_frag, functions_for_OES_standard_derivatives_frag, Elements(functions_for_OES_standard_derivatives_frag)); } if (state->target == fragment_shader && state->OES_texture_3D_enable) { - _mesa_read_profile(state, 17, + _mesa_read_profile(state, 25, prototypes_for_OES_texture_3D_frag, functions_for_OES_texture_3D_frag, Elements(functions_for_OES_texture_3D_frag)); } if (state->target == vertex_shader && state->OES_texture_3D_enable) { - _mesa_read_profile(state, 18, + _mesa_read_profile(state, 26, prototypes_for_OES_texture_3D_vert, functions_for_OES_texture_3D_vert, Elements(functions_for_OES_texture_3D_vert)); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtin_stubs.cpp b/3rdparty/glsl-optimizer/src/glsl/builtin_stubs.cpp index 00b329491..dfa5d324e 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtin_stubs.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/builtin_stubs.cpp @@ -35,4 +35,5 @@ _mesa_glsl_release_functions(void) void _mesa_glsl_initialize_functions(_mesa_glsl_parse_state *state) { + (void) state; } diff --git a/3rdparty/glsl-optimizer/src/glsl/builtin_types.h b/3rdparty/glsl-optimizer/src/glsl/builtin_types.h index 58b9a8127..d75c56261 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtin_types.h +++ b/3rdparty/glsl-optimizer/src/glsl/builtin_types.h @@ -63,7 +63,12 @@ const glsl_type glsl_type::builtin_core_types[] = { }; const glsl_type *const glsl_type::bool_type = & builtin_core_types[0]; +const glsl_type *const glsl_type::bvec2_type = & builtin_core_types[1]; +const glsl_type *const glsl_type::bvec3_type = & builtin_core_types[2]; +const glsl_type *const glsl_type::bvec4_type = & builtin_core_types[3]; const glsl_type *const glsl_type::int_type = & builtin_core_types[4]; +const glsl_type *const glsl_type::ivec2_type = & builtin_core_types[5]; +const glsl_type *const glsl_type::ivec3_type = & builtin_core_types[6]; const glsl_type *const glsl_type::ivec4_type = & builtin_core_types[7]; const glsl_type *const glsl_type::float_type = & builtin_core_types[8]; const glsl_type *const glsl_type::vec2_type = & builtin_core_types[9]; @@ -259,6 +264,18 @@ const glsl_type *const glsl_type::uvec3_type = & builtin_130_types[2]; const glsl_type *const glsl_type::uvec4_type = & builtin_130_types[3]; /*@}*/ + +/** \name Types added in GLSL 1.40 + */ +/*@{*/ +const glsl_type glsl_type::builtin_140_types[] = { + glsl_type(GL_INT_SAMPLER_2D_RECT, + GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT, "isampler2DRect"), + glsl_type(GL_UNSIGNED_INT_SAMPLER_2D_RECT, + GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT, "usampler2DRect"), +}; +/*@}*/ + /** \name Sampler types added by GL_ARB_texture_rectangle */ /*@{*/ @@ -300,3 +317,13 @@ const glsl_type glsl_type::builtin_EXT_texture_buffer_object_types[] = { GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT, "usamplerBuffer"), }; /*@}*/ + +/** \name Sampler types added by GL_OES_EGL_image_external + */ +/*@{*/ + +const glsl_type glsl_type::builtin_OES_EGL_image_external_types[] = { + glsl_type(GL_SAMPLER_EXTERNAL_OES, + GLSL_SAMPLER_DIM_EXTERNAL, 0, 0, GLSL_TYPE_FLOAT, "samplerExternalOES"), +}; +/*@}*/ diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_variable.cpp b/3rdparty/glsl-optimizer/src/glsl/builtin_variables.cpp similarity index 58% rename from 3rdparty/glsl-optimizer/src/glsl/ir_variable.cpp rename to 3rdparty/glsl-optimizer/src/glsl/builtin_variables.cpp index 084439ffa..a03e0e0b8 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_variable.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/builtin_variables.cpp @@ -24,12 +24,25 @@ #include "ir.h" #include "glsl_parser_extras.h" #include "glsl_symbol_table.h" -#include "builtin_variables.h" -#include "main/uniforms.h" +#include "main/core.h" #include "program/prog_parameter.h" #include "program/prog_statevars.h" #include "program/prog_instruction.h" +struct gl_builtin_uniform_element { + const char *field; + int tokens[STATE_LENGTH]; + int swizzle; +}; + +struct gl_builtin_uniform_desc { + const char *name; + struct gl_builtin_uniform_element *elements; + unsigned int num_elements; +}; + + + static void generate_ARB_draw_buffers_variables(exec_list *, struct _mesa_glsl_parse_state *, bool, _mesa_glsl_parser_targets); @@ -39,6 +52,92 @@ generate_ARB_draw_instanced_variables(exec_list *, struct _mesa_glsl_parse_state *, bool, _mesa_glsl_parser_targets); +struct builtin_variable { + enum ir_variable_mode mode; + int slot; + const char *type; + const char *name; + glsl_precision prec; +}; + +static const builtin_variable builtin_core_vs_variables[] = { + { ir_var_out, VERT_RESULT_HPOS, "vec4", "gl_Position", glsl_precision_high }, + { ir_var_out, VERT_RESULT_PSIZ, "float", "gl_PointSize", glsl_precision_medium }, +}; + +static const builtin_variable builtin_core_fs_variables[] = { + { ir_var_in, FRAG_ATTRIB_WPOS, "vec4", "gl_FragCoord", glsl_precision_medium }, + { ir_var_in, FRAG_ATTRIB_FACE, "bool", "gl_FrontFacing", glsl_precision_low }, + { ir_var_out, FRAG_RESULT_COLOR, "vec4", "gl_FragColor", glsl_precision_medium }, +}; + +static const builtin_variable builtin_100ES_fs_variables[] = { + { ir_var_in, FRAG_ATTRIB_PNTC, "vec2", "gl_PointCoord", glsl_precision_medium }, +}; + +static const builtin_variable builtin_110_fs_variables[] = { + { ir_var_out, FRAG_RESULT_DEPTH, "float", "gl_FragDepth", glsl_precision_medium }, +}; + +static const builtin_variable builtin_110_deprecated_fs_variables[] = { + { ir_var_in, FRAG_ATTRIB_COL0, "vec4", "gl_Color", glsl_precision_medium }, + { ir_var_in, FRAG_ATTRIB_COL1, "vec4", "gl_SecondaryColor", glsl_precision_medium }, + { ir_var_in, FRAG_ATTRIB_FOGC, "float", "gl_FogFragCoord", glsl_precision_medium }, +}; + +static const builtin_variable builtin_110_deprecated_vs_variables[] = { + { ir_var_in, VERT_ATTRIB_POS, "vec4", "gl_Vertex", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_NORMAL, "vec3", "gl_Normal", glsl_precision_medium }, + { ir_var_in, VERT_ATTRIB_COLOR0, "vec4", "gl_Color", glsl_precision_medium }, + { ir_var_in, VERT_ATTRIB_COLOR1, "vec4", "gl_SecondaryColor", glsl_precision_medium }, + { ir_var_in, VERT_ATTRIB_TEX0, "vec4", "gl_MultiTexCoord0", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX1, "vec4", "gl_MultiTexCoord1", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX2, "vec4", "gl_MultiTexCoord2", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX3, "vec4", "gl_MultiTexCoord3", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX4, "vec4", "gl_MultiTexCoord4", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX5, "vec4", "gl_MultiTexCoord5", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX6, "vec4", "gl_MultiTexCoord6", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_TEX7, "vec4", "gl_MultiTexCoord7", glsl_precision_high }, + { ir_var_in, VERT_ATTRIB_FOG, "float", "gl_FogCoord", glsl_precision_high }, + { ir_var_out, VERT_RESULT_CLIP_VERTEX, "vec4", "gl_ClipVertex", glsl_precision_high }, + { ir_var_out, VERT_RESULT_COL0, "vec4", "gl_FrontColor", glsl_precision_medium }, + { ir_var_out, VERT_RESULT_BFC0, "vec4", "gl_BackColor", glsl_precision_medium }, + { ir_var_out, VERT_RESULT_COL1, "vec4", "gl_FrontSecondaryColor", glsl_precision_medium }, + { ir_var_out, VERT_RESULT_BFC1, "vec4", "gl_BackSecondaryColor", glsl_precision_medium }, + { ir_var_out, VERT_RESULT_FOGC, "float", "gl_FogFragCoord", glsl_precision_medium }, +}; + +static const builtin_variable builtin_120_fs_variables[] = { + { ir_var_in, FRAG_ATTRIB_PNTC, "vec2", "gl_PointCoord", glsl_precision_medium }, +}; + +static const builtin_variable builtin_130_vs_variables[] = { + { ir_var_system_value, SYSTEM_VALUE_VERTEX_ID, "int", "gl_VertexID", glsl_precision_high }, +}; + +static const builtin_variable builtin_110_deprecated_uniforms[] = { + { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrix", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrix", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrix", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat3", "gl_NormalMatrix", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrixInverse", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrixInverse", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrixInverse", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrixTranspose", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrixTranspose", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrixTranspose", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrixInverseTranspose", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrixInverseTranspose", glsl_precision_undefined }, + { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrixInverseTranspose", glsl_precision_undefined }, + { ir_var_uniform, -1, "float", "gl_NormalScale", glsl_precision_undefined }, + { ir_var_uniform, -1, "gl_LightModelParameters", "gl_LightModel", glsl_precision_undefined}, + + /* Mesa-internal ATI_envmap_bumpmap state. */ + { ir_var_uniform, -1, "vec2", "gl_BumpRotMatrix0MESA", glsl_precision_undefined}, + { ir_var_uniform, -1, "vec2", "gl_BumpRotMatrix1MESA", glsl_precision_undefined}, + { ir_var_uniform, -1, "vec4", "gl_FogParamsOptimizedMESA", glsl_precision_undefined}, +}; + static struct gl_builtin_uniform_element gl_DepthRange_elements[] = { {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX}, {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY}, @@ -166,18 +265,26 @@ static struct gl_builtin_uniform_element gl_NormalScale_elements[] = { {NULL, {STATE_NORMAL_SCALE}, SWIZZLE_XXXX}, }; -static struct gl_builtin_uniform_element gl_MESABumpRotMatrix0_elements[] = { +static struct gl_builtin_uniform_element gl_BumpRotMatrix0MESA_elements[] = { {NULL, {STATE_INTERNAL, STATE_ROT_MATRIX_0}, SWIZZLE_XYZW}, }; -static struct gl_builtin_uniform_element gl_MESABumpRotMatrix1_elements[] = { +static struct gl_builtin_uniform_element gl_BumpRotMatrix1MESA_elements[] = { {NULL, {STATE_INTERNAL, STATE_ROT_MATRIX_1}, SWIZZLE_XYZW}, }; -static struct gl_builtin_uniform_element gl_MESAFogParamsOptimized_elements[] = { +static struct gl_builtin_uniform_element gl_FogParamsOptimizedMESA_elements[] = { {NULL, {STATE_INTERNAL, STATE_FOG_PARAMS_OPTIMIZED}, SWIZZLE_XYZW}, }; +static struct gl_builtin_uniform_element gl_CurrentAttribVertMESA_elements[] = { + {NULL, {STATE_INTERNAL, STATE_CURRENT_ATTRIB, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_CurrentAttribFragMESA_elements[] = { + {NULL, {STATE_INTERNAL, STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, 0}, SWIZZLE_XYZW}, +}; + #define MATRIX(name, statevar, modifier) \ static struct gl_builtin_uniform_element name ## _elements[] = { \ { NULL, { statevar, 0, 0, 0, modifier}, SWIZZLE_XYZW }, \ @@ -224,18 +331,18 @@ MATRIX(gl_TextureMatrixInverseTranspose, static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = { { NULL, { STATE_MODELVIEW_MATRIX, 0, 0, 0, STATE_MATRIX_INVERSE}, - SWIZZLE_XYZW }, + MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z) }, { NULL, { STATE_MODELVIEW_MATRIX, 0, 1, 1, STATE_MATRIX_INVERSE}, - SWIZZLE_XYZW }, + MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z) }, { NULL, { STATE_MODELVIEW_MATRIX, 0, 2, 2, STATE_MATRIX_INVERSE}, - SWIZZLE_XYZW }, + MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z) }, }; #undef MATRIX #define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)} -const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { +static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { STATEVAR(gl_DepthRange), STATEVAR(gl_ClipPlane), STATEVAR(gl_Point), @@ -281,9 +388,11 @@ const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { STATEVAR(gl_NormalMatrix), STATEVAR(gl_NormalScale), - STATEVAR(gl_MESABumpRotMatrix0), - STATEVAR(gl_MESABumpRotMatrix1), - STATEVAR(gl_MESAFogParamsOptimized), + STATEVAR(gl_BumpRotMatrix0MESA), + STATEVAR(gl_BumpRotMatrix1MESA), + STATEVAR(gl_FogParamsOptimizedMESA), + STATEVAR(gl_CurrentAttribVertMESA), + STATEVAR(gl_CurrentAttribFragMESA), {NULL, NULL, 0} }; @@ -291,9 +400,9 @@ const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { static ir_variable * add_variable(exec_list *instructions, glsl_symbol_table *symtab, const char *name, const glsl_type *type, - enum ir_variable_mode mode, int slot) + enum ir_variable_mode mode, int slot, glsl_precision prec = glsl_precision_undefined) { - ir_variable *var = new(symtab) ir_variable(type, name, mode, glsl_precision_undefined); + ir_variable *var = new(symtab) ir_variable(type, name, mode, prec); switch (var->mode) { case ir_var_auto: @@ -313,6 +422,7 @@ add_variable(exec_list *instructions, glsl_symbol_table *symtab, var->location = slot; var->explicit_location = (slot >= 0); + var->explicit_index = 0; /* Once the variable is created an initialized, add it to the symbol table * and add the declaration to the IR stream. @@ -325,10 +435,10 @@ add_variable(exec_list *instructions, glsl_symbol_table *symtab, static ir_variable * add_uniform(exec_list *instructions, glsl_symbol_table *symtab, - const char *name, const glsl_type *type) + const char *name, const glsl_type *type, glsl_precision prec = glsl_precision_undefined) { ir_variable *const uni = - add_variable(instructions, symtab, name, type, ir_var_uniform, -1); + add_variable(instructions, symtab, name, type, ir_var_uniform, -1, prec); unsigned i; for (i = 0; _mesa_builtin_uniform_desc[i].name != NULL; i++) { @@ -355,7 +465,12 @@ add_uniform(exec_list *instructions, glsl_symbol_table *symtab, memcpy(slots->tokens, element->tokens, sizeof(element->tokens)); if (type->is_array()) { - slots->tokens[1] = a; + if (strcmp(name, "gl_CurrentAttribVertMESA") == 0 || + strcmp(name, "gl_CurrentAttribFragMESA") == 0) { + slots->tokens[2] = a; + } else { + slots->tokens[1] = a; + } } slots->swizzle = element->swizzle; @@ -368,7 +483,7 @@ add_uniform(exec_list *instructions, glsl_symbol_table *symtab, static void add_builtin_variable(exec_list *instructions, glsl_symbol_table *symtab, - const builtin_variable *proto) + const builtin_variable *proto, bool use_precision) { /* Create a new variable declaration from the description supplied by * the caller. @@ -378,21 +493,24 @@ add_builtin_variable(exec_list *instructions, glsl_symbol_table *symtab, assert(type != NULL); if (proto->mode == ir_var_uniform) { - add_uniform(instructions, symtab, proto->name, type); + add_uniform(instructions, symtab, proto->name, type, use_precision ? proto->prec : glsl_precision_undefined); } else { add_variable(instructions, symtab, proto->name, type, proto->mode, - proto->slot); + proto->slot, use_precision ? proto->prec : glsl_precision_undefined); } } -static void +static ir_variable * add_builtin_constant(exec_list *instructions, glsl_symbol_table *symtab, const char *name, int value) { ir_variable *const var = add_variable(instructions, symtab, name, glsl_type::int_type, - ir_var_auto, -1); + ir_var_auto, -1, glsl_precision_undefined); var->constant_value = new(var) ir_constant(value); + var->constant_initializer = new(var) ir_constant(value); + var->has_initializer = true; + return var; } /* Several constants in GLSL ES have different names than normal desktop GLSL. @@ -420,30 +538,35 @@ generate_100ES_uniforms(exec_list *instructions, state->Const.MaxFragmentUniformComponents); add_uniform(instructions, symtab, "gl_DepthRange", - state->symbols->get_type("gl_DepthRangeParameters")); + state->symbols->get_type("gl_DepthRangeParameters"), glsl_precision_undefined); } static void generate_110_uniforms(exec_list *instructions, - struct _mesa_glsl_parse_state *state) + struct _mesa_glsl_parse_state *state, + bool add_deprecated) { glsl_symbol_table *const symtab = state->symbols; - for (unsigned i = 0 - ; i < Elements(builtin_110_deprecated_uniforms) - ; i++) { - add_builtin_variable(instructions, symtab, - & builtin_110_deprecated_uniforms[i]); + if (add_deprecated) { + for (unsigned i = 0 + ; i < Elements(builtin_110_deprecated_uniforms) + ; i++) { + add_builtin_variable(instructions, symtab, + & builtin_110_deprecated_uniforms[i], state->es_shader); + } } - add_builtin_constant(instructions, symtab, "gl_MaxLights", - state->Const.MaxLights); - add_builtin_constant(instructions, symtab, "gl_MaxClipPlanes", - state->Const.MaxClipPlanes); - add_builtin_constant(instructions, symtab, "gl_MaxTextureUnits", - state->Const.MaxTextureUnits); - add_builtin_constant(instructions, symtab, "gl_MaxTextureCoords", - state->Const.MaxTextureCoords); + if (add_deprecated) { + add_builtin_constant(instructions, symtab, "gl_MaxLights", + state->Const.MaxLights); + add_builtin_constant(instructions, symtab, "gl_MaxClipPlanes", + state->Const.MaxClipPlanes); + add_builtin_constant(instructions, symtab, "gl_MaxTextureUnits", + state->Const.MaxTextureUnits); + add_builtin_constant(instructions, symtab, "gl_MaxTextureCoords", + state->Const.MaxTextureCoords); + } add_builtin_constant(instructions, symtab, "gl_MaxVertexAttribs", state->Const.MaxVertexAttribs); add_builtin_constant(instructions, symtab, "gl_MaxVertexUniformComponents", @@ -459,65 +582,77 @@ generate_110_uniforms(exec_list *instructions, add_builtin_constant(instructions, symtab, "gl_MaxFragmentUniformComponents", state->Const.MaxFragmentUniformComponents); - const glsl_type *const mat4_array_type = - glsl_type::get_array_instance(glsl_type::mat4_type, - state->Const.MaxTextureCoords); + if (add_deprecated) { + const glsl_type *const mat4_array_type = + glsl_type::get_array_instance(glsl_type::mat4_type, + state->Const.MaxTextureCoords); - add_uniform(instructions, symtab, "gl_TextureMatrix", mat4_array_type); - add_uniform(instructions, symtab, "gl_TextureMatrixInverse", mat4_array_type); - add_uniform(instructions, symtab, "gl_TextureMatrixTranspose", mat4_array_type); - add_uniform(instructions, symtab, "gl_TextureMatrixInverseTranspose", mat4_array_type); + add_uniform(instructions, symtab, "gl_TextureMatrix", mat4_array_type); + add_uniform(instructions, symtab, "gl_TextureMatrixInverse", mat4_array_type); + add_uniform(instructions, symtab, "gl_TextureMatrixTranspose", mat4_array_type); + add_uniform(instructions, symtab, "gl_TextureMatrixInverseTranspose", mat4_array_type); + } add_uniform(instructions, symtab, "gl_DepthRange", symtab->get_type("gl_DepthRangeParameters")); - add_uniform(instructions, symtab, "gl_ClipPlane", - glsl_type::get_array_instance(glsl_type::vec4_type, - state->Const.MaxClipPlanes)); - add_uniform(instructions, symtab, "gl_Point", - symtab->get_type("gl_PointParameters")); + if (add_deprecated) { + add_uniform(instructions, symtab, "gl_ClipPlane", + glsl_type::get_array_instance(glsl_type::vec4_type, + state->Const.MaxClipPlanes)); + add_uniform(instructions, symtab, "gl_Point", + symtab->get_type("gl_PointParameters")); - const glsl_type *const material_parameters_type = - symtab->get_type("gl_MaterialParameters"); - add_uniform(instructions, symtab, "gl_FrontMaterial", material_parameters_type); - add_uniform(instructions, symtab, "gl_BackMaterial", material_parameters_type); + const glsl_type *const material_parameters_type = + symtab->get_type("gl_MaterialParameters"); + add_uniform(instructions, symtab, "gl_FrontMaterial", material_parameters_type); + add_uniform(instructions, symtab, "gl_BackMaterial", material_parameters_type); - const glsl_type *const light_source_array_type = - glsl_type::get_array_instance(symtab->get_type("gl_LightSourceParameters"), state->Const.MaxLights); + const glsl_type *const light_source_array_type = + glsl_type::get_array_instance(symtab->get_type("gl_LightSourceParameters"), state->Const.MaxLights); - add_uniform(instructions, symtab, "gl_LightSource", light_source_array_type); + add_uniform(instructions, symtab, "gl_LightSource", light_source_array_type); - const glsl_type *const light_model_products_type = - symtab->get_type("gl_LightModelProducts"); - add_uniform(instructions, symtab, "gl_FrontLightModelProduct", - light_model_products_type); - add_uniform(instructions, symtab, "gl_BackLightModelProduct", - light_model_products_type); + const glsl_type *const light_model_products_type = + symtab->get_type("gl_LightModelProducts"); + add_uniform(instructions, symtab, "gl_FrontLightModelProduct", + light_model_products_type); + add_uniform(instructions, symtab, "gl_BackLightModelProduct", + light_model_products_type); - const glsl_type *const light_products_type = - glsl_type::get_array_instance(symtab->get_type("gl_LightProducts"), - state->Const.MaxLights); - add_uniform(instructions, symtab, "gl_FrontLightProduct", light_products_type); - add_uniform(instructions, symtab, "gl_BackLightProduct", light_products_type); + const glsl_type *const light_products_type = + glsl_type::get_array_instance(symtab->get_type("gl_LightProducts"), + state->Const.MaxLights); + add_uniform(instructions, symtab, "gl_FrontLightProduct", light_products_type); + add_uniform(instructions, symtab, "gl_BackLightProduct", light_products_type); - add_uniform(instructions, symtab, "gl_TextureEnvColor", - glsl_type::get_array_instance(glsl_type::vec4_type, - state->Const.MaxTextureUnits)); + add_uniform(instructions, symtab, "gl_TextureEnvColor", + glsl_type::get_array_instance(glsl_type::vec4_type, + state->Const.MaxTextureUnits)); - const glsl_type *const texcoords_vec4 = - glsl_type::get_array_instance(glsl_type::vec4_type, - state->Const.MaxTextureCoords); - add_uniform(instructions, symtab, "gl_EyePlaneS", texcoords_vec4); - add_uniform(instructions, symtab, "gl_EyePlaneT", texcoords_vec4); - add_uniform(instructions, symtab, "gl_EyePlaneR", texcoords_vec4); - add_uniform(instructions, symtab, "gl_EyePlaneQ", texcoords_vec4); - add_uniform(instructions, symtab, "gl_ObjectPlaneS", texcoords_vec4); - add_uniform(instructions, symtab, "gl_ObjectPlaneT", texcoords_vec4); - add_uniform(instructions, symtab, "gl_ObjectPlaneR", texcoords_vec4); - add_uniform(instructions, symtab, "gl_ObjectPlaneQ", texcoords_vec4); + const glsl_type *const texcoords_vec4 = + glsl_type::get_array_instance(glsl_type::vec4_type, + state->Const.MaxTextureCoords); + add_uniform(instructions, symtab, "gl_EyePlaneS", texcoords_vec4); + add_uniform(instructions, symtab, "gl_EyePlaneT", texcoords_vec4); + add_uniform(instructions, symtab, "gl_EyePlaneR", texcoords_vec4); + add_uniform(instructions, symtab, "gl_EyePlaneQ", texcoords_vec4); + add_uniform(instructions, symtab, "gl_ObjectPlaneS", texcoords_vec4); + add_uniform(instructions, symtab, "gl_ObjectPlaneT", texcoords_vec4); + add_uniform(instructions, symtab, "gl_ObjectPlaneR", texcoords_vec4); + add_uniform(instructions, symtab, "gl_ObjectPlaneQ", texcoords_vec4); - add_uniform(instructions, symtab, "gl_Fog", - symtab->get_type("gl_FogParameters")); + add_uniform(instructions, symtab, "gl_Fog", + symtab->get_type("gl_FogParameters")); + } + + /* Mesa-internal current attrib state */ + const glsl_type *const vert_attribs = + glsl_type::get_array_instance(glsl_type::vec4_type, VERT_ATTRIB_MAX); + add_uniform(instructions, symtab, "gl_CurrentAttribVertMESA", vert_attribs); + const glsl_type *const frag_attribs = + glsl_type::get_array_instance(glsl_type::vec4_type, FRAG_ATTRIB_MAX); + add_uniform(instructions, symtab, "gl_CurrentAttribFragMESA", frag_attribs); } /* This function should only be called for ES, not desktop GL. */ @@ -527,7 +662,7 @@ generate_100ES_vs_variables(exec_list *instructions, { for (unsigned i = 0; i < Elements(builtin_core_vs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_core_vs_variables[i]); + & builtin_core_vs_variables[i], state->es_shader); } generate_100ES_uniforms(instructions, state); @@ -539,20 +674,23 @@ generate_100ES_vs_variables(exec_list *instructions, static void generate_110_vs_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state) + struct _mesa_glsl_parse_state *state, + bool add_deprecated) { for (unsigned i = 0; i < Elements(builtin_core_vs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_core_vs_variables[i]); + & builtin_core_vs_variables[i], state->es_shader); } - for (unsigned i = 0 - ; i < Elements(builtin_110_deprecated_vs_variables) - ; i++) { - add_builtin_variable(instructions, state->symbols, - & builtin_110_deprecated_vs_variables[i]); + if (add_deprecated) { + for (unsigned i = 0 + ; i < Elements(builtin_110_deprecated_vs_variables) + ; i++) { + add_builtin_variable(instructions, state->symbols, + & builtin_110_deprecated_vs_variables[i], state->es_shader); + } } - generate_110_uniforms(instructions, state); + generate_110_uniforms(instructions, state, add_deprecated); /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec: * @@ -575,33 +713,59 @@ generate_110_vs_variables(exec_list *instructions, static void generate_120_vs_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state) + struct _mesa_glsl_parse_state *state, + bool add_deprecated) { /* GLSL version 1.20 did not add any built-in variables in the vertex * shader. */ - generate_110_vs_variables(instructions, state); + generate_110_vs_variables(instructions, state, add_deprecated); +} + + +static void +generate_130_uniforms(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + glsl_symbol_table *const symtab = state->symbols; + + add_builtin_constant(instructions, symtab, "gl_MaxClipDistances", + state->Const.MaxClipPlanes); + add_builtin_constant(instructions, symtab, "gl_MaxVaryingComponents", + state->Const.MaxVaryingFloats); } static void generate_130_vs_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state) + struct _mesa_glsl_parse_state *state, + bool add_deprecated) { - generate_120_vs_variables(instructions, state); + generate_120_vs_variables(instructions, state, add_deprecated); for (unsigned i = 0; i < Elements(builtin_130_vs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_130_vs_variables[i]); + & builtin_130_vs_variables[i], state->es_shader); } - const glsl_type *const clip_distance_array_type = - glsl_type::get_array_instance(glsl_type::float_type, - state->Const.MaxClipPlanes); + generate_130_uniforms(instructions, state); + + /* From the GLSL 1.30 spec, section 7.1 (Vertex Shader Special + * Variables): + * + * The gl_ClipDistance array is predeclared as unsized and must + * be sized by the shader either redeclaring it with a size or + * indexing it only with integral constant expressions. + * + * We represent this in Mesa by initially declaring the array as + * size 0. + */ + const glsl_type *const clip_distance_array_type = + glsl_type::get_array_instance(glsl_type::float_type, 0); - /* FINISHME: gl_ClipDistance needs a real location assigned. */ add_variable(instructions, state->symbols, - "gl_ClipDistance", clip_distance_array_type, ir_var_out, -1); + "gl_ClipDistance", clip_distance_array_type, ir_var_out, + VERT_RESULT_CLIP_DIST0); } @@ -616,19 +780,21 @@ initialize_vs_variables(exec_list *instructions, generate_100ES_vs_variables(instructions, state); break; case 110: - generate_110_vs_variables(instructions, state); + generate_110_vs_variables(instructions, state, true); break; case 120: - generate_120_vs_variables(instructions, state); + generate_120_vs_variables(instructions, state, true); break; case 130: - generate_130_vs_variables(instructions, state); + generate_130_vs_variables(instructions, state, true); + break; + case 140: + generate_130_vs_variables(instructions, state, false); break; } - if (state->ARB_draw_instanced_enable) - generate_ARB_draw_instanced_variables(instructions, state, false, - vertex_shader); + generate_ARB_draw_instanced_variables(instructions, state, false, + vertex_shader); } @@ -639,12 +805,12 @@ generate_100ES_fs_variables(exec_list *instructions, { for (unsigned i = 0; i < Elements(builtin_core_fs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_core_fs_variables[i]); + & builtin_core_fs_variables[i], state->es_shader); } for (unsigned i = 0; i < Elements(builtin_100ES_fs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_100ES_fs_variables[i]); + & builtin_100ES_fs_variables[i], state->es_shader); } generate_100ES_uniforms(instructions, state); @@ -655,25 +821,29 @@ generate_100ES_fs_variables(exec_list *instructions, static void generate_110_fs_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state) + struct _mesa_glsl_parse_state *state, + bool add_deprecated) { for (unsigned i = 0; i < Elements(builtin_core_fs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_core_fs_variables[i]); + & builtin_core_fs_variables[i], state->es_shader); } for (unsigned i = 0; i < Elements(builtin_110_fs_variables); i++) { add_builtin_variable(instructions, state->symbols, - & builtin_110_fs_variables[i]); + & builtin_110_fs_variables[i], state->es_shader); } - for (unsigned i = 0 - ; i < Elements(builtin_110_deprecated_fs_variables) - ; i++) { - add_builtin_variable(instructions, state->symbols, - & builtin_110_deprecated_fs_variables[i]); + if (add_deprecated) { + for (unsigned i = 0 + ; i < Elements(builtin_110_deprecated_fs_variables) + ; i++) { + add_builtin_variable(instructions, state->symbols, + & builtin_110_deprecated_fs_variables[i], state->es_shader); + } } - generate_110_uniforms(instructions, state); + + generate_110_uniforms(instructions, state, add_deprecated); /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec: * @@ -702,16 +872,12 @@ generate_ARB_draw_buffers_variables(exec_list *instructions, /* gl_MaxDrawBuffers is available in all shader stages. */ ir_variable *const mdb = - add_variable(instructions, state->symbols, - "gl_MaxDrawBuffers", glsl_type::int_type, ir_var_auto, -1); + add_builtin_constant(instructions, state->symbols, "gl_MaxDrawBuffers", + state->Const.MaxDrawBuffers); if (warn) mdb->warn_extension = "GL_ARB_draw_buffers"; - mdb->constant_value = new(mdb) - ir_constant(int(state->Const.MaxDrawBuffers)); - - /* gl_FragData is only available in the fragment shader. */ if (target == fragment_shader) { @@ -738,8 +904,11 @@ generate_ARB_draw_instanced_variables(exec_list *instructions, { /* gl_InstanceIDARB is only available in the vertex shader. */ - if (target == vertex_shader) { - ir_variable *const inst = + if (target != vertex_shader) + return; + + if (state->ARB_draw_instanced_enable) { + ir_variable *inst = add_variable(instructions, state->symbols, "gl_InstanceIDARB", glsl_type::int_type, ir_var_system_value, SYSTEM_VALUE_INSTANCE_ID); @@ -747,6 +916,21 @@ generate_ARB_draw_instanced_variables(exec_list *instructions, if (warn) inst->warn_extension = "GL_ARB_draw_instanced"; } + + if (state->ARB_draw_instanced_enable || state->language_version >= 140) { + /* Originally ARB_draw_instanced only specified that ARB decorated name. + * Since no vendor actually implemented that behavior and some apps use + * the undecorated name, the extension now specifies that both names are + * available. + */ + ir_variable *inst = + add_variable(instructions, state->symbols, + "gl_InstanceID", glsl_type::int_type, + ir_var_system_value, SYSTEM_VALUE_INSTANCE_ID); + + if (state->language_version < 140 && warn) + inst->warn_extension = "GL_ARB_draw_instanced"; + } } @@ -784,31 +968,62 @@ generate_AMD_shader_stencil_export_variables(exec_list *instructions, static void generate_120_fs_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state) + struct _mesa_glsl_parse_state *state, + bool add_deprecated) { - generate_110_fs_variables(instructions, state); + generate_110_fs_variables(instructions, state, add_deprecated); for (unsigned i = 0 ; i < Elements(builtin_120_fs_variables) ; i++) { add_builtin_variable(instructions, state->symbols, - & builtin_120_fs_variables[i]); + & builtin_120_fs_variables[i], state->es_shader); } } +static void +generate_fs_clipdistance(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + /* From the GLSL 1.30 spec, section 7.2 (Fragment Shader Special + * Variables): + * + * The built-in input variable gl_ClipDistance array contains linearly + * interpolated values for the vertex values written by the vertex shader + * to the gl_ClipDistance vertex output variable. This array must be + * sized in the fragment shader either implicitly or explicitly to be the + * same size as it was sized in the vertex shader. + * + * In other words, the array must be pre-declared as implicitly sized. We + * represent this in Mesa by initially declaring the array as size 0. + */ + const glsl_type *const clip_distance_array_type = + glsl_type::get_array_instance(glsl_type::float_type, 0); + + add_variable(instructions, state->symbols, + "gl_ClipDistance", clip_distance_array_type, ir_var_in, + FRAG_ATTRIB_CLIP_DIST0); +} + static void generate_130_fs_variables(exec_list *instructions, struct _mesa_glsl_parse_state *state) { - generate_120_fs_variables(instructions, state); + generate_120_fs_variables(instructions, state, true); - const glsl_type *const clip_distance_array_type = - glsl_type::get_array_instance(glsl_type::float_type, - state->Const.MaxClipPlanes); + generate_130_uniforms(instructions, state); + generate_fs_clipdistance(instructions, state); +} - /* FINISHME: gl_ClipDistance needs a real location assigned. */ - add_variable(instructions, state->symbols, - "gl_ClipDistance", clip_distance_array_type, ir_var_in, -1); + +static void +generate_140_fs_variables(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + generate_120_fs_variables(instructions, state, false); + + generate_130_uniforms(instructions, state); + generate_fs_clipdistance(instructions, state); } static void @@ -821,14 +1036,17 @@ initialize_fs_variables(exec_list *instructions, generate_100ES_fs_variables(instructions, state); break; case 110: - generate_110_fs_variables(instructions, state); + generate_110_fs_variables(instructions, state, true); break; case 120: - generate_120_fs_variables(instructions, state); + generate_120_fs_variables(instructions, state, true); break; case 130: generate_130_fs_variables(instructions, state); break; + case 140: + generate_140_fs_variables(instructions, state); + break; } if (state->ARB_shader_stencil_export_enable) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtin_variables.h b/3rdparty/glsl-optimizer/src/glsl/builtin_variables.h deleted file mode 100644 index 9b4f5d9e3..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/builtin_variables.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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. - */ - -#include "main/core.h" /* for slot numbers */ - -struct builtin_variable { - enum ir_variable_mode mode; - int slot; - const char *type; - const char *name; -}; - -static const builtin_variable builtin_core_vs_variables[] = { - { ir_var_out, VERT_RESULT_HPOS, "vec4", "gl_Position" }, - { ir_var_out, VERT_RESULT_PSIZ, "float", "gl_PointSize" }, -}; - -static const builtin_variable builtin_core_fs_variables[] = { - { ir_var_in, FRAG_ATTRIB_WPOS, "vec4", "gl_FragCoord" }, - { ir_var_in, FRAG_ATTRIB_FACE, "bool", "gl_FrontFacing" }, - { ir_var_out, FRAG_RESULT_COLOR, "vec4", "gl_FragColor" }, -}; - -static const builtin_variable builtin_100ES_fs_variables[] = { - { ir_var_in, FRAG_ATTRIB_PNTC, "vec2", "gl_PointCoord" }, -}; - -static const builtin_variable builtin_110_fs_variables[] = { - { ir_var_out, FRAG_RESULT_DEPTH, "float", "gl_FragDepth" }, -}; - -static const builtin_variable builtin_110_deprecated_fs_variables[] = { - { ir_var_in, FRAG_ATTRIB_COL0, "vec4", "gl_Color" }, - { ir_var_in, FRAG_ATTRIB_COL1, "vec4", "gl_SecondaryColor" }, - { ir_var_in, FRAG_ATTRIB_FOGC, "float", "gl_FogFragCoord" }, -}; - -static const builtin_variable builtin_110_deprecated_vs_variables[] = { - { ir_var_in, VERT_ATTRIB_POS, "vec4", "gl_Vertex" }, - { ir_var_in, VERT_ATTRIB_NORMAL, "vec3", "gl_Normal" }, - { ir_var_in, VERT_ATTRIB_COLOR0, "vec4", "gl_Color" }, - { ir_var_in, VERT_ATTRIB_COLOR1, "vec4", "gl_SecondaryColor" }, - { ir_var_in, VERT_ATTRIB_TEX0, "vec4", "gl_MultiTexCoord0" }, - { ir_var_in, VERT_ATTRIB_TEX1, "vec4", "gl_MultiTexCoord1" }, - { ir_var_in, VERT_ATTRIB_TEX2, "vec4", "gl_MultiTexCoord2" }, - { ir_var_in, VERT_ATTRIB_TEX3, "vec4", "gl_MultiTexCoord3" }, - { ir_var_in, VERT_ATTRIB_TEX4, "vec4", "gl_MultiTexCoord4" }, - { ir_var_in, VERT_ATTRIB_TEX5, "vec4", "gl_MultiTexCoord5" }, - { ir_var_in, VERT_ATTRIB_TEX6, "vec4", "gl_MultiTexCoord6" }, - { ir_var_in, VERT_ATTRIB_TEX7, "vec4", "gl_MultiTexCoord7" }, - { ir_var_in, VERT_ATTRIB_FOG, "float", "gl_FogCoord" }, - { ir_var_out, VERT_RESULT_HPOS, "vec4", "gl_ClipVertex" }, - { ir_var_out, VERT_RESULT_COL0, "vec4", "gl_FrontColor" }, - { ir_var_out, VERT_RESULT_BFC0, "vec4", "gl_BackColor" }, - { ir_var_out, VERT_RESULT_COL1, "vec4", "gl_FrontSecondaryColor" }, - { ir_var_out, VERT_RESULT_BFC1, "vec4", "gl_BackSecondaryColor" }, - { ir_var_out, VERT_RESULT_FOGC, "float", "gl_FogFragCoord" }, -}; - -static const builtin_variable builtin_120_fs_variables[] = { - { ir_var_in, FRAG_ATTRIB_PNTC, "vec2", "gl_PointCoord" }, -}; - -static const builtin_variable builtin_130_vs_variables[] = { - { ir_var_in, -1, "int", "gl_VertexID" }, -}; - -static const builtin_variable builtin_110_deprecated_uniforms[] = { - { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrix" }, - { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrix" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrix" }, - { ir_var_uniform, -1, "mat3", "gl_NormalMatrix" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrixInverse" }, - { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrixInverse" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrixInverse" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrixTranspose" }, - { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrixTranspose" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrixTranspose" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewMatrixInverseTranspose" }, - { ir_var_uniform, -1, "mat4", "gl_ProjectionMatrixInverseTranspose" }, - { ir_var_uniform, -1, "mat4", "gl_ModelViewProjectionMatrixInverseTranspose" }, - { ir_var_uniform, -1, "float", "gl_NormalScale" }, - { ir_var_uniform, -1, "gl_LightModelParameters", "gl_LightModel"}, - - /* Mesa-internal ATI_envmap_bumpmap state. */ - { ir_var_uniform, -1, "vec2", "gl_MESABumpRotMatrix0"}, - { ir_var_uniform, -1, "vec2", "gl_MESABumpRotMatrix1"}, - { ir_var_uniform, -1, "vec4", "gl_MESAFogParamsOptimized"}, -}; - diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/glsl/inverse.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/glsl/inverse.glsl new file mode 100644 index 000000000..ffb84f907 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/glsl/inverse.glsl @@ -0,0 +1,106 @@ +/* Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) + * Copyright © 2012 Intel Corporation + * + * 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. + */ + +#version 120 +mat2 inverse(mat2 m) +{ + mat2 adj; + adj[0][0] = m[1][1]; + adj[0][1] = -m[0][1]; + adj[1][0] = -m[1][0]; + adj[1][1] = m[0][0]; + float det = m[0][0] * m[1][1] - m[1][0] * m[0][1]; + return adj / det; +} + +mat3 inverse(mat3 m) +{ + mat3 adj; + adj[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); + adj[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); + adj[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); + adj[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); + adj[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); + adj[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); + adj[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + adj[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); + adj[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); + + float det = (+ m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) + - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) + + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0])); + + return adj / det; +} + +mat4 inverse(mat4 m) +{ + float SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + float SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + float SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + float SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + float SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + float SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + float SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; + float SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + float SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; + float SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; + float SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; + float SubFactor11 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + float SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; + float SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; + float SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; + float SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; + float SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; + float SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; + float SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; + + mat4 adj; + + adj[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02); + adj[1][0] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04); + adj[2][0] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05); + adj[3][0] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05); + + adj[0][1] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02); + adj[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04); + adj[2][1] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05); + adj[3][1] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05); + + adj[0][2] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08); + adj[1][2] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10); + adj[2][2] = + (m[0][0] * SubFactor11 - m[0][1] * SubFactor09 + m[0][3] * SubFactor12); + adj[3][2] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor12); + + adj[0][3] = - (m[0][1] * SubFactor13 - m[0][2] * SubFactor14 + m[0][3] * SubFactor15); + adj[1][3] = + (m[0][0] * SubFactor13 - m[0][2] * SubFactor16 + m[0][3] * SubFactor17); + adj[2][3] = - (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][3] * SubFactor18); + adj[3][3] = + (m[0][0] * SubFactor15 - m[0][1] * SubFactor17 + m[0][2] * SubFactor18); + + float det = (+ m[0][0] * adj[0][0] + + m[0][1] * adj[1][0] + + m[0][2] * adj[2][0] + + m[0][3] * adj[3][0]); + + return adj / det; +} + diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/abs b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/abs.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/abs rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/abs.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos deleted file mode 100644 index d1cfebeff..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos +++ /dev/null @@ -1,22 +0,0 @@ -((function acos - (signature float - (parameters - (declare (in) float x)) - ((return (expression float - (constant float (1.5707963)) - (call asin ((var_ref x))))))) - (signature vec2 - (parameters - (declare (in) vec2 x)) - ((return (expression vec2 - (constant float (1.5707963)) - (call asin ((var_ref x))))))) - (signature vec3 - (parameters - (declare (in) vec3 x)) - ((return (expression vec3 - (constant float (1.5707963)) - (call asin ((var_ref x))))))) - (signature vec4 - (parameters - (declare (in) vec4 x)) - ((return (expression vec4 - (constant float (1.5707963)) - (call asin ((var_ref x))))))) -)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos.ir new file mode 100644 index 000000000..8c3797e96 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acos.ir @@ -0,0 +1,29 @@ +((function acos + (signature float + (parameters + (declare (in) float x)) + ((declare () float s) + (call asin (var_ref s) ((var_ref x))) + (return (expression float - (constant float (1.5707964)) (var_ref s))))) + + (signature vec2 + (parameters + (declare (in) vec2 x)) + ((declare () vec2 s) + (call asin (var_ref s) ((var_ref x))) + (return (expression vec2 - (constant float (1.5707964)) (var_ref s))))) + + (signature vec3 + (parameters + (declare (in) vec3 x)) + ((declare () vec3 s) + (call asin (var_ref s) ((var_ref x))) + (return (expression vec3 - (constant float (1.5707964)) (var_ref s))))) + + (signature vec4 + (parameters + (declare (in) vec4 x)) + ((declare () vec4 s) + (call asin (var_ref s) ((var_ref x))) + (return (expression vec4 - (constant float (1.5707964)) (var_ref s))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acosh b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acosh.ir similarity index 84% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/acosh rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/acosh.ir index 5518e7575..9a4c291ad 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acosh +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/acosh.ir @@ -7,15 +7,15 @@ (signature vec2 (parameters (declare (in) vec2 x)) - ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1))))))))) + ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant float (1))))))))) (signature vec3 (parameters (declare (in) vec3 x)) - ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1))))))))) + ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant float (1))))))))) (signature vec4 (parameters (declare (in) vec4 x)) - ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1))))))))) + ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant float (1))))))))) )) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/all b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/all.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/all rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/all.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/any b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/any.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/any rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/any.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asin b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asin.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/asin rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/asin.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh deleted file mode 100644 index cdc2c20e7..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh +++ /dev/null @@ -1,21 +0,0 @@ -((function asinh - (signature float - (parameters - (declare (in) float x)) - ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1))))))))) - - (signature vec2 - (parameters - (declare (in) vec2 x)) - ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1))))))))) - - (signature vec3 - (parameters - (declare (in) vec3 x)) - ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1))))))))) - - (signature vec4 - (parameters - (declare (in) vec4 x)) - ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1))))))))) -)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh.ir new file mode 100644 index 000000000..d2dc7102c --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/asinh.ir @@ -0,0 +1,53 @@ +((function asinh + (signature float + (parameters + (declare (in) float x)) + ((return (expression float * + (expression float sign (var_ref x)) + (expression float log + (expression float + + (expression float abs (var_ref x)) + (expression float sqrt + (expression float + + (expression float * (var_ref x) (var_ref x)) + (constant float (1)))))))))) + + (signature vec2 + (parameters + (declare (in) vec2 x)) + ((return (expression vec2 * + (expression vec2 sign (var_ref x)) + (expression vec2 log + (expression vec2 + + (expression vec2 abs (var_ref x)) + (expression vec2 sqrt + (expression vec2 + + (expression vec2 * (var_ref x) (var_ref x)) + (constant float (1)))))))))) + + (signature vec3 + (parameters + (declare (in) vec3 x)) + ((return (expression vec3 * + (expression vec3 sign (var_ref x)) + (expression vec3 log + (expression vec3 + + (expression vec3 abs (var_ref x)) + (expression vec3 sqrt + (expression vec3 + + (expression vec3 * (var_ref x) (var_ref x)) + (constant float (1)))))))))) + + (signature vec4 + (parameters + (declare (in) vec4 x)) + ((return (expression vec4 * + (expression vec4 sign (var_ref x)) + (expression vec4 log + (expression vec4 + + (expression vec4 abs (var_ref x)) + (expression vec4 sqrt + (expression vec4 + + (expression vec4 * (var_ref x) (var_ref x)) + (constant float (1)))))))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atan b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atan.ir similarity index 55% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/atan rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/atan.ir index 7b5ea13c6..a9dc08e97 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atan +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atan.ir @@ -2,50 +2,62 @@ (signature float (parameters (declare (in) float y_over_x)) - ((return (call asin ((expression float * + ((declare () float s) + (call asin (var_ref s) + ((expression float * (var_ref y_over_x) (expression float rsq (expression float + (expression float * (var_ref y_over_x) (var_ref y_over_x)) - (constant float (1.0)))))))))) + (constant float (1.0))))))) + (return (var_ref s)))) (signature vec2 (parameters (declare (in) vec2 y_over_x)) - ((return (call asin ((expression vec2 * + ((declare () vec2 s) + (call asin (var_ref s) + ((expression vec2 * (var_ref y_over_x) (expression vec2 rsq (expression vec2 + (expression vec2 * (var_ref y_over_x) (var_ref y_over_x)) - (constant float (1.0)))))))))) + (constant float (1.0))))))) + (return (var_ref s)))) (signature vec3 (parameters (declare (in) vec3 y_over_x)) - ((return (call asin ((expression vec3 * + ((declare () vec3 s) + (call asin (var_ref s) + ((expression vec3 * (var_ref y_over_x) (expression vec3 rsq (expression vec3 + (expression vec3 * (var_ref y_over_x) (var_ref y_over_x)) - (constant float (1.0)))))))))) + (constant float (1.0))))))) + (return (var_ref s)))) (signature vec4 (parameters (declare (in) vec4 y_over_x)) - ((return (call asin ((expression vec4 * + ((declare () vec4 s) + (call asin (var_ref s) + ((expression vec4 * (var_ref y_over_x) (expression vec4 rsq (expression vec4 + (expression vec4 * (var_ref y_over_x) (var_ref y_over_x)) - (constant float (1.0)))))))))) + (constant float (1.0))))))) + (return (var_ref s)))) (signature float (parameters @@ -57,7 +69,7 @@ (if (expression bool > (expression float abs (var_ref x)) (expression float * (constant float (1.0e-8)) (expression float abs (var_ref y)))) ( - (assign (x) (var_ref r) (call atan ((expression float / (var_ref y) (var_ref x))))) + (call atan (var_ref r) ((expression float / (var_ref y) (var_ref x)))) (if (expression bool < (var_ref x) (constant float (0.000000)) ) ( (if (expression bool >= (var_ref y) (constant float (0.000000)) ) ((assign (x) (var_ref r) (expression float + (var_ref r) (constant float (3.141593))))) @@ -82,12 +94,11 @@ (declare (in) vec2 y) (declare (in) vec2 x)) ((declare () vec2 r) - (assign (x) (var_ref r) - (call atan ((swiz x (var_ref y)) - (swiz x (var_ref x))))) - (assign (y) (var_ref r) - (call atan ((swiz y (var_ref y)) - (swiz y (var_ref x))))) + (declare () float temp) + (call atan (var_ref temp) ((swiz x (var_ref y)) (swiz x (var_ref x)))) + (assign (x) (var_ref r) (var_ref temp)) + (call atan (var_ref temp) ((swiz y (var_ref y)) (swiz y (var_ref x)))) + (assign (y) (var_ref r) (var_ref temp)) (return (var_ref r)))) (signature vec3 @@ -95,15 +106,13 @@ (declare (in) vec3 y) (declare (in) vec3 x)) ((declare () vec3 r) - (assign (x) (var_ref r) - (call atan ((swiz x (var_ref y)) - (swiz x (var_ref x))))) - (assign (y) (var_ref r) - (call atan ((swiz y (var_ref y)) - (swiz y (var_ref x))))) - (assign (z) (var_ref r) - (call atan ((swiz z (var_ref y)) - (swiz z (var_ref x))))) + (declare () float temp) + (call atan (var_ref temp) ((swiz x (var_ref y)) (swiz x (var_ref x)))) + (assign (x) (var_ref r) (var_ref temp)) + (call atan (var_ref temp) ((swiz y (var_ref y)) (swiz y (var_ref x)))) + (assign (y) (var_ref r) (var_ref temp)) + (call atan (var_ref temp) ((swiz z (var_ref y)) (swiz z (var_ref x)))) + (assign (z) (var_ref r) (var_ref temp)) (return (var_ref r)))) (signature vec4 @@ -111,18 +120,15 @@ (declare (in) vec4 y) (declare (in) vec4 x)) ((declare () vec4 r) - (assign (x) (var_ref r) - (call atan ((swiz x (var_ref y)) - (swiz x (var_ref x))))) - (assign (y) (var_ref r) - (call atan ((swiz y (var_ref y)) - (swiz y (var_ref x))))) - (assign (z) (var_ref r) - (call atan ((swiz z (var_ref y)) - (swiz z (var_ref x))))) - (assign (w) (var_ref r) - (call atan ((swiz w (var_ref y)) - (swiz w (var_ref x))))) - (return (var_ref r))))) + (declare () float temp) + (call atan (var_ref temp) ((swiz x (var_ref y)) (swiz x (var_ref x)))) + (assign (x) (var_ref r) (var_ref temp)) + (call atan (var_ref temp) ((swiz y (var_ref y)) (swiz y (var_ref x)))) + (assign (y) (var_ref r) (var_ref temp)) + (call atan (var_ref temp) ((swiz z (var_ref y)) (swiz z (var_ref x)))) + (assign (z) (var_ref r) (var_ref temp)) + (call atan (var_ref temp) ((swiz w (var_ref y)) (swiz w (var_ref x)))) + (assign (w) (var_ref r) (var_ref temp)) + (return (var_ref r)))) )) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atanh b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atanh.ir similarity index 54% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/atanh rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/atanh.ir index 5559e9740..5ef3596f0 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atanh +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/atanh.ir @@ -11,27 +11,27 @@ (signature vec2 (parameters (declare (in) vec2 x)) - ((return (expression vec2 * (constant vec2 (0.5)) + ((return (expression vec2 * (constant float (0.5)) (expression vec2 log (expression vec2 / - (expression vec2 + (constant vec2 (1)) (var_ref x)) - (expression vec2 - (constant vec2 (1)) (var_ref x)))))))) + (expression vec2 + (constant float (1)) (var_ref x)) + (expression vec2 - (constant float (1)) (var_ref x)))))))) (signature vec3 (parameters (declare (in) vec3 x)) - ((return (expression vec3 * (constant vec3 (0.5)) + ((return (expression vec3 * (constant float (0.5)) (expression vec3 log (expression vec3 / - (expression vec3 + (constant vec3 (1)) (var_ref x)) - (expression vec3 - (constant vec3 (1)) (var_ref x)))))))) + (expression vec3 + (constant float (1)) (var_ref x)) + (expression vec3 - (constant float (1)) (var_ref x)))))))) (signature vec4 (parameters (declare (in) vec4 x)) - ((return (expression vec4 * (constant vec4 (0.5)) + ((return (expression vec4 * (constant float (0.5)) (expression vec4 log (expression vec4 / - (expression vec4 + (constant vec4 (1)) (var_ref x)) - (expression vec4 - (constant vec4 (1)) (var_ref x)))))))) + (expression vec4 + (constant float (1)) (var_ref x)) + (expression vec4 - (constant float (1)) (var_ref x)))))))) )) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/ceil b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/ceil.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/ceil rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/ceil.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/clamp b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/clamp.ir similarity index 56% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/clamp rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/clamp.ir index 2bdc466b2..b86a11426 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/clamp +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/clamp.ir @@ -4,145 +4,145 @@ (declare (in) float arg0) (declare (in) float arg1) (declare (in) float arg2)) - ((return (expression float max (expression float min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression float clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec2 (parameters (declare (in) vec2 arg0) (declare (in) vec2 arg1) (declare (in) vec2 arg2)) - ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression vec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec3 (parameters (declare (in) vec3 arg0) (declare (in) vec3 arg1) (declare (in) vec3 arg2)) - ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression vec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec4 (parameters (declare (in) vec4 arg0) (declare (in) vec4 arg1) (declare (in) vec4 arg2)) - ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression vec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec2 (parameters (declare (in) vec2 arg0) (declare (in) float arg1) (declare (in) float arg2)) - ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression vec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec3 (parameters (declare (in) vec3 arg0) (declare (in) float arg1) (declare (in) float arg2)) - ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression vec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec4 (parameters (declare (in) vec4 arg0) (declare (in) float arg1) (declare (in) float arg2)) - ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression vec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature int (parameters (declare (in) int arg0) (declare (in) int arg1) (declare (in) int arg2)) - ((return (expression int max (expression int min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression int clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature ivec2 (parameters (declare (in) ivec2 arg0) (declare (in) ivec2 arg1) (declare (in) ivec2 arg2)) - ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression ivec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature ivec3 (parameters (declare (in) ivec3 arg0) (declare (in) ivec3 arg1) (declare (in) ivec3 arg2)) - ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression ivec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature ivec4 (parameters (declare (in) ivec4 arg0) (declare (in) ivec4 arg1) (declare (in) ivec4 arg2)) - ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression ivec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature ivec2 (parameters (declare (in) ivec2 arg0) (declare (in) int arg1) (declare (in) int arg2)) - ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression ivec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature ivec3 (parameters (declare (in) ivec3 arg0) (declare (in) int arg1) (declare (in) int arg2)) - ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression ivec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature ivec4 (parameters (declare (in) ivec4 arg0) (declare (in) int arg1) (declare (in) int arg2)) - ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression ivec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uint (parameters (declare (in) uint arg0) (declare (in) uint arg1) (declare (in) uint arg2)) - ((return (expression uint max (expression uint min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uint clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uvec2 (parameters (declare (in) uvec2 arg0) (declare (in) uvec2 arg1) (declare (in) uvec2 arg2)) - ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uvec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uvec3 (parameters (declare (in) uvec3 arg0) (declare (in) uvec3 arg1) (declare (in) uvec3 arg2)) - ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uvec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uvec4 (parameters (declare (in) uvec4 arg0) (declare (in) uvec4 arg1) (declare (in) uvec4 arg2)) - ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uvec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uvec2 (parameters (declare (in) uvec2 arg0) (declare (in) uint arg1) (declare (in) uint arg2)) - ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uvec2 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uvec3 (parameters (declare (in) uvec3 arg0) (declare (in) uint arg1) (declare (in) uint arg2)) - ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uvec3 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature uvec4 (parameters (declare (in) uvec4 arg0) (declare (in) uint arg1) (declare (in) uint arg2)) - ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1))))) + ((return (expression uvec4 clamp (var_ref arg0) (var_ref arg1) (var_ref arg2))))) )) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cos b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cos.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/cos rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/cos.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cosh b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cosh.ir similarity index 84% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/cosh rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/cosh.ir index 45e0ae427..945743138 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cosh +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cosh.ir @@ -9,21 +9,21 @@ (signature vec2 (parameters (declare (in) vec2 x)) - ((return (expression vec2 * (constant vec2 (0.5)) + ((return (expression vec2 * (constant float (0.5)) (expression vec2 + (expression vec2 exp (var_ref x)) (expression vec2 exp (expression vec2 neg (var_ref x)))))))) (signature vec3 (parameters (declare (in) vec3 x)) - ((return (expression vec3 * (constant vec3 (0.5)) + ((return (expression vec3 * (constant float (0.5)) (expression vec3 + (expression vec3 exp (var_ref x)) (expression vec3 exp (expression vec3 neg (var_ref x)))))))) (signature vec4 (parameters (declare (in) vec4 x)) - ((return (expression vec4 * (constant vec4 (0.5)) + ((return (expression vec4 * (constant float (0.5)) (expression vec4 + (expression vec4 exp (var_ref x)) (expression vec4 exp (expression vec4 neg (var_ref x)))))))) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cross b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/cross.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/cross rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/cross.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdx b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdx.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdx rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdx.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdy b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdy.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdy rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/dFdy.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/degrees b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/degrees.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/degrees rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/degrees.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/distance b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/distance.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/distance rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/distance.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/dot b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/dot.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/dot rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/dot.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/equal b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/equal.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/equal rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/equal.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp2 b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp2.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp2 rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/exp2.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/faceforward b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/faceforward.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/faceforward rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/faceforward.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToInt.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToInt.ir new file mode 100644 index 000000000..a5db4b326 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToInt.ir @@ -0,0 +1,21 @@ +((function floatBitsToInt + (signature int + (parameters + (declare (in) float arg)) + ((return (expression int bitcast_f2i (var_ref arg))))) + + (signature ivec2 + (parameters + (declare (in) vec2 arg)) + ((return (expression ivec2 bitcast_f2i (var_ref arg))))) + + (signature ivec3 + (parameters + (declare (in) vec3 arg)) + ((return (expression ivec3 bitcast_f2i (var_ref arg))))) + + (signature ivec4 + (parameters + (declare (in) vec4 arg)) + ((return (expression ivec4 bitcast_f2i (var_ref arg))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToUint.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToUint.ir new file mode 100644 index 000000000..09463bd9a --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floatBitsToUint.ir @@ -0,0 +1,21 @@ +((function floatBitsToUint + (signature uint + (parameters + (declare (in) float arg)) + ((return (expression uint bitcast_f2u (var_ref arg))))) + + (signature uvec2 + (parameters + (declare (in) vec2 arg)) + ((return (expression uvec2 bitcast_f2u (var_ref arg))))) + + (signature uvec3 + (parameters + (declare (in) vec3 arg)) + ((return (expression uvec3 bitcast_f2u (var_ref arg))))) + + (signature uvec4 + (parameters + (declare (in) vec4 arg)) + ((return (expression uvec4 bitcast_f2u (var_ref arg))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floor b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/floor.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/floor rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/floor.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/fract b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/fract.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/fract rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/fract.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/ftransform b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/ftransform.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/ftransform rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/ftransform.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/fwidth b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/fwidth.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/fwidth rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/fwidth.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThan b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThan.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThan rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThan.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThanEqual b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThanEqual.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThanEqual rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/greaterThanEqual.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/intBitsToFloat.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/intBitsToFloat.ir new file mode 100644 index 000000000..cc6aafe1a --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/intBitsToFloat.ir @@ -0,0 +1,21 @@ +((function intBitsToFloat + (signature float + (parameters + (declare (in) int arg)) + ((return (expression float bitcast_i2f (var_ref arg))))) + + (signature vec2 + (parameters + (declare (in) ivec2 arg)) + ((return (expression vec2 bitcast_i2f (var_ref arg))))) + + (signature vec3 + (parameters + (declare (in) ivec3 arg)) + ((return (expression vec3 bitcast_i2f (var_ref arg))))) + + (signature vec4 + (parameters + (declare (in) ivec4 arg)) + ((return (expression vec4 bitcast_i2f (var_ref arg))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/inversesqrt b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/inversesqrt.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/inversesqrt rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/inversesqrt.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/isinf.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/isinf.ir new file mode 100644 index 000000000..92922f6fa --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/isinf.ir @@ -0,0 +1,17 @@ +((function isinf + (signature bool + (parameters + (declare (in) float x)) + ((return (expression bool == (expression float abs (var_ref x)) (constant float (+INF)))))) + (signature bvec2 + (parameters + (declare (in) vec2 x)) + ((return (expression bvec2 == (expression vec2 abs (var_ref x)) (constant vec2 (+INF +INF)))))) + (signature bvec3 + (parameters + (declare (in) vec3 x)) + ((return (expression bvec3 == (expression vec3 abs (var_ref x)) (constant vec3 (+INF +INF +INF)))))) + (signature bvec4 + (parameters + (declare (in) vec4 x)) + ((return (expression bvec4 == (expression vec4 abs (var_ref x)) (constant vec4 (+INF +INF +INF +INF)))))))) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/isnan.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/isnan.ir new file mode 100644 index 000000000..b67349f2a --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/isnan.ir @@ -0,0 +1,17 @@ +((function isnan + (signature bool + (parameters + (declare (in) float x)) + ((return (expression bool != (var_ref x) (var_ref x))))) + (signature bvec2 + (parameters + (declare (in) vec2 x)) + ((return (expression bvec2 != (var_ref x) (var_ref x))))) + (signature bvec3 + (parameters + (declare (in) vec3 x)) + ((return (expression bvec3 != (var_ref x) (var_ref x))))) + (signature bvec4 + (parameters + (declare (in) vec4 x)) + ((return (expression bvec4 != (var_ref x) (var_ref x))))))) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/length b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/length.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/length rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/length.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThan b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThan.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThan rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThan.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThanEqual b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThanEqual.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThanEqual rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/lessThanEqual.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/log b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/log.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/log rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/log.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/log2 b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/log2.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/log2 rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/log2.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/matrixCompMult b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/matrixCompMult.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/matrixCompMult rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/matrixCompMult.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/max b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/max.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/max rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/max.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/min b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/min.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/min rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/min.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/mix b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/mix.ir similarity index 62% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/mix rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/mix.ir index a31f0fa70..3ea49c2a6 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/mix +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/mix.ir @@ -4,56 +4,56 @@ (declare (in) float arg0) (declare (in) float arg1) (declare (in) float arg2)) - ((return (expression float + (expression float * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression float * (var_ref arg1) (var_ref arg2)))))) + ((return (expression float mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec2 (parameters (declare (in) vec2 arg0) (declare (in) vec2 arg1) (declare (in) vec2 arg2)) - ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression vec2 - (constant float (1.000000)) (var_ref arg2))) (expression vec2 * (var_ref arg1) (var_ref arg2)))))) + ((return (expression vec2 mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec3 (parameters (declare (in) vec3 arg0) (declare (in) vec3 arg1) (declare (in) vec3 arg2)) - ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression vec3 - (constant float (1.000000)) (var_ref arg2))) (expression vec3 * (var_ref arg1) (var_ref arg2)))))) + ((return (expression vec3 mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec4 (parameters (declare (in) vec4 arg0) (declare (in) vec4 arg1) (declare (in) vec4 arg2)) - ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression vec4 - (constant float (1.000000)) (var_ref arg2))) (expression vec4 * (var_ref arg1) (var_ref arg2)))))) + ((return (expression vec4 mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec2 (parameters (declare (in) vec2 arg0) (declare (in) vec2 arg1) (declare (in) float arg2)) - ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression vec2 * (var_ref arg1) (var_ref arg2)))))) + ((return (expression vec2 mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec3 (parameters (declare (in) vec3 arg0) (declare (in) vec3 arg1) (declare (in) float arg2)) - ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression vec3 * (var_ref arg1) (var_ref arg2)))))) + ((return (expression vec3 mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature vec4 (parameters (declare (in) vec4 arg0) (declare (in) vec4 arg1) (declare (in) float arg2)) - ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression vec4 * (var_ref arg1) (var_ref arg2)))))) + ((return (expression vec4 mix (var_ref arg0) (var_ref arg1) (var_ref arg2))))) (signature float (parameters (declare (in) float v1) (declare (in) float v2) (declare (in) bool a)) - ((assign (var_ref a) (var_ref v1) (var_ref v2)) + ((assign (var_ref a) (x) (var_ref v1) (var_ref v2)) (return (var_ref v1)))) (signature vec2 diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/mod b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/mod.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/mod rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/mod.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/modf b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/modf.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/modf rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/modf.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise1 b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise1.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise1 rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise1.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise2 b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise2.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise2 rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise2.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise3 b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise3.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise3 rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise3.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise4 b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise4.ir similarity index 96% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise4 rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise4.ir index d0894fd5e..494969654 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise4 +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/noise4.ir @@ -84,9 +84,9 @@ (assign (x) (var_ref _p) (expression float + (var_ref p) (constant float (1559.0))) ) (assign (x) (var_ref _x) (expression float noise(var_ref p))) - (assign (x) (var_ref _y) (expression float noise(expression float + (var_ref p) (constant float (601.0 313.0 29.0 277.0))))) + (assign (x) (var_ref _y) (expression float noise(expression float + (var_ref p) (constant float (601.0))))) (assign (x) (var_ref _z) (expression float noise(var_ref _p))) - (assign (x) (var_ref _w) (expression float noise(expression float + (var_ref _p) (constant float (601.0 313.0 29.0 277.0))))) + (assign (x) (var_ref _w) (expression float noise(expression float + (var_ref _p) (constant float (601.0))))) (assign (x) (var_ref _r) (var_ref _x)) (assign (y) (var_ref _r) (var_ref _y)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize deleted file mode 100644 index 0de0db0b6..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize +++ /dev/null @@ -1,21 +0,0 @@ -((function normalize - (signature float - (parameters - (declare (in) float arg0)) - ((return (expression float sign (var_ref arg0))))) - - (signature vec2 - (parameters - (declare (in) vec2 arg0)) - ((return (expression vec2 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0))))))) - - (signature vec3 - (parameters - (declare (in) vec3 arg0)) - ((return (expression vec3 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0))))))) - - (signature vec4 - (parameters - (declare (in) vec4 arg0)) - ((return (expression vec4 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0))))))) -)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize.ir new file mode 100644 index 000000000..33c5e02ee --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/normalize.ir @@ -0,0 +1,21 @@ +((function normalize + (signature float + (parameters + (declare (in) float arg0)) + ((return (expression float sign (var_ref arg0))))) + + (signature vec2 + (parameters + (declare (in) vec2 arg0)) + ((return (expression vec2 normalize (var_ref arg0))))) + + (signature vec3 + (parameters + (declare (in) vec3 arg0)) + ((return (expression vec3 normalize (var_ref arg0))))) + + (signature vec4 + (parameters + (declare (in) vec4 arg0)) + ((return (expression vec4 normalize (var_ref arg0))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/not b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/not.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/not rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/not.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/notEqual b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/notEqual.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/notEqual rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/notEqual.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/outerProduct b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/outerProduct.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/outerProduct rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/outerProduct.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/pow b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/pow.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/pow rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/pow.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/radians b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/radians.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/radians rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/radians.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/reflect b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/reflect.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/reflect rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/reflect.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/refract b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/refract.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/refract rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/refract.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/round b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/round.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/round rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/round.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/roundEven b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/roundEven.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/roundEven rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/roundEven.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sign b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sign.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sign rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sign.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sin b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sin.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sin rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sin.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sinh b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sinh.ir similarity index 84% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sinh rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sinh.ir index 7ad4f58e2..31edd30e5 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sinh +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sinh.ir @@ -9,21 +9,21 @@ (signature vec2 (parameters (declare (in) vec2 x)) - ((return (expression vec2 * (constant vec2 (0.5)) + ((return (expression vec2 * (constant float (0.5)) (expression vec2 - (expression vec2 exp (var_ref x)) (expression vec2 exp (expression vec2 neg (var_ref x)))))))) (signature vec3 (parameters (declare (in) vec3 x)) - ((return (expression vec3 * (constant vec3 (0.5)) + ((return (expression vec3 * (constant float (0.5)) (expression vec3 - (expression vec3 exp (var_ref x)) (expression vec3 exp (expression vec3 neg (var_ref x)))))))) (signature vec4 (parameters (declare (in) vec4 x)) - ((return (expression vec4 * (constant vec4 (0.5)) + ((return (expression vec4 * (constant float (0.5)) (expression vec4 - (expression vec4 exp (var_ref x)) (expression vec4 exp (expression vec4 neg (var_ref x)))))))) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/smoothstep b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/smoothstep.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/smoothstep rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/smoothstep.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sqrt b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/sqrt.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sqrt rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/sqrt.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/step b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/step.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/step rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/step.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/tan b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/tan.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/tan rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/tan.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/tanh b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/tanh.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/tanh rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/tanh.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/transpose b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/transpose.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/transpose rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/transpose.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/trunc b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/trunc.ir similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/ir/trunc rename to 3rdparty/glsl-optimizer/src/glsl/builtins/ir/trunc.ir diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/ir/uintBitsToFloat.ir b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/uintBitsToFloat.ir new file mode 100644 index 000000000..1073d7618 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/ir/uintBitsToFloat.ir @@ -0,0 +1,21 @@ +((function uintBitsToFloat + (signature float + (parameters + (declare (in) uint arg)) + ((return (expression float bitcast_u2f (var_ref arg))))) + + (signature vec2 + (parameters + (declare (in) uvec2 arg)) + ((return (expression vec2 bitcast_u2f (var_ref arg))))) + + (signature vec3 + (parameters + (declare (in) uvec3 arg)) + ((return (expression vec3 bitcast_u2f (var_ref arg))))) + + (signature vec4 + (parameters + (declare (in) uvec4 arg)) + ((return (expression vec4 bitcast_u2f (var_ref arg))))) +)) diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.frag index df4c7f042..904aa303c 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.frag +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.frag @@ -1,300 +1,6 @@ #version 100 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); - -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - -/* - * 8.7 - Texture Lookup Functions - */ -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2D (sampler2D sampler, vec2 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCube (samplerCube sampler, vec3 coord, float bias); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.glsl new file mode 100644 index 000000000..0d60a7f35 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.glsl @@ -0,0 +1,296 @@ +#version 100 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2 radians(vec2 degrees); +vec3 radians(vec3 degrees); +vec4 radians(vec4 degrees); + +float degrees(float radians); +vec2 degrees(vec2 radians); +vec3 degrees(vec3 radians); +vec4 degrees(vec4 radians); + +float sin(float angle); +vec2 sin(vec2 angle); +vec3 sin(vec3 angle); +vec4 sin(vec4 angle); + +float cos(float angle); +vec2 cos(vec2 angle); +vec3 cos(vec3 angle); +vec4 cos(vec4 angle); + +float tan(float angle); +vec2 tan(vec2 angle); +vec3 tan(vec3 angle); +vec4 tan(vec4 angle); + +float asin(float angle); +vec2 asin(vec2 angle); +vec3 asin(vec3 angle); +vec4 asin(vec4 angle); + +float acos(float angle); +vec2 acos(vec2 angle); +vec3 acos(vec3 angle); +vec4 acos(vec4 angle); + +float atan(float y, float x); +vec2 atan(vec2 y, vec2 x); +vec3 atan(vec3 y, vec3 x); +vec4 atan(vec4 y, vec4 x); + +float atan(float y_over_x); +vec2 atan(vec2 y_over_x); +vec3 atan(vec3 y_over_x); +vec4 atan(vec4 y_over_x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2 pow(vec2 x, vec2 y); +vec3 pow(vec3 x, vec3 y); +vec4 pow(vec4 x, vec4 y); + +float exp(float x); +vec2 exp(vec2 x); +vec3 exp(vec3 x); +vec4 exp(vec4 x); + +float log(float x); +vec2 log(vec2 x); +vec3 log(vec3 x); +vec4 log(vec4 x); + +float exp2(float x); +vec2 exp2(vec2 x); +vec3 exp2(vec3 x); +vec4 exp2(vec4 x); + +float log2(float x); +vec2 log2(vec2 x); +vec3 log2(vec3 x); +vec4 log2(vec4 x); + +float sqrt(float x); +vec2 sqrt(vec2 x); +vec3 sqrt(vec3 x); +vec4 sqrt(vec4 x); + +float inversesqrt(float x); +vec2 inversesqrt(vec2 x); +vec3 inversesqrt(vec3 x); +vec4 inversesqrt(vec4 x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2 abs(vec2 x); +vec3 abs(vec3 x); +vec4 abs(vec4 x); + +float sign(float x); +vec2 sign(vec2 x); +vec3 sign(vec3 x); +vec4 sign(vec4 x); + +float floor(float x); +vec2 floor(vec2 x); +vec3 floor(vec3 x); +vec4 floor(vec4 x); + +float ceil(float x); +vec2 ceil(vec2 x); +vec3 ceil(vec3 x); +vec4 ceil(vec4 x); + +float fract(float x); +vec2 fract(vec2 x); +vec3 fract(vec3 x); +vec4 fract(vec4 x); + +float mod(float x, float y); +vec2 mod(vec2 x, float y); +vec3 mod(vec3 x, float y); +vec4 mod(vec4 x, float y); + +vec2 mod(vec2 x, vec2 y); +vec3 mod(vec3 x, vec3 y); +vec4 mod(vec4 x, vec4 y); + +float min(float x, float y); +vec2 min(vec2 x, vec2 y); +vec3 min(vec3 x, vec3 y); +vec4 min(vec4 x, vec4 y); + +vec2 min(vec2 x, float y); +vec3 min(vec3 x, float y); +vec4 min(vec4 x, float y); + +float max(float x, float y); +vec2 max(vec2 x, vec2 y); +vec3 max(vec3 x, vec3 y); +vec4 max(vec4 x, vec4 y); + +vec2 max(vec2 x, float y); +vec3 max(vec3 x, float y); +vec4 max(vec4 x, float y); + +float clamp(float x, float minVal, float maxVal); +vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); +vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); +vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); + +vec2 clamp(vec2 x, float minVal, float maxVal); +vec3 clamp(vec3 x, float minVal, float maxVal); +vec4 clamp(vec4 x, float minVal, float maxVal); + +float mix(float x, float y, float a); +vec2 mix(vec2 x, vec2 y, vec2 a); +vec3 mix(vec3 x, vec3 y, vec3 a); +vec4 mix(vec4 x, vec4 y, vec4 a); + +vec2 mix(vec2 x, vec2 y, float a); +vec3 mix(vec3 x, vec3 y, float a); +vec4 mix(vec4 x, vec4 y, float a); + +float step(float edge, float x); +vec2 step(vec2 edge, vec2 x); +vec3 step(vec3 edge, vec3 x); +vec4 step(vec4 edge, vec4 x); + +vec2 step(float edge, vec2 x); +vec3 step(float edge, vec3 x); +vec4 step(float edge, vec4 x); + +float smoothstep(float edge0, float edge1, float x); +vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); +vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); +vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); + +vec2 smoothstep(float edge0, float edge1, vec2 x); +vec3 smoothstep(float edge0, float edge1, vec3 x); +vec4 smoothstep(float edge0, float edge1, vec4 x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2 x); +float length(vec3 x); +float length(vec4 x); + +float distance(float p0, float p1); +float distance(vec2 p0, vec2 p1); +float distance(vec3 p0, vec3 p1); +float distance(vec4 p0, vec4 p1); + +float dot(float x, float y); +float dot(vec2 x, vec2 y); +float dot(vec3 x, vec3 y); +float dot(vec4 x, vec4 y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2 normalize(vec2 x); +vec3 normalize(vec3 x); +vec4 normalize(vec4 x); + +float faceforward(float N, float I, float Nref); +vec2 faceforward(vec2 N, vec2 I, vec2 Nref); +vec3 faceforward(vec3 N, vec3 I, vec3 Nref); +vec4 faceforward(vec4 N, vec4 I, vec4 Nref); + +float reflect(float I, float N); +vec2 reflect(vec2 I, vec2 N); +vec3 reflect(vec3 I, vec3 N); +vec4 reflect(vec4 I, vec4 N); + +float refract(float I, float N, float eta); +vec2 refract(vec2 I, vec2 N, float eta); +vec3 refract(vec3 I, vec3 N, float eta); +vec4 refract(vec4 I, vec4 N, float eta); + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x, vec2 y); +bvec3 lessThan( vec3 x, vec3 y); +bvec4 lessThan( vec4 x, vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); + +bvec2 lessThanEqual( vec2 x, vec2 y); +bvec3 lessThanEqual( vec3 x, vec3 y); +bvec4 lessThanEqual( vec4 x, vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); + +bvec2 greaterThan( vec2 x, vec2 y); +bvec3 greaterThan( vec3 x, vec3 y); +bvec4 greaterThan( vec4 x, vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); + +bvec2 greaterThanEqual( vec2 x, vec2 y); +bvec3 greaterThanEqual( vec3 x, vec3 y); +bvec4 greaterThanEqual( vec4 x, vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); + +bvec2 equal( vec2 x, vec2 y); +bvec3 equal( vec3 x, vec3 y); +bvec4 equal( vec4 x, vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x, vec2 y); +bvec3 notEqual( vec3 x, vec3 y); +bvec4 notEqual( vec4 x, vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ +vec4 texture2D (sampler2D sampler, vec2 coord); +vec4 texture2DProj (sampler2D sampler, vec3 coord); +vec4 texture2DProj (sampler2D sampler, vec4 coord); + +vec4 textureCube (samplerCube sampler, vec3 coord); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.vert b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.vert index e5d96f1db..8f7ea61f7 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.vert +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/100.vert @@ -1,300 +1,6 @@ #version 100 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); - -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - -/* - * 8.7 - Texture Lookup Functions - */ -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.frag index 25bc62c09..cc1e34295 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.frag +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.frag @@ -1,327 +1,26 @@ #version 110 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); - -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - /* * 8.7 - Texture Lookup Functions + * "The bias parameter is not accepted in a vertex shader." */ -vec4 texture1D (sampler1D sampler, float coord); -vec4 texture1DProj (sampler1D sampler, vec2 coord); -vec4 texture1DProj (sampler1D sampler, vec4 coord); vec4 texture1D (sampler1D sampler, float coord, float bias); vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias); vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias); -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2D (sampler2D sampler, vec2 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias); -vec4 texture3D (sampler3D sampler, vec3 coord); -vec4 texture3DProj (sampler3D sampler, vec4 coord); vec4 texture3D (sampler3D sampler, vec3 coord, float bias); vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCube (samplerCube sampler, vec3 coord, float bias); -vec4 shadow1D (sampler1DShadow sampler, vec3 coord); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias); vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias); vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias); vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias); - /* * 8.8 - Fragment Processing Functions */ @@ -339,26 +38,3 @@ float fwidth(float p); vec2 fwidth(vec2 p); vec3 fwidth(vec3 p); vec4 fwidth(vec4 p); - -/* - * 8.9 - Noise Functions - */ -float noise1(float x); -float noise1(vec2 x); -float noise1(vec3 x); -float noise1(vec4 x); - -vec2 noise2(float x); -vec2 noise2(vec2 x); -vec2 noise2(vec3 x); -vec2 noise2(vec4 x); - -vec3 noise3(float x); -vec3 noise3(vec2 x); -vec3 noise3(vec3 x); -vec3 noise3(vec4 x); - -vec4 noise4(float x); -vec4 noise4(vec2 x); -vec4 noise4(vec3 x); -vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.glsl new file mode 100644 index 000000000..821978b7d --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.glsl @@ -0,0 +1,332 @@ +#version 110 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2 radians(vec2 degrees); +vec3 radians(vec3 degrees); +vec4 radians(vec4 degrees); + +float degrees(float radians); +vec2 degrees(vec2 radians); +vec3 degrees(vec3 radians); +vec4 degrees(vec4 radians); + +float sin(float angle); +vec2 sin(vec2 angle); +vec3 sin(vec3 angle); +vec4 sin(vec4 angle); + +float cos(float angle); +vec2 cos(vec2 angle); +vec3 cos(vec3 angle); +vec4 cos(vec4 angle); + +float tan(float angle); +vec2 tan(vec2 angle); +vec3 tan(vec3 angle); +vec4 tan(vec4 angle); + +float asin(float angle); +vec2 asin(vec2 angle); +vec3 asin(vec3 angle); +vec4 asin(vec4 angle); + +float acos(float angle); +vec2 acos(vec2 angle); +vec3 acos(vec3 angle); +vec4 acos(vec4 angle); + +float atan(float y, float x); +vec2 atan(vec2 y, vec2 x); +vec3 atan(vec3 y, vec3 x); +vec4 atan(vec4 y, vec4 x); + +float atan(float y_over_x); +vec2 atan(vec2 y_over_x); +vec3 atan(vec3 y_over_x); +vec4 atan(vec4 y_over_x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2 pow(vec2 x, vec2 y); +vec3 pow(vec3 x, vec3 y); +vec4 pow(vec4 x, vec4 y); + +float exp(float x); +vec2 exp(vec2 x); +vec3 exp(vec3 x); +vec4 exp(vec4 x); + +float log(float x); +vec2 log(vec2 x); +vec3 log(vec3 x); +vec4 log(vec4 x); + +float exp2(float x); +vec2 exp2(vec2 x); +vec3 exp2(vec3 x); +vec4 exp2(vec4 x); + +float log2(float x); +vec2 log2(vec2 x); +vec3 log2(vec3 x); +vec4 log2(vec4 x); + +float sqrt(float x); +vec2 sqrt(vec2 x); +vec3 sqrt(vec3 x); +vec4 sqrt(vec4 x); + +float inversesqrt(float x); +vec2 inversesqrt(vec2 x); +vec3 inversesqrt(vec3 x); +vec4 inversesqrt(vec4 x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2 abs(vec2 x); +vec3 abs(vec3 x); +vec4 abs(vec4 x); + +float sign(float x); +vec2 sign(vec2 x); +vec3 sign(vec3 x); +vec4 sign(vec4 x); + +float floor(float x); +vec2 floor(vec2 x); +vec3 floor(vec3 x); +vec4 floor(vec4 x); + +float ceil(float x); +vec2 ceil(vec2 x); +vec3 ceil(vec3 x); +vec4 ceil(vec4 x); + +float fract(float x); +vec2 fract(vec2 x); +vec3 fract(vec3 x); +vec4 fract(vec4 x); + +float mod(float x, float y); +vec2 mod(vec2 x, float y); +vec3 mod(vec3 x, float y); +vec4 mod(vec4 x, float y); + +vec2 mod(vec2 x, vec2 y); +vec3 mod(vec3 x, vec3 y); +vec4 mod(vec4 x, vec4 y); + +float min(float x, float y); +vec2 min(vec2 x, vec2 y); +vec3 min(vec3 x, vec3 y); +vec4 min(vec4 x, vec4 y); + +vec2 min(vec2 x, float y); +vec3 min(vec3 x, float y); +vec4 min(vec4 x, float y); + +float max(float x, float y); +vec2 max(vec2 x, vec2 y); +vec3 max(vec3 x, vec3 y); +vec4 max(vec4 x, vec4 y); + +vec2 max(vec2 x, float y); +vec3 max(vec3 x, float y); +vec4 max(vec4 x, float y); + +float clamp(float x, float minVal, float maxVal); +vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); +vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); +vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); + +vec2 clamp(vec2 x, float minVal, float maxVal); +vec3 clamp(vec3 x, float minVal, float maxVal); +vec4 clamp(vec4 x, float minVal, float maxVal); + +float mix(float x, float y, float a); +vec2 mix(vec2 x, vec2 y, vec2 a); +vec3 mix(vec3 x, vec3 y, vec3 a); +vec4 mix(vec4 x, vec4 y, vec4 a); + +vec2 mix(vec2 x, vec2 y, float a); +vec3 mix(vec3 x, vec3 y, float a); +vec4 mix(vec4 x, vec4 y, float a); + +float step(float edge, float x); +vec2 step(vec2 edge, vec2 x); +vec3 step(vec3 edge, vec3 x); +vec4 step(vec4 edge, vec4 x); + +vec2 step(float edge, vec2 x); +vec3 step(float edge, vec3 x); +vec4 step(float edge, vec4 x); + +float smoothstep(float edge0, float edge1, float x); +vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); +vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); +vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); + +vec2 smoothstep(float edge0, float edge1, vec2 x); +vec3 smoothstep(float edge0, float edge1, vec3 x); +vec4 smoothstep(float edge0, float edge1, vec4 x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2 x); +float length(vec3 x); +float length(vec4 x); + +float distance(float p0, float p1); +float distance(vec2 p0, vec2 p1); +float distance(vec3 p0, vec3 p1); +float distance(vec4 p0, vec4 p1); + +float dot(float x, float y); +float dot(vec2 x, vec2 y); +float dot(vec3 x, vec3 y); +float dot(vec4 x, vec4 y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2 normalize(vec2 x); +vec3 normalize(vec3 x); +vec4 normalize(vec4 x); + +float faceforward(float N, float I, float Nref); +vec2 faceforward(vec2 N, vec2 I, vec2 Nref); +vec3 faceforward(vec3 N, vec3 I, vec3 Nref); +vec4 faceforward(vec4 N, vec4 I, vec4 Nref); + +float reflect(float I, float N); +vec2 reflect(vec2 I, vec2 N); +vec3 reflect(vec3 I, vec3 N); +vec4 reflect(vec4 I, vec4 N); + +float refract(float I, float N, float eta); +vec2 refract(vec2 I, vec2 N, float eta); +vec3 refract(vec3 I, vec3 N, float eta); +vec4 refract(vec4 I, vec4 N, float eta); + + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x, vec2 y); +bvec3 lessThan( vec3 x, vec3 y); +bvec4 lessThan( vec4 x, vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); + +bvec2 lessThanEqual( vec2 x, vec2 y); +bvec3 lessThanEqual( vec3 x, vec3 y); +bvec4 lessThanEqual( vec4 x, vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); + +bvec2 greaterThan( vec2 x, vec2 y); +bvec3 greaterThan( vec3 x, vec3 y); +bvec4 greaterThan( vec4 x, vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); + +bvec2 greaterThanEqual( vec2 x, vec2 y); +bvec3 greaterThanEqual( vec3 x, vec3 y); +bvec4 greaterThanEqual( vec4 x, vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); + +bvec2 equal( vec2 x, vec2 y); +bvec3 equal( vec3 x, vec3 y); +bvec4 equal( vec4 x, vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x, vec2 y); +bvec3 notEqual( vec3 x, vec3 y); +bvec4 notEqual( vec4 x, vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ +vec4 texture1D (sampler1D sampler, float coord); +vec4 texture1DProj (sampler1D sampler, vec2 coord); +vec4 texture1DProj (sampler1D sampler, vec4 coord); + +vec4 texture2D (sampler2D sampler, vec2 coord); +vec4 texture2DProj (sampler2D sampler, vec3 coord); +vec4 texture2DProj (sampler2D sampler, vec4 coord); + +vec4 texture3D (sampler3D sampler, vec3 coord); +vec4 texture3DProj (sampler3D sampler, vec4 coord); + +vec4 textureCube (samplerCube sampler, vec3 coord); + +vec4 shadow1D (sampler1DShadow sampler, vec3 coord); +vec4 shadow2D (sampler2DShadow sampler, vec3 coord); +vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); +vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); + +/* + * 8.9 - Noise Functions + */ +float noise1(float x); +float noise1(vec2 x); +float noise1(vec3 x); +float noise1(vec4 x); + +vec2 noise2(float x); +vec2 noise2(vec2 x); +vec2 noise2(vec3 x); +vec2 noise2(vec4 x); + +vec3 noise3(float x); +vec3 noise3(vec2 x); +vec3 noise3(vec3 x); +vec3 noise3(vec4 x); + +vec4 noise4(float x); +vec4 noise4(vec2 x); +vec4 noise4(vec3 x); +vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.vert b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.vert index 545e59c53..2d323416e 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.vert +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/110.vert @@ -1,351 +1,25 @@ #version 110 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); vec4 ftransform(); -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - /* * 8.7 - Texture Lookup Functions + * "The built-ins suffixed with "Lod" are only allowed in a vertex shader." */ -vec4 texture1D (sampler1D sampler, float coord); -vec4 texture1DProj (sampler1D sampler, vec2 coord); -vec4 texture1DProj (sampler1D sampler, vec4 coord); vec4 texture1DLod (sampler1D sampler, float coord, float lod); vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod); vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod); -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); -vec4 texture3D (sampler3D sampler, vec3 coord); -vec4 texture3DProj (sampler3D sampler, vec4 coord); vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod); vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); -vec4 shadow1D (sampler1DShadow sampler, vec3 coord); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); - -/* - * 8.8 - Fragment Processing Functions (none in vertex shader) - */ - -/* - * 8.9 - Noise Functions - */ -float noise1(float x); -float noise1(vec2 x); -float noise1(vec3 x); -float noise1(vec4 x); - -vec2 noise2(float x); -vec2 noise2(vec2 x); -vec2 noise2(vec3 x); -vec2 noise2(vec4 x); - -vec3 noise3(float x); -vec3 noise3(vec2 x); -vec3 noise3(vec3 x); -vec3 noise3(vec4 x); - -vec4 noise4(float x); -vec4 noise4(vec2 x); -vec4 noise4(vec3 x); -vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.frag index a207435f3..2080792fc 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.frag +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.frag @@ -1,359 +1,25 @@ #version 120 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); - -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); -mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); -mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); -mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); -mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); -mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); -mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); - -mat2 outerProduct(vec2 c, vec2 r); -mat3 outerProduct(vec3 c, vec3 r); -mat4 outerProduct(vec4 c, vec4 r); - -mat2x3 outerProduct(vec3 c, vec2 r); -mat3x2 outerProduct(vec2 c, vec3 r); - -mat2x4 outerProduct(vec4 c, vec2 r); -mat4x2 outerProduct(vec2 c, vec4 r); - -mat3x4 outerProduct(vec4 c, vec3 r); -mat4x3 outerProduct(vec3 c, vec4 r); - -mat2 transpose(mat2 m); -mat3 transpose(mat3 m); -mat4 transpose(mat4 m); - -mat2x3 transpose(mat3x2 m); -mat3x2 transpose(mat2x3 m); - -mat2x4 transpose(mat4x2 m); -mat4x2 transpose(mat2x4 m); - -mat3x4 transpose(mat4x3 m); -mat4x3 transpose(mat3x4 m); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - /* * 8.7 - Texture Lookup Functions */ -vec4 texture1D (sampler1D sampler, float coord); -vec4 texture1DProj (sampler1D sampler, vec2 coord); -vec4 texture1DProj (sampler1D sampler, vec4 coord); vec4 texture1D (sampler1D sampler, float coord, float bias); vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias); vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias); -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2D (sampler2D sampler, vec2 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias); -vec4 texture3D (sampler3D sampler, vec3 coord); -vec4 texture3DProj (sampler3D sampler, vec4 coord); vec4 texture3D (sampler3D sampler, vec3 coord, float bias); vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCube (samplerCube sampler, vec3 coord, float bias); -vec4 shadow1D (sampler1DShadow sampler, vec3 coord); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias); vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias); vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias); vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias); - /* * 8.8 - Fragment Processing Functions */ @@ -371,26 +37,3 @@ float fwidth(float p); vec2 fwidth(vec2 p); vec3 fwidth(vec3 p); vec4 fwidth(vec4 p); - -/* - * 8.9 - Noise Functions - */ -float noise1(float x); -float noise1(vec2 x); -float noise1(vec3 x); -float noise1(vec4 x); - -vec2 noise2(float x); -vec2 noise2(vec2 x); -vec2 noise2(vec3 x); -vec2 noise2(vec4 x); - -vec3 noise3(float x); -vec3 noise3(vec2 x); -vec3 noise3(vec3 x); -vec3 noise3(vec4 x); - -vec4 noise4(float x); -vec4 noise4(vec2 x); -vec4 noise4(vec3 x); -vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.glsl new file mode 100644 index 000000000..c01d1dc71 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.glsl @@ -0,0 +1,364 @@ +#version 120 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2 radians(vec2 degrees); +vec3 radians(vec3 degrees); +vec4 radians(vec4 degrees); + +float degrees(float radians); +vec2 degrees(vec2 radians); +vec3 degrees(vec3 radians); +vec4 degrees(vec4 radians); + +float sin(float angle); +vec2 sin(vec2 angle); +vec3 sin(vec3 angle); +vec4 sin(vec4 angle); + +float cos(float angle); +vec2 cos(vec2 angle); +vec3 cos(vec3 angle); +vec4 cos(vec4 angle); + +float tan(float angle); +vec2 tan(vec2 angle); +vec3 tan(vec3 angle); +vec4 tan(vec4 angle); + +float asin(float angle); +vec2 asin(vec2 angle); +vec3 asin(vec3 angle); +vec4 asin(vec4 angle); + +float acos(float angle); +vec2 acos(vec2 angle); +vec3 acos(vec3 angle); +vec4 acos(vec4 angle); + +float atan(float y, float x); +vec2 atan(vec2 y, vec2 x); +vec3 atan(vec3 y, vec3 x); +vec4 atan(vec4 y, vec4 x); + +float atan(float y_over_x); +vec2 atan(vec2 y_over_x); +vec3 atan(vec3 y_over_x); +vec4 atan(vec4 y_over_x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2 pow(vec2 x, vec2 y); +vec3 pow(vec3 x, vec3 y); +vec4 pow(vec4 x, vec4 y); + +float exp(float x); +vec2 exp(vec2 x); +vec3 exp(vec3 x); +vec4 exp(vec4 x); + +float log(float x); +vec2 log(vec2 x); +vec3 log(vec3 x); +vec4 log(vec4 x); + +float exp2(float x); +vec2 exp2(vec2 x); +vec3 exp2(vec3 x); +vec4 exp2(vec4 x); + +float log2(float x); +vec2 log2(vec2 x); +vec3 log2(vec3 x); +vec4 log2(vec4 x); + +float sqrt(float x); +vec2 sqrt(vec2 x); +vec3 sqrt(vec3 x); +vec4 sqrt(vec4 x); + +float inversesqrt(float x); +vec2 inversesqrt(vec2 x); +vec3 inversesqrt(vec3 x); +vec4 inversesqrt(vec4 x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2 abs(vec2 x); +vec3 abs(vec3 x); +vec4 abs(vec4 x); + +float sign(float x); +vec2 sign(vec2 x); +vec3 sign(vec3 x); +vec4 sign(vec4 x); + +float floor(float x); +vec2 floor(vec2 x); +vec3 floor(vec3 x); +vec4 floor(vec4 x); + +float ceil(float x); +vec2 ceil(vec2 x); +vec3 ceil(vec3 x); +vec4 ceil(vec4 x); + +float fract(float x); +vec2 fract(vec2 x); +vec3 fract(vec3 x); +vec4 fract(vec4 x); + +float mod(float x, float y); +vec2 mod(vec2 x, float y); +vec3 mod(vec3 x, float y); +vec4 mod(vec4 x, float y); + +vec2 mod(vec2 x, vec2 y); +vec3 mod(vec3 x, vec3 y); +vec4 mod(vec4 x, vec4 y); + +float min(float x, float y); +vec2 min(vec2 x, vec2 y); +vec3 min(vec3 x, vec3 y); +vec4 min(vec4 x, vec4 y); + +vec2 min(vec2 x, float y); +vec3 min(vec3 x, float y); +vec4 min(vec4 x, float y); + +float max(float x, float y); +vec2 max(vec2 x, vec2 y); +vec3 max(vec3 x, vec3 y); +vec4 max(vec4 x, vec4 y); + +vec2 max(vec2 x, float y); +vec3 max(vec3 x, float y); +vec4 max(vec4 x, float y); + +float clamp(float x, float minVal, float maxVal); +vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); +vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); +vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); + +vec2 clamp(vec2 x, float minVal, float maxVal); +vec3 clamp(vec3 x, float minVal, float maxVal); +vec4 clamp(vec4 x, float minVal, float maxVal); + +float mix(float x, float y, float a); +vec2 mix(vec2 x, vec2 y, vec2 a); +vec3 mix(vec3 x, vec3 y, vec3 a); +vec4 mix(vec4 x, vec4 y, vec4 a); + +vec2 mix(vec2 x, vec2 y, float a); +vec3 mix(vec3 x, vec3 y, float a); +vec4 mix(vec4 x, vec4 y, float a); + +float step(float edge, float x); +vec2 step(vec2 edge, vec2 x); +vec3 step(vec3 edge, vec3 x); +vec4 step(vec4 edge, vec4 x); + +vec2 step(float edge, vec2 x); +vec3 step(float edge, vec3 x); +vec4 step(float edge, vec4 x); + +float smoothstep(float edge0, float edge1, float x); +vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); +vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); +vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); + +vec2 smoothstep(float edge0, float edge1, vec2 x); +vec3 smoothstep(float edge0, float edge1, vec3 x); +vec4 smoothstep(float edge0, float edge1, vec4 x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2 x); +float length(vec3 x); +float length(vec4 x); + +float distance(float p0, float p1); +float distance(vec2 p0, vec2 p1); +float distance(vec3 p0, vec3 p1); +float distance(vec4 p0, vec4 p1); + +float dot(float x, float y); +float dot(vec2 x, vec2 y); +float dot(vec3 x, vec3 y); +float dot(vec4 x, vec4 y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2 normalize(vec2 x); +vec3 normalize(vec3 x); +vec4 normalize(vec4 x); + +float faceforward(float N, float I, float Nref); +vec2 faceforward(vec2 N, vec2 I, vec2 Nref); +vec3 faceforward(vec3 N, vec3 I, vec3 Nref); +vec4 faceforward(vec4 N, vec4 I, vec4 Nref); + +float reflect(float I, float N); +vec2 reflect(vec2 I, vec2 N); +vec3 reflect(vec3 I, vec3 N); +vec4 reflect(vec4 I, vec4 N); + +float refract(float I, float N, float eta); +vec2 refract(vec2 I, vec2 N, float eta); +vec3 refract(vec3 I, vec3 N, float eta); +vec4 refract(vec4 I, vec4 N, float eta); + + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); +mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); +mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); +mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); +mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); +mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); +mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); + +mat2 outerProduct(vec2 c, vec2 r); +mat3 outerProduct(vec3 c, vec3 r); +mat4 outerProduct(vec4 c, vec4 r); + +mat2x3 outerProduct(vec3 c, vec2 r); +mat3x2 outerProduct(vec2 c, vec3 r); + +mat2x4 outerProduct(vec4 c, vec2 r); +mat4x2 outerProduct(vec2 c, vec4 r); + +mat3x4 outerProduct(vec4 c, vec3 r); +mat4x3 outerProduct(vec3 c, vec4 r); + +mat2 transpose(mat2 m); +mat3 transpose(mat3 m); +mat4 transpose(mat4 m); + +mat2x3 transpose(mat3x2 m); +mat3x2 transpose(mat2x3 m); + +mat2x4 transpose(mat4x2 m); +mat4x2 transpose(mat2x4 m); + +mat3x4 transpose(mat4x3 m); +mat4x3 transpose(mat3x4 m); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x, vec2 y); +bvec3 lessThan( vec3 x, vec3 y); +bvec4 lessThan( vec4 x, vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); + +bvec2 lessThanEqual( vec2 x, vec2 y); +bvec3 lessThanEqual( vec3 x, vec3 y); +bvec4 lessThanEqual( vec4 x, vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); + +bvec2 greaterThan( vec2 x, vec2 y); +bvec3 greaterThan( vec3 x, vec3 y); +bvec4 greaterThan( vec4 x, vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); + +bvec2 greaterThanEqual( vec2 x, vec2 y); +bvec3 greaterThanEqual( vec3 x, vec3 y); +bvec4 greaterThanEqual( vec4 x, vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); + +bvec2 equal( vec2 x, vec2 y); +bvec3 equal( vec3 x, vec3 y); +bvec4 equal( vec4 x, vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x, vec2 y); +bvec3 notEqual( vec3 x, vec3 y); +bvec4 notEqual( vec4 x, vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ +vec4 texture1D (sampler1D sampler, float coord); +vec4 texture1DProj (sampler1D sampler, vec2 coord); +vec4 texture1DProj (sampler1D sampler, vec4 coord); + +vec4 texture2D (sampler2D sampler, vec2 coord); +vec4 texture2DProj (sampler2D sampler, vec3 coord); +vec4 texture2DProj (sampler2D sampler, vec4 coord); + +vec4 texture3D (sampler3D sampler, vec3 coord); +vec4 texture3DProj (sampler3D sampler, vec4 coord); + +vec4 textureCube (samplerCube sampler, vec3 coord); + +vec4 shadow1D (sampler1DShadow sampler, vec3 coord); +vec4 shadow2D (sampler2DShadow sampler, vec3 coord); +vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); +vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); + +/* + * 8.9 - Noise Functions + */ +float noise1(float x); +float noise1(vec2 x); +float noise1(vec3 x); +float noise1(vec4 x); + +vec2 noise2(float x); +vec2 noise2(vec2 x); +vec2 noise2(vec3 x); +vec2 noise2(vec4 x); + +vec3 noise3(float x); +vec3 noise3(vec2 x); +vec3 noise3(vec3 x); +vec3 noise3(vec4 x); + +vec4 noise4(float x); +vec4 noise4(vec2 x); +vec4 noise4(vec3 x); +vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.vert b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.vert index e14c93164..41a1d96c4 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.vert +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/120.vert @@ -1,383 +1,21 @@ #version 120 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); vec4 ftransform(); -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); -mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); -mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); -mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); -mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); -mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); -mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); - -mat2 outerProduct(vec2 c, vec2 r); -mat3 outerProduct(vec3 c, vec3 r); -mat4 outerProduct(vec4 c, vec4 r); - -mat2x3 outerProduct(vec3 c, vec2 r); -mat3x2 outerProduct(vec2 c, vec3 r); - -mat2x4 outerProduct(vec4 c, vec2 r); -mat4x2 outerProduct(vec2 c, vec4 r); - -mat3x4 outerProduct(vec4 c, vec3 r); -mat4x3 outerProduct(vec3 c, vec4 r); - -mat2 transpose(mat2 m); -mat3 transpose(mat3 m); -mat4 transpose(mat4 m); - -mat2x3 transpose(mat3x2 m); -mat3x2 transpose(mat2x3 m); - -mat2x4 transpose(mat4x2 m); -mat4x2 transpose(mat2x4 m); - -mat3x4 transpose(mat4x3 m); -mat4x3 transpose(mat3x4 m); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - -/* - * 8.7 - Texture Lookup Functions - */ -vec4 texture1D (sampler1D sampler, float coord); -vec4 texture1DProj (sampler1D sampler, vec2 coord); -vec4 texture1DProj (sampler1D sampler, vec4 coord); vec4 texture1DLod (sampler1D sampler, float coord, float lod); vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod); vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod); -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); -vec4 texture3D (sampler3D sampler, vec3 coord); -vec4 texture3DProj (sampler3D sampler, vec4 coord); vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod); vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); -vec4 shadow1D (sampler1DShadow sampler, vec3 coord); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); - -/* - * 8.8 - Fragment Processing Functions (none in vertex shader) - */ - -/* - * 8.9 - Noise Functions - */ -float noise1(float x); -float noise1(vec2 x); -float noise1(vec3 x); -float noise1(vec4 x); - -vec2 noise2(float x); -vec2 noise2(vec2 x); -vec2 noise2(vec3 x); -vec2 noise2(vec4 x); - -vec3 noise3(float x); -vec3 noise3(vec2 x); -vec3 noise3(vec3 x); -vec3 noise3(vec4 x); - -vec4 noise4(float x); -vec4 noise4(vec2 x); -vec4 noise4(vec3 x); -vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.frag index 0e3c7ac41..d0233b8a2 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.frag +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.frag @@ -1,534 +1,4 @@ #version 130 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -float sinh(float x); -vec2 sinh(vec2 x); -vec3 sinh(vec3 x); -vec4 sinh(vec4 x); - -float cosh(float x); -vec2 cosh(vec2 x); -vec3 cosh(vec3 x); -vec4 cosh(vec4 x); - -float tanh(float x); -vec2 tanh(vec2 x); -vec3 tanh(vec3 x); -vec4 tanh(vec4 x); - -float asinh(float x); -vec2 asinh(vec2 x); -vec3 asinh(vec3 x); -vec4 asinh(vec4 x); - -float acosh(float x); -vec2 acosh(vec2 x); -vec3 acosh(vec3 x); -vec4 acosh(vec4 x); - -float atanh(float x); -vec2 atanh(vec2 x); -vec3 atanh(vec3 x); -vec4 atanh(vec4 x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); -int abs(int x); -ivec2 abs(ivec2 x); -ivec3 abs(ivec3 x); -ivec4 abs(ivec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); -int sign(int x); -ivec2 sign(ivec2 x); -ivec3 sign(ivec3 x); -ivec4 sign(ivec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float trunc(float x); -vec2 trunc(vec2 x); -vec3 trunc(vec3 x); -vec4 trunc(vec4 x); - -float round(float x); -vec2 round(vec2 x); -vec3 round(vec3 x); -vec4 round(vec4 x); - -float roundEven(float x); -vec2 roundEven(vec2 x); -vec3 roundEven(vec3 x); -vec4 roundEven(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float modf(float x, out float i); -vec2 modf(vec2 x, out vec2 i); -vec3 modf(vec3 x, out vec3 i); -vec4 modf(vec4 x, out vec4 i); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -int min(int x, int y); -ivec2 min(ivec2 x, ivec2 y); -ivec3 min(ivec3 x, ivec3 y); -ivec4 min(ivec4 x, ivec4 y); - -ivec2 min(ivec2 x, int y); -ivec3 min(ivec3 x, int y); -ivec4 min(ivec4 x, int y); - -uint min(uint x, uint y); -uvec2 min(uvec2 x, uvec2 y); -uvec3 min(uvec3 x, uvec3 y); -uvec4 min(uvec4 x, uvec4 y); - -uvec2 min(uvec2 x, uint y); -uvec3 min(uvec3 x, uint y); -uvec4 min(uvec4 x, uint y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -int max(int x, int y); -ivec2 max(ivec2 x, ivec2 y); -ivec3 max(ivec3 x, ivec3 y); -ivec4 max(ivec4 x, ivec4 y); - -ivec2 max(ivec2 x, int y); -ivec3 max(ivec3 x, int y); -ivec4 max(ivec4 x, int y); - -uint max(uint x, uint y); -uvec2 max(uvec2 x, uvec2 y); -uvec3 max(uvec3 x, uvec3 y); -uvec4 max(uvec4 x, uvec4 y); - -uvec2 max(uvec2 x, uint y); -uvec3 max(uvec3 x, uint y); -uvec4 max(uvec4 x, uint y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -int clamp(int x, int minVal, int maxVal); -ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal); -ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal); -ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal); - -ivec2 clamp(ivec2 x, int minVal, int maxVal); -ivec3 clamp(ivec3 x, int minVal, int maxVal); -ivec4 clamp(ivec4 x, int minVal, int maxVal); - -uint clamp(uint x, uint minVal, uint maxVal); -uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal); -uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal); -uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal); - -uvec2 clamp(uvec2 x, uint minVal, uint maxVal); -uvec3 clamp(uvec3 x, uint minVal, uint maxVal); -uvec4 clamp(uvec4 x, uint minVal, uint maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -#if 0 -bool isnan(float x); -bvec2 isnan(vec2 x); -bvec3 isnan(vec3 x); -bvec4 isnan(vec4 x); - -bool isinf(float x); -bvec2 isinf(vec2 x); -bvec3 isinf(vec3 x); -bvec4 isinf(vec4 x); -#endif - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); - -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); -mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); -mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); -mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); -mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); -mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); -mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); - -mat2 outerProduct(vec2 c, vec2 r); -mat3 outerProduct(vec3 c, vec3 r); -mat4 outerProduct(vec4 c, vec4 r); - -mat2x3 outerProduct(vec3 c, vec2 r); -mat3x2 outerProduct(vec2 c, vec3 r); - -mat2x4 outerProduct(vec4 c, vec2 r); -mat4x2 outerProduct(vec2 c, vec4 r); - -mat3x4 outerProduct(vec4 c, vec3 r); -mat4x3 outerProduct(vec3 c, vec4 r); - -mat2 transpose(mat2 m); -mat3 transpose(mat3 m); -mat4 transpose(mat4 m); - -mat2x3 transpose(mat3x2 m); -mat3x2 transpose(mat2x3 m); - -mat2x4 transpose(mat4x2 m); -mat4x2 transpose(mat2x4 m); - -mat3x4 transpose(mat4x3 m); -mat4x3 transpose(mat3x4 m); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); -bvec2 lessThan(uvec2 x, uvec2 y); -bvec3 lessThan(uvec3 x, uvec3 y); -bvec4 lessThan(uvec4 x, uvec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); -bvec2 lessThanEqual(uvec2 x, uvec2 y); -bvec3 lessThanEqual(uvec3 x, uvec3 y); -bvec4 lessThanEqual(uvec4 x, uvec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); -bvec2 greaterThan(uvec2 x, uvec2 y); -bvec3 greaterThan(uvec3 x, uvec3 y); -bvec4 greaterThan(uvec4 x, uvec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); -bvec2 greaterThanEqual(uvec2 x, uvec2 y); -bvec3 greaterThanEqual(uvec3 x, uvec3 y); -bvec4 greaterThanEqual(uvec4 x, uvec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(uvec2 x, uvec2 y); -bvec3 equal(uvec3 x, uvec3 y); -bvec4 equal(uvec4 x, uvec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(uvec2 x, uvec2 y); -bvec3 notEqual(uvec3 x, uvec3 y); -bvec4 notEqual(uvec4 x, uvec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - -/* - * 8.7 - Texture Lookup Functions - */ - -#if 0 -/* textureSize */ -int textureSize( sampler1D sampler, int lod); -int textureSize(isampler1D sampler, int lod); -int textureSize(usampler1D sampler, int lod); - -ivec2 textureSize( sampler2D sampler, int lod); -ivec2 textureSize(isampler2D sampler, int lod); -ivec2 textureSize(usampler2D sampler, int lod); - -ivec3 textureSize( sampler3D sampler, int lod); -ivec3 textureSize(isampler3D sampler, int lod); -ivec3 textureSize(usampler3D sampler, int lod); - -ivec2 textureSize( samplerCube sampler, int lod); -ivec2 textureSize(isamplerCube sampler, int lod); -ivec2 textureSize(usamplerCube sampler, int lod); - -int textureSize(sampler1DShadow sampler, int lod); -ivec2 textureSize(sampler2DShadow sampler, int lod); -ivec2 textureSize(samplerCubeShadow sampler, int lod); - -ivec2 textureSize( sampler1DArray sampler, int lod); -ivec2 textureSize(isampler1DArray sampler, int lod); -ivec2 textureSize(usampler1DArray sampler, int lod); -ivec3 textureSize( sampler2DArray sampler, int lod); -ivec3 textureSize(isampler2DArray sampler, int lod); -ivec3 textureSize(usampler2DArray sampler, int lod); - -ivec2 textureSize(sampler1DArrayShadow sampler, int lod); -ivec3 textureSize(sampler2DArrayShadow sampler, int lod); -#endif - -/* texture - no bias */ - vec4 texture( sampler1D sampler, float P); -ivec4 texture(isampler1D sampler, float P); -uvec4 texture(usampler1D sampler, float P); - - vec4 texture( sampler2D sampler, vec2 P); -ivec4 texture(isampler2D sampler, vec2 P); -uvec4 texture(usampler2D sampler, vec2 P); - - vec4 texture( sampler3D sampler, vec3 P); -ivec4 texture(isampler3D sampler, vec3 P); -uvec4 texture(usampler3D sampler, vec3 P); - - vec4 texture( samplerCube sampler, vec3 P); -ivec4 texture(isamplerCube sampler, vec3 P); -uvec4 texture(usamplerCube sampler, vec3 P); - -float texture(sampler1DShadow sampler, vec3 P); -float texture(sampler2DShadow sampler, vec3 P); -float texture(samplerCubeShadow sampler, vec4 P); - - vec4 texture( sampler1DArray sampler, vec2 P); -ivec4 texture(isampler1DArray sampler, vec2 P); -uvec4 texture(usampler1DArray sampler, vec2 P); - - vec4 texture( sampler2DArray sampler, vec3 P); -ivec4 texture(isampler2DArray sampler, vec3 P); -uvec4 texture(usampler2DArray sampler, vec3 P); - -float texture(sampler1DArrayShadow sampler, vec3 P); -float texture(sampler2DArrayShadow sampler, vec4 P); /* texture - bias variants */ vec4 texture( sampler1D sampler, float P, float bias); @@ -561,28 +31,6 @@ uvec4 texture(usampler2DArray sampler, vec3 P, float bias); float texture(sampler1DArrayShadow sampler, vec3 P, float bias); -/* textureProj - no bias */ - vec4 textureProj( sampler1D sampler, vec2 P); -ivec4 textureProj(isampler1D sampler, vec2 P); -uvec4 textureProj(usampler1D sampler, vec2 P); - vec4 textureProj( sampler1D sampler, vec4 P); -ivec4 textureProj(isampler1D sampler, vec4 P); -uvec4 textureProj(usampler1D sampler, vec4 P); - - vec4 textureProj( sampler2D sampler, vec3 P); -ivec4 textureProj(isampler2D sampler, vec3 P); -uvec4 textureProj(usampler2D sampler, vec3 P); - vec4 textureProj( sampler2D sampler, vec4 P); -ivec4 textureProj(isampler2D sampler, vec4 P); -uvec4 textureProj(usampler2D sampler, vec4 P); - - vec4 textureProj( sampler3D sampler, vec4 P); -ivec4 textureProj(isampler3D sampler, vec4 P); -uvec4 textureProj(usampler3D sampler, vec4 P); - -float textureProj(sampler1DShadow sampler, vec4 P); -float textureProj(sampler2DShadow sampler, vec4 P); - /* textureProj - bias variants */ vec4 textureProj( sampler1D sampler, vec2 P, float bias); ivec4 textureProj(isampler1D sampler, vec2 P, float bias); @@ -605,62 +53,6 @@ uvec4 textureProj(usampler3D sampler, vec4 P, float bias); float textureProj(sampler1DShadow sampler, vec4 P, float bias); float textureProj(sampler2DShadow sampler, vec4 P, float bias); -/* textureLod */ - vec4 textureLod( sampler1D sampler, float P, float lod); -ivec4 textureLod(isampler1D sampler, float P, float lod); -uvec4 textureLod(usampler1D sampler, float P, float lod); - - vec4 textureLod( sampler2D sampler, vec2 P, float lod); -ivec4 textureLod(isampler2D sampler, vec2 P, float lod); -uvec4 textureLod(usampler2D sampler, vec2 P, float lod); - - vec4 textureLod( sampler3D sampler, vec3 P, float lod); -ivec4 textureLod(isampler3D sampler, vec3 P, float lod); -uvec4 textureLod(usampler3D sampler, vec3 P, float lod); - - vec4 textureLod( samplerCube sampler, vec3 P, float lod); -ivec4 textureLod(isamplerCube sampler, vec3 P, float lod); -uvec4 textureLod(usamplerCube sampler, vec3 P, float lod); - -float textureLod(sampler1DShadow sampler, vec3 P, float lod); -float textureLod(sampler2DShadow sampler, vec3 P, float lod); - - vec4 textureLod( sampler1DArray sampler, vec2 P, float lod); -ivec4 textureLod(isampler1DArray sampler, vec2 P, float lod); -uvec4 textureLod(usampler1DArray sampler, vec2 P, float lod); - - vec4 textureLod( sampler2DArray sampler, vec3 P, float lod); -ivec4 textureLod(isampler2DArray sampler, vec3 P, float lod); -uvec4 textureLod(usampler2DArray sampler, vec3 P, float lod); - -float textureLod(sampler1DArrayShadow sampler, vec3 P, float lod); - -/* textureOffset - no bias */ - vec4 textureOffset( sampler1D sampler, float P, int offset); -ivec4 textureOffset(isampler1D sampler, float P, int offset); -uvec4 textureOffset(usampler1D sampler, float P, int offset); - - vec4 textureOffset( sampler2D sampler, vec2 P, ivec2 offset); -ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset); -uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset); - - vec4 textureOffset( sampler3D sampler, vec3 P, ivec3 offset); -ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset); -uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset); - -float textureOffset(sampler1DShadow sampler, vec3 P, int offset); -float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset); - - vec4 textureOffset( sampler1DArray sampler, vec2 P, int offset); -ivec4 textureOffset(isampler1DArray sampler, vec2 P, int offset); -uvec4 textureOffset(usampler1DArray sampler, vec2 P, int offset); - - vec4 textureOffset( sampler2DArray sampler, vec3 P, ivec2 offset); -ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset); -uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset); - -float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset); - /* textureOffset - bias variants */ vec4 textureOffset( sampler1D sampler, float P, int offset, float bias); ivec4 textureOffset(isampler1D sampler, float P, int offset, float bias); @@ -687,315 +79,48 @@ uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset, float bias); float textureOffset(sampler1DArrayShadow samp, vec3 P, int offset, float bias); -/* texelFetch */ - vec4 texelFetch( sampler1D sampler, int P, int lod); -ivec4 texelFetch(isampler1D sampler, int P, int lod); -uvec4 texelFetch(usampler1D sampler, int P, int lod); +/* textureProjOffsetOffset - bias variants */ + vec4 textureProjOffset( sampler1D sampler, vec2 P, int offset, float bias); +ivec4 textureProjOffset(isampler1D sampler, vec2 P, int offset, float bias); +uvec4 textureProjOffset(usampler1D sampler, vec2 P, int offset, float bias); + vec4 textureProjOffset( sampler1D sampler, vec4 P, int offset, float bias); +ivec4 textureProjOffset(isampler1D sampler, vec4 P, int offset, float bias); +uvec4 textureProjOffset(usampler1D sampler, vec4 P, int offset, float bias); - vec4 texelFetch( sampler2D sampler, ivec2 P, int lod); -ivec4 texelFetch(isampler2D sampler, ivec2 P, int lod); -uvec4 texelFetch(usampler2D sampler, ivec2 P, int lod); + vec4 textureProjOffset( sampler2D sampler, vec3 P, ivec2 offset, float bias); +ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset, float bias); +uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset, float bias); + vec4 textureProjOffset( sampler2D sampler, vec4 P, ivec2 offset, float bias); +ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset, float bias); +uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset, float bias); - vec4 texelFetch( sampler3D sampler, ivec3 P, int lod); -ivec4 texelFetch(isampler3D sampler, ivec3 P, int lod); -uvec4 texelFetch(usampler3D sampler, ivec3 P, int lod); + vec4 textureProjOffset( sampler3D sampler, vec4 P, ivec3 offset, float bias); +ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset, float bias); +uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset, float bias); - vec4 texelFetch( sampler1DArray sampler, ivec2 P, int lod); -ivec4 texelFetch(isampler1DArray sampler, ivec2 P, int lod); -uvec4 texelFetch(usampler1DArray sampler, ivec2 P, int lod); - - vec4 texelFetch( sampler2DArray sampler, ivec3 P, int lod); -ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod); -uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod); - -/* texelFetchOffset */ - vec4 texelFetchOffset( sampler1D sampler, int P, int lod, int offset); -ivec4 texelFetchOffset(isampler1D sampler, int P, int lod, int offset); -uvec4 texelFetchOffset(usampler1D sampler, int P, int lod, int offset); - - vec4 texelFetchOffset( sampler2D sampler, ivec2 P, int lod, ivec2 offset); -ivec4 texelFetchOffset(isampler2D sampler, ivec2 P, int lod, ivec2 offset); -uvec4 texelFetchOffset(usampler2D sampler, ivec2 P, int lod, ivec2 offset); - - vec4 texelFetchOffset( sampler3D sampler, ivec3 P, int lod, ivec3 offset); -ivec4 texelFetchOffset(isampler3D sampler, ivec3 P, int lod, ivec3 offset); -uvec4 texelFetchOffset(usampler3D sampler, ivec3 P, int lod, ivec3 offset); - - vec4 texelFetchOffset( sampler1DArray sampler, ivec2 P, int lod, int offset); -ivec4 texelFetchOffset(isampler1DArray sampler, ivec2 P, int lod, int offset); -uvec4 texelFetchOffset(usampler1DArray sampler, ivec2 P, int lod, int offset); - - vec4 texelFetchOffset( sampler2DArray sampler, ivec3 P, int lod, ivec2 offset); -ivec4 texelFetchOffset(isampler2DArray sampler, ivec3 P, int lod, ivec2 offset); -uvec4 texelFetchOffset(usampler2DArray sampler, ivec3 P, int lod, ivec2 offset); - -/* textureProjOffset - no bias */ - vec4 textureProj( sampler1D sampler, vec2 P, int offset); -ivec4 textureProj(isampler1D sampler, vec2 P, int offset); -uvec4 textureProj(usampler1D sampler, vec2 P, int offset); - vec4 textureProj( sampler1D sampler, vec4 P, int offset); -ivec4 textureProj(isampler1D sampler, vec4 P, int offset); -uvec4 textureProj(usampler1D sampler, vec4 P, int offset); - - vec4 textureProj( sampler2D sampler, vec3 P, ivec2 offset); -ivec4 textureProj(isampler2D sampler, vec3 P, ivec2 offset); -uvec4 textureProj(usampler2D sampler, vec3 P, ivec2 offset); - vec4 textureProj( sampler2D sampler, vec4 P, ivec2 offset); -ivec4 textureProj(isampler2D sampler, vec4 P, ivec2 offset); -uvec4 textureProj(usampler2D sampler, vec4 P, ivec2 offset); - - vec4 textureProj( sampler3D sampler, vec4 P, ivec3 offset); -ivec4 textureProj(isampler3D sampler, vec4 P, ivec3 offset); -uvec4 textureProj(usampler3D sampler, vec4 P, ivec3 offset); - -float textureProj(sampler1DShadow sampler, vec4 P, int offset); -float textureProj(sampler2DShadow sampler, vec4 P, ivec2 offset); - -/* textureProjOffset - bias variants */ - vec4 textureProj( sampler1D sampler, vec2 P, int offset, float bias); -ivec4 textureProj(isampler1D sampler, vec2 P, int offset, float bias); -uvec4 textureProj(usampler1D sampler, vec2 P, int offset, float bias); - vec4 textureProj( sampler1D sampler, vec4 P, int offset, float bias); -ivec4 textureProj(isampler1D sampler, vec4 P, int offset, float bias); -uvec4 textureProj(usampler1D sampler, vec4 P, int offset, float bias); - - vec4 textureProj( sampler2D sampler, vec3 P, ivec2 offset, float bias); -ivec4 textureProj(isampler2D sampler, vec3 P, ivec2 offset, float bias); -uvec4 textureProj(usampler2D sampler, vec3 P, ivec2 offset, float bias); - vec4 textureProj( sampler2D sampler, vec4 P, ivec2 offset, float bias); -ivec4 textureProj(isampler2D sampler, vec4 P, ivec2 offset, float bias); -uvec4 textureProj(usampler2D sampler, vec4 P, ivec2 offset, float bias); - - vec4 textureProj( sampler3D sampler, vec4 P, ivec3 offset, float bias); -ivec4 textureProj(isampler3D sampler, vec4 P, ivec3 offset, float bias); -uvec4 textureProj(usampler3D sampler, vec4 P, ivec3 offset, float bias); - -float textureProj(sampler1DShadow sampler, vec4 P, int offset, float bias); -float textureProj(sampler2DShadow sampler, vec4 P, ivec2 offset, float bias); - -/* textureLodOffset */ - vec4 textureLodOffset( sampler1D sampler, float P, float lod, int offset); -ivec4 textureLodOffset(isampler1D sampler, float P, float lod, int offset); -uvec4 textureLodOffset(usampler1D sampler, float P, float lod, int offset); - - vec4 textureLodOffset( sampler2D sampler, vec2 P, float lod, ivec2 offset); -ivec4 textureLodOffset(isampler2D sampler, vec2 P, float lod, ivec2 offset); -uvec4 textureLodOffset(usampler2D sampler, vec2 P, float lod, ivec2 offset); - - vec4 textureLodOffset( sampler3D sampler, vec3 P, float lod, ivec3 offset); -ivec4 textureLodOffset(isampler3D sampler, vec3 P, float lod, ivec3 offset); -uvec4 textureLodOffset(usampler3D sampler, vec3 P, float lod, ivec3 offset); - -float textureLodOffset(sampler1DShadow samp, vec3 P, float lod, int offset); -float textureLodOffset(sampler2DShadow samp, vec3 P, float lod, ivec2 offset); - - vec4 textureLodOffset( sampler1DArray sampler, vec2 P, float lod, int offset); -ivec4 textureLodOffset(isampler1DArray sampler, vec2 P, float lod, int offset); -uvec4 textureLodOffset(usampler1DArray sampler, vec2 P, float lod, int offset); - - vec4 textureLodOffset( sampler2DArray samp, vec3 P, float lod, ivec2 offset); -ivec4 textureLodOffset(isampler2DArray samp, vec3 P, float lod, ivec2 offset); -uvec4 textureLodOffset(usampler2DArray samp, vec3 P, float lod, ivec2 offset); - -float textureLodOffset(sampler1DArrayShadow s, vec3 P, float lod, int offset); - -/* textureProjLod */ - vec4 textureProjLod( sampler1D sampler, vec2 P, float lod); -ivec4 textureProjLod(isampler1D sampler, vec2 P, float lod); -uvec4 textureProjLod(usampler1D sampler, vec2 P, float lod); - vec4 textureProjLod( sampler1D sampler, vec4 P, float lod); -ivec4 textureProjLod(isampler1D sampler, vec4 P, float lod); -uvec4 textureProjLod(usampler1D sampler, vec4 P, float lod); - - vec4 textureProjLod( sampler2D sampler, vec3 P, float lod); -ivec4 textureProjLod(isampler2D sampler, vec3 P, float lod); -uvec4 textureProjLod(usampler2D sampler, vec3 P, float lod); - vec4 textureProjLod( sampler2D sampler, vec4 P, float lod); -ivec4 textureProjLod(isampler2D sampler, vec4 P, float lod); -uvec4 textureProjLod(usampler2D sampler, vec4 P, float lod); - - vec4 textureProjLod( sampler3D sampler, vec4 P, float lod); -ivec4 textureProjLod(isampler3D sampler, vec4 P, float lod); -uvec4 textureProjLod(usampler3D sampler, vec4 P, float lod); - -float textureProjLod(sampler1DShadow sampler, vec4 P, float lod); -float textureProjLod(sampler2DShadow sampler, vec4 P, float lod); - -/* textureProjLodOffset */ - vec4 textureProjLodOffset( sampler1D sampler, vec2 P, float lod, int offset); -ivec4 textureProjLodOffset(isampler1D sampler, vec2 P, float lod, int offset); -uvec4 textureProjLodOffset(usampler1D sampler, vec2 P, float lod, int offset); - vec4 textureProjLodOffset( sampler1D sampler, vec4 P, float lod, int offset); -ivec4 textureProjLodOffset(isampler1D sampler, vec4 P, float lod, int offset); -uvec4 textureProjLodOffset(usampler1D sampler, vec4 P, float lod, int offset); - - vec4 textureProjLodOffset( sampler2D sampler, vec3 P, float lod, ivec2 offset); -ivec4 textureProjLodOffset(isampler2D sampler, vec3 P, float lod, ivec2 offset); -uvec4 textureProjLodOffset(usampler2D sampler, vec3 P, float lod, ivec2 offset); - vec4 textureProjLodOffset( sampler2D sampler, vec4 P, float lod, ivec2 offset); -ivec4 textureProjLodOffset(isampler2D sampler, vec4 P, float lod, ivec2 offset); -uvec4 textureProjLodOffset(usampler2D sampler, vec4 P, float lod, ivec2 offset); - - vec4 textureProjLodOffset( sampler3D sampler, vec4 P, float lod, ivec3 offset); -ivec4 textureProjLodOffset(isampler3D sampler, vec4 P, float lod, ivec3 offset); -uvec4 textureProjLodOffset(usampler3D sampler, vec4 P, float lod, ivec3 offset); - -float textureProjLodOffset(sampler1DShadow s, vec4 P, float lod, int offset); -float textureProjLodOffset(sampler2DShadow s, vec4 P, float lod, ivec2 offset); - -/* textureGrad */ - vec4 textureGrad( sampler1D sampler, float P, float dPdx, float dPdy); -ivec4 textureGrad(isampler1D sampler, float P, float dPdx, float dPdy); -uvec4 textureGrad(usampler1D sampler, float P, float dPdx, float dPdy); - - vec4 textureGrad( sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); -ivec4 textureGrad(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); -uvec4 textureGrad(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); - - vec4 textureGrad( sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); -ivec4 textureGrad(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); -uvec4 textureGrad(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); - - vec4 textureGrad( samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); -ivec4 textureGrad(isamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); -uvec4 textureGrad(usamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); - -float textureGrad(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy); -float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); -float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy); - - vec4 textureGrad( sampler1DArray sampler, vec2 P, float dPdx, float dPdy); -ivec4 textureGrad(isampler1DArray sampler, vec2 P, float dPdx, float dPdy); -uvec4 textureGrad(usampler1DArray sampler, vec2 P, float dPdx, float dPdy); - - vec4 textureGrad( sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); -ivec4 textureGrad(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); -uvec4 textureGrad(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); - -float textureGrad(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy); -float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); - -/* textureGradOffset */ - vec4 textureGradOffset( sampler1D s, float P, float dx, float dy, int off); -ivec4 textureGradOffset(isampler1D s, float P, float dx, float dy, int offset); -uvec4 textureGradOffset(usampler1D s, float P, float dx, float dy, int offset); - - vec4 textureGradOffset( sampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); -ivec4 textureGradOffset(isampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); -uvec4 textureGradOffset(usampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); - - vec4 textureGradOffset( sampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -ivec4 textureGradOffset(isampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -uvec4 textureGradOffset(usampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); - - vec4 textureGradOffset( samplerCube s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -ivec4 textureGradOffset(isamplerCube s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -uvec4 textureGradOffset(usamplerCube s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); - -float textureGradOffset(sampler1DShadow s, vec3 P, float dx, float dy, int off); -float textureGradOffset(sampler2DShadow s, vec3 P, vec2 dx, vec2 dy, ivec2 off); - - vec4 textureGradOffset( sampler1DArray s, vec2 P, float dx, float dy, int off); -ivec4 textureGradOffset(isampler1DArray s, vec2 P, float dx, float dy, int off); -uvec4 textureGradOffset(usampler1DArray s, vec2 P, float dx, float dy, int off); - - vec4 textureGradOffset( sampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -ivec4 textureGradOffset(isampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -uvec4 textureGradOffset(usampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); - -float textureGradOffset(sampler1DArrayShadow s, vec3 P, float dx, float dy, int o); -float textureGradOffset(sampler2DArrayShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); - -/* textureProjGrad */ - vec4 textureProjGrad( sampler1D sampler, vec2 P, float dPdx, float dPdy); -ivec4 textureProjGrad(isampler1D sampler, vec2 P, float dPdx, float dPdy); -uvec4 textureProjGrad(usampler1D sampler, vec2 P, float dPdx, float dPdy); - vec4 textureProjGrad( sampler1D sampler, vec4 P, float dPdx, float dPdy); -ivec4 textureProjGrad(isampler1D sampler, vec4 P, float dPdx, float dPdy); -uvec4 textureProjGrad(usampler1D sampler, vec4 P, float dPdx, float dPdy); - - vec4 textureProjGrad( sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); -ivec4 textureProjGrad(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); -uvec4 textureProjGrad(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); - vec4 textureProjGrad( sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); -ivec4 textureProjGrad(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); -uvec4 textureProjGrad(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); - - vec4 textureProjGrad( sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); -ivec4 textureProjGrad(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); -uvec4 textureProjGrad(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); - -float textureProjGrad(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy); -float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); - -/* textureProjGradOffset */ - vec4 textureProjGradOffset( sampler1D s, vec2 P, float dx, float dy, int off); -ivec4 textureProjGradOffset(isampler1D s, vec2 P, float dx, float dy, int off); -uvec4 textureProjGradOffset(usampler1D s, vec2 P, float dx, float dy, int off); - vec4 textureProjGradOffset( sampler1D s, vec4 P, float dx, float dy, int off); -ivec4 textureProjGradOffset(isampler1D s, vec4 P, float dx, float dy, int off); -uvec4 textureProjGradOffset(usampler1D s, vec4 P, float dx, float dy, int off); - - vec4 textureProjGradOffset( sampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -ivec4 textureProjGradOffset(isampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -uvec4 textureProjGradOffset(usampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); - vec4 textureProjGradOffset( sampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); -ivec4 textureProjGradOffset(isampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); -uvec4 textureProjGradOffset(usampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); - - vec4 textureProjGradOffset( sampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); -ivec4 textureProjGradOffset(isampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); -uvec4 textureProjGradOffset(usampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); - -float textureProjGradOffset(sampler1DShadow s, vec4 P, float dx, float dy, int o); -float textureProjGradOffset(sampler2DShadow s, vec4 P, vec2 dx, vec2 dy, vec2 o); +float textureProjOffset(sampler1DShadow s, vec4 P, int offset, float bias); +float textureProjOffset(sampler2DShadow s, vec4 P, ivec2 offset, float bias); /* * The following texture functions are deprecated: */ -vec4 texture1D (sampler1D sampler, float coord); -vec4 texture1DProj (sampler1D sampler, vec2 coord); -vec4 texture1DProj (sampler1D sampler, vec4 coord); vec4 texture1D (sampler1D sampler, float coord, float bias); vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias); vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias); -vec4 texture1DLod (sampler1D sampler, float coord, float lod); -vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod); -vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod); -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); vec4 texture2D (sampler2D sampler, vec2 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias); vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias); -vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); -vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); -vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); -vec4 texture3D (sampler3D sampler, vec3 coord); -vec4 texture3DProj (sampler3D sampler, vec4 coord); vec4 texture3D (sampler3D sampler, vec3 coord, float bias); vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias); -vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod); -vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod); -vec4 textureCube (samplerCube sampler, vec3 coord); vec4 textureCube (samplerCube sampler, vec3 coord, float bias); -vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); -vec4 shadow1D (sampler1DShadow sampler, vec3 coord); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias); vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias); vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias); vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias); -vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); -vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); -vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); -vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); /* * 8.8 - Fragment Processing Functions @@ -1014,26 +139,3 @@ float fwidth(float p); vec2 fwidth(vec2 p); vec3 fwidth(vec3 p); vec4 fwidth(vec4 p); - -/* - * 8.9 - Noise Functions - */ -float noise1(float x); -float noise1(vec2 x); -float noise1(vec3 x); -float noise1(vec4 x); - -vec2 noise2(float x); -vec2 noise2(vec2 x); -vec2 noise2(vec3 x); -vec2 noise2(vec4 x); - -vec3 noise3(float x); -vec3 noise3(vec2 x); -vec3 noise3(vec3 x); -vec3 noise3(vec4 x); - -vec4 noise4(float x); -vec4 noise4(vec2 x); -vec4 noise4(vec3 x); -vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.glsl new file mode 100644 index 000000000..15f973b17 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.glsl @@ -0,0 +1,904 @@ +#version 130 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2 radians(vec2 degrees); +vec3 radians(vec3 degrees); +vec4 radians(vec4 degrees); + +float degrees(float radians); +vec2 degrees(vec2 radians); +vec3 degrees(vec3 radians); +vec4 degrees(vec4 radians); + +float sin(float angle); +vec2 sin(vec2 angle); +vec3 sin(vec3 angle); +vec4 sin(vec4 angle); + +float cos(float angle); +vec2 cos(vec2 angle); +vec3 cos(vec3 angle); +vec4 cos(vec4 angle); + +float tan(float angle); +vec2 tan(vec2 angle); +vec3 tan(vec3 angle); +vec4 tan(vec4 angle); + +float asin(float angle); +vec2 asin(vec2 angle); +vec3 asin(vec3 angle); +vec4 asin(vec4 angle); + +float acos(float angle); +vec2 acos(vec2 angle); +vec3 acos(vec3 angle); +vec4 acos(vec4 angle); + +float atan(float y, float x); +vec2 atan(vec2 y, vec2 x); +vec3 atan(vec3 y, vec3 x); +vec4 atan(vec4 y, vec4 x); + +float atan(float y_over_x); +vec2 atan(vec2 y_over_x); +vec3 atan(vec3 y_over_x); +vec4 atan(vec4 y_over_x); + +float sinh(float x); +vec2 sinh(vec2 x); +vec3 sinh(vec3 x); +vec4 sinh(vec4 x); + +float cosh(float x); +vec2 cosh(vec2 x); +vec3 cosh(vec3 x); +vec4 cosh(vec4 x); + +float tanh(float x); +vec2 tanh(vec2 x); +vec3 tanh(vec3 x); +vec4 tanh(vec4 x); + +float asinh(float x); +vec2 asinh(vec2 x); +vec3 asinh(vec3 x); +vec4 asinh(vec4 x); + +float acosh(float x); +vec2 acosh(vec2 x); +vec3 acosh(vec3 x); +vec4 acosh(vec4 x); + +float atanh(float x); +vec2 atanh(vec2 x); +vec3 atanh(vec3 x); +vec4 atanh(vec4 x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2 pow(vec2 x, vec2 y); +vec3 pow(vec3 x, vec3 y); +vec4 pow(vec4 x, vec4 y); + +float exp(float x); +vec2 exp(vec2 x); +vec3 exp(vec3 x); +vec4 exp(vec4 x); + +float log(float x); +vec2 log(vec2 x); +vec3 log(vec3 x); +vec4 log(vec4 x); + +float exp2(float x); +vec2 exp2(vec2 x); +vec3 exp2(vec3 x); +vec4 exp2(vec4 x); + +float log2(float x); +vec2 log2(vec2 x); +vec3 log2(vec3 x); +vec4 log2(vec4 x); + +float sqrt(float x); +vec2 sqrt(vec2 x); +vec3 sqrt(vec3 x); +vec4 sqrt(vec4 x); + +float inversesqrt(float x); +vec2 inversesqrt(vec2 x); +vec3 inversesqrt(vec3 x); +vec4 inversesqrt(vec4 x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2 abs(vec2 x); +vec3 abs(vec3 x); +vec4 abs(vec4 x); +int abs(int x); +ivec2 abs(ivec2 x); +ivec3 abs(ivec3 x); +ivec4 abs(ivec4 x); + +float sign(float x); +vec2 sign(vec2 x); +vec3 sign(vec3 x); +vec4 sign(vec4 x); +int sign(int x); +ivec2 sign(ivec2 x); +ivec3 sign(ivec3 x); +ivec4 sign(ivec4 x); + +float floor(float x); +vec2 floor(vec2 x); +vec3 floor(vec3 x); +vec4 floor(vec4 x); + +float trunc(float x); +vec2 trunc(vec2 x); +vec3 trunc(vec3 x); +vec4 trunc(vec4 x); + +float round(float x); +vec2 round(vec2 x); +vec3 round(vec3 x); +vec4 round(vec4 x); + +float roundEven(float x); +vec2 roundEven(vec2 x); +vec3 roundEven(vec3 x); +vec4 roundEven(vec4 x); + +float ceil(float x); +vec2 ceil(vec2 x); +vec3 ceil(vec3 x); +vec4 ceil(vec4 x); + +float fract(float x); +vec2 fract(vec2 x); +vec3 fract(vec3 x); +vec4 fract(vec4 x); + +float mod(float x, float y); +vec2 mod(vec2 x, float y); +vec3 mod(vec3 x, float y); +vec4 mod(vec4 x, float y); + +vec2 mod(vec2 x, vec2 y); +vec3 mod(vec3 x, vec3 y); +vec4 mod(vec4 x, vec4 y); + +float modf(float x, out float i); +vec2 modf(vec2 x, out vec2 i); +vec3 modf(vec3 x, out vec3 i); +vec4 modf(vec4 x, out vec4 i); + +float min(float x, float y); +vec2 min(vec2 x, vec2 y); +vec3 min(vec3 x, vec3 y); +vec4 min(vec4 x, vec4 y); + +vec2 min(vec2 x, float y); +vec3 min(vec3 x, float y); +vec4 min(vec4 x, float y); + +int min(int x, int y); +ivec2 min(ivec2 x, ivec2 y); +ivec3 min(ivec3 x, ivec3 y); +ivec4 min(ivec4 x, ivec4 y); + +ivec2 min(ivec2 x, int y); +ivec3 min(ivec3 x, int y); +ivec4 min(ivec4 x, int y); + +uint min(uint x, uint y); +uvec2 min(uvec2 x, uvec2 y); +uvec3 min(uvec3 x, uvec3 y); +uvec4 min(uvec4 x, uvec4 y); + +uvec2 min(uvec2 x, uint y); +uvec3 min(uvec3 x, uint y); +uvec4 min(uvec4 x, uint y); + +float max(float x, float y); +vec2 max(vec2 x, vec2 y); +vec3 max(vec3 x, vec3 y); +vec4 max(vec4 x, vec4 y); + +vec2 max(vec2 x, float y); +vec3 max(vec3 x, float y); +vec4 max(vec4 x, float y); + +int max(int x, int y); +ivec2 max(ivec2 x, ivec2 y); +ivec3 max(ivec3 x, ivec3 y); +ivec4 max(ivec4 x, ivec4 y); + +ivec2 max(ivec2 x, int y); +ivec3 max(ivec3 x, int y); +ivec4 max(ivec4 x, int y); + +uint max(uint x, uint y); +uvec2 max(uvec2 x, uvec2 y); +uvec3 max(uvec3 x, uvec3 y); +uvec4 max(uvec4 x, uvec4 y); + +uvec2 max(uvec2 x, uint y); +uvec3 max(uvec3 x, uint y); +uvec4 max(uvec4 x, uint y); + +float clamp(float x, float minVal, float maxVal); +vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); +vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); +vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); + +vec2 clamp(vec2 x, float minVal, float maxVal); +vec3 clamp(vec3 x, float minVal, float maxVal); +vec4 clamp(vec4 x, float minVal, float maxVal); + +int clamp(int x, int minVal, int maxVal); +ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal); +ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal); +ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal); + +ivec2 clamp(ivec2 x, int minVal, int maxVal); +ivec3 clamp(ivec3 x, int minVal, int maxVal); +ivec4 clamp(ivec4 x, int minVal, int maxVal); + +uint clamp(uint x, uint minVal, uint maxVal); +uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal); +uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal); +uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal); + +uvec2 clamp(uvec2 x, uint minVal, uint maxVal); +uvec3 clamp(uvec3 x, uint minVal, uint maxVal); +uvec4 clamp(uvec4 x, uint minVal, uint maxVal); + +float mix(float x, float y, float a); +vec2 mix(vec2 x, vec2 y, vec2 a); +vec3 mix(vec3 x, vec3 y, vec3 a); +vec4 mix(vec4 x, vec4 y, vec4 a); + +vec2 mix(vec2 x, vec2 y, float a); +vec3 mix(vec3 x, vec3 y, float a); +vec4 mix(vec4 x, vec4 y, float a); + +float mix(float x, float y, bool a); +vec2 mix(vec2 x, vec2 y, bvec2 a); +vec3 mix(vec3 x, vec3 y, bvec3 a); +vec4 mix(vec4 x, vec4 y, bvec4 a); + +float step(float edge, float x); +vec2 step(vec2 edge, vec2 x); +vec3 step(vec3 edge, vec3 x); +vec4 step(vec4 edge, vec4 x); + +vec2 step(float edge, vec2 x); +vec3 step(float edge, vec3 x); +vec4 step(float edge, vec4 x); + +float smoothstep(float edge0, float edge1, float x); +vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); +vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); +vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); + +vec2 smoothstep(float edge0, float edge1, vec2 x); +vec3 smoothstep(float edge0, float edge1, vec3 x); +vec4 smoothstep(float edge0, float edge1, vec4 x); + +bool isnan(float x); +bvec2 isnan(vec2 x); +bvec3 isnan(vec3 x); +bvec4 isnan(vec4 x); + +bool isinf(float x); +bvec2 isinf(vec2 x); +bvec3 isinf(vec3 x); +bvec4 isinf(vec4 x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2 x); +float length(vec3 x); +float length(vec4 x); + +float distance(float p0, float p1); +float distance(vec2 p0, vec2 p1); +float distance(vec3 p0, vec3 p1); +float distance(vec4 p0, vec4 p1); + +float dot(float x, float y); +float dot(vec2 x, vec2 y); +float dot(vec3 x, vec3 y); +float dot(vec4 x, vec4 y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2 normalize(vec2 x); +vec3 normalize(vec3 x); +vec4 normalize(vec4 x); + +float faceforward(float N, float I, float Nref); +vec2 faceforward(vec2 N, vec2 I, vec2 Nref); +vec3 faceforward(vec3 N, vec3 I, vec3 Nref); +vec4 faceforward(vec4 N, vec4 I, vec4 Nref); + +float reflect(float I, float N); +vec2 reflect(vec2 I, vec2 N); +vec3 reflect(vec3 I, vec3 N); +vec4 reflect(vec4 I, vec4 N); + +float refract(float I, float N, float eta); +vec2 refract(vec2 I, vec2 N, float eta); +vec3 refract(vec3 I, vec3 N, float eta); +vec4 refract(vec4 I, vec4 N, float eta); + + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); +mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); +mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); +mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); +mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); +mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); +mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); + +mat2 outerProduct(vec2 c, vec2 r); +mat3 outerProduct(vec3 c, vec3 r); +mat4 outerProduct(vec4 c, vec4 r); + +mat2x3 outerProduct(vec3 c, vec2 r); +mat3x2 outerProduct(vec2 c, vec3 r); + +mat2x4 outerProduct(vec4 c, vec2 r); +mat4x2 outerProduct(vec2 c, vec4 r); + +mat3x4 outerProduct(vec4 c, vec3 r); +mat4x3 outerProduct(vec3 c, vec4 r); + +mat2 transpose(mat2 m); +mat3 transpose(mat3 m); +mat4 transpose(mat4 m); + +mat2x3 transpose(mat3x2 m); +mat3x2 transpose(mat2x3 m); + +mat2x4 transpose(mat4x2 m); +mat4x2 transpose(mat2x4 m); + +mat3x4 transpose(mat4x3 m); +mat4x3 transpose(mat3x4 m); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x, vec2 y); +bvec3 lessThan( vec3 x, vec3 y); +bvec4 lessThan( vec4 x, vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); +bvec2 lessThan(uvec2 x, uvec2 y); +bvec3 lessThan(uvec3 x, uvec3 y); +bvec4 lessThan(uvec4 x, uvec4 y); + +bvec2 lessThanEqual( vec2 x, vec2 y); +bvec3 lessThanEqual( vec3 x, vec3 y); +bvec4 lessThanEqual( vec4 x, vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); +bvec2 lessThanEqual(uvec2 x, uvec2 y); +bvec3 lessThanEqual(uvec3 x, uvec3 y); +bvec4 lessThanEqual(uvec4 x, uvec4 y); + +bvec2 greaterThan( vec2 x, vec2 y); +bvec3 greaterThan( vec3 x, vec3 y); +bvec4 greaterThan( vec4 x, vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); +bvec2 greaterThan(uvec2 x, uvec2 y); +bvec3 greaterThan(uvec3 x, uvec3 y); +bvec4 greaterThan(uvec4 x, uvec4 y); + +bvec2 greaterThanEqual( vec2 x, vec2 y); +bvec3 greaterThanEqual( vec3 x, vec3 y); +bvec4 greaterThanEqual( vec4 x, vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); +bvec2 greaterThanEqual(uvec2 x, uvec2 y); +bvec3 greaterThanEqual(uvec3 x, uvec3 y); +bvec4 greaterThanEqual(uvec4 x, uvec4 y); + +bvec2 equal( vec2 x, vec2 y); +bvec3 equal( vec3 x, vec3 y); +bvec4 equal( vec4 x, vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(uvec2 x, uvec2 y); +bvec3 equal(uvec3 x, uvec3 y); +bvec4 equal(uvec4 x, uvec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x, vec2 y); +bvec3 notEqual( vec3 x, vec3 y); +bvec4 notEqual( vec4 x, vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(uvec2 x, uvec2 y); +bvec3 notEqual(uvec3 x, uvec3 y); +bvec4 notEqual(uvec4 x, uvec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ + +/* textureSize */ +int textureSize( sampler1D sampler, int lod); +int textureSize(isampler1D sampler, int lod); +int textureSize(usampler1D sampler, int lod); + +ivec2 textureSize( sampler2D sampler, int lod); +ivec2 textureSize(isampler2D sampler, int lod); +ivec2 textureSize(usampler2D sampler, int lod); + +ivec3 textureSize( sampler3D sampler, int lod); +ivec3 textureSize(isampler3D sampler, int lod); +ivec3 textureSize(usampler3D sampler, int lod); + +ivec2 textureSize( samplerCube sampler, int lod); +ivec2 textureSize(isamplerCube sampler, int lod); +ivec2 textureSize(usamplerCube sampler, int lod); + +int textureSize(sampler1DShadow sampler, int lod); +ivec2 textureSize(sampler2DShadow sampler, int lod); +ivec2 textureSize(samplerCubeShadow sampler, int lod); + +ivec2 textureSize( sampler1DArray sampler, int lod); +ivec2 textureSize(isampler1DArray sampler, int lod); +ivec2 textureSize(usampler1DArray sampler, int lod); +ivec3 textureSize( sampler2DArray sampler, int lod); +ivec3 textureSize(isampler2DArray sampler, int lod); +ivec3 textureSize(usampler2DArray sampler, int lod); + +ivec2 textureSize(sampler1DArrayShadow sampler, int lod); +ivec3 textureSize(sampler2DArrayShadow sampler, int lod); + +/* texture - no bias */ + vec4 texture( sampler1D sampler, float P); +ivec4 texture(isampler1D sampler, float P); +uvec4 texture(usampler1D sampler, float P); + + vec4 texture( sampler2D sampler, vec2 P); +ivec4 texture(isampler2D sampler, vec2 P); +uvec4 texture(usampler2D sampler, vec2 P); + + vec4 texture( sampler3D sampler, vec3 P); +ivec4 texture(isampler3D sampler, vec3 P); +uvec4 texture(usampler3D sampler, vec3 P); + + vec4 texture( samplerCube sampler, vec3 P); +ivec4 texture(isamplerCube sampler, vec3 P); +uvec4 texture(usamplerCube sampler, vec3 P); + +float texture(sampler1DShadow sampler, vec3 P); +float texture(sampler2DShadow sampler, vec3 P); +float texture(samplerCubeShadow sampler, vec4 P); + + vec4 texture( sampler1DArray sampler, vec2 P); +ivec4 texture(isampler1DArray sampler, vec2 P); +uvec4 texture(usampler1DArray sampler, vec2 P); + + vec4 texture( sampler2DArray sampler, vec3 P); +ivec4 texture(isampler2DArray sampler, vec3 P); +uvec4 texture(usampler2DArray sampler, vec3 P); + +float texture(sampler1DArrayShadow sampler, vec3 P); +float texture(sampler2DArrayShadow sampler, vec4 P); + +/* textureProj - no bias */ + vec4 textureProj( sampler1D sampler, vec2 P); +ivec4 textureProj(isampler1D sampler, vec2 P); +uvec4 textureProj(usampler1D sampler, vec2 P); + vec4 textureProj( sampler1D sampler, vec4 P); +ivec4 textureProj(isampler1D sampler, vec4 P); +uvec4 textureProj(usampler1D sampler, vec4 P); + + vec4 textureProj( sampler2D sampler, vec3 P); +ivec4 textureProj(isampler2D sampler, vec3 P); +uvec4 textureProj(usampler2D sampler, vec3 P); + vec4 textureProj( sampler2D sampler, vec4 P); +ivec4 textureProj(isampler2D sampler, vec4 P); +uvec4 textureProj(usampler2D sampler, vec4 P); + + vec4 textureProj( sampler3D sampler, vec4 P); +ivec4 textureProj(isampler3D sampler, vec4 P); +uvec4 textureProj(usampler3D sampler, vec4 P); + +float textureProj(sampler1DShadow sampler, vec4 P); +float textureProj(sampler2DShadow sampler, vec4 P); + +/* textureLod */ + vec4 textureLod( sampler1D sampler, float P, float lod); +ivec4 textureLod(isampler1D sampler, float P, float lod); +uvec4 textureLod(usampler1D sampler, float P, float lod); + + vec4 textureLod( sampler2D sampler, vec2 P, float lod); +ivec4 textureLod(isampler2D sampler, vec2 P, float lod); +uvec4 textureLod(usampler2D sampler, vec2 P, float lod); + + vec4 textureLod( sampler3D sampler, vec3 P, float lod); +ivec4 textureLod(isampler3D sampler, vec3 P, float lod); +uvec4 textureLod(usampler3D sampler, vec3 P, float lod); + + vec4 textureLod( samplerCube sampler, vec3 P, float lod); +ivec4 textureLod(isamplerCube sampler, vec3 P, float lod); +uvec4 textureLod(usamplerCube sampler, vec3 P, float lod); + +float textureLod(sampler1DShadow sampler, vec3 P, float lod); +float textureLod(sampler2DShadow sampler, vec3 P, float lod); + + vec4 textureLod( sampler1DArray sampler, vec2 P, float lod); +ivec4 textureLod(isampler1DArray sampler, vec2 P, float lod); +uvec4 textureLod(usampler1DArray sampler, vec2 P, float lod); + + vec4 textureLod( sampler2DArray sampler, vec3 P, float lod); +ivec4 textureLod(isampler2DArray sampler, vec3 P, float lod); +uvec4 textureLod(usampler2DArray sampler, vec3 P, float lod); + +float textureLod(sampler1DArrayShadow sampler, vec3 P, float lod); + +/* textureOffset - no bias */ + vec4 textureOffset( sampler1D sampler, float P, int offset); +ivec4 textureOffset(isampler1D sampler, float P, int offset); +uvec4 textureOffset(usampler1D sampler, float P, int offset); + + vec4 textureOffset( sampler2D sampler, vec2 P, ivec2 offset); +ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset); +uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset); + + vec4 textureOffset( sampler3D sampler, vec3 P, ivec3 offset); +ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset); +uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset); + +float textureOffset(sampler1DShadow sampler, vec3 P, int offset); +float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset); + + vec4 textureOffset( sampler1DArray sampler, vec2 P, int offset); +ivec4 textureOffset(isampler1DArray sampler, vec2 P, int offset); +uvec4 textureOffset(usampler1DArray sampler, vec2 P, int offset); + + vec4 textureOffset( sampler2DArray sampler, vec3 P, ivec2 offset); +ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset); +uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset); + +float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset); + +/* texelFetch */ + vec4 texelFetch( sampler1D sampler, int P, int lod); +ivec4 texelFetch(isampler1D sampler, int P, int lod); +uvec4 texelFetch(usampler1D sampler, int P, int lod); + + vec4 texelFetch( sampler2D sampler, ivec2 P, int lod); +ivec4 texelFetch(isampler2D sampler, ivec2 P, int lod); +uvec4 texelFetch(usampler2D sampler, ivec2 P, int lod); + + vec4 texelFetch( sampler3D sampler, ivec3 P, int lod); +ivec4 texelFetch(isampler3D sampler, ivec3 P, int lod); +uvec4 texelFetch(usampler3D sampler, ivec3 P, int lod); + + vec4 texelFetch( sampler1DArray sampler, ivec2 P, int lod); +ivec4 texelFetch(isampler1DArray sampler, ivec2 P, int lod); +uvec4 texelFetch(usampler1DArray sampler, ivec2 P, int lod); + + vec4 texelFetch( sampler2DArray sampler, ivec3 P, int lod); +ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod); +uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod); + +/* texelFetchOffset */ + vec4 texelFetchOffset( sampler1D sampler, int P, int lod, int offset); +ivec4 texelFetchOffset(isampler1D sampler, int P, int lod, int offset); +uvec4 texelFetchOffset(usampler1D sampler, int P, int lod, int offset); + + vec4 texelFetchOffset( sampler2D sampler, ivec2 P, int lod, ivec2 offset); +ivec4 texelFetchOffset(isampler2D sampler, ivec2 P, int lod, ivec2 offset); +uvec4 texelFetchOffset(usampler2D sampler, ivec2 P, int lod, ivec2 offset); + + vec4 texelFetchOffset( sampler3D sampler, ivec3 P, int lod, ivec3 offset); +ivec4 texelFetchOffset(isampler3D sampler, ivec3 P, int lod, ivec3 offset); +uvec4 texelFetchOffset(usampler3D sampler, ivec3 P, int lod, ivec3 offset); + + vec4 texelFetchOffset( sampler1DArray sampler, ivec2 P, int lod, int offset); +ivec4 texelFetchOffset(isampler1DArray sampler, ivec2 P, int lod, int offset); +uvec4 texelFetchOffset(usampler1DArray sampler, ivec2 P, int lod, int offset); + + vec4 texelFetchOffset( sampler2DArray sampler, ivec3 P, int lod, ivec2 offset); +ivec4 texelFetchOffset(isampler2DArray sampler, ivec3 P, int lod, ivec2 offset); +uvec4 texelFetchOffset(usampler2DArray sampler, ivec3 P, int lod, ivec2 offset); + +/* textureProjOffset - no bias */ + vec4 textureProjOffset( sampler1D sampler, vec2 P, int offset); +ivec4 textureProjOffset(isampler1D sampler, vec2 P, int offset); +uvec4 textureProjOffset(usampler1D sampler, vec2 P, int offset); + vec4 textureProjOffset( sampler1D sampler, vec4 P, int offset); +ivec4 textureProjOffset(isampler1D sampler, vec4 P, int offset); +uvec4 textureProjOffset(usampler1D sampler, vec4 P, int offset); + + vec4 textureProjOffset( sampler2D sampler, vec3 P, ivec2 offset); +ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset); +uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset); + vec4 textureProjOffset( sampler2D sampler, vec4 P, ivec2 offset); +ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset); +uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset); + + vec4 textureProjOffset( sampler3D sampler, vec4 P, ivec3 offset); +ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset); +uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset); + +float textureProjOffset(sampler1DShadow sampler, vec4 P, int offset); +float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset); + +/* textureLodOffset */ + vec4 textureLodOffset( sampler1D sampler, float P, float lod, int offset); +ivec4 textureLodOffset(isampler1D sampler, float P, float lod, int offset); +uvec4 textureLodOffset(usampler1D sampler, float P, float lod, int offset); + + vec4 textureLodOffset( sampler2D sampler, vec2 P, float lod, ivec2 offset); +ivec4 textureLodOffset(isampler2D sampler, vec2 P, float lod, ivec2 offset); +uvec4 textureLodOffset(usampler2D sampler, vec2 P, float lod, ivec2 offset); + + vec4 textureLodOffset( sampler3D sampler, vec3 P, float lod, ivec3 offset); +ivec4 textureLodOffset(isampler3D sampler, vec3 P, float lod, ivec3 offset); +uvec4 textureLodOffset(usampler3D sampler, vec3 P, float lod, ivec3 offset); + +float textureLodOffset(sampler1DShadow samp, vec3 P, float lod, int offset); +float textureLodOffset(sampler2DShadow samp, vec3 P, float lod, ivec2 offset); + + vec4 textureLodOffset( sampler1DArray sampler, vec2 P, float lod, int offset); +ivec4 textureLodOffset(isampler1DArray sampler, vec2 P, float lod, int offset); +uvec4 textureLodOffset(usampler1DArray sampler, vec2 P, float lod, int offset); + + vec4 textureLodOffset( sampler2DArray samp, vec3 P, float lod, ivec2 offset); +ivec4 textureLodOffset(isampler2DArray samp, vec3 P, float lod, ivec2 offset); +uvec4 textureLodOffset(usampler2DArray samp, vec3 P, float lod, ivec2 offset); + +float textureLodOffset(sampler1DArrayShadow s, vec3 P, float lod, int offset); + +/* textureProjLod */ + vec4 textureProjLod( sampler1D sampler, vec2 P, float lod); +ivec4 textureProjLod(isampler1D sampler, vec2 P, float lod); +uvec4 textureProjLod(usampler1D sampler, vec2 P, float lod); + vec4 textureProjLod( sampler1D sampler, vec4 P, float lod); +ivec4 textureProjLod(isampler1D sampler, vec4 P, float lod); +uvec4 textureProjLod(usampler1D sampler, vec4 P, float lod); + + vec4 textureProjLod( sampler2D sampler, vec3 P, float lod); +ivec4 textureProjLod(isampler2D sampler, vec3 P, float lod); +uvec4 textureProjLod(usampler2D sampler, vec3 P, float lod); + vec4 textureProjLod( sampler2D sampler, vec4 P, float lod); +ivec4 textureProjLod(isampler2D sampler, vec4 P, float lod); +uvec4 textureProjLod(usampler2D sampler, vec4 P, float lod); + + vec4 textureProjLod( sampler3D sampler, vec4 P, float lod); +ivec4 textureProjLod(isampler3D sampler, vec4 P, float lod); +uvec4 textureProjLod(usampler3D sampler, vec4 P, float lod); + +float textureProjLod(sampler1DShadow sampler, vec4 P, float lod); +float textureProjLod(sampler2DShadow sampler, vec4 P, float lod); + +/* textureProjLodOffset */ + vec4 textureProjLodOffset( sampler1D sampler, vec2 P, float lod, int offset); +ivec4 textureProjLodOffset(isampler1D sampler, vec2 P, float lod, int offset); +uvec4 textureProjLodOffset(usampler1D sampler, vec2 P, float lod, int offset); + vec4 textureProjLodOffset( sampler1D sampler, vec4 P, float lod, int offset); +ivec4 textureProjLodOffset(isampler1D sampler, vec4 P, float lod, int offset); +uvec4 textureProjLodOffset(usampler1D sampler, vec4 P, float lod, int offset); + + vec4 textureProjLodOffset( sampler2D sampler, vec3 P, float lod, ivec2 offset); +ivec4 textureProjLodOffset(isampler2D sampler, vec3 P, float lod, ivec2 offset); +uvec4 textureProjLodOffset(usampler2D sampler, vec3 P, float lod, ivec2 offset); + vec4 textureProjLodOffset( sampler2D sampler, vec4 P, float lod, ivec2 offset); +ivec4 textureProjLodOffset(isampler2D sampler, vec4 P, float lod, ivec2 offset); +uvec4 textureProjLodOffset(usampler2D sampler, vec4 P, float lod, ivec2 offset); + + vec4 textureProjLodOffset( sampler3D sampler, vec4 P, float lod, ivec3 offset); +ivec4 textureProjLodOffset(isampler3D sampler, vec4 P, float lod, ivec3 offset); +uvec4 textureProjLodOffset(usampler3D sampler, vec4 P, float lod, ivec3 offset); + +float textureProjLodOffset(sampler1DShadow s, vec4 P, float lod, int offset); +float textureProjLodOffset(sampler2DShadow s, vec4 P, float lod, ivec2 offset); + +/* textureGrad */ + vec4 textureGrad( sampler1D sampler, float P, float dPdx, float dPdy); +ivec4 textureGrad(isampler1D sampler, float P, float dPdx, float dPdy); +uvec4 textureGrad(usampler1D sampler, float P, float dPdx, float dPdy); + + vec4 textureGrad( sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); +ivec4 textureGrad(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); +uvec4 textureGrad(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); + + vec4 textureGrad( sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); +ivec4 textureGrad(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); +uvec4 textureGrad(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); + + vec4 textureGrad( samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); +ivec4 textureGrad(isamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); +uvec4 textureGrad(usamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); + +float textureGrad(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy); +float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); +float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy); + + vec4 textureGrad( sampler1DArray sampler, vec2 P, float dPdx, float dPdy); +ivec4 textureGrad(isampler1DArray sampler, vec2 P, float dPdx, float dPdy); +uvec4 textureGrad(usampler1DArray sampler, vec2 P, float dPdx, float dPdy); + + vec4 textureGrad( sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); +ivec4 textureGrad(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); +uvec4 textureGrad(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); + +float textureGrad(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy); +float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); + +/* textureGradOffset */ + vec4 textureGradOffset( sampler1D s, float P, float dx, float dy, int off); +ivec4 textureGradOffset(isampler1D s, float P, float dx, float dy, int offset); +uvec4 textureGradOffset(usampler1D s, float P, float dx, float dy, int offset); + + vec4 textureGradOffset( sampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); +ivec4 textureGradOffset(isampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); +uvec4 textureGradOffset(usampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); + + vec4 textureGradOffset( sampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); +ivec4 textureGradOffset(isampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); +uvec4 textureGradOffset(usampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); + +float textureGradOffset(sampler1DShadow s, vec3 P, float dx, float dy, int off); +float textureGradOffset(sampler2DShadow s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + + vec4 textureGradOffset( sampler1DArray s, vec2 P, float dx, float dy, int off); +ivec4 textureGradOffset(isampler1DArray s, vec2 P, float dx, float dy, int off); +uvec4 textureGradOffset(usampler1DArray s, vec2 P, float dx, float dy, int off); + + vec4 textureGradOffset( sampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureGradOffset(isampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureGradOffset(usampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + +float textureGradOffset(sampler1DArrayShadow s, vec3 P, float dx, float dy, int o); +float textureGradOffset(sampler2DArrayShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); + +/* textureProjGrad */ + vec4 textureProjGrad( sampler1D sampler, vec2 P, float dPdx, float dPdy); +ivec4 textureProjGrad(isampler1D sampler, vec2 P, float dPdx, float dPdy); +uvec4 textureProjGrad(usampler1D sampler, vec2 P, float dPdx, float dPdy); + vec4 textureProjGrad( sampler1D sampler, vec4 P, float dPdx, float dPdy); +ivec4 textureProjGrad(isampler1D sampler, vec4 P, float dPdx, float dPdy); +uvec4 textureProjGrad(usampler1D sampler, vec4 P, float dPdx, float dPdy); + + vec4 textureProjGrad( sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); +ivec4 textureProjGrad(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); +uvec4 textureProjGrad(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); + vec4 textureProjGrad( sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); +ivec4 textureProjGrad(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); +uvec4 textureProjGrad(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); + + vec4 textureProjGrad( sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); +ivec4 textureProjGrad(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); +uvec4 textureProjGrad(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); + +float textureProjGrad(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy); +float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); + +/* textureProjGradOffset */ + vec4 textureProjGradOffset( sampler1D s, vec2 P, float dx, float dy, int off); +ivec4 textureProjGradOffset(isampler1D s, vec2 P, float dx, float dy, int off); +uvec4 textureProjGradOffset(usampler1D s, vec2 P, float dx, float dy, int off); + vec4 textureProjGradOffset( sampler1D s, vec4 P, float dx, float dy, int off); +ivec4 textureProjGradOffset(isampler1D s, vec4 P, float dx, float dy, int off); +uvec4 textureProjGradOffset(usampler1D s, vec4 P, float dx, float dy, int off); + + vec4 textureProjGradOffset( sampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureProjGradOffset(isampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureProjGradOffset(usampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + vec4 textureProjGradOffset( sampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureProjGradOffset(isampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureProjGradOffset(usampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); + + vec4 textureProjGradOffset( sampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); +ivec4 textureProjGradOffset(isampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); +uvec4 textureProjGradOffset(usampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); + +float textureProjGradOffset(sampler1DShadow s, vec4 P, float dx, float dy, int o); +float textureProjGradOffset(sampler2DShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); + +/* + * The following texture functions are deprecated: + */ +vec4 texture1D (sampler1D sampler, float coord); +vec4 texture1DProj (sampler1D sampler, vec2 coord); +vec4 texture1DProj (sampler1D sampler, vec4 coord); +vec4 texture1DLod (sampler1D sampler, float coord, float lod); +vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod); +vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod); + +vec4 texture2D (sampler2D sampler, vec2 coord); +vec4 texture2DProj (sampler2D sampler, vec3 coord); +vec4 texture2DProj (sampler2D sampler, vec4 coord); +vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); +vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); +vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); + +vec4 texture3D (sampler3D sampler, vec3 coord); +vec4 texture3DProj (sampler3D sampler, vec4 coord); +vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod); +vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod); + +vec4 textureCube (samplerCube sampler, vec3 coord); +vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); + +vec4 shadow1D (sampler1DShadow sampler, vec3 coord); +vec4 shadow2D (sampler2DShadow sampler, vec3 coord); +vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); +vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); +vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); +vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); +vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); +vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); + +/* + * 8.9 - Noise Functions + */ +float noise1(float x); +float noise1(vec2 x); +float noise1(vec3 x); +float noise1(vec4 x); + +vec2 noise2(float x); +vec2 noise2(vec2 x); +vec2 noise2(vec3 x); +vec2 noise2(vec4 x); + +vec3 noise3(float x); +vec3 noise3(vec2 x); +vec3 noise3(vec3 x); +vec3 noise3(vec4 x); + +vec4 noise4(float x); +vec4 noise4(vec2 x); +vec4 noise4(vec3 x); +vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.vert b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.vert index f85b27f8f..99d127eb8 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.vert +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/130.vert @@ -1,1027 +1,2 @@ #version 130 -/* - * 8.1 - Angle and Trigonometry Functions - */ -float radians(float degrees); -vec2 radians(vec2 degrees); -vec3 radians(vec3 degrees); -vec4 radians(vec4 degrees); - -float degrees(float radians); -vec2 degrees(vec2 radians); -vec3 degrees(vec3 radians); -vec4 degrees(vec4 radians); - -float sin(float angle); -vec2 sin(vec2 angle); -vec3 sin(vec3 angle); -vec4 sin(vec4 angle); - -float cos(float angle); -vec2 cos(vec2 angle); -vec3 cos(vec3 angle); -vec4 cos(vec4 angle); - -float tan(float angle); -vec2 tan(vec2 angle); -vec3 tan(vec3 angle); -vec4 tan(vec4 angle); - -float asin(float angle); -vec2 asin(vec2 angle); -vec3 asin(vec3 angle); -vec4 asin(vec4 angle); - -float acos(float angle); -vec2 acos(vec2 angle); -vec3 acos(vec3 angle); -vec4 acos(vec4 angle); - -float atan(float y, float x); -vec2 atan(vec2 y, vec2 x); -vec3 atan(vec3 y, vec3 x); -vec4 atan(vec4 y, vec4 x); - -float atan(float y_over_x); -vec2 atan(vec2 y_over_x); -vec3 atan(vec3 y_over_x); -vec4 atan(vec4 y_over_x); - -float sinh(float x); -vec2 sinh(vec2 x); -vec3 sinh(vec3 x); -vec4 sinh(vec4 x); - -float cosh(float x); -vec2 cosh(vec2 x); -vec3 cosh(vec3 x); -vec4 cosh(vec4 x); - -float tanh(float x); -vec2 tanh(vec2 x); -vec3 tanh(vec3 x); -vec4 tanh(vec4 x); - -float asinh(float x); -vec2 asinh(vec2 x); -vec3 asinh(vec3 x); -vec4 asinh(vec4 x); - -float acosh(float x); -vec2 acosh(vec2 x); -vec3 acosh(vec3 x); -vec4 acosh(vec4 x); - -float atanh(float x); -vec2 atanh(vec2 x); -vec3 atanh(vec3 x); -vec4 atanh(vec4 x); - -/* - * 8.2 - Exponential Functions - */ -float pow(float x, float y); -vec2 pow(vec2 x, vec2 y); -vec3 pow(vec3 x, vec3 y); -vec4 pow(vec4 x, vec4 y); - -float exp(float x); -vec2 exp(vec2 x); -vec3 exp(vec3 x); -vec4 exp(vec4 x); - -float log(float x); -vec2 log(vec2 x); -vec3 log(vec3 x); -vec4 log(vec4 x); - -float exp2(float x); -vec2 exp2(vec2 x); -vec3 exp2(vec3 x); -vec4 exp2(vec4 x); - -float log2(float x); -vec2 log2(vec2 x); -vec3 log2(vec3 x); -vec4 log2(vec4 x); - -float sqrt(float x); -vec2 sqrt(vec2 x); -vec3 sqrt(vec3 x); -vec4 sqrt(vec4 x); - -float inversesqrt(float x); -vec2 inversesqrt(vec2 x); -vec3 inversesqrt(vec3 x); -vec4 inversesqrt(vec4 x); - -/* - * 8.3 - Common Functions - */ -float abs(float x); -vec2 abs(vec2 x); -vec3 abs(vec3 x); -vec4 abs(vec4 x); -int abs(int x); -ivec2 abs(ivec2 x); -ivec3 abs(ivec3 x); -ivec4 abs(ivec4 x); - -float sign(float x); -vec2 sign(vec2 x); -vec3 sign(vec3 x); -vec4 sign(vec4 x); -int sign(int x); -ivec2 sign(ivec2 x); -ivec3 sign(ivec3 x); -ivec4 sign(ivec4 x); - -float floor(float x); -vec2 floor(vec2 x); -vec3 floor(vec3 x); -vec4 floor(vec4 x); - -float trunc(float x); -vec2 trunc(vec2 x); -vec3 trunc(vec3 x); -vec4 trunc(vec4 x); - -float round(float x); -vec2 round(vec2 x); -vec3 round(vec3 x); -vec4 round(vec4 x); - -float roundEven(float x); -vec2 roundEven(vec2 x); -vec3 roundEven(vec3 x); -vec4 roundEven(vec4 x); - -float ceil(float x); -vec2 ceil(vec2 x); -vec3 ceil(vec3 x); -vec4 ceil(vec4 x); - -float fract(float x); -vec2 fract(vec2 x); -vec3 fract(vec3 x); -vec4 fract(vec4 x); - -float mod(float x, float y); -vec2 mod(vec2 x, float y); -vec3 mod(vec3 x, float y); -vec4 mod(vec4 x, float y); - -vec2 mod(vec2 x, vec2 y); -vec3 mod(vec3 x, vec3 y); -vec4 mod(vec4 x, vec4 y); - -float modf(float x, out float i); -vec2 modf(vec2 x, out vec2 i); -vec3 modf(vec3 x, out vec3 i); -vec4 modf(vec4 x, out vec4 i); - -float min(float x, float y); -vec2 min(vec2 x, vec2 y); -vec3 min(vec3 x, vec3 y); -vec4 min(vec4 x, vec4 y); - -vec2 min(vec2 x, float y); -vec3 min(vec3 x, float y); -vec4 min(vec4 x, float y); - -int min(int x, int y); -ivec2 min(ivec2 x, ivec2 y); -ivec3 min(ivec3 x, ivec3 y); -ivec4 min(ivec4 x, ivec4 y); - -ivec2 min(ivec2 x, int y); -ivec3 min(ivec3 x, int y); -ivec4 min(ivec4 x, int y); - -uint min(uint x, uint y); -uvec2 min(uvec2 x, uvec2 y); -uvec3 min(uvec3 x, uvec3 y); -uvec4 min(uvec4 x, uvec4 y); - -uvec2 min(uvec2 x, uint y); -uvec3 min(uvec3 x, uint y); -uvec4 min(uvec4 x, uint y); - -float max(float x, float y); -vec2 max(vec2 x, vec2 y); -vec3 max(vec3 x, vec3 y); -vec4 max(vec4 x, vec4 y); - -vec2 max(vec2 x, float y); -vec3 max(vec3 x, float y); -vec4 max(vec4 x, float y); - -int max(int x, int y); -ivec2 max(ivec2 x, ivec2 y); -ivec3 max(ivec3 x, ivec3 y); -ivec4 max(ivec4 x, ivec4 y); - -ivec2 max(ivec2 x, int y); -ivec3 max(ivec3 x, int y); -ivec4 max(ivec4 x, int y); - -uint max(uint x, uint y); -uvec2 max(uvec2 x, uvec2 y); -uvec3 max(uvec3 x, uvec3 y); -uvec4 max(uvec4 x, uvec4 y); - -uvec2 max(uvec2 x, uint y); -uvec3 max(uvec3 x, uint y); -uvec4 max(uvec4 x, uint y); - -float clamp(float x, float minVal, float maxVal); -vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); -vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); -vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); - -vec2 clamp(vec2 x, float minVal, float maxVal); -vec3 clamp(vec3 x, float minVal, float maxVal); -vec4 clamp(vec4 x, float minVal, float maxVal); - -int clamp(int x, int minVal, int maxVal); -ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal); -ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal); -ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal); - -ivec2 clamp(ivec2 x, int minVal, int maxVal); -ivec3 clamp(ivec3 x, int minVal, int maxVal); -ivec4 clamp(ivec4 x, int minVal, int maxVal); - -uint clamp(uint x, uint minVal, uint maxVal); -uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal); -uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal); -uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal); - -uvec2 clamp(uvec2 x, uint minVal, uint maxVal); -uvec3 clamp(uvec3 x, uint minVal, uint maxVal); -uvec4 clamp(uvec4 x, uint minVal, uint maxVal); - -float mix(float x, float y, float a); -vec2 mix(vec2 x, vec2 y, vec2 a); -vec3 mix(vec3 x, vec3 y, vec3 a); -vec4 mix(vec4 x, vec4 y, vec4 a); - -vec2 mix(vec2 x, vec2 y, float a); -vec3 mix(vec3 x, vec3 y, float a); -vec4 mix(vec4 x, vec4 y, float a); - -float step(float edge, float x); -vec2 step(vec2 edge, vec2 x); -vec3 step(vec3 edge, vec3 x); -vec4 step(vec4 edge, vec4 x); - -vec2 step(float edge, vec2 x); -vec3 step(float edge, vec3 x); -vec4 step(float edge, vec4 x); - -float smoothstep(float edge0, float edge1, float x); -vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); -vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); -vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); - -vec2 smoothstep(float edge0, float edge1, vec2 x); -vec3 smoothstep(float edge0, float edge1, vec3 x); -vec4 smoothstep(float edge0, float edge1, vec4 x); - -#if 0 -bool isnan(float x); -bvec2 isnan(vec2 x); -bvec3 isnan(vec3 x); -bvec4 isnan(vec4 x); - -bool isinf(float x); -bvec2 isinf(vec2 x); -bvec3 isinf(vec3 x); -bvec4 isinf(vec4 x); -#endif - -/* - * 8.4 - Geometric Functions - */ -float length(float x); -float length(vec2 x); -float length(vec3 x); -float length(vec4 x); - -float distance(float p0, float p1); -float distance(vec2 p0, vec2 p1); -float distance(vec3 p0, vec3 p1); -float distance(vec4 p0, vec4 p1); - -float dot(float x, float y); -float dot(vec2 x, vec2 y); -float dot(vec3 x, vec3 y); -float dot(vec4 x, vec4 y); - -vec3 cross(vec3 x, vec3 y); - -float normalize(float x); -vec2 normalize(vec2 x); -vec3 normalize(vec3 x); -vec4 normalize(vec4 x); - vec4 ftransform(); - -float faceforward(float N, float I, float Nref); -vec2 faceforward(vec2 N, vec2 I, vec2 Nref); -vec3 faceforward(vec3 N, vec3 I, vec3 Nref); -vec4 faceforward(vec4 N, vec4 I, vec4 Nref); - -float reflect(float I, float N); -vec2 reflect(vec2 I, vec2 N); -vec3 reflect(vec3 I, vec3 N); -vec4 reflect(vec4 I, vec4 N); - -float refract(float I, float N, float eta); -vec2 refract(vec2 I, vec2 N, float eta); -vec3 refract(vec3 I, vec3 N, float eta); -vec4 refract(vec4 I, vec4 N, float eta); - - -/* - * 8.5 - Matrix Functions - */ -mat2 matrixCompMult(mat2 x, mat2 y); -mat3 matrixCompMult(mat3 x, mat3 y); -mat4 matrixCompMult(mat4 x, mat4 y); -mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); -mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); -mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); -mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); -mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); -mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); - -mat2 outerProduct(vec2 c, vec2 r); -mat3 outerProduct(vec3 c, vec3 r); -mat4 outerProduct(vec4 c, vec4 r); - -mat2x3 outerProduct(vec3 c, vec2 r); -mat3x2 outerProduct(vec2 c, vec3 r); - -mat2x4 outerProduct(vec4 c, vec2 r); -mat4x2 outerProduct(vec2 c, vec4 r); - -mat3x4 outerProduct(vec4 c, vec3 r); -mat4x3 outerProduct(vec3 c, vec4 r); - -mat2 transpose(mat2 m); -mat3 transpose(mat3 m); -mat4 transpose(mat4 m); - -mat2x3 transpose(mat3x2 m); -mat3x2 transpose(mat2x3 m); - -mat2x4 transpose(mat4x2 m); -mat4x2 transpose(mat2x4 m); - -mat3x4 transpose(mat4x3 m); -mat4x3 transpose(mat3x4 m); - -/* - * 8.6 - Vector Relational Functions - */ -bvec2 lessThan( vec2 x, vec2 y); -bvec3 lessThan( vec3 x, vec3 y); -bvec4 lessThan( vec4 x, vec4 y); -bvec2 lessThan(ivec2 x, ivec2 y); -bvec3 lessThan(ivec3 x, ivec3 y); -bvec4 lessThan(ivec4 x, ivec4 y); -bvec2 lessThan(uvec2 x, uvec2 y); -bvec3 lessThan(uvec3 x, uvec3 y); -bvec4 lessThan(uvec4 x, uvec4 y); - -bvec2 lessThanEqual( vec2 x, vec2 y); -bvec3 lessThanEqual( vec3 x, vec3 y); -bvec4 lessThanEqual( vec4 x, vec4 y); -bvec2 lessThanEqual(ivec2 x, ivec2 y); -bvec3 lessThanEqual(ivec3 x, ivec3 y); -bvec4 lessThanEqual(ivec4 x, ivec4 y); -bvec2 lessThanEqual(uvec2 x, uvec2 y); -bvec3 lessThanEqual(uvec3 x, uvec3 y); -bvec4 lessThanEqual(uvec4 x, uvec4 y); - -bvec2 greaterThan( vec2 x, vec2 y); -bvec3 greaterThan( vec3 x, vec3 y); -bvec4 greaterThan( vec4 x, vec4 y); -bvec2 greaterThan(ivec2 x, ivec2 y); -bvec3 greaterThan(ivec3 x, ivec3 y); -bvec4 greaterThan(ivec4 x, ivec4 y); -bvec2 greaterThan(uvec2 x, uvec2 y); -bvec3 greaterThan(uvec3 x, uvec3 y); -bvec4 greaterThan(uvec4 x, uvec4 y); - -bvec2 greaterThanEqual( vec2 x, vec2 y); -bvec3 greaterThanEqual( vec3 x, vec3 y); -bvec4 greaterThanEqual( vec4 x, vec4 y); -bvec2 greaterThanEqual(ivec2 x, ivec2 y); -bvec3 greaterThanEqual(ivec3 x, ivec3 y); -bvec4 greaterThanEqual(ivec4 x, ivec4 y); -bvec2 greaterThanEqual(uvec2 x, uvec2 y); -bvec3 greaterThanEqual(uvec3 x, uvec3 y); -bvec4 greaterThanEqual(uvec4 x, uvec4 y); - -bvec2 equal( vec2 x, vec2 y); -bvec3 equal( vec3 x, vec3 y); -bvec4 equal( vec4 x, vec4 y); -bvec2 equal(ivec2 x, ivec2 y); -bvec3 equal(ivec3 x, ivec3 y); -bvec4 equal(ivec4 x, ivec4 y); -bvec2 equal(uvec2 x, uvec2 y); -bvec3 equal(uvec3 x, uvec3 y); -bvec4 equal(uvec4 x, uvec4 y); -bvec2 equal(bvec2 x, bvec2 y); -bvec3 equal(bvec3 x, bvec3 y); -bvec4 equal(bvec4 x, bvec4 y); - -bvec2 notEqual( vec2 x, vec2 y); -bvec3 notEqual( vec3 x, vec3 y); -bvec4 notEqual( vec4 x, vec4 y); -bvec2 notEqual(ivec2 x, ivec2 y); -bvec3 notEqual(ivec3 x, ivec3 y); -bvec4 notEqual(ivec4 x, ivec4 y); -bvec2 notEqual(uvec2 x, uvec2 y); -bvec3 notEqual(uvec3 x, uvec3 y); -bvec4 notEqual(uvec4 x, uvec4 y); -bvec2 notEqual(bvec2 x, bvec2 y); -bvec3 notEqual(bvec3 x, bvec3 y); -bvec4 notEqual(bvec4 x, bvec4 y); - -bool any(bvec2 x); -bool any(bvec3 x); -bool any(bvec4 x); - -bool all(bvec2 x); -bool all(bvec3 x); -bool all(bvec4 x); - -bvec2 not(bvec2 x); -bvec3 not(bvec3 x); -bvec4 not(bvec4 x); - -/* - * 8.7 - Texture Lookup Functions - */ - -#if 0 -/* textureSize */ -int textureSize( sampler1D sampler, int lod); -int textureSize(isampler1D sampler, int lod); -int textureSize(usampler1D sampler, int lod); - -ivec2 textureSize( sampler2D sampler, int lod); -ivec2 textureSize(isampler2D sampler, int lod); -ivec2 textureSize(usampler2D sampler, int lod); - -ivec3 textureSize( sampler3D sampler, int lod); -ivec3 textureSize(isampler3D sampler, int lod); -ivec3 textureSize(usampler3D sampler, int lod); - -ivec2 textureSize( samplerCube sampler, int lod); -ivec2 textureSize(isamplerCube sampler, int lod); -ivec2 textureSize(usamplerCube sampler, int lod); - -int textureSize(sampler1DShadow sampler, int lod); -ivec2 textureSize(sampler2DShadow sampler, int lod); -ivec2 textureSize(samplerCubeShadow sampler, int lod); - -ivec2 textureSize( sampler1DArray sampler, int lod); -ivec2 textureSize(isampler1DArray sampler, int lod); -ivec2 textureSize(usampler1DArray sampler, int lod); -ivec3 textureSize( sampler2DArray sampler, int lod); -ivec3 textureSize(isampler2DArray sampler, int lod); -ivec3 textureSize(usampler2DArray sampler, int lod); - -ivec2 textureSize(sampler1DArrayShadow sampler, int lod); -ivec3 textureSize(sampler2DArrayShadow sampler, int lod); -#endif - -/* texture - no bias */ - vec4 texture( sampler1D sampler, float P); -ivec4 texture(isampler1D sampler, float P); -uvec4 texture(usampler1D sampler, float P); - - vec4 texture( sampler2D sampler, vec2 P); -ivec4 texture(isampler2D sampler, vec2 P); -uvec4 texture(usampler2D sampler, vec2 P); - - vec4 texture( sampler3D sampler, vec3 P); -ivec4 texture(isampler3D sampler, vec3 P); -uvec4 texture(usampler3D sampler, vec3 P); - - vec4 texture( samplerCube sampler, vec3 P); -ivec4 texture(isamplerCube sampler, vec3 P); -uvec4 texture(usamplerCube sampler, vec3 P); - -float texture(sampler1DShadow sampler, vec3 P); -float texture(sampler2DShadow sampler, vec3 P); -float texture(samplerCubeShadow sampler, vec4 P); - - vec4 texture( sampler1DArray sampler, vec2 P); -ivec4 texture(isampler1DArray sampler, vec2 P); -uvec4 texture(usampler1DArray sampler, vec2 P); - - vec4 texture( sampler2DArray sampler, vec3 P); -ivec4 texture(isampler2DArray sampler, vec3 P); -uvec4 texture(usampler2DArray sampler, vec3 P); - -float texture(sampler1DArrayShadow sampler, vec3 P); -float texture(sampler2DArrayShadow sampler, vec4 P); - -/* texture - bias variants */ - vec4 texture( sampler1D sampler, float P, float bias); -ivec4 texture(isampler1D sampler, float P, float bias); -uvec4 texture(usampler1D sampler, float P, float bias); - - vec4 texture( sampler2D sampler, vec2 P, float bias); -ivec4 texture(isampler2D sampler, vec2 P, float bias); -uvec4 texture(usampler2D sampler, vec2 P, float bias); - - vec4 texture( sampler3D sampler, vec3 P, float bias); -ivec4 texture(isampler3D sampler, vec3 P, float bias); -uvec4 texture(usampler3D sampler, vec3 P, float bias); - - vec4 texture( samplerCube sampler, vec3 P, float bias); -ivec4 texture(isamplerCube sampler, vec3 P, float bias); -uvec4 texture(usamplerCube sampler, vec3 P, float bias); - -float texture(sampler1DShadow sampler, vec3 P, float bias); -float texture(sampler2DShadow sampler, vec3 P, float bias); -float texture(samplerCubeShadow sampler, vec4 P, float bias); - - vec4 texture( sampler1DArray sampler, vec2 P, float bias); -ivec4 texture(isampler1DArray sampler, vec2 P, float bias); -uvec4 texture(usampler1DArray sampler, vec2 P, float bias); - - vec4 texture( sampler2DArray sampler, vec3 P, float bias); -ivec4 texture(isampler2DArray sampler, vec3 P, float bias); -uvec4 texture(usampler2DArray sampler, vec3 P, float bias); - -float texture(sampler1DArrayShadow sampler, vec3 P, float bias); - -/* textureProj - no bias */ - vec4 textureProj( sampler1D sampler, vec2 P); -ivec4 textureProj(isampler1D sampler, vec2 P); -uvec4 textureProj(usampler1D sampler, vec2 P); - vec4 textureProj( sampler1D sampler, vec4 P); -ivec4 textureProj(isampler1D sampler, vec4 P); -uvec4 textureProj(usampler1D sampler, vec4 P); - - vec4 textureProj( sampler2D sampler, vec3 P); -ivec4 textureProj(isampler2D sampler, vec3 P); -uvec4 textureProj(usampler2D sampler, vec3 P); - vec4 textureProj( sampler2D sampler, vec4 P); -ivec4 textureProj(isampler2D sampler, vec4 P); -uvec4 textureProj(usampler2D sampler, vec4 P); - - vec4 textureProj( sampler3D sampler, vec4 P); -ivec4 textureProj(isampler3D sampler, vec4 P); -uvec4 textureProj(usampler3D sampler, vec4 P); - -float textureProj(sampler1DShadow sampler, vec4 P); -float textureProj(sampler2DShadow sampler, vec4 P); - -/* textureProj - bias variants */ - vec4 textureProj( sampler1D sampler, vec2 P, float bias); -ivec4 textureProj(isampler1D sampler, vec2 P, float bias); -uvec4 textureProj(usampler1D sampler, vec2 P, float bias); - vec4 textureProj( sampler1D sampler, vec4 P, float bias); -ivec4 textureProj(isampler1D sampler, vec4 P, float bias); -uvec4 textureProj(usampler1D sampler, vec4 P, float bias); - - vec4 textureProj( sampler2D sampler, vec3 P, float bias); -ivec4 textureProj(isampler2D sampler, vec3 P, float bias); -uvec4 textureProj(usampler2D sampler, vec3 P, float bias); - vec4 textureProj( sampler2D sampler, vec4 P, float bias); -ivec4 textureProj(isampler2D sampler, vec4 P, float bias); -uvec4 textureProj(usampler2D sampler, vec4 P, float bias); - - vec4 textureProj( sampler3D sampler, vec4 P, float bias); -ivec4 textureProj(isampler3D sampler, vec4 P, float bias); -uvec4 textureProj(usampler3D sampler, vec4 P, float bias); - -float textureProj(sampler1DShadow sampler, vec4 P, float bias); -float textureProj(sampler2DShadow sampler, vec4 P, float bias); - -/* textureLod */ - vec4 textureLod( sampler1D sampler, float P, float lod); -ivec4 textureLod(isampler1D sampler, float P, float lod); -uvec4 textureLod(usampler1D sampler, float P, float lod); - - vec4 textureLod( sampler2D sampler, vec2 P, float lod); -ivec4 textureLod(isampler2D sampler, vec2 P, float lod); -uvec4 textureLod(usampler2D sampler, vec2 P, float lod); - - vec4 textureLod( sampler3D sampler, vec3 P, float lod); -ivec4 textureLod(isampler3D sampler, vec3 P, float lod); -uvec4 textureLod(usampler3D sampler, vec3 P, float lod); - - vec4 textureLod( samplerCube sampler, vec3 P, float lod); -ivec4 textureLod(isamplerCube sampler, vec3 P, float lod); -uvec4 textureLod(usamplerCube sampler, vec3 P, float lod); - -float textureLod(sampler1DShadow sampler, vec3 P, float lod); -float textureLod(sampler2DShadow sampler, vec3 P, float lod); - - vec4 textureLod( sampler1DArray sampler, vec2 P, float lod); -ivec4 textureLod(isampler1DArray sampler, vec2 P, float lod); -uvec4 textureLod(usampler1DArray sampler, vec2 P, float lod); - - vec4 textureLod( sampler2DArray sampler, vec3 P, float lod); -ivec4 textureLod(isampler2DArray sampler, vec3 P, float lod); -uvec4 textureLod(usampler2DArray sampler, vec3 P, float lod); - -float textureLod(sampler1DArrayShadow sampler, vec3 P, float lod); - -/* textureOffset - no bias */ - vec4 textureOffset( sampler1D sampler, float P, int offset); -ivec4 textureOffset(isampler1D sampler, float P, int offset); -uvec4 textureOffset(usampler1D sampler, float P, int offset); - - vec4 textureOffset( sampler2D sampler, vec2 P, ivec2 offset); -ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset); -uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset); - - vec4 textureOffset( sampler3D sampler, vec3 P, ivec3 offset); -ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset); -uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset); - -float textureOffset(sampler1DShadow sampler, vec3 P, int offset); -float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset); - - vec4 textureOffset( sampler1DArray sampler, vec2 P, int offset); -ivec4 textureOffset(isampler1DArray sampler, vec2 P, int offset); -uvec4 textureOffset(usampler1DArray sampler, vec2 P, int offset); - - vec4 textureOffset( sampler2DArray sampler, vec3 P, ivec2 offset); -ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset); -uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset); - -float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset); - -/* textureOffset - bias variants */ - vec4 textureOffset( sampler1D sampler, float P, int offset, float bias); -ivec4 textureOffset(isampler1D sampler, float P, int offset, float bias); -uvec4 textureOffset(usampler1D sampler, float P, int offset, float bias); - - vec4 textureOffset( sampler2D sampler, vec2 P, ivec2 offset, float bias); -ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset, float bias); -uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset, float bias); - - vec4 textureOffset( sampler3D sampler, vec3 P, ivec3 offset, float bias); -ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset, float bias); -uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset, float bias); - -float textureOffset(sampler1DShadow sampler, vec3 P, int offset, float bias); -float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset, float bias); - - vec4 textureOffset( sampler1DArray sampler, vec2 P, int offset, float bias); -ivec4 textureOffset(isampler1DArray sampler, vec2 P, int offset, float bias); -uvec4 textureOffset(usampler1DArray sampler, vec2 P, int offset, float bias); - - vec4 textureOffset( sampler2DArray sampler, vec3 P, ivec2 offset, float bias); -ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset, float bias); -uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset, float bias); - -float textureOffset(sampler1DArrayShadow samp, vec3 P, int offset, float bias); - -/* texelFetch */ - vec4 texelFetch( sampler1D sampler, int P, int lod); -ivec4 texelFetch(isampler1D sampler, int P, int lod); -uvec4 texelFetch(usampler1D sampler, int P, int lod); - - vec4 texelFetch( sampler2D sampler, ivec2 P, int lod); -ivec4 texelFetch(isampler2D sampler, ivec2 P, int lod); -uvec4 texelFetch(usampler2D sampler, ivec2 P, int lod); - - vec4 texelFetch( sampler3D sampler, ivec3 P, int lod); -ivec4 texelFetch(isampler3D sampler, ivec3 P, int lod); -uvec4 texelFetch(usampler3D sampler, ivec3 P, int lod); - - vec4 texelFetch( sampler1DArray sampler, ivec2 P, int lod); -ivec4 texelFetch(isampler1DArray sampler, ivec2 P, int lod); -uvec4 texelFetch(usampler1DArray sampler, ivec2 P, int lod); - - vec4 texelFetch( sampler2DArray sampler, ivec3 P, int lod); -ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod); -uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod); - -/* texelFetchOffset */ - vec4 texelFetchOffset( sampler1D sampler, int P, int lod, int offset); -ivec4 texelFetchOffset(isampler1D sampler, int P, int lod, int offset); -uvec4 texelFetchOffset(usampler1D sampler, int P, int lod, int offset); - - vec4 texelFetchOffset( sampler2D sampler, ivec2 P, int lod, ivec2 offset); -ivec4 texelFetchOffset(isampler2D sampler, ivec2 P, int lod, ivec2 offset); -uvec4 texelFetchOffset(usampler2D sampler, ivec2 P, int lod, ivec2 offset); - - vec4 texelFetchOffset( sampler3D sampler, ivec3 P, int lod, ivec3 offset); -ivec4 texelFetchOffset(isampler3D sampler, ivec3 P, int lod, ivec3 offset); -uvec4 texelFetchOffset(usampler3D sampler, ivec3 P, int lod, ivec3 offset); - - vec4 texelFetchOffset( sampler1DArray sampler, ivec2 P, int lod, int offset); -ivec4 texelFetchOffset(isampler1DArray sampler, ivec2 P, int lod, int offset); -uvec4 texelFetchOffset(usampler1DArray sampler, ivec2 P, int lod, int offset); - - vec4 texelFetchOffset( sampler2DArray sampler, ivec3 P, int lod, ivec2 offset); -ivec4 texelFetchOffset(isampler2DArray sampler, ivec3 P, int lod, ivec2 offset); -uvec4 texelFetchOffset(usampler2DArray sampler, ivec3 P, int lod, ivec2 offset); - -/* textureProjOffset - no bias */ - vec4 textureProj( sampler1D sampler, vec2 P, int offset); -ivec4 textureProj(isampler1D sampler, vec2 P, int offset); -uvec4 textureProj(usampler1D sampler, vec2 P, int offset); - vec4 textureProj( sampler1D sampler, vec4 P, int offset); -ivec4 textureProj(isampler1D sampler, vec4 P, int offset); -uvec4 textureProj(usampler1D sampler, vec4 P, int offset); - - vec4 textureProj( sampler2D sampler, vec3 P, ivec2 offset); -ivec4 textureProj(isampler2D sampler, vec3 P, ivec2 offset); -uvec4 textureProj(usampler2D sampler, vec3 P, ivec2 offset); - vec4 textureProj( sampler2D sampler, vec4 P, ivec2 offset); -ivec4 textureProj(isampler2D sampler, vec4 P, ivec2 offset); -uvec4 textureProj(usampler2D sampler, vec4 P, ivec2 offset); - - vec4 textureProj( sampler3D sampler, vec4 P, ivec3 offset); -ivec4 textureProj(isampler3D sampler, vec4 P, ivec3 offset); -uvec4 textureProj(usampler3D sampler, vec4 P, ivec3 offset); - -float textureProj(sampler1DShadow sampler, vec4 P, int offset); -float textureProj(sampler2DShadow sampler, vec4 P, ivec2 offset); - -/* textureProjOffset - bias variants */ - vec4 textureProj( sampler1D sampler, vec2 P, int offset, float bias); -ivec4 textureProj(isampler1D sampler, vec2 P, int offset, float bias); -uvec4 textureProj(usampler1D sampler, vec2 P, int offset, float bias); - vec4 textureProj( sampler1D sampler, vec4 P, int offset, float bias); -ivec4 textureProj(isampler1D sampler, vec4 P, int offset, float bias); -uvec4 textureProj(usampler1D sampler, vec4 P, int offset, float bias); - - vec4 textureProj( sampler2D sampler, vec3 P, ivec2 offset, float bias); -ivec4 textureProj(isampler2D sampler, vec3 P, ivec2 offset, float bias); -uvec4 textureProj(usampler2D sampler, vec3 P, ivec2 offset, float bias); - vec4 textureProj( sampler2D sampler, vec4 P, ivec2 offset, float bias); -ivec4 textureProj(isampler2D sampler, vec4 P, ivec2 offset, float bias); -uvec4 textureProj(usampler2D sampler, vec4 P, ivec2 offset, float bias); - - vec4 textureProj( sampler3D sampler, vec4 P, ivec3 offset, float bias); -ivec4 textureProj(isampler3D sampler, vec4 P, ivec3 offset, float bias); -uvec4 textureProj(usampler3D sampler, vec4 P, ivec3 offset, float bias); - -float textureProj(sampler1DShadow sampler, vec4 P, int offset, float bias); -float textureProj(sampler2DShadow sampler, vec4 P, ivec2 offset, float bias); - -/* textureLodOffset */ - vec4 textureLodOffset( sampler1D sampler, float P, float lod, int offset); -ivec4 textureLodOffset(isampler1D sampler, float P, float lod, int offset); -uvec4 textureLodOffset(usampler1D sampler, float P, float lod, int offset); - - vec4 textureLodOffset( sampler2D sampler, vec2 P, float lod, ivec2 offset); -ivec4 textureLodOffset(isampler2D sampler, vec2 P, float lod, ivec2 offset); -uvec4 textureLodOffset(usampler2D sampler, vec2 P, float lod, ivec2 offset); - - vec4 textureLodOffset( sampler3D sampler, vec3 P, float lod, ivec3 offset); -ivec4 textureLodOffset(isampler3D sampler, vec3 P, float lod, ivec3 offset); -uvec4 textureLodOffset(usampler3D sampler, vec3 P, float lod, ivec3 offset); - -float textureLodOffset(sampler1DShadow samp, vec3 P, float lod, int offset); -float textureLodOffset(sampler2DShadow samp, vec3 P, float lod, ivec2 offset); - - vec4 textureLodOffset( sampler1DArray sampler, vec2 P, float lod, int offset); -ivec4 textureLodOffset(isampler1DArray sampler, vec2 P, float lod, int offset); -uvec4 textureLodOffset(usampler1DArray sampler, vec2 P, float lod, int offset); - - vec4 textureLodOffset( sampler2DArray samp, vec3 P, float lod, ivec2 offset); -ivec4 textureLodOffset(isampler2DArray samp, vec3 P, float lod, ivec2 offset); -uvec4 textureLodOffset(usampler2DArray samp, vec3 P, float lod, ivec2 offset); - -float textureLodOffset(sampler1DArrayShadow s, vec3 P, float lod, int offset); - -/* textureProjLod */ - vec4 textureProjLod( sampler1D sampler, vec2 P, float lod); -ivec4 textureProjLod(isampler1D sampler, vec2 P, float lod); -uvec4 textureProjLod(usampler1D sampler, vec2 P, float lod); - vec4 textureProjLod( sampler1D sampler, vec4 P, float lod); -ivec4 textureProjLod(isampler1D sampler, vec4 P, float lod); -uvec4 textureProjLod(usampler1D sampler, vec4 P, float lod); - - vec4 textureProjLod( sampler2D sampler, vec3 P, float lod); -ivec4 textureProjLod(isampler2D sampler, vec3 P, float lod); -uvec4 textureProjLod(usampler2D sampler, vec3 P, float lod); - vec4 textureProjLod( sampler2D sampler, vec4 P, float lod); -ivec4 textureProjLod(isampler2D sampler, vec4 P, float lod); -uvec4 textureProjLod(usampler2D sampler, vec4 P, float lod); - - vec4 textureProjLod( sampler3D sampler, vec4 P, float lod); -ivec4 textureProjLod(isampler3D sampler, vec4 P, float lod); -uvec4 textureProjLod(usampler3D sampler, vec4 P, float lod); - -float textureProjLod(sampler1DShadow sampler, vec4 P, float lod); -float textureProjLod(sampler2DShadow sampler, vec4 P, float lod); - -/* textureProjLodOffset */ - vec4 textureProjLodOffset( sampler1D sampler, vec2 P, float lod, int offset); -ivec4 textureProjLodOffset(isampler1D sampler, vec2 P, float lod, int offset); -uvec4 textureProjLodOffset(usampler1D sampler, vec2 P, float lod, int offset); - vec4 textureProjLodOffset( sampler1D sampler, vec4 P, float lod, int offset); -ivec4 textureProjLodOffset(isampler1D sampler, vec4 P, float lod, int offset); -uvec4 textureProjLodOffset(usampler1D sampler, vec4 P, float lod, int offset); - - vec4 textureProjLodOffset( sampler2D sampler, vec3 P, float lod, ivec2 offset); -ivec4 textureProjLodOffset(isampler2D sampler, vec3 P, float lod, ivec2 offset); -uvec4 textureProjLodOffset(usampler2D sampler, vec3 P, float lod, ivec2 offset); - vec4 textureProjLodOffset( sampler2D sampler, vec4 P, float lod, ivec2 offset); -ivec4 textureProjLodOffset(isampler2D sampler, vec4 P, float lod, ivec2 offset); -uvec4 textureProjLodOffset(usampler2D sampler, vec4 P, float lod, ivec2 offset); - - vec4 textureProjLodOffset( sampler3D sampler, vec4 P, float lod, ivec3 offset); -ivec4 textureProjLodOffset(isampler3D sampler, vec4 P, float lod, ivec3 offset); -uvec4 textureProjLodOffset(usampler3D sampler, vec4 P, float lod, ivec3 offset); - -float textureProjLodOffset(sampler1DShadow s, vec4 P, float lod, int offset); -float textureProjLodOffset(sampler2DShadow s, vec4 P, float lod, ivec2 offset); - -/* textureGrad */ - vec4 textureGrad( sampler1D sampler, float P, float dPdx, float dPdy); -ivec4 textureGrad(isampler1D sampler, float P, float dPdx, float dPdy); -uvec4 textureGrad(usampler1D sampler, float P, float dPdx, float dPdy); - - vec4 textureGrad( sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); -ivec4 textureGrad(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); -uvec4 textureGrad(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); - - vec4 textureGrad( sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); -ivec4 textureGrad(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); -uvec4 textureGrad(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); - - vec4 textureGrad( samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); -ivec4 textureGrad(isamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); -uvec4 textureGrad(usamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); - -float textureGrad(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy); -float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); -float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy); - - vec4 textureGrad( sampler1DArray sampler, vec2 P, float dPdx, float dPdy); -ivec4 textureGrad(isampler1DArray sampler, vec2 P, float dPdx, float dPdy); -uvec4 textureGrad(usampler1DArray sampler, vec2 P, float dPdx, float dPdy); - - vec4 textureGrad( sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); -ivec4 textureGrad(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); -uvec4 textureGrad(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); - -float textureGrad(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy); -float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); - -/* textureGradOffset */ - vec4 textureGradOffset( sampler1D s, float P, float dx, float dy, int off); -ivec4 textureGradOffset(isampler1D s, float P, float dx, float dy, int offset); -uvec4 textureGradOffset(usampler1D s, float P, float dx, float dy, int offset); - - vec4 textureGradOffset( sampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); -ivec4 textureGradOffset(isampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); -uvec4 textureGradOffset(usampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); - - vec4 textureGradOffset( sampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -ivec4 textureGradOffset(isampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -uvec4 textureGradOffset(usampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); - - vec4 textureGradOffset( samplerCube s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -ivec4 textureGradOffset(isamplerCube s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); -uvec4 textureGradOffset(usamplerCube s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); - -float textureGradOffset(sampler1DShadow s, vec3 P, float dx, float dy, int off); -float textureGradOffset(sampler2DShadow s, vec3 P, vec2 dx, vec2 dy, ivec2 off); - - vec4 textureGradOffset( sampler1DArray s, vec2 P, float dx, float dy, int off); -ivec4 textureGradOffset(isampler1DArray s, vec2 P, float dx, float dy, int off); -uvec4 textureGradOffset(usampler1DArray s, vec2 P, float dx, float dy, int off); - - vec4 textureGradOffset( sampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -ivec4 textureGradOffset(isampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -uvec4 textureGradOffset(usampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); - -float textureGradOffset(sampler1DArrayShadow s, vec3 P, float dx, float dy, int o); -float textureGradOffset(sampler2DArrayShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); - -/* textureProjGrad */ - vec4 textureProjGrad( sampler1D sampler, vec2 P, float dPdx, float dPdy); -ivec4 textureProjGrad(isampler1D sampler, vec2 P, float dPdx, float dPdy); -uvec4 textureProjGrad(usampler1D sampler, vec2 P, float dPdx, float dPdy); - vec4 textureProjGrad( sampler1D sampler, vec4 P, float dPdx, float dPdy); -ivec4 textureProjGrad(isampler1D sampler, vec4 P, float dPdx, float dPdy); -uvec4 textureProjGrad(usampler1D sampler, vec4 P, float dPdx, float dPdy); - - vec4 textureProjGrad( sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); -ivec4 textureProjGrad(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); -uvec4 textureProjGrad(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); - vec4 textureProjGrad( sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); -ivec4 textureProjGrad(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); -uvec4 textureProjGrad(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); - - vec4 textureProjGrad( sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); -ivec4 textureProjGrad(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); -uvec4 textureProjGrad(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); - -float textureProjGrad(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy); -float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); - -/* textureProjGradOffset */ - vec4 textureProjGradOffset( sampler1D s, vec2 P, float dx, float dy, int off); -ivec4 textureProjGradOffset(isampler1D s, vec2 P, float dx, float dy, int off); -uvec4 textureProjGradOffset(usampler1D s, vec2 P, float dx, float dy, int off); - vec4 textureProjGradOffset( sampler1D s, vec4 P, float dx, float dy, int off); -ivec4 textureProjGradOffset(isampler1D s, vec4 P, float dx, float dy, int off); -uvec4 textureProjGradOffset(usampler1D s, vec4 P, float dx, float dy, int off); - - vec4 textureProjGradOffset( sampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -ivec4 textureProjGradOffset(isampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); -uvec4 textureProjGradOffset(usampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); - vec4 textureProjGradOffset( sampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); -ivec4 textureProjGradOffset(isampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); -uvec4 textureProjGradOffset(usampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); - - vec4 textureProjGradOffset( sampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); -ivec4 textureProjGradOffset(isampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); -uvec4 textureProjGradOffset(usampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); - -float textureProjGradOffset(sampler1DShadow s, vec4 P, float dx, float dy, int o); -float textureProjGradOffset(sampler2DShadow s, vec4 P, vec2 dx, vec2 dy, vec2 o); - -/* - * The following texture functions are deprecated: - */ -vec4 texture1D (sampler1D sampler, float coord); -vec4 texture1DProj (sampler1D sampler, vec2 coord); -vec4 texture1DProj (sampler1D sampler, vec4 coord); -vec4 texture1D (sampler1D sampler, float coord, float bias); -vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias); -vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias); -vec4 texture1DLod (sampler1D sampler, float coord, float lod); -vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod); -vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod); - -vec4 texture2D (sampler2D sampler, vec2 coord); -vec4 texture2DProj (sampler2D sampler, vec3 coord); -vec4 texture2DProj (sampler2D sampler, vec4 coord); -vec4 texture2D (sampler2D sampler, vec2 coord, float bias); -vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias); -vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias); -vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); -vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); -vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); - -vec4 texture3D (sampler3D sampler, vec3 coord); -vec4 texture3DProj (sampler3D sampler, vec4 coord); -vec4 texture3D (sampler3D sampler, vec3 coord, float bias); -vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias); -vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod); -vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod); - -vec4 textureCube (samplerCube sampler, vec3 coord); -vec4 textureCube (samplerCube sampler, vec3 coord, float bias); -vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); - -vec4 shadow1D (sampler1DShadow sampler, vec3 coord); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); -vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias); -vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias); -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias); -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias); -vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); -vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); -vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); -vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); - -/* - * 8.8 - Fragment Processing Functions (none in vertex shader) - */ - -/* - * 8.9 - Noise Functions - */ -float noise1(float x); -float noise1(vec2 x); -float noise1(vec3 x); -float noise1(vec4 x); - -vec2 noise2(float x); -vec2 noise2(vec2 x); -vec2 noise2(vec3 x); -vec2 noise2(vec4 x); - -vec3 noise3(float x); -vec3 noise3(vec2 x); -vec3 noise3(vec3 x); -vec3 noise3(vec4 x); - -vec4 noise4(float x); -vec4 noise4(vec2 x); -vec4 noise4(vec3 x); -vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.frag new file mode 100644 index 000000000..2e50a1567 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.frag @@ -0,0 +1,140 @@ +#version 140 +/* texture - bias variants */ + vec4 texture( sampler1D sampler, float P, float bias); +ivec4 texture(isampler1D sampler, float P, float bias); +uvec4 texture(usampler1D sampler, float P, float bias); + + vec4 texture( sampler2D sampler, vec2 P, float bias); +ivec4 texture(isampler2D sampler, vec2 P, float bias); +uvec4 texture(usampler2D sampler, vec2 P, float bias); + + vec4 texture( sampler3D sampler, vec3 P, float bias); +ivec4 texture(isampler3D sampler, vec3 P, float bias); +uvec4 texture(usampler3D sampler, vec3 P, float bias); + + vec4 texture( samplerCube sampler, vec3 P, float bias); +ivec4 texture(isamplerCube sampler, vec3 P, float bias); +uvec4 texture(usamplerCube sampler, vec3 P, float bias); + +float texture(sampler1DShadow sampler, vec3 P, float bias); +float texture(sampler2DShadow sampler, vec3 P, float bias); +float texture(samplerCubeShadow sampler, vec4 P, float bias); + + vec4 texture( sampler1DArray sampler, vec2 P, float bias); +ivec4 texture(isampler1DArray sampler, vec2 P, float bias); +uvec4 texture(usampler1DArray sampler, vec2 P, float bias); + + vec4 texture( sampler2DArray sampler, vec3 P, float bias); +ivec4 texture(isampler2DArray sampler, vec3 P, float bias); +uvec4 texture(usampler2DArray sampler, vec3 P, float bias); + +float texture(sampler1DArrayShadow sampler, vec3 P, float bias); + +/* textureProj - bias variants */ + vec4 textureProj( sampler1D sampler, vec2 P, float bias); +ivec4 textureProj(isampler1D sampler, vec2 P, float bias); +uvec4 textureProj(usampler1D sampler, vec2 P, float bias); + vec4 textureProj( sampler1D sampler, vec4 P, float bias); +ivec4 textureProj(isampler1D sampler, vec4 P, float bias); +uvec4 textureProj(usampler1D sampler, vec4 P, float bias); + + vec4 textureProj( sampler2D sampler, vec3 P, float bias); +ivec4 textureProj(isampler2D sampler, vec3 P, float bias); +uvec4 textureProj(usampler2D sampler, vec3 P, float bias); + vec4 textureProj( sampler2D sampler, vec4 P, float bias); +ivec4 textureProj(isampler2D sampler, vec4 P, float bias); +uvec4 textureProj(usampler2D sampler, vec4 P, float bias); + + vec4 textureProj( sampler3D sampler, vec4 P, float bias); +ivec4 textureProj(isampler3D sampler, vec4 P, float bias); +uvec4 textureProj(usampler3D sampler, vec4 P, float bias); + +float textureProj(sampler1DShadow sampler, vec4 P, float bias); +float textureProj(sampler2DShadow sampler, vec4 P, float bias); + +/* textureOffset - bias variants */ + vec4 textureOffset( sampler1D sampler, float P, int offset, float bias); +ivec4 textureOffset(isampler1D sampler, float P, int offset, float bias); +uvec4 textureOffset(usampler1D sampler, float P, int offset, float bias); + + vec4 textureOffset( sampler2D sampler, vec2 P, ivec2 offset, float bias); +ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset, float bias); +uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset, float bias); + + vec4 textureOffset( sampler3D sampler, vec3 P, ivec3 offset, float bias); +ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset, float bias); +uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset, float bias); + +float textureOffset(sampler1DShadow sampler, vec3 P, int offset, float bias); +float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset, float bias); + + vec4 textureOffset( sampler1DArray sampler, vec2 P, int offset, float bias); +ivec4 textureOffset(isampler1DArray sampler, vec2 P, int offset, float bias); +uvec4 textureOffset(usampler1DArray sampler, vec2 P, int offset, float bias); + + vec4 textureOffset( sampler2DArray sampler, vec3 P, ivec2 offset, float bias); +ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset, float bias); +uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset, float bias); + +float textureOffset(sampler1DArrayShadow samp, vec3 P, int offset, float bias); + +/* textureProjOffsetOffset - bias variants */ + vec4 textureProjOffset( sampler1D sampler, vec2 P, int offset, float bias); +ivec4 textureProjOffset(isampler1D sampler, vec2 P, int offset, float bias); +uvec4 textureProjOffset(usampler1D sampler, vec2 P, int offset, float bias); + vec4 textureProjOffset( sampler1D sampler, vec4 P, int offset, float bias); +ivec4 textureProjOffset(isampler1D sampler, vec4 P, int offset, float bias); +uvec4 textureProjOffset(usampler1D sampler, vec4 P, int offset, float bias); + + vec4 textureProjOffset( sampler2D sampler, vec3 P, ivec2 offset, float bias); +ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset, float bias); +uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset, float bias); + vec4 textureProjOffset( sampler2D sampler, vec4 P, ivec2 offset, float bias); +ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset, float bias); +uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset, float bias); + + vec4 textureProjOffset( sampler3D sampler, vec4 P, ivec3 offset, float bias); +ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset, float bias); +uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset, float bias); + +float textureProjOffset(sampler1DShadow s, vec4 P, int offset, float bias); +float textureProjOffset(sampler2DShadow s, vec4 P, ivec2 offset, float bias); + +/* + * The following texture functions are deprecated: + */ +vec4 texture1D (sampler1D sampler, float coord, float bias); +vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias); +vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias); + +vec4 texture2D (sampler2D sampler, vec2 coord, float bias); +vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias); +vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias); + +vec4 texture3D (sampler3D sampler, vec3 coord, float bias); +vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias); + +vec4 textureCube (samplerCube sampler, vec3 coord, float bias); + +vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias); +vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias); +vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias); +vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias); + +/* + * 8.8 - Fragment Processing Functions + */ +float dFdx(float p); +vec2 dFdx(vec2 p); +vec3 dFdx(vec3 p); +vec4 dFdx(vec4 p); + +float dFdy(float p); +vec2 dFdy(vec2 p); +vec3 dFdy(vec3 p); +vec4 dFdy(vec4 p); + +float fwidth(float p); +vec2 fwidth(vec2 p); +vec3 fwidth(vec3 p); +vec4 fwidth(vec4 p); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.glsl new file mode 100644 index 000000000..90e04816d --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/140.glsl @@ -0,0 +1,989 @@ +#version 140 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2 radians(vec2 degrees); +vec3 radians(vec3 degrees); +vec4 radians(vec4 degrees); + +float degrees(float radians); +vec2 degrees(vec2 radians); +vec3 degrees(vec3 radians); +vec4 degrees(vec4 radians); + +float sin(float angle); +vec2 sin(vec2 angle); +vec3 sin(vec3 angle); +vec4 sin(vec4 angle); + +float cos(float angle); +vec2 cos(vec2 angle); +vec3 cos(vec3 angle); +vec4 cos(vec4 angle); + +float tan(float angle); +vec2 tan(vec2 angle); +vec3 tan(vec3 angle); +vec4 tan(vec4 angle); + +float asin(float angle); +vec2 asin(vec2 angle); +vec3 asin(vec3 angle); +vec4 asin(vec4 angle); + +float acos(float angle); +vec2 acos(vec2 angle); +vec3 acos(vec3 angle); +vec4 acos(vec4 angle); + +float atan(float y, float x); +vec2 atan(vec2 y, vec2 x); +vec3 atan(vec3 y, vec3 x); +vec4 atan(vec4 y, vec4 x); + +float atan(float y_over_x); +vec2 atan(vec2 y_over_x); +vec3 atan(vec3 y_over_x); +vec4 atan(vec4 y_over_x); + +float sinh(float x); +vec2 sinh(vec2 x); +vec3 sinh(vec3 x); +vec4 sinh(vec4 x); + +float cosh(float x); +vec2 cosh(vec2 x); +vec3 cosh(vec3 x); +vec4 cosh(vec4 x); + +float tanh(float x); +vec2 tanh(vec2 x); +vec3 tanh(vec3 x); +vec4 tanh(vec4 x); + +float asinh(float x); +vec2 asinh(vec2 x); +vec3 asinh(vec3 x); +vec4 asinh(vec4 x); + +float acosh(float x); +vec2 acosh(vec2 x); +vec3 acosh(vec3 x); +vec4 acosh(vec4 x); + +float atanh(float x); +vec2 atanh(vec2 x); +vec3 atanh(vec3 x); +vec4 atanh(vec4 x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2 pow(vec2 x, vec2 y); +vec3 pow(vec3 x, vec3 y); +vec4 pow(vec4 x, vec4 y); + +float exp(float x); +vec2 exp(vec2 x); +vec3 exp(vec3 x); +vec4 exp(vec4 x); + +float log(float x); +vec2 log(vec2 x); +vec3 log(vec3 x); +vec4 log(vec4 x); + +float exp2(float x); +vec2 exp2(vec2 x); +vec3 exp2(vec3 x); +vec4 exp2(vec4 x); + +float log2(float x); +vec2 log2(vec2 x); +vec3 log2(vec3 x); +vec4 log2(vec4 x); + +float sqrt(float x); +vec2 sqrt(vec2 x); +vec3 sqrt(vec3 x); +vec4 sqrt(vec4 x); + +float inversesqrt(float x); +vec2 inversesqrt(vec2 x); +vec3 inversesqrt(vec3 x); +vec4 inversesqrt(vec4 x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2 abs(vec2 x); +vec3 abs(vec3 x); +vec4 abs(vec4 x); +int abs(int x); +ivec2 abs(ivec2 x); +ivec3 abs(ivec3 x); +ivec4 abs(ivec4 x); + +float sign(float x); +vec2 sign(vec2 x); +vec3 sign(vec3 x); +vec4 sign(vec4 x); +int sign(int x); +ivec2 sign(ivec2 x); +ivec3 sign(ivec3 x); +ivec4 sign(ivec4 x); + +float floor(float x); +vec2 floor(vec2 x); +vec3 floor(vec3 x); +vec4 floor(vec4 x); + +float trunc(float x); +vec2 trunc(vec2 x); +vec3 trunc(vec3 x); +vec4 trunc(vec4 x); + +float round(float x); +vec2 round(vec2 x); +vec3 round(vec3 x); +vec4 round(vec4 x); + +float roundEven(float x); +vec2 roundEven(vec2 x); +vec3 roundEven(vec3 x); +vec4 roundEven(vec4 x); + +float ceil(float x); +vec2 ceil(vec2 x); +vec3 ceil(vec3 x); +vec4 ceil(vec4 x); + +float fract(float x); +vec2 fract(vec2 x); +vec3 fract(vec3 x); +vec4 fract(vec4 x); + +float mod(float x, float y); +vec2 mod(vec2 x, float y); +vec3 mod(vec3 x, float y); +vec4 mod(vec4 x, float y); + +vec2 mod(vec2 x, vec2 y); +vec3 mod(vec3 x, vec3 y); +vec4 mod(vec4 x, vec4 y); + +float modf(float x, out float i); +vec2 modf(vec2 x, out vec2 i); +vec3 modf(vec3 x, out vec3 i); +vec4 modf(vec4 x, out vec4 i); + +float min(float x, float y); +vec2 min(vec2 x, vec2 y); +vec3 min(vec3 x, vec3 y); +vec4 min(vec4 x, vec4 y); + +vec2 min(vec2 x, float y); +vec3 min(vec3 x, float y); +vec4 min(vec4 x, float y); + +int min(int x, int y); +ivec2 min(ivec2 x, ivec2 y); +ivec3 min(ivec3 x, ivec3 y); +ivec4 min(ivec4 x, ivec4 y); + +ivec2 min(ivec2 x, int y); +ivec3 min(ivec3 x, int y); +ivec4 min(ivec4 x, int y); + +uint min(uint x, uint y); +uvec2 min(uvec2 x, uvec2 y); +uvec3 min(uvec3 x, uvec3 y); +uvec4 min(uvec4 x, uvec4 y); + +uvec2 min(uvec2 x, uint y); +uvec3 min(uvec3 x, uint y); +uvec4 min(uvec4 x, uint y); + +float max(float x, float y); +vec2 max(vec2 x, vec2 y); +vec3 max(vec3 x, vec3 y); +vec4 max(vec4 x, vec4 y); + +vec2 max(vec2 x, float y); +vec3 max(vec3 x, float y); +vec4 max(vec4 x, float y); + +int max(int x, int y); +ivec2 max(ivec2 x, ivec2 y); +ivec3 max(ivec3 x, ivec3 y); +ivec4 max(ivec4 x, ivec4 y); + +ivec2 max(ivec2 x, int y); +ivec3 max(ivec3 x, int y); +ivec4 max(ivec4 x, int y); + +uint max(uint x, uint y); +uvec2 max(uvec2 x, uvec2 y); +uvec3 max(uvec3 x, uvec3 y); +uvec4 max(uvec4 x, uvec4 y); + +uvec2 max(uvec2 x, uint y); +uvec3 max(uvec3 x, uint y); +uvec4 max(uvec4 x, uint y); + +float clamp(float x, float minVal, float maxVal); +vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal); +vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal); +vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal); + +vec2 clamp(vec2 x, float minVal, float maxVal); +vec3 clamp(vec3 x, float minVal, float maxVal); +vec4 clamp(vec4 x, float minVal, float maxVal); + +int clamp(int x, int minVal, int maxVal); +ivec2 clamp(ivec2 x, ivec2 minVal, ivec2 maxVal); +ivec3 clamp(ivec3 x, ivec3 minVal, ivec3 maxVal); +ivec4 clamp(ivec4 x, ivec4 minVal, ivec4 maxVal); + +ivec2 clamp(ivec2 x, int minVal, int maxVal); +ivec3 clamp(ivec3 x, int minVal, int maxVal); +ivec4 clamp(ivec4 x, int minVal, int maxVal); + +uint clamp(uint x, uint minVal, uint maxVal); +uvec2 clamp(uvec2 x, uvec2 minVal, uvec2 maxVal); +uvec3 clamp(uvec3 x, uvec3 minVal, uvec3 maxVal); +uvec4 clamp(uvec4 x, uvec4 minVal, uvec4 maxVal); + +uvec2 clamp(uvec2 x, uint minVal, uint maxVal); +uvec3 clamp(uvec3 x, uint minVal, uint maxVal); +uvec4 clamp(uvec4 x, uint minVal, uint maxVal); + +float mix(float x, float y, float a); +vec2 mix(vec2 x, vec2 y, vec2 a); +vec3 mix(vec3 x, vec3 y, vec3 a); +vec4 mix(vec4 x, vec4 y, vec4 a); + +vec2 mix(vec2 x, vec2 y, float a); +vec3 mix(vec3 x, vec3 y, float a); +vec4 mix(vec4 x, vec4 y, float a); + +float mix(float x, float y, bool a); +vec2 mix(vec2 x, vec2 y, bvec2 a); +vec3 mix(vec3 x, vec3 y, bvec3 a); +vec4 mix(vec4 x, vec4 y, bvec4 a); + +float step(float edge, float x); +vec2 step(vec2 edge, vec2 x); +vec3 step(vec3 edge, vec3 x); +vec4 step(vec4 edge, vec4 x); + +vec2 step(float edge, vec2 x); +vec3 step(float edge, vec3 x); +vec4 step(float edge, vec4 x); + +float smoothstep(float edge0, float edge1, float x); +vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x); +vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x); +vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); + +vec2 smoothstep(float edge0, float edge1, vec2 x); +vec3 smoothstep(float edge0, float edge1, vec3 x); +vec4 smoothstep(float edge0, float edge1, vec4 x); + +bool isnan(float x); +bvec2 isnan(vec2 x); +bvec3 isnan(vec3 x); +bvec4 isnan(vec4 x); + +bool isinf(float x); +bvec2 isinf(vec2 x); +bvec3 isinf(vec3 x); +bvec4 isinf(vec4 x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2 x); +float length(vec3 x); +float length(vec4 x); + +float distance(float p0, float p1); +float distance(vec2 p0, vec2 p1); +float distance(vec3 p0, vec3 p1); +float distance(vec4 p0, vec4 p1); + +float dot(float x, float y); +float dot(vec2 x, vec2 y); +float dot(vec3 x, vec3 y); +float dot(vec4 x, vec4 y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2 normalize(vec2 x); +vec3 normalize(vec3 x); +vec4 normalize(vec4 x); + +float faceforward(float N, float I, float Nref); +vec2 faceforward(vec2 N, vec2 I, vec2 Nref); +vec3 faceforward(vec3 N, vec3 I, vec3 Nref); +vec4 faceforward(vec4 N, vec4 I, vec4 Nref); + +float reflect(float I, float N); +vec2 reflect(vec2 I, vec2 N); +vec3 reflect(vec3 I, vec3 N); +vec4 reflect(vec4 I, vec4 N); + +float refract(float I, float N, float eta); +vec2 refract(vec2 I, vec2 N, float eta); +vec3 refract(vec3 I, vec3 N, float eta); +vec4 refract(vec4 I, vec4 N, float eta); + + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); +mat2x3 matrixCompMult(mat2x3 x, mat2x3 y); +mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); +mat3x2 matrixCompMult(mat3x2 x, mat3x2 y); +mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); +mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); +mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); + +mat2 outerProduct(vec2 c, vec2 r); +mat3 outerProduct(vec3 c, vec3 r); +mat4 outerProduct(vec4 c, vec4 r); + +mat2x3 outerProduct(vec3 c, vec2 r); +mat3x2 outerProduct(vec2 c, vec3 r); + +mat2x4 outerProduct(vec4 c, vec2 r); +mat4x2 outerProduct(vec2 c, vec4 r); + +mat3x4 outerProduct(vec4 c, vec3 r); +mat4x3 outerProduct(vec3 c, vec4 r); + +mat2 transpose(mat2 m); +mat3 transpose(mat3 m); +mat4 transpose(mat4 m); + +mat2x3 transpose(mat3x2 m); +mat3x2 transpose(mat2x3 m); + +mat2x4 transpose(mat4x2 m); +mat4x2 transpose(mat2x4 m); + +mat3x4 transpose(mat4x3 m); +mat4x3 transpose(mat3x4 m); + +mat2 inverse(mat2 m); +mat3 inverse(mat3 m); +mat4 inverse(mat4 m); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x, vec2 y); +bvec3 lessThan( vec3 x, vec3 y); +bvec4 lessThan( vec4 x, vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); +bvec2 lessThan(uvec2 x, uvec2 y); +bvec3 lessThan(uvec3 x, uvec3 y); +bvec4 lessThan(uvec4 x, uvec4 y); + +bvec2 lessThanEqual( vec2 x, vec2 y); +bvec3 lessThanEqual( vec3 x, vec3 y); +bvec4 lessThanEqual( vec4 x, vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); +bvec2 lessThanEqual(uvec2 x, uvec2 y); +bvec3 lessThanEqual(uvec3 x, uvec3 y); +bvec4 lessThanEqual(uvec4 x, uvec4 y); + +bvec2 greaterThan( vec2 x, vec2 y); +bvec3 greaterThan( vec3 x, vec3 y); +bvec4 greaterThan( vec4 x, vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); +bvec2 greaterThan(uvec2 x, uvec2 y); +bvec3 greaterThan(uvec3 x, uvec3 y); +bvec4 greaterThan(uvec4 x, uvec4 y); + +bvec2 greaterThanEqual( vec2 x, vec2 y); +bvec3 greaterThanEqual( vec3 x, vec3 y); +bvec4 greaterThanEqual( vec4 x, vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); +bvec2 greaterThanEqual(uvec2 x, uvec2 y); +bvec3 greaterThanEqual(uvec3 x, uvec3 y); +bvec4 greaterThanEqual(uvec4 x, uvec4 y); + +bvec2 equal( vec2 x, vec2 y); +bvec3 equal( vec3 x, vec3 y); +bvec4 equal( vec4 x, vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(uvec2 x, uvec2 y); +bvec3 equal(uvec3 x, uvec3 y); +bvec4 equal(uvec4 x, uvec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x, vec2 y); +bvec3 notEqual( vec3 x, vec3 y); +bvec4 notEqual( vec4 x, vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(uvec2 x, uvec2 y); +bvec3 notEqual(uvec3 x, uvec3 y); +bvec4 notEqual(uvec4 x, uvec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ + +/* textureSize */ +int textureSize( sampler1D sampler, int lod); +int textureSize(isampler1D sampler, int lod); +int textureSize(usampler1D sampler, int lod); + +ivec2 textureSize( sampler2D sampler, int lod); +ivec2 textureSize(isampler2D sampler, int lod); +ivec2 textureSize(usampler2D sampler, int lod); + +ivec3 textureSize( sampler3D sampler, int lod); +ivec3 textureSize(isampler3D sampler, int lod); +ivec3 textureSize(usampler3D sampler, int lod); + +ivec2 textureSize( samplerCube sampler, int lod); +ivec2 textureSize(isamplerCube sampler, int lod); +ivec2 textureSize(usamplerCube sampler, int lod); + +int textureSize(sampler1DShadow sampler, int lod); +ivec2 textureSize(sampler2DShadow sampler, int lod); +ivec2 textureSize(samplerCubeShadow sampler, int lod); + +ivec2 textureSize( sampler1DArray sampler, int lod); +ivec2 textureSize(isampler1DArray sampler, int lod); +ivec2 textureSize(usampler1DArray sampler, int lod); +ivec3 textureSize( sampler2DArray sampler, int lod); +ivec3 textureSize(isampler2DArray sampler, int lod); +ivec3 textureSize(usampler2DArray sampler, int lod); + +ivec2 textureSize(sampler1DArrayShadow sampler, int lod); +ivec3 textureSize(sampler2DArrayShadow sampler, int lod); + +ivec2 textureSize(sampler2DRect sampler); +ivec2 textureSize(isampler2DRect sampler); +ivec2 textureSize(usampler2DRect sampler); +ivec2 textureSize(sampler2DRectShadow sampler); + +int textureSize( samplerBuffer sampler); +int textureSize(isamplerBuffer sampler); +int textureSize(usamplerBuffer sampler); + +/* texture - no bias */ + vec4 texture( sampler1D sampler, float P); +ivec4 texture(isampler1D sampler, float P); +uvec4 texture(usampler1D sampler, float P); + + vec4 texture( sampler2D sampler, vec2 P); +ivec4 texture(isampler2D sampler, vec2 P); +uvec4 texture(usampler2D sampler, vec2 P); + + vec4 texture( sampler3D sampler, vec3 P); +ivec4 texture(isampler3D sampler, vec3 P); +uvec4 texture(usampler3D sampler, vec3 P); + + vec4 texture( samplerCube sampler, vec3 P); +ivec4 texture(isamplerCube sampler, vec3 P); +uvec4 texture(usamplerCube sampler, vec3 P); + +float texture(sampler1DShadow sampler, vec3 P); +float texture(sampler2DShadow sampler, vec3 P); +float texture(samplerCubeShadow sampler, vec4 P); + + vec4 texture( sampler1DArray sampler, vec2 P); +ivec4 texture(isampler1DArray sampler, vec2 P); +uvec4 texture(usampler1DArray sampler, vec2 P); + + vec4 texture( sampler2DArray sampler, vec3 P); +ivec4 texture(isampler2DArray sampler, vec3 P); +uvec4 texture(usampler2DArray sampler, vec3 P); + +float texture(sampler1DArrayShadow sampler, vec3 P); +float texture(sampler2DArrayShadow sampler, vec4 P); + + vec4 texture( sampler2DRect sampler, vec2 P); +ivec4 texture(isampler2DRect sampler, vec2 P); +uvec4 texture(usampler2DRect sampler, vec2 P); + +float texture(sampler2DRectShadow sampler, vec3 P); + +/* textureProj - no bias */ + vec4 textureProj( sampler1D sampler, vec2 P); +ivec4 textureProj(isampler1D sampler, vec2 P); +uvec4 textureProj(usampler1D sampler, vec2 P); + vec4 textureProj( sampler1D sampler, vec4 P); +ivec4 textureProj(isampler1D sampler, vec4 P); +uvec4 textureProj(usampler1D sampler, vec4 P); + + vec4 textureProj( sampler2D sampler, vec3 P); +ivec4 textureProj(isampler2D sampler, vec3 P); +uvec4 textureProj(usampler2D sampler, vec3 P); + vec4 textureProj( sampler2D sampler, vec4 P); +ivec4 textureProj(isampler2D sampler, vec4 P); +uvec4 textureProj(usampler2D sampler, vec4 P); + + vec4 textureProj( sampler3D sampler, vec4 P); +ivec4 textureProj(isampler3D sampler, vec4 P); +uvec4 textureProj(usampler3D sampler, vec4 P); + +float textureProj(sampler1DShadow sampler, vec4 P); +float textureProj(sampler2DShadow sampler, vec4 P); + + vec4 textureProj( sampler2DRect sampler, vec3 P); +ivec4 textureProj(isampler2DRect sampler, vec3 P); +uvec4 textureProj(usampler2DRect sampler, vec3 P); + vec4 textureProj( sampler2DRect sampler, vec4 P); +ivec4 textureProj(isampler2DRect sampler, vec4 P); +uvec4 textureProj(usampler2DRect sampler, vec4 P); + +float textureProj(sampler2DRectShadow sampler, vec4 P); + +/* textureLod */ + vec4 textureLod( sampler1D sampler, float P, float lod); +ivec4 textureLod(isampler1D sampler, float P, float lod); +uvec4 textureLod(usampler1D sampler, float P, float lod); + + vec4 textureLod( sampler2D sampler, vec2 P, float lod); +ivec4 textureLod(isampler2D sampler, vec2 P, float lod); +uvec4 textureLod(usampler2D sampler, vec2 P, float lod); + + vec4 textureLod( sampler3D sampler, vec3 P, float lod); +ivec4 textureLod(isampler3D sampler, vec3 P, float lod); +uvec4 textureLod(usampler3D sampler, vec3 P, float lod); + + vec4 textureLod( samplerCube sampler, vec3 P, float lod); +ivec4 textureLod(isamplerCube sampler, vec3 P, float lod); +uvec4 textureLod(usamplerCube sampler, vec3 P, float lod); + +float textureLod(sampler1DShadow sampler, vec3 P, float lod); +float textureLod(sampler2DShadow sampler, vec3 P, float lod); + + vec4 textureLod( sampler1DArray sampler, vec2 P, float lod); +ivec4 textureLod(isampler1DArray sampler, vec2 P, float lod); +uvec4 textureLod(usampler1DArray sampler, vec2 P, float lod); + + vec4 textureLod( sampler2DArray sampler, vec3 P, float lod); +ivec4 textureLod(isampler2DArray sampler, vec3 P, float lod); +uvec4 textureLod(usampler2DArray sampler, vec3 P, float lod); + +float textureLod(sampler1DArrayShadow sampler, vec3 P, float lod); + +/* textureOffset - no bias */ + vec4 textureOffset( sampler1D sampler, float P, int offset); +ivec4 textureOffset(isampler1D sampler, float P, int offset); +uvec4 textureOffset(usampler1D sampler, float P, int offset); + + vec4 textureOffset( sampler2D sampler, vec2 P, ivec2 offset); +ivec4 textureOffset(isampler2D sampler, vec2 P, ivec2 offset); +uvec4 textureOffset(usampler2D sampler, vec2 P, ivec2 offset); + + vec4 textureOffset( sampler3D sampler, vec3 P, ivec3 offset); +ivec4 textureOffset(isampler3D sampler, vec3 P, ivec3 offset); +uvec4 textureOffset(usampler3D sampler, vec3 P, ivec3 offset); + + vec4 textureOffset( sampler2DRect sampler, vec2 P, ivec2 offset); +ivec4 textureOffset(isampler2DRect sampler, vec2 P, ivec2 offset); +uvec4 textureOffset(usampler2DRect sampler, vec2 P, ivec2 offset); + +float textureOffset(sampler2DRectShadow sampler, vec3 P, ivec2 offset); + +float textureOffset(sampler1DShadow sampler, vec3 P, int offset); +float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset); + + vec4 textureOffset( sampler1DArray sampler, vec2 P, int offset); +ivec4 textureOffset(isampler1DArray sampler, vec2 P, int offset); +uvec4 textureOffset(usampler1DArray sampler, vec2 P, int offset); + + vec4 textureOffset( sampler2DArray sampler, vec3 P, ivec2 offset); +ivec4 textureOffset(isampler2DArray sampler, vec3 P, ivec2 offset); +uvec4 textureOffset(usampler2DArray sampler, vec3 P, ivec2 offset); + +float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset); + +/* texelFetch */ + vec4 texelFetch( sampler1D sampler, int P, int lod); +ivec4 texelFetch(isampler1D sampler, int P, int lod); +uvec4 texelFetch(usampler1D sampler, int P, int lod); + + vec4 texelFetch( sampler2D sampler, ivec2 P, int lod); +ivec4 texelFetch(isampler2D sampler, ivec2 P, int lod); +uvec4 texelFetch(usampler2D sampler, ivec2 P, int lod); + + vec4 texelFetch( sampler3D sampler, ivec3 P, int lod); +ivec4 texelFetch(isampler3D sampler, ivec3 P, int lod); +uvec4 texelFetch(usampler3D sampler, ivec3 P, int lod); + + vec4 texelFetch( sampler2DRect sampler, ivec2 P); +ivec4 texelFetch(isampler2DRect sampler, ivec2 P); +uvec4 texelFetch(usampler2DRect sampler, ivec2 P); + + vec4 texelFetch( sampler1DArray sampler, ivec2 P, int lod); +ivec4 texelFetch(isampler1DArray sampler, ivec2 P, int lod); +uvec4 texelFetch(usampler1DArray sampler, ivec2 P, int lod); + + vec4 texelFetch( sampler2DArray sampler, ivec3 P, int lod); +ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod); +uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod); + + vec4 texelFetch( samplerBuffer sampler, int P); +ivec4 texelFetch(isamplerBuffer sampler, int P); +uvec4 texelFetch(usamplerBuffer sampler, int P); + +/* texelFetchOffset */ + vec4 texelFetchOffset( sampler1D sampler, int P, int lod, int offset); +ivec4 texelFetchOffset(isampler1D sampler, int P, int lod, int offset); +uvec4 texelFetchOffset(usampler1D sampler, int P, int lod, int offset); + + vec4 texelFetchOffset( sampler2D sampler, ivec2 P, int lod, ivec2 offset); +ivec4 texelFetchOffset(isampler2D sampler, ivec2 P, int lod, ivec2 offset); +uvec4 texelFetchOffset(usampler2D sampler, ivec2 P, int lod, ivec2 offset); + + vec4 texelFetchOffset( sampler3D sampler, ivec3 P, int lod, ivec3 offset); +ivec4 texelFetchOffset(isampler3D sampler, ivec3 P, int lod, ivec3 offset); +uvec4 texelFetchOffset(usampler3D sampler, ivec3 P, int lod, ivec3 offset); + + vec4 texelFetchOffset( sampler2DRect sampler, ivec2 P, ivec2 offset); +ivec4 texelFetchOffset(isampler2DRect sampler, ivec2 P, ivec2 offset); +uvec4 texelFetchOffset(usampler2DRect sampler, ivec2 P, ivec2 offset); + + vec4 texelFetchOffset( sampler1DArray sampler, ivec2 P, int lod, int offset); +ivec4 texelFetchOffset(isampler1DArray sampler, ivec2 P, int lod, int offset); +uvec4 texelFetchOffset(usampler1DArray sampler, ivec2 P, int lod, int offset); + + vec4 texelFetchOffset( sampler2DArray sampler, ivec3 P, int lod, ivec2 offset); +ivec4 texelFetchOffset(isampler2DArray sampler, ivec3 P, int lod, ivec2 offset); +uvec4 texelFetchOffset(usampler2DArray sampler, ivec3 P, int lod, ivec2 offset); + +/* textureProjOffset - no bias */ + vec4 textureProjOffset( sampler1D sampler, vec2 P, int offset); +ivec4 textureProjOffset(isampler1D sampler, vec2 P, int offset); +uvec4 textureProjOffset(usampler1D sampler, vec2 P, int offset); + vec4 textureProjOffset( sampler1D sampler, vec4 P, int offset); +ivec4 textureProjOffset(isampler1D sampler, vec4 P, int offset); +uvec4 textureProjOffset(usampler1D sampler, vec4 P, int offset); + + vec4 textureProjOffset( sampler2D sampler, vec3 P, ivec2 offset); +ivec4 textureProjOffset(isampler2D sampler, vec3 P, ivec2 offset); +uvec4 textureProjOffset(usampler2D sampler, vec3 P, ivec2 offset); + vec4 textureProjOffset( sampler2D sampler, vec4 P, ivec2 offset); +ivec4 textureProjOffset(isampler2D sampler, vec4 P, ivec2 offset); +uvec4 textureProjOffset(usampler2D sampler, vec4 P, ivec2 offset); + + vec4 textureProjOffset( sampler3D sampler, vec4 P, ivec3 offset); +ivec4 textureProjOffset(isampler3D sampler, vec4 P, ivec3 offset); +uvec4 textureProjOffset(usampler3D sampler, vec4 P, ivec3 offset); + + vec4 textureProjOffset( sampler2DRect sampler, vec3 P, ivec2 offset); +ivec4 textureProjOffset(isampler2DRect sampler, vec3 P, ivec2 offset); +uvec4 textureProjOffset(usampler2DRect sampler, vec3 P, ivec2 offset); + vec4 textureProjOffset( sampler2DRect sampler, vec4 P, ivec2 offset); +ivec4 textureProjOffset(isampler2DRect sampler, vec4 P, ivec2 offset); +uvec4 textureProjOffset(usampler2DRect sampler, vec4 P, ivec2 offset); + +float textureProjOffset(sampler2DRectShadow sampler, vec4 P, ivec2 offset); + +float textureProjOffset(sampler1DShadow sampler, vec4 P, int offset); +float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset); + +/* textureLodOffset */ + vec4 textureLodOffset( sampler1D sampler, float P, float lod, int offset); +ivec4 textureLodOffset(isampler1D sampler, float P, float lod, int offset); +uvec4 textureLodOffset(usampler1D sampler, float P, float lod, int offset); + + vec4 textureLodOffset( sampler2D sampler, vec2 P, float lod, ivec2 offset); +ivec4 textureLodOffset(isampler2D sampler, vec2 P, float lod, ivec2 offset); +uvec4 textureLodOffset(usampler2D sampler, vec2 P, float lod, ivec2 offset); + + vec4 textureLodOffset( sampler3D sampler, vec3 P, float lod, ivec3 offset); +ivec4 textureLodOffset(isampler3D sampler, vec3 P, float lod, ivec3 offset); +uvec4 textureLodOffset(usampler3D sampler, vec3 P, float lod, ivec3 offset); + +float textureLodOffset(sampler1DShadow samp, vec3 P, float lod, int offset); +float textureLodOffset(sampler2DShadow samp, vec3 P, float lod, ivec2 offset); + + vec4 textureLodOffset( sampler1DArray sampler, vec2 P, float lod, int offset); +ivec4 textureLodOffset(isampler1DArray sampler, vec2 P, float lod, int offset); +uvec4 textureLodOffset(usampler1DArray sampler, vec2 P, float lod, int offset); + + vec4 textureLodOffset( sampler2DArray samp, vec3 P, float lod, ivec2 offset); +ivec4 textureLodOffset(isampler2DArray samp, vec3 P, float lod, ivec2 offset); +uvec4 textureLodOffset(usampler2DArray samp, vec3 P, float lod, ivec2 offset); + +float textureLodOffset(sampler1DArrayShadow s, vec3 P, float lod, int offset); + +/* textureProjLod */ + vec4 textureProjLod( sampler1D sampler, vec2 P, float lod); +ivec4 textureProjLod(isampler1D sampler, vec2 P, float lod); +uvec4 textureProjLod(usampler1D sampler, vec2 P, float lod); + vec4 textureProjLod( sampler1D sampler, vec4 P, float lod); +ivec4 textureProjLod(isampler1D sampler, vec4 P, float lod); +uvec4 textureProjLod(usampler1D sampler, vec4 P, float lod); + + vec4 textureProjLod( sampler2D sampler, vec3 P, float lod); +ivec4 textureProjLod(isampler2D sampler, vec3 P, float lod); +uvec4 textureProjLod(usampler2D sampler, vec3 P, float lod); + vec4 textureProjLod( sampler2D sampler, vec4 P, float lod); +ivec4 textureProjLod(isampler2D sampler, vec4 P, float lod); +uvec4 textureProjLod(usampler2D sampler, vec4 P, float lod); + + vec4 textureProjLod( sampler3D sampler, vec4 P, float lod); +ivec4 textureProjLod(isampler3D sampler, vec4 P, float lod); +uvec4 textureProjLod(usampler3D sampler, vec4 P, float lod); + +float textureProjLod(sampler1DShadow sampler, vec4 P, float lod); +float textureProjLod(sampler2DShadow sampler, vec4 P, float lod); + +/* textureProjLodOffset */ + vec4 textureProjLodOffset( sampler1D sampler, vec2 P, float lod, int offset); +ivec4 textureProjLodOffset(isampler1D sampler, vec2 P, float lod, int offset); +uvec4 textureProjLodOffset(usampler1D sampler, vec2 P, float lod, int offset); + vec4 textureProjLodOffset( sampler1D sampler, vec4 P, float lod, int offset); +ivec4 textureProjLodOffset(isampler1D sampler, vec4 P, float lod, int offset); +uvec4 textureProjLodOffset(usampler1D sampler, vec4 P, float lod, int offset); + + vec4 textureProjLodOffset( sampler2D sampler, vec3 P, float lod, ivec2 offset); +ivec4 textureProjLodOffset(isampler2D sampler, vec3 P, float lod, ivec2 offset); +uvec4 textureProjLodOffset(usampler2D sampler, vec3 P, float lod, ivec2 offset); + vec4 textureProjLodOffset( sampler2D sampler, vec4 P, float lod, ivec2 offset); +ivec4 textureProjLodOffset(isampler2D sampler, vec4 P, float lod, ivec2 offset); +uvec4 textureProjLodOffset(usampler2D sampler, vec4 P, float lod, ivec2 offset); + + vec4 textureProjLodOffset( sampler3D sampler, vec4 P, float lod, ivec3 offset); +ivec4 textureProjLodOffset(isampler3D sampler, vec4 P, float lod, ivec3 offset); +uvec4 textureProjLodOffset(usampler3D sampler, vec4 P, float lod, ivec3 offset); + +float textureProjLodOffset(sampler1DShadow s, vec4 P, float lod, int offset); +float textureProjLodOffset(sampler2DShadow s, vec4 P, float lod, ivec2 offset); + +/* textureGrad */ + vec4 textureGrad( sampler1D sampler, float P, float dPdx, float dPdy); +ivec4 textureGrad(isampler1D sampler, float P, float dPdx, float dPdy); +uvec4 textureGrad(usampler1D sampler, float P, float dPdx, float dPdy); + + vec4 textureGrad( sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); +ivec4 textureGrad(isampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); +uvec4 textureGrad(usampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); + + vec4 textureGrad( sampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); +ivec4 textureGrad(isampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); +uvec4 textureGrad(usampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); + + vec4 textureGrad( samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); +ivec4 textureGrad(isamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); +uvec4 textureGrad(usamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); + + vec4 textureGrad( sampler2DRect sampler, vec2 P, vec2 dPdx, vec2 dPdy); +ivec4 textureGrad(isampler2DRect sampler, vec2 P, vec2 dPdx, vec2 dPdy); +uvec4 textureGrad(usampler2DRect sampler, vec2 P, vec2 dPdx, vec2 dPdy); + +float textureGrad(sampler2DRectShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); + +float textureGrad(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy); +float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); +float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy); + + vec4 textureGrad( sampler1DArray sampler, vec2 P, float dPdx, float dPdy); +ivec4 textureGrad(isampler1DArray sampler, vec2 P, float dPdx, float dPdy); +uvec4 textureGrad(usampler1DArray sampler, vec2 P, float dPdx, float dPdy); + + vec4 textureGrad( sampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); +ivec4 textureGrad(isampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); +uvec4 textureGrad(usampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); + +float textureGrad(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy); +float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); + +/* textureGradOffset */ + vec4 textureGradOffset( sampler1D s, float P, float dx, float dy, int off); +ivec4 textureGradOffset(isampler1D s, float P, float dx, float dy, int offset); +uvec4 textureGradOffset(usampler1D s, float P, float dx, float dy, int offset); + + vec4 textureGradOffset( sampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); +ivec4 textureGradOffset(isampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); +uvec4 textureGradOffset(usampler2D s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); + + vec4 textureGradOffset( sampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); +ivec4 textureGradOffset(isampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); +uvec4 textureGradOffset(usampler3D s, vec3 P, vec3 dx, vec3 dy, ivec3 offset); + + vec4 textureGradOffset( sampler2DRect s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); +ivec4 textureGradOffset(isampler2DRect s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); +uvec4 textureGradOffset(usampler2DRect s, vec2 P, vec2 dx, vec2 dy, ivec2 offset); + +float textureGradOffset(sampler2DRectShadow s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + +float textureGradOffset(sampler1DShadow s, vec3 P, float dx, float dy, int off); +float textureGradOffset(sampler2DShadow s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + + vec4 textureGradOffset( sampler1DArray s, vec2 P, float dx, float dy, int off); +ivec4 textureGradOffset(isampler1DArray s, vec2 P, float dx, float dy, int off); +uvec4 textureGradOffset(usampler1DArray s, vec2 P, float dx, float dy, int off); + + vec4 textureGradOffset( sampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureGradOffset(isampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureGradOffset(usampler2DArray s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + +float textureGradOffset(sampler1DArrayShadow s, vec3 P, float dx, float dy, int o); +float textureGradOffset(sampler2DArrayShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); + +/* textureProjGrad */ + vec4 textureProjGrad( sampler1D sampler, vec2 P, float dPdx, float dPdy); +ivec4 textureProjGrad(isampler1D sampler, vec2 P, float dPdx, float dPdy); +uvec4 textureProjGrad(usampler1D sampler, vec2 P, float dPdx, float dPdy); + vec4 textureProjGrad( sampler1D sampler, vec4 P, float dPdx, float dPdy); +ivec4 textureProjGrad(isampler1D sampler, vec4 P, float dPdx, float dPdy); +uvec4 textureProjGrad(usampler1D sampler, vec4 P, float dPdx, float dPdy); + + vec4 textureProjGrad( sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); +ivec4 textureProjGrad(isampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); +uvec4 textureProjGrad(usampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); + vec4 textureProjGrad( sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); +ivec4 textureProjGrad(isampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); +uvec4 textureProjGrad(usampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); + + vec4 textureProjGrad( sampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); +ivec4 textureProjGrad(isampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); +uvec4 textureProjGrad(usampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); + + vec4 textureProjGrad( sampler2DRect sampler, vec3 P, vec2 dPdx, vec2 dPdy); +ivec4 textureProjGrad(isampler2DRect sampler, vec3 P, vec2 dPdx, vec2 dPdy); +uvec4 textureProjGrad(usampler2DRect sampler, vec3 P, vec2 dPdx, vec2 dPdy); + vec4 textureProjGrad( sampler2DRect sampler, vec4 P, vec2 dPdx, vec2 dPdy); +ivec4 textureProjGrad(isampler2DRect sampler, vec4 P, vec2 dPdx, vec2 dPdy); +uvec4 textureProjGrad(usampler2DRect sampler, vec4 P, vec2 dPdx, vec2 dPdy); + +float textureProjGrad(sampler2DRectShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); + +float textureProjGrad(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy); +float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); + +/* textureProjGradOffset */ + vec4 textureProjGradOffset( sampler1D s, vec2 P, float dx, float dy, int off); +ivec4 textureProjGradOffset(isampler1D s, vec2 P, float dx, float dy, int off); +uvec4 textureProjGradOffset(usampler1D s, vec2 P, float dx, float dy, int off); + vec4 textureProjGradOffset( sampler1D s, vec4 P, float dx, float dy, int off); +ivec4 textureProjGradOffset(isampler1D s, vec4 P, float dx, float dy, int off); +uvec4 textureProjGradOffset(usampler1D s, vec4 P, float dx, float dy, int off); + + vec4 textureProjGradOffset( sampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureProjGradOffset(isampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureProjGradOffset(usampler2D s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + vec4 textureProjGradOffset( sampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureProjGradOffset(isampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureProjGradOffset(usampler2D s, vec4 P, vec2 dx, vec2 dy, ivec2 off); + + vec4 textureProjGradOffset( sampler2DRect s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureProjGradOffset(isampler2DRect s, vec3 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureProjGradOffset(usampler2DRect s, vec3 P, vec2 dx, vec2 dy, ivec2 off); + vec4 textureProjGradOffset( sampler2DRect s, vec4 P, vec2 dx, vec2 dy, ivec2 off); +ivec4 textureProjGradOffset(isampler2DRect s, vec4 P, vec2 dx, vec2 dy, ivec2 off); +uvec4 textureProjGradOffset(usampler2DRect s, vec4 P, vec2 dx, vec2 dy, ivec2 off); + +float textureProjGradOffset(sampler2DRectShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); + + vec4 textureProjGradOffset( sampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); +ivec4 textureProjGradOffset(isampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); +uvec4 textureProjGradOffset(usampler3D s, vec4 P, vec3 dx, vec3 dy, ivec3 off); + +float textureProjGradOffset(sampler1DShadow s, vec4 P, float dx, float dy, int o); +float textureProjGradOffset(sampler2DShadow s, vec4 P, vec2 dx, vec2 dy, ivec2 o); + +/* + * The following texture functions are deprecated: + */ +vec4 texture1D (sampler1D sampler, float coord); +vec4 texture1DProj (sampler1D sampler, vec2 coord); +vec4 texture1DProj (sampler1D sampler, vec4 coord); +vec4 texture1DLod (sampler1D sampler, float coord, float lod); +vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod); +vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod); + +vec4 texture2D (sampler2D sampler, vec2 coord); +vec4 texture2DProj (sampler2D sampler, vec3 coord); +vec4 texture2DProj (sampler2D sampler, vec4 coord); +vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod); +vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); +vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); + +vec4 texture3D (sampler3D sampler, vec3 coord); +vec4 texture3DProj (sampler3D sampler, vec4 coord); +vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod); +vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod); + +vec4 textureCube (samplerCube sampler, vec3 coord); +vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod); + +vec4 shadow1D (sampler1DShadow sampler, vec3 coord); +vec4 shadow2D (sampler2DShadow sampler, vec3 coord); +vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord); +vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord); +vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); +vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); +vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); +vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); + +/* + * 8.9 - Noise Functions + */ +float noise1(float x); +float noise1(vec2 x); +float noise1(vec3 x); +float noise1(vec4 x); + +vec2 noise2(float x); +vec2 noise2(vec2 x); +vec2 noise2(vec3 x); +vec2 noise2(vec4 x); + +vec3 noise3(float x); +vec3 noise3(vec2 x); +vec3 noise3(vec3 x); +vec3 noise3(vec4 x); + +vec4 noise4(float x); +vec4 noise4(vec2 x); +vec4 noise4(vec3 x); +vec4 noise4(vec4 x); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl new file mode 100644 index 000000000..e03459401 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl @@ -0,0 +1,22 @@ +#version 130 +#extension GL_ARB_shader_bit_encoding : enable + +int floatBitsToInt(float value); +ivec2 floatBitsToInt(vec2 value); +ivec3 floatBitsToInt(vec3 value); +ivec4 floatBitsToInt(vec4 value); + +uint floatBitsToUint(float value); +uvec2 floatBitsToUint(vec2 value); +uvec3 floatBitsToUint(vec3 value); +uvec4 floatBitsToUint(vec4 value); + +float intBitsToFloat(int value); +vec2 intBitsToFloat(ivec2 value); +vec3 intBitsToFloat(ivec3 value); +vec4 intBitsToFloat(ivec4 value); + +float uintBitsToFloat(uint value); +vec2 uintBitsToFloat(uvec2 value); +vec3 uintBitsToFloat(uvec3 value); +vec4 uintBitsToFloat(uvec4 value); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag index c15e2a10a..26e84d0f5 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag @@ -15,50 +15,3 @@ vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod); vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod); vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod); vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod); - -/* New anisotropic texture functions, providing explicit derivatives: */ -vec4 texture1DGradARB (sampler1D sampler, - float P, float dPdx, float dPdy); -vec4 texture1DProjGradARB (sampler1D sampler, - vec2 P, float dPdx, float dPdy); -vec4 texture1DProjGradARB (sampler1D sampler, - vec4 P, float dPdx, float dPdy); - -vec4 texture2DGradARB (sampler2D sampler, - vec2 P, vec2 dPdx, vec2 dPdy); -vec4 texture2DProjGradARB (sampler2D sampler, - vec3 P, vec2 dPdx, vec2 dPdy); -vec4 texture2DProjGradARB (sampler2D sampler, - vec4 P, vec2 dPdx, vec2 dPdy); - -vec4 texture3DGradARB (sampler3D sampler, - vec3 P, vec3 dPdx, vec3 dPdy); -vec4 texture3DProjGradARB (sampler3D sampler, - vec4 P, vec3 dPdx, vec3 dPdy); - -vec4 textureCubeGradARB (samplerCube sampler, - vec3 P, vec3 dPdx, vec3 dPdy); - -vec4 shadow1DGradARB (sampler1DShadow sampler, - vec3 P, float dPdx, float dPdy); -vec4 shadow1DProjGradARB (sampler1DShadow sampler, - vec4 P, float dPdx, float dPdy); - -vec4 shadow2DGradARB (sampler2DShadow sampler, - vec3 P, vec2 dPdx, vec2 dPdy); -vec4 shadow2DProjGradARB (sampler2DShadow sampler, - vec4 P, vec2 dPdx, vec2 dPdy); - -#ifdef GL_ARB_texture_rectangle -vec4 texture2DRectGradARB (sampler2DRect sampler, - vec2 P, vec2 dPdx, vec2 dPdy); -vec4 texture2DRectProjGradARB(sampler2DRect sampler, - vec3 P, vec2 dPdx, vec2 dPdy); -vec4 texture2DRectProjGradARB(sampler2DRect sampler, - vec4 P, vec2 dPdx, vec2 dPdy); - -vec4 shadow2DRectGradARB (sampler2DRectShadow sampler, - vec3 P, vec2 dPdx, vec2 dPdy); -vec4 shadow2DRectProjGradARB (sampler2DRectShadow sampler, - vec4 P, vec2 dPdx, vec2 dPdy); -#endif diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.vert b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.glsl similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.vert rename to 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_shader_texture_lod.glsl diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.glsl similarity index 100% rename from 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.frag rename to 3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.glsl diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.vert b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.vert deleted file mode 100644 index 8938aa3e9..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/ARB_texture_rectangle.vert +++ /dev/null @@ -1,7 +0,0 @@ -#extension GL_ARB_texture_rectangle : enable -vec4 texture2DRect(sampler2DRect sampler, vec2 coord); -vec4 texture2DRectProj(sampler2DRect sampler, vec3 coord); -vec4 texture2DRectProj(sampler2DRect sampler, vec4 coord); - -vec4 shadow2DRect(sampler2DRectShadow sampler, vec3 coord); -vec4 shadow2DRectProj(sampler2DRectShadow sampler, vec4 coord); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/EXT_shadow_samplers.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/EXT_shadow_samplers.frag new file mode 100644 index 000000000..61ee421d1 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/EXT_shadow_samplers.frag @@ -0,0 +1,2 @@ +float shadow2DEXT (sampler2DShadow sampler, vec3 coord); +float shadow2DProjEXT (sampler2DShadow sampler, vec4 coord); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_EGL_image_external.glsl b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_EGL_image_external.glsl new file mode 100644 index 000000000..71e6af9d3 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_EGL_image_external.glsl @@ -0,0 +1,6 @@ +#version 100 +#extension GL_OES_EGL_image_external : enable + +vec4 texture2D(samplerExternalOES sampler, vec2 coord); +vec4 texture2DProj(samplerExternalOES sampler, vec3 coord); +vec4 texture2DProj(samplerExternalOES sampler, vec4 coord); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_standard_derivatives.frag b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_standard_derivatives.frag index 2c358ab16..2c6ea07e9 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_standard_derivatives.frag +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/profiles/OES_standard_derivatives.frag @@ -1,6 +1,9 @@ #version 100 #extension GL_OES_standard_derivatives : enable +/* + * 8.8 - Fragment Processing Functions + */ float dFdx(float p); vec2 dFdx(vec2 p); vec3 dFdx(vec3 p); diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/tools/generate_builtins.py b/3rdparty/glsl-optimizer/src/glsl/builtins/tools/generate_builtins.py index 17d528c21..9dc3279df 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/tools/generate_builtins.py +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/tools/generate_builtins.py @@ -24,15 +24,28 @@ compiler = argv[1] # Read the files in builtins/ir/*...add them to the supplied dictionary. def read_ir_files(fs): - for filename in glob(path.join(path.join(builtins_dir, 'ir'), '*')): + for filename in glob(path.join(path.join(builtins_dir, 'ir'), '*.ir')): + function_name = path.basename(filename).split('.')[0] with open(filename) as f: - fs[path.basename(filename)] = f.read() + fs[function_name] = f.read() + +def read_glsl_files(fs): + for filename in glob(path.join(path.join(builtins_dir, 'glsl'), '*.glsl')): + function_name = path.basename(filename).split('.')[0] + (output, returncode) = run_compiler([filename]) + if (returncode): + sys.stderr.write("Failed to compile builtin: " + filename + "\n") + sys.stderr.write("Result:\n") + sys.stderr.write(output) + else: + fs[function_name] = output; # Return a dictionary containing all builtin definitions (even generated) def get_builtin_definitions(): fs = {} generate_texture_functions(fs) read_ir_files(fs) + read_glsl_files(fs) return fs def stringify(s): @@ -58,10 +71,18 @@ def write_function_definitions(): print stringify(v), ';' def run_compiler(args): - command = [compiler, '--dump-lir'] + args + command = [compiler, '--dump-hir'] + args p = Popen(command, 1, stdout=PIPE, shell=False) output = p.communicate()[0] + if (p.returncode): + sys.stderr.write("Failed to compile builtins with command:\n") + for arg in command: + sys.stderr.write(arg + " ") + sys.stderr.write("\n") + sys.stderr.write("Result:\n") + sys.stderr.write(output) + # Clean up output a bit by killing whitespace before a closing paren. kill_paren_whitespace = re.compile(r'[ \n]*\)', re.MULTILINE) output = kill_paren_whitespace.sub(')', output) @@ -69,6 +90,10 @@ def run_compiler(args): # Also toss any duplicate newlines output = output.replace('\n\n', '\n') + # Kill any global variable declarations. We don't want them. + kill_globals = re.compile(r'^\(declare.*\n', re.MULTILINE) + output = kill_globals.sub('', output) + return (output, p.returncode) def write_profile(filename, profile): @@ -78,10 +103,6 @@ def write_profile(filename, profile): print '#error builtins profile', profile, 'failed to compile' return - # Kill any global variable declarations. We don't want them. - kill_globals = re.compile(r'^\(declare.*\n', re.MULTILINE) - proto_ir = kill_globals.sub('', proto_ir) - print 'static const char prototypes_for_' + profile + '[] =' print stringify(proto_ir), ';' @@ -103,8 +124,13 @@ def write_profiles(): write_profile(filename, profile) def get_profile_list(): + profile_files = [] + for extension in ['glsl', 'frag', 'vert']: + path_glob = path.join( + path.join(builtins_dir, 'profiles'), '*.' + extension) + profile_files.extend(glob(path_glob)) profiles = [] - for pfile in sorted(glob(path.join(path.join(builtins_dir, 'profiles'), '*'))): + for pfile in sorted(profile_files): profiles.append((pfile, path.basename(pfile).replace('.', '_'))) return profiles @@ -148,16 +174,19 @@ read_builtins(GLenum target, const char *protos, const char **functions, unsigne { struct gl_context fakeCtx; fakeCtx.API = API_OPENGL; - fakeCtx.Const.GLSLVersion = 130; + fakeCtx.Const.GLSLVersion = 140; fakeCtx.Extensions.ARB_ES2_compatibility = true; + fakeCtx.Const.ForceGLSLExtensionsWarn = false; gl_shader *sh = _mesa_new_shader(NULL, 0, target); struct _mesa_glsl_parse_state *st = new(sh) _mesa_glsl_parse_state(&fakeCtx, target, sh); - st->language_version = 130; - st->symbols->language_version = 130; + st->language_version = 140; + st->symbols->language_version = 140; st->ARB_texture_rectangle_enable = true; st->EXT_texture_array_enable = true; + st->OES_EGL_image_external_enable = true; + st->ARB_shader_bit_encoding_enable = true; _mesa_glsl_initialize_types(st); sh->ir = new(sh) exec_list; @@ -196,7 +225,7 @@ read_builtins(GLenum target, const char *protos, const char **functions, unsigne print 'static gl_shader *builtin_profiles[%d];' % len(profiles) print """ -void *builtin_mem_ctx = NULL; +static void *builtin_mem_ctx = NULL; void _mesa_glsl_release_functions(void) @@ -228,12 +257,14 @@ _mesa_read_profile(struct _mesa_glsl_parse_state *state, void _mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state) { + /* If we've already initialized the built-ins, bail early. */ + if (state->num_builtins_to_link > 0) + return; + if (builtin_mem_ctx == NULL) { builtin_mem_ctx = ralloc_context(NULL); // "GLSL built-in functions" memset(&builtin_profiles, 0, sizeof(builtin_profiles)); } - - state->num_builtins_to_link = 0; """ i = 0 @@ -242,8 +273,10 @@ _mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state) check = 'state->target == vertex_shader && ' elif profile.endswith('_frag'): check = 'state->target == fragment_shader && ' + else: + check = '' - version = re.sub(r'_(vert|frag)$', '', profile) + version = re.sub(r'_(glsl|vert|frag)$', '', profile) if version.isdigit(): check += 'state->language_version == ' + version else: # an extension name diff --git a/3rdparty/glsl-optimizer/src/glsl/builtins/tools/texture_builtins.py b/3rdparty/glsl-optimizer/src/glsl/builtins/tools/texture_builtins.py index faf32f20a..aa0125b63 100644 --- a/3rdparty/glsl-optimizer/src/glsl/builtins/tools/texture_builtins.py +++ b/3rdparty/glsl-optimizer/src/glsl/builtins/tools/texture_builtins.py @@ -23,6 +23,10 @@ def get_sampler_dim(sampler_type): sampler_dim = int(sampler_type[0]) elif sampler_type.startswith("Cube"): sampler_dim = 3 + elif sampler_type == "ExternalOES": + sampler_dim = 2 + elif sampler_type == "Buffer": + sampler_dim = 1 else: assert False ("coord_dim: invalid sampler_type: " + sampler_type) return sampler_dim @@ -44,67 +48,62 @@ def get_extra_dim(sampler_type, use_proj, unused_fields): extra_dim += 1 return extra_dim +def get_txs_dim(sampler_type): + if sampler_type.startswith("Cube"): + return 2 + return get_coord_dim(sampler_type) + def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0): coord_dim = get_coord_dim(sampler_type) extra_dim = get_extra_dim(sampler_type, variant & Proj, unused_fields) - offset_dim = get_sampler_dim(sampler_type) + sampler_dim = get_sampler_dim(sampler_type) if variant & Single: return_type = "float" + elif tex_inst == "txs": + return_type = vec_type("i", get_txs_dim(sampler_type)) else: return_type = g + "vec4" # Print parameters print " (signature", return_type print " (parameters" - print " (declare (in) " + g + "sampler" + sampler_type + " sampler)" - print " (declare (in) " + vec_type("i" if tex_inst == "txf" else "", coord_dim + extra_dim) + " P)", + print " (declare (in) " + g + "sampler" + sampler_type + " sampler)", + if tex_inst != "txs": + print "\n (declare (in) " + vec_type("i" if tex_inst == "txf" else "", coord_dim + extra_dim) + " P)", if tex_inst == "txl": print "\n (declare (in) float lod)", - elif tex_inst == "txf": + elif ((tex_inst == "txf" or tex_inst == "txs") and "Buffer" not in sampler_type and "Rect" not in sampler_type): print "\n (declare (in) int lod)", elif tex_inst == "txd": - grad_type = vec_type("", coord_dim) + grad_type = vec_type("", sampler_dim) print "\n (declare (in) " + grad_type + " dPdx)", print "\n (declare (in) " + grad_type + " dPdy)", if variant & Offset: - print "\n (declare (const_in) " + vec_type("i", offset_dim) + " offset)", + print "\n (declare (const_in) " + vec_type("i", sampler_dim) + " offset)", if tex_inst == "txb": print "\n (declare (in) float bias)", print ")\n ((return (" + tex_inst, return_type, "(var_ref sampler)", - # Coordinate - if extra_dim > 0: - print "(swiz " + "xyzw"[:coord_dim] + " (var_ref P))", - else: + if tex_inst != "txs": print "(var_ref P)", - if variant & Offset: - print "(var_ref offset)", - else: - print "0", - - if tex_inst != "txf": - # Projective divisor - if variant & Proj: - print "(swiz " + "xyzw"[coord_dim + extra_dim-1] + " (var_ref P))", + if variant & Offset: + print "(var_ref offset)", else: - print "1", - - # Shadow comparitor - if sampler_type == "2DArrayShadow": # a special case: - print "(swiz w (var_ref P))", # ...array layer is z; shadow is w - elif sampler_type.endswith("Shadow"): - print "(swiz z (var_ref P))", - else: - print "()", + print "0", # Bias/explicit LOD/gradient: if tex_inst == "txb": print "(var_ref bias)", - elif tex_inst == "txl" or tex_inst == "txf": + elif tex_inst == "txs" or tex_inst == "txf": + if "Rect" not in sampler_type and "Buffer" not in sampler_type: + print "(var_ref lod)", + else: + print "(constant int (0))" + elif tex_inst == "txl": print "(var_ref lod)", elif tex_inst == "txd": print "((var_ref dPdx) (var_ref dPdy))", @@ -130,6 +129,23 @@ def end_function(fs, name): # # Takes a dictionary as an argument. def generate_texture_functions(fs): + start_function("textureSize") + generate_fiu_sigs("txs", "1D") + generate_fiu_sigs("txs", "2D") + generate_fiu_sigs("txs", "3D") + generate_fiu_sigs("txs", "Cube") + generate_fiu_sigs("txs", "1DArray") + generate_fiu_sigs("txs", "2DArray") + generate_sigs("", "txs", "1DShadow") + generate_sigs("", "txs", "2DShadow") + generate_sigs("", "txs", "CubeShadow") + generate_sigs("", "txs", "1DArrayShadow") + generate_sigs("", "txs", "2DArrayShadow") + generate_fiu_sigs("txs", "2DRect") + generate_sigs("", "txs", "2DRectShadow") + generate_fiu_sigs("txs", "Buffer") + end_function(fs, "textureSize") + start_function("texture") generate_fiu_sigs("tex", "1D") generate_fiu_sigs("tex", "2D") @@ -142,6 +158,8 @@ def generate_texture_functions(fs): generate_sigs("", "tex", "CubeShadow", Single); generate_sigs("", "tex", "1DArrayShadow", Single); generate_sigs("", "tex", "2DArrayShadow", Single); + generate_fiu_sigs("tex", "2DRect") + generate_sigs("", "tex", "2DRectShadow", Single); generate_fiu_sigs("txb", "1D") generate_fiu_sigs("txb", "2D") @@ -164,6 +182,9 @@ def generate_texture_functions(fs): generate_fiu_sigs("tex", "3D", Proj) generate_sigs("", "tex", "1DShadow", Proj | Single, 1); generate_sigs("", "tex", "2DShadow", Proj | Single); + generate_fiu_sigs("tex", "2DRect", Proj) + generate_fiu_sigs("tex", "2DRect", Proj, 1) + generate_sigs("", "tex", "2DRectShadow", Proj | Single); generate_fiu_sigs("txb", "1D", Proj) generate_fiu_sigs("txb", "1D", Proj, 2) @@ -201,6 +222,8 @@ def generate_texture_functions(fs): generate_fiu_sigs("tex", "1D", Offset) generate_fiu_sigs("tex", "2D", Offset) generate_fiu_sigs("tex", "3D", Offset) + generate_fiu_sigs("tex", "2DRect", Offset) + generate_sigs("", "tex", "2DRectShadow", Offset | Single); generate_fiu_sigs("tex", "1DArray", Offset) generate_fiu_sigs("tex", "2DArray", Offset) generate_sigs("", "tex", "1DShadow", Offset | Single, 1); @@ -221,14 +244,17 @@ def generate_texture_functions(fs): generate_fiu_sigs("txf", "1D") generate_fiu_sigs("txf", "2D") generate_fiu_sigs("txf", "3D") + generate_fiu_sigs("txf", "2DRect") generate_fiu_sigs("txf", "1DArray") generate_fiu_sigs("txf", "2DArray") + generate_fiu_sigs("txf", "Buffer") end_function(fs, "texelFetch") start_function("texelFetchOffset") generate_fiu_sigs("txf", "1D", Offset) generate_fiu_sigs("txf", "2D", Offset) generate_fiu_sigs("txf", "3D", Offset) + generate_fiu_sigs("txf", "2DRect", Offset) generate_fiu_sigs("txf", "1DArray", Offset) generate_fiu_sigs("txf", "2DArray", Offset) end_function(fs, "texelFetchOffset") @@ -239,6 +265,9 @@ def generate_texture_functions(fs): generate_fiu_sigs("tex", "2D", Proj | Offset) generate_fiu_sigs("tex", "2D", Proj | Offset, 1) generate_fiu_sigs("tex", "3D", Proj | Offset) + generate_fiu_sigs("tex", "2DRect", Proj | Offset) + generate_fiu_sigs("tex", "2DRect", Proj | Offset, 1) + generate_sigs("", "tex", "2DRectShadow", Proj | Offset | Single); generate_sigs("", "tex", "1DShadow", Proj | Offset | Single, 1); generate_sigs("", "tex", "2DShadow", Proj | Offset | Single); @@ -278,6 +307,8 @@ def generate_texture_functions(fs): generate_fiu_sigs("txd", "Cube") generate_fiu_sigs("txd", "1DArray") generate_fiu_sigs("txd", "2DArray") + generate_fiu_sigs("txd", "2DRect") + generate_sigs("", "txd", "2DRectShadow", Single); generate_sigs("", "txd", "1DShadow", Single, 1); generate_sigs("", "txd", "2DShadow", Single); generate_sigs("", "txd", "CubeShadow", Single); @@ -289,7 +320,8 @@ def generate_texture_functions(fs): generate_fiu_sigs("txd", "1D", Offset) generate_fiu_sigs("txd", "2D", Offset) generate_fiu_sigs("txd", "3D", Offset) - generate_fiu_sigs("txd", "Cube", Offset) + generate_fiu_sigs("txd", "2DRect", Offset) + generate_sigs("", "txd", "2DRectShadow", Offset | Single); generate_fiu_sigs("txd", "1DArray", Offset) generate_fiu_sigs("txd", "2DArray", Offset) generate_sigs("", "txd", "1DShadow", Offset | Single, 1); @@ -304,6 +336,9 @@ def generate_texture_functions(fs): generate_fiu_sigs("txd", "2D", Proj) generate_fiu_sigs("txd", "2D", Proj, 1) generate_fiu_sigs("txd", "3D", Proj) + generate_fiu_sigs("txd", "2DRect", Proj) + generate_fiu_sigs("txd", "2DRect", Proj, 1) + generate_sigs("", "txd", "2DRectShadow", Proj | Single); generate_sigs("", "txd", "1DShadow", Proj | Single, 1); generate_sigs("", "txd", "2DShadow", Proj | Single); end_function(fs, "textureProjGrad") @@ -314,6 +349,9 @@ def generate_texture_functions(fs): generate_fiu_sigs("txd", "2D", Proj | Offset) generate_fiu_sigs("txd", "2D", Proj | Offset, 1) generate_fiu_sigs("txd", "3D", Proj | Offset) + generate_fiu_sigs("txd", "2DRect", Proj | Offset) + generate_fiu_sigs("txd", "2DRect", Proj | Offset, 1) + generate_sigs("", "txd", "2DRectShadow", Proj | Offset | Single); generate_sigs("", "txd", "1DShadow", Proj | Offset | Single, 1); generate_sigs("", "txd", "2DShadow", Proj | Offset | Single); end_function(fs, "textureProjGradOffset") @@ -471,6 +509,8 @@ def generate_texture_functions(fs): start_function("texture2D") generate_sigs("", "tex", "2D") generate_sigs("", "txb", "2D") + # OES_EGL_image_external + generate_sigs("", "tex", "ExternalOES") end_function(fs, "texture2D") start_function("texture2DLod") @@ -486,6 +526,9 @@ def generate_texture_functions(fs): generate_sigs("", "tex", "2D", Proj, 1) generate_sigs("", "txb", "2D", Proj) generate_sigs("", "txb", "2D", Proj, 1) + # OES_EGL_image_external + generate_sigs("", "tex", "ExternalOES", Proj) + generate_sigs("", "tex", "ExternalOES", Proj, 1) end_function(fs, "texture2DProj") start_function("texture2DProjLod") @@ -565,6 +608,16 @@ def generate_texture_functions(fs): generate_sigs("", "txl", "2DShadow", Proj) end_function(fs, "shadow2DProjLod") + # GL_EXT_shadow_samplers + start_function("shadow2DEXT") + generate_sigs("", "tex", "2DShadow", Single) + end_function(fs, "shadow2DEXT") + + start_function("shadow2DProjEXT") + generate_sigs("", "tex", "2DShadow", Proj | Single) + end_function(fs, "shadow2DProjEXT") + + sys.stdout = sys.__stdout__ return fs diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/.gitignore b/3rdparty/glsl-optimizer/src/glsl/glcpp/.gitignore index dbc37e192..6041c8a27 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/.gitignore +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/.gitignore @@ -1,8 +1,13 @@ glcpp glcpp-parse.output +glcpp-parse.c +glcpp-parse.h + *.o *.lo *.la .libs *~ + tests/*.out +/Makefile diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.c index 508225cc8..3f9e74c96 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.c +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.c @@ -47,6 +47,7 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -344,13 +345,13 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ - yyleng = (size_t) (yy_cp - yy_bp); \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 43 -#define YY_END_OF_BUFFER 44 +#define YY_NUM_RULES 42 +#define YY_END_OF_BUFFER 43 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -358,43 +359,40 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_acclist[125] = +static yyconst flex_int16_t yy_acclist[106] = { 0, - 3, 3, 44, 39, 43, 40, 43, 41, 43, 43, - 38, 43, 43, 38, 43, 38, 43, 38, 43, 25, - 39, 43, 24, 39, 43, 38, 43, 38, 43, 38, - 43, 37, 39, 43, 37, 39, 43, 38, 43, 40, - 43, 23, 43, 3, 43, 4, 43, 5, 43, 42, - 43, 18, 43, 18, 43, 18, 43, 39, 40, 32, - 35, 33, 2, 1, 25, 39, 25, 39, 39, 24, - 39, 24, 39, 27, 29, 31, 30, 28, 37, 39, - 37, 39, 34, 40, 23, 23, 3, 4, 5, 6, - 5, 7, 1, 26, 39, 37, 39, 26, 39, 37, + 3, 3, 43, 38, 42, 39, 42, 40, 42, 42, + 37, 42, 42, 37, 42, 37, 42, 37, 42, 24, + 42, 23, 42, 37, 42, 37, 42, 37, 42, 36, + 42, 36, 42, 37, 42, 39, 42, 22, 42, 3, + 42, 4, 42, 5, 42, 41, 42, 17, 42, 17, + 42, 17, 42, 38, 39, 31, 34, 32, 2, 1, + 24, 24, 23, 23, 26, 28, 30, 29, 27, 36, + 36, 33, 39, 22, 22, 3, 4, 5, 6, 5, + 7, 1, 25, 36, 25, 36, 13, 36, 14, 15, + 10, 36, 16, 18, 11, 21, 35, 36, 20, 18, - 39, 14, 37, 39, 15, 16, 37, 39, 17, 19, - 12, 22, 36, 37, 39, 21, 19, 13,16404, 11, - 9, 8, 8212, 10 + 12,16403, 9, 8, 8211 } ; -static yyconst flex_int16_t yy_accept[155] = +static yyconst flex_int16_t yy_accept[146] = { 0, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 4, 6, 8, 10, 11, 13, 14, 16, 18, - 20, 23, 26, 28, 30, 32, 35, 38, 40, 42, - 44, 46, 48, 50, 52, 54, 56, 58, 59, 60, - 61, 62, 63, 64, 65, 67, 69, 70, 72, 74, - 75, 76, 77, 78, 79, 81, 83, 84, 85, 86, - 87, 87, 87, 87, 87, 87, 87, 87, 88, 89, - 90, 91, 92, 93, 93, 93, 93, 93, 94, 96, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 100, 102, 102, 102, 102, 102, 102, 102, 103, + 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, + 40, 42, 44, 46, 48, 50, 52, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 76, 76, 76, 76, 76, 76, 76, 77, 78, + 79, 80, 81, 82, 82, 82, 82, 82, 83, 84, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 86, 87, 87, 87, 87, 87, 87, 87, 88, - 103, 103, 103, 103, 103, 103, 105, 105, 106, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, - 109, 110, 111, 111, 112, 112, 112, 112, 113, 113, - 116, 117, 118, 118, 119, 119, 119, 119, 120, 120, - 120, 121, 121, 122, 123, 123, 123, 123, 124, 124, - 124, 125, 125, 125 + 88, 88, 88, 88, 88, 88, 89, 89, 90, 91, + 91, 91, 91, 91, 91, 92, 92, 92, 92, 93, + 93, 94, 95, 95, 96, 96, 96, 97, 97, 99, + 100, 101, 101, 102, 102, 102, 103, 103, 104, 105, + 105, 105, 106, 106, 106 } ; static yyconst flex_int32_t yy_ec[256] = @@ -431,144 +429,136 @@ static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_meta[40] = { 0, - 1, 2, 3, 4, 4, 4, 4, 4, 5, 6, - 4, 7, 7, 7, 4, 4, 4, 8, 8, 8, - 8, 8, 9, 8, 8, 8, 8, 8, 8, 9, - 8, 8, 8, 8, 8, 8, 8, 8, 4 + 1, 2, 3, 1, 1, 1, 1, 1, 4, 5, + 1, 6, 6, 6, 1, 1, 1, 7, 8, 8, + 8, 7, 9, 7, 7, 8, 8, 8, 8, 10, + 8, 8, 8, 8, 8, 8, 8, 8, 1 } ; -static yyconst flex_int16_t yy_base[168] = +static yyconst flex_int16_t yy_base[159] = { 0, - 0, 38, 0, 0, 38, 39, 328, 327, 326, 44, - 328, 0, 325, 332, 332, 310, 319, 332, 316, 41, - 41, 44, 44, 307, 49, 321, 44, 282, 61, 79, - 317, 332, 72, 332, 332, 67, 68, 0, 317, 332, - 332, 332, 332, 0, 34, 0, 105, 0, 0, 332, - 332, 332, 332, 332, 317, 73, 332, 82, 311, 310, - 291, 61, 289, 286, 279, 281, 286, 306, 332, 90, - 332, 94, 332, 84, 85, 108, 48, 0, 88, 95, - 283, 86, 284, 273, 270, 91, 274, 281, 279, 268, - 0, 124, 273, 274, 274, 270, 265, 271, 332, 267, + 0, 38, 0, 0, 38, 39, 301, 300, 299, 44, + 301, 299, 297, 305, 305, 282, 291, 305, 288, 41, + 41, 44, 44, 279, 49, 0, 270, 254, 61, 79, + 289, 305, 65, 305, 305, 67, 68, 290, 288, 305, + 305, 305, 305, 0, 74, 305, 0, 76, 305, 305, + 305, 305, 305, 305, 0, 264, 305, 72, 282, 281, + 262, 71, 260, 257, 250, 252, 257, 277, 305, 110, + 305, 114, 305, 91, 81, 112, 15, 0, 35, 252, + 253, 57, 254, 243, 240, 96, 244, 251, 249, 238, + 305, 240, 242, 243, 243, 239, 234, 235, 305, 229, - 264, 262, 259, 260, 249, 125, 245, 332, 332, 241, - 229, 231, 223, 209, 222, 194, 197, 194, 130, 196, - 332, 0, 181, 332, 189, 131, 191, 332, 181, 210, - 162, 0, 136, 332, 134, 0, 130, 155, 111, 138, - 332, 153, 0, 332, 125, 41, 156, 332, 34, 136, - 332, 159, 332, 173, 182, 191, 200, 209, 218, 227, - 236, 245, 254, 263, 272, 280, 285 + 229, 227, 224, 217, 197, 202, 195, 305, 305, 199, + 184, 177, 164, 114, 305, 108, 110, 107, 110, 108, + 305, 0, 97, 305, 105, 107, 305, 97, 0, 125, + 0, 96, 305, 0, 92, 116, 69, 0, 305, 89, + 52, 305, 63, 305, 139, 149, 159, 169, 174, 184, + 194, 204, 209, 218, 228, 238, 247, 254 } ; -static yyconst flex_int16_t yy_def[168] = +static yyconst flex_int16_t yy_def[159] = { 0, - 153, 1, 154, 154, 155, 155, 156, 156, 157, 157, - 153, 158, 153, 153, 153, 153, 153, 153, 153, 153, - 158, 158, 153, 153, 153, 159, 159, 153, 153, 153, - 160, 153, 161, 153, 153, 153, 153, 158, 153, 153, - 153, 153, 153, 162, 21, 158, 158, 22, 158, 153, - 153, 153, 153, 153, 159, 159, 153, 153, 30, 30, - 153, 153, 153, 153, 153, 153, 153, 160, 153, 161, - 153, 161, 153, 153, 153, 153, 153, 162, 47, 159, - 153, 153, 153, 153, 153, 163, 153, 153, 153, 153, - 158, 159, 153, 153, 153, 153, 153, 153, 153, 153, + 144, 1, 145, 145, 146, 146, 147, 147, 148, 148, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 149, 149, 144, 144, 144, + 150, 144, 151, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 152, 144, 144, 153, 144, 144, 144, + 144, 144, 144, 144, 149, 149, 144, 144, 30, 30, + 144, 144, 144, 144, 144, 144, 144, 150, 144, 151, + 144, 151, 144, 144, 144, 144, 144, 152, 153, 149, + 144, 144, 144, 144, 144, 154, 144, 144, 144, 144, + 144, 149, 144, 144, 144, 144, 144, 144, 144, 144, - 153, 153, 153, 153, 153, 159, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 159, 153, - 153, 164, 153, 153, 153, 153, 153, 153, 153, 159, - 153, 164, 153, 153, 153, 165, 153, 166, 153, 153, - 153, 153, 165, 153, 167, 153, 153, 153, 167, 153, - 153, 153, 0, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153 + 144, 144, 144, 144, 144, 149, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 149, 144, + 144, 155, 144, 144, 144, 144, 144, 144, 149, 144, + 155, 144, 144, 156, 144, 157, 144, 156, 144, 158, + 144, 144, 158, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144 } ; -static yyconst flex_int16_t yy_nxt[372] = +static yyconst flex_int16_t yy_nxt[345] = { 0, 12, 13, 14, 15, 16, 17, 18, 19, 18, 18, 20, 21, 22, 22, 23, 24, 25, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 29, - 32, 32, 148, 30, 38, 36, 14, 33, 33, 37, - 43, 44, 45, 45, 38, 48, 48, 48, 50, 51, - 46, 47, 58, 49, 53, 54, 59, 56, 74, 76, - 136, 38, 75, 38, 71, 82, 46, 83, 47, 49, - 60, 72, 73, 58, 41, 74, 76, 59, 82, 75, - 83, 77, 71, 84, 63, 38, 71, 80, 85, 153, + 32, 32, 82, 30, 83, 36, 14, 33, 33, 37, + 43, 44, 45, 45, 91, 48, 48, 48, 50, 51, + 46, 47, 58, 49, 53, 54, 59, 71, 74, 76, + 91, 142, 75, 58, 72, 73, 46, 59, 47, 49, + 60, 134, 76, 94, 41, 45, 45, 48, 48, 48, + 95, 77, 74, 46, 63, 49, 75, 142, 82, 141, - 153, 61, 62, 72, 73, 63, 64, 91, 77, 76, - 65, 63, 94, 100, 66, 67, 79, 79, 79, 95, - 101, 92, 79, 91, 38, 38, 79, 79, 79, 79, - 38, 77, 126, 148, 63, 140, 141, 150, 151, 140, - 141, 146, 135, 135, 135, 142, 142, 142, 119, 147, - 147, 147, 130, 106, 140, 141, 138, 150, 151, 144, - 150, 151, 139, 138, 142, 142, 142, 152, 152, 152, - 152, 152, 152, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 83, 61, 62, 84, 77, 63, 64, 63, 85, 46, + 65, 49, 71, 76, 66, 67, 71, 136, 100, 144, + 144, 139, 137, 72, 73, 101, 136, 135, 134, 133, + 132, 130, 129, 128, 127, 77, 126, 125, 63, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 55, + 55, 55, 55, 55, 68, 68, 68, 68, 124, 68, + 68, 68, 68, 68, 70, 70, 70, 70, 70, 70, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 38, - 38, 137, 136, 134, 133, 38, 38, 38, 55, 131, - 129, 128, 127, 126, 55, 55, 55, 68, 68, 68, - 68, 68, 125, 68, 68, 68, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 78, 78, 124, 78, 78, - 78, 78, 78, 78, 99, 99, 99, 99, 99, 99, - 123, 122, 99, 132, 132, 121, 132, 132, 132, 132, - 132, 132, 143, 143, 120, 143, 143, 143, 143, 143, - 143, 145, 118, 117, 116, 115, 114, 145, 145, 149, - 113, 149, 149, 149, 112, 111, 110, 109, 108, 107, + 70, 70, 70, 70, 78, 78, 123, 78, 78, 78, + 78, 78, 78, 78, 79, 79, 122, 79, 99, 99, + 99, 99, 99, 121, 120, 119, 99, 99, 131, 131, + 118, 131, 131, 131, 131, 131, 131, 131, 138, 138, + 117, 138, 138, 138, 138, 138, 138, 138, 140, 116, + 115, 114, 113, 140, 140, 140, 140, 143, 112, 143, + 143, 143, 143, 143, 111, 110, 109, 108, 107, 106, + 105, 104, 103, 102, 98, 97, 96, 93, 92, 69, + 90, 89, 88, 87, 86, 81, 144, 144, 80, 39, + 38, 69, 57, 56, 52, 42, 41, 40, 39, 38, - 105, 104, 103, 102, 98, 97, 96, 93, 69, 90, - 89, 88, 87, 86, 81, 153, 153, 38, 39, 69, - 57, 38, 52, 42, 41, 40, 39, 153, 14, 15, - 15, 11, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153 + 144, 14, 15, 15, 11, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144 } ; -static yyconst flex_int16_t yy_chk[372] = +static yyconst flex_int16_t yy_chk[345] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 5, 6, 149, 2, 27, 10, 10, 5, 6, 10, - 20, 20, 21, 21, 45, 22, 22, 22, 23, 23, - 21, 21, 29, 22, 25, 25, 29, 27, 36, 37, - 146, 45, 36, 56, 33, 77, 21, 77, 21, 22, - 30, 33, 33, 58, 30, 74, 75, 58, 62, 74, - 62, 37, 70, 62, 37, 80, 72, 56, 62, 70, + 5, 6, 77, 2, 77, 10, 10, 5, 6, 10, + 20, 20, 21, 21, 79, 22, 22, 22, 23, 23, + 21, 21, 29, 22, 25, 25, 29, 33, 36, 37, + 79, 143, 36, 58, 33, 33, 21, 58, 21, 22, + 30, 141, 75, 82, 30, 45, 45, 48, 48, 48, + 82, 37, 74, 45, 37, 48, 74, 140, 62, 137, - 70, 30, 30, 72, 72, 30, 30, 79, 75, 76, - 30, 75, 82, 86, 30, 30, 47, 47, 47, 82, - 86, 80, 47, 79, 92, 106, 47, 47, 47, 47, - 119, 76, 126, 145, 76, 135, 135, 150, 150, 140, - 140, 139, 126, 126, 126, 135, 135, 135, 106, 140, - 140, 140, 119, 92, 142, 142, 138, 147, 147, 137, - 152, 152, 133, 131, 142, 142, 142, 147, 147, 147, - 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 62, 30, 30, 62, 75, 30, 30, 75, 62, 45, + 30, 48, 70, 76, 30, 30, 72, 136, 86, 70, + 70, 135, 132, 72, 72, 86, 130, 128, 126, 125, + 123, 120, 119, 118, 117, 76, 116, 114, 76, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, + 149, 149, 149, 149, 150, 150, 150, 150, 113, 150, + 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, - 130, 129, 127, 125, 123, 158, 158, 158, 159, 120, - 118, 117, 116, 115, 159, 159, 159, 160, 160, 160, - 160, 160, 114, 160, 160, 160, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 162, 162, 113, 162, 162, - 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, - 112, 111, 163, 164, 164, 110, 164, 164, 164, 164, - 164, 164, 165, 165, 107, 165, 165, 165, 165, 165, - 165, 166, 105, 104, 103, 102, 101, 166, 166, 167, - 100, 167, 167, 167, 98, 97, 96, 95, 94, 93, + 151, 151, 151, 151, 152, 152, 112, 152, 152, 152, + 152, 152, 152, 152, 153, 153, 111, 153, 154, 154, + 154, 154, 154, 110, 107, 106, 154, 154, 155, 155, + 105, 155, 155, 155, 155, 155, 155, 155, 156, 156, + 104, 156, 156, 156, 156, 156, 156, 156, 157, 103, + 102, 101, 100, 157, 157, 157, 157, 158, 98, 158, + 158, 158, 158, 158, 97, 96, 95, 94, 93, 92, + 90, 89, 88, 87, 85, 84, 83, 81, 80, 68, + 67, 66, 65, 64, 63, 61, 60, 59, 56, 39, + 38, 31, 28, 27, 24, 19, 17, 16, 13, 12, - 90, 89, 88, 87, 85, 84, 83, 81, 68, 67, - 66, 65, 64, 63, 61, 60, 59, 55, 39, 31, - 28, 26, 24, 19, 17, 16, 13, 11, 9, 8, - 7, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153 + 11, 9, 8, 7, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144 } ; #define YY_TRAILING_MASK 0x2000 @@ -630,12 +620,18 @@ void glcpp_set_column (int column_no , yyscan_t yyscanner); #define YY_NO_INPUT -#define YY_USER_ACTION \ - do { \ - yylloc->first_column = yycolumn + 1; \ - yylloc->first_line = yylineno; \ - yycolumn += yyleng; \ - } while(0); +#define YY_USER_ACTION \ + do { \ + if (parser->has_new_line_number) \ + yylineno = parser->new_line_number; \ + if (parser->has_new_source_number) \ + yylloc->source = parser->new_source_number; \ + yylloc->first_column = yycolumn + 1; \ + yylloc->first_line = yylineno; \ + yycolumn += yyleng; \ + parser->has_new_line_number = 0; \ + parser->has_new_source_number = 0; \ + } while(0); #define YY_USER_INIT \ do { \ @@ -644,7 +640,13 @@ void glcpp_set_column (int column_no , yyscan_t yyscanner); yylloc->source = 0; \ } while(0) -#line 648 "src/glsl/glcpp/glcpp-lex.c" +/* The OTHER class is simply a catch-all for things that the CPP +parser just doesn't care about. Since flex regular expressions that +match longer strings take priority over those matching shorter +strings, we have to be careful to avoid OTHER matching and hiding +something that CPP does care about. So we simply exclude all +characters that appear in any other expressions. */ +#line 650 "src/glsl/glcpp/glcpp-lex.c" #define INITIAL 0 #define DONE 1 @@ -899,7 +901,7 @@ YY_DECL register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; -#line 80 "src/glsl/glcpp/glcpp-lex.l" +#line 94 "src/glsl/glcpp/glcpp-lex.l" /* Implicitly switch between SKIP and INITIAL (non-skipping); * don't switch if some other state was explicitly set. @@ -914,7 +916,7 @@ YY_DECL } /* Single-line comments */ -#line 918 "src/glsl/glcpp/glcpp-lex.c" +#line 920 "src/glsl/glcpp/glcpp-lex.c" yylval = yylval_param; @@ -977,14 +979,14 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 154 ) + if ( yy_current_state >= 145 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yyg->yy_state_ptr++ = yy_current_state; ++yy_cp; } - while ( yy_current_state != 153 ); + while ( yy_current_state != 144 ); yy_find_action: yy_current_state = *--yyg->yy_state_ptr; @@ -1034,41 +1036,41 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 94 "src/glsl/glcpp/glcpp-lex.l" +#line 108 "src/glsl/glcpp/glcpp-lex.l" { } YY_BREAK /* Multi-line comments */ case 2: YY_RULE_SETUP -#line 98 "src/glsl/glcpp/glcpp-lex.l" +#line 112 "src/glsl/glcpp/glcpp-lex.l" { yy_push_state(COMMENT, yyscanner); } YY_BREAK case 3: YY_RULE_SETUP -#line 99 "src/glsl/glcpp/glcpp-lex.l" +#line 113 "src/glsl/glcpp/glcpp-lex.l" YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP -#line 100 "src/glsl/glcpp/glcpp-lex.l" +#line 114 "src/glsl/glcpp/glcpp-lex.l" { yylineno++; yycolumn = 0; return NEWLINE; } YY_BREAK case 5: YY_RULE_SETUP -#line 101 "src/glsl/glcpp/glcpp-lex.l" +#line 115 "src/glsl/glcpp/glcpp-lex.l" YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP -#line 102 "src/glsl/glcpp/glcpp-lex.l" +#line 116 "src/glsl/glcpp/glcpp-lex.l" { yylineno++; yycolumn = 0; return NEWLINE; } YY_BREAK case 7: YY_RULE_SETUP -#line 103 "src/glsl/glcpp/glcpp-lex.l" +#line 117 "src/glsl/glcpp/glcpp-lex.l" { yy_pop_state(yyscanner); if (yyextra->space_tokens) @@ -1077,7 +1079,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 109 "src/glsl/glcpp/glcpp-lex.l" +#line 123 "src/glsl/glcpp/glcpp-lex.l" { yylval->str = ralloc_strdup (yyextra, yytext); yyextra->space_tokens = 0; @@ -1088,7 +1090,7 @@ YY_RULE_SETUP * Simply pass them through to the main compiler's lexer/parser. */ case 9: YY_RULE_SETUP -#line 117 "src/glsl/glcpp/glcpp-lex.l" +#line 131 "src/glsl/glcpp/glcpp-lex.l" { yylval->str = ralloc_strdup (yyextra, yytext); yylineno++; @@ -1097,114 +1099,78 @@ YY_RULE_SETUP } YY_BREAK case 10: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 124 "src/glsl/glcpp/glcpp-lex.l" +#line 138 "src/glsl/glcpp/glcpp-lex.l" { - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - yylloc->source = strtol(ptr, NULL, 0); + return HASH_LINE; } YY_BREAK + case 11: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 140 "src/glsl/glcpp/glcpp-lex.l" -{ - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; -} - YY_BREAK - -case 12: -YY_RULE_SETUP -#line 156 "src/glsl/glcpp/glcpp-lex.l" +#line 143 "src/glsl/glcpp/glcpp-lex.l" { yyextra->lexing_if = 1; yyextra->space_tokens = 0; return HASH_IFDEF; } YY_BREAK -case 13: +case 12: YY_RULE_SETUP -#line 162 "src/glsl/glcpp/glcpp-lex.l" +#line 149 "src/glsl/glcpp/glcpp-lex.l" { yyextra->lexing_if = 1; yyextra->space_tokens = 0; return HASH_IFNDEF; } YY_BREAK -case 14: -/* rule 14 can match eol */ +case 13: +/* rule 13 can match eol */ *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 168 "src/glsl/glcpp/glcpp-lex.l" +#line 155 "src/glsl/glcpp/glcpp-lex.l" { yyextra->lexing_if = 1; yyextra->space_tokens = 0; return HASH_IF; } YY_BREAK -case 15: +case 14: YY_RULE_SETUP -#line 174 "src/glsl/glcpp/glcpp-lex.l" +#line 161 "src/glsl/glcpp/glcpp-lex.l" { yyextra->lexing_if = 1; yyextra->space_tokens = 0; return HASH_ELIF; } YY_BREAK -case 16: +case 15: YY_RULE_SETUP -#line 180 "src/glsl/glcpp/glcpp-lex.l" +#line 167 "src/glsl/glcpp/glcpp-lex.l" { yyextra->space_tokens = 0; return HASH_ELSE; } YY_BREAK -case 17: +case 16: YY_RULE_SETUP -#line 185 "src/glsl/glcpp/glcpp-lex.l" +#line 172 "src/glsl/glcpp/glcpp-lex.l" { yyextra->space_tokens = 0; return HASH_ENDIF; } YY_BREAK -case 18: +case 17: YY_RULE_SETUP -#line 191 "src/glsl/glcpp/glcpp-lex.l" +#line 178 "src/glsl/glcpp/glcpp-lex.l" ; YY_BREAK -case 19: +case 18: YY_RULE_SETUP -#line 193 "src/glsl/glcpp/glcpp-lex.l" +#line 180 "src/glsl/glcpp/glcpp-lex.l" { char *p; for (p = yytext; !isalpha(p[0]); p++); /* skip " # " */ @@ -1212,41 +1178,49 @@ YY_RULE_SETUP glcpp_error(yylloc, yyextra, "#error%s", p); } YY_BREAK -case 20: +case 19: YY_RULE_SETUP -#line 200 "src/glsl/glcpp/glcpp-lex.l" +#line 187 "src/glsl/glcpp/glcpp-lex.l" { yyextra->space_tokens = 0; return HASH_DEFINE_FUNC; } YY_BREAK -case 21: +case 20: YY_RULE_SETUP -#line 205 "src/glsl/glcpp/glcpp-lex.l" +#line 192 "src/glsl/glcpp/glcpp-lex.l" { yyextra->space_tokens = 0; return HASH_DEFINE_OBJ; } YY_BREAK -case 22: +case 21: YY_RULE_SETUP -#line 210 "src/glsl/glcpp/glcpp-lex.l" +#line 197 "src/glsl/glcpp/glcpp-lex.l" { yyextra->space_tokens = 0; return HASH_UNDEF; } YY_BREAK -case 23: +case 22: YY_RULE_SETUP -#line 215 "src/glsl/glcpp/glcpp-lex.l" +#line 202 "src/glsl/glcpp/glcpp-lex.l" { yyextra->space_tokens = 0; return HASH; } YY_BREAK +case 23: +YY_RULE_SETUP +#line 207 "src/glsl/glcpp/glcpp-lex.l" +{ + yylval->str = ralloc_strdup (yyextra, yytext); + return INTEGER_STRING; +} + YY_BREAK case 24: YY_RULE_SETUP -#line 220 "src/glsl/glcpp/glcpp-lex.l" +#line 212 "src/glsl/glcpp/glcpp-lex.l" { yylval->str = ralloc_strdup (yyextra, yytext); return INTEGER_STRING; @@ -1254,7 +1228,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 225 "src/glsl/glcpp/glcpp-lex.l" +#line 217 "src/glsl/glcpp/glcpp-lex.l" { yylval->str = ralloc_strdup (yyextra, yytext); return INTEGER_STRING; @@ -1262,118 +1236,110 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 230 "src/glsl/glcpp/glcpp-lex.l" -{ - yylval->str = ralloc_strdup (yyextra, yytext); - return INTEGER_STRING; -} - YY_BREAK -case 27: -YY_RULE_SETUP -#line 235 "src/glsl/glcpp/glcpp-lex.l" +#line 222 "src/glsl/glcpp/glcpp-lex.l" { return LEFT_SHIFT; } YY_BREAK -case 28: +case 27: YY_RULE_SETUP -#line 239 "src/glsl/glcpp/glcpp-lex.l" +#line 226 "src/glsl/glcpp/glcpp-lex.l" { return RIGHT_SHIFT; } YY_BREAK -case 29: +case 28: YY_RULE_SETUP -#line 243 "src/glsl/glcpp/glcpp-lex.l" +#line 230 "src/glsl/glcpp/glcpp-lex.l" { return LESS_OR_EQUAL; } YY_BREAK -case 30: +case 29: YY_RULE_SETUP -#line 247 "src/glsl/glcpp/glcpp-lex.l" +#line 234 "src/glsl/glcpp/glcpp-lex.l" { return GREATER_OR_EQUAL; } YY_BREAK -case 31: +case 30: YY_RULE_SETUP -#line 251 "src/glsl/glcpp/glcpp-lex.l" +#line 238 "src/glsl/glcpp/glcpp-lex.l" { return EQUAL; } YY_BREAK -case 32: +case 31: YY_RULE_SETUP -#line 255 "src/glsl/glcpp/glcpp-lex.l" +#line 242 "src/glsl/glcpp/glcpp-lex.l" { return NOT_EQUAL; } YY_BREAK -case 33: +case 32: YY_RULE_SETUP -#line 259 "src/glsl/glcpp/glcpp-lex.l" +#line 246 "src/glsl/glcpp/glcpp-lex.l" { return AND; } YY_BREAK -case 34: +case 33: YY_RULE_SETUP -#line 263 "src/glsl/glcpp/glcpp-lex.l" +#line 250 "src/glsl/glcpp/glcpp-lex.l" { return OR; } YY_BREAK -case 35: +case 34: YY_RULE_SETUP -#line 267 "src/glsl/glcpp/glcpp-lex.l" +#line 254 "src/glsl/glcpp/glcpp-lex.l" { return PASTE; } YY_BREAK -case 36: +case 35: YY_RULE_SETUP -#line 271 "src/glsl/glcpp/glcpp-lex.l" +#line 258 "src/glsl/glcpp/glcpp-lex.l" { return DEFINED; } YY_BREAK -case 37: +case 36: YY_RULE_SETUP -#line 275 "src/glsl/glcpp/glcpp-lex.l" +#line 262 "src/glsl/glcpp/glcpp-lex.l" { yylval->str = ralloc_strdup (yyextra, yytext); return IDENTIFIER; } YY_BREAK -case 38: +case 37: YY_RULE_SETUP -#line 280 "src/glsl/glcpp/glcpp-lex.l" +#line 267 "src/glsl/glcpp/glcpp-lex.l" { return yytext[0]; } YY_BREAK -case 39: +case 38: YY_RULE_SETUP -#line 284 "src/glsl/glcpp/glcpp-lex.l" +#line 271 "src/glsl/glcpp/glcpp-lex.l" { yylval->str = ralloc_strdup (yyextra, yytext); return OTHER; } YY_BREAK -case 40: +case 39: YY_RULE_SETUP -#line 289 "src/glsl/glcpp/glcpp-lex.l" +#line 276 "src/glsl/glcpp/glcpp-lex.l" { if (yyextra->space_tokens) { return SPACE; } } YY_BREAK -case 41: -/* rule 41 can match eol */ +case 40: +/* rule 40 can match eol */ YY_RULE_SETUP -#line 295 "src/glsl/glcpp/glcpp-lex.l" +#line 282 "src/glsl/glcpp/glcpp-lex.l" { yyextra->lexing_if = 0; yylineno++; @@ -1383,7 +1349,7 @@ YY_RULE_SETUP YY_BREAK /* Handle missing newline at EOF. */ case YY_STATE_EOF(INITIAL): -#line 303 "src/glsl/glcpp/glcpp-lex.l" +#line 290 "src/glsl/glcpp/glcpp-lex.l" { BEGIN DONE; /* Don't keep matching this rule forever. */ yyextra->lexing_if = 0; @@ -1394,20 +1360,20 @@ case YY_STATE_EOF(INITIAL): only have this action here so that we can pretend to call some generated functions, (to avoid "defined but not used" warnings. */ -case 42: +case 41: YY_RULE_SETUP -#line 313 "src/glsl/glcpp/glcpp-lex.l" +#line 300 "src/glsl/glcpp/glcpp-lex.l" { unput('.'); yy_top_state(yyextra); } YY_BREAK -case 43: +case 42: YY_RULE_SETUP -#line 318 "src/glsl/glcpp/glcpp-lex.l" +#line 305 "src/glsl/glcpp/glcpp-lex.l" ECHO; YY_BREAK -#line 1411 "src/glsl/glcpp/glcpp-lex.c" +#line 1377 "src/glsl/glcpp/glcpp-lex.c" case YY_STATE_EOF(DONE): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(UNREACHABLE): @@ -1674,7 +1640,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 154 ) + if ( yy_current_state >= 145 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1698,11 +1664,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 154 ) + if ( yy_current_state >= 145 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 153); + yy_is_jam = (yy_current_state == 144); if ( ! yy_is_jam ) *yyg->yy_state_ptr++ = yy_current_state; @@ -2601,7 +2567,7 @@ void glcpp_free (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 318 "src/glsl/glcpp/glcpp-lex.l" +#line 305 "src/glsl/glcpp/glcpp-lex.l" diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.l b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.l index 866188708..7ab58cb28 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.l +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-lex.l @@ -40,12 +40,18 @@ void glcpp_set_column (int column_no , yyscan_t yyscanner); #define YY_NO_INPUT -#define YY_USER_ACTION \ - do { \ - yylloc->first_column = yycolumn + 1; \ - yylloc->first_line = yylineno; \ - yycolumn += yyleng; \ - } while(0); +#define YY_USER_ACTION \ + do { \ + if (parser->has_new_line_number) \ + yylineno = parser->new_line_number; \ + if (parser->has_new_source_number) \ + yylloc->source = parser->new_source_number; \ + yylloc->first_column = yycolumn + 1; \ + yylloc->first_line = yylineno; \ + yycolumn += yyleng; \ + parser->has_new_line_number = 0; \ + parser->has_new_source_number = 0; \ + } while(0); #define YY_USER_INIT \ do { \ @@ -70,7 +76,15 @@ HSPACE [ \t] HASH ^{HSPACE}*#{HSPACE}* IDENTIFIER [_a-zA-Z][_a-zA-Z0-9]* PUNCTUATION [][(){}.&*~!/%<>^|;,=+-] -OTHER [^][(){}.&*~!/%<>^|;,=#[:space:]+-]+ + +/* The OTHER class is simply a catch-all for things that the CPP +parser just doesn't care about. Since flex regular expressions that +match longer strings take priority over those matching shorter +strings, we have to be careful to avoid OTHER matching and hiding +something that CPP does care about. So we simply exclude all +characters that appear in any other expressions. */ + +OTHER [^][_#[:space:]#a-zA-Z0-9(){}.&*~!/%<>^|;,=+-] DIGITS [0-9][0-9]* DECIMAL_INTEGER [1-9][0-9]*[uU]? @@ -121,35 +135,8 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]? return OTHER; } -{HASH}line{HSPACE}+{DIGITS}{HSPACE}+{DIGITS}{HSPACE}*$ { - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - yylloc->source = strtol(ptr, NULL, 0); -} - -{HASH}line{HSPACE}+{DIGITS}{HSPACE}*$ { - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; +{HASH}line { + return HASH_LINE; } { diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.c index cf10b5e74..96d20c152 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.c +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.c @@ -58,7 +58,15 @@ /* Using locations. */ #define YYLSP_NEEDED 1 - +/* Substitute the variable and function names. */ +#define yyparse glcpp_parser_parse +#define yylex glcpp_parser_lex +#define yyerror glcpp_parser_error +#define yylval glcpp_parser_lval +#define yychar glcpp_parser_char +#define yydebug glcpp_parser_debug +#define yynerrs glcpp_parser_nerrs +#define yylloc glcpp_parser_lloc /* Tokens. */ #ifndef YYTOKENTYPE @@ -78,26 +86,28 @@ HASH_IF = 267, HASH_IFDEF = 268, HASH_IFNDEF = 269, - HASH_UNDEF = 270, - HASH_VERSION = 271, - IDENTIFIER = 272, - IF_EXPANDED = 273, - INTEGER = 274, - INTEGER_STRING = 275, - NEWLINE = 276, - OTHER = 277, - PLACEHOLDER = 278, - SPACE = 279, - PASTE = 280, - OR = 281, - AND = 282, - NOT_EQUAL = 283, - EQUAL = 284, - GREATER_OR_EQUAL = 285, - LESS_OR_EQUAL = 286, - RIGHT_SHIFT = 287, - LEFT_SHIFT = 288, - UNARY = 289 + HASH_LINE = 270, + HASH_UNDEF = 271, + HASH_VERSION = 272, + IDENTIFIER = 273, + IF_EXPANDED = 274, + INTEGER = 275, + INTEGER_STRING = 276, + LINE_EXPANDED = 277, + NEWLINE = 278, + OTHER = 279, + PLACEHOLDER = 280, + SPACE = 281, + PASTE = 282, + OR = 283, + AND = 284, + NOT_EQUAL = 285, + EQUAL = 286, + GREATER_OR_EQUAL = 287, + LESS_OR_EQUAL = 288, + RIGHT_SHIFT = 289, + LEFT_SHIFT = 290, + UNARY = 291 }; #endif /* Tokens. */ @@ -113,26 +123,28 @@ #define HASH_IF 267 #define HASH_IFDEF 268 #define HASH_IFNDEF 269 -#define HASH_UNDEF 270 -#define HASH_VERSION 271 -#define IDENTIFIER 272 -#define IF_EXPANDED 273 -#define INTEGER 274 -#define INTEGER_STRING 275 -#define NEWLINE 276 -#define OTHER 277 -#define PLACEHOLDER 278 -#define SPACE 279 -#define PASTE 280 -#define OR 281 -#define AND 282 -#define NOT_EQUAL 283 -#define EQUAL 284 -#define GREATER_OR_EQUAL 285 -#define LESS_OR_EQUAL 286 -#define RIGHT_SHIFT 287 -#define LEFT_SHIFT 288 -#define UNARY 289 +#define HASH_LINE 270 +#define HASH_UNDEF 271 +#define HASH_VERSION 272 +#define IDENTIFIER 273 +#define IF_EXPANDED 274 +#define INTEGER 275 +#define INTEGER_STRING 276 +#define LINE_EXPANDED 277 +#define NEWLINE 278 +#define OTHER 279 +#define PLACEHOLDER 280 +#define SPACE 281 +#define PASTE 282 +#define OR 283 +#define AND 284 +#define NOT_EQUAL 285 +#define EQUAL 286 +#define GREATER_OR_EQUAL 287 +#define LESS_OR_EQUAL 288 +#define RIGHT_SHIFT 289 +#define LEFT_SHIFT 290 +#define UNARY 291 @@ -226,7 +238,6 @@ _token_create_ival (void *ctx, int type, int ival); static token_list_t * _token_list_create (void *ctx); -/* Note: This function calls ralloc_steal on token. */ static void _token_list_append (token_list_t *list, token_t *token); @@ -236,20 +247,26 @@ _token_list_append_list (token_list_t *list, token_list_t *tail); static int _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b); -static active_list_t * -_active_list_push (active_list_t *list, - const char *identifier, - token_node_t *marker); - -static active_list_t * -_active_list_pop (active_list_t *list); - -int -_active_list_contains (active_list_t *list, const char *identifier); +static void +_parser_active_list_push (glcpp_parser_t *parser, + const char *identifier, + token_node_t *marker); static void -_glcpp_parser_expand_if (glcpp_parser_t *parser, int type, token_list_t *list); +_parser_active_list_pop (glcpp_parser_t *parser); +static int +_parser_active_list_contains (glcpp_parser_t *parser, const char *identifier); + +/* Expand list, and begin lexing from the result (after first + * prefixing a token of type 'head_token_type'). + */ +static void +_glcpp_parser_expand_and_lex_from (glcpp_parser_t *parser, + int head_token_type, + token_list_t *list); + +/* Perform macro expansion in-place on the given list. */ static void _glcpp_parser_expand_token_list (glcpp_parser_t *parser, token_list_t *list); @@ -269,8 +286,6 @@ _glcpp_parser_skip_stack_change_if (glcpp_parser_t *parser, YYLTYPE *loc, static void _glcpp_parser_skip_stack_pop (glcpp_parser_t *parser, YYLTYPE *loc); -#define yylex glcpp_parser_lex - static int glcpp_parser_lex (YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser); @@ -325,7 +340,7 @@ typedef struct YYLTYPE /* Line 216 of yacc.c. */ -#line 329 "src/glsl/glcpp/glcpp-parse.c" +#line 344 "src/glsl/glcpp/glcpp-parse.c" #ifdef short # undef short @@ -542,20 +557,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 606 +#define YYLAST 667 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 57 +#define YYNTOKENS 59 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 17 /* YYNRULES -- Number of rules. */ -#define YYNRULES 101 +#define YYNRULES 105 /* YYNRULES -- Number of states. */ -#define YYNSTATES 162 +#define YYNSTATES 171 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 289 +#define YYMAXUTOK 291 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -566,16 +581,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 47, 2, 2, 2, 43, 30, 2, - 45, 46, 41, 39, 49, 40, 54, 42, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 55, - 33, 56, 34, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 49, 2, 2, 2, 45, 32, 2, + 47, 48, 43, 41, 51, 42, 56, 44, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 57, + 35, 58, 36, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 50, 2, 51, 29, 2, 2, 2, 2, 2, + 2, 52, 2, 53, 31, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 52, 28, 53, 48, 2, 2, 2, + 2, 2, 2, 54, 30, 55, 50, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -591,7 +606,8 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 31, 32, 35, 36, 37, 38, 44 + 25, 26, 27, 28, 29, 33, 34, 37, 38, 39, + 40, 46 }; #if YYDEBUG @@ -600,67 +616,68 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint16 yyprhs[] = { 0, 0, 3, 4, 7, 9, 11, 13, 16, 20, - 24, 29, 36, 44, 48, 52, 55, 60, 65, 69, - 72, 75, 78, 82, 85, 87, 89, 91, 95, 99, - 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, - 143, 147, 151, 155, 159, 163, 166, 169, 172, 175, - 179, 181, 185, 187, 190, 193, 194, 196, 197, 199, - 202, 207, 209, 211, 214, 216, 219, 221, 223, 225, - 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, - 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, - 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, - 287, 289 + 24, 28, 33, 38, 45, 53, 57, 61, 65, 68, + 73, 78, 82, 85, 88, 91, 95, 98, 100, 102, + 104, 106, 110, 114, 118, 122, 126, 130, 134, 138, + 142, 146, 150, 154, 158, 162, 166, 170, 174, 178, + 181, 184, 187, 190, 194, 196, 200, 202, 205, 208, + 209, 211, 212, 214, 217, 222, 224, 226, 229, 231, + 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, + 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, + 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, + 294, 296, 298, 300, 302, 304 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 58, 0, -1, -1, 58, 59, -1, 61, -1, 65, - -1, 60, -1, 6, 66, -1, 18, 63, 21, -1, - 5, 63, 21, -1, 8, 17, 67, 21, -1, 7, - 17, 45, 46, 67, 21, -1, 7, 17, 45, 64, - 46, 67, 21, -1, 15, 17, 21, -1, 12, 70, - 21, -1, 12, 21, -1, 13, 17, 68, 21, -1, - 14, 17, 68, 21, -1, 9, 70, 21, -1, 9, - 21, -1, 10, 21, -1, 11, 21, -1, 16, 62, - 21, -1, 6, 21, -1, 20, -1, 19, -1, 62, - -1, 63, 26, 63, -1, 63, 27, 63, -1, 63, - 28, 63, -1, 63, 29, 63, -1, 63, 30, 63, - -1, 63, 31, 63, -1, 63, 32, 63, -1, 63, - 35, 63, -1, 63, 36, 63, -1, 63, 34, 63, - -1, 63, 33, 63, -1, 63, 37, 63, -1, 63, - 38, 63, -1, 63, 40, 63, -1, 63, 39, 63, - -1, 63, 43, 63, -1, 63, 42, 63, -1, 63, - 41, 63, -1, 47, 63, -1, 48, 63, -1, 40, - 63, -1, 39, 63, -1, 45, 63, 46, -1, 17, - -1, 64, 49, 17, -1, 21, -1, 71, 21, -1, - 71, 21, -1, -1, 71, -1, -1, 71, -1, 4, - 17, -1, 4, 45, 17, 46, -1, 72, -1, 69, - -1, 70, 69, -1, 72, -1, 71, 72, -1, 17, - -1, 20, -1, 73, -1, 22, -1, 24, -1, 50, - -1, 51, -1, 45, -1, 46, -1, 52, -1, 53, - -1, 54, -1, 30, -1, 41, -1, 39, -1, 40, - -1, 48, -1, 47, -1, 42, -1, 43, -1, 38, - -1, 37, -1, 33, -1, 34, -1, 36, -1, 35, - -1, 32, -1, 31, -1, 29, -1, 28, -1, 27, - -1, 26, -1, 55, -1, 49, -1, 56, -1, 25, - -1 + 60, 0, -1, -1, 60, 61, -1, 63, -1, 67, + -1, 62, -1, 6, 68, -1, 19, 65, 23, -1, + 5, 65, 23, -1, 22, 64, 23, -1, 22, 64, + 64, 23, -1, 8, 18, 69, 23, -1, 7, 18, + 47, 48, 69, 23, -1, 7, 18, 47, 66, 48, + 69, 23, -1, 16, 18, 23, -1, 15, 73, 23, + -1, 12, 72, 23, -1, 12, 23, -1, 13, 18, + 70, 23, -1, 14, 18, 70, 23, -1, 9, 72, + 23, -1, 9, 23, -1, 10, 23, -1, 11, 23, + -1, 17, 64, 23, -1, 6, 23, -1, 21, -1, + 20, -1, 64, -1, 18, -1, 65, 28, 65, -1, + 65, 29, 65, -1, 65, 30, 65, -1, 65, 31, + 65, -1, 65, 32, 65, -1, 65, 33, 65, -1, + 65, 34, 65, -1, 65, 37, 65, -1, 65, 38, + 65, -1, 65, 36, 65, -1, 65, 35, 65, -1, + 65, 39, 65, -1, 65, 40, 65, -1, 65, 42, + 65, -1, 65, 41, 65, -1, 65, 45, 65, -1, + 65, 44, 65, -1, 65, 43, 65, -1, 49, 65, + -1, 50, 65, -1, 42, 65, -1, 41, 65, -1, + 47, 65, 48, -1, 18, -1, 66, 51, 18, -1, + 23, -1, 73, 23, -1, 73, 23, -1, -1, 73, + -1, -1, 73, -1, 4, 18, -1, 4, 47, 18, + 48, -1, 74, -1, 71, -1, 72, 71, -1, 74, + -1, 73, 74, -1, 18, -1, 21, -1, 75, -1, + 24, -1, 26, -1, 52, -1, 53, -1, 47, -1, + 48, -1, 54, -1, 55, -1, 56, -1, 32, -1, + 43, -1, 41, -1, 42, -1, 50, -1, 49, -1, + 44, -1, 45, -1, 40, -1, 39, -1, 35, -1, + 36, -1, 38, -1, 37, -1, 34, -1, 33, -1, + 31, -1, 30, -1, 29, -1, 28, -1, 57, -1, + 51, -1, 58, -1, 27, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 181, 181, 183, 187, 190, 195, 196, 200, 203, - 209, 212, 215, 218, 226, 245, 255, 260, 265, 284, - 299, 302, 305, 326, 330, 339, 344, 345, 348, 351, - 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, - 384, 387, 390, 398, 406, 409, 412, 415, 418, 421, - 427, 432, 440, 441, 445, 451, 452, 455, 457, 464, - 468, 472, 477, 481, 488, 493, 500, 504, 508, 512, - 516, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553 + 0, 184, 184, 186, 190, 193, 198, 199, 203, 206, + 209, 217, 230, 233, 236, 239, 247, 255, 275, 285, + 290, 295, 315, 330, 333, 336, 357, 361, 370, 375, + 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, + 406, 409, 412, 415, 418, 421, 424, 432, 440, 443, + 446, 449, 452, 455, 461, 466, 474, 475, 479, 485, + 486, 489, 491, 498, 502, 506, 511, 515, 522, 527, + 534, 538, 542, 546, 550, 557, 558, 559, 560, 561, + 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 584, 585, 586, 587 }; #endif @@ -672,16 +689,17 @@ static const char *const yytname[] = "$end", "error", "$undefined", "COMMA_FINAL", "DEFINED", "ELIF_EXPANDED", "HASH", "HASH_DEFINE_FUNC", "HASH_DEFINE_OBJ", "HASH_ELIF", "HASH_ELSE", "HASH_ENDIF", "HASH_IF", "HASH_IFDEF", - "HASH_IFNDEF", "HASH_UNDEF", "HASH_VERSION", "IDENTIFIER", "IF_EXPANDED", - "INTEGER", "INTEGER_STRING", "NEWLINE", "OTHER", "PLACEHOLDER", "SPACE", - "PASTE", "OR", "AND", "'|'", "'^'", "'&'", "NOT_EQUAL", "EQUAL", "'<'", - "'>'", "GREATER_OR_EQUAL", "LESS_OR_EQUAL", "RIGHT_SHIFT", "LEFT_SHIFT", - "'+'", "'-'", "'*'", "'/'", "'%'", "UNARY", "'('", "')'", "'!'", "'~'", - "','", "'['", "']'", "'{'", "'}'", "'.'", "';'", "'='", "$accept", - "input", "line", "expanded_line", "control_line", "integer_constant", - "expression", "identifier_list", "text_line", "non_directive", - "replacement_list", "junk", "conditional_token", "conditional_tokens", - "pp_tokens", "preprocessing_token", "operator", 0 + "HASH_IFNDEF", "HASH_LINE", "HASH_UNDEF", "HASH_VERSION", "IDENTIFIER", + "IF_EXPANDED", "INTEGER", "INTEGER_STRING", "LINE_EXPANDED", "NEWLINE", + "OTHER", "PLACEHOLDER", "SPACE", "PASTE", "OR", "AND", "'|'", "'^'", + "'&'", "NOT_EQUAL", "EQUAL", "'<'", "'>'", "GREATER_OR_EQUAL", + "LESS_OR_EQUAL", "RIGHT_SHIFT", "LEFT_SHIFT", "'+'", "'-'", "'*'", "'/'", + "'%'", "UNARY", "'('", "')'", "'!'", "'~'", "','", "'['", "']'", "'{'", + "'}'", "'.'", "';'", "'='", "$accept", "input", "line", "expanded_line", + "control_line", "integer_constant", "expression", "identifier_list", + "text_line", "non_directive", "replacement_list", "junk", + "conditional_token", "conditional_tokens", "pp_tokens", + "preprocessing_token", "operator", 0 }; #endif @@ -692,43 +710,43 @@ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 124, 94, - 38, 283, 284, 60, 62, 285, 286, 287, 288, 43, - 45, 42, 47, 37, 289, 40, 41, 33, 126, 44, - 91, 93, 123, 125, 46, 59, 61 + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 124, 94, 38, 285, 286, 60, 62, 287, 288, 289, + 290, 43, 45, 42, 47, 37, 291, 40, 41, 33, + 126, 44, 91, 93, 123, 125, 46, 59, 61 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 57, 58, 58, 59, 59, 59, 59, 60, 60, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 62, 62, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 64, 64, 65, 65, 66, 67, 67, 68, 68, 69, - 69, 69, 70, 70, 71, 71, 72, 72, 72, 72, - 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73 + 0, 59, 60, 60, 61, 61, 61, 61, 62, 62, + 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 64, 64, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 66, 66, 67, 67, 68, 69, + 69, 70, 70, 71, 71, 71, 72, 72, 73, 73, + 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 1, 1, 1, 2, 3, 3, - 4, 6, 7, 3, 3, 2, 4, 4, 3, 2, - 2, 2, 3, 2, 1, 1, 1, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, - 1, 3, 1, 2, 2, 0, 1, 0, 1, 2, - 4, 1, 1, 2, 1, 2, 1, 1, 1, 1, + 3, 4, 4, 6, 7, 3, 3, 3, 2, 4, + 4, 3, 2, 2, 2, 3, 2, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, + 2, 2, 2, 3, 1, 3, 1, 2, 2, 0, + 1, 0, 1, 2, 4, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1 + 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -737,60 +755,62 @@ static const yytype_uint8 yyr2[] = static const yytype_uint8 yydefact[] = { 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 0, 67, 52, 69, - 70, 101, 97, 96, 95, 94, 78, 93, 92, 88, - 89, 91, 90, 87, 86, 80, 81, 79, 84, 85, - 73, 74, 83, 82, 99, 71, 72, 75, 76, 77, - 98, 100, 3, 6, 4, 5, 0, 64, 68, 25, - 24, 0, 0, 0, 0, 0, 26, 0, 23, 7, - 0, 0, 55, 0, 19, 62, 0, 61, 20, 21, - 15, 0, 57, 57, 0, 0, 0, 53, 65, 48, - 47, 0, 45, 46, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, + 56, 73, 74, 105, 101, 100, 99, 98, 82, 97, + 96, 92, 93, 95, 94, 91, 90, 84, 85, 83, + 88, 89, 77, 78, 87, 86, 103, 75, 76, 79, + 80, 81, 102, 104, 3, 6, 4, 5, 0, 68, + 72, 30, 28, 27, 0, 0, 0, 0, 0, 29, + 0, 26, 7, 0, 0, 59, 0, 22, 66, 0, + 65, 23, 24, 18, 0, 61, 61, 0, 0, 0, + 0, 0, 57, 69, 52, 51, 0, 49, 50, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 56, 59, 0, 18, - 63, 14, 0, 58, 0, 13, 22, 8, 49, 27, - 28, 29, 30, 31, 32, 33, 37, 36, 34, 35, - 38, 39, 41, 40, 44, 43, 42, 50, 55, 0, - 10, 0, 16, 17, 0, 55, 0, 60, 11, 0, - 51, 12 + 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, + 0, 60, 63, 0, 21, 67, 17, 0, 62, 0, + 16, 15, 25, 8, 10, 0, 53, 31, 32, 33, + 34, 35, 36, 37, 41, 40, 38, 39, 42, 43, + 45, 44, 48, 47, 46, 54, 59, 0, 12, 0, + 19, 20, 11, 0, 59, 0, 64, 13, 0, 55, + 14 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 52, 53, 54, 66, 67, 149, 55, 69, - 115, 122, 75, 76, 116, 57, 58 + -1, 1, 54, 55, 56, 69, 70, 157, 57, 72, + 120, 127, 78, 79, 121, 59, 60 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -147 +#define YYPACT_NINF -149 static const yytype_int16 yypact[] = { - -147, 112, -147, 28, -10, 55, 62, 152, -15, 59, - 192, 85, 86, 87, 51, -147, 28, -147, -147, -147, - -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, - -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, - -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, - -147, -147, -147, -147, -147, -147, 312, -147, -147, -147, - -147, 28, 28, 28, 28, 28, -147, 428, -147, -147, - 352, 63, 392, 17, -147, -147, 232, -147, -147, -147, - -147, 272, 392, 392, 84, 89, 451, -147, -147, -147, - -147, 469, -147, -147, -147, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, -147, 60, 90, 392, -147, 96, -147, - -147, -147, 93, 392, 94, -147, -147, -147, -147, 489, - 505, 520, 534, 547, 558, 558, 18, 18, 18, 18, - 563, 563, 23, 23, -147, -147, -147, -147, 392, 32, - -147, 61, -147, -147, 110, 392, 118, -147, -147, 149, - -147, -147 + -149, 117, -149, 490, -9, 55, 57, 159, 42, 53, + 201, 66, 69, 449, 93, -10, -149, 490, -149, -10, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, 326, -149, + -149, -149, -149, -149, 490, 490, 490, 490, 490, -149, + 513, -149, -149, 367, 68, 449, 32, -149, -149, 243, + -149, -149, -149, -149, 285, 449, 449, 408, 89, 90, + 536, 47, -149, -149, -149, -149, 485, -149, -149, -149, + 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, + 490, 490, 490, 490, 490, 490, 490, 490, -149, -11, + 95, 449, -149, 98, -149, -149, -149, 96, 449, 97, + -149, -149, -149, -149, -149, 114, -149, 553, 569, 584, + 598, 611, 622, 622, 18, 18, 18, 18, 65, 65, + 38, 38, -149, -149, -149, -149, 449, 23, -149, 94, + -149, -149, -149, 153, 449, 160, -149, -149, 156, -149, + -149 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -147, -147, -147, -147, -147, 157, -11, -147, -147, -147, - -146, 92, -68, 200, 0, -7, -147 + -149, -149, -149, -149, -149, -13, -12, -149, -149, -149, + -148, 132, -15, 171, 0, -7, -149 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -800,155 +820,168 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 77, 56, 154, 77, 70, 86, 78, 15, 120, 159, - 17, 68, 19, 120, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 117, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 59, 60, 88, - 89, 90, 91, 92, 93, 106, 107, 108, 109, 110, - 111, 112, 118, 88, 110, 111, 112, 61, 62, 77, - 59, 60, 71, 63, 77, 64, 65, 147, 155, 72, - 79, 156, 123, 123, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 82, 83, 84, 125, 148, 157, 114, 88, - 126, 150, 2, 151, 152, 153, 88, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 158, 17, 18, 19, 160, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 73, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 161, 85, 17, 74, 19, 124, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 73, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 81, 0, 17, 80, 19, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 73, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 0, 0, 17, 119, 19, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 73, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 0, 0, 17, 121, 19, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 0, 0, 17, 87, 19, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 0, 0, 17, 113, 19, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 15, - 0, 0, 17, 0, 19, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 94, - 0, 0, 0, 0, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 127, 0, 0, 0, 0, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 0, 0, 128, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 108, 109, 110, 111, 112 + 80, 58, 89, 80, 73, 90, 91, 155, 163, 16, + 62, 63, 18, 87, 71, 21, 168, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 156, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 122, 93, 94, 95, 96, 97, 98, 111, 112, 113, + 114, 115, 116, 117, 125, 81, 93, 62, 63, 125, + 134, 164, 80, 74, 165, 75, 82, 80, 135, 123, + 93, 115, 116, 117, 85, 128, 128, 86, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 113, 114, 115, 116, + 117, 88, 131, 132, 93, 119, 159, 2, 158, 160, + 161, 93, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 162, 18, 19, + 20, 21, 166, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 76, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 167, 16, 169, 170, + 18, 84, 77, 21, 0, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 76, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 129, 16, + 0, 0, 18, 0, 83, 21, 0, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 76, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 0, 16, 0, 0, 18, 0, 124, 21, 0, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 76, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 0, 16, 0, 0, 18, 0, 126, 21, + 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 0, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 16, 0, 0, 18, 0, 92, + 21, 0, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 0, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 16, 0, 0, 18, 0, + 118, 21, 0, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 0, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 16, 0, 0, 18, + 0, 130, 21, 0, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 0, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 16, 0, 0, + 18, 0, 0, 21, 0, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 0, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 61, 0, + 62, 63, 0, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 64, 65, 136, 0, 0, 99, 66, 0, 67, + 68, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 133, + 0, 0, 0, 0, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117 }; static const yytype_int16 yycheck[] = { - 7, 1, 148, 10, 4, 16, 21, 17, 76, 155, - 20, 21, 22, 81, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 17, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 19, 20, 56, - 61, 62, 63, 64, 65, 37, 38, 39, 40, 41, - 42, 43, 45, 70, 41, 42, 43, 39, 40, 76, - 19, 20, 17, 45, 81, 47, 48, 17, 46, 17, - 21, 49, 82, 83, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 17, 17, 17, 21, 46, 46, 45, 116, - 21, 21, 0, 17, 21, 21, 123, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 21, 20, 21, 22, 17, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 4, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - 21, 14, 20, 21, 22, 83, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 4, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - 10, -1, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 4, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - -1, -1, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 4, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - -1, -1, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - -1, -1, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - -1, -1, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 17, - -1, -1, 20, -1, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 21, - -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 21, -1, -1, -1, -1, 26, 27, 28, + 7, 1, 15, 10, 4, 17, 19, 18, 156, 18, + 20, 21, 21, 13, 23, 24, 164, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, -1, -1, 46, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 31, 32, + 39, 40, 41, 42, 43, 44, 45, 48, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 18, 58, 64, 65, 66, 67, 68, 39, 40, 41, + 42, 43, 44, 45, 79, 23, 73, 20, 21, 84, + 23, 48, 79, 18, 51, 18, 23, 84, 91, 47, + 87, 43, 44, 45, 18, 85, 86, 18, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 41, 42, 43, 44, + 45, 18, 23, 23, 121, 47, 18, 0, 23, 23, + 23, 128, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 23, 21, 22, + 23, 24, 48, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 39, 40, 41, 42, 43 + 43, 44, 45, 4, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 23, 18, 18, 23, + 21, 10, 23, 24, -1, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 4, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 86, 18, + -1, -1, 21, -1, 23, 24, -1, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 4, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + -1, 18, -1, -1, 21, -1, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 4, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, -1, 18, -1, -1, 21, -1, 23, 24, + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 18, -1, -1, 21, -1, 23, + 24, -1, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, -1, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 18, -1, -1, 21, -1, + 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 18, -1, -1, 21, + -1, 23, 24, -1, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 18, -1, -1, + 21, -1, -1, 24, -1, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, -1, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 18, -1, + 20, 21, -1, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 41, 42, 48, -1, -1, 23, 47, -1, 49, + 50, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 23, + -1, -1, -1, -1, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 58, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 0, 60, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, + 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 59, 60, 61, 65, 71, 72, 73, 19, - 20, 39, 40, 45, 47, 48, 62, 63, 21, 66, - 71, 17, 17, 4, 21, 69, 70, 72, 21, 21, - 21, 70, 17, 17, 17, 62, 63, 21, 72, 63, - 63, 63, 63, 63, 21, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 21, 45, 67, 71, 17, 45, 21, - 69, 21, 68, 71, 68, 21, 21, 21, 46, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 17, 46, 64, - 21, 17, 21, 21, 67, 46, 49, 46, 21, 67, - 17, 21 + 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 61, 62, 63, 67, 73, 74, + 75, 18, 20, 21, 41, 42, 47, 49, 50, 64, + 65, 23, 68, 73, 18, 18, 4, 23, 71, 72, + 74, 23, 23, 23, 72, 18, 18, 73, 18, 64, + 65, 64, 23, 74, 65, 65, 65, 65, 65, 23, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 23, 47, + 69, 73, 18, 47, 23, 71, 23, 70, 73, 70, + 23, 23, 23, 23, 23, 64, 48, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 18, 48, 66, 23, 18, + 23, 23, 23, 69, 48, 51, 48, 23, 69, 18, + 23 }; #define yyerrok (yyerrstatus = 0) @@ -1610,7 +1643,7 @@ YYLTYPE yylloc; /* User initialization code. */ -#line 148 "src/glsl/glcpp/glcpp-parse.y" +#line 151 "src/glsl/glcpp/glcpp-parse.y" { yylloc.first_line = 1; yylloc.first_column = 1; @@ -1619,7 +1652,7 @@ YYLTYPE yylloc; yylloc.source = 0; } /* Line 1078 of yacc.c. */ -#line 1623 "src/glsl/glcpp/glcpp-parse.c" +#line 1656 "src/glsl/glcpp/glcpp-parse.c" yylsp[0] = yylloc; goto yysetstate; @@ -1804,30 +1837,30 @@ yyreduce: switch (yyn) { case 4: -#line 187 "src/glsl/glcpp/glcpp-parse.y" +#line 190 "src/glsl/glcpp/glcpp-parse.y" { - ralloc_strcat (&parser->output, "\n"); + ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); ;} break; case 5: -#line 190 "src/glsl/glcpp/glcpp-parse.y" +#line 193 "src/glsl/glcpp/glcpp-parse.y" { _glcpp_parser_print_expanded_token_list (parser, (yyvsp[(1) - (1)].token_list)); - ralloc_strcat (&parser->output, "\n"); + ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); ralloc_free ((yyvsp[(1) - (1)].token_list)); ;} break; case 8: -#line 200 "src/glsl/glcpp/glcpp-parse.y" +#line 203 "src/glsl/glcpp/glcpp-parse.y" { _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (3)]), (yyvsp[(2) - (3)].ival)); ;} break; case 9: -#line 203 "src/glsl/glcpp/glcpp-parse.y" +#line 206 "src/glsl/glcpp/glcpp-parse.y" { _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (3)]), "elif", (yyvsp[(2) - (3)].ival)); ;} @@ -1836,26 +1869,52 @@ yyreduce: case 10: #line 209 "src/glsl/glcpp/glcpp-parse.y" { - _define_object_macro (parser, & (yylsp[(2) - (4)]), (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].token_list)); + parser->has_new_line_number = 1; + parser->new_line_number = (yyvsp[(2) - (3)].ival); + ralloc_asprintf_rewrite_tail (&parser->output, + &parser->output_length, + "#line %" PRIiMAX "\n", + (yyvsp[(2) - (3)].ival)); ;} break; case 11: -#line 212 "src/glsl/glcpp/glcpp-parse.y" +#line 217 "src/glsl/glcpp/glcpp-parse.y" + { + parser->has_new_line_number = 1; + parser->new_line_number = (yyvsp[(2) - (4)].ival); + parser->has_new_source_number = 1; + parser->new_source_number = (yyvsp[(3) - (4)].ival); + ralloc_asprintf_rewrite_tail (&parser->output, + &parser->output_length, + "#line %" PRIiMAX " %" PRIiMAX "\n", + (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].ival)); + ;} + break; + + case 12: +#line 230 "src/glsl/glcpp/glcpp-parse.y" + { + _define_object_macro (parser, & (yylsp[(2) - (4)]), (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].token_list)); + ;} + break; + + case 13: +#line 233 "src/glsl/glcpp/glcpp-parse.y" { _define_function_macro (parser, & (yylsp[(2) - (6)]), (yyvsp[(2) - (6)].str), NULL, (yyvsp[(5) - (6)].token_list)); ;} break; - case 12: -#line 215 "src/glsl/glcpp/glcpp-parse.y" + case 14: +#line 236 "src/glsl/glcpp/glcpp-parse.y" { _define_function_macro (parser, & (yylsp[(2) - (7)]), (yyvsp[(2) - (7)].str), (yyvsp[(4) - (7)].string_list), (yyvsp[(6) - (7)].token_list)); ;} break; - case 13: -#line 218 "src/glsl/glcpp/glcpp-parse.y" + case 15: +#line 239 "src/glsl/glcpp/glcpp-parse.y" { macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (3)].str)); if (macro) { @@ -1866,8 +1925,20 @@ yyreduce: ;} break; - case 14: -#line 226 "src/glsl/glcpp/glcpp-parse.y" + case 16: +#line 247 "src/glsl/glcpp/glcpp-parse.y" + { + if (parser->skip_stack == NULL || + parser->skip_stack->type == SKIP_NO_SKIP) + { + _glcpp_parser_expand_and_lex_from (parser, + LINE_EXPANDED, (yyvsp[(2) - (3)].token_list)); + } + ;} + break; + + case 17: +#line 255 "src/glsl/glcpp/glcpp-parse.y" { /* Be careful to only evaluate the 'if' expression if * we are not skipping. When we are skipping, we @@ -1879,7 +1950,8 @@ yyreduce: if (parser->skip_stack == NULL || parser->skip_stack->type == SKIP_NO_SKIP) { - _glcpp_parser_expand_if (parser, IF_EXPANDED, (yyvsp[(2) - (3)].token_list)); + _glcpp_parser_expand_and_lex_from (parser, + IF_EXPANDED, (yyvsp[(2) - (3)].token_list)); } else { @@ -1889,8 +1961,8 @@ yyreduce: ;} break; - case 15: -#line 245 "src/glsl/glcpp/glcpp-parse.y" + case 18: +#line 275 "src/glsl/glcpp/glcpp-parse.y" { /* #if without an expression is only an error if we * are not skipping */ @@ -1903,8 +1975,8 @@ yyreduce: ;} break; - case 16: -#line 255 "src/glsl/glcpp/glcpp-parse.y" + case 19: +#line 285 "src/glsl/glcpp/glcpp-parse.y" { macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str)); ralloc_free ((yyvsp[(2) - (4)].str)); @@ -1912,8 +1984,8 @@ yyreduce: ;} break; - case 17: -#line 260 "src/glsl/glcpp/glcpp-parse.y" + case 20: +#line 290 "src/glsl/glcpp/glcpp-parse.y" { macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str)); ralloc_free ((yyvsp[(2) - (4)].str)); @@ -1921,8 +1993,8 @@ yyreduce: ;} break; - case 18: -#line 265 "src/glsl/glcpp/glcpp-parse.y" + case 21: +#line 295 "src/glsl/glcpp/glcpp-parse.y" { /* Be careful to only evaluate the 'elif' expression * if we are not skipping. When we are skipping, we @@ -1934,7 +2006,8 @@ yyreduce: if (parser->skip_stack && parser->skip_stack->type == SKIP_TO_ELSE) { - _glcpp_parser_expand_if (parser, ELIF_EXPANDED, (yyvsp[(2) - (3)].token_list)); + _glcpp_parser_expand_and_lex_from (parser, + ELIF_EXPANDED, (yyvsp[(2) - (3)].token_list)); } else { @@ -1944,8 +2017,8 @@ yyreduce: ;} break; - case 19: -#line 284 "src/glsl/glcpp/glcpp-parse.y" + case 22: +#line 315 "src/glsl/glcpp/glcpp-parse.y" { /* #elif without an expression is an error unless we * are skipping. */ @@ -1963,22 +2036,22 @@ yyreduce: ;} break; - case 20: -#line 299 "src/glsl/glcpp/glcpp-parse.y" + case 23: +#line 330 "src/glsl/glcpp/glcpp-parse.y" { _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (2)]), "else", 1); ;} break; - case 21: -#line 302 "src/glsl/glcpp/glcpp-parse.y" + case 24: +#line 333 "src/glsl/glcpp/glcpp-parse.y" { _glcpp_parser_skip_stack_pop (parser, & (yylsp[(1) - (2)])); ;} break; - case 22: -#line 305 "src/glsl/glcpp/glcpp-parse.y" + case 25: +#line 336 "src/glsl/glcpp/glcpp-parse.y" { macro_t *macro = hash_table_find (parser->defines, "__VERSION__"); if (macro) { @@ -1998,12 +2071,12 @@ yyreduce: if ((yyvsp[(2) - (3)].ival) >= 130 || (yyvsp[(2) - (3)].ival) == 100) add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); - ralloc_asprintf_append (&parser->output, "#version %" PRIiMAX, (yyvsp[(2) - (3)].ival)); + ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "#version %" PRIiMAX, (yyvsp[(2) - (3)].ival)); ;} break; - case 24: -#line 330 "src/glsl/glcpp/glcpp-parse.y" + case 27: +#line 361 "src/glsl/glcpp/glcpp-parse.y" { if (strlen ((yyvsp[(1) - (1)].str)) >= 3 && strncmp ((yyvsp[(1) - (1)].str), "0x", 2) == 0) { (yyval.ival) = strtoll ((yyvsp[(1) - (1)].str) + 2, NULL, 16); @@ -2015,120 +2088,127 @@ yyreduce: ;} break; - case 25: -#line 339 "src/glsl/glcpp/glcpp-parse.y" + case 28: +#line 370 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (1)].ival); ;} break; - case 27: -#line 345 "src/glsl/glcpp/glcpp-parse.y" + case 30: +#line 376 "src/glsl/glcpp/glcpp-parse.y" + { + (yyval.ival) = 0; + ;} + break; + + case 31: +#line 379 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) || (yyvsp[(3) - (3)].ival); ;} break; - case 28: -#line 348 "src/glsl/glcpp/glcpp-parse.y" + case 32: +#line 382 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) && (yyvsp[(3) - (3)].ival); ;} break; - case 29: -#line 351 "src/glsl/glcpp/glcpp-parse.y" + case 33: +#line 385 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival); ;} break; - case 30: -#line 354 "src/glsl/glcpp/glcpp-parse.y" + case 34: +#line 388 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) ^ (yyvsp[(3) - (3)].ival); ;} break; - case 31: -#line 357 "src/glsl/glcpp/glcpp-parse.y" + case 35: +#line 391 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) & (yyvsp[(3) - (3)].ival); ;} break; - case 32: -#line 360 "src/glsl/glcpp/glcpp-parse.y" + case 36: +#line 394 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) != (yyvsp[(3) - (3)].ival); ;} break; - case 33: -#line 363 "src/glsl/glcpp/glcpp-parse.y" + case 37: +#line 397 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) == (yyvsp[(3) - (3)].ival); ;} break; - case 34: -#line 366 "src/glsl/glcpp/glcpp-parse.y" + case 38: +#line 400 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) >= (yyvsp[(3) - (3)].ival); ;} break; - case 35: -#line 369 "src/glsl/glcpp/glcpp-parse.y" + case 39: +#line 403 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) <= (yyvsp[(3) - (3)].ival); ;} break; - case 36: -#line 372 "src/glsl/glcpp/glcpp-parse.y" + case 40: +#line 406 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) > (yyvsp[(3) - (3)].ival); ;} break; - case 37: -#line 375 "src/glsl/glcpp/glcpp-parse.y" + case 41: +#line 409 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) < (yyvsp[(3) - (3)].ival); ;} break; - case 38: -#line 378 "src/glsl/glcpp/glcpp-parse.y" + case 42: +#line 412 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) >> (yyvsp[(3) - (3)].ival); ;} break; - case 39: -#line 381 "src/glsl/glcpp/glcpp-parse.y" + case 43: +#line 415 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) << (yyvsp[(3) - (3)].ival); ;} break; - case 40: -#line 384 "src/glsl/glcpp/glcpp-parse.y" + case 44: +#line 418 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) - (yyvsp[(3) - (3)].ival); ;} break; - case 41: -#line 387 "src/glsl/glcpp/glcpp-parse.y" + case 45: +#line 421 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) + (yyvsp[(3) - (3)].ival); ;} break; - case 42: -#line 390 "src/glsl/glcpp/glcpp-parse.y" + case 46: +#line 424 "src/glsl/glcpp/glcpp-parse.y" { if ((yyvsp[(3) - (3)].ival) == 0) { yyerror (& (yylsp[(1) - (3)]), parser, @@ -2139,8 +2219,8 @@ yyreduce: ;} break; - case 43: -#line 398 "src/glsl/glcpp/glcpp-parse.y" + case 47: +#line 432 "src/glsl/glcpp/glcpp-parse.y" { if ((yyvsp[(3) - (3)].ival) == 0) { yyerror (& (yylsp[(1) - (3)]), parser, @@ -2151,50 +2231,50 @@ yyreduce: ;} break; - case 44: -#line 406 "src/glsl/glcpp/glcpp-parse.y" + case 48: +#line 440 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) * (yyvsp[(3) - (3)].ival); ;} break; - case 45: -#line 409 "src/glsl/glcpp/glcpp-parse.y" + case 49: +#line 443 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = ! (yyvsp[(2) - (2)].ival); ;} break; - case 46: -#line 412 "src/glsl/glcpp/glcpp-parse.y" + case 50: +#line 446 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = ~ (yyvsp[(2) - (2)].ival); ;} break; - case 47: -#line 415 "src/glsl/glcpp/glcpp-parse.y" + case 51: +#line 449 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = - (yyvsp[(2) - (2)].ival); ;} break; - case 48: -#line 418 "src/glsl/glcpp/glcpp-parse.y" + case 52: +#line 452 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = + (yyvsp[(2) - (2)].ival); ;} break; - case 49: -#line 421 "src/glsl/glcpp/glcpp-parse.y" + case 53: +#line 455 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = (yyvsp[(2) - (3)].ival); ;} break; - case 50: -#line 427 "src/glsl/glcpp/glcpp-parse.y" + case 54: +#line 461 "src/glsl/glcpp/glcpp-parse.y" { (yyval.string_list) = _string_list_create (parser); _string_list_append_item ((yyval.string_list), (yyvsp[(1) - (1)].str)); @@ -2202,8 +2282,8 @@ yyreduce: ;} break; - case 51: -#line 432 "src/glsl/glcpp/glcpp-parse.y" + case 55: +#line 466 "src/glsl/glcpp/glcpp-parse.y" { (yyval.string_list) = (yyvsp[(1) - (3)].string_list); _string_list_append_item ((yyval.string_list), (yyvsp[(3) - (3)].str)); @@ -2211,64 +2291,64 @@ yyreduce: ;} break; - case 52: -#line 440 "src/glsl/glcpp/glcpp-parse.y" + case 56: +#line 474 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token_list) = NULL; ;} break; - case 54: -#line 445 "src/glsl/glcpp/glcpp-parse.y" + case 58: +#line 479 "src/glsl/glcpp/glcpp-parse.y" { yyerror (& (yylsp[(1) - (2)]), parser, "Invalid tokens after #"); ;} break; - case 55: -#line 451 "src/glsl/glcpp/glcpp-parse.y" + case 59: +#line 485 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token_list) = NULL; ;} break; - case 58: -#line 457 "src/glsl/glcpp/glcpp-parse.y" + case 62: +#line 491 "src/glsl/glcpp/glcpp-parse.y" { glcpp_warning(&(yylsp[(1) - (1)]), parser, "extra tokens at end of directive"); ;} break; - case 59: -#line 464 "src/glsl/glcpp/glcpp-parse.y" + case 63: +#line 498 "src/glsl/glcpp/glcpp-parse.y" { int v = hash_table_find (parser->defines, (yyvsp[(2) - (2)].str)) ? 1 : 0; (yyval.token) = _token_create_ival (parser, INTEGER, v); ;} break; - case 60: -#line 468 "src/glsl/glcpp/glcpp-parse.y" + case 64: +#line 502 "src/glsl/glcpp/glcpp-parse.y" { int v = hash_table_find (parser->defines, (yyvsp[(3) - (4)].str)) ? 1 : 0; (yyval.token) = _token_create_ival (parser, INTEGER, v); ;} break; - case 62: -#line 477 "src/glsl/glcpp/glcpp-parse.y" + case 66: +#line 511 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token_list) = _token_list_create (parser); _token_list_append ((yyval.token_list), (yyvsp[(1) - (1)].token)); ;} break; - case 63: -#line 481 "src/glsl/glcpp/glcpp-parse.y" + case 67: +#line 515 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token_list) = (yyvsp[(1) - (2)].token_list); _token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token)); ;} break; - case 64: -#line 488 "src/glsl/glcpp/glcpp-parse.y" + case 68: +#line 522 "src/glsl/glcpp/glcpp-parse.y" { parser->space_tokens = 1; (yyval.token_list) = _token_list_create (parser); @@ -2276,212 +2356,212 @@ yyreduce: ;} break; - case 65: -#line 493 "src/glsl/glcpp/glcpp-parse.y" + case 69: +#line 527 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token_list) = (yyvsp[(1) - (2)].token_list); _token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token)); ;} break; - case 66: -#line 500 "src/glsl/glcpp/glcpp-parse.y" + case 70: +#line 534 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token) = _token_create_str (parser, IDENTIFIER, (yyvsp[(1) - (1)].str)); (yyval.token)->location = yylloc; ;} break; - case 67: -#line 504 "src/glsl/glcpp/glcpp-parse.y" + case 71: +#line 538 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token) = _token_create_str (parser, INTEGER_STRING, (yyvsp[(1) - (1)].str)); (yyval.token)->location = yylloc; ;} break; - case 68: -#line 508 "src/glsl/glcpp/glcpp-parse.y" + case 72: +#line 542 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token) = _token_create_ival (parser, (yyvsp[(1) - (1)].ival), (yyvsp[(1) - (1)].ival)); (yyval.token)->location = yylloc; ;} break; - case 69: -#line 512 "src/glsl/glcpp/glcpp-parse.y" + case 73: +#line 546 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token) = _token_create_str (parser, OTHER, (yyvsp[(1) - (1)].str)); (yyval.token)->location = yylloc; ;} break; - case 70: -#line 516 "src/glsl/glcpp/glcpp-parse.y" + case 74: +#line 550 "src/glsl/glcpp/glcpp-parse.y" { (yyval.token) = _token_create_ival (parser, SPACE, SPACE); (yyval.token)->location = yylloc; ;} break; - case 71: -#line 523 "src/glsl/glcpp/glcpp-parse.y" + case 75: +#line 557 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '['; ;} break; - case 72: -#line 524 "src/glsl/glcpp/glcpp-parse.y" + case 76: +#line 558 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = ']'; ;} break; - case 73: -#line 525 "src/glsl/glcpp/glcpp-parse.y" + case 77: +#line 559 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '('; ;} break; - case 74: -#line 526 "src/glsl/glcpp/glcpp-parse.y" + case 78: +#line 560 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = ')'; ;} break; - case 75: -#line 527 "src/glsl/glcpp/glcpp-parse.y" + case 79: +#line 561 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '{'; ;} break; - case 76: -#line 528 "src/glsl/glcpp/glcpp-parse.y" + case 80: +#line 562 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '}'; ;} break; - case 77: -#line 529 "src/glsl/glcpp/glcpp-parse.y" + case 81: +#line 563 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '.'; ;} break; - case 78: -#line 530 "src/glsl/glcpp/glcpp-parse.y" + case 82: +#line 564 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '&'; ;} break; - case 79: -#line 531 "src/glsl/glcpp/glcpp-parse.y" + case 83: +#line 565 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '*'; ;} break; - case 80: -#line 532 "src/glsl/glcpp/glcpp-parse.y" + case 84: +#line 566 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '+'; ;} break; - case 81: -#line 533 "src/glsl/glcpp/glcpp-parse.y" + case 85: +#line 567 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '-'; ;} break; - case 82: -#line 534 "src/glsl/glcpp/glcpp-parse.y" + case 86: +#line 568 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '~'; ;} break; - case 83: -#line 535 "src/glsl/glcpp/glcpp-parse.y" + case 87: +#line 569 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '!'; ;} break; - case 84: -#line 536 "src/glsl/glcpp/glcpp-parse.y" + case 88: +#line 570 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '/'; ;} break; - case 85: -#line 537 "src/glsl/glcpp/glcpp-parse.y" + case 89: +#line 571 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '%'; ;} break; - case 86: -#line 538 "src/glsl/glcpp/glcpp-parse.y" + case 90: +#line 572 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = LEFT_SHIFT; ;} break; - case 87: -#line 539 "src/glsl/glcpp/glcpp-parse.y" + case 91: +#line 573 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = RIGHT_SHIFT; ;} break; - case 88: -#line 540 "src/glsl/glcpp/glcpp-parse.y" + case 92: +#line 574 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '<'; ;} break; - case 89: -#line 541 "src/glsl/glcpp/glcpp-parse.y" + case 93: +#line 575 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '>'; ;} break; - case 90: -#line 542 "src/glsl/glcpp/glcpp-parse.y" + case 94: +#line 576 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = LESS_OR_EQUAL; ;} break; - case 91: -#line 543 "src/glsl/glcpp/glcpp-parse.y" + case 95: +#line 577 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = GREATER_OR_EQUAL; ;} break; - case 92: -#line 544 "src/glsl/glcpp/glcpp-parse.y" + case 96: +#line 578 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = EQUAL; ;} break; - case 93: -#line 545 "src/glsl/glcpp/glcpp-parse.y" + case 97: +#line 579 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = NOT_EQUAL; ;} break; - case 94: -#line 546 "src/glsl/glcpp/glcpp-parse.y" + case 98: +#line 580 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '^'; ;} break; - case 95: -#line 547 "src/glsl/glcpp/glcpp-parse.y" + case 99: +#line 581 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '|'; ;} break; - case 96: -#line 548 "src/glsl/glcpp/glcpp-parse.y" + case 100: +#line 582 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = AND; ;} break; - case 97: -#line 549 "src/glsl/glcpp/glcpp-parse.y" + case 101: +#line 583 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = OR; ;} break; - case 98: -#line 550 "src/glsl/glcpp/glcpp-parse.y" + case 102: +#line 584 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = ';'; ;} break; - case 99: -#line 551 "src/glsl/glcpp/glcpp-parse.y" + case 103: +#line 585 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = ','; ;} break; - case 100: -#line 552 "src/glsl/glcpp/glcpp-parse.y" + case 104: +#line 586 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = '='; ;} break; - case 101: -#line 553 "src/glsl/glcpp/glcpp-parse.y" + case 105: +#line 587 "src/glsl/glcpp/glcpp-parse.y" { (yyval.ival) = PASTE; ;} break; /* Line 1267 of yacc.c. */ -#line 2485 "src/glsl/glcpp/glcpp-parse.c" +#line 2565 "src/glsl/glcpp/glcpp-parse.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2701,7 +2781,7 @@ yyreturn: } -#line 556 "src/glsl/glcpp/glcpp-parse.y" +#line 590 "src/glsl/glcpp/glcpp-parse.y" string_list_t * @@ -2912,8 +2992,6 @@ _token_list_append (token_list_t *list, token_t *token) node->token = token; node->next = NULL; - ralloc_steal (list, token); - if (list->head == NULL) { list->head = node; } else { @@ -3055,54 +3133,54 @@ _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b) } static void -_token_print (char **out, token_t *token) +_token_print (char **out, size_t *len, token_t *token) { if (token->type < 256) { - ralloc_asprintf_append (out, "%c", token->type); + ralloc_asprintf_rewrite_tail (out, len, "%c", token->type); return; } switch (token->type) { case INTEGER: - ralloc_asprintf_append (out, "%" PRIiMAX, token->value.ival); + ralloc_asprintf_rewrite_tail (out, len, "%" PRIiMAX, token->value.ival); break; case IDENTIFIER: case INTEGER_STRING: case OTHER: - ralloc_strcat (out, token->value.str); + ralloc_asprintf_rewrite_tail (out, len, "%s", token->value.str); break; case SPACE: - ralloc_strcat (out, " "); + ralloc_asprintf_rewrite_tail (out, len, " "); break; case LEFT_SHIFT: - ralloc_strcat (out, "<<"); + ralloc_asprintf_rewrite_tail (out, len, "<<"); break; case RIGHT_SHIFT: - ralloc_strcat (out, ">>"); + ralloc_asprintf_rewrite_tail (out, len, ">>"); break; case LESS_OR_EQUAL: - ralloc_strcat (out, "<="); + ralloc_asprintf_rewrite_tail (out, len, "<="); break; case GREATER_OR_EQUAL: - ralloc_strcat (out, ">="); + ralloc_asprintf_rewrite_tail (out, len, ">="); break; case EQUAL: - ralloc_strcat (out, "=="); + ralloc_asprintf_rewrite_tail (out, len, "=="); break; case NOT_EQUAL: - ralloc_strcat (out, "!="); + ralloc_asprintf_rewrite_tail (out, len, "!="); break; case AND: - ralloc_strcat (out, "&&"); + ralloc_asprintf_rewrite_tail (out, len, "&&"); break; case OR: - ralloc_strcat (out, "||"); + ralloc_asprintf_rewrite_tail (out, len, "||"); break; case PASTE: - ralloc_strcat (out, "##"); + ralloc_asprintf_rewrite_tail (out, len, "##"); break; case COMMA_FINAL: - ralloc_strcat (out, ","); + ralloc_asprintf_rewrite_tail (out, len, ","); break; case PLACEHOLDER: /* Nothing to print. */ @@ -3192,11 +3270,11 @@ _token_paste (glcpp_parser_t *parser, token_t *token, token_t *other) } glcpp_error (&token->location, parser, ""); - ralloc_strcat (&parser->info_log, "Pasting \""); - _token_print (&parser->info_log, token); - ralloc_strcat (&parser->info_log, "\" and \""); - _token_print (&parser->info_log, other); - ralloc_strcat (&parser->info_log, "\" does not give a valid preprocessing token.\n"); + ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "Pasting \""); + _token_print (&parser->info_log, &parser->info_log_length, token); + ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "\" and \""); + _token_print (&parser->info_log, &parser->info_log_length, other); + ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "\" does not give a valid preprocessing token.\n"); return token; } @@ -3210,7 +3288,7 @@ _token_list_print (glcpp_parser_t *parser, token_list_t *list) return; for (node = list->head; node; node = node->next) - _token_print (&parser->output, node->token); + _token_print (&parser->output, &parser->output_length, node->token); } void @@ -3256,9 +3334,16 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) parser->lex_from_node = NULL; parser->output = ralloc_strdup(parser, ""); + parser->output_length = 0; parser->info_log = ralloc_strdup(parser, ""); + parser->info_log_length = 0; parser->error = 0; + parser->has_new_line_number = 0; + parser->new_line_number = 1; + parser->has_new_source_number = 0; + parser->new_source_number = 0; + /* Add pre-defined macros. */ add_builtin_define(parser, "GL_ARB_draw_buffers", 1); add_builtin_define(parser, "GL_ARB_texture_rectangle", 1); @@ -3277,8 +3362,26 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) if (extensions->ARB_explicit_attrib_location) add_builtin_define(parser, "GL_ARB_explicit_attrib_location", 1); - if (extensions->AMD_conservative_depth) + + if (extensions->ARB_shader_texture_lod) + add_builtin_define(parser, "GL_ARB_shader_texture_lod", 1); + + if (extensions->ARB_draw_instanced) + add_builtin_define(parser, "GL_ARB_draw_instanced", 1); + + if (extensions->ARB_conservative_depth) { add_builtin_define(parser, "GL_AMD_conservative_depth", 1); + add_builtin_define(parser, "GL_ARB_conservative_depth", 1); + } + + if (extensions->OES_EGL_image_external) + add_builtin_define(parser, "GL_OES_EGL_image_external", 1); + + if (extensions->ARB_shader_bit_encoding) + add_builtin_define(parser, "GL_ARB_shader_bit_encoding", 1); + + if (extensions->ARB_uniform_buffer_object) + add_builtin_define(parser, "GL_ARB_uniform_buffer_object", 1); } language_version = 110; @@ -3287,12 +3390,6 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) return parser; } -int -glcpp_parser_parse (glcpp_parser_t *parser) -{ - return yyparse (parser); -} - void glcpp_parser_destroy (glcpp_parser_t *parser) { @@ -3404,20 +3501,69 @@ _token_list_create_with_one_space (void *ctx) return list; } +/* Perform macro expansion on 'list', placing the resulting tokens + * into a new list which is initialized with a first token of type + * 'head_token_type'. Then begin lexing from the resulting list, + * (return to the current lexing source when this list is exhausted). + */ static void -_glcpp_parser_expand_if (glcpp_parser_t *parser, int type, token_list_t *list) +_glcpp_parser_expand_and_lex_from (glcpp_parser_t *parser, + int head_token_type, + token_list_t *list) { token_list_t *expanded; token_t *token; expanded = _token_list_create (parser); - token = _token_create_ival (parser, type, type); + token = _token_create_ival (parser, head_token_type, head_token_type); _token_list_append (expanded, token); _glcpp_parser_expand_token_list (parser, list); _token_list_append_list (expanded, list); glcpp_parser_lex_from (parser, expanded); } +static void +_glcpp_parser_apply_pastes (glcpp_parser_t *parser, token_list_t *list) +{ + token_node_t *node; + + node = list->head; + while (node) + { + token_node_t *next_non_space; + + /* Look ahead for a PASTE token, skipping space. */ + next_non_space = node->next; + while (next_non_space && next_non_space->token->type == SPACE) + next_non_space = next_non_space->next; + + if (next_non_space == NULL) + break; + + if (next_non_space->token->type != PASTE) { + node = next_non_space; + continue; + } + + /* Now find the next non-space token after the PASTE. */ + next_non_space = next_non_space->next; + while (next_non_space && next_non_space->token->type == SPACE) + next_non_space = next_non_space->next; + + if (next_non_space == NULL) { + yyerror (&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); + return; + } + + node->token = _token_paste (parser, node->token, next_non_space->token); + node->next = next_non_space->next; + if (next_non_space == list->tail) + list->tail = node; + } + + list->non_space_tail = list->tail; +} + /* This is a helper function that's essentially part of the * implementation of _glcpp_parser_expand_node. It shouldn't be called * except for by that function. @@ -3529,43 +3675,7 @@ _glcpp_parser_expand_function (glcpp_parser_t *parser, _token_list_trim_trailing_space (substituted); - node = substituted->head; - while (node) - { - token_node_t *next_non_space; - - /* Look ahead for a PASTE token, skipping space. */ - next_non_space = node->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) - break; - - if (next_non_space->token->type != PASTE) { - node = next_non_space; - continue; - } - - /* Now find the next non-space token after the PASTE. */ - next_non_space = next_non_space->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) { - yyerror (&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); - return NULL; - } - - node->token = _token_paste (parser, node->token, next_non_space->token); - node->next = next_non_space->next; - if (next_non_space == substituted->tail) - substituted->tail = node; - - node = node->next; - } - - substituted->non_space_tail = substituted->tail; + _glcpp_parser_apply_pastes (parser, substituted); return substituted; } @@ -3617,7 +3727,7 @@ _glcpp_parser_expand_node (glcpp_parser_t *parser, /* Finally, don't expand this macro if we're already actively * expanding it, (to avoid infinite recursion). */ - if (_active_list_contains (parser->active, identifier)) { + if (_parser_active_list_contains (parser, identifier)) { /* We change the token type here from IDENTIFIER to * OTHER to prevent any future expansion of this * unexpanded token. */ @@ -3635,63 +3745,68 @@ _glcpp_parser_expand_node (glcpp_parser_t *parser, if (! macro->is_function) { + token_list_t *replacement; *last = node; /* Replace a macro defined as empty with a SPACE token. */ if (macro->replacements == NULL) return _token_list_create_with_one_space (parser); - return _token_list_copy (parser, macro->replacements); + replacement = _token_list_copy (parser, macro->replacements); + _glcpp_parser_apply_pastes (parser, replacement); + return replacement; } return _glcpp_parser_expand_function (parser, node, last); } -/* Push a new identifier onto the active list, returning the new list. +/* Push a new identifier onto the parser's active list. * * Here, 'marker' is the token node that appears in the list after the * expansion of 'identifier'. That is, when the list iterator begins - * examinging 'marker', then it is time to pop this node from the + * examining 'marker', then it is time to pop this node from the * active stack. */ -active_list_t * -_active_list_push (active_list_t *list, - const char *identifier, - token_node_t *marker) +static void +_parser_active_list_push (glcpp_parser_t *parser, + const char *identifier, + token_node_t *marker) { active_list_t *node; - node = ralloc (list, active_list_t); + node = ralloc (parser->active, active_list_t); node->identifier = ralloc_strdup (node, identifier); node->marker = marker; - node->next = list; + node->next = parser->active; - return node; + parser->active = node; } -active_list_t * -_active_list_pop (active_list_t *list) +static void +_parser_active_list_pop (glcpp_parser_t *parser) { - active_list_t *node = list; + active_list_t *node = parser->active; - if (node == NULL) - return NULL; + if (node == NULL) { + parser->active = NULL; + return; + } - node = list->next; - ralloc_free (list); + node = parser->active->next; + ralloc_free (parser->active); - return node; + parser->active = node; } -int -_active_list_contains (active_list_t *list, const char *identifier) +static int +_parser_active_list_contains (glcpp_parser_t *parser, const char *identifier) { active_list_t *node; - if (list == NULL) + if (parser->active == NULL) return 0; - for (node = list; node; node = node->next) + for (node = parser->active; node; node = node->next) if (strcmp (node->identifier, identifier) == 0) return 1; @@ -3710,6 +3825,7 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser, token_node_t *node_prev; token_node_t *node, *last = NULL; token_list_t *expansion; + active_list_t *active_initial = parser->active; if (list == NULL) return; @@ -3722,10 +3838,8 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser, while (node) { while (parser->active && parser->active->marker == node) - parser->active = _active_list_pop (parser->active); + _parser_active_list_pop (parser); - /* Find the expansion for node, which will replace all - * nodes from node to last, inclusive. */ expansion = _glcpp_parser_expand_node (parser, node, &last); if (expansion) { token_node_t *n; @@ -3734,12 +3848,12 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser, while (parser->active && parser->active->marker == n) { - parser->active = _active_list_pop (parser->active); + _parser_active_list_pop (parser); } - parser->active = _active_list_push (parser->active, - node->token->value.str, - last->next); + _parser_active_list_push (parser, + node->token->value.str, + last->next); /* Splice expansion into list, supporting a * simple deletion if the expansion is @@ -3766,8 +3880,11 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser, node = node_prev ? node_prev->next : list->head; } - while (parser->active) - parser->active = _active_list_pop (parser->active); + /* Remove any lingering effects of this invocation on the + * active list. That is, pop until the list looks like it did + * at the beginning of this function. */ + while (parser->active && parser->active != active_initial) + _parser_active_list_pop (parser); list->non_space_tail = list->tail; } @@ -3793,8 +3910,8 @@ _check_for_reserved_macro_name (glcpp_parser_t *parser, YYLTYPE *loc, /* According to the GLSL specification, macro names starting with "__" * or "GL_" are reserved for future use. So, don't allow them. */ - if (strncmp(identifier, "__", 2) == 0) { - glcpp_error (loc, parser, "Macro names starting with \"__\" are reserved.\n"); + if (strstr(identifier, "__")) { + glcpp_error (loc, parser, "Macro names containing \"__\" are reserved.\n"); } if (strncmp(identifier, "GL_", 3) == 0) { glcpp_error (loc, parser, "Macro names starting with \"GL_\" are reserved.\n"); diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.h b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.h index 05f8a7bff..2727a111f 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.h +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.h @@ -51,26 +51,28 @@ HASH_IF = 267, HASH_IFDEF = 268, HASH_IFNDEF = 269, - HASH_UNDEF = 270, - HASH_VERSION = 271, - IDENTIFIER = 272, - IF_EXPANDED = 273, - INTEGER = 274, - INTEGER_STRING = 275, - NEWLINE = 276, - OTHER = 277, - PLACEHOLDER = 278, - SPACE = 279, - PASTE = 280, - OR = 281, - AND = 282, - NOT_EQUAL = 283, - EQUAL = 284, - GREATER_OR_EQUAL = 285, - LESS_OR_EQUAL = 286, - RIGHT_SHIFT = 287, - LEFT_SHIFT = 288, - UNARY = 289 + HASH_LINE = 270, + HASH_UNDEF = 271, + HASH_VERSION = 272, + IDENTIFIER = 273, + IF_EXPANDED = 274, + INTEGER = 275, + INTEGER_STRING = 276, + LINE_EXPANDED = 277, + NEWLINE = 278, + OTHER = 279, + PLACEHOLDER = 280, + SPACE = 281, + PASTE = 282, + OR = 283, + AND = 284, + NOT_EQUAL = 285, + EQUAL = 286, + GREATER_OR_EQUAL = 287, + LESS_OR_EQUAL = 288, + RIGHT_SHIFT = 289, + LEFT_SHIFT = 290, + UNARY = 291 }; #endif /* Tokens. */ @@ -86,26 +88,28 @@ #define HASH_IF 267 #define HASH_IFDEF 268 #define HASH_IFNDEF 269 -#define HASH_UNDEF 270 -#define HASH_VERSION 271 -#define IDENTIFIER 272 -#define IF_EXPANDED 273 -#define INTEGER 274 -#define INTEGER_STRING 275 -#define NEWLINE 276 -#define OTHER 277 -#define PLACEHOLDER 278 -#define SPACE 279 -#define PASTE 280 -#define OR 281 -#define AND 282 -#define NOT_EQUAL 283 -#define EQUAL 284 -#define GREATER_OR_EQUAL 285 -#define LESS_OR_EQUAL 286 -#define RIGHT_SHIFT 287 -#define LEFT_SHIFT 288 -#define UNARY 289 +#define HASH_LINE 270 +#define HASH_UNDEF 271 +#define HASH_VERSION 272 +#define IDENTIFIER 273 +#define IF_EXPANDED 274 +#define INTEGER 275 +#define INTEGER_STRING 276 +#define LINE_EXPANDED 277 +#define NEWLINE 278 +#define OTHER 279 +#define PLACEHOLDER 280 +#define SPACE 281 +#define PASTE 282 +#define OR 283 +#define AND 284 +#define NOT_EQUAL 285 +#define EQUAL 286 +#define GREATER_OR_EQUAL 287 +#define LESS_OR_EQUAL 288 +#define RIGHT_SHIFT 289 +#define LEFT_SHIFT 290 +#define UNARY 291 diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.y b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.y index 0a35e88ce..fb9bc588e 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.y +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp-parse.y @@ -85,7 +85,6 @@ _token_create_ival (void *ctx, int type, int ival); static token_list_t * _token_list_create (void *ctx); -/* Note: This function calls ralloc_steal on token. */ static void _token_list_append (token_list_t *list, token_t *token); @@ -106,9 +105,15 @@ _parser_active_list_pop (glcpp_parser_t *parser); static int _parser_active_list_contains (glcpp_parser_t *parser, const char *identifier); +/* Expand list, and begin lexing from the result (after first + * prefixing a token of type 'head_token_type'). + */ static void -_glcpp_parser_expand_if (glcpp_parser_t *parser, int type, token_list_t *list); +_glcpp_parser_expand_and_lex_from (glcpp_parser_t *parser, + int head_token_type, + token_list_t *list); +/* Perform macro expansion in-place on the given list. */ static void _glcpp_parser_expand_token_list (glcpp_parser_t *parser, token_list_t *list); @@ -128,8 +133,6 @@ _glcpp_parser_skip_stack_change_if (glcpp_parser_t *parser, YYLTYPE *loc, static void _glcpp_parser_skip_stack_pop (glcpp_parser_t *parser, YYLTYPE *loc); -#define yylex glcpp_parser_lex - static int glcpp_parser_lex (YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser); @@ -157,7 +160,7 @@ add_builtin_define(glcpp_parser_t *parser, const char *name, int value); %lex-param {glcpp_parser_t *parser} %expect 0 -%token COMMA_FINAL DEFINED ELIF_EXPANDED HASH HASH_DEFINE_FUNC HASH_DEFINE_OBJ HASH_ELIF HASH_ELSE HASH_ENDIF HASH_IF HASH_IFDEF HASH_IFNDEF HASH_UNDEF HASH_VERSION IDENTIFIER IF_EXPANDED INTEGER INTEGER_STRING NEWLINE OTHER PLACEHOLDER SPACE +%token COMMA_FINAL DEFINED ELIF_EXPANDED HASH HASH_DEFINE_FUNC HASH_DEFINE_OBJ HASH_ELIF HASH_ELSE HASH_ENDIF HASH_IF HASH_IFDEF HASH_IFNDEF HASH_LINE HASH_UNDEF HASH_VERSION IDENTIFIER IF_EXPANDED INTEGER INTEGER_STRING LINE_EXPANDED NEWLINE OTHER PLACEHOLDER SPACE %token PASTE %type expression INTEGER operator SPACE integer_constant %type IDENTIFIER INTEGER_STRING OTHER @@ -185,11 +188,11 @@ input: line: control_line { - ralloc_strcat (&parser->output, "\n"); + ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); } | text_line { _glcpp_parser_print_expanded_token_list (parser, $1); - ralloc_strcat (&parser->output, "\n"); + ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); ralloc_free ($1); } | expanded_line @@ -203,6 +206,24 @@ expanded_line: | ELIF_EXPANDED expression NEWLINE { _glcpp_parser_skip_stack_change_if (parser, & @1, "elif", $2); } +| LINE_EXPANDED integer_constant NEWLINE { + parser->has_new_line_number = 1; + parser->new_line_number = $2; + ralloc_asprintf_rewrite_tail (&parser->output, + &parser->output_length, + "#line %" PRIiMAX "\n", + $2); + } +| LINE_EXPANDED integer_constant integer_constant NEWLINE { + parser->has_new_line_number = 1; + parser->new_line_number = $2; + parser->has_new_source_number = 1; + parser->new_source_number = $3; + ralloc_asprintf_rewrite_tail (&parser->output, + &parser->output_length, + "#line %" PRIiMAX " %" PRIiMAX "\n", + $2, $3); + } ; control_line: @@ -223,6 +244,14 @@ control_line: } ralloc_free ($2); } +| HASH_LINE pp_tokens NEWLINE { + if (parser->skip_stack == NULL || + parser->skip_stack->type == SKIP_NO_SKIP) + { + _glcpp_parser_expand_and_lex_from (parser, + LINE_EXPANDED, $2); + } + } | HASH_IF conditional_tokens NEWLINE { /* Be careful to only evaluate the 'if' expression if * we are not skipping. When we are skipping, we @@ -234,7 +263,8 @@ control_line: if (parser->skip_stack == NULL || parser->skip_stack->type == SKIP_NO_SKIP) { - _glcpp_parser_expand_if (parser, IF_EXPANDED, $2); + _glcpp_parser_expand_and_lex_from (parser, + IF_EXPANDED, $2); } else { @@ -273,7 +303,8 @@ control_line: if (parser->skip_stack && parser->skip_stack->type == SKIP_TO_ELSE) { - _glcpp_parser_expand_if (parser, ELIF_EXPANDED, $2); + _glcpp_parser_expand_and_lex_from (parser, + ELIF_EXPANDED, $2); } else { @@ -321,7 +352,7 @@ control_line: if ($2 >= 130 || $2 == 100) add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); - ralloc_asprintf_append (&parser->output, "#version %" PRIiMAX, $2); + ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "#version %" PRIiMAX, $2); } | HASH NEWLINE ; @@ -342,6 +373,9 @@ integer_constant: expression: integer_constant +| IDENTIFIER { + $$ = 0; + } | expression OR expression { $$ = $1 || $3; } @@ -763,8 +797,6 @@ _token_list_append (token_list_t *list, token_t *token) node->token = token; node->next = NULL; - ralloc_steal (list, token); - if (list->head == NULL) { list->head = node; } else { @@ -906,54 +938,54 @@ _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b) } static void -_token_print (char **out, token_t *token) +_token_print (char **out, size_t *len, token_t *token) { if (token->type < 256) { - ralloc_asprintf_append (out, "%c", token->type); + ralloc_asprintf_rewrite_tail (out, len, "%c", token->type); return; } switch (token->type) { case INTEGER: - ralloc_asprintf_append (out, "%" PRIiMAX, token->value.ival); + ralloc_asprintf_rewrite_tail (out, len, "%" PRIiMAX, token->value.ival); break; case IDENTIFIER: case INTEGER_STRING: case OTHER: - ralloc_strcat (out, token->value.str); + ralloc_asprintf_rewrite_tail (out, len, "%s", token->value.str); break; case SPACE: - ralloc_strcat (out, " "); + ralloc_asprintf_rewrite_tail (out, len, " "); break; case LEFT_SHIFT: - ralloc_strcat (out, "<<"); + ralloc_asprintf_rewrite_tail (out, len, "<<"); break; case RIGHT_SHIFT: - ralloc_strcat (out, ">>"); + ralloc_asprintf_rewrite_tail (out, len, ">>"); break; case LESS_OR_EQUAL: - ralloc_strcat (out, "<="); + ralloc_asprintf_rewrite_tail (out, len, "<="); break; case GREATER_OR_EQUAL: - ralloc_strcat (out, ">="); + ralloc_asprintf_rewrite_tail (out, len, ">="); break; case EQUAL: - ralloc_strcat (out, "=="); + ralloc_asprintf_rewrite_tail (out, len, "=="); break; case NOT_EQUAL: - ralloc_strcat (out, "!="); + ralloc_asprintf_rewrite_tail (out, len, "!="); break; case AND: - ralloc_strcat (out, "&&"); + ralloc_asprintf_rewrite_tail (out, len, "&&"); break; case OR: - ralloc_strcat (out, "||"); + ralloc_asprintf_rewrite_tail (out, len, "||"); break; case PASTE: - ralloc_strcat (out, "##"); + ralloc_asprintf_rewrite_tail (out, len, "##"); break; case COMMA_FINAL: - ralloc_strcat (out, ","); + ralloc_asprintf_rewrite_tail (out, len, ","); break; case PLACEHOLDER: /* Nothing to print. */ @@ -1043,11 +1075,11 @@ _token_paste (glcpp_parser_t *parser, token_t *token, token_t *other) } glcpp_error (&token->location, parser, ""); - ralloc_strcat (&parser->info_log, "Pasting \""); - _token_print (&parser->info_log, token); - ralloc_strcat (&parser->info_log, "\" and \""); - _token_print (&parser->info_log, other); - ralloc_strcat (&parser->info_log, "\" does not give a valid preprocessing token.\n"); + ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "Pasting \""); + _token_print (&parser->info_log, &parser->info_log_length, token); + ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "\" and \""); + _token_print (&parser->info_log, &parser->info_log_length, other); + ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "\" does not give a valid preprocessing token.\n"); return token; } @@ -1061,7 +1093,7 @@ _token_list_print (glcpp_parser_t *parser, token_list_t *list) return; for (node = list->head; node; node = node->next) - _token_print (&parser->output, node->token); + _token_print (&parser->output, &parser->output_length, node->token); } void @@ -1107,9 +1139,16 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) parser->lex_from_node = NULL; parser->output = ralloc_strdup(parser, ""); + parser->output_length = 0; parser->info_log = ralloc_strdup(parser, ""); + parser->info_log_length = 0; parser->error = 0; + parser->has_new_line_number = 0; + parser->new_line_number = 1; + parser->has_new_source_number = 0; + parser->new_source_number = 0; + /* Add pre-defined macros. */ add_builtin_define(parser, "GL_ARB_draw_buffers", 1); add_builtin_define(parser, "GL_ARB_texture_rectangle", 1); @@ -1132,8 +1171,22 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) if (extensions->ARB_shader_texture_lod) add_builtin_define(parser, "GL_ARB_shader_texture_lod", 1); - if (extensions->AMD_conservative_depth) + if (extensions->ARB_draw_instanced) + add_builtin_define(parser, "GL_ARB_draw_instanced", 1); + + if (extensions->ARB_conservative_depth) { add_builtin_define(parser, "GL_AMD_conservative_depth", 1); + add_builtin_define(parser, "GL_ARB_conservative_depth", 1); + } + + if (extensions->OES_EGL_image_external) + add_builtin_define(parser, "GL_OES_EGL_image_external", 1); + + if (extensions->ARB_shader_bit_encoding) + add_builtin_define(parser, "GL_ARB_shader_bit_encoding", 1); + + if (extensions->ARB_uniform_buffer_object) + add_builtin_define(parser, "GL_ARB_uniform_buffer_object", 1); } language_version = 110; @@ -1142,12 +1195,6 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) return parser; } -int -glcpp_parser_parse (glcpp_parser_t *parser) -{ - return yyparse (parser); -} - void glcpp_parser_destroy (glcpp_parser_t *parser) { @@ -1259,20 +1306,69 @@ _token_list_create_with_one_space (void *ctx) return list; } +/* Perform macro expansion on 'list', placing the resulting tokens + * into a new list which is initialized with a first token of type + * 'head_token_type'. Then begin lexing from the resulting list, + * (return to the current lexing source when this list is exhausted). + */ static void -_glcpp_parser_expand_if (glcpp_parser_t *parser, int type, token_list_t *list) +_glcpp_parser_expand_and_lex_from (glcpp_parser_t *parser, + int head_token_type, + token_list_t *list) { token_list_t *expanded; token_t *token; expanded = _token_list_create (parser); - token = _token_create_ival (parser, type, type); + token = _token_create_ival (parser, head_token_type, head_token_type); _token_list_append (expanded, token); _glcpp_parser_expand_token_list (parser, list); _token_list_append_list (expanded, list); glcpp_parser_lex_from (parser, expanded); } +static void +_glcpp_parser_apply_pastes (glcpp_parser_t *parser, token_list_t *list) +{ + token_node_t *node; + + node = list->head; + while (node) + { + token_node_t *next_non_space; + + /* Look ahead for a PASTE token, skipping space. */ + next_non_space = node->next; + while (next_non_space && next_non_space->token->type == SPACE) + next_non_space = next_non_space->next; + + if (next_non_space == NULL) + break; + + if (next_non_space->token->type != PASTE) { + node = next_non_space; + continue; + } + + /* Now find the next non-space token after the PASTE. */ + next_non_space = next_non_space->next; + while (next_non_space && next_non_space->token->type == SPACE) + next_non_space = next_non_space->next; + + if (next_non_space == NULL) { + yyerror (&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); + return; + } + + node->token = _token_paste (parser, node->token, next_non_space->token); + node->next = next_non_space->next; + if (next_non_space == list->tail) + list->tail = node; + } + + list->non_space_tail = list->tail; +} + /* This is a helper function that's essentially part of the * implementation of _glcpp_parser_expand_node. It shouldn't be called * except for by that function. @@ -1384,43 +1480,7 @@ _glcpp_parser_expand_function (glcpp_parser_t *parser, _token_list_trim_trailing_space (substituted); - node = substituted->head; - while (node) - { - token_node_t *next_non_space; - - /* Look ahead for a PASTE token, skipping space. */ - next_non_space = node->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) - break; - - if (next_non_space->token->type != PASTE) { - node = next_non_space; - continue; - } - - /* Now find the next non-space token after the PASTE. */ - next_non_space = next_non_space->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) { - yyerror (&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); - return NULL; - } - - node->token = _token_paste (parser, node->token, next_non_space->token); - node->next = next_non_space->next; - if (next_non_space == substituted->tail) - substituted->tail = node; - - node = node->next; - } - - substituted->non_space_tail = substituted->tail; + _glcpp_parser_apply_pastes (parser, substituted); return substituted; } @@ -1490,13 +1550,16 @@ _glcpp_parser_expand_node (glcpp_parser_t *parser, if (! macro->is_function) { + token_list_t *replacement; *last = node; /* Replace a macro defined as empty with a SPACE token. */ if (macro->replacements == NULL) return _token_list_create_with_one_space (parser); - return _token_list_copy (parser, macro->replacements); + replacement = _token_list_copy (parser, macro->replacements); + _glcpp_parser_apply_pastes (parser, replacement); + return replacement; } return _glcpp_parser_expand_function (parser, node, last); @@ -1652,8 +1715,8 @@ _check_for_reserved_macro_name (glcpp_parser_t *parser, YYLTYPE *loc, /* According to the GLSL specification, macro names starting with "__" * or "GL_" are reserved for future use. So, don't allow them. */ - if (strncmp(identifier, "__", 2) == 0) { - glcpp_error (loc, parser, "Macro names starting with \"__\" are reserved.\n"); + if (strstr(identifier, "__")) { + glcpp_error (loc, parser, "Macro names containing \"__\" are reserved.\n"); } if (strncmp(identifier, "GL_", 3) == 0) { glcpp_error (loc, parser, "Macro names starting with \"GL_\" are reserved.\n"); diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.c index 325289129..1b742644d 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.c +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.c @@ -26,7 +26,7 @@ #include #include "glcpp.h" #include "main/mtypes.h" -#include "main/shaderobj.h" +#include "../standalone_scaffolding.h" extern int yydebug; @@ -34,6 +34,7 @@ void _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, struct gl_shader *sh) { + (void) ctx; *ptr = sh; } @@ -110,7 +111,7 @@ main (int argc, char *argv[]) if (shader == NULL) return 1; - ret = preprocess(ctx, &shader, &info_log, NULL, API_OPENGL); + ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, API_OPENGL); printf("%s", shader); fprintf(stderr, "%s", info_log); diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.h b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.h index dc816e90e..a459289b2 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.h +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/glcpp.h @@ -25,6 +25,7 @@ #define GLCPP_H #include +#include #include "../ralloc.h" @@ -174,7 +175,13 @@ struct glcpp_parser { token_node_t *lex_from_node; char *output; char *info_log; + size_t output_length; + size_t info_log_length; int error; + bool has_new_line_number; + int new_line_number; + bool has_new_source_number; + int new_source_number; }; struct gl_extensions; @@ -189,7 +196,7 @@ void glcpp_parser_destroy (glcpp_parser_t *parser); int -preprocess(void *ralloc_ctx, const char **shader, char **info_log, +glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, int api); /* Functions for writing to the info log */ diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/pp.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/pp.c index 3640896a2..11b29417b 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/pp.c +++ b/3rdparty/glsl-optimizer/src/glsl/glcpp/pp.c @@ -33,15 +33,20 @@ glcpp_error (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...) va_list ap; parser->error = 1; - ralloc_asprintf_append(&parser->info_log, "%u:%u(%u): " - "preprocessor error: ", - locp->source, - locp->first_line, - locp->first_column); + ralloc_asprintf_rewrite_tail(&parser->info_log, + &parser->info_log_length, + "%u:%u(%u): " + "preprocessor error: ", + locp->source, + locp->first_line, + locp->first_column); va_start(ap, fmt); - ralloc_vasprintf_append(&parser->info_log, fmt, ap); + ralloc_vasprintf_rewrite_tail(&parser->info_log, + &parser->info_log_length, + fmt, ap); va_end(ap); - ralloc_strcat(&parser->info_log, "\n"); + ralloc_asprintf_rewrite_tail(&parser->info_log, + &parser->info_log_length, "\n"); } void @@ -49,15 +54,20 @@ glcpp_warning (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...) { va_list ap; - ralloc_asprintf_append(&parser->info_log, "%u:%u(%u): " - "preprocessor warning: ", - locp->source, - locp->first_line, - locp->first_column); + ralloc_asprintf_rewrite_tail(&parser->info_log, + &parser->info_log_length, + "%u:%u(%u): " + "preprocessor warning: ", + locp->source, + locp->first_line, + locp->first_column); va_start(ap, fmt); - ralloc_vasprintf_append(&parser->info_log, fmt, ap); + ralloc_vasprintf_rewrite_tail(&parser->info_log, + &parser->info_log_length, + fmt, ap); va_end(ap); - ralloc_strcat(&parser->info_log, "\n"); + ralloc_asprintf_rewrite_tail(&parser->info_log, + &parser->info_log_length, "\n"); } /* Searches backwards for '^ *#' from a given starting point. */ @@ -140,7 +150,7 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader) } int -preprocess(void *ralloc_ctx, const char **shader, char **info_log, +glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, int api) { int errors; diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c deleted file mode 100644 index b6dc2ba07..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c +++ /dev/null @@ -1,2 +0,0 @@ -#if UNDEFINED_MACRO -#endif diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c.expected b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c.expected deleted file mode 100644 index 2bb38a141..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/070-undefined-macro-in-expression.c.expected +++ /dev/null @@ -1,2 +0,0 @@ -0:1(21): preprocessor error: syntax error, unexpected IDENTIFIER - diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c deleted file mode 100644 index fd0c29f0c..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c +++ /dev/null @@ -1,2 +0,0 @@ -#define __BAD reserved -#define GL_ALSO_BAD() also reserved diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c.expected b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c.expected deleted file mode 100644 index 6a9df6826..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/086-reserved-macro-names.c.expected +++ /dev/null @@ -1,7 +0,0 @@ -0:1(10): preprocessor error: Macro names starting with "__" are reserved. - -0:2(9): preprocessor error: Macro names starting with "GL_" are reserved. - - - - diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c deleted file mode 100644 index fea35d37b..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c +++ /dev/null @@ -1,8 +0,0 @@ -#line 0 -#error line 0 error -#line 25 -#error line 25 error -#line 0 1 -#error source 1, line 0 error -#line 30 2 -#error source 2, line 30 error diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c.expected b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c.expected deleted file mode 100644 index e663398c1..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/091-hash-line.c.expected +++ /dev/null @@ -1,13 +0,0 @@ -0:0(1): preprocessor error: #error line 0 error -0:25(1): preprocessor error: #error line 25 error -1:0(1): preprocessor error: #error source 1, line 0 error -2:30(1): preprocessor error: #error source 2, line 30 error - - - - - - - - - diff --git a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/glcpp-test b/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/glcpp-test deleted file mode 100644 index e8f3b5463..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/glcpp/tests/glcpp-test +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh - -trap 'rm $test.valgrind-errors; exit 1' INT QUIT - -usage () -{ - cat <&2 - echo >&2 - usage - exit 1 - fi -done - -total=0 -pass=0 -clean=0 - -echo "====== Testing for correctness ======" -for test in *.c; do - echo -n "Testing $test..." - ../glcpp < $test > $test.out 2>&1 - total=$((total+1)) - if cmp $test.expected $test.out >/dev/null 2>&1; then - echo "PASS" - pass=$((pass+1)) - else - echo "FAIL" - diff -u $test.expected $test.out - fi -done - -echo "" -echo "$pass/$total tests returned correct results" -echo "" - -if [ "$do_valgrind" = "yes" ]; then - echo "====== Testing for valgrind cleanliness ======" - for test in *.c; do - echo -n "Testing $test with valgrind..." - valgrind --error-exitcode=31 --log-file=$test.valgrind-errors ../glcpp < $test >/dev/null 2>&1 - if [ "$?" = "31" ]; then - echo "ERRORS" - cat $test.valgrind-errors - else - echo "CLEAN" - clean=$((clean+1)) - rm $test.valgrind-errors - fi - done - - echo "" - echo "$pass/$total tests returned correct results" - echo "$clean/$total tests are valgrind-clean" -fi - -if [ "$pass" = "$total" ] && [ "$clean" = "$total" ]; then - exit 0 -else - exit 1 -fi - diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.cpp b/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.cpp index 69e3f604b..b4b98ddbb 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.cpp @@ -47,6 +47,7 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -344,13 +345,13 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ - yyleng = (size_t) (yy_cp - yy_bp); \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 210 -#define YY_END_OF_BUFFER 211 +#define YY_NUM_RULES 215 +#define YY_END_OF_BUFFER 216 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -358,100 +359,103 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[836] = +static yyconst flex_int16_t yy_accept[867] = { 0, - 0, 0, 16, 16, 0, 0, 211, 209, 1, 21, - 209, 209, 209, 209, 209, 209, 209, 209, 120, 118, - 209, 209, 209, 208, 209, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 209, 1, 209, 210, 16, - 20, 210, 19, 17, 18, 14, 13, 1, 102, 111, - 103, 114, 108, 97, 110, 98, 117, 122, 109, 123, - 120, 0, 0, 125, 120, 0, 118, 118, 106, 99, - 101, 100, 107, 208, 115, 105, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 30, 208, + 0, 0, 16, 16, 0, 0, 216, 214, 1, 21, + 214, 214, 214, 214, 214, 214, 214, 214, 121, 119, + 214, 214, 214, 213, 214, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 214, 1, 214, 215, 16, + 20, 215, 19, 17, 18, 14, 13, 1, 103, 112, + 104, 115, 109, 98, 111, 99, 118, 123, 110, 124, + 121, 0, 0, 126, 121, 0, 119, 119, 107, 100, + 102, 101, 108, 213, 116, 106, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 30, 213, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 34, 208, 208, 61, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 116, - 104, 1, 0, 0, 2, 0, 0, 0, 0, 16, - 15, 19, 18, 0, 122, 121, 0, 123, 0, 124, - 119, 112, 113, 208, 128, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 33, 208, 208, 208, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 34, 213, 213, 61, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 117, + 105, 1, 0, 0, 2, 0, 0, 0, 0, 16, + 15, 19, 18, 0, 123, 122, 0, 124, 0, 125, + 120, 113, 114, 213, 129, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 33, 213, 213, 213, - 208, 208, 208, 208, 208, 208, 208, 26, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 62, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 0, 0, 0, 0, 15, 0, 122, 0, 121, 0, - 123, 124, 119, 208, 208, 24, 208, 208, 175, 168, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 32, - 131, 208, 208, 208, 208, 68, 208, 208, 136, 150, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 213, 213, 213, 213, 213, 213, 213, 26, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 62, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 0, 0, 0, 0, 15, 0, 123, 0, 122, 0, + 124, 125, 120, 213, 213, 24, 213, 213, 176, 169, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 32, + 132, 213, 213, 213, 213, 68, 213, 213, 137, 151, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 208, 208, 147, 171, 49, 50, 51, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 134, 126, 208, - 208, 27, 208, 208, 208, 208, 208, 208, 208, 46, - 47, 48, 95, 208, 208, 0, 0, 0, 0, 0, - 121, 208, 208, 28, 37, 38, 39, 208, 129, 208, - 23, 208, 208, 208, 208, 158, 159, 160, 208, 127, - 208, 151, 25, 161, 162, 163, 173, 155, 156, 157, - 208, 208, 208, 63, 153, 208, 208, 208, 40, 41, - 42, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 213, 213, 148, 172, 49, 50, 51, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 135, 127, 213, + 213, 27, 213, 213, 213, 213, 213, 213, 213, 46, + 47, 48, 96, 213, 213, 0, 0, 0, 0, 0, + 122, 213, 213, 28, 37, 38, 39, 213, 130, 213, + 23, 213, 213, 213, 213, 159, 160, 161, 213, 128, + 213, 152, 25, 162, 163, 164, 174, 156, 157, 158, + 213, 213, 213, 63, 154, 213, 213, 213, 40, 41, + 42, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 208, 208, 208, 208, 208, 208, 208, 148, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 130, 208, - 208, 170, 43, 44, 45, 208, 208, 31, 0, 0, - 0, 0, 178, 208, 208, 176, 208, 208, 208, 149, - 144, 181, 208, 208, 208, 208, 208, 208, 139, 208, - 208, 208, 96, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 208, 208, 208, 208, 154, 135, 208, 208, - 142, 36, 208, 208, 167, 69, 143, 94, 179, 137, - 208, 208, 208, 208, 208, 208, 208, 208, 0, 0, - 0, 0, 208, 208, 208, 138, 35, 208, 208, 208, + 213, 213, 213, 213, 213, 213, 213, 149, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 131, 213, + 213, 171, 43, 44, 45, 213, 213, 31, 0, 0, + 0, 0, 179, 213, 213, 177, 213, 213, 213, 150, + 145, 182, 213, 213, 213, 213, 213, 213, 140, 213, + 213, 213, 97, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 213, 213, 213, 213, 155, 136, 213, 213, + 143, 36, 213, 213, 168, 69, 144, 95, 180, 138, + 213, 213, 213, 213, 213, 213, 213, 213, 0, 0, + 0, 0, 213, 213, 213, 139, 35, 213, 213, 213, - 208, 208, 208, 182, 183, 184, 208, 208, 208, 208, - 208, 172, 208, 208, 208, 208, 208, 208, 208, 208, - 132, 208, 208, 208, 208, 208, 64, 208, 208, 65, - 208, 0, 0, 0, 0, 0, 208, 66, 29, 145, - 186, 187, 188, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 140, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 133, 190, 191, 192, 208, - 208, 152, 208, 141, 0, 0, 6, 0, 0, 0, - 12, 3, 22, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 185, 146, 67, 208, 208, 208, 208, 169, + 213, 213, 213, 183, 184, 185, 213, 213, 213, 213, + 213, 173, 213, 213, 213, 213, 213, 213, 213, 213, + 133, 213, 213, 213, 213, 213, 64, 213, 213, 65, + 213, 0, 0, 0, 0, 0, 213, 66, 29, 146, + 187, 188, 189, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 141, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 134, 191, 192, 193, + 213, 213, 153, 213, 142, 0, 0, 6, 0, 0, + 0, 12, 3, 22, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 186, 147, 67, 213, 213, 213, 213, - 208, 177, 174, 207, 71, 72, 73, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 0, 0, 0, - 0, 0, 0, 0, 208, 208, 208, 189, 208, 208, - 208, 208, 208, 82, 83, 84, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 193, - 88, 89, 90, 208, 4, 0, 5, 0, 0, 0, - 0, 0, 0, 208, 208, 208, 208, 208, 208, 208, - 204, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 74, 208, 208, 208, 208, 208, 208, 0, - 0, 0, 0, 208, 208, 205, 194, 208, 195, 208, + 213, 170, 213, 178, 175, 208, 71, 72, 73, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 0, 0, 0, 0, 0, 0, 0, 213, 213, + 213, 190, 213, 213, 213, 213, 213, 82, 83, 84, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 194, 88, 89, 90, 213, + 213, 4, 0, 5, 0, 0, 0, 0, 0, 0, + 213, 213, 213, 213, 213, 213, 213, 205, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 74, 213, 213, 213, 213, 213, 213, 213, 213, - 208, 208, 85, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 206, 208, 208, 91, 0, 0, - 0, 196, 197, 208, 200, 208, 201, 208, 208, 70, - 208, 208, 208, 164, 208, 165, 180, 208, 198, 199, - 208, 208, 0, 0, 0, 208, 208, 208, 208, 75, - 208, 76, 208, 208, 208, 208, 208, 0, 0, 0, - 0, 208, 208, 86, 87, 208, 77, 208, 208, 78, - 208, 92, 93, 0, 0, 0, 0, 208, 208, 208, - 208, 208, 208, 0, 0, 0, 0, 208, 208, 208, - 208, 208, 79, 0, 0, 0, 7, 0, 0, 202, + 213, 0, 0, 0, 0, 213, 213, 206, 195, 213, + 196, 213, 213, 213, 213, 213, 85, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 207, + 213, 213, 213, 213, 91, 0, 0, 0, 197, 198, + 213, 201, 213, 202, 213, 213, 213, 213, 70, 213, + 213, 213, 165, 213, 166, 181, 213, 213, 199, 200, + 213, 213, 213, 213, 0, 0, 0, 213, 213, 213, + 213, 209, 211, 75, 213, 76, 213, 213, 213, 213, + 213, 213, 210, 212, 0, 0, 0, 0, 213, 213, + 86, 87, 213, 77, 213, 213, 78, 213, 213, 92, - 203, 208, 208, 208, 0, 0, 8, 0, 0, 208, - 208, 166, 0, 0, 0, 80, 81, 0, 0, 0, - 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 0 + 93, 0, 0, 0, 0, 213, 213, 213, 213, 213, + 213, 213, 0, 0, 0, 0, 213, 213, 213, 213, + 213, 79, 213, 0, 0, 0, 7, 0, 0, 203, + 204, 213, 213, 213, 94, 0, 0, 8, 0, 0, + 213, 213, 167, 0, 0, 0, 80, 81, 0, 0, + 0, 9, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -463,13 +467,13 @@ static yyconst flex_int32_t yy_ec[256] = 10, 11, 12, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 21, 22, 22, 23, 1, 24, 25, 26, 1, 1, 27, 28, 29, 30, 31, 32, - 33, 34, 34, 34, 34, 35, 34, 34, 34, 34, - 34, 36, 37, 38, 39, 34, 34, 40, 34, 34, - 1, 1, 1, 41, 42, 1, 43, 44, 45, 46, + 33, 34, 34, 34, 34, 35, 34, 34, 36, 34, + 34, 37, 38, 39, 40, 34, 34, 41, 34, 34, + 1, 1, 1, 42, 43, 1, 44, 45, 46, 47, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 34, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 1, 68, 1, 1, 1, 1, 1, 1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 34, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -486,357 +490,367 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[69] = +static yyconst flex_int32_t yy_meta[70] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, - 1, 5, 4, 4, 4, 4, 3, 3, 5, 5, + 5, 1, 5, 4, 4, 4, 4, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 1 + 5, 5, 5, 5, 5, 5, 5, 5, 1 } ; -static yyconst flex_int16_t yy_base[845] = +static yyconst flex_int16_t yy_base[876] = { 0, - 0, 67, 73, 0, 1210, 1209, 1211, 1214, 68, 1214, - 1185, 1184, 134, 1183, 131, 132, 130, 1182, 146, 198, - 129, 1181, 144, 0, 130, 113, 124, 141, 150, 126, - 181, 1148, 159, 192, 118, 129, 146, 1142, 147, 174, - 206, 192, 203, 222, 1153, 203, 221, 231, 1214, 260, - 1214, 1187, 279, 1214, 0, 1214, 1214, 270, 1214, 1214, - 1214, 1214, 1214, 1214, 1214, 1214, 1214, 244, 1214, 255, - 139, 290, 307, 1214, 1214, 0, 0, 1214, 1176, 1214, - 1214, 1214, 1175, 0, 1214, 1214, 1138, 1143, 1136, 1139, - 1148, 1147, 1133, 1136, 1148, 144, 1142, 1129, 1126, 1140, + 0, 68, 74, 0, 1243, 1242, 1244, 1247, 69, 1247, + 1218, 1217, 136, 1216, 133, 134, 132, 1215, 148, 201, + 131, 1214, 146, 0, 121, 114, 123, 146, 134, 136, + 172, 1180, 161, 182, 141, 129, 151, 1174, 140, 187, + 196, 203, 205, 223, 1185, 187, 204, 270, 1247, 224, + 1247, 1220, 258, 1247, 0, 1247, 1247, 240, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 251, 1247, 253, + 224, 321, 275, 1247, 1247, 0, 0, 1247, 1209, 1247, + 1247, 1247, 1208, 0, 1247, 1247, 1170, 1175, 1168, 1171, + 1180, 1179, 1165, 1168, 1180, 247, 1174, 1161, 1158, 1172, - 1126, 1123, 1123, 1129, 219, 193, 1123, 1134, 1119, 1125, - 1129, 1130, 0, 1121, 1132, 278, 1131, 1126, 1106, 224, - 1110, 1124, 1114, 232, 1107, 271, 1120, 1122, 1104, 1100, - 1108, 1105, 1094, 1103, 234, 1101, 1107, 1102, 1105, 1093, - 1096, 226, 145, 262, 1106, 1093, 1106, 263, 1099, 1214, - 1214, 338, 331, 343, 1214, 1084, 1097, 1088, 1099, 345, - 0, 334, 0, 345, 1214, 328, 391, 1214, 352, 398, - 338, 1214, 1214, 1094, 0, 1085, 1089, 1099, 1096, 332, - 1079, 1079, 1083, 320, 1094, 1091, 1091, 1089, 1086, 1077, - 1084, 1070, 1068, 1081, 1066, 1083, 0, 1080, 1067, 1075, + 1158, 1155, 1155, 1161, 243, 261, 1155, 1166, 1151, 1157, + 1161, 1162, 0, 1153, 1164, 252, 1163, 1158, 1138, 172, + 1142, 1156, 1146, 201, 1139, 260, 1152, 1154, 1136, 1132, + 1140, 1137, 1126, 1135, 264, 1133, 1139, 1134, 1137, 1125, + 1128, 256, 265, 271, 1138, 1125, 1138, 234, 1131, 1247, + 1247, 326, 319, 342, 1247, 1116, 1129, 1120, 1131, 329, + 0, 338, 0, 391, 1247, 315, 402, 1247, 409, 416, + 287, 1247, 1247, 1126, 0, 1117, 1121, 1131, 1128, 300, + 1111, 1111, 1115, 304, 1126, 1123, 1123, 1121, 1118, 1109, + 1116, 1102, 1100, 1113, 1098, 1115, 0, 1112, 1099, 1107, - 1072, 1076, 1077, 1070, 1067, 1055, 1054, 1068, 1071, 1058, - 1067, 1054, 1061, 1051, 364, 1057, 1060, 1050, 1058, 1046, - 1050, 1041, 1056, 1046, 1037, 1056, 1039, 1037, 1048, 1037, - 1032, 1030, 1044, 1029, 1031, 1028, 1040, 1039, 1042, 1023, - 338, 1032, 1027, 1025, 1035, 1013, 403, 1032, 1034, 1022, - 1014, 1018, 1030, 1013, 0, 415, 422, 439, 1214, 446, - 455, 1214, 1214, 1008, 1019, 0, 1016, 406, 0, 0, - 1009, 1007, 1009, 1004, 1013, 1001, 1019, 1007, 409, 0, - 0, 1001, 1012, 1011, 1011, 0, 995, 429, 0, 0, - 997, 460, 1005, 1006, 996, 990, 989, 990, 989, 989, + 1104, 1108, 1109, 1102, 1099, 1087, 1086, 1100, 1103, 1090, + 1099, 1086, 1093, 1083, 353, 1089, 1092, 1082, 1090, 1078, + 1082, 1073, 1088, 1078, 1069, 1088, 1071, 1069, 1080, 1069, + 1064, 1062, 1076, 1061, 1063, 1060, 1072, 1071, 1074, 1055, + 319, 1064, 1059, 1057, 1067, 1045, 361, 1064, 1066, 1054, + 1046, 1050, 1062, 1045, 0, 423, 434, 451, 1247, 458, + 468, 1247, 1247, 1040, 1051, 0, 1048, 366, 0, 0, + 1041, 1039, 1041, 1036, 1045, 1033, 1051, 1039, 369, 0, + 0, 1033, 1044, 1043, 1043, 0, 1027, 373, 0, 0, + 1029, 376, 1037, 1038, 1028, 1022, 1021, 1022, 1021, 1021, - 463, 984, 0, 0, 980, 979, 978, 980, 981, 986, - 980, 976, 990, 985, 984, 983, 974, 977, 977, 969, - 972, 967, 976, 981, 966, 979, 969, 0, 0, 976, - 972, 0, 963, 963, 969, 959, 967, 466, 964, 0, - 0, 0, 0, 953, 966, 965, 964, 961, 949, 472, - 479, 961, 963, 0, 0, 0, 0, 949, 0, 949, - 0, 948, 949, 943, 954, 0, 0, 0, 944, 0, - 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 951, 487, 950, 0, 0, 948, 944, 940, 0, 0, - 0, 932, 489, 494, 499, 937, 933, 939, 929, 927, + 380, 1016, 0, 0, 1012, 1011, 1010, 1012, 1013, 1018, + 1012, 1008, 1022, 1017, 1016, 1015, 1006, 1009, 1009, 1001, + 1004, 999, 1008, 1013, 998, 1011, 1001, 0, 0, 1008, + 1004, 0, 995, 995, 1001, 991, 999, 439, 996, 0, + 0, 0, 0, 985, 998, 997, 996, 993, 981, 475, + 486, 993, 995, 0, 0, 0, 0, 981, 0, 981, + 0, 980, 981, 975, 986, 0, 0, 0, 976, 0, + 972, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 983, 492, 982, 0, 0, 980, 976, 972, 0, 0, + 0, 964, 442, 494, 504, 969, 965, 971, 961, 959, - 941, 925, 925, 939, 927, 939, 934, 0, 932, 929, - 933, 916, 918, 925, 931, 926, 925, 912, 0, 914, - 915, 0, 0, 0, 0, 912, 916, 0, 910, 963, - 909, 912, 0, 900, 910, 0, 898, 898, 912, 0, - 914, 0, 503, 926, 925, 924, 891, 890, 0, 908, - 907, 902, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 890, 904, 890, 887, 0, 0, 893, 892, - 0, 0, 890, 882, 0, 0, 0, 0, 0, 0, - 879, 891, 506, 883, 890, 889, 886, 880, 873, 524, - 889, 874, 869, 883, 881, 0, 0, 873, 896, 895, + 973, 957, 957, 971, 959, 971, 966, 0, 964, 961, + 965, 948, 950, 957, 963, 958, 957, 944, 0, 946, + 947, 0, 0, 0, 0, 944, 948, 0, 942, 996, + 941, 944, 0, 932, 942, 0, 930, 930, 944, 0, + 946, 0, 508, 959, 958, 957, 923, 922, 0, 940, + 939, 934, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 922, 936, 922, 919, 0, 0, 925, 924, + 0, 0, 922, 914, 0, 0, 0, 0, 0, 0, + 911, 923, 511, 915, 922, 921, 918, 912, 905, 529, + 921, 906, 901, 915, 913, 0, 0, 905, 929, 928, - 894, 861, 860, 361, 365, 0, 873, 876, 874, 862, - 858, 0, 871, 868, 867, 856, 855, 854, 519, 863, - 0, 879, 878, 877, 844, 843, 0, 858, 844, 0, - 855, 850, 547, 553, 898, 843, 851, 0, 0, 0, - 870, 869, 0, 847, 850, 834, 842, 832, 840, 841, - 841, 840, 825, 559, 838, 0, 839, 827, 826, 822, - 850, 849, 848, 815, 814, 0, 848, 847, 0, 825, - 828, 0, 562, 0, 814, 580, 1214, 587, 0, 607, - 584, 1214, 0, 811, 810, 820, 820, 807, 822, 805, - 820, 815, 0, 0, 0, 831, 830, 829, 796, 0, + 927, 893, 892, 378, 505, 0, 905, 908, 906, 894, + 890, 0, 903, 900, 899, 888, 887, 886, 535, 895, + 0, 912, 911, 910, 876, 875, 0, 890, 876, 0, + 887, 882, 539, 565, 931, 875, 883, 0, 0, 0, + 903, 902, 0, 879, 882, 866, 874, 864, 872, 873, + 873, 872, 857, 560, 870, 0, 871, 859, 858, 854, + 883, 882, 881, 847, 846, 842, 0, 880, 879, 0, + 856, 859, 0, 573, 0, 845, 591, 1247, 601, 0, + 612, 597, 1247, 0, 842, 841, 851, 851, 838, 853, + 836, 851, 846, 0, 0, 0, 863, 862, 861, 827, - 796, 0, 0, 0, 502, 524, 820, 807, 810, 794, - 793, 803, 803, 819, 818, 817, 784, 789, 615, 640, - 550, 806, 796, 784, 782, 781, 792, 0, 795, 791, - 793, 789, 775, 806, 805, 0, 787, 779, 770, 778, - 768, 779, 775, 777, 775, 775, 762, 761, 772, 0, - 791, 790, 0, 772, 1214, 555, 1214, 647, 0, 667, - 785, 770, 752, 769, 768, 751, 743, 751, 741, 749, - 0, 746, 745, 756, 739, 742, 757, 740, 753, 754, - 751, 748, 757, 750, 749, 732, 731, 730, 741, 582, - 754, 724, 734, 718, 717, 0, 745, 717, 743, 715, + 826, 0, 826, 0, 0, 0, 506, 534, 850, 837, + 840, 822, 823, 822, 832, 832, 849, 848, 847, 813, + 812, 817, 621, 647, 373, 834, 824, 812, 810, 809, + 820, 0, 823, 819, 821, 817, 803, 835, 324, 0, + 812, 815, 807, 798, 806, 796, 807, 803, 805, 803, + 803, 802, 789, 788, 799, 0, 819, 538, 0, 796, + 799, 1247, 444, 1247, 654, 0, 674, 813, 797, 779, + 796, 795, 778, 770, 778, 768, 776, 0, 773, 772, + 783, 781, 781, 764, 767, 782, 765, 778, 779, 776, + 773, 782, 759, 774, 773, 756, 755, 754, 765, 763, - 719, 718, 0, 729, 732, 728, 730, 711, 725, 709, - 710, 718, 701, 700, 0, 706, 705, 0, 728, 713, - 706, 0, 0, 710, 0, 709, 0, 715, 714, 0, - 690, 698, 688, 716, 695, 0, 0, 708, 0, 0, - 707, 706, 746, 611, 696, 703, 702, 678, 677, 705, - 677, 703, 689, 674, 691, 670, 669, 190, 613, 557, - 667, 687, 686, 0, 0, 681, 0, 680, 686, 0, - 671, 0, 0, 671, 590, 343, 672, 645, 644, 654, - 635, 631, 612, 612, 604, 443, 635, 576, 575, 549, - 25, 87, 0, 183, 500, 552, 1214, 636, 591, 0, + 763, 479, 777, 746, 756, 740, 739, 0, 767, 739, + 765, 737, 741, 740, 753, 750, 0, 749, 752, 748, + 750, 731, 745, 729, 730, 738, 731, 720, 719, 0, + 725, 724, 737, 734, 0, 746, 730, 723, 0, 0, + 720, 0, 704, 0, 710, 709, 689, 690, 0, 682, + 690, 680, 708, 687, 0, 0, 700, 699, 0, 0, + 698, 697, 678, 679, 736, 560, 685, 692, 691, 667, + 666, 0, 0, 694, 666, 692, 678, 663, 678, 669, + 656, 5, 0, 0, 155, 634, 568, 106, 131, 208, + 0, 0, 217, 0, 285, 305, 0, 324, 366, 0, - 0, 196, 258, 254, 272, 609, 1214, 614, 598, 279, - 284, 0, 336, 348, 671, 0, 0, 362, 672, 688, - 1214, 394, 689, 1214, 408, 670, 691, 649, 651, 474, - 476, 693, 694, 1214, 1214, 704, 707, 710, 530, 591, - 713, 717, 720, 722 + 0, 360, 593, 549, 401, 440, 441, 457, 471, 469, + 454, 503, 474, 524, 643, 645, 509, 511, 549, 550, + 542, 0, 578, 581, 650, 676, 1247, 679, 625, 0, + 0, 588, 590, 593, 0, 599, 687, 1247, 659, 649, + 614, 615, 0, 630, 635, 697, 0, 0, 641, 698, + 699, 1247, 645, 701, 1247, 642, 703, 711, 708, 712, + 660, 661, 716, 717, 1247, 1247, 756, 759, 762, 718, + 719, 765, 769, 772, 774 } ; -static yyconst flex_int16_t yy_def[845] = +static yyconst flex_int16_t yy_def[876] = { 0, - 835, 1, 835, 3, 836, 836, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 837, 835, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 838, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 839, 835, 840, - 19, 835, 835, 835, 835, 841, 20, 835, 835, 835, - 835, 835, 835, 837, 835, 835, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 866, 1, 866, 3, 867, 867, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 868, 866, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 869, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 870, 866, 871, + 19, 866, 866, 866, 866, 872, 20, 866, 866, 866, + 866, 866, 866, 868, 866, 866, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 842, 835, 838, 835, 835, 840, 835, 835, 835, 835, - 841, 835, 835, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 873, 866, 869, 866, 866, 871, 866, 866, 866, 866, + 872, 866, 866, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 835, 835, 835, 835, 842, 835, 835, 835, 835, 835, - 835, 835, 835, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 866, 866, 866, 866, 873, 866, 866, 866, 866, 866, + 866, 866, 866, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 835, 835, 835, 835, 835, - 835, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 866, 866, 866, 866, 866, + 866, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 835, 835, - 835, 835, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 835, 835, - 835, 835, 837, 837, 837, 837, 837, 837, 837, 837, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 866, 866, + 866, 866, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 866, 866, + 866, 866, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 835, 835, 835, 835, 835, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 835, 835, 835, 835, 843, 835, - 835, 835, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 866, 866, 866, 866, 866, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 866, 866, 866, 866, 874, + 866, 866, 866, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 835, 835, 835, - 843, 835, 835, 835, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 835, 835, 835, 835, 844, 835, - 835, 835, 835, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 844, - 835, 835, 835, 837, 837, 837, 837, 837, 837, 837, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 866, 866, 866, 874, 866, 866, 866, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 866, 866, 866, 866, 875, 866, 866, 866, 866, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 835, 835, - 835, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 835, 835, 835, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 835, 835, 835, - 835, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 835, 835, 835, 835, 837, 837, 837, - 837, 837, 837, 835, 835, 835, 835, 837, 837, 837, - 837, 837, 837, 835, 835, 835, 835, 835, 835, 837, + 868, 875, 866, 866, 866, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 866, 866, 866, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 866, 866, 866, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 866, 866, 866, 866, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 837, 837, 837, 837, 835, 835, 835, 835, 835, 837, - 837, 837, 835, 835, 835, 837, 837, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 0, 835, 835, 835, 835, 835, - 835, 835, 835, 835 + 868, 866, 866, 866, 866, 868, 868, 868, 868, 868, + 868, 868, 866, 866, 866, 866, 868, 868, 868, 868, + 868, 868, 868, 866, 866, 866, 866, 866, 866, 868, + 868, 868, 868, 868, 868, 866, 866, 866, 866, 866, + 868, 868, 868, 866, 866, 866, 868, 868, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 0, 866, 866, 866, 866, + 866, 866, 866, 866, 866 } ; -static yyconst flex_int16_t yy_nxt[1283] = +static yyconst flex_int16_t yy_nxt[1317] = { 0, 8, 9, 10, 9, 11, 8, 12, 13, 8, 8, 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 8, 21, 22, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 24, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 24, 24, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 24, 24, 24, 46, 47, 58, - 803, 58, 48, 49, 50, 51, 50, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 52, 49, 53, - 53, 53, 53, 53, 53, 54, 49, 49, 49, 55, + 24, 25, 24, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 24, 24, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 24, 24, 24, 46, 47, + 58, 801, 58, 48, 49, 50, 51, 50, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 52, 49, + 53, 53, 53, 53, 53, 53, 54, 49, 49, 49, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 49, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 49, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 49, 61, 64, 804, 66, 68, 68, 68, 68, 68, - 68, 68, 79, 80, 85, 65, 67, 87, 62, 70, - 119, 71, 71, 71, 71, 71, 71, 72, 82, 83, - 86, 121, 88, 89, 120, 122, 73, 74, 835, 101, - 90, 102, 91, 93, 75, 76, 92, 94, 123, 126, - 103, 758, 73, 74, 95, 241, 97, 96, 183, 184, + 55, 55, 49, 61, 64, 85, 66, 68, 68, 68, + 68, 68, 68, 68, 79, 80, 785, 65, 67, 87, + 62, 70, 86, 71, 71, 71, 71, 71, 71, 72, + 82, 83, 121, 805, 88, 89, 122, 806, 73, 74, + 90, 97, 91, 126, 119, 98, 92, 75, 76, 93, + 101, 99, 102, 94, 123, 73, 74, 100, 120, 127, - 98, 110, 124, 835, 242, 127, 99, 75, 128, 111, - 76, 70, 100, 77, 77, 77, 77, 77, 77, 77, - 129, 112, 152, 104, 58, 805, 153, 150, 73, 74, - 130, 105, 154, 155, 106, 195, 78, 107, 138, 113, - 774, 139, 114, 108, 73, 74, 115, 116, 131, 196, - 140, 117, 810, 142, 118, 132, 133, 141, 143, 78, - 134, 160, 144, 160, 146, 145, 135, 136, 147, 137, - 151, 58, 193, 58, 164, 165, 231, 156, 148, 213, - 239, 240, 218, 194, 157, 167, 168, 214, 158, 219, - 164, 165, 232, 159, 162, 162, 162, 162, 162, 162, + 95, 103, 128, 96, 110, 152, 802, 58, 124, 153, + 75, 150, 111, 76, 70, 104, 77, 77, 77, 77, + 77, 77, 77, 105, 112, 160, 106, 160, 213, 107, + 113, 73, 74, 114, 129, 108, 214, 115, 116, 131, + 78, 58, 117, 58, 130, 118, 132, 133, 73, 74, + 138, 134, 218, 139, 807, 151, 142, 135, 136, 219, + 137, 143, 140, 78, 866, 144, 146, 808, 145, 141, + 147, 154, 155, 162, 162, 162, 162, 162, 162, 162, + 148, 164, 165, 167, 168, 248, 169, 169, 249, 866, + 170, 170, 170, 170, 170, 170, 170, 193, 164, 165, - 162, 167, 168, 70, 243, 72, 72, 72, 72, 72, - 72, 72, 244, 248, 811, 221, 249, 812, 169, 169, - 73, 74, 170, 170, 170, 170, 170, 170, 170, 222, - 813, 205, 154, 155, 206, 207, 73, 74, 208, 152, - 209, 58, 816, 153, 154, 155, 160, 817, 160, 162, - 162, 162, 162, 162, 162, 162, 256, 256, 258, 259, - 257, 257, 257, 257, 257, 257, 257, 170, 170, 170, - 170, 170, 170, 170, 258, 259, 263, 156, 269, 274, - 275, 305, 306, 307, 157, 333, 818, 546, 158, 156, - 785, 548, 270, 159, 334, 819, 157, 547, 786, 263, + 167, 168, 183, 184, 195, 221, 205, 231, 194, 206, + 207, 239, 240, 208, 243, 209, 241, 156, 196, 222, + 154, 155, 244, 232, 157, 242, 263, 152, 158, 58, + 160, 153, 160, 159, 70, 809, 72, 72, 72, 72, + 72, 72, 72, 154, 155, 258, 259, 269, 810, 263, + 680, 73, 74, 162, 162, 162, 162, 162, 162, 162, + 681, 270, 258, 259, 274, 275, 156, 333, 73, 74, + 305, 306, 307, 157, 577, 578, 334, 158, 340, 341, + 342, 811, 159, 355, 356, 357, 366, 367, 368, 156, + 374, 375, 376, 378, 379, 380, 157, 389, 390, 391, - 158, 549, 260, 260, 822, 159, 261, 261, 261, 261, - 261, 261, 261, 170, 170, 170, 170, 170, 170, 170, - 340, 341, 342, 355, 356, 357, 366, 367, 368, 262, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 796, 262, 374, 375, 376, 825, - 350, 350, 797, 165, 351, 351, 351, 351, 351, 351, - 351, 261, 261, 261, 261, 261, 261, 261, 826, 165, - 261, 261, 261, 261, 261, 261, 261, 378, 379, 380, - 389, 390, 391, 423, 424, 425, 168, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 158, 812, 256, 256, 546, 159, 257, 257, 257, 257, + 257, 257, 257, 260, 260, 547, 813, 261, 261, 261, + 261, 261, 261, 261, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 257, 257, + 257, 257, 257, 257, 257, 663, 664, 262, 816, 257, + 257, 257, 257, 257, 257, 257, 423, 424, 425, 454, + 455, 456, 350, 350, 262, 165, 351, 351, 351, 351, + 351, 351, 351, 261, 261, 261, 261, 261, 261, 261, + 663, 664, 165, 261, 261, 261, 261, 261, 261, 261, + 351, 351, 351, 351, 351, 351, 351, 817, 818, 168, - 351, 806, 168, 444, 445, 446, 454, 455, 456, 807, - 259, 457, 458, 459, 447, 448, 460, 461, 462, 499, - 500, 501, 522, 523, 524, 490, 259, 831, 639, 832, - 502, 503, 68, 525, 526, 561, 562, 563, 640, 533, - 534, 534, 534, 534, 534, 534, 564, 565, 576, 577, - 641, 576, 577, 796, 576, 577, 656, 657, 775, 642, - 643, 797, 578, 578, 578, 578, 578, 578, 580, 580, - 580, 580, 580, 580, 580, 596, 597, 598, 614, 615, - 616, 576, 577, 656, 657, 581, 579, 599, 576, 577, - 617, 775, 808, 166, 802, 619, 620, 620, 620, 620, + 819, 351, 351, 351, 351, 351, 351, 351, 444, 445, + 446, 457, 458, 459, 820, 821, 168, 259, 822, 447, + 448, 460, 461, 462, 499, 500, 501, 522, 523, 524, + 490, 548, 644, 823, 259, 502, 503, 824, 525, 526, + 577, 578, 549, 645, 533, 534, 534, 534, 534, 534, + 534, 561, 562, 563, 579, 579, 579, 579, 579, 579, + 646, 786, 564, 565, 698, 566, 577, 578, 787, 803, + 647, 648, 825, 830, 699, 831, 597, 598, 599, 580, + 581, 581, 581, 581, 581, 581, 581, 600, 601, 617, + 618, 619, 577, 578, 803, 832, 833, 814, 582, 834, - 620, 620, 578, 578, 578, 578, 578, 578, 576, 577, - 806, 579, 759, 776, 759, 808, 656, 657, 807, 760, - 622, 760, 580, 580, 580, 580, 580, 580, 580, 623, - 658, 658, 658, 658, 658, 658, 798, 798, 801, 800, - 624, 656, 657, 799, 799, 814, 776, 809, 656, 657, - 829, 795, 829, 815, 659, 660, 660, 660, 660, 660, - 660, 660, 658, 658, 658, 658, 658, 658, 656, 657, - 809, 827, 820, 823, 794, 793, 792, 791, 828, 659, - 821, 824, 660, 660, 660, 660, 660, 660, 660, 820, - 823, 830, 827, 830, 833, 833, 790, 821, 824, 828, + 620, 621, 577, 578, 580, 815, 623, 624, 624, 624, + 624, 624, 624, 577, 578, 835, 579, 579, 579, 579, + 579, 579, 663, 664, 836, 804, 839, 581, 581, 581, + 581, 581, 581, 581, 626, 786, 665, 665, 665, 665, + 665, 665, 787, 627, 826, 841, 828, 842, 663, 664, + 804, 837, 827, 829, 628, 663, 664, 843, 844, 838, + 839, 666, 667, 667, 667, 667, 667, 667, 667, 665, + 665, 665, 665, 665, 665, 663, 664, 826, 847, 848, + 828, 849, 840, 850, 853, 827, 666, 829, 837, 667, + 667, 667, 667, 667, 667, 667, 838, 845, 851, 854, - 789, 788, 834, 834, 56, 56, 56, 56, 56, 84, - 84, 84, 163, 163, 163, 171, 171, 255, 787, 255, - 255, 255, 621, 621, 690, 690, 784, 783, 782, 781, - 780, 779, 778, 777, 773, 772, 771, 770, 769, 768, - 767, 766, 765, 764, 763, 762, 761, 758, 757, 756, + 851, 856, 854, 857, 858, 846, 852, 855, 852, 860, + 855, 859, 858, 860, 862, 863, 840, 864, 864, 859, + 68, 166, 800, 799, 798, 865, 865, 797, 796, 795, + 794, 793, 792, 791, 790, 789, 788, 785, 784, 783, + 782, 781, 780, 779, 778, 777, 776, 775, 774, 773, + 772, 861, 771, 770, 769, 861, 56, 56, 56, 56, + 56, 84, 84, 84, 163, 163, 163, 171, 171, 255, + 768, 255, 255, 255, 625, 625, 702, 702, 767, 766, + 765, 764, 763, 762, 761, 760, 759, 758, 757, 756, 755, 754, 753, 752, 751, 750, 749, 748, 747, 746, + 745, 744, 743, 742, 741, 740, 739, 738, 737, 736, 735, 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, 723, 722, 721, 720, 719, 718, 717, 716, 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, + 705, 704, 703, 701, 700, 697, 696, 695, 694, 693, + 692, 691, 690, 689, 688, 687, 686, 685, 684, 683, + 682, 679, 678, 677, 676, 675, 674, 673, 672, 671, + 670, 669, 668, 662, 661, 660, 659, 658, 657, 656, + 655, 654, 653, 652, 651, 650, 649, 643, 642, 641, + 640, 639, 638, 637, 636, 635, 634, 633, 632, 631, - 705, 704, 703, 702, 701, 700, 699, 698, 697, 696, - 695, 694, 693, 692, 691, 689, 688, 687, 686, 685, - 684, 683, 682, 681, 680, 679, 678, 677, 676, 675, - 674, 673, 672, 671, 670, 669, 668, 667, 666, 665, - 664, 663, 662, 661, 655, 654, 653, 652, 651, 650, - 649, 648, 647, 646, 645, 644, 638, 637, 636, 635, - 634, 633, 632, 631, 630, 629, 628, 627, 626, 625, - 618, 613, 612, 611, 610, 609, 608, 607, 606, 605, - 604, 603, 602, 601, 600, 595, 594, 593, 592, 591, - 590, 589, 588, 587, 586, 585, 584, 583, 582, 581, + 630, 629, 622, 616, 615, 614, 613, 612, 611, 610, + 609, 608, 607, 606, 605, 604, 603, 602, 596, 595, + 594, 593, 592, 591, 590, 589, 588, 587, 586, 585, + 584, 583, 582, 576, 575, 574, 573, 572, 571, 570, + 569, 568, 567, 560, 559, 558, 557, 556, 555, 554, + 553, 552, 551, 550, 545, 544, 543, 542, 541, 540, + 539, 538, 537, 536, 535, 532, 531, 530, 529, 528, + 527, 521, 520, 519, 518, 517, 516, 515, 514, 513, + 512, 511, 510, 509, 508, 507, 506, 505, 504, 498, + 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, - 575, 574, 573, 572, 571, 570, 569, 568, 567, 566, - 560, 559, 558, 557, 556, 555, 554, 553, 552, 551, - 550, 545, 544, 543, 542, 541, 540, 539, 538, 537, - 536, 535, 532, 531, 530, 529, 528, 527, 521, 520, - 519, 518, 517, 516, 515, 514, 513, 512, 511, 510, - 509, 508, 507, 506, 505, 504, 498, 497, 496, 495, - 494, 493, 492, 491, 490, 489, 488, 487, 486, 485, - 484, 483, 482, 481, 480, 479, 478, 477, 476, 475, - 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, - 464, 463, 453, 452, 451, 450, 449, 443, 442, 441, + 487, 486, 485, 484, 483, 482, 481, 480, 479, 478, + 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, + 467, 466, 465, 464, 463, 453, 452, 451, 450, 449, + 443, 442, 441, 440, 439, 438, 437, 436, 435, 434, + 433, 432, 431, 430, 429, 428, 427, 426, 422, 421, + 420, 419, 418, 417, 416, 415, 414, 413, 412, 411, + 410, 409, 408, 407, 406, 405, 404, 403, 402, 401, + 400, 399, 398, 397, 396, 395, 394, 393, 392, 388, + 387, 386, 385, 384, 383, 382, 381, 377, 373, 372, + 371, 370, 369, 365, 364, 363, 362, 361, 360, 359, - 440, 439, 438, 437, 436, 435, 434, 433, 432, 431, - 430, 429, 428, 427, 426, 422, 421, 420, 419, 418, - 417, 416, 415, 414, 413, 412, 411, 410, 409, 408, - 407, 406, 405, 404, 403, 402, 401, 400, 399, 398, - 397, 396, 395, 394, 393, 392, 388, 387, 386, 385, - 384, 383, 382, 381, 377, 373, 372, 371, 370, 369, - 365, 364, 363, 362, 361, 360, 359, 358, 354, 353, - 352, 349, 348, 347, 346, 345, 344, 343, 339, 338, - 337, 336, 335, 332, 331, 330, 329, 328, 327, 326, - 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, + 358, 354, 353, 352, 349, 348, 347, 346, 345, 344, + 343, 339, 338, 337, 336, 335, 332, 331, 330, 329, + 328, 327, 326, 325, 324, 323, 322, 321, 320, 319, + 318, 317, 316, 315, 314, 313, 312, 311, 310, 309, + 308, 304, 303, 302, 301, 300, 299, 298, 297, 296, + 295, 294, 293, 292, 291, 290, 289, 288, 287, 286, + 285, 284, 283, 282, 281, 280, 279, 278, 277, 276, + 273, 272, 271, 268, 267, 266, 265, 264, 254, 253, + 252, 251, 250, 247, 246, 245, 238, 237, 236, 235, + 234, 233, 230, 229, 228, 227, 226, 225, 224, 223, - 315, 314, 313, 312, 311, 310, 309, 308, 304, 303, - 302, 301, 300, 299, 298, 297, 296, 295, 294, 293, - 292, 291, 290, 289, 288, 287, 286, 285, 284, 283, - 282, 281, 280, 279, 278, 277, 276, 273, 272, 271, - 268, 267, 266, 265, 264, 254, 253, 252, 251, 250, - 247, 246, 245, 238, 237, 236, 235, 234, 233, 230, - 229, 228, 227, 226, 225, 224, 223, 220, 217, 216, - 215, 212, 211, 210, 204, 203, 202, 201, 200, 199, - 198, 197, 192, 191, 190, 189, 188, 187, 186, 185, - 182, 181, 180, 179, 178, 177, 176, 175, 174, 173, + 220, 217, 216, 215, 212, 211, 210, 204, 203, 202, + 201, 200, 199, 198, 197, 192, 191, 190, 189, 188, + 187, 186, 185, 182, 181, 180, 179, 178, 177, 176, + 175, 174, 173, 172, 161, 149, 125, 109, 81, 69, + 63, 60, 59, 866, 57, 57, 7, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, - 172, 161, 149, 125, 109, 81, 69, 63, 60, 59, - 835, 57, 57, 7, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835 + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866 } ; -static yyconst flex_int16_t yy_chk[1283] = +static yyconst flex_int16_t yy_chk[1317] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -844,8 +858,8 @@ static yyconst flex_int16_t yy_chk[1283] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 9, - 791, 9, 2, 3, 3, 3, 3, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 9, 782, 9, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -853,132 +867,136 @@ static yyconst flex_int16_t yy_chk[1283] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 13, 15, 792, 16, 17, 17, 17, 17, 17, - 17, 17, 21, 21, 25, 15, 16, 26, 13, 19, - 35, 19, 19, 19, 19, 19, 19, 19, 23, 23, - 25, 36, 26, 26, 35, 36, 19, 19, 71, 30, - 27, 30, 27, 28, 19, 19, 27, 28, 37, 39, - 30, 758, 19, 19, 28, 143, 29, 28, 96, 96, + 3, 3, 3, 13, 15, 25, 16, 17, 17, 17, + 17, 17, 17, 17, 21, 21, 785, 15, 16, 26, + 13, 19, 25, 19, 19, 19, 19, 19, 19, 19, + 23, 23, 36, 788, 26, 26, 36, 789, 19, 19, + 27, 29, 27, 39, 35, 29, 27, 19, 19, 28, + 30, 29, 30, 28, 37, 19, 19, 29, 35, 39, - 29, 33, 37, 71, 143, 39, 29, 19, 39, 33, - 19, 20, 29, 20, 20, 20, 20, 20, 20, 20, - 40, 33, 47, 31, 47, 794, 47, 46, 20, 20, - 40, 31, 48, 48, 31, 106, 20, 31, 42, 34, - 758, 42, 34, 31, 20, 20, 34, 34, 41, 106, - 42, 34, 802, 43, 34, 41, 41, 42, 43, 20, - 41, 50, 43, 50, 44, 43, 41, 41, 44, 41, - 46, 58, 105, 58, 68, 68, 135, 48, 44, 120, - 142, 142, 124, 105, 48, 70, 70, 120, 48, 124, - 68, 68, 135, 48, 53, 53, 53, 53, 53, 53, + 28, 30, 39, 28, 33, 47, 785, 47, 37, 47, + 19, 46, 33, 19, 20, 31, 20, 20, 20, 20, + 20, 20, 20, 31, 33, 50, 31, 50, 120, 31, + 34, 20, 20, 34, 40, 31, 120, 34, 34, 41, + 20, 58, 34, 58, 40, 34, 41, 41, 20, 20, + 42, 41, 124, 42, 790, 46, 43, 41, 41, 124, + 41, 43, 42, 20, 71, 43, 44, 793, 43, 42, + 44, 48, 48, 53, 53, 53, 53, 53, 53, 53, + 44, 68, 68, 70, 70, 148, 73, 73, 148, 71, + 73, 73, 73, 73, 73, 73, 73, 105, 68, 68, - 53, 70, 70, 72, 144, 72, 72, 72, 72, 72, - 72, 72, 144, 148, 803, 126, 148, 804, 73, 73, - 72, 72, 73, 73, 73, 73, 73, 73, 73, 126, - 805, 116, 153, 153, 116, 116, 72, 72, 116, 152, - 116, 152, 810, 152, 154, 154, 160, 811, 160, 162, - 162, 162, 162, 162, 162, 162, 164, 164, 166, 166, - 164, 164, 164, 164, 164, 164, 164, 169, 169, 169, - 169, 169, 169, 169, 166, 166, 171, 153, 180, 184, - 184, 215, 215, 215, 153, 241, 813, 504, 153, 154, - 776, 505, 180, 153, 241, 814, 154, 504, 776, 171, + 70, 70, 96, 96, 106, 126, 116, 135, 105, 116, + 116, 142, 142, 116, 144, 116, 143, 48, 106, 126, + 153, 153, 144, 135, 48, 143, 171, 152, 48, 152, + 160, 152, 160, 48, 72, 795, 72, 72, 72, 72, + 72, 72, 72, 154, 154, 166, 166, 180, 796, 171, + 639, 72, 72, 162, 162, 162, 162, 162, 162, 162, + 639, 180, 166, 166, 184, 184, 153, 241, 72, 72, + 215, 215, 215, 153, 625, 625, 241, 153, 247, 247, + 247, 798, 153, 268, 268, 268, 279, 279, 279, 154, + 288, 288, 288, 292, 292, 292, 154, 301, 301, 301, - 154, 505, 167, 167, 818, 154, 167, 167, 167, 167, - 167, 167, 167, 170, 170, 170, 170, 170, 170, 170, - 247, 247, 247, 268, 268, 268, 279, 279, 279, 170, - 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, - 257, 257, 257, 257, 786, 170, 288, 288, 288, 822, - 258, 258, 786, 257, 258, 258, 258, 258, 258, 258, - 258, 260, 260, 260, 260, 260, 260, 260, 825, 257, - 261, 261, 261, 261, 261, 261, 261, 292, 292, 292, - 301, 301, 301, 338, 338, 338, 261, 350, 350, 350, - 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, + 154, 799, 164, 164, 504, 154, 164, 164, 164, 164, + 164, 164, 164, 167, 167, 504, 802, 167, 167, 167, + 167, 167, 167, 167, 169, 169, 169, 169, 169, 169, + 169, 170, 170, 170, 170, 170, 170, 170, 256, 256, + 256, 256, 256, 256, 256, 663, 663, 170, 805, 257, + 257, 257, 257, 257, 257, 257, 338, 338, 338, 393, + 393, 393, 258, 258, 170, 257, 258, 258, 258, 258, + 258, 258, 258, 260, 260, 260, 260, 260, 260, 260, + 702, 702, 257, 261, 261, 261, 261, 261, 261, 261, + 350, 350, 350, 350, 350, 350, 350, 806, 807, 261, - 351, 795, 261, 382, 382, 382, 393, 393, 393, 795, - 351, 394, 394, 394, 382, 382, 395, 395, 395, 443, - 443, 443, 483, 483, 483, 490, 351, 830, 605, 831, - 443, 443, 839, 483, 483, 519, 519, 519, 605, 490, - 490, 490, 490, 490, 490, 490, 519, 519, 533, 533, - 606, 621, 621, 796, 534, 534, 656, 656, 760, 606, - 606, 796, 533, 533, 533, 533, 533, 533, 534, 534, - 534, 534, 534, 534, 534, 554, 554, 554, 573, 573, - 573, 576, 576, 690, 690, 581, 533, 554, 578, 578, - 573, 775, 799, 840, 790, 576, 576, 576, 576, 576, + 808, 351, 351, 351, 351, 351, 351, 351, 382, 382, + 382, 394, 394, 394, 809, 810, 261, 351, 811, 382, + 382, 395, 395, 395, 443, 443, 443, 483, 483, 483, + 490, 505, 607, 812, 351, 443, 443, 813, 483, 483, + 533, 533, 505, 607, 490, 490, 490, 490, 490, 490, + 490, 519, 519, 519, 533, 533, 533, 533, 533, 533, + 608, 766, 519, 519, 658, 519, 534, 534, 766, 787, + 608, 608, 814, 817, 658, 818, 554, 554, 554, 533, + 534, 534, 534, 534, 534, 534, 534, 554, 554, 574, + 574, 574, 577, 577, 803, 819, 820, 804, 582, 821, - 576, 576, 578, 578, 578, 578, 578, 578, 580, 580, - 806, 533, 744, 760, 759, 808, 619, 619, 806, 744, - 581, 759, 580, 580, 580, 580, 580, 580, 580, 581, - 619, 619, 619, 619, 619, 619, 787, 798, 789, 788, - 581, 620, 620, 787, 798, 809, 775, 799, 658, 658, - 828, 785, 829, 809, 619, 620, 620, 620, 620, 620, - 620, 620, 658, 658, 658, 658, 658, 658, 660, 660, - 808, 826, 815, 819, 784, 783, 782, 781, 826, 619, - 815, 819, 660, 660, 660, 660, 660, 660, 660, 820, - 823, 828, 827, 829, 832, 833, 780, 820, 823, 827, + 574, 574, 579, 579, 533, 804, 577, 577, 577, 577, + 577, 577, 577, 581, 581, 823, 579, 579, 579, 579, + 579, 579, 623, 623, 824, 787, 829, 581, 581, 581, + 581, 581, 581, 581, 582, 786, 623, 623, 623, 623, + 623, 623, 786, 582, 815, 832, 816, 833, 624, 624, + 803, 825, 815, 816, 582, 665, 665, 834, 836, 825, + 839, 623, 624, 624, 624, 624, 624, 624, 624, 665, + 665, 665, 665, 665, 665, 667, 667, 826, 841, 842, + 828, 844, 829, 845, 849, 826, 623, 828, 837, 667, + 667, 667, 667, 667, 667, 667, 837, 840, 846, 850, - 779, 778, 832, 833, 836, 836, 836, 836, 836, 837, - 837, 837, 838, 838, 838, 841, 841, 842, 777, 842, - 842, 842, 843, 843, 844, 844, 774, 771, 769, 768, - 766, 763, 762, 761, 757, 756, 755, 754, 753, 752, - 751, 750, 749, 748, 747, 746, 745, 743, 742, 741, - 738, 735, 734, 733, 732, 731, 729, 728, 726, 724, - 721, 720, 719, 717, 716, 714, 713, 712, 711, 710, - 709, 708, 707, 706, 705, 704, 702, 701, 700, 699, - 698, 697, 695, 694, 693, 692, 691, 689, 688, 687, - 686, 685, 684, 683, 682, 681, 680, 679, 678, 677, + 851, 853, 854, 856, 857, 840, 846, 850, 851, 859, + 854, 857, 858, 860, 861, 862, 839, 863, 864, 858, + 870, 871, 781, 780, 779, 863, 864, 778, 777, 776, + 775, 774, 771, 770, 769, 768, 767, 765, 764, 763, + 762, 761, 758, 757, 754, 753, 752, 751, 750, 748, + 747, 859, 746, 745, 743, 860, 867, 867, 867, 867, + 867, 868, 868, 868, 869, 869, 869, 872, 872, 873, + 741, 873, 873, 873, 874, 874, 875, 875, 738, 737, + 736, 734, 733, 732, 731, 729, 728, 727, 726, 725, + 724, 723, 722, 721, 720, 719, 718, 716, 715, 714, - 676, 675, 674, 673, 672, 670, 669, 668, 667, 666, - 665, 664, 663, 662, 661, 654, 652, 651, 649, 648, - 647, 646, 645, 644, 643, 642, 641, 640, 639, 638, - 637, 635, 634, 633, 632, 631, 630, 629, 627, 626, - 625, 624, 623, 622, 618, 617, 616, 615, 614, 613, - 612, 611, 610, 609, 608, 607, 601, 599, 598, 597, - 596, 592, 591, 590, 589, 588, 587, 586, 585, 584, - 575, 571, 570, 568, 567, 565, 564, 563, 562, 561, - 560, 559, 558, 557, 555, 553, 552, 551, 550, 549, - 548, 547, 546, 545, 544, 542, 541, 537, 536, 535, + 713, 712, 711, 710, 709, 707, 706, 705, 704, 703, + 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, + 691, 690, 689, 688, 687, 686, 685, 684, 683, 682, + 681, 680, 679, 677, 676, 675, 674, 673, 672, 671, + 670, 669, 668, 661, 660, 657, 655, 654, 653, 652, + 651, 650, 649, 648, 647, 646, 645, 644, 643, 642, + 641, 638, 637, 636, 635, 634, 633, 631, 630, 629, + 628, 627, 626, 622, 621, 620, 619, 618, 617, 616, + 615, 614, 613, 612, 611, 610, 609, 603, 601, 600, + 599, 598, 597, 593, 592, 591, 590, 589, 588, 587, - 532, 531, 529, 528, 526, 525, 524, 523, 522, 520, - 518, 517, 516, 515, 514, 513, 511, 510, 509, 508, - 507, 503, 502, 501, 500, 499, 498, 495, 494, 493, - 492, 491, 489, 488, 487, 486, 485, 484, 482, 481, - 474, 473, 470, 469, 466, 465, 464, 463, 452, 451, - 450, 448, 447, 446, 445, 444, 441, 439, 438, 437, - 435, 434, 432, 431, 430, 429, 427, 426, 421, 420, - 418, 417, 416, 415, 414, 413, 412, 411, 410, 409, - 407, 406, 405, 404, 403, 402, 401, 400, 399, 398, - 397, 396, 392, 388, 387, 386, 383, 381, 371, 369, + 586, 585, 576, 572, 571, 569, 568, 566, 565, 564, + 563, 562, 561, 560, 559, 558, 557, 555, 553, 552, + 551, 550, 549, 548, 547, 546, 545, 544, 542, 541, + 537, 536, 535, 532, 531, 529, 528, 526, 525, 524, + 523, 522, 520, 518, 517, 516, 515, 514, 513, 511, + 510, 509, 508, 507, 503, 502, 501, 500, 499, 498, + 495, 494, 493, 492, 491, 489, 488, 487, 486, 485, + 484, 482, 481, 474, 473, 470, 469, 466, 465, 464, + 463, 452, 451, 450, 448, 447, 446, 445, 444, 441, + 439, 438, 437, 435, 434, 432, 431, 430, 429, 427, - 365, 364, 363, 362, 360, 358, 353, 352, 349, 348, - 347, 346, 345, 344, 339, 337, 336, 335, 334, 333, - 331, 330, 327, 326, 325, 324, 323, 322, 321, 320, - 319, 318, 317, 316, 315, 314, 313, 312, 311, 310, - 309, 308, 307, 306, 305, 302, 300, 299, 298, 297, - 296, 295, 294, 293, 291, 287, 285, 284, 283, 282, - 278, 277, 276, 275, 274, 273, 272, 271, 267, 265, - 264, 254, 253, 252, 251, 250, 249, 248, 246, 245, - 244, 243, 242, 240, 239, 238, 237, 236, 235, 234, - 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, + 426, 421, 420, 418, 417, 416, 415, 414, 413, 412, + 411, 410, 409, 407, 406, 405, 404, 403, 402, 401, + 400, 399, 398, 397, 396, 392, 388, 387, 386, 383, + 381, 371, 369, 365, 364, 363, 362, 360, 358, 353, + 352, 349, 348, 347, 346, 345, 344, 339, 337, 336, + 335, 334, 333, 331, 330, 327, 326, 325, 324, 323, + 322, 321, 320, 319, 318, 317, 316, 315, 314, 313, + 312, 311, 310, 309, 308, 307, 306, 305, 302, 300, + 299, 298, 297, 296, 295, 294, 293, 291, 287, 285, + 284, 283, 282, 278, 277, 276, 275, 274, 273, 272, - 223, 222, 221, 220, 219, 218, 217, 216, 214, 213, - 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, - 202, 201, 200, 199, 198, 196, 195, 194, 193, 192, - 191, 190, 189, 188, 187, 186, 185, 183, 182, 181, - 179, 178, 177, 176, 174, 159, 158, 157, 156, 149, - 147, 146, 145, 141, 140, 139, 138, 137, 136, 134, - 133, 132, 131, 130, 129, 128, 127, 125, 123, 122, - 121, 119, 118, 117, 115, 114, 112, 111, 110, 109, - 108, 107, 104, 103, 102, 101, 100, 99, 98, 97, - 95, 94, 93, 92, 91, 90, 89, 88, 87, 83, + 271, 267, 265, 264, 254, 253, 252, 251, 250, 249, + 248, 246, 245, 244, 243, 242, 240, 239, 238, 237, + 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, + 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, + 216, 214, 213, 212, 211, 210, 209, 208, 207, 206, + 205, 204, 203, 202, 201, 200, 199, 198, 196, 195, + 194, 193, 192, 191, 190, 189, 188, 187, 186, 185, + 183, 182, 181, 179, 178, 177, 176, 174, 159, 158, + 157, 156, 149, 147, 146, 145, 141, 140, 139, 138, + 137, 136, 134, 133, 132, 131, 130, 129, 128, 127, - 79, 52, 45, 38, 32, 22, 18, 14, 12, 11, - 7, 6, 5, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835 + 125, 123, 122, 121, 119, 118, 117, 115, 114, 112, + 111, 110, 109, 108, 107, 104, 103, 102, 101, 100, + 99, 98, 97, 95, 94, 93, 92, 91, 90, 89, + 88, 87, 83, 79, 52, 45, 38, 32, 22, 18, + 14, 12, 11, 7, 6, 5, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866 } ; /* The intent behind this definition is that it'll catch @@ -1013,6 +1031,7 @@ static yyconst flex_int16_t yy_chk[1283] = * DEALINGS IN THE SOFTWARE. */ #include +#include #include "strtod.h" #include "ast.h" #include "glsl_parser_extras.h" @@ -1034,8 +1053,6 @@ static int classify_identifier(struct _mesa_glsl_parse_state *, const char *); #define YY_USER_INIT yylineno = 0; yycolumn = 0; -#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U') - /* A macro for handling reserved words and keywords across language versions. * * Certain words start out as identifiers, become reserved words in @@ -1073,7 +1090,52 @@ static int classify_identifier(struct _mesa_glsl_parse_state *, const char *); */ #define ES yyextra->es_shader -#line 1077 "src/glsl/glsl_lexer.cpp" +static int +literal_integer(char *text, int len, struct _mesa_glsl_parse_state *state, + YYSTYPE *lval, YYLTYPE *lloc, int base) +{ + bool is_uint = (text[len - 1] == 'u' || + text[len - 1] == 'U'); + const char *digits = text; + + /* Skip "0x" */ + if (base == 16) + digits += 2; + +#ifdef _MSC_VER + unsigned __int64 value = _strtoui64(digits, NULL, base); +#else + unsigned long long value = strtoull(digits, NULL, base); +#endif + + lval->n = (int)value; + + if (value > UINT_MAX) { + /* Note that signed 0xffffffff is valid, not out of range! */ + if (state->language_version >= 130) { + _mesa_glsl_error(lloc, state, + "Literal value `%s' out of range", text); + } else { + _mesa_glsl_warning(lloc, state, + "Literal value `%s' out of range", text); + } + } else if (base == 10 && !is_uint && (unsigned)value > (unsigned)INT_MAX + 1) { + /* Tries to catch unintentionally providing a negative value. + * Note that -2147483648 is parsed as -(2147483648), so we don't + * want to warn for INT_MAX. + */ + _mesa_glsl_warning(lloc, state, + "Signed literal value `%s' is interpreted as %d", + text, lval->n); + } + return is_uint ? UINTCONSTANT : INTCONSTANT; +} + +#define LITERAL_INTEGER(base) \ + literal_integer(yytext, yyleng, yyextra, yylval, yylloc, base) + + +#line 1139 "src/glsl/glsl_lexer.cpp" #define INITIAL 0 #define PP 1 @@ -1307,10 +1369,10 @@ YY_DECL register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; -#line 101 "src/glsl/glsl_lexer.ll" +#line 145 "src/glsl/glsl_lexer.ll" -#line 1314 "src/glsl/glsl_lexer.cpp" +#line 1376 "src/glsl/glsl_lexer.cpp" yylval = yylval_param; @@ -1368,13 +1430,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 836 ) + if ( yy_current_state >= 867 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 835 ); + while ( yy_current_state != 866 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1396,7 +1458,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 103 "src/glsl/glsl_lexer.ll" +#line 147 "src/glsl/glsl_lexer.ll" ; YY_BREAK /* Preprocessor tokens. */ @@ -1405,17 +1467,17 @@ case 2: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 106 "src/glsl/glsl_lexer.ll" +#line 150 "src/glsl/glsl_lexer.ll" ; YY_BREAK case 3: YY_RULE_SETUP -#line 107 "src/glsl/glsl_lexer.ll" -{ BEGIN PP; return VERSION; } +#line 151 "src/glsl/glsl_lexer.ll" +{ BEGIN PP; return VERSION_TOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 108 "src/glsl/glsl_lexer.ll" +#line 152 "src/glsl/glsl_lexer.ll" { BEGIN PP; return EXTENSION; } YY_BREAK case 5: @@ -1423,7 +1485,7 @@ case 5: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 109 "src/glsl/glsl_lexer.ll" +#line 153 "src/glsl/glsl_lexer.ll" { /* Eat characters until the first digit is * encountered @@ -1445,7 +1507,7 @@ case 6: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 124 "src/glsl/glsl_lexer.ll" +#line 168 "src/glsl/glsl_lexer.ll" { /* Eat characters until the first digit is * encountered @@ -1463,7 +1525,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 138 "src/glsl/glsl_lexer.ll" +#line 182 "src/glsl/glsl_lexer.ll" { BEGIN PP; return PRAGMA_DEBUG_ON; @@ -1471,7 +1533,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 142 "src/glsl/glsl_lexer.ll" +#line 186 "src/glsl/glsl_lexer.ll" { BEGIN PP; return PRAGMA_DEBUG_OFF; @@ -1479,7 +1541,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 146 "src/glsl/glsl_lexer.ll" +#line 190 "src/glsl/glsl_lexer.ll" { BEGIN PP; return PRAGMA_OPTIMIZE_ON; @@ -1487,7 +1549,7 @@ YY_RULE_SETUP YY_BREAK case 10: YY_RULE_SETUP -#line 150 "src/glsl/glsl_lexer.ll" +#line 194 "src/glsl/glsl_lexer.ll" { BEGIN PP; return PRAGMA_OPTIMIZE_OFF; @@ -1495,7 +1557,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 154 "src/glsl/glsl_lexer.ll" +#line 198 "src/glsl/glsl_lexer.ll" { BEGIN PP; return PRAGMA_INVARIANT_ALL; @@ -1503,38 +1565,38 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 158 "src/glsl/glsl_lexer.ll" +#line 202 "src/glsl/glsl_lexer.ll" { BEGIN PRAGMA; } YY_BREAK case 13: /* rule 13 can match eol */ YY_RULE_SETUP -#line 160 "src/glsl/glsl_lexer.ll" +#line 204 "src/glsl/glsl_lexer.ll" { BEGIN 0; yylineno++; yycolumn = 0; } YY_BREAK case 14: YY_RULE_SETUP -#line 161 "src/glsl/glsl_lexer.ll" +#line 205 "src/glsl/glsl_lexer.ll" { } YY_BREAK case 15: YY_RULE_SETUP -#line 163 "src/glsl/glsl_lexer.ll" +#line 207 "src/glsl/glsl_lexer.ll" { } YY_BREAK case 16: YY_RULE_SETUP -#line 164 "src/glsl/glsl_lexer.ll" +#line 208 "src/glsl/glsl_lexer.ll" { } YY_BREAK case 17: YY_RULE_SETUP -#line 165 "src/glsl/glsl_lexer.ll" +#line 209 "src/glsl/glsl_lexer.ll" return COLON; YY_BREAK case 18: YY_RULE_SETUP -#line 166 "src/glsl/glsl_lexer.ll" +#line 210 "src/glsl/glsl_lexer.ll" { yylval->identifier = strdup(yytext); return IDENTIFIER; @@ -1542,7 +1604,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 170 "src/glsl/glsl_lexer.ll" +#line 214 "src/glsl/glsl_lexer.ll" { yylval->n = strtol(yytext, NULL, 10); return INTCONSTANT; @@ -1551,392 +1613,404 @@ YY_RULE_SETUP case 20: /* rule 20 can match eol */ YY_RULE_SETUP -#line 174 "src/glsl/glsl_lexer.ll" +#line 218 "src/glsl/glsl_lexer.ll" { BEGIN 0; yylineno++; yycolumn = 0; return EOL; } YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP -#line 176 "src/glsl/glsl_lexer.ll" +#line 220 "src/glsl/glsl_lexer.ll" { yylineno++; yycolumn = 0; } YY_BREAK case 22: YY_RULE_SETUP -#line 178 "src/glsl/glsl_lexer.ll" +#line 222 "src/glsl/glsl_lexer.ll" return ATTRIBUTE; YY_BREAK case 23: YY_RULE_SETUP -#line 179 "src/glsl/glsl_lexer.ll" +#line 223 "src/glsl/glsl_lexer.ll" return CONST_TOK; YY_BREAK case 24: YY_RULE_SETUP -#line 180 "src/glsl/glsl_lexer.ll" +#line 224 "src/glsl/glsl_lexer.ll" return BOOL_TOK; YY_BREAK case 25: YY_RULE_SETUP -#line 181 "src/glsl/glsl_lexer.ll" +#line 225 "src/glsl/glsl_lexer.ll" return FLOAT_TOK; YY_BREAK case 26: YY_RULE_SETUP -#line 182 "src/glsl/glsl_lexer.ll" +#line 226 "src/glsl/glsl_lexer.ll" return INT_TOK; YY_BREAK case 27: YY_RULE_SETUP -#line 183 "src/glsl/glsl_lexer.ll" +#line 227 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, UINT_TOK); YY_BREAK case 28: YY_RULE_SETUP -#line 185 "src/glsl/glsl_lexer.ll" +#line 229 "src/glsl/glsl_lexer.ll" return BREAK; YY_BREAK case 29: YY_RULE_SETUP -#line 186 "src/glsl/glsl_lexer.ll" +#line 230 "src/glsl/glsl_lexer.ll" return CONTINUE; YY_BREAK case 30: YY_RULE_SETUP -#line 187 "src/glsl/glsl_lexer.ll" +#line 231 "src/glsl/glsl_lexer.ll" return DO; YY_BREAK case 31: YY_RULE_SETUP -#line 188 "src/glsl/glsl_lexer.ll" +#line 232 "src/glsl/glsl_lexer.ll" return WHILE; YY_BREAK case 32: YY_RULE_SETUP -#line 189 "src/glsl/glsl_lexer.ll" +#line 233 "src/glsl/glsl_lexer.ll" return ELSE; YY_BREAK case 33: YY_RULE_SETUP -#line 190 "src/glsl/glsl_lexer.ll" +#line 234 "src/glsl/glsl_lexer.ll" return FOR; YY_BREAK case 34: YY_RULE_SETUP -#line 191 "src/glsl/glsl_lexer.ll" +#line 235 "src/glsl/glsl_lexer.ll" return IF; YY_BREAK case 35: YY_RULE_SETUP -#line 192 "src/glsl/glsl_lexer.ll" +#line 236 "src/glsl/glsl_lexer.ll" return DISCARD; YY_BREAK case 36: YY_RULE_SETUP -#line 193 "src/glsl/glsl_lexer.ll" +#line 237 "src/glsl/glsl_lexer.ll" return RETURN; YY_BREAK case 37: YY_RULE_SETUP -#line 195 "src/glsl/glsl_lexer.ll" +#line 239 "src/glsl/glsl_lexer.ll" return BVEC2; YY_BREAK case 38: YY_RULE_SETUP -#line 196 "src/glsl/glsl_lexer.ll" +#line 240 "src/glsl/glsl_lexer.ll" return BVEC3; YY_BREAK case 39: YY_RULE_SETUP -#line 197 "src/glsl/glsl_lexer.ll" +#line 241 "src/glsl/glsl_lexer.ll" return BVEC4; YY_BREAK case 40: YY_RULE_SETUP -#line 198 "src/glsl/glsl_lexer.ll" +#line 242 "src/glsl/glsl_lexer.ll" return IVEC2; YY_BREAK case 41: YY_RULE_SETUP -#line 199 "src/glsl/glsl_lexer.ll" +#line 243 "src/glsl/glsl_lexer.ll" return IVEC3; YY_BREAK case 42: YY_RULE_SETUP -#line 200 "src/glsl/glsl_lexer.ll" +#line 244 "src/glsl/glsl_lexer.ll" return IVEC4; YY_BREAK case 43: YY_RULE_SETUP -#line 201 "src/glsl/glsl_lexer.ll" +#line 245 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, UVEC2); YY_BREAK case 44: YY_RULE_SETUP -#line 202 "src/glsl/glsl_lexer.ll" +#line 246 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, UVEC3); YY_BREAK case 45: YY_RULE_SETUP -#line 203 "src/glsl/glsl_lexer.ll" +#line 247 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, UVEC4); YY_BREAK case 46: YY_RULE_SETUP -#line 204 "src/glsl/glsl_lexer.ll" +#line 248 "src/glsl/glsl_lexer.ll" return VEC2; YY_BREAK case 47: YY_RULE_SETUP -#line 205 "src/glsl/glsl_lexer.ll" +#line 249 "src/glsl/glsl_lexer.ll" return VEC3; YY_BREAK case 48: YY_RULE_SETUP -#line 206 "src/glsl/glsl_lexer.ll" +#line 250 "src/glsl/glsl_lexer.ll" return VEC4; YY_BREAK case 49: YY_RULE_SETUP -#line 207 "src/glsl/glsl_lexer.ll" +#line 251 "src/glsl/glsl_lexer.ll" return MAT2X2; YY_BREAK case 50: YY_RULE_SETUP -#line 208 "src/glsl/glsl_lexer.ll" +#line 252 "src/glsl/glsl_lexer.ll" return MAT3X3; YY_BREAK case 51: YY_RULE_SETUP -#line 209 "src/glsl/glsl_lexer.ll" +#line 253 "src/glsl/glsl_lexer.ll" return MAT4X4; YY_BREAK case 52: YY_RULE_SETUP -#line 210 "src/glsl/glsl_lexer.ll" +#line 254 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT2X2); YY_BREAK case 53: YY_RULE_SETUP -#line 211 "src/glsl/glsl_lexer.ll" +#line 255 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT2X3); YY_BREAK case 54: YY_RULE_SETUP -#line 212 "src/glsl/glsl_lexer.ll" +#line 256 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT2X4); YY_BREAK case 55: YY_RULE_SETUP -#line 213 "src/glsl/glsl_lexer.ll" +#line 257 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT3X2); YY_BREAK case 56: YY_RULE_SETUP -#line 214 "src/glsl/glsl_lexer.ll" +#line 258 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT3X3); YY_BREAK case 57: YY_RULE_SETUP -#line 215 "src/glsl/glsl_lexer.ll" +#line 259 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT3X4); YY_BREAK case 58: YY_RULE_SETUP -#line 216 "src/glsl/glsl_lexer.ll" +#line 260 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT4X2); YY_BREAK case 59: YY_RULE_SETUP -#line 217 "src/glsl/glsl_lexer.ll" +#line 261 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT4X3); YY_BREAK case 60: YY_RULE_SETUP -#line 218 "src/glsl/glsl_lexer.ll" +#line 262 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, MAT4X4); YY_BREAK case 61: YY_RULE_SETUP -#line 220 "src/glsl/glsl_lexer.ll" +#line 264 "src/glsl/glsl_lexer.ll" return IN_TOK; YY_BREAK case 62: YY_RULE_SETUP -#line 221 "src/glsl/glsl_lexer.ll" +#line 265 "src/glsl/glsl_lexer.ll" return OUT_TOK; YY_BREAK case 63: YY_RULE_SETUP -#line 222 "src/glsl/glsl_lexer.ll" +#line 266 "src/glsl/glsl_lexer.ll" return INOUT_TOK; YY_BREAK case 64: YY_RULE_SETUP -#line 223 "src/glsl/glsl_lexer.ll" +#line 267 "src/glsl/glsl_lexer.ll" return UNIFORM; YY_BREAK case 65: YY_RULE_SETUP -#line 224 "src/glsl/glsl_lexer.ll" +#line 268 "src/glsl/glsl_lexer.ll" return VARYING; YY_BREAK case 66: YY_RULE_SETUP -#line 225 "src/glsl/glsl_lexer.ll" +#line 269 "src/glsl/glsl_lexer.ll" KEYWORD(120, 120, CENTROID); YY_BREAK case 67: YY_RULE_SETUP -#line 226 "src/glsl/glsl_lexer.ll" +#line 270 "src/glsl/glsl_lexer.ll" KEYWORD(120 || ES, 120 || ES, INVARIANT); YY_BREAK case 68: YY_RULE_SETUP -#line 227 "src/glsl/glsl_lexer.ll" +#line 271 "src/glsl/glsl_lexer.ll" KEYWORD(130 || ES, 130, FLAT); YY_BREAK case 69: YY_RULE_SETUP -#line 228 "src/glsl/glsl_lexer.ll" +#line 272 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, SMOOTH); YY_BREAK case 70: YY_RULE_SETUP -#line 229 "src/glsl/glsl_lexer.ll" +#line 273 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, NOPERSPECTIVE); YY_BREAK case 71: YY_RULE_SETUP -#line 231 "src/glsl/glsl_lexer.ll" +#line 275 "src/glsl/glsl_lexer.ll" return SAMPLER1D; YY_BREAK case 72: YY_RULE_SETUP -#line 232 "src/glsl/glsl_lexer.ll" +#line 276 "src/glsl/glsl_lexer.ll" return SAMPLER2D; YY_BREAK case 73: YY_RULE_SETUP -#line 233 "src/glsl/glsl_lexer.ll" +#line 277 "src/glsl/glsl_lexer.ll" return SAMPLER3D; YY_BREAK case 74: YY_RULE_SETUP -#line 234 "src/glsl/glsl_lexer.ll" +#line 278 "src/glsl/glsl_lexer.ll" return SAMPLERCUBE; YY_BREAK case 75: YY_RULE_SETUP -#line 235 "src/glsl/glsl_lexer.ll" +#line 279 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, SAMPLER1DARRAY); YY_BREAK case 76: YY_RULE_SETUP -#line 236 "src/glsl/glsl_lexer.ll" +#line 280 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, SAMPLER2DARRAY); YY_BREAK case 77: YY_RULE_SETUP -#line 237 "src/glsl/glsl_lexer.ll" +#line 281 "src/glsl/glsl_lexer.ll" return SAMPLER1DSHADOW; YY_BREAK case 78: YY_RULE_SETUP -#line 238 "src/glsl/glsl_lexer.ll" +#line 282 "src/glsl/glsl_lexer.ll" return SAMPLER2DSHADOW; YY_BREAK case 79: YY_RULE_SETUP -#line 239 "src/glsl/glsl_lexer.ll" +#line 283 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, SAMPLERCUBESHADOW); YY_BREAK case 80: YY_RULE_SETUP -#line 240 "src/glsl/glsl_lexer.ll" +#line 284 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, SAMPLER1DARRAYSHADOW); YY_BREAK case 81: YY_RULE_SETUP -#line 241 "src/glsl/glsl_lexer.ll" +#line 285 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, SAMPLER2DARRAYSHADOW); YY_BREAK case 82: YY_RULE_SETUP -#line 242 "src/glsl/glsl_lexer.ll" +#line 286 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, ISAMPLER1D); YY_BREAK case 83: YY_RULE_SETUP -#line 243 "src/glsl/glsl_lexer.ll" +#line 287 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, ISAMPLER2D); YY_BREAK case 84: YY_RULE_SETUP -#line 244 "src/glsl/glsl_lexer.ll" +#line 288 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, ISAMPLER3D); YY_BREAK case 85: YY_RULE_SETUP -#line 245 "src/glsl/glsl_lexer.ll" +#line 289 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, ISAMPLERCUBE); YY_BREAK case 86: YY_RULE_SETUP -#line 246 "src/glsl/glsl_lexer.ll" +#line 290 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, ISAMPLER1DARRAY); YY_BREAK case 87: YY_RULE_SETUP -#line 247 "src/glsl/glsl_lexer.ll" +#line 291 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, ISAMPLER2DARRAY); YY_BREAK case 88: YY_RULE_SETUP -#line 248 "src/glsl/glsl_lexer.ll" +#line 292 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, USAMPLER1D); YY_BREAK case 89: YY_RULE_SETUP -#line 249 "src/glsl/glsl_lexer.ll" +#line 293 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, USAMPLER2D); YY_BREAK case 90: YY_RULE_SETUP -#line 250 "src/glsl/glsl_lexer.ll" +#line 294 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, USAMPLER3D); YY_BREAK case 91: YY_RULE_SETUP -#line 251 "src/glsl/glsl_lexer.ll" +#line 295 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, USAMPLERCUBE); YY_BREAK case 92: YY_RULE_SETUP -#line 252 "src/glsl/glsl_lexer.ll" +#line 296 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, USAMPLER1DARRAY); YY_BREAK case 93: YY_RULE_SETUP -#line 253 "src/glsl/glsl_lexer.ll" +#line 297 "src/glsl/glsl_lexer.ll" KEYWORD(130, 130, USAMPLER2DARRAY); YY_BREAK case 94: YY_RULE_SETUP -#line 256 "src/glsl/glsl_lexer.ll" -return STRUCT; +#line 299 "src/glsl/glsl_lexer.ll" +{ + if (yyextra->OES_EGL_image_external_enable) + return SAMPLEREXTERNALOES; + else + return IDENTIFIER; + } YY_BREAK case 95: YY_RULE_SETUP -#line 257 "src/glsl/glsl_lexer.ll" -return VOID_TOK; +#line 307 "src/glsl/glsl_lexer.ll" +return STRUCT; YY_BREAK case 96: YY_RULE_SETUP -#line 259 "src/glsl/glsl_lexer.ll" +#line 308 "src/glsl/glsl_lexer.ll" +return VOID_TOK; + YY_BREAK +case 97: +YY_RULE_SETUP +#line 310 "src/glsl/glsl_lexer.ll" { if ((yyextra->language_version >= 140) || yyextra->AMD_conservative_depth_enable + || yyextra->ARB_conservative_depth_enable || yyextra->ARB_explicit_attrib_location_enable + || yyextra->ARB_uniform_buffer_object_enable || yyextra->ARB_fragment_coord_conventions_enable) { return LAYOUT_TOK; } else { @@ -1945,146 +2019,135 @@ YY_RULE_SETUP } } YY_BREAK -case 97: -YY_RULE_SETUP -#line 271 "src/glsl/glsl_lexer.ll" -return INC_OP; - YY_BREAK case 98: YY_RULE_SETUP -#line 272 "src/glsl/glsl_lexer.ll" -return DEC_OP; +#line 324 "src/glsl/glsl_lexer.ll" +return INC_OP; YY_BREAK case 99: YY_RULE_SETUP -#line 273 "src/glsl/glsl_lexer.ll" -return LE_OP; +#line 325 "src/glsl/glsl_lexer.ll" +return DEC_OP; YY_BREAK case 100: YY_RULE_SETUP -#line 274 "src/glsl/glsl_lexer.ll" -return GE_OP; +#line 326 "src/glsl/glsl_lexer.ll" +return LE_OP; YY_BREAK case 101: YY_RULE_SETUP -#line 275 "src/glsl/glsl_lexer.ll" -return EQ_OP; +#line 327 "src/glsl/glsl_lexer.ll" +return GE_OP; YY_BREAK case 102: YY_RULE_SETUP -#line 276 "src/glsl/glsl_lexer.ll" -return NE_OP; +#line 328 "src/glsl/glsl_lexer.ll" +return EQ_OP; YY_BREAK case 103: YY_RULE_SETUP -#line 277 "src/glsl/glsl_lexer.ll" -return AND_OP; +#line 329 "src/glsl/glsl_lexer.ll" +return NE_OP; YY_BREAK case 104: YY_RULE_SETUP -#line 278 "src/glsl/glsl_lexer.ll" -return OR_OP; +#line 330 "src/glsl/glsl_lexer.ll" +return AND_OP; YY_BREAK case 105: YY_RULE_SETUP -#line 279 "src/glsl/glsl_lexer.ll" -return XOR_OP; +#line 331 "src/glsl/glsl_lexer.ll" +return OR_OP; YY_BREAK case 106: YY_RULE_SETUP -#line 280 "src/glsl/glsl_lexer.ll" -return LEFT_OP; +#line 332 "src/glsl/glsl_lexer.ll" +return XOR_OP; YY_BREAK case 107: YY_RULE_SETUP -#line 281 "src/glsl/glsl_lexer.ll" -return RIGHT_OP; +#line 333 "src/glsl/glsl_lexer.ll" +return LEFT_OP; YY_BREAK case 108: YY_RULE_SETUP -#line 283 "src/glsl/glsl_lexer.ll" -return MUL_ASSIGN; +#line 334 "src/glsl/glsl_lexer.ll" +return RIGHT_OP; YY_BREAK case 109: YY_RULE_SETUP -#line 284 "src/glsl/glsl_lexer.ll" -return DIV_ASSIGN; +#line 336 "src/glsl/glsl_lexer.ll" +return MUL_ASSIGN; YY_BREAK case 110: YY_RULE_SETUP -#line 285 "src/glsl/glsl_lexer.ll" -return ADD_ASSIGN; +#line 337 "src/glsl/glsl_lexer.ll" +return DIV_ASSIGN; YY_BREAK case 111: YY_RULE_SETUP -#line 286 "src/glsl/glsl_lexer.ll" -return MOD_ASSIGN; +#line 338 "src/glsl/glsl_lexer.ll" +return ADD_ASSIGN; YY_BREAK case 112: YY_RULE_SETUP -#line 287 "src/glsl/glsl_lexer.ll" -return LEFT_ASSIGN; +#line 339 "src/glsl/glsl_lexer.ll" +return MOD_ASSIGN; YY_BREAK case 113: YY_RULE_SETUP -#line 288 "src/glsl/glsl_lexer.ll" -return RIGHT_ASSIGN; +#line 340 "src/glsl/glsl_lexer.ll" +return LEFT_ASSIGN; YY_BREAK case 114: YY_RULE_SETUP -#line 289 "src/glsl/glsl_lexer.ll" -return AND_ASSIGN; +#line 341 "src/glsl/glsl_lexer.ll" +return RIGHT_ASSIGN; YY_BREAK case 115: YY_RULE_SETUP -#line 290 "src/glsl/glsl_lexer.ll" -return XOR_ASSIGN; +#line 342 "src/glsl/glsl_lexer.ll" +return AND_ASSIGN; YY_BREAK case 116: YY_RULE_SETUP -#line 291 "src/glsl/glsl_lexer.ll" -return OR_ASSIGN; +#line 343 "src/glsl/glsl_lexer.ll" +return XOR_ASSIGN; YY_BREAK case 117: YY_RULE_SETUP -#line 292 "src/glsl/glsl_lexer.ll" -return SUB_ASSIGN; +#line 344 "src/glsl/glsl_lexer.ll" +return OR_ASSIGN; YY_BREAK case 118: YY_RULE_SETUP -#line 294 "src/glsl/glsl_lexer.ll" -{ - yylval->n = strtol(yytext, NULL, 10); - return IS_UINT ? UINTCONSTANT : INTCONSTANT; - } +#line 345 "src/glsl/glsl_lexer.ll" +return SUB_ASSIGN; YY_BREAK case 119: YY_RULE_SETUP -#line 298 "src/glsl/glsl_lexer.ll" +#line 347 "src/glsl/glsl_lexer.ll" { - yylval->n = strtol(yytext + 2, NULL, 16); - return IS_UINT ? UINTCONSTANT : INTCONSTANT; + return LITERAL_INTEGER(10); } YY_BREAK case 120: YY_RULE_SETUP -#line 302 "src/glsl/glsl_lexer.ll" +#line 350 "src/glsl/glsl_lexer.ll" { - yylval->n = strtol(yytext, NULL, 8); - return IS_UINT ? UINTCONSTANT : INTCONSTANT; + return LITERAL_INTEGER(16); } YY_BREAK case 121: YY_RULE_SETUP -#line 307 "src/glsl/glsl_lexer.ll" +#line 353 "src/glsl/glsl_lexer.ll" { - yylval->real = glsl_strtod(yytext, NULL); - return FLOATCONSTANT; + return LITERAL_INTEGER(8); } YY_BREAK case 122: YY_RULE_SETUP -#line 311 "src/glsl/glsl_lexer.ll" +#line 357 "src/glsl/glsl_lexer.ll" { yylval->real = glsl_strtod(yytext, NULL); return FLOATCONSTANT; @@ -2092,7 +2155,7 @@ YY_RULE_SETUP YY_BREAK case 123: YY_RULE_SETUP -#line 315 "src/glsl/glsl_lexer.ll" +#line 361 "src/glsl/glsl_lexer.ll" { yylval->real = glsl_strtod(yytext, NULL); return FLOATCONSTANT; @@ -2100,7 +2163,7 @@ YY_RULE_SETUP YY_BREAK case 124: YY_RULE_SETUP -#line 319 "src/glsl/glsl_lexer.ll" +#line 365 "src/glsl/glsl_lexer.ll" { yylval->real = glsl_strtod(yytext, NULL); return FLOATCONSTANT; @@ -2108,7 +2171,7 @@ YY_RULE_SETUP YY_BREAK case 125: YY_RULE_SETUP -#line 323 "src/glsl/glsl_lexer.ll" +#line 369 "src/glsl/glsl_lexer.ll" { yylval->real = glsl_strtod(yytext, NULL); return FLOATCONSTANT; @@ -2116,426 +2179,455 @@ YY_RULE_SETUP YY_BREAK case 126: YY_RULE_SETUP -#line 328 "src/glsl/glsl_lexer.ll" +#line 373 "src/glsl/glsl_lexer.ll" +{ + yylval->real = glsl_strtod(yytext, NULL); + return FLOATCONSTANT; + } + YY_BREAK +case 127: +YY_RULE_SETUP +#line 378 "src/glsl/glsl_lexer.ll" { yylval->n = 1; return BOOLCONSTANT; } YY_BREAK -case 127: +case 128: YY_RULE_SETUP -#line 332 "src/glsl/glsl_lexer.ll" +#line 382 "src/glsl/glsl_lexer.ll" { yylval->n = 0; return BOOLCONSTANT; } YY_BREAK /* Reserved words in GLSL 1.10. */ -case 128: -YY_RULE_SETUP -#line 339 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, ASM); - YY_BREAK case 129: YY_RULE_SETUP -#line 340 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, CLASS); +#line 389 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, ASM); YY_BREAK case 130: YY_RULE_SETUP -#line 341 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, UNION); +#line 390 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, CLASS); YY_BREAK case 131: YY_RULE_SETUP -#line 342 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, ENUM); +#line 391 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, UNION); YY_BREAK case 132: YY_RULE_SETUP -#line 343 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, TYPEDEF); +#line 392 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, ENUM); YY_BREAK case 133: YY_RULE_SETUP -#line 344 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, TEMPLATE); +#line 393 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, TYPEDEF); YY_BREAK case 134: YY_RULE_SETUP -#line 345 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, THIS); +#line 394 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, TEMPLATE); YY_BREAK case 135: YY_RULE_SETUP -#line 346 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, PACKED_TOK); +#line 395 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, THIS); YY_BREAK case 136: YY_RULE_SETUP -#line 347 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, GOTO); +#line 396 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 140 || yyextra->ARB_uniform_buffer_object_enable, PACKED_TOK); YY_BREAK case 137: YY_RULE_SETUP -#line 348 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 130, SWITCH); +#line 397 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, GOTO); YY_BREAK case 138: YY_RULE_SETUP -#line 349 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 130, DEFAULT); +#line 398 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 130, SWITCH); YY_BREAK case 139: YY_RULE_SETUP -#line 350 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, INLINE_TOK); +#line 399 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 130, DEFAULT); YY_BREAK case 140: YY_RULE_SETUP -#line 351 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, NOINLINE); +#line 400 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, INLINE_TOK); YY_BREAK case 141: YY_RULE_SETUP -#line 352 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, VOLATILE); +#line 401 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, NOINLINE); YY_BREAK case 142: YY_RULE_SETUP -#line 353 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, PUBLIC_TOK); +#line 402 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, VOLATILE); YY_BREAK case 143: YY_RULE_SETUP -#line 354 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, STATIC); +#line 403 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, PUBLIC_TOK); YY_BREAK case 144: YY_RULE_SETUP -#line 355 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, EXTERN); +#line 404 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, STATIC); YY_BREAK case 145: YY_RULE_SETUP -#line 356 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, EXTERNAL); +#line 405 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, EXTERN); YY_BREAK case 146: YY_RULE_SETUP -#line 357 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, INTERFACE); +#line 406 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, EXTERNAL); YY_BREAK case 147: YY_RULE_SETUP -#line 358 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, LONG_TOK); +#line 407 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, INTERFACE); YY_BREAK case 148: YY_RULE_SETUP -#line 359 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, SHORT_TOK); +#line 408 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, LONG_TOK); YY_BREAK case 149: YY_RULE_SETUP -#line 360 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 400, DOUBLE_TOK); +#line 409 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, SHORT_TOK); YY_BREAK case 150: YY_RULE_SETUP -#line 361 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, HALF); +#line 410 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 400, DOUBLE_TOK); YY_BREAK case 151: YY_RULE_SETUP -#line 362 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, FIXED_TOK); +#line 411 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, HALF); YY_BREAK case 152: YY_RULE_SETUP -#line 363 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, UNSIGNED); +#line 412 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, FIXED_TOK); YY_BREAK case 153: YY_RULE_SETUP -#line 364 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, INPUT_TOK); +#line 413 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, UNSIGNED); YY_BREAK case 154: YY_RULE_SETUP -#line 365 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, OUTPUT); +#line 414 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, INPUT_TOK); YY_BREAK case 155: YY_RULE_SETUP -#line 366 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, HVEC2); +#line 415 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, OUTPUT); YY_BREAK case 156: YY_RULE_SETUP -#line 367 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, HVEC3); +#line 416 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, HVEC2); YY_BREAK case 157: YY_RULE_SETUP -#line 368 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, HVEC4); +#line 417 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, HVEC3); YY_BREAK case 158: YY_RULE_SETUP -#line 369 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 400, DVEC2); +#line 418 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, HVEC4); YY_BREAK case 159: YY_RULE_SETUP -#line 370 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 400, DVEC3); +#line 419 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 400, DVEC2); YY_BREAK case 160: YY_RULE_SETUP -#line 371 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 400, DVEC4); +#line 420 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 400, DVEC3); YY_BREAK case 161: YY_RULE_SETUP -#line 372 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, FVEC2); +#line 421 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 400, DVEC4); YY_BREAK case 162: YY_RULE_SETUP -#line 373 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, FVEC3); +#line 422 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, FVEC2); YY_BREAK case 163: YY_RULE_SETUP -#line 374 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, FVEC4); +#line 423 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, FVEC3); YY_BREAK case 164: YY_RULE_SETUP -#line 375 "src/glsl/glsl_lexer.ll" -return SAMPLER2DRECT; +#line 424 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, FVEC4); YY_BREAK case 165: YY_RULE_SETUP -#line 376 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, SAMPLER3DRECT); +#line 425 "src/glsl/glsl_lexer.ll" +return SAMPLER2DRECT; YY_BREAK case 166: YY_RULE_SETUP -#line 377 "src/glsl/glsl_lexer.ll" -return SAMPLER2DRECTSHADOW; +#line 426 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, SAMPLER3DRECT); YY_BREAK case 167: YY_RULE_SETUP -#line 378 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, SIZEOF); +#line 427 "src/glsl/glsl_lexer.ll" +return SAMPLER2DRECTSHADOW; YY_BREAK case 168: YY_RULE_SETUP -#line 379 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, CAST); +#line 428 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, SIZEOF); YY_BREAK case 169: YY_RULE_SETUP -#line 380 "src/glsl/glsl_lexer.ll" -KEYWORD(110 || ES, 999, NAMESPACE); +#line 429 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, CAST); YY_BREAK case 170: YY_RULE_SETUP -#line 381 "src/glsl/glsl_lexer.ll" +#line 430 "src/glsl/glsl_lexer.ll" +KEYWORD(110 || ES, 999, NAMESPACE); + YY_BREAK +case 171: +YY_RULE_SETUP +#line 431 "src/glsl/glsl_lexer.ll" KEYWORD(110 || ES, 999, USING); YY_BREAK /* Additional reserved words in GLSL 1.20. */ -case 171: -YY_RULE_SETUP -#line 384 "src/glsl/glsl_lexer.ll" -KEYWORD(120, 130 || ES, LOWP); - YY_BREAK case 172: YY_RULE_SETUP -#line 385 "src/glsl/glsl_lexer.ll" -KEYWORD(120, 130 || ES, MEDIUMP); +#line 434 "src/glsl/glsl_lexer.ll" +KEYWORD(120, 130 || ES, LOWP); YY_BREAK case 173: YY_RULE_SETUP -#line 386 "src/glsl/glsl_lexer.ll" -KEYWORD(120, 130 || ES, HIGHP); +#line 435 "src/glsl/glsl_lexer.ll" +KEYWORD(120, 130 || ES, MEDIUMP); YY_BREAK case 174: YY_RULE_SETUP -#line 387 "src/glsl/glsl_lexer.ll" +#line 436 "src/glsl/glsl_lexer.ll" +KEYWORD(120, 130 || ES, HIGHP); + YY_BREAK +case 175: +YY_RULE_SETUP +#line 437 "src/glsl/glsl_lexer.ll" KEYWORD(120, 130 || ES, PRECISION); YY_BREAK /* Additional reserved words in GLSL 1.30. */ -case 175: -YY_RULE_SETUP -#line 390 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 130, CASE); - YY_BREAK case 176: YY_RULE_SETUP -#line 391 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, COMMON); +#line 440 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 130, CASE); YY_BREAK case 177: YY_RULE_SETUP -#line 392 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, PARTITION); +#line 441 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, COMMON); YY_BREAK case 178: YY_RULE_SETUP -#line 393 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, ACTIVE); +#line 442 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, PARTITION); YY_BREAK case 179: YY_RULE_SETUP -#line 394 "src/glsl/glsl_lexer.ll" -KEYWORD(130 || ES, 999, SUPERP); +#line 443 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, ACTIVE); YY_BREAK case 180: YY_RULE_SETUP -#line 395 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 140, SAMPLERBUFFER); +#line 444 "src/glsl/glsl_lexer.ll" +KEYWORD(130 || ES, 999, SUPERP); YY_BREAK case 181: YY_RULE_SETUP -#line 396 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, FILTER); +#line 445 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 140, SAMPLERBUFFER); YY_BREAK case 182: YY_RULE_SETUP -#line 397 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE1D); +#line 446 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, FILTER); YY_BREAK case 183: YY_RULE_SETUP -#line 398 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE2D); +#line 447 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE1D); YY_BREAK case 184: YY_RULE_SETUP -#line 399 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE3D); +#line 448 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE2D); YY_BREAK case 185: YY_RULE_SETUP -#line 400 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGECUBE); +#line 449 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE3D); YY_BREAK case 186: YY_RULE_SETUP -#line 401 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGE1D); +#line 450 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGECUBE); YY_BREAK case 187: YY_RULE_SETUP -#line 402 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGE2D); +#line 451 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGE1D); YY_BREAK case 188: YY_RULE_SETUP -#line 403 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGE3D); +#line 452 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGE2D); YY_BREAK case 189: YY_RULE_SETUP -#line 404 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGECUBE); +#line 453 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGE3D); YY_BREAK case 190: YY_RULE_SETUP -#line 405 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGE1D); +#line 454 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGECUBE); YY_BREAK case 191: YY_RULE_SETUP -#line 406 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGE2D); +#line 455 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGE1D); YY_BREAK case 192: YY_RULE_SETUP -#line 407 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGE3D); +#line 456 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGE2D); YY_BREAK case 193: YY_RULE_SETUP -#line 408 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGECUBE); +#line 457 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGE3D); YY_BREAK case 194: YY_RULE_SETUP -#line 409 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE1DARRAY); +#line 458 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGECUBE); YY_BREAK case 195: YY_RULE_SETUP -#line 410 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE2DARRAY); +#line 459 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE1DARRAY); YY_BREAK case 196: YY_RULE_SETUP -#line 411 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGE1DARRAY); +#line 460 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE2DARRAY); YY_BREAK case 197: YY_RULE_SETUP -#line 412 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGE2DARRAY); +#line 461 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGE1DARRAY); YY_BREAK case 198: YY_RULE_SETUP -#line 413 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGE1DARRAY); +#line 462 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGE2DARRAY); YY_BREAK case 199: YY_RULE_SETUP -#line 414 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGE2DARRAY); +#line 463 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGE1DARRAY); YY_BREAK case 200: YY_RULE_SETUP -#line 415 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE1DSHADOW); +#line 464 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGE2DARRAY); YY_BREAK case 201: YY_RULE_SETUP -#line 416 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE2DSHADOW); +#line 465 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE1DSHADOW); YY_BREAK case 202: YY_RULE_SETUP -#line 417 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE1DARRAYSHADOW); +#line 466 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE2DSHADOW); YY_BREAK case 203: YY_RULE_SETUP -#line 418 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGE2DARRAYSHADOW); +#line 467 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE1DARRAYSHADOW); YY_BREAK case 204: YY_RULE_SETUP -#line 419 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IMAGEBUFFER); +#line 468 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGE2DARRAYSHADOW); YY_BREAK case 205: YY_RULE_SETUP -#line 420 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, IIMAGEBUFFER); +#line 469 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IMAGEBUFFER); YY_BREAK case 206: YY_RULE_SETUP -#line 421 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, UIMAGEBUFFER); +#line 470 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, IIMAGEBUFFER); YY_BREAK case 207: YY_RULE_SETUP -#line 422 "src/glsl/glsl_lexer.ll" -KEYWORD(130, 999, ROW_MAJOR); +#line 471 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 999, UIMAGEBUFFER); YY_BREAK case 208: YY_RULE_SETUP -#line 424 "src/glsl/glsl_lexer.ll" +#line 472 "src/glsl/glsl_lexer.ll" +KEYWORD(130, 140 || yyextra->ARB_uniform_buffer_object_enable, ROW_MAJOR); + YY_BREAK +/* Additional reserved words in GLSL 1.40 */ +case 209: +YY_RULE_SETUP +#line 475 "src/glsl/glsl_lexer.ll" +KEYWORD(140, 140, ISAMPLER2DRECT); + YY_BREAK +case 210: +YY_RULE_SETUP +#line 476 "src/glsl/glsl_lexer.ll" +KEYWORD(140, 140, USAMPLER2DRECT); + YY_BREAK +case 211: +YY_RULE_SETUP +#line 477 "src/glsl/glsl_lexer.ll" +KEYWORD(140, 140, ISAMPLERBUFFER); + YY_BREAK +case 212: +YY_RULE_SETUP +#line 478 "src/glsl/glsl_lexer.ll" +KEYWORD(140, 140, USAMPLERBUFFER); + YY_BREAK +case 213: +YY_RULE_SETUP +#line 480 "src/glsl/glsl_lexer.ll" { struct _mesa_glsl_parse_state *state = yyextra; void *ctx = state; @@ -2543,17 +2635,17 @@ YY_RULE_SETUP return classify_identifier(state, yytext); } YY_BREAK -case 209: +case 214: YY_RULE_SETUP -#line 431 "src/glsl/glsl_lexer.ll" +#line 487 "src/glsl/glsl_lexer.ll" { return yytext[0]; } YY_BREAK -case 210: +case 215: YY_RULE_SETUP -#line 433 "src/glsl/glsl_lexer.ll" +#line 489 "src/glsl/glsl_lexer.ll" ECHO; YY_BREAK -#line 2557 "src/glsl/glsl_lexer.cpp" +#line 2649 "src/glsl/glsl_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(PP): case YY_STATE_EOF(PRAGMA): @@ -2851,7 +2943,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 836 ) + if ( yy_current_state >= 867 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2880,11 +2972,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 836 ) + if ( yy_current_state >= 867 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 835); + yy_is_jam = (yy_current_state == 866); return yy_is_jam ? 0 : yy_current_state; } @@ -3695,7 +3787,7 @@ void _mesa_glsl_free (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 433 "src/glsl/glsl_lexer.ll" +#line 489 "src/glsl/glsl_lexer.ll" diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.ll b/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.ll index 43d1ae90b..d98384aae 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.ll +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_lexer.ll @@ -22,6 +22,7 @@ * DEALINGS IN THE SOFTWARE. */ #include +#include #include "strtod.h" #include "ast.h" #include "glsl_parser_extras.h" @@ -43,8 +44,6 @@ static int classify_identifier(struct _mesa_glsl_parse_state *, const char *); #define YY_USER_INIT yylineno = 0; yycolumn = 0; -#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U') - /* A macro for handling reserved words and keywords across language versions. * * Certain words start out as identifiers, become reserved words in @@ -81,6 +80,51 @@ static int classify_identifier(struct _mesa_glsl_parse_state *, const char *); * ...means the word is a legal keyword in GLSL ES 1.00. */ #define ES yyextra->es_shader + +static int +literal_integer(char *text, int len, struct _mesa_glsl_parse_state *state, + YYSTYPE *lval, YYLTYPE *lloc, int base) +{ + bool is_uint = (text[len - 1] == 'u' || + text[len - 1] == 'U'); + const char *digits = text; + + /* Skip "0x" */ + if (base == 16) + digits += 2; + +#ifdef _MSC_VER + unsigned __int64 value = _strtoui64(digits, NULL, base); +#else + unsigned long long value = strtoull(digits, NULL, base); +#endif + + lval->n = (int)value; + + if (value > UINT_MAX) { + /* Note that signed 0xffffffff is valid, not out of range! */ + if (state->language_version >= 130) { + _mesa_glsl_error(lloc, state, + "Literal value `%s' out of range", text); + } else { + _mesa_glsl_warning(lloc, state, + "Literal value `%s' out of range", text); + } + } else if (base == 10 && !is_uint && (unsigned)value > (unsigned)INT_MAX + 1) { + /* Tries to catch unintentionally providing a negative value. + * Note that -2147483648 is parsed as -(2147483648), so we don't + * want to warn for INT_MAX. + */ + _mesa_glsl_warning(lloc, state, + "Signed literal value `%s' is interpreted as %d", + text, lval->n); + } + return is_uint ? UINTCONSTANT : INTCONSTANT; +} + +#define LITERAL_INTEGER(base) \ + literal_integer(yytext, yyleng, yyextra, yylval, yylloc, base) + %} %option bison-bridge bison-locations reentrant noyywrap @@ -104,7 +148,7 @@ HASH ^{SPC}#{SPC} /* Preprocessor tokens. */ ^[ \t]*#[ \t]*$ ; -^[ \t]*#[ \t]*version { BEGIN PP; return VERSION; } +^[ \t]*#[ \t]*version { BEGIN PP; return VERSION_TOK; } ^[ \t]*#[ \t]*extension { BEGIN PP; return EXTENSION; } {HASH}line{SPCP}{INT_T}{SPCP}{INT_T}{SPC}$ { /* Eat characters until the first digit is @@ -252,6 +296,13 @@ usamplerCube KEYWORD(130, 130, USAMPLERCUBE); usampler1DArray KEYWORD(130, 130, USAMPLER1DARRAY); usampler2DArray KEYWORD(130, 130, USAMPLER2DARRAY); +samplerExternalOES { + if (yyextra->OES_EGL_image_external_enable) + return SAMPLEREXTERNALOES; + else + return IDENTIFIER; + } + struct return STRUCT; void return VOID_TOK; @@ -259,7 +310,9 @@ void return VOID_TOK; layout { if ((yyextra->language_version >= 140) || yyextra->AMD_conservative_depth_enable + || yyextra->ARB_conservative_depth_enable || yyextra->ARB_explicit_attrib_location_enable + || yyextra->ARB_uniform_buffer_object_enable || yyextra->ARB_fragment_coord_conventions_enable) { return LAYOUT_TOK; } else { @@ -292,16 +345,13 @@ layout { -= return SUB_ASSIGN; [1-9][0-9]*[uU]? { - yylval->n = strtol(yytext, NULL, 10); - return IS_UINT ? UINTCONSTANT : INTCONSTANT; + return LITERAL_INTEGER(10); } 0[xX][0-9a-fA-F]+[uU]? { - yylval->n = strtol(yytext + 2, NULL, 16); - return IS_UINT ? UINTCONSTANT : INTCONSTANT; + return LITERAL_INTEGER(16); } 0[0-7]*[uU]? { - yylval->n = strtol(yytext, NULL, 8); - return IS_UINT ? UINTCONSTANT : INTCONSTANT; + return LITERAL_INTEGER(8); } [0-9]+\.[0-9]+([eE][+-]?[0-9]+)?[fF]? { @@ -343,7 +393,7 @@ enum KEYWORD(110 || ES, 999, ENUM); typedef KEYWORD(110 || ES, 999, TYPEDEF); template KEYWORD(110 || ES, 999, TEMPLATE); this KEYWORD(110 || ES, 999, THIS); -packed KEYWORD(110 || ES, 999, PACKED_TOK); +packed KEYWORD(110 || ES, 140 || yyextra->ARB_uniform_buffer_object_enable, PACKED_TOK); goto KEYWORD(110 || ES, 999, GOTO); switch KEYWORD(110 || ES, 130, SWITCH); default KEYWORD(110 || ES, 130, DEFAULT); @@ -419,7 +469,13 @@ image2DArrayShadow KEYWORD(130, 999, IMAGE2DARRAYSHADOW); imageBuffer KEYWORD(130, 999, IMAGEBUFFER); iimageBuffer KEYWORD(130, 999, IIMAGEBUFFER); uimageBuffer KEYWORD(130, 999, UIMAGEBUFFER); -row_major KEYWORD(130, 999, ROW_MAJOR); +row_major KEYWORD(130, 140 || yyextra->ARB_uniform_buffer_object_enable, ROW_MAJOR); + + /* Additional reserved words in GLSL 1.40 */ +isampler2DRect KEYWORD(140, 140, ISAMPLER2DRECT); +usampler2DRect KEYWORD(140, 140, USAMPLER2DRECT); +isamplerBuffer KEYWORD(140, 140, ISAMPLERBUFFER); +usamplerBuffer KEYWORD(140, 140, USAMPLERBUFFER); [_a-zA-Z][_a-zA-Z0-9]* { struct _mesa_glsl_parse_state *state = yyextra; diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp b/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp index bbfec67ab..41a73fcd6 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp @@ -7,6 +7,7 @@ #include "ir_print_visitor.h" #include "loop_analysis.h" #include "program.h" +#include "linker.h" extern "C" struct gl_shader * @@ -20,7 +21,6 @@ initialize_mesa_context(struct gl_context *ctx, gl_api api) ctx->API = api; - ctx->Extensions.ARB_draw_buffers = GL_TRUE; ctx->Extensions.ARB_fragment_coord_conventions = GL_TRUE; ctx->Extensions.EXT_texture_array = GL_TRUE; ctx->Extensions.NV_texture_rectangle = GL_TRUE; @@ -29,19 +29,19 @@ initialize_mesa_context(struct gl_context *ctx, gl_api api) // Enable opengl es extensions we care about here if (api == API_OPENGLES2) { - ctx->Extensions.OES_standard_derivatives = GL_TRUE; + ctx->Extensions.OES_standard_derivatives = GL_TRUE; + ctx->Extensions.EXT_shadow_samplers = GL_TRUE; } + ctx->Const.GLSLVersion = 140; - /* 1.10 minimums. */ + /* 1.20 minimums. */ ctx->Const.MaxLights = 8; ctx->Const.MaxClipPlanes = 8; ctx->Const.MaxTextureUnits = 2; - /* More than the 1.10 minimum to appease parser tests taken from - * apps that (hopefully) already checked the number of coords. - */ - ctx->Const.MaxTextureCoordUnits = 4; + /* allow high amount */ + ctx->Const.MaxTextureCoordUnits = 16; ctx->Const.VertexProgram.MaxAttribs = 16; ctx->Const.VertexProgram.MaxUniformComponents = 512; @@ -82,8 +82,8 @@ void glslopt_cleanup (glslopt_ctx* ctx) } - -struct glslopt_shader { +struct glslopt_shader +{ static void* operator new(size_t size, void *ctx) { void *node; @@ -102,7 +102,28 @@ struct glslopt_shader { , status(false) { infoLog = "Shader not compiled yet"; + + whole_program = rzalloc (NULL, struct gl_shader_program); + assert(whole_program != NULL); + whole_program->InfoLog = ralloc_strdup(whole_program, ""); + + whole_program->Shaders = reralloc(whole_program, whole_program->Shaders, struct gl_shader *, whole_program->NumShaders + 1); + assert(whole_program->Shaders != NULL); + + shader = rzalloc(whole_program, gl_shader); + whole_program->Shaders[whole_program->NumShaders] = shader; + whole_program->NumShaders++; } + + ~glslopt_shader() + { + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) + ralloc_free(whole_program->_LinkedShaders[i]); + ralloc_free(whole_program); + } + + struct gl_shader_program* whole_program; + struct gl_shader* shader; char* rawOutput; char* optimizedOutput; @@ -123,12 +144,14 @@ static inline void debug_print_ir (const char* name, exec_list* ir, _mesa_glsl_p static void propagate_precision_deref(ir_instruction *ir, void *data) { + // variable -> deference ir_dereference_variable* der = ir->as_dereference_variable(); if (der && der->get_precision() == glsl_precision_undefined && der->var->precision != glsl_precision_undefined) { der->set_precision ((glsl_precision)der->var->precision); *(bool*)data = true; } + // swizzle value -> swizzle ir_swizzle* swz = ir->as_swizzle(); if (swz && swz->get_precision() == glsl_precision_undefined && swz->val->get_precision() != glsl_precision_undefined) { @@ -138,6 +161,30 @@ static void propagate_precision_deref(ir_instruction *ir, void *data) } +static void propagate_precision_expr(ir_instruction *ir, void *data) +{ + ir_expression* expr = ir->as_expression(); + if (!expr) + return; + if (expr->get_precision() != glsl_precision_undefined) + return; + + glsl_precision prec_params_max = glsl_precision_undefined; + for (int i = 0; i < expr->get_num_operands(); ++i) + { + ir_rvalue* op = expr->operands[i]; + if (op && op->get_precision() != glsl_precision_undefined) + prec_params_max = higher_precision (prec_params_max, op->get_precision()); + } + if (expr->get_precision() != prec_params_max) + { + expr->set_precision (prec_params_max); + *(bool*)data = true; + } + +} + + static void propagate_precision_assign(ir_instruction *ir, void *data) { ir_assignment* ass = ir->as_assignment(); @@ -163,10 +210,12 @@ static void propagate_precision_call(ir_instruction *ir, void *data) ir_call* call = ir->as_call(); if (!call) return; - if (call->get_precision() == glsl_precision_undefined /*&& call->get_callee()->precision == glsl_precision_undefined*/) + if (!call->return_deref) + return; + if (call->return_deref->get_precision() == glsl_precision_undefined /*&& call->callee->precision == glsl_precision_undefined*/) { glsl_precision prec_params_max = glsl_precision_undefined; - exec_list_iterator iter_sig = call->get_callee()->parameters.iterator(); + exec_list_iterator iter_sig = call->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter_param, call->actual_parameters) { ir_variable* sig_param = (ir_variable*)iter_sig.get(); @@ -180,14 +229,15 @@ static void propagate_precision_call(ir_instruction *ir, void *data) iter_sig.next(); } - if (call->get_precision() != prec_params_max) + if (call->return_deref->get_precision() != prec_params_max) { - call->set_precision (prec_params_max); + call->return_deref->set_precision (prec_params_max); *(bool*)data = true; } } } + static bool propagate_precision(exec_list* list) { bool anyProgress = false; @@ -199,6 +249,7 @@ static bool propagate_precision(exec_list* list) visit_tree (ir, propagate_precision_deref, &res); visit_tree (ir, propagate_precision_assign, &res); visit_tree (ir, propagate_precision_call, &res); + visit_tree (ir, propagate_precision_expr, &res); } anyProgress |= res; } while (res); @@ -206,29 +257,83 @@ static bool propagate_precision(exec_list* list) } +static void do_optimization_passes(exec_list* ir, bool linked, _mesa_glsl_parse_state* state, glslopt_ctx* ctx) +{ + bool progress; + do { + progress = false; + bool progress2; + debug_print_ir ("Initial", ir, state, ctx->mem_ctx); + if (linked) { + progress2 = do_function_inlining(ir); progress |= progress2; if (progress2) debug_print_ir ("After inlining", ir, state, ctx->mem_ctx); + progress2 = do_dead_functions(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead functions", ir, state, ctx->mem_ctx); + progress2 = do_structure_splitting(ir); progress |= progress2; if (progress2) debug_print_ir ("After struct splitting", ir, state, ctx->mem_ctx); + } + progress2 = do_if_simplification(ir); progress |= progress2; if (progress2) debug_print_ir ("After if simpl", ir, state, ctx->mem_ctx); + progress2 = propagate_precision (ir); progress |= progress2; if (progress2) debug_print_ir ("After prec propagation", ir, state, ctx->mem_ctx); + progress2 = do_copy_propagation(ir); progress |= progress2; if (progress2) debug_print_ir ("After copy propagation", ir, state, ctx->mem_ctx); + progress2 = do_copy_propagation_elements(ir); progress |= progress2; if (progress2) debug_print_ir ("After copy propagation elems", ir, state, ctx->mem_ctx); + if (linked) { + progress2 = do_dead_code(ir,false); progress |= progress2; if (progress2) debug_print_ir ("After dead code", ir, state, ctx->mem_ctx); + } else { + progress2 = do_dead_code_unlinked(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead code unlinked", ir, state, ctx->mem_ctx); + } + progress2 = do_dead_code_local(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead code local", ir, state, ctx->mem_ctx); + progress2 = propagate_precision (ir); progress |= progress2; if (progress2) debug_print_ir ("After prec propagation", ir, state, ctx->mem_ctx); + progress2 = do_tree_grafting(ir); progress |= progress2; if (progress2) debug_print_ir ("After tree grafting", ir, state, ctx->mem_ctx); + progress2 = do_constant_propagation(ir); progress |= progress2; if (progress2) debug_print_ir ("After const propagation", ir, state, ctx->mem_ctx); + if (linked) { + progress2 = do_constant_variable(ir); progress |= progress2; if (progress2) debug_print_ir ("After const variable", ir, state, ctx->mem_ctx); + } else { + progress2 = do_constant_variable_unlinked(ir); progress |= progress2; if (progress2) debug_print_ir ("After const variable unlinked", ir, state, ctx->mem_ctx); + } + progress2 = do_constant_folding(ir); progress |= progress2; if (progress2) debug_print_ir ("After const folding", ir, state, ctx->mem_ctx); + progress2 = do_algebraic(ir); progress |= progress2; if (progress2) debug_print_ir ("After algebraic", ir, state, ctx->mem_ctx); + progress2 = do_lower_jumps(ir); progress |= progress2; if (progress2) debug_print_ir ("After lower jumps", ir, state, ctx->mem_ctx); + progress2 = do_vec_index_to_swizzle(ir); progress |= progress2; if (progress2) debug_print_ir ("After vec index to swizzle", ir, state, ctx->mem_ctx); + //progress2 = do_vec_index_to_cond_assign(ir); progress |= progress2; if (progress2) debug_print_ir ("After vec index to cond assign", ir, state, ctx->mem_ctx); + progress2 = do_swizzle_swizzle(ir); progress |= progress2; if (progress2) debug_print_ir ("After swizzle swizzle", ir, state, ctx->mem_ctx); + progress2 = do_noop_swizzle(ir); progress |= progress2; if (progress2) debug_print_ir ("After noop swizzle", ir, state, ctx->mem_ctx); + progress2 = optimize_split_arrays(ir, linked); progress |= progress2; if (progress2) debug_print_ir ("After split arrays", ir, state, ctx->mem_ctx); + progress2 = optimize_redundant_jumps(ir); progress |= progress2; if (progress2) debug_print_ir ("After redundant jumps", ir, state, ctx->mem_ctx); + + // do loop stuff only when linked; otherwise causes duplicate loop induction variable + // problems (ast-in.txt test) + if (linked) + { + loop_state *ls = analyze_loop_variables(ir); + if (ls->loop_found) { + progress2 = set_loop_controls(ir, ls); progress |= progress2; if (progress2) debug_print_ir ("After set loop", ir, state, ctx->mem_ctx); + progress2 = unroll_loops(ir, ls, 8); progress |= progress2; if (progress2) debug_print_ir ("After unroll", ir, state, ctx->mem_ctx); + } + delete ls; + } + } while (progress); +} + + glslopt_shader* glslopt_optimize (glslopt_ctx* ctx, glslopt_shader_type type, const char* shaderSource, unsigned options) { glslopt_shader* shader = new (ctx->mem_ctx) glslopt_shader (); - GLenum glType = 0; PrintGlslMode printMode; switch (type) { - case kGlslOptShaderVertex: glType = GL_VERTEX_SHADER; printMode = kPrintGlslVertex; break; - case kGlslOptShaderFragment: glType = GL_FRAGMENT_SHADER; printMode = kPrintGlslFragment; break; + case kGlslOptShaderVertex: shader->shader->Type = GL_VERTEX_SHADER; printMode = kPrintGlslVertex; break; + case kGlslOptShaderFragment: shader->shader->Type = GL_FRAGMENT_SHADER; printMode = kPrintGlslFragment; break; } - if (!glType) + if (!shader->shader->Type) { shader->infoLog = ralloc_asprintf (ctx->mem_ctx, "Unknown shader type %d", (int)type); shader->status = false; return shader; } - - _mesa_glsl_parse_state* state = new (ctx->mem_ctx) _mesa_glsl_parse_state (&ctx->mesa_ctx, glType, ctx->mem_ctx); + + _mesa_glsl_parse_state* state = new (ctx->mem_ctx) _mesa_glsl_parse_state (&ctx->mesa_ctx, shader->shader->Type, ctx->mem_ctx); state->error = 0; if (!(options & kGlslOptionSkipPreprocessor)) { - state->error = preprocess (state, &shaderSource, &state->info_log, state->extensions, ctx->mesa_ctx.API); + state->error = glcpp_preprocess (state, &shaderSource, &state->info_log, state->extensions, ctx->mesa_ctx.API); if (state->error) { shader->status = !state->error; @@ -242,6 +347,7 @@ glslopt_shader* glslopt_optimize (glslopt_ctx* ctx, glslopt_shader_type type, co _mesa_glsl_lexer_dtor (state); exec_list* ir = new (ctx->mem_ctx) exec_list(); + shader->shader->ir = ir; if (!state->error && !state->translation_unit.is_empty()) _mesa_ast_to_hir (ir, state); @@ -251,55 +357,38 @@ glslopt_shader* glslopt_optimize (glslopt_ctx* ctx, glslopt_shader_type type, co validate_ir_tree(ir); shader->rawOutput = _mesa_print_ir_glsl(ir, state, ralloc_strdup(ctx->mem_ctx, ""), printMode); } - - // Optimization passes - const bool linked = !(options & kGlslOptionNotFullShader); + + // Link built-in functions + shader->shader->symbols = state->symbols; + memcpy(shader->shader->builtins_to_link, state->builtins_to_link, sizeof(shader->shader->builtins_to_link[0]) * state->num_builtins_to_link); + shader->shader->num_builtins_to_link = state->num_builtins_to_link; + if (!state->error && !ir->is_empty()) { - bool progress; - do { - progress = false; - bool progress2; - debug_print_ir ("Initial", ir, state, ctx->mem_ctx); - progress2 = do_function_inlining(ir); progress |= progress2; if (progress2) debug_print_ir ("After inlining", ir, state, ctx->mem_ctx); - progress2 = do_dead_functions(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead functions", ir, state, ctx->mem_ctx); - progress2 = do_structure_splitting(ir); progress |= progress2; if (progress2) debug_print_ir ("After struct splitting", ir, state, ctx->mem_ctx); - progress2 = do_if_simplification(ir); progress |= progress2; if (progress2) debug_print_ir ("After if simpl", ir, state, ctx->mem_ctx); - progress2 = propagate_precision (ir); progress |= progress2; if (progress2) debug_print_ir ("After prec propagation", ir, state, ctx->mem_ctx); - progress2 = do_copy_propagation(ir); progress |= progress2; if (progress2) debug_print_ir ("After copy propagation", ir, state, ctx->mem_ctx); - progress2 = do_copy_propagation_elements(ir); progress |= progress2; if (progress2) debug_print_ir ("After copy propagation elems", ir, state, ctx->mem_ctx); - if (!linked) { - progress2 = do_dead_code_unlinked(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead code unlinked", ir, state, ctx->mem_ctx); - } else { - progress2 = do_dead_code(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead code", ir, state, ctx->mem_ctx); - } - progress2 = do_dead_code_local(ir); progress |= progress2; if (progress2) debug_print_ir ("After dead code local", ir, state, ctx->mem_ctx); - progress2 = propagate_precision (ir); progress |= progress2; if (progress2) debug_print_ir ("After prec propagation", ir, state, ctx->mem_ctx); - progress2 = do_tree_grafting(ir); progress |= progress2; if (progress2) debug_print_ir ("After tree grafting", ir, state, ctx->mem_ctx); - progress2 = do_constant_propagation(ir); progress |= progress2; if (progress2) debug_print_ir ("After const propagation", ir, state, ctx->mem_ctx); - if (!linked) { - progress2 = do_constant_variable_unlinked(ir); progress |= progress2; if (progress2) debug_print_ir ("After const variable unlinked", ir, state, ctx->mem_ctx); - } else { - progress2 = do_constant_variable(ir); progress |= progress2; if (progress2) debug_print_ir ("After const variable", ir, state, ctx->mem_ctx); - } - progress2 = do_constant_folding(ir); progress |= progress2; if (progress2) debug_print_ir ("After const folding", ir, state, ctx->mem_ctx); - progress2 = do_algebraic(ir); progress |= progress2; if (progress2) debug_print_ir ("After algebraic", ir, state, ctx->mem_ctx); - progress2 = do_lower_jumps(ir); progress |= progress2; if (progress2) debug_print_ir ("After lower jumps", ir, state, ctx->mem_ctx); - progress2 = do_vec_index_to_swizzle(ir); progress |= progress2; if (progress2) debug_print_ir ("After vec index to swizzle", ir, state, ctx->mem_ctx); - //progress2 = do_vec_index_to_cond_assign(ir); progress |= progress2; if (progress2) debug_print_ir ("After vec index to cond assign", ir, state, ctx->mem_ctx); - progress2 = do_swizzle_swizzle(ir); progress |= progress2; if (progress2) debug_print_ir ("After swizzle swizzle", ir, state, ctx->mem_ctx); - progress2 = do_noop_swizzle(ir); progress |= progress2; if (progress2) debug_print_ir ("After noop swizzle", ir, state, ctx->mem_ctx); - progress2 = optimize_redundant_jumps(ir); progress |= progress2; if (progress2) debug_print_ir ("After redundant jumps", ir, state, ctx->mem_ctx); - - loop_state *ls = analyze_loop_variables(ir); - progress2 = set_loop_controls(ir, ls); progress |= progress2; - progress2 = unroll_loops(ir, ls, 8); progress |= progress2; - delete ls; - } while (progress); - - validate_ir_tree(ir); + struct gl_shader* linked_shader = link_intrastage_shaders(ctx->mem_ctx, + &ctx->mesa_ctx, + shader->whole_program, + shader->whole_program->Shaders, + shader->whole_program->NumShaders); + if (!linked_shader) + { + shader->status = false; + shader->infoLog = shader->whole_program->InfoLog; + return shader; + } + ir = linked_shader->ir; + + debug_print_ir ("==== After link ====", ir, state, ctx->mem_ctx); } - + + // Do optimization post-link + if (!state->error && !ir->is_empty()) + { + const bool linked = !(options & kGlslOptionNotFullShader); + do_optimization_passes(ir, linked, state, ctx); + validate_ir_tree(ir); + } + // Final optimized output if (!state->error) { diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_parser.cpp b/3rdparty/glsl-optimizer/src/glsl/glsl_parser.cpp index 02c2f6403..5b95fb7c4 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_parser.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_parser.cpp @@ -144,129 +144,134 @@ USAMPLERCUBE = 325, USAMPLER1DARRAY = 326, USAMPLER2DARRAY = 327, - STRUCT = 328, - VOID_TOK = 329, - WHILE = 330, - IDENTIFIER = 331, - TYPE_IDENTIFIER = 332, - NEW_IDENTIFIER = 333, - FLOATCONSTANT = 334, - INTCONSTANT = 335, - UINTCONSTANT = 336, - BOOLCONSTANT = 337, - FIELD_SELECTION = 338, - LEFT_OP = 339, - RIGHT_OP = 340, - INC_OP = 341, - DEC_OP = 342, - LE_OP = 343, - GE_OP = 344, - EQ_OP = 345, - NE_OP = 346, - AND_OP = 347, - OR_OP = 348, - XOR_OP = 349, - MUL_ASSIGN = 350, - DIV_ASSIGN = 351, - ADD_ASSIGN = 352, - MOD_ASSIGN = 353, - LEFT_ASSIGN = 354, - RIGHT_ASSIGN = 355, - AND_ASSIGN = 356, - XOR_ASSIGN = 357, - OR_ASSIGN = 358, - SUB_ASSIGN = 359, - INVARIANT = 360, - LOWP = 361, - MEDIUMP = 362, - HIGHP = 363, - SUPERP = 364, - PRECISION = 365, - VERSION = 366, - EXTENSION = 367, - LINE = 368, - COLON = 369, - EOL = 370, - INTERFACE = 371, - OUTPUT = 372, - PRAGMA_DEBUG_ON = 373, - PRAGMA_DEBUG_OFF = 374, - PRAGMA_OPTIMIZE_ON = 375, - PRAGMA_OPTIMIZE_OFF = 376, - PRAGMA_INVARIANT_ALL = 377, - LAYOUT_TOK = 378, - ASM = 379, - CLASS = 380, - UNION = 381, - ENUM = 382, - TYPEDEF = 383, - TEMPLATE = 384, - THIS = 385, - PACKED_TOK = 386, - GOTO = 387, - INLINE_TOK = 388, - NOINLINE = 389, - VOLATILE = 390, - PUBLIC_TOK = 391, - STATIC = 392, - EXTERN = 393, - EXTERNAL = 394, - LONG_TOK = 395, - SHORT_TOK = 396, - DOUBLE_TOK = 397, - HALF = 398, - FIXED_TOK = 399, - UNSIGNED = 400, - INPUT_TOK = 401, - OUPTUT = 402, - HVEC2 = 403, - HVEC3 = 404, - HVEC4 = 405, - DVEC2 = 406, - DVEC3 = 407, - DVEC4 = 408, - FVEC2 = 409, - FVEC3 = 410, - FVEC4 = 411, - SAMPLER2DRECT = 412, - SAMPLER3DRECT = 413, - SAMPLER2DRECTSHADOW = 414, - SIZEOF = 415, - CAST = 416, - NAMESPACE = 417, - USING = 418, - ERROR_TOK = 419, - COMMON = 420, - PARTITION = 421, - ACTIVE = 422, - SAMPLERBUFFER = 423, - FILTER = 424, - IMAGE1D = 425, - IMAGE2D = 426, - IMAGE3D = 427, - IMAGECUBE = 428, - IMAGE1DARRAY = 429, - IMAGE2DARRAY = 430, - IIMAGE1D = 431, - IIMAGE2D = 432, - IIMAGE3D = 433, - IIMAGECUBE = 434, - IIMAGE1DARRAY = 435, - IIMAGE2DARRAY = 436, - UIMAGE1D = 437, - UIMAGE2D = 438, - UIMAGE3D = 439, - UIMAGECUBE = 440, - UIMAGE1DARRAY = 441, - UIMAGE2DARRAY = 442, - IMAGE1DSHADOW = 443, - IMAGE2DSHADOW = 444, - IMAGEBUFFER = 445, - IIMAGEBUFFER = 446, - UIMAGEBUFFER = 447, - IMAGE1DARRAYSHADOW = 448, - IMAGE2DARRAYSHADOW = 449, - ROW_MAJOR = 450 + SAMPLER2DRECT = 328, + ISAMPLER2DRECT = 329, + USAMPLER2DRECT = 330, + SAMPLER2DRECTSHADOW = 331, + SAMPLERBUFFER = 332, + ISAMPLERBUFFER = 333, + USAMPLERBUFFER = 334, + SAMPLEREXTERNALOES = 335, + STRUCT = 336, + VOID_TOK = 337, + WHILE = 338, + IDENTIFIER = 339, + TYPE_IDENTIFIER = 340, + NEW_IDENTIFIER = 341, + FLOATCONSTANT = 342, + INTCONSTANT = 343, + UINTCONSTANT = 344, + BOOLCONSTANT = 345, + FIELD_SELECTION = 346, + LEFT_OP = 347, + RIGHT_OP = 348, + INC_OP = 349, + DEC_OP = 350, + LE_OP = 351, + GE_OP = 352, + EQ_OP = 353, + NE_OP = 354, + AND_OP = 355, + OR_OP = 356, + XOR_OP = 357, + MUL_ASSIGN = 358, + DIV_ASSIGN = 359, + ADD_ASSIGN = 360, + MOD_ASSIGN = 361, + LEFT_ASSIGN = 362, + RIGHT_ASSIGN = 363, + AND_ASSIGN = 364, + XOR_ASSIGN = 365, + OR_ASSIGN = 366, + SUB_ASSIGN = 367, + INVARIANT = 368, + LOWP = 369, + MEDIUMP = 370, + HIGHP = 371, + SUPERP = 372, + PRECISION = 373, + VERSION_TOK = 374, + EXTENSION = 375, + LINE = 376, + COLON = 377, + EOL = 378, + INTERFACE = 379, + OUTPUT = 380, + PRAGMA_DEBUG_ON = 381, + PRAGMA_DEBUG_OFF = 382, + PRAGMA_OPTIMIZE_ON = 383, + PRAGMA_OPTIMIZE_OFF = 384, + PRAGMA_INVARIANT_ALL = 385, + LAYOUT_TOK = 386, + ASM = 387, + CLASS = 388, + UNION = 389, + ENUM = 390, + TYPEDEF = 391, + TEMPLATE = 392, + THIS = 393, + PACKED_TOK = 394, + GOTO = 395, + INLINE_TOK = 396, + NOINLINE = 397, + VOLATILE = 398, + PUBLIC_TOK = 399, + STATIC = 400, + EXTERN = 401, + EXTERNAL = 402, + LONG_TOK = 403, + SHORT_TOK = 404, + DOUBLE_TOK = 405, + HALF = 406, + FIXED_TOK = 407, + UNSIGNED = 408, + INPUT_TOK = 409, + OUPTUT = 410, + HVEC2 = 411, + HVEC3 = 412, + HVEC4 = 413, + DVEC2 = 414, + DVEC3 = 415, + DVEC4 = 416, + FVEC2 = 417, + FVEC3 = 418, + FVEC4 = 419, + SAMPLER3DRECT = 420, + SIZEOF = 421, + CAST = 422, + NAMESPACE = 423, + USING = 424, + ERROR_TOK = 425, + COMMON = 426, + PARTITION = 427, + ACTIVE = 428, + FILTER = 429, + IMAGE1D = 430, + IMAGE2D = 431, + IMAGE3D = 432, + IMAGECUBE = 433, + IMAGE1DARRAY = 434, + IMAGE2DARRAY = 435, + IIMAGE1D = 436, + IIMAGE2D = 437, + IIMAGE3D = 438, + IIMAGECUBE = 439, + IIMAGE1DARRAY = 440, + IIMAGE2DARRAY = 441, + UIMAGE1D = 442, + UIMAGE2D = 443, + UIMAGE3D = 444, + UIMAGECUBE = 445, + UIMAGE1DARRAY = 446, + UIMAGE2DARRAY = 447, + IMAGE1DSHADOW = 448, + IMAGE2DSHADOW = 449, + IMAGEBUFFER = 450, + IIMAGEBUFFER = 451, + UIMAGEBUFFER = 452, + IMAGE1DARRAYSHADOW = 453, + IMAGE2DARRAYSHADOW = 454, + ROW_MAJOR = 455 }; #endif /* Tokens. */ @@ -340,129 +345,134 @@ #define USAMPLERCUBE 325 #define USAMPLER1DARRAY 326 #define USAMPLER2DARRAY 327 -#define STRUCT 328 -#define VOID_TOK 329 -#define WHILE 330 -#define IDENTIFIER 331 -#define TYPE_IDENTIFIER 332 -#define NEW_IDENTIFIER 333 -#define FLOATCONSTANT 334 -#define INTCONSTANT 335 -#define UINTCONSTANT 336 -#define BOOLCONSTANT 337 -#define FIELD_SELECTION 338 -#define LEFT_OP 339 -#define RIGHT_OP 340 -#define INC_OP 341 -#define DEC_OP 342 -#define LE_OP 343 -#define GE_OP 344 -#define EQ_OP 345 -#define NE_OP 346 -#define AND_OP 347 -#define OR_OP 348 -#define XOR_OP 349 -#define MUL_ASSIGN 350 -#define DIV_ASSIGN 351 -#define ADD_ASSIGN 352 -#define MOD_ASSIGN 353 -#define LEFT_ASSIGN 354 -#define RIGHT_ASSIGN 355 -#define AND_ASSIGN 356 -#define XOR_ASSIGN 357 -#define OR_ASSIGN 358 -#define SUB_ASSIGN 359 -#define INVARIANT 360 -#define LOWP 361 -#define MEDIUMP 362 -#define HIGHP 363 -#define SUPERP 364 -#define PRECISION 365 -#define VERSION 366 -#define EXTENSION 367 -#define LINE 368 -#define COLON 369 -#define EOL 370 -#define INTERFACE 371 -#define OUTPUT 372 -#define PRAGMA_DEBUG_ON 373 -#define PRAGMA_DEBUG_OFF 374 -#define PRAGMA_OPTIMIZE_ON 375 -#define PRAGMA_OPTIMIZE_OFF 376 -#define PRAGMA_INVARIANT_ALL 377 -#define LAYOUT_TOK 378 -#define ASM 379 -#define CLASS 380 -#define UNION 381 -#define ENUM 382 -#define TYPEDEF 383 -#define TEMPLATE 384 -#define THIS 385 -#define PACKED_TOK 386 -#define GOTO 387 -#define INLINE_TOK 388 -#define NOINLINE 389 -#define VOLATILE 390 -#define PUBLIC_TOK 391 -#define STATIC 392 -#define EXTERN 393 -#define EXTERNAL 394 -#define LONG_TOK 395 -#define SHORT_TOK 396 -#define DOUBLE_TOK 397 -#define HALF 398 -#define FIXED_TOK 399 -#define UNSIGNED 400 -#define INPUT_TOK 401 -#define OUPTUT 402 -#define HVEC2 403 -#define HVEC3 404 -#define HVEC4 405 -#define DVEC2 406 -#define DVEC3 407 -#define DVEC4 408 -#define FVEC2 409 -#define FVEC3 410 -#define FVEC4 411 -#define SAMPLER2DRECT 412 -#define SAMPLER3DRECT 413 -#define SAMPLER2DRECTSHADOW 414 -#define SIZEOF 415 -#define CAST 416 -#define NAMESPACE 417 -#define USING 418 -#define ERROR_TOK 419 -#define COMMON 420 -#define PARTITION 421 -#define ACTIVE 422 -#define SAMPLERBUFFER 423 -#define FILTER 424 -#define IMAGE1D 425 -#define IMAGE2D 426 -#define IMAGE3D 427 -#define IMAGECUBE 428 -#define IMAGE1DARRAY 429 -#define IMAGE2DARRAY 430 -#define IIMAGE1D 431 -#define IIMAGE2D 432 -#define IIMAGE3D 433 -#define IIMAGECUBE 434 -#define IIMAGE1DARRAY 435 -#define IIMAGE2DARRAY 436 -#define UIMAGE1D 437 -#define UIMAGE2D 438 -#define UIMAGE3D 439 -#define UIMAGECUBE 440 -#define UIMAGE1DARRAY 441 -#define UIMAGE2DARRAY 442 -#define IMAGE1DSHADOW 443 -#define IMAGE2DSHADOW 444 -#define IMAGEBUFFER 445 -#define IIMAGEBUFFER 446 -#define UIMAGEBUFFER 447 -#define IMAGE1DARRAYSHADOW 448 -#define IMAGE2DARRAYSHADOW 449 -#define ROW_MAJOR 450 +#define SAMPLER2DRECT 328 +#define ISAMPLER2DRECT 329 +#define USAMPLER2DRECT 330 +#define SAMPLER2DRECTSHADOW 331 +#define SAMPLERBUFFER 332 +#define ISAMPLERBUFFER 333 +#define USAMPLERBUFFER 334 +#define SAMPLEREXTERNALOES 335 +#define STRUCT 336 +#define VOID_TOK 337 +#define WHILE 338 +#define IDENTIFIER 339 +#define TYPE_IDENTIFIER 340 +#define NEW_IDENTIFIER 341 +#define FLOATCONSTANT 342 +#define INTCONSTANT 343 +#define UINTCONSTANT 344 +#define BOOLCONSTANT 345 +#define FIELD_SELECTION 346 +#define LEFT_OP 347 +#define RIGHT_OP 348 +#define INC_OP 349 +#define DEC_OP 350 +#define LE_OP 351 +#define GE_OP 352 +#define EQ_OP 353 +#define NE_OP 354 +#define AND_OP 355 +#define OR_OP 356 +#define XOR_OP 357 +#define MUL_ASSIGN 358 +#define DIV_ASSIGN 359 +#define ADD_ASSIGN 360 +#define MOD_ASSIGN 361 +#define LEFT_ASSIGN 362 +#define RIGHT_ASSIGN 363 +#define AND_ASSIGN 364 +#define XOR_ASSIGN 365 +#define OR_ASSIGN 366 +#define SUB_ASSIGN 367 +#define INVARIANT 368 +#define LOWP 369 +#define MEDIUMP 370 +#define HIGHP 371 +#define SUPERP 372 +#define PRECISION 373 +#define VERSION_TOK 374 +#define EXTENSION 375 +#define LINE 376 +#define COLON 377 +#define EOL 378 +#define INTERFACE 379 +#define OUTPUT 380 +#define PRAGMA_DEBUG_ON 381 +#define PRAGMA_DEBUG_OFF 382 +#define PRAGMA_OPTIMIZE_ON 383 +#define PRAGMA_OPTIMIZE_OFF 384 +#define PRAGMA_INVARIANT_ALL 385 +#define LAYOUT_TOK 386 +#define ASM 387 +#define CLASS 388 +#define UNION 389 +#define ENUM 390 +#define TYPEDEF 391 +#define TEMPLATE 392 +#define THIS 393 +#define PACKED_TOK 394 +#define GOTO 395 +#define INLINE_TOK 396 +#define NOINLINE 397 +#define VOLATILE 398 +#define PUBLIC_TOK 399 +#define STATIC 400 +#define EXTERN 401 +#define EXTERNAL 402 +#define LONG_TOK 403 +#define SHORT_TOK 404 +#define DOUBLE_TOK 405 +#define HALF 406 +#define FIXED_TOK 407 +#define UNSIGNED 408 +#define INPUT_TOK 409 +#define OUPTUT 410 +#define HVEC2 411 +#define HVEC3 412 +#define HVEC4 413 +#define DVEC2 414 +#define DVEC3 415 +#define DVEC4 416 +#define FVEC2 417 +#define FVEC3 418 +#define FVEC4 419 +#define SAMPLER3DRECT 420 +#define SIZEOF 421 +#define CAST 422 +#define NAMESPACE 423 +#define USING 424 +#define ERROR_TOK 425 +#define COMMON 426 +#define PARTITION 427 +#define ACTIVE 428 +#define FILTER 429 +#define IMAGE1D 430 +#define IMAGE2D 431 +#define IMAGE3D 432 +#define IMAGECUBE 433 +#define IMAGE1DARRAY 434 +#define IMAGE2DARRAY 435 +#define IIMAGE1D 436 +#define IIMAGE2D 437 +#define IIMAGE3D 438 +#define IIMAGECUBE 439 +#define IIMAGE1DARRAY 440 +#define IIMAGE2DARRAY 441 +#define UIMAGE1D 442 +#define UIMAGE2D 443 +#define UIMAGE3D 444 +#define UIMAGECUBE 445 +#define UIMAGE1DARRAY 446 +#define UIMAGE2DARRAY 447 +#define IMAGE1DSHADOW 448 +#define IMAGE2DSHADOW 449 +#define IMAGEBUFFER 450 +#define IIMAGEBUFFER 451 +#define UIMAGEBUFFER 452 +#define IMAGE1DARRAYSHADOW 453 +#define IMAGE2DARRAYSHADOW 454 +#define ROW_MAJOR 455 @@ -500,9 +510,16 @@ #include "ast.h" #include "glsl_parser_extras.h" #include "glsl_types.h" +#include "main/context.h" #define YYLEX_PARAM state->scanner +#undef yyerror + +static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg) +{ + _mesa_glsl_error(loc, st, "%s", msg); +} /* Enabling traces. */ @@ -525,11 +542,11 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 52 "src/glsl/glsl_parser.yy" +#line 59 "src/glsl/glsl_parser.yy" { int n; float real; - char *identifier; + const char *identifier; struct ast_type_qualifier type_qualifier; @@ -544,6 +561,11 @@ typedef union YYSTYPE ast_declarator_list *declarator_list; ast_struct_specifier *struct_specifier; ast_declaration *declaration; + ast_switch_body *switch_body; + ast_case_label *case_label; + ast_case_label_list *case_label_list; + ast_case_statement *case_statement; + ast_case_statement_list *case_statement_list; struct { ast_node *cond; @@ -556,7 +578,7 @@ typedef union YYSTYPE } selection_rest_statement; } /* Line 193 of yacc.c. */ -#line 560 "src/glsl/glsl_parser.cpp" +#line 582 "src/glsl/glsl_parser.cpp" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -581,7 +603,7 @@ typedef struct YYLTYPE /* Line 216 of yacc.c. */ -#line 585 "src/glsl/glsl_parser.cpp" +#line 607 "src/glsl/glsl_parser.cpp" #ifdef short # undef short @@ -798,20 +820,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3692 +#define YYLAST 3101 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 220 +#define YYNTOKENS 225 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 93 +#define YYNNTS 103 /* YYNRULES -- Number of rules. */ -#define YYNRULES 291 +#define YYNRULES 318 /* YYNRULES -- Number of states. */ -#define YYNSTATES 434 +#define YYNSTATES 483 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 450 +#define YYMAXUTOK 455 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -822,16 +844,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 204, 2, 2, 2, 208, 211, 2, - 196, 197, 206, 202, 201, 203, 200, 207, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 215, 217, - 209, 216, 210, 214, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 209, 2, 2, 2, 213, 216, 2, + 201, 202, 211, 207, 206, 208, 205, 212, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 220, 222, + 214, 221, 215, 219, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 198, 2, 199, 212, 2, 2, 2, 2, 2, + 2, 203, 2, 204, 217, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 218, 213, 219, 205, 2, 2, 2, + 2, 2, 2, 223, 218, 224, 210, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -864,7 +886,7 @@ static const yytype_uint8 yytranslate[] = 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195 + 195, 196, 197, 198, 199, 200 }; #if YYDEBUG @@ -883,148 +905,160 @@ static const yytype_uint16 yyprhs[] = 226, 228, 232, 234, 238, 240, 244, 246, 250, 252, 256, 258, 262, 264, 270, 272, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 304, - 306, 309, 312, 317, 320, 322, 324, 327, 331, 335, - 338, 344, 348, 351, 355, 358, 359, 361, 363, 365, - 367, 369, 373, 379, 386, 394, 403, 409, 411, 414, - 419, 425, 432, 440, 445, 448, 450, 453, 458, 460, - 464, 466, 470, 472, 474, 476, 478, 480, 482, 485, - 487, 490, 493, 497, 499, 501, 503, 505, 508, 510, - 512, 515, 518, 520, 522, 525, 527, 531, 536, 538, - 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, + 306, 309, 312, 317, 319, 322, 324, 326, 329, 333, + 337, 340, 346, 350, 353, 357, 360, 361, 363, 365, + 367, 369, 371, 375, 381, 388, 396, 405, 411, 413, + 416, 421, 427, 434, 442, 447, 450, 452, 455, 460, + 462, 466, 468, 472, 474, 476, 478, 480, 482, 484, + 486, 488, 490, 493, 495, 498, 501, 505, 507, 509, + 511, 513, 516, 518, 520, 523, 526, 528, 530, 533, + 535, 539, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, - 640, 642, 644, 646, 648, 650, 656, 661, 663, 666, - 670, 672, 676, 678, 683, 685, 687, 689, 691, 693, - 695, 697, 699, 701, 703, 705, 708, 709, 714, 716, - 718, 721, 725, 727, 730, 732, 735, 741, 745, 747, - 749, 754, 760, 764, 767, 773, 781, 788, 790, 792, - 794, 795, 798, 802, 805, 808, 811, 815, 818, 820, - 822, 824 + 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, + 660, 662, 664, 666, 668, 670, 676, 681, 683, 686, + 690, 692, 696, 698, 703, 705, 707, 709, 711, 713, + 715, 717, 719, 721, 723, 726, 727, 732, 734, 736, + 739, 743, 745, 748, 750, 753, 759, 763, 765, 767, + 772, 778, 781, 785, 789, 792, 794, 797, 800, 803, + 805, 808, 814, 822, 829, 831, 833, 835, 836, 839, + 843, 846, 849, 852, 856, 859, 861, 863, 865, 867, + 870, 877, 885, 887, 890, 891, 893, 899, 904 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 221, 0, -1, -1, 223, 225, 222, 228, -1, -1, - 111, 80, 115, -1, 118, 115, -1, 119, 115, -1, - 120, 115, -1, 121, 115, -1, 122, 115, -1, -1, - 225, 227, -1, 76, -1, 77, -1, 78, -1, 112, - 226, 114, 226, 115, -1, 311, -1, 228, 311, -1, - 76, -1, 78, -1, 229, -1, 80, -1, 81, -1, - 79, -1, 82, -1, 196, 260, 197, -1, 230, -1, - 231, 198, 232, 199, -1, 233, -1, 231, 200, 226, - -1, 231, 86, -1, 231, 87, -1, 260, -1, 234, - -1, 235, -1, 231, 200, 240, -1, 237, 197, -1, - 236, 197, -1, 238, 74, -1, 238, -1, 238, 258, - -1, 237, 201, 258, -1, 239, 196, -1, 281, -1, - 229, -1, 83, -1, 242, 197, -1, 241, 197, -1, - 243, 74, -1, 243, -1, 243, 258, -1, 242, 201, - 258, -1, 229, 196, -1, 231, -1, 86, 244, -1, - 87, 244, -1, 245, 244, -1, 202, -1, 203, -1, - 204, -1, 205, -1, 244, -1, 246, 206, 244, -1, - 246, 207, 244, -1, 246, 208, 244, -1, 246, -1, - 247, 202, 246, -1, 247, 203, 246, -1, 247, -1, - 248, 84, 247, -1, 248, 85, 247, -1, 248, -1, - 249, 209, 248, -1, 249, 210, 248, -1, 249, 88, - 248, -1, 249, 89, 248, -1, 249, -1, 250, 90, - 249, -1, 250, 91, 249, -1, 250, -1, 251, 211, - 250, -1, 251, -1, 252, 212, 251, -1, 252, -1, - 253, 213, 252, -1, 253, -1, 254, 92, 253, -1, - 254, -1, 255, 94, 254, -1, 255, -1, 256, 93, - 255, -1, 256, -1, 256, 214, 260, 215, 258, -1, - 257, -1, 244, 259, 258, -1, 216, -1, 95, -1, - 96, -1, 98, -1, 97, -1, 104, -1, 99, -1, - 100, -1, 101, -1, 102, -1, 103, -1, 258, -1, - 260, 201, 258, -1, 257, -1, 263, 217, -1, 271, - 217, -1, 110, 285, 282, 217, -1, 264, 197, -1, - 266, -1, 265, -1, 266, 268, -1, 265, 201, 268, - -1, 273, 229, 196, -1, 281, 226, -1, 281, 226, - 198, 261, 199, -1, 278, 269, 267, -1, 269, 267, - -1, 278, 269, 270, -1, 269, 270, -1, -1, 33, - -1, 34, -1, 35, -1, 281, -1, 272, -1, 271, - 201, 226, -1, 271, 201, 226, 198, 199, -1, 271, - 201, 226, 198, 261, 199, -1, 271, 201, 226, 198, - 199, 216, 291, -1, 271, 201, 226, 198, 261, 199, - 216, 291, -1, 271, 201, 226, 216, 291, -1, 273, - -1, 273, 226, -1, 273, 226, 198, 199, -1, 273, - 226, 198, 261, 199, -1, 273, 226, 198, 199, 216, - 291, -1, 273, 226, 198, 261, 199, 216, 291, -1, - 273, 226, 216, 291, -1, 105, 229, -1, 281, -1, - 279, 281, -1, 123, 196, 275, 197, -1, 276, -1, - 275, 201, 276, -1, 226, -1, 226, 216, 80, -1, - 40, -1, 39, -1, 38, -1, 4, -1, 280, -1, - 274, -1, 274, 280, -1, 277, -1, 277, 280, -1, - 105, 280, -1, 105, 277, 280, -1, 105, -1, 4, - -1, 3, -1, 37, -1, 32, 37, -1, 33, -1, - 34, -1, 32, 33, -1, 32, 34, -1, 36, -1, - 282, -1, 285, 282, -1, 283, -1, 283, 198, 199, - -1, 283, 198, 261, 199, -1, 284, -1, 286, -1, - 77, -1, 74, -1, 6, -1, 7, -1, 8, -1, - 5, -1, 29, -1, 30, -1, 31, -1, 20, -1, - 21, -1, 22, -1, 23, -1, 24, -1, 25, -1, - 26, -1, 27, -1, 28, -1, 41, -1, 42, -1, - 43, -1, 44, -1, 45, -1, 46, -1, 47, -1, - 48, -1, 49, -1, 50, -1, 51, -1, 157, -1, - 52, -1, 53, -1, 54, -1, 55, -1, 159, -1, + 226, 0, -1, -1, 228, 230, 227, 233, -1, -1, + 119, 88, 123, -1, 126, 123, -1, 127, 123, -1, + 128, 123, -1, 129, 123, -1, 130, 123, -1, -1, + 230, 232, -1, 84, -1, 85, -1, 86, -1, 120, + 231, 122, 231, 123, -1, 321, -1, 233, 321, -1, + 84, -1, 86, -1, 234, -1, 88, -1, 89, -1, + 87, -1, 90, -1, 201, 265, 202, -1, 235, -1, + 236, 203, 237, 204, -1, 238, -1, 236, 205, 231, + -1, 236, 94, -1, 236, 95, -1, 265, -1, 239, + -1, 240, -1, 236, 205, 245, -1, 242, 202, -1, + 241, 202, -1, 243, 82, -1, 243, -1, 243, 263, + -1, 242, 206, 263, -1, 244, 201, -1, 287, -1, + 234, -1, 91, -1, 247, 202, -1, 246, 202, -1, + 248, 82, -1, 248, -1, 248, 263, -1, 247, 206, + 263, -1, 234, 201, -1, 236, -1, 94, 249, -1, + 95, 249, -1, 250, 249, -1, 207, -1, 208, -1, + 209, -1, 210, -1, 249, -1, 251, 211, 249, -1, + 251, 212, 249, -1, 251, 213, 249, -1, 251, -1, + 252, 207, 251, -1, 252, 208, 251, -1, 252, -1, + 253, 92, 252, -1, 253, 93, 252, -1, 253, -1, + 254, 214, 253, -1, 254, 215, 253, -1, 254, 96, + 253, -1, 254, 97, 253, -1, 254, -1, 255, 98, + 254, -1, 255, 99, 254, -1, 255, -1, 256, 216, + 255, -1, 256, -1, 257, 217, 256, -1, 257, -1, + 258, 218, 257, -1, 258, -1, 259, 100, 258, -1, + 259, -1, 260, 102, 259, -1, 260, -1, 261, 101, + 260, -1, 261, -1, 261, 219, 265, 220, 263, -1, + 262, -1, 249, 264, 263, -1, 221, -1, 103, -1, + 104, -1, 106, -1, 105, -1, 112, -1, 107, -1, + 108, -1, 109, -1, 110, -1, 111, -1, 263, -1, + 265, 206, 263, -1, 262, -1, 268, 222, -1, 276, + 222, -1, 118, 291, 288, 222, -1, 323, -1, 269, + 202, -1, 271, -1, 270, -1, 271, 273, -1, 270, + 206, 273, -1, 278, 234, 201, -1, 287, 231, -1, + 287, 231, 203, 266, 204, -1, 284, 274, 272, -1, + 274, 272, -1, 284, 274, 275, -1, 274, 275, -1, + -1, 33, -1, 34, -1, 35, -1, 287, -1, 277, + -1, 276, 206, 231, -1, 276, 206, 231, 203, 204, + -1, 276, 206, 231, 203, 266, 204, -1, 276, 206, + 231, 203, 204, 221, 297, -1, 276, 206, 231, 203, + 266, 204, 221, 297, -1, 276, 206, 231, 221, 297, + -1, 278, -1, 278, 231, -1, 278, 231, 203, 204, + -1, 278, 231, 203, 266, 204, -1, 278, 231, 203, + 204, 221, 297, -1, 278, 231, 203, 266, 204, 221, + 297, -1, 278, 231, 221, 297, -1, 113, 234, -1, + 287, -1, 285, 287, -1, 131, 201, 280, 202, -1, + 281, -1, 280, 206, 281, -1, 231, -1, 231, 221, + 88, -1, 282, -1, 200, -1, 139, -1, 40, -1, + 39, -1, 38, -1, 4, -1, 286, -1, 279, -1, + 279, 286, -1, 283, -1, 283, 286, -1, 113, 286, + -1, 113, 283, 286, -1, 113, -1, 4, -1, 3, + -1, 37, -1, 32, 37, -1, 33, -1, 34, -1, + 32, 33, -1, 32, 34, -1, 36, -1, 288, -1, + 291, 288, -1, 289, -1, 289, 203, 204, -1, 289, + 203, 266, 204, -1, 290, -1, 292, -1, 85, -1, + 82, -1, 6, -1, 7, -1, 8, -1, 5, -1, + 29, -1, 30, -1, 31, -1, 20, -1, 21, -1, + 22, -1, 23, -1, 24, -1, 25, -1, 26, -1, + 27, -1, 28, -1, 41, -1, 42, -1, 43, -1, + 44, -1, 45, -1, 46, -1, 47, -1, 48, -1, + 49, -1, 50, -1, 51, -1, 73, -1, 52, -1, + 53, -1, 80, -1, 54, -1, 55, -1, 76, -1, 56, -1, 57, -1, 58, -1, 59, -1, 60, -1, - 61, -1, 62, -1, 63, -1, 64, -1, 65, -1, - 66, -1, 67, -1, 68, -1, 69, -1, 70, -1, - 71, -1, 72, -1, 108, -1, 107, -1, 106, -1, - 73, 226, 218, 287, 219, -1, 73, 218, 287, 219, - -1, 288, -1, 287, 288, -1, 281, 289, 217, -1, - 290, -1, 289, 201, 290, -1, 226, -1, 226, 198, - 261, 199, -1, 258, -1, 262, -1, 295, -1, 294, - -1, 292, -1, 300, -1, 301, -1, 304, -1, 305, - -1, 306, -1, 310, -1, 218, 219, -1, -1, 218, - 296, 299, 219, -1, 298, -1, 294, -1, 218, 219, - -1, 218, 299, 219, -1, 293, -1, 299, 293, -1, - 217, -1, 260, 217, -1, 14, 196, 260, 197, 302, - -1, 293, 12, 293, -1, 293, -1, 260, -1, 273, - 226, 216, 291, -1, 17, 196, 260, 197, 295, -1, - 18, 260, 215, -1, 19, 215, -1, 75, 196, 303, - 197, 297, -1, 11, 293, 75, 196, 260, 197, 217, - -1, 13, 196, 307, 309, 197, 297, -1, 300, -1, - 292, -1, 303, -1, -1, 308, 217, -1, 308, 217, - 260, -1, 10, 217, -1, 9, 217, -1, 16, 217, - -1, 16, 260, 217, -1, 15, 217, -1, 312, -1, - 262, -1, 224, -1, 263, 298, -1 + 77, -1, 61, -1, 62, -1, 74, -1, 63, -1, + 64, -1, 65, -1, 66, -1, 78, -1, 67, -1, + 68, -1, 75, -1, 69, -1, 70, -1, 71, -1, + 72, -1, 79, -1, 116, -1, 115, -1, 114, -1, + 81, 231, 223, 293, 224, -1, 81, 223, 293, 224, + -1, 294, -1, 293, 294, -1, 287, 295, 222, -1, + 296, -1, 295, 206, 296, -1, 231, -1, 231, 203, + 266, 204, -1, 263, -1, 267, -1, 301, -1, 300, + -1, 298, -1, 306, -1, 307, -1, 310, -1, 316, + -1, 320, -1, 223, 224, -1, -1, 223, 302, 305, + 224, -1, 304, -1, 300, -1, 223, 224, -1, 223, + 305, 224, -1, 299, -1, 305, 299, -1, 222, -1, + 265, 222, -1, 14, 201, 265, 202, 308, -1, 299, + 12, 299, -1, 299, -1, 265, -1, 278, 231, 221, + 297, -1, 17, 201, 265, 202, 311, -1, 223, 224, + -1, 223, 315, 224, -1, 18, 265, 220, -1, 19, + 220, -1, 312, -1, 313, 312, -1, 313, 299, -1, + 314, 299, -1, 314, -1, 315, 314, -1, 83, 201, + 309, 202, 303, -1, 11, 299, 83, 201, 265, 202, + 222, -1, 13, 201, 317, 319, 202, 303, -1, 306, + -1, 298, -1, 309, -1, -1, 318, 222, -1, 318, + 222, 265, -1, 10, 222, -1, 9, 222, -1, 16, + 222, -1, 16, 265, 222, -1, 15, 222, -1, 322, + -1, 267, -1, 229, -1, 327, -1, 268, 304, -1, + 36, 86, 223, 324, 224, 222, -1, 279, 36, 86, + 223, 324, 224, 222, -1, 326, -1, 326, 324, -1, + -1, 36, -1, 279, 325, 287, 295, 222, -1, 325, + 287, 295, 222, -1, 279, 36, 222, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 218, 218, 217, 229, 231, 271, 272, 273, 274, - 275, 287, 289, 293, 294, 295, 299, 308, 316, 327, - 328, 332, 339, 346, 353, 360, 367, 374, 375, 381, - 385, 392, 398, 407, 411, 415, 416, 425, 426, 430, - 431, 435, 441, 453, 457, 463, 470, 480, 481, 485, - 486, 490, 496, 508, 519, 520, 526, 532, 542, 543, - 544, 545, 549, 550, 556, 562, 571, 572, 578, 587, - 588, 594, 603, 604, 610, 616, 622, 631, 632, 638, - 647, 648, 657, 658, 667, 668, 677, 678, 687, 688, - 697, 698, 707, 708, 717, 718, 727, 728, 729, 730, - 731, 732, 733, 734, 735, 736, 737, 741, 745, 761, - 765, 770, 774, 783, 787, 788, 792, 797, 805, 819, - 829, 844, 851, 856, 867, 880, 883, 888, 893, 902, - 906, 907, 917, 927, 937, 947, 957, 971, 982, 991, - 1000, 1009, 1018, 1027, 1036, 1050, 1057, 1068, 1075, 1076, - 1095, 1147, 1188, 1193, 1198, 1206, 1214, 1215, 1216, 1221, - 1222, 1227, 1232, 1238, 1246, 1251, 1256, 1261, 1267, 1272, - 1277, 1282, 1287, 1295, 1299, 1307, 1308, 1314, 1323, 1329, - 1335, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, - 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, - 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, - 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, - 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, - 1393, 1394, 1398, 1408, 1418, 1431, 1438, 1447, 1452, 1460, - 1475, 1480, 1488, 1495, 1504, 1508, 1514, 1515, 1519, 1520, - 1521, 1522, 1523, 1524, 1525, 1529, 1536, 1535, 1549, 1550, - 1554, 1560, 1569, 1579, 1591, 1597, 1606, 1615, 1620, 1628, - 1632, 1646, 1650, 1651, 1655, 1662, 1669, 1679, 1680, 1684, - 1686, 1692, 1697, 1706, 1712, 1718, 1724, 1730, 1739, 1740, - 1741, 1745 + 0, 243, 243, 242, 254, 256, 309, 310, 311, 312, + 313, 325, 327, 331, 332, 333, 337, 346, 354, 365, + 366, 370, 377, 384, 391, 398, 405, 412, 413, 419, + 423, 430, 436, 445, 449, 453, 454, 463, 464, 468, + 469, 473, 479, 491, 495, 501, 508, 518, 519, 523, + 524, 528, 534, 546, 557, 558, 564, 570, 580, 581, + 582, 583, 587, 588, 594, 600, 609, 610, 616, 625, + 626, 632, 641, 642, 648, 654, 660, 669, 670, 676, + 685, 686, 695, 696, 705, 706, 715, 716, 725, 726, + 735, 736, 745, 746, 755, 756, 765, 766, 767, 768, + 769, 770, 771, 772, 773, 774, 775, 779, 783, 799, + 803, 808, 812, 818, 825, 829, 830, 834, 839, 847, + 861, 871, 886, 893, 898, 909, 922, 925, 930, 935, + 944, 948, 949, 959, 969, 979, 989, 999, 1013, 1020, + 1029, 1038, 1047, 1056, 1065, 1074, 1088, 1095, 1106, 1113, + 1114, 1124, 1192, 1238, 1260, 1265, 1273, 1278, 1283, 1291, + 1299, 1300, 1301, 1306, 1307, 1312, 1317, 1323, 1331, 1336, + 1341, 1346, 1352, 1357, 1362, 1367, 1372, 1380, 1384, 1392, + 1393, 1399, 1408, 1414, 1420, 1429, 1430, 1431, 1432, 1433, + 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, + 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, + 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, + 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, + 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, + 1484, 1485, 1489, 1499, 1509, 1522, 1529, 1538, 1543, 1551, + 1566, 1571, 1579, 1586, 1595, 1599, 1605, 1606, 1610, 1611, + 1612, 1613, 1614, 1615, 1619, 1626, 1625, 1639, 1640, 1644, + 1650, 1659, 1669, 1681, 1687, 1696, 1705, 1710, 1718, 1722, + 1740, 1748, 1753, 1761, 1766, 1774, 1782, 1790, 1798, 1806, + 1814, 1822, 1829, 1836, 1846, 1847, 1851, 1853, 1859, 1864, + 1873, 1879, 1885, 1891, 1897, 1906, 1907, 1908, 1909, 1913, + 1927, 1943, 1966, 1971, 1979, 1981, 1985, 2000, 2017 }; #endif @@ -1046,38 +1080,39 @@ static const char *const yytname[] = "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", - "USAMPLER2DARRAY", "STRUCT", "VOID_TOK", "WHILE", "IDENTIFIER", - "TYPE_IDENTIFIER", "NEW_IDENTIFIER", "FLOATCONSTANT", "INTCONSTANT", - "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", - "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", - "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", - "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", - "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT", "LOWP", "MEDIUMP", "HIGHP", - "SUPERP", "PRECISION", "VERSION", "EXTENSION", "LINE", "COLON", "EOL", - "INTERFACE", "OUTPUT", "PRAGMA_DEBUG_ON", "PRAGMA_DEBUG_OFF", - "PRAGMA_OPTIMIZE_ON", "PRAGMA_OPTIMIZE_OFF", "PRAGMA_INVARIANT_ALL", - "LAYOUT_TOK", "ASM", "CLASS", "UNION", "ENUM", "TYPEDEF", "TEMPLATE", - "THIS", "PACKED_TOK", "GOTO", "INLINE_TOK", "NOINLINE", "VOLATILE", - "PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL", "LONG_TOK", "SHORT_TOK", - "DOUBLE_TOK", "HALF", "FIXED_TOK", "UNSIGNED", "INPUT_TOK", "OUPTUT", - "HVEC2", "HVEC3", "HVEC4", "DVEC2", "DVEC3", "DVEC4", "FVEC2", "FVEC3", - "FVEC4", "SAMPLER2DRECT", "SAMPLER3DRECT", "SAMPLER2DRECTSHADOW", - "SIZEOF", "CAST", "NAMESPACE", "USING", "ERROR_TOK", "COMMON", - "PARTITION", "ACTIVE", "SAMPLERBUFFER", "FILTER", "IMAGE1D", "IMAGE2D", - "IMAGE3D", "IMAGECUBE", "IMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE1D", - "IIMAGE2D", "IIMAGE3D", "IIMAGECUBE", "IIMAGE1DARRAY", "IIMAGE2DARRAY", - "UIMAGE1D", "UIMAGE2D", "UIMAGE3D", "UIMAGECUBE", "UIMAGE1DARRAY", - "UIMAGE2DARRAY", "IMAGE1DSHADOW", "IMAGE2DSHADOW", "IMAGEBUFFER", - "IIMAGEBUFFER", "UIMAGEBUFFER", "IMAGE1DARRAYSHADOW", - "IMAGE2DARRAYSHADOW", "ROW_MAJOR", "'('", "')'", "'['", "']'", "'.'", - "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'", "'%'", "'<'", "'>'", - "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'", "'{'", "'}'", "$accept", - "translation_unit", "@1", "version_statement", "pragma_statement", - "extension_statement_list", "any_identifier", "extension_statement", - "external_declaration_list", "variable_identifier", "primary_expression", - "postfix_expression", "integer_expression", "function_call", - "function_call_or_method", "function_call_generic", - "function_call_header_no_parameters", + "USAMPLER2DARRAY", "SAMPLER2DRECT", "ISAMPLER2DRECT", "USAMPLER2DRECT", + "SAMPLER2DRECTSHADOW", "SAMPLERBUFFER", "ISAMPLERBUFFER", + "USAMPLERBUFFER", "SAMPLEREXTERNALOES", "STRUCT", "VOID_TOK", "WHILE", + "IDENTIFIER", "TYPE_IDENTIFIER", "NEW_IDENTIFIER", "FLOATCONSTANT", + "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", + "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", + "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", + "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", + "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT", "LOWP", "MEDIUMP", + "HIGHP", "SUPERP", "PRECISION", "VERSION_TOK", "EXTENSION", "LINE", + "COLON", "EOL", "INTERFACE", "OUTPUT", "PRAGMA_DEBUG_ON", + "PRAGMA_DEBUG_OFF", "PRAGMA_OPTIMIZE_ON", "PRAGMA_OPTIMIZE_OFF", + "PRAGMA_INVARIANT_ALL", "LAYOUT_TOK", "ASM", "CLASS", "UNION", "ENUM", + "TYPEDEF", "TEMPLATE", "THIS", "PACKED_TOK", "GOTO", "INLINE_TOK", + "NOINLINE", "VOLATILE", "PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL", + "LONG_TOK", "SHORT_TOK", "DOUBLE_TOK", "HALF", "FIXED_TOK", "UNSIGNED", + "INPUT_TOK", "OUPTUT", "HVEC2", "HVEC3", "HVEC4", "DVEC2", "DVEC3", + "DVEC4", "FVEC2", "FVEC3", "FVEC4", "SAMPLER3DRECT", "SIZEOF", "CAST", + "NAMESPACE", "USING", "ERROR_TOK", "COMMON", "PARTITION", "ACTIVE", + "FILTER", "IMAGE1D", "IMAGE2D", "IMAGE3D", "IMAGECUBE", "IMAGE1DARRAY", + "IMAGE2DARRAY", "IIMAGE1D", "IIMAGE2D", "IIMAGE3D", "IIMAGECUBE", + "IIMAGE1DARRAY", "IIMAGE2DARRAY", "UIMAGE1D", "UIMAGE2D", "UIMAGE3D", + "UIMAGECUBE", "UIMAGE1DARRAY", "UIMAGE2DARRAY", "IMAGE1DSHADOW", + "IMAGE2DSHADOW", "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER", + "IMAGE1DARRAYSHADOW", "IMAGE2DARRAYSHADOW", "ROW_MAJOR", "'('", "')'", + "'['", "']'", "'.'", "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'", + "'%'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'", + "'{'", "'}'", "$accept", "translation_unit", "@1", "version_statement", + "pragma_statement", "extension_statement_list", "any_identifier", + "extension_statement", "external_declaration_list", + "variable_identifier", "primary_expression", "postfix_expression", + "integer_expression", "function_call", "function_call_or_method", + "function_call_generic", "function_call_header_no_parameters", "function_call_header_with_parameters", "function_call_header", "function_identifier", "method_call_generic", "method_call_header_no_parameters", "method_call_header_with_parameters", @@ -1094,19 +1129,22 @@ static const char *const yytname[] = "parameter_qualifier", "parameter_type_specifier", "init_declarator_list", "single_declaration", "fully_specified_type", "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id", - "interpolation_qualifier", "parameter_type_qualifier", "type_qualifier", - "storage_qualifier", "type_specifier", "type_specifier_no_prec", - "type_specifier_nonarray", "basic_type_specifier_nonarray", - "precision_qualifier", "struct_specifier", "struct_declaration_list", - "struct_declaration", "struct_declarator_list", "struct_declarator", - "initializer", "declaration_statement", "statement", "simple_statement", + "uniform_block_layout_qualifier", "interpolation_qualifier", + "parameter_type_qualifier", "type_qualifier", "storage_qualifier", + "type_specifier", "type_specifier_no_prec", "type_specifier_nonarray", + "basic_type_specifier_nonarray", "precision_qualifier", + "struct_specifier", "struct_declaration_list", "struct_declaration", + "struct_declarator_list", "struct_declarator", "initializer", + "declaration_statement", "statement", "simple_statement", "compound_statement", "@2", "statement_no_new_scope", "compound_statement_no_new_scope", "statement_list", "expression_statement", "selection_statement", "selection_rest_statement", "condition", "switch_statement", - "case_label", "iteration_statement", "for_init_statement", + "switch_body", "case_label", "case_label_list", "case_statement", + "case_statement_list", "iteration_statement", "for_init_statement", "conditionopt", "for_rest_statement", "jump_statement", - "external_declaration", "function_definition", 0 + "external_declaration", "function_definition", "uniform_block", + "member_list", "uniformopt", "member_declaration", "layout_defaults", 0 }; #endif @@ -1134,45 +1172,48 @@ static const yytype_uint16 yytoknum[] = 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 40, 41, 91, 93, - 46, 44, 43, 45, 33, 126, 42, 47, 37, 60, - 62, 38, 94, 124, 63, 58, 61, 59, 123, 125 + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 40, 41, 91, 93, 46, 44, 43, 45, 33, + 126, 42, 47, 37, 60, 62, 38, 94, 124, 63, + 58, 61, 59, 123, 125 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 220, 222, 221, 223, 223, 224, 224, 224, 224, - 224, 225, 225, 226, 226, 226, 227, 228, 228, 229, - 229, 230, 230, 230, 230, 230, 230, 231, 231, 231, - 231, 231, 231, 232, 233, 234, 234, 235, 235, 236, - 236, 237, 237, 238, 239, 239, 239, 240, 240, 241, - 241, 242, 242, 243, 244, 244, 244, 244, 245, 245, - 245, 245, 246, 246, 246, 246, 247, 247, 247, 248, - 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, - 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, - 256, 256, 257, 257, 258, 258, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 260, 260, 261, - 262, 262, 262, 263, 264, 264, 265, 265, 266, 267, - 267, 268, 268, 268, 268, 269, 269, 269, 269, 270, - 271, 271, 271, 271, 271, 271, 271, 272, 272, 272, - 272, 272, 272, 272, 272, 273, 273, 274, 275, 275, - 276, 276, 277, 277, 277, 278, 279, 279, 279, 279, - 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 281, 281, 282, 282, 282, 283, 283, - 283, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 285, 285, 285, 286, 286, 287, 287, 288, - 289, 289, 290, 290, 291, 292, 293, 293, 294, 294, - 294, 294, 294, 294, 294, 295, 296, 295, 297, 297, - 298, 298, 299, 299, 300, 300, 301, 302, 302, 303, - 303, 304, 305, 305, 306, 306, 306, 307, 307, 308, - 308, 309, 309, 310, 310, 310, 310, 310, 311, 311, - 311, 312 + 0, 225, 227, 226, 228, 228, 229, 229, 229, 229, + 229, 230, 230, 231, 231, 231, 232, 233, 233, 234, + 234, 235, 235, 235, 235, 235, 235, 236, 236, 236, + 236, 236, 236, 237, 238, 239, 239, 240, 240, 241, + 241, 242, 242, 243, 244, 244, 244, 245, 245, 246, + 246, 247, 247, 248, 249, 249, 249, 249, 250, 250, + 250, 250, 251, 251, 251, 251, 252, 252, 252, 253, + 253, 253, 254, 254, 254, 254, 254, 255, 255, 255, + 256, 256, 257, 257, 258, 258, 259, 259, 260, 260, + 261, 261, 262, 262, 263, 263, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 265, 265, 266, + 267, 267, 267, 267, 268, 269, 269, 270, 270, 271, + 272, 272, 273, 273, 273, 273, 274, 274, 274, 274, + 275, 276, 276, 276, 276, 276, 276, 276, 277, 277, + 277, 277, 277, 277, 277, 277, 278, 278, 279, 280, + 280, 281, 281, 281, 282, 282, 283, 283, 283, 284, + 285, 285, 285, 285, 285, 285, 285, 285, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 287, 287, 288, + 288, 288, 289, 289, 289, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 291, 291, 291, 292, 292, 293, 293, 294, + 295, 295, 296, 296, 297, 298, 299, 299, 300, 300, + 300, 300, 300, 300, 301, 302, 301, 303, 303, 304, + 304, 305, 305, 306, 306, 307, 308, 308, 309, 309, + 310, 311, 311, 312, 312, 313, 313, 314, 314, 315, + 315, 316, 316, 316, 317, 317, 318, 318, 319, 319, + 320, 320, 320, 320, 320, 321, 321, 321, 321, 322, + 323, 323, 324, 324, 325, 325, 326, 326, 327 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1189,13 +1230,14 @@ static const yytype_uint8 yyr2[] = 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 5, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 2, 2, 4, 2, 1, 1, 2, 3, 3, 2, - 5, 3, 2, 3, 2, 0, 1, 1, 1, 1, - 1, 3, 5, 6, 7, 8, 5, 1, 2, 4, - 5, 6, 7, 4, 2, 1, 2, 4, 1, 3, - 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, - 2, 2, 3, 1, 1, 1, 1, 2, 1, 1, - 2, 2, 1, 1, 2, 1, 3, 4, 1, 1, + 2, 2, 4, 1, 2, 1, 1, 2, 3, 3, + 2, 5, 3, 2, 3, 2, 0, 1, 1, 1, + 1, 1, 3, 5, 6, 7, 8, 5, 1, 2, + 4, 5, 6, 7, 4, 2, 1, 2, 4, 1, + 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 2, 2, 3, 1, 1, 1, + 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, + 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1203,11 +1245,12 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 1, 2, 3, 1, 3, 1, 4, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 0, 4, 1, 1, - 2, 3, 1, 2, 1, 2, 5, 3, 1, 1, - 4, 5, 3, 2, 5, 7, 6, 1, 1, 1, - 0, 2, 3, 2, 2, 2, 3, 2, 1, 1, - 1, 2 + 1, 1, 1, 1, 2, 0, 4, 1, 1, 2, + 3, 1, 2, 1, 2, 5, 3, 1, 1, 4, + 5, 2, 3, 3, 2, 1, 2, 2, 2, 1, + 2, 5, 7, 6, 1, 1, 1, 0, 2, 3, + 2, 2, 2, 3, 2, 1, 1, 1, 1, 2, + 6, 7, 1, 2, 0, 1, 5, 4, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1216,933 +1259,832 @@ static const yytype_uint8 yyr2[] = static const yytype_uint16 yydefact[] = { 4, 0, 0, 11, 0, 1, 2, 5, 0, 0, - 12, 13, 14, 15, 0, 165, 164, 185, 182, 183, - 184, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 186, 187, 188, 0, 168, 169, 172, 166, 154, 153, - 152, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 210, 211, 212, 213, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 0, 181, 180, 163, 234, 233, 232, - 0, 0, 0, 0, 0, 0, 0, 209, 214, 290, - 3, 289, 0, 0, 115, 125, 0, 130, 137, 157, - 159, 0, 156, 145, 173, 175, 178, 0, 179, 17, - 288, 0, 170, 171, 167, 0, 0, 19, 20, 144, - 0, 161, 0, 6, 7, 8, 9, 10, 0, 18, - 110, 0, 291, 113, 125, 155, 126, 127, 128, 116, - 0, 125, 0, 111, 13, 15, 138, 0, 158, 160, - 146, 0, 174, 0, 0, 0, 237, 0, 162, 0, - 150, 0, 148, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 22, 23, 25, 46, 0, - 0, 0, 58, 59, 60, 61, 264, 256, 260, 21, - 27, 54, 29, 34, 35, 0, 0, 40, 0, 62, - 0, 66, 69, 72, 77, 80, 82, 84, 86, 88, - 90, 92, 94, 107, 0, 245, 0, 145, 248, 262, - 247, 246, 0, 249, 250, 251, 252, 253, 254, 117, - 122, 124, 129, 0, 131, 0, 0, 118, 176, 62, - 109, 0, 44, 16, 242, 0, 240, 236, 238, 0, - 112, 0, 147, 0, 284, 283, 0, 0, 0, 287, - 285, 0, 0, 0, 273, 0, 55, 56, 0, 255, - 0, 31, 32, 0, 0, 38, 37, 0, 181, 41, - 43, 97, 98, 100, 99, 102, 103, 104, 105, 106, - 101, 96, 0, 57, 0, 0, 0, 0, 0, 0, + 12, 13, 14, 15, 0, 169, 168, 189, 186, 187, + 188, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 190, 191, 192, 0, 172, 173, 176, 170, 158, 157, + 156, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 214, 215, 217, 218, 220, 221, 222, 223, + 224, 226, 227, 229, 230, 231, 232, 234, 235, 237, + 238, 239, 240, 213, 228, 236, 219, 225, 233, 241, + 216, 0, 185, 184, 167, 244, 243, 242, 0, 0, + 0, 0, 0, 0, 0, 307, 3, 306, 0, 0, + 116, 126, 0, 131, 138, 161, 163, 0, 160, 146, + 177, 179, 182, 0, 183, 17, 305, 113, 308, 0, + 174, 175, 171, 0, 0, 0, 176, 19, 20, 145, + 0, 165, 0, 6, 7, 8, 9, 10, 0, 18, + 110, 0, 309, 114, 126, 159, 127, 128, 129, 117, + 0, 126, 0, 111, 13, 15, 139, 0, 176, 162, + 164, 147, 0, 178, 0, 314, 0, 0, 247, 0, + 166, 0, 155, 154, 151, 0, 149, 153, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 22, 23, + 25, 46, 0, 0, 0, 58, 59, 60, 61, 273, + 265, 269, 21, 27, 54, 29, 34, 35, 0, 0, + 40, 0, 62, 0, 66, 69, 72, 77, 80, 82, + 84, 86, 88, 90, 92, 94, 107, 0, 255, 0, + 161, 146, 258, 271, 257, 256, 0, 259, 260, 261, + 262, 263, 118, 123, 125, 130, 0, 132, 0, 0, + 119, 0, 318, 180, 62, 109, 0, 44, 16, 315, + 314, 0, 0, 314, 252, 0, 250, 246, 248, 0, + 112, 0, 148, 0, 301, 300, 0, 0, 0, 304, + 302, 0, 0, 0, 55, 56, 0, 264, 0, 31, + 32, 0, 0, 38, 37, 0, 185, 41, 43, 97, + 98, 100, 99, 102, 103, 104, 105, 106, 101, 96, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 265, 261, 263, 119, 121, - 123, 0, 0, 139, 0, 244, 143, 177, 0, 0, - 239, 235, 151, 149, 0, 278, 277, 280, 0, 286, - 0, 272, 163, 269, 0, 0, 26, 0, 0, 33, - 30, 0, 36, 0, 0, 50, 42, 95, 63, 64, - 65, 67, 68, 70, 71, 75, 76, 73, 74, 78, - 79, 81, 83, 85, 87, 89, 91, 0, 108, 0, - 132, 0, 136, 0, 140, 0, 241, 0, 279, 0, - 0, 0, 0, 0, 0, 257, 28, 53, 48, 47, - 0, 181, 51, 0, 0, 0, 133, 141, 0, 243, - 0, 281, 0, 268, 266, 271, 0, 259, 274, 258, - 52, 93, 120, 134, 0, 142, 0, 282, 276, 0, - 270, 135, 275, 267 + 0, 0, 0, 274, 176, 270, 272, 120, 122, 124, + 0, 0, 140, 0, 254, 144, 314, 181, 0, 0, + 0, 313, 0, 0, 249, 245, 152, 150, 0, 295, + 294, 297, 0, 303, 0, 167, 278, 0, 161, 0, + 26, 0, 0, 33, 30, 0, 36, 0, 0, 50, + 42, 95, 63, 64, 65, 67, 68, 70, 71, 75, + 76, 73, 74, 78, 79, 81, 83, 85, 87, 89, + 91, 0, 108, 0, 133, 0, 137, 0, 141, 0, + 0, 310, 0, 0, 251, 0, 296, 0, 0, 0, + 0, 0, 0, 266, 28, 53, 48, 47, 0, 185, + 51, 0, 0, 0, 134, 142, 0, 0, 0, 317, + 253, 0, 298, 0, 277, 275, 0, 280, 0, 268, + 291, 267, 52, 93, 121, 135, 0, 143, 311, 316, + 0, 299, 293, 0, 0, 0, 281, 285, 0, 289, + 0, 279, 136, 292, 276, 0, 284, 287, 286, 288, + 282, 290, 283 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 2, 9, 3, 89, 6, 160, 10, 90, 189, - 190, 191, 348, 192, 193, 194, 195, 196, 197, 198, - 352, 353, 354, 355, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 292, - 214, 241, 215, 216, 93, 94, 95, 230, 139, 140, - 231, 96, 97, 98, 99, 161, 162, 100, 141, 101, - 102, 242, 104, 105, 106, 107, 108, 155, 156, 245, - 246, 326, 218, 219, 220, 221, 270, 418, 419, 222, - 223, 224, 414, 345, 225, 226, 227, 337, 389, 390, - 228, 109, 110 + -1, 2, 9, 3, 95, 6, 264, 10, 96, 202, + 203, 204, 372, 205, 206, 207, 208, 209, 210, 211, + 376, 377, 378, 379, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 310, + 227, 256, 228, 229, 99, 100, 101, 243, 149, 150, + 244, 102, 103, 104, 230, 175, 176, 177, 106, 151, + 107, 108, 257, 110, 111, 112, 113, 114, 167, 168, + 265, 266, 345, 232, 233, 234, 235, 288, 450, 451, + 236, 237, 238, 445, 369, 239, 447, 467, 468, 469, + 470, 240, 361, 417, 418, 241, 115, 116, 117, 261, + 262, 263, 118 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -366 +#define YYPACT_NINF -373 static const yytype_int16 yypact[] = { - -57, -43, 62, -366, -50, -366, -30, -366, 67, 3341, - -366, -366, -366, -366, -6, -366, -366, -366, -366, -366, - -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, - -366, -366, -366, 8, -366, -366, -366, -366, -366, -366, - -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, - -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, - -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, - -366, -366, -366, -65, -366, -366, 226, -366, -366, -366, - 51, -31, -28, 6, 13, 15, -44, -366, -366, -366, - 3341, -366, -183, -47, -29, 18, -169, -366, 140, 24, - 24, 3460, -366, -366, -366, -24, -366, 3533, -366, -366, - -366, 67, -366, -366, -366, 3460, -48, -366, -366, -366, - 24, -366, 3533, -366, -366, -366, -366, -366, 67, -366, - -366, 408, -366, -366, 55, -366, -366, -366, -366, -366, - 3460, 200, 67, -366, -20, -18, -178, 23, -366, -366, - -366, 2225, -366, 72, 67, 1598, -366, 3460, -366, 4, - 10, -84, -366, 11, 14, 1059, 40, 42, 29, 1836, - 43, 2783, 34, 54, -366, -366, -366, -366, -366, 2783, - 2783, 2783, -366, -366, -366, -366, -366, 32, -366, 56, - -366, -71, -366, -366, -366, 57, -81, 2969, 61, -27, - 2783, 35, -88, -41, -70, 33, 60, 41, 59, 181, - 180, -89, -366, -366, -168, -366, 58, 80, -366, -366, - -366, -366, 625, -366, -366, -366, -366, -366, -366, -366, - -366, -366, 67, 3460, -177, 2411, 2783, -366, -366, -366, - -366, 78, -366, -366, 81, -137, -366, -366, -366, 1717, - -366, 201, -366, 67, -366, -366, 205, 1478, 2783, -366, - -366, -134, 2783, -115, -366, 2039, -366, -366, -60, -366, - 1059, -366, -366, 2783, 140, -366, -366, 2783, 85, -366, - -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, - -366, -366, 2783, -366, 2783, 2783, 2783, 2783, 2783, 2783, - 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, - 2783, 2783, 2783, 2783, 2783, -366, -366, -366, 86, -366, - -366, 2597, 2783, 69, 87, -366, -366, -366, 2783, 67, - -366, -366, -366, -366, 91, -366, -366, 2039, -59, -366, - -46, -366, 129, 88, 67, 93, -366, 842, 89, 88, - -366, 95, -366, 96, -37, 3155, -366, -366, -366, -366, - -366, 35, 35, -88, -88, -41, -41, -41, -41, -70, - -70, 33, 60, 41, 59, 181, 180, -96, -366, 2783, - 76, 97, -366, 2783, 79, 98, -366, 2783, -366, 77, - 101, 1059, 83, 90, 1275, -366, -366, -366, -366, -366, - 2783, 102, -366, 2783, 108, 2783, 94, -366, 2783, -366, - -26, 2783, 1275, 297, -366, -366, 2783, -366, -366, -366, - -366, -366, -366, -366, 2783, -366, 100, 88, -366, 1059, - -366, -366, -366, -366 + -75, -37, 53, -373, -50, -373, -19, -373, 160, 2970, + -373, -373, -373, -373, -36, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, 130, -373, -373, 28, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -58, -373, -373, 43, -373, -373, -373, 147, 0, + 17, 20, 26, 46, -26, -373, 2970, -373, -166, -15, + -8, 2, -128, -373, 196, 173, 198, 1003, -373, -373, + -373, 5, -373, 1225, -373, -373, -373, -373, -373, 160, + -373, -373, -373, -20, 1003, 10, -373, -373, -373, -373, + 198, -373, 1225, -373, -373, -373, -373, -373, -54, -373, + -373, 460, -373, -373, 100, -373, -373, -373, -373, -373, + 1003, 181, 160, -373, 19, 35, -162, 38, -78, -373, + -373, -373, 2180, -373, 95, -3, 160, 559, -373, 1003, + -373, 42, -373, -373, 21, -157, -373, -373, 47, 49, + 1347, 40, 64, 50, 1875, 75, 90, -373, -373, -373, + -373, -373, 2568, 2568, 2568, -373, -373, -373, -373, -373, + 60, -373, 96, -373, -52, -373, -373, -373, 48, -114, + 2759, 98, -42, 2568, 83, -53, 101, -76, 113, 84, + 85, 86, 201, 204, -89, -373, -373, -122, -373, 81, + 222, 106, -373, -373, -373, -373, 682, -373, -373, -373, + -373, -373, -373, -373, -373, 160, 1003, -149, 2280, 2568, + -373, 87, -373, -373, -373, -373, 104, -373, -373, -373, + 273, 91, 1003, -25, 108, -113, -373, -373, -373, 781, + -373, 226, -373, -54, -373, -373, 252, 1776, 2568, -373, + -373, -111, 2568, 2083, -373, -373, -45, -373, 1347, -373, + -373, 2568, 196, -373, -373, 2568, 134, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + 2568, -373, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, + 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, + 2568, 2568, 2568, -373, 251, -373, -373, 135, -373, -373, + 2471, 2568, 129, 149, -373, -373, -3, -373, 1003, 132, + 160, -373, 2568, 160, -373, -373, -373, -373, 150, -373, + -373, 2083, -34, -373, -24, 309, 151, 160, 198, 156, + -373, 904, 155, 151, -373, 162, -373, 159, -22, 2856, + -373, -373, -373, -373, -373, 83, 83, -53, -53, 101, + 101, 101, 101, -76, -76, 113, 84, 85, 86, 201, + 204, -107, -373, 2568, 143, 161, -373, 2568, 145, 144, + 160, -373, -86, 163, -373, 2568, -373, 148, 167, 1347, + 152, 153, 1568, -373, -373, -373, -373, -373, 2568, 169, + -373, 2568, 168, 2568, 157, -373, 2568, 154, -80, -373, + -373, -21, 2568, 1568, 361, -373, -5, -373, 2568, -373, + -373, -373, -373, -373, -373, -373, 2568, -373, -373, -373, + 158, 151, -373, 1347, 2568, 164, -373, -373, 1126, 1347, + -2, -373, -373, -373, -373, -101, -373, -373, -373, -373, + -373, 1347, -373 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -366, -366, -366, -366, -366, -366, -7, -366, -366, -62, - -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, - -366, -366, -366, -366, -101, -366, -113, -109, -121, -61, - 5, 3, 9, 16, 2, 7, -366, -142, -100, -366, - -164, -225, 21, 22, -366, -366, -366, 82, 186, 173, - 92, -366, -366, -242, -366, -366, 68, -73, -366, -366, - -74, -9, -67, -366, -366, 243, -366, 170, -147, -366, - 0, -298, 73, -159, -365, -58, -366, -80, 239, 63, - 84, -366, -366, -2, -366, -366, -366, -366, -366, -366, - -366, 246, -366 + -373, -373, -373, -373, -373, -373, -7, -373, -373, -79, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, 4, -373, -92, -70, -130, -95, + 52, 55, 56, 51, 57, 58, -373, -152, -158, -373, + -175, -230, 6, 29, -373, -373, -373, 136, 241, 236, + 146, -373, -373, -243, -6, -373, 116, -373, -77, -373, + -373, -82, -9, -74, -373, -373, 302, -373, 224, -145, + -321, 41, -286, 114, -176, -372, -373, -373, -48, 298, + 109, 121, -373, -373, 39, -373, -373, -69, -373, -68, + -373, -373, -373, -373, -373, -373, 305, -373, -373, -229, + 165, -373, -373 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -115 +#define YYTABLE_NINF -313 static const yytype_int16 yytable[] = { - 103, 14, 121, 120, 312, 261, 256, 263, 248, 240, - 324, 11, 12, 13, 119, 271, 272, 268, 301, 302, - 235, 321, 135, 344, 382, 148, 149, 15, 16, 417, - 91, 92, 142, 314, 130, 131, 147, 4, 236, 322, - 152, 112, 113, 299, 300, 114, 158, 417, 143, 315, - 239, 136, 137, 138, 1, 159, 33, 34, 35, 135, - 36, 37, 5, 317, 329, 7, 116, 314, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 266, 267, - 330, 103, 8, 339, 123, 407, 314, 124, 136, 137, - 138, 146, 150, 240, 338, 344, 381, 279, 340, 293, - 341, 343, 248, 385, 153, 314, 154, 423, 111, 349, - 425, 91, 92, 252, 297, 298, 276, 253, 430, 403, - 277, 125, 217, 305, 306, 313, 431, 273, 126, 274, - 127, 232, 15, 16, 239, 234, 325, 346, 391, 303, - 304, 314, 314, 11, 12, 13, 154, 244, 154, 377, - 133, 392, 128, 115, 404, 314, 217, 77, 78, 79, - 399, 33, 34, 35, 400, 36, 37, 38, 39, 40, - 157, 426, 134, 343, 151, 314, -19, 356, -20, 240, - 365, 366, 367, 368, 361, 362, 240, 243, 317, 291, - 363, 364, 357, 358, 359, 360, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 351, 217, 378, -114, 144, 12, 145, 237, - 239, 250, 325, 410, 232, 318, 251, 239, 254, 15, - 16, 255, 413, 136, 137, 138, 257, 240, 258, 262, - 154, 294, 295, 296, 369, 370, 259, 427, 217, 264, - 265, 269, -45, 308, 275, 402, 217, 280, 33, 34, - 35, 217, 36, 37, 38, 39, 40, 350, 121, 120, - 433, 307, 309, 310, 311, 130, -44, 327, 239, 328, - 334, 332, -39, 325, 379, 383, 384, 387, 396, 314, - 394, 397, 405, 398, 411, 408, 406, 409, 412, -49, - 420, 187, 117, 421, 118, 325, 416, 422, 325, 429, - 424, 372, 371, 375, 233, 319, 325, 432, 373, 376, - 229, 333, 244, 122, 325, 320, 374, 249, 217, 386, - 335, 132, 428, 347, 415, 388, 129, 393, 217, 0, - 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, + 109, 14, 131, 105, 276, 129, 145, 130, 251, 281, + 255, 259, 330, 464, 465, 97, 464, 465, 343, 286, + 319, 320, 268, 159, 160, 157, 11, 12, 13, 412, + 11, 12, 13, 259, 351, 146, 147, 148, 98, 163, + 367, 248, 289, 290, 1, 272, 15, 16, 170, 273, + 449, 4, 297, 5, 340, 406, 140, 141, 171, 249, + 336, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 449, 341, 7, 125, 33, 34, 35, 152, 126, + 37, 38, 39, 40, 332, 172, 119, 109, 294, 438, + 105, 344, 295, 353, 153, 332, 255, 156, 161, 332, + 333, 8, 97, 362, 145, 332, 94, 364, 366, 354, + 405, 363, 164, 431, 123, 166, 373, 409, 367, 482, + 353, 435, 413, 133, 268, 98, 353, 127, 94, 128, + 331, 174, 231, 146, 147, 148, 439, 380, 321, 322, + 134, 245, 459, 135, 252, 247, 173, 455, 159, 136, + 457, 291, 381, 292, 315, 316, 401, 370, 166, 260, + 166, 332, 471, 120, 121, 124, 254, 122, 419, 137, + 472, 231, 332, 432, 402, 138, 15, 16, 420, 309, + 427, 460, 332, 344, 428, 332, 366, 143, 255, 389, + 390, 391, 392, 317, 318, 336, 284, 285, 144, -312, + 255, 15, 16, 165, -115, 33, 34, 35, 162, 158, + 37, 323, 324, 375, 146, 147, 148, 311, 258, 466, + -19, 430, 480, 385, 386, 15, 16, 231, 393, 394, + 33, 34, 35, 169, 126, 37, -20, 245, 337, 250, + 441, 277, 271, 444, 11, 12, 13, 387, 388, 344, + 293, 255, 254, 350, 33, 34, 35, 260, 334, 37, + 166, 85, 86, 87, 270, 278, 174, 461, 231, 274, + 452, 275, 279, 453, 231, 344, 282, 368, 344, 231, + 154, 12, 155, 131, 287, 374, 159, 474, 130, 475, + 344, 283, 477, 479, 312, 313, 314, -45, 344, 298, + 325, 328, 326, 140, 327, 479, 329, -44, 347, 259, + 346, 352, 15, 16, 356, 349, 382, 383, 384, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 358, -39, 251, 403, 410, + 260, 33, 34, 35, 254, 126, 37, 38, 39, 40, + 407, 415, 231, 408, 411, 368, 254, 332, 422, 424, + 421, 426, 231, 425, 433, 434, 436, 440, 437, 443, + 442, -49, 454, 463, 448, 446, 458, 395, 456, 398, + 473, 396, 338, 397, 476, 242, 399, 246, 400, 357, + 132, 359, 339, 269, 414, 462, 142, 371, 360, 478, + 416, 139, 481, 0, 0, 0, 0, 254, 0, 0, + 231, 0, 0, 231, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, + 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 231, 0, 0, 0, 0, 231, + 231, 0, 0, 15, 16, 17, 18, 19, 20, 178, + 179, 180, 231, 181, 182, 183, 184, 185, 0, 0, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 0, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 186, 127, 83, 128, 187, 188, 189, + 190, 191, 0, 0, 192, 193, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 18, 19, 20, 0, 0, + 0, 0, 0, 84, 85, 86, 87, 0, 88, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 94, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 217, 0, 0, 217, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, - 0, 15, 16, 17, 18, 19, 20, 163, 164, 165, - 217, 166, 167, 168, 169, 170, 171, 172, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 0, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 173, 117, 75, 118, 174, 175, 176, - 177, 178, 0, 0, 179, 180, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 77, 78, 79, 0, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, - 182, 183, 184, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 186, 187, 188, 15, 16, - 17, 18, 19, 20, 163, 164, 165, 0, 166, 167, - 168, 169, 170, 171, 172, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 173, 117, 75, 118, 174, 175, 176, 177, 178, 0, - 0, 179, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 77, 78, 79, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 181, 0, 0, 0, 0, 0, 182, 183, 184, - 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 186, 187, 316, 15, 16, 17, 18, 19, - 20, 163, 164, 165, 0, 166, 167, 168, 169, 170, - 171, 172, 21, 22, 23, 24, 25, 26, 27, 28, + 0, 194, 0, 0, 0, 0, 0, 195, 196, 197, + 198, 0, 0, 85, 86, 87, 0, 0, 0, 0, + 0, 0, 199, 200, 201, 15, 16, 17, 18, 19, + 20, 178, 179, 180, 0, 181, 182, 183, 184, 185, + 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 173, 117, 75, - 118, 174, 175, 176, 177, 178, 0, 0, 179, 180, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 186, 127, 83, 128, 187, + 188, 189, 190, 191, 0, 0, 192, 193, 0, 0, + 0, 0, 0, 267, 0, 0, 17, 18, 19, 20, + 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, + 88, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 76, 77, 78, - 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, + 0, 0, 0, 194, 0, 0, 0, 0, 0, 195, + 196, 197, 198, 0, 0, 85, 86, 87, 0, 0, + 0, 0, 0, 0, 199, 200, 335, 15, 16, 17, + 18, 19, 20, 178, 179, 180, 0, 181, 182, 183, + 184, 185, 0, 0, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 186, 127, 83, + 128, 187, 188, 189, 190, 191, 0, 0, 192, 193, + 0, 0, 0, 0, 0, 355, 0, 0, 17, 18, + 19, 20, 0, 0, 0, 0, 0, 84, 85, 86, + 87, 0, 88, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 94, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, - 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 0, 0, 0, 0, 182, 183, 184, 185, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, - 187, 395, 15, 16, 17, 18, 19, 20, 163, 164, - 165, 0, 166, 167, 168, 169, 170, 171, 172, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 0, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 173, 117, 75, 118, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 77, 78, 79, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, - 0, 182, 183, 184, 185, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 186, 187, 15, 16, - 17, 18, 19, 20, 163, 164, 165, 0, 166, 167, - 168, 169, 170, 171, 172, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, + 0, 195, 196, 197, 198, 0, 0, 85, 86, 87, + 0, 0, 0, 0, 0, 0, 199, 200, 423, 15, + 16, 17, 18, 19, 20, 178, 179, 180, 0, 181, + 182, 183, 184, 185, 464, 465, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 186, + 127, 83, 128, 187, 188, 189, 190, 191, 0, 0, + 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 18, 19, 20, 0, 0, 0, 0, 0, 84, + 85, 86, 87, 0, 88, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 94, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 173, 117, 75, 118, 174, 175, 176, 177, 178, 0, - 0, 179, 180, 0, 0, 0, 0, 0, 0, 0, + 75, 76, 77, 78, 79, 80, 81, 82, 0, 0, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, + 0, 0, 0, 195, 196, 197, 198, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, + 15, 16, 17, 18, 19, 20, 178, 179, 180, 0, + 181, 182, 183, 184, 185, 0, 0, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 0, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 186, 127, 83, 128, 187, 188, 189, 190, 191, 0, + 0, 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 77, 78, 79, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, + 84, 85, 86, 87, 0, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 181, 0, 0, 0, 0, 0, 182, 183, 184, - 185, 15, 16, 17, 18, 19, 20, 0, 0, 0, - 0, 0, 186, 131, 0, 0, 0, 0, 21, 22, + 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, + 0, 0, 0, 0, 195, 196, 197, 198, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, + 200, 15, 16, 17, 18, 19, 20, 178, 179, 180, + 0, 181, 182, 183, 184, 185, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 0, 117, 75, 118, 174, 175, 176, - 177, 178, 0, 0, 179, 180, 0, 0, 0, 0, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 186, 127, 83, 128, 187, 188, 189, 190, 191, + 0, 0, 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 77, 78, 79, 0, 80, 0, + 0, 84, 85, 86, 87, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 86, 0, 17, 18, 19, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 0, 0, 0, 0, 0, 87, 0, 88, 0, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 0, 181, 75, 0, 0, 0, 0, - 182, 183, 184, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, - 0, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 18, 19, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, - 0, 0, 0, 0, 0, 87, 0, 88, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, - 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 18, 19, 20, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 0, 0, - 0, 0, 0, 0, 87, 0, 88, 41, 42, 43, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, + 0, 0, 0, 0, 0, 195, 196, 197, 198, 15, + 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, + 199, 141, 0, 0, 0, 0, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 0, 117, 75, 118, 174, 175, 176, 177, 178, - 0, 0, 179, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, - 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 181, 0, 0, 0, 0, 0, 182, 183, - 184, 185, 15, 16, 17, 18, 19, 20, 0, 0, - 0, 0, 0, 260, 0, 0, 0, 0, 0, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 0, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 0, 117, 75, 118, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 77, 78, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 18, 19, 20, 0, 181, 0, 0, 0, 0, - 0, 182, 183, 184, 185, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 0, + 127, 83, 128, 187, 188, 189, 190, 191, 0, 0, + 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 18, 19, 20, 0, 0, 0, 0, 0, 84, + 85, 86, 87, 0, 88, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 94, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 0, 117, 75, 118, 174, 175, 176, 177, 178, 0, - 0, 179, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, + 75, 76, 77, 78, 79, 80, 81, 82, 0, 127, + 83, 128, 187, 188, 189, 190, 191, 0, 0, 192, + 193, 0, 0, 0, 0, 0, 0, 194, 0, 0, + 0, 0, 0, 195, 196, 197, 198, 0, 0, 85, + 86, 87, 0, 0, 0, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, + 0, 0, 195, 196, 197, 198, 15, 16, 17, 18, + 19, 20, 0, 0, 0, 0, 0, 280, 0, 0, + 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 0, 126, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 0, 127, 83, 128, + 187, 188, 189, 190, 191, 0, 0, 192, 193, 0, + 0, 0, 0, 0, 0, 17, 18, 19, 20, 0, + 0, 0, 0, 0, 0, 0, 365, 85, 86, 87, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 0, 0, 94, 0, 0, 0, 0, 0, + 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 0, 127, 83, 128, 187, 188, 189, + 190, 191, 0, 0, 192, 193, 0, 0, 0, 0, + 0, 0, 0, 0, 194, 17, 18, 19, 20, 0, + 195, 196, 197, 198, 85, 86, 87, 0, 0, 0, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 0, 127, 83, 128, 187, 188, 189, + 190, 191, 0, 0, 192, 193, 0, 0, 0, 0, + 0, 194, 0, 0, 253, 0, 0, 195, 196, 197, + 198, 0, 0, 0, 85, 86, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, - 0, 181, 0, 0, 238, 0, 0, 182, 183, 184, - 185, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 0, 194, 0, 0, 342, 0, 0, 195, 196, 197, + 198, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 0, 117, 75, 118, - 174, 175, 176, 177, 178, 0, 0, 179, 180, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 77, 78, 79, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 0, 127, 83, 128, 187, 188, + 189, 190, 191, 0, 0, 192, 193, 0, 0, 0, + 0, 0, 0, 17, 18, 19, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 85, 86, 87, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 0, 127, 83, 128, 187, 188, 189, 190, 191, + 0, 0, 192, 193, 0, 0, 0, 0, 0, 0, + 0, 0, 194, 0, 0, 404, 0, 0, 195, 196, + 197, 198, 85, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 18, 19, 20, 0, 181, 0, 0, - 323, 0, 0, 182, 183, 184, 185, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 0, 117, 75, 118, 174, 175, 176, 177, - 178, 0, 0, 179, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, - 19, 20, 0, 181, 0, 0, 380, 0, 0, 182, - 183, 184, 185, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 0, 117, - 75, 118, 174, 175, 176, 177, 178, 0, 0, 179, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, - 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 18, 19, 20, 0, 181, - 0, 0, 0, 0, 0, 182, 183, 184, 185, 21, + 0, 0, 0, 0, 17, 18, 19, 20, 0, 194, + 0, 0, 0, 0, 0, 195, 196, 197, 198, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 278, 0, 117, 75, 118, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 77, 78, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 18, 19, 20, 0, 181, 0, 0, 0, 0, - 0, 182, 183, 184, 185, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 401, - 0, 117, 75, 118, 174, 175, 176, 177, 178, 0, - 0, 179, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 16, 17, 18, 19, 20, - 0, 181, 0, 0, 0, 0, 0, 182, 183, 184, - 185, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 0, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 0, 0, 75, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 77, 78, 79, - 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, - 82, 83, 84, 85, 86, 17, 18, 19, 20, 0, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 296, 0, 127, 83, 128, 187, 188, 189, 190, + 191, 0, 0, 192, 193, 0, 0, 0, 0, 0, + 0, 17, 18, 19, 20, 0, 0, 0, 0, 0, + 0, 0, 0, 85, 86, 87, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 429, 0, + 127, 83, 128, 187, 188, 189, 190, 191, 0, 0, + 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 194, 0, 0, 0, 0, 0, 195, 196, 197, 198, + 85, 86, 87, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 0, 0, 0, 0, 0, 0, 87, 0, - 88, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 31, 32, 33, 34, 35, 0, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 0, 0, 75, 17, 18, - 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 0, 77, 78, 79, 0, - 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 87, 0, 88, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 0, 0, 83, 0, 194, 0, 0, + 0, 0, 0, 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 0, 88 + 0, 0, 0, 84, 85, 86, 87, 0, 88, 0, + 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, + 93, 94 }; static const yytype_int16 yycheck[] = { - 9, 8, 76, 76, 93, 169, 165, 171, 155, 151, - 235, 76, 77, 78, 76, 86, 87, 181, 88, 89, - 198, 198, 4, 265, 322, 99, 100, 3, 4, 394, - 9, 9, 201, 201, 217, 218, 98, 80, 216, 216, - 107, 33, 34, 84, 85, 37, 120, 412, 217, 217, - 151, 33, 34, 35, 111, 122, 32, 33, 34, 4, - 36, 37, 0, 222, 201, 115, 73, 201, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 179, 180, - 217, 90, 112, 217, 115, 383, 201, 115, 33, 34, - 35, 98, 101, 235, 258, 337, 321, 197, 262, 200, - 215, 265, 249, 328, 111, 201, 115, 405, 114, 273, - 408, 90, 90, 197, 202, 203, 197, 201, 416, 215, - 201, 115, 131, 90, 91, 214, 424, 198, 115, 200, - 115, 140, 3, 4, 235, 142, 236, 197, 197, 209, - 210, 201, 201, 76, 77, 78, 155, 154, 157, 313, - 197, 197, 196, 218, 379, 201, 165, 106, 107, 108, - 197, 32, 33, 34, 201, 36, 37, 38, 39, 40, - 218, 197, 201, 337, 198, 201, 196, 277, 196, 321, - 301, 302, 303, 304, 297, 298, 328, 115, 347, 216, - 299, 300, 292, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 274, 222, 314, 197, 76, 77, 78, 196, - 321, 217, 322, 387, 233, 232, 216, 328, 217, 3, - 4, 217, 391, 33, 34, 35, 196, 379, 196, 196, - 249, 206, 207, 208, 305, 306, 217, 411, 257, 215, - 196, 219, 196, 212, 197, 355, 265, 196, 32, 33, - 34, 270, 36, 37, 38, 39, 40, 274, 342, 342, - 429, 211, 213, 92, 94, 217, 196, 199, 379, 198, - 75, 80, 197, 383, 198, 216, 199, 196, 199, 201, - 197, 196, 216, 197, 217, 216, 199, 199, 197, 197, - 400, 218, 76, 403, 78, 405, 216, 199, 408, 12, - 216, 308, 307, 311, 141, 233, 416, 217, 309, 312, - 134, 253, 329, 80, 424, 233, 310, 157, 337, 329, - 257, 92, 412, 270, 392, 337, 90, 344, 347, -1, - -1, 257, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 8, 84, 9, 180, 84, 4, 84, 86, 184, + 162, 36, 101, 18, 19, 9, 18, 19, 248, 194, + 96, 97, 167, 105, 106, 104, 84, 85, 86, 350, + 84, 85, 86, 36, 263, 33, 34, 35, 9, 113, + 283, 203, 94, 95, 119, 202, 3, 4, 130, 206, + 422, 88, 210, 0, 203, 341, 222, 223, 132, 221, + 236, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 443, 221, 123, 81, 32, 33, 34, 206, 36, + 37, 38, 39, 40, 206, 139, 122, 96, 202, 410, + 96, 249, 206, 206, 222, 206, 248, 104, 107, 206, + 222, 120, 96, 278, 4, 206, 131, 282, 283, 222, + 340, 222, 119, 220, 86, 124, 291, 346, 361, 220, + 206, 407, 352, 123, 269, 96, 206, 84, 131, 86, + 219, 138, 141, 33, 34, 35, 222, 295, 214, 215, + 123, 150, 222, 123, 222, 152, 200, 433, 230, 123, + 436, 203, 310, 205, 207, 208, 331, 202, 167, 165, + 169, 206, 448, 33, 34, 223, 162, 37, 202, 123, + 456, 180, 206, 403, 332, 201, 3, 4, 202, 221, + 202, 202, 206, 341, 206, 206, 361, 202, 340, 319, + 320, 321, 322, 92, 93, 371, 192, 193, 206, 224, + 352, 3, 4, 223, 202, 32, 33, 34, 203, 36, + 37, 98, 99, 292, 33, 34, 35, 213, 123, 224, + 201, 379, 224, 315, 316, 3, 4, 236, 323, 324, + 32, 33, 34, 223, 36, 37, 201, 246, 245, 201, + 415, 201, 221, 419, 84, 85, 86, 317, 318, 407, + 202, 403, 248, 262, 32, 33, 34, 263, 36, 37, + 269, 114, 115, 116, 222, 201, 273, 442, 277, 222, + 428, 222, 222, 431, 283, 433, 201, 283, 436, 288, + 84, 85, 86, 365, 224, 292, 368, 463, 365, 464, + 448, 201, 468, 469, 211, 212, 213, 201, 456, 201, + 216, 100, 217, 222, 218, 481, 102, 201, 204, 36, + 223, 203, 3, 4, 88, 224, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 83, 202, 86, 203, 348, + 346, 32, 33, 34, 340, 36, 37, 38, 39, 40, + 221, 201, 361, 204, 222, 361, 352, 206, 202, 204, + 367, 202, 371, 201, 221, 204, 221, 204, 224, 202, + 222, 202, 204, 12, 221, 223, 222, 325, 221, 328, + 222, 326, 246, 327, 220, 144, 329, 151, 330, 273, + 88, 277, 246, 169, 353, 443, 98, 288, 277, 468, + 361, 96, 470, -1, -1, -1, -1, 403, -1, -1, + 419, -1, -1, 422, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, + -1, -1, -1, -1, 443, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 463, -1, -1, -1, -1, 468, + 469, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 481, 13, 14, 15, 16, 17, -1, -1, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, -1, -1, 94, 95, -1, -1, -1, -1, + -1, -1, -1, -1, 5, 6, 7, 8, -1, -1, + -1, -1, -1, 113, 114, 115, 116, -1, 118, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 131, -1, -1, -1, -1, -1, -1, -1, -1, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, -1, -1, 85, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 201, -1, -1, -1, -1, -1, 207, 208, 209, + 210, -1, -1, 114, 115, 116, -1, -1, -1, -1, + -1, -1, 222, 223, 224, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, 13, 14, 15, 16, 17, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, -1, -1, 94, 95, -1, -1, + -1, -1, -1, 224, -1, -1, 5, 6, 7, 8, + -1, -1, -1, -1, -1, 113, 114, 115, 116, -1, + 118, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 131, -1, -1, -1, -1, -1, -1, + -1, -1, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, -1, -1, 85, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 201, -1, -1, -1, -1, -1, 207, + 208, 209, 210, -1, -1, 114, 115, 116, -1, -1, + -1, -1, -1, -1, 222, 223, 224, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, 13, 14, 15, + 16, 17, -1, -1, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, -1, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, -1, -1, 94, 95, + -1, -1, -1, -1, -1, 224, -1, -1, 5, 6, + 7, 8, -1, -1, -1, -1, -1, 113, 114, 115, + 116, -1, 118, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 131, -1, -1, -1, -1, + -1, -1, -1, -1, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, -1, -1, 85, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 201, -1, -1, -1, -1, + -1, 207, 208, 209, 210, -1, -1, 114, 115, 116, + -1, -1, -1, -1, -1, -1, 222, 223, 224, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, -1, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, -1, -1, + 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, -1, -1, -1, -1, -1, 113, + 114, 115, 116, -1, 118, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 131, -1, -1, + -1, -1, -1, -1, -1, -1, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, -1, -1, + 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 201, -1, -1, + -1, -1, -1, 207, 208, 209, 210, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 222, 223, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, -1, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, + -1, 94, 95, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 113, 114, 115, 116, -1, 118, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 131, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 391, -1, -1, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 412, -1, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 429, 13, 14, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 201, -1, + -1, -1, -1, -1, 207, 208, 209, 210, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 222, + 223, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, -1, -1, 86, 87, -1, -1, -1, -1, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + -1, -1, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 105, 106, 107, 108, -1, 110, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 123, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 157, -1, 159, -1, -1, + -1, 113, 114, 115, 116, -1, 118, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 131, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 196, -1, -1, -1, -1, -1, - 202, 203, 204, 205, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 217, 218, 219, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 105, 106, 107, 108, -1, 110, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 157, -1, 159, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 196, -1, -1, -1, -1, -1, 202, 203, 204, - 205, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 217, 218, 219, 3, 4, 5, 6, 7, - 8, 9, 10, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, -1, -1, 86, 87, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 105, 106, 107, - 108, -1, 110, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 123, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 157, - -1, 159, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 196, -1, - -1, -1, -1, -1, 202, 203, 204, 205, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 217, - 218, 219, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, -1, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 105, 106, 107, 108, -1, 110, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 157, -1, 159, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 196, -1, -1, -1, -1, - -1, 202, 203, 204, 205, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 217, 218, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 105, 106, 107, 108, -1, 110, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 157, -1, 159, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 196, -1, -1, -1, -1, -1, 202, 203, 204, - 205, 3, 4, 5, 6, 7, 8, -1, -1, -1, - -1, -1, 217, 218, -1, -1, -1, -1, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, -1, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, -1, 76, 77, 78, 79, 80, 81, - 82, 83, -1, -1, 86, 87, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 105, 106, 107, 108, -1, 110, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 123, -1, 5, 6, 7, 8, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - -1, -1, -1, -1, -1, 157, -1, 159, -1, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, -1, 196, 77, -1, -1, -1, -1, - 202, 203, 204, 205, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 217, -1, -1, -1, -1, - -1, -1, -1, -1, 106, 107, 108, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5, 6, 7, 8, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, - -1, -1, -1, -1, -1, 157, -1, 159, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, -1, -1, 77, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 219, -1, -1, - -1, -1, -1, 106, 107, 108, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5, 6, 7, 8, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, - -1, -1, -1, -1, 157, -1, 159, 41, 42, 43, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 201, + -1, -1, -1, -1, -1, 207, 208, 209, 210, 3, + 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, + 222, 223, -1, -1, -1, -1, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, -1, 76, 77, 78, 79, 80, 81, 82, 83, - -1, -1, 86, 87, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 219, -1, -1, -1, - -1, -1, 106, 107, 108, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 157, -1, 159, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 196, -1, -1, -1, -1, -1, 202, 203, - 204, 205, 3, 4, 5, 6, 7, 8, -1, -1, - -1, -1, -1, 217, -1, -1, -1, -1, -1, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, -1, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, -1, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 105, 106, 107, 108, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 157, -1, 159, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 5, 6, 7, 8, -1, 196, -1, -1, -1, -1, - -1, 202, 203, 204, 205, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, + 74, 75, 76, 77, 78, 79, 80, 81, 82, -1, + 84, 85, 86, 87, 88, 89, 90, 91, -1, -1, + 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, -1, -1, -1, -1, -1, 113, + 114, 115, 116, -1, 118, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 131, -1, -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - -1, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 106, 107, 108, -1, -1, -1, -1, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, -1, 84, + 85, 86, 87, 88, 89, 90, 91, -1, -1, 94, + 95, -1, -1, -1, -1, -1, -1, 201, -1, -1, + -1, -1, -1, 207, 208, 209, 210, -1, -1, 114, + 115, 116, -1, -1, -1, -1, -1, -1, 222, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 201, -1, -1, -1, + -1, -1, 207, 208, 209, 210, 3, 4, 5, 6, + 7, 8, -1, -1, -1, -1, -1, 222, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, -1, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, -1, 84, 85, 86, + 87, 88, 89, 90, 91, -1, -1, 94, 95, -1, + -1, -1, -1, -1, -1, 5, 6, 7, 8, -1, + -1, -1, -1, -1, -1, -1, 113, 114, 115, 116, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, -1, -1, 131, -1, -1, -1, -1, -1, + -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, -1, 84, 85, 86, 87, 88, 89, + 90, 91, -1, -1, 94, 95, -1, -1, -1, -1, + -1, -1, -1, -1, 201, 5, 6, 7, 8, -1, + 207, 208, 209, 210, 114, 115, 116, -1, -1, -1, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, -1, 84, 85, 86, 87, 88, 89, + 90, 91, -1, -1, 94, 95, -1, -1, -1, -1, + -1, 201, -1, -1, 204, -1, -1, 207, 208, 209, + 210, -1, -1, -1, 114, 115, 116, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 157, -1, 159, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 6, 7, 8, - -1, 196, -1, -1, 199, -1, -1, 202, 203, 204, - 205, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, 201, -1, -1, 204, -1, -1, 207, 208, 209, + 210, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, -1, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, 86, 87, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 106, 107, 108, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, -1, 84, 85, 86, 87, 88, + 89, 90, 91, -1, -1, 94, 95, -1, -1, -1, + -1, -1, -1, 5, 6, 7, 8, -1, -1, -1, + -1, -1, -1, -1, -1, 114, 115, 116, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, -1, 84, 85, 86, 87, 88, 89, 90, 91, + -1, -1, 94, 95, -1, -1, -1, -1, -1, -1, + -1, -1, 201, -1, -1, 204, -1, -1, 207, 208, + 209, 210, 114, 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 157, -1, - 159, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5, 6, 7, 8, -1, 196, -1, -1, - 199, -1, -1, 202, 203, 204, 205, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, -1, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, 86, 87, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 106, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 157, -1, 159, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5, 6, - 7, 8, -1, 196, -1, -1, 199, -1, -1, 202, - 203, 204, 205, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, -1, 76, - 77, 78, 79, 80, 81, 82, 83, -1, -1, 86, - 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 106, - 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 157, -1, 159, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5, 6, 7, 8, -1, 196, - -1, -1, -1, -1, -1, 202, 203, 204, 205, 20, + -1, -1, -1, -1, 5, 6, 7, 8, -1, 201, + -1, -1, -1, -1, -1, 207, 208, 209, 210, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, -1, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 106, 107, 108, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 157, -1, 159, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 5, 6, 7, 8, -1, 196, -1, -1, -1, -1, - -1, 202, 203, 204, 205, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - -1, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 106, 107, 108, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 157, -1, 159, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - -1, 196, -1, -1, -1, -1, -1, 202, 203, 204, - 205, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, -1, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, -1, -1, 77, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 105, 106, 107, 108, - -1, 110, -1, -1, -1, -1, -1, -1, -1, 118, - 119, 120, 121, 122, 123, 5, 6, 7, 8, -1, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, -1, 84, 85, 86, 87, 88, 89, 90, + 91, -1, -1, 94, 95, -1, -1, -1, -1, -1, + -1, 5, 6, 7, 8, -1, -1, -1, -1, -1, + -1, -1, -1, 114, 115, 116, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, -1, + 84, 85, 86, 87, 88, 89, 90, 91, -1, -1, + 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, + 201, -1, -1, -1, -1, -1, 207, 208, 209, 210, + 114, 115, 116, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, -1, -1, -1, -1, -1, -1, 157, -1, - 159, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, -1, -1, 77, 5, 6, - 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, -1, 106, 107, 108, -1, - -1, -1, -1, -1, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, -1, -1, - 77, -1, -1, -1, -1, -1, -1, 157, -1, 159, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, -1, -1, 85, -1, 201, -1, -1, + -1, -1, -1, 207, 208, 209, 210, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 157, -1, 159 + -1, -1, -1, 113, 114, 115, 116, -1, 118, -1, + -1, -1, -1, -1, -1, -1, 126, 127, 128, 129, + 130, 131 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 111, 221, 223, 80, 0, 225, 115, 112, 222, - 227, 76, 77, 78, 226, 3, 4, 5, 6, 7, + 0, 119, 226, 228, 88, 0, 230, 123, 120, 227, + 232, 84, 85, 86, 231, 3, 4, 5, 6, 7, 8, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 77, 105, 106, 107, 108, - 110, 118, 119, 120, 121, 122, 123, 157, 159, 224, - 228, 262, 263, 264, 265, 266, 271, 272, 273, 274, - 277, 279, 280, 281, 282, 283, 284, 285, 286, 311, - 312, 114, 33, 34, 37, 218, 226, 76, 78, 229, - 277, 280, 285, 115, 115, 115, 115, 115, 196, 311, - 217, 218, 298, 197, 201, 4, 33, 34, 35, 268, - 269, 278, 201, 217, 76, 78, 226, 229, 280, 280, - 281, 198, 282, 226, 281, 287, 288, 218, 280, 282, - 226, 275, 276, 9, 10, 11, 13, 14, 15, 16, - 17, 18, 19, 75, 79, 80, 81, 82, 83, 86, - 87, 196, 202, 203, 204, 205, 217, 218, 219, 229, - 230, 231, 233, 234, 235, 236, 237, 238, 239, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 260, 262, 263, 281, 292, 293, - 294, 295, 299, 300, 301, 304, 305, 306, 310, 268, - 267, 270, 281, 269, 226, 198, 216, 196, 199, 244, - 257, 261, 281, 115, 226, 289, 290, 219, 288, 287, - 217, 216, 197, 201, 217, 217, 293, 196, 196, 217, - 217, 260, 196, 260, 215, 196, 244, 244, 260, 219, - 296, 86, 87, 198, 200, 197, 197, 201, 74, 258, - 196, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 216, 259, 244, 206, 207, 208, 202, 203, 84, - 85, 88, 89, 209, 210, 90, 91, 211, 212, 213, - 92, 94, 93, 214, 201, 217, 219, 293, 226, 267, - 270, 198, 216, 199, 261, 258, 291, 199, 198, 201, - 217, 219, 80, 276, 75, 292, 300, 307, 260, 217, - 260, 215, 105, 260, 273, 303, 197, 299, 232, 260, - 226, 229, 240, 241, 242, 243, 258, 258, 244, 244, - 244, 246, 246, 247, 247, 248, 248, 248, 248, 249, - 249, 250, 251, 252, 253, 254, 255, 260, 258, 198, - 199, 261, 291, 216, 199, 261, 290, 196, 303, 308, - 309, 197, 197, 226, 197, 219, 199, 196, 197, 197, - 201, 74, 258, 215, 261, 216, 199, 291, 216, 199, - 260, 217, 197, 293, 302, 295, 216, 294, 297, 298, - 258, 258, 199, 291, 216, 291, 197, 260, 297, 12, - 291, 291, 217, 293 + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 85, 113, 114, 115, 116, 118, 126, + 127, 128, 129, 130, 131, 229, 233, 267, 268, 269, + 270, 271, 276, 277, 278, 279, 283, 285, 286, 287, + 288, 289, 290, 291, 292, 321, 322, 323, 327, 122, + 33, 34, 37, 86, 223, 231, 36, 84, 86, 234, + 283, 286, 291, 123, 123, 123, 123, 123, 201, 321, + 222, 223, 304, 202, 206, 4, 33, 34, 35, 273, + 274, 284, 206, 222, 84, 86, 231, 234, 36, 286, + 286, 287, 203, 288, 231, 223, 287, 293, 294, 223, + 286, 288, 139, 200, 231, 280, 281, 282, 9, 10, + 11, 13, 14, 15, 16, 17, 83, 87, 88, 89, + 90, 91, 94, 95, 201, 207, 208, 209, 210, 222, + 223, 224, 234, 235, 236, 238, 239, 240, 241, 242, + 243, 244, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 265, 267, 268, + 279, 287, 298, 299, 300, 301, 305, 306, 307, 310, + 316, 320, 273, 272, 275, 287, 274, 231, 203, 221, + 201, 86, 222, 204, 249, 262, 266, 287, 123, 36, + 279, 324, 325, 326, 231, 295, 296, 224, 294, 293, + 222, 221, 202, 206, 222, 222, 299, 201, 201, 222, + 222, 265, 201, 201, 249, 249, 265, 224, 302, 94, + 95, 203, 205, 202, 202, 206, 82, 263, 201, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 221, + 264, 249, 211, 212, 213, 207, 208, 92, 93, 96, + 97, 214, 215, 98, 99, 216, 217, 218, 100, 102, + 101, 219, 206, 222, 36, 224, 299, 231, 272, 275, + 203, 221, 204, 266, 263, 297, 223, 204, 325, 224, + 287, 324, 203, 206, 222, 224, 88, 281, 83, 298, + 306, 317, 265, 222, 265, 113, 265, 278, 279, 309, + 202, 305, 237, 265, 231, 234, 245, 246, 247, 248, + 263, 263, 249, 249, 249, 251, 251, 252, 252, 253, + 253, 253, 253, 254, 254, 255, 256, 257, 258, 259, + 260, 265, 263, 203, 204, 266, 297, 221, 204, 324, + 287, 222, 295, 266, 296, 201, 309, 318, 319, 202, + 202, 231, 202, 224, 204, 201, 202, 202, 206, 82, + 263, 220, 266, 221, 204, 297, 221, 224, 295, 222, + 204, 265, 222, 202, 299, 308, 223, 311, 221, 300, + 303, 304, 263, 263, 204, 297, 221, 297, 222, 222, + 202, 265, 303, 12, 18, 19, 224, 312, 313, 314, + 315, 297, 297, 222, 299, 265, 220, 299, 312, 299, + 224, 314, 220 }; #define yyerrok (yyerrstatus = 0) @@ -2804,7 +2746,7 @@ YYLTYPE yylloc; /* User initialization code. */ -#line 41 "src/glsl/glsl_parser.yy" +#line 48 "src/glsl/glsl_parser.yy" { yylloc.first_line = 1; yylloc.first_column = 1; @@ -2813,7 +2755,7 @@ YYLTYPE yylloc; yylloc.source = 0; } /* Line 1078 of yacc.c. */ -#line 2817 "src/glsl/glsl_parser.cpp" +#line 2759 "src/glsl/glsl_parser.cpp" yylsp[0] = yylloc; goto yysetstate; @@ -2998,14 +2940,14 @@ yyreduce: switch (yyn) { case 2: -#line 218 "src/glsl/glsl_parser.yy" +#line 243 "src/glsl/glsl_parser.yy" { _mesa_glsl_initialize_types(state); ;} break; case 3: -#line 222 "src/glsl/glsl_parser.yy" +#line 247 "src/glsl/glsl_parser.yy" { delete state->symbols; state->symbols = new(ralloc_parent(state)) glsl_symbol_table; @@ -3014,23 +2956,32 @@ yyreduce: break; case 5: -#line 232 "src/glsl/glsl_parser.yy" +#line 257 "src/glsl/glsl_parser.yy" { bool supported = false; switch ((yyvsp[(2) - (3)].n)) { case 100: state->es_shader = true; - supported = state->Const.GLSL_100ES; + supported = state->ctx->API == API_OPENGLES2 || + state->ctx->Extensions.ARB_ES2_compatibility; break; case 110: - supported = state->Const.GLSL_110; - break; case 120: - supported = state->Const.GLSL_120; - break; + /* FINISHME: Once the OpenGL 3.0 'forward compatible' context or + * the OpenGL 3.2 Core context is supported, this logic will need + * change. Older versions of GLSL are no longer supported + * outside the compatibility contexts of 3.x. + */ case 130: - supported = state->Const.GLSL_130; + case 140: + case 150: + case 330: + case 400: + case 410: + case 420: + supported = _mesa_is_desktop_gl(state->ctx) && + ((unsigned) (yyvsp[(2) - (3)].n)) <= state->ctx->Const.GLSLVersion; break; default: supported = false; @@ -3050,13 +3001,17 @@ yyreduce: state->version_string, state->supported_version_string); } + + if (state->language_version >= 140) { + state->ARB_uniform_buffer_object_enable = true; + } ;} break; case 10: -#line 276 "src/glsl/glsl_parser.yy" +#line 314 "src/glsl/glsl_parser.yy" { - if (state->language_version < 120) { + if (state->language_version == 110) { _mesa_glsl_warning(& (yylsp[(1) - (2)]), state, "pragma `invariant(all)' not supported in %s", state->version_string); @@ -3067,7 +3022,7 @@ yyreduce: break; case 16: -#line 300 "src/glsl/glsl_parser.yy" +#line 338 "src/glsl/glsl_parser.yy" { if (!_mesa_glsl_process_extension((yyvsp[(2) - (5)].identifier), & (yylsp[(2) - (5)]), (yyvsp[(4) - (5)].identifier), & (yylsp[(4) - (5)]), state)) { YYERROR; @@ -3076,7 +3031,7 @@ yyreduce: break; case 17: -#line 309 "src/glsl/glsl_parser.yy" +#line 347 "src/glsl/glsl_parser.yy" { /* FINISHME: The NULL test is required because pragmas are set to * FINISHME: NULL. (See production rule for external_declaration.) @@ -3087,7 +3042,7 @@ yyreduce: break; case 18: -#line 317 "src/glsl/glsl_parser.yy" +#line 355 "src/glsl/glsl_parser.yy" { /* FINISHME: The NULL test is required because pragmas are set to * FINISHME: NULL. (See production rule for external_declaration.) @@ -3098,7 +3053,7 @@ yyreduce: break; case 21: -#line 333 "src/glsl/glsl_parser.yy" +#line 371 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL); @@ -3108,7 +3063,7 @@ yyreduce: break; case 22: -#line 340 "src/glsl/glsl_parser.yy" +#line 378 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL); @@ -3118,7 +3073,7 @@ yyreduce: break; case 23: -#line 347 "src/glsl/glsl_parser.yy" +#line 385 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL); @@ -3128,7 +3083,7 @@ yyreduce: break; case 24: -#line 354 "src/glsl/glsl_parser.yy" +#line 392 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL); @@ -3138,7 +3093,7 @@ yyreduce: break; case 25: -#line 361 "src/glsl/glsl_parser.yy" +#line 399 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL); @@ -3148,14 +3103,14 @@ yyreduce: break; case 26: -#line 368 "src/glsl/glsl_parser.yy" +#line 406 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(2) - (3)].expression); ;} break; case 28: -#line 376 "src/glsl/glsl_parser.yy" +#line 414 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[(1) - (4)].expression), (yyvsp[(3) - (4)].expression), NULL); @@ -3164,14 +3119,14 @@ yyreduce: break; case 29: -#line 382 "src/glsl/glsl_parser.yy" +#line 420 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(1) - (1)].expression); ;} break; case 30: -#line 386 "src/glsl/glsl_parser.yy" +#line 424 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), NULL, NULL); @@ -3181,7 +3136,7 @@ yyreduce: break; case 31: -#line 393 "src/glsl/glsl_parser.yy" +#line 431 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[(1) - (2)].expression), NULL, NULL); @@ -3190,7 +3145,7 @@ yyreduce: break; case 32: -#line 399 "src/glsl/glsl_parser.yy" +#line 437 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[(1) - (2)].expression), NULL, NULL); @@ -3199,7 +3154,7 @@ yyreduce: break; case 36: -#line 417 "src/glsl/glsl_parser.yy" +#line 455 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL); @@ -3208,7 +3163,7 @@ yyreduce: break; case 41: -#line 436 "src/glsl/glsl_parser.yy" +#line 474 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(1) - (2)].expression); (yyval.expression)->set_location(yylloc); @@ -3217,7 +3172,7 @@ yyreduce: break; case 42: -#line 442 "src/glsl/glsl_parser.yy" +#line 480 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(1) - (3)].expression); (yyval.expression)->set_location(yylloc); @@ -3226,7 +3181,7 @@ yyreduce: break; case 44: -#line 458 "src/glsl/glsl_parser.yy" +#line 496 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_function_expression((yyvsp[(1) - (1)].type_specifier)); @@ -3235,7 +3190,7 @@ yyreduce: break; case 45: -#line 464 "src/glsl/glsl_parser.yy" +#line 502 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier)); @@ -3245,7 +3200,7 @@ yyreduce: break; case 46: -#line 471 "src/glsl/glsl_parser.yy" +#line 509 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier)); @@ -3255,7 +3210,7 @@ yyreduce: break; case 51: -#line 491 "src/glsl/glsl_parser.yy" +#line 529 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(1) - (2)].expression); (yyval.expression)->set_location(yylloc); @@ -3264,7 +3219,7 @@ yyreduce: break; case 52: -#line 497 "src/glsl/glsl_parser.yy" +#line 535 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(1) - (3)].expression); (yyval.expression)->set_location(yylloc); @@ -3273,7 +3228,7 @@ yyreduce: break; case 53: -#line 509 "src/glsl/glsl_parser.yy" +#line 547 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (2)].identifier)); @@ -3283,7 +3238,7 @@ yyreduce: break; case 55: -#line 521 "src/glsl/glsl_parser.yy" +#line 559 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[(2) - (2)].expression), NULL, NULL); @@ -3292,7 +3247,7 @@ yyreduce: break; case 56: -#line 527 "src/glsl/glsl_parser.yy" +#line 565 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[(2) - (2)].expression), NULL, NULL); @@ -3301,7 +3256,7 @@ yyreduce: break; case 57: -#line 533 "src/glsl/glsl_parser.yy" +#line 571 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression((yyvsp[(1) - (2)].n), (yyvsp[(2) - (2)].expression), NULL, NULL); @@ -3310,27 +3265,27 @@ yyreduce: break; case 58: -#line 542 "src/glsl/glsl_parser.yy" +#line 580 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_plus; ;} break; case 59: -#line 543 "src/glsl/glsl_parser.yy" +#line 581 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_neg; ;} break; case 60: -#line 544 "src/glsl/glsl_parser.yy" +#line 582 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_logic_not; ;} break; case 61: -#line 545 "src/glsl/glsl_parser.yy" +#line 583 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_bit_not; ;} break; case 63: -#line 551 "src/glsl/glsl_parser.yy" +#line 589 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3339,7 +3294,7 @@ yyreduce: break; case 64: -#line 557 "src/glsl/glsl_parser.yy" +#line 595 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3348,7 +3303,7 @@ yyreduce: break; case 65: -#line 563 "src/glsl/glsl_parser.yy" +#line 601 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3357,7 +3312,7 @@ yyreduce: break; case 67: -#line 573 "src/glsl/glsl_parser.yy" +#line 611 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3366,7 +3321,7 @@ yyreduce: break; case 68: -#line 579 "src/glsl/glsl_parser.yy" +#line 617 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3375,7 +3330,7 @@ yyreduce: break; case 70: -#line 589 "src/glsl/glsl_parser.yy" +#line 627 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3384,7 +3339,7 @@ yyreduce: break; case 71: -#line 595 "src/glsl/glsl_parser.yy" +#line 633 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3393,7 +3348,7 @@ yyreduce: break; case 73: -#line 605 "src/glsl/glsl_parser.yy" +#line 643 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3402,7 +3357,7 @@ yyreduce: break; case 74: -#line 611 "src/glsl/glsl_parser.yy" +#line 649 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3411,7 +3366,7 @@ yyreduce: break; case 75: -#line 617 "src/glsl/glsl_parser.yy" +#line 655 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3420,7 +3375,7 @@ yyreduce: break; case 76: -#line 623 "src/glsl/glsl_parser.yy" +#line 661 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3429,7 +3384,7 @@ yyreduce: break; case 78: -#line 633 "src/glsl/glsl_parser.yy" +#line 671 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3438,7 +3393,7 @@ yyreduce: break; case 79: -#line 639 "src/glsl/glsl_parser.yy" +#line 677 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3447,7 +3402,7 @@ yyreduce: break; case 81: -#line 649 "src/glsl/glsl_parser.yy" +#line 687 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3456,7 +3411,7 @@ yyreduce: break; case 83: -#line 659 "src/glsl/glsl_parser.yy" +#line 697 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3465,7 +3420,7 @@ yyreduce: break; case 85: -#line 669 "src/glsl/glsl_parser.yy" +#line 707 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3474,7 +3429,7 @@ yyreduce: break; case 87: -#line 679 "src/glsl/glsl_parser.yy" +#line 717 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3483,7 +3438,7 @@ yyreduce: break; case 89: -#line 689 "src/glsl/glsl_parser.yy" +#line 727 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3492,7 +3447,7 @@ yyreduce: break; case 91: -#line 699 "src/glsl/glsl_parser.yy" +#line 737 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression)); @@ -3501,7 +3456,7 @@ yyreduce: break; case 93: -#line 709 "src/glsl/glsl_parser.yy" +#line 747 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[(1) - (5)].expression), (yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].expression)); @@ -3510,7 +3465,7 @@ yyreduce: break; case 95: -#line 719 "src/glsl/glsl_parser.yy" +#line 757 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.expression) = new(ctx) ast_expression((yyvsp[(2) - (3)].n), (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL); @@ -3519,69 +3474,69 @@ yyreduce: break; case 96: -#line 727 "src/glsl/glsl_parser.yy" +#line 765 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_assign; ;} break; case 97: -#line 728 "src/glsl/glsl_parser.yy" +#line 766 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_mul_assign; ;} break; case 98: -#line 729 "src/glsl/glsl_parser.yy" +#line 767 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_div_assign; ;} break; case 99: -#line 730 "src/glsl/glsl_parser.yy" +#line 768 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_mod_assign; ;} break; case 100: -#line 731 "src/glsl/glsl_parser.yy" +#line 769 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_add_assign; ;} break; case 101: -#line 732 "src/glsl/glsl_parser.yy" +#line 770 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_sub_assign; ;} break; case 102: -#line 733 "src/glsl/glsl_parser.yy" +#line 771 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_ls_assign; ;} break; case 103: -#line 734 "src/glsl/glsl_parser.yy" +#line 772 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_rs_assign; ;} break; case 104: -#line 735 "src/glsl/glsl_parser.yy" +#line 773 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_and_assign; ;} break; case 105: -#line 736 "src/glsl/glsl_parser.yy" +#line 774 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_xor_assign; ;} break; case 106: -#line 737 "src/glsl/glsl_parser.yy" +#line 775 "src/glsl/glsl_parser.yy" { (yyval.n) = ast_or_assign; ;} break; case 107: -#line 742 "src/glsl/glsl_parser.yy" +#line 780 "src/glsl/glsl_parser.yy" { (yyval.expression) = (yyvsp[(1) - (1)].expression); ;} break; case 108: -#line 746 "src/glsl/glsl_parser.yy" +#line 784 "src/glsl/glsl_parser.yy" { void *ctx = state; if ((yyvsp[(1) - (3)].expression)->oper != ast_sequence) { @@ -3597,7 +3552,7 @@ yyreduce: break; case 110: -#line 766 "src/glsl/glsl_parser.yy" +#line 804 "src/glsl/glsl_parser.yy" { state->symbols->pop_scope(); (yyval.node) = (yyvsp[(1) - (2)].function); @@ -3605,14 +3560,14 @@ yyreduce: break; case 111: -#line 771 "src/glsl/glsl_parser.yy" +#line 809 "src/glsl/glsl_parser.yy" { (yyval.node) = (yyvsp[(1) - (2)].declarator_list); ;} break; case 112: -#line 775 "src/glsl/glsl_parser.yy" +#line 813 "src/glsl/glsl_parser.yy" { (yyvsp[(3) - (4)].type_specifier)->precision = (yyvsp[(2) - (4)].n); (yyvsp[(3) - (4)].type_specifier)->is_precision_statement = true; @@ -3620,24 +3575,31 @@ yyreduce: ;} break; - case 116: -#line 793 "src/glsl/glsl_parser.yy" + case 113: +#line 819 "src/glsl/glsl_parser.yy" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} + break; + + case 117: +#line 835 "src/glsl/glsl_parser.yy" { (yyval.function) = (yyvsp[(1) - (2)].function); (yyval.function)->parameters.push_tail(& (yyvsp[(2) - (2)].parameter_declarator)->link); ;} break; - case 117: -#line 798 "src/glsl/glsl_parser.yy" + case 118: +#line 840 "src/glsl/glsl_parser.yy" { (yyval.function) = (yyvsp[(1) - (3)].function); (yyval.function)->parameters.push_tail(& (yyvsp[(3) - (3)].parameter_declarator)->link); ;} break; - case 118: -#line 806 "src/glsl/glsl_parser.yy" + case 119: +#line 848 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.function) = new(ctx) ast_function(); @@ -3650,8 +3612,8 @@ yyreduce: ;} break; - case 119: -#line 820 "src/glsl/glsl_parser.yy" + case 120: +#line 862 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator(); @@ -3663,8 +3625,8 @@ yyreduce: ;} break; - case 120: -#line 830 "src/glsl/glsl_parser.yy" + case 121: +#line 872 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator(); @@ -3678,8 +3640,8 @@ yyreduce: ;} break; - case 121: -#line 845 "src/glsl/glsl_parser.yy" + case 122: +#line 887 "src/glsl/glsl_parser.yy" { (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i; @@ -3688,16 +3650,16 @@ yyreduce: ;} break; - case 122: -#line 852 "src/glsl/glsl_parser.yy" + case 123: +#line 894 "src/glsl/glsl_parser.yy" { (yyval.parameter_declarator) = (yyvsp[(2) - (2)].parameter_declarator); (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier); ;} break; - case 123: -#line 857 "src/glsl/glsl_parser.yy" + case 124: +#line 899 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i; @@ -3710,8 +3672,8 @@ yyreduce: ;} break; - case 124: -#line 868 "src/glsl/glsl_parser.yy" + case 125: +#line 910 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator(); @@ -3722,31 +3684,31 @@ yyreduce: ;} break; - case 125: -#line 880 "src/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - ;} - break; - case 126: -#line 884 "src/glsl/glsl_parser.yy" +#line 922 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.in = 1; ;} break; case 127: -#line 889 "src/glsl/glsl_parser.yy" +#line 926 "src/glsl/glsl_parser.yy" + { + memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); + (yyval.type_qualifier).flags.q.in = 1; + ;} + break; + + case 128: +#line 931 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.out = 1; ;} break; - case 128: -#line 894 "src/glsl/glsl_parser.yy" + case 129: +#line 936 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.in = 1; @@ -3754,8 +3716,8 @@ yyreduce: ;} break; - case 131: -#line 908 "src/glsl/glsl_parser.yy" + case 132: +#line 950 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (3)].identifier), false, NULL, NULL); @@ -3767,8 +3729,8 @@ yyreduce: ;} break; - case 132: -#line 918 "src/glsl/glsl_parser.yy" + case 133: +#line 960 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), true, NULL, NULL); @@ -3780,8 +3742,8 @@ yyreduce: ;} break; - case 133: -#line 928 "src/glsl/glsl_parser.yy" + case 134: +#line 970 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (6)].identifier), true, (yyvsp[(5) - (6)].expression), NULL); @@ -3793,8 +3755,8 @@ yyreduce: ;} break; - case 134: -#line 938 "src/glsl/glsl_parser.yy" + case 135: +#line 980 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (7)].identifier), true, NULL, (yyvsp[(7) - (7)].expression)); @@ -3806,8 +3768,8 @@ yyreduce: ;} break; - case 135: -#line 948 "src/glsl/glsl_parser.yy" + case 136: +#line 990 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (8)].identifier), true, (yyvsp[(5) - (8)].expression), (yyvsp[(8) - (8)].expression)); @@ -3819,8 +3781,8 @@ yyreduce: ;} break; - case 136: -#line 958 "src/glsl/glsl_parser.yy" + case 137: +#line 1000 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), false, NULL, (yyvsp[(5) - (5)].expression)); @@ -3832,22 +3794,18 @@ yyreduce: ;} break; - case 137: -#line 972 "src/glsl/glsl_parser.yy" + case 138: +#line 1014 "src/glsl/glsl_parser.yy" { void *ctx = state; - if ((yyvsp[(1) - (1)].fully_specified_type)->specifier->type_specifier != ast_struct) { - _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "empty declaration list\n"); - YYERROR; - } else { - (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[(1) - (1)].fully_specified_type)); - (yyval.declarator_list)->set_location(yylloc); - } + /* Empty declaration list is valid. */ + (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[(1) - (1)].fully_specified_type)); + (yyval.declarator_list)->set_location(yylloc); ;} break; - case 138: -#line 983 "src/glsl/glsl_parser.yy" + case 139: +#line 1021 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL); @@ -3858,8 +3816,8 @@ yyreduce: ;} break; - case 139: -#line 992 "src/glsl/glsl_parser.yy" + case 140: +#line 1030 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), true, NULL, NULL); @@ -3870,8 +3828,8 @@ yyreduce: ;} break; - case 140: -#line 1001 "src/glsl/glsl_parser.yy" + case 141: +#line 1039 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (5)].identifier), true, (yyvsp[(4) - (5)].expression), NULL); @@ -3882,8 +3840,8 @@ yyreduce: ;} break; - case 141: -#line 1010 "src/glsl/glsl_parser.yy" + case 142: +#line 1048 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (6)].identifier), true, NULL, (yyvsp[(6) - (6)].expression)); @@ -3894,8 +3852,8 @@ yyreduce: ;} break; - case 142: -#line 1019 "src/glsl/glsl_parser.yy" + case 143: +#line 1057 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (7)].identifier), true, (yyvsp[(4) - (7)].expression), (yyvsp[(7) - (7)].expression)); @@ -3906,8 +3864,8 @@ yyreduce: ;} break; - case 143: -#line 1028 "src/glsl/glsl_parser.yy" + case 144: +#line 1066 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression)); @@ -3918,8 +3876,8 @@ yyreduce: ;} break; - case 144: -#line 1037 "src/glsl/glsl_parser.yy" + case 145: +#line 1075 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL); @@ -3932,8 +3890,8 @@ yyreduce: ;} break; - case 145: -#line 1051 "src/glsl/glsl_parser.yy" + case 146: +#line 1089 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type(); @@ -3942,8 +3900,8 @@ yyreduce: ;} break; - case 146: -#line 1058 "src/glsl/glsl_parser.yy" + case 147: +#line 1096 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type(); @@ -3953,80 +3911,87 @@ yyreduce: ;} break; - case 147: -#line 1069 "src/glsl/glsl_parser.yy" + case 148: +#line 1107 "src/glsl/glsl_parser.yy" { (yyval.type_qualifier) = (yyvsp[(3) - (4)].type_qualifier); ;} break; - case 149: -#line 1077 "src/glsl/glsl_parser.yy" + case 150: +#line 1115 "src/glsl/glsl_parser.yy" { - if (((yyvsp[(1) - (3)].type_qualifier).flags.i & (yyvsp[(3) - (3)].type_qualifier).flags.i) != 0) { - _mesa_glsl_error(& (yylsp[(3) - (3)]), state, - "duplicate layout qualifiers used\n"); + (yyval.type_qualifier) = (yyvsp[(1) - (3)].type_qualifier); + if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[(3) - (3)]), state, (yyvsp[(3) - (3)].type_qualifier))) { YYERROR; } - - (yyval.type_qualifier).flags.i = (yyvsp[(1) - (3)].type_qualifier).flags.i | (yyvsp[(3) - (3)].type_qualifier).flags.i; - - if ((yyvsp[(1) - (3)].type_qualifier).flags.q.explicit_location) - (yyval.type_qualifier).location = (yyvsp[(1) - (3)].type_qualifier).location; - - if ((yyvsp[(3) - (3)].type_qualifier).flags.q.explicit_location) - (yyval.type_qualifier).location = (yyvsp[(3) - (3)].type_qualifier).location; ;} break; - case 150: -#line 1096 "src/glsl/glsl_parser.yy" + case 151: +#line 1125 "src/glsl/glsl_parser.yy" { - bool got_one = false; - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); /* Layout qualifiers for ARB_fragment_coord_conventions. */ - if (!got_one && state->ARB_fragment_coord_conventions_enable) { + if (!(yyval.type_qualifier).flags.i && state->ARB_fragment_coord_conventions_enable) { if (strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left") == 0) { - got_one = true; (yyval.type_qualifier).flags.q.origin_upper_left = 1; } else if (strcmp((yyvsp[(1) - (1)].identifier), "pixel_center_integer") == 0) { - got_one = true; (yyval.type_qualifier).flags.q.pixel_center_integer = 1; } - if (got_one && state->ARB_fragment_coord_conventions_warn) { + if ((yyval.type_qualifier).flags.i && state->ARB_fragment_coord_conventions_warn) { _mesa_glsl_warning(& (yylsp[(1) - (1)]), state, "GL_ARB_fragment_coord_conventions layout " "identifier `%s' used\n", (yyvsp[(1) - (1)].identifier)); } } - /* Layout qualifiers for AMD_conservative_depth. */ - if (!got_one && state->AMD_conservative_depth_enable) { + /* Layout qualifiers for AMD/ARB_conservative_depth. */ + if (!(yyval.type_qualifier).flags.i && + (state->AMD_conservative_depth_enable || + state->ARB_conservative_depth_enable)) { if (strcmp((yyvsp[(1) - (1)].identifier), "depth_any") == 0) { - got_one = true; (yyval.type_qualifier).flags.q.depth_any = 1; } else if (strcmp((yyvsp[(1) - (1)].identifier), "depth_greater") == 0) { - got_one = true; (yyval.type_qualifier).flags.q.depth_greater = 1; } else if (strcmp((yyvsp[(1) - (1)].identifier), "depth_less") == 0) { - got_one = true; (yyval.type_qualifier).flags.q.depth_less = 1; } else if (strcmp((yyvsp[(1) - (1)].identifier), "depth_unchanged") == 0) { - got_one = true; (yyval.type_qualifier).flags.q.depth_unchanged = 1; } - if (got_one && state->AMD_conservative_depth_warn) { + if ((yyval.type_qualifier).flags.i && state->AMD_conservative_depth_warn) { _mesa_glsl_warning(& (yylsp[(1) - (1)]), state, "GL_AMD_conservative_depth " "layout qualifier `%s' is used\n", (yyvsp[(1) - (1)].identifier)); } + if ((yyval.type_qualifier).flags.i && state->ARB_conservative_depth_warn) { + _mesa_glsl_warning(& (yylsp[(1) - (1)]), state, + "GL_ARB_conservative_depth " + "layout qualifier `%s' is used\n", (yyvsp[(1) - (1)].identifier)); + } } - if (!got_one) { + /* See also uniform_block_layout_qualifier. */ + if (!(yyval.type_qualifier).flags.i && state->ARB_uniform_buffer_object_enable) { + if (strcmp((yyvsp[(1) - (1)].identifier), "std140") == 0) { + (yyval.type_qualifier).flags.q.std140 = 1; + } else if (strcmp((yyvsp[(1) - (1)].identifier), "shared") == 0) { + (yyval.type_qualifier).flags.q.shared = 1; + } else if (strcmp((yyvsp[(1) - (1)].identifier), "column_major") == 0) { + (yyval.type_qualifier).flags.q.column_major = 1; + } + + if ((yyval.type_qualifier).flags.i && state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& (yylsp[(1) - (1)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "layout qualifier `%s' is used\n", (yyvsp[(1) - (1)].identifier)); + } + } + + if (!(yyval.type_qualifier).flags.i) { _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "unrecognized layout identifier " "`%s'\n", (yyvsp[(1) - (1)].identifier)); YYERROR; @@ -4034,11 +3999,9 @@ yyreduce: ;} break; - case 151: -#line 1148 "src/glsl/glsl_parser.yy" + case 152: +#line 1193 "src/glsl/glsl_parser.yy" { - bool got_one = false; - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); if (state->ARB_explicit_attrib_location_enable) { @@ -4046,8 +4009,6 @@ yyreduce: * FINISHME: GLSL 1.30 (or later) are supported. */ if (strcmp("location", (yyvsp[(1) - (3)].identifier)) == 0) { - got_one = true; - (yyval.type_qualifier).flags.q.explicit_location = 1; if ((yyvsp[(3) - (3)].n) >= 0) { @@ -4058,12 +4019,24 @@ yyreduce: YYERROR; } } + + if (strcmp("index", (yyvsp[(1) - (3)].identifier)) == 0) { + (yyval.type_qualifier).flags.q.explicit_index = 1; + + if ((yyvsp[(3) - (3)].n) >= 0) { + (yyval.type_qualifier).index = (yyvsp[(3) - (3)].n); + } else { + _mesa_glsl_error(& (yylsp[(3) - (3)]), state, + "invalid index %d specified\n", (yyvsp[(3) - (3)].n)); + YYERROR; + } + } } /* If the identifier didn't match any known layout identifiers, * emit an error. */ - if (!got_one) { + if (!(yyval.type_qualifier).flags.i) { _mesa_glsl_error(& (yylsp[(1) - (3)]), state, "unrecognized layout identifier " "`%s'\n", (yyvsp[(1) - (3)].identifier)); YYERROR; @@ -4075,64 +4048,97 @@ yyreduce: ;} break; - case 152: -#line 1189 "src/glsl/glsl_parser.yy" + case 153: +#line 1239 "src/glsl/glsl_parser.yy" + { + (yyval.type_qualifier) = (yyvsp[(1) - (1)].type_qualifier); + /* Layout qualifiers for ARB_uniform_buffer_object. */ + if (!state->ARB_uniform_buffer_object_enable) { + _mesa_glsl_error(& (yylsp[(1) - (1)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "layout qualifier `%s' is used\n", (yyvsp[(1) - (1)].type_qualifier)); + } else if (state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& (yylsp[(1) - (1)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "layout qualifier `%s' is used\n", (yyvsp[(1) - (1)].type_qualifier)); + } + ;} + break; + + case 154: +#line 1261 "src/glsl/glsl_parser.yy" + { + memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); + (yyval.type_qualifier).flags.q.row_major = 1; + ;} + break; + + case 155: +#line 1266 "src/glsl/glsl_parser.yy" + { + memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); + (yyval.type_qualifier).flags.q.packed = 1; + ;} + break; + + case 156: +#line 1274 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.smooth = 1; ;} break; - case 153: -#line 1194 "src/glsl/glsl_parser.yy" + case 157: +#line 1279 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.flat = 1; ;} break; - case 154: -#line 1199 "src/glsl/glsl_parser.yy" + case 158: +#line 1284 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.noperspective = 1; ;} break; - case 155: -#line 1207 "src/glsl/glsl_parser.yy" + case 159: +#line 1292 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.constant = 1; ;} break; - case 158: -#line 1217 "src/glsl/glsl_parser.yy" + case 162: +#line 1302 "src/glsl/glsl_parser.yy" { (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier); (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i; ;} break; - case 160: -#line 1223 "src/glsl/glsl_parser.yy" + case 164: +#line 1308 "src/glsl/glsl_parser.yy" { (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier); (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i; ;} break; - case 161: -#line 1228 "src/glsl/glsl_parser.yy" + case 165: +#line 1313 "src/glsl/glsl_parser.yy" { (yyval.type_qualifier) = (yyvsp[(2) - (2)].type_qualifier); (yyval.type_qualifier).flags.q.invariant = 1; ;} break; - case 162: -#line 1233 "src/glsl/glsl_parser.yy" + case 166: +#line 1318 "src/glsl/glsl_parser.yy" { (yyval.type_qualifier) = (yyvsp[(2) - (3)].type_qualifier); (yyval.type_qualifier).flags.i |= (yyvsp[(3) - (3)].type_qualifier).flags.i; @@ -4140,40 +4146,40 @@ yyreduce: ;} break; - case 163: -#line 1239 "src/glsl/glsl_parser.yy" + case 167: +#line 1324 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.invariant = 1; ;} break; - case 164: -#line 1247 "src/glsl/glsl_parser.yy" + case 168: +#line 1332 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.constant = 1; ;} break; - case 165: -#line 1252 "src/glsl/glsl_parser.yy" + case 169: +#line 1337 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.attribute = 1; ;} break; - case 166: -#line 1257 "src/glsl/glsl_parser.yy" + case 170: +#line 1342 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.varying = 1; ;} break; - case 167: -#line 1262 "src/glsl/glsl_parser.yy" + case 171: +#line 1347 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.centroid = 1; @@ -4181,63 +4187,63 @@ yyreduce: ;} break; - case 168: -#line 1268 "src/glsl/glsl_parser.yy" + case 172: +#line 1353 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.in = 1; ;} break; - case 169: -#line 1273 "src/glsl/glsl_parser.yy" + case 173: +#line 1358 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.out = 1; ;} break; - case 170: -#line 1278 "src/glsl/glsl_parser.yy" + case 174: +#line 1363 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.in = 1; ;} break; - case 171: -#line 1283 "src/glsl/glsl_parser.yy" + case 175: +#line 1368 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.out = 1; ;} break; - case 172: -#line 1288 "src/glsl/glsl_parser.yy" + case 176: +#line 1373 "src/glsl/glsl_parser.yy" { memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); (yyval.type_qualifier).flags.q.uniform = 1; ;} break; - case 173: -#line 1296 "src/glsl/glsl_parser.yy" + case 177: +#line 1381 "src/glsl/glsl_parser.yy" { (yyval.type_specifier) = (yyvsp[(1) - (1)].type_specifier); ;} break; - case 174: -#line 1300 "src/glsl/glsl_parser.yy" + case 178: +#line 1385 "src/glsl/glsl_parser.yy" { (yyval.type_specifier) = (yyvsp[(2) - (2)].type_specifier); (yyval.type_specifier)->precision = (yyvsp[(1) - (2)].n); ;} break; - case 176: -#line 1309 "src/glsl/glsl_parser.yy" + case 180: +#line 1394 "src/glsl/glsl_parser.yy" { (yyval.type_specifier) = (yyvsp[(1) - (3)].type_specifier); (yyval.type_specifier)->is_array = true; @@ -4245,8 +4251,8 @@ yyreduce: ;} break; - case 177: -#line 1315 "src/glsl/glsl_parser.yy" + case 181: +#line 1400 "src/glsl/glsl_parser.yy" { (yyval.type_specifier) = (yyvsp[(1) - (4)].type_specifier); (yyval.type_specifier)->is_array = true; @@ -4254,26 +4260,8 @@ yyreduce: ;} break; - case 178: -#line 1324 "src/glsl/glsl_parser.yy" - { - void *ctx = state; - (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].n)); - (yyval.type_specifier)->set_location(yylloc); - ;} - break; - - case 179: -#line 1330 "src/glsl/glsl_parser.yy" - { - void *ctx = state; - (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].struct_specifier)); - (yyval.type_specifier)->set_location(yylloc); - ;} - break; - - case 180: -#line 1336 "src/glsl/glsl_parser.yy" + case 182: +#line 1409 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].identifier)); @@ -4281,263 +4269,311 @@ yyreduce: ;} break; - case 181: -#line 1344 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_void; ;} - break; - - case 182: -#line 1345 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_float; ;} - break; - case 183: -#line 1346 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_int; ;} +#line 1415 "src/glsl/glsl_parser.yy" + { + void *ctx = state; + (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].struct_specifier)); + (yyval.type_specifier)->set_location(yylloc); + ;} break; case 184: -#line 1347 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_uint; ;} +#line 1421 "src/glsl/glsl_parser.yy" + { + void *ctx = state; + (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].identifier)); + (yyval.type_specifier)->set_location(yylloc); + ;} break; case 185: -#line 1348 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_bool; ;} +#line 1429 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "void"; ;} break; case 186: -#line 1349 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_vec2; ;} +#line 1430 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "float"; ;} break; case 187: -#line 1350 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_vec3; ;} +#line 1431 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "int"; ;} break; case 188: -#line 1351 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_vec4; ;} +#line 1432 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "uint"; ;} break; case 189: -#line 1352 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_bvec2; ;} +#line 1433 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "bool"; ;} break; case 190: -#line 1353 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_bvec3; ;} +#line 1434 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "vec2"; ;} break; case 191: -#line 1354 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_bvec4; ;} +#line 1435 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "vec3"; ;} break; case 192: -#line 1355 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_ivec2; ;} +#line 1436 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "vec4"; ;} break; case 193: -#line 1356 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_ivec3; ;} +#line 1437 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "bvec2"; ;} break; case 194: -#line 1357 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_ivec4; ;} +#line 1438 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "bvec3"; ;} break; case 195: -#line 1358 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_uvec2; ;} +#line 1439 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "bvec4"; ;} break; case 196: -#line 1359 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_uvec3; ;} +#line 1440 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "ivec2"; ;} break; case 197: -#line 1360 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_uvec4; ;} +#line 1441 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "ivec3"; ;} break; case 198: -#line 1361 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat2; ;} +#line 1442 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "ivec4"; ;} break; case 199: -#line 1362 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat2x3; ;} +#line 1443 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "uvec2"; ;} break; case 200: -#line 1363 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat2x4; ;} +#line 1444 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "uvec3"; ;} break; case 201: -#line 1364 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat3x2; ;} +#line 1445 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "uvec4"; ;} break; case 202: -#line 1365 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat3; ;} +#line 1446 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat2"; ;} break; case 203: -#line 1366 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat3x4; ;} +#line 1447 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat2x3"; ;} break; case 204: -#line 1367 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat4x2; ;} +#line 1448 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat2x4"; ;} break; case 205: -#line 1368 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat4x3; ;} +#line 1449 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat3x2"; ;} break; case 206: -#line 1369 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_mat4; ;} +#line 1450 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat3"; ;} break; case 207: -#line 1370 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler1d; ;} +#line 1451 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat3x4"; ;} break; case 208: -#line 1371 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler2d; ;} +#line 1452 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat4x2"; ;} break; case 209: -#line 1372 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler2drect; ;} +#line 1453 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat4x3"; ;} break; case 210: -#line 1373 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler3d; ;} +#line 1454 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "mat4"; ;} break; case 211: -#line 1374 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_samplercube; ;} +#line 1455 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler1D"; ;} break; case 212: -#line 1375 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler1dshadow; ;} +#line 1456 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler2D"; ;} break; case 213: -#line 1376 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler2dshadow; ;} +#line 1457 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler2DRect"; ;} break; case 214: -#line 1377 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler2drectshadow; ;} +#line 1458 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler3D"; ;} break; case 215: -#line 1378 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_samplercubeshadow; ;} +#line 1459 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "samplerCube"; ;} break; case 216: -#line 1379 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler1darray; ;} +#line 1460 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "samplerExternalOES"; ;} break; case 217: -#line 1380 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler2darray; ;} +#line 1461 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler1DShadow"; ;} break; case 218: -#line 1381 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler1darrayshadow; ;} +#line 1462 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler2DShadow"; ;} break; case 219: -#line 1382 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_sampler2darrayshadow; ;} +#line 1463 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler2DRectShadow"; ;} break; case 220: -#line 1383 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_isampler1d; ;} +#line 1464 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "samplerCubeShadow"; ;} break; case 221: -#line 1384 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_isampler2d; ;} +#line 1465 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler1DArray"; ;} break; case 222: -#line 1385 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_isampler3d; ;} +#line 1466 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler2DArray"; ;} break; case 223: -#line 1386 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_isamplercube; ;} +#line 1467 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler1DArrayShadow"; ;} break; case 224: -#line 1387 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_isampler1darray; ;} +#line 1468 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "sampler2DArrayShadow"; ;} break; case 225: -#line 1388 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_isampler2darray; ;} +#line 1469 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "samplerBuffer"; ;} break; case 226: -#line 1389 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_usampler1d; ;} +#line 1470 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isampler1D"; ;} break; case 227: -#line 1390 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_usampler2d; ;} +#line 1471 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isampler2D"; ;} break; case 228: -#line 1391 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_usampler3d; ;} +#line 1472 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isampler2DRect"; ;} break; case 229: -#line 1392 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_usamplercube; ;} +#line 1473 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isampler3D"; ;} break; case 230: -#line 1393 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_usampler1darray; ;} +#line 1474 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isamplerCube"; ;} break; case 231: -#line 1394 "src/glsl/glsl_parser.yy" - { (yyval.n) = ast_usampler2darray; ;} +#line 1475 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isampler1DArray"; ;} break; case 232: -#line 1398 "src/glsl/glsl_parser.yy" +#line 1476 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isampler2DArray"; ;} + break; + + case 233: +#line 1477 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "isamplerBuffer"; ;} + break; + + case 234: +#line 1478 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usampler1D"; ;} + break; + + case 235: +#line 1479 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usampler2D"; ;} + break; + + case 236: +#line 1480 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usampler2DRect"; ;} + break; + + case 237: +#line 1481 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usampler3D"; ;} + break; + + case 238: +#line 1482 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usamplerCube"; ;} + break; + + case 239: +#line 1483 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usampler1DArray"; ;} + break; + + case 240: +#line 1484 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usampler2DArray"; ;} + break; + + case 241: +#line 1485 "src/glsl/glsl_parser.yy" + { (yyval.identifier) = "usamplerBuffer"; ;} + break; + + case 242: +#line 1489 "src/glsl/glsl_parser.yy" { if (!state->es_shader && state->language_version < 130) _mesa_glsl_error(& (yylsp[(1) - (1)]), state, @@ -4550,8 +4586,8 @@ yyreduce: ;} break; - case 233: -#line 1408 "src/glsl/glsl_parser.yy" + case 243: +#line 1499 "src/glsl/glsl_parser.yy" { if (!state->es_shader && state->language_version < 130) _mesa_glsl_error(& (yylsp[(1) - (1)]), state, @@ -4564,8 +4600,8 @@ yyreduce: ;} break; - case 234: -#line 1418 "src/glsl/glsl_parser.yy" + case 244: +#line 1509 "src/glsl/glsl_parser.yy" { if (!state->es_shader && state->language_version < 130) _mesa_glsl_error(& (yylsp[(1) - (1)]), state, @@ -4578,43 +4614,43 @@ yyreduce: ;} break; - case 235: -#line 1432 "src/glsl/glsl_parser.yy" + case 245: +#line 1523 "src/glsl/glsl_parser.yy" { void *ctx = state; - (yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[(2) - (5)].identifier), (yyvsp[(4) - (5)].node)); + (yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[(2) - (5)].identifier), (yyvsp[(4) - (5)].declarator_list)); (yyval.struct_specifier)->set_location(yylloc); state->symbols->add_type((yyvsp[(2) - (5)].identifier), glsl_type::void_type); ;} break; - case 236: -#line 1439 "src/glsl/glsl_parser.yy" + case 246: +#line 1530 "src/glsl/glsl_parser.yy" { void *ctx = state; - (yyval.struct_specifier) = new(ctx) ast_struct_specifier(NULL, (yyvsp[(3) - (4)].node)); + (yyval.struct_specifier) = new(ctx) ast_struct_specifier(NULL, (yyvsp[(3) - (4)].declarator_list)); (yyval.struct_specifier)->set_location(yylloc); ;} break; - case 237: -#line 1448 "src/glsl/glsl_parser.yy" + case 247: +#line 1539 "src/glsl/glsl_parser.yy" { - (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].declarator_list); + (yyval.declarator_list) = (yyvsp[(1) - (1)].declarator_list); (yyvsp[(1) - (1)].declarator_list)->link.self_link(); ;} break; - case 238: -#line 1453 "src/glsl/glsl_parser.yy" + case 248: +#line 1544 "src/glsl/glsl_parser.yy" { - (yyval.node) = (ast_node *) (yyvsp[(1) - (2)].node); - (yyval.node)->link.insert_before(& (yyvsp[(2) - (2)].declarator_list)->link); + (yyval.declarator_list) = (yyvsp[(1) - (2)].declarator_list); + (yyval.declarator_list)->link.insert_before(& (yyvsp[(2) - (2)].declarator_list)->link); ;} break; - case 239: -#line 1461 "src/glsl/glsl_parser.yy" + case 249: +#line 1552 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_fully_specified_type *type = new(ctx) ast_fully_specified_type(); @@ -4628,24 +4664,24 @@ yyreduce: ;} break; - case 240: -#line 1476 "src/glsl/glsl_parser.yy" + case 250: +#line 1567 "src/glsl/glsl_parser.yy" { (yyval.declaration) = (yyvsp[(1) - (1)].declaration); (yyvsp[(1) - (1)].declaration)->link.self_link(); ;} break; - case 241: -#line 1481 "src/glsl/glsl_parser.yy" + case 251: +#line 1572 "src/glsl/glsl_parser.yy" { (yyval.declaration) = (yyvsp[(1) - (3)].declaration); (yyval.declaration)->link.insert_before(& (yyvsp[(3) - (3)].declaration)->link); ;} break; - case 242: -#line 1489 "src/glsl/glsl_parser.yy" + case 252: +#line 1580 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (1)].identifier), false, NULL, NULL); @@ -4654,8 +4690,8 @@ yyreduce: ;} break; - case 243: -#line 1496 "src/glsl/glsl_parser.yy" + case 253: +#line 1587 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (4)].identifier), true, (yyvsp[(3) - (4)].expression), NULL); @@ -4663,23 +4699,13 @@ yyreduce: ;} break; - case 246: -#line 1514 "src/glsl/glsl_parser.yy" + case 256: +#line 1605 "src/glsl/glsl_parser.yy" { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;} break; - case 251: -#line 1522 "src/glsl/glsl_parser.yy" - { (yyval.node) = NULL; ;} - break; - - case 252: -#line 1523 "src/glsl/glsl_parser.yy" - { (yyval.node) = NULL; ;} - break; - - case 255: -#line 1530 "src/glsl/glsl_parser.yy" + case 264: +#line 1620 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL); @@ -4687,15 +4713,15 @@ yyreduce: ;} break; - case 256: -#line 1536 "src/glsl/glsl_parser.yy" + case 265: +#line 1626 "src/glsl/glsl_parser.yy" { state->symbols->push_scope(); ;} break; - case 257: -#line 1540 "src/glsl/glsl_parser.yy" + case 266: +#line 1630 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[(3) - (4)].node)); @@ -4704,13 +4730,13 @@ yyreduce: ;} break; - case 258: -#line 1549 "src/glsl/glsl_parser.yy" + case 267: +#line 1639 "src/glsl/glsl_parser.yy" { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;} break; - case 260: -#line 1555 "src/glsl/glsl_parser.yy" + case 269: +#line 1645 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL); @@ -4718,8 +4744,8 @@ yyreduce: ;} break; - case 261: -#line 1561 "src/glsl/glsl_parser.yy" + case 270: +#line 1651 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[(2) - (3)].node)); @@ -4727,8 +4753,8 @@ yyreduce: ;} break; - case 262: -#line 1570 "src/glsl/glsl_parser.yy" + case 271: +#line 1660 "src/glsl/glsl_parser.yy" { if ((yyvsp[(1) - (1)].node) == NULL) { _mesa_glsl_error(& (yylsp[(1) - (1)]), state, " statement\n"); @@ -4740,8 +4766,8 @@ yyreduce: ;} break; - case 263: -#line 1580 "src/glsl/glsl_parser.yy" + case 272: +#line 1670 "src/glsl/glsl_parser.yy" { if ((yyvsp[(2) - (2)].node) == NULL) { _mesa_glsl_error(& (yylsp[(2) - (2)]), state, " statement\n"); @@ -4752,8 +4778,8 @@ yyreduce: ;} break; - case 264: -#line 1592 "src/glsl/glsl_parser.yy" + case 273: +#line 1682 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_expression_statement(NULL); @@ -4761,8 +4787,8 @@ yyreduce: ;} break; - case 265: -#line 1598 "src/glsl/glsl_parser.yy" + case 274: +#line 1688 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_expression_statement((yyvsp[(1) - (2)].expression)); @@ -4770,8 +4796,8 @@ yyreduce: ;} break; - case 266: -#line 1607 "src/glsl/glsl_parser.yy" + case 275: +#line 1697 "src/glsl/glsl_parser.yy" { (yyval.node) = new(state) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].selection_rest_statement).then_statement, (yyvsp[(5) - (5)].selection_rest_statement).else_statement); @@ -4779,31 +4805,31 @@ yyreduce: ;} break; - case 267: -#line 1616 "src/glsl/glsl_parser.yy" + case 276: +#line 1706 "src/glsl/glsl_parser.yy" { (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (3)].node); (yyval.selection_rest_statement).else_statement = (yyvsp[(3) - (3)].node); ;} break; - case 268: -#line 1621 "src/glsl/glsl_parser.yy" + case 277: +#line 1711 "src/glsl/glsl_parser.yy" { (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (1)].node); (yyval.selection_rest_statement).else_statement = NULL; ;} break; - case 269: -#line 1629 "src/glsl/glsl_parser.yy" + case 278: +#line 1719 "src/glsl/glsl_parser.yy" { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].expression); ;} break; - case 270: -#line 1633 "src/glsl/glsl_parser.yy" + case 279: +#line 1723 "src/glsl/glsl_parser.yy" { void *ctx = state; ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression)); @@ -4816,8 +4842,105 @@ yyreduce: ;} break; - case 274: -#line 1656 "src/glsl/glsl_parser.yy" + case 280: +#line 1741 "src/glsl/glsl_parser.yy" + { + (yyval.node) = new(state) ast_switch_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].switch_body)); + (yyval.node)->set_location(yylloc); + ;} + break; + + case 281: +#line 1749 "src/glsl/glsl_parser.yy" + { + (yyval.switch_body) = new(state) ast_switch_body(NULL); + (yyval.switch_body)->set_location(yylloc); + ;} + break; + + case 282: +#line 1754 "src/glsl/glsl_parser.yy" + { + (yyval.switch_body) = new(state) ast_switch_body((yyvsp[(2) - (3)].case_statement_list)); + (yyval.switch_body)->set_location(yylloc); + ;} + break; + + case 283: +#line 1762 "src/glsl/glsl_parser.yy" + { + (yyval.case_label) = new(state) ast_case_label((yyvsp[(2) - (3)].expression)); + (yyval.case_label)->set_location(yylloc); + ;} + break; + + case 284: +#line 1767 "src/glsl/glsl_parser.yy" + { + (yyval.case_label) = new(state) ast_case_label(NULL); + (yyval.case_label)->set_location(yylloc); + ;} + break; + + case 285: +#line 1775 "src/glsl/glsl_parser.yy" + { + ast_case_label_list *labels = new(state) ast_case_label_list(); + + labels->labels.push_tail(& (yyvsp[(1) - (1)].case_label)->link); + (yyval.case_label_list) = labels; + (yyval.case_label_list)->set_location(yylloc); + ;} + break; + + case 286: +#line 1783 "src/glsl/glsl_parser.yy" + { + (yyval.case_label_list) = (yyvsp[(1) - (2)].case_label_list); + (yyval.case_label_list)->labels.push_tail(& (yyvsp[(2) - (2)].case_label)->link); + ;} + break; + + case 287: +#line 1791 "src/glsl/glsl_parser.yy" + { + ast_case_statement *stmts = new(state) ast_case_statement((yyvsp[(1) - (2)].case_label_list)); + stmts->set_location(yylloc); + + stmts->stmts.push_tail(& (yyvsp[(2) - (2)].node)->link); + (yyval.case_statement) = stmts; + ;} + break; + + case 288: +#line 1799 "src/glsl/glsl_parser.yy" + { + (yyval.case_statement) = (yyvsp[(1) - (2)].case_statement); + (yyval.case_statement)->stmts.push_tail(& (yyvsp[(2) - (2)].node)->link); + ;} + break; + + case 289: +#line 1807 "src/glsl/glsl_parser.yy" + { + ast_case_statement_list *cases= new(state) ast_case_statement_list(); + cases->set_location(yylloc); + + cases->cases.push_tail(& (yyvsp[(1) - (1)].case_statement)->link); + (yyval.case_statement_list) = cases; + ;} + break; + + case 290: +#line 1815 "src/glsl/glsl_parser.yy" + { + (yyval.case_statement_list) = (yyvsp[(1) - (2)].case_statement_list); + (yyval.case_statement_list)->cases.push_tail(& (yyvsp[(2) - (2)].case_statement)->link); + ;} + break; + + case 291: +#line 1823 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while, @@ -4826,8 +4949,8 @@ yyreduce: ;} break; - case 275: -#line 1663 "src/glsl/glsl_parser.yy" + case 292: +#line 1830 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while, @@ -4836,8 +4959,8 @@ yyreduce: ;} break; - case 276: -#line 1670 "src/glsl/glsl_parser.yy" + case 293: +#line 1837 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for, @@ -4846,31 +4969,31 @@ yyreduce: ;} break; - case 280: -#line 1686 "src/glsl/glsl_parser.yy" + case 297: +#line 1853 "src/glsl/glsl_parser.yy" { (yyval.node) = NULL; ;} break; - case 281: -#line 1693 "src/glsl/glsl_parser.yy" + case 298: +#line 1860 "src/glsl/glsl_parser.yy" { (yyval.for_rest_statement).cond = (yyvsp[(1) - (2)].node); (yyval.for_rest_statement).rest = NULL; ;} break; - case 282: -#line 1698 "src/glsl/glsl_parser.yy" + case 299: +#line 1865 "src/glsl/glsl_parser.yy" { (yyval.for_rest_statement).cond = (yyvsp[(1) - (3)].node); (yyval.for_rest_statement).rest = (yyvsp[(3) - (3)].expression); ;} break; - case 283: -#line 1707 "src/glsl/glsl_parser.yy" + case 300: +#line 1874 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL); @@ -4878,8 +5001,8 @@ yyreduce: ;} break; - case 284: -#line 1713 "src/glsl/glsl_parser.yy" + case 301: +#line 1880 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL); @@ -4887,8 +5010,8 @@ yyreduce: ;} break; - case 285: -#line 1719 "src/glsl/glsl_parser.yy" + case 302: +#line 1886 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL); @@ -4896,8 +5019,8 @@ yyreduce: ;} break; - case 286: -#line 1725 "src/glsl/glsl_parser.yy" + case 303: +#line 1892 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[(2) - (3)].expression)); @@ -4905,8 +5028,8 @@ yyreduce: ;} break; - case 287: -#line 1731 "src/glsl/glsl_parser.yy" + case 304: +#line 1898 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL); @@ -4914,23 +5037,28 @@ yyreduce: ;} break; - case 288: -#line 1739 "src/glsl/glsl_parser.yy" + case 305: +#line 1906 "src/glsl/glsl_parser.yy" { (yyval.node) = (yyvsp[(1) - (1)].function_definition); ;} break; - case 289: -#line 1740 "src/glsl/glsl_parser.yy" + case 306: +#line 1907 "src/glsl/glsl_parser.yy" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 290: -#line 1741 "src/glsl/glsl_parser.yy" + case 307: +#line 1908 "src/glsl/glsl_parser.yy" { (yyval.node) = NULL; ;} break; - case 291: -#line 1746 "src/glsl/glsl_parser.yy" + case 308: +#line 1909 "src/glsl/glsl_parser.yy" + { (yyval.node) = NULL; ;} + break; + + case 309: +#line 1914 "src/glsl/glsl_parser.yy" { void *ctx = state; (yyval.function_definition) = new(ctx) ast_function_definition(); @@ -4942,9 +5070,112 @@ yyreduce: ;} break; + case 310: +#line 1928 "src/glsl/glsl_parser.yy" + { + void *ctx = state; + (yyval.node) = new(ctx) ast_uniform_block(*state->default_uniform_qualifier, + (yyvsp[(2) - (6)].identifier), (yyvsp[(4) - (6)].declarator_list)); + + if (!state->ARB_uniform_buffer_object_enable) { + _mesa_glsl_error(& (yylsp[(1) - (6)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } else if (state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& (yylsp[(1) - (6)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } + ;} + break; + + case 311: +#line 1944 "src/glsl/glsl_parser.yy" + { + void *ctx = state; + + ast_type_qualifier qual = *state->default_uniform_qualifier; + if (!qual.merge_qualifier(& (yylsp[(1) - (7)]), state, (yyvsp[(1) - (7)].type_qualifier))) { + YYERROR; + } + (yyval.node) = new(ctx) ast_uniform_block(qual, (yyvsp[(3) - (7)].identifier), (yyvsp[(5) - (7)].declarator_list)); + + if (!state->ARB_uniform_buffer_object_enable) { + _mesa_glsl_error(& (yylsp[(1) - (7)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } else if (state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& (yylsp[(1) - (7)]), state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } + ;} + break; + + case 312: +#line 1967 "src/glsl/glsl_parser.yy" + { + (yyval.declarator_list) = (yyvsp[(1) - (1)].declarator_list); + (yyvsp[(1) - (1)].declarator_list)->link.self_link(); + ;} + break; + + case 313: +#line 1972 "src/glsl/glsl_parser.yy" + { + (yyval.declarator_list) = (yyvsp[(1) - (2)].declarator_list); + (yyvsp[(2) - (2)].declarator_list)->link.insert_before(& (yyval.declarator_list)->link); + ;} + break; + + case 316: +#line 1986 "src/glsl/glsl_parser.yy" + { + void *ctx = state; + ast_fully_specified_type *type = new(ctx) ast_fully_specified_type(); + type->set_location(yylloc); + + type->qualifier = (yyvsp[(1) - (5)].type_qualifier); + type->qualifier.flags.q.uniform = true; + type->specifier = (yyvsp[(3) - (5)].type_specifier); + (yyval.declarator_list) = new(ctx) ast_declarator_list(type); + (yyval.declarator_list)->set_location(yylloc); + (yyval.declarator_list)->ubo_qualifiers_valid = true; + + (yyval.declarator_list)->declarations.push_degenerate_list_at_head(& (yyvsp[(4) - (5)].declaration)->link); + ;} + break; + + case 317: +#line 2001 "src/glsl/glsl_parser.yy" + { + void *ctx = state; + ast_fully_specified_type *type = new(ctx) ast_fully_specified_type(); + type->set_location(yylloc); + + type->qualifier.flags.q.uniform = true; + type->specifier = (yyvsp[(2) - (4)].type_specifier); + (yyval.declarator_list) = new(ctx) ast_declarator_list(type); + (yyval.declarator_list)->set_location(yylloc); + (yyval.declarator_list)->ubo_qualifiers_valid = true; + + (yyval.declarator_list)->declarations.push_degenerate_list_at_head(& (yyvsp[(3) - (4)].declaration)->link); + ;} + break; + + case 318: +#line 2018 "src/glsl/glsl_parser.yy" + { + if (!state->default_uniform_qualifier->merge_qualifier(& (yylsp[(1) - (3)]), state, + (yyvsp[(1) - (3)].type_qualifier))) { + YYERROR; + } + ;} + break; + /* Line 1267 of yacc.c. */ -#line 4948 "src/glsl/glsl_parser.cpp" +#line 5179 "src/glsl/glsl_parser.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_parser.h b/3rdparty/glsl-optimizer/src/glsl/glsl_parser.h index c30dd5f87..4487551d9 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_parser.h +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_parser.h @@ -109,129 +109,134 @@ USAMPLERCUBE = 325, USAMPLER1DARRAY = 326, USAMPLER2DARRAY = 327, - STRUCT = 328, - VOID_TOK = 329, - WHILE = 330, - IDENTIFIER = 331, - TYPE_IDENTIFIER = 332, - NEW_IDENTIFIER = 333, - FLOATCONSTANT = 334, - INTCONSTANT = 335, - UINTCONSTANT = 336, - BOOLCONSTANT = 337, - FIELD_SELECTION = 338, - LEFT_OP = 339, - RIGHT_OP = 340, - INC_OP = 341, - DEC_OP = 342, - LE_OP = 343, - GE_OP = 344, - EQ_OP = 345, - NE_OP = 346, - AND_OP = 347, - OR_OP = 348, - XOR_OP = 349, - MUL_ASSIGN = 350, - DIV_ASSIGN = 351, - ADD_ASSIGN = 352, - MOD_ASSIGN = 353, - LEFT_ASSIGN = 354, - RIGHT_ASSIGN = 355, - AND_ASSIGN = 356, - XOR_ASSIGN = 357, - OR_ASSIGN = 358, - SUB_ASSIGN = 359, - INVARIANT = 360, - LOWP = 361, - MEDIUMP = 362, - HIGHP = 363, - SUPERP = 364, - PRECISION = 365, - VERSION = 366, - EXTENSION = 367, - LINE = 368, - COLON = 369, - EOL = 370, - INTERFACE = 371, - OUTPUT = 372, - PRAGMA_DEBUG_ON = 373, - PRAGMA_DEBUG_OFF = 374, - PRAGMA_OPTIMIZE_ON = 375, - PRAGMA_OPTIMIZE_OFF = 376, - PRAGMA_INVARIANT_ALL = 377, - LAYOUT_TOK = 378, - ASM = 379, - CLASS = 380, - UNION = 381, - ENUM = 382, - TYPEDEF = 383, - TEMPLATE = 384, - THIS = 385, - PACKED_TOK = 386, - GOTO = 387, - INLINE_TOK = 388, - NOINLINE = 389, - VOLATILE = 390, - PUBLIC_TOK = 391, - STATIC = 392, - EXTERN = 393, - EXTERNAL = 394, - LONG_TOK = 395, - SHORT_TOK = 396, - DOUBLE_TOK = 397, - HALF = 398, - FIXED_TOK = 399, - UNSIGNED = 400, - INPUT_TOK = 401, - OUPTUT = 402, - HVEC2 = 403, - HVEC3 = 404, - HVEC4 = 405, - DVEC2 = 406, - DVEC3 = 407, - DVEC4 = 408, - FVEC2 = 409, - FVEC3 = 410, - FVEC4 = 411, - SAMPLER2DRECT = 412, - SAMPLER3DRECT = 413, - SAMPLER2DRECTSHADOW = 414, - SIZEOF = 415, - CAST = 416, - NAMESPACE = 417, - USING = 418, - ERROR_TOK = 419, - COMMON = 420, - PARTITION = 421, - ACTIVE = 422, - SAMPLERBUFFER = 423, - FILTER = 424, - IMAGE1D = 425, - IMAGE2D = 426, - IMAGE3D = 427, - IMAGECUBE = 428, - IMAGE1DARRAY = 429, - IMAGE2DARRAY = 430, - IIMAGE1D = 431, - IIMAGE2D = 432, - IIMAGE3D = 433, - IIMAGECUBE = 434, - IIMAGE1DARRAY = 435, - IIMAGE2DARRAY = 436, - UIMAGE1D = 437, - UIMAGE2D = 438, - UIMAGE3D = 439, - UIMAGECUBE = 440, - UIMAGE1DARRAY = 441, - UIMAGE2DARRAY = 442, - IMAGE1DSHADOW = 443, - IMAGE2DSHADOW = 444, - IMAGEBUFFER = 445, - IIMAGEBUFFER = 446, - UIMAGEBUFFER = 447, - IMAGE1DARRAYSHADOW = 448, - IMAGE2DARRAYSHADOW = 449, - ROW_MAJOR = 450 + SAMPLER2DRECT = 328, + ISAMPLER2DRECT = 329, + USAMPLER2DRECT = 330, + SAMPLER2DRECTSHADOW = 331, + SAMPLERBUFFER = 332, + ISAMPLERBUFFER = 333, + USAMPLERBUFFER = 334, + SAMPLEREXTERNALOES = 335, + STRUCT = 336, + VOID_TOK = 337, + WHILE = 338, + IDENTIFIER = 339, + TYPE_IDENTIFIER = 340, + NEW_IDENTIFIER = 341, + FLOATCONSTANT = 342, + INTCONSTANT = 343, + UINTCONSTANT = 344, + BOOLCONSTANT = 345, + FIELD_SELECTION = 346, + LEFT_OP = 347, + RIGHT_OP = 348, + INC_OP = 349, + DEC_OP = 350, + LE_OP = 351, + GE_OP = 352, + EQ_OP = 353, + NE_OP = 354, + AND_OP = 355, + OR_OP = 356, + XOR_OP = 357, + MUL_ASSIGN = 358, + DIV_ASSIGN = 359, + ADD_ASSIGN = 360, + MOD_ASSIGN = 361, + LEFT_ASSIGN = 362, + RIGHT_ASSIGN = 363, + AND_ASSIGN = 364, + XOR_ASSIGN = 365, + OR_ASSIGN = 366, + SUB_ASSIGN = 367, + INVARIANT = 368, + LOWP = 369, + MEDIUMP = 370, + HIGHP = 371, + SUPERP = 372, + PRECISION = 373, + VERSION_TOK = 374, + EXTENSION = 375, + LINE = 376, + COLON = 377, + EOL = 378, + INTERFACE = 379, + OUTPUT = 380, + PRAGMA_DEBUG_ON = 381, + PRAGMA_DEBUG_OFF = 382, + PRAGMA_OPTIMIZE_ON = 383, + PRAGMA_OPTIMIZE_OFF = 384, + PRAGMA_INVARIANT_ALL = 385, + LAYOUT_TOK = 386, + ASM = 387, + CLASS = 388, + UNION = 389, + ENUM = 390, + TYPEDEF = 391, + TEMPLATE = 392, + THIS = 393, + PACKED_TOK = 394, + GOTO = 395, + INLINE_TOK = 396, + NOINLINE = 397, + VOLATILE = 398, + PUBLIC_TOK = 399, + STATIC = 400, + EXTERN = 401, + EXTERNAL = 402, + LONG_TOK = 403, + SHORT_TOK = 404, + DOUBLE_TOK = 405, + HALF = 406, + FIXED_TOK = 407, + UNSIGNED = 408, + INPUT_TOK = 409, + OUPTUT = 410, + HVEC2 = 411, + HVEC3 = 412, + HVEC4 = 413, + DVEC2 = 414, + DVEC3 = 415, + DVEC4 = 416, + FVEC2 = 417, + FVEC3 = 418, + FVEC4 = 419, + SAMPLER3DRECT = 420, + SIZEOF = 421, + CAST = 422, + NAMESPACE = 423, + USING = 424, + ERROR_TOK = 425, + COMMON = 426, + PARTITION = 427, + ACTIVE = 428, + FILTER = 429, + IMAGE1D = 430, + IMAGE2D = 431, + IMAGE3D = 432, + IMAGECUBE = 433, + IMAGE1DARRAY = 434, + IMAGE2DARRAY = 435, + IIMAGE1D = 436, + IIMAGE2D = 437, + IIMAGE3D = 438, + IIMAGECUBE = 439, + IIMAGE1DARRAY = 440, + IIMAGE2DARRAY = 441, + UIMAGE1D = 442, + UIMAGE2D = 443, + UIMAGE3D = 444, + UIMAGECUBE = 445, + UIMAGE1DARRAY = 446, + UIMAGE2DARRAY = 447, + IMAGE1DSHADOW = 448, + IMAGE2DSHADOW = 449, + IMAGEBUFFER = 450, + IIMAGEBUFFER = 451, + UIMAGEBUFFER = 452, + IMAGE1DARRAYSHADOW = 453, + IMAGE2DARRAYSHADOW = 454, + ROW_MAJOR = 455 }; #endif /* Tokens. */ @@ -305,140 +310,145 @@ #define USAMPLERCUBE 325 #define USAMPLER1DARRAY 326 #define USAMPLER2DARRAY 327 -#define STRUCT 328 -#define VOID_TOK 329 -#define WHILE 330 -#define IDENTIFIER 331 -#define TYPE_IDENTIFIER 332 -#define NEW_IDENTIFIER 333 -#define FLOATCONSTANT 334 -#define INTCONSTANT 335 -#define UINTCONSTANT 336 -#define BOOLCONSTANT 337 -#define FIELD_SELECTION 338 -#define LEFT_OP 339 -#define RIGHT_OP 340 -#define INC_OP 341 -#define DEC_OP 342 -#define LE_OP 343 -#define GE_OP 344 -#define EQ_OP 345 -#define NE_OP 346 -#define AND_OP 347 -#define OR_OP 348 -#define XOR_OP 349 -#define MUL_ASSIGN 350 -#define DIV_ASSIGN 351 -#define ADD_ASSIGN 352 -#define MOD_ASSIGN 353 -#define LEFT_ASSIGN 354 -#define RIGHT_ASSIGN 355 -#define AND_ASSIGN 356 -#define XOR_ASSIGN 357 -#define OR_ASSIGN 358 -#define SUB_ASSIGN 359 -#define INVARIANT 360 -#define LOWP 361 -#define MEDIUMP 362 -#define HIGHP 363 -#define SUPERP 364 -#define PRECISION 365 -#define VERSION 366 -#define EXTENSION 367 -#define LINE 368 -#define COLON 369 -#define EOL 370 -#define INTERFACE 371 -#define OUTPUT 372 -#define PRAGMA_DEBUG_ON 373 -#define PRAGMA_DEBUG_OFF 374 -#define PRAGMA_OPTIMIZE_ON 375 -#define PRAGMA_OPTIMIZE_OFF 376 -#define PRAGMA_INVARIANT_ALL 377 -#define LAYOUT_TOK 378 -#define ASM 379 -#define CLASS 380 -#define UNION 381 -#define ENUM 382 -#define TYPEDEF 383 -#define TEMPLATE 384 -#define THIS 385 -#define PACKED_TOK 386 -#define GOTO 387 -#define INLINE_TOK 388 -#define NOINLINE 389 -#define VOLATILE 390 -#define PUBLIC_TOK 391 -#define STATIC 392 -#define EXTERN 393 -#define EXTERNAL 394 -#define LONG_TOK 395 -#define SHORT_TOK 396 -#define DOUBLE_TOK 397 -#define HALF 398 -#define FIXED_TOK 399 -#define UNSIGNED 400 -#define INPUT_TOK 401 -#define OUPTUT 402 -#define HVEC2 403 -#define HVEC3 404 -#define HVEC4 405 -#define DVEC2 406 -#define DVEC3 407 -#define DVEC4 408 -#define FVEC2 409 -#define FVEC3 410 -#define FVEC4 411 -#define SAMPLER2DRECT 412 -#define SAMPLER3DRECT 413 -#define SAMPLER2DRECTSHADOW 414 -#define SIZEOF 415 -#define CAST 416 -#define NAMESPACE 417 -#define USING 418 -#define ERROR_TOK 419 -#define COMMON 420 -#define PARTITION 421 -#define ACTIVE 422 -#define SAMPLERBUFFER 423 -#define FILTER 424 -#define IMAGE1D 425 -#define IMAGE2D 426 -#define IMAGE3D 427 -#define IMAGECUBE 428 -#define IMAGE1DARRAY 429 -#define IMAGE2DARRAY 430 -#define IIMAGE1D 431 -#define IIMAGE2D 432 -#define IIMAGE3D 433 -#define IIMAGECUBE 434 -#define IIMAGE1DARRAY 435 -#define IIMAGE2DARRAY 436 -#define UIMAGE1D 437 -#define UIMAGE2D 438 -#define UIMAGE3D 439 -#define UIMAGECUBE 440 -#define UIMAGE1DARRAY 441 -#define UIMAGE2DARRAY 442 -#define IMAGE1DSHADOW 443 -#define IMAGE2DSHADOW 444 -#define IMAGEBUFFER 445 -#define IIMAGEBUFFER 446 -#define UIMAGEBUFFER 447 -#define IMAGE1DARRAYSHADOW 448 -#define IMAGE2DARRAYSHADOW 449 -#define ROW_MAJOR 450 +#define SAMPLER2DRECT 328 +#define ISAMPLER2DRECT 329 +#define USAMPLER2DRECT 330 +#define SAMPLER2DRECTSHADOW 331 +#define SAMPLERBUFFER 332 +#define ISAMPLERBUFFER 333 +#define USAMPLERBUFFER 334 +#define SAMPLEREXTERNALOES 335 +#define STRUCT 336 +#define VOID_TOK 337 +#define WHILE 338 +#define IDENTIFIER 339 +#define TYPE_IDENTIFIER 340 +#define NEW_IDENTIFIER 341 +#define FLOATCONSTANT 342 +#define INTCONSTANT 343 +#define UINTCONSTANT 344 +#define BOOLCONSTANT 345 +#define FIELD_SELECTION 346 +#define LEFT_OP 347 +#define RIGHT_OP 348 +#define INC_OP 349 +#define DEC_OP 350 +#define LE_OP 351 +#define GE_OP 352 +#define EQ_OP 353 +#define NE_OP 354 +#define AND_OP 355 +#define OR_OP 356 +#define XOR_OP 357 +#define MUL_ASSIGN 358 +#define DIV_ASSIGN 359 +#define ADD_ASSIGN 360 +#define MOD_ASSIGN 361 +#define LEFT_ASSIGN 362 +#define RIGHT_ASSIGN 363 +#define AND_ASSIGN 364 +#define XOR_ASSIGN 365 +#define OR_ASSIGN 366 +#define SUB_ASSIGN 367 +#define INVARIANT 368 +#define LOWP 369 +#define MEDIUMP 370 +#define HIGHP 371 +#define SUPERP 372 +#define PRECISION 373 +#define VERSION_TOK 374 +#define EXTENSION 375 +#define LINE 376 +#define COLON 377 +#define EOL 378 +#define INTERFACE 379 +#define OUTPUT 380 +#define PRAGMA_DEBUG_ON 381 +#define PRAGMA_DEBUG_OFF 382 +#define PRAGMA_OPTIMIZE_ON 383 +#define PRAGMA_OPTIMIZE_OFF 384 +#define PRAGMA_INVARIANT_ALL 385 +#define LAYOUT_TOK 386 +#define ASM 387 +#define CLASS 388 +#define UNION 389 +#define ENUM 390 +#define TYPEDEF 391 +#define TEMPLATE 392 +#define THIS 393 +#define PACKED_TOK 394 +#define GOTO 395 +#define INLINE_TOK 396 +#define NOINLINE 397 +#define VOLATILE 398 +#define PUBLIC_TOK 399 +#define STATIC 400 +#define EXTERN 401 +#define EXTERNAL 402 +#define LONG_TOK 403 +#define SHORT_TOK 404 +#define DOUBLE_TOK 405 +#define HALF 406 +#define FIXED_TOK 407 +#define UNSIGNED 408 +#define INPUT_TOK 409 +#define OUPTUT 410 +#define HVEC2 411 +#define HVEC3 412 +#define HVEC4 413 +#define DVEC2 414 +#define DVEC3 415 +#define DVEC4 416 +#define FVEC2 417 +#define FVEC3 418 +#define FVEC4 419 +#define SAMPLER3DRECT 420 +#define SIZEOF 421 +#define CAST 422 +#define NAMESPACE 423 +#define USING 424 +#define ERROR_TOK 425 +#define COMMON 426 +#define PARTITION 427 +#define ACTIVE 428 +#define FILTER 429 +#define IMAGE1D 430 +#define IMAGE2D 431 +#define IMAGE3D 432 +#define IMAGECUBE 433 +#define IMAGE1DARRAY 434 +#define IMAGE2DARRAY 435 +#define IIMAGE1D 436 +#define IIMAGE2D 437 +#define IIMAGE3D 438 +#define IIMAGECUBE 439 +#define IIMAGE1DARRAY 440 +#define IIMAGE2DARRAY 441 +#define UIMAGE1D 442 +#define UIMAGE2D 443 +#define UIMAGE3D 444 +#define UIMAGECUBE 445 +#define UIMAGE1DARRAY 446 +#define UIMAGE2DARRAY 447 +#define IMAGE1DSHADOW 448 +#define IMAGE2DSHADOW 449 +#define IMAGEBUFFER 450 +#define IIMAGEBUFFER 451 +#define UIMAGEBUFFER 452 +#define IMAGE1DARRAYSHADOW 453 +#define IMAGE2DARRAYSHADOW 454 +#define ROW_MAJOR 455 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 52 "src/glsl/glsl_parser.yy" +#line 59 "src/glsl/glsl_parser.yy" { int n; float real; - char *identifier; + const char *identifier; struct ast_type_qualifier type_qualifier; @@ -453,6 +463,11 @@ typedef union YYSTYPE ast_declarator_list *declarator_list; ast_struct_specifier *struct_specifier; ast_declaration *declaration; + ast_switch_body *switch_body; + ast_case_label *case_label; + ast_case_label_list *case_label_list; + ast_case_statement *case_statement; + ast_case_statement_list *case_statement_list; struct { ast_node *cond; @@ -465,7 +480,7 @@ typedef union YYSTYPE } selection_rest_statement; } /* Line 1529 of yacc.c. */ -#line 469 "src/glsl/glsl_parser.h" +#line 484 "src/glsl/glsl_parser.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_parser.yy b/3rdparty/glsl-optimizer/src/glsl/glsl_parser.yy index 69222a1d0..68773b041 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_parser.yy +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_parser.yy @@ -29,9 +29,16 @@ #include "ast.h" #include "glsl_parser_extras.h" #include "glsl_types.h" +#include "main/context.h" #define YYLEX_PARAM state->scanner +#undef yyerror + +static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg) +{ + _mesa_glsl_error(loc, st, "%s", msg); +} %} %pure-parser @@ -52,7 +59,7 @@ %union { int n; float real; - char *identifier; + const char *identifier; struct ast_type_qualifier type_qualifier; @@ -67,6 +74,11 @@ ast_declarator_list *declarator_list; ast_struct_specifier *struct_specifier; ast_declaration *declaration; + ast_switch_body *switch_body; + ast_case_label *case_label; + ast_case_label_list *case_label_list; + ast_case_statement *case_statement; + ast_case_statement_list *case_statement_list; struct { ast_node *cond; @@ -92,6 +104,9 @@ %token SAMPLER2DARRAYSHADOW ISAMPLER1D ISAMPLER2D ISAMPLER3D ISAMPLERCUBE %token ISAMPLER1DARRAY ISAMPLER2DARRAY USAMPLER1D USAMPLER2D USAMPLER3D %token USAMPLERCUBE USAMPLER1DARRAY USAMPLER2DARRAY +%token SAMPLER2DRECT ISAMPLER2DRECT USAMPLER2DRECT SAMPLER2DRECTSHADOW +%token SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER +%token SAMPLEREXTERNALOES %token STRUCT VOID_TOK WHILE %token IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER %type any_identifier @@ -106,7 +121,7 @@ %token INVARIANT %token LOWP MEDIUMP HIGHP SUPERP PRECISION -%token VERSION EXTENSION LINE COLON EOL INTERFACE OUTPUT +%token VERSION_TOK EXTENSION LINE COLON EOL INTERFACE OUTPUT %token PRAGMA_DEBUG_ON PRAGMA_DEBUG_OFF %token PRAGMA_OPTIMIZE_ON PRAGMA_OPTIMIZE_OFF %token PRAGMA_INVARIANT_ALL @@ -118,12 +133,12 @@ %token INLINE_TOK NOINLINE VOLATILE PUBLIC_TOK STATIC EXTERN EXTERNAL %token LONG_TOK SHORT_TOK DOUBLE_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK OUPTUT %token HVEC2 HVEC3 HVEC4 DVEC2 DVEC3 DVEC4 FVEC2 FVEC3 FVEC4 -%token SAMPLER2DRECT SAMPLER3DRECT SAMPLER2DRECTSHADOW +%token SAMPLER3DRECT %token SIZEOF CAST NAMESPACE USING %token ERROR_TOK -%token COMMON PARTITION ACTIVE SAMPLERBUFFER FILTER +%token COMMON PARTITION ACTIVE FILTER %token IMAGE1D IMAGE2D IMAGE3D IMAGECUBE IMAGE1DARRAY IMAGE2DARRAY %token IIMAGE1D IIMAGE2D IIMAGE3D IIMAGECUBE IIMAGE1DARRAY IIMAGE2DARRAY %token UIMAGE1D UIMAGE2D UIMAGE3D UIMAGECUBE UIMAGE1DARRAY UIMAGE2DARRAY @@ -141,10 +156,11 @@ %type interpolation_qualifier %type layout_qualifier %type layout_qualifier_id_list layout_qualifier_id +%type uniform_block_layout_qualifier %type type_specifier %type type_specifier_no_prec %type type_specifier_nonarray -%type basic_type_specifier_nonarray +%type basic_type_specifier_nonarray %type fully_specified_type %type function_prototype %type function_header @@ -199,13 +215,22 @@ %type declaration %type declaration_statement %type jump_statement +%type uniform_block %type struct_specifier -%type struct_declaration_list +%type struct_declaration_list %type struct_declaration %type struct_declarator %type struct_declarator_list +%type member_list +%type member_declaration %type selection_statement %type selection_rest_statement +%type switch_statement +%type switch_body +%type case_label_list +%type case_label +%type case_statement +%type case_statement_list %type iteration_statement %type condition %type conditionopt @@ -228,23 +253,32 @@ translation_unit: version_statement: /* blank - no #version specified: defaults are already set */ - | VERSION INTCONSTANT EOL + | VERSION_TOK INTCONSTANT EOL { bool supported = false; switch ($2) { case 100: state->es_shader = true; - supported = state->Const.GLSL_100ES; + supported = state->ctx->API == API_OPENGLES2 || + state->ctx->Extensions.ARB_ES2_compatibility; break; case 110: - supported = state->Const.GLSL_110; - break; case 120: - supported = state->Const.GLSL_120; - break; + /* FINISHME: Once the OpenGL 3.0 'forward compatible' context or + * the OpenGL 3.2 Core context is supported, this logic will need + * change. Older versions of GLSL are no longer supported + * outside the compatibility contexts of 3.x. + */ case 130: - supported = state->Const.GLSL_130; + case 140: + case 150: + case 330: + case 400: + case 410: + case 420: + supported = _mesa_is_desktop_gl(state->ctx) && + ((unsigned) $2) <= state->ctx->Const.GLSLVersion; break; default: supported = false; @@ -264,6 +298,10 @@ version_statement: state->version_string, state->supported_version_string); } + + if (state->language_version >= 140) { + state->ARB_uniform_buffer_object_enable = true; + } } ; @@ -274,7 +312,7 @@ pragma_statement: | PRAGMA_OPTIMIZE_OFF EOL | PRAGMA_INVARIANT_ALL EOL { - if (state->language_version < 120) { + if (state->language_version == 110) { _mesa_glsl_warning(& @1, state, "pragma `invariant(all)' not supported in %s", state->version_string); @@ -777,6 +815,10 @@ declaration: $3->is_precision_statement = true; $$ = $3; } + | uniform_block + { + $$ = $1; + } ; function_prototype: @@ -1071,70 +1113,77 @@ layout_qualifier_id_list: layout_qualifier_id | layout_qualifier_id_list ',' layout_qualifier_id { - if (($1.flags.i & $3.flags.i) != 0) { - _mesa_glsl_error(& @3, state, - "duplicate layout qualifiers used\n"); + $$ = $1; + if (!$$.merge_qualifier(& @3, state, $3)) { YYERROR; } - - $$.flags.i = $1.flags.i | $3.flags.i; - - if ($1.flags.q.explicit_location) - $$.location = $1.location; - - if ($3.flags.q.explicit_location) - $$.location = $3.location; } ; layout_qualifier_id: any_identifier { - bool got_one = false; - memset(& $$, 0, sizeof($$)); /* Layout qualifiers for ARB_fragment_coord_conventions. */ - if (!got_one && state->ARB_fragment_coord_conventions_enable) { + if (!$$.flags.i && state->ARB_fragment_coord_conventions_enable) { if (strcmp($1, "origin_upper_left") == 0) { - got_one = true; $$.flags.q.origin_upper_left = 1; } else if (strcmp($1, "pixel_center_integer") == 0) { - got_one = true; $$.flags.q.pixel_center_integer = 1; } - if (got_one && state->ARB_fragment_coord_conventions_warn) { + if ($$.flags.i && state->ARB_fragment_coord_conventions_warn) { _mesa_glsl_warning(& @1, state, "GL_ARB_fragment_coord_conventions layout " "identifier `%s' used\n", $1); } } - /* Layout qualifiers for AMD_conservative_depth. */ - if (!got_one && state->AMD_conservative_depth_enable) { + /* Layout qualifiers for AMD/ARB_conservative_depth. */ + if (!$$.flags.i && + (state->AMD_conservative_depth_enable || + state->ARB_conservative_depth_enable)) { if (strcmp($1, "depth_any") == 0) { - got_one = true; $$.flags.q.depth_any = 1; } else if (strcmp($1, "depth_greater") == 0) { - got_one = true; $$.flags.q.depth_greater = 1; } else if (strcmp($1, "depth_less") == 0) { - got_one = true; $$.flags.q.depth_less = 1; } else if (strcmp($1, "depth_unchanged") == 0) { - got_one = true; $$.flags.q.depth_unchanged = 1; } - if (got_one && state->AMD_conservative_depth_warn) { + if ($$.flags.i && state->AMD_conservative_depth_warn) { _mesa_glsl_warning(& @1, state, "GL_AMD_conservative_depth " "layout qualifier `%s' is used\n", $1); } + if ($$.flags.i && state->ARB_conservative_depth_warn) { + _mesa_glsl_warning(& @1, state, + "GL_ARB_conservative_depth " + "layout qualifier `%s' is used\n", $1); + } } - if (!got_one) { + /* See also uniform_block_layout_qualifier. */ + if (!$$.flags.i && state->ARB_uniform_buffer_object_enable) { + if (strcmp($1, "std140") == 0) { + $$.flags.q.std140 = 1; + } else if (strcmp($1, "shared") == 0) { + $$.flags.q.shared = 1; + } else if (strcmp($1, "column_major") == 0) { + $$.flags.q.column_major = 1; + } + + if ($$.flags.i && state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "layout qualifier `%s' is used\n", $1); + } + } + + if (!$$.flags.i) { _mesa_glsl_error(& @1, state, "unrecognized layout identifier " "`%s'\n", $1); YYERROR; @@ -1142,8 +1191,6 @@ layout_qualifier_id: } | any_identifier '=' INTCONSTANT { - bool got_one = false; - memset(& $$, 0, sizeof($$)); if (state->ARB_explicit_attrib_location_enable) { @@ -1151,8 +1198,6 @@ layout_qualifier_id: * FINISHME: GLSL 1.30 (or later) are supported. */ if (strcmp("location", $1) == 0) { - got_one = true; - $$.flags.q.explicit_location = 1; if ($3 >= 0) { @@ -1163,12 +1208,24 @@ layout_qualifier_id: YYERROR; } } + + if (strcmp("index", $1) == 0) { + $$.flags.q.explicit_index = 1; + + if ($3 >= 0) { + $$.index = $3; + } else { + _mesa_glsl_error(& @3, state, + "invalid index %d specified\n", $3); + YYERROR; + } + } } /* If the identifier didn't match any known layout identifiers, * emit an error. */ - if (!got_one) { + if (!$$.flags.i) { _mesa_glsl_error(& @1, state, "unrecognized layout identifier " "`%s'\n", $1); YYERROR; @@ -1178,6 +1235,38 @@ layout_qualifier_id: "identifier `%s' used\n", $1); } } + | uniform_block_layout_qualifier + { + $$ = $1; + /* Layout qualifiers for ARB_uniform_buffer_object. */ + if (!state->ARB_uniform_buffer_object_enable) { + _mesa_glsl_error(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "layout qualifier `%s' is used\n", $1); + } else if (state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "layout qualifier `%s' is used\n", $1); + } + } + ; + +/* This is a separate language rule because we parse these as tokens + * (due to them being reserved keywords) instead of identifiers like + * most qualifiers. See the any_identifier path of + * layout_qualifier_id for the others. + */ +uniform_block_layout_qualifier: + ROW_MAJOR + { + memset(& $$, 0, sizeof($$)); + $$.flags.q.row_major = 1; + } + | PACKED_TOK + { + memset(& $$, 0, sizeof($$)); + $$.flags.q.packed = 1; + } ; interpolation_qualifier: @@ -1337,57 +1426,63 @@ type_specifier_nonarray: ; basic_type_specifier_nonarray: - VOID_TOK { $$ = ast_void; } - | FLOAT_TOK { $$ = ast_float; } - | INT_TOK { $$ = ast_int; } - | UINT_TOK { $$ = ast_uint; } - | BOOL_TOK { $$ = ast_bool; } - | VEC2 { $$ = ast_vec2; } - | VEC3 { $$ = ast_vec3; } - | VEC4 { $$ = ast_vec4; } - | BVEC2 { $$ = ast_bvec2; } - | BVEC3 { $$ = ast_bvec3; } - | BVEC4 { $$ = ast_bvec4; } - | IVEC2 { $$ = ast_ivec2; } - | IVEC3 { $$ = ast_ivec3; } - | IVEC4 { $$ = ast_ivec4; } - | UVEC2 { $$ = ast_uvec2; } - | UVEC3 { $$ = ast_uvec3; } - | UVEC4 { $$ = ast_uvec4; } - | MAT2X2 { $$ = ast_mat2; } - | MAT2X3 { $$ = ast_mat2x3; } - | MAT2X4 { $$ = ast_mat2x4; } - | MAT3X2 { $$ = ast_mat3x2; } - | MAT3X3 { $$ = ast_mat3; } - | MAT3X4 { $$ = ast_mat3x4; } - | MAT4X2 { $$ = ast_mat4x2; } - | MAT4X3 { $$ = ast_mat4x3; } - | MAT4X4 { $$ = ast_mat4; } - | SAMPLER1D { $$ = ast_sampler1d; } - | SAMPLER2D { $$ = ast_sampler2d; } - | SAMPLER2DRECT { $$ = ast_sampler2drect; } - | SAMPLER3D { $$ = ast_sampler3d; } - | SAMPLERCUBE { $$ = ast_samplercube; } - | SAMPLER1DSHADOW { $$ = ast_sampler1dshadow; } - | SAMPLER2DSHADOW { $$ = ast_sampler2dshadow; } - | SAMPLER2DRECTSHADOW { $$ = ast_sampler2drectshadow; } - | SAMPLERCUBESHADOW { $$ = ast_samplercubeshadow; } - | SAMPLER1DARRAY { $$ = ast_sampler1darray; } - | SAMPLER2DARRAY { $$ = ast_sampler2darray; } - | SAMPLER1DARRAYSHADOW { $$ = ast_sampler1darrayshadow; } - | SAMPLER2DARRAYSHADOW { $$ = ast_sampler2darrayshadow; } - | ISAMPLER1D { $$ = ast_isampler1d; } - | ISAMPLER2D { $$ = ast_isampler2d; } - | ISAMPLER3D { $$ = ast_isampler3d; } - | ISAMPLERCUBE { $$ = ast_isamplercube; } - | ISAMPLER1DARRAY { $$ = ast_isampler1darray; } - | ISAMPLER2DARRAY { $$ = ast_isampler2darray; } - | USAMPLER1D { $$ = ast_usampler1d; } - | USAMPLER2D { $$ = ast_usampler2d; } - | USAMPLER3D { $$ = ast_usampler3d; } - | USAMPLERCUBE { $$ = ast_usamplercube; } - | USAMPLER1DARRAY { $$ = ast_usampler1darray; } - | USAMPLER2DARRAY { $$ = ast_usampler2darray; } + VOID_TOK { $$ = "void"; } + | FLOAT_TOK { $$ = "float"; } + | INT_TOK { $$ = "int"; } + | UINT_TOK { $$ = "uint"; } + | BOOL_TOK { $$ = "bool"; } + | VEC2 { $$ = "vec2"; } + | VEC3 { $$ = "vec3"; } + | VEC4 { $$ = "vec4"; } + | BVEC2 { $$ = "bvec2"; } + | BVEC3 { $$ = "bvec3"; } + | BVEC4 { $$ = "bvec4"; } + | IVEC2 { $$ = "ivec2"; } + | IVEC3 { $$ = "ivec3"; } + | IVEC4 { $$ = "ivec4"; } + | UVEC2 { $$ = "uvec2"; } + | UVEC3 { $$ = "uvec3"; } + | UVEC4 { $$ = "uvec4"; } + | MAT2X2 { $$ = "mat2"; } + | MAT2X3 { $$ = "mat2x3"; } + | MAT2X4 { $$ = "mat2x4"; } + | MAT3X2 { $$ = "mat3x2"; } + | MAT3X3 { $$ = "mat3"; } + | MAT3X4 { $$ = "mat3x4"; } + | MAT4X2 { $$ = "mat4x2"; } + | MAT4X3 { $$ = "mat4x3"; } + | MAT4X4 { $$ = "mat4"; } + | SAMPLER1D { $$ = "sampler1D"; } + | SAMPLER2D { $$ = "sampler2D"; } + | SAMPLER2DRECT { $$ = "sampler2DRect"; } + | SAMPLER3D { $$ = "sampler3D"; } + | SAMPLERCUBE { $$ = "samplerCube"; } + | SAMPLEREXTERNALOES { $$ = "samplerExternalOES"; } + | SAMPLER1DSHADOW { $$ = "sampler1DShadow"; } + | SAMPLER2DSHADOW { $$ = "sampler2DShadow"; } + | SAMPLER2DRECTSHADOW { $$ = "sampler2DRectShadow"; } + | SAMPLERCUBESHADOW { $$ = "samplerCubeShadow"; } + | SAMPLER1DARRAY { $$ = "sampler1DArray"; } + | SAMPLER2DARRAY { $$ = "sampler2DArray"; } + | SAMPLER1DARRAYSHADOW { $$ = "sampler1DArrayShadow"; } + | SAMPLER2DARRAYSHADOW { $$ = "sampler2DArrayShadow"; } + | SAMPLERBUFFER { $$ = "samplerBuffer"; } + | ISAMPLER1D { $$ = "isampler1D"; } + | ISAMPLER2D { $$ = "isampler2D"; } + | ISAMPLER2DRECT { $$ = "isampler2DRect"; } + | ISAMPLER3D { $$ = "isampler3D"; } + | ISAMPLERCUBE { $$ = "isamplerCube"; } + | ISAMPLER1DARRAY { $$ = "isampler1DArray"; } + | ISAMPLER2DARRAY { $$ = "isampler2DArray"; } + | ISAMPLERBUFFER { $$ = "isamplerBuffer"; } + | USAMPLER1D { $$ = "usampler1D"; } + | USAMPLER2D { $$ = "usampler2D"; } + | USAMPLER2DRECT { $$ = "usampler2DRect"; } + | USAMPLER3D { $$ = "usampler3D"; } + | USAMPLERCUBE { $$ = "usamplerCube"; } + | USAMPLER1DARRAY { $$ = "usampler1DArray"; } + | USAMPLER2DARRAY { $$ = "usampler2DArray"; } + | USAMPLERBUFFER { $$ = "usamplerBuffer"; } ; precision_qualifier: @@ -1442,12 +1537,12 @@ struct_specifier: struct_declaration_list: struct_declaration { - $$ = (ast_node *) $1; + $$ = $1; $1->link.self_link(); } | struct_declaration_list struct_declaration { - $$ = (ast_node *) $1; + $$ = $1; $$->link.insert_before(& $2->link); } ; @@ -1515,8 +1610,7 @@ simple_statement: declaration_statement | expression_statement | selection_statement - | switch_statement { $$ = NULL; } - | case_label { $$ = NULL; } + | switch_statement | iteration_statement | jump_statement ; @@ -1638,13 +1732,90 @@ condition: } ; +/* + * siwtch_statement grammar is based on the syntax described in the body + * of the GLSL spec, not in it's appendix!!! + */ switch_statement: - SWITCH '(' expression ')' compound_statement + SWITCH '(' expression ')' switch_body + { + $$ = new(state) ast_switch_statement($3, $5); + $$->set_location(yylloc); + } + ; + +switch_body: + '{' '}' + { + $$ = new(state) ast_switch_body(NULL); + $$->set_location(yylloc); + } + | '{' case_statement_list '}' + { + $$ = new(state) ast_switch_body($2); + $$->set_location(yylloc); + } ; case_label: CASE expression ':' + { + $$ = new(state) ast_case_label($2); + $$->set_location(yylloc); + } | DEFAULT ':' + { + $$ = new(state) ast_case_label(NULL); + $$->set_location(yylloc); + } + ; + +case_label_list: + case_label + { + ast_case_label_list *labels = new(state) ast_case_label_list(); + + labels->labels.push_tail(& $1->link); + $$ = labels; + $$->set_location(yylloc); + } + | case_label_list case_label + { + $$ = $1; + $$->labels.push_tail(& $2->link); + } + ; + +case_statement: + case_label_list statement + { + ast_case_statement *stmts = new(state) ast_case_statement($1); + stmts->set_location(yylloc); + + stmts->stmts.push_tail(& $2->link); + $$ = stmts; + } + | case_statement statement + { + $$ = $1; + $$->stmts.push_tail(& $2->link); + } + ; + +case_statement_list: + case_statement + { + ast_case_statement_list *cases= new(state) ast_case_statement_list(); + cases->set_location(yylloc); + + cases->cases.push_tail(& $1->link); + $$ = cases; + } + | case_statement_list case_statement + { + $$ = $1; + $$->cases.push_tail(& $2->link); + } ; iteration_statement: @@ -1735,6 +1906,7 @@ external_declaration: function_definition { $$ = $1; } | declaration { $$ = $1; } | pragma_statement { $$ = NULL; } + | layout_defaults { $$ = NULL; } ; function_definition: @@ -1749,3 +1921,103 @@ function_definition: state->symbols->pop_scope(); } ; + +/* layout_qualifieropt is packed into this rule */ +uniform_block: + UNIFORM NEW_IDENTIFIER '{' member_list '}' ';' + { + void *ctx = state; + $$ = new(ctx) ast_uniform_block(*state->default_uniform_qualifier, + $2, $4); + + if (!state->ARB_uniform_buffer_object_enable) { + _mesa_glsl_error(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } else if (state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } + } + | layout_qualifier UNIFORM NEW_IDENTIFIER '{' member_list '}' ';' + { + void *ctx = state; + + ast_type_qualifier qual = *state->default_uniform_qualifier; + if (!qual.merge_qualifier(& @1, state, $1)) { + YYERROR; + } + $$ = new(ctx) ast_uniform_block(qual, $3, $5); + + if (!state->ARB_uniform_buffer_object_enable) { + _mesa_glsl_error(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } else if (state->ARB_uniform_buffer_object_warn) { + _mesa_glsl_warning(& @1, state, + "#version 140 / GL_ARB_uniform_buffer_object " + "required for defining uniform blocks\n"); + } + } + ; + +member_list: + member_declaration + { + $$ = $1; + $1->link.self_link(); + } + | member_declaration member_list + { + $$ = $1; + $2->link.insert_before(& $$->link); + } + ; + +/* Specifying "uniform" inside of a uniform block is redundant. */ +uniformopt: + /* nothing */ + | UNIFORM + ; + +member_declaration: + layout_qualifier uniformopt type_specifier struct_declarator_list ';' + { + void *ctx = state; + ast_fully_specified_type *type = new(ctx) ast_fully_specified_type(); + type->set_location(yylloc); + + type->qualifier = $1; + type->qualifier.flags.q.uniform = true; + type->specifier = $3; + $$ = new(ctx) ast_declarator_list(type); + $$->set_location(yylloc); + $$->ubo_qualifiers_valid = true; + + $$->declarations.push_degenerate_list_at_head(& $4->link); + } + | uniformopt type_specifier struct_declarator_list ';' + { + void *ctx = state; + ast_fully_specified_type *type = new(ctx) ast_fully_specified_type(); + type->set_location(yylloc); + + type->qualifier.flags.q.uniform = true; + type->specifier = $2; + $$ = new(ctx) ast_declarator_list(type); + $$->set_location(yylloc); + $$->ubo_qualifiers_valid = true; + + $$->declarations.push_degenerate_list_at_head(& $3->link); + } + ; + +layout_defaults: + layout_qualifier UNIFORM ';' + { + if (!state->default_uniform_qualifier->merge_qualifier(& @1, state, + $1)) { + YYERROR; + } + } diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp b/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp index 590bb3b78..7533819b6 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp @@ -27,6 +27,7 @@ extern "C" { #include "main/core.h" /* for struct gl_context */ +#include "main/context.h" } #include "ralloc.h" @@ -36,8 +37,9 @@ extern "C" { #include "ir_optimization.h" #include "loop_analysis.h" -_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx, +_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, GLenum target, void *mem_ctx) + : ctx(_ctx) { switch (target) { case GL_VERTEX_SHADER: this->target = vertex_shader; break; @@ -50,7 +52,10 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx, this->symbols = new(mem_ctx) glsl_symbol_table; this->info_log = ralloc_strdup(mem_ctx, ""); this->error = false; - this->loop_or_switch_nesting = NULL; + this->loop_nesting_ast = NULL; + this->switch_state.switch_nesting_ast = NULL; + + this->num_builtins_to_link = 0; /* Set default language version and extensions */ this->language_version = 110; @@ -80,23 +85,11 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx, this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers; - /* Note: Once the OpenGL 3.0 'forward compatible' context or the OpenGL 3.2 - * Core context is supported, this logic will need change. Older versions of - * GLSL are no longer supported outside the compatibility contexts of 3.x. - */ - this->Const.GLSL_100ES = (ctx->API == API_OPENGLES2) - || ctx->Extensions.ARB_ES2_compatibility; - this->Const.GLSL_110 = (ctx->API == API_OPENGL); - this->Const.GLSL_120 = (ctx->API == API_OPENGL) - && (ctx->Const.GLSLVersion >= 120); - this->Const.GLSL_130 = (ctx->API == API_OPENGL) - && (ctx->Const.GLSLVersion >= 130); - const unsigned lowest_version = (ctx->API == API_OPENGLES2) || ctx->Extensions.ARB_ES2_compatibility ? 100 : 110; const unsigned highest_version = - (ctx->API == API_OPENGL) ? ctx->Const.GLSLVersion : 100; + _mesa_is_desktop_gl(ctx) ? ctx->Const.GLSLVersion : 100; char *supported = ralloc_strdup(this, ""); for (unsigned ver = lowest_version; ver <= highest_version; ver += 10) { @@ -111,6 +104,13 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx, } this->supported_version_string = supported; + + if (ctx->Const.ForceGLSLExtensionsWarn) + _mesa_glsl_process_extension("all", NULL, "warn", NULL, this); + + this->default_uniform_qualifier = new(this) ast_type_qualifier(); + this->default_uniform_qualifier->flags.q.shared = 1; + this->default_uniform_qualifier->flags.q.column_major = 1; } const char * @@ -126,24 +126,40 @@ _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target) return "unknown"; } +/* This helper function will append the given message to the shader's + info log and report it via GL_ARB_debug_output. Per that extension, + 'type' is one of the enum values classifying the message, and + 'id' is the implementation-defined ID of the given message. */ +static void +_mesa_glsl_msg(const YYLTYPE *locp, _mesa_glsl_parse_state *state, + GLenum type, GLuint id, const char *fmt, va_list ap) +{ + bool error = (type == GL_DEBUG_TYPE_ERROR_ARB); + + assert(state->info_log != NULL); + + ralloc_asprintf_append(&state->info_log, "%u:%u(%u): %s: ", + locp->source, + locp->first_line, + locp->first_column, + error ? "error" : "warning"); + ralloc_vasprintf_append(&state->info_log, fmt, ap); + + ralloc_strcat(&state->info_log, "\n"); +} void _mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state, const char *fmt, ...) { va_list ap; + GLenum type = GL_DEBUG_TYPE_ERROR_ARB; state->error = true; - assert(state->info_log != NULL); - ralloc_asprintf_append(&state->info_log, "%u:%u(%u): error: ", - locp->source, - locp->first_line, - locp->first_column); va_start(ap, fmt); - ralloc_vasprintf_append(&state->info_log, fmt, ap); + _mesa_glsl_msg(locp, state, type, SHADER_ERROR_UNKNOWN, fmt, ap); va_end(ap); - ralloc_strcat(&state->info_log, "\n"); } @@ -152,16 +168,11 @@ _mesa_glsl_warning(const YYLTYPE *locp, _mesa_glsl_parse_state *state, const char *fmt, ...) { va_list ap; + GLenum type = GL_DEBUG_TYPE_OTHER_ARB; - assert(state->info_log != NULL); - ralloc_asprintf_append(&state->info_log, "%u:%u(%u): warning: ", - locp->source, - locp->first_line, - locp->first_column); va_start(ap, fmt); - ralloc_vasprintf_append(&state->info_log, fmt, ap); + _mesa_glsl_msg(locp, state, type, 0, fmt, ap); va_end(ap); - ralloc_strcat(&state->info_log, "\n"); } @@ -253,6 +264,7 @@ struct _mesa_glsl_extension { static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { /* target availability API availability */ /* name VS GS FS GL ES supported flag */ + EXT(ARB_conservative_depth, false, false, true, true, false, ARB_conservative_depth), EXT(ARB_draw_buffers, false, false, true, true, false, dummy_true), EXT(ARB_draw_instanced, true, false, false, true, false, ARB_draw_instanced), EXT(ARB_explicit_attrib_location, true, false, true, true, false, ARB_explicit_attrib_location), @@ -262,10 +274,14 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { EXT(ARB_shader_texture_lod, true, false, true, true, true, ARB_shader_texture_lod), EXT(EXT_shader_texture_lod, true, false, true, true, true, ARB_shader_texture_lod), EXT(ARB_shader_stencil_export, false, false, true, true, false, ARB_shader_stencil_export), - EXT(AMD_conservative_depth, true, false, true, true, false, AMD_conservative_depth), + EXT(AMD_conservative_depth, false, false, true, true, false, ARB_conservative_depth), EXT(AMD_shader_stencil_export, false, false, true, true, false, ARB_shader_stencil_export), EXT(OES_texture_3D, true, false, true, false, true, EXT_texture3D), - EXT(OES_standard_derivatives, false, false, true, false, true, OES_standard_derivatives), + EXT(OES_EGL_image_external, true, false, true, false, true, OES_EGL_image_external), + EXT(ARB_shader_bit_encoding, true, true, true, true, false, ARB_shader_bit_encoding), + EXT(ARB_uniform_buffer_object, true, false, true, true, false, ARB_uniform_buffer_object), + EXT(OES_standard_derivatives, false, false, true, false, true, OES_standard_derivatives), + EXT(EXT_shadow_samplers, false, false, true, false, true, EXT_shadow_samplers), }; #undef EXT @@ -623,6 +639,7 @@ ast_expression::ast_expression(int oper, this->subexpressions[0] = ex0; this->subexpressions[1] = ex1; this->subexpressions[2] = ex2; + this->non_lvalue_description = NULL; } @@ -704,7 +721,7 @@ ast_declaration::print(void) const } -ast_declaration::ast_declaration(char *identifier, int is_array, +ast_declaration::ast_declaration(const char *identifier, int is_array, ast_expression *array_size, ast_expression *initializer) { @@ -741,6 +758,7 @@ ast_declarator_list::ast_declarator_list(ast_fully_specified_type *type) { this->type = type; this->invariant = false; + this->ubo_qualifiers_valid = false; } void @@ -803,6 +821,106 @@ ast_selection_statement::ast_selection_statement(ast_expression *condition, } +void +ast_switch_statement::print(void) const +{ + printf("switch ( "); + test_expression->print(); + printf(") "); + + body->print(); +} + + +ast_switch_statement::ast_switch_statement(ast_expression *test_expression, + ast_node *body) +{ + this->test_expression = test_expression; + this->body = body; +} + + +void +ast_switch_body::print(void) const +{ + printf("{\n"); + if (stmts != NULL) { + stmts->print(); + } + printf("}\n"); +} + + +ast_switch_body::ast_switch_body(ast_case_statement_list *stmts) +{ + this->stmts = stmts; +} + + +void ast_case_label::print(void) const +{ + if (test_value != NULL) { + printf("case "); + test_value->print(); + printf(": "); + } else { + printf("default: "); + } +} + + +ast_case_label::ast_case_label(ast_expression *test_value) +{ + this->test_value = test_value; +} + + +void ast_case_label_list::print(void) const +{ + foreach_list_const(n, & this->labels) { + ast_node *ast = exec_node_data(ast_node, n, link); + ast->print(); + } + printf("\n"); +} + + +ast_case_label_list::ast_case_label_list(void) +{ +} + + +void ast_case_statement::print(void) const +{ + labels->print(); + foreach_list_const(n, & this->stmts) { + ast_node *ast = exec_node_data(ast_node, n, link); + ast->print(); + printf("\n"); + } +} + + +ast_case_statement::ast_case_statement(ast_case_label_list *labels) +{ + this->labels = labels; +} + + +void ast_case_statement_list::print(void) const +{ + foreach_list_const(n, & this->cases) { + ast_node *ast = exec_node_data(ast_node, n, link); + ast->print(); + } +} + + +ast_case_statement_list::ast_case_statement_list(void) +{ +} + + void ast_iteration_statement::print(void) const { @@ -870,8 +988,8 @@ ast_struct_specifier::print(void) const } -ast_struct_specifier::ast_struct_specifier(char *identifier, - ast_node *declarator_list) +ast_struct_specifier::ast_struct_specifier(const char *identifier, + ast_declarator_list *declarator_list) { if (identifier == NULL) { static unsigned anon_count = 1; @@ -882,8 +1000,27 @@ ast_struct_specifier::ast_struct_specifier(char *identifier, this->declarations.push_degenerate_list_at_head(&declarator_list->link); } +/** + * Do the set of common optimizations passes + * + * \param ir List of instructions to be optimized + * \param linked Is the shader linked? This enables + * optimizations passes that remove code at + * global scope and could cause linking to + * fail. + * \param uniform_locations_assigned Have locations already been assigned for + * uniforms? This prevents the declarations + * of unused uniforms from being removed. + * The setting of this flag only matters if + * \c linked is \c true. + * \param max_unroll_iterations Maximum number of loop iterations to be + * unrolled. Setting to 0 forces all loops + * to be unrolled. + */ bool -do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iterations) +do_common_optimization(exec_list *ir, bool linked, + bool uniform_locations_assigned, + unsigned max_unroll_iterations) { GLboolean progress = GL_FALSE; @@ -892,14 +1029,13 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration if (linked) { progress = do_function_inlining(ir) || progress; progress = do_dead_functions(ir) || progress; + progress = do_structure_splitting(ir) || progress; } - progress = do_structure_splitting(ir) || progress; progress = do_if_simplification(ir) || progress; - progress = do_discard_simplification(ir) || progress; progress = do_copy_propagation(ir) || progress; progress = do_copy_propagation_elements(ir) || progress; if (linked) - progress = do_dead_code(ir) || progress; + progress = do_dead_code(ir, uniform_locations_assigned) || progress; else progress = do_dead_code_unlinked(ir) || progress; progress = do_dead_code_local(ir) || progress; @@ -916,6 +1052,7 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration progress = do_swizzle_swizzle(ir) || progress; progress = do_noop_swizzle(ir) || progress; + progress = optimize_split_arrays(ir, linked) || progress; progress = optimize_redundant_jumps(ir) || progress; loop_state *ls = analyze_loop_variables(ir); diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.h b/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.h index 7847760e8..8d51e0def 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.h +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.h @@ -42,8 +42,22 @@ enum _mesa_glsl_parser_targets { struct gl_context; +struct glsl_switch_state { + /** Temporary variables needed for switch statement. */ + ir_variable *test_var; + ir_variable *is_fallthru_var; + ir_variable *is_break_var; + class ast_switch_statement *switch_nesting_ast; + + /** Table of constant values already used in case labels */ + struct hash_table *labels_ht; + class ast_case_label *previous_default; + + bool is_switch_innermost; // if switch stmt is closest to break, ... +}; + struct _mesa_glsl_parse_state { - _mesa_glsl_parse_state(struct gl_context *ctx, GLenum target, + _mesa_glsl_parse_state(struct gl_context *_ctx, GLenum target, void *mem_ctx); /* Callers of this ralloc-based new need not call delete. It's @@ -63,15 +77,27 @@ struct _mesa_glsl_parse_state { ralloc_free(mem); } + struct gl_context *const ctx; void *scanner; exec_list translation_unit; glsl_symbol_table *symbols; + unsigned num_uniform_blocks; + unsigned uniform_block_array_size; + struct gl_uniform_block *uniform_blocks; + bool es_shader; unsigned language_version; const char *version_string; enum _mesa_glsl_parser_targets target; + /** + * Default uniform layout qualifiers tracked during parsing. + * Currently affects uniform blocks and uniform buffer variables in + * those blocks. + */ + struct ast_type_qualifier *default_uniform_qualifier; + /** * Printable list of GLSL versions supported by the current context * @@ -103,22 +129,6 @@ struct _mesa_glsl_parse_state { /* ARB_draw_buffers */ unsigned MaxDrawBuffers; - - /** - * Set of GLSL versions supported by the current context - * - * Knowing that version X is supported doesn't mean that versions before - * X are also supported. Version 1.00 is only supported in an ES2 - * context or when GL_ARB_ES2_compatibility is supported. In an OpenGL - * 3.0 "forward compatible" context, GLSL 1.10 and 1.20 are \b not - * supported. - */ - /*@{*/ - unsigned GLSL_100ES:1; - unsigned GLSL_110:1; - unsigned GLSL_120:1; - unsigned GLSL_130:1; - /*@}*/ } Const; /** @@ -149,8 +159,9 @@ struct _mesa_glsl_parse_state { bool all_invariant; /** Loop or switch statement containing the current instructions. */ - class ir_instruction *loop_or_switch_nesting; - class ast_iteration_statement *loop_or_switch_nesting_ast; + class ast_iteration_statement *loop_nesting_ast; + + struct glsl_switch_state switch_state; /** List of structures defined in user code. */ const glsl_type **user_structures; @@ -178,14 +189,24 @@ struct _mesa_glsl_parse_state { bool ARB_shader_texture_lod_warn; bool EXT_shader_texture_lod_enable; bool EXT_shader_texture_lod_warn; + bool EXT_shadow_samplers_enable; + bool EXT_shadow_samplers_warn; bool ARB_shader_stencil_export_enable; bool ARB_shader_stencil_export_warn; bool AMD_conservative_depth_enable; bool AMD_conservative_depth_warn; + bool ARB_conservative_depth_enable; + bool ARB_conservative_depth_warn; bool AMD_shader_stencil_export_enable; bool AMD_shader_stencil_export_warn; bool OES_texture_3D_enable; bool OES_texture_3D_warn; + bool OES_EGL_image_external_enable; + bool OES_EGL_image_external_warn; + bool ARB_shader_bit_encoding_enable; + bool ARB_shader_bit_encoding_warn; + bool ARB_uniform_buffer_object_enable; + bool ARB_uniform_buffer_object_warn; bool OES_standard_derivatives_enable; bool OES_standard_derivatives_warn; /*@}*/ @@ -279,7 +300,7 @@ _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target); extern "C" { #endif -extern int preprocess(void *ctx, const char **shader, char **info_log, +extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, int api); extern void _mesa_destroy_shader_compiler(void); diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_types.cpp b/3rdparty/glsl-optimizer/src/glsl/glsl_types.cpp index daf951d87..c67235f34 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_types.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_types.cpp @@ -128,6 +128,34 @@ glsl_type::contains_sampler() const } } +gl_texture_index +glsl_type::sampler_index() const +{ + const glsl_type *const t = (this->is_array()) ? this->fields.array : this; + + assert(t->is_sampler()); + + switch (t->sampler_dimensionality) { + case GLSL_SAMPLER_DIM_1D: + return (t->sampler_array) ? TEXTURE_1D_ARRAY_INDEX : TEXTURE_1D_INDEX; + case GLSL_SAMPLER_DIM_2D: + return (t->sampler_array) ? TEXTURE_2D_ARRAY_INDEX : TEXTURE_2D_INDEX; + case GLSL_SAMPLER_DIM_3D: + return TEXTURE_3D_INDEX; + case GLSL_SAMPLER_DIM_CUBE: + return TEXTURE_CUBE_INDEX; + case GLSL_SAMPLER_DIM_RECT: + return TEXTURE_RECT_INDEX; + case GLSL_SAMPLER_DIM_BUF: + return TEXTURE_BUFFER_INDEX; + case GLSL_SAMPLER_DIM_EXTERNAL: + return TEXTURE_EXTERNAL_INDEX; + default: + assert(!"Should not get here."); + return TEXTURE_BUFFER_INDEX; + } +} + void glsl_type::generate_100ES_types(glsl_symbol_table *symtab) { @@ -141,7 +169,7 @@ glsl_type::generate_100ES_types(glsl_symbol_table *symtab) } void -glsl_type::generate_110_types(glsl_symbol_table *symtab) +glsl_type::generate_110_types(glsl_symbol_table *symtab, bool add_deprecated) { generate_100ES_types(symtab); @@ -149,16 +177,18 @@ glsl_type::generate_110_types(glsl_symbol_table *symtab) Elements(builtin_110_types), false); add_types_to_symbol_table(symtab, &_sampler3D_type, 1, false); - add_types_to_symbol_table(symtab, builtin_110_deprecated_structure_types, - Elements(builtin_110_deprecated_structure_types), - false); + if (add_deprecated) { + add_types_to_symbol_table(symtab, builtin_110_deprecated_structure_types, + Elements(builtin_110_deprecated_structure_types), + false); + } } void -glsl_type::generate_120_types(glsl_symbol_table *symtab) +glsl_type::generate_120_types(glsl_symbol_table *symtab, bool add_deprecated) { - generate_110_types(symtab); + generate_110_types(symtab, add_deprecated); add_types_to_symbol_table(symtab, builtin_120_types, Elements(builtin_120_types), false); @@ -166,9 +196,9 @@ glsl_type::generate_120_types(glsl_symbol_table *symtab) void -glsl_type::generate_130_types(glsl_symbol_table *symtab) +glsl_type::generate_130_types(glsl_symbol_table *symtab, bool add_deprecated) { - generate_120_types(symtab); + generate_120_types(symtab, add_deprecated); add_types_to_symbol_table(symtab, builtin_130_types, Elements(builtin_130_types), false); @@ -176,6 +206,20 @@ glsl_type::generate_130_types(glsl_symbol_table *symtab) } +void +glsl_type::generate_140_types(glsl_symbol_table *symtab) +{ + generate_130_types(symtab, false); + + add_types_to_symbol_table(symtab, builtin_140_types, + Elements(builtin_140_types), false); + + add_types_to_symbol_table(symtab, builtin_EXT_texture_buffer_object_types, + Elements(builtin_EXT_texture_buffer_object_types), + false); +} + + void glsl_type::generate_ARB_texture_rectangle_types(glsl_symbol_table *symtab, bool warn) @@ -203,6 +247,23 @@ glsl_type::generate_OES_texture_3D_types(glsl_symbol_table *symtab, bool warn) } +void +glsl_type::generate_EXT_shadow_samplers_types(glsl_symbol_table *symtab, bool warn) +{ + add_types_to_symbol_table(symtab, &builtin_110_types[2], 1, warn); +} + + + +void +glsl_type::generate_OES_EGL_image_external_types(glsl_symbol_table *symtab, + bool warn) +{ + add_types_to_symbol_table(symtab, builtin_OES_EGL_image_external_types, + Elements(builtin_OES_EGL_image_external_types), + warn); +} + void _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) { @@ -212,20 +273,24 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) glsl_type::generate_100ES_types(state->symbols); break; case 110: - glsl_type::generate_110_types(state->symbols); + glsl_type::generate_110_types(state->symbols, true); break; case 120: - glsl_type::generate_120_types(state->symbols); + glsl_type::generate_120_types(state->symbols, true); break; case 130: - glsl_type::generate_130_types(state->symbols); + glsl_type::generate_130_types(state->symbols, true); + break; + case 140: + glsl_type::generate_140_types(state->symbols); break; default: /* error */ break; } - if (state->ARB_texture_rectangle_enable) { + if (state->ARB_texture_rectangle_enable || + state->language_version >= 140) { glsl_type::generate_ARB_texture_rectangle_types(state->symbols, state->ARB_texture_rectangle_warn); } @@ -238,6 +303,20 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) // These are already included in 130; don't create twice. glsl_type::generate_EXT_texture_array_types(state->symbols, state->EXT_texture_array_warn); + } + + if (state->EXT_shadow_samplers_enable && state->es_shader) { + glsl_type::generate_EXT_shadow_samplers_types(state->symbols, + state->EXT_shadow_samplers_warn); + } + + /* We cannot check for language_version == 100 here because we need the + * types to support fixed-function program generation. But this is fine + * since the extension is never enabled for OpenGL contexts. + */ + if (state->OES_EGL_image_external_enable) { + glsl_type::generate_OES_EGL_image_external_types(state->symbols, + state->OES_EGL_image_external_warn); } } @@ -259,6 +338,29 @@ const glsl_type *glsl_type::get_base_type() const } +const glsl_type *glsl_type::get_scalar_type() const +{ + const glsl_type *type = this; + + /* Handle arrays */ + while (type->base_type == GLSL_TYPE_ARRAY) + type = type->fields.array; + + /* Handle vectors and matrices */ + switch (type->base_type) { + case GLSL_TYPE_UINT: + return uint_type; + case GLSL_TYPE_INT: + return int_type; + case GLSL_TYPE_FLOAT: + return float_type; + default: + /* Handle everything else */ + return type; + } +} + + void _mesa_glsl_release_types(void) { @@ -556,3 +658,228 @@ glsl_type::can_implicitly_convert_to(const glsl_type *desired) const && this->is_integer() && this->vector_elements == desired->vector_elements; } + +unsigned +glsl_type::std140_base_alignment(bool row_major) const +{ + /* (1) If the member is a scalar consuming basic machine units, the + * base alignment is . + * + * (2) If the member is a two- or four-component vector with components + * consuming basic machine units, the base alignment is 2 or + * 4, respectively. + * + * (3) If the member is a three-component vector with components consuming + * basic machine units, the base alignment is 4. + */ + if (this->is_scalar() || this->is_vector()) { + switch (this->vector_elements) { + case 1: + return 4; + case 2: + return 8; + case 3: + case 4: + return 16; + } + } + + /* (4) If the member is an array of scalars or vectors, the base alignment + * and array stride are set to match the base alignment of a single + * array element, according to rules (1), (2), and (3), and rounded up + * to the base alignment of a vec4. The array may have padding at the + * end; the base offset of the member following the array is rounded up + * to the next multiple of the base alignment. + * + * (6) If the member is an array of column-major matrices with + * columns and rows, the matrix is stored identically to a row of + * * column vectors with components each, according to rule + * (4). + * + * (8) If the member is an array of row-major matrices with columns + * and rows, the matrix is stored identically to a row of * + * row vectors with components each, according to rule (4). + * + * (10) If the member is an array of structures, the elements of + * the array are laid out in order, according to rule (9). + */ + if (this->is_array()) { + if (this->fields.array->is_scalar() || + this->fields.array->is_vector() || + this->fields.array->is_matrix()) { + return MAX2(this->fields.array->std140_base_alignment(row_major), 16); + } else { + assert(this->fields.array->is_record()); + return this->fields.array->std140_base_alignment(row_major); + } + } + + /* (5) If the member is a column-major matrix with columns and + * rows, the matrix is stored identically to an array of + * column vectors with components each, according to + * rule (4). + * + * (7) If the member is a row-major matrix with columns and + * rows, the matrix is stored identically to an array of + * row vectors with components each, according to rule (4). + */ + if (this->is_matrix()) { + const struct glsl_type *vec_type, *array_type; + int c = this->matrix_columns; + int r = this->vector_elements; + + if (row_major) { + vec_type = get_instance(GLSL_TYPE_FLOAT, c, 1); + array_type = glsl_type::get_array_instance(vec_type, r); + } else { + vec_type = get_instance(GLSL_TYPE_FLOAT, r, 1); + array_type = glsl_type::get_array_instance(vec_type, c); + } + + return array_type->std140_base_alignment(false); + } + + /* (9) If the member is a structure, the base alignment of the + * structure is , where is the largest base alignment + * value of any of its members, and rounded up to the base + * alignment of a vec4. The individual members of this + * sub-structure are then assigned offsets by applying this set + * of rules recursively, where the base offset of the first + * member of the sub-structure is equal to the aligned offset + * of the structure. The structure may have padding at the end; + * the base offset of the member following the sub-structure is + * rounded up to the next multiple of the base alignment of the + * structure. + */ + if (this->is_record()) { + unsigned base_alignment = 16; + for (unsigned i = 0; i < this->length; i++) { + const struct glsl_type *field_type = this->fields.structure[i].type; + base_alignment = MAX2(base_alignment, + field_type->std140_base_alignment(row_major)); + } + return base_alignment; + } + + assert(!"not reached"); + return -1; +} + +static unsigned +align(unsigned val, unsigned align) +{ + return (val + align - 1) / align * align; +} + +unsigned +glsl_type::std140_size(bool row_major) const +{ + /* (1) If the member is a scalar consuming basic machine units, the + * base alignment is . + * + * (2) If the member is a two- or four-component vector with components + * consuming basic machine units, the base alignment is 2 or + * 4, respectively. + * + * (3) If the member is a three-component vector with components consuming + * basic machine units, the base alignment is 4. + */ + if (this->is_scalar() || this->is_vector()) { + return this->vector_elements * 4; + } + + /* (5) If the member is a column-major matrix with columns and + * rows, the matrix is stored identically to an array of + * column vectors with components each, according to + * rule (4). + * + * (6) If the member is an array of column-major matrices with + * columns and rows, the matrix is stored identically to a row of + * * column vectors with components each, according to rule + * (4). + * + * (7) If the member is a row-major matrix with columns and + * rows, the matrix is stored identically to an array of + * row vectors with components each, according to rule (4). + * + * (8) If the member is an array of row-major matrices with columns + * and rows, the matrix is stored identically to a row of * + * row vectors with components each, according to rule (4). + */ + if (this->is_matrix() || (this->is_array() && + this->fields.array->is_matrix())) { + const struct glsl_type *element_type; + const struct glsl_type *vec_type; + unsigned int array_len; + + if (this->is_array()) { + element_type = this->fields.array; + array_len = this->length; + } else { + element_type = this; + array_len = 1; + } + + if (row_major) { + vec_type = get_instance(GLSL_TYPE_FLOAT, + element_type->matrix_columns, 1); + array_len *= element_type->vector_elements; + } else { + vec_type = get_instance(GLSL_TYPE_FLOAT, + element_type->vector_elements, 1); + array_len *= element_type->matrix_columns; + } + const glsl_type *array_type = glsl_type::get_array_instance(vec_type, + array_len); + + return array_type->std140_size(false); + } + + /* (4) If the member is an array of scalars or vectors, the base alignment + * and array stride are set to match the base alignment of a single + * array element, according to rules (1), (2), and (3), and rounded up + * to the base alignment of a vec4. The array may have padding at the + * end; the base offset of the member following the array is rounded up + * to the next multiple of the base alignment. + * + * (10) If the member is an array of structures, the elements of + * the array are laid out in order, according to rule (9). + */ + if (this->is_array()) { + if (this->fields.array->is_record()) { + return this->length * this->fields.array->std140_size(row_major); + } else { + unsigned element_base_align = + this->fields.array->std140_base_alignment(row_major); + return this->length * MAX2(element_base_align, 16); + } + } + + /* (9) If the member is a structure, the base alignment of the + * structure is , where is the largest base alignment + * value of any of its members, and rounded up to the base + * alignment of a vec4. The individual members of this + * sub-structure are then assigned offsets by applying this set + * of rules recursively, where the base offset of the first + * member of the sub-structure is equal to the aligned offset + * of the structure. The structure may have padding at the end; + * the base offset of the member following the sub-structure is + * rounded up to the next multiple of the base alignment of the + * structure. + */ + if (this->is_record()) { + unsigned size = 0; + for (unsigned i = 0; i < this->length; i++) { + const struct glsl_type *field_type = this->fields.structure[i].type; + unsigned align = field_type->std140_base_alignment(row_major); + size = (size + align - 1) / align * align; + size += field_type->std140_size(row_major); + } + size = align(size, + this->fields.structure[0].type->std140_base_alignment(row_major)); + return size; + } + + assert(!"not reached"); + return -1; +} diff --git a/3rdparty/glsl-optimizer/src/glsl/glsl_types.h b/3rdparty/glsl-optimizer/src/glsl/glsl_types.h index a20ff9375..771291d32 100644 --- a/3rdparty/glsl-optimizer/src/glsl/glsl_types.h +++ b/3rdparty/glsl-optimizer/src/glsl/glsl_types.h @@ -28,22 +28,25 @@ #include #include +#include "main/mtypes.h" /* for gl_texture_index, C++'s enum rules are broken */ +#ifdef __cplusplus extern "C" { -#include "GL/gl.h" -} - -#include "ralloc.h" +#endif struct _mesa_glsl_parse_state; struct glsl_symbol_table; -extern "C" void +extern void _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state); -extern "C" void +extern void _mesa_glsl_release_types(void); +#ifdef __cplusplus +} +#endif + enum glsl_base_type { GLSL_TYPE_UINT = 0, GLSL_TYPE_INT, @@ -62,7 +65,8 @@ enum glsl_sampler_dim { GLSL_SAMPLER_DIM_3D, GLSL_SAMPLER_DIM_CUBE, GLSL_SAMPLER_DIM_RECT, - GLSL_SAMPLER_DIM_BUF + GLSL_SAMPLER_DIM_BUF, + GLSL_SAMPLER_DIM_EXTERNAL }; enum glsl_precision { @@ -72,6 +76,10 @@ enum glsl_precision { glsl_precision_undefined, }; +#ifdef __cplusplus +#include "../mesa/main/glminimal.h" +#include "ralloc.h" + struct glsl_type { GLenum gl_type; glsl_base_type base_type; @@ -151,6 +159,8 @@ struct glsl_type { static const glsl_type *const error_type; static const glsl_type *const void_type; static const glsl_type *const int_type; + static const glsl_type *const ivec2_type; + static const glsl_type *const ivec3_type; static const glsl_type *const ivec4_type; static const glsl_type *const uint_type; static const glsl_type *const uvec2_type; @@ -161,6 +171,9 @@ struct glsl_type { static const glsl_type *const vec3_type; static const glsl_type *const vec4_type; static const glsl_type *const bool_type; + static const glsl_type *const bvec2_type; + static const glsl_type *const bvec3_type; + static const glsl_type *const bvec4_type; static const glsl_type *const mat2_type; static const glsl_type *const mat2x3_type; static const glsl_type *const mat2x4_type; @@ -183,6 +196,17 @@ struct glsl_type { */ const glsl_type *get_base_type() const; + /** + * Get the basic scalar type which this type aggregates. + * + * If the type is a numeric or boolean scalar, vector, or matrix, or an + * array of any of those, this function gets the scalar type of the + * individual components. For structs and arrays of structs, this function + * returns the struct type. For samplers and arrays of samplers, this + * function returns the sampler type. + */ + const glsl_type *get_scalar_type() const; + /** * Query the type of elements in an array * @@ -230,6 +254,19 @@ struct glsl_type { */ unsigned component_slots() const; + /** + * Alignment in bytes of the start of this type in a std140 uniform + * block. + */ + unsigned std140_base_alignment(bool row_major) const; + + /** Size in bytes of this type in a std140 uniform block. + * + * Note that this is not GL_UNIFORM_SIZE (which is the number of + * elements in the array) + */ + unsigned std140_size(bool row_major) const; + /** * \brief Can this type be implicitly converted to another? * @@ -342,6 +379,11 @@ struct glsl_type { */ bool contains_sampler() const; + /** + * Get the Mesa texture target index for a sampler type. + */ + gl_texture_index sampler_index() const; + /** * Query whether or not a type is an array */ @@ -483,9 +525,11 @@ private: static const glsl_type builtin_110_types[]; static const glsl_type builtin_120_types[]; static const glsl_type builtin_130_types[]; + static const glsl_type builtin_140_types[]; static const glsl_type builtin_ARB_texture_rectangle_types[]; static const glsl_type builtin_EXT_texture_array_types[]; static const glsl_type builtin_EXT_texture_buffer_object_types[]; + static const glsl_type builtin_OES_EGL_image_external_types[]; /*@}*/ /** @@ -498,12 +542,15 @@ private: */ /*@{*/ static void generate_100ES_types(glsl_symbol_table *); - static void generate_110_types(glsl_symbol_table *); - static void generate_120_types(glsl_symbol_table *); - static void generate_130_types(glsl_symbol_table *); + static void generate_110_types(glsl_symbol_table *, bool add_deprecated); + static void generate_120_types(glsl_symbol_table *, bool add_deprecated); + static void generate_130_types(glsl_symbol_table *, bool add_deprecated); + static void generate_140_types(glsl_symbol_table *); static void generate_ARB_texture_rectangle_types(glsl_symbol_table *, bool); static void generate_EXT_texture_array_types(glsl_symbol_table *, bool); static void generate_OES_texture_3D_types(glsl_symbol_table *, bool); + static void generate_EXT_shadow_samplers_types(glsl_symbol_table *, bool); + static void generate_OES_EGL_image_external_types(glsl_symbol_table *, bool); /*@}*/ /** @@ -525,4 +572,6 @@ struct glsl_struct_field { glsl_precision precision; }; +#endif /* __cplusplus */ + #endif /* GLSL_TYPES_H */ diff --git a/3rdparty/glsl-optimizer/src/glsl/hir_field_selection.cpp b/3rdparty/glsl-optimizer/src/glsl/hir_field_selection.cpp index 3c33127b5..260b415a8 100644 --- a/3rdparty/glsl-optimizer/src/glsl/hir_field_selection.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/hir_field_selection.cpp @@ -98,5 +98,5 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr, expr->primary_expression.identifier); } - return result ? result : ir_call::get_error_instruction(ctx); + return result ? result : ir_rvalue::error_value(ctx); } diff --git a/3rdparty/glsl-optimizer/src/glsl/ir.cpp b/3rdparty/glsl-optimizer/src/glsl/ir.cpp index 6ea946113..fc00be008 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir.cpp @@ -59,6 +59,11 @@ bool ir_rvalue::is_negative_one() const return false; } +bool ir_rvalue::is_basis() const +{ + return false; +} + /** * Modify the swizzle make to move one component to another * @@ -233,6 +238,23 @@ ir_expression::ir_expression(int op, const struct glsl_type *type, this->operands[3] = NULL; } +ir_expression::ir_expression(int op, const struct glsl_type *type, + ir_rvalue *op0, ir_rvalue *op1, ir_rvalue *op2) +: ir_rvalue(higher_precision(op0,op1)) +{ + assert( + ((op1 == NULL) && (get_num_operands(ir_expression_operation(op)) == 1)) || + ((op2 == NULL) && (get_num_operands(ir_expression_operation(op)) == 2)) || + (get_num_operands(ir_expression_operation(op)) == 3)); + this->ir_type = ir_type_expression; + this->type = type; + this->operation = ir_expression_operation(op); + this->operands[0] = op0; + this->operands[1] = op1; + this->operands[2] = op2; + this->operands[3] = NULL; +} + ir_expression::ir_expression(int op, const struct glsl_type *type, ir_rvalue *op0, ir_rvalue *op1, ir_rvalue *op2, ir_rvalue *op3) @@ -269,6 +291,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) case ir_unop_rcp: case ir_unop_rsq: case ir_unop_sqrt: + case ir_unop_normalize: case ir_unop_exp: case ir_unop_log: case ir_unop_exp2: @@ -290,6 +313,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) case ir_unop_f2i: case ir_unop_b2i: case ir_unop_u2i: + case ir_unop_bitcast_f2i: this->type = glsl_type::get_instance(GLSL_TYPE_INT, op0->type->vector_elements, 1); break; @@ -297,6 +321,8 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) case ir_unop_b2f: case ir_unop_i2f: case ir_unop_u2f: + case ir_unop_bitcast_i2f: + case ir_unop_bitcast_u2f: this->type = glsl_type::get_instance(GLSL_TYPE_FLOAT, op0->type->vector_elements, 1); break; @@ -308,6 +334,8 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) break; case ir_unop_i2u: + case ir_unop_f2u: + case ir_unop_bitcast_f2u: this->type = glsl_type::get_instance(GLSL_TYPE_UINT, op0->type->vector_elements, 1); break; @@ -405,6 +433,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1) } } + unsigned int ir_expression::get_num_operands(ir_expression_operation op) { @@ -415,6 +444,9 @@ ir_expression::get_num_operands(ir_expression_operation op) if (op <= ir_last_binop) return 2; + + if (op <= ir_last_ternop) + return 3; if (op == ir_quadop_vector) return 4; @@ -432,11 +464,13 @@ static const char *const operator_strs[] = { "rcp", "rsq", "sqrt", + "normalize", "exp", "log", "exp2", "log2", "f2i", + "f2u", "i2f", "f2b", "b2f", @@ -445,6 +479,10 @@ static const char *const operator_strs[] = { "u2f", "i2u", "u2i", + "bitcast_i2f", + "bitcast_f2i", + "bitcast_u2f", + "bitcast_f2u", "any", "trunc", "ceil", @@ -483,6 +521,9 @@ static const char *const operator_strs[] = { "min", "max", "pow", + "ubo_load", + "clamp", + "mix", "vector", }; @@ -742,12 +783,27 @@ ir_constant::ir_constant(const struct glsl_type *type, exec_list *value_list) ir_constant * ir_constant::zero(void *mem_ctx, const glsl_type *type) { - assert(type->is_numeric() || type->is_boolean()); + assert(type->is_scalar() || type->is_vector() || type->is_matrix() + || type->is_record() || type->is_array()); ir_constant *c = new(mem_ctx) ir_constant; c->type = type; memset(&c->value, 0, sizeof(c->value)); + if (type->is_array()) { + c->array_elements = ralloc_array(c, ir_constant *, type->length); + + for (unsigned i = 0; i < type->length; i++) + c->array_elements[i] = ir_constant::zero(c, type->element_type()); + } + + if (type->is_record()) { + for (unsigned i = 0; i < type->length; i++) { + ir_constant *comp = ir_constant::zero(mem_ctx, type->fields.structure[i].type); + c->components.push_tail(comp); + } + } + return c; } @@ -867,6 +923,95 @@ ir_constant::get_record_field(const char *name) return (ir_constant *) node; } +void +ir_constant::copy_offset(ir_constant *src, int offset) +{ + switch (this->type->base_type) { + case GLSL_TYPE_UINT: + case GLSL_TYPE_INT: + case GLSL_TYPE_FLOAT: + case GLSL_TYPE_BOOL: { + unsigned int size = src->type->components(); + assert (size <= this->type->components() - offset); + for (unsigned int i=0; itype->base_type) { + case GLSL_TYPE_UINT: + value.u[i+offset] = src->get_uint_component(i); + break; + case GLSL_TYPE_INT: + value.i[i+offset] = src->get_int_component(i); + break; + case GLSL_TYPE_FLOAT: + value.f[i+offset] = src->get_float_component(i); + break; + case GLSL_TYPE_BOOL: + value.b[i+offset] = src->get_bool_component(i); + break; + default: // Shut up the compiler + break; + } + } + break; + } + + case GLSL_TYPE_STRUCT: { + assert (src->type == this->type); + this->components.make_empty(); + foreach_list(node, &src->components) { + ir_constant *const orig = (ir_constant *) node; + + this->components.push_tail(orig->clone(this, NULL)); + } + break; + } + + case GLSL_TYPE_ARRAY: { + assert (src->type == this->type); + for (unsigned i = 0; i < this->type->length; i++) { + this->array_elements[i] = src->array_elements[i]->clone(this, NULL); + } + break; + } + + default: + assert(!"Should not get here."); + break; + } +} + +void +ir_constant::copy_masked_offset(ir_constant *src, int offset, unsigned int mask) +{ + assert (!type->is_array() && !type->is_record()); + + if (!type->is_vector() && !type->is_matrix()) { + offset = 0; + mask = 1; + } + + int id = 0; + for (int i=0; i<4; i++) { + if (mask & (1 << i)) { + switch (this->type->base_type) { + case GLSL_TYPE_UINT: + value.u[i+offset] = src->get_uint_component(id++); + break; + case GLSL_TYPE_INT: + value.i[i+offset] = src->get_int_component(id++); + break; + case GLSL_TYPE_FLOAT: + value.f[i+offset] = src->get_float_component(id++); + break; + case GLSL_TYPE_BOOL: + value.b[i+offset] = src->get_bool_component(id++); + break; + default: + assert(!"Should not get here."); + return; + } + } + } +} bool ir_constant::has_value(const ir_constant *c) const @@ -1039,6 +1184,49 @@ ir_constant::is_negative_one() const return true; } +bool +ir_constant::is_basis() const +{ + if (!this->type->is_scalar() && !this->type->is_vector()) + return false; + + if (this->type->is_boolean()) + return false; + + unsigned ones = 0; + for (unsigned c = 0; c < this->type->vector_elements; c++) { + switch (this->type->base_type) { + case GLSL_TYPE_FLOAT: + if (this->value.f[c] == 1.0) + ones++; + else if (this->value.f[c] != 0.0) + return false; + break; + case GLSL_TYPE_INT: + if (this->value.i[c] == 1) + ones++; + else if (this->value.i[c] != 0) + return false; + break; + case GLSL_TYPE_UINT: + if (int(this->value.u[c]) == 1) + ones++; + else if (int(this->value.u[c]) != 0) + return false; + break; + default: + /* The only other base types are structures, arrays, samplers, and + * booleans. Samplers cannot be constants, and the others should + * have been filtered out above. + */ + assert(!"Should not get here."); + return false; + } + } + + return ones == 1; +} + ir_loop::ir_loop() { this->ir_type = ir_type_loop; @@ -1053,9 +1241,11 @@ ir_loop::ir_loop() ir_dereference_variable::ir_dereference_variable(ir_variable *var) : ir_dereference(precision_from_ir(var)) { + assert(var != NULL); + this->ir_type = ir_type_dereference_variable; this->var = var; - this->type = (var != NULL) ? var->type : glsl_type::error_type; + this->type = var->type; } @@ -1084,19 +1274,18 @@ ir_dereference_array::ir_dereference_array(ir_variable *var, void ir_dereference_array::set_array(ir_rvalue *value) { + assert(value != NULL); + this->array = value; - this->type = glsl_type::error_type; - if (this->array != NULL) { - const glsl_type *const vt = this->array->type; + const glsl_type *const vt = this->array->type; - if (vt->is_array()) { - type = vt->element_type(); - } else if (vt->is_matrix()) { - type = vt->column_type(); - } else if (vt->is_vector()) { - type = vt->get_base_type(); - } + if (vt->is_array()) { + type = vt->element_type(); + } else if (vt->is_matrix()) { + type = vt->column_type(); + } else if (vt->is_vector()) { + type = vt->get_base_type(); } } @@ -1105,11 +1294,12 @@ ir_dereference_record::ir_dereference_record(ir_rvalue *value, const char *field) : ir_dereference(precision_from_ir(value)) { + assert(value != NULL); + this->ir_type = ir_type_dereference_record; this->record = value; this->field = ralloc_strdup(this, field); - this->type = (this->record != NULL) - ? this->record->type->field_type(field) : glsl_type::error_type; + this->type = this->record->type->field_type(field); if (this->record) this->precision = this->record->type->field_precision(field); } @@ -1124,8 +1314,7 @@ ir_dereference_record::ir_dereference_record(ir_variable *var, this->ir_type = ir_type_dereference_record; this->record = new(ctx) ir_dereference_variable(var); this->field = ralloc_strdup(this, field); - this->type = (this->record != NULL) - ? this->record->type->field_type(field) : glsl_type::error_type; + this->type = this->record->type->field_type(field); if (this->record) this->precision = this->record->type->field_precision(field); } @@ -1140,9 +1329,6 @@ ir_dereference::is_lvalue() const if ((var == NULL) || var->read_only) return false; - if (this->type->is_array() && !var->array_lvalue) - return false; - /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec: * * "Samplers cannot be treated as l-values; hence cannot be used @@ -1156,7 +1342,7 @@ ir_dereference::is_lvalue() const } -const char *tex_opcode_strs[] = { "tex", "txb", "txl", "txd", "txf" }; +static const char *tex_opcode_strs[] = { "tex", "txb", "txl", "txd", "txf", "txs" }; const char *ir_texture::opcode_string() { @@ -1185,11 +1371,15 @@ ir_texture::set_sampler(ir_dereference *sampler, const glsl_type *type) this->sampler = sampler; this->type = type; - assert(sampler->type->sampler_type == (int) type->base_type); - if (sampler->type->sampler_shadow) - assert(type->vector_elements == 4 || type->vector_elements == 1); - else - assert(type->vector_elements == 4); + if (this->op == ir_txs) { + assert(type->base_type == GLSL_TYPE_INT); + } else { + assert(sampler->type->sampler_type == (int) type->base_type); + if (sampler->type->sampler_shadow) + assert(type->vector_elements == 4 || type->vector_elements == 1); + else + assert(type->vector_elements == 4); + } } @@ -1354,15 +1544,18 @@ ir_swizzle::variable_referenced() const ir_variable::ir_variable(const struct glsl_type *type, const char *name, ir_variable_mode mode, glsl_precision precision) : max_array_access(0), read_only(false), centroid(false), invariant(false), - mode(mode), interpolation(ir_var_smooth), precision(precision), array_lvalue(false) + mode(mode), precision(precision), interpolation(INTERP_QUALIFIER_NONE) { this->ir_type = ir_type_variable; this->type = type; this->name = ralloc_strdup(this, name); this->explicit_location = false; + this->has_initializer = false; this->location = -1; + this->uniform_block = -1; this->warn_extension = NULL; this->constant_value = NULL; + this->constant_initializer = NULL; this->origin_upper_left = false; this->pixel_center_integer = false; this->depth_layout = ir_depth_layout_none; @@ -1377,20 +1570,29 @@ const char * ir_variable::interpolation_string() const { switch (this->interpolation) { - case ir_var_smooth: return "smooth"; - case ir_var_flat: return "flat"; - case ir_var_noperspective: return "noperspective"; + case INTERP_QUALIFIER_NONE: return "no"; + case INTERP_QUALIFIER_SMOOTH: return "smooth"; + case INTERP_QUALIFIER_FLAT: return "flat"; + case INTERP_QUALIFIER_NOPERSPECTIVE: return "noperspective"; } assert(!"Should not get here."); return ""; } -unsigned -ir_variable::component_slots() const + +glsl_interp_qualifier +ir_variable::determine_interpolation_mode(bool flat_shade) { - /* FINISHME: Sparsely accessed arrays require fewer slots. */ - return this->type->component_slots(); + if (this->interpolation != INTERP_QUALIFIER_NONE) + return (glsl_interp_qualifier) this->interpolation; + int location = this->location; + bool is_gl_Color = + location == FRAG_ATTRIB_COL0 || location == FRAG_ATTRIB_COL1; + if (flat_shade && is_gl_Color) + return INTERP_QUALIFIER_FLAT; + else + return INTERP_QUALIFIER_SMOOTH; } @@ -1399,6 +1601,7 @@ ir_function_signature::ir_function_signature(const glsl_type *return_type, glsl_ { this->ir_type = ir_type_function_signature; this->is_builtin = false; + this->origin = NULL; } @@ -1481,23 +1684,15 @@ ir_function::has_user_signature() } -ir_call * -ir_call::get_error_instruction(void *ctx) +ir_rvalue * +ir_rvalue::error_value(void *mem_ctx) { - ir_call *call = new(ctx) ir_call; + ir_rvalue *v = new(mem_ctx) ir_rvalue(glsl_precision_undefined); - call->type = glsl_type::error_type; - return call; + v->type = glsl_type::error_type; + return v; } -void -ir_call::set_callee(ir_function_signature *sig) -{ - assert((this->type == NULL) || (this->type == sig->return_type)); - - this->callee = sig; - this->precision = sig->precision; -} void visit_exec_list(exec_list *list, ir_visitor *visitor) @@ -1516,6 +1711,9 @@ steal_memory(ir_instruction *ir, void *new_ctx) if (var != NULL && var->constant_value != NULL) steal_memory(var->constant_value, ir); + if (var != NULL && var->constant_initializer != NULL) + steal_memory(var->constant_initializer, ir); + /* The components of aggregate constants are not visited by the normal * visitor, so steal their values by hand. */ @@ -1556,6 +1754,9 @@ precision_from_ir (ir_instruction* ir) ir_rvalue* rv = ir->as_rvalue(); if (rv) return rv->get_precision(); + ir_call* fcall = ir->as_call(); + if (fcall && fcall->return_deref) + return fcall->return_deref->get_precision(); if (ir->ir_type == ir_type_function_signature) { ir_function_signature* sig = (ir_function_signature*)ir; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir.h b/3rdparty/glsl-optimizer/src/glsl/ir.h index 774ef5ec0..f0580bcff 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir.h @@ -34,6 +34,7 @@ #include "list.h" #include "ir_visitor.h" #include "ir_hierarchical_visitor.h" +#include "main/mtypes.h" #include "main/macros.h" /** @@ -89,7 +90,16 @@ enum ir_node_type { class ir_instruction : public exec_node { public: enum ir_node_type ir_type; - const struct glsl_type *type; + + /** + * GCC 4.7+ and clang warn when deleting an ir_instruction unless + * there's a virtual destructor present. Because we almost + * universally use ralloc for our memory management of + * ir_instructions, the destructor doesn't need to do any work. + */ + virtual ~ir_instruction() + { + } /** ir_print_visitor helper for debugging. */ void print(void) const; @@ -128,16 +138,27 @@ protected: ir_instruction() { ir_type = ir_type_unset; - type = NULL; } }; +/** + * The base class for all "values"/expression trees. + */ class ir_rvalue : public ir_instruction { public: - virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const = 0; + const struct glsl_type *type; - virtual ir_constant *constant_expression_value() = 0; + virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const; + + virtual void accept(ir_visitor *v) + { + v->visit(this); + } + + virtual ir_visitor_status accept(ir_hierarchical_visitor *); + + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual ir_rvalue * as_rvalue() { @@ -185,7 +206,8 @@ public: * for vector and scalar types that have all elements set to the value * zero (or \c false for booleans). * - * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one + * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one, + * ir_constant::is_basis */ virtual bool is_zero() const; @@ -197,7 +219,8 @@ public: * for vector and scalar types that have all elements set to the value * one (or \c true for booleans). * - * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one + * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one, + * ir_constant::is_basis */ virtual bool is_one() const; @@ -207,12 +230,35 @@ public: * The base implementation of this function always returns \c false. The * \c ir_constant class over-rides this function to return \c true \b only * for vector and scalar types that have all elements set to the value - * negative one. For boolean times, the result is always \c false. + * negative one. For boolean types, the result is always \c false. * * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one + * ir_constant::is_basis */ virtual bool is_negative_one() const; + /** + * Determine if an r-value is a basis vector + * + * The base implementation of this function always returns \c false. The + * \c ir_constant class over-rides this function to return \c true \b only + * for vector and scalar types that have one element set to the value one, + * and the other elements set to the value zero. For boolean types, the + * result is always \c false. + * + * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one, + * is_constant::is_negative_one + */ + virtual bool is_basis() const; + + + /** + * Return a generic value of error_type. + * + * Allocation will be performed with 'mem_ctx' as ralloc owner. + */ + static ir_rvalue *error_value(void *mem_ctx); + protected: ir_rvalue(glsl_precision precision); @@ -234,16 +280,10 @@ enum ir_variable_mode { ir_var_temporary /**< Temporary variable generated during compilation. */ }; -enum ir_variable_interpolation { - ir_var_smooth = 0, - ir_var_flat, - ir_var_noperspective -}; - /** * \brief Layout qualifiers for gl_FragDepth. * - * The AMD_conservative_depth extension allows gl_FragDepth to be redeclared + * The AMD/ARB_conservative_depth extensions allow gl_FragDepth to be redeclared * with a layout qualifier. */ enum ir_depth_layout { @@ -296,20 +336,32 @@ public: * \return The string that would be used in a shader to specify \c * mode will be returned. * + * This function is used to generate error messages of the form "shader + * uses %s interpolation qualifier", so in the case where there is no + * interpolation qualifier, it returns "no". + * * This function should only be used on a shader input or output variable. */ const char *interpolation_string() const; /** - * Calculate the number of slots required to hold this variable + * Determine how this variable should be interpolated based on its + * interpolation qualifier (if present), whether it is gl_Color or + * gl_SecondaryColor, and whether flatshading is enabled in the current GL + * state. * - * This is used to determine how many uniform or varying locations a variable - * occupies. The count is in units of floating point components. + * The return value will always be either INTERP_QUALIFIER_SMOOTH, + * INTERP_QUALIFIER_NOPERSPECTIVE, or INTERP_QUALIFIER_FLAT. */ - unsigned component_slots() const; + glsl_interp_qualifier determine_interpolation_mode(bool flat_shade); /** - * Delcared name of the variable + * Declared type of the variable + */ + const struct glsl_type *type; + + /** + * Declared name of the variable */ const char *name; @@ -336,9 +388,22 @@ public: * Several GLSL semantic checks require knowledge of whether or not a * variable has been used. For example, it is an error to redeclare a * variable as invariant after it has been used. + * + * This is only maintained in the ast_to_hir.cpp path, not in + * Mesa's fixed function or ARB program paths. */ unsigned used:1; + /** + * Has this variable been statically assigned? + * + * This answers whether the variable was assigned in any path of + * the shader during ast_to_hir. This doesn't answer whether it is + * still written after dead code removal, nor is it maintained in + * non-ast_to_hir.cpp (GLSL parsing) paths. + */ + unsigned assigned:1; + /** * Storage class of the variable. * @@ -355,14 +420,6 @@ public: unsigned precision:2; - /** - * Flag that the whole array is assignable - * - * In GLSL 1.20 and later whole arrays are assignable (and comparable for - * equality). This flag enables this behavior. - */ - unsigned array_lvalue:1; - /** * \name ARB_fragment_coord_conventions * @{ @@ -371,6 +428,24 @@ public: unsigned pixel_center_integer:1; /*@}*/ + /** + * Was the location explicitly set in the shader? + * + * If the location is explicitly set in the shader, it \b cannot be changed + * by the linker or by the API (e.g., calls to \c glBindAttribLocation have + * no effect). + */ + unsigned explicit_location:1; + unsigned explicit_index:1; + + /** + * Does this variable have an initializer? + * + * This is used by the linker to cross-validiate initializers of global + * variables. + */ + unsigned has_initializer:1; + /** * \brief Layout qualifier for gl_FragDepth. * @@ -379,15 +454,6 @@ public: */ ir_depth_layout depth_layout; - /** - * Was the location explicitly set in the shader? - * - * If the location is explicitly set in the shader, it \b cannot be changed - * by the linker or by the API (e.g., calls to \c glBindAttribLocation have - * no effect). - */ - unsigned explicit_location:1; - /** * Storage location of the base of this variable * @@ -397,7 +463,8 @@ public: * - Vertex shader output: one of the values from \c gl_vert_result. * - Fragment shader input: one of the values from \c gl_frag_attrib. * - Fragment shader output: one of the values from \c gl_frag_result. - * - Uniforms: Per-stage uniform slot number. + * - Uniforms: Per-stage uniform slot number for default uniform block. + * - Uniforms: Index within the uniform block definition for UBO members. * - Other: This field is not currently used. * * If the variable is a uniform, shader input, or shader output, and the @@ -405,6 +472,21 @@ public: */ int location; + /** + * Uniform block number for uniforms. + * + * This index is into the shader's list of uniform blocks, not the + * linked program's merged list. + * + * If the variable is not in a uniform block, the value will be -1. + */ + int uniform_block; + + /** + * output index for dual source blending. + */ + int index; + /** * Built-in state that backs this uniform * @@ -430,6 +512,16 @@ public: * Value assigned in the initializer of a variable declared "const" */ ir_constant *constant_value; + + /** + * Constant expression assigned in the initializer of the variable + * + * \warning + * This field and \c ::constant_value are distinct. Even if the two fields + * refer to constants with the same value, they must point to separate + * objects. + */ + ir_constant *constant_initializer; }; @@ -457,6 +549,13 @@ public: virtual ir_visitor_status accept(ir_hierarchical_visitor *); + /** + * Attempt to evaluate this function as a constant expression, + * given a list of the actual parameters and the variable context. + * Returns NULL for non-built-ins. + */ + ir_constant *constant_expression_value(exec_list *actual_parameters, struct hash_table *variable_context); + /** * Get the name of the function for which this is a signature */ @@ -521,7 +620,25 @@ private: /** Function of which this signature is one overload. */ class ir_function *_function; + /** Function signature of which this one is a prototype clone */ + const ir_function_signature *origin; + friend class ir_function; + + /** + * Helper function to run a list of instructions for constant + * expression evaluation. + * + * The hash table represents the values of the visible variables. + * There are no scoping issues because the table is indexed on + * ir_variable pointers, not variable names. + * + * Returns false if the expression is not constant, true otherwise, + * and the value in *result if result is non-NULL. + */ + bool constant_expression_evaluate_expression_list(const struct exec_list &body, + struct hash_table *variable_context, + ir_constant **result); }; @@ -562,6 +679,13 @@ public: return signatures.iterator(); } + /** + * Find a signature that matches a set of actual parameters, taking implicit + * conversions into account. Also flags whether the match was exact. + */ + ir_function_signature *matching_signature(const exec_list *actual_param, + bool *match_is_exact); + /** * Find a signature that matches a set of actual parameters, taking implicit * conversions into account. @@ -706,7 +830,7 @@ public: virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual void accept(ir_visitor *v) { @@ -788,19 +912,25 @@ enum ir_expression_operation { ir_unop_rcp, ir_unop_rsq, ir_unop_sqrt, - ir_unop_exp, /**< Log base e on gentype */ - ir_unop_log, /**< Natural log on gentype */ + ir_unop_normalize, + ir_unop_exp, /**< Log base e on gentype */ + ir_unop_log, /**< Natural log on gentype */ ir_unop_exp2, ir_unop_log2, - ir_unop_f2i, /**< Float-to-integer conversion. */ - ir_unop_i2f, /**< Integer-to-float conversion. */ - ir_unop_f2b, /**< Float-to-boolean conversion */ - ir_unop_b2f, /**< Boolean-to-float conversion */ - ir_unop_i2b, /**< int-to-boolean conversion */ - ir_unop_b2i, /**< Boolean-to-int conversion */ - ir_unop_u2f, /**< Unsigned-to-float conversion. */ - ir_unop_i2u, /**< Integer-to-unsigned conversion. */ - ir_unop_u2i, /**< Unsigned-to-integer conversion. */ + ir_unop_f2i, /**< Float-to-integer conversion. */ + ir_unop_f2u, /**< Float-to-unsigned conversion. */ + ir_unop_i2f, /**< Integer-to-float conversion. */ + ir_unop_f2b, /**< Float-to-boolean conversion */ + ir_unop_b2f, /**< Boolean-to-float conversion */ + ir_unop_i2b, /**< int-to-boolean conversion */ + ir_unop_b2i, /**< Boolean-to-int conversion */ + ir_unop_u2f, /**< Unsigned-to-float conversion. */ + ir_unop_i2u, /**< Integer-to-unsigned conversion. */ + ir_unop_u2i, /**< Unsigned-to-integer conversion. */ + ir_unop_bitcast_i2f, /**< Bit-identical int-to-float "conversion" */ + ir_unop_bitcast_f2i, /**< Bit-identical float-to-int "conversion" */ + ir_unop_bitcast_u2f, /**< Bit-identical uint-to-float "conversion" */ + ir_unop_bitcast_f2u, /**< Bit-identical float-to-uint "conversion" */ ir_unop_any, /** @@ -898,17 +1028,29 @@ enum ir_expression_operation { ir_binop_pow, + /** + * Load a value the size of a given GLSL type from a uniform block. + * + * operand0 is the ir_constant uniform block index in the linked shader. + * operand1 is a byte offset within the uniform block. + */ + ir_binop_ubo_load, + /** * A sentinel marking the last of the binary operations. */ - ir_last_binop = ir_binop_pow, + ir_last_binop = ir_binop_ubo_load, + ir_ternop_clamp, + ir_ternop_mix, + ir_last_ternop = ir_ternop_mix, + ir_quadop_vector, /** * A sentinel marking the last of all operations. */ - ir_last_opcode = ir_last_binop + ir_last_opcode = ir_quadop_vector }; class ir_expression : public ir_rvalue { @@ -925,7 +1067,13 @@ public: ir_expression(int op, const struct glsl_type *type, ir_rvalue *, ir_rvalue *); ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1); - + + /** + * Constructor for ternary operation expressions + */ + ir_expression(int op, const struct glsl_type *type, + ir_rvalue *op0, ir_rvalue *op1, ir_rvalue *op2); + /** * Constructor for quad operator expressions */ @@ -942,10 +1090,14 @@ public: /** * Attempt to constant-fold the expression * + * The "variable_context" hash table links ir_variable * to ir_constant * + * that represent the variables' values. \c NULL represents an empty + * context. + * * If the expression cannot be constant folded, this method will return * \c NULL. */ - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); /** * Determine the number of operands used by an expression @@ -990,23 +1142,25 @@ public: /** - * IR instruction representing a function call + * HIR instruction representing a high-level function call, containing a list + * of parameters and returning a value in the supplied temporary. */ -class ir_call : public ir_rvalue { +class ir_call : public ir_instruction { public: - ir_call(ir_function_signature *callee, exec_list *actual_parameters) - : ir_rvalue(callee->precision), callee(callee) + ir_call(ir_function_signature *callee, + ir_dereference_variable *return_deref, + exec_list *actual_parameters) + : return_deref(return_deref), callee(callee) { ir_type = ir_type_call; assert(callee->return_type != NULL); - type = callee->return_type; actual_parameters->move_nodes_to(& this->actual_parameters); this->use_builtin = callee->is_builtin; } virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual ir_call *as_call() { @@ -1020,13 +1174,6 @@ public: virtual ir_visitor_status accept(ir_hierarchical_visitor *); - /** - * Get a generic ir_call object when an error occurs - * - * Any allocation will be performed with 'ctx' as ralloc owner. - */ - static ir_call *get_error_instruction(void *ctx); - /** * Get an iterator for the set of acutal parameters */ @@ -1043,39 +1190,28 @@ public: return callee->function_name(); } - /** - * Get the function signature bound to this function call - */ - ir_function_signature *get_callee() - { - return callee; - } - - /** - * Set the function call target - */ - void set_callee(ir_function_signature *sig); - /** * Generates an inline version of the function before @ir, - * returning the return value of the function. + * storing the return value in return_deref. */ - ir_rvalue *generate_inline(ir_instruction *ir, ir_function_signature* parent); + void generate_inline(ir_instruction *ir); + + /** + * Storage for the function's return value. + * This must be NULL if the return type is void. + */ + ir_dereference_variable *return_deref; + + /** + * The specific function signature being called. + */ + ir_function_signature *callee; /* List of ir_rvalue of paramaters passed in this call. */ exec_list actual_parameters; /** Should this call only bind to a built-in function? */ bool use_builtin; - -private: - ir_call() - : ir_rvalue(glsl_precision_undefined), callee(NULL) - { - this->ir_type = ir_type_call; - } - - ir_function_signature *callee; }; @@ -1149,7 +1285,6 @@ public: { this->ir_type = ir_type_loop_jump; this->mode = mode; - this->loop = loop; } virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const; @@ -1173,9 +1308,6 @@ public: /** Mode selector for the jump instruction. */ enum jump_mode mode; -private: - /** Loop containing this break instruction. */ - ir_loop *loop; }; /** @@ -1222,7 +1354,8 @@ enum ir_texture_opcode { ir_txb, /**< Texture look-up with LOD bias */ ir_txl, /**< Texture look-up with explicit LOD */ ir_txd, /**< Texture look-up with partial derivatvies */ - ir_txf /**< Texel fetch with explicit LOD */ + ir_txf, /**< Texel fetch with explicit LOD */ + ir_txs /**< Texture size */ }; @@ -1234,27 +1367,27 @@ enum ir_texture_opcode { * appear as: * * Texel offset (0 or an expression) - * | Projection divisor - * | | Shadow comparitor - * | | | - * v v v - * (tex 0 1 ( )) - * (txb 0 1 ( ) ) - * (txl 0 1 ( ) ) - * (txd 0 1 ( ) (dPdx dPdy)) - * (txf 0 ) + * | + * v + * (tex 0) + * (txb 0 ) + * (txl 0 ) + * (txd 0 (dPdx dPdy)) + * (txf 0 ) + * (txs ) */ class ir_texture : public ir_rvalue { public: ir_texture(enum ir_texture_opcode op) - : ir_rvalue(glsl_precision_low), op(op), projector(NULL), shadow_comparitor(NULL), offset(NULL) + : ir_rvalue(glsl_precision_low), op(op), coordinate(NULL), + offset(NULL) { this->ir_type = ir_type_texture; } virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual void accept(ir_visitor *v) { @@ -1284,23 +1417,6 @@ public: /** Texture coordinate to sample */ ir_rvalue *coordinate; - /** - * Value used for projective divide. - * - * If there is no projective divide (the common case), this will be - * \c NULL. Optimization passes should check for this to point to a constant - * of 1.0 and replace that with \c NULL. - */ - ir_rvalue *projector; - - /** - * Coordinate used for comparison on shadow look-ups. - * - * If there is no shadow comparison, this will be \c NULL. For the - * \c ir_txf opcode, this *must* be \c NULL. - */ - ir_rvalue *shadow_comparitor; - /** Texel offset. */ ir_rvalue *offset; @@ -1346,7 +1462,7 @@ public: virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual ir_swizzle *as_swizzle() { @@ -1404,8 +1520,17 @@ public: */ virtual ir_variable *variable_referenced() const = 0; + /** + * Get the constant that is ultimately referenced by an r-value, + * in a constant expression evaluation context. + * + * The offset is used when the reference is to a specific column of + * a matrix. + */ + virtual void constant_referenced(struct hash_table *variable_context, ir_constant *&store, int &offset) const = 0; + protected: - ir_dereference(glsl_precision precision) : ir_rvalue(precision) { } + ir_dereference(glsl_precision precision) : ir_rvalue(precision) { } }; @@ -1416,7 +1541,7 @@ public: virtual ir_dereference_variable *clone(void *mem_ctx, struct hash_table *) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual ir_dereference_variable *as_dereference_variable() { @@ -1431,6 +1556,15 @@ public: return this->var; } + /** + * Get the constant that is ultimately referenced by an r-value, + * in a constant expression evaluation context. + * + * The offset is used when the reference is to a specific column of + * a matrix. + */ + virtual void constant_referenced(struct hash_table *variable_context, ir_constant *&store, int &offset) const; + virtual ir_variable *whole_variable_referenced() { /* ir_dereference_variable objects always dereference the entire @@ -1465,7 +1599,7 @@ public: virtual ir_dereference_array *clone(void *mem_ctx, struct hash_table *) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual ir_dereference_array *as_dereference_array() { @@ -1480,6 +1614,15 @@ public: return this->array->variable_referenced(); } + /** + * Get the constant that is ultimately referenced by an r-value, + * in a constant expression evaluation context. + * + * The offset is used when the reference is to a specific column of + * a matrix. + */ + virtual void constant_referenced(struct hash_table *variable_context, ir_constant *&store, int &offset) const; + virtual void accept(ir_visitor *v) { v->visit(this); @@ -1504,7 +1647,7 @@ public: virtual ir_dereference_record *clone(void *mem_ctx, struct hash_table *) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); /** * Get the variable that is ultimately referenced by an r-value @@ -1514,6 +1657,15 @@ public: return this->record->variable_referenced(); } + /** + * Get the constant that is ultimately referenced by an r-value, + * in a constant expression evaluation context. + * + * The offset is used when the reference is to a specific column of + * a matrix. + */ + virtual void constant_referenced(struct hash_table *variable_context, ir_constant *&store, int &offset) const; + virtual void accept(ir_visitor *v) { v->visit(this); @@ -1569,7 +1721,7 @@ public: virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const; - virtual ir_constant *constant_expression_value(); + virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL); virtual ir_constant *as_constant() { @@ -1601,17 +1753,43 @@ public: ir_constant *get_record_field(const char *name); + /** + * Copy the values on another constant at a given offset. + * + * The offset is ignored for array or struct copies, it's only for + * scalars or vectors into vectors or matrices. + * + * With identical types on both sides and zero offset it's clone() + * without creating a new object. + */ + + void copy_offset(ir_constant *src, int offset); + + /** + * Copy the values on another constant at a given offset and + * following an assign-like mask. + * + * The mask is ignored for scalars. + * + * Note that this function only handles what assign can handle, + * i.e. at most a vector as source and a column of a matrix as + * destination. + */ + + void copy_masked_offset(ir_constant *src, int offset, unsigned int mask); + /** * Determine whether a constant has the same value as another constant * * \sa ir_constant::is_zero, ir_constant::is_one, - * ir_constant::is_negative_one + * ir_constant::is_negative_one, ir_constant::is_basis */ bool has_value(const ir_constant *) const; virtual bool is_zero() const; virtual bool is_one() const; virtual bool is_negative_one() const; + virtual bool is_basis() const; /** * Value of the constant. @@ -1702,14 +1880,9 @@ extern void import_prototypes(const exec_list *source, exec_list *dest, struct glsl_symbol_table *symbols, void *mem_ctx); -extern bool -ir_has_call(ir_instruction *ir); - -extern bool -ir_has_call_skip_builtins(ir_instruction *ir); - extern void -do_set_program_inouts(exec_list *instructions, struct gl_program *prog); +do_set_program_inouts(exec_list *instructions, struct gl_program *prog, + bool is_fragment_shader); extern glsl_precision precision_from_ir (ir_instruction* ir); diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_basic_block.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_basic_block.cpp index 4361c2380..18cbb033f 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_basic_block.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_basic_block.cpp @@ -32,40 +32,31 @@ #include "ir_basic_block.h" #include "glsl_types.h" -class ir_has_call_visitor : public ir_hierarchical_visitor { -public: - ir_has_call_visitor(bool skipBuiltins) - { - has_call = false; - skip_builtins = skipBuiltins; - } - virtual ir_visitor_status visit_enter(ir_call *ir) - { - (void) ir; - if (!skip_builtins || !ir->get_callee() || !ir->get_callee()->is_builtin) - has_call = true; - return visit_stop; - } - - bool has_call; - bool skip_builtins; -}; - -bool -ir_has_call(ir_instruction *ir) +static ir_if* as_if_skip_discard (ir_instruction* ir) { - ir_has_call_visitor v(false); - ir->accept(&v); - return v.has_call; -} - -bool -ir_has_call_skip_builtins(ir_instruction *ir) -{ - ir_has_call_visitor v(true); - ir->accept(&v); - return v.has_call; + ir_if* irif = ir->as_if(); + if (!irif) + return NULL; + if (!irif->else_instructions.is_empty()) + return irif; + + bool only_discards = true; + int count = 0; + foreach_iter(exec_list_iterator, iter, irif->then_instructions) { + ir_instruction *iir = (ir_instruction *)iter.get(); + if (!iir->as_discard()) + { + only_discards = false; + break; + } + ++count; + } + + if (count == 1 && only_discards) + return NULL; + + return irif; } /** @@ -103,7 +94,7 @@ void call_for_basic_blocks(exec_list *instructions, if (!leader) leader = ir; - if ((ir_if = ir->as_if())) { + if ((ir_if = as_if_skip_discard(ir))) { callback(leader, ir, data); leader = NULL; @@ -133,24 +124,6 @@ void call_for_basic_blocks(exec_list *instructions, call_for_basic_blocks(&ir_sig->body, callback, data); } - } else if (ir->as_assignment()) { - /* If there's a call in the expression tree being assigned, - * then that ends the BB too. - * - * The assumption is that any consumer of the basic block - * walker is fine with the fact that the call is somewhere in - * the tree even if portions of the tree may be evaluated - * after the call. - * - * A consumer that has an issue with this could not process - * the last instruction of the basic block. If doing so, - * expression flattener may be useful before using the basic - * block finder to get more maximal basic blocks out. - */ - if (ir_has_call_skip_builtins(ir)) { - callback(leader, ir, data); - leader = NULL; - } } last = ir; } diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_builder.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_builder.cpp new file mode 100644 index 000000000..f0dd10021 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/ir_builder.cpp @@ -0,0 +1,206 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include "ir_builder.h" +#include "program/prog_instruction.h" + +using namespace ir_builder; + +namespace ir_builder { + +void +ir_factory::emit(ir_instruction *ir) +{ + instructions->push_tail(ir); +} + +ir_variable * +ir_factory::make_temp(const glsl_type *type, const char *name) +{ + ir_variable *var; + + var = new(mem_ctx) ir_variable(type, name, ir_var_temporary, glsl_precision_undefined); + emit(var); + + return var; +} + +ir_assignment * +assign(deref lhs, operand rhs, int writemask) +{ + void *mem_ctx = ralloc_parent(lhs.val); + + ir_assignment *assign = new(mem_ctx) ir_assignment(lhs.val, + rhs.val, + NULL, writemask); + + return assign; +} + +ir_assignment * +assign(deref lhs, operand rhs) +{ + return assign(lhs, rhs, (1 << lhs.val->type->vector_elements) - 1); +} + +ir_swizzle * +swizzle(operand a, int swizzle, int components) +{ + void *mem_ctx = ralloc_parent(a.val); + + return new(mem_ctx) ir_swizzle(a.val, + GET_SWZ(swizzle, 0), + GET_SWZ(swizzle, 1), + GET_SWZ(swizzle, 2), + GET_SWZ(swizzle, 3), + components); +} + +ir_swizzle * +swizzle_for_size(operand a, int components) +{ + void *mem_ctx = ralloc_parent(a.val); + + if (a.val->type->vector_elements < components) + components = a.val->type->vector_elements; + + unsigned s[4] = { 0, 1, 2, 3 }; + for (int i = components; i < 4; i++) + s[i] = components - 1; + + return new(mem_ctx) ir_swizzle(a.val, s, components); +} + +ir_swizzle * +swizzle_xxxx(operand a) +{ + return swizzle(a, SWIZZLE_XXXX, 4); +} + +ir_swizzle * +swizzle_yyyy(operand a) +{ + return swizzle(a, SWIZZLE_YYYY, 4); +} + +ir_swizzle * +swizzle_zzzz(operand a) +{ + return swizzle(a, SWIZZLE_ZZZZ, 4); +} + +ir_swizzle * +swizzle_wwww(operand a) +{ + return swizzle(a, SWIZZLE_WWWW, 4); +} + +ir_swizzle * +swizzle_x(operand a) +{ + return swizzle(a, SWIZZLE_XXXX, 1); +} + +ir_swizzle * +swizzle_y(operand a) +{ + return swizzle(a, SWIZZLE_YYYY, 1); +} + +ir_swizzle * +swizzle_z(operand a) +{ + return swizzle(a, SWIZZLE_ZZZZ, 1); +} + +ir_swizzle * +swizzle_w(operand a) +{ + return swizzle(a, SWIZZLE_WWWW, 1); +} + +ir_swizzle * +swizzle_xy(operand a) +{ + return swizzle(a, SWIZZLE_XYZW, 2); +} + +ir_swizzle * +swizzle_xyz(operand a) +{ + return swizzle(a, SWIZZLE_XYZW, 3); +} + +ir_swizzle * +swizzle_xyzw(operand a) +{ + return swizzle(a, SWIZZLE_XYZW, 4); +} + +ir_expression * +expr(ir_expression_operation op, operand a) +{ + void *mem_ctx = ralloc_parent(a.val); + + return new(mem_ctx) ir_expression(op, a.val); +} + +ir_expression * +expr(ir_expression_operation op, operand a, operand b) +{ + void *mem_ctx = ralloc_parent(a.val); + + return new(mem_ctx) ir_expression(op, a.val, b.val); +} + +ir_expression *add(operand a, operand b) +{ + return expr(ir_binop_add, a, b); +} + +ir_expression *sub(operand a, operand b) +{ + return expr(ir_binop_sub, a, b); +} + +ir_expression *mul(operand a, operand b) +{ + return expr(ir_binop_mul, a, b); +} + +ir_expression *dot(operand a, operand b) +{ + return expr(ir_binop_dot, a, b); +} + +ir_expression * +saturate(operand a) +{ + void *mem_ctx = ralloc_parent(a.val); + + return expr(ir_binop_max, + expr(ir_binop_min, a, new(mem_ctx) ir_constant(1.0f)), + new(mem_ctx) ir_constant(0.0f)); +} + +} /* namespace ir_builder */ diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_builder.h b/3rdparty/glsl-optimizer/src/glsl/ir_builder.h new file mode 100644 index 000000000..7a0a196ee --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/ir_builder.h @@ -0,0 +1,111 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include "ir.h" + +namespace ir_builder { + +/** + * This little class exists to let the helper expression generators + * take either an ir_rvalue * or an ir_variable * to be automatically + * dereferenced, while still providing compile-time type checking. + * + * You don't have to explicitly call the constructor -- C++ will see + * that you passed an ir_variable, and silently call the + * operand(ir_variable *var) constructor behind your back. + */ +class operand { +public: + operand(ir_rvalue *val) + : val(val) + { + } + + operand(ir_variable *var) + { + void *mem_ctx = ralloc_parent(var); + val = new(mem_ctx) ir_dereference_variable(var); + } + + ir_rvalue *val; +}; + +/** Automatic generator for ir_dereference_variable on assignment LHS. + * + * \sa operand + */ +class deref { +public: + deref(ir_dereference *val) + : val(val) + { + } + + deref(ir_variable *var) + { + void *mem_ctx = ralloc_parent(var); + val = new(mem_ctx) ir_dereference_variable(var); + } + + + ir_dereference *val; +}; + +class ir_factory { +public: + void emit(ir_instruction *ir); + ir_variable *make_temp(const glsl_type *type, const char *name); + + exec_list *instructions; + void *mem_ctx; +}; + +ir_assignment *assign(deref lhs, operand rhs); +ir_assignment *assign(deref lhs, operand rhs, int writemask); + +ir_expression *expr(ir_expression_operation op, operand a); +ir_expression *expr(ir_expression_operation op, operand a, operand b); +ir_expression *add(operand a, operand b); +ir_expression *sub(operand a, operand b); +ir_expression *mul(operand a, operand b); +ir_expression *dot(operand a, operand b); +ir_expression *saturate(operand a); + +/** + * Swizzle away later components, but preserve the ordering. + */ +ir_swizzle *swizzle_for_size(operand a, int components); + +ir_swizzle *swizzle_xxxx(operand a); +ir_swizzle *swizzle_yyyy(operand a); +ir_swizzle *swizzle_zzzz(operand a); +ir_swizzle *swizzle_wwww(operand a); +ir_swizzle *swizzle_x(operand a); +ir_swizzle *swizzle_y(operand a); +ir_swizzle *swizzle_z(operand a); +ir_swizzle *swizzle_w(operand a); +ir_swizzle *swizzle_xy(operand a); +ir_swizzle *swizzle_xyz(operand a); +ir_swizzle *swizzle_xyzw(operand a); + +} /* namespace ir_builder */ diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_clone.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_clone.cpp index acc258141..8e55b4fbb 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_clone.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_clone.cpp @@ -25,8 +25,13 @@ #include "main/compiler.h" #include "ir.h" #include "glsl_types.h" -extern "C" { #include "program/hash_table.h" + +ir_rvalue * +ir_rvalue::clone(void *mem_ctx, struct hash_table *ht) const +{ + /* The only possible instantiation is the generic error value. */ + return error_value(mem_ctx); } /** @@ -47,12 +52,16 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const var->centroid = this->centroid; var->invariant = this->invariant; var->interpolation = this->interpolation; - var->array_lvalue = this->array_lvalue; var->location = this->location; + var->index = this->index; + var->uniform_block = this->uniform_block; var->warn_extension = this->warn_extension; var->origin_upper_left = this->origin_upper_left; var->pixel_center_integer = this->pixel_center_integer; var->explicit_location = this->explicit_location; + var->explicit_index = this->explicit_index; + var->has_initializer = this->has_initializer; + var->depth_layout = this->depth_layout; var->num_state_slots = this->num_state_slots; if (this->state_slots) { @@ -65,12 +74,13 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const sizeof(this->state_slots[0]) * var->num_state_slots); } - if (this->explicit_location) - var->location = this->location; - if (this->constant_value) var->constant_value = this->constant_value->clone(mem_ctx, ht); + if (this->constant_initializer) + var->constant_initializer = + this->constant_initializer->clone(mem_ctx, ht); + if (ht) { hash_table_insert(ht, var, (void *)const_cast(this)); } @@ -159,8 +169,9 @@ ir_loop::clone(void *mem_ctx, struct hash_table *ht) const ir_call * ir_call::clone(void *mem_ctx, struct hash_table *ht) const { - if (this->type == glsl_type::error_type) - return ir_call::get_error_instruction(mem_ctx); + ir_dereference_variable *new_return_ref = NULL; + if (this->return_deref != NULL) + new_return_ref = this->return_deref->clone(mem_ctx, ht); exec_list new_parameters; @@ -169,8 +180,7 @@ ir_call::clone(void *mem_ctx, struct hash_table *ht) const new_parameters.push_tail(ir->clone(mem_ctx, ht)); } - ir_call* rv = new(mem_ctx) ir_call(this->callee, &new_parameters); - rv->set_precision (this->get_precision()); + ir_call* rv = new(mem_ctx) ir_call(this->callee, new_return_ref, &new_parameters); return rv; } @@ -230,12 +240,8 @@ ir_texture::clone(void *mem_ctx, struct hash_table *ht) const new_tex->type = this->type; new_tex->sampler = this->sampler->clone(mem_ctx, ht); - new_tex->coordinate = this->coordinate->clone(mem_ctx, ht); - if (this->projector) - new_tex->projector = this->projector->clone(mem_ctx, ht); - if (this->shadow_comparitor) { - new_tex->shadow_comparitor = this->shadow_comparitor->clone(mem_ctx, ht); - } + if (this->coordinate) + new_tex->coordinate = this->coordinate->clone(mem_ctx, ht); if (this->offset != NULL) new_tex->offset = this->offset->clone(mem_ctx, ht); @@ -248,6 +254,7 @@ ir_texture::clone(void *mem_ctx, struct hash_table *ht) const break; case ir_txl: case ir_txf: + case ir_txs: new_tex->lod_info.lod = this->lod_info.lod->clone(mem_ctx, ht); break; case ir_txd: @@ -320,6 +327,7 @@ ir_function_signature::clone_prototype(void *mem_ctx, struct hash_table *ht) con copy->is_defined = false; copy->is_builtin = this->is_builtin; + copy->origin = this; /* Clone the parameter list, but NOT the body. */ @@ -393,9 +401,9 @@ public: * table. If it is found, replace it with the value from the table. */ ir_function_signature *sig = - (ir_function_signature *) hash_table_find(this->ht, ir->get_callee()); + (ir_function_signature *) hash_table_find(this->ht, ir->callee); if (sig != NULL) - ir->set_callee(sig); + ir->callee = sig; /* Since this may be used before function call parameters are flattened, * the children also need to be processed. diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_constant_expression.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_constant_expression.cpp index f0299a2c4..17b54b923 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_constant_expression.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_constant_expression.cpp @@ -38,6 +38,26 @@ #include "ir.h" #include "ir_visitor.h" #include "glsl_types.h" +#include "program/hash_table.h" + +/* Using C99 rounding functions for roundToEven() implementation is + * difficult, because round(), rint, and nearbyint() are affected by + * fesetenv(), which the application may have done for its own + * purposes. Mesa's IROUND macro is close to what we want, but it + * rounds away from 0 on n + 0.5. + */ +static int +round_to_even(float val) +{ + int rounded = IROUND(val); + + if (val - floor(val) == 0.5) { + if (rounded % 2 != 0) + rounded += val > 0 ? -1 : 1; + } + + return rounded; +} static float dot(ir_constant *op0, ir_constant *op1) @@ -51,8 +71,38 @@ dot(ir_constant *op0, ir_constant *op1) return result; } +/* This method is the only one supported by gcc. Unions in particular + * are iffy, and read-through-converted-pointer is killed by strict + * aliasing. OTOH, the compiler sees through the memcpy, so the + * resulting asm is reasonable. + */ +static float +bitcast_u2f(unsigned int u) +{ + assert(sizeof(float) == sizeof(unsigned int)); + float f; + memcpy(&f, &u, sizeof(f)); + return f; +} + +static unsigned int +bitcast_f2u(float f) +{ + assert(sizeof(float) == sizeof(unsigned int)); + unsigned int u; + memcpy(&u, &f, sizeof(f)); + return u; +} + ir_constant * -ir_expression::constant_expression_value() +ir_rvalue::constant_expression_value(struct hash_table *variable_context) +{ + assert(this->type->is_error()); + return NULL; +} + +ir_constant * +ir_expression::constant_expression_value(struct hash_table *variable_context) { if (this->type->is_error()) return NULL; @@ -63,13 +113,15 @@ ir_expression::constant_expression_value() memset(&data, 0, sizeof(data)); for (unsigned operand = 0; operand < this->get_num_operands(); operand++) { - op[operand] = this->operands[operand]->constant_expression_value(); + op[operand] = this->operands[operand]->constant_expression_value(variable_context); if (!op[operand]) return NULL; } if (op[1] != NULL) - assert(op[0]->type->base_type == op[1]->type->base_type); + assert(op[0]->type->base_type == op[1]->type->base_type || + this->operation == ir_binop_lshift || + this->operation == ir_binop_rshift); bool op0_scalar = op[0]->type->is_scalar(); bool op1_scalar = op[1] != NULL && op[1]->type->is_scalar(); @@ -130,6 +182,12 @@ ir_expression::constant_expression_value() data.i[c] = (int) op[0]->value.f[c]; } break; + case ir_unop_f2u: + assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.i[c] = (unsigned) op[0]->value.f[c]; + } + break; case ir_unop_i2f: assert(op[0]->type->base_type == GLSL_TYPE_INT); for (unsigned c = 0; c < op[0]->type->components(); c++) { @@ -178,6 +236,30 @@ ir_expression::constant_expression_value() data.u[c] = op[0]->value.i[c]; } break; + case ir_unop_bitcast_i2f: + assert(op[0]->type->base_type == GLSL_TYPE_INT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.f[c] = bitcast_u2f(op[0]->value.i[c]); + } + break; + case ir_unop_bitcast_f2i: + assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.i[c] = bitcast_f2u(op[0]->value.f[c]); + } + break; + case ir_unop_bitcast_u2f: + assert(op[0]->type->base_type == GLSL_TYPE_UINT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.f[c] = bitcast_u2f(op[0]->value.u[c]); + } + break; + case ir_unop_bitcast_f2u: + assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.u[c] = bitcast_f2u(op[0]->value.f[c]); + } + break; case ir_unop_any: assert(op[0]->type->is_boolean()); data.b[0] = false; @@ -194,6 +276,13 @@ ir_expression::constant_expression_value() } break; + case ir_unop_round_even: + assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.f[c] = round_to_even(op[0]->value.f[c]); + } + break; + case ir_unop_ceil: assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); for (unsigned c = 0; c < op[0]->type->components(); c++) { @@ -605,13 +694,13 @@ ir_expression::constant_expression_value() for (unsigned c = 0; c < op[0]->type->components(); c++) { switch (op[0]->type->base_type) { case GLSL_TYPE_UINT: - data.b[0] = op[0]->value.u[0] < op[1]->value.u[0]; + data.b[c] = op[0]->value.u[c] < op[1]->value.u[c]; break; case GLSL_TYPE_INT: - data.b[0] = op[0]->value.i[0] < op[1]->value.i[0]; + data.b[c] = op[0]->value.i[c] < op[1]->value.i[c]; break; case GLSL_TYPE_FLOAT: - data.b[0] = op[0]->value.f[0] < op[1]->value.f[0]; + data.b[c] = op[0]->value.f[c] < op[1]->value.f[c]; break; default: assert(0); @@ -641,13 +730,13 @@ ir_expression::constant_expression_value() for (unsigned c = 0; c < op[0]->type->components(); c++) { switch (op[0]->type->base_type) { case GLSL_TYPE_UINT: - data.b[0] = op[0]->value.u[0] <= op[1]->value.u[0]; + data.b[c] = op[0]->value.u[c] <= op[1]->value.u[c]; break; case GLSL_TYPE_INT: - data.b[0] = op[0]->value.i[0] <= op[1]->value.i[0]; + data.b[c] = op[0]->value.i[c] <= op[1]->value.i[c]; break; case GLSL_TYPE_FLOAT: - data.b[0] = op[0]->value.f[0] <= op[1]->value.f[0]; + data.b[c] = op[0]->value.f[c] <= op[1]->value.f[c]; break; default: assert(0); @@ -659,13 +748,13 @@ ir_expression::constant_expression_value() for (unsigned c = 0; c < op[0]->type->components(); c++) { switch (op[0]->type->base_type) { case GLSL_TYPE_UINT: - data.b[0] = op[0]->value.u[0] >= op[1]->value.u[0]; + data.b[c] = op[0]->value.u[c] >= op[1]->value.u[c]; break; case GLSL_TYPE_INT: - data.b[0] = op[0]->value.i[0] >= op[1]->value.i[0]; + data.b[c] = op[0]->value.i[c] >= op[1]->value.i[c]; break; case GLSL_TYPE_FLOAT: - data.b[0] = op[0]->value.f[0] >= op[1]->value.f[0]; + data.b[c] = op[0]->value.f[c] >= op[1]->value.f[c]; break; default: assert(0); @@ -685,13 +774,16 @@ ir_expression::constant_expression_value() case GLSL_TYPE_FLOAT: data.b[c] = op[0]->value.f[c] == op[1]->value.f[c]; break; + case GLSL_TYPE_BOOL: + data.b[c] = op[0]->value.b[c] == op[1]->value.b[c]; + break; default: assert(0); } } break; case ir_binop_nequal: - assert(op[0]->type != op[1]->type); + assert(op[0]->type == op[1]->type); for (unsigned c = 0; c < components; c++) { switch (op[0]->type->base_type) { case GLSL_TYPE_UINT: @@ -703,6 +795,9 @@ ir_expression::constant_expression_value() case GLSL_TYPE_FLOAT: data.b[c] = op[0]->value.f[c] != op[1]->value.f[c]; break; + case GLSL_TYPE_BOOL: + data.b[c] = op[0]->value.b[c] != op[1]->value.b[c]; + break; default: assert(0); } @@ -845,7 +940,7 @@ ir_expression::constant_expression_value() ir_constant * -ir_texture::constant_expression_value() +ir_texture::constant_expression_value(struct hash_table *variable_context) { /* texture lookups aren't constant expressions */ return NULL; @@ -853,9 +948,9 @@ ir_texture::constant_expression_value() ir_constant * -ir_swizzle::constant_expression_value() +ir_swizzle::constant_expression_value(struct hash_table *variable_context) { - ir_constant *v = this->val->constant_expression_value(); + ir_constant *v = this->val->constant_expression_value(variable_context); if (v != NULL) { ir_constant_data data = { { 0 } }; @@ -881,13 +976,33 @@ ir_swizzle::constant_expression_value() } +void +ir_dereference_variable::constant_referenced(struct hash_table *variable_context, + ir_constant *&store, int &offset) const +{ + if (variable_context) { + store = (ir_constant *)hash_table_find(variable_context, var); + offset = 0; + } else { + store = NULL; + offset = 0; + } +} + ir_constant * -ir_dereference_variable::constant_expression_value() +ir_dereference_variable::constant_expression_value(struct hash_table *variable_context) { /* This may occur during compile and var->type is glsl_type::error_type */ if (!var) return NULL; + /* Give priority to the context hashtable, if it exists */ + if (variable_context) { + ir_constant *value = (ir_constant *)hash_table_find(variable_context, var); + if(value) + return value; + } + /* The constant_value of a uniform variable is its initializer, * not the lifetime constant value of the uniform. */ @@ -901,11 +1016,65 @@ ir_dereference_variable::constant_expression_value() } -ir_constant * -ir_dereference_array::constant_expression_value() +void +ir_dereference_array::constant_referenced(struct hash_table *variable_context, + ir_constant *&store, int &offset) const { - ir_constant *array = this->array->constant_expression_value(); - ir_constant *idx = this->array_index->constant_expression_value(); + ir_constant *index_c = array_index->constant_expression_value(variable_context); + + if (!index_c || !index_c->type->is_scalar() || !index_c->type->is_integer()) { + store = 0; + offset = 0; + return; + } + + int index = index_c->type->base_type == GLSL_TYPE_INT ? + index_c->get_int_component(0) : + index_c->get_uint_component(0); + + ir_constant *substore; + int suboffset; + const ir_dereference *deref = array->as_dereference(); + if (!deref) { + store = 0; + offset = 0; + return; + } + + deref->constant_referenced(variable_context, substore, suboffset); + + if (!substore) { + store = 0; + offset = 0; + return; + } + + const glsl_type *vt = substore->type; + if (vt->is_array()) { + store = substore->get_array_element(index); + offset = 0; + return; + } + if (vt->is_matrix()) { + store = substore; + offset = index * vt->vector_elements; + return; + } + if (vt->is_vector()) { + store = substore; + offset = suboffset + index; + return; + } + + store = 0; + offset = 0; +} + +ir_constant * +ir_dereference_array::constant_expression_value(struct hash_table *variable_context) +{ + ir_constant *array = this->array->constant_expression_value(variable_context); + ir_constant *idx = this->array_index->constant_expression_value(variable_context); if ((array != NULL) && (idx != NULL)) { void *ctx = ralloc_parent(this); @@ -956,8 +1125,33 @@ ir_dereference_array::constant_expression_value() } +void +ir_dereference_record::constant_referenced(struct hash_table *variable_context, + ir_constant *&store, int &offset) const +{ + ir_constant *substore; + int suboffset; + const ir_dereference *deref = record->as_dereference(); + if (!deref) { + store = 0; + offset = 0; + return; + } + + deref->constant_referenced(variable_context, substore, suboffset); + + if (!substore) { + store = 0; + offset = 0; + return; + } + + store = substore->get_record_field(field); + offset = 0; +} + ir_constant * -ir_dereference_record::constant_expression_value() +ir_dereference_record::constant_expression_value(struct hash_table *variable_context) { ir_constant *v = this->record->constant_expression_value(); @@ -966,7 +1160,7 @@ ir_dereference_record::constant_expression_value() ir_constant * -ir_assignment::constant_expression_value() +ir_assignment::constant_expression_value(struct hash_table *variable_context) { /* FINISHME: Handle CEs involving assignment (return RHS) */ return NULL; @@ -974,410 +1168,187 @@ ir_assignment::constant_expression_value() ir_constant * -ir_constant::constant_expression_value() +ir_constant::constant_expression_value(struct hash_table *variable_context) { return this; } ir_constant * -ir_call::constant_expression_value() +ir_call::constant_expression_value(struct hash_table *variable_context) { - if (this->type == glsl_type::error_type) + return this->callee->constant_expression_value(&this->actual_parameters, variable_context); +} + + +bool ir_function_signature::constant_expression_evaluate_expression_list(const struct exec_list &body, + struct hash_table *variable_context, + ir_constant **result) +{ + foreach_list(n, &body) { + ir_instruction *inst = (ir_instruction *)n; + switch(inst->ir_type) { + + /* (declare () type symbol) */ + case ir_type_variable: { + ir_variable *var = inst->as_variable(); + hash_table_insert(variable_context, ir_constant::zero(this, var->type), var); + break; + } + + /* (assign [condition] (write-mask) (ref) (value)) */ + case ir_type_assignment: { + ir_assignment *asg = inst->as_assignment(); + if (asg->condition) { + ir_constant *cond = asg->condition->constant_expression_value(variable_context); + if (!cond) + return false; + if (!cond->get_bool_component(0)) + break; + } + + ir_constant *store = NULL; + int offset = 0; + asg->lhs->constant_referenced(variable_context, store, offset); + + if (!store) + return false; + + ir_constant *value = asg->rhs->constant_expression_value(variable_context); + + if (!value) + return false; + + store->copy_masked_offset(value, offset, asg->write_mask); + break; + } + + /* (return (expression)) */ + case ir_type_return: + assert (result); + *result = inst->as_return()->value->constant_expression_value(variable_context); + return *result != NULL; + + /* (call name (ref) (params))*/ + case ir_type_call: { + ir_call *call = inst->as_call(); + + /* Just say no to void functions in constant expressions. We + * don't need them at that point. + */ + + if (!call->return_deref) + return false; + + ir_constant *store = NULL; + int offset = 0; + call->return_deref->constant_referenced(variable_context, store, offset); + + if (!store) + return false; + + ir_constant *value = call->constant_expression_value(variable_context); + + if(!value) + return false; + + store->copy_offset(value, offset); + break; + } + + /* (if condition (then-instructions) (else-instructions)) */ + case ir_type_if: { + ir_if *iif = inst->as_if(); + + ir_constant *cond = iif->condition->constant_expression_value(variable_context); + if (!cond || !cond->type->is_boolean()) + return false; + + exec_list &branch = cond->get_bool_component(0) ? iif->then_instructions : iif->else_instructions; + + *result = NULL; + if (!constant_expression_evaluate_expression_list(branch, variable_context, result)) + return false; + + /* If there was a return in the branch chosen, drop out now. */ + if (*result) + return true; + + break; + } + + /* Every other expression type, we drop out. */ + default: + return false; + } + } + + /* Reaching the end of the block is not an error condition */ + if (result) + *result = NULL; + + return true; +} + +ir_constant * +ir_function_signature::constant_expression_value(exec_list *actual_parameters, struct hash_table *variable_context) +{ + const glsl_type *type = this->return_type; + if (type == glsl_type::void_type) return NULL; /* From the GLSL 1.20 spec, page 23: * "Function calls to user-defined functions (non-built-in functions) * cannot be used to form constant expressions." */ - if (!this->callee->is_builtin) + if (!this->is_builtin) return NULL; - unsigned num_parameters = 0; - - /* Check if all parameters are constant */ - ir_constant *op[3]; - foreach_list(n, &this->actual_parameters) { - ir_constant *constant = ((ir_rvalue *) n)->constant_expression_value(); - if (constant == NULL) - return NULL; - - op[num_parameters] = constant; - - assert(num_parameters < 3); - num_parameters++; - } - - /* Individual cases below can either: - * - Assign "expr" a new ir_expression to evaluate (for basic opcodes) - * - Fill "data" with appopriate constant data - * - Return an ir_constant directly. + /* + * Of the builtin functions, only the texture lookups and the noise + * ones must not be used in constant expressions. They all include + * specific opcodes so they don't need to be special-cased at this + * point. */ - void *mem_ctx = ralloc_parent(this); - ir_expression *expr = NULL; - ir_constant_data data; - memset(&data, 0, sizeof(data)); + /* Initialize the table of dereferencable names with the function + * parameters. Verify their const-ness on the way. + * + * We expect the correctness of the number of parameters to have + * been checked earlier. + */ + hash_table *deref_hash = hash_table_ctor(8, hash_table_pointer_hash, + hash_table_pointer_compare); - const char *callee = this->callee_name(); - if (strcmp(callee, "abs") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_abs, type, op[0], NULL); - } else if (strcmp(callee, "all") == 0) { - assert(op[0]->type->is_boolean()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - if (!op[0]->value.b[c]) - return new(mem_ctx) ir_constant(false); - } - return new(mem_ctx) ir_constant(true); - } else if (strcmp(callee, "any") == 0) { - assert(op[0]->type->is_boolean()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - if (op[0]->value.b[c]) - return new(mem_ctx) ir_constant(true); - } - return new(mem_ctx) ir_constant(false); - } else if (strcmp(callee, "acos") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = acosf(op[0]->value.f[c]); - } else if (strcmp(callee, "acosh") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = acoshf(op[0]->value.f[c]); - } else if (strcmp(callee, "asin") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = asinf(op[0]->value.f[c]); - } else if (strcmp(callee, "asinh") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = asinhf(op[0]->value.f[c]); - } else if (strcmp(callee, "atan") == 0) { - assert(op[0]->type->is_float()); - if (num_parameters == 2) { - assert(op[1]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = atan2f(op[0]->value.f[c], op[1]->value.f[c]); - } else { - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = atanf(op[0]->value.f[c]); - } - } else if (strcmp(callee, "atanh") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = atanhf(op[0]->value.f[c]); - } else if (strcmp(callee, "dFdx") == 0 || strcmp(callee, "dFdy") == 0) { - return ir_constant::zero(mem_ctx, this->type); - } else if (strcmp(callee, "ceil") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_ceil, type, op[0], NULL); - } else if (strcmp(callee, "clamp") == 0) { - assert(num_parameters == 3); - unsigned c1_inc = op[1]->type->is_scalar() ? 0 : 1; - unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; - for (unsigned c = 0, c1 = 0, c2 = 0; - c < op[0]->type->components(); - c1 += c1_inc, c2 += c2_inc, c++) { + /* If "origin" is non-NULL, then the function body is there. So we + * have to use the variable objects from the object with the body, + * but the parameter instanciation on the current object. + */ + const exec_node *parameter_info = origin ? origin->parameters.head : parameters.head; - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = CLAMP(op[0]->value.u[c], op[1]->value.u[c1], - op[2]->value.u[c2]); - break; - case GLSL_TYPE_INT: - data.i[c] = CLAMP(op[0]->value.i[c], op[1]->value.i[c1], - op[2]->value.i[c2]); - break; - case GLSL_TYPE_FLOAT: - data.f[c] = CLAMP(op[0]->value.f[c], op[1]->value.f[c1], - op[2]->value.f[c2]); - break; - default: - assert(!"Should not get here."); - } + foreach_list(n, actual_parameters) { + ir_constant *constant = ((ir_rvalue *) n)->constant_expression_value(variable_context); + if (constant == NULL) { + hash_table_dtor(deref_hash); + return NULL; } - } else if (strcmp(callee, "cos") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_cos, type, op[0], NULL); - } else if (strcmp(callee, "cosh") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = coshf(op[0]->value.f[c]); - } else if (strcmp(callee, "cross") == 0) { - assert(op[0]->type == glsl_type::vec3_type); - assert(op[1]->type == glsl_type::vec3_type); - data.f[0] = (op[0]->value.f[1] * op[1]->value.f[2] - - op[1]->value.f[1] * op[0]->value.f[2]); - data.f[1] = (op[0]->value.f[2] * op[1]->value.f[0] - - op[1]->value.f[2] * op[0]->value.f[0]); - data.f[2] = (op[0]->value.f[0] * op[1]->value.f[1] - - op[1]->value.f[0] * op[0]->value.f[1]); - } else if (strcmp(callee, "degrees") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = 180.0F / M_PI * op[0]->value.f[c]; - } else if (strcmp(callee, "distance") == 0) { - assert(op[0]->type->is_float() && op[1]->type->is_float()); - float length_squared = 0.0; - for (unsigned c = 0; c < op[0]->type->components(); c++) { - float t = op[0]->value.f[c] - op[1]->value.f[c]; - length_squared += t * t; - } - return new(mem_ctx) ir_constant(sqrtf(length_squared)); - } else if (strcmp(callee, "dot") == 0) { - return new(mem_ctx) ir_constant(dot(op[0], op[1])); - } else if (strcmp(callee, "equal") == 0) { - assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] == op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] == op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] == op[1]->value.f[c]; - break; - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] == op[1]->value.b[c]; - break; - default: - assert(!"Should not get here."); - } - } - } else if (strcmp(callee, "exp") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_exp, type, op[0], NULL); - } else if (strcmp(callee, "exp2") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_exp2, type, op[0], NULL); - } else if (strcmp(callee, "faceforward") == 0) { - if (dot(op[2], op[1]) < 0) - return op[0]; - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = -op[0]->value.f[c]; - } else if (strcmp(callee, "floor") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_floor, type, op[0], NULL); - } else if (strcmp(callee, "fract") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_fract, type, op[0], NULL); - } else if (strcmp(callee, "fwidth") == 0) { - return ir_constant::zero(mem_ctx, this->type); - } else if (strcmp(callee, "greaterThan") == 0) { - assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] > op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] > op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] > op[1]->value.f[c]; - break; - default: - assert(!"Should not get here."); - } - } - } else if (strcmp(callee, "greaterThanEqual") == 0) { - assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] >= op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] >= op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] >= op[1]->value.f[c]; - break; - default: - assert(!"Should not get here."); - } - } - } else if (strcmp(callee, "inversesqrt") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_rsq, type, op[0], NULL); - } else if (strcmp(callee, "length") == 0) { - return new(mem_ctx) ir_constant(sqrtf(dot(op[0], op[0]))); - } else if (strcmp(callee, "lessThan") == 0) { - assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] < op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] < op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] < op[1]->value.f[c]; - break; - default: - assert(!"Should not get here."); - } - } - } else if (strcmp(callee, "lessThanEqual") == 0) { - assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] <= op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] <= op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] <= op[1]->value.f[c]; - break; - default: - assert(!"Should not get here."); - } - } - } else if (strcmp(callee, "log") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_log, type, op[0], NULL); - } else if (strcmp(callee, "log2") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_log2, type, op[0], NULL); - } else if (strcmp(callee, "matrixCompMult") == 0) { - assert(op[0]->type->is_float() && op[1]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = op[0]->value.f[c] * op[1]->value.f[c]; - } else if (strcmp(callee, "max") == 0) { - expr = new(mem_ctx) ir_expression(ir_binop_max, type, op[0], op[1]); - } else if (strcmp(callee, "min") == 0) { - expr = new(mem_ctx) ir_expression(ir_binop_min, type, op[0], op[1]); - } else if (strcmp(callee, "mix") == 0) { - assert(op[0]->type->is_float() && op[1]->type->is_float()); - if (op[2]->type->is_float()) { - unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; - unsigned components = op[0]->type->components(); - for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) { - data.f[c] = op[0]->value.f[c] * (1 - op[2]->value.f[c2]) + - op[1]->value.f[c] * op[2]->value.f[c2]; - } - } else { - assert(op[2]->type->is_boolean()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = op[op[2]->value.b[c] ? 1 : 0]->value.f[c]; - } - } else if (strcmp(callee, "mod") == 0) { - expr = new(mem_ctx) ir_expression(ir_binop_mod, type, op[0], op[1]); - } else if (strcmp(callee, "normalize") == 0) { - assert(op[0]->type->is_float()); - float length = sqrtf(dot(op[0], op[0])); - if (length == 0) - return ir_constant::zero(mem_ctx, this->type); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = op[0]->value.f[c] / length; - } else if (strcmp(callee, "not") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_logic_not, type, op[0], NULL); - } else if (strcmp(callee, "notEqual") == 0) { - assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] != op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] != op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] != op[1]->value.f[c]; - break; - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] != op[1]->value.b[c]; - break; - default: - assert(!"Should not get here."); - } - } - } else if (strcmp(callee, "outerProduct") == 0) { - assert(op[0]->type->is_vector() && op[1]->type->is_vector()); - const unsigned m = op[0]->type->vector_elements; - const unsigned n = op[1]->type->vector_elements; - for (unsigned j = 0; j < n; j++) { - for (unsigned i = 0; i < m; i++) { - data.f[i+m*j] = op[0]->value.f[i] * op[1]->value.f[j]; - } - } - } else if (strcmp(callee, "pow") == 0) { - expr = new(mem_ctx) ir_expression(ir_binop_pow, type, op[0], op[1]); - } else if (strcmp(callee, "radians") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = M_PI / 180.0F * op[0]->value.f[c]; - } else if (strcmp(callee, "reflect") == 0) { - assert(op[0]->type->is_float()); - float dot_NI = dot(op[1], op[0]); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = op[0]->value.f[c] - 2 * dot_NI * op[1]->value.f[c]; - } else if (strcmp(callee, "refract") == 0) { - const float eta = op[2]->value.f[0]; - const float dot_NI = dot(op[1], op[0]); - const float k = 1.0F - eta * eta * (1.0F - dot_NI * dot_NI); - if (k < 0.0) { - return ir_constant::zero(mem_ctx, this->type); - } else { - for (unsigned c = 0; c < type->components(); c++) { - data.f[c] = eta * op[0]->value.f[c] - (eta * dot_NI + sqrtf(k)) - * op[1]->value.f[c]; - } - } - } else if (strcmp(callee, "sign") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_sign, type, op[0], NULL); - } else if (strcmp(callee, "sin") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_sin, type, op[0], NULL); - } else if (strcmp(callee, "sinh") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = sinhf(op[0]->value.f[c]); - } else if (strcmp(callee, "smoothstep") == 0) { - assert(num_parameters == 3); - assert(op[1]->type == op[0]->type); - unsigned edge_inc = op[0]->type->is_scalar() ? 0 : 1; - for (unsigned c = 0, e = 0; c < type->components(); e += edge_inc, c++) { - const float edge0 = op[0]->value.f[e]; - const float edge1 = op[1]->value.f[e]; - if (edge0 == edge1) { - data.f[c] = 0.0; /* Avoid a crash - results are undefined anyway */ - } else { - const float numerator = op[2]->value.f[c] - edge0; - const float denominator = edge1 - edge0; - const float t = CLAMP(numerator/denominator, 0, 1); - data.f[c] = t * t * (3 - 2 * t); - } - } - } else if (strcmp(callee, "sqrt") == 0) { - expr = new(mem_ctx) ir_expression(ir_unop_sqrt, type, op[0], NULL); - } else if (strcmp(callee, "step") == 0) { - assert(op[0]->type->is_float() && op[1]->type->is_float()); - /* op[0] (edge) may be either a scalar or a vector */ - const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1; - for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++) - data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0F : 1.0F; - } else if (strcmp(callee, "tan") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = tanf(op[0]->value.f[c]); - } else if (strcmp(callee, "tanh") == 0) { - assert(op[0]->type->is_float()); - for (unsigned c = 0; c < op[0]->type->components(); c++) - data.f[c] = tanhf(op[0]->value.f[c]); - } else if (strcmp(callee, "transpose") == 0) { - assert(op[0]->type->is_matrix()); - const unsigned n = op[0]->type->vector_elements; - const unsigned m = op[0]->type->matrix_columns; - for (unsigned j = 0; j < m; j++) { - for (unsigned i = 0; i < n; i++) { - data.f[m*i+j] += op[0]->value.f[i+n*j]; - } - } - } else { - /* Unsupported builtin - some are not allowed in constant expressions. */ - return NULL; + ir_variable *var = (ir_variable *)parameter_info; + hash_table_insert(deref_hash, constant, var); + + parameter_info = parameter_info->next; } - if (expr != NULL) - return expr->constant_expression_value(); + ir_constant *result = NULL; - return new(mem_ctx) ir_constant(this->type, &data); + /* Now run the builtin function until something non-constant + * happens or we get the result. + */ + if (constant_expression_evaluate_expression_list(origin ? origin->body : body, deref_hash, &result) && result) + result = result->clone(ralloc_parent(this), NULL); + + hash_table_dtor(deref_hash); + + return result; } diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_expression_flattening.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_expression_flattening.cpp index ce8c20487..77447f55a 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_expression_flattening.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_expression_flattening.cpp @@ -27,10 +27,8 @@ * Takes the leaves of expression trees and makes them dereferences of * assignments of the leaves to temporaries, according to a predicate. * - * This is used for automatic function inlining, where we want to take - * an expression containing a call and move the call out to its own - * assignment so that we can inline it at the appropriate place in the - * instruction stream. + * This is used for breaking down matrix operations, where it's easier to + * create a temporary and work on each of its vector components individually. */ #include "ir.h" diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_function.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_function.cpp index 51d32b46f..a525693ed 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_function.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_function.cpp @@ -59,7 +59,7 @@ parameter_lists_match(const exec_list *list_a, const exec_list *list_b) const ir_variable *const param = (ir_variable *) node_a; - const ir_instruction *const actual = (ir_instruction *) node_b; + const ir_rvalue *const actual = (ir_rvalue *) node_b; if (param->type == actual->type) continue; @@ -117,6 +117,14 @@ parameter_lists_match(const exec_list *list_a, const exec_list *list_b) ir_function_signature * ir_function::matching_signature(const exec_list *actual_parameters) +{ + bool is_exact; + return matching_signature(actual_parameters, &is_exact); +} + +ir_function_signature * +ir_function::matching_signature(const exec_list *actual_parameters, + bool *is_exact) { ir_function_signature *match = NULL; bool multiple_inexact_matches = false; @@ -137,6 +145,7 @@ ir_function::matching_signature(const exec_list *actual_parameters) switch (parameter_lists_match(& sig->parameters, actual_parameters)) { case PARAMETER_LIST_EXACT_MATCH: + *is_exact = true; return sig; case PARAMETER_LIST_INEXACT_MATCH: if (match == NULL) @@ -159,6 +168,8 @@ ir_function::matching_signature(const exec_list *actual_parameters) * FINISHME: a "no matching signature" error; it should report that the * FINISHME: call is ambiguous. But reporting errors from here is hard. */ + *is_exact = false; + if (multiple_inexact_matches) return NULL; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_function_can_inline.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_function_can_inline.cpp index 055fb42a3..7b15d5df1 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_function_can_inline.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_function_can_inline.cpp @@ -59,9 +59,7 @@ bool can_inline(ir_call *call) { ir_function_can_inline_visitor v; - const ir_function_signature *callee = call->get_callee(); - if (callee->is_builtin) - return false; + const ir_function_signature *callee = call->callee; if (!callee->is_defined) return false; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_function_detect_recursion.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_function_detect_recursion.cpp index 8f805bf1b..0a5e647cd 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_function_detect_recursion.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_function_detect_recursion.cpp @@ -217,7 +217,7 @@ public: if (this->current == NULL) return visit_continue; - function *const target = this->get_function(call->get_callee()); + function *const target = this->get_function(call->callee); /* Create a link from the caller to the callee. */ @@ -289,6 +289,8 @@ emit_errors_unlinked(const void *key, void *data, void *closure) function *f = (function *) data; YYLTYPE loc; + (void) key; + char *proto = prototype_string(f->sig->return_type, f->sig->function_name(), &f->sig->parameters); @@ -308,6 +310,8 @@ emit_errors_linked(const void *key, void *data, void *closure) (struct gl_shader_program *) closure; function *f = (function *) data; + (void) key; + char *proto = prototype_string(f->sig->return_type, f->sig->function_name(), &f->sig->parameters); diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.cpp index b5eacd6d2..f24414046 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.cpp @@ -32,6 +32,15 @@ ir_hierarchical_visitor::ir_hierarchical_visitor() this->in_assignee = false; } +ir_visitor_status +ir_hierarchical_visitor::visit(ir_rvalue *ir) +{ + if (this->callback != NULL) + this->callback(ir, this->data); + + return visit_continue; +} + ir_visitor_status ir_hierarchical_visitor::visit(ir_variable *ir) { diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.h b/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.h index bba046db4..143eb7c88 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir_hierarchical_visitor.h @@ -82,6 +82,7 @@ public: * \name Visit methods for leaf-node classes */ /*@{*/ + virtual ir_visitor_status visit(class ir_rvalue *); virtual ir_visitor_status visit(class ir_variable *); virtual ir_visitor_status visit(class ir_constant *); virtual ir_visitor_status visit(class ir_loop_jump *); diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_hv_accept.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_hv_accept.cpp index 8bb578864..c29d357f1 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_hv_accept.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_hv_accept.cpp @@ -65,6 +65,13 @@ visit_list_elements(ir_hierarchical_visitor *v, exec_list *l, } +ir_visitor_status +ir_rvalue::accept(ir_hierarchical_visitor *v) +{ + return v->visit(this); +} + + ir_visitor_status ir_variable::accept(ir_hierarchical_visitor *v) { @@ -180,18 +187,8 @@ ir_texture::accept(ir_hierarchical_visitor *v) if (s != visit_continue) return (s == visit_continue_with_parent) ? visit_continue : s; - s = this->coordinate->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - if (this->projector) { - s = this->projector->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - if (this->shadow_comparitor) { - s = this->shadow_comparitor->accept(v); + if (this->coordinate) { + s = this->coordinate->accept(v); if (s != visit_continue) return (s == visit_continue_with_parent) ? visit_continue : s; } @@ -212,6 +209,7 @@ ir_texture::accept(ir_hierarchical_visitor *v) break; case ir_txl: case ir_txf: + case ir_txs: s = this->lod_info.lod->accept(v); if (s != visit_continue) return (s == visit_continue_with_parent) ? visit_continue : s; @@ -323,6 +321,14 @@ ir_call::accept(ir_hierarchical_visitor *v) if (s != visit_continue) return (s == visit_continue_with_parent) ? visit_continue : s; + if (this->return_deref != NULL) { + v->in_assignee = true; + s = this->return_deref->accept(v); + v->in_assignee = false; + if (s != visit_continue) + return (s == visit_continue_with_parent) ? visit_continue : s; + } + s = visit_list_elements(v, &this->actual_parameters, false); if (s == visit_stop) return s; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_optimization.h b/3rdparty/glsl-optimizer/src/glsl/ir_optimization.h index f7808bdda..cd0fc2c1b 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_optimization.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir_optimization.h @@ -29,14 +29,17 @@ */ /* Operations for lower_instructions() */ -#define SUB_TO_ADD_NEG 0x01 -#define DIV_TO_MUL_RCP 0x02 -#define EXP_TO_EXP2 0x04 -#define POW_TO_EXP2 0x08 -#define LOG_TO_LOG2 0x10 -#define MOD_TO_FRACT 0x20 +#define SUB_TO_ADD_NEG 0x01 +#define DIV_TO_MUL_RCP 0x02 +#define EXP_TO_EXP2 0x04 +#define POW_TO_EXP2 0x08 +#define LOG_TO_LOG2 0x10 +#define MOD_TO_FRACT 0x20 +#define INT_DIV_TO_MUL_RCP 0x40 -bool do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iterations); +bool do_common_optimization(exec_list *ir, bool linked, + bool uniform_locations_assigned, + unsigned max_unroll_iterations); bool do_algebraic(exec_list *instructions); bool do_constant_folding(exec_list *instructions); @@ -45,13 +48,12 @@ bool do_constant_variable_unlinked(exec_list *instructions); bool do_copy_propagation(exec_list *instructions); bool do_copy_propagation_elements(exec_list *instructions); bool do_constant_propagation(exec_list *instructions); -bool do_dead_code(exec_list *instructions); +bool do_dead_code(exec_list *instructions, bool uniform_locations_assigned); bool do_dead_code_local(exec_list *instructions); bool do_dead_code_unlinked(exec_list *instructions); bool do_dead_functions(exec_list *instructions); bool do_function_inlining(exec_list *instructions); bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool lower_sub_return = true, bool lower_main_return = false, bool lower_continue = false, bool lower_break = false); -bool do_lower_texture_projection(exec_list *instructions); bool do_if_simplification(exec_list *instructions); bool do_discard_simplification(exec_list *instructions); bool lower_if_to_cond_assign(exec_list *instructions, unsigned max_depth = 0); @@ -63,12 +65,17 @@ bool do_tree_grafting(exec_list *instructions); bool do_vec_index_to_cond_assign(exec_list *instructions); bool do_vec_index_to_swizzle(exec_list *instructions); bool lower_discard(exec_list *instructions); +void lower_discard_flow(exec_list *instructions); bool lower_instructions(exec_list *instructions, unsigned what_to_lower); bool lower_noise(exec_list *instructions); bool lower_variable_index_to_cond_assign(exec_list *instructions, bool lower_input, bool lower_output, bool lower_temp, bool lower_uniform); bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz); +bool lower_clip_distance(exec_list *instructions); +void lower_output_reads(exec_list *instructions); +void lower_ubo_reference(struct gl_shader *shader, exec_list *instructions); bool optimize_redundant_jumps(exec_list *instructions); +bool optimize_split_arrays(exec_list *instructions, bool linked); ir_rvalue * compare_index_block(exec_list *instructions, ir_variable *index, diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp index b518bdfc6..b2a0c89d7 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp @@ -46,30 +46,30 @@ static inline const char* get_precision_string (glsl_precision p) struct ga_entry : public exec_node { - ga_entry(ir_assignment *ass) + ga_entry(ir_instruction* ir) { - assert(ass); - this->ass = ass; + assert(ir); + this->ir = ir; } - ir_assignment* ass; + ir_instruction* ir; }; struct global_print_tracker { global_print_tracker () { mem_ctx = ralloc_context(0); - temp_var_counter = 0; - temp_var_hash = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare); + var_counter = 0; + var_hash = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare); main_function_done = false; } ~global_print_tracker() { - hash_table_dtor (temp_var_hash); + hash_table_dtor (var_hash); ralloc_free(mem_ctx); } - unsigned temp_var_counter; - hash_table* temp_var_hash; + unsigned var_counter; + hash_table* var_hash; exec_list global_assignements; void* mem_ctx; bool main_function_done; @@ -77,13 +77,14 @@ struct global_print_tracker { class ir_print_glsl_visitor : public ir_visitor { public: - ir_print_glsl_visitor(char* buf, global_print_tracker* globals_, PrintGlslMode mode_, bool use_precision_) + ir_print_glsl_visitor(char* buf, global_print_tracker* globals_, PrintGlslMode mode_, bool use_precision_, const _mesa_glsl_parse_state* state_) { indentation = 0; buffer = buf; globals = globals_; mode = mode_; use_precision = use_precision_; + state = state_; } virtual ~ir_print_glsl_visitor() @@ -93,7 +94,7 @@ public: void indent(void); void print_var_name (ir_variable* v); - void print_precision (ir_instruction* ir); + void print_precision (ir_instruction* ir, const glsl_type* type); virtual void visit(ir_variable *); virtual void visit(ir_function_signature *); @@ -116,6 +117,7 @@ public: int indentation; char* buffer; global_print_tracker* globals; + const _mesa_glsl_parse_state* state; PrintGlslMode mode; bool use_precision; }; @@ -127,12 +129,16 @@ _mesa_print_ir_glsl(exec_list *instructions, char* buffer, PrintGlslMode mode) { if (state) { + if (state->version_string) + ralloc_asprintf_append (&buffer, "#version %i\n", state->language_version); if (state->ARB_shader_texture_lod_enable) ralloc_strcat (&buffer, "#extension GL_ARB_shader_texture_lod : enable\n"); if (state->EXT_shader_texture_lod_enable) ralloc_strcat (&buffer, "#extension GL_EXT_shader_texture_lod : enable\n"); if (state->OES_standard_derivatives_enable) ralloc_strcat (&buffer, "#extension GL_OES_standard_derivatives : enable\n"); + if (state->EXT_shadow_samplers_enable) + ralloc_strcat (&buffer, "#extension GL_EXT_shadow_samplers : enable\n"); } if (state) { ir_struct_usage_visitor v; @@ -171,7 +177,7 @@ _mesa_print_ir_glsl(exec_list *instructions, continue; } - ir_print_glsl_visitor v (buffer, >racker, mode, state->es_shader); + ir_print_glsl_visitor v (buffer, >racker, mode, state->es_shader, state); ir->accept(&v); buffer = v.buffer; if (ir->ir_type != ir_type_function) @@ -190,27 +196,30 @@ void ir_print_glsl_visitor::indent(void) void ir_print_glsl_visitor::print_var_name (ir_variable* v) { - if (v->mode == ir_var_temporary) + long id = (long)hash_table_find (globals->var_hash, v); + if (!id && v->mode == ir_var_temporary) { - long tempID = (long)hash_table_find (globals->temp_var_hash, v); - if (tempID == 0) - { - tempID = ++globals->temp_var_counter; - hash_table_insert (globals->temp_var_hash, (void*)tempID, v); - } - ralloc_asprintf_append (&buffer, "tmpvar_%d", tempID); + id = ++globals->var_counter; + hash_table_insert (globals->var_hash, (void*)id, v); } + if (id) + { + if (v->mode == ir_var_temporary) + ralloc_asprintf_append (&buffer, "tmpvar_%d", id); + else + ralloc_asprintf_append (&buffer, "%s_%d", v->name, id); + } else { ralloc_asprintf_append (&buffer, "%s", v->name); } } -void ir_print_glsl_visitor::print_precision (ir_instruction* ir) +void ir_print_glsl_visitor::print_precision (ir_instruction* ir, const glsl_type* type) { if (!this->use_precision) return; - if (ir->type && !ir->type->is_float() && (!ir->type->is_array() || !ir->type->element_type()->is_float())) + if (type && !type->is_float() && (!type->is_array() || !type->element_type()->is_float())) return; glsl_precision prec = precision_from_ir(ir); if (prec == glsl_precision_high || prec == glsl_precision_undefined) @@ -259,22 +268,45 @@ void ir_print_glsl_visitor::visit(ir_variable *ir) { "", "uniform ", "attribute ", "varying ", "inout ", "", "", "" }, { "", "uniform ", "varying ", "out ", "inout ", "", "", "" }, }; - const char *const interp[] = { "", "flat ", "noperspective " }; + const char *const interp[] = { "", "smooth ", "flat ", "noperspective " }; + + int decormode = this->mode; + // GLSL 1.30 and up use "in" and "out" for everything + if (this->state->language_version >= 130) + { + decormode = 0; + } + + // give an id to any variable defined in a function that is not an uniform + if ((this->mode == kPrintGlslNone && ir->mode != ir_var_uniform)) + { + long id = (long)hash_table_find (globals->var_hash, ir); + if (id == 0) + { + id = ++globals->var_counter; + hash_table_insert (globals->var_hash, (void*)id, ir); + } + } ralloc_asprintf_append (&buffer, "%s%s%s%s", - cent, inv, mode[this->mode][ir->mode], interp[ir->interpolation]); - print_precision (ir); + cent, inv, interp[ir->interpolation], mode[decormode][ir->mode]); + print_precision (ir, ir->type); buffer = print_type(buffer, ir->type, false); ralloc_asprintf_append (&buffer, " "); print_var_name (ir); buffer = print_type_post(buffer, ir->type, false); + + if (ir->constant_value && ir->mode != ir_var_in && ir->mode != ir_var_out && ir->mode != ir_var_inout) + { + ralloc_asprintf_append (&buffer, " = "); + visit (ir->constant_value); + } } void ir_print_glsl_visitor::visit(ir_function_signature *ir) { - this->globals->temp_var_counter = 0; - print_precision (ir); + print_precision (ir, ir->return_type); buffer = print_type(buffer, ir->return_type, true); ralloc_asprintf_append (&buffer, " %s (", ir->function_name()); @@ -318,7 +350,7 @@ void ir_print_glsl_visitor::visit(ir_function_signature *ir) globals->main_function_done = true; foreach_iter(exec_list_iterator, it, globals->global_assignements) { - ir_assignment* as = ((ga_entry *)it.get())->ass; + ir_instruction* as = ((ga_entry *)it.get())->ir; as->accept(this); ralloc_asprintf_append(&buffer, ";\n"); } @@ -343,7 +375,7 @@ void ir_print_glsl_visitor::visit(ir_function *ir) foreach_iter(exec_list_iterator, iter, *ir) { ir_function_signature *const sig = (ir_function_signature *) iter.get(); - if (sig->is_defined || !sig->is_builtin) + if (!sig->is_builtin) found_non_builtin_proto = true; } if (!found_non_builtin_proto) @@ -375,19 +407,25 @@ static const char *const operator_glsl_strs[] = { "1.0/", "inversesqrt", "sqrt", + "normalize", "exp", "log", "exp2", "log2", - "int", - "float", - "bool", - "float", - "bool", - "int", - "float", - "int", - "int", + "int", // f2i + "int", // f2u + "float", // i2f + "bool", // f2b + "float", // b2f + "bool", // i2b + "int", // b2i + "float", // u2f + "int", // i2u + "int", // u2i + "float", // bit i2f + "int", // bit f2i + "float", // bit u2f + "int", // bit f2u "any", "trunc", "ceil", @@ -426,13 +464,40 @@ static const char *const operator_glsl_strs[] = { "min", "max", "pow", + "uboloadTODO", + "clamp", + "mix", "vectorTODO", }; +static const char *const operator_vec_glsl_strs[] = { + "lessThan", + "greaterThan", + "lessThanEqual", + "greaterThanEqual", + "equal", + "notEqual", +}; + + +static bool is_binop_func_like(ir_expression_operation op, const glsl_type* type) +{ + if (op == ir_binop_equal || + op == ir_binop_nequal || + op == ir_binop_mod || + (op >= ir_binop_dot && op <= ir_binop_pow)) + return true; + if (type->is_vector() && (op >= ir_binop_less && op <= ir_binop_nequal)) + { + return true; + } + return false; +} + void ir_print_glsl_visitor::visit(ir_expression *ir) { if (ir->get_num_operands() == 1) { - if (ir->operation >= ir_unop_f2i && ir->operation <= ir_unop_u2f) { + if (ir->operation >= ir_unop_f2i && ir->operation < ir_unop_any) { buffer = print_type(buffer, ir->type, true); ralloc_asprintf_append(&buffer, "("); } else if (ir->operation == ir_unop_rcp) { @@ -447,10 +512,7 @@ void ir_print_glsl_visitor::visit(ir_expression *ir) ralloc_asprintf_append (&buffer, ")"); } } - else if (ir->operation == ir_binop_equal || - ir->operation == ir_binop_nequal || - ir->operation == ir_binop_mod || - ir->operation == ir_binop_dot) + else if (is_binop_func_like(ir->operation, ir->type)) { if (ir->operation == ir_binop_mod) { @@ -458,7 +520,11 @@ void ir_print_glsl_visitor::visit(ir_expression *ir) buffer = print_type(buffer, ir->type, true); ralloc_asprintf_append (&buffer, "("); } - ralloc_asprintf_append (&buffer, "%s (", operator_glsl_strs[ir->operation]); + if (ir->type->is_vector() && (ir->operation >= ir_binop_less && ir->operation <= ir_binop_nequal)) + ralloc_asprintf_append (&buffer, "%s (", operator_vec_glsl_strs[ir->operation-ir_binop_less]); + else + ralloc_asprintf_append (&buffer, "%s (", operator_glsl_strs[ir->operation]); + if (ir->operands[0]) ir->operands[0]->accept(this); ralloc_asprintf_append (&buffer, ", "); @@ -468,7 +534,8 @@ void ir_print_glsl_visitor::visit(ir_expression *ir) if (ir->operation == ir_binop_mod) ralloc_asprintf_append (&buffer, "))"); } - else { + else if (ir->get_num_operands() == 2) + { ralloc_asprintf_append (&buffer, "("); if (ir->operands[0]) ir->operands[0]->accept(this); @@ -479,18 +546,81 @@ void ir_print_glsl_visitor::visit(ir_expression *ir) ir->operands[1]->accept(this); ralloc_asprintf_append (&buffer, ")"); } - + else + { + // ternary op + ralloc_asprintf_append (&buffer, "%s (", operator_glsl_strs[ir->operation]); + if (ir->operands[0]) + ir->operands[0]->accept(this); + ralloc_asprintf_append (&buffer, ", "); + if (ir->operands[1]) + ir->operands[1]->accept(this); + ralloc_asprintf_append (&buffer, ", "); + if (ir->operands[2]) + ir->operands[2]->accept(this); + ralloc_asprintf_append (&buffer, ")"); + } } +// [glsl_sampler_dim] +static const char* tex_sampler_dim_name[] = { + "1D", "2D", "3D", "Cube", "Rect", "Buf", +}; +static int tex_sampler_dim_size[] = { + 1, 2, 3, 3, 2, 2, +}; + void ir_print_glsl_visitor::visit(ir_texture *ir) { - ralloc_asprintf_append (&buffer, "(%s ", ir->opcode_string()); - - ir->sampler->accept(this); - ralloc_asprintf_append (&buffer, " "); - - ir->coordinate->accept(this); + glsl_sampler_dim sampler_dim = (glsl_sampler_dim)ir->sampler->type->sampler_dimensionality; + const bool is_shadow = ir->sampler->type->sampler_shadow; + const glsl_type* uv_type = ir->coordinate->type; + const int uv_dim = uv_type->vector_elements; + int sampler_uv_dim = tex_sampler_dim_size[sampler_dim]; + if (is_shadow) + sampler_uv_dim = 3; + const bool is_proj = (uv_dim > sampler_uv_dim); + + // texture function name + ralloc_asprintf_append (&buffer, "%s", is_shadow ? "shadow" : "texture"); + ralloc_asprintf_append (&buffer, "%s", tex_sampler_dim_name[sampler_dim]); + + if (is_proj) + ralloc_asprintf_append (&buffer, "Proj"); + if (ir->op == ir_txl) + ralloc_asprintf_append (&buffer, "Lod"); + + if (is_shadow) + { + if (state->EXT_shadow_samplers_enable && state->es_shader) + ralloc_asprintf_append (&buffer, "EXT"); + } + + ralloc_asprintf_append (&buffer, " ("); + + // sampler + ir->sampler->accept(this); + ralloc_asprintf_append (&buffer, ", "); + + // texture coordinate + ir->coordinate->accept(this); + + // lod bias + if (ir->op == ir_txb) + { + ralloc_asprintf_append (&buffer, ", "); + ir->lod_info.bias->accept(this); + } + + // lod + if (ir->op == ir_txl) + { + ralloc_asprintf_append (&buffer, ", "); + ir->lod_info.lod->accept(this); + } + + /* if (ir->offset != NULL) { ir->offset->accept(this); @@ -530,6 +660,7 @@ void ir_print_glsl_visitor::visit(ir_texture *ir) ralloc_asprintf_append (&buffer, ")"); break; }; + */ ralloc_asprintf_append (&buffer, ")"); } @@ -543,7 +674,7 @@ void ir_print_glsl_visitor::visit(ir_swizzle *ir) ir->mask.w, }; - if (ir->val->type == glsl_type::float_type) + if (ir->val->type == glsl_type::float_type || ir->val->type == glsl_type::int_type) { if (ir->mask.num_components != 1) { @@ -554,7 +685,7 @@ void ir_print_glsl_visitor::visit(ir_swizzle *ir) ir->val->accept(this); - if (ir->val->type == glsl_type::float_type) + if (ir->val->type == glsl_type::float_type || ir->val->type == glsl_type::int_type) { if (ir->mask.num_components != 1) { @@ -594,7 +725,7 @@ void ir_print_glsl_visitor::visit(ir_dereference_record *ir) void ir_print_glsl_visitor::visit(ir_assignment *ir) { - // assignement in global scope are postponed to main function + // assignments in global scope are postponed to main function if (this->mode != kPrintGlslNone) { assert (!this->globals->main_function_done); @@ -657,10 +788,42 @@ void ir_print_glsl_visitor::visit(ir_assignment *ir) static char* print_float (char* buffer, float f) { - const char* fmt = "%.6g"; - if (fabsf(fmodf(f,1.0f)) < 0.00001f) - fmt = "%.1f"; - ralloc_asprintf_append (&buffer, fmt, f); + // Kind of roundabout way, but this is to satisfy two things: + // * MSVC and gcc-based compilers differ a bit in how they treat float + // widht/precision specifiers. Want to match for tests. + // * GLSL (early version at least) require floats to have ".0" or + // exponential notation. + char tmp[64]; + snprintf(tmp, 64, "%.6g", f); + + char* posE = NULL; + posE = strchr(tmp, 'e'); + if (!posE) + posE = strchr(tmp, 'E'); + + #if _MSC_VER + // While gcc would print something like 1.0e+07, MSVC will print 1.0e+007 - + // only for exponential notation, it seems, will add one extra useless zero. Let's try to remove + // that so compiler output matches. + if (posE != NULL) + { + if((posE[1] == '+' || posE[1] == '-') && posE[2] == '0') + { + char* p = posE+2; + while (p[0]) + { + p[0] = p[1]; + ++p; + } + } + } + #endif + + ralloc_strcat (&buffer, tmp); + + // need to append ".0"? + if (!strchr(tmp,'.') && (posE == NULL)) + ralloc_strcat(&buffer, ".0"); return buffer; } @@ -691,7 +854,11 @@ void ir_print_glsl_visitor::visit(ir_constant *ir) if (ir->type->is_array()) { for (unsigned i = 0; i < ir->type->length; i++) + { + if (i != 0) + ralloc_asprintf_append (&buffer, ", "); ir->get_array_element(i)->accept(this); + } } else { bool first = true; for (unsigned i = 0; i < ir->type->components(); i++) { @@ -714,6 +881,21 @@ void ir_print_glsl_visitor::visit(ir_constant *ir) void ir_print_glsl_visitor::visit(ir_call *ir) { + // calls in global scope are postponed to main function + if (this->mode != kPrintGlslNone) + { + assert (!this->globals->main_function_done); + this->globals->global_assignements.push_tail (new(this->globals->mem_ctx) ga_entry(ir)); + ralloc_asprintf_append(&buffer, "//"); // for the ; that will follow (ugly, I know) + return; + } + + if (ir->return_deref) + { + visit(ir->return_deref); + ralloc_asprintf_append (&buffer, " = "); + } + ralloc_asprintf_append (&buffer, "%s (", ir->callee_name()); bool first = true; foreach_iter(exec_list_iterator, iter, *ir) { diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.cpp index 518910bd1..de048cec0 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.cpp @@ -24,10 +24,7 @@ #include "ir_print_visitor.h" #include "glsl_types.h" #include "glsl_parser_extras.h" - -extern "C" { #include "program/hash_table.h" -} static void print_type(const glsl_type *t); @@ -138,6 +135,10 @@ print_type(const glsl_type *t) } } +void ir_print_visitor::visit(ir_rvalue *ir) +{ + printf("error"); +} void ir_print_visitor::visit(ir_variable *ir) { @@ -147,7 +148,7 @@ void ir_print_visitor::visit(ir_variable *ir) const char *const inv = (ir->invariant) ? "invariant " : ""; const char *const mode[] = { "", "uniform ", "in ", "out ", "inout ", "const_in ", "sys ", "temporary " }; - const char *const interp[] = { "", "flat", "noperspective" }; + const char *const interp[] = { "", "smooth ", "flat ", "noperspective " }; printf("(%s%s%s%s) ", cent, inv, mode[ir->mode], interp[ir->interpolation]); @@ -244,30 +245,18 @@ void ir_print_visitor::visit(ir_texture *ir) ir->sampler->accept(this); printf(" "); - ir->coordinate->accept(this); + if (ir->op != ir_txs) { + ir->coordinate->accept(this); - printf(" "); + printf(" "); - if (ir->offset != NULL) { - ir->offset->accept(this); - } else { - printf("0"); - } - - printf(" "); - - if (ir->op != ir_txf) { - if (ir->projector) - ir->projector->accept(this); - else - printf("1"); - - if (ir->shadow_comparitor) { - printf(" "); - ir->shadow_comparitor->accept(this); + if (ir->offset != NULL) { + ir->offset->accept(this); } else { - printf(" ()"); + printf("0"); } + + printf(" "); } printf(" "); @@ -280,6 +269,7 @@ void ir_print_visitor::visit(ir_texture *ir) break; case ir_txl: case ir_txf: + case ir_txs: ir->lod_info.lod->accept(this); break; case ir_txd: @@ -368,8 +358,6 @@ void ir_print_visitor::visit(ir_assignment *ir) void ir_print_visitor::visit(ir_constant *ir) { - const glsl_type *const base_type = ir->type->get_base_type(); - printf("(constant "); print_type(ir->type); printf(" ("); @@ -390,7 +378,7 @@ void ir_print_visitor::visit(ir_constant *ir) for (unsigned i = 0; i < ir->type->components(); i++) { if (i != 0) printf(" "); - switch (base_type->base_type) { + switch (ir->type->base_type) { case GLSL_TYPE_UINT: printf("%u", ir->value.u[i]); break; case GLSL_TYPE_INT: printf("%d", ir->value.i[i]); break; case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break; @@ -406,7 +394,10 @@ void ir_print_visitor::visit(ir_constant *ir) void ir_print_visitor::visit(ir_call *ir) { - printf("(call %s (", ir->callee_name()); + printf("(call %s ", ir->callee_name()); + if (ir->return_deref) + ir->return_deref->accept(this); + printf(" ("); foreach_iter(exec_list_iterator, iter, *ir) { ir_instruction *const inst = (ir_instruction *) iter.get(); diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.h b/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.h index c7136f11a..6c308f31e 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir_print_visitor.h @@ -54,6 +54,7 @@ public: * the hierarchy should not have \c visit methods. */ /*@{*/ + virtual void visit(ir_rvalue *); virtual void visit(ir_variable *); virtual void visit(ir_function_signature *); virtual void visit(ir_function *); diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_reader.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_reader.cpp index cdedec1ff..879d0af73 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_reader.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_reader.cpp @@ -51,16 +51,17 @@ private: ir_variable *read_declaration(s_expression *); ir_if *read_if(s_expression *, ir_loop *); ir_loop *read_loop(s_expression *); + ir_call *read_call(s_expression *); ir_return *read_return(s_expression *); ir_rvalue *read_rvalue(s_expression *); ir_assignment *read_assignment(s_expression *); ir_expression *read_expression(s_expression *); - ir_call *read_call(s_expression *); ir_swizzle *read_swizzle(s_expression *); ir_constant *read_constant(s_expression *); ir_texture *read_texture(s_expression *); ir_dereference *read_dereference(s_expression *); + ir_dereference_variable *read_var_ref(s_expression *); }; ir_reader::ir_reader(_mesa_glsl_parse_state *state) : state(state) @@ -79,7 +80,8 @@ _mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions, void ir_reader::read(exec_list *instructions, const char *src, bool scan_for_protos) { - s_expression *expr = s_expression::read_expression(mem_ctx, src); + void *sx_mem_ctx = ralloc_context(NULL); + s_expression *expr = s_expression::read_expression(sx_mem_ctx, src); if (expr == NULL) { ir_read_error(NULL, "couldn't parse S-Expression."); return; @@ -92,7 +94,7 @@ ir_reader::read(exec_list *instructions, const char *src, bool scan_for_protos) } read_instructions(instructions, expr, NULL); - ralloc_free(expr); + ralloc_free(sx_mem_ctx); if (debug) validate_ir_tree(instructions); @@ -347,6 +349,8 @@ ir_reader::read_instruction(s_expression *expr, ir_loop *loop_ctx) inst = read_if(list, loop_ctx); } else if (strcmp(tag->value(), "loop") == 0) { inst = read_loop(list); + } else if (strcmp(tag->value(), "call") == 0) { + inst = read_call(list); } else if (strcmp(tag->value(), "return") == 0) { inst = read_return(list); } else if (strcmp(tag->value(), "function") == 0) { @@ -403,12 +407,14 @@ ir_reader::read_declaration(s_expression *expr) var->mode = ir_var_out; } else if (strcmp(qualifier->value(), "inout") == 0) { var->mode = ir_var_inout; + } else if (strcmp(qualifier->value(), "temporary") == 0) { + var->mode = ir_var_temporary; } else if (strcmp(qualifier->value(), "smooth") == 0) { - var->interpolation = ir_var_smooth; + var->interpolation = INTERP_QUALIFIER_SMOOTH; } else if (strcmp(qualifier->value(), "flat") == 0) { - var->interpolation = ir_var_flat; + var->interpolation = INTERP_QUALIFIER_FLAT; } else if (strcmp(qualifier->value(), "noperspective") == 0) { - var->interpolation = ir_var_noperspective; + var->interpolation = INTERP_QUALIFIER_NOPERSPECTIVE; } else { ir_read_error(expr, "unknown qualifier: %s", qualifier->value()); return NULL; @@ -520,8 +526,6 @@ ir_reader::read_rvalue(s_expression *expr) rvalue = read_swizzle(list); } else if (strcmp(tag->value(), "expression") == 0) { rvalue = read_expression(list); - } else if (strcmp(tag->value(), "call") == 0) { - rvalue = read_call(list); } else if (strcmp(tag->value(), "constant") == 0) { rvalue = read_constant(list); } else { @@ -609,10 +613,20 @@ ir_reader::read_call(s_expression *expr) { s_symbol *name; s_list *params; + s_list *s_return = NULL; - s_pattern pat[] = { "call", name, params }; - if (!MATCH(expr, pat)) { - ir_read_error(expr, "expected (call ( ...))"); + ir_dereference_variable *return_deref = NULL; + + s_pattern void_pat[] = { "call", name, params }; + s_pattern non_void_pat[] = { "call", name, s_return, params }; + if (MATCH(expr, non_void_pat)) { + return_deref = read_var_ref(s_return); + if (return_deref == NULL) { + ir_read_error(s_return, "when reading a call's return storage"); + return NULL; + } + } else if (!MATCH(expr, void_pat)) { + ir_read_error(expr, "expected (call [] ( ...))"); return NULL; } @@ -642,7 +656,15 @@ ir_reader::read_call(s_expression *expr) return NULL; } - return new(mem_ctx) ir_call(callee, ¶meters); + if (callee->return_type == glsl_type::void_type && return_deref) { + ir_read_error(expr, "call has return value storage but void type"); + return NULL; + } else if (callee->return_type != glsl_type::void_type && !return_deref) { + ir_read_error(expr, "call has non-void type but no return value storage"); + return NULL; + } + + return new(mem_ctx) ir_call(callee, return_deref, ¶meters); } ir_expression * @@ -659,6 +681,7 @@ ir_reader::read_expression(s_expression *expr) return NULL; } s_expression *s_arg2 = (s_expression *) s_arg1->next; // may be tail sentinel + s_expression *s_arg3 = s_arg2->is_tail_sentinel() ? s_arg2 : (s_expression*)s_arg2->next; // may be tail sentinel const glsl_type *type = read_type(s_type); if (type == NULL) @@ -680,6 +703,7 @@ ir_reader::read_expression(s_expression *expr) ir_rvalue *arg1 = read_rvalue(s_arg1); ir_rvalue *arg2 = NULL; + ir_rvalue *arg3 = NULL; if (arg1 == NULL) { ir_read_error(NULL, "when reading first operand of %s", s_op->value()); return NULL; @@ -698,8 +722,28 @@ ir_reader::read_expression(s_expression *expr) return NULL; } } - - return new(mem_ctx) ir_expression(op, type, arg1, arg2); + + if (num_operands == 3) { + if (s_arg2->is_tail_sentinel() || s_arg3->is_tail_sentinel() || !s_arg3->next->is_tail_sentinel()) { + ir_read_error(expr, "expected (expression %s " + " )", s_op->value()); + return NULL; + } + arg2 = read_rvalue(s_arg2); + if (arg2 == NULL) { + ir_read_error(NULL, "when reading second operand of %s", + s_op->value()); + return NULL; + } + arg3 = read_rvalue(s_arg3); + if (arg3 == NULL) { + ir_read_error(NULL, "when reading third operand of %s", + s_op->value()); + return NULL; + } + } + + return new(mem_ctx) ir_expression(op, type, arg1, arg2, arg3); } ir_swizzle * @@ -772,12 +816,10 @@ ir_reader::read_constant(s_expression *expr) return new(mem_ctx) ir_constant(type, &elements); } - const glsl_type *const base_type = type->get_base_type(); - ir_constant_data data = { { 0 } }; // Read in list of values (at most 16). - int k = 0; + unsigned k = 0; foreach_iter(exec_list_iterator, it, values->subexpressions) { if (k >= 16) { ir_read_error(values, "expected at most 16 numbers"); @@ -786,7 +828,7 @@ ir_reader::read_constant(s_expression *expr) s_expression *expr = (s_expression*) it.get(); - if (base_type->base_type == GLSL_TYPE_FLOAT) { + if (type->base_type == GLSL_TYPE_FLOAT) { s_number *value = SX_AS_NUMBER(expr); if (value == NULL) { ir_read_error(values, "expected numbers"); @@ -800,7 +842,7 @@ ir_reader::read_constant(s_expression *expr) return NULL; } - switch (base_type->base_type) { + switch (type->base_type) { case GLSL_TYPE_UINT: { data.u[k] = value->value(); break; @@ -820,21 +862,20 @@ ir_reader::read_constant(s_expression *expr) } ++k; } + if (k != type->components()) { + ir_read_error(values, "expected %u constant values, found %u", + type->components(), k); + return NULL; + } return new(mem_ctx) ir_constant(type, &data); } -ir_dereference * -ir_reader::read_dereference(s_expression *expr) +ir_dereference_variable * +ir_reader::read_var_ref(s_expression *expr) { s_symbol *s_var; - s_expression *s_subject; - s_expression *s_index; - s_symbol *s_field; - s_pattern var_pat[] = { "var_ref", s_var }; - s_pattern array_pat[] = { "array_ref", s_subject, s_index }; - s_pattern record_pat[] = { "record_ref", s_subject, s_field }; if (MATCH(expr, var_pat)) { ir_variable *var = state->symbols->get_variable(s_var->value()); @@ -843,6 +884,23 @@ ir_reader::read_dereference(s_expression *expr) return NULL; } return new(mem_ctx) ir_dereference_variable(var); + } + return NULL; +} + +ir_dereference * +ir_reader::read_dereference(s_expression *expr) +{ + s_expression *s_subject; + s_expression *s_index; + s_symbol *s_field; + + s_pattern array_pat[] = { "array_ref", s_subject, s_index }; + s_pattern record_pat[] = { "record_ref", s_subject, s_field }; + + ir_dereference_variable *var_ref = read_var_ref(expr); + if (var_ref != NULL) { + return var_ref; } else if (MATCH(expr, array_pat)) { ir_rvalue *subject = read_rvalue(s_subject); if (subject == NULL) { @@ -875,23 +933,25 @@ ir_reader::read_texture(s_expression *expr) s_expression *s_sampler = NULL; s_expression *s_coord = NULL; s_expression *s_offset = NULL; - s_expression *s_proj = NULL; - s_list *s_shadow = NULL; s_expression *s_lod = NULL; ir_texture_opcode op = ir_tex; /* silence warning */ s_pattern tex_pattern[] = - { "tex", s_type, s_sampler, s_coord, s_offset, s_proj, s_shadow }; + { "tex", s_type, s_sampler, s_coord, s_offset }; s_pattern txf_pattern[] = { "txf", s_type, s_sampler, s_coord, s_offset, s_lod }; + s_pattern txs_pattern[] = + { "txs", s_type, s_sampler, s_lod }; s_pattern other_pattern[] = - { tag, s_type, s_sampler, s_coord, s_offset, s_proj, s_shadow, s_lod }; + { tag, s_type, s_sampler, s_coord, s_offset, s_lod }; if (MATCH(expr, tex_pattern)) { op = ir_tex; } else if (MATCH(expr, txf_pattern)) { op = ir_txf; + } else if (MATCH(expr, txs_pattern)) { + op = ir_txs; } else if (MATCH(expr, other_pattern)) { op = ir_texture::get_opcode(tag->value()); if (op == -1) @@ -920,44 +980,21 @@ ir_reader::read_texture(s_expression *expr) } tex->set_sampler(sampler, type); - // Read coordinate (any rvalue) - tex->coordinate = read_rvalue(s_coord); - if (tex->coordinate == NULL) { - ir_read_error(NULL, "when reading coordinate in (%s ...)", - tex->opcode_string()); - return NULL; - } - - // Read texel offset - either 0 or an rvalue. - s_int *si_offset = SX_AS_INT(s_offset); - if (si_offset == NULL || si_offset->value() != 0) { - tex->offset = read_rvalue(s_offset); - if (tex->offset == NULL) { - ir_read_error(s_offset, "expected 0 or an expression"); + if (op != ir_txs) { + // Read coordinate (any rvalue) + tex->coordinate = read_rvalue(s_coord); + if (tex->coordinate == NULL) { + ir_read_error(NULL, "when reading coordinate in (%s ...)", + tex->opcode_string()); return NULL; } - } - if (op != ir_txf) { - s_int *proj_as_int = SX_AS_INT(s_proj); - if (proj_as_int && proj_as_int->value() == 1) { - tex->projector = NULL; - } else { - tex->projector = read_rvalue(s_proj); - if (tex->projector == NULL) { - ir_read_error(NULL, "when reading projective divide in (%s ..)", - tex->opcode_string()); - return NULL; - } - } - - if (s_shadow->subexpressions.is_empty()) { - tex->shadow_comparitor = NULL; - } else { - tex->shadow_comparitor = read_rvalue(s_shadow); - if (tex->shadow_comparitor == NULL) { - ir_read_error(NULL, "when reading shadow comparitor in (%s ..)", - tex->opcode_string()); + // Read texel offset - either 0 or an rvalue. + s_int *si_offset = SX_AS_INT(s_offset); + if (si_offset == NULL || si_offset->value() != 0) { + tex->offset = read_rvalue(s_offset); + if (tex->offset == NULL) { + ir_read_error(s_offset, "expected 0 or an expression"); return NULL; } } @@ -973,6 +1010,7 @@ ir_reader::read_texture(s_expression *expr) break; case ir_txl: case ir_txf: + case ir_txs: tex->lod_info.lod = read_rvalue(s_lod); if (tex->lod_info.lod == NULL) { ir_read_error(NULL, "when reading LOD in (%s ...)", diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.cpp index ed6c7cb6a..91feab567 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.cpp @@ -36,7 +36,7 @@ #include "glsl_types.h" ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_expression *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_expression *ir) { unsigned int operand; @@ -48,11 +48,9 @@ ir_rvalue_visitor::visit_leave(ir_expression *ir) } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_texture *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_texture *ir) { handle_rvalue(&ir->coordinate); - handle_rvalue(&ir->projector); - handle_rvalue(&ir->shadow_comparitor); handle_rvalue(&ir->offset); switch (ir->op) { @@ -63,6 +61,7 @@ ir_rvalue_visitor::visit_leave(ir_texture *ir) break; case ir_txf: case ir_txl: + case ir_txs: handle_rvalue(&ir->lod_info.lod); break; case ir_txd: @@ -75,14 +74,14 @@ ir_rvalue_visitor::visit_leave(ir_texture *ir) } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_swizzle *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_swizzle *ir) { handle_rvalue(&ir->val); return visit_continue; } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_dereference_array *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_dereference_array *ir) { /* The array index is not the target of the assignment, so clear the * 'in_assignee' flag. Restore it after returning from the array index. @@ -97,14 +96,14 @@ ir_rvalue_visitor::visit_leave(ir_dereference_array *ir) } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_dereference_record *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_dereference_record *ir) { handle_rvalue(&ir->record); return visit_continue; } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_assignment *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_assignment *ir) { handle_rvalue(&ir->rhs); handle_rvalue(&ir->condition); @@ -113,7 +112,7 @@ ir_rvalue_visitor::visit_leave(ir_assignment *ir) } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_call *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_call *ir) { foreach_iter(exec_list_iterator, iter, *ir) { ir_rvalue *param = (ir_rvalue *)iter.get(); @@ -128,15 +127,124 @@ ir_rvalue_visitor::visit_leave(ir_call *ir) } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_return *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_return *ir) { handle_rvalue(&ir->value);; return visit_continue; } ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_if *ir) +ir_rvalue_base_visitor::rvalue_visit(ir_if *ir) { handle_rvalue(&ir->condition); return visit_continue; } + + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_expression *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_texture *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_swizzle *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_dereference_array *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_dereference_record *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_assignment *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_call *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_return *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_visitor::visit_leave(ir_if *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_expression *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_texture *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_swizzle *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_dereference_array *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_dereference_record *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_assignment *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_call *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_return *ir) +{ + return rvalue_visit(ir); +} + +ir_visitor_status +ir_rvalue_enter_visitor::visit_enter(ir_if *ir) +{ + return rvalue_visit(ir); +} diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.h b/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.h index 31a56beb9..2179fa5a8 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir_rvalue_visitor.h @@ -30,7 +30,22 @@ * a pointer to each rvalue in the tree. */ -class ir_rvalue_visitor : public ir_hierarchical_visitor { +class ir_rvalue_base_visitor : public ir_hierarchical_visitor { +public: + ir_visitor_status rvalue_visit(ir_assignment *); + ir_visitor_status rvalue_visit(ir_call *); + ir_visitor_status rvalue_visit(ir_dereference_array *); + ir_visitor_status rvalue_visit(ir_dereference_record *); + ir_visitor_status rvalue_visit(ir_expression *); + ir_visitor_status rvalue_visit(ir_if *); + ir_visitor_status rvalue_visit(ir_return *); + ir_visitor_status rvalue_visit(ir_swizzle *); + ir_visitor_status rvalue_visit(ir_texture *); + + virtual void handle_rvalue(ir_rvalue **rvalue) = 0; +}; + +class ir_rvalue_visitor : public ir_rvalue_base_visitor { public: virtual ir_visitor_status visit_leave(ir_assignment *); @@ -42,6 +57,18 @@ public: virtual ir_visitor_status visit_leave(ir_return *); virtual ir_visitor_status visit_leave(ir_swizzle *); virtual ir_visitor_status visit_leave(ir_texture *); - - virtual void handle_rvalue(ir_rvalue **rvalue) = 0; +}; + +class ir_rvalue_enter_visitor : public ir_rvalue_base_visitor { +public: + + virtual ir_visitor_status visit_enter(ir_assignment *); + virtual ir_visitor_status visit_enter(ir_call *); + virtual ir_visitor_status visit_enter(ir_dereference_array *); + virtual ir_visitor_status visit_enter(ir_dereference_record *); + virtual ir_visitor_status visit_enter(ir_expression *); + virtual ir_visitor_status visit_enter(ir_if *); + virtual ir_visitor_status visit_enter(ir_return *); + virtual ir_visitor_status visit_enter(ir_swizzle *); + virtual ir_visitor_status visit_enter(ir_texture *); }; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_set_program_inouts.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_set_program_inouts.cpp index 085456533..e5de07e01 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_set_program_inouts.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_set_program_inouts.cpp @@ -26,6 +26,9 @@ * * Sets the InputsRead and OutputsWritten of Mesa programs. * + * Additionally, for fragment shaders, sets the InterpQualifier array, the + * IsCentroid bitfield, and the UsesDFdy flag. + * * Mesa programs (gl_program, not gl_shader_program) have a set of * flags indicating which varyings are read and written. Computing * which are actually read from some sort of backend code can be @@ -34,19 +37,19 @@ * from the GLSL IR. */ -extern "C" { #include "main/core.h" /* for struct gl_program */ #include "program/hash_table.h" -} #include "ir.h" #include "ir_visitor.h" #include "glsl_types.h" class ir_set_program_inouts_visitor : public ir_hierarchical_visitor { public: - ir_set_program_inouts_visitor(struct gl_program *prog) + ir_set_program_inouts_visitor(struct gl_program *prog, + bool is_fragment_shader) { this->prog = prog; + this->is_fragment_shader = is_fragment_shader; this->ht = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare); @@ -58,15 +61,19 @@ public: virtual ir_visitor_status visit_enter(ir_dereference_array *); virtual ir_visitor_status visit_enter(ir_function_signature *); + virtual ir_visitor_status visit_enter(ir_expression *); + virtual ir_visitor_status visit_enter(ir_discard *); virtual ir_visitor_status visit(ir_dereference_variable *); virtual ir_visitor_status visit(ir_variable *); struct gl_program *prog; struct hash_table *ht; + bool is_fragment_shader; }; static void -mark(struct gl_program *prog, ir_variable *var, int offset, int len) +mark(struct gl_program *prog, ir_variable *var, int offset, int len, + bool is_fragment_shader) { /* As of GLSL 1.20, varyings can only be floats, floating-point * vectors or matrices, or arrays of them. For Mesa programs using @@ -77,12 +84,21 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len) */ for (int i = 0; i < len; i++) { - if (var->mode == ir_var_in) - prog->InputsRead |= BITFIELD64_BIT(var->location + offset + i); - else if (var->mode == ir_var_system_value) - prog->SystemValuesRead |= (1 << (var->location + offset + i)); - else - prog->OutputsWritten |= BITFIELD64_BIT(var->location + offset + i); + GLbitfield64 bitfield = BITFIELD64_BIT(var->location + var->index + offset + i); + if (var->mode == ir_var_in) { + prog->InputsRead |= bitfield; + if (is_fragment_shader) { + gl_fragment_program *fprog = (gl_fragment_program *) prog; + fprog->InterpQualifier[var->location + var->index + offset + i] = + (glsl_interp_qualifier) var->interpolation; + if (var->centroid) + fprog->IsCentroid |= bitfield; + } + } else if (var->mode == ir_var_system_value) { + prog->SystemValuesRead |= bitfield; + } else { + prog->OutputsWritten |= bitfield; + } } } @@ -94,12 +110,12 @@ ir_set_program_inouts_visitor::visit(ir_dereference_variable *ir) return visit_continue; if (ir->type->is_array()) { - for (unsigned int i = 0; i < ir->type->length; i++) { - mark(this->prog, ir->var, i, - ir->type->length * ir->type->fields.array->matrix_columns); - } + mark(this->prog, ir->var, 0, + ir->type->length * ir->type->fields.array->matrix_columns, + this->is_fragment_shader); } else { - mark(this->prog, ir->var, 0, ir->type->matrix_columns); + mark(this->prog, ir->var, 0, ir->type->matrix_columns, + this->is_fragment_shader); } return visit_continue; @@ -125,7 +141,8 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir) width = deref_var->type->fields.array->matrix_columns; } - mark(this->prog, var, index->value.i[0] * width, width); + mark(this->prog, var, index->value.i[0] * width, width, + this->is_fragment_shader); return visit_continue_with_parent; } @@ -154,13 +171,43 @@ ir_set_program_inouts_visitor::visit_enter(ir_function_signature *ir) return visit_continue_with_parent; } -void -do_set_program_inouts(exec_list *instructions, struct gl_program *prog) +ir_visitor_status +ir_set_program_inouts_visitor::visit_enter(ir_expression *ir) { - ir_set_program_inouts_visitor v(prog); + if (is_fragment_shader && ir->operation == ir_unop_dFdy) { + gl_fragment_program *fprog = (gl_fragment_program *) prog; + fprog->UsesDFdy = true; + } + return visit_continue; +} + +ir_visitor_status +ir_set_program_inouts_visitor::visit_enter(ir_discard *) +{ + /* discards are only allowed in fragment shaders. */ + assert(is_fragment_shader); + + gl_fragment_program *fprog = (gl_fragment_program *) prog; + fprog->UsesKill = true; + + return visit_continue; +} + +void +do_set_program_inouts(exec_list *instructions, struct gl_program *prog, + bool is_fragment_shader) +{ + ir_set_program_inouts_visitor v(prog, is_fragment_shader); prog->InputsRead = 0; prog->OutputsWritten = 0; prog->SystemValuesRead = 0; + if (is_fragment_shader) { + gl_fragment_program *fprog = (gl_fragment_program *) prog; + memset(fprog->InterpQualifier, 0, sizeof(fprog->InterpQualifier)); + fprog->IsCentroid = 0; + fprog->UsesDFdy = false; + fprog->UsesKill = false; + } visit_list_elements(&v, instructions); } diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_uniform.h b/3rdparty/glsl-optimizer/src/glsl/ir_uniform.h new file mode 100644 index 000000000..913c53773 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/ir_uniform.h @@ -0,0 +1,162 @@ +/* + * Copyright © 2011 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#pragma once +#ifndef IR_UNIFORM_H +#define IR_UNIFORM_H + + +/* stdbool.h is necessary because this file is included in both C and C++ code. + */ +#include + +#include "program/prog_parameter.h" /* For union gl_constant_value. */ + + +#ifdef __cplusplus +extern "C" { +#endif + +enum gl_uniform_driver_format { + uniform_native = 0, /**< Store data in the native format. */ + uniform_int_float, /**< Store integer data as floats. */ + uniform_bool_float, /**< Store boolean data as floats. */ + + /** + * Store boolean data as integer using 1 for \c true. + */ + uniform_bool_int_0_1, + + /** + * Store boolean data as integer using ~0 for \c true. + */ + uniform_bool_int_0_not0 +}; + +struct gl_uniform_driver_storage { + /** + * Number of bytes from one array element to the next. + */ + uint8_t element_stride; + + /** + * Number of bytes from one vector in a matrix to the next. + */ + uint8_t vector_stride; + + /** + * Base format of the stored data. + * + * This field must have a value from \c GLSL_TYPE_UINT through \c + * GLSL_TYPE_SAMPLER. + */ + uint8_t format; + + /** + * Pointer to the base of the data. + */ + void *data; +}; + +struct gl_uniform_storage { + char *name; + const struct glsl_type *type; + + /** + * The number of elements in this uniform. + * + * For non-arrays, this is always 0. For arrays, the value is the size of + * the array. + */ + unsigned array_elements; + + /** + * Has this uniform ever been set? + */ + bool initialized; + + /** + * Base sampler index + * + * If \c ::base_type is \c GLSL_TYPE_SAMPLER, this represents the index of + * this sampler. If \c ::array_elements is not zero, the array will use + * sampler indexes \c ::sampler through \c ::sampler + \c ::array_elements + * - 1, inclusive. + */ + uint8_t sampler; + + /** + * Storage used by the driver for the uniform + */ + unsigned num_driver_storage; + struct gl_uniform_driver_storage *driver_storage; + + /** + * Storage used by Mesa for the uniform + * + * This form of the uniform is used by Mesa's implementation of \c + * glGetUniform. It can also be used by drivers to obtain the value of the + * uniform if the \c ::driver_storage interface is not used. + */ + union gl_constant_value *storage; + + /** Fields for GL_ARB_uniform_buffer_object + * @{ + */ + + /** + * GL_UNIFORM_BLOCK_INDEX: index of the uniform block containing + * the uniform, or -1 for the default uniform block. Note that the + * index is into the linked program's UniformBlocks[] array, not + * the linked shader's. + */ + int block_index; + + /** GL_UNIFORM_OFFSET: byte offset within the uniform block, or -1. */ + int offset; + + /** + * GL_UNIFORM_MATRIX_STRIDE: byte stride between columns or rows of + * a matrix. Set to 0 for non-matrices in UBOs, or -1 for uniforms + * in the default uniform block. + */ + int matrix_stride; + + /** + * GL_UNIFORM_ARRAY_STRIDE: byte stride between elements of the + * array. Set to zero for non-arrays in UBOs, or -1 for uniforms + * in the default uniform block. + */ + int array_stride; + + /** GL_UNIFORM_ROW_MAJOR: true iff it's a row-major matrix in a UBO */ + bool row_major; + + /** @} */ +}; + +#ifdef __cplusplus +} +#endif + +#endif /* IR_UNIFORM_H */ diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_unused_structs.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_unused_structs.cpp index 8abae4afd..53abb85f1 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_unused_structs.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_unused_structs.cpp @@ -67,7 +67,7 @@ static void visit_variable (ir_instruction* ir, void* data) if (!var) return; ir_struct_usage_visitor* self = reinterpret_cast(data); - const glsl_type* t = ir->type; + const glsl_type* t = var->type; if (t->base_type == GLSL_TYPE_STRUCT) { if (!self->has_struct_entry (t)) diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_validate.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_validate.cpp index b3ca72ef0..f75d05e96 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_validate.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_validate.cpp @@ -33,7 +33,6 @@ * a dereference chain. */ -#include #include "ir.h" #include "ir_hierarchical_visitor.h" #include "program/hash_table.h" @@ -59,7 +58,8 @@ public: virtual ir_visitor_status visit(ir_variable *v); virtual ir_visitor_status visit(ir_dereference_variable *ir); - virtual ir_visitor_status visit(ir_if *ir); + + virtual ir_visitor_status visit_enter(ir_if *ir); virtual ir_visitor_status visit_leave(ir_loop *ir); virtual ir_visitor_status visit_enter(ir_function *ir); @@ -102,7 +102,7 @@ ir_validate::visit(ir_dereference_variable *ir) } ir_visitor_status -ir_validate::visit(ir_if *ir) +ir_validate::visit_enter(ir_if *ir) { if (ir->condition->type != glsl_type::bool_type) { printf("ir_if condition %s type instead of bool.\n", @@ -241,6 +241,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_rcp: case ir_unop_rsq: case ir_unop_sqrt: + case ir_unop_normalize: assert(ir->type == ir->operands[0]->type); break; @@ -256,6 +257,10 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); assert(ir->type->base_type == GLSL_TYPE_INT); break; + case ir_unop_f2u: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); + assert(ir->type->base_type == GLSL_TYPE_UINT); + break; case ir_unop_i2f: assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); assert(ir->type->base_type == GLSL_TYPE_FLOAT); @@ -288,6 +293,22 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); assert(ir->type->base_type == GLSL_TYPE_INT); break; + case ir_unop_bitcast_i2f: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); + assert(ir->type->base_type == GLSL_TYPE_FLOAT); + break; + case ir_unop_bitcast_f2i: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); + assert(ir->type->base_type == GLSL_TYPE_INT); + break; + case ir_unop_bitcast_u2f: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); + assert(ir->type->base_type == GLSL_TYPE_FLOAT); + break; + case ir_unop_bitcast_f2u: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); + assert(ir->type->base_type == GLSL_TYPE_UINT); + break; case ir_unop_any: assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL); @@ -403,6 +424,13 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->operands[0]->type == ir->operands[1]->type); break; + case ir_binop_ubo_load: + assert(ir->operands[0]->as_constant()); + assert(ir->operands[0]->type == glsl_type::uint_type); + + assert(ir->operands[1]->type == glsl_type::uint_type); + break; + case ir_quadop_vector: /* The vector operator collects some number of scalars and generates a * vector from them. @@ -455,7 +483,7 @@ ir_validate::visit_leave(ir_expression *ir) ir_visitor_status ir_validate::visit_leave(ir_swizzle *ir) { - int chans[4] = {ir->mask.x, ir->mask.y, ir->mask.z, ir->mask.w}; + unsigned int chans[4] = {ir->mask.x, ir->mask.y, ir->mask.z, ir->mask.w}; for (unsigned int i = 0; i < ir->type->vector_elements; i++) { if (chans[i] >= ir->val->type->vector_elements) { @@ -496,6 +524,13 @@ ir_validate::visit(ir_variable *ir) } } + if (ir->constant_initializer != NULL && !ir->has_initializer) { + printf("ir_variable didn't have an initializer, but has a constant " + "initializer value.\n"); + ir->print(); + abort(); + } + return visit_continue; } @@ -534,13 +569,24 @@ ir_validate::visit_enter(ir_assignment *ir) ir_visitor_status ir_validate::visit_enter(ir_call *ir) { - ir_function_signature *const callee = ir->get_callee(); + ir_function_signature *const callee = ir->callee; if (callee->ir_type != ir_type_function_signature) { printf("IR called by ir_call is not ir_function_signature!\n"); abort(); } + if (ir->return_deref) { + if (ir->return_deref->type != callee->return_type) { + printf("callee type %s does not match return storage type %s\n", + callee->return_type->name, ir->return_deref->type->name); + abort(); + } + } else if (callee->return_type != glsl_type::void_type) { + printf("ir_call has non-void callee but no return storage\n"); + abort(); + } + const exec_node *formal_param_node = callee->parameters.head; const exec_node *actual_param_node = ir->actual_parameters.head; while (true) { @@ -578,6 +624,7 @@ dump_ir: printf("callee:\n"); callee->print(); abort(); + return visit_stop; } void @@ -603,7 +650,9 @@ check_node_type(ir_instruction *ir, void *data) printf("Instruction node with unset type\n"); ir->print(); printf("\n"); } - assert(ir->type != glsl_type::error_type); + ir_rvalue *value = ir->as_rvalue(); + if (value != NULL) + assert(value->type != glsl_type::error_type); } void diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.cpp b/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.cpp index 7d39abb36..d971f0142 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.cpp @@ -36,7 +36,7 @@ // constructor -variable_entry::variable_entry(ir_variable *var) +ir_variable_refcount_entry::ir_variable_refcount_entry(ir_variable *var) { this->var = var; assign = NULL; @@ -46,27 +46,40 @@ variable_entry::variable_entry(ir_variable *var) } -variable_entry * +ir_variable_refcount_entry * ir_variable_refcount_visitor::get_variable_entry(ir_variable *var) { assert(var); foreach_iter(exec_list_iterator, iter, this->variable_list) { - variable_entry *entry = (variable_entry *)iter.get(); + ir_variable_refcount_entry *entry = (ir_variable_refcount_entry *)iter.get(); if (entry->var == var) return entry; } - variable_entry *entry = new(mem_ctx) variable_entry(var); + ir_variable_refcount_entry *entry = new(mem_ctx) ir_variable_refcount_entry(var); assert(entry->referenced_count == 0); this->variable_list.push_tail(entry); return entry; } +ir_variable_refcount_entry * +ir_variable_refcount_visitor::find_variable_entry(ir_variable *var) +{ + assert(var); + foreach_iter(exec_list_iterator, iter, this->variable_list) { + ir_variable_refcount_entry *entry = (ir_variable_refcount_entry *)iter.get(); + if (entry->var == var) + return entry; + } + return NULL; +} + + ir_visitor_status ir_variable_refcount_visitor::visit(ir_variable *ir) { - variable_entry *entry = this->get_variable_entry(ir); + ir_variable_refcount_entry *entry = this->get_variable_entry(ir); if (entry) entry->declaration = true; @@ -78,7 +91,7 @@ ir_visitor_status ir_variable_refcount_visitor::visit(ir_dereference_variable *ir) { ir_variable *const var = ir->variable_referenced(); - variable_entry *entry = this->get_variable_entry(var); + ir_variable_refcount_entry *entry = this->get_variable_entry(var); if (entry) entry->referenced_count++; @@ -101,7 +114,7 @@ ir_variable_refcount_visitor::visit_enter(ir_function_signature *ir) ir_visitor_status ir_variable_refcount_visitor::visit_leave(ir_assignment *ir) { - variable_entry *entry; + ir_variable_refcount_entry *entry; entry = this->get_variable_entry(ir->lhs->variable_referenced()); if (entry) { entry->assigned_count++; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.h b/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.h index 906135a9e..acde7484f 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir_variable_refcount.h @@ -33,10 +33,10 @@ #include "ir_visitor.h" #include "glsl_types.h" -class variable_entry : public exec_node +class ir_variable_refcount_entry : public exec_node { public: - variable_entry(ir_variable *var); + ir_variable_refcount_entry(ir_variable *var); ir_variable *var; /* The key: the variable's pointer. */ ir_assignment *assign; /* An assignment to the variable, if any */ @@ -69,9 +69,10 @@ public: virtual ir_visitor_status visit_enter(ir_function_signature *); virtual ir_visitor_status visit_leave(ir_assignment *); - variable_entry *get_variable_entry(ir_variable *var); + ir_variable_refcount_entry *get_variable_entry(ir_variable *var); + ir_variable_refcount_entry *find_variable_entry(ir_variable *var); - /* List of variable_entry */ + /* List of ir_variable_refcount_entry */ exec_list variable_list; void *mem_ctx; diff --git a/3rdparty/glsl-optimizer/src/glsl/ir_visitor.h b/3rdparty/glsl-optimizer/src/glsl/ir_visitor.h index 7dd35fe1d..4a00155be 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ir_visitor.h +++ b/3rdparty/glsl-optimizer/src/glsl/ir_visitor.h @@ -44,6 +44,7 @@ public: * the hierarchy should not have \c visit methods. */ /*@{*/ + virtual void visit(class ir_rvalue *) { assert(!"unhandled error_type"); } virtual void visit(class ir_variable *) = 0; virtual void visit(class ir_function_signature *) = 0; virtual void visit(class ir_function *) = 0; diff --git a/3rdparty/glsl-optimizer/src/glsl/link_functions.cpp b/3rdparty/glsl-optimizer/src/glsl/link_functions.cpp index 92c36dc95..8f577625c 100644 --- a/3rdparty/glsl-optimizer/src/glsl/link_functions.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/link_functions.cpp @@ -68,7 +68,7 @@ public: * Doing so will modify the original shader. This may prevent that * shader from being linkable in other programs. */ - const ir_function_signature *const callee = ir->get_callee(); + const ir_function_signature *const callee = ir->callee; assert(callee != NULL); const char *const name = callee->function_name(); @@ -79,7 +79,7 @@ public: find_matching_signature(name, &callee->parameters, &linked, 1, ir->use_builtin); if (sig != NULL) { - ir->set_callee(sig); + ir->callee = sig; return visit_continue; } @@ -168,7 +168,7 @@ public: */ linked_sig->accept(this); - ir->set_callee(linked_sig); + ir->callee = linked_sig; return visit_continue; } diff --git a/3rdparty/glsl-optimizer/src/glsl/link_uniform_initializers.cpp b/3rdparty/glsl-optimizer/src/glsl/link_uniform_initializers.cpp new file mode 100644 index 000000000..849e08097 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/link_uniform_initializers.cpp @@ -0,0 +1,181 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include "main/core.h" +#include "ir.h" +#include "linker.h" +#include "ir_uniform.h" +#include "glsl_symbol_table.h" +#include "program/hash_table.h" + +/* These functions are put in a "private" namespace instead of being marked + * static so that the unit tests can access them. See + * http://code.google.com/p/googletest/wiki/AdvancedGuide#Testing_Private_Code + */ +namespace linker { + +gl_uniform_storage * +get_storage(gl_uniform_storage *storage, unsigned num_storage, + const char *name) +{ + for (unsigned int i = 0; i < num_storage; i++) { + if (strcmp(name, storage[i].name) == 0) + return &storage[i]; + } + + return NULL; +} + +void +copy_constant_to_storage(union gl_constant_value *storage, + const ir_constant *val, + const enum glsl_base_type base_type, + const unsigned int elements) +{ + for (unsigned int i = 0; i < elements; i++) { + switch (base_type) { + case GLSL_TYPE_UINT: + storage[i].u = val->value.u[i]; + break; + case GLSL_TYPE_INT: + case GLSL_TYPE_SAMPLER: + storage[i].i = val->value.i[i]; + break; + case GLSL_TYPE_FLOAT: + storage[i].f = val->value.f[i]; + break; + case GLSL_TYPE_BOOL: + storage[i].b = int(val->value.b[i]); + break; + default: + /* All other types should have already been filtered by other + * paths in the caller. + */ + assert(!"Should not get here."); + break; + } + } +} + +void +set_uniform_initializer(void *mem_ctx, gl_shader_program *prog, + const char *name, const glsl_type *type, + ir_constant *val) +{ + if (type->is_record()) { + ir_constant *field_constant; + + field_constant = (ir_constant *)val->components.get_head(); + + for (unsigned int i = 0; i < type->length; i++) { + const glsl_type *field_type = type->fields.structure[i].type; + const char *field_name = ralloc_asprintf(mem_ctx, "%s.%s", name, + type->fields.structure[i].name); + set_uniform_initializer(mem_ctx, prog, field_name, + field_type, field_constant); + field_constant = (ir_constant *)field_constant->next; + } + return; + } else if (type->is_array() && type->fields.array->is_record()) { + const glsl_type *const element_type = type->fields.array; + + for (unsigned int i = 0; i < type->length; i++) { + const char *element_name = ralloc_asprintf(mem_ctx, "%s[%d]", name, i); + + set_uniform_initializer(mem_ctx, prog, element_name, + element_type, val->array_elements[i]); + } + return; + } + + struct gl_uniform_storage *const storage = + get_storage(prog->UniformStorage, + prog->NumUserUniformStorage, + name); + if (storage == NULL) { + assert(storage != NULL); + return; + } + + if (val->type->is_array()) { + const enum glsl_base_type base_type = + val->array_elements[0]->type->base_type; + const unsigned int elements = val->array_elements[0]->type->components(); + unsigned int idx = 0; + + assert(val->type->length >= storage->array_elements); + for (unsigned int i = 0; i < storage->array_elements; i++) { + copy_constant_to_storage(& storage->storage[idx], + val->array_elements[i], + base_type, + elements); + + idx += elements; + } + + if (base_type == GLSL_TYPE_SAMPLER) { + for (unsigned int i = 0; i < storage->array_elements; i++) { + prog->SamplerUnits[storage->sampler + i] = storage->storage[i].i; + } + } + } else { + copy_constant_to_storage(storage->storage, + val, + val->type->base_type, + val->type->components()); + + if (storage->type->is_sampler()) + prog->SamplerUnits[storage->sampler] = storage->storage[0].i; + } + + storage->initialized = true; +} +} + +void +link_set_uniform_initializers(struct gl_shader_program *prog) +{ + void *mem_ctx = NULL; + + for (unsigned int i = 0; i < MESA_SHADER_TYPES; i++) { + struct gl_shader *shader = prog->_LinkedShaders[i]; + + if (shader == NULL) + continue; + + foreach_list(node, shader->ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); + + if (!var || var->mode != ir_var_uniform || !var->constant_value) + continue; + + if (!mem_ctx) + mem_ctx = ralloc_context(NULL); + + linker::set_uniform_initializer(mem_ctx, prog, var->name, + var->type, var->constant_value); + } + } + + ralloc_free(mem_ctx); +} diff --git a/3rdparty/glsl-optimizer/src/glsl/link_uniforms.cpp b/3rdparty/glsl-optimizer/src/glsl/link_uniforms.cpp new file mode 100644 index 000000000..aa8a8b3fb --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/link_uniforms.cpp @@ -0,0 +1,650 @@ +/* + * Copyright © 2011 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include "main/core.h" +#include "ir.h" +#include "linker.h" +#include "ir_uniform.h" +#include "glsl_symbol_table.h" +#include "program/hash_table.h" +#include "program.h" + +static inline unsigned int +align(unsigned int a, unsigned int align) +{ + return (a + align - 1) / align * align; +} + +/** + * \file link_uniforms.cpp + * Assign locations for GLSL uniforms. + * + * \author Ian Romanick + */ + +/** + * Count the backing storage requirements for a type + */ +static unsigned +values_for_type(const glsl_type *type) +{ + if (type->is_sampler()) { + return 1; + } else if (type->is_array() && type->fields.array->is_sampler()) { + return type->array_size(); + } else { + return type->component_slots(); + } +} + +void +uniform_field_visitor::process(ir_variable *var) +{ + const glsl_type *t = var->type; + + /* Only strdup the name if we actually will need to modify it. */ + if (t->is_record() || (t->is_array() && t->fields.array->is_record())) { + char *name = ralloc_strdup(NULL, var->name); + recursion(var->type, &name, strlen(name)); + ralloc_free(name); + } else { + this->visit_field(t, var->name); + } +} + +void +uniform_field_visitor::recursion(const glsl_type *t, char **name, + size_t name_length) +{ + /* Records need to have each field processed individually. + * + * Arrays of records need to have each array element processed + * individually, then each field of the resulting array elements processed + * individually. + */ + if (t->is_record()) { + for (unsigned i = 0; i < t->length; i++) { + const char *field = t->fields.structure[i].name; + size_t new_length = name_length; + + /* Append '.field' to the current uniform name. */ + ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", field); + + recursion(t->fields.structure[i].type, name, new_length); + } + } else if (t->is_array() && t->fields.array->is_record()) { + for (unsigned i = 0; i < t->length; i++) { + size_t new_length = name_length; + + /* Append the subscript to the current uniform name */ + ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i); + + recursion(t->fields.array, name, new_length); + } + } else { + this->visit_field(t, *name); + } +} + +/** + * Class to help calculate the storage requirements for a set of uniforms + * + * As uniforms are added to the active set the number of active uniforms and + * the storage requirements for those uniforms are accumulated. The active + * uniforms are added the the hash table supplied to the constructor. + * + * If the same uniform is added multiple times (i.e., once for each shader + * target), it will only be accounted once. + */ +class count_uniform_size : public uniform_field_visitor { +public: + count_uniform_size(struct string_to_uint_map *map) + : num_active_uniforms(0), num_values(0), num_shader_samplers(0), + num_shader_uniform_components(0), map(map) + { + /* empty */ + } + + void start_shader() + { + this->num_shader_samplers = 0; + this->num_shader_uniform_components = 0; + } + + /** + * Total number of active uniforms counted + */ + unsigned num_active_uniforms; + + /** + * Number of data values required to back the storage for the active uniforms + */ + unsigned num_values; + + /** + * Number of samplers used + */ + unsigned num_shader_samplers; + + /** + * Number of uniforms used in the current shader + */ + unsigned num_shader_uniform_components; + +private: + virtual void visit_field(const glsl_type *type, const char *name) + { + assert(!type->is_record()); + assert(!(type->is_array() && type->fields.array->is_record())); + + /* Count the number of samplers regardless of whether the uniform is + * already in the hash table. The hash table prevents adding the same + * uniform for multiple shader targets, but in this case we want to + * count it for each shader target. + */ + const unsigned values = values_for_type(type); + if (type->contains_sampler()) { + this->num_shader_samplers += + type->is_array() ? type->array_size() : 1; + } else { + /* Accumulate the total number of uniform slots used by this shader. + * Note that samplers do not count against this limit because they + * don't use any storage on current hardware. + */ + this->num_shader_uniform_components += values; + } + + /* If the uniform is already in the map, there's nothing more to do. + */ + unsigned id; + if (this->map->get(id, name)) + return; + + this->map->put(this->num_active_uniforms, name); + + /* Each leaf uniform occupies one entry in the list of active + * uniforms. + */ + this->num_active_uniforms++; + this->num_values += values; + } + + struct string_to_uint_map *map; +}; + +/** + * Class to help parcel out pieces of backing storage to uniforms + * + * Each uniform processed has some range of the \c gl_constant_value + * structures associated with it. The association is done by finding + * the uniform in the \c string_to_uint_map and using the value from + * the map to connect that slot in the \c gl_uniform_storage table + * with the next available slot in the \c gl_constant_value array. + * + * \warning + * This class assumes that every uniform that will be processed is + * already in the \c string_to_uint_map. In addition, it assumes that + * the \c gl_uniform_storage and \c gl_constant_value arrays are "big + * enough." + */ +class parcel_out_uniform_storage : public uniform_field_visitor { +public: + parcel_out_uniform_storage(struct string_to_uint_map *map, + struct gl_uniform_storage *uniforms, + union gl_constant_value *values) + : map(map), uniforms(uniforms), next_sampler(0), values(values) + { + memset(this->targets, 0, sizeof(this->targets)); + } + + void start_shader() + { + this->shader_samplers_used = 0; + this->shader_shadow_samplers = 0; + } + + void set_and_process(struct gl_shader_program *prog, + struct gl_shader *shader, + ir_variable *var) + { + ubo_var = NULL; + if (var->uniform_block != -1) { + struct gl_uniform_block *block = + &shader->UniformBlocks[var->uniform_block]; + + ubo_block_index = -1; + for (unsigned i = 0; i < prog->NumUniformBlocks; i++) { + if (!strcmp(prog->UniformBlocks[i].Name, + shader->UniformBlocks[var->uniform_block].Name)) { + ubo_block_index = i; + break; + } + } + assert(ubo_block_index != -1); + + ubo_var_index = var->location; + ubo_var = &block->Uniforms[var->location]; + ubo_byte_offset = ubo_var->Offset; + } + + process(var); + } + + struct gl_uniform_buffer_variable *ubo_var; + int ubo_block_index; + int ubo_var_index; + int ubo_byte_offset; + +private: + virtual void visit_field(const glsl_type *type, const char *name) + { + assert(!type->is_record()); + assert(!(type->is_array() && type->fields.array->is_record())); + + unsigned id; + bool found = this->map->get(id, name); + assert(found); + + if (!found) + return; + + /* If there is already storage associated with this uniform, it means + * that it was set while processing an earlier shader stage. For + * example, we may be processing the uniform in the fragment shader, but + * the uniform was already processed in the vertex shader. + */ + if (this->uniforms[id].storage != NULL) { + /* If the uniform already has storage set from another shader stage, + * mark the samplers used for this shader stage. + */ + if (type->contains_sampler()) { + const unsigned count = MAX2(1, this->uniforms[id].array_elements); + const unsigned shadow = (type->is_array()) + ? type->fields.array->sampler_shadow : type->sampler_shadow; + + for (unsigned i = 0; i < count; i++) { + const unsigned s = this->uniforms[id].sampler + i; + + this->shader_samplers_used |= 1U << s; + this->shader_shadow_samplers |= shadow << s; + } + } + + return; + } + + const glsl_type *base_type; + if (type->is_array()) { + this->uniforms[id].array_elements = type->length; + base_type = type->fields.array; + } else { + this->uniforms[id].array_elements = 0; + base_type = type; + } + + if (base_type->is_sampler()) { + this->uniforms[id].sampler = this->next_sampler; + + /* Increment the sampler by 1 for non-arrays and by the number of + * array elements for arrays. + */ + this->next_sampler += MAX2(1, this->uniforms[id].array_elements); + + const gl_texture_index target = base_type->sampler_index(); + const unsigned shadow = base_type->sampler_shadow; + for (unsigned i = this->uniforms[id].sampler + ; i < MIN2(this->next_sampler, MAX_SAMPLERS) + ; i++) { + this->targets[i] = target; + this->shader_samplers_used |= 1U << i; + this->shader_shadow_samplers |= shadow << i; + } + + } else { + this->uniforms[id].sampler = ~0; + } + + this->uniforms[id].name = ralloc_strdup(this->uniforms, name); + this->uniforms[id].type = base_type; + this->uniforms[id].initialized = 0; + this->uniforms[id].num_driver_storage = 0; + this->uniforms[id].driver_storage = NULL; + this->uniforms[id].storage = this->values; + if (this->ubo_var) { + this->uniforms[id].block_index = this->ubo_block_index; + + unsigned alignment = type->std140_base_alignment(ubo_var->RowMajor); + this->ubo_byte_offset = align(this->ubo_byte_offset, alignment); + this->uniforms[id].offset = this->ubo_byte_offset; + this->ubo_byte_offset += type->std140_size(ubo_var->RowMajor); + + if (type->is_array()) { + this->uniforms[id].array_stride = + align(type->fields.array->std140_size(ubo_var->RowMajor), 16); + } else { + this->uniforms[id].array_stride = 0; + } + + if (type->is_matrix() || + (type->is_array() && type->fields.array->is_matrix())) { + this->uniforms[id].matrix_stride = 16; + this->uniforms[id].row_major = ubo_var->RowMajor; + } else { + this->uniforms[id].matrix_stride = 0; + this->uniforms[id].row_major = false; + } + } else { + this->uniforms[id].block_index = -1; + this->uniforms[id].offset = -1; + this->uniforms[id].array_stride = -1; + this->uniforms[id].matrix_stride = -1; + this->uniforms[id].row_major = false; + } + + this->values += values_for_type(type); + } + + struct string_to_uint_map *map; + + struct gl_uniform_storage *uniforms; + unsigned next_sampler; + +public: + union gl_constant_value *values; + + gl_texture_index targets[MAX_SAMPLERS]; + + /** + * Mask of samplers used by the current shader stage. + */ + unsigned shader_samplers_used; + + /** + * Mask of samplers used by the current shader stage for shadows. + */ + unsigned shader_shadow_samplers; +}; + +/** + * Merges a uniform block into an array of uniform blocks that may or + * may not already contain a copy of it. + * + * Returns the index of the new block in the array. + */ +int +link_cross_validate_uniform_block(void *mem_ctx, + struct gl_uniform_block **linked_blocks, + unsigned int *num_linked_blocks, + struct gl_uniform_block *new_block) +{ + for (unsigned int i = 0; i < *num_linked_blocks; i++) { + struct gl_uniform_block *old_block = &(*linked_blocks)[i]; + if (strcmp(old_block->Name, new_block->Name) == 0) { + if (old_block->NumUniforms != new_block->NumUniforms) { + return -1; + } + + for (unsigned j = 0; j < old_block->NumUniforms; j++) { + if (strcmp(old_block->Uniforms[j].Name, + new_block->Uniforms[j].Name) != 0) + return -1; + + if (old_block->Uniforms[j].Offset != + new_block->Uniforms[j].Offset) + return -1; + + if (old_block->Uniforms[j].RowMajor != + new_block->Uniforms[j].RowMajor) + return -1; + } + return i; + } + } + + *linked_blocks = reralloc(mem_ctx, *linked_blocks, + struct gl_uniform_block, + *num_linked_blocks + 1); + int linked_block_index = (*num_linked_blocks)++; + struct gl_uniform_block *linked_block = &(*linked_blocks)[linked_block_index]; + + memcpy(linked_block, new_block, sizeof(*new_block)); + linked_block->Uniforms = ralloc_array(*linked_blocks, + struct gl_uniform_buffer_variable, + linked_block->NumUniforms); + + memcpy(linked_block->Uniforms, + new_block->Uniforms, + sizeof(*linked_block->Uniforms) * linked_block->NumUniforms); + + for (unsigned int i = 0; i < linked_block->NumUniforms; i++) { + struct gl_uniform_buffer_variable *ubo_var = + &linked_block->Uniforms[i]; + + ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name); + } + + return linked_block_index; +} + +/** + * Walks the IR and update the references to uniform blocks in the + * ir_variables to point at linked shader's list (previously, they + * would point at the uniform block list in one of the pre-linked + * shaders). + */ +static bool +link_update_uniform_buffer_variables(struct gl_shader *shader) +{ + foreach_list(node, shader->ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); + + if ((var == NULL) || (var->uniform_block == -1)) + continue; + + assert(var->mode == ir_var_uniform); + + bool found = false; + for (unsigned i = 0; i < shader->NumUniformBlocks; i++) { + for (unsigned j = 0; j < shader->UniformBlocks[i].NumUniforms; j++) { + if (!strcmp(var->name, shader->UniformBlocks[i].Uniforms[j].Name)) { + found = true; + var->uniform_block = i; + var->location = j; + break; + } + } + if (found) + break; + } + assert(found); + } + + return true; +} + +void +link_assign_uniform_block_offsets(struct gl_shader *shader) +{ + for (unsigned b = 0; b < shader->NumUniformBlocks; b++) { + struct gl_uniform_block *block = &shader->UniformBlocks[b]; + + unsigned offset = 0; + for (unsigned int i = 0; i < block->NumUniforms; i++) { + struct gl_uniform_buffer_variable *ubo_var = &block->Uniforms[i]; + const struct glsl_type *type = ubo_var->Type; + + unsigned alignment = type->std140_base_alignment(ubo_var->RowMajor); + unsigned size = type->std140_size(ubo_var->RowMajor); + + offset = align(offset, alignment); + ubo_var->Offset = offset; + offset += size; + } + + /* From the GL_ARB_uniform_buffer_object spec: + * + * "For uniform blocks laid out according to [std140] rules, + * the minimum buffer object size returned by the + * UNIFORM_BLOCK_DATA_SIZE query is derived by taking the + * offset of the last basic machine unit consumed by the + * last uniform of the uniform block (including any + * end-of-array or end-of-structure padding), adding one, + * and rounding up to the next multiple of the base + * alignment required for a vec4." + */ + block->UniformBufferSize = align(offset, 16); + } +} + +void +link_assign_uniform_locations(struct gl_shader_program *prog) +{ + ralloc_free(prog->UniformStorage); + prog->UniformStorage = NULL; + prog->NumUserUniformStorage = 0; + + if (prog->UniformHash != NULL) { + prog->UniformHash->clear(); + } else { + prog->UniformHash = new string_to_uint_map; + } + + /* Uniforms that lack an initializer in the shader code have an initial + * value of zero. This includes sampler uniforms. + * + * Page 24 (page 30 of the PDF) of the GLSL 1.20 spec says: + * + * "The link time initial value is either the value of the variable's + * initializer, if present, or 0 if no initializer is present. Sampler + * types cannot have initializers." + */ + memset(prog->SamplerUnits, 0, sizeof(prog->SamplerUnits)); + + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + if (prog->_LinkedShaders[i] == NULL) + continue; + + if (!link_update_uniform_buffer_variables(prog->_LinkedShaders[i])) + return; + } + + /* First pass: Count the uniform resources used by the user-defined + * uniforms. While this happens, each active uniform will have an index + * assigned to it. + * + * Note: this is *NOT* the index that is returned to the application by + * glGetUniformLocation. + */ + count_uniform_size uniform_size(prog->UniformHash); + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + if (prog->_LinkedShaders[i] == NULL) + continue; + + /* Reset various per-shader target counts. + */ + uniform_size.start_shader(); + + foreach_list(node, prog->_LinkedShaders[i]->ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); + + if ((var == NULL) || (var->mode != ir_var_uniform)) + continue; + + /* FINISHME: Update code to process built-in uniforms! + */ + if (strncmp("gl_", var->name, 3) == 0) { + uniform_size.num_shader_uniform_components += + var->type->component_slots(); + continue; + } + + uniform_size.process(var); + } + + prog->_LinkedShaders[i]->num_samplers = uniform_size.num_shader_samplers; + prog->_LinkedShaders[i]->num_uniform_components = + uniform_size.num_shader_uniform_components; + } + + const unsigned num_user_uniforms = uniform_size.num_active_uniforms; + const unsigned num_data_slots = uniform_size.num_values; + + /* On the outside chance that there were no uniforms, bail out. + */ + if (num_user_uniforms == 0) + return; + + struct gl_uniform_storage *uniforms = + rzalloc_array(prog, struct gl_uniform_storage, num_user_uniforms); + union gl_constant_value *data = + rzalloc_array(uniforms, union gl_constant_value, num_data_slots); +#ifndef NDEBUG + union gl_constant_value *data_end = &data[num_data_slots]; +#endif + + parcel_out_uniform_storage parcel(prog->UniformHash, uniforms, data); + + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + if (prog->_LinkedShaders[i] == NULL) + continue; + + /* Reset various per-shader target counts. + */ + parcel.start_shader(); + + foreach_list(node, prog->_LinkedShaders[i]->ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); + + if ((var == NULL) || (var->mode != ir_var_uniform)) + continue; + + /* FINISHME: Update code to process built-in uniforms! + */ + if (strncmp("gl_", var->name, 3) == 0) + continue; + + parcel.set_and_process(prog, prog->_LinkedShaders[i], var); + } + + prog->_LinkedShaders[i]->active_samplers = parcel.shader_samplers_used; + prog->_LinkedShaders[i]->shadow_samplers = parcel.shader_shadow_samplers; + } + + assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets)); + memcpy(prog->SamplerTargets, parcel.targets, sizeof(prog->SamplerTargets)); + +#ifndef NDEBUG + for (unsigned i = 0; i < num_user_uniforms; i++) { + assert(uniforms[i].storage != NULL); + } + + assert(parcel.values == data_end); +#endif + + prog->NumUserUniformStorage = num_user_uniforms; + prog->UniformStorage = uniforms; + + link_set_uniform_initializers(prog); + + return; +} diff --git a/3rdparty/glsl-optimizer/src/glsl/linker.cpp b/3rdparty/glsl-optimizer/src/glsl/linker.cpp index b54ef4108..b1a4b8b17 100644 --- a/3rdparty/glsl-optimizer/src/glsl/linker.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/linker.cpp @@ -73,7 +73,7 @@ #include "ir_optimization.h" extern "C" { -#include "main/shaderobj.h" +#include "standalone_scaffolding.h" } /** @@ -101,7 +101,7 @@ public: virtual ir_visitor_status visit_enter(ir_call *ir) { - exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator(); + exec_list_iterator sig_iter = ir->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter, *ir) { ir_rvalue *param_rval = (ir_rvalue *)iter.get(); ir_variable *sig_param = (ir_variable *)sig_iter.get(); @@ -117,6 +117,15 @@ public: sig_iter.next(); } + if (ir->return_deref != NULL) { + ir_variable *const var = ir->return_deref->variable_referenced(); + + if (strcmp(name, var->name) == 0) { + found = true; + return visit_stop; + } + } + return visit_continue_with_parent; } @@ -191,8 +200,8 @@ linker_warning(gl_shader_program *prog, const char *fmt, ...) void -invalidate_variable_locations(gl_shader *sh, enum ir_variable_mode mode, - int generic_base) +link_invalidate_variable_locations(gl_shader *sh, enum ir_variable_mode mode, + int generic_base) { foreach_list(node, sh->ir) { ir_variable *const var = ((ir_instruction *) node)->as_variable(); @@ -244,7 +253,10 @@ count_attribute_slots(const glsl_type *t) /** - * Verify that a vertex shader executable meets all semantic requirements + * Verify that a vertex shader executable meets all semantic requirements. + * + * Also sets prog->Vert.UsesClipDistance and prog->Vert.ClipDistanceArraySize + * as a side effect. * * \param shader Vertex shader executable to be verified */ @@ -255,11 +267,62 @@ validate_vertex_shader_executable(struct gl_shader_program *prog, if (shader == NULL) return true; - find_assignment_visitor find("gl_Position"); - find.run(shader->ir); - if (!find.variable_found()) { - linker_error(prog, "vertex shader does not write to `gl_Position'\n"); - return false; + /* From the GLSL 1.10 spec, page 48: + * + * "The variable gl_Position is available only in the vertex + * language and is intended for writing the homogeneous vertex + * position. All executions of a well-formed vertex shader + * executable must write a value into this variable. [...] The + * variable gl_Position is available only in the vertex + * language and is intended for writing the homogeneous vertex + * position. All executions of a well-formed vertex shader + * executable must write a value into this variable." + * + * while in GLSL 1.40 this text is changed to: + * + * "The variable gl_Position is available only in the vertex + * language and is intended for writing the homogeneous vertex + * position. It can be written at any time during shader + * execution. It may also be read back by a vertex shader + * after being written. This value will be used by primitive + * assembly, clipping, culling, and other fixed functionality + * operations, if present, that operate on primitives after + * vertex processing has occurred. Its value is undefined if + * the vertex shader executable does not write gl_Position." + */ + if (prog->Version < 140) { + find_assignment_visitor find("gl_Position"); + find.run(shader->ir); + if (!find.variable_found()) { + linker_error(prog, "vertex shader does not write to `gl_Position'\n"); + return false; + } + } + + prog->Vert.ClipDistanceArraySize = 0; + + if (prog->Version >= 130) { + /* From section 7.1 (Vertex Shader Special Variables) of the + * GLSL 1.30 spec: + * + * "It is an error for a shader to statically write both + * gl_ClipVertex and gl_ClipDistance." + */ + find_assignment_visitor clip_vertex("gl_ClipVertex"); + find_assignment_visitor clip_distance("gl_ClipDistance"); + + clip_vertex.run(shader->ir); + clip_distance.run(shader->ir); + if (clip_vertex.variable_found() && clip_distance.variable_found()) { + linker_error(prog, "vertex shader writes to both `gl_ClipVertex' " + "and `gl_ClipDistance'\n"); + return false; + } + prog->Vert.UsesClipDistance = clip_distance.variable_found(); + ir_variable *clip_distance_var = + shader->symbols->get_variable("gl_ClipDistance"); + if (clip_distance_var) + prog->Vert.ClipDistanceArraySize = clip_distance_var->type->length; } return true; @@ -393,43 +456,63 @@ cross_validate_globals(struct gl_shader_program *prog, existing->explicit_location = true; } - /* Validate layout qualifiers for gl_FragDepth. - * - * From the AMD_conservative_depth spec: - * "If gl_FragDepth is redeclared in any fragment shader in - * a program, it must be redeclared in all fragment shaders in that - * program that have static assignments to gl_FragDepth. All - * redeclarations of gl_FragDepth in all fragment shaders in - * a single program must have the same set of qualifiers." - */ - if (strcmp(var->name, "gl_FragDepth") == 0) { - bool layout_declared = var->depth_layout != ir_depth_layout_none; - bool layout_differs = var->depth_layout != existing->depth_layout; - if (layout_declared && layout_differs) { - linker_error(prog, - "All redeclarations of gl_FragDepth in all fragment shaders " - "in a single program must have the same set of qualifiers."); - } - if (var->used && layout_differs) { - linker_error(prog, - "If gl_FragDepth is redeclared with a layout qualifier in" - "any fragment shader, it must be redeclared with the same" - "layout qualifier in all fragment shaders that have" - "assignments to gl_FragDepth"); - } - } - - /* FINISHME: Handle non-constant initializers. + /* Validate layout qualifiers for gl_FragDepth. + * + * From the AMD/ARB_conservative_depth specs: + * + * "If gl_FragDepth is redeclared in any fragment shader in a + * program, it must be redeclared in all fragment shaders in + * that program that have static assignments to + * gl_FragDepth. All redeclarations of gl_FragDepth in all + * fragment shaders in a single program must have the same set + * of qualifiers." */ - if (var->constant_value != NULL) { - if (existing->constant_value != NULL) { - if (!var->constant_value->has_value(existing->constant_value)) { + if (strcmp(var->name, "gl_FragDepth") == 0) { + bool layout_declared = var->depth_layout != ir_depth_layout_none; + bool layout_differs = + var->depth_layout != existing->depth_layout; + + if (layout_declared && layout_differs) { + linker_error(prog, + "All redeclarations of gl_FragDepth in all " + "fragment shaders in a single program must have " + "the same set of qualifiers."); + } + + if (var->used && layout_differs) { + linker_error(prog, + "If gl_FragDepth is redeclared with a layout " + "qualifier in any fragment shader, it must be " + "redeclared with the same layout qualifier in " + "all fragment shaders that have assignments to " + "gl_FragDepth"); + } + } + + /* Page 35 (page 41 of the PDF) of the GLSL 4.20 spec says: + * + * "If a shared global has multiple initializers, the + * initializers must all be constant expressions, and they + * must all have the same value. Otherwise, a link error will + * result. (A shared global having only one initializer does + * not require that initializer to be a constant expression.)" + * + * Previous to 4.20 the GLSL spec simply said that initializers + * must have the same value. In this case of non-constant + * initializers, this was impossible to determine. As a result, + * no vendor actually implemented that behavior. The 4.20 + * behavior matches the implemented behavior of at least one other + * vendor, so we'll implement that for all GLSL versions. + */ + if (var->constant_initializer != NULL) { + if (existing->constant_initializer != NULL) { + if (!var->constant_initializer->has_value(existing->constant_initializer)) { linker_error(prog, "initializers for %s " "`%s' have differing values\n", mode_string(var), var->name); return false; } - } else + } else { /* If the first-seen instance of a particular uniform did not * have an initializer but a later instance does, copy the * initializer to the version stored in the symbol table. @@ -442,8 +525,29 @@ cross_validate_globals(struct gl_shader_program *prog, * FINISHME: modify the shader, and linking with the second * FINISHME: will fail. */ - existing->constant_value = - var->constant_value->clone(ralloc_parent(existing), NULL); + existing->constant_initializer = + var->constant_initializer->clone(ralloc_parent(existing), + NULL); + } + } + + if (var->has_initializer) { + if (existing->has_initializer + && (var->constant_initializer == NULL + || existing->constant_initializer == NULL)) { + linker_error(prog, + "shared global variable `%s' has multiple " + "non-constant initializers.\n", + var->name); + return false; + } + + /* Some instance had an initializer, so keep track of that. In + * this location, all sorts of initializers (constant or + * otherwise) will propagate the existence to the variable + * stored in the symbol table. + */ + existing->has_initializer = true; } if (existing->invariant != var->invariant) { @@ -477,6 +581,48 @@ cross_validate_uniforms(struct gl_shader_program *prog) MESA_SHADER_TYPES, true); } +/** + * Accumulates the array of prog->UniformBlocks and checks that all + * definitons of blocks agree on their contents. + */ +static bool +interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog) +{ + unsigned max_num_uniform_blocks = 0; + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + if (prog->_LinkedShaders[i]) + max_num_uniform_blocks += prog->_LinkedShaders[i]->NumUniformBlocks; + } + + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + struct gl_shader *sh = prog->_LinkedShaders[i]; + + prog->UniformBlockStageIndex[i] = ralloc_array(prog, int, + max_num_uniform_blocks); + for (unsigned int j = 0; j < max_num_uniform_blocks; j++) + prog->UniformBlockStageIndex[i][j] = -1; + + if (sh == NULL) + continue; + + for (unsigned int j = 0; j < sh->NumUniformBlocks; j++) { + int index = link_cross_validate_uniform_block(prog, + &prog->UniformBlocks, + &prog->NumUniformBlocks, + &sh->UniformBlocks[j]); + + if (index == -1) { + linker_error(prog, "uniform block `%s' has mismatching definitions", + sh->UniformBlocks[j].Name); + return false; + } + + prog->UniformBlockStageIndex[i][index] = j; + } + } + + return true; +} /** * Validate that outputs from one stage match inputs of another @@ -735,6 +881,7 @@ move_non_declarations(exec_list *instructions, exec_node *last, continue; assert(inst->as_assignment() + || inst->as_call() || ((var != NULL) && (var->mode == ir_var_temporary))); if (make_copies) { @@ -785,6 +932,26 @@ get_main_function_signature(gl_shader *sh) } +/** + * This class is only used in link_intrastage_shaders() below but declaring + * it inside that function leads to compiler warnings with some versions of + * gcc. + */ +class array_sizing_visitor : public ir_hierarchical_visitor { +public: + virtual ir_visitor_status visit(ir_variable *var) + { + if (var->type->is_array() && (var->type->length == 0)) { + const glsl_type *type = + glsl_type::get_array_instance(var->type->fields.array, + var->max_array_access + 1); + assert(type != NULL); + var->type = type; + } + return visit_continue; + } +}; + /** * Combine a group of shaders for a single stage to generate a linked shader * @@ -792,18 +959,40 @@ get_main_function_signature(gl_shader *sh) * If this function is supplied a single shader, it is cloned, and the new * shader is returned. */ -static struct gl_shader * +struct gl_shader * link_intrastage_shaders(void *mem_ctx, struct gl_context *ctx, struct gl_shader_program *prog, struct gl_shader **shader_list, unsigned num_shaders) { + struct gl_uniform_block *uniform_blocks = NULL; + unsigned num_uniform_blocks = 0; + /* Check that global variables defined in multiple shaders are consistent. */ if (!cross_validate_globals(prog, shader_list, num_shaders, false)) return NULL; + /* Check that uniform blocks between shaders for a stage agree. */ + for (unsigned i = 0; i < num_shaders; i++) { + struct gl_shader *sh = shader_list[i]; + + for (unsigned j = 0; j < shader_list[i]->NumUniformBlocks; j++) { + link_assign_uniform_block_offsets(shader_list[i]); + + int index = link_cross_validate_uniform_block(mem_ctx, + &uniform_blocks, + &num_uniform_blocks, + &sh->UniformBlocks[j]); + if (index == -1) { + linker_error(prog, "uniform block `%s' has mismatching definitions", + sh->UniformBlocks[j].Name); + return NULL; + } + } + } + /* Check that there is only a single definition of each function signature * across all shaders. */ @@ -871,6 +1060,10 @@ link_intrastage_shaders(void *mem_ctx, linked->ir = new(linked) exec_list; clone_ir_list(mem_ctx, linked->ir, main->ir); + linked->UniformBlocks = uniform_blocks; + linked->NumUniformBlocks = num_uniform_blocks; + ralloc_steal(linked, linked->UniformBlocks); + populate_symbol_table(linked); /* The a pointer to the main function in the final linked shader (i.e., the @@ -935,22 +1128,7 @@ link_intrastage_shaders(void *mem_ctx, * max_array_access field. */ if (linked != NULL) { - class array_sizing_visitor : public ir_hierarchical_visitor { - public: - virtual ir_visitor_status visit(ir_variable *var) - { - if (var->type->is_array() && (var->type->length == 0)) { - const glsl_type *type = - glsl_type::get_array_instance(var->type->fields.array, - var->max_array_access + 1); - - assert(type != NULL); - var->type = type; - } - - return visit_continue; - } - } v; + array_sizing_visitor v; v.run(linked->ir); } @@ -958,13 +1136,6 @@ link_intrastage_shaders(void *mem_ctx, return linked; } - -struct uniform_node { - exec_node link; - struct gl_uniform *u; - unsigned slots; -}; - /** * Update the sizes of linked shader uniform arrays to the maximum * array index used. @@ -996,6 +1167,13 @@ update_array_sizes(struct gl_shader_program *prog) !var->type->is_array()) continue; + /* GL_ARB_uniform_buffer_object says that std140 uniforms + * will not be eliminated. Since we always do std140, just + * don't resize arrays in UBOs. + */ + if (var->uniform_block != -1) + continue; + unsigned int size = var->max_array_access; for (unsigned j = 0; j < MESA_SHADER_TYPES; j++) { if (prog->_LinkedShaders[j] == NULL) @@ -1037,151 +1215,6 @@ update_array_sizes(struct gl_shader_program *prog) } } -static void -add_uniform(void *mem_ctx, exec_list *uniforms, struct hash_table *ht, - const char *name, const glsl_type *type, GLenum shader_type, - unsigned *next_shader_pos, unsigned *total_uniforms) -{ - if (type->is_record()) { - for (unsigned int i = 0; i < type->length; i++) { - const glsl_type *field_type = type->fields.structure[i].type; - char *field_name = ralloc_asprintf(mem_ctx, "%s.%s", name, - type->fields.structure[i].name); - - add_uniform(mem_ctx, uniforms, ht, field_name, field_type, - shader_type, next_shader_pos, total_uniforms); - } - } else { - uniform_node *n = (uniform_node *) hash_table_find(ht, name); - unsigned int vec4_slots; - const glsl_type *array_elem_type = NULL; - - if (type->is_array()) { - array_elem_type = type->fields.array; - /* Array of structures. */ - if (array_elem_type->is_record()) { - for (unsigned int i = 0; i < type->length; i++) { - char *elem_name = ralloc_asprintf(mem_ctx, "%s[%d]", name, i); - add_uniform(mem_ctx, uniforms, ht, elem_name, array_elem_type, - shader_type, next_shader_pos, total_uniforms); - } - return; - } - } - - /* Fix the storage size of samplers at 1 vec4 each. Be sure to pad out - * vectors to vec4 slots. - */ - if (type->is_array()) { - if (array_elem_type->is_sampler()) - vec4_slots = type->length; - else - vec4_slots = type->length * array_elem_type->matrix_columns; - } else if (type->is_sampler()) { - vec4_slots = 1; - } else { - vec4_slots = type->matrix_columns; - } - - if (n == NULL) { - n = (uniform_node *) calloc(1, sizeof(struct uniform_node)); - n->u = (gl_uniform *) calloc(1, sizeof(struct gl_uniform)); - n->slots = vec4_slots; - - n->u->Name = strdup(name); - n->u->Type = type; - n->u->VertPos = -1; - n->u->FragPos = -1; - n->u->GeomPos = -1; - (*total_uniforms)++; - - hash_table_insert(ht, n, name); - uniforms->push_tail(& n->link); - } - - switch (shader_type) { - case GL_VERTEX_SHADER: - n->u->VertPos = *next_shader_pos; - break; - case GL_FRAGMENT_SHADER: - n->u->FragPos = *next_shader_pos; - break; - case GL_GEOMETRY_SHADER: - n->u->GeomPos = *next_shader_pos; - break; - } - - (*next_shader_pos) += vec4_slots; - } -} - -void -assign_uniform_locations(struct gl_shader_program *prog) -{ - /* */ - exec_list uniforms; - unsigned total_uniforms = 0; - hash_table *ht = hash_table_ctor(32, hash_table_string_hash, - hash_table_string_compare); - void *mem_ctx = ralloc_context(NULL); - - for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { - if (prog->_LinkedShaders[i] == NULL) - continue; - - unsigned next_position = 0; - - foreach_list(node, prog->_LinkedShaders[i]->ir) { - ir_variable *const var = ((ir_instruction *) node)->as_variable(); - - if ((var == NULL) || (var->mode != ir_var_uniform)) - continue; - - if (strncmp(var->name, "gl_", 3) == 0) { - /* At the moment, we don't allocate uniform locations for - * builtin uniforms. It's permitted by spec, and we'll - * likely switch to doing that at some point, but not yet. - */ - continue; - } - - var->location = next_position; - add_uniform(mem_ctx, &uniforms, ht, var->name, var->type, - prog->_LinkedShaders[i]->Type, - &next_position, &total_uniforms); - } - } - - ralloc_free(mem_ctx); - - gl_uniform_list *ul = (gl_uniform_list *) - calloc(1, sizeof(gl_uniform_list)); - - ul->Size = total_uniforms; - ul->NumUniforms = total_uniforms; - ul->Uniforms = (gl_uniform *) calloc(total_uniforms, sizeof(gl_uniform)); - - unsigned idx = 0; - uniform_node *next; - for (uniform_node *node = (uniform_node *) uniforms.head - ; node->link.next != NULL - ; node = next) { - next = (uniform_node *) node->link.next; - - node->link.remove(); - memcpy(&ul->Uniforms[idx], node->u, sizeof(gl_uniform)); - idx++; - - free(node->u); - free(node); - } - - hash_table_dtor(ht); - - prog->Uniforms = ul; -} - - /** * Find a contiguous set of available bits in a bitmask. * @@ -1228,12 +1261,6 @@ find_available_slots(unsigned used_mask, unsigned needed_count) * \return * If locations are successfully assigned, true is returned. Otherwise an * error is emitted to the shader link log and false is returned. - * - * \bug - * Locations set via \c glBindFragDataLocation are not currently supported. - * Only locations assigned automatically by the linker, explicitly set by a - * layout qualifier, or explicitly set by a built-in variable (e.g., \c - * gl_FragColor) are supported for fragment shaders. */ bool assign_attribute_or_color_locations(gl_shader_program *prog, @@ -1257,7 +1284,8 @@ assign_attribute_or_color_locations(gl_shader_program *prog, * 1. Invalidate the location assignments for all vertex shader inputs. * * 2. Assign locations for inputs that have user-defined (via - * glBindVertexAttribLocation) locations. + * glBindVertexAttribLocation) locations and outputs that have + * user-defined locations (via glBindFragDataLocation). * * 3. Sort the attributes without assigned locations by number of slots * required in decreasing order. Fragmentation caused by attribute @@ -1274,72 +1302,7 @@ assign_attribute_or_color_locations(gl_shader_program *prog, (target_index == MESA_SHADER_VERTEX) ? ir_var_in : ir_var_out; - invalidate_variable_locations(sh, direction, generic_base); - - if ((target_index == MESA_SHADER_VERTEX) && (prog->Attributes != NULL)) { - for (unsigned i = 0; i < prog->Attributes->NumParameters; i++) { - ir_variable *const var = - sh->symbols->get_variable(prog->Attributes->Parameters[i].Name); - - /* Note: attributes that occupy multiple slots, such as arrays or - * matrices, may appear in the attrib array multiple times. - */ - if ((var == NULL) || (var->location != -1)) - continue; - - /* From page 61 of the OpenGL 4.0 spec: - * - * "LinkProgram will fail if the attribute bindings assigned by - * BindAttribLocation do not leave not enough space to assign a - * location for an active matrix attribute or an active attribute - * array, both of which require multiple contiguous generic - * attributes." - * - * Previous versions of the spec contain similar language but omit the - * bit about attribute arrays. - * - * Page 61 of the OpenGL 4.0 spec also says: - * - * "It is possible for an application to bind more than one - * attribute name to the same location. This is referred to as - * aliasing. This will only work if only one of the aliased - * attributes is active in the executable program, or if no path - * through the shader consumes more than one attribute of a set - * of attributes aliased to the same location. A link error can - * occur if the linker determines that every path through the - * shader consumes multiple aliased attributes, but - * implementations are not required to generate an error in this - * case." - * - * These two paragraphs are either somewhat contradictory, or I don't - * fully understand one or both of them. - */ - /* FINISHME: The code as currently written does not support attribute - * FINISHME: location aliasing (see comment above). - */ - const int attr = prog->Attributes->Parameters[i].StateIndexes[0]; - const unsigned slots = count_attribute_slots(var->type); - - /* Mask representing the contiguous slots that will be used by this - * attribute. - */ - const unsigned use_mask = (1 << slots) - 1; - - /* Generate a link error if the set of bits requested for this - * attribute overlaps any previously allocated bits. - */ - if ((~(use_mask << attr) & used_locations) != used_locations) { - linker_error(prog, - "insufficient contiguous attribute locations " - "available for vertex shader input `%s'", - var->name); - return false; - } - - var->location = VERT_ATTRIB_GENERIC0 + attr; - used_locations |= (use_mask << attr); - } - } + link_invalidate_variable_locations(sh, direction, generic_base); /* Temporary storage for the set of attributes that need locations assigned. */ @@ -1367,28 +1330,100 @@ assign_attribute_or_color_locations(gl_shader_program *prog, continue; if (var->explicit_location) { - const unsigned slots = count_attribute_slots(var->type); - const unsigned use_mask = (1 << slots) - 1; - const int attr = var->location - generic_base; - if ((var->location >= (int)(max_index + generic_base)) || (var->location < 0)) { linker_error(prog, "invalid explicit location %d specified for `%s'\n", - (var->location < 0) ? var->location : attr, + (var->location < 0) + ? var->location : var->location - generic_base, var->name); return false; - } else if (var->location >= generic_base) { - used_locations |= (use_mask << attr); + } + } else if (target_index == MESA_SHADER_VERTEX) { + unsigned binding; + + if (prog->AttributeBindings->get(binding, var->name)) { + assert(binding >= VERT_ATTRIB_GENERIC0); + var->location = binding; + } + } else if (target_index == MESA_SHADER_FRAGMENT) { + unsigned binding; + unsigned index; + + if (prog->FragDataBindings->get(binding, var->name)) { + assert(binding >= FRAG_RESULT_DATA0); + var->location = binding; + + if (prog->FragDataIndexBindings->get(index, var->name)) { + var->index = index; + } } } - /* The location was explicitly assigned, nothing to do here. + /* If the variable is not a built-in and has a location statically + * assigned in the shader (presumably via a layout qualifier), make sure + * that it doesn't collide with other assigned locations. Otherwise, + * add it to the list of variables that need linker-assigned locations. */ - if (var->location != -1) - continue; + const unsigned slots = count_attribute_slots(var->type); + if (var->location != -1) { + if (var->location >= generic_base && var->index < 1) { + /* From page 61 of the OpenGL 4.0 spec: + * + * "LinkProgram will fail if the attribute bindings assigned + * by BindAttribLocation do not leave not enough space to + * assign a location for an active matrix attribute or an + * active attribute array, both of which require multiple + * contiguous generic attributes." + * + * Previous versions of the spec contain similar language but omit + * the bit about attribute arrays. + * + * Page 61 of the OpenGL 4.0 spec also says: + * + * "It is possible for an application to bind more than one + * attribute name to the same location. This is referred to as + * aliasing. This will only work if only one of the aliased + * attributes is active in the executable program, or if no + * path through the shader consumes more than one attribute of + * a set of attributes aliased to the same location. A link + * error can occur if the linker determines that every path + * through the shader consumes multiple aliased attributes, + * but implementations are not required to generate an error + * in this case." + * + * These two paragraphs are either somewhat contradictory, or I + * don't fully understand one or both of them. + */ + /* FINISHME: The code as currently written does not support + * FINISHME: attribute location aliasing (see comment above). + */ + /* Mask representing the contiguous slots that will be used by + * this attribute. + */ + const unsigned attr = var->location - generic_base; + const unsigned use_mask = (1 << slots) - 1; - to_assign[num_attr].slots = count_attribute_slots(var->type); + /* Generate a link error if the set of bits requested for this + * attribute overlaps any previously allocated bits. + */ + if ((~(use_mask << attr) & used_locations) != used_locations) { + const char *const string = (target_index == MESA_SHADER_VERTEX) + ? "vertex shader input" : "fragment shader output"; + linker_error(prog, + "insufficient contiguous locations " + "available for %s `%s' %d %d %d", string, + var->name, used_locations, use_mask, attr); + return false; + } + + used_locations |= (use_mask << attr); + } + + continue; + } + + to_assign[num_attr].slots = slots; to_assign[num_attr].var = var; num_attr++; } @@ -1426,7 +1461,7 @@ assign_attribute_or_color_locations(gl_shader_program *prog, ? "vertex shader input" : "fragment shader output"; linker_error(prog, - "insufficient contiguous attribute locations " + "insufficient contiguous locations " "available for %s `%s'", string, to_assign[i].var->name); return false; @@ -1463,10 +1498,558 @@ demote_shader_inputs_and_outputs(gl_shader *sh, enum ir_variable_mode mode) } +/** + * Data structure tracking information about a transform feedback declaration + * during linking. + */ +class tfeedback_decl +{ +public: + bool init(struct gl_context *ctx, struct gl_shader_program *prog, + const void *mem_ctx, const char *input); + static bool is_same(const tfeedback_decl &x, const tfeedback_decl &y); + bool assign_location(struct gl_context *ctx, struct gl_shader_program *prog, + ir_variable *output_var); + bool accumulate_num_outputs(struct gl_shader_program *prog, unsigned *count); + bool store(struct gl_context *ctx, struct gl_shader_program *prog, + struct gl_transform_feedback_info *info, unsigned buffer, + const unsigned max_outputs) const; + + /** + * True if assign_location() has been called for this object. + */ + bool is_assigned() const + { + return this->location != -1; + } + + bool is_next_buffer_separator() const + { + return this->next_buffer_separator; + } + + bool is_varying() const + { + return !this->next_buffer_separator && !this->skip_components; + } + + /** + * Determine whether this object refers to the variable var. + */ + bool matches_var(ir_variable *var) const + { + if (this->is_clip_distance_mesa) + return strcmp(var->name, "gl_ClipDistanceMESA") == 0; + else + return strcmp(var->name, this->var_name) == 0; + } + + /** + * The total number of varying components taken up by this variable. Only + * valid if is_assigned() is true. + */ + unsigned num_components() const + { + if (this->is_clip_distance_mesa) + return this->size; + else + return this->vector_elements * this->matrix_columns * this->size; + } + +private: + /** + * The name that was supplied to glTransformFeedbackVaryings. Used for + * error reporting and glGetTransformFeedbackVarying(). + */ + const char *orig_name; + + /** + * The name of the variable, parsed from orig_name. + */ + const char *var_name; + + /** + * True if the declaration in orig_name represents an array. + */ + bool is_subscripted; + + /** + * If is_subscripted is true, the subscript that was specified in orig_name. + */ + unsigned array_subscript; + + /** + * True if the variable is gl_ClipDistance and the driver lowers + * gl_ClipDistance to gl_ClipDistanceMESA. + */ + bool is_clip_distance_mesa; + + /** + * The vertex shader output location that the linker assigned for this + * variable. -1 if a location hasn't been assigned yet. + */ + int location; + + /** + * If location != -1, the number of vector elements in this variable, or 1 + * if this variable is a scalar. + */ + unsigned vector_elements; + + /** + * If location != -1, the number of matrix columns in this variable, or 1 + * if this variable is not a matrix. + */ + unsigned matrix_columns; + + /** Type of the varying returned by glGetTransformFeedbackVarying() */ + GLenum type; + + /** + * If location != -1, the size that should be returned by + * glGetTransformFeedbackVarying(). + */ + unsigned size; + + /** + * How many components to skip. If non-zero, this is + * gl_SkipComponents{1,2,3,4} from ARB_transform_feedback3. + */ + unsigned skip_components; + + /** + * Whether this is gl_NextBuffer from ARB_transform_feedback3. + */ + bool next_buffer_separator; +}; + + +/** + * Initialize this object based on a string that was passed to + * glTransformFeedbackVaryings. If there is a parse error, the error is + * reported using linker_error(), and false is returned. + */ +bool +tfeedback_decl::init(struct gl_context *ctx, struct gl_shader_program *prog, + const void *mem_ctx, const char *input) +{ + /* We don't have to be pedantic about what is a valid GLSL variable name, + * because any variable with an invalid name can't exist in the IR anyway. + */ + + this->location = -1; + this->orig_name = input; + this->is_clip_distance_mesa = false; + this->skip_components = 0; + this->next_buffer_separator = false; + + if (ctx->Extensions.ARB_transform_feedback3) { + /* Parse gl_NextBuffer. */ + if (strcmp(input, "gl_NextBuffer") == 0) { + this->next_buffer_separator = true; + return true; + } + + /* Parse gl_SkipComponents. */ + if (strcmp(input, "gl_SkipComponents1") == 0) + this->skip_components = 1; + else if (strcmp(input, "gl_SkipComponents2") == 0) + this->skip_components = 2; + else if (strcmp(input, "gl_SkipComponents3") == 0) + this->skip_components = 3; + else if (strcmp(input, "gl_SkipComponents4") == 0) + this->skip_components = 4; + + if (this->skip_components) + return true; + } + + /* Parse a declaration. */ + const char *bracket = strrchr(input, '['); + + if (bracket) { + this->var_name = ralloc_strndup(mem_ctx, input, bracket - input); + if (sscanf(bracket, "[%u]", &this->array_subscript) != 1) { + linker_error(prog, "Cannot parse transform feedback varying %s", input); + return false; + } + this->is_subscripted = true; + } else { + this->var_name = ralloc_strdup(mem_ctx, input); + this->is_subscripted = false; + } + + /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, this + * class must behave specially to account for the fact that gl_ClipDistance + * is converted from a float[8] to a vec4[2]. + */ + if (ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].LowerClipDistance && + strcmp(this->var_name, "gl_ClipDistance") == 0) { + this->is_clip_distance_mesa = true; + } + + return true; +} + + +/** + * Determine whether two tfeedback_decl objects refer to the same variable and + * array index (if applicable). + */ +bool +tfeedback_decl::is_same(const tfeedback_decl &x, const tfeedback_decl &y) +{ + assert(x.is_varying() && y.is_varying()); + + if (strcmp(x.var_name, y.var_name) != 0) + return false; + if (x.is_subscripted != y.is_subscripted) + return false; + if (x.is_subscripted && x.array_subscript != y.array_subscript) + return false; + return true; +} + + +/** + * Assign a location for this tfeedback_decl object based on the location + * assignment in output_var. + * + * If an error occurs, the error is reported through linker_error() and false + * is returned. + */ +bool +tfeedback_decl::assign_location(struct gl_context *ctx, + struct gl_shader_program *prog, + ir_variable *output_var) +{ + assert(this->is_varying()); + + if (output_var->type->is_array()) { + /* Array variable */ + const unsigned matrix_cols = + output_var->type->fields.array->matrix_columns; + unsigned actual_array_size = this->is_clip_distance_mesa ? + prog->Vert.ClipDistanceArraySize : output_var->type->array_size(); + + if (this->is_subscripted) { + /* Check array bounds. */ + if (this->array_subscript >= actual_array_size) { + linker_error(prog, "Transform feedback varying %s has index " + "%i, but the array size is %u.", + this->orig_name, this->array_subscript, + actual_array_size); + return false; + } + if (this->is_clip_distance_mesa) { + this->location = + output_var->location + this->array_subscript / 4; + } else { + this->location = + output_var->location + this->array_subscript * matrix_cols; + } + this->size = 1; + } else { + this->location = output_var->location; + this->size = actual_array_size; + } + this->vector_elements = output_var->type->fields.array->vector_elements; + this->matrix_columns = matrix_cols; + if (this->is_clip_distance_mesa) + this->type = GL_FLOAT; + else + this->type = output_var->type->fields.array->gl_type; + } else { + /* Regular variable (scalar, vector, or matrix) */ + if (this->is_subscripted) { + linker_error(prog, "Transform feedback varying %s requested, " + "but %s is not an array.", + this->orig_name, this->var_name); + return false; + } + this->location = output_var->location; + this->size = 1; + this->vector_elements = output_var->type->vector_elements; + this->matrix_columns = output_var->type->matrix_columns; + this->type = output_var->type->gl_type; + } + + /* From GL_EXT_transform_feedback: + * A program will fail to link if: + * + * * the total number of components to capture in any varying + * variable in is greater than the constant + * MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT and the + * buffer mode is SEPARATE_ATTRIBS_EXT; + */ + if (prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS && + this->num_components() > + ctx->Const.MaxTransformFeedbackSeparateComponents) { + linker_error(prog, "Transform feedback varying %s exceeds " + "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS.", + this->orig_name); + return false; + } + + return true; +} + + +bool +tfeedback_decl::accumulate_num_outputs(struct gl_shader_program *prog, + unsigned *count) +{ + if (!this->is_varying()) { + return true; + } + + if (!this->is_assigned()) { + /* From GL_EXT_transform_feedback: + * A program will fail to link if: + * + * * any variable name specified in the array is not + * declared as an output in the geometry shader (if present) or + * the vertex shader (if no geometry shader is present); + */ + linker_error(prog, "Transform feedback varying %s undeclared.", + this->orig_name); + return false; + } + + unsigned translated_size = this->size; + if (this->is_clip_distance_mesa) + translated_size = (translated_size + 3) / 4; + + *count += translated_size * this->matrix_columns; + + return true; +} + + +/** + * Update gl_transform_feedback_info to reflect this tfeedback_decl. + * + * If an error occurs, the error is reported through linker_error() and false + * is returned. + */ +bool +tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog, + struct gl_transform_feedback_info *info, + unsigned buffer, const unsigned max_outputs) const +{ + assert(!this->next_buffer_separator); + + /* Handle gl_SkipComponents. */ + if (this->skip_components) { + info->BufferStride[buffer] += this->skip_components; + return true; + } + + /* From GL_EXT_transform_feedback: + * A program will fail to link if: + * + * * the total number of components to capture is greater than + * the constant MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT + * and the buffer mode is INTERLEAVED_ATTRIBS_EXT. + */ + if (prog->TransformFeedback.BufferMode == GL_INTERLEAVED_ATTRIBS && + info->BufferStride[buffer] + this->num_components() > + ctx->Const.MaxTransformFeedbackInterleavedComponents) { + linker_error(prog, "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS " + "limit has been exceeded."); + return false; + } + + unsigned translated_size = this->size; + if (this->is_clip_distance_mesa) + translated_size = (translated_size + 3) / 4; + unsigned components_so_far = 0; + for (unsigned index = 0; index < translated_size; ++index) { + for (unsigned v = 0; v < this->matrix_columns; ++v) { + unsigned num_components = this->vector_elements; + assert(info->NumOutputs < max_outputs); + info->Outputs[info->NumOutputs].ComponentOffset = 0; + if (this->is_clip_distance_mesa) { + if (this->is_subscripted) { + num_components = 1; + info->Outputs[info->NumOutputs].ComponentOffset = + this->array_subscript % 4; + } else { + num_components = MIN2(4, this->size - components_so_far); + } + } + info->Outputs[info->NumOutputs].OutputRegister = + this->location + v + index * this->matrix_columns; + info->Outputs[info->NumOutputs].NumComponents = num_components; + info->Outputs[info->NumOutputs].OutputBuffer = buffer; + info->Outputs[info->NumOutputs].DstOffset = info->BufferStride[buffer]; + ++info->NumOutputs; + info->BufferStride[buffer] += num_components; + components_so_far += num_components; + } + } + assert(components_so_far == this->num_components()); + + info->Varyings[info->NumVarying].Name = ralloc_strdup(prog, this->orig_name); + info->Varyings[info->NumVarying].Type = this->type; + info->Varyings[info->NumVarying].Size = this->size; + info->NumVarying++; + + return true; +} + + +/** + * Parse all the transform feedback declarations that were passed to + * glTransformFeedbackVaryings() and store them in tfeedback_decl objects. + * + * If an error occurs, the error is reported through linker_error() and false + * is returned. + */ +static bool +parse_tfeedback_decls(struct gl_context *ctx, struct gl_shader_program *prog, + const void *mem_ctx, unsigned num_names, + char **varying_names, tfeedback_decl *decls) +{ + for (unsigned i = 0; i < num_names; ++i) { + if (!decls[i].init(ctx, prog, mem_ctx, varying_names[i])) + return false; + + if (!decls[i].is_varying()) + continue; + + /* From GL_EXT_transform_feedback: + * A program will fail to link if: + * + * * any two entries in the array specify the same varying + * variable; + * + * We interpret this to mean "any two entries in the array + * specify the same varying variable and array index", since transform + * feedback of arrays would be useless otherwise. + */ + for (unsigned j = 0; j < i; ++j) { + if (!decls[j].is_varying()) + continue; + + if (tfeedback_decl::is_same(decls[i], decls[j])) { + linker_error(prog, "Transform feedback varying %s specified " + "more than once.", varying_names[i]); + return false; + } + } + } + return true; +} + + +/** + * Assign a location for a variable that is produced in one pipeline stage + * (the "producer") and consumed in the next stage (the "consumer"). + * + * \param input_var is the input variable declaration in the consumer. + * + * \param output_var is the output variable declaration in the producer. + * + * \param input_index is the counter that keeps track of assigned input + * locations in the consumer. + * + * \param output_index is the counter that keeps track of assigned output + * locations in the producer. + * + * It is permissible for \c input_var to be NULL (this happens if a variable + * is output by the producer and consumed by transform feedback, but not + * consumed by the consumer). + * + * If the variable has already been assigned a location, this function has no + * effect. + */ +void +assign_varying_location(ir_variable *input_var, ir_variable *output_var, + unsigned *input_index, unsigned *output_index) +{ + if (output_var->location != -1) { + /* Location already assigned. */ + return; + } + + if (input_var) { + assert(input_var->location == -1); + input_var->location = *input_index; + } + + output_var->location = *output_index; + + /* FINISHME: Support for "varying" records in GLSL 1.50. */ + assert(!output_var->type->is_record()); + + if (output_var->type->is_array()) { + const unsigned slots = output_var->type->length + * output_var->type->fields.array->matrix_columns; + + *output_index += slots; + *input_index += slots; + } else { + const unsigned slots = output_var->type->matrix_columns; + + *output_index += slots; + *input_index += slots; + } +} + + +/** + * Is the given variable a varying variable to be counted against the + * limit in ctx->Const.MaxVarying? + * This includes variables such as texcoords, colors and generic + * varyings, but excludes variables such as gl_FrontFacing and gl_FragCoord. + */ +static bool +is_varying_var(GLenum shaderType, const ir_variable *var) +{ + /* Only fragment shaders will take a varying variable as an input */ + if (shaderType == GL_FRAGMENT_SHADER && + var->mode == ir_var_in && + var->explicit_location) { + switch (var->location) { + case FRAG_ATTRIB_WPOS: + case FRAG_ATTRIB_FACE: + case FRAG_ATTRIB_PNTC: + return false; + default: + return true; + } + } + return false; +} + + +/** + * Assign locations for all variables that are produced in one pipeline stage + * (the "producer") and consumed in the next stage (the "consumer"). + * + * Variables produced by the producer may also be consumed by transform + * feedback. + * + * \param num_tfeedback_decls is the number of declarations indicating + * variables that may be consumed by transform feedback. + * + * \param tfeedback_decls is a pointer to an array of tfeedback_decl objects + * representing the result of parsing the strings passed to + * glTransformFeedbackVaryings(). assign_location() will be called for + * each of these objects that matches one of the outputs of the + * producer. + * + * When num_tfeedback_decls is nonzero, it is permissible for the consumer to + * be NULL. In this case, varying locations are assigned solely based on the + * requirements of transform feedback. + */ bool assign_varying_locations(struct gl_context *ctx, struct gl_shader_program *prog, - gl_shader *producer, gl_shader *consumer) + gl_shader *producer, gl_shader *consumer, + unsigned num_tfeedback_decls, + tfeedback_decl *tfeedback_decls) { /* FINISHME: Set dynamically when geometry shader support is added. */ unsigned output_index = VERT_RESULT_VAR0; @@ -1483,97 +2066,114 @@ assign_varying_locations(struct gl_context *ctx, * not being inputs. This lets the optimizer eliminate them. */ - invalidate_variable_locations(producer, ir_var_out, VERT_RESULT_VAR0); - invalidate_variable_locations(consumer, ir_var_in, FRAG_ATTRIB_VAR0); + link_invalidate_variable_locations(producer, ir_var_out, VERT_RESULT_VAR0); + if (consumer) + link_invalidate_variable_locations(consumer, ir_var_in, FRAG_ATTRIB_VAR0); foreach_list(node, producer->ir) { ir_variable *const output_var = ((ir_instruction *) node)->as_variable(); - if ((output_var == NULL) || (output_var->mode != ir_var_out) - || (output_var->location != -1)) + if ((output_var == NULL) || (output_var->mode != ir_var_out)) continue; - ir_variable *const input_var = - consumer->symbols->get_variable(output_var->name); + ir_variable *input_var = + consumer ? consumer->symbols->get_variable(output_var->name) : NULL; - if ((input_var == NULL) || (input_var->mode != ir_var_in)) - continue; + if (input_var && input_var->mode != ir_var_in) + input_var = NULL; - assert(input_var->location == -1); + if (input_var) { + assign_varying_location(input_var, output_var, &input_index, + &output_index); + } - output_var->location = output_index; - input_var->location = input_index; + for (unsigned i = 0; i < num_tfeedback_decls; ++i) { + if (!tfeedback_decls[i].is_varying()) + continue; - /* FINISHME: Support for "varying" records in GLSL 1.50. */ - assert(!output_var->type->is_record()); - - if (output_var->type->is_array()) { - const unsigned slots = output_var->type->length - * output_var->type->fields.array->matrix_columns; - - output_index += slots; - input_index += slots; - } else { - const unsigned slots = output_var->type->matrix_columns; - - output_index += slots; - input_index += slots; + if (!tfeedback_decls[i].is_assigned() && + tfeedback_decls[i].matches_var(output_var)) { + if (output_var->location == -1) { + assign_varying_location(input_var, output_var, &input_index, + &output_index); + } + if (!tfeedback_decls[i].assign_location(ctx, prog, output_var)) + return false; + } } } unsigned varying_vectors = 0; - foreach_list(node, consumer->ir) { - ir_variable *const var = ((ir_instruction *) node)->as_variable(); + if (consumer) { + foreach_list(node, consumer->ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); - if ((var == NULL) || (var->mode != ir_var_in)) - continue; + if ((var == NULL) || (var->mode != ir_var_in)) + continue; - if (var->location == -1) { - if (prog->Version <= 120) { - /* On page 25 (page 31 of the PDF) of the GLSL 1.20 spec: - * - * Only those varying variables used (i.e. read) in - * the fragment shader executable must be written to - * by the vertex shader executable; declaring - * superfluous varying variables in a vertex shader is - * permissible. - * - * We interpret this text as meaning that the VS must - * write the variable for the FS to read it. See - * "glsl1-varying read but not written" in piglit. - */ + if (var->location == -1) { + if (prog->Version <= 120) { + /* On page 25 (page 31 of the PDF) of the GLSL 1.20 spec: + * + * Only those varying variables used (i.e. read) in + * the fragment shader executable must be written to + * by the vertex shader executable; declaring + * superfluous varying variables in a vertex shader is + * permissible. + * + * We interpret this text as meaning that the VS must + * write the variable for the FS to read it. See + * "glsl1-varying read but not written" in piglit. + */ - linker_error(prog, "fragment shader varying %s not written " - "by vertex shader\n.", var->name); - } + linker_error(prog, "fragment shader varying %s not written " + "by vertex shader\n.", var->name); + } - /* An 'in' variable is only really a shader input if its - * value is written by the previous stage. - */ - var->mode = ir_var_auto; - } else { - /* The packing rules are used for vertex shader inputs are also used - * for fragment shader inputs. - */ - varying_vectors += count_attribute_slots(var->type); + /* An 'in' variable is only really a shader input if its + * value is written by the previous stage. + */ + var->mode = ir_var_auto; + } else if (is_varying_var(consumer->Type, var)) { + /* The packing rules are used for vertex shader inputs are also + * used for fragment shader inputs. + */ + varying_vectors += count_attribute_slots(var->type); + } } } if (ctx->API == API_OPENGLES2 || prog->Version == 100) { if (varying_vectors > ctx->Const.MaxVarying) { - linker_error(prog, "shader uses too many varying vectors " - "(%u > %u)\n", - varying_vectors, ctx->Const.MaxVarying); - return false; + if (ctx->Const.GLSLSkipStrictMaxVaryingLimitCheck) { + linker_warning(prog, "shader uses too many varying vectors " + "(%u > %u), but the driver will try to optimize " + "them out; this is non-portable out-of-spec " + "behavior\n", + varying_vectors, ctx->Const.MaxVarying); + } else { + linker_error(prog, "shader uses too many varying vectors " + "(%u > %u)\n", + varying_vectors, ctx->Const.MaxVarying); + return false; + } } } else { const unsigned float_components = varying_vectors * 4; if (float_components > ctx->Const.MaxVarying * 4) { - linker_error(prog, "shader uses too many varying components " - "(%u > %u)\n", - float_components, ctx->Const.MaxVarying * 4); - return false; + if (ctx->Const.GLSLSkipStrictMaxVaryingLimitCheck) { + linker_warning(prog, "shader uses too many varying components " + "(%u > %u), but the driver will try to optimize " + "them out; this is non-portable out-of-spec " + "behavior\n", + float_components, ctx->Const.MaxVarying * 4); + } else { + linker_error(prog, "shader uses too many varying components " + "(%u > %u)\n", + float_components, ctx->Const.MaxVarying * 4); + return false; + } } } @@ -1581,20 +2181,233 @@ assign_varying_locations(struct gl_context *ctx, } +/** + * Store transform feedback location assignments into + * prog->LinkedTransformFeedback based on the data stored in tfeedback_decls. + * + * If an error occurs, the error is reported through linker_error() and false + * is returned. + */ +static bool +store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, + unsigned num_tfeedback_decls, + tfeedback_decl *tfeedback_decls) +{ + bool separate_attribs_mode = + prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS; + + ralloc_free(prog->LinkedTransformFeedback.Varyings); + ralloc_free(prog->LinkedTransformFeedback.Outputs); + + memset(&prog->LinkedTransformFeedback, 0, + sizeof(prog->LinkedTransformFeedback)); + + prog->LinkedTransformFeedback.Varyings = + rzalloc_array(prog, + struct gl_transform_feedback_varying_info, + num_tfeedback_decls); + + unsigned num_outputs = 0; + for (unsigned i = 0; i < num_tfeedback_decls; ++i) + if (!tfeedback_decls[i].accumulate_num_outputs(prog, &num_outputs)) + return false; + + prog->LinkedTransformFeedback.Outputs = + rzalloc_array(prog, + struct gl_transform_feedback_output, + num_outputs); + + unsigned num_buffers = 0; + + if (separate_attribs_mode) { + /* GL_SEPARATE_ATTRIBS */ + for (unsigned i = 0; i < num_tfeedback_decls; ++i) { + if (!tfeedback_decls[i].store(ctx, prog, &prog->LinkedTransformFeedback, + num_buffers, num_outputs)) + return false; + + num_buffers++; + } + } + else { + /* GL_INVERLEAVED_ATTRIBS */ + for (unsigned i = 0; i < num_tfeedback_decls; ++i) { + if (tfeedback_decls[i].is_next_buffer_separator()) { + num_buffers++; + continue; + } + + if (!tfeedback_decls[i].store(ctx, prog, + &prog->LinkedTransformFeedback, + num_buffers, num_outputs)) + return false; + } + num_buffers++; + } + + assert(prog->LinkedTransformFeedback.NumOutputs == num_outputs); + + prog->LinkedTransformFeedback.NumBuffers = num_buffers; + return true; +} + +/** + * Store the gl_FragDepth layout in the gl_shader_program struct. + */ +static void +store_fragdepth_layout(struct gl_shader_program *prog) +{ + if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) { + return; + } + + struct exec_list *ir = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir; + + /* We don't look up the gl_FragDepth symbol directly because if + * gl_FragDepth is not used in the shader, it's removed from the IR. + * However, the symbol won't be removed from the symbol table. + * + * We're only interested in the cases where the variable is NOT removed + * from the IR. + */ + foreach_list(node, ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); + + if (var == NULL || var->mode != ir_var_out) { + continue; + } + + if (strcmp(var->name, "gl_FragDepth") == 0) { + switch (var->depth_layout) { + case ir_depth_layout_none: + prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_NONE; + return; + case ir_depth_layout_any: + prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_ANY; + return; + case ir_depth_layout_greater: + prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_GREATER; + return; + case ir_depth_layout_less: + prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_LESS; + return; + case ir_depth_layout_unchanged: + prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_UNCHANGED; + return; + default: + assert(0); + return; + } + } + } +} + +/** + * Validate the resources used by a program versus the implementation limits + */ +static bool +check_resources(struct gl_context *ctx, struct gl_shader_program *prog) +{ + static const char *const shader_names[MESA_SHADER_TYPES] = { + "vertex", "fragment", "geometry" + }; + + const unsigned max_samplers[MESA_SHADER_TYPES] = { + ctx->Const.MaxVertexTextureImageUnits, + ctx->Const.MaxTextureImageUnits, + ctx->Const.MaxGeometryTextureImageUnits + }; + + const unsigned max_uniform_components[MESA_SHADER_TYPES] = { + ctx->Const.VertexProgram.MaxUniformComponents, + ctx->Const.FragmentProgram.MaxUniformComponents, + 0 /* FINISHME: Geometry shaders. */ + }; + + const unsigned max_uniform_blocks[MESA_SHADER_TYPES] = { + ctx->Const.VertexProgram.MaxUniformBlocks, + ctx->Const.FragmentProgram.MaxUniformBlocks, + ctx->Const.GeometryProgram.MaxUniformBlocks, + }; + + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + struct gl_shader *sh = prog->_LinkedShaders[i]; + + if (sh == NULL) + continue; + + if (sh->num_samplers > max_samplers[i]) { + linker_error(prog, "Too many %s shader texture samplers", + shader_names[i]); + } + + if (sh->num_uniform_components > max_uniform_components[i]) { + if (ctx->Const.GLSLSkipStrictMaxUniformLimitCheck) { + linker_warning(prog, "Too many %s shader uniform components, " + "but the driver will try to optimize them out; " + "this is non-portable out-of-spec behavior\n", + shader_names[i]); + } else { + linker_error(prog, "Too many %s shader uniform components", + shader_names[i]); + } + } + } + + unsigned blocks[MESA_SHADER_TYPES] = {0}; + unsigned total_uniform_blocks = 0; + + for (unsigned i = 0; i < prog->NumUniformBlocks; i++) { + for (unsigned j = 0; j < MESA_SHADER_TYPES; j++) { + if (prog->UniformBlockStageIndex[j][i] != -1) { + blocks[j]++; + total_uniform_blocks++; + } + } + + if (total_uniform_blocks > ctx->Const.MaxCombinedUniformBlocks) { + linker_error(prog, "Too many combined uniform blocks (%d/%d)", + prog->NumUniformBlocks, + ctx->Const.MaxCombinedUniformBlocks); + } else { + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { + if (blocks[i] > max_uniform_blocks[i]) { + linker_error(prog, "Too many %s uniform blocks (%d/%d)", + shader_names[i], + blocks[i], + max_uniform_blocks[i]); + break; + } + } + } + } + + return prog->LinkStatus; +} + void link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) { + tfeedback_decl *tfeedback_decls = NULL; + unsigned num_tfeedback_decls = prog->TransformFeedback.NumVarying; + void *mem_ctx = ralloc_context(NULL); // temporary linker context prog->LinkStatus = false; prog->Validated = false; prog->_Used = false; - if (prog->InfoLog != NULL) - ralloc_free(prog->InfoLog); - + ralloc_free(prog->InfoLog); prog->InfoLog = ralloc_strdup(NULL, ""); + ralloc_free(prog->UniformBlocks); + prog->UniformBlocks = NULL; + prog->NumUniformBlocks = 0; + for (int i = 0; i < MESA_SHADER_TYPES; i++) { + ralloc_free(prog->UniformBlockStageIndex[i]); + prog->UniformBlockStageIndex[i] = NULL; + } + /* Separate the shaders into groups based on their type. */ struct gl_shader **vert_shader_list; @@ -1633,7 +2446,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) * of all shaders must match. */ assert(min_version >= 100); - assert(max_version <= 130); + assert(max_version <= 140); if ((max_version >= 130 || min_version == 100) && min_version != max_version) { linker_error(prog, "all shaders must use same shading " @@ -1712,6 +2525,20 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) prog->LinkStatus = true; } + /* Implement the GLSL 1.30+ rule for discard vs infinite loops Do + * it before optimization because we want most of the checks to get + * dropped thanks to constant propagation. + */ + if (max_version >= 130) { + struct gl_shader *sh = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; + if (sh) { + lower_discard_flow(sh->ir); + } + } + + if (!interstage_cross_validate_uniform_blocks(prog)) + goto done; + /* Do common optimization before assigning storage for attributes, * uniforms, and varyings. Later optimization could possibly make * some of that unused. @@ -1724,14 +2551,15 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) if (!prog->LinkStatus) goto done; - while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, 32)) + if (ctx->ShaderCompilerOptions[i].LowerClipDistance) + lower_clip_distance(prog->_LinkedShaders[i]->ir); + + unsigned max_unroll = ctx->ShaderCompilerOptions[i].MaxUnrollIterations; + + while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, max_unroll)) ; } - update_array_sizes(prog); - - assign_uniform_locations(prog); - /* FINISHME: The value of the max_attribute_index parameter is * FINISHME: implementation dependent based on the value of * FINISHME: GL_MAX_VERTEX_ATTRIBS. GL_MAX_VERTEX_ATTRIBS must be @@ -1741,7 +2569,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) goto done; } - if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, ctx->Const.MaxDrawBuffers)) { + if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, MAX2(ctx->Const.MaxDrawBuffers, ctx->Const.MaxDualSourceDrawBuffers))) { goto done; } @@ -1751,22 +2579,63 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) break; } + if (num_tfeedback_decls != 0) { + /* From GL_EXT_transform_feedback: + * A program will fail to link if: + * + * * the specified by TransformFeedbackVaryingsEXT is + * non-zero, but the program object has no vertex or geometry + * shader; + */ + if (prev >= MESA_SHADER_FRAGMENT) { + linker_error(prog, "Transform feedback varyings specified, but " + "no vertex or geometry shader is present."); + goto done; + } + + tfeedback_decls = ralloc_array(mem_ctx, tfeedback_decl, + prog->TransformFeedback.NumVarying); + if (!parse_tfeedback_decls(ctx, prog, mem_ctx, num_tfeedback_decls, + prog->TransformFeedback.VaryingNames, + tfeedback_decls)) + goto done; + } + for (unsigned i = prev + 1; i < MESA_SHADER_TYPES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; - if (!assign_varying_locations(ctx, prog, - prog->_LinkedShaders[prev], - prog->_LinkedShaders[i])) { + if (!assign_varying_locations( + ctx, prog, prog->_LinkedShaders[prev], prog->_LinkedShaders[i], + i == MESA_SHADER_FRAGMENT ? num_tfeedback_decls : 0, + tfeedback_decls)) goto done; - } prev = i; } + if (prev != MESA_SHADER_FRAGMENT && num_tfeedback_decls != 0) { + /* There was no fragment shader, but we still have to assign varying + * locations for use by transform feedback. + */ + if (!assign_varying_locations( + ctx, prog, prog->_LinkedShaders[prev], NULL, num_tfeedback_decls, + tfeedback_decls)) + goto done; + } + + if (!store_tfeedback_info(ctx, prog, num_tfeedback_decls, tfeedback_decls)) + goto done; + if (prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL) { demote_shader_inputs_and_outputs(prog->_LinkedShaders[MESA_SHADER_VERTEX], ir_var_out); + + /* Eliminate code that is now dead due to unused vertex outputs being + * demoted. + */ + while (do_dead_code(prog->_LinkedShaders[MESA_SHADER_VERTEX]->ir, false)) + ; } if (prog->_LinkedShaders[MESA_SHADER_GEOMETRY] != NULL) { @@ -1775,19 +2644,40 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) demote_shader_inputs_and_outputs(sh, ir_var_in); demote_shader_inputs_and_outputs(sh, ir_var_inout); demote_shader_inputs_and_outputs(sh, ir_var_out); + + /* Eliminate code that is now dead due to unused geometry outputs being + * demoted. + */ + while (do_dead_code(prog->_LinkedShaders[MESA_SHADER_GEOMETRY]->ir, false)) + ; } if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] != NULL) { gl_shader *const sh = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; demote_shader_inputs_and_outputs(sh, ir_var_in); + + /* Eliminate code that is now dead due to unused fragment inputs being + * demoted. This shouldn't actually do anything other than remove + * declarations of the (now unused) global variables. + */ + while (do_dead_code(prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir, false)) + ; } + update_array_sizes(prog); + link_assign_uniform_locations(prog); + store_fragdepth_layout(prog); + + if (!check_resources(ctx, prog)) + goto done; + /* OpenGL ES requires that a vertex shader and a fragment shader both be * present in a linked program. By checking for use of shading language * version 1.00, we also catch the GL_ARB_ES2_compatibility case. */ - if (ctx->API == API_OPENGLES2 || prog->Version == 100) { + if (!prog->InternalSeparateShader && + (ctx->API == API_OPENGLES2 || prog->Version == 100)) { if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) { linker_error(prog, "program lacks a vertex shader\n"); } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) { @@ -1806,6 +2696,14 @@ done: /* Retain any live IR, but trash the rest. */ reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir); + + /* The symbol table in the linked shaders may contain references to + * variables that were removed (e.g., unused uniforms). Since it may + * contain junk, there is no possible valid use. Delete it and set the + * pointer to NULL. + */ + delete prog->_LinkedShaders[i]->symbols; + prog->_LinkedShaders[i]->symbols = NULL; } ralloc_free(mem_ctx); diff --git a/3rdparty/glsl-optimizer/src/glsl/linker.h b/3rdparty/glsl-optimizer/src/glsl/linker.h index 769cf68b6..c98122f68 100644 --- a/3rdparty/glsl-optimizer/src/glsl/linker.h +++ b/3rdparty/glsl-optimizer/src/glsl/linker.h @@ -1,3 +1,4 @@ +/* -*- c++ -*- */ /* * Copyright © 2010 Intel Corporation * @@ -29,4 +30,73 @@ extern bool link_function_calls(gl_shader_program *prog, gl_shader *main, gl_shader **shader_list, unsigned num_shaders); +extern void +link_invalidate_variable_locations(gl_shader *sh, enum ir_variable_mode mode, + int generic_base); + +extern void +link_assign_uniform_locations(struct gl_shader_program *prog); + +extern void +link_set_uniform_initializers(struct gl_shader_program *prog); + +extern int +link_cross_validate_uniform_block(void *mem_ctx, + struct gl_uniform_block **linked_blocks, + unsigned int *num_linked_blocks, + struct gl_uniform_block *new_block); + +void +link_assign_uniform_block_offsets(struct gl_shader *shader); + +/** + * Class for processing all of the leaf fields of an uniform + * + * Leaves are, roughly speaking, the parts of the uniform that the application + * could query with \c glGetUniformLocation (or that could be returned by + * \c glGetActiveUniforms). + * + * Classes my derive from this class to implement specific functionality. + * This class only provides the mechanism to iterate over the leaves. Derived + * classes must implement \c ::visit_field and may override \c ::process. + */ +class uniform_field_visitor { +public: + /** + * Begin processing a uniform + * + * Classes that overload this function should call \c ::process from the + * base class to start the recursive processing of the uniform. + * + * \param var The uniform variable that is to be processed + * + * Calls \c ::visit_field for each leaf of the uniform. + */ + void process(ir_variable *var); + +protected: + /** + * Method invoked for each leaf of the uniform + * + * \param type Type of the field. + * \param name Fully qualified name of the field. + */ + virtual void visit_field(const glsl_type *type, const char *name) = 0; + +private: + /** + * \param name_length Length of the current name \b not including the + * terminating \c NUL character. + */ + void recursion(const glsl_type *t, char **name, size_t name_length); +}; + +extern struct gl_shader * +link_intrastage_shaders(void *mem_ctx, + struct gl_context *ctx, + struct gl_shader_program *prog, + struct gl_shader **shader_list, + unsigned num_shaders); + + #endif /* GLSL_LINKER_H */ diff --git a/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp b/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp index 9bba6a97c..6a0e4da51 100644 --- a/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp @@ -110,6 +110,8 @@ public: virtual ir_visitor_status visit(ir_loop_jump *); virtual ir_visitor_status visit(ir_dereference_variable *); + virtual ir_visitor_status visit_enter(ir_call *); + virtual ir_visitor_status visit_enter(ir_loop *); virtual ir_visitor_status visit_leave(ir_loop *); virtual ir_visitor_status visit_enter(ir_assignment *); @@ -152,6 +154,21 @@ loop_analysis::visit(ir_loop_jump *ir) } +ir_visitor_status +loop_analysis::visit_enter(ir_call *ir) +{ + /* If we're not somewhere inside a loop, there's nothing to do. */ + if (this->state.is_empty()) + return visit_continue; + + loop_variable_state *const ls = + (loop_variable_state *) this->state.get_head(); + + ls->contains_calls = true; + return visit_continue_with_parent; +} + + ir_visitor_status loop_analysis::visit(ir_dereference_variable *ir) { @@ -209,6 +226,17 @@ loop_analysis::visit_leave(ir_loop *ir) loop_variable_state *const ls = (loop_variable_state *) this->state.pop_head(); + /* Function calls may contain side effects. These could alter any of our + * variables in ways that cannot be known, and may even terminate shader + * execution (say, calling discard in the fragment shader). So we can't + * rely on any of our analysis about assignments to variables. + * + * We could perform some conservative analysis (prove there's no statically + * possible assignment, etc.) but it isn't worth it for now; function + * inlining will allow us to unroll loops anyway. + */ + if (ls->contains_calls) + return visit_continue; foreach_list(node, &ir->body_instructions) { /* Skip over declarations at the start of a loop. diff --git a/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h b/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h index 229730836..05c982fc1 100644 --- a/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h +++ b/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h @@ -122,10 +122,16 @@ public: */ unsigned num_loop_jumps; + /** + * Whether this loop contains any function calls. + */ + bool contains_calls; + loop_variable_state() { this->max_iterations = -1; this->num_loop_jumps = 0; + this->contains_calls = false; this->var_hash = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare); } @@ -134,6 +140,23 @@ public: { hash_table_dtor(this->var_hash); } + + static void* operator new(size_t size, void *ctx) + { + void *lvs = ralloc_size(ctx, size); + assert(lvs != NULL); + + ralloc_set_destructor(lvs, (void (*)(void*)) destructor); + + return lvs; + } + +private: + static void + destructor(loop_variable_state *lvs) + { + lvs->~loop_variable_state(); + } }; diff --git a/3rdparty/glsl-optimizer/src/glsl/loop_controls.cpp b/3rdparty/glsl-optimizer/src/glsl/loop_controls.cpp index 9acbadc50..2fd128f73 100644 --- a/3rdparty/glsl-optimizer/src/glsl/loop_controls.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/loop_controls.cpp @@ -26,6 +26,8 @@ #include "glsl_types.h" #include "loop_analysis.h" #include "ir_hierarchical_visitor.h" +#include "ir_variable_refcount.h" + /** * Find an initializer of a variable outside a loop @@ -44,6 +46,8 @@ ir_rvalue * find_initial_value(ir_loop *loop, ir_variable *var) { + ir_variable_refcount_visitor refs; + for (exec_node *node = loop->prev; !node->is_head_sentinel(); node = node->prev) { @@ -55,7 +59,10 @@ find_initial_value(ir_loop *loop, ir_variable *var) case ir_type_loop_jump: case ir_type_return: case ir_type_if: - return NULL; + ir->accept(&refs); + if (refs.find_variable_entry(var)) + return NULL; + break; case ir_type_function: case ir_type_function_signature: diff --git a/3rdparty/glsl-optimizer/src/glsl/loop_unroll.cpp b/3rdparty/glsl-optimizer/src/glsl/loop_unroll.cpp index 5b84e1014..6e5f78841 100644 --- a/3rdparty/glsl-optimizer/src/glsl/loop_unroll.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/loop_unroll.cpp @@ -50,6 +50,38 @@ is_break(ir_instruction *ir) && ((ir_loop_jump *) ir)->is_break(); } +class loop_unroll_count : public ir_hierarchical_visitor { +public: + int nodes; + bool fail; + + loop_unroll_count(exec_list *list) + { + nodes = 0; + fail = false; + + run(list); + } + + virtual ir_visitor_status visit_enter(ir_assignment *ir) + { + nodes++; + return visit_continue; + } + + virtual ir_visitor_status visit_enter(ir_expression *ir) + { + nodes++; + return visit_continue; + } + + virtual ir_visitor_status visit_enter(ir_loop *ir) + { + fail = true; + return visit_continue; + } +}; + ir_visitor_status loop_unroll_visitor::visit_leave(ir_loop *ir) @@ -78,6 +110,13 @@ loop_unroll_visitor::visit_leave(ir_loop *ir) if (iterations > (int) max_iterations) return visit_continue; + /* Don't try to unroll nested loops and loops with a huge body. + */ + loop_unroll_count count(&ir->body_instructions); + + if (count.fail || count.nodes * iterations > (int)max_iterations * 15) + return visit_continue; + if (ls->num_loop_jumps > 1) return visit_continue; else if (ls->num_loop_jumps) { diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_clip_distance.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_clip_distance.cpp new file mode 100644 index 000000000..b33504d0b --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/lower_clip_distance.cpp @@ -0,0 +1,344 @@ +/* + * Copyright © 2011 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** + * \file lower_clip_distance.cpp + * + * This pass accounts for the difference between the way + * gl_ClipDistance is declared in standard GLSL (as an array of + * floats), and the way it is frequently implemented in hardware (as + * a pair of vec4s, with four clip distances packed into each). + * + * The declaration of gl_ClipDistance is replaced with a declaration + * of gl_ClipDistanceMESA, and any references to gl_ClipDistance are + * translated to refer to gl_ClipDistanceMESA with the appropriate + * swizzling of array indices. For instance: + * + * gl_ClipDistance[i] + * + * is translated into: + * + * gl_ClipDistanceMESA[i>>2][i&3] + * + * Since some hardware may not internally represent gl_ClipDistance as a pair + * of vec4's, this lowering pass is optional. To enable it, set the + * LowerClipDistance flag in gl_shader_compiler_options to true. + */ + +#include "ir_hierarchical_visitor.h" +#include "ir.h" + +class lower_clip_distance_visitor : public ir_hierarchical_visitor { +public: + lower_clip_distance_visitor() + : progress(false), old_clip_distance_var(NULL), + new_clip_distance_var(NULL) + { + } + + virtual ir_visitor_status visit(ir_variable *); + void create_indices(ir_rvalue*, ir_rvalue *&, ir_rvalue *&); + virtual ir_visitor_status visit_leave(ir_dereference_array *); + virtual ir_visitor_status visit_leave(ir_assignment *); + void visit_new_assignment(ir_assignment *ir); + virtual ir_visitor_status visit_leave(ir_call *); + + bool progress; + + /** + * Pointer to the declaration of gl_ClipDistance, if found. + */ + ir_variable *old_clip_distance_var; + + /** + * Pointer to the newly-created gl_ClipDistanceMESA variable. + */ + ir_variable *new_clip_distance_var; +}; + + +/** + * Replace any declaration of gl_ClipDistance as an array of floats with a + * declaration of gl_ClipDistanceMESA as an array of vec4's. + */ +ir_visitor_status +lower_clip_distance_visitor::visit(ir_variable *ir) +{ + /* No point in looking for the declaration of gl_ClipDistance if + * we've already found it. + */ + if (this->old_clip_distance_var) + return visit_continue; + + if (ir->name && strcmp(ir->name, "gl_ClipDistance") == 0) { + this->progress = true; + this->old_clip_distance_var = ir; + assert (ir->type->is_array()); + assert (ir->type->element_type() == glsl_type::float_type); + unsigned new_size = (ir->type->array_size() + 3) / 4; + + /* Clone the old var so that we inherit all of its properties */ + this->new_clip_distance_var = ir->clone(ralloc_parent(ir), NULL); + + /* And change the properties that we need to change */ + this->new_clip_distance_var->name + = ralloc_strdup(this->new_clip_distance_var, "gl_ClipDistanceMESA"); + this->new_clip_distance_var->type + = glsl_type::get_array_instance(glsl_type::vec4_type, new_size); + this->new_clip_distance_var->max_array_access = ir->max_array_access / 4; + + ir->replace_with(this->new_clip_distance_var); + } + return visit_continue; +} + + +/** + * Create the necessary GLSL rvalues to index into gl_ClipDistanceMESA based + * on the rvalue previously used to index into gl_ClipDistance. + * + * \param array_index Selects one of the vec4's in gl_ClipDistanceMESA + * \param swizzle_index Selects a component within the vec4 selected by + * array_index. + */ +void +lower_clip_distance_visitor::create_indices(ir_rvalue *old_index, + ir_rvalue *&array_index, + ir_rvalue *&swizzle_index) +{ + void *ctx = ralloc_parent(old_index); + + /* Make sure old_index is a signed int so that the bitwise "shift" and + * "and" operations below type check properly. + */ + if (old_index->type != glsl_type::int_type) { + assert (old_index->type == glsl_type::uint_type); + old_index = new(ctx) ir_expression(ir_unop_u2i, old_index); + } + + ir_constant *old_index_constant = old_index->constant_expression_value(); + if (old_index_constant) { + /* gl_ClipDistance is being accessed via a constant index. Don't bother + * creating expressions to calculate the lowered indices. Just create + * constants. + */ + int const_val = old_index_constant->get_int_component(0); + array_index = new(ctx) ir_constant(const_val / 4); + swizzle_index = new(ctx) ir_constant(const_val % 4); + } else { + /* Create a variable to hold the value of old_index (so that we + * don't compute it twice). + */ + ir_variable *old_index_var = new(ctx) ir_variable( + glsl_type::int_type, "clip_distance_index", ir_var_temporary, glsl_precision_undefined); + this->base_ir->insert_before(old_index_var); + this->base_ir->insert_before(new(ctx) ir_assignment( + new(ctx) ir_dereference_variable(old_index_var), old_index)); + + /* Create the expression clip_distance_index / 4. Do this as a bit + * shift because that's likely to be more efficient. + */ + array_index = new(ctx) ir_expression( + ir_binop_rshift, new(ctx) ir_dereference_variable(old_index_var), + new(ctx) ir_constant(2)); + + /* Create the expression clip_distance_index % 4. Do this as a bitwise + * AND because that's likely to be more efficient. + */ + swizzle_index = new(ctx) ir_expression( + ir_binop_bit_and, new(ctx) ir_dereference_variable(old_index_var), + new(ctx) ir_constant(3)); + } +} + + +/** + * Replace any expression that indexes into the gl_ClipDistance array with an + * expression that indexes into one of the vec4's in gl_ClipDistanceMESA and + * accesses the appropriate component. + */ +ir_visitor_status +lower_clip_distance_visitor::visit_leave(ir_dereference_array *ir) +{ + /* If the gl_ClipDistance var hasn't been declared yet, then + * there's no way this deref can refer to it. + */ + if (!this->old_clip_distance_var) + return visit_continue; + + ir_dereference_variable *old_var_ref = ir->array->as_dereference_variable(); + if (old_var_ref && old_var_ref->var == this->old_clip_distance_var) { + this->progress = true; + ir_rvalue *array_index; + ir_rvalue *swizzle_index; + this->create_indices(ir->array_index, array_index, swizzle_index); + void *mem_ctx = ralloc_parent(ir); + ir->array = new(mem_ctx) ir_dereference_array( + this->new_clip_distance_var, array_index); + ir->array_index = swizzle_index; + } + + return visit_continue; +} + + +/** + * Replace any assignment having gl_ClipDistance (undereferenced) as its LHS + * or RHS with a sequence of assignments, one for each component of the array. + * Each of these assignments is lowered to refer to gl_ClipDistanceMESA as + * appropriate. + */ +ir_visitor_status +lower_clip_distance_visitor::visit_leave(ir_assignment *ir) +{ + ir_dereference_variable *lhs_var = ir->lhs->as_dereference_variable(); + ir_dereference_variable *rhs_var = ir->rhs->as_dereference_variable(); + if ((lhs_var && lhs_var->var == this->old_clip_distance_var) + || (rhs_var && rhs_var->var == this->old_clip_distance_var)) { + /* LHS or RHS of the assignment is the entire gl_ClipDistance array. + * Since we are reshaping gl_ClipDistance from an array of floats to an + * array of vec4's, this isn't going to work as a bulk assignment + * anymore, so unroll it to element-by-element assignments and lower + * each of them. + * + * Note: to unroll into element-by-element assignments, we need to make + * clones of the LHS and RHS. This is only safe if the LHS and RHS are + * side-effect free. Fortunately, we know that they are, because the + * only kind of rvalue that can have side effects is an ir_call, and + * ir_calls only appear (a) as a statement on their own, or (b) as the + * RHS of an assignment that stores the result of the call in a + * temporary variable. + */ + void *ctx = ralloc_parent(ir); + int array_size = this->old_clip_distance_var->type->array_size(); + for (int i = 0; i < array_size; ++i) { + ir_dereference_array *new_lhs = new(ctx) ir_dereference_array( + ir->lhs->clone(ctx, NULL), new(ctx) ir_constant(i)); + new_lhs->accept(this); + ir_dereference_array *new_rhs = new(ctx) ir_dereference_array( + ir->rhs->clone(ctx, NULL), new(ctx) ir_constant(i)); + new_rhs->accept(this); + this->base_ir->insert_before( + new(ctx) ir_assignment(new_lhs, new_rhs)); + } + ir->remove(); + } + + return visit_continue; +} + + +/** + * Set up base_ir properly and call visit_leave() on a newly created + * ir_assignment node. This is used in cases where we have to insert an + * ir_assignment in a place where we know the hierarchical visitor won't see + * it. + */ +void +lower_clip_distance_visitor::visit_new_assignment(ir_assignment *ir) +{ + ir_instruction *old_base_ir = this->base_ir; + this->base_ir = ir; + ir->accept(this); + this->base_ir = old_base_ir; +} + + +/** + * If gl_ClipDistance appears as an argument in an ir_call expression, replace + * it with a temporary variable, and make sure the ir_call is preceded and/or + * followed by assignments that copy the contents of the temporary variable to + * and/or from gl_ClipDistance. Each of these assignments is then lowered to + * refer to gl_ClipDistanceMESA. + */ +ir_visitor_status +lower_clip_distance_visitor::visit_leave(ir_call *ir) +{ + void *ctx = ralloc_parent(ir); + + const exec_node *formal_param_node = ir->callee->parameters.head; + const exec_node *actual_param_node = ir->actual_parameters.head; + while (!actual_param_node->is_tail_sentinel()) { + ir_variable *formal_param = (ir_variable *) formal_param_node; + ir_rvalue *actual_param = (ir_rvalue *) actual_param_node; + + /* Advance formal_param_node and actual_param_node now so that we can + * safely replace actual_param with another node, if necessary, below. + */ + formal_param_node = formal_param_node->next; + actual_param_node = actual_param_node->next; + + ir_dereference_variable *deref = actual_param->as_dereference_variable(); + if (deref && deref->var == this->old_clip_distance_var) { + /* User is trying to pass the whole gl_ClipDistance array to a + * function call. Since we are reshaping gl_ClipDistance from an + * array of floats to an array of vec4's, this isn't going to work + * anymore, so use a temporary array instead. + */ + ir_variable *temp_clip_distance = new(ctx) ir_variable( + actual_param->type, "temp_clip_distance", ir_var_temporary, actual_param->get_precision()); + this->base_ir->insert_before(temp_clip_distance); + actual_param->replace_with( + new(ctx) ir_dereference_variable(temp_clip_distance)); + if (formal_param->mode == ir_var_in + || formal_param->mode == ir_var_inout) { + /* Copy from gl_ClipDistance to the temporary before the call. + * Since we are going to insert this copy before the current + * instruction, we need to visit it afterwards to make sure it + * gets lowered. + */ + ir_assignment *new_assignment = new(ctx) ir_assignment( + new(ctx) ir_dereference_variable(temp_clip_distance), + new(ctx) ir_dereference_variable(old_clip_distance_var)); + this->base_ir->insert_before(new_assignment); + this->visit_new_assignment(new_assignment); + } + if (formal_param->mode == ir_var_out + || formal_param->mode == ir_var_inout) { + /* Copy from the temporary to gl_ClipDistance after the call. + * Since visit_list_elements() has already decided which + * instruction it's going to visit next, we need to visit + * afterwards to make sure it gets lowered. + */ + ir_assignment *new_assignment = new(ctx) ir_assignment( + new(ctx) ir_dereference_variable(old_clip_distance_var), + new(ctx) ir_dereference_variable(temp_clip_distance)); + this->base_ir->insert_after(new_assignment); + this->visit_new_assignment(new_assignment); + } + } + } + + return visit_continue; +} + + +bool +lower_clip_distance(exec_list *instructions) +{ + lower_clip_distance_visitor v; + + visit_list_elements(&v, instructions); + + return v.progress; +} diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_discard_flow.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_discard_flow.cpp new file mode 100644 index 000000000..cf3c4f8fd --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/lower_discard_flow.cpp @@ -0,0 +1,144 @@ +/* + * Copyright © 2010 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file lower_discard_flow.cpp + * + * Implements the GLSL 1.30 revision 9 rule for fragment shader + * discard handling: + * + * "Control flow exits the shader, and subsequent implicit or + * explicit derivatives are undefined when this control flow is + * non-uniform (meaning different fragments within the primitive + * take different control paths)." + * + * There seem to be two conflicting things here. "Control flow exits + * the shader" sounds like the discarded fragments should effectively + * jump to the end of the shader, but that breaks derivatives in the + * case of uniform control flow and causes rendering failure in the + * bushes in Unigine Tropics. + * + * The question, then, is whether the intent was "loops stop at the + * point that the only active channels left are discarded pixels" or + * "discarded pixels become inactive at the point that control flow + * returns to the top of a loop". This implements the second + * interpretation. + */ + +#include "glsl_types.h" +#include "ir.h" +#include "program/hash_table.h" + +class lower_discard_flow_visitor : public ir_hierarchical_visitor { +public: + lower_discard_flow_visitor(ir_variable *discarded) + : discarded(discarded) + { + mem_ctx = ralloc_parent(discarded); + } + + ~lower_discard_flow_visitor() + { + } + + ir_visitor_status visit_enter(ir_discard *ir); + ir_visitor_status visit_enter(ir_loop_jump *ir); + ir_visitor_status visit_enter(ir_loop *ir); + ir_visitor_status visit_enter(ir_function_signature *ir); + + ir_if *generate_discard_break(); + + ir_variable *discarded; + void *mem_ctx; +}; + +ir_visitor_status +lower_discard_flow_visitor::visit_enter(ir_loop_jump *ir) +{ + if (ir->mode != ir_loop_jump::jump_continue) + return visit_continue; + + ir->insert_before(generate_discard_break()); + + return visit_continue; +} + +ir_visitor_status +lower_discard_flow_visitor::visit_enter(ir_discard *ir) +{ + ir_dereference *lhs = new(mem_ctx) ir_dereference_variable(discarded); + ir_rvalue *rhs = new(mem_ctx) ir_constant(true); + ir_assignment *assign = new(mem_ctx) ir_assignment(lhs, rhs); + ir->insert_before(assign); + + return visit_continue; +} + +ir_visitor_status +lower_discard_flow_visitor::visit_enter(ir_loop *ir) +{ + ir->body_instructions.push_tail(generate_discard_break()); + + return visit_continue; +} + +ir_visitor_status +lower_discard_flow_visitor::visit_enter(ir_function_signature *ir) +{ + if (strcmp(ir->function_name(), "main") != 0) + return visit_continue; + + ir_dereference *lhs = new(mem_ctx) ir_dereference_variable(discarded); + ir_rvalue *rhs = new(mem_ctx) ir_constant(false); + ir_assignment *assign = new(mem_ctx) ir_assignment(lhs, rhs); + ir->body.push_head(assign); + + return visit_continue; +} + +ir_if * +lower_discard_flow_visitor::generate_discard_break() +{ + ir_rvalue *if_condition = new(mem_ctx) ir_dereference_variable(discarded); + ir_if *if_inst = new(mem_ctx) ir_if(if_condition); + + ir_instruction *br = new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break); + if_inst->then_instructions.push_tail(br); + + return if_inst; +} + +void +lower_discard_flow(exec_list *ir) +{ + void *mem_ctx = ir; + + ir_variable *var = new(mem_ctx) ir_variable(glsl_type::bool_type, + "discarded", + ir_var_temporary, glsl_precision_low); + + ir->push_head(var); + + lower_discard_flow_visitor v(var); + + visit_list_elements(&v, ir); +} diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_if_to_cond_assign.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_if_to_cond_assign.cpp index 097d2c11f..b2dd5294b 100644 --- a/3rdparty/glsl-optimizer/src/glsl/lower_if_to_cond_assign.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/lower_if_to_cond_assign.cpp @@ -79,6 +79,9 @@ public: bool lower_if_to_cond_assign(exec_list *instructions, unsigned max_depth) { + if (max_depth == UINT_MAX) + return false; + ir_if_to_cond_assign_visitor v(max_depth); visit_list_elements(&v, instructions); diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_instructions.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_instructions.cpp index 09737a24f..9541587bb 100644 --- a/3rdparty/glsl-optimizer/src/glsl/lower_instructions.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/lower_instructions.cpp @@ -32,6 +32,7 @@ * Currently supported transformations: * - SUB_TO_ADD_NEG * - DIV_TO_MUL_RCP + * - INT_DIV_TO_MUL_RCP * - EXP_TO_EXP2 * - POW_TO_EXP2 * - LOG_TO_LOG2 @@ -47,15 +48,19 @@ * want to recognize add(op0, neg(op1)) or the other way around to * produce a subtract anyway. * - * DIV_TO_MUL_RCP: - * --------------- - * Breaks an ir_unop_div expression down to op0 * (rcp(op1)). + * DIV_TO_MUL_RCP and INT_DIV_TO_MUL_RCP: + * -------------------------------------- + * Breaks an ir_binop_div expression down to op0 * (rcp(op1)). * * Many GPUs don't have a divide instruction (945 and 965 included), * but they do have an RCP instruction to compute an approximate * reciprocal. By breaking the operation down, constant reciprocals * can get constant folded. * + * DIV_TO_MUL_RCP only lowers floating point division; INT_DIV_TO_MUL_RCP + * handles the integer case, converting to and from floating point so that + * RCP is possible. + * * EXP_TO_EXP2 and LOG_TO_LOG2: * ---------------------------- * Many GPUs don't have a base e log or exponent instruction, but they @@ -69,7 +74,7 @@ * * MOD_TO_FRACT: * ------------- - * Breaks an ir_unop_mod expression down to (op1 * fract(op0 / op1)) + * Breaks an ir_binop_mod expression down to (op1 * fract(op0 / op1)) * * Many GPUs don't have a MOD instruction (945 and 965 included), and * if we have to break it down like this anyway, it gives an @@ -95,6 +100,7 @@ private: void sub_to_add_neg(ir_expression *); void div_to_mul_rcp(ir_expression *); + void int_div_to_mul_rcp(ir_expression *); void mod_to_fract(ir_expression *); void exp_to_exp2(ir_expression *); void pow_to_exp2(ir_expression *); @@ -127,60 +133,67 @@ lower_instructions_visitor::sub_to_add_neg(ir_expression *ir) void lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir) { - if (!ir->operands[1]->type->is_integer()) { - /* New expression for the 1.0 / op1 */ - ir_rvalue *expr; - expr = new(ir) ir_expression(ir_unop_rcp, - ir->operands[1]->type, - ir->operands[1], - NULL); + assert(ir->operands[1]->type->is_float()); - /* op0 / op1 -> op0 * (1.0 / op1) */ - ir->operation = ir_binop_mul; - ir->operands[1] = expr; + /* New expression for the 1.0 / op1 */ + ir_rvalue *expr; + expr = new(ir) ir_expression(ir_unop_rcp, + ir->operands[1]->type, + ir->operands[1]); + + /* op0 / op1 -> op0 * (1.0 / op1) */ + ir->operation = ir_binop_mul; + ir->operands[1] = expr; + + this->progress = true; +} + +void +lower_instructions_visitor::int_div_to_mul_rcp(ir_expression *ir) +{ + assert(ir->operands[1]->type->is_integer()); + + /* Be careful with integer division -- we need to do it as a + * float and re-truncate, since rcp(n > 1) of an integer would + * just be 0. + */ + ir_rvalue *op0, *op1; + const struct glsl_type *vec_type; + + vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, + ir->operands[1]->type->vector_elements, + ir->operands[1]->type->matrix_columns); + + if (ir->operands[1]->type->base_type == GLSL_TYPE_INT) + op1 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[1], NULL); + else + op1 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[1], NULL); + + op1 = new(ir) ir_expression(ir_unop_rcp, op1->type, op1, NULL); + + vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, + ir->operands[0]->type->vector_elements, + ir->operands[0]->type->matrix_columns); + + if (ir->operands[0]->type->base_type == GLSL_TYPE_INT) + op0 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[0], NULL); + else + op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], NULL); + + vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, + ir->type->vector_elements, + ir->type->matrix_columns); + + op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1); + + if (ir->operands[1]->type->base_type == GLSL_TYPE_INT) { + ir->operation = ir_unop_f2i; + ir->operands[0] = op0; } else { - /* Be careful with integer division -- we need to do it as a - * float and re-truncate, since rcp(n > 1) of an integer would - * just be 0. - */ - ir_rvalue *op0, *op1; - const struct glsl_type *vec_type; - - vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, - ir->operands[1]->type->vector_elements, - ir->operands[1]->type->matrix_columns); - - if (ir->operands[1]->type->base_type == GLSL_TYPE_INT) - op1 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[1], NULL); - else - op1 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[1], NULL); - - op1 = new(ir) ir_expression(ir_unop_rcp, op1->type, op1, NULL); - - vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, - ir->operands[0]->type->vector_elements, - ir->operands[0]->type->matrix_columns); - - if (ir->operands[0]->type->base_type == GLSL_TYPE_INT) - op0 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[0], NULL); - else - op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], NULL); - - vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, - ir->type->vector_elements, - ir->type->matrix_columns); - - op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1); - - if (ir->operands[1]->type->base_type == GLSL_TYPE_INT) { - ir->operation = ir_unop_f2i; - ir->operands[0] = op0; - } else { - ir->operation = ir_unop_i2u; - ir->operands[0] = new(ir) ir_expression(ir_unop_f2i, op0); - } - ir->operands[1] = NULL; + ir->operation = ir_unop_i2u; + ir->operands[0] = new(ir) ir_expression(ir_unop_f2i, op0); } + ir->operands[1] = NULL; this->progress = true; } @@ -265,7 +278,9 @@ lower_instructions_visitor::visit_leave(ir_expression *ir) break; case ir_binop_div: - if (lowering(DIV_TO_MUL_RCP)) + if (ir->operands[1]->type->is_integer() && lowering(INT_DIV_TO_MUL_RCP)) + int_div_to_mul_rcp(ir); + else if (ir->operands[1]->type->is_float() && lowering(DIV_TO_MUL_RCP)) div_to_mul_rcp(ir); break; diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_jumps.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_jumps.cpp index 30f5881dd..0aafeb1e0 100644 --- a/3rdparty/glsl-optimizer/src/glsl/lower_jumps.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/lower_jumps.cpp @@ -438,6 +438,7 @@ struct ir_lower_jumps_visitor : public ir_control_flow_visitor { * satisfied, because discard statements can't contain other * statements. */ + (void) ir; } enum jump_strength get_jump_strength(ir_instruction* ir) diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_output_reads.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_output_reads.cpp new file mode 100644 index 000000000..db93c6d36 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/lower_output_reads.cpp @@ -0,0 +1,157 @@ +/* + * Copyright © 2012 Vincent Lejeune + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include "ir.h" +#include "program/hash_table.h" + +/** + * \file lower_output_reads.cpp + * + * In GLSL, shader output variables (such as varyings) can be both read and + * written. However, on some hardware, reading an output register causes + * trouble. + * + * This pass creates temporary shadow copies of every (used) shader output, + * and replaces all accesses to use those instead. It also adds code to the + * main() function to copy the final values to the actual shader outputs. + */ + +class output_read_remover : public ir_hierarchical_visitor { +protected: + /** + * A hash table mapping from the original ir_variable shader outputs + * (ir_var_out mode) to the new temporaries to be used instead. + */ + hash_table *replacements; + + void *mem_ctx; +public: + output_read_remover(); + ~output_read_remover(); + virtual ir_visitor_status visit(class ir_dereference_variable *); + virtual ir_visitor_status visit_leave(class ir_return *); + virtual ir_visitor_status visit_leave(class ir_function_signature *); +}; + +/** + * Hash function for the output variables - computes the hash of the name. + * NOTE: We're using the name string to ensure that the hash doesn't depend + * on any random factors, otherwise the output_read_remover could produce + * the random order of the assignments. + * + * NOTE: If you want to reuse this function please take into account that + * generally the names of the variables are non-unique. + */ +static unsigned +hash_table_var_hash(const void *key) +{ + const ir_variable * var = static_cast(key); + return hash_table_string_hash(var->name); +} + +output_read_remover::output_read_remover() +{ + mem_ctx = ralloc_context(NULL); + replacements = + hash_table_ctor(0, hash_table_var_hash, hash_table_pointer_compare); +} + +output_read_remover::~output_read_remover() +{ + hash_table_dtor(replacements); + ralloc_free(mem_ctx); +} + +ir_visitor_status +output_read_remover::visit(ir_dereference_variable *ir) +{ + if (ir->var->mode != ir_var_out) + return visit_continue; + + ir_variable *temp = (ir_variable *) hash_table_find(replacements, ir->var); + + /* If we don't have an existing temporary, create one. */ + if (temp == NULL) { + void *var_ctx = ralloc_parent(ir->var); + temp = new(var_ctx) ir_variable(ir->var->type, ir->var->name, + ir_var_temporary, (glsl_precision)ir->var->precision); + hash_table_insert(replacements, temp, ir->var); + } + + /* Update the dereference to use the temporary */ + ir->var = temp; + + return visit_continue; +} + +/** + * Create an assignment to copy a temporary value back to the actual output. + */ +static ir_assignment * +copy(void *ctx, ir_variable *output, ir_variable *temp) +{ + ir_dereference_variable *lhs = new(ctx) ir_dereference_variable(output); + ir_dereference_variable *rhs = new(ctx) ir_dereference_variable(temp); + return new(ctx) ir_assignment(lhs, rhs); +} + +/** Insert a copy-back assignment before a "return" statement */ +static void +emit_return_copy(const void *key, void *data, void *closure) +{ + ir_return *ir = (ir_return *) closure; + ir->insert_before(copy(ir, (ir_variable *) key, (ir_variable *) data)); +} + +/** Insert a copy-back assignment at the end of the main() function */ +static void +emit_main_copy(const void *key, void *data, void *closure) +{ + ir_function_signature *sig = (ir_function_signature *) closure; + sig->body.push_tail(copy(sig, (ir_variable *) key, (ir_variable *) data)); +} + +ir_visitor_status +output_read_remover::visit_leave(ir_return *ir) +{ + hash_table_call_foreach(replacements, emit_return_copy, ir); + return visit_continue; +} + +ir_visitor_status +output_read_remover::visit_leave(ir_function_signature *sig) +{ + if (strcmp(sig->function_name(), "main") != 0) + return visit_continue; + + hash_table_call_foreach(replacements, emit_main_copy, sig); + return visit_continue; +} + +void +lower_output_reads(exec_list *instructions) +{ + output_read_remover v; + visit_list_elements(&v, instructions); +} diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_texture_projection.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_texture_projection.cpp deleted file mode 100644 index ec8903661..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/lower_texture_projection.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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. - */ - -/** - * \file lower_texture_projection.cpp - * - * IR lower pass to perform the division of texture coordinates by the texture - * projector if present. - * - * Many GPUs have a texture sampling opcode that takes the projector - * and does the divide internally, thus the presence of the projector - * in the IR. For GPUs that don't, this saves the driver needing the - * logic for handling the divide. - * - * \author Eric Anholt - */ - -#include "ir.h" - -class lower_texture_projection_visitor : public ir_hierarchical_visitor { -public: - lower_texture_projection_visitor() - { - progress = false; - } - - ir_visitor_status visit_leave(ir_texture *ir); - - bool progress; -}; - -ir_visitor_status -lower_texture_projection_visitor::visit_leave(ir_texture *ir) -{ - if (!ir->projector) - return visit_continue; - - void *mem_ctx = ralloc_parent(ir); - - ir_variable *var = new(mem_ctx) ir_variable(ir->projector->type, - "projector", ir_var_auto, glsl_precision_undefined); - base_ir->insert_before(var); - ir_dereference *deref = new(mem_ctx) ir_dereference_variable(var); - ir_expression *expr = new(mem_ctx) ir_expression(ir_unop_rcp, - ir->projector->type, - ir->projector, - NULL); - ir_assignment *assign = new(mem_ctx) ir_assignment(deref, expr, NULL); - base_ir->insert_before(assign); - - deref = new(mem_ctx) ir_dereference_variable(var); - ir->coordinate = new(mem_ctx) ir_expression(ir_binop_mul, - ir->coordinate->type, - ir->coordinate, - deref); - - if (ir->shadow_comparitor) { - deref = new(mem_ctx) ir_dereference_variable(var); - ir->shadow_comparitor = new(mem_ctx) ir_expression(ir_binop_mul, - ir->shadow_comparitor->type, - ir->shadow_comparitor, - deref); - } - - ir->projector = NULL; - - progress = true; - return visit_continue; -} - -bool -do_lower_texture_projection(exec_list *instructions) -{ - lower_texture_projection_visitor v; - - visit_list_elements(&v, instructions); - - return v.progress; -} diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_ubo_reference.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_ubo_reference.cpp new file mode 100644 index 000000000..ae13c773a --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/lower_ubo_reference.cpp @@ -0,0 +1,313 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** + * \file lower_ubo_reference.cpp + * + * IR lower pass to replace dereferences of variables in a uniform + * buffer object with usage of ir_binop_ubo_load expressions, each of + * which can read data up to the size of a vec4. + * + * This relieves drivers of the responsibility to deal with tricky UBO + * layout issues like std140 structures and row_major matrices on + * their own. + */ + +#include "ir.h" +#include "ir_builder.h" +#include "ir_rvalue_visitor.h" +#include "main/macros.h" + +using namespace ir_builder; + +namespace { +class lower_ubo_reference_visitor : public ir_rvalue_enter_visitor { +public: + lower_ubo_reference_visitor(struct gl_shader *shader) + : shader(shader) + { + } + + void handle_rvalue(ir_rvalue **rvalue); + void emit_ubo_loads(ir_dereference *deref, ir_variable *base_offset, + unsigned int deref_offset); + ir_expression *ubo_load(const struct glsl_type *type, + ir_rvalue *offset); + + void *mem_ctx; + struct gl_shader *shader; + struct gl_uniform_buffer_variable *ubo_var; + unsigned uniform_block; + bool progress; +}; + +static inline unsigned int +align(unsigned int a, unsigned int align) +{ + return (a + align - 1) / align * align; +} + +void +lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue) +{ + if (!*rvalue) + return; + + ir_dereference *deref = (*rvalue)->as_dereference(); + if (!deref) + return; + + ir_variable *var = deref->variable_referenced(); + if (!var || var->uniform_block == -1) + return; + + mem_ctx = ralloc_parent(*rvalue); + uniform_block = var->uniform_block; + struct gl_uniform_block *block = &shader->UniformBlocks[uniform_block]; + this->ubo_var = &block->Uniforms[var->location]; + ir_rvalue *offset = new(mem_ctx) ir_constant(0u); + unsigned const_offset = 0; + bool row_major = ubo_var->RowMajor; + + /* Calculate the offset to the start of the region of the UBO + * dereferenced by *rvalue. This may be a variable offset if an + * array dereference has a variable index. + */ + while (deref) { + switch (deref->ir_type) { + case ir_type_dereference_variable: { + const_offset += ubo_var->Offset; + deref = NULL; + break; + } + + case ir_type_dereference_array: { + ir_dereference_array *deref_array = (ir_dereference_array *)deref; + unsigned array_stride; + if (deref_array->array->type->is_matrix() && row_major) { + /* When loading a vector out of a row major matrix, the + * step between the columns (vectors) is the size of a + * float, while the step between the rows (elements of a + * vector) is handled below in emit_ubo_loads. + */ + array_stride = 4; + } else { + array_stride = deref_array->type->std140_size(row_major); + array_stride = align(array_stride, 16); + } + + ir_constant *const_index = deref_array->array_index->as_constant(); + if (const_index) { + const_offset += array_stride * const_index->value.i[0]; + } else { + offset = add(offset, + mul(deref_array->array_index, + new(mem_ctx) ir_constant(array_stride))); + } + deref = deref_array->array->as_dereference(); + break; + } + + case ir_type_dereference_record: { + ir_dereference_record *deref_record = (ir_dereference_record *)deref; + const glsl_type *struct_type = deref_record->record->type; + unsigned intra_struct_offset = 0; + + unsigned max_field_align = 16; + for (unsigned int i = 0; i < struct_type->length; i++) { + const glsl_type *type = struct_type->fields.structure[i].type; + unsigned field_align = type->std140_base_alignment(row_major); + max_field_align = MAX2(field_align, max_field_align); + intra_struct_offset = align(intra_struct_offset, field_align); + + if (strcmp(struct_type->fields.structure[i].name, + deref_record->field) == 0) + break; + intra_struct_offset += type->std140_size(row_major); + } + + const_offset = align(const_offset, max_field_align); + const_offset += intra_struct_offset; + + deref = deref_record->record->as_dereference(); + break; + } + default: + assert(!"not reached"); + deref = NULL; + break; + } + } + + /* Now that we've calculated the offset to the start of the + * dereference, walk over the type and emit loads into a temporary. + */ + const glsl_type *type = (*rvalue)->type; + ir_variable *load_var = new(mem_ctx) ir_variable(type, + "ubo_load_temp", + ir_var_temporary, (*rvalue)->get_precision()); + base_ir->insert_before(load_var); + + ir_variable *load_offset = new(mem_ctx) ir_variable(glsl_type::uint_type, + "ubo_load_temp_offset", + ir_var_temporary, glsl_precision_undefined); + base_ir->insert_before(load_offset); + base_ir->insert_before(assign(load_offset, offset)); + + deref = new(mem_ctx) ir_dereference_variable(load_var); + emit_ubo_loads(deref, load_offset, const_offset); + *rvalue = deref; + + progress = true; +} + +ir_expression * +lower_ubo_reference_visitor::ubo_load(const glsl_type *type, + ir_rvalue *offset) +{ + return new(mem_ctx) + ir_expression(ir_binop_ubo_load, + type, + new(mem_ctx) ir_constant(this->uniform_block), + offset); + +} + +/** + * Takes LHS and emits a series of assignments into its components + * from the UBO variable at variable_offset + deref_offset. + * + * Recursively calls itself to break the deref down to the point that + * the ir_binop_ubo_load expressions generated are contiguous scalars + * or vectors. + */ +void +lower_ubo_reference_visitor::emit_ubo_loads(ir_dereference *deref, + ir_variable *base_offset, + unsigned int deref_offset) +{ + if (deref->type->is_record()) { + unsigned int field_offset = 0; + + for (unsigned i = 0; i < deref->type->length; i++) { + const struct glsl_struct_field *field = + &deref->type->fields.structure[i]; + ir_dereference *field_deref = + new(mem_ctx) ir_dereference_record(deref->clone(mem_ctx, NULL), + field->name); + + field_offset = + align(field_offset, + field->type->std140_base_alignment(ubo_var->RowMajor)); + + emit_ubo_loads(field_deref, base_offset, deref_offset + field_offset); + + field_offset += field->type->std140_size(ubo_var->RowMajor); + } + return; + } + + if (deref->type->is_array()) { + unsigned array_stride = + align(deref->type->fields.array->std140_size(ubo_var->RowMajor), 16); + + for (unsigned i = 0; i < deref->type->length; i++) { + ir_constant *element = new(mem_ctx) ir_constant(i); + ir_dereference *element_deref = + new(mem_ctx) ir_dereference_array(deref->clone(mem_ctx, NULL), + element); + emit_ubo_loads(element_deref, base_offset, + deref_offset + i * array_stride); + } + return; + } + + if (deref->type->is_matrix()) { + for (unsigned i = 0; i < deref->type->matrix_columns; i++) { + ir_constant *col = new(mem_ctx) ir_constant(i); + ir_dereference *col_deref = + new(mem_ctx) ir_dereference_array(deref->clone(mem_ctx, NULL), + col); + + /* std140 always rounds the stride of arrays (and matrices) + * to a vec4, so matrices are always 16 between columns/rows. + */ + emit_ubo_loads(col_deref, base_offset, deref_offset + i * 16); + } + return; + } + + assert(deref->type->is_scalar() || + deref->type->is_vector()); + + if (!ubo_var->RowMajor) { + ir_rvalue *offset = add(base_offset, + new(mem_ctx) ir_constant(deref_offset)); + base_ir->insert_before(assign(deref->clone(mem_ctx, NULL), + ubo_load(deref->type, offset))); + } else { + /* We're dereffing a column out of a row-major matrix, so we + * gather the vector from each stored row. + */ + assert(deref->type->base_type == GLSL_TYPE_FLOAT); + /* Matrices, row_major or not, are stored as if they were + * arrays of vectors of the appropriate size in std140. + * Arrays have their strides rounded up to a vec4, so the + * matrix stride is always 16. + */ + unsigned matrix_stride = 16; + + for (unsigned i = 0; i < deref->type->vector_elements; i++) { + ir_rvalue *chan = new(mem_ctx) ir_constant((int)i); + ir_dereference *deref_chan = + new(mem_ctx) ir_dereference_array(deref->clone(mem_ctx, NULL), + chan); + + ir_rvalue *chan_offset = + add(base_offset, + new(mem_ctx) ir_constant(deref_offset + i * matrix_stride)); + + base_ir->insert_before(assign(deref_chan, + ubo_load(glsl_type::float_type, + chan_offset))); + } + } +} + +} /* unnamed namespace */ + +void +lower_ubo_reference(struct gl_shader *shader, exec_list *instructions) +{ + lower_ubo_reference_visitor v(shader); + + /* Loop over the instructions lowering references, because we take + * a deref of a UBO array using a UBO dereference as the index will + * produce a collection of instructions all of which have cloned + * UBO dereferences for that array index. + */ + do { + v.progress = false; + visit_list_elements(&v, instructions); + } while (v.progress); +} diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_variable_index_to_cond_assign.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_variable_index_to_cond_assign.cpp index 084a44767..e750404d0 100644 --- a/3rdparty/glsl-optimizer/src/glsl/lower_variable_index_to_cond_assign.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/lower_variable_index_to_cond_assign.cpp @@ -117,7 +117,7 @@ compare_index_block(exec_list *instructions, ir_variable *index, } static inline bool -is_array_or_matrix(const ir_instruction *ir) +is_array_or_matrix(const ir_rvalue *ir) { return (ir->type->is_array() || ir->type->is_matrix()); } diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_vec_index_to_swizzle.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_vec_index_to_swizzle.cpp index c7630c28a..46fd6ace1 100644 --- a/3rdparty/glsl-optimizer/src/glsl/lower_vec_index_to_swizzle.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/lower_vec_index_to_swizzle.cpp @@ -33,6 +33,7 @@ #include "ir_visitor.h" #include "ir_optimization.h" #include "glsl_types.h" +#include "main/macros.h" /** * Visitor class for replacing expressions with ir_constant values. @@ -76,8 +77,25 @@ ir_vec_index_to_swizzle_visitor::convert_vec_index_to_swizzle(ir_rvalue *ir) void *ctx = ralloc_parent(ir); this->progress = true; - return new(ctx) ir_swizzle(deref->array, - ir_constant->value.i[0], 0, 0, 0, 1); + + /* Page 40 of the GLSL 1.20 spec says: + * + * "When indexing with non-constant expressions, behavior is undefined + * if the index is negative, or greater than or equal to the size of + * the vector." + * + * The quoted spec text mentions non-constant expressions, but this code + * operates on constants. These constants are the result of non-constant + * expressions that have been optimized to constants. The common case here + * is a loop counter from an unrolled loop that is used to index a vector. + * + * The ir_swizzle constructor gets angry if the index is negative or too + * large. For simplicity sake, just clamp the index to [0, size-1]. + */ + const int i = MIN2(MAX2(ir_constant->value.i[0], 0), + (deref->array->type->vector_elements - 1)); + + return new(ctx) ir_swizzle(deref->array, i, 0, 0, 0, 1); } ir_visitor_status diff --git a/3rdparty/glsl-optimizer/src/glsl/lower_vector.cpp b/3rdparty/glsl-optimizer/src/glsl/lower_vector.cpp index d989ba7fb..f10f77a4a 100644 --- a/3rdparty/glsl-optimizer/src/glsl/lower_vector.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/lower_vector.cpp @@ -183,7 +183,7 @@ lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue) if (assigned > 0) { ir_constant *const c = new(mem_ctx) ir_constant(glsl_type::get_instance(expr->type->base_type, - assigned, 0), + assigned, 1), &d); ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp); ir_assignment *const assign = diff --git a/3rdparty/glsl-optimizer/src/glsl/main.cpp b/3rdparty/glsl-optimizer/src/glsl/main.cpp index 9b8a50738..04143ad43 100644 --- a/3rdparty/glsl-optimizer/src/glsl/main.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/main.cpp @@ -22,9 +22,17 @@ */ #include +/** @file main.cpp + * + * This file is the main() routine and scaffolding for producing + * builtin_compiler (which doesn't include builtins itself and is used + * to generate the profile information for builtin_function.cpp), and + * for glsl_compiler (which does include builtins and can be used to + * offline compile GLSL code and examine the resulting GLSL IR. + */ + #include "ast.h" #include "glsl_parser_extras.h" -#include "glsl_parser.h" #include "ir_optimization.h" #include "ir_print_visitor.h" #include "program.h" @@ -36,10 +44,10 @@ initialize_context(struct gl_context *ctx, gl_api api) { initialize_context_to_defaults(ctx, api); - /* GLSL 1.30 isn't fully supported, but we need to advertise 1.30 so that - * the built-in functions for 1.30 can be built. + /* The standalone compiler needs to claim support for almost + * everything in order to compile the built-in functions. */ - ctx->Const.GLSLVersion = 130; + ctx->Const.GLSLVersion = 140; ctx->Const.MaxClipPlanes = 8; ctx->Const.MaxDrawBuffers = 2; @@ -136,7 +144,7 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader) new(shader) _mesa_glsl_parse_state(ctx, shader->Type, shader); const char *source = shader->Source; - state->error = preprocess(state, &source, &state->info_log, + state->error = glcpp_preprocess(state, &source, &state->info_log, state->extensions, ctx->API) != 0; if (!state->error) { @@ -167,7 +175,7 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader) if (!state->error && !shader->ir->is_empty()) { bool progress; do { - progress = do_common_optimization(shader->ir, false, 32); + progress = do_common_optimization(shader->ir, false, false, 32); } while (progress); validate_ir_tree(shader->ir); @@ -239,7 +247,7 @@ main(int argc, char **argv) usage_fail(argv[0]); const char *const ext = & argv[optind][len - 5]; - if (strncmp(".vert", ext, 5) == 0) + if (strncmp(".vert", ext, 5) == 0 || strncmp(".glsl", ext, 5) == 0) shader->Type = GL_VERTEX_SHADER; else if (strncmp(".geom", ext, 5) == 0) shader->Type = GL_GEOMETRY_SHADER; diff --git a/3rdparty/glsl-optimizer/src/glsl/msvc/.gitignore b/3rdparty/glsl-optimizer/src/glsl/msvc/.gitignore index 38b542c10..bd0540649 100644 --- a/3rdparty/glsl-optimizer/src/glsl/msvc/.gitignore +++ b/3rdparty/glsl-optimizer/src/glsl/msvc/.gitignore @@ -1,4 +1,5 @@ *.ncb *.user *.suo +_ReSharper.* build \ No newline at end of file diff --git a/3rdparty/glsl-optimizer/src/glsl/msvc/mesaglsl2.vcproj b/3rdparty/glsl-optimizer/src/glsl/msvc/mesaglsl2.vcproj index 28bd2ad47..b91957fe8 100644 --- a/3rdparty/glsl-optimizer/src/glsl/msvc/mesaglsl2.vcproj +++ b/3rdparty/glsl-optimizer/src/glsl/msvc/mesaglsl2.vcproj @@ -185,6 +185,10 @@ RelativePath="..\builtin_types.h" > + + @@ -389,10 +393,6 @@ RelativePath="..\ir_validate.cpp" > - - @@ -409,6 +409,14 @@ RelativePath="..\link_functions.cpp" > + + + + @@ -437,10 +445,18 @@ RelativePath="..\loop_unroll.cpp" > + + + + @@ -501,6 +517,10 @@ RelativePath="..\opt_algebraic.cpp" > + + @@ -533,10 +553,6 @@ RelativePath="..\opt_dead_functions.cpp" > - - @@ -700,6 +716,18 @@ RelativePath="..\..\mesa\program\hash_table.h" > + + + + + + @@ -720,16 +748,24 @@ RelativePath="..\..\mesa\main\config.h" > + + + + - - diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_algebraic.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_algebraic.cpp index 252a1125e..d77fcc540 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_algebraic.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_algebraic.cpp @@ -34,6 +34,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + /** * Visitor class for replacing expressions with ir_constant values. */ @@ -68,6 +70,8 @@ public: bool progress; }; +} /* unnamed namespace */ + static inline bool is_vec_zero(ir_constant *ir) { @@ -80,6 +84,12 @@ is_vec_one(ir_constant *ir) return (ir == NULL) ? false : ir->is_one(); } +static inline bool +is_vec_basis(ir_constant *ir) +{ + return (ir == NULL) ? false : ir->is_basis(); +} + static void update_type(ir_expression *ir) { @@ -187,7 +197,8 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) ir_expression *temp; unsigned int i; - assert(ir->get_num_operands() <= 2); + if (ir->get_num_operands() > 2) + return ir; for (i = 0; i < ir->get_num_operands(); i++) { if (ir->operands[i]->type->is_matrix()) return ir; @@ -323,6 +334,31 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) } break; + case ir_binop_dot: + if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1])) { + this->progress = true; + return ir_constant::zero(mem_ctx, ir->type); + } + if (is_vec_basis(op_const[0])) { + this->progress = true; + unsigned component = 0; + for (unsigned c = 0; c < op_const[0]->type->vector_elements; c++) { + if (op_const[0]->value.f[c] == 1.0) + component = c; + } + return new(mem_ctx) ir_swizzle(ir->operands[1], component, 0, 0, 0, 1); + } + if (is_vec_basis(op_const[1])) { + this->progress = true; + unsigned component = 0; + for (unsigned c = 0; c < op_const[1]->type->vector_elements; c++) { + if (op_const[1]->value.f[c] == 1.0) + component = c; + } + return new(mem_ctx) ir_swizzle(ir->operands[0], component, 0, 0, 0, 1); + } + break; + case ir_binop_logic_and: /* FINISHME: Also simplify (a && a) to (a). */ if (is_vec_one(op_const[0])) { diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_array_splitting.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_array_splitting.cpp new file mode 100644 index 000000000..c2056838c --- /dev/null +++ b/3rdparty/glsl-optimizer/src/glsl/opt_array_splitting.cpp @@ -0,0 +1,407 @@ +/* + * Copyright © 2010 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** + * \file opt_array_splitting.cpp + * + * If an array is always dereferenced with a constant index, then + * split it apart into its elements, making it more amenable to other + * optimization passes. + * + * This skips uniform/varying arrays, which would need careful + * handling due to their ir->location fields tying them to the GL API + * and other shader stages. + */ + +#include "ir.h" +#include "ir_visitor.h" +#include "ir_rvalue_visitor.h" +#include "ir_print_visitor.h" +#include "glsl_types.h" + +static bool debug = false; + +namespace opt_array_splitting { + +class variable_entry : public exec_node +{ +public: + variable_entry(ir_variable *var) + { + this->var = var; + this->split = true; + this->declaration = false; + this->components = NULL; + this->mem_ctx = NULL; + if (var->type->is_array()) + this->size = var->type->length; + else + this->size = var->type->matrix_columns; + } + + ir_variable *var; /* The key: the variable's pointer. */ + unsigned size; /* array length or matrix columns */ + + /** Whether this array should be split or not. */ + bool split; + + /* If the variable had a decl we can work with in the instruction + * stream. We can't do splitting on function arguments, which + * don't get this variable set. + */ + bool declaration; + + ir_variable **components; + + /** ralloc_parent(this->var) -- the shader's talloc context. */ + void *mem_ctx; +}; + +} /* namespace */ +using namespace opt_array_splitting; + +/** + * This class does a walk over the tree, coming up with the set of + * variables that could be split by looking to see if they are arrays + * that are only ever constant-index dereferenced. + */ +class ir_array_reference_visitor : public ir_hierarchical_visitor { +public: + ir_array_reference_visitor(void) + { + this->mem_ctx = ralloc_context(NULL); + this->variable_list.make_empty(); + } + + ~ir_array_reference_visitor(void) + { + ralloc_free(mem_ctx); + } + + bool get_split_list(exec_list *instructions, bool linked); + + virtual ir_visitor_status visit(ir_variable *); + virtual ir_visitor_status visit(ir_dereference_variable *); + virtual ir_visitor_status visit_enter(ir_dereference_array *); + virtual ir_visitor_status visit_enter(ir_function_signature *); + + variable_entry *get_variable_entry(ir_variable *var); + + /* List of variable_entry */ + exec_list variable_list; + + void *mem_ctx; +}; + +variable_entry * +ir_array_reference_visitor::get_variable_entry(ir_variable *var) +{ + assert(var); + + if (var->mode != ir_var_auto && + var->mode != ir_var_temporary) + return NULL; + + if (!(var->type->is_array() || var->type->is_matrix())) + return NULL; + + /* If the array hasn't been sized yet, we can't split it. After + * linking, this should be resolved. + */ + if (var->type->is_array() && var->type->length == 0) + return NULL; + + foreach_iter(exec_list_iterator, iter, this->variable_list) { + variable_entry *entry = (variable_entry *)iter.get(); + if (entry->var == var) + return entry; + } + + variable_entry *entry = new(mem_ctx) variable_entry(var); + this->variable_list.push_tail(entry); + return entry; +} + + +ir_visitor_status +ir_array_reference_visitor::visit(ir_variable *ir) +{ + variable_entry *entry = this->get_variable_entry(ir); + + if (entry) + entry->declaration = true; + + return visit_continue; +} + +ir_visitor_status +ir_array_reference_visitor::visit(ir_dereference_variable *ir) +{ + variable_entry *entry = this->get_variable_entry(ir->var); + + /* If we made it to here without seeing an ir_dereference_array, + * then the dereference of this array didn't have a constant index + * (see the visit_continue_with_parent below), so we can't split + * the variable. + */ + if (entry) + entry->split = false; + + return visit_continue; +} + +ir_visitor_status +ir_array_reference_visitor::visit_enter(ir_dereference_array *ir) +{ + ir_dereference_variable *deref = ir->array->as_dereference_variable(); + if (!deref) + return visit_continue; + + variable_entry *entry = this->get_variable_entry(deref->var); + + /* If the access to the array has a variable index, we wouldn't + * know which split variable this dereference should go to. + */ + if (entry && !ir->array_index->as_constant()) + entry->split = false; + + return visit_continue_with_parent; +} + +ir_visitor_status +ir_array_reference_visitor::visit_enter(ir_function_signature *ir) +{ + /* We don't have logic for array-splitting function arguments, + * so just look at the body instructions and not the parameter + * declarations. + */ + visit_list_elements(this, &ir->body); + return visit_continue_with_parent; +} + +bool +ir_array_reference_visitor::get_split_list(exec_list *instructions, + bool linked) +{ + visit_list_elements(this, instructions); + + /* If the shaders aren't linked yet, we can't mess with global + * declarations, which need to be matched by name across shaders. + */ + if (!linked) { + foreach_list(node, instructions) { + ir_variable *var = ((ir_instruction *)node)->as_variable(); + if (var) { + variable_entry *entry = get_variable_entry(var); + if (entry) + entry->remove(); + } + } + } + + /* Trim out variables we found that we can't split. */ + foreach_iter(exec_list_iterator, iter, variable_list) { + variable_entry *entry = (variable_entry *)iter.get(); + + if (debug) { + printf("array %s@%p: decl %d, split %d\n", + entry->var->name, (void *) entry->var, entry->declaration, + entry->split); + } + + if (!(entry->declaration && entry->split)) { + entry->remove(); + } + } + + return !variable_list.is_empty(); +} + +/** + * This class rewrites the dereferences of arrays that have been split + * to use the newly created ir_variables for each component. + */ +class ir_array_splitting_visitor : public ir_rvalue_visitor { +public: + ir_array_splitting_visitor(exec_list *vars) + { + this->variable_list = vars; + } + + virtual ~ir_array_splitting_visitor() + { + } + + virtual ir_visitor_status visit_leave(ir_assignment *); + + void split_deref(ir_dereference **deref); + void handle_rvalue(ir_rvalue **rvalue); + variable_entry *get_splitting_entry(ir_variable *var); + + exec_list *variable_list; +}; + +variable_entry * +ir_array_splitting_visitor::get_splitting_entry(ir_variable *var) +{ + assert(var); + + foreach_iter(exec_list_iterator, iter, *this->variable_list) { + variable_entry *entry = (variable_entry *)iter.get(); + if (entry->var == var) { + return entry; + } + } + + return NULL; +} + +void +ir_array_splitting_visitor::split_deref(ir_dereference **deref) +{ + ir_dereference_array *deref_array = (*deref)->as_dereference_array(); + if (!deref_array) + return; + + ir_dereference_variable *deref_var = deref_array->array->as_dereference_variable(); + if (!deref_var) + return; + ir_variable *var = deref_var->var; + + variable_entry *entry = get_splitting_entry(var); + if (!entry) + return; + + ir_constant *constant = deref_array->array_index->as_constant(); + assert(constant); + + if (constant->value.i[0] < (int)entry->size) { + *deref = new(entry->mem_ctx) + ir_dereference_variable(entry->components[constant->value.i[0]]); + } else { + /* There was a constant array access beyond the end of the + * array. This might have happened due to constant folding + * after the initial parse. This produces an undefined value, + * but shouldn't crash. Just give them an uninitialized + * variable. + */ + ir_variable *temp = new(entry->mem_ctx) ir_variable(deref_array->type, + "undef", + ir_var_temporary, deref_array->get_precision()); + entry->components[0]->insert_before(temp); + *deref = new(entry->mem_ctx) ir_dereference_variable(temp); + } +} + +void +ir_array_splitting_visitor::handle_rvalue(ir_rvalue **rvalue) +{ + if (!*rvalue) + return; + + ir_dereference *deref = (*rvalue)->as_dereference(); + + if (!deref) + return; + + split_deref(&deref); + *rvalue = deref; +} + +ir_visitor_status +ir_array_splitting_visitor::visit_leave(ir_assignment *ir) +{ + /* The normal rvalue visitor skips the LHS of assignments, but we + * need to process those just the same. + */ + ir_rvalue *lhs = ir->lhs; + + handle_rvalue(&lhs); + ir->lhs = lhs->as_dereference(); + + ir->lhs->accept(this); + + handle_rvalue(&ir->rhs); + ir->rhs->accept(this); + + if (ir->condition) { + handle_rvalue(&ir->condition); + ir->condition->accept(this); + } + + return visit_continue; +} + +bool +optimize_split_arrays(exec_list *instructions, bool linked) +{ + ir_array_reference_visitor refs; + if (!refs.get_split_list(instructions, linked)) + return false; + + void *mem_ctx = ralloc_context(NULL); + + /* Replace the decls of the arrays to be split with their split + * components. + */ + foreach_iter(exec_list_iterator, iter, refs.variable_list) { + variable_entry *entry = (variable_entry *)iter.get(); + const struct glsl_type *type = entry->var->type; + const struct glsl_type *subtype; + glsl_precision subprec = (glsl_precision)entry->var->precision; + + if (type->is_matrix()) { + subtype = type->column_type(); + } else { + subtype = type->fields.array; + } + + entry->mem_ctx = ralloc_parent(entry->var); + + entry->components = ralloc_array(mem_ctx, + ir_variable *, + entry->size); + + for (unsigned int i = 0; i < entry->size; i++) { + const char *name = ralloc_asprintf(mem_ctx, "%s_%d", + entry->var->name, i); + + entry->components[i] = + new(entry->mem_ctx) ir_variable(subtype, name, ir_var_temporary, subprec); + entry->var->insert_before(entry->components[i]); + } + + entry->var->remove(); + } + + ir_array_splitting_visitor split(&refs.variable_list); + visit_list_elements(&split, instructions); + + if (debug) + _mesa_print_ir(instructions, NULL); + + ralloc_free(mem_ctx); + + return true; + +} diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_constant_folding.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_constant_folding.cpp index 599b21525..7d94d481c 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_constant_folding.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_constant_folding.cpp @@ -32,6 +32,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + /** * Visitor class for replacing expressions with ir_constant values. */ @@ -56,6 +58,8 @@ public: bool progress; }; +} /* unnamed namespace */ + void ir_constant_folding_visitor::handle_rvalue(ir_rvalue **rvalue) { @@ -117,7 +121,8 @@ ir_constant_folding_visitor::visit_enter(ir_assignment *ir) ir_visitor_status ir_constant_folding_visitor::visit_enter(ir_call *ir) { - exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator(); + /* Attempt to constant fold parameters */ + exec_list_iterator sig_iter = ir->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter, *ir) { ir_rvalue *param_rval = (ir_rvalue *)iter.get(); ir_variable *sig_param = (ir_variable *)sig_iter.get(); @@ -133,6 +138,15 @@ ir_constant_folding_visitor::visit_enter(ir_call *ir) sig_iter.next(); } + /* Next, see if the call can be replaced with an assignment of a constant */ + ir_constant *const_val = ir->constant_expression_value(); + + if (const_val != NULL) { + ir_assignment *assignment = + new(ralloc_parent(ir)) ir_assignment(ir->return_deref, const_val); + ir->replace_with(assignment); + } + return visit_continue_with_parent; } diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_constant_propagation.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_constant_propagation.cpp index 9d7fd2231..270c9ea51 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_constant_propagation.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_constant_propagation.cpp @@ -41,6 +41,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + class acp_entry : public exec_node { public: @@ -241,7 +243,26 @@ ir_constant_propagation_visitor::visit_leave(ir_assignment *ir) if (this->in_assignee) return visit_continue; - kill(ir->lhs->variable_referenced(), ir->write_mask); + unsigned kill_mask = ir->write_mask; + if (ir->lhs->as_dereference_array()) { + /* The LHS of the assignment uses an array indexing operator (e.g. v[i] + * = ...;). Since we only try to constant propagate vectors and + * scalars, this means that either (a) array indexing is being used to + * select a vector component, or (b) the variable in question is neither + * a scalar or a vector, so we don't care about it. In the former case, + * we want to kill the whole vector, since in general we can't predict + * which vector component will be selected by array indexing. In the + * latter case, it doesn't matter what we do, so go ahead and kill the + * whole variable anyway. + * + * Note that if the array index is constant (e.g. v[2] = ...;), we could + * in principle be smarter, but we don't need to, because a future + * optimization pass will convert it to a simple assignment with the + * correct mask. + */ + kill_mask = ~0; + } + kill(ir->lhs->variable_referenced(), kill_mask); add_constant(ir); @@ -259,7 +280,7 @@ ir_visitor_status ir_constant_propagation_visitor::visit_enter(ir_call *ir) { /* Do constant propagation on call parameters, but skip any out params */ - exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator(); + exec_list_iterator sig_param_iter = ir->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter, ir->actual_parameters) { ir_variable *sig_param = (ir_variable *)sig_param_iter.get(); ir_rvalue *param = (ir_rvalue *)iter.get(); @@ -278,7 +299,7 @@ ir_constant_propagation_visitor::visit_enter(ir_call *ir) * this call. So kill all copies. Except if it's a built-in; we know * they are side effect free. */ - if (!ir->get_callee()->is_builtin) { + if (!ir->callee->is_builtin) { acp->make_empty(); this->killed_all = true; } @@ -434,6 +455,8 @@ ir_constant_propagation_visitor::add_constant(ir_assignment *ir) this->acp->push_tail(entry); } +} /* unnamed namespace */ + /** * Does a constant propagation pass on the code present in the instruction stream. */ diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_constant_variable.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_constant_variable.cpp index 3fa7c3bad..1bbaf8e47 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_constant_variable.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_constant_variable.cpp @@ -37,6 +37,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + struct assignment_entry { exec_node link; int assignment_count; @@ -55,6 +57,8 @@ public: exec_list list; }; +} /* unnamed namespace */ + static struct assignment_entry * get_assignment_entry(ir_variable *var, exec_list *list) { @@ -127,7 +131,8 @@ ir_constant_variable_visitor::visit_enter(ir_assignment *ir) ir_visitor_status ir_constant_variable_visitor::visit_enter(ir_call *ir) { - exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator(); + /* Mark any out parameters as assigned to */ + exec_list_iterator sig_iter = ir->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter, *ir) { ir_rvalue *param_rval = (ir_rvalue *)iter.get(); ir_variable *param = (ir_variable *)sig_iter.get(); @@ -143,6 +148,17 @@ ir_constant_variable_visitor::visit_enter(ir_call *ir) } sig_iter.next(); } + + /* Mark the return storage as having been assigned to */ + if (ir->return_deref != NULL) { + ir_variable *var = ir->return_deref->variable_referenced(); + struct assignment_entry *entry; + + assert(var); + entry = get_assignment_entry(var, &this->list); + entry->assignment_count++; + } + return visit_continue; } diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation.cpp index 3fad58547..7901c819d 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation.cpp @@ -38,6 +38,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + class acp_entry : public exec_node { public: @@ -107,6 +109,8 @@ public: void *mem_ctx; }; +} /* unnamed namespace */ + ir_visitor_status ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir) { @@ -181,7 +185,7 @@ ir_visitor_status ir_copy_propagation_visitor::visit_enter(ir_call *ir) { /* Do copy propagation on call parameters, but skip any out params */ - exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator(); + exec_list_iterator sig_param_iter = ir->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter, ir->actual_parameters) { ir_variable *sig_param = (ir_variable *)sig_param_iter.get(); ir_instruction *ir = (ir_instruction *)iter.get(); @@ -195,7 +199,7 @@ ir_copy_propagation_visitor::visit_enter(ir_call *ir) * this call. So kill all copies. * For any built-in functions, do not do this; they are side effect-free. */ - if (!ir->get_callee()->is_builtin) { + if (!ir->callee->is_builtin) { acp->make_empty(); this->killed_all = true; } diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation_elements.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation_elements.cpp index 58e320d8d..7d1936305 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation_elements.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_copy_propagation_elements.cpp @@ -49,6 +49,8 @@ static bool debug = false; +namespace { + class acp_entry : public exec_node { public: @@ -93,6 +95,7 @@ public: ir_copy_propagation_elements_visitor() { this->progress = false; + this->killed_all = false; this->mem_ctx = ralloc_context(NULL); this->shader_mem_ctx = NULL; this->acp = new(mem_ctx) exec_list; @@ -108,6 +111,7 @@ public: virtual ir_visitor_status visit_leave(class ir_assignment *); virtual ir_visitor_status visit_enter(class ir_call *); virtual ir_visitor_status visit_enter(class ir_if *); + virtual ir_visitor_status visit_leave(class ir_swizzle *); void handle_rvalue(ir_rvalue **rvalue); @@ -133,6 +137,8 @@ public: void *shader_mem_ctx; }; +} /* unnamed namespace */ + ir_visitor_status ir_copy_propagation_elements_visitor::visit_enter(ir_function_signature *ir) { @@ -179,6 +185,15 @@ ir_copy_propagation_elements_visitor::visit_leave(ir_assignment *ir) return visit_continue; } +ir_visitor_status +ir_copy_propagation_elements_visitor::visit_leave(ir_swizzle *ir) +{ + /* Don't visit the values of swizzles since they are handled while + * visiting the swizzle itself. + */ + return visit_continue; +} + /** * Replaces dereferences of ACP RHS variables with ACP LHS variables. * @@ -278,7 +293,7 @@ ir_visitor_status ir_copy_propagation_elements_visitor::visit_enter(ir_call *ir) { /* Do copy propagation on call parameters, but skip any out params */ - exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator(); + exec_list_iterator sig_param_iter = ir->callee->parameters.iterator(); foreach_iter(exec_list_iterator, iter, ir->actual_parameters) { ir_variable *sig_param = (ir_variable *)sig_param_iter.get(); ir_instruction *ir = (ir_instruction *)iter.get(); @@ -292,7 +307,7 @@ ir_copy_propagation_elements_visitor::visit_enter(ir_call *ir) * this call. So kill all copies. Except if it's a built-in; we know * they are side effect free. */ - if (!ir->get_callee()->is_builtin) { + if (!ir->callee->is_builtin) { acp->make_empty(); this->killed_all = true; } @@ -457,7 +472,20 @@ ir_copy_propagation_elements_visitor::add_copy(ir_assignment *ir) if (lhs->var->precision != rhs->var->precision && lhs->var->precision!=glsl_precision_undefined && rhs->var->precision!=glsl_precision_undefined) return; - entry = new(this->mem_ctx) acp_entry(lhs->var, rhs->var, ir->write_mask, + int write_mask = ir->write_mask; + if (lhs->var == rhs->var) { + /* If this is a copy from the variable to itself, then we need + * to be sure not to include the updated channels from this + * instruction in the set of new source channels to be + * copy-propagated from. + */ + for (int i = 0; i < 4; i++) { + if (ir->write_mask & (1 << orig_swizzle[i])) + write_mask &= ~(1 << i); + } + } + + entry = new(this->mem_ctx) acp_entry(lhs->var, rhs->var, write_mask, swizzle); this->acp->push_tail(entry); } diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_dead_code.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_dead_code.cpp index 4568ab087..de8475f95 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_dead_code.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_dead_code.cpp @@ -42,7 +42,7 @@ static bool debug = false; * for usage on an unlinked instruction stream. */ bool -do_dead_code(exec_list *instructions) +do_dead_code(exec_list *instructions, bool uniform_locations_assigned) { ir_variable_refcount_visitor v; bool progress = false; @@ -50,7 +50,7 @@ do_dead_code(exec_list *instructions) v.run(instructions); foreach_iter(exec_list_iterator, iter, v.variable_list) { - variable_entry *entry = (variable_entry *)iter.get(); + ir_variable_refcount_entry *entry = (ir_variable_refcount_entry *)iter.get(); /* Since each assignment is a reference, the refereneced count must be * greater than or equal to the assignment count. If they are equal, @@ -78,8 +78,7 @@ do_dead_code(exec_list *instructions) * Don't do so if it's a shader output, though. */ if (entry->var->mode != ir_var_out && - entry->var->mode != ir_var_inout && - !ir_has_call_skip_builtins(entry->assign)) { + entry->var->mode != ir_var_inout) { entry->assign->remove(); progress = true; @@ -94,10 +93,17 @@ do_dead_code(exec_list *instructions) */ /* uniform initializers are precious, and could get used by another - * stage. + * stage. Also, once uniform locations have been assigned, the + * declaration cannot be deleted. + * + * Also, GL_ARB_uniform_buffer_object says that std140 + * uniforms will not be eliminated. Since we always do + * std140, just don't eliminate uniforms in UBOs. */ if (entry->var->mode == ir_var_uniform && - entry->var->constant_value) + (uniform_locations_assigned || + entry->var->constant_value || + entry->var->uniform_block != -1)) continue; entry->var->remove(); @@ -132,7 +138,12 @@ do_dead_code_unlinked(exec_list *instructions) foreach_iter(exec_list_iterator, sigiter, *f) { ir_function_signature *sig = (ir_function_signature *) sigiter.get(); - if (do_dead_code(&sig->body)) + /* The setting of the uniform_locations_assigned flag here is + * irrelevent. If there is a uniform declaration encountered + * inside the body of the function, something has already gone + * terribly, terribly wrong. + */ + if (do_dead_code(&sig->body, false)) progress = true; } } diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_dead_code_local.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_dead_code_local.cpp index 0a0b86804..8c31802a6 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_dead_code_local.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_dead_code_local.cpp @@ -40,19 +40,25 @@ static bool debug = false; +namespace { + class assignment_entry : public exec_node { public: - assignment_entry(ir_variable *lhs, ir_instruction *ir) + assignment_entry(ir_variable *lhs, ir_assignment *ir) { assert(lhs); assert(ir); this->lhs = lhs; this->ir = ir; + this->available = ir->write_mask; } ir_variable *lhs; - ir_instruction *ir; + ir_assignment *ir; + + /* bitmask of xyzw channels written that haven't been used so far. */ + int available; }; class kill_for_derefs_visitor : public ir_hierarchical_visitor { @@ -62,23 +68,52 @@ public: this->assignments = assignments; } - virtual ir_visitor_status visit(ir_dereference_variable *ir) + void kill_channels(ir_variable *const var, int used) { - ir_variable *const var = ir->variable_referenced(); - foreach_iter(exec_list_iterator, iter, *this->assignments) { assignment_entry *entry = (assignment_entry *)iter.get(); if (entry->lhs == var) { - if (debug) - printf("kill %s\n", entry->lhs->name); - entry->remove(); + if (var->type->is_scalar() || var->type->is_vector()) { + if (debug) + printf("kill %s (0x%01x - 0x%01x)\n", entry->lhs->name, + entry->available, used); + entry->available &= ~used; + if (!entry->available) + entry->remove(); + } else { + if (debug) + printf("kill %s\n", entry->lhs->name); + entry->remove(); + } } } + } + + virtual ir_visitor_status visit(ir_dereference_variable *ir) + { + kill_channels(ir->var, ~0); return visit_continue; } + virtual ir_visitor_status visit(ir_swizzle *ir) + { + ir_dereference_variable *deref = ir->val->as_dereference_variable(); + if (!deref) + return visit_continue; + + int used = 0; + used |= 1 << ir->mask.x; + used |= 1 << ir->mask.y; + used |= 1 << ir->mask.z; + used |= 1 << ir->mask.w; + + kill_channels(deref->var, used); + + return visit_continue_with_parent; + } + private: exec_list *assignments; }; @@ -105,6 +140,7 @@ public: ir_hierarchical_visitor *visitor; }; +} /* unnamed namespace */ /** * Adds an entry to the available copy list if it's a plain assignment @@ -130,32 +166,96 @@ process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments) assert(var); /* Now, check if we did a whole-variable assignment. */ - if (!ir->condition && (ir->whole_variable_written() != NULL)) { - /* We did a whole-variable assignment. So, any instruction in - * the assignment list with the same LHS is dead. - */ - if (debug) - printf("looking for %s to remove\n", var->name); - foreach_iter(exec_list_iterator, iter, *assignments) { - assignment_entry *entry = (assignment_entry *)iter.get(); + if (!ir->condition) { + ir_dereference_variable *deref_var = ir->lhs->as_dereference_variable(); - if (entry->lhs == var) { - if (debug) - printf("removing %s\n", var->name); - entry->ir->remove(); - entry->remove(); - progress = true; + /* If it's a vector type, we can do per-channel elimination of + * use of the RHS. + */ + if (deref_var && (deref_var->var->type->is_scalar() || + deref_var->var->type->is_vector())) { + + if (debug) + printf("looking for %s.0x%01x to remove\n", var->name, + ir->write_mask); + + foreach_iter(exec_list_iterator, iter, *assignments) { + assignment_entry *entry = (assignment_entry *)iter.get(); + + if (entry->lhs != var) + continue; + + int remove = entry->available & ir->write_mask; + if (debug) { + printf("%s 0x%01x - 0x%01x = 0x%01x\n", + var->name, + entry->ir->write_mask, + remove, entry->ir->write_mask & ~remove); + } + if (remove) { + progress = true; + + if (debug) { + printf("rewriting:\n "); + entry->ir->print(); + printf("\n"); + } + + entry->ir->write_mask &= ~remove; + entry->available &= ~remove; + if (entry->ir->write_mask == 0) { + /* Delete the dead assignment. */ + entry->ir->remove(); + entry->remove(); + } else { + void *mem_ctx = ralloc_parent(entry->ir); + /* Reswizzle the RHS arguments according to the new + * write_mask. + */ + unsigned components[4]; + unsigned channels = 0; + unsigned next = 0; + + for (int i = 0; i < 4; i++) { + if ((entry->ir->write_mask | remove) & (1 << i)) { + if (!(remove & (1 << i))) + components[channels++] = next; + next++; + } + } + + entry->ir->rhs = new(mem_ctx) ir_swizzle(entry->ir->rhs, + components, + channels); + if (debug) { + printf("to:\n "); + entry->ir->print(); + printf("\n"); + } + } + } + } + } else if (ir->whole_variable_written() != NULL) { + /* We did a whole-variable assignment. So, any instruction in + * the assignment list with the same LHS is dead. + */ + if (debug) + printf("looking for %s to remove\n", var->name); + foreach_iter(exec_list_iterator, iter, *assignments) { + assignment_entry *entry = (assignment_entry *)iter.get(); + + if (entry->lhs == var) { + if (debug) + printf("removing %s\n", var->name); + entry->ir->remove(); + entry->remove(); + progress = true; + } } } } - /* Add this instruction to the assignment list available to be removed. - * But not if the assignment has other side effects. - * Skip any calls to built-in functions, cause they don't have side effects. - */ - if (ir_has_call_skip_builtins(ir)) - return progress; - + /* Add this instruction to the assignment list available to be removed. */ assignment_entry *entry = new(ctx) assignment_entry(var, ir); assignments->push_tail(entry); @@ -166,7 +266,7 @@ process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments) foreach_iter(exec_list_iterator, iter, *assignments) { assignment_entry *entry = (assignment_entry *)iter.get(); - printf(" %s\n", entry->lhs->name); + printf(" %s (0x%01x)\n", entry->lhs->name, entry->available); } } diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_dead_functions.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_dead_functions.cpp index 51c77e3b9..cd3b2c12e 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_dead_functions.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_dead_functions.cpp @@ -32,6 +32,8 @@ #include "ir_expression_flattening.h" #include "glsl_types.h" +namespace { + class signature_entry : public exec_node { public: @@ -62,13 +64,12 @@ public: signature_entry *get_signature_entry(ir_function_signature *var); - bool (*predicate)(ir_instruction *ir); - /* List of signature_entry */ exec_list signature_list; void *mem_ctx; }; +} /* unnamed namespace */ signature_entry * ir_dead_functions_visitor::get_signature_entry(ir_function_signature *sig) @@ -103,7 +104,7 @@ ir_dead_functions_visitor::visit_enter(ir_function_signature *ir) ir_visitor_status ir_dead_functions_visitor::visit_enter(ir_call *ir) { - signature_entry *entry = this->get_signature_entry(ir->get_callee()); + signature_entry *entry = this->get_signature_entry(ir->callee); entry->used = true; diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_discard_simplification.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_discard_simplification.cpp deleted file mode 100644 index a19947ddd..000000000 --- a/3rdparty/glsl-optimizer/src/glsl/opt_discard_simplification.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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. - */ - -/** - * \file opt_discard_simplification.cpp - * - * This pass simplifies if-statements and loops containing unconditional - * discards. - * - * Case 1: Both branches contain unconditional discards: - * ----------------------------------------------------- - * - * if (cond) { - * s1; - * discard; - * s2; - * } else { - * s3; - * discard; - * s4; - * } - * - * becomes: - * - * discard - * - * Case 2: The "then" clause contains an unconditional discard: - * ------------------------------------------------------------ - * - * if (cond) { - * s1; - * discard; - * s2; - * } else { - * s3; - * } - * - * becomes: - * - * if (cond) { - * discard; - * } else { - * s3; - * } - * - * Case 3: The "else" clause contains an unconditional discard: - * ------------------------------------------------------------ - * - * if (cond) { - * s1; - * } else { - * s2; - * discard; - * s3; - * } - * - * becomes: - * - * if (cond) { - * s1; - * } else { - * discard; - * } - */ - -#include "glsl_types.h" -#include "ir.h" - -class discard_simplifier : public ir_hierarchical_visitor { -public: - discard_simplifier() - { - this->progress = false; - } - - ir_visitor_status visit_enter(ir_if *); - ir_visitor_status visit_enter(ir_loop *); - ir_visitor_status visit_enter(ir_assignment *); - - bool progress; -}; - -static ir_discard * -find_unconditional_discard(exec_list &instructions) -{ - foreach_list(n, &instructions) { - ir_instruction *ir = (ir_instruction *)n; - - if (ir->ir_type == ir_type_return || - ir->ir_type == ir_type_loop_jump) - return NULL; - - /* So far, this code doesn't know how to look inside of flow - * control to see if a discard later on at this level is - * unconditional. - */ - if (ir->ir_type == ir_type_if || - ir->ir_type == ir_type_loop) - return NULL; - - ir_discard *discard = ir->as_discard(); - if (discard != NULL && discard->condition == NULL) - return discard; - } - return NULL; -} - -static bool -is_only_instruction(ir_discard *discard) -{ - return (discard->prev->is_head_sentinel() && - discard->next->is_tail_sentinel()); -} - -/* We only care about the top level instructions, so don't descend - * into expressions. - */ -ir_visitor_status -discard_simplifier::visit_enter(ir_assignment *ir) -{ - return visit_continue_with_parent; -} - -ir_visitor_status -discard_simplifier::visit_enter(ir_if *ir) -{ - ir_discard *then_discard = find_unconditional_discard(ir->then_instructions); - ir_discard *else_discard = find_unconditional_discard(ir->else_instructions); - - if (then_discard == NULL && else_discard == NULL) - return visit_continue; - - /* If both branches result in discard, replace whole if with discard. */ - if (then_discard != NULL && else_discard != NULL) { - this->progress = true; - ir->replace_with(then_discard); - return visit_continue_with_parent; - } - - /* Otherwise, one branch has a discard. */ - if (then_discard != NULL && !is_only_instruction(then_discard)) { - this->progress = true; - ir->then_instructions.make_empty(); - ir->then_instructions.push_tail(then_discard); - } else if (else_discard != NULL && !is_only_instruction(else_discard)) { - this->progress = true; - ir->else_instructions.make_empty(); - ir->else_instructions.push_tail(else_discard); - } - - visit_list_elements(this, &ir->then_instructions); - return visit_continue_with_parent; -} - -ir_visitor_status -discard_simplifier::visit_enter(ir_loop *ir) -{ - ir_discard *discard = find_unconditional_discard(ir->body_instructions); - - if (discard) { - ir->replace_with(discard); - return visit_continue_with_parent; - } - - return visit_continue; -} - -bool -do_discard_simplification(exec_list *instructions) -{ - /* Look for a top-level unconditional discard */ - ir_discard *discard = find_unconditional_discard(*instructions); - if (discard != NULL) { - instructions->make_empty(); - instructions->push_tail(discard); - return true; - } - - discard_simplifier v; - - visit_list_elements(&v, instructions); - - return v.progress; -} diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_function_inlining.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_function_inlining.cpp index b46a96911..6e5c0d277 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_function_inlining.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_function_inlining.cpp @@ -27,7 +27,6 @@ * Replaces calls to functions with the body of the function. */ -#include #include "ir.h" #include "ir_visitor.h" #include "ir_function_inlining.h" @@ -40,6 +39,8 @@ do_sampler_replacement(exec_list *instructions, ir_variable *sampler, ir_dereference *deref); +namespace { + class ir_function_inlining_visitor : public ir_hierarchical_visitor { public: ir_function_inlining_visitor() @@ -55,7 +56,6 @@ public: virtual ir_visitor_status visit_enter(ir_expression *); virtual ir_visitor_status visit_enter(ir_call *); - virtual ir_visitor_status visit_enter(ir_assignment *); virtual ir_visitor_status visit_enter(ir_return *); virtual ir_visitor_status visit_enter(ir_texture *); virtual ir_visitor_status visit_enter(ir_swizzle *); @@ -76,25 +76,13 @@ public: }; - -bool -automatic_inlining_predicate(ir_instruction *ir) -{ - ir_call *call = ir->as_call(); - - if (call && can_inline(call)) - return true; - - return false; -} +} /* unnamed namespace */ bool do_function_inlining(exec_list *instructions) { ir_function_inlining_visitor v; - do_expression_flattening(instructions, automatic_inlining_predicate); - v.run(instructions); return v.progress; @@ -104,12 +92,12 @@ static void replace_return_with_assignment(ir_instruction *ir, void *data) { void *ctx = ralloc_parent(ir); - ir_variable *retval = (ir_variable *)data; + ir_dereference *orig_deref = (ir_dereference *) data; ir_return *ret = ir->as_return(); if (ret) { if (ret->value) { - ir_rvalue *lhs = new(ctx) ir_dereference_variable(retval); + ir_rvalue *lhs = orig_deref->clone(ctx, NULL); ret->replace_with(new(ctx) ir_assignment(lhs, ret->value, NULL)); } else { /* un-valued return has to be the last return, or we shouldn't @@ -121,51 +109,13 @@ replace_return_with_assignment(ir_instruction *ir, void *data) } } -static void rename_inlined_variable (ir_instruction* new_ir, ir_function_signature* func) -{ - ir_variable *new_var = new_ir->as_variable(); - if (!new_var) - return; - - // go through callee, see if we have any variables that match this one - bool progress; - int counter = 0; - do - { - progress = false; - foreach_iter(exec_list_iterator, iter, func->parameters) - { - const ir_variable* var = (const ir_variable*) iter.get(); - if (!strcmp(var->name, new_var->name)) - { - progress = true; - ralloc_asprintf_append((char**)&new_var->name, "_i%d", counter++); - } - } - foreach_iter(exec_list_iterator, iter, func->body) - { - ir_instruction *ir = (ir_instruction*)iter.get(); - const ir_variable *var = ir->as_variable(); - if (!var) - continue; - if (!strcmp(var->name, new_var->name)) - { - progress = true; - ralloc_asprintf_append((char**)&new_var->name, "_i%d", counter++); - } - } - } - while (progress); -} - -ir_rvalue * -ir_call::generate_inline(ir_instruction *next_ir, ir_function_signature* parent) +void +ir_call::generate_inline(ir_instruction *next_ir) { void *ctx = ralloc_parent(this); ir_variable **parameters; int num_parameters; int i; - ir_variable *retval = NULL; struct hash_table *ht; ht = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare); @@ -176,13 +126,6 @@ ir_call::generate_inline(ir_instruction *next_ir, ir_function_signature* parent) parameters = new ir_variable *[num_parameters]; - /* Generate storage for the return value. */ - if (!this->callee->return_type->is_void()) { - retval = new(ctx) ir_variable(this->callee->return_type, "_ret_val", - ir_var_temporary, this->callee->precision); - next_ir->insert_before(retval); - } - /* Generate the declarations for the parameters to our inlined code, * and set up the mapping of real function body variables to ours. */ @@ -204,7 +147,6 @@ ir_call::generate_inline(ir_instruction *next_ir, ir_function_signature* parent) parameters[i] = NULL; } else { parameters[i] = sig_param->clone(ctx, ht); - rename_inlined_variable (parameters[i], parent); parameters[i]->mode = ir_var_auto; parameters[i]->precision = (glsl_precision)parameters[i]->precision; @@ -242,10 +184,9 @@ ir_call::generate_inline(ir_instruction *next_ir, ir_function_signature* parent) foreach_iter(exec_list_iterator, iter, callee->body) { ir_instruction *ir = (ir_instruction *)iter.get(); ir_instruction *new_ir = ir->clone(ctx, ht); - rename_inlined_variable (new_ir, parent); new_instructions.push_tail(new_ir); - visit_tree(new_ir, replace_return_with_assignment, retval); + visit_tree(new_ir, replace_return_with_assignment, this->return_deref); } /* If any samplers were passed in, replace any deref of the sampler @@ -298,11 +239,6 @@ ir_call::generate_inline(ir_instruction *next_ir, ir_function_signature* parent) delete [] parameters; hash_table_dtor(ht); - - if (retval) - return new(ctx) ir_dereference_variable(retval); - else - return NULL; } @@ -342,13 +278,7 @@ ir_visitor_status ir_function_inlining_visitor::visit_enter(ir_call *ir) { if (can_inline(ir)) { - /* If the call was part of some tree, then it should have been - * flattened out or we shouldn't have seen it because of a - * visit_continue_with_parent in this visitor. - */ - assert(ir == base_ir); - - (void) ir->generate_inline(ir, this->current_function); + ir->generate_inline(ir); ir->remove(); this->progress = true; } @@ -357,35 +287,6 @@ ir_function_inlining_visitor::visit_enter(ir_call *ir) } -ir_visitor_status -ir_function_inlining_visitor::visit_enter(ir_assignment *ir) -{ - ir_call *call = ir->rhs->as_call(); - if (!call || !can_inline(call)) - return visit_continue; - - /* generates the parameter setup, function body, and returns the return - * value of the function - */ - ir_rvalue *rhs = call->generate_inline(ir, this->current_function); - assert(rhs); - - // if function's return type had no precision specified, assign - // precision from lhs - if (rhs && rhs->get_precision() == glsl_precision_undefined) { - rhs->set_precision (ir->lhs->get_precision()); - ir_dereference_variable* deref = rhs->as_dereference_variable(); - if (deref) - deref->variable_referenced()->precision = ir->lhs->get_precision(); - } - - - ir->rhs = rhs; - this->progress = true; - - return visit_continue; -} - /** * Replaces references to the "sampler" variable with a clone of "deref." * diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_if_simplification.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_if_simplification.cpp index 29b1d18aa..e1a23d94a 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_if_simplification.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_if_simplification.cpp @@ -30,6 +30,8 @@ #include "ir.h" +namespace { + class ir_if_simplification_visitor : public ir_hierarchical_visitor { public: ir_if_simplification_visitor() @@ -43,12 +45,15 @@ public: bool made_progress; }; +} /* unnamed namespace */ + /* We only care about the top level "if" instructions, so don't * descend into expressions. */ ir_visitor_status ir_if_simplification_visitor::visit_enter(ir_assignment *ir) { + (void) ir; return visit_continue_with_parent; } @@ -65,6 +70,14 @@ do_if_simplification(exec_list *instructions) ir_visitor_status ir_if_simplification_visitor::visit_leave(ir_if *ir) { + /* If the if statement has nothing on either side, remove it. */ + if (ir->then_instructions.is_empty() && + ir->else_instructions.is_empty()) { + ir->remove(); + this->made_progress = true; + return visit_continue; + } + /* FINISHME: Ideally there would be a way to note that the condition results * FINISHME: in a constant before processing both of the other subtrees. * FINISHME: This can probably be done with some flags, but it would take diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_noop_swizzle.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_noop_swizzle.cpp index 0a906aaf1..693719e3d 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_noop_swizzle.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_noop_swizzle.cpp @@ -35,6 +35,8 @@ #include "ir_print_visitor.h" #include "glsl_types.h" +namespace { + class ir_noop_swizzle_visitor : public ir_rvalue_visitor { public: ir_noop_swizzle_visitor() @@ -46,6 +48,8 @@ public: bool progress; }; +} /* unnamed namespace */ + void ir_noop_swizzle_visitor::handle_rvalue(ir_rvalue **rvalue) { diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_redundant_jumps.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_redundant_jumps.cpp index f350fa947..8606dcbb7 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_redundant_jumps.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_redundant_jumps.cpp @@ -28,6 +28,8 @@ #include "ir.h" +namespace { + class redundant_jumps_visitor : public ir_hierarchical_visitor { public: redundant_jumps_visitor() @@ -42,6 +44,8 @@ public: bool progress; }; +} /* unnamed namespace */ + /* We only care about the top level instructions, so don't descend * into expressions. */ diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_structure_splitting.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_structure_splitting.cpp index e7563fbc9..dd85e2fb7 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_structure_splitting.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_structure_splitting.cpp @@ -38,16 +38,14 @@ #include "ir_rvalue_visitor.h" #include "glsl_types.h" +namespace { + static bool debug = false; -// XXX using variable_entry2 here to avoid collision (MSVC multiply-defined -// function) with the variable_entry class seen in ir_variable_refcount.h -// Perhaps we can use the one in ir_variable_refcount.h and make this class -// here go away? -class variable_entry2 : public exec_node +class variable_entry : public exec_node { public: - variable_entry2(ir_variable *var) + variable_entry(ir_variable *var) { this->var = var; this->whole_structure_access = 0; @@ -61,7 +59,11 @@ public: /** Number of times the variable is referenced, including assignments. */ unsigned whole_structure_access; - bool declaration; /* If the variable had a decl in the instruction stream */ + /* If the variable had a decl we can work with in the instruction + * stream. We can't do splitting on function arguments, which + * don't get this variable set. + */ + bool declaration; ir_variable **components; @@ -89,7 +91,7 @@ public: virtual ir_visitor_status visit_enter(ir_assignment *); virtual ir_visitor_status visit_enter(ir_function_signature *); - variable_entry2 *get_variable_entry2(ir_variable *var); + variable_entry *get_variable_entry(ir_variable *var); /* List of split_var_entry */ exec_list variable_list; @@ -97,8 +99,8 @@ public: void *mem_ctx; }; -variable_entry2 * -ir_structure_reference_visitor::get_variable_entry2(ir_variable *var) +variable_entry * +ir_structure_reference_visitor::get_variable_entry(ir_variable *var) { assert(var); @@ -106,12 +108,12 @@ ir_structure_reference_visitor::get_variable_entry2(ir_variable *var) return NULL; foreach_iter(exec_list_iterator, iter, this->variable_list) { - variable_entry2 *entry = (variable_entry2 *)iter.get(); + variable_entry *entry = (variable_entry *)iter.get(); if (entry->var == var) return entry; } - variable_entry2 *entry = new(mem_ctx) variable_entry2(var); + variable_entry *entry = new(mem_ctx) variable_entry(var); this->variable_list.push_tail(entry); return entry; } @@ -120,7 +122,7 @@ ir_structure_reference_visitor::get_variable_entry2(ir_variable *var) ir_visitor_status ir_structure_reference_visitor::visit(ir_variable *ir) { - variable_entry2 *entry = this->get_variable_entry2(ir); + variable_entry *entry = this->get_variable_entry(ir); if (entry) entry->declaration = true; @@ -132,7 +134,7 @@ ir_visitor_status ir_structure_reference_visitor::visit(ir_dereference_variable *ir) { ir_variable *const var = ir->variable_referenced(); - variable_entry2 *entry = this->get_variable_entry2(var); + variable_entry *entry = this->get_variable_entry(var); if (entry) entry->whole_structure_access++; @@ -171,8 +173,9 @@ ir_structure_reference_visitor::visit_enter(ir_assignment *ir) ir_visitor_status ir_structure_reference_visitor::visit_enter(ir_function_signature *ir) { - /* We don't want to descend into the function parameters and - * dead-code eliminate them, so just accept the body here. + /* We don't have logic for structure-splitting function arguments, + * so just look at the body instructions and not the parameter + * declarations. */ visit_list_elements(this, &ir->body); return visit_continue_with_parent; @@ -193,13 +196,12 @@ public: void split_deref(ir_dereference **deref); void handle_rvalue(ir_rvalue **rvalue); - variable_entry2 *get_splitting_entry(ir_variable *var); + variable_entry *get_splitting_entry(ir_variable *var); exec_list *variable_list; - void *mem_ctx; }; -variable_entry2 * +variable_entry * ir_structure_splitting_visitor::get_splitting_entry(ir_variable *var) { assert(var); @@ -208,7 +210,7 @@ ir_structure_splitting_visitor::get_splitting_entry(ir_variable *var) return NULL; foreach_iter(exec_list_iterator, iter, *this->variable_list) { - variable_entry2 *entry = (variable_entry2 *)iter.get(); + variable_entry *entry = (variable_entry *)iter.get(); if (entry->var == var) { return entry; } @@ -228,7 +230,7 @@ ir_structure_splitting_visitor::split_deref(ir_dereference **deref) if (!deref_var) return; - variable_entry2 *entry = get_splitting_entry(deref_var->var); + variable_entry *entry = get_splitting_entry(deref_var->var); if (!entry) return; @@ -263,8 +265,8 @@ ir_structure_splitting_visitor::visit_leave(ir_assignment *ir) { ir_dereference_variable *lhs_deref = ir->lhs->as_dereference_variable(); ir_dereference_variable *rhs_deref = ir->rhs->as_dereference_variable(); - variable_entry2 *lhs_entry = lhs_deref ? get_splitting_entry(lhs_deref->var) : NULL; - variable_entry2 *rhs_entry = rhs_deref ? get_splitting_entry(rhs_deref->var) : NULL; + variable_entry *lhs_entry = lhs_deref ? get_splitting_entry(lhs_deref->var) : NULL; + variable_entry *rhs_entry = rhs_deref ? get_splitting_entry(rhs_deref->var) : NULL; const glsl_type *type = ir->rhs->type; if ((lhs_entry || rhs_entry) && !ir->condition) { @@ -303,6 +305,8 @@ ir_structure_splitting_visitor::visit_leave(ir_assignment *ir) return visit_continue; } +} /* unnamed namespace */ + bool do_structure_splitting(exec_list *instructions) { @@ -312,7 +316,7 @@ do_structure_splitting(exec_list *instructions) /* Trim out variables we can't split. */ foreach_iter(exec_list_iterator, iter, refs.variable_list) { - variable_entry2 *entry = (variable_entry2 *)iter.get(); + variable_entry *entry = (variable_entry *)iter.get(); if (debug) { printf("structure %s@%p: decl %d, whole_access %d\n", @@ -334,7 +338,7 @@ do_structure_splitting(exec_list *instructions) * components. */ foreach_iter(exec_list_iterator, iter, refs.variable_list) { - variable_entry2 *entry = (variable_entry2 *)iter.get(); + variable_entry *entry = (variable_entry *)iter.get(); const struct glsl_type *type = entry->var->type; entry->mem_ctx = ralloc_parent(entry->var); diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_swizzle_swizzle.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_swizzle_swizzle.cpp index bc442fa86..7564c6b3b 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_swizzle_swizzle.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_swizzle_swizzle.cpp @@ -32,6 +32,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + class ir_swizzle_swizzle_visitor : public ir_hierarchical_visitor { public: ir_swizzle_swizzle_visitor() @@ -44,6 +46,8 @@ public: bool progress; }; +} /* unnamed namespace */ + ir_visitor_status ir_swizzle_swizzle_visitor::visit_enter(ir_swizzle *ir) { diff --git a/3rdparty/glsl-optimizer/src/glsl/opt_tree_grafting.cpp b/3rdparty/glsl-optimizer/src/glsl/opt_tree_grafting.cpp index 903b79e40..d6a1177cf 100644 --- a/3rdparty/glsl-optimizer/src/glsl/opt_tree_grafting.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/opt_tree_grafting.cpp @@ -54,6 +54,8 @@ #include "ir_optimization.h" #include "glsl_types.h" +namespace { + static bool debug = false; class ir_tree_grafting_visitor : public ir_hierarchical_visitor { @@ -77,6 +79,8 @@ public: virtual ir_visitor_status visit_enter(class ir_swizzle *); virtual ir_visitor_status visit_enter(class ir_texture *); + ir_visitor_status check_graft(ir_instruction *ir, ir_variable *var); + bool do_graft(ir_rvalue **rvalue); bool progress; @@ -154,18 +158,17 @@ ir_tree_grafting_visitor::visit_enter(ir_loop *ir) return visit_stop; } +/** + * Check if we can continue grafting after writing to a variable. If the + * expression we're trying to graft references the variable, we must stop. + * + * \param ir An instruction that writes to a variable. + * \param var The variable being updated. + */ ir_visitor_status -ir_tree_grafting_visitor::visit_leave(ir_assignment *ir) +ir_tree_grafting_visitor::check_graft(ir_instruction *ir, ir_variable *var) { - if (do_graft(&ir->rhs) || - do_graft(&ir->condition)) - return visit_stop; - - /* If this assignment updates a variable used in the assignment - * we're trying to graft, then we're done. - */ - if (dereferences_variable(this->graft_assign->rhs, - ir->lhs->variable_referenced())) { + if (dereferences_variable(this->graft_assign->rhs, var)) { if (debug) { printf("graft killed by: "); ir->print(); @@ -186,6 +189,18 @@ ir_tree_grafting_visitor::visit_enter(ir_assignment *ir) return visit_continue; } +ir_visitor_status +ir_tree_grafting_visitor::visit_leave(ir_assignment *ir) +{ + if (do_graft(&ir->rhs) || + do_graft(&ir->condition)) + return visit_stop; + + /* If this assignment updates a variable used in the assignment + * we're trying to graft, then we're done. + */ + return check_graft(ir, ir->lhs->variable_referenced()); +} ir_visitor_status ir_tree_grafting_visitor::visit_enter(ir_function *ir) @@ -204,15 +219,18 @@ ir_tree_grafting_visitor::visit_enter(ir_function_signature *ir) ir_visitor_status ir_tree_grafting_visitor::visit_enter(ir_call *ir) { - exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator(); + exec_list_iterator sig_iter = ir->callee->parameters.iterator(); /* Reminder: iterating ir_call iterates its parameters. */ foreach_iter(exec_list_iterator, iter, *ir) { ir_variable *sig_param = (ir_variable *)sig_iter.get(); ir_rvalue *ir = (ir_rvalue *)iter.get(); ir_rvalue *new_ir = ir; - if (sig_param->mode != ir_var_in && sig_param->mode != ir_var_const_in) + if (sig_param->mode != ir_var_in && sig_param->mode != ir_var_const_in) { + if (check_graft(ir, sig_param) == visit_stop) + return visit_stop; continue; + } if (do_graft(&new_ir)) { ir->replace_with(new_ir); @@ -221,6 +239,9 @@ ir_tree_grafting_visitor::visit_enter(ir_call *ir) sig_iter.next(); } + if (ir->return_deref && check_graft(ir, ir->return_deref->var) == visit_stop) + return visit_stop; + return visit_continue; } @@ -260,9 +281,7 @@ ir_visitor_status ir_tree_grafting_visitor::visit_enter(ir_texture *ir) { if (do_graft(&ir->coordinate) || - do_graft(&ir->projector) || - do_graft(&ir->offset) || - do_graft(&ir->shadow_comparitor)) + do_graft(&ir->offset)) return visit_stop; switch (ir->op) { @@ -274,6 +293,7 @@ ir_tree_grafting_visitor::visit_enter(ir_texture *ir) break; case ir_txf: case ir_txl: + case ir_txs: if (do_graft(&ir->lod_info.lod)) return visit_stop; break; @@ -347,7 +367,7 @@ tree_grafting_basic_block(ir_instruction *bb_first, lhs_var->mode == ir_var_inout) continue; - variable_entry *entry = info->refs->get_variable_entry(lhs_var); + ir_variable_refcount_entry *entry = info->refs->get_variable_entry(lhs_var); if (!entry->declaration || entry->assigned_count != 1 || @@ -369,6 +389,8 @@ tree_grafting_basic_block(ir_instruction *bb_first, } } +} /* unnamed namespace */ + /** * Does a copy propagation pass on the code present in the instruction stream. */ diff --git a/3rdparty/glsl-optimizer/src/glsl/ralloc.c b/3rdparty/glsl-optimizer/src/glsl/ralloc.c index 6a5eac6b9..3da09b559 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ralloc.c +++ b/3rdparty/glsl-optimizer/src/glsl/ralloc.c @@ -28,6 +28,17 @@ #include #include +/* Android defines SIZE_MAX in limits.h, instead of the standard stdint.h */ +#ifdef ANDROID +#include +#endif + +/* Some versions of MinGW are missing _vscprintf's declaration, although they + * still provide the symbol in the import library. */ +#ifdef __MINGW32__ +_CRTIMP int _vscprintf(const char *format, va_list argptr); +#endif + #include "ralloc.h" #ifdef __GNUC__ @@ -267,7 +278,7 @@ ralloc_parent(const void *ptr) return NULL; info = get_header(ptr); - return PTR_FROM_HEADER(info->parent); + return info->parent ? PTR_FROM_HEADER(info->parent) : NULL; } static void *autofree_context = NULL; @@ -392,7 +403,7 @@ printf_length(const char *fmt, va_list untouched_args) va_list args; va_copy(args, untouched_args); -#ifdef _MSC_VER +#ifdef _WIN32 /* We need to use _vcsprintf to calculate the size as vsnprintf returns -1 * if the number of characters to write is greater than count. */ @@ -434,7 +445,28 @@ ralloc_asprintf_append(char **str, const char *fmt, ...) bool ralloc_vasprintf_append(char **str, const char *fmt, va_list args) { - size_t existing_length, new_length; + size_t existing_length; + assert(str != NULL); + existing_length = *str ? strlen(*str) : 0; + return ralloc_vasprintf_rewrite_tail(str, &existing_length, fmt, args); +} + +bool +ralloc_asprintf_rewrite_tail(char **str, size_t *start, const char *fmt, ...) +{ + bool success; + va_list args; + va_start(args, fmt); + success = ralloc_vasprintf_rewrite_tail(str, start, fmt, args); + va_end(args); + return success; +} + +bool +ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt, + va_list args) +{ + size_t new_length; char *ptr; assert(str != NULL); @@ -445,14 +477,14 @@ ralloc_vasprintf_append(char **str, const char *fmt, va_list args) return true; } - existing_length = strlen(*str); new_length = printf_length(fmt, args); - ptr = resize(*str, existing_length + new_length + 1); + ptr = resize(*str, *start + new_length + 1); if (unlikely(ptr == NULL)) return false; - vsnprintf(ptr + existing_length, new_length + 1, fmt, args); + vsnprintf(ptr + *start, new_length + 1, fmt, args); *str = ptr; + *start += new_length; return true; } diff --git a/3rdparty/glsl-optimizer/src/glsl/ralloc.h b/3rdparty/glsl-optimizer/src/glsl/ralloc.h index d5338152f..86306b1f5 100644 --- a/3rdparty/glsl-optimizer/src/glsl/ralloc.h +++ b/3rdparty/glsl-optimizer/src/glsl/ralloc.h @@ -313,10 +313,63 @@ char *ralloc_asprintf (const void *ctx, const char *fmt, ...); */ char *ralloc_vasprintf(const void *ctx, const char *fmt, va_list args); +/** + * Rewrite the tail of an existing string, starting at a given index. + * + * Overwrites the contents of *str starting at \p start with newly formatted + * text, including a new null-terminator. Allocates more memory as necessary. + * + * This can be used to append formatted text when the length of the existing + * string is already known, saving a strlen() call. + * + * \sa ralloc_asprintf_append + * + * \param str The string to be updated. + * \param start The index to start appending new data at. + * \param fmt A printf-style formatting string + * + * \p str will be updated to the new pointer unless allocation fails. + * \p start will be increased by the length of the newly formatted text. + * + * \return True unless allocation failed. + */ +bool ralloc_asprintf_rewrite_tail(char **str, size_t *start, + const char *fmt, ...); + +/** + * Rewrite the tail of an existing string, starting at a given index. + * + * Overwrites the contents of *str starting at \p start with newly formatted + * text, including a new null-terminator. Allocates more memory as necessary. + * + * This can be used to append formatted text when the length of the existing + * string is already known, saving a strlen() call. + * + * \sa ralloc_vasprintf_append + * + * \param str The string to be updated. + * \param start The index to start appending new data at. + * \param fmt A printf-style formatting string + * \param args A va_list containing the data to be formatted + * + * \p str will be updated to the new pointer unless allocation fails. + * \p start will be increased by the length of the newly formatted text. + * + * \return True unless allocation failed. + */ +bool ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt, + va_list args); + /** * Append formatted text to the supplied string. * + * This is equivalent to + * \code + * ralloc_asprintf_rewrite_tail(str, strlen(*str), fmt, ...) + * \endcode + * * \sa ralloc_asprintf + * \sa ralloc_asprintf_rewrite_tail * \sa ralloc_strcat * * \p str will be updated to the new pointer unless allocation fails. @@ -328,7 +381,13 @@ bool ralloc_asprintf_append (char **str, const char *fmt, ...); /** * Append formatted text to the supplied string, given a va_list. * + * This is equivalent to + * \code + * ralloc_vasprintf_rewrite_tail(str, strlen(*str), fmt, args) + * \endcode + * * \sa ralloc_vasprintf + * \sa ralloc_vasprintf_rewrite_tail * \sa ralloc_strcat * * \p str will be updated to the new pointer unless allocation fails. diff --git a/3rdparty/glsl-optimizer/src/glsl/s_expression.cpp b/3rdparty/glsl-optimizer/src/glsl/s_expression.cpp index e704a3be2..57de9d334 100644 --- a/3rdparty/glsl-optimizer/src/glsl/s_expression.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/s_expression.cpp @@ -23,6 +23,7 @@ */ #include +#include #include "s_expression.h" s_symbol::s_symbol(const char *str, size_t n) @@ -64,21 +65,28 @@ read_atom(void *ctx, const char *&src, char *&symbol_buffer) if (n == 0) return NULL; // no atom - // Check if the atom is a number. - char *float_end = NULL; - double f = glsl_strtod(src, &float_end); - if (float_end != src) { - char *int_end = NULL; - int i = strtol(src, &int_end, 10); - // If strtod matched more characters, it must have a decimal part - if (float_end > int_end) - expr = new(ctx) s_float(f); - else - expr = new(ctx) s_int(i); + // Check for the special symbol '+INF', which means +Infinity. Note: C99 + // requires strtod to parse '+INF' as +Infinity, but we still support some + // non-C99-compliant compilers (e.g. MSVC). + if (n == 4 && strncmp(src, "+INF", 4) == 0) { + expr = new(ctx) s_float(std::numeric_limits::infinity()); } else { - // Not a number; return a symbol. - symbol_buffer[n] = '\0'; - expr = new(ctx) s_symbol(symbol_buffer, n); + // Check if the atom is a number. + char *float_end = NULL; + double f = glsl_strtod(src, &float_end); + if (float_end != src) { + char *int_end = NULL; + int i = strtol(src, &int_end, 10); + // If strtod matched more characters, it must have a decimal part + if (float_end > int_end) + expr = new(ctx) s_float(f); + else + expr = new(ctx) s_int(i); + } else { + // Not a number; return a symbol. + symbol_buffer[n] = '\0'; + expr = new(ctx) s_symbol(symbol_buffer, n); + } } src += n; diff --git a/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.cpp b/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.cpp index 696ea757e..679714e38 100644 --- a/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.cpp +++ b/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.cpp @@ -37,9 +37,16 @@ void _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, struct gl_shader *sh) { + (void) ctx; *ptr = sh; } +void +_mesa_shader_debug(struct gl_context *, GLenum, GLuint, + const char *, int) +{ +} + struct gl_shader * _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type) { @@ -63,13 +70,16 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) ctx->API = api; + ctx->Extensions.dummy_false = false; + ctx->Extensions.dummy_true = true; ctx->Extensions.ARB_ES2_compatibility = true; - ctx->Extensions.ARB_draw_buffers = true; ctx->Extensions.ARB_draw_instanced = true; ctx->Extensions.ARB_fragment_coord_conventions = true; ctx->Extensions.EXT_texture_array = true; ctx->Extensions.NV_texture_rectangle = true; ctx->Extensions.EXT_texture3D = true; + ctx->Extensions.OES_EGL_image_external = true; + ctx->Extensions.ARB_shader_bit_encoding = true; ctx->Const.GLSLVersion = 120; diff --git a/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.h b/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.h index 877332006..41ce35bef 100644 --- a/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.h +++ b/3rdparty/glsl-optimizer/src/glsl/standalone_scaffolding.h @@ -40,6 +40,10 @@ _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, extern "C" struct gl_shader * _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type); +extern "C" void +_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint id, + const char *msg, int len); + /** * Initialize the given gl_context structure to a reasonable set of * defaults representing the minimum capabilities required by the diff --git a/3rdparty/glsl-optimizer/src/glsl/strtod.c b/3rdparty/glsl-optimizer/src/glsl/strtod.c index ff3459148..47c1f0ed6 100644 --- a/3rdparty/glsl-optimizer/src/glsl/strtod.c +++ b/3rdparty/glsl-optimizer/src/glsl/strtod.c @@ -44,7 +44,8 @@ double glsl_strtod(const char *s, char **end) { -#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) +#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && \ + !defined(__HAIKU__) && !defined(__UCLIBC__) static locale_t loc = NULL; if (!loc) { loc = newlocale(LC_CTYPE_MASK, "C", NULL); diff --git a/3rdparty/glsl-optimizer/src/glsl/xcode/mesaglsl2.xcodeproj/project.pbxproj b/3rdparty/glsl-optimizer/src/glsl/xcode/mesaglsl2.xcodeproj/project.pbxproj index d5f93f0bf..0e13cfcca 100644 --- a/3rdparty/glsl-optimizer/src/glsl/xcode/mesaglsl2.xcodeproj/project.pbxproj +++ b/3rdparty/glsl-optimizer/src/glsl/xcode/mesaglsl2.xcodeproj/project.pbxproj @@ -26,6 +26,23 @@ 2B3854711293BE5000F3E692 /* opt_structure_splitting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B38545A1293BE5000F3E692 /* opt_structure_splitting.cpp */; }; 2B3854721293BE5000F3E692 /* opt_swizzle_swizzle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B38545B1293BE5000F3E692 /* opt_swizzle_swizzle.cpp */; }; 2B3854731293BE5000F3E692 /* opt_tree_grafting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B38545C1293BE5000F3E692 /* opt_tree_grafting.cpp */; }; + 2B3A6B8F15FA043D000DCBE1 /* link_uniforms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B8E15FA043D000DCBE1 /* link_uniforms.cpp */; }; + 2B3A6B9015FA043D000DCBE1 /* link_uniforms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B8E15FA043D000DCBE1 /* link_uniforms.cpp */; }; + 2B3A6B9615FA0468000DCBE1 /* link_uniform_initializers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9515FA0468000DCBE1 /* link_uniform_initializers.cpp */; }; + 2B3A6B9715FA0468000DCBE1 /* link_uniform_initializers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9515FA0468000DCBE1 /* link_uniform_initializers.cpp */; }; + 2B3A6BA215FA0494000DCBE1 /* lower_clip_distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9C15FA0494000DCBE1 /* lower_clip_distance.cpp */; }; + 2B3A6BA315FA0494000DCBE1 /* lower_discard_flow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9D15FA0494000DCBE1 /* lower_discard_flow.cpp */; }; + 2B3A6BA415FA0494000DCBE1 /* lower_output_reads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9E15FA0494000DCBE1 /* lower_output_reads.cpp */; }; + 2B3A6BA615FA0494000DCBE1 /* lower_ubo_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6BA015FA0494000DCBE1 /* lower_ubo_reference.cpp */; }; + 2B3A6BA715FA0494000DCBE1 /* opt_array_splitting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6BA115FA0494000DCBE1 /* opt_array_splitting.cpp */; }; + 2B3A6BA815FA0494000DCBE1 /* lower_clip_distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9C15FA0494000DCBE1 /* lower_clip_distance.cpp */; }; + 2B3A6BA915FA0494000DCBE1 /* lower_discard_flow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9D15FA0494000DCBE1 /* lower_discard_flow.cpp */; }; + 2B3A6BAA15FA0494000DCBE1 /* lower_output_reads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6B9E15FA0494000DCBE1 /* lower_output_reads.cpp */; }; + 2B3A6BAC15FA0494000DCBE1 /* lower_ubo_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6BA015FA0494000DCBE1 /* lower_ubo_reference.cpp */; }; + 2B3A6BAD15FA0494000DCBE1 /* opt_array_splitting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6BA115FA0494000DCBE1 /* opt_array_splitting.cpp */; }; + 2B3A6BD915FA08E1000DCBE1 /* ir_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6BD715FA08E1000DCBE1 /* ir_builder.cpp */; }; + 2B3A6BDA15FA08E1000DCBE1 /* ir_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B3A6BD715FA08E1000DCBE1 /* ir_builder.cpp */; }; + 2B3A6BDB15FA08E1000DCBE1 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B3A6BD815FA08E1000DCBE1 /* ir_builder.h */; }; 2B47DA011209C87B00937F2C /* hash_table.c in Sources */ = {isa = PBXBuildFile; fileRef = 2B47D9FD1209C87B00937F2C /* hash_table.c */; }; 2B47DA021209C87B00937F2C /* hash_table.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B47D9FE1209C87B00937F2C /* hash_table.h */; }; 2B47DA031209C87B00937F2C /* symbol_table.c in Sources */ = {isa = PBXBuildFile; fileRef = 2B47D9FF1209C87B00937F2C /* symbol_table.c */; }; @@ -42,6 +59,13 @@ 2B6A99F71223B1670059FBED /* glcpp-parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6A99EF1223B1670059FBED /* glcpp-parse.h */; }; 2B6A99FA1223B1670059FBED /* glcpp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6A99F21223B1670059FBED /* glcpp.h */; }; 2B6A99FB1223B1670059FBED /* pp.c in Sources */ = {isa = PBXBuildFile; fileRef = 2B6A99F31223B1670059FBED /* pp.c */; }; + 2B6AC7B9161EC99C0094FD86 /* prog_instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6AC7B5161EC99C0094FD86 /* prog_instruction.h */; }; + 2B6AC7BA161EC99C0094FD86 /* prog_parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6AC7B6161EC99C0094FD86 /* prog_parameter.h */; }; + 2B6AC7BB161EC99C0094FD86 /* prog_statevars.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6AC7B7161EC99C0094FD86 /* prog_statevars.h */; }; + 2B6AC7BD161EC9D40094FD86 /* ir_uniform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6AC7BC161EC9D40094FD86 /* ir_uniform.h */; }; + 2B6AC8AD161ED9080094FD86 /* glminimal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6AC8AC161ED9080094FD86 /* glminimal.h */; }; + 2B92A05D15F9FF4700CFED4A /* builtin_variables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B92A05C15F9FF4700CFED4A /* builtin_variables.cpp */; }; + 2B92A05E15F9FF4700CFED4A /* builtin_variables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B92A05C15F9FF4700CFED4A /* builtin_variables.cpp */; }; 2BA07FAB1352E7BB00A1C074 /* ralloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BA07FA91352E7BB00A1C074 /* ralloc.c */; }; 2BA07FAC1352E7BB00A1C074 /* ralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA07FAA1352E7BB00A1C074 /* ralloc.h */; }; 2BA080421352EBB900A1C074 /* ast_expr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A511207FEA6002DC82D /* ast_expr.cpp */; }; @@ -68,7 +92,6 @@ 2BA080591352EBB900A1C074 /* ir_unused_structs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8A1207FEA6002DC82D /* ir_unused_structs.cpp */; }; 2BA0805A1352EBB900A1C074 /* ir_validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8C1207FEA6002DC82D /* ir_validate.cpp */; }; 2BA0805B1352EBB900A1C074 /* ir_variable_refcount.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8D1207FEA6002DC82D /* ir_variable_refcount.cpp */; }; - 2BA0805C1352EBB900A1C074 /* ir_variable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8F1207FEA6002DC82D /* ir_variable.cpp */; }; 2BA0805D1352EBB900A1C074 /* ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A931207FEA6002DC82D /* ir.cpp */; }; 2BA0805E1352EBB900A1C074 /* link_functions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A951207FEA6002DC82D /* link_functions.cpp */; }; 2BA0805F1352EBB900A1C074 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A961207FEA6002DC82D /* linker.cpp */; }; @@ -108,7 +131,6 @@ 2BA080811352EBB900A1C074 /* lower_discard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AA12B8F1580052C6B0 /* lower_discard.cpp */; }; 2BA080821352EBB900A1C074 /* lower_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AB12B8F1580052C6B0 /* lower_instructions.cpp */; }; 2BA080831352EBB900A1C074 /* lower_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AC12B8F1580052C6B0 /* lower_vector.cpp */; }; - 2BA080841352EBB900A1C074 /* opt_discard_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AD12B8F1580052C6B0 /* opt_discard_simplification.cpp */; }; 2BA080851352EBB900A1C074 /* strtod.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AE12B8F1580052C6B0 /* strtod.c */; }; 2BA080861352EBB900A1C074 /* ralloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BA07FA91352E7BB00A1C074 /* ralloc.c */; }; 2BA080871352EBD100A1C074 /* builtin_stubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA080381352EB1A00A1C074 /* builtin_stubs.cpp */; }; @@ -120,7 +142,6 @@ 2BA55AA01207FEA6002DC82D /* ast.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A551207FEA6002DC82D /* ast.h */; }; 2BA55AA11207FEA6002DC82D /* builtin_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A561207FEA6002DC82D /* builtin_function.cpp */; }; 2BA55AA21207FEA6002DC82D /* builtin_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A571207FEA6002DC82D /* builtin_types.h */; }; - 2BA55AA31207FEA6002DC82D /* builtin_variables.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A581207FEA6002DC82D /* builtin_variables.h */; }; 2BA55AA41207FEA6002DC82D /* glsl_lexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A591207FEA6002DC82D /* glsl_lexer.cpp */; }; 2BA55AA61207FEA6002DC82D /* glsl_optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A5B1207FEA6002DC82D /* glsl_optimizer.cpp */; }; 2BA55AA71207FEA6002DC82D /* glsl_optimizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A5C1207FEA6002DC82D /* glsl_optimizer.h */; }; @@ -157,7 +178,6 @@ 2BA55AD71207FEA6002DC82D /* ir_validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8C1207FEA6002DC82D /* ir_validate.cpp */; }; 2BA55AD81207FEA6002DC82D /* ir_variable_refcount.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8D1207FEA6002DC82D /* ir_variable_refcount.cpp */; }; 2BA55AD91207FEA6002DC82D /* ir_variable_refcount.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A8E1207FEA6002DC82D /* ir_variable_refcount.h */; }; - 2BA55ADA1207FEA6002DC82D /* ir_variable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A8F1207FEA6002DC82D /* ir_variable.cpp */; }; 2BA55ADD1207FEA6002DC82D /* ir_visitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A921207FEA6002DC82D /* ir_visitor.h */; }; 2BA55ADE1207FEA6002DC82D /* ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA55A931207FEA6002DC82D /* ir.cpp */; }; 2BA55ADF1207FEA6002DC82D /* ir.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA55A941207FEA6002DC82D /* ir.h */; }; @@ -171,7 +191,6 @@ 2BB2F5B012B8F1580052C6B0 /* lower_discard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AA12B8F1580052C6B0 /* lower_discard.cpp */; }; 2BB2F5B112B8F1580052C6B0 /* lower_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AB12B8F1580052C6B0 /* lower_instructions.cpp */; }; 2BB2F5B212B8F1580052C6B0 /* lower_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AC12B8F1580052C6B0 /* lower_vector.cpp */; }; - 2BB2F5B312B8F1580052C6B0 /* opt_discard_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AD12B8F1580052C6B0 /* opt_discard_simplification.cpp */; }; 2BB2F5B412B8F1580052C6B0 /* strtod.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BB2F5AE12B8F1580052C6B0 /* strtod.c */; }; 2BB2F5B512B8F1580052C6B0 /* strtod.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB2F5AF12B8F1580052C6B0 /* strtod.h */; }; 2BB725A9135094BE0057D8B5 /* compiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB7259B135094BE0057D8B5 /* compiler.h */; }; @@ -179,15 +198,11 @@ 2BB725AB135094BE0057D8B5 /* context.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB7259D135094BE0057D8B5 /* context.h */; }; 2BB725AC135094BE0057D8B5 /* core.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB7259E135094BE0057D8B5 /* core.h */; }; 2BB725AD135094BE0057D8B5 /* dd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB7259F135094BE0057D8B5 /* dd.h */; }; - 2BB725AE135094BE0057D8B5 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A0135094BE0057D8B5 /* extensions.h */; }; 2BB725AF135094BE0057D8B5 /* glheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A1135094BE0057D8B5 /* glheader.h */; }; 2BB725B0135094BE0057D8B5 /* imports.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A2135094BE0057D8B5 /* imports.h */; }; 2BB725B1135094BE0057D8B5 /* macros.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A3135094BE0057D8B5 /* macros.h */; }; - 2BB725B2135094BE0057D8B5 /* mfeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A4135094BE0057D8B5 /* mfeatures.h */; }; 2BB725B3135094BE0057D8B5 /* mtypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A5135094BE0057D8B5 /* mtypes.h */; }; - 2BB725B4135094BE0057D8B5 /* shaderobj.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A6135094BE0057D8B5 /* shaderobj.h */; }; 2BB725B5135094BE0057D8B5 /* simple_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A7135094BE0057D8B5 /* simple_list.h */; }; - 2BB725B6135094BE0057D8B5 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB725A8135094BE0057D8B5 /* version.h */; }; 2BBA49281254706A00D42573 /* glsl_symbol_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BBA491F1254706A00D42573 /* glsl_symbol_table.cpp */; }; 2BBA492A1254706A00D42573 /* loop_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BBA49211254706A00D42573 /* loop_analysis.cpp */; }; 2BBA492B1254706A00D42573 /* loop_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BBA49221254706A00D42573 /* loop_analysis.h */; }; @@ -220,6 +235,15 @@ 2B38545A1293BE5000F3E692 /* opt_structure_splitting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opt_structure_splitting.cpp; path = ../opt_structure_splitting.cpp; sourceTree = SOURCE_ROOT; }; 2B38545B1293BE5000F3E692 /* opt_swizzle_swizzle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opt_swizzle_swizzle.cpp; path = ../opt_swizzle_swizzle.cpp; sourceTree = SOURCE_ROOT; }; 2B38545C1293BE5000F3E692 /* opt_tree_grafting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opt_tree_grafting.cpp; path = ../opt_tree_grafting.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6B8E15FA043D000DCBE1 /* link_uniforms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = link_uniforms.cpp; path = ../link_uniforms.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6B9515FA0468000DCBE1 /* link_uniform_initializers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = link_uniform_initializers.cpp; path = ../link_uniform_initializers.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6B9C15FA0494000DCBE1 /* lower_clip_distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_clip_distance.cpp; path = ../lower_clip_distance.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6B9D15FA0494000DCBE1 /* lower_discard_flow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_discard_flow.cpp; path = ../lower_discard_flow.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6B9E15FA0494000DCBE1 /* lower_output_reads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_output_reads.cpp; path = ../lower_output_reads.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6BA015FA0494000DCBE1 /* lower_ubo_reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_ubo_reference.cpp; path = ../lower_ubo_reference.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6BA115FA0494000DCBE1 /* opt_array_splitting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opt_array_splitting.cpp; path = ../opt_array_splitting.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6BD715FA08E1000DCBE1 /* ir_builder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ir_builder.cpp; path = ../ir_builder.cpp; sourceTree = SOURCE_ROOT; }; + 2B3A6BD815FA08E1000DCBE1 /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ir_builder.h; path = ../ir_builder.h; sourceTree = SOURCE_ROOT; }; 2B47D9FD1209C87B00937F2C /* hash_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash_table.c; path = ../../mesa/program/hash_table.c; sourceTree = SOURCE_ROOT; }; 2B47D9FE1209C87B00937F2C /* hash_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash_table.h; path = ../../mesa/program/hash_table.h; sourceTree = SOURCE_ROOT; }; 2B47D9FF1209C87B00937F2C /* symbol_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = symbol_table.c; path = ../../mesa/program/symbol_table.c; sourceTree = SOURCE_ROOT; }; @@ -237,6 +261,12 @@ 2B6A99F11223B1670059FBED /* glcpp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = glcpp.c; path = ../glcpp/glcpp.c; sourceTree = SOURCE_ROOT; }; 2B6A99F21223B1670059FBED /* glcpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glcpp.h; path = ../glcpp/glcpp.h; sourceTree = SOURCE_ROOT; }; 2B6A99F31223B1670059FBED /* pp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pp.c; path = ../glcpp/pp.c; sourceTree = SOURCE_ROOT; }; + 2B6AC7B5161EC99C0094FD86 /* prog_instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prog_instruction.h; path = ../../mesa/program/prog_instruction.h; sourceTree = SOURCE_ROOT; }; + 2B6AC7B6161EC99C0094FD86 /* prog_parameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prog_parameter.h; path = ../../mesa/program/prog_parameter.h; sourceTree = SOURCE_ROOT; }; + 2B6AC7B7161EC99C0094FD86 /* prog_statevars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prog_statevars.h; path = ../../mesa/program/prog_statevars.h; sourceTree = SOURCE_ROOT; }; + 2B6AC7BC161EC9D40094FD86 /* ir_uniform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ir_uniform.h; path = ../ir_uniform.h; sourceTree = SOURCE_ROOT; }; + 2B6AC8AC161ED9080094FD86 /* glminimal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glminimal.h; path = ../../mesa/main/glminimal.h; sourceTree = SOURCE_ROOT; }; + 2B92A05C15F9FF4700CFED4A /* builtin_variables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = builtin_variables.cpp; path = ../builtin_variables.cpp; sourceTree = SOURCE_ROOT; }; 2BA07FA91352E7BB00A1C074 /* ralloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ralloc.c; path = ../ralloc.c; sourceTree = SOURCE_ROOT; }; 2BA07FAA1352E7BB00A1C074 /* ralloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ralloc.h; path = ../ralloc.h; sourceTree = SOURCE_ROOT; }; 2BA080381352EB1A00A1C074 /* builtin_stubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = builtin_stubs.cpp; path = ../builtin_stubs.cpp; sourceTree = SOURCE_ROOT; }; @@ -249,7 +279,6 @@ 2BA55A551207FEA6002DC82D /* ast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ast.h; path = ../ast.h; sourceTree = SOURCE_ROOT; }; 2BA55A561207FEA6002DC82D /* builtin_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = builtin_function.cpp; path = ../builtin_function.cpp; sourceTree = SOURCE_ROOT; }; 2BA55A571207FEA6002DC82D /* builtin_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = builtin_types.h; path = ../builtin_types.h; sourceTree = SOURCE_ROOT; }; - 2BA55A581207FEA6002DC82D /* builtin_variables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = builtin_variables.h; path = ../builtin_variables.h; sourceTree = SOURCE_ROOT; }; 2BA55A591207FEA6002DC82D /* glsl_lexer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glsl_lexer.cpp; path = ../glsl_lexer.cpp; sourceTree = SOURCE_ROOT; }; 2BA55A5A1207FEA6002DC82D /* glsl_lexer.ll */ = {isa = PBXFileReference; explicitFileType = sourcecode.lex; fileEncoding = 4; name = glsl_lexer.ll; path = ../glsl_lexer.ll; sourceTree = SOURCE_ROOT; }; 2BA55A5B1207FEA6002DC82D /* glsl_optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glsl_optimizer.cpp; path = ../glsl_optimizer.cpp; sourceTree = SOURCE_ROOT; }; @@ -288,7 +317,6 @@ 2BA55A8C1207FEA6002DC82D /* ir_validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ir_validate.cpp; path = ../ir_validate.cpp; sourceTree = SOURCE_ROOT; }; 2BA55A8D1207FEA6002DC82D /* ir_variable_refcount.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ir_variable_refcount.cpp; path = ../ir_variable_refcount.cpp; sourceTree = SOURCE_ROOT; }; 2BA55A8E1207FEA6002DC82D /* ir_variable_refcount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ir_variable_refcount.h; path = ../ir_variable_refcount.h; sourceTree = SOURCE_ROOT; }; - 2BA55A8F1207FEA6002DC82D /* ir_variable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ir_variable.cpp; path = ../ir_variable.cpp; sourceTree = SOURCE_ROOT; }; 2BA55A921207FEA6002DC82D /* ir_visitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ir_visitor.h; path = ../ir_visitor.h; sourceTree = SOURCE_ROOT; }; 2BA55A931207FEA6002DC82D /* ir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ir.cpp; path = ../ir.cpp; sourceTree = SOURCE_ROOT; }; 2BA55A941207FEA6002DC82D /* ir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ir.h; path = ../ir.h; sourceTree = SOURCE_ROOT; }; @@ -302,7 +330,6 @@ 2BB2F5AA12B8F1580052C6B0 /* lower_discard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_discard.cpp; path = ../lower_discard.cpp; sourceTree = SOURCE_ROOT; }; 2BB2F5AB12B8F1580052C6B0 /* lower_instructions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_instructions.cpp; path = ../lower_instructions.cpp; sourceTree = SOURCE_ROOT; }; 2BB2F5AC12B8F1580052C6B0 /* lower_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lower_vector.cpp; path = ../lower_vector.cpp; sourceTree = SOURCE_ROOT; }; - 2BB2F5AD12B8F1580052C6B0 /* opt_discard_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opt_discard_simplification.cpp; path = ../opt_discard_simplification.cpp; sourceTree = SOURCE_ROOT; }; 2BB2F5AE12B8F1580052C6B0 /* strtod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = strtod.c; path = ../strtod.c; sourceTree = SOURCE_ROOT; }; 2BB2F5AF12B8F1580052C6B0 /* strtod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strtod.h; path = ../strtod.h; sourceTree = SOURCE_ROOT; }; 2BB7259B135094BE0057D8B5 /* compiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = compiler.h; path = ../../mesa/main/compiler.h; sourceTree = SOURCE_ROOT; }; @@ -310,15 +337,11 @@ 2BB7259D135094BE0057D8B5 /* context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = context.h; path = ../../mesa/main/context.h; sourceTree = SOURCE_ROOT; }; 2BB7259E135094BE0057D8B5 /* core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = core.h; path = ../../mesa/main/core.h; sourceTree = SOURCE_ROOT; }; 2BB7259F135094BE0057D8B5 /* dd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dd.h; path = ../../mesa/main/dd.h; sourceTree = SOURCE_ROOT; }; - 2BB725A0135094BE0057D8B5 /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extensions.h; path = ../../mesa/main/extensions.h; sourceTree = SOURCE_ROOT; }; 2BB725A1135094BE0057D8B5 /* glheader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glheader.h; path = ../../mesa/main/glheader.h; sourceTree = SOURCE_ROOT; }; 2BB725A2135094BE0057D8B5 /* imports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imports.h; path = ../../mesa/main/imports.h; sourceTree = SOURCE_ROOT; }; 2BB725A3135094BE0057D8B5 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../../mesa/main/macros.h; sourceTree = SOURCE_ROOT; }; - 2BB725A4135094BE0057D8B5 /* mfeatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mfeatures.h; path = ../../mesa/main/mfeatures.h; sourceTree = SOURCE_ROOT; }; 2BB725A5135094BE0057D8B5 /* mtypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mtypes.h; path = ../../mesa/main/mtypes.h; sourceTree = SOURCE_ROOT; }; - 2BB725A6135094BE0057D8B5 /* shaderobj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = shaderobj.h; path = ../../mesa/main/shaderobj.h; sourceTree = SOURCE_ROOT; }; 2BB725A7135094BE0057D8B5 /* simple_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = simple_list.h; path = ../../mesa/main/simple_list.h; sourceTree = SOURCE_ROOT; }; - 2BB725A8135094BE0057D8B5 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../../mesa/main/version.h; sourceTree = SOURCE_ROOT; }; 2BBA491F1254706A00D42573 /* glsl_symbol_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glsl_symbol_table.cpp; path = ../glsl_symbol_table.cpp; sourceTree = SOURCE_ROOT; }; 2BBA49211254706A00D42573 /* loop_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = loop_analysis.cpp; path = ../loop_analysis.cpp; sourceTree = SOURCE_ROOT; }; 2BBA49221254706A00D42573 /* loop_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = loop_analysis.h; path = ../loop_analysis.h; sourceTree = SOURCE_ROOT; }; @@ -380,6 +403,9 @@ 2B47D9FC1209C85400937F2C /* program */ = { isa = PBXGroup; children = ( + 2B6AC7B5161EC99C0094FD86 /* prog_instruction.h */, + 2B6AC7B6161EC99C0094FD86 /* prog_parameter.h */, + 2B6AC7B7161EC99C0094FD86 /* prog_statevars.h */, 2B47D9FD1209C87B00937F2C /* hash_table.c */, 2B47D9FE1209C87B00937F2C /* hash_table.h */, 2B47D9FF1209C87B00937F2C /* symbol_table.c */, @@ -406,11 +432,11 @@ 2BA55A501207FE41002DC82D /* glsl */ = { isa = PBXGroup; children = ( + 2B3A6BA115FA0494000DCBE1 /* opt_array_splitting.cpp */, 2BA0808A1352EBFB00A1C074 /* main.cpp */, 2BB2F5AA12B8F1580052C6B0 /* lower_discard.cpp */, 2BB2F5AB12B8F1580052C6B0 /* lower_instructions.cpp */, 2BB2F5AC12B8F1580052C6B0 /* lower_vector.cpp */, - 2BB2F5AD12B8F1580052C6B0 /* opt_discard_simplification.cpp */, 2BB2F5AE12B8F1580052C6B0 /* strtod.c */, 2BB2F5AF12B8F1580052C6B0 /* strtod.h */, 2B6A99EB1223B1460059FBED /* glcpp */, @@ -422,7 +448,7 @@ 2BA55A561207FEA6002DC82D /* builtin_function.cpp */, 2BA080381352EB1A00A1C074 /* builtin_stubs.cpp */, 2BA55A571207FEA6002DC82D /* builtin_types.h */, - 2BA55A581207FEA6002DC82D /* builtin_variables.h */, + 2B92A05C15F9FF4700CFED4A /* builtin_variables.cpp */, 2BA55A591207FEA6002DC82D /* glsl_lexer.cpp */, 2BA55A5A1207FEA6002DC82D /* glsl_lexer.ll */, 2BA55A5B1207FEA6002DC82D /* glsl_optimizer.cpp */, @@ -439,6 +465,8 @@ 2BA55A651207FEA6002DC82D /* hir_field_selection.cpp */, 2BA55A671207FEA6002DC82D /* ir_basic_block.cpp */, 2BA55A681207FEA6002DC82D /* ir_basic_block.h */, + 2B3A6BD715FA08E1000DCBE1 /* ir_builder.cpp */, + 2B3A6BD815FA08E1000DCBE1 /* ir_builder.h */, 2BA55A691207FEA6002DC82D /* ir_clone.cpp */, 2BA55A6A1207FEA6002DC82D /* ir_constant_expression.cpp */, 2BA55A711207FEA6002DC82D /* ir_expression_flattening.cpp */, @@ -460,16 +488,18 @@ 2BA55A861207FEA6002DC82D /* ir_reader.h */, 2B62490D12191339003F6EEE /* ir_rvalue_visitor.cpp */, 2B62490E12191339003F6EEE /* ir_rvalue_visitor.h */, + 2B6AC7BC161EC9D40094FD86 /* ir_uniform.h */, 2BA55A8A1207FEA6002DC82D /* ir_unused_structs.cpp */, 2BA55A8B1207FEA6002DC82D /* ir_unused_structs.h */, 2BA55A8C1207FEA6002DC82D /* ir_validate.cpp */, 2BA55A8D1207FEA6002DC82D /* ir_variable_refcount.cpp */, 2BA55A8E1207FEA6002DC82D /* ir_variable_refcount.h */, - 2BA55A8F1207FEA6002DC82D /* ir_variable.cpp */, 2BA55A921207FEA6002DC82D /* ir_visitor.h */, 2BA55A931207FEA6002DC82D /* ir.cpp */, 2BA55A941207FEA6002DC82D /* ir.h */, 2BA55A951207FEA6002DC82D /* link_functions.cpp */, + 2B3A6B8E15FA043D000DCBE1 /* link_uniforms.cpp */, + 2B3A6B9515FA0468000DCBE1 /* link_uniform_initializers.cpp */, 2BA55A961207FEA6002DC82D /* linker.cpp */, 2BA55A971207FEA6002DC82D /* linker.h */, 2BA55A981207FEA6002DC82D /* list.h */, @@ -477,10 +507,14 @@ 2BBA49221254706A00D42573 /* loop_analysis.h */, 2BBA49231254706A00D42573 /* loop_controls.cpp */, 2BBA49241254706A00D42573 /* loop_unroll.cpp */, + 2B3A6B9C15FA0494000DCBE1 /* lower_clip_distance.cpp */, + 2B3A6B9D15FA0494000DCBE1 /* lower_discard_flow.cpp */, 2B3854481293BE5000F3E692 /* lower_if_to_cond_assign.cpp */, 2B3854491293BE5000F3E692 /* lower_jumps.cpp */, 2B38544A1293BE5000F3E692 /* lower_mat_op_to_vec.cpp */, 2BBA49251254706A00D42573 /* lower_noise.cpp */, + 2B3A6B9E15FA0494000DCBE1 /* lower_output_reads.cpp */, + 2B3A6BA015FA0494000DCBE1 /* lower_ubo_reference.cpp */, 2BBA49261254706A00D42573 /* lower_variable_index_to_cond_assign.cpp */, 2B38544D1293BE5000F3E692 /* lower_vec_index_to_cond_assign.cpp */, 2B38544E1293BE5000F3E692 /* lower_vec_index_to_swizzle.cpp */, @@ -519,15 +553,12 @@ 2BB7259D135094BE0057D8B5 /* context.h */, 2BB7259E135094BE0057D8B5 /* core.h */, 2BB7259F135094BE0057D8B5 /* dd.h */, - 2BB725A0135094BE0057D8B5 /* extensions.h */, 2BB725A1135094BE0057D8B5 /* glheader.h */, + 2B6AC8AC161ED9080094FD86 /* glminimal.h */, 2BB725A2135094BE0057D8B5 /* imports.h */, 2BB725A3135094BE0057D8B5 /* macros.h */, - 2BB725A4135094BE0057D8B5 /* mfeatures.h */, 2BB725A5135094BE0057D8B5 /* mtypes.h */, - 2BB725A6135094BE0057D8B5 /* shaderobj.h */, 2BB725A7135094BE0057D8B5 /* simple_list.h */, - 2BB725A8135094BE0057D8B5 /* version.h */, ); name = mesa; sourceTree = ""; @@ -541,7 +572,6 @@ files = ( 2BA55AA01207FEA6002DC82D /* ast.h in Headers */, 2BA55AA21207FEA6002DC82D /* builtin_types.h in Headers */, - 2BA55AA31207FEA6002DC82D /* builtin_variables.h in Headers */, 2BA55AA71207FEA6002DC82D /* glsl_optimizer.h in Headers */, 2BA55AA91207FEA6002DC82D /* glsl_parser_extras.h in Headers */, 2BA55AAB1207FEA6002DC82D /* glsl_parser.h in Headers */, @@ -575,17 +605,19 @@ 2BB725AB135094BE0057D8B5 /* context.h in Headers */, 2BB725AC135094BE0057D8B5 /* core.h in Headers */, 2BB725AD135094BE0057D8B5 /* dd.h in Headers */, - 2BB725AE135094BE0057D8B5 /* extensions.h in Headers */, 2BB725AF135094BE0057D8B5 /* glheader.h in Headers */, 2BB725B0135094BE0057D8B5 /* imports.h in Headers */, 2BB725B1135094BE0057D8B5 /* macros.h in Headers */, - 2BB725B2135094BE0057D8B5 /* mfeatures.h in Headers */, 2BB725B3135094BE0057D8B5 /* mtypes.h in Headers */, - 2BB725B4135094BE0057D8B5 /* shaderobj.h in Headers */, 2BB725B5135094BE0057D8B5 /* simple_list.h in Headers */, - 2BB725B6135094BE0057D8B5 /* version.h in Headers */, 2BA07FAC1352E7BB00A1C074 /* ralloc.h in Headers */, 2B655A7A13E0324F00B5278F /* standalone_scaffolding.h in Headers */, + 2B3A6BDB15FA08E1000DCBE1 /* ir_builder.h in Headers */, + 2B6AC7B9161EC99C0094FD86 /* prog_instruction.h in Headers */, + 2B6AC7BA161EC99C0094FD86 /* prog_parameter.h in Headers */, + 2B6AC7BB161EC99C0094FD86 /* prog_statevars.h in Headers */, + 2B6AC7BD161EC9D40094FD86 /* ir_uniform.h in Headers */, + 2B6AC8AD161ED9080094FD86 /* glminimal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -696,7 +728,6 @@ 2BA080591352EBB900A1C074 /* ir_unused_structs.cpp in Sources */, 2BA0805A1352EBB900A1C074 /* ir_validate.cpp in Sources */, 2BA0805B1352EBB900A1C074 /* ir_variable_refcount.cpp in Sources */, - 2BA0805C1352EBB900A1C074 /* ir_variable.cpp in Sources */, 2BA0805D1352EBB900A1C074 /* ir.cpp in Sources */, 2BA0805E1352EBB900A1C074 /* link_functions.cpp in Sources */, 2BA0805F1352EBB900A1C074 /* linker.cpp in Sources */, @@ -736,7 +767,6 @@ 2BA080811352EBB900A1C074 /* lower_discard.cpp in Sources */, 2BA080821352EBB900A1C074 /* lower_instructions.cpp in Sources */, 2BA080831352EBB900A1C074 /* lower_vector.cpp in Sources */, - 2BA080841352EBB900A1C074 /* opt_discard_simplification.cpp in Sources */, 2BA080851352EBB900A1C074 /* strtod.c in Sources */, 2BA080861352EBB900A1C074 /* ralloc.c in Sources */, 2BA080871352EBD100A1C074 /* builtin_stubs.cpp in Sources */, @@ -744,6 +774,15 @@ 2BEC22EB1356E98500B5E301 /* opt_copy_propagation_elements.cpp in Sources */, 2B655A7213E0322E00B5278F /* ir_function_detect_recursion.cpp in Sources */, 2B655A7813E0324F00B5278F /* standalone_scaffolding.cpp in Sources */, + 2B92A05D15F9FF4700CFED4A /* builtin_variables.cpp in Sources */, + 2B3A6B8F15FA043D000DCBE1 /* link_uniforms.cpp in Sources */, + 2B3A6B9615FA0468000DCBE1 /* link_uniform_initializers.cpp in Sources */, + 2B3A6BA215FA0494000DCBE1 /* lower_clip_distance.cpp in Sources */, + 2B3A6BA315FA0494000DCBE1 /* lower_discard_flow.cpp in Sources */, + 2B3A6BA415FA0494000DCBE1 /* lower_output_reads.cpp in Sources */, + 2B3A6BA615FA0494000DCBE1 /* lower_ubo_reference.cpp in Sources */, + 2B3A6BA715FA0494000DCBE1 /* opt_array_splitting.cpp in Sources */, + 2B3A6BD915FA08E1000DCBE1 /* ir_builder.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -777,7 +816,6 @@ 2BA55AD51207FEA6002DC82D /* ir_unused_structs.cpp in Sources */, 2BA55AD71207FEA6002DC82D /* ir_validate.cpp in Sources */, 2BA55AD81207FEA6002DC82D /* ir_variable_refcount.cpp in Sources */, - 2BA55ADA1207FEA6002DC82D /* ir_variable.cpp in Sources */, 2BA55ADE1207FEA6002DC82D /* ir.cpp in Sources */, 2BA55AE01207FEA6002DC82D /* link_functions.cpp in Sources */, 2BA55AE11207FEA6002DC82D /* linker.cpp in Sources */, @@ -817,12 +855,20 @@ 2BB2F5B012B8F1580052C6B0 /* lower_discard.cpp in Sources */, 2BB2F5B112B8F1580052C6B0 /* lower_instructions.cpp in Sources */, 2BB2F5B212B8F1580052C6B0 /* lower_vector.cpp in Sources */, - 2BB2F5B312B8F1580052C6B0 /* opt_discard_simplification.cpp in Sources */, 2BB2F5B412B8F1580052C6B0 /* strtod.c in Sources */, 2BA07FAB1352E7BB00A1C074 /* ralloc.c in Sources */, 2BEC22EA1356E98300B5E301 /* opt_copy_propagation_elements.cpp in Sources */, 2B655A7313E0322E00B5278F /* ir_function_detect_recursion.cpp in Sources */, 2B655A7913E0324F00B5278F /* standalone_scaffolding.cpp in Sources */, + 2B92A05E15F9FF4700CFED4A /* builtin_variables.cpp in Sources */, + 2B3A6B9015FA043D000DCBE1 /* link_uniforms.cpp in Sources */, + 2B3A6B9715FA0468000DCBE1 /* link_uniform_initializers.cpp in Sources */, + 2B3A6BA815FA0494000DCBE1 /* lower_clip_distance.cpp in Sources */, + 2B3A6BA915FA0494000DCBE1 /* lower_discard_flow.cpp in Sources */, + 2B3A6BAA15FA0494000DCBE1 /* lower_output_reads.cpp in Sources */, + 2B3A6BAC15FA0494000DCBE1 /* lower_ubo_reference.cpp in Sources */, + 2B3A6BAD15FA0494000DCBE1 /* opt_array_splitting.cpp in Sources */, + 2B3A6BDA15FA08E1000DCBE1 /* ir_builder.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/3rdparty/glsl-optimizer/src/mapi/glapi/.gitignore b/3rdparty/glsl-optimizer/src/mapi/glapi/.gitignore deleted file mode 100644 index e706bc23c..000000000 --- a/3rdparty/glsl-optimizer/src/mapi/glapi/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -.cvsignore -glX_proto_common.pyo -glX_proto_common.pyc -typeexpr.pyo -typeexpr.pyc -license.pyo -license.pyc -gl_XML.pyo -gl_XML.pyc -glX_XML.pyo -glX_XML.pyc diff --git a/3rdparty/glsl-optimizer/src/mapi/glapi/glapi.h b/3rdparty/glsl-optimizer/src/mapi/glapi/glapi.h deleted file mode 100644 index 35dffd757..000000000 --- a/3rdparty/glsl-optimizer/src/mapi/glapi/glapi.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.1 - * - * Copyright (C) 1999-2008 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. - */ - - -/** - * \mainpage Mesa GL API Module - * - * \section GLAPIIntroduction Introduction - * - * The Mesa GL API module is responsible for dispatching all the - * gl*() functions. All GL functions are dispatched by jumping through - * the current dispatch table (basically a struct full of function - * pointers.) - * - * A per-thread current dispatch table and per-thread current context - * pointer are managed by this module too. - * - * This module is intended to be non-Mesa-specific so it can be used - * with the X/DRI libGL also. - */ - - -#ifndef _GLAPI_H -#define _GLAPI_H - - -#ifdef _GLAPI_NO_EXPORTS -# define _GLAPI_EXPORT -#else /* _GLAPI_NO_EXPORTS */ -# ifdef _WIN32 -# ifdef _GLAPI_DLL_EXPORTS -# define _GLAPI_EXPORT __declspec(dllexport) -# else -# define _GLAPI_EXPORT __declspec(dllimport) -# endif -# elif defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define _GLAPI_EXPORT __attribute__((visibility("default"))) -# else -# define _GLAPI_EXPORT -# endif -#endif /* _GLAPI_NO_EXPORTS */ - - -/* Is this needed? It is incomplete anyway. */ -#ifdef USE_MGL_NAMESPACE -#define _glapi_set_dispatch _mglapi_set_dispatch -#define _glapi_get_dispatch _mglapi_get_dispatch -#define _glapi_set_context _mglapi_set_context -#define _glapi_get_context _mglapi_get_context -#define _glapi_Dispatch _mglapi_Dispatch -#define _glapi_Context _mglapi_Context -#endif - -#include "glapi/glthread.h" - -typedef void (*_glapi_proc)(void); -struct _glapi_table; - - -#if defined (GLX_USE_TLS) - -_GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch - __attribute__((tls_model("initial-exec"))); - -_GLAPI_EXPORT extern __thread void * _glapi_tls_Context - __attribute__((tls_model("initial-exec"))); - -_GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch; -_GLAPI_EXPORT extern const void *_glapi_Context; - -# define GET_DISPATCH() _glapi_tls_Dispatch -# define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_tls_Context - -#else - -_GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch; -_GLAPI_EXPORT extern void *_glapi_Context; - -# ifdef THREADS - -# define GET_DISPATCH() \ - (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) - -# define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) \ - (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) - -# else - -# define GET_DISPATCH() _glapi_Dispatch -# define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_Context - -# endif - -#endif /* defined (GLX_USE_TLS) */ - - -void -_glapi_destroy_multithread(void); - - -_GLAPI_EXPORT void -_glapi_check_multithread(void); - - -_GLAPI_EXPORT void -_glapi_set_context(void *context); - - -_GLAPI_EXPORT void * -_glapi_get_context(void); - - -_GLAPI_EXPORT void -_glapi_set_dispatch(struct _glapi_table *dispatch); - - -_GLAPI_EXPORT struct _glapi_table * -_glapi_get_dispatch(void); - - -_GLAPI_EXPORT unsigned int -_glapi_get_dispatch_table_size(void); - - -_GLAPI_EXPORT int -_glapi_add_dispatch( const char * const * function_names, - const char * parameter_signature ); - -_GLAPI_EXPORT int -_glapi_get_proc_offset(const char *funcName); - - -_GLAPI_EXPORT _glapi_proc -_glapi_get_proc_address(const char *funcName); - - -_GLAPI_EXPORT const char * -_glapi_get_proc_name(unsigned int offset); - - -_GLAPI_EXPORT struct _glapi_table * -_glapi_create_table_from_handle(void *handle, const char *symbol_prefix); - - -_GLAPI_EXPORT unsigned long -_glthread_GetID(void); - - -/* - * These stubs are kept so that the old DRI drivers still load. - */ -_GLAPI_EXPORT void -_glapi_noop_enable_warnings(unsigned char enable); - - -_GLAPI_EXPORT void -_glapi_set_warning_func(_glapi_proc func); - - -#endif /* _GLAPI_H */ diff --git a/3rdparty/glsl-optimizer/src/mapi/glapi/glthread.h b/3rdparty/glsl-optimizer/src/mapi/glapi/glthread.h deleted file mode 100644 index fc4ece7c3..000000000 --- a/3rdparty/glsl-optimizer/src/mapi/glapi/glthread.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef GLTHREAD_H -#define GLTHREAD_H - -#include "mapi/u_thread.h" - -#define _glthread_DECLARE_STATIC_MUTEX(name) u_mutex_declare_static(name) -#define _glthread_INIT_MUTEX(name) u_mutex_init(name) -#define _glthread_DESTROY_MUTEX(name) u_mutex_destroy(name) -#define _glthread_LOCK_MUTEX(name) u_mutex_lock(name) -#define _glthread_UNLOCK_MUTEX(name) u_mutex_unlock(name) - -#define _glthread_InitTSD(tsd) u_tsd_init(tsd); -#define _glthread_DestroyTSD(tsd) u_tsd_destroy(tsd); -#define _glthread_GetTSD(tsd) u_tsd_get(tsd); -#define _glthread_SetTSD(tsd, ptr) u_tsd_set(tsd, ptr); - -typedef struct u_tsd _glthread_TSD; -typedef u_mutex _glthread_Mutex; - -#endif /* GLTHREAD_H */ diff --git a/3rdparty/glsl-optimizer/src/mapi/mapi/u_compiler.h b/3rdparty/glsl-optimizer/src/mapi/mapi/u_compiler.h deleted file mode 100644 index f1752d16f..000000000 --- a/3rdparty/glsl-optimizer/src/mapi/mapi/u_compiler.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef _U_COMPILER_H_ -#define _U_COMPILER_H_ - -/* Function inlining */ -#ifndef INLINE -# ifdef __cplusplus -# define INLINE inline -# elif defined(__GNUC__) -# define INLINE __inline__ -# elif defined(_MSC_VER) -# define INLINE __inline -# elif defined(__ICL) -# define INLINE __inline -# elif defined(__INTEL_COMPILER) -# define INLINE inline -# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) -# define INLINE __inline -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) -# define INLINE inline -# elif (__STDC_VERSION__ >= 199901L) /* C99 */ -# define INLINE inline -# else -# define INLINE -# endif -#endif - -/* Function visibility */ -#ifndef PUBLIC -# if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define PUBLIC __attribute__((visibility("default"))) -# elif defined(_MSC_VER) -# define PUBLIC __declspec(dllexport) -# else -# define PUBLIC -# endif -#endif - -#ifndef likely -# if defined(__GNUC__) -# define likely(x) __builtin_expect(!!(x), 1) -# define unlikely(x) __builtin_expect(!!(x), 0) -# else -# define likely(x) (x) -# define unlikely(x) (x) -# endif -#endif - -#endif /* _U_COMPILER_H_ */ diff --git a/3rdparty/glsl-optimizer/src/mapi/mapi/u_current.h b/3rdparty/glsl-optimizer/src/mapi/mapi/u_current.h deleted file mode 100644 index f9cffd8c3..000000000 --- a/3rdparty/glsl-optimizer/src/mapi/mapi/u_current.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef _U_CURRENT_H_ -#define _U_CURRENT_H_ - -#if defined(MAPI_MODE_UTIL) || defined(MAPI_MODE_GLAPI) || \ - defined(MAPI_MODE_BRIDGE) - -#include "glapi/glapi.h" - -/* ugly renames to match glapi.h */ -#define mapi_table _glapi_table - -#ifdef GLX_USE_TLS -#define u_current_table _glapi_tls_Dispatch -#define u_current_user _glapi_tls_Context -#else -#define u_current_table _glapi_Dispatch -#define u_current_user _glapi_Context -#endif - -#define u_current_get_internal _glapi_get_dispatch -#define u_current_get_user_internal _glapi_get_context - -#define u_current_table_tsd _gl_DispatchTSD - -#else /* MAPI_MODE_UTIL || MAPI_MODE_GLAPI || MAPI_MODE_BRIDGE */ - -#include "u_compiler.h" - -struct mapi_table; - -#ifdef GLX_USE_TLS - -extern __thread struct mapi_table *u_current_table - __attribute__((tls_model("initial-exec"))); - -extern __thread void *u_current_user - __attribute__((tls_model("initial-exec"))); - -#else /* GLX_USE_TLS */ - -extern struct mapi_table *u_current_table; -extern void *u_current_user; - -#endif /* GLX_USE_TLS */ - -#endif /* MAPI_MODE_UTIL || MAPI_MODE_GLAPI || MAPI_MODE_BRIDGE */ - -void -u_current_init(void); - -void -u_current_destroy(void); - -void -u_current_set(const struct mapi_table *tbl); - -struct mapi_table * -u_current_get_internal(void); - -void -u_current_set_user(const void *ptr); - -void * -u_current_get_user_internal(void); - -static INLINE const struct mapi_table * -u_current_get(void) -{ -#ifdef GLX_USE_TLS - return u_current_table; -#else - return (likely(u_current_table) ? - u_current_table : u_current_get_internal()); -#endif -} - -static INLINE const void * -u_current_get_user(void) -{ -#ifdef GLX_USE_TLS - return u_current_user; -#else - return likely(u_current_user) ? u_current_user : u_current_get_user_internal(); -#endif -} - -#endif /* _U_CURRENT_H_ */ diff --git a/3rdparty/glsl-optimizer/src/mapi/mapi/u_thread.h b/3rdparty/glsl-optimizer/src/mapi/mapi/u_thread.h deleted file mode 100644 index 1cc8be3fa..000000000 --- a/3rdparty/glsl-optimizer/src/mapi/mapi/u_thread.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 6.5.2 - * - * Copyright (C) 1999-2006 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. - */ - - -/* - * Thread support for gl dispatch. - * - * Initial version by John Stone (j.stone@acm.org) (johns@cs.umr.edu) - * and Christoph Poliwoda (poliwoda@volumegraphics.com) - * Revised by Keith Whitwell - * Adapted for new gl dispatcher by Brian Paul - * Modified for use in mapi by Chia-I Wu - */ - -/* - * If this file is accidentally included by a non-threaded build, - * it should not cause the build to fail, or otherwise cause problems. - * In general, it should only be included when needed however. - */ - -#ifndef _U_THREAD_H_ -#define _U_THREAD_H_ - -#include "u_compiler.h" - -#if defined(PTHREADS) || defined(WIN32) || defined(BEOS_THREADS) -#ifndef THREADS -#define THREADS -#endif -#endif - -/* - * POSIX threads. This should be your choice in the Unix world - * whenever possible. When building with POSIX threads, be sure - * to enable any compiler flags which will cause the MT-safe - * libc (if one exists) to be used when linking, as well as any - * header macros for MT-safe errno, etc. For Solaris, this is the -mt - * compiler flag. On Solaris with gcc, use -D_REENTRANT to enable - * proper compiling for MT-safe libc etc. - */ -#if defined(PTHREADS) -#include /* POSIX threads headers */ - -struct u_tsd { - pthread_key_t key; - int initMagic; -}; - -typedef pthread_mutex_t u_mutex; - -#define u_mutex_declare_static(name) \ - static u_mutex name = PTHREAD_MUTEX_INITIALIZER - -#define u_mutex_init(name) pthread_mutex_init(&(name), NULL) -#define u_mutex_destroy(name) pthread_mutex_destroy(&(name)) -#define u_mutex_lock(name) (void) pthread_mutex_lock(&(name)) -#define u_mutex_unlock(name) (void) pthread_mutex_unlock(&(name)) - -#endif /* PTHREADS */ - - -/* - * Windows threads. Should work with Windows NT and 95. - * IMPORTANT: Link with multithreaded runtime library when THREADS are - * used! - */ -#ifdef WIN32 -#include - -struct u_tsd { - DWORD key; - int initMagic; -}; - -typedef CRITICAL_SECTION u_mutex; - -/* http://locklessinc.com/articles/pthreads_on_windows/ */ -#define u_mutex_declare_static(name) \ - static u_mutex name = {(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0} - -#define u_mutex_init(name) InitializeCriticalSection(&name) -#define u_mutex_destroy(name) DeleteCriticalSection(&name) -#define u_mutex_lock(name) EnterCriticalSection(&name) -#define u_mutex_unlock(name) LeaveCriticalSection(&name) - -#endif /* WIN32 */ - - -/* - * BeOS threads. R5.x required. - */ -#ifdef BEOS_THREADS - -/* Problem with OS.h and this file on haiku */ -#ifndef __HAIKU__ -#include -#endif - -#include - -/* The only two typedefs required here - * this is cause of the OS.h problem - */ -#ifdef __HAIKU__ -typedef int32 thread_id; -typedef int32 sem_id; -#endif - -struct u_tsd { - int32 key; - int initMagic; -}; - -/* Use Benaphore, aka speeder semaphore */ -typedef struct { - int32 lock; - sem_id sem; -} benaphore; -typedef benaphore u_mutex; - -#define u_mutex_declare_static(name) \ - static u_mutex name = { 0, 0 } - -#define u_mutex_init(name) \ - name.sem = create_sem(0, #name"_benaphore"), \ - name.lock = 0 - -#define u_mutex_destroy(name) \ - delete_sem(name.sem), \ - name.lock = 0 - -#define u_mutex_lock(name) \ - if (name.sem == 0) \ - u_mutex_init(name); \ - if (atomic_add(&(name.lock), 1) >= 1) \ - acquire_sem(name.sem) - -#define u_mutex_unlock(name) \ - if (atomic_add(&(name.lock), -1) > 1) \ - release_sem(name.sem) - -#endif /* BEOS_THREADS */ - - -/* - * THREADS not defined - */ -#ifndef THREADS - -struct u_tsd { - int initMagic; -}; - -typedef unsigned u_mutex; - -#define u_mutex_declare_static(name) static u_mutex name = 0 -#define u_mutex_init(name) (void) name -#define u_mutex_destroy(name) (void) name -#define u_mutex_lock(name) (void) name -#define u_mutex_unlock(name) (void) name - -#endif /* THREADS */ - - -unsigned long -u_thread_self(void); - -void -u_tsd_init(struct u_tsd *tsd); - -void -u_tsd_destroy(struct u_tsd *tsd); /* WIN32 only */ - -void * -u_tsd_get(struct u_tsd *tsd); - -void -u_tsd_set(struct u_tsd *tsd, void *ptr); - -#endif /* _U_THREAD_H_ */ diff --git a/3rdparty/glsl-optimizer/src/mesa/.gitignore b/3rdparty/glsl-optimizer/src/mesa/.gitignore index ce83eaf47..5fc607b9e 100644 --- a/3rdparty/glsl-optimizer/src/mesa/.gitignore +++ b/3rdparty/glsl-optimizer/src/mesa/.gitignore @@ -1,5 +1 @@ -*/gen_matypes -*/matypes.h -depend.es* -depend.es* -objs-es* +/Makefile diff --git a/3rdparty/glsl-optimizer/src/mesa/main/.gitignore b/3rdparty/glsl-optimizer/src/mesa/main/.gitignore index 2575f44df..b26be227f 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/.gitignore +++ b/3rdparty/glsl-optimizer/src/mesa/main/.gitignore @@ -1,6 +1,10 @@ api_exec_es1.c -api_exec_es2.c +dispatch.h +enums.c get_es1.c get_es2.c git_sha1.h git_sha1.h.tmp +api_exec_es1_dispatch.h +api_exec_es1_remap_helper.h +remap_helper.h diff --git a/3rdparty/glsl-optimizer/src/mesa/main/compiler.h b/3rdparty/glsl-optimizer/src/mesa/main/compiler.h index 8ed1c6fa6..a8cddaf8f 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/compiler.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/compiler.h @@ -90,7 +90,7 @@ extern "C" { /** * Disable assorted warnings */ -#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP) +#if !defined(OPENSTEP) && (defined(_WIN32) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP) # if !defined(__GNUC__) /* mingw environment */ # pragma warning( disable : 4068 ) /* unknown pragma */ # pragma warning( disable : 4710 ) /* function 'foo' not inlined */ @@ -114,29 +114,30 @@ extern "C" { /** * Function inlining */ -#ifndef INLINE -# if defined(__GNUC__) -# define INLINE __inline__ -# elif defined(__MSC__) -# define INLINE __inline +#ifndef inline +# ifdef __cplusplus + /* C++ supports inline keyword */ +# elif defined(__GNUC__) +# define inline __inline__ # elif defined(_MSC_VER) -# define INLINE __inline +# define inline __inline # elif defined(__ICL) -# define INLINE __inline +# define inline __inline # elif defined(__INTEL_COMPILER) -# define INLINE inline + /* Intel compiler supports inline keyword */ # elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) -# define INLINE __inline +# define inline __inline # elif defined(__SUNPRO_C) && defined(__C99FEATURES__) -# define INLINE inline -# define __inline inline -# define __inline__ inline -# elif (__STDC_VERSION__ >= 199901L) /* C99 */ -# define INLINE inline + /* C99 supports inline keyword */ +# elif (__STDC_VERSION__ >= 199901L) + /* C99 supports inline keyword */ # else -# define INLINE +# define inline # endif #endif +#ifndef INLINE +# define INLINE inline +#endif /** @@ -149,7 +150,7 @@ extern "C" { * inline a static function that we later use in an alias. - ajax */ #ifndef PUBLIC -# if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# if (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) # define PUBLIC __attribute__((visibility("default"))) # define USED __attribute__((used)) # else @@ -159,17 +160,6 @@ extern "C" { #endif -/** - * Some compilers don't like some of Mesa's const usage. In those places use - * CONST instead of const. Pass -DNO_CONST to compilers where this matters. - */ -#ifdef NO_CONST -# define CONST -#else -# define CONST const -#endif - - /** * __builtin_expect macros */ @@ -240,6 +230,9 @@ static INLINE GLuint CPU_TO_LE32(GLuint x) ((x & 0x00ff0000) >> 8) | ((x & 0xff000000) >> 24)); } +#elif defined(__OpenBSD__) +#include +#define CPU_TO_LE32( x ) htole32( x ) #else /*__linux__ */ #include #define CPU_TO_LE32( x ) bswap32( x ) @@ -253,7 +246,7 @@ static INLINE GLuint CPU_TO_LE32(GLuint x) -#if !defined(CAPI) && defined(WIN32) && !defined(BUILD_FOR_SNAP) +#if !defined(CAPI) && defined(_WIN32) && !defined(BUILD_FOR_SNAP) #define CAPI _cdecl #endif @@ -263,7 +256,7 @@ static INLINE GLuint CPU_TO_LE32(GLuint x) * than GNU C */ #ifndef _ASMAPI -#if defined(WIN32) && !defined(BUILD_FOR_SNAP)/* was: !defined( __GNUC__ ) && !defined( VMS ) && !defined( __INTEL_COMPILER )*/ +#if defined(_WIN32) && !defined(BUILD_FOR_SNAP)/* was: !defined( __GNUC__ ) && !defined( VMS ) && !defined( __INTEL_COMPILER )*/ #define _ASMAPI __cdecl #else #define _ASMAPI @@ -284,12 +277,6 @@ static INLINE GLuint CPU_TO_LE32(GLuint x) #endif -/* This is a macro on IRIX */ -#ifdef _P -#undef _P -#endif - - /* Turn off macro checking systems used by other libraries */ #ifdef CHECK #undef CHECK @@ -309,6 +296,18 @@ static INLINE GLuint CPU_TO_LE32(GLuint x) #endif #endif + +/** + * Static (compile-time) assertion. + * Basically, use COND to dimension an array. If COND is false/zero the + * array size will be -1 and we'll get a compilation error. + */ +#define STATIC_ASSERT(COND) \ + do { \ + typedef int static_assertion_failed[(!!(COND))*2-1]; \ + } while (0) + + #if (__GNUC__ >= 3) #define PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a))) #else diff --git a/3rdparty/glsl-optimizer/src/mesa/main/config.h b/3rdparty/glsl-optimizer/src/mesa/main/config.h index fffb1a7d2..ead1d323c 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/config.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/config.h @@ -46,9 +46,6 @@ /** Maximum texture matrix stack depth */ #define MAX_TEXTURE_STACK_DEPTH 10 -/** Maximum color matrix stack depth */ -#define MAX_COLOR_STACK_DEPTH 4 - /** Maximum attribute stack depth */ #define MAX_ATTRIB_STACK_DEPTH 16 @@ -61,8 +58,11 @@ /** Maximum number of lights */ #define MAX_LIGHTS 8 -/** Maximum user-defined clipping planes */ -#define MAX_CLIP_PLANES 6 +/** + * Maximum number of user-defined clipping planes supported by any driver in + * Mesa. This is used to size arrays. + */ +#define MAX_CLIP_PLANES 8 /** Maximum pixel map lookup table size */ #define MAX_PIXEL_MAP_TABLE 256 @@ -71,11 +71,7 @@ #define MAX_AUX_BUFFERS 1 /** Maximum order (degree) of curves */ -#ifdef AMIGA -# define MAX_EVAL_ORDER 12 -#else -# define MAX_EVAL_ORDER 30 -#endif +#define MAX_EVAL_ORDER 30 /** Maximum Name stack depth */ #define MAX_NAME_STACK_DEPTH 64 @@ -112,7 +108,9 @@ /** Maximum rectangular texture size - GL_NV_texture_rectangle */ #define MAX_TEXTURE_RECT_SIZE 16384 -/** Maximum number of layers in a 1D or 2D array texture - GL_MESA_texture_array */ +/** + * Maximum number of layers in a 1D or 2D array texture - GL_MESA_texture_array + */ #define MAX_ARRAY_TEXTURE_LAYERS 64 /** @@ -138,34 +136,9 @@ #define MAX_TEXTURE_UNITS ((MAX_TEXTURE_COORD_UNITS > MAX_TEXTURE_IMAGE_UNITS) ? MAX_TEXTURE_COORD_UNITS : MAX_TEXTURE_IMAGE_UNITS) -/** - * Maximum viewport/image width. Must accomodate all texture sizes too. - */ - -#ifndef MAX_WIDTH -# define MAX_WIDTH 16384 -#endif -/** Maximum viewport/image height */ -#ifndef MAX_HEIGHT -# define MAX_HEIGHT 16384 -#endif - -/* XXX: hack to prevent stack overflow on windows until all temporary arrays - * [MAX_WIDTH] are allocated from the heap */ -#ifdef WIN32 -#undef MAX_TEXTURE_LEVELS -#undef MAX_3D_TEXTURE_LEVELS -#undef MAX_CUBE_TEXTURE_LEVELS -#undef MAX_TEXTURE_RECT_SIZE -#undef MAX_WIDTH -#undef MAX_HEIGHT -#define MAX_TEXTURE_LEVELS 13 -#define MAX_3D_TEXTURE_LEVELS 9 -#define MAX_CUBE_TEXTURE_LEVELS 13 -#define MAX_TEXTURE_RECT_SIZE 4096 -#define MAX_WIDTH 4096 -#define MAX_HEIGHT 4096 -#endif +/** Maximum viewport size */ +#define MAX_VIEWPORT_WIDTH 16384 +#define MAX_VIEWPORT_HEIGHT 16384 /** Maxmimum size for CVA. May be overridden by the drivers. */ #define MAX_ARRAY_LOCK_SIZE 3000 @@ -173,14 +146,6 @@ /** Subpixel precision for antialiasing, window coordinate snapping */ #define SUB_PIXEL_BITS 4 -/** Size of histogram tables */ -#define HISTOGRAM_TABLE_SIZE 256 - -/** Max convolution filter width */ -#define MAX_CONVOLUTION_WIDTH 9 -/** Max convolution filter height */ -#define MAX_CONVOLUTION_HEIGHT 9 - /** For GL_ARB_texture_compression */ #define MAX_COMPRESSED_TEXTURE_FORMATS 25 @@ -203,8 +168,8 @@ * per-program parameters. */ /*@{*/ -#define MAX_PROGRAM_LOCAL_PARAMS 1024 -#define MAX_UNIFORMS 1024 +#define MAX_PROGRAM_LOCAL_PARAMS 4096 +#define MAX_UNIFORMS 4096 /*@}*/ /** @@ -277,12 +242,14 @@ /** For GL_EXT_framebuffer_object */ /*@{*/ #define MAX_COLOR_ATTACHMENTS 8 +#define MAX_RENDERBUFFER_SIZE 16384 /*@}*/ /** For GL_ATI_envmap_bump - support bump mapping on first 8 units */ #define SUPPORTED_ATI_BUMP_UNITS 0xff /** For GL_EXT_transform_feedback */ +#define MAX_FEEDBACK_BUFFERS 4 #define MAX_FEEDBACK_ATTRIBS 32 /** For GL_ARB_geometry_shader4 */ @@ -295,45 +262,11 @@ #define MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 1024 /*@}*/ - -/** - * \name Mesa-specific parameters - */ +/** For GL_ARB_debug_output */ /*@{*/ - - -/** - * If non-zero use GLdouble for walking triangle edges, for better accuracy. - */ -#define TRIANGLE_WALK_DOUBLE 0 - - -/** - * Bits per depth buffer value (max is 32). - */ -#ifndef DEFAULT_SOFTWARE_DEPTH_BITS -#define DEFAULT_SOFTWARE_DEPTH_BITS 16 -#endif -/** Depth buffer data type */ -#if DEFAULT_SOFTWARE_DEPTH_BITS <= 16 -#define DEFAULT_SOFTWARE_DEPTH_TYPE GLushort -#else -#define DEFAULT_SOFTWARE_DEPTH_TYPE GLuint -#endif - - -/** - * Bits per stencil value: 8 - */ -#define STENCIL_BITS 8 - - -/** - * Bits per color channel: 8, 16 or 32 - */ -#ifndef CHAN_BITS -#define CHAN_BITS 8 -#endif +#define MAX_DEBUG_LOGGED_MESSAGES 10 +#define MAX_DEBUG_MESSAGE_LENGTH 4096 +/*@}*/ /* diff --git a/3rdparty/glsl-optimizer/src/mesa/main/context.h b/3rdparty/glsl-optimizer/src/mesa/main/context.h index a4c7ba2c5..ce7bd415c 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/context.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/context.h @@ -23,28 +23,6 @@ */ -/** - * \file context.h - * Mesa context and visual-related functions. - * - * There are three large Mesa data types/classes which are meant to be - * used by device drivers: - * - struct gl_context: this contains the Mesa rendering state - * - struct gl_config: this describes the color buffer (RGB vs. ci), whether - * or not there's a depth buffer, stencil buffer, etc. - * - struct gl_framebuffer: contains pointers to the depth buffer, stencil - * buffer, accum buffer and alpha buffers. - * - * These types should be encapsulated by corresponding device driver - * data types. See xmesa.h and xmesaP.h for an example. - * - * In OOP terms, struct gl_context, struct gl_config, and struct gl_framebuffer - * are base classes which the device driver must derive from. - * - * The following functions create and destroy these data types. - */ - - #ifndef CONTEXT_H #define CONTEXT_H @@ -53,237 +31,45 @@ #include "mtypes.h" -struct _glapi_table; +#ifdef __cplusplus +extern "C" { +#endif -/** \name Visual-related functions */ -/*@{*/ - -extern struct gl_config * -_mesa_create_visual( GLboolean dbFlag, - GLboolean stereoFlag, - GLint redBits, - GLint greenBits, - GLint blueBits, - GLint alphaBits, - GLint depthBits, - GLint stencilBits, - GLint accumRedBits, - GLint accumGreenBits, - GLint accumBlueBits, - GLint accumAlphaBits, - GLint numSamples ); - -extern GLboolean -_mesa_initialize_visual( struct gl_config *v, - GLboolean dbFlag, - GLboolean stereoFlag, - GLint redBits, - GLint greenBits, - GLint blueBits, - GLint alphaBits, - GLint depthBits, - GLint stencilBits, - GLint accumRedBits, - GLint accumGreenBits, - GLint accumBlueBits, - GLint accumAlphaBits, - GLint numSamples ); - -extern void -_mesa_destroy_visual( struct gl_config *vis ); - -/*@}*/ - - -/** \name Context-related functions */ -/*@{*/ - -extern GLboolean -_mesa_initialize_context( struct gl_context *ctx, - gl_api api, - const struct gl_config *visual, - struct gl_context *share_list, - const struct dd_function_table *driverFunctions, - void *driverContext ); - -extern struct gl_context * -_mesa_create_context(gl_api api, - const struct gl_config *visual, - struct gl_context *share_list, - const struct dd_function_table *driverFunctions, - void *driverContext); - -extern void -_mesa_free_context_data( struct gl_context *ctx ); - -extern void -_mesa_destroy_context( struct gl_context *ctx ); - - -extern void -_mesa_copy_context(const struct gl_context *src, struct gl_context *dst, GLuint mask); - - -extern void -_mesa_check_init_viewport(struct gl_context *ctx, GLuint width, GLuint height); - -extern GLboolean -_mesa_make_current( struct gl_context *ctx, struct gl_framebuffer *drawBuffer, - struct gl_framebuffer *readBuffer ); - -extern GLboolean -_mesa_share_state(struct gl_context *ctx, struct gl_context *ctxToShare); - -extern struct gl_context * -_mesa_get_current_context(void); - -/*@}*/ - -extern void -_mesa_init_get_hash(struct gl_context *ctx); - -extern void -_mesa_notifySwapBuffers(struct gl_context *gc); - - -extern struct _glapi_table * -_mesa_get_dispatch(struct gl_context *ctx); - - -void -_mesa_set_mvp_with_dp4( struct gl_context *ctx, - GLboolean flag ); - - -extern GLboolean -_mesa_valid_to_render(struct gl_context *ctx, const char *where); - - - -/** \name Miscellaneous */ -/*@{*/ - -extern void -_mesa_record_error( struct gl_context *ctx, GLenum error ); - - -extern void -_mesa_finish(struct gl_context *ctx); - -extern void -_mesa_flush(struct gl_context *ctx); - - -extern void GLAPIENTRY -_mesa_Finish( void ); - -extern void GLAPIENTRY -_mesa_Flush( void ); - -/*@}*/ - /** - * \name Macros for flushing buffered rendering commands before state changes, - * checking if inside glBegin/glEnd, etc. + * Checks if the context is for Desktop GL (Compatibility or Core) */ -/*@{*/ +static inline GLboolean +_mesa_is_desktop_gl(const struct gl_context *ctx) +{ + return ctx->API == API_OPENGL || ctx->API == API_OPENGL_CORE; +} + /** - * Flush vertices. - * - * \param ctx GL context. - * \param newstate new state. - * - * Checks if dd_function_table::NeedFlush is marked to flush stored vertices, - * and calls dd_function_table::FlushVertices if so. Marks - * __struct gl_contextRec::NewState with \p newstate. + * Checks if the context is for any GLES version */ -#define FLUSH_VERTICES(ctx, newstate) \ -do { \ - if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_VERTICES in %s\n", MESA_FUNCTION);\ - if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \ - ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \ - ctx->NewState |= newstate; \ -} while (0) +static inline GLboolean +_mesa_is_gles(const struct gl_context *ctx) +{ + return ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2; +} + /** - * Flush current state. - * - * \param ctx GL context. - * \param newstate new state. - * - * Checks if dd_function_table::NeedFlush is marked to flush current state, - * and calls dd_function_table::FlushVertices if so. Marks - * __struct gl_contextRec::NewState with \p newstate. + * Checks if the context is for GLES 3.x */ -#define FLUSH_CURRENT(ctx, newstate) \ -do { \ - if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_CURRENT in %s\n", MESA_FUNCTION); \ - if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ - ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ - ctx->NewState |= newstate; \ -} while (0) +static inline GLboolean +_mesa_is_gles3(const struct gl_context *ctx) +{ + return ctx->API == API_OPENGLES2 && ctx->Version >= 30; +} -/** - * Macro to assert that the API call was made outside the - * glBegin()/glEnd() pair, with return value. - * - * \param ctx GL context. - * \param retval value to return value in case the assertion fails. - */ -#define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \ -do { \ - if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ - _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ - return retval; \ - } \ -} while (0) - -/** - * Macro to assert that the API call was made outside the - * glBegin()/glEnd() pair. - * - * \param ctx GL context. - */ -#define ASSERT_OUTSIDE_BEGIN_END(ctx) \ -do { \ - if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ - _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ - return; \ - } \ -} while (0) - -/** - * Macro to assert that the API call was made outside the - * glBegin()/glEnd() pair and flush the vertices. - * - * \param ctx GL context. - */ -#define ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx) \ -do { \ - ASSERT_OUTSIDE_BEGIN_END(ctx); \ - FLUSH_VERTICES(ctx, 0); \ -} while (0) - -/** - * Macro to assert that the API call was made outside the - * glBegin()/glEnd() pair and flush the vertices, with return value. - * - * \param ctx GL context. - * \param retval value to return value in case the assertion fails. - */ -#define ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, retval) \ -do { \ - ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval); \ - FLUSH_VERTICES(ctx, 0); \ -} while (0) - -/*@}*/ +#ifdef __cplusplus +} +#endif #endif /* CONTEXT_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/core.h b/3rdparty/glsl-optimizer/src/mesa/main/core.h index 542d95b84..c28a8af53 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/core.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/core.h @@ -48,17 +48,8 @@ #include "main/mtypes.h" -#ifdef __cplusplus -extern "C" { -#endif - /* for GLSL */ #include "program/prog_parameter.h" -#include "program/prog_uniform.h" - -#ifdef __cplusplus -} -#endif #endif /* CORE_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/dd.h b/3rdparty/glsl-optimizer/src/mesa/main/dd.h index b5ed9a40c..8a2247837 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/dd.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/dd.h @@ -35,762 +35,12 @@ #include "glheader.h" -struct gl_buffer_object; struct gl_context; -struct gl_display_list; -struct gl_framebuffer; -struct gl_pixelstore_attrib; struct gl_program; -struct gl_renderbuffer; -struct gl_renderbuffer_attachment; struct gl_shader; -struct gl_shader_program; -struct gl_texture_image; -struct gl_texture_object; - -/* GL_ARB_vertex_buffer_object */ -/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return - * NULL) if buffer is unavailable for immediate mapping. - * - * Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it - * would require more book-keeping in the driver than seems necessary - * at this point. - * - * Does GL_MAP_INVALDIATE_BUFFER_BIT do this? Not really -- we don't - * want to provoke the driver to throw away the old storage, we will - * respect the contents of already referenced data. - */ -#define MESA_MAP_NOWAIT_BIT 0x0040 -/** - * Device driver function table. - * Core Mesa uses these function pointers to call into device drivers. - * Most of these functions directly correspond to OpenGL state commands. - * Core Mesa will call these functions after error checking has been done - * so that the drivers don't have to worry about error testing. - * - * Vertex transformation/clipping/lighting is patched into the T&L module. - * Rasterization functions are patched into the swrast module. - * - * Note: when new functions are added here, the drivers/common/driverfuncs.c - * file should be updated too!!! - */ struct dd_function_table { - /** - * Return a string as needed by glGetString(). - * Only the GL_RENDERER query must be implemented. Otherwise, NULL can be - * returned. - */ - const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name ); - - /** - * Notify the driver after Mesa has made some internal state changes. - * - * This is in addition to any state change callbacks Mesa may already have - * made. - */ - void (*UpdateState)( struct gl_context *ctx, GLbitfield new_state ); - - /** - * Get the width and height of the named buffer/window. - * - * Mesa uses this to determine when the driver's window size has changed. - * XXX OBSOLETE: this function will be removed in the future. - */ - void (*GetBufferSize)( struct gl_framebuffer *buffer, - GLuint *width, GLuint *height ); - - /** - * Resize the given framebuffer to the given size. - * XXX OBSOLETE: this function will be removed in the future. - */ - void (*ResizeBuffers)( struct gl_context *ctx, struct gl_framebuffer *fb, - GLuint width, GLuint height); - - /** - * Called whenever an error is generated. - * __struct gl_contextRec::ErrorValue contains the error value. - */ - void (*Error)( struct gl_context *ctx ); - - /** - * This is called whenever glFinish() is called. - */ - void (*Finish)( struct gl_context *ctx ); - - /** - * This is called whenever glFlush() is called. - */ - void (*Flush)( struct gl_context *ctx ); - - /** - * Clear the color/depth/stencil/accum buffer(s). - * \param buffers a bitmask of BUFFER_BIT_* flags indicating which - * renderbuffers need to be cleared. - */ - void (*Clear)( struct gl_context *ctx, GLbitfield buffers ); - - /** - * Execute glAccum command. - */ - void (*Accum)( struct gl_context *ctx, GLenum op, GLfloat value ); - - - /** - * Execute glRasterPos, updating the ctx->Current.Raster fields - */ - void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] ); - - /** - * \name Image-related functions - */ - /*@{*/ - - /** - * Called by glDrawPixels(). - * \p unpack describes how to unpack the source image data. - */ - void (*DrawPixels)( struct gl_context *ctx, - GLint x, GLint y, GLsizei width, GLsizei height, - GLenum format, GLenum type, - const struct gl_pixelstore_attrib *unpack, - const GLvoid *pixels ); - - /** - * Called by glReadPixels(). - */ - void (*ReadPixels)( struct gl_context *ctx, - GLint x, GLint y, GLsizei width, GLsizei height, - GLenum format, GLenum type, - const struct gl_pixelstore_attrib *unpack, - GLvoid *dest ); - - /** - * Called by glCopyPixels(). - */ - void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy, - GLsizei width, GLsizei height, - GLint dstx, GLint dsty, GLenum type ); - - /** - * Called by glBitmap(). - */ - void (*Bitmap)( struct gl_context *ctx, - GLint x, GLint y, GLsizei width, GLsizei height, - const struct gl_pixelstore_attrib *unpack, - const GLubyte *bitmap ); - /*@}*/ - - - /** - * \name Texture image functions - */ - /*@{*/ - - /** - * Choose actual hardware texture format given the user-provided source - * image format and type and the desired internal format. In some - * cases, srcFormat and srcType can be GL_NONE. - * Called by glTexImage(), etc. - */ - gl_format (*ChooseTextureFormat)( struct gl_context *ctx, GLint internalFormat, - GLenum srcFormat, GLenum srcType ); - - /** - * Called by glTexImage1D(). Simply copy the source texture data into the - * destination texture memory. The gl_texture_image fields, etc. will be - * fully initialized. - * The parameters are the same as glTexImage1D(), plus: - * \param packing describes how to unpack the source data. - * \param texObj is the target texture object. - * \param texImage is the target texture image. - */ - void (*TexImage1D)( struct gl_context *ctx, GLenum target, GLint level, - GLint internalFormat, - GLint width, GLint border, - GLenum format, GLenum type, const GLvoid *pixels, - const struct gl_pixelstore_attrib *packing, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glTexImage2D(). - * - * \sa dd_function_table::TexImage1D. - */ - void (*TexImage2D)( struct gl_context *ctx, GLenum target, GLint level, - GLint internalFormat, - GLint width, GLint height, GLint border, - GLenum format, GLenum type, const GLvoid *pixels, - const struct gl_pixelstore_attrib *packing, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glTexImage3D(). - * - * \sa dd_function_table::TexImage1D. - */ - void (*TexImage3D)( struct gl_context *ctx, GLenum target, GLint level, - GLint internalFormat, - GLint width, GLint height, GLint depth, GLint border, - GLenum format, GLenum type, const GLvoid *pixels, - const struct gl_pixelstore_attrib *packing, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glTexSubImage1D(). Replace a subset of the target texture - * with new texel data. - * \sa dd_function_table::TexImage1D. - */ - void (*TexSubImage1D)( struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLsizei width, - GLenum format, GLenum type, - const GLvoid *pixels, - const struct gl_pixelstore_attrib *packing, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glTexSubImage2D(). - * - * \sa dd_function_table::TexSubImage1D. - */ - void (*TexSubImage2D)( struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels, - const struct gl_pixelstore_attrib *packing, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glTexSubImage3D(). - * - * \sa dd_function_table::TexSubImage1D. - */ - void (*TexSubImage3D)( struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLint yoffset, GLint zoffset, - GLsizei width, GLsizei height, GLint depth, - GLenum format, GLenum type, - const GLvoid *pixels, - const struct gl_pixelstore_attrib *packing, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glGetTexImage(). - */ - void (*GetTexImage)( struct gl_context *ctx, GLenum target, GLint level, - GLenum format, GLenum type, GLvoid *pixels, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glCopyTexSubImage1D(). - * - * Drivers should use a fallback routine from texstore.c if needed. - */ - void (*CopyTexSubImage1D)( struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, - GLint x, GLint y, GLsizei width ); - /** - * Called by glCopyTexSubImage2D(). - * - * Drivers should use a fallback routine from texstore.c if needed. - */ - void (*CopyTexSubImage2D)( struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint x, GLint y, - GLsizei width, GLsizei height ); - /** - * Called by glCopyTexSubImage3D(). - * - * Drivers should use a fallback routine from texstore.c if needed. - */ - void (*CopyTexSubImage3D)( struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLint yoffset, GLint zoffset, - GLint x, GLint y, - GLsizei width, GLsizei height ); - - /** - * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled. - */ - void (*GenerateMipmap)(struct gl_context *ctx, GLenum target, - struct gl_texture_object *texObj); - - /** - * Called by glTexImage[123]D when user specifies a proxy texture - * target. - * - * \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails. - */ - GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target, - GLint level, GLint internalFormat, - GLenum format, GLenum type, - GLint width, GLint height, - GLint depth, GLint border); - /*@}*/ - - - /** - * \name Compressed texture functions - */ - /*@{*/ - - /** - * Called by glCompressedTexImage1D(). - * - * \param target user specified. - * \param format user specified. - * \param type user specified. - * \param pixels user specified. - * \param packing indicates the image packing of pixels. - * \param texObj is the target texture object. - * \param texImage is the target texture image. It will have the texture \p - * width, \p height, \p depth, \p border and \p internalFormat information. - * - * \a retainInternalCopy is returned by this function and indicates whether - * core Mesa should keep an internal copy of the texture image. - */ - void (*CompressedTexImage1D)( struct gl_context *ctx, GLenum target, - GLint level, GLint internalFormat, - GLsizei width, GLint border, - GLsizei imageSize, const GLvoid *data, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - /** - * Called by glCompressedTexImage2D(). - * - * \sa dd_function_table::CompressedTexImage1D. - */ - void (*CompressedTexImage2D)( struct gl_context *ctx, GLenum target, - GLint level, GLint internalFormat, - GLsizei width, GLsizei height, GLint border, - GLsizei imageSize, const GLvoid *data, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - /** - * Called by glCompressedTexImage3D(). - * - * \sa dd_function_table::CompressedTexImage3D. - */ - void (*CompressedTexImage3D)( struct gl_context *ctx, GLenum target, - GLint level, GLint internalFormat, - GLsizei width, GLsizei height, GLsizei depth, - GLint border, - GLsizei imageSize, const GLvoid *data, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage ); - - /** - * Called by glCompressedTexSubImage1D(). - * - * \param target user specified. - * \param level user specified. - * \param xoffset user specified. - * \param yoffset user specified. - * \param zoffset user specified. - * \param width user specified. - * \param height user specified. - * \param depth user specified. - * \param imageSize user specified. - * \param data user specified. - * \param texObj is the target texture object. - * \param texImage is the target texture image. It will have the texture \p - * width, \p height, \p depth, \p border and \p internalFormat information. - */ - void (*CompressedTexSubImage1D)(struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLsizei width, - GLenum format, - GLsizei imageSize, const GLvoid *data, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage); - /** - * Called by glCompressedTexSubImage2D(). - * - * \sa dd_function_table::CompressedTexImage3D. - */ - void (*CompressedTexSubImage2D)(struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLint height, - GLenum format, - GLsizei imageSize, const GLvoid *data, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage); - /** - * Called by glCompressedTexSubImage3D(). - * - * \sa dd_function_table::CompressedTexImage3D. - */ - void (*CompressedTexSubImage3D)(struct gl_context *ctx, GLenum target, GLint level, - GLint xoffset, GLint yoffset, GLint zoffset, - GLsizei width, GLint height, GLint depth, - GLenum format, - GLsizei imageSize, const GLvoid *data, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage); - - - /** - * Called by glGetCompressedTexImage. - */ - void (*GetCompressedTexImage)(struct gl_context *ctx, GLenum target, GLint level, - GLvoid *img, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage); - - /*@}*/ - - /** - * \name Texture object functions - */ - /*@{*/ - - /** - * Called by glBindTexture(). - */ - void (*BindTexture)( struct gl_context *ctx, GLenum target, - struct gl_texture_object *tObj ); - - /** - * Called to allocate a new texture object. - * A new gl_texture_object should be returned. The driver should - * attach to it any device-specific info it needs. - */ - struct gl_texture_object * (*NewTextureObject)( struct gl_context *ctx, GLuint name, - GLenum target ); - /** - * Called when a texture object is about to be deallocated. - * - * Driver should delete the gl_texture_object object and anything - * hanging off of it. - */ - void (*DeleteTexture)( struct gl_context *ctx, struct gl_texture_object *tObj ); - - /** - * Called to allocate a new texture image object. - */ - struct gl_texture_image * (*NewTextureImage)( struct gl_context *ctx ); - - /** - * Called to free tImage->Data. - */ - void (*FreeTexImageData)( struct gl_context *ctx, struct gl_texture_image *tImage ); - - /** Map texture image data into user space */ - void (*MapTexture)( struct gl_context *ctx, struct gl_texture_object *tObj ); - /** Unmap texture images from user space */ - void (*UnmapTexture)( struct gl_context *ctx, struct gl_texture_object *tObj ); - - /** - * Note: no context argument. This function doesn't initially look - * like it belongs here, except that the driver is the only entity - * that knows for sure how the texture memory is allocated - via - * the above callbacks. There is then an argument that the driver - * knows what memcpy paths might be fast. Typically this is invoked with - * - * to -- a pointer into texture memory allocated by NewTextureImage() above. - * from -- a pointer into client memory or a mesa temporary. - * sz -- nr bytes to copy. - */ - void* (*TextureMemCpy)( void *to, const void *from, size_t sz ); - - /** - * Called by glAreTextureResident(). - */ - GLboolean (*IsTextureResident)( struct gl_context *ctx, - struct gl_texture_object *t ); - - /** - * Called when the texture's color lookup table is changed. - * - * If \p tObj is NULL then the shared texture palette - * gl_texture_object::Palette is to be updated. - */ - void (*UpdateTexturePalette)( struct gl_context *ctx, - struct gl_texture_object *tObj ); - /*@}*/ - - - /** - * \name Imaging functionality - */ - /*@{*/ - void (*CopyColorTable)( struct gl_context *ctx, - GLenum target, GLenum internalformat, - GLint x, GLint y, GLsizei width ); - - void (*CopyColorSubTable)( struct gl_context *ctx, - GLenum target, GLsizei start, - GLint x, GLint y, GLsizei width ); - /*@}*/ - - - /** - * \name Vertex/fragment program functions - */ - /*@{*/ - /** Bind a vertex/fragment program */ - void (*BindProgram)(struct gl_context *ctx, GLenum target, struct gl_program *prog); - /** Allocate a new program */ - struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, GLuint id); - /** Delete a program */ - void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog); - /** - * Notify driver that a program string (and GPU code) has been specified - * or modified. Return GL_TRUE or GL_FALSE to indicate if the program is - * supported by the driver. - */ - GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target, - struct gl_program *prog); - - /** Query if program can be loaded onto hardware */ - GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target, - struct gl_program *prog); - - /*@}*/ - - /** - * \name GLSL shader/program functions. - */ - /*@{*/ - /** - * Called when a shader program is linked. - * - * This gives drivers an opportunity to clone the IR and make their - * own transformations on it for the purposes of code generation. - */ - GLboolean (*LinkShader)(struct gl_context *ctx, struct gl_shader_program *shader); - /*@}*/ - - /** - * \name State-changing functions. - * - * \note drawing functions are above. - * - * These functions are called by their corresponding OpenGL API functions. - * They are \e also called by the gl_PopAttrib() function!!! - * May add more functions like these to the device driver in the future. - */ - /*@{*/ - /** Specify the alpha test function */ - void (*AlphaFunc)(struct gl_context *ctx, GLenum func, GLfloat ref); - /** Set the blend color */ - void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]); - /** Set the blend equation */ - void (*BlendEquationSeparate)(struct gl_context *ctx, GLenum modeRGB, GLenum modeA); - void (*BlendEquationSeparatei)(struct gl_context *ctx, GLuint buffer, - GLenum modeRGB, GLenum modeA); - /** Specify pixel arithmetic */ - void (*BlendFuncSeparate)(struct gl_context *ctx, - GLenum sfactorRGB, GLenum dfactorRGB, - GLenum sfactorA, GLenum dfactorA); - void (*BlendFuncSeparatei)(struct gl_context *ctx, GLuint buffer, - GLenum sfactorRGB, GLenum dfactorRGB, - GLenum sfactorA, GLenum dfactorA); - /** Specify clear values for the color buffers */ - void (*ClearColor)(struct gl_context *ctx, const GLfloat color[4]); - /** Specify the clear value for the depth buffer */ - void (*ClearDepth)(struct gl_context *ctx, GLclampd d); - /** Specify the clear value for the stencil buffer */ - void (*ClearStencil)(struct gl_context *ctx, GLint s); - /** Specify a plane against which all geometry is clipped */ - void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *equation ); - /** Enable and disable writing of frame buffer color components */ - void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask, - GLboolean bmask, GLboolean amask ); - void (*ColorMaskIndexed)(struct gl_context *ctx, GLuint buf, GLboolean rmask, - GLboolean gmask, GLboolean bmask, GLboolean amask); - /** Cause a material color to track the current color */ - void (*ColorMaterial)(struct gl_context *ctx, GLenum face, GLenum mode); - /** Specify whether front- or back-facing facets can be culled */ - void (*CullFace)(struct gl_context *ctx, GLenum mode); - /** Define front- and back-facing polygons */ - void (*FrontFace)(struct gl_context *ctx, GLenum mode); - /** Specify the value used for depth buffer comparisons */ - void (*DepthFunc)(struct gl_context *ctx, GLenum func); - /** Enable or disable writing into the depth buffer */ - void (*DepthMask)(struct gl_context *ctx, GLboolean flag); - /** Specify mapping of depth values from NDC to window coordinates */ - void (*DepthRange)(struct gl_context *ctx, GLclampd nearval, GLclampd farval); - /** Specify the current buffer for writing */ - void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer ); - /** Specify the buffers for writing for fragment programs*/ - void (*DrawBuffers)( struct gl_context *ctx, GLsizei n, const GLenum *buffers ); - /** Enable or disable server-side gl capabilities */ - void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state); - /** Specify fog parameters */ - void (*Fogfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); - /** Specify implementation-specific hints */ - void (*Hint)(struct gl_context *ctx, GLenum target, GLenum mode); - /** Set light source parameters. - * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already - * been transformed to eye-space. - */ - void (*Lightfv)(struct gl_context *ctx, GLenum light, - GLenum pname, const GLfloat *params ); - /** Set the lighting model parameters */ - void (*LightModelfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); - /** Specify the line stipple pattern */ - void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern ); - /** Specify the width of rasterized lines */ - void (*LineWidth)(struct gl_context *ctx, GLfloat width); - /** Specify a logical pixel operation for color index rendering */ - void (*LogicOpcode)(struct gl_context *ctx, GLenum opcode); - void (*PointParameterfv)(struct gl_context *ctx, GLenum pname, - const GLfloat *params); - /** Specify the diameter of rasterized points */ - void (*PointSize)(struct gl_context *ctx, GLfloat size); - /** Select a polygon rasterization mode */ - void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode); - /** Set the scale and units used to calculate depth values */ - void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units); - /** Set the polygon stippling pattern */ - void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask ); - /* Specifies the current buffer for reading */ - void (*ReadBuffer)( struct gl_context *ctx, GLenum buffer ); - /** Set rasterization mode */ - void (*RenderMode)(struct gl_context *ctx, GLenum mode ); - /** Define the scissor box */ - void (*Scissor)(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h); - /** Select flat or smooth shading */ - void (*ShadeModel)(struct gl_context *ctx, GLenum mode); - /** OpenGL 2.0 two-sided StencilFunc */ - void (*StencilFuncSeparate)(struct gl_context *ctx, GLenum face, GLenum func, - GLint ref, GLuint mask); - /** OpenGL 2.0 two-sided StencilMask */ - void (*StencilMaskSeparate)(struct gl_context *ctx, GLenum face, GLuint mask); - /** OpenGL 2.0 two-sided StencilOp */ - void (*StencilOpSeparate)(struct gl_context *ctx, GLenum face, GLenum fail, - GLenum zfail, GLenum zpass); - /** Control the generation of texture coordinates */ - void (*TexGen)(struct gl_context *ctx, GLenum coord, GLenum pname, - const GLfloat *params); - /** Set texture environment parameters */ - void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname, - const GLfloat *param); - /** Set texture parameters */ - void (*TexParameter)(struct gl_context *ctx, GLenum target, - struct gl_texture_object *texObj, - GLenum pname, const GLfloat *params); - /** Set the viewport */ - void (*Viewport)(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h); - /*@}*/ - - - /** - * \name Vertex/pixel buffer object functions - */ - /*@{*/ - void (*BindBuffer)( struct gl_context *ctx, GLenum target, - struct gl_buffer_object *obj ); - - struct gl_buffer_object * (*NewBufferObject)( struct gl_context *ctx, GLuint buffer, - GLenum target ); - - void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj ); - - GLboolean (*BufferData)( struct gl_context *ctx, GLenum target, GLsizeiptrARB size, - const GLvoid *data, GLenum usage, - struct gl_buffer_object *obj ); - - void (*BufferSubData)( struct gl_context *ctx, GLenum target, GLintptrARB offset, - GLsizeiptrARB size, const GLvoid *data, - struct gl_buffer_object *obj ); - - void (*GetBufferSubData)( struct gl_context *ctx, GLenum target, - GLintptrARB offset, GLsizeiptrARB size, - GLvoid *data, struct gl_buffer_object *obj ); - - void * (*MapBuffer)( struct gl_context *ctx, GLenum target, GLenum access, - struct gl_buffer_object *obj ); - - void (*CopyBufferSubData)( struct gl_context *ctx, - struct gl_buffer_object *src, - struct gl_buffer_object *dst, - GLintptr readOffset, GLintptr writeOffset, - GLsizeiptr size ); - - /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access: - */ - void * (*MapBufferRange)( struct gl_context *ctx, GLenum target, GLintptr offset, - GLsizeiptr length, GLbitfield access, - struct gl_buffer_object *obj); - - void (*FlushMappedBufferRange)(struct gl_context *ctx, GLenum target, - GLintptr offset, GLsizeiptr length, - struct gl_buffer_object *obj); - - GLboolean (*UnmapBuffer)( struct gl_context *ctx, GLenum target, - struct gl_buffer_object *obj ); - /*@}*/ - - /** - * \name Functions for GL_APPLE_object_purgeable - */ - /*@{*/ - /* variations on ObjectPurgeable */ - GLenum (*BufferObjectPurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectPurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectPurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); - - /* variations on ObjectUnpurgeable */ - GLenum (*BufferObjectUnpurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectUnpurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectUnpurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); - /*@}*/ - - /** - * \name Functions for GL_EXT_framebuffer_{object,blit}. - */ - /*@{*/ - struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, GLuint name); - struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, GLuint name); - void (*BindFramebuffer)(struct gl_context *ctx, GLenum target, - struct gl_framebuffer *drawFb, - struct gl_framebuffer *readFb); - void (*FramebufferRenderbuffer)(struct gl_context *ctx, - struct gl_framebuffer *fb, - GLenum attachment, - struct gl_renderbuffer *rb); - void (*RenderTexture)(struct gl_context *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att); - void (*FinishRenderTexture)(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att); - void (*ValidateFramebuffer)(struct gl_context *ctx, - struct gl_framebuffer *fb); - /*@}*/ - void (*BlitFramebuffer)(struct gl_context *ctx, - GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, - GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter); - - /** - * \name Query objects - */ - /*@{*/ - struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id); - void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q); - void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q); - void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q); - void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q); - void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q); - /*@}*/ - - - /** - * \name Vertex Array objects - */ - /*@{*/ - struct gl_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id); - void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); - void (*BindArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); - /*@}*/ /** * \name GLSL-related functions (ARB extensions and OpenGL 2.x) @@ -798,363 +48,9 @@ struct dd_function_table { /*@{*/ struct gl_shader *(*NewShader)(struct gl_context *ctx, GLuint name, GLenum type); void (*DeleteShader)(struct gl_context *ctx, struct gl_shader *shader); - struct gl_shader_program *(*NewShaderProgram)(struct gl_context *ctx, GLuint name); - void (*DeleteShaderProgram)(struct gl_context *ctx, - struct gl_shader_program *shProg); - void (*UseProgram)(struct gl_context *ctx, struct gl_shader_program *shProg); /*@}*/ - - /** - * \name Support for multiple T&L engines - */ - /*@{*/ - - /** - * Bitmask of state changes that require the current T&L module to be - * validated, using ValidateTnlModule() below. - */ - GLuint NeedValidate; - - /** - * Validate the current T&L module. - * - * This is called directly after UpdateState() when a state change that has - * occurred matches the dd_function_table::NeedValidate bitmask above. This - * ensures all computed values are up to date, thus allowing the driver to - * decide if the current T&L module needs to be swapped out. - * - * This must be non-NULL if a driver installs a custom T&L module and sets - * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise. - */ - void (*ValidateTnlModule)( struct gl_context *ctx, GLuint new_state ); - - /** - * Set by the driver-supplied T&L engine. - * - * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). - */ - GLuint CurrentExecPrimitive; - - /** - * Current state of an in-progress compilation. - * - * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END, - * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above. - */ - GLuint CurrentSavePrimitive; - - -#define FLUSH_STORED_VERTICES 0x1 -#define FLUSH_UPDATE_CURRENT 0x2 - /** - * Set by the driver-supplied T&L engine whenever vertices are buffered - * between glBegin()/glEnd() objects or __struct gl_contextRec::Current is not - * updated. - * - * The dd_function_table::FlushVertices call below may be used to resolve - * these conditions. - */ - GLuint NeedFlush; - GLuint SaveNeedFlush; - - - /* Called prior to any of the GLvertexformat functions being - * called. Paired with Driver.FlushVertices(). - */ - void (*BeginVertices)( struct gl_context *ctx ); - - /** - * If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if - * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered - * vertices, if FLUSH_UPDATE_CURRENT bit is set updates - * __struct gl_contextRec::Current and gl_light_attrib::Material - * - * Note that the default T&L engine never clears the - * FLUSH_UPDATE_CURRENT bit, even after performing the update. - */ - void (*FlushVertices)( struct gl_context *ctx, GLuint flags ); - void (*SaveFlushVertices)( struct gl_context *ctx ); - - /** - * Give the driver the opportunity to hook in its own vtxfmt for - * compiling optimized display lists. This is called on each valid - * glBegin() during list compilation. - */ - GLboolean (*NotifySaveBegin)( struct gl_context *ctx, GLenum mode ); - - /** - * Notify driver that the special derived value _NeedEyeCoords has - * changed. - */ - void (*LightingSpaceChange)( struct gl_context *ctx ); - - /** - * Called by glNewList(). - * - * Let the T&L component know what is going on with display lists - * in time to make changes to dispatch tables, etc. - */ - void (*NewList)( struct gl_context *ctx, GLuint list, GLenum mode ); - /** - * Called by glEndList(). - * - * \sa dd_function_table::NewList. - */ - void (*EndList)( struct gl_context *ctx ); - - /** - * Called by glCallList(s). - * - * Notify the T&L component before and after calling a display list. - */ - void (*BeginCallList)( struct gl_context *ctx, - struct gl_display_list *dlist ); - /** - * Called by glEndCallList(). - * - * \sa dd_function_table::BeginCallList. - */ - void (*EndCallList)( struct gl_context *ctx ); - - - /** - * \name GL_ARB_sync interfaces - */ - /*@{*/ - struct gl_sync_object * (*NewSyncObject)(struct gl_context *, GLenum); - void (*FenceSync)(struct gl_context *, struct gl_sync_object *, GLenum, GLbitfield); - void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); - void (*CheckSync)(struct gl_context *, struct gl_sync_object *); - void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *, - GLbitfield, GLuint64); - void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *, - GLbitfield, GLuint64); - /*@}*/ - - /** GL_NV_conditional_render */ - void (*BeginConditionalRender)(struct gl_context *ctx, struct gl_query_object *q, - GLenum mode); - void (*EndConditionalRender)(struct gl_context *ctx, struct gl_query_object *q); - - /** - * \name GL_OES_draw_texture interface - */ - /*@{*/ - void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, - GLfloat width, GLfloat height); - /*@}*/ - - /** - * \name GL_OES_EGL_image interface - */ - void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target, - struct gl_texture_object *texObj, - struct gl_texture_image *texImage, - GLeglImageOES image_handle); - void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx, - struct gl_renderbuffer *rb, - void *image_handle); - - /** - * \name GL_EXT_transform_feedback interface - */ - struct gl_transform_feedback_object * - (*NewTransformFeedback)(struct gl_context *ctx, GLuint name); - void (*DeleteTransformFeedback)(struct gl_context *ctx, - struct gl_transform_feedback_object *obj); - void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode, - struct gl_transform_feedback_object *obj); - void (*EndTransformFeedback)(struct gl_context *ctx, - struct gl_transform_feedback_object *obj); - void (*PauseTransformFeedback)(struct gl_context *ctx, - struct gl_transform_feedback_object *obj); - void (*ResumeTransformFeedback)(struct gl_context *ctx, - struct gl_transform_feedback_object *obj); - void (*DrawTransformFeedback)(struct gl_context *ctx, GLenum mode, - struct gl_transform_feedback_object *obj); - - /** - * \name GL_NV_texture_barrier interface - */ - void (*TextureBarrier)(struct gl_context *ctx); - - /** - * \name GL_ARB_sampler_objects - */ - struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx, - GLuint name); - void (*DeleteSamplerObject)(struct gl_context *ctx, - struct gl_sampler_object *samp); }; -/** - * Transform/Clip/Lighting interface - * - * Drivers present a reduced set of the functions possible in - * glBegin()/glEnd() objects. Core mesa provides translation stubs for the - * remaining functions to map down to these entry points. - * - * These are the initial values to be installed into dispatch by - * mesa. If the T&L driver wants to modify the dispatch table - * while installed, it must do so itself. It would be possible for - * the vertexformat to install its own initial values for these - * functions, but this way there is an obvious list of what is - * expected of the driver. - * - * If the driver wants to hook in entry points other than those - * listed, it must restore them to their original values in - * the disable() callback, below. - */ -typedef struct { - /** - * \name Vertex - */ - /*@{*/ - void (GLAPIENTRYP ArrayElement)( GLint ); - void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP Color3fv)( const GLfloat * ); - void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP Color4fv)( const GLfloat * ); - void (GLAPIENTRYP EdgeFlag)( GLboolean ); - void (GLAPIENTRYP EvalCoord1f)( GLfloat ); - void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); - void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); - void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); - void (GLAPIENTRYP EvalPoint1)( GLint ); - void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); - void (GLAPIENTRYP FogCoordfEXT)( GLfloat ); - void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * ); - void (GLAPIENTRYP Indexf)( GLfloat ); - void (GLAPIENTRYP Indexfv)( const GLfloat * ); - void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); - void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat ); - void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * ); - void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat ); - void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * ); - void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * ); - void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * ); - void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP Normal3fv)( const GLfloat * ); - void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * ); - void (GLAPIENTRYP TexCoord1f)( GLfloat ); - void (GLAPIENTRYP TexCoord1fv)( const GLfloat * ); - void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat ); - void (GLAPIENTRYP TexCoord2fv)( const GLfloat * ); - void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP TexCoord3fv)( const GLfloat * ); - void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP TexCoord4fv)( const GLfloat * ); - void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat ); - void (GLAPIENTRYP Vertex2fv)( const GLfloat * ); - void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP Vertex3fv)( const GLfloat * ); - void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat ); - void (GLAPIENTRYP Vertex4fv)( const GLfloat * ); - void (GLAPIENTRYP CallList)( GLuint ); - void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); - void (GLAPIENTRYP Begin)( GLenum ); - void (GLAPIENTRYP End)( void ); - void (GLAPIENTRYP PrimitiveRestartNV)( void ); - /* GL_NV_vertex_program */ - void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x ); - void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v ); - void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ); - void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v ); - void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); - void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v ); - void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); - void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); - /* GL_ARB_vertex_program */ - void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x ); - void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v ); - void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ); - void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v ); - void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); - void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v ); - void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); - void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v ); - - /* GL_EXT_gpu_shader4 / GL 3.0 */ - void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x); - void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y); - void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z); - void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w); - void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v); - void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v); - void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v); - - void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x); - void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y); - void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z); - void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); - void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v); - void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v); - void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v); - - /*@}*/ - - void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat ); - - /** - * \name Array - */ - /*@{*/ - void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count ); - void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices ); - void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start, - GLuint end, GLsizei count, - GLenum type, const GLvoid *indices ); - void (GLAPIENTRYP MultiDrawElementsEXT)( GLenum mode, const GLsizei *count, - GLenum type, - const GLvoid **indices, - GLsizei primcount); - void (GLAPIENTRYP DrawElementsBaseVertex)( GLenum mode, GLsizei count, - GLenum type, - const GLvoid *indices, - GLint basevertex ); - void (GLAPIENTRYP DrawRangeElementsBaseVertex)( GLenum mode, GLuint start, - GLuint end, GLsizei count, - GLenum type, - const GLvoid *indices, - GLint basevertex); - void (GLAPIENTRYP MultiDrawElementsBaseVertex)( GLenum mode, - const GLsizei *count, - GLenum type, - const GLvoid **indices, - GLsizei primcount, - const GLint *basevertex); - void (GLAPIENTRYP DrawArraysInstanced)(GLenum mode, GLint first, - GLsizei count, GLsizei primcount); - void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count, - GLenum type, const GLvoid *indices, - GLsizei primcount); - void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, - GLenum type, const GLvoid *indices, - GLsizei primcount, GLint basevertex); - /*@}*/ - - /** - * \name Eval - * - * If you don't support eval, fallback to the default vertex format - * on receiving an eval call and use the pipeline mechanism to - * provide partial T&L acceleration. - * - * Mesa will provide a set of helper functions to do eval within - * accelerated vertex formats, eventually... - */ - /*@{*/ - void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 ); - void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); - /*@}*/ - -} GLvertexformat; - - #endif /* DD_INCLUDED */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/extensions.h b/3rdparty/glsl-optimizer/src/mesa/main/extensions.h deleted file mode 100644 index a9ed41f86..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/main/extensions.h +++ /dev/null @@ -1,96 +0,0 @@ -/** - * \file extensions.h - * Extension handling. - * - * \if subset - * (No-op) - * - * \endif - */ - -/* - * Mesa 3-D graphics library - * Version: 6.5.1 - * - * Copyright (C) 1999-2006 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. - */ - - -#ifndef _EXTENSIONS_H_ -#define _EXTENSIONS_H_ - -#include "glheader.h" -#include "mfeatures.h" - -struct gl_context; - -#if _HAVE_FULL_GL - -extern void _mesa_enable_sw_extensions(struct gl_context *ctx); - -extern void _mesa_enable_imaging_extensions(struct gl_context *ctx); - -extern void _mesa_enable_1_3_extensions(struct gl_context *ctx); - -extern void _mesa_enable_1_4_extensions(struct gl_context *ctx); - -extern void _mesa_enable_1_5_extensions(struct gl_context *ctx); - -extern void _mesa_enable_2_0_extensions(struct gl_context *ctx); - -extern void _mesa_enable_2_1_extensions(struct gl_context *ctx); - -extern void _mesa_enable_extension(struct gl_context *ctx, const char *name); - -extern void _mesa_disable_extension(struct gl_context *ctx, const char *name); - -extern GLboolean _mesa_extension_is_enabled(struct gl_context *ctx, const char *name); - -extern void _mesa_init_extensions(struct gl_context *ctx); - -extern GLubyte *_mesa_make_extension_string(struct gl_context *ctx); - -extern GLuint -_mesa_get_extension_count(struct gl_context *ctx); - -extern const GLubyte * -_mesa_get_enabled_extension(struct gl_context *ctx, GLuint index); - - -#else - -/** No-op */ -#define _mesa_extensions_dtr( ctx ) ((void)0) - -/** No-op */ -#define _mesa_extensions_ctr( ctx ) ((void)0) - -/** No-op */ -#define _mesa_extensions_get_string( ctx ) "GL_EXT_texture_object" - -/** No-op */ -#define _mesa_enable_imaging_extensions( c ) ((void)0) - -/** No-op */ -#define _mesa_enable_extension( c, n ) ((void)0) - -#endif - -#endif diff --git a/3rdparty/glsl-optimizer/src/mesa/main/formats.h b/3rdparty/glsl-optimizer/src/mesa/main/formats.h deleted file mode 100644 index 5b8c01781..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/main/formats.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.7 - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (c) 2008-2009 VMware, Inc. - * - * 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. - */ - -/* - * Authors: - * Brian Paul - */ - - -#ifndef FORMATS_H -#define FORMATS_H - - -#include - -/* OpenGL doesn't have GL_UNSIGNED_BYTE_4_4, so we must define our own type - * for GL_LUMINANCE4_ALPHA4. */ -#define MESA_UNSIGNED_BYTE_4_4 (GL_UNSIGNED_BYTE<<1) - - -/** - * Mesa texture/renderbuffer image formats. - */ -typedef enum -{ - MESA_FORMAT_NONE = 0, - - /** - * \name Basic hardware formats - */ - /*@{*/ - /* msb <------ TEXEL BITS -----------> lsb */ - /* ---- ---- ---- ---- ---- ---- ---- ---- */ - MESA_FORMAT_RGBA8888, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ - MESA_FORMAT_RGBA8888_REV, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_ARGB8888, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_ARGB8888_REV, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */ - MESA_FORMAT_XRGB8888, /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_XRGB8888_REV, /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */ - MESA_FORMAT_RGB888, /* RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_BGR888, /* BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_RGB565, /* RRRR RGGG GGGB BBBB */ - MESA_FORMAT_RGB565_REV, /* GGGB BBBB RRRR RGGG */ - MESA_FORMAT_ARGB4444, /* AAAA RRRR GGGG BBBB */ - MESA_FORMAT_ARGB4444_REV, /* GGGG BBBB AAAA RRRR */ - MESA_FORMAT_RGBA5551, /* RRRR RGGG GGBB BBBA */ - MESA_FORMAT_ARGB1555, /* ARRR RRGG GGGB BBBB */ - MESA_FORMAT_ARGB1555_REV, /* GGGB BBBB ARRR RRGG */ - MESA_FORMAT_AL44, /* AAAA LLLL */ - MESA_FORMAT_AL88, /* AAAA AAAA LLLL LLLL */ - MESA_FORMAT_AL88_REV, /* LLLL LLLL AAAA AAAA */ - MESA_FORMAT_AL1616, /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */ - MESA_FORMAT_AL1616_REV, /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */ - MESA_FORMAT_RGB332, /* RRRG GGBB */ - MESA_FORMAT_A8, /* AAAA AAAA */ - MESA_FORMAT_A16, /* AAAA AAAA AAAA AAAA */ - MESA_FORMAT_L8, /* LLLL LLLL */ - MESA_FORMAT_L16, /* LLLL LLLL LLLL LLLL */ - MESA_FORMAT_I8, /* IIII IIII */ - MESA_FORMAT_I16, /* IIII IIII IIII IIII */ - MESA_FORMAT_CI8, /* CCCC CCCC */ - MESA_FORMAT_YCBCR, /* YYYY YYYY UorV UorV */ - MESA_FORMAT_YCBCR_REV, /* UorV UorV YYYY YYYY */ - MESA_FORMAT_R8, /* RRRR RRRR */ - MESA_FORMAT_RG88, /* RRRR RRRR GGGG GGGG */ - MESA_FORMAT_RG88_REV, /* GGGG GGGG RRRR RRRR */ - MESA_FORMAT_R16, /* RRRR RRRR RRRR RRRR */ - MESA_FORMAT_RG1616, /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */ - MESA_FORMAT_RG1616_REV, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ - MESA_FORMAT_ARGB2101010, /* AARR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */ - MESA_FORMAT_Z24_S8, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */ - MESA_FORMAT_S8_Z24, /* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_Z16, /* ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_X8_Z24, /* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_Z24_X8, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */ - MESA_FORMAT_Z32, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_S8, /* SSSS SSSS */ - /*@}*/ - - /** - * \name 8-bit/channel sRGB formats - */ - /*@{*/ - MESA_FORMAT_SRGB8, - MESA_FORMAT_SRGBA8, - MESA_FORMAT_SARGB8, - MESA_FORMAT_SL8, - MESA_FORMAT_SLA8, - MESA_FORMAT_SRGB_DXT1, - MESA_FORMAT_SRGBA_DXT1, - MESA_FORMAT_SRGBA_DXT3, - MESA_FORMAT_SRGBA_DXT5, - /*@}*/ - - /** - * \name Compressed texture formats. - */ - /*@{*/ - MESA_FORMAT_RGB_FXT1, - MESA_FORMAT_RGBA_FXT1, - MESA_FORMAT_RGB_DXT1, - MESA_FORMAT_RGBA_DXT1, - MESA_FORMAT_RGBA_DXT3, - MESA_FORMAT_RGBA_DXT5, - /*@}*/ - - /** - * \name Floating point texture formats. - */ - /*@{*/ - MESA_FORMAT_RGBA_FLOAT32, - MESA_FORMAT_RGBA_FLOAT16, - MESA_FORMAT_RGB_FLOAT32, - MESA_FORMAT_RGB_FLOAT16, - MESA_FORMAT_ALPHA_FLOAT32, - MESA_FORMAT_ALPHA_FLOAT16, - MESA_FORMAT_LUMINANCE_FLOAT32, - MESA_FORMAT_LUMINANCE_FLOAT16, - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, - MESA_FORMAT_INTENSITY_FLOAT32, - MESA_FORMAT_INTENSITY_FLOAT16, - MESA_FORMAT_R_FLOAT32, - MESA_FORMAT_R_FLOAT16, - MESA_FORMAT_RG_FLOAT32, - MESA_FORMAT_RG_FLOAT16, - /*@}*/ - - /** - * \name Non-normalized signed integer formats. - * XXX Note: these are just stand-ins for some better hardware - * formats TBD such as BGRA or ARGB. - */ - MESA_FORMAT_RGBA_INT8, - MESA_FORMAT_RGBA_INT16, - MESA_FORMAT_RGBA_INT32, - - /** - * \name Non-normalized unsigned integer formats. - */ - MESA_FORMAT_RGBA_UINT8, - MESA_FORMAT_RGBA_UINT16, - MESA_FORMAT_RGBA_UINT32, - - /* msb <------ TEXEL BITS -----------> lsb */ - /* ---- ---- ---- ---- ---- ---- ---- ---- */ - /** - * \name Signed fixed point texture formats. - */ - /*@{*/ - MESA_FORMAT_DUDV8, /* DUDU DUDU DVDV DVDV */ - MESA_FORMAT_SIGNED_R8, /* RRRR RRRR */ - MESA_FORMAT_SIGNED_RG88_REV, /* GGGG GGGG RRRR RRRR */ - MESA_FORMAT_SIGNED_RGBX8888, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ - MESA_FORMAT_SIGNED_RGBA8888, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ - MESA_FORMAT_SIGNED_RGBA8888_REV,/*AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_SIGNED_R16, /* RRRR RRRR RRRR RRRR */ - MESA_FORMAT_SIGNED_GR1616, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ - MESA_FORMAT_SIGNED_RGB_16, /* ushort[0]=R, ushort[1]=G, ushort[2]=B */ - MESA_FORMAT_SIGNED_RGBA_16, /* ... */ - MESA_FORMAT_RGBA_16, /* ... */ - /*@}*/ - - /*@{*/ - MESA_FORMAT_RED_RGTC1, - MESA_FORMAT_SIGNED_RED_RGTC1, - MESA_FORMAT_RG_RGTC2, - MESA_FORMAT_SIGNED_RG_RGTC2, - /*@}*/ - - /*@{*/ - MESA_FORMAT_L_LATC1, - MESA_FORMAT_SIGNED_L_LATC1, - MESA_FORMAT_LA_LATC2, - MESA_FORMAT_SIGNED_LA_LATC2, - /*@}*/ - - MESA_FORMAT_SIGNED_A8, /* AAAA AAAA */ - MESA_FORMAT_SIGNED_L8, /* LLLL LLLL */ - MESA_FORMAT_SIGNED_AL88, /* AAAA AAAA LLLL LLLL */ - MESA_FORMAT_SIGNED_I8, /* IIII IIII */ - MESA_FORMAT_SIGNED_A16, /* AAAA AAAA AAAA AAAA */ - MESA_FORMAT_SIGNED_L16, /* LLLL LLLL LLLL LLLL */ - MESA_FORMAT_SIGNED_AL1616, /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */ - MESA_FORMAT_SIGNED_I16, /* IIII IIII IIII IIII */ - - MESA_FORMAT_RGB9_E5_FLOAT, - MESA_FORMAT_R11_G11_B10_FLOAT, - - MESA_FORMAT_Z32_FLOAT, - MESA_FORMAT_Z32_FLOAT_X24S8, - - MESA_FORMAT_COUNT -} gl_format; - - -extern const char * -_mesa_get_format_name(gl_format format); - -extern GLint -_mesa_get_format_bytes(gl_format format); - -extern GLint -_mesa_get_format_bits(gl_format format, GLenum pname); - -extern GLenum -_mesa_get_format_datatype(gl_format format); - -extern GLenum -_mesa_get_format_base_format(gl_format format); - -extern void -_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh); - -extern GLboolean -_mesa_is_format_compressed(gl_format format); - -extern GLboolean -_mesa_is_format_packed_depth_stencil(gl_format format); - -extern GLboolean -_mesa_is_format_integer_color(gl_format format); - -extern GLenum -_mesa_get_format_color_encoding(gl_format format); - -extern GLuint -_mesa_format_image_size(gl_format format, GLsizei width, - GLsizei height, GLsizei depth); - -extern uint64_t -_mesa_format_image_size64(gl_format format, GLsizei width, - GLsizei height, GLsizei depth); - -extern GLint -_mesa_format_row_stride(gl_format format, GLsizei width); - -extern void -_mesa_format_to_type_and_comps(gl_format format, - GLenum *datatype, GLuint *comps); - -extern void -_mesa_test_formats(void); - -extern gl_format -_mesa_get_srgb_format_linear(gl_format format); - -#endif /* FORMATS_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/glheader.h b/3rdparty/glsl-optimizer/src/mesa/main/glheader.h index 0df811986..37176d3af 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/glheader.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/glheader.h @@ -25,7 +25,7 @@ /** * \file glheader.h - * Wrapper for GL/gl.h and GL/glext.h + * Wrapper for GL/gl.h */ @@ -33,30 +33,95 @@ #define GLHEADER_H -#ifdef WGLAPI -#undef WGLAPI -#endif - - -#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP) -# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ -# define WGLAPI __declspec(dllexport) -# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ -# define WGLAPI __declspec(dllimport) -# else /* for use with static link lib build of Win32 edition only */ -# define WGLAPI __declspec(dllimport) -# endif /* _STATIC_MESA support */ -#endif /* WIN32 / CYGWIN bracket */ #define GL_GLEXT_PROTOTYPES -#include "GL/gl.h" -#include "GL/glext.h" +#include "glminimal.h" + + +// just the set of constants needed from glext.h +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_GEOMETRY_SHADER 0x8DD9 + +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 + +#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_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_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 + +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 + +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D + + +#ifdef __cplusplus +extern "C" { +#endif -/** - * GL_FIXED is defined in glext.h version 64 but these typedefs aren't (yet). - */ typedef int GLfixed; typedef int GLclampx; @@ -66,6 +131,14 @@ typedef void *GLeglImageOES; #endif +#ifndef GL_OES_EGL_image_external +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#endif + + #ifndef GL_OES_point_size_array #define GL_POINT_SIZE_ARRAY_OES 0x8B9C #define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A @@ -84,11 +157,6 @@ typedef void *GLeglImageOES; #define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 #endif -/* GLES 2.0 tokens */ -#ifndef GL_RGB565 -#define GL_RGB565 0x8D62 -#endif - #ifndef GL_TEXTURE_GEN_STR_OES #define GL_TEXTURE_GEN_STR_OES 0x8D60 #endif @@ -126,6 +194,17 @@ typedef void *GLeglImageOES; #define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 #endif +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_ETC1_RGB8_OES 0x8D64 +#endif + + +/* Inexplicably, GL_HALF_FLOAT_OES has a different value than GL_HALF_FLOAT. + */ +#ifndef GL_HALF_FLOAT_OES +#define GL_HALF_FLOAT_OES 0x8D61 +#endif + /** * Internal token to represent a GLSL shader program (a collection of @@ -143,25 +222,9 @@ typedef void *GLeglImageOES; */ #define MESA_GEOMETRY_PROGRAM 0x8c26 -/* Several fields of struct gl_config can take these as values. Since - * GLX header files may not be available everywhere they need to be used, - * redefine them here. - */ -#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_NON_CONFORMANT_CONFIG 0x800D -#define GLX_SWAP_EXCHANGE_OML 0x8061 -#define GLX_SWAP_COPY_OML 0x8062 -#define GLX_SWAP_UNDEFINED_OML 0x8063 -#define GLX_DONT_CARE 0xFFFFFFFF +#ifdef __cplusplus +} +#endif #endif /* GLHEADER_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/glminimal.h b/3rdparty/glsl-optimizer/src/mesa/main/glminimal.h new file mode 100644 index 000000000..3b3e02453 --- /dev/null +++ b/3rdparty/glsl-optimizer/src/mesa/main/glminimal.h @@ -0,0 +1,398 @@ +/* + * Mesa 3-D graphics library + * Version: 7.6 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. 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. + */ + +/* + Minimized version of gl.h with only things that the GLSL compiler needs. +*/ + +#ifndef __gl_minimal_h_ +#define __gl_minimal_h_ + + +/********************************************************************** + * Begin system-specific stuff. Do not do any of this when building + * for SciTech SNAP, as this is all done before this header file is + * included. + */ +#if !defined(__SCITECH_SNAP__) + +#if defined(__BEOS__) +#include /* to get some BeOS-isms */ +#endif + +#if !defined(OPENSTEP) && (defined(NeXT) || defined(NeXT_PDO)) +#define OPENSTEP +#endif + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__) +# define PRAGMA_EXPORT_SUPPORTED 1 +#endif + +#if defined(macintosh) && PRAGMA_IMPORT_SUPPORTED +#pragma import on +#endif + +#ifdef CENTERLINE_CLPP +#define signed +#endif + +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on +#endif + +#endif /* !__SCITECH_SNAP__ */ +/* + * End system-specific stuff. + **********************************************************************/ + + + + +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 + + +/* + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ + + + +/* + * Constants + */ + +/* Boolean values */ +#define GL_FALSE 0x0 +#define GL_TRUE 0x1 + +/* Data types */ +#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 + +/* Primitives */ +#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 + + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#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_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 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#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_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0x0 +#define GL_ONE 0x1 +#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 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0x0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_COLOR_INDEX 0x1900 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_DITHER 0x0BD0 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#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 + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#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_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#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_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0x0 +#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 + +/* glPush/PopAttrib bits */ +#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_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#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 + + +/* OpenGL 1.1 */ +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 + + +#endif /* __gl_h_ */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/imports.h b/3rdparty/glsl-optimizer/src/mesa/main/imports.h index 3fa1db02a..fec9f3052 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/imports.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/imports.h @@ -39,7 +39,6 @@ #include "compiler.h" #include "glheader.h" - #ifdef __cplusplus extern "C" { #endif @@ -96,26 +95,6 @@ typedef union { GLfloat f; GLint i; } fi_type; #define DEG2RAD (M_PI/180.0) -/*** - *** SQRTF: single-precision square root - ***/ -#if 0 /* _mesa_sqrtf() not accurate enough - temporarily disabled */ -# define SQRTF(X) _mesa_sqrtf(X) -#else -# define SQRTF(X) (float) sqrt((float) (X)) -#endif - - -/*** - *** INV_SQRTF: single-precision inverse square root - ***/ -#if 0 -#define INV_SQRTF(X) _mesa_inv_sqrt(X) -#else -#define INV_SQRTF(X) (1.0F / SQRTF(X)) /* this is faster on a P4 */ -#endif - - /** * \name Work-arounds for platforms that lack C99 math functions */ @@ -127,14 +106,20 @@ typedef union { GLfloat f; GLint i; } fi_type; #define asinf(f) ((float) asin(f)) #define atan2f(x,y) ((float) atan2(x,y)) #define atanf(f) ((float) atan(f)) -#define cielf(f) ((float) ciel(f)) +#define ceilf(f) ((float) ceil(f)) #define cosf(f) ((float) cos(f)) #define coshf(f) ((float) cosh(f)) #define expf(f) ((float) exp(f)) #define exp2f(f) ((float) exp2(f)) #define floorf(f) ((float) floor(f)) #define logf(f) ((float) log(f)) + +#ifdef ANDROID +#define log2f(f) (logf(f) * (float) (1.0 / M_LN2)) +#else #define log2f(f) ((float) log2(f)) +#endif + #define powf(x,y) ((float) pow(x,y)) #define sinf(f) ((float) sin(f)) #define sinhf(f) ((float) sinh(f)) @@ -147,62 +132,78 @@ typedef union { GLfloat f; GLint i; } fi_type; #endif #if defined(_MSC_VER) -static INLINE float truncf(float x) { return x < 0.0f ? ceilf(x) : floorf(x); } -static INLINE float exp2f(float x) { return powf(2.0f, x); } -static INLINE float log2f(float x) { return logf(x) * 1.442695041f; } -static INLINE float asinhf(float x) { return logf(x + sqrtf(x * x + 1.0f)); } -static INLINE float acoshf(float x) { return logf(x + sqrtf(x * x - 1.0f)); } -static INLINE float atanhf(float x) { return (logf(1.0f + x) - logf(1.0f - x)) / 2.0f; } -static INLINE int isblank(int ch) { return ch == ' ' || ch == '\t'; } +static inline float truncf(float x) { return x < 0.0f ? ceilf(x) : floorf(x); } +static inline float exp2f(float x) { return powf(2.0f, x); } +static inline float log2f(float x) { return logf(x) * 1.442695041f; } +static inline float asinhf(float x) { return logf(x + sqrtf(x * x + 1.0f)); } +static inline float acoshf(float x) { return logf(x + sqrtf(x * x - 1.0f)); } +static inline float atanhf(float x) { return (logf(1.0f + x) - logf(1.0f - x)) / 2.0f; } +static inline int isblank(int ch) { return ch == ' ' || ch == '\t'; } #define strtoll(p, e, b) _strtoi64(p, e, b) #endif /*@}*/ + +/* + * signbit() is a macro on Linux. Not available on Windows. + */ +#ifndef signbit +#define signbit(x) ((x) < 0.0f) +#endif + + +/** single-precision inverse square root */ +static inline float +INV_SQRTF(float x) +{ + /* XXX we could try Quake's fast inverse square root function here */ + return 1.0F / sqrtf(x); +} + + /*** *** LOG2: Log base 2 of float ***/ +static inline GLfloat LOG2(GLfloat x) +{ #ifdef USE_IEEE #if 0 -/* This is pretty fast, but not accurate enough (only 2 fractional bits). - * Based on code from http://www.stereopsis.com/log2.html - */ -static INLINE GLfloat LOG2(GLfloat x) -{ + /* This is pretty fast, but not accurate enough (only 2 fractional bits). + * Based on code from http://www.stereopsis.com/log2.html + */ const GLfloat y = x * x * x * x; const GLuint ix = *((GLuint *) &y); const GLuint exp = (ix >> 23) & 0xFF; const GLint log2 = ((GLint) exp) - 127; return (GLfloat) log2 * (1.0 / 4.0); /* 4, because of x^4 above */ -} #endif -/* Pretty fast, and accurate. - * Based on code from http://www.flipcode.com/totd/ - */ -static INLINE GLfloat LOG2(GLfloat val) -{ + /* Pretty fast, and accurate. + * Based on code from http://www.flipcode.com/totd/ + */ fi_type num; GLint log_2; - num.f = val; + num.f = x; log_2 = ((num.i >> 23) & 255) - 128; num.i &= ~(255 << 23); num.i += 127 << 23; num.f = ((-1.0f/3) * num.f + 2) * num.f - 2.0f/3; return num.f + log_2; -} #else -/* - * NOTE: log_base_2(x) = log(x) / log(2) - * NOTE: 1.442695 = 1/log(2). - */ -#define LOG2(x) ((GLfloat) (log(x) * 1.442695F)) + /* + * NOTE: log_base_2(x) = log(x) / log(2) + * NOTE: 1.442695 = 1/log(2). + */ + return (GLfloat) (log(x) * 1.442695F); #endif +} + /*** *** IS_INF_OR_NAN: test if float is infinite or NaN ***/ #ifdef USE_IEEE -static INLINE int IS_INF_OR_NAN( float x ) +static inline int IS_INF_OR_NAN( float x ) { fi_type tmp; tmp.f = x; @@ -221,35 +222,6 @@ static INLINE int IS_INF_OR_NAN( float x ) #endif -/*** - *** IS_NEGATIVE: test if float is negative - ***/ -#if defined(USE_IEEE) -static INLINE int GET_FLOAT_BITS( float x ) -{ - fi_type fi; - fi.f = x; - return fi.i; -} -#define IS_NEGATIVE(x) (GET_FLOAT_BITS(x) < 0) -#else -#define IS_NEGATIVE(x) (x < 0.0F) -#endif - - -/*** - *** DIFFERENT_SIGNS: test if two floats have opposite signs - ***/ -#if defined(USE_IEEE) -#define DIFFERENT_SIGNS(x,y) ((GET_FLOAT_BITS(x) ^ GET_FLOAT_BITS(y)) & (1<<31)) -#else -/* Could just use (x*y<0) except for the flatshading requirements. - * Maybe there's a better way? - */ -#define DIFFERENT_SIGNS(x,y) ((x) * (y) <= 0.0F && (x) - (y) != 0.0F) -#endif - - /*** *** CEILF: ceiling of float *** FLOORF: floor of float @@ -279,67 +251,60 @@ static INLINE int GET_FLOAT_BITS( float x ) #endif -/*** - *** IROUND: return (as an integer) float rounded to nearest integer - ***/ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) -static INLINE int iround(float f) +/** + * Convert float to int by rounding to nearest integer, away from zero. + */ +static inline int IROUND(float f) { + return (int) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F)); +} + + + +/** + * Convert positive float to int by rounding to nearest integer. + */ +static inline int IROUND_POS(float f) +{ + assert(f >= 0.0F); + return (int) (f + 0.5F); +} + + +/** + * Convert float to int using a fast method. The rounding mode may vary. + * XXX We could use an x86-64/SSE2 version here. + */ +static inline int F_TO_I(float f) +{ +#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) int r; __asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st"); return r; -} -#define IROUND(x) iround(x) #elif defined(USE_X86_ASM) && defined(_MSC_VER) -static INLINE int iround(float f) -{ int r; _asm { fld f fistp r } return r; +#else + return IROUND(f); +#endif } -#define IROUND(x) iround(x) -#elif defined(__WATCOMC__) && defined(__386__) -long iround(float f); -#pragma aux iround = \ - "push eax" \ - "fistp dword ptr [esp]" \ - "pop eax" \ - parm [8087] \ - value [eax] \ - modify exact [eax]; -#define IROUND(x) iround(x) -#else -#define IROUND(f) ((int) (((f) >= 0.0F) ? ((f) + 0.5F) : ((f) - 0.5F))) -#endif - -#define IROUND64(f) ((GLint64) (((f) >= 0.0F) ? ((f) + 0.5F) : ((f) - 0.5F))) - -/*** - *** IROUND_POS: return (as an integer) positive float rounded to nearest int - ***/ -#ifdef DEBUG -#define IROUND_POS(f) (assert((f) >= 0.0F), IROUND(f)) -#else -#define IROUND_POS(f) (IROUND(f)) -#endif -/*** - *** IFLOOR: return (as an integer) floor of float - ***/ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) -/* - * IEEE floor for computers that round to nearest or even. - * 'f' must be between -4194304 and 4194303. - * This floor operation is done by "(iround(f + .5) + iround(f - .5)) >> 1", - * but uses some IEEE specific tricks for better speed. - * Contributed by Josh Vanderhoof - */ -static INLINE int ifloor(float f) +/** Return (as an integer) floor of float */ +static inline int IFLOOR(float f) { +#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) + /* + * IEEE floor for computers that round to nearest or even. + * 'f' must be between -4194304 and 4194303. + * This floor operation is done by "(iround(f + .5) + iround(f - .5)) >> 1", + * but uses some IEEE specific tricks for better speed. + * Contributed by Josh Vanderhoof + */ int ai, bi; double af, bf; af = (3 << 22) + 0.5 + (double)f; @@ -348,45 +313,33 @@ static INLINE int ifloor(float f) __asm__ ("fstps %0" : "=m" (ai) : "t" (af) : "st"); __asm__ ("fstps %0" : "=m" (bi) : "t" (bf) : "st"); return (ai - bi) >> 1; -} -#define IFLOOR(x) ifloor(x) #elif defined(USE_IEEE) -static INLINE int ifloor(float f) -{ int ai, bi; double af, bf; fi_type u; - af = (3 << 22) + 0.5 + (double)f; bf = (3 << 22) + 0.5 - (double)f; u.f = (float) af; ai = u.i; u.f = (float) bf; bi = u.i; return (ai - bi) >> 1; -} -#define IFLOOR(x) ifloor(x) #else -static INLINE int ifloor(float f) -{ int i = IROUND(f); return (i > f) ? i - 1 : i; -} -#define IFLOOR(x) ifloor(x) #endif +} -/*** - *** ICEIL: return (as an integer) ceiling of float - ***/ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) -/* - * IEEE ceil for computers that round to nearest or even. - * 'f' must be between -4194304 and 4194303. - * This ceil operation is done by "(iround(f + .5) + iround(f - .5) + 1) >> 1", - * but uses some IEEE specific tricks for better speed. - * Contributed by Josh Vanderhoof - */ -static INLINE int iceil(float f) +/** Return (as an integer) ceiling of float */ +static inline int ICEIL(float f) { +#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) + /* + * IEEE ceil for computers that round to nearest or even. + * 'f' must be between -4194304 and 4194303. + * This ceil operation is done by "(iround(f + .5) + iround(f - .5) + 1) >> 1", + * but uses some IEEE specific tricks for better speed. + * Contributed by Josh Vanderhoof + */ int ai, bi; double af, bf; af = (3 << 22) + 0.5 + (double)f; @@ -395,11 +348,7 @@ static INLINE int iceil(float f) __asm__ ("fstps %0" : "=m" (ai) : "t" (af) : "st"); __asm__ ("fstps %0" : "=m" (bi) : "t" (bf) : "st"); return (ai - bi + 1) >> 1; -} -#define ICEIL(x) iceil(x) #elif defined(USE_IEEE) -static INLINE int iceil(float f) -{ int ai, bi; double af, bf; fi_type u; @@ -408,22 +357,17 @@ static INLINE int iceil(float f) u.f = (float) af; ai = u.i; u.f = (float) bf; bi = u.i; return (ai - bi + 1) >> 1; -} -#define ICEIL(x) iceil(x) #else -static INLINE int iceil(float f) -{ int i = IROUND(f); return (i < f) ? i + 1 : i; -} -#define ICEIL(x) iceil(x) #endif +} /** * Is x a power of two? */ -static INLINE int +static inline int _mesa_is_pow_two(int x) { return !(x & (x - 1)); @@ -443,11 +387,11 @@ _mesa_is_pow_two(int x) * results would be different depending on optimization * level used for build. */ -static INLINE int32_t +static inline int32_t _mesa_next_pow_two_32(uint32_t x) { #if defined(__GNUC__) && \ - ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4) + ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) /* gcc 3.4 or later */ uint32_t y = (x != 1); return (1 + y) << ((__builtin_clz(x - y) ^ 31) ); #else @@ -462,11 +406,11 @@ _mesa_next_pow_two_32(uint32_t x) #endif } -static INLINE int64_t +static inline int64_t _mesa_next_pow_two_64(uint64_t x) { #if defined(__GNUC__) && \ - ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4) + ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) /* gcc 3.4 or later */ uint64_t y = (x != 1); if (sizeof(x) == sizeof(long)) return (1 + y) << ((__builtin_clzl(x - y) ^ 63)); @@ -489,11 +433,11 @@ _mesa_next_pow_two_64(uint64_t x) /* * Returns the floor form of binary logarithm for a 32-bit integer. */ -static INLINE GLuint +static inline GLuint _mesa_logbase2(GLuint n) { #if defined(__GNUC__) && \ - ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4) + ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) /* gcc 3.4 or later */ return (31 - __builtin_clz(n | 1)); #else GLuint pos = 0; @@ -510,7 +454,7 @@ _mesa_logbase2(GLuint n) /** * Return 1 if this is a little endian machine, 0 if big endian. */ -static INLINE GLboolean +static inline GLboolean _mesa_little_endian(void) { const GLuint ui = 1; /* intentionally not static */ @@ -545,54 +489,57 @@ _mesa_exec_free( void *addr ); extern void * _mesa_realloc( void *oldBuffer, size_t oldSize, size_t newSize ); -extern void -_mesa_memset16( unsigned short *dst, unsigned short val, size_t n ); - -extern double -_mesa_sqrtd(double x); - -extern float -_mesa_sqrtf(float x); - -extern float -_mesa_inv_sqrtf(float x); - -extern void -_mesa_init_sqrt_table(void); +#ifndef FFS_DEFINED +#define FFS_DEFINED 1 #ifdef __GNUC__ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(ANDROID) || defined(__APPLE__) #define ffs __builtin_ffs #define ffsll __builtin_ffsll #endif -#define _mesa_ffs(i) ffs(i) -#define _mesa_ffsll(i) ffsll(i) +#else -#if ((_GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4) +extern int ffs(int i); +extern int ffsll(long long int i); + +#endif /*__ GNUC__ */ +#endif /* FFS_DEFINED */ + + +#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) /* gcc 3.4 or later */ #define _mesa_bitcount(i) __builtin_popcount(i) +#define _mesa_bitcount_64(i) __builtin_popcountll(i) #else extern unsigned int _mesa_bitcount(unsigned int n); -#endif - -#else -extern int -_mesa_ffs(int32_t i); - -extern int -_mesa_ffsll(int64_t i); - extern unsigned int -_mesa_bitcount(unsigned int n); +_mesa_bitcount_64(uint64_t n); #endif -extern GLhalfARB -_mesa_float_to_half(float f); +/** + * Find the last (most significant) bit set in a word. + * + * Essentially ffs() in the reverse direction. + */ +static inline unsigned int +_mesa_fls(unsigned int n) +{ +#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) + return n == 0 ? 0 : 32 - __builtin_clz(n); +#else + unsigned int v = 1; -extern float -_mesa_half_to_float(GLhalfARB h); + if (n == 0) + return 0; + + while (n >>= 1) + v++; + + return v; +#endif +} extern void * @@ -614,19 +561,8 @@ _mesa_str_checksum(const char *str); extern int _mesa_snprintf( char *str, size_t size, const char *fmt, ... ) PRINTFLIKE(3, 4); -struct gl_context; - -extern void -_mesa_warning( struct gl_context *gc, const char *fmtString, ... ) PRINTFLIKE(2, 3); - -extern void -_mesa_problem( const struct gl_context *ctx, const char *fmtString, ... ) PRINTFLIKE(2, 3); - -extern void -_mesa_error( struct gl_context *ctx, GLenum error, const char *fmtString, ... ) PRINTFLIKE(3, 4); - -extern void -_mesa_debug( const struct gl_context *ctx, const char *fmtString, ... ) PRINTFLIKE(2, 3); +extern int +_mesa_vsnprintf(char *str, size_t size, const char *fmt, va_list arg); #if defined(_MSC_VER) && !defined(snprintf) diff --git a/3rdparty/glsl-optimizer/src/mesa/main/macros.h b/3rdparty/glsl-optimizer/src/mesa/main/macros.h index 01e4d20af..a9aae4e7d 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/macros.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/macros.h @@ -54,6 +54,10 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; #define FLOAT_TO_BYTE(X) ( (((GLint) (255.0F * (X))) - 1) / 2 ) +/** Convert GLbyte to GLfloat while preserving zero */ +#define BYTE_TO_FLOATZ(B) ((B) == 0 ? 0.0F : BYTE_TO_FLOAT(B)) + + /** Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0], texture/fb data */ #define BYTE_TO_FLOAT_TEX(B) ((B) == -128 ? -1.0F : (B) * (1.0F/127.0F)) @@ -73,6 +77,9 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; /** Convert GLfloat in [-1.0,1.0] to GLshort in [-32768,32767] */ #define FLOAT_TO_SHORT(X) ( (((GLint) (65535.0F * (X))) - 1) / 2 ) +/** Convert GLshort to GLfloat while preserving zero */ +#define SHORT_TO_FLOATZ(S) ((S) == 0 ? 0.0F : SHORT_TO_FLOAT(S)) + /** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0], texture/fb data */ #define SHORT_TO_FLOAT_TEX(S) ((S) == -32768 ? -1.0F : (S) * (1.0F/32767.0F)) @@ -98,10 +105,6 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; /* a close approximation: */ #define FLOAT_TO_INT(X) ( (GLint) (2147483647.0 * (X)) ) -/** Convert GLfloat in [-1.0,1.0] to GLint64 in [-(1<<63),(1 << 63) -1] */ -#define FLOAT_TO_INT64(X) ( (GLint64) (9223372036854775807.0 * (double)(X)) ) - - /** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0], texture/fb data */ #define INT_TO_FLOAT_TEX(I) ((I) == -2147483648 ? -1.0F : (I) * (1.0F/2147483647.0)) @@ -122,12 +125,12 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; #define INT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 15))) #define UINT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 16))) #define UNCLAMPED_FLOAT_TO_USHORT(us, f) \ - us = ( (GLushort) IROUND( CLAMP((f), 0.0F, 1.0F) * 65535.0F) ) + us = ( (GLushort) F_TO_I( CLAMP((f), 0.0F, 1.0F) * 65535.0F) ) #define CLAMPED_FLOAT_TO_USHORT(us, f) \ - us = ( (GLushort) IROUND( (f) * 65535.0F) ) + us = ( (GLushort) F_TO_I( (f) * 65535.0F) ) #define UNCLAMPED_FLOAT_TO_SHORT(s, f) \ - s = ( (GLshort) IROUND( CLAMP((f), -1.0F, 1.0F) * 32767.0F) ) + s = ( (GLshort) F_TO_I( CLAMP((f), -1.0F, 1.0F) * 32767.0F) ) /*** *** UNCLAMPED_FLOAT_TO_UBYTE: clamp float to [0,1] and map to ubyte in [0,255] @@ -159,9 +162,9 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; } while (0) #else #define UNCLAMPED_FLOAT_TO_UBYTE(ub, f) \ - ub = ((GLubyte) IROUND(CLAMP((f), 0.0F, 1.0F) * 255.0F)) + ub = ((GLubyte) F_TO_I(CLAMP((f), 0.0F, 1.0F) * 255.0F)) #define CLAMPED_FLOAT_TO_UBYTE(ub, f) \ - ub = ((GLubyte) IROUND((f) * 255.0F)) + ub = ((GLubyte) F_TO_I((f) * 255.0F)) #endif /*@}*/ @@ -175,10 +178,6 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; #define STRIDE_4UB(p, i) (p = (GLubyte (*)[4])((GLubyte *)p + i)) /** Stepping a GLfloat[4] pointer by a byte stride */ #define STRIDE_4F(p, i) (p = (GLfloat (*)[4])((GLubyte *)p + i)) -/** Stepping a GLchan[4] pointer by a byte stride */ -#define STRIDE_4CHAN(p, i) (p = (GLchan (*)[4])((GLubyte *)p + i)) -/** Stepping a GLchan pointer by a byte stride */ -#define STRIDE_CHAN(p, i) (p = (GLchan *)((GLubyte *)p + i)) /** Stepping a \p t pointer by a byte stride */ #define STRIDE_T(p, t, i) (p = (t)((GLubyte *)p + i)) @@ -197,11 +196,16 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; (a)[3] == (b)[3]) /** Test for equality (unsigned bytes) */ +static inline GLboolean +TEST_EQ_4UBV(const GLubyte a[4], const GLubyte b[4]) +{ #if defined(__i386__) -#define TEST_EQ_4UBV(DST, SRC) *((GLuint*)(DST)) == *((GLuint*)(SRC)) + return *((const GLuint *) a) == *((const GLuint *) b); #else -#define TEST_EQ_4UBV(DST, SRC) TEST_EQ_4V(DST, SRC) + return TEST_EQ_4V(a, b); #endif +} + /** Copy a 4-element vector */ #define COPY_4V( DST, SRC ) \ @@ -212,40 +216,25 @@ do { \ (DST)[3] = (SRC)[3]; \ } while (0) -/** Copy a 4-element vector with cast */ -#define COPY_4V_CAST( DST, SRC, CAST ) \ -do { \ - (DST)[0] = (CAST)(SRC)[0]; \ - (DST)[1] = (CAST)(SRC)[1]; \ - (DST)[2] = (CAST)(SRC)[2]; \ - (DST)[3] = (CAST)(SRC)[3]; \ -} while (0) - /** Copy a 4-element unsigned byte vector */ +static inline void +COPY_4UBV(GLubyte dst[4], const GLubyte src[4]) +{ #if defined(__i386__) -#define COPY_4UBV(DST, SRC) \ -do { \ - *((GLuint*)(DST)) = *((GLuint*)(SRC)); \ -} while (0) + *((GLuint *) dst) = *((GLuint *) src); #else -/* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */ -#define COPY_4UBV(DST, SRC) \ -do { \ - (DST)[0] = (SRC)[0]; \ - (DST)[1] = (SRC)[1]; \ - (DST)[2] = (SRC)[2]; \ - (DST)[3] = (SRC)[3]; \ -} while (0) + /* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */ + COPY_4V(dst, src); #endif +} -/** - * Copy a 4-element float vector - * memcpy seems to be most efficient - */ -#define COPY_4FV( DST, SRC ) \ -do { \ - memcpy(DST, SRC, sizeof(GLfloat) * 4); \ -} while (0) +/** Copy a 4-element float vector */ +static inline void +COPY_4FV(GLfloat dst[4], const GLfloat src[4]) +{ + /* memcpy seems to be most efficient */ + memcpy(dst, src, sizeof(GLfloat) * 4); +} /** Copy \p SZ elements into a 4-element vector */ #define COPY_SZ_4V(DST, SZ, SRC) \ @@ -581,80 +570,31 @@ do { \ /*@}*/ -/** \name Linear interpolation macros */ +/** \name Linear interpolation functions */ /*@{*/ -/** - * Linear interpolation - * - * \note \p OUT argument is evaluated twice! - * \note Be wary of using *coord++ as an argument to any of these macros! - */ -#define LINTERP(T, OUT, IN) ((OUT) + (T) * ((IN) - (OUT))) +static inline GLfloat +LINTERP(GLfloat t, GLfloat out, GLfloat in) +{ + return out + t * (in - out); +} -/* Can do better with integer math - */ -#define INTERP_UB( t, dstub, outub, inub ) \ -do { \ - GLfloat inf = UBYTE_TO_FLOAT( inub ); \ - GLfloat outf = UBYTE_TO_FLOAT( outub ); \ - GLfloat dstf = LINTERP( t, outf, inf ); \ - UNCLAMPED_FLOAT_TO_UBYTE( dstub, dstf ); \ -} while (0) +static inline void +INTERP_3F(GLfloat t, GLfloat dst[3], const GLfloat out[3], const GLfloat in[3]) +{ + dst[0] = LINTERP( t, out[0], in[0] ); + dst[1] = LINTERP( t, out[1], in[1] ); + dst[2] = LINTERP( t, out[2], in[2] ); +} -#define INTERP_CHAN( t, dstc, outc, inc ) \ -do { \ - GLfloat inf = CHAN_TO_FLOAT( inc ); \ - GLfloat outf = CHAN_TO_FLOAT( outc ); \ - GLfloat dstf = LINTERP( t, outf, inf ); \ - UNCLAMPED_FLOAT_TO_CHAN( dstc, dstf ); \ -} while (0) - -#define INTERP_UI( t, dstui, outui, inui ) \ - dstui = (GLuint) (GLint) LINTERP( (t), (GLfloat) (outui), (GLfloat) (inui) ) - -#define INTERP_F( t, dstf, outf, inf ) \ - dstf = LINTERP( t, outf, inf ) - -#define INTERP_4F( t, dst, out, in ) \ -do { \ - dst[0] = LINTERP( (t), (out)[0], (in)[0] ); \ - dst[1] = LINTERP( (t), (out)[1], (in)[1] ); \ - dst[2] = LINTERP( (t), (out)[2], (in)[2] ); \ - dst[3] = LINTERP( (t), (out)[3], (in)[3] ); \ -} while (0) - -#define INTERP_3F( t, dst, out, in ) \ -do { \ - dst[0] = LINTERP( (t), (out)[0], (in)[0] ); \ - dst[1] = LINTERP( (t), (out)[1], (in)[1] ); \ - dst[2] = LINTERP( (t), (out)[2], (in)[2] ); \ -} while (0) - -#define INTERP_4CHAN( t, dst, out, in ) \ -do { \ - INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] ); \ - INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] ); \ - INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] ); \ - INTERP_CHAN( (t), (dst)[3], (out)[3], (in)[3] ); \ -} while (0) - -#define INTERP_3CHAN( t, dst, out, in ) \ -do { \ - INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] ); \ - INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] ); \ - INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] ); \ -} while (0) - -#define INTERP_SZ( t, vec, to, out, in, sz ) \ -do { \ - switch (sz) { \ - case 4: vec[to][3] = LINTERP( (t), (vec)[out][3], (vec)[in][3] ); \ - case 3: vec[to][2] = LINTERP( (t), (vec)[out][2], (vec)[in][2] ); \ - case 2: vec[to][1] = LINTERP( (t), (vec)[out][1], (vec)[in][1] ); \ - case 1: vec[to][0] = LINTERP( (t), (vec)[out][0], (vec)[in][0] ); \ - } \ -} while(0) +static inline void +INTERP_4F(GLfloat t, GLfloat dst[4], const GLfloat out[4], const GLfloat in[4]) +{ + dst[0] = LINTERP( t, out[0], in[0] ); + dst[1] = LINTERP( t, out[1], in[1] ); + dst[2] = LINTERP( t, out[2], in[2] ); + dst[3] = LINTERP( t, out[3], in[3] ); +} /*@}*/ @@ -673,46 +613,95 @@ do { \ #define MIN3( A, B, C ) ((A) < (B) ? MIN2(A, C) : MIN2(B, C)) #define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C)) -/** Dot product of two 2-element vectors */ -#define DOT2( a, b ) ( (a)[0]*(b)[0] + (a)[1]*(b)[1] ) - -/** Dot product of two 3-element vectors */ -#define DOT3( a, b ) ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] ) - -/** Dot product of two 4-element vectors */ -#define DOT4( a, b ) ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + \ - (a)[2]*(b)[2] + (a)[3]*(b)[3] ) - -/** Dot product of two 4-element vectors */ -#define DOT4V(v,a,b,c,d) (v[0]*(a) + v[1]*(b) + v[2]*(c) + v[3]*(d)) /** Cross product of two 3-element vectors */ -#define CROSS3(n, u, v) \ -do { \ - (n)[0] = (u)[1]*(v)[2] - (u)[2]*(v)[1]; \ - (n)[1] = (u)[2]*(v)[0] - (u)[0]*(v)[2]; \ - (n)[2] = (u)[0]*(v)[1] - (u)[1]*(v)[0]; \ -} while (0) +static inline void +CROSS3(GLfloat n[3], const GLfloat u[3], const GLfloat v[3]) +{ + n[0] = u[1] * v[2] - u[2] * v[1]; + n[1] = u[2] * v[0] - u[0] * v[2]; + n[2] = u[0] * v[1] - u[1] * v[0]; +} + + +/** Dot product of two 2-element vectors */ +static inline GLfloat +DOT2(const GLfloat a[2], const GLfloat b[2]) +{ + return a[0] * b[0] + a[1] * b[1]; +} + +static inline GLfloat +DOT3(const GLfloat a[3], const GLfloat b[3]) +{ + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +static inline GLfloat +DOT4(const GLfloat a[4], const GLfloat b[4]) +{ + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; +} + + +static inline GLfloat +LEN_SQUARED_3FV(const GLfloat v[3]) +{ + return DOT3(v, v); +} + +static inline GLfloat +LEN_SQUARED_2FV(const GLfloat v[2]) +{ + return DOT2(v, v); +} + + +static inline GLfloat +LEN_3FV(const GLfloat v[3]) +{ + return sqrtf(LEN_SQUARED_3FV(v)); +} + +static inline GLfloat +LEN_2FV(const GLfloat v[2]) +{ + return sqrtf(LEN_SQUARED_2FV(v)); +} /* Normalize a 3-element vector to unit length. */ -#define NORMALIZE_3FV( V ) \ -do { \ - GLfloat len = (GLfloat) LEN_SQUARED_3FV(V); \ - if (len) { \ - len = INV_SQRTF(len); \ - (V)[0] = (GLfloat) ((V)[0] * len); \ - (V)[1] = (GLfloat) ((V)[1] * len); \ - (V)[2] = (GLfloat) ((V)[2] * len); \ - } \ -} while(0) +static inline void +NORMALIZE_3FV(GLfloat v[3]) +{ + GLfloat len = (GLfloat) LEN_SQUARED_3FV(v); + if (len) { + len = INV_SQRTF(len); + v[0] *= len; + v[1] *= len; + v[2] *= len; + } +} -#define LEN_3FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2])) -#define LEN_2FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1])) -#define LEN_SQUARED_3FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2]) -#define LEN_SQUARED_2FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1]) +/** Is float value negative? */ +static inline GLboolean +IS_NEGATIVE(float x) +{ + return signbit(x) != 0; +} + +/** Test two floats have opposite signs */ +static inline GLboolean +DIFFERENT_SIGNS(GLfloat x, GLfloat y) +{ + return signbit(x) != signbit(y); +} + + +/** Compute ceiling of integer quotient of A divided by B. */ +#define CEILING( A, B ) ( (A) % (B) == 0 ? (A)/(B) : (A)/(B)+1 ) /** casts to silence warnings with some compilers */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/mfeatures.h b/3rdparty/glsl-optimizer/src/mesa/main/mfeatures.h deleted file mode 100644 index 33db50814..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/main/mfeatures.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.1 - * - * Copyright (C) 1999-2008 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. - */ - - -/** - * \file mfeatures.h - * Flags to enable/disable specific parts of the API. - */ - -#ifndef FEATURES_H -#define FEATURES_H - - -#ifndef _HAVE_FULL_GL -#define _HAVE_FULL_GL 1 -#endif - -/* assert that a feature is disabled and should never be used */ -#define ASSERT_NO_FEATURE() ASSERT(0) - -/** - * A feature can be anything. But most of them share certain characteristics. - * - * When a feature defines vtxfmt entries, they can be initialized and - * installed by - * _MESA_INIT__VTXFMT - * _mesa_install__vtxfmt - * - * When a feature defines dispatch entries, they are initialized by - * _mesa_init__dispatch - * - * When a feature has states, they are initialized and freed by - * _mesa_init_ - * _mesa_free__data - * - * Except for states, the others compile to no-op when a feature is disabled. - * - * The GLAPIENTRYs and helper functions defined by a feature should also - * compile to no-op when it is disabled. But to save typings and to catch - * bugs, some of them may be unavailable, or compile to ASSERT_NO_FEATURE() - * when the feature is disabled. - * - * A feature following the conventions may be used without knowing if it is - * enabled or not. - */ - -#ifndef FEATURE_ES1 -#define FEATURE_ES1 0 -#endif -#ifndef FEATURE_ES2 -#define FEATURE_ES2 0 -#endif - -#define FEATURE_ES (FEATURE_ES1 || FEATURE_ES2) - -#ifndef FEATURE_GL -#define FEATURE_GL !FEATURE_ES -#endif - -#if defined(IN_DRI_DRIVER) || (FEATURE_GL + FEATURE_ES1 + FEATURE_ES2 > 1) -#define FEATURE_remap_table 1 -#else -#define FEATURE_remap_table 0 -#endif - -#define FEATURE_dispatch 1 -#define FEATURE_texgen 1 -#define FEATURE_userclip 1 - -#define FEATURE_accum FEATURE_GL -#define FEATURE_arrayelt FEATURE_GL -#define FEATURE_attrib_stack FEATURE_GL -/* this disables vtxfmt, api_loopback, and api_noop completely */ -#define FEATURE_beginend FEATURE_GL -#define FEATURE_colortable FEATURE_GL -#define FEATURE_convolve FEATURE_GL -#define FEATURE_dlist (FEATURE_GL && FEATURE_arrayelt && FEATURE_beginend) -#define FEATURE_draw_read_buffer FEATURE_GL -#define FEATURE_drawpix FEATURE_GL -#define FEATURE_evaluators FEATURE_GL -#define FEATURE_feedback FEATURE_GL -#define FEATURE_pixel_transfer FEATURE_GL -#define FEATURE_queryobj FEATURE_GL -#define FEATURE_rastpos FEATURE_GL -#define FEATURE_texture_fxt1 FEATURE_GL -#define FEATURE_texture_s3tc FEATURE_GL - -#define FEATURE_extra_context_init FEATURE_ES -#define FEATURE_point_size_array FEATURE_ES - -#define FEATURE_es2_glsl FEATURE_ES2 - -#define FEATURE_ARB_fragment_program 1 -#define FEATURE_ARB_vertex_program 1 -#define FEATURE_ARB_vertex_shader 1 -#define FEATURE_ARB_fragment_shader 1 -#define FEATURE_ARB_shader_objects (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader) -#define FEATURE_ARB_shading_language_100 FEATURE_ARB_shader_objects -#define FEATURE_ARB_geometry_shader4 FEATURE_ARB_shader_objects - -#define FEATURE_ARB_framebuffer_object (FEATURE_GL && FEATURE_EXT_framebuffer_object) -#define FEATURE_ARB_map_buffer_range FEATURE_GL -#define FEATURE_ARB_pixel_buffer_object (FEATURE_GL && FEATURE_EXT_pixel_buffer_object) -#define FEATURE_ARB_sampler_objects FEATURE_GL -#define FEATURE_ARB_sync FEATURE_GL -#define FEATURE_ARB_vertex_buffer_object 1 - -#define FEATURE_EXT_framebuffer_blit FEATURE_GL -#define FEATURE_EXT_framebuffer_object 1 -#define FEATURE_EXT_pixel_buffer_object 1 -#define FEATURE_EXT_texture_sRGB FEATURE_GL -#define FEATURE_EXT_transform_feedback FEATURE_GL - -#define FEATURE_APPLE_object_purgeable FEATURE_GL -#define FEATURE_ATI_fragment_shader FEATURE_GL -#define FEATURE_NV_fence FEATURE_GL -#define FEATURE_NV_fragment_program FEATURE_GL -#define FEATURE_NV_vertex_program FEATURE_GL - -#define FEATURE_OES_EGL_image 1 -#define FEATURE_OES_draw_texture FEATURE_ES1 -#define FEATURE_OES_framebuffer_object FEATURE_ES -#define FEATURE_OES_mapbuffer FEATURE_ES - -#endif /* FEATURES_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/mtypes.h b/3rdparty/glsl-optimizer/src/mesa/main/mtypes.h index 2d5f44c1e..05d8220c7 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/mtypes.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/mtypes.h @@ -36,73 +36,20 @@ #include "main/glheader.h" #include "main/config.h" -#include "main/mfeatures.h" -#include "glapi/glapi.h" -#include "math/m_matrix.h" /* GLmatrix */ -#include "main/simple_list.h" /* struct simple_node */ -#include "main/formats.h" /* MESA_FORMAT_COUNT */ -/** - * Color channel data type. - */ -#if CHAN_BITS == 8 - typedef GLubyte GLchan; -#define CHAN_MAX 255 -#define CHAN_MAXF 255.0F -#define CHAN_TYPE GL_UNSIGNED_BYTE -#elif CHAN_BITS == 16 - typedef GLushort GLchan; -#define CHAN_MAX 65535 -#define CHAN_MAXF 65535.0F -#define CHAN_TYPE GL_UNSIGNED_SHORT -#elif CHAN_BITS == 32 - typedef GLfloat GLchan; -#define CHAN_MAX 1.0 -#define CHAN_MAXF 1.0F -#define CHAN_TYPE GL_FLOAT -#else -#error "illegal number of color channel bits" +#ifdef __cplusplus +extern "C" { #endif -/** - * Stencil buffer data type. - */ -#if STENCIL_BITS==8 - typedef GLubyte GLstencil; -#elif STENCIL_BITS==16 - typedef GLushort GLstencil; -#else -# error "illegal number of stencil bits" -#endif - - -/** - * \name 64-bit extension of GLbitfield. - */ -/*@{*/ -typedef GLuint64 GLbitfield64; - -/** Set a single bit */ -#define BITFIELD64_BIT(b) ((GLbitfield64)1 << (b)) - /** * \name Some forward type declarations */ /*@{*/ -struct _mesa_HashTable; -struct gl_attrib_node; -struct gl_list_extensions; -struct gl_meta_state; -struct gl_pixelstore_attrib; -struct gl_program_cache; -struct gl_texture_format; -struct gl_texture_image; -struct gl_texture_object; struct gl_context; -struct st_context; +struct gl_uniform_storage; /*@}*/ @@ -112,19 +59,6 @@ struct st_context; #define PRIM_UNKNOWN (GL_POLYGON+3) -/** - * Shader stages. Note that these will become 5 with tessellation. - * These MUST have the same values as gallium's PIPE_SHADER_* - */ -typedef enum -{ - MESA_SHADER_VERTEX = 0, - MESA_SHADER_FRAGMENT = 1, - MESA_SHADER_GEOMETRY = 2, - MESA_SHADER_TYPES = 3 -} gl_shader_type; - - /** * Indexes for vertex program attributes. @@ -142,7 +76,6 @@ typedef enum VERT_ATTRIB_COLOR1 = 4, VERT_ATTRIB_FOG = 5, VERT_ATTRIB_COLOR_INDEX = 6, - VERT_ATTRIB_POINT_SIZE = 6, /*alias*/ VERT_ATTRIB_EDGEFLAG = 7, VERT_ATTRIB_TEX0 = 8, VERT_ATTRIB_TEX1 = 9, @@ -152,70 +85,61 @@ typedef enum VERT_ATTRIB_TEX5 = 13, VERT_ATTRIB_TEX6 = 14, VERT_ATTRIB_TEX7 = 15, - VERT_ATTRIB_GENERIC0 = 16, - VERT_ATTRIB_GENERIC1 = 17, - VERT_ATTRIB_GENERIC2 = 18, - VERT_ATTRIB_GENERIC3 = 19, - VERT_ATTRIB_GENERIC4 = 20, - VERT_ATTRIB_GENERIC5 = 21, - VERT_ATTRIB_GENERIC6 = 22, - VERT_ATTRIB_GENERIC7 = 23, - VERT_ATTRIB_GENERIC8 = 24, - VERT_ATTRIB_GENERIC9 = 25, - VERT_ATTRIB_GENERIC10 = 26, - VERT_ATTRIB_GENERIC11 = 27, - VERT_ATTRIB_GENERIC12 = 28, - VERT_ATTRIB_GENERIC13 = 29, - VERT_ATTRIB_GENERIC14 = 30, - VERT_ATTRIB_GENERIC15 = 31, - VERT_ATTRIB_MAX = 32 + VERT_ATTRIB_POINT_SIZE = 16, + VERT_ATTRIB_GENERIC0 = 17, + VERT_ATTRIB_GENERIC1 = 18, + VERT_ATTRIB_GENERIC2 = 19, + VERT_ATTRIB_GENERIC3 = 20, + VERT_ATTRIB_GENERIC4 = 21, + VERT_ATTRIB_GENERIC5 = 22, + VERT_ATTRIB_GENERIC6 = 23, + VERT_ATTRIB_GENERIC7 = 24, + VERT_ATTRIB_GENERIC8 = 25, + VERT_ATTRIB_GENERIC9 = 26, + VERT_ATTRIB_GENERIC10 = 27, + VERT_ATTRIB_GENERIC11 = 28, + VERT_ATTRIB_GENERIC12 = 29, + VERT_ATTRIB_GENERIC13 = 30, + VERT_ATTRIB_GENERIC14 = 31, + VERT_ATTRIB_GENERIC15 = 32, + VERT_ATTRIB_MAX = 33 } gl_vert_attrib; /** - * Bitflags for vertex attributes. - * These are used in bitfields in many places. + * Symbolic constats to help iterating over + * specific blocks of vertex attributes. + * + * VERT_ATTRIB_FF + * includes all fixed function attributes as well as + * the aliased GL_NV_vertex_program shader attributes. + * VERT_ATTRIB_TEX + * include the classic texture coordinate attributes. + * Is a subset of VERT_ATTRIB_FF. + * VERT_ATTRIB_GENERIC_NV + * include the NV shader attributes. + * Is a subset of VERT_ATTRIB_FF. + * VERT_ATTRIB_GENERIC + * include the OpenGL 2.0+ GLSL generic shader attributes. + * These alias the generic GL_ARB_vertex_shader attributes. */ -/*@{*/ -#define VERT_BIT_POS (1 << VERT_ATTRIB_POS) -#define VERT_BIT_WEIGHT (1 << VERT_ATTRIB_WEIGHT) -#define VERT_BIT_NORMAL (1 << VERT_ATTRIB_NORMAL) -#define VERT_BIT_COLOR0 (1 << VERT_ATTRIB_COLOR0) -#define VERT_BIT_COLOR1 (1 << VERT_ATTRIB_COLOR1) -#define VERT_BIT_FOG (1 << VERT_ATTRIB_FOG) -#define VERT_BIT_COLOR_INDEX (1 << VERT_ATTRIB_COLOR_INDEX) -#define VERT_BIT_EDGEFLAG (1 << VERT_ATTRIB_EDGEFLAG) -#define VERT_BIT_TEX0 (1 << VERT_ATTRIB_TEX0) -#define VERT_BIT_TEX1 (1 << VERT_ATTRIB_TEX1) -#define VERT_BIT_TEX2 (1 << VERT_ATTRIB_TEX2) -#define VERT_BIT_TEX3 (1 << VERT_ATTRIB_TEX3) -#define VERT_BIT_TEX4 (1 << VERT_ATTRIB_TEX4) -#define VERT_BIT_TEX5 (1 << VERT_ATTRIB_TEX5) -#define VERT_BIT_TEX6 (1 << VERT_ATTRIB_TEX6) -#define VERT_BIT_TEX7 (1 << VERT_ATTRIB_TEX7) -#define VERT_BIT_GENERIC0 (1 << VERT_ATTRIB_GENERIC0) -#define VERT_BIT_GENERIC1 (1 << VERT_ATTRIB_GENERIC1) -#define VERT_BIT_GENERIC2 (1 << VERT_ATTRIB_GENERIC2) -#define VERT_BIT_GENERIC3 (1 << VERT_ATTRIB_GENERIC3) -#define VERT_BIT_GENERIC4 (1 << VERT_ATTRIB_GENERIC4) -#define VERT_BIT_GENERIC5 (1 << VERT_ATTRIB_GENERIC5) -#define VERT_BIT_GENERIC6 (1 << VERT_ATTRIB_GENERIC6) -#define VERT_BIT_GENERIC7 (1 << VERT_ATTRIB_GENERIC7) -#define VERT_BIT_GENERIC8 (1 << VERT_ATTRIB_GENERIC8) -#define VERT_BIT_GENERIC9 (1 << VERT_ATTRIB_GENERIC9) -#define VERT_BIT_GENERIC10 (1 << VERT_ATTRIB_GENERIC10) -#define VERT_BIT_GENERIC11 (1 << VERT_ATTRIB_GENERIC11) -#define VERT_BIT_GENERIC12 (1 << VERT_ATTRIB_GENERIC12) -#define VERT_BIT_GENERIC13 (1 << VERT_ATTRIB_GENERIC13) -#define VERT_BIT_GENERIC14 (1 << VERT_ATTRIB_GENERIC14) -#define VERT_BIT_GENERIC15 (1 << VERT_ATTRIB_GENERIC15) +#define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i)) +#define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0 + +#define VERT_ATTRIB_TEX(i) (VERT_ATTRIB_TEX0 + (i)) +#define VERT_ATTRIB_TEX_MAX MAX_TEXTURE_COORD_UNITS + +#define VERT_ATTRIB_GENERIC_NV(i) (VERT_ATTRIB_POS + (i)) +#define VERT_ATTRIB_GENERIC_NV_MAX MAX_VERTEX_GENERIC_ATTRIBS + +#define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i)) +#define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS -#define VERT_BIT_TEX(u) (1 << (VERT_ATTRIB_TEX0 + (u))) -#define VERT_BIT_GENERIC(g) (1 << (VERT_ATTRIB_GENERIC0 + (g))) -/*@}*/ /** - * Indexes for vertex program result attributes + * Indexes for vertex program result attributes. Note that + * _mesa_vert_result_to_frag_attrib() and _mesa_frag_attrib_to_vert_result() make + * assumptions about the layout of this enum. */ typedef enum { @@ -235,7 +159,10 @@ typedef enum VERT_RESULT_BFC0 = 13, VERT_RESULT_BFC1 = 14, VERT_RESULT_EDGE = 15, - VERT_RESULT_VAR0 = 16, /**< shader varying */ + VERT_RESULT_CLIP_VERTEX = 16, + VERT_RESULT_CLIP_DIST0 = 17, + VERT_RESULT_CLIP_DIST1 = 18, + VERT_RESULT_VAR0 = 19, /**< shader varying */ VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING) } gl_vert_result; @@ -262,25 +189,6 @@ typedef enum GEOM_ATTRIB_MAX = (GEOM_ATTRIB_VAR0 + MAX_VARYING) } gl_geom_attrib; -/** - * Bitflags for geometry attributes. - * These are used in bitfields in many places. - */ -/*@{*/ -#define GEOM_BIT_COLOR0 (1 << GEOM_ATTRIB_COLOR0) -#define GEOM_BIT_COLOR1 (1 << GEOM_ATTRIB_COLOR1) -#define GEOM_BIT_SCOLOR0 (1 << GEOM_ATTRIB_SECONDARY_COLOR0) -#define GEOM_BIT_SCOLOR1 (1 << GEOM_ATTRIB_SECONDARY_COLOR1) -#define GEOM_BIT_TEX_COORD (1 << GEOM_ATTRIB_TEX_COORD) -#define GEOM_BIT_FOG_COORD (1 << GEOM_ATTRIB_FOG_FRAG_COORD) -#define GEOM_BIT_POSITION (1 << GEOM_ATTRIB_POSITION) -#define GEOM_BIT_POINT_SIDE (1 << GEOM_ATTRIB_POINT_SIZE) -#define GEOM_BIT_CLIP_VERTEX (1 << GEOM_ATTRIB_CLIP_VERTEX) -#define GEOM_BIT_PRIM_ID (1 << GEOM_ATTRIB_PRIMITIVE_ID) -#define GEOM_BIT_VAR0 (1 << GEOM_ATTRIB_VAR0) - -#define GEOM_BIT_VAR(g) (1 << (GEOM_BIT_VAR0 + (g))) -/*@}*/ /** @@ -313,7 +221,9 @@ typedef enum /** - * Indexes for fragment program input attributes. + * Indexes for fragment program input attributes. Note that + * _mesa_vert_result_to_frag_attrib() and frag_attrib_to_vert_result() make + * assumptions about the layout of this enum. */ typedef enum { @@ -331,42 +241,52 @@ typedef enum FRAG_ATTRIB_TEX7 = 11, FRAG_ATTRIB_FACE = 12, /**< front/back face */ FRAG_ATTRIB_PNTC = 13, /**< sprite/point coord */ - FRAG_ATTRIB_VAR0 = 14, /**< shader varying */ + FRAG_ATTRIB_CLIP_DIST0 = 14, + FRAG_ATTRIB_CLIP_DIST1 = 15, + FRAG_ATTRIB_VAR0 = 16, /**< shader varying */ FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING) } gl_frag_attrib; + /** - * Bitflags for fragment program input attributes. + * Convert from a gl_vert_result value to the corresponding gl_frag_attrib. + * + * VERT_RESULT_HPOS is converted to FRAG_ATTRIB_WPOS. + * + * gl_vert_result values which have no corresponding gl_frag_attrib + * (VERT_RESULT_PSIZ, VERT_RESULT_BFC0, VERT_RESULT_BFC1, and + * VERT_RESULT_EDGE) are converted to a value of -1. */ -/*@{*/ -#define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS) -#define FRAG_BIT_COL0 (1 << FRAG_ATTRIB_COL0) -#define FRAG_BIT_COL1 (1 << FRAG_ATTRIB_COL1) -#define FRAG_BIT_FOGC (1 << FRAG_ATTRIB_FOGC) -#define FRAG_BIT_FACE (1 << FRAG_ATTRIB_FACE) -#define FRAG_BIT_PNTC (1 << FRAG_ATTRIB_PNTC) -#define FRAG_BIT_TEX0 (1 << FRAG_ATTRIB_TEX0) -#define FRAG_BIT_TEX1 (1 << FRAG_ATTRIB_TEX1) -#define FRAG_BIT_TEX2 (1 << FRAG_ATTRIB_TEX2) -#define FRAG_BIT_TEX3 (1 << FRAG_ATTRIB_TEX3) -#define FRAG_BIT_TEX4 (1 << FRAG_ATTRIB_TEX4) -#define FRAG_BIT_TEX5 (1 << FRAG_ATTRIB_TEX5) -#define FRAG_BIT_TEX6 (1 << FRAG_ATTRIB_TEX6) -#define FRAG_BIT_TEX7 (1 << FRAG_ATTRIB_TEX7) -#define FRAG_BIT_VAR0 (1 << FRAG_ATTRIB_VAR0) +static inline int +_mesa_vert_result_to_frag_attrib(gl_vert_result vert_result) +{ + if (vert_result >= VERT_RESULT_CLIP_DIST0) + return vert_result - VERT_RESULT_CLIP_DIST0 + FRAG_ATTRIB_CLIP_DIST0; + else if (vert_result <= VERT_RESULT_TEX7) + return vert_result; + else + return -1; +} -#define FRAG_BIT_TEX(U) (FRAG_BIT_TEX0 << (U)) -#define FRAG_BIT_VAR(V) (FRAG_BIT_VAR0 << (V)) -#define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0| \ - FRAG_BIT_TEX1| \ - FRAG_BIT_TEX2| \ - FRAG_BIT_TEX3| \ - FRAG_BIT_TEX4| \ - FRAG_BIT_TEX5| \ - FRAG_BIT_TEX6| \ - FRAG_BIT_TEX7) -/*@}*/ +/** + * Convert from a gl_frag_attrib value to the corresponding gl_vert_result. + * + * FRAG_ATTRIB_WPOS is converted to VERT_RESULT_HPOS. + * + * gl_frag_attrib values which have no corresponding gl_vert_result + * (FRAG_ATTRIB_FACE and FRAG_ATTRIB_PNTC) are converted to a value of -1. + */ +static inline int +_mesa_frag_attrib_to_vert_result(gl_frag_attrib frag_attrib) +{ + if (frag_attrib <= FRAG_ATTRIB_TEX7) + return frag_attrib; + else if (frag_attrib >= FRAG_ATTRIB_CLIP_DIST0) + return frag_attrib - FRAG_ATTRIB_CLIP_DIST0 + VERT_RESULT_CLIP_DIST0; + else + return -1; +} /** @@ -390,754 +310,9 @@ typedef enum } gl_frag_result; -/** - * Indexes for all renderbuffers - */ -typedef enum -{ - /* the four standard color buffers */ - BUFFER_FRONT_LEFT, - BUFFER_BACK_LEFT, - BUFFER_FRONT_RIGHT, - BUFFER_BACK_RIGHT, - BUFFER_DEPTH, - BUFFER_STENCIL, - BUFFER_ACCUM, - /* optional aux buffer */ - BUFFER_AUX0, - /* generic renderbuffers */ - BUFFER_COLOR0, - BUFFER_COLOR1, - BUFFER_COLOR2, - BUFFER_COLOR3, - BUFFER_COLOR4, - BUFFER_COLOR5, - BUFFER_COLOR6, - BUFFER_COLOR7, - BUFFER_COUNT -} gl_buffer_index; -/** - * Bit flags for all renderbuffers - */ -#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) -#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) -#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) -#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) -#define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0) -#define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1) -#define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2) -#define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3) -#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) -#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) -#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) -#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) -#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) -#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) -#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) -#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) -#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) -#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) -#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) - -/** - * Mask of all the color buffer bits (but not accum). - */ -#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ - BUFFER_BIT_BACK_LEFT | \ - BUFFER_BIT_FRONT_RIGHT | \ - BUFFER_BIT_BACK_RIGHT | \ - BUFFER_BIT_AUX0 | \ - BUFFER_BIT_COLOR0 | \ - BUFFER_BIT_COLOR1 | \ - BUFFER_BIT_COLOR2 | \ - BUFFER_BIT_COLOR3 | \ - BUFFER_BIT_COLOR4 | \ - BUFFER_BIT_COLOR5 | \ - BUFFER_BIT_COLOR6 | \ - BUFFER_BIT_COLOR7) - - -/** - * Framebuffer configuration (aka visual / pixelformat) - * Note: some of these fields should be boolean, but it appears that - * code in drivers/dri/common/util.c requires int-sized fields. - */ -struct gl_config -{ - GLboolean rgbMode; - GLboolean floatMode; - GLboolean colorIndexMode; /* XXX is this used anywhere? */ - GLuint doubleBufferMode; - GLuint stereoMode; - - GLboolean haveAccumBuffer; - GLboolean haveDepthBuffer; - GLboolean haveStencilBuffer; - - GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ - GLuint redMask, greenMask, blueMask, alphaMask; - GLint rgbBits; /* total bits for rgb */ - GLint indexBits; /* total bits for colorindex */ - - GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; - GLint depthBits; - GLint stencilBits; - - GLint numAuxBuffers; - - GLint level; - - /* EXT_visual_rating / GLX 1.2 */ - GLint visualRating; - - /* EXT_visual_info / GLX 1.2 */ - GLint transparentPixel; - /* colors are floats scaled to ints */ - GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha; - GLint transparentIndex; - - /* ARB_multisample / SGIS_multisample */ - GLint sampleBuffers; - GLint samples; - - /* SGIX_pbuffer / GLX 1.3 */ - GLint maxPbufferWidth; - GLint maxPbufferHeight; - GLint maxPbufferPixels; - GLint optimalPbufferWidth; /* Only for SGIX_pbuffer. */ - GLint optimalPbufferHeight; /* Only for SGIX_pbuffer. */ - - /* OML_swap_method */ - GLint swapMethod; - - /* EXT_texture_from_pixmap */ - GLint bindToTextureRgb; - GLint bindToTextureRgba; - GLint bindToMipmapTexture; - GLint bindToTextureTargets; - GLint yInverted; - - /* EXT_framebuffer_sRGB */ - GLint sRGBCapable; -}; - - -/** - * Data structure for color tables - */ -struct gl_color_table -{ - GLenum InternalFormat; /**< The user-specified format */ - GLenum _BaseFormat; /**< GL_ALPHA, GL_RGBA, GL_RGB, etc */ - GLuint Size; /**< number of entries in table */ - GLfloat *TableF; /**< Color table, floating point values */ - GLubyte *TableUB; /**< Color table, ubyte values */ - GLubyte RedSize; - GLubyte GreenSize; - GLubyte BlueSize; - GLubyte AlphaSize; - GLubyte LuminanceSize; - GLubyte IntensitySize; -}; - - -/** - * \name Bit flags used for updating material values. - */ -/*@{*/ -#define MAT_ATTRIB_FRONT_AMBIENT 0 -#define MAT_ATTRIB_BACK_AMBIENT 1 -#define MAT_ATTRIB_FRONT_DIFFUSE 2 -#define MAT_ATTRIB_BACK_DIFFUSE 3 -#define MAT_ATTRIB_FRONT_SPECULAR 4 -#define MAT_ATTRIB_BACK_SPECULAR 5 -#define MAT_ATTRIB_FRONT_EMISSION 6 -#define MAT_ATTRIB_BACK_EMISSION 7 -#define MAT_ATTRIB_FRONT_SHININESS 8 -#define MAT_ATTRIB_BACK_SHININESS 9 -#define MAT_ATTRIB_FRONT_INDEXES 10 -#define MAT_ATTRIB_BACK_INDEXES 11 -#define MAT_ATTRIB_MAX 12 - -#define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f)) -#define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f)) -#define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) -#define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) -#define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f)) -#define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f)) - -#define MAT_INDEX_AMBIENT 0 -#define MAT_INDEX_DIFFUSE 1 -#define MAT_INDEX_SPECULAR 2 - -#define MAT_BIT_FRONT_AMBIENT (1< ) */ - GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */ - GLfloat _VP_inf_spot_attenuation; - - GLfloat _SpotExpTable[EXP_TABLE_SIZE][2]; /**< to replace a pow() call */ - GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */ - GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */ - GLfloat _MatSpecular[2][3]; /**< material spec * light specular */ - GLfloat _dli; /**< CI diffuse light intensity */ - GLfloat _sli; /**< CI specular light intensity */ - /*@}*/ -}; - - -/** - * Light model state. - */ -struct gl_lightmodel -{ - GLfloat Ambient[4]; /**< ambient color */ - GLboolean LocalViewer; /**< Local (or infinite) view point? */ - GLboolean TwoSide; /**< Two (or one) sided lighting? */ - GLenum ColorControl; /**< either GL_SINGLE_COLOR - * or GL_SEPARATE_SPECULAR_COLOR */ -}; - - -/** - * Material state. - */ -struct gl_material -{ - GLfloat Attrib[MAT_ATTRIB_MAX][4]; -}; - - -/** - * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT) - */ -struct gl_accum_attrib -{ - GLfloat ClearColor[4]; /**< Accumulation buffer clear color */ -}; - - -/** - * Color buffer attribute group (GL_COLOR_BUFFER_BIT). - */ -struct gl_colorbuffer_attrib -{ - GLuint ClearIndex; /**< Index to use for glClear */ - GLfloat ClearColorUnclamped[4]; /**< Color to use for glClear*/ - GLclampf ClearColor[4]; /**< Color to use for glClear */ - - GLuint IndexMask; /**< Color index write mask */ - GLubyte ColorMask[MAX_DRAW_BUFFERS][4];/**< Each flag is 0xff or 0x0 */ - - GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ - - /** - * \name alpha testing - */ - /*@{*/ - GLboolean AlphaEnabled; /**< Alpha test enabled flag */ - GLenum AlphaFunc; /**< Alpha test function */ - GLfloat AlphaRefUnclamped; - GLclampf AlphaRef; /**< Alpha reference value */ - /*@}*/ - - /** - * \name Blending - */ - /*@{*/ - GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */ - - /* NOTE: this does _not_ depend on fragment clamping or any other clamping control, - * only on the fixed-pointness of the render target. - * The query does however depend on fragment color clamping. - */ - GLfloat BlendColorUnclamped[4]; /**< Blending color */ - GLfloat BlendColor[4]; /**< Blending color */ - - struct - { - GLenum SrcRGB; /**< RGB blend source term */ - GLenum DstRGB; /**< RGB blend dest term */ - GLenum SrcA; /**< Alpha blend source term */ - GLenum DstA; /**< Alpha blend dest term */ - GLenum EquationRGB; /**< GL_ADD, GL_SUBTRACT, etc. */ - GLenum EquationA; /**< GL_ADD, GL_SUBTRACT, etc. */ - } Blend[MAX_DRAW_BUFFERS]; - /** Are the blend func terms currently different for each buffer/target? */ - GLboolean _BlendFuncPerBuffer; - /** Are the blend equations currently different for each buffer/target? */ - GLboolean _BlendEquationPerBuffer; - /*@}*/ - - /** - * \name Logic op - */ - /*@{*/ - GLenum LogicOp; /**< Logic operator */ - GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */ - GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */ - GLboolean _LogicOpEnabled; /**< RGBA logic op + EXT_blend_logic_op enabled flag */ - /*@}*/ - - GLboolean DitherFlag; /**< Dither enable flag */ - - GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ - GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */ - GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ - GLboolean _ClampReadColor; /** < with GL_FIXED_ONLY_ARB resolved */ - - GLboolean sRGBEnabled; /**< Framebuffer sRGB blending/updating requested */ -}; - - -/** - * Current attribute group (GL_CURRENT_BIT). - */ -struct gl_current_attrib -{ - /** - * \name Current vertex attributes. - * \note Values are valid only after FLUSH_VERTICES has been called. - * \note Index and Edgeflag current values are stored as floats in the - * SIX and SEVEN attribute slots. - */ - GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ - - /** - * \name Current raster position attributes (always valid). - * \note This set of attributes is very similar to the SWvertex struct. - */ - /*@{*/ - GLfloat RasterPos[4]; - GLfloat RasterDistance; - GLfloat RasterColor[4]; - GLfloat RasterSecondaryColor[4]; - GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; - GLboolean RasterPosValid; - /*@}*/ -}; - - -/** - * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT). - */ -struct gl_depthbuffer_attrib -{ - GLenum Func; /**< Function for depth buffer compare */ - GLclampd Clear; /**< Value to clear depth buffer to */ - GLboolean Test; /**< Depth buffering enabled flag */ - GLboolean Mask; /**< Depth buffer writable? */ - GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ - GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ -}; - - -/** - * Evaluator attribute group (GL_EVAL_BIT). - */ -struct gl_eval_attrib -{ - /** - * \name Enable bits - */ - /*@{*/ - GLboolean Map1Color4; - GLboolean Map1Index; - GLboolean Map1Normal; - GLboolean Map1TextureCoord1; - GLboolean Map1TextureCoord2; - GLboolean Map1TextureCoord3; - GLboolean Map1TextureCoord4; - GLboolean Map1Vertex3; - GLboolean Map1Vertex4; - GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ - GLboolean Map2Color4; - GLboolean Map2Index; - GLboolean Map2Normal; - GLboolean Map2TextureCoord1; - GLboolean Map2TextureCoord2; - GLboolean Map2TextureCoord3; - GLboolean Map2TextureCoord4; - GLboolean Map2Vertex3; - GLboolean Map2Vertex4; - GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ - GLboolean AutoNormal; - /*@}*/ - - /** - * \name Map Grid endpoints and divisions and calculated du values - */ - /*@{*/ - GLint MapGrid1un; - GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du; - GLint MapGrid2un, MapGrid2vn; - GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du; - GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv; - /*@}*/ -}; - - -/** - * Fog attribute group (GL_FOG_BIT). - */ -struct gl_fog_attrib -{ - GLboolean Enabled; /**< Fog enabled flag */ - GLfloat ColorUnclamped[4]; /**< Fog color */ - GLfloat Color[4]; /**< Fog color */ - GLfloat Density; /**< Density >= 0.0 */ - GLfloat Start; /**< Start distance in eye coords */ - GLfloat End; /**< End distance in eye coords */ - GLfloat Index; /**< Fog index */ - GLenum Mode; /**< Fog mode */ - GLboolean ColorSumEnabled; - GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */ - GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */ -}; - - -/** - * \brief Layout qualifiers for gl_FragDepth. - * - * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with - * a layout qualifier. - * - * \see enum ir_depth_layout - */ -enum gl_frag_depth_layout { - FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */ - FRAG_DEPTH_LAYOUT_ANY, - FRAG_DEPTH_LAYOUT_GREATER, - FRAG_DEPTH_LAYOUT_LESS, - FRAG_DEPTH_LAYOUT_UNCHANGED -}; - - -/** - * Hint attribute group (GL_HINT_BIT). - * - * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE. - */ -struct gl_hint_attrib -{ - GLenum PerspectiveCorrection; - GLenum PointSmooth; - GLenum LineSmooth; - GLenum PolygonSmooth; - GLenum Fog; - GLenum ClipVolumeClipping; /**< GL_EXT_clip_volume_hint */ - GLenum TextureCompression; /**< GL_ARB_texture_compression */ - GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */ - GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ -}; - -/** - * Light state flags. - */ -/*@{*/ -#define LIGHT_SPOT 0x1 -#define LIGHT_LOCAL_VIEWER 0x2 -#define LIGHT_POSITIONAL 0x4 -#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER) -/*@}*/ - - -/** - * Lighting attribute group (GL_LIGHT_BIT). - */ -struct gl_light_attrib -{ - struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */ - struct gl_lightmodel Model; /**< Lighting model */ - - /** - * Must flush FLUSH_VERTICES before referencing: - */ - /*@{*/ - struct gl_material Material; /**< Includes front & back values */ - /*@}*/ - - GLboolean Enabled; /**< Lighting enabled flag */ - GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */ - GLenum ProvokingVertex; /**< GL_EXT_provoking_vertex */ - GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ - GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ - GLbitfield ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ - GLboolean ColorMaterialEnabled; - GLenum ClampVertexColor; - GLboolean _ClampVertexColor; - - struct gl_light EnabledList; /**< List sentinel */ - - /** - * Derived state for optimizations: - */ - /*@{*/ - GLboolean _NeedEyeCoords; - GLboolean _NeedVertices; /**< Use fast shader? */ - GLbitfield _Flags; /**< LIGHT_* flags, see above */ - GLfloat _BaseColor[2][3]; - /*@}*/ -}; - - -/** - * Line attribute group (GL_LINE_BIT). - */ -struct gl_line_attrib -{ - GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */ - GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */ - GLushort StipplePattern; /**< Stipple pattern */ - GLint StippleFactor; /**< Stipple repeat factor */ - GLfloat Width; /**< Line width */ -}; - - -/** - * Display list attribute group (GL_LIST_BIT). - */ -struct gl_list_attrib -{ - GLuint ListBase; -}; - - -/** - * Multisample attribute group (GL_MULTISAMPLE_BIT). - */ -struct gl_multisample_attrib -{ - GLboolean Enabled; - GLboolean _Enabled; /**< true if Enabled and multisample buffer */ - GLboolean SampleAlphaToCoverage; - GLboolean SampleAlphaToOne; - GLboolean SampleCoverage; - GLfloat SampleCoverageValue; - GLboolean SampleCoverageInvert; -}; - - -/** - * A pixelmap (see glPixelMap) - */ -struct gl_pixelmap -{ - GLint Size; - GLfloat Map[MAX_PIXEL_MAP_TABLE]; - GLubyte Map8[MAX_PIXEL_MAP_TABLE]; /**< converted to 8-bit color */ -}; - - -/** - * Collection of all pixelmaps - */ -struct gl_pixelmaps -{ - struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */ - struct gl_pixelmap GtoG; - struct gl_pixelmap BtoB; - struct gl_pixelmap AtoA; - struct gl_pixelmap ItoR; - struct gl_pixelmap ItoG; - struct gl_pixelmap ItoB; - struct gl_pixelmap ItoA; - struct gl_pixelmap ItoI; - struct gl_pixelmap StoS; -}; - - -/** - * Pixel attribute group (GL_PIXEL_MODE_BIT). - */ -struct gl_pixel_attrib -{ - GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */ - - /*--- Begin Pixel Transfer State ---*/ - /* Fields are in the order in which they're applied... */ - - /** Scale & Bias (index shift, offset) */ - /*@{*/ - GLfloat RedBias, RedScale; - GLfloat GreenBias, GreenScale; - GLfloat BlueBias, BlueScale; - GLfloat AlphaBias, AlphaScale; - GLfloat DepthBias, DepthScale; - GLint IndexShift, IndexOffset; - /*@}*/ - - /* Pixel Maps */ - /* Note: actual pixel maps are not part of this attrib group */ - GLboolean MapColorFlag; - GLboolean MapStencilFlag; - - /*--- End Pixel Transfer State ---*/ - - /** glPixelZoom */ - GLfloat ZoomX, ZoomY; -}; - - -/** - * Point attribute group (GL_POINT_BIT). - */ -struct gl_point_attrib -{ - GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */ - GLfloat Size; /**< User-specified point size */ - GLfloat Params[3]; /**< GL_EXT_point_parameters */ - GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ - GLfloat Threshold; /**< GL_EXT_point_parameters */ - GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ - GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ - GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite*/ - GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */ - GLenum SpriteOrigin; /**< GL_ARB_point_sprite */ -}; - - -/** - * Polygon attribute group (GL_POLYGON_BIT). - */ -struct gl_polygon_attrib -{ - GLenum FrontFace; /**< Either GL_CW or GL_CCW */ - GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ - GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ - GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */ - GLboolean CullFlag; /**< Culling on/off flag */ - GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ - GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ - GLenum CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */ - GLfloat OffsetFactor; /**< Polygon offset factor, from user */ - GLfloat OffsetUnits; /**< Polygon offset units, from user */ - GLboolean OffsetPoint; /**< Offset in GL_POINT mode */ - GLboolean OffsetLine; /**< Offset in GL_LINE mode */ - GLboolean OffsetFill; /**< Offset in GL_FILL mode */ -}; - - -/** - * Scissor attributes (GL_SCISSOR_BIT). - */ -struct gl_scissor_attrib -{ - GLboolean Enabled; /**< Scissor test enabled? */ - GLint X, Y; /**< Lower left corner of box */ - GLsizei Width, Height; /**< Size of box */ -}; - - -/** - * Stencil attribute group (GL_STENCIL_BUFFER_BIT). - * - * Three sets of stencil data are tracked so that OpenGL 2.0, - * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported - * simultaneously. In each of the stencil state arrays, element 0 corresponds - * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 / - * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the - * GL_EXT_stencil_two_side GL_BACK state. - * - * The derived value \c _BackFace is either 1 or 2 depending on whether or - * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled. - * - * The derived value \c _TestTwoSide is set when the front-face and back-face - * stencil state are different. - */ -struct gl_stencil_attrib -{ - GLboolean Enabled; /**< Enabled flag */ - GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ - GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ - GLboolean _Enabled; /**< Enabled and stencil buffer present */ - GLboolean _TestTwoSide; - GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ - GLenum Function[3]; /**< Stencil function */ - GLenum FailFunc[3]; /**< Fail function */ - GLenum ZPassFunc[3]; /**< Depth buffer pass function */ - GLenum ZFailFunc[3]; /**< Depth buffer fail function */ - GLint Ref[3]; /**< Reference value */ - GLuint ValueMask[3]; /**< Value mask */ - GLuint WriteMask[3]; /**< Write mask */ - GLuint Clear; /**< Clear value */ -}; +struct gl_config; + /** @@ -1150,6 +325,7 @@ typedef enum TEXTURE_BUFFER_INDEX, TEXTURE_2D_ARRAY_INDEX, TEXTURE_1D_ARRAY_INDEX, + TEXTURE_EXTERNAL_INDEX, TEXTURE_CUBE_INDEX, TEXTURE_3D_INDEX, TEXTURE_RECT_INDEX, @@ -1159,634 +335,69 @@ typedef enum } gl_texture_index; -/** - * Bit flags for each type of texture object - * Used for Texture.Unit[]._ReallyEnabled flags. - */ -/*@{*/ -#define TEXTURE_BUFFER_BIT (1 << TEXTURE_BUFFER_INDEX) -#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) -#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) -#define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) -#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) -#define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) -#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) -#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) -/*@}*/ - - -/** - * TexGenEnabled flags. - */ -/*@{*/ -#define S_BIT 1 -#define T_BIT 2 -#define R_BIT 4 -#define Q_BIT 8 -#define STR_BITS (S_BIT | T_BIT | R_BIT) -/*@}*/ - - -/** - * Bit flag versions of the corresponding GL_ constants. - */ -/*@{*/ -#define TEXGEN_SPHERE_MAP 0x1 -#define TEXGEN_OBJ_LINEAR 0x2 -#define TEXGEN_EYE_LINEAR 0x4 -#define TEXGEN_REFLECTION_MAP_NV 0x8 -#define TEXGEN_NORMAL_MAP_NV 0x10 - -#define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \ - TEXGEN_REFLECTION_MAP_NV | \ - TEXGEN_NORMAL_MAP_NV) -#define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \ - TEXGEN_REFLECTION_MAP_NV | \ - TEXGEN_NORMAL_MAP_NV | \ - TEXGEN_EYE_LINEAR) -/*@}*/ -/** Tex-gen enabled for texture unit? */ -#define ENABLE_TEXGEN(unit) (1 << (unit)) - -/** Non-identity texture matrix for texture unit? */ -#define ENABLE_TEXMAT(unit) (1 << (unit)) - - -/** - * Texel fetch function prototype. We use texel fetch functions to - * extract RGBA, color indexes and depth components out of 1D, 2D and 3D - * texture images. These functions help to isolate us from the gritty - * details of all the various texture image encodings. - * - * \param texImage texture image. - * \param col texel column. - * \param row texel row. - * \param img texel image level/layer. - * \param texelOut output texel (up to 4 GLchans) - */ -typedef void (*FetchTexelFuncC)( const struct gl_texture_image *texImage, - GLint col, GLint row, GLint img, - GLchan *texelOut ); - -/** - * As above, but returns floats. - * Used for depth component images and for upcoming signed/float - * texture images. - */ -typedef void (*FetchTexelFuncF)( const struct gl_texture_image *texImage, - GLint col, GLint row, GLint img, - GLfloat *texelOut ); - - -typedef void (*StoreTexelFunc)(struct gl_texture_image *texImage, - GLint col, GLint row, GLint img, - const void *texel); - - -/** - * Texture image state. Describes the dimensions of a texture image, - * the texel format and pointers to Texel Fetch functions. - */ -struct gl_texture_image -{ - GLint InternalFormat; /**< Internal format as given by the user */ - GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, - * GL_LUMINANCE, GL_LUMINANCE_ALPHA, - * GL_INTENSITY, GL_COLOR_INDEX, - * GL_DEPTH_COMPONENT or GL_DEPTH_STENCIL_EXT - * only. Used for choosing TexEnv arithmetic. - */ - gl_format TexFormat; /**< The actual texture memory format */ - - GLuint Border; /**< 0 or 1 */ - GLuint Width; /**< = 2^WidthLog2 + 2*Border */ - GLuint Height; /**< = 2^HeightLog2 + 2*Border */ - GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ - GLuint Width2; /**< = Width - 2*Border */ - GLuint Height2; /**< = Height - 2*Border */ - GLuint Depth2; /**< = Depth - 2*Border */ - GLuint WidthLog2; /**< = log2(Width2) */ - GLuint HeightLog2; /**< = log2(Height2) */ - GLuint DepthLog2; /**< = log2(Depth2) */ - GLuint MaxLog2; /**< = MAX(WidthLog2, HeightLog2) */ - GLfloat WidthScale; /**< used for mipmap LOD computation */ - GLfloat HeightScale; /**< used for mipmap LOD computation */ - GLfloat DepthScale; /**< used for mipmap LOD computation */ - GLboolean IsClientData; /**< Data owned by client? */ - GLboolean _IsPowerOfTwo; /**< Are all dimensions powers of two? */ - - struct gl_texture_object *TexObject; /**< Pointer back to parent object */ - - FetchTexelFuncC FetchTexelc; /**< GLchan texel fetch function pointer */ - FetchTexelFuncF FetchTexelf; /**< Float texel fetch function pointer */ - - GLuint RowStride; /**< Padded width in units of texels */ - GLuint *ImageOffsets; /**< if 3D texture: array [Depth] of offsets to - each 2D slice in 'Data', in texels */ - GLvoid *Data; /**< Image data, accessed via FetchTexel() */ - - /** - * \name For device driver: - */ - /*@{*/ - void *DriverData; /**< Arbitrary device driver data */ - /*@}*/ -}; - - -/** - * Indexes for cube map faces. - */ -typedef enum -{ - FACE_POS_X = 0, - FACE_NEG_X = 1, - FACE_POS_Y = 2, - FACE_NEG_Y = 3, - FACE_POS_Z = 4, - FACE_NEG_Z = 5, - MAX_FACES = 6 -} gl_face_index; - - -/** - * Sampler object state. These objects are new with GL_ARB_sampler_objects - * and OpenGL 3.3. Legacy texture objects also contain a sampler object. - */ -struct gl_sampler_object -{ - GLuint Name; - GLint RefCount; - - GLenum WrapS; /**< S-axis texture image wrap mode */ - GLenum WrapT; /**< T-axis texture image wrap mode */ - GLenum WrapR; /**< R-axis texture image wrap mode */ - GLenum MinFilter; /**< minification filter */ - GLenum MagFilter; /**< magnification filter */ - union { - GLfloat f[4]; - GLuint ui[4]; - GLint i[4]; - } BorderColor; /**< Interpreted according to texture format */ - GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ - GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ - GLfloat LodBias; /**< OpenGL 1.4 */ - GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ - GLenum CompareMode; /**< GL_ARB_shadow */ - GLenum CompareFunc; /**< GL_ARB_shadow */ - GLfloat CompareFailValue; /**< GL_ARB_shadow_ambient */ - GLenum sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */ - GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */ - - /* deprecated sampler state */ - GLenum DepthMode; /**< GL_ARB_depth_texture */ - - /** Is the texture object complete with respect to this sampler? */ - GLboolean _CompleteTexture; -}; - - -/** - * Texture object state. Contains the array of mipmap images, border color, - * wrap modes, filter modes, shadow/texcompare state, and the per-texture - * color palette. - */ -struct gl_texture_object -{ - _glthread_Mutex Mutex; /**< for thread safety */ - GLint RefCount; /**< reference count */ - GLuint Name; /**< the user-visible texture object ID */ - GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ - - struct gl_sampler_object Sampler; - - GLfloat Priority; /**< in [0,1] */ - GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ - GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */ - GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ - GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ - GLint CropRect[4]; /**< GL_OES_draw_texture */ - GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */ - GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */ - GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ - GLboolean _Complete; /**< Is texture object complete? */ - GLboolean _RenderToTexture; /**< Any rendering to this texture? */ - GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ - - /** Actual texture images, indexed by [cube face] and [mipmap level] */ - struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; - - /** GL_ARB_texture_buffer_object */ - struct gl_buffer_object *BufferObject; - GLenum BufferObjectFormat; - - /** GL_EXT_paletted_texture */ - struct gl_color_table Palette; - - /** - * \name For device driver. - * Note: instead of attaching driver data to this pointer, it's preferable - * to instead use this struct as a base class for your own texture object - * class. Driver->NewTextureObject() can be used to implement the - * allocation. - */ - void *DriverData; /**< Arbitrary device driver data */ -}; - - -/** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */ -#define MAX_COMBINER_TERMS 4 - - -/** - * Texture combine environment state. - */ -struct gl_tex_env_combine_state -{ - GLenum ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ - GLenum ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ - /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */ - GLenum SourceRGB[MAX_COMBINER_TERMS]; - GLenum SourceA[MAX_COMBINER_TERMS]; - /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */ - GLenum OperandRGB[MAX_COMBINER_TERMS]; - GLenum OperandA[MAX_COMBINER_TERMS]; - GLuint ScaleShiftRGB; /**< 0, 1 or 2 */ - GLuint ScaleShiftA; /**< 0, 1 or 2 */ - GLuint _NumArgsRGB; /**< Number of inputs used for the RGB combiner */ - GLuint _NumArgsA; /**< Number of inputs used for the A combiner */ -}; - - -/** - * Texture coord generation state. - */ -struct gl_texgen -{ - GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ - GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ - GLfloat ObjectPlane[4]; - GLfloat EyePlane[4]; -}; - - -/** - * Texture unit state. Contains enable flags, texture environment/function/ - * combiners, texgen state, and pointers to current texture objects. - */ -struct gl_texture_unit -{ - GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */ - GLbitfield _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ - - GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ - GLclampf EnvColor[4]; - GLfloat EnvColorUnclamped[4]; - - struct gl_texgen GenS; - struct gl_texgen GenT; - struct gl_texgen GenR; - struct gl_texgen GenQ; - GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ - GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ - - GLfloat LodBias; /**< for biasing mipmap levels */ - GLenum BumpTarget; - GLfloat RotMatrix[4]; /* 2x2 matrix */ - - /** Current sampler object (GL_ARB_sampler_objects) */ - struct gl_sampler_object *Sampler; - - /** - * \name GL_EXT_texture_env_combine - */ - struct gl_tex_env_combine_state Combine; - - /** - * Derived state based on \c EnvMode and the \c BaseFormat of the - * currently enabled texture. - */ - struct gl_tex_env_combine_state _EnvMode; - - /** - * Currently enabled combiner state. This will point to either - * \c Combine or \c _EnvMode. - */ - struct gl_tex_env_combine_state *_CurrentCombine; - - /** Current texture object pointers */ - struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; - - /** Points to highest priority, complete and enabled texture object */ - struct gl_texture_object *_Current; -}; - - -/** - * Texture attribute group (GL_TEXTURE_BIT). - */ -struct gl_texture_attrib -{ - GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ - struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; - - struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; - - /** GL_ARB_texture_buffer_object */ - struct gl_buffer_object *BufferObject; - - /** GL_ARB_seamless_cubemap */ - GLboolean CubeMapSeamless; - - /** GL_EXT_shared_texture_palette */ - GLboolean SharedPalette; - struct gl_color_table Palette; - - /** Texture units/samplers used by vertex or fragment texturing */ - GLbitfield _EnabledUnits; - - /** Texture coord units/sets used for fragment texturing */ - GLbitfield _EnabledCoordUnits; - - /** Texture coord units that have texgen enabled */ - GLbitfield _TexGenEnabled; - - /** Texture coord units that have non-identity matrices */ - GLbitfield _TexMatEnabled; - - /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ - GLbitfield _GenFlags; -}; - - -/** - * Transformation attribute group (GL_TRANSFORM_BIT). - */ -struct gl_transform_attrib -{ - GLenum MatrixMode; /**< Matrix mode */ - GLfloat EyeUserPlane[MAX_CLIP_PLANES][4]; /**< User clip planes */ - GLfloat _ClipUserPlane[MAX_CLIP_PLANES][4]; /**< derived */ - GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ - GLboolean Normalize; /**< Normalize all normals? */ - GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ - GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ - GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ - - GLfloat CullEyePos[4]; - GLfloat CullObjPos[4]; -}; - - -/** - * Viewport attribute group (GL_VIEWPORT_BIT). - */ -struct gl_viewport_attrib -{ - GLint X, Y; /**< position */ - GLsizei Width, Height; /**< size */ - GLfloat Near, Far; /**< Depth buffer range */ - GLmatrix _WindowMap; /**< Mapping transformation as a matrix. */ -}; - - -/** - * GL_ARB_vertex/pixel_buffer_object buffer object - */ -struct gl_buffer_object -{ - _glthread_Mutex Mutex; - GLint RefCount; - GLuint Name; - GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ - GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ - GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ - /** Fields describing a mapped buffer */ - /*@{*/ - GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */ - GLvoid *Pointer; /**< User-space address of mapping */ - GLintptr Offset; /**< Mapped offset */ - GLsizeiptr Length; /**< Mapped length */ - /*@}*/ - GLboolean Written; /**< Ever written to? (for debugging) */ - GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ -}; - - -/** - * Client pixel packing/unpacking attributes - */ -struct gl_pixelstore_attrib -{ - GLint Alignment; - GLint RowLength; - GLint SkipPixels; - GLint SkipRows; - GLint ImageHeight; - GLint SkipImages; - GLboolean SwapBytes; - GLboolean LsbFirst; - GLboolean ClientStorage; /**< GL_APPLE_client_storage */ - GLboolean Invert; /**< GL_MESA_pack_invert */ - struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */ -}; - - -/** - * Client vertex array attributes - */ -struct gl_client_array -{ - GLint Size; /**< components per element (1,2,3,4) */ - GLenum Type; /**< datatype: GL_FLOAT, GL_INT, etc */ - GLenum Format; /**< default: GL_RGBA, but may be GL_BGRA */ - GLsizei Stride; /**< user-specified stride */ - GLsizei StrideB; /**< actual stride in bytes */ - const GLubyte *Ptr; /**< Points to array data */ - GLboolean Enabled; /**< Enabled flag is a boolean */ - GLboolean Normalized; /**< GL_ARB_vertex_program */ - GLboolean Integer; /**< Integer-valued? */ - GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */ - GLuint _ElementSize; /**< size of each element in bytes */ - - struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */ - GLuint _MaxElement; /**< max element index into array buffer + 1 */ -}; - - -/** - * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object - * extension, but a nice encapsulation in any case. - */ -struct gl_array_object -{ - /** Name of the array object as received from glGenVertexArrayAPPLE. */ - GLuint Name; - - GLint RefCount; - _glthread_Mutex Mutex; - GLboolean VBOonly; /**< require all arrays to live in VBOs? */ - - /** Conventional vertex arrays */ - /*@{*/ - struct gl_client_array Vertex; - struct gl_client_array Weight; - struct gl_client_array Normal; - struct gl_client_array Color; - struct gl_client_array SecondaryColor; - struct gl_client_array FogCoord; - struct gl_client_array Index; - struct gl_client_array EdgeFlag; - struct gl_client_array TexCoord[MAX_TEXTURE_COORD_UNITS]; - struct gl_client_array PointSize; - /*@}*/ - - /** - * Generic arrays for vertex programs/shaders. - * For NV vertex programs, these attributes alias and take priority - * over the conventional attribs above. For ARB vertex programs and - * GLSL vertex shaders, these attributes are separate. - */ - struct gl_client_array VertexAttrib[MAX_VERTEX_GENERIC_ATTRIBS]; - - /** Mask of _NEW_ARRAY_* values indicating which arrays are enabled */ - GLbitfield _Enabled; - - /** - * Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs - * we can determine the max legal (in bounds) glDrawElements array index. - */ - GLuint _MaxElement; -}; - - -/** - * Vertex array state - */ -struct gl_array_attrib -{ - /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ - struct gl_array_object *ArrayObj; - - /** The default vertex array object */ - struct gl_array_object *DefaultArrayObj; - - /** Array objects (GL_ARB/APPLE_vertex_array_object) */ - struct _mesa_HashTable *Objects; - - GLint ActiveTexture; /**< Client Active Texture */ - GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ - GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ - - /** GL 3.1 (slightly different from GL_NV_primitive_restart) */ - GLboolean PrimitiveRestart; - GLuint RestartIndex; - - GLbitfield NewState; /**< mask of _NEW_ARRAY_* values */ - GLboolean RebindArrays; /**< whether the VBO module should rebind arrays */ - - /* GL_ARB_vertex_buffer_object */ - struct gl_buffer_object *ArrayBufferObj; - struct gl_buffer_object *ElementArrayBufferObj; -}; - - -/** - * Feedback buffer state - */ -struct gl_feedback +struct gl_transform_feedback_varying_info { + char *Name; GLenum Type; - GLbitfield _Mask; /**< FB_* bits */ - GLfloat *Buffer; - GLuint BufferSize; - GLuint Count; + GLint Size; }; /** - * Selection buffer state + * Per-output info vertex shaders for transform feedback. */ -struct gl_selection +struct gl_transform_feedback_output { - GLuint *Buffer; /**< selection buffer */ - GLuint BufferSize; /**< size of the selection buffer */ - GLuint BufferCount; /**< number of values in the selection buffer */ - GLuint Hits; /**< number of records in the selection buffer */ - GLuint NameStackDepth; /**< name stack depth */ - GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */ - GLboolean HitFlag; /**< hit flag */ - GLfloat HitMinZ; /**< minimum hit depth */ - GLfloat HitMaxZ; /**< maximum hit depth */ -}; + unsigned OutputRegister; + unsigned OutputBuffer; + unsigned NumComponents; + /** offset (in DWORDs) of this output within the interleaved structure */ + unsigned DstOffset; -/** - * 1-D Evaluator control points - */ -struct gl_1d_map -{ - GLuint Order; /**< Number of control points */ - GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */ - GLfloat *Points; /**< Points to contiguous control points */ -}; - - -/** - * 2-D Evaluator control points - */ -struct gl_2d_map -{ - GLuint Uorder; /**< Number of control points in U dimension */ - GLuint Vorder; /**< Number of control points in V dimension */ - GLfloat u1, u2, du; - GLfloat v1, v2, dv; - GLfloat *Points; /**< Points to contiguous control points */ -}; - - -/** - * All evaluator control point state - */ -struct gl_evaluators -{ - /** - * \name 1-D maps + /** + * Offset into the output register of the data to output. For example, + * if NumComponents is 2 and ComponentOffset is 1, then the data to + * offset is in the y and z components of the output register. */ - /*@{*/ - struct gl_1d_map Map1Vertex3; - struct gl_1d_map Map1Vertex4; - struct gl_1d_map Map1Index; - struct gl_1d_map Map1Color4; - struct gl_1d_map Map1Normal; - struct gl_1d_map Map1Texture1; - struct gl_1d_map Map1Texture2; - struct gl_1d_map Map1Texture3; - struct gl_1d_map Map1Texture4; - struct gl_1d_map Map1Attrib[16]; /**< GL_NV_vertex_program */ - /*@}*/ - - /** - * \name 2-D maps - */ - /*@{*/ - struct gl_2d_map Map2Vertex3; - struct gl_2d_map Map2Vertex4; - struct gl_2d_map Map2Index; - struct gl_2d_map Map2Color4; - struct gl_2d_map Map2Normal; - struct gl_2d_map Map2Texture1; - struct gl_2d_map Map2Texture2; - struct gl_2d_map Map2Texture3; - struct gl_2d_map Map2Texture4; - struct gl_2d_map Map2Attrib[16]; /**< GL_NV_vertex_program */ - /*@}*/ + unsigned ComponentOffset; }; +/** Post-link transform feedback info. */ +struct gl_transform_feedback_info +{ + unsigned NumOutputs; + + /** + * Number of transform feedback buffers in use by this program. + */ + unsigned NumBuffers; + + struct gl_transform_feedback_output *Outputs; + + /** Transform feedback varyings used for the linking of this shader program. + * + * Use for glGetTransformFeedbackVarying(). + */ + struct gl_transform_feedback_varying_info *Varyings; + GLint NumVarying; + + /** + * Total number of components stored in each buffer. This may be used by + * hardware back-ends to determine the correct stride when interleaving + * multiple transform feedback outputs in the same buffer. + */ + unsigned BufferStride[MAX_FEEDBACK_BUFFERS]; +}; + + + + + /** * Names of the various vertex/fragment program register files, etc. * @@ -1826,15 +437,44 @@ typedef enum typedef enum { SYSTEM_VALUE_FRONT_FACE, /**< Fragment shader only (not done yet) */ + SYSTEM_VALUE_VERTEX_ID, /**< Vertex shader only */ SYSTEM_VALUE_INSTANCE_ID, /**< Vertex shader only */ SYSTEM_VALUE_MAX /**< Number of values */ } gl_system_value; -/** Vertex and fragment instructions */ -struct prog_instruction; -struct gl_program_parameter_list; -struct gl_uniform_list; +/** + * The possible interpolation qualifiers that can be applied to a fragment + * shader input in GLSL. + * + * Note: INTERP_QUALIFIER_NONE must be 0 so that memsetting the + * gl_fragment_program data structure to 0 causes the default behavior. + */ +enum glsl_interp_qualifier +{ + INTERP_QUALIFIER_NONE = 0, + INTERP_QUALIFIER_SMOOTH, + INTERP_QUALIFIER_FLAT, + INTERP_QUALIFIER_NOPERSPECTIVE +}; + + +/** + * \brief Layout qualifiers for gl_FragDepth. + * + * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with + * a layout qualifier. + * + * \see enum ir_depth_layout + */ +enum gl_frag_depth_layout +{ + FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */ + FRAG_DEPTH_LAYOUT_ANY, + FRAG_DEPTH_LAYOUT_GREATER, + FRAG_DEPTH_LAYOUT_LESS, + FRAG_DEPTH_LAYOUT_UNCHANGED +}; /** @@ -1849,32 +489,11 @@ struct gl_program GLenum Format; /**< String encoding format */ GLboolean Resident; - struct prog_instruction *Instructions; - - GLbitfield InputsRead; /**< Bitmask of which input regs are read */ - GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */ - GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */ - GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */ - GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */ - GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */ - GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */ - GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */ - - - /** Named parameters, constants, etc. from program text */ - struct gl_program_parameter_list *Parameters; /** Numbered local parameters */ GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; - /** Vertex/fragment shader varying vars */ - struct gl_program_parameter_list *Varying; - /** Vertex program user-defined attributes */ - struct gl_program_parameter_list *Attributes; - /** Map from sampler unit to texture unit (set by glUniform1i()) */ GLubyte SamplerUnits[MAX_SAMPLERS]; - /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ - gl_texture_index SamplerTargets[MAX_SAMPLERS]; /** Bitmask of which register files are read/written with indirect * addressing. Mask of (1 << PROGRAM_x) bits. @@ -1912,6 +531,7 @@ struct gl_vertex_program struct gl_program Base; /**< base class */ GLboolean IsNVProgram; /**< is this a GL_NV_vertex_program program? */ GLboolean IsPositionInvariant; + GLboolean UsesClipDistance; }; @@ -1927,203 +547,6 @@ struct gl_geometry_program }; -/** Fragment program object */ -struct gl_fragment_program -{ - struct gl_program Base; /**< base class */ - GLboolean UsesKill; /**< shader uses KIL instruction */ - GLboolean OriginUpperLeft; - GLboolean PixelCenterInteger; - enum gl_frag_depth_layout FragDepthLayout; -}; - - -/** - * State common to vertex and fragment programs. - */ -struct gl_program_state -{ - GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ - const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ -}; - - -/** - * Context state for vertex programs. - */ -struct gl_vertex_program_state -{ - GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ - GLboolean _Enabled; /**< Enabled and _valid_ user program? */ - GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ - GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ - struct gl_vertex_program *Current; /**< User-bound vertex program */ - - /** Currently enabled and valid vertex program (including internal - * programs, user-defined vertex programs and GLSL vertex shaders). - * This is the program we must use when rendering. - */ - struct gl_vertex_program *_Current; - - GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /* For GL_NV_vertex_program only: */ - GLenum TrackMatrix[MAX_PROGRAM_ENV_PARAMS / 4]; - GLenum TrackMatrixTransform[MAX_PROGRAM_ENV_PARAMS / 4]; - - /** Should fixed-function T&L be implemented with a vertex prog? */ - GLboolean _MaintainTnlProgram; - - /** Program to emulate fixed-function T&L (see above) */ - struct gl_vertex_program *_TnlProgram; - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; - - GLboolean _Overriden; -}; - - -/** - * Context state for geometry programs. - */ -struct gl_geometry_program_state -{ - GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */ - GLboolean _Enabled; /**< Enabled and valid program? */ - struct gl_geometry_program *Current; /**< user-bound geometry program */ - - /** Currently enabled and valid program (including internal programs - * and compiled shader programs). - */ - struct gl_geometry_program *_Current; - - GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; -}; - -/** - * Context state for fragment programs. - */ -struct gl_fragment_program_state -{ - GLboolean Enabled; /**< User-set fragment program enable flag */ - GLboolean _Enabled; /**< Enabled and _valid_ user program? */ - struct gl_fragment_program *Current; /**< User-bound fragment program */ - - /** Currently enabled and valid fragment program (including internal - * programs, user-defined fragment programs and GLSL fragment shaders). - * This is the program we must use when rendering. - */ - struct gl_fragment_program *_Current; - - GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /** Should fixed-function texturing be implemented with a fragment prog? */ - GLboolean _MaintainTexEnvProgram; - - /** Program to emulate fixed-function texture env/combine (see above) */ - struct gl_fragment_program *_TexEnvProgram; - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; -}; - - -/** - * ATI_fragment_shader runtime state - */ -#define ATI_FS_INPUT_PRIMARY 0 -#define ATI_FS_INPUT_SECONDARY 1 - -struct atifs_instruction; -struct atifs_setupinst; - -/** - * ATI fragment shader - */ -struct ati_fragment_shader -{ - GLuint Id; - GLint RefCount; - struct atifs_instruction *Instructions[2]; - struct atifs_setupinst *SetupInst[2]; - GLfloat Constants[8][4]; - GLbitfield LocalConstDef; /**< Indicates which constants have been set */ - GLubyte numArithInstr[2]; - GLubyte regsAssigned[2]; - GLubyte NumPasses; /**< 1 or 2 */ - GLubyte cur_pass; - GLubyte last_optype; - GLboolean interpinp1; - GLboolean isValid; - GLuint swizzlerq; -}; - -/** - * Context state for GL_ATI_fragment_shader - */ -struct gl_ati_fragment_shader_state -{ - GLboolean Enabled; - GLboolean _Enabled; /**< enabled and valid shader? */ - GLboolean Compiling; - GLfloat GlobalConstants[8][4]; - struct ati_fragment_shader *Current; -}; - - -/** - * Occlusion/timer query object. - */ -struct gl_query_object -{ - GLenum Target; /**< The query target, when active */ - GLuint Id; /**< hash table ID/name */ - GLuint64EXT Result; /**< the counter */ - GLboolean Active; /**< inside Begin/EndQuery */ - GLboolean Ready; /**< result is ready? */ -}; - - -/** - * Context state for query objects. - */ -struct gl_query_state -{ - struct _mesa_HashTable *QueryObjects; - struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ - struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ - - /** GL_NV_conditional_render */ - struct gl_query_object *CondRenderQuery; - - /** GL_EXT_transform_feedback */ - struct gl_query_object *PrimitivesGenerated; - struct gl_query_object *PrimitivesWritten; - - /** GL_ARB_timer_query */ - struct gl_query_object *TimeElapsed; - - GLenum CondRenderMode; -}; - - -/** Sync object state */ -struct gl_sync_object { - struct simple_node link; - GLenum Type; /**< GL_SYNC_FENCE */ - GLuint Name; /**< Fence name */ - GLint RefCount; /**< Reference count */ - GLboolean DeletePending; /**< Object was deleted while there were still - * live references (e.g., sync not yet finished) - */ - GLenum SyncCondition; - GLbitfield Flags; /**< Flags passed to glFenceSync */ - GLuint StatusFlag:1; /**< Has the sync object been signaled? */ -}; /** Set by #pragma directives */ @@ -2146,14 +569,41 @@ struct gl_shader GLint RefCount; /**< Reference count */ GLboolean DeletePending; GLboolean CompileStatus; - const GLchar *Source; /**< Source code string */ + const char *Source; /**< Source code string */ GLuint SourceChecksum; /**< for debug/logging purposes */ struct gl_program *Program; /**< Post-compile assembly code */ - GLchar *InfoLog; + char *InfoLog; struct gl_sl_pragmas Pragmas; unsigned Version; /**< GLSL version used for linking */ + /** + * \name Sampler tracking + * + * \note Each of these fields is only set post-linking. + */ + /*@{*/ + unsigned num_samplers; /**< Number of samplers used by this shader. */ + GLbitfield active_samplers; /**< Bitfield of which samplers are used */ + GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */ + /*@}*/ + + /** + * Number of uniform components used by this shader. + * + * This field is only set post-linking. + */ + unsigned num_uniform_components; + + /** + * This shader's uniform block information. + * + * The offsets of the variables are assigned only for shaders in a program's + * _LinkedShaders[]. + */ + struct gl_uniform_block *UniformBlocks; + unsigned NumUniformBlocks; + struct exec_list *ir; struct glsl_symbol_table *symbols; @@ -2163,6 +613,50 @@ struct gl_shader }; +/** + * Shader stages. Note that these will become 5 with tessellation. + * These MUST have the same values as gallium's PIPE_SHADER_* + */ +typedef enum +{ + MESA_SHADER_VERTEX = 0, + MESA_SHADER_FRAGMENT = 1, + MESA_SHADER_GEOMETRY = 2, + MESA_SHADER_TYPES = 3 +} gl_shader_type; + +struct gl_uniform_buffer_variable +{ + char *Name; + const struct glsl_type *Type; + unsigned int Buffer; + unsigned int Offset; + GLboolean RowMajor; +}; + +struct gl_uniform_block +{ + /** Declared name of the uniform block */ + char *Name; + + /** Array of supplemental information about UBO ir_variables. */ + struct gl_uniform_buffer_variable *Uniforms; + GLuint NumUniforms; + + /** + * Index (GL_UNIFORM_BLOCK_BINDING) into ctx->UniformBufferBindings[] to use + * with glBindBufferBase to bind a buffer object to this uniform block. When + * updated in the program, _NEW_BUFFER_OBJECT will be set. + */ + GLuint Binding; + + /** + * Minimum size of a buffer object to back this uniform buffer + * (GL_UNIFORM_BLOCK_DATA_SIZE). + */ + GLuint UniformBufferSize; +}; + /** * A GLSL program object. * Basically a linked collection of vertex and fragment shaders. @@ -2174,19 +668,58 @@ struct gl_shader_program GLint RefCount; /**< Reference count */ GLboolean DeletePending; + /** + * Flags that the linker should not reject the program if it lacks + * a vertex or fragment shader. GLES2 doesn't allow separate + * shader objects, and would reject them. However, we internally + * build separate shader objects for fixed function programs, which + * we use for drivers/common/meta.c and for handling + * _mesa_update_state with no program bound (for example in + * glClear()). + */ + GLboolean InternalSeparateShader; + GLuint NumShaders; /**< number of attached shaders */ struct gl_shader **Shaders; /**< List of attached the shaders */ - /** User-defined attribute bindings (glBindAttribLocation) */ - struct gl_program_parameter_list *Attributes; + /** + * User-defined attribute bindings + * + * These are set via \c glBindAttribLocation and are used to direct the + * GLSL linker. These are \b not the values used in the compiled shader, + * and they are \b not the values returned by \c glGetAttribLocation. + */ + struct string_to_uint_map *AttributeBindings; - /** Transform feedback varyings */ + /** + * User-defined fragment data bindings + * + * These are set via \c glBindFragDataLocation and are used to direct the + * GLSL linker. These are \b not the values used in the compiled shader, + * and they are \b not the values returned by \c glGetFragDataLocation. + */ + struct string_to_uint_map *FragDataBindings; + struct string_to_uint_map *FragDataIndexBindings; + + /** + * Transform feedback varyings last specified by + * glTransformFeedbackVaryings(). + * + * For the current set of transform feeedback varyings used for transform + * feedback output, see LinkedTransformFeedback. + */ struct { GLenum BufferMode; GLuint NumVarying; - GLchar **VaryingNames; /**< Array [NumVarying] of char * */ + char **VaryingNames; /**< Array [NumVarying] of char * */ } TransformFeedback; + /** Post-link transform feedback info. */ + struct gl_transform_feedback_info LinkedTransformFeedback; + + /** Post-link gl_FragDepth layout for ARB_conservative_depth. */ + enum gl_frag_depth_layout FragDepthLayout; + /** Geometry shader state - copied into gl_geometry_program at link time */ struct { GLint VerticesOut; @@ -2195,16 +728,54 @@ struct gl_shader_program GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ } Geom; + /** Vertex shader state - copied into gl_vertex_program at link time */ + struct { + GLboolean UsesClipDistance; /**< True if gl_ClipDistance is written to. */ + GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or + 0 if not present. */ + } Vert; + /* post-link info: */ - struct gl_vertex_program *VertexProgram; /**< Linked vertex program */ - struct gl_fragment_program *FragmentProgram; /**< Linked fragment prog */ - struct gl_geometry_program *GeometryProgram; /**< Linked geometry prog */ - struct gl_uniform_list *Uniforms; - struct gl_program_parameter_list *Varying; + unsigned NumUserUniformStorage; + struct gl_uniform_storage *UniformStorage; + + struct gl_uniform_block *UniformBlocks; + unsigned NumUniformBlocks; + + /** + * Indices into the _LinkedShaders's UniformBlocks[] array for each stage + * they're used in, or -1. + * + * This is used to maintain the Binding values of the stage's UniformBlocks[] + * and to answer the GL_UNIFORM_BLOCK_REFERENCED_BY_*_SHADER queries. + */ + int *UniformBlockStageIndex[MESA_SHADER_TYPES]; + + /** + * Map of active uniform names to locations + * + * Maps any active uniform that is not an array element to a location. + * Each active uniform, including individual structure members will appear + * in this map. This roughly corresponds to the set of names that would be + * enumerated by \c glGetActiveUniform. + */ + struct string_to_uint_map *UniformHash; + + /** + * Map from sampler unit to texture unit (set by glUniform1i()) + * + * A sampler unit is associated with each sampler uniform by the linker. + * The sampler unit associated with each uniform is stored in the + * \c gl_uniform_storage::sampler field. + */ + GLubyte SamplerUnits[MAX_SAMPLERS]; + /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ + gl_texture_index SamplerTargets[MAX_SAMPLERS]; + GLboolean LinkStatus; /**< GL_LINK_STATUS */ GLboolean Validated; GLboolean _Used; /**< Ever used for drawing? */ - GLchar *InfoLog; + char *InfoLog; unsigned Version; /**< GLSL version used for linking */ @@ -2226,34 +797,9 @@ struct gl_shader_program #define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */ #define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */ #define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */ -#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */ +#define GLSL_REPORT_ERRORS 0x100 /**< Print compilation errors */ -/** - * Context state for GLSL vertex/fragment shaders. - */ -struct gl_shader_state -{ - /** - * Programs used for rendering - * - * There is a separate program set for each shader stage. If - * GL_EXT_separate_shader_objects is not supported, each of these must point - * to \c NULL or to the same program. - */ - struct gl_shader_program *CurrentVertexProgram; - struct gl_shader_program *CurrentGeometryProgram; - struct gl_shader_program *CurrentFragmentProgram; - - /** - * Program used by glUniform calls. - * - * Explicitly set by \c glUseProgram and \c glActiveProgramEXT. - */ - struct gl_shader_program *ActiveProgram; - - GLbitfield Flags; /**< Mask of GLSL_x flags */ -}; /** * Compiler options for a single GLSL shaders type @@ -2263,17 +809,13 @@ struct gl_shader_compiler_options /** Driver-selectable options: */ GLboolean EmitCondCodes; /**< Use condition codes? */ GLboolean EmitNVTempInitialization; /**< 0-fill NV temp registers */ - /** - * Attempts to flatten all ir_if (OPCODE_IF) for GPUs that can't - * support control flow. - */ - GLboolean EmitNoIfs; GLboolean EmitNoLoops; GLboolean EmitNoFunctions; GLboolean EmitNoCont; /**< Emit CONT opcode? */ GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */ GLboolean EmitNoPow; /**< Emit POW opcodes? */ + GLboolean LowerClipDistance; /**< Lower gl_ClipDistance from float[8] to vec4[2]? */ /** * \name Forms of indirect addressing the driver cannot do. @@ -2285,335 +827,16 @@ struct gl_shader_compiler_options GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ /*@}*/ + GLuint MaxIfDepth; /**< Maximum nested IF blocks */ GLuint MaxUnrollIterations; struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */ }; -/** - * Transform feedback object state - */ -struct gl_transform_feedback_object -{ - GLuint Name; /**< AKA the object ID */ - GLint RefCount; - GLboolean Active; /**< Is transform feedback enabled? */ - GLboolean Paused; /**< Is transform feedback paused? */ - /** The feedback buffers */ - GLuint BufferNames[MAX_FEEDBACK_ATTRIBS]; - struct gl_buffer_object *Buffers[MAX_FEEDBACK_ATTRIBS]; - /** Start of feedback data in dest buffer */ - GLintptr Offset[MAX_FEEDBACK_ATTRIBS]; - /** Max data to put into dest buffer (in bytes) */ - GLsizeiptr Size[MAX_FEEDBACK_ATTRIBS]; -}; -/** - * Context state for transform feedback. - */ -struct gl_transform_feedback -{ - GLenum Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */ - - GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ - - /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */ - struct gl_buffer_object *CurrentBuffer; - - /** The table of all transform feedback objects */ - struct _mesa_HashTable *Objects; - - /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */ - struct gl_transform_feedback_object *CurrentObject; - - /** The default xform-fb object (Name==0) */ - struct gl_transform_feedback_object *DefaultObject; -}; - - - -/** - * State which can be shared by multiple contexts: - */ -struct gl_shared_state -{ - _glthread_Mutex Mutex; /**< for thread safety */ - GLint RefCount; /**< Reference count */ - struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ - struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ - - /** Default texture objects (shared by all texture units) */ - struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; - - /** Fallback texture used when a bound texture is incomplete */ - struct gl_texture_object *FallbackTex; - - /** - * \name Thread safety and statechange notification for texture - * objects. - * - * \todo Improve the granularity of locking. - */ - /*@{*/ - _glthread_Mutex TexMutex; /**< texobj thread safety */ - GLuint TextureStateStamp; /**< state notification for shared tex */ - /*@}*/ - - /** Default buffer object for vertex arrays that aren't in VBOs */ - struct gl_buffer_object *NullBufferObj; - - /** - * \name Vertex/geometry/fragment programs - */ - /*@{*/ - struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ - struct gl_vertex_program *DefaultVertexProgram; - struct gl_fragment_program *DefaultFragmentProgram; - struct gl_geometry_program *DefaultGeometryProgram; - /*@}*/ - - /* GL_ATI_fragment_shader */ - struct _mesa_HashTable *ATIShaders; - struct ati_fragment_shader *DefaultFragmentShader; - - struct _mesa_HashTable *BufferObjects; - - /** Table of both gl_shader and gl_shader_program objects */ - struct _mesa_HashTable *ShaderObjects; - - /* GL_EXT_framebuffer_object */ - struct _mesa_HashTable *RenderBuffers; - struct _mesa_HashTable *FrameBuffers; - - /* GL_ARB_sync */ - struct simple_node SyncObjects; - - /** GL_ARB_sampler_objects */ - struct _mesa_HashTable *SamplerObjects; - - void *DriverData; /**< Device driver shared state */ -}; - - - - -/** - * A renderbuffer stores colors or depth values or stencil values. - * A framebuffer object will have a collection of these. - * Data are read/written to the buffer with a handful of Get/Put functions. - * - * Instances of this object are allocated with the Driver's NewRenderbuffer - * hook. Drivers will likely wrap this class inside a driver-specific - * class to simulate inheritance. - */ -struct gl_renderbuffer -{ - _glthread_Mutex Mutex; /**< for thread safety */ - GLuint ClassID; /**< Useful for drivers */ - GLuint Name; - GLint RefCount; - GLuint Width, Height; - GLint RowStride; /**< Padded width in units of pixels */ - GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ - - GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ - - GLubyte NumSamples; - - GLenum InternalFormat; /**< The user-specified format */ - GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or - GL_STENCIL_INDEX. */ - gl_format Format; /**< The actual renderbuffer memory format */ - - GLenum DataType; /**< Type of values passed to the Get/Put functions */ - GLvoid *Data; /**< This may not be used by some kinds of RBs */ - - /* Used to wrap one renderbuffer around another: */ - struct gl_renderbuffer *Wrapped; - - /* Delete this renderbuffer */ - void (*Delete)(struct gl_renderbuffer *rb); - - /* Allocate new storage for this renderbuffer */ - GLboolean (*AllocStorage)(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLenum internalFormat, - GLuint width, GLuint height); - - /* Lock/Unlock are called before/after calling the Get/Put functions. - * Not sure this is the right place for these yet. - void (*Lock)(struct gl_context *ctx, struct gl_renderbuffer *rb); - void (*Unlock)(struct gl_context *ctx, struct gl_renderbuffer *rb); - */ - - /* Return a pointer to the element/pixel at (x,y). - * Should return NULL if the buffer memory can't be directly addressed. - */ - void *(*GetPointer)(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y); - - /* Get/Read a row of values. - * The values will be of format _BaseFormat and type DataType. - */ - void (*GetRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values); - - /* Get/Read values at arbitrary locations. - * The values will be of format _BaseFormat and type DataType. - */ - void (*GetValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - const GLint x[], const GLint y[], void *values); - - /* Put/Write a row of values. - * The values will be of format _BaseFormat and type DataType. - */ - void (*PutRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, const void *values, const GLubyte *mask); - - /* Put/Write a row of RGB values. This is a special-case routine that's - * only used for RGBA renderbuffers when the source data is GL_RGB. That's - * a common case for glDrawPixels and some triangle routines. - * The values will be of format GL_RGB and type DataType. - */ - void (*PutRowRGB)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, const void *values, const GLubyte *mask); - - - /* Put/Write a row of identical values. - * The values will be of format _BaseFormat and type DataType. - */ - void (*PutMonoRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, const void *value, const GLubyte *mask); - - /* Put/Write values at arbitrary locations. - * The values will be of format _BaseFormat and type DataType. - */ - void (*PutValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - const GLint x[], const GLint y[], const void *values, - const GLubyte *mask); - /* Put/Write identical values at arbitrary locations. - * The values will be of format _BaseFormat and type DataType. - */ - void (*PutMonoValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLuint count, const GLint x[], const GLint y[], - const void *value, const GLubyte *mask); -}; - - -/** - * A renderbuffer attachment points to either a texture object (and specifies - * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. - */ -struct gl_renderbuffer_attachment -{ - GLenum Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */ - GLboolean Complete; - - /** - * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the - * application supplied renderbuffer object. - */ - struct gl_renderbuffer *Renderbuffer; - - /** - * If \c Type is \c GL_TEXTURE, this stores a pointer to the application - * supplied texture object. - */ - struct gl_texture_object *Texture; - GLuint TextureLevel; /**< Attached mipmap level. */ - GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ - GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D - * and 2D array textures */ -}; - - -/** - * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). - * In C++ terms, think of this as a base class from which device drivers - * will make derived classes. - */ -struct gl_framebuffer -{ - _glthread_Mutex Mutex; /**< for thread safety */ - /** - * If zero, this is a window system framebuffer. If non-zero, this - * is a FBO framebuffer; note that for some devices (i.e. those with - * a natural pixel coordinate system for FBOs that differs from the - * OpenGL/Mesa coordinate system), this means that the viewport, - * polygon face orientation, and polygon stipple will have to be inverted. - */ - GLuint Name; - - GLint RefCount; - GLboolean DeletePending; - - /** - * The framebuffer's visual. Immutable if this is a window system buffer. - * Computed from attachments if user-made FBO. - */ - struct gl_config Visual; - - GLboolean Initialized; - - GLuint Width, Height; /**< size of frame buffer in pixels */ - - /** \name Drawing bounds (Intersection of buffer size and scissor box) */ - /*@{*/ - GLint _Xmin, _Xmax; /**< inclusive */ - GLint _Ymin, _Ymax; /**< exclusive */ - /*@}*/ - - /** \name Derived Z buffer stuff */ - /*@{*/ - GLuint _DepthMax; /**< Max depth buffer value */ - GLfloat _DepthMaxF; /**< Float max depth buffer value */ - GLfloat _MRD; /**< minimum resolvable difference in Z values */ - /*@}*/ - - /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ - GLenum _Status; - - /** Integer color values */ - GLboolean _IntegerColor; - - /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ - struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; - - /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER - * attribute group and GL_PIXEL attribute group, respectively. - */ - GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS]; - GLenum ColorReadBuffer; - - /** Computed from ColorDraw/ReadBuffer above */ - GLuint _NumColorDrawBuffers; - GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */ - GLint _ColorReadBufferIndex; /* -1 = None */ - struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; - struct gl_renderbuffer *_ColorReadBuffer; - - /** The Actual depth/stencil buffers to use. May be wrappers around the - * depth/stencil buffers attached above. */ - struct gl_renderbuffer *_DepthBuffer; - struct gl_renderbuffer *_StencilBuffer; - - /** Delete this framebuffer */ - void (*Delete)(struct gl_framebuffer *fb); -}; - - -/** - * Precision info for shader datatypes. See glGetShaderPrecisionFormat(). - */ -struct gl_precision -{ - GLushort RangeMin; /**< min value exponent */ - GLushort RangeMax; /**< max value exponent */ - GLushort Precision; /**< number of mantissa bits */ -}; - /** * Limits for vertex, geometry and fragment programs/shaders. @@ -2643,9 +866,9 @@ struct gl_program_constants GLuint MaxNativeParameters; /* For shaders */ GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */ - /* ES 2.0 and GL_ARB_ES2_compatibility */ - struct gl_precision LowFloat, MediumFloat, HighFloat; - struct gl_precision LowInt, MediumInt, HighInt; + /* GL_ARB_uniform_buffer_object */ + GLuint MaxUniformBlocks; + GLuint MaxCombinedUniformComponents; }; @@ -2697,6 +920,14 @@ struct gl_constants GLuint MaxProgramMatrices; GLuint MaxProgramMatrixStackDepth; + struct { + GLuint SamplesPassed; + GLuint TimeElapsed; + GLuint Timestamp; + GLuint PrimitivesGenerated; + GLuint PrimitivesWritten; + } QueryCounterBits; + /** vertex array / buffer object bounds checking */ GLboolean CheckArrayBounds; @@ -2711,19 +942,41 @@ struct gl_constants GLuint MaxVertexVaryingComponents; /**< Between vert and geom shader */ GLuint MaxGeometryVaryingComponents; /**< Between geom and frag shader */ + /** @{ + * GL_ARB_uniform_buffer_object + */ + GLuint MaxCombinedUniformBlocks; + GLuint MaxUniformBufferBindings; + GLuint MaxUniformBlockSize; + GLuint UniformBufferOffsetAlignment; + /** @} */ + /** GL_ARB_geometry_shader4 */ GLuint MaxGeometryOutputVertices; GLuint MaxGeometryTotalOutputComponents; GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ - /** Which texture units support GL_ATI_envmap_bumpmap as targets */ - GLbitfield SupportedBumpUnits; + /** + * Changes default GLSL extension behavior from "error" to "warn". It's out + * of spec, but it can make some apps work that otherwise wouldn't. + */ + GLboolean ForceGLSLExtensionsWarn; /** - * Maximum amount of time, measured in nanseconds, that the server can wait. + * Does the driver support real 32-bit integers? (Otherwise, integers are + * simulated via floats.) */ - GLuint64 MaxServerWaitTimeout; + GLboolean NativeIntegers; + + /** + * If the driver supports real 32-bit integers, what integer value should be + * used for boolean true in uniform uploads? (Usually 1 or ~0.) + */ + GLuint UniformBooleanTrue; + + /** Which texture units support GL_ATI_envmap_bumpmap as targets */ + GLbitfield SupportedBumpUnits; /** GL_EXT_provoking_vertex */ GLboolean QuadsFollowProvokingVertexConvention; @@ -2735,18 +988,47 @@ struct gl_constants GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ /** GL_EXT_transform_feedback */ - GLuint MaxTransformFeedbackSeparateAttribs; + GLuint MaxTransformFeedbackBuffers; GLuint MaxTransformFeedbackSeparateComponents; GLuint MaxTransformFeedbackInterleavedComponents; + GLuint MaxVertexStreams; /** GL_EXT_gpu_shader4 */ GLint MinProgramTexelOffset, MaxProgramTexelOffset; - /* GL_EXT_framebuffer_sRGB */ - GLboolean sRGBCapable; /* can enable sRGB blend/update on FBOs */ - /* GL_ARB_robustness */ GLenum ResetStrategy; + + /* GL_ARB_blend_func_extended */ + GLuint MaxDualSourceDrawBuffers; + + /** + * Whether the implementation strips out and ignores texture borders. + * + * Many GPU hardware implementations don't support rendering with texture + * borders and mipmapped textures. (Note: not static border color, but the + * old 1-pixel border around each edge). Implementations then have to do + * slow fallbacks to be correct, or just ignore the border and be fast but + * wrong. Setting the flag strips the border off of TexImage calls, + * providing "fast but wrong" at significantly reduced driver complexity. + * + * Texture borders are deprecated in GL 3.0. + **/ + GLboolean StripTextureBorder; + + /** + * For drivers which can do a better job at eliminating unused varyings + * and uniforms than the GLSL compiler. + * + * XXX Remove these as soon as a better solution is available. + */ + GLboolean GLSLSkipStrictMaxVaryingLimitCheck; + GLboolean GLSLSkipStrictMaxUniformLimitCheck; + + /** + * Force software support for primitive restart in the VBO module. + */ + GLboolean PrimitiveRestartInSoftware; }; @@ -2759,14 +1041,16 @@ struct gl_extensions GLboolean dummy; /* don't remove this! */ GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */ GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */ + GLboolean ANGLE_texture_compression_dxt; GLboolean ARB_ES2_compatibility; + GLboolean ARB_base_instance; GLboolean ARB_blend_func_extended; GLboolean ARB_color_buffer_float; + GLboolean ARB_conservative_depth; GLboolean ARB_copy_buffer; GLboolean ARB_depth_buffer_float; GLboolean ARB_depth_clamp; GLboolean ARB_depth_texture; - GLboolean ARB_draw_buffers; GLboolean ARB_draw_buffers_blend; GLboolean ARB_draw_elements_base_vertex; GLboolean ARB_draw_instanced; @@ -2781,55 +1065,46 @@ struct gl_extensions GLboolean ARB_half_float_vertex; GLboolean ARB_instanced_arrays; GLboolean ARB_map_buffer_range; - GLboolean ARB_multisample; - GLboolean ARB_multitexture; GLboolean ARB_occlusion_query; GLboolean ARB_occlusion_query2; GLboolean ARB_point_sprite; - GLboolean ARB_sampler_objects; GLboolean ARB_seamless_cube_map; + GLboolean ARB_shader_bit_encoding; GLboolean ARB_shader_objects; GLboolean ARB_shader_stencil_export; GLboolean ARB_shader_texture_lod; GLboolean ARB_shading_language_100; GLboolean ARB_shadow; - GLboolean ARB_shadow_ambient; GLboolean ARB_sync; GLboolean ARB_texture_border_clamp; GLboolean ARB_texture_buffer_object; - GLboolean ARB_texture_compression; GLboolean ARB_texture_compression_rgtc; GLboolean ARB_texture_cube_map; GLboolean ARB_texture_env_combine; GLboolean ARB_texture_env_crossbar; GLboolean ARB_texture_env_dot3; GLboolean ARB_texture_float; - GLboolean ARB_texture_mirrored_repeat; GLboolean ARB_texture_multisample; GLboolean ARB_texture_non_power_of_two; GLboolean ARB_texture_rg; GLboolean ARB_texture_rgb10_a2ui; + GLboolean ARB_texture_storage; GLboolean ARB_timer_query; GLboolean ARB_transform_feedback2; + GLboolean ARB_transform_feedback3; + GLboolean ARB_transform_feedback_instanced; GLboolean ARB_transpose_matrix; GLboolean ARB_uniform_buffer_object; - GLboolean ARB_vertex_array_object; - GLboolean ARB_vertex_buffer_object; GLboolean ARB_vertex_program; GLboolean ARB_vertex_shader; GLboolean ARB_vertex_type_2_10_10_10_rev; GLboolean ARB_window_pos; - GLboolean EXT_abgr; - GLboolean EXT_bgra; GLboolean EXT_blend_color; GLboolean EXT_blend_equation_separate; GLboolean EXT_blend_func_separate; - GLboolean EXT_blend_logic_op; GLboolean EXT_blend_minmax; - GLboolean EXT_blend_subtract; GLboolean EXT_clip_volume_hint; GLboolean EXT_compiled_vertex_array; - GLboolean EXT_copy_texture; GLboolean EXT_depth_bounds_test; GLboolean EXT_draw_buffers2; GLboolean EXT_draw_range_elements; @@ -2840,36 +1115,25 @@ struct gl_extensions GLboolean EXT_framebuffer_sRGB; GLboolean EXT_gpu_program_parameters; GLboolean EXT_gpu_shader4; - GLboolean EXT_multi_draw_arrays; - GLboolean EXT_paletted_texture; GLboolean EXT_packed_depth_stencil; GLboolean EXT_packed_float; GLboolean EXT_packed_pixels; GLboolean EXT_pixel_buffer_object; GLboolean EXT_point_parameters; - GLboolean EXT_polygon_offset; GLboolean EXT_provoking_vertex; GLboolean EXT_rescale_normal; GLboolean EXT_shadow_funcs; GLboolean EXT_secondary_color; GLboolean EXT_separate_shader_objects; GLboolean EXT_separate_specular_color; - GLboolean EXT_shared_texture_palette; - GLboolean EXT_stencil_wrap; GLboolean EXT_stencil_two_side; - GLboolean EXT_subtexture; - GLboolean EXT_texture; - GLboolean EXT_texture_object; GLboolean EXT_texture3D; GLboolean EXT_texture_array; GLboolean EXT_texture_compression_latc; GLboolean EXT_texture_compression_s3tc; - GLboolean EXT_texture_env_add; - GLboolean EXT_texture_env_combine; GLboolean EXT_texture_env_dot3; GLboolean EXT_texture_filter_anisotropic; GLboolean EXT_texture_integer; - GLboolean EXT_texture_lod_bias; GLboolean EXT_texture_mirror_clamp; GLboolean EXT_texture_shared_exponent; GLboolean EXT_texture_snorm; @@ -2878,16 +1142,12 @@ struct gl_extensions GLboolean EXT_texture_swizzle; GLboolean EXT_transform_feedback; GLboolean EXT_timer_query; - GLboolean EXT_vertex_array; GLboolean EXT_vertex_array_bgra; - GLboolean EXT_vertex_array_set; GLboolean OES_standard_derivatives; + GLboolean EXT_shadow_samplers; /* vendor extensions */ - GLboolean AMD_conservative_depth; GLboolean AMD_seamless_cubemap_per_texture; - GLboolean APPLE_client_storage; GLboolean APPLE_packed_pixels; - GLboolean APPLE_vertex_array_object; GLboolean APPLE_object_purgeable; GLboolean ATI_envmap_bumpmap; GLboolean ATI_texture_compression_3dc; @@ -2903,26 +1163,26 @@ struct gl_extensions GLboolean MESA_texture_array; GLboolean NV_blend_square; GLboolean NV_conditional_render; + GLboolean NV_fog_distance; GLboolean NV_fragment_program; GLboolean NV_fragment_program_option; GLboolean NV_light_max_exponent; GLboolean NV_point_sprite; GLboolean NV_primitive_restart; + GLboolean NV_read_buffer; GLboolean NV_texture_barrier; GLboolean NV_texgen_reflection; GLboolean NV_texture_env_combine4; GLboolean NV_texture_rectangle; GLboolean NV_vertex_program; GLboolean NV_vertex_program1_1; - GLboolean OES_read_format; - GLboolean SGIS_generate_mipmap; - GLboolean SGIS_texture_edge_clamp; GLboolean SGIS_texture_lod; GLboolean TDFX_texture_compression_FXT1; GLboolean S3_s3tc; GLboolean OES_EGL_image; GLboolean OES_draw_texture; - GLboolean EXT_texture_format_BGRA8888; + GLboolean OES_EGL_image_external; + GLboolean OES_compressed_ETC1_RGB8_texture; GLboolean extension_sentinel; /** The extension string */ const GLubyte *String; @@ -2931,160 +1191,6 @@ struct gl_extensions }; -/** - * A stack of matrices (projection, modelview, color, texture, etc). - */ -struct gl_matrix_stack -{ - GLmatrix *Top; /**< points into Stack */ - GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */ - GLuint Depth; /**< 0 <= Depth < MaxDepth */ - GLuint MaxDepth; /**< size of Stack[] array */ - GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */ -}; - - -/** - * \name Bits for image transfer operations - * \sa __struct gl_contextRec::ImageTransferState. - */ -/*@{*/ -#define IMAGE_SCALE_BIAS_BIT 0x1 -#define IMAGE_SHIFT_OFFSET_BIT 0x2 -#define IMAGE_MAP_COLOR_BIT 0x4 -#define IMAGE_CLAMP_BIT 0x800 - - -/** Pixel Transfer ops */ -#define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \ - IMAGE_SHIFT_OFFSET_BIT | \ - IMAGE_MAP_COLOR_BIT) - -/** - * \name Bits to indicate what state has changed. - */ -/*@{*/ -#define _NEW_MODELVIEW (1 << 0) /**< gl_context::ModelView */ -#define _NEW_PROJECTION (1 << 1) /**< gl_context::Projection */ -#define _NEW_TEXTURE_MATRIX (1 << 2) /**< gl_context::TextureMatrix */ -#define _NEW_COLOR (1 << 3) /**< gl_context::Color */ -#define _NEW_DEPTH (1 << 4) /**< gl_context::Depth */ -#define _NEW_EVAL (1 << 5) /**< gl_context::Eval, EvalMap */ -#define _NEW_FOG (1 << 6) /**< gl_context::Fog */ -#define _NEW_HINT (1 << 7) /**< gl_context::Hint */ -#define _NEW_LIGHT (1 << 8) /**< gl_context::Light */ -#define _NEW_LINE (1 << 9) /**< gl_context::Line */ -#define _NEW_PIXEL (1 << 10) /**< gl_context::Pixel */ -#define _NEW_POINT (1 << 11) /**< gl_context::Point */ -#define _NEW_POLYGON (1 << 12) /**< gl_context::Polygon */ -#define _NEW_POLYGONSTIPPLE (1 << 13) /**< gl_context::PolygonStipple */ -#define _NEW_SCISSOR (1 << 14) /**< gl_context::Scissor */ -#define _NEW_STENCIL (1 << 15) /**< gl_context::Stencil */ -#define _NEW_TEXTURE (1 << 16) /**< gl_context::Texture */ -#define _NEW_TRANSFORM (1 << 17) /**< gl_context::Transform */ -#define _NEW_VIEWPORT (1 << 18) /**< gl_context::Viewport */ -#define _NEW_PACKUNPACK (1 << 19) /**< gl_context::Pack, Unpack */ -#define _NEW_ARRAY (1 << 20) /**< gl_context::Array */ -#define _NEW_RENDERMODE (1 << 21) /**< gl_context::RenderMode, etc */ -#define _NEW_BUFFERS (1 << 22) /**< gl_context::Visual, DrawBuffer, */ -#define _NEW_CURRENT_ATTRIB (1 << 23) /**< gl_context::Current */ -#define _NEW_MULTISAMPLE (1 << 24) /**< gl_context::Multisample */ -#define _NEW_TRACK_MATRIX (1 << 25) /**< gl_context::VertexProgram */ -#define _NEW_PROGRAM (1 << 26) /**< New program/shader state */ -#define _NEW_PROGRAM_CONSTANTS (1 << 27) -#define _NEW_BUFFER_OBJECT (1 << 28) -#define _NEW_FRAG_CLAMP (1 << 29) -#define _NEW_ALL ~0 -/*@}*/ - - -/** - * \name Bits to track array state changes - * - * Also used to summarize array enabled. - */ -/*@{*/ -#define _NEW_ARRAY_VERTEX VERT_BIT_POS -#define _NEW_ARRAY_WEIGHT VERT_BIT_WEIGHT -#define _NEW_ARRAY_NORMAL VERT_BIT_NORMAL -#define _NEW_ARRAY_COLOR0 VERT_BIT_COLOR0 -#define _NEW_ARRAY_COLOR1 VERT_BIT_COLOR1 -#define _NEW_ARRAY_FOGCOORD VERT_BIT_FOG -#define _NEW_ARRAY_INDEX VERT_BIT_COLOR_INDEX -#define _NEW_ARRAY_EDGEFLAG VERT_BIT_EDGEFLAG -#define _NEW_ARRAY_POINT_SIZE VERT_BIT_COLOR_INDEX /* aliased */ -#define _NEW_ARRAY_TEXCOORD_0 VERT_BIT_TEX0 -#define _NEW_ARRAY_TEXCOORD_1 VERT_BIT_TEX1 -#define _NEW_ARRAY_TEXCOORD_2 VERT_BIT_TEX2 -#define _NEW_ARRAY_TEXCOORD_3 VERT_BIT_TEX3 -#define _NEW_ARRAY_TEXCOORD_4 VERT_BIT_TEX4 -#define _NEW_ARRAY_TEXCOORD_5 VERT_BIT_TEX5 -#define _NEW_ARRAY_TEXCOORD_6 VERT_BIT_TEX6 -#define _NEW_ARRAY_TEXCOORD_7 VERT_BIT_TEX7 -#define _NEW_ARRAY_ATTRIB_0 VERT_BIT_GENERIC0 /* start at bit 16 */ -#define _NEW_ARRAY_ALL 0xffffffff - - -#define _NEW_ARRAY_TEXCOORD(i) (_NEW_ARRAY_TEXCOORD_0 << (i)) -#define _NEW_ARRAY_ATTRIB(i) (_NEW_ARRAY_ATTRIB_0 << (i)) -/*@}*/ - - - -/** - * \name A bunch of flags that we think might be useful to drivers. - * - * Set in the __struct gl_contextRec::_TriangleCaps bitfield. - */ -/*@{*/ -#define DD_FLATSHADE 0x1 -#define DD_SEPARATE_SPECULAR 0x2 -#define DD_TRI_CULL_FRONT_BACK 0x4 /* special case on some hw */ -#define DD_TRI_LIGHT_TWOSIDE 0x8 -#define DD_TRI_UNFILLED 0x10 -#define DD_TRI_SMOOTH 0x20 -#define DD_TRI_STIPPLE 0x40 -#define DD_TRI_OFFSET 0x80 -#define DD_LINE_SMOOTH 0x100 -#define DD_LINE_STIPPLE 0x200 -#define DD_POINT_SMOOTH 0x400 -#define DD_POINT_ATTEN 0x800 -#define DD_TRI_TWOSTENCIL 0x1000 -/*@}*/ - - -/** - * \name Define the state changes under which each of these bits might change - */ -/*@{*/ -#define _DD_NEW_FLATSHADE _NEW_LIGHT -#define _DD_NEW_SEPARATE_SPECULAR (_NEW_LIGHT | _NEW_FOG | _NEW_PROGRAM) -#define _DD_NEW_TRI_CULL_FRONT_BACK _NEW_POLYGON -#define _DD_NEW_TRI_LIGHT_TWOSIDE _NEW_LIGHT -#define _DD_NEW_TRI_UNFILLED _NEW_POLYGON -#define _DD_NEW_TRI_SMOOTH _NEW_POLYGON -#define _DD_NEW_TRI_STIPPLE _NEW_POLYGON -#define _DD_NEW_TRI_OFFSET _NEW_POLYGON -#define _DD_NEW_LINE_SMOOTH _NEW_LINE -#define _DD_NEW_LINE_STIPPLE _NEW_LINE -#define _DD_NEW_LINE_WIDTH _NEW_LINE -#define _DD_NEW_POINT_SMOOTH _NEW_POINT -#define _DD_NEW_POINT_SIZE _NEW_POINT -#define _DD_NEW_POINT_ATTEN _NEW_POINT -/*@}*/ - - -/** - * Composite state flags - */ -/*@{*/ -#define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \ - _NEW_TEXTURE | \ - _NEW_POINT | \ - _NEW_PROGRAM | \ - _NEW_MODELVIEW) -/*@}*/ - @@ -3092,78 +1198,27 @@ struct gl_matrix_stack #include "dd.h" -/** - * Display list flags. - * Strictly this is a tnl-private concept, but it doesn't seem - * worthwhile adding a tnl private structure just to hold this one bit - * of information: - */ -#define DLIST_DANGLING_REFS 0x1 -/** Opaque declaration of display list payload data type */ -union gl_dlist_node; - - -/** - * Provide a location where information about a display list can be - * collected. Could be extended with driverPrivate structures, - * etc. in the future. - */ -struct gl_display_list -{ - GLuint Name; - GLbitfield Flags; /**< DLIST_x flags */ - /** The dlist commands are in a linked list of nodes */ - union gl_dlist_node *Head; -}; - - -/** - * State used during display list compilation and execution. - */ -struct gl_dlist_state -{ - GLuint CallDepth; /**< Current recursion calling depth */ - - struct gl_display_list *CurrentList; /**< List currently being compiled */ - union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */ - GLuint CurrentPos; /**< Index into current block of nodes */ - - GLvertexformat ListVtxfmt; - - GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; - GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4]; - - GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; - GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; - - GLubyte ActiveIndex; - GLfloat CurrentIndex; - - GLubyte ActiveEdgeFlag; - GLboolean CurrentEdgeFlag; - - struct { - /* State known to have been set by the currently-compiling display - * list. Used to eliminate some redundant state changes. - */ - GLenum ShadeModel; - } Current; -}; - +typedef enum { + SHADER_ERROR_UNKNOWN, + SHADER_ERROR_COUNT +} gl_shader_error; + /** * Enum for the OpenGL APIs we know about and may support. */ typedef enum { - API_OPENGL, + API_OPENGL, /* legacy / compatibility contexts */ API_OPENGLES, - API_OPENGLES2 + API_OPENGLES2, + API_OPENGL_CORE, } gl_api; + /** * Mesa rendering context. * @@ -3176,203 +1231,27 @@ typedef enum */ struct gl_context { - /** State possibly shared with other contexts in the address space */ - struct gl_shared_state *Shared; - - /** \name API function pointer tables */ - /*@{*/ gl_api API; - struct _glapi_table *Save; /**< Display list save functions */ - struct _glapi_table *Exec; /**< Execute functions */ - struct _glapi_table *CurrentDispatch; /**< == Save or Exec !! */ - /*@}*/ - - struct gl_config Visual; - struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ - struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ - struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ - struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ /** * Device driver function pointer table */ struct dd_function_table Driver; - void *DriverCtx; /**< Points to device driver context/state */ - /** Core/Driver constants */ struct gl_constants Const; - /** \name The various 4x4 matrix stacks */ - /*@{*/ - struct gl_matrix_stack ModelviewMatrixStack; - struct gl_matrix_stack ProjectionMatrixStack; - struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS]; - struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES]; - struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */ - /*@}*/ - - /** Combined modelview and projection matrix */ - GLmatrix _ModelProjectMatrix; - - /** \name Display lists */ - struct gl_dlist_state ListState; - - GLboolean ExecuteFlag; /**< Execute GL commands? */ - GLboolean CompileFlag; /**< Compile GL commands into display list? */ - /** Extension information */ struct gl_extensions Extensions; - /** Version info */ - GLuint VersionMajor, VersionMinor; + /** GL version integer, for example 31 for GL 3.1, or 20 for GLES 2.0. */ + GLuint Version; char *VersionString; - /** \name State attribute stack (for glPush/PopAttrib) */ - /*@{*/ - GLuint AttribStackDepth; - struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; - /*@}*/ - /** \name Renderer attribute groups - * - * We define a struct for each attribute group to make pushing and popping - * attributes easy. Also it's a good organization. - */ - /*@{*/ - struct gl_accum_attrib Accum; /**< Accum buffer attributes */ - struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ - struct gl_current_attrib Current; /**< Current attributes */ - struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ - struct gl_eval_attrib Eval; /**< Eval attributes */ - struct gl_fog_attrib Fog; /**< Fog attributes */ - struct gl_hint_attrib Hint; /**< Hint attributes */ - struct gl_light_attrib Light; /**< Light attributes */ - struct gl_line_attrib Line; /**< Line attributes */ - struct gl_list_attrib List; /**< List attributes */ - struct gl_multisample_attrib Multisample; - struct gl_pixel_attrib Pixel; /**< Pixel attributes */ - struct gl_point_attrib Point; /**< Point attributes */ - struct gl_polygon_attrib Polygon; /**< Polygon attributes */ - GLuint PolygonStipple[32]; /**< Polygon stipple */ - struct gl_scissor_attrib Scissor; /**< Scissor attributes */ - struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */ - struct gl_texture_attrib Texture; /**< Texture attributes */ - struct gl_transform_attrib Transform; /**< Transformation attributes */ - struct gl_viewport_attrib Viewport; /**< Viewport attributes */ - /*@}*/ - - /** \name Client attribute stack */ - /*@{*/ - GLuint ClientAttribStackDepth; - struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; - /*@}*/ - - /** \name Client attribute groups */ - /*@{*/ - struct gl_array_attrib Array; /**< Vertex arrays */ - struct gl_pixelstore_attrib Pack; /**< Pixel packing */ - struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */ - struct gl_pixelstore_attrib DefaultPacking; /**< Default params */ - /*@}*/ - - /** \name Other assorted state (not pushed/popped on attribute stack) */ - /*@{*/ - struct gl_pixelmaps PixelMaps; - - struct gl_evaluators EvalMap; /**< All evaluators */ - struct gl_feedback Feedback; /**< Feedback */ - struct gl_selection Select; /**< Selection */ - - struct gl_program_state Program; /**< general program state */ - struct gl_vertex_program_state VertexProgram; - struct gl_fragment_program_state FragmentProgram; - struct gl_geometry_program_state GeometryProgram; - struct gl_ati_fragment_shader_state ATIFragmentShader; - - struct gl_shader_state Shader; /**< GLSL shader object state */ struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_TYPES]; - struct gl_query_state Query; /**< occlusion, timer queries */ - - struct gl_transform_feedback TransformFeedback; - - struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */ - struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */ - /*@}*/ - - struct gl_meta_state *Meta; /**< for "meta" operations */ - - /* GL_EXT_framebuffer_object */ - struct gl_renderbuffer *CurrentRenderbuffer; - GLenum ErrorValue; /**< Last error code */ - - /* GL_ARB_robustness */ - GLenum ResetStatus; - - /** - * Recognize and silence repeated error debug messages in buggy apps. - */ - const char *ErrorDebugFmtString; - GLuint ErrorDebugCount; - - GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ - GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ - - GLboolean ViewportInitialized; /**< has viewport size been initialized? */ - - GLbitfield varying_vp_inputs; /**< mask of VERT_BIT_* flags */ - - /** \name Derived state */ - /*@{*/ - /** Bitwise-or of DD_* flags. Note that this bitfield may be used before - * state validation so they need to always be current. - */ - GLbitfield _TriangleCaps; - GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ - GLfloat _EyeZDir[3]; - GLfloat _ModelViewInvScale; - GLboolean _NeedEyeCoords; - GLboolean _ForceEyeCoords; - - GLuint TextureStateTimestamp; /**< detect changes to shared state */ - - struct gl_shine_tab *_ShineTable[2]; /**< Active shine tables */ - struct gl_shine_tab *_ShineTabList; /**< MRU list of inactive shine tables */ - /**@}*/ - - struct gl_list_extensions *ListExt; /**< driver dlist extensions */ - - /** \name For debugging/development only */ - /*@{*/ - GLboolean FirstTimeCurrent; - /*@}*/ - - /** software compression/decompression supported or not */ - GLboolean Mesa_DXTn; - - GLboolean TextureFormatSupported[MESA_FORMAT_COUNT]; - - /** - * Use dp4 (rather than mul/mad) instructions for position - * transformation? - */ - GLboolean mvp_with_dp4; - - /** - * \name Hooks for module contexts. - * - * These will eventually live in the driver or elsewhere. - */ - /*@{*/ - void *swrast_context; - void *swsetup_context; - void *swtnl_context; - void *swtnl_im; - struct st_context *st; - void *aelt_context; - /*@}*/ }; @@ -3413,9 +1292,16 @@ enum _verbose /** The MESA_DEBUG_FLAGS var is a bitmask of these flags */ enum _debug { - DEBUG_ALWAYS_FLUSH = 0x1 + DEBUG_SILENT = (1 << 0), + DEBUG_ALWAYS_FLUSH = (1 << 1), + DEBUG_INCOMPLETE_TEXTURE = (1 << 2), + DEBUG_INCOMPLETE_FBO = (1 << 3) }; +#ifdef __cplusplus +} +#endif + #endif /* MTYPES_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/shaderobj.h b/3rdparty/glsl-optimizer/src/mesa/main/shaderobj.h deleted file mode 100644 index de7c998cf..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/main/shaderobj.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 6.5.3 - * - * Copyright (C) 2004-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. - */ - - -#ifndef SHADEROBJ_H -#define SHADEROBJ_H - - -#include "main/compiler.h" -#include "main/glheader.h" -#include "main/mtypes.h" -#include "program/ir_to_mesa.h" - -#ifdef __cplusplus -extern "C" { -#endif -/** - * Internal functions - */ - -extern void -_mesa_init_shader_state(struct gl_context * ctx); - -extern void -_mesa_free_shader_state(struct gl_context *ctx); - - -extern void -_mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, - struct gl_shader *sh); - -extern struct gl_shader * -_mesa_lookup_shader(struct gl_context *ctx, GLuint name); - -extern struct gl_shader * -_mesa_lookup_shader_err(struct gl_context *ctx, GLuint name, const char *caller); - - - -extern void -_mesa_reference_shader_program(struct gl_context *ctx, - struct gl_shader_program **ptr, - struct gl_shader_program *shProg); -extern void -_mesa_init_shader(struct gl_context *ctx, struct gl_shader *shader); - -extern struct gl_shader * -_mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type); - -extern void -_mesa_init_shader_program(struct gl_context *ctx, struct gl_shader_program *prog); - -extern struct gl_shader_program * -_mesa_lookup_shader_program(struct gl_context *ctx, GLuint name); - -extern struct gl_shader_program * -_mesa_lookup_shader_program_err(struct gl_context *ctx, GLuint name, - const char *caller); - -extern void -_mesa_clear_shader_program_data(struct gl_context *ctx, - struct gl_shader_program *shProg); - -extern void -_mesa_free_shader_program_data(struct gl_context *ctx, - struct gl_shader_program *shProg); - - - -extern void -_mesa_init_shader_object_functions(struct dd_function_table *driver); - -extern void -_mesa_init_shader_state(struct gl_context *ctx); - -extern void -_mesa_free_shader_state(struct gl_context *ctx); - - -static INLINE gl_shader_type -_mesa_shader_type_to_index(GLenum v) -{ - switch (v) { - case GL_VERTEX_SHADER: - return MESA_SHADER_VERTEX; - case GL_FRAGMENT_SHADER: - return MESA_SHADER_FRAGMENT; - case GL_GEOMETRY_SHADER: - return MESA_SHADER_GEOMETRY; - default: - ASSERT(0 && "bad value in _mesa_shader_type_to_index()"); - return MESA_SHADER_TYPES; - } -} - - -static INLINE GLenum -_mesa_shader_index_to_type(GLuint i) -{ - static const GLenum enums[MESA_SHADER_TYPES] = { - GL_VERTEX_SHADER, - GL_FRAGMENT_SHADER, - GL_GEOMETRY_SHADER , - }; - if (i >= MESA_SHADER_TYPES) - return 0; - else - return enums[i]; -} - - -#ifdef __cplusplus -} -#endif - -#endif /* SHADEROBJ_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/simple_list.h b/3rdparty/glsl-optimizer/src/mesa/main/simple_list.h index ff7f88823..cfeb4d144 100644 --- a/3rdparty/glsl-optimizer/src/mesa/main/simple_list.h +++ b/3rdparty/glsl-optimizer/src/mesa/main/simple_list.h @@ -37,10 +37,9 @@ #ifndef _SIMPLE_LIST_H #define _SIMPLE_LIST_H -struct simple_node { - struct simple_node *next; - struct simple_node *prev; -}; +#ifdef __cplusplus +extern "C" { +#endif /** * Remove an element from list. @@ -199,4 +198,8 @@ do { \ #define foreach_s(ptr, t, list) \ for(ptr=(list)->next,t=(ptr)->next; list != ptr; ptr=t, t=(t)->next) +#ifdef __cplusplus +} +#endif + #endif diff --git a/3rdparty/glsl-optimizer/src/mesa/main/uniforms.h b/3rdparty/glsl-optimizer/src/mesa/main/uniforms.h deleted file mode 100644 index b024cb30b..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/main/uniforms.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 2010 VMware, Inc. 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 - * THE AUTHORS 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. - */ - - -#ifndef UNIFORMS_H -#define UNIFORMS_H - -#include "glheader.h" -#include "program/prog_parameter.h" - -struct gl_program; -struct _glapi_table; - -extern void GLAPIENTRY -_mesa_Uniform1fARB(GLint, GLfloat); - -extern void GLAPIENTRY -_mesa_Uniform2fARB(GLint, GLfloat, GLfloat); - -extern void GLAPIENTRY -_mesa_Uniform3fARB(GLint, GLfloat, GLfloat, GLfloat); - -extern void GLAPIENTRY -_mesa_Uniform4fARB(GLint, GLfloat, GLfloat, GLfloat, GLfloat); - -extern void GLAPIENTRY -_mesa_Uniform1iARB(GLint, GLint); - -extern void GLAPIENTRY -_mesa_Uniform2iARB(GLint, GLint, GLint); - -extern void GLAPIENTRY -_mesa_Uniform3iARB(GLint, GLint, GLint, GLint); - -extern void GLAPIENTRY -_mesa_Uniform4iARB(GLint, GLint, GLint, GLint, GLint); - -extern void GLAPIENTRY -_mesa_Uniform1fvARB(GLint, GLsizei, const GLfloat *); - -extern void GLAPIENTRY -_mesa_Uniform2fvARB(GLint, GLsizei, const GLfloat *); - -extern void GLAPIENTRY -_mesa_Uniform3fvARB(GLint, GLsizei, const GLfloat *); - -extern void GLAPIENTRY -_mesa_Uniform4fvARB(GLint, GLsizei, const GLfloat *); - -extern void GLAPIENTRY -_mesa_Uniform1ivARB(GLint, GLsizei, const GLint *); - -extern void GLAPIENTRY -_mesa_Uniform2ivARB(GLint, GLsizei, const GLint *); - -extern void GLAPIENTRY -_mesa_Uniform3ivARB(GLint, GLsizei, const GLint *); - -extern void GLAPIENTRY -_mesa_Uniform4ivARB(GLint, GLsizei, const GLint *); - -extern void GLAPIENTRY -_mesa_Uniform1ui(GLint location, GLuint v0); - -extern void GLAPIENTRY -_mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1); - -extern void GLAPIENTRY -_mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2); - -extern void GLAPIENTRY -_mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); - -extern void GLAPIENTRY -_mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value); - -extern void GLAPIENTRY -_mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value); - -extern void GLAPIENTRY -_mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value); - -extern void GLAPIENTRY -_mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value); - - -extern void GLAPIENTRY -_mesa_UniformMatrix2fvARB(GLint, GLsizei, GLboolean, const GLfloat *); - -extern void GLAPIENTRY -_mesa_UniformMatrix3fvARB(GLint, GLsizei, GLboolean, const GLfloat *); - -extern void GLAPIENTRY -_mesa_UniformMatrix4fvARB(GLint, GLsizei, GLboolean, const GLfloat *); - -extern void GLAPIENTRY -_mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - -extern void GLAPIENTRY -_mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - -extern void GLAPIENTRY -_mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - -extern void GLAPIENTRY -_mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - -extern void GLAPIENTRY -_mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - -extern void GLAPIENTRY -_mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - - -extern void GLAPIENTRY -_mesa_GetActiveUniformARB(GLhandleARB, GLuint, GLsizei, GLsizei *, - GLint *, GLenum *, GLcharARB *); - -extern void GLAPIENTRY -_mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *); - -extern void GLAPIENTRY -_mesa_GetnUniformfvARB(GLhandleARB, GLint, GLsizei, GLfloat *); - -extern void GLAPIENTRY -_mesa_GetUniformivARB(GLhandleARB, GLint, GLint *); - -extern void GLAPIENTRY -_mesa_GetnUniformivARB(GLhandleARB, GLint, GLsizei, GLint *); - -extern void GLAPIENTRY -_mesa_GetUniformuiv(GLhandleARB, GLint, GLuint *); - -extern void GLAPIENTRY -_mesa_GetnUniformuivARB(GLhandleARB, GLint, GLsizei, GLuint *); - -extern void GLAPIENTRY -_mesa_GetUniformdv(GLhandleARB, GLint, GLdouble *); - -extern void GLAPIENTRY -_mesa_GetnUniformdvARB(GLhandleARB, GLint, GLsizei, GLdouble *); - -extern GLint GLAPIENTRY -_mesa_GetUniformLocationARB(GLhandleARB, const GLcharARB *); - -GLint -_mesa_get_uniform_location(struct gl_context *ctx, struct gl_shader_program *shProg, - const GLchar *name); - -void -_mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shader_program, - GLint location, GLsizei count, - const GLvoid *values, GLenum type); - -void -_mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg, - GLint cols, GLint rows, - GLint location, GLsizei count, - GLboolean transpose, const GLfloat *values); - -extern void -_mesa_update_shader_textures_used(struct gl_program *prog); - - -extern void -_mesa_init_shader_uniform_dispatch(struct _glapi_table *exec); - -struct gl_builtin_uniform_element { - const char *field; - int tokens[STATE_LENGTH]; - int swizzle; -}; - -struct gl_builtin_uniform_desc { - const char *name; - struct gl_builtin_uniform_element *elements; - unsigned int num_elements; -}; - -extern const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[]; - -#endif /* UNIFORMS_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/main/version.h b/3rdparty/glsl-optimizer/src/mesa/main/version.h deleted file mode 100644 index 0a0512c33..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/main/version.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.11 - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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. - */ - - -#ifndef VERSION_H -#define VERSION_H - - -struct gl_context; - - -/* Mesa version */ -#define MESA_MAJOR 7 -#define MESA_MINOR 12 -#define MESA_PATCH 0 -#define MESA_VERSION_STRING "7.12-devel" - -/* To make version comparison easy */ -#define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -#define MESA_VERSION_CODE MESA_VERSION(MESA_MAJOR, MESA_MINOR, MESA_PATCH) - - -/* OpenGL API version */ -#define OPENGL_MAJOR 2 -#define OPENGL_MINOR 1 -#define OPENGL_PATCH 0 -#define OPENGL_VERSION_STRING "2.1" - -/* To make version comparison easy */ -#define OPENGL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -#define OPENGL_VERSION_CODE OPENGL_VERSION(OPENGL_MAJOR, OPENGL_MINOR, OPENGL_PATCH) - - -extern void -_mesa_compute_version(struct gl_context *ctx); - - -#endif /* VERSION_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/math/m_matrix.h b/3rdparty/glsl-optimizer/src/mesa/math/m_matrix.h deleted file mode 100644 index a69afb858..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/math/m_matrix.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 6.3 - * - * Copyright (C) 1999-2005 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. - */ - - -/** - * \file math/m_matrix.h - * Defines basic structures for matrix-handling. - */ - -#ifndef _M_MATRIX_H -#define _M_MATRIX_H - - -#include "main/glheader.h" - - -/** - * \name Symbolic names to some of the entries in the matrix - * - * These are handy for the viewport mapping, which is expressed as a matrix. - */ -/*@{*/ -#define MAT_SX 0 -#define MAT_SY 5 -#define MAT_SZ 10 -#define MAT_TX 12 -#define MAT_TY 13 -#define MAT_TZ 14 -/*@}*/ - - -/** - * Different kinds of 4x4 transformation matrices. - * We use these to select specific optimized vertex transformation routines. - */ -enum GLmatrixtype { - MATRIX_GENERAL, /**< general 4x4 matrix */ - MATRIX_IDENTITY, /**< identity matrix */ - MATRIX_3D_NO_ROT, /**< orthogonal projection and others... */ - MATRIX_PERSPECTIVE, /**< perspective projection matrix */ - MATRIX_2D, /**< 2-D transformation */ - MATRIX_2D_NO_ROT, /**< 2-D scale & translate only */ - MATRIX_3D /**< 3-D transformation */ -} ; - -/** - * Matrix type to represent 4x4 transformation matrices. - */ -typedef struct { - GLfloat *m; /**< 16 matrix elements (16-byte aligned) */ - GLfloat *inv; /**< optional 16-element inverse (16-byte aligned) */ - GLuint flags; /**< possible values determined by (of \link - * MatFlags MAT_FLAG_* flags\endlink) - */ - enum GLmatrixtype type; -} GLmatrix; - - - - -extern void -_math_matrix_ctr( GLmatrix *m ); - -extern void -_math_matrix_dtr( GLmatrix *m ); - -extern void -_math_matrix_alloc_inv( GLmatrix *m ); - -extern void -_math_matrix_mul_matrix( GLmatrix *dest, const GLmatrix *a, const GLmatrix *b ); - -extern void -_math_matrix_mul_floats( GLmatrix *dest, const GLfloat *b ); - -extern void -_math_matrix_loadf( GLmatrix *mat, const GLfloat *m ); - -extern void -_math_matrix_translate( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z ); - -extern void -_math_matrix_rotate( GLmatrix *m, GLfloat angle, - GLfloat x, GLfloat y, GLfloat z ); - -extern void -_math_matrix_scale( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z ); - -extern void -_math_matrix_ortho( GLmatrix *mat, - GLfloat left, GLfloat right, - GLfloat bottom, GLfloat top, - GLfloat nearval, GLfloat farval ); - -extern void -_math_matrix_frustum( GLmatrix *mat, - GLfloat left, GLfloat right, - GLfloat bottom, GLfloat top, - GLfloat nearval, GLfloat farval ); - -extern void -_math_matrix_viewport(GLmatrix *m, GLint x, GLint y, GLint width, GLint height, - GLfloat zNear, GLfloat zFar, GLfloat depthMax); - -extern void -_math_matrix_set_identity( GLmatrix *dest ); - -extern void -_math_matrix_copy( GLmatrix *to, const GLmatrix *from ); - -extern void -_math_matrix_analyse( GLmatrix *mat ); - -extern void -_math_matrix_print( const GLmatrix *m ); - -extern GLboolean -_math_matrix_is_length_preserving( const GLmatrix *m ); - -extern GLboolean -_math_matrix_has_rotation( const GLmatrix *m ); - -extern GLboolean -_math_matrix_is_general_scale( const GLmatrix *m ); - -extern GLboolean -_math_matrix_is_dirty( const GLmatrix *m ); - - -/** - * \name Related functions that don't actually operate on GLmatrix structs - */ -/*@{*/ - -extern void -_math_transposef( GLfloat to[16], const GLfloat from[16] ); - -extern void -_math_transposed( GLdouble to[16], const GLdouble from[16] ); - -extern void -_math_transposefd( GLfloat to[16], const GLdouble from[16] ); - - -/* - * Transform a point (column vector) by a matrix: Q = M * P - */ -#define TRANSFORM_POINT( Q, M, P ) \ - Q[0] = M[0] * P[0] + M[4] * P[1] + M[8] * P[2] + M[12] * P[3]; \ - Q[1] = M[1] * P[0] + M[5] * P[1] + M[9] * P[2] + M[13] * P[3]; \ - Q[2] = M[2] * P[0] + M[6] * P[1] + M[10] * P[2] + M[14] * P[3]; \ - Q[3] = M[3] * P[0] + M[7] * P[1] + M[11] * P[2] + M[15] * P[3]; - - -#define TRANSFORM_POINT3( Q, M, P ) \ - Q[0] = M[0] * P[0] + M[4] * P[1] + M[8] * P[2] + M[12]; \ - Q[1] = M[1] * P[0] + M[5] * P[1] + M[9] * P[2] + M[13]; \ - Q[2] = M[2] * P[0] + M[6] * P[1] + M[10] * P[2] + M[14]; \ - Q[3] = M[3] * P[0] + M[7] * P[1] + M[11] * P[2] + M[15]; - - -/* - * Transform a normal (row vector) by a matrix: [NX NY NZ] = N * MAT - */ -#define TRANSFORM_NORMAL( TO, N, MAT ) \ -do { \ - TO[0] = N[0] * MAT[0] + N[1] * MAT[1] + N[2] * MAT[2]; \ - TO[1] = N[0] * MAT[4] + N[1] * MAT[5] + N[2] * MAT[6]; \ - TO[2] = N[0] * MAT[8] + N[1] * MAT[9] + N[2] * MAT[10]; \ -} while (0) - - -/** - * Transform a direction by a matrix. - */ -#define TRANSFORM_DIRECTION( TO, DIR, MAT ) \ -do { \ - TO[0] = DIR[0] * MAT[0] + DIR[1] * MAT[4] + DIR[2] * MAT[8]; \ - TO[1] = DIR[0] * MAT[1] + DIR[1] * MAT[5] + DIR[2] * MAT[9]; \ - TO[2] = DIR[0] * MAT[2] + DIR[1] * MAT[6] + DIR[2] * MAT[10];\ -} while (0) - - -extern void -_mesa_transform_vector(GLfloat u[4], const GLfloat v[4], const GLfloat m[16]); - - -/*@}*/ - - -#endif diff --git a/3rdparty/glsl-optimizer/src/mesa/program/hash_table.c b/3rdparty/glsl-optimizer/src/mesa/program/hash_table.c index 877a9e2ff..7dabadc50 100644 --- a/3rdparty/glsl-optimizer/src/mesa/program/hash_table.c +++ b/3rdparty/glsl-optimizer/src/mesa/program/hash_table.c @@ -108,8 +108,8 @@ hash_table_clear(struct hash_table *ht) } -void * -hash_table_find(struct hash_table *ht, const void *key) +static struct hash_node * +get_node(struct hash_table *ht, const void *key) { const unsigned hash_value = (*ht->hash)(key); const unsigned bucket = hash_value % ht->num_buckets; @@ -119,13 +119,20 @@ hash_table_find(struct hash_table *ht, const void *key) struct hash_node *hn = (struct hash_node *) node; if ((*ht->compare)(hn->key, key) == 0) { - return hn->data; + return hn; } } return NULL; } +void * +hash_table_find(struct hash_table *ht, const void *key) +{ + struct hash_node *hn = get_node(ht, key); + + return (hn == NULL) ? NULL : hn->data; +} void hash_table_insert(struct hash_table *ht, void *data, const void *key) @@ -142,22 +149,41 @@ hash_table_insert(struct hash_table *ht, void *data, const void *key) insert_at_head(& ht->buckets[bucket], & node->link); } -void -hash_table_remove(struct hash_table *ht, const void *key) +bool +hash_table_replace(struct hash_table *ht, void *data, const void *key) { const unsigned hash_value = (*ht->hash)(key); const unsigned bucket = hash_value % ht->num_buckets; struct node *node; + struct hash_node *hn; foreach(node, & ht->buckets[bucket]) { - struct hash_node *hn = (struct hash_node *) node; + hn = (struct hash_node *) node; if ((*ht->compare)(hn->key, key) == 0) { - remove_from_list(node); - free(node); - return; + hn->data = data; + return true; } } + + hn = calloc(1, sizeof(*hn)); + + hn->data = data; + hn->key = key; + + insert_at_head(& ht->buckets[bucket], & hn->link); + return false; +} + +void +hash_table_remove(struct hash_table *ht, const void *key) +{ + struct node *node = (struct node *) get_node(ht, key); + if (node != NULL) { + remove_from_list(node); + free(node); + return; + } } void diff --git a/3rdparty/glsl-optimizer/src/mesa/program/hash_table.h b/3rdparty/glsl-optimizer/src/mesa/program/hash_table.h index e715bb1cc..e95fc4982 100644 --- a/3rdparty/glsl-optimizer/src/mesa/program/hash_table.h +++ b/3rdparty/glsl-optimizer/src/mesa/program/hash_table.h @@ -31,15 +31,24 @@ #ifndef HASH_TABLE_H #define HASH_TABLE_H -struct hash_table; +#include +#include +#include +#include +#include +#include -typedef unsigned (*hash_func_t)(const void *key); -typedef int (*hash_compare_func_t)(const void *key1, const void *key2); +struct string_to_uint_map; #ifdef __cplusplus extern "C" { #endif +struct hash_table; + +typedef unsigned (*hash_func_t)(const void *key); +typedef int (*hash_compare_func_t)(const void *key1, const void *key2); + /** * Hash table constructor * @@ -88,10 +97,38 @@ extern void *hash_table_find(struct hash_table *ht, const void *key); /** * Add an element to a hash table + * + * \warning + * If \c key is already in the hash table, it will be added again. Future + * calls to \c hash_table_find and \c hash_table_remove will return or remove, + * repsectively, the most recently added instance of \c key. + * + * \warning + * The value passed by \c key is kept in the hash table and is used by later + * calls to \c hash_table_find. + * + * \sa hash_table_replace */ extern void hash_table_insert(struct hash_table *ht, void *data, const void *key); +/** + * Add an element to a hash table with replacement + * + * \return + * 1 if it did replace the the value (in which case the old key is kept), 0 if + * it did not replace the value (in which case the new key is kept). + * + * \warning + * If \c key is already in the hash table, \c data will \b replace the most + * recently inserted \c data (see the warning in \c hash_table_insert) for + * that key. + * + * \sa hash_table_insert + */ +extern bool hash_table_replace(struct hash_table *ht, void *data, + const void *key); + /** * Remove a specific element from a hash table. */ @@ -151,7 +188,101 @@ hash_table_call_foreach(struct hash_table *ht, void *closure), void *closure); +struct string_to_uint_map * +string_to_uint_map_ctor(); + +void +string_to_uint_map_dtor(struct string_to_uint_map *); + + #ifdef __cplusplus } -#endif + +/** + * Map from a string (name) to an unsigned integer value + * + * \note + * Because of the way this class interacts with the \c hash_table + * implementation, values of \c UINT_MAX cannot be stored in the map. + */ +struct string_to_uint_map { +public: + string_to_uint_map() + { + this->ht = hash_table_ctor(0, hash_table_string_hash, + hash_table_string_compare); + } + + ~string_to_uint_map() + { + hash_table_call_foreach(this->ht, delete_key, NULL); + hash_table_dtor(this->ht); + } + + /** + * Remove all mappings from this map. + */ + void clear() + { + hash_table_call_foreach(this->ht, delete_key, NULL); + hash_table_clear(this->ht); + } + + /** + * Get the value associated with a particular key + * + * \return + * If \c key is found in the map, \c true is returned. Otherwise \c false + * is returned. + * + * \note + * If \c key is not found in the table, \c value is not modified. + */ + bool get(unsigned &value, const char *key) + { + const intptr_t v = + (intptr_t) hash_table_find(this->ht, (const void *) key); + + if (v == 0) + return false; + + value = (unsigned)(v - 1); + return true; + } + + void put(unsigned value, const char *key) + { + /* The low-level hash table structure returns NULL if key is not in the + * hash table. However, users of this map might want to store zero as a + * valid value in the table. Bias the value by +1 so that a + * user-specified zero is stored as 1. This enables ::get to tell the + * difference between a user-specified zero (returned as 1 by + * hash_table_find) and the key not in the table (returned as 0 by + * hash_table_find). + * + * The net effect is that we can't store UINT_MAX in the table. This is + * because UINT_MAX+1 = 0. + */ + assert(value != UINT_MAX); + char *dup_key = strdup(key); + bool result = hash_table_replace(this->ht, + (void *) (intptr_t) (value + 1), + dup_key); + if (result) + free(dup_key); + } + +private: + static void delete_key(const void *key, void *data, void *closure) + { + (void) data; + (void) closure; + + free((char *)key); + } + + struct hash_table *ht; +}; + +#endif /* __cplusplus */ #endif /* HASH_TABLE_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/program/ir_to_mesa.h b/3rdparty/glsl-optimizer/src/mesa/program/ir_to_mesa.h deleted file mode 100644 index 7410e1497..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/program/ir_to_mesa.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "main/glheader.h" - -struct gl_context; -struct gl_shader; -struct gl_shader_program; - -void _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *sh); -void _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); -GLboolean _mesa_ir_compile_shader(struct gl_context *ctx, struct gl_shader *shader); -GLboolean _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); - -#ifdef __cplusplus -} -#endif diff --git a/3rdparty/glsl-optimizer/src/mesa/program/prog_instruction.h b/3rdparty/glsl-optimizer/src/mesa/program/prog_instruction.h index db2b594e7..e748b9cad 100644 --- a/3rdparty/glsl-optimizer/src/mesa/program/prog_instruction.h +++ b/3rdparty/glsl-optimizer/src/mesa/program/prog_instruction.h @@ -89,366 +89,6 @@ /*@}*/ -/** - * Condition codes - */ -/*@{*/ -#define COND_GT 1 /**< greater than zero */ -#define COND_EQ 2 /**< equal to zero */ -#define COND_LT 3 /**< less than zero */ -#define COND_UN 4 /**< unordered (NaN) */ -#define COND_GE 5 /**< greater than or equal to zero */ -#define COND_LE 6 /**< less than or equal to zero */ -#define COND_NE 7 /**< not equal to zero */ -#define COND_TR 8 /**< always true */ -#define COND_FL 9 /**< always false */ -/*@}*/ - - -/** - * Instruction precision for GL_NV_fragment_program - */ -/*@{*/ -#define FLOAT32 0x1 -#define FLOAT16 0x2 -#define FIXED12 0x4 -/*@}*/ - - -/** - * Saturation modes when storing values. - */ -/*@{*/ -#define SATURATE_OFF 0 -#define SATURATE_ZERO_ONE 1 -/*@}*/ - - -/** - * Per-component negation masks - */ -/*@{*/ -#define NEGATE_X 0x1 -#define NEGATE_Y 0x2 -#define NEGATE_Z 0x4 -#define NEGATE_W 0x8 -#define NEGATE_XYZ 0x7 -#define NEGATE_XYZW 0xf -#define NEGATE_NONE 0x0 -/*@}*/ - - -/** - * Program instruction opcodes for vertex, fragment and geometry programs. - */ -typedef enum prog_opcode { - /* ARB_vp ARB_fp NV_vp NV_fp GLSL */ - /*------------------------------------------*/ - OPCODE_NOP = 0, /* X */ - OPCODE_ABS, /* X X 1.1 X */ - OPCODE_ADD, /* X X X X X */ - OPCODE_AND, /* */ - OPCODE_ARA, /* 2 */ - OPCODE_ARL, /* X X X */ - OPCODE_ARL_NV, /* 2 */ - OPCODE_ARR, /* 2 */ - OPCODE_BGNLOOP, /* opt */ - OPCODE_BGNSUB, /* opt */ - OPCODE_BRA, /* 2 */ - OPCODE_BRK, /* 2 opt */ - OPCODE_CAL, /* 2 2 opt */ - OPCODE_CMP, /* X X */ - OPCODE_CONT, /* opt */ - OPCODE_COS, /* X 2 X X */ - OPCODE_DDX, /* X X */ - OPCODE_DDY, /* X X */ - OPCODE_DP2, /* 2 X */ - OPCODE_DP2A, /* 2 */ - OPCODE_DP3, /* X X X X X */ - OPCODE_DP4, /* X X X X X */ - OPCODE_DPH, /* X X 1.1 */ - OPCODE_DST, /* X X X X */ - OPCODE_ELSE, /* opt */ - OPCODE_EMIT_VERTEX,/* X */ - OPCODE_END, /* X X X X opt */ - OPCODE_END_PRIMITIVE,/* X */ - OPCODE_ENDIF, /* opt */ - OPCODE_ENDLOOP, /* opt */ - OPCODE_ENDSUB, /* opt */ - OPCODE_EX2, /* X X 2 X X */ - OPCODE_EXP, /* X X */ - OPCODE_FLR, /* X X 2 X X */ - OPCODE_FRC, /* X X 2 X X */ - OPCODE_IF, /* opt */ - OPCODE_KIL, /* X X */ - OPCODE_KIL_NV, /* X X */ - OPCODE_LG2, /* X X 2 X X */ - OPCODE_LIT, /* X X X X */ - OPCODE_LOG, /* X X */ - OPCODE_LRP, /* X X */ - OPCODE_MAD, /* X X X X X */ - OPCODE_MAX, /* X X X X X */ - OPCODE_MIN, /* X X X X X */ - OPCODE_MOV, /* X X X X X */ - OPCODE_MUL, /* X X X X X */ - OPCODE_NOISE1, /* X */ - OPCODE_NOISE2, /* X */ - OPCODE_NOISE3, /* X */ - OPCODE_NOISE4, /* X */ - OPCODE_NOT, /* */ - OPCODE_NRM3, /* */ - OPCODE_NRM4, /* */ - OPCODE_OR, /* */ - OPCODE_PK2H, /* X */ - OPCODE_PK2US, /* X */ - OPCODE_PK4B, /* X */ - OPCODE_PK4UB, /* X */ - OPCODE_POW, /* X X X X */ - OPCODE_POPA, /* 3 */ - OPCODE_PRINT, /* X X */ - OPCODE_PUSHA, /* 3 */ - OPCODE_RCC, /* 1.1 */ - OPCODE_RCP, /* X X X X X */ - OPCODE_RET, /* 2 2 opt */ - OPCODE_RFL, /* X X */ - OPCODE_RSQ, /* X X X X X */ - OPCODE_SCS, /* X X */ - OPCODE_SEQ, /* 2 X X */ - OPCODE_SFL, /* 2 X */ - OPCODE_SGE, /* X X X X X */ - OPCODE_SGT, /* 2 X X */ - OPCODE_SIN, /* X 2 X X */ - OPCODE_SLE, /* 2 X X */ - OPCODE_SLT, /* X X X X X */ - OPCODE_SNE, /* 2 X X */ - OPCODE_SSG, /* 2 X */ - OPCODE_STR, /* 2 X */ - OPCODE_SUB, /* X X 1.1 X X */ - OPCODE_SWZ, /* X X X */ - OPCODE_TEX, /* X 3 X X */ - OPCODE_TXB, /* X 3 X */ - OPCODE_TXD, /* X X */ - OPCODE_TXL, /* 3 2 X */ - OPCODE_TXP, /* X X */ - OPCODE_TXP_NV, /* 3 X */ - OPCODE_TRUNC, /* X */ - OPCODE_UP2H, /* X */ - OPCODE_UP2US, /* X */ - OPCODE_UP4B, /* X */ - OPCODE_UP4UB, /* X */ - OPCODE_X2D, /* X */ - OPCODE_XOR, /* */ - OPCODE_XPD, /* X X */ - MAX_OPCODE -} gl_inst_opcode; - - -/** - * Number of bits for the src/dst register Index field. - * This limits the size of temp/uniform register files. - */ -#define INST_INDEX_BITS 12 - - -/** - * Instruction source register. - */ -struct prog_src_register -{ - GLuint File:4; /**< One of the PROGRAM_* register file values. */ - GLint Index:(INST_INDEX_BITS+1); /**< Extra bit here for sign bit. - * May be negative for relative addressing. - */ - GLuint Swizzle:12; - GLuint RelAddr:1; - - /** Take the component-wise absolute value */ - GLuint Abs:1; - - /** - * Post-Abs negation. - * This will either be NEGATE_NONE or NEGATE_XYZW, except for the SWZ - * instruction which allows per-component negation. - */ - GLuint Negate:4; - - /** - * Is the register two-dimensional. - * Two dimensional registers are of the - * REGISTER[index][index2] format. - * They are used by the geometry shaders where - * the first index is the index within an array - * and the second index is the semantic of the - * array, e.g. gl_PositionIn[index] would become - * INPUT[index][gl_PositionIn] - */ - GLuint HasIndex2:1; - GLuint RelAddr2:1; - GLint Index2:(INST_INDEX_BITS+1); /**< Extra bit here for sign bit. - * May be negative for relative - * addressing. */ -}; - - -/** - * Instruction destination register. - */ -struct prog_dst_register -{ - GLuint File:4; /**< One of the PROGRAM_* register file values */ - GLuint Index:INST_INDEX_BITS; /**< Unsigned, never negative */ - GLuint WriteMask:4; - GLuint RelAddr:1; - - /** - * \name Conditional destination update control. - * - * \since - * NV_fragment_program, NV_fragment_program_option, NV_vertex_program2, - * NV_vertex_program2_option. - */ - /*@{*/ - /** - * Takes one of the 9 possible condition values (EQ, FL, GT, GE, LE, LT, - * NE, TR, or UN). Dest reg is only written to if the matching - * (swizzled) condition code value passes. When a conditional update mask - * is not specified, this will be \c COND_TR. - */ - GLuint CondMask:4; - - /** - * Condition code swizzle value. - */ - GLuint CondSwizzle:12; - - /** - * Selects the condition code register to use for conditional destination - * update masking. In NV_fragmnet_program or NV_vertex_program2 mode, only - * condition code register 0 is available. In NV_vertex_program3 mode, - * condition code registers 0 and 1 are available. - */ - GLuint CondSrc:1; - /*@}*/ -}; - - -/** - * Vertex/fragment program instruction. - */ -struct prog_instruction -{ - gl_inst_opcode Opcode; - struct prog_src_register SrcReg[3]; - struct prog_dst_register DstReg; - - /** - * Indicates that the instruction should update the condition code - * register. - * - * \since - * NV_fragment_program, NV_fragment_program_option, NV_vertex_program2, - * NV_vertex_program2_option. - */ - GLuint CondUpdate:1; - - /** - * If prog_instruction::CondUpdate is \c GL_TRUE, this value selects the - * condition code register that is to be updated. - * - * In GL_NV_fragment_program or GL_NV_vertex_program2 mode, only condition - * code register 0 is available. In GL_NV_vertex_program3 mode, condition - * code registers 0 and 1 are available. - * - * \since - * NV_fragment_program, NV_fragment_program_option, NV_vertex_program2, - * NV_vertex_program2_option. - */ - GLuint CondDst:1; - - /** - * Saturate each value of the vectored result to the range [0,1] or the - * range [-1,1]. \c SSAT mode (i.e., saturation to the range [-1,1]) is - * only available in NV_fragment_program2 mode. - * Value is one of the SATURATE_* tokens. - * - * \since - * NV_fragment_program, NV_fragment_program_option, NV_vertex_program3. - */ - GLuint SaturateMode:2; - - /** - * Per-instruction selectable precision: FLOAT32, FLOAT16, FIXED12. - * - * \since - * NV_fragment_program, NV_fragment_program_option. - */ - GLuint Precision:3; - - /** - * \name Extra fields for TEX, TXB, TXD, TXL, TXP instructions. - */ - /*@{*/ - /** Source texture unit. */ - GLuint TexSrcUnit:5; - - /** Source texture target, one of TEXTURE_{1D,2D,3D,CUBE,RECT}_INDEX */ - GLuint TexSrcTarget:3; - - /** True if tex instruction should do shadow comparison */ - GLuint TexShadow:1; - /*@}*/ - - /** - * For BRA and CAL instructions, the location to jump to. - * For BGNLOOP, points to ENDLOOP (and vice-versa). - * For BRK, points to ENDLOOP - * For IF, points to ELSE or ENDIF. - * For ELSE, points to ENDIF. - */ - GLint BranchTarget; - - /** for debugging purposes */ - const char *Comment; - - /** Arbitrary data. Used for OPCODE_PRINT and some drivers */ - void *Data; - - /** for driver use (try to remove someday) */ - GLint Aux; -}; - - -extern void -_mesa_init_instructions(struct prog_instruction *inst, GLuint count); - -extern struct prog_instruction * -_mesa_alloc_instructions(GLuint numInst); - -extern struct prog_instruction * -_mesa_realloc_instructions(struct prog_instruction *oldInst, - GLuint numOldInst, GLuint numNewInst); - -extern struct prog_instruction * -_mesa_copy_instructions(struct prog_instruction *dest, - const struct prog_instruction *src, GLuint n); - -extern void -_mesa_free_instructions(struct prog_instruction *inst, GLuint count); - -extern GLuint -_mesa_num_inst_src_regs(gl_inst_opcode opcode); - -extern GLuint -_mesa_num_inst_dst_regs(gl_inst_opcode opcode); - -extern GLboolean -_mesa_is_tex_instruction(gl_inst_opcode opcode); - -extern GLboolean -_mesa_check_soa_dependencies(const struct prog_instruction *inst); - -extern const char * -_mesa_opcode_string(gl_inst_opcode opcode); #endif /* PROG_INSTRUCTION_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/program/prog_parameter.h b/3rdparty/glsl-optimizer/src/mesa/program/prog_parameter.h index 1a5ed3439..70faddafc 100644 --- a/3rdparty/glsl-optimizer/src/mesa/program/prog_parameter.h +++ b/3rdparty/glsl-optimizer/src/mesa/program/prog_parameter.h @@ -32,7 +32,11 @@ #define PROG_PARAMETER_H #include "main/mtypes.h" -#include "prog_statevars.h" + + +#ifdef __cplusplus +extern "C" { +#endif /** @@ -53,133 +57,16 @@ typedef union gl_constant_value { GLfloat f; - GLboolean b; + GLint b; GLint i; GLuint u; } gl_constant_value; -/** - * Program parameter. - * Used by shaders/programs for uniforms, constants, varying vars, etc. - */ -struct gl_program_parameter -{ - const char *Name; /**< Null-terminated string */ - gl_register_file Type; /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */ - GLenum DataType; /**< GL_FLOAT, GL_FLOAT_VEC2, etc */ - /** - * Number of components (1..4), or more. - * If the number of components is greater than 4, - * this parameter is part of a larger uniform like a GLSL matrix or array. - * The next program parameter's Size will be Size-4 of this parameter. - */ - GLuint Size; - GLboolean Initialized; /**< debug: Has the ParameterValue[] been set? */ - GLbitfield Flags; /**< Bitmask of PROG_PARAM_*_BIT */ - /** - * A sequence of STATE_* tokens and integers to identify GL state. - */ - gl_state_index StateIndexes[STATE_LENGTH]; -}; -/** - * List of gl_program_parameter instances. - */ -struct gl_program_parameter_list -{ - GLuint Size; /**< allocated size of Parameters, ParameterValues */ - GLuint NumParameters; /**< number of parameters in arrays */ - struct gl_program_parameter *Parameters; /**< Array [Size] */ - gl_constant_value (*ParameterValues)[4]; /**< Array [Size] of constant[4] */ - GLbitfield StateFlags; /**< _NEW_* flags indicating which state changes - might invalidate ParameterValues[] */ -}; - - -extern struct gl_program_parameter_list * -_mesa_new_parameter_list(void); - -extern struct gl_program_parameter_list * -_mesa_new_parameter_list_sized(unsigned size); - -extern void -_mesa_free_parameter_list(struct gl_program_parameter_list *paramList); - -extern struct gl_program_parameter_list * -_mesa_clone_parameter_list(const struct gl_program_parameter_list *list); - -extern struct gl_program_parameter_list * -_mesa_combine_parameter_lists(const struct gl_program_parameter_list *a, - const struct gl_program_parameter_list *b); - -static INLINE GLuint -_mesa_num_parameters(const struct gl_program_parameter_list *list) -{ - return list ? list->NumParameters : 0; +#ifdef __cplusplus } - -extern GLint -_mesa_add_parameter(struct gl_program_parameter_list *paramList, - gl_register_file type, const char *name, - GLuint size, GLenum datatype, - const gl_constant_value *values, - const gl_state_index state[STATE_LENGTH], - GLbitfield flags); - -extern GLint -_mesa_add_named_parameter(struct gl_program_parameter_list *paramList, - const char *name, const gl_constant_value values[4]); - -extern GLint -_mesa_add_named_constant(struct gl_program_parameter_list *paramList, - const char *name, const gl_constant_value values[4], - GLuint size); - -extern GLint -_mesa_add_typed_unnamed_constant(struct gl_program_parameter_list *paramList, - const gl_constant_value values[4], GLuint size, - GLenum datatype, GLuint *swizzleOut); - -extern GLint -_mesa_add_unnamed_constant(struct gl_program_parameter_list *paramList, - const gl_constant_value values[4], GLuint size, - GLuint *swizzleOut); - -extern GLint -_mesa_add_varying(struct gl_program_parameter_list *paramList, - const char *name, GLuint size, GLenum datatype, - GLbitfield flags); - -extern GLint -_mesa_add_attribute(struct gl_program_parameter_list *paramList, - const char *name, GLint size, GLenum datatype, GLint attrib); - -extern GLint -_mesa_add_state_reference(struct gl_program_parameter_list *paramList, - const gl_state_index stateTokens[STATE_LENGTH]); - -extern gl_constant_value * -_mesa_lookup_parameter_value(const struct gl_program_parameter_list *paramList, - GLsizei nameLen, const char *name); - -extern GLint -_mesa_lookup_parameter_index(const struct gl_program_parameter_list *paramList, - GLsizei nameLen, const char *name); - -extern GLboolean -_mesa_lookup_parameter_constant(const struct gl_program_parameter_list *list, - const gl_constant_value v[], GLuint vSize, - GLint *posOut, GLuint *swizzleOut); - -extern GLuint -_mesa_longest_parameter_name(const struct gl_program_parameter_list *list, - gl_register_file type); - -extern GLuint -_mesa_num_parameters_of_type(const struct gl_program_parameter_list *list, - gl_register_file type); - +#endif #endif /* PROG_PARAMETER_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/program/prog_statevars.h b/3rdparty/glsl-optimizer/src/mesa/program/prog_statevars.h index 04af3f4cf..aff31f4a2 100644 --- a/3rdparty/glsl-optimizer/src/mesa/program/prog_statevars.h +++ b/3rdparty/glsl-optimizer/src/mesa/program/prog_statevars.h @@ -25,10 +25,13 @@ #ifndef PROG_STATEVARS_H #define PROG_STATEVARS_H + #include "main/glheader.h" -struct gl_context; -struct gl_program_parameter_list; + +#ifdef __cplusplus +extern "C" { +#endif /** * Number of STATE_* values we need to address any GL state. @@ -111,14 +114,12 @@ typedef enum gl_state_index_ { STATE_TEXRECT_SCALE, STATE_FOG_PARAMS_OPTIMIZED, /* for faster fog calc */ STATE_POINT_SIZE_CLAMPED, /* includes implementation dependent size clamp */ - STATE_POINT_SIZE_IMPL_CLAMP, /* for implementation clamp only in vs */ STATE_LIGHT_SPOT_DIR_NORMALIZED, /* pre-normalized spot dir */ STATE_LIGHT_POSITION, /* object vs eye space */ STATE_LIGHT_POSITION_NORMALIZED, /* object vs eye space */ STATE_LIGHT_HALF_VECTOR, /* object vs eye space */ STATE_PT_SCALE, /**< Pixel transfer RGBA scale */ STATE_PT_BIAS, /**< Pixel transfer RGBA bias */ - STATE_SHADOW_AMBIENT, /**< ARB_shadow_ambient fail value; token[2] is texture unit index */ STATE_FB_SIZE, /**< (width-1, height-1, 0, 0) */ STATE_FB_WPOS_Y_TRANSFORM, /**< (1, 0, -1, height) if a FBO is bound, (-1, height, 1, 0) otherwise */ STATE_ROT_MATRIX_0, /**< ATI_envmap_bumpmap, rot matrix row 0 */ @@ -128,21 +129,11 @@ typedef enum gl_state_index_ { -extern void -_mesa_load_state_parameters(struct gl_context *ctx, - struct gl_program_parameter_list *paramList); -extern GLbitfield -_mesa_program_state_flags(const gl_state_index state[STATE_LENGTH]); - - -extern char * -_mesa_program_state_string(const gl_state_index state[STATE_LENGTH]); - - -extern void -_mesa_load_tracked_matrices(struct gl_context *ctx); +#ifdef __cplusplus +} +#endif #endif /* PROG_STATEVARS_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/program/prog_uniform.h b/3rdparty/glsl-optimizer/src/mesa/program/prog_uniform.h deleted file mode 100644 index 67f78006e..000000000 --- a/3rdparty/glsl-optimizer/src/mesa/program/prog_uniform.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.1 - * - * Copyright (C) 1999-2008 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. - */ - -/** - * \file prog_uniform.c - * Shader uniform functions. - * \author Brian Paul - */ - -#ifndef PROG_UNIFORM_H -#define PROG_UNIFORM_H - -#include "main/glheader.h" - - -/** - * Shader program uniform variable. - * The glGetUniformLocation() and glUniform() commands will use this - * information. - * Note that a uniform such as "binormal" might be used in both the - * vertex shader and the fragment shader. When glUniform() is called to - * set the uniform's value, it must be updated in both the vertex and - * fragment shaders. The uniform may be in different locations in the - * two shaders so we keep track of that here. - */ -struct gl_uniform -{ - const char *Name; /**< Null-terminated string */ - GLint VertPos; - GLint FragPos; - GLint GeomPos; - GLboolean Initialized; /**< For debug. Has this uniform been set? */ - const struct glsl_type *Type; -}; - - -/** - * List of gl_uniforms - */ -struct gl_uniform_list -{ - GLuint Size; /**< allocated size of Uniforms array */ - GLuint NumUniforms; /**< number of uniforms in the array */ - struct gl_uniform *Uniforms; /**< Array [Size] */ -}; - - -extern struct gl_uniform_list * -_mesa_new_uniform_list(void); - -extern void -_mesa_free_uniform_list(struct gl_uniform_list *list); - -extern struct gl_uniform * -_mesa_append_uniform(struct gl_uniform_list *list, - const char *name, GLenum target, GLuint progPos); - -extern GLint -_mesa_lookup_uniform(const struct gl_uniform_list *list, const char *name); - -extern GLint -_mesa_longest_uniform_name(const struct gl_uniform_list *list); - -extern void -_mesa_print_uniforms(const struct gl_uniform_list *list); - - -#endif /* PROG_UNIFORM_H */ diff --git a/3rdparty/glsl-optimizer/src/mesa/program/symbol_table.c b/3rdparty/glsl-optimizer/src/mesa/program/symbol_table.c index 004f1f8fa..4f6f31f31 100644 --- a/3rdparty/glsl-optimizer/src/mesa/program/symbol_table.c +++ b/3rdparty/glsl-optimizer/src/mesa/program/symbol_table.c @@ -255,6 +255,7 @@ _mesa_symbol_table_iterator_next(struct _mesa_symbol_table_iterator *iter) while (iter->curr != NULL) { assert(iter->curr->hdr == hdr); + (void)hdr; if ((iter->name_space == -1) || (iter->curr->name_space == iter->name_space)) { diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-const-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/array-const-ir.txt index feec7c2bc..c82bf6c9b 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-const-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-const-ir.txt @@ -1,64 +1,64 @@ vec4 xlat_main () { - int i; - vec4 c; - vec2 poisson[8]; - vec2 tmpvar_1; - tmpvar_1 = vec2(0.0, 0.0); - poisson[0] = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = vec2(0.527837, -0.085868); - poisson[1] = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(-0.040088, 0.536087); - poisson[2] = tmpvar_3; + int i_1; + vec4 c_2; + vec2 poisson_3[8]; vec2 tmpvar_4; - tmpvar_4 = vec2(-0.670445, -0.179949); - poisson[3] = tmpvar_4; + tmpvar_4 = vec2(0.0, 0.0); + poisson_3[0] = tmpvar_4; vec2 tmpvar_5; - tmpvar_5 = vec2(-0.419418, -0.616039); - poisson[4] = tmpvar_5; + tmpvar_5 = vec2(0.527837, -0.085868); + poisson_3[1] = tmpvar_5; vec2 tmpvar_6; - tmpvar_6 = vec2(0.440453, -0.639399); - poisson[5] = tmpvar_6; + tmpvar_6 = vec2(-0.040088, 0.536087); + poisson_3[2] = tmpvar_6; vec2 tmpvar_7; - tmpvar_7 = vec2(-0.757088, 0.349334); - poisson[6] = tmpvar_7; + tmpvar_7 = vec2(-0.670445, -0.179949); + poisson_3[3] = tmpvar_7; vec2 tmpvar_8; - tmpvar_8 = vec2(0.574619, 0.685879); - poisson[7] = tmpvar_8; - int tmpvar_9; - tmpvar_9 = 0; - i = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_10; + tmpvar_8 = vec2(-0.419418, -0.616039); + poisson_3[4] = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = vec2(0.440453, -0.639399); + poisson_3[5] = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = vec2(-0.757088, 0.349334); + poisson_3[6] = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = vec2(0.574619, 0.685879); + poisson_3[7] = tmpvar_11; + int tmpvar_12; + tmpvar_12 = 0; + i_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(0.0, 0.0, 0.0, 0.0); + c_2 = tmpvar_13; while (true) { - if (!((i < 8))) { + if (!((i_1 < 8))) { break; }; - vec2 tmpvar_11; - tmpvar_11 = (c.xy + poisson[i]); - c.xy = tmpvar_11.xy.xy; - int tmpvar_12; - tmpvar_12 = (i + 1); - i = tmpvar_12; + vec2 tmpvar_14; + tmpvar_14 = (c_2.xy + poisson_3[i_1]); + c_2.xy = tmpvar_14.xy.xy; + int tmpvar_15; + tmpvar_15 = (i_1 + 1); + i_1 = tmpvar_15; }; - return c; + return c_2; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlat_main (); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + vec4 xl_retval_16; + vec4 tmpvar_17; + tmpvar_17 = xlat_main (); + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_16 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = xl_retval_16.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-const-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/array-const-irES.txt index 1fe6f6f9a..33c63750a 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-const-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-const-irES.txt @@ -1,64 +1,64 @@ mediump vec4 xlat_main () { - int i; - mediump vec4 c; - highp vec2 poisson[8]; - vec2 tmpvar_1; - tmpvar_1 = vec2(0.0, 0.0); - poisson[0] = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = vec2(0.527837, -0.085868); - poisson[1] = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(-0.040088, 0.536087); - poisson[2] = tmpvar_3; + int i_1; + mediump vec4 c_2; + highp vec2 poisson_3[8]; vec2 tmpvar_4; - tmpvar_4 = vec2(-0.670445, -0.179949); - poisson[3] = tmpvar_4; + tmpvar_4 = vec2(0.0, 0.0); + poisson_3[0] = tmpvar_4; vec2 tmpvar_5; - tmpvar_5 = vec2(-0.419418, -0.616039); - poisson[4] = tmpvar_5; + tmpvar_5 = vec2(0.527837, -0.085868); + poisson_3[1] = tmpvar_5; vec2 tmpvar_6; - tmpvar_6 = vec2(0.440453, -0.639399); - poisson[5] = tmpvar_6; + tmpvar_6 = vec2(-0.040088, 0.536087); + poisson_3[2] = tmpvar_6; vec2 tmpvar_7; - tmpvar_7 = vec2(-0.757088, 0.349334); - poisson[6] = tmpvar_7; + tmpvar_7 = vec2(-0.670445, -0.179949); + poisson_3[3] = tmpvar_7; vec2 tmpvar_8; - tmpvar_8 = vec2(0.574619, 0.685879); - poisson[7] = tmpvar_8; - int tmpvar_9; - tmpvar_9 = 0; - i = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_10; + tmpvar_8 = vec2(-0.419418, -0.616039); + poisson_3[4] = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = vec2(0.440453, -0.639399); + poisson_3[5] = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = vec2(-0.757088, 0.349334); + poisson_3[6] = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = vec2(0.574619, 0.685879); + poisson_3[7] = tmpvar_11; + int tmpvar_12; + tmpvar_12 = 0; + i_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(0.0, 0.0, 0.0, 0.0); + c_2 = tmpvar_13; while (true) { - if (!((i < 8))) { + if (!((i_1 < 8))) { break; }; - highp vec2 tmpvar_11; - tmpvar_11 = (c.xy + poisson[i]); - c.xy = tmpvar_11.xy.xy; - int tmpvar_12; - tmpvar_12 = (i + 1); - i = tmpvar_12; + highp vec2 tmpvar_14; + tmpvar_14 = (c_2.xy + poisson_3[i_1]); + c_2.xy = tmpvar_14.xy.xy; + int tmpvar_15; + tmpvar_15 = (i_1 + 1); + i_1 = tmpvar_15; }; - return c; + return c_2; } void main () { - mediump vec4 xl_retval; - mediump vec4 tmpvar_1; - tmpvar_1 = xlat_main (); - mediump vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - mediump vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; - mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + mediump vec4 xl_retval_16; + mediump vec4 tmpvar_17; + tmpvar_17 = xlat_main (); + mediump vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_16 = tmpvar_18; + mediump vec4 tmpvar_19; + tmpvar_19 = xl_retval_16.xyzw; + mediump vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-const-out.txt b/3rdparty/glsl-optimizer/tests/fragment/array-const-out.txt index a27dfea03..fafa0adad 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-const-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-const-out.txt @@ -1,24 +1,8 @@ void main () { - vec4 c; - vec2 poisson[8]; - poisson[0] = vec2(0.0, 0.0); - poisson[1] = vec2(0.527837, -0.085868); - poisson[2] = vec2(-0.040088, 0.536087); - poisson[3] = vec2(-0.670445, -0.179949); - poisson[4] = vec2(-0.419418, -0.616039); - poisson[5] = vec2(0.440453, -0.639399); - poisson[6] = vec2(-0.757088, 0.349334); - poisson[7] = vec2(0.574619, 0.685879); - c = vec4(0.0, 0.0, 0.0, 0.0); - c.xy = poisson[0]; - c.xy = (c.xy + poisson[1]); - c.xy = (c.xy + poisson[2]); - c.xy = (c.xy + poisson[3]); - c.xy = (c.xy + poisson[4]); - c.xy = (c.xy + poisson[5]); - c.xy = (c.xy + poisson[6]); - c.xy = (c.xy + poisson[7]); - gl_FragData[0] = c; + vec4 c_1; + c_1.zw = vec2(0.0, 0.0); + c_1.xy = vec2(-0.34413, 0.050045); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-const-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/array-const-outES.txt index 84c2f7f67..bc87a08da 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-const-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-const-outES.txt @@ -1,40 +1,8 @@ void main () { - mediump vec4 c; - highp vec2 poisson[8]; - poisson[0] = vec2(0.0, 0.0); - poisson[1] = vec2(0.527837, -0.085868); - poisson[2] = vec2(-0.040088, 0.536087); - poisson[3] = vec2(-0.670445, -0.179949); - poisson[4] = vec2(-0.419418, -0.616039); - poisson[5] = vec2(0.440453, -0.639399); - poisson[6] = vec2(-0.757088, 0.349334); - poisson[7] = vec2(0.574619, 0.685879); - c = vec4(0.0, 0.0, 0.0, 0.0); - highp vec2 tmpvar_1; - tmpvar_1 = poisson[0]; - c.xy = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = (c.xy + poisson[1]); - c.xy = tmpvar_2; - highp vec2 tmpvar_3; - tmpvar_3 = (c.xy + poisson[2]); - c.xy = tmpvar_3; - highp vec2 tmpvar_4; - tmpvar_4 = (c.xy + poisson[3]); - c.xy = tmpvar_4; - highp vec2 tmpvar_5; - tmpvar_5 = (c.xy + poisson[4]); - c.xy = tmpvar_5; - highp vec2 tmpvar_6; - tmpvar_6 = (c.xy + poisson[5]); - c.xy = tmpvar_6; - highp vec2 tmpvar_7; - tmpvar_7 = (c.xy + poisson[6]); - c.xy = tmpvar_7; - highp vec2 tmpvar_8; - tmpvar_8 = (c.xy + poisson[7]); - c.xy = tmpvar_8; - gl_FragData[0] = c; + mediump vec4 c_1; + c_1.zw = vec2(0.0, 0.0); + c_1.xy = vec2(-0.34413, 0.050045); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-ir.txt index feec7c2bc..c82bf6c9b 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-ir.txt @@ -1,64 +1,64 @@ vec4 xlat_main () { - int i; - vec4 c; - vec2 poisson[8]; - vec2 tmpvar_1; - tmpvar_1 = vec2(0.0, 0.0); - poisson[0] = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = vec2(0.527837, -0.085868); - poisson[1] = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(-0.040088, 0.536087); - poisson[2] = tmpvar_3; + int i_1; + vec4 c_2; + vec2 poisson_3[8]; vec2 tmpvar_4; - tmpvar_4 = vec2(-0.670445, -0.179949); - poisson[3] = tmpvar_4; + tmpvar_4 = vec2(0.0, 0.0); + poisson_3[0] = tmpvar_4; vec2 tmpvar_5; - tmpvar_5 = vec2(-0.419418, -0.616039); - poisson[4] = tmpvar_5; + tmpvar_5 = vec2(0.527837, -0.085868); + poisson_3[1] = tmpvar_5; vec2 tmpvar_6; - tmpvar_6 = vec2(0.440453, -0.639399); - poisson[5] = tmpvar_6; + tmpvar_6 = vec2(-0.040088, 0.536087); + poisson_3[2] = tmpvar_6; vec2 tmpvar_7; - tmpvar_7 = vec2(-0.757088, 0.349334); - poisson[6] = tmpvar_7; + tmpvar_7 = vec2(-0.670445, -0.179949); + poisson_3[3] = tmpvar_7; vec2 tmpvar_8; - tmpvar_8 = vec2(0.574619, 0.685879); - poisson[7] = tmpvar_8; - int tmpvar_9; - tmpvar_9 = 0; - i = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_10; + tmpvar_8 = vec2(-0.419418, -0.616039); + poisson_3[4] = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = vec2(0.440453, -0.639399); + poisson_3[5] = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = vec2(-0.757088, 0.349334); + poisson_3[6] = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = vec2(0.574619, 0.685879); + poisson_3[7] = tmpvar_11; + int tmpvar_12; + tmpvar_12 = 0; + i_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(0.0, 0.0, 0.0, 0.0); + c_2 = tmpvar_13; while (true) { - if (!((i < 8))) { + if (!((i_1 < 8))) { break; }; - vec2 tmpvar_11; - tmpvar_11 = (c.xy + poisson[i]); - c.xy = tmpvar_11.xy.xy; - int tmpvar_12; - tmpvar_12 = (i + 1); - i = tmpvar_12; + vec2 tmpvar_14; + tmpvar_14 = (c_2.xy + poisson_3[i_1]); + c_2.xy = tmpvar_14.xy.xy; + int tmpvar_15; + tmpvar_15 = (i_1 + 1); + i_1 = tmpvar_15; }; - return c; + return c_2; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlat_main (); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + vec4 xl_retval_16; + vec4 tmpvar_17; + tmpvar_17 = xlat_main (); + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_16 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = xl_retval_16.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-irES.txt index 1fe6f6f9a..33c63750a 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-irES.txt @@ -1,64 +1,64 @@ mediump vec4 xlat_main () { - int i; - mediump vec4 c; - highp vec2 poisson[8]; - vec2 tmpvar_1; - tmpvar_1 = vec2(0.0, 0.0); - poisson[0] = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = vec2(0.527837, -0.085868); - poisson[1] = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(-0.040088, 0.536087); - poisson[2] = tmpvar_3; + int i_1; + mediump vec4 c_2; + highp vec2 poisson_3[8]; vec2 tmpvar_4; - tmpvar_4 = vec2(-0.670445, -0.179949); - poisson[3] = tmpvar_4; + tmpvar_4 = vec2(0.0, 0.0); + poisson_3[0] = tmpvar_4; vec2 tmpvar_5; - tmpvar_5 = vec2(-0.419418, -0.616039); - poisson[4] = tmpvar_5; + tmpvar_5 = vec2(0.527837, -0.085868); + poisson_3[1] = tmpvar_5; vec2 tmpvar_6; - tmpvar_6 = vec2(0.440453, -0.639399); - poisson[5] = tmpvar_6; + tmpvar_6 = vec2(-0.040088, 0.536087); + poisson_3[2] = tmpvar_6; vec2 tmpvar_7; - tmpvar_7 = vec2(-0.757088, 0.349334); - poisson[6] = tmpvar_7; + tmpvar_7 = vec2(-0.670445, -0.179949); + poisson_3[3] = tmpvar_7; vec2 tmpvar_8; - tmpvar_8 = vec2(0.574619, 0.685879); - poisson[7] = tmpvar_8; - int tmpvar_9; - tmpvar_9 = 0; - i = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_10; + tmpvar_8 = vec2(-0.419418, -0.616039); + poisson_3[4] = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = vec2(0.440453, -0.639399); + poisson_3[5] = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = vec2(-0.757088, 0.349334); + poisson_3[6] = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = vec2(0.574619, 0.685879); + poisson_3[7] = tmpvar_11; + int tmpvar_12; + tmpvar_12 = 0; + i_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(0.0, 0.0, 0.0, 0.0); + c_2 = tmpvar_13; while (true) { - if (!((i < 8))) { + if (!((i_1 < 8))) { break; }; - highp vec2 tmpvar_11; - tmpvar_11 = (c.xy + poisson[i]); - c.xy = tmpvar_11.xy.xy; - int tmpvar_12; - tmpvar_12 = (i + 1); - i = tmpvar_12; + highp vec2 tmpvar_14; + tmpvar_14 = (c_2.xy + poisson_3[i_1]); + c_2.xy = tmpvar_14.xy.xy; + int tmpvar_15; + tmpvar_15 = (i_1 + 1); + i_1 = tmpvar_15; }; - return c; + return c_2; } void main () { - mediump vec4 xl_retval; - mediump vec4 tmpvar_1; - tmpvar_1 = xlat_main (); - mediump vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - mediump vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; - mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + mediump vec4 xl_retval_16; + mediump vec4 tmpvar_17; + tmpvar_17 = xlat_main (); + mediump vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_16 = tmpvar_18; + mediump vec4 tmpvar_19; + tmpvar_19 = xl_retval_16.xyzw; + mediump vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-out.txt b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-out.txt index a27dfea03..fafa0adad 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-out.txt @@ -1,24 +1,8 @@ void main () { - vec4 c; - vec2 poisson[8]; - poisson[0] = vec2(0.0, 0.0); - poisson[1] = vec2(0.527837, -0.085868); - poisson[2] = vec2(-0.040088, 0.536087); - poisson[3] = vec2(-0.670445, -0.179949); - poisson[4] = vec2(-0.419418, -0.616039); - poisson[5] = vec2(0.440453, -0.639399); - poisson[6] = vec2(-0.757088, 0.349334); - poisson[7] = vec2(0.574619, 0.685879); - c = vec4(0.0, 0.0, 0.0, 0.0); - c.xy = poisson[0]; - c.xy = (c.xy + poisson[1]); - c.xy = (c.xy + poisson[2]); - c.xy = (c.xy + poisson[3]); - c.xy = (c.xy + poisson[4]); - c.xy = (c.xy + poisson[5]); - c.xy = (c.xy + poisson[6]); - c.xy = (c.xy + poisson[7]); - gl_FragData[0] = c; + vec4 c_1; + c_1.zw = vec2(0.0, 0.0); + c_1.xy = vec2(-0.34413, 0.050045); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES.txt index 84c2f7f67..bc87a08da 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES.txt @@ -1,40 +1,8 @@ void main () { - mediump vec4 c; - highp vec2 poisson[8]; - poisson[0] = vec2(0.0, 0.0); - poisson[1] = vec2(0.527837, -0.085868); - poisson[2] = vec2(-0.040088, 0.536087); - poisson[3] = vec2(-0.670445, -0.179949); - poisson[4] = vec2(-0.419418, -0.616039); - poisson[5] = vec2(0.440453, -0.639399); - poisson[6] = vec2(-0.757088, 0.349334); - poisson[7] = vec2(0.574619, 0.685879); - c = vec4(0.0, 0.0, 0.0, 0.0); - highp vec2 tmpvar_1; - tmpvar_1 = poisson[0]; - c.xy = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = (c.xy + poisson[1]); - c.xy = tmpvar_2; - highp vec2 tmpvar_3; - tmpvar_3 = (c.xy + poisson[2]); - c.xy = tmpvar_3; - highp vec2 tmpvar_4; - tmpvar_4 = (c.xy + poisson[3]); - c.xy = tmpvar_4; - highp vec2 tmpvar_5; - tmpvar_5 = (c.xy + poisson[4]); - c.xy = tmpvar_5; - highp vec2 tmpvar_6; - tmpvar_6 = (c.xy + poisson[5]); - c.xy = tmpvar_6; - highp vec2 tmpvar_7; - tmpvar_7 = (c.xy + poisson[6]); - c.xy = tmpvar_7; - highp vec2 tmpvar_8; - tmpvar_8 = (c.xy + poisson[7]); - c.xy = tmpvar_8; - gl_FragData[0] = c; + mediump vec4 c_1; + c_1.zw = vec2(0.0, 0.0); + c_1.xy = vec2(-0.34413, 0.050045); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ast-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/ast-ir.txt index f0a929a4b..efc75971d 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ast-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ast-ir.txt @@ -1,70 +1,70 @@ void main () { - int i; - float a; + int i_1; + float a_2; if ((gl_FragCoord.x == 1.0)) { discard; }; if ((2 == 3)) { - float tmpvar_1; - tmpvar_1 = 2.0; - a = tmpvar_1; + float tmpvar_3; + tmpvar_3 = 2.0; + a_2 = tmpvar_3; }; if ((3 == 4)) { - float tmpvar_2; - tmpvar_2 = 3.0; - a = tmpvar_2; + float tmpvar_4; + tmpvar_4 = 3.0; + a_2 = tmpvar_4; } else { - float tmpvar_3; - tmpvar_3 = 4.0; - a = tmpvar_3; + float tmpvar_5; + tmpvar_5 = 4.0; + a_2 = tmpvar_5; }; - int tmpvar_4; - tmpvar_4 = 0; - i = tmpvar_4; + int tmpvar_6; + tmpvar_6 = 0; + i_1 = tmpvar_6; while (true) { - if (!((i < 10))) { + if (!((i_1 < 10))) { break; }; - float tmpvar_5; - tmpvar_5 = (a + 1.0); - a = tmpvar_5; - int tmpvar_6; - tmpvar_6 = (i + 1); - i = tmpvar_6; + float tmpvar_7; + tmpvar_7 = (a_2 + 1.0); + a_2 = tmpvar_7; + int tmpvar_8; + tmpvar_8 = (i_1 + 1); + i_1 = tmpvar_8; }; while (true) { - float tmpvar_7; - tmpvar_7 = (a + 2.0); - a = tmpvar_7; + float tmpvar_9; + tmpvar_9 = (a_2 + 2.0); + a_2 = tmpvar_9; if (!((0 == 1))) { break; }; }; - float tmpvar_8; - tmpvar_8 = (a + 1.0); - a = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (a * a); - a = tmpvar_9; float tmpvar_10; - tmpvar_10 = -(a); - a = tmpvar_10; + tmpvar_10 = (a_2 + 1.0); + a_2 = tmpvar_10; float tmpvar_11; - tmpvar_11 = (a - 1.0); - a = tmpvar_11; + tmpvar_11 = (a_2 * a_2); + a_2 = tmpvar_11; float tmpvar_12; - tmpvar_12 = sqrt (a); + tmpvar_12 = -(a_2); + a_2 = tmpvar_12; float tmpvar_13; - tmpvar_13 = tmpvar_12; - a = tmpvar_13; + tmpvar_13 = (a_2 - 1.0); + a_2 = tmpvar_13; float tmpvar_14; - tmpvar_14 = (1.0 / a); - a = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = vec4(a); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragColor = tmpvar_16; + tmpvar_14 = sqrt (a_2); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + a_2 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = (1.0 / a_2); + a_2 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = vec4(a_2); + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + gl_FragColor = tmpvar_18; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ast-out.txt b/3rdparty/glsl-optimizer/tests/fragment/ast-out.txt index 86327ef11..8088bc658 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ast-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ast-out.txt @@ -1,25 +1,25 @@ void main () { - int i; - float a; + int i_1; + float a_2; if ((gl_FragCoord.x == 1.0)) { discard; }; - a = 4.0; - i = 0; - for (int i = 0; i < 10; ) { - a = (a + 1.0); - i = (i + 1); + a_2 = 4.0; + i_1 = 0; + for (int i_1 = 0; i_1 < 10; ) { + a_2 = (a_2 + 1.0); + i_1 = (i_1 + 1); }; while (true) { - a = (a + 2.0); + a_2 = (a_2 + 2.0); break; }; - float tmpvar_1; - tmpvar_1 = (a + 1.0); - float tmpvar_2; - tmpvar_2 = (1.0/(sqrt ((-((tmpvar_1 * tmpvar_1)) - 1.0)))); - a = tmpvar_2; - gl_FragColor = vec4(tmpvar_2); + float tmpvar_3; + tmpvar_3 = (a_2 + 1.0); + float tmpvar_4; + tmpvar_4 = inversesqrt((-((tmpvar_3 * tmpvar_3)) - 1.0)); + a_2 = tmpvar_4; + gl_FragColor = vec4(tmpvar_4); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/basic-in.txt b/3rdparty/glsl-optimizer/tests/fragment/basic-in.txt index 8526483fa..c3e52e501 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/basic-in.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/basic-in.txt @@ -1,9 +1,7 @@ -vec4 xlat_main( ); -vec4 xlat_main( ) { - return vec4( 1.00000); +vec4 xlat_main() { + return vec4(1.0, 1e7, 1e-6, 1.5); } void main() { - vec4 xl_retval; - xl_retval = xlat_main( ); - gl_FragData[0] = vec4( xl_retval); + vec4 x = xlat_main(); + gl_FragData[0] = x; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/basic-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/basic-ir.txt index c1fbea114..20d47c47c 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/basic-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/basic-ir.txt @@ -1,20 +1,18 @@ vec4 xlat_main () { - return vec4(1.0, 1.0, 1.0, 1.0); + return vec4(1.0, 1e+07, 1e-06, 1.5); } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlat_main (); + vec4 x_1; vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; + tmpvar_2 = xlat_main (); vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; + tmpvar_3 = tmpvar_2; + x_1 = tmpvar_3; vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; + tmpvar_4 = x_1; gl_FragData[0] = tmpvar_4; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/basic-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/basic-irES.txt index 636fe9d20..26e1b87e2 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/basic-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/basic-irES.txt @@ -5,16 +5,16 @@ mediump vec4 xlat_main () void main () { - mediump vec4 xl_retval; - mediump vec4 tmpvar_1; - tmpvar_1 = xlat_main (); + mediump vec4 xl_retval_1; mediump vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; + tmpvar_2 = xlat_main (); mediump vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; + tmpvar_3 = tmpvar_2; + xl_retval_1 = tmpvar_3; mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + tmpvar_4 = xl_retval_1.xyzw; + mediump vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + gl_FragData[0] = tmpvar_5; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/basic-out.txt b/3rdparty/glsl-optimizer/tests/fragment/basic-out.txt index c41789ad6..b3532e0c7 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/basic-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/basic-out.txt @@ -1,5 +1,5 @@ void main () { - gl_FragData[0] = vec4(1.0, 1.0, 1.0, 1.0); + gl_FragData[0] = vec4(1.0, 1e+07, 1e-06, 1.5); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-ir.txt index c46e53029..57bd83189 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-ir.txt @@ -10,10 +10,10 @@ void main () tmpvar_1 = log (value); tmpvar_2 = tmpvar_1; otherValue = tmpvar_2; - vec4 tmpvar_1; - tmpvar_1 = vec4(otherValue); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - gl_FragColor = tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = vec4(otherValue); + vec4 tmpvar_4; + tmpvar_4 = tmpvar_3; + gl_FragColor = tmpvar_4; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-out.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-out.txt index 10d07ae6a..32bdf2b51 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-global-init-out.txt @@ -1,9 +1,6 @@ -float otherValue; uniform float value; -//; void main () { -otherValue = log (value); - gl_FragColor = vec4(otherValue); + gl_FragColor = vec4(log(value)); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-in.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-in.txt new file mode 100644 index 000000000..48e218b26 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-in.txt @@ -0,0 +1,19 @@ +float foo (float v) +{ + float a, b; + a = v; + { + float a; + a = sin(v); + b = a; + } + a += b; + return a; +} + +varying float vv; + +void main() +{ + gl_FragColor = vec4(foo(vv)); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-ir.txt new file mode 100644 index 000000000..507b6fe6a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-ir.txt @@ -0,0 +1,36 @@ +varying float vv; +float foo ( + in float v_1 +) +{ + float a_2; + float b_3; + float a_4; + float tmpvar_5; + tmpvar_5 = v_1; + a_4 = tmpvar_5; + float tmpvar_6; + tmpvar_6 = sin (v_1); + float tmpvar_7; + tmpvar_7 = tmpvar_6; + a_2 = tmpvar_7; + float tmpvar_8; + tmpvar_8 = a_2; + b_3 = tmpvar_8; + float tmpvar_9; + tmpvar_9 = (a_4 + b_3); + a_4 = tmpvar_9; + return a_4; +} + +void main () +{ + float tmpvar_10; + tmpvar_10 = foo (vv); + vec4 tmpvar_11; + tmpvar_11 = vec4(tmpvar_10); + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + gl_FragColor = tmpvar_12; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-out.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-out.txt new file mode 100644 index 000000000..2732a7876 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-inline-names-out.txt @@ -0,0 +1,6 @@ +varying float vv; +void main () +{ + gl_FragColor = vec4((vv + sin(vv))); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-loop-null-from-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-loop-null-from-ir.txt index 0766427ae..25925fff0 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/bug-loop-null-from-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-loop-null-from-ir.txt @@ -1,43 +1,43 @@ void main () { - int i; - int k; - float a; - float tmpvar_1; - tmpvar_1 = 0.0; - a = tmpvar_1; - int tmpvar_2; - tmpvar_2 = 0; - k = tmpvar_2; - int tmpvar_3; - tmpvar_3 = 0; - i = tmpvar_3; + int i_1; + int k_2; + float a_3; + float tmpvar_4; + tmpvar_4 = 0.0; + a_3 = tmpvar_4; + int tmpvar_5; + tmpvar_5 = 0; + k_2 = tmpvar_5; + int tmpvar_6; + tmpvar_6 = 0; + i_1 = tmpvar_6; while (true) { - if (!((i < 3))) { + if (!((i_1 < 3))) { break; }; - float tmpvar_4; - tmpvar_4 = (a + 1.0); - a = tmpvar_4; - int tmpvar_5; - tmpvar_5 = (i + 1); - i = tmpvar_5; + float tmpvar_7; + tmpvar_7 = (a_3 + 1.0); + a_3 = tmpvar_7; + int tmpvar_8; + tmpvar_8 = (i_1 + 1); + i_1 = tmpvar_8; }; while (true) { - if (!((k < 3))) { + if (!((k_2 < 3))) { break; }; - float tmpvar_6; - tmpvar_6 = (a + 3.0); - a = tmpvar_6; - int tmpvar_7; - tmpvar_7 = (k + 1); - k = tmpvar_7; + float tmpvar_9; + tmpvar_9 = (a_3 + 3.0); + a_3 = tmpvar_9; + int tmpvar_10; + tmpvar_10 = (k_2 + 1); + k_2 = tmpvar_10; }; - vec4 tmpvar_8; - tmpvar_8 = vec4(a); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragColor = tmpvar_9; + vec4 tmpvar_11; + tmpvar_11 = vec4(a_3); + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + gl_FragColor = tmpvar_12; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/bug-op-parens-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/bug-op-parens-ir.txt index f763f4bac..e1688fe34 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/bug-op-parens-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/bug-op-parens-ir.txt @@ -2,18 +2,18 @@ uniform float otherValue; uniform float value; void main () { - float result; - float invValue; - float tmpvar_1; - tmpvar_1 = (1.0 / value); - invValue = tmpvar_1; - float tmpvar_2; - tmpvar_2 = (otherValue / invValue); - result = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(result); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragColor = tmpvar_4; + float result_1; + float invValue_2; + float tmpvar_3; + tmpvar_3 = (1.0 / value); + invValue_2 = tmpvar_3; + float tmpvar_4; + tmpvar_4 = (otherValue / invValue_2); + result_1 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(result_1); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + gl_FragColor = tmpvar_6; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-ir.txt deleted file mode 100644 index b80274de3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-ir.txt +++ /dev/null @@ -1,215 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 vlight; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - float tmpvar_1; - tmpvar_1 = 1.0; - atten = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.viewDir.xyz; - vec3 tmpvar_10; - tmpvar_10 = normalize (tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = LightingBlinnPhong (o, IN.lightDir, tmpvar_10, atten); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_13.xyz.xyz; - float tmpvar_14; - tmpvar_14 = o.Alpha; - c.w = vec4(tmpvar_14).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.vlight = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-out.txt deleted file mode 100644 index 827ae6291..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-out.txt +++ /dev/null @@ -1,35 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3.xyz * _Color.xyz); - float tmpvar_5; - tmpvar_5 = (tmpvar_3.w * _Color.w); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_6; - tmpvar_6 = normal.xyz; - vec4 c_i0; - float tmpvar_7; - tmpvar_7 = (pow (max (0.0, dot (tmpvar_6, normalize ((tmpvar_2 + normalize (gl_TexCoord[1].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0.xyz = ((((tmpvar_4 * _LightColor0.xyz) * max (0.0, dot (tmpvar_6, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_7)) * 2.0); - c_i0.w = (tmpvar_5 + ((_LightColor0.w * _SpecColor.w) * tmpvar_7)); - c = c_i0; - c.xyz = (c_i0.xyz + (tmpvar_4 * gl_TexCoord[3].xyz)); - c.w = tmpvar_5; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-ir.txt deleted file mode 100644 index 618f61203..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-ir.txt +++ /dev/null @@ -1,191 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec3 ray; -}; -uniform vec4 _ZBufferParams; -uniform mat4 _View2Shadow3; -uniform mat4 _View2Shadow2; -uniform mat4 _View2Shadow1; -uniform mat4 _View2Shadow; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform sampler2D _CameraDepthTexture; -float unitySampleShadow ( - in vec4 eyePos -) -{ - float shadow; - vec4 coord; - vec4 weights; - vec4 far; - vec4 near; - float z; - vec3 sc3; - vec3 sc2; - vec3 sc1; - vec3 sc0; - vec3 tmpvar_1; - tmpvar_1 = (_View2Shadow * eyePos).xyz; - sc0 = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = (_View2Shadow1 * eyePos).xyz; - sc1 = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (_View2Shadow2 * eyePos).xyz; - sc2 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = (_View2Shadow3 * eyePos).xyz; - sc3 = tmpvar_4; - float tmpvar_5; - tmpvar_5 = eyePos.z; - z = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = vec4(z); - bvec4 tmpvar_7; - tmpvar_7 = greaterThanEqual (tmpvar_6, _LightSplitsNear); - vec4 tmpvar_8; - tmpvar_8 = vec4(tmpvar_7).xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - near = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = vec4(z); - bvec4 tmpvar_11; - tmpvar_11 = lessThan (tmpvar_10, _LightSplitsFar); - vec4 tmpvar_12; - tmpvar_12 = vec4(tmpvar_11).xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - far = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = (near * far); - weights = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = 1.0; - tmpvar_15.xyz = ((((sc0 * weights.x) + (sc1 * weights.y)) + (sc2 * weights.z)) + (sc3 * weights.w)).xyz; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - coord = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_ShadowMapTexture, coord.xy); - float tmpvar_18; - if ((tmpvar_17.x < coord.z)) { - tmpvar_18 = _LightShadowData.x; - } else { - tmpvar_18 = 1.0; - }; - float tmpvar_19; - tmpvar_19 = tmpvar_18; - shadow = tmpvar_19; - return shadow; -} - -float Linear01Depth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 xlat_main ( - in v2f i -) -{ - vec4 res; - float shadow; - vec4 vpos; - float depth; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_CameraDepthTexture, i.uv); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - depth = tmpvar_2; - float tmpvar_3; - tmpvar_3 = Linear01Depth (depth); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - depth = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.w = 1.0; - tmpvar_5.xyz = (i.ray * depth).xyz; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - vpos = tmpvar_6; - float tmpvar_7; - tmpvar_7 = unitySampleShadow (vpos); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - shadow = tmpvar_8; - float tmpvar_9; - tmpvar_9 = shadow; - res.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 1.0; - res.y = vec2(tmpvar_10).y; - vec2 tmpvar_11; - tmpvar_11 = EncodeFloatRG ((1.0 - depth)); - vec2 tmpvar_12; - tmpvar_12 = tmpvar_11; - res.zw = tmpvar_12.xxxy.zw; - return res; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.ray = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-irES.txt deleted file mode 100644 index 56963b8a4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-irES.txt +++ /dev/null @@ -1,193 +0,0 @@ -struct v2f { - highp vec4 pos; - highp vec2 uv; - highp vec3 ray; -}; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec2 xlv_TEXCOORD0; -uniform highp vec4 _ZBufferParams; -uniform highp mat4 _View2Shadow3; -uniform highp mat4 _View2Shadow2; -uniform highp mat4 _View2Shadow1; -uniform highp mat4 _View2Shadow; -uniform sampler2D _ShadowMapTexture; -uniform highp vec4 _LightSplitsNear; -uniform highp vec4 _LightSplitsFar; -uniform highp vec4 _LightShadowData; -uniform sampler2D _CameraDepthTexture; -mediump float unitySampleShadow ( - in highp vec4 eyePos -) -{ - mediump float shadow; - highp vec4 coord; - highp vec4 weights; - highp vec4 far; - highp vec4 near; - highp float z; - highp vec3 sc3; - highp vec3 sc2; - highp vec3 sc1; - highp vec3 sc0; - highp vec3 tmpvar_1; - tmpvar_1 = (_View2Shadow * eyePos).xyz; - sc0 = tmpvar_1; - highp vec3 tmpvar_2; - tmpvar_2 = (_View2Shadow1 * eyePos).xyz; - sc1 = tmpvar_2; - highp vec3 tmpvar_3; - tmpvar_3 = (_View2Shadow2 * eyePos).xyz; - sc2 = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = (_View2Shadow3 * eyePos).xyz; - sc3 = tmpvar_4; - highp float tmpvar_5; - tmpvar_5 = eyePos.z; - z = tmpvar_5; - highp vec4 tmpvar_6; - tmpvar_6 = vec4(z); - bvec4 tmpvar_7; - tmpvar_7 = greaterThanEqual (tmpvar_6, _LightSplitsNear); - lowp vec4 tmpvar_8; - tmpvar_8 = vec4(tmpvar_7).xyzw; - lowp vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - near = tmpvar_9; - highp vec4 tmpvar_10; - tmpvar_10 = vec4(z); - bvec4 tmpvar_11; - tmpvar_11 = lessThan (tmpvar_10, _LightSplitsFar); - lowp vec4 tmpvar_12; - tmpvar_12 = vec4(tmpvar_11).xyzw; - lowp vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - far = tmpvar_13; - highp vec4 tmpvar_14; - tmpvar_14 = (near * far); - weights = tmpvar_14; - highp vec4 tmpvar_15; - tmpvar_15.w = 1.0; - tmpvar_15.xyz = ((((sc0 * weights.x) + (sc1 * weights.y)) + (sc2 * weights.z)) + (sc3 * weights.w)).xyz; - highp vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - coord = tmpvar_16; - lowp vec4 tmpvar_17; - tmpvar_17 = texture2D (_ShadowMapTexture, coord.xy); - highp float tmpvar_18; - if ((tmpvar_17.x < coord.z)) { - tmpvar_18 = _LightShadowData.x; - } else { - tmpvar_18 = 1.0; - }; - highp float tmpvar_19; - tmpvar_19 = tmpvar_18; - shadow = tmpvar_19; - return shadow; -} - -float Linear01Depth ( - in highp float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -vec2 EncodeFloatRG ( - in highp float v -) -{ - highp vec2 enc; - highp float kEncodeBit; - highp vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - highp vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - highp vec2 tmpvar_4; - tmpvar_4 = fract (enc); - highp vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - highp float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -mediump vec4 xlat_main ( - in v2f i -) -{ - highp vec4 res; - mediump float shadow; - highp vec4 vpos; - highp float depth; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_CameraDepthTexture, i.uv); - lowp float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - depth = tmpvar_2; - highp float tmpvar_3; - tmpvar_3 = Linear01Depth (depth); - highp float tmpvar_4; - tmpvar_4 = tmpvar_3; - depth = tmpvar_4; - highp vec4 tmpvar_5; - tmpvar_5.w = 1.0; - tmpvar_5.xyz = (i.ray * depth).xyz; - highp vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - vpos = tmpvar_6; - mediump float tmpvar_7; - tmpvar_7 = unitySampleShadow (vpos); - mediump float tmpvar_8; - tmpvar_8 = tmpvar_7; - shadow = tmpvar_8; - mediump float tmpvar_9; - tmpvar_9 = shadow; - res.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 1.0; - res.y = vec2(tmpvar_10).y; - highp vec2 tmpvar_11; - tmpvar_11 = EncodeFloatRG ((1.0 - depth)); - highp vec2 tmpvar_12; - tmpvar_12 = tmpvar_11; - res.zw = tmpvar_12.xxxy.zw; - return res; -} - -void main () -{ - v2f xlt_i; - mediump vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - highp vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD1.xyz; - highp vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.ray = tmpvar_5; - mediump vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - mediump vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - mediump vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - mediump vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-out.txt deleted file mode 100644 index cf05b5448..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-out.txt +++ /dev/null @@ -1,42 +0,0 @@ -uniform vec4 _ZBufferParams; -uniform mat4 _View2Shadow3; -uniform mat4 _View2Shadow2; -uniform mat4 _View2Shadow1; -uniform mat4 _View2Shadow; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform sampler2D _CameraDepthTexture; -void main () -{ - vec4 res; - float tmpvar_1; - tmpvar_1 = (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, gl_TexCoord[0].xy).x) + _ZBufferParams.y))); - vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = (gl_TexCoord[1].xyz * tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = (vec4(greaterThanEqual (tmpvar_2.zzzz, _LightSplitsNear)) * vec4(lessThan (tmpvar_2.zzzz, _LightSplitsFar))); - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = (((((_View2Shadow * tmpvar_2).xyz * tmpvar_3.x) + ((_View2Shadow1 * tmpvar_2).xyz * tmpvar_3.y)) + ((_View2Shadow2 * tmpvar_2).xyz * tmpvar_3.z)) + ((_View2Shadow3 * tmpvar_2).xyz * tmpvar_3.w)); - vec4 tmpvar_5; - tmpvar_5 = texture2D (_ShadowMapTexture, tmpvar_4.xy); - float tmpvar_6; - if ((tmpvar_5.x < tmpvar_4.z)) { - tmpvar_6 = _LightShadowData.x; - } else { - tmpvar_6 = 1.0; - }; - res.x = tmpvar_6; - res.y = 1.0; - vec2 enc; - vec2 tmpvar_7; - tmpvar_7 = fract ((vec2(1.0, 255.0) * (1.0 - tmpvar_1))); - enc = tmpvar_7; - enc.x = (tmpvar_7.x - (tmpvar_7.y * 0.00392157)); - res.zw = enc; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-outES.txt deleted file mode 100644 index 2137898f1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-outES.txt +++ /dev/null @@ -1,65 +0,0 @@ -varying highp vec3 xlv_TEXCOORD1; -varying highp vec2 xlv_TEXCOORD0; -uniform highp vec4 _ZBufferParams; -uniform highp mat4 _View2Shadow3; -uniform highp mat4 _View2Shadow2; -uniform highp mat4 _View2Shadow1; -uniform highp mat4 _View2Shadow; -uniform sampler2D _ShadowMapTexture; -uniform highp vec4 _LightSplitsNear; -uniform highp vec4 _LightSplitsFar; -uniform highp vec4 _LightShadowData; -uniform sampler2D _CameraDepthTexture; -void main () -{ - mediump vec4 tmpvar_1; - highp vec4 res; - highp float depth; - lowp float tmpvar_2; - tmpvar_2 = texture2D (_CameraDepthTexture, xlv_TEXCOORD0).x; - depth = tmpvar_2; - highp float tmpvar_3; - tmpvar_3 = (1.0/(((_ZBufferParams.x * depth) + _ZBufferParams.y))); - depth = tmpvar_3; - highp vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = (xlv_TEXCOORD1 * tmpvar_3); - mediump float shadow_i0; - highp vec4 far; - highp vec4 near; - highp vec4 tmpvar_5; - tmpvar_5 = tmpvar_4.zzzz; - lowp vec4 tmpvar_6; - tmpvar_6 = vec4(greaterThanEqual (tmpvar_5, _LightSplitsNear)); - near = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7 = tmpvar_4.zzzz; - lowp vec4 tmpvar_8; - tmpvar_8 = vec4(lessThan (tmpvar_7, _LightSplitsFar)); - far = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9 = (near * far); - highp vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = (((((_View2Shadow * tmpvar_4).xyz * tmpvar_9.x) + ((_View2Shadow1 * tmpvar_4).xyz * tmpvar_9.y)) + ((_View2Shadow2 * tmpvar_4).xyz * tmpvar_9.z)) + ((_View2Shadow3 * tmpvar_4).xyz * tmpvar_9.w)); - lowp vec4 tmpvar_11; - tmpvar_11 = texture2D (_ShadowMapTexture, tmpvar_10.xy); - highp float tmpvar_12; - if ((tmpvar_11.x < tmpvar_10.z)) { - tmpvar_12 = _LightShadowData.x; - } else { - tmpvar_12 = 1.0; - }; - shadow_i0 = tmpvar_12; - res.x = shadow_i0; - res.y = 1.0; - highp vec2 enc; - highp vec2 tmpvar_13; - tmpvar_13 = fract ((vec2(1.0, 255.0) * (1.0 - tmpvar_3))); - enc = tmpvar_13; - enc.x = (tmpvar_13.x - (tmpvar_13.y * 0.00392157)); - res.zw = enc; - tmpvar_1 = res; - gl_FragData[0] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-flare-ir.txt deleted file mode 100644 index 235f7f730..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-ir.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform sampler2D _FlareTexture; -vec4 xlat_main ( - in vec4 color, - in vec2 texcoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_FlareTexture, texcoord); - return (tmpvar_1 * color); -} - -void main () -{ - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Color.xyzw; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec4 tmpvar_3; - tmpvar_3 = xlat_main (tmpvar_1, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = xl_retval.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_FragData[0] = tmpvar_6; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-flare-irES.txt deleted file mode 100644 index 35ec449a3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-irES.txt +++ /dev/null @@ -1,32 +0,0 @@ -varying highp vec2 xlv_TEXCOORD0; -varying lowp vec4 xlv_COLOR; -uniform sampler2D _FlareTexture; -lowp vec4 xlat_main ( - in lowp vec4 color, - in highp vec2 texcoord -) -{ - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_FlareTexture, texcoord); - return (tmpvar_1 * color); -} - -void main () -{ - lowp vec4 xl_retval; - lowp vec4 tmpvar_1; - tmpvar_1 = xlv_COLOR.xyzw; - highp vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - lowp vec4 tmpvar_3; - tmpvar_3 = xlat_main (tmpvar_1, tmpvar_2); - lowp vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - lowp vec4 tmpvar_5; - tmpvar_5 = xl_retval.xyzw; - lowp vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_FragData[0] = tmpvar_6; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-ir.txt deleted file mode 100644 index 06280544b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-ir.txt +++ /dev/null @@ -1,609 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -varying vec2 xlv_TEXCOORD0; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; -} - -vec4 xll_tex2Dgrad ( - in sampler2D s, - in vec2 coord, - in vec2 ddx, - in vec2 ddy -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DGradARB (s, coord, ddx, ddy); - return tmpvar_1; -} - -vec4 FxaaTexOff ( - in sampler2D tex, - in vec2 pos, - in vec2 off, - in vec2 rcpFrame -) -{ - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = (pos.xy + (off * rcpFrame)).xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - return tmpvar_2; -} - -vec4 FxaaTexLod0 ( - in sampler2D tex, - in vec2 pos -) -{ - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = pos.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - return tmpvar_2; -} - -vec4 FxaaTexGrad ( - in sampler2D tex, - in vec2 pos, - in vec2 grad -) -{ - vec4 tmpvar_1; - tmpvar_1 = xll_tex2Dgrad (tex, pos.xy, grad, grad); - return tmpvar_1; -} - -float FxaaLuma ( - in vec3 rgb -) -{ - return ((rgb.y * 1.96321) + rgb.x); -} - -vec3 FxaaLerp3 ( - in vec3 a, - in vec3 b, - in float amountOfA -) -{ - vec3 tmpvar_1; - tmpvar_1.x = -(amountOfA); - tmpvar_1.y = -(amountOfA); - tmpvar_1.z = -(amountOfA); - vec3 tmpvar_2; - tmpvar_2.x = amountOfA; - tmpvar_2.y = amountOfA; - tmpvar_2.z = amountOfA; - return ((tmpvar_1 * b) + ((a * tmpvar_2) + b)); -} - -vec3 FxaaFilterReturn ( - in vec3 rgb -) -{ - return rgb; -} - -vec3 FxaaPixelShader ( - in vec2 pos, - in sampler2D tex, - in vec2 rcpFrame -) -{ - vec3 rgbF; - float subPixelOffset; - float spanLength; - bool directionN; - float dstP; - float dstN; - int i; - bool doneP; - bool doneN; - float lumaEndP; - float lumaEndN; - vec2 offNP; - vec2 posP; - vec2 posN; - bool pairN; - float gradientS; - float gradientN; - float lengthSign; - bool horzSpan; - float edgeHorz; - float edgeVert; - float lumaSE; - float lumaSW; - float lumaNE; - float lumaNW; - vec3 rgbSE; - vec3 rgbSW; - vec3 rgbNE; - vec3 rgbNW; - float blendL; - float rangeL; - float lumaL; - vec3 rgbL; - float range; - float rangeMax; - float rangeMin; - float lumaS; - float lumaE; - float lumaM; - float lumaW; - float lumaN; - vec3 rgbS; - vec3 rgbE; - vec3 rgbM; - vec3 rgbW; - vec3 rgbN; - bool tmpvar_1; - tmpvar_1 = bool(0); - doneN = tmpvar_1; - bool tmpvar_2; - tmpvar_2 = bool(0); - doneP = tmpvar_2; - int tmpvar_3; - tmpvar_3 = 0; - i = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = FxaaTexOff (tex, pos.xy, vec2(0.0, -1.0), rcpFrame); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - rgbN = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = FxaaTexOff (tex, pos.xy, vec2(-1.0, 0.0), rcpFrame); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - rgbW = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = FxaaTexOff (tex, pos.xy, vec2(0.0, 0.0), rcpFrame); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - rgbM = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = FxaaTexOff (tex, pos.xy, vec2(1.0, 0.0), rcpFrame); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10.xyz; - rgbE = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = FxaaTexOff (tex, pos.xy, vec2(0.0, 1.0), rcpFrame); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - rgbS = tmpvar_13; - float tmpvar_14; - tmpvar_14 = FxaaLuma (rgbN); - float tmpvar_15; - tmpvar_15 = tmpvar_14; - lumaN = tmpvar_15; - float tmpvar_16; - tmpvar_16 = FxaaLuma (rgbW); - float tmpvar_17; - tmpvar_17 = tmpvar_16; - lumaW = tmpvar_17; - float tmpvar_18; - tmpvar_18 = FxaaLuma (rgbM); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - lumaM = tmpvar_19; - float tmpvar_20; - tmpvar_20 = FxaaLuma (rgbE); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - lumaE = tmpvar_21; - float tmpvar_22; - tmpvar_22 = FxaaLuma (rgbS); - float tmpvar_23; - tmpvar_23 = tmpvar_22; - lumaS = tmpvar_23; - float tmpvar_24; - tmpvar_24 = min (lumaN, lumaW); - float tmpvar_25; - tmpvar_25 = min (lumaS, lumaE); - float tmpvar_26; - tmpvar_26 = min (tmpvar_24, tmpvar_25); - float tmpvar_27; - tmpvar_27 = min (lumaM, tmpvar_26); - float tmpvar_28; - tmpvar_28 = tmpvar_27; - rangeMin = tmpvar_28; - float tmpvar_29; - tmpvar_29 = max (lumaN, lumaW); - float tmpvar_30; - tmpvar_30 = max (lumaS, lumaE); - float tmpvar_31; - tmpvar_31 = max (tmpvar_29, tmpvar_30); - float tmpvar_32; - tmpvar_32 = max (lumaM, tmpvar_31); - float tmpvar_33; - tmpvar_33 = tmpvar_32; - rangeMax = tmpvar_33; - float tmpvar_34; - tmpvar_34 = (rangeMax - rangeMin); - range = tmpvar_34; - float tmpvar_35; - tmpvar_35 = max (0.0625, (rangeMax * 0.125)); - if ((range < tmpvar_35)) { - vec3 tmpvar_36; - tmpvar_36 = FxaaFilterReturn (rgbM); - return tmpvar_36; - }; - vec3 tmpvar_37; - tmpvar_37 = ((((rgbN + rgbW) + rgbM) + rgbE) + rgbS); - rgbL = tmpvar_37; - float tmpvar_38; - tmpvar_38 = ((((lumaN + lumaW) + lumaE) + lumaS) * 0.25); - lumaL = tmpvar_38; - float tmpvar_39; - tmpvar_39 = abs ((lumaL - lumaM)); - float tmpvar_40; - tmpvar_40 = tmpvar_39; - rangeL = tmpvar_40; - float tmpvar_41; - tmpvar_41 = max (0.0, ((rangeL / range) - 0.25)); - float tmpvar_42; - tmpvar_42 = (tmpvar_41 * 1.33333); - blendL = tmpvar_42; - float tmpvar_43; - tmpvar_43 = min (0.75, blendL); - float tmpvar_44; - tmpvar_44 = tmpvar_43; - blendL = tmpvar_44; - vec4 tmpvar_45; - tmpvar_45 = FxaaTexOff (tex, pos.xy, vec2(-1.0, -1.0), rcpFrame); - vec3 tmpvar_46; - tmpvar_46 = tmpvar_45.xyz; - rgbNW = tmpvar_46; - vec4 tmpvar_47; - tmpvar_47 = FxaaTexOff (tex, pos.xy, vec2(1.0, -1.0), rcpFrame); - vec3 tmpvar_48; - tmpvar_48 = tmpvar_47.xyz; - rgbNE = tmpvar_48; - vec4 tmpvar_49; - tmpvar_49 = FxaaTexOff (tex, pos.xy, vec2(-1.0, 1.0), rcpFrame); - vec3 tmpvar_50; - tmpvar_50 = tmpvar_49.xyz; - rgbSW = tmpvar_50; - vec4 tmpvar_51; - tmpvar_51 = FxaaTexOff (tex, pos.xy, vec2(1.0, 1.0), rcpFrame); - vec3 tmpvar_52; - tmpvar_52 = tmpvar_51.xyz; - rgbSE = tmpvar_52; - vec3 tmpvar_53; - tmpvar_53 = (rgbL + (((rgbNW + rgbNE) + rgbSW) + rgbSE)); - rgbL = tmpvar_53; - vec3 tmpvar_54; - tmpvar_54 = (rgbL * vec3(0.111111, 0.111111, 0.111111)); - rgbL = tmpvar_54; - float tmpvar_55; - tmpvar_55 = FxaaLuma (rgbNW); - float tmpvar_56; - tmpvar_56 = tmpvar_55; - lumaNW = tmpvar_56; - float tmpvar_57; - tmpvar_57 = FxaaLuma (rgbNE); - float tmpvar_58; - tmpvar_58 = tmpvar_57; - lumaNE = tmpvar_58; - float tmpvar_59; - tmpvar_59 = FxaaLuma (rgbSW); - float tmpvar_60; - tmpvar_60 = tmpvar_59; - lumaSW = tmpvar_60; - float tmpvar_61; - tmpvar_61 = FxaaLuma (rgbSE); - float tmpvar_62; - tmpvar_62 = tmpvar_61; - lumaSE = tmpvar_62; - float tmpvar_63; - tmpvar_63 = abs ((((0.25 * lumaNW) + (-(0.5) * lumaN)) + (0.25 * lumaNE))); - float tmpvar_64; - tmpvar_64 = abs ((((0.5 * lumaW) + (-(1.0) * lumaM)) + (0.5 * lumaE))); - float tmpvar_65; - tmpvar_65 = abs ((((0.25 * lumaSW) + (-(0.5) * lumaS)) + (0.25 * lumaSE))); - float tmpvar_66; - tmpvar_66 = ((tmpvar_63 + tmpvar_64) + tmpvar_65); - edgeVert = tmpvar_66; - float tmpvar_67; - tmpvar_67 = abs ((((0.25 * lumaNW) + (-(0.5) * lumaW)) + (0.25 * lumaSW))); - float tmpvar_68; - tmpvar_68 = abs ((((0.5 * lumaN) + (-(1.0) * lumaM)) + (0.5 * lumaS))); - float tmpvar_69; - tmpvar_69 = abs ((((0.25 * lumaNE) + (-(0.5) * lumaE)) + (0.25 * lumaSE))); - float tmpvar_70; - tmpvar_70 = ((tmpvar_67 + tmpvar_68) + tmpvar_69); - edgeHorz = tmpvar_70; - bool tmpvar_71; - tmpvar_71 = (edgeHorz >= edgeVert); - horzSpan = tmpvar_71; - float tmpvar_72; - if (horzSpan) { - tmpvar_72 = -(rcpFrame.y); - } else { - tmpvar_72 = -(rcpFrame.x); - }; - float tmpvar_73; - tmpvar_73 = tmpvar_72; - lengthSign = tmpvar_73; - if (!(horzSpan)) { - float tmpvar_74; - tmpvar_74 = lumaW; - lumaN = tmpvar_74; - }; - if (!(horzSpan)) { - float tmpvar_75; - tmpvar_75 = lumaE; - lumaS = tmpvar_75; - }; - float tmpvar_76; - tmpvar_76 = abs ((lumaN - lumaM)); - float tmpvar_77; - tmpvar_77 = tmpvar_76; - gradientN = tmpvar_77; - float tmpvar_78; - tmpvar_78 = abs ((lumaS - lumaM)); - float tmpvar_79; - tmpvar_79 = tmpvar_78; - gradientS = tmpvar_79; - float tmpvar_80; - tmpvar_80 = ((lumaN + lumaM) * 0.5); - lumaN = tmpvar_80; - float tmpvar_81; - tmpvar_81 = ((lumaS + lumaM) * 0.5); - lumaS = tmpvar_81; - bool tmpvar_82; - tmpvar_82 = (gradientN >= gradientS); - pairN = tmpvar_82; - if (!(pairN)) { - float tmpvar_83; - tmpvar_83 = lumaS; - lumaN = tmpvar_83; - }; - if (!(pairN)) { - float tmpvar_84; - tmpvar_84 = gradientS; - gradientN = tmpvar_84; - }; - if (!(pairN)) { - float tmpvar_85; - tmpvar_85 = (lengthSign * -(1.0)); - lengthSign = tmpvar_85; - }; - float tmpvar_86; - if (horzSpan) { - tmpvar_86 = 0.0; - } else { - tmpvar_86 = (lengthSign * 0.5); - }; - float tmpvar_87; - tmpvar_87 = (pos.x + tmpvar_86); - posN.x = tmpvar_87; - float tmpvar_88; - if (horzSpan) { - tmpvar_88 = (lengthSign * 0.5); - } else { - tmpvar_88 = 0.0; - }; - float tmpvar_89; - tmpvar_89 = (pos.y + tmpvar_88); - posN.y = vec2(tmpvar_89).y; - float tmpvar_90; - tmpvar_90 = (gradientN * 0.25); - gradientN = tmpvar_90; - vec2 tmpvar_91; - tmpvar_91 = posN; - posP = tmpvar_91; - vec2 tmpvar_92; - if (horzSpan) { - vec2 tmpvar_93; - tmpvar_93.y = 0.0; - tmpvar_93.x = rcpFrame.x; - tmpvar_92 = tmpvar_93; - } else { - vec2 tmpvar_94; - tmpvar_94.x = 0.0; - tmpvar_94.y = rcpFrame.y; - tmpvar_92 = tmpvar_94; - }; - vec2 tmpvar_95; - tmpvar_95 = tmpvar_92; - offNP = tmpvar_95; - float tmpvar_96; - tmpvar_96 = lumaN; - lumaEndN = tmpvar_96; - float tmpvar_97; - tmpvar_97 = lumaN; - lumaEndP = tmpvar_97; - vec2 tmpvar_98; - tmpvar_98 = (posN + (offNP * vec2(-2.0, -2.0))); - posN = tmpvar_98; - vec2 tmpvar_99; - tmpvar_99 = (posP + (offNP * vec2(2.0, 2.0))); - posP = tmpvar_99; - vec2 tmpvar_100; - tmpvar_100 = (offNP * vec2(3.0, 3.0)); - offNP = tmpvar_100; - while (true) { - if (!((i < 4))) { - break; - }; - if (!(doneN)) { - vec4 tmpvar_101; - tmpvar_101 = FxaaTexGrad (tex, posN.xy, offNP); - float tmpvar_102; - tmpvar_102 = FxaaLuma (tmpvar_101.xyz); - float tmpvar_103; - tmpvar_103 = tmpvar_102; - lumaEndN = tmpvar_103; - }; - if (!(doneP)) { - vec4 tmpvar_104; - tmpvar_104 = FxaaTexGrad (tex, posP.xy, offNP); - float tmpvar_105; - tmpvar_105 = FxaaLuma (tmpvar_104.xyz); - float tmpvar_106; - tmpvar_106 = tmpvar_105; - lumaEndP = tmpvar_106; - }; - bool tmpvar_107; - if (doneN) { - tmpvar_107 = bool(1); - } else { - float tmpvar_108; - tmpvar_108 = abs ((lumaEndN - lumaN)); - tmpvar_107 = (tmpvar_108 >= gradientN); - }; - bool tmpvar_109; - tmpvar_109 = tmpvar_107; - doneN = tmpvar_109; - bool tmpvar_110; - if (doneP) { - tmpvar_110 = bool(1); - } else { - float tmpvar_111; - tmpvar_111 = abs ((lumaEndP - lumaN)); - tmpvar_110 = (tmpvar_111 >= gradientN); - }; - bool tmpvar_112; - tmpvar_112 = tmpvar_110; - doneP = tmpvar_112; - bool tmpvar_113; - if (doneN) { - tmpvar_113 = doneP; - } else { - tmpvar_113 = bool(0); - }; - if (tmpvar_113) { - break; - }; - if (!(doneN)) { - vec2 tmpvar_114; - tmpvar_114 = (posN - offNP); - posN = tmpvar_114; - }; - if (!(doneP)) { - vec2 tmpvar_115; - tmpvar_115 = (posP + offNP); - posP = tmpvar_115; - }; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_116; - tmpvar_116 = (i + 1); - i = tmpvar_116; - }; - float tmpvar_117; - if (horzSpan) { - tmpvar_117 = (pos.x - posN.x); - } else { - tmpvar_117 = (pos.y - posN.y); - }; - float tmpvar_118; - tmpvar_118 = tmpvar_117; - dstN = tmpvar_118; - float tmpvar_119; - if (horzSpan) { - tmpvar_119 = (posP.x - pos.x); - } else { - tmpvar_119 = (posP.y - pos.y); - }; - float tmpvar_120; - tmpvar_120 = tmpvar_119; - dstP = tmpvar_120; - bool tmpvar_121; - tmpvar_121 = (dstN < dstP); - directionN = tmpvar_121; - float tmpvar_122; - if (directionN) { - tmpvar_122 = lumaEndN; - } else { - tmpvar_122 = lumaEndP; - }; - float tmpvar_123; - tmpvar_123 = tmpvar_122; - lumaEndN = tmpvar_123; - if ((((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0))) { - float tmpvar_124; - tmpvar_124 = 0.0; - lengthSign = tmpvar_124; - }; - float tmpvar_125; - tmpvar_125 = (dstP + dstN); - spanLength = tmpvar_125; - float tmpvar_126; - if (directionN) { - tmpvar_126 = dstN; - } else { - tmpvar_126 = dstP; - }; - float tmpvar_127; - tmpvar_127 = tmpvar_126; - dstN = tmpvar_127; - float tmpvar_128; - tmpvar_128 = ((0.5 + (dstN * (-(1.0) / spanLength))) * lengthSign); - subPixelOffset = tmpvar_128; - float tmpvar_129; - if (horzSpan) { - tmpvar_129 = 0.0; - } else { - tmpvar_129 = subPixelOffset; - }; - float tmpvar_130; - if (horzSpan) { - tmpvar_130 = subPixelOffset; - } else { - tmpvar_130 = 0.0; - }; - vec2 tmpvar_131; - tmpvar_131.x = (pos.x + tmpvar_129); - tmpvar_131.y = (pos.y + tmpvar_130); - vec4 tmpvar_132; - tmpvar_132 = FxaaTexLod0 (tex, tmpvar_131); - vec3 tmpvar_133; - tmpvar_133 = tmpvar_132.xyz; - rgbF = tmpvar_133; - vec3 tmpvar_134; - tmpvar_134 = FxaaLerp3 (rgbL, rgbF, blendL); - vec3 tmpvar_135; - tmpvar_135 = FxaaFilterReturn (tmpvar_134); - return tmpvar_135; -} - -vec4 xlat_main ( - in vec2 uv -) -{ - vec3 tmpvar_1; - tmpvar_1 = FxaaPixelShader (uv.xy, _MainTex, _MainTex_TexelSize.xy); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = tmpvar_1.xyz.xyz; - return tmpvar_2; -} - -void main () -{ - vec4 xl_retval; - vec2 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xy; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-out.txt deleted file mode 100644 index 8b21a4443..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-out.txt +++ /dev/null @@ -1,279 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -varying vec2 xlv_TEXCOORD0; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -void main () -{ - vec3 tmpvar_1; - int i; - bool doneP; - bool doneN; - float lumaEndP; - float lumaEndN; - vec2 offNP; - vec2 posP; - vec2 posN; - float gradientN; - float lengthSign; - float lumaS; - float lumaN; - doneN = bool(0); - doneP = bool(0); - i = 0; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_3; - tmpvar_3 = texture2DLod (_MainTex, tmpvar_2.xy, 0.0); - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_5; - tmpvar_5 = texture2DLod (_MainTex, tmpvar_4.xy, 0.0); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = xlv_TEXCOORD0; - vec4 tmpvar_7; - tmpvar_7 = texture2DLod (_MainTex, tmpvar_6.xy, 0.0); - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_9; - tmpvar_9 = texture2DLod (_MainTex, tmpvar_8.xy, 0.0); - vec4 tmpvar_10; - tmpvar_10.zw = vec2(0.0, 0.0); - tmpvar_10.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_11; - tmpvar_11 = texture2DLod (_MainTex, tmpvar_10.xy, 0.0); - float tmpvar_12; - tmpvar_12 = ((tmpvar_3.y * 1.96321) + tmpvar_3.x); - lumaN = tmpvar_12; - float tmpvar_13; - tmpvar_13 = ((tmpvar_5.y * 1.96321) + tmpvar_5.x); - float tmpvar_14; - tmpvar_14 = ((tmpvar_7.y * 1.96321) + tmpvar_7.x); - float tmpvar_15; - tmpvar_15 = ((tmpvar_9.y * 1.96321) + tmpvar_9.x); - float tmpvar_16; - tmpvar_16 = ((tmpvar_11.y * 1.96321) + tmpvar_11.x); - lumaS = tmpvar_16; - float tmpvar_17; - tmpvar_17 = max (tmpvar_14, max (max (tmpvar_12, tmpvar_13), max (tmpvar_16, tmpvar_15))); - float tmpvar_18; - tmpvar_18 = (tmpvar_17 - min (tmpvar_14, min (min (tmpvar_12, tmpvar_13), min (tmpvar_16, tmpvar_15)))); - float tmpvar_19; - tmpvar_19 = max (0.0625, (tmpvar_17 * 0.125)); - if ((tmpvar_18 < tmpvar_19)) { - tmpvar_1 = tmpvar_7.xyz; - } else { - float tmpvar_20; - tmpvar_20 = min (0.75, (max (0.0, ((abs ((((((tmpvar_12 + tmpvar_13) + tmpvar_15) + tmpvar_16) * 0.25) - tmpvar_14)) / tmpvar_18) - 0.25)) * 1.33333)); - vec4 tmpvar_21; - tmpvar_21.zw = vec2(0.0, 0.0); - tmpvar_21.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_22; - tmpvar_22 = texture2DLod (_MainTex, tmpvar_21.xy, 0.0); - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_24; - tmpvar_24 = texture2DLod (_MainTex, tmpvar_23.xy, 0.0); - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_26; - tmpvar_26 = texture2DLod (_MainTex, tmpvar_25.xy, 0.0); - vec4 tmpvar_27; - tmpvar_27.zw = vec2(0.0, 0.0); - tmpvar_27.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); - vec4 tmpvar_28; - tmpvar_28 = texture2DLod (_MainTex, tmpvar_27.xy, 0.0); - vec3 tmpvar_29; - tmpvar_29 = ((((((tmpvar_3.xyz + tmpvar_5.xyz) + tmpvar_7.xyz) + tmpvar_9.xyz) + tmpvar_11.xyz) + (((tmpvar_22.xyz + tmpvar_24.xyz) + tmpvar_26.xyz) + tmpvar_28.xyz)) * vec3(0.111111, 0.111111, 0.111111)); - float tmpvar_30; - tmpvar_30 = ((tmpvar_22.y * 1.96321) + tmpvar_22.x); - float tmpvar_31; - tmpvar_31 = ((tmpvar_24.y * 1.96321) + tmpvar_24.x); - float tmpvar_32; - tmpvar_32 = ((tmpvar_26.y * 1.96321) + tmpvar_26.x); - float tmpvar_33; - tmpvar_33 = ((tmpvar_28.y * 1.96321) + tmpvar_28.x); - bool tmpvar_34; - tmpvar_34 = (((abs ((((0.25 * tmpvar_30) + (-(0.5) * tmpvar_13)) + (0.25 * tmpvar_32))) + abs ((((0.5 * tmpvar_12) + (-(1.0) * tmpvar_14)) + (0.5 * tmpvar_16)))) + abs ((((0.25 * tmpvar_31) + (-(0.5) * tmpvar_15)) + (0.25 * tmpvar_33)))) >= ((abs ((((0.25 * tmpvar_30) + (-(0.5) * tmpvar_12)) + (0.25 * tmpvar_31))) + abs ((((0.5 * tmpvar_13) + (-(1.0) * tmpvar_14)) + (0.5 * tmpvar_15)))) + abs ((((0.25 * tmpvar_32) + (-(0.5) * tmpvar_16)) + (0.25 * tmpvar_33))))); - float tmpvar_35; - if (tmpvar_34) { - tmpvar_35 = -(_MainTex_TexelSize.y); - } else { - tmpvar_35 = -(_MainTex_TexelSize.x); - }; - lengthSign = tmpvar_35; - if (!(tmpvar_34)) { - lumaN = tmpvar_13; - }; - if (!(tmpvar_34)) { - lumaS = tmpvar_15; - }; - float tmpvar_36; - tmpvar_36 = abs ((lumaN - tmpvar_14)); - gradientN = tmpvar_36; - float tmpvar_37; - tmpvar_37 = abs ((lumaS - tmpvar_14)); - lumaN = ((lumaN + tmpvar_14) * 0.5); - float tmpvar_38; - tmpvar_38 = ((lumaS + tmpvar_14) * 0.5); - lumaS = tmpvar_38; - bool tmpvar_39; - tmpvar_39 = (tmpvar_36 >= tmpvar_37); - if (!(tmpvar_39)) { - lumaN = tmpvar_38; - }; - if (!(tmpvar_39)) { - gradientN = tmpvar_37; - }; - if (!(tmpvar_39)) { - lengthSign = (tmpvar_35 * -1.0); - }; - float tmpvar_40; - if (tmpvar_34) { - tmpvar_40 = 0.0; - } else { - tmpvar_40 = (lengthSign * 0.5); - }; - posN.x = (xlv_TEXCOORD0.x + tmpvar_40); - float tmpvar_41; - if (tmpvar_34) { - tmpvar_41 = (lengthSign * 0.5); - } else { - tmpvar_41 = 0.0; - }; - posN.y = (xlv_TEXCOORD0.y + tmpvar_41); - gradientN = (gradientN * 0.25); - posP = posN; - vec2 tmpvar_42; - if (tmpvar_34) { - vec2 tmpvar_43; - tmpvar_43.y = 0.0; - tmpvar_43.x = _MainTex_TexelSize.x; - tmpvar_42 = tmpvar_43; - } else { - vec2 tmpvar_44; - tmpvar_44.x = 0.0; - tmpvar_44.y = _MainTex_TexelSize.y; - tmpvar_42 = tmpvar_44; - }; - lumaEndN = lumaN; - lumaEndP = lumaN; - posN = (posN + (tmpvar_42 * vec2(-2.0, -2.0))); - posP = (posP + (tmpvar_42 * vec2(2.0, 2.0))); - offNP = (tmpvar_42 * vec2(3.0, 3.0)); - while (true) { - if ((i >= 4)) { - break; - }; - if (!(doneN)) { - vec4 tmpvar_45; - tmpvar_45 = texture2DGradARB (_MainTex, posN, offNP, offNP); - lumaEndN = ((tmpvar_45.y * 1.96321) + tmpvar_45.x); - }; - if (!(doneP)) { - vec4 tmpvar_46; - tmpvar_46 = texture2DGradARB (_MainTex, posP, offNP, offNP); - lumaEndP = ((tmpvar_46.y * 1.96321) + tmpvar_46.x); - }; - bool tmpvar_47; - if (doneN) { - tmpvar_47 = bool(1); - } else { - tmpvar_47 = (abs ((lumaEndN - lumaN)) >= gradientN); - }; - doneN = tmpvar_47; - bool tmpvar_48; - if (doneP) { - tmpvar_48 = bool(1); - } else { - tmpvar_48 = (abs ((lumaEndP - lumaN)) >= gradientN); - }; - doneP = tmpvar_48; - bool tmpvar_49; - if (tmpvar_47) { - tmpvar_49 = tmpvar_48; - } else { - tmpvar_49 = bool(0); - }; - if (tmpvar_49) { - break; - }; - if (!(tmpvar_47)) { - posN = (posN - offNP); - }; - if (!(tmpvar_48)) { - posP = (posP + offNP); - }; - i = (i + 1); - }; - float tmpvar_50; - if (tmpvar_34) { - tmpvar_50 = (xlv_TEXCOORD0.x - posN.x); - } else { - tmpvar_50 = (xlv_TEXCOORD0.y - posN.y); - }; - float tmpvar_51; - if (tmpvar_34) { - tmpvar_51 = (posP.x - xlv_TEXCOORD0.x); - } else { - tmpvar_51 = (posP.y - xlv_TEXCOORD0.y); - }; - bool tmpvar_52; - tmpvar_52 = (tmpvar_50 < tmpvar_51); - float tmpvar_53; - if (tmpvar_52) { - tmpvar_53 = lumaEndN; - } else { - tmpvar_53 = lumaEndP; - }; - lumaEndN = tmpvar_53; - if ((((tmpvar_14 - lumaN) < 0.0) == ((tmpvar_53 - lumaN) < 0.0))) { - lengthSign = 0.0; - }; - float tmpvar_54; - tmpvar_54 = (tmpvar_51 + tmpvar_50); - float tmpvar_55; - if (tmpvar_52) { - tmpvar_55 = tmpvar_50; - } else { - tmpvar_55 = tmpvar_51; - }; - float tmpvar_56; - tmpvar_56 = ((0.5 + (tmpvar_55 * (-1.0 / tmpvar_54))) * lengthSign); - float tmpvar_57; - if (tmpvar_34) { - tmpvar_57 = 0.0; - } else { - tmpvar_57 = tmpvar_56; - }; - float tmpvar_58; - if (tmpvar_34) { - tmpvar_58 = tmpvar_56; - } else { - tmpvar_58 = 0.0; - }; - vec2 tmpvar_59; - tmpvar_59.x = (xlv_TEXCOORD0.x + tmpvar_57); - tmpvar_59.y = (xlv_TEXCOORD0.y + tmpvar_58); - vec4 tmpvar_60; - tmpvar_60.zw = vec2(0.0, 0.0); - tmpvar_60.xy = tmpvar_59; - vec4 tmpvar_61; - tmpvar_61 = texture2DLod (_MainTex, tmpvar_60.xy, 0.0); - vec3 tmpvar_62; - tmpvar_62.x = -(tmpvar_20); - tmpvar_62.y = -(tmpvar_20); - tmpvar_62.z = -(tmpvar_20); - tmpvar_1 = ((tmpvar_62 * tmpvar_61.xyz) + ((tmpvar_29 * vec3(tmpvar_20)) + tmpvar_61.xyz)); - }; - vec4 tmpvar_63; - tmpvar_63.w = 0.0; - tmpvar_63.xyz = tmpvar_1; - gl_FragData[0] = tmpvar_63; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-ir.txt deleted file mode 100644 index be6d808ab..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-ir.txt +++ /dev/null @@ -1,583 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -varying vec2 xlv_TEXCOORD0; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; -} - -vec4 FxaaTexOff ( - in sampler2D tex, - in vec2 pos, - in vec2 off, - in vec2 rcpFrame -) -{ - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = (pos.xy + (off * rcpFrame)).xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - return tmpvar_2; -} - -vec4 FxaaTexLod0 ( - in sampler2D tex, - in vec2 pos -) -{ - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = pos.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - return tmpvar_2; -} - -float FxaaLuma ( - in vec3 rgb -) -{ - return ((rgb.y * 1.96321) + rgb.x); -} - -vec3 FxaaLerp3 ( - in vec3 a, - in vec3 b, - in float amountOfA -) -{ - vec3 tmpvar_1; - tmpvar_1.x = -(amountOfA); - tmpvar_1.y = -(amountOfA); - tmpvar_1.z = -(amountOfA); - vec3 tmpvar_2; - tmpvar_2.x = amountOfA; - tmpvar_2.y = amountOfA; - tmpvar_2.z = amountOfA; - return ((tmpvar_1 * b) + ((a * tmpvar_2) + b)); -} - -vec3 FxaaFilterReturn ( - in vec3 rgb -) -{ - return rgb; -} - -vec3 FxaaPixelShader ( - in vec2 pos, - in sampler2D tex, - in vec2 rcpFrame -) -{ - vec3 rgbF; - float subPixelOffset; - float spanLength; - bool directionN; - float dstP; - float dstN; - int i; - bool doneP; - bool doneN; - float lumaEndP; - float lumaEndN; - vec2 offNP; - vec2 posP; - vec2 posN; - bool pairN; - float gradientS; - float gradientN; - float lengthSign; - bool horzSpan; - float edgeHorz; - float edgeVert; - float lumaSE; - float lumaSW; - float lumaNE; - float lumaNW; - vec3 rgbSE; - vec3 rgbSW; - vec3 rgbNE; - vec3 rgbNW; - float blendL; - float rangeL; - float lumaL; - vec3 rgbL; - float range; - float rangeMax; - float rangeMin; - float lumaS; - float lumaE; - float lumaM; - float lumaW; - float lumaN; - vec3 rgbS; - vec3 rgbE; - vec3 rgbM; - vec3 rgbW; - vec3 rgbN; - bool tmpvar_1; - tmpvar_1 = bool(0); - doneN = tmpvar_1; - bool tmpvar_2; - tmpvar_2 = bool(0); - doneP = tmpvar_2; - int tmpvar_3; - tmpvar_3 = 0; - i = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = FxaaTexOff (tex, pos.xy, vec2(0.0, -1.0), rcpFrame); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - rgbN = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = FxaaTexOff (tex, pos.xy, vec2(-1.0, 0.0), rcpFrame); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - rgbW = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = FxaaTexOff (tex, pos.xy, vec2(0.0, 0.0), rcpFrame); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - rgbM = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = FxaaTexOff (tex, pos.xy, vec2(1.0, 0.0), rcpFrame); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10.xyz; - rgbE = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = FxaaTexOff (tex, pos.xy, vec2(0.0, 1.0), rcpFrame); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - rgbS = tmpvar_13; - float tmpvar_14; - tmpvar_14 = FxaaLuma (rgbN); - float tmpvar_15; - tmpvar_15 = tmpvar_14; - lumaN = tmpvar_15; - float tmpvar_16; - tmpvar_16 = FxaaLuma (rgbW); - float tmpvar_17; - tmpvar_17 = tmpvar_16; - lumaW = tmpvar_17; - float tmpvar_18; - tmpvar_18 = FxaaLuma (rgbM); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - lumaM = tmpvar_19; - float tmpvar_20; - tmpvar_20 = FxaaLuma (rgbE); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - lumaE = tmpvar_21; - float tmpvar_22; - tmpvar_22 = FxaaLuma (rgbS); - float tmpvar_23; - tmpvar_23 = tmpvar_22; - lumaS = tmpvar_23; - float tmpvar_24; - tmpvar_24 = min (lumaN, lumaW); - float tmpvar_25; - tmpvar_25 = min (lumaS, lumaE); - float tmpvar_26; - tmpvar_26 = min (tmpvar_24, tmpvar_25); - float tmpvar_27; - tmpvar_27 = min (lumaM, tmpvar_26); - float tmpvar_28; - tmpvar_28 = tmpvar_27; - rangeMin = tmpvar_28; - float tmpvar_29; - tmpvar_29 = max (lumaN, lumaW); - float tmpvar_30; - tmpvar_30 = max (lumaS, lumaE); - float tmpvar_31; - tmpvar_31 = max (tmpvar_29, tmpvar_30); - float tmpvar_32; - tmpvar_32 = max (lumaM, tmpvar_31); - float tmpvar_33; - tmpvar_33 = tmpvar_32; - rangeMax = tmpvar_33; - float tmpvar_34; - tmpvar_34 = (rangeMax - rangeMin); - range = tmpvar_34; - float tmpvar_35; - tmpvar_35 = max (0.0416667, (rangeMax * 0.125)); - if ((range < tmpvar_35)) { - vec3 tmpvar_36; - tmpvar_36 = FxaaFilterReturn (rgbM); - return tmpvar_36; - }; - vec3 tmpvar_37; - tmpvar_37 = ((((rgbN + rgbW) + rgbM) + rgbE) + rgbS); - rgbL = tmpvar_37; - float tmpvar_38; - tmpvar_38 = ((((lumaN + lumaW) + lumaE) + lumaS) * 0.25); - lumaL = tmpvar_38; - float tmpvar_39; - tmpvar_39 = abs ((lumaL - lumaM)); - float tmpvar_40; - tmpvar_40 = tmpvar_39; - rangeL = tmpvar_40; - float tmpvar_41; - tmpvar_41 = max (0.0, ((rangeL / range) - 0.25)); - float tmpvar_42; - tmpvar_42 = (tmpvar_41 * 1.33333); - blendL = tmpvar_42; - float tmpvar_43; - tmpvar_43 = min (0.75, blendL); - float tmpvar_44; - tmpvar_44 = tmpvar_43; - blendL = tmpvar_44; - vec4 tmpvar_45; - tmpvar_45 = FxaaTexOff (tex, pos.xy, vec2(-1.0, -1.0), rcpFrame); - vec3 tmpvar_46; - tmpvar_46 = tmpvar_45.xyz; - rgbNW = tmpvar_46; - vec4 tmpvar_47; - tmpvar_47 = FxaaTexOff (tex, pos.xy, vec2(1.0, -1.0), rcpFrame); - vec3 tmpvar_48; - tmpvar_48 = tmpvar_47.xyz; - rgbNE = tmpvar_48; - vec4 tmpvar_49; - tmpvar_49 = FxaaTexOff (tex, pos.xy, vec2(-1.0, 1.0), rcpFrame); - vec3 tmpvar_50; - tmpvar_50 = tmpvar_49.xyz; - rgbSW = tmpvar_50; - vec4 tmpvar_51; - tmpvar_51 = FxaaTexOff (tex, pos.xy, vec2(1.0, 1.0), rcpFrame); - vec3 tmpvar_52; - tmpvar_52 = tmpvar_51.xyz; - rgbSE = tmpvar_52; - vec3 tmpvar_53; - tmpvar_53 = (rgbL + (((rgbNW + rgbNE) + rgbSW) + rgbSE)); - rgbL = tmpvar_53; - vec3 tmpvar_54; - tmpvar_54 = (rgbL * vec3(0.111111, 0.111111, 0.111111)); - rgbL = tmpvar_54; - float tmpvar_55; - tmpvar_55 = FxaaLuma (rgbNW); - float tmpvar_56; - tmpvar_56 = tmpvar_55; - lumaNW = tmpvar_56; - float tmpvar_57; - tmpvar_57 = FxaaLuma (rgbNE); - float tmpvar_58; - tmpvar_58 = tmpvar_57; - lumaNE = tmpvar_58; - float tmpvar_59; - tmpvar_59 = FxaaLuma (rgbSW); - float tmpvar_60; - tmpvar_60 = tmpvar_59; - lumaSW = tmpvar_60; - float tmpvar_61; - tmpvar_61 = FxaaLuma (rgbSE); - float tmpvar_62; - tmpvar_62 = tmpvar_61; - lumaSE = tmpvar_62; - float tmpvar_63; - tmpvar_63 = abs ((((0.25 * lumaNW) + (-(0.5) * lumaN)) + (0.25 * lumaNE))); - float tmpvar_64; - tmpvar_64 = abs ((((0.5 * lumaW) + (-(1.0) * lumaM)) + (0.5 * lumaE))); - float tmpvar_65; - tmpvar_65 = abs ((((0.25 * lumaSW) + (-(0.5) * lumaS)) + (0.25 * lumaSE))); - float tmpvar_66; - tmpvar_66 = ((tmpvar_63 + tmpvar_64) + tmpvar_65); - edgeVert = tmpvar_66; - float tmpvar_67; - tmpvar_67 = abs ((((0.25 * lumaNW) + (-(0.5) * lumaW)) + (0.25 * lumaSW))); - float tmpvar_68; - tmpvar_68 = abs ((((0.5 * lumaN) + (-(1.0) * lumaM)) + (0.5 * lumaS))); - float tmpvar_69; - tmpvar_69 = abs ((((0.25 * lumaNE) + (-(0.5) * lumaE)) + (0.25 * lumaSE))); - float tmpvar_70; - tmpvar_70 = ((tmpvar_67 + tmpvar_68) + tmpvar_69); - edgeHorz = tmpvar_70; - bool tmpvar_71; - tmpvar_71 = (edgeHorz >= edgeVert); - horzSpan = tmpvar_71; - float tmpvar_72; - if (horzSpan) { - tmpvar_72 = -(rcpFrame.y); - } else { - tmpvar_72 = -(rcpFrame.x); - }; - float tmpvar_73; - tmpvar_73 = tmpvar_72; - lengthSign = tmpvar_73; - if (!(horzSpan)) { - float tmpvar_74; - tmpvar_74 = lumaW; - lumaN = tmpvar_74; - }; - if (!(horzSpan)) { - float tmpvar_75; - tmpvar_75 = lumaE; - lumaS = tmpvar_75; - }; - float tmpvar_76; - tmpvar_76 = abs ((lumaN - lumaM)); - float tmpvar_77; - tmpvar_77 = tmpvar_76; - gradientN = tmpvar_77; - float tmpvar_78; - tmpvar_78 = abs ((lumaS - lumaM)); - float tmpvar_79; - tmpvar_79 = tmpvar_78; - gradientS = tmpvar_79; - float tmpvar_80; - tmpvar_80 = ((lumaN + lumaM) * 0.5); - lumaN = tmpvar_80; - float tmpvar_81; - tmpvar_81 = ((lumaS + lumaM) * 0.5); - lumaS = tmpvar_81; - bool tmpvar_82; - tmpvar_82 = (gradientN >= gradientS); - pairN = tmpvar_82; - if (!(pairN)) { - float tmpvar_83; - tmpvar_83 = lumaS; - lumaN = tmpvar_83; - }; - if (!(pairN)) { - float tmpvar_84; - tmpvar_84 = gradientS; - gradientN = tmpvar_84; - }; - if (!(pairN)) { - float tmpvar_85; - tmpvar_85 = (lengthSign * -(1.0)); - lengthSign = tmpvar_85; - }; - float tmpvar_86; - if (horzSpan) { - tmpvar_86 = 0.0; - } else { - tmpvar_86 = (lengthSign * 0.5); - }; - float tmpvar_87; - tmpvar_87 = (pos.x + tmpvar_86); - posN.x = tmpvar_87; - float tmpvar_88; - if (horzSpan) { - tmpvar_88 = (lengthSign * 0.5); - } else { - tmpvar_88 = 0.0; - }; - float tmpvar_89; - tmpvar_89 = (pos.y + tmpvar_88); - posN.y = vec2(tmpvar_89).y; - float tmpvar_90; - tmpvar_90 = (gradientN * 0.25); - gradientN = tmpvar_90; - vec2 tmpvar_91; - tmpvar_91 = posN; - posP = tmpvar_91; - vec2 tmpvar_92; - if (horzSpan) { - vec2 tmpvar_93; - tmpvar_93.y = 0.0; - tmpvar_93.x = rcpFrame.x; - tmpvar_92 = tmpvar_93; - } else { - vec2 tmpvar_94; - tmpvar_94.x = 0.0; - tmpvar_94.y = rcpFrame.y; - tmpvar_92 = tmpvar_94; - }; - vec2 tmpvar_95; - tmpvar_95 = tmpvar_92; - offNP = tmpvar_95; - float tmpvar_96; - tmpvar_96 = lumaN; - lumaEndN = tmpvar_96; - float tmpvar_97; - tmpvar_97 = lumaN; - lumaEndP = tmpvar_97; - vec2 tmpvar_98; - tmpvar_98 = (posN + (offNP * vec2(-1.0, -1.0))); - posN = tmpvar_98; - vec2 tmpvar_99; - tmpvar_99 = (posP + (offNP * vec2(1.0, 1.0))); - posP = tmpvar_99; - while (true) { - if (!((i < 16))) { - break; - }; - if (!(doneN)) { - vec4 tmpvar_100; - tmpvar_100 = FxaaTexLod0 (tex, posN.xy); - float tmpvar_101; - tmpvar_101 = FxaaLuma (tmpvar_100.xyz); - float tmpvar_102; - tmpvar_102 = tmpvar_101; - lumaEndN = tmpvar_102; - }; - if (!(doneP)) { - vec4 tmpvar_103; - tmpvar_103 = FxaaTexLod0 (tex, posP.xy); - float tmpvar_104; - tmpvar_104 = FxaaLuma (tmpvar_103.xyz); - float tmpvar_105; - tmpvar_105 = tmpvar_104; - lumaEndP = tmpvar_105; - }; - bool tmpvar_106; - if (doneN) { - tmpvar_106 = bool(1); - } else { - float tmpvar_107; - tmpvar_107 = abs ((lumaEndN - lumaN)); - tmpvar_106 = (tmpvar_107 >= gradientN); - }; - bool tmpvar_108; - tmpvar_108 = tmpvar_106; - doneN = tmpvar_108; - bool tmpvar_109; - if (doneP) { - tmpvar_109 = bool(1); - } else { - float tmpvar_110; - tmpvar_110 = abs ((lumaEndP - lumaN)); - tmpvar_109 = (tmpvar_110 >= gradientN); - }; - bool tmpvar_111; - tmpvar_111 = tmpvar_109; - doneP = tmpvar_111; - bool tmpvar_112; - if (doneN) { - tmpvar_112 = doneP; - } else { - tmpvar_112 = bool(0); - }; - if (tmpvar_112) { - break; - }; - if (!(doneN)) { - vec2 tmpvar_113; - tmpvar_113 = (posN - offNP); - posN = tmpvar_113; - }; - if (!(doneP)) { - vec2 tmpvar_114; - tmpvar_114 = (posP + offNP); - posP = tmpvar_114; - }; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_115; - tmpvar_115 = (i + 1); - i = tmpvar_115; - }; - float tmpvar_116; - if (horzSpan) { - tmpvar_116 = (pos.x - posN.x); - } else { - tmpvar_116 = (pos.y - posN.y); - }; - float tmpvar_117; - tmpvar_117 = tmpvar_116; - dstN = tmpvar_117; - float tmpvar_118; - if (horzSpan) { - tmpvar_118 = (posP.x - pos.x); - } else { - tmpvar_118 = (posP.y - pos.y); - }; - float tmpvar_119; - tmpvar_119 = tmpvar_118; - dstP = tmpvar_119; - bool tmpvar_120; - tmpvar_120 = (dstN < dstP); - directionN = tmpvar_120; - float tmpvar_121; - if (directionN) { - tmpvar_121 = lumaEndN; - } else { - tmpvar_121 = lumaEndP; - }; - float tmpvar_122; - tmpvar_122 = tmpvar_121; - lumaEndN = tmpvar_122; - if ((((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0))) { - float tmpvar_123; - tmpvar_123 = 0.0; - lengthSign = tmpvar_123; - }; - float tmpvar_124; - tmpvar_124 = (dstP + dstN); - spanLength = tmpvar_124; - float tmpvar_125; - if (directionN) { - tmpvar_125 = dstN; - } else { - tmpvar_125 = dstP; - }; - float tmpvar_126; - tmpvar_126 = tmpvar_125; - dstN = tmpvar_126; - float tmpvar_127; - tmpvar_127 = ((0.5 + (dstN * (-(1.0) / spanLength))) * lengthSign); - subPixelOffset = tmpvar_127; - float tmpvar_128; - if (horzSpan) { - tmpvar_128 = 0.0; - } else { - tmpvar_128 = subPixelOffset; - }; - float tmpvar_129; - if (horzSpan) { - tmpvar_129 = subPixelOffset; - } else { - tmpvar_129 = 0.0; - }; - vec2 tmpvar_130; - tmpvar_130.x = (pos.x + tmpvar_128); - tmpvar_130.y = (pos.y + tmpvar_129); - vec4 tmpvar_131; - tmpvar_131 = FxaaTexLod0 (tex, tmpvar_130); - vec3 tmpvar_132; - tmpvar_132 = tmpvar_131.xyz; - rgbF = tmpvar_132; - vec3 tmpvar_133; - tmpvar_133 = FxaaLerp3 (rgbL, rgbF, blendL); - vec3 tmpvar_134; - tmpvar_134 = FxaaFilterReturn (tmpvar_133); - return tmpvar_134; -} - -vec4 xlat_main ( - in vec2 uv -) -{ - vec3 tmpvar_1; - tmpvar_1 = FxaaPixelShader (uv.xy, _MainTex, _MainTex_TexelSize.xy); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = tmpvar_1.xyz.xyz; - return tmpvar_2; -} - -void main () -{ - vec4 xl_retval; - vec2 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xy; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-out.txt deleted file mode 100644 index faedf4fb7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-out.txt +++ /dev/null @@ -1,285 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -varying vec2 xlv_TEXCOORD0; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -void main () -{ - vec3 tmpvar_1; - int i; - bool doneP; - bool doneN; - float lumaEndP; - float lumaEndN; - vec2 offNP; - vec2 posP; - vec2 posN; - float gradientN; - float lengthSign; - float lumaS; - float lumaN; - doneN = bool(0); - doneP = bool(0); - i = 0; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_3; - tmpvar_3 = texture2DLod (_MainTex, tmpvar_2.xy, 0.0); - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_5; - tmpvar_5 = texture2DLod (_MainTex, tmpvar_4.xy, 0.0); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = xlv_TEXCOORD0; - vec4 tmpvar_7; - tmpvar_7 = texture2DLod (_MainTex, tmpvar_6.xy, 0.0); - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_9; - tmpvar_9 = texture2DLod (_MainTex, tmpvar_8.xy, 0.0); - vec4 tmpvar_10; - tmpvar_10.zw = vec2(0.0, 0.0); - tmpvar_10.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_11; - tmpvar_11 = texture2DLod (_MainTex, tmpvar_10.xy, 0.0); - float tmpvar_12; - tmpvar_12 = ((tmpvar_3.y * 1.96321) + tmpvar_3.x); - lumaN = tmpvar_12; - float tmpvar_13; - tmpvar_13 = ((tmpvar_5.y * 1.96321) + tmpvar_5.x); - float tmpvar_14; - tmpvar_14 = ((tmpvar_7.y * 1.96321) + tmpvar_7.x); - float tmpvar_15; - tmpvar_15 = ((tmpvar_9.y * 1.96321) + tmpvar_9.x); - float tmpvar_16; - tmpvar_16 = ((tmpvar_11.y * 1.96321) + tmpvar_11.x); - lumaS = tmpvar_16; - float tmpvar_17; - tmpvar_17 = max (tmpvar_14, max (max (tmpvar_12, tmpvar_13), max (tmpvar_16, tmpvar_15))); - float tmpvar_18; - tmpvar_18 = (tmpvar_17 - min (tmpvar_14, min (min (tmpvar_12, tmpvar_13), min (tmpvar_16, tmpvar_15)))); - float tmpvar_19; - tmpvar_19 = max (0.0416667, (tmpvar_17 * 0.125)); - if ((tmpvar_18 < tmpvar_19)) { - tmpvar_1 = tmpvar_7.xyz; - } else { - float tmpvar_20; - tmpvar_20 = min (0.75, (max (0.0, ((abs ((((((tmpvar_12 + tmpvar_13) + tmpvar_15) + tmpvar_16) * 0.25) - tmpvar_14)) / tmpvar_18) - 0.25)) * 1.33333)); - vec4 tmpvar_21; - tmpvar_21.zw = vec2(0.0, 0.0); - tmpvar_21.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_22; - tmpvar_22 = texture2DLod (_MainTex, tmpvar_21.xy, 0.0); - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_24; - tmpvar_24 = texture2DLod (_MainTex, tmpvar_23.xy, 0.0); - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_26; - tmpvar_26 = texture2DLod (_MainTex, tmpvar_25.xy, 0.0); - vec4 tmpvar_27; - tmpvar_27.zw = vec2(0.0, 0.0); - tmpvar_27.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); - vec4 tmpvar_28; - tmpvar_28 = texture2DLod (_MainTex, tmpvar_27.xy, 0.0); - vec3 tmpvar_29; - tmpvar_29 = ((((((tmpvar_3.xyz + tmpvar_5.xyz) + tmpvar_7.xyz) + tmpvar_9.xyz) + tmpvar_11.xyz) + (((tmpvar_22.xyz + tmpvar_24.xyz) + tmpvar_26.xyz) + tmpvar_28.xyz)) * vec3(0.111111, 0.111111, 0.111111)); - float tmpvar_30; - tmpvar_30 = ((tmpvar_22.y * 1.96321) + tmpvar_22.x); - float tmpvar_31; - tmpvar_31 = ((tmpvar_24.y * 1.96321) + tmpvar_24.x); - float tmpvar_32; - tmpvar_32 = ((tmpvar_26.y * 1.96321) + tmpvar_26.x); - float tmpvar_33; - tmpvar_33 = ((tmpvar_28.y * 1.96321) + tmpvar_28.x); - bool tmpvar_34; - tmpvar_34 = (((abs ((((0.25 * tmpvar_30) + (-(0.5) * tmpvar_13)) + (0.25 * tmpvar_32))) + abs ((((0.5 * tmpvar_12) + (-(1.0) * tmpvar_14)) + (0.5 * tmpvar_16)))) + abs ((((0.25 * tmpvar_31) + (-(0.5) * tmpvar_15)) + (0.25 * tmpvar_33)))) >= ((abs ((((0.25 * tmpvar_30) + (-(0.5) * tmpvar_12)) + (0.25 * tmpvar_31))) + abs ((((0.5 * tmpvar_13) + (-(1.0) * tmpvar_14)) + (0.5 * tmpvar_15)))) + abs ((((0.25 * tmpvar_32) + (-(0.5) * tmpvar_16)) + (0.25 * tmpvar_33))))); - float tmpvar_35; - if (tmpvar_34) { - tmpvar_35 = -(_MainTex_TexelSize.y); - } else { - tmpvar_35 = -(_MainTex_TexelSize.x); - }; - lengthSign = tmpvar_35; - if (!(tmpvar_34)) { - lumaN = tmpvar_13; - }; - if (!(tmpvar_34)) { - lumaS = tmpvar_15; - }; - float tmpvar_36; - tmpvar_36 = abs ((lumaN - tmpvar_14)); - gradientN = tmpvar_36; - float tmpvar_37; - tmpvar_37 = abs ((lumaS - tmpvar_14)); - lumaN = ((lumaN + tmpvar_14) * 0.5); - float tmpvar_38; - tmpvar_38 = ((lumaS + tmpvar_14) * 0.5); - lumaS = tmpvar_38; - bool tmpvar_39; - tmpvar_39 = (tmpvar_36 >= tmpvar_37); - if (!(tmpvar_39)) { - lumaN = tmpvar_38; - }; - if (!(tmpvar_39)) { - gradientN = tmpvar_37; - }; - if (!(tmpvar_39)) { - lengthSign = (tmpvar_35 * -1.0); - }; - float tmpvar_40; - if (tmpvar_34) { - tmpvar_40 = 0.0; - } else { - tmpvar_40 = (lengthSign * 0.5); - }; - posN.x = (xlv_TEXCOORD0.x + tmpvar_40); - float tmpvar_41; - if (tmpvar_34) { - tmpvar_41 = (lengthSign * 0.5); - } else { - tmpvar_41 = 0.0; - }; - posN.y = (xlv_TEXCOORD0.y + tmpvar_41); - gradientN = (gradientN * 0.25); - posP = posN; - vec2 tmpvar_42; - if (tmpvar_34) { - vec2 tmpvar_43; - tmpvar_43.y = 0.0; - tmpvar_43.x = _MainTex_TexelSize.x; - tmpvar_42 = tmpvar_43; - } else { - vec2 tmpvar_44; - tmpvar_44.x = 0.0; - tmpvar_44.y = _MainTex_TexelSize.y; - tmpvar_42 = tmpvar_44; - }; - offNP = tmpvar_42; - lumaEndN = lumaN; - lumaEndP = lumaN; - posN = (posN + (tmpvar_42 * vec2(-1.0, -1.0))); - posP = (posP + tmpvar_42); - while (true) { - if ((i >= 16)) { - break; - }; - if (!(doneN)) { - vec4 tmpvar_45; - tmpvar_45.zw = vec2(0.0, 0.0); - tmpvar_45.xy = posN; - vec4 tmpvar_46; - tmpvar_46 = texture2DLod (_MainTex, tmpvar_45.xy, 0.0); - lumaEndN = ((tmpvar_46.y * 1.96321) + tmpvar_46.x); - }; - if (!(doneP)) { - vec4 tmpvar_47; - tmpvar_47.zw = vec2(0.0, 0.0); - tmpvar_47.xy = posP; - vec4 tmpvar_48; - tmpvar_48 = texture2DLod (_MainTex, tmpvar_47.xy, 0.0); - lumaEndP = ((tmpvar_48.y * 1.96321) + tmpvar_48.x); - }; - bool tmpvar_49; - if (doneN) { - tmpvar_49 = bool(1); - } else { - tmpvar_49 = (abs ((lumaEndN - lumaN)) >= gradientN); - }; - doneN = tmpvar_49; - bool tmpvar_50; - if (doneP) { - tmpvar_50 = bool(1); - } else { - tmpvar_50 = (abs ((lumaEndP - lumaN)) >= gradientN); - }; - doneP = tmpvar_50; - bool tmpvar_51; - if (tmpvar_49) { - tmpvar_51 = tmpvar_50; - } else { - tmpvar_51 = bool(0); - }; - if (tmpvar_51) { - break; - }; - if (!(tmpvar_49)) { - posN = (posN - offNP); - }; - if (!(tmpvar_50)) { - posP = (posP + offNP); - }; - i = (i + 1); - }; - float tmpvar_52; - if (tmpvar_34) { - tmpvar_52 = (xlv_TEXCOORD0.x - posN.x); - } else { - tmpvar_52 = (xlv_TEXCOORD0.y - posN.y); - }; - float tmpvar_53; - if (tmpvar_34) { - tmpvar_53 = (posP.x - xlv_TEXCOORD0.x); - } else { - tmpvar_53 = (posP.y - xlv_TEXCOORD0.y); - }; - bool tmpvar_54; - tmpvar_54 = (tmpvar_52 < tmpvar_53); - float tmpvar_55; - if (tmpvar_54) { - tmpvar_55 = lumaEndN; - } else { - tmpvar_55 = lumaEndP; - }; - lumaEndN = tmpvar_55; - if ((((tmpvar_14 - lumaN) < 0.0) == ((tmpvar_55 - lumaN) < 0.0))) { - lengthSign = 0.0; - }; - float tmpvar_56; - tmpvar_56 = (tmpvar_53 + tmpvar_52); - float tmpvar_57; - if (tmpvar_54) { - tmpvar_57 = tmpvar_52; - } else { - tmpvar_57 = tmpvar_53; - }; - float tmpvar_58; - tmpvar_58 = ((0.5 + (tmpvar_57 * (-1.0 / tmpvar_56))) * lengthSign); - float tmpvar_59; - if (tmpvar_34) { - tmpvar_59 = 0.0; - } else { - tmpvar_59 = tmpvar_58; - }; - float tmpvar_60; - if (tmpvar_34) { - tmpvar_60 = tmpvar_58; - } else { - tmpvar_60 = 0.0; - }; - vec2 tmpvar_61; - tmpvar_61.x = (xlv_TEXCOORD0.x + tmpvar_59); - tmpvar_61.y = (xlv_TEXCOORD0.y + tmpvar_60); - vec4 tmpvar_62; - tmpvar_62.zw = vec2(0.0, 0.0); - tmpvar_62.xy = tmpvar_61; - vec4 tmpvar_63; - tmpvar_63 = texture2DLod (_MainTex, tmpvar_62.xy, 0.0); - vec3 tmpvar_64; - tmpvar_64.x = -(tmpvar_20); - tmpvar_64.y = -(tmpvar_20); - tmpvar_64.z = -(tmpvar_20); - tmpvar_1 = ((tmpvar_64 * tmpvar_63.xyz) + ((tmpvar_29 * vec3(tmpvar_20)) + tmpvar_63.xyz)); - }; - vec4 tmpvar_65; - tmpvar_65.w = 0.0; - tmpvar_65.xyz = tmpvar_1; - gl_FragData[0] = tmpvar_65; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-ir.txt deleted file mode 100644 index 8fd3b4940..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-ir.txt +++ /dev/null @@ -1,320 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -struct v2f { - vec4 pos; - vec2 uv; - vec4 uvPosPos; -}; -varying vec4 xlv_TEXCOORD1; -varying vec2 xlv_TEXCOORD0; -varying vec4 xlv_SV_POSITION; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; -} - -float FxaaLuma ( - in vec4 rgba -) -{ - return rgba.y; -} - -vec4 FxaaPixelShader ( - in vec2 pos, - in vec4 fxaaConsolePosPos, - in sampler2D tex, - in sampler2D fxaaConsole360TexExpBiasNegOne, - in sampler2D fxaaConsole360TexExpBiasNegTwo, - in vec2 fxaaQualityRcpFrame, - in vec4 fxaaConsoleRcpFrameOpt, - in vec4 fxaaConsoleRcpFrameOpt2, - in vec4 fxaaConsole360RcpFrameOpt2, - in float fxaaQualitySubpix, - in float fxaaQualityEdgeThreshold, - in float fxaaQualityEdgeThresholdMin, - in float fxaaConsoleEdgeSharpness, - in float fxaaConsoleEdgeThreshold, - in float fxaaConsoleEdgeThresholdMin, - in vec4 fxaaConsole360ConstDir -) -{ - bool twoTap; - vec4 rgbyB; - vec4 rgbyA; - vec4 rgbyP2; - vec4 rgbyN2; - vec2 dir2; - float dirAbsMinTimesC; - vec4 rgbyP1; - vec4 rgbyN1; - vec2 dir1; - vec2 dir; - float dirSeMinusNw; - float lumaMaxSubMinM; - float dirSwMinusNe; - float lumaMaxM; - float lumaMaxScaledClamped; - float lumaMinM; - float lumaMaxScaled; - float lumaMin; - float lumaMax; - float lumaMinNeSe; - float lumaMaxNeSe; - float lumaMinNwSw; - float lumaMaxNwSw; - float lumaM; - vec4 rgbyM; - float lumaSe; - float lumaNe; - float lumaSw; - float lumaNw; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = fxaaConsolePosPos.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - float tmpvar_3; - tmpvar_3 = FxaaLuma (tmpvar_2); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - lumaNw = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = fxaaConsolePosPos.xw.xy; - vec4 tmpvar_6; - tmpvar_6 = xll_tex2Dlod (tex, tmpvar_5); - float tmpvar_7; - tmpvar_7 = FxaaLuma (tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - lumaSw = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 0.0); - tmpvar_9.xy = fxaaConsolePosPos.zy.xy; - vec4 tmpvar_10; - tmpvar_10 = xll_tex2Dlod (tex, tmpvar_9); - float tmpvar_11; - tmpvar_11 = FxaaLuma (tmpvar_10); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - lumaNe = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = fxaaConsolePosPos.zw.xy; - vec4 tmpvar_14; - tmpvar_14 = xll_tex2Dlod (tex, tmpvar_13); - float tmpvar_15; - tmpvar_15 = FxaaLuma (tmpvar_14); - float tmpvar_16; - tmpvar_16 = tmpvar_15; - lumaSe = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = pos.xy.xy; - vec4 tmpvar_18; - tmpvar_18 = xll_tex2Dlod (tex, tmpvar_17); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - rgbyM = tmpvar_19; - float tmpvar_20; - tmpvar_20 = rgbyM.y; - lumaM = tmpvar_20; - float tmpvar_21; - tmpvar_21 = max (lumaNw, lumaSw); - float tmpvar_22; - tmpvar_22 = tmpvar_21; - lumaMaxNwSw = tmpvar_22; - float tmpvar_23; - tmpvar_23 = (lumaNe + 0.00260417); - lumaNe = tmpvar_23; - float tmpvar_24; - tmpvar_24 = min (lumaNw, lumaSw); - float tmpvar_25; - tmpvar_25 = tmpvar_24; - lumaMinNwSw = tmpvar_25; - float tmpvar_26; - tmpvar_26 = max (lumaNe, lumaSe); - float tmpvar_27; - tmpvar_27 = tmpvar_26; - lumaMaxNeSe = tmpvar_27; - float tmpvar_28; - tmpvar_28 = min (lumaNe, lumaSe); - float tmpvar_29; - tmpvar_29 = tmpvar_28; - lumaMinNeSe = tmpvar_29; - float tmpvar_30; - tmpvar_30 = max (lumaMaxNeSe, lumaMaxNwSw); - float tmpvar_31; - tmpvar_31 = tmpvar_30; - lumaMax = tmpvar_31; - float tmpvar_32; - tmpvar_32 = min (lumaMinNeSe, lumaMinNwSw); - float tmpvar_33; - tmpvar_33 = tmpvar_32; - lumaMin = tmpvar_33; - float tmpvar_34; - tmpvar_34 = (lumaMax * fxaaConsoleEdgeThreshold); - lumaMaxScaled = tmpvar_34; - float tmpvar_35; - tmpvar_35 = min (lumaMin, lumaM); - float tmpvar_36; - tmpvar_36 = tmpvar_35; - lumaMinM = tmpvar_36; - float tmpvar_37; - tmpvar_37 = max (fxaaConsoleEdgeThresholdMin, lumaMaxScaled); - float tmpvar_38; - tmpvar_38 = tmpvar_37; - lumaMaxScaledClamped = tmpvar_38; - float tmpvar_39; - tmpvar_39 = max (lumaMax, lumaM); - float tmpvar_40; - tmpvar_40 = tmpvar_39; - lumaMaxM = tmpvar_40; - float tmpvar_41; - tmpvar_41 = (lumaSw - lumaNe); - dirSwMinusNe = tmpvar_41; - float tmpvar_42; - tmpvar_42 = (lumaMaxM - lumaMinM); - lumaMaxSubMinM = tmpvar_42; - float tmpvar_43; - tmpvar_43 = (lumaSe - lumaNw); - dirSeMinusNw = tmpvar_43; - if ((lumaMaxSubMinM < lumaMaxScaledClamped)) { - return rgbyM; - }; - float tmpvar_44; - tmpvar_44 = (dirSwMinusNe + dirSeMinusNw); - dir.x = tmpvar_44; - float tmpvar_45; - tmpvar_45 = (dirSwMinusNe - dirSeMinusNw); - dir.y = vec2(tmpvar_45).y; - vec2 tmpvar_46; - tmpvar_46 = normalize (dir.xy); - vec2 tmpvar_47; - tmpvar_47 = tmpvar_46; - dir1 = tmpvar_47; - vec4 tmpvar_48; - tmpvar_48.zw = vec2(0.0, 0.0); - tmpvar_48.xy = (pos.xy - (dir1 * fxaaConsoleRcpFrameOpt.zw)).xy; - vec4 tmpvar_49; - tmpvar_49 = xll_tex2Dlod (tex, tmpvar_48); - vec4 tmpvar_50; - tmpvar_50 = tmpvar_49; - rgbyN1 = tmpvar_50; - vec4 tmpvar_51; - tmpvar_51.zw = vec2(0.0, 0.0); - tmpvar_51.xy = (pos.xy + (dir1 * fxaaConsoleRcpFrameOpt.zw)).xy; - vec4 tmpvar_52; - tmpvar_52 = xll_tex2Dlod (tex, tmpvar_51); - vec4 tmpvar_53; - tmpvar_53 = tmpvar_52; - rgbyP1 = tmpvar_53; - float tmpvar_54; - tmpvar_54 = abs (dir1.x); - float tmpvar_55; - tmpvar_55 = abs (dir1.y); - float tmpvar_56; - tmpvar_56 = min (tmpvar_54, tmpvar_55); - float tmpvar_57; - tmpvar_57 = (tmpvar_56 * fxaaConsoleEdgeSharpness); - dirAbsMinTimesC = tmpvar_57; - vec2 tmpvar_58; - tmpvar_58 = clamp ((dir1.xy / dirAbsMinTimesC), vec2(-2.0, -2.0), vec2(2.0, 2.0)); - vec2 tmpvar_59; - tmpvar_59 = tmpvar_58; - dir2 = tmpvar_59; - vec4 tmpvar_60; - tmpvar_60.zw = vec2(0.0, 0.0); - tmpvar_60.xy = (pos.xy - (dir2 * fxaaConsoleRcpFrameOpt2.zw)).xy; - vec4 tmpvar_61; - tmpvar_61 = xll_tex2Dlod (tex, tmpvar_60); - vec4 tmpvar_62; - tmpvar_62 = tmpvar_61; - rgbyN2 = tmpvar_62; - vec4 tmpvar_63; - tmpvar_63.zw = vec2(0.0, 0.0); - tmpvar_63.xy = (pos.xy + (dir2 * fxaaConsoleRcpFrameOpt2.zw)).xy; - vec4 tmpvar_64; - tmpvar_64 = xll_tex2Dlod (tex, tmpvar_63); - vec4 tmpvar_65; - tmpvar_65 = tmpvar_64; - rgbyP2 = tmpvar_65; - vec4 tmpvar_66; - tmpvar_66 = (rgbyN1 + rgbyP1); - rgbyA = tmpvar_66; - vec4 tmpvar_67; - tmpvar_67 = (((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25)); - rgbyB = tmpvar_67; - bool tmpvar_68; - if ((rgbyB.y < lumaMin)) { - tmpvar_68 = bool(1); - } else { - tmpvar_68 = (rgbyB.y > lumaMax); - }; - bool tmpvar_69; - tmpvar_69 = tmpvar_68; - twoTap = tmpvar_69; - if (twoTap) { - vec3 tmpvar_70; - tmpvar_70 = (rgbyA.xyz * 0.5); - rgbyB.xyz = tmpvar_70.xyz.xyz; - }; - return rgbyB; -} - -vec4 xlat_main ( - in v2f i -) -{ - float fxaaN; - float tmpvar_1; - tmpvar_1 = 0.5; - fxaaN = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2.x = -(fxaaN); - tmpvar_2.y = -(fxaaN); - tmpvar_2.z = fxaaN; - tmpvar_2.w = fxaaN; - vec4 tmpvar_3; - tmpvar_3 = FxaaPixelShader (i.uv, i.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_2), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_SV_POSITION.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_i.pos = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = xlv_TEXCOORD0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.uv = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = xlv_TEXCOORD1.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_i.uvPosPos = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xlat_main (xlt_i); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-irES.txt deleted file mode 100644 index 717c960e4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-irES.txt +++ /dev/null @@ -1,317 +0,0 @@ -#extension GL_EXT_shader_texture_lod : enable -struct v2f { - highp vec4 pos; - highp vec2 uv; - highp vec4 uvPosPos; -}; -varying highp vec4 xlv_TEXCOORD1; -varying highp vec2 xlv_TEXCOORD0; -uniform highp vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - lowp vec4 tmpvar_1; - tmpvar_1 = texture2DLodEXT (s, coord.xy, coord.w); - return tmpvar_1; -} - -float FxaaLuma ( - in lowp vec4 rgba -) -{ - return rgba.y; -} - -lowp vec4 FxaaPixelShader ( - in highp vec2 pos, - in highp vec4 fxaaConsolePosPos, - in sampler2D tex, - in sampler2D fxaaConsole360TexExpBiasNegOne, - in sampler2D fxaaConsole360TexExpBiasNegTwo, - in highp vec2 fxaaQualityRcpFrame, - in highp vec4 fxaaConsoleRcpFrameOpt, - in highp vec4 fxaaConsoleRcpFrameOpt2, - in highp vec4 fxaaConsole360RcpFrameOpt2, - in highp float fxaaQualitySubpix, - in highp float fxaaQualityEdgeThreshold, - in highp float fxaaQualityEdgeThresholdMin, - in highp float fxaaConsoleEdgeSharpness, - in highp float fxaaConsoleEdgeThreshold, - in highp float fxaaConsoleEdgeThresholdMin, - in highp vec4 fxaaConsole360ConstDir -) -{ - bool twoTap; - lowp vec4 rgbyB; - lowp vec4 rgbyA; - lowp vec4 rgbyP2; - lowp vec4 rgbyN2; - highp vec2 dir2; - highp float dirAbsMinTimesC; - lowp vec4 rgbyP1; - lowp vec4 rgbyN1; - highp vec2 dir1; - highp vec2 dir; - highp float dirSeMinusNw; - highp float lumaMaxSubMinM; - highp float dirSwMinusNe; - highp float lumaMaxM; - highp float lumaMaxScaledClamped; - highp float lumaMinM; - highp float lumaMaxScaled; - highp float lumaMin; - highp float lumaMax; - highp float lumaMinNeSe; - highp float lumaMaxNeSe; - highp float lumaMinNwSw; - highp float lumaMaxNwSw; - highp float lumaM; - lowp vec4 rgbyM; - highp float lumaSe; - highp float lumaNe; - highp float lumaSw; - highp float lumaNw; - highp vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = fxaaConsolePosPos.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - highp float tmpvar_3; - tmpvar_3 = FxaaLuma (tmpvar_2); - highp float tmpvar_4; - tmpvar_4 = tmpvar_3; - lumaNw = tmpvar_4; - highp vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = fxaaConsolePosPos.xw.xy; - vec4 tmpvar_6; - tmpvar_6 = xll_tex2Dlod (tex, tmpvar_5); - highp float tmpvar_7; - tmpvar_7 = FxaaLuma (tmpvar_6); - highp float tmpvar_8; - tmpvar_8 = tmpvar_7; - lumaSw = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 0.0); - tmpvar_9.xy = fxaaConsolePosPos.zy.xy; - vec4 tmpvar_10; - tmpvar_10 = xll_tex2Dlod (tex, tmpvar_9); - highp float tmpvar_11; - tmpvar_11 = FxaaLuma (tmpvar_10); - highp float tmpvar_12; - tmpvar_12 = tmpvar_11; - lumaNe = tmpvar_12; - highp vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = fxaaConsolePosPos.zw.xy; - vec4 tmpvar_14; - tmpvar_14 = xll_tex2Dlod (tex, tmpvar_13); - highp float tmpvar_15; - tmpvar_15 = FxaaLuma (tmpvar_14); - highp float tmpvar_16; - tmpvar_16 = tmpvar_15; - lumaSe = tmpvar_16; - highp vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = pos.xy.xy; - vec4 tmpvar_18; - tmpvar_18 = xll_tex2Dlod (tex, tmpvar_17); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - rgbyM = tmpvar_19; - lowp float tmpvar_20; - tmpvar_20 = rgbyM.y; - lumaM = tmpvar_20; - highp float tmpvar_21; - tmpvar_21 = max (lumaNw, lumaSw); - highp float tmpvar_22; - tmpvar_22 = tmpvar_21; - lumaMaxNwSw = tmpvar_22; - highp float tmpvar_23; - tmpvar_23 = (lumaNe + 0.00260417); - lumaNe = tmpvar_23; - highp float tmpvar_24; - tmpvar_24 = min (lumaNw, lumaSw); - highp float tmpvar_25; - tmpvar_25 = tmpvar_24; - lumaMinNwSw = tmpvar_25; - highp float tmpvar_26; - tmpvar_26 = max (lumaNe, lumaSe); - highp float tmpvar_27; - tmpvar_27 = tmpvar_26; - lumaMaxNeSe = tmpvar_27; - highp float tmpvar_28; - tmpvar_28 = min (lumaNe, lumaSe); - highp float tmpvar_29; - tmpvar_29 = tmpvar_28; - lumaMinNeSe = tmpvar_29; - highp float tmpvar_30; - tmpvar_30 = max (lumaMaxNeSe, lumaMaxNwSw); - highp float tmpvar_31; - tmpvar_31 = tmpvar_30; - lumaMax = tmpvar_31; - highp float tmpvar_32; - tmpvar_32 = min (lumaMinNeSe, lumaMinNwSw); - highp float tmpvar_33; - tmpvar_33 = tmpvar_32; - lumaMin = tmpvar_33; - highp float tmpvar_34; - tmpvar_34 = (lumaMax * fxaaConsoleEdgeThreshold); - lumaMaxScaled = tmpvar_34; - highp float tmpvar_35; - tmpvar_35 = min (lumaMin, lumaM); - highp float tmpvar_36; - tmpvar_36 = tmpvar_35; - lumaMinM = tmpvar_36; - highp float tmpvar_37; - tmpvar_37 = max (fxaaConsoleEdgeThresholdMin, lumaMaxScaled); - highp float tmpvar_38; - tmpvar_38 = tmpvar_37; - lumaMaxScaledClamped = tmpvar_38; - highp float tmpvar_39; - tmpvar_39 = max (lumaMax, lumaM); - highp float tmpvar_40; - tmpvar_40 = tmpvar_39; - lumaMaxM = tmpvar_40; - highp float tmpvar_41; - tmpvar_41 = (lumaSw - lumaNe); - dirSwMinusNe = tmpvar_41; - highp float tmpvar_42; - tmpvar_42 = (lumaMaxM - lumaMinM); - lumaMaxSubMinM = tmpvar_42; - highp float tmpvar_43; - tmpvar_43 = (lumaSe - lumaNw); - dirSeMinusNw = tmpvar_43; - if ((lumaMaxSubMinM < lumaMaxScaledClamped)) { - return rgbyM; - }; - highp float tmpvar_44; - tmpvar_44 = (dirSwMinusNe + dirSeMinusNw); - dir.x = tmpvar_44; - highp float tmpvar_45; - tmpvar_45 = (dirSwMinusNe - dirSeMinusNw); - dir.y = vec2(tmpvar_45).y; - highp vec2 tmpvar_46; - tmpvar_46 = normalize (dir.xy); - highp vec2 tmpvar_47; - tmpvar_47 = tmpvar_46; - dir1 = tmpvar_47; - highp vec4 tmpvar_48; - tmpvar_48.zw = vec2(0.0, 0.0); - tmpvar_48.xy = (pos.xy - (dir1 * fxaaConsoleRcpFrameOpt.zw)).xy; - vec4 tmpvar_49; - tmpvar_49 = xll_tex2Dlod (tex, tmpvar_48); - vec4 tmpvar_50; - tmpvar_50 = tmpvar_49; - rgbyN1 = tmpvar_50; - highp vec4 tmpvar_51; - tmpvar_51.zw = vec2(0.0, 0.0); - tmpvar_51.xy = (pos.xy + (dir1 * fxaaConsoleRcpFrameOpt.zw)).xy; - vec4 tmpvar_52; - tmpvar_52 = xll_tex2Dlod (tex, tmpvar_51); - vec4 tmpvar_53; - tmpvar_53 = tmpvar_52; - rgbyP1 = tmpvar_53; - highp float tmpvar_54; - tmpvar_54 = abs (dir1.x); - highp float tmpvar_55; - tmpvar_55 = abs (dir1.y); - highp float tmpvar_56; - tmpvar_56 = min (tmpvar_54, tmpvar_55); - highp float tmpvar_57; - tmpvar_57 = (tmpvar_56 * fxaaConsoleEdgeSharpness); - dirAbsMinTimesC = tmpvar_57; - highp vec2 tmpvar_58; - tmpvar_58 = clamp ((dir1.xy / dirAbsMinTimesC), vec2(-2.0, -2.0), vec2(2.0, 2.0)); - highp vec2 tmpvar_59; - tmpvar_59 = tmpvar_58; - dir2 = tmpvar_59; - highp vec4 tmpvar_60; - tmpvar_60.zw = vec2(0.0, 0.0); - tmpvar_60.xy = (pos.xy - (dir2 * fxaaConsoleRcpFrameOpt2.zw)).xy; - vec4 tmpvar_61; - tmpvar_61 = xll_tex2Dlod (tex, tmpvar_60); - vec4 tmpvar_62; - tmpvar_62 = tmpvar_61; - rgbyN2 = tmpvar_62; - highp vec4 tmpvar_63; - tmpvar_63.zw = vec2(0.0, 0.0); - tmpvar_63.xy = (pos.xy + (dir2 * fxaaConsoleRcpFrameOpt2.zw)).xy; - vec4 tmpvar_64; - tmpvar_64 = xll_tex2Dlod (tex, tmpvar_63); - vec4 tmpvar_65; - tmpvar_65 = tmpvar_64; - rgbyP2 = tmpvar_65; - lowp vec4 tmpvar_66; - tmpvar_66 = (rgbyN1 + rgbyP1); - rgbyA = tmpvar_66; - lowp vec4 tmpvar_67; - tmpvar_67 = (((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25)); - rgbyB = tmpvar_67; - bool tmpvar_68; - if ((rgbyB.y < lumaMin)) { - tmpvar_68 = bool(1); - } else { - tmpvar_68 = (rgbyB.y > lumaMax); - }; - bool tmpvar_69; - tmpvar_69 = tmpvar_68; - twoTap = tmpvar_69; - if (twoTap) { - lowp vec3 tmpvar_70; - tmpvar_70 = (rgbyA.xyz * 0.5); - rgbyB.xyz = tmpvar_70.xyz.xyz; - }; - return rgbyB; -} - -lowp vec4 xlat_main ( - in v2f i -) -{ - highp float fxaaN; - float tmpvar_1; - tmpvar_1 = 0.5; - fxaaN = tmpvar_1; - highp vec4 tmpvar_2; - tmpvar_2.x = -(fxaaN); - tmpvar_2.y = -(fxaaN); - tmpvar_2.z = fxaaN; - tmpvar_2.w = fxaaN; - lowp vec4 tmpvar_3; - tmpvar_3 = FxaaPixelShader (i.uv, i.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_2), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - lowp vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - highp vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - highp vec4 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD1.xyzw; - highp vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uvPosPos = tmpvar_5; - lowp vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - lowp vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - lowp vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - lowp vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-out.txt deleted file mode 100644 index be697283f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-out.txt +++ /dev/null @@ -1,99 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -varying vec4 xlv_TEXCOORD1; -varying vec2 xlv_TEXCOORD0; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -void main () -{ - vec4 fxaaConsoleRcpFrameOpt; - fxaaConsoleRcpFrameOpt = (_MainTex_TexelSize.xyxy * vec4(-0.5, -0.5, 0.5, 0.5)); - vec4 fxaaConsoleRcpFrameOpt2; - fxaaConsoleRcpFrameOpt2 = (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)); - vec4 tmpvar_1; - vec4 rgbyB; - vec2 dir; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = xlv_TEXCOORD1.xy; - vec4 tmpvar_3; - tmpvar_3 = texture2DLod (_MainTex, tmpvar_2.xy, 0.0); - float tmpvar_4; - tmpvar_4 = tmpvar_3.y; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = xlv_TEXCOORD1.xw; - vec4 tmpvar_6; - tmpvar_6 = texture2DLod (_MainTex, tmpvar_5.xy, 0.0); - float tmpvar_7; - tmpvar_7 = tmpvar_6.y; - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = xlv_TEXCOORD1.zy; - vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 0.0); - tmpvar_9.xy = xlv_TEXCOORD1.zw; - vec4 tmpvar_10; - tmpvar_10 = texture2DLod (_MainTex, tmpvar_9.xy, 0.0); - float tmpvar_11; - tmpvar_11 = tmpvar_10.y; - vec4 tmpvar_12; - tmpvar_12.zw = vec2(0.0, 0.0); - tmpvar_12.xy = xlv_TEXCOORD0; - vec4 tmpvar_13; - tmpvar_13 = texture2DLod (_MainTex, tmpvar_12.xy, 0.0); - float tmpvar_14; - tmpvar_14 = tmpvar_13.y; - float tmpvar_15; - tmpvar_15 = (texture2DLod (_MainTex, tmpvar_8.xy, 0.0).y + 0.00260417); - float tmpvar_16; - tmpvar_16 = max (max (tmpvar_15, tmpvar_11), max (tmpvar_4, tmpvar_7)); - float tmpvar_17; - tmpvar_17 = min (min (tmpvar_15, tmpvar_11), min (tmpvar_4, tmpvar_7)); - float tmpvar_18; - tmpvar_18 = max (0.05, (tmpvar_16 * 0.125)); - float tmpvar_19; - tmpvar_19 = (tmpvar_6.y - tmpvar_15); - float tmpvar_20; - tmpvar_20 = (max (tmpvar_16, tmpvar_14) - min (tmpvar_17, tmpvar_14)); - float tmpvar_21; - tmpvar_21 = (tmpvar_10.y - tmpvar_3.y); - if ((tmpvar_20 < tmpvar_18)) { - tmpvar_1 = tmpvar_13; - } else { - dir.x = (tmpvar_19 + tmpvar_21); - dir.y = (tmpvar_19 - tmpvar_21); - vec2 tmpvar_22; - tmpvar_22 = normalize (dir); - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = (xlv_TEXCOORD0 - (tmpvar_22 * fxaaConsoleRcpFrameOpt.zw)); - vec4 tmpvar_24; - tmpvar_24.zw = vec2(0.0, 0.0); - tmpvar_24.xy = (xlv_TEXCOORD0 + (tmpvar_22 * fxaaConsoleRcpFrameOpt.zw)); - vec2 tmpvar_25; - tmpvar_25 = clamp ((tmpvar_22 / (min (abs (tmpvar_22.x), abs (tmpvar_22.y)) * 8.0)), vec2(-2.0, -2.0), vec2(2.0, 2.0)); - vec4 tmpvar_26; - tmpvar_26.zw = vec2(0.0, 0.0); - tmpvar_26.xy = (xlv_TEXCOORD0 - (tmpvar_25 * fxaaConsoleRcpFrameOpt2.zw)); - vec4 tmpvar_27; - tmpvar_27.zw = vec2(0.0, 0.0); - tmpvar_27.xy = (xlv_TEXCOORD0 + (tmpvar_25 * fxaaConsoleRcpFrameOpt2.zw)); - vec4 tmpvar_28; - tmpvar_28 = (texture2DLod (_MainTex, tmpvar_23.xy, 0.0) + texture2DLod (_MainTex, tmpvar_24.xy, 0.0)); - vec4 tmpvar_29; - tmpvar_29 = (((texture2DLod (_MainTex, tmpvar_26.xy, 0.0) + texture2DLod (_MainTex, tmpvar_27.xy, 0.0)) * 0.25) + (tmpvar_28 * 0.25)); - rgbyB = tmpvar_29; - bool tmpvar_30; - if ((tmpvar_29.y < tmpvar_17)) { - tmpvar_30 = bool(1); - } else { - tmpvar_30 = (tmpvar_29.y > tmpvar_16); - }; - if (tmpvar_30) { - rgbyB.xyz = (tmpvar_28.xyz * 0.5); - }; - tmpvar_1 = rgbyB; - }; - gl_FragData[0] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-outES.txt deleted file mode 100644 index 1e4bbd687..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-outES.txt +++ /dev/null @@ -1,105 +0,0 @@ -#extension GL_EXT_shader_texture_lod : enable -varying highp vec4 xlv_TEXCOORD1; -varying highp vec2 xlv_TEXCOORD0; -uniform highp vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -void main () -{ - highp vec4 fxaaConsoleRcpFrameOpt; - fxaaConsoleRcpFrameOpt = (_MainTex_TexelSize.xyxy * vec4(-0.5, -0.5, 0.5, 0.5)); - highp vec4 fxaaConsoleRcpFrameOpt2; - fxaaConsoleRcpFrameOpt2 = (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)); - lowp vec4 tmpvar_1; - lowp vec4 rgbyB; - highp vec2 dir; - highp float lumaM; - highp vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = xlv_TEXCOORD1.xy; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2DLodEXT (_MainTex, tmpvar_2.xy, 0.0); - highp float tmpvar_4; - tmpvar_4 = tmpvar_3.y; - highp vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = xlv_TEXCOORD1.xw; - lowp vec4 tmpvar_6; - tmpvar_6 = texture2DLodEXT (_MainTex, tmpvar_5.xy, 0.0); - highp float tmpvar_7; - tmpvar_7 = tmpvar_6.y; - highp vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = xlv_TEXCOORD1.zy; - lowp vec4 tmpvar_9; - tmpvar_9 = texture2DLodEXT (_MainTex, tmpvar_8.xy, 0.0); - highp float tmpvar_10; - tmpvar_10 = tmpvar_9.y; - highp vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xlv_TEXCOORD1.zw; - lowp vec4 tmpvar_12; - tmpvar_12 = texture2DLodEXT (_MainTex, tmpvar_11.xy, 0.0); - highp float tmpvar_13; - tmpvar_13 = tmpvar_12.y; - highp vec4 tmpvar_14; - tmpvar_14.zw = vec2(0.0, 0.0); - tmpvar_14.xy = xlv_TEXCOORD0; - lowp vec4 tmpvar_15; - tmpvar_15 = texture2DLodEXT (_MainTex, tmpvar_14.xy, 0.0); - lowp float tmpvar_16; - tmpvar_16 = tmpvar_15.y; - lumaM = tmpvar_16; - highp float tmpvar_17; - tmpvar_17 = (tmpvar_10 + 0.00260417); - highp float tmpvar_18; - tmpvar_18 = max (max (tmpvar_17, tmpvar_13), max (tmpvar_4, tmpvar_7)); - highp float tmpvar_19; - tmpvar_19 = min (min (tmpvar_17, tmpvar_13), min (tmpvar_4, tmpvar_7)); - highp float tmpvar_20; - tmpvar_20 = max (0.05, (tmpvar_18 * 0.125)); - highp float tmpvar_21; - tmpvar_21 = (tmpvar_7 - tmpvar_17); - highp float tmpvar_22; - tmpvar_22 = (max (tmpvar_18, lumaM) - min (tmpvar_19, lumaM)); - highp float tmpvar_23; - tmpvar_23 = (tmpvar_13 - tmpvar_4); - if ((tmpvar_22 < tmpvar_20)) { - tmpvar_1 = tmpvar_15; - } else { - dir.x = (tmpvar_21 + tmpvar_23); - dir.y = (tmpvar_21 - tmpvar_23); - highp vec2 tmpvar_24; - tmpvar_24 = normalize (dir); - highp vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = (xlv_TEXCOORD0 - (tmpvar_24 * fxaaConsoleRcpFrameOpt.zw)); - highp vec4 tmpvar_26; - tmpvar_26.zw = vec2(0.0, 0.0); - tmpvar_26.xy = (xlv_TEXCOORD0 + (tmpvar_24 * fxaaConsoleRcpFrameOpt.zw)); - highp vec2 tmpvar_27; - tmpvar_27 = clamp ((tmpvar_24 / (min (abs (tmpvar_24.x), abs (tmpvar_24.y)) * 8.0)), vec2(-2.0, -2.0), vec2(2.0, 2.0)); - highp vec4 tmpvar_28; - tmpvar_28.zw = vec2(0.0, 0.0); - tmpvar_28.xy = (xlv_TEXCOORD0 - (tmpvar_27 * fxaaConsoleRcpFrameOpt2.zw)); - highp vec4 tmpvar_29; - tmpvar_29.zw = vec2(0.0, 0.0); - tmpvar_29.xy = (xlv_TEXCOORD0 + (tmpvar_27 * fxaaConsoleRcpFrameOpt2.zw)); - lowp vec4 tmpvar_30; - tmpvar_30 = (texture2DLodEXT (_MainTex, tmpvar_25.xy, 0.0) + texture2DLodEXT (_MainTex, tmpvar_26.xy, 0.0)); - lowp vec4 tmpvar_31; - tmpvar_31 = (((texture2DLodEXT (_MainTex, tmpvar_28.xy, 0.0) + texture2DLodEXT (_MainTex, tmpvar_29.xy, 0.0)) * 0.25) + (tmpvar_30 * 0.25)); - rgbyB = tmpvar_31; - bool tmpvar_32; - if ((tmpvar_31.y < tmpvar_19)) { - tmpvar_32 = bool(1); - } else { - tmpvar_32 = (tmpvar_31.y > tmpvar_18); - }; - if (tmpvar_32) { - rgbyB.xyz = (tmpvar_30.xyz * 0.5); - }; - tmpvar_1 = rgbyB; - }; - gl_FragData[0] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-ir.txt deleted file mode 100644 index a79231e10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-ir.txt +++ /dev/null @@ -1,1542 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -struct v2f { - vec4 pos; - vec2 uv; - vec4 uvPosPos; -}; -varying vec4 xlv_TEXCOORD1; -varying vec2 xlv_TEXCOORD0; -varying vec4 xlv_SV_POSITION; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -float FxaaLuma ( - in vec4 rgba -) -{ - return rgba.w; -} - -vec4 FxaaPixelShader ( - in vec2 pos, - in vec4 fxaaConsolePosPos, - in sampler2D tex, - in sampler2D fxaaConsole360TexExpBiasNegOne, - in sampler2D fxaaConsole360TexExpBiasNegTwo, - in vec2 fxaaQualityRcpFrame, - in vec4 fxaaConsoleRcpFrameOpt, - in vec4 fxaaConsoleRcpFrameOpt2, - in vec4 fxaaConsole360RcpFrameOpt2, - in float fxaaQualitySubpix, - in float fxaaQualityEdgeThreshold, - in float fxaaQualityEdgeThresholdMin, - in float fxaaConsoleEdgeSharpness, - in float fxaaConsoleEdgeThreshold, - in float fxaaConsoleEdgeThresholdMin, - in vec4 fxaaConsole360ConstDir -) -{ - float pixelOffsetSubpix; - float pixelOffsetGood; - float subpixH; - float pixelOffset; - float subpixG; - bool goodSpan; - float dst; - bool directionN; - float spanLengthRcp; - bool goodSpanP; - float spanLength; - bool goodSpanN; - float dstP; - float dstN; - bool doneNP; - bool doneP; - bool doneN; - bool lumaMLTZero; - float subpixF; - float lumaMM; - float gradientScaled; - float lumaEndP; - float subpixE; - float lumaEndN; - float subpixD; - vec2 posP; - vec2 posN; - vec2 offNP; - vec2 posB; - float subpixC; - float gradient; - bool pairN; - float lumaSS; - float lumaNN; - float gradientS; - float gradientN; - float subpixB; - float subpixA; - bool horzSpan; - float lengthSign; - float subpixNWSWNESE; - float edgeVert; - float edgeHorz; - float edgeVert3; - float edgeHorz3; - float edgeVert4; - float edgeHorz4; - float lumaSWSE; - float lumaNWSW; - float edgeVert2; - float edgeHorz2; - float lumaNWNE; - float lumaNESE; - float edgeVert1; - float edgeHorz1; - float subpixNSWE; - float subpixRcpRange; - float lumaWE; - float lumaNS; - float lumaSW; - float lumaNE; - float lumaSE; - float lumaNW; - bool earlyExit; - float rangeMaxClamped; - float range; - float rangeMaxScaled; - float rangeMin; - float rangeMax; - float minWN; - float maxWN; - float minESM; - float maxESM; - float minSM; - float maxSM; - float lumaW; - float lumaN; - float lumaE; - float lumaS; - vec4 rgbyM; - vec2 posM; - float tmpvar_1; - tmpvar_1 = pos.x; - posM.x = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.y; - posM.y = vec2(tmpvar_2).y; - vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 0.0); - tmpvar_3.xy = posM.xy; - vec4 tmpvar_4; - tmpvar_4 = xll_tex2Dlod (tex, tmpvar_3); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - rgbyM = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = (posM + (vec2(0.0, 1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_7; - tmpvar_7 = xll_tex2Dlod (tex, tmpvar_6); - float tmpvar_8; - tmpvar_8 = FxaaLuma (tmpvar_7); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - lumaS = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10.zw = vec2(0.0, 0.0); - tmpvar_10.xy = (posM + (vec2(1.0, 0.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_11; - tmpvar_11 = xll_tex2Dlod (tex, tmpvar_10); - float tmpvar_12; - tmpvar_12 = FxaaLuma (tmpvar_11); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - lumaE = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14.zw = vec2(0.0, 0.0); - tmpvar_14.xy = (posM + (vec2(0.0, -1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_15; - tmpvar_15 = xll_tex2Dlod (tex, tmpvar_14); - float tmpvar_16; - tmpvar_16 = FxaaLuma (tmpvar_15); - float tmpvar_17; - tmpvar_17 = tmpvar_16; - lumaN = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = (posM + (vec2(-1.0, 0.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_19; - tmpvar_19 = xll_tex2Dlod (tex, tmpvar_18); - float tmpvar_20; - tmpvar_20 = FxaaLuma (tmpvar_19); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - lumaW = tmpvar_21; - float tmpvar_22; - tmpvar_22 = max (lumaS, rgbyM.w); - float tmpvar_23; - tmpvar_23 = tmpvar_22; - maxSM = tmpvar_23; - float tmpvar_24; - tmpvar_24 = min (lumaS, rgbyM.w); - float tmpvar_25; - tmpvar_25 = tmpvar_24; - minSM = tmpvar_25; - float tmpvar_26; - tmpvar_26 = max (lumaE, maxSM); - float tmpvar_27; - tmpvar_27 = tmpvar_26; - maxESM = tmpvar_27; - float tmpvar_28; - tmpvar_28 = min (lumaE, minSM); - float tmpvar_29; - tmpvar_29 = tmpvar_28; - minESM = tmpvar_29; - float tmpvar_30; - tmpvar_30 = max (lumaN, lumaW); - float tmpvar_31; - tmpvar_31 = tmpvar_30; - maxWN = tmpvar_31; - float tmpvar_32; - tmpvar_32 = min (lumaN, lumaW); - float tmpvar_33; - tmpvar_33 = tmpvar_32; - minWN = tmpvar_33; - float tmpvar_34; - tmpvar_34 = max (maxWN, maxESM); - float tmpvar_35; - tmpvar_35 = tmpvar_34; - rangeMax = tmpvar_35; - float tmpvar_36; - tmpvar_36 = min (minWN, minESM); - float tmpvar_37; - tmpvar_37 = tmpvar_36; - rangeMin = tmpvar_37; - float tmpvar_38; - tmpvar_38 = (rangeMax * fxaaQualityEdgeThreshold); - rangeMaxScaled = tmpvar_38; - float tmpvar_39; - tmpvar_39 = (rangeMax - rangeMin); - range = tmpvar_39; - float tmpvar_40; - tmpvar_40 = max (fxaaQualityEdgeThresholdMin, rangeMaxScaled); - float tmpvar_41; - tmpvar_41 = tmpvar_40; - rangeMaxClamped = tmpvar_41; - bool tmpvar_42; - tmpvar_42 = (range < rangeMaxClamped); - earlyExit = tmpvar_42; - if (earlyExit) { - return rgbyM; - }; - vec4 tmpvar_43; - tmpvar_43.zw = vec2(0.0, 0.0); - tmpvar_43.xy = (posM + (vec2(-1.0, -1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_44; - tmpvar_44 = xll_tex2Dlod (tex, tmpvar_43); - float tmpvar_45; - tmpvar_45 = FxaaLuma (tmpvar_44); - float tmpvar_46; - tmpvar_46 = tmpvar_45; - lumaNW = tmpvar_46; - vec4 tmpvar_47; - tmpvar_47.zw = vec2(0.0, 0.0); - tmpvar_47.xy = (posM + (vec2(1.0, 1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_48; - tmpvar_48 = xll_tex2Dlod (tex, tmpvar_47); - float tmpvar_49; - tmpvar_49 = FxaaLuma (tmpvar_48); - float tmpvar_50; - tmpvar_50 = tmpvar_49; - lumaSE = tmpvar_50; - vec4 tmpvar_51; - tmpvar_51.zw = vec2(0.0, 0.0); - tmpvar_51.xy = (posM + (vec2(1.0, -1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_52; - tmpvar_52 = xll_tex2Dlod (tex, tmpvar_51); - float tmpvar_53; - tmpvar_53 = FxaaLuma (tmpvar_52); - float tmpvar_54; - tmpvar_54 = tmpvar_53; - lumaNE = tmpvar_54; - vec4 tmpvar_55; - tmpvar_55.zw = vec2(0.0, 0.0); - tmpvar_55.xy = (posM + (vec2(-1.0, 1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_56; - tmpvar_56 = xll_tex2Dlod (tex, tmpvar_55); - float tmpvar_57; - tmpvar_57 = FxaaLuma (tmpvar_56); - float tmpvar_58; - tmpvar_58 = tmpvar_57; - lumaSW = tmpvar_58; - float tmpvar_59; - tmpvar_59 = (lumaN + lumaS); - lumaNS = tmpvar_59; - float tmpvar_60; - tmpvar_60 = (lumaW + lumaE); - lumaWE = tmpvar_60; - float tmpvar_61; - tmpvar_61 = (1.0 / range); - subpixRcpRange = tmpvar_61; - float tmpvar_62; - tmpvar_62 = (lumaNS + lumaWE); - subpixNSWE = tmpvar_62; - float tmpvar_63; - tmpvar_63 = ((-(2.0) * rgbyM.w) + lumaNS); - edgeHorz1 = tmpvar_63; - float tmpvar_64; - tmpvar_64 = ((-(2.0) * rgbyM.w) + lumaWE); - edgeVert1 = tmpvar_64; - float tmpvar_65; - tmpvar_65 = (lumaNE + lumaSE); - lumaNESE = tmpvar_65; - float tmpvar_66; - tmpvar_66 = (lumaNW + lumaNE); - lumaNWNE = tmpvar_66; - float tmpvar_67; - tmpvar_67 = ((-(2.0) * lumaE) + lumaNESE); - edgeHorz2 = tmpvar_67; - float tmpvar_68; - tmpvar_68 = ((-(2.0) * lumaN) + lumaNWNE); - edgeVert2 = tmpvar_68; - float tmpvar_69; - tmpvar_69 = (lumaNW + lumaSW); - lumaNWSW = tmpvar_69; - float tmpvar_70; - tmpvar_70 = (lumaSW + lumaSE); - lumaSWSE = tmpvar_70; - float tmpvar_71; - tmpvar_71 = abs (edgeHorz1); - float tmpvar_72; - tmpvar_72 = abs (edgeHorz2); - float tmpvar_73; - tmpvar_73 = ((tmpvar_71 * 2.0) + tmpvar_72); - edgeHorz4 = tmpvar_73; - float tmpvar_74; - tmpvar_74 = abs (edgeVert1); - float tmpvar_75; - tmpvar_75 = abs (edgeVert2); - float tmpvar_76; - tmpvar_76 = ((tmpvar_74 * 2.0) + tmpvar_75); - edgeVert4 = tmpvar_76; - float tmpvar_77; - tmpvar_77 = ((-(2.0) * lumaW) + lumaNWSW); - edgeHorz3 = tmpvar_77; - float tmpvar_78; - tmpvar_78 = ((-(2.0) * lumaS) + lumaSWSE); - edgeVert3 = tmpvar_78; - float tmpvar_79; - tmpvar_79 = abs (edgeHorz3); - float tmpvar_80; - tmpvar_80 = (tmpvar_79 + edgeHorz4); - edgeHorz = tmpvar_80; - float tmpvar_81; - tmpvar_81 = abs (edgeVert3); - float tmpvar_82; - tmpvar_82 = (tmpvar_81 + edgeVert4); - edgeVert = tmpvar_82; - float tmpvar_83; - tmpvar_83 = (lumaNWSW + lumaNESE); - subpixNWSWNESE = tmpvar_83; - float tmpvar_84; - tmpvar_84 = fxaaQualityRcpFrame.x; - lengthSign = tmpvar_84; - bool tmpvar_85; - tmpvar_85 = (edgeHorz >= edgeVert); - horzSpan = tmpvar_85; - float tmpvar_86; - tmpvar_86 = ((subpixNSWE * 2.0) + subpixNWSWNESE); - subpixA = tmpvar_86; - if (!(horzSpan)) { - float tmpvar_87; - tmpvar_87 = lumaW; - lumaN = tmpvar_87; - }; - if (!(horzSpan)) { - float tmpvar_88; - tmpvar_88 = lumaE; - lumaS = tmpvar_88; - }; - if (horzSpan) { - float tmpvar_89; - tmpvar_89 = fxaaQualityRcpFrame.y; - lengthSign = tmpvar_89; - }; - float tmpvar_90; - tmpvar_90 = ((subpixA * 0.0833333) - rgbyM.w); - subpixB = tmpvar_90; - float tmpvar_91; - tmpvar_91 = (lumaN - rgbyM.w); - gradientN = tmpvar_91; - float tmpvar_92; - tmpvar_92 = (lumaS - rgbyM.w); - gradientS = tmpvar_92; - float tmpvar_93; - tmpvar_93 = (lumaN + rgbyM.w); - lumaNN = tmpvar_93; - float tmpvar_94; - tmpvar_94 = (lumaS + rgbyM.w); - lumaSS = tmpvar_94; - float tmpvar_95; - tmpvar_95 = abs (gradientN); - float tmpvar_96; - tmpvar_96 = abs (gradientS); - bool tmpvar_97; - tmpvar_97 = (tmpvar_95 >= tmpvar_96); - pairN = tmpvar_97; - float tmpvar_98; - tmpvar_98 = abs (gradientN); - float tmpvar_99; - tmpvar_99 = abs (gradientS); - float tmpvar_100; - tmpvar_100 = max (tmpvar_98, tmpvar_99); - float tmpvar_101; - tmpvar_101 = tmpvar_100; - gradient = tmpvar_101; - if (pairN) { - float tmpvar_102; - tmpvar_102 = -(lengthSign); - lengthSign = tmpvar_102; - }; - float tmpvar_103; - tmpvar_103 = abs (subpixB); - float tmpvar_104; - tmpvar_104 = xll_saturate ((tmpvar_103 * subpixRcpRange)); - float tmpvar_105; - tmpvar_105 = tmpvar_104; - subpixC = tmpvar_105; - float tmpvar_106; - tmpvar_106 = posM.x; - posB.x = tmpvar_106; - float tmpvar_107; - tmpvar_107 = posM.y; - posB.y = vec2(tmpvar_107).y; - float tmpvar_108; - if (!(horzSpan)) { - tmpvar_108 = 0.0; - } else { - tmpvar_108 = fxaaQualityRcpFrame.x; - }; - float tmpvar_109; - tmpvar_109 = tmpvar_108; - offNP.x = tmpvar_109; - float tmpvar_110; - if (horzSpan) { - tmpvar_110 = 0.0; - } else { - tmpvar_110 = fxaaQualityRcpFrame.y; - }; - float tmpvar_111; - tmpvar_111 = tmpvar_110; - offNP.y = vec2(tmpvar_111).y; - if (!(horzSpan)) { - float tmpvar_112; - tmpvar_112 = (posB.x + (lengthSign * 0.5)); - posB.x = tmpvar_112; - }; - if (horzSpan) { - float tmpvar_113; - tmpvar_113 = (posB.y + (lengthSign * 0.5)); - posB.y = vec2(tmpvar_113).y; - }; - float tmpvar_114; - tmpvar_114 = (posB.x - (offNP.x * 1.0)); - posN.x = tmpvar_114; - float tmpvar_115; - tmpvar_115 = (posB.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_115).y; - float tmpvar_116; - tmpvar_116 = (posB.x + (offNP.x * 1.0)); - posP.x = tmpvar_116; - float tmpvar_117; - tmpvar_117 = (posB.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_117).y; - float tmpvar_118; - tmpvar_118 = ((-(2.0) * subpixC) + 3.0); - subpixD = tmpvar_118; - vec4 tmpvar_119; - tmpvar_119.zw = vec2(0.0, 0.0); - tmpvar_119.xy = posN.xy; - vec4 tmpvar_120; - tmpvar_120 = xll_tex2Dlod (tex, tmpvar_119); - float tmpvar_121; - tmpvar_121 = FxaaLuma (tmpvar_120); - float tmpvar_122; - tmpvar_122 = tmpvar_121; - lumaEndN = tmpvar_122; - float tmpvar_123; - tmpvar_123 = (subpixC * subpixC); - subpixE = tmpvar_123; - vec4 tmpvar_124; - tmpvar_124.zw = vec2(0.0, 0.0); - tmpvar_124.xy = posP.xy; - vec4 tmpvar_125; - tmpvar_125 = xll_tex2Dlod (tex, tmpvar_124); - float tmpvar_126; - tmpvar_126 = FxaaLuma (tmpvar_125); - float tmpvar_127; - tmpvar_127 = tmpvar_126; - lumaEndP = tmpvar_127; - if (!(pairN)) { - float tmpvar_128; - tmpvar_128 = lumaSS; - lumaNN = tmpvar_128; - }; - float tmpvar_129; - tmpvar_129 = ((gradient * 1.0) / 4.0); - gradientScaled = tmpvar_129; - float tmpvar_130; - tmpvar_130 = (rgbyM.w - (lumaNN * 0.5)); - lumaMM = tmpvar_130; - float tmpvar_131; - tmpvar_131 = (subpixD * subpixE); - subpixF = tmpvar_131; - bool tmpvar_132; - tmpvar_132 = (lumaMM < 0.0); - lumaMLTZero = tmpvar_132; - float tmpvar_133; - tmpvar_133 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_133; - float tmpvar_134; - tmpvar_134 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_134; - float tmpvar_135; - tmpvar_135 = abs (lumaEndN); - bool tmpvar_136; - tmpvar_136 = (tmpvar_135 >= gradientScaled); - doneN = tmpvar_136; - float tmpvar_137; - tmpvar_137 = abs (lumaEndP); - bool tmpvar_138; - tmpvar_138 = (tmpvar_137 >= gradientScaled); - doneP = tmpvar_138; - if (!(doneN)) { - float tmpvar_139; - tmpvar_139 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_139; - }; - if (!(doneN)) { - float tmpvar_140; - tmpvar_140 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_140).y; - }; - bool tmpvar_141; - if (!(doneN)) { - tmpvar_141 = bool(1); - } else { - tmpvar_141 = !(doneP); - }; - bool tmpvar_142; - tmpvar_142 = tmpvar_141; - doneNP = tmpvar_142; - if (!(doneP)) { - float tmpvar_143; - tmpvar_143 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_143; - }; - if (!(doneP)) { - float tmpvar_144; - tmpvar_144 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_144).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_145; - tmpvar_145.zw = vec2(0.0, 0.0); - tmpvar_145.xy = posN.xy.xy; - vec4 tmpvar_146; - tmpvar_146 = xll_tex2Dlod (tex, tmpvar_145); - float tmpvar_147; - tmpvar_147 = FxaaLuma (tmpvar_146); - float tmpvar_148; - tmpvar_148 = tmpvar_147; - lumaEndN = tmpvar_148; - }; - if (!(doneP)) { - vec4 tmpvar_149; - tmpvar_149.zw = vec2(0.0, 0.0); - tmpvar_149.xy = posP.xy.xy; - vec4 tmpvar_150; - tmpvar_150 = xll_tex2Dlod (tex, tmpvar_149); - float tmpvar_151; - tmpvar_151 = FxaaLuma (tmpvar_150); - float tmpvar_152; - tmpvar_152 = tmpvar_151; - lumaEndP = tmpvar_152; - }; - if (!(doneN)) { - float tmpvar_153; - tmpvar_153 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_153; - }; - if (!(doneP)) { - float tmpvar_154; - tmpvar_154 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_154; - }; - float tmpvar_155; - tmpvar_155 = abs (lumaEndN); - bool tmpvar_156; - tmpvar_156 = (tmpvar_155 >= gradientScaled); - doneN = tmpvar_156; - float tmpvar_157; - tmpvar_157 = abs (lumaEndP); - bool tmpvar_158; - tmpvar_158 = (tmpvar_157 >= gradientScaled); - doneP = tmpvar_158; - if (!(doneN)) { - float tmpvar_159; - tmpvar_159 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_159; - }; - if (!(doneN)) { - float tmpvar_160; - tmpvar_160 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_160).y; - }; - bool tmpvar_161; - if (!(doneN)) { - tmpvar_161 = bool(1); - } else { - tmpvar_161 = !(doneP); - }; - bool tmpvar_162; - tmpvar_162 = tmpvar_161; - doneNP = tmpvar_162; - if (!(doneP)) { - float tmpvar_163; - tmpvar_163 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_163; - }; - if (!(doneP)) { - float tmpvar_164; - tmpvar_164 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_164).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_165; - tmpvar_165.zw = vec2(0.0, 0.0); - tmpvar_165.xy = posN.xy.xy; - vec4 tmpvar_166; - tmpvar_166 = xll_tex2Dlod (tex, tmpvar_165); - float tmpvar_167; - tmpvar_167 = FxaaLuma (tmpvar_166); - float tmpvar_168; - tmpvar_168 = tmpvar_167; - lumaEndN = tmpvar_168; - }; - if (!(doneP)) { - vec4 tmpvar_169; - tmpvar_169.zw = vec2(0.0, 0.0); - tmpvar_169.xy = posP.xy.xy; - vec4 tmpvar_170; - tmpvar_170 = xll_tex2Dlod (tex, tmpvar_169); - float tmpvar_171; - tmpvar_171 = FxaaLuma (tmpvar_170); - float tmpvar_172; - tmpvar_172 = tmpvar_171; - lumaEndP = tmpvar_172; - }; - if (!(doneN)) { - float tmpvar_173; - tmpvar_173 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_173; - }; - if (!(doneP)) { - float tmpvar_174; - tmpvar_174 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_174; - }; - float tmpvar_175; - tmpvar_175 = abs (lumaEndN); - bool tmpvar_176; - tmpvar_176 = (tmpvar_175 >= gradientScaled); - doneN = tmpvar_176; - float tmpvar_177; - tmpvar_177 = abs (lumaEndP); - bool tmpvar_178; - tmpvar_178 = (tmpvar_177 >= gradientScaled); - doneP = tmpvar_178; - if (!(doneN)) { - float tmpvar_179; - tmpvar_179 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_179; - }; - if (!(doneN)) { - float tmpvar_180; - tmpvar_180 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_180).y; - }; - bool tmpvar_181; - if (!(doneN)) { - tmpvar_181 = bool(1); - } else { - tmpvar_181 = !(doneP); - }; - bool tmpvar_182; - tmpvar_182 = tmpvar_181; - doneNP = tmpvar_182; - if (!(doneP)) { - float tmpvar_183; - tmpvar_183 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_183; - }; - if (!(doneP)) { - float tmpvar_184; - tmpvar_184 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_184).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_185; - tmpvar_185.zw = vec2(0.0, 0.0); - tmpvar_185.xy = posN.xy.xy; - vec4 tmpvar_186; - tmpvar_186 = xll_tex2Dlod (tex, tmpvar_185); - float tmpvar_187; - tmpvar_187 = FxaaLuma (tmpvar_186); - float tmpvar_188; - tmpvar_188 = tmpvar_187; - lumaEndN = tmpvar_188; - }; - if (!(doneP)) { - vec4 tmpvar_189; - tmpvar_189.zw = vec2(0.0, 0.0); - tmpvar_189.xy = posP.xy.xy; - vec4 tmpvar_190; - tmpvar_190 = xll_tex2Dlod (tex, tmpvar_189); - float tmpvar_191; - tmpvar_191 = FxaaLuma (tmpvar_190); - float tmpvar_192; - tmpvar_192 = tmpvar_191; - lumaEndP = tmpvar_192; - }; - if (!(doneN)) { - float tmpvar_193; - tmpvar_193 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_193; - }; - if (!(doneP)) { - float tmpvar_194; - tmpvar_194 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_194; - }; - float tmpvar_195; - tmpvar_195 = abs (lumaEndN); - bool tmpvar_196; - tmpvar_196 = (tmpvar_195 >= gradientScaled); - doneN = tmpvar_196; - float tmpvar_197; - tmpvar_197 = abs (lumaEndP); - bool tmpvar_198; - tmpvar_198 = (tmpvar_197 >= gradientScaled); - doneP = tmpvar_198; - if (!(doneN)) { - float tmpvar_199; - tmpvar_199 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_199; - }; - if (!(doneN)) { - float tmpvar_200; - tmpvar_200 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_200).y; - }; - bool tmpvar_201; - if (!(doneN)) { - tmpvar_201 = bool(1); - } else { - tmpvar_201 = !(doneP); - }; - bool tmpvar_202; - tmpvar_202 = tmpvar_201; - doneNP = tmpvar_202; - if (!(doneP)) { - float tmpvar_203; - tmpvar_203 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_203; - }; - if (!(doneP)) { - float tmpvar_204; - tmpvar_204 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_204).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_205; - tmpvar_205.zw = vec2(0.0, 0.0); - tmpvar_205.xy = posN.xy.xy; - vec4 tmpvar_206; - tmpvar_206 = xll_tex2Dlod (tex, tmpvar_205); - float tmpvar_207; - tmpvar_207 = FxaaLuma (tmpvar_206); - float tmpvar_208; - tmpvar_208 = tmpvar_207; - lumaEndN = tmpvar_208; - }; - if (!(doneP)) { - vec4 tmpvar_209; - tmpvar_209.zw = vec2(0.0, 0.0); - tmpvar_209.xy = posP.xy.xy; - vec4 tmpvar_210; - tmpvar_210 = xll_tex2Dlod (tex, tmpvar_209); - float tmpvar_211; - tmpvar_211 = FxaaLuma (tmpvar_210); - float tmpvar_212; - tmpvar_212 = tmpvar_211; - lumaEndP = tmpvar_212; - }; - if (!(doneN)) { - float tmpvar_213; - tmpvar_213 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_213; - }; - if (!(doneP)) { - float tmpvar_214; - tmpvar_214 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_214; - }; - float tmpvar_215; - tmpvar_215 = abs (lumaEndN); - bool tmpvar_216; - tmpvar_216 = (tmpvar_215 >= gradientScaled); - doneN = tmpvar_216; - float tmpvar_217; - tmpvar_217 = abs (lumaEndP); - bool tmpvar_218; - tmpvar_218 = (tmpvar_217 >= gradientScaled); - doneP = tmpvar_218; - if (!(doneN)) { - float tmpvar_219; - tmpvar_219 = (posN.x - (offNP.x * 1.5)); - posN.x = tmpvar_219; - }; - if (!(doneN)) { - float tmpvar_220; - tmpvar_220 = (posN.y - (offNP.y * 1.5)); - posN.y = vec2(tmpvar_220).y; - }; - bool tmpvar_221; - if (!(doneN)) { - tmpvar_221 = bool(1); - } else { - tmpvar_221 = !(doneP); - }; - bool tmpvar_222; - tmpvar_222 = tmpvar_221; - doneNP = tmpvar_222; - if (!(doneP)) { - float tmpvar_223; - tmpvar_223 = (posP.x + (offNP.x * 1.5)); - posP.x = tmpvar_223; - }; - if (!(doneP)) { - float tmpvar_224; - tmpvar_224 = (posP.y + (offNP.y * 1.5)); - posP.y = vec2(tmpvar_224).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_225; - tmpvar_225.zw = vec2(0.0, 0.0); - tmpvar_225.xy = posN.xy.xy; - vec4 tmpvar_226; - tmpvar_226 = xll_tex2Dlod (tex, tmpvar_225); - float tmpvar_227; - tmpvar_227 = FxaaLuma (tmpvar_226); - float tmpvar_228; - tmpvar_228 = tmpvar_227; - lumaEndN = tmpvar_228; - }; - if (!(doneP)) { - vec4 tmpvar_229; - tmpvar_229.zw = vec2(0.0, 0.0); - tmpvar_229.xy = posP.xy.xy; - vec4 tmpvar_230; - tmpvar_230 = xll_tex2Dlod (tex, tmpvar_229); - float tmpvar_231; - tmpvar_231 = FxaaLuma (tmpvar_230); - float tmpvar_232; - tmpvar_232 = tmpvar_231; - lumaEndP = tmpvar_232; - }; - if (!(doneN)) { - float tmpvar_233; - tmpvar_233 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_233; - }; - if (!(doneP)) { - float tmpvar_234; - tmpvar_234 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_234; - }; - float tmpvar_235; - tmpvar_235 = abs (lumaEndN); - bool tmpvar_236; - tmpvar_236 = (tmpvar_235 >= gradientScaled); - doneN = tmpvar_236; - float tmpvar_237; - tmpvar_237 = abs (lumaEndP); - bool tmpvar_238; - tmpvar_238 = (tmpvar_237 >= gradientScaled); - doneP = tmpvar_238; - if (!(doneN)) { - float tmpvar_239; - tmpvar_239 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_239; - }; - if (!(doneN)) { - float tmpvar_240; - tmpvar_240 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_240).y; - }; - bool tmpvar_241; - if (!(doneN)) { - tmpvar_241 = bool(1); - } else { - tmpvar_241 = !(doneP); - }; - bool tmpvar_242; - tmpvar_242 = tmpvar_241; - doneNP = tmpvar_242; - if (!(doneP)) { - float tmpvar_243; - tmpvar_243 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_243; - }; - if (!(doneP)) { - float tmpvar_244; - tmpvar_244 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_244).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_245; - tmpvar_245.zw = vec2(0.0, 0.0); - tmpvar_245.xy = posN.xy.xy; - vec4 tmpvar_246; - tmpvar_246 = xll_tex2Dlod (tex, tmpvar_245); - float tmpvar_247; - tmpvar_247 = FxaaLuma (tmpvar_246); - float tmpvar_248; - tmpvar_248 = tmpvar_247; - lumaEndN = tmpvar_248; - }; - if (!(doneP)) { - vec4 tmpvar_249; - tmpvar_249.zw = vec2(0.0, 0.0); - tmpvar_249.xy = posP.xy.xy; - vec4 tmpvar_250; - tmpvar_250 = xll_tex2Dlod (tex, tmpvar_249); - float tmpvar_251; - tmpvar_251 = FxaaLuma (tmpvar_250); - float tmpvar_252; - tmpvar_252 = tmpvar_251; - lumaEndP = tmpvar_252; - }; - if (!(doneN)) { - float tmpvar_253; - tmpvar_253 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_253; - }; - if (!(doneP)) { - float tmpvar_254; - tmpvar_254 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_254; - }; - float tmpvar_255; - tmpvar_255 = abs (lumaEndN); - bool tmpvar_256; - tmpvar_256 = (tmpvar_255 >= gradientScaled); - doneN = tmpvar_256; - float tmpvar_257; - tmpvar_257 = abs (lumaEndP); - bool tmpvar_258; - tmpvar_258 = (tmpvar_257 >= gradientScaled); - doneP = tmpvar_258; - if (!(doneN)) { - float tmpvar_259; - tmpvar_259 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_259; - }; - if (!(doneN)) { - float tmpvar_260; - tmpvar_260 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_260).y; - }; - bool tmpvar_261; - if (!(doneN)) { - tmpvar_261 = bool(1); - } else { - tmpvar_261 = !(doneP); - }; - bool tmpvar_262; - tmpvar_262 = tmpvar_261; - doneNP = tmpvar_262; - if (!(doneP)) { - float tmpvar_263; - tmpvar_263 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_263; - }; - if (!(doneP)) { - float tmpvar_264; - tmpvar_264 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_264).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_265; - tmpvar_265.zw = vec2(0.0, 0.0); - tmpvar_265.xy = posN.xy.xy; - vec4 tmpvar_266; - tmpvar_266 = xll_tex2Dlod (tex, tmpvar_265); - float tmpvar_267; - tmpvar_267 = FxaaLuma (tmpvar_266); - float tmpvar_268; - tmpvar_268 = tmpvar_267; - lumaEndN = tmpvar_268; - }; - if (!(doneP)) { - vec4 tmpvar_269; - tmpvar_269.zw = vec2(0.0, 0.0); - tmpvar_269.xy = posP.xy.xy; - vec4 tmpvar_270; - tmpvar_270 = xll_tex2Dlod (tex, tmpvar_269); - float tmpvar_271; - tmpvar_271 = FxaaLuma (tmpvar_270); - float tmpvar_272; - tmpvar_272 = tmpvar_271; - lumaEndP = tmpvar_272; - }; - if (!(doneN)) { - float tmpvar_273; - tmpvar_273 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_273; - }; - if (!(doneP)) { - float tmpvar_274; - tmpvar_274 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_274; - }; - float tmpvar_275; - tmpvar_275 = abs (lumaEndN); - bool tmpvar_276; - tmpvar_276 = (tmpvar_275 >= gradientScaled); - doneN = tmpvar_276; - float tmpvar_277; - tmpvar_277 = abs (lumaEndP); - bool tmpvar_278; - tmpvar_278 = (tmpvar_277 >= gradientScaled); - doneP = tmpvar_278; - if (!(doneN)) { - float tmpvar_279; - tmpvar_279 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_279; - }; - if (!(doneN)) { - float tmpvar_280; - tmpvar_280 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_280).y; - }; - bool tmpvar_281; - if (!(doneN)) { - tmpvar_281 = bool(1); - } else { - tmpvar_281 = !(doneP); - }; - bool tmpvar_282; - tmpvar_282 = tmpvar_281; - doneNP = tmpvar_282; - if (!(doneP)) { - float tmpvar_283; - tmpvar_283 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_283; - }; - if (!(doneP)) { - float tmpvar_284; - tmpvar_284 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_284).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_285; - tmpvar_285.zw = vec2(0.0, 0.0); - tmpvar_285.xy = posN.xy.xy; - vec4 tmpvar_286; - tmpvar_286 = xll_tex2Dlod (tex, tmpvar_285); - float tmpvar_287; - tmpvar_287 = FxaaLuma (tmpvar_286); - float tmpvar_288; - tmpvar_288 = tmpvar_287; - lumaEndN = tmpvar_288; - }; - if (!(doneP)) { - vec4 tmpvar_289; - tmpvar_289.zw = vec2(0.0, 0.0); - tmpvar_289.xy = posP.xy.xy; - vec4 tmpvar_290; - tmpvar_290 = xll_tex2Dlod (tex, tmpvar_289); - float tmpvar_291; - tmpvar_291 = FxaaLuma (tmpvar_290); - float tmpvar_292; - tmpvar_292 = tmpvar_291; - lumaEndP = tmpvar_292; - }; - if (!(doneN)) { - float tmpvar_293; - tmpvar_293 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_293; - }; - if (!(doneP)) { - float tmpvar_294; - tmpvar_294 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_294; - }; - float tmpvar_295; - tmpvar_295 = abs (lumaEndN); - bool tmpvar_296; - tmpvar_296 = (tmpvar_295 >= gradientScaled); - doneN = tmpvar_296; - float tmpvar_297; - tmpvar_297 = abs (lumaEndP); - bool tmpvar_298; - tmpvar_298 = (tmpvar_297 >= gradientScaled); - doneP = tmpvar_298; - if (!(doneN)) { - float tmpvar_299; - tmpvar_299 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_299; - }; - if (!(doneN)) { - float tmpvar_300; - tmpvar_300 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_300).y; - }; - bool tmpvar_301; - if (!(doneN)) { - tmpvar_301 = bool(1); - } else { - tmpvar_301 = !(doneP); - }; - bool tmpvar_302; - tmpvar_302 = tmpvar_301; - doneNP = tmpvar_302; - if (!(doneP)) { - float tmpvar_303; - tmpvar_303 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_303; - }; - if (!(doneP)) { - float tmpvar_304; - tmpvar_304 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_304).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_305; - tmpvar_305.zw = vec2(0.0, 0.0); - tmpvar_305.xy = posN.xy.xy; - vec4 tmpvar_306; - tmpvar_306 = xll_tex2Dlod (tex, tmpvar_305); - float tmpvar_307; - tmpvar_307 = FxaaLuma (tmpvar_306); - float tmpvar_308; - tmpvar_308 = tmpvar_307; - lumaEndN = tmpvar_308; - }; - if (!(doneP)) { - vec4 tmpvar_309; - tmpvar_309.zw = vec2(0.0, 0.0); - tmpvar_309.xy = posP.xy.xy; - vec4 tmpvar_310; - tmpvar_310 = xll_tex2Dlod (tex, tmpvar_309); - float tmpvar_311; - tmpvar_311 = FxaaLuma (tmpvar_310); - float tmpvar_312; - tmpvar_312 = tmpvar_311; - lumaEndP = tmpvar_312; - }; - if (!(doneN)) { - float tmpvar_313; - tmpvar_313 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_313; - }; - if (!(doneP)) { - float tmpvar_314; - tmpvar_314 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_314; - }; - float tmpvar_315; - tmpvar_315 = abs (lumaEndN); - bool tmpvar_316; - tmpvar_316 = (tmpvar_315 >= gradientScaled); - doneN = tmpvar_316; - float tmpvar_317; - tmpvar_317 = abs (lumaEndP); - bool tmpvar_318; - tmpvar_318 = (tmpvar_317 >= gradientScaled); - doneP = tmpvar_318; - if (!(doneN)) { - float tmpvar_319; - tmpvar_319 = (posN.x - (offNP.x * 4.0)); - posN.x = tmpvar_319; - }; - if (!(doneN)) { - float tmpvar_320; - tmpvar_320 = (posN.y - (offNP.y * 4.0)); - posN.y = vec2(tmpvar_320).y; - }; - bool tmpvar_321; - if (!(doneN)) { - tmpvar_321 = bool(1); - } else { - tmpvar_321 = !(doneP); - }; - bool tmpvar_322; - tmpvar_322 = tmpvar_321; - doneNP = tmpvar_322; - if (!(doneP)) { - float tmpvar_323; - tmpvar_323 = (posP.x + (offNP.x * 4.0)); - posP.x = tmpvar_323; - }; - if (!(doneP)) { - float tmpvar_324; - tmpvar_324 = (posP.y + (offNP.y * 4.0)); - posP.y = vec2(tmpvar_324).y; - }; - if (doneNP) { - if (!(doneN)) { - vec4 tmpvar_325; - tmpvar_325.zw = vec2(0.0, 0.0); - tmpvar_325.xy = posN.xy.xy; - vec4 tmpvar_326; - tmpvar_326 = xll_tex2Dlod (tex, tmpvar_325); - float tmpvar_327; - tmpvar_327 = FxaaLuma (tmpvar_326); - float tmpvar_328; - tmpvar_328 = tmpvar_327; - lumaEndN = tmpvar_328; - }; - if (!(doneP)) { - vec4 tmpvar_329; - tmpvar_329.zw = vec2(0.0, 0.0); - tmpvar_329.xy = posP.xy.xy; - vec4 tmpvar_330; - tmpvar_330 = xll_tex2Dlod (tex, tmpvar_329); - float tmpvar_331; - tmpvar_331 = FxaaLuma (tmpvar_330); - float tmpvar_332; - tmpvar_332 = tmpvar_331; - lumaEndP = tmpvar_332; - }; - if (!(doneN)) { - float tmpvar_333; - tmpvar_333 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_333; - }; - if (!(doneP)) { - float tmpvar_334; - tmpvar_334 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_334; - }; - float tmpvar_335; - tmpvar_335 = abs (lumaEndN); - bool tmpvar_336; - tmpvar_336 = (tmpvar_335 >= gradientScaled); - doneN = tmpvar_336; - float tmpvar_337; - tmpvar_337 = abs (lumaEndP); - bool tmpvar_338; - tmpvar_338 = (tmpvar_337 >= gradientScaled); - doneP = tmpvar_338; - if (!(doneN)) { - float tmpvar_339; - tmpvar_339 = (posN.x - (offNP.x * 8.0)); - posN.x = tmpvar_339; - }; - if (!(doneN)) { - float tmpvar_340; - tmpvar_340 = (posN.y - (offNP.y * 8.0)); - posN.y = vec2(tmpvar_340).y; - }; - bool tmpvar_341; - if (!(doneN)) { - tmpvar_341 = bool(1); - } else { - tmpvar_341 = !(doneP); - }; - bool tmpvar_342; - tmpvar_342 = tmpvar_341; - doneNP = tmpvar_342; - if (!(doneP)) { - float tmpvar_343; - tmpvar_343 = (posP.x + (offNP.x * 8.0)); - posP.x = tmpvar_343; - }; - if (!(doneP)) { - float tmpvar_344; - tmpvar_344 = (posP.y + (offNP.y * 8.0)); - posP.y = vec2(tmpvar_344).y; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - float tmpvar_345; - tmpvar_345 = (posM.x - posN.x); - dstN = tmpvar_345; - float tmpvar_346; - tmpvar_346 = (posP.x - posM.x); - dstP = tmpvar_346; - if (!(horzSpan)) { - float tmpvar_347; - tmpvar_347 = (posM.y - posN.y); - dstN = tmpvar_347; - }; - if (!(horzSpan)) { - float tmpvar_348; - tmpvar_348 = (posP.y - posM.y); - dstP = tmpvar_348; - }; - bool tmpvar_349; - tmpvar_349 = ((lumaEndN < 0.0) != lumaMLTZero); - goodSpanN = tmpvar_349; - float tmpvar_350; - tmpvar_350 = (dstP + dstN); - spanLength = tmpvar_350; - bool tmpvar_351; - tmpvar_351 = ((lumaEndP < 0.0) != lumaMLTZero); - goodSpanP = tmpvar_351; - float tmpvar_352; - tmpvar_352 = (1.0 / spanLength); - spanLengthRcp = tmpvar_352; - bool tmpvar_353; - tmpvar_353 = (dstN < dstP); - directionN = tmpvar_353; - float tmpvar_354; - tmpvar_354 = min (dstN, dstP); - float tmpvar_355; - tmpvar_355 = tmpvar_354; - dst = tmpvar_355; - bool tmpvar_356; - if (directionN) { - tmpvar_356 = goodSpanN; - } else { - tmpvar_356 = goodSpanP; - }; - bool tmpvar_357; - tmpvar_357 = tmpvar_356; - goodSpan = tmpvar_357; - float tmpvar_358; - tmpvar_358 = (subpixF * subpixF); - subpixG = tmpvar_358; - float tmpvar_359; - tmpvar_359 = ((dst * -(spanLengthRcp)) + 0.5); - pixelOffset = tmpvar_359; - float tmpvar_360; - tmpvar_360 = (subpixG * fxaaQualitySubpix); - subpixH = tmpvar_360; - float tmpvar_361; - if (goodSpan) { - tmpvar_361 = pixelOffset; - } else { - tmpvar_361 = 0.0; - }; - float tmpvar_362; - tmpvar_362 = tmpvar_361; - pixelOffsetGood = tmpvar_362; - float tmpvar_363; - tmpvar_363 = max (pixelOffsetGood, subpixH); - float tmpvar_364; - tmpvar_364 = tmpvar_363; - pixelOffsetSubpix = tmpvar_364; - if (!(horzSpan)) { - float tmpvar_365; - tmpvar_365 = (posM.x + (pixelOffsetSubpix * lengthSign)); - posM.x = tmpvar_365; - }; - if (horzSpan) { - float tmpvar_366; - tmpvar_366 = (posM.y + (pixelOffsetSubpix * lengthSign)); - posM.y = vec2(tmpvar_366).y; - }; - vec4 tmpvar_367; - tmpvar_367.zw = vec2(0.0, 0.0); - tmpvar_367.xy = posM.xy; - vec4 tmpvar_368; - tmpvar_368 = xll_tex2Dlod (tex, tmpvar_367); - vec4 tmpvar_369; - tmpvar_369.xyz = tmpvar_368.xyz.xyz; - tmpvar_369.w = rgbyM.w; - return tmpvar_369; -} - -vec4 xlat_main ( - in v2f i -) -{ - float fxaaN; - float tmpvar_1; - tmpvar_1 = 0.5; - fxaaN = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2.x = -(fxaaN); - tmpvar_2.y = -(fxaaN); - tmpvar_2.z = fxaaN; - tmpvar_2.w = fxaaN; - vec4 tmpvar_3; - tmpvar_3 = FxaaPixelShader (i.uv, i.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_2), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_SV_POSITION.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_i.pos = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = xlv_TEXCOORD0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.uv = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = xlv_TEXCOORD1.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_i.uvPosPos = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xlat_main (xlt_i); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-irES.txt deleted file mode 100644 index 0fd857dd4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-irES.txt +++ /dev/null @@ -1,1542 +0,0 @@ -#extension GL_EXT_shader_texture_lod : enable -struct v2f { - highp vec4 pos; - highp vec2 uv; - highp vec4 uvPosPos; -}; -varying highp vec4 xlv_TEXCOORD1; -varying highp vec2 xlv_TEXCOORD0; -varying highp vec4 xlv_SV_POSITION; -uniform highp vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - lowp vec4 tmpvar_1; - tmpvar_1 = texture2DLodEXT (s, coord.xy, coord.w); - return tmpvar_1; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -float FxaaLuma ( - in highp vec4 rgba -) -{ - return rgba.w; -} - -vec4 FxaaPixelShader ( - in highp vec2 pos, - in highp vec4 fxaaConsolePosPos, - in sampler2D tex, - in sampler2D fxaaConsole360TexExpBiasNegOne, - in sampler2D fxaaConsole360TexExpBiasNegTwo, - in highp vec2 fxaaQualityRcpFrame, - in highp vec4 fxaaConsoleRcpFrameOpt, - in highp vec4 fxaaConsoleRcpFrameOpt2, - in highp vec4 fxaaConsole360RcpFrameOpt2, - in highp float fxaaQualitySubpix, - in highp float fxaaQualityEdgeThreshold, - in highp float fxaaQualityEdgeThresholdMin, - in highp float fxaaConsoleEdgeSharpness, - in highp float fxaaConsoleEdgeThreshold, - in highp float fxaaConsoleEdgeThresholdMin, - in highp vec4 fxaaConsole360ConstDir -) -{ - highp float pixelOffsetSubpix; - highp float pixelOffsetGood; - highp float subpixH; - highp float pixelOffset; - highp float subpixG; - bool goodSpan; - highp float dst; - bool directionN; - highp float spanLengthRcp; - bool goodSpanP; - highp float spanLength; - bool goodSpanN; - highp float dstP; - highp float dstN; - bool doneNP; - bool doneP; - bool doneN; - bool lumaMLTZero; - highp float subpixF; - highp float lumaMM; - highp float gradientScaled; - highp float lumaEndP; - highp float subpixE; - highp float lumaEndN; - highp float subpixD; - highp vec2 posP; - highp vec2 posN; - highp vec2 offNP; - highp vec2 posB; - highp float subpixC; - highp float gradient; - bool pairN; - highp float lumaSS; - highp float lumaNN; - highp float gradientS; - highp float gradientN; - highp float subpixB; - highp float subpixA; - bool horzSpan; - highp float lengthSign; - highp float subpixNWSWNESE; - highp float edgeVert; - highp float edgeHorz; - highp float edgeVert3; - highp float edgeHorz3; - highp float edgeVert4; - highp float edgeHorz4; - highp float lumaSWSE; - highp float lumaNWSW; - highp float edgeVert2; - highp float edgeHorz2; - highp float lumaNWNE; - highp float lumaNESE; - highp float edgeVert1; - highp float edgeHorz1; - highp float subpixNSWE; - highp float subpixRcpRange; - highp float lumaWE; - highp float lumaNS; - highp float lumaSW; - highp float lumaNE; - highp float lumaSE; - highp float lumaNW; - bool earlyExit; - highp float rangeMaxClamped; - highp float range; - highp float rangeMaxScaled; - highp float rangeMin; - highp float rangeMax; - highp float minWN; - highp float maxWN; - highp float minESM; - highp float maxESM; - highp float minSM; - highp float maxSM; - highp float lumaW; - highp float lumaN; - highp float lumaE; - highp float lumaS; - highp vec4 rgbyM; - highp vec2 posM; - highp float tmpvar_1; - tmpvar_1 = pos.x; - posM.x = tmpvar_1; - highp float tmpvar_2; - tmpvar_2 = pos.y; - posM.y = vec2(tmpvar_2).y; - highp vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 0.0); - tmpvar_3.xy = posM.xy; - vec4 tmpvar_4; - tmpvar_4 = xll_tex2Dlod (tex, tmpvar_3); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - rgbyM = tmpvar_5; - highp vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = (posM + (vec2(0.0, 1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_7; - tmpvar_7 = xll_tex2Dlod (tex, tmpvar_6); - highp float tmpvar_8; - tmpvar_8 = FxaaLuma (tmpvar_7); - highp float tmpvar_9; - tmpvar_9 = tmpvar_8; - lumaS = tmpvar_9; - highp vec4 tmpvar_10; - tmpvar_10.zw = vec2(0.0, 0.0); - tmpvar_10.xy = (posM + (vec2(1.0, 0.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_11; - tmpvar_11 = xll_tex2Dlod (tex, tmpvar_10); - highp float tmpvar_12; - tmpvar_12 = FxaaLuma (tmpvar_11); - highp float tmpvar_13; - tmpvar_13 = tmpvar_12; - lumaE = tmpvar_13; - highp vec4 tmpvar_14; - tmpvar_14.zw = vec2(0.0, 0.0); - tmpvar_14.xy = (posM + (vec2(0.0, -1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_15; - tmpvar_15 = xll_tex2Dlod (tex, tmpvar_14); - highp float tmpvar_16; - tmpvar_16 = FxaaLuma (tmpvar_15); - highp float tmpvar_17; - tmpvar_17 = tmpvar_16; - lumaN = tmpvar_17; - highp vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = (posM + (vec2(-1.0, 0.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_19; - tmpvar_19 = xll_tex2Dlod (tex, tmpvar_18); - highp float tmpvar_20; - tmpvar_20 = FxaaLuma (tmpvar_19); - highp float tmpvar_21; - tmpvar_21 = tmpvar_20; - lumaW = tmpvar_21; - highp float tmpvar_22; - tmpvar_22 = max (lumaS, rgbyM.w); - highp float tmpvar_23; - tmpvar_23 = tmpvar_22; - maxSM = tmpvar_23; - highp float tmpvar_24; - tmpvar_24 = min (lumaS, rgbyM.w); - highp float tmpvar_25; - tmpvar_25 = tmpvar_24; - minSM = tmpvar_25; - highp float tmpvar_26; - tmpvar_26 = max (lumaE, maxSM); - highp float tmpvar_27; - tmpvar_27 = tmpvar_26; - maxESM = tmpvar_27; - highp float tmpvar_28; - tmpvar_28 = min (lumaE, minSM); - highp float tmpvar_29; - tmpvar_29 = tmpvar_28; - minESM = tmpvar_29; - highp float tmpvar_30; - tmpvar_30 = max (lumaN, lumaW); - highp float tmpvar_31; - tmpvar_31 = tmpvar_30; - maxWN = tmpvar_31; - highp float tmpvar_32; - tmpvar_32 = min (lumaN, lumaW); - highp float tmpvar_33; - tmpvar_33 = tmpvar_32; - minWN = tmpvar_33; - highp float tmpvar_34; - tmpvar_34 = max (maxWN, maxESM); - highp float tmpvar_35; - tmpvar_35 = tmpvar_34; - rangeMax = tmpvar_35; - highp float tmpvar_36; - tmpvar_36 = min (minWN, minESM); - highp float tmpvar_37; - tmpvar_37 = tmpvar_36; - rangeMin = tmpvar_37; - highp float tmpvar_38; - tmpvar_38 = (rangeMax * fxaaQualityEdgeThreshold); - rangeMaxScaled = tmpvar_38; - highp float tmpvar_39; - tmpvar_39 = (rangeMax - rangeMin); - range = tmpvar_39; - highp float tmpvar_40; - tmpvar_40 = max (fxaaQualityEdgeThresholdMin, rangeMaxScaled); - highp float tmpvar_41; - tmpvar_41 = tmpvar_40; - rangeMaxClamped = tmpvar_41; - bool tmpvar_42; - tmpvar_42 = (range < rangeMaxClamped); - earlyExit = tmpvar_42; - if (earlyExit) { - return rgbyM; - }; - highp vec4 tmpvar_43; - tmpvar_43.zw = vec2(0.0, 0.0); - tmpvar_43.xy = (posM + (vec2(-1.0, -1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_44; - tmpvar_44 = xll_tex2Dlod (tex, tmpvar_43); - highp float tmpvar_45; - tmpvar_45 = FxaaLuma (tmpvar_44); - highp float tmpvar_46; - tmpvar_46 = tmpvar_45; - lumaNW = tmpvar_46; - highp vec4 tmpvar_47; - tmpvar_47.zw = vec2(0.0, 0.0); - tmpvar_47.xy = (posM + (vec2(1.0, 1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_48; - tmpvar_48 = xll_tex2Dlod (tex, tmpvar_47); - highp float tmpvar_49; - tmpvar_49 = FxaaLuma (tmpvar_48); - highp float tmpvar_50; - tmpvar_50 = tmpvar_49; - lumaSE = tmpvar_50; - highp vec4 tmpvar_51; - tmpvar_51.zw = vec2(0.0, 0.0); - tmpvar_51.xy = (posM + (vec2(1.0, -1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_52; - tmpvar_52 = xll_tex2Dlod (tex, tmpvar_51); - highp float tmpvar_53; - tmpvar_53 = FxaaLuma (tmpvar_52); - highp float tmpvar_54; - tmpvar_54 = tmpvar_53; - lumaNE = tmpvar_54; - highp vec4 tmpvar_55; - tmpvar_55.zw = vec2(0.0, 0.0); - tmpvar_55.xy = (posM + (vec2(-1.0, 1.0) * fxaaQualityRcpFrame.xy)).xy; - vec4 tmpvar_56; - tmpvar_56 = xll_tex2Dlod (tex, tmpvar_55); - highp float tmpvar_57; - tmpvar_57 = FxaaLuma (tmpvar_56); - highp float tmpvar_58; - tmpvar_58 = tmpvar_57; - lumaSW = tmpvar_58; - highp float tmpvar_59; - tmpvar_59 = (lumaN + lumaS); - lumaNS = tmpvar_59; - highp float tmpvar_60; - tmpvar_60 = (lumaW + lumaE); - lumaWE = tmpvar_60; - highp float tmpvar_61; - tmpvar_61 = (1.0 / range); - subpixRcpRange = tmpvar_61; - highp float tmpvar_62; - tmpvar_62 = (lumaNS + lumaWE); - subpixNSWE = tmpvar_62; - highp float tmpvar_63; - tmpvar_63 = ((-(2.0) * rgbyM.w) + lumaNS); - edgeHorz1 = tmpvar_63; - highp float tmpvar_64; - tmpvar_64 = ((-(2.0) * rgbyM.w) + lumaWE); - edgeVert1 = tmpvar_64; - highp float tmpvar_65; - tmpvar_65 = (lumaNE + lumaSE); - lumaNESE = tmpvar_65; - highp float tmpvar_66; - tmpvar_66 = (lumaNW + lumaNE); - lumaNWNE = tmpvar_66; - highp float tmpvar_67; - tmpvar_67 = ((-(2.0) * lumaE) + lumaNESE); - edgeHorz2 = tmpvar_67; - highp float tmpvar_68; - tmpvar_68 = ((-(2.0) * lumaN) + lumaNWNE); - edgeVert2 = tmpvar_68; - highp float tmpvar_69; - tmpvar_69 = (lumaNW + lumaSW); - lumaNWSW = tmpvar_69; - highp float tmpvar_70; - tmpvar_70 = (lumaSW + lumaSE); - lumaSWSE = tmpvar_70; - highp float tmpvar_71; - tmpvar_71 = abs (edgeHorz1); - highp float tmpvar_72; - tmpvar_72 = abs (edgeHorz2); - highp float tmpvar_73; - tmpvar_73 = ((tmpvar_71 * 2.0) + tmpvar_72); - edgeHorz4 = tmpvar_73; - highp float tmpvar_74; - tmpvar_74 = abs (edgeVert1); - highp float tmpvar_75; - tmpvar_75 = abs (edgeVert2); - highp float tmpvar_76; - tmpvar_76 = ((tmpvar_74 * 2.0) + tmpvar_75); - edgeVert4 = tmpvar_76; - highp float tmpvar_77; - tmpvar_77 = ((-(2.0) * lumaW) + lumaNWSW); - edgeHorz3 = tmpvar_77; - highp float tmpvar_78; - tmpvar_78 = ((-(2.0) * lumaS) + lumaSWSE); - edgeVert3 = tmpvar_78; - highp float tmpvar_79; - tmpvar_79 = abs (edgeHorz3); - highp float tmpvar_80; - tmpvar_80 = (tmpvar_79 + edgeHorz4); - edgeHorz = tmpvar_80; - highp float tmpvar_81; - tmpvar_81 = abs (edgeVert3); - highp float tmpvar_82; - tmpvar_82 = (tmpvar_81 + edgeVert4); - edgeVert = tmpvar_82; - highp float tmpvar_83; - tmpvar_83 = (lumaNWSW + lumaNESE); - subpixNWSWNESE = tmpvar_83; - highp float tmpvar_84; - tmpvar_84 = fxaaQualityRcpFrame.x; - lengthSign = tmpvar_84; - bool tmpvar_85; - tmpvar_85 = (edgeHorz >= edgeVert); - horzSpan = tmpvar_85; - highp float tmpvar_86; - tmpvar_86 = ((subpixNSWE * 2.0) + subpixNWSWNESE); - subpixA = tmpvar_86; - if (!(horzSpan)) { - highp float tmpvar_87; - tmpvar_87 = lumaW; - lumaN = tmpvar_87; - }; - if (!(horzSpan)) { - highp float tmpvar_88; - tmpvar_88 = lumaE; - lumaS = tmpvar_88; - }; - if (horzSpan) { - highp float tmpvar_89; - tmpvar_89 = fxaaQualityRcpFrame.y; - lengthSign = tmpvar_89; - }; - highp float tmpvar_90; - tmpvar_90 = ((subpixA * 0.0833333) - rgbyM.w); - subpixB = tmpvar_90; - highp float tmpvar_91; - tmpvar_91 = (lumaN - rgbyM.w); - gradientN = tmpvar_91; - highp float tmpvar_92; - tmpvar_92 = (lumaS - rgbyM.w); - gradientS = tmpvar_92; - highp float tmpvar_93; - tmpvar_93 = (lumaN + rgbyM.w); - lumaNN = tmpvar_93; - highp float tmpvar_94; - tmpvar_94 = (lumaS + rgbyM.w); - lumaSS = tmpvar_94; - highp float tmpvar_95; - tmpvar_95 = abs (gradientN); - highp float tmpvar_96; - tmpvar_96 = abs (gradientS); - bool tmpvar_97; - tmpvar_97 = (tmpvar_95 >= tmpvar_96); - pairN = tmpvar_97; - highp float tmpvar_98; - tmpvar_98 = abs (gradientN); - highp float tmpvar_99; - tmpvar_99 = abs (gradientS); - highp float tmpvar_100; - tmpvar_100 = max (tmpvar_98, tmpvar_99); - highp float tmpvar_101; - tmpvar_101 = tmpvar_100; - gradient = tmpvar_101; - if (pairN) { - highp float tmpvar_102; - tmpvar_102 = -(lengthSign); - lengthSign = tmpvar_102; - }; - highp float tmpvar_103; - tmpvar_103 = abs (subpixB); - float tmpvar_104; - tmpvar_104 = xll_saturate ((tmpvar_103 * subpixRcpRange)); - float tmpvar_105; - tmpvar_105 = tmpvar_104; - subpixC = tmpvar_105; - highp float tmpvar_106; - tmpvar_106 = posM.x; - posB.x = tmpvar_106; - highp float tmpvar_107; - tmpvar_107 = posM.y; - posB.y = vec2(tmpvar_107).y; - highp float tmpvar_108; - if (!(horzSpan)) { - tmpvar_108 = 0.0; - } else { - tmpvar_108 = fxaaQualityRcpFrame.x; - }; - highp float tmpvar_109; - tmpvar_109 = tmpvar_108; - offNP.x = tmpvar_109; - highp float tmpvar_110; - if (horzSpan) { - tmpvar_110 = 0.0; - } else { - tmpvar_110 = fxaaQualityRcpFrame.y; - }; - highp float tmpvar_111; - tmpvar_111 = tmpvar_110; - offNP.y = vec2(tmpvar_111).y; - if (!(horzSpan)) { - highp float tmpvar_112; - tmpvar_112 = (posB.x + (lengthSign * 0.5)); - posB.x = tmpvar_112; - }; - if (horzSpan) { - highp float tmpvar_113; - tmpvar_113 = (posB.y + (lengthSign * 0.5)); - posB.y = vec2(tmpvar_113).y; - }; - highp float tmpvar_114; - tmpvar_114 = (posB.x - (offNP.x * 1.0)); - posN.x = tmpvar_114; - highp float tmpvar_115; - tmpvar_115 = (posB.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_115).y; - highp float tmpvar_116; - tmpvar_116 = (posB.x + (offNP.x * 1.0)); - posP.x = tmpvar_116; - highp float tmpvar_117; - tmpvar_117 = (posB.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_117).y; - highp float tmpvar_118; - tmpvar_118 = ((-(2.0) * subpixC) + 3.0); - subpixD = tmpvar_118; - highp vec4 tmpvar_119; - tmpvar_119.zw = vec2(0.0, 0.0); - tmpvar_119.xy = posN.xy; - vec4 tmpvar_120; - tmpvar_120 = xll_tex2Dlod (tex, tmpvar_119); - highp float tmpvar_121; - tmpvar_121 = FxaaLuma (tmpvar_120); - highp float tmpvar_122; - tmpvar_122 = tmpvar_121; - lumaEndN = tmpvar_122; - highp float tmpvar_123; - tmpvar_123 = (subpixC * subpixC); - subpixE = tmpvar_123; - highp vec4 tmpvar_124; - tmpvar_124.zw = vec2(0.0, 0.0); - tmpvar_124.xy = posP.xy; - vec4 tmpvar_125; - tmpvar_125 = xll_tex2Dlod (tex, tmpvar_124); - highp float tmpvar_126; - tmpvar_126 = FxaaLuma (tmpvar_125); - highp float tmpvar_127; - tmpvar_127 = tmpvar_126; - lumaEndP = tmpvar_127; - if (!(pairN)) { - highp float tmpvar_128; - tmpvar_128 = lumaSS; - lumaNN = tmpvar_128; - }; - highp float tmpvar_129; - tmpvar_129 = ((gradient * 1.0) / 4.0); - gradientScaled = tmpvar_129; - highp float tmpvar_130; - tmpvar_130 = (rgbyM.w - (lumaNN * 0.5)); - lumaMM = tmpvar_130; - highp float tmpvar_131; - tmpvar_131 = (subpixD * subpixE); - subpixF = tmpvar_131; - bool tmpvar_132; - tmpvar_132 = (lumaMM < 0.0); - lumaMLTZero = tmpvar_132; - highp float tmpvar_133; - tmpvar_133 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_133; - highp float tmpvar_134; - tmpvar_134 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_134; - highp float tmpvar_135; - tmpvar_135 = abs (lumaEndN); - bool tmpvar_136; - tmpvar_136 = (tmpvar_135 >= gradientScaled); - doneN = tmpvar_136; - highp float tmpvar_137; - tmpvar_137 = abs (lumaEndP); - bool tmpvar_138; - tmpvar_138 = (tmpvar_137 >= gradientScaled); - doneP = tmpvar_138; - if (!(doneN)) { - highp float tmpvar_139; - tmpvar_139 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_139; - }; - if (!(doneN)) { - highp float tmpvar_140; - tmpvar_140 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_140).y; - }; - bool tmpvar_141; - if (!(doneN)) { - tmpvar_141 = bool(1); - } else { - tmpvar_141 = !(doneP); - }; - bool tmpvar_142; - tmpvar_142 = tmpvar_141; - doneNP = tmpvar_142; - if (!(doneP)) { - highp float tmpvar_143; - tmpvar_143 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_143; - }; - if (!(doneP)) { - highp float tmpvar_144; - tmpvar_144 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_144).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_145; - tmpvar_145.zw = vec2(0.0, 0.0); - tmpvar_145.xy = posN.xy.xy; - vec4 tmpvar_146; - tmpvar_146 = xll_tex2Dlod (tex, tmpvar_145); - highp float tmpvar_147; - tmpvar_147 = FxaaLuma (tmpvar_146); - highp float tmpvar_148; - tmpvar_148 = tmpvar_147; - lumaEndN = tmpvar_148; - }; - if (!(doneP)) { - highp vec4 tmpvar_149; - tmpvar_149.zw = vec2(0.0, 0.0); - tmpvar_149.xy = posP.xy.xy; - vec4 tmpvar_150; - tmpvar_150 = xll_tex2Dlod (tex, tmpvar_149); - highp float tmpvar_151; - tmpvar_151 = FxaaLuma (tmpvar_150); - highp float tmpvar_152; - tmpvar_152 = tmpvar_151; - lumaEndP = tmpvar_152; - }; - if (!(doneN)) { - highp float tmpvar_153; - tmpvar_153 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_153; - }; - if (!(doneP)) { - highp float tmpvar_154; - tmpvar_154 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_154; - }; - highp float tmpvar_155; - tmpvar_155 = abs (lumaEndN); - bool tmpvar_156; - tmpvar_156 = (tmpvar_155 >= gradientScaled); - doneN = tmpvar_156; - highp float tmpvar_157; - tmpvar_157 = abs (lumaEndP); - bool tmpvar_158; - tmpvar_158 = (tmpvar_157 >= gradientScaled); - doneP = tmpvar_158; - if (!(doneN)) { - highp float tmpvar_159; - tmpvar_159 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_159; - }; - if (!(doneN)) { - highp float tmpvar_160; - tmpvar_160 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_160).y; - }; - bool tmpvar_161; - if (!(doneN)) { - tmpvar_161 = bool(1); - } else { - tmpvar_161 = !(doneP); - }; - bool tmpvar_162; - tmpvar_162 = tmpvar_161; - doneNP = tmpvar_162; - if (!(doneP)) { - highp float tmpvar_163; - tmpvar_163 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_163; - }; - if (!(doneP)) { - highp float tmpvar_164; - tmpvar_164 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_164).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_165; - tmpvar_165.zw = vec2(0.0, 0.0); - tmpvar_165.xy = posN.xy.xy; - vec4 tmpvar_166; - tmpvar_166 = xll_tex2Dlod (tex, tmpvar_165); - highp float tmpvar_167; - tmpvar_167 = FxaaLuma (tmpvar_166); - highp float tmpvar_168; - tmpvar_168 = tmpvar_167; - lumaEndN = tmpvar_168; - }; - if (!(doneP)) { - highp vec4 tmpvar_169; - tmpvar_169.zw = vec2(0.0, 0.0); - tmpvar_169.xy = posP.xy.xy; - vec4 tmpvar_170; - tmpvar_170 = xll_tex2Dlod (tex, tmpvar_169); - highp float tmpvar_171; - tmpvar_171 = FxaaLuma (tmpvar_170); - highp float tmpvar_172; - tmpvar_172 = tmpvar_171; - lumaEndP = tmpvar_172; - }; - if (!(doneN)) { - highp float tmpvar_173; - tmpvar_173 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_173; - }; - if (!(doneP)) { - highp float tmpvar_174; - tmpvar_174 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_174; - }; - highp float tmpvar_175; - tmpvar_175 = abs (lumaEndN); - bool tmpvar_176; - tmpvar_176 = (tmpvar_175 >= gradientScaled); - doneN = tmpvar_176; - highp float tmpvar_177; - tmpvar_177 = abs (lumaEndP); - bool tmpvar_178; - tmpvar_178 = (tmpvar_177 >= gradientScaled); - doneP = tmpvar_178; - if (!(doneN)) { - highp float tmpvar_179; - tmpvar_179 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_179; - }; - if (!(doneN)) { - highp float tmpvar_180; - tmpvar_180 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_180).y; - }; - bool tmpvar_181; - if (!(doneN)) { - tmpvar_181 = bool(1); - } else { - tmpvar_181 = !(doneP); - }; - bool tmpvar_182; - tmpvar_182 = tmpvar_181; - doneNP = tmpvar_182; - if (!(doneP)) { - highp float tmpvar_183; - tmpvar_183 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_183; - }; - if (!(doneP)) { - highp float tmpvar_184; - tmpvar_184 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_184).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_185; - tmpvar_185.zw = vec2(0.0, 0.0); - tmpvar_185.xy = posN.xy.xy; - vec4 tmpvar_186; - tmpvar_186 = xll_tex2Dlod (tex, tmpvar_185); - highp float tmpvar_187; - tmpvar_187 = FxaaLuma (tmpvar_186); - highp float tmpvar_188; - tmpvar_188 = tmpvar_187; - lumaEndN = tmpvar_188; - }; - if (!(doneP)) { - highp vec4 tmpvar_189; - tmpvar_189.zw = vec2(0.0, 0.0); - tmpvar_189.xy = posP.xy.xy; - vec4 tmpvar_190; - tmpvar_190 = xll_tex2Dlod (tex, tmpvar_189); - highp float tmpvar_191; - tmpvar_191 = FxaaLuma (tmpvar_190); - highp float tmpvar_192; - tmpvar_192 = tmpvar_191; - lumaEndP = tmpvar_192; - }; - if (!(doneN)) { - highp float tmpvar_193; - tmpvar_193 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_193; - }; - if (!(doneP)) { - highp float tmpvar_194; - tmpvar_194 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_194; - }; - highp float tmpvar_195; - tmpvar_195 = abs (lumaEndN); - bool tmpvar_196; - tmpvar_196 = (tmpvar_195 >= gradientScaled); - doneN = tmpvar_196; - highp float tmpvar_197; - tmpvar_197 = abs (lumaEndP); - bool tmpvar_198; - tmpvar_198 = (tmpvar_197 >= gradientScaled); - doneP = tmpvar_198; - if (!(doneN)) { - highp float tmpvar_199; - tmpvar_199 = (posN.x - (offNP.x * 1.0)); - posN.x = tmpvar_199; - }; - if (!(doneN)) { - highp float tmpvar_200; - tmpvar_200 = (posN.y - (offNP.y * 1.0)); - posN.y = vec2(tmpvar_200).y; - }; - bool tmpvar_201; - if (!(doneN)) { - tmpvar_201 = bool(1); - } else { - tmpvar_201 = !(doneP); - }; - bool tmpvar_202; - tmpvar_202 = tmpvar_201; - doneNP = tmpvar_202; - if (!(doneP)) { - highp float tmpvar_203; - tmpvar_203 = (posP.x + (offNP.x * 1.0)); - posP.x = tmpvar_203; - }; - if (!(doneP)) { - highp float tmpvar_204; - tmpvar_204 = (posP.y + (offNP.y * 1.0)); - posP.y = vec2(tmpvar_204).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_205; - tmpvar_205.zw = vec2(0.0, 0.0); - tmpvar_205.xy = posN.xy.xy; - vec4 tmpvar_206; - tmpvar_206 = xll_tex2Dlod (tex, tmpvar_205); - highp float tmpvar_207; - tmpvar_207 = FxaaLuma (tmpvar_206); - highp float tmpvar_208; - tmpvar_208 = tmpvar_207; - lumaEndN = tmpvar_208; - }; - if (!(doneP)) { - highp vec4 tmpvar_209; - tmpvar_209.zw = vec2(0.0, 0.0); - tmpvar_209.xy = posP.xy.xy; - vec4 tmpvar_210; - tmpvar_210 = xll_tex2Dlod (tex, tmpvar_209); - highp float tmpvar_211; - tmpvar_211 = FxaaLuma (tmpvar_210); - highp float tmpvar_212; - tmpvar_212 = tmpvar_211; - lumaEndP = tmpvar_212; - }; - if (!(doneN)) { - highp float tmpvar_213; - tmpvar_213 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_213; - }; - if (!(doneP)) { - highp float tmpvar_214; - tmpvar_214 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_214; - }; - highp float tmpvar_215; - tmpvar_215 = abs (lumaEndN); - bool tmpvar_216; - tmpvar_216 = (tmpvar_215 >= gradientScaled); - doneN = tmpvar_216; - highp float tmpvar_217; - tmpvar_217 = abs (lumaEndP); - bool tmpvar_218; - tmpvar_218 = (tmpvar_217 >= gradientScaled); - doneP = tmpvar_218; - if (!(doneN)) { - highp float tmpvar_219; - tmpvar_219 = (posN.x - (offNP.x * 1.5)); - posN.x = tmpvar_219; - }; - if (!(doneN)) { - highp float tmpvar_220; - tmpvar_220 = (posN.y - (offNP.y * 1.5)); - posN.y = vec2(tmpvar_220).y; - }; - bool tmpvar_221; - if (!(doneN)) { - tmpvar_221 = bool(1); - } else { - tmpvar_221 = !(doneP); - }; - bool tmpvar_222; - tmpvar_222 = tmpvar_221; - doneNP = tmpvar_222; - if (!(doneP)) { - highp float tmpvar_223; - tmpvar_223 = (posP.x + (offNP.x * 1.5)); - posP.x = tmpvar_223; - }; - if (!(doneP)) { - highp float tmpvar_224; - tmpvar_224 = (posP.y + (offNP.y * 1.5)); - posP.y = vec2(tmpvar_224).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_225; - tmpvar_225.zw = vec2(0.0, 0.0); - tmpvar_225.xy = posN.xy.xy; - vec4 tmpvar_226; - tmpvar_226 = xll_tex2Dlod (tex, tmpvar_225); - highp float tmpvar_227; - tmpvar_227 = FxaaLuma (tmpvar_226); - highp float tmpvar_228; - tmpvar_228 = tmpvar_227; - lumaEndN = tmpvar_228; - }; - if (!(doneP)) { - highp vec4 tmpvar_229; - tmpvar_229.zw = vec2(0.0, 0.0); - tmpvar_229.xy = posP.xy.xy; - vec4 tmpvar_230; - tmpvar_230 = xll_tex2Dlod (tex, tmpvar_229); - highp float tmpvar_231; - tmpvar_231 = FxaaLuma (tmpvar_230); - highp float tmpvar_232; - tmpvar_232 = tmpvar_231; - lumaEndP = tmpvar_232; - }; - if (!(doneN)) { - highp float tmpvar_233; - tmpvar_233 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_233; - }; - if (!(doneP)) { - highp float tmpvar_234; - tmpvar_234 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_234; - }; - highp float tmpvar_235; - tmpvar_235 = abs (lumaEndN); - bool tmpvar_236; - tmpvar_236 = (tmpvar_235 >= gradientScaled); - doneN = tmpvar_236; - highp float tmpvar_237; - tmpvar_237 = abs (lumaEndP); - bool tmpvar_238; - tmpvar_238 = (tmpvar_237 >= gradientScaled); - doneP = tmpvar_238; - if (!(doneN)) { - highp float tmpvar_239; - tmpvar_239 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_239; - }; - if (!(doneN)) { - highp float tmpvar_240; - tmpvar_240 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_240).y; - }; - bool tmpvar_241; - if (!(doneN)) { - tmpvar_241 = bool(1); - } else { - tmpvar_241 = !(doneP); - }; - bool tmpvar_242; - tmpvar_242 = tmpvar_241; - doneNP = tmpvar_242; - if (!(doneP)) { - highp float tmpvar_243; - tmpvar_243 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_243; - }; - if (!(doneP)) { - highp float tmpvar_244; - tmpvar_244 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_244).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_245; - tmpvar_245.zw = vec2(0.0, 0.0); - tmpvar_245.xy = posN.xy.xy; - vec4 tmpvar_246; - tmpvar_246 = xll_tex2Dlod (tex, tmpvar_245); - highp float tmpvar_247; - tmpvar_247 = FxaaLuma (tmpvar_246); - highp float tmpvar_248; - tmpvar_248 = tmpvar_247; - lumaEndN = tmpvar_248; - }; - if (!(doneP)) { - highp vec4 tmpvar_249; - tmpvar_249.zw = vec2(0.0, 0.0); - tmpvar_249.xy = posP.xy.xy; - vec4 tmpvar_250; - tmpvar_250 = xll_tex2Dlod (tex, tmpvar_249); - highp float tmpvar_251; - tmpvar_251 = FxaaLuma (tmpvar_250); - highp float tmpvar_252; - tmpvar_252 = tmpvar_251; - lumaEndP = tmpvar_252; - }; - if (!(doneN)) { - highp float tmpvar_253; - tmpvar_253 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_253; - }; - if (!(doneP)) { - highp float tmpvar_254; - tmpvar_254 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_254; - }; - highp float tmpvar_255; - tmpvar_255 = abs (lumaEndN); - bool tmpvar_256; - tmpvar_256 = (tmpvar_255 >= gradientScaled); - doneN = tmpvar_256; - highp float tmpvar_257; - tmpvar_257 = abs (lumaEndP); - bool tmpvar_258; - tmpvar_258 = (tmpvar_257 >= gradientScaled); - doneP = tmpvar_258; - if (!(doneN)) { - highp float tmpvar_259; - tmpvar_259 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_259; - }; - if (!(doneN)) { - highp float tmpvar_260; - tmpvar_260 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_260).y; - }; - bool tmpvar_261; - if (!(doneN)) { - tmpvar_261 = bool(1); - } else { - tmpvar_261 = !(doneP); - }; - bool tmpvar_262; - tmpvar_262 = tmpvar_261; - doneNP = tmpvar_262; - if (!(doneP)) { - highp float tmpvar_263; - tmpvar_263 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_263; - }; - if (!(doneP)) { - highp float tmpvar_264; - tmpvar_264 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_264).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_265; - tmpvar_265.zw = vec2(0.0, 0.0); - tmpvar_265.xy = posN.xy.xy; - vec4 tmpvar_266; - tmpvar_266 = xll_tex2Dlod (tex, tmpvar_265); - highp float tmpvar_267; - tmpvar_267 = FxaaLuma (tmpvar_266); - highp float tmpvar_268; - tmpvar_268 = tmpvar_267; - lumaEndN = tmpvar_268; - }; - if (!(doneP)) { - highp vec4 tmpvar_269; - tmpvar_269.zw = vec2(0.0, 0.0); - tmpvar_269.xy = posP.xy.xy; - vec4 tmpvar_270; - tmpvar_270 = xll_tex2Dlod (tex, tmpvar_269); - highp float tmpvar_271; - tmpvar_271 = FxaaLuma (tmpvar_270); - highp float tmpvar_272; - tmpvar_272 = tmpvar_271; - lumaEndP = tmpvar_272; - }; - if (!(doneN)) { - highp float tmpvar_273; - tmpvar_273 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_273; - }; - if (!(doneP)) { - highp float tmpvar_274; - tmpvar_274 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_274; - }; - highp float tmpvar_275; - tmpvar_275 = abs (lumaEndN); - bool tmpvar_276; - tmpvar_276 = (tmpvar_275 >= gradientScaled); - doneN = tmpvar_276; - highp float tmpvar_277; - tmpvar_277 = abs (lumaEndP); - bool tmpvar_278; - tmpvar_278 = (tmpvar_277 >= gradientScaled); - doneP = tmpvar_278; - if (!(doneN)) { - highp float tmpvar_279; - tmpvar_279 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_279; - }; - if (!(doneN)) { - highp float tmpvar_280; - tmpvar_280 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_280).y; - }; - bool tmpvar_281; - if (!(doneN)) { - tmpvar_281 = bool(1); - } else { - tmpvar_281 = !(doneP); - }; - bool tmpvar_282; - tmpvar_282 = tmpvar_281; - doneNP = tmpvar_282; - if (!(doneP)) { - highp float tmpvar_283; - tmpvar_283 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_283; - }; - if (!(doneP)) { - highp float tmpvar_284; - tmpvar_284 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_284).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_285; - tmpvar_285.zw = vec2(0.0, 0.0); - tmpvar_285.xy = posN.xy.xy; - vec4 tmpvar_286; - tmpvar_286 = xll_tex2Dlod (tex, tmpvar_285); - highp float tmpvar_287; - tmpvar_287 = FxaaLuma (tmpvar_286); - highp float tmpvar_288; - tmpvar_288 = tmpvar_287; - lumaEndN = tmpvar_288; - }; - if (!(doneP)) { - highp vec4 tmpvar_289; - tmpvar_289.zw = vec2(0.0, 0.0); - tmpvar_289.xy = posP.xy.xy; - vec4 tmpvar_290; - tmpvar_290 = xll_tex2Dlod (tex, tmpvar_289); - highp float tmpvar_291; - tmpvar_291 = FxaaLuma (tmpvar_290); - highp float tmpvar_292; - tmpvar_292 = tmpvar_291; - lumaEndP = tmpvar_292; - }; - if (!(doneN)) { - highp float tmpvar_293; - tmpvar_293 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_293; - }; - if (!(doneP)) { - highp float tmpvar_294; - tmpvar_294 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_294; - }; - highp float tmpvar_295; - tmpvar_295 = abs (lumaEndN); - bool tmpvar_296; - tmpvar_296 = (tmpvar_295 >= gradientScaled); - doneN = tmpvar_296; - highp float tmpvar_297; - tmpvar_297 = abs (lumaEndP); - bool tmpvar_298; - tmpvar_298 = (tmpvar_297 >= gradientScaled); - doneP = tmpvar_298; - if (!(doneN)) { - highp float tmpvar_299; - tmpvar_299 = (posN.x - (offNP.x * 2.0)); - posN.x = tmpvar_299; - }; - if (!(doneN)) { - highp float tmpvar_300; - tmpvar_300 = (posN.y - (offNP.y * 2.0)); - posN.y = vec2(tmpvar_300).y; - }; - bool tmpvar_301; - if (!(doneN)) { - tmpvar_301 = bool(1); - } else { - tmpvar_301 = !(doneP); - }; - bool tmpvar_302; - tmpvar_302 = tmpvar_301; - doneNP = tmpvar_302; - if (!(doneP)) { - highp float tmpvar_303; - tmpvar_303 = (posP.x + (offNP.x * 2.0)); - posP.x = tmpvar_303; - }; - if (!(doneP)) { - highp float tmpvar_304; - tmpvar_304 = (posP.y + (offNP.y * 2.0)); - posP.y = vec2(tmpvar_304).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_305; - tmpvar_305.zw = vec2(0.0, 0.0); - tmpvar_305.xy = posN.xy.xy; - vec4 tmpvar_306; - tmpvar_306 = xll_tex2Dlod (tex, tmpvar_305); - highp float tmpvar_307; - tmpvar_307 = FxaaLuma (tmpvar_306); - highp float tmpvar_308; - tmpvar_308 = tmpvar_307; - lumaEndN = tmpvar_308; - }; - if (!(doneP)) { - highp vec4 tmpvar_309; - tmpvar_309.zw = vec2(0.0, 0.0); - tmpvar_309.xy = posP.xy.xy; - vec4 tmpvar_310; - tmpvar_310 = xll_tex2Dlod (tex, tmpvar_309); - highp float tmpvar_311; - tmpvar_311 = FxaaLuma (tmpvar_310); - highp float tmpvar_312; - tmpvar_312 = tmpvar_311; - lumaEndP = tmpvar_312; - }; - if (!(doneN)) { - highp float tmpvar_313; - tmpvar_313 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_313; - }; - if (!(doneP)) { - highp float tmpvar_314; - tmpvar_314 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_314; - }; - highp float tmpvar_315; - tmpvar_315 = abs (lumaEndN); - bool tmpvar_316; - tmpvar_316 = (tmpvar_315 >= gradientScaled); - doneN = tmpvar_316; - highp float tmpvar_317; - tmpvar_317 = abs (lumaEndP); - bool tmpvar_318; - tmpvar_318 = (tmpvar_317 >= gradientScaled); - doneP = tmpvar_318; - if (!(doneN)) { - highp float tmpvar_319; - tmpvar_319 = (posN.x - (offNP.x * 4.0)); - posN.x = tmpvar_319; - }; - if (!(doneN)) { - highp float tmpvar_320; - tmpvar_320 = (posN.y - (offNP.y * 4.0)); - posN.y = vec2(tmpvar_320).y; - }; - bool tmpvar_321; - if (!(doneN)) { - tmpvar_321 = bool(1); - } else { - tmpvar_321 = !(doneP); - }; - bool tmpvar_322; - tmpvar_322 = tmpvar_321; - doneNP = tmpvar_322; - if (!(doneP)) { - highp float tmpvar_323; - tmpvar_323 = (posP.x + (offNP.x * 4.0)); - posP.x = tmpvar_323; - }; - if (!(doneP)) { - highp float tmpvar_324; - tmpvar_324 = (posP.y + (offNP.y * 4.0)); - posP.y = vec2(tmpvar_324).y; - }; - if (doneNP) { - if (!(doneN)) { - highp vec4 tmpvar_325; - tmpvar_325.zw = vec2(0.0, 0.0); - tmpvar_325.xy = posN.xy.xy; - vec4 tmpvar_326; - tmpvar_326 = xll_tex2Dlod (tex, tmpvar_325); - highp float tmpvar_327; - tmpvar_327 = FxaaLuma (tmpvar_326); - highp float tmpvar_328; - tmpvar_328 = tmpvar_327; - lumaEndN = tmpvar_328; - }; - if (!(doneP)) { - highp vec4 tmpvar_329; - tmpvar_329.zw = vec2(0.0, 0.0); - tmpvar_329.xy = posP.xy.xy; - vec4 tmpvar_330; - tmpvar_330 = xll_tex2Dlod (tex, tmpvar_329); - highp float tmpvar_331; - tmpvar_331 = FxaaLuma (tmpvar_330); - highp float tmpvar_332; - tmpvar_332 = tmpvar_331; - lumaEndP = tmpvar_332; - }; - if (!(doneN)) { - highp float tmpvar_333; - tmpvar_333 = (lumaEndN - (lumaNN * 0.5)); - lumaEndN = tmpvar_333; - }; - if (!(doneP)) { - highp float tmpvar_334; - tmpvar_334 = (lumaEndP - (lumaNN * 0.5)); - lumaEndP = tmpvar_334; - }; - highp float tmpvar_335; - tmpvar_335 = abs (lumaEndN); - bool tmpvar_336; - tmpvar_336 = (tmpvar_335 >= gradientScaled); - doneN = tmpvar_336; - highp float tmpvar_337; - tmpvar_337 = abs (lumaEndP); - bool tmpvar_338; - tmpvar_338 = (tmpvar_337 >= gradientScaled); - doneP = tmpvar_338; - if (!(doneN)) { - highp float tmpvar_339; - tmpvar_339 = (posN.x - (offNP.x * 8.0)); - posN.x = tmpvar_339; - }; - if (!(doneN)) { - highp float tmpvar_340; - tmpvar_340 = (posN.y - (offNP.y * 8.0)); - posN.y = vec2(tmpvar_340).y; - }; - bool tmpvar_341; - if (!(doneN)) { - tmpvar_341 = bool(1); - } else { - tmpvar_341 = !(doneP); - }; - bool tmpvar_342; - tmpvar_342 = tmpvar_341; - doneNP = tmpvar_342; - if (!(doneP)) { - highp float tmpvar_343; - tmpvar_343 = (posP.x + (offNP.x * 8.0)); - posP.x = tmpvar_343; - }; - if (!(doneP)) { - highp float tmpvar_344; - tmpvar_344 = (posP.y + (offNP.y * 8.0)); - posP.y = vec2(tmpvar_344).y; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - highp float tmpvar_345; - tmpvar_345 = (posM.x - posN.x); - dstN = tmpvar_345; - highp float tmpvar_346; - tmpvar_346 = (posP.x - posM.x); - dstP = tmpvar_346; - if (!(horzSpan)) { - highp float tmpvar_347; - tmpvar_347 = (posM.y - posN.y); - dstN = tmpvar_347; - }; - if (!(horzSpan)) { - highp float tmpvar_348; - tmpvar_348 = (posP.y - posM.y); - dstP = tmpvar_348; - }; - bool tmpvar_349; - tmpvar_349 = ((lumaEndN < 0.0) != lumaMLTZero); - goodSpanN = tmpvar_349; - highp float tmpvar_350; - tmpvar_350 = (dstP + dstN); - spanLength = tmpvar_350; - bool tmpvar_351; - tmpvar_351 = ((lumaEndP < 0.0) != lumaMLTZero); - goodSpanP = tmpvar_351; - highp float tmpvar_352; - tmpvar_352 = (1.0 / spanLength); - spanLengthRcp = tmpvar_352; - bool tmpvar_353; - tmpvar_353 = (dstN < dstP); - directionN = tmpvar_353; - highp float tmpvar_354; - tmpvar_354 = min (dstN, dstP); - highp float tmpvar_355; - tmpvar_355 = tmpvar_354; - dst = tmpvar_355; - bool tmpvar_356; - if (directionN) { - tmpvar_356 = goodSpanN; - } else { - tmpvar_356 = goodSpanP; - }; - bool tmpvar_357; - tmpvar_357 = tmpvar_356; - goodSpan = tmpvar_357; - highp float tmpvar_358; - tmpvar_358 = (subpixF * subpixF); - subpixG = tmpvar_358; - highp float tmpvar_359; - tmpvar_359 = ((dst * -(spanLengthRcp)) + 0.5); - pixelOffset = tmpvar_359; - highp float tmpvar_360; - tmpvar_360 = (subpixG * fxaaQualitySubpix); - subpixH = tmpvar_360; - highp float tmpvar_361; - if (goodSpan) { - tmpvar_361 = pixelOffset; - } else { - tmpvar_361 = 0.0; - }; - highp float tmpvar_362; - tmpvar_362 = tmpvar_361; - pixelOffsetGood = tmpvar_362; - highp float tmpvar_363; - tmpvar_363 = max (pixelOffsetGood, subpixH); - highp float tmpvar_364; - tmpvar_364 = tmpvar_363; - pixelOffsetSubpix = tmpvar_364; - if (!(horzSpan)) { - highp float tmpvar_365; - tmpvar_365 = (posM.x + (pixelOffsetSubpix * lengthSign)); - posM.x = tmpvar_365; - }; - if (horzSpan) { - highp float tmpvar_366; - tmpvar_366 = (posM.y + (pixelOffsetSubpix * lengthSign)); - posM.y = vec2(tmpvar_366).y; - }; - highp vec4 tmpvar_367; - tmpvar_367.zw = vec2(0.0, 0.0); - tmpvar_367.xy = posM.xy; - vec4 tmpvar_368; - tmpvar_368 = xll_tex2Dlod (tex, tmpvar_367); - highp vec4 tmpvar_369; - tmpvar_369.xyz = tmpvar_368.xyz.xyz; - tmpvar_369.w = rgbyM.w; - return tmpvar_369; -} - -vec4 xlat_main ( - in v2f i -) -{ - highp float fxaaN; - float tmpvar_1; - tmpvar_1 = 0.5; - fxaaN = tmpvar_1; - highp vec4 tmpvar_2; - tmpvar_2.x = -(fxaaN); - tmpvar_2.y = -(fxaaN); - tmpvar_2.z = fxaaN; - tmpvar_2.w = fxaaN; - highp vec4 tmpvar_3; - tmpvar_3 = FxaaPixelShader (i.uv, i.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_2), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - highp vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_SV_POSITION.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_i.pos = tmpvar_2; - highp vec2 tmpvar_3; - tmpvar_3 = xlv_TEXCOORD0.xy; - highp vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.uv = tmpvar_4; - highp vec4 tmpvar_5; - tmpvar_5 = xlv_TEXCOORD1.xyzw; - highp vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_i.uvPosPos = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7 = xlat_main (xlt_i); - highp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - highp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-out.txt deleted file mode 100644 index 19d2f3130..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-out.txt +++ /dev/null @@ -1,669 +0,0 @@ -#extension GL_ARB_shader_texture_lod : enable -varying vec2 xlv_TEXCOORD0; -uniform vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -void main () -{ - vec4 tmpvar_1; - float dstP; - float dstN; - float lumaEndP; - float lumaEndN; - vec2 posP; - vec2 posN; - vec2 posB; - float lumaNN; - float lengthSign; - float lumaN; - float lumaS; - vec2 posM; - posM.x = xlv_TEXCOORD0.x; - posM.y = xlv_TEXCOORD0.y; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = posM; - vec4 tmpvar_3; - tmpvar_3 = texture2DLod (_MainTex, tmpvar_2.xy, 0.0); - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_5; - tmpvar_5 = texture2DLod (_MainTex, tmpvar_4.xy, 0.0); - float tmpvar_6; - tmpvar_6 = tmpvar_5.w; - lumaS = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_8; - tmpvar_8 = texture2DLod (_MainTex, tmpvar_7.xy, 0.0); - float tmpvar_9; - tmpvar_9 = tmpvar_8.w; - vec4 tmpvar_10; - tmpvar_10.zw = vec2(0.0, 0.0); - tmpvar_10.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_11; - tmpvar_11 = texture2DLod (_MainTex, tmpvar_10.xy, 0.0); - float tmpvar_12; - tmpvar_12 = tmpvar_11.w; - lumaN = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_14; - tmpvar_14 = texture2DLod (_MainTex, tmpvar_13.xy, 0.0); - float tmpvar_15; - tmpvar_15 = tmpvar_14.w; - float tmpvar_16; - tmpvar_16 = max (max (tmpvar_12, tmpvar_15), max (tmpvar_9, max (tmpvar_6, tmpvar_3.w))); - float tmpvar_17; - tmpvar_17 = (tmpvar_16 - min (min (tmpvar_12, tmpvar_15), min (tmpvar_9, min (tmpvar_6, tmpvar_3.w)))); - if ((tmpvar_17 < max (0.0833, (tmpvar_16 * 0.166)))) { - tmpvar_1 = tmpvar_3; - } else { - vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_19; - tmpvar_19 = texture2DLod (_MainTex, tmpvar_18.xy, 0.0); - vec4 tmpvar_20; - tmpvar_20.zw = vec2(0.0, 0.0); - tmpvar_20.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); - vec4 tmpvar_21; - tmpvar_21 = texture2DLod (_MainTex, tmpvar_20.xy, 0.0); - vec4 tmpvar_22; - tmpvar_22.zw = vec2(0.0, 0.0); - tmpvar_22.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_23; - tmpvar_23 = texture2DLod (_MainTex, tmpvar_22.xy, 0.0); - vec4 tmpvar_24; - tmpvar_24.zw = vec2(0.0, 0.0); - tmpvar_24.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); - vec4 tmpvar_25; - tmpvar_25 = texture2DLod (_MainTex, tmpvar_24.xy, 0.0); - float tmpvar_26; - tmpvar_26 = (tmpvar_11.w + tmpvar_5.w); - float tmpvar_27; - tmpvar_27 = (tmpvar_14.w + tmpvar_8.w); - float tmpvar_28; - tmpvar_28 = (1.0/(tmpvar_17)); - float tmpvar_29; - tmpvar_29 = (tmpvar_23.w + tmpvar_21.w); - float tmpvar_30; - tmpvar_30 = (tmpvar_19.w + tmpvar_25.w); - lengthSign = _MainTex_TexelSize.x; - bool tmpvar_31; - tmpvar_31 = ((abs (((-(2.0) * tmpvar_14.w) + tmpvar_30)) + ((abs (((-(2.0) * tmpvar_3.w) + tmpvar_26)) * 2.0) + abs (((-(2.0) * tmpvar_8.w) + tmpvar_29)))) >= (abs (((-(2.0) * tmpvar_5.w) + (tmpvar_25.w + tmpvar_21.w))) + ((abs (((-(2.0) * tmpvar_3.w) + tmpvar_27)) * 2.0) + abs (((-(2.0) * tmpvar_11.w) + (tmpvar_19.w + tmpvar_23.w)))))); - float tmpvar_32; - tmpvar_32 = (((tmpvar_26 + tmpvar_27) * 2.0) + (tmpvar_30 + tmpvar_29)); - if (!(tmpvar_31)) { - lumaN = tmpvar_15; - }; - if (!(tmpvar_31)) { - lumaS = tmpvar_9; - }; - if (tmpvar_31) { - lengthSign = _MainTex_TexelSize.y; - }; - float tmpvar_33; - tmpvar_33 = ((tmpvar_32 * 0.0833333) - tmpvar_3.w); - float tmpvar_34; - tmpvar_34 = (lumaN - tmpvar_3.w); - float tmpvar_35; - tmpvar_35 = (lumaS - tmpvar_3.w); - lumaNN = (lumaN + tmpvar_3.w); - float tmpvar_36; - tmpvar_36 = (lumaS + tmpvar_3.w); - bool tmpvar_37; - tmpvar_37 = (abs (tmpvar_34) >= abs (tmpvar_35)); - float tmpvar_38; - tmpvar_38 = max (abs (tmpvar_34), abs (tmpvar_35)); - if (tmpvar_37) { - lengthSign = -(lengthSign); - }; - float tmpvar_39; - tmpvar_39 = clamp ((abs (tmpvar_33) * tmpvar_28), 0.0, 1.0); - posB.x = xlv_TEXCOORD0.x; - posB.y = xlv_TEXCOORD0.y; - float tmpvar_40; - if (!(tmpvar_31)) { - tmpvar_40 = 0.0; - } else { - tmpvar_40 = _MainTex_TexelSize.x; - }; - float tmpvar_41; - if (tmpvar_31) { - tmpvar_41 = 0.0; - } else { - tmpvar_41 = _MainTex_TexelSize.y; - }; - if (!(tmpvar_31)) { - posB.x = (xlv_TEXCOORD0.x + (lengthSign * 0.5)); - }; - if (tmpvar_31) { - posB.y = (xlv_TEXCOORD0.y + (lengthSign * 0.5)); - }; - posN.x = (posB.x - tmpvar_40); - posN.y = (posB.y - tmpvar_41); - posP.x = (posB.x + tmpvar_40); - posP.y = (posB.y + tmpvar_41); - float tmpvar_42; - tmpvar_42 = ((-2.0 * tmpvar_39) + 3.0); - vec4 tmpvar_43; - tmpvar_43.zw = vec2(0.0, 0.0); - tmpvar_43.xy = posN; - vec4 tmpvar_44; - tmpvar_44 = texture2DLod (_MainTex, tmpvar_43.xy, 0.0); - lumaEndN = tmpvar_44.w; - float tmpvar_45; - tmpvar_45 = (tmpvar_39 * tmpvar_39); - vec4 tmpvar_46; - tmpvar_46.zw = vec2(0.0, 0.0); - tmpvar_46.xy = posP; - vec4 tmpvar_47; - tmpvar_47 = texture2DLod (_MainTex, tmpvar_46.xy, 0.0); - lumaEndP = tmpvar_47.w; - if (!(tmpvar_37)) { - lumaNN = tmpvar_36; - }; - float tmpvar_48; - tmpvar_48 = (tmpvar_38 / 4.0); - float tmpvar_49; - tmpvar_49 = (tmpvar_42 * tmpvar_45); - bool tmpvar_50; - tmpvar_50 = ((tmpvar_3.w - (lumaNN * 0.5)) < 0.0); - float tmpvar_51; - tmpvar_51 = (tmpvar_44.w - (lumaNN * 0.5)); - lumaEndN = tmpvar_51; - float tmpvar_52; - tmpvar_52 = (tmpvar_47.w - (lumaNN * 0.5)); - lumaEndP = tmpvar_52; - bool tmpvar_53; - tmpvar_53 = (abs (tmpvar_51) >= tmpvar_48); - bool tmpvar_54; - tmpvar_54 = (abs (tmpvar_52) >= tmpvar_48); - if (!(tmpvar_53)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_53)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_55; - if (!(tmpvar_53)) { - tmpvar_55 = bool(1); - } else { - tmpvar_55 = !(tmpvar_54); - }; - if (!(tmpvar_54)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_54)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_55) { - if (!(tmpvar_53)) { - vec4 tmpvar_56; - tmpvar_56.zw = vec2(0.0, 0.0); - tmpvar_56.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_56.xy, 0.0).w; - }; - if (!(tmpvar_54)) { - vec4 tmpvar_57; - tmpvar_57.zw = vec2(0.0, 0.0); - tmpvar_57.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_57.xy, 0.0).w; - }; - if (!(tmpvar_53)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_54)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_58; - tmpvar_58 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_59; - tmpvar_59 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_58)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_58)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_60; - if (!(tmpvar_58)) { - tmpvar_60 = bool(1); - } else { - tmpvar_60 = !(tmpvar_59); - }; - if (!(tmpvar_59)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_59)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_60) { - if (!(tmpvar_58)) { - vec4 tmpvar_61; - tmpvar_61.zw = vec2(0.0, 0.0); - tmpvar_61.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_61.xy, 0.0).w; - }; - if (!(tmpvar_59)) { - vec4 tmpvar_62; - tmpvar_62.zw = vec2(0.0, 0.0); - tmpvar_62.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_62.xy, 0.0).w; - }; - if (!(tmpvar_58)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_59)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_63; - tmpvar_63 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_64; - tmpvar_64 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_63)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_63)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_65; - if (!(tmpvar_63)) { - tmpvar_65 = bool(1); - } else { - tmpvar_65 = !(tmpvar_64); - }; - if (!(tmpvar_64)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_64)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_65) { - if (!(tmpvar_63)) { - vec4 tmpvar_66; - tmpvar_66.zw = vec2(0.0, 0.0); - tmpvar_66.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_66.xy, 0.0).w; - }; - if (!(tmpvar_64)) { - vec4 tmpvar_67; - tmpvar_67.zw = vec2(0.0, 0.0); - tmpvar_67.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_67.xy, 0.0).w; - }; - if (!(tmpvar_63)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_64)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_68; - tmpvar_68 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_69; - tmpvar_69 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_68)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_68)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_70; - if (!(tmpvar_68)) { - tmpvar_70 = bool(1); - } else { - tmpvar_70 = !(tmpvar_69); - }; - if (!(tmpvar_69)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_69)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_70) { - if (!(tmpvar_68)) { - vec4 tmpvar_71; - tmpvar_71.zw = vec2(0.0, 0.0); - tmpvar_71.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_71.xy, 0.0).w; - }; - if (!(tmpvar_69)) { - vec4 tmpvar_72; - tmpvar_72.zw = vec2(0.0, 0.0); - tmpvar_72.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_72.xy, 0.0).w; - }; - if (!(tmpvar_68)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_69)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_73; - tmpvar_73 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_74; - tmpvar_74 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_73)) { - posN.x = (posN.x - (tmpvar_40 * 1.5)); - }; - if (!(tmpvar_73)) { - posN.y = (posN.y - (tmpvar_41 * 1.5)); - }; - bool tmpvar_75; - if (!(tmpvar_73)) { - tmpvar_75 = bool(1); - } else { - tmpvar_75 = !(tmpvar_74); - }; - if (!(tmpvar_74)) { - posP.x = (posP.x + (tmpvar_40 * 1.5)); - }; - if (!(tmpvar_74)) { - posP.y = (posP.y + (tmpvar_41 * 1.5)); - }; - if (tmpvar_75) { - if (!(tmpvar_73)) { - vec4 tmpvar_76; - tmpvar_76.zw = vec2(0.0, 0.0); - tmpvar_76.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_76.xy, 0.0).w; - }; - if (!(tmpvar_74)) { - vec4 tmpvar_77; - tmpvar_77.zw = vec2(0.0, 0.0); - tmpvar_77.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_77.xy, 0.0).w; - }; - if (!(tmpvar_73)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_74)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_78; - tmpvar_78 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_79; - tmpvar_79 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_78)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_78)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_80; - if (!(tmpvar_78)) { - tmpvar_80 = bool(1); - } else { - tmpvar_80 = !(tmpvar_79); - }; - if (!(tmpvar_79)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_79)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_80) { - if (!(tmpvar_78)) { - vec4 tmpvar_81; - tmpvar_81.zw = vec2(0.0, 0.0); - tmpvar_81.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_81.xy, 0.0).w; - }; - if (!(tmpvar_79)) { - vec4 tmpvar_82; - tmpvar_82.zw = vec2(0.0, 0.0); - tmpvar_82.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_82.xy, 0.0).w; - }; - if (!(tmpvar_78)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_79)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_83; - tmpvar_83 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_84; - tmpvar_84 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_83)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_83)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_85; - if (!(tmpvar_83)) { - tmpvar_85 = bool(1); - } else { - tmpvar_85 = !(tmpvar_84); - }; - if (!(tmpvar_84)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_84)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_85) { - if (!(tmpvar_83)) { - vec4 tmpvar_86; - tmpvar_86.zw = vec2(0.0, 0.0); - tmpvar_86.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_86.xy, 0.0).w; - }; - if (!(tmpvar_84)) { - vec4 tmpvar_87; - tmpvar_87.zw = vec2(0.0, 0.0); - tmpvar_87.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_87.xy, 0.0).w; - }; - if (!(tmpvar_83)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_84)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_88; - tmpvar_88 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_89; - tmpvar_89 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_88)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_88)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_90; - if (!(tmpvar_88)) { - tmpvar_90 = bool(1); - } else { - tmpvar_90 = !(tmpvar_89); - }; - if (!(tmpvar_89)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_89)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_90) { - if (!(tmpvar_88)) { - vec4 tmpvar_91; - tmpvar_91.zw = vec2(0.0, 0.0); - tmpvar_91.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_91.xy, 0.0).w; - }; - if (!(tmpvar_89)) { - vec4 tmpvar_92; - tmpvar_92.zw = vec2(0.0, 0.0); - tmpvar_92.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_92.xy, 0.0).w; - }; - if (!(tmpvar_88)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_89)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_93; - tmpvar_93 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_94; - tmpvar_94 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_93)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_93)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_95; - if (!(tmpvar_93)) { - tmpvar_95 = bool(1); - } else { - tmpvar_95 = !(tmpvar_94); - }; - if (!(tmpvar_94)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_94)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_95) { - if (!(tmpvar_93)) { - vec4 tmpvar_96; - tmpvar_96.zw = vec2(0.0, 0.0); - tmpvar_96.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_96.xy, 0.0).w; - }; - if (!(tmpvar_94)) { - vec4 tmpvar_97; - tmpvar_97.zw = vec2(0.0, 0.0); - tmpvar_97.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_97.xy, 0.0).w; - }; - if (!(tmpvar_93)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_94)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_98; - tmpvar_98 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_99; - tmpvar_99 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_98)) { - posN.x = (posN.x - (tmpvar_40 * 4.0)); - }; - if (!(tmpvar_98)) { - posN.y = (posN.y - (tmpvar_41 * 4.0)); - }; - bool tmpvar_100; - if (!(tmpvar_98)) { - tmpvar_100 = bool(1); - } else { - tmpvar_100 = !(tmpvar_99); - }; - if (!(tmpvar_99)) { - posP.x = (posP.x + (tmpvar_40 * 4.0)); - }; - if (!(tmpvar_99)) { - posP.y = (posP.y + (tmpvar_41 * 4.0)); - }; - if (tmpvar_100) { - if (!(tmpvar_98)) { - vec4 tmpvar_101; - tmpvar_101.zw = vec2(0.0, 0.0); - tmpvar_101.xy = posN; - lumaEndN = texture2DLod (_MainTex, tmpvar_101.xy, 0.0).w; - }; - if (!(tmpvar_99)) { - vec4 tmpvar_102; - tmpvar_102.zw = vec2(0.0, 0.0); - tmpvar_102.xy = posP; - lumaEndP = texture2DLod (_MainTex, tmpvar_102.xy, 0.0).w; - }; - if (!(tmpvar_98)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_99)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_103; - tmpvar_103 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_104; - tmpvar_104 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_103)) { - posN.x = (posN.x - (tmpvar_40 * 8.0)); - }; - if (!(tmpvar_103)) { - posN.y = (posN.y - (tmpvar_41 * 8.0)); - }; - if (!(tmpvar_103)) { - }; - if (!(tmpvar_104)) { - posP.x = (posP.x + (tmpvar_40 * 8.0)); - }; - if (!(tmpvar_104)) { - posP.y = (posP.y + (tmpvar_41 * 8.0)); - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - dstN = (xlv_TEXCOORD0.x - posN.x); - dstP = (posP.x - xlv_TEXCOORD0.x); - if (!(tmpvar_31)) { - dstN = (xlv_TEXCOORD0.y - posN.y); - }; - if (!(tmpvar_31)) { - dstP = (posP.y - xlv_TEXCOORD0.y); - }; - bool tmpvar_105; - tmpvar_105 = ((lumaEndN < 0.0) != tmpvar_50); - bool tmpvar_106; - tmpvar_106 = ((lumaEndP < 0.0) != tmpvar_50); - float tmpvar_107; - tmpvar_107 = (1.0/((dstP + dstN))); - float tmpvar_108; - tmpvar_108 = min (dstN, dstP); - bool tmpvar_109; - if ((dstN < dstP)) { - tmpvar_109 = tmpvar_105; - } else { - tmpvar_109 = tmpvar_106; - }; - float tmpvar_110; - tmpvar_110 = ((tmpvar_108 * -(tmpvar_107)) + 0.5); - float tmpvar_111; - tmpvar_111 = ((tmpvar_49 * tmpvar_49) * 0.75); - float tmpvar_112; - if (tmpvar_109) { - tmpvar_112 = tmpvar_110; - } else { - tmpvar_112 = 0.0; - }; - float tmpvar_113; - tmpvar_113 = max (tmpvar_112, tmpvar_111); - if (!(tmpvar_31)) { - posM.x = (xlv_TEXCOORD0.x + (tmpvar_113 * lengthSign)); - }; - if (tmpvar_31) { - posM.y = (xlv_TEXCOORD0.y + (tmpvar_113 * lengthSign)); - }; - vec4 tmpvar_114; - tmpvar_114.zw = vec2(0.0, 0.0); - tmpvar_114.xy = posM; - vec4 tmpvar_115; - tmpvar_115.xyz = texture2DLod (_MainTex, tmpvar_114.xy, 0.0).xyz; - tmpvar_115.w = tmpvar_3.w; - tmpvar_1 = tmpvar_115; - }; - gl_FragData[0] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-outES.txt deleted file mode 100644 index 564ff4ec1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-outES.txt +++ /dev/null @@ -1,773 +0,0 @@ -#extension GL_EXT_shader_texture_lod : enable -varying highp vec2 xlv_TEXCOORD0; -uniform highp vec4 _MainTex_TexelSize; -uniform sampler2D _MainTex; -void main () -{ - highp vec4 tmpvar_1; - highp float dstP; - highp float dstN; - highp float lumaEndP; - highp float lumaEndN; - highp vec2 posP; - highp vec2 posN; - highp vec2 posB; - highp float lumaNN; - highp float lengthSign; - highp float lumaN; - highp float lumaS; - highp vec4 rgbyM; - highp vec2 posM; - posM.x = xlv_TEXCOORD0.x; - posM.y = xlv_TEXCOORD0.y; - highp vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = posM; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2DLodEXT (_MainTex, tmpvar_2.xy, 0.0); - rgbyM = tmpvar_3; - highp vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_5; - tmpvar_5 = texture2DLodEXT (_MainTex, tmpvar_4.xy, 0.0); - highp float tmpvar_6; - highp vec4 rgba; - rgba = tmpvar_5; - tmpvar_6 = rgba.w; - lumaS = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_8; - tmpvar_8 = texture2DLodEXT (_MainTex, tmpvar_7.xy, 0.0); - highp float tmpvar_9; - highp vec4 rgba_i0; - rgba_i0 = tmpvar_8; - tmpvar_9 = rgba_i0.w; - highp vec4 tmpvar_10; - tmpvar_10.zw = vec2(0.0, 0.0); - tmpvar_10.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_11; - tmpvar_11 = texture2DLodEXT (_MainTex, tmpvar_10.xy, 0.0); - highp float tmpvar_12; - highp vec4 rgba_i0_i1; - rgba_i0_i1 = tmpvar_11; - tmpvar_12 = rgba_i0_i1.w; - lumaN = tmpvar_12; - highp vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_14; - tmpvar_14 = texture2DLodEXT (_MainTex, tmpvar_13.xy, 0.0); - highp float tmpvar_15; - highp vec4 rgba_i0_i1_i2; - rgba_i0_i1_i2 = tmpvar_14; - tmpvar_15 = rgba_i0_i1_i2.w; - highp float tmpvar_16; - tmpvar_16 = max (max (tmpvar_12, tmpvar_15), max (tmpvar_9, max (tmpvar_6, rgbyM.w))); - highp float tmpvar_17; - tmpvar_17 = (tmpvar_16 - min (min (tmpvar_12, tmpvar_15), min (tmpvar_9, min (tmpvar_6, rgbyM.w)))); - if ((tmpvar_17 < max (0.0833, (tmpvar_16 * 0.166)))) { - tmpvar_1 = rgbyM; - } else { - highp vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_19; - tmpvar_19 = texture2DLodEXT (_MainTex, tmpvar_18.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3; - rgba_i0_i1_i2_i3 = tmpvar_19; - highp vec4 tmpvar_20; - tmpvar_20.zw = vec2(0.0, 0.0); - tmpvar_20.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); - lowp vec4 tmpvar_21; - tmpvar_21 = texture2DLodEXT (_MainTex, tmpvar_20.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4; - rgba_i0_i1_i2_i3_i4 = tmpvar_21; - highp vec4 tmpvar_22; - tmpvar_22.zw = vec2(0.0, 0.0); - tmpvar_22.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_23; - tmpvar_23 = texture2DLodEXT (_MainTex, tmpvar_22.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5; - rgba_i0_i1_i2_i3_i4_i5 = tmpvar_23; - highp vec4 tmpvar_24; - tmpvar_24.zw = vec2(0.0, 0.0); - tmpvar_24.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); - lowp vec4 tmpvar_25; - tmpvar_25 = texture2DLodEXT (_MainTex, tmpvar_24.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6; - rgba_i0_i1_i2_i3_i4_i5_i6 = tmpvar_25; - highp float tmpvar_26; - tmpvar_26 = (rgba_i0_i1.w + rgba.w); - highp float tmpvar_27; - tmpvar_27 = (rgba_i0_i1_i2.w + rgba_i0.w); - highp float tmpvar_28; - tmpvar_28 = (1.0/(tmpvar_17)); - highp float tmpvar_29; - tmpvar_29 = (rgba_i0_i1_i2_i3_i4_i5.w + rgba_i0_i1_i2_i3_i4.w); - highp float tmpvar_30; - tmpvar_30 = (rgba_i0_i1_i2_i3.w + rgba_i0_i1_i2_i3_i4_i5_i6.w); - lengthSign = _MainTex_TexelSize.x; - bool tmpvar_31; - tmpvar_31 = ((abs (((-(2.0) * rgba_i0_i1_i2.w) + tmpvar_30)) + ((abs (((-(2.0) * rgbyM.w) + tmpvar_26)) * 2.0) + abs (((-(2.0) * rgba_i0.w) + tmpvar_29)))) >= (abs (((-(2.0) * rgba.w) + (rgba_i0_i1_i2_i3_i4_i5_i6.w + rgba_i0_i1_i2_i3_i4.w))) + ((abs (((-(2.0) * rgbyM.w) + tmpvar_27)) * 2.0) + abs (((-(2.0) * rgba_i0_i1.w) + (rgba_i0_i1_i2_i3.w + rgba_i0_i1_i2_i3_i4_i5.w)))))); - highp float tmpvar_32; - tmpvar_32 = (((tmpvar_26 + tmpvar_27) * 2.0) + (tmpvar_30 + tmpvar_29)); - if (!(tmpvar_31)) { - lumaN = tmpvar_15; - }; - if (!(tmpvar_31)) { - lumaS = tmpvar_9; - }; - if (tmpvar_31) { - lengthSign = _MainTex_TexelSize.y; - }; - highp float tmpvar_33; - tmpvar_33 = ((tmpvar_32 * 0.0833333) - rgbyM.w); - highp float tmpvar_34; - tmpvar_34 = (lumaN - rgbyM.w); - highp float tmpvar_35; - tmpvar_35 = (lumaS - rgbyM.w); - lumaNN = (lumaN + rgbyM.w); - highp float tmpvar_36; - tmpvar_36 = (lumaS + rgbyM.w); - bool tmpvar_37; - tmpvar_37 = (abs (tmpvar_34) >= abs (tmpvar_35)); - highp float tmpvar_38; - tmpvar_38 = max (abs (tmpvar_34), abs (tmpvar_35)); - if (tmpvar_37) { - lengthSign = -(lengthSign); - }; - highp float tmpvar_39; - tmpvar_39 = clamp ((abs (tmpvar_33) * tmpvar_28), 0.0, 1.0); - posB.x = xlv_TEXCOORD0.x; - posB.y = xlv_TEXCOORD0.y; - highp float tmpvar_40; - if (!(tmpvar_31)) { - tmpvar_40 = 0.0; - } else { - tmpvar_40 = _MainTex_TexelSize.x; - }; - highp float tmpvar_41; - if (tmpvar_31) { - tmpvar_41 = 0.0; - } else { - tmpvar_41 = _MainTex_TexelSize.y; - }; - if (!(tmpvar_31)) { - posB.x = (xlv_TEXCOORD0.x + (lengthSign * 0.5)); - }; - if (tmpvar_31) { - posB.y = (xlv_TEXCOORD0.y + (lengthSign * 0.5)); - }; - posN.x = (posB.x - tmpvar_40); - posN.y = (posB.y - tmpvar_41); - posP.x = (posB.x + tmpvar_40); - posP.y = (posB.y + tmpvar_41); - highp float tmpvar_42; - tmpvar_42 = ((-2.0 * tmpvar_39) + 3.0); - highp vec4 tmpvar_43; - tmpvar_43.zw = vec2(0.0, 0.0); - tmpvar_43.xy = posN; - lowp vec4 tmpvar_44; - tmpvar_44 = texture2DLodEXT (_MainTex, tmpvar_43.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7; - rgba_i0_i1_i2_i3_i4_i5_i6_i7 = tmpvar_44; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7.w; - highp float tmpvar_45; - tmpvar_45 = (tmpvar_39 * tmpvar_39); - highp vec4 tmpvar_46; - tmpvar_46.zw = vec2(0.0, 0.0); - tmpvar_46.xy = posP; - lowp vec4 tmpvar_47; - tmpvar_47 = texture2DLodEXT (_MainTex, tmpvar_46.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8 = tmpvar_47; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8.w; - if (!(tmpvar_37)) { - lumaNN = tmpvar_36; - }; - highp float tmpvar_48; - tmpvar_48 = (tmpvar_38 / 4.0); - highp float tmpvar_49; - tmpvar_49 = (tmpvar_42 * tmpvar_45); - bool tmpvar_50; - tmpvar_50 = ((rgbyM.w - (lumaNN * 0.5)) < 0.0); - highp float tmpvar_51; - tmpvar_51 = (rgba_i0_i1_i2_i3_i4_i5_i6_i7.w - (lumaNN * 0.5)); - lumaEndN = tmpvar_51; - highp float tmpvar_52; - tmpvar_52 = (rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8.w - (lumaNN * 0.5)); - lumaEndP = tmpvar_52; - bool tmpvar_53; - tmpvar_53 = (abs (tmpvar_51) >= tmpvar_48); - bool tmpvar_54; - tmpvar_54 = (abs (tmpvar_52) >= tmpvar_48); - if (!(tmpvar_53)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_53)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_55; - if (!(tmpvar_53)) { - tmpvar_55 = bool(1); - } else { - tmpvar_55 = !(tmpvar_54); - }; - if (!(tmpvar_54)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_54)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_55) { - if (!(tmpvar_53)) { - highp vec4 tmpvar_56; - tmpvar_56.zw = vec2(0.0, 0.0); - tmpvar_56.xy = posN; - lowp vec4 tmpvar_57; - tmpvar_57 = texture2DLodEXT (_MainTex, tmpvar_56.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_57; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_54)) { - highp vec4 tmpvar_58; - tmpvar_58.zw = vec2(0.0, 0.0); - tmpvar_58.xy = posP; - lowp vec4 tmpvar_59; - tmpvar_59 = texture2DLodEXT (_MainTex, tmpvar_58.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_59; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_53)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_54)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_60; - tmpvar_60 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_61; - tmpvar_61 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_60)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_60)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_62; - if (!(tmpvar_60)) { - tmpvar_62 = bool(1); - } else { - tmpvar_62 = !(tmpvar_61); - }; - if (!(tmpvar_61)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_61)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_62) { - if (!(tmpvar_60)) { - highp vec4 tmpvar_63; - tmpvar_63.zw = vec2(0.0, 0.0); - tmpvar_63.xy = posN; - lowp vec4 tmpvar_64; - tmpvar_64 = texture2DLodEXT (_MainTex, tmpvar_63.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_64; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_61)) { - highp vec4 tmpvar_65; - tmpvar_65.zw = vec2(0.0, 0.0); - tmpvar_65.xy = posP; - lowp vec4 tmpvar_66; - tmpvar_66 = texture2DLodEXT (_MainTex, tmpvar_65.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_66; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_60)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_61)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_67; - tmpvar_67 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_68; - tmpvar_68 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_67)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_67)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_69; - if (!(tmpvar_67)) { - tmpvar_69 = bool(1); - } else { - tmpvar_69 = !(tmpvar_68); - }; - if (!(tmpvar_68)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_68)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_69) { - if (!(tmpvar_67)) { - highp vec4 tmpvar_70; - tmpvar_70.zw = vec2(0.0, 0.0); - tmpvar_70.xy = posN; - lowp vec4 tmpvar_71; - tmpvar_71 = texture2DLodEXT (_MainTex, tmpvar_70.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_71; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_68)) { - highp vec4 tmpvar_72; - tmpvar_72.zw = vec2(0.0, 0.0); - tmpvar_72.xy = posP; - lowp vec4 tmpvar_73; - tmpvar_73 = texture2DLodEXT (_MainTex, tmpvar_72.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_73; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_67)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_68)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_74; - tmpvar_74 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_75; - tmpvar_75 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_74)) { - posN.x = (posN.x - tmpvar_40); - }; - if (!(tmpvar_74)) { - posN.y = (posN.y - tmpvar_41); - }; - bool tmpvar_76; - if (!(tmpvar_74)) { - tmpvar_76 = bool(1); - } else { - tmpvar_76 = !(tmpvar_75); - }; - if (!(tmpvar_75)) { - posP.x = (posP.x + tmpvar_40); - }; - if (!(tmpvar_75)) { - posP.y = (posP.y + tmpvar_41); - }; - if (tmpvar_76) { - if (!(tmpvar_74)) { - highp vec4 tmpvar_77; - tmpvar_77.zw = vec2(0.0, 0.0); - tmpvar_77.xy = posN; - lowp vec4 tmpvar_78; - tmpvar_78 = texture2DLodEXT (_MainTex, tmpvar_77.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_78; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_75)) { - highp vec4 tmpvar_79; - tmpvar_79.zw = vec2(0.0, 0.0); - tmpvar_79.xy = posP; - lowp vec4 tmpvar_80; - tmpvar_80 = texture2DLodEXT (_MainTex, tmpvar_79.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_80; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_74)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_75)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_81; - tmpvar_81 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_82; - tmpvar_82 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_81)) { - posN.x = (posN.x - (tmpvar_40 * 1.5)); - }; - if (!(tmpvar_81)) { - posN.y = (posN.y - (tmpvar_41 * 1.5)); - }; - bool tmpvar_83; - if (!(tmpvar_81)) { - tmpvar_83 = bool(1); - } else { - tmpvar_83 = !(tmpvar_82); - }; - if (!(tmpvar_82)) { - posP.x = (posP.x + (tmpvar_40 * 1.5)); - }; - if (!(tmpvar_82)) { - posP.y = (posP.y + (tmpvar_41 * 1.5)); - }; - if (tmpvar_83) { - if (!(tmpvar_81)) { - highp vec4 tmpvar_84; - tmpvar_84.zw = vec2(0.0, 0.0); - tmpvar_84.xy = posN; - lowp vec4 tmpvar_85; - tmpvar_85 = texture2DLodEXT (_MainTex, tmpvar_84.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_85; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_82)) { - highp vec4 tmpvar_86; - tmpvar_86.zw = vec2(0.0, 0.0); - tmpvar_86.xy = posP; - lowp vec4 tmpvar_87; - tmpvar_87 = texture2DLodEXT (_MainTex, tmpvar_86.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_87; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_81)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_82)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_88; - tmpvar_88 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_89; - tmpvar_89 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_88)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_88)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_90; - if (!(tmpvar_88)) { - tmpvar_90 = bool(1); - } else { - tmpvar_90 = !(tmpvar_89); - }; - if (!(tmpvar_89)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_89)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_90) { - if (!(tmpvar_88)) { - highp vec4 tmpvar_91; - tmpvar_91.zw = vec2(0.0, 0.0); - tmpvar_91.xy = posN; - lowp vec4 tmpvar_92; - tmpvar_92 = texture2DLodEXT (_MainTex, tmpvar_91.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_92; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_89)) { - highp vec4 tmpvar_93; - tmpvar_93.zw = vec2(0.0, 0.0); - tmpvar_93.xy = posP; - lowp vec4 tmpvar_94; - tmpvar_94 = texture2DLodEXT (_MainTex, tmpvar_93.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_94; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_88)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_89)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_95; - tmpvar_95 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_96; - tmpvar_96 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_95)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_95)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_97; - if (!(tmpvar_95)) { - tmpvar_97 = bool(1); - } else { - tmpvar_97 = !(tmpvar_96); - }; - if (!(tmpvar_96)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_96)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_97) { - if (!(tmpvar_95)) { - highp vec4 tmpvar_98; - tmpvar_98.zw = vec2(0.0, 0.0); - tmpvar_98.xy = posN; - lowp vec4 tmpvar_99; - tmpvar_99 = texture2DLodEXT (_MainTex, tmpvar_98.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_99; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_96)) { - highp vec4 tmpvar_100; - tmpvar_100.zw = vec2(0.0, 0.0); - tmpvar_100.xy = posP; - lowp vec4 tmpvar_101; - tmpvar_101 = texture2DLodEXT (_MainTex, tmpvar_100.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_101; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_95)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_96)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_102; - tmpvar_102 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_103; - tmpvar_103 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_102)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_102)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_104; - if (!(tmpvar_102)) { - tmpvar_104 = bool(1); - } else { - tmpvar_104 = !(tmpvar_103); - }; - if (!(tmpvar_103)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_103)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_104) { - if (!(tmpvar_102)) { - highp vec4 tmpvar_105; - tmpvar_105.zw = vec2(0.0, 0.0); - tmpvar_105.xy = posN; - lowp vec4 tmpvar_106; - tmpvar_106 = texture2DLodEXT (_MainTex, tmpvar_105.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_106; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_103)) { - highp vec4 tmpvar_107; - tmpvar_107.zw = vec2(0.0, 0.0); - tmpvar_107.xy = posP; - lowp vec4 tmpvar_108; - tmpvar_108 = texture2DLodEXT (_MainTex, tmpvar_107.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_108; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_102)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_103)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_109; - tmpvar_109 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_110; - tmpvar_110 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_109)) { - posN.x = (posN.x - (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_109)) { - posN.y = (posN.y - (tmpvar_41 * 2.0)); - }; - bool tmpvar_111; - if (!(tmpvar_109)) { - tmpvar_111 = bool(1); - } else { - tmpvar_111 = !(tmpvar_110); - }; - if (!(tmpvar_110)) { - posP.x = (posP.x + (tmpvar_40 * 2.0)); - }; - if (!(tmpvar_110)) { - posP.y = (posP.y + (tmpvar_41 * 2.0)); - }; - if (tmpvar_111) { - if (!(tmpvar_109)) { - highp vec4 tmpvar_112; - tmpvar_112.zw = vec2(0.0, 0.0); - tmpvar_112.xy = posN; - lowp vec4 tmpvar_113; - tmpvar_113 = texture2DLodEXT (_MainTex, tmpvar_112.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_113; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_110)) { - highp vec4 tmpvar_114; - tmpvar_114.zw = vec2(0.0, 0.0); - tmpvar_114.xy = posP; - lowp vec4 tmpvar_115; - tmpvar_115 = texture2DLodEXT (_MainTex, tmpvar_114.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_115; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_109)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_110)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_116; - tmpvar_116 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_117; - tmpvar_117 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_116)) { - posN.x = (posN.x - (tmpvar_40 * 4.0)); - }; - if (!(tmpvar_116)) { - posN.y = (posN.y - (tmpvar_41 * 4.0)); - }; - bool tmpvar_118; - if (!(tmpvar_116)) { - tmpvar_118 = bool(1); - } else { - tmpvar_118 = !(tmpvar_117); - }; - if (!(tmpvar_117)) { - posP.x = (posP.x + (tmpvar_40 * 4.0)); - }; - if (!(tmpvar_117)) { - posP.y = (posP.y + (tmpvar_41 * 4.0)); - }; - if (tmpvar_118) { - if (!(tmpvar_116)) { - highp vec4 tmpvar_119; - tmpvar_119.zw = vec2(0.0, 0.0); - tmpvar_119.xy = posN; - lowp vec4 tmpvar_120; - tmpvar_120 = texture2DLodEXT (_MainTex, tmpvar_119.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_120; - lumaEndN = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_117)) { - highp vec4 tmpvar_121; - tmpvar_121.zw = vec2(0.0, 0.0); - tmpvar_121.xy = posP; - lowp vec4 tmpvar_122; - tmpvar_122 = texture2DLodEXT (_MainTex, tmpvar_121.xy, 0.0); - highp vec4 rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9; - rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9 = tmpvar_122; - lumaEndP = rgba_i0_i1_i2_i3_i4_i5_i6_i7_i8_i9.w; - }; - if (!(tmpvar_116)) { - lumaEndN = (lumaEndN - (lumaNN * 0.5)); - }; - if (!(tmpvar_117)) { - lumaEndP = (lumaEndP - (lumaNN * 0.5)); - }; - bool tmpvar_123; - tmpvar_123 = (abs (lumaEndN) >= tmpvar_48); - bool tmpvar_124; - tmpvar_124 = (abs (lumaEndP) >= tmpvar_48); - if (!(tmpvar_123)) { - posN.x = (posN.x - (tmpvar_40 * 8.0)); - }; - if (!(tmpvar_123)) { - posN.y = (posN.y - (tmpvar_41 * 8.0)); - }; - if (!(tmpvar_123)) { - }; - if (!(tmpvar_124)) { - posP.x = (posP.x + (tmpvar_40 * 8.0)); - }; - if (!(tmpvar_124)) { - posP.y = (posP.y + (tmpvar_41 * 8.0)); - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - dstN = (xlv_TEXCOORD0.x - posN.x); - dstP = (posP.x - xlv_TEXCOORD0.x); - if (!(tmpvar_31)) { - dstN = (xlv_TEXCOORD0.y - posN.y); - }; - if (!(tmpvar_31)) { - dstP = (posP.y - xlv_TEXCOORD0.y); - }; - bool tmpvar_125; - tmpvar_125 = ((lumaEndN < 0.0) != tmpvar_50); - bool tmpvar_126; - tmpvar_126 = ((lumaEndP < 0.0) != tmpvar_50); - highp float tmpvar_127; - tmpvar_127 = (1.0/((dstP + dstN))); - highp float tmpvar_128; - tmpvar_128 = min (dstN, dstP); - bool tmpvar_129; - if ((dstN < dstP)) { - tmpvar_129 = tmpvar_125; - } else { - tmpvar_129 = tmpvar_126; - }; - highp float tmpvar_130; - tmpvar_130 = ((tmpvar_128 * -(tmpvar_127)) + 0.5); - highp float tmpvar_131; - tmpvar_131 = ((tmpvar_49 * tmpvar_49) * 0.75); - highp float tmpvar_132; - if (tmpvar_129) { - tmpvar_132 = tmpvar_130; - } else { - tmpvar_132 = 0.0; - }; - highp float tmpvar_133; - tmpvar_133 = max (tmpvar_132, tmpvar_131); - if (!(tmpvar_31)) { - posM.x = (xlv_TEXCOORD0.x + (tmpvar_133 * lengthSign)); - }; - if (tmpvar_31) { - posM.y = (xlv_TEXCOORD0.y + (tmpvar_133 * lengthSign)); - }; - highp vec4 tmpvar_134; - tmpvar_134.zw = vec2(0.0, 0.0); - tmpvar_134.xy = posM; - lowp vec4 tmpvar_135; - tmpvar_135 = texture2DLodEXT (_MainTex, tmpvar_134.xy, 0.0); - highp vec4 tmpvar_136; - tmpvar_136.xyz = tmpvar_135.xyz; - tmpvar_136.w = rgbyM.w; - tmpvar_1 = tmpvar_136; - }; - gl_FragData[0] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-particle-ir.txt deleted file mode 100644 index 33df9300a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-ir.txt +++ /dev/null @@ -1,46 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -varying vec2 xlv_TEXCOORD0; -varying vec4 xlv_COLOR; -uniform sampler2D _MainTex; -vec4 xlat_main ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (i.color * tmpvar_1); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = xlv_COLOR.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD0.xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-particle-irES.txt deleted file mode 100644 index da93bdd0e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-irES.txt +++ /dev/null @@ -1,46 +0,0 @@ -struct v2f { - highp vec4 vertex; - lowp vec4 color; - mediump vec2 texcoord; -}; -varying mediump vec2 xlv_TEXCOORD0; -varying lowp vec4 xlv_COLOR; -uniform sampler2D _MainTex; -lowp vec4 xlat_main ( - in v2f i -) -{ - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (i.color * tmpvar_1); -} - -void main () -{ - v2f xlt_i; - lowp vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - lowp vec4 tmpvar_2; - tmpvar_2 = xlv_COLOR.xyzw; - lowp vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - mediump vec2 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD0.xy; - mediump vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - lowp vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - lowp vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - lowp vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - lowp vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-ir.txt deleted file mode 100644 index 65832a637..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-ir.txt +++ /dev/null @@ -1,529 +0,0 @@ -struct v2f { - vec4 pos; - vec4 uv; - vec3 ray; -}; -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_TEXCOORD0; -uniform vec4 unity_LightmapFade; -uniform vec4 _ZBufferParams; -uniform vec3 _WorldSpaceCameraPos; -uniform samplerCube _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightShadowData; -uniform vec4 _LightPositionRange; -uniform vec4 _LightPos; -uniform mat4 _LightMatrix0; -uniform vec4 _LightColor; -uniform mat4 _CameraToWorld; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec2 xll_vecTSel ( - in bvec2 a, - in vec2 b, - in vec2 c -) -{ - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; - } else { - tmpvar_1 = c.x; - }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; - } else { - tmpvar_2 = c.y; - }; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_1; - tmpvar_3.y = tmpvar_2; - return tmpvar_3; -} - -vec3 xll_vecTSel ( - in bvec3 a, - in vec3 b, - in vec3 c -) -{ - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; - } else { - tmpvar_1 = c.x; - }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; - } else { - tmpvar_2 = c.y; - }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; - } else { - tmpvar_3 = c.z; - }; - vec3 tmpvar_4; - tmpvar_4.x = tmpvar_1; - tmpvar_4.y = tmpvar_2; - tmpvar_4.z = tmpvar_3; - return tmpvar_4; -} - -vec4 xll_vecTSel ( - in bvec4 a, - in vec4 b, - in vec4 c -) -{ - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; - } else { - tmpvar_1 = c.x; - }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; - } else { - tmpvar_2 = c.y; - }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; - } else { - tmpvar_3 = c.z; - }; - float tmpvar_4; - if (a.w) { - tmpvar_4 = b.w; - } else { - tmpvar_4 = c.w; - }; - vec4 tmpvar_5; - tmpvar_5.x = tmpvar_1; - tmpvar_5.y = tmpvar_2; - tmpvar_5.z = tmpvar_3; - tmpvar_5.w = tmpvar_4; - return tmpvar_5; -} - -float Luminance ( - in vec3 c -) -{ - float tmpvar_1; - tmpvar_1 = dot (c, vec3(0.22, 0.707, 0.071)); - return tmpvar_1; -} - -float Linear01Depth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -float DecodeFloatRGBA ( - in vec4 enc -) -{ - vec4 kDecodeDot; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, 0.00392157, 1.53787e-05, 0.0); - kDecodeDot = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (enc, kDecodeDot); - return tmpvar_2; -} - -float SampleCubeDistance ( - in vec3 vec -) -{ - vec4 packDist; - vec4 tmpvar_1; - tmpvar_1 = textureCube (_ShadowMapTexture, vec); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - packDist = tmpvar_2; - float tmpvar_3; - tmpvar_3 = DecodeFloatRGBA (packDist); - return tmpvar_3; -} - -float unitySampleShadow ( - in vec3 vec, - in float mydist -) -{ - vec4 shadows; - vec4 shadowVals; - float z; - float tmpvar_1; - tmpvar_1 = 0.0078125; - z = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.x = z; - tmpvar_2.y = z; - tmpvar_2.z = z; - float tmpvar_3; - tmpvar_3 = SampleCubeDistance ((vec + tmpvar_2)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - shadowVals.x = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5.x = -(z); - tmpvar_5.y = -(z); - tmpvar_5.z = z; - float tmpvar_6; - tmpvar_6 = SampleCubeDistance ((vec + tmpvar_5)); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - shadowVals.y = vec2(tmpvar_7).y; - vec3 tmpvar_8; - tmpvar_8.x = -(z); - tmpvar_8.y = z; - tmpvar_8.z = -(z); - float tmpvar_9; - tmpvar_9 = SampleCubeDistance ((vec + tmpvar_8)); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - shadowVals.z = vec3(tmpvar_10).z; - vec3 tmpvar_11; - tmpvar_11.x = z; - tmpvar_11.y = -(z); - tmpvar_11.z = -(z); - float tmpvar_12; - tmpvar_12 = SampleCubeDistance ((vec + tmpvar_11)); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - shadowVals.w = vec4(tmpvar_13).w; - vec4 tmpvar_14; - tmpvar_14 = vec4(mydist); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14.xyzw; - bvec4 tmpvar_16; - tmpvar_16 = lessThan (shadowVals, tmpvar_15); - vec4 tmpvar_17; - tmpvar_17 = _LightShadowData.xxxx.xyzw; - vec4 tmpvar_18; - tmpvar_18 = xll_vecTSel (tmpvar_16, tmpvar_17, vec4(1.0, 1.0, 1.0, 1.0)); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - shadows = tmpvar_19; - float tmpvar_20; - tmpvar_20 = dot (shadows, vec4(0.25, 0.25, 0.25, 0.25)); - return tmpvar_20; -} - -float ComputeShadow ( - in vec3 vec, - in float z, - in vec2 uv -) -{ - float mydist; - float fade; - float tmpvar_1; - tmpvar_1 = ((z * _LightShadowData.z) + _LightShadowData.w); - fade = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xll_saturate (fade); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - fade = tmpvar_3; - float tmpvar_4; - tmpvar_4 = length (vec); - float tmpvar_5; - tmpvar_5 = (tmpvar_4 * _LightPositionRange.w); - mydist = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (mydist * 0.97); - mydist = tmpvar_6; - float tmpvar_7; - tmpvar_7 = unitySampleShadow (vec, mydist); - return tmpvar_7; - return 1.0; -} - -vec4 xlat_main ( - in v2f i -) -{ - float fade; - vec4 res; - float spec; - vec3 h; - float diff; - float atten; - float att; - vec3 lightDir; - vec3 tolight; - vec3 wpos; - vec4 vpos; - float depth; - vec3 normal; - vec4 nspec; - vec2 uv; - vec3 tmpvar_1; - tmpvar_1 = (i.ray * (_ProjectionParams.z / i.ray.z)); - i.ray = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (i.uv.xy / i.uv.w); - uv = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_CameraNormalsTexture, uv); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - nspec = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = ((nspec.xyz * 2.0) - 1.0); - normal = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = normalize (normal); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - normal = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_CameraDepthTexture, uv); - float tmpvar_9; - tmpvar_9 = tmpvar_8.x; - depth = tmpvar_9; - float tmpvar_10; - tmpvar_10 = Linear01Depth (depth); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - depth = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12.w = 1.0; - tmpvar_12.xyz = (i.ray * depth).xyz; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - vpos = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = (_CameraToWorld * vpos).xyz; - wpos = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (wpos - _LightPos.xyz); - tolight = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = normalize (tolight); - vec3 tmpvar_17; - tmpvar_17 = -(tmpvar_16); - lightDir = tmpvar_17; - float tmpvar_18; - tmpvar_18 = dot (tolight, tolight); - float tmpvar_19; - tmpvar_19 = (tmpvar_18 * _LightPos.w); - att = tmpvar_19; - vec2 tmpvar_20; - tmpvar_20 = vec2(att); - vec2 tmpvar_21; - tmpvar_21 = tmpvar_20.xy; - vec4 tmpvar_22; - tmpvar_22 = texture2D (_LightTextureB0, tmpvar_21); - float tmpvar_23; - tmpvar_23 = tmpvar_22.w; - atten = tmpvar_23; - float tmpvar_24; - tmpvar_24 = ComputeShadow (tolight, vpos.z, uv); - float tmpvar_25; - tmpvar_25 = (atten * tmpvar_24); - atten = tmpvar_25; - vec4 tmpvar_26; - tmpvar_26.w = 1.0; - tmpvar_26.xyz = wpos.xyz; - vec4 tmpvar_27; - tmpvar_27 = textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_26).xyz); - float tmpvar_28; - tmpvar_28 = (atten * tmpvar_27.w); - atten = tmpvar_28; - float tmpvar_29; - tmpvar_29 = dot (lightDir, normal); - float tmpvar_30; - tmpvar_30 = max (0.0, tmpvar_29); - float tmpvar_31; - tmpvar_31 = tmpvar_30; - diff = tmpvar_31; - vec3 tmpvar_32; - tmpvar_32 = normalize ((wpos - _WorldSpaceCameraPos)); - vec3 tmpvar_33; - tmpvar_33 = normalize ((lightDir - tmpvar_32)); - vec3 tmpvar_34; - tmpvar_34 = tmpvar_33; - h = tmpvar_34; - float tmpvar_35; - tmpvar_35 = dot (h, normal); - float tmpvar_36; - tmpvar_36 = max (0.0, tmpvar_35); - float tmpvar_37; - tmpvar_37 = pow (tmpvar_36, (nspec.w * 128.0)); - float tmpvar_38; - tmpvar_38 = tmpvar_37; - spec = tmpvar_38; - float tmpvar_39; - tmpvar_39 = xll_saturate (atten); - float tmpvar_40; - tmpvar_40 = (spec * tmpvar_39); - spec = tmpvar_40; - vec3 tmpvar_41; - tmpvar_41 = (_LightColor.xyz * (diff * atten)); - res.xyz = tmpvar_41.xyz.xyz; - float tmpvar_42; - tmpvar_42 = Luminance (_LightColor.xyz); - float tmpvar_43; - tmpvar_43 = (spec * tmpvar_42); - res.w = vec4(tmpvar_43).w; - float tmpvar_44; - tmpvar_44 = ((vpos.z * unity_LightmapFade.z) + unity_LightmapFade.w); - fade = tmpvar_44; - float tmpvar_45; - tmpvar_45 = xll_saturate ((1.0 - fade)); - vec4 tmpvar_46; - tmpvar_46 = (res * tmpvar_45); - res = tmpvar_46; - vec4 tmpvar_47; - tmpvar_47 = exp2 (-(res)); - return tmpvar_47; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD1.xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.ray = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-irES.txt deleted file mode 100644 index 5bc41c459..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-irES.txt +++ /dev/null @@ -1,529 +0,0 @@ -struct v2f { - highp vec4 pos; - highp vec4 uv; - highp vec3 ray; -}; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_TEXCOORD0; -uniform highp vec4 unity_LightmapFade; -uniform highp vec4 _ZBufferParams; -uniform highp vec3 _WorldSpaceCameraPos; -uniform samplerCube _ShadowMapTexture; -uniform highp vec4 _ProjectionParams; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform highp vec4 _LightShadowData; -uniform highp vec4 _LightPositionRange; -uniform highp vec4 _LightPos; -uniform highp mat4 _LightMatrix0; -uniform highp vec4 _LightColor; -uniform highp mat4 _CameraToWorld; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec2 xll_vecTSel ( - in bvec2 a, - in vec2 b, - in vec2 c -) -{ - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; - } else { - tmpvar_1 = c.x; - }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; - } else { - tmpvar_2 = c.y; - }; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_1; - tmpvar_3.y = tmpvar_2; - return tmpvar_3; -} - -vec3 xll_vecTSel ( - in bvec3 a, - in vec3 b, - in vec3 c -) -{ - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; - } else { - tmpvar_1 = c.x; - }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; - } else { - tmpvar_2 = c.y; - }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; - } else { - tmpvar_3 = c.z; - }; - vec3 tmpvar_4; - tmpvar_4.x = tmpvar_1; - tmpvar_4.y = tmpvar_2; - tmpvar_4.z = tmpvar_3; - return tmpvar_4; -} - -vec4 xll_vecTSel ( - in bvec4 a, - in vec4 b, - in vec4 c -) -{ - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; - } else { - tmpvar_1 = c.x; - }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; - } else { - tmpvar_2 = c.y; - }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; - } else { - tmpvar_3 = c.z; - }; - float tmpvar_4; - if (a.w) { - tmpvar_4 = b.w; - } else { - tmpvar_4 = c.w; - }; - vec4 tmpvar_5; - tmpvar_5.x = tmpvar_1; - tmpvar_5.y = tmpvar_2; - tmpvar_5.z = tmpvar_3; - tmpvar_5.w = tmpvar_4; - return tmpvar_5; -} - -mediump float Luminance ( - in mediump vec3 c -) -{ - mediump float tmpvar_1; - tmpvar_1 = dot (c, vec3(0.22, 0.707, 0.071)); - return tmpvar_1; -} - -float Linear01Depth ( - in highp float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -float DecodeFloatRGBA ( - in highp vec4 enc -) -{ - highp vec4 kDecodeDot; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, 0.00392157, 1.53787e-05, 0.0); - kDecodeDot = tmpvar_1; - highp float tmpvar_2; - tmpvar_2 = dot (enc, kDecodeDot); - return tmpvar_2; -} - -float SampleCubeDistance ( - in highp vec3 vec -) -{ - highp vec4 packDist; - lowp vec4 tmpvar_1; - tmpvar_1 = textureCube (_ShadowMapTexture, vec); - lowp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - packDist = tmpvar_2; - highp float tmpvar_3; - tmpvar_3 = DecodeFloatRGBA (packDist); - return tmpvar_3; -} - -mediump float unitySampleShadow ( - in highp vec3 vec, - in highp float mydist -) -{ - mediump vec4 shadows; - highp vec4 shadowVals; - highp float z; - float tmpvar_1; - tmpvar_1 = 0.0078125; - z = tmpvar_1; - highp vec3 tmpvar_2; - tmpvar_2.x = z; - tmpvar_2.y = z; - tmpvar_2.z = z; - highp float tmpvar_3; - tmpvar_3 = SampleCubeDistance ((vec + tmpvar_2)); - highp float tmpvar_4; - tmpvar_4 = tmpvar_3; - shadowVals.x = tmpvar_4; - highp vec3 tmpvar_5; - tmpvar_5.x = -(z); - tmpvar_5.y = -(z); - tmpvar_5.z = z; - highp float tmpvar_6; - tmpvar_6 = SampleCubeDistance ((vec + tmpvar_5)); - highp float tmpvar_7; - tmpvar_7 = tmpvar_6; - shadowVals.y = vec2(tmpvar_7).y; - highp vec3 tmpvar_8; - tmpvar_8.x = -(z); - tmpvar_8.y = z; - tmpvar_8.z = -(z); - highp float tmpvar_9; - tmpvar_9 = SampleCubeDistance ((vec + tmpvar_8)); - highp float tmpvar_10; - tmpvar_10 = tmpvar_9; - shadowVals.z = vec3(tmpvar_10).z; - highp vec3 tmpvar_11; - tmpvar_11.x = z; - tmpvar_11.y = -(z); - tmpvar_11.z = -(z); - highp float tmpvar_12; - tmpvar_12 = SampleCubeDistance ((vec + tmpvar_11)); - highp float tmpvar_13; - tmpvar_13 = tmpvar_12; - shadowVals.w = vec4(tmpvar_13).w; - highp vec4 tmpvar_14; - tmpvar_14 = vec4(mydist); - highp vec4 tmpvar_15; - tmpvar_15 = tmpvar_14.xyzw; - bvec4 tmpvar_16; - tmpvar_16 = lessThan (shadowVals, tmpvar_15); - highp vec4 tmpvar_17; - tmpvar_17 = _LightShadowData.xxxx.xyzw; - vec4 tmpvar_18; - tmpvar_18 = xll_vecTSel (tmpvar_16, tmpvar_17, vec4(1.0, 1.0, 1.0, 1.0)); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - shadows = tmpvar_19; - mediump float tmpvar_20; - tmpvar_20 = dot (shadows, vec4(0.25, 0.25, 0.25, 0.25)); - return tmpvar_20; -} - -mediump float ComputeShadow ( - in highp vec3 vec, - in highp float z, - in highp vec2 uv -) -{ - highp float mydist; - highp float fade; - highp float tmpvar_1; - tmpvar_1 = ((z * _LightShadowData.z) + _LightShadowData.w); - fade = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xll_saturate (fade); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - fade = tmpvar_3; - highp float tmpvar_4; - tmpvar_4 = length (vec); - highp float tmpvar_5; - tmpvar_5 = (tmpvar_4 * _LightPositionRange.w); - mydist = tmpvar_5; - highp float tmpvar_6; - tmpvar_6 = (mydist * 0.97); - mydist = tmpvar_6; - mediump float tmpvar_7; - tmpvar_7 = unitySampleShadow (vec, mydist); - return tmpvar_7; - return 1.0; -} - -mediump vec4 xlat_main ( - in v2f i -) -{ - highp float fade; - mediump vec4 res; - highp float spec; - mediump vec3 h; - mediump float diff; - highp float atten; - highp float att; - mediump vec3 lightDir; - highp vec3 tolight; - highp vec3 wpos; - highp vec4 vpos; - highp float depth; - mediump vec3 normal; - mediump vec4 nspec; - highp vec2 uv; - highp vec3 tmpvar_1; - tmpvar_1 = (i.ray * (_ProjectionParams.z / i.ray.z)); - i.ray = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = (i.uv.xy / i.uv.w); - uv = tmpvar_2; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2D (_CameraNormalsTexture, uv); - lowp vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - nspec = tmpvar_4; - mediump vec3 tmpvar_5; - tmpvar_5 = ((nspec.xyz * 2.0) - 1.0); - normal = tmpvar_5; - mediump vec3 tmpvar_6; - tmpvar_6 = normalize (normal); - mediump vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - normal = tmpvar_7; - lowp vec4 tmpvar_8; - tmpvar_8 = texture2D (_CameraDepthTexture, uv); - lowp float tmpvar_9; - tmpvar_9 = tmpvar_8.x; - depth = tmpvar_9; - highp float tmpvar_10; - tmpvar_10 = Linear01Depth (depth); - highp float tmpvar_11; - tmpvar_11 = tmpvar_10; - depth = tmpvar_11; - highp vec4 tmpvar_12; - tmpvar_12.w = 1.0; - tmpvar_12.xyz = (i.ray * depth).xyz; - highp vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - vpos = tmpvar_13; - highp vec3 tmpvar_14; - tmpvar_14 = (_CameraToWorld * vpos).xyz; - wpos = tmpvar_14; - highp vec3 tmpvar_15; - tmpvar_15 = (wpos - _LightPos.xyz); - tolight = tmpvar_15; - highp vec3 tmpvar_16; - tmpvar_16 = normalize (tolight); - highp vec3 tmpvar_17; - tmpvar_17 = -(tmpvar_16); - lightDir = tmpvar_17; - highp float tmpvar_18; - tmpvar_18 = dot (tolight, tolight); - highp float tmpvar_19; - tmpvar_19 = (tmpvar_18 * _LightPos.w); - att = tmpvar_19; - highp vec2 tmpvar_20; - tmpvar_20 = vec2(att); - highp vec2 tmpvar_21; - tmpvar_21 = tmpvar_20.xy; - lowp vec4 tmpvar_22; - tmpvar_22 = texture2D (_LightTextureB0, tmpvar_21); - lowp float tmpvar_23; - tmpvar_23 = tmpvar_22.w; - atten = tmpvar_23; - mediump float tmpvar_24; - tmpvar_24 = ComputeShadow (tolight, vpos.z, uv); - highp float tmpvar_25; - tmpvar_25 = (atten * tmpvar_24); - atten = tmpvar_25; - highp vec4 tmpvar_26; - tmpvar_26.w = 1.0; - tmpvar_26.xyz = wpos.xyz; - lowp vec4 tmpvar_27; - tmpvar_27 = textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_26).xyz); - highp float tmpvar_28; - tmpvar_28 = (atten * tmpvar_27.w); - atten = tmpvar_28; - mediump float tmpvar_29; - tmpvar_29 = dot (lightDir, normal); - mediump float tmpvar_30; - tmpvar_30 = max (0.0, tmpvar_29); - mediump float tmpvar_31; - tmpvar_31 = tmpvar_30; - diff = tmpvar_31; - highp vec3 tmpvar_32; - tmpvar_32 = normalize ((wpos - _WorldSpaceCameraPos)); - highp vec3 tmpvar_33; - tmpvar_33 = normalize ((lightDir - tmpvar_32)); - highp vec3 tmpvar_34; - tmpvar_34 = tmpvar_33; - h = tmpvar_34; - mediump float tmpvar_35; - tmpvar_35 = dot (h, normal); - mediump float tmpvar_36; - tmpvar_36 = max (0.0, tmpvar_35); - mediump float tmpvar_37; - tmpvar_37 = pow (tmpvar_36, (nspec.w * 128.0)); - mediump float tmpvar_38; - tmpvar_38 = tmpvar_37; - spec = tmpvar_38; - float tmpvar_39; - tmpvar_39 = xll_saturate (atten); - highp float tmpvar_40; - tmpvar_40 = (spec * tmpvar_39); - spec = tmpvar_40; - highp vec3 tmpvar_41; - tmpvar_41 = (_LightColor.xyz * (diff * atten)); - res.xyz = tmpvar_41.xyz.xyz; - mediump float tmpvar_42; - tmpvar_42 = Luminance (_LightColor.xyz); - highp float tmpvar_43; - tmpvar_43 = (spec * tmpvar_42); - res.w = vec4(tmpvar_43).w; - highp float tmpvar_44; - tmpvar_44 = ((vpos.z * unity_LightmapFade.z) + unity_LightmapFade.w); - fade = tmpvar_44; - float tmpvar_45; - tmpvar_45 = xll_saturate ((1.0 - fade)); - mediump vec4 tmpvar_46; - tmpvar_46 = (res * tmpvar_45); - res = tmpvar_46; - mediump vec4 tmpvar_47; - tmpvar_47 = exp2 (-(res)); - return tmpvar_47; -} - -void main () -{ - v2f xlt_i; - mediump vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - highp vec4 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xyzw; - highp vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD1.xyz; - highp vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.ray = tmpvar_5; - mediump vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - mediump vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - mediump vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - mediump vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-out.txt deleted file mode 100644 index f20436a67..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-out.txt +++ /dev/null @@ -1,87 +0,0 @@ -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_TEXCOORD0; -uniform vec4 unity_LightmapFade; -uniform vec4 _ZBufferParams; -uniform vec3 _WorldSpaceCameraPos; -uniform samplerCube _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightShadowData; -uniform vec4 _LightPositionRange; -uniform vec4 _LightPos; -uniform mat4 _LightMatrix0; -uniform vec4 _LightColor; -uniform mat4 _CameraToWorld; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -void main () -{ - vec4 res; - float atten; - vec3 lightDir; - vec3 normal; - vec2 tmpvar_1; - tmpvar_1 = (xlv_TEXCOORD0.xy / xlv_TEXCOORD0.w); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_CameraNormalsTexture, tmpvar_1); - normal = normalize (((tmpvar_2.xyz * 2.0) - 1.0)); - vec4 tmpvar_3; - tmpvar_3.w = 1.0; - tmpvar_3.xyz = ((xlv_TEXCOORD1 * (_ProjectionParams.z / xlv_TEXCOORD1.z)) * (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, tmpvar_1).x) + _ZBufferParams.y)))); - vec3 tmpvar_4; - tmpvar_4 = (_CameraToWorld * tmpvar_3).xyz; - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 - _LightPos.xyz); - lightDir = -(normalize (tmpvar_5)); - atten = texture2D (_LightTextureB0, vec2((dot (tmpvar_5, tmpvar_5) * _LightPos.w))).w; - vec4 shadowVals; - shadowVals.x = dot (textureCube (_ShadowMapTexture, (tmpvar_5 + vec3(0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - shadowVals.y = dot (textureCube (_ShadowMapTexture, (tmpvar_5 + vec3(-0.0078125, -0.0078125, 0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - shadowVals.z = dot (textureCube (_ShadowMapTexture, (tmpvar_5 + vec3(-0.0078125, 0.0078125, -0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - shadowVals.w = dot (textureCube (_ShadowMapTexture, (tmpvar_5 + vec3(0.0078125, -0.0078125, -0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - bvec4 tmpvar_6; - tmpvar_6 = lessThan (shadowVals, vec4(((length (tmpvar_5) * _LightPositionRange.w) * 0.97))); - float tmpvar_7; - if (tmpvar_6.x) { - tmpvar_7 = _LightShadowData.x; - } else { - tmpvar_7 = 1.0; - }; - float tmpvar_8; - if (tmpvar_6.y) { - tmpvar_8 = _LightShadowData.x; - } else { - tmpvar_8 = 1.0; - }; - float tmpvar_9; - if (tmpvar_6.z) { - tmpvar_9 = _LightShadowData.x; - } else { - tmpvar_9 = 1.0; - }; - float tmpvar_10; - if (tmpvar_6.w) { - tmpvar_10 = _LightShadowData.x; - } else { - tmpvar_10 = 1.0; - }; - vec4 tmpvar_11; - tmpvar_11.x = tmpvar_7; - tmpvar_11.y = tmpvar_8; - tmpvar_11.z = tmpvar_9; - tmpvar_11.w = tmpvar_10; - vec4 tmpvar_12; - tmpvar_12.w = 1.0; - tmpvar_12.xyz = tmpvar_4; - float tmpvar_13; - tmpvar_13 = ((atten * dot (tmpvar_11, vec4(0.25, 0.25, 0.25, 0.25))) * textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_12).xyz).w); - atten = tmpvar_13; - res.xyz = (_LightColor.xyz * (max (0.0, dot (lightDir, normal)) * tmpvar_13)); - res.w = ((pow (max (0.0, dot (normalize ((lightDir - normalize ((tmpvar_4 - _WorldSpaceCameraPos)))), normal)), (tmpvar_2.w * 128.0)) * clamp (tmpvar_13, 0.0, 1.0)) * dot (_LightColor.xyz, vec3(0.22, 0.707, 0.071))); - vec4 tmpvar_14; - tmpvar_14 = (res * clamp ((1.0 - ((tmpvar_3.z * unity_LightmapFade.z) + unity_LightmapFade.w)), 0.0, 1.0)); - res = tmpvar_14; - gl_FragData[0] = exp2 (-(tmpvar_14)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-outES.txt deleted file mode 100644 index f18ed730e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-outES.txt +++ /dev/null @@ -1,157 +0,0 @@ -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_TEXCOORD0; -uniform highp vec4 unity_LightmapFade; -uniform highp vec4 _ZBufferParams; -uniform highp vec3 _WorldSpaceCameraPos; -uniform samplerCube _ShadowMapTexture; -uniform highp vec4 _ProjectionParams; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform highp vec4 _LightShadowData; -uniform highp vec4 _LightPositionRange; -uniform highp vec4 _LightPos; -uniform highp mat4 _LightMatrix0; -uniform highp vec4 _LightColor; -uniform highp mat4 _CameraToWorld; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -void main () -{ - mediump vec4 res; - highp float spec; - mediump vec3 h; - highp float atten; - mediump vec3 lightDir; - highp float depth; - mediump vec3 normal; - mediump vec4 nspec; - highp vec2 tmpvar_1; - tmpvar_1 = (xlv_TEXCOORD0.xy / xlv_TEXCOORD0.w); - lowp vec4 tmpvar_2; - tmpvar_2 = texture2D (_CameraNormalsTexture, tmpvar_1); - nspec = tmpvar_2; - normal = normalize (((nspec.xyz * 2.0) - 1.0)); - lowp float tmpvar_3; - tmpvar_3 = texture2D (_CameraDepthTexture, tmpvar_1).x; - depth = tmpvar_3; - highp float tmpvar_4; - tmpvar_4 = (1.0/(((_ZBufferParams.x * depth) + _ZBufferParams.y))); - depth = tmpvar_4; - highp vec4 tmpvar_5; - tmpvar_5.w = 1.0; - tmpvar_5.xyz = ((xlv_TEXCOORD1 * (_ProjectionParams.z / xlv_TEXCOORD1.z)) * tmpvar_4); - highp vec3 tmpvar_6; - tmpvar_6 = (_CameraToWorld * tmpvar_5).xyz; - highp vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6 - _LightPos.xyz); - highp vec3 tmpvar_8; - tmpvar_8 = -(normalize (tmpvar_7)); - lightDir = tmpvar_8; - highp vec2 tmpvar_9; - tmpvar_9 = vec2((dot (tmpvar_7, tmpvar_7) * _LightPos.w)); - lowp float tmpvar_10; - tmpvar_10 = texture2D (_LightTextureB0, tmpvar_9).w; - atten = tmpvar_10; - mediump vec4 shadows; - highp vec4 shadowVals; - highp vec3 vec_i0_i0; - vec_i0_i0 = (tmpvar_7 + vec3(0.0078125, 0.0078125, 0.0078125)); - highp vec4 packDist; - lowp vec4 tmpvar_11; - tmpvar_11 = textureCube (_ShadowMapTexture, vec_i0_i0); - packDist = tmpvar_11; - shadowVals.x = dot (packDist, vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - highp vec3 vec_i0_i1; - vec_i0_i1 = (tmpvar_7 + vec3(-0.0078125, -0.0078125, 0.0078125)); - highp vec4 packDist_i0; - lowp vec4 tmpvar_12; - tmpvar_12 = textureCube (_ShadowMapTexture, vec_i0_i1); - packDist_i0 = tmpvar_12; - shadowVals.y = dot (packDist_i0, vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - highp vec3 vec_i0_i1_i2; - vec_i0_i1_i2 = (tmpvar_7 + vec3(-0.0078125, 0.0078125, -0.0078125)); - highp vec4 packDist_i0_i1; - lowp vec4 tmpvar_13; - tmpvar_13 = textureCube (_ShadowMapTexture, vec_i0_i1_i2); - packDist_i0_i1 = tmpvar_13; - shadowVals.z = dot (packDist_i0_i1, vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - highp vec3 vec_i0_i1_i2_i3; - vec_i0_i1_i2_i3 = (tmpvar_7 + vec3(0.0078125, -0.0078125, -0.0078125)); - highp vec4 packDist_i0_i1_i2; - lowp vec4 tmpvar_14; - tmpvar_14 = textureCube (_ShadowMapTexture, vec_i0_i1_i2_i3); - packDist_i0_i1_i2 = tmpvar_14; - shadowVals.w = dot (packDist_i0_i1_i2, vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - highp vec4 tmpvar_15; - tmpvar_15 = vec4(((length (tmpvar_7) * _LightPositionRange.w) * 0.97)); - bvec4 tmpvar_16; - tmpvar_16 = lessThan (shadowVals, tmpvar_15); - highp float tmpvar_17; - if (tmpvar_16.x) { - tmpvar_17 = _LightShadowData.x; - } else { - tmpvar_17 = 1.0; - }; - highp float tmpvar_18; - if (tmpvar_16.y) { - tmpvar_18 = _LightShadowData.x; - } else { - tmpvar_18 = 1.0; - }; - highp float tmpvar_19; - if (tmpvar_16.z) { - tmpvar_19 = _LightShadowData.x; - } else { - tmpvar_19 = 1.0; - }; - highp float tmpvar_20; - if (tmpvar_16.w) { - tmpvar_20 = _LightShadowData.x; - } else { - tmpvar_20 = 1.0; - }; - highp vec4 tmpvar_21; - tmpvar_21.x = tmpvar_17; - tmpvar_21.y = tmpvar_18; - tmpvar_21.z = tmpvar_19; - tmpvar_21.w = tmpvar_20; - shadows = tmpvar_21; - mediump float tmpvar_22; - tmpvar_22 = dot (shadows, vec4(0.25, 0.25, 0.25, 0.25)); - highp vec4 tmpvar_23; - tmpvar_23.w = 1.0; - tmpvar_23.xyz = tmpvar_6; - lowp vec4 tmpvar_24; - tmpvar_24 = textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_23).xyz); - highp float tmpvar_25; - tmpvar_25 = ((atten * tmpvar_22) * tmpvar_24.w); - atten = tmpvar_25; - mediump float tmpvar_26; - tmpvar_26 = max (0.0, dot (lightDir, normal)); - highp vec3 tmpvar_27; - tmpvar_27 = normalize ((lightDir - normalize ((tmpvar_6 - _WorldSpaceCameraPos)))); - h = tmpvar_27; - mediump float tmpvar_28; - tmpvar_28 = pow (max (0.0, dot (h, normal)), (nspec.w * 128.0)); - spec = tmpvar_28; - highp float tmpvar_29; - tmpvar_29 = (spec * clamp (tmpvar_25, 0.0, 1.0)); - spec = tmpvar_29; - highp vec3 tmpvar_30; - tmpvar_30 = (_LightColor.xyz * (tmpvar_26 * tmpvar_25)); - res.xyz = tmpvar_30; - mediump vec3 c; - c = _LightColor.xyz; - mediump float tmpvar_31; - tmpvar_31 = dot (c, vec3(0.22, 0.707, 0.071)); - highp float tmpvar_32; - tmpvar_32 = (tmpvar_29 * tmpvar_31); - res.w = tmpvar_32; - highp float tmpvar_33; - tmpvar_33 = clamp ((1.0 - ((tmpvar_5.z * unity_LightmapFade.z) + unity_LightmapFade.w)), 0.0, 1.0); - mediump vec4 tmpvar_34; - tmpvar_34 = (res * tmpvar_33); - res = tmpvar_34; - gl_FragData[0] = exp2 (-(tmpvar_34)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-ir.txt deleted file mode 100644 index 74d29cf5f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-ir.txt +++ /dev/null @@ -1,381 +0,0 @@ -struct LeafSurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Translucency; - float ShadowOffset; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec2 _LightCoord; -}; -varying vec2 xlv_TEXCOORD3; -varying vec3 xlv_TEXCOORD2; -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_COLOR0; -varying vec2 xlv_TEXCOORD0; -uniform float _TranslucencyViewDependency; -uniform sampler2D _TranslucencyMap; -uniform vec3 _TranslucencyColor; -uniform float _ShadowStrength; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpSpecMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout LeafSurfaceOutput o -) -{ - vec4 norspc; - vec4 trngls; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = ((c.xyz * _Color.xyz) * IN.color.w); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - trngls = tmpvar_5; - float tmpvar_6; - tmpvar_6 = trngls.z; - o.Translucency = tmpvar_6; - float tmpvar_7; - tmpvar_7 = (trngls.w * _Color.x); - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_BumpSpecMap, IN.uv_MainTex); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - norspc = tmpvar_10; - float tmpvar_11; - tmpvar_11 = norspc.x; - o.Specular = tmpvar_11; - float tmpvar_12; - tmpvar_12 = norspc.z; - o.ShadowOffset = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = UnpackNormal (norspc); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13.xyz; - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - o.Normal = tmpvar_15; -} - -vec4 LightingTreeLeaf ( - in LeafSurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - vec3 translucencyColor; - float backContrib; - float spec; - float nh; - float nl; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - nl = tmpvar_4; - float tmpvar_5; - tmpvar_5 = dot (s.Normal, h); - float tmpvar_6; - tmpvar_6 = max (0.0, tmpvar_5); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - nh = tmpvar_7; - float tmpvar_8; - tmpvar_8 = pow (nh, (s.Specular * 128.0)); - float tmpvar_9; - tmpvar_9 = (tmpvar_8 * s.Gloss); - spec = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (viewDir, -(lightDir)); - float tmpvar_11; - tmpvar_11 = xll_saturate (tmpvar_10); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - backContrib = tmpvar_12; - float tmpvar_13; - tmpvar_13 = xll_saturate (-(nl)); - float tmpvar_14; - tmpvar_14 = mix (tmpvar_13, backContrib, _TranslucencyViewDependency); - float tmpvar_15; - tmpvar_15 = tmpvar_14; - backContrib = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((backContrib * s.Translucency) * _TranslucencyColor); - translucencyColor = tmpvar_16; - float tmpvar_17; - tmpvar_17 = max (0.0, ((nl * 0.6) + 0.4)); - float tmpvar_18; - tmpvar_18 = tmpvar_17; - nl = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (s.Albedo * ((translucencyColor * 2.0) + nl)); - c.xyz = tmpvar_19.xyz.xyz; - vec3 tmpvar_20; - tmpvar_20 = ((c.xyz * _LightColor0.xyz) + spec); - c.xyz = tmpvar_20.xyz.xyz; - float tmpvar_21; - tmpvar_21 = mix (2.0, (atten * 2.0), _ShadowStrength); - vec3 tmpvar_22; - tmpvar_22 = (c.xyz * tmpvar_21); - c.xyz = tmpvar_22.xyz.xyz; - return c; -} - -vec4 xlat_main ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - LeafSurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.viewDir.xyz; - vec3 tmpvar_9; - tmpvar_9 = normalize (tmpvar_8); - vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_11; - tmpvar_11 = LightingTreeLeaf (o, lightDir, tmpvar_9, (tmpvar_10.w * 1.0)); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - float tmpvar_13; - tmpvar_13 = o.Alpha; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xlv_COLOR0.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.lop_color = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = xlv_TEXCOORD1.xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = xlv_TEXCOORD2.xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.viewDir = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10 = xlv_TEXCOORD3.xy; - vec2 tmpvar_11; - tmpvar_11 = tmpvar_10; - xlt_IN._LightCoord = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xlat_main (xlt_IN); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - xl_retval = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = xl_retval.xyzw; - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - gl_FragData[0] = tmpvar_15; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-irES.txt deleted file mode 100644 index e2365c05e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-irES.txt +++ /dev/null @@ -1,381 +0,0 @@ -struct LeafSurfaceOutput { - mediump vec3 Albedo; - mediump vec3 Normal; - mediump vec3 Emission; - mediump float Translucency; - mediump float ShadowOffset; - mediump float Specular; - mediump float Gloss; - mediump float Alpha; -}; -struct Input { - highp vec2 uv_MainTex; - highp vec4 color; -}; -struct v2f_surf { - highp vec4 pos; - highp vec2 hip_pack0; - highp vec4 lop_color; - highp vec3 lightDir; - highp vec3 viewDir; - highp vec2 _LightCoord; -}; -varying highp vec2 xlv_TEXCOORD3; -varying highp vec3 xlv_TEXCOORD2; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_COLOR0; -varying highp vec2 xlv_TEXCOORD0; -uniform mediump float _TranslucencyViewDependency; -uniform sampler2D _TranslucencyMap; -uniform mediump vec3 _TranslucencyColor; -uniform mediump float _ShadowStrength; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform highp vec4 _LightColor0; -uniform highp float _Cutoff; -uniform highp vec4 _Color; -uniform sampler2D _BumpSpecMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -mediump vec4 UnpackNormal ( - in mediump vec4 packednormal -) -{ - mediump vec4 normal; - mediump vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - mediump float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - mediump float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout LeafSurfaceOutput o -) -{ - mediump vec4 norspc; - mediump vec4 trngls; - mediump vec4 c; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - lowp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - highp vec3 tmpvar_3; - tmpvar_3 = ((c.xyz * _Color.xyz) * IN.color.w); - o.Albedo = tmpvar_3; - lowp vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - lowp vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - trngls = tmpvar_5; - mediump float tmpvar_6; - tmpvar_6 = trngls.z; - o.Translucency = tmpvar_6; - highp float tmpvar_7; - tmpvar_7 = (trngls.w * _Color.x); - o.Gloss = tmpvar_7; - mediump float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - lowp vec4 tmpvar_9; - tmpvar_9 = texture2D (_BumpSpecMap, IN.uv_MainTex); - lowp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - norspc = tmpvar_10; - mediump float tmpvar_11; - tmpvar_11 = norspc.x; - o.Specular = tmpvar_11; - mediump float tmpvar_12; - tmpvar_12 = norspc.z; - o.ShadowOffset = tmpvar_12; - mediump vec4 tmpvar_13; - tmpvar_13 = UnpackNormal (norspc); - mediump vec3 tmpvar_14; - tmpvar_14 = tmpvar_13.xyz; - mediump vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - o.Normal = tmpvar_15; -} - -mediump vec4 LightingTreeLeaf ( - in LeafSurfaceOutput s, - in mediump vec3 lightDir, - in mediump vec3 viewDir, - in mediump float atten -) -{ - mediump vec4 c; - mediump vec3 translucencyColor; - mediump float backContrib; - mediump float spec; - mediump float nh; - mediump float nl; - mediump vec3 h; - mediump vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - mediump vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - mediump float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - mediump float tmpvar_4; - tmpvar_4 = tmpvar_3; - nl = tmpvar_4; - mediump float tmpvar_5; - tmpvar_5 = dot (s.Normal, h); - mediump float tmpvar_6; - tmpvar_6 = max (0.0, tmpvar_5); - mediump float tmpvar_7; - tmpvar_7 = tmpvar_6; - nh = tmpvar_7; - mediump float tmpvar_8; - tmpvar_8 = pow (nh, (s.Specular * 128.0)); - mediump float tmpvar_9; - tmpvar_9 = (tmpvar_8 * s.Gloss); - spec = tmpvar_9; - mediump float tmpvar_10; - tmpvar_10 = dot (viewDir, -(lightDir)); - float tmpvar_11; - tmpvar_11 = xll_saturate (tmpvar_10); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - backContrib = tmpvar_12; - float tmpvar_13; - tmpvar_13 = xll_saturate (-(nl)); - mediump float tmpvar_14; - tmpvar_14 = mix (tmpvar_13, backContrib, _TranslucencyViewDependency); - mediump float tmpvar_15; - tmpvar_15 = tmpvar_14; - backContrib = tmpvar_15; - mediump vec3 tmpvar_16; - tmpvar_16 = ((backContrib * s.Translucency) * _TranslucencyColor); - translucencyColor = tmpvar_16; - mediump float tmpvar_17; - tmpvar_17 = max (0.0, ((nl * 0.6) + 0.4)); - mediump float tmpvar_18; - tmpvar_18 = tmpvar_17; - nl = tmpvar_18; - mediump vec3 tmpvar_19; - tmpvar_19 = (s.Albedo * ((translucencyColor * 2.0) + nl)); - c.xyz = tmpvar_19.xyz.xyz; - highp vec3 tmpvar_20; - tmpvar_20 = ((c.xyz * _LightColor0.xyz) + spec); - c.xyz = tmpvar_20.xyz.xyz; - mediump float tmpvar_21; - tmpvar_21 = mix (2.0, (atten * 2.0), _ShadowStrength); - mediump vec3 tmpvar_22; - tmpvar_22 = (c.xyz * tmpvar_21); - c.xyz = tmpvar_22.xyz.xyz; - return c; -} - -mediump vec4 xlat_main ( - in v2f_surf IN -) -{ - mediump vec4 c; - mediump vec3 lightDir; - LeafSurfaceOutput o; - Input surfIN; - highp vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - highp vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - highp vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - highp vec3 tmpvar_8; - tmpvar_8 = IN.viewDir.xyz; - highp vec3 tmpvar_9; - tmpvar_9 = normalize (tmpvar_8); - lowp vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, IN._LightCoord); - mediump vec4 tmpvar_11; - tmpvar_11 = LightingTreeLeaf (o, lightDir, tmpvar_9, (tmpvar_10.w * 1.0)); - mediump vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - mediump float tmpvar_13; - tmpvar_13 = o.Alpha; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - mediump vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - highp vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - highp vec4 tmpvar_4; - tmpvar_4 = xlv_COLOR0.xyzw; - highp vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.lop_color = tmpvar_5; - highp vec3 tmpvar_6; - tmpvar_6 = xlv_TEXCOORD1.xyz; - highp vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.lightDir = tmpvar_7; - highp vec3 tmpvar_8; - tmpvar_8 = xlv_TEXCOORD2.xyz; - highp vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.viewDir = tmpvar_9; - highp vec2 tmpvar_10; - tmpvar_10 = xlv_TEXCOORD3.xy; - highp vec2 tmpvar_11; - tmpvar_11 = tmpvar_10; - xlt_IN._LightCoord = tmpvar_11; - mediump vec4 tmpvar_12; - tmpvar_12 = xlat_main (xlt_IN); - mediump vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - xl_retval = tmpvar_13; - mediump vec4 tmpvar_14; - tmpvar_14 = xl_retval.xyzw; - mediump vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - gl_FragData[0] = tmpvar_15; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-out.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-out.txt deleted file mode 100644 index b4a71a944..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-out.txt +++ /dev/null @@ -1,51 +0,0 @@ -varying vec2 xlv_TEXCOORD3; -varying vec3 xlv_TEXCOORD2; -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_COLOR0; -varying vec2 xlv_TEXCOORD0; -uniform float _TranslucencyViewDependency; -uniform sampler2D _TranslucencyMap; -uniform vec3 _TranslucencyColor; -uniform float _ShadowStrength; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpSpecMap; -void main () -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, xlv_TEXCOORD0); - vec3 tmpvar_2; - tmpvar_2 = ((tmpvar_1.xyz * _Color.xyz) * xlv_COLOR0.w); - vec4 tmpvar_3; - tmpvar_3 = texture2D (_TranslucencyMap, xlv_TEXCOORD0); - float tmpvar_4; - tmpvar_4 = (tmpvar_3.w * _Color.x); - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpSpecMap, xlv_TEXCOORD0); - vec4 normal; - normal.xy = ((tmpvar_5.wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_6; - tmpvar_6 = normal.xyz; - float x; - x = (tmpvar_1.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 tmpvar_7; - tmpvar_7 = normalize (xlv_TEXCOORD2); - vec4 c_i0_i1; - float tmpvar_8; - tmpvar_8 = dot (tmpvar_6, xlv_TEXCOORD1); - c_i0_i1.xyz = (tmpvar_2 * ((((mix (clamp (-(tmpvar_8), 0.0, 1.0), clamp (dot (tmpvar_7, -(xlv_TEXCOORD1)), 0.0, 1.0), _TranslucencyViewDependency) * tmpvar_3.z) * _TranslucencyColor) * 2.0) + max (0.0, ((tmpvar_8 * 0.6) + 0.4)))); - c_i0_i1.xyz = ((c_i0_i1.xyz * _LightColor0.xyz) + (pow (max (0.0, dot (tmpvar_6, normalize ((xlv_TEXCOORD1 + tmpvar_7)))), (tmpvar_5.x * 128.0)) * tmpvar_4)); - c_i0_i1.xyz = (c_i0_i1.xyz * mix (2.0, (texture2D (_LightTexture0, xlv_TEXCOORD3).w * 2.0), _ShadowStrength)); - c = c_i0_i1; - c.w = tmpvar_1.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-outES.txt deleted file mode 100644 index 19d7c7461..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-outES.txt +++ /dev/null @@ -1,73 +0,0 @@ -varying highp vec2 xlv_TEXCOORD3; -varying highp vec3 xlv_TEXCOORD2; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_COLOR0; -varying highp vec2 xlv_TEXCOORD0; -uniform mediump float _TranslucencyViewDependency; -uniform sampler2D _TranslucencyMap; -uniform mediump vec3 _TranslucencyColor; -uniform mediump float _ShadowStrength; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform highp vec4 _LightColor0; -uniform highp float _Cutoff; -uniform highp vec4 _Color; -uniform sampler2D _BumpSpecMap; -void main () -{ - mediump vec4 c; - mediump vec3 lightDir; - mediump vec3 tmpvar_1; - mediump float tmpvar_2; - mediump vec4 norspc; - mediump vec4 trngls; - mediump vec4 c_i0; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, xlv_TEXCOORD0); - c_i0 = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = ((c_i0.xyz * _Color.xyz) * xlv_COLOR0.w); - tmpvar_1 = tmpvar_4; - lowp vec4 tmpvar_5; - tmpvar_5 = texture2D (_TranslucencyMap, xlv_TEXCOORD0); - trngls = tmpvar_5; - highp float tmpvar_6; - tmpvar_6 = (trngls.w * _Color.x); - tmpvar_2 = tmpvar_6; - lowp vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpSpecMap, xlv_TEXCOORD0); - norspc = tmpvar_7; - mediump vec4 normal; - normal.xy = ((norspc.wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - mediump vec3 tmpvar_8; - tmpvar_8 = normal.xyz; - highp float x; - x = (c_i0.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - lightDir = xlv_TEXCOORD1; - highp vec3 tmpvar_9; - tmpvar_9 = normalize (xlv_TEXCOORD2); - lowp vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, xlv_TEXCOORD3); - mediump vec3 viewDir; - viewDir = tmpvar_9; - mediump float atten; - atten = tmpvar_10.w; - mediump vec4 c_i0_i1; - mediump float tmpvar_11; - tmpvar_11 = dot (tmpvar_8, lightDir); - mediump float tmpvar_12; - tmpvar_12 = (pow (max (0.0, dot (tmpvar_8, normalize ((lightDir + viewDir)))), (norspc.x * 128.0)) * tmpvar_2); - c_i0_i1.xyz = (tmpvar_1 * ((((mix (clamp (-(tmpvar_11), 0.0, 1.0), clamp (dot (viewDir, -(lightDir)), 0.0, 1.0), _TranslucencyViewDependency) * trngls.z) * _TranslucencyColor) * 2.0) + max (0.0, ((tmpvar_11 * 0.6) + 0.4)))); - highp vec3 tmpvar_13; - tmpvar_13 = ((c_i0_i1.xyz * _LightColor0.xyz) + tmpvar_12); - c_i0_i1.xyz = tmpvar_13; - c_i0_i1.xyz = (c_i0_i1.xyz * mix (2.0, (atten * 2.0), _ShadowStrength)); - c = c_i0_i1; - c.w = c_i0.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/derivatives-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/derivatives-ir.txt index 8d819e1e9..98d0216d0 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/derivatives-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/derivatives-ir.txt @@ -1,251 +1,251 @@ varying vec4 xlv_TEXCOORD0; float xll_dFdx ( - in float f + in float f_1 ) { - float tmpvar_1; - tmpvar_1 = dFdx (f); - return tmpvar_1; + float tmpvar_2; + tmpvar_2 = dFdx (f_1); + return tmpvar_2; } vec2 xll_dFdx ( - in vec2 v + in vec2 v_3 ) { - vec2 tmpvar_1; - tmpvar_1 = dFdx (v); - return tmpvar_1; + vec2 tmpvar_4; + tmpvar_4 = dFdx (v_3); + return tmpvar_4; } vec3 xll_dFdx ( - in vec3 v + in vec3 v_5 ) { - vec3 tmpvar_1; - tmpvar_1 = dFdx (v); - return tmpvar_1; + vec3 tmpvar_6; + tmpvar_6 = dFdx (v_5); + return tmpvar_6; } vec4 xll_dFdx ( - in vec4 v + in vec4 v_7 ) { - vec4 tmpvar_1; - tmpvar_1 = dFdx (v); - return tmpvar_1; + vec4 tmpvar_8; + tmpvar_8 = dFdx (v_7); + return tmpvar_8; } mat2 xll_dFdx ( - in mat2 m + in mat2 m_9 ) { - vec2 tmpvar_1; - tmpvar_1 = dFdx (m[0]); - vec2 tmpvar_2; - tmpvar_2 = dFdx (m[1]); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; + vec2 tmpvar_10; + tmpvar_10 = dFdx (m_9[0]); + vec2 tmpvar_11; + tmpvar_11 = dFdx (m_9[1]); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; } mat3 xll_dFdx ( - in mat3 m + in mat3 m_15 ) { - vec3 tmpvar_1; - tmpvar_1 = dFdx (m[0]); - vec3 tmpvar_2; - tmpvar_2 = dFdx (m[1]); - vec3 tmpvar_3; - tmpvar_3 = dFdx (m[2]); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + vec3 tmpvar_16; + tmpvar_16 = dFdx (m_15[0]); + vec3 tmpvar_17; + tmpvar_17 = dFdx (m_15[1]); + vec3 tmpvar_18; + tmpvar_18 = dFdx (m_15[2]); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; } mat4 xll_dFdx ( - in mat4 m + in mat4 m_23 ) { - vec4 tmpvar_1; - tmpvar_1 = dFdx (m[0]); - vec4 tmpvar_2; - tmpvar_2 = dFdx (m[1]); - vec4 tmpvar_3; - tmpvar_3 = dFdx (m[2]); - vec4 tmpvar_4; - tmpvar_4 = dFdx (m[3]); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; + vec4 tmpvar_24; + tmpvar_24 = dFdx (m_23[0]); + vec4 tmpvar_25; + tmpvar_25 = dFdx (m_23[1]); + vec4 tmpvar_26; + tmpvar_26 = dFdx (m_23[2]); + vec4 tmpvar_27; + tmpvar_27 = dFdx (m_23[3]); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; } float xll_fwidth ( - in float f + in float f_33 ) { - float tmpvar_1; - tmpvar_1 = fwidth (f); - return tmpvar_1; + float tmpvar_34; + tmpvar_34 = fwidth (f_33); + return tmpvar_34; } vec2 xll_fwidth ( - in vec2 v + in vec2 v_35 ) { - vec2 tmpvar_1; - tmpvar_1 = fwidth (v); - return tmpvar_1; + vec2 tmpvar_36; + tmpvar_36 = fwidth (v_35); + return tmpvar_36; } vec3 xll_fwidth ( - in vec3 v + in vec3 v_37 ) { - vec3 tmpvar_1; - tmpvar_1 = fwidth (v); - return tmpvar_1; + vec3 tmpvar_38; + tmpvar_38 = fwidth (v_37); + return tmpvar_38; } vec4 xll_fwidth ( - in vec4 v + in vec4 v_39 ) { - vec4 tmpvar_1; - tmpvar_1 = fwidth (v); - return tmpvar_1; + vec4 tmpvar_40; + tmpvar_40 = fwidth (v_39); + return tmpvar_40; } mat2 xll_fwidth ( - in mat2 m + in mat2 m_41 ) { - vec2 tmpvar_1; - tmpvar_1 = fwidth (m[0]); - vec2 tmpvar_2; - tmpvar_2 = fwidth (m[1]); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; + vec2 tmpvar_42; + tmpvar_42 = fwidth (m_41[0]); + vec2 tmpvar_43; + tmpvar_43 = fwidth (m_41[1]); + mat2 tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = tmpvar_42; + tmpvar_44[0] = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_43; + tmpvar_44[1] = tmpvar_46; + return tmpvar_44; } mat3 xll_fwidth ( - in mat3 m + in mat3 m_47 ) { - vec3 tmpvar_1; - tmpvar_1 = fwidth (m[0]); - vec3 tmpvar_2; - tmpvar_2 = fwidth (m[1]); - vec3 tmpvar_3; - tmpvar_3 = fwidth (m[2]); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + vec3 tmpvar_48; + tmpvar_48 = fwidth (m_47[0]); + vec3 tmpvar_49; + tmpvar_49 = fwidth (m_47[1]); + vec3 tmpvar_50; + tmpvar_50 = fwidth (m_47[2]); + mat3 tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_48; + tmpvar_51[0] = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_49; + tmpvar_51[1] = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_50; + tmpvar_51[2] = tmpvar_54; + return tmpvar_51; } mat4 xll_fwidth ( - in mat4 m + in mat4 m_55 ) { - vec4 tmpvar_1; - tmpvar_1 = fwidth (m[0]); - vec4 tmpvar_2; - tmpvar_2 = fwidth (m[1]); - vec4 tmpvar_3; - tmpvar_3 = fwidth (m[2]); - vec4 tmpvar_4; - tmpvar_4 = fwidth (m[3]); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; + vec4 tmpvar_56; + tmpvar_56 = fwidth (m_55[0]); + vec4 tmpvar_57; + tmpvar_57 = fwidth (m_55[1]); + vec4 tmpvar_58; + tmpvar_58 = fwidth (m_55[2]); + vec4 tmpvar_59; + tmpvar_59 = fwidth (m_55[3]); + mat4 tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_56; + tmpvar_60[0] = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_57; + tmpvar_60[1] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_58; + tmpvar_60[2] = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_59; + tmpvar_60[3] = tmpvar_64; + return tmpvar_60; } vec4 xlat_main ( - in vec4 uv + in vec4 uv_65 ) { - vec4 res; - float tmpvar_1; - tmpvar_1 = xll_dFdx (uv.x); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - res.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = xll_dFdx (uv.y); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - res.y = vec2(tmpvar_4).y; - vec2 tmpvar_5; - tmpvar_5 = xll_fwidth (uv.xy); - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - res.zw = tmpvar_6.xxxy.zw; - return res; + vec4 res_66; + float tmpvar_67; + tmpvar_67 = xll_dFdx (uv_65.x); + float tmpvar_68; + tmpvar_68 = tmpvar_67; + res_66.x = tmpvar_68; + float tmpvar_69; + tmpvar_69 = xll_dFdx (uv_65.y); + float tmpvar_70; + tmpvar_70 = tmpvar_69; + res_66.y = vec2(tmpvar_70).y; + vec2 tmpvar_71; + tmpvar_71 = xll_fwidth (uv_65.xy); + vec2 tmpvar_72; + tmpvar_72 = tmpvar_71; + res_66.zw = tmpvar_72.xxxy.zw; + return res_66; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + vec4 xl_retval_73; + vec4 tmpvar_74; + tmpvar_74 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_75; + tmpvar_75 = xlat_main (tmpvar_74); + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xl_retval_73 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = xl_retval_73.xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + gl_FragData[0] = tmpvar_78; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/derivatives-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/derivatives-irES.txt index dc24c99ec..f97e7369a 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/derivatives-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/derivatives-irES.txt @@ -1,255 +1,255 @@ #extension GL_OES_standard_derivatives : enable varying highp vec4 xlv_TEXCOORD0; float xll_dFdx ( - in float f + in float f_1 ) { - float tmpvar_1; - tmpvar_1 = dFdx (f); - return tmpvar_1; + float tmpvar_2; + tmpvar_2 = dFdx (f_1); + return tmpvar_2; } vec2 xll_dFdx ( - in vec2 v + in vec2 v_3 ) { - vec2 tmpvar_1; - tmpvar_1 = dFdx (v); - return tmpvar_1; + vec2 tmpvar_4; + tmpvar_4 = dFdx (v_3); + return tmpvar_4; } vec3 xll_dFdx ( - in vec3 v + in vec3 v_5 ) { - vec3 tmpvar_1; - tmpvar_1 = dFdx (v); - return tmpvar_1; + vec3 tmpvar_6; + tmpvar_6 = dFdx (v_5); + return tmpvar_6; } vec4 xll_dFdx ( - in vec4 v + in vec4 v_7 ) { - vec4 tmpvar_1; - tmpvar_1 = dFdx (v); - return tmpvar_1; + vec4 tmpvar_8; + tmpvar_8 = dFdx (v_7); + return tmpvar_8; } mat2 xll_dFdx ( - in mat2 m + in mat2 m_9 ) { - vec2 tmpvar_1; - tmpvar_1 = dFdx (m[0]); - vec2 tmpvar_2; - tmpvar_2 = dFdx (m[1]); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; + vec2 tmpvar_10; + tmpvar_10 = dFdx (m_9[0]); + vec2 tmpvar_11; + tmpvar_11 = dFdx (m_9[1]); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; } mat3 xll_dFdx ( - in mat3 m + in mat3 m_15 ) { - vec3 tmpvar_1; - tmpvar_1 = dFdx (m[0]); - vec3 tmpvar_2; - tmpvar_2 = dFdx (m[1]); - vec3 tmpvar_3; - tmpvar_3 = dFdx (m[2]); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + vec3 tmpvar_16; + tmpvar_16 = dFdx (m_15[0]); + vec3 tmpvar_17; + tmpvar_17 = dFdx (m_15[1]); + vec3 tmpvar_18; + tmpvar_18 = dFdx (m_15[2]); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; } mat4 xll_dFdx ( - in mat4 m + in mat4 m_23 ) { - vec4 tmpvar_1; - tmpvar_1 = dFdx (m[0]); - vec4 tmpvar_2; - tmpvar_2 = dFdx (m[1]); - vec4 tmpvar_3; - tmpvar_3 = dFdx (m[2]); - vec4 tmpvar_4; - tmpvar_4 = dFdx (m[3]); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; + vec4 tmpvar_24; + tmpvar_24 = dFdx (m_23[0]); + vec4 tmpvar_25; + tmpvar_25 = dFdx (m_23[1]); + vec4 tmpvar_26; + tmpvar_26 = dFdx (m_23[2]); + vec4 tmpvar_27; + tmpvar_27 = dFdx (m_23[3]); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; } float xll_fwidth ( - in float f + in float f_33 ) { - float tmpvar_1; - tmpvar_1 = fwidth (f); - return tmpvar_1; + float tmpvar_34; + tmpvar_34 = fwidth (f_33); + return tmpvar_34; } vec2 xll_fwidth ( - in vec2 v + in vec2 v_35 ) { - vec2 tmpvar_1; - tmpvar_1 = fwidth (v); - return tmpvar_1; + vec2 tmpvar_36; + tmpvar_36 = fwidth (v_35); + return tmpvar_36; } vec3 xll_fwidth ( - in vec3 v + in vec3 v_37 ) { - vec3 tmpvar_1; - tmpvar_1 = fwidth (v); - return tmpvar_1; + vec3 tmpvar_38; + tmpvar_38 = fwidth (v_37); + return tmpvar_38; } vec4 xll_fwidth ( - in vec4 v + in vec4 v_39 ) { - vec4 tmpvar_1; - tmpvar_1 = fwidth (v); - return tmpvar_1; + vec4 tmpvar_40; + tmpvar_40 = fwidth (v_39); + return tmpvar_40; } mat2 xll_fwidth ( - in mat2 m + in mat2 m_41 ) { - vec2 tmpvar_1; - tmpvar_1 = fwidth (m[0]); - vec2 tmpvar_2; - tmpvar_2 = fwidth (m[1]); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; + vec2 tmpvar_42; + tmpvar_42 = fwidth (m_41[0]); + vec2 tmpvar_43; + tmpvar_43 = fwidth (m_41[1]); + mat2 tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = tmpvar_42; + tmpvar_44[0] = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_43; + tmpvar_44[1] = tmpvar_46; + return tmpvar_44; } mat3 xll_fwidth ( - in mat3 m + in mat3 m_47 ) { - vec3 tmpvar_1; - tmpvar_1 = fwidth (m[0]); - vec3 tmpvar_2; - tmpvar_2 = fwidth (m[1]); - vec3 tmpvar_3; - tmpvar_3 = fwidth (m[2]); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + vec3 tmpvar_48; + tmpvar_48 = fwidth (m_47[0]); + vec3 tmpvar_49; + tmpvar_49 = fwidth (m_47[1]); + vec3 tmpvar_50; + tmpvar_50 = fwidth (m_47[2]); + mat3 tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_48; + tmpvar_51[0] = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_49; + tmpvar_51[1] = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_50; + tmpvar_51[2] = tmpvar_54; + return tmpvar_51; } mat4 xll_fwidth ( - in mat4 m + in mat4 m_55 ) { - vec4 tmpvar_1; - tmpvar_1 = fwidth (m[0]); - vec4 tmpvar_2; - tmpvar_2 = fwidth (m[1]); - vec4 tmpvar_3; - tmpvar_3 = fwidth (m[2]); - vec4 tmpvar_4; - tmpvar_4 = fwidth (m[3]); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; + vec4 tmpvar_56; + tmpvar_56 = fwidth (m_55[0]); + vec4 tmpvar_57; + tmpvar_57 = fwidth (m_55[1]); + vec4 tmpvar_58; + tmpvar_58 = fwidth (m_55[2]); + vec4 tmpvar_59; + tmpvar_59 = fwidth (m_55[3]); + mat4 tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_56; + tmpvar_60[0] = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_57; + tmpvar_60[1] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_58; + tmpvar_60[2] = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_59; + tmpvar_60[3] = tmpvar_64; + return tmpvar_60; } mediump vec4 xlat_main ( - in highp vec4 uv + in highp vec4 uv_65 ) { - lowp vec4 res; - float tmpvar_1; - tmpvar_1 = xll_dFdx (uv.x); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - res.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = xll_dFdx (uv.y); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - res.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = xll_fwidth (uv.z); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - res.z = vec3(tmpvar_6).z; - float tmpvar_7; - tmpvar_7 = 1.0; - res.w = vec4(tmpvar_7).w; - return res; + lowp vec4 res_66; + float tmpvar_67; + tmpvar_67 = xll_dFdx (uv_65.x); + float tmpvar_68; + tmpvar_68 = tmpvar_67; + res_66.x = tmpvar_68; + float tmpvar_69; + tmpvar_69 = xll_dFdx (uv_65.y); + float tmpvar_70; + tmpvar_70 = tmpvar_69; + res_66.y = vec2(tmpvar_70).y; + float tmpvar_71; + tmpvar_71 = xll_fwidth (uv_65.z); + float tmpvar_72; + tmpvar_72 = tmpvar_71; + res_66.z = vec3(tmpvar_72).z; + float tmpvar_73; + tmpvar_73 = 1.0; + res_66.w = vec4(tmpvar_73).w; + return res_66; } void main () { - mediump vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - mediump vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - mediump vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - mediump vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - mediump vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + mediump vec4 xl_retval_74; + highp vec4 tmpvar_75; + tmpvar_75 = xlv_TEXCOORD0.xyzw; + mediump vec4 tmpvar_76; + tmpvar_76 = xlat_main (tmpvar_75); + mediump vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + xl_retval_74 = tmpvar_77; + mediump vec4 tmpvar_78; + tmpvar_78 = xl_retval_74.xyzw; + mediump vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + gl_FragData[0] = tmpvar_79; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/derivatives-out.txt b/3rdparty/glsl-optimizer/tests/fragment/derivatives-out.txt index 873a91a1c..c48d9620f 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/derivatives-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/derivatives-out.txt @@ -1,10 +1,10 @@ varying vec4 xlv_TEXCOORD0; void main () { - vec4 res; - res.x = dFdx (xlv_TEXCOORD0.x); - res.y = dFdx (xlv_TEXCOORD0.y); - res.zw = fwidth (xlv_TEXCOORD0.xy); - gl_FragData[0] = res; + vec4 res_1; + res_1.x = dFdx(xlv_TEXCOORD0.x); + res_1.y = dFdx(xlv_TEXCOORD0.y); + res_1.zw = (abs(dFdx(xlv_TEXCOORD0.xy)) + abs(dFdy(xlv_TEXCOORD0.xy))); + gl_FragData[0] = res_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/derivatives-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/derivatives-outES.txt index ef0eff769..2f163265a 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/derivatives-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/derivatives-outES.txt @@ -3,18 +3,18 @@ varying highp vec4 xlv_TEXCOORD0; void main () { mediump vec4 tmpvar_1; - lowp vec4 res; - highp float tmpvar_2; - tmpvar_2 = dFdx (xlv_TEXCOORD0.x); - res.x = tmpvar_2; + lowp vec4 res_2; highp float tmpvar_3; - tmpvar_3 = dFdx (xlv_TEXCOORD0.y); - res.y = tmpvar_3; + tmpvar_3 = dFdx(xlv_TEXCOORD0.x); + res_2.x = tmpvar_3; highp float tmpvar_4; - tmpvar_4 = fwidth (xlv_TEXCOORD0.z); - res.z = tmpvar_4; - res.w = 1.0; - tmpvar_1 = res; + tmpvar_4 = dFdx(xlv_TEXCOORD0.y); + res_2.y = tmpvar_4; + highp float tmpvar_5; + tmpvar_5 = (abs(dFdx(xlv_TEXCOORD0.z)) + abs(dFdy(xlv_TEXCOORD0.z))); + res_2.z = tmpvar_5; + res_2.w = 1.0; + tmpvar_1 = res_2; gl_FragData[0] = tmpvar_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/estest1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/estest1-ir.txt index 14838950e..025c48c14 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/estest1-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/estest1-ir.txt @@ -9,46 +9,46 @@ uniform sampler2D _MainTex; uniform sampler2D _Detail; uniform vec4 _Color; vec4 frag ( - in v2f i + in v2f i_1 ) { - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv0); - vec4 tmpvar_2; - tmpvar_2 = (_Color * tmpvar_1); - c = tmpvar_2; + vec4 c_2; vec4 tmpvar_3; - tmpvar_3 = texture2D (_Detail, i.uv1); + tmpvar_3 = texture2D (_MainTex, i_1.uv0); vec4 tmpvar_4; - tmpvar_4 = ((c * tmpvar_3) * 2.0); - c = tmpvar_4; - return c; + tmpvar_4 = (_Color * tmpvar_3); + c_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_Detail, i_1.uv1); + vec4 tmpvar_6; + tmpvar_6 = ((c_2 * tmpvar_5) * 2.0); + c_2 = tmpvar_6; + return c_2; } void main () { - v2f xlt_i; - vec4 xl_retval; - vec2 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xy; - vec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_i.uv0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = xlv_TEXCOORD1.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.uv1 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = frag (xlt_i); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_FragData[0] = tmpvar_8; + v2f xlt_i_7; + vec4 xl_retval_8; + vec2 tmpvar_9; + tmpvar_9 = xlv_TEXCOORD0.xy; + vec2 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_7.uv0 = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = xlv_TEXCOORD1.xy; + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_7.uv1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = frag (xlt_i_7); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_8 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_8.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-in.txt b/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-in.txt new file mode 100644 index 000000000..2d055164a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-in.txt @@ -0,0 +1,22 @@ +#version 120 + +uniform float inInit = 13.0; // accept uniform initializers +uniform mat4x3 nonSqMat; // non square matrices + +void main() +{ + const float cosPI = cos(3.1415); // built-in calls in constant initializers + + vec4 v; + v.x = 1.2f; // accepts 'f' suffix + v.y = 5; // automatic int-to-float + v.z = inInit; + v.w = cosPI; + v.x += nonSqMat[0][0]; + + float arr[4] = float[](1,2,3,4); // array initializer + v.y += arr[0]; + v.z += arr.length(); // array length + + gl_FragColor = v; +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-ir.txt new file mode 100644 index 000000000..0197ab03b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-ir.txt @@ -0,0 +1,40 @@ +#version 120 +uniform mat4x3 nonSqMat; +uniform float inInit = 13.0; +void main () +{ + float arr_1[4]; + vec4 v_2; + float cosPI_3 = -1.0; + float tmpvar_4; + tmpvar_4 = -1.0; + cosPI_3 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = 1.2; + v_2.x = tmpvar_5; + float tmpvar_6; + tmpvar_6 = float(5); + v_2.y = vec2(tmpvar_6).y; + float tmpvar_7; + tmpvar_7 = inInit; + v_2.z = vec3(tmpvar_7).z; + float tmpvar_8; + tmpvar_8 = cosPI_3; + v_2.w = vec4(tmpvar_8).w; + float tmpvar_9; + tmpvar_9 = (v_2.x + nonSqMat[0][0]); + v_2.x = tmpvar_9; + float tmpvar_10[4]; + tmpvar_10 = float[4](1.0, 2.0, 3.0, 4.0); + arr_1 = tmpvar_10; + float tmpvar_11; + tmpvar_11 = (v_2.y + arr_1[0]); + v_2.y = vec2(tmpvar_11).y; + float tmpvar_12; + tmpvar_12 = (v_2.z + float(4)); + v_2.z = vec3(tmpvar_12).z; + vec4 tmpvar_13; + tmpvar_13 = v_2; + gl_FragColor = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-out.txt b/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-out.txt new file mode 100644 index 000000000..322ee8fb4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-out.txt @@ -0,0 +1,13 @@ +#version 120 +uniform mat4x3 nonSqMat; +uniform float inInit = 13.0; +void main () +{ + vec4 v_1; + v_1.w = -1.0; + v_1.x = (1.2 + nonSqMat[0].x); + v_1.y = 6.0; + v_1.z = (inInit + 4.0); + gl_FragColor = v_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-in.txt b/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-in.txt new file mode 100644 index 000000000..29c2a9e92 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-in.txt @@ -0,0 +1,10 @@ +#version 140 + +in vec4 col; + +out vec4 fragCol; + +void main(void) +{ + fragCol = col; +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-ir.txt new file mode 100644 index 000000000..4b17b9c50 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-ir.txt @@ -0,0 +1,10 @@ +#version 140 +out vec4 fragCol; +in vec4 col; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = col; + fragCol = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-out.txt b/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-out.txt new file mode 100644 index 000000000..d8e963f8d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/glsl140-basic-out.txt @@ -0,0 +1,8 @@ +#version 140 +out vec4 fragCol; +in vec4 col; +void main () +{ + fragCol = col; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-ir.txt index c0e0e010e..10b55932b 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-ir.txt @@ -4,45 +4,45 @@ struct v2f { vec4 color; }; vec4 xlat_main ( - in v2f i + in v2f i_1 ) { - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = i.color; - c = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (c.xy + i.uv); - c.xy = tmpvar_2.xy.xy; - return c; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = i_1.color; + c_2 = tmpvar_3; + vec2 tmpvar_4; + tmpvar_4 = (c_2.xy + i_1.uv); + c_2.xy = tmpvar_4.xy.xy; + return c_2; } void main () { - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = gl_Color.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.color = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); + v2f xlt_i_5; + vec4 xl_retval_6; vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; + tmpvar_7 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_5.pos = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = gl_TexCoord[0].xy; + vec2 tmpvar_9; tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; + xlt_i_5.uv = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Color.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_i_5.color = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xlat_main (xlt_i_5); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + xl_retval_6 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = xl_retval_6.xyzw; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + gl_FragData[0] = tmpvar_15; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-irES.txt index 797151917..be574875c 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-irES.txt @@ -6,45 +6,45 @@ struct v2f { varying highp vec4 xlv_COLOR; varying highp vec2 xlv_TEXCOORD0; mediump vec4 xlat_main ( - in v2f i + in v2f i_1 ) { - mediump vec4 c; - highp vec4 tmpvar_1; - tmpvar_1 = i.color; - c = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = (c.xy + i.uv); - c.xy = tmpvar_2.xy.xy; - return c; + mediump vec4 c_2; + highp vec4 tmpvar_3; + tmpvar_3 = i_1.color; + c_2 = tmpvar_3; + highp vec2 tmpvar_4; + tmpvar_4 = (c_2.xy + i_1.uv); + c_2.xy = tmpvar_4.xy.xy; + return c_2; } void main () { - v2f xlt_i; - mediump vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - highp vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - highp vec4 tmpvar_4; - tmpvar_4 = xlv_COLOR.xyzw; - highp vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.color = tmpvar_5; - mediump vec4 tmpvar_6; - tmpvar_6 = xlat_main (xlt_i); - mediump vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - mediump vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - mediump vec4 tmpvar_9; + v2f xlt_i_5; + mediump vec4 xl_retval_6; + vec4 tmpvar_7; + tmpvar_7 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_5.pos = tmpvar_7; + highp vec2 tmpvar_8; + tmpvar_8 = xlv_TEXCOORD0.xy; + highp vec2 tmpvar_9; tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; + xlt_i_5.uv = tmpvar_9; + highp vec4 tmpvar_10; + tmpvar_10 = xlv_COLOR.xyzw; + highp vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_i_5.color = tmpvar_11; + mediump vec4 tmpvar_12; + tmpvar_12 = xlat_main (xlt_i_5); + mediump vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + xl_retval_6 = tmpvar_13; + mediump vec4 tmpvar_14; + tmpvar_14 = xl_retval_6.xyzw; + mediump vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + gl_FragData[0] = tmpvar_15; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-out.txt b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-out.txt index 24e4470f1..e922e7839 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-out.txt @@ -1,8 +1,8 @@ void main () { - vec4 c; - c = gl_Color; - c.xy = (gl_Color.xy + gl_TexCoord[0].xy); - gl_FragData[0] = c; + vec4 c_1; + c_1.zw = gl_Color.zw; + c_1.xy = (gl_Color.xy + gl_TexCoord[0].xy); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-outES.txt index 6ae677127..9e7a1640d 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/in-struct-ret-vals-outES.txt @@ -2,11 +2,11 @@ varying highp vec4 xlv_COLOR; varying highp vec2 xlv_TEXCOORD0; void main () { - mediump vec4 c; - c = xlv_COLOR; - highp vec2 tmpvar_1; - tmpvar_1 = (c.xy + xlv_TEXCOORD0); - c.xy = tmpvar_1; - gl_FragData[0] = c; + mediump vec4 c_1; + c_1 = xlv_COLOR; + highp vec2 tmpvar_2; + tmpvar_2 = (c_1.xy + xlv_TEXCOORD0); + c_1.xy = tmpvar_2; + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-irES.txt index 362b5c034..e4e250fa9 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-irES.txt @@ -1,36 +1,36 @@ varying highp vec4 xlv_COLOR; varying highp vec2 xlv_TEXCOORD0; mediump vec4 xlat_main ( - in highp vec2 uv, - in highp vec4 color + in highp vec2 uv_1, + in highp vec4 color_2 ) { - mediump vec4 c; - highp vec4 tmpvar_1; - tmpvar_1 = color; - c = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = (c.xy + uv); - c.xy = tmpvar_2.xy.xy; - return c; + mediump vec4 c_3; + highp vec4 tmpvar_4; + tmpvar_4 = color_2; + c_3 = tmpvar_4; + highp vec2 tmpvar_5; + tmpvar_5 = (c_3.xy + uv_1); + c_3.xy = tmpvar_5.xy.xy; + return c_3; } void main () { - mediump vec4 xl_retval; - highp vec2 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xy; - highp vec4 tmpvar_2; - tmpvar_2 = xlv_COLOR.xyzw; - mediump vec4 tmpvar_3; - tmpvar_3 = xlat_main (tmpvar_1, tmpvar_2); - mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - mediump vec4 tmpvar_5; - tmpvar_5 = xl_retval.xyzw; - mediump vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_FragData[0] = tmpvar_6; + mediump vec4 xl_retval_6; + highp vec2 tmpvar_7; + tmpvar_7 = xlv_TEXCOORD0.xy; + highp vec4 tmpvar_8; + tmpvar_8 = xlv_COLOR.xyzw; + mediump vec4 tmpvar_9; + tmpvar_9 = xlat_main (tmpvar_7, tmpvar_8); + mediump vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + xl_retval_6 = tmpvar_10; + mediump vec4 tmpvar_11; + tmpvar_11 = xl_retval_6.xyzw; + mediump vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + gl_FragData[0] = tmpvar_12; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-outES.txt index 6ae677127..9e7a1640d 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/in-vals-ret-vals-outES.txt @@ -2,11 +2,11 @@ varying highp vec4 xlv_COLOR; varying highp vec2 xlv_TEXCOORD0; void main () { - mediump vec4 c; - c = xlv_COLOR; - highp vec2 tmpvar_1; - tmpvar_1 = (c.xy + xlv_TEXCOORD0); - c.xy = tmpvar_1; - gl_FragData[0] = c; + mediump vec4 c_1; + c_1 = xlv_COLOR; + highp vec2 tmpvar_2; + tmpvar_2 = (c_1.xy + xlv_TEXCOORD0); + c_1.xy = tmpvar_2; + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-ir.txt index 10684968f..f07919a52 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-ir.txt @@ -1,350 +1,350 @@ varying vec4 xlv_TEXCOORD0; float xll_mod ( - in float x, - in float y + in float x_1, + in float y_2 ) { - float f; - float d; - float tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - float tmpvar_2; - tmpvar_2 = abs (d); - float tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - float tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; + float f_3; + float d_4; float tmpvar_5; - if ((d >= 0.0)) { - tmpvar_5 = f; - } else { - tmpvar_5 = -(f); - }; - return tmpvar_5; -} - -vec2 xll_mod ( - in vec2 x, - in vec2 y -) -{ - vec2 f; - vec2 d; - vec2 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = abs (d); - vec2 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec2 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; + tmpvar_5 = (x_1 / y_2); + d_4 = tmpvar_5; float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; - vec2 tmpvar_7; - tmpvar_7.x = tmpvar_5; - tmpvar_7.y = tmpvar_6; - return tmpvar_7; -} - -vec3 xll_mod ( - in vec3 x, - in vec3 y -) -{ - vec3 f; - vec3 d; - vec3 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = abs (d); - vec3 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; - float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; + tmpvar_6 = abs (d_4); float tmpvar_7; - if ((d.z >= 0.0)) { - tmpvar_7 = f.z; - } else { - tmpvar_7 = -(f.z); - }; - vec3 tmpvar_8; - tmpvar_8.x = tmpvar_5; - tmpvar_8.y = tmpvar_6; - tmpvar_8.z = tmpvar_7; - return tmpvar_8; -} - -vec4 xll_mod ( - in vec4 x, - in vec4 y -) -{ - vec4 f; - vec4 d; - vec4 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = abs (d); - vec4 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; - float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; - float tmpvar_7; - if ((d.z >= 0.0)) { - tmpvar_7 = f.z; - } else { - tmpvar_7 = -(f.z); - }; + tmpvar_7 = fract (tmpvar_6); float tmpvar_8; - if ((d.w >= 0.0)) { - tmpvar_8 = f.w; + tmpvar_8 = (tmpvar_7 * y_2); + f_3 = tmpvar_8; + float tmpvar_9; + if ((d_4 >= 0.0)) { + tmpvar_9 = f_3; } else { - tmpvar_8 = -(f.w); + tmpvar_9 = -(f_3); }; - vec4 tmpvar_9; - tmpvar_9.x = tmpvar_5; - tmpvar_9.y = tmpvar_6; - tmpvar_9.z = tmpvar_7; - tmpvar_9.w = tmpvar_8; return tmpvar_9; } -float xll_modf ( - in float x, - out int ip +vec2 xll_mod ( + in vec2 x_10, + in vec2 y_11 ) { - int tmpvar_1; - tmpvar_1 = int(x); - ip = tmpvar_1; - return (x - float(ip)); + vec2 f_12; + vec2 d_13; + vec2 tmpvar_14; + tmpvar_14 = (x_10 / y_11); + d_13 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = abs (d_13); + vec2 tmpvar_16; + tmpvar_16 = fract (tmpvar_15); + vec2 tmpvar_17; + tmpvar_17 = (tmpvar_16 * y_11); + f_12 = tmpvar_17; + float tmpvar_18; + if ((d_13.x >= 0.0)) { + tmpvar_18 = f_12.x; + } else { + tmpvar_18 = -(f_12.x); + }; + float tmpvar_19; + if ((d_13.y >= 0.0)) { + tmpvar_19 = f_12.y; + } else { + tmpvar_19 = -(f_12.y); + }; + vec2 tmpvar_20; + tmpvar_20.x = tmpvar_18; + tmpvar_20.y = tmpvar_19; + return tmpvar_20; +} + +vec3 xll_mod ( + in vec3 x_21, + in vec3 y_22 +) +{ + vec3 f_23; + vec3 d_24; + vec3 tmpvar_25; + tmpvar_25 = (x_21 / y_22); + d_24 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = abs (d_24); + vec3 tmpvar_27; + tmpvar_27 = fract (tmpvar_26); + vec3 tmpvar_28; + tmpvar_28 = (tmpvar_27 * y_22); + f_23 = tmpvar_28; + float tmpvar_29; + if ((d_24.x >= 0.0)) { + tmpvar_29 = f_23.x; + } else { + tmpvar_29 = -(f_23.x); + }; + float tmpvar_30; + if ((d_24.y >= 0.0)) { + tmpvar_30 = f_23.y; + } else { + tmpvar_30 = -(f_23.y); + }; + float tmpvar_31; + if ((d_24.z >= 0.0)) { + tmpvar_31 = f_23.z; + } else { + tmpvar_31 = -(f_23.z); + }; + vec3 tmpvar_32; + tmpvar_32.x = tmpvar_29; + tmpvar_32.y = tmpvar_30; + tmpvar_32.z = tmpvar_31; + return tmpvar_32; +} + +vec4 xll_mod ( + in vec4 x_33, + in vec4 y_34 +) +{ + vec4 f_35; + vec4 d_36; + vec4 tmpvar_37; + tmpvar_37 = (x_33 / y_34); + d_36 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = abs (d_36); + vec4 tmpvar_39; + tmpvar_39 = fract (tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = (tmpvar_39 * y_34); + f_35 = tmpvar_40; + float tmpvar_41; + if ((d_36.x >= 0.0)) { + tmpvar_41 = f_35.x; + } else { + tmpvar_41 = -(f_35.x); + }; + float tmpvar_42; + if ((d_36.y >= 0.0)) { + tmpvar_42 = f_35.y; + } else { + tmpvar_42 = -(f_35.y); + }; + float tmpvar_43; + if ((d_36.z >= 0.0)) { + tmpvar_43 = f_35.z; + } else { + tmpvar_43 = -(f_35.z); + }; + float tmpvar_44; + if ((d_36.w >= 0.0)) { + tmpvar_44 = f_35.w; + } else { + tmpvar_44 = -(f_35.w); + }; + vec4 tmpvar_45; + tmpvar_45.x = tmpvar_41; + tmpvar_45.y = tmpvar_42; + tmpvar_45.z = tmpvar_43; + tmpvar_45.w = tmpvar_44; + return tmpvar_45; } float xll_modf ( - in float x, - out float ip + in float x_46, + out int ip_47 ) { - int i; - int tmpvar_1; - tmpvar_1 = int(x); - i = tmpvar_1; - float tmpvar_2; - tmpvar_2 = float(i); - ip = tmpvar_2; - return (x - ip); + int tmpvar_48; + tmpvar_48 = int(x_46); + ip_47 = tmpvar_48; + return (x_46 - float(ip_47)); +} + +float xll_modf ( + in float x_49, + out float ip_50 +) +{ + int i_51; + int tmpvar_52; + tmpvar_52 = int(x_49); + i_51 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = float(i_51); + ip_50 = tmpvar_53; + return (x_49 - ip_50); } vec2 xll_modf ( - in vec2 x, - out ivec2 ip + in vec2 x_54, + out ivec2 ip_55 ) { - ivec2 tmpvar_1; - tmpvar_1 = ivec2(x).xy; - ivec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - ip = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(ip).xy; - return (x - tmpvar_3); + ivec2 tmpvar_56; + tmpvar_56 = ivec2(x_54).xy; + ivec2 tmpvar_57; + tmpvar_57 = tmpvar_56; + ip_55 = tmpvar_57; + vec2 tmpvar_58; + tmpvar_58 = vec2(ip_55).xy; + return (x_54 - tmpvar_58); } vec2 xll_modf ( - in vec2 x, - out vec2 ip + in vec2 x_59, + out vec2 ip_60 ) { - ivec2 i; - ivec2 tmpvar_1; - tmpvar_1 = ivec2(x).xy; - ivec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - i = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(i).xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - ip = tmpvar_4; - return (x - ip); + ivec2 i_61; + ivec2 tmpvar_62; + tmpvar_62 = ivec2(x_59).xy; + ivec2 tmpvar_63; + tmpvar_63 = tmpvar_62; + i_61 = tmpvar_63; + vec2 tmpvar_64; + tmpvar_64 = vec2(i_61).xy; + vec2 tmpvar_65; + tmpvar_65 = tmpvar_64; + ip_60 = tmpvar_65; + return (x_59 - ip_60); } vec3 xll_modf ( - in vec3 x, - out ivec3 ip + in vec3 x_66, + out ivec3 ip_67 ) { - ivec3 tmpvar_1; - tmpvar_1 = ivec3(x).xyz; - ivec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - ip = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(ip).xyz; - return (x - tmpvar_3); + ivec3 tmpvar_68; + tmpvar_68 = ivec3(x_66).xyz; + ivec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + ip_67 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = vec3(ip_67).xyz; + return (x_66 - tmpvar_70); } vec3 xll_modf ( - in vec3 x, - out vec3 ip + in vec3 x_71, + out vec3 ip_72 ) { - ivec3 i; - ivec3 tmpvar_1; - tmpvar_1 = ivec3(x).xyz; - ivec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - i = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(i).xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - ip = tmpvar_4; - return (x - ip); + ivec3 i_73; + ivec3 tmpvar_74; + tmpvar_74 = ivec3(x_71).xyz; + ivec3 tmpvar_75; + tmpvar_75 = tmpvar_74; + i_73 = tmpvar_75; + vec3 tmpvar_76; + tmpvar_76 = vec3(i_73).xyz; + vec3 tmpvar_77; + tmpvar_77 = tmpvar_76; + ip_72 = tmpvar_77; + return (x_71 - ip_72); } vec4 xll_modf ( - in vec4 x, - out ivec4 ip + in vec4 x_78, + out ivec4 ip_79 ) { - ivec4 tmpvar_1; - tmpvar_1 = ivec4(x).xyzw; - ivec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - ip = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(ip).xyzw; - return (x - tmpvar_3); + ivec4 tmpvar_80; + tmpvar_80 = ivec4(x_78).xyzw; + ivec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + ip_79 = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = vec4(ip_79).xyzw; + return (x_78 - tmpvar_82); } vec4 xll_modf ( - in vec4 x, - out vec4 ip + in vec4 x_83, + out vec4 ip_84 ) { - ivec4 i; - ivec4 tmpvar_1; - tmpvar_1 = ivec4(x).xyzw; - ivec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - i = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(i).xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - ip = tmpvar_4; - return (x - ip); + ivec4 i_85; + ivec4 tmpvar_86; + tmpvar_86 = ivec4(x_83).xyzw; + ivec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + i_85 = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = vec4(i_85).xyzw; + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + ip_84 = tmpvar_89; + return (x_83 - ip_84); } vec4 xlat_main ( - in vec4 uv + in vec4 uv_90 ) { - vec4 d; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xll_mod (uv.x, 2.0); - float tmpvar_3; - tmpvar_3 = (c.x + tmpvar_2); - c.x = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = xll_mod (uv.xy, vec2(2.0, 2.0)); - vec2 tmpvar_5; - tmpvar_5 = (c.xy + tmpvar_4); - c.xy = tmpvar_5.xy.xy; - vec3 tmpvar_6; - tmpvar_6 = xll_mod (uv.xyz, vec3(2.0, 2.0, 2.0)); - vec3 tmpvar_7; - tmpvar_7 = (c.xyz + tmpvar_6); - c.xyz = tmpvar_7.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = xll_mod (uv.xyzw, vec4(2.0, 2.0, 2.0, 2.0)); - vec4 tmpvar_9; - tmpvar_9 = (c.xyzw + tmpvar_8); - c = tmpvar_9.xyzw.xyzw; - float tmpvar_10; - tmpvar_10 = xll_modf (uv.x, d.x); - float tmpvar_11; - tmpvar_11 = (c.x + tmpvar_10); - c.x = tmpvar_11; - vec2 tmpvar_12; - tmpvar_12 = xll_modf (uv.xy, d.xy); - vec2 tmpvar_13; - tmpvar_13 = (c.xy + tmpvar_12); - c.xy = tmpvar_13.xy.xy; - vec3 tmpvar_14; - tmpvar_14 = xll_modf (uv.xyz, d.xyz); - vec3 tmpvar_15; - tmpvar_15 = (c.xyz + tmpvar_14); - c.xyz = tmpvar_15.xyz.xyz; - vec4 tmpvar_16; - tmpvar_16 = xll_modf (uv.xyzw, d.xyzw); - vec4 tmpvar_17; - tmpvar_17 = (c.xyzw + tmpvar_16); - c = tmpvar_17.xyzw.xyzw; - return c; + vec4 d_91; + vec4 c_92; + vec4 tmpvar_93; + tmpvar_93 = vec4(0.0, 0.0, 0.0, 0.0); + c_92 = tmpvar_93; + float tmpvar_94; + tmpvar_94 = xll_mod (uv_90.x, 2.0); + float tmpvar_95; + tmpvar_95 = (c_92.x + tmpvar_94); + c_92.x = tmpvar_95; + vec2 tmpvar_96; + tmpvar_96 = xll_mod (uv_90.xy, vec2(2.0, 2.0)); + vec2 tmpvar_97; + tmpvar_97 = (c_92.xy + tmpvar_96); + c_92.xy = tmpvar_97.xy.xy; + vec3 tmpvar_98; + tmpvar_98 = xll_mod (uv_90.xyz, vec3(2.0, 2.0, 2.0)); + vec3 tmpvar_99; + tmpvar_99 = (c_92.xyz + tmpvar_98); + c_92.xyz = tmpvar_99.xyz.xyz; + vec4 tmpvar_100; + tmpvar_100 = xll_mod (uv_90.xyzw, vec4(2.0, 2.0, 2.0, 2.0)); + vec4 tmpvar_101; + tmpvar_101 = (c_92.xyzw + tmpvar_100); + c_92 = tmpvar_101.xyzw.xyzw; + float tmpvar_102; + tmpvar_102 = xll_modf (uv_90.x, d_91.x); + float tmpvar_103; + tmpvar_103 = (c_92.x + tmpvar_102); + c_92.x = tmpvar_103; + vec2 tmpvar_104; + tmpvar_104 = xll_modf (uv_90.xy, d_91.xy); + vec2 tmpvar_105; + tmpvar_105 = (c_92.xy + tmpvar_104); + c_92.xy = tmpvar_105.xy.xy; + vec3 tmpvar_106; + tmpvar_106 = xll_modf (uv_90.xyz, d_91.xyz); + vec3 tmpvar_107; + tmpvar_107 = (c_92.xyz + tmpvar_106); + c_92.xyz = tmpvar_107.xyz.xyz; + vec4 tmpvar_108; + tmpvar_108 = xll_modf (uv_90.xyzw, d_91.xyzw); + vec4 tmpvar_109; + tmpvar_109 = (c_92.xyzw + tmpvar_108); + c_92 = tmpvar_109.xyzw.xyzw; + return c_92; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + vec4 xl_retval_110; + vec4 tmpvar_111; + tmpvar_111 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_112; + tmpvar_112 = xlat_main (tmpvar_111); + vec4 tmpvar_113; + tmpvar_113 = tmpvar_112; + xl_retval_110 = tmpvar_113; + vec4 tmpvar_114; + tmpvar_114 = xl_retval_110.xyzw; + vec4 tmpvar_115; + tmpvar_115 = tmpvar_114; + gl_FragData[0] = tmpvar_115; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-irES.txt index c22f272eb..e2d0a597d 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-irES.txt @@ -1,350 +1,350 @@ varying highp vec4 xlv_TEXCOORD0; float xll_mod ( - in float x, - in float y + in float x_1, + in float y_2 ) { - float f; - float d; - float tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - float tmpvar_2; - tmpvar_2 = abs (d); - float tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - float tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; + float f_3; + float d_4; float tmpvar_5; - if ((d >= 0.0)) { - tmpvar_5 = f; - } else { - tmpvar_5 = -(f); - }; - return tmpvar_5; -} - -vec2 xll_mod ( - in vec2 x, - in vec2 y -) -{ - vec2 f; - vec2 d; - vec2 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = abs (d); - vec2 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec2 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; + tmpvar_5 = (x_1 / y_2); + d_4 = tmpvar_5; float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; - vec2 tmpvar_7; - tmpvar_7.x = tmpvar_5; - tmpvar_7.y = tmpvar_6; - return tmpvar_7; -} - -vec3 xll_mod ( - in vec3 x, - in vec3 y -) -{ - vec3 f; - vec3 d; - vec3 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = abs (d); - vec3 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; - float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; + tmpvar_6 = abs (d_4); float tmpvar_7; - if ((d.z >= 0.0)) { - tmpvar_7 = f.z; - } else { - tmpvar_7 = -(f.z); - }; - vec3 tmpvar_8; - tmpvar_8.x = tmpvar_5; - tmpvar_8.y = tmpvar_6; - tmpvar_8.z = tmpvar_7; - return tmpvar_8; -} - -vec4 xll_mod ( - in vec4 x, - in vec4 y -) -{ - vec4 f; - vec4 d; - vec4 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = abs (d); - vec4 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; - float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; - float tmpvar_7; - if ((d.z >= 0.0)) { - tmpvar_7 = f.z; - } else { - tmpvar_7 = -(f.z); - }; + tmpvar_7 = fract (tmpvar_6); float tmpvar_8; - if ((d.w >= 0.0)) { - tmpvar_8 = f.w; + tmpvar_8 = (tmpvar_7 * y_2); + f_3 = tmpvar_8; + float tmpvar_9; + if ((d_4 >= 0.0)) { + tmpvar_9 = f_3; } else { - tmpvar_8 = -(f.w); + tmpvar_9 = -(f_3); }; - vec4 tmpvar_9; - tmpvar_9.x = tmpvar_5; - tmpvar_9.y = tmpvar_6; - tmpvar_9.z = tmpvar_7; - tmpvar_9.w = tmpvar_8; return tmpvar_9; } -float xll_modf ( - in float x, - out int ip +vec2 xll_mod ( + in vec2 x_10, + in vec2 y_11 ) { - int tmpvar_1; - tmpvar_1 = int(x); - ip = tmpvar_1; - return (x - float(ip)); + vec2 f_12; + vec2 d_13; + vec2 tmpvar_14; + tmpvar_14 = (x_10 / y_11); + d_13 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = abs (d_13); + vec2 tmpvar_16; + tmpvar_16 = fract (tmpvar_15); + vec2 tmpvar_17; + tmpvar_17 = (tmpvar_16 * y_11); + f_12 = tmpvar_17; + float tmpvar_18; + if ((d_13.x >= 0.0)) { + tmpvar_18 = f_12.x; + } else { + tmpvar_18 = -(f_12.x); + }; + float tmpvar_19; + if ((d_13.y >= 0.0)) { + tmpvar_19 = f_12.y; + } else { + tmpvar_19 = -(f_12.y); + }; + vec2 tmpvar_20; + tmpvar_20.x = tmpvar_18; + tmpvar_20.y = tmpvar_19; + return tmpvar_20; +} + +vec3 xll_mod ( + in vec3 x_21, + in vec3 y_22 +) +{ + vec3 f_23; + vec3 d_24; + vec3 tmpvar_25; + tmpvar_25 = (x_21 / y_22); + d_24 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = abs (d_24); + vec3 tmpvar_27; + tmpvar_27 = fract (tmpvar_26); + vec3 tmpvar_28; + tmpvar_28 = (tmpvar_27 * y_22); + f_23 = tmpvar_28; + float tmpvar_29; + if ((d_24.x >= 0.0)) { + tmpvar_29 = f_23.x; + } else { + tmpvar_29 = -(f_23.x); + }; + float tmpvar_30; + if ((d_24.y >= 0.0)) { + tmpvar_30 = f_23.y; + } else { + tmpvar_30 = -(f_23.y); + }; + float tmpvar_31; + if ((d_24.z >= 0.0)) { + tmpvar_31 = f_23.z; + } else { + tmpvar_31 = -(f_23.z); + }; + vec3 tmpvar_32; + tmpvar_32.x = tmpvar_29; + tmpvar_32.y = tmpvar_30; + tmpvar_32.z = tmpvar_31; + return tmpvar_32; +} + +vec4 xll_mod ( + in vec4 x_33, + in vec4 y_34 +) +{ + vec4 f_35; + vec4 d_36; + vec4 tmpvar_37; + tmpvar_37 = (x_33 / y_34); + d_36 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = abs (d_36); + vec4 tmpvar_39; + tmpvar_39 = fract (tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = (tmpvar_39 * y_34); + f_35 = tmpvar_40; + float tmpvar_41; + if ((d_36.x >= 0.0)) { + tmpvar_41 = f_35.x; + } else { + tmpvar_41 = -(f_35.x); + }; + float tmpvar_42; + if ((d_36.y >= 0.0)) { + tmpvar_42 = f_35.y; + } else { + tmpvar_42 = -(f_35.y); + }; + float tmpvar_43; + if ((d_36.z >= 0.0)) { + tmpvar_43 = f_35.z; + } else { + tmpvar_43 = -(f_35.z); + }; + float tmpvar_44; + if ((d_36.w >= 0.0)) { + tmpvar_44 = f_35.w; + } else { + tmpvar_44 = -(f_35.w); + }; + vec4 tmpvar_45; + tmpvar_45.x = tmpvar_41; + tmpvar_45.y = tmpvar_42; + tmpvar_45.z = tmpvar_43; + tmpvar_45.w = tmpvar_44; + return tmpvar_45; } float xll_modf ( - in float x, - out float ip + in float x_46, + out int ip_47 ) { - int i; - int tmpvar_1; - tmpvar_1 = int(x); - i = tmpvar_1; - float tmpvar_2; - tmpvar_2 = float(i); - ip = tmpvar_2; - return (x - ip); + int tmpvar_48; + tmpvar_48 = int(x_46); + ip_47 = tmpvar_48; + return (x_46 - float(ip_47)); +} + +float xll_modf ( + in float x_49, + out float ip_50 +) +{ + int i_51; + int tmpvar_52; + tmpvar_52 = int(x_49); + i_51 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = float(i_51); + ip_50 = tmpvar_53; + return (x_49 - ip_50); } vec2 xll_modf ( - in vec2 x, - out ivec2 ip + in vec2 x_54, + out ivec2 ip_55 ) { - ivec2 tmpvar_1; - tmpvar_1 = ivec2(x).xy; - ivec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - ip = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(ip).xy; - return (x - tmpvar_3); + ivec2 tmpvar_56; + tmpvar_56 = ivec2(x_54).xy; + ivec2 tmpvar_57; + tmpvar_57 = tmpvar_56; + ip_55 = tmpvar_57; + vec2 tmpvar_58; + tmpvar_58 = vec2(ip_55).xy; + return (x_54 - tmpvar_58); } vec2 xll_modf ( - in vec2 x, - out vec2 ip + in vec2 x_59, + out vec2 ip_60 ) { - ivec2 i; - ivec2 tmpvar_1; - tmpvar_1 = ivec2(x).xy; - ivec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - i = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = vec2(i).xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - ip = tmpvar_4; - return (x - ip); + ivec2 i_61; + ivec2 tmpvar_62; + tmpvar_62 = ivec2(x_59).xy; + ivec2 tmpvar_63; + tmpvar_63 = tmpvar_62; + i_61 = tmpvar_63; + vec2 tmpvar_64; + tmpvar_64 = vec2(i_61).xy; + vec2 tmpvar_65; + tmpvar_65 = tmpvar_64; + ip_60 = tmpvar_65; + return (x_59 - ip_60); } vec3 xll_modf ( - in vec3 x, - out ivec3 ip + in vec3 x_66, + out ivec3 ip_67 ) { - ivec3 tmpvar_1; - tmpvar_1 = ivec3(x).xyz; - ivec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - ip = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(ip).xyz; - return (x - tmpvar_3); + ivec3 tmpvar_68; + tmpvar_68 = ivec3(x_66).xyz; + ivec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + ip_67 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = vec3(ip_67).xyz; + return (x_66 - tmpvar_70); } vec3 xll_modf ( - in vec3 x, - out vec3 ip + in vec3 x_71, + out vec3 ip_72 ) { - ivec3 i; - ivec3 tmpvar_1; - tmpvar_1 = ivec3(x).xyz; - ivec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - i = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(i).xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - ip = tmpvar_4; - return (x - ip); + ivec3 i_73; + ivec3 tmpvar_74; + tmpvar_74 = ivec3(x_71).xyz; + ivec3 tmpvar_75; + tmpvar_75 = tmpvar_74; + i_73 = tmpvar_75; + vec3 tmpvar_76; + tmpvar_76 = vec3(i_73).xyz; + vec3 tmpvar_77; + tmpvar_77 = tmpvar_76; + ip_72 = tmpvar_77; + return (x_71 - ip_72); } vec4 xll_modf ( - in vec4 x, - out ivec4 ip + in vec4 x_78, + out ivec4 ip_79 ) { - ivec4 tmpvar_1; - tmpvar_1 = ivec4(x).xyzw; - ivec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - ip = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(ip).xyzw; - return (x - tmpvar_3); + ivec4 tmpvar_80; + tmpvar_80 = ivec4(x_78).xyzw; + ivec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + ip_79 = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = vec4(ip_79).xyzw; + return (x_78 - tmpvar_82); } vec4 xll_modf ( - in vec4 x, - out vec4 ip + in vec4 x_83, + out vec4 ip_84 ) { - ivec4 i; - ivec4 tmpvar_1; - tmpvar_1 = ivec4(x).xyzw; - ivec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - i = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(i).xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - ip = tmpvar_4; - return (x - ip); + ivec4 i_85; + ivec4 tmpvar_86; + tmpvar_86 = ivec4(x_83).xyzw; + ivec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + i_85 = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = vec4(i_85).xyzw; + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + ip_84 = tmpvar_89; + return (x_83 - ip_84); } mediump vec4 xlat_main ( - in highp vec4 uv + in highp vec4 uv_90 ) { - mediump vec4 d; - mediump vec4 c; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xll_mod (uv.x, 2.0); - mediump float tmpvar_3; - tmpvar_3 = (c.x + tmpvar_2); - c.x = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = xll_mod (uv.xy, vec2(2.0, 2.0)); - mediump vec2 tmpvar_5; - tmpvar_5 = (c.xy + tmpvar_4); - c.xy = tmpvar_5.xy.xy; - vec3 tmpvar_6; - tmpvar_6 = xll_mod (uv.xyz, vec3(2.0, 2.0, 2.0)); - mediump vec3 tmpvar_7; - tmpvar_7 = (c.xyz + tmpvar_6); - c.xyz = tmpvar_7.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = xll_mod (uv.xyzw, vec4(2.0, 2.0, 2.0, 2.0)); - mediump vec4 tmpvar_9; - tmpvar_9 = (c.xyzw + tmpvar_8); - c = tmpvar_9.xyzw.xyzw; - float tmpvar_10; - tmpvar_10 = xll_modf (uv.x, d.x); - mediump float tmpvar_11; - tmpvar_11 = (c.x + tmpvar_10); - c.x = tmpvar_11; - vec2 tmpvar_12; - tmpvar_12 = xll_modf (uv.xy, d.xy); - mediump vec2 tmpvar_13; - tmpvar_13 = (c.xy + tmpvar_12); - c.xy = tmpvar_13.xy.xy; - vec3 tmpvar_14; - tmpvar_14 = xll_modf (uv.xyz, d.xyz); - mediump vec3 tmpvar_15; - tmpvar_15 = (c.xyz + tmpvar_14); - c.xyz = tmpvar_15.xyz.xyz; - vec4 tmpvar_16; - tmpvar_16 = xll_modf (uv.xyzw, d.xyzw); - mediump vec4 tmpvar_17; - tmpvar_17 = (c.xyzw + tmpvar_16); - c = tmpvar_17.xyzw.xyzw; - return c; + mediump vec4 d_91; + mediump vec4 c_92; + vec4 tmpvar_93; + tmpvar_93 = vec4(0.0, 0.0, 0.0, 0.0); + c_92 = tmpvar_93; + float tmpvar_94; + tmpvar_94 = xll_mod (uv_90.x, 2.0); + mediump float tmpvar_95; + tmpvar_95 = (c_92.x + tmpvar_94); + c_92.x = tmpvar_95; + vec2 tmpvar_96; + tmpvar_96 = xll_mod (uv_90.xy, vec2(2.0, 2.0)); + mediump vec2 tmpvar_97; + tmpvar_97 = (c_92.xy + tmpvar_96); + c_92.xy = tmpvar_97.xy.xy; + vec3 tmpvar_98; + tmpvar_98 = xll_mod (uv_90.xyz, vec3(2.0, 2.0, 2.0)); + mediump vec3 tmpvar_99; + tmpvar_99 = (c_92.xyz + tmpvar_98); + c_92.xyz = tmpvar_99.xyz.xyz; + vec4 tmpvar_100; + tmpvar_100 = xll_mod (uv_90.xyzw, vec4(2.0, 2.0, 2.0, 2.0)); + mediump vec4 tmpvar_101; + tmpvar_101 = (c_92.xyzw + tmpvar_100); + c_92 = tmpvar_101.xyzw.xyzw; + float tmpvar_102; + tmpvar_102 = xll_modf (uv_90.x, d_91.x); + mediump float tmpvar_103; + tmpvar_103 = (c_92.x + tmpvar_102); + c_92.x = tmpvar_103; + vec2 tmpvar_104; + tmpvar_104 = xll_modf (uv_90.xy, d_91.xy); + mediump vec2 tmpvar_105; + tmpvar_105 = (c_92.xy + tmpvar_104); + c_92.xy = tmpvar_105.xy.xy; + vec3 tmpvar_106; + tmpvar_106 = xll_modf (uv_90.xyz, d_91.xyz); + mediump vec3 tmpvar_107; + tmpvar_107 = (c_92.xyz + tmpvar_106); + c_92.xyz = tmpvar_107.xyz.xyz; + vec4 tmpvar_108; + tmpvar_108 = xll_modf (uv_90.xyzw, d_91.xyzw); + mediump vec4 tmpvar_109; + tmpvar_109 = (c_92.xyzw + tmpvar_108); + c_92 = tmpvar_109.xyzw.xyzw; + return c_92; } void main () { - mediump vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - mediump vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - mediump vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - mediump vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - mediump vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + mediump vec4 xl_retval_110; + highp vec4 tmpvar_111; + tmpvar_111 = xlv_TEXCOORD0.xyzw; + mediump vec4 tmpvar_112; + tmpvar_112 = xlat_main (tmpvar_111); + mediump vec4 tmpvar_113; + tmpvar_113 = tmpvar_112; + xl_retval_110 = tmpvar_113; + mediump vec4 tmpvar_114; + tmpvar_114 = xl_retval_110.xyzw; + mediump vec4 tmpvar_115; + tmpvar_115 = tmpvar_114; + gl_FragData[0] = tmpvar_115; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-out.txt b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-out.txt index 37687485f..db3545934 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-out.txt @@ -1,104 +1,104 @@ varying vec4 xlv_TEXCOORD0; void main () { - vec4 c; - c = vec4(0.0, 0.0, 0.0, 0.0); - float tmpvar_1; - tmpvar_1 = (xlv_TEXCOORD0.x / 2.0); + vec4 c_1; + c_1 = vec4(0.0, 0.0, 0.0, 0.0); float tmpvar_2; - tmpvar_2 = (fract (abs (tmpvar_1)) * 2.0); + tmpvar_2 = (xlv_TEXCOORD0.x / 2.0); float tmpvar_3; - if ((tmpvar_1 >= 0.0)) { - tmpvar_3 = tmpvar_2; + tmpvar_3 = (fract(abs(tmpvar_2)) * 2.0); + float tmpvar_4; + if ((tmpvar_2 >= 0.0)) { + tmpvar_4 = tmpvar_3; } else { - tmpvar_3 = -(tmpvar_2); + tmpvar_4 = -(tmpvar_3); }; - c.x = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = (xlv_TEXCOORD0.xy / vec2(2.0, 2.0)); + c_1.x = tmpvar_4; vec2 tmpvar_5; - tmpvar_5 = (fract (abs (tmpvar_4)) * vec2(2.0, 2.0)); - float tmpvar_6; - if ((tmpvar_4.x >= 0.0)) { - tmpvar_6 = tmpvar_5.x; - } else { - tmpvar_6 = -(tmpvar_5.x); - }; + tmpvar_5 = (xlv_TEXCOORD0.xy / vec2(2.0, 2.0)); + vec2 tmpvar_6; + tmpvar_6 = (fract(abs(tmpvar_5)) * vec2(2.0, 2.0)); float tmpvar_7; - if ((tmpvar_4.y >= 0.0)) { - tmpvar_7 = tmpvar_5.y; + if ((tmpvar_5.x >= 0.0)) { + tmpvar_7 = tmpvar_6.x; } else { - tmpvar_7 = -(tmpvar_5.y); + tmpvar_7 = -(tmpvar_6.x); }; - vec2 tmpvar_8; - tmpvar_8.x = tmpvar_6; - tmpvar_8.y = tmpvar_7; - c.xy = (c.xy + tmpvar_8); - vec3 tmpvar_9; - tmpvar_9 = (xlv_TEXCOORD0.xyz / vec3(2.0, 2.0, 2.0)); + float tmpvar_8; + if ((tmpvar_5.y >= 0.0)) { + tmpvar_8 = tmpvar_6.y; + } else { + tmpvar_8 = -(tmpvar_6.y); + }; + vec2 tmpvar_9; + tmpvar_9.x = tmpvar_7; + tmpvar_9.y = tmpvar_8; + c_1.xy = (c_1.xy + tmpvar_9); vec3 tmpvar_10; - tmpvar_10 = (fract (abs (tmpvar_9)) * vec3(2.0, 2.0, 2.0)); - float tmpvar_11; - if ((tmpvar_9.x >= 0.0)) { - tmpvar_11 = tmpvar_10.x; - } else { - tmpvar_11 = -(tmpvar_10.x); - }; + tmpvar_10 = (xlv_TEXCOORD0.xyz / vec3(2.0, 2.0, 2.0)); + vec3 tmpvar_11; + tmpvar_11 = (fract(abs(tmpvar_10)) * vec3(2.0, 2.0, 2.0)); float tmpvar_12; - if ((tmpvar_9.y >= 0.0)) { - tmpvar_12 = tmpvar_10.y; + if ((tmpvar_10.x >= 0.0)) { + tmpvar_12 = tmpvar_11.x; } else { - tmpvar_12 = -(tmpvar_10.y); + tmpvar_12 = -(tmpvar_11.x); }; float tmpvar_13; - if ((tmpvar_9.z >= 0.0)) { - tmpvar_13 = tmpvar_10.z; + if ((tmpvar_10.y >= 0.0)) { + tmpvar_13 = tmpvar_11.y; } else { - tmpvar_13 = -(tmpvar_10.z); + tmpvar_13 = -(tmpvar_11.y); }; - vec3 tmpvar_14; - tmpvar_14.x = tmpvar_11; - tmpvar_14.y = tmpvar_12; - tmpvar_14.z = tmpvar_13; - c.xyz = (c.xyz + tmpvar_14); - vec4 tmpvar_15; - tmpvar_15 = (xlv_TEXCOORD0 / vec4(2.0, 2.0, 2.0, 2.0)); + float tmpvar_14; + if ((tmpvar_10.z >= 0.0)) { + tmpvar_14 = tmpvar_11.z; + } else { + tmpvar_14 = -(tmpvar_11.z); + }; + vec3 tmpvar_15; + tmpvar_15.x = tmpvar_12; + tmpvar_15.y = tmpvar_13; + tmpvar_15.z = tmpvar_14; + c_1.xyz = (c_1.xyz + tmpvar_15); vec4 tmpvar_16; - tmpvar_16 = (fract (abs (tmpvar_15)) * vec4(2.0, 2.0, 2.0, 2.0)); - float tmpvar_17; - if ((tmpvar_15.x >= 0.0)) { - tmpvar_17 = tmpvar_16.x; - } else { - tmpvar_17 = -(tmpvar_16.x); - }; + tmpvar_16 = (xlv_TEXCOORD0 / vec4(2.0, 2.0, 2.0, 2.0)); + vec4 tmpvar_17; + tmpvar_17 = (fract(abs(tmpvar_16)) * vec4(2.0, 2.0, 2.0, 2.0)); float tmpvar_18; - if ((tmpvar_15.y >= 0.0)) { - tmpvar_18 = tmpvar_16.y; + if ((tmpvar_16.x >= 0.0)) { + tmpvar_18 = tmpvar_17.x; } else { - tmpvar_18 = -(tmpvar_16.y); + tmpvar_18 = -(tmpvar_17.x); }; float tmpvar_19; - if ((tmpvar_15.z >= 0.0)) { - tmpvar_19 = tmpvar_16.z; + if ((tmpvar_16.y >= 0.0)) { + tmpvar_19 = tmpvar_17.y; } else { - tmpvar_19 = -(tmpvar_16.z); + tmpvar_19 = -(tmpvar_17.y); }; float tmpvar_20; - if ((tmpvar_15.w >= 0.0)) { - tmpvar_20 = tmpvar_16.w; + if ((tmpvar_16.z >= 0.0)) { + tmpvar_20 = tmpvar_17.z; } else { - tmpvar_20 = -(tmpvar_16.w); + tmpvar_20 = -(tmpvar_17.z); }; - vec4 tmpvar_21; - tmpvar_21.x = tmpvar_17; - tmpvar_21.y = tmpvar_18; - tmpvar_21.z = tmpvar_19; - tmpvar_21.w = tmpvar_20; - c = (c + tmpvar_21); - c.x = (c.x + (xlv_TEXCOORD0.x - float(int(xlv_TEXCOORD0.x)))); - c.xy = (c.xy + (xlv_TEXCOORD0.xy - vec2(ivec2(xlv_TEXCOORD0.xy)))); - c.xyz = (c.xyz + (xlv_TEXCOORD0.xyz - vec3(ivec3(xlv_TEXCOORD0.xyz)))); - c = (c + (xlv_TEXCOORD0 - vec4(ivec4(xlv_TEXCOORD0)))); - gl_FragData[0] = c; + float tmpvar_21; + if ((tmpvar_16.w >= 0.0)) { + tmpvar_21 = tmpvar_17.w; + } else { + tmpvar_21 = -(tmpvar_17.w); + }; + vec4 tmpvar_22; + tmpvar_22.x = tmpvar_18; + tmpvar_22.y = tmpvar_19; + tmpvar_22.z = tmpvar_20; + tmpvar_22.w = tmpvar_21; + c_1 = (c_1 + tmpvar_22); + c_1.x = (c_1.x + (xlv_TEXCOORD0.x - float(int(xlv_TEXCOORD0.x)))); + c_1.xy = (c_1.xy + (xlv_TEXCOORD0.xy - vec2(ivec2(xlv_TEXCOORD0.xy)))); + c_1.xyz = (c_1.xyz + (xlv_TEXCOORD0.xyz - vec3(ivec3(xlv_TEXCOORD0.xyz)))); + c_1 = (c_1 + (xlv_TEXCOORD0 - vec4(ivec4(xlv_TEXCOORD0)))); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES.txt index 14d638f6e..ed5cd9407 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES.txt @@ -1,104 +1,128 @@ varying highp vec4 xlv_TEXCOORD0; void main () { - mediump vec4 c; - c = vec4(0.0, 0.0, 0.0, 0.0); - float tmpvar_1; - tmpvar_1 = (xlv_TEXCOORD0.x / 2.0); - float tmpvar_2; - tmpvar_2 = (fract (abs (tmpvar_1)) * 2.0); - float tmpvar_3; - if ((tmpvar_1 >= 0.0)) { - tmpvar_3 = tmpvar_2; + mediump vec4 c_1; + c_1 = vec4(0.0, 0.0, 0.0, 0.0); + highp float tmpvar_2; + tmpvar_2 = (xlv_TEXCOORD0.x / 2.0); + highp float tmpvar_3; + tmpvar_3 = (fract(abs(tmpvar_2)) * 2.0); + highp float tmpvar_4; + if ((tmpvar_2 >= 0.0)) { + tmpvar_4 = tmpvar_3; } else { - tmpvar_3 = -(tmpvar_2); + tmpvar_4 = -(tmpvar_3); }; - c.x = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = (xlv_TEXCOORD0.xy / vec2(2.0, 2.0)); - vec2 tmpvar_5; - tmpvar_5 = (fract (abs (tmpvar_4)) * vec2(2.0, 2.0)); - float tmpvar_6; - if ((tmpvar_4.x >= 0.0)) { - tmpvar_6 = tmpvar_5.x; + c_1.x = tmpvar_4; + highp vec2 tmpvar_5; + tmpvar_5 = (xlv_TEXCOORD0.xy / vec2(2.0, 2.0)); + highp vec2 tmpvar_6; + tmpvar_6 = (fract(abs(tmpvar_5)) * vec2(2.0, 2.0)); + highp float tmpvar_7; + if ((tmpvar_5.x >= 0.0)) { + tmpvar_7 = tmpvar_6.x; } else { - tmpvar_6 = -(tmpvar_5.x); + tmpvar_7 = -(tmpvar_6.x); }; - float tmpvar_7; - if ((tmpvar_4.y >= 0.0)) { - tmpvar_7 = tmpvar_5.y; + highp float tmpvar_8; + if ((tmpvar_5.y >= 0.0)) { + tmpvar_8 = tmpvar_6.y; } else { - tmpvar_7 = -(tmpvar_5.y); + tmpvar_8 = -(tmpvar_6.y); }; - vec2 tmpvar_8; - tmpvar_8.x = tmpvar_6; - tmpvar_8.y = tmpvar_7; - c.xy = (c.xy + tmpvar_8); - vec3 tmpvar_9; - tmpvar_9 = (xlv_TEXCOORD0.xyz / vec3(2.0, 2.0, 2.0)); - vec3 tmpvar_10; - tmpvar_10 = (fract (abs (tmpvar_9)) * vec3(2.0, 2.0, 2.0)); - float tmpvar_11; - if ((tmpvar_9.x >= 0.0)) { - tmpvar_11 = tmpvar_10.x; + highp vec2 tmpvar_9; + tmpvar_9.x = tmpvar_7; + tmpvar_9.y = tmpvar_8; + c_1.xy = (c_1.xy + tmpvar_9); + highp vec3 tmpvar_10; + tmpvar_10 = (xlv_TEXCOORD0.xyz / vec3(2.0, 2.0, 2.0)); + highp vec3 tmpvar_11; + tmpvar_11 = (fract(abs(tmpvar_10)) * vec3(2.0, 2.0, 2.0)); + highp float tmpvar_12; + if ((tmpvar_10.x >= 0.0)) { + tmpvar_12 = tmpvar_11.x; } else { - tmpvar_11 = -(tmpvar_10.x); + tmpvar_12 = -(tmpvar_11.x); }; - float tmpvar_12; - if ((tmpvar_9.y >= 0.0)) { - tmpvar_12 = tmpvar_10.y; + highp float tmpvar_13; + if ((tmpvar_10.y >= 0.0)) { + tmpvar_13 = tmpvar_11.y; } else { - tmpvar_12 = -(tmpvar_10.y); + tmpvar_13 = -(tmpvar_11.y); }; - float tmpvar_13; - if ((tmpvar_9.z >= 0.0)) { - tmpvar_13 = tmpvar_10.z; + highp float tmpvar_14; + if ((tmpvar_10.z >= 0.0)) { + tmpvar_14 = tmpvar_11.z; } else { - tmpvar_13 = -(tmpvar_10.z); + tmpvar_14 = -(tmpvar_11.z); }; - vec3 tmpvar_14; - tmpvar_14.x = tmpvar_11; - tmpvar_14.y = tmpvar_12; - tmpvar_14.z = tmpvar_13; - c.xyz = (c.xyz + tmpvar_14); - vec4 tmpvar_15; - tmpvar_15 = (xlv_TEXCOORD0 / vec4(2.0, 2.0, 2.0, 2.0)); - vec4 tmpvar_16; - tmpvar_16 = (fract (abs (tmpvar_15)) * vec4(2.0, 2.0, 2.0, 2.0)); - float tmpvar_17; - if ((tmpvar_15.x >= 0.0)) { - tmpvar_17 = tmpvar_16.x; + highp vec3 tmpvar_15; + tmpvar_15.x = tmpvar_12; + tmpvar_15.y = tmpvar_13; + tmpvar_15.z = tmpvar_14; + c_1.xyz = (c_1.xyz + tmpvar_15); + highp vec4 tmpvar_16; + tmpvar_16 = (xlv_TEXCOORD0 / vec4(2.0, 2.0, 2.0, 2.0)); + highp vec4 tmpvar_17; + tmpvar_17 = (fract(abs(tmpvar_16)) * vec4(2.0, 2.0, 2.0, 2.0)); + highp float tmpvar_18; + if ((tmpvar_16.x >= 0.0)) { + tmpvar_18 = tmpvar_17.x; } else { - tmpvar_17 = -(tmpvar_16.x); + tmpvar_18 = -(tmpvar_17.x); }; - float tmpvar_18; - if ((tmpvar_15.y >= 0.0)) { - tmpvar_18 = tmpvar_16.y; + highp float tmpvar_19; + if ((tmpvar_16.y >= 0.0)) { + tmpvar_19 = tmpvar_17.y; } else { - tmpvar_18 = -(tmpvar_16.y); + tmpvar_19 = -(tmpvar_17.y); }; - float tmpvar_19; - if ((tmpvar_15.z >= 0.0)) { - tmpvar_19 = tmpvar_16.z; + highp float tmpvar_20; + if ((tmpvar_16.z >= 0.0)) { + tmpvar_20 = tmpvar_17.z; } else { - tmpvar_19 = -(tmpvar_16.z); + tmpvar_20 = -(tmpvar_17.z); }; - float tmpvar_20; - if ((tmpvar_15.w >= 0.0)) { - tmpvar_20 = tmpvar_16.w; + highp float tmpvar_21; + if ((tmpvar_16.w >= 0.0)) { + tmpvar_21 = tmpvar_17.w; } else { - tmpvar_20 = -(tmpvar_16.w); + tmpvar_21 = -(tmpvar_17.w); }; - vec4 tmpvar_21; - tmpvar_21.x = tmpvar_17; - tmpvar_21.y = tmpvar_18; - tmpvar_21.z = tmpvar_19; - tmpvar_21.w = tmpvar_20; - c = (c + tmpvar_21); - c.x = (c.x + (xlv_TEXCOORD0.x - float(int(xlv_TEXCOORD0.x)))); - c.xy = (c.xy + (xlv_TEXCOORD0.xy - vec2(ivec2(xlv_TEXCOORD0.xy)))); - c.xyz = (c.xyz + (xlv_TEXCOORD0.xyz - vec3(ivec3(xlv_TEXCOORD0.xyz)))); - c = (c + (xlv_TEXCOORD0 - vec4(ivec4(xlv_TEXCOORD0)))); - gl_FragData[0] = c; + highp vec4 tmpvar_22; + tmpvar_22.x = tmpvar_18; + tmpvar_22.y = tmpvar_19; + tmpvar_22.z = tmpvar_20; + tmpvar_22.w = tmpvar_21; + c_1 = (c_1 + tmpvar_22); + highp float tmpvar_23; + mediump float ip_24; + highp float tmpvar_25; + tmpvar_25 = float(int(xlv_TEXCOORD0.x)); + ip_24 = tmpvar_25; + tmpvar_23 = (xlv_TEXCOORD0.x - ip_24); + c_1.x = (c_1.x + tmpvar_23); + highp vec2 tmpvar_26; + mediump vec2 ip_27; + highp vec2 tmpvar_28; + tmpvar_28 = vec2(ivec2(xlv_TEXCOORD0.xy)); + ip_27 = tmpvar_28; + tmpvar_26 = (xlv_TEXCOORD0.xy - ip_27); + c_1.xy = (c_1.xy + tmpvar_26); + highp vec3 tmpvar_29; + mediump vec3 ip_30; + highp vec3 tmpvar_31; + tmpvar_31 = vec3(ivec3(xlv_TEXCOORD0.xyz)); + ip_30 = tmpvar_31; + tmpvar_29 = (xlv_TEXCOORD0.xyz - ip_30); + c_1.xyz = (c_1.xyz + tmpvar_29); + highp vec4 tmpvar_32; + mediump vec4 ip_33; + highp vec4 tmpvar_34; + tmpvar_34 = vec4(ivec4(xlv_TEXCOORD0)); + ip_33 = tmpvar_34; + tmpvar_32 = (xlv_TEXCOORD0 - ip_33); + c_1 = (c_1 + tmpvar_32); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-for-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-for-inES.txt new file mode 100644 index 000000000..d62b7bdc6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-for-inES.txt @@ -0,0 +1,23 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +uniform sampler2D _MainTex; +uniform highp vec4 _TerrainTreeLightColors[4]; +lowp vec4 xlat_main (in v2f i) { + highp int j = 0; + lowp vec4 col = texture2D( _MainTex, i.uv); + mediump vec3 light = vec3(0.0); + for ( ; (j < 3); (j++)) { + light += col.xyz * i.nl[j] * _TerrainTreeLightColors[j].xyz; + } + return vec4(light, 1.0); +} +varying highp vec2 xlv_uv; +varying highp vec3 xlv_nl; +void main() { + v2f i; + i.uv = xlv_uv; + i.nl = xlv_nl; + gl_FragData[0] = xlat_main(i); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-for-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-for-irES.txt new file mode 100644 index 000000000..c1e60564a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-for-irES.txt @@ -0,0 +1,61 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +lowp vec4 xlat_main ( + in v2f i_1 +) +{ + mediump vec3 light_2; + lowp vec4 col_3; + int j_4; + int tmpvar_5; + tmpvar_5 = 0; + j_4 = tmpvar_5; + lowp vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, i_1.uv); + lowp vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + col_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = vec3(0.0, 0.0, 0.0); + light_2 = tmpvar_8; + while (true) { + if (!((j_4 < 3))) { + break; + }; + highp vec3 tmpvar_9; + tmpvar_9 = (light_2 + ((col_3.xyz * i_1.nl[j_4]) * _TerrainTreeLightColors[j_4].xyz)); + light_2 = tmpvar_9; + int _post_incdec_tmp_10; + _post_incdec_tmp_10 = j_4; + int tmpvar_11; + tmpvar_11 = (j_4 + 1); + j_4 = tmpvar_11; + }; + mediump vec4 tmpvar_12; + tmpvar_12.w = 1.0; + tmpvar_12.xyz = light_2.xyz; + return tmpvar_12; +} + +void main () +{ + v2f i_13; + highp vec2 tmpvar_14; + tmpvar_14 = xlv_uv; + i_13.uv = tmpvar_14; + highp vec3 tmpvar_15; + tmpvar_15 = xlv_nl; + i_13.nl = tmpvar_15; + lowp vec4 tmpvar_16; + tmpvar_16 = xlat_main (i_13); + lowp vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_FragData[0] = tmpvar_17; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES.txt new file mode 100644 index 000000000..7496920f5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES.txt @@ -0,0 +1,26 @@ +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +void main () +{ + lowp vec4 tmpvar_1; + mediump vec3 light_2; + lowp vec4 col_3; + col_3 = texture2D (_MainTex, xlv_uv); + highp vec3 tmpvar_4; + tmpvar_4 = ((col_3.xyz * xlv_nl.x) * _TerrainTreeLightColors[0].xyz); + light_2 = tmpvar_4; + highp vec3 tmpvar_5; + tmpvar_5 = (light_2 + ((col_3.xyz * xlv_nl.y) * _TerrainTreeLightColors[1].xyz)); + light_2 = tmpvar_5; + highp vec3 tmpvar_6; + tmpvar_6 = (light_2 + ((col_3.xyz * xlv_nl.z) * _TerrainTreeLightColors[2].xyz)); + light_2 = tmpvar_6; + mediump vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = light_2; + tmpvar_1 = tmpvar_7; + gl_FragData[0] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-inES.txt new file mode 100644 index 000000000..6f460816b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-inES.txt @@ -0,0 +1,24 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +uniform sampler2D _MainTex; +uniform highp vec4 _TerrainTreeLightColors[4]; +lowp vec4 xlat_main (in v2f i) { + lowp vec4 col = texture2D( _MainTex, i.uv); + if (col.w < 0.5) + discard; + mediump vec3 light = vec3(0.0); + for (int j = 0; j < 3; ++j) { + light += col.xyz * i.nl[j] * _TerrainTreeLightColors[j].xyz; + } + return vec4(light, 1.0); +} +varying highp vec2 xlv_uv; +varying highp vec3 xlv_nl; +void main() { + v2f i; + i.uv = xlv_uv; + i.nl = xlv_nl; + gl_FragData[0] = xlat_main(i); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-irES.txt new file mode 100644 index 000000000..aac196da7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-irES.txt @@ -0,0 +1,62 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +lowp vec4 xlat_main ( + in v2f i_1 +) +{ + int j_2; + mediump vec3 light_3; + lowp vec4 col_4; + lowp vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, i_1.uv); + lowp vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + col_4 = tmpvar_6; + if ((col_4.w < 0.5)) { + discard; + }; + vec3 tmpvar_7; + tmpvar_7 = vec3(0.0, 0.0, 0.0); + light_3 = tmpvar_7; + int tmpvar_8; + tmpvar_8 = 0; + j_2 = tmpvar_8; + while (true) { + if (!((j_2 < 3))) { + break; + }; + highp vec3 tmpvar_9; + tmpvar_9 = (light_3 + ((col_4.xyz * i_1.nl[j_2]) * _TerrainTreeLightColors[j_2].xyz)); + light_3 = tmpvar_9; + int tmpvar_10; + tmpvar_10 = (j_2 + 1); + j_2 = tmpvar_10; + }; + mediump vec4 tmpvar_11; + tmpvar_11.w = 1.0; + tmpvar_11.xyz = light_3.xyz; + return tmpvar_11; +} + +void main () +{ + v2f i_12; + highp vec2 tmpvar_13; + tmpvar_13 = xlv_uv; + i_12.uv = tmpvar_13; + highp vec3 tmpvar_14; + tmpvar_14 = xlv_nl; + i_12.nl = tmpvar_14; + lowp vec4 tmpvar_15; + tmpvar_15 = xlat_main (i_12); + lowp vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES.txt new file mode 100644 index 000000000..26465c54f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES.txt @@ -0,0 +1,29 @@ +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +void main () +{ + lowp vec4 tmpvar_1; + mediump vec3 light_2; + lowp vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, xlv_uv); + if ((tmpvar_3.w < 0.5)) { + discard; + }; + highp vec3 tmpvar_4; + tmpvar_4 = ((tmpvar_3.xyz * xlv_nl.x) * _TerrainTreeLightColors[0].xyz); + light_2 = tmpvar_4; + highp vec3 tmpvar_5; + tmpvar_5 = (light_2 + ((tmpvar_3.xyz * xlv_nl.y) * _TerrainTreeLightColors[1].xyz)); + light_2 = tmpvar_5; + highp vec3 tmpvar_6; + tmpvar_6 = (light_2 + ((tmpvar_3.xyz * xlv_nl.z) * _TerrainTreeLightColors[2].xyz)); + light_2 = tmpvar_6; + mediump vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = light_2; + tmpvar_1 = tmpvar_7; + gl_FragData[0] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-inES.txt new file mode 100644 index 000000000..da195d6d4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-inES.txt @@ -0,0 +1,25 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +uniform sampler2D _MainTex; +uniform highp vec4 _TerrainTreeLightColors[4]; +lowp vec4 xlat_main (in v2f i) { + highp int j = 0; // loop init before discard + lowp vec4 col = texture2D( _MainTex, i.uv); + if (col.w < 0.5) + discard; + mediump vec3 light = vec3(0.0); + for ( ; (j < 3); (j++)) { // loop body after discard + light += col.xyz * i.nl[j] * _TerrainTreeLightColors[j].xyz; + } + return vec4(light, 1.0); +} +varying highp vec2 xlv_uv; +varying highp vec3 xlv_nl; +void main() { + v2f i; + i.uv = xlv_uv; + i.nl = xlv_nl; + gl_FragData[0] = xlat_main(i); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-irES.txt new file mode 100644 index 000000000..903b1aae3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-irES.txt @@ -0,0 +1,64 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +lowp vec4 xlat_main ( + in v2f i_1 +) +{ + mediump vec3 light_2; + lowp vec4 col_3; + int j_4; + int tmpvar_5; + tmpvar_5 = 0; + j_4 = tmpvar_5; + lowp vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, i_1.uv); + lowp vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + col_3 = tmpvar_7; + if ((col_3.w < 0.5)) { + discard; + }; + vec3 tmpvar_8; + tmpvar_8 = vec3(0.0, 0.0, 0.0); + light_2 = tmpvar_8; + while (true) { + if (!((j_4 < 3))) { + break; + }; + highp vec3 tmpvar_9; + tmpvar_9 = (light_2 + ((col_3.xyz * i_1.nl[j_4]) * _TerrainTreeLightColors[j_4].xyz)); + light_2 = tmpvar_9; + int _post_incdec_tmp_10; + _post_incdec_tmp_10 = j_4; + int tmpvar_11; + tmpvar_11 = (j_4 + 1); + j_4 = tmpvar_11; + }; + mediump vec4 tmpvar_12; + tmpvar_12.w = 1.0; + tmpvar_12.xyz = light_2.xyz; + return tmpvar_12; +} + +void main () +{ + v2f i_13; + highp vec2 tmpvar_14; + tmpvar_14 = xlv_uv; + i_13.uv = tmpvar_14; + highp vec3 tmpvar_15; + tmpvar_15 = xlv_nl; + i_13.nl = tmpvar_15; + lowp vec4 tmpvar_16; + tmpvar_16 = xlat_main (i_13); + lowp vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_FragData[0] = tmpvar_17; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-outES.txt new file mode 100644 index 000000000..26465c54f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forarounddiscard-outES.txt @@ -0,0 +1,29 @@ +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +void main () +{ + lowp vec4 tmpvar_1; + mediump vec3 light_2; + lowp vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, xlv_uv); + if ((tmpvar_3.w < 0.5)) { + discard; + }; + highp vec3 tmpvar_4; + tmpvar_4 = ((tmpvar_3.xyz * xlv_nl.x) * _TerrainTreeLightColors[0].xyz); + light_2 = tmpvar_4; + highp vec3 tmpvar_5; + tmpvar_5 = (light_2 + ((tmpvar_3.xyz * xlv_nl.y) * _TerrainTreeLightColors[1].xyz)); + light_2 = tmpvar_5; + highp vec3 tmpvar_6; + tmpvar_6 = (light_2 + ((tmpvar_3.xyz * xlv_nl.z) * _TerrainTreeLightColors[2].xyz)); + light_2 = tmpvar_6; + mediump vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = light_2; + tmpvar_1 = tmpvar_7; + gl_FragData[0] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-inES.txt new file mode 100644 index 000000000..332469d06 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-inES.txt @@ -0,0 +1,24 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +uniform sampler2D _MainTex; +uniform highp vec4 _TerrainTreeLightColors[4]; +lowp vec4 xlat_main (in v2f i) { + lowp vec4 col = texture2D( _MainTex, i.uv); + mediump vec3 light = vec3(0.0); + int loopCount = int(col.a*10.0); + for (int j = 0; j < loopCount; ++j) + { + light += col.xyz * i.nl[j] * _TerrainTreeLightColors[j].xyz; + } + return vec4(light, 1.0); +} +varying highp vec2 xlv_uv; +varying highp vec3 xlv_nl; +void main() { + v2f i; + i.uv = xlv_uv; + i.nl = xlv_nl; + gl_FragData[0] = xlat_main(i); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-irES.txt new file mode 100644 index 000000000..20a2ef647 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-irES.txt @@ -0,0 +1,63 @@ +struct v2f { + highp vec2 uv; + highp vec3 nl; +}; +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +lowp vec4 xlat_main ( + in v2f i_1 +) +{ + int j_2; + int loopCount_3; + mediump vec3 light_4; + lowp vec4 col_5; + lowp vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, i_1.uv); + lowp vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + col_5 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = vec3(0.0, 0.0, 0.0); + light_4 = tmpvar_8; + int tmpvar_9; + tmpvar_9 = int((col_5.w * 10.0)); + loopCount_3 = tmpvar_9; + int tmpvar_10; + tmpvar_10 = 0; + j_2 = tmpvar_10; + while (true) { + if (!((j_2 < loopCount_3))) { + break; + }; + highp vec3 tmpvar_11; + tmpvar_11 = (light_4 + ((col_5.xyz * i_1.nl[j_2]) * _TerrainTreeLightColors[j_2].xyz)); + light_4 = tmpvar_11; + int tmpvar_12; + tmpvar_12 = (j_2 + 1); + j_2 = tmpvar_12; + }; + mediump vec4 tmpvar_13; + tmpvar_13.w = 1.0; + tmpvar_13.xyz = light_4.xyz; + return tmpvar_13; +} + +void main () +{ + v2f i_14; + highp vec2 tmpvar_15; + tmpvar_15 = xlv_uv; + i_14.uv = tmpvar_15; + highp vec3 tmpvar_16; + tmpvar_16 = xlv_nl; + i_14.nl = tmpvar_16; + lowp vec4 tmpvar_17; + tmpvar_17 = xlat_main (i_14); + lowp vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + gl_FragData[0] = tmpvar_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-outES.txt new file mode 100644 index 000000000..d8308f337 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/loop-forunbounded-outES.txt @@ -0,0 +1,35 @@ +varying highp vec3 xlv_nl; +varying highp vec2 xlv_uv; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform sampler2D _MainTex; +void main () +{ + lowp vec4 tmpvar_1; + highp vec3 tmpvar_2; + tmpvar_2 = xlv_nl; + int j_3; + int loopCount_4; + mediump vec3 light_5; + lowp vec4 col_6; + lowp vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, xlv_uv); + col_6 = tmpvar_7; + light_5 = vec3(0.0, 0.0, 0.0); + loopCount_4 = int((tmpvar_7.w * 10.0)); + j_3 = 0; + while (true) { + if ((j_3 >= loopCount_4)) { + break; + }; + highp vec3 tmpvar_8; + tmpvar_8 = (light_5 + ((col_6.xyz * tmpvar_2[j_3]) * _TerrainTreeLightColors[j_3].xyz)); + light_5 = tmpvar_8; + j_3 = (j_3 + 1); + }; + mediump vec4 tmpvar_9; + tmpvar_9.w = 1.0; + tmpvar_9.xyz = light_5; + tmpvar_1 = tmpvar_9; + gl_FragData[0] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-in.txt b/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-in.txt new file mode 100644 index 000000000..fdee4505e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-in.txt @@ -0,0 +1,20 @@ + +void xll_clip(float x) { + if ( x<0.0 ) discard; +} + +uniform vec3 uniVal; + +void main() { + vec2 val; + bool useZero = uniVal.x > 1.; + if (useZero){ + gl_FragData[0] = vec4(0.); + } + else{ + val = uniVal.xy; + xll_clip( (0.00100000 - val.x ) ); + xll_clip( (0.00100000 - val.y ) ); + gl_FragData[0] = vec4(1.); + } +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-ir.txt new file mode 100644 index 000000000..3810829dc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-ir.txt @@ -0,0 +1,33 @@ +uniform vec3 uniVal; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void main () +{ + bool useZero_2; + vec2 val_3; + bool tmpvar_4; + tmpvar_4 = (uniVal.x > 1.0); + useZero_2 = tmpvar_4; + if (useZero_2) { + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + gl_FragData[0] = tmpvar_5; + } else { + vec2 tmpvar_6; + tmpvar_6 = uniVal.xy; + val_3 = tmpvar_6; + xll_clip ((0.001 - val_3.x)); + xll_clip ((0.001 - val_3.y)); + vec4 tmpvar_7; + tmpvar_7 = vec4(1.0, 1.0, 1.0, 1.0); + gl_FragData[0] = tmpvar_7; + }; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-out.txt b/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-out.txt new file mode 100644 index 000000000..b54d27d45 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/nested-inlining-out.txt @@ -0,0 +1,20 @@ +uniform vec3 uniVal; +void main () +{ + if ((uniVal.x > 1.0)) { + gl_FragData[0] = vec4(0.0, 0.0, 0.0, 0.0); + } else { + float x_1; + x_1 = (0.001 - uniVal.x); + if ((x_1 < 0.0)) { + discard; + }; + float x_2; + x_2 = (0.001 - uniVal.y); + if ((x_2 < 0.0)) { + discard; + }; + gl_FragData[0] = vec4(1.0, 1.0, 1.0, 1.0); + }; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-ir.txt index 3d084720f..e5230aaa8 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-ir.txt @@ -4,20 +4,20 @@ struct v2f { varying float var; void main () { - v2f i2; - v2f i; - float tmpvar_1; - tmpvar_1 = var; - i.f = tmpvar_1; - v2f tmpvar_2; - tmpvar_2 = i; - i2 = tmpvar_2; + v2f i2_1; + v2f i_2; float tmpvar_3; - tmpvar_3 = abs (i2.f); - vec4 tmpvar_4; - tmpvar_4 = vec4(tmpvar_3); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragColor = tmpvar_5; + tmpvar_3 = var; + i_2.f = tmpvar_3; + v2f tmpvar_4; + tmpvar_4 = i_2; + i2_1 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = abs (i2_1.f); + vec4 tmpvar_6; + tmpvar_6 = vec4(tmpvar_5); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + gl_FragColor = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-out.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-out.txt index 44176a2da..1526ea490 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-copyprop-struct-out.txt @@ -1,6 +1,6 @@ varying float var; void main () { - gl_FragColor = vec4(abs (var)); + gl_FragColor = vec4(abs(var)); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-ir.txt index 2940c9494..d3a3f9e4f 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-ir.txt @@ -2,20 +2,20 @@ uniform sampler2D tex; varying vec2 uv; void main () { - vec4 v; - vec4 tmpvar_1; - tmpvar_1 = texture2D (tex, uv); + vec4 v_1; vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - v = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = v.yx; - v.xy = tmpvar_3.xy.xy; - float tmpvar_4; - tmpvar_4 = -(v.x); - v.x = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = v; - gl_FragColor = tmpvar_5; + tmpvar_2 = texture2D (tex, uv); + vec4 tmpvar_3; + tmpvar_3 = tmpvar_2; + v_1 = tmpvar_3; + vec2 tmpvar_4; + tmpvar_4 = v_1.yx; + v_1.xy = tmpvar_4.xy.xy; + float tmpvar_5; + tmpvar_5 = -(v_1.x); + v_1.x = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = v_1; + gl_FragColor = tmpvar_6; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-out.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-out.txt index 077db1b0d..12780b6df 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-copypropelems-swizzle-out.txt @@ -2,12 +2,12 @@ uniform sampler2D tex; varying vec2 uv; void main () { - vec4 v; - vec4 tmpvar_1; - tmpvar_1 = texture2D (tex, uv); - v = tmpvar_1; - v.xy = tmpvar_1.yx; - v.x = -(tmpvar_1.y); - gl_FragColor = v; + vec4 v_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (tex, uv); + v_1.zw = tmpvar_2.zw; + v_1.y = tmpvar_2.x; + v_1.x = -(tmpvar_2.y); + gl_FragColor = v_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-in.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-in.txt new file mode 100644 index 000000000..b0fff7910 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-in.txt @@ -0,0 +1,20 @@ +uniform sampler2D _MainTex; + +// presence of inout parameters with discard used inside +// the function, and the variables not being trivially the same +// type (vec4 vs vec3), can cause the actually unused +// texture sample to be left in. +void surf (vec2 uv, inout vec3 oo) +{ + if (uv.x < 0.0) + discard; + oo = texture2D(_MainTex, uv).xyz; +} + +void main() +{ + vec3 oo; + surf(gl_TexCoord[0].xy, oo); + + gl_FragData[0] = vec4(0.5); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-ir.txt new file mode 100644 index 000000000..578f4be57 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-ir.txt @@ -0,0 +1,25 @@ +uniform sampler2D _MainTex; +void surf ( + in vec2 uv_1, + inout vec3 oo_2 +) +{ + if ((uv_1.x < 0.0)) { + discard; + }; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, uv_1); + vec3 tmpvar_4; + tmpvar_4 = tmpvar_3.xyz; + oo_2 = tmpvar_4; +} + +void main () +{ + vec3 oo_5; + surf (gl_TexCoord[0].xy, oo_5); + vec4 tmpvar_6; + tmpvar_6 = vec4(0.5, 0.5, 0.5, 0.5); + gl_FragData[0] = tmpvar_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-out.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-out.txt new file mode 100644 index 000000000..71563d7a3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloads-out.txt @@ -0,0 +1,10 @@ +void main () +{ + vec2 uv_1; + uv_1 = gl_TexCoord[0].xy; + if ((uv_1.x < 0.0)) { + discard; + }; + gl_FragData[0] = vec4(0.5, 0.5, 0.5, 0.5); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-ir.txt index 19ef8bad0..4be256a56 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-ir.txt @@ -4,48 +4,48 @@ struct v2f { }; void main () { - float arrunused[3]; - float arrused[3]; - float funused; - float fused; - v2f sunused; - v2f sused; - float f; - float tmpvar_1; - tmpvar_1 = gl_FragCoord.x; - f = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(f); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - sused.pos = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (f * 6.0); - sused.unusedmember = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = vec4(f); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - sunused.pos = tmpvar_6; - float tmpvar_7; - tmpvar_7 = (f * 7.0); - sunused.unusedmember = tmpvar_7; + float arrunused_1[3]; + float arrused_2[3]; + float funused_3; + float fused_4; + v2f sunused_5; + v2f sused_6; + float f_7; float tmpvar_8; - tmpvar_8 = (f * 2.0); - fused = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (f * 3.0); - funused = tmpvar_9; - float tmpvar_10; - tmpvar_10 = (f * 4.0); - arrused[0] = tmpvar_10; + tmpvar_8 = gl_FragCoord.x; + f_7 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = vec4(f_7); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + sused_6.pos = tmpvar_10; float tmpvar_11; - tmpvar_11 = (f * 5.0); - arrunused[0] = tmpvar_11; + tmpvar_11 = (f_7 * 6.0); + sused_6.unusedmember = tmpvar_11; vec4 tmpvar_12; - tmpvar_12 = vec4(((fused + sused.pos.x) + arrused[0])); + tmpvar_12 = vec4(f_7); vec4 tmpvar_13; tmpvar_13 = tmpvar_12; - gl_FragColor = tmpvar_13; + sunused_5.pos = tmpvar_13; + float tmpvar_14; + tmpvar_14 = (f_7 * 7.0); + sunused_5.unusedmember = tmpvar_14; + float tmpvar_15; + tmpvar_15 = (f_7 * 2.0); + fused_4 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = (f_7 * 3.0); + funused_3 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = (f_7 * 4.0); + arrused_2[0] = tmpvar_17; + float tmpvar_18; + tmpvar_18 = (f_7 * 5.0); + arrunused_1[0] = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = vec4(((fused_4 + sused_6.pos.x) + arrused_2[0])); + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragColor = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-out.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-out.txt index ed5ce9f25..8eb3bd8ea 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-deadcode-out.txt @@ -1,7 +1,5 @@ void main () { - float arrused[3]; - arrused[0] = (gl_FragCoord.x * 4.0); - gl_FragColor = vec4((((gl_FragCoord.x * 2.0) + gl_FragCoord.x) + arrused[0])); + gl_FragColor = vec4((((gl_FragCoord.x * 2.0) + gl_FragCoord.x) + (gl_FragCoord.x * 4.0))); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-deadcodestruct-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-deadcodestruct-ir.txt index 6e200dc4b..9b51cbfb0 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-deadcodestruct-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-deadcodestruct-ir.txt @@ -4,21 +4,21 @@ struct foo { }; void main () { - foo s; - float f; - float tmpvar_1; - tmpvar_1 = 1.0; - f = tmpvar_1; - float tmpvar_2; - tmpvar_2 = f; - s.used = tmpvar_2; + foo s_1; + float f_2; float tmpvar_3; - tmpvar_3 = f; - s.unused = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = vec4(s.used); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragColor = tmpvar_5; + tmpvar_3 = 1.0; + f_2 = tmpvar_3; + float tmpvar_4; + tmpvar_4 = f_2; + s_1.used = tmpvar_4; + float tmpvar_5; + tmpvar_5 = f_2; + s_1.unused = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = vec4(s_1.used); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + gl_FragColor = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-irES.txt index f4fa98964..da3f43bb4 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-irES.txt @@ -3,26 +3,26 @@ varying lowp vec3 halfDir; varying lowp vec3 normal; void main () { - lowp vec4 c; - mediump float spec; - lowp float nh; - lowp float tmpvar_1; - tmpvar_1 = dot (normal, halfDir); - lowp float tmpvar_2; - tmpvar_2 = tmpvar_1; - nh = tmpvar_2; - mediump float tmpvar_3; - tmpvar_3 = pow (nh, specPower); - mediump float tmpvar_4; - tmpvar_4 = tmpvar_3; - spec = tmpvar_4; - mediump vec4 tmpvar_5; - tmpvar_5 = vec4(spec); - mediump vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - c = tmpvar_6; - lowp vec4 tmpvar_7; - tmpvar_7 = c; - gl_FragColor = tmpvar_7; + lowp vec4 c_1; + mediump float spec_2; + lowp float nh_3; + lowp float tmpvar_4; + tmpvar_4 = dot (normal, halfDir); + lowp float tmpvar_5; + tmpvar_5 = tmpvar_4; + nh_3 = tmpvar_5; + mediump float tmpvar_6; + tmpvar_6 = pow (nh_3, specPower); + mediump float tmpvar_7; + tmpvar_7 = tmpvar_6; + spec_2 = tmpvar_7; + mediump vec4 tmpvar_8; + tmpvar_8 = vec4(spec_2); + mediump vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + c_1 = tmpvar_9; + lowp vec4 tmpvar_10; + tmpvar_10 = c_1; + gl_FragColor = tmpvar_10; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES.txt index a4a8dbd3a..45c2a2736 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES.txt @@ -3,12 +3,12 @@ varying lowp vec3 halfDir; varying lowp vec3 normal; void main () { - lowp vec4 c; - lowp float tmpvar_1; - tmpvar_1 = dot (normal, halfDir); - mediump vec4 tmpvar_2; - tmpvar_2 = vec4(pow (tmpvar_1, specPower)); - c = tmpvar_2; - gl_FragColor = c; + lowp vec4 c_1; + lowp float tmpvar_2; + tmpvar_2 = dot (normal, halfDir); + mediump vec4 tmpvar_3; + tmpvar_3 = vec4(pow (tmpvar_2, specPower)); + c_1 = tmpvar_3; + gl_FragColor = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-inline-inoutstruct-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-inline-inoutstruct-ir.txt index f8c5755c4..45c4b1fb1 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-inline-inoutstruct-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-inline-inoutstruct-ir.txt @@ -2,20 +2,20 @@ struct SurfaceOutput { vec4 color; }; void surf ( - inout SurfaceOutput o + inout SurfaceOutput o_1 ) { - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, 1.0, 1.0, 1.0); - o.color = tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = vec4(1.0, 1.0, 1.0, 1.0); + o_1.color = tmpvar_2; } void main () { - SurfaceOutput o; - surf (o); - vec4 tmpvar_1; - tmpvar_1 = o.color; - gl_FragColor = tmpvar_1; + SurfaceOutput o_3; + surf (o_3); + vec4 tmpvar_4; + tmpvar_4 = o_3.color; + gl_FragColor = tmpvar_4; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-inES.txt new file mode 100644 index 000000000..a56d4f062 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-inES.txt @@ -0,0 +1,22 @@ +varying lowp float xx; + +int func(inout float x) +{ + x = x*2.0; + return 0; +} + +void main() +{ + lowp float x = xx; + + int i = func(x); // side effects! + + if (x < 0.0) + discard; + + lowp float c = 0.0; + for (; i < 4; ++i) + c += xx; + gl_FragColor = vec4(c); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-irES.txt new file mode 100644 index 000000000..f929f75f6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-irES.txt @@ -0,0 +1,48 @@ +varying lowp float xx; +int func ( + inout float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = (x_1 * 2.0); + x_1 = tmpvar_2; + return 0; +} + +void main () +{ + lowp float c_3; + int i_4; + lowp float x_5; + lowp float tmpvar_6; + tmpvar_6 = xx; + x_5 = tmpvar_6; + int tmpvar_7; + tmpvar_7 = func (x_5); + int tmpvar_8; + tmpvar_8 = tmpvar_7; + i_4 = tmpvar_8; + if ((x_5 < 0.0)) { + discard; + }; + float tmpvar_9; + tmpvar_9 = 0.0; + c_3 = tmpvar_9; + while (true) { + if (!((i_4 < 4))) { + break; + }; + lowp float tmpvar_10; + tmpvar_10 = (c_3 + xx); + c_3 = tmpvar_10; + int tmpvar_11; + tmpvar_11 = (i_4 + 1); + i_4 = tmpvar_11; + }; + lowp vec4 tmpvar_12; + tmpvar_12 = vec4(c_3); + lowp vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragColor = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-outES.txt new file mode 100644 index 000000000..c42f73e58 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect-outES.txt @@ -0,0 +1,17 @@ +varying lowp float xx; +void main () +{ + lowp float c_1; + lowp float tmpvar_2; + tmpvar_2 = (xx * 2.0); + if ((tmpvar_2 < 0.0)) { + discard; + }; + c_1 = (xx + xx); + c_1 = (c_1 + xx); + c_1 = (c_1 + xx); + lowp vec4 tmpvar_3; + tmpvar_3 = vec4(c_1); + gl_FragColor = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-inES.txt new file mode 100644 index 000000000..36449736b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-inES.txt @@ -0,0 +1,16 @@ +varying lowp float xx; + +void main() +{ + int x; + + int i = (x=(xx>0.5?2:4)); // side effects! + + if (x < 2) + discard; + + lowp float c = 0.0; + for (; i < 4; ++i) + c += xx; + gl_FragColor = vec4(c); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-irES.txt new file mode 100644 index 000000000..6a8bef375 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-irES.txt @@ -0,0 +1,42 @@ +varying lowp float xx; +void main () +{ + lowp float c_1; + int i_2; + int x_3; + int tmpvar_4; + if ((xx > 0.5)) { + tmpvar_4 = 2; + } else { + tmpvar_4 = 4; + }; + int tmpvar_5; + tmpvar_5 = tmpvar_4; + x_3 = tmpvar_5; + int tmpvar_6; + tmpvar_6 = tmpvar_5; + i_2 = tmpvar_6; + if ((x_3 < 2)) { + discard; + }; + float tmpvar_7; + tmpvar_7 = 0.0; + c_1 = tmpvar_7; + while (true) { + if (!((i_2 < 4))) { + break; + }; + lowp float tmpvar_8; + tmpvar_8 = (c_1 + xx); + c_1 = tmpvar_8; + int tmpvar_9; + tmpvar_9 = (i_2 + 1); + i_2 = tmpvar_9; + }; + lowp vec4 tmpvar_10; + tmpvar_10 = vec4(c_1); + lowp vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_FragColor = tmpvar_11; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-outES.txt new file mode 100644 index 000000000..1f3e4a54f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-sideeffect2-outES.txt @@ -0,0 +1,28 @@ +varying lowp float xx; +void main () +{ + lowp float c_1; + int i_2; + int tmpvar_3; + if ((xx > 0.5)) { + tmpvar_3 = 2; + } else { + tmpvar_3 = 4; + }; + i_2 = tmpvar_3; + if ((tmpvar_3 < 2)) { + discard; + }; + c_1 = 0.0; + while (true) { + if ((i_2 >= 4)) { + break; + }; + c_1 = (c_1 + xx); + i_2 = (i_2 + 1); + }; + lowp vec4 tmpvar_4; + tmpvar_4 = vec4(c_1); + gl_FragColor = tmpvar_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-inES.txt new file mode 100644 index 000000000..3718af198 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-inES.txt @@ -0,0 +1,14 @@ +varying lowp float xx; + +void main() +{ + int i = 0; + + if (xx < 0.0) + discard; + + lowp float c = 0.0; + for (; i < 4; ++i) + c += xx; + gl_FragColor = vec4(c); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-irES.txt new file mode 100644 index 000000000..dc4365e65 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-irES.txt @@ -0,0 +1,32 @@ +varying lowp float xx; +void main () +{ + lowp float c_1; + int i_2; + int tmpvar_3; + tmpvar_3 = 0; + i_2 = tmpvar_3; + if ((xx < 0.0)) { + discard; + }; + float tmpvar_4; + tmpvar_4 = 0.0; + c_1 = tmpvar_4; + while (true) { + if (!((i_2 < 4))) { + break; + }; + lowp float tmpvar_5; + tmpvar_5 = (c_1 + xx); + c_1 = tmpvar_5; + int tmpvar_6; + tmpvar_6 = (i_2 + 1); + i_2 = tmpvar_6; + }; + lowp vec4 tmpvar_7; + tmpvar_7 = vec4(c_1); + lowp vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + gl_FragColor = tmpvar_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-outES.txt new file mode 100644 index 000000000..cc19ff469 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-movevars-simple-outES.txt @@ -0,0 +1,15 @@ +varying lowp float xx; +void main () +{ + lowp float c_1; + if ((xx < 0.0)) { + discard; + }; + c_1 = (xx + xx); + c_1 = (c_1 + xx); + c_1 = (c_1 + xx); + lowp vec4 tmpvar_2; + tmpvar_2 = vec4(c_1); + gl_FragColor = tmpvar_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/opt-vec-var-index-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/opt-vec-var-index-ir.txt index 90cfb8c6c..e830d87d0 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/opt-vec-var-index-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/opt-vec-var-index-ir.txt @@ -1,33 +1,33 @@ void main () { - int j; - vec2 c; - vec2 tmpvar_1; - tmpvar_1 = vec2(0.0, 0.0); - c = tmpvar_1; - int tmpvar_2; - tmpvar_2 = 0; - j = tmpvar_2; + int j_1; + vec2 c_2; + vec2 tmpvar_3; + tmpvar_3 = vec2(0.0, 0.0); + c_2 = tmpvar_3; + int tmpvar_4; + tmpvar_4 = 0; + j_1 = tmpvar_4; while (true) { - if (!((j < 2))) { + if (!((j_1 < 2))) { break; }; - vec2 tmpvar_3; - tmpvar_3 = vec2(vec2(0.0, 0.0)[j]); - vec2 tmpvar_4; - tmpvar_4 = abs (tmpvar_3); vec2 tmpvar_5; - tmpvar_5 = (c + tmpvar_4); - c = tmpvar_5; - int tmpvar_6; - tmpvar_6 = (j + 1); - j = tmpvar_6; + tmpvar_5 = vec2(vec2(0.0, 0.0)[j_1]); + vec2 tmpvar_6; + tmpvar_6 = abs (tmpvar_5); + vec2 tmpvar_7; + tmpvar_7 = (c_2 + tmpvar_6); + c_2 = tmpvar_7; + int tmpvar_8; + tmpvar_8 = (j_1 + 1); + j_1 = tmpvar_8; }; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = c.xy; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_FragColor = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.zw = vec2(0.0, 0.0); + tmpvar_9.xy = c_2.xy; + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + gl_FragColor = tmpvar_10; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/pp-basic-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/pp-basic-ir.txt index c1fbea114..8d5f683f7 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/pp-basic-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/pp-basic-ir.txt @@ -5,16 +5,16 @@ vec4 xlat_main () void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlat_main (); + vec4 xl_retval_1; vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; + tmpvar_2 = xlat_main (); vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; + tmpvar_3 = tmpvar_2; + xl_retval_1 = tmpvar_3; vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + tmpvar_4 = xl_retval_1.xyzw; + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + gl_FragData[0] = tmpvar_5; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-irES.txt index 3660e17ab..4f1acc8d1 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-irES.txt @@ -4,61 +4,61 @@ uniform mediump float _EmberFadeEnd; uniform sampler2D _BurntTex; uniform sampler2D _MainTex; float xll_saturate ( - in float x + in float x_1 ) { - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; } vec3 xll_saturate ( - in vec3 x + in vec3 x_3 ) { - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + vec3 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; } lowp vec4 frag ( - in mediump vec2 uv + in mediump vec2 uv_5 ) { - lowp float t; - lowp vec3 burn; - lowp vec3 base; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, uv); - lowp vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - base = tmpvar_2; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2D (_BurntTex, uv); - lowp vec3 tmpvar_4; - tmpvar_4 = tmpvar_3.xyz; - burn = tmpvar_4; - float tmpvar_5; - tmpvar_5 = xll_saturate (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd))); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - t = tmpvar_6; - lowp vec3 tmpvar_7; - tmpvar_7 = vec3(t); - lowp vec3 tmpvar_8; - tmpvar_8 = mix (base, burn, tmpvar_7); + lowp float t_6; + lowp vec3 burn_7; + lowp vec3 base_8; lowp vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = tmpvar_8.xyz; - return tmpvar_9; + tmpvar_9 = texture2D (_MainTex, uv_5); + lowp vec3 tmpvar_10; + tmpvar_10 = tmpvar_9.xyz; + base_8 = tmpvar_10; + lowp vec4 tmpvar_11; + tmpvar_11 = texture2D (_BurntTex, uv_5); + lowp vec3 tmpvar_12; + tmpvar_12 = tmpvar_11.xyz; + burn_7 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = xll_saturate (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd))); + float tmpvar_14; + tmpvar_14 = tmpvar_13; + t_6 = tmpvar_14; + lowp vec3 tmpvar_15; + tmpvar_15 = vec3(t_6); + lowp vec3 tmpvar_16; + tmpvar_16 = mix (base_8, burn_7, tmpvar_15); + lowp vec4 tmpvar_17; + tmpvar_17.w = 1.0; + tmpvar_17.xyz = tmpvar_16.xyz; + return tmpvar_17; } void main () { - lowp vec4 tmpvar_1; - tmpvar_1 = frag (xlv_TEXCOORD0); - lowp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - gl_FragColor = tmpvar_2; + lowp vec4 tmpvar_18; + tmpvar_18 = frag (xlv_TEXCOORD0); + lowp vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragColor = tmpvar_19; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-outES.txt index 59cc75b0f..cc261932f 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr1-outES.txt @@ -5,13 +5,13 @@ uniform sampler2D _BurntTex; uniform sampler2D _MainTex; void main () { - lowp float t; - mediump float tmpvar_1; - tmpvar_1 = clamp (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd)), 0.0, 1.0); - t = tmpvar_1; - lowp vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = mix (texture2D (_MainTex, xlv_TEXCOORD0).xyz, texture2D (_BurntTex, xlv_TEXCOORD0).xyz, vec3(t)); - gl_FragColor = tmpvar_2; + lowp float t_1; + mediump float tmpvar_2; + tmpvar_2 = clamp (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd)), 0.0, 1.0); + t_1 = tmpvar_2; + lowp vec4 tmpvar_3; + tmpvar_3.w = 1.0; + tmpvar_3.xyz = mix (texture2D (_MainTex, xlv_TEXCOORD0).xyz, texture2D (_BurntTex, xlv_TEXCOORD0).xyz, vec3(t_1)); + gl_FragColor = tmpvar_3; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-irES.txt index 050ae72bb..d4550c8b3 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-irES.txt @@ -4,61 +4,61 @@ uniform mediump float _EmberFadeEnd; uniform sampler2D _BurntTex; uniform sampler2D _MainTex; float xll_saturate ( - in float x + in float x_1 ) { - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; } vec3 xll_saturate ( - in vec3 x + in vec3 x_3 ) { - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + vec3 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; } lowp vec4 frag ( - in mediump vec2 uv + in mediump vec2 uv_5 ) { - lowp vec3 t; - lowp vec3 burn; - lowp vec3 base; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, uv); - lowp vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - base = tmpvar_2; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2D (_BurntTex, uv); - lowp vec3 tmpvar_4; - tmpvar_4 = tmpvar_3.xyz; - burn = tmpvar_4; - float tmpvar_5; - tmpvar_5 = xll_saturate (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd))); - vec3 tmpvar_6; - tmpvar_6 = vec3(tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - t = tmpvar_7; - lowp vec3 tmpvar_8; - tmpvar_8 = mix (base, burn, t); + lowp vec3 t_6; + lowp vec3 burn_7; + lowp vec3 base_8; lowp vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = tmpvar_8.xyz; - return tmpvar_9; + tmpvar_9 = texture2D (_MainTex, uv_5); + lowp vec3 tmpvar_10; + tmpvar_10 = tmpvar_9.xyz; + base_8 = tmpvar_10; + lowp vec4 tmpvar_11; + tmpvar_11 = texture2D (_BurntTex, uv_5); + lowp vec3 tmpvar_12; + tmpvar_12 = tmpvar_11.xyz; + burn_7 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = xll_saturate (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd))); + vec3 tmpvar_14; + tmpvar_14 = vec3(tmpvar_13); + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + t_6 = tmpvar_15; + lowp vec3 tmpvar_16; + tmpvar_16 = mix (base_8, burn_7, t_6); + lowp vec4 tmpvar_17; + tmpvar_17.w = 1.0; + tmpvar_17.xyz = tmpvar_16.xyz; + return tmpvar_17; } void main () { - lowp vec4 tmpvar_1; - tmpvar_1 = frag (xlv_TEXCOORD0); - lowp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - gl_FragColor = tmpvar_2; + lowp vec4 tmpvar_18; + tmpvar_18 = frag (xlv_TEXCOORD0); + lowp vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragColor = tmpvar_19; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-outES.txt index e919368b5..52c57e8e1 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-inlineexpr2-outES.txt @@ -5,13 +5,13 @@ uniform sampler2D _BurntTex; uniform sampler2D _MainTex; void main () { - lowp vec3 t; - mediump vec3 tmpvar_1; - tmpvar_1 = vec3(clamp (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd)), 0.0, 1.0)); - t = tmpvar_1; - lowp vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = mix (texture2D (_MainTex, xlv_TEXCOORD0).xyz, texture2D (_BurntTex, xlv_TEXCOORD0).xyz, t); - gl_FragColor = tmpvar_2; + lowp vec3 t_1; + mediump vec3 tmpvar_2; + tmpvar_2 = vec3(clamp (((_EmberFadeStart - 0.05) / (_EmberFadeStart - _EmberFadeEnd)), 0.0, 1.0)); + t_1 = tmpvar_2; + lowp vec4 tmpvar_3; + tmpvar_3.w = 1.0; + tmpvar_3.xyz = mix (texture2D (_MainTex, xlv_TEXCOORD0).xyz, texture2D (_BurntTex, xlv_TEXCOORD0).xyz, t_1); + gl_FragColor = tmpvar_3; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-temps-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-temps-irES.txt index 752e7b99e..d5a7f5db6 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-temps-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-temps-irES.txt @@ -14,91 +14,91 @@ uniform sampler2D _MainTex; uniform lowp vec4 _LightColor0; uniform sampler2D _BumpMap; lowp vec4 frag_surf ( - in v2f_surf IN + in v2f_surf IN_1 ) { - lowp vec4 c; - lowp float spec; - lowp float nh; - lowp float diff; - lowp vec3 Normal; - lowp vec4 tex; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.pack0); - lowp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2D (_BumpMap, IN.pack0); - lowp vec3 tmpvar_4; - tmpvar_4 = ((tmpvar_3.xyz * 2.0) - 1.0); - Normal = tmpvar_4; - lowp float tmpvar_5; - tmpvar_5 = dot (Normal, IN.lightDir); - lowp float tmpvar_6; - tmpvar_6 = max (0.0, tmpvar_5); - lowp float tmpvar_7; - tmpvar_7 = tmpvar_6; - diff = tmpvar_7; - lowp float tmpvar_8; - tmpvar_8 = dot (Normal, IN.halfDir); - lowp float tmpvar_9; - tmpvar_9 = max (0.0, tmpvar_8); - lowp float tmpvar_10; - tmpvar_10 = tmpvar_9; - nh = tmpvar_10; - lowp float tmpvar_11; - tmpvar_11 = pow (nh, _Shininess); + lowp vec4 c_2; + lowp float spec_3; + lowp float nh_4; + lowp float diff_5; + lowp vec3 Normal_6; + lowp vec4 tex_7; + lowp vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, IN_1.pack0); + lowp vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + tex_7 = tmpvar_9; + lowp vec4 tmpvar_10; + tmpvar_10 = texture2D (_BumpMap, IN_1.pack0); + lowp vec3 tmpvar_11; + tmpvar_11 = ((tmpvar_10.xyz * 2.0) - 1.0); + Normal_6 = tmpvar_11; lowp float tmpvar_12; - tmpvar_12 = (tmpvar_11 * tex.w); - spec = tmpvar_12; - lowp vec3 tmpvar_13; - tmpvar_13 = tex.xyz; - lowp vec3 tmpvar_14; - tmpvar_14 = ((tmpvar_13 * ((_LightColor0.xyz * diff) + IN.vlight)) + (_LightColor0.xyz * spec)); - c.xyz = tmpvar_14.xyz.xyz; - float tmpvar_15; - tmpvar_15 = 0.0; - c.w = vec4(tmpvar_15).w; - return c; + tmpvar_12 = dot (Normal_6, IN_1.lightDir); + lowp float tmpvar_13; + tmpvar_13 = max (0.0, tmpvar_12); + lowp float tmpvar_14; + tmpvar_14 = tmpvar_13; + diff_5 = tmpvar_14; + lowp float tmpvar_15; + tmpvar_15 = dot (Normal_6, IN_1.halfDir); + lowp float tmpvar_16; + tmpvar_16 = max (0.0, tmpvar_15); + lowp float tmpvar_17; + tmpvar_17 = tmpvar_16; + nh_4 = tmpvar_17; + lowp float tmpvar_18; + tmpvar_18 = pow (nh_4, _Shininess); + lowp float tmpvar_19; + tmpvar_19 = (tmpvar_18 * tex_7.w); + spec_3 = tmpvar_19; + lowp vec3 tmpvar_20; + tmpvar_20 = tex_7.xyz; + lowp vec3 tmpvar_21; + tmpvar_21 = ((tmpvar_20 * ((_LightColor0.xyz * diff_5) + IN_1.vlight)) + (_LightColor0.xyz * spec_3)); + c_2.xyz = tmpvar_21.xyz.xyz; + float tmpvar_22; + tmpvar_22 = 0.0; + c_2.w = vec4(tmpvar_22).w; + return c_2; } void main () { - v2f_surf xlt_IN; - lowp vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - lowp vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - lowp vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.pack0 = tmpvar_3; - lowp vec3 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD1.xyz; - lowp vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.halfDir = tmpvar_5; - lowp vec3 tmpvar_6; - tmpvar_6 = xlv_TEXCOORD2.xyz; - lowp vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.lightDir = tmpvar_7; - lowp vec3 tmpvar_8; - tmpvar_8 = xlv_TEXCOORD3.xyz; - lowp vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.vlight = tmpvar_9; - lowp vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - lowp vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - lowp vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - lowp vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; + v2f_surf xlt_IN_23; + lowp vec4 xl_retval_24; + vec4 tmpvar_25; + tmpvar_25 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_23.pos = tmpvar_25; + lowp vec2 tmpvar_26; + tmpvar_26 = xlv_TEXCOORD0.xy; + lowp vec2 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_IN_23.pack0 = tmpvar_27; + lowp vec3 tmpvar_28; + tmpvar_28 = xlv_TEXCOORD1.xyz; + lowp vec3 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_IN_23.halfDir = tmpvar_29; + lowp vec3 tmpvar_30; + tmpvar_30 = xlv_TEXCOORD2.xyz; + lowp vec3 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_IN_23.lightDir = tmpvar_31; + lowp vec3 tmpvar_32; + tmpvar_32 = xlv_TEXCOORD3.xyz; + lowp vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_IN_23.vlight = tmpvar_33; + lowp vec4 tmpvar_34; + tmpvar_34 = frag_surf (xlt_IN_23); + lowp vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xl_retval_24 = tmpvar_35; + lowp vec4 tmpvar_36; + tmpvar_36 = xl_retval_24.xyzw; + lowp vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + gl_FragData[0] = tmpvar_37; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-temps-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-temps-outES.txt index dade24c6b..06c5a0e31 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-temps-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-temps-outES.txt @@ -8,13 +8,13 @@ uniform lowp vec4 _LightColor0; uniform sampler2D _BumpMap; void main () { - lowp vec4 c; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, xlv_TEXCOORD0); - lowp vec3 tmpvar_2; - tmpvar_2 = ((texture2D (_BumpMap, xlv_TEXCOORD0).xyz * 2.0) - 1.0); - c.xyz = ((tmpvar_1.xyz * ((_LightColor0.xyz * max (0.0, dot (tmpvar_2, xlv_TEXCOORD2))) + xlv_TEXCOORD3)) + (_LightColor0.xyz * (pow (max (0.0, dot (tmpvar_2, xlv_TEXCOORD1)), _Shininess) * tmpvar_1.w))); - c.w = 0.0; - gl_FragData[0] = c; + lowp vec4 c_1; + lowp vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, xlv_TEXCOORD0); + lowp vec3 tmpvar_3; + tmpvar_3 = ((texture2D (_BumpMap, xlv_TEXCOORD0).xyz * 2.0) - 1.0); + c_1.xyz = ((tmpvar_2.xyz * ((_LightColor0.xyz * max (0.0, dot (tmpvar_3, xlv_TEXCOORD2))) + xlv_TEXCOORD3)) + (_LightColor0.xyz * (pow (max (0.0, dot (tmpvar_3, xlv_TEXCOORD1)), _Shininess) * tmpvar_2.w))); + c_1.w = 0.0; + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-irES.txt index f89e964c0..4275100ba 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-irES.txt @@ -5,38 +5,38 @@ uniform sampler2D tex_lowp; uniform sampler2D tex_def; void main () { - lowp vec4 a1; - lowp vec4 c4; - lowp vec4 c3; - lowp vec4 c2; - lowp vec4 c1; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (tex_def, var_lowp); - lowp vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 2.0); - c1 = tmpvar_2; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2D (tex_def, var_mediump); - lowp vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * 2.0); - c2 = tmpvar_4; - highp vec4 tmpvar_5; - tmpvar_5 = texture2D (tex_highp, var_mediump); - highp vec4 tmpvar_6; - tmpvar_6 = (tmpvar_5 * 2.0); - c3 = tmpvar_6; + lowp vec4 a1_1; + lowp vec4 c4_2; + lowp vec4 c3_3; + lowp vec4 c2_4; + lowp vec4 c1_5; + lowp vec4 tmpvar_6; + tmpvar_6 = texture2D (tex_def, var_lowp); lowp vec4 tmpvar_7; - tmpvar_7 = texture2D (tex_lowp, var_mediump); + tmpvar_7 = (tmpvar_6 * 2.0); + c1_5 = tmpvar_7; lowp vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * 2.0); - c4 = tmpvar_8; + tmpvar_8 = texture2D (tex_def, var_mediump); lowp vec4 tmpvar_9; - tmpvar_9 = abs (var_lowp.xxxx); - lowp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - a1 = tmpvar_10; - lowp vec4 tmpvar_11; - tmpvar_11 = ((((c1 + c2) + c3) + c4) + a1); - gl_FragColor = tmpvar_11; + tmpvar_9 = (tmpvar_8 * 2.0); + c2_4 = tmpvar_9; + highp vec4 tmpvar_10; + tmpvar_10 = texture2D (tex_highp, var_mediump); + highp vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * 2.0); + c3_3 = tmpvar_11; + lowp vec4 tmpvar_12; + tmpvar_12 = texture2D (tex_lowp, var_mediump); + lowp vec4 tmpvar_13; + tmpvar_13 = (tmpvar_12 * 2.0); + c4_2 = tmpvar_13; + lowp vec4 tmpvar_14; + tmpvar_14 = abs (var_lowp.xxxx); + lowp vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + a1_1 = tmpvar_15; + lowp vec4 tmpvar_16; + tmpvar_16 = ((((c1_5 + c2_4) + c3_3) + c4_2) + a1_1); + gl_FragColor = tmpvar_16; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-outES.txt index 48acf3849..564ffe7e4 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-tempssimple-outES.txt @@ -5,10 +5,14 @@ uniform sampler2D tex_lowp; uniform sampler2D tex_def; void main () { - lowp vec4 c3; - highp vec4 tmpvar_1; - tmpvar_1 = (texture2D (tex_highp, var_mediump) * 2.0); - c3 = tmpvar_1; - gl_FragColor = (((((texture2D (tex_def, var_lowp) * 2.0) + (texture2D (tex_def, var_mediump) * 2.0)) + c3) + (texture2D (tex_lowp, var_mediump) * 2.0)) + abs (var_lowp.xxxx)); + lowp vec4 c3_1; + highp vec4 tmpvar_2; + tmpvar_2 = texture2D (tex_highp, var_mediump); + highp vec4 tmpvar_3; + tmpvar_3 = (tmpvar_2 * 2.0); + c3_1 = tmpvar_3; + lowp vec4 tmpvar_4; + tmpvar_4 = (((((texture2D (tex_def, var_lowp) * 2.0) + (texture2D (tex_def, var_mediump) * 2.0)) + c3_1) + (texture2D (tex_lowp, var_mediump) * 2.0)) + abs(var_lowp.xxxx)); + gl_FragColor = tmpvar_4; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-inES.txt new file mode 100644 index 000000000..237b36b1c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-inES.txt @@ -0,0 +1,13 @@ +uniform mediump float med_a; +uniform mediump float med_b; +uniform lowp float low_c; + +void main() +{ + // must be computed at mediump since some args are mediump + lowp float t = (med_a + low_c / med_b); + // computed at lowp + lowp vec4 c = clamp(vec4(t), 0.0, 1.0); + + gl_FragColor = c; +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-irES.txt new file mode 100644 index 000000000..8b2b1da6c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-irES.txt @@ -0,0 +1,22 @@ +uniform lowp float low_c; +uniform mediump float med_b; +uniform mediump float med_a; +void main () +{ + lowp vec4 c_1; + lowp float t_2; + mediump float tmpvar_3; + tmpvar_3 = (med_a + (low_c / med_b)); + t_2 = tmpvar_3; + lowp vec4 tmpvar_4; + tmpvar_4 = vec4(t_2); + lowp vec4 tmpvar_5; + tmpvar_5 = clamp (tmpvar_4, 0.0, 1.0); + lowp vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + c_1 = tmpvar_6; + lowp vec4 tmpvar_7; + tmpvar_7 = c_1; + gl_FragColor = tmpvar_7; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-outES.txt new file mode 100644 index 000000000..839155c52 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/prec-treegrafting-outES.txt @@ -0,0 +1,14 @@ +uniform lowp float low_c; +uniform mediump float med_b; +uniform mediump float med_a; +void main () +{ + lowp float t_1; + mediump float tmpvar_2; + tmpvar_2 = (med_a + (low_c / med_b)); + t_1 = tmpvar_2; + lowp vec4 tmpvar_3; + tmpvar_3 = clamp (vec4(t_1), 0.0, 1.0); + gl_FragColor = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/small-float-in.txt b/3rdparty/glsl-optimizer/tests/fragment/small-float-in.txt new file mode 100644 index 000000000..df059e53e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/small-float-in.txt @@ -0,0 +1,6 @@ +uniform float inFloat; + +void main() +{ + gl_FragColor = vec4(inFloat * 4.36e-6); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/small-float-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/small-float-ir.txt new file mode 100644 index 000000000..6e2baf6a5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/small-float-ir.txt @@ -0,0 +1,10 @@ +uniform float inFloat; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = vec4((inFloat * 4.36e-06)); + vec4 tmpvar_2; + tmpvar_2 = tmpvar_1; + gl_FragColor = tmpvar_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/small-float-out.txt b/3rdparty/glsl-optimizer/tests/fragment/small-float-out.txt new file mode 100644 index 000000000..2c606a55b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/small-float-out.txt @@ -0,0 +1,6 @@ +uniform float inFloat; +void main () +{ + gl_FragColor = vec4((inFloat * 4.36e-06)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/struct-array-var-index-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/struct-array-var-index-ir.txt index 1d2736ed5..b4ac37ee9 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/struct-array-var-index-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/struct-array-var-index-ir.txt @@ -3,24 +3,24 @@ struct str { }; void main () { - int i; - str s; - int tmpvar_1; - tmpvar_1 = 0; - i = tmpvar_1; + int i_1; + str s_2; + int tmpvar_3; + tmpvar_3 = 0; + i_1 = tmpvar_3; while (true) { - if (!((i < 3))) { + if (!((i_1 < 3))) { break; }; - float tmpvar_2; - tmpvar_2 = 1.0; - s.params[i] = tmpvar_2; - int tmpvar_3; - tmpvar_3 = (i + 1); - i = tmpvar_3; + float tmpvar_4; + tmpvar_4 = 1.0; + s_2.params[i_1] = tmpvar_4; + int tmpvar_5; + tmpvar_5 = (i_1 + 1); + i_1 = tmpvar_5; }; - vec4 tmpvar_4; - tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); - gl_FragColor = tmpvar_4; + vec4 tmpvar_6; + tmpvar_6 = vec4(0.0, 0.0, 0.0, 0.0); + gl_FragColor = tmpvar_6; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/struct-unused-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/struct-unused-ir.txt index 2dd30148c..abf3b74bb 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/struct-unused-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/struct-unused-ir.txt @@ -3,9 +3,9 @@ struct SurfaceOutput { }; void main () { - SurfaceOutput o; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - gl_FragColor = tmpvar_1; + SurfaceOutput o_1; + vec4 tmpvar_2; + tmpvar_2 = vec4(0.0, 0.0, 0.0, 0.0); + gl_FragColor = tmpvar_2; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-ir.txt index c5c9a301c..a28f7cf12 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-ir.txt @@ -1,16 +1,16 @@ void main () { - vec4 c; - float tmpvar_1; - tmpvar_1 = dot (gl_FragCoord.xyz, vec3(1.0, 2.0, 3.0)); + vec4 c_1; float tmpvar_2; - tmpvar_2 = tmpvar_1; - c.x = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(4.0, 5.0, 6.0); - c.yzw = tmpvar_3.xxyz.yzw; - vec4 tmpvar_4; - tmpvar_4 = c; - gl_FragColor = tmpvar_4; + tmpvar_2 = dot (gl_FragCoord.xyz, vec3(1.0, 2.0, 3.0)); + float tmpvar_3; + tmpvar_3 = tmpvar_2; + c_1.x = tmpvar_3; + vec3 tmpvar_4; + tmpvar_4 = vec3(4.0, 5.0, 6.0); + c_1.yzw = tmpvar_4.xxyz.yzw; + vec4 tmpvar_5; + tmpvar_5 = c_1; + gl_FragColor = tmpvar_5; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-out.txt b/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-out.txt index 471605a4f..877c64f3a 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/swizzle-writemask-out.txt @@ -1,8 +1,8 @@ void main () { - vec4 c; - c.x = dot (gl_FragCoord.xyz, vec3(1.0, 2.0, 3.0)); - c.yzw = vec3(4.0, 5.0, 6.0); - gl_FragColor = c; + vec4 c_1; + c_1.x = dot (gl_FragCoord.xyz, vec3(1.0, 2.0, 3.0)); + c_1.yzw = vec3(4.0, 5.0, 6.0); + gl_FragColor = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/syntax-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/syntax-irES.txt index 78376583c..1ebadd943 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/syntax-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/syntax-irES.txt @@ -1,41 +1,41 @@ mediump vec4 xlat_main () { - highp float foo; - float tmpvar_1; - tmpvar_1 = 1.0; - foo = tmpvar_1; - highp float tmpvar_2; - tmpvar_2 = (foo + 1.0); - foo = tmpvar_2; + highp float foo_1; + float tmpvar_2; + tmpvar_2 = 1.0; + foo_1 = tmpvar_2; highp float tmpvar_3; - tmpvar_3 = (foo + 100000.0); - foo = tmpvar_3; + tmpvar_3 = (foo_1 + 1.0); + foo_1 = tmpvar_3; highp float tmpvar_4; - tmpvar_4 = (foo + -(0.001)); - foo = tmpvar_4; + tmpvar_4 = (foo_1 + 100000.0); + foo_1 = tmpvar_4; highp float tmpvar_5; - tmpvar_5 = (foo + 2.0); - foo = tmpvar_5; + tmpvar_5 = (foo_1 + -(0.001)); + foo_1 = tmpvar_5; highp float tmpvar_6; - tmpvar_6 = (foo + 3.0); - foo = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7 = vec4(foo); - return tmpvar_7; + tmpvar_6 = (foo_1 + 2.0); + foo_1 = tmpvar_6; + highp float tmpvar_7; + tmpvar_7 = (foo_1 + 3.0); + foo_1 = tmpvar_7; + highp vec4 tmpvar_8; + tmpvar_8 = vec4(foo_1); + return tmpvar_8; } void main () { - mediump vec4 xl_retval; - mediump vec4 tmpvar_1; - tmpvar_1 = xlat_main (); - mediump vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - mediump vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; - mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + mediump vec4 xl_retval_9; + mediump vec4 tmpvar_10; + tmpvar_10 = xlat_main (); + mediump vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_9 = tmpvar_11; + mediump vec4 tmpvar_12; + tmpvar_12 = xl_retval_9.xyzw; + mediump vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-ir.txt index fbfb3e879..38f058313 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-ir.txt @@ -1,76 +1,76 @@ varying vec4 xlv_TEXCOORD0; vec4 xlat_main ( - in vec4 uv + in vec4 uv_1 ) { - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_1; - float tmpvar_2; - if ((uv.x > 0.5)) { - tmpvar_2 = 0.9; - } else { - tmpvar_2 = 0.1; - }; + vec4 c_2; vec4 tmpvar_3; - tmpvar_3 = (c + tmpvar_2); - c = tmpvar_3; - vec4 tmpvar_4; - if ((uv.x > 0.5)) { - tmpvar_4 = vec4(0.9, 0.9, 0.9, 0.9); + tmpvar_3 = vec4(0.0, 0.0, 0.0, 0.0); + c_2 = tmpvar_3; + float tmpvar_4; + if ((uv_1.x > 0.5)) { + tmpvar_4 = 0.9; } else { - tmpvar_4 = vec4(0.1, 0.1, 0.1, 0.1); + tmpvar_4 = 0.1; }; vec4 tmpvar_5; - tmpvar_5 = (c + tmpvar_4); - c = tmpvar_5; - vec3 tmpvar_6; - if ((uv.x > 0.5)) { - tmpvar_6 = vec3(0.9, 0.9, 0.9); + tmpvar_5 = (c_2 + tmpvar_4); + c_2 = tmpvar_5; + vec4 tmpvar_6; + if ((uv_1.x > 0.5)) { + tmpvar_6 = vec4(0.9, 0.9, 0.9, 0.9); } else { - tmpvar_6 = vec3(0.1, 0.1, 0.1); + tmpvar_6 = vec4(0.1, 0.1, 0.1, 0.1); }; - vec3 tmpvar_7; - tmpvar_7 = (c.xyz + tmpvar_6); - c.xyz = tmpvar_7.xyz.xyz; - vec2 tmpvar_8; - if ((uv.x > 0.5)) { - tmpvar_8 = vec2(0.9, 0.9); + vec4 tmpvar_7; + tmpvar_7 = (c_2 + tmpvar_6); + c_2 = tmpvar_7; + vec3 tmpvar_8; + if ((uv_1.x > 0.5)) { + tmpvar_8 = vec3(0.9, 0.9, 0.9); } else { - tmpvar_8 = vec2(0.1, 0.1); + tmpvar_8 = vec3(0.1, 0.1, 0.1); }; - vec2 tmpvar_9; - tmpvar_9 = (c.xy + tmpvar_8); - c.xy = tmpvar_9.xy.xy; - float tmpvar_10; - tmpvar_10 = fract (uv.x); - float tmpvar_11; - if (bool(tmpvar_10)) { - tmpvar_11 = 0.9; + vec3 tmpvar_9; + tmpvar_9 = (c_2.xyz + tmpvar_8); + c_2.xyz = tmpvar_9.xyz.xyz; + vec2 tmpvar_10; + if ((uv_1.x > 0.5)) { + tmpvar_10 = vec2(0.9, 0.9); } else { - tmpvar_11 = 0.1; + tmpvar_10 = vec2(0.1, 0.1); }; + vec2 tmpvar_11; + tmpvar_11 = (c_2.xy + tmpvar_10); + c_2.xy = tmpvar_11.xy.xy; float tmpvar_12; - tmpvar_12 = (c.x + tmpvar_11); - c.x = tmpvar_12; - return c; + tmpvar_12 = fract (uv_1.x); + float tmpvar_13; + if (bool(tmpvar_12)) { + tmpvar_13 = 0.9; + } else { + tmpvar_13 = 0.1; + }; + float tmpvar_14; + tmpvar_14 = (c_2.x + tmpvar_13); + c_2.x = tmpvar_14; + return c_2; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + vec4 xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_17; + tmpvar_17 = xlat_main (tmpvar_16); + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_15 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = xl_retval_15.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-irES.txt index 866e054cb..040f62c3c 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-irES.txt @@ -1,76 +1,76 @@ varying highp vec4 xlv_TEXCOORD0; mediump vec4 xlat_main ( - in highp vec4 uv + in highp vec4 uv_1 ) { - mediump vec4 c; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_1; - float tmpvar_2; - if ((uv.x > 0.5)) { - tmpvar_2 = 0.9; + mediump vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = vec4(0.0, 0.0, 0.0, 0.0); + c_2 = tmpvar_3; + float tmpvar_4; + if ((uv_1.x > 0.5)) { + tmpvar_4 = 0.9; } else { - tmpvar_2 = 0.1; - }; - mediump vec4 tmpvar_3; - tmpvar_3 = (c + tmpvar_2); - c = tmpvar_3; - vec4 tmpvar_4; - if ((uv.x > 0.5)) { - tmpvar_4 = vec4(0.9, 0.9, 0.9, 0.9); - } else { - tmpvar_4 = vec4(0.1, 0.1, 0.1, 0.1); + tmpvar_4 = 0.1; }; mediump vec4 tmpvar_5; - tmpvar_5 = (c + tmpvar_4); - c = tmpvar_5; - vec3 tmpvar_6; - if ((uv.x > 0.5)) { - tmpvar_6 = vec3(0.9, 0.9, 0.9); + tmpvar_5 = (c_2 + tmpvar_4); + c_2 = tmpvar_5; + vec4 tmpvar_6; + if ((uv_1.x > 0.5)) { + tmpvar_6 = vec4(0.9, 0.9, 0.9, 0.9); } else { - tmpvar_6 = vec3(0.1, 0.1, 0.1); + tmpvar_6 = vec4(0.1, 0.1, 0.1, 0.1); }; - mediump vec3 tmpvar_7; - tmpvar_7 = (c.xyz + tmpvar_6); - c.xyz = tmpvar_7.xyz.xyz; - vec2 tmpvar_8; - if ((uv.x > 0.5)) { - tmpvar_8 = vec2(0.9, 0.9); + mediump vec4 tmpvar_7; + tmpvar_7 = (c_2 + tmpvar_6); + c_2 = tmpvar_7; + vec3 tmpvar_8; + if ((uv_1.x > 0.5)) { + tmpvar_8 = vec3(0.9, 0.9, 0.9); } else { - tmpvar_8 = vec2(0.1, 0.1); + tmpvar_8 = vec3(0.1, 0.1, 0.1); }; - mediump vec2 tmpvar_9; - tmpvar_9 = (c.xy + tmpvar_8); - c.xy = tmpvar_9.xy.xy; - highp float tmpvar_10; - tmpvar_10 = fract (uv.x); - float tmpvar_11; - if (bool(tmpvar_10)) { - tmpvar_11 = 0.9; + mediump vec3 tmpvar_9; + tmpvar_9 = (c_2.xyz + tmpvar_8); + c_2.xyz = tmpvar_9.xyz.xyz; + vec2 tmpvar_10; + if ((uv_1.x > 0.5)) { + tmpvar_10 = vec2(0.9, 0.9); } else { - tmpvar_11 = 0.1; + tmpvar_10 = vec2(0.1, 0.1); }; - mediump float tmpvar_12; - tmpvar_12 = (c.x + tmpvar_11); - c.x = tmpvar_12; - return c; + mediump vec2 tmpvar_11; + tmpvar_11 = (c_2.xy + tmpvar_10); + c_2.xy = tmpvar_11.xy.xy; + highp float tmpvar_12; + tmpvar_12 = fract (uv_1.x); + float tmpvar_13; + if (bool(tmpvar_12)) { + tmpvar_13 = 0.9; + } else { + tmpvar_13 = 0.1; + }; + mediump float tmpvar_14; + tmpvar_14 = (c_2.x + tmpvar_13); + c_2.x = tmpvar_14; + return c_2; } void main () { - mediump vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - mediump vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - mediump vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - mediump vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - mediump vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + mediump vec4 xl_retval_15; + highp vec4 tmpvar_16; + tmpvar_16 = xlv_TEXCOORD0.xyzw; + mediump vec4 tmpvar_17; + tmpvar_17 = xlat_main (tmpvar_16); + mediump vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_15 = tmpvar_18; + mediump vec4 tmpvar_19; + tmpvar_19 = xl_retval_15.xyzw; + mediump vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-out.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-out.txt index 978042768..5ba89cc47 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-out.txt @@ -1,47 +1,47 @@ varying vec4 xlv_TEXCOORD0; void main () { - vec4 c; - c = vec4(0.0, 0.0, 0.0, 0.0); - float tmpvar_1; + vec4 c_1; + c_1 = vec4(0.0, 0.0, 0.0, 0.0); + float tmpvar_2; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_1 = 0.9; + tmpvar_2 = 0.9; } else { - tmpvar_1 = 0.1; - }; - c = vec4(tmpvar_1); - vec4 tmpvar_2; - if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_2 = vec4(0.9, 0.9, 0.9, 0.9); - } else { - tmpvar_2 = vec4(0.1, 0.1, 0.1, 0.1); + tmpvar_2 = 0.1; }; + c_1 = vec4(tmpvar_2); vec4 tmpvar_3; - tmpvar_3 = (vec4(tmpvar_1) + tmpvar_2); - c = tmpvar_3; - vec3 tmpvar_4; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_4 = vec3(0.9, 0.9, 0.9); + tmpvar_3 = vec4(0.9, 0.9, 0.9, 0.9); } else { - tmpvar_4 = vec3(0.1, 0.1, 0.1); + tmpvar_3 = vec4(0.1, 0.1, 0.1, 0.1); }; - c.xyz = (tmpvar_3.xyz + tmpvar_4); - vec2 tmpvar_5; + vec4 tmpvar_4; + tmpvar_4 = (vec4(tmpvar_2) + tmpvar_3); + c_1 = tmpvar_4; + vec3 tmpvar_5; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_5 = vec2(0.9, 0.9); + tmpvar_5 = vec3(0.9, 0.9, 0.9); } else { - tmpvar_5 = vec2(0.1, 0.1); + tmpvar_5 = vec3(0.1, 0.1, 0.1); }; - c.xy = (c.xy + tmpvar_5); - float tmpvar_6; - tmpvar_6 = fract (xlv_TEXCOORD0.x); + c_1.xyz = (tmpvar_4.xyz + tmpvar_5); + vec2 tmpvar_6; + if ((xlv_TEXCOORD0.x > 0.5)) { + tmpvar_6 = vec2(0.9, 0.9); + } else { + tmpvar_6 = vec2(0.1, 0.1); + }; + c_1.xy = (c_1.xy + tmpvar_6); float tmpvar_7; - if (bool(tmpvar_6)) { - tmpvar_7 = 0.9; + tmpvar_7 = fract(xlv_TEXCOORD0.x); + float tmpvar_8; + if (bool(tmpvar_7)) { + tmpvar_8 = 0.9; } else { - tmpvar_7 = 0.1; + tmpvar_8 = 0.1; }; - c.x = (c.x + tmpvar_7); - gl_FragData[0] = c; + c_1.x = (c_1.x + tmpvar_8); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-outES.txt index a0efb0a9f..39577ce43 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-outES.txt @@ -1,47 +1,47 @@ varying highp vec4 xlv_TEXCOORD0; void main () { - mediump vec4 c; - c = vec4(0.0, 0.0, 0.0, 0.0); - float tmpvar_1; + mediump vec4 c_1; + c_1 = vec4(0.0, 0.0, 0.0, 0.0); + float tmpvar_2; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_1 = 0.9; + tmpvar_2 = 0.9; } else { - tmpvar_1 = 0.1; + tmpvar_2 = 0.1; }; - c = vec4(tmpvar_1); - vec4 tmpvar_2; + c_1 = vec4(tmpvar_2); + vec4 tmpvar_3; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_2 = vec4(0.9, 0.9, 0.9, 0.9); + tmpvar_3 = vec4(0.9, 0.9, 0.9, 0.9); } else { - tmpvar_2 = vec4(0.1, 0.1, 0.1, 0.1); + tmpvar_3 = vec4(0.1, 0.1, 0.1, 0.1); }; - mediump vec4 tmpvar_3; - tmpvar_3 = (vec4(tmpvar_1) + tmpvar_2); - c = tmpvar_3; - vec3 tmpvar_4; + mediump vec4 tmpvar_4; + tmpvar_4 = (vec4(tmpvar_2) + tmpvar_3); + c_1 = tmpvar_4; + vec3 tmpvar_5; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_4 = vec3(0.9, 0.9, 0.9); + tmpvar_5 = vec3(0.9, 0.9, 0.9); } else { - tmpvar_4 = vec3(0.1, 0.1, 0.1); + tmpvar_5 = vec3(0.1, 0.1, 0.1); }; - c.xyz = (tmpvar_3.xyz + tmpvar_4); - vec2 tmpvar_5; + c_1.xyz = (tmpvar_4.xyz + tmpvar_5); + vec2 tmpvar_6; if ((xlv_TEXCOORD0.x > 0.5)) { - tmpvar_5 = vec2(0.9, 0.9); + tmpvar_6 = vec2(0.9, 0.9); } else { - tmpvar_5 = vec2(0.1, 0.1); + tmpvar_6 = vec2(0.1, 0.1); }; - c.xy = (c.xy + tmpvar_5); - highp float tmpvar_6; - tmpvar_6 = fract (xlv_TEXCOORD0.x); - float tmpvar_7; - if (bool(tmpvar_6)) { - tmpvar_7 = 0.9; + c_1.xy = (c_1.xy + tmpvar_6); + highp float tmpvar_7; + tmpvar_7 = fract(xlv_TEXCOORD0.x); + float tmpvar_8; + if (bool(tmpvar_7)) { + tmpvar_8 = 0.9; } else { - tmpvar_7 = 0.1; + tmpvar_8 = 0.1; }; - c.x = (c.x + tmpvar_7); - gl_FragData[0] = c; + c_1.x = (c_1.x + tmpvar_8); + gl_FragData[0] = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-ir.txt index 6d376c719..b0756084d 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-ir.txt @@ -1,159 +1,159 @@ varying vec4 xlv_TEXCOORD0; vec2 xll_vecTSel ( - in bvec2 a, - in vec2 b, - in vec2 c + in bvec2 a_1, + in vec2 b_2, + in vec2 c_3 ) { - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; + float tmpvar_4; + if (a_1.x) { + tmpvar_4 = b_2.x; } else { - tmpvar_1 = c.x; + tmpvar_4 = c_3.x; }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; + float tmpvar_5; + if (a_1.y) { + tmpvar_5 = b_2.y; } else { - tmpvar_2 = c.y; + tmpvar_5 = c_3.y; }; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_1; - tmpvar_3.y = tmpvar_2; - return tmpvar_3; + vec2 tmpvar_6; + tmpvar_6.x = tmpvar_4; + tmpvar_6.y = tmpvar_5; + return tmpvar_6; } vec3 xll_vecTSel ( - in bvec3 a, - in vec3 b, - in vec3 c + in bvec3 a_7, + in vec3 b_8, + in vec3 c_9 ) { - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; + float tmpvar_10; + if (a_7.x) { + tmpvar_10 = b_8.x; } else { - tmpvar_1 = c.x; + tmpvar_10 = c_9.x; }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; + float tmpvar_11; + if (a_7.y) { + tmpvar_11 = b_8.y; } else { - tmpvar_2 = c.y; + tmpvar_11 = c_9.y; }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; + float tmpvar_12; + if (a_7.z) { + tmpvar_12 = b_8.z; } else { - tmpvar_3 = c.z; + tmpvar_12 = c_9.z; }; - vec3 tmpvar_4; - tmpvar_4.x = tmpvar_1; - tmpvar_4.y = tmpvar_2; - tmpvar_4.z = tmpvar_3; - return tmpvar_4; + vec3 tmpvar_13; + tmpvar_13.x = tmpvar_10; + tmpvar_13.y = tmpvar_11; + tmpvar_13.z = tmpvar_12; + return tmpvar_13; } vec4 xll_vecTSel ( - in bvec4 a, - in vec4 b, - in vec4 c + in bvec4 a_14, + in vec4 b_15, + in vec4 c_16 ) { - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; + float tmpvar_17; + if (a_14.x) { + tmpvar_17 = b_15.x; } else { - tmpvar_1 = c.x; + tmpvar_17 = c_16.x; }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; + float tmpvar_18; + if (a_14.y) { + tmpvar_18 = b_15.y; } else { - tmpvar_2 = c.y; + tmpvar_18 = c_16.y; }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; + float tmpvar_19; + if (a_14.z) { + tmpvar_19 = b_15.z; } else { - tmpvar_3 = c.z; + tmpvar_19 = c_16.z; }; - float tmpvar_4; - if (a.w) { - tmpvar_4 = b.w; + float tmpvar_20; + if (a_14.w) { + tmpvar_20 = b_15.w; } else { - tmpvar_4 = c.w; + tmpvar_20 = c_16.w; }; - vec4 tmpvar_5; - tmpvar_5.x = tmpvar_1; - tmpvar_5.y = tmpvar_2; - tmpvar_5.z = tmpvar_3; - tmpvar_5.w = tmpvar_4; - return tmpvar_5; + vec4 tmpvar_21; + tmpvar_21.x = tmpvar_17; + tmpvar_21.y = tmpvar_18; + tmpvar_21.z = tmpvar_19; + tmpvar_21.w = tmpvar_20; + return tmpvar_21; } vec4 xlat_main ( - in vec4 uv + in vec4 uv_22 ) { - vec4 a; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - a = tmpvar_1; - bvec4 tmpvar_2; - tmpvar_2 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_3; - tmpvar_3 = xll_vecTSel (tmpvar_2, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); - vec4 tmpvar_4; - tmpvar_4 = (a + tmpvar_3); - a = tmpvar_4; - bvec4 tmpvar_5; - tmpvar_5 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_6; - tmpvar_6 = xll_vecTSel (tmpvar_5, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); - vec4 tmpvar_7; - tmpvar_7 = (a + tmpvar_6); - a = tmpvar_7; - bvec4 tmpvar_8; - tmpvar_8 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_9; - tmpvar_9 = xll_vecTSel (tmpvar_8, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); - vec4 tmpvar_10; - tmpvar_10 = (a + tmpvar_9); - a = tmpvar_10; - bvec4 tmpvar_11; - tmpvar_11 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_12; - tmpvar_12 = xll_vecTSel (tmpvar_11, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); - vec4 tmpvar_13; - tmpvar_13 = (a + tmpvar_12); - a = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = fract (uv); - bvec4 tmpvar_15; - tmpvar_15 = bvec4(tmpvar_14).xyzw; - vec4 tmpvar_16; - tmpvar_16 = xll_vecTSel (tmpvar_15, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); - vec4 tmpvar_17; - tmpvar_17 = (a + tmpvar_16); - a = tmpvar_17; - return a; + vec4 a_23; + vec4 tmpvar_24; + tmpvar_24 = vec4(0.0, 0.0, 0.0, 0.0); + a_23 = tmpvar_24; + bvec4 tmpvar_25; + tmpvar_25 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_26; + tmpvar_26 = xll_vecTSel (tmpvar_25, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); + vec4 tmpvar_27; + tmpvar_27 = (a_23 + tmpvar_26); + a_23 = tmpvar_27; + bvec4 tmpvar_28; + tmpvar_28 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_29; + tmpvar_29 = xll_vecTSel (tmpvar_28, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); + vec4 tmpvar_30; + tmpvar_30 = (a_23 + tmpvar_29); + a_23 = tmpvar_30; + bvec4 tmpvar_31; + tmpvar_31 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_32; + tmpvar_32 = xll_vecTSel (tmpvar_31, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); + vec4 tmpvar_33; + tmpvar_33 = (a_23 + tmpvar_32); + a_23 = tmpvar_33; + bvec4 tmpvar_34; + tmpvar_34 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_35; + tmpvar_35 = xll_vecTSel (tmpvar_34, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); + vec4 tmpvar_36; + tmpvar_36 = (a_23 + tmpvar_35); + a_23 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = fract (uv_22); + bvec4 tmpvar_38; + tmpvar_38 = bvec4(tmpvar_37).xyzw; + vec4 tmpvar_39; + tmpvar_39 = xll_vecTSel (tmpvar_38, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); + vec4 tmpvar_40; + tmpvar_40 = (a_23 + tmpvar_39); + a_23 = tmpvar_40; + return a_23; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + vec4 xl_retval_41; + vec4 tmpvar_42; + tmpvar_42 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_43; + tmpvar_43 = xlat_main (tmpvar_42); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_41 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_41.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_FragData[0] = tmpvar_46; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-irES.txt index caf0718de..103dfc51a 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-irES.txt @@ -1,159 +1,159 @@ varying highp vec4 xlv_TEXCOORD0; vec2 xll_vecTSel ( - in bvec2 a, - in vec2 b, - in vec2 c + in bvec2 a_1, + in vec2 b_2, + in vec2 c_3 ) { - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; + float tmpvar_4; + if (a_1.x) { + tmpvar_4 = b_2.x; } else { - tmpvar_1 = c.x; + tmpvar_4 = c_3.x; }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; + float tmpvar_5; + if (a_1.y) { + tmpvar_5 = b_2.y; } else { - tmpvar_2 = c.y; + tmpvar_5 = c_3.y; }; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_1; - tmpvar_3.y = tmpvar_2; - return tmpvar_3; + vec2 tmpvar_6; + tmpvar_6.x = tmpvar_4; + tmpvar_6.y = tmpvar_5; + return tmpvar_6; } vec3 xll_vecTSel ( - in bvec3 a, - in vec3 b, - in vec3 c + in bvec3 a_7, + in vec3 b_8, + in vec3 c_9 ) { - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; + float tmpvar_10; + if (a_7.x) { + tmpvar_10 = b_8.x; } else { - tmpvar_1 = c.x; + tmpvar_10 = c_9.x; }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; + float tmpvar_11; + if (a_7.y) { + tmpvar_11 = b_8.y; } else { - tmpvar_2 = c.y; + tmpvar_11 = c_9.y; }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; + float tmpvar_12; + if (a_7.z) { + tmpvar_12 = b_8.z; } else { - tmpvar_3 = c.z; + tmpvar_12 = c_9.z; }; - vec3 tmpvar_4; - tmpvar_4.x = tmpvar_1; - tmpvar_4.y = tmpvar_2; - tmpvar_4.z = tmpvar_3; - return tmpvar_4; + vec3 tmpvar_13; + tmpvar_13.x = tmpvar_10; + tmpvar_13.y = tmpvar_11; + tmpvar_13.z = tmpvar_12; + return tmpvar_13; } vec4 xll_vecTSel ( - in bvec4 a, - in vec4 b, - in vec4 c + in bvec4 a_14, + in vec4 b_15, + in vec4 c_16 ) { - float tmpvar_1; - if (a.x) { - tmpvar_1 = b.x; + float tmpvar_17; + if (a_14.x) { + tmpvar_17 = b_15.x; } else { - tmpvar_1 = c.x; + tmpvar_17 = c_16.x; }; - float tmpvar_2; - if (a.y) { - tmpvar_2 = b.y; + float tmpvar_18; + if (a_14.y) { + tmpvar_18 = b_15.y; } else { - tmpvar_2 = c.y; + tmpvar_18 = c_16.y; }; - float tmpvar_3; - if (a.z) { - tmpvar_3 = b.z; + float tmpvar_19; + if (a_14.z) { + tmpvar_19 = b_15.z; } else { - tmpvar_3 = c.z; + tmpvar_19 = c_16.z; }; - float tmpvar_4; - if (a.w) { - tmpvar_4 = b.w; + float tmpvar_20; + if (a_14.w) { + tmpvar_20 = b_15.w; } else { - tmpvar_4 = c.w; + tmpvar_20 = c_16.w; }; - vec4 tmpvar_5; - tmpvar_5.x = tmpvar_1; - tmpvar_5.y = tmpvar_2; - tmpvar_5.z = tmpvar_3; - tmpvar_5.w = tmpvar_4; - return tmpvar_5; + vec4 tmpvar_21; + tmpvar_21.x = tmpvar_17; + tmpvar_21.y = tmpvar_18; + tmpvar_21.z = tmpvar_19; + tmpvar_21.w = tmpvar_20; + return tmpvar_21; } mediump vec4 xlat_main ( - in highp vec4 uv + in highp vec4 uv_22 ) { - highp vec4 a; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - a = tmpvar_1; - bvec4 tmpvar_2; - tmpvar_2 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_3; - tmpvar_3 = xll_vecTSel (tmpvar_2, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); - highp vec4 tmpvar_4; - tmpvar_4 = (a + tmpvar_3); - a = tmpvar_4; - bvec4 tmpvar_5; - tmpvar_5 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_6; - tmpvar_6 = xll_vecTSel (tmpvar_5, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); - highp vec4 tmpvar_7; - tmpvar_7 = (a + tmpvar_6); - a = tmpvar_7; - bvec4 tmpvar_8; - tmpvar_8 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_9; - tmpvar_9 = xll_vecTSel (tmpvar_8, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); - highp vec4 tmpvar_10; - tmpvar_10 = (a + tmpvar_9); - a = tmpvar_10; - bvec4 tmpvar_11; - tmpvar_11 = greaterThan (uv, vec4(0.5, 0.5, 0.5, 0.5)); - vec4 tmpvar_12; - tmpvar_12 = xll_vecTSel (tmpvar_11, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); - highp vec4 tmpvar_13; - tmpvar_13 = (a + tmpvar_12); - a = tmpvar_13; - highp vec4 tmpvar_14; - tmpvar_14 = fract (uv); - bvec4 tmpvar_15; - tmpvar_15 = bvec4(tmpvar_14).xyzw; - vec4 tmpvar_16; - tmpvar_16 = xll_vecTSel (tmpvar_15, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); - highp vec4 tmpvar_17; - tmpvar_17 = (a + tmpvar_16); - a = tmpvar_17; - return a; + highp vec4 a_23; + vec4 tmpvar_24; + tmpvar_24 = vec4(0.0, 0.0, 0.0, 0.0); + a_23 = tmpvar_24; + bvec4 tmpvar_25; + tmpvar_25 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_26; + tmpvar_26 = xll_vecTSel (tmpvar_25, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); + highp vec4 tmpvar_27; + tmpvar_27 = (a_23 + tmpvar_26); + a_23 = tmpvar_27; + bvec4 tmpvar_28; + tmpvar_28 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_29; + tmpvar_29 = xll_vecTSel (tmpvar_28, vec4(1.0, 2.0, 3.0, 4.0), vec4(5.0, 6.0, 7.0, 8.0)); + highp vec4 tmpvar_30; + tmpvar_30 = (a_23 + tmpvar_29); + a_23 = tmpvar_30; + bvec4 tmpvar_31; + tmpvar_31 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_32; + tmpvar_32 = xll_vecTSel (tmpvar_31, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); + highp vec4 tmpvar_33; + tmpvar_33 = (a_23 + tmpvar_32); + a_23 = tmpvar_33; + bvec4 tmpvar_34; + tmpvar_34 = greaterThan (uv_22, vec4(0.5, 0.5, 0.5, 0.5)); + vec4 tmpvar_35; + tmpvar_35 = xll_vecTSel (tmpvar_34, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); + highp vec4 tmpvar_36; + tmpvar_36 = (a_23 + tmpvar_35); + a_23 = tmpvar_36; + highp vec4 tmpvar_37; + tmpvar_37 = fract (uv_22); + bvec4 tmpvar_38; + tmpvar_38 = bvec4(tmpvar_37).xyzw; + vec4 tmpvar_39; + tmpvar_39 = xll_vecTSel (tmpvar_38, vec4(1.0, 1.0, 1.0, 1.0), vec4(2.0, 2.0, 2.0, 2.0)); + highp vec4 tmpvar_40; + tmpvar_40 = (a_23 + tmpvar_39); + a_23 = tmpvar_40; + return a_23; } void main () { - mediump vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - mediump vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - mediump vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - mediump vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - mediump vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + mediump vec4 xl_retval_41; + highp vec4 tmpvar_42; + tmpvar_42 = xlv_TEXCOORD0.xyzw; + mediump vec4 tmpvar_43; + tmpvar_43 = xlat_main (tmpvar_42); + mediump vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_41 = tmpvar_44; + mediump vec4 tmpvar_45; + tmpvar_45 = xl_retval_41.xyzw; + mediump vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_FragData[0] = tmpvar_46; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-out.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-out.txt index 6906f5e63..83517cfe6 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-out.txt @@ -132,7 +132,7 @@ void main () vec4 tmpvar_27; tmpvar_27 = (tmpvar_20 + tmpvar_26); bvec4 tmpvar_28; - tmpvar_28 = bvec4(fract (xlv_TEXCOORD0)); + tmpvar_28 = bvec4(fract(xlv_TEXCOORD0)); float tmpvar_29; if (tmpvar_28.x) { tmpvar_29 = 1.0; diff --git a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES.txt index 04a33ea6e..655b55b38 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES.txt @@ -133,7 +133,7 @@ void main () highp vec4 tmpvar_28; tmpvar_28 = (tmpvar_21 + tmpvar_27); bvec4 tmpvar_29; - tmpvar_29 = bvec4(fract (xlv_TEXCOORD0)); + tmpvar_29 = bvec4(fract(xlv_TEXCOORD0)); float tmpvar_30; if (tmpvar_29.x) { tmpvar_30 = 1.0; diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-ir.txt index dc6623468..286f504e5 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-ir.txt @@ -2,41 +2,41 @@ varying vec4 xlv_TEXCOORD0; uniform sampler2D tex; vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord + in sampler2D s_1, + in vec4 coord_2 ) { - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; } vec4 xlat_main ( - in vec4 uv + in vec4 uv_4 ) { - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = uv.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - return tmpvar_2; + vec4 tmpvar_5; + tmpvar_5.zw = vec2(0.0, 0.0); + tmpvar_5.xy = uv_4.xy.xy; + vec4 tmpvar_6; + tmpvar_6 = xll_tex2Dlod (tex, tmpvar_5); + return tmpvar_6; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_9; + tmpvar_9 = xlat_main (tmpvar_8); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + xl_retval_7 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = xl_retval_7.xyzw; + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + gl_FragData[0] = tmpvar_12; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-irES.txt index 283b29366..308345ae9 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-irES.txt @@ -2,41 +2,41 @@ varying highp vec4 xlv_TEXCOORD0; uniform sampler2D tex; vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord + in sampler2D s_1, + in vec4 coord_2 ) { - lowp vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; + lowp vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; } mediump vec4 xlat_main ( - in highp vec4 uv + in highp vec4 uv_4 ) { - highp vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = uv.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (tex, tmpvar_1); - return tmpvar_2; + highp vec4 tmpvar_5; + tmpvar_5.zw = vec2(0.0, 0.0); + tmpvar_5.xy = uv_4.xy.xy; + vec4 tmpvar_6; + tmpvar_6 = xll_tex2Dlod (tex, tmpvar_5); + return tmpvar_6; } void main () { - mediump vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - mediump vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - mediump vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - mediump vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - mediump vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + mediump vec4 xl_retval_7; + highp vec4 tmpvar_8; + tmpvar_8 = xlv_TEXCOORD0.xyzw; + mediump vec4 tmpvar_9; + tmpvar_9 = xlat_main (tmpvar_8); + mediump vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + xl_retval_7 = tmpvar_10; + mediump vec4 tmpvar_11; + tmpvar_11 = xl_retval_7.xyzw; + mediump vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + gl_FragData[0] = tmpvar_12; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-out.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-out.txt index bbee8adf1..5c0127b6d 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-out.txt @@ -3,9 +3,6 @@ varying vec4 xlv_TEXCOORD0; uniform sampler2D tex; void main () { - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = xlv_TEXCOORD0.xy; - gl_FragData[0] = texture2DLod (tex, tmpvar_1.xy, 0.0); + gl_FragData[0] = texture2DLod (tex, xlv_TEXCOORD0.xy, 0.0); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES.txt index f5d60f890..562560888 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES.txt @@ -4,12 +4,9 @@ uniform sampler2D tex; void main () { mediump vec4 tmpvar_1; - highp vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = xlv_TEXCOORD0.xy; - lowp vec4 tmpvar_3; - tmpvar_3 = texture2DLod (tex, tmpvar_2.xy, 0.0); - tmpvar_1 = tmpvar_3; + lowp vec4 tmpvar_2; + tmpvar_2 = texture2DLod (tex, xlv_TEXCOORD0.xy, 0.0); + tmpvar_1 = tmpvar_2; gl_FragData[0] = tmpvar_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-in.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-in.txt new file mode 100644 index 000000000..cd50bfe92 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-in.txt @@ -0,0 +1,19 @@ +float xll_shadow2D(sampler2DShadow s, vec3 coord) { return shadow2D (s, coord).r; } +float xll_shadow2Dproj(sampler2DShadow s, vec4 coord) { return shadow2DProj (s, coord).r; } +uniform sampler2DShadow shadowmap; +vec4 xlat_main( in vec4 uv ); +#line 4 +vec4 xlat_main( in vec4 uv ) { + float s1; + float s2; + s1 = xll_shadow2D( shadowmap, uv.xyz); + s2 = xll_shadow2Dproj( shadowmap, uv); + #line 8 + return vec4( (s1 + s2)); +} +varying vec4 xlv_TEXCOORD0; +void main() { + vec4 xl_retval; + xl_retval = xlat_main( vec4(xlv_TEXCOORD0)); + gl_FragData[0] = vec4( xl_retval); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-inES.txt new file mode 100644 index 000000000..d8458936e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-inES.txt @@ -0,0 +1,20 @@ +#extension GL_EXT_shadow_samplers : require +float xll_shadow2D(sampler2DShadow s, vec3 coord) { return shadow2DEXT (s, coord); } +float xll_shadow2Dproj(sampler2DShadow s, vec4 coord) { return shadow2DProjEXT (s, coord); } +uniform sampler2DShadow shadowmap; +lowp vec4 xlat_main( in highp vec4 uv ); +#line 4 +lowp vec4 xlat_main( in highp vec4 uv ) { + lowp float s1; + lowp float s2; + s1 = xll_shadow2D( shadowmap, uv.xyz); + s2 = xll_shadow2Dproj( shadowmap, uv); + #line 8 + return vec4( (s1 + s2)); +} +varying highp vec4 xlv_TEXCOORD0; +void main() { + lowp vec4 xl_retval; + xl_retval = xlat_main( vec4(xlv_TEXCOORD0)); + gl_FragData[0] = vec4( xl_retval); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-ir.txt new file mode 100644 index 000000000..10d823aaf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-ir.txt @@ -0,0 +1,60 @@ +varying vec4 xlv_TEXCOORD0; +uniform sampler2DShadow shadowmap; +float xll_shadow2D ( + in sampler2DShadow s_1, + in vec3 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = shadow2D (s_1, coord_2); + return tmpvar_3.x; +} + +float xll_shadow2Dproj ( + in sampler2DShadow s_4, + in vec4 coord_5 +) +{ + vec4 tmpvar_6; + tmpvar_6 = shadow2DProj (s_4, coord_5); + return tmpvar_6.x; +} + +vec4 xlat_main ( + in vec4 uv_7 +) +{ + float s2_8; + float s1_9; + float tmpvar_10; + tmpvar_10 = xll_shadow2D (shadowmap, uv_7.xyz); + float tmpvar_11; + tmpvar_11 = tmpvar_10; + s1_9 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = xll_shadow2Dproj (shadowmap, uv_7); + float tmpvar_13; + tmpvar_13 = tmpvar_12; + s2_8 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = vec4((s1_9 + s2_8)); + return tmpvar_14; +} + +void main () +{ + vec4 xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_17; + tmpvar_17 = xlat_main (tmpvar_16); + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_15 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = xl_retval_15.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-irES.txt new file mode 100644 index 000000000..974d66ab5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-irES.txt @@ -0,0 +1,61 @@ +#extension GL_EXT_shadow_samplers : enable +varying highp vec4 xlv_TEXCOORD0; +uniform sampler2DShadow shadowmap; +float xll_shadow2D ( + in sampler2DShadow s_1, + in vec3 coord_2 +) +{ + lowp float tmpvar_3; + tmpvar_3 = shadow2DEXT (s_1, coord_2); + return tmpvar_3; +} + +float xll_shadow2Dproj ( + in sampler2DShadow s_4, + in vec4 coord_5 +) +{ + lowp float tmpvar_6; + tmpvar_6 = shadow2DProjEXT (s_4, coord_5); + return tmpvar_6; +} + +lowp vec4 xlat_main ( + in highp vec4 uv_7 +) +{ + lowp float s2_8; + lowp float s1_9; + float tmpvar_10; + tmpvar_10 = xll_shadow2D (shadowmap, uv_7.xyz); + float tmpvar_11; + tmpvar_11 = tmpvar_10; + s1_9 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = xll_shadow2Dproj (shadowmap, uv_7); + float tmpvar_13; + tmpvar_13 = tmpvar_12; + s2_8 = tmpvar_13; + lowp vec4 tmpvar_14; + tmpvar_14 = vec4((s1_9 + s2_8)); + return tmpvar_14; +} + +void main () +{ + lowp vec4 xl_retval_15; + highp vec4 tmpvar_16; + tmpvar_16 = xlv_TEXCOORD0.xyzw; + lowp vec4 tmpvar_17; + tmpvar_17 = xlat_main (tmpvar_16); + lowp vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_15 = tmpvar_18; + lowp vec4 tmpvar_19; + tmpvar_19 = xl_retval_15.xyzw; + lowp vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-out.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-out.txt new file mode 100644 index 000000000..3c5699eca --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-out.txt @@ -0,0 +1,7 @@ +varying vec4 xlv_TEXCOORD0; +uniform sampler2DShadow shadowmap; +void main () +{ + gl_FragData[0] = vec4((shadow2D (shadowmap, xlv_TEXCOORD0.xyz).x + shadow2DProj (shadowmap, xlv_TEXCOORD0).x)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES.txt new file mode 100644 index 000000000..d0ee138b6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES.txt @@ -0,0 +1,8 @@ +#extension GL_EXT_shadow_samplers : enable +varying highp vec4 xlv_TEXCOORD0; +uniform sampler2DShadow shadowmap; +void main () +{ + gl_FragData[0] = vec4((shadow2DEXT (shadowmap, xlv_TEXCOORD0.xyz) + shadow2DProjEXT (shadowmap, xlv_TEXCOORD0))); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/texProj-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/texProj-inES.txt new file mode 100644 index 000000000..0a0876aba --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/texProj-inES.txt @@ -0,0 +1,20 @@ +#extension GL_EXT_shadow_samplers : require +#extension GL_EXT_shader_texture_lod : require + +uniform sampler2D tex; +uniform sampler2DShadow shadowmap; + +varying highp vec4 uv; + +void main() { + lowp vec4 c; + c = texture2DProj(tex, uv); + c += texture2DProj(tex, uv.xyz); + c += texture2DProjLodEXT(tex, uv, 1.0); + c += texture2DProjLodEXT(tex, uv.xyz, 1.0); + + c += vec4(shadow2DEXT(shadowmap, uv.xyz)); + c += vec4(shadow2DProjEXT(shadowmap, uv)); + + gl_FragColor = c; +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/texProj-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/texProj-irES.txt new file mode 100644 index 000000000..d8923f11b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/texProj-irES.txt @@ -0,0 +1,47 @@ +#extension GL_EXT_shader_texture_lod : enable +#extension GL_EXT_shadow_samplers : enable +varying highp vec4 uv; +uniform sampler2DShadow shadowmap; +uniform sampler2D tex; +void main () +{ + lowp vec4 c_1; + lowp vec4 tmpvar_2; + tmpvar_2 = texture2DProj (tex, uv); + lowp vec4 tmpvar_3; + tmpvar_3 = tmpvar_2; + c_1 = tmpvar_3; + lowp vec4 tmpvar_4; + tmpvar_4 = texture2DProj (tex, uv.xyz); + lowp vec4 tmpvar_5; + tmpvar_5 = (c_1 + tmpvar_4); + c_1 = tmpvar_5; + lowp vec4 tmpvar_6; + tmpvar_6 = texture2DProjLodEXT (tex, uv, 1.0); + lowp vec4 tmpvar_7; + tmpvar_7 = (c_1 + tmpvar_6); + c_1 = tmpvar_7; + lowp vec4 tmpvar_8; + tmpvar_8 = texture2DProjLodEXT (tex, uv.xyz, 1.0); + lowp vec4 tmpvar_9; + tmpvar_9 = (c_1 + tmpvar_8); + c_1 = tmpvar_9; + lowp float tmpvar_10; + tmpvar_10 = shadow2DEXT (shadowmap, uv.xyz); + lowp vec4 tmpvar_11; + tmpvar_11 = vec4(tmpvar_10); + lowp vec4 tmpvar_12; + tmpvar_12 = (c_1 + tmpvar_11); + c_1 = tmpvar_12; + lowp float tmpvar_13; + tmpvar_13 = shadow2DProjEXT (shadowmap, uv); + lowp vec4 tmpvar_14; + tmpvar_14 = vec4(tmpvar_13); + lowp vec4 tmpvar_15; + tmpvar_15 = (c_1 + tmpvar_14); + c_1 = tmpvar_15; + lowp vec4 tmpvar_16; + tmpvar_16 = c_1; + gl_FragColor = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/texProj-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/texProj-outES.txt new file mode 100644 index 000000000..fbe517e2d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/texProj-outES.txt @@ -0,0 +1,12 @@ +#extension GL_EXT_shader_texture_lod : enable +#extension GL_EXT_shadow_samplers : enable +varying highp vec4 uv; +uniform sampler2DShadow shadowmap; +uniform sampler2D tex; +void main () +{ + lowp vec4 tmpvar_1; + tmpvar_1 = (((((texture2DProj (tex, uv) + texture2DProj (tex, uv.xyz)) + texture2DProjLod (tex, uv, 1.0)) + texture2DProjLod (tex, uv.xyz, 1.0)) + vec4(shadow2DEXT (shadowmap, uv.xyz))) + vec4(shadow2DProjEXT (shadowmap, uv))); + gl_FragColor = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/types-writemask-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/types-writemask-ir.txt index 20a7ebf15..f882fb86b 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/types-writemask-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/types-writemask-ir.txt @@ -1,14 +1,14 @@ void main () { - vec4 c; - float tmpvar_1; - tmpvar_1 = gl_FragCoord.y; - c.x = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(4.0, 5.0, 6.0); - c.yzw = tmpvar_2.xxyz.yzw; - vec4 tmpvar_3; - tmpvar_3 = c; - gl_FragColor = tmpvar_3; + vec4 c_1; + float tmpvar_2; + tmpvar_2 = gl_FragCoord.y; + c_1.x = tmpvar_2; + vec3 tmpvar_3; + tmpvar_3 = vec3(4.0, 5.0, 6.0); + c_1.yzw = tmpvar_3.xxyz.yzw; + vec4 tmpvar_4; + tmpvar_4 = c_1; + gl_FragColor = tmpvar_4; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/types-writemask-out.txt b/3rdparty/glsl-optimizer/tests/fragment/types-writemask-out.txt index 4c9eacc11..60c5041f7 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/types-writemask-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/types-writemask-out.txt @@ -1,8 +1,8 @@ void main () { - vec4 c; - c.x = gl_FragCoord.y; - c.yzw = vec3(4.0, 5.0, 6.0); - gl_FragColor = c; + vec4 c_1; + c_1.x = gl_FragCoord.y; + c_1.yzw = vec3(4.0, 5.0, 6.0); + gl_FragColor = c_1; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-ir.txt deleted file mode 100644 index 00189f203..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,159 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -uniform sampler2D _MainTex; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_6; - tmpvar_6 = UnpackNormal (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.Normal = tmpvar_8; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - vec3 viewN; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_BumpMap = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - float tmpvar_7; - tmpvar_7 = dot (IN.TtoV0, o.Normal); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - viewN.x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = dot (IN.TtoV1, o.Normal); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - viewN.y = vec2(tmpvar_10).y; - float tmpvar_11; - tmpvar_11 = dot (IN.TtoV2, o.Normal); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - viewN.z = vec3(tmpvar_12).z; - vec3 tmpvar_13; - tmpvar_13 = viewN; - o.Normal = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_14.xyz.xyz; - float tmpvar_15; - tmpvar_15 = o.Specular; - res.w = vec4(tmpvar_15).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.TtoV0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.TtoV1 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.TtoV2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-out.txt deleted file mode 100644 index 3c1dec354..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _BumpMap; -void main () -{ - vec4 res; - vec3 viewN; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_1; - tmpvar_1 = normal.xyz; - viewN.x = dot (gl_TexCoord[1].xyz, tmpvar_1); - viewN.y = dot (gl_TexCoord[2].xyz, tmpvar_1); - viewN.z = dot (gl_TexCoord[3].xyz, tmpvar_1); - res.xyz = ((viewN * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-ir.txt deleted file mode 100644 index ed5b5cdf3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,163 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_6; - tmpvar_6 = UnpackNormal (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.Normal = tmpvar_8; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_11.xyz.xyz; - vec4 tmpvar_12; - tmpvar_12 = LightingLambert_PrePass (o, light); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - col = tmpvar_13; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-out.txt deleted file mode 100644 index 43ddd4de4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-out.txt +++ /dev/null @@ -1,24 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 light; - vec2 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_2.xyz * light.xyz); - c_i0.w = tmpvar_2.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-ir.txt deleted file mode 100644 index ceacd3fca..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-ir.txt +++ /dev/null @@ -1,234 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 vlight; - vec4 _ShadowCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -float unitySampleShadow ( - in vec4 shadowCoord -) -{ - float shadow; - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_ShadowMapTexture, shadowCoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - shadow = tmpvar_2; - return shadow; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - float tmpvar_8; - tmpvar_8 = unitySampleShadow (IN._ShadowCoord); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - atten = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = IN.viewDir.xyz; - vec3 tmpvar_11; - tmpvar_11 = normalize (tmpvar_10); - vec4 tmpvar_12; - tmpvar_12 = LightingBlinnPhong (o, IN.lightDir, tmpvar_11, atten); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - c = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_14.xyz.xyz; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.vlight = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._ShadowCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-out.txt deleted file mode 100644 index 7251aaf95..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-out.txt +++ /dev/null @@ -1,35 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3.xyz * _Color.xyz); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_5; - tmpvar_5 = normal.xyz; - vec4 tmpvar_6; - tmpvar_6 = texture2DProj (_ShadowMapTexture, gl_TexCoord[4]); - vec4 c_i0; - float tmpvar_7; - tmpvar_7 = (pow (max (0.0, dot (tmpvar_5, normalize ((tmpvar_2 + normalize (gl_TexCoord[1].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0.xyz = ((((tmpvar_4 * _LightColor0.xyz) * max (0.0, dot (tmpvar_5, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_7)) * (tmpvar_6.x * 2.0)); - c_i0.w = ((tmpvar_3.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_7) * tmpvar_6.x)); - c = c_i0; - c.xyz = (c_i0.xyz + (tmpvar_4 * gl_TexCoord[3].xyz)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-ir.txt deleted file mode 100644 index 7c3e615ea..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-ir.txt +++ /dev/null @@ -1,215 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 viewDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = IN.viewDir.xyz; - vec3 tmpvar_10; - tmpvar_10 = normalize (tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_12; - tmpvar_12 = LightingBlinnPhong (o, lightDir, tmpvar_10, (tmpvar_11.w * 1.0)); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - c = tmpvar_13; - float tmpvar_14; - tmpvar_14 = 0.0; - c.w = vec4(tmpvar_14).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.viewDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-out.txt deleted file mode 100644 index 3336332ef..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-out.txt +++ /dev/null @@ -1,33 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_4; - tmpvar_4 = normal.xyz; - float atten; - atten = texture2D (_LightTexture0, gl_TexCoord[3].xy).w; - vec4 c_i0; - float tmpvar_5; - tmpvar_5 = (pow (max (0.0, dot (tmpvar_4, normalize ((tmpvar_2 + normalize (gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0.xyz = (((((tmpvar_3.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_4, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_5)) * (atten * 2.0)); - c_i0.w = ((tmpvar_3.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_5) * atten)); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-ir.txt deleted file mode 100644 index 6dad1fa3b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-ir.txt +++ /dev/null @@ -1,320 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_12; - tmpvar_12 = DecodeLightmap (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - lmFull = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_15; - tmpvar_15 = DecodeLightmap (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - lmIndirect = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_18; - tmpvar_18 = vec3(tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = mix (lmIndirect, lmFull, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lm = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (light.xyz + lm); - light.xyz = tmpvar_21.xyz.xyz; - vec4 tmpvar_22; - tmpvar_22 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_23; - tmpvar_23 = tmpvar_22; - col = tmpvar_23; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-out.txt deleted file mode 100644 index 167aba285..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-out.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 light; - vec2 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); - vec4 c; - float tmpvar_5; - tmpvar_5 = (tmpvar_4.w * tmpvar_3.w); - c.xyz = (((tmpvar_3.xyz * _Color.xyz) * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_5)); - c.w = ((tmpvar_3.w * _Color.w) + (tmpvar_5 * _SpecColor.w)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-ir.txt deleted file mode 100644 index fb8a69493..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-ir.txt +++ /dev/null @@ -1,167 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_DecalTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform sampler2D _DecalTex; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 decal; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalTex, IN.uv_DecalTex); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - decal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(decal.w); - vec3 tmpvar_6; - tmpvar_6 = mix (c.xyz, decal.xyz, tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - c.xyz = tmpvar_7.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = (c * _Color); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = c.xyz; - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = c.w; - o.Alpha = tmpvar_10; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_DecalTex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, 1.0); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-out.txt deleted file mode 100644 index f114f3ad6..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform sampler2D _DecalTex; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec4 c_i0; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, tmpvar_1.xy); - c_i0 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalTex, tmpvar_1.zw); - c_i0.xyz = mix (tmpvar_2.xyz, tmpvar_3.xyz, tmpvar_3.www); - vec4 tmpvar_4; - tmpvar_4 = (c_i0 * _Color); - c_i0 = tmpvar_4; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-ir.txt deleted file mode 100644 index 3b1341ddc..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-ir.txt +++ /dev/null @@ -1,176 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_DecalTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _DecalTex; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 decal; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalTex, IN.uv_DecalTex); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - decal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(decal.w); - vec3 tmpvar_6; - tmpvar_6 = mix (c.xyz, decal.xyz, tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - c.xyz = tmpvar_7.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = (c * _Color); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = c.xyz; - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = c.w; - o.Alpha = tmpvar_10; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_DecalTex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_11; - tmpvar_11 = LightingLambert (o, lightDir, (tmpvar_10.w * 1.0)); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - float tmpvar_13; - tmpvar_13 = 0.0; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-out.txt deleted file mode 100644 index 0c1629729..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _DecalTex; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec4 c_i0; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, tmpvar_1.xy); - c_i0 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalTex, tmpvar_1.zw); - c_i0.xyz = mix (tmpvar_2.xyz, tmpvar_3.xyz, tmpvar_3.www); - vec4 tmpvar_4; - tmpvar_4 = (c_i0 * _Color); - c_i0 = tmpvar_4; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-ir.txt deleted file mode 100644 index bdae95dea..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-ir.txt +++ /dev/null @@ -1,157 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_DecalTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _DecalTex; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 decal; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalTex, IN.uv_DecalTex); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - decal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(decal.w); - vec3 tmpvar_6; - tmpvar_6 = mix (c.xyz, decal.xyz, tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - c.xyz = tmpvar_7.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = (c * _Color); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = c.xyz; - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = c.w; - o.Alpha = tmpvar_10; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_DecalTex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-out.txt deleted file mode 100644 index 99b5c8b3b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-out.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _DecalTex; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 light; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, tmpvar_1.xy); - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalTex, tmpvar_1.zw); - c.xyz = mix (tmpvar_2.xyz, tmpvar_3.xyz, tmpvar_3.www); - vec4 tmpvar_4; - tmpvar_4 = (c * _Color); - c = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_4.xyz * light.xyz); - c_i0.w = tmpvar_4.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-ir.txt deleted file mode 100644 index beb3c35dd..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-ir.txt +++ /dev/null @@ -1,166 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_12; - tmpvar_12 = vec2(tmpvar_11); - vec2 tmpvar_13; - tmpvar_13 = tmpvar_12.xy; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_LightTexture0, tmpvar_13); - vec4 tmpvar_15; - tmpvar_15 = LightingLambert (o, lightDir, tmpvar_14.w); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-out.txt deleted file mode 100644 index eda730dda..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-out.txt +++ /dev/null @@ -1,19 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[3].xyz; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * texture2D (_LightTexture0, vec2(dot (tmpvar_1, tmpvar_1))).w) * 2.0)); - c_i0_i1.w = tmpvar_2.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-ir.txt deleted file mode 100644 index 6527e10b7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-ir.txt +++ /dev/null @@ -1,95 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform sampler2D _MainTex; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-out.txt deleted file mode 100644 index 2a4e65f10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-ir.txt deleted file mode 100644 index aec3aac01..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-ir.txt +++ /dev/null @@ -1,281 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_12; - tmpvar_12 = DecodeLightmap (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - lmFull = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_15; - tmpvar_15 = DecodeLightmap (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - lmIndirect = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_18; - tmpvar_18 = vec3(tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = mix (lmIndirect, lmFull, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lm = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (light.xyz + lm); - light.xyz = tmpvar_21.xyz.xyz; - vec4 tmpvar_22; - tmpvar_22 = LightingLambert_PrePass (o, light); - vec4 tmpvar_23; - tmpvar_23 = tmpvar_22; - col = tmpvar_23; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-out.txt deleted file mode 100644 index 258a9b7ee..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); - vec4 c_i0; - c_i0.xyz = (tmpvar_2.xyz * light.xyz); - c_i0.w = tmpvar_2.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt deleted file mode 100644 index a3b35ccd6..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt +++ /dev/null @@ -1,150 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 vlight; -}; -varying vec4 xlv_FOG; -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - float tmpvar_1; - tmpvar_1 = 1.0; - atten = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec4 tmpvar_9; - tmpvar_9 = LightingLambert (o, _WorldSpaceLightPos0.xyz, atten); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - c = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = o.Alpha; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.vlight = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt deleted file mode 100644 index bbb3a5a16..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_1.xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, _WorldSpaceLightPos0.xyz)) * 2.0)); - c_i0_i1.w = tmpvar_1.w; - c = c_i0_i1; - c.xyz = (c_i0_i1.xyz + (tmpvar_1.xyz * gl_TexCoord[2].xyz)); - c.w = tmpvar_1.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-ir.txt deleted file mode 100644 index 0423c7150..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-ir.txt +++ /dev/null @@ -1,197 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Detail; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Detail; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Detail, IN.uv_Detail); - vec3 tmpvar_4; - tmpvar_4 = (c.xyz * (tmpvar_3.xyz * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - vec3 tmpvar_5; - tmpvar_5 = c.xyz; - o.Albedo = tmpvar_5; - float tmpvar_6; - tmpvar_6 = c.w; - o.Alpha = tmpvar_6; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Detail = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = UnitySpotCookie (IN._LightCoord); - float tmpvar_13; - tmpvar_13 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_12) * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = 0.0; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-out.txt deleted file mode 100644 index dcf872fc8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Detail; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[3]; - vec4 c; - vec4 c_i0; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); - c_i0 = tmpvar_3; - c_i0.xyz = (tmpvar_3.xyz * (texture2D (_Detail, tmpvar_1.zw).xyz * 2.0)); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = ((c_i0.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = c_i0.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-ir.txt deleted file mode 100644 index 95e6be307..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-ir.txt +++ /dev/null @@ -1,102 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Detail; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform sampler2D _MainTex; -uniform sampler2D _Detail; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Detail, IN.uv_Detail); - vec3 tmpvar_4; - tmpvar_4 = (c.xyz * (tmpvar_3.xyz * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - vec3 tmpvar_5; - tmpvar_5 = c.xyz; - o.Albedo = tmpvar_5; - float tmpvar_6; - tmpvar_6 = c.w; - o.Alpha = tmpvar_6; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-out.txt deleted file mode 100644 index 2a4e65f10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-ir.txt deleted file mode 100644 index 25674b82c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-ir.txt +++ /dev/null @@ -1,95 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 uvgrab; - vec2 uvbump; - vec2 uvmain; -}; -uniform sampler2D _MainTex; -uniform vec4 _GrabTexture_TexelSize; -uniform sampler2D _GrabTexture; -uniform sampler2D _BumpMap; -uniform float _BumpAmt; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec4 frag ( - in v2f i -) -{ - vec4 tint; - vec4 col; - vec2 offset; - vec2 bump; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_BumpMap, i.uvbump); - vec4 tmpvar_2; - tmpvar_2 = UnpackNormal (tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - bump = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((bump * _BumpAmt) * _GrabTexture_TexelSize.xy); - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = ((offset * i.uvgrab.z) + i.uvgrab.xy); - i.uvgrab.xy = tmpvar_5.xy.xy; - vec4 tmpvar_6; - tmpvar_6 = texture2DProj (_GrabTexture, i.uvgrab); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - col = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, i.uvmain); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - tint = tmpvar_9; - return (col * tint); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uvgrab = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uvbump = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xy; - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.uvmain = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = frag (xlt_i); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xl_retval = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = xl_retval.xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - gl_FragData[0] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-ir.txt deleted file mode 100644 index de3202664..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-ir.txt +++ /dev/null @@ -1,116 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec2 bumpuv[2]; - vec3 viewDir; -}; -varying vec4 xlv_FOG; -uniform vec4 _horizonColor; -uniform sampler2D _ColorControl; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 water; - float fresnel; - vec3 bump; - vec3 bump2; - vec3 bump1; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_BumpMap, i.bumpuv[0]); - vec4 tmpvar_2; - tmpvar_2 = UnpackNormal (tmpvar_1); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2.xyz; - bump1 = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_BumpMap, i.bumpuv[1]); - vec4 tmpvar_5; - tmpvar_5 = UnpackNormal (tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5.xyz; - bump2 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = ((bump1 + bump2) * 0.5); - bump = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (i.viewDir, bump); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - fresnel = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10.x = fresnel; - tmpvar_10.y = fresnel; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_ColorControl, tmpvar_10); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - water = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = vec3(water.w); - vec3 tmpvar_14; - tmpvar_14 = mix (water.xyz, _horizonColor.xyz, tmpvar_13); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - col.xyz = tmpvar_15.xyz.xyz; - float tmpvar_16; - tmpvar_16 = _horizonColor.w; - col.w = vec4(tmpvar_16).w; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_i.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.bumpuv[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_i.bumpuv[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_i.viewDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag (xlt_i); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-out.txt deleted file mode 100644 index 0f89e80b7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -uniform vec4 _horizonColor; -uniform sampler2D _ColorControl; -uniform sampler2D _BumpMap; -void main () -{ - vec2 tmpvar_1[2]; - tmpvar_1[0] = gl_TexCoord[0].xy; - tmpvar_1[1] = gl_TexCoord[1].xy; - vec4 col; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1[0]).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 normal_i0; - normal_i0.xy = ((texture2D (_BumpMap, tmpvar_1[1]).wy * 2.0) - 1.0); - normal_i0.z = sqrt (((1.0 - (normal_i0.x * normal_i0.x)) - (normal_i0.y * normal_i0.y))); - float tmpvar_2; - tmpvar_2 = dot (gl_TexCoord[2].xyz, ((normal.xyz + normal_i0.xyz) * 0.5)); - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2; - tmpvar_3.y = tmpvar_2; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_ColorControl, tmpvar_3); - col.xyz = mix (tmpvar_4.xyz, _horizonColor.xyz, tmpvar_4.www); - col.w = _horizonColor.w; - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-ir.txt deleted file mode 100644 index c500aef58..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-ir.txt +++ /dev/null @@ -1,38 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 uv; -}; -uniform sampler2D _GrabTexture; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_GrabTexture, i.uv); - return (1.0 - tmpvar_1); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-ir.txt deleted file mode 100644 index 5bc54c861..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-ir.txt +++ /dev/null @@ -1,128 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec4 nz; -}; -uniform sampler2D _MainTex; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec2 EncodeViewNormalStereo ( - in vec3 n -) -{ - vec2 enc; - float kScale; - float tmpvar_1; - tmpvar_1 = 1.7777; - kScale = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (n.xy / (n.z + 1.0)); - enc = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (enc / kScale); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((enc * 0.5) + 0.5); - enc = tmpvar_4; - return enc; -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 EncodeDepthNormal ( - in float depth, - in vec3 normal -) -{ - vec4 enc; - vec2 tmpvar_1; - tmpvar_1 = EncodeViewNormalStereo (normal); - vec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - enc.xy = tmpvar_2.xy.xy; - vec2 tmpvar_3; - tmpvar_3 = EncodeFloatRG (depth); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - enc.zw = tmpvar_4.xxxy.zw; - return enc; -} - -vec4 frag ( - in v2f i -) -{ - vec4 texcol; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - texcol = tmpvar_2; - xll_clip ((texcol.w - _Cutoff)); - vec4 tmpvar_3; - tmpvar_3 = EncodeDepthNormal (i.nz.w, i.nz.xyz); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.nz = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-out.txt deleted file mode 100644 index 0d7f18884..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _MainTex; -uniform float _Cutoff; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - float x; - x = (texture2D (_MainTex, gl_TexCoord[0].xy).w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 enc; - enc.xy = ((((tmpvar_1.xy / (tmpvar_1.z + 1.0)) / 1.7777) * 0.5) + 0.5); - vec2 enc_i0_i1; - vec2 tmpvar_2; - tmpvar_2 = fract ((vec2(1.0, 255.0) * tmpvar_1.w)); - enc_i0_i1 = tmpvar_2; - enc_i0_i1.x = (tmpvar_2.x - (tmpvar_2.y * 0.00392157)); - enc.zw = enc_i0_i1; - gl_FragData[0] = enc; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-ir.txt deleted file mode 100644 index 5bc54c861..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-ir.txt +++ /dev/null @@ -1,128 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec4 nz; -}; -uniform sampler2D _MainTex; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec2 EncodeViewNormalStereo ( - in vec3 n -) -{ - vec2 enc; - float kScale; - float tmpvar_1; - tmpvar_1 = 1.7777; - kScale = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (n.xy / (n.z + 1.0)); - enc = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (enc / kScale); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((enc * 0.5) + 0.5); - enc = tmpvar_4; - return enc; -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 EncodeDepthNormal ( - in float depth, - in vec3 normal -) -{ - vec4 enc; - vec2 tmpvar_1; - tmpvar_1 = EncodeViewNormalStereo (normal); - vec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - enc.xy = tmpvar_2.xy.xy; - vec2 tmpvar_3; - tmpvar_3 = EncodeFloatRG (depth); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - enc.zw = tmpvar_4.xxxy.zw; - return enc; -} - -vec4 frag ( - in v2f i -) -{ - vec4 texcol; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - texcol = tmpvar_2; - xll_clip ((texcol.w - _Cutoff)); - vec4 tmpvar_3; - tmpvar_3 = EncodeDepthNormal (i.nz.w, i.nz.xyz); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.nz = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-out.txt deleted file mode 100644 index 0d7f18884..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _MainTex; -uniform float _Cutoff; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - float x; - x = (texture2D (_MainTex, gl_TexCoord[0].xy).w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 enc; - enc.xy = ((((tmpvar_1.xy / (tmpvar_1.z + 1.0)) / 1.7777) * 0.5) + 0.5); - vec2 enc_i0_i1; - vec2 tmpvar_2; - tmpvar_2 = fract ((vec2(1.0, 255.0) * tmpvar_1.w)); - enc_i0_i1 = tmpvar_2; - enc_i0_i1.x = (tmpvar_2.x - (tmpvar_2.y * 0.00392157)); - enc.zw = enc_i0_i1; - gl_FragData[0] = enc; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-ir.txt deleted file mode 100644 index 33fcaec66..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-ir.txt +++ /dev/null @@ -1,52 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _MainTex; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 frag ( - in v2f i -) -{ - vec4 texcol; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - texcol = tmpvar_2; - xll_clip ((texcol.w - 0.001)); - return vec4(0.0, 0.0, 0.0, 0.0); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-ir.txt deleted file mode 100644 index e08ef4f65..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-ir.txt +++ /dev/null @@ -1,70 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _RampTex; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f_img i -) -{ - vec4 color; - float bb; - float gg; - float rr; - vec4 orig; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - orig = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_RampTex, orig.xx); - float tmpvar_4; - tmpvar_4 = (tmpvar_3.x + 1e-05); - rr = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_RampTex, orig.yy); - float tmpvar_6; - tmpvar_6 = (tmpvar_5.y + 2e-05); - gg = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_RampTex, orig.zz); - float tmpvar_8; - tmpvar_8 = (tmpvar_7.z + 3e-05); - bb = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.x = rr; - tmpvar_9.y = gg; - tmpvar_9.z = bb; - tmpvar_9.w = orig.w; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - color = tmpvar_10; - return color; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-ir.txt deleted file mode 100644 index 58de22155..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-ir.txt +++ /dev/null @@ -1,84 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv[3]; -}; -uniform float _Treshold; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - float len; - vec3 diff; - vec3 p3; - vec3 p2; - vec3 p1; - vec4 original; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv[0]); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - original = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = original.xyz; - p1 = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, i.uv[1]); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - p2 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, i.uv[2]); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - p3 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (((p1 * 2.0) - p2) - p3); - diff = tmpvar_8; - float tmpvar_9; - tmpvar_9 = dot (diff, diff); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - len = tmpvar_10; - if ((len >= _Treshold)) { - vec3 tmpvar_11; - tmpvar_11 = vec3(0.0, 0.0, 0.0); - original.xyz = tmpvar_11.xyz.xyz; - }; - return original; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv[0] = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uv[1] = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xy; - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.uv[2] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = frag (xlt_i); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xl_retval = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = xl_retval.xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - gl_FragData[0] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-out.txt deleted file mode 100644 index 76cd800a4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform float _Treshold; -uniform sampler2D _MainTex; -void main () -{ - vec2 tmpvar_1[3]; - tmpvar_1[0] = gl_TexCoord[0].xy; - tmpvar_1[1] = gl_TexCoord[1].xy; - tmpvar_1[2] = gl_TexCoord[2].xy; - vec4 original; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, tmpvar_1[0]); - original = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (((tmpvar_2.xyz * 2.0) - texture2D (_MainTex, tmpvar_1[1]).xyz) - texture2D (_MainTex, tmpvar_1[2]).xyz); - float tmpvar_4; - tmpvar_4 = dot (tmpvar_3, tmpvar_3); - if ((tmpvar_4 >= _Treshold)) { - original.xyz = vec3(0.0, 0.0, 0.0); - }; - gl_FragData[0] = original; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-ir.txt deleted file mode 100644 index 5e8bd5fe9..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-ir.txt +++ /dev/null @@ -1,66 +0,0 @@ -struct v2f { - vec4 pos; - vec4 uv[2]; -}; -uniform sampler2D _MainTex; -uniform vec4 _Color; -vec4 frag ( - in v2f i -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv[0].xy); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, i.uv[0].zw); - vec4 tmpvar_4; - tmpvar_4 = (c + tmpvar_3); - c = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex, i.uv[1].xy); - vec4 tmpvar_6; - tmpvar_6 = (c + tmpvar_5); - c = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, i.uv[1].zw); - vec4 tmpvar_8; - tmpvar_8 = (c + tmpvar_7); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (c.xyz * _Color.xyz); - c.xyz = tmpvar_9.xyz.xyz; - return (c * _Color.w); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv[0] = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uv[1] = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-out.txt deleted file mode 100644 index 286ab7904..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-out.txt +++ /dev/null @@ -1,15 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1[2]; - tmpvar_1[0] = gl_TexCoord[0]; - tmpvar_1[1] = gl_TexCoord[1]; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = (((texture2D (_MainTex, tmpvar_1[0].xy) + texture2D (_MainTex, tmpvar_1[0].zw)) + texture2D (_MainTex, tmpvar_1[1].xy)) + texture2D (_MainTex, tmpvar_1[1].zw)); - c = tmpvar_2; - c.xyz = (tmpvar_2.xyz * _Color.xyz); - gl_FragData[0] = (c * _Color.w); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-ir.txt deleted file mode 100644 index ba3fc4ed3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-ir.txt +++ /dev/null @@ -1,85 +0,0 @@ -struct v2f { - vec4 pos; - vec4 uv[4]; -}; -uniform sampler2D _MainTex; -uniform vec4 _Color; -vec4 frag ( - in v2f i -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv[0].xy); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, i.uv[1].xy); - vec4 tmpvar_4; - tmpvar_4 = (c + tmpvar_3); - c = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex, i.uv[2].xy); - vec4 tmpvar_6; - tmpvar_6 = (c + tmpvar_5); - c = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, i.uv[3].xy); - vec4 tmpvar_8; - tmpvar_8 = (c + tmpvar_7); - c = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (c / 4.0); - c = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (c.xyz * _Color.xyz); - c.xyz = tmpvar_10.xyz.xyz; - vec3 tmpvar_11; - tmpvar_11 = (c.xyz * (c.w + _Color.w)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv[0] = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uv[1] = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.uv[2] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_i.uv[3] = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = frag (xlt_i); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-out.txt deleted file mode 100644 index 4435d2203..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-out.txt +++ /dev/null @@ -1,19 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1[4]; - tmpvar_1[0] = gl_TexCoord[0]; - tmpvar_1[1] = gl_TexCoord[1]; - tmpvar_1[2] = gl_TexCoord[2]; - tmpvar_1[3] = gl_TexCoord[3]; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = ((((texture2D (_MainTex, tmpvar_1[0].xy) + texture2D (_MainTex, tmpvar_1[1].xy)) + texture2D (_MainTex, tmpvar_1[2].xy)) + texture2D (_MainTex, tmpvar_1[3].xy)) / 4.0); - c = tmpvar_2; - c.xyz = (tmpvar_2.xyz * _Color.xyz); - c.xyz = (c.xyz * (tmpvar_2.w + _Color.w)); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-ir.txt deleted file mode 100644 index 0f6889c5b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-ir.txt +++ /dev/null @@ -1,75 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _RampTex; -uniform float _RampOffset; -uniform sampler2D _MainTex; -float Luminance ( - in vec3 c -) -{ - float tmpvar_1; - tmpvar_1 = dot (c, vec3(0.22, 0.707, 0.071)); - return tmpvar_1; -} - -vec4 frag ( - in v2f_img i -) -{ - vec4 xlat_var_output; - vec2 remap; - float grayscale; - vec4 original; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - original = tmpvar_2; - float tmpvar_3; - tmpvar_3 = Luminance (original.xyz); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - grayscale = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5.y = 0.5; - tmpvar_5.x = (grayscale + _RampOffset); - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - remap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_RampTex, remap); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlat_var_output = tmpvar_8; - float tmpvar_9; - tmpvar_9 = original.w; - xlat_var_output.w = vec4(tmpvar_9).w; - return xlat_var_output; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-out.txt deleted file mode 100644 index 6411213c7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-out.txt +++ /dev/null @@ -1,16 +0,0 @@ -uniform sampler2D _RampTex; -uniform float _RampOffset; -uniform sampler2D _MainTex; -void main () -{ - vec4 xlat_var_output; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec2 tmpvar_2; - tmpvar_2.y = 0.5; - tmpvar_2.x = (dot (tmpvar_1.xyz, vec3(0.22, 0.707, 0.071)) + _RampOffset); - xlat_var_output = texture2D (_RampTex, tmpvar_2); - xlat_var_output.w = tmpvar_1.w; - gl_FragData[0] = xlat_var_output; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-ir.txt deleted file mode 100644 index bb20a3aa3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-ir.txt +++ /dev/null @@ -1,143 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -uniform vec4 _ZBufferParams; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -float Linear01Depth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -vec2 EncodeViewNormalStereo ( - in vec3 n -) -{ - vec2 enc; - float kScale; - float tmpvar_1; - tmpvar_1 = 1.7777; - kScale = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (n.xy / (n.z + 1.0)); - enc = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (enc / kScale); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((enc * 0.5) + 0.5); - enc = tmpvar_4; - return enc; -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 EncodeDepthNormal ( - in float depth, - in vec3 normal -) -{ - vec4 enc; - vec2 tmpvar_1; - tmpvar_1 = EncodeViewNormalStereo (normal); - vec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - enc.xy = tmpvar_2.xy.xy; - vec2 tmpvar_3; - tmpvar_3 = EncodeFloatRG (depth); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - enc.zw = tmpvar_4.xxxy.zw; - return enc; -} - -vec4 frag ( - in v2f i -) -{ - vec4 n; - float d; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_CameraDepthTexture, i.uv); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - d = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_CameraNormalsTexture, i.uv); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - n = tmpvar_4; - float tmpvar_5; - tmpvar_5 = Linear01Depth (d); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - d = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = ((n.xyz * 2.0) - 1.0); - n.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = -(n.z); - n.z = vec3(tmpvar_8).z; - vec4 tmpvar_9; - if ((d < 0.999985)) { - vec4 tmpvar_10; - tmpvar_10 = EncodeDepthNormal (d, n.xyz); - tmpvar_9 = tmpvar_10; - } else { - tmpvar_9 = vec4(0.5, 0.5, 1.0, 1.0); - }; - return tmpvar_9; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-out.txt deleted file mode 100644 index 764b4c9f1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform vec4 _ZBufferParams; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -void main () -{ - vec2 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xy; - vec4 n; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_CameraNormalsTexture, tmpvar_1); - n = tmpvar_2; - float tmpvar_3; - tmpvar_3 = (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, tmpvar_1).x) + _ZBufferParams.y))); - n.xyz = ((tmpvar_2.xyz * 2.0) - 1.0); - n.z = -(n.z); - vec4 tmpvar_4; - if ((tmpvar_3 < 0.999985)) { - vec4 enc; - enc.xy = ((((n.xy / (n.z + 1.0)) / 1.7777) * 0.5) + 0.5); - vec2 enc_i0_i1; - vec2 tmpvar_5; - tmpvar_5 = fract ((vec2(1.0, 255.0) * tmpvar_3)); - enc_i0_i1 = tmpvar_5; - enc_i0_i1.x = (tmpvar_5.x - (tmpvar_5.y * 0.00392157)); - enc.zw = enc_i0_i1; - tmpvar_4 = enc; - } else { - tmpvar_4 = vec4(0.5, 0.5, 1.0, 1.0); - }; - gl_FragData[0] = tmpvar_4; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-ir.txt deleted file mode 100644 index d4ffecc1e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-ir.txt +++ /dev/null @@ -1,60 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; - vec2 texgencoord; -}; -uniform sampler2D _MainTex; -uniform sampler2D _GUIClipTexture; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1.xyz * i.color.xyz); - col.xyz = tmpvar_2.xyz.xyz; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_GUIClipTexture, i.texgencoord); - float tmpvar_4; - tmpvar_4 = (i.color.w * tmpvar_3.w); - col.w = vec4(tmpvar_4).w; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[1].xy; - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.texgencoord = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = frag (xlt_i); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xl_retval = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = xl_retval.xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - gl_FragData[0] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-out.txt deleted file mode 100644 index 5dcfd9214..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-out.txt +++ /dev/null @@ -1,10 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _GUIClipTexture; -void main () -{ - vec4 col; - col.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * gl_Color.xyz); - col.w = (gl_Color.w * texture2D (_GUIClipTexture, gl_TexCoord[1].xy).w); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-ir.txt deleted file mode 100644 index 4432e95ea..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-ir.txt +++ /dev/null @@ -1,60 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; - vec2 texgencoord; -}; -uniform sampler2D _MainTex; -uniform sampler2D _GUIClipTexture; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * i.color); - col = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_GUIClipTexture, i.texgencoord); - float tmpvar_4; - tmpvar_4 = (col.w * tmpvar_3.w); - col.w = vec4(tmpvar_4).w; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[1].xy; - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.texgencoord = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = frag (xlt_i); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xl_retval = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = xl_retval.xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - gl_FragData[0] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-out.txt deleted file mode 100644 index 1f4741aa5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-out.txt +++ /dev/null @@ -1,12 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _GUIClipTexture; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - col = tmpvar_1; - col.w = (tmpvar_1.w * texture2D (_GUIClipTexture, gl_TexCoord[1].xy).w); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-ir.txt deleted file mode 100644 index 535bd2f7d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-ir.txt +++ /dev/null @@ -1,51 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _HaloFalloff; -vec4 frag ( - in v2f i -) -{ - float a; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_HaloFalloff, i.texcoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - a = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.xyz = (i.color.xyz * a).xyz; - tmpvar_3.w = a; - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-ir.txt deleted file mode 100644 index b5e79db6d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-ir.txt +++ /dev/null @@ -1,191 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec3 ray; -}; -uniform vec4 _ZBufferParams; -uniform mat4 _View2Shadow3; -uniform mat4 _View2Shadow2; -uniform mat4 _View2Shadow1; -uniform mat4 _View2Shadow; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform sampler2D _CameraDepthTexture; -float unitySampleShadow ( - in vec4 eyePos -) -{ - float shadow; - vec4 coord; - vec4 weights; - vec4 far; - vec4 near; - float z; - vec3 sc3; - vec3 sc2; - vec3 sc1; - vec3 sc0; - vec3 tmpvar_1; - tmpvar_1 = (_View2Shadow * eyePos).xyz; - sc0 = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = (_View2Shadow1 * eyePos).xyz; - sc1 = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (_View2Shadow2 * eyePos).xyz; - sc2 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = (_View2Shadow3 * eyePos).xyz; - sc3 = tmpvar_4; - float tmpvar_5; - tmpvar_5 = eyePos.z; - z = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = vec4(z); - bvec4 tmpvar_7; - tmpvar_7 = greaterThanEqual (tmpvar_6, _LightSplitsNear); - vec4 tmpvar_8; - tmpvar_8 = vec4(tmpvar_7).xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - near = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = vec4(z); - bvec4 tmpvar_11; - tmpvar_11 = lessThan (tmpvar_10, _LightSplitsFar); - vec4 tmpvar_12; - tmpvar_12 = vec4(tmpvar_11).xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - far = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = (near * far); - weights = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = 1.0; - tmpvar_15.xyz = ((((sc0 * weights.x) + (sc1 * weights.y)) + (sc2 * weights.z)) + (sc3 * weights.w)).xyz; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - coord = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_ShadowMapTexture, coord.xy); - float tmpvar_18; - if ((tmpvar_17.x < coord.z)) { - tmpvar_18 = _LightShadowData.x; - } else { - tmpvar_18 = 1.0; - }; - float tmpvar_19; - tmpvar_19 = tmpvar_18; - shadow = tmpvar_19; - return shadow; -} - -float Linear01Depth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 frag ( - in v2f i -) -{ - vec4 res; - float shadow; - vec4 vpos; - float depth; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_CameraDepthTexture, i.uv); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - depth = tmpvar_2; - float tmpvar_3; - tmpvar_3 = Linear01Depth (depth); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - depth = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.w = 1.0; - tmpvar_5.xyz = (i.ray * depth).xyz; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - vpos = tmpvar_6; - float tmpvar_7; - tmpvar_7 = unitySampleShadow (vpos); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - shadow = tmpvar_8; - float tmpvar_9; - tmpvar_9 = shadow; - res.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 1.0; - res.y = vec2(tmpvar_10).y; - vec2 tmpvar_11; - tmpvar_11 = EncodeFloatRG ((1.0 - depth)); - vec2 tmpvar_12; - tmpvar_12 = tmpvar_11; - res.zw = tmpvar_12.xxxy.zw; - return res; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.ray = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-out.txt deleted file mode 100644 index cf05b5448..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-out.txt +++ /dev/null @@ -1,42 +0,0 @@ -uniform vec4 _ZBufferParams; -uniform mat4 _View2Shadow3; -uniform mat4 _View2Shadow2; -uniform mat4 _View2Shadow1; -uniform mat4 _View2Shadow; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform sampler2D _CameraDepthTexture; -void main () -{ - vec4 res; - float tmpvar_1; - tmpvar_1 = (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, gl_TexCoord[0].xy).x) + _ZBufferParams.y))); - vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = (gl_TexCoord[1].xyz * tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = (vec4(greaterThanEqual (tmpvar_2.zzzz, _LightSplitsNear)) * vec4(lessThan (tmpvar_2.zzzz, _LightSplitsFar))); - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = (((((_View2Shadow * tmpvar_2).xyz * tmpvar_3.x) + ((_View2Shadow1 * tmpvar_2).xyz * tmpvar_3.y)) + ((_View2Shadow2 * tmpvar_2).xyz * tmpvar_3.z)) + ((_View2Shadow3 * tmpvar_2).xyz * tmpvar_3.w)); - vec4 tmpvar_5; - tmpvar_5 = texture2D (_ShadowMapTexture, tmpvar_4.xy); - float tmpvar_6; - if ((tmpvar_5.x < tmpvar_4.z)) { - tmpvar_6 = _LightShadowData.x; - } else { - tmpvar_6 = 1.0; - }; - res.x = tmpvar_6; - res.y = 1.0; - vec2 enc; - vec2 tmpvar_7; - tmpvar_7 = fract ((vec2(1.0, 255.0) * (1.0 - tmpvar_1))); - enc = tmpvar_7; - enc.x = (tmpvar_7.x - (tmpvar_7.y * 0.00392157)); - res.zw = enc; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-ir.txt deleted file mode 100644 index 015a1cab2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-ir.txt +++ /dev/null @@ -1,408 +0,0 @@ -struct v2f { - vec4 pos; - vec4 uv; - vec3 ray; -}; -uniform vec4 unity_LightmapFade; -uniform vec4 _ZBufferParams; -uniform mat4 _ViewToCookie; -uniform mat4 _View2Shadow; -uniform samplerCube _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightShadowData; -uniform vec4 _LightPositionRange; -uniform vec4 _LightPos; -uniform vec4 _LightColor; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -float Luminance ( - in vec3 c -) -{ - float tmpvar_1; - tmpvar_1 = dot (c, vec3(0.22, 0.707, 0.071)); - return tmpvar_1; -} - -float Linear01Depth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -float DecodeFloatRGBA ( - in vec4 enc -) -{ - vec4 kDecodeDot; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, 0.00392157, 1.53787e-05, 0.0); - kDecodeDot = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (enc, kDecodeDot); - return tmpvar_2; -} - -float SampleCubeDistance ( - in vec3 vec -) -{ - vec4 packDist; - vec4 tmpvar_1; - tmpvar_1 = textureCube (_ShadowMapTexture, vec); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - packDist = tmpvar_2; - float tmpvar_3; - tmpvar_3 = DecodeFloatRGBA (packDist); - return tmpvar_3; -} - -float unitySampleShadow ( - in vec3 vec, - in float mydist -) -{ - float dist; - float tmpvar_1; - tmpvar_1 = SampleCubeDistance (vec); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - dist = tmpvar_2; - float tmpvar_3; - if ((dist < mydist)) { - tmpvar_3 = _LightShadowData.x; - } else { - tmpvar_3 = 1.0; - }; - return tmpvar_3; -} - -float ComputeShadow ( - in vec3 vec, - in vec2 uv -) -{ - float mydist; - float fade; - float tmpvar_1; - tmpvar_1 = ((vec.z * _LightShadowData.z) + _LightShadowData.w); - fade = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xll_saturate (fade); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - fade = tmpvar_3; - mat3 tmpvar_4; - tmpvar_4 = (xll_constructMat3 (_View2Shadow)); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * vec); - vec = tmpvar_5; - float tmpvar_6; - tmpvar_6 = length (vec); - float tmpvar_7; - tmpvar_7 = (tmpvar_6 * _LightPositionRange.w); - mydist = tmpvar_7; - float tmpvar_8; - tmpvar_8 = (mydist * 0.97); - mydist = tmpvar_8; - float tmpvar_9; - tmpvar_9 = unitySampleShadow (vec, mydist); - return tmpvar_9; - return 1.0; -} - -vec4 frag ( - in v2f i -) -{ - float fade; - vec4 res; - float spec; - vec3 h; - float diff; - float atten; - float att; - vec3 lightDir; - vec3 tolight; - vec3 vpos; - float depth; - vec3 normal; - vec4 nspec; - vec2 uv; - vec3 tmpvar_1; - tmpvar_1 = (i.ray * (_ProjectionParams.z / i.ray.z)); - i.ray = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (i.uv.xy / i.uv.w); - uv = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_CameraNormalsTexture, uv); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - nspec = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = ((nspec.xyz * 2.0) - 1.0); - normal = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = normalize (normal); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - normal = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_CameraDepthTexture, uv); - float tmpvar_9; - tmpvar_9 = tmpvar_8.x; - depth = tmpvar_9; - float tmpvar_10; - tmpvar_10 = Linear01Depth (depth); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - depth = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (i.ray * depth); - vpos = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (_LightPos.xyz - vpos); - tolight = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = normalize (tolight); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - lightDir = tmpvar_15; - float tmpvar_16; - tmpvar_16 = dot (tolight, tolight); - float tmpvar_17; - tmpvar_17 = (tmpvar_16 * _LightPos.w); - att = tmpvar_17; - vec2 tmpvar_18; - tmpvar_18 = vec2(att); - vec2 tmpvar_19; - tmpvar_19 = tmpvar_18.xy; - vec4 tmpvar_20; - tmpvar_20 = texture2D (_LightTextureB0, tmpvar_19); - float tmpvar_21; - tmpvar_21 = tmpvar_20.w; - atten = tmpvar_21; - float tmpvar_22; - tmpvar_22 = ComputeShadow (-(tolight), uv); - float tmpvar_23; - tmpvar_23 = (atten * tmpvar_22); - atten = tmpvar_23; - vec4 tmpvar_24; - tmpvar_24.w = 1.0; - tmpvar_24.xyz = vpos.xyz; - vec4 tmpvar_25; - tmpvar_25 = textureCube (_LightTexture0, (_ViewToCookie * tmpvar_24).xyz); - float tmpvar_26; - tmpvar_26 = (atten * tmpvar_25.w); - atten = tmpvar_26; - float tmpvar_27; - tmpvar_27 = dot (lightDir, normal); - float tmpvar_28; - tmpvar_28 = max (0.0, tmpvar_27); - float tmpvar_29; - tmpvar_29 = tmpvar_28; - diff = tmpvar_29; - vec3 tmpvar_30; - tmpvar_30 = normalize (vpos); - vec3 tmpvar_31; - tmpvar_31 = normalize ((lightDir - tmpvar_30)); - vec3 tmpvar_32; - tmpvar_32 = tmpvar_31; - h = tmpvar_32; - float tmpvar_33; - tmpvar_33 = dot (h, normal); - float tmpvar_34; - tmpvar_34 = max (0.0, tmpvar_33); - float tmpvar_35; - tmpvar_35 = pow (tmpvar_34, (nspec.w * 128.0)); - float tmpvar_36; - tmpvar_36 = tmpvar_35; - spec = tmpvar_36; - float tmpvar_37; - tmpvar_37 = xll_saturate (atten); - float tmpvar_38; - tmpvar_38 = (spec * tmpvar_37); - spec = tmpvar_38; - vec3 tmpvar_39; - tmpvar_39 = (_LightColor.xyz * (diff * atten)); - res.xyz = tmpvar_39.xyz.xyz; - float tmpvar_40; - tmpvar_40 = Luminance (_LightColor.xyz); - float tmpvar_41; - tmpvar_41 = (spec * tmpvar_40); - res.w = vec4(tmpvar_41).w; - float tmpvar_42; - tmpvar_42 = ((vpos.z * unity_LightmapFade.z) + unity_LightmapFade.w); - fade = tmpvar_42; - float tmpvar_43; - tmpvar_43 = xll_saturate ((1.0 - fade)); - vec4 tmpvar_44; - tmpvar_44 = (res * tmpvar_43); - res = tmpvar_44; - vec4 tmpvar_45; - tmpvar_45 = exp2 (-(res)); - return tmpvar_45; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.ray = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-out.txt deleted file mode 100644 index 02a78d421..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-out.txt +++ /dev/null @@ -1,68 +0,0 @@ -uniform vec4 unity_LightmapFade; -uniform vec4 _ZBufferParams; -uniform mat4 _ViewToCookie; -uniform mat4 _View2Shadow; -uniform samplerCube _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightShadowData; -uniform vec4 _LightPositionRange; -uniform vec4 _LightPos; -uniform vec4 _LightColor; -uniform sampler2D _CameraNormalsTexture; -uniform sampler2D _CameraDepthTexture; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec4 res; - float atten; - vec3 lightDir; - vec3 normal; - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_1.xy / tmpvar_1.w); - vec4 tmpvar_4; - tmpvar_4 = texture2D (_CameraNormalsTexture, tmpvar_3); - normal = normalize (((tmpvar_4.xyz * 2.0) - 1.0)); - vec3 tmpvar_5; - tmpvar_5 = ((tmpvar_2 * (_ProjectionParams.z / tmpvar_2.z)) * (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, tmpvar_3).x) + _ZBufferParams.y)))); - vec3 tmpvar_6; - tmpvar_6 = (_LightPos.xyz - tmpvar_5); - lightDir = normalize (tmpvar_6); - atten = texture2D (_LightTextureB0, vec2((dot (tmpvar_6, tmpvar_6) * _LightPos.w))).w; - vec3 vec; - vec = -(tmpvar_6); - mat3 tmpvar_7; - tmpvar_7[0] = _View2Shadow[0].xyz; - tmpvar_7[1] = _View2Shadow[1].xyz; - tmpvar_7[2] = _View2Shadow[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * vec); - vec = tmpvar_8; - float tmpvar_9; - tmpvar_9 = ((length (tmpvar_8) * _LightPositionRange.w) * 0.97); - float tmpvar_10; - tmpvar_10 = dot (textureCube (_ShadowMapTexture, tmpvar_8), vec4(1.0, 0.00392157, 1.53787e-05, 0.0)); - float tmpvar_11; - if ((tmpvar_10 < tmpvar_9)) { - tmpvar_11 = _LightShadowData.x; - } else { - tmpvar_11 = 1.0; - }; - vec4 tmpvar_12; - tmpvar_12.w = 1.0; - tmpvar_12.xyz = tmpvar_5; - float tmpvar_13; - tmpvar_13 = ((atten * tmpvar_11) * textureCube (_LightTexture0, (_ViewToCookie * tmpvar_12).xyz).w); - atten = tmpvar_13; - res.xyz = (_LightColor.xyz * (max (0.0, dot (lightDir, normal)) * tmpvar_13)); - res.w = ((pow (max (0.0, dot (normalize ((lightDir - normalize (tmpvar_5))), normal)), (tmpvar_4.w * 128.0)) * clamp (tmpvar_13, 0.0, 1.0)) * dot (_LightColor.xyz, vec3(0.22, 0.707, 0.071))); - vec4 tmpvar_14; - tmpvar_14 = (res * clamp ((1.0 - ((tmpvar_5.z * unity_LightmapFade.z) + unity_LightmapFade.w)), 0.0, 1.0)); - res = tmpvar_14; - gl_FragData[0] = exp2 (-(tmpvar_14)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-ir.txt deleted file mode 100644 index efc88d41e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-ir.txt +++ /dev/null @@ -1,75 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec2 uvg; - vec2 uvs; -}; -uniform sampler2D _ScratchTex; -uniform sampler2D _MainTex; -uniform vec4 _Intensity; -uniform sampler2D _GrainTex; -vec4 frag ( - in v2f i -) -{ - vec3 scratch; - vec3 grain; - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_GrainTex, i.uvg); - vec3 tmpvar_4; - tmpvar_4 = ((tmpvar_3.xyz * 2.0) - 1.0); - grain = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = (col.xyz + (grain * _Intensity.x)); - col.xyz = tmpvar_5.xyz.xyz; - vec4 tmpvar_6; - tmpvar_6 = texture2D (_ScratchTex, i.uvs); - vec3 tmpvar_7; - tmpvar_7 = ((tmpvar_6.xyz * 2.0) - 1.0); - scratch = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (col.xyz + (scratch * _Intensity.y)); - col.xyz = tmpvar_8.xyz.xyz; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uvg = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xy; - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.uvs = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = frag (xlt_i); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xl_retval = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = xl_retval.xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - gl_FragData[0] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-out.txt deleted file mode 100644 index 8d11dd68c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-out.txt +++ /dev/null @@ -1,15 +0,0 @@ -uniform sampler2D _ScratchTex; -uniform sampler2D _MainTex; -uniform vec4 _Intensity; -uniform sampler2D _GrainTex; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col = tmpvar_1; - col.xyz = (tmpvar_1.xyz + (((texture2D (_GrainTex, gl_TexCoord[1].xy).xyz * 2.0) - 1.0) * _Intensity.x)); - col.xyz = (col.xyz + (((texture2D (_ScratchTex, gl_TexCoord[2].xy).xyz * 2.0) - 1.0) * _Intensity.y)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-ir.txt deleted file mode 100644 index a86c4ede2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-ir.txt +++ /dev/null @@ -1,96 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec2 uvg; - vec2 uvs; -}; -uniform sampler2D _ScratchTex; -uniform sampler2D _MainTex; -uniform vec4 _Intensity; -uniform sampler2D _GrainTex; -vec4 frag ( - in v2f i -) -{ - vec3 scratch; - vec3 grain; - vec3 yuv; - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (col.xyz, vec3(0.299, 0.587, 0.114)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - yuv.x = tmpvar_4; - float tmpvar_5; - tmpvar_5 = ((col.z - yuv.x) * 0.492); - yuv.y = vec2(tmpvar_5).y; - float tmpvar_6; - tmpvar_6 = ((col.x - yuv.x) * 0.877); - yuv.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_GrainTex, i.uvg); - vec3 tmpvar_8; - tmpvar_8 = ((tmpvar_7.xyz * 2.0) - 1.0); - grain = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (yuv.xyz + (grain * _Intensity.x)); - yuv = tmpvar_9.xyz.xyz; - float tmpvar_10; - tmpvar_10 = ((yuv.z * 1.14) + yuv.x); - col.x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = (((yuv.z * -(0.581)) + (yuv.y * -(0.395))) + yuv.x); - col.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = ((yuv.y * 2.032) + yuv.x); - col.z = vec3(tmpvar_12).z; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_ScratchTex, i.uvs); - vec3 tmpvar_14; - tmpvar_14 = ((tmpvar_13.xyz * 2.0) - 1.0); - scratch = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (col.xyz + (scratch * _Intensity.y)); - col.xyz = tmpvar_15.xyz.xyz; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uvg = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xy; - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.uvs = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = frag (xlt_i); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - xl_retval = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = xl_retval.xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - gl_FragData[0] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-out.txt deleted file mode 100644 index c200b2106..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _ScratchTex; -uniform sampler2D _MainTex; -uniform vec4 _Intensity; -uniform sampler2D _GrainTex; -void main () -{ - vec3 yuv; - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col = tmpvar_1; - yuv.x = dot (tmpvar_1.xyz, vec3(0.299, 0.587, 0.114)); - yuv.y = ((tmpvar_1.z - yuv.x) * 0.492); - yuv.z = ((tmpvar_1.x - yuv.x) * 0.877); - yuv = (yuv + (((texture2D (_GrainTex, gl_TexCoord[1].xy).xyz * 2.0) - 1.0) * _Intensity.x)); - col.x = ((yuv.z * 1.14) + yuv.x); - col.y = (((yuv.z * -0.581) + (yuv.y * -0.395)) + yuv.x); - col.z = ((yuv.y * 2.032) + yuv.x); - col.xyz = (col.xyz + (((texture2D (_ScratchTex, gl_TexCoord[2].xy).xyz * 2.0) - 1.0) * _Intensity.y)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-ir.txt deleted file mode 100644 index becb0278a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-ir.txt +++ /dev/null @@ -1,59 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f_img i -) -{ - vec4 xlat_var_output; - vec4 sepiaConvert; - float Y; - vec4 original; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.191, -0.054, -0.221, 0.0); - sepiaConvert = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, i.uv); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - original = tmpvar_3; - float tmpvar_4; - tmpvar_4 = dot (vec3(0.299, 0.587, 0.114), original.xyz); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - Y = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (sepiaConvert + Y); - xlat_var_output = tmpvar_6; - float tmpvar_7; - tmpvar_7 = original.w; - xlat_var_output.w = vec4(tmpvar_7).w; - return xlat_var_output; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-out.txt deleted file mode 100644 index 6bee30c53..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-out.txt +++ /dev/null @@ -1,11 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 xlat_var_output; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - xlat_var_output = (vec4(0.191, -0.054, -0.221, 0.0) + dot (vec3(0.299, 0.587, 0.114), tmpvar_1.xyz)); - xlat_var_output.w = tmpvar_1.w; - gl_FragData[0] = xlat_var_output; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-ir.txt deleted file mode 100644 index 110612ef8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-ir.txt +++ /dev/null @@ -1,217 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform vec4 unity_ShadowBlurParams; -uniform sampler2D _MainTex; -uniform vec4 _BlurOffsets[8]; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 frag ( - in v2f_img i -) -{ - float shadow; - float diff; - float sampleDist; - vec4 sample; - int i_1; - float diffTolerance; - float radius; - float dist; - vec4 mask; - vec4 coord; - int tmpvar_1; - tmpvar_1 = 0; - i_1 = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = i.uv.xy; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - coord = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, coord.xy); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - mask = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (mask.z + (mask.w / 255.0)); - dist = tmpvar_6; - float tmpvar_7; - tmpvar_7 = xll_saturate ((unity_ShadowBlurParams.y / (1.0 - dist))); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - radius = tmpvar_8; - float tmpvar_9; - tmpvar_9 = unity_ShadowBlurParams.x; - diffTolerance = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10 = (mask.xy * diffTolerance); - mask.xy = tmpvar_10.xy.xy; - while (true) { - if (!((i_1 < 8))) { - break; - }; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_MainTex, (coord + (radius * _BlurOffsets[i_1])).xy); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - sample = tmpvar_12; - float tmpvar_13; - tmpvar_13 = (sample.z + (sample.w / 255.0)); - sampleDist = tmpvar_13; - float tmpvar_14; - tmpvar_14 = (dist - sampleDist); - diff = tmpvar_14; - float tmpvar_15; - tmpvar_15 = abs (diff); - float tmpvar_16; - tmpvar_16 = xll_saturate ((diffTolerance - tmpvar_15)); - float tmpvar_17; - tmpvar_17 = tmpvar_16; - diff = tmpvar_17; - vec2 tmpvar_18; - tmpvar_18 = (mask.xy + (diff * sample.xy)); - mask.xy = tmpvar_18.xy.xy; - int _post_incdec_tmp; - _post_incdec_tmp = i_1; - int tmpvar_19; - tmpvar_19 = (i_1 + 1); - i_1 = tmpvar_19; - }; - float tmpvar_20; - tmpvar_20 = (mask.x / mask.y); - shadow = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = vec4(shadow); - return tmpvar_21; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-out.txt deleted file mode 100644 index fe8dbe2c5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-out.txt +++ /dev/null @@ -1,44 +0,0 @@ -uniform vec4 unity_ShadowBlurParams; -uniform sampler2D _MainTex; -uniform vec4 _BlurOffsets[8]; -void main () -{ - float radius; - vec4 mask; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = gl_TexCoord[0].xy; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, tmpvar_1.xy); - mask = tmpvar_2; - float tmpvar_3; - tmpvar_3 = (tmpvar_2.z + (tmpvar_2.w / 255.0)); - radius = clamp ((unity_ShadowBlurParams.y / (1.0 - tmpvar_3)), 0.0, 1.0); - mask.xy = (tmpvar_2.xy * unity_ShadowBlurParams.x); - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[0])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_4.z + (tmpvar_4.w / 255.0))))), 0.0, 1.0) * tmpvar_4.xy)); - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[1])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_5.z + (tmpvar_5.w / 255.0))))), 0.0, 1.0) * tmpvar_5.xy)); - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[2])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_6.z + (tmpvar_6.w / 255.0))))), 0.0, 1.0) * tmpvar_6.xy)); - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[3])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_7.z + (tmpvar_7.w / 255.0))))), 0.0, 1.0) * tmpvar_7.xy)); - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[4])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_8.z + (tmpvar_8.w / 255.0))))), 0.0, 1.0) * tmpvar_8.xy)); - vec4 tmpvar_9; - tmpvar_9 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[5])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_9.z + (tmpvar_9.w / 255.0))))), 0.0, 1.0) * tmpvar_9.xy)); - vec4 tmpvar_10; - tmpvar_10 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[6])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_10.z + (tmpvar_10.w / 255.0))))), 0.0, 1.0) * tmpvar_10.xy)); - vec4 tmpvar_11; - tmpvar_11 = texture2D (_MainTex, (tmpvar_1 + (radius * _BlurOffsets[7])).xy); - mask.xy = (mask.xy + (clamp ((unity_ShadowBlurParams.x - abs ((tmpvar_3 - (tmpvar_11.z + (tmpvar_11.w / 255.0))))), 0.0, 1.0) * tmpvar_11.xy)); - gl_FragData[0] = vec4((mask.x / mask.y)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-ir.txt deleted file mode 100644 index 109327654..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _MainTex; -uniform sampler2D _CameraDepthNormalsTexture; -vec3 DecodeViewNormalStereo ( - in vec4 enc4 -) -{ - vec3 n; - float g; - vec3 nn; - float kScale; - float tmpvar_1; - tmpvar_1 = 1.7777; - kScale = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.z = 0.0; - tmpvar_2.x = (2.0 * kScale); - tmpvar_2.y = (2.0 * kScale); - vec3 tmpvar_3; - tmpvar_3.z = 1.0; - tmpvar_3.x = -(kScale); - tmpvar_3.y = -(kScale); - vec3 tmpvar_4; - tmpvar_4 = ((enc4.xyz * tmpvar_2) + tmpvar_3); - nn = tmpvar_4; - float tmpvar_5; - tmpvar_5 = dot (nn.xyz, nn.xyz); - float tmpvar_6; - tmpvar_6 = (2.0 / tmpvar_5); - g = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = (g * nn.xy); - n.xy = tmpvar_7.xy.xy; - float tmpvar_8; - tmpvar_8 = (g - 1.0); - n.z = vec3(tmpvar_8).z; - return n; -} - -float DecodeFloatRG ( - in vec2 enc -) -{ - vec2 kDecodeDot; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 0.00392157); - kDecodeDot = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (enc, kDecodeDot); - return tmpvar_2; -} - -void DecodeDepthNormal ( - in vec4 enc, - out float depth, - out vec3 normal -) -{ - float tmpvar_1; - tmpvar_1 = DecodeFloatRG (enc.zw); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - depth = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = DecodeViewNormalStereo (enc); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - normal = tmpvar_4; -} - -vec4 frag ( - in v2f_img i -) -{ - vec4 col; - vec3 n; - float z; - vec4 depth; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_CameraDepthNormalsTexture, i.uv); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - depth = tmpvar_4; - DecodeDepthNormal (depth, z, n); - float tmpvar_5; - tmpvar_5 = z; - col.x = tmpvar_5; - float tmpvar_6; - tmpvar_6 = ((n.x * 0.5) + 0.5); - col.y = vec2(tmpvar_6).y; - float tmpvar_7; - tmpvar_7 = ((n.y * 0.5) + 0.5); - col.z = vec3(tmpvar_7).z; - float tmpvar_8; - tmpvar_8 = tex.w; - col.w = vec4(tmpvar_8).w; - return col; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-out.txt deleted file mode 100644 index 06eece771..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-out.txt +++ /dev/null @@ -1,23 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _CameraDepthNormalsTexture; -void main () -{ - vec2 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xy; - vec4 col; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_CameraDepthNormalsTexture, tmpvar_1); - vec3 n_i0; - vec3 tmpvar_3; - tmpvar_3 = ((tmpvar_2.xyz * vec3(3.5554, 3.5554, 0.0)) + vec3(-1.7777, -1.7777, 1.0)); - float tmpvar_4; - tmpvar_4 = (2.0 / dot (tmpvar_3, tmpvar_3)); - n_i0.xy = (tmpvar_4 * tmpvar_3.xy); - n_i0.z = (tmpvar_4 - 1.0); - col.x = dot (tmpvar_2.zw, vec2(1.0, 0.00392157)); - col.y = ((n_i0.x * 0.5) + 0.5); - col.z = ((n_i0.y * 0.5) + 0.5); - col.w = texture2D (_MainTex, tmpvar_1).w; - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-ir.txt deleted file mode 100644 index aeb736b83..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-ir.txt +++ /dev/null @@ -1,72 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform vec4 _ZBufferParams; -uniform sampler2D _MainTex; -uniform sampler2D _CameraDepthTexture; -float LinearEyeDepth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.z * z) + _ZBufferParams.w)); -} - -vec4 frag ( - in v2f_img i -) -{ - vec4 col; - float z; - vec4 depth; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_CameraDepthTexture, i.uv); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - depth = tmpvar_4; - float tmpvar_5; - tmpvar_5 = LinearEyeDepth (depth.x); - float tmpvar_6; - tmpvar_6 = (tmpvar_5 * 0.01); - z = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tex; - col = tmpvar_7; - vec2 tmpvar_8; - tmpvar_8 = vec2(z); - vec2 tmpvar_9; - tmpvar_9 = tmpvar_8; - col.xy = tmpvar_9.xy.xy; - return col; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-out.txt deleted file mode 100644 index 26c26c943..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-out.txt +++ /dev/null @@ -1,13 +0,0 @@ -uniform vec4 _ZBufferParams; -uniform sampler2D _MainTex; -uniform sampler2D _CameraDepthTexture; -void main () -{ - vec2 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xy; - vec4 col; - col = texture2D (_MainTex, tmpvar_1); - col.xy = vec2(((1.0/(((_ZBufferParams.z * texture2D (_CameraDepthTexture, tmpvar_1).x) + _ZBufferParams.w))) * 0.01)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-ir.txt deleted file mode 100644 index 7824f6dc7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-ir.txt +++ /dev/null @@ -1,66 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 color; - vec2 uv; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 frag ( - in v2f xlat_var_input -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, xlat_var_input.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (col.xyz * xlat_var_input.color.xyz); - col.xyz = tmpvar_3.xyz.xyz; - xll_clip (col.w); - return col; -} - -void main () -{ - v2f xlt_xlat_var_input; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_xlat_var_input.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_xlat_var_input.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_xlat_var_input.color = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[0].xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_xlat_var_input.uv = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag (xlt_xlat_var_input); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-out.txt deleted file mode 100644 index c0f63ce66..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-out.txt +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col = tmpvar_1; - col.xyz = (tmpvar_1.xyz * gl_Color.xyz); - if ((tmpvar_1.w < 0.0)) { - discard; - }; - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt deleted file mode 100644 index 718998ea2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt +++ /dev/null @@ -1,170 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 vlight; -}; -varying vec4 xlv_FOG; -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - float tmpvar_1; - tmpvar_1 = 1.0; - atten = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = IN.lop_color; - surfIN.color = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = IN.normal; - o.Normal = tmpvar_9; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, _WorldSpaceLightPos0.xyz, atten); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_12.xyz.xyz; - float tmpvar_13; - tmpvar_13 = o.Alpha; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.vlight = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt deleted file mode 100644 index d0e8fde97..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - float x; - x = (tmpvar_3.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * (max (0.0, dot (tmpvar_1, _WorldSpaceLightPos0.xyz)) * 2.0)); - c_i0_i1.w = tmpvar_3.w; - c = c_i0_i1; - c.xyz = (c_i0_i1.xyz + (tmpvar_3.xyz * tmpvar_2)); - c.w = tmpvar_3.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt deleted file mode 100644 index ba7cc1e1d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt +++ /dev/null @@ -1,189 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_13; - tmpvar_13 = vec2(tmpvar_12); - vec2 tmpvar_14; - tmpvar_14 = tmpvar_13.xy; - vec4 tmpvar_15; - tmpvar_15 = texture2D (_LightTextureB0, tmpvar_14); - vec4 tmpvar_16; - tmpvar_16 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_17; - tmpvar_17 = LightingLambert (o, lightDir, (tmpvar_15.w * tmpvar_16.w)); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - c = tmpvar_18; - float tmpvar_19; - tmpvar_19 = o.Alpha; - c.w = vec4(tmpvar_19).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt deleted file mode 100644 index 140a3daf0..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt +++ /dev/null @@ -1,29 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - float x; - x = (tmpvar_4.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (tmpvar_1, normalize (tmpvar_2))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_3, tmpvar_3))).w * textureCube (_LightTexture0, tmpvar_3).w)) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.w = tmpvar_4.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt deleted file mode 100644 index 05c3389e1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt +++ /dev/null @@ -1,108 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec4 lop_color; -}; -uniform sampler2D _MainTex; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - return vec4(0.0, 0.0, 0.0, 0.0); -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = gl_Color.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.lop_color = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag_surf (xlt_IN); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-ir.txt deleted file mode 100644 index dc4be9ccb..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-ir.txt +++ /dev/null @@ -1,175 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_13; - tmpvar_13 = vec2(tmpvar_12); - vec2 tmpvar_14; - tmpvar_14 = tmpvar_13.xy; - vec4 tmpvar_15; - tmpvar_15 = texture2D (_LightTexture0, tmpvar_14); - vec4 tmpvar_16; - tmpvar_16 = LightingLambert (o, lightDir, tmpvar_15.w); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - c = tmpvar_17; - float tmpvar_18; - tmpvar_18 = 0.0; - c.w = vec4(tmpvar_18).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-out.txt deleted file mode 100644 index bc9ba8766..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[3].xyz; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * texture2D (_LightTexture0, vec2(dot (tmpvar_1, tmpvar_1))).w) * 2.0)); - c_i0_i1.w = tmpvar_2.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt deleted file mode 100644 index d7132f31d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt +++ /dev/null @@ -1,290 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_13; - tmpvar_13 = DecodeLightmap (tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - lmFull = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_16; - tmpvar_16 = DecodeLightmap (tmpvar_15); - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - lmIndirect = tmpvar_17; - float tmpvar_18; - tmpvar_18 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_19; - tmpvar_19 = vec3(tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = mix (lmIndirect, lmFull, tmpvar_19); - vec3 tmpvar_21; - tmpvar_21 = tmpvar_20; - lm = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (light.xyz + lm); - light.xyz = tmpvar_22.xyz.xyz; - vec4 tmpvar_23; - tmpvar_23 = LightingLambert_PrePass (o, light); - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - col = tmpvar_24; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_lmapFade = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-out.txt deleted file mode 100644 index dbd23f2dc..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-out.txt +++ /dev/null @@ -1,21 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); - vec4 c_i0; - c_i0.xyz = (tmpvar_2.xyz * light.xyz); - c_i0.w = tmpvar_2.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt deleted file mode 100644 index 316aa104a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt +++ /dev/null @@ -1,192 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 vlight; - vec4 _ShadowCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float unitySampleShadow ( - in vec4 shadowCoord -) -{ - float shadow; - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_ShadowMapTexture, shadowCoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - shadow = tmpvar_2; - return shadow; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - float tmpvar_9; - tmpvar_9 = unitySampleShadow (IN._ShadowCoord); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - atten = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = LightingLambert (o, _WorldSpaceLightPos0.xyz, atten); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_13.xyz.xyz; - float tmpvar_14; - tmpvar_14 = o.Alpha; - c.w = vec4(tmpvar_14).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.vlight = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._ShadowCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt deleted file mode 100644 index f8ff66311..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 c; - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - float x; - x = (tmpvar_4.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (tmpvar_1, _WorldSpaceLightPos0.xyz)) * texture2DProj (_ShadowMapTexture, tmpvar_3).x) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.xyz = (c_i0_i1.xyz + (tmpvar_4.xyz * tmpvar_2)); - c.w = tmpvar_4.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt deleted file mode 100644 index d1d47cbb4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt +++ /dev/null @@ -1,207 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = UnitySpotCookie (IN._LightCoord); - float tmpvar_13; - tmpvar_13 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_12) * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = o.Alpha; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.lightDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt deleted file mode 100644 index 9eebee1b1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt +++ /dev/null @@ -1,31 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 c; - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - float x; - x = (tmpvar_4.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_3.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (tmpvar_1, normalize (tmpvar_2))) * ((float((tmpvar_3.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_3.xy / tmpvar_3.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.w = tmpvar_4.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt deleted file mode 100644 index 6346d95b8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt +++ /dev/null @@ -1,156 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * IN.color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt deleted file mode 100644 index f3656c05a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt +++ /dev/null @@ -1,26 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); - float x; - x = (tmpvar_2.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, tmpvar_1))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_2.xyz * light.xyz); - c_i0.w = tmpvar_2.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt deleted file mode 100644 index 3ae052ffa..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt +++ /dev/null @@ -1,44 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (tmpvar_1 * vec4(1.0, 0.0, 0.0, 1.0)); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt deleted file mode 100644 index 4d7e39e52..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt +++ /dev/null @@ -1,56 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 uv; - vec4 color; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f xlat_var_input -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = xlat_var_input.color; - col = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, xlat_var_input.uv.xy); - vec3 tmpvar_3; - tmpvar_3 = (col.xyz * (2.0 * tmpvar_2.xyz)); - col.xyz = tmpvar_3.xyz.xyz; - return col; -} - -void main () -{ - v2f xlt_xlat_var_input; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_xlat_var_input.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_xlat_var_input.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_xlat_var_input.uv = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_xlat_var_input.color = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag (xlt_xlat_var_input); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt deleted file mode 100644 index ca5e05b22..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt +++ /dev/null @@ -1,9 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 col; - col = gl_Color; - col.xyz = (gl_Color.xyz * (2.0 * texture2D (_MainTex, gl_TexCoord[0].xy).xyz)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt deleted file mode 100644 index 1c8ef8770..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt +++ /dev/null @@ -1,70 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 uv; - vec4 color; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform float _HalfOverCutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 frag ( - in v2f xlat_var_input -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, xlat_var_input.uv.xy); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (col.xyz * (2.0 * xlat_var_input.color.xyz)); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = (col.w * (2.0 * _HalfOverCutoff)); - col.w = vec4(tmpvar_4).w; - xll_clip ((col.w - 1.0)); - return col; -} - -void main () -{ - v2f xlt_xlat_var_input; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_xlat_var_input.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_xlat_var_input.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_xlat_var_input.uv = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_xlat_var_input.color = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag (xlt_xlat_var_input); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt deleted file mode 100644 index 3bf9ed00c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _MainTex; -uniform float _HalfOverCutoff; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col = tmpvar_1; - col.xyz = (tmpvar_1.xyz * (2.0 * gl_Color.xyz)); - col.w = (tmpvar_1.w * (2.0 * _HalfOverCutoff)); - float x; - x = (col.w - 1.0); - if ((x < 0.0)) { - discard; - }; - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt deleted file mode 100644 index 13bec1045..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt +++ /dev/null @@ -1,221 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_Control; - vec2 uv_Splat0; - vec2 uv_Splat1; - vec2 uv_Splat2; - vec2 uv_Splat3; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_pack1; - vec2 hip_pack2; - vec3 normal; - vec3 vlight; - vec4 _ShadowCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightColor0; -uniform sampler2D _Control; -float unitySampleShadow ( - in vec4 shadowCoord -) -{ - float shadow; - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_ShadowMapTexture, shadowCoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - shadow = tmpvar_2; - return shadow; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 col; - vec4 splat_control; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_Control, IN.uv_Control); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - splat_control = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Splat0, IN.uv_Splat0); - vec3 tmpvar_4; - tmpvar_4 = (splat_control.x * tmpvar_3.xyz); - col = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Splat1, IN.uv_Splat1); - vec3 tmpvar_6; - tmpvar_6 = (col + (splat_control.y * tmpvar_5.xyz)); - col = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_Splat2, IN.uv_Splat2); - vec3 tmpvar_8; - tmpvar_8 = (col + (splat_control.z * tmpvar_7.xyz)); - col = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_Splat3, IN.uv_Splat3); - vec3 tmpvar_10; - tmpvar_10 = (col + (splat_control.w * tmpvar_9.xyz)); - col = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = col; - o.Albedo = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Alpha = tmpvar_12; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_Control = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Splat0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = IN.hip_pack1.xy; - surfIN.uv_Splat1 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = IN.hip_pack1.zw; - surfIN.uv_Splat2 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = IN.hip_pack2.xy; - surfIN.uv_Splat3 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Specular = tmpvar_8; - float tmpvar_9; - tmpvar_9 = 0.0; - o.Alpha = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 0.0; - o.Gloss = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.normal; - o.Normal = tmpvar_11; - surf (surfIN, o); - float tmpvar_12; - tmpvar_12 = unitySampleShadow (IN._ShadowCoord); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - atten = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, _WorldSpaceLightPos0.xyz, atten); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_16.xyz.xyz; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_pack1 = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_pack2 = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN.vlight = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = gl_TexCoord[5].xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlt_IN._ShadowCoord = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = frag_surf (xlt_IN); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xl_retval = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_FragData[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt deleted file mode 100644 index c24720f04..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightColor0; -uniform sampler2D _Control; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[1]; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Control, tmpvar_1.xy); - vec3 tmpvar_4; - tmpvar_4 = ((((tmpvar_3.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_3.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_3.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_3.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)); - vec4 c_i0; - c_i0.xyz = ((tmpvar_4 * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[3].xyz, _WorldSpaceLightPos0.xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[5]).x) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.xyz = (c_i0.xyz + (tmpvar_4 * gl_TexCoord[4].xyz)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt deleted file mode 100644 index 399baf05d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt +++ /dev/null @@ -1,188 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_Control; - vec2 uv_Splat0; - vec2 uv_Splat1; - vec2 uv_Splat2; - vec2 uv_Splat3; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_pack1; - vec2 hip_pack2; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _LightBuffer; -uniform sampler2D _Control; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 col; - vec4 splat_control; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_Control, IN.uv_Control); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - splat_control = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Splat0, IN.uv_Splat0); - vec3 tmpvar_4; - tmpvar_4 = (splat_control.x * tmpvar_3.xyz); - col = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Splat1, IN.uv_Splat1); - vec3 tmpvar_6; - tmpvar_6 = (col + (splat_control.y * tmpvar_5.xyz)); - col = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_Splat2, IN.uv_Splat2); - vec3 tmpvar_8; - tmpvar_8 = (col + (splat_control.z * tmpvar_7.xyz)); - col = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_Splat3, IN.uv_Splat3); - vec3 tmpvar_10; - tmpvar_10 = (col + (splat_control.w * tmpvar_9.xyz)); - col = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = col; - o.Albedo = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Alpha = tmpvar_12; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_Control = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Splat0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = IN.hip_pack1.xy; - surfIN.uv_Splat1 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = IN.hip_pack1.zw; - surfIN.uv_Splat2 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = IN.hip_pack2.xy; - surfIN.uv_Splat3 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Specular = tmpvar_8; - float tmpvar_9; - tmpvar_9 = 0.0; - o.Alpha = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 0.0; - o.Gloss = tmpvar_10; - surf (surfIN, o); - vec4 tmpvar_11; - tmpvar_11 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - light = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = log2 (light); - vec4 tmpvar_14; - tmpvar_14 = -(tmpvar_13); - light = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_15.xyz.xyz; - vec4 tmpvar_16; - tmpvar_16 = LightingLambert_PrePass (o, light); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - col = tmpvar_17; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_pack1 = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_pack2 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_screen = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt deleted file mode 100644 index f7ff6a003..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt +++ /dev/null @@ -1,26 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _LightBuffer; -uniform sampler2D _Control; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[1]; - vec4 light; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Control, tmpvar_1.xy); - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[3]))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (((((tmpvar_3.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_3.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_3.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_3.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)) * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt deleted file mode 100644 index 399baf05d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt +++ /dev/null @@ -1,188 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_Control; - vec2 uv_Splat0; - vec2 uv_Splat1; - vec2 uv_Splat2; - vec2 uv_Splat3; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_pack1; - vec2 hip_pack2; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _LightBuffer; -uniform sampler2D _Control; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 col; - vec4 splat_control; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_Control, IN.uv_Control); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - splat_control = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Splat0, IN.uv_Splat0); - vec3 tmpvar_4; - tmpvar_4 = (splat_control.x * tmpvar_3.xyz); - col = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Splat1, IN.uv_Splat1); - vec3 tmpvar_6; - tmpvar_6 = (col + (splat_control.y * tmpvar_5.xyz)); - col = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_Splat2, IN.uv_Splat2); - vec3 tmpvar_8; - tmpvar_8 = (col + (splat_control.z * tmpvar_7.xyz)); - col = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_Splat3, IN.uv_Splat3); - vec3 tmpvar_10; - tmpvar_10 = (col + (splat_control.w * tmpvar_9.xyz)); - col = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = col; - o.Albedo = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Alpha = tmpvar_12; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_Control = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Splat0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = IN.hip_pack1.xy; - surfIN.uv_Splat1 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = IN.hip_pack1.zw; - surfIN.uv_Splat2 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = IN.hip_pack2.xy; - surfIN.uv_Splat3 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Specular = tmpvar_8; - float tmpvar_9; - tmpvar_9 = 0.0; - o.Alpha = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 0.0; - o.Gloss = tmpvar_10; - surf (surfIN, o); - vec4 tmpvar_11; - tmpvar_11 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - light = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = log2 (light); - vec4 tmpvar_14; - tmpvar_14 = -(tmpvar_13); - light = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_15.xyz.xyz; - vec4 tmpvar_16; - tmpvar_16 = LightingLambert_PrePass (o, light); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - col = tmpvar_17; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_pack1 = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_pack2 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_screen = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt deleted file mode 100644 index f7ff6a003..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt +++ /dev/null @@ -1,26 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _LightBuffer; -uniform sampler2D _Control; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[1]; - vec4 light; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Control, tmpvar_1.xy); - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[3]))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (((((tmpvar_3.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_3.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_3.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_3.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)) * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt deleted file mode 100644 index 338d4817c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt +++ /dev/null @@ -1,333 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_Control; - vec2 uv_Splat0; - vec2 uv_Splat1; - vec2 uv_Splat2; - vec2 uv_Splat3; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_pack1; - vec2 hip_pack2; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _LightBuffer; -uniform sampler2D _Control; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 col; - vec4 splat_control; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_Control, IN.uv_Control); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - splat_control = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_Splat0, IN.uv_Splat0); - vec3 tmpvar_4; - tmpvar_4 = (splat_control.x * tmpvar_3.xyz); - col = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Splat1, IN.uv_Splat1); - vec3 tmpvar_6; - tmpvar_6 = (col + (splat_control.y * tmpvar_5.xyz)); - col = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_Splat2, IN.uv_Splat2); - vec3 tmpvar_8; - tmpvar_8 = (col + (splat_control.z * tmpvar_7.xyz)); - col = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_Splat3, IN.uv_Splat3); - vec3 tmpvar_10; - tmpvar_10 = (col + (splat_control.w * tmpvar_9.xyz)); - col = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = col; - o.Albedo = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Alpha = tmpvar_12; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_Control = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Splat0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = IN.hip_pack1.xy; - surfIN.uv_Splat1 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = IN.hip_pack1.zw; - surfIN.uv_Splat2 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = IN.hip_pack2.xy; - surfIN.uv_Splat3 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Specular = tmpvar_8; - float tmpvar_9; - tmpvar_9 = 0.0; - o.Alpha = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 0.0; - o.Gloss = tmpvar_10; - surf (surfIN, o); - vec4 tmpvar_11; - tmpvar_11 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - light = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = log2 (light); - vec4 tmpvar_14; - tmpvar_14 = -(tmpvar_13); - light = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_16; - tmpvar_16 = DecodeLightmap (tmpvar_15); - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - lmFull = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_19; - tmpvar_19 = DecodeLightmap (tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lmIndirect = tmpvar_20; - float tmpvar_21; - tmpvar_21 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_22; - tmpvar_22 = vec3(tmpvar_21); - vec3 tmpvar_23; - tmpvar_23 = mix (lmIndirect, lmFull, tmpvar_22); - vec3 tmpvar_24; - tmpvar_24 = tmpvar_23; - lm = tmpvar_24; - vec3 tmpvar_25; - tmpvar_25 = (light.xyz + lm); - light.xyz = tmpvar_25.xyz.xyz; - vec4 tmpvar_26; - tmpvar_26 = LightingLambert_PrePass (o, light); - vec4 tmpvar_27; - tmpvar_27 = tmpvar_26; - col = tmpvar_27; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_pack1 = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_pack2 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_screen = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN.hip_lmapFade = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt deleted file mode 100644 index a047be433..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt +++ /dev/null @@ -1,29 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _Splat3; -uniform sampler2D _Splat2; -uniform sampler2D _Splat1; -uniform sampler2D _Splat0; -uniform sampler2D _LightBuffer; -uniform sampler2D _Control; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[1]; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[4].xyz; - vec4 light; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_Control, tmpvar_1.xy); - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[3]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_3.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_3.xy).xyz), vec3(clamp (tmpvar_3.z, 0.0, 1.0)))); - vec4 c; - c.xyz = (((((tmpvar_4.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_4.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_4.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_4.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)) * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt deleted file mode 100644 index 81451eabe..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt +++ /dev/null @@ -1,54 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec3 color; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (col.xyz * (i.color * 2.0)); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = 1.0; - col.w = vec4(tmpvar_4).w; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.color = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt deleted file mode 100644 index a8427803d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt +++ /dev/null @@ -1,12 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col = tmpvar_1; - col.xyz = (tmpvar_1.xyz * (gl_TexCoord[1].xyz * 2.0)); - col.w = 1.0; - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt deleted file mode 100644 index 70bda7ca5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt +++ /dev/null @@ -1,65 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec3 color; -}; -uniform sampler2D _MainTex; -uniform float _HalfOverCutoff; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (col.xyz * (i.color * 2.0)); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = (col.w * (2.0 * _HalfOverCutoff)); - col.w = vec4(tmpvar_4).w; - xll_clip ((col.w - 1.0)); - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.color = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt deleted file mode 100644 index ba964f62c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _MainTex; -uniform float _HalfOverCutoff; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col = tmpvar_1; - col.xyz = (tmpvar_1.xyz * (gl_TexCoord[1].xyz * 2.0)); - col.w = (tmpvar_1.w * (2.0 * _HalfOverCutoff)); - float x; - x = (col.w - 1.0); - if ((x < 0.0)) { - discard; - }; - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt deleted file mode 100644 index 15e367d33..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt +++ /dev/null @@ -1,243 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _BumpSpecMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 norspc; - vec4 trngls; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - trngls = tmpvar_5; - float tmpvar_6; - tmpvar_6 = trngls.w; - o.Gloss = tmpvar_6; - float tmpvar_7; - tmpvar_7 = IN.color.w; - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpSpecMap, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - norspc = tmpvar_9; - float tmpvar_10; - tmpvar_10 = norspc.x; - o.Specular = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = UnpackNormal (norspc); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11.xyz; - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - o.Normal = tmpvar_13; -} - -vec4 LightingTreeBark ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + (_LightColor0.xyz * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (((_LightColor0.w * spec) * atten) * s.Alpha); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_14; - tmpvar_14 = vec2(tmpvar_13); - vec2 tmpvar_15; - tmpvar_15 = tmpvar_14.xy; - vec4 tmpvar_16; - tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); - vec4 tmpvar_17; - tmpvar_17 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_18; - tmpvar_18 = LightingTreeBark (o, lightDir, tmpvar_12, (tmpvar_16.w * tmpvar_17.w)); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - c = tmpvar_19; - float tmpvar_20; - tmpvar_20 = 0.0; - c.w = vec4(tmpvar_20).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt deleted file mode 100644 index d2c6b9c8a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt +++ /dev/null @@ -1,34 +0,0 @@ -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _BumpSpecMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[3].xyz; - vec4 c; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_BumpSpecMap, tmpvar_2); - vec4 normal; - normal.xy = ((tmpvar_3.wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_4; - tmpvar_4 = normal.xyz; - vec3 tmpvar_5; - tmpvar_5 = normalize (gl_TexCoord[1].xyz); - float atten; - atten = (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w); - vec4 c_i0_i1; - float tmpvar_6; - tmpvar_6 = (pow (max (0.0, dot (tmpvar_4, normalize ((tmpvar_5 + normalize (gl_TexCoord[2].xyz))))), (tmpvar_3.x * 128.0)) * texture2D (_TranslucencyMap, tmpvar_2).w); - c_i0_i1.xyz = (((((texture2D (_MainTex, tmpvar_2).xyz * gl_Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_4, tmpvar_5))) + (_LightColor0.xyz * tmpvar_6)) * (atten * 2.0)); - c_i0_i1.w = (((_LightColor0.w * tmpvar_6) * atten) * gl_Color.w); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt deleted file mode 100644 index 5ba204102..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt +++ /dev/null @@ -1,122 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; -}; -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform sampler2D _BumpSpecMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 norspc; - vec4 trngls; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - trngls = tmpvar_5; - float tmpvar_6; - tmpvar_6 = trngls.w; - o.Gloss = tmpvar_6; - float tmpvar_7; - tmpvar_7 = IN.color.w; - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpSpecMap, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - norspc = tmpvar_9; - float tmpvar_10; - tmpvar_10 = norspc.x; - o.Specular = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = UnpackNormal (norspc); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11.xyz; - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - o.Normal = tmpvar_13; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - surf (surfIN, o); - return vec4(0.0, 0.0, 0.0, 0.0); -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = frag_surf (xlt_IN); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt deleted file mode 100644 index 84d467adf..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt +++ /dev/null @@ -1,10 +0,0 @@ -uniform sampler2D _BumpSpecMap; -void main () -{ - vec2 tmpvar_1; - vec4 normal; - normal.xy = ((texture2D (_BumpSpecMap, tmpvar_1).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - gl_FragData[0] = vec4(0.0, 0.0, 0.0, 0.0); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt deleted file mode 100644 index 6cf07e17a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt +++ /dev/null @@ -1,361 +0,0 @@ -struct LeafSurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - vec3 Translucency; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; -}; -varying vec4 xlv_FOG; -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform sampler2D _BumpSpecMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout LeafSurfaceOutput o -) -{ - vec4 norspc; - vec4 trngls; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - trngls = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = trngls.xyz; - o.Translucency = tmpvar_6; - float tmpvar_7; - tmpvar_7 = trngls.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = (c.w * IN.color.w); - o.Alpha = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_BumpSpecMap, IN.uv_MainTex); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - norspc = tmpvar_10; - float tmpvar_11; - tmpvar_11 = norspc.x; - o.Specular = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (norspc); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec4 LightingTreeLeaf ( - in LeafSurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - vec3 col; - vec3 translucencyColor; - float trans; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - diff = tmpvar_4; - float tmpvar_5; - tmpvar_5 = dot (s.Normal, h); - float tmpvar_6; - tmpvar_6 = max (0.0, tmpvar_5); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - nh = tmpvar_7; - float tmpvar_8; - tmpvar_8 = pow (nh, (s.Specular * 128.0)); - float tmpvar_9; - tmpvar_9 = (tmpvar_8 * s.Gloss); - spec = tmpvar_9; - float tmpvar_10; - tmpvar_10 = max (0.0, -(diff)); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - trans = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = ((s.Translucency * trans) * 2.0); - translucencyColor = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, ((diff * 0.5) + 0.5)); - float tmpvar_14; - tmpvar_14 = tmpvar_13; - diff = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (s.Albedo * (diff + translucencyColor)); - col = tmpvar_15; - float tmpvar_16; - tmpvar_16 = ceil (trans); - float tmpvar_17; - tmpvar_17 = xll_saturate (tmpvar_16); - vec3 tmpvar_18; - tmpvar_18 = (col + (spec * (1.0 - tmpvar_17))); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col * _LightColor0.xyz); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col * (atten * 2.0)); - c.xyz = tmpvar_20.xyz.xyz; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - LeafSurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.viewDir.xyz; - vec3 tmpvar_9; - tmpvar_9 = normalize (tmpvar_8); - vec4 tmpvar_10; - tmpvar_10 = LightingTreeLeaf (o, lightDir, tmpvar_9, 1.0); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = o.Alpha; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt deleted file mode 100644 index ad3243f7c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt +++ /dev/null @@ -1,45 +0,0 @@ -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform sampler2D _BumpSpecMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 c; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, tmpvar_3); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4.xyz * gl_Color.xyz); - vec4 tmpvar_6; - tmpvar_6 = texture2D (_TranslucencyMap, tmpvar_3); - float tmpvar_7; - tmpvar_7 = (tmpvar_4.w * gl_Color.w); - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpSpecMap, tmpvar_3); - vec4 normal; - normal.xy = ((tmpvar_8.wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_9; - tmpvar_9 = normal.xyz; - float x; - x = (tmpvar_7 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0_i1; - float tmpvar_10; - tmpvar_10 = dot (tmpvar_9, tmpvar_1); - float tmpvar_11; - tmpvar_11 = max (0.0, -(tmpvar_10)); - c_i0_i1.xyz = ((((tmpvar_5 * (max (0.0, ((tmpvar_10 * 0.5) + 0.5)) + ((tmpvar_6.xyz * tmpvar_11) * 2.0))) + ((pow (max (0.0, dot (tmpvar_9, normalize ((tmpvar_1 + normalize (tmpvar_2))))), (tmpvar_8.x * 128.0)) * tmpvar_6.w) * (1.0 - clamp (ceil (tmpvar_11), 0.0, 1.0)))) * _LightColor0.xyz) * 2.0); - c = c_i0_i1; - c.w = tmpvar_7; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt deleted file mode 100644 index 6fcb293e3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt +++ /dev/null @@ -1,384 +0,0 @@ -struct LeafSurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - vec3 Translucency; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform sampler2D _BumpSpecMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout LeafSurfaceOutput o -) -{ - vec4 norspc; - vec4 trngls; - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - trngls = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = trngls.xyz; - o.Translucency = tmpvar_6; - float tmpvar_7; - tmpvar_7 = trngls.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = (c.w * IN.color.w); - o.Alpha = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_BumpSpecMap, IN.uv_MainTex); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - norspc = tmpvar_10; - float tmpvar_11; - tmpvar_11 = norspc.x; - o.Specular = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (norspc); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec4 LightingTreeLeaf ( - in LeafSurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - vec3 col; - vec3 translucencyColor; - float trans; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - diff = tmpvar_4; - float tmpvar_5; - tmpvar_5 = dot (s.Normal, h); - float tmpvar_6; - tmpvar_6 = max (0.0, tmpvar_5); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - nh = tmpvar_7; - float tmpvar_8; - tmpvar_8 = pow (nh, (s.Specular * 128.0)); - float tmpvar_9; - tmpvar_9 = (tmpvar_8 * s.Gloss); - spec = tmpvar_9; - float tmpvar_10; - tmpvar_10 = max (0.0, -(diff)); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - trans = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = ((s.Translucency * trans) * 2.0); - translucencyColor = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, ((diff * 0.5) + 0.5)); - float tmpvar_14; - tmpvar_14 = tmpvar_13; - diff = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (s.Albedo * (diff + translucencyColor)); - col = tmpvar_15; - float tmpvar_16; - tmpvar_16 = ceil (trans); - float tmpvar_17; - tmpvar_17 = xll_saturate (tmpvar_16); - vec3 tmpvar_18; - tmpvar_18 = (col + (spec * (1.0 - tmpvar_17))); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col * _LightColor0.xyz); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col * (atten * 2.0)); - c.xyz = tmpvar_20.xyz.xyz; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - LeafSurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = IN.viewDir.xyz; - vec3 tmpvar_11; - tmpvar_11 = normalize (tmpvar_10); - float tmpvar_12; - tmpvar_12 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_13; - tmpvar_13 = vec2(tmpvar_12); - vec2 tmpvar_14; - tmpvar_14 = tmpvar_13.xy; - vec4 tmpvar_15; - tmpvar_15 = texture2D (_LightTextureB0, tmpvar_14); - vec4 tmpvar_16; - tmpvar_16 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_17; - tmpvar_17 = LightingTreeLeaf (o, lightDir, tmpvar_11, (tmpvar_15.w * tmpvar_16.w)); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - c = tmpvar_18; - float tmpvar_19; - tmpvar_19 = o.Alpha; - c.w = vec4(tmpvar_19).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt deleted file mode 100644 index e3058dc70..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt +++ /dev/null @@ -1,51 +0,0 @@ -uniform sampler2D _TranslucencyMap; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform sampler2D _BumpSpecMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5.xyz * gl_Color.xyz); - vec4 tmpvar_7; - tmpvar_7 = texture2D (_TranslucencyMap, tmpvar_4); - float tmpvar_8; - tmpvar_8 = (tmpvar_5.w * gl_Color.w); - vec4 tmpvar_9; - tmpvar_9 = texture2D (_BumpSpecMap, tmpvar_4); - vec4 normal; - normal.xy = ((tmpvar_9.wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_10; - tmpvar_10 = normal.xyz; - float x; - x = (tmpvar_8 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 tmpvar_11; - tmpvar_11 = normalize (tmpvar_1); - vec4 c_i0_i1; - float tmpvar_12; - tmpvar_12 = dot (tmpvar_10, tmpvar_11); - float tmpvar_13; - tmpvar_13 = max (0.0, -(tmpvar_12)); - c_i0_i1.xyz = ((((tmpvar_6 * (max (0.0, ((tmpvar_12 * 0.5) + 0.5)) + ((tmpvar_7.xyz * tmpvar_13) * 2.0))) + ((pow (max (0.0, dot (tmpvar_10, normalize ((tmpvar_11 + normalize (tmpvar_2))))), (tmpvar_9.x * 128.0)) * tmpvar_7.w) * (1.0 - clamp (ceil (tmpvar_13), 0.0, 1.0)))) * _LightColor0.xyz) * ((texture2D (_LightTextureB0, vec2(dot (tmpvar_3, tmpvar_3))).w * textureCube (_LightTexture0, tmpvar_3).w) * 2.0)); - c = c_i0_i1; - c.w = tmpvar_8; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-ir.txt deleted file mode 100644 index cc3f2f061..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-ir.txt +++ /dev/null @@ -1,91 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -uniform mat4 _RotationMatrix; -uniform sampler2D _MainTex; -uniform vec4 _CenterRadius; -vec2 MultiplyUV ( - in mat4 mat, - in vec2 inUV -) -{ - vec4 temp; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.x = inUV.x; - tmpvar_1.y = inUV.y; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - temp = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (mat * temp); - temp = tmpvar_3; - return temp.xy; -} - -vec4 frag ( - in v2f i -) -{ - float t; - vec2 tmp; - vec2 distortedOffset; - vec2 offset; - vec2 tmpvar_1; - tmpvar_1 = i.uv; - offset = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = MultiplyUV (_RotationMatrix, offset.xy); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - distortedOffset = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = (offset / _CenterRadius.zw); - tmp = tmpvar_4; - float tmpvar_5; - tmpvar_5 = length (tmp); - float tmpvar_6; - tmpvar_6 = min (1.0, tmpvar_5); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - t = tmpvar_7; - vec2 tmpvar_8; - tmpvar_8 = vec2(t); - vec2 tmpvar_9; - tmpvar_9 = mix (distortedOffset, offset, tmpvar_8); - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - offset = tmpvar_10; - vec2 tmpvar_11; - tmpvar_11 = (offset + _CenterRadius.xy); - offset = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (_MainTex, offset); - return tmpvar_12; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-ir.txt deleted file mode 100644 index d2b734d76..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-ir.txt +++ /dev/null @@ -1,287 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec2 uvOrig; -}; -uniform sampler2D _MainTex; -uniform vec4 _CenterRadius; -uniform float _Angle; -void xll_sincos ( - in float x, - out float s, - out float c -) -{ - float tmpvar_1; - tmpvar_1 = sin (x); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - s = tmpvar_2; - float tmpvar_3; - tmpvar_3 = cos (x); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - c = tmpvar_4; -} - -void xll_sincos ( - in vec2 x, - out vec2 s, - out vec2 c -) -{ - vec2 tmpvar_1; - tmpvar_1 = sin (x); - vec2 tmpvar_2; - tmpvar_2 = tmpvar_1; - s = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = cos (x); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - c = tmpvar_4; -} - -void xll_sincos ( - in vec3 x, - out vec3 s, - out vec3 c -) -{ - vec3 tmpvar_1; - tmpvar_1 = sin (x); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - s = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cos (x); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - c = tmpvar_4; -} - -void xll_sincos ( - in vec4 x, - out vec4 s, - out vec4 c -) -{ - vec4 tmpvar_1; - tmpvar_1 = sin (x); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - s = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = cos (x); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - c = tmpvar_4; -} - -void xll_sincos ( - in mat2 x, - out mat2 s, - out mat2 c -) -{ - vec2 tmpvar_1; - tmpvar_1 = sin (x[0]); - vec2 tmpvar_2; - tmpvar_2 = sin (x[1]); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - mat2 tmpvar_6; - tmpvar_6 = (tmpvar_3); - s = (tmpvar_6); - vec2 tmpvar_7; - tmpvar_7 = cos (x[0]); - vec2 tmpvar_8; - tmpvar_8 = cos (x[1]); - mat2 tmpvar_9; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_7; - tmpvar_9[0] = tmpvar_10; - vec2 tmpvar_11; - tmpvar_11 = tmpvar_8; - tmpvar_9[1] = tmpvar_11; - mat2 tmpvar_12; - tmpvar_12 = (tmpvar_9); - c = (tmpvar_12); -} - -void xll_sincos ( - in mat3 x, - out mat3 s, - out mat3 c -) -{ - vec3 tmpvar_1; - tmpvar_1 = sin (x[0]); - vec3 tmpvar_2; - tmpvar_2 = sin (x[1]); - vec3 tmpvar_3; - tmpvar_3 = sin (x[2]); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - mat3 tmpvar_8; - tmpvar_8 = (tmpvar_4); - s = (tmpvar_8); - vec3 tmpvar_9; - tmpvar_9 = cos (x[0]); - vec3 tmpvar_10; - tmpvar_10 = cos (x[1]); - vec3 tmpvar_11; - tmpvar_11 = cos (x[2]); - mat3 tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = tmpvar_9; - tmpvar_12[0] = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_10; - tmpvar_12[1] = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = tmpvar_11; - tmpvar_12[2] = tmpvar_15; - mat3 tmpvar_16; - tmpvar_16 = (tmpvar_12); - c = (tmpvar_16); -} - -void xll_sincos ( - in mat4 x, - out mat4 s, - out mat4 c -) -{ - vec4 tmpvar_1; - tmpvar_1 = sin (x[0]); - vec4 tmpvar_2; - tmpvar_2 = sin (x[1]); - vec4 tmpvar_3; - tmpvar_3 = sin (x[2]); - vec4 tmpvar_4; - tmpvar_4 = sin (x[3]); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - mat4 tmpvar_10; - tmpvar_10 = (tmpvar_5); - s = (tmpvar_10); - vec4 tmpvar_11; - tmpvar_11 = cos (x[0]); - vec4 tmpvar_12; - tmpvar_12 = cos (x[1]); - vec4 tmpvar_13; - tmpvar_13 = cos (x[2]); - vec4 tmpvar_14; - tmpvar_14 = cos (x[3]); - mat4 tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_11; - tmpvar_15[0] = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = tmpvar_12; - tmpvar_15[1] = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_13; - tmpvar_15[2] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = tmpvar_14; - tmpvar_15[3] = tmpvar_19; - mat4 tmpvar_20; - tmpvar_20 = (tmpvar_15); - c = (tmpvar_20); -} - -vec4 frag ( - in v2f i -) -{ - vec2 uv; - float cosLength; - float sinLength; - float angle; - vec2 offset; - vec2 tmpvar_1; - tmpvar_1 = i.uvOrig; - offset = tmpvar_1; - float tmpvar_2; - tmpvar_2 = length ((offset / _CenterRadius.zw)); - float tmpvar_3; - tmpvar_3 = (1.0 - tmpvar_2); - angle = tmpvar_3; - float tmpvar_4; - tmpvar_4 = max (0.0, angle); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - angle = tmpvar_5; - float tmpvar_6; - tmpvar_6 = ((angle * angle) * _Angle); - angle = tmpvar_6; - xll_sincos (angle, sinLength, cosLength); - float tmpvar_7; - tmpvar_7 = ((cosLength * offset.x) - (sinLength * offset.y)); - uv.x = tmpvar_7; - float tmpvar_8; - tmpvar_8 = ((sinLength * offset.x) + (cosLength * offset.y)); - uv.y = vec2(tmpvar_8).y; - vec2 tmpvar_9; - tmpvar_9 = (uv + _CenterRadius.xy); - uv = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = texture2D (_MainTex, uv); - return tmpvar_10; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.uvOrig = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-out.txt deleted file mode 100644 index 567c13d72..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-out.txt +++ /dev/null @@ -1,24 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _CenterRadius; -uniform float _Angle; -void main () -{ - vec2 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xy; - vec2 uv; - float tmpvar_2; - tmpvar_2 = max (0.0, (1.0 - length ((tmpvar_1 / _CenterRadius.zw)))); - float tmpvar_3; - tmpvar_3 = ((tmpvar_2 * tmpvar_2) * _Angle); - float tmpvar_4; - tmpvar_4 = sin (tmpvar_3); - float tmpvar_5; - tmpvar_5 = cos (tmpvar_3); - uv.x = ((tmpvar_5 * tmpvar_1.x) - (tmpvar_4 * tmpvar_1.y)); - uv.y = ((tmpvar_4 * tmpvar_1.x) + (tmpvar_5 * tmpvar_1.y)); - vec2 tmpvar_6; - tmpvar_6 = (uv + _CenterRadius.xy); - uv = tmpvar_6; - gl_FragData[0] = texture2D (_MainTex, tmpvar_6); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt deleted file mode 100644 index 67a588cc8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,185 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv2_LightMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform sampler2D _LightMap; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 lm; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = _Color.xyz; - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_1.xyz * tmpvar_2); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightMap, IN.uv2_LightMap); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - lm = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (lm.xyz * o.Albedo.xyz); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = (lm.w * _Color.w); - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt deleted file mode 100644 index 567d34db3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt +++ /dev/null @@ -1,23 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform sampler2D _LightMap; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec2 tmpvar_2; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0; - c_i0.xyz = (((texture2D (_MainTex, tmpvar_1.xy).xyz * _Color.xyz) * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, gl_TexCoord[1].xyz)) * texture2D (_LightTexture0, gl_TexCoord[2].xy).w) * 2.0)); - c_i0.w = (texture2D (_LightMap, tmpvar_2).w * _Color.w); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt deleted file mode 100644 index 5adb98c3d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt +++ /dev/null @@ -1,178 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv2_LightMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightMap; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 lm; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = _Color.xyz; - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_1.xyz * tmpvar_2); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightMap, IN.uv2_LightMap); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - lm = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (lm.xyz * o.Albedo.xyz); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = (lm.w * _Color.w); - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv2_LightMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (col.xyz + o.Emission); - col.xyz = tmpvar_15.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt deleted file mode 100644 index 4009f2a23..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightMap; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 col; - vec4 light; - vec2 tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy).xyz * _Color.xyz); - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightMap, tmpvar_1.zw); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (tmpvar_3 * light.xyz); - c.w = (tmpvar_4.w * _Color.w); - col = c; - col.xyz = (c.xyz + (tmpvar_4.xyz * tmpvar_3)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-ir.txt deleted file mode 100644 index fd1d23561..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-ir.txt +++ /dev/null @@ -1,196 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv2_LightMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform sampler2D _LightMap; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 lm; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = _Color.xyz; - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_1.xyz * tmpvar_2); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightMap, IN.uv2_LightMap); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - lm = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (lm.xyz * o.Albedo.xyz); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = (lm.w * _Color.w); - o.Alpha = tmpvar_7; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = UnitySpotCookie (IN._LightCoord); - float tmpvar_12; - tmpvar_12 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_13; - tmpvar_13 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_11) * tmpvar_12)); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - c = tmpvar_14; - float tmpvar_15; - tmpvar_15 = 0.0; - c.w = vec4(tmpvar_15).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-out.txt deleted file mode 100644 index 0c538738d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform sampler2D _LightMap; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[3]; - vec4 c; - vec2 tmpvar_2; - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_1.xyz; - vec4 c_i0; - c_i0.xyz = (((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _Color.xyz) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0.w = (texture2D (_LightMap, tmpvar_2).w * _Color.w); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-irES.txt deleted file mode 100644 index fbc2ceb61..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-irES.txt +++ /dev/null @@ -1,187 +0,0 @@ -struct SurfaceOutput { - lowp vec3 Albedo; - lowp vec3 Normal; - lowp vec3 Emission; - mediump float Specular; - lowp float Gloss; - lowp float Alpha; -}; -struct Input { - mediump vec2 uv_MainTex; -}; -struct v2f_surf { - highp vec4 pos; - mediump vec2 pack0; - mediump vec3 viewDir; - lowp vec3 lightDir; - lowp vec3 vlight; -}; -varying lowp vec3 xlv_TEXCOORD3; -varying lowp vec3 xlv_TEXCOORD2; -varying mediump vec3 xlv_TEXCOORD1; -varying mediump vec2 xlv_TEXCOORD0; -uniform mediump float _Shininess; -uniform sampler2D _MainTex; -uniform lowp vec4 _LightColor0; -uniform sampler2D _BumpMap; -lowp vec3 UnpackNormal ( - in lowp vec4 packednormal -) -{ - return ((packednormal.xyz * 2.0) - 1.0); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - lowp vec4 tex; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - lowp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - lowp vec3 tmpvar_3; - tmpvar_3 = tex.xyz; - o.Albedo = tmpvar_3; - lowp float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - lowp float tmpvar_5; - tmpvar_5 = tex.w; - o.Alpha = tmpvar_5; - mediump float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - lowp vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_MainTex); - lowp vec3 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - lowp vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - o.Normal = tmpvar_9; -} - -lowp vec4 LightingMobileBlinnPhong ( - in SurfaceOutput s, - in lowp vec3 lightDir, - in lowp vec3 halfDir, - in lowp float atten -) -{ - lowp vec4 c; - lowp float spec; - lowp float nh; - lowp float diff; - lowp float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - lowp float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - lowp float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - lowp float tmpvar_4; - tmpvar_4 = dot (s.Normal, halfDir); - lowp float tmpvar_5; - tmpvar_5 = max (0.0, tmpvar_4); - lowp float tmpvar_6; - tmpvar_6 = tmpvar_5; - nh = tmpvar_6; - mediump float tmpvar_7; - tmpvar_7 = pow (nh, (s.Specular * 128.0)); - mediump float tmpvar_8; - tmpvar_8 = (tmpvar_7 * s.Gloss); - spec = tmpvar_8; - lowp vec3 tmpvar_9; - tmpvar_9 = ((((s.Albedo * diff) + spec) * _LightColor0.xyz) * (atten * 2.0)); - c.xyz = tmpvar_9.xyz.xyz; - float tmpvar_10; - tmpvar_10 = 0.0; - c.w = vec4(tmpvar_10).w; - return c; -} - -lowp vec4 frag_surf ( - in v2f_surf IN -) -{ - lowp vec4 c; - lowp float atten; - SurfaceOutput o; - Input surfIN; - mediump vec2 tmpvar_1; - tmpvar_1 = IN.pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - float tmpvar_7; - tmpvar_7 = 1.0; - atten = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_8; - lowp vec4 tmpvar_9; - tmpvar_9 = LightingMobileBlinnPhong (o, IN.lightDir, IN.viewDir, atten); - lowp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - c = tmpvar_10; - lowp vec3 tmpvar_11; - tmpvar_11 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_11.xyz.xyz; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - lowp vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - mediump vec2 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD0.xy; - mediump vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.pack0 = tmpvar_3; - mediump vec3 tmpvar_4; - tmpvar_4 = xlv_TEXCOORD1.xyz; - mediump vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.viewDir = tmpvar_5; - lowp vec3 tmpvar_6; - tmpvar_6 = xlv_TEXCOORD2.xyz; - lowp vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.lightDir = tmpvar_7; - lowp vec3 tmpvar_8; - tmpvar_8 = xlv_TEXCOORD3.xyz; - lowp vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.vlight = tmpvar_9; - lowp vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - lowp vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - lowp vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - lowp vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-outES.txt deleted file mode 100644 index 1845aef9f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-outES.txt +++ /dev/null @@ -1,31 +0,0 @@ -varying lowp vec3 xlv_TEXCOORD3; -varying lowp vec3 xlv_TEXCOORD2; -varying mediump vec3 xlv_TEXCOORD1; -varying mediump vec2 xlv_TEXCOORD0; -uniform mediump float _Shininess; -uniform sampler2D _MainTex; -uniform lowp vec4 _LightColor0; -uniform sampler2D _BumpMap; -void main () -{ - lowp vec4 c; - lowp vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, xlv_TEXCOORD0); - lowp vec3 tmpvar_2; - tmpvar_2 = ((texture2D (_BumpMap, xlv_TEXCOORD0).xyz * 2.0) - 1.0); - lowp vec3 halfDir; - halfDir = xlv_TEXCOORD1; - lowp vec4 c_i0; - lowp float spec; - lowp float tmpvar_3; - tmpvar_3 = max (0.0, dot (tmpvar_2, halfDir)); - mediump float tmpvar_4; - tmpvar_4 = (pow (tmpvar_3, (_Shininess * 128.0)) * tmpvar_1.w); - spec = tmpvar_4; - c_i0.xyz = ((((tmpvar_1.xyz * max (0.0, dot (tmpvar_2, xlv_TEXCOORD2))) + spec) * _LightColor0.xyz) * 2.0); - c_i0.w = 0.0; - c = c_i0; - c.xyz = (c_i0.xyz + (tmpvar_1.xyz * xlv_TEXCOORD3)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-ir.txt deleted file mode 100644 index 3ae052ffa..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-ir.txt +++ /dev/null @@ -1,44 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (tmpvar_1 * vec4(1.0, 0.0, 0.0, 1.0)); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-ir.txt deleted file mode 100644 index aabb08a73..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-ir.txt +++ /dev/null @@ -1,187 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = UnitySpotCookie (IN._LightCoord); - float tmpvar_12; - tmpvar_12 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_13; - tmpvar_13 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_11) * tmpvar_12)); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - c = tmpvar_14; - float tmpvar_15; - tmpvar_15 = 0.0; - c.w = vec4(tmpvar_15).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-out.txt deleted file mode 100644 index 226dc17e7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[3]; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_1.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = tmpvar_2.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-ir.txt deleted file mode 100644 index 6135e0121..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-ir.txt +++ /dev/null @@ -1,155 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-out.txt deleted file mode 100644 index cf0b90ffa..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-out.txt +++ /dev/null @@ -1,17 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_1.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0_i1.w = tmpvar_1.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-ir.txt deleted file mode 100644 index d0aa9cc44..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-ir.txt +++ /dev/null @@ -1,117 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - vec3 vec; -}; -uniform sampler2D _MainTex; -uniform vec4 _LightPositionRange; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 EncodeFloatRGBA ( - in float v -) -{ - vec4 enc; - float kEncodeBit; - vec4 kEncodeMul; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, 255.0, 65025.0, 160580992.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = fract (enc); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (enc - (enc.yzww * kEncodeBit)); - enc = tmpvar_6; - return enc; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - surf (surfIN, o); - float tmpvar_6; - tmpvar_6 = length (IN.vec); - vec4 tmpvar_7; - tmpvar_7 = EncodeFloatRGBA ((tmpvar_6 * _LightPositionRange.w)); - return tmpvar_7; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.vec = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-out.txt deleted file mode 100644 index 880249aed..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -uniform vec4 _LightPositionRange; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((vec4(1.0, 255.0, 65025.0, 160580992.0) * (length (gl_TexCoord[0].xyz) * _LightPositionRange.w))); - gl_FragData[0] = (tmpvar_1 - (tmpvar_1.yzww * 0.00392157)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-ir.txt deleted file mode 100644 index 33b263652..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-ir.txt +++ /dev/null @@ -1,311 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - vec3 _ShadowCoord0; - vec3 _ShadowCoord1; - vec3 _ShadowCoord2; - vec3 _ShadowCoord3; - vec2 _ShadowZFade; -}; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _MainTex; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform vec4 _Color; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - float faded; - float shadow; - vec4 coord; - vec4 weights; - vec4 far; - vec4 near; - vec4 z; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - surf (surfIN, o); - vec4 tmpvar_6; - tmpvar_6 = vec4(IN._ShadowZFade.x); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - z = tmpvar_7; - bvec4 tmpvar_8; - tmpvar_8 = greaterThanEqual (z, _LightSplitsNear); - vec4 tmpvar_9; - tmpvar_9 = vec4(tmpvar_8).xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - near = tmpvar_10; - bvec4 tmpvar_11; - tmpvar_11 = lessThan (z, _LightSplitsFar); - vec4 tmpvar_12; - tmpvar_12 = vec4(tmpvar_11).xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - far = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = (near * far); - weights = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = 1.0; - tmpvar_15.xyz = ((((IN._ShadowCoord0 * weights.x) + (IN._ShadowCoord1 * weights.y)) + (IN._ShadowCoord2 * weights.z)) + (IN._ShadowCoord3 * weights.w)).xyz; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - coord = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_ShadowMapTexture, coord.xy); - float tmpvar_18; - if ((tmpvar_17.x < coord.z)) { - tmpvar_18 = _LightShadowData.x; - } else { - tmpvar_18 = 1.0; - }; - float tmpvar_19; - tmpvar_19 = tmpvar_18; - shadow = tmpvar_19; - float tmpvar_20; - tmpvar_20 = xll_saturate (IN._ShadowZFade.y); - float tmpvar_21; - tmpvar_21 = xll_saturate ((shadow + tmpvar_20)); - float tmpvar_22; - tmpvar_22 = tmpvar_21; - faded = tmpvar_22; - float tmpvar_23; - tmpvar_23 = faded; - res.x = tmpvar_23; - float tmpvar_24; - tmpvar_24 = 1.0; - res.y = vec2(tmpvar_24).y; - vec2 tmpvar_25; - tmpvar_25 = EncodeFloatRG ((1.0 - (z * _ProjectionParams.w)).x); - vec2 tmpvar_26; - tmpvar_26 = tmpvar_25; - res.zw = tmpvar_26.xxxy.zw; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN._ShadowCoord0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN._ShadowCoord1 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN._ShadowCoord2 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN._ShadowCoord3 = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10 = gl_TexCoord[4].xy; - vec2 tmpvar_11; - tmpvar_11 = tmpvar_10; - xlt_IN._ShadowZFade = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = frag_surf (xlt_IN); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - xl_retval = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = xl_retval.xyzw; - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - gl_FragData[0] = tmpvar_15; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-ir.txt deleted file mode 100644 index b35ab4aaf..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-ir.txt +++ /dev/null @@ -1,183 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 vlight; - vec4 _ShadowCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float unitySampleShadow ( - in vec4 shadowCoord -) -{ - float shadow; - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_ShadowMapTexture, shadowCoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - shadow = tmpvar_2; - return shadow; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - float tmpvar_8; - tmpvar_8 = unitySampleShadow (IN._ShadowCoord); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - atten = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, _WorldSpaceLightPos0.xyz, atten); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_12.xyz.xyz; - float tmpvar_13; - tmpvar_13 = o.Alpha; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.vlight = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._ShadowCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-out.txt deleted file mode 100644 index 98981ed45..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-out.txt +++ /dev/null @@ -1,31 +0,0 @@ -uniform vec4 _WorldSpaceLightPos0; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 c; - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - float x; - x = (tmpvar_4.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (tmpvar_1, _WorldSpaceLightPos0.xyz)) * texture2DProj (_ShadowMapTexture, tmpvar_3).x) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.xyz = (c_i0_i1.xyz + (tmpvar_4.xyz * tmpvar_2)); - c.w = tmpvar_4.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-ir.txt deleted file mode 100644 index b14d4f192..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-ir.txt +++ /dev/null @@ -1,147 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_11.xyz.xyz; - vec4 tmpvar_12; - tmpvar_12 = LightingLambert_PrePass (o, light); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - col = tmpvar_13; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-out.txt deleted file mode 100644 index c18db95bb..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - float x; - x = (tmpvar_2.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, tmpvar_1))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_2.xyz * light.xyz); - c_i0.w = tmpvar_2.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-ir.txt deleted file mode 100644 index 80527df39..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-ir.txt +++ /dev/null @@ -1,292 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_12; - tmpvar_12 = DecodeLightmap (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - lmFull = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_15; - tmpvar_15 = DecodeLightmap (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - lmIndirect = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_18; - tmpvar_18 = vec3(tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = mix (lmIndirect, lmFull, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lm = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (light.xyz + lm); - light.xyz = tmpvar_21.xyz.xyz; - vec4 tmpvar_22; - tmpvar_22 = LightingLambert_PrePass (o, light); - vec4 tmpvar_23; - tmpvar_23 = tmpvar_22; - col = tmpvar_23; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-out.txt deleted file mode 100644 index df598544c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-out.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 light; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - float x; - x = (tmpvar_3.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, tmpvar_1))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); - vec4 c_i0; - c_i0.xyz = (tmpvar_3.xyz * light.xyz); - c_i0.w = tmpvar_3.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-ir.txt deleted file mode 100644 index c815fda01..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-ir.txt +++ /dev/null @@ -1,137 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - vec3 vec; - vec2 hip_pack0; -}; -uniform sampler2D _MainTex; -uniform vec4 _LightPositionRange; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 EncodeFloatRGBA ( - in float v -) -{ - vec4 enc; - float kEncodeBit; - vec4 kEncodeMul; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, 255.0, 65025.0, 160580992.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = fract (enc); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (enc - (enc.yzww * kEncodeBit)); - enc = tmpvar_6; - return enc; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - float tmpvar_7; - tmpvar_7 = length (IN.vec); - vec4 tmpvar_8; - tmpvar_8 = EncodeFloatRGBA ((tmpvar_7 * _LightPositionRange.w)); - return tmpvar_8; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.vec = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.hip_pack0 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag_surf (xlt_IN); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-out.txt deleted file mode 100644 index 9ef8b150c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _LightPositionRange; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xyz; - float x; - x = ((texture2D (_MainTex, gl_TexCoord[1].xy) * _Color).w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_2; - tmpvar_2 = fract ((vec4(1.0, 255.0, 65025.0, 160580992.0) * (length (tmpvar_1) * _LightPositionRange.w))); - gl_FragData[0] = (tmpvar_2 - (tmpvar_2.yzww * 0.00392157)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-ir.txt deleted file mode 100644 index 20ba356d8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-ir.txt +++ /dev/null @@ -1,60 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = (_Color * tmpvar_1); - col = tmpvar_2; - xll_clip ((col.w - _Cutoff)); - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-ir.txt deleted file mode 100644 index 67de6449d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-ir.txt +++ /dev/null @@ -1,246 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 vlight; - vec4 _ShadowCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -float unitySampleShadow ( - in vec4 shadowCoord -) -{ - float shadow; - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_ShadowMapTexture, shadowCoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - shadow = tmpvar_2; - return shadow; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * _Color); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = c.xyz; - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = c.w; - o.Alpha = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - float tmpvar_9; - tmpvar_9 = unitySampleShadow (IN._ShadowCoord); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - atten = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = LightingLambert (o, IN.lightDir, atten); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_13.xyz.xyz; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.vlight = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._ShadowCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-out.txt deleted file mode 100644 index c57eed0d2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform sampler2D _ShadowMapTexture; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec2 tmpvar_2; - vec3 v; - vec3 tmpvar_3; - tmpvar_3 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_3; - v.z = (tmpvar_3.z + 0.42); - tmpvar_2 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_3.xy / v.z)); - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_2)) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_2)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, gl_TexCoord[2].xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[4]).x) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.xyz = (c_i0_i1.xyz + (tmpvar_4.xyz * gl_TexCoord[3].xyz)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-ir.txt deleted file mode 100644 index d87c4bf1d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-ir.txt +++ /dev/null @@ -1,217 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * _Color); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = c.xyz; - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = c.w; - o.Alpha = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec4 tmpvar_9; - tmpvar_9 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = log2 (light); - vec4 tmpvar_12; - tmpvar_12 = -(tmpvar_11); - light = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_13.xyz.xyz; - vec4 tmpvar_14; - tmpvar_14 = LightingLambert_PrePass (o, light); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - col = tmpvar_15; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-out.txt deleted file mode 100644 index 72c62060f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-out.txt +++ /dev/null @@ -1,34 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 light; - vec2 tmpvar_2; - vec3 v; - vec3 tmpvar_3; - tmpvar_3 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_3; - v.z = (tmpvar_3.z + 0.42); - tmpvar_2 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_3.xy / v.z)); - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_2)) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_2)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_4.xyz * light.xyz); - c_i0.w = tmpvar_4.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-ir.txt deleted file mode 100644 index 51ab3a040..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-ir.txt +++ /dev/null @@ -1,362 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * _Color); - c = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = c.xyz; - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = c.w; - o.Alpha = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec4 tmpvar_9; - tmpvar_9 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = log2 (light); - vec4 tmpvar_12; - tmpvar_12 = -(tmpvar_11); - light = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_14; - tmpvar_14 = DecodeLightmap (tmpvar_13); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - lmFull = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_17; - tmpvar_17 = DecodeLightmap (tmpvar_16); - vec3 tmpvar_18; - tmpvar_18 = tmpvar_17; - lmIndirect = tmpvar_18; - float tmpvar_19; - tmpvar_19 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_20; - tmpvar_20 = vec3(tmpvar_19); - vec3 tmpvar_21; - tmpvar_21 = mix (lmIndirect, lmFull, tmpvar_20); - vec3 tmpvar_22; - tmpvar_22 = tmpvar_21; - lm = tmpvar_22; - vec3 tmpvar_23; - tmpvar_23 = (light.xyz + lm); - light.xyz = tmpvar_23.xyz.xyz; - vec4 tmpvar_24; - tmpvar_24 = LightingLambert_PrePass (o, light); - vec4 tmpvar_25; - tmpvar_25 = tmpvar_24; - col = tmpvar_25; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_lmapFade = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-out.txt deleted file mode 100644 index 09ca96c8c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-out.txt +++ /dev/null @@ -1,37 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[3].xyz; - vec4 light; - vec2 tmpvar_3; - vec3 v; - vec3 tmpvar_4; - tmpvar_4 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_4; - v.z = (tmpvar_4.z + 0.42); - tmpvar_3 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_4.xy / v.z)); - vec4 tmpvar_5; - tmpvar_5 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_3)) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_3)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_6; - tmpvar_6 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_6; - light.xyz = (tmpvar_6.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); - vec4 c_i0; - c_i0.xyz = (tmpvar_5.xyz * light.xyz); - c_i0.w = tmpvar_5.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-ir.txt deleted file mode 100644 index 4c07dfaf0..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-ir.txt +++ /dev/null @@ -1,292 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - tex = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = tex.w; - o.Gloss = tmpvar_10; - float tmpvar_11; - tmpvar_11 = (tex.w * _Color.w); - o.Alpha = tmpvar_11; - float tmpvar_12; - tmpvar_12 = _Shininess; - o.Specular = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_14; - tmpvar_14 = UnpackNormal (tmpvar_13); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14.xyz; - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - o.Normal = tmpvar_16; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = IN.viewDir.xyz; - vec3 tmpvar_13; - tmpvar_13 = normalize (tmpvar_12); - float tmpvar_14; - tmpvar_14 = UnitySpotCookie (IN._LightCoord); - float tmpvar_15; - tmpvar_15 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_16; - tmpvar_16 = LightingBlinnPhong (o, lightDir, tmpvar_13, ((float((IN._LightCoord.z > 0.0)) * tmpvar_14) * tmpvar_15)); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - c = tmpvar_17; - float tmpvar_18; - tmpvar_18 = 0.0; - c.w = vec4(tmpvar_18).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-out.txt deleted file mode 100644 index 98f980cbb..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-out.txt +++ /dev/null @@ -1,49 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 c; - vec2 tmpvar_4; - vec3 v; - vec3 tmpvar_5; - tmpvar_5 = normalize (tmpvar_2); - v = tmpvar_5; - v.z = (tmpvar_5.z + 0.42); - tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v.z)); - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_7; - tmpvar_7 = normal.xyz; - vec3 tmpvar_8; - tmpvar_8 = normalize (gl_TexCoord[2].xyz); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_3.xyz; - float atten; - atten = ((float((tmpvar_3.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_3.xy / tmpvar_3.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w); - vec4 c_i0; - float tmpvar_9; - tmpvar_9 = (pow (max (0.0, dot (tmpvar_7, normalize ((tmpvar_8 + normalize (tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_6.w); - c_i0.xyz = (((((tmpvar_6.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_7, tmpvar_8))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * (atten * 2.0)); - c_i0.w = ((tmpvar_6.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_9) * atten)); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-ir.txt deleted file mode 100644 index bb7aae3ba..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-ir.txt +++ /dev/null @@ -1,45 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform vec4 _TintColor; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (((2.0 * i.color) * _TintColor) * tmpvar_1); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-ir.txt deleted file mode 100644 index 8a73ae172..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-ir.txt +++ /dev/null @@ -1,51 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 prev; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = (i.color * tmpvar_1); - prev = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (prev.xyz * prev.w); - prev.xyz = tmpvar_3.xyz.xyz; - return prev; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-out.txt deleted file mode 100644 index 45bb03a32..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-out.txt +++ /dev/null @@ -1,11 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 prev; - vec4 tmpvar_1; - tmpvar_1 = (gl_Color * texture2D (_MainTex, gl_TexCoord[0].xy)); - prev = tmpvar_1; - prev.xyz = (tmpvar_1.xyz * tmpvar_1.w); - gl_FragData[0] = prev; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-ir.txt deleted file mode 100644 index 52a3d3c70..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-ir.txt +++ /dev/null @@ -1,44 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return ((i.color * tmpvar_1) * i.color.w); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-ir.txt deleted file mode 100644 index c5ead733f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-ir.txt +++ /dev/null @@ -1,52 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 prev; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = (i.color * tmpvar_1); - prev = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(prev.w); - vec4 tmpvar_4; - tmpvar_4 = mix (vec4(1.0, 1.0, 1.0, 1.0), prev, tmpvar_3); - return tmpvar_4; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-ir.txt deleted file mode 100644 index d77412a21..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-ir.txt +++ /dev/null @@ -1,59 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = ((tex.xyz * i.color.xyz) * 2.0); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = (i.color.w * tex.w); - col.w = vec4(tmpvar_4).w; - vec4 tmpvar_5; - tmpvar_5 = vec4(col.w); - vec4 tmpvar_6; - tmpvar_6 = mix (vec4(0.5, 0.5, 0.5, 0.5), col, tmpvar_5); - return tmpvar_6; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-out.txt deleted file mode 100644 index 5cbe4356a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-out.txt +++ /dev/null @@ -1,11 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col.xyz = ((tmpvar_1.xyz * gl_Color.xyz) * 2.0); - col.w = (gl_Color.w * tmpvar_1.w); - gl_FragData[0] = mix (vec4(0.5, 0.5, 0.5, 0.5), col, col.wwww); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-ir.txt deleted file mode 100644 index 276afb1b2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-ir.txt +++ /dev/null @@ -1,56 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform vec4 _TintColor; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (((_TintColor.xyz * tex.xyz) * i.color.xyz) * 2.0); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = ((1.0 - tex.w) * ((_TintColor.w * i.color.w) * 2.0)); - col.w = vec4(tmpvar_4).w; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-out.txt deleted file mode 100644 index 675fbcf84..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-out.txt +++ /dev/null @@ -1,12 +0,0 @@ -uniform vec4 _TintColor; -uniform sampler2D _MainTex; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - col.xyz = (((_TintColor.xyz * tmpvar_1.xyz) * gl_Color.xyz) * 2.0); - col.w = ((1.0 - tmpvar_1.w) * ((_TintColor.w * gl_Color.w) * 2.0)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-ir.txt deleted file mode 100644 index dfced2b8c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,199 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_6; - tmpvar_6 = UnpackNormal (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.Normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = IN.worldRefl; - worldRefl = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = textureCube (_Cube, worldRefl); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - reflcol = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = (reflcol * tex.w); - reflcol = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_13; - float tmpvar_14; - tmpvar_14 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_14; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-out.txt deleted file mode 100644 index 2d76062f2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-out.txt +++ /dev/null @@ -1,26 +0,0 @@ -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec3 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0_i1; - c_i0_i1.xyz = (((tmpvar_3 * _Color).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, gl_TexCoord[1].xyz)) * texture2D (_LightTexture0, gl_TexCoord[2].xy).w) * 2.0)); - c_i0_i1.w = ((textureCube (_Cube, tmpvar_2) * tmpvar_3.w).w * _ReflectColor.w); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-ir.txt deleted file mode 100644 index 514ff2f58..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,386 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; - vec3 TtoW0; - vec3 TtoW1; - vec3 TtoW2; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec4 TtoW0; - vec4 TtoW1; - vec4 TtoW2; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_6; - tmpvar_6 = UnpackNormal (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.Normal = tmpvar_8; - float tmpvar_9; - tmpvar_9 = dot (IN.TtoW0, o.Normal); - float tmpvar_10; - tmpvar_10 = dot (IN.TtoW1, o.Normal); - float tmpvar_11; - tmpvar_11 = dot (IN.TtoW2, o.Normal); - vec3 tmpvar_12; - tmpvar_12.x = tmpvar_9; - tmpvar_12.y = tmpvar_10; - tmpvar_12.z = tmpvar_11; - vec3 tmpvar_13; - tmpvar_13 = reflect (IN.worldRefl, tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - worldRefl = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = textureCube (_Cube, worldRefl); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - reflcol = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (reflcol * tex.w); - reflcol = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_18; - float tmpvar_19; - tmpvar_19 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_19; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3.x = IN.TtoW0.w; - tmpvar_3.y = IN.TtoW1.w; - tmpvar_3.z = IN.TtoW2.w; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - surfIN.worldRefl = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = IN.TtoW0.xyz; - surfIN.TtoW0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.TtoW1.xyz; - surfIN.TtoW1 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.TtoW2.xyz; - surfIN.TtoW2 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 0.0; - o.Specular = tmpvar_10; - float tmpvar_11; - tmpvar_11 = 0.0; - o.Alpha = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Gloss = tmpvar_12; - surf (surfIN, o); - vec4 tmpvar_13; - tmpvar_13 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - light = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = log2 (light); - vec4 tmpvar_16; - tmpvar_16 = -(tmpvar_15); - light = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_18; - tmpvar_18 = DecodeLightmap (tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = tmpvar_18; - lmFull = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_21; - tmpvar_21 = DecodeLightmap (tmpvar_20); - vec3 tmpvar_22; - tmpvar_22 = tmpvar_21; - lmIndirect = tmpvar_22; - float tmpvar_23; - tmpvar_23 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_24; - tmpvar_24 = vec3(tmpvar_23); - vec3 tmpvar_25; - tmpvar_25 = mix (lmIndirect, lmFull, tmpvar_24); - vec3 tmpvar_26; - tmpvar_26 = tmpvar_25; - lm = tmpvar_26; - vec3 tmpvar_27; - tmpvar_27 = (light.xyz + lm); - light.xyz = tmpvar_27.xyz.xyz; - vec4 tmpvar_28; - tmpvar_28 = LightingLambert_PrePass (o, light); - vec4 tmpvar_29; - tmpvar_29 = tmpvar_28; - col = tmpvar_29; - vec3 tmpvar_30; - tmpvar_30 = (col.xyz + o.Emission); - col.xyz = tmpvar_30.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.TtoW0 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.TtoW1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN.TtoW2 = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = gl_TexCoord[5].xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlt_IN.hip_lmapFade = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = frag_surf (xlt_IN); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xl_retval = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_FragData[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-out.txt deleted file mode 100644 index 4fd80480c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-out.txt +++ /dev/null @@ -1,51 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[2]; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[4]; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[5].xyz; - vec4 col; - vec4 light; - vec3 tmpvar_6; - tmpvar_6.x = tmpvar_2.w; - tmpvar_6.y = tmpvar_3.w; - tmpvar_6.z = tmpvar_4.w; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, tmpvar_1.xy); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_8; - tmpvar_8 = normal.xyz; - vec3 tmpvar_9; - tmpvar_9.x = dot (tmpvar_2.xyz, tmpvar_8); - tmpvar_9.y = dot (tmpvar_3.xyz, tmpvar_8); - tmpvar_9.z = dot (tmpvar_4.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10 = (textureCube (_Cube, reflect (tmpvar_6, tmpvar_9)) * tmpvar_7.w); - vec4 tmpvar_11; - tmpvar_11 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_11; - light.xyz = (tmpvar_11.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_5.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_5.xy).xyz), vec3(clamp (tmpvar_5.z, 0.0, 1.0)))); - vec4 c_i0; - c_i0.xyz = ((tmpvar_7 * _Color).xyz * light.xyz); - c_i0.w = (tmpvar_10.w * _ReflectColor.w); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_10.xyz * _ReflectColor.xyz)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-ir.txt deleted file mode 100644 index 85e398a50..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-ir.txt +++ /dev/null @@ -1,249 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - float tmpvar_5; - tmpvar_5 = tex.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.worldRefl; - worldRefl = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = textureCube (_Cube, worldRefl); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - reflcol = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = (reflcol * tex.w); - reflcol = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_15; - float tmpvar_16; - tmpvar_16 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_16; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_14; - tmpvar_14 = vec2(tmpvar_13); - vec2 tmpvar_15; - tmpvar_15 = tmpvar_14.xy; - vec4 tmpvar_16; - tmpvar_16 = texture2D (_LightTexture0, tmpvar_15); - vec4 tmpvar_17; - tmpvar_17 = LightingBlinnPhong (o, lightDir, tmpvar_12, tmpvar_16.w); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - c = tmpvar_18; - float tmpvar_19; - tmpvar_19 = 0.0; - c.w = vec4(tmpvar_19).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.viewDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-out.txt deleted file mode 100644 index d544a118c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-out.txt +++ /dev/null @@ -1,38 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[3].xyz; - vec4 c; - vec3 tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_5; - tmpvar_5 = normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = normalize (gl_TexCoord[1].xyz); - vec4 tmpvar_7; - tmpvar_7 = texture2D (_LightTexture0, vec2(dot (tmpvar_2, tmpvar_2))); - vec4 c_i0_i1; - float tmpvar_8; - tmpvar_8 = (pow (max (0.0, dot (tmpvar_5, normalize ((tmpvar_6 + normalize (gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); - c_i0_i1.xyz = (((((tmpvar_4 * _Color).xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_5, tmpvar_6))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_8)) * (tmpvar_7.w * 2.0)); - c_i0_i1.w = (((textureCube (_Cube, tmpvar_3) * tmpvar_4.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_8) * tmpvar_7.w)); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-ir.txt deleted file mode 100644 index ffe73d3e2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-ir.txt +++ /dev/null @@ -1,189 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - float tmpvar_5; - tmpvar_5 = tex.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.worldRefl; - worldRefl = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = textureCube (_Cube, worldRefl); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - reflcol = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = (reflcol * tex.w); - reflcol = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_15; - float tmpvar_16; - tmpvar_16 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_16; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - vec3 viewN; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_BumpMap = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - float tmpvar_7; - tmpvar_7 = dot (IN.TtoV0, o.Normal); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - viewN.x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = dot (IN.TtoV1, o.Normal); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - viewN.y = vec2(tmpvar_10).y; - float tmpvar_11; - tmpvar_11 = dot (IN.TtoV2, o.Normal); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - viewN.z = vec3(tmpvar_12).z; - vec3 tmpvar_13; - tmpvar_13 = viewN; - o.Normal = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_14.xyz.xyz; - float tmpvar_15; - tmpvar_15 = o.Specular; - res.w = vec4(tmpvar_15).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.TtoV0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.TtoV1 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.TtoV2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-out.txt deleted file mode 100644 index e805953b8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-out.txt +++ /dev/null @@ -1,19 +0,0 @@ -uniform float _Shininess; -uniform sampler2D _BumpMap; -void main () -{ - vec4 res; - vec3 viewN; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_1; - tmpvar_1 = normal.xyz; - viewN.x = dot (gl_TexCoord[1].xyz, tmpvar_1); - viewN.y = dot (gl_TexCoord[2].xyz, tmpvar_1); - viewN.z = dot (gl_TexCoord[3].xyz, tmpvar_1); - res.xyz = ((viewN * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = _Shininess; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-ir.txt deleted file mode 100644 index def3bac5e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-ir.txt +++ /dev/null @@ -1,253 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; - vec3 TtoW0; - vec3 TtoW1; - vec3 TtoW2; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec4 TtoW0; - vec4 TtoW1; - vec4 TtoW2; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - float tmpvar_5; - tmpvar_5 = tex.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; - float tmpvar_11; - tmpvar_11 = dot (IN.TtoW0, o.Normal); - float tmpvar_12; - tmpvar_12 = dot (IN.TtoW1, o.Normal); - float tmpvar_13; - tmpvar_13 = dot (IN.TtoW2, o.Normal); - vec3 tmpvar_14; - tmpvar_14.x = tmpvar_11; - tmpvar_14.y = tmpvar_12; - tmpvar_14.z = tmpvar_13; - vec3 tmpvar_15; - tmpvar_15 = reflect (IN.worldRefl, tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - worldRefl = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = textureCube (_Cube, worldRefl); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - reflcol = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = (reflcol * tex.w); - reflcol = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_20; - float tmpvar_21; - tmpvar_21 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_21; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3.x = IN.TtoW0.w; - tmpvar_3.y = IN.TtoW1.w; - tmpvar_3.z = IN.TtoW2.w; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - surfIN.worldRefl = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = IN.TtoW0.xyz; - surfIN.TtoW0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.TtoW1.xyz; - surfIN.TtoW1 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.TtoW2.xyz; - surfIN.TtoW2 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_9; - float tmpvar_10; - tmpvar_10 = 0.0; - o.Specular = tmpvar_10; - float tmpvar_11; - tmpvar_11 = 0.0; - o.Alpha = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Gloss = tmpvar_12; - surf (surfIN, o); - vec4 tmpvar_13; - tmpvar_13 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - light = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = log2 (light); - vec4 tmpvar_16; - tmpvar_16 = -(tmpvar_15); - light = tmpvar_16; - vec3 tmpvar_17; - tmpvar_17 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_17.xyz.xyz; - vec4 tmpvar_18; - tmpvar_18 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col.xyz + o.Emission); - col.xyz = tmpvar_20.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.TtoW0 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.TtoW1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN.TtoW2 = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-out.txt deleted file mode 100644 index bd71e7b25..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-out.txt +++ /dev/null @@ -1,51 +0,0 @@ -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[2]; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[4]; - vec4 col; - vec4 light; - vec3 tmpvar_5; - tmpvar_5.x = tmpvar_2.w; - tmpvar_5.y = tmpvar_3.w; - tmpvar_5.z = tmpvar_4.w; - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, tmpvar_1.xy); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_7; - tmpvar_7 = normal.xyz; - vec3 tmpvar_8; - tmpvar_8.x = dot (tmpvar_2.xyz, tmpvar_7); - tmpvar_8.y = dot (tmpvar_3.xyz, tmpvar_7); - tmpvar_8.z = dot (tmpvar_4.xyz, tmpvar_7); - vec4 tmpvar_9; - tmpvar_9 = (textureCube (_Cube, reflect (tmpvar_5, tmpvar_8)) * tmpvar_6.w); - vec4 tmpvar_10; - tmpvar_10 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_10; - light.xyz = (tmpvar_10.xyz + unity_Ambient.xyz); - vec4 c_i0; - float tmpvar_11; - tmpvar_11 = (tmpvar_10.w * tmpvar_6.w); - c_i0.xyz = (((tmpvar_6 * _Color).xyz * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_11)); - c_i0.w = ((tmpvar_9.w * _ReflectColor.w) + (tmpvar_11 * _SpecColor.w)); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_9.xyz * _ReflectColor.xyz)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-ir.txt deleted file mode 100644 index 7e82eeb3f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-ir.txt +++ /dev/null @@ -1,139 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec2 uv; - vec2 uv2; - vec3 I; - vec3 TtoW0; - vec3 TtoW1; - vec3 TtoW2; -}; -varying vec4 xlv_FOG; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform samplerCube _Cube; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec4 frag ( - in v2f i -) -{ - vec4 reflcolor; - vec4 c; - vec3 r; - vec3 wn; - vec4 texcol; - vec4 normal; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_BumpMap, i.uv2); - vec4 tmpvar_2; - tmpvar_2 = UnpackNormal (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, i.uv); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - texcol = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (i.TtoW0, normal.xyz); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - wn.x = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (i.TtoW1, normal.xyz); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - wn.y = vec2(tmpvar_9).y; - float tmpvar_10; - tmpvar_10 = dot (i.TtoW2, normal.xyz); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - wn.z = vec3(tmpvar_11).z; - vec3 tmpvar_12; - tmpvar_12 = reflect (i.I, wn); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - r = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = (gl_LightModel.ambient * texcol); - c = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (c.xyz * 2.0); - c.xyz = tmpvar_15.xyz.xyz; - vec4 tmpvar_16; - tmpvar_16 = textureCube (_Cube, r); - vec4 tmpvar_17; - tmpvar_17 = ((tmpvar_16 * _ReflectColor) * texcol.w); - reflcolor = tmpvar_17; - return (c + reflcolor); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_i.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.uv = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_i.uv2 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_i.I = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_i.TtoW0 = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_i.TtoW1 = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = gl_TexCoord[5].xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlt_i.TtoW2 = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = frag (xlt_i); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xl_retval = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_FragData[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-out.txt deleted file mode 100644 index 45d6ab104..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-out.txt +++ /dev/null @@ -1,23 +0,0 @@ -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform samplerCube _Cube; -uniform sampler2D _BumpMap; -void main () -{ - vec4 c; - vec3 wn; - vec4 normal_i0; - normal_i0.xy = ((texture2D (_BumpMap, gl_TexCoord[1].xy).wy * 2.0) - 1.0); - normal_i0.z = sqrt (((1.0 - (normal_i0.x * normal_i0.x)) - (normal_i0.y * normal_i0.y))); - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - wn.x = dot (gl_TexCoord[3].xyz, normal_i0.xyz); - wn.y = dot (gl_TexCoord[4].xyz, normal_i0.xyz); - wn.z = dot (gl_TexCoord[5].xyz, normal_i0.xyz); - vec4 tmpvar_2; - tmpvar_2 = (gl_LightModel.ambient * tmpvar_1); - c = tmpvar_2; - c.xyz = (tmpvar_2.xyz * 2.0); - gl_FragData[0] = (c + ((textureCube (_Cube, reflect (gl_TexCoord[2].xyz, wn)) * _ReflectColor) * tmpvar_1.w)); -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-ir.txt deleted file mode 100644 index ee8c30709..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-ir.txt +++ /dev/null @@ -1,206 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = textureCube (_Cube, IN.worldRefl); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - reflcol = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (reflcol * tex.w); - reflcol = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_9; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = UnitySpotCookie (IN._LightCoord); - float tmpvar_12; - tmpvar_12 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_13; - tmpvar_13 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_11) * tmpvar_12)); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - c = tmpvar_14; - float tmpvar_15; - tmpvar_15 = 0.0; - c.w = vec4(tmpvar_15).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-out.txt deleted file mode 100644 index aa233225a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-out.txt +++ /dev/null @@ -1,25 +0,0 @@ -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[3]; - vec4 c; - vec3 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_1.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = (((tmpvar_3 * _Color).xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = ((textureCube (_Cube, tmpvar_2) * tmpvar_3.w).w * _ReflectColor.w); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-ir.txt deleted file mode 100644 index 33fca39f6..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-ir.txt +++ /dev/null @@ -1,167 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldRefl; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = textureCube (_Cube, IN.worldRefl); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - reflcol = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (reflcol * tex.w); - reflcol = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_9; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.worldRefl; - surfIN.worldRefl = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (col.xyz + o.Emission); - col.xyz = tmpvar_15.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.worldRefl = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-out.txt deleted file mode 100644 index ce57a40b7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-out.txt +++ /dev/null @@ -1,26 +0,0 @@ -uniform vec4 unity_Ambient; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -void main () -{ - vec4 col; - vec4 light; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec4 tmpvar_2; - tmpvar_2 = (textureCube (_Cube, gl_TexCoord[1].xyz) * tmpvar_1.w); - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = ((tmpvar_1 * _Color).xyz * light.xyz); - c_i0.w = (tmpvar_2.w * _ReflectColor.w); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_2.xyz * _ReflectColor.xyz)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-ir.txt deleted file mode 100644 index 6257aca25..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-ir.txt +++ /dev/null @@ -1,282 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - tex = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (tex * _Color); - c = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = c.xyz; - o.Albedo = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = IN.worldRefl; - worldRefl = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = textureCube (_Cube, worldRefl); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - reflcol = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = (reflcol * tex.w); - reflcol = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_19; - float tmpvar_20; - tmpvar_20 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_20; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = UnitySpotCookie (IN._LightCoord); - float tmpvar_13; - tmpvar_13 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_12) * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = 0.0; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-out.txt deleted file mode 100644 index 2f5816a74..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-out.txt +++ /dev/null @@ -1,40 +0,0 @@ -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[3]; - vec4 c; - vec3 tmpvar_3; - vec2 tmpvar_4; - vec3 v; - vec3 tmpvar_5; - tmpvar_5 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_5; - v.z = (tmpvar_5.z + 0.42); - tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v.z)); - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = (((tmpvar_6 * _Color).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = ((textureCube (_Cube, tmpvar_3) * tmpvar_6.w).w * _ReflectColor.w); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-ir.txt deleted file mode 100644 index 216d6865f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-ir.txt +++ /dev/null @@ -1,292 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; - vec3 viewDir; - vec3 TtoW0; - vec3 TtoW1; - vec3 TtoW2; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec4 TtoW0; - vec4 TtoW1; - vec4 TtoW2; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 c; - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - tex = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (tex * _Color); - c = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = c.xyz; - o.Albedo = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; - float tmpvar_15; - tmpvar_15 = dot (IN.TtoW0, o.Normal); - float tmpvar_16; - tmpvar_16 = dot (IN.TtoW1, o.Normal); - float tmpvar_17; - tmpvar_17 = dot (IN.TtoW2, o.Normal); - vec3 tmpvar_18; - tmpvar_18.x = tmpvar_15; - tmpvar_18.y = tmpvar_16; - tmpvar_18.z = tmpvar_17; - vec3 tmpvar_19; - tmpvar_19 = reflect (IN.worldRefl, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - worldRefl = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = textureCube (_Cube, worldRefl); - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - reflcol = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = (reflcol * tex.w); - reflcol = tmpvar_23; - vec3 tmpvar_24; - tmpvar_24 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_24; - float tmpvar_25; - tmpvar_25 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_25; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3.x = IN.TtoW0.w; - tmpvar_3.y = IN.TtoW1.w; - tmpvar_3.z = IN.TtoW2.w; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - surfIN.worldRefl = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = IN.TtoW0.xyz; - surfIN.TtoW0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.TtoW1.xyz; - surfIN.TtoW1 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.TtoW2.xyz; - surfIN.TtoW2 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.viewDir; - surfIN.viewDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_10; - float tmpvar_11; - tmpvar_11 = 0.0; - o.Specular = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - o.Alpha = tmpvar_12; - float tmpvar_13; - tmpvar_13 = 0.0; - o.Gloss = tmpvar_13; - surf (surfIN, o); - vec4 tmpvar_14; - tmpvar_14 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - light = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = log2 (light); - vec4 tmpvar_17; - tmpvar_17 = -(tmpvar_16); - light = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_18.xyz.xyz; - vec4 tmpvar_19; - tmpvar_19 = LightingLambert_PrePass (o, light); - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - col = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (col.xyz + o.Emission); - col.xyz = tmpvar_21.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.TtoW0 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN.TtoW1 = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = gl_TexCoord[5].xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlt_IN.TtoW2 = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = frag_surf (xlt_IN); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xl_retval = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_FragData[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-out.txt deleted file mode 100644 index ec8ecba95..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-out.txt +++ /dev/null @@ -1,57 +0,0 @@ -uniform vec4 unity_Ambient; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[3]; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[4]; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[5]; - vec4 col; - vec4 light; - vec3 tmpvar_5; - tmpvar_5.x = tmpvar_2.w; - tmpvar_5.y = tmpvar_3.w; - tmpvar_5.z = tmpvar_4.w; - vec2 tmpvar_6; - vec3 v; - vec3 tmpvar_7; - tmpvar_7 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_7; - v.z = (tmpvar_7.z + 0.42); - tmpvar_6 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_7.xy / v.z)); - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_6)); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_6)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_9; - tmpvar_9 = normal.xyz; - vec3 tmpvar_10; - tmpvar_10.x = dot (tmpvar_2.xyz, tmpvar_9); - tmpvar_10.y = dot (tmpvar_3.xyz, tmpvar_9); - tmpvar_10.z = dot (tmpvar_4.xyz, tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = (textureCube (_Cube, reflect (tmpvar_5, tmpvar_10)) * tmpvar_8.w); - vec4 tmpvar_12; - tmpvar_12 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_12; - light.xyz = (tmpvar_12.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = ((tmpvar_8 * _Color).xyz * light.xyz); - c_i0.w = (tmpvar_11.w * _ReflectColor.w); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_11.xyz * _ReflectColor.xyz)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-ir.txt deleted file mode 100644 index d3cb3f1f1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-ir.txt +++ /dev/null @@ -1,290 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - tex = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = tex.w; - o.Gloss = tmpvar_10; - float tmpvar_11; - tmpvar_11 = _Shininess; - o.Specular = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_13; - tmpvar_13 = UnpackNormal (tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13.xyz; - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - o.Normal = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = IN.worldRefl; - worldRefl = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = textureCube (_Cube, worldRefl); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - reflcol = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = (reflcol * tex.w); - reflcol = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_20; - float tmpvar_21; - tmpvar_21 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_21; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = IN.viewDir.xyz; - vec3 tmpvar_13; - tmpvar_13 = normalize (tmpvar_12); - float tmpvar_14; - tmpvar_14 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_15; - tmpvar_15 = vec2(tmpvar_14); - vec2 tmpvar_16; - tmpvar_16 = tmpvar_15.xy; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_LightTexture0, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = LightingBlinnPhong (o, lightDir, tmpvar_13, tmpvar_17.w); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - c = tmpvar_19; - float tmpvar_20; - tmpvar_20 = 0.0; - c.w = vec4(tmpvar_20).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-out.txt deleted file mode 100644 index ff383f115..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-out.txt +++ /dev/null @@ -1,49 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec3 tmpvar_4; - vec2 tmpvar_5; - vec3 v; - vec3 tmpvar_6; - tmpvar_6 = normalize (tmpvar_2); - v = tmpvar_6; - v.z = (tmpvar_6.z + 0.42); - tmpvar_5 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_6.xy / v.z)); - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_5)); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_5)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_8; - tmpvar_8 = normal.xyz; - vec3 tmpvar_9; - tmpvar_9 = normalize (gl_TexCoord[2].xyz); - vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, vec2(dot (tmpvar_3, tmpvar_3))); - vec4 c_i0; - float tmpvar_11; - tmpvar_11 = (pow (max (0.0, dot (tmpvar_8, normalize ((tmpvar_9 + normalize (tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_7.w); - c_i0.xyz = (((((tmpvar_7.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_8, tmpvar_9))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_11)) * (tmpvar_10.w * 2.0)); - c_i0.w = (((textureCube (_Cube, tmpvar_4) * tmpvar_7.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_11) * tmpvar_10.w)); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-ir.txt deleted file mode 100644 index 02f16f204..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-ir.txt +++ /dev/null @@ -1,279 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec3 worldRefl; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec3 worldRefl; - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - tex = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_9; - float tmpvar_10; - tmpvar_10 = tex.w; - o.Gloss = tmpvar_10; - float tmpvar_11; - tmpvar_11 = _Shininess; - o.Specular = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_13; - tmpvar_13 = UnpackNormal (tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13.xyz; - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - o.Normal = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = IN.worldRefl; - worldRefl = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = textureCube (_Cube, worldRefl); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - reflcol = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = (reflcol * tex.w); - reflcol = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_20; - float tmpvar_21; - tmpvar_21 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_21; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = IN.viewDir.xyz; - vec3 tmpvar_11; - tmpvar_11 = normalize (tmpvar_10); - vec4 tmpvar_12; - tmpvar_12 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_13; - tmpvar_13 = LightingBlinnPhong (o, lightDir, tmpvar_11, (tmpvar_12.w * 1.0)); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - c = tmpvar_14; - float tmpvar_15; - tmpvar_15 = 0.0; - c.w = vec4(tmpvar_15).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-out.txt deleted file mode 100644 index 69b0f78a5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-out.txt +++ /dev/null @@ -1,47 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[2].xyz; - vec4 c; - vec3 tmpvar_4; - vec2 tmpvar_5; - vec3 v; - vec3 tmpvar_6; - tmpvar_6 = normalize (tmpvar_2); - v = tmpvar_6; - v.z = (tmpvar_6.z + 0.42); - tmpvar_5 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_6.xy / v.z)); - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_5)); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_5)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_8; - tmpvar_8 = normal.xyz; - float atten; - atten = texture2D (_LightTexture0, gl_TexCoord[3].xy).w; - vec4 c_i0; - float tmpvar_9; - tmpvar_9 = (pow (max (0.0, dot (tmpvar_8, normalize ((tmpvar_3 + normalize (tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_7.w); - c_i0.xyz = (((((tmpvar_7.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_8, tmpvar_3))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * (atten * 2.0)); - c_i0.w = (((textureCube (_Cube, tmpvar_4) * tmpvar_7.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_9) * atten)); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-ir.txt deleted file mode 100644 index 761b14dc5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-ir.txt +++ /dev/null @@ -1,245 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - float tmpvar_5; - tmpvar_5 = tex.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = textureCube (_Cube, IN.worldRefl); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - reflcol = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (reflcol * tex.w); - reflcol = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_10; - float tmpvar_11; - tmpvar_11 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_11; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = UnitySpotCookie (IN._LightCoord); - float tmpvar_14; - tmpvar_14 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_15; - tmpvar_15 = LightingBlinnPhong (o, lightDir, tmpvar_12, ((float((IN._LightCoord.z > 0.0)) * tmpvar_13) * tmpvar_14)); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-out.txt deleted file mode 100644 index 3d27c29a4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-out.txt +++ /dev/null @@ -1,35 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[4]; - vec4 c; - vec3 tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 tmpvar_5; - tmpvar_5 = normalize (gl_TexCoord[2].xyz); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - float atten; - atten = ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w); - vec4 c_i0_i1; - float tmpvar_6; - tmpvar_6 = (pow (max (0.0, dot (tmpvar_1, normalize ((tmpvar_5 + normalize (gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); - c_i0_i1.xyz = (((((tmpvar_4 * _Color).xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_5))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_6)) * (atten * 2.0)); - c_i0_i1.w = (((textureCube (_Cube, tmpvar_3) * tmpvar_4.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_6) * atten)); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-ir.txt deleted file mode 100644 index b5d6b75b9..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-ir.txt +++ /dev/null @@ -1,121 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform samplerCube _Cube; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - float tmpvar_5; - tmpvar_5 = tex.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = textureCube (_Cube, IN.worldRefl); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - reflcol = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (reflcol * tex.w); - reflcol = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_10; - float tmpvar_11; - tmpvar_11 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_11; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-out.txt deleted file mode 100644 index 73b819c9d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-out.txt +++ /dev/null @@ -1,9 +0,0 @@ -uniform float _Shininess; -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = _Shininess; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-ir.txt deleted file mode 100644 index 105a2155a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-ir.txt +++ /dev/null @@ -1,179 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldRefl; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 reflcol; - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - float tmpvar_5; - tmpvar_5 = tex.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = textureCube (_Cube, IN.worldRefl); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - reflcol = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (reflcol * tex.w); - reflcol = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (reflcol.xyz * _ReflectColor.xyz); - o.Emission = tmpvar_10; - float tmpvar_11; - tmpvar_11 = (reflcol.w * _ReflectColor.w); - o.Alpha = tmpvar_11; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.worldRefl; - surfIN.worldRefl = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (col.xyz + o.Emission); - col.xyz = tmpvar_15.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.worldRefl = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-out.txt deleted file mode 100644 index e0adfa455..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-out.txt +++ /dev/null @@ -1,29 +0,0 @@ -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform vec4 _ReflectColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform samplerCube _Cube; -uniform vec4 _Color; -void main () -{ - vec4 col; - vec4 light; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec4 tmpvar_2; - tmpvar_2 = (textureCube (_Cube, gl_TexCoord[1].xyz) * tmpvar_1.w); - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); - vec4 c_i0; - float tmpvar_4; - tmpvar_4 = (tmpvar_3.w * tmpvar_1.w); - c_i0.xyz = (((tmpvar_1 * _Color).xyz * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_4)); - c_i0.w = ((tmpvar_2.w * _ReflectColor.w) + (tmpvar_4 * _SpecColor.w)); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_2.xyz * _ReflectColor.xyz)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-ir.txt deleted file mode 100644 index c959c12f8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-ir.txt +++ /dev/null @@ -1,60 +0,0 @@ -struct v2f { - vec4 vertex; - vec2 texcoord; -}; -uniform sampler2D _UpTex; -uniform vec4 _Tint; -vec4 skybox_frag ( - in v2f i, - in sampler2D smp -) -{ - vec4 col; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (smp, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = ((tex.xyz + _Tint.xyz) - 0.5); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = (tex.w * _Tint.w); - col.w = vec4(tmpvar_4).w; - return col; -} - -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = skybox_frag (i, _UpTex); - return tmpvar_1; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.texcoord = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-out.txt deleted file mode 100644 index 306696331..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-out.txt +++ /dev/null @@ -1,12 +0,0 @@ -uniform sampler2D _UpTex; -uniform vec4 _Tint; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_UpTex, gl_TexCoord[0].xy); - col.xyz = ((tmpvar_1.xyz + _Tint.xyz) - 0.5); - col.w = (tmpvar_1.w * _Tint.w); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-ir.txt deleted file mode 100644 index cb7778811..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-ir.txt +++ /dev/null @@ -1,50 +0,0 @@ -struct v2f { - vec4 vertex; - vec3 texcoord; -}; -uniform vec4 _Tint; -uniform samplerCube _Tex; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = textureCube (_Tex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = ((tex.xyz + _Tint.xyz) - 0.5); - col.xyz = tmpvar_3.xyz.xyz; - float tmpvar_4; - tmpvar_4 = (tex.w * _Tint.w); - col.w = vec4(tmpvar_4).w; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.texcoord = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-out.txt deleted file mode 100644 index 78f6e682e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-out.txt +++ /dev/null @@ -1,12 +0,0 @@ -uniform vec4 _Tint; -uniform samplerCube _Tex; -void main () -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = textureCube (_Tex, gl_TexCoord[0].xyz); - col.xyz = ((tmpvar_1.xyz + _Tint.xyz) - 0.5); - col.w = (tmpvar_1.w * _Tint.w); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-ir.txt deleted file mode 100644 index 560b8d306..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,219 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = c.w; - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = UnitySpotCookie (IN._LightCoord); - float tmpvar_12; - tmpvar_12 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_13; - tmpvar_13 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_11) * tmpvar_12)); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - c = tmpvar_14; - float tmpvar_15; - tmpvar_15 = 0.0; - c.w = vec4(tmpvar_15).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-out.txt deleted file mode 100644 index 13cef4135..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[2]; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, normalize (gl_TexCoord[1].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = tmpvar_3.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-ir.txt deleted file mode 100644 index e8189150d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,170 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -uniform sampler2D _MainTex; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = c.w; - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - vec3 viewN; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_BumpMap = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - float tmpvar_7; - tmpvar_7 = dot (IN.TtoV0, o.Normal); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - viewN.x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = dot (IN.TtoV1, o.Normal); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - viewN.y = vec2(tmpvar_10).y; - float tmpvar_11; - tmpvar_11 = dot (IN.TtoV2, o.Normal); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - viewN.z = vec3(tmpvar_12).z; - vec3 tmpvar_13; - tmpvar_13 = viewN; - o.Normal = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_14.xyz.xyz; - float tmpvar_15; - tmpvar_15 = o.Specular; - res.w = vec4(tmpvar_15).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.TtoV0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.TtoV1 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.TtoV2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-out.txt deleted file mode 100644 index 3c1dec354..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _BumpMap; -void main () -{ - vec4 res; - vec3 viewN; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_1; - tmpvar_1 = normal.xyz; - viewN.x = dot (gl_TexCoord[1].xyz, tmpvar_1); - viewN.y = dot (gl_TexCoord[2].xyz, tmpvar_1); - viewN.z = dot (gl_TexCoord[3].xyz, tmpvar_1); - res.xyz = ((viewN * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-ir.txt deleted file mode 100644 index 8b7646f60..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-ir.txt +++ /dev/null @@ -1,180 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = c.w; - o.Alpha = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Illum = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (col.xyz + o.Emission); - col.xyz = tmpvar_15.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-out.txt deleted file mode 100644 index eb7ec9c2f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-out.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 col; - vec4 light; - vec2 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_3.xyz * light.xyz); - c_i0.w = tmpvar_3.w; - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_3.xyz * texture2D (_Illum, tmpvar_1.zw).w)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-ir.txt deleted file mode 100644 index 7f2879dde..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-ir.txt +++ /dev/null @@ -1,177 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = tex.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _Shininess; - o.Specular = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_11; - tmpvar_11 = UnpackNormal (tmpvar_10); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11.xyz; - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - o.Normal = tmpvar_13; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - vec3 viewN; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_BumpMap = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - float tmpvar_7; - tmpvar_7 = dot (IN.TtoV0, o.Normal); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - viewN.x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = dot (IN.TtoV1, o.Normal); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - viewN.y = vec2(tmpvar_10).y; - float tmpvar_11; - tmpvar_11 = dot (IN.TtoV2, o.Normal); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - viewN.z = vec3(tmpvar_12).z; - vec3 tmpvar_13; - tmpvar_13 = viewN; - o.Normal = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_14.xyz.xyz; - float tmpvar_15; - tmpvar_15 = o.Specular; - res.w = vec4(tmpvar_15).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.TtoV0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.TtoV1 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.TtoV2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-out.txt deleted file mode 100644 index e805953b8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-out.txt +++ /dev/null @@ -1,19 +0,0 @@ -uniform float _Shininess; -uniform sampler2D _BumpMap; -void main () -{ - vec4 res; - vec3 viewN; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_1; - tmpvar_1 = normal.xyz; - viewN.x = dot (gl_TexCoord[1].xyz, tmpvar_1); - viewN.y = dot (gl_TexCoord[2].xyz, tmpvar_1); - viewN.z = dot (gl_TexCoord[3].xyz, tmpvar_1); - res.xyz = ((viewN * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = _Shininess; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-ir.txt deleted file mode 100644 index 5328ef1ae..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-ir.txt +++ /dev/null @@ -1,192 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = tex.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _Shininess; - o.Specular = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_11; - tmpvar_11 = UnpackNormal (tmpvar_10); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11.xyz; - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - o.Normal = tmpvar_13; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Illum = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (col.xyz + o.Emission); - col.xyz = tmpvar_15.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-out.txt deleted file mode 100644 index 47fa2b406..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-out.txt +++ /dev/null @@ -1,35 +0,0 @@ -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 col; - vec4 light; - vec2 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); - vec4 c_i0; - float tmpvar_6; - tmpvar_6 = (tmpvar_5.w * tmpvar_3.w); - c_i0.xyz = ((tmpvar_4.xyz * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_6)); - c_i0.w = (tmpvar_4.w + (tmpvar_6 * _SpecColor.w)); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_4.xyz * texture2D (_Illum, tmpvar_1.zw).w)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-ir.txt deleted file mode 100644 index f5a354570..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-ir.txt +++ /dev/null @@ -1,166 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = c.w; - o.Alpha = tmpvar_7; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-out.txt deleted file mode 100644 index cf0b90ffa..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-out.txt +++ /dev/null @@ -1,17 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_1.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0_i1.w = tmpvar_1.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-ir.txt deleted file mode 100644 index 0d8b382fd..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-ir.txt +++ /dev/null @@ -1,298 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = c.w; - o.Alpha = tmpvar_7; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Illum = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_13; - tmpvar_13 = DecodeLightmap (tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - lmFull = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_16; - tmpvar_16 = DecodeLightmap (tmpvar_15); - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - lmIndirect = tmpvar_17; - float tmpvar_18; - tmpvar_18 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_19; - tmpvar_19 = vec3(tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = mix (lmIndirect, lmFull, tmpvar_19); - vec3 tmpvar_21; - tmpvar_21 = tmpvar_20; - lm = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (light.xyz + lm); - light.xyz = tmpvar_22.xyz.xyz; - vec4 tmpvar_23; - tmpvar_23 = LightingLambert_PrePass (o, light); - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - col = tmpvar_24; - vec3 tmpvar_25; - tmpvar_25 = (col.xyz + o.Emission); - col.xyz = tmpvar_25.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-out.txt deleted file mode 100644 index 2a6aa153e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 col; - vec4 light; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); - vec4 c_i0; - c_i0.xyz = (tmpvar_3.xyz * light.xyz); - c_i0.w = tmpvar_3.w; - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_3.xyz * texture2D (_Illum, tmpvar_1.zw).w)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-ir.txt deleted file mode 100644 index 10c95e6ce..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-ir.txt +++ /dev/null @@ -1,269 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv_Illum; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = (IN.uv_Illum + offset); - IN.uv_Illum = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_8 * _Color); - c = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = c.xyz; - o.Albedo = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_12; - tmpvar_12 = (c.xyz * tmpvar_11.w); - o.Emission = tmpvar_12; - float tmpvar_13; - tmpvar_13 = c.w; - o.Alpha = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_15; - tmpvar_15 = UnpackNormal (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15.xyz; - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - o.Normal = tmpvar_17; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = UnitySpotCookie (IN._LightCoord); - float tmpvar_13; - tmpvar_13 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_12) * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = 0.0; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-out.txt deleted file mode 100644 index b81bd1ac8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-out.txt +++ /dev/null @@ -1,37 +0,0 @@ -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[3]; - vec4 c; - vec2 tmpvar_3; - vec3 v; - vec3 tmpvar_4; - tmpvar_4 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_4; - v.z = (tmpvar_4.z + 0.42); - tmpvar_3 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_4.xy / v.z)); - vec4 tmpvar_5; - tmpvar_5 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_3)) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_3)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_5.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = tmpvar_5.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-ir.txt deleted file mode 100644 index 86abcee64..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-ir.txt +++ /dev/null @@ -1,237 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv_Illum; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = (IN.uv_Illum + offset); - IN.uv_Illum = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_8 * _Color); - c = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = c.xyz; - o.Albedo = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_12; - tmpvar_12 = (c.xyz * tmpvar_11.w); - o.Emission = tmpvar_12; - float tmpvar_13; - tmpvar_13 = c.w; - o.Alpha = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_15; - tmpvar_15 = UnpackNormal (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15.xyz; - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - o.Normal = tmpvar_17; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_11; - tmpvar_11 = LightingLambert (o, lightDir, (tmpvar_10.w * 1.0)); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - float tmpvar_13; - tmpvar_13 = 0.0; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-out.txt deleted file mode 100644 index 6dca21aef..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec2 tmpvar_2; - vec3 v; - vec3 tmpvar_3; - tmpvar_3 = normalize (gl_TexCoord[1].xyz); - v = tmpvar_3; - v.z = (tmpvar_3.z + 0.42); - tmpvar_2 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_3.xy / v.z)); - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_2)) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_2)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-ir.txt deleted file mode 100644 index d10ce26fa..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-ir.txt +++ /dev/null @@ -1,239 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv_Illum; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec2 hip_pack1; - vec3 viewDir; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = (IN.uv_Illum + offset); - IN.uv_Illum = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_8 * _Color); - c = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = c.xyz; - o.Albedo = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_12; - tmpvar_12 = (c.xyz * tmpvar_11.w); - o.Emission = tmpvar_12; - float tmpvar_13; - tmpvar_13 = c.w; - o.Alpha = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_15; - tmpvar_15 = UnpackNormal (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15.xyz; - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - o.Normal = tmpvar_17; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = IN.hip_pack1.xy; - surfIN.uv_Illum = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = IN.viewDir; - surfIN.viewDir = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Specular = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Alpha = tmpvar_8; - float tmpvar_9; - tmpvar_9 = 0.0; - o.Gloss = tmpvar_9; - surf (surfIN, o); - vec4 tmpvar_10; - tmpvar_10 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - light = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = log2 (light); - vec4 tmpvar_13; - tmpvar_13 = -(tmpvar_12); - light = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_14.xyz.xyz; - vec4 tmpvar_15; - tmpvar_15 = LightingLambert_PrePass (o, light); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - col = tmpvar_16; - vec3 tmpvar_17; - tmpvar_17 = (col.xyz + o.Emission); - col.xyz = tmpvar_17.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_pack1 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.viewDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_screen = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-out.txt deleted file mode 100644 index a2307098d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-out.txt +++ /dev/null @@ -1,38 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 col; - vec4 light; - vec2 tmpvar_2; - vec3 v; - vec3 tmpvar_3; - tmpvar_3 = normalize (gl_TexCoord[2].xyz); - v = tmpvar_3; - v.z = (tmpvar_3.z + 0.42); - tmpvar_2 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_3.xy / v.z)); - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_2)) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_2)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[3]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_4.xyz * light.xyz); - c_i0.w = tmpvar_4.w; - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_4.xyz * texture2D (_Illum, (gl_TexCoord[1].xy + tmpvar_2)).w)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-ir.txt deleted file mode 100644 index 963295d53..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-ir.txt +++ /dev/null @@ -1,285 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv_Illum; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = (IN.uv_Illum + offset); - IN.uv_Illum = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - tex = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (tex * _Color); - c = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = c.xyz; - o.Albedo = tmpvar_11; - float tmpvar_12; - tmpvar_12 = tex.w; - o.Gloss = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_14; - tmpvar_14 = (c.xyz * tmpvar_13.w); - o.Emission = tmpvar_14; - float tmpvar_15; - tmpvar_15 = _Shininess; - o.Specular = tmpvar_15; - float tmpvar_16; - tmpvar_16 = c.w; - o.Alpha = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_18; - tmpvar_18 = UnpackNormal (tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = tmpvar_18.xyz; - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - o.Normal = tmpvar_20; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = IN.viewDir.xyz; - vec3 tmpvar_13; - tmpvar_13 = normalize (tmpvar_12); - float tmpvar_14; - tmpvar_14 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_15; - tmpvar_15 = vec2(tmpvar_14); - vec2 tmpvar_16; - tmpvar_16 = tmpvar_15.xy; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_LightTexture0, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = LightingBlinnPhong (o, lightDir, tmpvar_13, tmpvar_17.w); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - c = tmpvar_19; - float tmpvar_20; - tmpvar_20 = 0.0; - c.w = vec4(tmpvar_20).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-out.txt deleted file mode 100644 index 89e535174..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-out.txt +++ /dev/null @@ -1,48 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec2 tmpvar_4; - vec3 v; - vec3 tmpvar_5; - tmpvar_5 = normalize (tmpvar_2); - v = tmpvar_5; - v.z = (tmpvar_5.z + 0.42); - tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v.z)); - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)); - vec4 tmpvar_7; - tmpvar_7 = (tmpvar_6 * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_8; - tmpvar_8 = normal.xyz; - vec3 tmpvar_9; - tmpvar_9 = normalize (gl_TexCoord[2].xyz); - vec4 tmpvar_10; - tmpvar_10 = texture2D (_LightTexture0, vec2(dot (tmpvar_3, tmpvar_3))); - vec4 c_i0_i1; - float tmpvar_11; - tmpvar_11 = (pow (max (0.0, dot (tmpvar_8, normalize ((tmpvar_9 + normalize (tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_6.w); - c_i0_i1.xyz = ((((tmpvar_7.xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_8, tmpvar_9))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_11)) * (tmpvar_10.w * 2.0)); - c_i0_i1.w = (tmpvar_7.w + (((_LightColor0.w * _SpecColor.w) * tmpvar_11) * tmpvar_10.w)); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-ir.txt deleted file mode 100644 index f97f52647..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-ir.txt +++ /dev/null @@ -1,288 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; - vec2 uv_Illum; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -vec2 ParallaxOffset ( - in float h, - in float height, - in vec3 viewDir -) -{ - vec3 v; - float tmpvar_1; - tmpvar_1 = ((h * height) - (height / 2.0)); - h = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = normalize (viewDir); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - v = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.z + 0.42); - v.z = vec3(tmpvar_4).z; - return (h * (v.xy / v.z)); -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec2 offset; - float h; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_ParallaxMap, IN.uv_BumpMap); - float tmpvar_2; - tmpvar_2 = tmpvar_1.w; - h = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ParallaxOffset (h, _Parallax, IN.viewDir); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - offset = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = (IN.uv_MainTex + offset); - IN.uv_MainTex = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (IN.uv_BumpMap + offset); - IN.uv_BumpMap = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = (IN.uv_Illum + offset); - IN.uv_Illum = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - tex = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (tex * _Color); - c = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = c.xyz; - o.Albedo = tmpvar_11; - float tmpvar_12; - tmpvar_12 = tex.w; - o.Gloss = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_14; - tmpvar_14 = (c.xyz * tmpvar_13.w); - o.Emission = tmpvar_14; - float tmpvar_15; - tmpvar_15 = _Shininess; - o.Specular = tmpvar_15; - float tmpvar_16; - tmpvar_16 = c.w; - o.Alpha = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_18; - tmpvar_18 = UnpackNormal (tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = tmpvar_18.xyz; - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - o.Normal = tmpvar_20; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = IN.viewDir; - surfIN.viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Specular = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Alpha = tmpvar_7; - float tmpvar_8; - tmpvar_8 = 0.0; - o.Gloss = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = IN.viewDir.xyz; - vec3 tmpvar_13; - tmpvar_13 = normalize (tmpvar_12); - float tmpvar_14; - tmpvar_14 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_15; - tmpvar_15 = vec2(tmpvar_14); - vec2 tmpvar_16; - tmpvar_16 = tmpvar_15.xy; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_LightTextureB0, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_19; - tmpvar_19 = LightingBlinnPhong (o, lightDir, tmpvar_13, (tmpvar_17.w * tmpvar_18.w)); - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - c = tmpvar_20; - float tmpvar_21; - tmpvar_21 = 0.0; - c.w = vec4(tmpvar_21).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-out.txt deleted file mode 100644 index 0ca39d700..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-out.txt +++ /dev/null @@ -1,49 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _ParallaxMap; -uniform float _Parallax; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec2 tmpvar_4; - vec3 v; - vec3 tmpvar_5; - tmpvar_5 = normalize (tmpvar_2); - v = tmpvar_5; - v.z = (tmpvar_5.z + 0.42); - tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v.z)); - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)); - vec4 tmpvar_7; - tmpvar_7 = (tmpvar_6 * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_8; - tmpvar_8 = normal.xyz; - vec3 tmpvar_9; - tmpvar_9 = normalize (gl_TexCoord[2].xyz); - float atten; - atten = (texture2D (_LightTextureB0, vec2(dot (tmpvar_3, tmpvar_3))).w * textureCube (_LightTexture0, tmpvar_3).w); - vec4 c_i0_i1; - float tmpvar_10; - tmpvar_10 = (pow (max (0.0, dot (tmpvar_8, normalize ((tmpvar_9 + normalize (tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_6.w); - c_i0_i1.xyz = ((((tmpvar_7.xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_8, tmpvar_9))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_10)) * (atten * 2.0)); - c_i0_i1.w = (tmpvar_7.w + (((_LightColor0.w * _SpecColor.w) * tmpvar_10) * atten)); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-ir.txt deleted file mode 100644 index c88ad4485..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-ir.txt +++ /dev/null @@ -1,237 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Illum; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = tex.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _Shininess; - o.Specular = tmpvar_9; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = UnitySpotCookie (IN._LightCoord); - float tmpvar_14; - tmpvar_14 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_15; - tmpvar_15 = LightingBlinnPhong (o, lightDir, tmpvar_12, ((float((IN._LightCoord.z > 0.0)) * tmpvar_13) * tmpvar_14)); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-out.txt deleted file mode 100644 index 6fe99f41f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-out.txt +++ /dev/null @@ -1,34 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[4]; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * _Color); - vec3 tmpvar_5; - tmpvar_5 = normalize (gl_TexCoord[2].xyz); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - float atten; - atten = ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w); - vec4 c_i0_i1; - float tmpvar_6; - tmpvar_6 = (pow (max (0.0, dot (tmpvar_1, normalize ((tmpvar_5 + normalize (gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0_i1.xyz = ((((tmpvar_4.xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_5))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_6)) * (atten * 2.0)); - c_i0_i1.w = (tmpvar_4.w + (((_LightColor0.w * _SpecColor.w) * tmpvar_6) * atten)); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-ir.txt deleted file mode 100644 index 3134c41d6..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-ir.txt +++ /dev/null @@ -1,113 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _Illum; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = tex.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _Shininess; - o.Specular = tmpvar_9; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-out.txt deleted file mode 100644 index 73b819c9d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-out.txt +++ /dev/null @@ -1,9 +0,0 @@ -uniform float _Shininess; -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = _Shininess; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-ir.txt deleted file mode 100644 index 62c44bcab..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-ir.txt +++ /dev/null @@ -1,310 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_Illum; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (tex * _Color); - c = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = c.xyz; - o.Albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_Illum, IN.uv_Illum); - vec3 tmpvar_6; - tmpvar_6 = (c.xyz * tmpvar_5.w); - o.Emission = tmpvar_6; - float tmpvar_7; - tmpvar_7 = tex.w; - o.Gloss = tmpvar_7; - float tmpvar_8; - tmpvar_8 = c.w; - o.Alpha = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _Shininess; - o.Specular = tmpvar_9; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_Illum = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_13; - tmpvar_13 = DecodeLightmap (tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - lmFull = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_16; - tmpvar_16 = DecodeLightmap (tmpvar_15); - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - lmIndirect = tmpvar_17; - float tmpvar_18; - tmpvar_18 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_19; - tmpvar_19 = vec3(tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = mix (lmIndirect, lmFull, tmpvar_19); - vec3 tmpvar_21; - tmpvar_21 = tmpvar_20; - lm = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (light.xyz + lm); - light.xyz = tmpvar_22.xyz.xyz; - vec4 tmpvar_23; - tmpvar_23 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - col = tmpvar_24; - vec3 tmpvar_25; - tmpvar_25 = (col.xyz + o.Emission); - col.xyz = tmpvar_25.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-out.txt deleted file mode 100644 index 8d30b5634..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-out.txt +++ /dev/null @@ -1,33 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Illum; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 col; - vec4 light; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * _Color); - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); - vec4 c_i0; - float tmpvar_6; - tmpvar_6 = (tmpvar_5.w * tmpvar_3.w); - c_i0.xyz = ((tmpvar_4.xyz * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_6)); - c_i0.w = (tmpvar_4.w + (tmpvar_6 * _SpecColor.w)); - col = c_i0; - col.xyz = (c_i0.xyz + (tmpvar_4.xyz * texture2D (_Illum, tmpvar_1.zw).w)); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-ir.txt deleted file mode 100644 index 89434846a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-ir.txt +++ /dev/null @@ -1,226 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = UnitySpotCookie (IN._LightCoord); - float tmpvar_14; - tmpvar_14 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_15; - tmpvar_15 = LightingBlinnPhong (o, lightDir, tmpvar_12, ((float((IN._LightCoord.z > 0.0)) * tmpvar_13) * tmpvar_14)); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-out.txt deleted file mode 100644 index da0ca3a67..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[4]; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 tmpvar_4; - tmpvar_4 = normalize (gl_TexCoord[2].xyz); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - float atten; - atten = ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w); - vec4 c_i0; - float tmpvar_5; - tmpvar_5 = (pow (max (0.0, dot (tmpvar_1, normalize ((tmpvar_4 + normalize (gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0.xyz = (((((tmpvar_3.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_4))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_5)) * (atten * 2.0)); - c_i0.w = ((tmpvar_3.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_5) * atten)); - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-ir.txt deleted file mode 100644 index f4c829c8e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-ir.txt +++ /dev/null @@ -1,102 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-out.txt deleted file mode 100644 index 73b819c9d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-out.txt +++ /dev/null @@ -1,9 +0,0 @@ -uniform float _Shininess; -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = _Shininess; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-ir.txt deleted file mode 100644 index a7d243c63..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-ir.txt +++ /dev/null @@ -1,293 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_12; - tmpvar_12 = DecodeLightmap (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - lmFull = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_15; - tmpvar_15 = DecodeLightmap (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - lmIndirect = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_18; - tmpvar_18 = vec3(tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = mix (lmIndirect, lmFull, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lm = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (light.xyz + lm); - light.xyz = tmpvar_21.xyz.xyz; - vec4 tmpvar_22; - tmpvar_22 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_23; - tmpvar_23 = tmpvar_22; - col = tmpvar_23; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-out.txt deleted file mode 100644 index 1cd4202af..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-out.txt +++ /dev/null @@ -1,25 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec4 tmpvar_3; - tmpvar_3 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_3; - light.xyz = (tmpvar_3.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); - vec4 c; - float tmpvar_4; - tmpvar_4 = (tmpvar_3.w * tmpvar_2.w); - c.xyz = (((tmpvar_2.xyz * _Color.xyz) * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_4)); - c.w = ((tmpvar_2.w * _Color.w) + (tmpvar_4 * _SpecColor.w)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-ir.txt deleted file mode 100644 index 55e9414b6..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-ir.txt +++ /dev/null @@ -1,186 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv2_Detail; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Detail; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_Detail, IN.uv2_Detail); - vec3 tmpvar_3; - tmpvar_3 = ((tmpvar_1.xyz * tmpvar_2.xyz) * 2.0); - o.Albedo = tmpvar_3; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv2_Detail = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = UnitySpotCookie (IN._LightCoord); - float tmpvar_13; - tmpvar_13 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_12) * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = 0.0; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-out.txt deleted file mode 100644 index c72f751a7..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _Detail; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[3]; - vec4 c; - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_2.xyz; - vec4 c_i0; - c_i0.xyz = ((((texture2D (_MainTex, tmpvar_1.xy).xyz * texture2D (_Detail, tmpvar_1.zw).xyz) * 2.0) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-ir.txt deleted file mode 100644 index 563afd66d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-ir.txt +++ /dev/null @@ -1,135 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv2_Detail; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Detail; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_Detail, IN.uv2_Detail); - vec3 tmpvar_3; - tmpvar_3 = ((tmpvar_1.xyz * tmpvar_2.xyz) * 2.0); - o.Albedo = tmpvar_3; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv2_Detail = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-out.txt deleted file mode 100644 index 8f67442e4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-out.txt +++ /dev/null @@ -1,19 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform sampler2D _Detail; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_2; - light.xyz = (tmpvar_2.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (((texture2D (_MainTex, tmpvar_1.xy).xyz * texture2D (_Detail, tmpvar_1.zw).xyz) * 2.0) * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-ir.txt deleted file mode 100644 index fbd756c01..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-ir.txt +++ /dev/null @@ -1,228 +0,0 @@ -struct MySurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - vec3 GlossColor; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_SpecMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _SpecMap; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout MySurfaceOutput o -) -{ - vec4 spec; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1.xyz * 0.3); - o.Albedo = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_SpecMap, IN.uv_SpecMap); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - spec = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = spec.xyz; - o.GlossColor = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.25; - o.Specular = tmpvar_6; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingColoredSpecular ( - in MySurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - vec3 specCol; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, 32.0); - float tmpvar_10; - tmpvar_10 = tmpvar_9; - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (spec * s.GlossColor); - specCol = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = ((((s.Albedo * _LightColor0.xyz) * diff) + (_LightColor0.xyz * specCol)) * (atten * 2.0)); - c.xyz = tmpvar_12.xyz.xyz; - float tmpvar_13; - tmpvar_13 = s.Alpha; - c.w = vec4(tmpvar_13).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - MySurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_SpecMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = UnitySpotCookie (IN._LightCoord); - float tmpvar_14; - tmpvar_14 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_15; - tmpvar_15 = LightingColoredSpecular (o, lightDir, tmpvar_12, ((float((IN._LightCoord.z > 0.0)) * tmpvar_13) * tmpvar_14)); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-out.txt deleted file mode 100644 index e18ba85a8..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-out.txt +++ /dev/null @@ -1,26 +0,0 @@ -uniform sampler2D _SpecMap; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[4]; - vec4 c; - vec3 tmpvar_4; - tmpvar_4 = normalize (gl_TexCoord[2].xyz); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_3.xyz; - vec4 c_i0; - c_i0.xyz = (((((texture2D (_MainTex, tmpvar_1.xy).xyz * 0.3) * _LightColor0.xyz) * max (0.0, dot (tmpvar_2, tmpvar_4))) + (_LightColor0.xyz * (pow (max (0.0, dot (tmpvar_2, normalize ((tmpvar_4 + normalize (gl_TexCoord[3].xyz))))), 32.0) * texture2D (_SpecMap, tmpvar_1.zw).xyz))) * (((float((tmpvar_3.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_3.xy / tmpvar_3.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-ir.txt deleted file mode 100644 index a79e9df93..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-ir.txt +++ /dev/null @@ -1,98 +0,0 @@ -struct MySurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - vec3 GlossColor; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_SpecMap; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform sampler2D _SpecMap; -uniform sampler2D _MainTex; -void surf ( - in Input IN, - inout MySurfaceOutput o -) -{ - vec4 spec; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1.xyz * 0.3); - o.Albedo = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_SpecMap, IN.uv_SpecMap); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - spec = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = spec.xyz; - o.GlossColor = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.25; - o.Specular = tmpvar_6; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - MySurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = IN.normal; - o.Normal = tmpvar_5; - surf (surfIN, o); - vec3 tmpvar_6; - tmpvar_6 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_6.xyz.xyz; - float tmpvar_7; - tmpvar_7 = o.Specular; - res.w = vec4(tmpvar_7).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-out.txt deleted file mode 100644 index 4fe695bf9..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.25; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-ir.txt deleted file mode 100644 index bb32f9635..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-ir.txt +++ /dev/null @@ -1,158 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec3 foo; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 cust_foo; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 tmpvar_1; - tmpvar_1 = IN.foo; - o.Albedo = tmpvar_1; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec3 tmpvar_1; - tmpvar_1 = IN.cust_foo; - surfIN.foo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_12; - tmpvar_12 = vec2(tmpvar_11); - vec2 tmpvar_13; - tmpvar_13 = tmpvar_12.xy; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_LightTextureB0, tmpvar_13); - vec4 tmpvar_15; - tmpvar_15 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_16; - tmpvar_16 = LightingLambert (o, lightDir, (tmpvar_14.w * tmpvar_15.w)); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - c = tmpvar_17; - float tmpvar_18; - tmpvar_18 = 0.0; - c.w = vec4(tmpvar_18).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.cust_foo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-out.txt deleted file mode 100644 index 9b64f3394..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-out.txt +++ /dev/null @@ -1,16 +0,0 @@ -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[3].xyz; - vec4 c; - vec4 c_i0; - c_i0.xyz = ((gl_TexCoord[0].xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-ir.txt deleted file mode 100644 index 92e69913c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-ir.txt +++ /dev/null @@ -1,144 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec3 foo; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 cust_foo; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 tmpvar_1; - tmpvar_1 = IN.foo; - o.Albedo = tmpvar_1; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec3 tmpvar_1; - tmpvar_1 = IN.cust_foo; - surfIN.foo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.cust_foo = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-out.txt deleted file mode 100644 index 9c8743ce5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-out.txt +++ /dev/null @@ -1,13 +0,0 @@ -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec4 c; - vec4 c_i0; - c_i0.xyz = ((gl_TexCoord[0].xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-ir.txt deleted file mode 100644 index 0ea908e56..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-ir.txt +++ /dev/null @@ -1,270 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec3 foo; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 cust_foo; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _LightBuffer; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 tmpvar_1; - tmpvar_1 = IN.foo; - o.Albedo = tmpvar_1; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec3 tmpvar_1; - tmpvar_1 = IN.cust_foo; - surfIN.foo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_12; - tmpvar_12 = DecodeLightmap (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - lmFull = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_15; - tmpvar_15 = DecodeLightmap (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - lmIndirect = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_18; - tmpvar_18 = vec3(tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = mix (lmIndirect, lmFull, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lm = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (light.xyz + lm); - light.xyz = tmpvar_21.xyz.xyz; - vec4 tmpvar_22; - tmpvar_22 = LightingLambert_PrePass (o, light); - vec4 tmpvar_23; - tmpvar_23 = tmpvar_22; - col = tmpvar_23; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.cust_foo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-out.txt deleted file mode 100644 index a11dfd387..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _LightBuffer; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_2; - light.xyz = (tmpvar_2.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); - vec4 c; - c.xyz = (gl_TexCoord[0].xyz * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-ir.txt deleted file mode 100644 index 001e0343b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-ir.txt +++ /dev/null @@ -1,147 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1.xyz * 0.5); - o.Albedo = tmpvar_2; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-out.txt deleted file mode 100644 index bd0621bd9..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-out.txt +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec4 c; - vec4 c_i0; - c_i0.xyz = (((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * 0.5) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-ir.txt deleted file mode 100644 index cae128f93..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-ir.txt +++ /dev/null @@ -1,187 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_Decal; - vec2 uv_DecalBump; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 vlight; - vec4 _ShadowCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightColor0; -uniform sampler2D _DecalBump; -uniform sampler2D _Decal; -float unitySampleShadow ( - in vec4 shadowCoord -) -{ - float shadow; - vec4 tmpvar_1; - tmpvar_1 = texture2DProj (_ShadowMapTexture, shadowCoord); - float tmpvar_2; - tmpvar_2 = tmpvar_1.x; - shadow = tmpvar_2; - return shadow; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_Decal, IN.uv_Decal); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1.xyz * 0.5); - o.Albedo = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalBump, IN.uv_DecalBump); - vec4 tmpvar_4; - tmpvar_4 = UnpackNormal (tmpvar_3); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.Normal = tmpvar_6; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - float atten; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_Decal = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_DecalBump = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - float tmpvar_8; - tmpvar_8 = unitySampleShadow (IN._ShadowCoord); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - atten = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = LightingLambert (o, IN.lightDir, atten); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (c.xyz + (o.Albedo * IN.vlight)); - c.xyz = tmpvar_12.xyz.xyz; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.vlight = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._ShadowCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-out.txt deleted file mode 100644 index 11a407e22..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _ShadowMapTexture; -uniform vec4 _LightColor0; -uniform sampler2D _DecalBump; -uniform sampler2D _Decal; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 c; - vec3 tmpvar_2; - tmpvar_2 = (texture2D (_Decal, tmpvar_1.xy).xyz * 0.5); - vec4 normal; - normal.xy = ((texture2D (_DecalBump, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0; - c_i0.xyz = ((tmpvar_2 * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, gl_TexCoord[1].xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[3]).x) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.xyz = (c_i0.xyz + (tmpvar_2 * gl_TexCoord[2].xyz)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-ir.txt deleted file mode 100644 index 65d0a8a0a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-ir.txt +++ /dev/null @@ -1,179 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_Decal; - vec2 uv_DecalBump; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _DecalBump; -uniform sampler2D _Decal; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_Decal, IN.uv_Decal); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1.xyz * 0.5); - o.Albedo = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_DecalBump, IN.uv_DecalBump); - vec4 tmpvar_4; - tmpvar_4 = UnpackNormal (tmpvar_3); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.Normal = tmpvar_6; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_Decal = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_DecalBump = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_12; - tmpvar_12 = vec2(tmpvar_11); - vec2 tmpvar_13; - tmpvar_13 = tmpvar_12.xy; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_LightTexture0, tmpvar_13); - vec4 tmpvar_15; - tmpvar_15 = LightingLambert (o, lightDir, tmpvar_14.w); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-out.txt deleted file mode 100644 index 44c752add..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _DecalBump; -uniform sampler2D _Decal; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 c; - vec4 normal; - normal.xy = ((texture2D (_DecalBump, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0; - c_i0.xyz = (((texture2D (_Decal, tmpvar_1.xy).xyz * 0.5) * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, normalize (gl_TexCoord[1].xyz))) * texture2D (_LightTexture0, vec2(dot (tmpvar_2, tmpvar_2))).w) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-ir.txt deleted file mode 100644 index 936c59954..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-ir.txt +++ /dev/null @@ -1,149 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; -} - -vec4 LightingWrapLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float NdotL; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - NdotL = tmpvar_2; - float tmpvar_3; - tmpvar_3 = ((NdotL * 0.5) + 0.5); - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingWrapLambert (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-out.txt deleted file mode 100644 index b40e6133e..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-out.txt +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec4 c; - vec4 c_i0; - c_i0.xyz = ((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _LightColor0.xyz) * ((((dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz) * 0.5) + 0.5) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-ir.txt deleted file mode 100644 index 2a63a151d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-ir.txt +++ /dev/null @@ -1,261 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; -}; -varying vec4 xlv_FOG; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float rim; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = normalize (IN.viewDir); - float tmpvar_4; - tmpvar_4 = dot (tmpvar_3, o.Normal); - float tmpvar_5; - tmpvar_5 = xll_saturate (tmpvar_4); - float tmpvar_6; - tmpvar_6 = (1.0 - tmpvar_5); - rim = tmpvar_6; - float tmpvar_7; - tmpvar_7 = pow (rim, _RimPower); - vec3 tmpvar_8; - tmpvar_8 = (_RimColor.xyz * tmpvar_7); - o.Emission = tmpvar_8; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = LightingLambert (o, lightDir, 1.0); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - c = tmpvar_10; - float tmpvar_11; - tmpvar_11 = 0.0; - c.w = vec4(tmpvar_11).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-out.txt deleted file mode 100644 index cfd82130b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-out.txt +++ /dev/null @@ -1,13 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -void main () -{ - vec4 c; - vec4 c_i0; - c_i0.xyz = ((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-ir.txt deleted file mode 100644 index 6e20abb1f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-ir.txt +++ /dev/null @@ -1,272 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec3 normal; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float rim; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = normalize (IN.viewDir); - float tmpvar_4; - tmpvar_4 = dot (tmpvar_3, o.Normal); - float tmpvar_5; - tmpvar_5 = xll_saturate (tmpvar_4); - float tmpvar_6; - tmpvar_6 = (1.0 - tmpvar_5); - rim = tmpvar_6; - float tmpvar_7; - tmpvar_7 = pow (rim, _RimPower); - vec3 tmpvar_8; - tmpvar_8 = (_RimColor.xyz * tmpvar_7); - o.Emission = tmpvar_8; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.viewDir; - surfIN.viewDir = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec4 tmpvar_9; - tmpvar_9 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = log2 (light); - vec4 tmpvar_12; - tmpvar_12 = -(tmpvar_11); - light = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_13.xyz.xyz; - vec4 tmpvar_14; - tmpvar_14 = LightingLambert_PrePass (o, light); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - col = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = (col.xyz + o.Emission); - col.xyz = tmpvar_16.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.normal = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-out.txt deleted file mode 100644 index 540cc27aa..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-out.txt +++ /dev/null @@ -1,21 +0,0 @@ -uniform vec4 unity_Ambient; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void main () -{ - vec4 col; - vec4 light; - vec4 tmpvar_1; - tmpvar_1 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_1; - light.xyz = (tmpvar_1.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * light.xyz); - c.w = 0.0; - col = c; - col.xyz = (c.xyz + (_RimColor.xyz * pow ((1.0 - clamp (dot (normalize (gl_TexCoord[1].xyz), gl_TexCoord[3].xyz), 0.0, 1.0)), _RimPower))); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-ir.txt deleted file mode 100644 index fbd15353b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-ir.txt +++ /dev/null @@ -1,312 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec3 normal; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float rim; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = normalize (IN.viewDir); - float tmpvar_4; - tmpvar_4 = dot (tmpvar_3, o.Normal); - float tmpvar_5; - tmpvar_5 = xll_saturate (tmpvar_4); - float tmpvar_6; - tmpvar_6 = (1.0 - tmpvar_5); - rim = tmpvar_6; - float tmpvar_7; - tmpvar_7 = pow (rim, _RimPower); - vec3 tmpvar_8; - tmpvar_8 = (_RimColor.xyz * tmpvar_7); - o.Emission = tmpvar_8; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.viewDir; - surfIN.viewDir = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec4 tmpvar_9; - tmpvar_9 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = log2 (light); - vec4 tmpvar_12; - tmpvar_12 = -(tmpvar_11); - light = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_14; - tmpvar_14 = DecodeLightmap (tmpvar_13); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - lmFull = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_17; - tmpvar_17 = DecodeLightmap (tmpvar_16); - vec3 tmpvar_18; - tmpvar_18 = tmpvar_17; - lmIndirect = tmpvar_18; - float tmpvar_19; - tmpvar_19 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_20; - tmpvar_20 = vec3(tmpvar_19); - vec3 tmpvar_21; - tmpvar_21 = mix (lmIndirect, lmFull, tmpvar_20); - vec3 tmpvar_22; - tmpvar_22 = tmpvar_21; - lm = tmpvar_22; - vec3 tmpvar_23; - tmpvar_23 = (light.xyz + lm); - light.xyz = tmpvar_23.xyz.xyz; - vec4 tmpvar_24; - tmpvar_24 = LightingLambert_PrePass (o, light); - vec4 tmpvar_25; - tmpvar_25 = tmpvar_24; - col = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = (col.xyz + o.Emission); - col.xyz = tmpvar_26.xyz.xyz; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.viewDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN.hip_lmapFade = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-out.txt deleted file mode 100644 index 83a0f379a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-out.txt +++ /dev/null @@ -1,24 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[4].xyz; - vec4 col; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[2]))); - light = tmpvar_2; - light.xyz = (tmpvar_2.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); - vec4 c; - c.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * light.xyz); - c.w = 0.0; - col = c; - col.xyz = (c.xyz + (_RimColor.xyz * pow ((1.0 - clamp (dot (normalize (gl_TexCoord[1].xyz), gl_TexCoord[3].xyz), 0.0, 1.0)), _RimPower))); - gl_FragData[0] = col; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-ir.txt deleted file mode 100644 index 545710391..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-ir.txt +++ /dev/null @@ -1,319 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_BumpMap; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _BumpMap; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float rim; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_BumpMap); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_4; - tmpvar_4 = UnpackNormal (tmpvar_3); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.Normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = normalize (IN.viewDir); - float tmpvar_8; - tmpvar_8 = dot (tmpvar_7, o.Normal); - float tmpvar_9; - tmpvar_9 = xll_saturate (tmpvar_8); - float tmpvar_10; - tmpvar_10 = (1.0 - tmpvar_9); - rim = tmpvar_10; - float tmpvar_11; - tmpvar_11 = pow (rim, _RimPower); - vec3 tmpvar_12; - tmpvar_12 = (_RimColor.xyz * tmpvar_11); - o.Emission = tmpvar_12; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_BumpMap = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - float tmpvar_10; - tmpvar_10 = UnitySpotCookie (IN._LightCoord); - float tmpvar_11; - tmpvar_11 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_12; - tmpvar_12 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_10) * tmpvar_11)); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - c = tmpvar_13; - float tmpvar_14; - tmpvar_14 = 0.0; - c.w = vec4(tmpvar_14).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-out.txt deleted file mode 100644 index 81a462a08..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-out.txt +++ /dev/null @@ -1,25 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[2]; - vec4 c; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_1.xyz; - vec4 c_i0; - c_i0.xyz = ((texture2D (_MainTex, tmpvar_2).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, normalize (gl_TexCoord[1].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-ir.txt deleted file mode 100644 index a796c4f0f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-ir.txt +++ /dev/null @@ -1,301 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_BumpMap; - vec3 viewDir; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform float _RimPower; -uniform vec4 _RimColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _BumpMap; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float rim; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_BumpMap); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_4; - tmpvar_4 = UnpackNormal (tmpvar_3); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.Normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = normalize (IN.viewDir); - float tmpvar_8; - tmpvar_8 = dot (tmpvar_7, o.Normal); - float tmpvar_9; - tmpvar_9 = xll_saturate (tmpvar_8); - float tmpvar_10; - tmpvar_10 = (1.0 - tmpvar_9); - rim = tmpvar_10; - float tmpvar_11; - tmpvar_11 = pow (rim, _RimPower); - vec3 tmpvar_12; - tmpvar_12 = (_RimColor.xyz * tmpvar_11); - o.Emission = tmpvar_12; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_BumpMap = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_11; - tmpvar_11 = vec2(tmpvar_10); - vec2 tmpvar_12; - tmpvar_12 = tmpvar_11.xy; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_LightTextureB0, tmpvar_12); - vec4 tmpvar_14; - tmpvar_14 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_15; - tmpvar_15 = LightingLambert (o, lightDir, (tmpvar_13.w * tmpvar_14.w)); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-out.txt deleted file mode 100644 index 0d75f2e53..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-out.txt +++ /dev/null @@ -1,23 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _BumpMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 c; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec4 c_i0; - c_i0.xyz = ((texture2D (_MainTex, tmpvar_2).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal.xyz, normalize (gl_TexCoord[1].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-ir.txt deleted file mode 100644 index 3f1b999ff..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-ir.txt +++ /dev/null @@ -1,180 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec4 screenPos; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec2 uv; - vec2 tmpvar_1; - tmpvar_1 = (IN.screenPos.xy / IN.screenPos.w); - uv = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (uv * vec2(2.0, 1.0)); - uv = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.5, 0.5, 0.5); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, uv); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4.xyz * 0.5); - o.Emission = tmpvar_5; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - float tmpvar_10; - tmpvar_10 = UnitySpotCookie (IN._LightCoord); - float tmpvar_11; - tmpvar_11 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_12; - tmpvar_12 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_10) * tmpvar_11)); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - c = tmpvar_13; - float tmpvar_14; - tmpvar_14 = 0.0; - c.w = vec4(tmpvar_14).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-out.txt deleted file mode 100644 index a27066ef4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[2]; - vec4 c; - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_1.xyz; - vec4 c_i0; - c_i0.xyz = ((vec3(0.5, 0.5, 0.5) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[0].xyz, normalize (gl_TexCoord[1].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-ir.txt deleted file mode 100644 index d38426d81..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-ir.txt +++ /dev/null @@ -1,162 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec4 screenPos; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec2 uv; - vec2 tmpvar_1; - tmpvar_1 = (IN.screenPos.xy / IN.screenPos.w); - uv = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (uv * vec2(2.0, 1.0)); - uv = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.5, 0.5, 0.5); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, uv); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4.xyz * 0.5); - o.Emission = tmpvar_5; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_11; - tmpvar_11 = vec2(tmpvar_10); - vec2 tmpvar_12; - tmpvar_12 = tmpvar_11.xy; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_LightTextureB0, tmpvar_12); - vec4 tmpvar_14; - tmpvar_14 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_15; - tmpvar_15 = LightingLambert (o, lightDir, (tmpvar_13.w * tmpvar_14.w)); - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - c = tmpvar_16; - float tmpvar_17; - tmpvar_17 = 0.0; - c.w = vec4(tmpvar_17).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-out.txt deleted file mode 100644 index 11be005fe..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-out.txt +++ /dev/null @@ -1,16 +0,0 @@ -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[2].xyz; - vec4 c; - vec4 c_i0; - c_i0.xyz = ((vec3(0.5, 0.5, 0.5) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[0].xyz, normalize (gl_TexCoord[1].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-ir.txt deleted file mode 100644 index 6b252fb3b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-ir.txt +++ /dev/null @@ -1,97 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec4 screenPos; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform sampler2D _MainTex; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec2 uv; - vec2 tmpvar_1; - tmpvar_1 = (IN.screenPos.xy / IN.screenPos.w); - uv = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (uv * vec2(2.0, 1.0)); - uv = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.5, 0.5, 0.5); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, uv); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4.xyz * 0.5); - o.Emission = tmpvar_5; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-out.txt deleted file mode 100644 index 2a4e65f10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-ir.txt deleted file mode 100644 index 47247f28c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-ir.txt +++ /dev/null @@ -1,94 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec4 screenPos; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform sampler2D _MainTex; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec2 uv; - vec2 tmpvar_1; - tmpvar_1 = (IN.screenPos.xy / IN.screenPos.w); - uv = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (uv * vec2(2.0, 1.0)); - uv = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, uv); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3.xyz; - o.Albedo = tmpvar_4; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-out.txt deleted file mode 100644 index 2a4e65f10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-ir.txt deleted file mode 100644 index cd37f1a13..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-ir.txt +++ /dev/null @@ -1,135 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec4 screenPos; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_screenPos; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec2 uv; - vec2 tmpvar_1; - tmpvar_1 = (IN.screenPos.xy / IN.screenPos.w); - uv = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (uv * vec2(2.0, 1.0)); - uv = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, uv); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3.xyz; - o.Albedo = tmpvar_4; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec4 tmpvar_1; - tmpvar_1 = IN.hip_screenPos; - surfIN.screenPos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_11.xyz.xyz; - vec4 tmpvar_12; - tmpvar_12 = LightingLambert_PrePass (o, light); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - col = tmpvar_13; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_screenPos = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-out.txt deleted file mode 100644 index 34c019671..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-out.txt +++ /dev/null @@ -1,18 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec4 light; - vec4 tmpvar_2; - tmpvar_2 = -(log2 (texture2DProj (_LightBuffer, gl_TexCoord[1]))); - light = tmpvar_2; - light.xyz = (tmpvar_2.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (texture2D (_MainTex, ((tmpvar_1.xy / tmpvar_1.w) * vec2(2.0, 1.0))).xyz * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-ir.txt deleted file mode 100644 index f51f54538..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-ir.txt +++ /dev/null @@ -1,201 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldPos; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldPos; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float tmpvar_1; - tmpvar_1 = fract (((IN.worldPos.y + (IN.worldPos.z * 0.1)) * 5.0)); - xll_clip ((tmpvar_1 - 0.5)); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2.xyz; - o.Albedo = tmpvar_3; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.worldPos; - surfIN.worldPos = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = IN.normal; - o.Normal = tmpvar_8; - surf (surfIN, o); - vec3 tmpvar_9; - tmpvar_9 = IN.lightDir; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (lightDir); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - lightDir = tmpvar_11; - float tmpvar_12; - tmpvar_12 = UnitySpotCookie (IN._LightCoord); - float tmpvar_13; - tmpvar_13 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_12) * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = 0.0; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.worldPos = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.lightDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-out.txt deleted file mode 100644 index 22848af00..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 tmpvar_4; - tmpvar_4 = gl_TexCoord[4]; - vec4 c; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[0].xy; - float x; - x = (fract (((tmpvar_1.y + (tmpvar_1.z * 0.1)) * 5.0)) - 0.5); - if ((x < 0.0)) { - discard; - }; - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_4.xyz; - vec4 c_i0; - c_i0.xyz = ((texture2D (_MainTex, tmpvar_5).xyz * _LightColor0.xyz) * ((max (0.0, dot (tmpvar_2, normalize (tmpvar_3))) * ((float((tmpvar_4.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_4.xy / tmpvar_4.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-ir.txt deleted file mode 100644 index 3b6a84fb9..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-ir.txt +++ /dev/null @@ -1,150 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldPos; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldPos; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float tmpvar_1; - tmpvar_1 = fract (((IN.worldPos.y + (IN.worldPos.z * 0.1)) * 5.0)); - xll_clip ((tmpvar_1 - 0.5)); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2.xyz; - o.Albedo = tmpvar_3; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.worldPos; - surfIN.worldPos = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_12.xyz.xyz; - vec4 tmpvar_13; - tmpvar_13 = LightingLambert_PrePass (o, light); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - col = tmpvar_14; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.worldPos = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-out.txt deleted file mode 100644 index 043c5917f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[2]; - vec4 light; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - float x; - x = (fract (((tmpvar_1.y + (tmpvar_1.z * 0.1)) * 5.0)) - 0.5); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, tmpvar_2))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); - vec4 c; - c.xyz = (texture2D (_MainTex, tmpvar_3).xyz * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-ir.txt deleted file mode 100644 index 556c00100..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-ir.txt +++ /dev/null @@ -1,295 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldPos; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldPos; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float tmpvar_1; - tmpvar_1 = fract (((IN.worldPos.y + (IN.worldPos.z * 0.1)) * 5.0)); - xll_clip ((tmpvar_1 - 0.5)); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2.xyz; - o.Albedo = tmpvar_3; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = IN.worldPos; - surfIN.worldPos = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec4 tmpvar_8; - tmpvar_8 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - light = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = log2 (light); - vec4 tmpvar_11; - tmpvar_11 = -(tmpvar_10); - light = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_13; - tmpvar_13 = DecodeLightmap (tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - lmFull = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_16; - tmpvar_16 = DecodeLightmap (tmpvar_15); - vec3 tmpvar_17; - tmpvar_17 = tmpvar_16; - lmIndirect = tmpvar_17; - float tmpvar_18; - tmpvar_18 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_19; - tmpvar_19 = vec3(tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = mix (lmIndirect, lmFull, tmpvar_19); - vec3 tmpvar_21; - tmpvar_21 = tmpvar_20; - lm = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (light.xyz + lm); - light.xyz = tmpvar_22.xyz.xyz; - vec4 tmpvar_23; - tmpvar_23 = LightingLambert_PrePass (o, light); - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - col = tmpvar_24; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.worldPos = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_screen = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.hip_lmapFade = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-out.txt deleted file mode 100644 index 2c27c576c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-out.txt +++ /dev/null @@ -1,30 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[2]; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 light; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - float x; - x = (fract (((tmpvar_1.y + (tmpvar_1.z * 0.1)) * 5.0)) - 0.5); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_5; - tmpvar_5 = -(log2 (texture2DProj (_LightBuffer, tmpvar_2))); - light = tmpvar_5; - light.xyz = (tmpvar_5.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_3.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_3.xy).xyz), vec3(clamp (tmpvar_3.z, 0.0, 1.0)))); - vec4 c; - c.xyz = (texture2D (_MainTex, tmpvar_4).xyz * light.xyz); - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-ir.txt deleted file mode 100644 index 420955e51..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-ir.txt +++ /dev/null @@ -1,325 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec3 worldPos; -}; -struct v2f_surf { - vec4 pos; - vec3 _ShadowCoord0; - vec3 _ShadowCoord1; - vec3 _ShadowCoord2; - vec3 _ShadowCoord3; - vec2 _ShadowZFade; - vec3 worldPos; -}; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _MainTex; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - float tmpvar_1; - tmpvar_1 = fract (((IN.worldPos.y + (IN.worldPos.z * 0.1)) * 5.0)); - xll_clip ((tmpvar_1 - 0.5)); - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, IN.uv_MainTex); - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2.xyz; - o.Albedo = tmpvar_3; -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - float faded; - float shadow; - vec4 coord; - vec4 weights; - vec4 far; - vec4 near; - vec4 z; - SurfaceOutput o; - Input surfIN; - vec3 tmpvar_1; - tmpvar_1 = IN.worldPos; - surfIN.worldPos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - vec4 tmpvar_7; - tmpvar_7 = vec4(IN._ShadowZFade.x); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - z = tmpvar_8; - bvec4 tmpvar_9; - tmpvar_9 = greaterThanEqual (z, _LightSplitsNear); - vec4 tmpvar_10; - tmpvar_10 = vec4(tmpvar_9).xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - near = tmpvar_11; - bvec4 tmpvar_12; - tmpvar_12 = lessThan (z, _LightSplitsFar); - vec4 tmpvar_13; - tmpvar_13 = vec4(tmpvar_12).xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - far = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = (near * far); - weights = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16.w = 1.0; - tmpvar_16.xyz = ((((IN._ShadowCoord0 * weights.x) + (IN._ShadowCoord1 * weights.y)) + (IN._ShadowCoord2 * weights.z)) + (IN._ShadowCoord3 * weights.w)).xyz; - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - coord = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = texture2D (_ShadowMapTexture, coord.xy); - float tmpvar_19; - if ((tmpvar_18.x < coord.z)) { - tmpvar_19 = _LightShadowData.x; - } else { - tmpvar_19 = 1.0; - }; - float tmpvar_20; - tmpvar_20 = tmpvar_19; - shadow = tmpvar_20; - float tmpvar_21; - tmpvar_21 = xll_saturate (IN._ShadowZFade.y); - float tmpvar_22; - tmpvar_22 = xll_saturate ((shadow + tmpvar_21)); - float tmpvar_23; - tmpvar_23 = tmpvar_22; - faded = tmpvar_23; - float tmpvar_24; - tmpvar_24 = faded; - res.x = tmpvar_24; - float tmpvar_25; - tmpvar_25 = 1.0; - res.y = vec2(tmpvar_25).y; - vec2 tmpvar_26; - tmpvar_26 = EncodeFloatRG ((1.0 - (z * _ProjectionParams.w)).x); - vec2 tmpvar_27; - tmpvar_27 = tmpvar_26; - res.zw = tmpvar_27.xxxy.zw; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN._ShadowCoord0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN._ShadowCoord1 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN._ShadowCoord2 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN._ShadowCoord3 = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10 = gl_TexCoord[4].xy; - vec2 tmpvar_11; - tmpvar_11 = tmpvar_10; - xlt_IN._ShadowZFade = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = gl_TexCoord[5].xyz; - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - xlt_IN.worldPos = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = frag_surf (xlt_IN); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - xl_retval = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = xl_retval.xyzw; - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - gl_FragData[0] = tmpvar_17; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-out.txt deleted file mode 100644 index d047bcd21..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-out.txt +++ /dev/null @@ -1,51 +0,0 @@ -uniform sampler2D _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[2].xyz; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[3].xyz; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[4].xy; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[5].xyz; - vec4 res; - float x; - x = (fract (((tmpvar_6.y + (tmpvar_6.z * 0.1)) * 5.0)) - 0.5); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_5.xxxx; - vec4 tmpvar_8; - tmpvar_8 = (vec4(greaterThanEqual (tmpvar_7, _LightSplitsNear)) * vec4(lessThan (tmpvar_7, _LightSplitsFar))); - vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = ((((tmpvar_1 * tmpvar_8.x) + (tmpvar_2 * tmpvar_8.y)) + (tmpvar_3 * tmpvar_8.z)) + (tmpvar_4 * tmpvar_8.w)); - vec4 tmpvar_10; - tmpvar_10 = texture2D (_ShadowMapTexture, tmpvar_9.xy); - float tmpvar_11; - if ((tmpvar_10.x < tmpvar_9.z)) { - tmpvar_11 = _LightShadowData.x; - } else { - tmpvar_11 = 1.0; - }; - res.x = clamp ((tmpvar_11 + clamp (tmpvar_5.y, 0.0, 1.0)), 0.0, 1.0); - res.y = 1.0; - vec2 enc; - vec2 tmpvar_12; - tmpvar_12 = fract ((vec2(1.0, 255.0) * (1.0 - (tmpvar_5.xxxx * _ProjectionParams.w)).x)); - enc = tmpvar_12; - enc.x = (tmpvar_12.x - (tmpvar_12.y * 0.00392157)); - res.zw = enc; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-ir.txt deleted file mode 100644 index 639d05f1a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-ir.txt +++ /dev/null @@ -1,138 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 worldRefl; - vec3 normal; - vec3 lightDir; -}; -varying vec4 xlv_FOG; -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = textureCube (_Cube, IN.worldRefl); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec3 tmpvar_1; - tmpvar_1 = IN.worldRefl; - surfIN.worldRefl = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = LightingLambert (o, lightDir, 1.0); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - c = tmpvar_10; - float tmpvar_11; - tmpvar_11 = 0.0; - c.w = vec4(tmpvar_11).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.worldRefl = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-out.txt deleted file mode 100644 index 7781483e2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-out.txt +++ /dev/null @@ -1,13 +0,0 @@ -uniform vec4 _LightColor0; -uniform samplerCube _Cube; -void main () -{ - vec4 c; - vec4 c_i0; - c_i0.xyz = ((textureCube (_Cube, gl_TexCoord[0].xyz).xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * 2.0)); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-ir.txt deleted file mode 100644 index 94e66c645..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-ir.txt +++ /dev/null @@ -1,87 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec3 worldRefl; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -uniform samplerCube _Cube; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tmpvar_1; - tmpvar_1 = textureCube (_Cube, IN.worldRefl); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1.xyz; - o.Albedo = tmpvar_2; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-out.txt deleted file mode 100644 index 2a4e65f10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-ir.txt deleted file mode 100644 index 5ecfe530c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-ir.txt +++ /dev/null @@ -1,35 +0,0 @@ -struct v2f { - vec4 pos; - vec4 color; -}; -vec4 frag ( - in v2f i -) -{ - return i.color; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-ir.txt deleted file mode 100644 index e528171f0..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-ir.txt +++ /dev/null @@ -1,39 +0,0 @@ -struct v2f { - vec4 vertex; - vec2 texcoord; -}; -uniform sampler2D _MainTex; -uniform vec4 _Color; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (tmpvar_1 * _Color); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.texcoord = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-ir.txt deleted file mode 100644 index 29ee52c61..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-ir.txt +++ /dev/null @@ -1,50 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -uniform vec4 _ZBufferParams; -uniform sampler2D _CameraDepthTexture; -float Linear01Depth ( - in float z -) -{ - return (1.0 / ((_ZBufferParams.x * z) + _ZBufferParams.y)); -} - -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_CameraDepthTexture, i.uv); - float tmpvar_2; - tmpvar_2 = Linear01Depth (tmpvar_1.x); - vec4 tmpvar_3; - tmpvar_3 = vec4((1.0 - tmpvar_2)); - return tmpvar_3; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-ir.txt deleted file mode 100644 index f7921820c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-ir.txt +++ /dev/null @@ -1,38 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - return tmpvar_1; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-ir.txt deleted file mode 100644 index 2d025bed3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _MainTex9; -uniform sampler2D _MainTex8; -uniform sampler2D _MainTex7; -uniform sampler2D _MainTex6; -uniform sampler2D _MainTex5; -uniform sampler2D _MainTex4; -uniform sampler2D _MainTex3; -uniform sampler2D _MainTex2; -uniform sampler2D _MainTex15; -uniform sampler2D _MainTex14; -uniform sampler2D _MainTex13; -uniform sampler2D _MainTex12; -uniform sampler2D _MainTex11; -uniform sampler2D _MainTex10; -uniform sampler2D _MainTex1; -uniform sampler2D _MainTex0; -vec4 frag ( - in v2f i -) -{ - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex0, i.uv); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - col = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex1, i.uv); - vec4 tmpvar_4; - tmpvar_4 = (col + tmpvar_3); - col = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex2, i.uv); - vec4 tmpvar_6; - tmpvar_6 = (col + tmpvar_5); - col = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_MainTex3, i.uv); - vec4 tmpvar_8; - tmpvar_8 = (col + tmpvar_7); - col = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_MainTex4, i.uv); - vec4 tmpvar_10; - tmpvar_10 = (col + tmpvar_9); - col = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_MainTex5, i.uv); - vec4 tmpvar_12; - tmpvar_12 = (col + tmpvar_11); - col = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_MainTex6, i.uv); - vec4 tmpvar_14; - tmpvar_14 = (col + tmpvar_13); - col = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = texture2D (_MainTex7, i.uv); - vec4 tmpvar_16; - tmpvar_16 = (col + tmpvar_15); - col = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = texture2D (_MainTex8, i.uv); - vec4 tmpvar_18; - tmpvar_18 = (col + tmpvar_17); - col = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = texture2D (_MainTex9, i.uv); - vec4 tmpvar_20; - tmpvar_20 = (col + tmpvar_19); - col = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = texture2D (_MainTex10, i.uv); - vec4 tmpvar_22; - tmpvar_22 = (col + tmpvar_21); - col = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = texture2D (_MainTex11, i.uv); - vec4 tmpvar_24; - tmpvar_24 = (col + tmpvar_23); - col = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = texture2D (_MainTex12, i.uv); - vec4 tmpvar_26; - tmpvar_26 = (col + tmpvar_25); - col = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = texture2D (_MainTex13, i.uv); - vec4 tmpvar_28; - tmpvar_28 = (col + tmpvar_27); - col = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29 = texture2D (_MainTex14, i.uv); - vec4 tmpvar_30; - tmpvar_30 = (col + tmpvar_29); - col = tmpvar_30; - vec4 tmpvar_31; - tmpvar_31 = texture2D (_MainTex15, i.uv); - vec4 tmpvar_32; - tmpvar_32 = (col + tmpvar_31); - col = tmpvar_32; - return col; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-ir.txt deleted file mode 100644 index 8a871c83c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-ir.txt +++ /dev/null @@ -1,146 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 1.0, 0.0); - o.Emission = tmpvar_1; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_11; - tmpvar_11 = vec2(tmpvar_10); - vec2 tmpvar_12; - tmpvar_12 = tmpvar_11.xy; - vec4 tmpvar_13; - tmpvar_13 = texture2D (_LightTexture0, tmpvar_12); - vec4 tmpvar_14; - tmpvar_14 = LightingLambert (o, lightDir, tmpvar_13.w); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - c = tmpvar_15; - float tmpvar_16; - tmpvar_16 = 0.0; - c.w = vec4(tmpvar_16).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN._LightCoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-out.txt deleted file mode 100644 index ec2e39e33..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-out.txt +++ /dev/null @@ -1,11 +0,0 @@ -void main () -{ - vec4 c; - vec4 c_i0; - c_i0.xyz = vec3(0.0, 0.0, 0.0); - c_i0.w = 0.0; - c = c_i0; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-ir.txt deleted file mode 100644 index 0719c8662..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-ir.txt +++ /dev/null @@ -1,84 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec3 tmpvar_1; - tmpvar_1 = vec3(1.0, 0.0, 0.0); - o.Emission = tmpvar_1; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - Input surfIN; - SurfaceOutput o; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_2; - float tmpvar_3; - tmpvar_3 = 0.0; - o.Specular = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Alpha = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Gloss = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = IN.normal; - o.Normal = tmpvar_6; - surf (surfIN, o); - vec3 tmpvar_7; - tmpvar_7 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = o.Specular; - res.w = vec4(tmpvar_8).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag_surf (xlt_IN); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-out.txt deleted file mode 100644 index 2a4e65f10..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-out.txt +++ /dev/null @@ -1,8 +0,0 @@ -void main () -{ - vec4 res; - res.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = 0.0; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-ir.txt deleted file mode 100644 index 860854dda..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-ir.txt +++ /dev/null @@ -1,44 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec3 texcoord; -}; -uniform samplerCube _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = textureCube (_MainTex, i.texcoord); - return tmpvar_1; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Color.xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.color = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.texcoord = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-ir.txt deleted file mode 100644 index 74d32dda4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-ir.txt +++ /dev/null @@ -1,59 +0,0 @@ -struct v2f { - vec4 pos; - vec2 texcoord; - vec3 cubenormal; -}; -uniform samplerCube _ToonShade; -uniform sampler2D _MainTex; -uniform vec4 _Color; -vec4 frag ( - in v2f i -) -{ - vec4 cube; - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - vec4 tmpvar_2; - tmpvar_2 = (_Color * tmpvar_1); - col = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = textureCube (_ToonShade, i.cubenormal); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - cube = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.xyz = ((2.0 * cube.xyz) * col.xyz).xyz; - tmpvar_5.w = col.w; - return tmpvar_5; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.texcoord = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.cubenormal = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = frag (xlt_i); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - xl_retval = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = xl_retval.xyzw; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - gl_FragData[0] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-ir.txt deleted file mode 100644 index a7210dece..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-ir.txt +++ /dev/null @@ -1,163 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _Ramp; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingToonRamp ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - vec3 ramp; - float d; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = ((tmpvar_1 * 0.5) + 0.5); - d = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = d; - tmpvar_3.y = d; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_Ramp, tmpvar_3); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - ramp = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (((s.Albedo * _LightColor0.xyz) * ramp) * (atten * 2.0)); - c.xyz = tmpvar_6.xyz.xyz; - float tmpvar_7; - tmpvar_7 = 0.0; - c.w = vec4(tmpvar_7).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_10; - tmpvar_10 = LightingToonRamp (o, lightDir, (tmpvar_9.w * 1.0)); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - c = tmpvar_11; - float tmpvar_12; - tmpvar_12 = 0.0; - c.w = vec4(tmpvar_12).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xy; - vec2 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-out.txt deleted file mode 100644 index 12ec0a75c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-out.txt +++ /dev/null @@ -1,21 +0,0 @@ -uniform sampler2D _Ramp; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec4 c; - vec4 c_i0_i1; - float tmpvar_1; - tmpvar_1 = ((dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz) * 0.5) + 0.5); - vec2 tmpvar_2; - tmpvar_2.x = tmpvar_1; - tmpvar_2.y = tmpvar_1; - c_i0_i1.xyz = ((((texture2D (_MainTex, gl_TexCoord[0].xy) * _Color).xyz * _LightColor0.xyz) * texture2D (_Ramp, tmpvar_2).xyz) * (texture2D (_LightTexture0, gl_TexCoord[3].xy).w * 2.0)); - c_i0_i1.w = 0.0; - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-ir.txt deleted file mode 100644 index 6d4b111a3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-ir.txt +++ /dev/null @@ -1,229 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_14; - tmpvar_14 = vec2(tmpvar_13); - vec2 tmpvar_15; - tmpvar_15 = tmpvar_14.xy; - vec4 tmpvar_16; - tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); - vec4 tmpvar_17; - tmpvar_17 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_18; - tmpvar_18 = LightingBlinnPhong (o, lightDir, tmpvar_12, (tmpvar_16.w * tmpvar_17.w)); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - c = tmpvar_19; - float tmpvar_20; - tmpvar_20 = o.Alpha; - c.w = vec4(tmpvar_20).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.viewDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-out.txt deleted file mode 100644 index 051726245..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-out.txt +++ /dev/null @@ -1,38 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[3].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, tmpvar_1.xy); - float tmpvar_4; - tmpvar_4 = (tmpvar_3.w * _Color.w); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_5; - tmpvar_5 = normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = normalize (gl_TexCoord[1].xyz); - float atten; - atten = (texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w); - vec4 c_i0; - float tmpvar_7; - tmpvar_7 = (pow (max (0.0, dot (tmpvar_5, normalize ((tmpvar_6 + normalize (gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0.xyz = (((((tmpvar_3.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_5, tmpvar_6))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_7)) * (atten * 2.0)); - c_i0.w = (tmpvar_4 + (((_LightColor0.w * _SpecColor.w) * tmpvar_7) * atten)); - c = c_i0; - c.w = tmpvar_4; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt deleted file mode 100644 index e1024c12f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,178 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_6; - tmpvar_6 = UnpackNormal (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.Normal = tmpvar_8; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = LightingLambert (o, lightDir, 1.0); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - c = tmpvar_10; - float tmpvar_11; - tmpvar_11 = o.Alpha; - c.w = vec4(tmpvar_11).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-out.txt deleted file mode 100644 index faea0a619..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_4; - tmpvar_4 = normal.xyz; - float x; - x = (tmpvar_3.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * (max (0.0, dot (tmpvar_4, tmpvar_2)) * 2.0)); - c_i0_i1.w = tmpvar_3.w; - c = c_i0_i1; - c.w = tmpvar_3.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt deleted file mode 100644 index 48026d700..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,174 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_6; - tmpvar_6 = UnpackNormal (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6.xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.Normal = tmpvar_8; -} - -vec4 LightingLambert_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - vec3 tmpvar_1; - tmpvar_1 = (s.Albedo * light.xyz); - c.xyz = tmpvar_1.xyz.xyz; - float tmpvar_2; - tmpvar_2 = s.Alpha; - c.w = vec4(tmpvar_2).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_11.xyz.xyz; - vec4 tmpvar_12; - tmpvar_12 = LightingLambert_PrePass (o, light); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - col = tmpvar_13; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt deleted file mode 100644 index 5a5790522..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform vec4 unity_Ambient; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - vec4 light; - vec2 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float x; - x = (tmpvar_3.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_4; - tmpvar_4 = -(log2 (texture2DProj (_LightBuffer, tmpvar_1))); - light = tmpvar_4; - light.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); - vec4 c_i0; - c_i0.xyz = (tmpvar_3.xyz * light.xyz); - c_i0.w = tmpvar_3.w; - gl_FragData[0] = c_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-ir.txt deleted file mode 100644 index 1815a29f1..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-ir.txt +++ /dev/null @@ -1,180 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - vec4 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - vec3 viewN; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = IN.hip_pack0.zw; - surfIN.uv_BumpMap = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - float tmpvar_8; - tmpvar_8 = dot (IN.TtoV0, o.Normal); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - viewN.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (IN.TtoV1, o.Normal); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - viewN.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (IN.TtoV2, o.Normal); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - viewN.z = vec3(tmpvar_13).z; - vec3 tmpvar_14; - tmpvar_14 = viewN; - o.Normal = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = ((o.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); - res.xyz = tmpvar_15.xyz.xyz; - float tmpvar_16; - tmpvar_16 = o.Specular; - res.w = vec4(tmpvar_16).w; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyzw; - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN.hip_pack0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN.TtoV0 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN.TtoV1 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN.TtoV2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = frag_surf (xlt_IN); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - xl_retval = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = xl_retval.xyzw; - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - gl_FragData[0] = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-out.txt deleted file mode 100644 index 16f359b20..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-out.txt +++ /dev/null @@ -1,35 +0,0 @@ -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[0]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[2].xyz; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[3].xyz; - vec4 res; - vec3 viewN; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_5; - tmpvar_5 = normal.xyz; - float x; - x = ((texture2D (_MainTex, tmpvar_1.xy).w * _Color.w) - _Cutoff); - if ((x < 0.0)) { - discard; - }; - viewN.x = dot (tmpvar_2, tmpvar_5); - viewN.y = dot (tmpvar_3, tmpvar_5); - viewN.z = dot (tmpvar_4, tmpvar_5); - res.xyz = ((viewN * vec3(0.5, 0.5, -0.5)) + 0.5); - res.w = _Shininess; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-ir.txt deleted file mode 100644 index 3f37d51ac..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-ir.txt +++ /dev/null @@ -1,186 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec2 uv_BumpMap; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_BumpMap, IN.uv_BumpMap); - vec4 tmpvar_8; - tmpvar_8 = UnpackNormal (tmpvar_7); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.Normal = tmpvar_10; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (light.xyz + unity_Ambient.xyz); - light.xyz = tmpvar_11.xyz.xyz; - vec4 tmpvar_12; - tmpvar_12 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - col = tmpvar_13; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = frag_surf (xlt_IN); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_FragData[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-out.txt deleted file mode 100644 index bb9e9711c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-out.txt +++ /dev/null @@ -1,39 +0,0 @@ -uniform vec4 unity_Ambient; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - vec4 light; - vec2 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3.xyz * _Color.xyz); - float tmpvar_5; - tmpvar_5 = (tmpvar_3.w * _Color.w); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float x; - x = (tmpvar_5 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_6; - tmpvar_6 = -(log2 (texture2DProj (_LightBuffer, tmpvar_1))); - light = tmpvar_6; - light.xyz = (tmpvar_6.xyz + unity_Ambient.xyz); - vec4 c; - float tmpvar_7; - tmpvar_7 = (tmpvar_6.w * tmpvar_3.w); - c.xyz = ((tmpvar_4 * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_7)); - c.w = (tmpvar_5 + (tmpvar_7 * _SpecColor.w)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-ir.txt deleted file mode 100644 index bf42aa042..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-ir.txt +++ /dev/null @@ -1,198 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -float UnitySpotCookie ( - in vec4 LightCoord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_LightTexture0, ((LightCoord.xy / LightCoord.w) + 0.5)); - return tmpvar_1.w; -} - -float UnitySpotAttenuate ( - in vec3 LightCoord -) -{ - float tmpvar_1; - tmpvar_1 = dot (LightCoord, LightCoord); - vec2 tmpvar_2; - tmpvar_2 = vec2(tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2.xy; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_LightTextureB0, tmpvar_3); - return tmpvar_4.w; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = UnitySpotCookie (IN._LightCoord); - float tmpvar_12; - tmpvar_12 = UnitySpotAttenuate (IN._LightCoord.xyz); - vec4 tmpvar_13; - tmpvar_13 = LightingLambert (o, lightDir, ((float((IN._LightCoord.z > 0.0)) * tmpvar_11) * tmpvar_12)); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - c = tmpvar_14; - float tmpvar_15; - tmpvar_15 = o.Alpha; - c.w = vec4(tmpvar_15).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-out.txt deleted file mode 100644 index fb00de87a..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-out.txt +++ /dev/null @@ -1,32 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 tmpvar_3; - tmpvar_3 = gl_TexCoord[3]; - vec4 c; - vec4 tmpvar_4; - tmpvar_4 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - float x; - x = (tmpvar_4.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 LightCoord_i0; - LightCoord_i0 = tmpvar_3.xyz; - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (tmpvar_1, normalize (tmpvar_2))) * ((float((tmpvar_3.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_3.xy / tmpvar_3.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (LightCoord_i0, LightCoord_i0))).w)) * 2.0)); - c_i0_i1.w = tmpvar_4.w; - c = c_i0_i1; - c.w = tmpvar_4.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-ir.txt deleted file mode 100644 index 607192b1f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-ir.txt +++ /dev/null @@ -1,196 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = IN.viewDir.xyz; - vec3 tmpvar_10; - tmpvar_10 = normalize (tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = LightingBlinnPhong (o, lightDir, tmpvar_10, 1.0); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - float tmpvar_13; - tmpvar_13 = o.Alpha; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-out.txt deleted file mode 100644 index 4ba47c16c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-out.txt +++ /dev/null @@ -1,36 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4.xyz * _Color.xyz); - float tmpvar_6; - tmpvar_6 = (tmpvar_4.w * _Color.w); - float x; - x = (tmpvar_6 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 c_i0; - float tmpvar_7; - tmpvar_7 = (pow (max (0.0, dot (tmpvar_1, normalize ((tmpvar_2 + normalize (tmpvar_3))))), (_Shininess * 128.0)) * tmpvar_4.w); - c_i0.xyz = ((((tmpvar_5 * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_7)) * 2.0); - c_i0.w = (tmpvar_6 + ((_LightColor0.w * _SpecColor.w) * tmpvar_7)); - c = c_i0; - c.w = tmpvar_6; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-ir.txt deleted file mode 100644 index b8b92f9c2..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-ir.txt +++ /dev/null @@ -1,219 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_14; - tmpvar_14 = vec2(tmpvar_13); - vec2 tmpvar_15; - tmpvar_15 = tmpvar_14.xy; - vec4 tmpvar_16; - tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); - vec4 tmpvar_17; - tmpvar_17 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_18; - tmpvar_18 = LightingBlinnPhong (o, lightDir, tmpvar_12, (tmpvar_16.w * tmpvar_17.w)); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - c = tmpvar_19; - float tmpvar_20; - tmpvar_20 = o.Alpha; - c.w = vec4(tmpvar_20).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-out.txt deleted file mode 100644 index 09ccc25d4..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-out.txt +++ /dev/null @@ -1,44 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[4].xyz; - vec4 c; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5.xyz * _Color.xyz); - float tmpvar_7; - tmpvar_7 = (tmpvar_5.w * _Color.w); - float x; - x = (tmpvar_7 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 tmpvar_8; - tmpvar_8 = normalize (tmpvar_2); - float atten; - atten = (texture2D (_LightTextureB0, vec2(dot (tmpvar_4, tmpvar_4))).w * textureCube (_LightTexture0, tmpvar_4).w); - vec4 c_i0; - float tmpvar_9; - tmpvar_9 = (pow (max (0.0, dot (tmpvar_1, normalize ((tmpvar_8 + normalize (tmpvar_3))))), (_Shininess * 128.0)) * tmpvar_5.w); - c_i0.xyz = ((((tmpvar_6 * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_8))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * (atten * 2.0)); - c_i0.w = (tmpvar_7 + (((_LightColor0.w * _SpecColor.w) * tmpvar_9) * atten)); - c = c_i0; - c.w = tmpvar_7; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-ir.txt deleted file mode 100644 index 03057daa3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-ir.txt +++ /dev/null @@ -1,304 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -vec4 LightingBlinnPhong_PrePass ( - in SurfaceOutput s, - in vec4 light -) -{ - vec4 c; - float spec; - float tmpvar_1; - tmpvar_1 = (light.w * s.Gloss); - spec = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ((s.Albedo * light.xyz) + ((light.xyz * _SpecColor.xyz) * spec)); - c.xyz = tmpvar_2.xyz.xyz; - float tmpvar_3; - tmpvar_3 = (s.Alpha + (spec * _SpecColor.w)); - c.w = vec4(tmpvar_3).w; - return c; -} - -vec3 DecodeLightmap ( - in vec4 color -) -{ - return (2.0 * color.xyz); -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 col; - vec3 lm; - vec3 lmIndirect; - vec3 lmFull; - vec4 light; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_7; - tmpvar_7 = texture2DProj (_LightBuffer, IN.hip_screen); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - light = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = log2 (light); - vec4 tmpvar_10; - tmpvar_10 = -(tmpvar_9); - light = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (unity_Lightmap, IN.hip_lmapFade.xy); - vec3 tmpvar_12; - tmpvar_12 = DecodeLightmap (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12; - lmFull = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = texture2D (unity_LightmapInd, IN.hip_lmapFade.xy); - vec3 tmpvar_15; - tmpvar_15 = DecodeLightmap (tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = tmpvar_15; - lmIndirect = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_saturate (IN.hip_lmapFade.z); - vec3 tmpvar_18; - tmpvar_18 = vec3(tmpvar_17); - vec3 tmpvar_19; - tmpvar_19 = mix (lmIndirect, lmFull, tmpvar_18); - vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - lm = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (light.xyz + lm); - light.xyz = tmpvar_21.xyz.xyz; - vec4 tmpvar_22; - tmpvar_22 = LightingBlinnPhong_PrePass (o, light); - vec4 tmpvar_23; - tmpvar_23 = tmpvar_22; - col = tmpvar_23; - return col; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.hip_screen = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.hip_lmapFade = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag_surf (xlt_IN); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-out.txt deleted file mode 100644 index d22b57507..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-out.txt +++ /dev/null @@ -1,37 +0,0 @@ -uniform sampler2D unity_LightmapInd; -uniform sampler2D unity_Lightmap; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform sampler2D _LightBuffer; -uniform float _Cutoff; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_TexCoord[1]; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 light; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3.xyz * _Color.xyz); - float tmpvar_5; - tmpvar_5 = (tmpvar_3.w * _Color.w); - float x; - x = (tmpvar_5 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_6; - tmpvar_6 = -(log2 (texture2DProj (_LightBuffer, tmpvar_1))); - light = tmpvar_6; - light.xyz = (tmpvar_6.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); - vec4 c; - float tmpvar_7; - tmpvar_7 = (tmpvar_6.w * tmpvar_3.w); - c.xyz = ((tmpvar_4 * light.xyz) + ((light.xyz * _SpecColor.xyz) * tmpvar_7)); - c.w = (tmpvar_5 + (tmpvar_7 * _SpecColor.w)); - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-ir.txt deleted file mode 100644 index c8b173e33..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-ir.txt +++ /dev/null @@ -1,169 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * _Color); - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = c.xyz; - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = c.w; - o.Alpha = tmpvar_4; -} - -vec4 LightingLambert ( - in SurfaceOutput s, - in vec3 lightDir, - in float atten -) -{ - vec4 c; - float diff; - float tmpvar_1; - tmpvar_1 = dot (s.Normal, lightDir); - float tmpvar_2; - tmpvar_2 = max (0.0, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - diff = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((s.Albedo * _LightColor0.xyz) * ((diff * atten) * 2.0)); - c.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = s.Alpha; - c.w = vec4(tmpvar_5).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - float tmpvar_11; - tmpvar_11 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_12; - tmpvar_12 = vec2(tmpvar_11); - vec2 tmpvar_13; - tmpvar_13 = tmpvar_12.xy; - vec4 tmpvar_14; - tmpvar_14 = texture2D (_LightTextureB0, tmpvar_13); - vec4 tmpvar_15; - tmpvar_15 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_16; - tmpvar_16 = LightingLambert (o, lightDir, (tmpvar_14.w * tmpvar_15.w)); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - c = tmpvar_17; - float tmpvar_18; - tmpvar_18 = o.Alpha; - c.w = vec4(tmpvar_18).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN._LightCoord = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-out.txt deleted file mode 100644 index 78761124f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-out.txt +++ /dev/null @@ -1,20 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[3].xyz; - vec4 c; - vec4 tmpvar_2; - tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); - vec4 c_i0_i1; - c_i0_i1.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize (gl_TexCoord[2].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); - c_i0_i1.w = tmpvar_2.w; - c = c_i0_i1; - c.w = tmpvar_2.w; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-ir.txt deleted file mode 100644 index 861eee51b..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-ir.txt +++ /dev/null @@ -1,194 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 tex; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - tex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (tex.xyz * _Color.xyz); - o.Albedo = tmpvar_3; - float tmpvar_4; - tmpvar_4 = tex.w; - o.Gloss = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (tex.w * _Color.w); - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Shininess; - o.Specular = tmpvar_6; -} - -vec4 LightingBlinnPhong ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + ((_LightColor0.xyz * _SpecColor.xyz) * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (s.Alpha + (((_LightColor0.w * _SpecColor.w) * spec) * atten)); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_3; - float tmpvar_4; - tmpvar_4 = 0.0; - o.Specular = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Alpha = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Gloss = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = IN.normal; - o.Normal = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = IN.viewDir.xyz; - vec3 tmpvar_10; - tmpvar_10 = normalize (tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = texture2D (_LightTexture0, IN._LightCoord); - vec4 tmpvar_12; - tmpvar_12 = LightingBlinnPhong (o, lightDir, tmpvar_10, (tmpvar_11.w * 1.0)); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - c = tmpvar_13; - float tmpvar_14; - tmpvar_14 = o.Alpha; - c.w = vec4(tmpvar_14).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_TexCoord[1].xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.normal = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[2].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[3].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec2 tmpvar_11; - tmpvar_11 = gl_TexCoord[4].xy; - vec2 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-out.txt deleted file mode 100644 index 6f5efaf0f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-out.txt +++ /dev/null @@ -1,29 +0,0 @@ -uniform vec4 _SpecColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTexture0; -uniform vec4 _LightColor0; -uniform vec4 _Color; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec4 c; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); - float tmpvar_4; - tmpvar_4 = (tmpvar_3.w * _Color.w); - float atten; - atten = texture2D (_LightTexture0, gl_TexCoord[4].xy).w; - vec4 c_i0; - float tmpvar_5; - tmpvar_5 = (pow (max (0.0, dot (tmpvar_1, normalize ((tmpvar_2 + normalize (gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_3.w); - c_i0.xyz = (((((tmpvar_3.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_5)) * (atten * 2.0)); - c_i0.w = (tmpvar_4 + (((_LightColor0.w * _SpecColor.w) * tmpvar_5) * atten)); - c = c_i0; - c.w = tmpvar_4; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-ir.txt deleted file mode 100644 index 63ac2a6b3..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-ir.txt +++ /dev/null @@ -1,158 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec3 color; - vec3 backContrib; - vec3 nl; - vec3 nh; -}; -uniform sampler2D _TranslucencyMap; -uniform vec3 _TranslucencyColor; -uniform vec4 _TerrainTreeLightColors[4]; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform float _Cutoff; -uniform sampler2D _BumpSpecMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -vec4 frag ( - in v2f i -) -{ - vec4 c; - float spec; - float nh; - float nl; - vec3 translucencyColor; - vec3 lightColor; - int j; - vec3 backContribs; - vec3 light; - float gloss; - vec4 trngls; - float specular; - vec3 albedo; - vec4 col; - int tmpvar_1; - tmpvar_1 = 0; - j = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, i.uv); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - col = tmpvar_3; - xll_clip ((col.w - _Cutoff)); - vec3 tmpvar_4; - tmpvar_4 = (col.xyz * i.color); - albedo = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_BumpSpecMap, i.uv); - float tmpvar_6; - tmpvar_6 = (tmpvar_5.x * 128.0); - specular = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_TranslucencyMap, i.uv); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - trngls = tmpvar_8; - float tmpvar_9; - tmpvar_9 = trngls.w; - gloss = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = gl_LightModel.ambient.xyz; - vec3 tmpvar_11; - tmpvar_11 = (tmpvar_10 * albedo); - light = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = (i.backContrib * trngls.z); - backContribs = tmpvar_12; - while (true) { - if (!((j < 3))) { - break; - }; - vec3 tmpvar_13; - tmpvar_13 = _TerrainTreeLightColors[j].xyz; - lightColor = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = (backContribs[j] * _TranslucencyColor); - translucencyColor = tmpvar_14; - float tmpvar_15; - tmpvar_15 = i.nl[j]; - nl = tmpvar_15; - float tmpvar_16; - tmpvar_16 = i.nh[j]; - nh = tmpvar_16; - float tmpvar_17; - tmpvar_17 = pow (nh, specular); - float tmpvar_18; - tmpvar_18 = (tmpvar_17 * gloss); - spec = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (light + (((albedo * (translucencyColor + nl)) + (_SpecColor.xyz * spec)) * lightColor)); - light = tmpvar_19; - int _post_incdec_tmp; - _post_incdec_tmp = j; - int tmpvar_20; - tmpvar_20 = (j + 1); - j = tmpvar_20; - }; - vec3 tmpvar_21; - tmpvar_21 = (light * 2.0); - c.xyz = tmpvar_21.xyz.xyz; - float tmpvar_22; - tmpvar_22 = 1.0; - c.w = vec4(tmpvar_22).w; - return c; -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_i.color = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_i.backContrib = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_i.nl = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = gl_TexCoord[4].xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - xlt_i.nh = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = frag (xlt_i); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - xl_retval = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = xl_retval.xyzw; - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - gl_FragData[0] = tmpvar_15; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-out.txt deleted file mode 100644 index ae33185e9..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-out.txt +++ /dev/null @@ -1,55 +0,0 @@ -uniform sampler2D _TranslucencyMap; -uniform vec3 _TranslucencyColor; -uniform vec4 _TerrainTreeLightColors[4]; -uniform vec4 _SpecColor; -uniform sampler2D _MainTex; -uniform float _Cutoff; -uniform sampler2D _BumpSpecMap; -void main () -{ - vec2 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xy; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[2].xyz; - vec3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_4 = gl_TexCoord[3].xyz; - tmpvar_5 = gl_TexCoord[4].xyz; - vec4 c; - int j; - vec3 backContribs; - vec3 light; - float gloss; - float specular; - vec3 albedo; - j = 0; - vec4 tmpvar_6; - tmpvar_6 = texture2D (_MainTex, tmpvar_1); - float x; - x = (tmpvar_6.w - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6.xyz * tmpvar_2); - albedo = tmpvar_7; - specular = (texture2D (_BumpSpecMap, tmpvar_1).x * 128.0); - vec4 tmpvar_8; - tmpvar_8 = texture2D (_TranslucencyMap, tmpvar_1); - gloss = tmpvar_8.w; - light = (gl_LightModel.ambient.xyz * tmpvar_7); - backContribs = (tmpvar_3 * tmpvar_8.z); - while (true) { - if ((j >= 3)) { - break; - }; - light = (light + (((albedo * ((backContribs[j] * _TranslucencyColor) + tmpvar_4[j])) + (_SpecColor.xyz * (pow (tmpvar_5[j], specular) * gloss))) * _TerrainTreeLightColors[j].xyz)); - j = (j + 1); - }; - c.xyz = (light * 2.0); - c.w = 1.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-ir.txt deleted file mode 100644 index 421464c32..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-ir.txt +++ /dev/null @@ -1,214 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; -}; -varying vec4 xlv_FOG; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform sampler2D _GlossMap; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_GlossMap, IN.uv_MainTex); - float tmpvar_5; - tmpvar_5 = tmpvar_4.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Color.w; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = _Shininess; - o.Specular = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -vec4 LightingTreeBark ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + (_LightColor0.xyz * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (((_LightColor0.w * spec) * atten) * s.Alpha); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = IN.viewDir.xyz; - vec3 tmpvar_10; - tmpvar_10 = normalize (tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = LightingTreeBark (o, lightDir, tmpvar_10, 1.0); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - c = tmpvar_12; - float tmpvar_13; - tmpvar_13 = 0.0; - c.w = vec4(tmpvar_13).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = frag_surf (xlt_IN); - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_FragData[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-out.txt deleted file mode 100644 index 95002af2d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform vec4 _LightColor0; -uniform sampler2D _GlossMap; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec4 c; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_3; - tmpvar_3 = normal.xyz; - vec4 c_i0_i1; - float tmpvar_4; - tmpvar_4 = (pow (max (0.0, dot (tmpvar_3, normalize ((tmpvar_1 + normalize (gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * texture2D (_GlossMap, tmpvar_2).w); - c_i0_i1.xyz = (((((texture2D (_MainTex, tmpvar_2).xyz * gl_Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_3, tmpvar_1))) + (_LightColor0.xyz * tmpvar_4)) * 2.0); - c_i0_i1.w = ((_LightColor0.w * tmpvar_4) * _Color.w); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-ir.txt deleted file mode 100644 index 0cca7f57f..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-ir.txt +++ /dev/null @@ -1,237 +0,0 @@ -struct SurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _GlossMap; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout SurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_GlossMap, IN.uv_MainTex); - float tmpvar_5; - tmpvar_5 = tmpvar_4.w; - o.Gloss = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _Color.w; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = _Shininess; - o.Specular = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = texture2D (_BumpMap, IN.uv_MainTex); - vec4 tmpvar_9; - tmpvar_9 = UnpackNormal (tmpvar_8); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9.xyz; - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - o.Normal = tmpvar_11; -} - -vec4 LightingTreeBark ( - in SurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = max (0.0, tmpvar_3); - float tmpvar_5; - tmpvar_5 = tmpvar_4; - diff = tmpvar_5; - float tmpvar_6; - tmpvar_6 = dot (s.Normal, h); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - nh = tmpvar_8; - float tmpvar_9; - tmpvar_9 = pow (nh, (s.Specular * 128.0)); - float tmpvar_10; - tmpvar_10 = (tmpvar_9 * s.Gloss); - spec = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = ((((s.Albedo * _LightColor0.xyz) * diff) + (_LightColor0.xyz * spec)) * (atten * 2.0)); - c.xyz = tmpvar_11.xyz.xyz; - float tmpvar_12; - tmpvar_12 = (((_LightColor0.w * spec) * atten) * s.Alpha); - c.w = vec4(tmpvar_12).w; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - SurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - float tmpvar_7; - tmpvar_7 = 0.0; - o.Gloss = tmpvar_7; - surf (surfIN, o); - vec3 tmpvar_8; - tmpvar_8 = IN.lightDir; - lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (lightDir); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - lightDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = IN.viewDir.xyz; - vec3 tmpvar_12; - tmpvar_12 = normalize (tmpvar_11); - float tmpvar_13; - tmpvar_13 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_14; - tmpvar_14 = vec2(tmpvar_13); - vec2 tmpvar_15; - tmpvar_15 = tmpvar_14.xy; - vec4 tmpvar_16; - tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); - vec4 tmpvar_17; - tmpvar_17 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_18; - tmpvar_18 = LightingTreeBark (o, lightDir, tmpvar_12, (tmpvar_16.w * tmpvar_17.w)); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - c = tmpvar_19; - float tmpvar_20; - tmpvar_20 = 0.0; - c.w = vec4(tmpvar_20).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-out.txt deleted file mode 100644 index 5b91da654..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-out.txt +++ /dev/null @@ -1,34 +0,0 @@ -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _GlossMap; -uniform vec4 _Color; -uniform sampler2D _BumpMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[3].xyz; - vec4 c; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_3; - tmpvar_3 = normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = normalize (gl_TexCoord[1].xyz); - float atten; - atten = (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w); - vec4 c_i0_i1; - float tmpvar_5; - tmpvar_5 = (pow (max (0.0, dot (tmpvar_3, normalize ((tmpvar_4 + normalize (gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * texture2D (_GlossMap, tmpvar_2).w); - c_i0_i1.xyz = (((((texture2D (_MainTex, tmpvar_2).xyz * gl_Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_3, tmpvar_4))) + (_LightColor0.xyz * tmpvar_5)) * (atten * 2.0)); - c_i0_i1.w = (((_LightColor0.w * tmpvar_5) * atten) * _Color.w); - c = c_i0_i1; - c.w = 0.0; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-ir.txt deleted file mode 100644 index 6f679448d..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-ir.txt +++ /dev/null @@ -1,383 +0,0 @@ -struct LeafSurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - vec3 Translucency; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -uniform sampler2D _TranslucencyMap; -uniform vec4 _TranslucencyColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _GlossMap; -uniform float _Cutoff; -uniform sampler2D _BumpMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout LeafSurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec3 tmpvar_5; - tmpvar_5 = _TranslucencyColor.xyz; - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_4.xyz * tmpvar_5); - o.Translucency = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_GlossMap, IN.uv_MainTex); - float tmpvar_8; - tmpvar_8 = tmpvar_7.w; - o.Gloss = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (c.w * IN.color.w); - o.Alpha = tmpvar_9; - float tmpvar_10; - tmpvar_10 = _Shininess; - o.Specular = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_MainTex); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec4 LightingTreeLeaf ( - in LeafSurfaceOutput s, - in vec3 lightDir, - in vec3 viewDir, - in float atten -) -{ - vec4 c; - vec3 col; - vec3 translucencyColor; - float trans; - float spec; - float nh; - float diff; - vec3 h; - vec3 tmpvar_1; - tmpvar_1 = normalize ((lightDir + viewDir)); - vec3 tmpvar_2; - tmpvar_2 = tmpvar_1; - h = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (s.Normal, lightDir); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - diff = tmpvar_4; - float tmpvar_5; - tmpvar_5 = dot (s.Normal, h); - float tmpvar_6; - tmpvar_6 = max (0.0, tmpvar_5); - float tmpvar_7; - tmpvar_7 = tmpvar_6; - nh = tmpvar_7; - float tmpvar_8; - tmpvar_8 = pow (nh, (s.Specular * 128.0)); - float tmpvar_9; - tmpvar_9 = (tmpvar_8 * s.Gloss); - spec = tmpvar_9; - float tmpvar_10; - tmpvar_10 = max (0.0, -(diff)); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - trans = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = ((s.Translucency * trans) * 2.0); - translucencyColor = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, ((diff * 0.5) + 0.5)); - float tmpvar_14; - tmpvar_14 = tmpvar_13; - diff = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (s.Albedo * (diff + translucencyColor)); - col = tmpvar_15; - float tmpvar_16; - tmpvar_16 = ceil (trans); - float tmpvar_17; - tmpvar_17 = xll_saturate (tmpvar_16); - vec3 tmpvar_18; - tmpvar_18 = (col + (spec * (1.0 - tmpvar_17))); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col * _LightColor0.xyz); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col * (atten * 2.0)); - c.xyz = tmpvar_20.xyz.xyz; - return c; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 c; - vec3 lightDir; - LeafSurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec3 tmpvar_7; - tmpvar_7 = IN.lightDir; - lightDir = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = normalize (lightDir); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - lightDir = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = IN.viewDir.xyz; - vec3 tmpvar_11; - tmpvar_11 = normalize (tmpvar_10); - float tmpvar_12; - tmpvar_12 = dot (IN._LightCoord, IN._LightCoord); - vec2 tmpvar_13; - tmpvar_13 = vec2(tmpvar_12); - vec2 tmpvar_14; - tmpvar_14 = tmpvar_13.xy; - vec4 tmpvar_15; - tmpvar_15 = texture2D (_LightTextureB0, tmpvar_14); - vec4 tmpvar_16; - tmpvar_16 = textureCube (_LightTexture0, IN._LightCoord); - vec4 tmpvar_17; - tmpvar_17 = LightingTreeLeaf (o, lightDir, tmpvar_11, (tmpvar_15.w * tmpvar_16.w)); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - c = tmpvar_18; - float tmpvar_19; - tmpvar_19 = o.Alpha; - c.w = vec4(tmpvar_19).w; - return c; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_IN.fog = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_TexCoord[0].xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_IN.hip_pack0 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_IN.lop_color = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_IN.lightDir = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = gl_TexCoord[2].xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_IN.viewDir = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = gl_TexCoord[3].xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_IN._LightCoord = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = frag_surf (xlt_IN); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FragData[0] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-out.txt deleted file mode 100644 index 86fb49223..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-out.txt +++ /dev/null @@ -1,54 +0,0 @@ -uniform sampler2D _TranslucencyMap; -uniform vec4 _TranslucencyColor; -uniform float _Shininess; -uniform sampler2D _MainTex; -uniform sampler2D _LightTextureB0; -uniform samplerCube _LightTexture0; -uniform vec4 _LightColor0; -uniform sampler2D _GlossMap; -uniform float _Cutoff; -uniform sampler2D _BumpMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[1].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[3].xyz; - vec4 c; - vec2 tmpvar_4; - tmpvar_4 = gl_TexCoord[0].xy; - vec4 tmpvar_5; - tmpvar_5 = texture2D (_MainTex, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5.xyz * gl_Color.xyz); - vec3 tmpvar_7; - tmpvar_7 = (texture2D (_TranslucencyMap, tmpvar_4).xyz * _TranslucencyColor.xyz); - vec4 tmpvar_8; - tmpvar_8 = texture2D (_GlossMap, tmpvar_4); - float tmpvar_9; - tmpvar_9 = (tmpvar_5.w * gl_Color.w); - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_4).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - vec3 tmpvar_10; - tmpvar_10 = normal.xyz; - float x; - x = (tmpvar_9 - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec3 tmpvar_11; - tmpvar_11 = normalize (tmpvar_1); - vec4 c_i0_i1; - float tmpvar_12; - tmpvar_12 = dot (tmpvar_10, tmpvar_11); - float tmpvar_13; - tmpvar_13 = max (0.0, -(tmpvar_12)); - c_i0_i1.xyz = ((((tmpvar_6 * (max (0.0, ((tmpvar_12 * 0.5) + 0.5)) + ((tmpvar_7 * tmpvar_13) * 2.0))) + ((pow (max (0.0, dot (tmpvar_10, normalize ((tmpvar_11 + normalize (tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_8.w) * (1.0 - clamp (ceil (tmpvar_13), 0.0, 1.0)))) * _LightColor0.xyz) * ((texture2D (_LightTextureB0, vec2(dot (tmpvar_3, tmpvar_3))).w * textureCube (_LightTexture0, tmpvar_3).w) * 2.0)); - c = c_i0_i1; - c.w = tmpvar_9; - gl_FragData[0] = c; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-ir.txt deleted file mode 100644 index 821f30984..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-ir.txt +++ /dev/null @@ -1,383 +0,0 @@ -struct LeafSurfaceOutput { - vec3 Albedo; - vec3 Normal; - vec3 Emission; - vec3 Translucency; - float Specular; - float Gloss; - float Alpha; -}; -struct Input { - vec2 uv_MainTex; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec3 _ShadowCoord0; - vec3 _ShadowCoord1; - vec3 _ShadowCoord2; - vec3 _ShadowCoord3; - vec2 _ShadowZFade; - vec2 hip_pack0; - vec4 lop_color; -}; -uniform sampler2D _TranslucencyMap; -uniform vec4 _TranslucencyColor; -uniform float _Shininess; -uniform sampler2D _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _MainTex; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform sampler2D _GlossMap; -uniform float _Cutoff; -uniform sampler2D _BumpMap; -void xll_clip ( - in float x -) -{ - if ((x < 0.0)) { - discard; - }; -} - -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec2 xll_saturate ( - in vec2 x -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 xll_saturate ( - in vec3 x -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec4 xll_saturate ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -mat2 xll_saturate ( - in mat2 m -) -{ - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; -} - -mat3 xll_saturate ( - in mat3 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -mat4 xll_saturate ( - in mat4 m -) -{ - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; -} - -vec4 UnpackNormal ( - in vec4 packednormal -) -{ - vec4 normal; - vec2 tmpvar_1; - tmpvar_1 = ((packednormal.wy * 2.0) - 1.0); - normal.xy = tmpvar_1.xy.xy; - float tmpvar_2; - tmpvar_2 = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - normal.z = vec3(tmpvar_3).z; - return normal; -} - -void surf ( - in Input IN, - inout LeafSurfaceOutput o -) -{ - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, IN.uv_MainTex); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - c = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (c.xyz * IN.color.xyz); - o.Albedo = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = texture2D (_TranslucencyMap, IN.uv_MainTex); - vec3 tmpvar_5; - tmpvar_5 = _TranslucencyColor.xyz; - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_4.xyz * tmpvar_5); - o.Translucency = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = texture2D (_GlossMap, IN.uv_MainTex); - float tmpvar_8; - tmpvar_8 = tmpvar_7.w; - o.Gloss = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (c.w * IN.color.w); - o.Alpha = tmpvar_9; - float tmpvar_10; - tmpvar_10 = _Shininess; - o.Specular = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = texture2D (_BumpMap, IN.uv_MainTex); - vec4 tmpvar_12; - tmpvar_12 = UnpackNormal (tmpvar_11); - vec3 tmpvar_13; - tmpvar_13 = tmpvar_12.xyz; - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - o.Normal = tmpvar_14; -} - -vec2 EncodeFloatRG ( - in float v -) -{ - vec2 enc; - float kEncodeBit; - vec2 kEncodeMul; - vec2 tmpvar_1; - tmpvar_1 = vec2(1.0, 255.0); - kEncodeMul = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.00392157; - kEncodeBit = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (kEncodeMul * v); - enc = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = fract (enc); - vec2 tmpvar_5; - tmpvar_5 = tmpvar_4; - enc = tmpvar_5; - float tmpvar_6; - tmpvar_6 = (enc.x - (enc.y * kEncodeBit)); - enc.x = tmpvar_6; - return enc; -} - -vec4 frag_surf ( - in v2f_surf IN -) -{ - vec4 res; - float faded; - float shadow; - vec4 coord; - vec4 weights; - vec4 far; - vec4 near; - vec4 z; - LeafSurfaceOutput o; - Input surfIN; - vec2 tmpvar_1; - tmpvar_1 = IN.hip_pack0.xy; - surfIN.uv_MainTex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = IN.lop_color; - surfIN.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = vec3(0.0, 0.0, 0.0); - o.Albedo = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - o.Emission = tmpvar_4; - float tmpvar_5; - tmpvar_5 = 0.0; - o.Specular = tmpvar_5; - float tmpvar_6; - tmpvar_6 = 0.0; - o.Alpha = tmpvar_6; - surf (surfIN, o); - xll_clip ((o.Alpha - _Cutoff)); - vec4 tmpvar_7; - tmpvar_7 = vec4(IN._ShadowZFade.x); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - z = tmpvar_8; - bvec4 tmpvar_9; - tmpvar_9 = greaterThanEqual (z, _LightSplitsNear); - vec4 tmpvar_10; - tmpvar_10 = vec4(tmpvar_9).xyzw; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - near = tmpvar_11; - bvec4 tmpvar_12; - tmpvar_12 = lessThan (z, _LightSplitsFar); - vec4 tmpvar_13; - tmpvar_13 = vec4(tmpvar_12).xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - far = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = (near * far); - weights = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16.w = 1.0; - tmpvar_16.xyz = ((((IN._ShadowCoord0 * weights.x) + (IN._ShadowCoord1 * weights.y)) + (IN._ShadowCoord2 * weights.z)) + (IN._ShadowCoord3 * weights.w)).xyz; - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - coord = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = texture2D (_ShadowMapTexture, coord.xy); - float tmpvar_19; - if ((tmpvar_18.x < coord.z)) { - tmpvar_19 = _LightShadowData.x; - } else { - tmpvar_19 = 1.0; - }; - float tmpvar_20; - tmpvar_20 = tmpvar_19; - shadow = tmpvar_20; - float tmpvar_21; - tmpvar_21 = xll_saturate (IN._ShadowZFade.y); - float tmpvar_22; - tmpvar_22 = xll_saturate ((shadow + tmpvar_21)); - float tmpvar_23; - tmpvar_23 = tmpvar_22; - faded = tmpvar_23; - float tmpvar_24; - tmpvar_24 = faded; - res.x = tmpvar_24; - float tmpvar_25; - tmpvar_25 = 1.0; - res.y = vec2(tmpvar_25).y; - vec2 tmpvar_26; - tmpvar_26 = EncodeFloatRG ((1.0 - (z * _ProjectionParams.w)).x); - vec2 tmpvar_27; - tmpvar_27 = tmpvar_26; - res.zw = tmpvar_27.xxxy.zw; - return res; -} - -void main () -{ - v2f_surf xlt_IN; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_IN.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xyz; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_IN._ShadowCoord0 = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[1].xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - xlt_IN._ShadowCoord1 = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = gl_TexCoord[2].xyz; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - xlt_IN._ShadowCoord2 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = gl_TexCoord[3].xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - xlt_IN._ShadowCoord3 = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10 = gl_TexCoord[4].xy; - vec2 tmpvar_11; - tmpvar_11 = tmpvar_10; - xlt_IN._ShadowZFade = tmpvar_11; - vec2 tmpvar_12; - tmpvar_12 = gl_TexCoord[5].xy; - vec2 tmpvar_13; - tmpvar_13 = tmpvar_12; - xlt_IN.hip_pack0 = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = gl_Color.xyzw; - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - xlt_IN.lop_color = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = frag_surf (xlt_IN); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - xl_retval = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = xl_retval.xyzw; - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - gl_FragData[0] = tmpvar_19; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-out.txt deleted file mode 100644 index 0c588039c..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-out.txt +++ /dev/null @@ -1,57 +0,0 @@ -uniform sampler2D _ShadowMapTexture; -uniform vec4 _ProjectionParams; -uniform sampler2D _MainTex; -uniform vec4 _LightSplitsNear; -uniform vec4 _LightSplitsFar; -uniform vec4 _LightShadowData; -uniform float _Cutoff; -uniform sampler2D _BumpMap; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = gl_TexCoord[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = gl_TexCoord[2].xyz; - vec3 tmpvar_4; - tmpvar_4 = gl_TexCoord[3].xyz; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[4].xy; - vec4 res; - vec2 tmpvar_6; - tmpvar_6 = gl_TexCoord[5].xy; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, tmpvar_6).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - float x; - x = ((texture2D (_MainTex, tmpvar_6).w * gl_Color.w) - _Cutoff); - if ((x < 0.0)) { - discard; - }; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_5.xxxx; - vec4 tmpvar_8; - tmpvar_8 = (vec4(greaterThanEqual (tmpvar_7, _LightSplitsNear)) * vec4(lessThan (tmpvar_7, _LightSplitsFar))); - vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = ((((tmpvar_1 * tmpvar_8.x) + (tmpvar_2 * tmpvar_8.y)) + (tmpvar_3 * tmpvar_8.z)) + (tmpvar_4 * tmpvar_8.w)); - vec4 tmpvar_10; - tmpvar_10 = texture2D (_ShadowMapTexture, tmpvar_9.xy); - float tmpvar_11; - if ((tmpvar_10.x < tmpvar_9.z)) { - tmpvar_11 = _LightShadowData.x; - } else { - tmpvar_11 = 1.0; - }; - res.x = clamp ((tmpvar_11 + clamp (tmpvar_5.y, 0.0, 1.0)), 0.0, 1.0); - res.y = 1.0; - vec2 enc; - vec2 tmpvar_12; - tmpvar_12 = fract ((vec2(1.0, 255.0) * (1.0 - (tmpvar_5.xxxx * _ProjectionParams.w)).x)); - enc = tmpvar_12; - enc.x = (tmpvar_12.x - (tmpvar_12.y * 0.00392157)); - res.zw = enc; - gl_FragData[0] = res; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-ir.txt deleted file mode 100644 index 3f56271e5..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-ir.txt +++ /dev/null @@ -1,55 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 color; - vec2 texcoord; - vec3 normal; -}; -varying vec4 xlv_FOG; -uniform sampler2D _MainTex; -vec4 frag ( - in v2f i -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.texcoord); - return (i.color * tmpvar_1); -} - -void main () -{ - v2f xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = xlv_FOG.x; - xlt_i.fog = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_i.color = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_TexCoord[0].xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_i.texcoord = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = gl_TexCoord[1].xyz; - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_i.normal = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = frag (xlt_i); - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FragData[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-ir.txt deleted file mode 100644 index f7fd80e32..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-ir.txt +++ /dev/null @@ -1,92 +0,0 @@ -struct v2f_img { - vec4 pos; - vec2 uv; -}; -uniform sampler2D _MainTex; -uniform sampler2D _CurTex; -uniform vec4 _AdaptParams; -vec4 frag ( - in v2f_img i -) -{ - vec4 valNew; - vec2 delta; - vec2 valCur; - vec2 valAdapted; - vec4 tmpvar_1; - tmpvar_1 = texture2D (_MainTex, i.uv); - vec2 tmpvar_2; - tmpvar_2 = tmpvar_1.xy; - valAdapted = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = texture2D (_CurTex, i.uv); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3.xy; - valCur = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = ((valCur - valAdapted) * _AdaptParams.x); - delta = tmpvar_5; - float tmpvar_6; - tmpvar_6 = sign (delta.x); - float tmpvar_7; - tmpvar_7 = abs (delta.x); - float tmpvar_8; - tmpvar_8 = max (0.00392157, tmpvar_7); - float tmpvar_9; - tmpvar_9 = (tmpvar_6 * tmpvar_8); - delta.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = sign (delta.y); - float tmpvar_11; - tmpvar_11 = abs (delta.y); - float tmpvar_12; - tmpvar_12 = max (0.00392157, tmpvar_11); - float tmpvar_13; - tmpvar_13 = (tmpvar_10 * tmpvar_12); - delta.y = vec2(tmpvar_13).y; - vec2 tmpvar_14; - tmpvar_14 = (valAdapted + delta); - valNew.xy = tmpvar_14.xy.xy; - float tmpvar_15; - tmpvar_15 = max (valNew.x, _AdaptParams.z); - float tmpvar_16; - tmpvar_16 = tmpvar_15; - valNew.x = tmpvar_16; - float tmpvar_17; - tmpvar_17 = min (valNew.y, _AdaptParams.y); - float tmpvar_18; - tmpvar_18 = tmpvar_17; - valNew.y = vec2(tmpvar_18).y; - float tmpvar_19; - tmpvar_19 = ((valNew.x - valNew.y) + 0.01); - valNew.z = vec3(tmpvar_19).z; - float tmpvar_20; - tmpvar_20 = (valNew.y / valNew.z); - valNew.w = vec4(tmpvar_20).w; - return valNew; -} - -void main () -{ - v2f_img xlt_i; - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - xlt_i.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = gl_TexCoord[0].xy; - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - xlt_i.uv = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = frag (xlt_i); - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - xl_retval = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = xl_retval.xyzw; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - gl_FragData[0] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-out.txt b/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-out.txt deleted file mode 100644 index 7526e60f6..000000000 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-out.txt +++ /dev/null @@ -1,24 +0,0 @@ -uniform sampler2D _MainTex; -uniform sampler2D _CurTex; -uniform vec4 _AdaptParams; -void main () -{ - vec2 tmpvar_1; - tmpvar_1 = gl_TexCoord[0].xy; - vec4 valNew; - vec2 delta; - vec4 tmpvar_2; - tmpvar_2 = texture2D (_MainTex, tmpvar_1); - vec2 tmpvar_3; - tmpvar_3 = ((texture2D (_CurTex, tmpvar_1).xy - tmpvar_2.xy) * _AdaptParams.x); - delta = tmpvar_3; - delta.x = (sign (tmpvar_3.x) * max (0.00392157, abs (tmpvar_3.x))); - delta.y = (sign (delta.y) * max (0.00392157, abs (delta.y))); - valNew.xy = (tmpvar_2.xy + delta); - valNew.x = max (valNew.x, _AdaptParams.z); - valNew.y = min (valNew.y, _AdaptParams.y); - valNew.z = ((valNew.x - valNew.y) + 0.01); - valNew.w = (valNew.y / valNew.z); - gl_FragData[0] = valNew; -} - diff --git a/3rdparty/glsl-optimizer/tests/fragment/varyings-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/varyings-ir.txt index a0b9ec6b6..afd2bd934 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/varyings-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/varyings-ir.txt @@ -1,33 +1,33 @@ varying vec4 xlv_TEXCOORD1; varying vec4 xlv_TEXCOORD0; vec4 xlat_main ( - in vec4 uv, - in vec4 foobar_xlv_foo + in vec4 uv_1, + in vec4 foobar_xlv_foo_2 ) { - vec4 c; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_1; - return c; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); + c_3 = tmpvar_4; + return c_3; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - vec4 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD1.xyzw; - vec4 tmpvar_3; - tmpvar_3 = xlat_main (tmpvar_1, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = xl_retval.xyzw; + vec4 xl_retval_5; vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_FragData[0] = tmpvar_6; + tmpvar_6 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_7; + tmpvar_7 = xlv_TEXCOORD1.xyzw; + vec4 tmpvar_8; + tmpvar_8 = xlat_main (tmpvar_6, tmpvar_7); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xl_retval_5 = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = xl_retval_5.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_FragData[0] = tmpvar_11; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/varyings-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/varyings-irES.txt index 006733700..23fb3c42f 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/varyings-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/varyings-irES.txt @@ -1,33 +1,33 @@ varying highp vec4 xlv_TEXCOORD1; varying highp vec4 xlv_TEXCOORD0; mediump vec4 xlat_main ( - in highp vec4 uv, - in highp vec4 foobar_xlv_foo + in highp vec4 uv_1, + in highp vec4 foobar_xlv_foo_2 ) { - mediump vec4 c; - vec4 tmpvar_1; - tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); - c = tmpvar_1; - return c; + mediump vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); + c_3 = tmpvar_4; + return c_3; } void main () { - mediump vec4 xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = xlv_TEXCOORD0.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = xlv_TEXCOORD1.xyzw; - mediump vec4 tmpvar_3; - tmpvar_3 = xlat_main (tmpvar_1, tmpvar_2); - mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - mediump vec4 tmpvar_5; - tmpvar_5 = xl_retval.xyzw; - mediump vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_FragData[0] = tmpvar_6; + mediump vec4 xl_retval_5; + highp vec4 tmpvar_6; + tmpvar_6 = xlv_TEXCOORD0.xyzw; + highp vec4 tmpvar_7; + tmpvar_7 = xlv_TEXCOORD1.xyzw; + mediump vec4 tmpvar_8; + tmpvar_8 = xlat_main (tmpvar_6, tmpvar_7); + mediump vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xl_retval_5 = tmpvar_9; + mediump vec4 tmpvar_10; + tmpvar_10 = xl_retval_5.xyzw; + mediump vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_FragData[0] = tmpvar_11; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/vface-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/vface-ir.txt index 5b500e20d..e246b3fbd 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/vface-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/vface-ir.txt @@ -1,25 +1,25 @@ varying float xlv_VFACE; vec4 xlat_main ( - in float face + in float face_1 ) { - vec4 tmpvar_1; - tmpvar_1 = vec4(face); - return tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = vec4(face_1); + return tmpvar_2; } void main () { - vec4 xl_retval; - vec4 tmpvar_1; - tmpvar_1 = xlat_main (xlv_VFACE); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; + vec4 xl_retval_3; vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + tmpvar_4 = xlat_main (xlv_VFACE); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + xl_retval_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = xl_retval_3.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + gl_FragData[0] = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/vface-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/vface-irES.txt index da932cc9a..460811842 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/vface-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/vface-irES.txt @@ -1,25 +1,25 @@ varying highp float xlv_VFACE; mediump vec4 xlat_main ( - in highp float face + in highp float face_1 ) { - highp vec4 tmpvar_1; - tmpvar_1 = vec4(face); - return tmpvar_1; + highp vec4 tmpvar_2; + tmpvar_2 = vec4(face_1); + return tmpvar_2; } void main () { - mediump vec4 xl_retval; - mediump vec4 tmpvar_1; - tmpvar_1 = xlat_main (xlv_VFACE); - mediump vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xl_retval = tmpvar_2; - mediump vec4 tmpvar_3; - tmpvar_3 = xl_retval.xyzw; + mediump vec4 xl_retval_3; mediump vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - gl_FragData[0] = tmpvar_4; + tmpvar_4 = xlat_main (xlv_VFACE); + mediump vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + xl_retval_3 = tmpvar_5; + mediump vec4 tmpvar_6; + tmpvar_6 = xl_retval_3.xyzw; + mediump vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + gl_FragData[0] = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/vpos-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/vpos-ir.txt index 22dbab67d..50db7b12c 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/vpos-ir.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/vpos-ir.txt @@ -1,28 +1,28 @@ varying vec2 xlv_VPOS; vec4 xlat_main ( - in vec2 pos + in vec2 pos_1 ) { - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = pos.xy; - return tmpvar_1; + vec4 tmpvar_2; + tmpvar_2.zw = vec2(0.0, 0.0); + tmpvar_2.xy = pos_1.xy; + return tmpvar_2; } void main () { - vec4 xl_retval; - vec2 tmpvar_1; - tmpvar_1 = xlv_VPOS.xy; - vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; + vec4 xl_retval_3; + vec2 tmpvar_4; + tmpvar_4 = xlv_VPOS.xy; vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + tmpvar_5 = xlat_main (tmpvar_4); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + xl_retval_3 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = xl_retval_3.xyzw; + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + gl_FragData[0] = tmpvar_8; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/vpos-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/vpos-irES.txt index e4c4c240c..ccaa15269 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/vpos-irES.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/vpos-irES.txt @@ -1,28 +1,28 @@ varying highp vec2 xlv_VPOS; mediump vec4 xlat_main ( - in highp vec2 pos + in highp vec2 pos_1 ) { - highp vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = pos.xy; - return tmpvar_1; + highp vec4 tmpvar_2; + tmpvar_2.zw = vec2(0.0, 0.0); + tmpvar_2.xy = pos_1.xy; + return tmpvar_2; } void main () { - mediump vec4 xl_retval; - highp vec2 tmpvar_1; - tmpvar_1 = xlv_VPOS.xy; - mediump vec4 tmpvar_2; - tmpvar_2 = xlat_main (tmpvar_1); - mediump vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - xl_retval = tmpvar_3; - mediump vec4 tmpvar_4; - tmpvar_4 = xl_retval.xyzw; + mediump vec4 xl_retval_3; + highp vec2 tmpvar_4; + tmpvar_4 = xlv_VPOS.xy; mediump vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FragData[0] = tmpvar_5; + tmpvar_5 = xlat_main (tmpvar_4); + mediump vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + xl_retval_3 = tmpvar_6; + mediump vec4 tmpvar_7; + tmpvar_7 = xl_retval_3.xyzw; + mediump vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + gl_FragData[0] = tmpvar_8; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-alphabumpspec-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-ir.txt new file mode 100644 index 000000000..abf75c161 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-ir.txt @@ -0,0 +1,215 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 vlight; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 tex_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + tex_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (tex_8.xyz * _Color.xyz); + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = tex_8.w; + o_7.Gloss = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (tex_8.w * _Color.w); + o_7.Alpha = tmpvar_13; + float tmpvar_14; + tmpvar_14 = _Shininess; + o_7.Specular = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_16; + tmpvar_16 = UnpackNormal (tmpvar_15); + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16.xyz; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + o_7.Normal = tmpvar_18; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_19, + in vec3 lightDir_20, + in vec3 viewDir_21, + in float atten_22 +) +{ + vec4 c_23; + float spec_24; + float nh_25; + float diff_26; + vec3 h_27; + vec3 tmpvar_28; + tmpvar_28 = normalize ((lightDir_20 + viewDir_21)); + vec3 tmpvar_29; + tmpvar_29 = tmpvar_28; + h_27 = tmpvar_29; + float tmpvar_30; + tmpvar_30 = dot (s_19.Normal, lightDir_20); + float tmpvar_31; + tmpvar_31 = max (0.0, tmpvar_30); + float tmpvar_32; + tmpvar_32 = tmpvar_31; + diff_26 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = dot (s_19.Normal, h_27); + float tmpvar_34; + tmpvar_34 = max (0.0, tmpvar_33); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + nh_25 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = pow (nh_25, (s_19.Specular * 128.0)); + float tmpvar_37; + tmpvar_37 = (tmpvar_36 * s_19.Gloss); + spec_24 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = ((((s_19.Albedo * _LightColor0.xyz) * diff_26) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_24)) * (atten_22 * 2.0)); + c_23.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = (s_19.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_24) * atten_22)); + c_23.w = vec4(tmpvar_39).w; + return c_23; +} + +vec4 frag_surf ( + in v2f_surf IN_40 +) +{ + vec4 c_41; + float atten_42; + SurfaceOutput o_43; + Input surfIN_44; + float tmpvar_45; + tmpvar_45 = 1.0; + atten_42 = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = IN_40.hip_pack0.xy; + surfIN_44.uv_MainTex = tmpvar_46; + vec2 tmpvar_47; + tmpvar_47 = IN_40.hip_pack0.zw; + surfIN_44.uv_BumpMap = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_43.Albedo = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = vec3(0.0, 0.0, 0.0); + o_43.Emission = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_43.Specular = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + o_43.Alpha = tmpvar_51; + float tmpvar_52; + tmpvar_52 = 0.0; + o_43.Gloss = tmpvar_52; + surf (surfIN_44, o_43); + vec3 tmpvar_53; + tmpvar_53 = IN_40.viewDir.xyz; + vec3 tmpvar_54; + tmpvar_54 = normalize (tmpvar_53); + vec4 tmpvar_55; + tmpvar_55 = LightingBlinnPhong (o_43, IN_40.lightDir, tmpvar_54, atten_42); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + c_41 = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = (c_41.xyz + (o_43.Albedo * IN_40.vlight)); + c_41.xyz = tmpvar_57.xyz.xyz; + float tmpvar_58; + tmpvar_58 = o_43.Alpha; + c_41.w = vec4(tmpvar_58).w; + return c_41; +} + +void main () +{ + v2f_surf xlt_IN_59; + vec4 xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_59.pos = tmpvar_61; + float tmpvar_62; + tmpvar_62 = xlv_FOG.x; + xlt_IN_59.fog = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = gl_TexCoord[0].xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_IN_59.hip_pack0 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = gl_TexCoord[1].xyz; + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_IN_59.viewDir = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = gl_TexCoord[2].xyz; + vec3 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_IN_59.lightDir = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = gl_TexCoord[3].xyz; + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_59.vlight = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = frag_surf (xlt_IN_59); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xl_retval_60 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = xl_retval_60.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + gl_FragData[0] = tmpvar_74; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-out.txt new file mode 100644 index 000000000..ae6fb642b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-out.txt @@ -0,0 +1,32 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + vec3 tmpvar_5; + tmpvar_5 = (tmpvar_4.xyz * _Color.xyz); + float tmpvar_6; + tmpvar_6 = (tmpvar_4.w * _Color.w); + vec4 normal_7; + normal_7.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_7.z = sqrt(((1.0 - (normal_7.x * normal_7.x)) - (normal_7.y * normal_7.y))); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (pow (max (0.0, dot (normal_7.xyz, normalize((tmpvar_2 + normalize(gl_TexCoord[1].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_8.xyz = ((((tmpvar_5 * _LightColor0.xyz) * max (0.0, dot (normal_7.xyz, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * 2.0); + c_8.w = (tmpvar_6 + ((_LightColor0.w * _SpecColor.w) * tmpvar_9)); + c_3.xyz = (c_8.xyz + (tmpvar_5 * gl_TexCoord[3].xyz)); + c_3.w = tmpvar_6; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-collectshadows-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-ir.txt new file mode 100644 index 000000000..e99e4b44f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-ir.txt @@ -0,0 +1,191 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec3 ray; +}; +uniform vec4 _ZBufferParams; +uniform mat4 _View2Shadow3; +uniform mat4 _View2Shadow2; +uniform mat4 _View2Shadow1; +uniform mat4 _View2Shadow; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform sampler2D _CameraDepthTexture; +float unitySampleShadow ( + in vec4 eyePos_1 +) +{ + float shadow_2; + vec4 coord_3; + vec4 weights_4; + vec4 far_5; + vec4 near_6; + float z_7; + vec3 sc3_8; + vec3 sc2_9; + vec3 sc1_10; + vec3 sc0_11; + vec3 tmpvar_12; + tmpvar_12 = (_View2Shadow * eyePos_1).xyz; + sc0_11 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (_View2Shadow1 * eyePos_1).xyz; + sc1_10 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = (_View2Shadow2 * eyePos_1).xyz; + sc2_9 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (_View2Shadow3 * eyePos_1).xyz; + sc3_8 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = eyePos_1.z; + z_7 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = vec4(z_7); + bvec4 tmpvar_18; + tmpvar_18 = greaterThanEqual (tmpvar_17, _LightSplitsNear); + vec4 tmpvar_19; + tmpvar_19 = vec4(tmpvar_18).xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + near_6 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(z_7); + bvec4 tmpvar_22; + tmpvar_22 = lessThan (tmpvar_21, _LightSplitsFar); + vec4 tmpvar_23; + tmpvar_23 = vec4(tmpvar_22).xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + far_5 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (near_6 * far_5); + weights_4 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26.w = 1.0; + tmpvar_26.xyz = ((((sc0_11 * weights_4.x) + (sc1_10 * weights_4.y)) + (sc2_9 * weights_4.z)) + (sc3_8 * weights_4.w)).xyz; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + coord_3 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_ShadowMapTexture, coord_3.xy); + float tmpvar_29; + if ((tmpvar_28.x < coord_3.z)) { + tmpvar_29 = _LightShadowData.x; + } else { + tmpvar_29 = 1.0; + }; + float tmpvar_30; + tmpvar_30 = tmpvar_29; + shadow_2 = tmpvar_30; + return shadow_2; +} + +float Linear01Depth ( + in float z_31 +) +{ + return (1.0 / ((_ZBufferParams.x * z_31) + _ZBufferParams.y)); +} + +vec2 EncodeFloatRG ( + in float v_32 +) +{ + vec2 enc_33; + float kEncodeBit_34; + vec2 kEncodeMul_35; + vec2 tmpvar_36; + tmpvar_36 = vec2(1.0, 255.0); + kEncodeMul_35 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.00392157; + kEncodeBit_34 = tmpvar_37; + vec2 tmpvar_38; + tmpvar_38 = (kEncodeMul_35 * v_32); + enc_33 = tmpvar_38; + vec2 tmpvar_39; + tmpvar_39 = fract (enc_33); + vec2 tmpvar_40; + tmpvar_40 = tmpvar_39; + enc_33 = tmpvar_40; + float tmpvar_41; + tmpvar_41 = (enc_33.x - (enc_33.y * kEncodeBit_34)); + enc_33.x = tmpvar_41; + return enc_33; +} + +vec4 xlat_main ( + in v2f i_42 +) +{ + vec4 res_43; + float shadow_44; + vec4 vpos_45; + float depth_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_CameraDepthTexture, i_42.uv); + float tmpvar_48; + tmpvar_48 = tmpvar_47.x; + depth_46 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = Linear01Depth (depth_46); + float tmpvar_50; + tmpvar_50 = tmpvar_49; + depth_46 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 1.0; + tmpvar_51.xyz = (i_42.ray * depth_46).xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + vpos_45 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = unitySampleShadow (vpos_45); + float tmpvar_54; + tmpvar_54 = tmpvar_53; + shadow_44 = tmpvar_54; + float tmpvar_55; + tmpvar_55 = shadow_44; + res_43.x = tmpvar_55; + float tmpvar_56; + tmpvar_56 = 1.0; + res_43.y = vec2(tmpvar_56).y; + vec2 tmpvar_57; + tmpvar_57 = EncodeFloatRG ((1.0 - depth_46)); + vec2 tmpvar_58; + tmpvar_58 = tmpvar_57; + res_43.zw = tmpvar_58.xxxy.zw; + return res_43; +} + +void main () +{ + v2f xlt_i_59; + vec4 xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_59.pos = tmpvar_61; + vec2 tmpvar_62; + tmpvar_62 = gl_TexCoord[0].xy; + vec2 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_i_59.uv = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = gl_TexCoord[1].xyz; + vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_i_59.ray = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = xlat_main (xlt_i_59); + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xl_retval_60 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = xl_retval_60.xyzw; + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + gl_FragData[0] = tmpvar_69; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-irES.txt new file mode 100644 index 000000000..1d7a10e0b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-irES.txt @@ -0,0 +1,193 @@ +struct v2f { + highp vec4 pos; + highp vec2 uv; + highp vec3 ray; +}; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +uniform highp vec4 _ZBufferParams; +uniform highp mat4 _View2Shadow3; +uniform highp mat4 _View2Shadow2; +uniform highp mat4 _View2Shadow1; +uniform highp mat4 _View2Shadow; +uniform sampler2D _ShadowMapTexture; +uniform highp vec4 _LightSplitsNear; +uniform highp vec4 _LightSplitsFar; +uniform highp vec4 _LightShadowData; +uniform sampler2D _CameraDepthTexture; +mediump float unitySampleShadow ( + in highp vec4 eyePos_1 +) +{ + mediump float shadow_2; + highp vec4 coord_3; + highp vec4 weights_4; + highp vec4 far_5; + highp vec4 near_6; + highp float z_7; + highp vec3 sc3_8; + highp vec3 sc2_9; + highp vec3 sc1_10; + highp vec3 sc0_11; + highp vec3 tmpvar_12; + tmpvar_12 = (_View2Shadow * eyePos_1).xyz; + sc0_11 = tmpvar_12; + highp vec3 tmpvar_13; + tmpvar_13 = (_View2Shadow1 * eyePos_1).xyz; + sc1_10 = tmpvar_13; + highp vec3 tmpvar_14; + tmpvar_14 = (_View2Shadow2 * eyePos_1).xyz; + sc2_9 = tmpvar_14; + highp vec3 tmpvar_15; + tmpvar_15 = (_View2Shadow3 * eyePos_1).xyz; + sc3_8 = tmpvar_15; + highp float tmpvar_16; + tmpvar_16 = eyePos_1.z; + z_7 = tmpvar_16; + highp vec4 tmpvar_17; + tmpvar_17 = vec4(z_7); + bvec4 tmpvar_18; + tmpvar_18 = greaterThanEqual (tmpvar_17, _LightSplitsNear); + lowp vec4 tmpvar_19; + tmpvar_19 = vec4(tmpvar_18).xyzw; + lowp vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + near_6 = tmpvar_20; + highp vec4 tmpvar_21; + tmpvar_21 = vec4(z_7); + bvec4 tmpvar_22; + tmpvar_22 = lessThan (tmpvar_21, _LightSplitsFar); + lowp vec4 tmpvar_23; + tmpvar_23 = vec4(tmpvar_22).xyzw; + lowp vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + far_5 = tmpvar_24; + highp vec4 tmpvar_25; + tmpvar_25 = (near_6 * far_5); + weights_4 = tmpvar_25; + highp vec4 tmpvar_26; + tmpvar_26.w = 1.0; + tmpvar_26.xyz = ((((sc0_11 * weights_4.x) + (sc1_10 * weights_4.y)) + (sc2_9 * weights_4.z)) + (sc3_8 * weights_4.w)).xyz; + highp vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + coord_3 = tmpvar_27; + lowp vec4 tmpvar_28; + tmpvar_28 = texture2D (_ShadowMapTexture, coord_3.xy); + highp float tmpvar_29; + if ((tmpvar_28.x < coord_3.z)) { + tmpvar_29 = _LightShadowData.x; + } else { + tmpvar_29 = 1.0; + }; + highp float tmpvar_30; + tmpvar_30 = tmpvar_29; + shadow_2 = tmpvar_30; + return shadow_2; +} + +float Linear01Depth ( + in highp float z_31 +) +{ + return (1.0 / ((_ZBufferParams.x * z_31) + _ZBufferParams.y)); +} + +vec2 EncodeFloatRG ( + in highp float v_32 +) +{ + highp vec2 enc_33; + highp float kEncodeBit_34; + highp vec2 kEncodeMul_35; + vec2 tmpvar_36; + tmpvar_36 = vec2(1.0, 255.0); + kEncodeMul_35 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.00392157; + kEncodeBit_34 = tmpvar_37; + highp vec2 tmpvar_38; + tmpvar_38 = (kEncodeMul_35 * v_32); + enc_33 = tmpvar_38; + highp vec2 tmpvar_39; + tmpvar_39 = fract (enc_33); + highp vec2 tmpvar_40; + tmpvar_40 = tmpvar_39; + enc_33 = tmpvar_40; + highp float tmpvar_41; + tmpvar_41 = (enc_33.x - (enc_33.y * kEncodeBit_34)); + enc_33.x = tmpvar_41; + return enc_33; +} + +mediump vec4 xlat_main ( + in v2f i_42 +) +{ + highp vec4 res_43; + mediump float shadow_44; + highp vec4 vpos_45; + highp float depth_46; + lowp vec4 tmpvar_47; + tmpvar_47 = texture2D (_CameraDepthTexture, i_42.uv); + lowp float tmpvar_48; + tmpvar_48 = tmpvar_47.x; + depth_46 = tmpvar_48; + highp float tmpvar_49; + tmpvar_49 = Linear01Depth (depth_46); + highp float tmpvar_50; + tmpvar_50 = tmpvar_49; + depth_46 = tmpvar_50; + highp vec4 tmpvar_51; + tmpvar_51.w = 1.0; + tmpvar_51.xyz = (i_42.ray * depth_46).xyz; + highp vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + vpos_45 = tmpvar_52; + mediump float tmpvar_53; + tmpvar_53 = unitySampleShadow (vpos_45); + mediump float tmpvar_54; + tmpvar_54 = tmpvar_53; + shadow_44 = tmpvar_54; + mediump float tmpvar_55; + tmpvar_55 = shadow_44; + res_43.x = tmpvar_55; + float tmpvar_56; + tmpvar_56 = 1.0; + res_43.y = vec2(tmpvar_56).y; + highp vec2 tmpvar_57; + tmpvar_57 = EncodeFloatRG ((1.0 - depth_46)); + highp vec2 tmpvar_58; + tmpvar_58 = tmpvar_57; + res_43.zw = tmpvar_58.xxxy.zw; + return res_43; +} + +void main () +{ + v2f xlt_i_59; + mediump vec4 xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_59.pos = tmpvar_61; + highp vec2 tmpvar_62; + tmpvar_62 = xlv_TEXCOORD0.xy; + highp vec2 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_i_59.uv = tmpvar_63; + highp vec3 tmpvar_64; + tmpvar_64 = xlv_TEXCOORD1.xyz; + highp vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_i_59.ray = tmpvar_65; + mediump vec4 tmpvar_66; + tmpvar_66 = xlat_main (xlt_i_59); + mediump vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xl_retval_60 = tmpvar_67; + mediump vec4 tmpvar_68; + tmpvar_68 = xl_retval_60.xyzw; + mediump vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + gl_FragData[0] = tmpvar_69; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-out.txt new file mode 100644 index 000000000..cc27c68fd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-out.txt @@ -0,0 +1,42 @@ +uniform vec4 _ZBufferParams; +uniform mat4 _View2Shadow3; +uniform mat4 _View2Shadow2; +uniform mat4 _View2Shadow1; +uniform mat4 _View2Shadow; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform sampler2D _CameraDepthTexture; +void main () +{ + vec4 res_1; + float tmpvar_2; + tmpvar_2 = (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, gl_TexCoord[0].xy).x) + _ZBufferParams.y))); + vec4 tmpvar_3; + tmpvar_3.w = 1.0; + tmpvar_3.xyz = (gl_TexCoord[1].xyz * tmpvar_2); + vec4 tmpvar_4; + tmpvar_4 = (vec4(greaterThanEqual (tmpvar_3.zzzz, _LightSplitsNear)) * vec4(lessThan (tmpvar_3.zzzz, _LightSplitsFar))); + vec4 tmpvar_5; + tmpvar_5.w = 1.0; + tmpvar_5.xyz = (((((_View2Shadow * tmpvar_3).xyz * tmpvar_4.x) + ((_View2Shadow1 * tmpvar_3).xyz * tmpvar_4.y)) + ((_View2Shadow2 * tmpvar_3).xyz * tmpvar_4.z)) + ((_View2Shadow3 * tmpvar_3).xyz * tmpvar_4.w)); + vec4 tmpvar_6; + tmpvar_6 = texture2D (_ShadowMapTexture, tmpvar_5.xy); + float tmpvar_7; + if ((tmpvar_6.x < tmpvar_5.z)) { + tmpvar_7 = _LightShadowData.x; + } else { + tmpvar_7 = 1.0; + }; + res_1.x = tmpvar_7; + res_1.y = 1.0; + vec2 enc_8; + vec2 tmpvar_9; + tmpvar_9 = fract((vec2(1.0, 255.0) * (1.0 - tmpvar_2))); + enc_8.y = tmpvar_9.y; + enc_8.x = (tmpvar_9.x - (tmpvar_9.y * 0.00392157)); + res_1.zw = enc_8; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES.txt new file mode 100644 index 000000000..9c7b5e804 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES.txt @@ -0,0 +1,65 @@ +varying highp vec3 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +uniform highp vec4 _ZBufferParams; +uniform highp mat4 _View2Shadow3; +uniform highp mat4 _View2Shadow2; +uniform highp mat4 _View2Shadow1; +uniform highp mat4 _View2Shadow; +uniform sampler2D _ShadowMapTexture; +uniform highp vec4 _LightSplitsNear; +uniform highp vec4 _LightSplitsFar; +uniform highp vec4 _LightShadowData; +uniform sampler2D _CameraDepthTexture; +void main () +{ + mediump vec4 tmpvar_1; + highp vec4 res_2; + highp float depth_3; + lowp float tmpvar_4; + tmpvar_4 = texture2D (_CameraDepthTexture, xlv_TEXCOORD0).x; + depth_3 = tmpvar_4; + highp float tmpvar_5; + tmpvar_5 = (1.0/(((_ZBufferParams.x * depth_3) + _ZBufferParams.y))); + depth_3 = tmpvar_5; + highp vec4 tmpvar_6; + tmpvar_6.w = 1.0; + tmpvar_6.xyz = (xlv_TEXCOORD1 * tmpvar_5); + mediump float shadow_7; + highp vec4 far_8; + highp vec4 near_9; + bvec4 tmpvar_10; + tmpvar_10 = greaterThanEqual (tmpvar_6.zzzz, _LightSplitsNear); + lowp vec4 tmpvar_11; + tmpvar_11 = vec4(tmpvar_10); + near_9 = tmpvar_11; + bvec4 tmpvar_12; + tmpvar_12 = lessThan (tmpvar_6.zzzz, _LightSplitsFar); + lowp vec4 tmpvar_13; + tmpvar_13 = vec4(tmpvar_12); + far_8 = tmpvar_13; + highp vec4 tmpvar_14; + tmpvar_14 = (near_9 * far_8); + highp vec4 tmpvar_15; + tmpvar_15.w = 1.0; + tmpvar_15.xyz = (((((_View2Shadow * tmpvar_6).xyz * tmpvar_14.x) + ((_View2Shadow1 * tmpvar_6).xyz * tmpvar_14.y)) + ((_View2Shadow2 * tmpvar_6).xyz * tmpvar_14.z)) + ((_View2Shadow3 * tmpvar_6).xyz * tmpvar_14.w)); + lowp vec4 tmpvar_16; + tmpvar_16 = texture2D (_ShadowMapTexture, tmpvar_15.xy); + highp float tmpvar_17; + if ((tmpvar_16.x < tmpvar_15.z)) { + tmpvar_17 = _LightShadowData.x; + } else { + tmpvar_17 = 1.0; + }; + shadow_7 = tmpvar_17; + res_2.x = shadow_7; + res_2.y = 1.0; + highp vec2 enc_18; + highp vec2 tmpvar_19; + tmpvar_19 = fract((vec2(1.0, 255.0) * (1.0 - tmpvar_5))); + enc_18.y = tmpvar_19.y; + enc_18.x = (tmpvar_19.x - (tmpvar_19.y * 0.00392157)); + res_2.zw = enc_18; + tmpvar_1 = res_2; + gl_FragData[0] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-flare-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-flare-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-flare-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-flare-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-flare-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-flare-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-flare-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-flare-ir.txt new file mode 100644 index 000000000..7e498cb94 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-flare-ir.txt @@ -0,0 +1,30 @@ +uniform sampler2D _FlareTexture; +vec4 xlat_main ( + in vec4 color_1, + in vec2 texcoord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2D (_FlareTexture, texcoord_2); + return (tmpvar_3 * color_1); +} + +void main () +{ + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = gl_Color.xyzw; + vec2 tmpvar_6; + tmpvar_6 = gl_TexCoord[0].xy; + vec4 tmpvar_7; + tmpvar_7 = xlat_main (tmpvar_5, tmpvar_6); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + xl_retval_4 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = xl_retval_4.xyzw; + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + gl_FragData[0] = tmpvar_10; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-flare-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-flare-irES.txt new file mode 100644 index 000000000..5640c2c78 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-flare-irES.txt @@ -0,0 +1,32 @@ +varying highp vec2 xlv_TEXCOORD0; +varying lowp vec4 xlv_COLOR; +uniform sampler2D _FlareTexture; +lowp vec4 xlat_main ( + in lowp vec4 color_1, + in highp vec2 texcoord_2 +) +{ + lowp vec4 tmpvar_3; + tmpvar_3 = texture2D (_FlareTexture, texcoord_2); + return (tmpvar_3 * color_1); +} + +void main () +{ + lowp vec4 xl_retval_4; + lowp vec4 tmpvar_5; + tmpvar_5 = xlv_COLOR.xyzw; + highp vec2 tmpvar_6; + tmpvar_6 = xlv_TEXCOORD0.xy; + lowp vec4 tmpvar_7; + tmpvar_7 = xlat_main (tmpvar_5, tmpvar_6); + lowp vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + xl_retval_4 = tmpvar_8; + lowp vec4 tmpvar_9; + tmpvar_9 = xl_retval_4.xyzw; + lowp vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + gl_FragData[0] = tmpvar_10; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-flare-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-flare-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-flare-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-flare-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-flare-outES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-flare-outES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-flare-outES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-ir.txt new file mode 100644 index 000000000..4e5305b3e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-ir.txt @@ -0,0 +1,603 @@ +#extension GL_ARB_shader_texture_lod : enable +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +vec4 xll_tex2Dgrad ( + in sampler2D s_4, + in vec2 coord_5, + in vec2 ddx_6, + in vec2 ddy_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = texture2DGradARB (s_4, coord_5, ddx_6, ddy_7); + return tmpvar_8; +} + +vec4 FxaaTexOff ( + in sampler2D tex_9, + in vec2 pos_10, + in vec2 off_11, + in vec2 rcpFrame_12 +) +{ + vec4 tmpvar_13; + tmpvar_13.zw = vec2(0.0, 0.0); + tmpvar_13.xy = (pos_10.xy + (off_11 * rcpFrame_12)).xy; + vec4 tmpvar_14; + tmpvar_14 = xll_tex2Dlod (tex_9, tmpvar_13); + return tmpvar_14; +} + +vec4 FxaaTexLod0 ( + in sampler2D tex_15, + in vec2 pos_16 +) +{ + vec4 tmpvar_17; + tmpvar_17.zw = vec2(0.0, 0.0); + tmpvar_17.xy = pos_16.xy.xy; + vec4 tmpvar_18; + tmpvar_18 = xll_tex2Dlod (tex_15, tmpvar_17); + return tmpvar_18; +} + +vec4 FxaaTexGrad ( + in sampler2D tex_19, + in vec2 pos_20, + in vec2 grad_21 +) +{ + vec4 tmpvar_22; + tmpvar_22 = xll_tex2Dgrad (tex_19, pos_20.xy, grad_21, grad_21); + return tmpvar_22; +} + +float FxaaLuma ( + in vec3 rgb_23 +) +{ + return ((rgb_23.y * 1.96321) + rgb_23.x); +} + +vec3 FxaaLerp3 ( + in vec3 a_24, + in vec3 b_25, + in float amountOfA_26 +) +{ + vec3 tmpvar_27; + tmpvar_27.x = -(amountOfA_26); + tmpvar_27.y = -(amountOfA_26); + tmpvar_27.z = -(amountOfA_26); + vec3 tmpvar_28; + tmpvar_28.x = amountOfA_26; + tmpvar_28.y = amountOfA_26; + tmpvar_28.z = amountOfA_26; + return ((tmpvar_27 * b_25) + ((a_24 * tmpvar_28) + b_25)); +} + +vec3 FxaaFilterReturn ( + in vec3 rgb_29 +) +{ + return rgb_29; +} + +vec3 FxaaPixelShader ( + in vec2 pos_30, + in sampler2D tex_31, + in vec2 rcpFrame_32 +) +{ + vec3 rgbF_33; + float subPixelOffset_34; + float spanLength_35; + bool directionN_36; + float dstP_37; + float dstN_38; + int i_39; + bool doneP_40; + bool doneN_41; + float lumaEndP_42; + float lumaEndN_43; + vec2 offNP_44; + vec2 posP_45; + vec2 posN_46; + bool pairN_47; + float gradientS_48; + float gradientN_49; + float lengthSign_50; + bool horzSpan_51; + float edgeHorz_52; + float edgeVert_53; + float lumaSE_54; + float lumaSW_55; + float lumaNE_56; + float lumaNW_57; + vec3 rgbSE_58; + vec3 rgbSW_59; + vec3 rgbNE_60; + vec3 rgbNW_61; + float blendL_62; + float rangeL_63; + float lumaL_64; + vec3 rgbL_65; + float range_66; + float rangeMax_67; + float rangeMin_68; + float lumaS_69; + float lumaE_70; + float lumaM_71; + float lumaW_72; + float lumaN_73; + vec3 rgbS_74; + vec3 rgbE_75; + vec3 rgbM_76; + vec3 rgbW_77; + vec3 rgbN_78; + bool tmpvar_79; + tmpvar_79 = bool(0); + doneN_41 = tmpvar_79; + bool tmpvar_80; + tmpvar_80 = bool(0); + doneP_40 = tmpvar_80; + int tmpvar_81; + tmpvar_81 = 0; + i_39 = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = FxaaTexOff (tex_31, pos_30.xy, vec2(0.0, -1.0), rcpFrame_32); + vec3 tmpvar_83; + tmpvar_83 = tmpvar_82.xyz; + rgbN_78 = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = FxaaTexOff (tex_31, pos_30.xy, vec2(-1.0, 0.0), rcpFrame_32); + vec3 tmpvar_85; + tmpvar_85 = tmpvar_84.xyz; + rgbW_77 = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86 = FxaaTexOff (tex_31, pos_30.xy, vec2(0.0, 0.0), rcpFrame_32); + vec3 tmpvar_87; + tmpvar_87 = tmpvar_86.xyz; + rgbM_76 = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = FxaaTexOff (tex_31, pos_30.xy, vec2(1.0, 0.0), rcpFrame_32); + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88.xyz; + rgbE_75 = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = FxaaTexOff (tex_31, pos_30.xy, vec2(0.0, 1.0), rcpFrame_32); + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90.xyz; + rgbS_74 = tmpvar_91; + float tmpvar_92; + tmpvar_92 = FxaaLuma (rgbN_78); + float tmpvar_93; + tmpvar_93 = tmpvar_92; + lumaN_73 = tmpvar_93; + float tmpvar_94; + tmpvar_94 = FxaaLuma (rgbW_77); + float tmpvar_95; + tmpvar_95 = tmpvar_94; + lumaW_72 = tmpvar_95; + float tmpvar_96; + tmpvar_96 = FxaaLuma (rgbM_76); + float tmpvar_97; + tmpvar_97 = tmpvar_96; + lumaM_71 = tmpvar_97; + float tmpvar_98; + tmpvar_98 = FxaaLuma (rgbE_75); + float tmpvar_99; + tmpvar_99 = tmpvar_98; + lumaE_70 = tmpvar_99; + float tmpvar_100; + tmpvar_100 = FxaaLuma (rgbS_74); + float tmpvar_101; + tmpvar_101 = tmpvar_100; + lumaS_69 = tmpvar_101; + float tmpvar_102; + tmpvar_102 = min (lumaN_73, lumaW_72); + float tmpvar_103; + tmpvar_103 = min (lumaS_69, lumaE_70); + float tmpvar_104; + tmpvar_104 = min (tmpvar_102, tmpvar_103); + float tmpvar_105; + tmpvar_105 = min (lumaM_71, tmpvar_104); + float tmpvar_106; + tmpvar_106 = tmpvar_105; + rangeMin_68 = tmpvar_106; + float tmpvar_107; + tmpvar_107 = max (lumaN_73, lumaW_72); + float tmpvar_108; + tmpvar_108 = max (lumaS_69, lumaE_70); + float tmpvar_109; + tmpvar_109 = max (tmpvar_107, tmpvar_108); + float tmpvar_110; + tmpvar_110 = max (lumaM_71, tmpvar_109); + float tmpvar_111; + tmpvar_111 = tmpvar_110; + rangeMax_67 = tmpvar_111; + float tmpvar_112; + tmpvar_112 = (rangeMax_67 - rangeMin_68); + range_66 = tmpvar_112; + float tmpvar_113; + tmpvar_113 = max (0.0625, (rangeMax_67 * 0.125)); + if ((range_66 < tmpvar_113)) { + vec3 tmpvar_114; + tmpvar_114 = FxaaFilterReturn (rgbM_76); + return tmpvar_114; + }; + vec3 tmpvar_115; + tmpvar_115 = ((((rgbN_78 + rgbW_77) + rgbM_76) + rgbE_75) + rgbS_74); + rgbL_65 = tmpvar_115; + float tmpvar_116; + tmpvar_116 = ((((lumaN_73 + lumaW_72) + lumaE_70) + lumaS_69) * 0.25); + lumaL_64 = tmpvar_116; + float tmpvar_117; + tmpvar_117 = abs ((lumaL_64 - lumaM_71)); + float tmpvar_118; + tmpvar_118 = tmpvar_117; + rangeL_63 = tmpvar_118; + float tmpvar_119; + tmpvar_119 = max (0.0, ((rangeL_63 / range_66) - 0.25)); + float tmpvar_120; + tmpvar_120 = (tmpvar_119 * 1.33333); + blendL_62 = tmpvar_120; + float tmpvar_121; + tmpvar_121 = min (0.75, blendL_62); + float tmpvar_122; + tmpvar_122 = tmpvar_121; + blendL_62 = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123 = FxaaTexOff (tex_31, pos_30.xy, vec2(-1.0, -1.0), rcpFrame_32); + vec3 tmpvar_124; + tmpvar_124 = tmpvar_123.xyz; + rgbNW_61 = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = FxaaTexOff (tex_31, pos_30.xy, vec2(1.0, -1.0), rcpFrame_32); + vec3 tmpvar_126; + tmpvar_126 = tmpvar_125.xyz; + rgbNE_60 = tmpvar_126; + vec4 tmpvar_127; + tmpvar_127 = FxaaTexOff (tex_31, pos_30.xy, vec2(-1.0, 1.0), rcpFrame_32); + vec3 tmpvar_128; + tmpvar_128 = tmpvar_127.xyz; + rgbSW_59 = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129 = FxaaTexOff (tex_31, pos_30.xy, vec2(1.0, 1.0), rcpFrame_32); + vec3 tmpvar_130; + tmpvar_130 = tmpvar_129.xyz; + rgbSE_58 = tmpvar_130; + vec3 tmpvar_131; + tmpvar_131 = (rgbL_65 + (((rgbNW_61 + rgbNE_60) + rgbSW_59) + rgbSE_58)); + rgbL_65 = tmpvar_131; + vec3 tmpvar_132; + tmpvar_132 = (rgbL_65 * vec3(0.111111, 0.111111, 0.111111)); + rgbL_65 = tmpvar_132; + float tmpvar_133; + tmpvar_133 = FxaaLuma (rgbNW_61); + float tmpvar_134; + tmpvar_134 = tmpvar_133; + lumaNW_57 = tmpvar_134; + float tmpvar_135; + tmpvar_135 = FxaaLuma (rgbNE_60); + float tmpvar_136; + tmpvar_136 = tmpvar_135; + lumaNE_56 = tmpvar_136; + float tmpvar_137; + tmpvar_137 = FxaaLuma (rgbSW_59); + float tmpvar_138; + tmpvar_138 = tmpvar_137; + lumaSW_55 = tmpvar_138; + float tmpvar_139; + tmpvar_139 = FxaaLuma (rgbSE_58); + float tmpvar_140; + tmpvar_140 = tmpvar_139; + lumaSE_54 = tmpvar_140; + float tmpvar_141; + tmpvar_141 = abs ((((0.25 * lumaNW_57) + (-(0.5) * lumaN_73)) + (0.25 * lumaNE_56))); + float tmpvar_142; + tmpvar_142 = abs ((((0.5 * lumaW_72) + (-(1.0) * lumaM_71)) + (0.5 * lumaE_70))); + float tmpvar_143; + tmpvar_143 = abs ((((0.25 * lumaSW_55) + (-(0.5) * lumaS_69)) + (0.25 * lumaSE_54))); + float tmpvar_144; + tmpvar_144 = ((tmpvar_141 + tmpvar_142) + tmpvar_143); + edgeVert_53 = tmpvar_144; + float tmpvar_145; + tmpvar_145 = abs ((((0.25 * lumaNW_57) + (-(0.5) * lumaW_72)) + (0.25 * lumaSW_55))); + float tmpvar_146; + tmpvar_146 = abs ((((0.5 * lumaN_73) + (-(1.0) * lumaM_71)) + (0.5 * lumaS_69))); + float tmpvar_147; + tmpvar_147 = abs ((((0.25 * lumaNE_56) + (-(0.5) * lumaE_70)) + (0.25 * lumaSE_54))); + float tmpvar_148; + tmpvar_148 = ((tmpvar_145 + tmpvar_146) + tmpvar_147); + edgeHorz_52 = tmpvar_148; + bool tmpvar_149; + tmpvar_149 = (edgeHorz_52 >= edgeVert_53); + horzSpan_51 = tmpvar_149; + float tmpvar_150; + if (horzSpan_51) { + tmpvar_150 = -(rcpFrame_32.y); + } else { + tmpvar_150 = -(rcpFrame_32.x); + }; + float tmpvar_151; + tmpvar_151 = tmpvar_150; + lengthSign_50 = tmpvar_151; + if (!(horzSpan_51)) { + float tmpvar_152; + tmpvar_152 = lumaW_72; + lumaN_73 = tmpvar_152; + }; + if (!(horzSpan_51)) { + float tmpvar_153; + tmpvar_153 = lumaE_70; + lumaS_69 = tmpvar_153; + }; + float tmpvar_154; + tmpvar_154 = abs ((lumaN_73 - lumaM_71)); + float tmpvar_155; + tmpvar_155 = tmpvar_154; + gradientN_49 = tmpvar_155; + float tmpvar_156; + tmpvar_156 = abs ((lumaS_69 - lumaM_71)); + float tmpvar_157; + tmpvar_157 = tmpvar_156; + gradientS_48 = tmpvar_157; + float tmpvar_158; + tmpvar_158 = ((lumaN_73 + lumaM_71) * 0.5); + lumaN_73 = tmpvar_158; + float tmpvar_159; + tmpvar_159 = ((lumaS_69 + lumaM_71) * 0.5); + lumaS_69 = tmpvar_159; + bool tmpvar_160; + tmpvar_160 = (gradientN_49 >= gradientS_48); + pairN_47 = tmpvar_160; + if (!(pairN_47)) { + float tmpvar_161; + tmpvar_161 = lumaS_69; + lumaN_73 = tmpvar_161; + }; + if (!(pairN_47)) { + float tmpvar_162; + tmpvar_162 = gradientS_48; + gradientN_49 = tmpvar_162; + }; + if (!(pairN_47)) { + float tmpvar_163; + tmpvar_163 = (lengthSign_50 * -(1.0)); + lengthSign_50 = tmpvar_163; + }; + float tmpvar_164; + if (horzSpan_51) { + tmpvar_164 = 0.0; + } else { + tmpvar_164 = (lengthSign_50 * 0.5); + }; + float tmpvar_165; + tmpvar_165 = (pos_30.x + tmpvar_164); + posN_46.x = tmpvar_165; + float tmpvar_166; + if (horzSpan_51) { + tmpvar_166 = (lengthSign_50 * 0.5); + } else { + tmpvar_166 = 0.0; + }; + float tmpvar_167; + tmpvar_167 = (pos_30.y + tmpvar_166); + posN_46.y = vec2(tmpvar_167).y; + float tmpvar_168; + tmpvar_168 = (gradientN_49 * 0.25); + gradientN_49 = tmpvar_168; + vec2 tmpvar_169; + tmpvar_169 = posN_46; + posP_45 = tmpvar_169; + vec2 tmpvar_170; + if (horzSpan_51) { + vec2 tmpvar_171; + tmpvar_171.y = 0.0; + tmpvar_171.x = rcpFrame_32.x; + tmpvar_170 = tmpvar_171; + } else { + vec2 tmpvar_172; + tmpvar_172.x = 0.0; + tmpvar_172.y = rcpFrame_32.y; + tmpvar_170 = tmpvar_172; + }; + vec2 tmpvar_173; + tmpvar_173 = tmpvar_170; + offNP_44 = tmpvar_173; + float tmpvar_174; + tmpvar_174 = lumaN_73; + lumaEndN_43 = tmpvar_174; + float tmpvar_175; + tmpvar_175 = lumaN_73; + lumaEndP_42 = tmpvar_175; + vec2 tmpvar_176; + tmpvar_176 = (posN_46 + (offNP_44 * vec2(-2.0, -2.0))); + posN_46 = tmpvar_176; + vec2 tmpvar_177; + tmpvar_177 = (posP_45 + (offNP_44 * vec2(2.0, 2.0))); + posP_45 = tmpvar_177; + vec2 tmpvar_178; + tmpvar_178 = (offNP_44 * vec2(3.0, 3.0)); + offNP_44 = tmpvar_178; + while (true) { + if (!((i_39 < 4))) { + break; + }; + if (!(doneN_41)) { + vec4 tmpvar_179; + tmpvar_179 = FxaaTexGrad (tex_31, posN_46.xy, offNP_44); + float tmpvar_180; + tmpvar_180 = FxaaLuma (tmpvar_179.xyz); + float tmpvar_181; + tmpvar_181 = tmpvar_180; + lumaEndN_43 = tmpvar_181; + }; + if (!(doneP_40)) { + vec4 tmpvar_182; + tmpvar_182 = FxaaTexGrad (tex_31, posP_45.xy, offNP_44); + float tmpvar_183; + tmpvar_183 = FxaaLuma (tmpvar_182.xyz); + float tmpvar_184; + tmpvar_184 = tmpvar_183; + lumaEndP_42 = tmpvar_184; + }; + bool tmpvar_185; + if (doneN_41) { + tmpvar_185 = bool(1); + } else { + float tmpvar_186; + tmpvar_186 = abs ((lumaEndN_43 - lumaN_73)); + tmpvar_185 = (tmpvar_186 >= gradientN_49); + }; + bool tmpvar_187; + tmpvar_187 = tmpvar_185; + doneN_41 = tmpvar_187; + bool tmpvar_188; + if (doneP_40) { + tmpvar_188 = bool(1); + } else { + float tmpvar_189; + tmpvar_189 = abs ((lumaEndP_42 - lumaN_73)); + tmpvar_188 = (tmpvar_189 >= gradientN_49); + }; + bool tmpvar_190; + tmpvar_190 = tmpvar_188; + doneP_40 = tmpvar_190; + if ((doneN_41 && doneP_40)) { + break; + }; + if (!(doneN_41)) { + vec2 tmpvar_191; + tmpvar_191 = (posN_46 - offNP_44); + posN_46 = tmpvar_191; + }; + if (!(doneP_40)) { + vec2 tmpvar_192; + tmpvar_192 = (posP_45 + offNP_44); + posP_45 = tmpvar_192; + }; + int _post_incdec_tmp_193; + _post_incdec_tmp_193 = i_39; + int tmpvar_194; + tmpvar_194 = (i_39 + 1); + i_39 = tmpvar_194; + }; + float tmpvar_195; + if (horzSpan_51) { + tmpvar_195 = (pos_30.x - posN_46.x); + } else { + tmpvar_195 = (pos_30.y - posN_46.y); + }; + float tmpvar_196; + tmpvar_196 = tmpvar_195; + dstN_38 = tmpvar_196; + float tmpvar_197; + if (horzSpan_51) { + tmpvar_197 = (posP_45.x - pos_30.x); + } else { + tmpvar_197 = (posP_45.y - pos_30.y); + }; + float tmpvar_198; + tmpvar_198 = tmpvar_197; + dstP_37 = tmpvar_198; + bool tmpvar_199; + tmpvar_199 = (dstN_38 < dstP_37); + directionN_36 = tmpvar_199; + float tmpvar_200; + if (directionN_36) { + tmpvar_200 = lumaEndN_43; + } else { + tmpvar_200 = lumaEndP_42; + }; + float tmpvar_201; + tmpvar_201 = tmpvar_200; + lumaEndN_43 = tmpvar_201; + if ((((lumaM_71 - lumaN_73) < 0.0) == ((lumaEndN_43 - lumaN_73) < 0.0))) { + float tmpvar_202; + tmpvar_202 = 0.0; + lengthSign_50 = tmpvar_202; + }; + float tmpvar_203; + tmpvar_203 = (dstP_37 + dstN_38); + spanLength_35 = tmpvar_203; + float tmpvar_204; + if (directionN_36) { + tmpvar_204 = dstN_38; + } else { + tmpvar_204 = dstP_37; + }; + float tmpvar_205; + tmpvar_205 = tmpvar_204; + dstN_38 = tmpvar_205; + float tmpvar_206; + tmpvar_206 = ((0.5 + (dstN_38 * (-(1.0) / spanLength_35))) * lengthSign_50); + subPixelOffset_34 = tmpvar_206; + float tmpvar_207; + if (horzSpan_51) { + tmpvar_207 = 0.0; + } else { + tmpvar_207 = subPixelOffset_34; + }; + float tmpvar_208; + if (horzSpan_51) { + tmpvar_208 = subPixelOffset_34; + } else { + tmpvar_208 = 0.0; + }; + vec2 tmpvar_209; + tmpvar_209.x = (pos_30.x + tmpvar_207); + tmpvar_209.y = (pos_30.y + tmpvar_208); + vec4 tmpvar_210; + tmpvar_210 = FxaaTexLod0 (tex_31, tmpvar_209); + vec3 tmpvar_211; + tmpvar_211 = tmpvar_210.xyz; + rgbF_33 = tmpvar_211; + vec3 tmpvar_212; + tmpvar_212 = FxaaLerp3 (rgbL_65, rgbF_33, blendL_62); + vec3 tmpvar_213; + tmpvar_213 = FxaaFilterReturn (tmpvar_212); + return tmpvar_213; +} + +vec4 xlat_main ( + in vec2 uv_214 +) +{ + vec3 tmpvar_215; + tmpvar_215 = FxaaPixelShader (uv_214.xy, _MainTex, _MainTex_TexelSize.xy); + vec4 tmpvar_216; + tmpvar_216.w = 0.0; + tmpvar_216.xyz = tmpvar_215.xyz.xyz; + return tmpvar_216; +} + +void main () +{ + vec4 xl_retval_217; + vec2 tmpvar_218; + tmpvar_218 = xlv_TEXCOORD0.xy; + vec4 tmpvar_219; + tmpvar_219 = xlat_main (tmpvar_218); + vec4 tmpvar_220; + tmpvar_220 = tmpvar_219; + xl_retval_217 = tmpvar_220; + vec4 tmpvar_221; + tmpvar_221 = xl_retval_217.xyzw; + vec4 tmpvar_222; + tmpvar_222 = tmpvar_221; + gl_FragData[0] = tmpvar_222; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-out.txt new file mode 100644 index 000000000..6a4d1ce8a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset1-out.txt @@ -0,0 +1,269 @@ +#extension GL_ARB_shader_texture_lod : enable +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + vec2 rcpFrame_1; + rcpFrame_1 = _MainTex_TexelSize.xy; + vec3 tmpvar_2; + int i_3; + bool doneP_4; + bool doneN_5; + float lumaEndP_6; + float lumaEndN_7; + vec2 offNP_8; + vec2 posP_9; + vec2 posN_10; + float gradientN_11; + float lengthSign_12; + float lumaS_13; + float lumaN_14; + doneN_5 = bool(0); + doneP_4 = bool(0); + i_3 = 0; + vec4 tmpvar_15; + tmpvar_15.zw = vec2(0.0, 0.0); + tmpvar_15.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_16; + tmpvar_16 = texture2DLod (_MainTex, tmpvar_15.xy, 0.0); + vec4 tmpvar_17; + tmpvar_17.zw = vec2(0.0, 0.0); + tmpvar_17.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_18; + tmpvar_18 = texture2DLod (_MainTex, tmpvar_17.xy, 0.0); + vec4 tmpvar_19; + tmpvar_19 = texture2DLod (_MainTex, xlv_TEXCOORD0, 0.0); + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_21; + tmpvar_21 = texture2DLod (_MainTex, tmpvar_20.xy, 0.0); + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 0.0); + tmpvar_22.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_23; + tmpvar_23 = texture2DLod (_MainTex, tmpvar_22.xy, 0.0); + float tmpvar_24; + tmpvar_24 = ((tmpvar_16.y * 1.96321) + tmpvar_16.x); + lumaN_14 = tmpvar_24; + float tmpvar_25; + tmpvar_25 = ((tmpvar_18.y * 1.96321) + tmpvar_18.x); + float tmpvar_26; + tmpvar_26 = ((tmpvar_19.y * 1.96321) + tmpvar_19.x); + float tmpvar_27; + tmpvar_27 = ((tmpvar_21.y * 1.96321) + tmpvar_21.x); + float tmpvar_28; + tmpvar_28 = ((tmpvar_23.y * 1.96321) + tmpvar_23.x); + lumaS_13 = tmpvar_28; + float tmpvar_29; + tmpvar_29 = max (tmpvar_26, max (max (tmpvar_24, tmpvar_25), max (tmpvar_28, tmpvar_27))); + float tmpvar_30; + tmpvar_30 = (tmpvar_29 - min (tmpvar_26, min (min (tmpvar_24, tmpvar_25), min (tmpvar_28, tmpvar_27)))); + float tmpvar_31; + tmpvar_31 = max (0.0625, (tmpvar_29 * 0.125)); + if ((tmpvar_30 < tmpvar_31)) { + tmpvar_2 = tmpvar_19.xyz; + } else { + float tmpvar_32; + tmpvar_32 = min (0.75, (max (0.0, ((abs((((((tmpvar_24 + tmpvar_25) + tmpvar_27) + tmpvar_28) * 0.25) - tmpvar_26)) / tmpvar_30) - 0.25)) * 1.33333)); + vec4 tmpvar_33; + tmpvar_33.zw = vec2(0.0, 0.0); + tmpvar_33.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_34; + tmpvar_34 = texture2DLod (_MainTex, tmpvar_33.xy, 0.0); + vec4 tmpvar_35; + tmpvar_35.zw = vec2(0.0, 0.0); + tmpvar_35.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_36; + tmpvar_36 = texture2DLod (_MainTex, tmpvar_35.xy, 0.0); + vec4 tmpvar_37; + tmpvar_37.zw = vec2(0.0, 0.0); + tmpvar_37.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_38; + tmpvar_38 = texture2DLod (_MainTex, tmpvar_37.xy, 0.0); + vec4 tmpvar_39; + tmpvar_39.zw = vec2(0.0, 0.0); + tmpvar_39.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); + vec4 tmpvar_40; + tmpvar_40 = texture2DLod (_MainTex, tmpvar_39.xy, 0.0); + vec3 tmpvar_41; + tmpvar_41 = ((((((tmpvar_16.xyz + tmpvar_18.xyz) + tmpvar_19.xyz) + tmpvar_21.xyz) + tmpvar_23.xyz) + (((tmpvar_34.xyz + tmpvar_36.xyz) + tmpvar_38.xyz) + tmpvar_40.xyz)) * vec3(0.111111, 0.111111, 0.111111)); + float tmpvar_42; + tmpvar_42 = ((tmpvar_34.y * 1.96321) + tmpvar_34.x); + float tmpvar_43; + tmpvar_43 = ((tmpvar_36.y * 1.96321) + tmpvar_36.x); + float tmpvar_44; + tmpvar_44 = ((tmpvar_38.y * 1.96321) + tmpvar_38.x); + float tmpvar_45; + tmpvar_45 = ((tmpvar_40.y * 1.96321) + tmpvar_40.x); + bool tmpvar_46; + tmpvar_46 = (((abs((((0.25 * tmpvar_42) + (-0.5 * tmpvar_25)) + (0.25 * tmpvar_44))) + abs((((0.5 * tmpvar_24) + (-1.0 * tmpvar_26)) + (0.5 * tmpvar_28)))) + abs((((0.25 * tmpvar_43) + (-0.5 * tmpvar_27)) + (0.25 * tmpvar_45)))) >= ((abs((((0.25 * tmpvar_42) + (-0.5 * tmpvar_24)) + (0.25 * tmpvar_43))) + abs((((0.5 * tmpvar_25) + (-1.0 * tmpvar_26)) + (0.5 * tmpvar_27)))) + abs((((0.25 * tmpvar_44) + (-0.5 * tmpvar_28)) + (0.25 * tmpvar_45))))); + float tmpvar_47; + if (tmpvar_46) { + tmpvar_47 = -(_MainTex_TexelSize.y); + } else { + tmpvar_47 = -(_MainTex_TexelSize.x); + }; + lengthSign_12 = tmpvar_47; + if (!(tmpvar_46)) { + lumaN_14 = tmpvar_25; + }; + if (!(tmpvar_46)) { + lumaS_13 = tmpvar_27; + }; + float tmpvar_48; + tmpvar_48 = abs((lumaN_14 - tmpvar_26)); + gradientN_11 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = abs((lumaS_13 - tmpvar_26)); + lumaN_14 = ((lumaN_14 + tmpvar_26) * 0.5); + float tmpvar_50; + tmpvar_50 = ((lumaS_13 + tmpvar_26) * 0.5); + lumaS_13 = tmpvar_50; + bool tmpvar_51; + tmpvar_51 = (tmpvar_48 >= tmpvar_49); + if (!(tmpvar_51)) { + lumaN_14 = tmpvar_50; + }; + if (!(tmpvar_51)) { + gradientN_11 = tmpvar_49; + }; + if (!(tmpvar_51)) { + lengthSign_12 = (tmpvar_47 * -1.0); + }; + float tmpvar_52; + if (tmpvar_46) { + tmpvar_52 = 0.0; + } else { + tmpvar_52 = (lengthSign_12 * 0.5); + }; + posN_10.x = (xlv_TEXCOORD0.x + tmpvar_52); + float tmpvar_53; + if (tmpvar_46) { + tmpvar_53 = (lengthSign_12 * 0.5); + } else { + tmpvar_53 = 0.0; + }; + posN_10.y = (xlv_TEXCOORD0.y + tmpvar_53); + gradientN_11 = (gradientN_11 * 0.25); + posP_9 = posN_10; + vec2 tmpvar_54; + if (tmpvar_46) { + vec2 tmpvar_55; + tmpvar_55.y = 0.0; + tmpvar_55.x = rcpFrame_1.x; + tmpvar_54 = tmpvar_55; + } else { + vec2 tmpvar_56; + tmpvar_56.x = 0.0; + tmpvar_56.y = rcpFrame_1.y; + tmpvar_54 = tmpvar_56; + }; + lumaEndN_7 = lumaN_14; + lumaEndP_6 = lumaN_14; + posN_10 = (posN_10 + (tmpvar_54 * vec2(-2.0, -2.0))); + posP_9 = (posP_9 + (tmpvar_54 * vec2(2.0, 2.0))); + offNP_8 = (tmpvar_54 * vec2(3.0, 3.0)); + while (true) { + if ((i_3 >= 4)) { + break; + }; + if (!(doneN_5)) { + vec4 tmpvar_57; + tmpvar_57 = texture2D (_MainTex, posN_10); + lumaEndN_7 = ((tmpvar_57.y * 1.96321) + tmpvar_57.x); + }; + if (!(doneP_4)) { + vec4 tmpvar_58; + tmpvar_58 = texture2D (_MainTex, posP_9); + lumaEndP_6 = ((tmpvar_58.y * 1.96321) + tmpvar_58.x); + }; + bool tmpvar_59; + if (doneN_5) { + tmpvar_59 = bool(1); + } else { + tmpvar_59 = (abs((lumaEndN_7 - lumaN_14)) >= gradientN_11); + }; + doneN_5 = tmpvar_59; + bool tmpvar_60; + if (doneP_4) { + tmpvar_60 = bool(1); + } else { + tmpvar_60 = (abs((lumaEndP_6 - lumaN_14)) >= gradientN_11); + }; + doneP_4 = tmpvar_60; + if ((tmpvar_59 && tmpvar_60)) { + break; + }; + if (!(tmpvar_59)) { + posN_10 = (posN_10 - offNP_8); + }; + if (!(tmpvar_60)) { + posP_9 = (posP_9 + offNP_8); + }; + i_3 = (i_3 + 1); + }; + float tmpvar_61; + if (tmpvar_46) { + tmpvar_61 = (xlv_TEXCOORD0.x - posN_10.x); + } else { + tmpvar_61 = (xlv_TEXCOORD0.y - posN_10.y); + }; + float tmpvar_62; + if (tmpvar_46) { + tmpvar_62 = (posP_9.x - xlv_TEXCOORD0.x); + } else { + tmpvar_62 = (posP_9.y - xlv_TEXCOORD0.y); + }; + bool tmpvar_63; + tmpvar_63 = (tmpvar_61 < tmpvar_62); + float tmpvar_64; + if (tmpvar_63) { + tmpvar_64 = lumaEndN_7; + } else { + tmpvar_64 = lumaEndP_6; + }; + lumaEndN_7 = tmpvar_64; + if ((((tmpvar_26 - lumaN_14) < 0.0) == ((tmpvar_64 - lumaN_14) < 0.0))) { + lengthSign_12 = 0.0; + }; + float tmpvar_65; + tmpvar_65 = (tmpvar_62 + tmpvar_61); + float tmpvar_66; + if (tmpvar_63) { + tmpvar_66 = tmpvar_61; + } else { + tmpvar_66 = tmpvar_62; + }; + float tmpvar_67; + tmpvar_67 = ((0.5 + (tmpvar_66 * (-1.0 / tmpvar_65))) * lengthSign_12); + float tmpvar_68; + if (tmpvar_46) { + tmpvar_68 = 0.0; + } else { + tmpvar_68 = tmpvar_67; + }; + float tmpvar_69; + if (tmpvar_46) { + tmpvar_69 = tmpvar_67; + } else { + tmpvar_69 = 0.0; + }; + vec2 tmpvar_70; + tmpvar_70.x = (xlv_TEXCOORD0.x + tmpvar_68); + tmpvar_70.y = (xlv_TEXCOORD0.y + tmpvar_69); + vec4 tmpvar_71; + tmpvar_71 = texture2DLod (_MainTex, tmpvar_70, 0.0); + vec3 tmpvar_72; + tmpvar_72.x = -(tmpvar_32); + tmpvar_72.y = -(tmpvar_32); + tmpvar_72.z = -(tmpvar_32); + tmpvar_2 = ((tmpvar_72 * tmpvar_71.xyz) + ((tmpvar_41 * vec3(tmpvar_32)) + tmpvar_71.xyz)); + }; + vec4 tmpvar_73; + tmpvar_73.w = 0.0; + tmpvar_73.xyz = tmpvar_2; + gl_FragData[0] = tmpvar_73; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa-preset3-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-ir.txt new file mode 100644 index 000000000..9bcf446af --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-ir.txt @@ -0,0 +1,577 @@ +#extension GL_ARB_shader_texture_lod : enable +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +vec4 FxaaTexOff ( + in sampler2D tex_4, + in vec2 pos_5, + in vec2 off_6, + in vec2 rcpFrame_7 +) +{ + vec4 tmpvar_8; + tmpvar_8.zw = vec2(0.0, 0.0); + tmpvar_8.xy = (pos_5.xy + (off_6 * rcpFrame_7)).xy; + vec4 tmpvar_9; + tmpvar_9 = xll_tex2Dlod (tex_4, tmpvar_8); + return tmpvar_9; +} + +vec4 FxaaTexLod0 ( + in sampler2D tex_10, + in vec2 pos_11 +) +{ + vec4 tmpvar_12; + tmpvar_12.zw = vec2(0.0, 0.0); + tmpvar_12.xy = pos_11.xy.xy; + vec4 tmpvar_13; + tmpvar_13 = xll_tex2Dlod (tex_10, tmpvar_12); + return tmpvar_13; +} + +float FxaaLuma ( + in vec3 rgb_14 +) +{ + return ((rgb_14.y * 1.96321) + rgb_14.x); +} + +vec3 FxaaLerp3 ( + in vec3 a_15, + in vec3 b_16, + in float amountOfA_17 +) +{ + vec3 tmpvar_18; + tmpvar_18.x = -(amountOfA_17); + tmpvar_18.y = -(amountOfA_17); + tmpvar_18.z = -(amountOfA_17); + vec3 tmpvar_19; + tmpvar_19.x = amountOfA_17; + tmpvar_19.y = amountOfA_17; + tmpvar_19.z = amountOfA_17; + return ((tmpvar_18 * b_16) + ((a_15 * tmpvar_19) + b_16)); +} + +vec3 FxaaFilterReturn ( + in vec3 rgb_20 +) +{ + return rgb_20; +} + +vec3 FxaaPixelShader ( + in vec2 pos_21, + in sampler2D tex_22, + in vec2 rcpFrame_23 +) +{ + vec3 rgbF_24; + float subPixelOffset_25; + float spanLength_26; + bool directionN_27; + float dstP_28; + float dstN_29; + int i_30; + bool doneP_31; + bool doneN_32; + float lumaEndP_33; + float lumaEndN_34; + vec2 offNP_35; + vec2 posP_36; + vec2 posN_37; + bool pairN_38; + float gradientS_39; + float gradientN_40; + float lengthSign_41; + bool horzSpan_42; + float edgeHorz_43; + float edgeVert_44; + float lumaSE_45; + float lumaSW_46; + float lumaNE_47; + float lumaNW_48; + vec3 rgbSE_49; + vec3 rgbSW_50; + vec3 rgbNE_51; + vec3 rgbNW_52; + float blendL_53; + float rangeL_54; + float lumaL_55; + vec3 rgbL_56; + float range_57; + float rangeMax_58; + float rangeMin_59; + float lumaS_60; + float lumaE_61; + float lumaM_62; + float lumaW_63; + float lumaN_64; + vec3 rgbS_65; + vec3 rgbE_66; + vec3 rgbM_67; + vec3 rgbW_68; + vec3 rgbN_69; + bool tmpvar_70; + tmpvar_70 = bool(0); + doneN_32 = tmpvar_70; + bool tmpvar_71; + tmpvar_71 = bool(0); + doneP_31 = tmpvar_71; + int tmpvar_72; + tmpvar_72 = 0; + i_30 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = FxaaTexOff (tex_22, pos_21.xy, vec2(0.0, -1.0), rcpFrame_23); + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73.xyz; + rgbN_69 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = FxaaTexOff (tex_22, pos_21.xy, vec2(-1.0, 0.0), rcpFrame_23); + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75.xyz; + rgbW_68 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = FxaaTexOff (tex_22, pos_21.xy, vec2(0.0, 0.0), rcpFrame_23); + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77.xyz; + rgbM_67 = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = FxaaTexOff (tex_22, pos_21.xy, vec2(1.0, 0.0), rcpFrame_23); + vec3 tmpvar_80; + tmpvar_80 = tmpvar_79.xyz; + rgbE_66 = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = FxaaTexOff (tex_22, pos_21.xy, vec2(0.0, 1.0), rcpFrame_23); + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81.xyz; + rgbS_65 = tmpvar_82; + float tmpvar_83; + tmpvar_83 = FxaaLuma (rgbN_69); + float tmpvar_84; + tmpvar_84 = tmpvar_83; + lumaN_64 = tmpvar_84; + float tmpvar_85; + tmpvar_85 = FxaaLuma (rgbW_68); + float tmpvar_86; + tmpvar_86 = tmpvar_85; + lumaW_63 = tmpvar_86; + float tmpvar_87; + tmpvar_87 = FxaaLuma (rgbM_67); + float tmpvar_88; + tmpvar_88 = tmpvar_87; + lumaM_62 = tmpvar_88; + float tmpvar_89; + tmpvar_89 = FxaaLuma (rgbE_66); + float tmpvar_90; + tmpvar_90 = tmpvar_89; + lumaE_61 = tmpvar_90; + float tmpvar_91; + tmpvar_91 = FxaaLuma (rgbS_65); + float tmpvar_92; + tmpvar_92 = tmpvar_91; + lumaS_60 = tmpvar_92; + float tmpvar_93; + tmpvar_93 = min (lumaN_64, lumaW_63); + float tmpvar_94; + tmpvar_94 = min (lumaS_60, lumaE_61); + float tmpvar_95; + tmpvar_95 = min (tmpvar_93, tmpvar_94); + float tmpvar_96; + tmpvar_96 = min (lumaM_62, tmpvar_95); + float tmpvar_97; + tmpvar_97 = tmpvar_96; + rangeMin_59 = tmpvar_97; + float tmpvar_98; + tmpvar_98 = max (lumaN_64, lumaW_63); + float tmpvar_99; + tmpvar_99 = max (lumaS_60, lumaE_61); + float tmpvar_100; + tmpvar_100 = max (tmpvar_98, tmpvar_99); + float tmpvar_101; + tmpvar_101 = max (lumaM_62, tmpvar_100); + float tmpvar_102; + tmpvar_102 = tmpvar_101; + rangeMax_58 = tmpvar_102; + float tmpvar_103; + tmpvar_103 = (rangeMax_58 - rangeMin_59); + range_57 = tmpvar_103; + float tmpvar_104; + tmpvar_104 = max (0.0416667, (rangeMax_58 * 0.125)); + if ((range_57 < tmpvar_104)) { + vec3 tmpvar_105; + tmpvar_105 = FxaaFilterReturn (rgbM_67); + return tmpvar_105; + }; + vec3 tmpvar_106; + tmpvar_106 = ((((rgbN_69 + rgbW_68) + rgbM_67) + rgbE_66) + rgbS_65); + rgbL_56 = tmpvar_106; + float tmpvar_107; + tmpvar_107 = ((((lumaN_64 + lumaW_63) + lumaE_61) + lumaS_60) * 0.25); + lumaL_55 = tmpvar_107; + float tmpvar_108; + tmpvar_108 = abs ((lumaL_55 - lumaM_62)); + float tmpvar_109; + tmpvar_109 = tmpvar_108; + rangeL_54 = tmpvar_109; + float tmpvar_110; + tmpvar_110 = max (0.0, ((rangeL_54 / range_57) - 0.25)); + float tmpvar_111; + tmpvar_111 = (tmpvar_110 * 1.33333); + blendL_53 = tmpvar_111; + float tmpvar_112; + tmpvar_112 = min (0.75, blendL_53); + float tmpvar_113; + tmpvar_113 = tmpvar_112; + blendL_53 = tmpvar_113; + vec4 tmpvar_114; + tmpvar_114 = FxaaTexOff (tex_22, pos_21.xy, vec2(-1.0, -1.0), rcpFrame_23); + vec3 tmpvar_115; + tmpvar_115 = tmpvar_114.xyz; + rgbNW_52 = tmpvar_115; + vec4 tmpvar_116; + tmpvar_116 = FxaaTexOff (tex_22, pos_21.xy, vec2(1.0, -1.0), rcpFrame_23); + vec3 tmpvar_117; + tmpvar_117 = tmpvar_116.xyz; + rgbNE_51 = tmpvar_117; + vec4 tmpvar_118; + tmpvar_118 = FxaaTexOff (tex_22, pos_21.xy, vec2(-1.0, 1.0), rcpFrame_23); + vec3 tmpvar_119; + tmpvar_119 = tmpvar_118.xyz; + rgbSW_50 = tmpvar_119; + vec4 tmpvar_120; + tmpvar_120 = FxaaTexOff (tex_22, pos_21.xy, vec2(1.0, 1.0), rcpFrame_23); + vec3 tmpvar_121; + tmpvar_121 = tmpvar_120.xyz; + rgbSE_49 = tmpvar_121; + vec3 tmpvar_122; + tmpvar_122 = (rgbL_56 + (((rgbNW_52 + rgbNE_51) + rgbSW_50) + rgbSE_49)); + rgbL_56 = tmpvar_122; + vec3 tmpvar_123; + tmpvar_123 = (rgbL_56 * vec3(0.111111, 0.111111, 0.111111)); + rgbL_56 = tmpvar_123; + float tmpvar_124; + tmpvar_124 = FxaaLuma (rgbNW_52); + float tmpvar_125; + tmpvar_125 = tmpvar_124; + lumaNW_48 = tmpvar_125; + float tmpvar_126; + tmpvar_126 = FxaaLuma (rgbNE_51); + float tmpvar_127; + tmpvar_127 = tmpvar_126; + lumaNE_47 = tmpvar_127; + float tmpvar_128; + tmpvar_128 = FxaaLuma (rgbSW_50); + float tmpvar_129; + tmpvar_129 = tmpvar_128; + lumaSW_46 = tmpvar_129; + float tmpvar_130; + tmpvar_130 = FxaaLuma (rgbSE_49); + float tmpvar_131; + tmpvar_131 = tmpvar_130; + lumaSE_45 = tmpvar_131; + float tmpvar_132; + tmpvar_132 = abs ((((0.25 * lumaNW_48) + (-(0.5) * lumaN_64)) + (0.25 * lumaNE_47))); + float tmpvar_133; + tmpvar_133 = abs ((((0.5 * lumaW_63) + (-(1.0) * lumaM_62)) + (0.5 * lumaE_61))); + float tmpvar_134; + tmpvar_134 = abs ((((0.25 * lumaSW_46) + (-(0.5) * lumaS_60)) + (0.25 * lumaSE_45))); + float tmpvar_135; + tmpvar_135 = ((tmpvar_132 + tmpvar_133) + tmpvar_134); + edgeVert_44 = tmpvar_135; + float tmpvar_136; + tmpvar_136 = abs ((((0.25 * lumaNW_48) + (-(0.5) * lumaW_63)) + (0.25 * lumaSW_46))); + float tmpvar_137; + tmpvar_137 = abs ((((0.5 * lumaN_64) + (-(1.0) * lumaM_62)) + (0.5 * lumaS_60))); + float tmpvar_138; + tmpvar_138 = abs ((((0.25 * lumaNE_47) + (-(0.5) * lumaE_61)) + (0.25 * lumaSE_45))); + float tmpvar_139; + tmpvar_139 = ((tmpvar_136 + tmpvar_137) + tmpvar_138); + edgeHorz_43 = tmpvar_139; + bool tmpvar_140; + tmpvar_140 = (edgeHorz_43 >= edgeVert_44); + horzSpan_42 = tmpvar_140; + float tmpvar_141; + if (horzSpan_42) { + tmpvar_141 = -(rcpFrame_23.y); + } else { + tmpvar_141 = -(rcpFrame_23.x); + }; + float tmpvar_142; + tmpvar_142 = tmpvar_141; + lengthSign_41 = tmpvar_142; + if (!(horzSpan_42)) { + float tmpvar_143; + tmpvar_143 = lumaW_63; + lumaN_64 = tmpvar_143; + }; + if (!(horzSpan_42)) { + float tmpvar_144; + tmpvar_144 = lumaE_61; + lumaS_60 = tmpvar_144; + }; + float tmpvar_145; + tmpvar_145 = abs ((lumaN_64 - lumaM_62)); + float tmpvar_146; + tmpvar_146 = tmpvar_145; + gradientN_40 = tmpvar_146; + float tmpvar_147; + tmpvar_147 = abs ((lumaS_60 - lumaM_62)); + float tmpvar_148; + tmpvar_148 = tmpvar_147; + gradientS_39 = tmpvar_148; + float tmpvar_149; + tmpvar_149 = ((lumaN_64 + lumaM_62) * 0.5); + lumaN_64 = tmpvar_149; + float tmpvar_150; + tmpvar_150 = ((lumaS_60 + lumaM_62) * 0.5); + lumaS_60 = tmpvar_150; + bool tmpvar_151; + tmpvar_151 = (gradientN_40 >= gradientS_39); + pairN_38 = tmpvar_151; + if (!(pairN_38)) { + float tmpvar_152; + tmpvar_152 = lumaS_60; + lumaN_64 = tmpvar_152; + }; + if (!(pairN_38)) { + float tmpvar_153; + tmpvar_153 = gradientS_39; + gradientN_40 = tmpvar_153; + }; + if (!(pairN_38)) { + float tmpvar_154; + tmpvar_154 = (lengthSign_41 * -(1.0)); + lengthSign_41 = tmpvar_154; + }; + float tmpvar_155; + if (horzSpan_42) { + tmpvar_155 = 0.0; + } else { + tmpvar_155 = (lengthSign_41 * 0.5); + }; + float tmpvar_156; + tmpvar_156 = (pos_21.x + tmpvar_155); + posN_37.x = tmpvar_156; + float tmpvar_157; + if (horzSpan_42) { + tmpvar_157 = (lengthSign_41 * 0.5); + } else { + tmpvar_157 = 0.0; + }; + float tmpvar_158; + tmpvar_158 = (pos_21.y + tmpvar_157); + posN_37.y = vec2(tmpvar_158).y; + float tmpvar_159; + tmpvar_159 = (gradientN_40 * 0.25); + gradientN_40 = tmpvar_159; + vec2 tmpvar_160; + tmpvar_160 = posN_37; + posP_36 = tmpvar_160; + vec2 tmpvar_161; + if (horzSpan_42) { + vec2 tmpvar_162; + tmpvar_162.y = 0.0; + tmpvar_162.x = rcpFrame_23.x; + tmpvar_161 = tmpvar_162; + } else { + vec2 tmpvar_163; + tmpvar_163.x = 0.0; + tmpvar_163.y = rcpFrame_23.y; + tmpvar_161 = tmpvar_163; + }; + vec2 tmpvar_164; + tmpvar_164 = tmpvar_161; + offNP_35 = tmpvar_164; + float tmpvar_165; + tmpvar_165 = lumaN_64; + lumaEndN_34 = tmpvar_165; + float tmpvar_166; + tmpvar_166 = lumaN_64; + lumaEndP_33 = tmpvar_166; + vec2 tmpvar_167; + tmpvar_167 = (posN_37 + (offNP_35 * vec2(-1.0, -1.0))); + posN_37 = tmpvar_167; + vec2 tmpvar_168; + tmpvar_168 = (posP_36 + (offNP_35 * vec2(1.0, 1.0))); + posP_36 = tmpvar_168; + while (true) { + if (!((i_30 < 16))) { + break; + }; + if (!(doneN_32)) { + vec4 tmpvar_169; + tmpvar_169 = FxaaTexLod0 (tex_22, posN_37.xy); + float tmpvar_170; + tmpvar_170 = FxaaLuma (tmpvar_169.xyz); + float tmpvar_171; + tmpvar_171 = tmpvar_170; + lumaEndN_34 = tmpvar_171; + }; + if (!(doneP_31)) { + vec4 tmpvar_172; + tmpvar_172 = FxaaTexLod0 (tex_22, posP_36.xy); + float tmpvar_173; + tmpvar_173 = FxaaLuma (tmpvar_172.xyz); + float tmpvar_174; + tmpvar_174 = tmpvar_173; + lumaEndP_33 = tmpvar_174; + }; + bool tmpvar_175; + if (doneN_32) { + tmpvar_175 = bool(1); + } else { + float tmpvar_176; + tmpvar_176 = abs ((lumaEndN_34 - lumaN_64)); + tmpvar_175 = (tmpvar_176 >= gradientN_40); + }; + bool tmpvar_177; + tmpvar_177 = tmpvar_175; + doneN_32 = tmpvar_177; + bool tmpvar_178; + if (doneP_31) { + tmpvar_178 = bool(1); + } else { + float tmpvar_179; + tmpvar_179 = abs ((lumaEndP_33 - lumaN_64)); + tmpvar_178 = (tmpvar_179 >= gradientN_40); + }; + bool tmpvar_180; + tmpvar_180 = tmpvar_178; + doneP_31 = tmpvar_180; + if ((doneN_32 && doneP_31)) { + break; + }; + if (!(doneN_32)) { + vec2 tmpvar_181; + tmpvar_181 = (posN_37 - offNP_35); + posN_37 = tmpvar_181; + }; + if (!(doneP_31)) { + vec2 tmpvar_182; + tmpvar_182 = (posP_36 + offNP_35); + posP_36 = tmpvar_182; + }; + int _post_incdec_tmp_183; + _post_incdec_tmp_183 = i_30; + int tmpvar_184; + tmpvar_184 = (i_30 + 1); + i_30 = tmpvar_184; + }; + float tmpvar_185; + if (horzSpan_42) { + tmpvar_185 = (pos_21.x - posN_37.x); + } else { + tmpvar_185 = (pos_21.y - posN_37.y); + }; + float tmpvar_186; + tmpvar_186 = tmpvar_185; + dstN_29 = tmpvar_186; + float tmpvar_187; + if (horzSpan_42) { + tmpvar_187 = (posP_36.x - pos_21.x); + } else { + tmpvar_187 = (posP_36.y - pos_21.y); + }; + float tmpvar_188; + tmpvar_188 = tmpvar_187; + dstP_28 = tmpvar_188; + bool tmpvar_189; + tmpvar_189 = (dstN_29 < dstP_28); + directionN_27 = tmpvar_189; + float tmpvar_190; + if (directionN_27) { + tmpvar_190 = lumaEndN_34; + } else { + tmpvar_190 = lumaEndP_33; + }; + float tmpvar_191; + tmpvar_191 = tmpvar_190; + lumaEndN_34 = tmpvar_191; + if ((((lumaM_62 - lumaN_64) < 0.0) == ((lumaEndN_34 - lumaN_64) < 0.0))) { + float tmpvar_192; + tmpvar_192 = 0.0; + lengthSign_41 = tmpvar_192; + }; + float tmpvar_193; + tmpvar_193 = (dstP_28 + dstN_29); + spanLength_26 = tmpvar_193; + float tmpvar_194; + if (directionN_27) { + tmpvar_194 = dstN_29; + } else { + tmpvar_194 = dstP_28; + }; + float tmpvar_195; + tmpvar_195 = tmpvar_194; + dstN_29 = tmpvar_195; + float tmpvar_196; + tmpvar_196 = ((0.5 + (dstN_29 * (-(1.0) / spanLength_26))) * lengthSign_41); + subPixelOffset_25 = tmpvar_196; + float tmpvar_197; + if (horzSpan_42) { + tmpvar_197 = 0.0; + } else { + tmpvar_197 = subPixelOffset_25; + }; + float tmpvar_198; + if (horzSpan_42) { + tmpvar_198 = subPixelOffset_25; + } else { + tmpvar_198 = 0.0; + }; + vec2 tmpvar_199; + tmpvar_199.x = (pos_21.x + tmpvar_197); + tmpvar_199.y = (pos_21.y + tmpvar_198); + vec4 tmpvar_200; + tmpvar_200 = FxaaTexLod0 (tex_22, tmpvar_199); + vec3 tmpvar_201; + tmpvar_201 = tmpvar_200.xyz; + rgbF_24 = tmpvar_201; + vec3 tmpvar_202; + tmpvar_202 = FxaaLerp3 (rgbL_56, rgbF_24, blendL_53); + vec3 tmpvar_203; + tmpvar_203 = FxaaFilterReturn (tmpvar_202); + return tmpvar_203; +} + +vec4 xlat_main ( + in vec2 uv_204 +) +{ + vec3 tmpvar_205; + tmpvar_205 = FxaaPixelShader (uv_204.xy, _MainTex, _MainTex_TexelSize.xy); + vec4 tmpvar_206; + tmpvar_206.w = 0.0; + tmpvar_206.xyz = tmpvar_205.xyz.xyz; + return tmpvar_206; +} + +void main () +{ + vec4 xl_retval_207; + vec2 tmpvar_208; + tmpvar_208 = xlv_TEXCOORD0.xy; + vec4 tmpvar_209; + tmpvar_209 = xlat_main (tmpvar_208); + vec4 tmpvar_210; + tmpvar_210 = tmpvar_209; + xl_retval_207 = tmpvar_210; + vec4 tmpvar_211; + tmpvar_211 = xl_retval_207.xyzw; + vec4 tmpvar_212; + tmpvar_212 = tmpvar_211; + gl_FragData[0] = tmpvar_212; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-out.txt new file mode 100644 index 000000000..53ae4c970 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-out.txt @@ -0,0 +1,269 @@ +#extension GL_ARB_shader_texture_lod : enable +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + vec2 rcpFrame_1; + rcpFrame_1 = _MainTex_TexelSize.xy; + vec3 tmpvar_2; + int i_3; + bool doneP_4; + bool doneN_5; + float lumaEndP_6; + float lumaEndN_7; + vec2 offNP_8; + vec2 posP_9; + vec2 posN_10; + float gradientN_11; + float lengthSign_12; + float lumaS_13; + float lumaN_14; + doneN_5 = bool(0); + doneP_4 = bool(0); + i_3 = 0; + vec4 tmpvar_15; + tmpvar_15.zw = vec2(0.0, 0.0); + tmpvar_15.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_16; + tmpvar_16 = texture2DLod (_MainTex, tmpvar_15.xy, 0.0); + vec4 tmpvar_17; + tmpvar_17.zw = vec2(0.0, 0.0); + tmpvar_17.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_18; + tmpvar_18 = texture2DLod (_MainTex, tmpvar_17.xy, 0.0); + vec4 tmpvar_19; + tmpvar_19 = texture2DLod (_MainTex, xlv_TEXCOORD0, 0.0); + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_21; + tmpvar_21 = texture2DLod (_MainTex, tmpvar_20.xy, 0.0); + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 0.0); + tmpvar_22.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_23; + tmpvar_23 = texture2DLod (_MainTex, tmpvar_22.xy, 0.0); + float tmpvar_24; + tmpvar_24 = ((tmpvar_16.y * 1.96321) + tmpvar_16.x); + lumaN_14 = tmpvar_24; + float tmpvar_25; + tmpvar_25 = ((tmpvar_18.y * 1.96321) + tmpvar_18.x); + float tmpvar_26; + tmpvar_26 = ((tmpvar_19.y * 1.96321) + tmpvar_19.x); + float tmpvar_27; + tmpvar_27 = ((tmpvar_21.y * 1.96321) + tmpvar_21.x); + float tmpvar_28; + tmpvar_28 = ((tmpvar_23.y * 1.96321) + tmpvar_23.x); + lumaS_13 = tmpvar_28; + float tmpvar_29; + tmpvar_29 = max (tmpvar_26, max (max (tmpvar_24, tmpvar_25), max (tmpvar_28, tmpvar_27))); + float tmpvar_30; + tmpvar_30 = (tmpvar_29 - min (tmpvar_26, min (min (tmpvar_24, tmpvar_25), min (tmpvar_28, tmpvar_27)))); + float tmpvar_31; + tmpvar_31 = max (0.0416667, (tmpvar_29 * 0.125)); + if ((tmpvar_30 < tmpvar_31)) { + tmpvar_2 = tmpvar_19.xyz; + } else { + float tmpvar_32; + tmpvar_32 = min (0.75, (max (0.0, ((abs((((((tmpvar_24 + tmpvar_25) + tmpvar_27) + tmpvar_28) * 0.25) - tmpvar_26)) / tmpvar_30) - 0.25)) * 1.33333)); + vec4 tmpvar_33; + tmpvar_33.zw = vec2(0.0, 0.0); + tmpvar_33.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_34; + tmpvar_34 = texture2DLod (_MainTex, tmpvar_33.xy, 0.0); + vec4 tmpvar_35; + tmpvar_35.zw = vec2(0.0, 0.0); + tmpvar_35.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_36; + tmpvar_36 = texture2DLod (_MainTex, tmpvar_35.xy, 0.0); + vec4 tmpvar_37; + tmpvar_37.zw = vec2(0.0, 0.0); + tmpvar_37.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_38; + tmpvar_38 = texture2DLod (_MainTex, tmpvar_37.xy, 0.0); + vec4 tmpvar_39; + tmpvar_39.zw = vec2(0.0, 0.0); + tmpvar_39.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); + vec4 tmpvar_40; + tmpvar_40 = texture2DLod (_MainTex, tmpvar_39.xy, 0.0); + vec3 tmpvar_41; + tmpvar_41 = ((((((tmpvar_16.xyz + tmpvar_18.xyz) + tmpvar_19.xyz) + tmpvar_21.xyz) + tmpvar_23.xyz) + (((tmpvar_34.xyz + tmpvar_36.xyz) + tmpvar_38.xyz) + tmpvar_40.xyz)) * vec3(0.111111, 0.111111, 0.111111)); + float tmpvar_42; + tmpvar_42 = ((tmpvar_34.y * 1.96321) + tmpvar_34.x); + float tmpvar_43; + tmpvar_43 = ((tmpvar_36.y * 1.96321) + tmpvar_36.x); + float tmpvar_44; + tmpvar_44 = ((tmpvar_38.y * 1.96321) + tmpvar_38.x); + float tmpvar_45; + tmpvar_45 = ((tmpvar_40.y * 1.96321) + tmpvar_40.x); + bool tmpvar_46; + tmpvar_46 = (((abs((((0.25 * tmpvar_42) + (-0.5 * tmpvar_25)) + (0.25 * tmpvar_44))) + abs((((0.5 * tmpvar_24) + (-1.0 * tmpvar_26)) + (0.5 * tmpvar_28)))) + abs((((0.25 * tmpvar_43) + (-0.5 * tmpvar_27)) + (0.25 * tmpvar_45)))) >= ((abs((((0.25 * tmpvar_42) + (-0.5 * tmpvar_24)) + (0.25 * tmpvar_43))) + abs((((0.5 * tmpvar_25) + (-1.0 * tmpvar_26)) + (0.5 * tmpvar_27)))) + abs((((0.25 * tmpvar_44) + (-0.5 * tmpvar_28)) + (0.25 * tmpvar_45))))); + float tmpvar_47; + if (tmpvar_46) { + tmpvar_47 = -(_MainTex_TexelSize.y); + } else { + tmpvar_47 = -(_MainTex_TexelSize.x); + }; + lengthSign_12 = tmpvar_47; + if (!(tmpvar_46)) { + lumaN_14 = tmpvar_25; + }; + if (!(tmpvar_46)) { + lumaS_13 = tmpvar_27; + }; + float tmpvar_48; + tmpvar_48 = abs((lumaN_14 - tmpvar_26)); + gradientN_11 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = abs((lumaS_13 - tmpvar_26)); + lumaN_14 = ((lumaN_14 + tmpvar_26) * 0.5); + float tmpvar_50; + tmpvar_50 = ((lumaS_13 + tmpvar_26) * 0.5); + lumaS_13 = tmpvar_50; + bool tmpvar_51; + tmpvar_51 = (tmpvar_48 >= tmpvar_49); + if (!(tmpvar_51)) { + lumaN_14 = tmpvar_50; + }; + if (!(tmpvar_51)) { + gradientN_11 = tmpvar_49; + }; + if (!(tmpvar_51)) { + lengthSign_12 = (tmpvar_47 * -1.0); + }; + float tmpvar_52; + if (tmpvar_46) { + tmpvar_52 = 0.0; + } else { + tmpvar_52 = (lengthSign_12 * 0.5); + }; + posN_10.x = (xlv_TEXCOORD0.x + tmpvar_52); + float tmpvar_53; + if (tmpvar_46) { + tmpvar_53 = (lengthSign_12 * 0.5); + } else { + tmpvar_53 = 0.0; + }; + posN_10.y = (xlv_TEXCOORD0.y + tmpvar_53); + gradientN_11 = (gradientN_11 * 0.25); + posP_9 = posN_10; + vec2 tmpvar_54; + if (tmpvar_46) { + vec2 tmpvar_55; + tmpvar_55.y = 0.0; + tmpvar_55.x = rcpFrame_1.x; + tmpvar_54 = tmpvar_55; + } else { + vec2 tmpvar_56; + tmpvar_56.x = 0.0; + tmpvar_56.y = rcpFrame_1.y; + tmpvar_54 = tmpvar_56; + }; + offNP_8 = tmpvar_54; + lumaEndN_7 = lumaN_14; + lumaEndP_6 = lumaN_14; + posN_10 = (posN_10 + (tmpvar_54 * vec2(-1.0, -1.0))); + posP_9 = (posP_9 + tmpvar_54); + while (true) { + if ((i_3 >= 16)) { + break; + }; + if (!(doneN_5)) { + vec4 tmpvar_57; + tmpvar_57 = texture2DLod (_MainTex, posN_10, 0.0); + lumaEndN_7 = ((tmpvar_57.y * 1.96321) + tmpvar_57.x); + }; + if (!(doneP_4)) { + vec4 tmpvar_58; + tmpvar_58 = texture2DLod (_MainTex, posP_9, 0.0); + lumaEndP_6 = ((tmpvar_58.y * 1.96321) + tmpvar_58.x); + }; + bool tmpvar_59; + if (doneN_5) { + tmpvar_59 = bool(1); + } else { + tmpvar_59 = (abs((lumaEndN_7 - lumaN_14)) >= gradientN_11); + }; + doneN_5 = tmpvar_59; + bool tmpvar_60; + if (doneP_4) { + tmpvar_60 = bool(1); + } else { + tmpvar_60 = (abs((lumaEndP_6 - lumaN_14)) >= gradientN_11); + }; + doneP_4 = tmpvar_60; + if ((tmpvar_59 && tmpvar_60)) { + break; + }; + if (!(tmpvar_59)) { + posN_10 = (posN_10 - offNP_8); + }; + if (!(tmpvar_60)) { + posP_9 = (posP_9 + offNP_8); + }; + i_3 = (i_3 + 1); + }; + float tmpvar_61; + if (tmpvar_46) { + tmpvar_61 = (xlv_TEXCOORD0.x - posN_10.x); + } else { + tmpvar_61 = (xlv_TEXCOORD0.y - posN_10.y); + }; + float tmpvar_62; + if (tmpvar_46) { + tmpvar_62 = (posP_9.x - xlv_TEXCOORD0.x); + } else { + tmpvar_62 = (posP_9.y - xlv_TEXCOORD0.y); + }; + bool tmpvar_63; + tmpvar_63 = (tmpvar_61 < tmpvar_62); + float tmpvar_64; + if (tmpvar_63) { + tmpvar_64 = lumaEndN_7; + } else { + tmpvar_64 = lumaEndP_6; + }; + lumaEndN_7 = tmpvar_64; + if ((((tmpvar_26 - lumaN_14) < 0.0) == ((tmpvar_64 - lumaN_14) < 0.0))) { + lengthSign_12 = 0.0; + }; + float tmpvar_65; + tmpvar_65 = (tmpvar_62 + tmpvar_61); + float tmpvar_66; + if (tmpvar_63) { + tmpvar_66 = tmpvar_61; + } else { + tmpvar_66 = tmpvar_62; + }; + float tmpvar_67; + tmpvar_67 = ((0.5 + (tmpvar_66 * (-1.0 / tmpvar_65))) * lengthSign_12); + float tmpvar_68; + if (tmpvar_46) { + tmpvar_68 = 0.0; + } else { + tmpvar_68 = tmpvar_67; + }; + float tmpvar_69; + if (tmpvar_46) { + tmpvar_69 = tmpvar_67; + } else { + tmpvar_69 = 0.0; + }; + vec2 tmpvar_70; + tmpvar_70.x = (xlv_TEXCOORD0.x + tmpvar_68); + tmpvar_70.y = (xlv_TEXCOORD0.y + tmpvar_69); + vec4 tmpvar_71; + tmpvar_71 = texture2DLod (_MainTex, tmpvar_70, 0.0); + vec3 tmpvar_72; + tmpvar_72.x = -(tmpvar_32); + tmpvar_72.y = -(tmpvar_32); + tmpvar_72.z = -(tmpvar_32); + tmpvar_2 = ((tmpvar_72 * tmpvar_71.xyz) + ((tmpvar_41 * vec3(tmpvar_32)) + tmpvar_71.xyz)); + }; + vec4 tmpvar_73; + tmpvar_73.w = 0.0; + tmpvar_73.xyz = tmpvar_2; + gl_FragData[0] = tmpvar_73; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-consolepc-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-ir.txt new file mode 100644 index 000000000..cffe987fc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-ir.txt @@ -0,0 +1,314 @@ +#extension GL_ARB_shader_texture_lod : enable +struct v2f { + vec4 pos; + vec2 uv; + vec4 uvPosPos; +}; +varying vec4 xlv_TEXCOORD1; +varying vec2 xlv_TEXCOORD0; +varying vec4 xlv_SV_POSITION; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +float FxaaLuma ( + in vec4 rgba_4 +) +{ + return rgba_4.y; +} + +vec4 FxaaPixelShader ( + in vec2 pos_5, + in vec4 fxaaConsolePosPos_6, + in sampler2D tex_7, + in sampler2D fxaaConsole360TexExpBiasNegOne_8, + in sampler2D fxaaConsole360TexExpBiasNegTwo_9, + in vec2 fxaaQualityRcpFrame_10, + in vec4 fxaaConsoleRcpFrameOpt_11, + in vec4 fxaaConsoleRcpFrameOpt2_12, + in vec4 fxaaConsole360RcpFrameOpt2_13, + in float fxaaQualitySubpix_14, + in float fxaaQualityEdgeThreshold_15, + in float fxaaQualityEdgeThresholdMin_16, + in float fxaaConsoleEdgeSharpness_17, + in float fxaaConsoleEdgeThreshold_18, + in float fxaaConsoleEdgeThresholdMin_19, + in vec4 fxaaConsole360ConstDir_20 +) +{ + bool twoTap_21; + vec4 rgbyB_22; + vec4 rgbyA_23; + vec4 rgbyP2_24; + vec4 rgbyN2_25; + vec2 dir2_26; + float dirAbsMinTimesC_27; + vec4 rgbyP1_28; + vec4 rgbyN1_29; + vec2 dir1_30; + vec2 dir_31; + float dirSeMinusNw_32; + float lumaMaxSubMinM_33; + float dirSwMinusNe_34; + float lumaMaxM_35; + float lumaMaxScaledClamped_36; + float lumaMinM_37; + float lumaMaxScaled_38; + float lumaMin_39; + float lumaMax_40; + float lumaMinNeSe_41; + float lumaMaxNeSe_42; + float lumaMinNwSw_43; + float lumaMaxNwSw_44; + float lumaM_45; + vec4 rgbyM_46; + float lumaSe_47; + float lumaNe_48; + float lumaSw_49; + float lumaNw_50; + vec4 tmpvar_51; + tmpvar_51.zw = vec2(0.0, 0.0); + tmpvar_51.xy = fxaaConsolePosPos_6.xy.xy; + vec4 tmpvar_52; + tmpvar_52 = xll_tex2Dlod (tex_7, tmpvar_51); + float tmpvar_53; + tmpvar_53 = FxaaLuma (tmpvar_52); + float tmpvar_54; + tmpvar_54 = tmpvar_53; + lumaNw_50 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.zw = vec2(0.0, 0.0); + tmpvar_55.xy = fxaaConsolePosPos_6.xw.xy; + vec4 tmpvar_56; + tmpvar_56 = xll_tex2Dlod (tex_7, tmpvar_55); + float tmpvar_57; + tmpvar_57 = FxaaLuma (tmpvar_56); + float tmpvar_58; + tmpvar_58 = tmpvar_57; + lumaSw_49 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.zw = vec2(0.0, 0.0); + tmpvar_59.xy = fxaaConsolePosPos_6.zy.xy; + vec4 tmpvar_60; + tmpvar_60 = xll_tex2Dlod (tex_7, tmpvar_59); + float tmpvar_61; + tmpvar_61 = FxaaLuma (tmpvar_60); + float tmpvar_62; + tmpvar_62 = tmpvar_61; + lumaNe_48 = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.zw = vec2(0.0, 0.0); + tmpvar_63.xy = fxaaConsolePosPos_6.zw.xy; + vec4 tmpvar_64; + tmpvar_64 = xll_tex2Dlod (tex_7, tmpvar_63); + float tmpvar_65; + tmpvar_65 = FxaaLuma (tmpvar_64); + float tmpvar_66; + tmpvar_66 = tmpvar_65; + lumaSe_47 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.zw = vec2(0.0, 0.0); + tmpvar_67.xy = pos_5.xy.xy; + vec4 tmpvar_68; + tmpvar_68 = xll_tex2Dlod (tex_7, tmpvar_67); + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + rgbyM_46 = tmpvar_69; + float tmpvar_70; + tmpvar_70 = rgbyM_46.y; + lumaM_45 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = max (lumaNw_50, lumaSw_49); + float tmpvar_72; + tmpvar_72 = tmpvar_71; + lumaMaxNwSw_44 = tmpvar_72; + float tmpvar_73; + tmpvar_73 = (lumaNe_48 + 0.00260417); + lumaNe_48 = tmpvar_73; + float tmpvar_74; + tmpvar_74 = min (lumaNw_50, lumaSw_49); + float tmpvar_75; + tmpvar_75 = tmpvar_74; + lumaMinNwSw_43 = tmpvar_75; + float tmpvar_76; + tmpvar_76 = max (lumaNe_48, lumaSe_47); + float tmpvar_77; + tmpvar_77 = tmpvar_76; + lumaMaxNeSe_42 = tmpvar_77; + float tmpvar_78; + tmpvar_78 = min (lumaNe_48, lumaSe_47); + float tmpvar_79; + tmpvar_79 = tmpvar_78; + lumaMinNeSe_41 = tmpvar_79; + float tmpvar_80; + tmpvar_80 = max (lumaMaxNeSe_42, lumaMaxNwSw_44); + float tmpvar_81; + tmpvar_81 = tmpvar_80; + lumaMax_40 = tmpvar_81; + float tmpvar_82; + tmpvar_82 = min (lumaMinNeSe_41, lumaMinNwSw_43); + float tmpvar_83; + tmpvar_83 = tmpvar_82; + lumaMin_39 = tmpvar_83; + float tmpvar_84; + tmpvar_84 = (lumaMax_40 * fxaaConsoleEdgeThreshold_18); + lumaMaxScaled_38 = tmpvar_84; + float tmpvar_85; + tmpvar_85 = min (lumaMin_39, lumaM_45); + float tmpvar_86; + tmpvar_86 = tmpvar_85; + lumaMinM_37 = tmpvar_86; + float tmpvar_87; + tmpvar_87 = max (fxaaConsoleEdgeThresholdMin_19, lumaMaxScaled_38); + float tmpvar_88; + tmpvar_88 = tmpvar_87; + lumaMaxScaledClamped_36 = tmpvar_88; + float tmpvar_89; + tmpvar_89 = max (lumaMax_40, lumaM_45); + float tmpvar_90; + tmpvar_90 = tmpvar_89; + lumaMaxM_35 = tmpvar_90; + float tmpvar_91; + tmpvar_91 = (lumaSw_49 - lumaNe_48); + dirSwMinusNe_34 = tmpvar_91; + float tmpvar_92; + tmpvar_92 = (lumaMaxM_35 - lumaMinM_37); + lumaMaxSubMinM_33 = tmpvar_92; + float tmpvar_93; + tmpvar_93 = (lumaSe_47 - lumaNw_50); + dirSeMinusNw_32 = tmpvar_93; + if ((lumaMaxSubMinM_33 < lumaMaxScaledClamped_36)) { + return rgbyM_46; + }; + float tmpvar_94; + tmpvar_94 = (dirSwMinusNe_34 + dirSeMinusNw_32); + dir_31.x = tmpvar_94; + float tmpvar_95; + tmpvar_95 = (dirSwMinusNe_34 - dirSeMinusNw_32); + dir_31.y = vec2(tmpvar_95).y; + vec2 tmpvar_96; + tmpvar_96 = normalize (dir_31.xy); + vec2 tmpvar_97; + tmpvar_97 = tmpvar_96; + dir1_30 = tmpvar_97; + vec4 tmpvar_98; + tmpvar_98.zw = vec2(0.0, 0.0); + tmpvar_98.xy = (pos_5.xy - (dir1_30 * fxaaConsoleRcpFrameOpt_11.zw)).xy; + vec4 tmpvar_99; + tmpvar_99 = xll_tex2Dlod (tex_7, tmpvar_98); + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + rgbyN1_29 = tmpvar_100; + vec4 tmpvar_101; + tmpvar_101.zw = vec2(0.0, 0.0); + tmpvar_101.xy = (pos_5.xy + (dir1_30 * fxaaConsoleRcpFrameOpt_11.zw)).xy; + vec4 tmpvar_102; + tmpvar_102 = xll_tex2Dlod (tex_7, tmpvar_101); + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + rgbyP1_28 = tmpvar_103; + float tmpvar_104; + tmpvar_104 = abs (dir1_30.x); + float tmpvar_105; + tmpvar_105 = abs (dir1_30.y); + float tmpvar_106; + tmpvar_106 = min (tmpvar_104, tmpvar_105); + float tmpvar_107; + tmpvar_107 = (tmpvar_106 * fxaaConsoleEdgeSharpness_17); + dirAbsMinTimesC_27 = tmpvar_107; + vec2 tmpvar_108; + tmpvar_108 = clamp ((dir1_30.xy / dirAbsMinTimesC_27), vec2(-2.0, -2.0), vec2(2.0, 2.0)); + vec2 tmpvar_109; + tmpvar_109 = tmpvar_108; + dir2_26 = tmpvar_109; + vec4 tmpvar_110; + tmpvar_110.zw = vec2(0.0, 0.0); + tmpvar_110.xy = (pos_5.xy - (dir2_26 * fxaaConsoleRcpFrameOpt2_12.zw)).xy; + vec4 tmpvar_111; + tmpvar_111 = xll_tex2Dlod (tex_7, tmpvar_110); + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + rgbyN2_25 = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113.zw = vec2(0.0, 0.0); + tmpvar_113.xy = (pos_5.xy + (dir2_26 * fxaaConsoleRcpFrameOpt2_12.zw)).xy; + vec4 tmpvar_114; + tmpvar_114 = xll_tex2Dlod (tex_7, tmpvar_113); + vec4 tmpvar_115; + tmpvar_115 = tmpvar_114; + rgbyP2_24 = tmpvar_115; + vec4 tmpvar_116; + tmpvar_116 = (rgbyN1_29 + rgbyP1_28); + rgbyA_23 = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117 = (((rgbyN2_25 + rgbyP2_24) * 0.25) + (rgbyA_23 * 0.25)); + rgbyB_22 = tmpvar_117; + bool tmpvar_118; + tmpvar_118 = ((rgbyB_22.y < lumaMin_39) || (rgbyB_22.y > lumaMax_40)); + twoTap_21 = tmpvar_118; + if (twoTap_21) { + vec3 tmpvar_119; + tmpvar_119 = (rgbyA_23.xyz * 0.5); + rgbyB_22.xyz = tmpvar_119.xyz.xyz; + }; + return rgbyB_22; +} + +vec4 xlat_main ( + in v2f i_120 +) +{ + float fxaaN_121; + float tmpvar_122; + tmpvar_122 = 0.5; + fxaaN_121 = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123.x = -(fxaaN_121); + tmpvar_123.y = -(fxaaN_121); + tmpvar_123.z = fxaaN_121; + tmpvar_123.w = fxaaN_121; + vec4 tmpvar_124; + tmpvar_124 = FxaaPixelShader (i_120.uv, i_120.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_123), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); + return tmpvar_124; +} + +void main () +{ + v2f xlt_i_125; + vec4 xl_retval_126; + vec4 tmpvar_127; + tmpvar_127 = xlv_SV_POSITION.xyzw; + vec4 tmpvar_128; + tmpvar_128 = tmpvar_127; + xlt_i_125.pos = tmpvar_128; + vec2 tmpvar_129; + tmpvar_129 = xlv_TEXCOORD0.xy; + vec2 tmpvar_130; + tmpvar_130 = tmpvar_129; + xlt_i_125.uv = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131 = xlv_TEXCOORD1.xyzw; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + xlt_i_125.uvPosPos = tmpvar_132; + vec4 tmpvar_133; + tmpvar_133 = xlat_main (xlt_i_125); + vec4 tmpvar_134; + tmpvar_134 = tmpvar_133; + xl_retval_126 = tmpvar_134; + vec4 tmpvar_135; + tmpvar_135 = xl_retval_126.xyzw; + vec4 tmpvar_136; + tmpvar_136 = tmpvar_135; + gl_FragData[0] = tmpvar_136; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-irES.txt new file mode 100644 index 000000000..2d891b3d9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-irES.txt @@ -0,0 +1,311 @@ +#extension GL_EXT_shader_texture_lod : enable +struct v2f { + highp vec4 pos; + highp vec2 uv; + highp vec4 uvPosPos; +}; +varying highp vec4 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +uniform highp vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + lowp vec4 tmpvar_3; + tmpvar_3 = texture2DLodEXT (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +float FxaaLuma ( + in lowp vec4 rgba_4 +) +{ + return rgba_4.y; +} + +lowp vec4 FxaaPixelShader ( + in highp vec2 pos_5, + in highp vec4 fxaaConsolePosPos_6, + in sampler2D tex_7, + in sampler2D fxaaConsole360TexExpBiasNegOne_8, + in sampler2D fxaaConsole360TexExpBiasNegTwo_9, + in highp vec2 fxaaQualityRcpFrame_10, + in highp vec4 fxaaConsoleRcpFrameOpt_11, + in highp vec4 fxaaConsoleRcpFrameOpt2_12, + in highp vec4 fxaaConsole360RcpFrameOpt2_13, + in highp float fxaaQualitySubpix_14, + in highp float fxaaQualityEdgeThreshold_15, + in highp float fxaaQualityEdgeThresholdMin_16, + in highp float fxaaConsoleEdgeSharpness_17, + in highp float fxaaConsoleEdgeThreshold_18, + in highp float fxaaConsoleEdgeThresholdMin_19, + in highp vec4 fxaaConsole360ConstDir_20 +) +{ + bool twoTap_21; + lowp vec4 rgbyB_22; + lowp vec4 rgbyA_23; + lowp vec4 rgbyP2_24; + lowp vec4 rgbyN2_25; + highp vec2 dir2_26; + highp float dirAbsMinTimesC_27; + lowp vec4 rgbyP1_28; + lowp vec4 rgbyN1_29; + highp vec2 dir1_30; + highp vec2 dir_31; + highp float dirSeMinusNw_32; + highp float lumaMaxSubMinM_33; + highp float dirSwMinusNe_34; + highp float lumaMaxM_35; + highp float lumaMaxScaledClamped_36; + highp float lumaMinM_37; + highp float lumaMaxScaled_38; + highp float lumaMin_39; + highp float lumaMax_40; + highp float lumaMinNeSe_41; + highp float lumaMaxNeSe_42; + highp float lumaMinNwSw_43; + highp float lumaMaxNwSw_44; + highp float lumaM_45; + lowp vec4 rgbyM_46; + highp float lumaSe_47; + highp float lumaNe_48; + highp float lumaSw_49; + highp float lumaNw_50; + highp vec4 tmpvar_51; + tmpvar_51.zw = vec2(0.0, 0.0); + tmpvar_51.xy = fxaaConsolePosPos_6.xy.xy; + vec4 tmpvar_52; + tmpvar_52 = xll_tex2Dlod (tex_7, tmpvar_51); + highp float tmpvar_53; + tmpvar_53 = FxaaLuma (tmpvar_52); + highp float tmpvar_54; + tmpvar_54 = tmpvar_53; + lumaNw_50 = tmpvar_54; + highp vec4 tmpvar_55; + tmpvar_55.zw = vec2(0.0, 0.0); + tmpvar_55.xy = fxaaConsolePosPos_6.xw.xy; + vec4 tmpvar_56; + tmpvar_56 = xll_tex2Dlod (tex_7, tmpvar_55); + highp float tmpvar_57; + tmpvar_57 = FxaaLuma (tmpvar_56); + highp float tmpvar_58; + tmpvar_58 = tmpvar_57; + lumaSw_49 = tmpvar_58; + highp vec4 tmpvar_59; + tmpvar_59.zw = vec2(0.0, 0.0); + tmpvar_59.xy = fxaaConsolePosPos_6.zy.xy; + vec4 tmpvar_60; + tmpvar_60 = xll_tex2Dlod (tex_7, tmpvar_59); + highp float tmpvar_61; + tmpvar_61 = FxaaLuma (tmpvar_60); + highp float tmpvar_62; + tmpvar_62 = tmpvar_61; + lumaNe_48 = tmpvar_62; + highp vec4 tmpvar_63; + tmpvar_63.zw = vec2(0.0, 0.0); + tmpvar_63.xy = fxaaConsolePosPos_6.zw.xy; + vec4 tmpvar_64; + tmpvar_64 = xll_tex2Dlod (tex_7, tmpvar_63); + highp float tmpvar_65; + tmpvar_65 = FxaaLuma (tmpvar_64); + highp float tmpvar_66; + tmpvar_66 = tmpvar_65; + lumaSe_47 = tmpvar_66; + highp vec4 tmpvar_67; + tmpvar_67.zw = vec2(0.0, 0.0); + tmpvar_67.xy = pos_5.xy.xy; + vec4 tmpvar_68; + tmpvar_68 = xll_tex2Dlod (tex_7, tmpvar_67); + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + rgbyM_46 = tmpvar_69; + lowp float tmpvar_70; + tmpvar_70 = rgbyM_46.y; + lumaM_45 = tmpvar_70; + highp float tmpvar_71; + tmpvar_71 = max (lumaNw_50, lumaSw_49); + highp float tmpvar_72; + tmpvar_72 = tmpvar_71; + lumaMaxNwSw_44 = tmpvar_72; + highp float tmpvar_73; + tmpvar_73 = (lumaNe_48 + 0.00260417); + lumaNe_48 = tmpvar_73; + highp float tmpvar_74; + tmpvar_74 = min (lumaNw_50, lumaSw_49); + highp float tmpvar_75; + tmpvar_75 = tmpvar_74; + lumaMinNwSw_43 = tmpvar_75; + highp float tmpvar_76; + tmpvar_76 = max (lumaNe_48, lumaSe_47); + highp float tmpvar_77; + tmpvar_77 = tmpvar_76; + lumaMaxNeSe_42 = tmpvar_77; + highp float tmpvar_78; + tmpvar_78 = min (lumaNe_48, lumaSe_47); + highp float tmpvar_79; + tmpvar_79 = tmpvar_78; + lumaMinNeSe_41 = tmpvar_79; + highp float tmpvar_80; + tmpvar_80 = max (lumaMaxNeSe_42, lumaMaxNwSw_44); + highp float tmpvar_81; + tmpvar_81 = tmpvar_80; + lumaMax_40 = tmpvar_81; + highp float tmpvar_82; + tmpvar_82 = min (lumaMinNeSe_41, lumaMinNwSw_43); + highp float tmpvar_83; + tmpvar_83 = tmpvar_82; + lumaMin_39 = tmpvar_83; + highp float tmpvar_84; + tmpvar_84 = (lumaMax_40 * fxaaConsoleEdgeThreshold_18); + lumaMaxScaled_38 = tmpvar_84; + highp float tmpvar_85; + tmpvar_85 = min (lumaMin_39, lumaM_45); + highp float tmpvar_86; + tmpvar_86 = tmpvar_85; + lumaMinM_37 = tmpvar_86; + highp float tmpvar_87; + tmpvar_87 = max (fxaaConsoleEdgeThresholdMin_19, lumaMaxScaled_38); + highp float tmpvar_88; + tmpvar_88 = tmpvar_87; + lumaMaxScaledClamped_36 = tmpvar_88; + highp float tmpvar_89; + tmpvar_89 = max (lumaMax_40, lumaM_45); + highp float tmpvar_90; + tmpvar_90 = tmpvar_89; + lumaMaxM_35 = tmpvar_90; + highp float tmpvar_91; + tmpvar_91 = (lumaSw_49 - lumaNe_48); + dirSwMinusNe_34 = tmpvar_91; + highp float tmpvar_92; + tmpvar_92 = (lumaMaxM_35 - lumaMinM_37); + lumaMaxSubMinM_33 = tmpvar_92; + highp float tmpvar_93; + tmpvar_93 = (lumaSe_47 - lumaNw_50); + dirSeMinusNw_32 = tmpvar_93; + if ((lumaMaxSubMinM_33 < lumaMaxScaledClamped_36)) { + return rgbyM_46; + }; + highp float tmpvar_94; + tmpvar_94 = (dirSwMinusNe_34 + dirSeMinusNw_32); + dir_31.x = tmpvar_94; + highp float tmpvar_95; + tmpvar_95 = (dirSwMinusNe_34 - dirSeMinusNw_32); + dir_31.y = vec2(tmpvar_95).y; + highp vec2 tmpvar_96; + tmpvar_96 = normalize (dir_31.xy); + highp vec2 tmpvar_97; + tmpvar_97 = tmpvar_96; + dir1_30 = tmpvar_97; + highp vec4 tmpvar_98; + tmpvar_98.zw = vec2(0.0, 0.0); + tmpvar_98.xy = (pos_5.xy - (dir1_30 * fxaaConsoleRcpFrameOpt_11.zw)).xy; + vec4 tmpvar_99; + tmpvar_99 = xll_tex2Dlod (tex_7, tmpvar_98); + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + rgbyN1_29 = tmpvar_100; + highp vec4 tmpvar_101; + tmpvar_101.zw = vec2(0.0, 0.0); + tmpvar_101.xy = (pos_5.xy + (dir1_30 * fxaaConsoleRcpFrameOpt_11.zw)).xy; + vec4 tmpvar_102; + tmpvar_102 = xll_tex2Dlod (tex_7, tmpvar_101); + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + rgbyP1_28 = tmpvar_103; + highp float tmpvar_104; + tmpvar_104 = abs (dir1_30.x); + highp float tmpvar_105; + tmpvar_105 = abs (dir1_30.y); + highp float tmpvar_106; + tmpvar_106 = min (tmpvar_104, tmpvar_105); + highp float tmpvar_107; + tmpvar_107 = (tmpvar_106 * fxaaConsoleEdgeSharpness_17); + dirAbsMinTimesC_27 = tmpvar_107; + highp vec2 tmpvar_108; + tmpvar_108 = clamp ((dir1_30.xy / dirAbsMinTimesC_27), vec2(-2.0, -2.0), vec2(2.0, 2.0)); + highp vec2 tmpvar_109; + tmpvar_109 = tmpvar_108; + dir2_26 = tmpvar_109; + highp vec4 tmpvar_110; + tmpvar_110.zw = vec2(0.0, 0.0); + tmpvar_110.xy = (pos_5.xy - (dir2_26 * fxaaConsoleRcpFrameOpt2_12.zw)).xy; + vec4 tmpvar_111; + tmpvar_111 = xll_tex2Dlod (tex_7, tmpvar_110); + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + rgbyN2_25 = tmpvar_112; + highp vec4 tmpvar_113; + tmpvar_113.zw = vec2(0.0, 0.0); + tmpvar_113.xy = (pos_5.xy + (dir2_26 * fxaaConsoleRcpFrameOpt2_12.zw)).xy; + vec4 tmpvar_114; + tmpvar_114 = xll_tex2Dlod (tex_7, tmpvar_113); + vec4 tmpvar_115; + tmpvar_115 = tmpvar_114; + rgbyP2_24 = tmpvar_115; + lowp vec4 tmpvar_116; + tmpvar_116 = (rgbyN1_29 + rgbyP1_28); + rgbyA_23 = tmpvar_116; + lowp vec4 tmpvar_117; + tmpvar_117 = (((rgbyN2_25 + rgbyP2_24) * 0.25) + (rgbyA_23 * 0.25)); + rgbyB_22 = tmpvar_117; + bool tmpvar_118; + tmpvar_118 = ((rgbyB_22.y < lumaMin_39) || (rgbyB_22.y > lumaMax_40)); + twoTap_21 = tmpvar_118; + if (twoTap_21) { + lowp vec3 tmpvar_119; + tmpvar_119 = (rgbyA_23.xyz * 0.5); + rgbyB_22.xyz = tmpvar_119.xyz.xyz; + }; + return rgbyB_22; +} + +lowp vec4 xlat_main ( + in v2f i_120 +) +{ + highp float fxaaN_121; + float tmpvar_122; + tmpvar_122 = 0.5; + fxaaN_121 = tmpvar_122; + highp vec4 tmpvar_123; + tmpvar_123.x = -(fxaaN_121); + tmpvar_123.y = -(fxaaN_121); + tmpvar_123.z = fxaaN_121; + tmpvar_123.w = fxaaN_121; + lowp vec4 tmpvar_124; + tmpvar_124 = FxaaPixelShader (i_120.uv, i_120.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_123), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); + return tmpvar_124; +} + +void main () +{ + v2f xlt_i_125; + lowp vec4 xl_retval_126; + vec4 tmpvar_127; + tmpvar_127 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_125.pos = tmpvar_127; + highp vec2 tmpvar_128; + tmpvar_128 = xlv_TEXCOORD0.xy; + highp vec2 tmpvar_129; + tmpvar_129 = tmpvar_128; + xlt_i_125.uv = tmpvar_129; + highp vec4 tmpvar_130; + tmpvar_130 = xlv_TEXCOORD1.xyzw; + highp vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + xlt_i_125.uvPosPos = tmpvar_131; + lowp vec4 tmpvar_132; + tmpvar_132 = xlat_main (xlt_i_125); + lowp vec4 tmpvar_133; + tmpvar_133 = tmpvar_132; + xl_retval_126 = tmpvar_133; + lowp vec4 tmpvar_134; + tmpvar_134 = xl_retval_126.xyzw; + lowp vec4 tmpvar_135; + tmpvar_135 = tmpvar_134; + gl_FragData[0] = tmpvar_135; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-out.txt new file mode 100644 index 000000000..2098d178a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-out.txt @@ -0,0 +1,70 @@ +#extension GL_ARB_shader_texture_lod : enable +varying vec4 xlv_TEXCOORD1; +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + vec4 fxaaConsoleRcpFrameOpt_1; + fxaaConsoleRcpFrameOpt_1 = (_MainTex_TexelSize.xyxy * vec4(-0.5, -0.5, 0.5, 0.5)); + vec4 fxaaConsoleRcpFrameOpt2_2; + fxaaConsoleRcpFrameOpt2_2 = (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)); + vec4 tmpvar_3; + vec4 rgbyB_4; + vec2 dir_5; + vec4 tmpvar_6; + tmpvar_6 = texture2DLod (_MainTex, xlv_TEXCOORD1.xy, 0.0); + vec4 tmpvar_7; + tmpvar_7 = texture2DLod (_MainTex, xlv_TEXCOORD1.xw, 0.0); + vec4 tmpvar_8; + tmpvar_8 = texture2DLod (_MainTex, xlv_TEXCOORD1.zw, 0.0); + vec4 tmpvar_9; + tmpvar_9 = texture2DLod (_MainTex, xlv_TEXCOORD0, 0.0); + float tmpvar_10; + tmpvar_10 = (texture2DLod (_MainTex, xlv_TEXCOORD1.zy, 0.0).y + 0.00260417); + float tmpvar_11; + tmpvar_11 = max (max (tmpvar_10, tmpvar_8.y), max (tmpvar_6.y, tmpvar_7.y)); + float tmpvar_12; + tmpvar_12 = min (min (tmpvar_10, tmpvar_8.y), min (tmpvar_6.y, tmpvar_7.y)); + float tmpvar_13; + tmpvar_13 = max (0.05, (tmpvar_11 * 0.125)); + float tmpvar_14; + tmpvar_14 = (tmpvar_7.y - tmpvar_10); + float tmpvar_15; + tmpvar_15 = (max (tmpvar_11, tmpvar_9.y) - min (tmpvar_12, tmpvar_9.y)); + float tmpvar_16; + tmpvar_16 = (tmpvar_8.y - tmpvar_6.y); + if ((tmpvar_15 < tmpvar_13)) { + tmpvar_3 = tmpvar_9; + } else { + dir_5.x = (tmpvar_14 + tmpvar_16); + dir_5.y = (tmpvar_14 - tmpvar_16); + vec2 tmpvar_17; + tmpvar_17 = normalize(dir_5); + vec4 tmpvar_18; + tmpvar_18.zw = vec2(0.0, 0.0); + tmpvar_18.xy = (xlv_TEXCOORD0 - (tmpvar_17 * fxaaConsoleRcpFrameOpt_1.zw)); + vec4 tmpvar_19; + tmpvar_19.zw = vec2(0.0, 0.0); + tmpvar_19.xy = (xlv_TEXCOORD0 + (tmpvar_17 * fxaaConsoleRcpFrameOpt_1.zw)); + vec2 tmpvar_20; + tmpvar_20 = clamp ((tmpvar_17 / (min (abs(tmpvar_17.x), abs(tmpvar_17.y)) * 8.0)), vec2(-2.0, -2.0), vec2(2.0, 2.0)); + vec4 tmpvar_21; + tmpvar_21.zw = vec2(0.0, 0.0); + tmpvar_21.xy = (xlv_TEXCOORD0 - (tmpvar_20 * fxaaConsoleRcpFrameOpt2_2.zw)); + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 0.0); + tmpvar_22.xy = (xlv_TEXCOORD0 + (tmpvar_20 * fxaaConsoleRcpFrameOpt2_2.zw)); + vec4 tmpvar_23; + tmpvar_23 = (texture2DLod (_MainTex, tmpvar_18.xy, 0.0) + texture2DLod (_MainTex, tmpvar_19.xy, 0.0)); + vec4 tmpvar_24; + tmpvar_24 = (((texture2DLod (_MainTex, tmpvar_21.xy, 0.0) + texture2DLod (_MainTex, tmpvar_22.xy, 0.0)) * 0.25) + (tmpvar_23 * 0.25)); + rgbyB_4 = tmpvar_24; + if (((tmpvar_24.y < tmpvar_12) || (tmpvar_24.y > tmpvar_11))) { + rgbyB_4.xyz = (tmpvar_23.xyz * 0.5); + }; + tmpvar_3 = rgbyB_4; + }; + gl_FragData[0] = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-outES.txt new file mode 100644 index 000000000..4ca984ef3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-consolepc-outES.txt @@ -0,0 +1,84 @@ +#extension GL_EXT_shader_texture_lod : enable +varying highp vec4 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +uniform highp vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + highp vec4 fxaaConsoleRcpFrameOpt_1; + fxaaConsoleRcpFrameOpt_1 = (_MainTex_TexelSize.xyxy * vec4(-0.5, -0.5, 0.5, 0.5)); + highp vec4 fxaaConsoleRcpFrameOpt2_2; + fxaaConsoleRcpFrameOpt2_2 = (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)); + lowp vec4 tmpvar_3; + lowp vec4 rgbyB_4; + highp vec2 dir_5; + highp float lumaM_6; + lowp vec4 tmpvar_7; + tmpvar_7 = texture2DLod (_MainTex, xlv_TEXCOORD1.xy, 0.0); + highp float tmpvar_8; + tmpvar_8 = tmpvar_7.y; + lowp vec4 tmpvar_9; + tmpvar_9 = texture2DLod (_MainTex, xlv_TEXCOORD1.xw, 0.0); + highp float tmpvar_10; + tmpvar_10 = tmpvar_9.y; + lowp vec4 tmpvar_11; + tmpvar_11 = texture2DLod (_MainTex, xlv_TEXCOORD1.zy, 0.0); + highp float tmpvar_12; + tmpvar_12 = tmpvar_11.y; + lowp vec4 tmpvar_13; + tmpvar_13 = texture2DLod (_MainTex, xlv_TEXCOORD1.zw, 0.0); + highp float tmpvar_14; + tmpvar_14 = tmpvar_13.y; + lowp vec4 tmpvar_15; + tmpvar_15 = texture2DLod (_MainTex, xlv_TEXCOORD0, 0.0); + lowp float tmpvar_16; + tmpvar_16 = tmpvar_15.y; + lumaM_6 = tmpvar_16; + highp float tmpvar_17; + tmpvar_17 = (tmpvar_12 + 0.00260417); + highp float tmpvar_18; + tmpvar_18 = max (max (tmpvar_17, tmpvar_14), max (tmpvar_8, tmpvar_10)); + highp float tmpvar_19; + tmpvar_19 = min (min (tmpvar_17, tmpvar_14), min (tmpvar_8, tmpvar_10)); + highp float tmpvar_20; + tmpvar_20 = max (0.05, (tmpvar_18 * 0.125)); + highp float tmpvar_21; + tmpvar_21 = (tmpvar_10 - tmpvar_17); + highp float tmpvar_22; + tmpvar_22 = (max (tmpvar_18, lumaM_6) - min (tmpvar_19, lumaM_6)); + highp float tmpvar_23; + tmpvar_23 = (tmpvar_14 - tmpvar_8); + if ((tmpvar_22 < tmpvar_20)) { + tmpvar_3 = tmpvar_15; + } else { + dir_5.x = (tmpvar_21 + tmpvar_23); + dir_5.y = (tmpvar_21 - tmpvar_23); + highp vec2 tmpvar_24; + tmpvar_24 = normalize(dir_5); + highp vec4 tmpvar_25; + tmpvar_25.zw = vec2(0.0, 0.0); + tmpvar_25.xy = (xlv_TEXCOORD0 - (tmpvar_24 * fxaaConsoleRcpFrameOpt_1.zw)); + highp vec4 tmpvar_26; + tmpvar_26.zw = vec2(0.0, 0.0); + tmpvar_26.xy = (xlv_TEXCOORD0 + (tmpvar_24 * fxaaConsoleRcpFrameOpt_1.zw)); + highp vec2 tmpvar_27; + tmpvar_27 = clamp ((tmpvar_24 / (min (abs(tmpvar_24.x), abs(tmpvar_24.y)) * 8.0)), vec2(-2.0, -2.0), vec2(2.0, 2.0)); + highp vec4 tmpvar_28; + tmpvar_28.zw = vec2(0.0, 0.0); + tmpvar_28.xy = (xlv_TEXCOORD0 - (tmpvar_27 * fxaaConsoleRcpFrameOpt2_2.zw)); + highp vec4 tmpvar_29; + tmpvar_29.zw = vec2(0.0, 0.0); + tmpvar_29.xy = (xlv_TEXCOORD0 + (tmpvar_27 * fxaaConsoleRcpFrameOpt2_2.zw)); + lowp vec4 tmpvar_30; + tmpvar_30 = (texture2DLod (_MainTex, tmpvar_25.xy, 0.0) + texture2DLod (_MainTex, tmpvar_26.xy, 0.0)); + lowp vec4 tmpvar_31; + tmpvar_31 = (((texture2DLod (_MainTex, tmpvar_28.xy, 0.0) + texture2DLod (_MainTex, tmpvar_29.xy, 0.0)) * 0.25) + (tmpvar_30 * 0.25)); + rgbyB_4 = tmpvar_31; + if (((tmpvar_31.y < tmpvar_19) || (tmpvar_31.y > tmpvar_18))) { + rgbyB_4.xyz = (tmpvar_30.xyz * 0.5); + }; + tmpvar_3 = rgbyB_4; + }; + gl_FragData[0] = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-fxaa3-11-pc39-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-ir.txt new file mode 100644 index 000000000..dcc2c170e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-ir.txt @@ -0,0 +1,1476 @@ +#extension GL_ARB_shader_texture_lod : enable +struct v2f { + vec4 pos; + vec2 uv; + vec4 uvPosPos; +}; +varying vec4 xlv_TEXCOORD1; +varying vec2 xlv_TEXCOORD0; +varying vec4 xlv_SV_POSITION; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +float xll_saturate ( + in float x_4 +) +{ + float tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec2 xll_saturate ( + in vec2 x_6 +) +{ + vec2 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec3 xll_saturate ( + in vec3 x_8 +) +{ + vec3 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +vec4 xll_saturate ( + in vec4 x_10 +) +{ + vec4 tmpvar_11; + tmpvar_11 = clamp (x_10, 0.0, 1.0); + return tmpvar_11; +} + +mat2 xll_saturate ( + in mat2 m_12 +) +{ + vec2 tmpvar_13; + tmpvar_13 = clamp (m_12[0], 0.0, 1.0); + vec2 tmpvar_14; + tmpvar_14 = clamp (m_12[1], 0.0, 1.0); + mat2 tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = tmpvar_13; + tmpvar_15[0] = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = tmpvar_14; + tmpvar_15[1] = tmpvar_17; + return tmpvar_15; +} + +mat3 xll_saturate ( + in mat3 m_18 +) +{ + vec3 tmpvar_19; + tmpvar_19 = clamp (m_18[0], 0.0, 1.0); + vec3 tmpvar_20; + tmpvar_20 = clamp (m_18[1], 0.0, 1.0); + vec3 tmpvar_21; + tmpvar_21 = clamp (m_18[2], 0.0, 1.0); + mat3 tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_22[0] = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_20; + tmpvar_22[1] = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_21; + tmpvar_22[2] = tmpvar_25; + return tmpvar_22; +} + +mat4 xll_saturate ( + in mat4 m_26 +) +{ + vec4 tmpvar_27; + tmpvar_27 = clamp (m_26[0], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_26[1], 0.0, 1.0); + vec4 tmpvar_29; + tmpvar_29 = clamp (m_26[2], 0.0, 1.0); + vec4 tmpvar_30; + tmpvar_30 = clamp (m_26[3], 0.0, 1.0); + mat4 tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_31[0] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_31[1] = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_29; + tmpvar_31[2] = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_30; + tmpvar_31[3] = tmpvar_35; + return tmpvar_31; +} + +float FxaaLuma ( + in vec4 rgba_36 +) +{ + return rgba_36.w; +} + +vec4 FxaaPixelShader ( + in vec2 pos_37, + in vec4 fxaaConsolePosPos_38, + in sampler2D tex_39, + in sampler2D fxaaConsole360TexExpBiasNegOne_40, + in sampler2D fxaaConsole360TexExpBiasNegTwo_41, + in vec2 fxaaQualityRcpFrame_42, + in vec4 fxaaConsoleRcpFrameOpt_43, + in vec4 fxaaConsoleRcpFrameOpt2_44, + in vec4 fxaaConsole360RcpFrameOpt2_45, + in float fxaaQualitySubpix_46, + in float fxaaQualityEdgeThreshold_47, + in float fxaaQualityEdgeThresholdMin_48, + in float fxaaConsoleEdgeSharpness_49, + in float fxaaConsoleEdgeThreshold_50, + in float fxaaConsoleEdgeThresholdMin_51, + in vec4 fxaaConsole360ConstDir_52 +) +{ + float pixelOffsetSubpix_53; + float pixelOffsetGood_54; + float subpixH_55; + float pixelOffset_56; + float subpixG_57; + bool goodSpan_58; + float dst_59; + bool directionN_60; + float spanLengthRcp_61; + bool goodSpanP_62; + float spanLength_63; + bool goodSpanN_64; + float dstP_65; + float dstN_66; + bool doneNP_67; + bool doneP_68; + bool doneN_69; + bool lumaMLTZero_70; + float subpixF_71; + float lumaMM_72; + float gradientScaled_73; + float lumaEndP_74; + float subpixE_75; + float lumaEndN_76; + float subpixD_77; + vec2 posP_78; + vec2 posN_79; + vec2 offNP_80; + vec2 posB_81; + float subpixC_82; + float gradient_83; + bool pairN_84; + float lumaSS_85; + float lumaNN_86; + float gradientS_87; + float gradientN_88; + float subpixB_89; + float subpixA_90; + bool horzSpan_91; + float lengthSign_92; + float subpixNWSWNESE_93; + float edgeVert_94; + float edgeHorz_95; + float edgeVert3_96; + float edgeHorz3_97; + float edgeVert4_98; + float edgeHorz4_99; + float lumaSWSE_100; + float lumaNWSW_101; + float edgeVert2_102; + float edgeHorz2_103; + float lumaNWNE_104; + float lumaNESE_105; + float edgeVert1_106; + float edgeHorz1_107; + float subpixNSWE_108; + float subpixRcpRange_109; + float lumaWE_110; + float lumaNS_111; + float lumaSW_112; + float lumaNE_113; + float lumaSE_114; + float lumaNW_115; + bool earlyExit_116; + float rangeMaxClamped_117; + float range_118; + float rangeMaxScaled_119; + float rangeMin_120; + float rangeMax_121; + float minWN_122; + float maxWN_123; + float minESM_124; + float maxESM_125; + float minSM_126; + float maxSM_127; + float lumaW_128; + float lumaN_129; + float lumaE_130; + float lumaS_131; + vec4 rgbyM_132; + vec2 posM_133; + float tmpvar_134; + tmpvar_134 = pos_37.x; + posM_133.x = tmpvar_134; + float tmpvar_135; + tmpvar_135 = pos_37.y; + posM_133.y = vec2(tmpvar_135).y; + vec4 tmpvar_136; + tmpvar_136.zw = vec2(0.0, 0.0); + tmpvar_136.xy = posM_133.xy; + vec4 tmpvar_137; + tmpvar_137 = xll_tex2Dlod (tex_39, tmpvar_136); + vec4 tmpvar_138; + tmpvar_138 = tmpvar_137; + rgbyM_132 = tmpvar_138; + vec4 tmpvar_139; + tmpvar_139.zw = vec2(0.0, 0.0); + tmpvar_139.xy = (posM_133 + (vec2(0.0, 1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_140; + tmpvar_140 = xll_tex2Dlod (tex_39, tmpvar_139); + float tmpvar_141; + tmpvar_141 = FxaaLuma (tmpvar_140); + float tmpvar_142; + tmpvar_142 = tmpvar_141; + lumaS_131 = tmpvar_142; + vec4 tmpvar_143; + tmpvar_143.zw = vec2(0.0, 0.0); + tmpvar_143.xy = (posM_133 + (vec2(1.0, 0.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_144; + tmpvar_144 = xll_tex2Dlod (tex_39, tmpvar_143); + float tmpvar_145; + tmpvar_145 = FxaaLuma (tmpvar_144); + float tmpvar_146; + tmpvar_146 = tmpvar_145; + lumaE_130 = tmpvar_146; + vec4 tmpvar_147; + tmpvar_147.zw = vec2(0.0, 0.0); + tmpvar_147.xy = (posM_133 + (vec2(0.0, -1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_148; + tmpvar_148 = xll_tex2Dlod (tex_39, tmpvar_147); + float tmpvar_149; + tmpvar_149 = FxaaLuma (tmpvar_148); + float tmpvar_150; + tmpvar_150 = tmpvar_149; + lumaN_129 = tmpvar_150; + vec4 tmpvar_151; + tmpvar_151.zw = vec2(0.0, 0.0); + tmpvar_151.xy = (posM_133 + (vec2(-1.0, 0.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_152; + tmpvar_152 = xll_tex2Dlod (tex_39, tmpvar_151); + float tmpvar_153; + tmpvar_153 = FxaaLuma (tmpvar_152); + float tmpvar_154; + tmpvar_154 = tmpvar_153; + lumaW_128 = tmpvar_154; + float tmpvar_155; + tmpvar_155 = max (lumaS_131, rgbyM_132.w); + float tmpvar_156; + tmpvar_156 = tmpvar_155; + maxSM_127 = tmpvar_156; + float tmpvar_157; + tmpvar_157 = min (lumaS_131, rgbyM_132.w); + float tmpvar_158; + tmpvar_158 = tmpvar_157; + minSM_126 = tmpvar_158; + float tmpvar_159; + tmpvar_159 = max (lumaE_130, maxSM_127); + float tmpvar_160; + tmpvar_160 = tmpvar_159; + maxESM_125 = tmpvar_160; + float tmpvar_161; + tmpvar_161 = min (lumaE_130, minSM_126); + float tmpvar_162; + tmpvar_162 = tmpvar_161; + minESM_124 = tmpvar_162; + float tmpvar_163; + tmpvar_163 = max (lumaN_129, lumaW_128); + float tmpvar_164; + tmpvar_164 = tmpvar_163; + maxWN_123 = tmpvar_164; + float tmpvar_165; + tmpvar_165 = min (lumaN_129, lumaW_128); + float tmpvar_166; + tmpvar_166 = tmpvar_165; + minWN_122 = tmpvar_166; + float tmpvar_167; + tmpvar_167 = max (maxWN_123, maxESM_125); + float tmpvar_168; + tmpvar_168 = tmpvar_167; + rangeMax_121 = tmpvar_168; + float tmpvar_169; + tmpvar_169 = min (minWN_122, minESM_124); + float tmpvar_170; + tmpvar_170 = tmpvar_169; + rangeMin_120 = tmpvar_170; + float tmpvar_171; + tmpvar_171 = (rangeMax_121 * fxaaQualityEdgeThreshold_47); + rangeMaxScaled_119 = tmpvar_171; + float tmpvar_172; + tmpvar_172 = (rangeMax_121 - rangeMin_120); + range_118 = tmpvar_172; + float tmpvar_173; + tmpvar_173 = max (fxaaQualityEdgeThresholdMin_48, rangeMaxScaled_119); + float tmpvar_174; + tmpvar_174 = tmpvar_173; + rangeMaxClamped_117 = tmpvar_174; + bool tmpvar_175; + tmpvar_175 = (range_118 < rangeMaxClamped_117); + earlyExit_116 = tmpvar_175; + if (earlyExit_116) { + return rgbyM_132; + }; + vec4 tmpvar_176; + tmpvar_176.zw = vec2(0.0, 0.0); + tmpvar_176.xy = (posM_133 + (vec2(-1.0, -1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_177; + tmpvar_177 = xll_tex2Dlod (tex_39, tmpvar_176); + float tmpvar_178; + tmpvar_178 = FxaaLuma (tmpvar_177); + float tmpvar_179; + tmpvar_179 = tmpvar_178; + lumaNW_115 = tmpvar_179; + vec4 tmpvar_180; + tmpvar_180.zw = vec2(0.0, 0.0); + tmpvar_180.xy = (posM_133 + (vec2(1.0, 1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_181; + tmpvar_181 = xll_tex2Dlod (tex_39, tmpvar_180); + float tmpvar_182; + tmpvar_182 = FxaaLuma (tmpvar_181); + float tmpvar_183; + tmpvar_183 = tmpvar_182; + lumaSE_114 = tmpvar_183; + vec4 tmpvar_184; + tmpvar_184.zw = vec2(0.0, 0.0); + tmpvar_184.xy = (posM_133 + (vec2(1.0, -1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_185; + tmpvar_185 = xll_tex2Dlod (tex_39, tmpvar_184); + float tmpvar_186; + tmpvar_186 = FxaaLuma (tmpvar_185); + float tmpvar_187; + tmpvar_187 = tmpvar_186; + lumaNE_113 = tmpvar_187; + vec4 tmpvar_188; + tmpvar_188.zw = vec2(0.0, 0.0); + tmpvar_188.xy = (posM_133 + (vec2(-1.0, 1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_189; + tmpvar_189 = xll_tex2Dlod (tex_39, tmpvar_188); + float tmpvar_190; + tmpvar_190 = FxaaLuma (tmpvar_189); + float tmpvar_191; + tmpvar_191 = tmpvar_190; + lumaSW_112 = tmpvar_191; + float tmpvar_192; + tmpvar_192 = (lumaN_129 + lumaS_131); + lumaNS_111 = tmpvar_192; + float tmpvar_193; + tmpvar_193 = (lumaW_128 + lumaE_130); + lumaWE_110 = tmpvar_193; + float tmpvar_194; + tmpvar_194 = (1.0 / range_118); + subpixRcpRange_109 = tmpvar_194; + float tmpvar_195; + tmpvar_195 = (lumaNS_111 + lumaWE_110); + subpixNSWE_108 = tmpvar_195; + float tmpvar_196; + tmpvar_196 = ((-(2.0) * rgbyM_132.w) + lumaNS_111); + edgeHorz1_107 = tmpvar_196; + float tmpvar_197; + tmpvar_197 = ((-(2.0) * rgbyM_132.w) + lumaWE_110); + edgeVert1_106 = tmpvar_197; + float tmpvar_198; + tmpvar_198 = (lumaNE_113 + lumaSE_114); + lumaNESE_105 = tmpvar_198; + float tmpvar_199; + tmpvar_199 = (lumaNW_115 + lumaNE_113); + lumaNWNE_104 = tmpvar_199; + float tmpvar_200; + tmpvar_200 = ((-(2.0) * lumaE_130) + lumaNESE_105); + edgeHorz2_103 = tmpvar_200; + float tmpvar_201; + tmpvar_201 = ((-(2.0) * lumaN_129) + lumaNWNE_104); + edgeVert2_102 = tmpvar_201; + float tmpvar_202; + tmpvar_202 = (lumaNW_115 + lumaSW_112); + lumaNWSW_101 = tmpvar_202; + float tmpvar_203; + tmpvar_203 = (lumaSW_112 + lumaSE_114); + lumaSWSE_100 = tmpvar_203; + float tmpvar_204; + tmpvar_204 = abs (edgeHorz1_107); + float tmpvar_205; + tmpvar_205 = abs (edgeHorz2_103); + float tmpvar_206; + tmpvar_206 = ((tmpvar_204 * 2.0) + tmpvar_205); + edgeHorz4_99 = tmpvar_206; + float tmpvar_207; + tmpvar_207 = abs (edgeVert1_106); + float tmpvar_208; + tmpvar_208 = abs (edgeVert2_102); + float tmpvar_209; + tmpvar_209 = ((tmpvar_207 * 2.0) + tmpvar_208); + edgeVert4_98 = tmpvar_209; + float tmpvar_210; + tmpvar_210 = ((-(2.0) * lumaW_128) + lumaNWSW_101); + edgeHorz3_97 = tmpvar_210; + float tmpvar_211; + tmpvar_211 = ((-(2.0) * lumaS_131) + lumaSWSE_100); + edgeVert3_96 = tmpvar_211; + float tmpvar_212; + tmpvar_212 = abs (edgeHorz3_97); + float tmpvar_213; + tmpvar_213 = (tmpvar_212 + edgeHorz4_99); + edgeHorz_95 = tmpvar_213; + float tmpvar_214; + tmpvar_214 = abs (edgeVert3_96); + float tmpvar_215; + tmpvar_215 = (tmpvar_214 + edgeVert4_98); + edgeVert_94 = tmpvar_215; + float tmpvar_216; + tmpvar_216 = (lumaNWSW_101 + lumaNESE_105); + subpixNWSWNESE_93 = tmpvar_216; + float tmpvar_217; + tmpvar_217 = fxaaQualityRcpFrame_42.x; + lengthSign_92 = tmpvar_217; + bool tmpvar_218; + tmpvar_218 = (edgeHorz_95 >= edgeVert_94); + horzSpan_91 = tmpvar_218; + float tmpvar_219; + tmpvar_219 = ((subpixNSWE_108 * 2.0) + subpixNWSWNESE_93); + subpixA_90 = tmpvar_219; + if (!(horzSpan_91)) { + float tmpvar_220; + tmpvar_220 = lumaW_128; + lumaN_129 = tmpvar_220; + }; + if (!(horzSpan_91)) { + float tmpvar_221; + tmpvar_221 = lumaE_130; + lumaS_131 = tmpvar_221; + }; + if (horzSpan_91) { + float tmpvar_222; + tmpvar_222 = fxaaQualityRcpFrame_42.y; + lengthSign_92 = tmpvar_222; + }; + float tmpvar_223; + tmpvar_223 = ((subpixA_90 * 0.0833333) - rgbyM_132.w); + subpixB_89 = tmpvar_223; + float tmpvar_224; + tmpvar_224 = (lumaN_129 - rgbyM_132.w); + gradientN_88 = tmpvar_224; + float tmpvar_225; + tmpvar_225 = (lumaS_131 - rgbyM_132.w); + gradientS_87 = tmpvar_225; + float tmpvar_226; + tmpvar_226 = (lumaN_129 + rgbyM_132.w); + lumaNN_86 = tmpvar_226; + float tmpvar_227; + tmpvar_227 = (lumaS_131 + rgbyM_132.w); + lumaSS_85 = tmpvar_227; + float tmpvar_228; + tmpvar_228 = abs (gradientN_88); + float tmpvar_229; + tmpvar_229 = abs (gradientS_87); + bool tmpvar_230; + tmpvar_230 = (tmpvar_228 >= tmpvar_229); + pairN_84 = tmpvar_230; + float tmpvar_231; + tmpvar_231 = abs (gradientN_88); + float tmpvar_232; + tmpvar_232 = abs (gradientS_87); + float tmpvar_233; + tmpvar_233 = max (tmpvar_231, tmpvar_232); + float tmpvar_234; + tmpvar_234 = tmpvar_233; + gradient_83 = tmpvar_234; + if (pairN_84) { + float tmpvar_235; + tmpvar_235 = -(lengthSign_92); + lengthSign_92 = tmpvar_235; + }; + float tmpvar_236; + tmpvar_236 = abs (subpixB_89); + float tmpvar_237; + tmpvar_237 = xll_saturate ((tmpvar_236 * subpixRcpRange_109)); + float tmpvar_238; + tmpvar_238 = tmpvar_237; + subpixC_82 = tmpvar_238; + float tmpvar_239; + tmpvar_239 = posM_133.x; + posB_81.x = tmpvar_239; + float tmpvar_240; + tmpvar_240 = posM_133.y; + posB_81.y = vec2(tmpvar_240).y; + float tmpvar_241; + if (!(horzSpan_91)) { + tmpvar_241 = 0.0; + } else { + tmpvar_241 = fxaaQualityRcpFrame_42.x; + }; + float tmpvar_242; + tmpvar_242 = tmpvar_241; + offNP_80.x = tmpvar_242; + float tmpvar_243; + if (horzSpan_91) { + tmpvar_243 = 0.0; + } else { + tmpvar_243 = fxaaQualityRcpFrame_42.y; + }; + float tmpvar_244; + tmpvar_244 = tmpvar_243; + offNP_80.y = vec2(tmpvar_244).y; + if (!(horzSpan_91)) { + float tmpvar_245; + tmpvar_245 = (posB_81.x + (lengthSign_92 * 0.5)); + posB_81.x = tmpvar_245; + }; + if (horzSpan_91) { + float tmpvar_246; + tmpvar_246 = (posB_81.y + (lengthSign_92 * 0.5)); + posB_81.y = vec2(tmpvar_246).y; + }; + float tmpvar_247; + tmpvar_247 = (posB_81.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_247; + float tmpvar_248; + tmpvar_248 = (posB_81.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_248).y; + float tmpvar_249; + tmpvar_249 = (posB_81.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_249; + float tmpvar_250; + tmpvar_250 = (posB_81.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_250).y; + float tmpvar_251; + tmpvar_251 = ((-(2.0) * subpixC_82) + 3.0); + subpixD_77 = tmpvar_251; + vec4 tmpvar_252; + tmpvar_252.zw = vec2(0.0, 0.0); + tmpvar_252.xy = posN_79.xy; + vec4 tmpvar_253; + tmpvar_253 = xll_tex2Dlod (tex_39, tmpvar_252); + float tmpvar_254; + tmpvar_254 = FxaaLuma (tmpvar_253); + float tmpvar_255; + tmpvar_255 = tmpvar_254; + lumaEndN_76 = tmpvar_255; + float tmpvar_256; + tmpvar_256 = (subpixC_82 * subpixC_82); + subpixE_75 = tmpvar_256; + vec4 tmpvar_257; + tmpvar_257.zw = vec2(0.0, 0.0); + tmpvar_257.xy = posP_78.xy; + vec4 tmpvar_258; + tmpvar_258 = xll_tex2Dlod (tex_39, tmpvar_257); + float tmpvar_259; + tmpvar_259 = FxaaLuma (tmpvar_258); + float tmpvar_260; + tmpvar_260 = tmpvar_259; + lumaEndP_74 = tmpvar_260; + if (!(pairN_84)) { + float tmpvar_261; + tmpvar_261 = lumaSS_85; + lumaNN_86 = tmpvar_261; + }; + float tmpvar_262; + tmpvar_262 = ((gradient_83 * 1.0) / 4.0); + gradientScaled_73 = tmpvar_262; + float tmpvar_263; + tmpvar_263 = (rgbyM_132.w - (lumaNN_86 * 0.5)); + lumaMM_72 = tmpvar_263; + float tmpvar_264; + tmpvar_264 = (subpixD_77 * subpixE_75); + subpixF_71 = tmpvar_264; + bool tmpvar_265; + tmpvar_265 = (lumaMM_72 < 0.0); + lumaMLTZero_70 = tmpvar_265; + float tmpvar_266; + tmpvar_266 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_266; + float tmpvar_267; + tmpvar_267 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_267; + float tmpvar_268; + tmpvar_268 = abs (lumaEndN_76); + bool tmpvar_269; + tmpvar_269 = (tmpvar_268 >= gradientScaled_73); + doneN_69 = tmpvar_269; + float tmpvar_270; + tmpvar_270 = abs (lumaEndP_74); + bool tmpvar_271; + tmpvar_271 = (tmpvar_270 >= gradientScaled_73); + doneP_68 = tmpvar_271; + if (!(doneN_69)) { + float tmpvar_272; + tmpvar_272 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_272; + }; + if (!(doneN_69)) { + float tmpvar_273; + tmpvar_273 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_273).y; + }; + bool tmpvar_274; + tmpvar_274 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_274; + if (!(doneP_68)) { + float tmpvar_275; + tmpvar_275 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_275; + }; + if (!(doneP_68)) { + float tmpvar_276; + tmpvar_276 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_276).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_277; + tmpvar_277.zw = vec2(0.0, 0.0); + tmpvar_277.xy = posN_79.xy.xy; + vec4 tmpvar_278; + tmpvar_278 = xll_tex2Dlod (tex_39, tmpvar_277); + float tmpvar_279; + tmpvar_279 = FxaaLuma (tmpvar_278); + float tmpvar_280; + tmpvar_280 = tmpvar_279; + lumaEndN_76 = tmpvar_280; + }; + if (!(doneP_68)) { + vec4 tmpvar_281; + tmpvar_281.zw = vec2(0.0, 0.0); + tmpvar_281.xy = posP_78.xy.xy; + vec4 tmpvar_282; + tmpvar_282 = xll_tex2Dlod (tex_39, tmpvar_281); + float tmpvar_283; + tmpvar_283 = FxaaLuma (tmpvar_282); + float tmpvar_284; + tmpvar_284 = tmpvar_283; + lumaEndP_74 = tmpvar_284; + }; + if (!(doneN_69)) { + float tmpvar_285; + tmpvar_285 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_285; + }; + if (!(doneP_68)) { + float tmpvar_286; + tmpvar_286 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_286; + }; + float tmpvar_287; + tmpvar_287 = abs (lumaEndN_76); + bool tmpvar_288; + tmpvar_288 = (tmpvar_287 >= gradientScaled_73); + doneN_69 = tmpvar_288; + float tmpvar_289; + tmpvar_289 = abs (lumaEndP_74); + bool tmpvar_290; + tmpvar_290 = (tmpvar_289 >= gradientScaled_73); + doneP_68 = tmpvar_290; + if (!(doneN_69)) { + float tmpvar_291; + tmpvar_291 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_291; + }; + if (!(doneN_69)) { + float tmpvar_292; + tmpvar_292 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_292).y; + }; + bool tmpvar_293; + tmpvar_293 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_293; + if (!(doneP_68)) { + float tmpvar_294; + tmpvar_294 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_294; + }; + if (!(doneP_68)) { + float tmpvar_295; + tmpvar_295 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_295).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_296; + tmpvar_296.zw = vec2(0.0, 0.0); + tmpvar_296.xy = posN_79.xy.xy; + vec4 tmpvar_297; + tmpvar_297 = xll_tex2Dlod (tex_39, tmpvar_296); + float tmpvar_298; + tmpvar_298 = FxaaLuma (tmpvar_297); + float tmpvar_299; + tmpvar_299 = tmpvar_298; + lumaEndN_76 = tmpvar_299; + }; + if (!(doneP_68)) { + vec4 tmpvar_300; + tmpvar_300.zw = vec2(0.0, 0.0); + tmpvar_300.xy = posP_78.xy.xy; + vec4 tmpvar_301; + tmpvar_301 = xll_tex2Dlod (tex_39, tmpvar_300); + float tmpvar_302; + tmpvar_302 = FxaaLuma (tmpvar_301); + float tmpvar_303; + tmpvar_303 = tmpvar_302; + lumaEndP_74 = tmpvar_303; + }; + if (!(doneN_69)) { + float tmpvar_304; + tmpvar_304 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_304; + }; + if (!(doneP_68)) { + float tmpvar_305; + tmpvar_305 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_305; + }; + float tmpvar_306; + tmpvar_306 = abs (lumaEndN_76); + bool tmpvar_307; + tmpvar_307 = (tmpvar_306 >= gradientScaled_73); + doneN_69 = tmpvar_307; + float tmpvar_308; + tmpvar_308 = abs (lumaEndP_74); + bool tmpvar_309; + tmpvar_309 = (tmpvar_308 >= gradientScaled_73); + doneP_68 = tmpvar_309; + if (!(doneN_69)) { + float tmpvar_310; + tmpvar_310 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_310; + }; + if (!(doneN_69)) { + float tmpvar_311; + tmpvar_311 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_311).y; + }; + bool tmpvar_312; + tmpvar_312 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_312; + if (!(doneP_68)) { + float tmpvar_313; + tmpvar_313 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_313; + }; + if (!(doneP_68)) { + float tmpvar_314; + tmpvar_314 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_314).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_315; + tmpvar_315.zw = vec2(0.0, 0.0); + tmpvar_315.xy = posN_79.xy.xy; + vec4 tmpvar_316; + tmpvar_316 = xll_tex2Dlod (tex_39, tmpvar_315); + float tmpvar_317; + tmpvar_317 = FxaaLuma (tmpvar_316); + float tmpvar_318; + tmpvar_318 = tmpvar_317; + lumaEndN_76 = tmpvar_318; + }; + if (!(doneP_68)) { + vec4 tmpvar_319; + tmpvar_319.zw = vec2(0.0, 0.0); + tmpvar_319.xy = posP_78.xy.xy; + vec4 tmpvar_320; + tmpvar_320 = xll_tex2Dlod (tex_39, tmpvar_319); + float tmpvar_321; + tmpvar_321 = FxaaLuma (tmpvar_320); + float tmpvar_322; + tmpvar_322 = tmpvar_321; + lumaEndP_74 = tmpvar_322; + }; + if (!(doneN_69)) { + float tmpvar_323; + tmpvar_323 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_323; + }; + if (!(doneP_68)) { + float tmpvar_324; + tmpvar_324 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_324; + }; + float tmpvar_325; + tmpvar_325 = abs (lumaEndN_76); + bool tmpvar_326; + tmpvar_326 = (tmpvar_325 >= gradientScaled_73); + doneN_69 = tmpvar_326; + float tmpvar_327; + tmpvar_327 = abs (lumaEndP_74); + bool tmpvar_328; + tmpvar_328 = (tmpvar_327 >= gradientScaled_73); + doneP_68 = tmpvar_328; + if (!(doneN_69)) { + float tmpvar_329; + tmpvar_329 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_329; + }; + if (!(doneN_69)) { + float tmpvar_330; + tmpvar_330 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_330).y; + }; + bool tmpvar_331; + tmpvar_331 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_331; + if (!(doneP_68)) { + float tmpvar_332; + tmpvar_332 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_332; + }; + if (!(doneP_68)) { + float tmpvar_333; + tmpvar_333 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_333).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_334; + tmpvar_334.zw = vec2(0.0, 0.0); + tmpvar_334.xy = posN_79.xy.xy; + vec4 tmpvar_335; + tmpvar_335 = xll_tex2Dlod (tex_39, tmpvar_334); + float tmpvar_336; + tmpvar_336 = FxaaLuma (tmpvar_335); + float tmpvar_337; + tmpvar_337 = tmpvar_336; + lumaEndN_76 = tmpvar_337; + }; + if (!(doneP_68)) { + vec4 tmpvar_338; + tmpvar_338.zw = vec2(0.0, 0.0); + tmpvar_338.xy = posP_78.xy.xy; + vec4 tmpvar_339; + tmpvar_339 = xll_tex2Dlod (tex_39, tmpvar_338); + float tmpvar_340; + tmpvar_340 = FxaaLuma (tmpvar_339); + float tmpvar_341; + tmpvar_341 = tmpvar_340; + lumaEndP_74 = tmpvar_341; + }; + if (!(doneN_69)) { + float tmpvar_342; + tmpvar_342 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_342; + }; + if (!(doneP_68)) { + float tmpvar_343; + tmpvar_343 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_343; + }; + float tmpvar_344; + tmpvar_344 = abs (lumaEndN_76); + bool tmpvar_345; + tmpvar_345 = (tmpvar_344 >= gradientScaled_73); + doneN_69 = tmpvar_345; + float tmpvar_346; + tmpvar_346 = abs (lumaEndP_74); + bool tmpvar_347; + tmpvar_347 = (tmpvar_346 >= gradientScaled_73); + doneP_68 = tmpvar_347; + if (!(doneN_69)) { + float tmpvar_348; + tmpvar_348 = (posN_79.x - (offNP_80.x * 1.5)); + posN_79.x = tmpvar_348; + }; + if (!(doneN_69)) { + float tmpvar_349; + tmpvar_349 = (posN_79.y - (offNP_80.y * 1.5)); + posN_79.y = vec2(tmpvar_349).y; + }; + bool tmpvar_350; + tmpvar_350 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_350; + if (!(doneP_68)) { + float tmpvar_351; + tmpvar_351 = (posP_78.x + (offNP_80.x * 1.5)); + posP_78.x = tmpvar_351; + }; + if (!(doneP_68)) { + float tmpvar_352; + tmpvar_352 = (posP_78.y + (offNP_80.y * 1.5)); + posP_78.y = vec2(tmpvar_352).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_353; + tmpvar_353.zw = vec2(0.0, 0.0); + tmpvar_353.xy = posN_79.xy.xy; + vec4 tmpvar_354; + tmpvar_354 = xll_tex2Dlod (tex_39, tmpvar_353); + float tmpvar_355; + tmpvar_355 = FxaaLuma (tmpvar_354); + float tmpvar_356; + tmpvar_356 = tmpvar_355; + lumaEndN_76 = tmpvar_356; + }; + if (!(doneP_68)) { + vec4 tmpvar_357; + tmpvar_357.zw = vec2(0.0, 0.0); + tmpvar_357.xy = posP_78.xy.xy; + vec4 tmpvar_358; + tmpvar_358 = xll_tex2Dlod (tex_39, tmpvar_357); + float tmpvar_359; + tmpvar_359 = FxaaLuma (tmpvar_358); + float tmpvar_360; + tmpvar_360 = tmpvar_359; + lumaEndP_74 = tmpvar_360; + }; + if (!(doneN_69)) { + float tmpvar_361; + tmpvar_361 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_361; + }; + if (!(doneP_68)) { + float tmpvar_362; + tmpvar_362 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_362; + }; + float tmpvar_363; + tmpvar_363 = abs (lumaEndN_76); + bool tmpvar_364; + tmpvar_364 = (tmpvar_363 >= gradientScaled_73); + doneN_69 = tmpvar_364; + float tmpvar_365; + tmpvar_365 = abs (lumaEndP_74); + bool tmpvar_366; + tmpvar_366 = (tmpvar_365 >= gradientScaled_73); + doneP_68 = tmpvar_366; + if (!(doneN_69)) { + float tmpvar_367; + tmpvar_367 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_367; + }; + if (!(doneN_69)) { + float tmpvar_368; + tmpvar_368 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_368).y; + }; + bool tmpvar_369; + tmpvar_369 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_369; + if (!(doneP_68)) { + float tmpvar_370; + tmpvar_370 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_370; + }; + if (!(doneP_68)) { + float tmpvar_371; + tmpvar_371 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_371).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_372; + tmpvar_372.zw = vec2(0.0, 0.0); + tmpvar_372.xy = posN_79.xy.xy; + vec4 tmpvar_373; + tmpvar_373 = xll_tex2Dlod (tex_39, tmpvar_372); + float tmpvar_374; + tmpvar_374 = FxaaLuma (tmpvar_373); + float tmpvar_375; + tmpvar_375 = tmpvar_374; + lumaEndN_76 = tmpvar_375; + }; + if (!(doneP_68)) { + vec4 tmpvar_376; + tmpvar_376.zw = vec2(0.0, 0.0); + tmpvar_376.xy = posP_78.xy.xy; + vec4 tmpvar_377; + tmpvar_377 = xll_tex2Dlod (tex_39, tmpvar_376); + float tmpvar_378; + tmpvar_378 = FxaaLuma (tmpvar_377); + float tmpvar_379; + tmpvar_379 = tmpvar_378; + lumaEndP_74 = tmpvar_379; + }; + if (!(doneN_69)) { + float tmpvar_380; + tmpvar_380 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_380; + }; + if (!(doneP_68)) { + float tmpvar_381; + tmpvar_381 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_381; + }; + float tmpvar_382; + tmpvar_382 = abs (lumaEndN_76); + bool tmpvar_383; + tmpvar_383 = (tmpvar_382 >= gradientScaled_73); + doneN_69 = tmpvar_383; + float tmpvar_384; + tmpvar_384 = abs (lumaEndP_74); + bool tmpvar_385; + tmpvar_385 = (tmpvar_384 >= gradientScaled_73); + doneP_68 = tmpvar_385; + if (!(doneN_69)) { + float tmpvar_386; + tmpvar_386 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_386; + }; + if (!(doneN_69)) { + float tmpvar_387; + tmpvar_387 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_387).y; + }; + bool tmpvar_388; + tmpvar_388 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_388; + if (!(doneP_68)) { + float tmpvar_389; + tmpvar_389 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_389; + }; + if (!(doneP_68)) { + float tmpvar_390; + tmpvar_390 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_390).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_391; + tmpvar_391.zw = vec2(0.0, 0.0); + tmpvar_391.xy = posN_79.xy.xy; + vec4 tmpvar_392; + tmpvar_392 = xll_tex2Dlod (tex_39, tmpvar_391); + float tmpvar_393; + tmpvar_393 = FxaaLuma (tmpvar_392); + float tmpvar_394; + tmpvar_394 = tmpvar_393; + lumaEndN_76 = tmpvar_394; + }; + if (!(doneP_68)) { + vec4 tmpvar_395; + tmpvar_395.zw = vec2(0.0, 0.0); + tmpvar_395.xy = posP_78.xy.xy; + vec4 tmpvar_396; + tmpvar_396 = xll_tex2Dlod (tex_39, tmpvar_395); + float tmpvar_397; + tmpvar_397 = FxaaLuma (tmpvar_396); + float tmpvar_398; + tmpvar_398 = tmpvar_397; + lumaEndP_74 = tmpvar_398; + }; + if (!(doneN_69)) { + float tmpvar_399; + tmpvar_399 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_399; + }; + if (!(doneP_68)) { + float tmpvar_400; + tmpvar_400 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_400; + }; + float tmpvar_401; + tmpvar_401 = abs (lumaEndN_76); + bool tmpvar_402; + tmpvar_402 = (tmpvar_401 >= gradientScaled_73); + doneN_69 = tmpvar_402; + float tmpvar_403; + tmpvar_403 = abs (lumaEndP_74); + bool tmpvar_404; + tmpvar_404 = (tmpvar_403 >= gradientScaled_73); + doneP_68 = tmpvar_404; + if (!(doneN_69)) { + float tmpvar_405; + tmpvar_405 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_405; + }; + if (!(doneN_69)) { + float tmpvar_406; + tmpvar_406 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_406).y; + }; + bool tmpvar_407; + tmpvar_407 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_407; + if (!(doneP_68)) { + float tmpvar_408; + tmpvar_408 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_408; + }; + if (!(doneP_68)) { + float tmpvar_409; + tmpvar_409 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_409).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_410; + tmpvar_410.zw = vec2(0.0, 0.0); + tmpvar_410.xy = posN_79.xy.xy; + vec4 tmpvar_411; + tmpvar_411 = xll_tex2Dlod (tex_39, tmpvar_410); + float tmpvar_412; + tmpvar_412 = FxaaLuma (tmpvar_411); + float tmpvar_413; + tmpvar_413 = tmpvar_412; + lumaEndN_76 = tmpvar_413; + }; + if (!(doneP_68)) { + vec4 tmpvar_414; + tmpvar_414.zw = vec2(0.0, 0.0); + tmpvar_414.xy = posP_78.xy.xy; + vec4 tmpvar_415; + tmpvar_415 = xll_tex2Dlod (tex_39, tmpvar_414); + float tmpvar_416; + tmpvar_416 = FxaaLuma (tmpvar_415); + float tmpvar_417; + tmpvar_417 = tmpvar_416; + lumaEndP_74 = tmpvar_417; + }; + if (!(doneN_69)) { + float tmpvar_418; + tmpvar_418 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_418; + }; + if (!(doneP_68)) { + float tmpvar_419; + tmpvar_419 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_419; + }; + float tmpvar_420; + tmpvar_420 = abs (lumaEndN_76); + bool tmpvar_421; + tmpvar_421 = (tmpvar_420 >= gradientScaled_73); + doneN_69 = tmpvar_421; + float tmpvar_422; + tmpvar_422 = abs (lumaEndP_74); + bool tmpvar_423; + tmpvar_423 = (tmpvar_422 >= gradientScaled_73); + doneP_68 = tmpvar_423; + if (!(doneN_69)) { + float tmpvar_424; + tmpvar_424 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_424; + }; + if (!(doneN_69)) { + float tmpvar_425; + tmpvar_425 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_425).y; + }; + bool tmpvar_426; + tmpvar_426 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_426; + if (!(doneP_68)) { + float tmpvar_427; + tmpvar_427 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_427; + }; + if (!(doneP_68)) { + float tmpvar_428; + tmpvar_428 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_428).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_429; + tmpvar_429.zw = vec2(0.0, 0.0); + tmpvar_429.xy = posN_79.xy.xy; + vec4 tmpvar_430; + tmpvar_430 = xll_tex2Dlod (tex_39, tmpvar_429); + float tmpvar_431; + tmpvar_431 = FxaaLuma (tmpvar_430); + float tmpvar_432; + tmpvar_432 = tmpvar_431; + lumaEndN_76 = tmpvar_432; + }; + if (!(doneP_68)) { + vec4 tmpvar_433; + tmpvar_433.zw = vec2(0.0, 0.0); + tmpvar_433.xy = posP_78.xy.xy; + vec4 tmpvar_434; + tmpvar_434 = xll_tex2Dlod (tex_39, tmpvar_433); + float tmpvar_435; + tmpvar_435 = FxaaLuma (tmpvar_434); + float tmpvar_436; + tmpvar_436 = tmpvar_435; + lumaEndP_74 = tmpvar_436; + }; + if (!(doneN_69)) { + float tmpvar_437; + tmpvar_437 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_437; + }; + if (!(doneP_68)) { + float tmpvar_438; + tmpvar_438 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_438; + }; + float tmpvar_439; + tmpvar_439 = abs (lumaEndN_76); + bool tmpvar_440; + tmpvar_440 = (tmpvar_439 >= gradientScaled_73); + doneN_69 = tmpvar_440; + float tmpvar_441; + tmpvar_441 = abs (lumaEndP_74); + bool tmpvar_442; + tmpvar_442 = (tmpvar_441 >= gradientScaled_73); + doneP_68 = tmpvar_442; + if (!(doneN_69)) { + float tmpvar_443; + tmpvar_443 = (posN_79.x - (offNP_80.x * 4.0)); + posN_79.x = tmpvar_443; + }; + if (!(doneN_69)) { + float tmpvar_444; + tmpvar_444 = (posN_79.y - (offNP_80.y * 4.0)); + posN_79.y = vec2(tmpvar_444).y; + }; + bool tmpvar_445; + tmpvar_445 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_445; + if (!(doneP_68)) { + float tmpvar_446; + tmpvar_446 = (posP_78.x + (offNP_80.x * 4.0)); + posP_78.x = tmpvar_446; + }; + if (!(doneP_68)) { + float tmpvar_447; + tmpvar_447 = (posP_78.y + (offNP_80.y * 4.0)); + posP_78.y = vec2(tmpvar_447).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + vec4 tmpvar_448; + tmpvar_448.zw = vec2(0.0, 0.0); + tmpvar_448.xy = posN_79.xy.xy; + vec4 tmpvar_449; + tmpvar_449 = xll_tex2Dlod (tex_39, tmpvar_448); + float tmpvar_450; + tmpvar_450 = FxaaLuma (tmpvar_449); + float tmpvar_451; + tmpvar_451 = tmpvar_450; + lumaEndN_76 = tmpvar_451; + }; + if (!(doneP_68)) { + vec4 tmpvar_452; + tmpvar_452.zw = vec2(0.0, 0.0); + tmpvar_452.xy = posP_78.xy.xy; + vec4 tmpvar_453; + tmpvar_453 = xll_tex2Dlod (tex_39, tmpvar_452); + float tmpvar_454; + tmpvar_454 = FxaaLuma (tmpvar_453); + float tmpvar_455; + tmpvar_455 = tmpvar_454; + lumaEndP_74 = tmpvar_455; + }; + if (!(doneN_69)) { + float tmpvar_456; + tmpvar_456 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_456; + }; + if (!(doneP_68)) { + float tmpvar_457; + tmpvar_457 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_457; + }; + float tmpvar_458; + tmpvar_458 = abs (lumaEndN_76); + bool tmpvar_459; + tmpvar_459 = (tmpvar_458 >= gradientScaled_73); + doneN_69 = tmpvar_459; + float tmpvar_460; + tmpvar_460 = abs (lumaEndP_74); + bool tmpvar_461; + tmpvar_461 = (tmpvar_460 >= gradientScaled_73); + doneP_68 = tmpvar_461; + if (!(doneN_69)) { + float tmpvar_462; + tmpvar_462 = (posN_79.x - (offNP_80.x * 8.0)); + posN_79.x = tmpvar_462; + }; + if (!(doneN_69)) { + float tmpvar_463; + tmpvar_463 = (posN_79.y - (offNP_80.y * 8.0)); + posN_79.y = vec2(tmpvar_463).y; + }; + bool tmpvar_464; + tmpvar_464 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_464; + if (!(doneP_68)) { + float tmpvar_465; + tmpvar_465 = (posP_78.x + (offNP_80.x * 8.0)); + posP_78.x = tmpvar_465; + }; + if (!(doneP_68)) { + float tmpvar_466; + tmpvar_466 = (posP_78.y + (offNP_80.y * 8.0)); + posP_78.y = vec2(tmpvar_466).y; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + float tmpvar_467; + tmpvar_467 = (posM_133.x - posN_79.x); + dstN_66 = tmpvar_467; + float tmpvar_468; + tmpvar_468 = (posP_78.x - posM_133.x); + dstP_65 = tmpvar_468; + if (!(horzSpan_91)) { + float tmpvar_469; + tmpvar_469 = (posM_133.y - posN_79.y); + dstN_66 = tmpvar_469; + }; + if (!(horzSpan_91)) { + float tmpvar_470; + tmpvar_470 = (posP_78.y - posM_133.y); + dstP_65 = tmpvar_470; + }; + bool tmpvar_471; + tmpvar_471 = ((lumaEndN_76 < 0.0) != lumaMLTZero_70); + goodSpanN_64 = tmpvar_471; + float tmpvar_472; + tmpvar_472 = (dstP_65 + dstN_66); + spanLength_63 = tmpvar_472; + bool tmpvar_473; + tmpvar_473 = ((lumaEndP_74 < 0.0) != lumaMLTZero_70); + goodSpanP_62 = tmpvar_473; + float tmpvar_474; + tmpvar_474 = (1.0 / spanLength_63); + spanLengthRcp_61 = tmpvar_474; + bool tmpvar_475; + tmpvar_475 = (dstN_66 < dstP_65); + directionN_60 = tmpvar_475; + float tmpvar_476; + tmpvar_476 = min (dstN_66, dstP_65); + float tmpvar_477; + tmpvar_477 = tmpvar_476; + dst_59 = tmpvar_477; + bool tmpvar_478; + if (directionN_60) { + tmpvar_478 = goodSpanN_64; + } else { + tmpvar_478 = goodSpanP_62; + }; + bool tmpvar_479; + tmpvar_479 = tmpvar_478; + goodSpan_58 = tmpvar_479; + float tmpvar_480; + tmpvar_480 = (subpixF_71 * subpixF_71); + subpixG_57 = tmpvar_480; + float tmpvar_481; + tmpvar_481 = ((dst_59 * -(spanLengthRcp_61)) + 0.5); + pixelOffset_56 = tmpvar_481; + float tmpvar_482; + tmpvar_482 = (subpixG_57 * fxaaQualitySubpix_46); + subpixH_55 = tmpvar_482; + float tmpvar_483; + if (goodSpan_58) { + tmpvar_483 = pixelOffset_56; + } else { + tmpvar_483 = 0.0; + }; + float tmpvar_484; + tmpvar_484 = tmpvar_483; + pixelOffsetGood_54 = tmpvar_484; + float tmpvar_485; + tmpvar_485 = max (pixelOffsetGood_54, subpixH_55); + float tmpvar_486; + tmpvar_486 = tmpvar_485; + pixelOffsetSubpix_53 = tmpvar_486; + if (!(horzSpan_91)) { + float tmpvar_487; + tmpvar_487 = (posM_133.x + (pixelOffsetSubpix_53 * lengthSign_92)); + posM_133.x = tmpvar_487; + }; + if (horzSpan_91) { + float tmpvar_488; + tmpvar_488 = (posM_133.y + (pixelOffsetSubpix_53 * lengthSign_92)); + posM_133.y = vec2(tmpvar_488).y; + }; + vec4 tmpvar_489; + tmpvar_489.zw = vec2(0.0, 0.0); + tmpvar_489.xy = posM_133.xy; + vec4 tmpvar_490; + tmpvar_490 = xll_tex2Dlod (tex_39, tmpvar_489); + vec4 tmpvar_491; + tmpvar_491.xyz = tmpvar_490.xyz.xyz; + tmpvar_491.w = rgbyM_132.w; + return tmpvar_491; +} + +vec4 xlat_main ( + in v2f i_492 +) +{ + float fxaaN_493; + float tmpvar_494; + tmpvar_494 = 0.5; + fxaaN_493 = tmpvar_494; + vec4 tmpvar_495; + tmpvar_495.x = -(fxaaN_493); + tmpvar_495.y = -(fxaaN_493); + tmpvar_495.z = fxaaN_493; + tmpvar_495.w = fxaaN_493; + vec4 tmpvar_496; + tmpvar_496 = FxaaPixelShader (i_492.uv, i_492.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_495), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); + return tmpvar_496; +} + +void main () +{ + v2f xlt_i_497; + vec4 xl_retval_498; + vec4 tmpvar_499; + tmpvar_499 = xlv_SV_POSITION.xyzw; + vec4 tmpvar_500; + tmpvar_500 = tmpvar_499; + xlt_i_497.pos = tmpvar_500; + vec2 tmpvar_501; + tmpvar_501 = xlv_TEXCOORD0.xy; + vec2 tmpvar_502; + tmpvar_502 = tmpvar_501; + xlt_i_497.uv = tmpvar_502; + vec4 tmpvar_503; + tmpvar_503 = xlv_TEXCOORD1.xyzw; + vec4 tmpvar_504; + tmpvar_504 = tmpvar_503; + xlt_i_497.uvPosPos = tmpvar_504; + vec4 tmpvar_505; + tmpvar_505 = xlat_main (xlt_i_497); + vec4 tmpvar_506; + tmpvar_506 = tmpvar_505; + xl_retval_498 = tmpvar_506; + vec4 tmpvar_507; + tmpvar_507 = xl_retval_498.xyzw; + vec4 tmpvar_508; + tmpvar_508 = tmpvar_507; + gl_FragData[0] = tmpvar_508; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-irES.txt new file mode 100644 index 000000000..68e7e9efe --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-irES.txt @@ -0,0 +1,1476 @@ +#extension GL_EXT_shader_texture_lod : enable +struct v2f { + highp vec4 pos; + highp vec2 uv; + highp vec4 uvPosPos; +}; +varying highp vec4 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +varying highp vec4 xlv_SV_POSITION; +uniform highp vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + lowp vec4 tmpvar_3; + tmpvar_3 = texture2DLodEXT (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +float xll_saturate ( + in float x_4 +) +{ + float tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec2 xll_saturate ( + in vec2 x_6 +) +{ + vec2 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec3 xll_saturate ( + in vec3 x_8 +) +{ + vec3 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +vec4 xll_saturate ( + in vec4 x_10 +) +{ + vec4 tmpvar_11; + tmpvar_11 = clamp (x_10, 0.0, 1.0); + return tmpvar_11; +} + +mat2 xll_saturate ( + in mat2 m_12 +) +{ + vec2 tmpvar_13; + tmpvar_13 = clamp (m_12[0], 0.0, 1.0); + vec2 tmpvar_14; + tmpvar_14 = clamp (m_12[1], 0.0, 1.0); + mat2 tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = tmpvar_13; + tmpvar_15[0] = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = tmpvar_14; + tmpvar_15[1] = tmpvar_17; + return tmpvar_15; +} + +mat3 xll_saturate ( + in mat3 m_18 +) +{ + vec3 tmpvar_19; + tmpvar_19 = clamp (m_18[0], 0.0, 1.0); + vec3 tmpvar_20; + tmpvar_20 = clamp (m_18[1], 0.0, 1.0); + vec3 tmpvar_21; + tmpvar_21 = clamp (m_18[2], 0.0, 1.0); + mat3 tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_22[0] = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_20; + tmpvar_22[1] = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_21; + tmpvar_22[2] = tmpvar_25; + return tmpvar_22; +} + +mat4 xll_saturate ( + in mat4 m_26 +) +{ + vec4 tmpvar_27; + tmpvar_27 = clamp (m_26[0], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_26[1], 0.0, 1.0); + vec4 tmpvar_29; + tmpvar_29 = clamp (m_26[2], 0.0, 1.0); + vec4 tmpvar_30; + tmpvar_30 = clamp (m_26[3], 0.0, 1.0); + mat4 tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_31[0] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_31[1] = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_29; + tmpvar_31[2] = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_30; + tmpvar_31[3] = tmpvar_35; + return tmpvar_31; +} + +float FxaaLuma ( + in highp vec4 rgba_36 +) +{ + return rgba_36.w; +} + +vec4 FxaaPixelShader ( + in highp vec2 pos_37, + in highp vec4 fxaaConsolePosPos_38, + in sampler2D tex_39, + in sampler2D fxaaConsole360TexExpBiasNegOne_40, + in sampler2D fxaaConsole360TexExpBiasNegTwo_41, + in highp vec2 fxaaQualityRcpFrame_42, + in highp vec4 fxaaConsoleRcpFrameOpt_43, + in highp vec4 fxaaConsoleRcpFrameOpt2_44, + in highp vec4 fxaaConsole360RcpFrameOpt2_45, + in highp float fxaaQualitySubpix_46, + in highp float fxaaQualityEdgeThreshold_47, + in highp float fxaaQualityEdgeThresholdMin_48, + in highp float fxaaConsoleEdgeSharpness_49, + in highp float fxaaConsoleEdgeThreshold_50, + in highp float fxaaConsoleEdgeThresholdMin_51, + in highp vec4 fxaaConsole360ConstDir_52 +) +{ + highp float pixelOffsetSubpix_53; + highp float pixelOffsetGood_54; + highp float subpixH_55; + highp float pixelOffset_56; + highp float subpixG_57; + bool goodSpan_58; + highp float dst_59; + bool directionN_60; + highp float spanLengthRcp_61; + bool goodSpanP_62; + highp float spanLength_63; + bool goodSpanN_64; + highp float dstP_65; + highp float dstN_66; + bool doneNP_67; + bool doneP_68; + bool doneN_69; + bool lumaMLTZero_70; + highp float subpixF_71; + highp float lumaMM_72; + highp float gradientScaled_73; + highp float lumaEndP_74; + highp float subpixE_75; + highp float lumaEndN_76; + highp float subpixD_77; + highp vec2 posP_78; + highp vec2 posN_79; + highp vec2 offNP_80; + highp vec2 posB_81; + highp float subpixC_82; + highp float gradient_83; + bool pairN_84; + highp float lumaSS_85; + highp float lumaNN_86; + highp float gradientS_87; + highp float gradientN_88; + highp float subpixB_89; + highp float subpixA_90; + bool horzSpan_91; + highp float lengthSign_92; + highp float subpixNWSWNESE_93; + highp float edgeVert_94; + highp float edgeHorz_95; + highp float edgeVert3_96; + highp float edgeHorz3_97; + highp float edgeVert4_98; + highp float edgeHorz4_99; + highp float lumaSWSE_100; + highp float lumaNWSW_101; + highp float edgeVert2_102; + highp float edgeHorz2_103; + highp float lumaNWNE_104; + highp float lumaNESE_105; + highp float edgeVert1_106; + highp float edgeHorz1_107; + highp float subpixNSWE_108; + highp float subpixRcpRange_109; + highp float lumaWE_110; + highp float lumaNS_111; + highp float lumaSW_112; + highp float lumaNE_113; + highp float lumaSE_114; + highp float lumaNW_115; + bool earlyExit_116; + highp float rangeMaxClamped_117; + highp float range_118; + highp float rangeMaxScaled_119; + highp float rangeMin_120; + highp float rangeMax_121; + highp float minWN_122; + highp float maxWN_123; + highp float minESM_124; + highp float maxESM_125; + highp float minSM_126; + highp float maxSM_127; + highp float lumaW_128; + highp float lumaN_129; + highp float lumaE_130; + highp float lumaS_131; + highp vec4 rgbyM_132; + highp vec2 posM_133; + highp float tmpvar_134; + tmpvar_134 = pos_37.x; + posM_133.x = tmpvar_134; + highp float tmpvar_135; + tmpvar_135 = pos_37.y; + posM_133.y = vec2(tmpvar_135).y; + highp vec4 tmpvar_136; + tmpvar_136.zw = vec2(0.0, 0.0); + tmpvar_136.xy = posM_133.xy; + vec4 tmpvar_137; + tmpvar_137 = xll_tex2Dlod (tex_39, tmpvar_136); + vec4 tmpvar_138; + tmpvar_138 = tmpvar_137; + rgbyM_132 = tmpvar_138; + highp vec4 tmpvar_139; + tmpvar_139.zw = vec2(0.0, 0.0); + tmpvar_139.xy = (posM_133 + (vec2(0.0, 1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_140; + tmpvar_140 = xll_tex2Dlod (tex_39, tmpvar_139); + highp float tmpvar_141; + tmpvar_141 = FxaaLuma (tmpvar_140); + highp float tmpvar_142; + tmpvar_142 = tmpvar_141; + lumaS_131 = tmpvar_142; + highp vec4 tmpvar_143; + tmpvar_143.zw = vec2(0.0, 0.0); + tmpvar_143.xy = (posM_133 + (vec2(1.0, 0.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_144; + tmpvar_144 = xll_tex2Dlod (tex_39, tmpvar_143); + highp float tmpvar_145; + tmpvar_145 = FxaaLuma (tmpvar_144); + highp float tmpvar_146; + tmpvar_146 = tmpvar_145; + lumaE_130 = tmpvar_146; + highp vec4 tmpvar_147; + tmpvar_147.zw = vec2(0.0, 0.0); + tmpvar_147.xy = (posM_133 + (vec2(0.0, -1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_148; + tmpvar_148 = xll_tex2Dlod (tex_39, tmpvar_147); + highp float tmpvar_149; + tmpvar_149 = FxaaLuma (tmpvar_148); + highp float tmpvar_150; + tmpvar_150 = tmpvar_149; + lumaN_129 = tmpvar_150; + highp vec4 tmpvar_151; + tmpvar_151.zw = vec2(0.0, 0.0); + tmpvar_151.xy = (posM_133 + (vec2(-1.0, 0.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_152; + tmpvar_152 = xll_tex2Dlod (tex_39, tmpvar_151); + highp float tmpvar_153; + tmpvar_153 = FxaaLuma (tmpvar_152); + highp float tmpvar_154; + tmpvar_154 = tmpvar_153; + lumaW_128 = tmpvar_154; + highp float tmpvar_155; + tmpvar_155 = max (lumaS_131, rgbyM_132.w); + highp float tmpvar_156; + tmpvar_156 = tmpvar_155; + maxSM_127 = tmpvar_156; + highp float tmpvar_157; + tmpvar_157 = min (lumaS_131, rgbyM_132.w); + highp float tmpvar_158; + tmpvar_158 = tmpvar_157; + minSM_126 = tmpvar_158; + highp float tmpvar_159; + tmpvar_159 = max (lumaE_130, maxSM_127); + highp float tmpvar_160; + tmpvar_160 = tmpvar_159; + maxESM_125 = tmpvar_160; + highp float tmpvar_161; + tmpvar_161 = min (lumaE_130, minSM_126); + highp float tmpvar_162; + tmpvar_162 = tmpvar_161; + minESM_124 = tmpvar_162; + highp float tmpvar_163; + tmpvar_163 = max (lumaN_129, lumaW_128); + highp float tmpvar_164; + tmpvar_164 = tmpvar_163; + maxWN_123 = tmpvar_164; + highp float tmpvar_165; + tmpvar_165 = min (lumaN_129, lumaW_128); + highp float tmpvar_166; + tmpvar_166 = tmpvar_165; + minWN_122 = tmpvar_166; + highp float tmpvar_167; + tmpvar_167 = max (maxWN_123, maxESM_125); + highp float tmpvar_168; + tmpvar_168 = tmpvar_167; + rangeMax_121 = tmpvar_168; + highp float tmpvar_169; + tmpvar_169 = min (minWN_122, minESM_124); + highp float tmpvar_170; + tmpvar_170 = tmpvar_169; + rangeMin_120 = tmpvar_170; + highp float tmpvar_171; + tmpvar_171 = (rangeMax_121 * fxaaQualityEdgeThreshold_47); + rangeMaxScaled_119 = tmpvar_171; + highp float tmpvar_172; + tmpvar_172 = (rangeMax_121 - rangeMin_120); + range_118 = tmpvar_172; + highp float tmpvar_173; + tmpvar_173 = max (fxaaQualityEdgeThresholdMin_48, rangeMaxScaled_119); + highp float tmpvar_174; + tmpvar_174 = tmpvar_173; + rangeMaxClamped_117 = tmpvar_174; + bool tmpvar_175; + tmpvar_175 = (range_118 < rangeMaxClamped_117); + earlyExit_116 = tmpvar_175; + if (earlyExit_116) { + return rgbyM_132; + }; + highp vec4 tmpvar_176; + tmpvar_176.zw = vec2(0.0, 0.0); + tmpvar_176.xy = (posM_133 + (vec2(-1.0, -1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_177; + tmpvar_177 = xll_tex2Dlod (tex_39, tmpvar_176); + highp float tmpvar_178; + tmpvar_178 = FxaaLuma (tmpvar_177); + highp float tmpvar_179; + tmpvar_179 = tmpvar_178; + lumaNW_115 = tmpvar_179; + highp vec4 tmpvar_180; + tmpvar_180.zw = vec2(0.0, 0.0); + tmpvar_180.xy = (posM_133 + (vec2(1.0, 1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_181; + tmpvar_181 = xll_tex2Dlod (tex_39, tmpvar_180); + highp float tmpvar_182; + tmpvar_182 = FxaaLuma (tmpvar_181); + highp float tmpvar_183; + tmpvar_183 = tmpvar_182; + lumaSE_114 = tmpvar_183; + highp vec4 tmpvar_184; + tmpvar_184.zw = vec2(0.0, 0.0); + tmpvar_184.xy = (posM_133 + (vec2(1.0, -1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_185; + tmpvar_185 = xll_tex2Dlod (tex_39, tmpvar_184); + highp float tmpvar_186; + tmpvar_186 = FxaaLuma (tmpvar_185); + highp float tmpvar_187; + tmpvar_187 = tmpvar_186; + lumaNE_113 = tmpvar_187; + highp vec4 tmpvar_188; + tmpvar_188.zw = vec2(0.0, 0.0); + tmpvar_188.xy = (posM_133 + (vec2(-1.0, 1.0) * fxaaQualityRcpFrame_42.xy)).xy; + vec4 tmpvar_189; + tmpvar_189 = xll_tex2Dlod (tex_39, tmpvar_188); + highp float tmpvar_190; + tmpvar_190 = FxaaLuma (tmpvar_189); + highp float tmpvar_191; + tmpvar_191 = tmpvar_190; + lumaSW_112 = tmpvar_191; + highp float tmpvar_192; + tmpvar_192 = (lumaN_129 + lumaS_131); + lumaNS_111 = tmpvar_192; + highp float tmpvar_193; + tmpvar_193 = (lumaW_128 + lumaE_130); + lumaWE_110 = tmpvar_193; + highp float tmpvar_194; + tmpvar_194 = (1.0 / range_118); + subpixRcpRange_109 = tmpvar_194; + highp float tmpvar_195; + tmpvar_195 = (lumaNS_111 + lumaWE_110); + subpixNSWE_108 = tmpvar_195; + highp float tmpvar_196; + tmpvar_196 = ((-(2.0) * rgbyM_132.w) + lumaNS_111); + edgeHorz1_107 = tmpvar_196; + highp float tmpvar_197; + tmpvar_197 = ((-(2.0) * rgbyM_132.w) + lumaWE_110); + edgeVert1_106 = tmpvar_197; + highp float tmpvar_198; + tmpvar_198 = (lumaNE_113 + lumaSE_114); + lumaNESE_105 = tmpvar_198; + highp float tmpvar_199; + tmpvar_199 = (lumaNW_115 + lumaNE_113); + lumaNWNE_104 = tmpvar_199; + highp float tmpvar_200; + tmpvar_200 = ((-(2.0) * lumaE_130) + lumaNESE_105); + edgeHorz2_103 = tmpvar_200; + highp float tmpvar_201; + tmpvar_201 = ((-(2.0) * lumaN_129) + lumaNWNE_104); + edgeVert2_102 = tmpvar_201; + highp float tmpvar_202; + tmpvar_202 = (lumaNW_115 + lumaSW_112); + lumaNWSW_101 = tmpvar_202; + highp float tmpvar_203; + tmpvar_203 = (lumaSW_112 + lumaSE_114); + lumaSWSE_100 = tmpvar_203; + highp float tmpvar_204; + tmpvar_204 = abs (edgeHorz1_107); + highp float tmpvar_205; + tmpvar_205 = abs (edgeHorz2_103); + highp float tmpvar_206; + tmpvar_206 = ((tmpvar_204 * 2.0) + tmpvar_205); + edgeHorz4_99 = tmpvar_206; + highp float tmpvar_207; + tmpvar_207 = abs (edgeVert1_106); + highp float tmpvar_208; + tmpvar_208 = abs (edgeVert2_102); + highp float tmpvar_209; + tmpvar_209 = ((tmpvar_207 * 2.0) + tmpvar_208); + edgeVert4_98 = tmpvar_209; + highp float tmpvar_210; + tmpvar_210 = ((-(2.0) * lumaW_128) + lumaNWSW_101); + edgeHorz3_97 = tmpvar_210; + highp float tmpvar_211; + tmpvar_211 = ((-(2.0) * lumaS_131) + lumaSWSE_100); + edgeVert3_96 = tmpvar_211; + highp float tmpvar_212; + tmpvar_212 = abs (edgeHorz3_97); + highp float tmpvar_213; + tmpvar_213 = (tmpvar_212 + edgeHorz4_99); + edgeHorz_95 = tmpvar_213; + highp float tmpvar_214; + tmpvar_214 = abs (edgeVert3_96); + highp float tmpvar_215; + tmpvar_215 = (tmpvar_214 + edgeVert4_98); + edgeVert_94 = tmpvar_215; + highp float tmpvar_216; + tmpvar_216 = (lumaNWSW_101 + lumaNESE_105); + subpixNWSWNESE_93 = tmpvar_216; + highp float tmpvar_217; + tmpvar_217 = fxaaQualityRcpFrame_42.x; + lengthSign_92 = tmpvar_217; + bool tmpvar_218; + tmpvar_218 = (edgeHorz_95 >= edgeVert_94); + horzSpan_91 = tmpvar_218; + highp float tmpvar_219; + tmpvar_219 = ((subpixNSWE_108 * 2.0) + subpixNWSWNESE_93); + subpixA_90 = tmpvar_219; + if (!(horzSpan_91)) { + highp float tmpvar_220; + tmpvar_220 = lumaW_128; + lumaN_129 = tmpvar_220; + }; + if (!(horzSpan_91)) { + highp float tmpvar_221; + tmpvar_221 = lumaE_130; + lumaS_131 = tmpvar_221; + }; + if (horzSpan_91) { + highp float tmpvar_222; + tmpvar_222 = fxaaQualityRcpFrame_42.y; + lengthSign_92 = tmpvar_222; + }; + highp float tmpvar_223; + tmpvar_223 = ((subpixA_90 * 0.0833333) - rgbyM_132.w); + subpixB_89 = tmpvar_223; + highp float tmpvar_224; + tmpvar_224 = (lumaN_129 - rgbyM_132.w); + gradientN_88 = tmpvar_224; + highp float tmpvar_225; + tmpvar_225 = (lumaS_131 - rgbyM_132.w); + gradientS_87 = tmpvar_225; + highp float tmpvar_226; + tmpvar_226 = (lumaN_129 + rgbyM_132.w); + lumaNN_86 = tmpvar_226; + highp float tmpvar_227; + tmpvar_227 = (lumaS_131 + rgbyM_132.w); + lumaSS_85 = tmpvar_227; + highp float tmpvar_228; + tmpvar_228 = abs (gradientN_88); + highp float tmpvar_229; + tmpvar_229 = abs (gradientS_87); + bool tmpvar_230; + tmpvar_230 = (tmpvar_228 >= tmpvar_229); + pairN_84 = tmpvar_230; + highp float tmpvar_231; + tmpvar_231 = abs (gradientN_88); + highp float tmpvar_232; + tmpvar_232 = abs (gradientS_87); + highp float tmpvar_233; + tmpvar_233 = max (tmpvar_231, tmpvar_232); + highp float tmpvar_234; + tmpvar_234 = tmpvar_233; + gradient_83 = tmpvar_234; + if (pairN_84) { + highp float tmpvar_235; + tmpvar_235 = -(lengthSign_92); + lengthSign_92 = tmpvar_235; + }; + highp float tmpvar_236; + tmpvar_236 = abs (subpixB_89); + float tmpvar_237; + tmpvar_237 = xll_saturate ((tmpvar_236 * subpixRcpRange_109)); + float tmpvar_238; + tmpvar_238 = tmpvar_237; + subpixC_82 = tmpvar_238; + highp float tmpvar_239; + tmpvar_239 = posM_133.x; + posB_81.x = tmpvar_239; + highp float tmpvar_240; + tmpvar_240 = posM_133.y; + posB_81.y = vec2(tmpvar_240).y; + highp float tmpvar_241; + if (!(horzSpan_91)) { + tmpvar_241 = 0.0; + } else { + tmpvar_241 = fxaaQualityRcpFrame_42.x; + }; + highp float tmpvar_242; + tmpvar_242 = tmpvar_241; + offNP_80.x = tmpvar_242; + highp float tmpvar_243; + if (horzSpan_91) { + tmpvar_243 = 0.0; + } else { + tmpvar_243 = fxaaQualityRcpFrame_42.y; + }; + highp float tmpvar_244; + tmpvar_244 = tmpvar_243; + offNP_80.y = vec2(tmpvar_244).y; + if (!(horzSpan_91)) { + highp float tmpvar_245; + tmpvar_245 = (posB_81.x + (lengthSign_92 * 0.5)); + posB_81.x = tmpvar_245; + }; + if (horzSpan_91) { + highp float tmpvar_246; + tmpvar_246 = (posB_81.y + (lengthSign_92 * 0.5)); + posB_81.y = vec2(tmpvar_246).y; + }; + highp float tmpvar_247; + tmpvar_247 = (posB_81.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_247; + highp float tmpvar_248; + tmpvar_248 = (posB_81.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_248).y; + highp float tmpvar_249; + tmpvar_249 = (posB_81.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_249; + highp float tmpvar_250; + tmpvar_250 = (posB_81.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_250).y; + highp float tmpvar_251; + tmpvar_251 = ((-(2.0) * subpixC_82) + 3.0); + subpixD_77 = tmpvar_251; + highp vec4 tmpvar_252; + tmpvar_252.zw = vec2(0.0, 0.0); + tmpvar_252.xy = posN_79.xy; + vec4 tmpvar_253; + tmpvar_253 = xll_tex2Dlod (tex_39, tmpvar_252); + highp float tmpvar_254; + tmpvar_254 = FxaaLuma (tmpvar_253); + highp float tmpvar_255; + tmpvar_255 = tmpvar_254; + lumaEndN_76 = tmpvar_255; + highp float tmpvar_256; + tmpvar_256 = (subpixC_82 * subpixC_82); + subpixE_75 = tmpvar_256; + highp vec4 tmpvar_257; + tmpvar_257.zw = vec2(0.0, 0.0); + tmpvar_257.xy = posP_78.xy; + vec4 tmpvar_258; + tmpvar_258 = xll_tex2Dlod (tex_39, tmpvar_257); + highp float tmpvar_259; + tmpvar_259 = FxaaLuma (tmpvar_258); + highp float tmpvar_260; + tmpvar_260 = tmpvar_259; + lumaEndP_74 = tmpvar_260; + if (!(pairN_84)) { + highp float tmpvar_261; + tmpvar_261 = lumaSS_85; + lumaNN_86 = tmpvar_261; + }; + highp float tmpvar_262; + tmpvar_262 = ((gradient_83 * 1.0) / 4.0); + gradientScaled_73 = tmpvar_262; + highp float tmpvar_263; + tmpvar_263 = (rgbyM_132.w - (lumaNN_86 * 0.5)); + lumaMM_72 = tmpvar_263; + highp float tmpvar_264; + tmpvar_264 = (subpixD_77 * subpixE_75); + subpixF_71 = tmpvar_264; + bool tmpvar_265; + tmpvar_265 = (lumaMM_72 < 0.0); + lumaMLTZero_70 = tmpvar_265; + highp float tmpvar_266; + tmpvar_266 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_266; + highp float tmpvar_267; + tmpvar_267 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_267; + highp float tmpvar_268; + tmpvar_268 = abs (lumaEndN_76); + bool tmpvar_269; + tmpvar_269 = (tmpvar_268 >= gradientScaled_73); + doneN_69 = tmpvar_269; + highp float tmpvar_270; + tmpvar_270 = abs (lumaEndP_74); + bool tmpvar_271; + tmpvar_271 = (tmpvar_270 >= gradientScaled_73); + doneP_68 = tmpvar_271; + if (!(doneN_69)) { + highp float tmpvar_272; + tmpvar_272 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_272; + }; + if (!(doneN_69)) { + highp float tmpvar_273; + tmpvar_273 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_273).y; + }; + bool tmpvar_274; + tmpvar_274 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_274; + if (!(doneP_68)) { + highp float tmpvar_275; + tmpvar_275 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_275; + }; + if (!(doneP_68)) { + highp float tmpvar_276; + tmpvar_276 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_276).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_277; + tmpvar_277.zw = vec2(0.0, 0.0); + tmpvar_277.xy = posN_79.xy.xy; + vec4 tmpvar_278; + tmpvar_278 = xll_tex2Dlod (tex_39, tmpvar_277); + highp float tmpvar_279; + tmpvar_279 = FxaaLuma (tmpvar_278); + highp float tmpvar_280; + tmpvar_280 = tmpvar_279; + lumaEndN_76 = tmpvar_280; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_281; + tmpvar_281.zw = vec2(0.0, 0.0); + tmpvar_281.xy = posP_78.xy.xy; + vec4 tmpvar_282; + tmpvar_282 = xll_tex2Dlod (tex_39, tmpvar_281); + highp float tmpvar_283; + tmpvar_283 = FxaaLuma (tmpvar_282); + highp float tmpvar_284; + tmpvar_284 = tmpvar_283; + lumaEndP_74 = tmpvar_284; + }; + if (!(doneN_69)) { + highp float tmpvar_285; + tmpvar_285 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_285; + }; + if (!(doneP_68)) { + highp float tmpvar_286; + tmpvar_286 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_286; + }; + highp float tmpvar_287; + tmpvar_287 = abs (lumaEndN_76); + bool tmpvar_288; + tmpvar_288 = (tmpvar_287 >= gradientScaled_73); + doneN_69 = tmpvar_288; + highp float tmpvar_289; + tmpvar_289 = abs (lumaEndP_74); + bool tmpvar_290; + tmpvar_290 = (tmpvar_289 >= gradientScaled_73); + doneP_68 = tmpvar_290; + if (!(doneN_69)) { + highp float tmpvar_291; + tmpvar_291 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_291; + }; + if (!(doneN_69)) { + highp float tmpvar_292; + tmpvar_292 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_292).y; + }; + bool tmpvar_293; + tmpvar_293 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_293; + if (!(doneP_68)) { + highp float tmpvar_294; + tmpvar_294 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_294; + }; + if (!(doneP_68)) { + highp float tmpvar_295; + tmpvar_295 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_295).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_296; + tmpvar_296.zw = vec2(0.0, 0.0); + tmpvar_296.xy = posN_79.xy.xy; + vec4 tmpvar_297; + tmpvar_297 = xll_tex2Dlod (tex_39, tmpvar_296); + highp float tmpvar_298; + tmpvar_298 = FxaaLuma (tmpvar_297); + highp float tmpvar_299; + tmpvar_299 = tmpvar_298; + lumaEndN_76 = tmpvar_299; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_300; + tmpvar_300.zw = vec2(0.0, 0.0); + tmpvar_300.xy = posP_78.xy.xy; + vec4 tmpvar_301; + tmpvar_301 = xll_tex2Dlod (tex_39, tmpvar_300); + highp float tmpvar_302; + tmpvar_302 = FxaaLuma (tmpvar_301); + highp float tmpvar_303; + tmpvar_303 = tmpvar_302; + lumaEndP_74 = tmpvar_303; + }; + if (!(doneN_69)) { + highp float tmpvar_304; + tmpvar_304 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_304; + }; + if (!(doneP_68)) { + highp float tmpvar_305; + tmpvar_305 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_305; + }; + highp float tmpvar_306; + tmpvar_306 = abs (lumaEndN_76); + bool tmpvar_307; + tmpvar_307 = (tmpvar_306 >= gradientScaled_73); + doneN_69 = tmpvar_307; + highp float tmpvar_308; + tmpvar_308 = abs (lumaEndP_74); + bool tmpvar_309; + tmpvar_309 = (tmpvar_308 >= gradientScaled_73); + doneP_68 = tmpvar_309; + if (!(doneN_69)) { + highp float tmpvar_310; + tmpvar_310 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_310; + }; + if (!(doneN_69)) { + highp float tmpvar_311; + tmpvar_311 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_311).y; + }; + bool tmpvar_312; + tmpvar_312 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_312; + if (!(doneP_68)) { + highp float tmpvar_313; + tmpvar_313 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_313; + }; + if (!(doneP_68)) { + highp float tmpvar_314; + tmpvar_314 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_314).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_315; + tmpvar_315.zw = vec2(0.0, 0.0); + tmpvar_315.xy = posN_79.xy.xy; + vec4 tmpvar_316; + tmpvar_316 = xll_tex2Dlod (tex_39, tmpvar_315); + highp float tmpvar_317; + tmpvar_317 = FxaaLuma (tmpvar_316); + highp float tmpvar_318; + tmpvar_318 = tmpvar_317; + lumaEndN_76 = tmpvar_318; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_319; + tmpvar_319.zw = vec2(0.0, 0.0); + tmpvar_319.xy = posP_78.xy.xy; + vec4 tmpvar_320; + tmpvar_320 = xll_tex2Dlod (tex_39, tmpvar_319); + highp float tmpvar_321; + tmpvar_321 = FxaaLuma (tmpvar_320); + highp float tmpvar_322; + tmpvar_322 = tmpvar_321; + lumaEndP_74 = tmpvar_322; + }; + if (!(doneN_69)) { + highp float tmpvar_323; + tmpvar_323 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_323; + }; + if (!(doneP_68)) { + highp float tmpvar_324; + tmpvar_324 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_324; + }; + highp float tmpvar_325; + tmpvar_325 = abs (lumaEndN_76); + bool tmpvar_326; + tmpvar_326 = (tmpvar_325 >= gradientScaled_73); + doneN_69 = tmpvar_326; + highp float tmpvar_327; + tmpvar_327 = abs (lumaEndP_74); + bool tmpvar_328; + tmpvar_328 = (tmpvar_327 >= gradientScaled_73); + doneP_68 = tmpvar_328; + if (!(doneN_69)) { + highp float tmpvar_329; + tmpvar_329 = (posN_79.x - (offNP_80.x * 1.0)); + posN_79.x = tmpvar_329; + }; + if (!(doneN_69)) { + highp float tmpvar_330; + tmpvar_330 = (posN_79.y - (offNP_80.y * 1.0)); + posN_79.y = vec2(tmpvar_330).y; + }; + bool tmpvar_331; + tmpvar_331 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_331; + if (!(doneP_68)) { + highp float tmpvar_332; + tmpvar_332 = (posP_78.x + (offNP_80.x * 1.0)); + posP_78.x = tmpvar_332; + }; + if (!(doneP_68)) { + highp float tmpvar_333; + tmpvar_333 = (posP_78.y + (offNP_80.y * 1.0)); + posP_78.y = vec2(tmpvar_333).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_334; + tmpvar_334.zw = vec2(0.0, 0.0); + tmpvar_334.xy = posN_79.xy.xy; + vec4 tmpvar_335; + tmpvar_335 = xll_tex2Dlod (tex_39, tmpvar_334); + highp float tmpvar_336; + tmpvar_336 = FxaaLuma (tmpvar_335); + highp float tmpvar_337; + tmpvar_337 = tmpvar_336; + lumaEndN_76 = tmpvar_337; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_338; + tmpvar_338.zw = vec2(0.0, 0.0); + tmpvar_338.xy = posP_78.xy.xy; + vec4 tmpvar_339; + tmpvar_339 = xll_tex2Dlod (tex_39, tmpvar_338); + highp float tmpvar_340; + tmpvar_340 = FxaaLuma (tmpvar_339); + highp float tmpvar_341; + tmpvar_341 = tmpvar_340; + lumaEndP_74 = tmpvar_341; + }; + if (!(doneN_69)) { + highp float tmpvar_342; + tmpvar_342 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_342; + }; + if (!(doneP_68)) { + highp float tmpvar_343; + tmpvar_343 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_343; + }; + highp float tmpvar_344; + tmpvar_344 = abs (lumaEndN_76); + bool tmpvar_345; + tmpvar_345 = (tmpvar_344 >= gradientScaled_73); + doneN_69 = tmpvar_345; + highp float tmpvar_346; + tmpvar_346 = abs (lumaEndP_74); + bool tmpvar_347; + tmpvar_347 = (tmpvar_346 >= gradientScaled_73); + doneP_68 = tmpvar_347; + if (!(doneN_69)) { + highp float tmpvar_348; + tmpvar_348 = (posN_79.x - (offNP_80.x * 1.5)); + posN_79.x = tmpvar_348; + }; + if (!(doneN_69)) { + highp float tmpvar_349; + tmpvar_349 = (posN_79.y - (offNP_80.y * 1.5)); + posN_79.y = vec2(tmpvar_349).y; + }; + bool tmpvar_350; + tmpvar_350 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_350; + if (!(doneP_68)) { + highp float tmpvar_351; + tmpvar_351 = (posP_78.x + (offNP_80.x * 1.5)); + posP_78.x = tmpvar_351; + }; + if (!(doneP_68)) { + highp float tmpvar_352; + tmpvar_352 = (posP_78.y + (offNP_80.y * 1.5)); + posP_78.y = vec2(tmpvar_352).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_353; + tmpvar_353.zw = vec2(0.0, 0.0); + tmpvar_353.xy = posN_79.xy.xy; + vec4 tmpvar_354; + tmpvar_354 = xll_tex2Dlod (tex_39, tmpvar_353); + highp float tmpvar_355; + tmpvar_355 = FxaaLuma (tmpvar_354); + highp float tmpvar_356; + tmpvar_356 = tmpvar_355; + lumaEndN_76 = tmpvar_356; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_357; + tmpvar_357.zw = vec2(0.0, 0.0); + tmpvar_357.xy = posP_78.xy.xy; + vec4 tmpvar_358; + tmpvar_358 = xll_tex2Dlod (tex_39, tmpvar_357); + highp float tmpvar_359; + tmpvar_359 = FxaaLuma (tmpvar_358); + highp float tmpvar_360; + tmpvar_360 = tmpvar_359; + lumaEndP_74 = tmpvar_360; + }; + if (!(doneN_69)) { + highp float tmpvar_361; + tmpvar_361 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_361; + }; + if (!(doneP_68)) { + highp float tmpvar_362; + tmpvar_362 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_362; + }; + highp float tmpvar_363; + tmpvar_363 = abs (lumaEndN_76); + bool tmpvar_364; + tmpvar_364 = (tmpvar_363 >= gradientScaled_73); + doneN_69 = tmpvar_364; + highp float tmpvar_365; + tmpvar_365 = abs (lumaEndP_74); + bool tmpvar_366; + tmpvar_366 = (tmpvar_365 >= gradientScaled_73); + doneP_68 = tmpvar_366; + if (!(doneN_69)) { + highp float tmpvar_367; + tmpvar_367 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_367; + }; + if (!(doneN_69)) { + highp float tmpvar_368; + tmpvar_368 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_368).y; + }; + bool tmpvar_369; + tmpvar_369 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_369; + if (!(doneP_68)) { + highp float tmpvar_370; + tmpvar_370 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_370; + }; + if (!(doneP_68)) { + highp float tmpvar_371; + tmpvar_371 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_371).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_372; + tmpvar_372.zw = vec2(0.0, 0.0); + tmpvar_372.xy = posN_79.xy.xy; + vec4 tmpvar_373; + tmpvar_373 = xll_tex2Dlod (tex_39, tmpvar_372); + highp float tmpvar_374; + tmpvar_374 = FxaaLuma (tmpvar_373); + highp float tmpvar_375; + tmpvar_375 = tmpvar_374; + lumaEndN_76 = tmpvar_375; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_376; + tmpvar_376.zw = vec2(0.0, 0.0); + tmpvar_376.xy = posP_78.xy.xy; + vec4 tmpvar_377; + tmpvar_377 = xll_tex2Dlod (tex_39, tmpvar_376); + highp float tmpvar_378; + tmpvar_378 = FxaaLuma (tmpvar_377); + highp float tmpvar_379; + tmpvar_379 = tmpvar_378; + lumaEndP_74 = tmpvar_379; + }; + if (!(doneN_69)) { + highp float tmpvar_380; + tmpvar_380 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_380; + }; + if (!(doneP_68)) { + highp float tmpvar_381; + tmpvar_381 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_381; + }; + highp float tmpvar_382; + tmpvar_382 = abs (lumaEndN_76); + bool tmpvar_383; + tmpvar_383 = (tmpvar_382 >= gradientScaled_73); + doneN_69 = tmpvar_383; + highp float tmpvar_384; + tmpvar_384 = abs (lumaEndP_74); + bool tmpvar_385; + tmpvar_385 = (tmpvar_384 >= gradientScaled_73); + doneP_68 = tmpvar_385; + if (!(doneN_69)) { + highp float tmpvar_386; + tmpvar_386 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_386; + }; + if (!(doneN_69)) { + highp float tmpvar_387; + tmpvar_387 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_387).y; + }; + bool tmpvar_388; + tmpvar_388 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_388; + if (!(doneP_68)) { + highp float tmpvar_389; + tmpvar_389 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_389; + }; + if (!(doneP_68)) { + highp float tmpvar_390; + tmpvar_390 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_390).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_391; + tmpvar_391.zw = vec2(0.0, 0.0); + tmpvar_391.xy = posN_79.xy.xy; + vec4 tmpvar_392; + tmpvar_392 = xll_tex2Dlod (tex_39, tmpvar_391); + highp float tmpvar_393; + tmpvar_393 = FxaaLuma (tmpvar_392); + highp float tmpvar_394; + tmpvar_394 = tmpvar_393; + lumaEndN_76 = tmpvar_394; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_395; + tmpvar_395.zw = vec2(0.0, 0.0); + tmpvar_395.xy = posP_78.xy.xy; + vec4 tmpvar_396; + tmpvar_396 = xll_tex2Dlod (tex_39, tmpvar_395); + highp float tmpvar_397; + tmpvar_397 = FxaaLuma (tmpvar_396); + highp float tmpvar_398; + tmpvar_398 = tmpvar_397; + lumaEndP_74 = tmpvar_398; + }; + if (!(doneN_69)) { + highp float tmpvar_399; + tmpvar_399 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_399; + }; + if (!(doneP_68)) { + highp float tmpvar_400; + tmpvar_400 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_400; + }; + highp float tmpvar_401; + tmpvar_401 = abs (lumaEndN_76); + bool tmpvar_402; + tmpvar_402 = (tmpvar_401 >= gradientScaled_73); + doneN_69 = tmpvar_402; + highp float tmpvar_403; + tmpvar_403 = abs (lumaEndP_74); + bool tmpvar_404; + tmpvar_404 = (tmpvar_403 >= gradientScaled_73); + doneP_68 = tmpvar_404; + if (!(doneN_69)) { + highp float tmpvar_405; + tmpvar_405 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_405; + }; + if (!(doneN_69)) { + highp float tmpvar_406; + tmpvar_406 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_406).y; + }; + bool tmpvar_407; + tmpvar_407 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_407; + if (!(doneP_68)) { + highp float tmpvar_408; + tmpvar_408 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_408; + }; + if (!(doneP_68)) { + highp float tmpvar_409; + tmpvar_409 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_409).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_410; + tmpvar_410.zw = vec2(0.0, 0.0); + tmpvar_410.xy = posN_79.xy.xy; + vec4 tmpvar_411; + tmpvar_411 = xll_tex2Dlod (tex_39, tmpvar_410); + highp float tmpvar_412; + tmpvar_412 = FxaaLuma (tmpvar_411); + highp float tmpvar_413; + tmpvar_413 = tmpvar_412; + lumaEndN_76 = tmpvar_413; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_414; + tmpvar_414.zw = vec2(0.0, 0.0); + tmpvar_414.xy = posP_78.xy.xy; + vec4 tmpvar_415; + tmpvar_415 = xll_tex2Dlod (tex_39, tmpvar_414); + highp float tmpvar_416; + tmpvar_416 = FxaaLuma (tmpvar_415); + highp float tmpvar_417; + tmpvar_417 = tmpvar_416; + lumaEndP_74 = tmpvar_417; + }; + if (!(doneN_69)) { + highp float tmpvar_418; + tmpvar_418 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_418; + }; + if (!(doneP_68)) { + highp float tmpvar_419; + tmpvar_419 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_419; + }; + highp float tmpvar_420; + tmpvar_420 = abs (lumaEndN_76); + bool tmpvar_421; + tmpvar_421 = (tmpvar_420 >= gradientScaled_73); + doneN_69 = tmpvar_421; + highp float tmpvar_422; + tmpvar_422 = abs (lumaEndP_74); + bool tmpvar_423; + tmpvar_423 = (tmpvar_422 >= gradientScaled_73); + doneP_68 = tmpvar_423; + if (!(doneN_69)) { + highp float tmpvar_424; + tmpvar_424 = (posN_79.x - (offNP_80.x * 2.0)); + posN_79.x = tmpvar_424; + }; + if (!(doneN_69)) { + highp float tmpvar_425; + tmpvar_425 = (posN_79.y - (offNP_80.y * 2.0)); + posN_79.y = vec2(tmpvar_425).y; + }; + bool tmpvar_426; + tmpvar_426 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_426; + if (!(doneP_68)) { + highp float tmpvar_427; + tmpvar_427 = (posP_78.x + (offNP_80.x * 2.0)); + posP_78.x = tmpvar_427; + }; + if (!(doneP_68)) { + highp float tmpvar_428; + tmpvar_428 = (posP_78.y + (offNP_80.y * 2.0)); + posP_78.y = vec2(tmpvar_428).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_429; + tmpvar_429.zw = vec2(0.0, 0.0); + tmpvar_429.xy = posN_79.xy.xy; + vec4 tmpvar_430; + tmpvar_430 = xll_tex2Dlod (tex_39, tmpvar_429); + highp float tmpvar_431; + tmpvar_431 = FxaaLuma (tmpvar_430); + highp float tmpvar_432; + tmpvar_432 = tmpvar_431; + lumaEndN_76 = tmpvar_432; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_433; + tmpvar_433.zw = vec2(0.0, 0.0); + tmpvar_433.xy = posP_78.xy.xy; + vec4 tmpvar_434; + tmpvar_434 = xll_tex2Dlod (tex_39, tmpvar_433); + highp float tmpvar_435; + tmpvar_435 = FxaaLuma (tmpvar_434); + highp float tmpvar_436; + tmpvar_436 = tmpvar_435; + lumaEndP_74 = tmpvar_436; + }; + if (!(doneN_69)) { + highp float tmpvar_437; + tmpvar_437 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_437; + }; + if (!(doneP_68)) { + highp float tmpvar_438; + tmpvar_438 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_438; + }; + highp float tmpvar_439; + tmpvar_439 = abs (lumaEndN_76); + bool tmpvar_440; + tmpvar_440 = (tmpvar_439 >= gradientScaled_73); + doneN_69 = tmpvar_440; + highp float tmpvar_441; + tmpvar_441 = abs (lumaEndP_74); + bool tmpvar_442; + tmpvar_442 = (tmpvar_441 >= gradientScaled_73); + doneP_68 = tmpvar_442; + if (!(doneN_69)) { + highp float tmpvar_443; + tmpvar_443 = (posN_79.x - (offNP_80.x * 4.0)); + posN_79.x = tmpvar_443; + }; + if (!(doneN_69)) { + highp float tmpvar_444; + tmpvar_444 = (posN_79.y - (offNP_80.y * 4.0)); + posN_79.y = vec2(tmpvar_444).y; + }; + bool tmpvar_445; + tmpvar_445 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_445; + if (!(doneP_68)) { + highp float tmpvar_446; + tmpvar_446 = (posP_78.x + (offNP_80.x * 4.0)); + posP_78.x = tmpvar_446; + }; + if (!(doneP_68)) { + highp float tmpvar_447; + tmpvar_447 = (posP_78.y + (offNP_80.y * 4.0)); + posP_78.y = vec2(tmpvar_447).y; + }; + if (doneNP_67) { + if (!(doneN_69)) { + highp vec4 tmpvar_448; + tmpvar_448.zw = vec2(0.0, 0.0); + tmpvar_448.xy = posN_79.xy.xy; + vec4 tmpvar_449; + tmpvar_449 = xll_tex2Dlod (tex_39, tmpvar_448); + highp float tmpvar_450; + tmpvar_450 = FxaaLuma (tmpvar_449); + highp float tmpvar_451; + tmpvar_451 = tmpvar_450; + lumaEndN_76 = tmpvar_451; + }; + if (!(doneP_68)) { + highp vec4 tmpvar_452; + tmpvar_452.zw = vec2(0.0, 0.0); + tmpvar_452.xy = posP_78.xy.xy; + vec4 tmpvar_453; + tmpvar_453 = xll_tex2Dlod (tex_39, tmpvar_452); + highp float tmpvar_454; + tmpvar_454 = FxaaLuma (tmpvar_453); + highp float tmpvar_455; + tmpvar_455 = tmpvar_454; + lumaEndP_74 = tmpvar_455; + }; + if (!(doneN_69)) { + highp float tmpvar_456; + tmpvar_456 = (lumaEndN_76 - (lumaNN_86 * 0.5)); + lumaEndN_76 = tmpvar_456; + }; + if (!(doneP_68)) { + highp float tmpvar_457; + tmpvar_457 = (lumaEndP_74 - (lumaNN_86 * 0.5)); + lumaEndP_74 = tmpvar_457; + }; + highp float tmpvar_458; + tmpvar_458 = abs (lumaEndN_76); + bool tmpvar_459; + tmpvar_459 = (tmpvar_458 >= gradientScaled_73); + doneN_69 = tmpvar_459; + highp float tmpvar_460; + tmpvar_460 = abs (lumaEndP_74); + bool tmpvar_461; + tmpvar_461 = (tmpvar_460 >= gradientScaled_73); + doneP_68 = tmpvar_461; + if (!(doneN_69)) { + highp float tmpvar_462; + tmpvar_462 = (posN_79.x - (offNP_80.x * 8.0)); + posN_79.x = tmpvar_462; + }; + if (!(doneN_69)) { + highp float tmpvar_463; + tmpvar_463 = (posN_79.y - (offNP_80.y * 8.0)); + posN_79.y = vec2(tmpvar_463).y; + }; + bool tmpvar_464; + tmpvar_464 = (!(doneN_69) || !(doneP_68)); + doneNP_67 = tmpvar_464; + if (!(doneP_68)) { + highp float tmpvar_465; + tmpvar_465 = (posP_78.x + (offNP_80.x * 8.0)); + posP_78.x = tmpvar_465; + }; + if (!(doneP_68)) { + highp float tmpvar_466; + tmpvar_466 = (posP_78.y + (offNP_80.y * 8.0)); + posP_78.y = vec2(tmpvar_466).y; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + highp float tmpvar_467; + tmpvar_467 = (posM_133.x - posN_79.x); + dstN_66 = tmpvar_467; + highp float tmpvar_468; + tmpvar_468 = (posP_78.x - posM_133.x); + dstP_65 = tmpvar_468; + if (!(horzSpan_91)) { + highp float tmpvar_469; + tmpvar_469 = (posM_133.y - posN_79.y); + dstN_66 = tmpvar_469; + }; + if (!(horzSpan_91)) { + highp float tmpvar_470; + tmpvar_470 = (posP_78.y - posM_133.y); + dstP_65 = tmpvar_470; + }; + bool tmpvar_471; + tmpvar_471 = ((lumaEndN_76 < 0.0) != lumaMLTZero_70); + goodSpanN_64 = tmpvar_471; + highp float tmpvar_472; + tmpvar_472 = (dstP_65 + dstN_66); + spanLength_63 = tmpvar_472; + bool tmpvar_473; + tmpvar_473 = ((lumaEndP_74 < 0.0) != lumaMLTZero_70); + goodSpanP_62 = tmpvar_473; + highp float tmpvar_474; + tmpvar_474 = (1.0 / spanLength_63); + spanLengthRcp_61 = tmpvar_474; + bool tmpvar_475; + tmpvar_475 = (dstN_66 < dstP_65); + directionN_60 = tmpvar_475; + highp float tmpvar_476; + tmpvar_476 = min (dstN_66, dstP_65); + highp float tmpvar_477; + tmpvar_477 = tmpvar_476; + dst_59 = tmpvar_477; + bool tmpvar_478; + if (directionN_60) { + tmpvar_478 = goodSpanN_64; + } else { + tmpvar_478 = goodSpanP_62; + }; + bool tmpvar_479; + tmpvar_479 = tmpvar_478; + goodSpan_58 = tmpvar_479; + highp float tmpvar_480; + tmpvar_480 = (subpixF_71 * subpixF_71); + subpixG_57 = tmpvar_480; + highp float tmpvar_481; + tmpvar_481 = ((dst_59 * -(spanLengthRcp_61)) + 0.5); + pixelOffset_56 = tmpvar_481; + highp float tmpvar_482; + tmpvar_482 = (subpixG_57 * fxaaQualitySubpix_46); + subpixH_55 = tmpvar_482; + highp float tmpvar_483; + if (goodSpan_58) { + tmpvar_483 = pixelOffset_56; + } else { + tmpvar_483 = 0.0; + }; + highp float tmpvar_484; + tmpvar_484 = tmpvar_483; + pixelOffsetGood_54 = tmpvar_484; + highp float tmpvar_485; + tmpvar_485 = max (pixelOffsetGood_54, subpixH_55); + highp float tmpvar_486; + tmpvar_486 = tmpvar_485; + pixelOffsetSubpix_53 = tmpvar_486; + if (!(horzSpan_91)) { + highp float tmpvar_487; + tmpvar_487 = (posM_133.x + (pixelOffsetSubpix_53 * lengthSign_92)); + posM_133.x = tmpvar_487; + }; + if (horzSpan_91) { + highp float tmpvar_488; + tmpvar_488 = (posM_133.y + (pixelOffsetSubpix_53 * lengthSign_92)); + posM_133.y = vec2(tmpvar_488).y; + }; + highp vec4 tmpvar_489; + tmpvar_489.zw = vec2(0.0, 0.0); + tmpvar_489.xy = posM_133.xy; + vec4 tmpvar_490; + tmpvar_490 = xll_tex2Dlod (tex_39, tmpvar_489); + highp vec4 tmpvar_491; + tmpvar_491.xyz = tmpvar_490.xyz.xyz; + tmpvar_491.w = rgbyM_132.w; + return tmpvar_491; +} + +vec4 xlat_main ( + in v2f i_492 +) +{ + highp float fxaaN_493; + float tmpvar_494; + tmpvar_494 = 0.5; + fxaaN_493 = tmpvar_494; + highp vec4 tmpvar_495; + tmpvar_495.x = -(fxaaN_493); + tmpvar_495.y = -(fxaaN_493); + tmpvar_495.z = fxaaN_493; + tmpvar_495.w = fxaaN_493; + highp vec4 tmpvar_496; + tmpvar_496 = FxaaPixelShader (i_492.uv, i_492.uvPosPos, _MainTex, _MainTex, _MainTex, _MainTex_TexelSize.xy, (_MainTex_TexelSize.xyxy * tmpvar_495), (_MainTex_TexelSize.xyxy * vec4(-2.0, -2.0, 2.0, 2.0)), (_MainTex_TexelSize.xyxy * vec4(8.0, 8.0, -4.0, -4.0)), 0.75, 0.166, 0.0833, 8.0, 0.125, 0.05, vec4(1.0, -1.0, 0.25, -0.25)); + return tmpvar_496; +} + +void main () +{ + v2f xlt_i_497; + highp vec4 xl_retval_498; + highp vec4 tmpvar_499; + tmpvar_499 = xlv_SV_POSITION.xyzw; + highp vec4 tmpvar_500; + tmpvar_500 = tmpvar_499; + xlt_i_497.pos = tmpvar_500; + highp vec2 tmpvar_501; + tmpvar_501 = xlv_TEXCOORD0.xy; + highp vec2 tmpvar_502; + tmpvar_502 = tmpvar_501; + xlt_i_497.uv = tmpvar_502; + highp vec4 tmpvar_503; + tmpvar_503 = xlv_TEXCOORD1.xyzw; + highp vec4 tmpvar_504; + tmpvar_504 = tmpvar_503; + xlt_i_497.uvPosPos = tmpvar_504; + highp vec4 tmpvar_505; + tmpvar_505 = xlat_main (xlt_i_497); + highp vec4 tmpvar_506; + tmpvar_506 = tmpvar_505; + xl_retval_498 = tmpvar_506; + highp vec4 tmpvar_507; + tmpvar_507 = xl_retval_498.xyzw; + highp vec4 tmpvar_508; + tmpvar_508 = tmpvar_507; + gl_FragData[0] = tmpvar_508; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-out.txt new file mode 100644 index 000000000..5e6425152 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-out.txt @@ -0,0 +1,553 @@ +#extension GL_ARB_shader_texture_lod : enable +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + vec2 fxaaQualityRcpFrame_1; + fxaaQualityRcpFrame_1 = _MainTex_TexelSize.xy; + vec4 tmpvar_2; + float dstP_3; + float dstN_4; + float lumaEndP_5; + float lumaEndN_6; + vec2 posP_7; + vec2 posN_8; + vec2 posB_9; + float lumaNN_10; + float lengthSign_11; + float lumaN_12; + float lumaS_13; + vec2 posM_14; + posM_14.x = xlv_TEXCOORD0.x; + posM_14.y = xlv_TEXCOORD0.y; + vec4 tmpvar_15; + tmpvar_15 = texture2DLod (_MainTex, xlv_TEXCOORD0, 0.0); + vec4 tmpvar_16; + tmpvar_16.zw = vec2(0.0, 0.0); + tmpvar_16.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_17; + tmpvar_17 = texture2DLod (_MainTex, tmpvar_16.xy, 0.0); + lumaS_13 = tmpvar_17.w; + vec4 tmpvar_18; + tmpvar_18.zw = vec2(0.0, 0.0); + tmpvar_18.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_19; + tmpvar_19 = texture2DLod (_MainTex, tmpvar_18.xy, 0.0); + float tmpvar_20; + tmpvar_20 = tmpvar_19.w; + vec4 tmpvar_21; + tmpvar_21.zw = vec2(0.0, 0.0); + tmpvar_21.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_22; + tmpvar_22 = texture2DLod (_MainTex, tmpvar_21.xy, 0.0); + lumaN_12 = tmpvar_22.w; + vec4 tmpvar_23; + tmpvar_23.zw = vec2(0.0, 0.0); + tmpvar_23.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_24; + tmpvar_24 = texture2DLod (_MainTex, tmpvar_23.xy, 0.0); + float tmpvar_25; + tmpvar_25 = tmpvar_24.w; + float tmpvar_26; + tmpvar_26 = max (max (tmpvar_22.w, tmpvar_24.w), max (tmpvar_19.w, max (tmpvar_17.w, tmpvar_15.w))); + float tmpvar_27; + tmpvar_27 = (tmpvar_26 - min (min (tmpvar_22.w, tmpvar_24.w), min (tmpvar_19.w, min (tmpvar_17.w, tmpvar_15.w)))); + if ((tmpvar_27 < max (0.0833, (tmpvar_26 * 0.166)))) { + tmpvar_2 = tmpvar_15; + } else { + vec4 tmpvar_28; + tmpvar_28.zw = vec2(0.0, 0.0); + tmpvar_28.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_29; + tmpvar_29 = texture2DLod (_MainTex, tmpvar_28.xy, 0.0); + vec4 tmpvar_30; + tmpvar_30.zw = vec2(0.0, 0.0); + tmpvar_30.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); + vec4 tmpvar_31; + tmpvar_31 = texture2DLod (_MainTex, tmpvar_30.xy, 0.0); + vec4 tmpvar_32; + tmpvar_32.zw = vec2(0.0, 0.0); + tmpvar_32.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_33; + tmpvar_33 = texture2DLod (_MainTex, tmpvar_32.xy, 0.0); + vec4 tmpvar_34; + tmpvar_34.zw = vec2(0.0, 0.0); + tmpvar_34.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); + vec4 tmpvar_35; + tmpvar_35 = texture2DLod (_MainTex, tmpvar_34.xy, 0.0); + float tmpvar_36; + tmpvar_36 = (tmpvar_22.w + tmpvar_17.w); + float tmpvar_37; + tmpvar_37 = (tmpvar_24.w + tmpvar_19.w); + float tmpvar_38; + tmpvar_38 = (1.0/(tmpvar_27)); + float tmpvar_39; + tmpvar_39 = (tmpvar_33.w + tmpvar_31.w); + float tmpvar_40; + tmpvar_40 = (tmpvar_29.w + tmpvar_35.w); + lengthSign_11 = fxaaQualityRcpFrame_1.x; + bool tmpvar_41; + tmpvar_41 = ((abs(((-2.0 * tmpvar_24.w) + tmpvar_40)) + ((abs(((-2.0 * tmpvar_15.w) + tmpvar_36)) * 2.0) + abs(((-2.0 * tmpvar_19.w) + tmpvar_39)))) >= (abs(((-2.0 * tmpvar_17.w) + (tmpvar_35.w + tmpvar_31.w))) + ((abs(((-2.0 * tmpvar_15.w) + tmpvar_37)) * 2.0) + abs(((-2.0 * tmpvar_22.w) + (tmpvar_29.w + tmpvar_33.w)))))); + float tmpvar_42; + tmpvar_42 = (((tmpvar_36 + tmpvar_37) * 2.0) + (tmpvar_40 + tmpvar_39)); + if (!(tmpvar_41)) { + lumaN_12 = tmpvar_25; + }; + if (!(tmpvar_41)) { + lumaS_13 = tmpvar_20; + }; + if (tmpvar_41) { + lengthSign_11 = fxaaQualityRcpFrame_1.y; + }; + float tmpvar_43; + tmpvar_43 = ((tmpvar_42 * 0.0833333) - tmpvar_15.w); + float tmpvar_44; + tmpvar_44 = (lumaN_12 - tmpvar_15.w); + float tmpvar_45; + tmpvar_45 = (lumaS_13 - tmpvar_15.w); + lumaNN_10 = (lumaN_12 + tmpvar_15.w); + float tmpvar_46; + tmpvar_46 = (lumaS_13 + tmpvar_15.w); + bool tmpvar_47; + tmpvar_47 = (abs(tmpvar_44) >= abs(tmpvar_45)); + float tmpvar_48; + tmpvar_48 = max (abs(tmpvar_44), abs(tmpvar_45)); + if (tmpvar_47) { + lengthSign_11 = -(lengthSign_11); + }; + float tmpvar_49; + tmpvar_49 = clamp ((abs(tmpvar_43) * tmpvar_38), 0.0, 1.0); + posB_9.x = posM_14.x; + posB_9.y = posM_14.y; + float tmpvar_50; + if (!(tmpvar_41)) { + tmpvar_50 = 0.0; + } else { + tmpvar_50 = fxaaQualityRcpFrame_1.x; + }; + float tmpvar_51; + if (tmpvar_41) { + tmpvar_51 = 0.0; + } else { + tmpvar_51 = fxaaQualityRcpFrame_1.y; + }; + if (!(tmpvar_41)) { + posB_9.x = (xlv_TEXCOORD0.x + (lengthSign_11 * 0.5)); + }; + if (tmpvar_41) { + posB_9.y = (xlv_TEXCOORD0.y + (lengthSign_11 * 0.5)); + }; + posN_8.x = (posB_9.x - tmpvar_50); + posN_8.y = (posB_9.y - tmpvar_51); + posP_7.x = (posB_9.x + tmpvar_50); + posP_7.y = (posB_9.y + tmpvar_51); + float tmpvar_52; + tmpvar_52 = ((-2.0 * tmpvar_49) + 3.0); + vec4 tmpvar_53; + tmpvar_53 = texture2DLod (_MainTex, posN_8, 0.0); + lumaEndN_6 = tmpvar_53.w; + float tmpvar_54; + tmpvar_54 = (tmpvar_49 * tmpvar_49); + vec4 tmpvar_55; + tmpvar_55 = texture2DLod (_MainTex, posP_7, 0.0); + lumaEndP_5 = tmpvar_55.w; + if (!(tmpvar_47)) { + lumaNN_10 = tmpvar_46; + }; + float tmpvar_56; + tmpvar_56 = (tmpvar_48 / 4.0); + float tmpvar_57; + tmpvar_57 = (tmpvar_52 * tmpvar_54); + bool tmpvar_58; + tmpvar_58 = ((tmpvar_15.w - (lumaNN_10 * 0.5)) < 0.0); + float tmpvar_59; + tmpvar_59 = (tmpvar_53.w - (lumaNN_10 * 0.5)); + lumaEndN_6 = tmpvar_59; + float tmpvar_60; + tmpvar_60 = (tmpvar_55.w - (lumaNN_10 * 0.5)); + lumaEndP_5 = tmpvar_60; + bool tmpvar_61; + tmpvar_61 = (abs(tmpvar_59) >= tmpvar_56); + bool tmpvar_62; + tmpvar_62 = (abs(tmpvar_60) >= tmpvar_56); + if (!(tmpvar_61)) { + posN_8.x = (posN_8.x - tmpvar_50); + }; + if (!(tmpvar_61)) { + posN_8.y = (posN_8.y - tmpvar_51); + }; + bool tmpvar_63; + tmpvar_63 = (!(tmpvar_61) || !(tmpvar_62)); + if (!(tmpvar_62)) { + posP_7.x = (posP_7.x + tmpvar_50); + }; + if (!(tmpvar_62)) { + posP_7.y = (posP_7.y + tmpvar_51); + }; + if (tmpvar_63) { + if (!(tmpvar_61)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_62)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_61)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_62)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_64; + tmpvar_64 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_65; + tmpvar_65 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_64)) { + posN_8.x = (posN_8.x - tmpvar_50); + }; + if (!(tmpvar_64)) { + posN_8.y = (posN_8.y - tmpvar_51); + }; + bool tmpvar_66; + tmpvar_66 = (!(tmpvar_64) || !(tmpvar_65)); + if (!(tmpvar_65)) { + posP_7.x = (posP_7.x + tmpvar_50); + }; + if (!(tmpvar_65)) { + posP_7.y = (posP_7.y + tmpvar_51); + }; + if (tmpvar_66) { + if (!(tmpvar_64)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_65)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_64)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_65)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_67; + tmpvar_67 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_68; + tmpvar_68 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_67)) { + posN_8.x = (posN_8.x - tmpvar_50); + }; + if (!(tmpvar_67)) { + posN_8.y = (posN_8.y - tmpvar_51); + }; + bool tmpvar_69; + tmpvar_69 = (!(tmpvar_67) || !(tmpvar_68)); + if (!(tmpvar_68)) { + posP_7.x = (posP_7.x + tmpvar_50); + }; + if (!(tmpvar_68)) { + posP_7.y = (posP_7.y + tmpvar_51); + }; + if (tmpvar_69) { + if (!(tmpvar_67)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_68)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_67)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_68)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_70; + tmpvar_70 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_71; + tmpvar_71 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_70)) { + posN_8.x = (posN_8.x - tmpvar_50); + }; + if (!(tmpvar_70)) { + posN_8.y = (posN_8.y - tmpvar_51); + }; + bool tmpvar_72; + tmpvar_72 = (!(tmpvar_70) || !(tmpvar_71)); + if (!(tmpvar_71)) { + posP_7.x = (posP_7.x + tmpvar_50); + }; + if (!(tmpvar_71)) { + posP_7.y = (posP_7.y + tmpvar_51); + }; + if (tmpvar_72) { + if (!(tmpvar_70)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_71)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_70)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_71)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_73; + tmpvar_73 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_74; + tmpvar_74 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_73)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 1.5)); + }; + if (!(tmpvar_73)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 1.5)); + }; + bool tmpvar_75; + tmpvar_75 = (!(tmpvar_73) || !(tmpvar_74)); + if (!(tmpvar_74)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 1.5)); + }; + if (!(tmpvar_74)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 1.5)); + }; + if (tmpvar_75) { + if (!(tmpvar_73)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_74)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_73)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_74)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_76; + tmpvar_76 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_77; + tmpvar_77 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_76)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_76)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 2.0)); + }; + bool tmpvar_78; + tmpvar_78 = (!(tmpvar_76) || !(tmpvar_77)); + if (!(tmpvar_77)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_77)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 2.0)); + }; + if (tmpvar_78) { + if (!(tmpvar_76)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_77)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_76)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_77)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_79; + tmpvar_79 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_80; + tmpvar_80 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_79)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_79)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 2.0)); + }; + bool tmpvar_81; + tmpvar_81 = (!(tmpvar_79) || !(tmpvar_80)); + if (!(tmpvar_80)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_80)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 2.0)); + }; + if (tmpvar_81) { + if (!(tmpvar_79)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_80)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_79)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_80)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_82; + tmpvar_82 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_83; + tmpvar_83 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_82)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_82)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 2.0)); + }; + bool tmpvar_84; + tmpvar_84 = (!(tmpvar_82) || !(tmpvar_83)); + if (!(tmpvar_83)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_83)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 2.0)); + }; + if (tmpvar_84) { + if (!(tmpvar_82)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_83)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_82)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_83)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_85; + tmpvar_85 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_86; + tmpvar_86 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_85)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_85)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 2.0)); + }; + bool tmpvar_87; + tmpvar_87 = (!(tmpvar_85) || !(tmpvar_86)); + if (!(tmpvar_86)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 2.0)); + }; + if (!(tmpvar_86)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 2.0)); + }; + if (tmpvar_87) { + if (!(tmpvar_85)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_86)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_85)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_86)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_88; + tmpvar_88 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_89; + tmpvar_89 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_88)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 4.0)); + }; + if (!(tmpvar_88)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 4.0)); + }; + bool tmpvar_90; + tmpvar_90 = (!(tmpvar_88) || !(tmpvar_89)); + if (!(tmpvar_89)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 4.0)); + }; + if (!(tmpvar_89)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 4.0)); + }; + if (tmpvar_90) { + if (!(tmpvar_88)) { + lumaEndN_6 = texture2DLod (_MainTex, posN_8, 0.0).w; + }; + if (!(tmpvar_89)) { + lumaEndP_5 = texture2DLod (_MainTex, posP_7, 0.0).w; + }; + if (!(tmpvar_88)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_89)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_91; + tmpvar_91 = (abs(lumaEndN_6) >= tmpvar_56); + bool tmpvar_92; + tmpvar_92 = (abs(lumaEndP_5) >= tmpvar_56); + if (!(tmpvar_91)) { + posN_8.x = (posN_8.x - (tmpvar_50 * 8.0)); + }; + if (!(tmpvar_91)) { + posN_8.y = (posN_8.y - (tmpvar_51 * 8.0)); + }; + if (!(tmpvar_92)) { + posP_7.x = (posP_7.x + (tmpvar_50 * 8.0)); + }; + if (!(tmpvar_92)) { + posP_7.y = (posP_7.y + (tmpvar_51 * 8.0)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + dstN_4 = (xlv_TEXCOORD0.x - posN_8.x); + dstP_3 = (posP_7.x - xlv_TEXCOORD0.x); + if (!(tmpvar_41)) { + dstN_4 = (xlv_TEXCOORD0.y - posN_8.y); + }; + if (!(tmpvar_41)) { + dstP_3 = (posP_7.y - xlv_TEXCOORD0.y); + }; + bool tmpvar_93; + tmpvar_93 = ((lumaEndN_6 < 0.0) != tmpvar_58); + bool tmpvar_94; + tmpvar_94 = ((lumaEndP_5 < 0.0) != tmpvar_58); + float tmpvar_95; + tmpvar_95 = (1.0/((dstP_3 + dstN_4))); + float tmpvar_96; + tmpvar_96 = min (dstN_4, dstP_3); + bool tmpvar_97; + if ((dstN_4 < dstP_3)) { + tmpvar_97 = tmpvar_93; + } else { + tmpvar_97 = tmpvar_94; + }; + float tmpvar_98; + tmpvar_98 = ((tmpvar_96 * -(tmpvar_95)) + 0.5); + float tmpvar_99; + tmpvar_99 = ((tmpvar_57 * tmpvar_57) * 0.75); + float tmpvar_100; + if (tmpvar_97) { + tmpvar_100 = tmpvar_98; + } else { + tmpvar_100 = 0.0; + }; + float tmpvar_101; + tmpvar_101 = max (tmpvar_100, tmpvar_99); + if (!(tmpvar_41)) { + posM_14.x = (xlv_TEXCOORD0.x + (tmpvar_101 * lengthSign_11)); + }; + if (tmpvar_41) { + posM_14.y = (xlv_TEXCOORD0.y + (tmpvar_101 * lengthSign_11)); + }; + vec4 tmpvar_102; + tmpvar_102.xyz = texture2DLod (_MainTex, posM_14, 0.0).xyz; + tmpvar_102.w = tmpvar_15.w; + tmpvar_2 = tmpvar_102; + }; + gl_FragData[0] = tmpvar_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-outES.txt new file mode 100644 index 000000000..624bb2d25 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-fxaa3-11-pc39-outES.txt @@ -0,0 +1,657 @@ +#extension GL_EXT_shader_texture_lod : enable +varying highp vec2 xlv_TEXCOORD0; +uniform highp vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + highp vec2 fxaaQualityRcpFrame_1; + fxaaQualityRcpFrame_1 = _MainTex_TexelSize.xy; + highp vec4 tmpvar_2; + highp float dstP_3; + highp float dstN_4; + highp float lumaEndP_5; + highp float lumaEndN_6; + highp vec2 posP_7; + highp vec2 posN_8; + highp vec2 posB_9; + highp float lumaNN_10; + highp float lengthSign_11; + highp float lumaN_12; + highp float lumaS_13; + highp vec4 rgbyM_14; + highp vec2 posM_15; + posM_15.x = xlv_TEXCOORD0.x; + posM_15.y = xlv_TEXCOORD0.y; + lowp vec4 tmpvar_16; + tmpvar_16 = texture2DLod (_MainTex, xlv_TEXCOORD0, 0.0); + rgbyM_14 = tmpvar_16; + highp vec4 tmpvar_17; + tmpvar_17.zw = vec2(0.0, 0.0); + tmpvar_17.xy = (xlv_TEXCOORD0 + (vec2(0.0, 1.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_18; + tmpvar_18 = texture2DLod (_MainTex, tmpvar_17.xy, 0.0); + highp vec4 rgba_19; + rgba_19 = tmpvar_18; + lumaS_13 = rgba_19.w; + highp vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = (xlv_TEXCOORD0 + (vec2(1.0, 0.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_21; + tmpvar_21 = texture2DLod (_MainTex, tmpvar_20.xy, 0.0); + highp float tmpvar_22; + highp vec4 rgba_23; + rgba_23 = tmpvar_21; + tmpvar_22 = rgba_23.w; + highp vec4 tmpvar_24; + tmpvar_24.zw = vec2(0.0, 0.0); + tmpvar_24.xy = (xlv_TEXCOORD0 + (vec2(0.0, -1.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_25; + tmpvar_25 = texture2DLod (_MainTex, tmpvar_24.xy, 0.0); + highp vec4 rgba_26; + rgba_26 = tmpvar_25; + lumaN_12 = rgba_26.w; + highp vec4 tmpvar_27; + tmpvar_27.zw = vec2(0.0, 0.0); + tmpvar_27.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 0.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_28; + tmpvar_28 = texture2DLod (_MainTex, tmpvar_27.xy, 0.0); + highp float tmpvar_29; + highp vec4 rgba_30; + rgba_30 = tmpvar_28; + tmpvar_29 = rgba_30.w; + highp float tmpvar_31; + tmpvar_31 = max (max (rgba_26.w, rgba_30.w), max (rgba_23.w, max (rgba_19.w, rgbyM_14.w))); + highp float tmpvar_32; + tmpvar_32 = (tmpvar_31 - min (min (rgba_26.w, rgba_30.w), min (rgba_23.w, min (rgba_19.w, rgbyM_14.w)))); + if ((tmpvar_32 < max (0.0833, (tmpvar_31 * 0.166)))) { + tmpvar_2 = rgbyM_14; + } else { + highp vec4 tmpvar_33; + tmpvar_33.zw = vec2(0.0, 0.0); + tmpvar_33.xy = (xlv_TEXCOORD0 + (vec2(-1.0, -1.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_34; + tmpvar_34 = texture2DLod (_MainTex, tmpvar_33.xy, 0.0); + highp vec4 rgba_35; + rgba_35 = tmpvar_34; + highp vec4 tmpvar_36; + tmpvar_36.zw = vec2(0.0, 0.0); + tmpvar_36.xy = (xlv_TEXCOORD0 + _MainTex_TexelSize.xy); + lowp vec4 tmpvar_37; + tmpvar_37 = texture2DLod (_MainTex, tmpvar_36.xy, 0.0); + highp vec4 rgba_38; + rgba_38 = tmpvar_37; + highp vec4 tmpvar_39; + tmpvar_39.zw = vec2(0.0, 0.0); + tmpvar_39.xy = (xlv_TEXCOORD0 + (vec2(1.0, -1.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_40; + tmpvar_40 = texture2DLod (_MainTex, tmpvar_39.xy, 0.0); + highp vec4 rgba_41; + rgba_41 = tmpvar_40; + highp vec4 tmpvar_42; + tmpvar_42.zw = vec2(0.0, 0.0); + tmpvar_42.xy = (xlv_TEXCOORD0 + (vec2(-1.0, 1.0) * _MainTex_TexelSize.xy)); + lowp vec4 tmpvar_43; + tmpvar_43 = texture2DLod (_MainTex, tmpvar_42.xy, 0.0); + highp vec4 rgba_44; + rgba_44 = tmpvar_43; + highp float tmpvar_45; + tmpvar_45 = (rgba_26.w + rgba_19.w); + highp float tmpvar_46; + tmpvar_46 = (rgba_30.w + rgba_23.w); + highp float tmpvar_47; + tmpvar_47 = (1.0/(tmpvar_32)); + highp float tmpvar_48; + tmpvar_48 = (rgba_41.w + rgba_38.w); + highp float tmpvar_49; + tmpvar_49 = (rgba_35.w + rgba_44.w); + lengthSign_11 = fxaaQualityRcpFrame_1.x; + bool tmpvar_50; + tmpvar_50 = ((abs(((-2.0 * rgba_30.w) + tmpvar_49)) + ((abs(((-2.0 * rgbyM_14.w) + tmpvar_45)) * 2.0) + abs(((-2.0 * rgba_23.w) + tmpvar_48)))) >= (abs(((-2.0 * rgba_19.w) + (rgba_44.w + rgba_38.w))) + ((abs(((-2.0 * rgbyM_14.w) + tmpvar_46)) * 2.0) + abs(((-2.0 * rgba_26.w) + (rgba_35.w + rgba_41.w)))))); + highp float tmpvar_51; + tmpvar_51 = (((tmpvar_45 + tmpvar_46) * 2.0) + (tmpvar_49 + tmpvar_48)); + if (!(tmpvar_50)) { + lumaN_12 = tmpvar_29; + }; + if (!(tmpvar_50)) { + lumaS_13 = tmpvar_22; + }; + if (tmpvar_50) { + lengthSign_11 = fxaaQualityRcpFrame_1.y; + }; + highp float tmpvar_52; + tmpvar_52 = ((tmpvar_51 * 0.0833333) - rgbyM_14.w); + highp float tmpvar_53; + tmpvar_53 = (lumaN_12 - rgbyM_14.w); + highp float tmpvar_54; + tmpvar_54 = (lumaS_13 - rgbyM_14.w); + lumaNN_10 = (lumaN_12 + rgbyM_14.w); + highp float tmpvar_55; + tmpvar_55 = (lumaS_13 + rgbyM_14.w); + bool tmpvar_56; + tmpvar_56 = (abs(tmpvar_53) >= abs(tmpvar_54)); + highp float tmpvar_57; + tmpvar_57 = max (abs(tmpvar_53), abs(tmpvar_54)); + if (tmpvar_56) { + lengthSign_11 = -(lengthSign_11); + }; + highp float tmpvar_58; + tmpvar_58 = clamp ((abs(tmpvar_52) * tmpvar_47), 0.0, 1.0); + posB_9.x = posM_15.x; + posB_9.y = posM_15.y; + highp float tmpvar_59; + if (!(tmpvar_50)) { + tmpvar_59 = 0.0; + } else { + tmpvar_59 = fxaaQualityRcpFrame_1.x; + }; + highp float tmpvar_60; + if (tmpvar_50) { + tmpvar_60 = 0.0; + } else { + tmpvar_60 = fxaaQualityRcpFrame_1.y; + }; + if (!(tmpvar_50)) { + posB_9.x = (xlv_TEXCOORD0.x + (lengthSign_11 * 0.5)); + }; + if (tmpvar_50) { + posB_9.y = (xlv_TEXCOORD0.y + (lengthSign_11 * 0.5)); + }; + posN_8.x = (posB_9.x - tmpvar_59); + posN_8.y = (posB_9.y - tmpvar_60); + posP_7.x = (posB_9.x + tmpvar_59); + posP_7.y = (posB_9.y + tmpvar_60); + highp float tmpvar_61; + tmpvar_61 = ((-2.0 * tmpvar_58) + 3.0); + lowp vec4 tmpvar_62; + tmpvar_62 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_63; + rgba_63 = tmpvar_62; + lumaEndN_6 = rgba_63.w; + highp float tmpvar_64; + tmpvar_64 = (tmpvar_58 * tmpvar_58); + lowp vec4 tmpvar_65; + tmpvar_65 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_66; + rgba_66 = tmpvar_65; + lumaEndP_5 = rgba_66.w; + if (!(tmpvar_56)) { + lumaNN_10 = tmpvar_55; + }; + highp float tmpvar_67; + tmpvar_67 = (tmpvar_57 / 4.0); + highp float tmpvar_68; + tmpvar_68 = (tmpvar_61 * tmpvar_64); + bool tmpvar_69; + tmpvar_69 = ((rgbyM_14.w - (lumaNN_10 * 0.5)) < 0.0); + highp float tmpvar_70; + tmpvar_70 = (rgba_63.w - (lumaNN_10 * 0.5)); + lumaEndN_6 = tmpvar_70; + highp float tmpvar_71; + tmpvar_71 = (rgba_66.w - (lumaNN_10 * 0.5)); + lumaEndP_5 = tmpvar_71; + bool tmpvar_72; + tmpvar_72 = (abs(tmpvar_70) >= tmpvar_67); + bool tmpvar_73; + tmpvar_73 = (abs(tmpvar_71) >= tmpvar_67); + if (!(tmpvar_72)) { + posN_8.x = (posN_8.x - tmpvar_59); + }; + if (!(tmpvar_72)) { + posN_8.y = (posN_8.y - tmpvar_60); + }; + bool tmpvar_74; + tmpvar_74 = (!(tmpvar_72) || !(tmpvar_73)); + if (!(tmpvar_73)) { + posP_7.x = (posP_7.x + tmpvar_59); + }; + if (!(tmpvar_73)) { + posP_7.y = (posP_7.y + tmpvar_60); + }; + if (tmpvar_74) { + if (!(tmpvar_72)) { + lowp vec4 tmpvar_75; + tmpvar_75 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_76; + rgba_76 = tmpvar_75; + lumaEndN_6 = rgba_76.w; + }; + if (!(tmpvar_73)) { + lowp vec4 tmpvar_77; + tmpvar_77 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_78; + rgba_78 = tmpvar_77; + lumaEndP_5 = rgba_78.w; + }; + if (!(tmpvar_72)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_73)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_79; + tmpvar_79 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_80; + tmpvar_80 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_79)) { + posN_8.x = (posN_8.x - tmpvar_59); + }; + if (!(tmpvar_79)) { + posN_8.y = (posN_8.y - tmpvar_60); + }; + bool tmpvar_81; + tmpvar_81 = (!(tmpvar_79) || !(tmpvar_80)); + if (!(tmpvar_80)) { + posP_7.x = (posP_7.x + tmpvar_59); + }; + if (!(tmpvar_80)) { + posP_7.y = (posP_7.y + tmpvar_60); + }; + if (tmpvar_81) { + if (!(tmpvar_79)) { + lowp vec4 tmpvar_82; + tmpvar_82 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_83; + rgba_83 = tmpvar_82; + lumaEndN_6 = rgba_83.w; + }; + if (!(tmpvar_80)) { + lowp vec4 tmpvar_84; + tmpvar_84 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_85; + rgba_85 = tmpvar_84; + lumaEndP_5 = rgba_85.w; + }; + if (!(tmpvar_79)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_80)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_86; + tmpvar_86 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_87; + tmpvar_87 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_86)) { + posN_8.x = (posN_8.x - tmpvar_59); + }; + if (!(tmpvar_86)) { + posN_8.y = (posN_8.y - tmpvar_60); + }; + bool tmpvar_88; + tmpvar_88 = (!(tmpvar_86) || !(tmpvar_87)); + if (!(tmpvar_87)) { + posP_7.x = (posP_7.x + tmpvar_59); + }; + if (!(tmpvar_87)) { + posP_7.y = (posP_7.y + tmpvar_60); + }; + if (tmpvar_88) { + if (!(tmpvar_86)) { + lowp vec4 tmpvar_89; + tmpvar_89 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_90; + rgba_90 = tmpvar_89; + lumaEndN_6 = rgba_90.w; + }; + if (!(tmpvar_87)) { + lowp vec4 tmpvar_91; + tmpvar_91 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_92; + rgba_92 = tmpvar_91; + lumaEndP_5 = rgba_92.w; + }; + if (!(tmpvar_86)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_87)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_93; + tmpvar_93 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_94; + tmpvar_94 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_93)) { + posN_8.x = (posN_8.x - tmpvar_59); + }; + if (!(tmpvar_93)) { + posN_8.y = (posN_8.y - tmpvar_60); + }; + bool tmpvar_95; + tmpvar_95 = (!(tmpvar_93) || !(tmpvar_94)); + if (!(tmpvar_94)) { + posP_7.x = (posP_7.x + tmpvar_59); + }; + if (!(tmpvar_94)) { + posP_7.y = (posP_7.y + tmpvar_60); + }; + if (tmpvar_95) { + if (!(tmpvar_93)) { + lowp vec4 tmpvar_96; + tmpvar_96 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_97; + rgba_97 = tmpvar_96; + lumaEndN_6 = rgba_97.w; + }; + if (!(tmpvar_94)) { + lowp vec4 tmpvar_98; + tmpvar_98 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_99; + rgba_99 = tmpvar_98; + lumaEndP_5 = rgba_99.w; + }; + if (!(tmpvar_93)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_94)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_100; + tmpvar_100 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_101; + tmpvar_101 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_100)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 1.5)); + }; + if (!(tmpvar_100)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 1.5)); + }; + bool tmpvar_102; + tmpvar_102 = (!(tmpvar_100) || !(tmpvar_101)); + if (!(tmpvar_101)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 1.5)); + }; + if (!(tmpvar_101)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 1.5)); + }; + if (tmpvar_102) { + if (!(tmpvar_100)) { + lowp vec4 tmpvar_103; + tmpvar_103 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_104; + rgba_104 = tmpvar_103; + lumaEndN_6 = rgba_104.w; + }; + if (!(tmpvar_101)) { + lowp vec4 tmpvar_105; + tmpvar_105 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_106; + rgba_106 = tmpvar_105; + lumaEndP_5 = rgba_106.w; + }; + if (!(tmpvar_100)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_101)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_107; + tmpvar_107 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_108; + tmpvar_108 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_107)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_107)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 2.0)); + }; + bool tmpvar_109; + tmpvar_109 = (!(tmpvar_107) || !(tmpvar_108)); + if (!(tmpvar_108)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_108)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 2.0)); + }; + if (tmpvar_109) { + if (!(tmpvar_107)) { + lowp vec4 tmpvar_110; + tmpvar_110 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_111; + rgba_111 = tmpvar_110; + lumaEndN_6 = rgba_111.w; + }; + if (!(tmpvar_108)) { + lowp vec4 tmpvar_112; + tmpvar_112 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_113; + rgba_113 = tmpvar_112; + lumaEndP_5 = rgba_113.w; + }; + if (!(tmpvar_107)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_108)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_114; + tmpvar_114 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_115; + tmpvar_115 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_114)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_114)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 2.0)); + }; + bool tmpvar_116; + tmpvar_116 = (!(tmpvar_114) || !(tmpvar_115)); + if (!(tmpvar_115)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_115)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 2.0)); + }; + if (tmpvar_116) { + if (!(tmpvar_114)) { + lowp vec4 tmpvar_117; + tmpvar_117 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_118; + rgba_118 = tmpvar_117; + lumaEndN_6 = rgba_118.w; + }; + if (!(tmpvar_115)) { + lowp vec4 tmpvar_119; + tmpvar_119 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_120; + rgba_120 = tmpvar_119; + lumaEndP_5 = rgba_120.w; + }; + if (!(tmpvar_114)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_115)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_121; + tmpvar_121 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_122; + tmpvar_122 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_121)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_121)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 2.0)); + }; + bool tmpvar_123; + tmpvar_123 = (!(tmpvar_121) || !(tmpvar_122)); + if (!(tmpvar_122)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_122)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 2.0)); + }; + if (tmpvar_123) { + if (!(tmpvar_121)) { + lowp vec4 tmpvar_124; + tmpvar_124 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_125; + rgba_125 = tmpvar_124; + lumaEndN_6 = rgba_125.w; + }; + if (!(tmpvar_122)) { + lowp vec4 tmpvar_126; + tmpvar_126 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_127; + rgba_127 = tmpvar_126; + lumaEndP_5 = rgba_127.w; + }; + if (!(tmpvar_121)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_122)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_128; + tmpvar_128 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_129; + tmpvar_129 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_128)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_128)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 2.0)); + }; + bool tmpvar_130; + tmpvar_130 = (!(tmpvar_128) || !(tmpvar_129)); + if (!(tmpvar_129)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 2.0)); + }; + if (!(tmpvar_129)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 2.0)); + }; + if (tmpvar_130) { + if (!(tmpvar_128)) { + lowp vec4 tmpvar_131; + tmpvar_131 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_132; + rgba_132 = tmpvar_131; + lumaEndN_6 = rgba_132.w; + }; + if (!(tmpvar_129)) { + lowp vec4 tmpvar_133; + tmpvar_133 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_134; + rgba_134 = tmpvar_133; + lumaEndP_5 = rgba_134.w; + }; + if (!(tmpvar_128)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_129)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_135; + tmpvar_135 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_136; + tmpvar_136 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_135)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 4.0)); + }; + if (!(tmpvar_135)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 4.0)); + }; + bool tmpvar_137; + tmpvar_137 = (!(tmpvar_135) || !(tmpvar_136)); + if (!(tmpvar_136)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 4.0)); + }; + if (!(tmpvar_136)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 4.0)); + }; + if (tmpvar_137) { + if (!(tmpvar_135)) { + lowp vec4 tmpvar_138; + tmpvar_138 = texture2DLod (_MainTex, posN_8, 0.0); + highp vec4 rgba_139; + rgba_139 = tmpvar_138; + lumaEndN_6 = rgba_139.w; + }; + if (!(tmpvar_136)) { + lowp vec4 tmpvar_140; + tmpvar_140 = texture2DLod (_MainTex, posP_7, 0.0); + highp vec4 rgba_141; + rgba_141 = tmpvar_140; + lumaEndP_5 = rgba_141.w; + }; + if (!(tmpvar_135)) { + lumaEndN_6 = (lumaEndN_6 - (lumaNN_10 * 0.5)); + }; + if (!(tmpvar_136)) { + lumaEndP_5 = (lumaEndP_5 - (lumaNN_10 * 0.5)); + }; + bool tmpvar_142; + tmpvar_142 = (abs(lumaEndN_6) >= tmpvar_67); + bool tmpvar_143; + tmpvar_143 = (abs(lumaEndP_5) >= tmpvar_67); + if (!(tmpvar_142)) { + posN_8.x = (posN_8.x - (tmpvar_59 * 8.0)); + }; + if (!(tmpvar_142)) { + posN_8.y = (posN_8.y - (tmpvar_60 * 8.0)); + }; + if (!(tmpvar_143)) { + posP_7.x = (posP_7.x + (tmpvar_59 * 8.0)); + }; + if (!(tmpvar_143)) { + posP_7.y = (posP_7.y + (tmpvar_60 * 8.0)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + dstN_4 = (xlv_TEXCOORD0.x - posN_8.x); + dstP_3 = (posP_7.x - xlv_TEXCOORD0.x); + if (!(tmpvar_50)) { + dstN_4 = (xlv_TEXCOORD0.y - posN_8.y); + }; + if (!(tmpvar_50)) { + dstP_3 = (posP_7.y - xlv_TEXCOORD0.y); + }; + bool tmpvar_144; + tmpvar_144 = ((lumaEndN_6 < 0.0) != tmpvar_69); + bool tmpvar_145; + tmpvar_145 = ((lumaEndP_5 < 0.0) != tmpvar_69); + highp float tmpvar_146; + tmpvar_146 = (1.0/((dstP_3 + dstN_4))); + highp float tmpvar_147; + tmpvar_147 = min (dstN_4, dstP_3); + bool tmpvar_148; + if ((dstN_4 < dstP_3)) { + tmpvar_148 = tmpvar_144; + } else { + tmpvar_148 = tmpvar_145; + }; + highp float tmpvar_149; + tmpvar_149 = ((tmpvar_147 * -(tmpvar_146)) + 0.5); + highp float tmpvar_150; + tmpvar_150 = ((tmpvar_68 * tmpvar_68) * 0.75); + highp float tmpvar_151; + if (tmpvar_148) { + tmpvar_151 = tmpvar_149; + } else { + tmpvar_151 = 0.0; + }; + highp float tmpvar_152; + tmpvar_152 = max (tmpvar_151, tmpvar_150); + if (!(tmpvar_50)) { + posM_15.x = (xlv_TEXCOORD0.x + (tmpvar_152 * lengthSign_11)); + }; + if (tmpvar_50) { + posM_15.y = (xlv_TEXCOORD0.y + (tmpvar_152 * lengthSign_11)); + }; + lowp vec4 tmpvar_153; + tmpvar_153 = texture2DLod (_MainTex, posM_15, 0.0); + highp vec4 tmpvar_154; + tmpvar_154.xyz = tmpvar_153.xyz; + tmpvar_154.w = rgbyM_14.w; + tmpvar_2 = tmpvar_154; + }; + gl_FragData[0] = tmpvar_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-particle-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-particle-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-particle-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-particle-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-particle-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-particle-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-particle-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-particle-ir.txt new file mode 100644 index 000000000..258de5200 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-particle-ir.txt @@ -0,0 +1,46 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +varying vec2 xlv_TEXCOORD0; +varying vec4 xlv_COLOR; +uniform sampler2D _MainTex; +vec4 xlat_main ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (i_1.color * tmpvar_2); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = xlv_COLOR.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = xlv_TEXCOORD0.xy; + vec2 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = xlat_main (xlt_i_3); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-particle-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-particle-irES.txt new file mode 100644 index 000000000..5a33bf487 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-particle-irES.txt @@ -0,0 +1,46 @@ +struct v2f { + highp vec4 vertex; + lowp vec4 color; + mediump vec2 texcoord; +}; +varying mediump vec2 xlv_TEXCOORD0; +varying lowp vec4 xlv_COLOR; +uniform sampler2D _MainTex; +lowp vec4 xlat_main ( + in v2f i_1 +) +{ + lowp vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (i_1.color * tmpvar_2); +} + +void main () +{ + v2f xlt_i_3; + lowp vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + lowp vec4 tmpvar_6; + tmpvar_6 = xlv_COLOR.xyzw; + lowp vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + mediump vec2 tmpvar_8; + tmpvar_8 = xlv_TEXCOORD0.xy; + mediump vec2 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + lowp vec4 tmpvar_10; + tmpvar_10 = xlat_main (xlt_i_3); + lowp vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + lowp vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + lowp vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-particle-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-particle-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-particle-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-particle-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-particle-outES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-particle-outES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-particle-outES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-prepasslight-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-ir.txt new file mode 100644 index 000000000..de991e078 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-ir.txt @@ -0,0 +1,529 @@ +struct v2f { + vec4 pos; + vec4 uv; + vec3 ray; +}; +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_TEXCOORD0; +uniform vec4 unity_LightmapFade; +uniform vec4 _ZBufferParams; +uniform vec3 _WorldSpaceCameraPos; +uniform samplerCube _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightShadowData; +uniform vec4 _LightPositionRange; +uniform vec4 _LightPos; +uniform mat4 _LightMatrix0; +uniform vec4 _LightColor; +uniform mat4 _CameraToWorld; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec2 xll_vecTSel ( + in bvec2 a_33, + in vec2 b_34, + in vec2 c_35 +) +{ + float tmpvar_36; + if (a_33.x) { + tmpvar_36 = b_34.x; + } else { + tmpvar_36 = c_35.x; + }; + float tmpvar_37; + if (a_33.y) { + tmpvar_37 = b_34.y; + } else { + tmpvar_37 = c_35.y; + }; + vec2 tmpvar_38; + tmpvar_38.x = tmpvar_36; + tmpvar_38.y = tmpvar_37; + return tmpvar_38; +} + +vec3 xll_vecTSel ( + in bvec3 a_39, + in vec3 b_40, + in vec3 c_41 +) +{ + float tmpvar_42; + if (a_39.x) { + tmpvar_42 = b_40.x; + } else { + tmpvar_42 = c_41.x; + }; + float tmpvar_43; + if (a_39.y) { + tmpvar_43 = b_40.y; + } else { + tmpvar_43 = c_41.y; + }; + float tmpvar_44; + if (a_39.z) { + tmpvar_44 = b_40.z; + } else { + tmpvar_44 = c_41.z; + }; + vec3 tmpvar_45; + tmpvar_45.x = tmpvar_42; + tmpvar_45.y = tmpvar_43; + tmpvar_45.z = tmpvar_44; + return tmpvar_45; +} + +vec4 xll_vecTSel ( + in bvec4 a_46, + in vec4 b_47, + in vec4 c_48 +) +{ + float tmpvar_49; + if (a_46.x) { + tmpvar_49 = b_47.x; + } else { + tmpvar_49 = c_48.x; + }; + float tmpvar_50; + if (a_46.y) { + tmpvar_50 = b_47.y; + } else { + tmpvar_50 = c_48.y; + }; + float tmpvar_51; + if (a_46.z) { + tmpvar_51 = b_47.z; + } else { + tmpvar_51 = c_48.z; + }; + float tmpvar_52; + if (a_46.w) { + tmpvar_52 = b_47.w; + } else { + tmpvar_52 = c_48.w; + }; + vec4 tmpvar_53; + tmpvar_53.x = tmpvar_49; + tmpvar_53.y = tmpvar_50; + tmpvar_53.z = tmpvar_51; + tmpvar_53.w = tmpvar_52; + return tmpvar_53; +} + +float Luminance ( + in vec3 c_54 +) +{ + float tmpvar_55; + tmpvar_55 = dot (c_54, vec3(0.22, 0.707, 0.071)); + return tmpvar_55; +} + +float Linear01Depth ( + in float z_56 +) +{ + return (1.0 / ((_ZBufferParams.x * z_56) + _ZBufferParams.y)); +} + +float DecodeFloatRGBA ( + in vec4 enc_57 +) +{ + vec4 kDecodeDot_58; + vec4 tmpvar_59; + tmpvar_59 = vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09); + kDecodeDot_58 = tmpvar_59; + float tmpvar_60; + tmpvar_60 = dot (enc_57, kDecodeDot_58); + return tmpvar_60; +} + +float SampleCubeDistance ( + in vec3 vec_61 +) +{ + vec4 packDist_62; + vec4 tmpvar_63; + tmpvar_63 = textureCube (_ShadowMapTexture, vec_61); + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + packDist_62 = tmpvar_64; + float tmpvar_65; + tmpvar_65 = DecodeFloatRGBA (packDist_62); + return tmpvar_65; +} + +float unitySampleShadow ( + in vec3 vec_66, + in float mydist_67 +) +{ + vec4 shadows_68; + vec4 shadowVals_69; + float z_70; + float tmpvar_71; + tmpvar_71 = 0.0078125; + z_70 = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72.x = z_70; + tmpvar_72.y = z_70; + tmpvar_72.z = z_70; + float tmpvar_73; + tmpvar_73 = SampleCubeDistance ((vec_66 + tmpvar_72)); + float tmpvar_74; + tmpvar_74 = tmpvar_73; + shadowVals_69.x = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75.x = -(z_70); + tmpvar_75.y = -(z_70); + tmpvar_75.z = z_70; + float tmpvar_76; + tmpvar_76 = SampleCubeDistance ((vec_66 + tmpvar_75)); + float tmpvar_77; + tmpvar_77 = tmpvar_76; + shadowVals_69.y = vec2(tmpvar_77).y; + vec3 tmpvar_78; + tmpvar_78.x = -(z_70); + tmpvar_78.y = z_70; + tmpvar_78.z = -(z_70); + float tmpvar_79; + tmpvar_79 = SampleCubeDistance ((vec_66 + tmpvar_78)); + float tmpvar_80; + tmpvar_80 = tmpvar_79; + shadowVals_69.z = vec3(tmpvar_80).z; + vec3 tmpvar_81; + tmpvar_81.x = z_70; + tmpvar_81.y = -(z_70); + tmpvar_81.z = -(z_70); + float tmpvar_82; + tmpvar_82 = SampleCubeDistance ((vec_66 + tmpvar_81)); + float tmpvar_83; + tmpvar_83 = tmpvar_82; + shadowVals_69.w = vec4(tmpvar_83).w; + vec4 tmpvar_84; + tmpvar_84 = vec4(mydist_67); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84.xyzw; + bvec4 tmpvar_86; + tmpvar_86 = lessThan (shadowVals_69, tmpvar_85); + vec4 tmpvar_87; + tmpvar_87 = _LightShadowData.xxxx.xyzw; + vec4 tmpvar_88; + tmpvar_88 = xll_vecTSel (tmpvar_86, tmpvar_87, vec4(1.0, 1.0, 1.0, 1.0)); + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + shadows_68 = tmpvar_89; + float tmpvar_90; + tmpvar_90 = dot (shadows_68, vec4(0.25, 0.25, 0.25, 0.25)); + return tmpvar_90; +} + +float ComputeShadow ( + in vec3 vec_91, + in float z_92, + in vec2 uv_93 +) +{ + float mydist_94; + float fade_95; + float tmpvar_96; + tmpvar_96 = ((z_92 * _LightShadowData.z) + _LightShadowData.w); + fade_95 = tmpvar_96; + float tmpvar_97; + tmpvar_97 = xll_saturate (fade_95); + float tmpvar_98; + tmpvar_98 = tmpvar_97; + fade_95 = tmpvar_98; + float tmpvar_99; + tmpvar_99 = length (vec_91); + float tmpvar_100; + tmpvar_100 = (tmpvar_99 * _LightPositionRange.w); + mydist_94 = tmpvar_100; + float tmpvar_101; + tmpvar_101 = (mydist_94 * 0.97); + mydist_94 = tmpvar_101; + float tmpvar_102; + tmpvar_102 = unitySampleShadow (vec_91, mydist_94); + return tmpvar_102; + return 1.0; +} + +vec4 xlat_main ( + in v2f i_103 +) +{ + float fade_104; + vec4 res_105; + float spec_106; + vec3 h_107; + float diff_108; + float atten_109; + float att_110; + vec3 lightDir_111; + vec3 tolight_112; + vec3 wpos_113; + vec4 vpos_114; + float depth_115; + vec3 normal_116; + vec4 nspec_117; + vec2 uv_118; + vec3 tmpvar_119; + tmpvar_119 = (i_103.ray * (_ProjectionParams.z / i_103.ray.z)); + i_103.ray = tmpvar_119; + vec2 tmpvar_120; + tmpvar_120 = (i_103.uv.xy / i_103.uv.w); + uv_118 = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121 = texture2D (_CameraNormalsTexture, uv_118); + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + nspec_117 = tmpvar_122; + vec3 tmpvar_123; + tmpvar_123 = ((nspec_117.xyz * 2.0) - 1.0); + normal_116 = tmpvar_123; + vec3 tmpvar_124; + tmpvar_124 = normalize (normal_116); + vec3 tmpvar_125; + tmpvar_125 = tmpvar_124; + normal_116 = tmpvar_125; + vec4 tmpvar_126; + tmpvar_126 = texture2D (_CameraDepthTexture, uv_118); + float tmpvar_127; + tmpvar_127 = tmpvar_126.x; + depth_115 = tmpvar_127; + float tmpvar_128; + tmpvar_128 = Linear01Depth (depth_115); + float tmpvar_129; + tmpvar_129 = tmpvar_128; + depth_115 = tmpvar_129; + vec4 tmpvar_130; + tmpvar_130.w = 1.0; + tmpvar_130.xyz = (i_103.ray * depth_115).xyz; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + vpos_114 = tmpvar_131; + vec3 tmpvar_132; + tmpvar_132 = (_CameraToWorld * vpos_114).xyz; + wpos_113 = tmpvar_132; + vec3 tmpvar_133; + tmpvar_133 = (wpos_113 - _LightPos.xyz); + tolight_112 = tmpvar_133; + vec3 tmpvar_134; + tmpvar_134 = normalize (tolight_112); + vec3 tmpvar_135; + tmpvar_135 = -(tmpvar_134); + lightDir_111 = tmpvar_135; + float tmpvar_136; + tmpvar_136 = dot (tolight_112, tolight_112); + float tmpvar_137; + tmpvar_137 = (tmpvar_136 * _LightPos.w); + att_110 = tmpvar_137; + vec2 tmpvar_138; + tmpvar_138 = vec2(att_110); + vec2 tmpvar_139; + tmpvar_139 = tmpvar_138.xy; + vec4 tmpvar_140; + tmpvar_140 = texture2D (_LightTextureB0, tmpvar_139); + float tmpvar_141; + tmpvar_141 = tmpvar_140.w; + atten_109 = tmpvar_141; + float tmpvar_142; + tmpvar_142 = ComputeShadow (tolight_112, vpos_114.z, uv_118); + float tmpvar_143; + tmpvar_143 = (atten_109 * tmpvar_142); + atten_109 = tmpvar_143; + vec4 tmpvar_144; + tmpvar_144.w = 1.0; + tmpvar_144.xyz = wpos_113.xyz; + vec4 tmpvar_145; + tmpvar_145 = textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_144).xyz); + float tmpvar_146; + tmpvar_146 = (atten_109 * tmpvar_145.w); + atten_109 = tmpvar_146; + float tmpvar_147; + tmpvar_147 = dot (lightDir_111, normal_116); + float tmpvar_148; + tmpvar_148 = max (0.0, tmpvar_147); + float tmpvar_149; + tmpvar_149 = tmpvar_148; + diff_108 = tmpvar_149; + vec3 tmpvar_150; + tmpvar_150 = normalize ((wpos_113 - _WorldSpaceCameraPos)); + vec3 tmpvar_151; + tmpvar_151 = normalize ((lightDir_111 - tmpvar_150)); + vec3 tmpvar_152; + tmpvar_152 = tmpvar_151; + h_107 = tmpvar_152; + float tmpvar_153; + tmpvar_153 = dot (h_107, normal_116); + float tmpvar_154; + tmpvar_154 = max (0.0, tmpvar_153); + float tmpvar_155; + tmpvar_155 = pow (tmpvar_154, (nspec_117.w * 128.0)); + float tmpvar_156; + tmpvar_156 = tmpvar_155; + spec_106 = tmpvar_156; + float tmpvar_157; + tmpvar_157 = xll_saturate (atten_109); + float tmpvar_158; + tmpvar_158 = (spec_106 * tmpvar_157); + spec_106 = tmpvar_158; + vec3 tmpvar_159; + tmpvar_159 = (_LightColor.xyz * (diff_108 * atten_109)); + res_105.xyz = tmpvar_159.xyz.xyz; + float tmpvar_160; + tmpvar_160 = Luminance (_LightColor.xyz); + float tmpvar_161; + tmpvar_161 = (spec_106 * tmpvar_160); + res_105.w = vec4(tmpvar_161).w; + float tmpvar_162; + tmpvar_162 = ((vpos_114.z * unity_LightmapFade.z) + unity_LightmapFade.w); + fade_104 = tmpvar_162; + float tmpvar_163; + tmpvar_163 = xll_saturate ((1.0 - fade_104)); + vec4 tmpvar_164; + tmpvar_164 = (res_105 * tmpvar_163); + res_105 = tmpvar_164; + vec4 tmpvar_165; + tmpvar_165 = exp2 (-(res_105)); + return tmpvar_165; +} + +void main () +{ + v2f xlt_i_166; + vec4 xl_retval_167; + vec4 tmpvar_168; + tmpvar_168 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_166.pos = tmpvar_168; + vec4 tmpvar_169; + tmpvar_169 = xlv_TEXCOORD0.xyzw; + vec4 tmpvar_170; + tmpvar_170 = tmpvar_169; + xlt_i_166.uv = tmpvar_170; + vec3 tmpvar_171; + tmpvar_171 = xlv_TEXCOORD1.xyz; + vec3 tmpvar_172; + tmpvar_172 = tmpvar_171; + xlt_i_166.ray = tmpvar_172; + vec4 tmpvar_173; + tmpvar_173 = xlat_main (xlt_i_166); + vec4 tmpvar_174; + tmpvar_174 = tmpvar_173; + xl_retval_167 = tmpvar_174; + vec4 tmpvar_175; + tmpvar_175 = xl_retval_167.xyzw; + vec4 tmpvar_176; + tmpvar_176 = tmpvar_175; + gl_FragData[0] = tmpvar_176; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-irES.txt new file mode 100644 index 000000000..d64551241 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-irES.txt @@ -0,0 +1,529 @@ +struct v2f { + highp vec4 pos; + highp vec4 uv; + highp vec3 ray; +}; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_TEXCOORD0; +uniform highp vec4 unity_LightmapFade; +uniform highp vec4 _ZBufferParams; +uniform highp vec3 _WorldSpaceCameraPos; +uniform samplerCube _ShadowMapTexture; +uniform highp vec4 _ProjectionParams; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform highp vec4 _LightShadowData; +uniform highp vec4 _LightPositionRange; +uniform highp vec4 _LightPos; +uniform highp mat4 _LightMatrix0; +uniform highp vec4 _LightColor; +uniform highp mat4 _CameraToWorld; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec2 xll_vecTSel ( + in bvec2 a_33, + in vec2 b_34, + in vec2 c_35 +) +{ + float tmpvar_36; + if (a_33.x) { + tmpvar_36 = b_34.x; + } else { + tmpvar_36 = c_35.x; + }; + float tmpvar_37; + if (a_33.y) { + tmpvar_37 = b_34.y; + } else { + tmpvar_37 = c_35.y; + }; + vec2 tmpvar_38; + tmpvar_38.x = tmpvar_36; + tmpvar_38.y = tmpvar_37; + return tmpvar_38; +} + +vec3 xll_vecTSel ( + in bvec3 a_39, + in vec3 b_40, + in vec3 c_41 +) +{ + float tmpvar_42; + if (a_39.x) { + tmpvar_42 = b_40.x; + } else { + tmpvar_42 = c_41.x; + }; + float tmpvar_43; + if (a_39.y) { + tmpvar_43 = b_40.y; + } else { + tmpvar_43 = c_41.y; + }; + float tmpvar_44; + if (a_39.z) { + tmpvar_44 = b_40.z; + } else { + tmpvar_44 = c_41.z; + }; + vec3 tmpvar_45; + tmpvar_45.x = tmpvar_42; + tmpvar_45.y = tmpvar_43; + tmpvar_45.z = tmpvar_44; + return tmpvar_45; +} + +vec4 xll_vecTSel ( + in bvec4 a_46, + in vec4 b_47, + in vec4 c_48 +) +{ + float tmpvar_49; + if (a_46.x) { + tmpvar_49 = b_47.x; + } else { + tmpvar_49 = c_48.x; + }; + float tmpvar_50; + if (a_46.y) { + tmpvar_50 = b_47.y; + } else { + tmpvar_50 = c_48.y; + }; + float tmpvar_51; + if (a_46.z) { + tmpvar_51 = b_47.z; + } else { + tmpvar_51 = c_48.z; + }; + float tmpvar_52; + if (a_46.w) { + tmpvar_52 = b_47.w; + } else { + tmpvar_52 = c_48.w; + }; + vec4 tmpvar_53; + tmpvar_53.x = tmpvar_49; + tmpvar_53.y = tmpvar_50; + tmpvar_53.z = tmpvar_51; + tmpvar_53.w = tmpvar_52; + return tmpvar_53; +} + +mediump float Luminance ( + in mediump vec3 c_54 +) +{ + mediump float tmpvar_55; + tmpvar_55 = dot (c_54, vec3(0.22, 0.707, 0.071)); + return tmpvar_55; +} + +float Linear01Depth ( + in highp float z_56 +) +{ + return (1.0 / ((_ZBufferParams.x * z_56) + _ZBufferParams.y)); +} + +float DecodeFloatRGBA ( + in highp vec4 enc_57 +) +{ + highp vec4 kDecodeDot_58; + vec4 tmpvar_59; + tmpvar_59 = vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09); + kDecodeDot_58 = tmpvar_59; + highp float tmpvar_60; + tmpvar_60 = dot (enc_57, kDecodeDot_58); + return tmpvar_60; +} + +float SampleCubeDistance ( + in highp vec3 vec_61 +) +{ + highp vec4 packDist_62; + lowp vec4 tmpvar_63; + tmpvar_63 = textureCube (_ShadowMapTexture, vec_61); + lowp vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + packDist_62 = tmpvar_64; + highp float tmpvar_65; + tmpvar_65 = DecodeFloatRGBA (packDist_62); + return tmpvar_65; +} + +mediump float unitySampleShadow ( + in highp vec3 vec_66, + in highp float mydist_67 +) +{ + mediump vec4 shadows_68; + highp vec4 shadowVals_69; + highp float z_70; + float tmpvar_71; + tmpvar_71 = 0.0078125; + z_70 = tmpvar_71; + highp vec3 tmpvar_72; + tmpvar_72.x = z_70; + tmpvar_72.y = z_70; + tmpvar_72.z = z_70; + highp float tmpvar_73; + tmpvar_73 = SampleCubeDistance ((vec_66 + tmpvar_72)); + highp float tmpvar_74; + tmpvar_74 = tmpvar_73; + shadowVals_69.x = tmpvar_74; + highp vec3 tmpvar_75; + tmpvar_75.x = -(z_70); + tmpvar_75.y = -(z_70); + tmpvar_75.z = z_70; + highp float tmpvar_76; + tmpvar_76 = SampleCubeDistance ((vec_66 + tmpvar_75)); + highp float tmpvar_77; + tmpvar_77 = tmpvar_76; + shadowVals_69.y = vec2(tmpvar_77).y; + highp vec3 tmpvar_78; + tmpvar_78.x = -(z_70); + tmpvar_78.y = z_70; + tmpvar_78.z = -(z_70); + highp float tmpvar_79; + tmpvar_79 = SampleCubeDistance ((vec_66 + tmpvar_78)); + highp float tmpvar_80; + tmpvar_80 = tmpvar_79; + shadowVals_69.z = vec3(tmpvar_80).z; + highp vec3 tmpvar_81; + tmpvar_81.x = z_70; + tmpvar_81.y = -(z_70); + tmpvar_81.z = -(z_70); + highp float tmpvar_82; + tmpvar_82 = SampleCubeDistance ((vec_66 + tmpvar_81)); + highp float tmpvar_83; + tmpvar_83 = tmpvar_82; + shadowVals_69.w = vec4(tmpvar_83).w; + highp vec4 tmpvar_84; + tmpvar_84 = vec4(mydist_67); + highp vec4 tmpvar_85; + tmpvar_85 = tmpvar_84.xyzw; + bvec4 tmpvar_86; + tmpvar_86 = lessThan (shadowVals_69, tmpvar_85); + highp vec4 tmpvar_87; + tmpvar_87 = _LightShadowData.xxxx.xyzw; + vec4 tmpvar_88; + tmpvar_88 = xll_vecTSel (tmpvar_86, tmpvar_87, vec4(1.0, 1.0, 1.0, 1.0)); + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + shadows_68 = tmpvar_89; + mediump float tmpvar_90; + tmpvar_90 = dot (shadows_68, vec4(0.25, 0.25, 0.25, 0.25)); + return tmpvar_90; +} + +mediump float ComputeShadow ( + in highp vec3 vec_91, + in highp float z_92, + in highp vec2 uv_93 +) +{ + highp float mydist_94; + highp float fade_95; + highp float tmpvar_96; + tmpvar_96 = ((z_92 * _LightShadowData.z) + _LightShadowData.w); + fade_95 = tmpvar_96; + float tmpvar_97; + tmpvar_97 = xll_saturate (fade_95); + float tmpvar_98; + tmpvar_98 = tmpvar_97; + fade_95 = tmpvar_98; + highp float tmpvar_99; + tmpvar_99 = length (vec_91); + highp float tmpvar_100; + tmpvar_100 = (tmpvar_99 * _LightPositionRange.w); + mydist_94 = tmpvar_100; + highp float tmpvar_101; + tmpvar_101 = (mydist_94 * 0.97); + mydist_94 = tmpvar_101; + mediump float tmpvar_102; + tmpvar_102 = unitySampleShadow (vec_91, mydist_94); + return tmpvar_102; + return 1.0; +} + +mediump vec4 xlat_main ( + in v2f i_103 +) +{ + highp float fade_104; + mediump vec4 res_105; + highp float spec_106; + mediump vec3 h_107; + mediump float diff_108; + highp float atten_109; + highp float att_110; + mediump vec3 lightDir_111; + highp vec3 tolight_112; + highp vec3 wpos_113; + highp vec4 vpos_114; + highp float depth_115; + mediump vec3 normal_116; + mediump vec4 nspec_117; + highp vec2 uv_118; + highp vec3 tmpvar_119; + tmpvar_119 = (i_103.ray * (_ProjectionParams.z / i_103.ray.z)); + i_103.ray = tmpvar_119; + highp vec2 tmpvar_120; + tmpvar_120 = (i_103.uv.xy / i_103.uv.w); + uv_118 = tmpvar_120; + lowp vec4 tmpvar_121; + tmpvar_121 = texture2D (_CameraNormalsTexture, uv_118); + lowp vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + nspec_117 = tmpvar_122; + mediump vec3 tmpvar_123; + tmpvar_123 = ((nspec_117.xyz * 2.0) - 1.0); + normal_116 = tmpvar_123; + mediump vec3 tmpvar_124; + tmpvar_124 = normalize (normal_116); + mediump vec3 tmpvar_125; + tmpvar_125 = tmpvar_124; + normal_116 = tmpvar_125; + lowp vec4 tmpvar_126; + tmpvar_126 = texture2D (_CameraDepthTexture, uv_118); + lowp float tmpvar_127; + tmpvar_127 = tmpvar_126.x; + depth_115 = tmpvar_127; + highp float tmpvar_128; + tmpvar_128 = Linear01Depth (depth_115); + highp float tmpvar_129; + tmpvar_129 = tmpvar_128; + depth_115 = tmpvar_129; + highp vec4 tmpvar_130; + tmpvar_130.w = 1.0; + tmpvar_130.xyz = (i_103.ray * depth_115).xyz; + highp vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + vpos_114 = tmpvar_131; + highp vec3 tmpvar_132; + tmpvar_132 = (_CameraToWorld * vpos_114).xyz; + wpos_113 = tmpvar_132; + highp vec3 tmpvar_133; + tmpvar_133 = (wpos_113 - _LightPos.xyz); + tolight_112 = tmpvar_133; + highp vec3 tmpvar_134; + tmpvar_134 = normalize (tolight_112); + highp vec3 tmpvar_135; + tmpvar_135 = -(tmpvar_134); + lightDir_111 = tmpvar_135; + highp float tmpvar_136; + tmpvar_136 = dot (tolight_112, tolight_112); + highp float tmpvar_137; + tmpvar_137 = (tmpvar_136 * _LightPos.w); + att_110 = tmpvar_137; + highp vec2 tmpvar_138; + tmpvar_138 = vec2(att_110); + highp vec2 tmpvar_139; + tmpvar_139 = tmpvar_138.xy; + lowp vec4 tmpvar_140; + tmpvar_140 = texture2D (_LightTextureB0, tmpvar_139); + lowp float tmpvar_141; + tmpvar_141 = tmpvar_140.w; + atten_109 = tmpvar_141; + mediump float tmpvar_142; + tmpvar_142 = ComputeShadow (tolight_112, vpos_114.z, uv_118); + highp float tmpvar_143; + tmpvar_143 = (atten_109 * tmpvar_142); + atten_109 = tmpvar_143; + highp vec4 tmpvar_144; + tmpvar_144.w = 1.0; + tmpvar_144.xyz = wpos_113.xyz; + lowp vec4 tmpvar_145; + tmpvar_145 = textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_144).xyz); + highp float tmpvar_146; + tmpvar_146 = (atten_109 * tmpvar_145.w); + atten_109 = tmpvar_146; + mediump float tmpvar_147; + tmpvar_147 = dot (lightDir_111, normal_116); + mediump float tmpvar_148; + tmpvar_148 = max (0.0, tmpvar_147); + mediump float tmpvar_149; + tmpvar_149 = tmpvar_148; + diff_108 = tmpvar_149; + highp vec3 tmpvar_150; + tmpvar_150 = normalize ((wpos_113 - _WorldSpaceCameraPos)); + highp vec3 tmpvar_151; + tmpvar_151 = normalize ((lightDir_111 - tmpvar_150)); + highp vec3 tmpvar_152; + tmpvar_152 = tmpvar_151; + h_107 = tmpvar_152; + mediump float tmpvar_153; + tmpvar_153 = dot (h_107, normal_116); + mediump float tmpvar_154; + tmpvar_154 = max (0.0, tmpvar_153); + mediump float tmpvar_155; + tmpvar_155 = pow (tmpvar_154, (nspec_117.w * 128.0)); + mediump float tmpvar_156; + tmpvar_156 = tmpvar_155; + spec_106 = tmpvar_156; + float tmpvar_157; + tmpvar_157 = xll_saturate (atten_109); + highp float tmpvar_158; + tmpvar_158 = (spec_106 * tmpvar_157); + spec_106 = tmpvar_158; + highp vec3 tmpvar_159; + tmpvar_159 = (_LightColor.xyz * (diff_108 * atten_109)); + res_105.xyz = tmpvar_159.xyz.xyz; + mediump float tmpvar_160; + tmpvar_160 = Luminance (_LightColor.xyz); + highp float tmpvar_161; + tmpvar_161 = (spec_106 * tmpvar_160); + res_105.w = vec4(tmpvar_161).w; + highp float tmpvar_162; + tmpvar_162 = ((vpos_114.z * unity_LightmapFade.z) + unity_LightmapFade.w); + fade_104 = tmpvar_162; + float tmpvar_163; + tmpvar_163 = xll_saturate ((1.0 - fade_104)); + mediump vec4 tmpvar_164; + tmpvar_164 = (res_105 * tmpvar_163); + res_105 = tmpvar_164; + mediump vec4 tmpvar_165; + tmpvar_165 = exp2 (-(res_105)); + return tmpvar_165; +} + +void main () +{ + v2f xlt_i_166; + mediump vec4 xl_retval_167; + vec4 tmpvar_168; + tmpvar_168 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_166.pos = tmpvar_168; + highp vec4 tmpvar_169; + tmpvar_169 = xlv_TEXCOORD0.xyzw; + highp vec4 tmpvar_170; + tmpvar_170 = tmpvar_169; + xlt_i_166.uv = tmpvar_170; + highp vec3 tmpvar_171; + tmpvar_171 = xlv_TEXCOORD1.xyz; + highp vec3 tmpvar_172; + tmpvar_172 = tmpvar_171; + xlt_i_166.ray = tmpvar_172; + mediump vec4 tmpvar_173; + tmpvar_173 = xlat_main (xlt_i_166); + mediump vec4 tmpvar_174; + tmpvar_174 = tmpvar_173; + xl_retval_167 = tmpvar_174; + mediump vec4 tmpvar_175; + tmpvar_175 = xl_retval_167.xyzw; + mediump vec4 tmpvar_176; + tmpvar_176 = tmpvar_175; + gl_FragData[0] = tmpvar_176; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-out.txt new file mode 100644 index 000000000..ca810e6a4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-out.txt @@ -0,0 +1,89 @@ +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_TEXCOORD0; +uniform vec4 unity_LightmapFade; +uniform vec4 _ZBufferParams; +uniform vec3 _WorldSpaceCameraPos; +uniform samplerCube _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightShadowData; +uniform vec4 _LightPositionRange; +uniform vec4 _LightPos; +uniform mat4 _LightMatrix0; +uniform vec4 _LightColor; +uniform mat4 _CameraToWorld; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +void main () +{ + vec4 res_1; + float atten_2; + vec3 lightDir_3; + vec3 normal_4; + vec2 tmpvar_5; + tmpvar_5 = (xlv_TEXCOORD0.xy / xlv_TEXCOORD0.w); + vec4 tmpvar_6; + tmpvar_6 = texture2D (_CameraNormalsTexture, tmpvar_5); + normal_4 = normalize(((tmpvar_6.xyz * 2.0) - 1.0)); + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = ((xlv_TEXCOORD1 * (_ProjectionParams.z / xlv_TEXCOORD1.z)) * (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, tmpvar_5).x) + _ZBufferParams.y)))); + vec3 tmpvar_8; + tmpvar_8 = (_CameraToWorld * tmpvar_7).xyz; + vec3 tmpvar_9; + tmpvar_9 = (tmpvar_8 - _LightPos.xyz); + lightDir_3 = -(normalize(tmpvar_9)); + atten_2 = texture2D (_LightTextureB0, vec2((dot (tmpvar_9, tmpvar_9) * _LightPos.w))).w; + vec4 shadowVals_10; + shadowVals_10.x = dot (textureCube (_ShadowMapTexture, (tmpvar_9 + vec3(0.0078125, 0.0078125, 0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + shadowVals_10.y = dot (textureCube (_ShadowMapTexture, (tmpvar_9 + vec3(-0.0078125, -0.0078125, 0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + shadowVals_10.z = dot (textureCube (_ShadowMapTexture, (tmpvar_9 + vec3(-0.0078125, 0.0078125, -0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + shadowVals_10.w = dot (textureCube (_ShadowMapTexture, (tmpvar_9 + vec3(0.0078125, -0.0078125, -0.0078125))), vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + bvec4 tmpvar_11; + tmpvar_11 = lessThan (shadowVals_10, vec4(((sqrt(dot (tmpvar_9, tmpvar_9)) * _LightPositionRange.w) * 0.97))); + vec4 tmpvar_12; + tmpvar_12 = _LightShadowData.xxxx; + float tmpvar_13; + if (tmpvar_11.x) { + tmpvar_13 = tmpvar_12.x; + } else { + tmpvar_13 = 1.0; + }; + float tmpvar_14; + if (tmpvar_11.y) { + tmpvar_14 = tmpvar_12.y; + } else { + tmpvar_14 = 1.0; + }; + float tmpvar_15; + if (tmpvar_11.z) { + tmpvar_15 = tmpvar_12.z; + } else { + tmpvar_15 = 1.0; + }; + float tmpvar_16; + if (tmpvar_11.w) { + tmpvar_16 = tmpvar_12.w; + } else { + tmpvar_16 = 1.0; + }; + vec4 tmpvar_17; + tmpvar_17.x = tmpvar_13; + tmpvar_17.y = tmpvar_14; + tmpvar_17.z = tmpvar_15; + tmpvar_17.w = tmpvar_16; + vec4 tmpvar_18; + tmpvar_18.w = 1.0; + tmpvar_18.xyz = tmpvar_8; + float tmpvar_19; + tmpvar_19 = ((atten_2 * dot (tmpvar_17, vec4(0.25, 0.25, 0.25, 0.25))) * textureCube (_LightTexture0, (_LightMatrix0 * tmpvar_18).xyz).w); + atten_2 = tmpvar_19; + res_1.xyz = (_LightColor.xyz * (max (0.0, dot (lightDir_3, normal_4)) * tmpvar_19)); + res_1.w = ((pow (max (0.0, dot (normalize((lightDir_3 - normalize((tmpvar_8 - _WorldSpaceCameraPos)))), normal_4)), (tmpvar_6.w * 128.0)) * clamp (tmpvar_19, 0.0, 1.0)) * dot (_LightColor.xyz, vec3(0.22, 0.707, 0.071))); + vec4 tmpvar_20; + tmpvar_20 = (res_1 * clamp ((1.0 - ((tmpvar_7.z * unity_LightmapFade.z) + unity_LightmapFade.w)), 0.0, 1.0)); + res_1 = tmpvar_20; + gl_FragData[0] = exp2(-(tmpvar_20)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES.txt new file mode 100644 index 000000000..3ed273412 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES.txt @@ -0,0 +1,161 @@ +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_TEXCOORD0; +uniform highp vec4 unity_LightmapFade; +uniform highp vec4 _ZBufferParams; +uniform highp vec3 _WorldSpaceCameraPos; +uniform samplerCube _ShadowMapTexture; +uniform highp vec4 _ProjectionParams; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform highp vec4 _LightShadowData; +uniform highp vec4 _LightPositionRange; +uniform highp vec4 _LightPos; +uniform highp mat4 _LightMatrix0; +uniform highp vec4 _LightColor; +uniform highp mat4 _CameraToWorld; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +void main () +{ + mediump vec4 res_1; + highp float spec_2; + mediump vec3 h_3; + highp float atten_4; + mediump vec3 lightDir_5; + highp float depth_6; + mediump vec3 normal_7; + mediump vec4 nspec_8; + highp vec2 tmpvar_9; + tmpvar_9 = (xlv_TEXCOORD0.xy / xlv_TEXCOORD0.w); + lowp vec4 tmpvar_10; + tmpvar_10 = texture2D (_CameraNormalsTexture, tmpvar_9); + nspec_8 = tmpvar_10; + normal_7 = normalize(((nspec_8.xyz * 2.0) - 1.0)); + lowp float tmpvar_11; + tmpvar_11 = texture2D (_CameraDepthTexture, tmpvar_9).x; + depth_6 = tmpvar_11; + highp float tmpvar_12; + tmpvar_12 = (1.0/(((_ZBufferParams.x * depth_6) + _ZBufferParams.y))); + depth_6 = tmpvar_12; + highp vec4 tmpvar_13; + tmpvar_13.w = 1.0; + tmpvar_13.xyz = ((xlv_TEXCOORD1 * (_ProjectionParams.z / xlv_TEXCOORD1.z)) * tmpvar_12); + highp vec3 tmpvar_14; + tmpvar_14 = (_CameraToWorld * tmpvar_13).xyz; + highp vec3 tmpvar_15; + tmpvar_15 = (tmpvar_14 - _LightPos.xyz); + highp vec3 tmpvar_16; + tmpvar_16 = -(normalize(tmpvar_15)); + lightDir_5 = tmpvar_16; + highp vec2 tmpvar_17; + tmpvar_17 = vec2((dot (tmpvar_15, tmpvar_15) * _LightPos.w)); + lowp float tmpvar_18; + tmpvar_18 = texture2D (_LightTextureB0, tmpvar_17).w; + atten_4 = tmpvar_18; + highp float tmpvar_19; + tmpvar_19 = ((sqrt(dot (tmpvar_15, tmpvar_15)) * _LightPositionRange.w) * 0.97); + mediump vec4 shadows_20; + highp vec4 shadowVals_21; + highp vec3 vec_22; + vec_22 = (tmpvar_15 + vec3(0.0078125, 0.0078125, 0.0078125)); + highp vec4 packDist_23; + lowp vec4 tmpvar_24; + tmpvar_24 = textureCube (_ShadowMapTexture, vec_22); + packDist_23 = tmpvar_24; + shadowVals_21.x = dot (packDist_23, vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + highp vec3 vec_25; + vec_25 = (tmpvar_15 + vec3(-0.0078125, -0.0078125, 0.0078125)); + highp vec4 packDist_26; + lowp vec4 tmpvar_27; + tmpvar_27 = textureCube (_ShadowMapTexture, vec_25); + packDist_26 = tmpvar_27; + shadowVals_21.y = dot (packDist_26, vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + highp vec3 vec_28; + vec_28 = (tmpvar_15 + vec3(-0.0078125, 0.0078125, -0.0078125)); + highp vec4 packDist_29; + lowp vec4 tmpvar_30; + tmpvar_30 = textureCube (_ShadowMapTexture, vec_28); + packDist_29 = tmpvar_30; + shadowVals_21.z = dot (packDist_29, vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + highp vec3 vec_31; + vec_31 = (tmpvar_15 + vec3(0.0078125, -0.0078125, -0.0078125)); + highp vec4 packDist_32; + lowp vec4 tmpvar_33; + tmpvar_33 = textureCube (_ShadowMapTexture, vec_31); + packDist_32 = tmpvar_33; + shadowVals_21.w = dot (packDist_32, vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + bvec4 tmpvar_34; + tmpvar_34 = lessThan (shadowVals_21, vec4(tmpvar_19)); + highp vec4 tmpvar_35; + tmpvar_35 = _LightShadowData.xxxx; + highp float tmpvar_36; + if (tmpvar_34.x) { + tmpvar_36 = tmpvar_35.x; + } else { + tmpvar_36 = 1.0; + }; + highp float tmpvar_37; + if (tmpvar_34.y) { + tmpvar_37 = tmpvar_35.y; + } else { + tmpvar_37 = 1.0; + }; + highp float tmpvar_38; + if (tmpvar_34.z) { + tmpvar_38 = tmpvar_35.z; + } else { + tmpvar_38 = 1.0; + }; + highp float tmpvar_39; + if (tmpvar_34.w) { + tmpvar_39 = tmpvar_35.w; + } else { + tmpvar_39 = 1.0; + }; + highp vec4 tmpvar_40; + tmpvar_40.x = tmpvar_36; + tmpvar_40.y = tmpvar_37; + tmpvar_40.z = tmpvar_38; + tmpvar_40.w = tmpvar_39; + shadows_20 = tmpvar_40; + mediump float tmpvar_41; + tmpvar_41 = dot (shadows_20, vec4(0.25, 0.25, 0.25, 0.25)); + highp vec4 tmpvar_42; + tmpvar_42.w = 1.0; + tmpvar_42.xyz = tmpvar_14; + lowp vec4 tmpvar_43; + highp vec3 P_44; + P_44 = (_LightMatrix0 * tmpvar_42).xyz; + tmpvar_43 = textureCube (_LightTexture0, P_44); + highp float tmpvar_45; + tmpvar_45 = ((atten_4 * tmpvar_41) * tmpvar_43.w); + atten_4 = tmpvar_45; + mediump float tmpvar_46; + tmpvar_46 = max (0.0, dot (lightDir_5, normal_7)); + highp vec3 tmpvar_47; + tmpvar_47 = normalize((lightDir_5 - normalize((tmpvar_14 - _WorldSpaceCameraPos)))); + h_3 = tmpvar_47; + mediump float tmpvar_48; + tmpvar_48 = pow (max (0.0, dot (h_3, normal_7)), (nspec_8.w * 128.0)); + spec_2 = tmpvar_48; + highp float tmpvar_49; + tmpvar_49 = (spec_2 * clamp (tmpvar_45, 0.0, 1.0)); + spec_2 = tmpvar_49; + highp vec3 tmpvar_50; + tmpvar_50 = (_LightColor.xyz * (tmpvar_46 * tmpvar_45)); + res_1.xyz = tmpvar_50; + mediump vec3 c_51; + c_51 = _LightColor.xyz; + mediump float tmpvar_52; + tmpvar_52 = dot (c_51, vec3(0.22, 0.707, 0.071)); + highp float tmpvar_53; + tmpvar_53 = (tmpvar_49 * tmpvar_52); + res_1.w = tmpvar_53; + highp float tmpvar_54; + tmpvar_54 = clamp ((1.0 - ((tmpvar_13.z * unity_LightmapFade.z) + unity_LightmapFade.w)), 0.0, 1.0); + mediump vec4 tmpvar_55; + tmpvar_55 = (res_1 * tmpvar_54); + res_1 = tmpvar_55; + gl_FragData[0] = exp2(-(tmpvar_55)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-in.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/complex-treeleaf-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-ir.txt new file mode 100644 index 000000000..275aab3c6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-ir.txt @@ -0,0 +1,381 @@ +struct LeafSurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Translucency; + float ShadowOffset; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec2 _LightCoord; +}; +varying vec2 xlv_TEXCOORD3; +varying vec3 xlv_TEXCOORD2; +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_COLOR0; +varying vec2 xlv_TEXCOORD0; +uniform float _TranslucencyViewDependency; +uniform sampler2D _TranslucencyMap; +uniform vec3 _TranslucencyColor; +uniform float _ShadowStrength; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpSpecMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +vec4 UnpackNormal ( + in vec4 packednormal_34 +) +{ + vec4 normal_35; + vec2 tmpvar_36; + tmpvar_36 = ((packednormal_34.wy * 2.0) - 1.0); + normal_35.xy = tmpvar_36.xy.xy; + float tmpvar_37; + tmpvar_37 = sqrt (((1.0 - (normal_35.x * normal_35.x)) - (normal_35.y * normal_35.y))); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + normal_35.z = vec3(tmpvar_38).z; + return normal_35; +} + +void surf ( + in Input IN_39, + inout LeafSurfaceOutput o_40 +) +{ + vec4 norspc_41; + vec4 trngls_42; + vec4 c_43; + vec4 tmpvar_44; + tmpvar_44 = texture2D (_MainTex, IN_39.uv_MainTex); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + c_43 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = ((c_43.xyz * _Color.xyz) * IN_39.color.w); + o_40.Albedo = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_TranslucencyMap, IN_39.uv_MainTex); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + trngls_42 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = trngls_42.z; + o_40.Translucency = tmpvar_49; + float tmpvar_50; + tmpvar_50 = (trngls_42.w * _Color.x); + o_40.Gloss = tmpvar_50; + float tmpvar_51; + tmpvar_51 = c_43.w; + o_40.Alpha = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = texture2D (_BumpSpecMap, IN_39.uv_MainTex); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + norspc_41 = tmpvar_53; + float tmpvar_54; + tmpvar_54 = norspc_41.x; + o_40.Specular = tmpvar_54; + float tmpvar_55; + tmpvar_55 = norspc_41.z; + o_40.ShadowOffset = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = UnpackNormal (norspc_41); + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56.xyz; + vec3 tmpvar_58; + tmpvar_58 = tmpvar_57; + o_40.Normal = tmpvar_58; +} + +vec4 LightingTreeLeaf ( + in LeafSurfaceOutput s_59, + in vec3 lightDir_60, + in vec3 viewDir_61, + in float atten_62 +) +{ + vec4 c_63; + vec3 translucencyColor_64; + float backContrib_65; + float spec_66; + float nh_67; + float nl_68; + vec3 h_69; + vec3 tmpvar_70; + tmpvar_70 = normalize ((lightDir_60 + viewDir_61)); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + h_69 = tmpvar_71; + float tmpvar_72; + tmpvar_72 = dot (s_59.Normal, lightDir_60); + float tmpvar_73; + tmpvar_73 = tmpvar_72; + nl_68 = tmpvar_73; + float tmpvar_74; + tmpvar_74 = dot (s_59.Normal, h_69); + float tmpvar_75; + tmpvar_75 = max (0.0, tmpvar_74); + float tmpvar_76; + tmpvar_76 = tmpvar_75; + nh_67 = tmpvar_76; + float tmpvar_77; + tmpvar_77 = pow (nh_67, (s_59.Specular * 128.0)); + float tmpvar_78; + tmpvar_78 = (tmpvar_77 * s_59.Gloss); + spec_66 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = dot (viewDir_61, -(lightDir_60)); + float tmpvar_80; + tmpvar_80 = xll_saturate (tmpvar_79); + float tmpvar_81; + tmpvar_81 = tmpvar_80; + backContrib_65 = tmpvar_81; + float tmpvar_82; + tmpvar_82 = xll_saturate (-(nl_68)); + float tmpvar_83; + tmpvar_83 = mix (tmpvar_82, backContrib_65, _TranslucencyViewDependency); + float tmpvar_84; + tmpvar_84 = tmpvar_83; + backContrib_65 = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = ((backContrib_65 * s_59.Translucency) * _TranslucencyColor); + translucencyColor_64 = tmpvar_85; + float tmpvar_86; + tmpvar_86 = max (0.0, ((nl_68 * 0.6) + 0.4)); + float tmpvar_87; + tmpvar_87 = tmpvar_86; + nl_68 = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = (s_59.Albedo * ((translucencyColor_64 * 2.0) + nl_68)); + c_63.xyz = tmpvar_88.xyz.xyz; + vec3 tmpvar_89; + tmpvar_89 = ((c_63.xyz * _LightColor0.xyz) + spec_66); + c_63.xyz = tmpvar_89.xyz.xyz; + float tmpvar_90; + tmpvar_90 = mix (2.0, (atten_62 * 2.0), _ShadowStrength); + vec3 tmpvar_91; + tmpvar_91 = (c_63.xyz * tmpvar_90); + c_63.xyz = tmpvar_91.xyz.xyz; + return c_63; +} + +vec4 xlat_main ( + in v2f_surf IN_92 +) +{ + vec4 c_93; + vec3 lightDir_94; + LeafSurfaceOutput o_95; + Input surfIN_96; + vec2 tmpvar_97; + tmpvar_97 = IN_92.hip_pack0.xy; + surfIN_96.uv_MainTex = tmpvar_97; + vec4 tmpvar_98; + tmpvar_98 = IN_92.lop_color; + surfIN_96.color = tmpvar_98; + vec3 tmpvar_99; + tmpvar_99 = vec3(0.0, 0.0, 0.0); + o_95.Albedo = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = vec3(0.0, 0.0, 0.0); + o_95.Emission = tmpvar_100; + float tmpvar_101; + tmpvar_101 = 0.0; + o_95.Specular = tmpvar_101; + float tmpvar_102; + tmpvar_102 = 0.0; + o_95.Alpha = tmpvar_102; + surf (surfIN_96, o_95); + xll_clip ((o_95.Alpha - _Cutoff)); + vec3 tmpvar_103; + tmpvar_103 = IN_92.lightDir; + lightDir_94 = tmpvar_103; + vec3 tmpvar_104; + tmpvar_104 = IN_92.viewDir.xyz; + vec3 tmpvar_105; + tmpvar_105 = normalize (tmpvar_104); + vec4 tmpvar_106; + tmpvar_106 = texture2D (_LightTexture0, IN_92._LightCoord); + vec4 tmpvar_107; + tmpvar_107 = LightingTreeLeaf (o_95, lightDir_94, tmpvar_105, (tmpvar_106.w * 1.0)); + vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + c_93 = tmpvar_108; + float tmpvar_109; + tmpvar_109 = o_95.Alpha; + c_93.w = vec4(tmpvar_109).w; + return c_93; +} + +void main () +{ + v2f_surf xlt_IN_110; + vec4 xl_retval_111; + vec4 tmpvar_112; + tmpvar_112 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_110.pos = tmpvar_112; + vec2 tmpvar_113; + tmpvar_113 = xlv_TEXCOORD0.xy; + vec2 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_IN_110.hip_pack0 = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115 = xlv_COLOR0.xyzw; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_IN_110.lop_color = tmpvar_116; + vec3 tmpvar_117; + tmpvar_117 = xlv_TEXCOORD1.xyz; + vec3 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_IN_110.lightDir = tmpvar_118; + vec3 tmpvar_119; + tmpvar_119 = xlv_TEXCOORD2.xyz; + vec3 tmpvar_120; + tmpvar_120 = tmpvar_119; + xlt_IN_110.viewDir = tmpvar_120; + vec2 tmpvar_121; + tmpvar_121 = xlv_TEXCOORD3.xy; + vec2 tmpvar_122; + tmpvar_122 = tmpvar_121; + xlt_IN_110._LightCoord = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123 = xlat_main (xlt_IN_110); + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + xl_retval_111 = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = xl_retval_111.xyzw; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_FragData[0] = tmpvar_126; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-irES.txt new file mode 100644 index 000000000..cced8621b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-irES.txt @@ -0,0 +1,381 @@ +struct LeafSurfaceOutput { + mediump vec3 Albedo; + mediump vec3 Normal; + mediump vec3 Emission; + mediump float Translucency; + mediump float ShadowOffset; + mediump float Specular; + mediump float Gloss; + mediump float Alpha; +}; +struct Input { + highp vec2 uv_MainTex; + highp vec4 color; +}; +struct v2f_surf { + highp vec4 pos; + highp vec2 hip_pack0; + highp vec4 lop_color; + highp vec3 lightDir; + highp vec3 viewDir; + highp vec2 _LightCoord; +}; +varying highp vec2 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_COLOR0; +varying highp vec2 xlv_TEXCOORD0; +uniform mediump float _TranslucencyViewDependency; +uniform sampler2D _TranslucencyMap; +uniform mediump vec3 _TranslucencyColor; +uniform mediump float _ShadowStrength; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform highp vec4 _LightColor0; +uniform highp float _Cutoff; +uniform highp vec4 _Color; +uniform sampler2D _BumpSpecMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +mediump vec4 UnpackNormal ( + in mediump vec4 packednormal_34 +) +{ + mediump vec4 normal_35; + mediump vec2 tmpvar_36; + tmpvar_36 = ((packednormal_34.wy * 2.0) - 1.0); + normal_35.xy = tmpvar_36.xy.xy; + mediump float tmpvar_37; + tmpvar_37 = sqrt (((1.0 - (normal_35.x * normal_35.x)) - (normal_35.y * normal_35.y))); + mediump float tmpvar_38; + tmpvar_38 = tmpvar_37; + normal_35.z = vec3(tmpvar_38).z; + return normal_35; +} + +void surf ( + in Input IN_39, + inout LeafSurfaceOutput o_40 +) +{ + mediump vec4 norspc_41; + mediump vec4 trngls_42; + mediump vec4 c_43; + lowp vec4 tmpvar_44; + tmpvar_44 = texture2D (_MainTex, IN_39.uv_MainTex); + lowp vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + c_43 = tmpvar_45; + highp vec3 tmpvar_46; + tmpvar_46 = ((c_43.xyz * _Color.xyz) * IN_39.color.w); + o_40.Albedo = tmpvar_46; + lowp vec4 tmpvar_47; + tmpvar_47 = texture2D (_TranslucencyMap, IN_39.uv_MainTex); + lowp vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + trngls_42 = tmpvar_48; + mediump float tmpvar_49; + tmpvar_49 = trngls_42.z; + o_40.Translucency = tmpvar_49; + highp float tmpvar_50; + tmpvar_50 = (trngls_42.w * _Color.x); + o_40.Gloss = tmpvar_50; + mediump float tmpvar_51; + tmpvar_51 = c_43.w; + o_40.Alpha = tmpvar_51; + lowp vec4 tmpvar_52; + tmpvar_52 = texture2D (_BumpSpecMap, IN_39.uv_MainTex); + lowp vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + norspc_41 = tmpvar_53; + mediump float tmpvar_54; + tmpvar_54 = norspc_41.x; + o_40.Specular = tmpvar_54; + mediump float tmpvar_55; + tmpvar_55 = norspc_41.z; + o_40.ShadowOffset = tmpvar_55; + mediump vec4 tmpvar_56; + tmpvar_56 = UnpackNormal (norspc_41); + mediump vec3 tmpvar_57; + tmpvar_57 = tmpvar_56.xyz; + mediump vec3 tmpvar_58; + tmpvar_58 = tmpvar_57; + o_40.Normal = tmpvar_58; +} + +mediump vec4 LightingTreeLeaf ( + in LeafSurfaceOutput s_59, + in mediump vec3 lightDir_60, + in mediump vec3 viewDir_61, + in mediump float atten_62 +) +{ + mediump vec4 c_63; + mediump vec3 translucencyColor_64; + mediump float backContrib_65; + mediump float spec_66; + mediump float nh_67; + mediump float nl_68; + mediump vec3 h_69; + mediump vec3 tmpvar_70; + tmpvar_70 = normalize ((lightDir_60 + viewDir_61)); + mediump vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + h_69 = tmpvar_71; + mediump float tmpvar_72; + tmpvar_72 = dot (s_59.Normal, lightDir_60); + mediump float tmpvar_73; + tmpvar_73 = tmpvar_72; + nl_68 = tmpvar_73; + mediump float tmpvar_74; + tmpvar_74 = dot (s_59.Normal, h_69); + mediump float tmpvar_75; + tmpvar_75 = max (0.0, tmpvar_74); + mediump float tmpvar_76; + tmpvar_76 = tmpvar_75; + nh_67 = tmpvar_76; + mediump float tmpvar_77; + tmpvar_77 = pow (nh_67, (s_59.Specular * 128.0)); + mediump float tmpvar_78; + tmpvar_78 = (tmpvar_77 * s_59.Gloss); + spec_66 = tmpvar_78; + mediump float tmpvar_79; + tmpvar_79 = dot (viewDir_61, -(lightDir_60)); + float tmpvar_80; + tmpvar_80 = xll_saturate (tmpvar_79); + float tmpvar_81; + tmpvar_81 = tmpvar_80; + backContrib_65 = tmpvar_81; + float tmpvar_82; + tmpvar_82 = xll_saturate (-(nl_68)); + mediump float tmpvar_83; + tmpvar_83 = mix (tmpvar_82, backContrib_65, _TranslucencyViewDependency); + mediump float tmpvar_84; + tmpvar_84 = tmpvar_83; + backContrib_65 = tmpvar_84; + mediump vec3 tmpvar_85; + tmpvar_85 = ((backContrib_65 * s_59.Translucency) * _TranslucencyColor); + translucencyColor_64 = tmpvar_85; + mediump float tmpvar_86; + tmpvar_86 = max (0.0, ((nl_68 * 0.6) + 0.4)); + mediump float tmpvar_87; + tmpvar_87 = tmpvar_86; + nl_68 = tmpvar_87; + mediump vec3 tmpvar_88; + tmpvar_88 = (s_59.Albedo * ((translucencyColor_64 * 2.0) + nl_68)); + c_63.xyz = tmpvar_88.xyz.xyz; + highp vec3 tmpvar_89; + tmpvar_89 = ((c_63.xyz * _LightColor0.xyz) + spec_66); + c_63.xyz = tmpvar_89.xyz.xyz; + mediump float tmpvar_90; + tmpvar_90 = mix (2.0, (atten_62 * 2.0), _ShadowStrength); + mediump vec3 tmpvar_91; + tmpvar_91 = (c_63.xyz * tmpvar_90); + c_63.xyz = tmpvar_91.xyz.xyz; + return c_63; +} + +mediump vec4 xlat_main ( + in v2f_surf IN_92 +) +{ + mediump vec4 c_93; + mediump vec3 lightDir_94; + LeafSurfaceOutput o_95; + Input surfIN_96; + highp vec2 tmpvar_97; + tmpvar_97 = IN_92.hip_pack0.xy; + surfIN_96.uv_MainTex = tmpvar_97; + highp vec4 tmpvar_98; + tmpvar_98 = IN_92.lop_color; + surfIN_96.color = tmpvar_98; + vec3 tmpvar_99; + tmpvar_99 = vec3(0.0, 0.0, 0.0); + o_95.Albedo = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = vec3(0.0, 0.0, 0.0); + o_95.Emission = tmpvar_100; + float tmpvar_101; + tmpvar_101 = 0.0; + o_95.Specular = tmpvar_101; + float tmpvar_102; + tmpvar_102 = 0.0; + o_95.Alpha = tmpvar_102; + surf (surfIN_96, o_95); + xll_clip ((o_95.Alpha - _Cutoff)); + highp vec3 tmpvar_103; + tmpvar_103 = IN_92.lightDir; + lightDir_94 = tmpvar_103; + highp vec3 tmpvar_104; + tmpvar_104 = IN_92.viewDir.xyz; + highp vec3 tmpvar_105; + tmpvar_105 = normalize (tmpvar_104); + lowp vec4 tmpvar_106; + tmpvar_106 = texture2D (_LightTexture0, IN_92._LightCoord); + mediump vec4 tmpvar_107; + tmpvar_107 = LightingTreeLeaf (o_95, lightDir_94, tmpvar_105, (tmpvar_106.w * 1.0)); + mediump vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + c_93 = tmpvar_108; + mediump float tmpvar_109; + tmpvar_109 = o_95.Alpha; + c_93.w = vec4(tmpvar_109).w; + return c_93; +} + +void main () +{ + v2f_surf xlt_IN_110; + mediump vec4 xl_retval_111; + vec4 tmpvar_112; + tmpvar_112 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_110.pos = tmpvar_112; + highp vec2 tmpvar_113; + tmpvar_113 = xlv_TEXCOORD0.xy; + highp vec2 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_IN_110.hip_pack0 = tmpvar_114; + highp vec4 tmpvar_115; + tmpvar_115 = xlv_COLOR0.xyzw; + highp vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_IN_110.lop_color = tmpvar_116; + highp vec3 tmpvar_117; + tmpvar_117 = xlv_TEXCOORD1.xyz; + highp vec3 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_IN_110.lightDir = tmpvar_118; + highp vec3 tmpvar_119; + tmpvar_119 = xlv_TEXCOORD2.xyz; + highp vec3 tmpvar_120; + tmpvar_120 = tmpvar_119; + xlt_IN_110.viewDir = tmpvar_120; + highp vec2 tmpvar_121; + tmpvar_121 = xlv_TEXCOORD3.xy; + highp vec2 tmpvar_122; + tmpvar_122 = tmpvar_121; + xlt_IN_110._LightCoord = tmpvar_122; + mediump vec4 tmpvar_123; + tmpvar_123 = xlat_main (xlt_IN_110); + mediump vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + xl_retval_111 = tmpvar_124; + mediump vec4 tmpvar_125; + tmpvar_125 = xl_retval_111.xyzw; + mediump vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_FragData[0] = tmpvar_126; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-out.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-out.txt new file mode 100644 index 000000000..815059631 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-out.txt @@ -0,0 +1,45 @@ +varying vec2 xlv_TEXCOORD3; +varying vec3 xlv_TEXCOORD2; +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_COLOR0; +varying vec2 xlv_TEXCOORD0; +uniform float _TranslucencyViewDependency; +uniform sampler2D _TranslucencyMap; +uniform vec3 _TranslucencyColor; +uniform float _ShadowStrength; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpSpecMap; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, xlv_TEXCOORD0); + vec4 tmpvar_3; + tmpvar_3 = texture2D (_TranslucencyMap, xlv_TEXCOORD0); + vec4 tmpvar_4; + tmpvar_4 = texture2D (_BumpSpecMap, xlv_TEXCOORD0); + vec4 normal_5; + normal_5.xy = ((tmpvar_4.wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + float x_6; + x_6 = (tmpvar_2.w - _Cutoff); + if ((x_6 < 0.0)) { + discard; + }; + vec3 tmpvar_7; + tmpvar_7 = normalize(xlv_TEXCOORD2); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = dot (normal_5.xyz, xlv_TEXCOORD1); + c_8.xyz = (((tmpvar_2.xyz * _Color.xyz) * xlv_COLOR0.w) * ((((mix (clamp (-(tmpvar_9), 0.0, 1.0), clamp (dot (tmpvar_7, -(xlv_TEXCOORD1)), 0.0, 1.0), _TranslucencyViewDependency) * tmpvar_3.z) * _TranslucencyColor) * 2.0) + max (0.0, ((tmpvar_9 * 0.6) + 0.4)))); + c_8.xyz = ((c_8.xyz * _LightColor0.xyz) + (pow (max (0.0, dot (normal_5.xyz, normalize((xlv_TEXCOORD1 + tmpvar_7)))), (tmpvar_4.x * 128.0)) * (tmpvar_3.w * _Color.x))); + c_8.xyz = (c_8.xyz * mix (2.0, (texture2D (_LightTexture0, xlv_TEXCOORD3).w * 2.0), _ShadowStrength)); + c_1.xyz = c_8.xyz; + c_1.w = tmpvar_2.w; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-outES.txt new file mode 100644 index 000000000..6502ef51b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleaf-outES.txt @@ -0,0 +1,71 @@ +varying highp vec2 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_COLOR0; +varying highp vec2 xlv_TEXCOORD0; +uniform mediump float _TranslucencyViewDependency; +uniform sampler2D _TranslucencyMap; +uniform mediump vec3 _TranslucencyColor; +uniform mediump float _ShadowStrength; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform highp vec4 _LightColor0; +uniform highp float _Cutoff; +uniform highp vec4 _Color; +uniform sampler2D _BumpSpecMap; +void main () +{ + mediump vec4 c_1; + mediump vec3 lightDir_2; + mediump vec3 tmpvar_3; + mediump float tmpvar_4; + mediump vec4 norspc_5; + mediump vec4 trngls_6; + mediump vec4 c_7; + lowp vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, xlv_TEXCOORD0); + c_7 = tmpvar_8; + highp vec3 tmpvar_9; + tmpvar_9 = ((c_7.xyz * _Color.xyz) * xlv_COLOR0.w); + tmpvar_3 = tmpvar_9; + lowp vec4 tmpvar_10; + tmpvar_10 = texture2D (_TranslucencyMap, xlv_TEXCOORD0); + trngls_6 = tmpvar_10; + highp float tmpvar_11; + tmpvar_11 = (trngls_6.w * _Color.x); + tmpvar_4 = tmpvar_11; + lowp vec4 tmpvar_12; + tmpvar_12 = texture2D (_BumpSpecMap, xlv_TEXCOORD0); + norspc_5 = tmpvar_12; + mediump vec4 normal_13; + normal_13.xy = ((norspc_5.wy * 2.0) - 1.0); + normal_13.z = sqrt(((1.0 - (normal_13.x * normal_13.x)) - (normal_13.y * normal_13.y))); + highp float x_14; + x_14 = (c_7.w - _Cutoff); + if ((x_14 < 0.0)) { + discard; + }; + lightDir_2 = xlv_TEXCOORD1; + highp vec3 tmpvar_15; + tmpvar_15 = normalize(xlv_TEXCOORD2); + lowp vec4 tmpvar_16; + tmpvar_16 = texture2D (_LightTexture0, xlv_TEXCOORD3); + mediump vec3 viewDir_17; + viewDir_17 = tmpvar_15; + mediump float atten_18; + atten_18 = tmpvar_16.w; + mediump vec4 c_19; + mediump float tmpvar_20; + tmpvar_20 = dot (normal_13.xyz, lightDir_2); + mediump float tmpvar_21; + tmpvar_21 = (pow (max (0.0, dot (normal_13.xyz, normalize((lightDir_2 + viewDir_17)))), (norspc_5.x * 128.0)) * tmpvar_4); + c_19.xyz = (tmpvar_3 * ((((mix (clamp (-(tmpvar_20), 0.0, 1.0), clamp (dot (viewDir_17, -(lightDir_2)), 0.0, 1.0), _TranslucencyViewDependency) * trngls_6.z) * _TranslucencyColor) * 2.0) + max (0.0, ((tmpvar_20 * 0.6) + 0.4)))); + highp vec3 tmpvar_22; + tmpvar_22 = ((c_19.xyz * _LightColor0.xyz) + tmpvar_21); + c_19.xyz = tmpvar_22; + c_19.xyz = (c_19.xyz * mix (2.0, (atten_18 * 2.0), _ShadowStrength)); + c_1.xyz = c_19.xyz; + c_1.w = c_7.w; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-inES.txt new file mode 100644 index 000000000..0f338bdf2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-inES.txt @@ -0,0 +1,81 @@ +void xll_clip(float x) { + if ( x<0.0 ) discard; +} +#line 11 +struct v2f { + highp vec4 pos; + highp vec2 uv; + highp vec3 color; + highp vec3 backContrib; + highp vec3 nl; + highp vec3 nh; +}; +uniform lowp vec4 UNITY_LIGHTMODEL_AMBIENT; +uniform sampler2D _BumpSpecMap; +uniform lowp float _Cutoff; +uniform sampler2D _MainTex; +uniform lowp vec4 _SpecColor; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform lowp vec3 _TranslucencyColor; +uniform sampler2D _TranslucencyMap; +lowp vec4 xlat_main( in v2f i ); +#line 30 +lowp vec4 xlat_main( in v2f i ) { + lowp vec4 col; + lowp vec3 albedo; + mediump float specular; + lowp vec4 trngls; + mediump float gloss; + mediump vec3 light; + mediump vec3 backContribs; + highp int j = 0; + mediump vec3 lightColor; + mediump vec3 translucencyColor; + mediump float nl; + mediump float nh; + mediump float spec; + lowp vec4 c; + col = texture2D( _MainTex, i.uv); + xll_clip((col.w - _Cutoff)); + #line 35 + albedo = (col.xyz * i.color); + specular = (texture2D( _BumpSpecMap, i.uv).x * 128.000); + #line 39 + trngls = texture2D( _TranslucencyMap, i.uv); + gloss = trngls.w; + light = (vec3( UNITY_LIGHTMODEL_AMBIENT) * albedo); + #line 44 + backContribs = (i.backContrib * trngls.z); + for ( ; (j < 3); (j++)) { + #line 48 + lightColor = _TerrainTreeLightColors[j].xyz; + translucencyColor = (backContribs[j] * _TranslucencyColor); + nl = i.nl[j]; + #line 52 + nh = i.nh[j]; + spec = (pow( nh, specular) * gloss); + light += (((albedo * (translucencyColor + nl)) + (_SpecColor.xyz * spec)) * lightColor); + } + #line 58 + c.xyz = (light * 2.00000); + c.w = 1.00000; + return c; +} +varying highp vec4 xlv_SV_POSITION; +varying highp vec2 xlv_TEXCOORD0; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD4; +void main() { + lowp vec4 xl_retval; + v2f xlt_i; + xlt_i.pos = vec4( xlv_SV_POSITION); + xlt_i.uv = vec2( xlv_TEXCOORD0); + xlt_i.color = vec3( xlv_TEXCOORD1); + xlt_i.backContrib = vec3( xlv_TEXCOORD2); + xlt_i.nl = vec3( xlv_TEXCOORD3); + xlt_i.nh = vec3( xlv_TEXCOORD4); + xl_retval = xlat_main( xlt_i); + gl_FragData[0] = vec4( xl_retval); +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-irES.txt new file mode 100644 index 000000000..ec0b08733 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-irES.txt @@ -0,0 +1,167 @@ +struct v2f { + highp vec4 pos; + highp vec2 uv; + highp vec3 color; + highp vec3 backContrib; + highp vec3 nl; + highp vec3 nh; +}; +varying highp vec3 xlv_TEXCOORD4; +varying highp vec3 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +varying highp vec4 xlv_SV_POSITION; +uniform sampler2D _TranslucencyMap; +uniform lowp vec3 _TranslucencyColor; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform lowp vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform lowp float _Cutoff; +uniform sampler2D _BumpSpecMap; +uniform lowp vec4 UNITY_LIGHTMODEL_AMBIENT; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +lowp vec4 xlat_main ( + in v2f i_2 +) +{ + lowp vec4 c_3; + mediump float spec_4; + mediump float nh_5; + mediump float nl_6; + mediump vec3 translucencyColor_7; + mediump vec3 lightColor_8; + int j_9; + mediump vec3 backContribs_10; + mediump vec3 light_11; + mediump float gloss_12; + lowp vec4 trngls_13; + mediump float specular_14; + lowp vec3 albedo_15; + lowp vec4 col_16; + int tmpvar_17; + tmpvar_17 = 0; + j_9 = tmpvar_17; + lowp vec4 tmpvar_18; + tmpvar_18 = texture2D (_MainTex, i_2.uv); + lowp vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + col_16 = tmpvar_19; + xll_clip ((col_16.w - _Cutoff)); + highp vec3 tmpvar_20; + tmpvar_20 = (col_16.xyz * i_2.color); + albedo_15 = tmpvar_20; + lowp vec4 tmpvar_21; + tmpvar_21 = texture2D (_BumpSpecMap, i_2.uv); + lowp float tmpvar_22; + tmpvar_22 = (tmpvar_21.x * 128.0); + specular_14 = tmpvar_22; + lowp vec4 tmpvar_23; + tmpvar_23 = texture2D (_TranslucencyMap, i_2.uv); + lowp vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + trngls_13 = tmpvar_24; + lowp float tmpvar_25; + tmpvar_25 = trngls_13.w; + gloss_12 = tmpvar_25; + lowp vec3 tmpvar_26; + tmpvar_26 = UNITY_LIGHTMODEL_AMBIENT.xyz; + lowp vec3 tmpvar_27; + tmpvar_27 = (tmpvar_26 * albedo_15); + light_11 = tmpvar_27; + highp vec3 tmpvar_28; + tmpvar_28 = (i_2.backContrib * trngls_13.z); + backContribs_10 = tmpvar_28; + while (true) { + if (!((j_9 < 3))) { + break; + }; + highp vec3 tmpvar_29; + tmpvar_29 = _TerrainTreeLightColors[j_9].xyz; + lightColor_8 = tmpvar_29; + mediump vec3 tmpvar_30; + tmpvar_30 = (backContribs_10[j_9] * _TranslucencyColor); + translucencyColor_7 = tmpvar_30; + highp float tmpvar_31; + tmpvar_31 = i_2.nl[j_9]; + nl_6 = tmpvar_31; + highp float tmpvar_32; + tmpvar_32 = i_2.nh[j_9]; + nh_5 = tmpvar_32; + mediump float tmpvar_33; + tmpvar_33 = pow (nh_5, specular_14); + mediump float tmpvar_34; + tmpvar_34 = (tmpvar_33 * gloss_12); + spec_4 = tmpvar_34; + mediump vec3 tmpvar_35; + tmpvar_35 = (light_11 + (((albedo_15 * (translucencyColor_7 + nl_6)) + (_SpecColor.xyz * spec_4)) * lightColor_8)); + light_11 = tmpvar_35; + int _post_incdec_tmp_36; + _post_incdec_tmp_36 = j_9; + int tmpvar_37; + tmpvar_37 = (j_9 + 1); + j_9 = tmpvar_37; + }; + mediump vec3 tmpvar_38; + tmpvar_38 = (light_11 * 2.0); + c_3.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = 1.0; + c_3.w = vec4(tmpvar_39).w; + return c_3; +} + +void main () +{ + v2f xlt_i_40; + lowp vec4 xl_retval_41; + highp vec4 tmpvar_42; + tmpvar_42 = xlv_SV_POSITION.xyzw; + highp vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_i_40.pos = tmpvar_43; + highp vec2 tmpvar_44; + tmpvar_44 = xlv_TEXCOORD0.xy; + highp vec2 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_i_40.uv = tmpvar_45; + highp vec3 tmpvar_46; + tmpvar_46 = xlv_TEXCOORD1.xyz; + highp vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_i_40.color = tmpvar_47; + highp vec3 tmpvar_48; + tmpvar_48 = xlv_TEXCOORD2.xyz; + highp vec3 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_i_40.backContrib = tmpvar_49; + highp vec3 tmpvar_50; + tmpvar_50 = xlv_TEXCOORD3.xyz; + highp vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_i_40.nl = tmpvar_51; + highp vec3 tmpvar_52; + tmpvar_52 = xlv_TEXCOORD4.xyz; + highp vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_i_40.nh = tmpvar_53; + lowp vec4 tmpvar_54; + tmpvar_54 = xlat_main (xlt_i_40); + lowp vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xl_retval_41 = tmpvar_55; + lowp vec4 tmpvar_56; + tmpvar_56 = xl_retval_41.xyzw; + lowp vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_FragData[0] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES.txt new file mode 100644 index 000000000..7421628de --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES.txt @@ -0,0 +1,85 @@ +varying highp vec3 xlv_TEXCOORD4; +varying highp vec3 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec2 xlv_TEXCOORD0; +uniform sampler2D _TranslucencyMap; +uniform lowp vec3 _TranslucencyColor; +uniform highp vec4 _TerrainTreeLightColors[4]; +uniform lowp vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform lowp float _Cutoff; +uniform sampler2D _BumpSpecMap; +uniform lowp vec4 UNITY_LIGHTMODEL_AMBIENT; +void main () +{ + lowp vec4 c_1; + mediump float nh_2; + mediump float nl_3; + mediump vec3 lightColor_4; + mediump vec3 backContribs_5; + mediump vec3 light_6; + mediump float gloss_7; + mediump float specular_8; + lowp vec3 albedo_9; + lowp vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, xlv_TEXCOORD0); + lowp float x_11; + x_11 = (tmpvar_10.w - _Cutoff); + if ((x_11 < 0.0)) { + discard; + }; + highp vec3 tmpvar_12; + tmpvar_12 = (tmpvar_10.xyz * xlv_TEXCOORD1); + albedo_9 = tmpvar_12; + lowp float tmpvar_13; + tmpvar_13 = (texture2D (_BumpSpecMap, xlv_TEXCOORD0).x * 128.0); + specular_8 = tmpvar_13; + lowp vec4 tmpvar_14; + tmpvar_14 = texture2D (_TranslucencyMap, xlv_TEXCOORD0); + lowp float tmpvar_15; + tmpvar_15 = tmpvar_14.w; + gloss_7 = tmpvar_15; + lowp vec3 tmpvar_16; + tmpvar_16 = (UNITY_LIGHTMODEL_AMBIENT.xyz * albedo_9); + light_6 = tmpvar_16; + highp vec3 tmpvar_17; + tmpvar_17 = (xlv_TEXCOORD2 * tmpvar_14.z); + backContribs_5 = tmpvar_17; + highp vec3 tmpvar_18; + tmpvar_18 = _TerrainTreeLightColors[0].xyz; + lightColor_4 = tmpvar_18; + highp float tmpvar_19; + tmpvar_19 = xlv_TEXCOORD3.x; + nl_3 = tmpvar_19; + highp float tmpvar_20; + tmpvar_20 = xlv_TEXCOORD4.x; + nh_2 = tmpvar_20; + light_6 = (light_6 + (((albedo_9 * ((backContribs_5.x * _TranslucencyColor) + nl_3)) + (_SpecColor.xyz * (pow (nh_2, specular_8) * gloss_7))) * lightColor_4)); + highp vec3 tmpvar_21; + tmpvar_21 = _TerrainTreeLightColors[1].xyz; + lightColor_4 = tmpvar_21; + highp float tmpvar_22; + tmpvar_22 = xlv_TEXCOORD3.y; + nl_3 = tmpvar_22; + highp float tmpvar_23; + tmpvar_23 = xlv_TEXCOORD4.y; + nh_2 = tmpvar_23; + light_6 = (light_6 + (((albedo_9 * ((backContribs_5.y * _TranslucencyColor) + nl_3)) + (_SpecColor.xyz * (pow (nh_2, specular_8) * gloss_7))) * lightColor_4)); + highp vec3 tmpvar_24; + tmpvar_24 = _TerrainTreeLightColors[2].xyz; + lightColor_4 = tmpvar_24; + highp float tmpvar_25; + tmpvar_25 = xlv_TEXCOORD3.z; + nl_3 = tmpvar_25; + highp float tmpvar_26; + tmpvar_26 = xlv_TEXCOORD4.z; + nh_2 = tmpvar_26; + light_6 = (light_6 + (((albedo_9 * ((backContribs_5.z * _TranslucencyColor) + nl_3)) + (_SpecColor.xyz * (pow (nh_2, specular_8) * gloss_7))) * lightColor_4)); + mediump vec3 tmpvar_27; + tmpvar_27 = (light_6 * 2.0); + c_1.xyz = tmpvar_27; + c_1.w = 1.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..4e2304d1b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-ir.txt @@ -0,0 +1,159 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +uniform sampler2D _MainTex; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * _Color); + c_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = c_8.xyz; + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = c_8.w; + o_7.Alpha = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_14; + tmpvar_14 = UnpackNormal (tmpvar_13); + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14.xyz; + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_7.Normal = tmpvar_16; +} + +vec4 frag_surf ( + in v2f_surf IN_17 +) +{ + vec4 res_18; + vec3 viewN_19; + SurfaceOutput o_20; + Input surfIN_21; + vec2 tmpvar_22; + tmpvar_22 = IN_17.hip_pack0.xy; + surfIN_21.uv_BumpMap = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = vec3(0.0, 0.0, 0.0); + o_20.Albedo = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = vec3(0.0, 0.0, 0.0); + o_20.Emission = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_20.Specular = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_20.Alpha = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_20.Gloss = tmpvar_27; + surf (surfIN_21, o_20); + float tmpvar_28; + tmpvar_28 = dot (IN_17.TtoV0, o_20.Normal); + float tmpvar_29; + tmpvar_29 = tmpvar_28; + viewN_19.x = tmpvar_29; + float tmpvar_30; + tmpvar_30 = dot (IN_17.TtoV1, o_20.Normal); + float tmpvar_31; + tmpvar_31 = tmpvar_30; + viewN_19.y = vec2(tmpvar_31).y; + float tmpvar_32; + tmpvar_32 = dot (IN_17.TtoV2, o_20.Normal); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + viewN_19.z = vec3(tmpvar_33).z; + vec3 tmpvar_34; + tmpvar_34 = viewN_19; + o_20.Normal = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = ((o_20.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_18.xyz = tmpvar_35.xyz.xyz; + float tmpvar_36; + tmpvar_36 = o_20.Specular; + res_18.w = vec4(tmpvar_36).w; + return res_18; +} + +void main () +{ + v2f_surf xlt_IN_37; + vec4 xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_37.pos = tmpvar_39; + vec2 tmpvar_40; + tmpvar_40 = gl_TexCoord[0].xy; + vec2 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_IN_37.hip_pack0 = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = gl_TexCoord[1].xyz; + vec3 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_IN_37.TtoV0 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = gl_TexCoord[2].xyz; + vec3 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_37.TtoV1 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_TexCoord[3].xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_37.TtoV2 = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = frag_surf (xlt_IN_37); + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xl_retval_38 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = xl_retval_38.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_FragData[0] = tmpvar_51; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-out.txt new file mode 100644 index 000000000..7a6802800 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _BumpMap; +void main () +{ + vec4 res_1; + vec3 viewN_2; + vec4 normal_3; + normal_3.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); + normal_3.z = sqrt(((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + viewN_2.x = dot (gl_TexCoord[1].xyz, normal_3.xyz); + viewN_2.y = dot (gl_TexCoord[2].xyz, normal_3.xyz); + viewN_2.z = dot (gl_TexCoord[3].xyz, normal_3.xyz); + res_1.xyz = ((viewN_2 * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..8b4dc7cf7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-ir.txt @@ -0,0 +1,163 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * _Color); + c_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = c_8.xyz; + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = c_8.w; + o_7.Alpha = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_14; + tmpvar_14 = UnpackNormal (tmpvar_13); + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14.xyz; + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_7.Normal = tmpvar_16; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_17, + in vec4 light_18 +) +{ + vec4 c_19; + vec3 tmpvar_20; + tmpvar_20 = (s_17.Albedo * light_18.xyz); + c_19.xyz = tmpvar_20.xyz.xyz; + float tmpvar_21; + tmpvar_21 = s_17.Alpha; + c_19.w = vec4(tmpvar_21).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_22 +) +{ + vec4 col_23; + vec4 light_24; + SurfaceOutput o_25; + Input surfIN_26; + vec2 tmpvar_27; + tmpvar_27 = IN_22.hip_pack0.xy; + surfIN_26.uv_MainTex = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_25.Albedo = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = vec3(0.0, 0.0, 0.0); + o_25.Emission = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_25.Specular = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_25.Alpha = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_25.Gloss = tmpvar_32; + surf (surfIN_26, o_25); + vec4 tmpvar_33; + tmpvar_33 = texture2DProj (_LightBuffer, IN_22.hip_screen); + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + light_24 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = log2 (light_24); + vec4 tmpvar_36; + tmpvar_36 = -(tmpvar_35); + light_24 = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = (light_24.xyz + unity_Ambient.xyz); + light_24.xyz = tmpvar_37.xyz.xyz; + vec4 tmpvar_38; + tmpvar_38 = LightingLambert_PrePass (o_25, light_24); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + col_23 = tmpvar_39; + return col_23; +} + +void main () +{ + v2f_surf xlt_IN_40; + vec4 xl_retval_41; + vec4 tmpvar_42; + tmpvar_42 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_40.pos = tmpvar_42; + float tmpvar_43; + tmpvar_43 = xlv_FOG.x; + xlt_IN_40.fog = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = gl_TexCoord[0].xy; + vec2 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_40.hip_pack0 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = gl_TexCoord[1].xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_40.hip_screen = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = frag_surf (xlt_IN_40); + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xl_retval_41 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = xl_retval_41.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_FragData[0] = tmpvar_51; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-out.txt new file mode 100644 index 000000000..68573698f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Diffuse1-out.txt @@ -0,0 +1,24 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 light_1; + vec2 tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_1.w = tmpvar_5.w; + light_1.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); + vec4 c_6; + c_6.xyz = (tmpvar_3.xyz * light_1.xyz); + c_6.w = tmpvar_3.w; + gl_FragData[0] = c_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-ir.txt new file mode 100644 index 000000000..512df207b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-ir.txt @@ -0,0 +1,234 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 vlight; + vec4 _ShadowCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +float unitySampleShadow ( + in vec4 shadowCoord_1 +) +{ + float shadow_2; + vec4 tmpvar_3; + tmpvar_3 = texture2DProj (_ShadowMapTexture, shadowCoord_1); + float tmpvar_4; + tmpvar_4 = tmpvar_3.x; + shadow_2 = tmpvar_4; + return shadow_2; +} + +vec4 UnpackNormal ( + in vec4 packednormal_5 +) +{ + vec4 normal_6; + vec2 tmpvar_7; + tmpvar_7 = ((packednormal_5.wy * 2.0) - 1.0); + normal_6.xy = tmpvar_7.xy.xy; + float tmpvar_8; + tmpvar_8 = sqrt (((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + float tmpvar_9; + tmpvar_9 = tmpvar_8; + normal_6.z = vec3(tmpvar_9).z; + return normal_6; +} + +void surf ( + in Input IN_10, + inout SurfaceOutput o_11 +) +{ + vec4 tex_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_MainTex, IN_10.uv_MainTex); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + tex_12 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (tex_12.xyz * _Color.xyz); + o_11.Albedo = tmpvar_15; + float tmpvar_16; + tmpvar_16 = tex_12.w; + o_11.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = (tex_12.w * _Color.w); + o_11.Alpha = tmpvar_17; + float tmpvar_18; + tmpvar_18 = _Shininess; + o_11.Specular = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_BumpMap, IN_10.uv_BumpMap); + vec4 tmpvar_20; + tmpvar_20 = UnpackNormal (tmpvar_19); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20.xyz; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_11.Normal = tmpvar_22; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_23, + in vec3 lightDir_24, + in vec3 viewDir_25, + in float atten_26 +) +{ + vec4 c_27; + float spec_28; + float nh_29; + float diff_30; + vec3 h_31; + vec3 tmpvar_32; + tmpvar_32 = normalize ((lightDir_24 + viewDir_25)); + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + h_31 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = dot (s_23.Normal, lightDir_24); + float tmpvar_35; + tmpvar_35 = max (0.0, tmpvar_34); + float tmpvar_36; + tmpvar_36 = tmpvar_35; + diff_30 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = dot (s_23.Normal, h_31); + float tmpvar_38; + tmpvar_38 = max (0.0, tmpvar_37); + float tmpvar_39; + tmpvar_39 = tmpvar_38; + nh_29 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = pow (nh_29, (s_23.Specular * 128.0)); + float tmpvar_41; + tmpvar_41 = (tmpvar_40 * s_23.Gloss); + spec_28 = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = ((((s_23.Albedo * _LightColor0.xyz) * diff_30) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_28)) * (atten_26 * 2.0)); + c_27.xyz = tmpvar_42.xyz.xyz; + float tmpvar_43; + tmpvar_43 = (s_23.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_28) * atten_26)); + c_27.w = vec4(tmpvar_43).w; + return c_27; +} + +vec4 frag_surf ( + in v2f_surf IN_44 +) +{ + vec4 c_45; + float atten_46; + SurfaceOutput o_47; + Input surfIN_48; + vec2 tmpvar_49; + tmpvar_49 = IN_44.hip_pack0.xy; + surfIN_48.uv_MainTex = tmpvar_49; + vec2 tmpvar_50; + tmpvar_50 = IN_44.hip_pack0.zw; + surfIN_48.uv_BumpMap = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + o_47.Albedo = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = vec3(0.0, 0.0, 0.0); + o_47.Emission = tmpvar_52; + float tmpvar_53; + tmpvar_53 = 0.0; + o_47.Specular = tmpvar_53; + float tmpvar_54; + tmpvar_54 = 0.0; + o_47.Alpha = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 0.0; + o_47.Gloss = tmpvar_55; + surf (surfIN_48, o_47); + float tmpvar_56; + tmpvar_56 = unitySampleShadow (IN_44._ShadowCoord); + float tmpvar_57; + tmpvar_57 = tmpvar_56; + atten_46 = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = IN_44.viewDir.xyz; + vec3 tmpvar_59; + tmpvar_59 = normalize (tmpvar_58); + vec4 tmpvar_60; + tmpvar_60 = LightingBlinnPhong (o_47, IN_44.lightDir, tmpvar_59, atten_46); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + c_45 = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = (c_45.xyz + (o_47.Albedo * IN_44.vlight)); + c_45.xyz = tmpvar_62.xyz.xyz; + return c_45; +} + +void main () +{ + v2f_surf xlt_IN_63; + vec4 xl_retval_64; + vec4 tmpvar_65; + tmpvar_65 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_63.pos = tmpvar_65; + float tmpvar_66; + tmpvar_66 = xlv_FOG.x; + xlt_IN_63.fog = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = gl_TexCoord[0].xyzw; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_IN_63.hip_pack0 = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = gl_TexCoord[1].xyz; + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_63.viewDir = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = gl_TexCoord[2].xyz; + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_IN_63.lightDir = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = gl_TexCoord[3].xyz; + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_IN_63.vlight = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = gl_TexCoord[4].xyzw; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_IN_63._ShadowCoord = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = frag_surf (xlt_IN_63); + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xl_retval_64 = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = xl_retval_64.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + gl_FragData[0] = tmpvar_80; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-out.txt new file mode 100644 index 000000000..e179df7d0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular-out.txt @@ -0,0 +1,33 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + vec3 tmpvar_5; + tmpvar_5 = (tmpvar_4.xyz * _Color.xyz); + vec4 normal_6; + normal_6.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_6.z = sqrt(((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + vec4 tmpvar_7; + tmpvar_7 = texture2DProj (_ShadowMapTexture, gl_TexCoord[4]); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (pow (max (0.0, dot (normal_6.xyz, normalize((tmpvar_2 + normalize(gl_TexCoord[1].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_8.xyz = ((((tmpvar_5 * _LightColor0.xyz) * max (0.0, dot (normal_6.xyz, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * (tmpvar_7.x * 2.0)); + c_8.w = ((tmpvar_4.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_9) * tmpvar_7.x)); + c_3.w = c_8.w; + c_3.xyz = (c_8.xyz + (tmpvar_5 * gl_TexCoord[3].xyz)); + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-ir.txt new file mode 100644 index 000000000..c2fe16f98 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-ir.txt @@ -0,0 +1,215 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 viewDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 tex_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + tex_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (tex_8.xyz * _Color.xyz); + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = tex_8.w; + o_7.Gloss = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (tex_8.w * _Color.w); + o_7.Alpha = tmpvar_13; + float tmpvar_14; + tmpvar_14 = _Shininess; + o_7.Specular = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_16; + tmpvar_16 = UnpackNormal (tmpvar_15); + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16.xyz; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + o_7.Normal = tmpvar_18; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_19, + in vec3 lightDir_20, + in vec3 viewDir_21, + in float atten_22 +) +{ + vec4 c_23; + float spec_24; + float nh_25; + float diff_26; + vec3 h_27; + vec3 tmpvar_28; + tmpvar_28 = normalize ((lightDir_20 + viewDir_21)); + vec3 tmpvar_29; + tmpvar_29 = tmpvar_28; + h_27 = tmpvar_29; + float tmpvar_30; + tmpvar_30 = dot (s_19.Normal, lightDir_20); + float tmpvar_31; + tmpvar_31 = max (0.0, tmpvar_30); + float tmpvar_32; + tmpvar_32 = tmpvar_31; + diff_26 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = dot (s_19.Normal, h_27); + float tmpvar_34; + tmpvar_34 = max (0.0, tmpvar_33); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + nh_25 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = pow (nh_25, (s_19.Specular * 128.0)); + float tmpvar_37; + tmpvar_37 = (tmpvar_36 * s_19.Gloss); + spec_24 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = ((((s_19.Albedo * _LightColor0.xyz) * diff_26) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_24)) * (atten_22 * 2.0)); + c_23.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = (s_19.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_24) * atten_22)); + c_23.w = vec4(tmpvar_39).w; + return c_23; +} + +vec4 frag_surf ( + in v2f_surf IN_40 +) +{ + vec4 c_41; + vec3 lightDir_42; + SurfaceOutput o_43; + Input surfIN_44; + vec2 tmpvar_45; + tmpvar_45 = IN_40.hip_pack0.xy; + surfIN_44.uv_MainTex = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = IN_40.hip_pack0.zw; + surfIN_44.uv_BumpMap = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = vec3(0.0, 0.0, 0.0); + o_43.Albedo = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_43.Emission = tmpvar_48; + float tmpvar_49; + tmpvar_49 = 0.0; + o_43.Specular = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_43.Alpha = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + o_43.Gloss = tmpvar_51; + surf (surfIN_44, o_43); + vec3 tmpvar_52; + tmpvar_52 = IN_40.lightDir; + lightDir_42 = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = IN_40.viewDir.xyz; + vec3 tmpvar_54; + tmpvar_54 = normalize (tmpvar_53); + vec4 tmpvar_55; + tmpvar_55 = texture2D (_LightTexture0, IN_40._LightCoord); + vec4 tmpvar_56; + tmpvar_56 = LightingBlinnPhong (o_43, lightDir_42, tmpvar_54, (tmpvar_55.w * 1.0)); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + c_41 = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + c_41.w = vec4(tmpvar_58).w; + return c_41; +} + +void main () +{ + v2f_surf xlt_IN_59; + vec4 xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_59.pos = tmpvar_61; + float tmpvar_62; + tmpvar_62 = xlv_FOG.x; + xlt_IN_59.fog = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = gl_TexCoord[0].xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_IN_59.hip_pack0 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = gl_TexCoord[1].xyz; + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_IN_59.lightDir = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = gl_TexCoord[2].xyz; + vec3 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_IN_59.viewDir = tmpvar_68; + vec2 tmpvar_69; + tmpvar_69 = gl_TexCoord[3].xy; + vec2 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_59._LightCoord = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = frag_surf (xlt_IN_59); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xl_retval_60 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = xl_retval_60.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + gl_FragData[0] = tmpvar_74; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-out.txt new file mode 100644 index 000000000..e08302b46 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular1-out.txt @@ -0,0 +1,31 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + vec4 normal_5; + normal_5.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + float atten_6; + atten_6 = texture2D (_LightTexture0, gl_TexCoord[3].xy).w; + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (pow (max (0.0, dot (normal_5.xyz, normalize((tmpvar_2 + normalize(gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_7.xyz = (((((tmpvar_4.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_5.xyz, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_8)) * (atten_6 * 2.0)); + c_7.w = ((tmpvar_4.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_8) * atten_6)); + c_3.xyz = c_7.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Bumped_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-ir.txt new file mode 100644 index 000000000..ba2eb2586 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-ir.txt @@ -0,0 +1,320 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec4 UnpackNormal ( + in vec4 packednormal_33 +) +{ + vec4 normal_34; + vec2 tmpvar_35; + tmpvar_35 = ((packednormal_33.wy * 2.0) - 1.0); + normal_34.xy = tmpvar_35.xy.xy; + float tmpvar_36; + tmpvar_36 = sqrt (((1.0 - (normal_34.x * normal_34.x)) - (normal_34.y * normal_34.y))); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + normal_34.z = vec3(tmpvar_37).z; + return normal_34; +} + +void surf ( + in Input IN_38, + inout SurfaceOutput o_39 +) +{ + vec4 tex_40; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_MainTex, IN_38.uv_MainTex); + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + tex_40 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = (tex_40.xyz * _Color.xyz); + o_39.Albedo = tmpvar_43; + float tmpvar_44; + tmpvar_44 = tex_40.w; + o_39.Gloss = tmpvar_44; + float tmpvar_45; + tmpvar_45 = (tex_40.w * _Color.w); + o_39.Alpha = tmpvar_45; + float tmpvar_46; + tmpvar_46 = _Shininess; + o_39.Specular = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_BumpMap, IN_38.uv_BumpMap); + vec4 tmpvar_48; + tmpvar_48 = UnpackNormal (tmpvar_47); + vec3 tmpvar_49; + tmpvar_49 = tmpvar_48.xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + o_39.Normal = tmpvar_50; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_51, + in vec4 light_52 +) +{ + vec4 c_53; + float spec_54; + float tmpvar_55; + tmpvar_55 = (light_52.w * s_51.Gloss); + spec_54 = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = ((s_51.Albedo * light_52.xyz) + ((light_52.xyz * _SpecColor.xyz) * spec_54)); + c_53.xyz = tmpvar_56.xyz.xyz; + float tmpvar_57; + tmpvar_57 = (s_51.Alpha + (spec_54 * _SpecColor.w)); + c_53.w = vec4(tmpvar_57).w; + return c_53; +} + +vec3 DecodeLightmap ( + in vec4 color_58 +) +{ + return (2.0 * color_58.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_59 +) +{ + vec4 col_60; + vec3 lm_61; + vec3 lmIndirect_62; + vec3 lmFull_63; + vec4 light_64; + SurfaceOutput o_65; + Input surfIN_66; + vec2 tmpvar_67; + tmpvar_67 = IN_59.hip_pack0.xy; + surfIN_66.uv_MainTex = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = vec3(0.0, 0.0, 0.0); + o_65.Albedo = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = vec3(0.0, 0.0, 0.0); + o_65.Emission = tmpvar_69; + float tmpvar_70; + tmpvar_70 = 0.0; + o_65.Specular = tmpvar_70; + float tmpvar_71; + tmpvar_71 = 0.0; + o_65.Alpha = tmpvar_71; + float tmpvar_72; + tmpvar_72 = 0.0; + o_65.Gloss = tmpvar_72; + surf (surfIN_66, o_65); + vec4 tmpvar_73; + tmpvar_73 = texture2DProj (_LightBuffer, IN_59.hip_screen); + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + light_64 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = log2 (light_64); + vec4 tmpvar_76; + tmpvar_76 = -(tmpvar_75); + light_64 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = texture2D (unity_Lightmap, IN_59.hip_lmapFade.xy); + vec3 tmpvar_78; + tmpvar_78 = DecodeLightmap (tmpvar_77); + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + lmFull_63 = tmpvar_79; + vec4 tmpvar_80; + tmpvar_80 = texture2D (unity_LightmapInd, IN_59.hip_lmapFade.xy); + vec3 tmpvar_81; + tmpvar_81 = DecodeLightmap (tmpvar_80); + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81; + lmIndirect_62 = tmpvar_82; + float tmpvar_83; + tmpvar_83 = xll_saturate (IN_59.hip_lmapFade.z); + vec3 tmpvar_84; + tmpvar_84 = vec3(tmpvar_83); + vec3 tmpvar_85; + tmpvar_85 = mix (lmIndirect_62, lmFull_63, tmpvar_84); + vec3 tmpvar_86; + tmpvar_86 = tmpvar_85; + lm_61 = tmpvar_86; + vec3 tmpvar_87; + tmpvar_87 = (light_64.xyz + lm_61); + light_64.xyz = tmpvar_87.xyz.xyz; + vec4 tmpvar_88; + tmpvar_88 = LightingBlinnPhong_PrePass (o_65, light_64); + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + col_60 = tmpvar_89; + return col_60; +} + +void main () +{ + v2f_surf xlt_IN_90; + vec4 xl_retval_91; + vec4 tmpvar_92; + tmpvar_92 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_90.pos = tmpvar_92; + float tmpvar_93; + tmpvar_93 = xlv_FOG.x; + xlt_IN_90.fog = tmpvar_93; + vec2 tmpvar_94; + tmpvar_94 = gl_TexCoord[0].xy; + vec2 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_90.hip_pack0 = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = gl_TexCoord[1].xyzw; + vec4 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_90.hip_screen = tmpvar_97; + vec3 tmpvar_98; + tmpvar_98 = gl_TexCoord[2].xyz; + vec3 tmpvar_99; + tmpvar_99 = tmpvar_98; + xlt_IN_90.hip_lmapFade = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = frag_surf (xlt_IN_90); + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + xl_retval_91 = tmpvar_101; + vec4 tmpvar_102; + tmpvar_102 = xl_retval_91.xyzw; + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + gl_FragData[0] = tmpvar_103; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-out.txt new file mode 100644 index 000000000..e6327cfa7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Bumped_Specular2-out.txt @@ -0,0 +1,30 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec2 tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec4 normal_5; + normal_5.xy = ((texture2D (_BumpMap, tmpvar_3).wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + vec4 tmpvar_6; + tmpvar_6 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_6.w; + light_2.xyz = (tmpvar_6.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (tmpvar_6.w * tmpvar_4.w); + c_7.xyz = (((tmpvar_4.xyz * _Color.xyz) * light_2.xyz) + ((light_2.xyz * _SpecColor.xyz) * tmpvar_8)); + c_7.w = ((tmpvar_4.w * _Color.w) + (tmpvar_8 * _SpecColor.w)); + gl_FragData[0] = c_7; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Decal-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Decal-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-ir.txt new file mode 100644 index 000000000..e6dcf2dca --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-ir.txt @@ -0,0 +1,167 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_DecalTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform sampler2D _DecalTex; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 decal_3; + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + c_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_DecalTex, IN_1.uv_DecalTex); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + decal_3 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = vec3(decal_3.w); + vec3 tmpvar_10; + tmpvar_10 = mix (c_4.xyz, decal_3.xyz, tmpvar_9); + vec3 tmpvar_11; + tmpvar_11 = tmpvar_10; + c_4.xyz = tmpvar_11.xyz.xyz; + vec4 tmpvar_12; + tmpvar_12 = (c_4 * _Color); + c_4 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_4.xyz; + o_2.Albedo = tmpvar_13; + float tmpvar_14; + tmpvar_14 = c_4.w; + o_2.Alpha = tmpvar_14; +} + +vec4 LightingLambert ( + in SurfaceOutput s_15, + in vec3 lightDir_16, + in float atten_17 +) +{ + vec4 c_18; + float diff_19; + float tmpvar_20; + tmpvar_20 = dot (s_15.Normal, lightDir_16); + float tmpvar_21; + tmpvar_21 = max (0.0, tmpvar_20); + float tmpvar_22; + tmpvar_22 = tmpvar_21; + diff_19 = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = ((s_15.Albedo * _LightColor0.xyz) * ((diff_19 * atten_17) * 2.0)); + c_18.xyz = tmpvar_23.xyz.xyz; + float tmpvar_24; + tmpvar_24 = s_15.Alpha; + c_18.w = vec4(tmpvar_24).w; + return c_18; +} + +vec4 frag_surf ( + in v2f_surf IN_25 +) +{ + vec4 c_26; + vec3 lightDir_27; + SurfaceOutput o_28; + Input surfIN_29; + vec2 tmpvar_30; + tmpvar_30 = IN_25.hip_pack0.xy; + surfIN_29.uv_MainTex = tmpvar_30; + vec2 tmpvar_31; + tmpvar_31 = IN_25.hip_pack0.zw; + surfIN_29.uv_DecalTex = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_28.Albedo = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_28.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_28.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_28.Alpha = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_28.Gloss = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = IN_25.normal; + o_28.Normal = tmpvar_37; + surf (surfIN_29, o_28); + vec3 tmpvar_38; + tmpvar_38 = IN_25.lightDir; + lightDir_27 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = LightingLambert (o_28, lightDir_27, 1.0); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + c_26 = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + c_26.w = vec4(tmpvar_41).w; + return c_26; +} + +void main () +{ + v2f_surf xlt_IN_42; + vec4 xl_retval_43; + vec4 tmpvar_44; + tmpvar_44 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_42.pos = tmpvar_44; + float tmpvar_45; + tmpvar_45 = xlv_FOG.x; + xlt_IN_42.fog = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = gl_TexCoord[0].xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_42.hip_pack0 = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = gl_TexCoord[1].xyz; + vec3 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_42.normal = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[2].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_42.lightDir = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = frag_surf (xlt_IN_42); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xl_retval_43 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_43.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_FragData[0] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-out.txt new file mode 100644 index 000000000..4fc02e823 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal-out.txt @@ -0,0 +1,27 @@ +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform sampler2D _DecalTex; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + c_3.w = tmpvar_4.w; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_DecalTex, tmpvar_1.zw); + c_3.xyz = mix (tmpvar_4.xyz, tmpvar_5.xyz, tmpvar_5.www); + vec4 tmpvar_6; + tmpvar_6 = (c_3 * _Color); + c_3 = tmpvar_6; + vec4 c_7; + c_7.xyz = ((tmpvar_6.xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * 2.0)); + c_7.w = tmpvar_6.w; + c_2.xyz = c_7.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Decal1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-ir.txt new file mode 100644 index 000000000..d6076da51 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-ir.txt @@ -0,0 +1,176 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_DecalTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _DecalTex; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 decal_3; + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + c_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_DecalTex, IN_1.uv_DecalTex); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + decal_3 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = vec3(decal_3.w); + vec3 tmpvar_10; + tmpvar_10 = mix (c_4.xyz, decal_3.xyz, tmpvar_9); + vec3 tmpvar_11; + tmpvar_11 = tmpvar_10; + c_4.xyz = tmpvar_11.xyz.xyz; + vec4 tmpvar_12; + tmpvar_12 = (c_4 * _Color); + c_4 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_4.xyz; + o_2.Albedo = tmpvar_13; + float tmpvar_14; + tmpvar_14 = c_4.w; + o_2.Alpha = tmpvar_14; +} + +vec4 LightingLambert ( + in SurfaceOutput s_15, + in vec3 lightDir_16, + in float atten_17 +) +{ + vec4 c_18; + float diff_19; + float tmpvar_20; + tmpvar_20 = dot (s_15.Normal, lightDir_16); + float tmpvar_21; + tmpvar_21 = max (0.0, tmpvar_20); + float tmpvar_22; + tmpvar_22 = tmpvar_21; + diff_19 = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = ((s_15.Albedo * _LightColor0.xyz) * ((diff_19 * atten_17) * 2.0)); + c_18.xyz = tmpvar_23.xyz.xyz; + float tmpvar_24; + tmpvar_24 = s_15.Alpha; + c_18.w = vec4(tmpvar_24).w; + return c_18; +} + +vec4 frag_surf ( + in v2f_surf IN_25 +) +{ + vec4 c_26; + vec3 lightDir_27; + SurfaceOutput o_28; + Input surfIN_29; + vec2 tmpvar_30; + tmpvar_30 = IN_25.hip_pack0.xy; + surfIN_29.uv_MainTex = tmpvar_30; + vec2 tmpvar_31; + tmpvar_31 = IN_25.hip_pack0.zw; + surfIN_29.uv_DecalTex = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_28.Albedo = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_28.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_28.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_28.Alpha = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_28.Gloss = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = IN_25.normal; + o_28.Normal = tmpvar_37; + surf (surfIN_29, o_28); + vec3 tmpvar_38; + tmpvar_38 = IN_25.lightDir; + lightDir_27 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = texture2D (_LightTexture0, IN_25._LightCoord); + vec4 tmpvar_40; + tmpvar_40 = LightingLambert (o_28, lightDir_27, (tmpvar_39.w * 1.0)); + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + c_26 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = 0.0; + c_26.w = vec4(tmpvar_42).w; + return c_26; +} + +void main () +{ + v2f_surf xlt_IN_43; + vec4 xl_retval_44; + vec4 tmpvar_45; + tmpvar_45 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_43.pos = tmpvar_45; + float tmpvar_46; + tmpvar_46 = xlv_FOG.x; + xlt_IN_43.fog = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_TexCoord[0].xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_43.hip_pack0 = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[1].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_43.normal = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[2].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_43.lightDir = tmpvar_52; + vec2 tmpvar_53; + tmpvar_53 = gl_TexCoord[3].xy; + vec2 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_43._LightCoord = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = frag_surf (xlt_IN_43); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xl_retval_44 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_44.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_FragData[0] = tmpvar_58; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-out.txt new file mode 100644 index 000000000..c0fc85fc5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal1-out.txt @@ -0,0 +1,28 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _DecalTex; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + c_3.w = tmpvar_4.w; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_DecalTex, tmpvar_1.zw); + c_3.xyz = mix (tmpvar_4.xyz, tmpvar_5.xyz, tmpvar_5.www); + vec4 tmpvar_6; + tmpvar_6 = (c_3 * _Color); + c_3 = tmpvar_6; + vec4 c_7; + c_7.xyz = ((tmpvar_6.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_7.w = tmpvar_6.w; + c_2.xyz = c_7.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Decal2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-ir.txt new file mode 100644 index 000000000..4220ef4f3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-ir.txt @@ -0,0 +1,157 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_DecalTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _DecalTex; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 decal_3; + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + c_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_DecalTex, IN_1.uv_DecalTex); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + decal_3 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = vec3(decal_3.w); + vec3 tmpvar_10; + tmpvar_10 = mix (c_4.xyz, decal_3.xyz, tmpvar_9); + vec3 tmpvar_11; + tmpvar_11 = tmpvar_10; + c_4.xyz = tmpvar_11.xyz.xyz; + vec4 tmpvar_12; + tmpvar_12 = (c_4 * _Color); + c_4 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_4.xyz; + o_2.Albedo = tmpvar_13; + float tmpvar_14; + tmpvar_14 = c_4.w; + o_2.Alpha = tmpvar_14; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_15, + in vec4 light_16 +) +{ + vec4 c_17; + vec3 tmpvar_18; + tmpvar_18 = (s_15.Albedo * light_16.xyz); + c_17.xyz = tmpvar_18.xyz.xyz; + float tmpvar_19; + tmpvar_19 = s_15.Alpha; + c_17.w = vec4(tmpvar_19).w; + return c_17; +} + +vec4 frag_surf ( + in v2f_surf IN_20 +) +{ + vec4 col_21; + vec4 light_22; + SurfaceOutput o_23; + Input surfIN_24; + vec2 tmpvar_25; + tmpvar_25 = IN_20.hip_pack0.xy; + surfIN_24.uv_MainTex = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = IN_20.hip_pack0.zw; + surfIN_24.uv_DecalTex = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_23.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_23.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_23.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_23.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_23.Gloss = tmpvar_31; + surf (surfIN_24, o_23); + vec4 tmpvar_32; + tmpvar_32 = texture2DProj (_LightBuffer, IN_20.hip_screen); + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + light_22 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = log2 (light_22); + vec4 tmpvar_35; + tmpvar_35 = -(tmpvar_34); + light_22 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = (light_22.xyz + unity_Ambient.xyz); + light_22.xyz = tmpvar_36.xyz.xyz; + vec4 tmpvar_37; + tmpvar_37 = LightingLambert_PrePass (o_23, light_22); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + col_21 = tmpvar_38; + return col_21; +} + +void main () +{ + v2f_surf xlt_IN_39; + vec4 xl_retval_40; + vec4 tmpvar_41; + tmpvar_41 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_39.pos = tmpvar_41; + float tmpvar_42; + tmpvar_42 = xlv_FOG.x; + xlt_IN_39.fog = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_TexCoord[0].xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_39.hip_pack0 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_TexCoord[1].xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_39.hip_screen = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = frag_surf (xlt_IN_39); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xl_retval_40 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = xl_retval_40.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_FragData[0] = tmpvar_50; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-out.txt new file mode 100644 index 000000000..994c4f5b8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Decal2-out.txt @@ -0,0 +1,30 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _DecalTex; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 light_2; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + c_3.w = tmpvar_4.w; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_DecalTex, tmpvar_1.zw); + c_3.xyz = mix (tmpvar_4.xyz, tmpvar_5.xyz, tmpvar_5.www); + vec4 tmpvar_6; + tmpvar_6 = (c_3 * _Color); + c_3 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_7.w; + light_2.xyz = (tmpvar_7.xyz + unity_Ambient.xyz); + vec4 c_8; + c_8.xyz = (tmpvar_6.xyz * light_2.xyz); + c_8.w = tmpvar_6.w; + gl_FragData[0] = c_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-ir.txt new file mode 100644 index 000000000..73814d60c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-ir.txt @@ -0,0 +1,166 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 LightingLambert ( + in SurfaceOutput s_8, + in vec3 lightDir_9, + in float atten_10 +) +{ + vec4 c_11; + float diff_12; + float tmpvar_13; + tmpvar_13 = dot (s_8.Normal, lightDir_9); + float tmpvar_14; + tmpvar_14 = max (0.0, tmpvar_13); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + diff_12 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = ((s_8.Albedo * _LightColor0.xyz) * ((diff_12 * atten_10) * 2.0)); + c_11.xyz = tmpvar_16.xyz.xyz; + float tmpvar_17; + tmpvar_17 = s_8.Alpha; + c_11.w = vec4(tmpvar_17).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_18 +) +{ + vec4 c_19; + vec3 lightDir_20; + SurfaceOutput o_21; + Input surfIN_22; + vec2 tmpvar_23; + tmpvar_23 = IN_18.hip_pack0.xy; + surfIN_22.uv_MainTex = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = vec3(0.0, 0.0, 0.0); + o_21.Albedo = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(0.0, 0.0, 0.0); + o_21.Emission = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_21.Specular = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_21.Alpha = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_21.Gloss = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = IN_18.normal; + o_21.Normal = tmpvar_29; + surf (surfIN_22, o_21); + vec3 tmpvar_30; + tmpvar_30 = IN_18.lightDir; + lightDir_20 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = normalize (lightDir_20); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + lightDir_20 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = dot (IN_18._LightCoord, IN_18._LightCoord); + vec2 tmpvar_34; + tmpvar_34 = vec2(tmpvar_33); + vec2 tmpvar_35; + tmpvar_35 = tmpvar_34.xy; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_LightTexture0, tmpvar_35); + vec4 tmpvar_37; + tmpvar_37 = LightingLambert (o_21, lightDir_20, tmpvar_36.w); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + c_19 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = 0.0; + c_19.w = vec4(tmpvar_39).w; + return c_19; +} + +void main () +{ + v2f_surf xlt_IN_40; + vec4 xl_retval_41; + vec4 tmpvar_42; + tmpvar_42 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_40.pos = tmpvar_42; + float tmpvar_43; + tmpvar_43 = xlv_FOG.x; + xlt_IN_40.fog = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = gl_TexCoord[0].xy; + vec2 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_40.hip_pack0 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_TexCoord[1].xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_40.normal = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = gl_TexCoord[2].xyz; + vec3 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_40.lightDir = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[3].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_40._LightCoord = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = frag_surf (xlt_IN_40); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xl_retval_41 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_41.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_FragData[0] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-out.txt new file mode 100644 index 000000000..581b5fac5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse-out.txt @@ -0,0 +1,19 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[3].xyz; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 c_4; + c_4.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * texture2D (_LightTexture0, vec2(dot (tmpvar_1, tmpvar_1))).w) * 2.0)); + c_4.w = tmpvar_3.w; + c_2.xyz = c_4.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-ir.txt new file mode 100644 index 000000000..5121ba047 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-ir.txt @@ -0,0 +1,95 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform sampler2D _MainTex; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 frag_surf ( + in v2f_surf IN_8 +) +{ + vec4 res_9; + Input surfIN_10; + SurfaceOutput o_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(0.0, 0.0, 0.0); + o_11.Albedo = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = vec3(0.0, 0.0, 0.0); + o_11.Emission = tmpvar_13; + float tmpvar_14; + tmpvar_14 = 0.0; + o_11.Specular = tmpvar_14; + float tmpvar_15; + tmpvar_15 = 0.0; + o_11.Alpha = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_11.Gloss = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = IN_8.normal; + o_11.Normal = tmpvar_17; + surf (surfIN_10, o_11); + vec3 tmpvar_18; + tmpvar_18 = ((o_11.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_9.xyz = tmpvar_18.xyz.xyz; + float tmpvar_19; + tmpvar_19 = o_11.Specular; + res_9.w = vec4(tmpvar_19).w; + return res_9; +} + +void main () +{ + v2f_surf xlt_IN_20; + vec4 xl_retval_21; + vec4 tmpvar_22; + tmpvar_22 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_20.pos = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_TexCoord[0].xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_IN_20.normal = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = frag_surf (xlt_IN_20); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xl_retval_21 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = xl_retval_21.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_FragData[0] = tmpvar_28; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-out.txt new file mode 100644 index 000000000..d5e6cd110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse1-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-ir.txt new file mode 100644 index 000000000..daffc9e85 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-ir.txt @@ -0,0 +1,281 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec4 c_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec4 tmpvar_37; + tmpvar_37 = (tmpvar_36 * _Color); + c_35 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = c_35.xyz; + o_34.Albedo = tmpvar_38; + float tmpvar_39; + tmpvar_39 = c_35.w; + o_34.Alpha = tmpvar_39; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_40, + in vec4 light_41 +) +{ + vec4 c_42; + vec3 tmpvar_43; + tmpvar_43 = (s_40.Albedo * light_41.xyz); + c_42.xyz = tmpvar_43.xyz.xyz; + float tmpvar_44; + tmpvar_44 = s_40.Alpha; + c_42.w = vec4(tmpvar_44).w; + return c_42; +} + +vec3 DecodeLightmap ( + in vec4 color_45 +) +{ + return (2.0 * color_45.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_46 +) +{ + vec4 col_47; + vec3 lm_48; + vec3 lmIndirect_49; + vec3 lmFull_50; + vec4 light_51; + SurfaceOutput o_52; + Input surfIN_53; + vec2 tmpvar_54; + tmpvar_54 = IN_46.hip_pack0.xy; + surfIN_53.uv_MainTex = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = vec3(0.0, 0.0, 0.0); + o_52.Albedo = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_52.Emission = tmpvar_56; + float tmpvar_57; + tmpvar_57 = 0.0; + o_52.Specular = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_52.Alpha = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_52.Gloss = tmpvar_59; + surf (surfIN_53, o_52); + vec4 tmpvar_60; + tmpvar_60 = texture2DProj (_LightBuffer, IN_46.hip_screen); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + light_51 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = log2 (light_51); + vec4 tmpvar_63; + tmpvar_63 = -(tmpvar_62); + light_51 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = texture2D (unity_Lightmap, IN_46.hip_lmapFade.xy); + vec3 tmpvar_65; + tmpvar_65 = DecodeLightmap (tmpvar_64); + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + lmFull_50 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = texture2D (unity_LightmapInd, IN_46.hip_lmapFade.xy); + vec3 tmpvar_68; + tmpvar_68 = DecodeLightmap (tmpvar_67); + vec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + lmIndirect_49 = tmpvar_69; + float tmpvar_70; + tmpvar_70 = xll_saturate (IN_46.hip_lmapFade.z); + vec3 tmpvar_71; + tmpvar_71 = vec3(tmpvar_70); + vec3 tmpvar_72; + tmpvar_72 = mix (lmIndirect_49, lmFull_50, tmpvar_71); + vec3 tmpvar_73; + tmpvar_73 = tmpvar_72; + lm_48 = tmpvar_73; + vec3 tmpvar_74; + tmpvar_74 = (light_51.xyz + lm_48); + light_51.xyz = tmpvar_74.xyz.xyz; + vec4 tmpvar_75; + tmpvar_75 = LightingLambert_PrePass (o_52, light_51); + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + col_47 = tmpvar_76; + return col_47; +} + +void main () +{ + v2f_surf xlt_IN_77; + vec4 xl_retval_78; + vec4 tmpvar_79; + tmpvar_79 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_77.pos = tmpvar_79; + float tmpvar_80; + tmpvar_80 = xlv_FOG.x; + xlt_IN_77.fog = tmpvar_80; + vec2 tmpvar_81; + tmpvar_81 = gl_TexCoord[0].xy; + vec2 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_IN_77.hip_pack0 = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = gl_TexCoord[1].xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_IN_77.hip_screen = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = gl_TexCoord[2].xyz; + vec3 tmpvar_86; + tmpvar_86 = tmpvar_85; + xlt_IN_77.hip_lmapFade = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = frag_surf (xlt_IN_77); + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + xl_retval_78 = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = xl_retval_78.xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + gl_FragData[0] = tmpvar_90; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-out.txt new file mode 100644 index 000000000..e5face3eb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse2-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_4.w; + light_2.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_5; + c_5.xyz = (tmpvar_3.xyz * light_2.xyz); + c_5.w = tmpvar_3.w; + gl_FragData[0] = c_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Alpha_Shadowed_ZWrite-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt new file mode 100644 index 000000000..863e515b8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt @@ -0,0 +1,150 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 vlight; +}; +varying vec4 xlv_FOG; +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 LightingLambert ( + in SurfaceOutput s_8, + in vec3 lightDir_9, + in float atten_10 +) +{ + vec4 c_11; + float diff_12; + float tmpvar_13; + tmpvar_13 = dot (s_8.Normal, lightDir_9); + float tmpvar_14; + tmpvar_14 = max (0.0, tmpvar_13); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + diff_12 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = ((s_8.Albedo * _LightColor0.xyz) * ((diff_12 * atten_10) * 2.0)); + c_11.xyz = tmpvar_16.xyz.xyz; + float tmpvar_17; + tmpvar_17 = s_8.Alpha; + c_11.w = vec4(tmpvar_17).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_18 +) +{ + vec4 c_19; + float atten_20; + SurfaceOutput o_21; + Input surfIN_22; + float tmpvar_23; + tmpvar_23 = 1.0; + atten_20 = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = IN_18.hip_pack0.xy; + surfIN_22.uv_MainTex = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(0.0, 0.0, 0.0); + o_21.Albedo = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = vec3(0.0, 0.0, 0.0); + o_21.Emission = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_21.Specular = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_21.Alpha = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_21.Gloss = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = IN_18.normal; + o_21.Normal = tmpvar_30; + surf (surfIN_22, o_21); + vec4 tmpvar_31; + tmpvar_31 = LightingLambert (o_21, _WorldSpaceLightPos0.xyz, atten_20); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + c_19 = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = (c_19.xyz + (o_21.Albedo * IN_18.vlight)); + c_19.xyz = tmpvar_33.xyz.xyz; + float tmpvar_34; + tmpvar_34 = o_21.Alpha; + c_19.w = vec4(tmpvar_34).w; + return c_19; +} + +void main () +{ + v2f_surf xlt_IN_35; + vec4 xl_retval_36; + vec4 tmpvar_37; + tmpvar_37 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_35.pos = tmpvar_37; + float tmpvar_38; + tmpvar_38 = xlv_FOG.x; + xlt_IN_35.fog = tmpvar_38; + vec2 tmpvar_39; + tmpvar_39 = gl_TexCoord[0].xy; + vec2 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_35.hip_pack0 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_TexCoord[1].xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_35.normal = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_TexCoord[2].xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_35.vlight = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = frag_surf (xlt_IN_35); + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xl_retval_36 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = xl_retval_36.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_FragData[0] = tmpvar_48; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt new file mode 100644 index 000000000..624130064 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt @@ -0,0 +1,19 @@ +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + float tmpvar_3; + tmpvar_3 = tmpvar_2.w; + vec4 c_4; + c_4.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, _WorldSpaceLightPos0.xyz)) * 2.0)); + c_4.w = tmpvar_3; + c_1.xyz = (c_4.xyz + (tmpvar_2.xyz * gl_TexCoord[2].xyz)); + c_1.w = tmpvar_3; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-ir.txt new file mode 100644 index 000000000..e9155cb87 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-ir.txt @@ -0,0 +1,197 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Detail; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Detail; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_Detail, IN_1.uv_Detail); + vec3 tmpvar_7; + tmpvar_7 = (c_3.xyz * (tmpvar_6.xyz * 2.0)); + c_3.xyz = tmpvar_7.xyz.xyz; + vec3 tmpvar_8; + tmpvar_8 = c_3.xyz; + o_2.Albedo = tmpvar_8; + float tmpvar_9; + tmpvar_9 = c_3.w; + o_2.Alpha = tmpvar_9; +} + +float UnitySpotCookie ( + in vec4 LightCoord_10 +) +{ + vec4 tmpvar_11; + tmpvar_11 = texture2D (_LightTexture0, ((LightCoord_10.xy / LightCoord_10.w) + 0.5)); + return tmpvar_11.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_12 +) +{ + float tmpvar_13; + tmpvar_13 = dot (LightCoord_12, LightCoord_12); + vec2 tmpvar_14; + tmpvar_14 = vec2(tmpvar_13); + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14.xy; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); + return tmpvar_16.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_17, + in vec3 lightDir_18, + in float atten_19 +) +{ + vec4 c_20; + float diff_21; + float tmpvar_22; + tmpvar_22 = dot (s_17.Normal, lightDir_18); + float tmpvar_23; + tmpvar_23 = max (0.0, tmpvar_22); + float tmpvar_24; + tmpvar_24 = tmpvar_23; + diff_21 = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = ((s_17.Albedo * _LightColor0.xyz) * ((diff_21 * atten_19) * 2.0)); + c_20.xyz = tmpvar_25.xyz.xyz; + float tmpvar_26; + tmpvar_26 = s_17.Alpha; + c_20.w = vec4(tmpvar_26).w; + return c_20; +} + +vec4 frag_surf ( + in v2f_surf IN_27 +) +{ + vec4 c_28; + vec3 lightDir_29; + SurfaceOutput o_30; + Input surfIN_31; + vec2 tmpvar_32; + tmpvar_32 = IN_27.hip_pack0.xy; + surfIN_31.uv_MainTex = tmpvar_32; + vec2 tmpvar_33; + tmpvar_33 = IN_27.hip_pack0.zw; + surfIN_31.uv_Detail = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(0.0, 0.0, 0.0); + o_30.Albedo = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = vec3(0.0, 0.0, 0.0); + o_30.Emission = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_30.Specular = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_30.Alpha = tmpvar_37; + float tmpvar_38; + tmpvar_38 = 0.0; + o_30.Gloss = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = IN_27.normal; + o_30.Normal = tmpvar_39; + surf (surfIN_31, o_30); + vec3 tmpvar_40; + tmpvar_40 = IN_27.lightDir; + lightDir_29 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = normalize (lightDir_29); + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + lightDir_29 = tmpvar_42; + float tmpvar_43; + tmpvar_43 = UnitySpotCookie (IN_27._LightCoord); + float tmpvar_44; + tmpvar_44 = UnitySpotAttenuate (IN_27._LightCoord.xyz); + vec4 tmpvar_45; + tmpvar_45 = LightingLambert (o_30, lightDir_29, ((float((IN_27._LightCoord.z > 0.0)) * tmpvar_43) * tmpvar_44)); + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + c_28 = tmpvar_46; + float tmpvar_47; + tmpvar_47 = 0.0; + c_28.w = vec4(tmpvar_47).w; + return c_28; +} + +void main () +{ + v2f_surf xlt_IN_48; + vec4 xl_retval_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_48.pos = tmpvar_50; + float tmpvar_51; + tmpvar_51 = xlv_FOG.x; + xlt_IN_48.fog = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = gl_TexCoord[0].xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_48.hip_pack0 = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = gl_TexCoord[1].xyz; + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_48.normal = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = gl_TexCoord[2].xyz; + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_48.lightDir = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = gl_TexCoord[3].xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_IN_48._LightCoord = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = frag_surf (xlt_IN_48); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + xl_retval_49 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = xl_retval_49.xyzw; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + gl_FragData[0] = tmpvar_63; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-out.txt new file mode 100644 index 000000000..0c948cbda --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail-out.txt @@ -0,0 +1,26 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Detail; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[3]; + vec4 c_3; + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); + c_4.w = tmpvar_5.w; + c_4.xyz = (tmpvar_5.xyz * (texture2D (_Detail, tmpvar_1.zw).xyz * 2.0)); + vec4 c_6; + c_6.xyz = ((c_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_6.w = c_4.w; + c_3.xyz = c_6.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Diffuse_Detail1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-ir.txt new file mode 100644 index 000000000..6e5984571 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-ir.txt @@ -0,0 +1,102 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Detail; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform sampler2D _MainTex; +uniform sampler2D _Detail; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_Detail, IN_1.uv_Detail); + vec3 tmpvar_7; + tmpvar_7 = (c_3.xyz * (tmpvar_6.xyz * 2.0)); + c_3.xyz = tmpvar_7.xyz.xyz; + vec3 tmpvar_8; + tmpvar_8 = c_3.xyz; + o_2.Albedo = tmpvar_8; + float tmpvar_9; + tmpvar_9 = c_3.w; + o_2.Alpha = tmpvar_9; +} + +vec4 frag_surf ( + in v2f_surf IN_10 +) +{ + vec4 res_11; + Input surfIN_12; + SurfaceOutput o_13; + vec3 tmpvar_14; + tmpvar_14 = vec3(0.0, 0.0, 0.0); + o_13.Albedo = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = vec3(0.0, 0.0, 0.0); + o_13.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_13.Specular = tmpvar_16; + float tmpvar_17; + tmpvar_17 = 0.0; + o_13.Alpha = tmpvar_17; + float tmpvar_18; + tmpvar_18 = 0.0; + o_13.Gloss = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = IN_10.normal; + o_13.Normal = tmpvar_19; + surf (surfIN_12, o_13); + vec3 tmpvar_20; + tmpvar_20 = ((o_13.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_11.xyz = tmpvar_20.xyz.xyz; + float tmpvar_21; + tmpvar_21 = o_13.Specular; + res_11.w = vec4(tmpvar_21).w; + return res_11; +} + +void main () +{ + v2f_surf xlt_IN_22; + vec4 xl_retval_23; + vec4 tmpvar_24; + tmpvar_24 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_22.pos = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = gl_TexCoord[0].xyz; + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_IN_22.normal = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = frag_surf (xlt_IN_22); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xl_retval_23 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = xl_retval_23.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + gl_FragData[0] = tmpvar_30; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-out.txt new file mode 100644 index 000000000..d5e6cd110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Diffuse_Detail1-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-ir.txt new file mode 100644 index 000000000..bb6e76eff --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-ir.txt @@ -0,0 +1,95 @@ +struct v2f { + vec4 vertex; + vec4 uvgrab; + vec2 uvbump; + vec2 uvmain; +}; +uniform sampler2D _MainTex; +uniform vec4 _GrabTexture_TexelSize; +uniform sampler2D _GrabTexture; +uniform sampler2D _BumpMap; +uniform float _BumpAmt; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec4 frag ( + in v2f i_6 +) +{ + vec4 tint_7; + vec4 col_8; + vec2 offset_9; + vec2 bump_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_BumpMap, i_6.uvbump); + vec4 tmpvar_12; + tmpvar_12 = UnpackNormal (tmpvar_11); + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12.xy; + bump_10 = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = ((bump_10 * _BumpAmt) * _GrabTexture_TexelSize.xy); + offset_9 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = ((offset_9 * i_6.uvgrab.z) + i_6.uvgrab.xy); + i_6.uvgrab.xy = tmpvar_15.xy.xy; + vec4 tmpvar_16; + tmpvar_16 = texture2DProj (_GrabTexture, i_6.uvgrab); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + col_8 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_MainTex, i_6.uvmain); + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + tint_7 = tmpvar_19; + return (col_8 * tint_7); +} + +void main () +{ + v2f xlt_i_20; + vec4 xl_retval_21; + vec4 tmpvar_22; + tmpvar_22 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_20.vertex = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = gl_TexCoord[0].xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_i_20.uvgrab = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = gl_TexCoord[1].xy; + vec2 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_i_20.uvbump = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = gl_TexCoord[2].xy; + vec2 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_i_20.uvmain = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = frag (xlt_i_20); + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xl_retval_21 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = xl_retval_21.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_FragData[0] = tmpvar_32; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-out.txt similarity index 51% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-out.txt index c0e67b2d4..193164a9f 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Glass_Stained_BumpDistort-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Glass_Stained_BumpDistort-out.txt @@ -8,11 +8,11 @@ void main () vec4 tmpvar_1; tmpvar_1 = gl_TexCoord[0]; vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - vec4 normal; - normal.xy = ((texture2D (_BumpMap, gl_TexCoord[1].xy).wy * 2.0) - 1.0); - normal.z = sqrt (((1.0 - (normal.x * normal.x)) - (normal.y * normal.y))); - tmpvar_2.xy = ((((normal.xy * _BumpAmt) * _GrabTexture_TexelSize.xy) * tmpvar_1.z) + tmpvar_1.xy); + tmpvar_2.zw = tmpvar_1.zw; + vec4 normal_3; + normal_3.xy = ((texture2D (_BumpMap, gl_TexCoord[1].xy).wy * 2.0) - 1.0); + normal_3.z = sqrt(((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + tmpvar_2.xy = ((((normal_3.xy * _BumpAmt) * _GrabTexture_TexelSize.xy) * tmpvar_1.z) + tmpvar_1.xy); gl_FragData[0] = (texture2DProj (_GrabTexture, tmpvar_2) * texture2D (_MainTex, gl_TexCoord[2].xy)); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-FX_Water_(simple)-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-ir.txt new file mode 100644 index 000000000..539d8a67d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-ir.txt @@ -0,0 +1,116 @@ +struct v2f { + vec4 pos; + float fog; + vec2 bumpuv[2]; + vec3 viewDir; +}; +varying vec4 xlv_FOG; +uniform vec4 _horizonColor; +uniform sampler2D _ColorControl; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec4 frag ( + in v2f i_6 +) +{ + vec4 col_7; + vec4 water_8; + float fresnel_9; + vec3 bump_10; + vec3 bump2_11; + vec3 bump1_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_BumpMap, i_6.bumpuv[0]); + vec4 tmpvar_14; + tmpvar_14 = UnpackNormal (tmpvar_13); + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14.xyz; + bump1_12 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, i_6.bumpuv[1]); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + bump2_11 = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = ((bump1_12 + bump2_11) * 0.5); + bump_10 = tmpvar_19; + float tmpvar_20; + tmpvar_20 = dot (i_6.viewDir, bump_10); + float tmpvar_21; + tmpvar_21 = tmpvar_20; + fresnel_9 = tmpvar_21; + vec2 tmpvar_22; + tmpvar_22.x = fresnel_9; + tmpvar_22.y = fresnel_9; + vec4 tmpvar_23; + tmpvar_23 = texture2D (_ColorControl, tmpvar_22); + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + water_8 = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(water_8.w); + vec3 tmpvar_26; + tmpvar_26 = mix (water_8.xyz, _horizonColor.xyz, tmpvar_25); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + col_7.xyz = tmpvar_27.xyz.xyz; + float tmpvar_28; + tmpvar_28 = _horizonColor.w; + col_7.w = vec4(tmpvar_28).w; + return col_7; +} + +void main () +{ + v2f xlt_i_29; + vec4 xl_retval_30; + vec4 tmpvar_31; + tmpvar_31 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_29.pos = tmpvar_31; + float tmpvar_32; + tmpvar_32 = xlv_FOG.x; + xlt_i_29.fog = tmpvar_32; + vec2 tmpvar_33; + tmpvar_33 = gl_TexCoord[0].xy; + vec2 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_i_29.bumpuv[0] = tmpvar_34; + vec2 tmpvar_35; + tmpvar_35 = gl_TexCoord[1].xy; + vec2 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_i_29.bumpuv[1] = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_TexCoord[2].xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_i_29.viewDir = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = frag (xlt_i_29); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_30 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_30.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_FragData[0] = tmpvar_42; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-out.txt new file mode 100644 index 000000000..24ae5042d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-FX_Water_(simple)-out.txt @@ -0,0 +1,19 @@ +uniform vec4 _horizonColor; +uniform sampler2D _ColorControl; +uniform sampler2D _BumpMap; +void main () +{ + vec4 col_1; + vec4 normal_2; + normal_2.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); + normal_2.z = sqrt(((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + vec4 normal_3; + normal_3.xy = ((texture2D (_BumpMap, gl_TexCoord[1].xy).wy * 2.0) - 1.0); + normal_3.z = sqrt(((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + vec4 tmpvar_4; + tmpvar_4 = texture2D (_ColorControl, vec2(dot (gl_TexCoord[2].xyz, ((normal_2.xyz + normal_3.xyz) * 0.5)))); + col_1.xyz = mix (tmpvar_4.xyz, _horizonColor.xyz, tmpvar_4.www); + col_1.w = _horizonColor.w; + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-ir.txt new file mode 100644 index 000000000..9c8a90fd9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-ir.txt @@ -0,0 +1,38 @@ +struct v2f { + vec4 vertex; + vec4 uv; +}; +uniform sampler2D _GrabTexture; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2DProj (_GrabTexture, i_1.uv); + return (1.0 - tmpvar_2); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = gl_TexCoord[0].xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.uv = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = frag (xlt_i_3); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xl_retval_4 = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = xl_retval_4.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_FragData[0] = tmpvar_11; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Grab_Invert-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Grab_Invert-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-ir.txt new file mode 100644 index 000000000..e80df5e94 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-ir.txt @@ -0,0 +1,128 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec4 nz; +}; +uniform sampler2D _MainTex; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec2 EncodeViewNormalStereo ( + in vec3 n_2 +) +{ + vec2 enc_3; + float kScale_4; + float tmpvar_5; + tmpvar_5 = 1.7777; + kScale_4 = tmpvar_5; + vec2 tmpvar_6; + tmpvar_6 = (n_2.xy / (n_2.z + 1.0)); + enc_3 = tmpvar_6; + vec2 tmpvar_7; + tmpvar_7 = (enc_3 / kScale_4); + enc_3 = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = ((enc_3 * 0.5) + 0.5); + enc_3 = tmpvar_8; + return enc_3; +} + +vec2 EncodeFloatRG ( + in float v_9 +) +{ + vec2 enc_10; + float kEncodeBit_11; + vec2 kEncodeMul_12; + vec2 tmpvar_13; + tmpvar_13 = vec2(1.0, 255.0); + kEncodeMul_12 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = 0.00392157; + kEncodeBit_11 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = (kEncodeMul_12 * v_9); + enc_10 = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = fract (enc_10); + vec2 tmpvar_17; + tmpvar_17 = tmpvar_16; + enc_10 = tmpvar_17; + float tmpvar_18; + tmpvar_18 = (enc_10.x - (enc_10.y * kEncodeBit_11)); + enc_10.x = tmpvar_18; + return enc_10; +} + +vec4 EncodeDepthNormal ( + in float depth_19, + in vec3 normal_20 +) +{ + vec4 enc_21; + vec2 tmpvar_22; + tmpvar_22 = EncodeViewNormalStereo (normal_20); + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + enc_21.xy = tmpvar_23.xy.xy; + vec2 tmpvar_24; + tmpvar_24 = EncodeFloatRG (depth_19); + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + enc_21.zw = tmpvar_25.xxxy.zw; + return enc_21; +} + +vec4 frag ( + in v2f i_26 +) +{ + vec4 texcol_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_MainTex, i_26.uv); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + texcol_27 = tmpvar_29; + xll_clip ((texcol_27.w - _Cutoff)); + vec4 tmpvar_30; + tmpvar_30 = EncodeDepthNormal (i_26.nz.w, i_26.nz.xyz); + return tmpvar_30; +} + +void main () +{ + v2f xlt_i_31; + vec4 xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_31.pos = tmpvar_33; + vec2 tmpvar_34; + tmpvar_34 = gl_TexCoord[0].xy; + vec2 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_i_31.uv = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_TexCoord[1].xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_i_31.nz = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = frag (xlt_i_31); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_32 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_32.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_FragData[0] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-out.txt new file mode 100644 index 000000000..d8e61bdaf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D _MainTex; +uniform float _Cutoff; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[1]; + float x_2; + x_2 = (texture2D (_MainTex, gl_TexCoord[0].xy).w - _Cutoff); + if ((x_2 < 0.0)) { + discard; + }; + vec4 enc_3; + enc_3.xy = ((((tmpvar_1.xy / (tmpvar_1.z + 1.0)) / 1.7777) * 0.5) + 0.5); + vec2 enc_4; + vec2 tmpvar_5; + tmpvar_5 = fract((vec2(1.0, 255.0) * tmpvar_1.w)); + enc_4.y = tmpvar_5.y; + enc_4.x = (tmpvar_5.x - (tmpvar_5.y * 0.00392157)); + enc_3.zw = enc_4; + gl_FragData[0] = enc_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthNormalTexture1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-ir.txt new file mode 100644 index 000000000..e80df5e94 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-ir.txt @@ -0,0 +1,128 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec4 nz; +}; +uniform sampler2D _MainTex; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec2 EncodeViewNormalStereo ( + in vec3 n_2 +) +{ + vec2 enc_3; + float kScale_4; + float tmpvar_5; + tmpvar_5 = 1.7777; + kScale_4 = tmpvar_5; + vec2 tmpvar_6; + tmpvar_6 = (n_2.xy / (n_2.z + 1.0)); + enc_3 = tmpvar_6; + vec2 tmpvar_7; + tmpvar_7 = (enc_3 / kScale_4); + enc_3 = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = ((enc_3 * 0.5) + 0.5); + enc_3 = tmpvar_8; + return enc_3; +} + +vec2 EncodeFloatRG ( + in float v_9 +) +{ + vec2 enc_10; + float kEncodeBit_11; + vec2 kEncodeMul_12; + vec2 tmpvar_13; + tmpvar_13 = vec2(1.0, 255.0); + kEncodeMul_12 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = 0.00392157; + kEncodeBit_11 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = (kEncodeMul_12 * v_9); + enc_10 = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = fract (enc_10); + vec2 tmpvar_17; + tmpvar_17 = tmpvar_16; + enc_10 = tmpvar_17; + float tmpvar_18; + tmpvar_18 = (enc_10.x - (enc_10.y * kEncodeBit_11)); + enc_10.x = tmpvar_18; + return enc_10; +} + +vec4 EncodeDepthNormal ( + in float depth_19, + in vec3 normal_20 +) +{ + vec4 enc_21; + vec2 tmpvar_22; + tmpvar_22 = EncodeViewNormalStereo (normal_20); + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + enc_21.xy = tmpvar_23.xy.xy; + vec2 tmpvar_24; + tmpvar_24 = EncodeFloatRG (depth_19); + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + enc_21.zw = tmpvar_25.xxxy.zw; + return enc_21; +} + +vec4 frag ( + in v2f i_26 +) +{ + vec4 texcol_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_MainTex, i_26.uv); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + texcol_27 = tmpvar_29; + xll_clip ((texcol_27.w - _Cutoff)); + vec4 tmpvar_30; + tmpvar_30 = EncodeDepthNormal (i_26.nz.w, i_26.nz.xyz); + return tmpvar_30; +} + +void main () +{ + v2f xlt_i_31; + vec4 xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_31.pos = tmpvar_33; + vec2 tmpvar_34; + tmpvar_34 = gl_TexCoord[0].xy; + vec2 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_i_31.uv = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_TexCoord[1].xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_i_31.nz = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = frag (xlt_i_31); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_32 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_32.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_FragData[0] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-out.txt new file mode 100644 index 000000000..d8e61bdaf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthNormalTexture1-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D _MainTex; +uniform float _Cutoff; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[1]; + float x_2; + x_2 = (texture2D (_MainTex, gl_TexCoord[0].xy).w - _Cutoff); + if ((x_2 < 0.0)) { + discard; + }; + vec4 enc_3; + enc_3.xy = ((((tmpvar_1.xy / (tmpvar_1.z + 1.0)) / 1.7777) * 0.5) + 0.5); + vec2 enc_4; + vec2 tmpvar_5; + tmpvar_5 = fract((vec2(1.0, 255.0) * tmpvar_1.w)); + enc_4.y = tmpvar_5.y; + enc_4.x = (tmpvar_5.x - (tmpvar_5.y * 0.00392157)); + enc_3.zw = enc_4; + gl_FragData[0] = enc_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-ir.txt new file mode 100644 index 000000000..6ebd3de0e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-ir.txt @@ -0,0 +1,52 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 frag ( + in v2f i_2 +) +{ + vec4 texcol_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, i_2.uv); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + texcol_3 = tmpvar_5; + xll_clip ((texcol_3.w - 0.001)); + return vec4(0.0, 0.0, 0.0, 0.0); +} + +void main () +{ + v2f xlt_i_6; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_6.pos = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = gl_TexCoord[0].xy; + vec2 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_6.uv = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = frag (xlt_i_6); + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + xl_retval_7 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = xl_retval_7.xyzw; + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + gl_FragData[0] = tmpvar_14; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-out.txt similarity index 53% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-out.txt index 8cf9dafbe..04f9c826c 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Camera-DepthTexture-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Camera-DepthTexture-out.txt @@ -1,9 +1,9 @@ uniform sampler2D _MainTex; void main () { - float x; - x = (texture2D (_MainTex, gl_TexCoord[0].xy).w - 0.001); - if ((x < 0.0)) { + float x_1; + x_1 = (texture2D (_MainTex, gl_TexCoord[0].xy).w - 0.001); + if ((x_1 < 0.0)) { discard; }; gl_FragData[0] = vec4(0.0, 0.0, 0.0, 0.0); diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-ir.txt new file mode 100644 index 000000000..824b1756c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-ir.txt @@ -0,0 +1,70 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _RampTex; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f_img i_1 +) +{ + vec4 color_2; + float bb_3; + float gg_4; + float rr_5; + vec4 orig_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, i_1.uv); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + orig_6 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_RampTex, orig_6.xx); + float tmpvar_10; + tmpvar_10 = (tmpvar_9.x + 1e-05); + rr_5 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_RampTex, orig_6.yy); + float tmpvar_12; + tmpvar_12 = (tmpvar_11.y + 2e-05); + gg_4 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_RampTex, orig_6.zz); + float tmpvar_14; + tmpvar_14 = (tmpvar_13.z + 3e-05); + bb_3 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.x = rr_5; + tmpvar_15.y = gg_4; + tmpvar_15.z = bb_3; + tmpvar_15.w = orig_6.w; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + color_2 = tmpvar_16; + return color_2; +} + +void main () +{ + v2f_img xlt_i_17; + vec4 xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_17.pos = tmpvar_19; + vec2 tmpvar_20; + tmpvar_20 = gl_TexCoord[0].xy; + vec2 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_i_17.uv = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = frag (xlt_i_17); + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_18 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = xl_retval_18.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_FragData[0] = tmpvar_25; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Color_Correction_Effect-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Color_Correction_Effect-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Edge_Detect_X-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-ir.txt new file mode 100644 index 000000000..61a4a5c2f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-ir.txt @@ -0,0 +1,84 @@ +struct v2f { + vec4 pos; + vec2 uv[3]; +}; +uniform float _Treshold; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + float len_2; + vec3 diff_3; + vec3 p3_4; + vec3 p2_5; + vec3 p1_6; + vec4 original_7; + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, i_1.uv[0]); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + original_7 = tmpvar_9; + vec3 tmpvar_10; + tmpvar_10 = original_7.xyz; + p1_6 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex, i_1.uv[1]); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11.xyz; + p2_5 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_MainTex, i_1.uv[2]); + vec3 tmpvar_14; + tmpvar_14 = tmpvar_13.xyz; + p3_4 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (((p1_6 * 2.0) - p2_5) - p3_4); + diff_3 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = dot (diff_3, diff_3); + float tmpvar_17; + tmpvar_17 = tmpvar_16; + len_2 = tmpvar_17; + if ((len_2 >= _Treshold)) { + vec3 tmpvar_18; + tmpvar_18 = vec3(0.0, 0.0, 0.0); + original_7.xyz = tmpvar_18.xyz.xyz; + }; + return original_7; +} + +void main () +{ + v2f xlt_i_19; + vec4 xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_19.pos = tmpvar_21; + vec2 tmpvar_22; + tmpvar_22 = gl_TexCoord[0].xy; + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_i_19.uv[0] = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = gl_TexCoord[1].xy; + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_i_19.uv[1] = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = gl_TexCoord[2].xy; + vec2 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_i_19.uv[2] = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = frag (xlt_i_19); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_20 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_20.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_FragData[0] = tmpvar_31; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-out.txt new file mode 100644 index 000000000..931052d44 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Edge_Detect_X-out.txt @@ -0,0 +1,18 @@ +uniform float _Treshold; +uniform sampler2D _MainTex; +void main () +{ + vec4 original_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + original_1 = tmpvar_2; + vec3 tmpvar_3; + tmpvar_3 = (((tmpvar_2.xyz * 2.0) - texture2D (_MainTex, gl_TexCoord[1].xy).xyz) - texture2D (_MainTex, gl_TexCoord[2].xy).xyz); + float tmpvar_4; + tmpvar_4 = dot (tmpvar_3, tmpvar_3); + if ((tmpvar_4 >= _Treshold)) { + original_1.xyz = vec3(0.0, 0.0, 0.0); + }; + gl_FragData[0] = original_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_GlowConeTap-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-ir.txt new file mode 100644 index 000000000..db2316634 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-ir.txt @@ -0,0 +1,66 @@ +struct v2f { + vec4 pos; + vec4 uv[2]; +}; +uniform sampler2D _MainTex; +uniform vec4 _Color; +vec4 frag ( + in v2f i_1 +) +{ + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.uv[0].xy); + vec4 tmpvar_4; + tmpvar_4 = tmpvar_3; + c_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, i_1.uv[0].zw); + vec4 tmpvar_6; + tmpvar_6 = (c_2 + tmpvar_5); + c_2 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, i_1.uv[1].xy); + vec4 tmpvar_8; + tmpvar_8 = (c_2 + tmpvar_7); + c_2 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, i_1.uv[1].zw); + vec4 tmpvar_10; + tmpvar_10 = (c_2 + tmpvar_9); + c_2 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (c_2.xyz * _Color.xyz); + c_2.xyz = tmpvar_11.xyz.xyz; + return (c_2 * _Color.w); +} + +void main () +{ + v2f xlt_i_12; + vec4 xl_retval_13; + vec4 tmpvar_14; + tmpvar_14 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_12.pos = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = gl_TexCoord[0].xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xlt_i_12.uv[0] = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = gl_TexCoord[1].xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_i_12.uv[1] = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = frag (xlt_i_12); + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xl_retval_13 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = xl_retval_13.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + gl_FragData[0] = tmpvar_22; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-out.txt new file mode 100644 index 000000000..a2c4a9ed3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_GlowConeTap-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _MainTex; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_1 = gl_TexCoord[0]; + tmpvar_2 = gl_TexCoord[1]; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = (((texture2D (_MainTex, tmpvar_1.xy) + texture2D (_MainTex, tmpvar_1.zw)) + texture2D (_MainTex, tmpvar_2.xy)) + texture2D (_MainTex, tmpvar_2.zw)); + c_3.w = tmpvar_4.w; + c_3.xyz = (tmpvar_4.xyz * _Color.xyz); + gl_FragData[0] = (c_3 * _Color.w); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Glow_Downsample-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-ir.txt new file mode 100644 index 000000000..8746d8f8c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-ir.txt @@ -0,0 +1,85 @@ +struct v2f { + vec4 pos; + vec4 uv[4]; +}; +uniform sampler2D _MainTex; +uniform vec4 _Color; +vec4 frag ( + in v2f i_1 +) +{ + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.uv[0].xy); + vec4 tmpvar_4; + tmpvar_4 = tmpvar_3; + c_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, i_1.uv[1].xy); + vec4 tmpvar_6; + tmpvar_6 = (c_2 + tmpvar_5); + c_2 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, i_1.uv[2].xy); + vec4 tmpvar_8; + tmpvar_8 = (c_2 + tmpvar_7); + c_2 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, i_1.uv[3].xy); + vec4 tmpvar_10; + tmpvar_10 = (c_2 + tmpvar_9); + c_2 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = (c_2 / 4.0); + c_2 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = (c_2.xyz * _Color.xyz); + c_2.xyz = tmpvar_12.xyz.xyz; + vec3 tmpvar_13; + tmpvar_13 = (c_2.xyz * (c_2.w + _Color.w)); + c_2.xyz = tmpvar_13.xyz.xyz; + float tmpvar_14; + tmpvar_14 = 0.0; + c_2.w = vec4(tmpvar_14).w; + return c_2; +} + +void main () +{ + v2f xlt_i_15; + vec4 xl_retval_16; + vec4 tmpvar_17; + tmpvar_17 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_15.pos = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = gl_TexCoord[0].xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_i_15.uv[0] = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20 = gl_TexCoord[1].xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_i_15.uv[1] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_TexCoord[2].xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_i_15.uv[2] = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_TexCoord[3].xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_i_15.uv[3] = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = frag (xlt_i_15); + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xl_retval_16 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = xl_retval_16.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_FragData[0] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-out.txt new file mode 100644 index 000000000..cf5547f4e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Glow_Downsample-out.txt @@ -0,0 +1,14 @@ +uniform sampler2D _MainTex; +uniform vec4 _Color; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = ((((texture2D (_MainTex, gl_TexCoord[0].xy) + texture2D (_MainTex, gl_TexCoord[1].xy)) + texture2D (_MainTex, gl_TexCoord[2].xy)) + texture2D (_MainTex, gl_TexCoord[3].xy)) / 4.0); + c_1.w = tmpvar_2.w; + c_1.xyz = (tmpvar_2.xyz * _Color.xyz); + c_1.xyz = (c_1.xyz * (tmpvar_2.w + _Color.w)); + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Grayscale_Effect-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-ir.txt new file mode 100644 index 000000000..c4519bf4d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-ir.txt @@ -0,0 +1,75 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _RampTex; +uniform float _RampOffset; +uniform sampler2D _MainTex; +float Luminance ( + in vec3 c_1 +) +{ + float tmpvar_2; + tmpvar_2 = dot (c_1, vec3(0.22, 0.707, 0.071)); + return tmpvar_2; +} + +vec4 frag ( + in v2f_img i_3 +) +{ + vec4 xlat_var_output_4; + vec2 remap_5; + float grayscale_6; + vec4 original_7; + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, i_3.uv); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + original_7 = tmpvar_9; + float tmpvar_10; + tmpvar_10 = Luminance (original_7.xyz); + float tmpvar_11; + tmpvar_11 = tmpvar_10; + grayscale_6 = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12.y = 0.5; + tmpvar_12.x = (grayscale_6 + _RampOffset); + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + remap_5 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_RampTex, remap_5); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlat_var_output_4 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = original_7.w; + xlat_var_output_4.w = vec4(tmpvar_16).w; + return xlat_var_output_4; +} + +void main () +{ + v2f_img xlt_i_17; + vec4 xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_17.pos = tmpvar_19; + vec2 tmpvar_20; + tmpvar_20 = gl_TexCoord[0].xy; + vec2 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_i_17.uv = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = frag (xlt_i_17); + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_18 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = xl_retval_18.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_FragData[0] = tmpvar_25; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-out.txt new file mode 100644 index 000000000..d7f329860 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Grayscale_Effect-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _RampTex; +uniform float _RampOffset; +uniform sampler2D _MainTex; +void main () +{ + vec4 xlat_var_output_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec2 tmpvar_3; + tmpvar_3.y = 0.5; + tmpvar_3.x = (dot (tmpvar_2.xyz, vec3(0.22, 0.707, 0.071)) + _RampOffset); + xlat_var_output_1.xyz = texture2D (_RampTex, tmpvar_3).xyz; + xlat_var_output_1.w = tmpvar_2.w; + gl_FragData[0] = xlat_var_output_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-CombineDepthNormals-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-ir.txt new file mode 100644 index 000000000..337f11855 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-ir.txt @@ -0,0 +1,143 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform vec4 _ZBufferParams; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +float Linear01Depth ( + in float z_1 +) +{ + return (1.0 / ((_ZBufferParams.x * z_1) + _ZBufferParams.y)); +} + +vec2 EncodeViewNormalStereo ( + in vec3 n_2 +) +{ + vec2 enc_3; + float kScale_4; + float tmpvar_5; + tmpvar_5 = 1.7777; + kScale_4 = tmpvar_5; + vec2 tmpvar_6; + tmpvar_6 = (n_2.xy / (n_2.z + 1.0)); + enc_3 = tmpvar_6; + vec2 tmpvar_7; + tmpvar_7 = (enc_3 / kScale_4); + enc_3 = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = ((enc_3 * 0.5) + 0.5); + enc_3 = tmpvar_8; + return enc_3; +} + +vec2 EncodeFloatRG ( + in float v_9 +) +{ + vec2 enc_10; + float kEncodeBit_11; + vec2 kEncodeMul_12; + vec2 tmpvar_13; + tmpvar_13 = vec2(1.0, 255.0); + kEncodeMul_12 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = 0.00392157; + kEncodeBit_11 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = (kEncodeMul_12 * v_9); + enc_10 = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = fract (enc_10); + vec2 tmpvar_17; + tmpvar_17 = tmpvar_16; + enc_10 = tmpvar_17; + float tmpvar_18; + tmpvar_18 = (enc_10.x - (enc_10.y * kEncodeBit_11)); + enc_10.x = tmpvar_18; + return enc_10; +} + +vec4 EncodeDepthNormal ( + in float depth_19, + in vec3 normal_20 +) +{ + vec4 enc_21; + vec2 tmpvar_22; + tmpvar_22 = EncodeViewNormalStereo (normal_20); + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + enc_21.xy = tmpvar_23.xy.xy; + vec2 tmpvar_24; + tmpvar_24 = EncodeFloatRG (depth_19); + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + enc_21.zw = tmpvar_25.xxxy.zw; + return enc_21; +} + +vec4 frag ( + in v2f i_26 +) +{ + vec4 n_27; + float d_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_CameraDepthTexture, i_26.uv); + float tmpvar_30; + tmpvar_30 = tmpvar_29.x; + d_28 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = texture2D (_CameraNormalsTexture, i_26.uv); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + n_27 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = Linear01Depth (d_28); + float tmpvar_34; + tmpvar_34 = tmpvar_33; + d_28 = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = ((n_27.xyz * 2.0) - 1.0); + n_27.xyz = tmpvar_35.xyz.xyz; + float tmpvar_36; + tmpvar_36 = -(n_27.z); + n_27.z = vec3(tmpvar_36).z; + vec4 tmpvar_37; + if ((d_28 < 0.999985)) { + vec4 tmpvar_38; + tmpvar_38 = EncodeDepthNormal (d_28, n_27.xyz); + tmpvar_37 = tmpvar_38; + } else { + tmpvar_37 = vec4(0.5, 0.5, 1.0, 1.0); + }; + return tmpvar_37; +} + +void main () +{ + v2f xlt_i_39; + vec4 xl_retval_40; + vec4 tmpvar_41; + tmpvar_41 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_39.pos = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = gl_TexCoord[0].xy; + vec2 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_i_39.uv = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = frag (xlt_i_39); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_40 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_40.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_FragData[0] = tmpvar_47; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-out.txt new file mode 100644 index 000000000..2b2b42cbd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-CombineDepthNormals-out.txt @@ -0,0 +1,32 @@ +uniform vec4 _ZBufferParams; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec4 n_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_CameraNormalsTexture, tmpvar_1); + n_2.w = tmpvar_3.w; + float tmpvar_4; + tmpvar_4 = (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, tmpvar_1).x) + _ZBufferParams.y))); + n_2.xyz = ((tmpvar_3.xyz * 2.0) - 1.0); + n_2.z = -(n_2.z); + vec4 tmpvar_5; + if ((tmpvar_4 < 0.999985)) { + vec4 enc_6; + enc_6.xy = ((((n_2.xy / (n_2.z + 1.0)) / 1.7777) * 0.5) + 0.5); + vec2 enc_7; + vec2 tmpvar_8; + tmpvar_8 = fract((vec2(1.0, 255.0) * tmpvar_4)); + enc_7.y = tmpvar_8.y; + enc_7.x = (tmpvar_8.x - (tmpvar_8.y * 0.00392157)); + enc_6.zw = enc_7; + tmpvar_5 = enc_6; + } else { + tmpvar_5 = vec4(0.5, 0.5, 1.0, 1.0); + }; + gl_FragData[0] = tmpvar_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureBlit-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-ir.txt new file mode 100644 index 000000000..80d940d9f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-ir.txt @@ -0,0 +1,60 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; + vec2 texgencoord; +}; +uniform sampler2D _MainTex; +uniform sampler2D _GUIClipTexture; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.texcoord); + vec3 tmpvar_4; + tmpvar_4 = (tmpvar_3.xyz * i_1.color.xyz); + col_2.xyz = tmpvar_4.xyz.xyz; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_GUIClipTexture, i_1.texgencoord); + float tmpvar_6; + tmpvar_6 = (i_1.color.w * tmpvar_5.w); + col_2.w = vec4(tmpvar_6).w; + return col_2; +} + +void main () +{ + v2f xlt_i_7; + vec4 xl_retval_8; + vec4 tmpvar_9; + tmpvar_9 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_7.vertex = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Color.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_i_7.color = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_TexCoord[0].xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_i_7.texcoord = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = gl_TexCoord[1].xy; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_i_7.texgencoord = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = frag (xlt_i_7); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xl_retval_8 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_8.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragData[0] = tmpvar_19; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-out.txt new file mode 100644 index 000000000..db89d2e19 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureBlit-out.txt @@ -0,0 +1,10 @@ +uniform sampler2D _MainTex; +uniform sampler2D _GUIClipTexture; +void main () +{ + vec4 col_1; + col_1.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * gl_Color.xyz); + col_1.w = (gl_Color.w * texture2D (_GUIClipTexture, gl_TexCoord[1].xy).w); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-GUITextureClip-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-ir.txt new file mode 100644 index 000000000..24d20cfb3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-ir.txt @@ -0,0 +1,60 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; + vec2 texgencoord; +}; +uniform sampler2D _MainTex; +uniform sampler2D _GUIClipTexture; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.texcoord); + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_3 * i_1.color); + col_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_GUIClipTexture, i_1.texgencoord); + float tmpvar_6; + tmpvar_6 = (col_2.w * tmpvar_5.w); + col_2.w = vec4(tmpvar_6).w; + return col_2; +} + +void main () +{ + v2f xlt_i_7; + vec4 xl_retval_8; + vec4 tmpvar_9; + tmpvar_9 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_7.vertex = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Color.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_i_7.color = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_TexCoord[0].xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_i_7.texcoord = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = gl_TexCoord[1].xy; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_i_7.texgencoord = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = frag (xlt_i_7); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xl_retval_8 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_8.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragData[0] = tmpvar_19; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-out.txt new file mode 100644 index 000000000..f4d36dc29 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-GUITextureClip-out.txt @@ -0,0 +1,12 @@ +uniform sampler2D _MainTex; +uniform sampler2D _GUIClipTexture; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + col_1.xyz = tmpvar_2.xyz; + col_1.w = (tmpvar_2.w * texture2D (_GUIClipTexture, gl_TexCoord[1].xy).w); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-ir.txt new file mode 100644 index 000000000..10f039d5c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-ir.txt @@ -0,0 +1,51 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _HaloFalloff; +vec4 frag ( + in v2f i_1 +) +{ + float a_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_HaloFalloff, i_1.texcoord); + float tmpvar_4; + tmpvar_4 = tmpvar_3.w; + a_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5.xyz = (i_1.color.xyz * a_2).xyz; + tmpvar_5.w = a_2; + return tmpvar_5; +} + +void main () +{ + v2f xlt_i_6; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_6.vertex = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = gl_Color.xyzw; + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_6.color = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = gl_TexCoord[0].xy; + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_6.texcoord = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = frag (xlt_i_6); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_7 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_7.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-Halo-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-Halo-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassCollectShadows-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-ir.txt new file mode 100644 index 000000000..4eddc7dca --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-ir.txt @@ -0,0 +1,191 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec3 ray; +}; +uniform vec4 _ZBufferParams; +uniform mat4 _View2Shadow3; +uniform mat4 _View2Shadow2; +uniform mat4 _View2Shadow1; +uniform mat4 _View2Shadow; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform sampler2D _CameraDepthTexture; +float unitySampleShadow ( + in vec4 eyePos_1 +) +{ + float shadow_2; + vec4 coord_3; + vec4 weights_4; + vec4 far_5; + vec4 near_6; + float z_7; + vec3 sc3_8; + vec3 sc2_9; + vec3 sc1_10; + vec3 sc0_11; + vec3 tmpvar_12; + tmpvar_12 = (_View2Shadow * eyePos_1).xyz; + sc0_11 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (_View2Shadow1 * eyePos_1).xyz; + sc1_10 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = (_View2Shadow2 * eyePos_1).xyz; + sc2_9 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (_View2Shadow3 * eyePos_1).xyz; + sc3_8 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = eyePos_1.z; + z_7 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = vec4(z_7); + bvec4 tmpvar_18; + tmpvar_18 = greaterThanEqual (tmpvar_17, _LightSplitsNear); + vec4 tmpvar_19; + tmpvar_19 = vec4(tmpvar_18).xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + near_6 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(z_7); + bvec4 tmpvar_22; + tmpvar_22 = lessThan (tmpvar_21, _LightSplitsFar); + vec4 tmpvar_23; + tmpvar_23 = vec4(tmpvar_22).xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + far_5 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (near_6 * far_5); + weights_4 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26.w = 1.0; + tmpvar_26.xyz = ((((sc0_11 * weights_4.x) + (sc1_10 * weights_4.y)) + (sc2_9 * weights_4.z)) + (sc3_8 * weights_4.w)).xyz; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + coord_3 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_ShadowMapTexture, coord_3.xy); + float tmpvar_29; + if ((tmpvar_28.x < coord_3.z)) { + tmpvar_29 = _LightShadowData.x; + } else { + tmpvar_29 = 1.0; + }; + float tmpvar_30; + tmpvar_30 = tmpvar_29; + shadow_2 = tmpvar_30; + return shadow_2; +} + +float Linear01Depth ( + in float z_31 +) +{ + return (1.0 / ((_ZBufferParams.x * z_31) + _ZBufferParams.y)); +} + +vec2 EncodeFloatRG ( + in float v_32 +) +{ + vec2 enc_33; + float kEncodeBit_34; + vec2 kEncodeMul_35; + vec2 tmpvar_36; + tmpvar_36 = vec2(1.0, 255.0); + kEncodeMul_35 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.00392157; + kEncodeBit_34 = tmpvar_37; + vec2 tmpvar_38; + tmpvar_38 = (kEncodeMul_35 * v_32); + enc_33 = tmpvar_38; + vec2 tmpvar_39; + tmpvar_39 = fract (enc_33); + vec2 tmpvar_40; + tmpvar_40 = tmpvar_39; + enc_33 = tmpvar_40; + float tmpvar_41; + tmpvar_41 = (enc_33.x - (enc_33.y * kEncodeBit_34)); + enc_33.x = tmpvar_41; + return enc_33; +} + +vec4 frag ( + in v2f i_42 +) +{ + vec4 res_43; + float shadow_44; + vec4 vpos_45; + float depth_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_CameraDepthTexture, i_42.uv); + float tmpvar_48; + tmpvar_48 = tmpvar_47.x; + depth_46 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = Linear01Depth (depth_46); + float tmpvar_50; + tmpvar_50 = tmpvar_49; + depth_46 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 1.0; + tmpvar_51.xyz = (i_42.ray * depth_46).xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + vpos_45 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = unitySampleShadow (vpos_45); + float tmpvar_54; + tmpvar_54 = tmpvar_53; + shadow_44 = tmpvar_54; + float tmpvar_55; + tmpvar_55 = shadow_44; + res_43.x = tmpvar_55; + float tmpvar_56; + tmpvar_56 = 1.0; + res_43.y = vec2(tmpvar_56).y; + vec2 tmpvar_57; + tmpvar_57 = EncodeFloatRG ((1.0 - depth_46)); + vec2 tmpvar_58; + tmpvar_58 = tmpvar_57; + res_43.zw = tmpvar_58.xxxy.zw; + return res_43; +} + +void main () +{ + v2f xlt_i_59; + vec4 xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_59.pos = tmpvar_61; + vec2 tmpvar_62; + tmpvar_62 = gl_TexCoord[0].xy; + vec2 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_i_59.uv = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = gl_TexCoord[1].xyz; + vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_i_59.ray = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = frag (xlt_i_59); + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xl_retval_60 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = xl_retval_60.xyzw; + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + gl_FragData[0] = tmpvar_69; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-out.txt new file mode 100644 index 000000000..cc27c68fd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassCollectShadows-out.txt @@ -0,0 +1,42 @@ +uniform vec4 _ZBufferParams; +uniform mat4 _View2Shadow3; +uniform mat4 _View2Shadow2; +uniform mat4 _View2Shadow1; +uniform mat4 _View2Shadow; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform sampler2D _CameraDepthTexture; +void main () +{ + vec4 res_1; + float tmpvar_2; + tmpvar_2 = (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, gl_TexCoord[0].xy).x) + _ZBufferParams.y))); + vec4 tmpvar_3; + tmpvar_3.w = 1.0; + tmpvar_3.xyz = (gl_TexCoord[1].xyz * tmpvar_2); + vec4 tmpvar_4; + tmpvar_4 = (vec4(greaterThanEqual (tmpvar_3.zzzz, _LightSplitsNear)) * vec4(lessThan (tmpvar_3.zzzz, _LightSplitsFar))); + vec4 tmpvar_5; + tmpvar_5.w = 1.0; + tmpvar_5.xyz = (((((_View2Shadow * tmpvar_3).xyz * tmpvar_4.x) + ((_View2Shadow1 * tmpvar_3).xyz * tmpvar_4.y)) + ((_View2Shadow2 * tmpvar_3).xyz * tmpvar_4.z)) + ((_View2Shadow3 * tmpvar_3).xyz * tmpvar_4.w)); + vec4 tmpvar_6; + tmpvar_6 = texture2D (_ShadowMapTexture, tmpvar_5.xy); + float tmpvar_7; + if ((tmpvar_6.x < tmpvar_5.z)) { + tmpvar_7 = _LightShadowData.x; + } else { + tmpvar_7 = 1.0; + }; + res_1.x = tmpvar_7; + res_1.y = 1.0; + vec2 enc_8; + vec2 tmpvar_9; + tmpvar_9 = fract((vec2(1.0, 255.0) * (1.0 - tmpvar_2))); + enc_8.y = tmpvar_9.y; + enc_8.x = (tmpvar_9.x - (tmpvar_9.y * 0.00392157)); + res_1.zw = enc_8; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Internal-PrePassLighting-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-ir.txt new file mode 100644 index 000000000..136897886 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-ir.txt @@ -0,0 +1,408 @@ +struct v2f { + vec4 pos; + vec4 uv; + vec3 ray; +}; +uniform vec4 unity_LightmapFade; +uniform vec4 _ZBufferParams; +uniform mat4 _ViewToCookie; +uniform mat4 _View2Shadow; +uniform samplerCube _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightShadowData; +uniform vec4 _LightPositionRange; +uniform vec4 _LightPos; +uniform vec4 _LightColor; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +mat3 xll_constructMat3 ( + in mat4 m_33 +) +{ + vec3 tmpvar_34; + tmpvar_34 = m_33[0].xyz; + vec3 tmpvar_35; + tmpvar_35 = m_33[1].xyz; + vec3 tmpvar_36; + tmpvar_36 = m_33[2].xyz; + mat3 tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_34; + tmpvar_37[0] = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = tmpvar_35; + tmpvar_37[1] = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = tmpvar_36; + tmpvar_37[2] = tmpvar_40; + return tmpvar_37; +} + +float Luminance ( + in vec3 c_41 +) +{ + float tmpvar_42; + tmpvar_42 = dot (c_41, vec3(0.22, 0.707, 0.071)); + return tmpvar_42; +} + +float Linear01Depth ( + in float z_43 +) +{ + return (1.0 / ((_ZBufferParams.x * z_43) + _ZBufferParams.y)); +} + +float DecodeFloatRGBA ( + in vec4 enc_44 +) +{ + vec4 kDecodeDot_45; + vec4 tmpvar_46; + tmpvar_46 = vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09); + kDecodeDot_45 = tmpvar_46; + float tmpvar_47; + tmpvar_47 = dot (enc_44, kDecodeDot_45); + return tmpvar_47; +} + +float SampleCubeDistance ( + in vec3 vec_48 +) +{ + vec4 packDist_49; + vec4 tmpvar_50; + tmpvar_50 = textureCube (_ShadowMapTexture, vec_48); + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + packDist_49 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = DecodeFloatRGBA (packDist_49); + return tmpvar_52; +} + +float unitySampleShadow ( + in vec3 vec_53, + in float mydist_54 +) +{ + float dist_55; + float tmpvar_56; + tmpvar_56 = SampleCubeDistance (vec_53); + float tmpvar_57; + tmpvar_57 = tmpvar_56; + dist_55 = tmpvar_57; + float tmpvar_58; + if ((dist_55 < mydist_54)) { + tmpvar_58 = _LightShadowData.x; + } else { + tmpvar_58 = 1.0; + }; + return tmpvar_58; +} + +float ComputeShadow ( + in vec3 vec_59, + in vec2 uv_60 +) +{ + float mydist_61; + float fade_62; + float tmpvar_63; + tmpvar_63 = ((vec_59.z * _LightShadowData.z) + _LightShadowData.w); + fade_62 = tmpvar_63; + float tmpvar_64; + tmpvar_64 = xll_saturate (fade_62); + float tmpvar_65; + tmpvar_65 = tmpvar_64; + fade_62 = tmpvar_65; + mat3 tmpvar_66; + tmpvar_66 = xll_constructMat3 (_View2Shadow); + vec3 tmpvar_67; + tmpvar_67 = (tmpvar_66 * vec_59); + vec_59 = tmpvar_67; + float tmpvar_68; + tmpvar_68 = length (vec_59); + float tmpvar_69; + tmpvar_69 = (tmpvar_68 * _LightPositionRange.w); + mydist_61 = tmpvar_69; + float tmpvar_70; + tmpvar_70 = (mydist_61 * 0.97); + mydist_61 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = unitySampleShadow (vec_59, mydist_61); + return tmpvar_71; + return 1.0; +} + +vec4 frag ( + in v2f i_72 +) +{ + float fade_73; + vec4 res_74; + float spec_75; + vec3 h_76; + float diff_77; + float atten_78; + float att_79; + vec3 lightDir_80; + vec3 tolight_81; + vec3 vpos_82; + float depth_83; + vec3 normal_84; + vec4 nspec_85; + vec2 uv_86; + vec3 tmpvar_87; + tmpvar_87 = (i_72.ray * (_ProjectionParams.z / i_72.ray.z)); + i_72.ray = tmpvar_87; + vec2 tmpvar_88; + tmpvar_88 = (i_72.uv.xy / i_72.uv.w); + uv_86 = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = texture2D (_CameraNormalsTexture, uv_86); + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + nspec_85 = tmpvar_90; + vec3 tmpvar_91; + tmpvar_91 = ((nspec_85.xyz * 2.0) - 1.0); + normal_84 = tmpvar_91; + vec3 tmpvar_92; + tmpvar_92 = normalize (normal_84); + vec3 tmpvar_93; + tmpvar_93 = tmpvar_92; + normal_84 = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = texture2D (_CameraDepthTexture, uv_86); + float tmpvar_95; + tmpvar_95 = tmpvar_94.x; + depth_83 = tmpvar_95; + float tmpvar_96; + tmpvar_96 = Linear01Depth (depth_83); + float tmpvar_97; + tmpvar_97 = tmpvar_96; + depth_83 = tmpvar_97; + vec3 tmpvar_98; + tmpvar_98 = (i_72.ray * depth_83); + vpos_82 = tmpvar_98; + vec3 tmpvar_99; + tmpvar_99 = (_LightPos.xyz - vpos_82); + tolight_81 = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = normalize (tolight_81); + vec3 tmpvar_101; + tmpvar_101 = tmpvar_100; + lightDir_80 = tmpvar_101; + float tmpvar_102; + tmpvar_102 = dot (tolight_81, tolight_81); + float tmpvar_103; + tmpvar_103 = (tmpvar_102 * _LightPos.w); + att_79 = tmpvar_103; + vec2 tmpvar_104; + tmpvar_104 = vec2(att_79); + vec2 tmpvar_105; + tmpvar_105 = tmpvar_104.xy; + vec4 tmpvar_106; + tmpvar_106 = texture2D (_LightTextureB0, tmpvar_105); + float tmpvar_107; + tmpvar_107 = tmpvar_106.w; + atten_78 = tmpvar_107; + float tmpvar_108; + tmpvar_108 = ComputeShadow (-(tolight_81), uv_86); + float tmpvar_109; + tmpvar_109 = (atten_78 * tmpvar_108); + atten_78 = tmpvar_109; + vec4 tmpvar_110; + tmpvar_110.w = 1.0; + tmpvar_110.xyz = vpos_82.xyz; + vec4 tmpvar_111; + tmpvar_111 = textureCube (_LightTexture0, (_ViewToCookie * tmpvar_110).xyz); + float tmpvar_112; + tmpvar_112 = (atten_78 * tmpvar_111.w); + atten_78 = tmpvar_112; + float tmpvar_113; + tmpvar_113 = dot (lightDir_80, normal_84); + float tmpvar_114; + tmpvar_114 = max (0.0, tmpvar_113); + float tmpvar_115; + tmpvar_115 = tmpvar_114; + diff_77 = tmpvar_115; + vec3 tmpvar_116; + tmpvar_116 = normalize (vpos_82); + vec3 tmpvar_117; + tmpvar_117 = normalize ((lightDir_80 - tmpvar_116)); + vec3 tmpvar_118; + tmpvar_118 = tmpvar_117; + h_76 = tmpvar_118; + float tmpvar_119; + tmpvar_119 = dot (h_76, normal_84); + float tmpvar_120; + tmpvar_120 = max (0.0, tmpvar_119); + float tmpvar_121; + tmpvar_121 = pow (tmpvar_120, (nspec_85.w * 128.0)); + float tmpvar_122; + tmpvar_122 = tmpvar_121; + spec_75 = tmpvar_122; + float tmpvar_123; + tmpvar_123 = xll_saturate (atten_78); + float tmpvar_124; + tmpvar_124 = (spec_75 * tmpvar_123); + spec_75 = tmpvar_124; + vec3 tmpvar_125; + tmpvar_125 = (_LightColor.xyz * (diff_77 * atten_78)); + res_74.xyz = tmpvar_125.xyz.xyz; + float tmpvar_126; + tmpvar_126 = Luminance (_LightColor.xyz); + float tmpvar_127; + tmpvar_127 = (spec_75 * tmpvar_126); + res_74.w = vec4(tmpvar_127).w; + float tmpvar_128; + tmpvar_128 = ((vpos_82.z * unity_LightmapFade.z) + unity_LightmapFade.w); + fade_73 = tmpvar_128; + float tmpvar_129; + tmpvar_129 = xll_saturate ((1.0 - fade_73)); + vec4 tmpvar_130; + tmpvar_130 = (res_74 * tmpvar_129); + res_74 = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131 = exp2 (-(res_74)); + return tmpvar_131; +} + +void main () +{ + v2f xlt_i_132; + vec4 xl_retval_133; + vec4 tmpvar_134; + tmpvar_134 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_132.pos = tmpvar_134; + vec4 tmpvar_135; + tmpvar_135 = gl_TexCoord[0].xyzw; + vec4 tmpvar_136; + tmpvar_136 = tmpvar_135; + xlt_i_132.uv = tmpvar_136; + vec3 tmpvar_137; + tmpvar_137 = gl_TexCoord[1].xyz; + vec3 tmpvar_138; + tmpvar_138 = tmpvar_137; + xlt_i_132.ray = tmpvar_138; + vec4 tmpvar_139; + tmpvar_139 = frag (xlt_i_132); + vec4 tmpvar_140; + tmpvar_140 = tmpvar_139; + xl_retval_133 = tmpvar_140; + vec4 tmpvar_141; + tmpvar_141 = xl_retval_133.xyzw; + vec4 tmpvar_142; + tmpvar_142 = tmpvar_141; + gl_FragData[0] = tmpvar_142; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-out.txt new file mode 100644 index 000000000..c6c42ce7a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Internal-PrePassLighting-out.txt @@ -0,0 +1,68 @@ +uniform vec4 unity_LightmapFade; +uniform vec4 _ZBufferParams; +uniform mat4 _ViewToCookie; +uniform mat4 _View2Shadow; +uniform samplerCube _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightShadowData; +uniform vec4 _LightPositionRange; +uniform vec4 _LightPos; +uniform vec4 _LightColor; +uniform sampler2D _CameraNormalsTexture; +uniform sampler2D _CameraDepthTexture; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec4 res_3; + float atten_4; + vec3 lightDir_5; + vec3 normal_6; + vec2 tmpvar_7; + tmpvar_7 = (tmpvar_1.xy / tmpvar_1.w); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_CameraNormalsTexture, tmpvar_7); + normal_6 = normalize(((tmpvar_8.xyz * 2.0) - 1.0)); + vec3 tmpvar_9; + tmpvar_9 = ((tmpvar_2 * (_ProjectionParams.z / tmpvar_2.z)) * (1.0/(((_ZBufferParams.x * texture2D (_CameraDepthTexture, tmpvar_7).x) + _ZBufferParams.y)))); + vec3 tmpvar_10; + tmpvar_10 = (_LightPos.xyz - tmpvar_9); + lightDir_5 = normalize(tmpvar_10); + atten_4 = texture2D (_LightTextureB0, vec2((dot (tmpvar_10, tmpvar_10) * _LightPos.w))).w; + vec3 vec_11; + vec_11 = -(tmpvar_10); + mat3 tmpvar_12; + tmpvar_12[0] = _View2Shadow[0].xyz; + tmpvar_12[1] = _View2Shadow[1].xyz; + tmpvar_12[2] = _View2Shadow[2].xyz; + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * vec_11); + vec_11 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = ((sqrt(dot (tmpvar_13, tmpvar_13)) * _LightPositionRange.w) * 0.97); + float tmpvar_15; + tmpvar_15 = dot (textureCube (_ShadowMapTexture, tmpvar_13), vec4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09)); + float tmpvar_16; + if ((tmpvar_15 < tmpvar_14)) { + tmpvar_16 = _LightShadowData.x; + } else { + tmpvar_16 = 1.0; + }; + vec4 tmpvar_17; + tmpvar_17.w = 1.0; + tmpvar_17.xyz = tmpvar_9; + float tmpvar_18; + tmpvar_18 = ((atten_4 * tmpvar_16) * textureCube (_LightTexture0, (_ViewToCookie * tmpvar_17).xyz).w); + atten_4 = tmpvar_18; + res_3.xyz = (_LightColor.xyz * (max (0.0, dot (lightDir_5, normal_6)) * tmpvar_18)); + res_3.w = ((pow (max (0.0, dot (normalize((lightDir_5 - normalize(tmpvar_9))), normal_6)), (tmpvar_8.w * 128.0)) * clamp (tmpvar_18, 0.0, 1.0)) * dot (_LightColor.xyz, vec3(0.22, 0.707, 0.071))); + vec4 tmpvar_19; + tmpvar_19 = (res_3 * clamp ((1.0 - ((tmpvar_9.z * unity_LightmapFade.z) + unity_LightmapFade.w)), 0.0, 1.0)); + res_3 = tmpvar_19; + gl_FragData[0] = exp2(-(tmpvar_19)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_RGB-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-ir.txt new file mode 100644 index 000000000..93e89164c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-ir.txt @@ -0,0 +1,75 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec2 uvg; + vec2 uvs; +}; +uniform sampler2D _ScratchTex; +uniform sampler2D _MainTex; +uniform vec4 _Intensity; +uniform sampler2D _GrainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec3 scratch_2; + vec3 grain_3; + vec4 col_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, i_1.uv); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + col_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_GrainTex, i_1.uvg); + vec3 tmpvar_8; + tmpvar_8 = ((tmpvar_7.xyz * 2.0) - 1.0); + grain_3 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = (col_4.xyz + (grain_3 * _Intensity.x)); + col_4.xyz = tmpvar_9.xyz.xyz; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_ScratchTex, i_1.uvs); + vec3 tmpvar_11; + tmpvar_11 = ((tmpvar_10.xyz * 2.0) - 1.0); + scratch_2 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = (col_4.xyz + (scratch_2 * _Intensity.y)); + col_4.xyz = tmpvar_12.xyz.xyz; + return col_4; +} + +void main () +{ + v2f xlt_i_13; + vec4 xl_retval_14; + vec4 tmpvar_15; + tmpvar_15 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_13.pos = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = gl_TexCoord[0].xy; + vec2 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_i_13.uv = tmpvar_17; + vec2 tmpvar_18; + tmpvar_18 = gl_TexCoord[1].xy; + vec2 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_i_13.uvg = tmpvar_19; + vec2 tmpvar_20; + tmpvar_20 = gl_TexCoord[2].xy; + vec2 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_i_13.uvs = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = frag (xlt_i_13); + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_14 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = xl_retval_14.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_FragData[0] = tmpvar_25; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-out.txt new file mode 100644 index 000000000..1d735bf72 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_RGB-out.txt @@ -0,0 +1,15 @@ +uniform sampler2D _ScratchTex; +uniform sampler2D _MainTex; +uniform vec4 _Intensity; +uniform sampler2D _GrainTex; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_1.w = tmpvar_2.w; + col_1.xyz = (tmpvar_2.xyz + (((texture2D (_GrainTex, gl_TexCoord[1].xy).xyz * 2.0) - 1.0) * _Intensity.x)); + col_1.xyz = (col_1.xyz + (((texture2D (_ScratchTex, gl_TexCoord[2].xy).xyz * 2.0) - 1.0) * _Intensity.y)); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Noise_Shader_YUV-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-ir.txt new file mode 100644 index 000000000..524345021 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-ir.txt @@ -0,0 +1,96 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec2 uvg; + vec2 uvs; +}; +uniform sampler2D _ScratchTex; +uniform sampler2D _MainTex; +uniform vec4 _Intensity; +uniform sampler2D _GrainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec3 scratch_2; + vec3 grain_3; + vec3 yuv_4; + vec4 col_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, i_1.uv); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + col_5 = tmpvar_7; + float tmpvar_8; + tmpvar_8 = dot (col_5.xyz, vec3(0.299, 0.587, 0.114)); + float tmpvar_9; + tmpvar_9 = tmpvar_8; + yuv_4.x = tmpvar_9; + float tmpvar_10; + tmpvar_10 = ((col_5.z - yuv_4.x) * 0.492); + yuv_4.y = vec2(tmpvar_10).y; + float tmpvar_11; + tmpvar_11 = ((col_5.x - yuv_4.x) * 0.877); + yuv_4.z = vec3(tmpvar_11).z; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_GrainTex, i_1.uvg); + vec3 tmpvar_13; + tmpvar_13 = ((tmpvar_12.xyz * 2.0) - 1.0); + grain_3 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = (yuv_4.xyz + (grain_3 * _Intensity.x)); + yuv_4 = tmpvar_14.xyz.xyz; + float tmpvar_15; + tmpvar_15 = ((yuv_4.z * 1.14) + yuv_4.x); + col_5.x = tmpvar_15; + float tmpvar_16; + tmpvar_16 = (((yuv_4.z * -(0.581)) + (yuv_4.y * -(0.395))) + yuv_4.x); + col_5.y = vec2(tmpvar_16).y; + float tmpvar_17; + tmpvar_17 = ((yuv_4.y * 2.032) + yuv_4.x); + col_5.z = vec3(tmpvar_17).z; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_ScratchTex, i_1.uvs); + vec3 tmpvar_19; + tmpvar_19 = ((tmpvar_18.xyz * 2.0) - 1.0); + scratch_2 = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = (col_5.xyz + (scratch_2 * _Intensity.y)); + col_5.xyz = tmpvar_20.xyz.xyz; + return col_5; +} + +void main () +{ + v2f xlt_i_21; + vec4 xl_retval_22; + vec4 tmpvar_23; + tmpvar_23 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_21.pos = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = gl_TexCoord[0].xy; + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_i_21.uv = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = gl_TexCoord[1].xy; + vec2 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_i_21.uvg = tmpvar_27; + vec2 tmpvar_28; + tmpvar_28 = gl_TexCoord[2].xy; + vec2 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_i_21.uvs = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = frag (xlt_i_21); + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xl_retval_22 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = xl_retval_22.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_FragData[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-out.txt new file mode 100644 index 000000000..acdb091e7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Noise_Shader_YUV-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D _ScratchTex; +uniform sampler2D _MainTex; +uniform vec4 _Intensity; +uniform sampler2D _GrainTex; +void main () +{ + vec3 yuv_1; + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_2.w = tmpvar_3.w; + yuv_1.x = dot (tmpvar_3.xyz, vec3(0.299, 0.587, 0.114)); + yuv_1.y = ((tmpvar_3.z - yuv_1.x) * 0.492); + yuv_1.z = ((tmpvar_3.x - yuv_1.x) * 0.877); + yuv_1 = (yuv_1 + (((texture2D (_GrainTex, gl_TexCoord[1].xy).xyz * 2.0) - 1.0) * _Intensity.x)); + col_2.x = ((yuv_1.z * 1.14) + yuv_1.x); + col_2.y = (((yuv_1.z * -0.581) + (yuv_1.y * -0.395)) + yuv_1.x); + col_2.z = ((yuv_1.y * 2.032) + yuv_1.x); + col_2.xyz = (col_2.xyz + (((texture2D (_ScratchTex, gl_TexCoord[2].xy).xyz * 2.0) - 1.0) * _Intensity.y)); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Sepiatone_Effect-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-ir.txt new file mode 100644 index 000000000..272fffcf2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-ir.txt @@ -0,0 +1,59 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f_img i_1 +) +{ + vec4 xlat_var_output_2; + vec4 sepiaConvert_3; + float Y_4; + vec4 original_5; + vec4 tmpvar_6; + tmpvar_6 = vec4(0.191, -0.054, -0.221, 0.0); + sepiaConvert_3 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, i_1.uv); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + original_5 = tmpvar_8; + float tmpvar_9; + tmpvar_9 = dot (vec3(0.299, 0.587, 0.114), original_5.xyz); + float tmpvar_10; + tmpvar_10 = tmpvar_9; + Y_4 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = (sepiaConvert_3 + Y_4); + xlat_var_output_2 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = original_5.w; + xlat_var_output_2.w = vec4(tmpvar_12).w; + return xlat_var_output_2; +} + +void main () +{ + v2f_img xlt_i_13; + vec4 xl_retval_14; + vec4 tmpvar_15; + tmpvar_15 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_13.pos = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = gl_TexCoord[0].xy; + vec2 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_i_13.uv = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = frag (xlt_i_13); + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xl_retval_14 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20 = xl_retval_14.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + gl_FragData[0] = tmpvar_21; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-out.txt new file mode 100644 index 000000000..3df91ce13 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Sepiatone_Effect-out.txt @@ -0,0 +1,11 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 xlat_var_output_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + xlat_var_output_1.xyz = (vec4(0.191, -0.054, -0.221, 0.0) + dot (vec3(0.299, 0.587, 0.114), tmpvar_2.xyz)).xyz; + xlat_var_output_1.w = tmpvar_2.w; + gl_FragData[0] = xlat_var_output_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Shadow-ScreenBlur-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-ir.txt new file mode 100644 index 000000000..fd092e11f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-ir.txt @@ -0,0 +1,217 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform vec4 unity_ShadowBlurParams; +uniform sampler2D _MainTex; +uniform vec4 _BlurOffsets[8]; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec4 frag ( + in v2f_img i_33 +) +{ + float shadow_34; + float diff_35; + float sampleDist_36; + vec4 sample_37; + int i_1_38; + float diffTolerance_39; + float radius_40; + float dist_41; + vec4 mask_42; + vec4 coord_43; + int tmpvar_44; + tmpvar_44 = 0; + i_1_38 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.zw = vec2(0.0, 0.0); + tmpvar_45.xy = i_33.uv.xy; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + coord_43 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_MainTex, coord_43.xy); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + mask_42 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = (mask_42.z + (mask_42.w / 255.0)); + dist_41 = tmpvar_49; + float tmpvar_50; + tmpvar_50 = xll_saturate ((unity_ShadowBlurParams.y / (1.0 - dist_41))); + float tmpvar_51; + tmpvar_51 = tmpvar_50; + radius_40 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = unity_ShadowBlurParams.x; + diffTolerance_39 = tmpvar_52; + vec2 tmpvar_53; + tmpvar_53 = (mask_42.xy * diffTolerance_39); + mask_42.xy = tmpvar_53.xy.xy; + while (true) { + if (!((i_1_38 < 8))) { + break; + }; + vec4 tmpvar_54; + tmpvar_54 = texture2D (_MainTex, (coord_43 + (radius_40 * _BlurOffsets[i_1_38])).xy); + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + sample_37 = tmpvar_55; + float tmpvar_56; + tmpvar_56 = (sample_37.z + (sample_37.w / 255.0)); + sampleDist_36 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = (dist_41 - sampleDist_36); + diff_35 = tmpvar_57; + float tmpvar_58; + tmpvar_58 = abs (diff_35); + float tmpvar_59; + tmpvar_59 = xll_saturate ((diffTolerance_39 - tmpvar_58)); + float tmpvar_60; + tmpvar_60 = tmpvar_59; + diff_35 = tmpvar_60; + vec2 tmpvar_61; + tmpvar_61 = (mask_42.xy + (diff_35 * sample_37.xy)); + mask_42.xy = tmpvar_61.xy.xy; + int _post_incdec_tmp_62; + _post_incdec_tmp_62 = i_1_38; + int tmpvar_63; + tmpvar_63 = (i_1_38 + 1); + i_1_38 = tmpvar_63; + }; + float tmpvar_64; + tmpvar_64 = (mask_42.x / mask_42.y); + shadow_34 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = vec4(shadow_34); + return tmpvar_65; +} + +void main () +{ + v2f_img xlt_i_66; + vec4 xl_retval_67; + vec4 tmpvar_68; + tmpvar_68 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_66.pos = tmpvar_68; + vec2 tmpvar_69; + tmpvar_69 = gl_TexCoord[0].xy; + vec2 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_i_66.uv = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = frag (xlt_i_66); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xl_retval_67 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = xl_retval_67.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + gl_FragData[0] = tmpvar_74; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-out.txt new file mode 100644 index 000000000..94d6b3c63 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Shadow-ScreenBlur-out.txt @@ -0,0 +1,44 @@ +uniform vec4 unity_ShadowBlurParams; +uniform sampler2D _MainTex; +uniform vec4 _BlurOffsets[8]; +void main () +{ + float radius_1; + vec4 mask_2; + vec4 tmpvar_3; + tmpvar_3.zw = vec2(0.0, 0.0); + tmpvar_3.xy = gl_TexCoord[0].xy; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_3.xy); + mask_2.zw = tmpvar_4.zw; + float tmpvar_5; + tmpvar_5 = (tmpvar_4.z + (tmpvar_4.w / 255.0)); + radius_1 = clamp ((unity_ShadowBlurParams.y / (1.0 - tmpvar_5)), 0.0, 1.0); + mask_2.xy = (tmpvar_4.xy * unity_ShadowBlurParams.x); + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[0])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_6.z + (tmpvar_6.w / 255.0))))), 0.0, 1.0) * tmpvar_6.xy)); + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[1])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_7.z + (tmpvar_7.w / 255.0))))), 0.0, 1.0) * tmpvar_7.xy)); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[2])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_8.z + (tmpvar_8.w / 255.0))))), 0.0, 1.0) * tmpvar_8.xy)); + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[3])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_9.z + (tmpvar_9.w / 255.0))))), 0.0, 1.0) * tmpvar_9.xy)); + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[4])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_10.z + (tmpvar_10.w / 255.0))))), 0.0, 1.0) * tmpvar_10.xy)); + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[5])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_11.z + (tmpvar_11.w / 255.0))))), 0.0, 1.0) * tmpvar_11.xy)); + vec4 tmpvar_12; + tmpvar_12 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[6])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_12.z + (tmpvar_12.w / 255.0))))), 0.0, 1.0) * tmpvar_12.xy)); + vec4 tmpvar_13; + tmpvar_13 = texture2D (_MainTex, (tmpvar_3 + (radius_1 * _BlurOffsets[7])).xy); + mask_2.xy = (mask_2.xy + (clamp ((unity_ShadowBlurParams.x - abs((tmpvar_5 - (tmpvar_13.z + (tmpvar_13.w / 255.0))))), 0.0, 1.0) * tmpvar_13.xy)); + gl_FragData[0] = vec4((mask_2.x / mask_2.y)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthNTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-ir.txt new file mode 100644 index 000000000..f313fc5b7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-ir.txt @@ -0,0 +1,132 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex; +uniform sampler2D _CameraDepthNormalsTexture; +vec3 DecodeViewNormalStereo ( + in vec4 enc4_1 +) +{ + vec3 n_2; + float g_3; + vec3 nn_4; + float kScale_5; + float tmpvar_6; + tmpvar_6 = 1.7777; + kScale_5 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7.z = 0.0; + tmpvar_7.x = (2.0 * kScale_5); + tmpvar_7.y = (2.0 * kScale_5); + vec3 tmpvar_8; + tmpvar_8.z = 1.0; + tmpvar_8.x = -(kScale_5); + tmpvar_8.y = -(kScale_5); + vec3 tmpvar_9; + tmpvar_9 = ((enc4_1.xyz * tmpvar_7) + tmpvar_8); + nn_4 = tmpvar_9; + float tmpvar_10; + tmpvar_10 = dot (nn_4.xyz, nn_4.xyz); + float tmpvar_11; + tmpvar_11 = (2.0 / tmpvar_10); + g_3 = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = (g_3 * nn_4.xy); + n_2.xy = tmpvar_12.xy.xy; + float tmpvar_13; + tmpvar_13 = (g_3 - 1.0); + n_2.z = vec3(tmpvar_13).z; + return n_2; +} + +float DecodeFloatRG ( + in vec2 enc_14 +) +{ + vec2 kDecodeDot_15; + vec2 tmpvar_16; + tmpvar_16 = vec2(1.0, 0.00392157); + kDecodeDot_15 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (enc_14, kDecodeDot_15); + return tmpvar_17; +} + +void DecodeDepthNormal ( + in vec4 enc_18, + out float depth_19, + out vec3 normal_20 +) +{ + float tmpvar_21; + tmpvar_21 = DecodeFloatRG (enc_18.zw); + float tmpvar_22; + tmpvar_22 = tmpvar_21; + depth_19 = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = DecodeViewNormalStereo (enc_18); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + normal_20 = tmpvar_24; +} + +vec4 frag ( + in v2f_img i_25 +) +{ + vec4 col_26; + vec3 n_27; + float z_28; + vec4 depth_29; + vec4 tex_30; + vec4 tmpvar_31; + tmpvar_31 = texture2D (_MainTex, i_25.uv); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + tex_30 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = texture2D (_CameraDepthNormalsTexture, i_25.uv); + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + depth_29 = tmpvar_34; + DecodeDepthNormal (depth_29, z_28, n_27); + float tmpvar_35; + tmpvar_35 = z_28; + col_26.x = tmpvar_35; + float tmpvar_36; + tmpvar_36 = ((n_27.x * 0.5) + 0.5); + col_26.y = vec2(tmpvar_36).y; + float tmpvar_37; + tmpvar_37 = ((n_27.y * 0.5) + 0.5); + col_26.z = vec3(tmpvar_37).z; + float tmpvar_38; + tmpvar_38 = tex_30.w; + col_26.w = vec4(tmpvar_38).w; + return col_26; +} + +void main () +{ + v2f_img xlt_i_39; + vec4 xl_retval_40; + vec4 tmpvar_41; + tmpvar_41 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_39.pos = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = gl_TexCoord[0].xy; + vec2 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_i_39.uv = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = frag (xlt_i_39); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_40 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_40.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_FragData[0] = tmpvar_47; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-out.txt new file mode 100644 index 000000000..533af0d7a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthNTexture-out.txt @@ -0,0 +1,23 @@ +uniform sampler2D _MainTex; +uniform sampler2D _CameraDepthNormalsTexture; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_CameraDepthNormalsTexture, tmpvar_1); + vec3 n_4; + vec3 tmpvar_5; + tmpvar_5 = ((tmpvar_3.xyz * vec3(3.5554, 3.5554, 0.0)) + vec3(-1.7777, -1.7777, 1.0)); + float tmpvar_6; + tmpvar_6 = (2.0 / dot (tmpvar_5, tmpvar_5)); + n_4.xy = (tmpvar_6 * tmpvar_5.xy); + n_4.z = (tmpvar_6 - 1.0); + col_2.x = dot (tmpvar_3.zw, vec2(1.0, 0.00392157)); + col_2.y = ((n_4.x * 0.5) + 0.5); + col_2.z = ((n_4.y * 0.5) + 0.5); + col_2.w = texture2D (_MainTex, tmpvar_1).w; + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_ShowDepthTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-ir.txt new file mode 100644 index 000000000..152809b83 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-ir.txt @@ -0,0 +1,72 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform vec4 _ZBufferParams; +uniform sampler2D _MainTex; +uniform sampler2D _CameraDepthTexture; +float LinearEyeDepth ( + in float z_1 +) +{ + return (1.0 / ((_ZBufferParams.z * z_1) + _ZBufferParams.w)); +} + +vec4 frag ( + in v2f_img i_2 +) +{ + vec4 col_3; + float z_4; + vec4 depth_5; + vec4 tex_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, i_2.uv); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + tex_6 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_CameraDepthTexture, i_2.uv); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + depth_5 = tmpvar_10; + float tmpvar_11; + tmpvar_11 = LinearEyeDepth (depth_5.x); + float tmpvar_12; + tmpvar_12 = (tmpvar_11 * 0.01); + z_4 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = tex_6; + col_3 = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = vec2(z_4); + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14; + col_3.xy = tmpvar_15.xy.xy; + return col_3; +} + +void main () +{ + v2f_img xlt_i_16; + vec4 xl_retval_17; + vec4 tmpvar_18; + tmpvar_18 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_16.pos = tmpvar_18; + vec2 tmpvar_19; + tmpvar_19 = gl_TexCoord[0].xy; + vec2 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_i_16.uv = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = frag (xlt_i_16); + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xl_retval_17 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = xl_retval_17.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + gl_FragData[0] = tmpvar_24; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-out.txt new file mode 100644 index 000000000..dc02f31bd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_ShowDepthTexture-out.txt @@ -0,0 +1,13 @@ +uniform vec4 _ZBufferParams; +uniform sampler2D _MainTex; +uniform sampler2D _CameraDepthTexture; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec4 col_2; + col_2.zw = texture2D (_MainTex, tmpvar_1).zw; + col_2.xy = vec2(((1.0/(((_ZBufferParams.z * texture2D (_CameraDepthTexture, tmpvar_1).x) + _ZBufferParams.w))) * 0.01)); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_BillboardTree-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-ir.txt new file mode 100644 index 000000000..919dc19f5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-ir.txt @@ -0,0 +1,66 @@ +struct v2f { + vec4 pos; + float fog; + vec4 color; + vec2 uv; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 frag ( + in v2f xlat_var_input_2 +) +{ + vec4 col_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, xlat_var_input_2.uv); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + col_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (col_3.xyz * xlat_var_input_2.color.xyz); + col_3.xyz = tmpvar_6.xyz.xyz; + xll_clip (col_3.w); + return col_3; +} + +void main () +{ + v2f xlt_xlat_var_input_7; + vec4 xl_retval_8; + vec4 tmpvar_9; + tmpvar_9 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_xlat_var_input_7.pos = tmpvar_9; + float tmpvar_10; + tmpvar_10 = xlv_FOG.x; + xlt_xlat_var_input_7.fog = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = gl_Color.xyzw; + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_xlat_var_input_7.color = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = gl_TexCoord[0].xy; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13; + xlt_xlat_var_input_7.uv = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = frag (xlt_xlat_var_input_7); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xl_retval_8 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = xl_retval_8.xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + gl_FragData[0] = tmpvar_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-out.txt new file mode 100644 index 000000000..ceb7d2ceb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_BillboardTree-out.txt @@ -0,0 +1,14 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_1.w = tmpvar_2.w; + col_1.xyz = (tmpvar_2.xyz * gl_Color.xyz); + if ((tmpvar_2.w < 0.0)) { + discard; + }; + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt new file mode 100644 index 000000000..b1acf42fe --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt @@ -0,0 +1,170 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 vlight; +}; +varying vec4 xlv_FOG; +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * IN_2.color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +vec4 LightingLambert ( + in SurfaceOutput s_9, + in vec3 lightDir_10, + in float atten_11 +) +{ + vec4 c_12; + float diff_13; + float tmpvar_14; + tmpvar_14 = dot (s_9.Normal, lightDir_10); + float tmpvar_15; + tmpvar_15 = max (0.0, tmpvar_14); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + diff_13 = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = ((s_9.Albedo * _LightColor0.xyz) * ((diff_13 * atten_11) * 2.0)); + c_12.xyz = tmpvar_17.xyz.xyz; + float tmpvar_18; + tmpvar_18 = s_9.Alpha; + c_12.w = vec4(tmpvar_18).w; + return c_12; +} + +vec4 frag_surf ( + in v2f_surf IN_19 +) +{ + vec4 c_20; + float atten_21; + SurfaceOutput o_22; + Input surfIN_23; + float tmpvar_24; + tmpvar_24 = 1.0; + atten_21 = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = IN_19.hip_pack0.xy; + surfIN_23.uv_MainTex = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = IN_19.lop_color; + surfIN_23.color = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_22.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_22.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_22.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_22.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_22.Gloss = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = IN_19.normal; + o_22.Normal = tmpvar_32; + surf (surfIN_23, o_22); + xll_clip ((o_22.Alpha - _Cutoff)); + vec4 tmpvar_33; + tmpvar_33 = LightingLambert (o_22, _WorldSpaceLightPos0.xyz, atten_21); + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + c_20 = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = (c_20.xyz + (o_22.Albedo * IN_19.vlight)); + c_20.xyz = tmpvar_35.xyz.xyz; + float tmpvar_36; + tmpvar_36 = o_22.Alpha; + c_20.w = vec4(tmpvar_36).w; + return c_20; +} + +void main () +{ + v2f_surf xlt_IN_37; + vec4 xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_37.pos = tmpvar_39; + float tmpvar_40; + tmpvar_40 = xlv_FOG.x; + xlt_IN_37.fog = tmpvar_40; + vec2 tmpvar_41; + tmpvar_41 = gl_TexCoord[0].xy; + vec2 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_37.hip_pack0 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Color.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_37.lop_color = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_TexCoord[1].xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_37.normal = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[2].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_37.vlight = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = frag_surf (xlt_IN_37); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xl_retval_38 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_38.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_FragData[0] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt new file mode 100644 index 000000000..1b73f59cf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt @@ -0,0 +1,24 @@ +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + float tmpvar_3; + tmpvar_3 = tmpvar_2.w; + float x_4; + x_4 = (tmpvar_2.w - _Cutoff); + if ((x_4 < 0.0)) { + discard; + }; + vec4 c_5; + c_5.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, _WorldSpaceLightPos0.xyz)) * 2.0)); + c_5.w = tmpvar_3; + c_1.xyz = (c_5.xyz + (tmpvar_2.xyz * gl_TexCoord[2].xyz)); + c_1.w = tmpvar_3; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt new file mode 100644 index 000000000..f86fd2b24 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt @@ -0,0 +1,189 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * IN_2.color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +vec4 LightingLambert ( + in SurfaceOutput s_9, + in vec3 lightDir_10, + in float atten_11 +) +{ + vec4 c_12; + float diff_13; + float tmpvar_14; + tmpvar_14 = dot (s_9.Normal, lightDir_10); + float tmpvar_15; + tmpvar_15 = max (0.0, tmpvar_14); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + diff_13 = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = ((s_9.Albedo * _LightColor0.xyz) * ((diff_13 * atten_11) * 2.0)); + c_12.xyz = tmpvar_17.xyz.xyz; + float tmpvar_18; + tmpvar_18 = s_9.Alpha; + c_12.w = vec4(tmpvar_18).w; + return c_12; +} + +vec4 frag_surf ( + in v2f_surf IN_19 +) +{ + vec4 c_20; + vec3 lightDir_21; + SurfaceOutput o_22; + Input surfIN_23; + vec2 tmpvar_24; + tmpvar_24 = IN_19.hip_pack0.xy; + surfIN_23.uv_MainTex = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = IN_19.lop_color; + surfIN_23.color = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = vec3(0.0, 0.0, 0.0); + o_22.Albedo = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_22.Emission = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_22.Specular = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_22.Alpha = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_22.Gloss = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = IN_19.normal; + o_22.Normal = tmpvar_31; + surf (surfIN_23, o_22); + xll_clip ((o_22.Alpha - _Cutoff)); + vec3 tmpvar_32; + tmpvar_32 = IN_19.lightDir; + lightDir_21 = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = normalize (lightDir_21); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + lightDir_21 = tmpvar_34; + float tmpvar_35; + tmpvar_35 = dot (IN_19._LightCoord, IN_19._LightCoord); + vec2 tmpvar_36; + tmpvar_36 = vec2(tmpvar_35); + vec2 tmpvar_37; + tmpvar_37 = tmpvar_36.xy; + vec4 tmpvar_38; + tmpvar_38 = texture2D (_LightTextureB0, tmpvar_37); + vec4 tmpvar_39; + tmpvar_39 = textureCube (_LightTexture0, IN_19._LightCoord); + vec4 tmpvar_40; + tmpvar_40 = LightingLambert (o_22, lightDir_21, (tmpvar_38.w * tmpvar_39.w)); + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + c_20 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = o_22.Alpha; + c_20.w = vec4(tmpvar_42).w; + return c_20; +} + +void main () +{ + v2f_surf xlt_IN_43; + vec4 xl_retval_44; + vec4 tmpvar_45; + tmpvar_45 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_43.pos = tmpvar_45; + float tmpvar_46; + tmpvar_46 = xlv_FOG.x; + xlt_IN_43.fog = tmpvar_46; + vec2 tmpvar_47; + tmpvar_47 = gl_TexCoord[0].xy; + vec2 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_43.hip_pack0 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_43.lop_color = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_43.normal = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[2].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_43.lightDir = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = gl_TexCoord[3].xyz; + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_43._LightCoord = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = frag_surf (xlt_IN_43); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xl_retval_44 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = xl_retval_44.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_FragData[0] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt new file mode 100644 index 000000000..203352cc1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt @@ -0,0 +1,27 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[3].xyz; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + float tmpvar_4; + tmpvar_4 = tmpvar_3.w; + float x_5; + x_5 = (tmpvar_3.w - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + vec4 c_6; + c_6.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); + c_6.w = tmpvar_4; + c_2.xyz = c_6.xyz; + c_2.w = tmpvar_4; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt new file mode 100644 index 000000000..b93c1fef1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt @@ -0,0 +1,108 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec4 lop_color; +}; +uniform sampler2D _MainTex; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * IN_2.color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +vec4 frag_surf ( + in v2f_surf IN_9 +) +{ + SurfaceOutput o_10; + Input surfIN_11; + vec2 tmpvar_12; + tmpvar_12 = IN_9.hip_pack0.xy; + surfIN_11.uv_MainTex = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = IN_9.lop_color; + surfIN_11.color = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = vec3(0.0, 0.0, 0.0); + o_10.Albedo = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = vec3(0.0, 0.0, 0.0); + o_10.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_10.Specular = tmpvar_16; + float tmpvar_17; + tmpvar_17 = 0.0; + o_10.Alpha = tmpvar_17; + float tmpvar_18; + tmpvar_18 = 0.0; + o_10.Gloss = tmpvar_18; + surf (surfIN_11, o_10); + xll_clip ((o_10.Alpha - _Cutoff)); + return vec4(0.0, 0.0, 0.0, 0.0); +} + +void main () +{ + v2f_surf xlt_IN_19; + vec4 xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_19.pos = tmpvar_21; + vec2 tmpvar_22; + tmpvar_22 = gl_TexCoord[1].xy; + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_IN_19.hip_pack0 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_Color.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_IN_19.lop_color = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = frag_surf (xlt_IN_19); + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xl_retval_20 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = xl_retval_20.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_FragData[0] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt similarity index 54% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt index 4bc22acbf..fd96e5996 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt @@ -2,9 +2,9 @@ uniform sampler2D _MainTex; uniform float _Cutoff; void main () { - float x; - x = ((texture2D (_MainTex, gl_TexCoord[1].xy) * gl_Color).w - _Cutoff); - if ((x < 0.0)) { + float x_1; + x_1 = ((texture2D (_MainTex, gl_TexCoord[1].xy) * gl_Color).w - _Cutoff); + if ((x_1 < 0.0)) { discard; }; gl_FragData[0] = vec4(0.0, 0.0, 0.0, 0.0); diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-ir.txt new file mode 100644 index 000000000..f13b66952 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-ir.txt @@ -0,0 +1,175 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * IN_1.color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 LightingLambert ( + in SurfaceOutput s_8, + in vec3 lightDir_9, + in float atten_10 +) +{ + vec4 c_11; + float diff_12; + float tmpvar_13; + tmpvar_13 = dot (s_8.Normal, lightDir_9); + float tmpvar_14; + tmpvar_14 = max (0.0, tmpvar_13); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + diff_12 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = ((s_8.Albedo * _LightColor0.xyz) * ((diff_12 * atten_10) * 2.0)); + c_11.xyz = tmpvar_16.xyz.xyz; + float tmpvar_17; + tmpvar_17 = s_8.Alpha; + c_11.w = vec4(tmpvar_17).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_18 +) +{ + vec4 c_19; + vec3 lightDir_20; + SurfaceOutput o_21; + Input surfIN_22; + vec2 tmpvar_23; + tmpvar_23 = IN_18.hip_pack0.xy; + surfIN_22.uv_MainTex = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = IN_18.lop_color; + surfIN_22.color = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(0.0, 0.0, 0.0); + o_21.Albedo = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = vec3(0.0, 0.0, 0.0); + o_21.Emission = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_21.Specular = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_21.Alpha = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_21.Gloss = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = IN_18.normal; + o_21.Normal = tmpvar_30; + surf (surfIN_22, o_21); + vec3 tmpvar_31; + tmpvar_31 = IN_18.lightDir; + lightDir_20 = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = normalize (lightDir_20); + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + lightDir_20 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = dot (IN_18._LightCoord, IN_18._LightCoord); + vec2 tmpvar_35; + tmpvar_35 = vec2(tmpvar_34); + vec2 tmpvar_36; + tmpvar_36 = tmpvar_35.xy; + vec4 tmpvar_37; + tmpvar_37 = texture2D (_LightTexture0, tmpvar_36); + vec4 tmpvar_38; + tmpvar_38 = LightingLambert (o_21, lightDir_20, tmpvar_37.w); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + c_19 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + c_19.w = vec4(tmpvar_40).w; + return c_19; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + float tmpvar_44; + tmpvar_44 = xlv_FOG.x; + xlt_IN_41.fog = tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = gl_TexCoord[0].xy; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_41.hip_pack0 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_Color.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_41.lop_color = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[1].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_41.normal = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[2].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_41.lightDir = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[3].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_41._LightCoord = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = frag_surf (xlt_IN_41); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xl_retval_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_42.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_FragData[0] = tmpvar_58; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-out.txt new file mode 100644 index 000000000..f3ce85015 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit-out.txt @@ -0,0 +1,18 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[3].xyz; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + vec4 c_4; + c_4.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * texture2D (_LightTexture0, vec2(dot (tmpvar_1, tmpvar_1))).w) * 2.0)); + c_4.w = tmpvar_3.w; + c_2.xyz = c_4.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_Vertexlit1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt new file mode 100644 index 000000000..c1a123c23 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-ir.txt @@ -0,0 +1,290 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec4 c_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec4 tmpvar_37; + tmpvar_37 = (tmpvar_36 * IN_33.color); + c_35 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = c_35.xyz; + o_34.Albedo = tmpvar_38; + float tmpvar_39; + tmpvar_39 = c_35.w; + o_34.Alpha = tmpvar_39; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_40, + in vec4 light_41 +) +{ + vec4 c_42; + vec3 tmpvar_43; + tmpvar_43 = (s_40.Albedo * light_41.xyz); + c_42.xyz = tmpvar_43.xyz.xyz; + float tmpvar_44; + tmpvar_44 = s_40.Alpha; + c_42.w = vec4(tmpvar_44).w; + return c_42; +} + +vec3 DecodeLightmap ( + in vec4 color_45 +) +{ + return (2.0 * color_45.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_46 +) +{ + vec4 col_47; + vec3 lm_48; + vec3 lmIndirect_49; + vec3 lmFull_50; + vec4 light_51; + SurfaceOutput o_52; + Input surfIN_53; + vec2 tmpvar_54; + tmpvar_54 = IN_46.hip_pack0.xy; + surfIN_53.uv_MainTex = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = IN_46.lop_color; + surfIN_53.color = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_52.Albedo = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = vec3(0.0, 0.0, 0.0); + o_52.Emission = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_52.Specular = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_52.Alpha = tmpvar_59; + float tmpvar_60; + tmpvar_60 = 0.0; + o_52.Gloss = tmpvar_60; + surf (surfIN_53, o_52); + vec4 tmpvar_61; + tmpvar_61 = texture2DProj (_LightBuffer, IN_46.hip_screen); + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + light_51 = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = log2 (light_51); + vec4 tmpvar_64; + tmpvar_64 = -(tmpvar_63); + light_51 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = texture2D (unity_Lightmap, IN_46.hip_lmapFade.xy); + vec3 tmpvar_66; + tmpvar_66 = DecodeLightmap (tmpvar_65); + vec3 tmpvar_67; + tmpvar_67 = tmpvar_66; + lmFull_50 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = texture2D (unity_LightmapInd, IN_46.hip_lmapFade.xy); + vec3 tmpvar_69; + tmpvar_69 = DecodeLightmap (tmpvar_68); + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + lmIndirect_49 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = xll_saturate (IN_46.hip_lmapFade.z); + vec3 tmpvar_72; + tmpvar_72 = vec3(tmpvar_71); + vec3 tmpvar_73; + tmpvar_73 = mix (lmIndirect_49, lmFull_50, tmpvar_72); + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + lm_48 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = (light_51.xyz + lm_48); + light_51.xyz = tmpvar_75.xyz.xyz; + vec4 tmpvar_76; + tmpvar_76 = LightingLambert_PrePass (o_52, light_51); + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + col_47 = tmpvar_77; + return col_47; +} + +void main () +{ + v2f_surf xlt_IN_78; + vec4 xl_retval_79; + vec4 tmpvar_80; + tmpvar_80 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_78.pos = tmpvar_80; + float tmpvar_81; + tmpvar_81 = xlv_FOG.x; + xlt_IN_78.fog = tmpvar_81; + vec2 tmpvar_82; + tmpvar_82 = gl_TexCoord[0].xy; + vec2 tmpvar_83; + tmpvar_83 = tmpvar_82; + xlt_IN_78.hip_pack0 = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = gl_Color.xyzw; + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + xlt_IN_78.lop_color = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86 = gl_TexCoord[1].xyzw; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + xlt_IN_78.hip_screen = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = gl_TexCoord[2].xyz; + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88; + xlt_IN_78.hip_lmapFade = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = frag_surf (xlt_IN_78); + vec4 tmpvar_91; + tmpvar_91 = tmpvar_90; + xl_retval_79 = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92 = xl_retval_79.xyzw; + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + gl_FragData[0] = tmpvar_93; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-out.txt new file mode 100644 index 000000000..3b695733e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_Vertexlit1-out.txt @@ -0,0 +1,21 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_4.w; + light_2.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_5; + c_5.xyz = (tmpvar_3.xyz * light_2.xyz); + c_5.w = tmpvar_3.w; + gl_FragData[0] = c_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt new file mode 100644 index 000000000..fab3f35a0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-ir.txt @@ -0,0 +1,192 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 vlight; + vec4 _ShadowCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float unitySampleShadow ( + in vec4 shadowCoord_2 +) +{ + float shadow_3; + vec4 tmpvar_4; + tmpvar_4 = texture2DProj (_ShadowMapTexture, shadowCoord_2); + float tmpvar_5; + tmpvar_5 = tmpvar_4.x; + shadow_3 = tmpvar_5; + return shadow_3; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * IN_6.color); + c_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = c_8.xyz; + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = c_8.w; + o_7.Alpha = tmpvar_12; +} + +vec4 LightingLambert ( + in SurfaceOutput s_13, + in vec3 lightDir_14, + in float atten_15 +) +{ + vec4 c_16; + float diff_17; + float tmpvar_18; + tmpvar_18 = dot (s_13.Normal, lightDir_14); + float tmpvar_19; + tmpvar_19 = max (0.0, tmpvar_18); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + diff_17 = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = ((s_13.Albedo * _LightColor0.xyz) * ((diff_17 * atten_15) * 2.0)); + c_16.xyz = tmpvar_21.xyz.xyz; + float tmpvar_22; + tmpvar_22 = s_13.Alpha; + c_16.w = vec4(tmpvar_22).w; + return c_16; +} + +vec4 frag_surf ( + in v2f_surf IN_23 +) +{ + vec4 c_24; + float atten_25; + SurfaceOutput o_26; + Input surfIN_27; + vec2 tmpvar_28; + tmpvar_28 = IN_23.hip_pack0.xy; + surfIN_27.uv_MainTex = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = IN_23.lop_color; + surfIN_27.color = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(0.0, 0.0, 0.0); + o_26.Albedo = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_26.Emission = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_26.Specular = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_26.Alpha = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_26.Gloss = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = IN_23.normal; + o_26.Normal = tmpvar_35; + surf (surfIN_27, o_26); + xll_clip ((o_26.Alpha - _Cutoff)); + float tmpvar_36; + tmpvar_36 = unitySampleShadow (IN_23._ShadowCoord); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + atten_25 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = LightingLambert (o_26, _WorldSpaceLightPos0.xyz, atten_25); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + c_24 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (c_24.xyz + (o_26.Albedo * IN_23.vlight)); + c_24.xyz = tmpvar_40.xyz.xyz; + float tmpvar_41; + tmpvar_41 = o_26.Alpha; + c_24.w = vec4(tmpvar_41).w; + return c_24; +} + +void main () +{ + v2f_surf xlt_IN_42; + vec4 xl_retval_43; + vec4 tmpvar_44; + tmpvar_44 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_42.pos = tmpvar_44; + float tmpvar_45; + tmpvar_45 = xlv_FOG.x; + xlt_IN_42.fog = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = gl_TexCoord[0].xy; + vec2 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_42.hip_pack0 = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_Color.xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_42.lop_color = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[1].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_42.normal = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = gl_TexCoord[2].xyz; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_42.vlight = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = gl_TexCoord[3].xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_42._ShadowCoord = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = frag_surf (xlt_IN_42); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xl_retval_43 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = xl_retval_43.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_FragData[0] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt new file mode 100644 index 000000000..a8751c661 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass-out.txt @@ -0,0 +1,25 @@ +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + float tmpvar_3; + tmpvar_3 = tmpvar_2.w; + float x_4; + x_4 = (tmpvar_2.w - _Cutoff); + if ((x_4 < 0.0)) { + discard; + }; + vec4 c_5; + c_5.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, _WorldSpaceLightPos0.xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[3]).x) * 2.0)); + c_5.w = tmpvar_3; + c_1.xyz = (c_5.xyz + (tmpvar_2.xyz * gl_TexCoord[2].xyz)); + c_1.w = tmpvar_3; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt new file mode 100644 index 000000000..b9056810e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt @@ -0,0 +1,207 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * IN_2.color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +float UnitySpotCookie ( + in vec4 LightCoord_9 +) +{ + vec4 tmpvar_10; + tmpvar_10 = texture2D (_LightTexture0, ((LightCoord_9.xy / LightCoord_9.w) + 0.5)); + return tmpvar_10.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_11 +) +{ + float tmpvar_12; + tmpvar_12 = dot (LightCoord_11, LightCoord_11); + vec2 tmpvar_13; + tmpvar_13 = vec2(tmpvar_12); + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13.xy; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_LightTextureB0, tmpvar_14); + return tmpvar_15.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_16, + in vec3 lightDir_17, + in float atten_18 +) +{ + vec4 c_19; + float diff_20; + float tmpvar_21; + tmpvar_21 = dot (s_16.Normal, lightDir_17); + float tmpvar_22; + tmpvar_22 = max (0.0, tmpvar_21); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + diff_20 = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = ((s_16.Albedo * _LightColor0.xyz) * ((diff_20 * atten_18) * 2.0)); + c_19.xyz = tmpvar_24.xyz.xyz; + float tmpvar_25; + tmpvar_25 = s_16.Alpha; + c_19.w = vec4(tmpvar_25).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_26 +) +{ + vec4 c_27; + vec3 lightDir_28; + SurfaceOutput o_29; + Input surfIN_30; + vec2 tmpvar_31; + tmpvar_31 = IN_26.hip_pack0.xy; + surfIN_30.uv_MainTex = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = IN_26.lop_color; + surfIN_30.color = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_29.Albedo = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(0.0, 0.0, 0.0); + o_29.Emission = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_29.Specular = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_29.Alpha = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_29.Gloss = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = IN_26.normal; + o_29.Normal = tmpvar_38; + surf (surfIN_30, o_29); + xll_clip ((o_29.Alpha - _Cutoff)); + vec3 tmpvar_39; + tmpvar_39 = IN_26.lightDir; + lightDir_28 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = normalize (lightDir_28); + vec3 tmpvar_41; + tmpvar_41 = tmpvar_40; + lightDir_28 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = UnitySpotCookie (IN_26._LightCoord); + float tmpvar_43; + tmpvar_43 = UnitySpotAttenuate (IN_26._LightCoord.xyz); + vec4 tmpvar_44; + tmpvar_44 = LightingLambert (o_29, lightDir_28, ((float((IN_26._LightCoord.z > 0.0)) * tmpvar_42) * tmpvar_43)); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + c_27 = tmpvar_45; + float tmpvar_46; + tmpvar_46 = o_29.Alpha; + c_27.w = vec4(tmpvar_46).w; + return c_27; +} + +void main () +{ + v2f_surf xlt_IN_47; + vec4 xl_retval_48; + vec4 tmpvar_49; + tmpvar_49 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_47.pos = tmpvar_49; + float tmpvar_50; + tmpvar_50 = xlv_FOG.x; + xlt_IN_47.fog = tmpvar_50; + vec2 tmpvar_51; + tmpvar_51 = gl_TexCoord[0].xy; + vec2 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_47.hip_pack0 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = gl_Color.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_47.lop_color = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = gl_TexCoord[1].xyz; + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_47.normal = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = gl_TexCoord[2].xyz; + vec3 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_IN_47.lightDir = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = gl_TexCoord[3].xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xlt_IN_47._LightCoord = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = frag_surf (xlt_IN_47); + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + xl_retval_48 = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = xl_retval_48.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_FragData[0] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt new file mode 100644 index 000000000..a6c1169f2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt @@ -0,0 +1,27 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[3]; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + float tmpvar_4; + tmpvar_4 = tmpvar_3.w; + float x_5; + x_5 = (tmpvar_3.w - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + vec4 c_6; + c_6.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_1.xyz, tmpvar_1.xyz))).w)) * 2.0)); + c_6.w = tmpvar_4; + c_2.xyz = c_6.xyz; + c_2.w = tmpvar_4; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Details_WavingDoublePass2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt new file mode 100644 index 000000000..6ba50cd97 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-ir.txt @@ -0,0 +1,156 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * IN_2.color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_9, + in vec4 light_10 +) +{ + vec4 c_11; + vec3 tmpvar_12; + tmpvar_12 = (s_9.Albedo * light_10.xyz); + c_11.xyz = tmpvar_12.xyz.xyz; + float tmpvar_13; + tmpvar_13 = s_9.Alpha; + c_11.w = vec4(tmpvar_13).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_14 +) +{ + vec4 col_15; + vec4 light_16; + SurfaceOutput o_17; + Input surfIN_18; + vec2 tmpvar_19; + tmpvar_19 = IN_14.hip_pack0.xy; + surfIN_18.uv_MainTex = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20 = IN_14.lop_color; + surfIN_18.color = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_17.Albedo = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(0.0, 0.0, 0.0); + o_17.Emission = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_17.Specular = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_17.Alpha = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_17.Gloss = tmpvar_25; + surf (surfIN_18, o_17); + xll_clip ((o_17.Alpha - _Cutoff)); + vec4 tmpvar_26; + tmpvar_26 = texture2DProj (_LightBuffer, IN_14.hip_screen); + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + light_16 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = log2 (light_16); + vec4 tmpvar_29; + tmpvar_29 = -(tmpvar_28); + light_16 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = (light_16.xyz + unity_Ambient.xyz); + light_16.xyz = tmpvar_30.xyz.xyz; + vec4 tmpvar_31; + tmpvar_31 = LightingLambert_PrePass (o_17, light_16); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + col_15 = tmpvar_32; + return col_15; +} + +void main () +{ + v2f_surf xlt_IN_33; + vec4 xl_retval_34; + vec4 tmpvar_35; + tmpvar_35 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_33.pos = tmpvar_35; + float tmpvar_36; + tmpvar_36 = xlv_FOG.x; + xlt_IN_33.fog = tmpvar_36; + vec2 tmpvar_37; + tmpvar_37 = gl_TexCoord[0].xy; + vec2 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_IN_33.hip_pack0 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Color.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_33.lop_color = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_TexCoord[1].xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_33.hip_screen = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = frag_surf (xlt_IN_33); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_34 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_34.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_FragData[0] = tmpvar_46; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt new file mode 100644 index 000000000..5901cd45f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Details_WavingDoublePass2-out.txt @@ -0,0 +1,24 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +void main () +{ + vec4 light_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * gl_Color); + float x_3; + x_3 = (tmpvar_2.w - _Cutoff); + if ((x_3 < 0.0)) { + discard; + }; + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_1.w = tmpvar_4.w; + light_1.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); + vec4 c_5; + c_5.xyz = (tmpvar_2.xyz * light_1.xyz); + c_5.w = tmpvar_2.w; + gl_FragData[0] = c_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt new file mode 100644 index 000000000..e65c20d5b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-ir.txt @@ -0,0 +1,44 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (tmpvar_2 * vec4(1.0, 0.0, 0.0, 1.0)); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = gl_Color.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = gl_TexCoord[0].xy; + vec2 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = frag (xlt_i_3); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_My_Soft_Occlusion_Leaves_rendertex-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt new file mode 100644 index 000000000..35b70cb30 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt @@ -0,0 +1,56 @@ +struct v2f { + vec4 pos; + float fog; + vec4 uv; + vec4 color; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f xlat_var_input_1 +) +{ + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = xlat_var_input_1.color; + col_2 = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, xlat_var_input_1.uv.xy); + vec3 tmpvar_5; + tmpvar_5 = (col_2.xyz * (2.0 * tmpvar_4.xyz)); + col_2.xyz = tmpvar_5.xyz.xyz; + return col_2; +} + +void main () +{ + v2f xlt_xlat_var_input_6; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_xlat_var_input_6.pos = tmpvar_8; + float tmpvar_9; + tmpvar_9 = xlv_FOG.x; + xlt_xlat_var_input_6.fog = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_TexCoord[0].xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_xlat_var_input_6.uv = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = gl_Color.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_xlat_var_input_6.color = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = frag (xlt_xlat_var_input_6); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + xl_retval_7 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = xl_retval_7.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_FragData[0] = tmpvar_17; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt new file mode 100644 index 000000000..985175b0b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt @@ -0,0 +1,9 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 col_1; + col_1.w = gl_Color.w; + col_1.xyz = (gl_Color.xyz * (2.0 * texture2D (_MainTex, gl_TexCoord[0].xy).xyz)); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt new file mode 100644 index 000000000..8394eeaff --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt @@ -0,0 +1,70 @@ +struct v2f { + vec4 pos; + float fog; + vec4 uv; + vec4 color; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform float _HalfOverCutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 frag ( + in v2f xlat_var_input_2 +) +{ + vec4 col_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, xlat_var_input_2.uv.xy); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + col_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (col_3.xyz * (2.0 * xlat_var_input_2.color.xyz)); + col_3.xyz = tmpvar_6.xyz.xyz; + float tmpvar_7; + tmpvar_7 = (col_3.w * (2.0 * _HalfOverCutoff)); + col_3.w = vec4(tmpvar_7).w; + xll_clip ((col_3.w - 1.0)); + return col_3; +} + +void main () +{ + v2f xlt_xlat_var_input_8; + vec4 xl_retval_9; + vec4 tmpvar_10; + tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_xlat_var_input_8.pos = tmpvar_10; + float tmpvar_11; + tmpvar_11 = xlv_FOG.x; + xlt_xlat_var_input_8.fog = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = gl_TexCoord[0].xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_xlat_var_input_8.uv = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = gl_Color.xyzw; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_xlat_var_input_8.color = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = frag (xlt_xlat_var_input_8); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xl_retval_9 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_9.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragData[0] = tmpvar_19; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt new file mode 100644 index 000000000..47e2ef743 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt @@ -0,0 +1,17 @@ +uniform sampler2D _MainTex; +uniform float _HalfOverCutoff; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_1.xyz = (tmpvar_2.xyz * (2.0 * gl_Color.xyz)); + col_1.w = (tmpvar_2.w * (2.0 * _HalfOverCutoff)); + float x_3; + x_3 = (col_1.w - 1.0); + if ((x_3 < 0.0)) { + discard; + }; + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt new file mode 100644 index 000000000..2f923e2d0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt @@ -0,0 +1,221 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_Control; + vec2 uv_Splat0; + vec2 uv_Splat1; + vec2 uv_Splat2; + vec2 uv_Splat3; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_pack1; + vec2 hip_pack2; + vec3 normal; + vec3 vlight; + vec4 _ShadowCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightColor0; +uniform sampler2D _Control; +float unitySampleShadow ( + in vec4 shadowCoord_1 +) +{ + float shadow_2; + vec4 tmpvar_3; + tmpvar_3 = texture2DProj (_ShadowMapTexture, shadowCoord_1); + float tmpvar_4; + tmpvar_4 = tmpvar_3.x; + shadow_2 = tmpvar_4; + return shadow_2; +} + +void surf ( + in Input IN_5, + inout SurfaceOutput o_6 +) +{ + vec3 col_7; + vec4 splat_control_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_Control, IN_5.uv_Control); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + splat_control_8 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_Splat0, IN_5.uv_Splat0); + vec3 tmpvar_12; + tmpvar_12 = (splat_control_8.x * tmpvar_11.xyz); + col_7 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_Splat1, IN_5.uv_Splat1); + vec3 tmpvar_14; + tmpvar_14 = (col_7 + (splat_control_8.y * tmpvar_13.xyz)); + col_7 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_Splat2, IN_5.uv_Splat2); + vec3 tmpvar_16; + tmpvar_16 = (col_7 + (splat_control_8.z * tmpvar_15.xyz)); + col_7 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_Splat3, IN_5.uv_Splat3); + vec3 tmpvar_18; + tmpvar_18 = (col_7 + (splat_control_8.w * tmpvar_17.xyz)); + col_7 = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = col_7; + o_6.Albedo = tmpvar_19; + float tmpvar_20; + tmpvar_20 = 0.0; + o_6.Alpha = tmpvar_20; +} + +vec4 LightingLambert ( + in SurfaceOutput s_21, + in vec3 lightDir_22, + in float atten_23 +) +{ + vec4 c_24; + float diff_25; + float tmpvar_26; + tmpvar_26 = dot (s_21.Normal, lightDir_22); + float tmpvar_27; + tmpvar_27 = max (0.0, tmpvar_26); + float tmpvar_28; + tmpvar_28 = tmpvar_27; + diff_25 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = ((s_21.Albedo * _LightColor0.xyz) * ((diff_25 * atten_23) * 2.0)); + c_24.xyz = tmpvar_29.xyz.xyz; + float tmpvar_30; + tmpvar_30 = s_21.Alpha; + c_24.w = vec4(tmpvar_30).w; + return c_24; +} + +vec4 frag_surf ( + in v2f_surf IN_31 +) +{ + vec4 c_32; + float atten_33; + SurfaceOutput o_34; + Input surfIN_35; + vec2 tmpvar_36; + tmpvar_36 = IN_31.hip_pack0.xy; + surfIN_35.uv_Control = tmpvar_36; + vec2 tmpvar_37; + tmpvar_37 = IN_31.hip_pack0.zw; + surfIN_35.uv_Splat0 = tmpvar_37; + vec2 tmpvar_38; + tmpvar_38 = IN_31.hip_pack1.xy; + surfIN_35.uv_Splat1 = tmpvar_38; + vec2 tmpvar_39; + tmpvar_39 = IN_31.hip_pack1.zw; + surfIN_35.uv_Splat2 = tmpvar_39; + vec2 tmpvar_40; + tmpvar_40 = IN_31.hip_pack2.xy; + surfIN_35.uv_Splat3 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = vec3(0.0, 0.0, 0.0); + o_34.Albedo = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = vec3(0.0, 0.0, 0.0); + o_34.Emission = tmpvar_42; + float tmpvar_43; + tmpvar_43 = 0.0; + o_34.Specular = tmpvar_43; + float tmpvar_44; + tmpvar_44 = 0.0; + o_34.Alpha = tmpvar_44; + float tmpvar_45; + tmpvar_45 = 0.0; + o_34.Gloss = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = IN_31.normal; + o_34.Normal = tmpvar_46; + surf (surfIN_35, o_34); + float tmpvar_47; + tmpvar_47 = unitySampleShadow (IN_31._ShadowCoord); + float tmpvar_48; + tmpvar_48 = tmpvar_47; + atten_33 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = LightingLambert (o_34, _WorldSpaceLightPos0.xyz, atten_33); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + c_32 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = (c_32.xyz + (o_34.Albedo * IN_31.vlight)); + c_32.xyz = tmpvar_51.xyz.xyz; + return c_32; +} + +void main () +{ + v2f_surf xlt_IN_52; + vec4 xl_retval_53; + vec4 tmpvar_54; + tmpvar_54 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_52.pos = tmpvar_54; + float tmpvar_55; + tmpvar_55 = xlv_FOG.x; + xlt_IN_52.fog = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = gl_TexCoord[0].xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_52.hip_pack0 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = gl_TexCoord[1].xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_IN_52.hip_pack1 = tmpvar_59; + vec2 tmpvar_60; + tmpvar_60 = gl_TexCoord[2].xy; + vec2 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_IN_52.hip_pack2 = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = gl_TexCoord[3].xyz; + vec3 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_IN_52.normal = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = gl_TexCoord[4].xyz; + vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_IN_52.vlight = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = gl_TexCoord[5].xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_IN_52._ShadowCoord = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = frag_surf (xlt_IN_52); + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + xl_retval_53 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = xl_retval_53.xyzw; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + gl_FragData[0] = tmpvar_71; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt new file mode 100644 index 000000000..eda6b4971 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt @@ -0,0 +1,27 @@ +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightColor0; +uniform sampler2D _Control; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[1]; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_Control, tmpvar_1.xy); + vec3 tmpvar_5; + tmpvar_5 = ((((tmpvar_4.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_4.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_4.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_4.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)); + vec4 c_6; + c_6.xyz = ((tmpvar_5 * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[3].xyz, _WorldSpaceLightPos0.xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[5]).x) * 2.0)); + c_6.w = 0.0; + c_3.w = c_6.w; + c_3.xyz = (c_6.xyz + (tmpvar_5 * gl_TexCoord[4].xyz)); + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt new file mode 100644 index 000000000..c296ac0cb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-ir.txt @@ -0,0 +1,188 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_Control; + vec2 uv_Splat0; + vec2 uv_Splat1; + vec2 uv_Splat2; + vec2 uv_Splat3; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_pack1; + vec2 hip_pack2; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _LightBuffer; +uniform sampler2D _Control; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec3 col_3; + vec4 splat_control_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_Control, IN_1.uv_Control); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + splat_control_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_Splat0, IN_1.uv_Splat0); + vec3 tmpvar_8; + tmpvar_8 = (splat_control_4.x * tmpvar_7.xyz); + col_3 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_Splat1, IN_1.uv_Splat1); + vec3 tmpvar_10; + tmpvar_10 = (col_3 + (splat_control_4.y * tmpvar_9.xyz)); + col_3 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_Splat2, IN_1.uv_Splat2); + vec3 tmpvar_12; + tmpvar_12 = (col_3 + (splat_control_4.z * tmpvar_11.xyz)); + col_3 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_Splat3, IN_1.uv_Splat3); + vec3 tmpvar_14; + tmpvar_14 = (col_3 + (splat_control_4.w * tmpvar_13.xyz)); + col_3 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = col_3; + o_2.Albedo = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_2.Alpha = tmpvar_16; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_17, + in vec4 light_18 +) +{ + vec4 c_19; + vec3 tmpvar_20; + tmpvar_20 = (s_17.Albedo * light_18.xyz); + c_19.xyz = tmpvar_20.xyz.xyz; + float tmpvar_21; + tmpvar_21 = s_17.Alpha; + c_19.w = vec4(tmpvar_21).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_22 +) +{ + vec4 col_23; + vec4 light_24; + SurfaceOutput o_25; + Input surfIN_26; + vec2 tmpvar_27; + tmpvar_27 = IN_22.hip_pack0.xy; + surfIN_26.uv_Control = tmpvar_27; + vec2 tmpvar_28; + tmpvar_28 = IN_22.hip_pack0.zw; + surfIN_26.uv_Splat0 = tmpvar_28; + vec2 tmpvar_29; + tmpvar_29 = IN_22.hip_pack1.xy; + surfIN_26.uv_Splat1 = tmpvar_29; + vec2 tmpvar_30; + tmpvar_30 = IN_22.hip_pack1.zw; + surfIN_26.uv_Splat2 = tmpvar_30; + vec2 tmpvar_31; + tmpvar_31 = IN_22.hip_pack2.xy; + surfIN_26.uv_Splat3 = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_25.Albedo = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_25.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_25.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_25.Alpha = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_25.Gloss = tmpvar_36; + surf (surfIN_26, o_25); + vec4 tmpvar_37; + tmpvar_37 = texture2DProj (_LightBuffer, IN_22.hip_screen); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + light_24 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = log2 (light_24); + vec4 tmpvar_40; + tmpvar_40 = -(tmpvar_39); + light_24 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = (light_24.xyz + unity_Ambient.xyz); + light_24.xyz = tmpvar_41.xyz.xyz; + vec4 tmpvar_42; + tmpvar_42 = LightingLambert_PrePass (o_25, light_24); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + col_23 = tmpvar_43; + return col_23; +} + +void main () +{ + v2f_surf xlt_IN_44; + vec4 xl_retval_45; + vec4 tmpvar_46; + tmpvar_46 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_44.pos = tmpvar_46; + float tmpvar_47; + tmpvar_47 = xlv_FOG.x; + xlt_IN_44.fog = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_TexCoord[0].xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_44.hip_pack0 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = gl_TexCoord[1].xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_44.hip_pack1 = tmpvar_51; + vec2 tmpvar_52; + tmpvar_52 = gl_TexCoord[2].xy; + vec2 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_44.hip_pack2 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = gl_TexCoord[3].xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_44.hip_screen = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = frag_surf (xlt_IN_44); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xl_retval_45 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = xl_retval_45.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_FragData[0] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt new file mode 100644 index 000000000..0bcdd4d40 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass1-out.txt @@ -0,0 +1,26 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _LightBuffer; +uniform sampler2D _Control; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[1]; + vec4 light_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_Control, tmpvar_1.xy); + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[3]))); + light_3.w = tmpvar_5.w; + light_3.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); + vec4 c_6; + c_6.xyz = (((((tmpvar_4.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_4.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_4.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_4.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)) * light_3.xyz); + c_6.w = 0.0; + gl_FragData[0] = c_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt new file mode 100644 index 000000000..c296ac0cb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-ir.txt @@ -0,0 +1,188 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_Control; + vec2 uv_Splat0; + vec2 uv_Splat1; + vec2 uv_Splat2; + vec2 uv_Splat3; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_pack1; + vec2 hip_pack2; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _LightBuffer; +uniform sampler2D _Control; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec3 col_3; + vec4 splat_control_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_Control, IN_1.uv_Control); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + splat_control_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_Splat0, IN_1.uv_Splat0); + vec3 tmpvar_8; + tmpvar_8 = (splat_control_4.x * tmpvar_7.xyz); + col_3 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_Splat1, IN_1.uv_Splat1); + vec3 tmpvar_10; + tmpvar_10 = (col_3 + (splat_control_4.y * tmpvar_9.xyz)); + col_3 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_Splat2, IN_1.uv_Splat2); + vec3 tmpvar_12; + tmpvar_12 = (col_3 + (splat_control_4.z * tmpvar_11.xyz)); + col_3 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_Splat3, IN_1.uv_Splat3); + vec3 tmpvar_14; + tmpvar_14 = (col_3 + (splat_control_4.w * tmpvar_13.xyz)); + col_3 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = col_3; + o_2.Albedo = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_2.Alpha = tmpvar_16; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_17, + in vec4 light_18 +) +{ + vec4 c_19; + vec3 tmpvar_20; + tmpvar_20 = (s_17.Albedo * light_18.xyz); + c_19.xyz = tmpvar_20.xyz.xyz; + float tmpvar_21; + tmpvar_21 = s_17.Alpha; + c_19.w = vec4(tmpvar_21).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_22 +) +{ + vec4 col_23; + vec4 light_24; + SurfaceOutput o_25; + Input surfIN_26; + vec2 tmpvar_27; + tmpvar_27 = IN_22.hip_pack0.xy; + surfIN_26.uv_Control = tmpvar_27; + vec2 tmpvar_28; + tmpvar_28 = IN_22.hip_pack0.zw; + surfIN_26.uv_Splat0 = tmpvar_28; + vec2 tmpvar_29; + tmpvar_29 = IN_22.hip_pack1.xy; + surfIN_26.uv_Splat1 = tmpvar_29; + vec2 tmpvar_30; + tmpvar_30 = IN_22.hip_pack1.zw; + surfIN_26.uv_Splat2 = tmpvar_30; + vec2 tmpvar_31; + tmpvar_31 = IN_22.hip_pack2.xy; + surfIN_26.uv_Splat3 = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_25.Albedo = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_25.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_25.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_25.Alpha = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_25.Gloss = tmpvar_36; + surf (surfIN_26, o_25); + vec4 tmpvar_37; + tmpvar_37 = texture2DProj (_LightBuffer, IN_22.hip_screen); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + light_24 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = log2 (light_24); + vec4 tmpvar_40; + tmpvar_40 = -(tmpvar_39); + light_24 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = (light_24.xyz + unity_Ambient.xyz); + light_24.xyz = tmpvar_41.xyz.xyz; + vec4 tmpvar_42; + tmpvar_42 = LightingLambert_PrePass (o_25, light_24); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + col_23 = tmpvar_43; + return col_23; +} + +void main () +{ + v2f_surf xlt_IN_44; + vec4 xl_retval_45; + vec4 tmpvar_46; + tmpvar_46 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_44.pos = tmpvar_46; + float tmpvar_47; + tmpvar_47 = xlv_FOG.x; + xlt_IN_44.fog = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_TexCoord[0].xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_44.hip_pack0 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = gl_TexCoord[1].xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_44.hip_pack1 = tmpvar_51; + vec2 tmpvar_52; + tmpvar_52 = gl_TexCoord[2].xy; + vec2 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_44.hip_pack2 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = gl_TexCoord[3].xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_44.hip_screen = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = frag_surf (xlt_IN_44); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xl_retval_45 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = xl_retval_45.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_FragData[0] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt new file mode 100644 index 000000000..0bcdd4d40 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass-out.txt @@ -0,0 +1,26 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _LightBuffer; +uniform sampler2D _Control; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[1]; + vec4 light_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_Control, tmpvar_1.xy); + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[3]))); + light_3.w = tmpvar_5.w; + light_3.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); + vec4 c_6; + c_6.xyz = (((((tmpvar_4.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_4.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_4.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_4.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)) * light_3.xyz); + c_6.w = 0.0; + gl_FragData[0] = c_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt new file mode 100644 index 000000000..34db9f2ff --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt @@ -0,0 +1,333 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_Control; + vec2 uv_Splat0; + vec2 uv_Splat1; + vec2 uv_Splat2; + vec2 uv_Splat3; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_pack1; + vec2 hip_pack2; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _LightBuffer; +uniform sampler2D _Control; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec3 col_35; + vec4 splat_control_36; + vec4 tmpvar_37; + tmpvar_37 = texture2D (_Control, IN_33.uv_Control); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + splat_control_36 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = texture2D (_Splat0, IN_33.uv_Splat0); + vec3 tmpvar_40; + tmpvar_40 = (splat_control_36.x * tmpvar_39.xyz); + col_35 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_Splat1, IN_33.uv_Splat1); + vec3 tmpvar_42; + tmpvar_42 = (col_35 + (splat_control_36.y * tmpvar_41.xyz)); + col_35 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = texture2D (_Splat2, IN_33.uv_Splat2); + vec3 tmpvar_44; + tmpvar_44 = (col_35 + (splat_control_36.z * tmpvar_43.xyz)); + col_35 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = texture2D (_Splat3, IN_33.uv_Splat3); + vec3 tmpvar_46; + tmpvar_46 = (col_35 + (splat_control_36.w * tmpvar_45.xyz)); + col_35 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = col_35; + o_34.Albedo = tmpvar_47; + float tmpvar_48; + tmpvar_48 = 0.0; + o_34.Alpha = tmpvar_48; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_49, + in vec4 light_50 +) +{ + vec4 c_51; + vec3 tmpvar_52; + tmpvar_52 = (s_49.Albedo * light_50.xyz); + c_51.xyz = tmpvar_52.xyz.xyz; + float tmpvar_53; + tmpvar_53 = s_49.Alpha; + c_51.w = vec4(tmpvar_53).w; + return c_51; +} + +vec3 DecodeLightmap ( + in vec4 color_54 +) +{ + return (2.0 * color_54.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_55 +) +{ + vec4 col_56; + vec3 lm_57; + vec3 lmIndirect_58; + vec3 lmFull_59; + vec4 light_60; + SurfaceOutput o_61; + Input surfIN_62; + vec2 tmpvar_63; + tmpvar_63 = IN_55.hip_pack0.xy; + surfIN_62.uv_Control = tmpvar_63; + vec2 tmpvar_64; + tmpvar_64 = IN_55.hip_pack0.zw; + surfIN_62.uv_Splat0 = tmpvar_64; + vec2 tmpvar_65; + tmpvar_65 = IN_55.hip_pack1.xy; + surfIN_62.uv_Splat1 = tmpvar_65; + vec2 tmpvar_66; + tmpvar_66 = IN_55.hip_pack1.zw; + surfIN_62.uv_Splat2 = tmpvar_66; + vec2 tmpvar_67; + tmpvar_67 = IN_55.hip_pack2.xy; + surfIN_62.uv_Splat3 = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = vec3(0.0, 0.0, 0.0); + o_61.Albedo = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = vec3(0.0, 0.0, 0.0); + o_61.Emission = tmpvar_69; + float tmpvar_70; + tmpvar_70 = 0.0; + o_61.Specular = tmpvar_70; + float tmpvar_71; + tmpvar_71 = 0.0; + o_61.Alpha = tmpvar_71; + float tmpvar_72; + tmpvar_72 = 0.0; + o_61.Gloss = tmpvar_72; + surf (surfIN_62, o_61); + vec4 tmpvar_73; + tmpvar_73 = texture2DProj (_LightBuffer, IN_55.hip_screen); + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + light_60 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = log2 (light_60); + vec4 tmpvar_76; + tmpvar_76 = -(tmpvar_75); + light_60 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = texture2D (unity_Lightmap, IN_55.hip_lmapFade.xy); + vec3 tmpvar_78; + tmpvar_78 = DecodeLightmap (tmpvar_77); + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + lmFull_59 = tmpvar_79; + vec4 tmpvar_80; + tmpvar_80 = texture2D (unity_LightmapInd, IN_55.hip_lmapFade.xy); + vec3 tmpvar_81; + tmpvar_81 = DecodeLightmap (tmpvar_80); + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81; + lmIndirect_58 = tmpvar_82; + float tmpvar_83; + tmpvar_83 = xll_saturate (IN_55.hip_lmapFade.z); + vec3 tmpvar_84; + tmpvar_84 = vec3(tmpvar_83); + vec3 tmpvar_85; + tmpvar_85 = mix (lmIndirect_58, lmFull_59, tmpvar_84); + vec3 tmpvar_86; + tmpvar_86 = tmpvar_85; + lm_57 = tmpvar_86; + vec3 tmpvar_87; + tmpvar_87 = (light_60.xyz + lm_57); + light_60.xyz = tmpvar_87.xyz.xyz; + vec4 tmpvar_88; + tmpvar_88 = LightingLambert_PrePass (o_61, light_60); + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + col_56 = tmpvar_89; + return col_56; +} + +void main () +{ + v2f_surf xlt_IN_90; + vec4 xl_retval_91; + vec4 tmpvar_92; + tmpvar_92 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_90.pos = tmpvar_92; + float tmpvar_93; + tmpvar_93 = xlv_FOG.x; + xlt_IN_90.fog = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = gl_TexCoord[0].xyzw; + vec4 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_90.hip_pack0 = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = gl_TexCoord[1].xyzw; + vec4 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_90.hip_pack1 = tmpvar_97; + vec2 tmpvar_98; + tmpvar_98 = gl_TexCoord[2].xy; + vec2 tmpvar_99; + tmpvar_99 = tmpvar_98; + xlt_IN_90.hip_pack2 = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = gl_TexCoord[3].xyzw; + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + xlt_IN_90.hip_screen = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = gl_TexCoord[4].xyz; + vec3 tmpvar_103; + tmpvar_103 = tmpvar_102; + xlt_IN_90.hip_lmapFade = tmpvar_103; + vec4 tmpvar_104; + tmpvar_104 = frag_surf (xlt_IN_90); + vec4 tmpvar_105; + tmpvar_105 = tmpvar_104; + xl_retval_91 = tmpvar_105; + vec4 tmpvar_106; + tmpvar_106 = xl_retval_91.xyzw; + vec4 tmpvar_107; + tmpvar_107 = tmpvar_106; + gl_FragData[0] = tmpvar_107; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt new file mode 100644 index 000000000..3b402ee23 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt @@ -0,0 +1,29 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _Splat3; +uniform sampler2D _Splat2; +uniform sampler2D _Splat1; +uniform sampler2D _Splat0; +uniform sampler2D _LightBuffer; +uniform sampler2D _Control; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[1]; + vec3 tmpvar_3; + tmpvar_3 = gl_TexCoord[4].xyz; + vec4 light_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_Control, tmpvar_1.xy); + vec4 tmpvar_6; + tmpvar_6 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[3]))); + light_4.w = tmpvar_6.w; + light_4.xyz = (tmpvar_6.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_3.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_3.xy).xyz), vec3(clamp (tmpvar_3.z, 0.0, 1.0)))); + vec4 c_7; + c_7.xyz = (((((tmpvar_5.x * texture2D (_Splat0, tmpvar_1.zw).xyz) + (tmpvar_5.y * texture2D (_Splat1, tmpvar_2.xy).xyz)) + (tmpvar_5.z * texture2D (_Splat2, tmpvar_2.zw).xyz)) + (tmpvar_5.w * texture2D (_Splat3, gl_TexCoord[2].xy).xyz)) * light_4.xyz); + c_7.w = 0.0; + gl_FragData[0] = c_7; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Bark_Shader_Rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt new file mode 100644 index 000000000..39a305193 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt @@ -0,0 +1,54 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec3 color; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.uv); + vec4 tmpvar_4; + tmpvar_4 = tmpvar_3; + col_2 = tmpvar_4; + vec3 tmpvar_5; + tmpvar_5 = (col_2.xyz * (i_1.color * 2.0)); + col_2.xyz = tmpvar_5.xyz.xyz; + float tmpvar_6; + tmpvar_6 = 1.0; + col_2.w = vec4(tmpvar_6).w; + return col_2; +} + +void main () +{ + v2f xlt_i_7; + vec4 xl_retval_8; + vec4 tmpvar_9; + tmpvar_9 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_7.pos = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = gl_TexCoord[0].xy; + vec2 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_i_7.uv = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = gl_TexCoord[1].xyz; + vec3 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_i_7.color = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = frag (xlt_i_7); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + xl_retval_8 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = xl_retval_8.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_FragData[0] = tmpvar_17; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt new file mode 100644 index 000000000..d815c9bda --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt @@ -0,0 +1,9 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 col_1; + col_1.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * (gl_TexCoord[1].xyz * 2.0)); + col_1.w = 1.0; + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Leaf_Shader_Rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt new file mode 100644 index 000000000..e26fa9217 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt @@ -0,0 +1,65 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec3 color; +}; +uniform sampler2D _MainTex; +uniform float _HalfOverCutoff; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 frag ( + in v2f i_2 +) +{ + vec4 col_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, i_2.uv); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + col_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (col_3.xyz * (i_2.color * 2.0)); + col_3.xyz = tmpvar_6.xyz.xyz; + float tmpvar_7; + tmpvar_7 = (col_3.w * (2.0 * _HalfOverCutoff)); + col_3.w = vec4(tmpvar_7).w; + xll_clip ((col_3.w - 1.0)); + return col_3; +} + +void main () +{ + v2f xlt_i_8; + vec4 xl_retval_9; + vec4 tmpvar_10; + tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_8.pos = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = gl_TexCoord[0].xy; + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_8.uv = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = gl_TexCoord[1].xyz; + vec3 tmpvar_14; + tmpvar_14 = tmpvar_13; + xlt_i_8.color = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = frag (xlt_i_8); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xl_retval_9 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = xl_retval_9.xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + gl_FragData[0] = tmpvar_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt new file mode 100644 index 000000000..5b402ef30 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt @@ -0,0 +1,17 @@ +uniform sampler2D _MainTex; +uniform float _HalfOverCutoff; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_1.xyz = (tmpvar_2.xyz * (gl_TexCoord[1].xyz * 2.0)); + col_1.w = (tmpvar_2.w * (2.0 * _HalfOverCutoff)); + float x_3; + x_3 = (col_1.w - 1.0); + if ((x_3 < 0.0)) { + discard; + }; + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt new file mode 100644 index 000000000..58e6f464e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt @@ -0,0 +1,243 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _BumpSpecMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 norspc_8; + vec4 trngls_9; + vec4 c_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + c_10 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (c_10.xyz * IN_6.color.xyz); + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_TranslucencyMap, IN_6.uv_MainTex); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + trngls_9 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = trngls_9.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = IN_6.color.w; + o_7.Alpha = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_BumpSpecMap, IN_6.uv_MainTex); + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + norspc_8 = tmpvar_19; + float tmpvar_20; + tmpvar_20 = norspc_8.x; + o_7.Specular = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = UnpackNormal (norspc_8); + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21.xyz; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_7.Normal = tmpvar_23; +} + +vec4 LightingTreeBark ( + in SurfaceOutput s_24, + in vec3 lightDir_25, + in vec3 viewDir_26, + in float atten_27 +) +{ + vec4 c_28; + float spec_29; + float nh_30; + float diff_31; + vec3 h_32; + vec3 tmpvar_33; + tmpvar_33 = normalize ((lightDir_25 + viewDir_26)); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + h_32 = tmpvar_34; + float tmpvar_35; + tmpvar_35 = dot (s_24.Normal, lightDir_25); + float tmpvar_36; + tmpvar_36 = max (0.0, tmpvar_35); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + diff_31 = tmpvar_37; + float tmpvar_38; + tmpvar_38 = dot (s_24.Normal, h_32); + float tmpvar_39; + tmpvar_39 = max (0.0, tmpvar_38); + float tmpvar_40; + tmpvar_40 = tmpvar_39; + nh_30 = tmpvar_40; + float tmpvar_41; + tmpvar_41 = pow (nh_30, (s_24.Specular * 128.0)); + float tmpvar_42; + tmpvar_42 = (tmpvar_41 * s_24.Gloss); + spec_29 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = ((((s_24.Albedo * _LightColor0.xyz) * diff_31) + (_LightColor0.xyz * spec_29)) * (atten_27 * 2.0)); + c_28.xyz = tmpvar_43.xyz.xyz; + float tmpvar_44; + tmpvar_44 = (((_LightColor0.w * spec_29) * atten_27) * s_24.Alpha); + c_28.w = vec4(tmpvar_44).w; + return c_28; +} + +vec4 frag_surf ( + in v2f_surf IN_45 +) +{ + vec4 c_46; + vec3 lightDir_47; + SurfaceOutput o_48; + Input surfIN_49; + vec2 tmpvar_50; + tmpvar_50 = IN_45.hip_pack0.xy; + surfIN_49.uv_MainTex = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = IN_45.lop_color; + surfIN_49.color = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = vec3(0.0, 0.0, 0.0); + o_48.Albedo = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = vec3(0.0, 0.0, 0.0); + o_48.Emission = tmpvar_53; + float tmpvar_54; + tmpvar_54 = 0.0; + o_48.Specular = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 0.0; + o_48.Alpha = tmpvar_55; + float tmpvar_56; + tmpvar_56 = 0.0; + o_48.Gloss = tmpvar_56; + surf (surfIN_49, o_48); + vec3 tmpvar_57; + tmpvar_57 = IN_45.lightDir; + lightDir_47 = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = normalize (lightDir_47); + vec3 tmpvar_59; + tmpvar_59 = tmpvar_58; + lightDir_47 = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = IN_45.viewDir.xyz; + vec3 tmpvar_61; + tmpvar_61 = normalize (tmpvar_60); + float tmpvar_62; + tmpvar_62 = dot (IN_45._LightCoord, IN_45._LightCoord); + vec2 tmpvar_63; + tmpvar_63 = vec2(tmpvar_62); + vec2 tmpvar_64; + tmpvar_64 = tmpvar_63.xy; + vec4 tmpvar_65; + tmpvar_65 = texture2D (_LightTextureB0, tmpvar_64); + vec4 tmpvar_66; + tmpvar_66 = textureCube (_LightTexture0, IN_45._LightCoord); + vec4 tmpvar_67; + tmpvar_67 = LightingTreeBark (o_48, lightDir_47, tmpvar_61, (tmpvar_65.w * tmpvar_66.w)); + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + c_46 = tmpvar_68; + float tmpvar_69; + tmpvar_69 = 0.0; + c_46.w = vec4(tmpvar_69).w; + return c_46; +} + +void main () +{ + v2f_surf xlt_IN_70; + vec4 xl_retval_71; + vec4 tmpvar_72; + tmpvar_72 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_70.pos = tmpvar_72; + float tmpvar_73; + tmpvar_73 = xlv_FOG.x; + xlt_IN_70.fog = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = gl_TexCoord[0].xy; + vec2 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_70.hip_pack0 = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = gl_Color.xyzw; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + xlt_IN_70.lop_color = tmpvar_77; + vec3 tmpvar_78; + tmpvar_78 = gl_TexCoord[1].xyz; + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + xlt_IN_70.lightDir = tmpvar_79; + vec3 tmpvar_80; + tmpvar_80 = gl_TexCoord[2].xyz; + vec3 tmpvar_81; + tmpvar_81 = tmpvar_80; + xlt_IN_70.viewDir = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = gl_TexCoord[3].xyz; + vec3 tmpvar_83; + tmpvar_83 = tmpvar_82; + xlt_IN_70._LightCoord = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = frag_surf (xlt_IN_70); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + xl_retval_71 = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86 = xl_retval_71.xyzw; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + gl_FragData[0] = tmpvar_87; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt new file mode 100644 index 000000000..0a915d3b9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt @@ -0,0 +1,32 @@ +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _BumpSpecMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_BumpSpecMap, tmpvar_1); + vec4 normal_5; + normal_5.xy = ((tmpvar_4.wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + vec3 tmpvar_6; + tmpvar_6 = normalize(gl_TexCoord[1].xyz); + float atten_7; + atten_7 = (texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (pow (max (0.0, dot (normal_5.xyz, normalize((tmpvar_6 + normalize(gl_TexCoord[2].xyz))))), (tmpvar_4.x * 128.0)) * texture2D (_TranslucencyMap, tmpvar_1).w); + c_8.xyz = (((((texture2D (_MainTex, tmpvar_1).xyz * gl_Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_5.xyz, tmpvar_6))) + (_LightColor0.xyz * tmpvar_9)) * (atten_7 * 2.0)); + c_8.w = (((_LightColor0.w * tmpvar_9) * atten_7) * gl_Color.w); + c_3.xyz = c_8.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Bark_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt new file mode 100644 index 000000000..16bcf2748 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt @@ -0,0 +1,122 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; +}; +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform sampler2D _BumpSpecMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 norspc_8; + vec4 trngls_9; + vec4 c_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + c_10 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (c_10.xyz * IN_6.color.xyz); + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_TranslucencyMap, IN_6.uv_MainTex); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + trngls_9 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = trngls_9.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = IN_6.color.w; + o_7.Alpha = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_BumpSpecMap, IN_6.uv_MainTex); + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + norspc_8 = tmpvar_19; + float tmpvar_20; + tmpvar_20 = norspc_8.x; + o_7.Specular = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = UnpackNormal (norspc_8); + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21.xyz; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_7.Normal = tmpvar_23; +} + +vec4 frag_surf ( + in v2f_surf IN_24 +) +{ + Input surfIN_25; + SurfaceOutput o_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_26.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_26.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_26.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_26.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_26.Gloss = tmpvar_31; + surf (surfIN_25, o_26); + return vec4(0.0, 0.0, 0.0, 0.0); +} + +void main () +{ + v2f_surf xlt_IN_32; + vec4 xl_retval_33; + vec4 tmpvar_34; + tmpvar_34 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_32.pos = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = frag_surf (xlt_IN_32); + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xl_retval_33 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = xl_retval_33.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + gl_FragData[0] = tmpvar_38; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt new file mode 100644 index 000000000..475808ad2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt @@ -0,0 +1,10 @@ +uniform sampler2D _BumpSpecMap; +void main () +{ + vec2 tmpvar_1; + vec4 normal_2; + normal_2.xy = ((texture2D (_BumpSpecMap, tmpvar_1).wy * 2.0) - 1.0); + normal_2.z = sqrt(((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + gl_FragData[0] = vec4(0.0, 0.0, 0.0, 0.0); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt new file mode 100644 index 000000000..9b0335cb3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt @@ -0,0 +1,361 @@ +struct LeafSurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + vec3 Translucency; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; +}; +varying vec4 xlv_FOG; +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform sampler2D _BumpSpecMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +vec4 UnpackNormal ( + in vec4 packednormal_34 +) +{ + vec4 normal_35; + vec2 tmpvar_36; + tmpvar_36 = ((packednormal_34.wy * 2.0) - 1.0); + normal_35.xy = tmpvar_36.xy.xy; + float tmpvar_37; + tmpvar_37 = sqrt (((1.0 - (normal_35.x * normal_35.x)) - (normal_35.y * normal_35.y))); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + normal_35.z = vec3(tmpvar_38).z; + return normal_35; +} + +void surf ( + in Input IN_39, + inout LeafSurfaceOutput o_40 +) +{ + vec4 norspc_41; + vec4 trngls_42; + vec4 c_43; + vec4 tmpvar_44; + tmpvar_44 = texture2D (_MainTex, IN_39.uv_MainTex); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + c_43 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = (c_43.xyz * IN_39.color.xyz); + o_40.Albedo = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_TranslucencyMap, IN_39.uv_MainTex); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + trngls_42 = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = trngls_42.xyz; + o_40.Translucency = tmpvar_49; + float tmpvar_50; + tmpvar_50 = trngls_42.w; + o_40.Gloss = tmpvar_50; + float tmpvar_51; + tmpvar_51 = (c_43.w * IN_39.color.w); + o_40.Alpha = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = texture2D (_BumpSpecMap, IN_39.uv_MainTex); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + norspc_41 = tmpvar_53; + float tmpvar_54; + tmpvar_54 = norspc_41.x; + o_40.Specular = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = UnpackNormal (norspc_41); + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55.xyz; + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + o_40.Normal = tmpvar_57; +} + +vec4 LightingTreeLeaf ( + in LeafSurfaceOutput s_58, + in vec3 lightDir_59, + in vec3 viewDir_60, + in float atten_61 +) +{ + vec4 c_62; + vec3 col_63; + vec3 translucencyColor_64; + float trans_65; + float spec_66; + float nh_67; + float diff_68; + vec3 h_69; + vec3 tmpvar_70; + tmpvar_70 = normalize ((lightDir_59 + viewDir_60)); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + h_69 = tmpvar_71; + float tmpvar_72; + tmpvar_72 = dot (s_58.Normal, lightDir_59); + float tmpvar_73; + tmpvar_73 = tmpvar_72; + diff_68 = tmpvar_73; + float tmpvar_74; + tmpvar_74 = dot (s_58.Normal, h_69); + float tmpvar_75; + tmpvar_75 = max (0.0, tmpvar_74); + float tmpvar_76; + tmpvar_76 = tmpvar_75; + nh_67 = tmpvar_76; + float tmpvar_77; + tmpvar_77 = pow (nh_67, (s_58.Specular * 128.0)); + float tmpvar_78; + tmpvar_78 = (tmpvar_77 * s_58.Gloss); + spec_66 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = max (0.0, -(diff_68)); + float tmpvar_80; + tmpvar_80 = tmpvar_79; + trans_65 = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = ((s_58.Translucency * trans_65) * 2.0); + translucencyColor_64 = tmpvar_81; + float tmpvar_82; + tmpvar_82 = max (0.0, ((diff_68 * 0.5) + 0.5)); + float tmpvar_83; + tmpvar_83 = tmpvar_82; + diff_68 = tmpvar_83; + vec3 tmpvar_84; + tmpvar_84 = (s_58.Albedo * (diff_68 + translucencyColor_64)); + col_63 = tmpvar_84; + float tmpvar_85; + tmpvar_85 = ceil (trans_65); + float tmpvar_86; + tmpvar_86 = xll_saturate (tmpvar_85); + vec3 tmpvar_87; + tmpvar_87 = (col_63 + (spec_66 * (1.0 - tmpvar_86))); + col_63 = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = (col_63 * _LightColor0.xyz); + col_63 = tmpvar_88; + vec3 tmpvar_89; + tmpvar_89 = (col_63 * (atten_61 * 2.0)); + c_62.xyz = tmpvar_89.xyz.xyz; + return c_62; +} + +vec4 frag_surf ( + in v2f_surf IN_90 +) +{ + vec4 c_91; + vec3 lightDir_92; + LeafSurfaceOutput o_93; + Input surfIN_94; + vec2 tmpvar_95; + tmpvar_95 = IN_90.hip_pack0.xy; + surfIN_94.uv_MainTex = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = IN_90.lop_color; + surfIN_94.color = tmpvar_96; + vec3 tmpvar_97; + tmpvar_97 = vec3(0.0, 0.0, 0.0); + o_93.Albedo = tmpvar_97; + vec3 tmpvar_98; + tmpvar_98 = vec3(0.0, 0.0, 0.0); + o_93.Emission = tmpvar_98; + float tmpvar_99; + tmpvar_99 = 0.0; + o_93.Specular = tmpvar_99; + float tmpvar_100; + tmpvar_100 = 0.0; + o_93.Alpha = tmpvar_100; + surf (surfIN_94, o_93); + xll_clip ((o_93.Alpha - _Cutoff)); + vec3 tmpvar_101; + tmpvar_101 = IN_90.lightDir; + lightDir_92 = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = IN_90.viewDir.xyz; + vec3 tmpvar_103; + tmpvar_103 = normalize (tmpvar_102); + vec4 tmpvar_104; + tmpvar_104 = LightingTreeLeaf (o_93, lightDir_92, tmpvar_103, 1.0); + vec4 tmpvar_105; + tmpvar_105 = tmpvar_104; + c_91 = tmpvar_105; + float tmpvar_106; + tmpvar_106 = o_93.Alpha; + c_91.w = vec4(tmpvar_106).w; + return c_91; +} + +void main () +{ + v2f_surf xlt_IN_107; + vec4 xl_retval_108; + vec4 tmpvar_109; + tmpvar_109 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_107.pos = tmpvar_109; + float tmpvar_110; + tmpvar_110 = xlv_FOG.x; + xlt_IN_107.fog = tmpvar_110; + vec2 tmpvar_111; + tmpvar_111 = gl_TexCoord[0].xy; + vec2 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_IN_107.hip_pack0 = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113 = gl_Color.xyzw; + vec4 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_IN_107.lop_color = tmpvar_114; + vec3 tmpvar_115; + tmpvar_115 = gl_TexCoord[1].xyz; + vec3 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_IN_107.lightDir = tmpvar_116; + vec3 tmpvar_117; + tmpvar_117 = gl_TexCoord[2].xyz; + vec3 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_IN_107.viewDir = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = frag_surf (xlt_IN_107); + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + xl_retval_108 = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121 = xl_retval_108.xyzw; + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + gl_FragData[0] = tmpvar_122; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt new file mode 100644 index 000000000..79e051b0b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt @@ -0,0 +1,39 @@ +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform sampler2D _BumpSpecMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1); + vec4 tmpvar_5; + tmpvar_5 = texture2D (_TranslucencyMap, tmpvar_1); + float tmpvar_6; + tmpvar_6 = (tmpvar_4.w * gl_Color.w); + vec4 tmpvar_7; + tmpvar_7 = texture2D (_BumpSpecMap, tmpvar_1); + vec4 normal_8; + normal_8.xy = ((tmpvar_7.wy * 2.0) - 1.0); + normal_8.z = sqrt(((1.0 - (normal_8.x * normal_8.x)) - (normal_8.y * normal_8.y))); + float x_9; + x_9 = (tmpvar_6 - _Cutoff); + if ((x_9 < 0.0)) { + discard; + }; + vec4 c_10; + float tmpvar_11; + tmpvar_11 = dot (normal_8.xyz, tmpvar_2); + float tmpvar_12; + tmpvar_12 = max (0.0, -(tmpvar_11)); + c_10.xyz = (((((tmpvar_4.xyz * gl_Color.xyz) * (max (0.0, ((tmpvar_11 * 0.5) + 0.5)) + ((tmpvar_5.xyz * tmpvar_12) * 2.0))) + ((pow (max (0.0, dot (normal_8.xyz, normalize((tmpvar_2 + normalize(gl_TexCoord[2].xyz))))), (tmpvar_7.x * 128.0)) * tmpvar_5.w) * (1.0 - clamp (ceil(tmpvar_12), 0.0, 1.0)))) * _LightColor0.xyz) * 2.0); + c_3.xyz = c_10.xyz; + c_3.w = tmpvar_6; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Tree_Optimized_Leaf_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt new file mode 100644 index 000000000..c88dd5272 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt @@ -0,0 +1,384 @@ +struct LeafSurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + vec3 Translucency; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform sampler2D _BumpSpecMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +vec4 UnpackNormal ( + in vec4 packednormal_34 +) +{ + vec4 normal_35; + vec2 tmpvar_36; + tmpvar_36 = ((packednormal_34.wy * 2.0) - 1.0); + normal_35.xy = tmpvar_36.xy.xy; + float tmpvar_37; + tmpvar_37 = sqrt (((1.0 - (normal_35.x * normal_35.x)) - (normal_35.y * normal_35.y))); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + normal_35.z = vec3(tmpvar_38).z; + return normal_35; +} + +void surf ( + in Input IN_39, + inout LeafSurfaceOutput o_40 +) +{ + vec4 norspc_41; + vec4 trngls_42; + vec4 c_43; + vec4 tmpvar_44; + tmpvar_44 = texture2D (_MainTex, IN_39.uv_MainTex); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + c_43 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = (c_43.xyz * IN_39.color.xyz); + o_40.Albedo = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = texture2D (_TranslucencyMap, IN_39.uv_MainTex); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + trngls_42 = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = trngls_42.xyz; + o_40.Translucency = tmpvar_49; + float tmpvar_50; + tmpvar_50 = trngls_42.w; + o_40.Gloss = tmpvar_50; + float tmpvar_51; + tmpvar_51 = (c_43.w * IN_39.color.w); + o_40.Alpha = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = texture2D (_BumpSpecMap, IN_39.uv_MainTex); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + norspc_41 = tmpvar_53; + float tmpvar_54; + tmpvar_54 = norspc_41.x; + o_40.Specular = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = UnpackNormal (norspc_41); + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55.xyz; + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + o_40.Normal = tmpvar_57; +} + +vec4 LightingTreeLeaf ( + in LeafSurfaceOutput s_58, + in vec3 lightDir_59, + in vec3 viewDir_60, + in float atten_61 +) +{ + vec4 c_62; + vec3 col_63; + vec3 translucencyColor_64; + float trans_65; + float spec_66; + float nh_67; + float diff_68; + vec3 h_69; + vec3 tmpvar_70; + tmpvar_70 = normalize ((lightDir_59 + viewDir_60)); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + h_69 = tmpvar_71; + float tmpvar_72; + tmpvar_72 = dot (s_58.Normal, lightDir_59); + float tmpvar_73; + tmpvar_73 = tmpvar_72; + diff_68 = tmpvar_73; + float tmpvar_74; + tmpvar_74 = dot (s_58.Normal, h_69); + float tmpvar_75; + tmpvar_75 = max (0.0, tmpvar_74); + float tmpvar_76; + tmpvar_76 = tmpvar_75; + nh_67 = tmpvar_76; + float tmpvar_77; + tmpvar_77 = pow (nh_67, (s_58.Specular * 128.0)); + float tmpvar_78; + tmpvar_78 = (tmpvar_77 * s_58.Gloss); + spec_66 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = max (0.0, -(diff_68)); + float tmpvar_80; + tmpvar_80 = tmpvar_79; + trans_65 = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = ((s_58.Translucency * trans_65) * 2.0); + translucencyColor_64 = tmpvar_81; + float tmpvar_82; + tmpvar_82 = max (0.0, ((diff_68 * 0.5) + 0.5)); + float tmpvar_83; + tmpvar_83 = tmpvar_82; + diff_68 = tmpvar_83; + vec3 tmpvar_84; + tmpvar_84 = (s_58.Albedo * (diff_68 + translucencyColor_64)); + col_63 = tmpvar_84; + float tmpvar_85; + tmpvar_85 = ceil (trans_65); + float tmpvar_86; + tmpvar_86 = xll_saturate (tmpvar_85); + vec3 tmpvar_87; + tmpvar_87 = (col_63 + (spec_66 * (1.0 - tmpvar_86))); + col_63 = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = (col_63 * _LightColor0.xyz); + col_63 = tmpvar_88; + vec3 tmpvar_89; + tmpvar_89 = (col_63 * (atten_61 * 2.0)); + c_62.xyz = tmpvar_89.xyz.xyz; + return c_62; +} + +vec4 frag_surf ( + in v2f_surf IN_90 +) +{ + vec4 c_91; + vec3 lightDir_92; + LeafSurfaceOutput o_93; + Input surfIN_94; + vec2 tmpvar_95; + tmpvar_95 = IN_90.hip_pack0.xy; + surfIN_94.uv_MainTex = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = IN_90.lop_color; + surfIN_94.color = tmpvar_96; + vec3 tmpvar_97; + tmpvar_97 = vec3(0.0, 0.0, 0.0); + o_93.Albedo = tmpvar_97; + vec3 tmpvar_98; + tmpvar_98 = vec3(0.0, 0.0, 0.0); + o_93.Emission = tmpvar_98; + float tmpvar_99; + tmpvar_99 = 0.0; + o_93.Specular = tmpvar_99; + float tmpvar_100; + tmpvar_100 = 0.0; + o_93.Alpha = tmpvar_100; + surf (surfIN_94, o_93); + xll_clip ((o_93.Alpha - _Cutoff)); + vec3 tmpvar_101; + tmpvar_101 = IN_90.lightDir; + lightDir_92 = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = normalize (lightDir_92); + vec3 tmpvar_103; + tmpvar_103 = tmpvar_102; + lightDir_92 = tmpvar_103; + vec3 tmpvar_104; + tmpvar_104 = IN_90.viewDir.xyz; + vec3 tmpvar_105; + tmpvar_105 = normalize (tmpvar_104); + float tmpvar_106; + tmpvar_106 = dot (IN_90._LightCoord, IN_90._LightCoord); + vec2 tmpvar_107; + tmpvar_107 = vec2(tmpvar_106); + vec2 tmpvar_108; + tmpvar_108 = tmpvar_107.xy; + vec4 tmpvar_109; + tmpvar_109 = texture2D (_LightTextureB0, tmpvar_108); + vec4 tmpvar_110; + tmpvar_110 = textureCube (_LightTexture0, IN_90._LightCoord); + vec4 tmpvar_111; + tmpvar_111 = LightingTreeLeaf (o_93, lightDir_92, tmpvar_105, (tmpvar_109.w * tmpvar_110.w)); + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + c_91 = tmpvar_112; + float tmpvar_113; + tmpvar_113 = o_93.Alpha; + c_91.w = vec4(tmpvar_113).w; + return c_91; +} + +void main () +{ + v2f_surf xlt_IN_114; + vec4 xl_retval_115; + vec4 tmpvar_116; + tmpvar_116 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_114.pos = tmpvar_116; + float tmpvar_117; + tmpvar_117 = xlv_FOG.x; + xlt_IN_114.fog = tmpvar_117; + vec2 tmpvar_118; + tmpvar_118 = gl_TexCoord[0].xy; + vec2 tmpvar_119; + tmpvar_119 = tmpvar_118; + xlt_IN_114.hip_pack0 = tmpvar_119; + vec4 tmpvar_120; + tmpvar_120 = gl_Color.xyzw; + vec4 tmpvar_121; + tmpvar_121 = tmpvar_120; + xlt_IN_114.lop_color = tmpvar_121; + vec3 tmpvar_122; + tmpvar_122 = gl_TexCoord[1].xyz; + vec3 tmpvar_123; + tmpvar_123 = tmpvar_122; + xlt_IN_114.lightDir = tmpvar_123; + vec3 tmpvar_124; + tmpvar_124 = gl_TexCoord[2].xyz; + vec3 tmpvar_125; + tmpvar_125 = tmpvar_124; + xlt_IN_114.viewDir = tmpvar_125; + vec3 tmpvar_126; + tmpvar_126 = gl_TexCoord[3].xyz; + vec3 tmpvar_127; + tmpvar_127 = tmpvar_126; + xlt_IN_114._LightCoord = tmpvar_127; + vec4 tmpvar_128; + tmpvar_128 = frag_surf (xlt_IN_114); + vec4 tmpvar_129; + tmpvar_129 = tmpvar_128; + xl_retval_115 = tmpvar_129; + vec4 tmpvar_130; + tmpvar_130 = xl_retval_115.xyzw; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + gl_FragData[0] = tmpvar_131; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt new file mode 100644 index 000000000..3f7eba912 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt @@ -0,0 +1,43 @@ +uniform sampler2D _TranslucencyMap; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform sampler2D _BumpSpecMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1); + vec4 tmpvar_5; + tmpvar_5 = texture2D (_TranslucencyMap, tmpvar_1); + float tmpvar_6; + tmpvar_6 = (tmpvar_4.w * gl_Color.w); + vec4 tmpvar_7; + tmpvar_7 = texture2D (_BumpSpecMap, tmpvar_1); + vec4 normal_8; + normal_8.xy = ((tmpvar_7.wy * 2.0) - 1.0); + normal_8.z = sqrt(((1.0 - (normal_8.x * normal_8.x)) - (normal_8.y * normal_8.y))); + float x_9; + x_9 = (tmpvar_6 - _Cutoff); + if ((x_9 < 0.0)) { + discard; + }; + vec3 tmpvar_10; + tmpvar_10 = normalize(gl_TexCoord[1].xyz); + vec4 c_11; + float tmpvar_12; + tmpvar_12 = dot (normal_8.xyz, tmpvar_10); + float tmpvar_13; + tmpvar_13 = max (0.0, -(tmpvar_12)); + c_11.xyz = (((((tmpvar_4.xyz * gl_Color.xyz) * (max (0.0, ((tmpvar_12 * 0.5) + 0.5)) + ((tmpvar_5.xyz * tmpvar_13) * 2.0))) + ((pow (max (0.0, dot (normal_8.xyz, normalize((tmpvar_10 + normalize(gl_TexCoord[2].xyz))))), (tmpvar_7.x * 128.0)) * tmpvar_5.w) * (1.0 - clamp (ceil(tmpvar_13), 0.0, 1.0)))) * _LightColor0.xyz) * ((texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w) * 2.0)); + c_3.xyz = c_11.xyz; + c_3.w = tmpvar_6; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-ir.txt new file mode 100644 index 000000000..d6b077fd9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-ir.txt @@ -0,0 +1,91 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform mat4 _RotationMatrix; +uniform sampler2D _MainTex; +uniform vec4 _CenterRadius; +vec2 MultiplyUV ( + in mat4 mat_1, + in vec2 inUV_2 +) +{ + vec4 temp_3; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.x = inUV_2.x; + tmpvar_4.y = inUV_2.y; + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + temp_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (mat_1 * temp_3); + temp_3 = tmpvar_6; + return temp_3.xy; +} + +vec4 frag ( + in v2f i_7 +) +{ + float t_8; + vec2 tmp_9; + vec2 distortedOffset_10; + vec2 offset_11; + vec2 tmpvar_12; + tmpvar_12 = i_7.uv; + offset_11 = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = MultiplyUV (_RotationMatrix, offset_11.xy); + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13; + distortedOffset_10 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = (offset_11 / _CenterRadius.zw); + tmp_9 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = length (tmp_9); + float tmpvar_17; + tmpvar_17 = min (1.0, tmpvar_16); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + t_8 = tmpvar_18; + vec2 tmpvar_19; + tmpvar_19 = vec2(t_8); + vec2 tmpvar_20; + tmpvar_20 = mix (distortedOffset_10, offset_11, tmpvar_19); + vec2 tmpvar_21; + tmpvar_21 = tmpvar_20; + offset_11 = tmpvar_21; + vec2 tmpvar_22; + tmpvar_22 = (offset_11 + _CenterRadius.xy); + offset_11 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = texture2D (_MainTex, offset_11); + return tmpvar_23; +} + +void main () +{ + v2f xlt_i_24; + vec4 xl_retval_25; + vec4 tmpvar_26; + tmpvar_26 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_24.pos = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = gl_TexCoord[0].xy; + vec2 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_i_24.uv = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = frag (xlt_i_24); + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xl_retval_25 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = xl_retval_25.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_FragData[0] = tmpvar_32; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-out.txt similarity index 67% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-out.txt index e3ca834b4..a42d555ff 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twirt_Effect_Shader-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twirt_Effect_Shader-out.txt @@ -9,6 +9,8 @@ void main () tmpvar_2.zw = vec2(0.0, 0.0); tmpvar_2.x = tmpvar_1.x; tmpvar_2.y = tmpvar_1.y; - gl_FragData[0] = texture2D (_MainTex, (mix ((_RotationMatrix * tmpvar_2).xy, tmpvar_1, vec2(min (1.0, length ((tmpvar_1 / _CenterRadius.zw))))) + _CenterRadius.xy)); + vec2 tmpvar_3; + tmpvar_3 = (tmpvar_1 / _CenterRadius.zw); + gl_FragData[0] = texture2D (_MainTex, (mix ((_RotationMatrix * tmpvar_2).xy, tmpvar_1, vec2(min (1.0, sqrt(dot (tmpvar_3, tmpvar_3))))) + _CenterRadius.xy)); } diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Hidden_Twist_Effect-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-ir.txt new file mode 100644 index 000000000..bb8dac9b8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-ir.txt @@ -0,0 +1,287 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec2 uvOrig; +}; +uniform sampler2D _MainTex; +uniform vec4 _CenterRadius; +uniform float _Angle; +void xll_sincos ( + in float x_1, + out float s_2, + out float c_3 +) +{ + float tmpvar_4; + tmpvar_4 = sin (x_1); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + s_2 = tmpvar_5; + float tmpvar_6; + tmpvar_6 = cos (x_1); + float tmpvar_7; + tmpvar_7 = tmpvar_6; + c_3 = tmpvar_7; +} + +void xll_sincos ( + in vec2 x_8, + out vec2 s_9, + out vec2 c_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = sin (x_8); + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11; + s_9 = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = cos (x_8); + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13; + c_10 = tmpvar_14; +} + +void xll_sincos ( + in vec3 x_15, + out vec3 s_16, + out vec3 c_17 +) +{ + vec3 tmpvar_18; + tmpvar_18 = sin (x_15); + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + s_16 = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = cos (x_15); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + c_17 = tmpvar_21; +} + +void xll_sincos ( + in vec4 x_22, + out vec4 s_23, + out vec4 c_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = sin (x_22); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + s_23 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = cos (x_22); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + c_24 = tmpvar_28; +} + +void xll_sincos ( + in mat2 x_29, + out mat2 s_30, + out mat2 c_31 +) +{ + vec2 tmpvar_32; + tmpvar_32 = sin (x_29[0]); + vec2 tmpvar_33; + tmpvar_33 = sin (x_29[1]); + mat2 tmpvar_34; + vec2 tmpvar_35; + tmpvar_35 = tmpvar_32; + tmpvar_34[0] = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = tmpvar_33; + tmpvar_34[1] = tmpvar_36; + mat2 tmpvar_37; + tmpvar_37 = (tmpvar_34); + s_30 = (tmpvar_37); + vec2 tmpvar_38; + tmpvar_38 = cos (x_29[0]); + vec2 tmpvar_39; + tmpvar_39 = cos (x_29[1]); + mat2 tmpvar_40; + vec2 tmpvar_41; + tmpvar_41 = tmpvar_38; + tmpvar_40[0] = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = tmpvar_39; + tmpvar_40[1] = tmpvar_42; + mat2 tmpvar_43; + tmpvar_43 = (tmpvar_40); + c_31 = (tmpvar_43); +} + +void xll_sincos ( + in mat3 x_44, + out mat3 s_45, + out mat3 c_46 +) +{ + vec3 tmpvar_47; + tmpvar_47 = sin (x_44[0]); + vec3 tmpvar_48; + tmpvar_48 = sin (x_44[1]); + vec3 tmpvar_49; + tmpvar_49 = sin (x_44[2]); + mat3 tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_47; + tmpvar_50[0] = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_48; + tmpvar_50[1] = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_49; + tmpvar_50[2] = tmpvar_53; + mat3 tmpvar_54; + tmpvar_54 = (tmpvar_50); + s_45 = (tmpvar_54); + vec3 tmpvar_55; + tmpvar_55 = cos (x_44[0]); + vec3 tmpvar_56; + tmpvar_56 = cos (x_44[1]); + vec3 tmpvar_57; + tmpvar_57 = cos (x_44[2]); + mat3 tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = tmpvar_55; + tmpvar_58[0] = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = tmpvar_56; + tmpvar_58[1] = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = tmpvar_57; + tmpvar_58[2] = tmpvar_61; + mat3 tmpvar_62; + tmpvar_62 = (tmpvar_58); + c_46 = (tmpvar_62); +} + +void xll_sincos ( + in mat4 x_63, + out mat4 s_64, + out mat4 c_65 +) +{ + vec4 tmpvar_66; + tmpvar_66 = sin (x_63[0]); + vec4 tmpvar_67; + tmpvar_67 = sin (x_63[1]); + vec4 tmpvar_68; + tmpvar_68 = sin (x_63[2]); + vec4 tmpvar_69; + tmpvar_69 = sin (x_63[3]); + mat4 tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_66; + tmpvar_70[0] = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = tmpvar_67; + tmpvar_70[1] = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_68; + tmpvar_70[2] = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_69; + tmpvar_70[3] = tmpvar_74; + mat4 tmpvar_75; + tmpvar_75 = (tmpvar_70); + s_64 = (tmpvar_75); + vec4 tmpvar_76; + tmpvar_76 = cos (x_63[0]); + vec4 tmpvar_77; + tmpvar_77 = cos (x_63[1]); + vec4 tmpvar_78; + tmpvar_78 = cos (x_63[2]); + vec4 tmpvar_79; + tmpvar_79 = cos (x_63[3]); + mat4 tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = tmpvar_76; + tmpvar_80[0] = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_77; + tmpvar_80[1] = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = tmpvar_78; + tmpvar_80[2] = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_79; + tmpvar_80[3] = tmpvar_84; + mat4 tmpvar_85; + tmpvar_85 = (tmpvar_80); + c_65 = (tmpvar_85); +} + +vec4 frag ( + in v2f i_86 +) +{ + vec2 uv_87; + float cosLength_88; + float sinLength_89; + float angle_90; + vec2 offset_91; + vec2 tmpvar_92; + tmpvar_92 = i_86.uvOrig; + offset_91 = tmpvar_92; + float tmpvar_93; + tmpvar_93 = length ((offset_91 / _CenterRadius.zw)); + float tmpvar_94; + tmpvar_94 = (1.0 - tmpvar_93); + angle_90 = tmpvar_94; + float tmpvar_95; + tmpvar_95 = max (0.0, angle_90); + float tmpvar_96; + tmpvar_96 = tmpvar_95; + angle_90 = tmpvar_96; + float tmpvar_97; + tmpvar_97 = ((angle_90 * angle_90) * _Angle); + angle_90 = tmpvar_97; + xll_sincos (angle_90, sinLength_89, cosLength_88); + float tmpvar_98; + tmpvar_98 = ((cosLength_88 * offset_91.x) - (sinLength_89 * offset_91.y)); + uv_87.x = tmpvar_98; + float tmpvar_99; + tmpvar_99 = ((sinLength_89 * offset_91.x) + (cosLength_88 * offset_91.y)); + uv_87.y = vec2(tmpvar_99).y; + vec2 tmpvar_100; + tmpvar_100 = (uv_87 + _CenterRadius.xy); + uv_87 = tmpvar_100; + vec4 tmpvar_101; + tmpvar_101 = texture2D (_MainTex, uv_87); + return tmpvar_101; +} + +void main () +{ + v2f xlt_i_102; + vec4 xl_retval_103; + vec4 tmpvar_104; + tmpvar_104 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_102.pos = tmpvar_104; + vec2 tmpvar_105; + tmpvar_105 = gl_TexCoord[0].xy; + vec2 tmpvar_106; + tmpvar_106 = tmpvar_105; + xlt_i_102.uv = tmpvar_106; + vec2 tmpvar_107; + tmpvar_107 = gl_TexCoord[1].xy; + vec2 tmpvar_108; + tmpvar_108 = tmpvar_107; + xlt_i_102.uvOrig = tmpvar_108; + vec4 tmpvar_109; + tmpvar_109 = frag (xlt_i_102); + vec4 tmpvar_110; + tmpvar_110 = tmpvar_109; + xl_retval_103 = tmpvar_110; + vec4 tmpvar_111; + tmpvar_111 = xl_retval_103.xyzw; + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + gl_FragData[0] = tmpvar_112; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-out.txt new file mode 100644 index 000000000..b55b0fa19 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Hidden_Twist_Effect-out.txt @@ -0,0 +1,26 @@ +uniform sampler2D _MainTex; +uniform vec4 _CenterRadius; +uniform float _Angle; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xy; + vec2 uv_2; + vec2 arg0_3; + arg0_3 = (tmpvar_1 / _CenterRadius.zw); + float tmpvar_4; + tmpvar_4 = max (0.0, (1.0 - sqrt(dot (arg0_3, arg0_3)))); + float tmpvar_5; + tmpvar_5 = ((tmpvar_4 * tmpvar_4) * _Angle); + float tmpvar_6; + tmpvar_6 = sin(tmpvar_5); + float tmpvar_7; + tmpvar_7 = cos(tmpvar_5); + uv_2.x = ((tmpvar_7 * tmpvar_1.x) - (tmpvar_6 * tmpvar_1.y)); + uv_2.y = ((tmpvar_6 * tmpvar_1.x) + (tmpvar_7 * tmpvar_1.y)); + vec2 tmpvar_8; + tmpvar_8 = (uv_2 + _CenterRadius.xy); + uv_2 = tmpvar_8; + gl_FragData[0] = texture2D (_MainTex, tmpvar_8); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..69b556ddf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt @@ -0,0 +1,185 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv2_LightMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform sampler2D _LightMap; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 lm_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec3 tmpvar_10; + tmpvar_10 = _Color.xyz; + vec3 tmpvar_11; + tmpvar_11 = (tmpvar_9.xyz * tmpvar_10); + o_7.Albedo = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_LightMap, IN_6.uv2_LightMap); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + lm_8 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = (lm_8.xyz * o_7.Albedo.xyz); + o_7.Emission = tmpvar_14; + float tmpvar_15; + tmpvar_15 = (lm_8.w * _Color.w); + o_7.Alpha = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_7.Normal = tmpvar_19; +} + +vec4 LightingLambert ( + in SurfaceOutput s_20, + in vec3 lightDir_21, + in float atten_22 +) +{ + vec4 c_23; + float diff_24; + float tmpvar_25; + tmpvar_25 = dot (s_20.Normal, lightDir_21); + float tmpvar_26; + tmpvar_26 = max (0.0, tmpvar_25); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + diff_24 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = ((s_20.Albedo * _LightColor0.xyz) * ((diff_24 * atten_22) * 2.0)); + c_23.xyz = tmpvar_28.xyz.xyz; + float tmpvar_29; + tmpvar_29 = s_20.Alpha; + c_23.w = vec4(tmpvar_29).w; + return c_23; +} + +vec4 frag_surf ( + in v2f_surf IN_30 +) +{ + vec4 c_31; + vec3 lightDir_32; + SurfaceOutput o_33; + Input surfIN_34; + vec2 tmpvar_35; + tmpvar_35 = IN_30.hip_pack0.xy; + surfIN_34.uv_MainTex = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = IN_30.hip_pack0.zw; + surfIN_34.uv_BumpMap = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = vec3(0.0, 0.0, 0.0); + o_33.Albedo = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_33.Emission = tmpvar_38; + float tmpvar_39; + tmpvar_39 = 0.0; + o_33.Specular = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_33.Alpha = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_33.Gloss = tmpvar_41; + surf (surfIN_34, o_33); + vec3 tmpvar_42; + tmpvar_42 = IN_30.lightDir; + lightDir_32 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = texture2D (_LightTexture0, IN_30._LightCoord); + vec4 tmpvar_44; + tmpvar_44 = LightingLambert (o_33, lightDir_32, (tmpvar_43.w * 1.0)); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + c_31 = tmpvar_45; + float tmpvar_46; + tmpvar_46 = 0.0; + c_31.w = vec4(tmpvar_46).w; + return c_31; +} + +void main () +{ + v2f_surf xlt_IN_47; + vec4 xl_retval_48; + vec4 tmpvar_49; + tmpvar_49 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_47.pos = tmpvar_49; + float tmpvar_50; + tmpvar_50 = xlv_FOG.x; + xlt_IN_47.fog = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_TexCoord[0].xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_47.hip_pack0 = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[1].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_47.lightDir = tmpvar_54; + vec2 tmpvar_55; + tmpvar_55 = gl_TexCoord[2].xy; + vec2 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_47._LightCoord = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = frag_surf (xlt_IN_47); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xl_retval_48 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = xl_retval_48.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_FragData[0] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt new file mode 100644 index 000000000..5e7cc66fd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt @@ -0,0 +1,23 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform sampler2D _LightMap; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec2 tmpvar_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 c_5; + c_5.xyz = (((texture2D (_MainTex, tmpvar_1.xy).xyz * _Color.xyz) * _LightColor0.xyz) * ((max (0.0, dot (normal_4.xyz, gl_TexCoord[1].xyz)) * texture2D (_LightTexture0, gl_TexCoord[2].xy).w) * 2.0)); + c_5.w = (texture2D (_LightMap, tmpvar_3).w * _Color.w); + c_2.xyz = c_5.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt new file mode 100644 index 000000000..54e774928 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-ir.txt @@ -0,0 +1,178 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv2_LightMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightMap; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 lm_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec3 tmpvar_10; + tmpvar_10 = _Color.xyz; + vec3 tmpvar_11; + tmpvar_11 = (tmpvar_9.xyz * tmpvar_10); + o_7.Albedo = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_LightMap, IN_6.uv2_LightMap); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + lm_8 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = (lm_8.xyz * o_7.Albedo.xyz); + o_7.Emission = tmpvar_14; + float tmpvar_15; + tmpvar_15 = (lm_8.w * _Color.w); + o_7.Alpha = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_7.Normal = tmpvar_19; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_20, + in vec4 light_21 +) +{ + vec4 c_22; + vec3 tmpvar_23; + tmpvar_23 = (s_20.Albedo * light_21.xyz); + c_22.xyz = tmpvar_23.xyz.xyz; + float tmpvar_24; + tmpvar_24 = s_20.Alpha; + c_22.w = vec4(tmpvar_24).w; + return c_22; +} + +vec4 frag_surf ( + in v2f_surf IN_25 +) +{ + vec4 col_26; + vec4 light_27; + SurfaceOutput o_28; + Input surfIN_29; + vec2 tmpvar_30; + tmpvar_30 = IN_25.hip_pack0.xy; + surfIN_29.uv_MainTex = tmpvar_30; + vec2 tmpvar_31; + tmpvar_31 = IN_25.hip_pack0.zw; + surfIN_29.uv2_LightMap = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_28.Albedo = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_28.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_28.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_28.Alpha = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_28.Gloss = tmpvar_36; + surf (surfIN_29, o_28); + vec4 tmpvar_37; + tmpvar_37 = texture2DProj (_LightBuffer, IN_25.hip_screen); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + light_27 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = log2 (light_27); + vec4 tmpvar_40; + tmpvar_40 = -(tmpvar_39); + light_27 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = (light_27.xyz + unity_Ambient.xyz); + light_27.xyz = tmpvar_41.xyz.xyz; + vec4 tmpvar_42; + tmpvar_42 = LightingLambert_PrePass (o_28, light_27); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + col_26 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = (col_26.xyz + o_28.Emission); + col_26.xyz = tmpvar_44.xyz.xyz; + return col_26; +} + +void main () +{ + v2f_surf xlt_IN_45; + vec4 xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_45.pos = tmpvar_47; + float tmpvar_48; + tmpvar_48 = xlv_FOG.x; + xlt_IN_45.fog = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_TexCoord[0].xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_45.hip_pack0 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_45.hip_screen = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = frag_surf (xlt_IN_45); + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_46 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_46.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_FragData[0] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt new file mode 100644 index 000000000..ddf3065d0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse2-out.txt @@ -0,0 +1,32 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightMap; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 col_2; + vec4 light_3; + vec2 tmpvar_4; + vec3 tmpvar_5; + tmpvar_5 = (texture2D (_MainTex, tmpvar_1.xy).xyz * _Color.xyz); + vec4 tmpvar_6; + tmpvar_6 = texture2D (_LightMap, tmpvar_1.zw); + vec4 normal_7; + normal_7.xy = ((texture2D (_BumpMap, tmpvar_4).wy * 2.0) - 1.0); + normal_7.z = sqrt(((1.0 - (normal_7.x * normal_7.x)) - (normal_7.y * normal_7.y))); + vec4 tmpvar_8; + tmpvar_8 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_3.w = tmpvar_8.w; + light_3.xyz = (tmpvar_8.xyz + unity_Ambient.xyz); + vec4 c_9; + c_9.xyz = (tmpvar_5 * light_3.xyz); + c_9.w = (tmpvar_6.w * _Color.w); + col_2.w = c_9.w; + col_2.xyz = (c_9.xyz + (tmpvar_6.xyz * tmpvar_5)); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Legacy_Shaders_Lightmapped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-ir.txt new file mode 100644 index 000000000..8df41372d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-ir.txt @@ -0,0 +1,196 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv2_LightMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform sampler2D _LightMap; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 lm_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec3 tmpvar_5; + tmpvar_5 = _Color.xyz; + vec3 tmpvar_6; + tmpvar_6 = (tmpvar_4.xyz * tmpvar_5); + o_2.Albedo = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_LightMap, IN_1.uv2_LightMap); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + lm_3 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = (lm_3.xyz * o_2.Albedo.xyz); + o_2.Emission = tmpvar_9; + float tmpvar_10; + tmpvar_10 = (lm_3.w * _Color.w); + o_2.Alpha = tmpvar_10; +} + +float UnitySpotCookie ( + in vec4 LightCoord_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = texture2D (_LightTexture0, ((LightCoord_11.xy / LightCoord_11.w) + 0.5)); + return tmpvar_12.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_13 +) +{ + float tmpvar_14; + tmpvar_14 = dot (LightCoord_13, LightCoord_13); + vec2 tmpvar_15; + tmpvar_15 = vec2(tmpvar_14); + vec2 tmpvar_16; + tmpvar_16 = tmpvar_15.xy; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_LightTextureB0, tmpvar_16); + return tmpvar_17.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_18, + in vec3 lightDir_19, + in float atten_20 +) +{ + vec4 c_21; + float diff_22; + float tmpvar_23; + tmpvar_23 = dot (s_18.Normal, lightDir_19); + float tmpvar_24; + tmpvar_24 = max (0.0, tmpvar_23); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + diff_22 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = ((s_18.Albedo * _LightColor0.xyz) * ((diff_22 * atten_20) * 2.0)); + c_21.xyz = tmpvar_26.xyz.xyz; + float tmpvar_27; + tmpvar_27 = s_18.Alpha; + c_21.w = vec4(tmpvar_27).w; + return c_21; +} + +vec4 frag_surf ( + in v2f_surf IN_28 +) +{ + vec4 c_29; + vec3 lightDir_30; + SurfaceOutput o_31; + Input surfIN_32; + vec2 tmpvar_33; + tmpvar_33 = IN_28.hip_pack0.xy; + surfIN_32.uv_MainTex = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(0.0, 0.0, 0.0); + o_31.Albedo = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = vec3(0.0, 0.0, 0.0); + o_31.Emission = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_31.Specular = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_31.Alpha = tmpvar_37; + float tmpvar_38; + tmpvar_38 = 0.0; + o_31.Gloss = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = IN_28.normal; + o_31.Normal = tmpvar_39; + surf (surfIN_32, o_31); + vec3 tmpvar_40; + tmpvar_40 = IN_28.lightDir; + lightDir_30 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = normalize (lightDir_30); + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + lightDir_30 = tmpvar_42; + float tmpvar_43; + tmpvar_43 = UnitySpotCookie (IN_28._LightCoord); + float tmpvar_44; + tmpvar_44 = UnitySpotAttenuate (IN_28._LightCoord.xyz); + vec4 tmpvar_45; + tmpvar_45 = LightingLambert (o_31, lightDir_30, ((float((IN_28._LightCoord.z > 0.0)) * tmpvar_43) * tmpvar_44)); + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + c_29 = tmpvar_46; + float tmpvar_47; + tmpvar_47 = 0.0; + c_29.w = vec4(tmpvar_47).w; + return c_29; +} + +void main () +{ + v2f_surf xlt_IN_48; + vec4 xl_retval_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_48.pos = tmpvar_50; + float tmpvar_51; + tmpvar_51 = xlv_FOG.x; + xlt_IN_48.fog = tmpvar_51; + vec2 tmpvar_52; + tmpvar_52 = gl_TexCoord[0].xy; + vec2 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_48.hip_pack0 = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = gl_TexCoord[1].xyz; + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_48.normal = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = gl_TexCoord[2].xyz; + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_48.lightDir = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = gl_TexCoord[3].xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_IN_48._LightCoord = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = frag_surf (xlt_IN_48); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + xl_retval_49 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = xl_retval_49.xyzw; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + gl_FragData[0] = tmpvar_63; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-out.txt new file mode 100644 index 000000000..11d8f415c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Legacy_Shaders_Lightmapped_Diffuse-out.txt @@ -0,0 +1,20 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform sampler2D _LightMap; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[3]; + vec4 c_2; + vec2 tmpvar_3; + vec4 c_4; + c_4.xyz = (((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _Color.xyz) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_1.xyz, tmpvar_1.xyz))).w)) * 2.0)); + c_4.w = (texture2D (_LightMap, tmpvar_3).w * _Color.w); + c_2.xyz = c_4.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-inES.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-MobileBumpSpec-inES.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-irES.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-irES.txt new file mode 100644 index 000000000..310c4830d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-irES.txt @@ -0,0 +1,187 @@ +struct SurfaceOutput { + lowp vec3 Albedo; + lowp vec3 Normal; + lowp vec3 Emission; + mediump float Specular; + lowp float Gloss; + lowp float Alpha; +}; +struct Input { + mediump vec2 uv_MainTex; +}; +struct v2f_surf { + highp vec4 pos; + mediump vec2 pack0; + mediump vec3 viewDir; + lowp vec3 lightDir; + lowp vec3 vlight; +}; +varying lowp vec3 xlv_TEXCOORD3; +varying lowp vec3 xlv_TEXCOORD2; +varying mediump vec3 xlv_TEXCOORD1; +varying mediump vec2 xlv_TEXCOORD0; +uniform mediump float _Shininess; +uniform sampler2D _MainTex; +uniform lowp vec4 _LightColor0; +uniform sampler2D _BumpMap; +lowp vec3 UnpackNormal ( + in lowp vec4 packednormal_1 +) +{ + return ((packednormal_1.xyz * 2.0) - 1.0); +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + lowp vec4 tex_4; + lowp vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + lowp vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + lowp vec3 tmpvar_7; + tmpvar_7 = tex_4.xyz; + o_3.Albedo = tmpvar_7; + lowp float tmpvar_8; + tmpvar_8 = tex_4.w; + o_3.Gloss = tmpvar_8; + lowp float tmpvar_9; + tmpvar_9 = tex_4.w; + o_3.Alpha = tmpvar_9; + mediump float tmpvar_10; + tmpvar_10 = _Shininess; + o_3.Specular = tmpvar_10; + lowp vec4 tmpvar_11; + tmpvar_11 = texture2D (_BumpMap, IN_2.uv_MainTex); + lowp vec3 tmpvar_12; + tmpvar_12 = UnpackNormal (tmpvar_11); + lowp vec3 tmpvar_13; + tmpvar_13 = tmpvar_12; + o_3.Normal = tmpvar_13; +} + +lowp vec4 LightingMobileBlinnPhong ( + in SurfaceOutput s_14, + in lowp vec3 lightDir_15, + in lowp vec3 halfDir_16, + in lowp float atten_17 +) +{ + lowp vec4 c_18; + lowp float spec_19; + lowp float nh_20; + lowp float diff_21; + lowp float tmpvar_22; + tmpvar_22 = dot (s_14.Normal, lightDir_15); + lowp float tmpvar_23; + tmpvar_23 = max (0.0, tmpvar_22); + lowp float tmpvar_24; + tmpvar_24 = tmpvar_23; + diff_21 = tmpvar_24; + lowp float tmpvar_25; + tmpvar_25 = dot (s_14.Normal, halfDir_16); + lowp float tmpvar_26; + tmpvar_26 = max (0.0, tmpvar_25); + lowp float tmpvar_27; + tmpvar_27 = tmpvar_26; + nh_20 = tmpvar_27; + mediump float tmpvar_28; + tmpvar_28 = pow (nh_20, (s_14.Specular * 128.0)); + mediump float tmpvar_29; + tmpvar_29 = (tmpvar_28 * s_14.Gloss); + spec_19 = tmpvar_29; + lowp vec3 tmpvar_30; + tmpvar_30 = ((((s_14.Albedo * diff_21) + spec_19) * _LightColor0.xyz) * (atten_17 * 2.0)); + c_18.xyz = tmpvar_30.xyz.xyz; + float tmpvar_31; + tmpvar_31 = 0.0; + c_18.w = vec4(tmpvar_31).w; + return c_18; +} + +lowp vec4 frag_surf ( + in v2f_surf IN_32 +) +{ + lowp vec4 c_33; + lowp float atten_34; + SurfaceOutput o_35; + Input surfIN_36; + mediump vec2 tmpvar_37; + tmpvar_37 = IN_32.pack0.xy; + surfIN_36.uv_MainTex = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_35.Albedo = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = vec3(0.0, 0.0, 0.0); + o_35.Emission = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_35.Specular = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_35.Alpha = tmpvar_41; + float tmpvar_42; + tmpvar_42 = 0.0; + o_35.Gloss = tmpvar_42; + surf (surfIN_36, o_35); + float tmpvar_43; + tmpvar_43 = 1.0; + atten_34 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = vec4(0.0, 0.0, 0.0, 0.0); + c_33 = tmpvar_44; + lowp vec4 tmpvar_45; + tmpvar_45 = LightingMobileBlinnPhong (o_35, IN_32.lightDir, IN_32.viewDir, atten_34); + lowp vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + c_33 = tmpvar_46; + lowp vec3 tmpvar_47; + tmpvar_47 = (c_33.xyz + (o_35.Albedo * IN_32.vlight)); + c_33.xyz = tmpvar_47.xyz.xyz; + return c_33; +} + +void main () +{ + v2f_surf xlt_IN_48; + lowp vec4 xl_retval_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_48.pos = tmpvar_50; + mediump vec2 tmpvar_51; + tmpvar_51 = xlv_TEXCOORD0.xy; + mediump vec2 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_48.pack0 = tmpvar_52; + mediump vec3 tmpvar_53; + tmpvar_53 = xlv_TEXCOORD1.xyz; + mediump vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_48.viewDir = tmpvar_54; + lowp vec3 tmpvar_55; + tmpvar_55 = xlv_TEXCOORD2.xyz; + lowp vec3 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_48.lightDir = tmpvar_56; + lowp vec3 tmpvar_57; + tmpvar_57 = xlv_TEXCOORD3.xyz; + lowp vec3 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_IN_48.vlight = tmpvar_58; + lowp vec4 tmpvar_59; + tmpvar_59 = frag_surf (xlt_IN_48); + lowp vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xl_retval_49 = tmpvar_60; + lowp vec4 tmpvar_61; + tmpvar_61 = xl_retval_49.xyzw; + lowp vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_FragData[0] = tmpvar_62; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES.txt new file mode 100644 index 000000000..870b2f631 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES.txt @@ -0,0 +1,31 @@ +varying lowp vec3 xlv_TEXCOORD3; +varying lowp vec3 xlv_TEXCOORD2; +varying mediump vec3 xlv_TEXCOORD1; +varying mediump vec2 xlv_TEXCOORD0; +uniform mediump float _Shininess; +uniform sampler2D _MainTex; +uniform lowp vec4 _LightColor0; +uniform sampler2D _BumpMap; +void main () +{ + lowp vec4 c_1; + lowp vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, xlv_TEXCOORD0); + lowp vec3 tmpvar_3; + tmpvar_3 = ((texture2D (_BumpMap, xlv_TEXCOORD0).xyz * 2.0) - 1.0); + lowp vec3 halfDir_4; + halfDir_4 = xlv_TEXCOORD1; + lowp vec4 c_5; + lowp float spec_6; + lowp float tmpvar_7; + tmpvar_7 = max (0.0, dot (tmpvar_3, halfDir_4)); + mediump float tmpvar_8; + tmpvar_8 = (pow (tmpvar_7, (_Shininess * 128.0)) * tmpvar_2.w); + spec_6 = tmpvar_8; + c_5.xyz = ((((tmpvar_2.xyz * max (0.0, dot (tmpvar_3, xlv_TEXCOORD2))) + spec_6) * _LightColor0.xyz) * 2.0); + c_5.w = 0.0; + c_1.w = c_5.w; + c_1.xyz = (c_5.xyz + (tmpvar_2.xyz * xlv_TEXCOORD3)); + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-ir.txt new file mode 100644 index 000000000..e65c20d5b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-ir.txt @@ -0,0 +1,44 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (tmpvar_2 * vec4(1.0, 0.0, 0.0, 1.0)); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = gl_Color.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = gl_TexCoord[0].xy; + vec2 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = frag (xlt_i_3); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_My_Soft_Occlusion_Leaves-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_My_Soft_Occlusion_Leaves-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-ir.txt new file mode 100644 index 000000000..6600c88e8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-ir.txt @@ -0,0 +1,187 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +float UnitySpotCookie ( + in vec4 LightCoord_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = texture2D (_LightTexture0, ((LightCoord_8.xy / LightCoord_8.w) + 0.5)); + return tmpvar_9.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_10 +) +{ + float tmpvar_11; + tmpvar_11 = dot (LightCoord_10, LightCoord_10); + vec2 tmpvar_12; + tmpvar_12 = vec2(tmpvar_11); + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12.xy; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_LightTextureB0, tmpvar_13); + return tmpvar_14.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_15, + in vec3 lightDir_16, + in float atten_17 +) +{ + vec4 c_18; + float diff_19; + float tmpvar_20; + tmpvar_20 = dot (s_15.Normal, lightDir_16); + float tmpvar_21; + tmpvar_21 = max (0.0, tmpvar_20); + float tmpvar_22; + tmpvar_22 = tmpvar_21; + diff_19 = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = ((s_15.Albedo * _LightColor0.xyz) * ((diff_19 * atten_17) * 2.0)); + c_18.xyz = tmpvar_23.xyz.xyz; + float tmpvar_24; + tmpvar_24 = s_15.Alpha; + c_18.w = vec4(tmpvar_24).w; + return c_18; +} + +vec4 frag_surf ( + in v2f_surf IN_25 +) +{ + vec4 c_26; + vec3 lightDir_27; + SurfaceOutput o_28; + Input surfIN_29; + vec2 tmpvar_30; + tmpvar_30 = IN_25.hip_pack0.xy; + surfIN_29.uv_MainTex = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_28.Albedo = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_28.Emission = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_28.Specular = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_28.Alpha = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_28.Gloss = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = IN_25.normal; + o_28.Normal = tmpvar_36; + surf (surfIN_29, o_28); + vec3 tmpvar_37; + tmpvar_37 = IN_25.lightDir; + lightDir_27 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = normalize (lightDir_27); + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + lightDir_27 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = UnitySpotCookie (IN_25._LightCoord); + float tmpvar_41; + tmpvar_41 = UnitySpotAttenuate (IN_25._LightCoord.xyz); + vec4 tmpvar_42; + tmpvar_42 = LightingLambert (o_28, lightDir_27, ((float((IN_25._LightCoord.z > 0.0)) * tmpvar_40) * tmpvar_41)); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + c_26 = tmpvar_43; + float tmpvar_44; + tmpvar_44 = 0.0; + c_26.w = vec4(tmpvar_44).w; + return c_26; +} + +void main () +{ + v2f_surf xlt_IN_45; + vec4 xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_45.pos = tmpvar_47; + float tmpvar_48; + tmpvar_48 = xlv_FOG.x; + xlt_IN_45.fog = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = gl_TexCoord[0].xy; + vec2 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_45.hip_pack0 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_45.normal = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[2].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_45.lightDir = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = gl_TexCoord[3].xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_45._LightCoord = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = frag_surf (xlt_IN_45); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xl_retval_46 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = xl_retval_46.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_FragData[0] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-out.txt new file mode 100644 index 000000000..f13bdcedc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark-out.txt @@ -0,0 +1,20 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[3]; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 c_4; + c_4.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_1.xyz, tmpvar_1.xyz))).w)) * 2.0)); + c_4.w = tmpvar_3.w; + c_2.xyz = c_4.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-ir.txt new file mode 100644 index 000000000..33e291825 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-ir.txt @@ -0,0 +1,155 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 LightingLambert ( + in SurfaceOutput s_8, + in vec3 lightDir_9, + in float atten_10 +) +{ + vec4 c_11; + float diff_12; + float tmpvar_13; + tmpvar_13 = dot (s_8.Normal, lightDir_9); + float tmpvar_14; + tmpvar_14 = max (0.0, tmpvar_13); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + diff_12 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = ((s_8.Albedo * _LightColor0.xyz) * ((diff_12 * atten_10) * 2.0)); + c_11.xyz = tmpvar_16.xyz.xyz; + float tmpvar_17; + tmpvar_17 = s_8.Alpha; + c_11.w = vec4(tmpvar_17).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_18 +) +{ + vec4 c_19; + vec3 lightDir_20; + SurfaceOutput o_21; + Input surfIN_22; + vec2 tmpvar_23; + tmpvar_23 = IN_18.hip_pack0.xy; + surfIN_22.uv_MainTex = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = vec3(0.0, 0.0, 0.0); + o_21.Albedo = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(0.0, 0.0, 0.0); + o_21.Emission = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_21.Specular = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_21.Alpha = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_21.Gloss = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = IN_18.normal; + o_21.Normal = tmpvar_29; + surf (surfIN_22, o_21); + vec3 tmpvar_30; + tmpvar_30 = IN_18.lightDir; + lightDir_20 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = texture2D (_LightTexture0, IN_18._LightCoord); + vec4 tmpvar_32; + tmpvar_32 = LightingLambert (o_21, lightDir_20, (tmpvar_31.w * 1.0)); + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + c_19 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + c_19.w = vec4(tmpvar_34).w; + return c_19; +} + +void main () +{ + v2f_surf xlt_IN_35; + vec4 xl_retval_36; + vec4 tmpvar_37; + tmpvar_37 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_35.pos = tmpvar_37; + float tmpvar_38; + tmpvar_38 = xlv_FOG.x; + xlt_IN_35.fog = tmpvar_38; + vec2 tmpvar_39; + tmpvar_39 = gl_TexCoord[0].xy; + vec2 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_35.hip_pack0 = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_TexCoord[1].xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_35.normal = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_TexCoord[2].xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_35.lightDir = tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = gl_TexCoord[3].xy; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_35._LightCoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = frag_surf (xlt_IN_35); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xl_retval_36 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = xl_retval_36.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_FragData[0] = tmpvar_50; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-out.txt new file mode 100644 index 000000000..68e3f5404 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark1-out.txt @@ -0,0 +1,17 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 c_3; + c_3.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_3.w = tmpvar_2.w; + c_1.xyz = c_3.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-ir.txt new file mode 100644 index 000000000..9f693d115 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-ir.txt @@ -0,0 +1,117 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + vec3 vec; +}; +uniform sampler2D _MainTex; +uniform vec4 _LightPositionRange; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 EncodeFloatRGBA ( + in float v_8 +) +{ + vec4 enc_9; + float kEncodeBit_10; + vec4 kEncodeMul_11; + vec4 tmpvar_12; + tmpvar_12 = vec4(1.0, 255.0, 65025.0, 1.60581e+08); + kEncodeMul_11 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = 0.00392157; + kEncodeBit_10 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (kEncodeMul_11 * v_8); + enc_9 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = fract (enc_9); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + enc_9 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = (enc_9 - (enc_9.yzww * kEncodeBit_10)); + enc_9 = tmpvar_17; + return enc_9; +} + +vec4 frag_surf ( + in v2f_surf IN_18 +) +{ + Input surfIN_19; + SurfaceOutput o_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_20.Albedo = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(0.0, 0.0, 0.0); + o_20.Emission = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_20.Specular = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_20.Alpha = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_20.Gloss = tmpvar_25; + surf (surfIN_19, o_20); + float tmpvar_26; + tmpvar_26 = length (IN_18.vec); + vec4 tmpvar_27; + tmpvar_27 = EncodeFloatRGBA ((tmpvar_26 * _LightPositionRange.w)); + return tmpvar_27; +} + +void main () +{ + v2f_surf xlt_IN_28; + vec4 xl_retval_29; + vec4 tmpvar_30; + tmpvar_30 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_28.pos = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = gl_TexCoord[0].xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_IN_28.vec = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = frag_surf (xlt_IN_28); + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xl_retval_29 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = xl_retval_29.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + gl_FragData[0] = tmpvar_36; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-out.txt new file mode 100644 index 000000000..1cc2b331d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark2-out.txt @@ -0,0 +1,10 @@ +uniform vec4 _LightPositionRange; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xyz; + vec4 tmpvar_2; + tmpvar_2 = fract((vec4(1.0, 255.0, 65025.0, 1.60581e+08) * (sqrt(dot (tmpvar_1, tmpvar_1)) * _LightPositionRange.w))); + gl_FragData[0] = (tmpvar_2 - (tmpvar_2.yzww * 0.00392157)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-ir.txt new file mode 100644 index 000000000..0bceaae70 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-ir.txt @@ -0,0 +1,311 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + vec3 _ShadowCoord0; + vec3 _ShadowCoord1; + vec3 _ShadowCoord2; + vec3 _ShadowCoord3; + vec2 _ShadowZFade; +}; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _MainTex; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform vec4 _Color; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec4 c_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec4 tmpvar_37; + tmpvar_37 = (tmpvar_36 * _Color); + c_35 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = c_35.xyz; + o_34.Albedo = tmpvar_38; + float tmpvar_39; + tmpvar_39 = c_35.w; + o_34.Alpha = tmpvar_39; +} + +vec2 EncodeFloatRG ( + in float v_40 +) +{ + vec2 enc_41; + float kEncodeBit_42; + vec2 kEncodeMul_43; + vec2 tmpvar_44; + tmpvar_44 = vec2(1.0, 255.0); + kEncodeMul_43 = tmpvar_44; + float tmpvar_45; + tmpvar_45 = 0.00392157; + kEncodeBit_42 = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = (kEncodeMul_43 * v_40); + enc_41 = tmpvar_46; + vec2 tmpvar_47; + tmpvar_47 = fract (enc_41); + vec2 tmpvar_48; + tmpvar_48 = tmpvar_47; + enc_41 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = (enc_41.x - (enc_41.y * kEncodeBit_42)); + enc_41.x = tmpvar_49; + return enc_41; +} + +vec4 frag_surf ( + in v2f_surf IN_50 +) +{ + vec4 res_51; + float faded_52; + float shadow_53; + vec4 coord_54; + vec4 weights_55; + vec4 far_56; + vec4 near_57; + vec4 z_58; + Input surfIN_59; + SurfaceOutput o_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_60.Albedo = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = vec3(0.0, 0.0, 0.0); + o_60.Emission = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_60.Specular = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_60.Alpha = tmpvar_64; + float tmpvar_65; + tmpvar_65 = 0.0; + o_60.Gloss = tmpvar_65; + surf (surfIN_59, o_60); + vec4 tmpvar_66; + tmpvar_66 = vec4(IN_50._ShadowZFade.x); + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + z_58 = tmpvar_67; + bvec4 tmpvar_68; + tmpvar_68 = greaterThanEqual (z_58, _LightSplitsNear); + vec4 tmpvar_69; + tmpvar_69 = vec4(tmpvar_68).xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + near_57 = tmpvar_70; + bvec4 tmpvar_71; + tmpvar_71 = lessThan (z_58, _LightSplitsFar); + vec4 tmpvar_72; + tmpvar_72 = vec4(tmpvar_71).xyzw; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + far_56 = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = (near_57 * far_56); + weights_55 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75.w = 1.0; + tmpvar_75.xyz = ((((IN_50._ShadowCoord0 * weights_55.x) + (IN_50._ShadowCoord1 * weights_55.y)) + (IN_50._ShadowCoord2 * weights_55.z)) + (IN_50._ShadowCoord3 * weights_55.w)).xyz; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + coord_54 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = texture2D (_ShadowMapTexture, coord_54.xy); + float tmpvar_78; + if ((tmpvar_77.x < coord_54.z)) { + tmpvar_78 = _LightShadowData.x; + } else { + tmpvar_78 = 1.0; + }; + float tmpvar_79; + tmpvar_79 = tmpvar_78; + shadow_53 = tmpvar_79; + float tmpvar_80; + tmpvar_80 = xll_saturate (IN_50._ShadowZFade.y); + float tmpvar_81; + tmpvar_81 = xll_saturate ((shadow_53 + tmpvar_80)); + float tmpvar_82; + tmpvar_82 = tmpvar_81; + faded_52 = tmpvar_82; + float tmpvar_83; + tmpvar_83 = faded_52; + res_51.x = tmpvar_83; + float tmpvar_84; + tmpvar_84 = 1.0; + res_51.y = vec2(tmpvar_84).y; + vec2 tmpvar_85; + tmpvar_85 = EncodeFloatRG ((1.0 - (z_58 * _ProjectionParams.w)).x); + vec2 tmpvar_86; + tmpvar_86 = tmpvar_85; + res_51.zw = tmpvar_86.xxxy.zw; + return res_51; +} + +void main () +{ + v2f_surf xlt_IN_87; + vec4 xl_retval_88; + vec4 tmpvar_89; + tmpvar_89 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_87.pos = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = gl_TexCoord[0].xyz; + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_87._ShadowCoord0 = tmpvar_91; + vec3 tmpvar_92; + tmpvar_92 = gl_TexCoord[1].xyz; + vec3 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_87._ShadowCoord1 = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = gl_TexCoord[2].xyz; + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_87._ShadowCoord2 = tmpvar_95; + vec3 tmpvar_96; + tmpvar_96 = gl_TexCoord[3].xyz; + vec3 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_87._ShadowCoord3 = tmpvar_97; + vec2 tmpvar_98; + tmpvar_98 = gl_TexCoord[4].xy; + vec2 tmpvar_99; + tmpvar_99 = tmpvar_98; + xlt_IN_87._ShadowZFade = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = frag_surf (xlt_IN_87); + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + xl_retval_88 = tmpvar_101; + vec4 tmpvar_102; + tmpvar_102 = xl_retval_88.xyzw; + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + gl_FragData[0] = tmpvar_103; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-out.txt similarity index 57% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-out.txt index 2c8a73d1a..f3246ca48 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Bark3-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Bark3-out.txt @@ -7,11 +7,9 @@ void main () { vec2 tmpvar_1; tmpvar_1 = gl_TexCoord[4].xy; - vec4 res; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1.xxxx; + vec4 res_2; vec4 tmpvar_3; - tmpvar_3 = (vec4(greaterThanEqual (tmpvar_2, _LightSplitsNear)) * vec4(lessThan (tmpvar_2, _LightSplitsFar))); + tmpvar_3 = (vec4(greaterThanEqual (tmpvar_1.xxxx, _LightSplitsNear)) * vec4(lessThan (tmpvar_1.xxxx, _LightSplitsFar))); vec4 tmpvar_4; tmpvar_4.w = 1.0; tmpvar_4.xyz = ((((gl_TexCoord[0].xyz * tmpvar_3.x) + (gl_TexCoord[1].xyz * tmpvar_3.y)) + (gl_TexCoord[2].xyz * tmpvar_3.z)) + (gl_TexCoord[3].xyz * tmpvar_3.w)); @@ -23,14 +21,14 @@ void main () } else { tmpvar_6 = 1.0; }; - res.x = clamp ((tmpvar_6 + clamp (tmpvar_1.y, 0.0, 1.0)), 0.0, 1.0); - res.y = 1.0; - vec2 enc; - vec2 tmpvar_7; - tmpvar_7 = fract ((vec2(1.0, 255.0) * (1.0 - (tmpvar_1.xxxx * _ProjectionParams.w)).x)); - enc = tmpvar_7; - enc.x = (tmpvar_7.x - (tmpvar_7.y * 0.00392157)); - res.zw = enc; - gl_FragData[0] = res; + res_2.x = clamp ((tmpvar_6 + clamp (tmpvar_1.y, 0.0, 1.0)), 0.0, 1.0); + res_2.y = 1.0; + vec2 enc_7; + vec2 tmpvar_8; + tmpvar_8 = fract((vec2(1.0, 255.0) * (1.0 - (tmpvar_1.xxxx * _ProjectionParams.w)).x)); + enc_7.y = tmpvar_8.y; + enc_7.x = (tmpvar_8.x - (tmpvar_8.y * 0.00392157)); + res_2.zw = enc_7; + gl_FragData[0] = res_2; } diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-ir.txt new file mode 100644 index 000000000..1a0b3acfe --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-ir.txt @@ -0,0 +1,183 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 vlight; + vec4 _ShadowCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float unitySampleShadow ( + in vec4 shadowCoord_2 +) +{ + float shadow_3; + vec4 tmpvar_4; + tmpvar_4 = texture2DProj (_ShadowMapTexture, shadowCoord_2); + float tmpvar_5; + tmpvar_5 = tmpvar_4.x; + shadow_3 = tmpvar_5; + return shadow_3; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * _Color); + c_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = c_8.xyz; + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = c_8.w; + o_7.Alpha = tmpvar_12; +} + +vec4 LightingLambert ( + in SurfaceOutput s_13, + in vec3 lightDir_14, + in float atten_15 +) +{ + vec4 c_16; + float diff_17; + float tmpvar_18; + tmpvar_18 = dot (s_13.Normal, lightDir_14); + float tmpvar_19; + tmpvar_19 = max (0.0, tmpvar_18); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + diff_17 = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = ((s_13.Albedo * _LightColor0.xyz) * ((diff_17 * atten_15) * 2.0)); + c_16.xyz = tmpvar_21.xyz.xyz; + float tmpvar_22; + tmpvar_22 = s_13.Alpha; + c_16.w = vec4(tmpvar_22).w; + return c_16; +} + +vec4 frag_surf ( + in v2f_surf IN_23 +) +{ + vec4 c_24; + float atten_25; + SurfaceOutput o_26; + Input surfIN_27; + vec2 tmpvar_28; + tmpvar_28 = IN_23.hip_pack0.xy; + surfIN_27.uv_MainTex = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = vec3(0.0, 0.0, 0.0); + o_26.Albedo = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(0.0, 0.0, 0.0); + o_26.Emission = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_26.Specular = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_26.Alpha = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_26.Gloss = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = IN_23.normal; + o_26.Normal = tmpvar_34; + surf (surfIN_27, o_26); + xll_clip ((o_26.Alpha - _Cutoff)); + float tmpvar_35; + tmpvar_35 = unitySampleShadow (IN_23._ShadowCoord); + float tmpvar_36; + tmpvar_36 = tmpvar_35; + atten_25 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = LightingLambert (o_26, _WorldSpaceLightPos0.xyz, atten_25); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + c_24 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = (c_24.xyz + (o_26.Albedo * IN_23.vlight)); + c_24.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = o_26.Alpha; + c_24.w = vec4(tmpvar_40).w; + return c_24; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + float tmpvar_44; + tmpvar_44 = xlv_FOG.x; + xlt_IN_41.fog = tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = gl_TexCoord[0].xy; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_41.hip_pack0 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[1].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_41.normal = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[2].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_41.vlight = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_TexCoord[3].xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_41._ShadowCoord = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = frag_surf (xlt_IN_41); + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_42 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_42.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_FragData[0] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-out.txt new file mode 100644 index 000000000..723512800 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves-out.txt @@ -0,0 +1,26 @@ +uniform vec4 _WorldSpaceLightPos0; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + float tmpvar_3; + tmpvar_3 = tmpvar_2.w; + float x_4; + x_4 = (tmpvar_2.w - _Cutoff); + if ((x_4 < 0.0)) { + discard; + }; + vec4 c_5; + c_5.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, _WorldSpaceLightPos0.xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[3]).x) * 2.0)); + c_5.w = tmpvar_3; + c_1.xyz = (c_5.xyz + (tmpvar_2.xyz * gl_TexCoord[2].xyz)); + c_1.w = tmpvar_3; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-ir.txt new file mode 100644 index 000000000..9deaeab4c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-ir.txt @@ -0,0 +1,147 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * _Color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_9, + in vec4 light_10 +) +{ + vec4 c_11; + vec3 tmpvar_12; + tmpvar_12 = (s_9.Albedo * light_10.xyz); + c_11.xyz = tmpvar_12.xyz.xyz; + float tmpvar_13; + tmpvar_13 = s_9.Alpha; + c_11.w = vec4(tmpvar_13).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_14 +) +{ + vec4 col_15; + vec4 light_16; + SurfaceOutput o_17; + Input surfIN_18; + vec2 tmpvar_19; + tmpvar_19 = IN_14.hip_pack0.xy; + surfIN_18.uv_MainTex = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(0.0, 0.0, 0.0); + o_17.Albedo = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_17.Emission = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_17.Specular = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_17.Alpha = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_17.Gloss = tmpvar_24; + surf (surfIN_18, o_17); + xll_clip ((o_17.Alpha - _Cutoff)); + vec4 tmpvar_25; + tmpvar_25 = texture2DProj (_LightBuffer, IN_14.hip_screen); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + light_16 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = log2 (light_16); + vec4 tmpvar_28; + tmpvar_28 = -(tmpvar_27); + light_16 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (light_16.xyz + unity_Ambient.xyz); + light_16.xyz = tmpvar_29.xyz.xyz; + vec4 tmpvar_30; + tmpvar_30 = LightingLambert_PrePass (o_17, light_16); + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + col_15 = tmpvar_31; + return col_15; +} + +void main () +{ + v2f_surf xlt_IN_32; + vec4 xl_retval_33; + vec4 tmpvar_34; + tmpvar_34 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_32.pos = tmpvar_34; + float tmpvar_35; + tmpvar_35 = xlv_FOG.x; + xlt_IN_32.fog = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = gl_TexCoord[0].xy; + vec2 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_IN_32.hip_pack0 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_TexCoord[1].xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_IN_32.hip_screen = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = frag_surf (xlt_IN_32); + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xl_retval_33 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_33.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_FragData[0] = tmpvar_43; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-out.txt new file mode 100644 index 000000000..db7c24bcf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves1-out.txt @@ -0,0 +1,25 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec4 light_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + float x_3; + x_3 = (tmpvar_2.w - _Cutoff); + if ((x_3 < 0.0)) { + discard; + }; + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_1.w = tmpvar_4.w; + light_1.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); + vec4 c_5; + c_5.xyz = (tmpvar_2.xyz * light_1.xyz); + c_5.w = tmpvar_2.w; + gl_FragData[0] = c_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-ir.txt new file mode 100644 index 000000000..1bc77ad26 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-ir.txt @@ -0,0 +1,292 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +void surf ( + in Input IN_34, + inout SurfaceOutput o_35 +) +{ + vec4 c_36; + vec4 tmpvar_37; + tmpvar_37 = texture2D (_MainTex, IN_34.uv_MainTex); + vec4 tmpvar_38; + tmpvar_38 = (tmpvar_37 * _Color); + c_36 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = c_36.xyz; + o_35.Albedo = tmpvar_39; + float tmpvar_40; + tmpvar_40 = c_36.w; + o_35.Alpha = tmpvar_40; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_41, + in vec4 light_42 +) +{ + vec4 c_43; + vec3 tmpvar_44; + tmpvar_44 = (s_41.Albedo * light_42.xyz); + c_43.xyz = tmpvar_44.xyz.xyz; + float tmpvar_45; + tmpvar_45 = s_41.Alpha; + c_43.w = vec4(tmpvar_45).w; + return c_43; +} + +vec3 DecodeLightmap ( + in vec4 color_46 +) +{ + return (2.0 * color_46.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_47 +) +{ + vec4 col_48; + vec3 lm_49; + vec3 lmIndirect_50; + vec3 lmFull_51; + vec4 light_52; + SurfaceOutput o_53; + Input surfIN_54; + vec2 tmpvar_55; + tmpvar_55 = IN_47.hip_pack0.xy; + surfIN_54.uv_MainTex = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_53.Albedo = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = vec3(0.0, 0.0, 0.0); + o_53.Emission = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_53.Specular = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_53.Alpha = tmpvar_59; + float tmpvar_60; + tmpvar_60 = 0.0; + o_53.Gloss = tmpvar_60; + surf (surfIN_54, o_53); + xll_clip ((o_53.Alpha - _Cutoff)); + vec4 tmpvar_61; + tmpvar_61 = texture2DProj (_LightBuffer, IN_47.hip_screen); + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + light_52 = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = log2 (light_52); + vec4 tmpvar_64; + tmpvar_64 = -(tmpvar_63); + light_52 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = texture2D (unity_Lightmap, IN_47.hip_lmapFade.xy); + vec3 tmpvar_66; + tmpvar_66 = DecodeLightmap (tmpvar_65); + vec3 tmpvar_67; + tmpvar_67 = tmpvar_66; + lmFull_51 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = texture2D (unity_LightmapInd, IN_47.hip_lmapFade.xy); + vec3 tmpvar_69; + tmpvar_69 = DecodeLightmap (tmpvar_68); + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + lmIndirect_50 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = xll_saturate (IN_47.hip_lmapFade.z); + vec3 tmpvar_72; + tmpvar_72 = vec3(tmpvar_71); + vec3 tmpvar_73; + tmpvar_73 = mix (lmIndirect_50, lmFull_51, tmpvar_72); + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + lm_49 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = (light_52.xyz + lm_49); + light_52.xyz = tmpvar_75.xyz.xyz; + vec4 tmpvar_76; + tmpvar_76 = LightingLambert_PrePass (o_53, light_52); + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + col_48 = tmpvar_77; + return col_48; +} + +void main () +{ + v2f_surf xlt_IN_78; + vec4 xl_retval_79; + vec4 tmpvar_80; + tmpvar_80 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_78.pos = tmpvar_80; + float tmpvar_81; + tmpvar_81 = xlv_FOG.x; + xlt_IN_78.fog = tmpvar_81; + vec2 tmpvar_82; + tmpvar_82 = gl_TexCoord[0].xy; + vec2 tmpvar_83; + tmpvar_83 = tmpvar_82; + xlt_IN_78.hip_pack0 = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = gl_TexCoord[1].xyzw; + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + xlt_IN_78.hip_screen = tmpvar_85; + vec3 tmpvar_86; + tmpvar_86 = gl_TexCoord[2].xyz; + vec3 tmpvar_87; + tmpvar_87 = tmpvar_86; + xlt_IN_78.hip_lmapFade = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = frag_surf (xlt_IN_78); + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + xl_retval_79 = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = xl_retval_79.xyzw; + vec4 tmpvar_91; + tmpvar_91 = tmpvar_90; + gl_FragData[0] = tmpvar_91; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-out.txt new file mode 100644 index 000000000..ba929b1d2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves2-out.txt @@ -0,0 +1,28 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + float x_4; + x_4 = (tmpvar_3.w - _Cutoff); + if ((x_4 < 0.0)) { + discard; + }; + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_5.w; + light_2.xyz = (tmpvar_5.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_6; + c_6.xyz = (tmpvar_3.xyz * light_2.xyz); + c_6.w = tmpvar_3.w; + gl_FragData[0] = c_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Soft_Occlusion_Leaves3-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-ir.txt new file mode 100644 index 000000000..d9e314ad9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-ir.txt @@ -0,0 +1,137 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + vec3 vec; + vec2 hip_pack0; +}; +uniform sampler2D _MainTex; +uniform vec4 _LightPositionRange; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * _Color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +vec4 EncodeFloatRGBA ( + in float v_9 +) +{ + vec4 enc_10; + float kEncodeBit_11; + vec4 kEncodeMul_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(1.0, 255.0, 65025.0, 1.60581e+08); + kEncodeMul_12 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = 0.00392157; + kEncodeBit_11 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = (kEncodeMul_12 * v_9); + enc_10 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = fract (enc_10); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + enc_10 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = (enc_10 - (enc_10.yzww * kEncodeBit_11)); + enc_10 = tmpvar_18; + return enc_10; +} + +vec4 frag_surf ( + in v2f_surf IN_19 +) +{ + SurfaceOutput o_20; + Input surfIN_21; + vec2 tmpvar_22; + tmpvar_22 = IN_19.hip_pack0.xy; + surfIN_21.uv_MainTex = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = vec3(0.0, 0.0, 0.0); + o_20.Albedo = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = vec3(0.0, 0.0, 0.0); + o_20.Emission = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_20.Specular = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_20.Alpha = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_20.Gloss = tmpvar_27; + surf (surfIN_21, o_20); + xll_clip ((o_20.Alpha - _Cutoff)); + float tmpvar_28; + tmpvar_28 = length (IN_19.vec); + vec4 tmpvar_29; + tmpvar_29 = EncodeFloatRGBA ((tmpvar_28 * _LightPositionRange.w)); + return tmpvar_29; +} + +void main () +{ + v2f_surf xlt_IN_30; + vec4 xl_retval_31; + vec4 tmpvar_32; + tmpvar_32 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_30.pos = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = gl_TexCoord[0].xyz; + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_IN_30.vec = tmpvar_34; + vec2 tmpvar_35; + tmpvar_35 = gl_TexCoord[1].xy; + vec2 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_IN_30.hip_pack0 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = frag_surf (xlt_IN_30); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xl_retval_31 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_31.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_FragData[0] = tmpvar_40; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-out.txt new file mode 100644 index 000000000..d7ec7de10 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Soft_Occlusion_Leaves3-out.txt @@ -0,0 +1,18 @@ +uniform sampler2D _MainTex; +uniform vec4 _LightPositionRange; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xyz; + float x_2; + x_2 = ((texture2D (_MainTex, gl_TexCoord[1].xy) * _Color).w - _Cutoff); + if ((x_2 < 0.0)) { + discard; + }; + vec4 tmpvar_3; + tmpvar_3 = fract((vec4(1.0, 255.0, 65025.0, 1.60581e+08) * (sqrt(dot (tmpvar_1, tmpvar_1)) * _LightPositionRange.w))); + gl_FragData[0] = (tmpvar_3 - (tmpvar_3.yzww * 0.00392157)); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-ir.txt new file mode 100644 index 000000000..4db73ab7c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-ir.txt @@ -0,0 +1,60 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 frag ( + in v2f i_2 +) +{ + vec4 col_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, i_2.texcoord); + vec4 tmpvar_5; + tmpvar_5 = (_Color * tmpvar_4); + col_3 = tmpvar_5; + xll_clip ((col_3.w - _Cutoff)); + return col_3; +} + +void main () +{ + v2f xlt_i_6; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_6.vertex = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = gl_Color.xyzw; + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_6.color = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = gl_TexCoord[0].xy; + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_6.texcoord = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = frag (xlt_i_6); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_7 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_7.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-out.txt similarity index 76% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-out.txt index 05d8968ec..e2218a9cc 100644 --- a/3rdparty/glsl-optimizer/tests/fragment/unity-Nature_Vegetation_Two_Pass_unlit-out.txt +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Nature_Vegetation_Two_Pass_unlit-out.txt @@ -5,9 +5,9 @@ void main () { vec4 tmpvar_1; tmpvar_1 = (_Color * texture2D (_MainTex, gl_TexCoord[0].xy)); - float x; - x = (tmpvar_1.w - _Cutoff); - if ((x < 0.0)) { + float x_2; + x_2 = (tmpvar_1.w - _Cutoff); + if ((x_2 < 0.0)) { discard; }; gl_FragData[0] = tmpvar_1; diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-ir.txt new file mode 100644 index 000000000..661183fe2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-ir.txt @@ -0,0 +1,246 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 vlight; + vec4 _ShadowCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +float unitySampleShadow ( + in vec4 shadowCoord_1 +) +{ + float shadow_2; + vec4 tmpvar_3; + tmpvar_3 = texture2DProj (_ShadowMapTexture, shadowCoord_1); + float tmpvar_4; + tmpvar_4 = tmpvar_3.x; + shadow_2 = tmpvar_4; + return shadow_2; +} + +vec4 UnpackNormal ( + in vec4 packednormal_5 +) +{ + vec4 normal_6; + vec2 tmpvar_7; + tmpvar_7 = ((packednormal_5.wy * 2.0) - 1.0); + normal_6.xy = tmpvar_7.xy.xy; + float tmpvar_8; + tmpvar_8 = sqrt (((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + float tmpvar_9; + tmpvar_9 = tmpvar_8; + normal_6.z = vec3(tmpvar_9).z; + return normal_6; +} + +vec2 ParallaxOffset ( + in float h_10, + in float height_11, + in vec3 viewDir_12 +) +{ + vec3 v_13; + float tmpvar_14; + tmpvar_14 = ((h_10 * height_11) - (height_11 / 2.0)); + h_10 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = normalize (viewDir_12); + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15; + v_13 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = (v_13.z + 0.42); + v_13.z = vec3(tmpvar_17).z; + return (h_10 * (v_13.xy / v_13.z)); +} + +void surf ( + in Input IN_18, + inout SurfaceOutput o_19 +) +{ + vec4 c_20; + vec2 offset_21; + float h_22; + vec4 tmpvar_23; + tmpvar_23 = texture2D (_ParallaxMap, IN_18.uv_BumpMap); + float tmpvar_24; + tmpvar_24 = tmpvar_23.w; + h_22 = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = ParallaxOffset (h_22, _Parallax, IN_18.viewDir); + vec2 tmpvar_26; + tmpvar_26 = tmpvar_25; + offset_21 = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = (IN_18.uv_MainTex + offset_21); + IN_18.uv_MainTex = tmpvar_27; + vec2 tmpvar_28; + tmpvar_28 = (IN_18.uv_BumpMap + offset_21); + IN_18.uv_BumpMap = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_MainTex, IN_18.uv_MainTex); + vec4 tmpvar_30; + tmpvar_30 = (tmpvar_29 * _Color); + c_20 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = c_20.xyz; + o_19.Albedo = tmpvar_31; + float tmpvar_32; + tmpvar_32 = c_20.w; + o_19.Alpha = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = texture2D (_BumpMap, IN_18.uv_BumpMap); + vec4 tmpvar_34; + tmpvar_34 = UnpackNormal (tmpvar_33); + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34.xyz; + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + o_19.Normal = tmpvar_36; +} + +vec4 LightingLambert ( + in SurfaceOutput s_37, + in vec3 lightDir_38, + in float atten_39 +) +{ + vec4 c_40; + float diff_41; + float tmpvar_42; + tmpvar_42 = dot (s_37.Normal, lightDir_38); + float tmpvar_43; + tmpvar_43 = max (0.0, tmpvar_42); + float tmpvar_44; + tmpvar_44 = tmpvar_43; + diff_41 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = ((s_37.Albedo * _LightColor0.xyz) * ((diff_41 * atten_39) * 2.0)); + c_40.xyz = tmpvar_45.xyz.xyz; + float tmpvar_46; + tmpvar_46 = s_37.Alpha; + c_40.w = vec4(tmpvar_46).w; + return c_40; +} + +vec4 frag_surf ( + in v2f_surf IN_47 +) +{ + vec4 c_48; + float atten_49; + SurfaceOutput o_50; + Input surfIN_51; + vec2 tmpvar_52; + tmpvar_52 = IN_47.hip_pack0.xy; + surfIN_51.uv_MainTex = tmpvar_52; + vec2 tmpvar_53; + tmpvar_53 = IN_47.hip_pack0.zw; + surfIN_51.uv_BumpMap = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = IN_47.viewDir; + surfIN_51.viewDir = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = vec3(0.0, 0.0, 0.0); + o_50.Albedo = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_50.Emission = tmpvar_56; + float tmpvar_57; + tmpvar_57 = 0.0; + o_50.Specular = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_50.Alpha = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_50.Gloss = tmpvar_59; + surf (surfIN_51, o_50); + float tmpvar_60; + tmpvar_60 = unitySampleShadow (IN_47._ShadowCoord); + float tmpvar_61; + tmpvar_61 = tmpvar_60; + atten_49 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = LightingLambert (o_50, IN_47.lightDir, atten_49); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + c_48 = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = (c_48.xyz + (o_50.Albedo * IN_47.vlight)); + c_48.xyz = tmpvar_64.xyz.xyz; + return c_48; +} + +void main () +{ + v2f_surf xlt_IN_65; + vec4 xl_retval_66; + vec4 tmpvar_67; + tmpvar_67 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_65.pos = tmpvar_67; + float tmpvar_68; + tmpvar_68 = xlv_FOG.x; + xlt_IN_65.fog = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = gl_TexCoord[0].xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_65.hip_pack0 = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = gl_TexCoord[1].xyz; + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_IN_65.viewDir = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = gl_TexCoord[2].xyz; + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_IN_65.lightDir = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = gl_TexCoord[3].xyz; + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_IN_65.vlight = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = gl_TexCoord[4].xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_IN_65._ShadowCoord = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = frag_surf (xlt_IN_65); + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + xl_retval_66 = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = xl_retval_66.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + gl_FragData[0] = tmpvar_82; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-out.txt new file mode 100644 index 000000000..f6ae0c87d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse-out.txt @@ -0,0 +1,32 @@ +uniform sampler2D _ShadowMapTexture; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec2 tmpvar_3; + vec3 v_4; + vec3 tmpvar_5; + tmpvar_5 = normalize(gl_TexCoord[1].xyz); + v_4.xy = tmpvar_5.xy; + v_4.z = (tmpvar_5.z + 0.42); + tmpvar_3 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v_4.z)); + vec4 tmpvar_6; + tmpvar_6 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_3)) * _Color); + vec4 normal_7; + normal_7.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_3)).wy * 2.0) - 1.0); + normal_7.z = sqrt(((1.0 - (normal_7.x * normal_7.x)) - (normal_7.y * normal_7.y))); + vec4 c_8; + c_8.xyz = ((tmpvar_6.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_7.xyz, gl_TexCoord[2].xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[4]).x) * 2.0)); + c_8.w = tmpvar_6.w; + c_2.w = c_8.w; + c_2.xyz = (c_8.xyz + (tmpvar_6.xyz * gl_TexCoord[3].xyz)); + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-ir.txt new file mode 100644 index 000000000..f7332b57b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-ir.txt @@ -0,0 +1,217 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 c_16; + vec2 offset_17; + float h_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_20; + tmpvar_20 = tmpvar_19.w; + h_18 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ParallaxOffset (h_18, _Parallax, IN_14.viewDir); + vec2 tmpvar_22; + tmpvar_22 = tmpvar_21; + offset_17 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = (IN_14.uv_MainTex + offset_17); + IN_14.uv_MainTex = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_BumpMap + offset_17); + IN_14.uv_BumpMap = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_26; + tmpvar_26 = (tmpvar_25 * _Color); + c_16 = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = c_16.xyz; + o_15.Albedo = tmpvar_27; + float tmpvar_28; + tmpvar_28 = c_16.w; + o_15.Alpha = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_30; + tmpvar_30 = UnpackNormal (tmpvar_29); + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + o_15.Normal = tmpvar_32; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_33, + in vec4 light_34 +) +{ + vec4 c_35; + vec3 tmpvar_36; + tmpvar_36 = (s_33.Albedo * light_34.xyz); + c_35.xyz = tmpvar_36.xyz.xyz; + float tmpvar_37; + tmpvar_37 = s_33.Alpha; + c_35.w = vec4(tmpvar_37).w; + return c_35; +} + +vec4 frag_surf ( + in v2f_surf IN_38 +) +{ + vec4 col_39; + vec4 light_40; + SurfaceOutput o_41; + Input surfIN_42; + vec2 tmpvar_43; + tmpvar_43 = IN_38.hip_pack0.xy; + surfIN_42.uv_MainTex = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = IN_38.hip_pack0.zw; + surfIN_42.uv_BumpMap = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = IN_38.viewDir; + surfIN_42.viewDir = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = vec3(0.0, 0.0, 0.0); + o_41.Albedo = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = vec3(0.0, 0.0, 0.0); + o_41.Emission = tmpvar_47; + float tmpvar_48; + tmpvar_48 = 0.0; + o_41.Specular = tmpvar_48; + float tmpvar_49; + tmpvar_49 = 0.0; + o_41.Alpha = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_41.Gloss = tmpvar_50; + surf (surfIN_42, o_41); + vec4 tmpvar_51; + tmpvar_51 = texture2DProj (_LightBuffer, IN_38.hip_screen); + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + light_40 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = log2 (light_40); + vec4 tmpvar_54; + tmpvar_54 = -(tmpvar_53); + light_40 = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = (light_40.xyz + unity_Ambient.xyz); + light_40.xyz = tmpvar_55.xyz.xyz; + vec4 tmpvar_56; + tmpvar_56 = LightingLambert_PrePass (o_41, light_40); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + col_39 = tmpvar_57; + return col_39; +} + +void main () +{ + v2f_surf xlt_IN_58; + vec4 xl_retval_59; + vec4 tmpvar_60; + tmpvar_60 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_58.pos = tmpvar_60; + float tmpvar_61; + tmpvar_61 = xlv_FOG.x; + xlt_IN_58.fog = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = gl_TexCoord[0].xyzw; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_IN_58.hip_pack0 = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = gl_TexCoord[1].xyz; + vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_IN_58.viewDir = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = gl_TexCoord[2].xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_IN_58.hip_screen = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = frag_surf (xlt_IN_58); + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + xl_retval_59 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = xl_retval_59.xyzw; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + gl_FragData[0] = tmpvar_71; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-out.txt new file mode 100644 index 000000000..975f628ae --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse1-out.txt @@ -0,0 +1,34 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 light_2; + vec2 tmpvar_3; + vec3 v_4; + vec3 tmpvar_5; + tmpvar_5 = normalize(gl_TexCoord[1].xyz); + v_4.xy = tmpvar_5.xy; + v_4.z = (tmpvar_5.z + 0.42); + tmpvar_3 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v_4.z)); + vec4 tmpvar_6; + tmpvar_6 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_3)) * _Color); + vec4 normal_7; + normal_7.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_3)).wy * 2.0) - 1.0); + normal_7.z = sqrt(((1.0 - (normal_7.x * normal_7.x)) - (normal_7.y * normal_7.y))); + vec4 tmpvar_8; + tmpvar_8 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_2.w = tmpvar_8.w; + light_2.xyz = (tmpvar_8.xyz + unity_Ambient.xyz); + vec4 c_9; + c_9.xyz = (tmpvar_6.xyz * light_2.xyz); + c_9.w = tmpvar_6.w; + gl_FragData[0] = c_9; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-ir.txt new file mode 100644 index 000000000..b10235121 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-ir.txt @@ -0,0 +1,362 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec4 UnpackNormal ( + in vec4 packednormal_33 +) +{ + vec4 normal_34; + vec2 tmpvar_35; + tmpvar_35 = ((packednormal_33.wy * 2.0) - 1.0); + normal_34.xy = tmpvar_35.xy.xy; + float tmpvar_36; + tmpvar_36 = sqrt (((1.0 - (normal_34.x * normal_34.x)) - (normal_34.y * normal_34.y))); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + normal_34.z = vec3(tmpvar_37).z; + return normal_34; +} + +vec2 ParallaxOffset ( + in float h_38, + in float height_39, + in vec3 viewDir_40 +) +{ + vec3 v_41; + float tmpvar_42; + tmpvar_42 = ((h_38 * height_39) - (height_39 / 2.0)); + h_38 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = normalize (viewDir_40); + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + v_41 = tmpvar_44; + float tmpvar_45; + tmpvar_45 = (v_41.z + 0.42); + v_41.z = vec3(tmpvar_45).z; + return (h_38 * (v_41.xy / v_41.z)); +} + +void surf ( + in Input IN_46, + inout SurfaceOutput o_47 +) +{ + vec4 c_48; + vec2 offset_49; + float h_50; + vec4 tmpvar_51; + tmpvar_51 = texture2D (_ParallaxMap, IN_46.uv_BumpMap); + float tmpvar_52; + tmpvar_52 = tmpvar_51.w; + h_50 = tmpvar_52; + vec2 tmpvar_53; + tmpvar_53 = ParallaxOffset (h_50, _Parallax, IN_46.viewDir); + vec2 tmpvar_54; + tmpvar_54 = tmpvar_53; + offset_49 = tmpvar_54; + vec2 tmpvar_55; + tmpvar_55 = (IN_46.uv_MainTex + offset_49); + IN_46.uv_MainTex = tmpvar_55; + vec2 tmpvar_56; + tmpvar_56 = (IN_46.uv_BumpMap + offset_49); + IN_46.uv_BumpMap = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = texture2D (_MainTex, IN_46.uv_MainTex); + vec4 tmpvar_58; + tmpvar_58 = (tmpvar_57 * _Color); + c_48 = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = c_48.xyz; + o_47.Albedo = tmpvar_59; + float tmpvar_60; + tmpvar_60 = c_48.w; + o_47.Alpha = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = texture2D (_BumpMap, IN_46.uv_BumpMap); + vec4 tmpvar_62; + tmpvar_62 = UnpackNormal (tmpvar_61); + vec3 tmpvar_63; + tmpvar_63 = tmpvar_62.xyz; + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + o_47.Normal = tmpvar_64; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_65, + in vec4 light_66 +) +{ + vec4 c_67; + vec3 tmpvar_68; + tmpvar_68 = (s_65.Albedo * light_66.xyz); + c_67.xyz = tmpvar_68.xyz.xyz; + float tmpvar_69; + tmpvar_69 = s_65.Alpha; + c_67.w = vec4(tmpvar_69).w; + return c_67; +} + +vec3 DecodeLightmap ( + in vec4 color_70 +) +{ + return (2.0 * color_70.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_71 +) +{ + vec4 col_72; + vec3 lm_73; + vec3 lmIndirect_74; + vec3 lmFull_75; + vec4 light_76; + SurfaceOutput o_77; + Input surfIN_78; + vec2 tmpvar_79; + tmpvar_79 = IN_71.hip_pack0.xy; + surfIN_78.uv_MainTex = tmpvar_79; + vec2 tmpvar_80; + tmpvar_80 = IN_71.hip_pack0.zw; + surfIN_78.uv_BumpMap = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = IN_71.viewDir; + surfIN_78.viewDir = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = vec3(0.0, 0.0, 0.0); + o_77.Albedo = tmpvar_82; + vec3 tmpvar_83; + tmpvar_83 = vec3(0.0, 0.0, 0.0); + o_77.Emission = tmpvar_83; + float tmpvar_84; + tmpvar_84 = 0.0; + o_77.Specular = tmpvar_84; + float tmpvar_85; + tmpvar_85 = 0.0; + o_77.Alpha = tmpvar_85; + float tmpvar_86; + tmpvar_86 = 0.0; + o_77.Gloss = tmpvar_86; + surf (surfIN_78, o_77); + vec4 tmpvar_87; + tmpvar_87 = texture2DProj (_LightBuffer, IN_71.hip_screen); + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + light_76 = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = log2 (light_76); + vec4 tmpvar_90; + tmpvar_90 = -(tmpvar_89); + light_76 = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = texture2D (unity_Lightmap, IN_71.hip_lmapFade.xy); + vec3 tmpvar_92; + tmpvar_92 = DecodeLightmap (tmpvar_91); + vec3 tmpvar_93; + tmpvar_93 = tmpvar_92; + lmFull_75 = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = texture2D (unity_LightmapInd, IN_71.hip_lmapFade.xy); + vec3 tmpvar_95; + tmpvar_95 = DecodeLightmap (tmpvar_94); + vec3 tmpvar_96; + tmpvar_96 = tmpvar_95; + lmIndirect_74 = tmpvar_96; + float tmpvar_97; + tmpvar_97 = xll_saturate (IN_71.hip_lmapFade.z); + vec3 tmpvar_98; + tmpvar_98 = vec3(tmpvar_97); + vec3 tmpvar_99; + tmpvar_99 = mix (lmIndirect_74, lmFull_75, tmpvar_98); + vec3 tmpvar_100; + tmpvar_100 = tmpvar_99; + lm_73 = tmpvar_100; + vec3 tmpvar_101; + tmpvar_101 = (light_76.xyz + lm_73); + light_76.xyz = tmpvar_101.xyz.xyz; + vec4 tmpvar_102; + tmpvar_102 = LightingLambert_PrePass (o_77, light_76); + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + col_72 = tmpvar_103; + return col_72; +} + +void main () +{ + v2f_surf xlt_IN_104; + vec4 xl_retval_105; + vec4 tmpvar_106; + tmpvar_106 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_104.pos = tmpvar_106; + float tmpvar_107; + tmpvar_107 = xlv_FOG.x; + xlt_IN_104.fog = tmpvar_107; + vec4 tmpvar_108; + tmpvar_108 = gl_TexCoord[0].xyzw; + vec4 tmpvar_109; + tmpvar_109 = tmpvar_108; + xlt_IN_104.hip_pack0 = tmpvar_109; + vec3 tmpvar_110; + tmpvar_110 = gl_TexCoord[1].xyz; + vec3 tmpvar_111; + tmpvar_111 = tmpvar_110; + xlt_IN_104.viewDir = tmpvar_111; + vec4 tmpvar_112; + tmpvar_112 = gl_TexCoord[2].xyzw; + vec4 tmpvar_113; + tmpvar_113 = tmpvar_112; + xlt_IN_104.hip_screen = tmpvar_113; + vec3 tmpvar_114; + tmpvar_114 = gl_TexCoord[3].xyz; + vec3 tmpvar_115; + tmpvar_115 = tmpvar_114; + xlt_IN_104.hip_lmapFade = tmpvar_115; + vec4 tmpvar_116; + tmpvar_116 = frag_surf (xlt_IN_104); + vec4 tmpvar_117; + tmpvar_117 = tmpvar_116; + xl_retval_105 = tmpvar_117; + vec4 tmpvar_118; + tmpvar_118 = xl_retval_105.xyzw; + vec4 tmpvar_119; + tmpvar_119 = tmpvar_118; + gl_FragData[0] = tmpvar_119; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-out.txt new file mode 100644 index 000000000..82050c49a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Diffuse2-out.txt @@ -0,0 +1,37 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 light_3; + vec2 tmpvar_4; + vec3 v_5; + vec3 tmpvar_6; + tmpvar_6 = normalize(gl_TexCoord[1].xyz); + v_5.xy = tmpvar_6.xy; + v_5.z = (tmpvar_6.z + 0.42); + tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_6.xy / v_5.z)); + vec4 tmpvar_7; + tmpvar_7 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)) * _Color); + vec4 normal_8; + normal_8.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); + normal_8.z = sqrt(((1.0 - (normal_8.x * normal_8.x)) - (normal_8.y * normal_8.y))); + vec4 tmpvar_9; + tmpvar_9 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_3.w = tmpvar_9.w; + light_3.xyz = (tmpvar_9.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); + vec4 c_10; + c_10.xyz = (tmpvar_7.xyz * light_3.xyz); + c_10.w = tmpvar_7.w; + gl_FragData[0] = c_10; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Parallax_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-ir.txt new file mode 100644 index 000000000..755fab4fe --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-ir.txt @@ -0,0 +1,292 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 tex_16; + vec2 offset_17; + float h_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_20; + tmpvar_20 = tmpvar_19.w; + h_18 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ParallaxOffset (h_18, _Parallax, IN_14.viewDir); + vec2 tmpvar_22; + tmpvar_22 = tmpvar_21; + offset_17 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = (IN_14.uv_MainTex + offset_17); + IN_14.uv_MainTex = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_BumpMap + offset_17); + IN_14.uv_BumpMap = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + tex_16 = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = (tex_16.xyz * _Color.xyz); + o_15.Albedo = tmpvar_27; + float tmpvar_28; + tmpvar_28 = tex_16.w; + o_15.Gloss = tmpvar_28; + float tmpvar_29; + tmpvar_29 = (tex_16.w * _Color.w); + o_15.Alpha = tmpvar_29; + float tmpvar_30; + tmpvar_30 = _Shininess; + o_15.Specular = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_32; + tmpvar_32 = UnpackNormal (tmpvar_31); + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32.xyz; + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + o_15.Normal = tmpvar_34; +} + +float UnitySpotCookie ( + in vec4 LightCoord_35 +) +{ + vec4 tmpvar_36; + tmpvar_36 = texture2D (_LightTexture0, ((LightCoord_35.xy / LightCoord_35.w) + 0.5)); + return tmpvar_36.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_37 +) +{ + float tmpvar_38; + tmpvar_38 = dot (LightCoord_37, LightCoord_37); + vec2 tmpvar_39; + tmpvar_39 = vec2(tmpvar_38); + vec2 tmpvar_40; + tmpvar_40 = tmpvar_39.xy; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_LightTextureB0, tmpvar_40); + return tmpvar_41.w; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_42, + in vec3 lightDir_43, + in vec3 viewDir_44, + in float atten_45 +) +{ + vec4 c_46; + float spec_47; + float nh_48; + float diff_49; + vec3 h_50; + vec3 tmpvar_51; + tmpvar_51 = normalize ((lightDir_43 + viewDir_44)); + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + h_50 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = dot (s_42.Normal, lightDir_43); + float tmpvar_54; + tmpvar_54 = max (0.0, tmpvar_53); + float tmpvar_55; + tmpvar_55 = tmpvar_54; + diff_49 = tmpvar_55; + float tmpvar_56; + tmpvar_56 = dot (s_42.Normal, h_50); + float tmpvar_57; + tmpvar_57 = max (0.0, tmpvar_56); + float tmpvar_58; + tmpvar_58 = tmpvar_57; + nh_48 = tmpvar_58; + float tmpvar_59; + tmpvar_59 = pow (nh_48, (s_42.Specular * 128.0)); + float tmpvar_60; + tmpvar_60 = (tmpvar_59 * s_42.Gloss); + spec_47 = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = ((((s_42.Albedo * _LightColor0.xyz) * diff_49) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_47)) * (atten_45 * 2.0)); + c_46.xyz = tmpvar_61.xyz.xyz; + float tmpvar_62; + tmpvar_62 = (s_42.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_47) * atten_45)); + c_46.w = vec4(tmpvar_62).w; + return c_46; +} + +vec4 frag_surf ( + in v2f_surf IN_63 +) +{ + vec4 c_64; + vec3 lightDir_65; + SurfaceOutput o_66; + Input surfIN_67; + vec2 tmpvar_68; + tmpvar_68 = IN_63.hip_pack0.xy; + surfIN_67.uv_MainTex = tmpvar_68; + vec2 tmpvar_69; + tmpvar_69 = IN_63.hip_pack0.zw; + surfIN_67.uv_BumpMap = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = IN_63.viewDir; + surfIN_67.viewDir = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = vec3(0.0, 0.0, 0.0); + o_66.Albedo = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = vec3(0.0, 0.0, 0.0); + o_66.Emission = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + o_66.Specular = tmpvar_73; + float tmpvar_74; + tmpvar_74 = 0.0; + o_66.Alpha = tmpvar_74; + float tmpvar_75; + tmpvar_75 = 0.0; + o_66.Gloss = tmpvar_75; + surf (surfIN_67, o_66); + vec3 tmpvar_76; + tmpvar_76 = IN_63.lightDir; + lightDir_65 = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = normalize (lightDir_65); + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + lightDir_65 = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = IN_63.viewDir.xyz; + vec3 tmpvar_80; + tmpvar_80 = normalize (tmpvar_79); + float tmpvar_81; + tmpvar_81 = UnitySpotCookie (IN_63._LightCoord); + float tmpvar_82; + tmpvar_82 = UnitySpotAttenuate (IN_63._LightCoord.xyz); + vec4 tmpvar_83; + tmpvar_83 = LightingBlinnPhong (o_66, lightDir_65, tmpvar_80, ((float((IN_63._LightCoord.z > 0.0)) * tmpvar_81) * tmpvar_82)); + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + c_64 = tmpvar_84; + float tmpvar_85; + tmpvar_85 = 0.0; + c_64.w = vec4(tmpvar_85).w; + return c_64; +} + +void main () +{ + v2f_surf xlt_IN_86; + vec4 xl_retval_87; + vec4 tmpvar_88; + tmpvar_88 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_86.pos = tmpvar_88; + float tmpvar_89; + tmpvar_89 = xlv_FOG.x; + xlt_IN_86.fog = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = gl_TexCoord[0].xyzw; + vec4 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_86.hip_pack0 = tmpvar_91; + vec3 tmpvar_92; + tmpvar_92 = gl_TexCoord[1].xyz; + vec3 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_86.viewDir = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = gl_TexCoord[2].xyz; + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_86.lightDir = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = gl_TexCoord[3].xyzw; + vec4 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_86._LightCoord = tmpvar_97; + vec4 tmpvar_98; + tmpvar_98 = frag_surf (xlt_IN_86); + vec4 tmpvar_99; + tmpvar_99 = tmpvar_98; + xl_retval_87 = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = xl_retval_87.xyzw; + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + gl_FragData[0] = tmpvar_101; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-out.txt new file mode 100644 index 000000000..403fc4717 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Parallax_Specular-out.txt @@ -0,0 +1,45 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec4 tmpvar_3; + tmpvar_3 = gl_TexCoord[3]; + vec4 c_4; + vec2 tmpvar_5; + vec3 v_6; + vec3 tmpvar_7; + tmpvar_7 = normalize(tmpvar_2); + v_6.xy = tmpvar_7.xy; + v_6.z = (tmpvar_7.z + 0.42); + tmpvar_5 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_7.xy / v_6.z)); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_5)); + vec4 normal_9; + normal_9.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_5)).wy * 2.0) - 1.0); + normal_9.z = sqrt(((1.0 - (normal_9.x * normal_9.x)) - (normal_9.y * normal_9.y))); + vec3 tmpvar_10; + tmpvar_10 = normalize(gl_TexCoord[2].xyz); + float atten_11; + atten_11 = ((float((tmpvar_3.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_3.xy / tmpvar_3.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_3.xyz, tmpvar_3.xyz))).w); + vec4 c_12; + float tmpvar_13; + tmpvar_13 = (pow (max (0.0, dot (normal_9.xyz, normalize((tmpvar_10 + normalize(tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_8.w); + c_12.xyz = (((((tmpvar_8.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_9.xyz, tmpvar_10))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_13)) * (atten_11 * 2.0)); + c_12.w = ((tmpvar_8.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_13) * atten_11)); + c_4.xyz = c_12.xyz; + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-ir.txt new file mode 100644 index 000000000..ee7b2c34b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-ir.txt @@ -0,0 +1,45 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform vec4 _TintColor; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (((2.0 * i_1.color) * _TintColor) * tmpvar_2); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = gl_Color.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = gl_TexCoord[0].xy; + vec2 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = frag (xlt_i_3); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Additive_(Soft)-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-ir.txt new file mode 100644 index 000000000..ee0d0c2f3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-ir.txt @@ -0,0 +1,51 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 prev_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.texcoord); + vec4 tmpvar_4; + tmpvar_4 = (i_1.color * tmpvar_3); + prev_2 = tmpvar_4; + vec3 tmpvar_5; + tmpvar_5 = (prev_2.xyz * prev_2.w); + prev_2.xyz = tmpvar_5.xyz.xyz; + return prev_2; +} + +void main () +{ + v2f xlt_i_6; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_6.vertex = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = gl_Color.xyzw; + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_6.color = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = gl_TexCoord[0].xy; + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_6.texcoord = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = frag (xlt_i_6); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_7 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_7.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-out.txt new file mode 100644 index 000000000..b499932d9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Additive_(Soft)-out.txt @@ -0,0 +1,11 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 prev_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_Color * texture2D (_MainTex, gl_TexCoord[0].xy)); + prev_1.w = tmpvar_2.w; + prev_1.xyz = (tmpvar_2.xyz * tmpvar_2.w); + gl_FragData[0] = prev_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-ir.txt new file mode 100644 index 000000000..a6ae06861 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-ir.txt @@ -0,0 +1,44 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return ((i_1.color * tmpvar_2) * i_1.color.w); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = gl_Color.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + vec2 tmpvar_8; + tmpvar_8 = gl_TexCoord[0].xy; + vec2 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = frag (xlt_i_3); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Alpha_Blended_Premultiply-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Alpha_Blended_Premultiply-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-ir.txt new file mode 100644 index 000000000..d6a7b54a4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-ir.txt @@ -0,0 +1,52 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 prev_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, i_1.texcoord); + vec4 tmpvar_4; + tmpvar_4 = (i_1.color * tmpvar_3); + prev_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(prev_2.w); + vec4 tmpvar_6; + tmpvar_6 = mix (vec4(1.0, 1.0, 1.0, 1.0), prev_2, tmpvar_5); + return tmpvar_6; +} + +void main () +{ + v2f xlt_i_7; + vec4 xl_retval_8; + vec4 tmpvar_9; + tmpvar_9 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_7.vertex = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Color.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_i_7.color = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_TexCoord[0].xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_i_7.texcoord = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = frag (xlt_i_7); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + xl_retval_8 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = xl_retval_8.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_FragData[0] = tmpvar_17; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles_Multiply_(Double)-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-ir.txt new file mode 100644 index 000000000..076989c31 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-ir.txt @@ -0,0 +1,59 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tex_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, i_1.texcoord); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + tex_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = ((tex_3.xyz * i_1.color.xyz) * 2.0); + col_2.xyz = tmpvar_6.xyz.xyz; + float tmpvar_7; + tmpvar_7 = (i_1.color.w * tex_3.w); + col_2.w = vec4(tmpvar_7).w; + vec4 tmpvar_8; + tmpvar_8 = vec4(col_2.w); + vec4 tmpvar_9; + tmpvar_9 = mix (vec4(0.5, 0.5, 0.5, 0.5), col_2, tmpvar_8); + return tmpvar_9; +} + +void main () +{ + v2f xlt_i_10; + vec4 xl_retval_11; + vec4 tmpvar_12; + tmpvar_12 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_10.vertex = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = gl_Color.xyzw; + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xlt_i_10.color = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = gl_TexCoord[0].xy; + vec2 tmpvar_16; + tmpvar_16 = tmpvar_15; + xlt_i_10.texcoord = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = frag (xlt_i_10); + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xl_retval_11 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = xl_retval_11.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + gl_FragData[0] = tmpvar_20; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-out.txt new file mode 100644 index 000000000..abdae9028 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles_Multiply_(Double)-out.txt @@ -0,0 +1,11 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_1.xyz = ((tmpvar_2.xyz * gl_Color.xyz) * 2.0); + col_1.w = (gl_Color.w * tmpvar_2.w); + gl_FragData[0] = mix (vec4(0.5, 0.5, 0.5, 0.5), col_1, col_1.wwww); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Particles__Additive-Multiply-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-ir.txt new file mode 100644 index 000000000..cb888f2ab --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-ir.txt @@ -0,0 +1,56 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform vec4 _TintColor; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tex_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, i_1.texcoord); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + tex_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (((_TintColor.xyz * tex_3.xyz) * i_1.color.xyz) * 2.0); + col_2.xyz = tmpvar_6.xyz.xyz; + float tmpvar_7; + tmpvar_7 = ((1.0 - tex_3.w) * ((_TintColor.w * i_1.color.w) * 2.0)); + col_2.w = vec4(tmpvar_7).w; + return col_2; +} + +void main () +{ + v2f xlt_i_8; + vec4 xl_retval_9; + vec4 tmpvar_10; + tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_8.vertex = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = gl_Color.xyzw; + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_8.color = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = gl_TexCoord[0].xy; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13; + xlt_i_8.texcoord = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = frag (xlt_i_8); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xl_retval_9 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = xl_retval_9.xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + gl_FragData[0] = tmpvar_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-out.txt new file mode 100644 index 000000000..78d7e5e50 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Particles__Additive-Multiply-out.txt @@ -0,0 +1,12 @@ +uniform vec4 _TintColor; +uniform sampler2D _MainTex; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, gl_TexCoord[0].xy); + col_1.xyz = (((_TintColor.xyz * tmpvar_2.xyz) * gl_Color.xyz) * 2.0); + col_1.w = ((1.0 - tmpvar_2.w) * ((_TintColor.w * gl_Color.w) * 2.0)); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..3aaa21a6f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-ir.txt @@ -0,0 +1,199 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 reflcol_8; + vec3 worldRefl_9; + vec4 c_10; + vec4 tex_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + tex_11 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (tex_11 * _Color); + c_10 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = c_10.xyz; + o_7.Albedo = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_7.Normal = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = IN_6.worldRefl; + worldRefl_9 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = textureCube (_Cube, worldRefl_9); + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + reflcol_8 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = (reflcol_8 * tex_11.w); + reflcol_8 = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = (reflcol_8.xyz * _ReflectColor.xyz); + o_7.Emission = tmpvar_24; + float tmpvar_25; + tmpvar_25 = (reflcol_8.w * _ReflectColor.w); + o_7.Alpha = tmpvar_25; +} + +vec4 LightingLambert ( + in SurfaceOutput s_26, + in vec3 lightDir_27, + in float atten_28 +) +{ + vec4 c_29; + float diff_30; + float tmpvar_31; + tmpvar_31 = dot (s_26.Normal, lightDir_27); + float tmpvar_32; + tmpvar_32 = max (0.0, tmpvar_31); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + diff_30 = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ((s_26.Albedo * _LightColor0.xyz) * ((diff_30 * atten_28) * 2.0)); + c_29.xyz = tmpvar_34.xyz.xyz; + float tmpvar_35; + tmpvar_35 = s_26.Alpha; + c_29.w = vec4(tmpvar_35).w; + return c_29; +} + +vec4 frag_surf ( + in v2f_surf IN_36 +) +{ + vec4 c_37; + vec3 lightDir_38; + SurfaceOutput o_39; + Input surfIN_40; + vec2 tmpvar_41; + tmpvar_41 = IN_36.hip_pack0.xy; + surfIN_40.uv_MainTex = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = IN_36.hip_pack0.zw; + surfIN_40.uv_BumpMap = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = vec3(0.0, 0.0, 0.0); + o_39.Albedo = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = vec3(0.0, 0.0, 0.0); + o_39.Emission = tmpvar_44; + float tmpvar_45; + tmpvar_45 = 0.0; + o_39.Specular = tmpvar_45; + float tmpvar_46; + tmpvar_46 = 0.0; + o_39.Alpha = tmpvar_46; + float tmpvar_47; + tmpvar_47 = 0.0; + o_39.Gloss = tmpvar_47; + surf (surfIN_40, o_39); + vec3 tmpvar_48; + tmpvar_48 = IN_36.lightDir; + lightDir_38 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = texture2D (_LightTexture0, IN_36._LightCoord); + vec4 tmpvar_50; + tmpvar_50 = LightingLambert (o_39, lightDir_38, (tmpvar_49.w * 1.0)); + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + c_37 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = 0.0; + c_37.w = vec4(tmpvar_52).w; + return c_37; +} + +void main () +{ + v2f_surf xlt_IN_53; + vec4 xl_retval_54; + vec4 tmpvar_55; + tmpvar_55 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_53.pos = tmpvar_55; + float tmpvar_56; + tmpvar_56 = xlv_FOG.x; + xlt_IN_53.fog = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = gl_TexCoord[0].xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_IN_53.hip_pack0 = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = gl_TexCoord[1].xyz; + vec3 tmpvar_60; + tmpvar_60 = tmpvar_59; + xlt_IN_53.lightDir = tmpvar_60; + vec2 tmpvar_61; + tmpvar_61 = gl_TexCoord[2].xy; + vec2 tmpvar_62; + tmpvar_62 = tmpvar_61; + xlt_IN_53._LightCoord = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = frag_surf (xlt_IN_53); + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + xl_retval_54 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = xl_retval_54.xyzw; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + gl_FragData[0] = tmpvar_66; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-out.txt new file mode 100644 index 000000000..0e3050a14 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse-out.txt @@ -0,0 +1,26 @@ +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec3 tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + vec4 normal_5; + normal_5.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + vec4 c_6; + c_6.xyz = (((tmpvar_4 * _Color).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_5.xyz, gl_TexCoord[1].xyz)) * texture2D (_LightTexture0, gl_TexCoord[2].xy).w) * 2.0)); + c_6.w = ((textureCube (_Cube, tmpvar_3) * tmpvar_4.w).w * _ReflectColor.w); + c_2.xyz = c_6.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..dfdb81b4a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-ir.txt @@ -0,0 +1,386 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; + vec3 TtoW0; + vec3 TtoW1; + vec3 TtoW2; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec4 TtoW0; + vec4 TtoW1; + vec4 TtoW2; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec4 UnpackNormal ( + in vec4 packednormal_33 +) +{ + vec4 normal_34; + vec2 tmpvar_35; + tmpvar_35 = ((packednormal_33.wy * 2.0) - 1.0); + normal_34.xy = tmpvar_35.xy.xy; + float tmpvar_36; + tmpvar_36 = sqrt (((1.0 - (normal_34.x * normal_34.x)) - (normal_34.y * normal_34.y))); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + normal_34.z = vec3(tmpvar_37).z; + return normal_34; +} + +void surf ( + in Input IN_38, + inout SurfaceOutput o_39 +) +{ + vec4 reflcol_40; + vec3 worldRefl_41; + vec4 c_42; + vec4 tex_43; + vec4 tmpvar_44; + tmpvar_44 = texture2D (_MainTex, IN_38.uv_MainTex); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + tex_43 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = (tex_43 * _Color); + c_42 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = c_42.xyz; + o_39.Albedo = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = texture2D (_BumpMap, IN_38.uv_BumpMap); + vec4 tmpvar_49; + tmpvar_49 = UnpackNormal (tmpvar_48); + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49.xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + o_39.Normal = tmpvar_51; + float tmpvar_52; + tmpvar_52 = dot (IN_38.TtoW0, o_39.Normal); + float tmpvar_53; + tmpvar_53 = dot (IN_38.TtoW1, o_39.Normal); + float tmpvar_54; + tmpvar_54 = dot (IN_38.TtoW2, o_39.Normal); + vec3 tmpvar_55; + tmpvar_55.x = tmpvar_52; + tmpvar_55.y = tmpvar_53; + tmpvar_55.z = tmpvar_54; + vec3 tmpvar_56; + tmpvar_56 = reflect (IN_38.worldRefl, tmpvar_55); + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + worldRefl_41 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = textureCube (_Cube, worldRefl_41); + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + reflcol_40 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = (reflcol_40 * tex_43.w); + reflcol_40 = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = (reflcol_40.xyz * _ReflectColor.xyz); + o_39.Emission = tmpvar_61; + float tmpvar_62; + tmpvar_62 = (reflcol_40.w * _ReflectColor.w); + o_39.Alpha = tmpvar_62; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_63, + in vec4 light_64 +) +{ + vec4 c_65; + vec3 tmpvar_66; + tmpvar_66 = (s_63.Albedo * light_64.xyz); + c_65.xyz = tmpvar_66.xyz.xyz; + float tmpvar_67; + tmpvar_67 = s_63.Alpha; + c_65.w = vec4(tmpvar_67).w; + return c_65; +} + +vec3 DecodeLightmap ( + in vec4 color_68 +) +{ + return (2.0 * color_68.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_69 +) +{ + vec4 col_70; + vec3 lm_71; + vec3 lmIndirect_72; + vec3 lmFull_73; + vec4 light_74; + SurfaceOutput o_75; + Input surfIN_76; + vec2 tmpvar_77; + tmpvar_77 = IN_69.hip_pack0.xy; + surfIN_76.uv_MainTex = tmpvar_77; + vec2 tmpvar_78; + tmpvar_78 = IN_69.hip_pack0.zw; + surfIN_76.uv_BumpMap = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79.x = IN_69.TtoW0.w; + tmpvar_79.y = IN_69.TtoW1.w; + tmpvar_79.z = IN_69.TtoW2.w; + vec3 tmpvar_80; + tmpvar_80 = tmpvar_79; + surfIN_76.worldRefl = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = IN_69.TtoW0.xyz; + surfIN_76.TtoW0 = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = IN_69.TtoW1.xyz; + surfIN_76.TtoW1 = tmpvar_82; + vec3 tmpvar_83; + tmpvar_83 = IN_69.TtoW2.xyz; + surfIN_76.TtoW2 = tmpvar_83; + vec3 tmpvar_84; + tmpvar_84 = vec3(0.0, 0.0, 0.0); + o_75.Albedo = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = vec3(0.0, 0.0, 0.0); + o_75.Emission = tmpvar_85; + float tmpvar_86; + tmpvar_86 = 0.0; + o_75.Specular = tmpvar_86; + float tmpvar_87; + tmpvar_87 = 0.0; + o_75.Alpha = tmpvar_87; + float tmpvar_88; + tmpvar_88 = 0.0; + o_75.Gloss = tmpvar_88; + surf (surfIN_76, o_75); + vec4 tmpvar_89; + tmpvar_89 = texture2DProj (_LightBuffer, IN_69.hip_screen); + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + light_74 = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = log2 (light_74); + vec4 tmpvar_92; + tmpvar_92 = -(tmpvar_91); + light_74 = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93 = texture2D (unity_Lightmap, IN_69.hip_lmapFade.xy); + vec3 tmpvar_94; + tmpvar_94 = DecodeLightmap (tmpvar_93); + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + lmFull_73 = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = texture2D (unity_LightmapInd, IN_69.hip_lmapFade.xy); + vec3 tmpvar_97; + tmpvar_97 = DecodeLightmap (tmpvar_96); + vec3 tmpvar_98; + tmpvar_98 = tmpvar_97; + lmIndirect_72 = tmpvar_98; + float tmpvar_99; + tmpvar_99 = xll_saturate (IN_69.hip_lmapFade.z); + vec3 tmpvar_100; + tmpvar_100 = vec3(tmpvar_99); + vec3 tmpvar_101; + tmpvar_101 = mix (lmIndirect_72, lmFull_73, tmpvar_100); + vec3 tmpvar_102; + tmpvar_102 = tmpvar_101; + lm_71 = tmpvar_102; + vec3 tmpvar_103; + tmpvar_103 = (light_74.xyz + lm_71); + light_74.xyz = tmpvar_103.xyz.xyz; + vec4 tmpvar_104; + tmpvar_104 = LightingLambert_PrePass (o_75, light_74); + vec4 tmpvar_105; + tmpvar_105 = tmpvar_104; + col_70 = tmpvar_105; + vec3 tmpvar_106; + tmpvar_106 = (col_70.xyz + o_75.Emission); + col_70.xyz = tmpvar_106.xyz.xyz; + return col_70; +} + +void main () +{ + v2f_surf xlt_IN_107; + vec4 xl_retval_108; + vec4 tmpvar_109; + tmpvar_109 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_107.pos = tmpvar_109; + float tmpvar_110; + tmpvar_110 = xlv_FOG.x; + xlt_IN_107.fog = tmpvar_110; + vec4 tmpvar_111; + tmpvar_111 = gl_TexCoord[0].xyzw; + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_IN_107.hip_pack0 = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113 = gl_TexCoord[1].xyzw; + vec4 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_IN_107.hip_screen = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115 = gl_TexCoord[2].xyzw; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_IN_107.TtoW0 = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117 = gl_TexCoord[3].xyzw; + vec4 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_IN_107.TtoW1 = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = gl_TexCoord[4].xyzw; + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + xlt_IN_107.TtoW2 = tmpvar_120; + vec3 tmpvar_121; + tmpvar_121 = gl_TexCoord[5].xyz; + vec3 tmpvar_122; + tmpvar_122 = tmpvar_121; + xlt_IN_107.hip_lmapFade = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123 = frag_surf (xlt_IN_107); + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + xl_retval_108 = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = xl_retval_108.xyzw; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_FragData[0] = tmpvar_126; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-out.txt new file mode 100644 index 000000000..664ae297d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Diffuse1-out.txt @@ -0,0 +1,49 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[2]; + vec4 tmpvar_3; + tmpvar_3 = gl_TexCoord[3]; + vec4 tmpvar_4; + tmpvar_4 = gl_TexCoord[4]; + vec3 tmpvar_5; + tmpvar_5 = gl_TexCoord[5].xyz; + vec4 col_6; + vec4 light_7; + vec3 tmpvar_8; + tmpvar_8.x = tmpvar_2.w; + tmpvar_8.y = tmpvar_3.w; + tmpvar_8.z = tmpvar_4.w; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, tmpvar_1.xy); + vec4 normal_10; + normal_10.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_10.z = sqrt(((1.0 - (normal_10.x * normal_10.x)) - (normal_10.y * normal_10.y))); + vec3 tmpvar_11; + tmpvar_11.x = dot (tmpvar_2.xyz, normal_10.xyz); + tmpvar_11.y = dot (tmpvar_3.xyz, normal_10.xyz); + tmpvar_11.z = dot (tmpvar_4.xyz, normal_10.xyz); + vec4 tmpvar_12; + tmpvar_12 = (textureCube (_Cube, (tmpvar_8 - (2.0 * (dot (tmpvar_11, tmpvar_8) * tmpvar_11)))) * tmpvar_9.w); + vec4 tmpvar_13; + tmpvar_13 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_7.w = tmpvar_13.w; + light_7.xyz = (tmpvar_13.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_5.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_5.xy).xyz), vec3(clamp (tmpvar_5.z, 0.0, 1.0)))); + vec4 c_14; + c_14.xyz = ((tmpvar_9 * _Color).xyz * light_7.xyz); + c_14.w = (tmpvar_12.w * _ReflectColor.w); + col_6.w = c_14.w; + col_6.xyz = (c_14.xyz + (tmpvar_12.xyz * _ReflectColor.xyz)); + gl_FragData[0] = col_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-ir.txt new file mode 100644 index 000000000..1daa6ff4f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-ir.txt @@ -0,0 +1,249 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 reflcol_8; + vec3 worldRefl_9; + vec4 c_10; + vec4 tex_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + tex_11 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (tex_11 * _Color); + c_10 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = c_10.xyz; + o_7.Albedo = tmpvar_15; + float tmpvar_16; + tmpvar_16 = tex_11.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = _Shininess; + o_7.Specular = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_19; + tmpvar_19 = UnpackNormal (tmpvar_18); + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + o_7.Normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = IN_6.worldRefl; + worldRefl_9 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = textureCube (_Cube, worldRefl_9); + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + reflcol_8 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (reflcol_8 * tex_11.w); + reflcol_8 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = (reflcol_8.xyz * _ReflectColor.xyz); + o_7.Emission = tmpvar_26; + float tmpvar_27; + tmpvar_27 = (reflcol_8.w * _ReflectColor.w); + o_7.Alpha = tmpvar_27; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_28, + in vec3 lightDir_29, + in vec3 viewDir_30, + in float atten_31 +) +{ + vec4 c_32; + float spec_33; + float nh_34; + float diff_35; + vec3 h_36; + vec3 tmpvar_37; + tmpvar_37 = normalize ((lightDir_29 + viewDir_30)); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + h_36 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = dot (s_28.Normal, lightDir_29); + float tmpvar_40; + tmpvar_40 = max (0.0, tmpvar_39); + float tmpvar_41; + tmpvar_41 = tmpvar_40; + diff_35 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = dot (s_28.Normal, h_36); + float tmpvar_43; + tmpvar_43 = max (0.0, tmpvar_42); + float tmpvar_44; + tmpvar_44 = tmpvar_43; + nh_34 = tmpvar_44; + float tmpvar_45; + tmpvar_45 = pow (nh_34, (s_28.Specular * 128.0)); + float tmpvar_46; + tmpvar_46 = (tmpvar_45 * s_28.Gloss); + spec_33 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = ((((s_28.Albedo * _LightColor0.xyz) * diff_35) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_33)) * (atten_31 * 2.0)); + c_32.xyz = tmpvar_47.xyz.xyz; + float tmpvar_48; + tmpvar_48 = (s_28.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_33) * atten_31)); + c_32.w = vec4(tmpvar_48).w; + return c_32; +} + +vec4 frag_surf ( + in v2f_surf IN_49 +) +{ + vec4 c_50; + vec3 lightDir_51; + SurfaceOutput o_52; + Input surfIN_53; + vec2 tmpvar_54; + tmpvar_54 = IN_49.hip_pack0.xy; + surfIN_53.uv_MainTex = tmpvar_54; + vec2 tmpvar_55; + tmpvar_55 = IN_49.hip_pack0.zw; + surfIN_53.uv_BumpMap = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_52.Albedo = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = vec3(0.0, 0.0, 0.0); + o_52.Emission = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_52.Specular = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_52.Alpha = tmpvar_59; + float tmpvar_60; + tmpvar_60 = 0.0; + o_52.Gloss = tmpvar_60; + surf (surfIN_53, o_52); + vec3 tmpvar_61; + tmpvar_61 = IN_49.lightDir; + lightDir_51 = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = normalize (lightDir_51); + vec3 tmpvar_63; + tmpvar_63 = tmpvar_62; + lightDir_51 = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = IN_49.viewDir.xyz; + vec3 tmpvar_65; + tmpvar_65 = normalize (tmpvar_64); + float tmpvar_66; + tmpvar_66 = dot (IN_49._LightCoord, IN_49._LightCoord); + vec2 tmpvar_67; + tmpvar_67 = vec2(tmpvar_66); + vec2 tmpvar_68; + tmpvar_68 = tmpvar_67.xy; + vec4 tmpvar_69; + tmpvar_69 = texture2D (_LightTexture0, tmpvar_68); + vec4 tmpvar_70; + tmpvar_70 = LightingBlinnPhong (o_52, lightDir_51, tmpvar_65, tmpvar_69.w); + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + c_50 = tmpvar_71; + float tmpvar_72; + tmpvar_72 = 0.0; + c_50.w = vec4(tmpvar_72).w; + return c_50; +} + +void main () +{ + v2f_surf xlt_IN_73; + vec4 xl_retval_74; + vec4 tmpvar_75; + tmpvar_75 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_73.pos = tmpvar_75; + float tmpvar_76; + tmpvar_76 = xlv_FOG.x; + xlt_IN_73.fog = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = gl_TexCoord[0].xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_IN_73.hip_pack0 = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = gl_TexCoord[1].xyz; + vec3 tmpvar_80; + tmpvar_80 = tmpvar_79; + xlt_IN_73.lightDir = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = gl_TexCoord[2].xyz; + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_IN_73.viewDir = tmpvar_82; + vec3 tmpvar_83; + tmpvar_83 = gl_TexCoord[3].xyz; + vec3 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_IN_73._LightCoord = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = frag_surf (xlt_IN_73); + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + xl_retval_74 = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = xl_retval_74.xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + gl_FragData[0] = tmpvar_88; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-out.txt new file mode 100644 index 000000000..a46f8558b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular-out.txt @@ -0,0 +1,36 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 c_3; + vec3 tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, tmpvar_1.xy); + vec4 normal_6; + normal_6.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_6.z = sqrt(((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + vec3 tmpvar_7; + tmpvar_7 = normalize(gl_TexCoord[1].xyz); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_LightTexture0, vec2(dot (tmpvar_2, tmpvar_2))); + vec4 c_9; + float tmpvar_10; + tmpvar_10 = (pow (max (0.0, dot (normal_6.xyz, normalize((tmpvar_7 + normalize(gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * tmpvar_5.w); + c_9.xyz = (((((tmpvar_5 * _Color).xyz * _LightColor0.xyz) * max (0.0, dot (normal_6.xyz, tmpvar_7))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_10)) * (tmpvar_8.w * 2.0)); + c_9.w = (((textureCube (_Cube, tmpvar_4) * tmpvar_5.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_10) * tmpvar_8.w)); + c_3.xyz = c_9.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-ir.txt new file mode 100644 index 000000000..39d6987ca --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-ir.txt @@ -0,0 +1,189 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 reflcol_8; + vec3 worldRefl_9; + vec4 c_10; + vec4 tex_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + tex_11 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (tex_11 * _Color); + c_10 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = c_10.xyz; + o_7.Albedo = tmpvar_15; + float tmpvar_16; + tmpvar_16 = tex_11.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = _Shininess; + o_7.Specular = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_19; + tmpvar_19 = UnpackNormal (tmpvar_18); + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + o_7.Normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = IN_6.worldRefl; + worldRefl_9 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = textureCube (_Cube, worldRefl_9); + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + reflcol_8 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (reflcol_8 * tex_11.w); + reflcol_8 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = (reflcol_8.xyz * _ReflectColor.xyz); + o_7.Emission = tmpvar_26; + float tmpvar_27; + tmpvar_27 = (reflcol_8.w * _ReflectColor.w); + o_7.Alpha = tmpvar_27; +} + +vec4 frag_surf ( + in v2f_surf IN_28 +) +{ + vec4 res_29; + vec3 viewN_30; + SurfaceOutput o_31; + Input surfIN_32; + vec2 tmpvar_33; + tmpvar_33 = IN_28.hip_pack0.xy; + surfIN_32.uv_BumpMap = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(0.0, 0.0, 0.0); + o_31.Albedo = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = vec3(0.0, 0.0, 0.0); + o_31.Emission = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_31.Specular = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_31.Alpha = tmpvar_37; + float tmpvar_38; + tmpvar_38 = 0.0; + o_31.Gloss = tmpvar_38; + surf (surfIN_32, o_31); + float tmpvar_39; + tmpvar_39 = dot (IN_28.TtoV0, o_31.Normal); + float tmpvar_40; + tmpvar_40 = tmpvar_39; + viewN_30.x = tmpvar_40; + float tmpvar_41; + tmpvar_41 = dot (IN_28.TtoV1, o_31.Normal); + float tmpvar_42; + tmpvar_42 = tmpvar_41; + viewN_30.y = vec2(tmpvar_42).y; + float tmpvar_43; + tmpvar_43 = dot (IN_28.TtoV2, o_31.Normal); + float tmpvar_44; + tmpvar_44 = tmpvar_43; + viewN_30.z = vec3(tmpvar_44).z; + vec3 tmpvar_45; + tmpvar_45 = viewN_30; + o_31.Normal = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = ((o_31.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_29.xyz = tmpvar_46.xyz.xyz; + float tmpvar_47; + tmpvar_47 = o_31.Specular; + res_29.w = vec4(tmpvar_47).w; + return res_29; +} + +void main () +{ + v2f_surf xlt_IN_48; + vec4 xl_retval_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_48.pos = tmpvar_50; + vec2 tmpvar_51; + tmpvar_51 = gl_TexCoord[0].xy; + vec2 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_48.hip_pack0 = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[1].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_48.TtoV0 = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = gl_TexCoord[2].xyz; + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_48.TtoV1 = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = gl_TexCoord[3].xyz; + vec3 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_IN_48.TtoV2 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = frag_surf (xlt_IN_48); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xl_retval_49 = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = xl_retval_49.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_FragData[0] = tmpvar_62; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-out.txt new file mode 100644 index 000000000..c58e34122 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular1-out.txt @@ -0,0 +1,17 @@ +uniform float _Shininess; +uniform sampler2D _BumpMap; +void main () +{ + vec4 res_1; + vec3 viewN_2; + vec4 normal_3; + normal_3.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); + normal_3.z = sqrt(((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + viewN_2.x = dot (gl_TexCoord[1].xyz, normal_3.xyz); + viewN_2.y = dot (gl_TexCoord[2].xyz, normal_3.xyz); + viewN_2.z = dot (gl_TexCoord[3].xyz, normal_3.xyz); + res_1.xyz = ((viewN_2 * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = _Shininess; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-ir.txt new file mode 100644 index 000000000..74b942921 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-ir.txt @@ -0,0 +1,253 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; + vec3 TtoW0; + vec3 TtoW1; + vec3 TtoW2; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec4 TtoW0; + vec4 TtoW1; + vec4 TtoW2; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 reflcol_8; + vec3 worldRefl_9; + vec4 c_10; + vec4 tex_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + tex_11 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (tex_11 * _Color); + c_10 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = c_10.xyz; + o_7.Albedo = tmpvar_15; + float tmpvar_16; + tmpvar_16 = tex_11.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = _Shininess; + o_7.Specular = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_19; + tmpvar_19 = UnpackNormal (tmpvar_18); + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + o_7.Normal = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (IN_6.TtoW0, o_7.Normal); + float tmpvar_23; + tmpvar_23 = dot (IN_6.TtoW1, o_7.Normal); + float tmpvar_24; + tmpvar_24 = dot (IN_6.TtoW2, o_7.Normal); + vec3 tmpvar_25; + tmpvar_25.x = tmpvar_22; + tmpvar_25.y = tmpvar_23; + tmpvar_25.z = tmpvar_24; + vec3 tmpvar_26; + tmpvar_26 = reflect (IN_6.worldRefl, tmpvar_25); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + worldRefl_9 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = textureCube (_Cube, worldRefl_9); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + reflcol_8 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (reflcol_8 * tex_11.w); + reflcol_8 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = (reflcol_8.xyz * _ReflectColor.xyz); + o_7.Emission = tmpvar_31; + float tmpvar_32; + tmpvar_32 = (reflcol_8.w * _ReflectColor.w); + o_7.Alpha = tmpvar_32; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_33, + in vec4 light_34 +) +{ + vec4 c_35; + float spec_36; + float tmpvar_37; + tmpvar_37 = (light_34.w * s_33.Gloss); + spec_36 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = ((s_33.Albedo * light_34.xyz) + ((light_34.xyz * _SpecColor.xyz) * spec_36)); + c_35.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = (s_33.Alpha + (spec_36 * _SpecColor.w)); + c_35.w = vec4(tmpvar_39).w; + return c_35; +} + +vec4 frag_surf ( + in v2f_surf IN_40 +) +{ + vec4 col_41; + vec4 light_42; + SurfaceOutput o_43; + Input surfIN_44; + vec2 tmpvar_45; + tmpvar_45 = IN_40.hip_pack0.xy; + surfIN_44.uv_MainTex = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = IN_40.hip_pack0.zw; + surfIN_44.uv_BumpMap = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47.x = IN_40.TtoW0.w; + tmpvar_47.y = IN_40.TtoW1.w; + tmpvar_47.z = IN_40.TtoW2.w; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + surfIN_44.worldRefl = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = IN_40.TtoW0.xyz; + surfIN_44.TtoW0 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = IN_40.TtoW1.xyz; + surfIN_44.TtoW1 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = IN_40.TtoW2.xyz; + surfIN_44.TtoW2 = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = vec3(0.0, 0.0, 0.0); + o_43.Albedo = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = vec3(0.0, 0.0, 0.0); + o_43.Emission = tmpvar_53; + float tmpvar_54; + tmpvar_54 = 0.0; + o_43.Specular = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 0.0; + o_43.Alpha = tmpvar_55; + float tmpvar_56; + tmpvar_56 = 0.0; + o_43.Gloss = tmpvar_56; + surf (surfIN_44, o_43); + vec4 tmpvar_57; + tmpvar_57 = texture2DProj (_LightBuffer, IN_40.hip_screen); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + light_42 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = log2 (light_42); + vec4 tmpvar_60; + tmpvar_60 = -(tmpvar_59); + light_42 = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = (light_42.xyz + unity_Ambient.xyz); + light_42.xyz = tmpvar_61.xyz.xyz; + vec4 tmpvar_62; + tmpvar_62 = LightingBlinnPhong_PrePass (o_43, light_42); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + col_41 = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = (col_41.xyz + o_43.Emission); + col_41.xyz = tmpvar_64.xyz.xyz; + return col_41; +} + +void main () +{ + v2f_surf xlt_IN_65; + vec4 xl_retval_66; + vec4 tmpvar_67; + tmpvar_67 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_65.pos = tmpvar_67; + float tmpvar_68; + tmpvar_68 = xlv_FOG.x; + xlt_IN_65.fog = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = gl_TexCoord[0].xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_65.hip_pack0 = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = gl_TexCoord[1].xyzw; + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_IN_65.hip_screen = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = gl_TexCoord[2].xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_IN_65.TtoW0 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = gl_TexCoord[3].xyzw; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_IN_65.TtoW1 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = gl_TexCoord[4].xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_IN_65.TtoW2 = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = frag_surf (xlt_IN_65); + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + xl_retval_66 = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = xl_retval_66.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + gl_FragData[0] = tmpvar_82; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-out.txt new file mode 100644 index 000000000..4a8b764b7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Specular2-out.txt @@ -0,0 +1,49 @@ +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[2]; + vec4 tmpvar_3; + tmpvar_3 = gl_TexCoord[3]; + vec4 tmpvar_4; + tmpvar_4 = gl_TexCoord[4]; + vec4 col_5; + vec4 light_6; + vec3 tmpvar_7; + tmpvar_7.x = tmpvar_2.w; + tmpvar_7.y = tmpvar_3.w; + tmpvar_7.z = tmpvar_4.w; + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, tmpvar_1.xy); + vec4 normal_9; + normal_9.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_9.z = sqrt(((1.0 - (normal_9.x * normal_9.x)) - (normal_9.y * normal_9.y))); + vec3 tmpvar_10; + tmpvar_10.x = dot (tmpvar_2.xyz, normal_9.xyz); + tmpvar_10.y = dot (tmpvar_3.xyz, normal_9.xyz); + tmpvar_10.z = dot (tmpvar_4.xyz, normal_9.xyz); + vec4 tmpvar_11; + tmpvar_11 = (textureCube (_Cube, (tmpvar_7 - (2.0 * (dot (tmpvar_10, tmpvar_7) * tmpvar_10)))) * tmpvar_8.w); + vec4 tmpvar_12; + tmpvar_12 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_6.w = tmpvar_12.w; + light_6.xyz = (tmpvar_12.xyz + unity_Ambient.xyz); + vec4 c_13; + float tmpvar_14; + tmpvar_14 = (tmpvar_12.w * tmpvar_8.w); + c_13.xyz = (((tmpvar_8 * _Color).xyz * light_6.xyz) + ((light_6.xyz * _SpecColor.xyz) * tmpvar_14)); + c_13.w = ((tmpvar_11.w * _ReflectColor.w) + (tmpvar_14 * _SpecColor.w)); + col_5.w = c_13.w; + col_5.xyz = (c_13.xyz + (tmpvar_11.xyz * _ReflectColor.xyz)); + gl_FragData[0] = col_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Bumped_Unlit-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-ir.txt new file mode 100644 index 000000000..261e53642 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-ir.txt @@ -0,0 +1,139 @@ +struct v2f { + vec4 pos; + float fog; + vec2 uv; + vec2 uv2; + vec3 I; + vec3 TtoW0; + vec3 TtoW1; + vec3 TtoW2; +}; +varying vec4 xlv_FOG; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform samplerCube _Cube; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec4 frag ( + in v2f i_6 +) +{ + vec4 reflcolor_7; + vec4 c_8; + vec3 r_9; + vec3 wn_10; + vec4 texcol_11; + vec4 normal_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_BumpMap, i_6.uv2); + vec4 tmpvar_14; + tmpvar_14 = UnpackNormal (tmpvar_13); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + normal_12 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_MainTex, i_6.uv); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + texcol_11 = tmpvar_17; + float tmpvar_18; + tmpvar_18 = dot (i_6.TtoW0, normal_12.xyz); + float tmpvar_19; + tmpvar_19 = tmpvar_18; + wn_10.x = tmpvar_19; + float tmpvar_20; + tmpvar_20 = dot (i_6.TtoW1, normal_12.xyz); + float tmpvar_21; + tmpvar_21 = tmpvar_20; + wn_10.y = vec2(tmpvar_21).y; + float tmpvar_22; + tmpvar_22 = dot (i_6.TtoW2, normal_12.xyz); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + wn_10.z = vec3(tmpvar_23).z; + vec3 tmpvar_24; + tmpvar_24 = reflect (i_6.I, wn_10); + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + r_9 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = (gl_LightModel.ambient * texcol_11); + c_8 = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = (c_8.xyz * 2.0); + c_8.xyz = tmpvar_27.xyz.xyz; + vec4 tmpvar_28; + tmpvar_28 = textureCube (_Cube, r_9); + vec4 tmpvar_29; + tmpvar_29 = ((tmpvar_28 * _ReflectColor) * texcol_11.w); + reflcolor_7 = tmpvar_29; + return (c_8 + reflcolor_7); +} + +void main () +{ + v2f xlt_i_30; + vec4 xl_retval_31; + vec4 tmpvar_32; + tmpvar_32 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_30.pos = tmpvar_32; + float tmpvar_33; + tmpvar_33 = xlv_FOG.x; + xlt_i_30.fog = tmpvar_33; + vec2 tmpvar_34; + tmpvar_34 = gl_TexCoord[0].xy; + vec2 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_i_30.uv = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = gl_TexCoord[1].xy; + vec2 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_i_30.uv2 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = gl_TexCoord[2].xyz; + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_i_30.I = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = gl_TexCoord[3].xyz; + vec3 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_i_30.TtoW0 = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = gl_TexCoord[4].xyz; + vec3 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_i_30.TtoW1 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = gl_TexCoord[5].xyz; + vec3 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_i_30.TtoW2 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = frag (xlt_i_30); + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xl_retval_31 = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = xl_retval_31.xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_FragData[0] = tmpvar_49; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-out.txt new file mode 100644 index 000000000..656f4fa14 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Bumped_Unlit-out.txt @@ -0,0 +1,27 @@ +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform samplerCube _Cube; +uniform sampler2D _BumpMap; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 c_2; + vec3 wn_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, gl_TexCoord[1].xy).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, gl_TexCoord[0].xy); + wn_3.x = dot (gl_TexCoord[3].xyz, normal_4.xyz); + wn_3.y = dot (gl_TexCoord[4].xyz, normal_4.xyz); + wn_3.z = dot (gl_TexCoord[5].xyz, normal_4.xyz); + vec4 tmpvar_6; + tmpvar_6 = (gl_LightModel.ambient * tmpvar_5); + c_2.w = tmpvar_6.w; + c_2.xyz = (tmpvar_6.xyz * 2.0); + vec4 tmpvar_7; + tmpvar_7 = ((textureCube (_Cube, (tmpvar_1 - (2.0 * (dot (wn_3, tmpvar_1) * wn_3)))) * _ReflectColor) * tmpvar_5.w); + gl_FragData[0] = (c_2 + tmpvar_7); +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-ir.txt new file mode 100644 index 000000000..6a98d6394 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-ir.txt @@ -0,0 +1,206 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 reflcol_3; + vec4 c_4; + vec4 tex_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + tex_5 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (tex_5 * _Color); + c_4 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = c_4.xyz; + o_2.Albedo = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = textureCube (_Cube, IN_1.worldRefl); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + reflcol_3 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (reflcol_3 * tex_5.w); + reflcol_3 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (reflcol_3.xyz * _ReflectColor.xyz); + o_2.Emission = tmpvar_13; + float tmpvar_14; + tmpvar_14 = (reflcol_3.w * _ReflectColor.w); + o_2.Alpha = tmpvar_14; +} + +float UnitySpotCookie ( + in vec4 LightCoord_15 +) +{ + vec4 tmpvar_16; + tmpvar_16 = texture2D (_LightTexture0, ((LightCoord_15.xy / LightCoord_15.w) + 0.5)); + return tmpvar_16.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_17 +) +{ + float tmpvar_18; + tmpvar_18 = dot (LightCoord_17, LightCoord_17); + vec2 tmpvar_19; + tmpvar_19 = vec2(tmpvar_18); + vec2 tmpvar_20; + tmpvar_20 = tmpvar_19.xy; + vec4 tmpvar_21; + tmpvar_21 = texture2D (_LightTextureB0, tmpvar_20); + return tmpvar_21.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_22, + in vec3 lightDir_23, + in float atten_24 +) +{ + vec4 c_25; + float diff_26; + float tmpvar_27; + tmpvar_27 = dot (s_22.Normal, lightDir_23); + float tmpvar_28; + tmpvar_28 = max (0.0, tmpvar_27); + float tmpvar_29; + tmpvar_29 = tmpvar_28; + diff_26 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = ((s_22.Albedo * _LightColor0.xyz) * ((diff_26 * atten_24) * 2.0)); + c_25.xyz = tmpvar_30.xyz.xyz; + float tmpvar_31; + tmpvar_31 = s_22.Alpha; + c_25.w = vec4(tmpvar_31).w; + return c_25; +} + +vec4 frag_surf ( + in v2f_surf IN_32 +) +{ + vec4 c_33; + vec3 lightDir_34; + SurfaceOutput o_35; + Input surfIN_36; + vec2 tmpvar_37; + tmpvar_37 = IN_32.hip_pack0.xy; + surfIN_36.uv_MainTex = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_35.Albedo = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = vec3(0.0, 0.0, 0.0); + o_35.Emission = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_35.Specular = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_35.Alpha = tmpvar_41; + float tmpvar_42; + tmpvar_42 = 0.0; + o_35.Gloss = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = IN_32.normal; + o_35.Normal = tmpvar_43; + surf (surfIN_36, o_35); + vec3 tmpvar_44; + tmpvar_44 = IN_32.lightDir; + lightDir_34 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = normalize (lightDir_34); + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + lightDir_34 = tmpvar_46; + float tmpvar_47; + tmpvar_47 = UnitySpotCookie (IN_32._LightCoord); + float tmpvar_48; + tmpvar_48 = UnitySpotAttenuate (IN_32._LightCoord.xyz); + vec4 tmpvar_49; + tmpvar_49 = LightingLambert (o_35, lightDir_34, ((float((IN_32._LightCoord.z > 0.0)) * tmpvar_47) * tmpvar_48)); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + c_33 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + c_33.w = vec4(tmpvar_51).w; + return c_33; +} + +void main () +{ + v2f_surf xlt_IN_52; + vec4 xl_retval_53; + vec4 tmpvar_54; + tmpvar_54 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_52.pos = tmpvar_54; + float tmpvar_55; + tmpvar_55 = xlv_FOG.x; + xlt_IN_52.fog = tmpvar_55; + vec2 tmpvar_56; + tmpvar_56 = gl_TexCoord[0].xy; + vec2 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_52.hip_pack0 = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = gl_TexCoord[1].xyz; + vec3 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_IN_52.normal = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = gl_TexCoord[2].xyz; + vec3 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_IN_52.lightDir = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = gl_TexCoord[3].xyzw; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_IN_52._LightCoord = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = frag_surf (xlt_IN_52); + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + xl_retval_53 = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = xl_retval_53.xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + gl_FragData[0] = tmpvar_67; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-out.txt new file mode 100644 index 000000000..67960f476 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse-out.txt @@ -0,0 +1,23 @@ +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[3]; + vec4 c_2; + vec3 tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec4 c_5; + c_5.xyz = (((tmpvar_4 * _Color).xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_1.xyz, tmpvar_1.xyz))).w)) * 2.0)); + c_5.w = ((textureCube (_Cube, tmpvar_3) * tmpvar_4.w).w * _ReflectColor.w); + c_2.xyz = c_5.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-ir.txt new file mode 100644 index 000000000..95702c395 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-ir.txt @@ -0,0 +1,167 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldRefl; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 reflcol_3; + vec4 c_4; + vec4 tex_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + tex_5 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (tex_5 * _Color); + c_4 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = c_4.xyz; + o_2.Albedo = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = textureCube (_Cube, IN_1.worldRefl); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + reflcol_3 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (reflcol_3 * tex_5.w); + reflcol_3 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (reflcol_3.xyz * _ReflectColor.xyz); + o_2.Emission = tmpvar_13; + float tmpvar_14; + tmpvar_14 = (reflcol_3.w * _ReflectColor.w); + o_2.Alpha = tmpvar_14; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_15, + in vec4 light_16 +) +{ + vec4 c_17; + vec3 tmpvar_18; + tmpvar_18 = (s_15.Albedo * light_16.xyz); + c_17.xyz = tmpvar_18.xyz.xyz; + float tmpvar_19; + tmpvar_19 = s_15.Alpha; + c_17.w = vec4(tmpvar_19).w; + return c_17; +} + +vec4 frag_surf ( + in v2f_surf IN_20 +) +{ + vec4 col_21; + vec4 light_22; + SurfaceOutput o_23; + Input surfIN_24; + vec2 tmpvar_25; + tmpvar_25 = IN_20.hip_pack0.xy; + surfIN_24.uv_MainTex = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = IN_20.worldRefl; + surfIN_24.worldRefl = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_23.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_23.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_23.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_23.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_23.Gloss = tmpvar_31; + surf (surfIN_24, o_23); + vec4 tmpvar_32; + tmpvar_32 = texture2DProj (_LightBuffer, IN_20.hip_screen); + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + light_22 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = log2 (light_22); + vec4 tmpvar_35; + tmpvar_35 = -(tmpvar_34); + light_22 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = (light_22.xyz + unity_Ambient.xyz); + light_22.xyz = tmpvar_36.xyz.xyz; + vec4 tmpvar_37; + tmpvar_37 = LightingLambert_PrePass (o_23, light_22); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + col_21 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = (col_21.xyz + o_23.Emission); + col_21.xyz = tmpvar_39.xyz.xyz; + return col_21; +} + +void main () +{ + v2f_surf xlt_IN_40; + vec4 xl_retval_41; + vec4 tmpvar_42; + tmpvar_42 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_40.pos = tmpvar_42; + float tmpvar_43; + tmpvar_43 = xlv_FOG.x; + xlt_IN_40.fog = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = gl_TexCoord[0].xy; + vec2 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_40.hip_pack0 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_TexCoord[1].xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_40.worldRefl = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_TexCoord[2].xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_40.hip_screen = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = frag_surf (xlt_IN_40); + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xl_retval_41 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = xl_retval_41.xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_FragData[0] = tmpvar_53; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-out.txt new file mode 100644 index 000000000..4eb44eba5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Diffuse1-out.txt @@ -0,0 +1,26 @@ +uniform vec4 unity_Ambient; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +void main () +{ + vec4 col_1; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec4 tmpvar_4; + tmpvar_4 = (textureCube (_Cube, gl_TexCoord[1].xyz) * tmpvar_3.w); + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_2.w = tmpvar_5.w; + light_2.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); + vec4 c_6; + c_6.xyz = ((tmpvar_3 * _Color).xyz * light_2.xyz); + c_6.w = (tmpvar_4.w * _ReflectColor.w); + col_1.w = c_6.w; + col_1.xyz = (c_6.xyz + (tmpvar_4.xyz * _ReflectColor.xyz)); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-ir.txt new file mode 100644 index 000000000..1d8a66ea3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-ir.txt @@ -0,0 +1,282 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 reflcol_16; + vec3 worldRefl_17; + vec4 c_18; + vec4 tex_19; + vec2 offset_20; + float h_21; + vec4 tmpvar_22; + tmpvar_22 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_23; + tmpvar_23 = tmpvar_22.w; + h_21 = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = ParallaxOffset (h_21, _Parallax, IN_14.viewDir); + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + offset_20 = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = (IN_14.uv_MainTex + offset_20); + IN_14.uv_MainTex = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = (IN_14.uv_BumpMap + offset_20); + IN_14.uv_BumpMap = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + tex_19 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (tex_19 * _Color); + c_18 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = c_18.xyz; + o_15.Albedo = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = IN_14.worldRefl; + worldRefl_17 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = textureCube (_Cube, worldRefl_17); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + reflcol_16 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (reflcol_16 * tex_19.w); + reflcol_16 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (reflcol_16.xyz * _ReflectColor.xyz); + o_15.Emission = tmpvar_40; + float tmpvar_41; + tmpvar_41 = (reflcol_16.w * _ReflectColor.w); + o_15.Alpha = tmpvar_41; +} + +float UnitySpotCookie ( + in vec4 LightCoord_42 +) +{ + vec4 tmpvar_43; + tmpvar_43 = texture2D (_LightTexture0, ((LightCoord_42.xy / LightCoord_42.w) + 0.5)); + return tmpvar_43.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_44 +) +{ + float tmpvar_45; + tmpvar_45 = dot (LightCoord_44, LightCoord_44); + vec2 tmpvar_46; + tmpvar_46 = vec2(tmpvar_45); + vec2 tmpvar_47; + tmpvar_47 = tmpvar_46.xy; + vec4 tmpvar_48; + tmpvar_48 = texture2D (_LightTextureB0, tmpvar_47); + return tmpvar_48.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_49, + in vec3 lightDir_50, + in float atten_51 +) +{ + vec4 c_52; + float diff_53; + float tmpvar_54; + tmpvar_54 = dot (s_49.Normal, lightDir_50); + float tmpvar_55; + tmpvar_55 = max (0.0, tmpvar_54); + float tmpvar_56; + tmpvar_56 = tmpvar_55; + diff_53 = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = ((s_49.Albedo * _LightColor0.xyz) * ((diff_53 * atten_51) * 2.0)); + c_52.xyz = tmpvar_57.xyz.xyz; + float tmpvar_58; + tmpvar_58 = s_49.Alpha; + c_52.w = vec4(tmpvar_58).w; + return c_52; +} + +vec4 frag_surf ( + in v2f_surf IN_59 +) +{ + vec4 c_60; + vec3 lightDir_61; + SurfaceOutput o_62; + Input surfIN_63; + vec2 tmpvar_64; + tmpvar_64 = IN_59.hip_pack0.xy; + surfIN_63.uv_MainTex = tmpvar_64; + vec2 tmpvar_65; + tmpvar_65 = IN_59.hip_pack0.zw; + surfIN_63.uv_BumpMap = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = IN_59.viewDir; + surfIN_63.viewDir = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = vec3(0.0, 0.0, 0.0); + o_62.Albedo = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = vec3(0.0, 0.0, 0.0); + o_62.Emission = tmpvar_68; + float tmpvar_69; + tmpvar_69 = 0.0; + o_62.Specular = tmpvar_69; + float tmpvar_70; + tmpvar_70 = 0.0; + o_62.Alpha = tmpvar_70; + float tmpvar_71; + tmpvar_71 = 0.0; + o_62.Gloss = tmpvar_71; + surf (surfIN_63, o_62); + vec3 tmpvar_72; + tmpvar_72 = IN_59.lightDir; + lightDir_61 = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = normalize (lightDir_61); + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + lightDir_61 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = UnitySpotCookie (IN_59._LightCoord); + float tmpvar_76; + tmpvar_76 = UnitySpotAttenuate (IN_59._LightCoord.xyz); + vec4 tmpvar_77; + tmpvar_77 = LightingLambert (o_62, lightDir_61, ((float((IN_59._LightCoord.z > 0.0)) * tmpvar_75) * tmpvar_76)); + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + c_60 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = 0.0; + c_60.w = vec4(tmpvar_79).w; + return c_60; +} + +void main () +{ + v2f_surf xlt_IN_80; + vec4 xl_retval_81; + vec4 tmpvar_82; + tmpvar_82 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_80.pos = tmpvar_82; + float tmpvar_83; + tmpvar_83 = xlv_FOG.x; + xlt_IN_80.fog = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = gl_TexCoord[0].xyzw; + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + xlt_IN_80.hip_pack0 = tmpvar_85; + vec3 tmpvar_86; + tmpvar_86 = gl_TexCoord[1].xyz; + vec3 tmpvar_87; + tmpvar_87 = tmpvar_86; + xlt_IN_80.viewDir = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = gl_TexCoord[2].xyz; + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88; + xlt_IN_80.lightDir = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = gl_TexCoord[3].xyzw; + vec4 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_80._LightCoord = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92 = frag_surf (xlt_IN_80); + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + xl_retval_81 = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = xl_retval_81.xyzw; + vec4 tmpvar_95; + tmpvar_95 = tmpvar_94; + gl_FragData[0] = tmpvar_95; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-out.txt new file mode 100644 index 000000000..4b2380458 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse-out.txt @@ -0,0 +1,38 @@ +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[3]; + vec4 c_3; + vec3 tmpvar_4; + vec2 tmpvar_5; + vec3 v_6; + vec3 tmpvar_7; + tmpvar_7 = normalize(gl_TexCoord[1].xyz); + v_6.xy = tmpvar_7.xy; + v_6.z = (tmpvar_7.z + 0.42); + tmpvar_5 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_7.xy / v_6.z)); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_5)); + vec4 normal_9; + normal_9.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_5)).wy * 2.0) - 1.0); + normal_9.z = sqrt(((1.0 - (normal_9.x * normal_9.x)) - (normal_9.y * normal_9.y))); + vec4 c_10; + c_10.xyz = (((tmpvar_8 * _Color).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_9.xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_10.w = ((textureCube (_Cube, tmpvar_4) * tmpvar_8.w).w * _ReflectColor.w); + c_3.xyz = c_10.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-ir.txt new file mode 100644 index 000000000..f78ac0542 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-ir.txt @@ -0,0 +1,292 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; + vec3 viewDir; + vec3 TtoW0; + vec3 TtoW1; + vec3 TtoW2; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec4 TtoW0; + vec4 TtoW1; + vec4 TtoW2; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 reflcol_16; + vec3 worldRefl_17; + vec4 c_18; + vec4 tex_19; + vec2 offset_20; + float h_21; + vec4 tmpvar_22; + tmpvar_22 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_23; + tmpvar_23 = tmpvar_22.w; + h_21 = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = ParallaxOffset (h_21, _Parallax, IN_14.viewDir); + vec2 tmpvar_25; + tmpvar_25 = tmpvar_24; + offset_20 = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = (IN_14.uv_MainTex + offset_20); + IN_14.uv_MainTex = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = (IN_14.uv_BumpMap + offset_20); + IN_14.uv_BumpMap = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + tex_19 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (tex_19 * _Color); + c_18 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = c_18.xyz; + o_15.Albedo = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; + float tmpvar_36; + tmpvar_36 = dot (IN_14.TtoW0, o_15.Normal); + float tmpvar_37; + tmpvar_37 = dot (IN_14.TtoW1, o_15.Normal); + float tmpvar_38; + tmpvar_38 = dot (IN_14.TtoW2, o_15.Normal); + vec3 tmpvar_39; + tmpvar_39.x = tmpvar_36; + tmpvar_39.y = tmpvar_37; + tmpvar_39.z = tmpvar_38; + vec3 tmpvar_40; + tmpvar_40 = reflect (IN_14.worldRefl, tmpvar_39); + vec3 tmpvar_41; + tmpvar_41 = tmpvar_40; + worldRefl_17 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = textureCube (_Cube, worldRefl_17); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + reflcol_16 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = (reflcol_16 * tex_19.w); + reflcol_16 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = (reflcol_16.xyz * _ReflectColor.xyz); + o_15.Emission = tmpvar_45; + float tmpvar_46; + tmpvar_46 = (reflcol_16.w * _ReflectColor.w); + o_15.Alpha = tmpvar_46; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_47, + in vec4 light_48 +) +{ + vec4 c_49; + vec3 tmpvar_50; + tmpvar_50 = (s_47.Albedo * light_48.xyz); + c_49.xyz = tmpvar_50.xyz.xyz; + float tmpvar_51; + tmpvar_51 = s_47.Alpha; + c_49.w = vec4(tmpvar_51).w; + return c_49; +} + +vec4 frag_surf ( + in v2f_surf IN_52 +) +{ + vec4 col_53; + vec4 light_54; + SurfaceOutput o_55; + Input surfIN_56; + vec2 tmpvar_57; + tmpvar_57 = IN_52.hip_pack0.xy; + surfIN_56.uv_MainTex = tmpvar_57; + vec2 tmpvar_58; + tmpvar_58 = IN_52.hip_pack0.zw; + surfIN_56.uv_BumpMap = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59.x = IN_52.TtoW0.w; + tmpvar_59.y = IN_52.TtoW1.w; + tmpvar_59.z = IN_52.TtoW2.w; + vec3 tmpvar_60; + tmpvar_60 = tmpvar_59; + surfIN_56.worldRefl = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = IN_52.TtoW0.xyz; + surfIN_56.TtoW0 = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = IN_52.TtoW1.xyz; + surfIN_56.TtoW1 = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = IN_52.TtoW2.xyz; + surfIN_56.TtoW2 = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = IN_52.viewDir; + surfIN_56.viewDir = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = vec3(0.0, 0.0, 0.0); + o_55.Albedo = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = vec3(0.0, 0.0, 0.0); + o_55.Emission = tmpvar_66; + float tmpvar_67; + tmpvar_67 = 0.0; + o_55.Specular = tmpvar_67; + float tmpvar_68; + tmpvar_68 = 0.0; + o_55.Alpha = tmpvar_68; + float tmpvar_69; + tmpvar_69 = 0.0; + o_55.Gloss = tmpvar_69; + surf (surfIN_56, o_55); + vec4 tmpvar_70; + tmpvar_70 = texture2DProj (_LightBuffer, IN_52.hip_screen); + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + light_54 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = log2 (light_54); + vec4 tmpvar_73; + tmpvar_73 = -(tmpvar_72); + light_54 = tmpvar_73; + vec3 tmpvar_74; + tmpvar_74 = (light_54.xyz + unity_Ambient.xyz); + light_54.xyz = tmpvar_74.xyz.xyz; + vec4 tmpvar_75; + tmpvar_75 = LightingLambert_PrePass (o_55, light_54); + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + col_53 = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = (col_53.xyz + o_55.Emission); + col_53.xyz = tmpvar_77.xyz.xyz; + return col_53; +} + +void main () +{ + v2f_surf xlt_IN_78; + vec4 xl_retval_79; + vec4 tmpvar_80; + tmpvar_80 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_78.pos = tmpvar_80; + float tmpvar_81; + tmpvar_81 = xlv_FOG.x; + xlt_IN_78.fog = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = gl_TexCoord[0].xyzw; + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + xlt_IN_78.hip_pack0 = tmpvar_83; + vec3 tmpvar_84; + tmpvar_84 = gl_TexCoord[1].xyz; + vec3 tmpvar_85; + tmpvar_85 = tmpvar_84; + xlt_IN_78.viewDir = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86 = gl_TexCoord[2].xyzw; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + xlt_IN_78.hip_screen = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = gl_TexCoord[3].xyzw; + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + xlt_IN_78.TtoW0 = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = gl_TexCoord[4].xyzw; + vec4 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_78.TtoW1 = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92 = gl_TexCoord[5].xyzw; + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_78.TtoW2 = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = frag_surf (xlt_IN_78); + vec4 tmpvar_95; + tmpvar_95 = tmpvar_94; + xl_retval_79 = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = xl_retval_79.xyzw; + vec4 tmpvar_97; + tmpvar_97 = tmpvar_96; + gl_FragData[0] = tmpvar_97; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-out.txt new file mode 100644 index 000000000..ede616ed5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Diffuse1-out.txt @@ -0,0 +1,55 @@ +uniform vec4 unity_Ambient; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[3]; + vec4 tmpvar_3; + tmpvar_3 = gl_TexCoord[4]; + vec4 tmpvar_4; + tmpvar_4 = gl_TexCoord[5]; + vec4 col_5; + vec4 light_6; + vec3 tmpvar_7; + tmpvar_7.x = tmpvar_2.w; + tmpvar_7.y = tmpvar_3.w; + tmpvar_7.z = tmpvar_4.w; + vec2 tmpvar_8; + vec3 v_9; + vec3 tmpvar_10; + tmpvar_10 = normalize(gl_TexCoord[1].xyz); + v_9.xy = tmpvar_10.xy; + v_9.z = (tmpvar_10.z + 0.42); + tmpvar_8 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_10.xy / v_9.z)); + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_8)); + vec4 normal_12; + normal_12.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_8)).wy * 2.0) - 1.0); + normal_12.z = sqrt(((1.0 - (normal_12.x * normal_12.x)) - (normal_12.y * normal_12.y))); + vec3 tmpvar_13; + tmpvar_13.x = dot (tmpvar_2.xyz, normal_12.xyz); + tmpvar_13.y = dot (tmpvar_3.xyz, normal_12.xyz); + tmpvar_13.z = dot (tmpvar_4.xyz, normal_12.xyz); + vec4 tmpvar_14; + tmpvar_14 = (textureCube (_Cube, (tmpvar_7 - (2.0 * (dot (tmpvar_13, tmpvar_7) * tmpvar_13)))) * tmpvar_11.w); + vec4 tmpvar_15; + tmpvar_15 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_6.w = tmpvar_15.w; + light_6.xyz = (tmpvar_15.xyz + unity_Ambient.xyz); + vec4 c_16; + c_16.xyz = ((tmpvar_11 * _Color).xyz * light_6.xyz); + c_16.w = (tmpvar_14.w * _ReflectColor.w); + col_5.w = c_16.w; + col_5.xyz = (c_16.xyz + (tmpvar_14.xyz * _ReflectColor.xyz)); + gl_FragData[0] = col_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-ir.txt new file mode 100644 index 000000000..c46337253 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-ir.txt @@ -0,0 +1,290 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 reflcol_16; + vec3 worldRefl_17; + vec4 tex_18; + vec2 offset_19; + float h_20; + vec4 tmpvar_21; + tmpvar_21 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_22; + tmpvar_22 = tmpvar_21.w; + h_20 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = ParallaxOffset (h_20, _Parallax, IN_14.viewDir); + vec2 tmpvar_24; + tmpvar_24 = tmpvar_23; + offset_19 = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_MainTex + offset_19); + IN_14.uv_MainTex = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = (IN_14.uv_BumpMap + offset_19); + IN_14.uv_BumpMap = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + tex_18 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (tex_18.xyz * _Color.xyz); + o_15.Albedo = tmpvar_29; + float tmpvar_30; + tmpvar_30 = tex_18.w; + o_15.Gloss = tmpvar_30; + float tmpvar_31; + tmpvar_31 = _Shininess; + o_15.Specular = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = IN_14.worldRefl; + worldRefl_17 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = textureCube (_Cube, worldRefl_17); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + reflcol_16 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (reflcol_16 * tex_18.w); + reflcol_16 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (reflcol_16.xyz * _ReflectColor.xyz); + o_15.Emission = tmpvar_40; + float tmpvar_41; + tmpvar_41 = (reflcol_16.w * _ReflectColor.w); + o_15.Alpha = tmpvar_41; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_42, + in vec3 lightDir_43, + in vec3 viewDir_44, + in float atten_45 +) +{ + vec4 c_46; + float spec_47; + float nh_48; + float diff_49; + vec3 h_50; + vec3 tmpvar_51; + tmpvar_51 = normalize ((lightDir_43 + viewDir_44)); + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + h_50 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = dot (s_42.Normal, lightDir_43); + float tmpvar_54; + tmpvar_54 = max (0.0, tmpvar_53); + float tmpvar_55; + tmpvar_55 = tmpvar_54; + diff_49 = tmpvar_55; + float tmpvar_56; + tmpvar_56 = dot (s_42.Normal, h_50); + float tmpvar_57; + tmpvar_57 = max (0.0, tmpvar_56); + float tmpvar_58; + tmpvar_58 = tmpvar_57; + nh_48 = tmpvar_58; + float tmpvar_59; + tmpvar_59 = pow (nh_48, (s_42.Specular * 128.0)); + float tmpvar_60; + tmpvar_60 = (tmpvar_59 * s_42.Gloss); + spec_47 = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = ((((s_42.Albedo * _LightColor0.xyz) * diff_49) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_47)) * (atten_45 * 2.0)); + c_46.xyz = tmpvar_61.xyz.xyz; + float tmpvar_62; + tmpvar_62 = (s_42.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_47) * atten_45)); + c_46.w = vec4(tmpvar_62).w; + return c_46; +} + +vec4 frag_surf ( + in v2f_surf IN_63 +) +{ + vec4 c_64; + vec3 lightDir_65; + SurfaceOutput o_66; + Input surfIN_67; + vec2 tmpvar_68; + tmpvar_68 = IN_63.hip_pack0.xy; + surfIN_67.uv_MainTex = tmpvar_68; + vec2 tmpvar_69; + tmpvar_69 = IN_63.hip_pack0.zw; + surfIN_67.uv_BumpMap = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = IN_63.viewDir; + surfIN_67.viewDir = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = vec3(0.0, 0.0, 0.0); + o_66.Albedo = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = vec3(0.0, 0.0, 0.0); + o_66.Emission = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + o_66.Specular = tmpvar_73; + float tmpvar_74; + tmpvar_74 = 0.0; + o_66.Alpha = tmpvar_74; + float tmpvar_75; + tmpvar_75 = 0.0; + o_66.Gloss = tmpvar_75; + surf (surfIN_67, o_66); + vec3 tmpvar_76; + tmpvar_76 = IN_63.lightDir; + lightDir_65 = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = normalize (lightDir_65); + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + lightDir_65 = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = IN_63.viewDir.xyz; + vec3 tmpvar_80; + tmpvar_80 = normalize (tmpvar_79); + float tmpvar_81; + tmpvar_81 = dot (IN_63._LightCoord, IN_63._LightCoord); + vec2 tmpvar_82; + tmpvar_82 = vec2(tmpvar_81); + vec2 tmpvar_83; + tmpvar_83 = tmpvar_82.xy; + vec4 tmpvar_84; + tmpvar_84 = texture2D (_LightTexture0, tmpvar_83); + vec4 tmpvar_85; + tmpvar_85 = LightingBlinnPhong (o_66, lightDir_65, tmpvar_80, tmpvar_84.w); + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + c_64 = tmpvar_86; + float tmpvar_87; + tmpvar_87 = 0.0; + c_64.w = vec4(tmpvar_87).w; + return c_64; +} + +void main () +{ + v2f_surf xlt_IN_88; + vec4 xl_retval_89; + vec4 tmpvar_90; + tmpvar_90 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_88.pos = tmpvar_90; + float tmpvar_91; + tmpvar_91 = xlv_FOG.x; + xlt_IN_88.fog = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92 = gl_TexCoord[0].xyzw; + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_88.hip_pack0 = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = gl_TexCoord[1].xyz; + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_88.viewDir = tmpvar_95; + vec3 tmpvar_96; + tmpvar_96 = gl_TexCoord[2].xyz; + vec3 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_88.lightDir = tmpvar_97; + vec3 tmpvar_98; + tmpvar_98 = gl_TexCoord[3].xyz; + vec3 tmpvar_99; + tmpvar_99 = tmpvar_98; + xlt_IN_88._LightCoord = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = frag_surf (xlt_IN_88); + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + xl_retval_89 = tmpvar_101; + vec4 tmpvar_102; + tmpvar_102 = xl_retval_89.xyzw; + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + gl_FragData[0] = tmpvar_103; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-out.txt new file mode 100644 index 000000000..2dec0648e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular-out.txt @@ -0,0 +1,47 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec3 tmpvar_3; + tmpvar_3 = gl_TexCoord[3].xyz; + vec4 c_4; + vec3 tmpvar_5; + vec2 tmpvar_6; + vec3 v_7; + vec3 tmpvar_8; + tmpvar_8 = normalize(tmpvar_2); + v_7.xy = tmpvar_8.xy; + v_7.z = (tmpvar_8.z + 0.42); + tmpvar_6 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_8.xy / v_7.z)); + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_6)); + vec4 normal_10; + normal_10.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_6)).wy * 2.0) - 1.0); + normal_10.z = sqrt(((1.0 - (normal_10.x * normal_10.x)) - (normal_10.y * normal_10.y))); + vec3 tmpvar_11; + tmpvar_11 = normalize(gl_TexCoord[2].xyz); + vec4 tmpvar_12; + tmpvar_12 = texture2D (_LightTexture0, vec2(dot (tmpvar_3, tmpvar_3))); + vec4 c_13; + float tmpvar_14; + tmpvar_14 = (pow (max (0.0, dot (normal_10.xyz, normalize((tmpvar_11 + normalize(tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_9.w); + c_13.xyz = (((((tmpvar_9.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_10.xyz, tmpvar_11))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_14)) * (tmpvar_12.w * 2.0)); + c_13.w = (((textureCube (_Cube, tmpvar_5) * tmpvar_9.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_14) * tmpvar_12.w)); + c_4.xyz = c_13.xyz; + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Parallax_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-ir.txt new file mode 100644 index 000000000..86b666d3f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-ir.txt @@ -0,0 +1,279 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec3 worldRefl; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 reflcol_16; + vec3 worldRefl_17; + vec4 tex_18; + vec2 offset_19; + float h_20; + vec4 tmpvar_21; + tmpvar_21 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_22; + tmpvar_22 = tmpvar_21.w; + h_20 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = ParallaxOffset (h_20, _Parallax, IN_14.viewDir); + vec2 tmpvar_24; + tmpvar_24 = tmpvar_23; + offset_19 = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_MainTex + offset_19); + IN_14.uv_MainTex = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = (IN_14.uv_BumpMap + offset_19); + IN_14.uv_BumpMap = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + tex_18 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (tex_18.xyz * _Color.xyz); + o_15.Albedo = tmpvar_29; + float tmpvar_30; + tmpvar_30 = tex_18.w; + o_15.Gloss = tmpvar_30; + float tmpvar_31; + tmpvar_31 = _Shininess; + o_15.Specular = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = IN_14.worldRefl; + worldRefl_17 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = textureCube (_Cube, worldRefl_17); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + reflcol_16 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (reflcol_16 * tex_18.w); + reflcol_16 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (reflcol_16.xyz * _ReflectColor.xyz); + o_15.Emission = tmpvar_40; + float tmpvar_41; + tmpvar_41 = (reflcol_16.w * _ReflectColor.w); + o_15.Alpha = tmpvar_41; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_42, + in vec3 lightDir_43, + in vec3 viewDir_44, + in float atten_45 +) +{ + vec4 c_46; + float spec_47; + float nh_48; + float diff_49; + vec3 h_50; + vec3 tmpvar_51; + tmpvar_51 = normalize ((lightDir_43 + viewDir_44)); + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + h_50 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = dot (s_42.Normal, lightDir_43); + float tmpvar_54; + tmpvar_54 = max (0.0, tmpvar_53); + float tmpvar_55; + tmpvar_55 = tmpvar_54; + diff_49 = tmpvar_55; + float tmpvar_56; + tmpvar_56 = dot (s_42.Normal, h_50); + float tmpvar_57; + tmpvar_57 = max (0.0, tmpvar_56); + float tmpvar_58; + tmpvar_58 = tmpvar_57; + nh_48 = tmpvar_58; + float tmpvar_59; + tmpvar_59 = pow (nh_48, (s_42.Specular * 128.0)); + float tmpvar_60; + tmpvar_60 = (tmpvar_59 * s_42.Gloss); + spec_47 = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = ((((s_42.Albedo * _LightColor0.xyz) * diff_49) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_47)) * (atten_45 * 2.0)); + c_46.xyz = tmpvar_61.xyz.xyz; + float tmpvar_62; + tmpvar_62 = (s_42.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_47) * atten_45)); + c_46.w = vec4(tmpvar_62).w; + return c_46; +} + +vec4 frag_surf ( + in v2f_surf IN_63 +) +{ + vec4 c_64; + vec3 lightDir_65; + SurfaceOutput o_66; + Input surfIN_67; + vec2 tmpvar_68; + tmpvar_68 = IN_63.hip_pack0.xy; + surfIN_67.uv_MainTex = tmpvar_68; + vec2 tmpvar_69; + tmpvar_69 = IN_63.hip_pack0.zw; + surfIN_67.uv_BumpMap = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = IN_63.viewDir; + surfIN_67.viewDir = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = vec3(0.0, 0.0, 0.0); + o_66.Albedo = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = vec3(0.0, 0.0, 0.0); + o_66.Emission = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + o_66.Specular = tmpvar_73; + float tmpvar_74; + tmpvar_74 = 0.0; + o_66.Alpha = tmpvar_74; + float tmpvar_75; + tmpvar_75 = 0.0; + o_66.Gloss = tmpvar_75; + surf (surfIN_67, o_66); + vec3 tmpvar_76; + tmpvar_76 = IN_63.lightDir; + lightDir_65 = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = IN_63.viewDir.xyz; + vec3 tmpvar_78; + tmpvar_78 = normalize (tmpvar_77); + vec4 tmpvar_79; + tmpvar_79 = texture2D (_LightTexture0, IN_63._LightCoord); + vec4 tmpvar_80; + tmpvar_80 = LightingBlinnPhong (o_66, lightDir_65, tmpvar_78, (tmpvar_79.w * 1.0)); + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + c_64 = tmpvar_81; + float tmpvar_82; + tmpvar_82 = 0.0; + c_64.w = vec4(tmpvar_82).w; + return c_64; +} + +void main () +{ + v2f_surf xlt_IN_83; + vec4 xl_retval_84; + vec4 tmpvar_85; + tmpvar_85 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_83.pos = tmpvar_85; + float tmpvar_86; + tmpvar_86 = xlv_FOG.x; + xlt_IN_83.fog = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = gl_TexCoord[0].xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + xlt_IN_83.hip_pack0 = tmpvar_88; + vec3 tmpvar_89; + tmpvar_89 = gl_TexCoord[1].xyz; + vec3 tmpvar_90; + tmpvar_90 = tmpvar_89; + xlt_IN_83.viewDir = tmpvar_90; + vec3 tmpvar_91; + tmpvar_91 = gl_TexCoord[2].xyz; + vec3 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlt_IN_83.lightDir = tmpvar_92; + vec2 tmpvar_93; + tmpvar_93 = gl_TexCoord[3].xy; + vec2 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlt_IN_83._LightCoord = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95 = frag_surf (xlt_IN_83); + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + xl_retval_84 = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97 = xl_retval_84.xyzw; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + gl_FragData[0] = tmpvar_98; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-out.txt new file mode 100644 index 000000000..8f0890192 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Parallax_Specular1-out.txt @@ -0,0 +1,45 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec3 tmpvar_3; + tmpvar_3 = gl_TexCoord[2].xyz; + vec4 c_4; + vec3 tmpvar_5; + vec2 tmpvar_6; + vec3 v_7; + vec3 tmpvar_8; + tmpvar_8 = normalize(tmpvar_2); + v_7.xy = tmpvar_8.xy; + v_7.z = (tmpvar_8.z + 0.42); + tmpvar_6 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_8.xy / v_7.z)); + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_6)); + vec4 normal_10; + normal_10.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_6)).wy * 2.0) - 1.0); + normal_10.z = sqrt(((1.0 - (normal_10.x * normal_10.x)) - (normal_10.y * normal_10.y))); + float atten_11; + atten_11 = texture2D (_LightTexture0, gl_TexCoord[3].xy).w; + vec4 c_12; + float tmpvar_13; + tmpvar_13 = (pow (max (0.0, dot (normal_10.xyz, normalize((tmpvar_3 + normalize(tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_9.w); + c_12.xyz = (((((tmpvar_9.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_10.xyz, tmpvar_3))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_13)) * (atten_11 * 2.0)); + c_12.w = (((textureCube (_Cube, tmpvar_5) * tmpvar_9.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_13) * atten_11)); + c_4.xyz = c_12.xyz; + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-ir.txt new file mode 100644 index 000000000..788a889de --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-ir.txt @@ -0,0 +1,245 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 reflcol_3; + vec4 c_4; + vec4 tex_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + tex_5 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (tex_5 * _Color); + c_4 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = c_4.xyz; + o_2.Albedo = tmpvar_9; + float tmpvar_10; + tmpvar_10 = tex_5.w; + o_2.Gloss = tmpvar_10; + float tmpvar_11; + tmpvar_11 = _Shininess; + o_2.Specular = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = textureCube (_Cube, IN_1.worldRefl); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + reflcol_3 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (reflcol_3 * tex_5.w); + reflcol_3 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (reflcol_3.xyz * _ReflectColor.xyz); + o_2.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = (reflcol_3.w * _ReflectColor.w); + o_2.Alpha = tmpvar_16; +} + +float UnitySpotCookie ( + in vec4 LightCoord_17 +) +{ + vec4 tmpvar_18; + tmpvar_18 = texture2D (_LightTexture0, ((LightCoord_17.xy / LightCoord_17.w) + 0.5)); + return tmpvar_18.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_19 +) +{ + float tmpvar_20; + tmpvar_20 = dot (LightCoord_19, LightCoord_19); + vec2 tmpvar_21; + tmpvar_21 = vec2(tmpvar_20); + vec2 tmpvar_22; + tmpvar_22 = tmpvar_21.xy; + vec4 tmpvar_23; + tmpvar_23 = texture2D (_LightTextureB0, tmpvar_22); + return tmpvar_23.w; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_24, + in vec3 lightDir_25, + in vec3 viewDir_26, + in float atten_27 +) +{ + vec4 c_28; + float spec_29; + float nh_30; + float diff_31; + vec3 h_32; + vec3 tmpvar_33; + tmpvar_33 = normalize ((lightDir_25 + viewDir_26)); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + h_32 = tmpvar_34; + float tmpvar_35; + tmpvar_35 = dot (s_24.Normal, lightDir_25); + float tmpvar_36; + tmpvar_36 = max (0.0, tmpvar_35); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + diff_31 = tmpvar_37; + float tmpvar_38; + tmpvar_38 = dot (s_24.Normal, h_32); + float tmpvar_39; + tmpvar_39 = max (0.0, tmpvar_38); + float tmpvar_40; + tmpvar_40 = tmpvar_39; + nh_30 = tmpvar_40; + float tmpvar_41; + tmpvar_41 = pow (nh_30, (s_24.Specular * 128.0)); + float tmpvar_42; + tmpvar_42 = (tmpvar_41 * s_24.Gloss); + spec_29 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = ((((s_24.Albedo * _LightColor0.xyz) * diff_31) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_29)) * (atten_27 * 2.0)); + c_28.xyz = tmpvar_43.xyz.xyz; + float tmpvar_44; + tmpvar_44 = (s_24.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_29) * atten_27)); + c_28.w = vec4(tmpvar_44).w; + return c_28; +} + +vec4 frag_surf ( + in v2f_surf IN_45 +) +{ + vec4 c_46; + vec3 lightDir_47; + SurfaceOutput o_48; + Input surfIN_49; + vec2 tmpvar_50; + tmpvar_50 = IN_45.hip_pack0.xy; + surfIN_49.uv_MainTex = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + o_48.Albedo = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = vec3(0.0, 0.0, 0.0); + o_48.Emission = tmpvar_52; + float tmpvar_53; + tmpvar_53 = 0.0; + o_48.Specular = tmpvar_53; + float tmpvar_54; + tmpvar_54 = 0.0; + o_48.Alpha = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 0.0; + o_48.Gloss = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = IN_45.normal; + o_48.Normal = tmpvar_56; + surf (surfIN_49, o_48); + vec3 tmpvar_57; + tmpvar_57 = IN_45.lightDir; + lightDir_47 = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = normalize (lightDir_47); + vec3 tmpvar_59; + tmpvar_59 = tmpvar_58; + lightDir_47 = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = IN_45.viewDir.xyz; + vec3 tmpvar_61; + tmpvar_61 = normalize (tmpvar_60); + float tmpvar_62; + tmpvar_62 = UnitySpotCookie (IN_45._LightCoord); + float tmpvar_63; + tmpvar_63 = UnitySpotAttenuate (IN_45._LightCoord.xyz); + vec4 tmpvar_64; + tmpvar_64 = LightingBlinnPhong (o_48, lightDir_47, tmpvar_61, ((float((IN_45._LightCoord.z > 0.0)) * tmpvar_62) * tmpvar_63)); + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + c_46 = tmpvar_65; + float tmpvar_66; + tmpvar_66 = 0.0; + c_46.w = vec4(tmpvar_66).w; + return c_46; +} + +void main () +{ + v2f_surf xlt_IN_67; + vec4 xl_retval_68; + vec4 tmpvar_69; + tmpvar_69 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_67.pos = tmpvar_69; + float tmpvar_70; + tmpvar_70 = xlv_FOG.x; + xlt_IN_67.fog = tmpvar_70; + vec2 tmpvar_71; + tmpvar_71 = gl_TexCoord[0].xy; + vec2 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_IN_67.hip_pack0 = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = gl_TexCoord[1].xyz; + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_IN_67.normal = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = gl_TexCoord[2].xyz; + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_IN_67.lightDir = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = gl_TexCoord[3].xyz; + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_IN_67.viewDir = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = gl_TexCoord[4].xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + xlt_IN_67._LightCoord = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = frag_surf (xlt_IN_67); + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + xl_retval_68 = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = xl_retval_68.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + gl_FragData[0] = tmpvar_84; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-out.txt new file mode 100644 index 000000000..98825e492 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular-out.txt @@ -0,0 +1,33 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[4]; + vec4 c_3; + vec3 tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec3 tmpvar_6; + tmpvar_6 = normalize(gl_TexCoord[2].xyz); + float atten_7; + atten_7 = ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (pow (max (0.0, dot (tmpvar_1, normalize((tmpvar_6 + normalize(gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_5.w); + c_8.xyz = (((((tmpvar_5 * _Color).xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_6))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * (atten_7 * 2.0)); + c_8.w = (((textureCube (_Cube, tmpvar_4) * tmpvar_5.w).w * _ReflectColor.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_9) * atten_7)); + c_3.xyz = c_8.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-ir.txt new file mode 100644 index 000000000..721296470 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-ir.txt @@ -0,0 +1,121 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform samplerCube _Cube; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 reflcol_3; + vec4 c_4; + vec4 tex_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + tex_5 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (tex_5 * _Color); + c_4 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = c_4.xyz; + o_2.Albedo = tmpvar_9; + float tmpvar_10; + tmpvar_10 = tex_5.w; + o_2.Gloss = tmpvar_10; + float tmpvar_11; + tmpvar_11 = _Shininess; + o_2.Specular = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = textureCube (_Cube, IN_1.worldRefl); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + reflcol_3 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (reflcol_3 * tex_5.w); + reflcol_3 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (reflcol_3.xyz * _ReflectColor.xyz); + o_2.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = (reflcol_3.w * _ReflectColor.w); + o_2.Alpha = tmpvar_16; +} + +vec4 frag_surf ( + in v2f_surf IN_17 +) +{ + vec4 res_18; + Input surfIN_19; + SurfaceOutput o_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_20.Albedo = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(0.0, 0.0, 0.0); + o_20.Emission = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_20.Specular = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_20.Alpha = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_20.Gloss = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = IN_17.normal; + o_20.Normal = tmpvar_26; + surf (surfIN_19, o_20); + vec3 tmpvar_27; + tmpvar_27 = ((o_20.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_18.xyz = tmpvar_27.xyz.xyz; + float tmpvar_28; + tmpvar_28 = o_20.Specular; + res_18.w = vec4(tmpvar_28).w; + return res_18; +} + +void main () +{ + v2f_surf xlt_IN_29; + vec4 xl_retval_30; + vec4 tmpvar_31; + tmpvar_31 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_29.pos = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = gl_TexCoord[0].xyz; + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_IN_29.normal = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = frag_surf (xlt_IN_29); + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xl_retval_30 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = xl_retval_30.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + gl_FragData[0] = tmpvar_37; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-out.txt new file mode 100644 index 000000000..28ed5f368 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular1-out.txt @@ -0,0 +1,9 @@ +uniform float _Shininess; +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = _Shininess; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Reflective_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-ir.txt new file mode 100644 index 000000000..51affdd37 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-ir.txt @@ -0,0 +1,179 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldRefl; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 reflcol_3; + vec4 c_4; + vec4 tex_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + tex_5 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (tex_5 * _Color); + c_4 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = c_4.xyz; + o_2.Albedo = tmpvar_9; + float tmpvar_10; + tmpvar_10 = tex_5.w; + o_2.Gloss = tmpvar_10; + float tmpvar_11; + tmpvar_11 = _Shininess; + o_2.Specular = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = textureCube (_Cube, IN_1.worldRefl); + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + reflcol_3 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = (reflcol_3 * tex_5.w); + reflcol_3 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (reflcol_3.xyz * _ReflectColor.xyz); + o_2.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = (reflcol_3.w * _ReflectColor.w); + o_2.Alpha = tmpvar_16; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_17, + in vec4 light_18 +) +{ + vec4 c_19; + float spec_20; + float tmpvar_21; + tmpvar_21 = (light_18.w * s_17.Gloss); + spec_20 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = ((s_17.Albedo * light_18.xyz) + ((light_18.xyz * _SpecColor.xyz) * spec_20)); + c_19.xyz = tmpvar_22.xyz.xyz; + float tmpvar_23; + tmpvar_23 = (s_17.Alpha + (spec_20 * _SpecColor.w)); + c_19.w = vec4(tmpvar_23).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_24 +) +{ + vec4 col_25; + vec4 light_26; + SurfaceOutput o_27; + Input surfIN_28; + vec2 tmpvar_29; + tmpvar_29 = IN_24.hip_pack0.xy; + surfIN_28.uv_MainTex = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = IN_24.worldRefl; + surfIN_28.worldRefl = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_27.Albedo = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_27.Emission = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_27.Specular = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_27.Alpha = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_27.Gloss = tmpvar_35; + surf (surfIN_28, o_27); + vec4 tmpvar_36; + tmpvar_36 = texture2DProj (_LightBuffer, IN_24.hip_screen); + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + light_26 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = log2 (light_26); + vec4 tmpvar_39; + tmpvar_39 = -(tmpvar_38); + light_26 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (light_26.xyz + unity_Ambient.xyz); + light_26.xyz = tmpvar_40.xyz.xyz; + vec4 tmpvar_41; + tmpvar_41 = LightingBlinnPhong_PrePass (o_27, light_26); + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + col_25 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = (col_25.xyz + o_27.Emission); + col_25.xyz = tmpvar_43.xyz.xyz; + return col_25; +} + +void main () +{ + v2f_surf xlt_IN_44; + vec4 xl_retval_45; + vec4 tmpvar_46; + tmpvar_46 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_44.pos = tmpvar_46; + float tmpvar_47; + tmpvar_47 = xlv_FOG.x; + xlt_IN_44.fog = tmpvar_47; + vec2 tmpvar_48; + tmpvar_48 = gl_TexCoord[0].xy; + vec2 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_44.hip_pack0 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[1].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_44.worldRefl = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = gl_TexCoord[2].xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_44.hip_screen = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = frag_surf (xlt_IN_44); + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xl_retval_45 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = xl_retval_45.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_FragData[0] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-out.txt new file mode 100644 index 000000000..3b59c134c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Reflective_Specular2-out.txt @@ -0,0 +1,29 @@ +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform vec4 _ReflectColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform samplerCube _Cube; +uniform vec4 _Color; +void main () +{ + vec4 col_1; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec4 tmpvar_4; + tmpvar_4 = (textureCube (_Cube, gl_TexCoord[1].xyz) * tmpvar_3.w); + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_2.w = tmpvar_5.w; + light_2.xyz = (tmpvar_5.xyz + unity_Ambient.xyz); + vec4 c_6; + float tmpvar_7; + tmpvar_7 = (tmpvar_5.w * tmpvar_3.w); + c_6.xyz = (((tmpvar_3 * _Color).xyz * light_2.xyz) + ((light_2.xyz * _SpecColor.xyz) * tmpvar_7)); + c_6.w = ((tmpvar_4.w * _ReflectColor.w) + (tmpvar_7 * _SpecColor.w)); + col_1.w = c_6.w; + col_1.xyz = (c_6.xyz + (tmpvar_4.xyz * _ReflectColor.xyz)); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-ir.txt new file mode 100644 index 000000000..1fa2fbd3a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-ir.txt @@ -0,0 +1,60 @@ +struct v2f { + vec4 vertex; + vec2 texcoord; +}; +uniform sampler2D _UpTex; +uniform vec4 _Tint; +vec4 skybox_frag ( + in v2f i_1, + in sampler2D smp_2 +) +{ + vec4 col_3; + vec4 tex_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (smp_2, i_1.texcoord); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = ((tex_4.xyz + _Tint.xyz) - 0.5); + col_3.xyz = tmpvar_7.xyz.xyz; + float tmpvar_8; + tmpvar_8 = (tex_4.w * _Tint.w); + col_3.w = vec4(tmpvar_8).w; + return col_3; +} + +vec4 frag ( + in v2f i_9 +) +{ + vec4 tmpvar_10; + tmpvar_10 = skybox_frag (i_9, _UpTex); + return tmpvar_10; +} + +void main () +{ + v2f xlt_i_11; + vec4 xl_retval_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_11.vertex = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = gl_TexCoord[0].xy; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_i_11.texcoord = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = frag (xlt_i_11); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xl_retval_12 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_12.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragData[0] = tmpvar_19; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-out.txt new file mode 100644 index 000000000..e025373d5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox-out.txt @@ -0,0 +1,12 @@ +uniform sampler2D _UpTex; +uniform vec4 _Tint; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = texture2D (_UpTex, gl_TexCoord[0].xy); + col_1.xyz = ((tmpvar_2.xyz + _Tint.xyz) - 0.5); + col_1.w = (tmpvar_2.w * _Tint.w); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-RenderFX_Skybox_Cubed-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-ir.txt new file mode 100644 index 000000000..3a6c1352e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-ir.txt @@ -0,0 +1,50 @@ +struct v2f { + vec4 vertex; + vec3 texcoord; +}; +uniform vec4 _Tint; +uniform samplerCube _Tex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tex_3; + vec4 tmpvar_4; + tmpvar_4 = textureCube (_Tex, i_1.texcoord); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + tex_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = ((tex_3.xyz + _Tint.xyz) - 0.5); + col_2.xyz = tmpvar_6.xyz.xyz; + float tmpvar_7; + tmpvar_7 = (tex_3.w * _Tint.w); + col_2.w = vec4(tmpvar_7).w; + return col_2; +} + +void main () +{ + v2f xlt_i_8; + vec4 xl_retval_9; + vec4 tmpvar_10; + tmpvar_10 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_8.vertex = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = gl_TexCoord[0].xyz; + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_8.texcoord = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = frag (xlt_i_8); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_9 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_9.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-out.txt new file mode 100644 index 000000000..a8db61a49 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-RenderFX_Skybox_Cubed-out.txt @@ -0,0 +1,12 @@ +uniform vec4 _Tint; +uniform samplerCube _Tex; +void main () +{ + vec4 col_1; + vec4 tmpvar_2; + tmpvar_2 = textureCube (_Tex, gl_TexCoord[0].xyz); + col_1.xyz = ((tmpvar_2.xyz + _Tint.xyz) - 0.5); + col_1.w = (tmpvar_2.w * _Tint.w); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..8e4026830 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-ir.txt @@ -0,0 +1,219 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (tex_9 * _Color); + c_8 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_8.xyz; + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_Illum, IN_6.uv_Illum); + vec3 tmpvar_15; + tmpvar_15 = (c_8.xyz * tmpvar_14.w); + o_7.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = c_8.w; + o_7.Alpha = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_18; + tmpvar_18 = UnpackNormal (tmpvar_17); + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18.xyz; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + o_7.Normal = tmpvar_20; +} + +float UnitySpotCookie ( + in vec4 LightCoord_21 +) +{ + vec4 tmpvar_22; + tmpvar_22 = texture2D (_LightTexture0, ((LightCoord_21.xy / LightCoord_21.w) + 0.5)); + return tmpvar_22.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_23 +) +{ + float tmpvar_24; + tmpvar_24 = dot (LightCoord_23, LightCoord_23); + vec2 tmpvar_25; + tmpvar_25 = vec2(tmpvar_24); + vec2 tmpvar_26; + tmpvar_26 = tmpvar_25.xy; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_LightTextureB0, tmpvar_26); + return tmpvar_27.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_28, + in vec3 lightDir_29, + in float atten_30 +) +{ + vec4 c_31; + float diff_32; + float tmpvar_33; + tmpvar_33 = dot (s_28.Normal, lightDir_29); + float tmpvar_34; + tmpvar_34 = max (0.0, tmpvar_33); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + diff_32 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = ((s_28.Albedo * _LightColor0.xyz) * ((diff_32 * atten_30) * 2.0)); + c_31.xyz = tmpvar_36.xyz.xyz; + float tmpvar_37; + tmpvar_37 = s_28.Alpha; + c_31.w = vec4(tmpvar_37).w; + return c_31; +} + +vec4 frag_surf ( + in v2f_surf IN_38 +) +{ + vec4 c_39; + vec3 lightDir_40; + SurfaceOutput o_41; + Input surfIN_42; + vec2 tmpvar_43; + tmpvar_43 = IN_38.hip_pack0.xy; + surfIN_42.uv_MainTex = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = IN_38.hip_pack0.zw; + surfIN_42.uv_BumpMap = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = vec3(0.0, 0.0, 0.0); + o_41.Albedo = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = vec3(0.0, 0.0, 0.0); + o_41.Emission = tmpvar_46; + float tmpvar_47; + tmpvar_47 = 0.0; + o_41.Specular = tmpvar_47; + float tmpvar_48; + tmpvar_48 = 0.0; + o_41.Alpha = tmpvar_48; + float tmpvar_49; + tmpvar_49 = 0.0; + o_41.Gloss = tmpvar_49; + surf (surfIN_42, o_41); + vec3 tmpvar_50; + tmpvar_50 = IN_38.lightDir; + lightDir_40 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = normalize (lightDir_40); + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + lightDir_40 = tmpvar_52; + float tmpvar_53; + tmpvar_53 = UnitySpotCookie (IN_38._LightCoord); + float tmpvar_54; + tmpvar_54 = UnitySpotAttenuate (IN_38._LightCoord.xyz); + vec4 tmpvar_55; + tmpvar_55 = LightingLambert (o_41, lightDir_40, ((float((IN_38._LightCoord.z > 0.0)) * tmpvar_53) * tmpvar_54)); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + c_39 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = 0.0; + c_39.w = vec4(tmpvar_57).w; + return c_39; +} + +void main () +{ + v2f_surf xlt_IN_58; + vec4 xl_retval_59; + vec4 tmpvar_60; + tmpvar_60 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_58.pos = tmpvar_60; + float tmpvar_61; + tmpvar_61 = xlv_FOG.x; + xlt_IN_58.fog = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = gl_TexCoord[0].xyzw; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_IN_58.hip_pack0 = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = gl_TexCoord[1].xyz; + vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_IN_58.lightDir = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = gl_TexCoord[2].xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_IN_58._LightCoord = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = frag_surf (xlt_IN_58); + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + xl_retval_59 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = xl_retval_59.xyzw; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + gl_FragData[0] = tmpvar_71; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-out.txt new file mode 100644 index 000000000..4eec21e5f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse-out.txt @@ -0,0 +1,26 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[2]; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); + vec4 normal_5; + normal_5.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + vec4 c_6; + c_6.xyz = ((tmpvar_4.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_5.xyz, normalize(gl_TexCoord[1].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_6.w = tmpvar_4.w; + c_3.xyz = c_6.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..c32f6e36b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-ir.txt @@ -0,0 +1,170 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +uniform sampler2D _MainTex; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (tex_9 * _Color); + c_8 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_8.xyz; + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_Illum, IN_6.uv_Illum); + vec3 tmpvar_15; + tmpvar_15 = (c_8.xyz * tmpvar_14.w); + o_7.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = c_8.w; + o_7.Alpha = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_18; + tmpvar_18 = UnpackNormal (tmpvar_17); + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18.xyz; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + o_7.Normal = tmpvar_20; +} + +vec4 frag_surf ( + in v2f_surf IN_21 +) +{ + vec4 res_22; + vec3 viewN_23; + SurfaceOutput o_24; + Input surfIN_25; + vec2 tmpvar_26; + tmpvar_26 = IN_21.hip_pack0.xy; + surfIN_25.uv_BumpMap = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_24.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_24.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_24.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_24.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_24.Gloss = tmpvar_31; + surf (surfIN_25, o_24); + float tmpvar_32; + tmpvar_32 = dot (IN_21.TtoV0, o_24.Normal); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + viewN_23.x = tmpvar_33; + float tmpvar_34; + tmpvar_34 = dot (IN_21.TtoV1, o_24.Normal); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + viewN_23.y = vec2(tmpvar_35).y; + float tmpvar_36; + tmpvar_36 = dot (IN_21.TtoV2, o_24.Normal); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + viewN_23.z = vec3(tmpvar_37).z; + vec3 tmpvar_38; + tmpvar_38 = viewN_23; + o_24.Normal = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = ((o_24.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_22.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = o_24.Specular; + res_22.w = vec4(tmpvar_40).w; + return res_22; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = gl_TexCoord[0].xy; + vec2 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_41.hip_pack0 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_TexCoord[1].xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_41.TtoV0 = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = gl_TexCoord[2].xyz; + vec3 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_41.TtoV1 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[3].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_41.TtoV2 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = frag_surf (xlt_IN_41); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xl_retval_42 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_42.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_FragData[0] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-out.txt new file mode 100644 index 000000000..7a6802800 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse1-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _BumpMap; +void main () +{ + vec4 res_1; + vec3 viewN_2; + vec4 normal_3; + normal_3.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); + normal_3.z = sqrt(((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + viewN_2.x = dot (gl_TexCoord[1].xyz, normal_3.xyz); + viewN_2.y = dot (gl_TexCoord[2].xyz, normal_3.xyz); + viewN_2.z = dot (gl_TexCoord[3].xyz, normal_3.xyz); + res_1.xyz = ((viewN_2 * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-ir.txt new file mode 100644 index 000000000..808e5c42e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-ir.txt @@ -0,0 +1,180 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (tex_9 * _Color); + c_8 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_8.xyz; + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_Illum, IN_6.uv_Illum); + vec3 tmpvar_15; + tmpvar_15 = (c_8.xyz * tmpvar_14.w); + o_7.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = c_8.w; + o_7.Alpha = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_18; + tmpvar_18 = UnpackNormal (tmpvar_17); + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18.xyz; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + o_7.Normal = tmpvar_20; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_21, + in vec4 light_22 +) +{ + vec4 c_23; + vec3 tmpvar_24; + tmpvar_24 = (s_21.Albedo * light_22.xyz); + c_23.xyz = tmpvar_24.xyz.xyz; + float tmpvar_25; + tmpvar_25 = s_21.Alpha; + c_23.w = vec4(tmpvar_25).w; + return c_23; +} + +vec4 frag_surf ( + in v2f_surf IN_26 +) +{ + vec4 col_27; + vec4 light_28; + SurfaceOutput o_29; + Input surfIN_30; + vec2 tmpvar_31; + tmpvar_31 = IN_26.hip_pack0.xy; + surfIN_30.uv_MainTex = tmpvar_31; + vec2 tmpvar_32; + tmpvar_32 = IN_26.hip_pack0.zw; + surfIN_30.uv_Illum = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_29.Albedo = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(0.0, 0.0, 0.0); + o_29.Emission = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_29.Specular = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_29.Alpha = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_29.Gloss = tmpvar_37; + surf (surfIN_30, o_29); + vec4 tmpvar_38; + tmpvar_38 = texture2DProj (_LightBuffer, IN_26.hip_screen); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + light_28 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = log2 (light_28); + vec4 tmpvar_41; + tmpvar_41 = -(tmpvar_40); + light_28 = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = (light_28.xyz + unity_Ambient.xyz); + light_28.xyz = tmpvar_42.xyz.xyz; + vec4 tmpvar_43; + tmpvar_43 = LightingLambert_PrePass (o_29, light_28); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + col_27 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = (col_27.xyz + o_29.Emission); + col_27.xyz = tmpvar_45.xyz.xyz; + return col_27; +} + +void main () +{ + v2f_surf xlt_IN_46; + vec4 xl_retval_47; + vec4 tmpvar_48; + tmpvar_48 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_46.pos = tmpvar_48; + float tmpvar_49; + tmpvar_49 = xlv_FOG.x; + xlt_IN_46.fog = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = gl_TexCoord[0].xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_46.hip_pack0 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = gl_TexCoord[1].xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_46.hip_screen = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = frag_surf (xlt_IN_46); + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xl_retval_47 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = xl_retval_47.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_FragData[0] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-out.txt new file mode 100644 index 000000000..098a3f286 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Diffuse2-out.txt @@ -0,0 +1,30 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 col_2; + vec4 light_3; + vec2 tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); + vec4 normal_6; + normal_6.xy = ((texture2D (_BumpMap, tmpvar_4).wy * 2.0) - 1.0); + normal_6.z = sqrt(((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + vec4 tmpvar_7; + tmpvar_7 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_3.w = tmpvar_7.w; + light_3.xyz = (tmpvar_7.xyz + unity_Ambient.xyz); + vec4 c_8; + c_8.xyz = (tmpvar_5.xyz * light_3.xyz); + c_8.w = tmpvar_5.w; + col_2.w = c_8.w; + col_2.xyz = (c_8.xyz + (tmpvar_5.xyz * texture2D (_Illum, tmpvar_1.zw).w)); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-ir.txt new file mode 100644 index 000000000..091c8f918 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-ir.txt @@ -0,0 +1,177 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (tex_9 * _Color); + c_8 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_8.xyz; + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_Illum, IN_6.uv_Illum); + vec3 tmpvar_15; + tmpvar_15 = (c_8.xyz * tmpvar_14.w); + o_7.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = tex_9.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = c_8.w; + o_7.Alpha = tmpvar_17; + float tmpvar_18; + tmpvar_18 = _Shininess; + o_7.Specular = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_20; + tmpvar_20 = UnpackNormal (tmpvar_19); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20.xyz; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_7.Normal = tmpvar_22; +} + +vec4 frag_surf ( + in v2f_surf IN_23 +) +{ + vec4 res_24; + vec3 viewN_25; + SurfaceOutput o_26; + Input surfIN_27; + vec2 tmpvar_28; + tmpvar_28 = IN_23.hip_pack0.xy; + surfIN_27.uv_BumpMap = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = vec3(0.0, 0.0, 0.0); + o_26.Albedo = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(0.0, 0.0, 0.0); + o_26.Emission = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_26.Specular = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_26.Alpha = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_26.Gloss = tmpvar_33; + surf (surfIN_27, o_26); + float tmpvar_34; + tmpvar_34 = dot (IN_23.TtoV0, o_26.Normal); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + viewN_25.x = tmpvar_35; + float tmpvar_36; + tmpvar_36 = dot (IN_23.TtoV1, o_26.Normal); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + viewN_25.y = vec2(tmpvar_37).y; + float tmpvar_38; + tmpvar_38 = dot (IN_23.TtoV2, o_26.Normal); + float tmpvar_39; + tmpvar_39 = tmpvar_38; + viewN_25.z = vec3(tmpvar_39).z; + vec3 tmpvar_40; + tmpvar_40 = viewN_25; + o_26.Normal = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = ((o_26.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_24.xyz = tmpvar_41.xyz.xyz; + float tmpvar_42; + tmpvar_42 = o_26.Specular; + res_24.w = vec4(tmpvar_42).w; + return res_24; +} + +void main () +{ + v2f_surf xlt_IN_43; + vec4 xl_retval_44; + vec4 tmpvar_45; + tmpvar_45 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_43.pos = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = gl_TexCoord[0].xy; + vec2 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_43.hip_pack0 = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = gl_TexCoord[1].xyz; + vec3 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_43.TtoV0 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[2].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_43.TtoV1 = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = gl_TexCoord[3].xyz; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_43.TtoV2 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = frag_surf (xlt_IN_43); + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xl_retval_44 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = xl_retval_44.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_FragData[0] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-out.txt new file mode 100644 index 000000000..c58e34122 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular-out.txt @@ -0,0 +1,17 @@ +uniform float _Shininess; +uniform sampler2D _BumpMap; +void main () +{ + vec4 res_1; + vec3 viewN_2; + vec4 normal_3; + normal_3.xy = ((texture2D (_BumpMap, gl_TexCoord[0].xy).wy * 2.0) - 1.0); + normal_3.z = sqrt(((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + viewN_2.x = dot (gl_TexCoord[1].xyz, normal_3.xyz); + viewN_2.y = dot (gl_TexCoord[2].xyz, normal_3.xyz); + viewN_2.z = dot (gl_TexCoord[3].xyz, normal_3.xyz); + res_1.xyz = ((viewN_2 * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = _Shininess; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-ir.txt new file mode 100644 index 000000000..f3493219f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-ir.txt @@ -0,0 +1,192 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (tex_9 * _Color); + c_8 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = c_8.xyz; + o_7.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_Illum, IN_6.uv_Illum); + vec3 tmpvar_15; + tmpvar_15 = (c_8.xyz * tmpvar_14.w); + o_7.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = tex_9.w; + o_7.Gloss = tmpvar_16; + float tmpvar_17; + tmpvar_17 = c_8.w; + o_7.Alpha = tmpvar_17; + float tmpvar_18; + tmpvar_18 = _Shininess; + o_7.Specular = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_20; + tmpvar_20 = UnpackNormal (tmpvar_19); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20.xyz; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_7.Normal = tmpvar_22; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_23, + in vec4 light_24 +) +{ + vec4 c_25; + float spec_26; + float tmpvar_27; + tmpvar_27 = (light_24.w * s_23.Gloss); + spec_26 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = ((s_23.Albedo * light_24.xyz) + ((light_24.xyz * _SpecColor.xyz) * spec_26)); + c_25.xyz = tmpvar_28.xyz.xyz; + float tmpvar_29; + tmpvar_29 = (s_23.Alpha + (spec_26 * _SpecColor.w)); + c_25.w = vec4(tmpvar_29).w; + return c_25; +} + +vec4 frag_surf ( + in v2f_surf IN_30 +) +{ + vec4 col_31; + vec4 light_32; + SurfaceOutput o_33; + Input surfIN_34; + vec2 tmpvar_35; + tmpvar_35 = IN_30.hip_pack0.xy; + surfIN_34.uv_MainTex = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = IN_30.hip_pack0.zw; + surfIN_34.uv_Illum = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = vec3(0.0, 0.0, 0.0); + o_33.Albedo = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_33.Emission = tmpvar_38; + float tmpvar_39; + tmpvar_39 = 0.0; + o_33.Specular = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_33.Alpha = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_33.Gloss = tmpvar_41; + surf (surfIN_34, o_33); + vec4 tmpvar_42; + tmpvar_42 = texture2DProj (_LightBuffer, IN_30.hip_screen); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + light_32 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = log2 (light_32); + vec4 tmpvar_45; + tmpvar_45 = -(tmpvar_44); + light_32 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = (light_32.xyz + unity_Ambient.xyz); + light_32.xyz = tmpvar_46.xyz.xyz; + vec4 tmpvar_47; + tmpvar_47 = LightingBlinnPhong_PrePass (o_33, light_32); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + col_31 = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = (col_31.xyz + o_33.Emission); + col_31.xyz = tmpvar_49.xyz.xyz; + return col_31; +} + +void main () +{ + v2f_surf xlt_IN_50; + vec4 xl_retval_51; + vec4 tmpvar_52; + tmpvar_52 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_50.pos = tmpvar_52; + float tmpvar_53; + tmpvar_53 = xlv_FOG.x; + xlt_IN_50.fog = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = gl_TexCoord[0].xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_50.hip_pack0 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = gl_TexCoord[1].xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_50.hip_screen = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = frag_surf (xlt_IN_50); + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xl_retval_51 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = xl_retval_51.xyzw; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + gl_FragData[0] = tmpvar_61; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-out.txt new file mode 100644 index 000000000..134a08458 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Bumped_Specular1-out.txt @@ -0,0 +1,35 @@ +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 col_2; + vec4 light_3; + vec2 tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, tmpvar_1.xy); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * _Color); + vec4 normal_7; + normal_7.xy = ((texture2D (_BumpMap, tmpvar_4).wy * 2.0) - 1.0); + normal_7.z = sqrt(((1.0 - (normal_7.x * normal_7.x)) - (normal_7.y * normal_7.y))); + vec4 tmpvar_8; + tmpvar_8 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_3.w = tmpvar_8.w; + light_3.xyz = (tmpvar_8.xyz + unity_Ambient.xyz); + vec4 c_9; + float tmpvar_10; + tmpvar_10 = (tmpvar_8.w * tmpvar_5.w); + c_9.xyz = ((tmpvar_6.xyz * light_3.xyz) + ((light_3.xyz * _SpecColor.xyz) * tmpvar_10)); + c_9.w = (tmpvar_6.w + (tmpvar_10 * _SpecColor.w)); + col_2.w = c_9.w; + col_2.xyz = (c_9.xyz + (tmpvar_6.xyz * texture2D (_Illum, tmpvar_1.zw).w)); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-ir.txt new file mode 100644 index 000000000..763753b73 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-ir.txt @@ -0,0 +1,166 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tex_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = (tex_4 * _Color); + c_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = c_3.xyz; + o_2.Albedo = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_Illum, IN_1.uv_Illum); + vec3 tmpvar_10; + tmpvar_10 = (c_3.xyz * tmpvar_9.w); + o_2.Emission = tmpvar_10; + float tmpvar_11; + tmpvar_11 = c_3.w; + o_2.Alpha = tmpvar_11; +} + +vec4 LightingLambert ( + in SurfaceOutput s_12, + in vec3 lightDir_13, + in float atten_14 +) +{ + vec4 c_15; + float diff_16; + float tmpvar_17; + tmpvar_17 = dot (s_12.Normal, lightDir_13); + float tmpvar_18; + tmpvar_18 = max (0.0, tmpvar_17); + float tmpvar_19; + tmpvar_19 = tmpvar_18; + diff_16 = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = ((s_12.Albedo * _LightColor0.xyz) * ((diff_16 * atten_14) * 2.0)); + c_15.xyz = tmpvar_20.xyz.xyz; + float tmpvar_21; + tmpvar_21 = s_12.Alpha; + c_15.w = vec4(tmpvar_21).w; + return c_15; +} + +vec4 frag_surf ( + in v2f_surf IN_22 +) +{ + vec4 c_23; + vec3 lightDir_24; + SurfaceOutput o_25; + Input surfIN_26; + vec2 tmpvar_27; + tmpvar_27 = IN_22.hip_pack0.xy; + surfIN_26.uv_MainTex = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_25.Albedo = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = vec3(0.0, 0.0, 0.0); + o_25.Emission = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_25.Specular = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_25.Alpha = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_25.Gloss = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = IN_22.normal; + o_25.Normal = tmpvar_33; + surf (surfIN_26, o_25); + vec3 tmpvar_34; + tmpvar_34 = IN_22.lightDir; + lightDir_24 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = texture2D (_LightTexture0, IN_22._LightCoord); + vec4 tmpvar_36; + tmpvar_36 = LightingLambert (o_25, lightDir_24, (tmpvar_35.w * 1.0)); + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + c_23 = tmpvar_37; + float tmpvar_38; + tmpvar_38 = 0.0; + c_23.w = vec4(tmpvar_38).w; + return c_23; +} + +void main () +{ + v2f_surf xlt_IN_39; + vec4 xl_retval_40; + vec4 tmpvar_41; + tmpvar_41 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_39.pos = tmpvar_41; + float tmpvar_42; + tmpvar_42 = xlv_FOG.x; + xlt_IN_39.fog = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43 = gl_TexCoord[0].xy; + vec2 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_39.hip_pack0 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_TexCoord[1].xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_39.normal = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[2].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_39.lightDir = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = gl_TexCoord[3].xy; + vec2 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_39._LightCoord = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = frag_surf (xlt_IN_39); + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_40 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_40.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_FragData[0] = tmpvar_54; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-out.txt new file mode 100644 index 000000000..68e3f5404 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse-out.txt @@ -0,0 +1,17 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec4 c_1; + vec4 tmpvar_2; + tmpvar_2 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 c_3; + c_3.xyz = ((tmpvar_2.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_3.w = tmpvar_2.w; + c_1.xyz = c_3.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-ir.txt new file mode 100644 index 000000000..ab6a3a561 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-ir.txt @@ -0,0 +1,298 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec4 c_35; + vec4 tex_36; + vec4 tmpvar_37; + tmpvar_37 = texture2D (_MainTex, IN_33.uv_MainTex); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + tex_36 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (tex_36 * _Color); + c_35 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = c_35.xyz; + o_34.Albedo = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_Illum, IN_33.uv_Illum); + vec3 tmpvar_42; + tmpvar_42 = (c_35.xyz * tmpvar_41.w); + o_34.Emission = tmpvar_42; + float tmpvar_43; + tmpvar_43 = c_35.w; + o_34.Alpha = tmpvar_43; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_44, + in vec4 light_45 +) +{ + vec4 c_46; + vec3 tmpvar_47; + tmpvar_47 = (s_44.Albedo * light_45.xyz); + c_46.xyz = tmpvar_47.xyz.xyz; + float tmpvar_48; + tmpvar_48 = s_44.Alpha; + c_46.w = vec4(tmpvar_48).w; + return c_46; +} + +vec3 DecodeLightmap ( + in vec4 color_49 +) +{ + return (2.0 * color_49.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_50 +) +{ + vec4 col_51; + vec3 lm_52; + vec3 lmIndirect_53; + vec3 lmFull_54; + vec4 light_55; + SurfaceOutput o_56; + Input surfIN_57; + vec2 tmpvar_58; + tmpvar_58 = IN_50.hip_pack0.xy; + surfIN_57.uv_MainTex = tmpvar_58; + vec2 tmpvar_59; + tmpvar_59 = IN_50.hip_pack0.zw; + surfIN_57.uv_Illum = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = vec3(0.0, 0.0, 0.0); + o_56.Albedo = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_56.Emission = tmpvar_61; + float tmpvar_62; + tmpvar_62 = 0.0; + o_56.Specular = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_56.Alpha = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_56.Gloss = tmpvar_64; + surf (surfIN_57, o_56); + vec4 tmpvar_65; + tmpvar_65 = texture2DProj (_LightBuffer, IN_50.hip_screen); + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + light_55 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = log2 (light_55); + vec4 tmpvar_68; + tmpvar_68 = -(tmpvar_67); + light_55 = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = texture2D (unity_Lightmap, IN_50.hip_lmapFade.xy); + vec3 tmpvar_70; + tmpvar_70 = DecodeLightmap (tmpvar_69); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + lmFull_54 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = texture2D (unity_LightmapInd, IN_50.hip_lmapFade.xy); + vec3 tmpvar_73; + tmpvar_73 = DecodeLightmap (tmpvar_72); + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + lmIndirect_53 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = xll_saturate (IN_50.hip_lmapFade.z); + vec3 tmpvar_76; + tmpvar_76 = vec3(tmpvar_75); + vec3 tmpvar_77; + tmpvar_77 = mix (lmIndirect_53, lmFull_54, tmpvar_76); + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + lm_52 = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = (light_55.xyz + lm_52); + light_55.xyz = tmpvar_79.xyz.xyz; + vec4 tmpvar_80; + tmpvar_80 = LightingLambert_PrePass (o_56, light_55); + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + col_51 = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = (col_51.xyz + o_56.Emission); + col_51.xyz = tmpvar_82.xyz.xyz; + return col_51; +} + +void main () +{ + v2f_surf xlt_IN_83; + vec4 xl_retval_84; + vec4 tmpvar_85; + tmpvar_85 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_83.pos = tmpvar_85; + float tmpvar_86; + tmpvar_86 = xlv_FOG.x; + xlt_IN_83.fog = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = gl_TexCoord[0].xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + xlt_IN_83.hip_pack0 = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = gl_TexCoord[1].xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + xlt_IN_83.hip_screen = tmpvar_90; + vec3 tmpvar_91; + tmpvar_91 = gl_TexCoord[2].xyz; + vec3 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlt_IN_83.hip_lmapFade = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93 = frag_surf (xlt_IN_83); + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + xl_retval_84 = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95 = xl_retval_84.xyzw; + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + gl_FragData[0] = tmpvar_96; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-out.txt new file mode 100644 index 000000000..2b064475d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Diffuse1-out.txt @@ -0,0 +1,28 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 col_3; + vec4 light_4; + vec4 tmpvar_5; + tmpvar_5 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); + vec4 tmpvar_6; + tmpvar_6 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_4.w = tmpvar_6.w; + light_4.xyz = (tmpvar_6.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); + vec4 c_7; + c_7.xyz = (tmpvar_5.xyz * light_4.xyz); + c_7.w = tmpvar_5.w; + col_3.w = c_7.w; + col_3.xyz = (c_7.xyz + (tmpvar_5.xyz * texture2D (_Illum, tmpvar_1.zw).w)); + gl_FragData[0] = col_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-ir.txt new file mode 100644 index 000000000..0bac53241 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-ir.txt @@ -0,0 +1,269 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv_Illum; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 c_16; + vec2 offset_17; + float h_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_20; + tmpvar_20 = tmpvar_19.w; + h_18 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ParallaxOffset (h_18, _Parallax, IN_14.viewDir); + vec2 tmpvar_22; + tmpvar_22 = tmpvar_21; + offset_17 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = (IN_14.uv_MainTex + offset_17); + IN_14.uv_MainTex = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_BumpMap + offset_17); + IN_14.uv_BumpMap = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_Illum + offset_17); + IN_14.uv_Illum = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_27; + tmpvar_27 = (tmpvar_26 * _Color); + c_16 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = c_16.xyz; + o_15.Albedo = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_Illum, IN_14.uv_Illum); + vec3 tmpvar_30; + tmpvar_30 = (c_16.xyz * tmpvar_29.w); + o_15.Emission = tmpvar_30; + float tmpvar_31; + tmpvar_31 = c_16.w; + o_15.Alpha = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; +} + +float UnitySpotCookie ( + in vec4 LightCoord_36 +) +{ + vec4 tmpvar_37; + tmpvar_37 = texture2D (_LightTexture0, ((LightCoord_36.xy / LightCoord_36.w) + 0.5)); + return tmpvar_37.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_38 +) +{ + float tmpvar_39; + tmpvar_39 = dot (LightCoord_38, LightCoord_38); + vec2 tmpvar_40; + tmpvar_40 = vec2(tmpvar_39); + vec2 tmpvar_41; + tmpvar_41 = tmpvar_40.xy; + vec4 tmpvar_42; + tmpvar_42 = texture2D (_LightTextureB0, tmpvar_41); + return tmpvar_42.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_43, + in vec3 lightDir_44, + in float atten_45 +) +{ + vec4 c_46; + float diff_47; + float tmpvar_48; + tmpvar_48 = dot (s_43.Normal, lightDir_44); + float tmpvar_49; + tmpvar_49 = max (0.0, tmpvar_48); + float tmpvar_50; + tmpvar_50 = tmpvar_49; + diff_47 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = ((s_43.Albedo * _LightColor0.xyz) * ((diff_47 * atten_45) * 2.0)); + c_46.xyz = tmpvar_51.xyz.xyz; + float tmpvar_52; + tmpvar_52 = s_43.Alpha; + c_46.w = vec4(tmpvar_52).w; + return c_46; +} + +vec4 frag_surf ( + in v2f_surf IN_53 +) +{ + vec4 c_54; + vec3 lightDir_55; + SurfaceOutput o_56; + Input surfIN_57; + vec2 tmpvar_58; + tmpvar_58 = IN_53.hip_pack0.xy; + surfIN_57.uv_MainTex = tmpvar_58; + vec2 tmpvar_59; + tmpvar_59 = IN_53.hip_pack0.zw; + surfIN_57.uv_BumpMap = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = IN_53.viewDir; + surfIN_57.viewDir = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_56.Albedo = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = vec3(0.0, 0.0, 0.0); + o_56.Emission = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_56.Specular = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_56.Alpha = tmpvar_64; + float tmpvar_65; + tmpvar_65 = 0.0; + o_56.Gloss = tmpvar_65; + surf (surfIN_57, o_56); + vec3 tmpvar_66; + tmpvar_66 = IN_53.lightDir; + lightDir_55 = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = normalize (lightDir_55); + vec3 tmpvar_68; + tmpvar_68 = tmpvar_67; + lightDir_55 = tmpvar_68; + float tmpvar_69; + tmpvar_69 = UnitySpotCookie (IN_53._LightCoord); + float tmpvar_70; + tmpvar_70 = UnitySpotAttenuate (IN_53._LightCoord.xyz); + vec4 tmpvar_71; + tmpvar_71 = LightingLambert (o_56, lightDir_55, ((float((IN_53._LightCoord.z > 0.0)) * tmpvar_69) * tmpvar_70)); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + c_54 = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + c_54.w = vec4(tmpvar_73).w; + return c_54; +} + +void main () +{ + v2f_surf xlt_IN_74; + vec4 xl_retval_75; + vec4 tmpvar_76; + tmpvar_76 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_74.pos = tmpvar_76; + float tmpvar_77; + tmpvar_77 = xlv_FOG.x; + xlt_IN_74.fog = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = gl_TexCoord[0].xyzw; + vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + xlt_IN_74.hip_pack0 = tmpvar_79; + vec3 tmpvar_80; + tmpvar_80 = gl_TexCoord[1].xyz; + vec3 tmpvar_81; + tmpvar_81 = tmpvar_80; + xlt_IN_74.viewDir = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = gl_TexCoord[2].xyz; + vec3 tmpvar_83; + tmpvar_83 = tmpvar_82; + xlt_IN_74.lightDir = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = gl_TexCoord[3].xyzw; + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + xlt_IN_74._LightCoord = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86 = frag_surf (xlt_IN_74); + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + xl_retval_75 = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = xl_retval_75.xyzw; + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + gl_FragData[0] = tmpvar_89; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-out.txt new file mode 100644 index 000000000..e6aa95594 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse-out.txt @@ -0,0 +1,35 @@ +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[3]; + vec4 c_3; + vec2 tmpvar_4; + vec3 v_5; + vec3 tmpvar_6; + tmpvar_6 = normalize(gl_TexCoord[1].xyz); + v_5.xy = tmpvar_6.xy; + v_5.z = (tmpvar_6.z + 0.42); + tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_6.xy / v_5.z)); + vec4 tmpvar_7; + tmpvar_7 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)) * _Color); + vec4 normal_8; + normal_8.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); + normal_8.z = sqrt(((1.0 - (normal_8.x * normal_8.x)) - (normal_8.y * normal_8.y))); + vec4 c_9; + c_9.xyz = ((tmpvar_7.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_8.xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_9.w = tmpvar_7.w; + c_3.xyz = c_9.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-ir.txt new file mode 100644 index 000000000..00bf68d8f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-ir.txt @@ -0,0 +1,237 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv_Illum; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 c_16; + vec2 offset_17; + float h_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_20; + tmpvar_20 = tmpvar_19.w; + h_18 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ParallaxOffset (h_18, _Parallax, IN_14.viewDir); + vec2 tmpvar_22; + tmpvar_22 = tmpvar_21; + offset_17 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = (IN_14.uv_MainTex + offset_17); + IN_14.uv_MainTex = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_BumpMap + offset_17); + IN_14.uv_BumpMap = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_Illum + offset_17); + IN_14.uv_Illum = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_27; + tmpvar_27 = (tmpvar_26 * _Color); + c_16 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = c_16.xyz; + o_15.Albedo = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_Illum, IN_14.uv_Illum); + vec3 tmpvar_30; + tmpvar_30 = (c_16.xyz * tmpvar_29.w); + o_15.Emission = tmpvar_30; + float tmpvar_31; + tmpvar_31 = c_16.w; + o_15.Alpha = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; +} + +vec4 LightingLambert ( + in SurfaceOutput s_36, + in vec3 lightDir_37, + in float atten_38 +) +{ + vec4 c_39; + float diff_40; + float tmpvar_41; + tmpvar_41 = dot (s_36.Normal, lightDir_37); + float tmpvar_42; + tmpvar_42 = max (0.0, tmpvar_41); + float tmpvar_43; + tmpvar_43 = tmpvar_42; + diff_40 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = ((s_36.Albedo * _LightColor0.xyz) * ((diff_40 * atten_38) * 2.0)); + c_39.xyz = tmpvar_44.xyz.xyz; + float tmpvar_45; + tmpvar_45 = s_36.Alpha; + c_39.w = vec4(tmpvar_45).w; + return c_39; +} + +vec4 frag_surf ( + in v2f_surf IN_46 +) +{ + vec4 c_47; + vec3 lightDir_48; + SurfaceOutput o_49; + Input surfIN_50; + vec2 tmpvar_51; + tmpvar_51 = IN_46.hip_pack0.xy; + surfIN_50.uv_MainTex = tmpvar_51; + vec2 tmpvar_52; + tmpvar_52 = IN_46.hip_pack0.zw; + surfIN_50.uv_BumpMap = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = IN_46.viewDir; + surfIN_50.viewDir = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = vec3(0.0, 0.0, 0.0); + o_49.Albedo = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = vec3(0.0, 0.0, 0.0); + o_49.Emission = tmpvar_55; + float tmpvar_56; + tmpvar_56 = 0.0; + o_49.Specular = tmpvar_56; + float tmpvar_57; + tmpvar_57 = 0.0; + o_49.Alpha = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_49.Gloss = tmpvar_58; + surf (surfIN_50, o_49); + vec3 tmpvar_59; + tmpvar_59 = IN_46.lightDir; + lightDir_48 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = texture2D (_LightTexture0, IN_46._LightCoord); + vec4 tmpvar_61; + tmpvar_61 = LightingLambert (o_49, lightDir_48, (tmpvar_60.w * 1.0)); + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + c_47 = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + c_47.w = vec4(tmpvar_63).w; + return c_47; +} + +void main () +{ + v2f_surf xlt_IN_64; + vec4 xl_retval_65; + vec4 tmpvar_66; + tmpvar_66 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_64.pos = tmpvar_66; + float tmpvar_67; + tmpvar_67 = xlv_FOG.x; + xlt_IN_64.fog = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = gl_TexCoord[0].xyzw; + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + xlt_IN_64.hip_pack0 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = gl_TexCoord[1].xyz; + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + xlt_IN_64.viewDir = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = gl_TexCoord[2].xyz; + vec3 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlt_IN_64.lightDir = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = gl_TexCoord[3].xy; + vec2 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_64._LightCoord = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = frag_surf (xlt_IN_64); + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + xl_retval_65 = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = xl_retval_65.xyzw; + vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + gl_FragData[0] = tmpvar_79; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-out.txt new file mode 100644 index 000000000..83fadc6c3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse1-out.txt @@ -0,0 +1,32 @@ +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec2 tmpvar_3; + vec3 v_4; + vec3 tmpvar_5; + tmpvar_5 = normalize(gl_TexCoord[1].xyz); + v_4.xy = tmpvar_5.xy; + v_4.z = (tmpvar_5.z + 0.42); + tmpvar_3 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_5.xy / v_4.z)); + vec4 tmpvar_6; + tmpvar_6 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_3)) * _Color); + vec4 normal_7; + normal_7.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_3)).wy * 2.0) - 1.0); + normal_7.z = sqrt(((1.0 - (normal_7.x * normal_7.x)) - (normal_7.y * normal_7.y))); + vec4 c_8; + c_8.xyz = ((tmpvar_6.xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_7.xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_8.w = tmpvar_6.w; + c_2.xyz = c_8.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-ir.txt new file mode 100644 index 000000000..1c22fbf35 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-ir.txt @@ -0,0 +1,239 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv_Illum; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec2 hip_pack1; + vec3 viewDir; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 c_16; + vec2 offset_17; + float h_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_20; + tmpvar_20 = tmpvar_19.w; + h_18 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ParallaxOffset (h_18, _Parallax, IN_14.viewDir); + vec2 tmpvar_22; + tmpvar_22 = tmpvar_21; + offset_17 = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = (IN_14.uv_MainTex + offset_17); + IN_14.uv_MainTex = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_BumpMap + offset_17); + IN_14.uv_BumpMap = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_Illum + offset_17); + IN_14.uv_Illum = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_27; + tmpvar_27 = (tmpvar_26 * _Color); + c_16 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = c_16.xyz; + o_15.Albedo = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_Illum, IN_14.uv_Illum); + vec3 tmpvar_30; + tmpvar_30 = (c_16.xyz * tmpvar_29.w); + o_15.Emission = tmpvar_30; + float tmpvar_31; + tmpvar_31 = c_16.w; + o_15.Alpha = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_33; + tmpvar_33 = UnpackNormal (tmpvar_32); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + o_15.Normal = tmpvar_35; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_36, + in vec4 light_37 +) +{ + vec4 c_38; + vec3 tmpvar_39; + tmpvar_39 = (s_36.Albedo * light_37.xyz); + c_38.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = s_36.Alpha; + c_38.w = vec4(tmpvar_40).w; + return c_38; +} + +vec4 frag_surf ( + in v2f_surf IN_41 +) +{ + vec4 col_42; + vec4 light_43; + SurfaceOutput o_44; + Input surfIN_45; + vec2 tmpvar_46; + tmpvar_46 = IN_41.hip_pack0.xy; + surfIN_45.uv_MainTex = tmpvar_46; + vec2 tmpvar_47; + tmpvar_47 = IN_41.hip_pack0.zw; + surfIN_45.uv_BumpMap = tmpvar_47; + vec2 tmpvar_48; + tmpvar_48 = IN_41.hip_pack1.xy; + surfIN_45.uv_Illum = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = IN_41.viewDir; + surfIN_45.viewDir = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = vec3(0.0, 0.0, 0.0); + o_44.Albedo = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + o_44.Emission = tmpvar_51; + float tmpvar_52; + tmpvar_52 = 0.0; + o_44.Specular = tmpvar_52; + float tmpvar_53; + tmpvar_53 = 0.0; + o_44.Alpha = tmpvar_53; + float tmpvar_54; + tmpvar_54 = 0.0; + o_44.Gloss = tmpvar_54; + surf (surfIN_45, o_44); + vec4 tmpvar_55; + tmpvar_55 = texture2DProj (_LightBuffer, IN_41.hip_screen); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + light_43 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = log2 (light_43); + vec4 tmpvar_58; + tmpvar_58 = -(tmpvar_57); + light_43 = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = (light_43.xyz + unity_Ambient.xyz); + light_43.xyz = tmpvar_59.xyz.xyz; + vec4 tmpvar_60; + tmpvar_60 = LightingLambert_PrePass (o_44, light_43); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + col_42 = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = (col_42.xyz + o_44.Emission); + col_42.xyz = tmpvar_62.xyz.xyz; + return col_42; +} + +void main () +{ + v2f_surf xlt_IN_63; + vec4 xl_retval_64; + vec4 tmpvar_65; + tmpvar_65 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_63.pos = tmpvar_65; + float tmpvar_66; + tmpvar_66 = xlv_FOG.x; + xlt_IN_63.fog = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = gl_TexCoord[0].xyzw; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_IN_63.hip_pack0 = tmpvar_68; + vec2 tmpvar_69; + tmpvar_69 = gl_TexCoord[1].xy; + vec2 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_63.hip_pack1 = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = gl_TexCoord[2].xyz; + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_IN_63.viewDir = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = gl_TexCoord[3].xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_IN_63.hip_screen = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = frag_surf (xlt_IN_63); + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xl_retval_64 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = xl_retval_64.xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + gl_FragData[0] = tmpvar_78; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-out.txt new file mode 100644 index 000000000..a5fab61ae --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Diffuse2-out.txt @@ -0,0 +1,38 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 col_2; + vec4 light_3; + vec2 tmpvar_4; + vec3 v_5; + vec3 tmpvar_6; + tmpvar_6 = normalize(gl_TexCoord[2].xyz); + v_5.xy = tmpvar_6.xy; + v_5.z = (tmpvar_6.z + 0.42); + tmpvar_4 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_6.xy / v_5.z)); + vec4 tmpvar_7; + tmpvar_7 = (texture2D (_MainTex, (tmpvar_1.xy + tmpvar_4)) * _Color); + vec4 normal_8; + normal_8.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_4)).wy * 2.0) - 1.0); + normal_8.z = sqrt(((1.0 - (normal_8.x * normal_8.x)) - (normal_8.y * normal_8.y))); + vec4 tmpvar_9; + tmpvar_9 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[3]))); + light_3.w = tmpvar_9.w; + light_3.xyz = (tmpvar_9.xyz + unity_Ambient.xyz); + vec4 c_10; + c_10.xyz = (tmpvar_7.xyz * light_3.xyz); + c_10.w = tmpvar_7.w; + col_2.w = c_10.w; + col_2.xyz = (c_10.xyz + (tmpvar_7.xyz * texture2D (_Illum, (gl_TexCoord[1].xy + tmpvar_4)).w)); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-ir.txt new file mode 100644 index 000000000..65a6ef632 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-ir.txt @@ -0,0 +1,285 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv_Illum; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 c_16; + vec4 tex_17; + vec2 offset_18; + float h_19; + vec4 tmpvar_20; + tmpvar_20 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_21; + tmpvar_21 = tmpvar_20.w; + h_19 = tmpvar_21; + vec2 tmpvar_22; + tmpvar_22 = ParallaxOffset (h_19, _Parallax, IN_14.viewDir); + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + offset_18 = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_MainTex + offset_18); + IN_14.uv_MainTex = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_BumpMap + offset_18); + IN_14.uv_BumpMap = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = (IN_14.uv_Illum + offset_18); + IN_14.uv_Illum = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + tex_17 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = (tex_17 * _Color); + c_16 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = c_16.xyz; + o_15.Albedo = tmpvar_30; + float tmpvar_31; + tmpvar_31 = tex_17.w; + o_15.Gloss = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_Illum, IN_14.uv_Illum); + vec3 tmpvar_33; + tmpvar_33 = (c_16.xyz * tmpvar_32.w); + o_15.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = _Shininess; + o_15.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = c_16.w; + o_15.Alpha = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_37; + tmpvar_37 = UnpackNormal (tmpvar_36); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37.xyz; + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + o_15.Normal = tmpvar_39; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_40, + in vec3 lightDir_41, + in vec3 viewDir_42, + in float atten_43 +) +{ + vec4 c_44; + float spec_45; + float nh_46; + float diff_47; + vec3 h_48; + vec3 tmpvar_49; + tmpvar_49 = normalize ((lightDir_41 + viewDir_42)); + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + h_48 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = dot (s_40.Normal, lightDir_41); + float tmpvar_52; + tmpvar_52 = max (0.0, tmpvar_51); + float tmpvar_53; + tmpvar_53 = tmpvar_52; + diff_47 = tmpvar_53; + float tmpvar_54; + tmpvar_54 = dot (s_40.Normal, h_48); + float tmpvar_55; + tmpvar_55 = max (0.0, tmpvar_54); + float tmpvar_56; + tmpvar_56 = tmpvar_55; + nh_46 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = pow (nh_46, (s_40.Specular * 128.0)); + float tmpvar_58; + tmpvar_58 = (tmpvar_57 * s_40.Gloss); + spec_45 = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = ((((s_40.Albedo * _LightColor0.xyz) * diff_47) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_45)) * (atten_43 * 2.0)); + c_44.xyz = tmpvar_59.xyz.xyz; + float tmpvar_60; + tmpvar_60 = (s_40.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_45) * atten_43)); + c_44.w = vec4(tmpvar_60).w; + return c_44; +} + +vec4 frag_surf ( + in v2f_surf IN_61 +) +{ + vec4 c_62; + vec3 lightDir_63; + SurfaceOutput o_64; + Input surfIN_65; + vec2 tmpvar_66; + tmpvar_66 = IN_61.hip_pack0.xy; + surfIN_65.uv_MainTex = tmpvar_66; + vec2 tmpvar_67; + tmpvar_67 = IN_61.hip_pack0.zw; + surfIN_65.uv_BumpMap = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = IN_61.viewDir; + surfIN_65.viewDir = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = vec3(0.0, 0.0, 0.0); + o_64.Albedo = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = vec3(0.0, 0.0, 0.0); + o_64.Emission = tmpvar_70; + float tmpvar_71; + tmpvar_71 = 0.0; + o_64.Specular = tmpvar_71; + float tmpvar_72; + tmpvar_72 = 0.0; + o_64.Alpha = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + o_64.Gloss = tmpvar_73; + surf (surfIN_65, o_64); + vec3 tmpvar_74; + tmpvar_74 = IN_61.lightDir; + lightDir_63 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = normalize (lightDir_63); + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75; + lightDir_63 = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = IN_61.viewDir.xyz; + vec3 tmpvar_78; + tmpvar_78 = normalize (tmpvar_77); + float tmpvar_79; + tmpvar_79 = dot (IN_61._LightCoord, IN_61._LightCoord); + vec2 tmpvar_80; + tmpvar_80 = vec2(tmpvar_79); + vec2 tmpvar_81; + tmpvar_81 = tmpvar_80.xy; + vec4 tmpvar_82; + tmpvar_82 = texture2D (_LightTexture0, tmpvar_81); + vec4 tmpvar_83; + tmpvar_83 = LightingBlinnPhong (o_64, lightDir_63, tmpvar_78, tmpvar_82.w); + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + c_62 = tmpvar_84; + float tmpvar_85; + tmpvar_85 = 0.0; + c_62.w = vec4(tmpvar_85).w; + return c_62; +} + +void main () +{ + v2f_surf xlt_IN_86; + vec4 xl_retval_87; + vec4 tmpvar_88; + tmpvar_88 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_86.pos = tmpvar_88; + float tmpvar_89; + tmpvar_89 = xlv_FOG.x; + xlt_IN_86.fog = tmpvar_89; + vec4 tmpvar_90; + tmpvar_90 = gl_TexCoord[0].xyzw; + vec4 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_86.hip_pack0 = tmpvar_91; + vec3 tmpvar_92; + tmpvar_92 = gl_TexCoord[1].xyz; + vec3 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_86.viewDir = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = gl_TexCoord[2].xyz; + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_86.lightDir = tmpvar_95; + vec3 tmpvar_96; + tmpvar_96 = gl_TexCoord[3].xyz; + vec3 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_86._LightCoord = tmpvar_97; + vec4 tmpvar_98; + tmpvar_98 = frag_surf (xlt_IN_86); + vec4 tmpvar_99; + tmpvar_99 = tmpvar_98; + xl_retval_87 = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = xl_retval_87.xyzw; + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + gl_FragData[0] = tmpvar_101; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-out.txt new file mode 100644 index 000000000..50e6b81d2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular-out.txt @@ -0,0 +1,46 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec3 tmpvar_3; + tmpvar_3 = gl_TexCoord[3].xyz; + vec4 c_4; + vec2 tmpvar_5; + vec3 v_6; + vec3 tmpvar_7; + tmpvar_7 = normalize(tmpvar_2); + v_6.xy = tmpvar_7.xy; + v_6.z = (tmpvar_7.z + 0.42); + tmpvar_5 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_7.xy / v_6.z)); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_5)); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_8 * _Color); + vec4 normal_10; + normal_10.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_5)).wy * 2.0) - 1.0); + normal_10.z = sqrt(((1.0 - (normal_10.x * normal_10.x)) - (normal_10.y * normal_10.y))); + vec3 tmpvar_11; + tmpvar_11 = normalize(gl_TexCoord[2].xyz); + vec4 tmpvar_12; + tmpvar_12 = texture2D (_LightTexture0, vec2(dot (tmpvar_3, tmpvar_3))); + vec4 c_13; + float tmpvar_14; + tmpvar_14 = (pow (max (0.0, dot (normal_10.xyz, normalize((tmpvar_11 + normalize(tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_8.w); + c_13.xyz = ((((tmpvar_9.xyz * _LightColor0.xyz) * max (0.0, dot (normal_10.xyz, tmpvar_11))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_14)) * (tmpvar_12.w * 2.0)); + c_13.w = (tmpvar_9.w + (((_LightColor0.w * _SpecColor.w) * tmpvar_14) * tmpvar_12.w)); + c_4.xyz = c_13.xyz; + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Parallax_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-ir.txt new file mode 100644 index 000000000..9e2df18cd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-ir.txt @@ -0,0 +1,288 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; + vec2 uv_Illum; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +vec2 ParallaxOffset ( + in float h_6, + in float height_7, + in vec3 viewDir_8 +) +{ + vec3 v_9; + float tmpvar_10; + tmpvar_10 = ((h_6 * height_7) - (height_7 / 2.0)); + h_6 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = normalize (viewDir_8); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + v_9 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (v_9.z + 0.42); + v_9.z = vec3(tmpvar_13).z; + return (h_6 * (v_9.xy / v_9.z)); +} + +void surf ( + in Input IN_14, + inout SurfaceOutput o_15 +) +{ + vec4 c_16; + vec4 tex_17; + vec2 offset_18; + float h_19; + vec4 tmpvar_20; + tmpvar_20 = texture2D (_ParallaxMap, IN_14.uv_BumpMap); + float tmpvar_21; + tmpvar_21 = tmpvar_20.w; + h_19 = tmpvar_21; + vec2 tmpvar_22; + tmpvar_22 = ParallaxOffset (h_19, _Parallax, IN_14.viewDir); + vec2 tmpvar_23; + tmpvar_23 = tmpvar_22; + offset_18 = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (IN_14.uv_MainTex + offset_18); + IN_14.uv_MainTex = tmpvar_24; + vec2 tmpvar_25; + tmpvar_25 = (IN_14.uv_BumpMap + offset_18); + IN_14.uv_BumpMap = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = (IN_14.uv_Illum + offset_18); + IN_14.uv_Illum = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_MainTex, IN_14.uv_MainTex); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + tex_17 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = (tex_17 * _Color); + c_16 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = c_16.xyz; + o_15.Albedo = tmpvar_30; + float tmpvar_31; + tmpvar_31 = tex_17.w; + o_15.Gloss = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_Illum, IN_14.uv_Illum); + vec3 tmpvar_33; + tmpvar_33 = (c_16.xyz * tmpvar_32.w); + o_15.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = _Shininess; + o_15.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = c_16.w; + o_15.Alpha = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_BumpMap, IN_14.uv_BumpMap); + vec4 tmpvar_37; + tmpvar_37 = UnpackNormal (tmpvar_36); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37.xyz; + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + o_15.Normal = tmpvar_39; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_40, + in vec3 lightDir_41, + in vec3 viewDir_42, + in float atten_43 +) +{ + vec4 c_44; + float spec_45; + float nh_46; + float diff_47; + vec3 h_48; + vec3 tmpvar_49; + tmpvar_49 = normalize ((lightDir_41 + viewDir_42)); + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + h_48 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = dot (s_40.Normal, lightDir_41); + float tmpvar_52; + tmpvar_52 = max (0.0, tmpvar_51); + float tmpvar_53; + tmpvar_53 = tmpvar_52; + diff_47 = tmpvar_53; + float tmpvar_54; + tmpvar_54 = dot (s_40.Normal, h_48); + float tmpvar_55; + tmpvar_55 = max (0.0, tmpvar_54); + float tmpvar_56; + tmpvar_56 = tmpvar_55; + nh_46 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = pow (nh_46, (s_40.Specular * 128.0)); + float tmpvar_58; + tmpvar_58 = (tmpvar_57 * s_40.Gloss); + spec_45 = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = ((((s_40.Albedo * _LightColor0.xyz) * diff_47) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_45)) * (atten_43 * 2.0)); + c_44.xyz = tmpvar_59.xyz.xyz; + float tmpvar_60; + tmpvar_60 = (s_40.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_45) * atten_43)); + c_44.w = vec4(tmpvar_60).w; + return c_44; +} + +vec4 frag_surf ( + in v2f_surf IN_61 +) +{ + vec4 c_62; + vec3 lightDir_63; + SurfaceOutput o_64; + Input surfIN_65; + vec2 tmpvar_66; + tmpvar_66 = IN_61.hip_pack0.xy; + surfIN_65.uv_MainTex = tmpvar_66; + vec2 tmpvar_67; + tmpvar_67 = IN_61.hip_pack0.zw; + surfIN_65.uv_BumpMap = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = IN_61.viewDir; + surfIN_65.viewDir = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = vec3(0.0, 0.0, 0.0); + o_64.Albedo = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = vec3(0.0, 0.0, 0.0); + o_64.Emission = tmpvar_70; + float tmpvar_71; + tmpvar_71 = 0.0; + o_64.Specular = tmpvar_71; + float tmpvar_72; + tmpvar_72 = 0.0; + o_64.Alpha = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + o_64.Gloss = tmpvar_73; + surf (surfIN_65, o_64); + vec3 tmpvar_74; + tmpvar_74 = IN_61.lightDir; + lightDir_63 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = normalize (lightDir_63); + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75; + lightDir_63 = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = IN_61.viewDir.xyz; + vec3 tmpvar_78; + tmpvar_78 = normalize (tmpvar_77); + float tmpvar_79; + tmpvar_79 = dot (IN_61._LightCoord, IN_61._LightCoord); + vec2 tmpvar_80; + tmpvar_80 = vec2(tmpvar_79); + vec2 tmpvar_81; + tmpvar_81 = tmpvar_80.xy; + vec4 tmpvar_82; + tmpvar_82 = texture2D (_LightTextureB0, tmpvar_81); + vec4 tmpvar_83; + tmpvar_83 = textureCube (_LightTexture0, IN_61._LightCoord); + vec4 tmpvar_84; + tmpvar_84 = LightingBlinnPhong (o_64, lightDir_63, tmpvar_78, (tmpvar_82.w * tmpvar_83.w)); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + c_62 = tmpvar_85; + float tmpvar_86; + tmpvar_86 = 0.0; + c_62.w = vec4(tmpvar_86).w; + return c_62; +} + +void main () +{ + v2f_surf xlt_IN_87; + vec4 xl_retval_88; + vec4 tmpvar_89; + tmpvar_89 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_87.pos = tmpvar_89; + float tmpvar_90; + tmpvar_90 = xlv_FOG.x; + xlt_IN_87.fog = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = gl_TexCoord[0].xyzw; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlt_IN_87.hip_pack0 = tmpvar_92; + vec3 tmpvar_93; + tmpvar_93 = gl_TexCoord[1].xyz; + vec3 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlt_IN_87.viewDir = tmpvar_94; + vec3 tmpvar_95; + tmpvar_95 = gl_TexCoord[2].xyz; + vec3 tmpvar_96; + tmpvar_96 = tmpvar_95; + xlt_IN_87.lightDir = tmpvar_96; + vec3 tmpvar_97; + tmpvar_97 = gl_TexCoord[3].xyz; + vec3 tmpvar_98; + tmpvar_98 = tmpvar_97; + xlt_IN_87._LightCoord = tmpvar_98; + vec4 tmpvar_99; + tmpvar_99 = frag_surf (xlt_IN_87); + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + xl_retval_88 = tmpvar_100; + vec4 tmpvar_101; + tmpvar_101 = xl_retval_88.xyzw; + vec4 tmpvar_102; + tmpvar_102 = tmpvar_101; + gl_FragData[0] = tmpvar_102; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-out.txt new file mode 100644 index 000000000..971ed211a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Parallax_Specular1-out.txt @@ -0,0 +1,47 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _ParallaxMap; +uniform float _Parallax; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec3 tmpvar_3; + tmpvar_3 = gl_TexCoord[3].xyz; + vec4 c_4; + vec2 tmpvar_5; + vec3 v_6; + vec3 tmpvar_7; + tmpvar_7 = normalize(tmpvar_2); + v_6.xy = tmpvar_7.xy; + v_6.z = (tmpvar_7.z + 0.42); + tmpvar_5 = (((texture2D (_ParallaxMap, tmpvar_1.zw).w * _Parallax) - (_Parallax / 2.0)) * (tmpvar_7.xy / v_6.z)); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, (tmpvar_1.xy + tmpvar_5)); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_8 * _Color); + vec4 normal_10; + normal_10.xy = ((texture2D (_BumpMap, (tmpvar_1.zw + tmpvar_5)).wy * 2.0) - 1.0); + normal_10.z = sqrt(((1.0 - (normal_10.x * normal_10.x)) - (normal_10.y * normal_10.y))); + vec3 tmpvar_11; + tmpvar_11 = normalize(gl_TexCoord[2].xyz); + float atten_12; + atten_12 = (texture2D (_LightTextureB0, vec2(dot (tmpvar_3, tmpvar_3))).w * textureCube (_LightTexture0, tmpvar_3).w); + vec4 c_13; + float tmpvar_14; + tmpvar_14 = (pow (max (0.0, dot (normal_10.xyz, normalize((tmpvar_11 + normalize(tmpvar_2))))), (_Shininess * 128.0)) * tmpvar_8.w); + c_13.xyz = ((((tmpvar_9.xyz * _LightColor0.xyz) * max (0.0, dot (normal_10.xyz, tmpvar_11))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_14)) * (atten_12 * 2.0)); + c_13.w = (tmpvar_9.w + (((_LightColor0.w * _SpecColor.w) * tmpvar_14) * atten_12)); + c_4.xyz = c_13.xyz; + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-ir.txt new file mode 100644 index 000000000..4f7da7027 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-ir.txt @@ -0,0 +1,237 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Illum; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tex_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = (tex_4 * _Color); + c_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = c_3.xyz; + o_2.Albedo = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_Illum, IN_1.uv_Illum); + vec3 tmpvar_10; + tmpvar_10 = (c_3.xyz * tmpvar_9.w); + o_2.Emission = tmpvar_10; + float tmpvar_11; + tmpvar_11 = tex_4.w; + o_2.Gloss = tmpvar_11; + float tmpvar_12; + tmpvar_12 = c_3.w; + o_2.Alpha = tmpvar_12; + float tmpvar_13; + tmpvar_13 = _Shininess; + o_2.Specular = tmpvar_13; +} + +float UnitySpotCookie ( + in vec4 LightCoord_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = texture2D (_LightTexture0, ((LightCoord_14.xy / LightCoord_14.w) + 0.5)); + return tmpvar_15.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_16 +) +{ + float tmpvar_17; + tmpvar_17 = dot (LightCoord_16, LightCoord_16); + vec2 tmpvar_18; + tmpvar_18 = vec2(tmpvar_17); + vec2 tmpvar_19; + tmpvar_19 = tmpvar_18.xy; + vec4 tmpvar_20; + tmpvar_20 = texture2D (_LightTextureB0, tmpvar_19); + return tmpvar_20.w; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_21, + in vec3 lightDir_22, + in vec3 viewDir_23, + in float atten_24 +) +{ + vec4 c_25; + float spec_26; + float nh_27; + float diff_28; + vec3 h_29; + vec3 tmpvar_30; + tmpvar_30 = normalize ((lightDir_22 + viewDir_23)); + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30; + h_29 = tmpvar_31; + float tmpvar_32; + tmpvar_32 = dot (s_21.Normal, lightDir_22); + float tmpvar_33; + tmpvar_33 = max (0.0, tmpvar_32); + float tmpvar_34; + tmpvar_34 = tmpvar_33; + diff_28 = tmpvar_34; + float tmpvar_35; + tmpvar_35 = dot (s_21.Normal, h_29); + float tmpvar_36; + tmpvar_36 = max (0.0, tmpvar_35); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + nh_27 = tmpvar_37; + float tmpvar_38; + tmpvar_38 = pow (nh_27, (s_21.Specular * 128.0)); + float tmpvar_39; + tmpvar_39 = (tmpvar_38 * s_21.Gloss); + spec_26 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = ((((s_21.Albedo * _LightColor0.xyz) * diff_28) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_26)) * (atten_24 * 2.0)); + c_25.xyz = tmpvar_40.xyz.xyz; + float tmpvar_41; + tmpvar_41 = (s_21.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_26) * atten_24)); + c_25.w = vec4(tmpvar_41).w; + return c_25; +} + +vec4 frag_surf ( + in v2f_surf IN_42 +) +{ + vec4 c_43; + vec3 lightDir_44; + SurfaceOutput o_45; + Input surfIN_46; + vec2 tmpvar_47; + tmpvar_47 = IN_42.hip_pack0.xy; + surfIN_46.uv_MainTex = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_45.Albedo = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = vec3(0.0, 0.0, 0.0); + o_45.Emission = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_45.Specular = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + o_45.Alpha = tmpvar_51; + float tmpvar_52; + tmpvar_52 = 0.0; + o_45.Gloss = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = IN_42.normal; + o_45.Normal = tmpvar_53; + surf (surfIN_46, o_45); + vec3 tmpvar_54; + tmpvar_54 = IN_42.lightDir; + lightDir_44 = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = normalize (lightDir_44); + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55; + lightDir_44 = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = IN_42.viewDir.xyz; + vec3 tmpvar_58; + tmpvar_58 = normalize (tmpvar_57); + float tmpvar_59; + tmpvar_59 = UnitySpotCookie (IN_42._LightCoord); + float tmpvar_60; + tmpvar_60 = UnitySpotAttenuate (IN_42._LightCoord.xyz); + vec4 tmpvar_61; + tmpvar_61 = LightingBlinnPhong (o_45, lightDir_44, tmpvar_58, ((float((IN_42._LightCoord.z > 0.0)) * tmpvar_59) * tmpvar_60)); + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + c_43 = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + c_43.w = vec4(tmpvar_63).w; + return c_43; +} + +void main () +{ + v2f_surf xlt_IN_64; + vec4 xl_retval_65; + vec4 tmpvar_66; + tmpvar_66 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_64.pos = tmpvar_66; + float tmpvar_67; + tmpvar_67 = xlv_FOG.x; + xlt_IN_64.fog = tmpvar_67; + vec2 tmpvar_68; + tmpvar_68 = gl_TexCoord[0].xy; + vec2 tmpvar_69; + tmpvar_69 = tmpvar_68; + xlt_IN_64.hip_pack0 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = gl_TexCoord[1].xyz; + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + xlt_IN_64.normal = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = gl_TexCoord[2].xyz; + vec3 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlt_IN_64.lightDir = tmpvar_73; + vec3 tmpvar_74; + tmpvar_74 = gl_TexCoord[3].xyz; + vec3 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_64.viewDir = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = gl_TexCoord[4].xyzw; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + xlt_IN_64._LightCoord = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = frag_surf (xlt_IN_64); + vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + xl_retval_65 = tmpvar_79; + vec4 tmpvar_80; + tmpvar_80 = xl_retval_65.xyzw; + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + gl_FragData[0] = tmpvar_81; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-out.txt new file mode 100644 index 000000000..5bc26807d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular-out.txt @@ -0,0 +1,32 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[4]; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + vec3 tmpvar_6; + tmpvar_6 = normalize(gl_TexCoord[2].xyz); + float atten_7; + atten_7 = ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (pow (max (0.0, dot (tmpvar_1, normalize((tmpvar_6 + normalize(gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_8.xyz = ((((tmpvar_5.xyz * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_6))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_9)) * (atten_7 * 2.0)); + c_8.w = (tmpvar_5.w + (((_LightColor0.w * _SpecColor.w) * tmpvar_9) * atten_7)); + c_3.xyz = c_8.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-ir.txt new file mode 100644 index 000000000..6648ed120 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-ir.txt @@ -0,0 +1,113 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _Illum; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tex_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = (tex_4 * _Color); + c_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = c_3.xyz; + o_2.Albedo = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_Illum, IN_1.uv_Illum); + vec3 tmpvar_10; + tmpvar_10 = (c_3.xyz * tmpvar_9.w); + o_2.Emission = tmpvar_10; + float tmpvar_11; + tmpvar_11 = tex_4.w; + o_2.Gloss = tmpvar_11; + float tmpvar_12; + tmpvar_12 = c_3.w; + o_2.Alpha = tmpvar_12; + float tmpvar_13; + tmpvar_13 = _Shininess; + o_2.Specular = tmpvar_13; +} + +vec4 frag_surf ( + in v2f_surf IN_14 +) +{ + vec4 res_15; + Input surfIN_16; + SurfaceOutput o_17; + vec3 tmpvar_18; + tmpvar_18 = vec3(0.0, 0.0, 0.0); + o_17.Albedo = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(0.0, 0.0, 0.0); + o_17.Emission = tmpvar_19; + float tmpvar_20; + tmpvar_20 = 0.0; + o_17.Specular = tmpvar_20; + float tmpvar_21; + tmpvar_21 = 0.0; + o_17.Alpha = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_17.Gloss = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = IN_14.normal; + o_17.Normal = tmpvar_23; + surf (surfIN_16, o_17); + vec3 tmpvar_24; + tmpvar_24 = ((o_17.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_15.xyz = tmpvar_24.xyz.xyz; + float tmpvar_25; + tmpvar_25 = o_17.Specular; + res_15.w = vec4(tmpvar_25).w; + return res_15; +} + +void main () +{ + v2f_surf xlt_IN_26; + vec4 xl_retval_27; + vec4 tmpvar_28; + tmpvar_28 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_26.pos = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = gl_TexCoord[0].xyz; + vec3 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_IN_26.normal = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = frag_surf (xlt_IN_26); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xl_retval_27 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = xl_retval_27.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_FragData[0] = tmpvar_34; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-out.txt new file mode 100644 index 000000000..28ed5f368 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular1-out.txt @@ -0,0 +1,9 @@ +uniform float _Shininess; +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = _Shininess; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Self-Illumin_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-ir.txt new file mode 100644 index 000000000..fe242fbbf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-ir.txt @@ -0,0 +1,310 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_Illum; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec4 c_35; + vec4 tex_36; + vec4 tmpvar_37; + tmpvar_37 = texture2D (_MainTex, IN_33.uv_MainTex); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + tex_36 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (tex_36 * _Color); + c_35 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = c_35.xyz; + o_34.Albedo = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_Illum, IN_33.uv_Illum); + vec3 tmpvar_42; + tmpvar_42 = (c_35.xyz * tmpvar_41.w); + o_34.Emission = tmpvar_42; + float tmpvar_43; + tmpvar_43 = tex_36.w; + o_34.Gloss = tmpvar_43; + float tmpvar_44; + tmpvar_44 = c_35.w; + o_34.Alpha = tmpvar_44; + float tmpvar_45; + tmpvar_45 = _Shininess; + o_34.Specular = tmpvar_45; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_46, + in vec4 light_47 +) +{ + vec4 c_48; + float spec_49; + float tmpvar_50; + tmpvar_50 = (light_47.w * s_46.Gloss); + spec_49 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = ((s_46.Albedo * light_47.xyz) + ((light_47.xyz * _SpecColor.xyz) * spec_49)); + c_48.xyz = tmpvar_51.xyz.xyz; + float tmpvar_52; + tmpvar_52 = (s_46.Alpha + (spec_49 * _SpecColor.w)); + c_48.w = vec4(tmpvar_52).w; + return c_48; +} + +vec3 DecodeLightmap ( + in vec4 color_53 +) +{ + return (2.0 * color_53.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_54 +) +{ + vec4 col_55; + vec3 lm_56; + vec3 lmIndirect_57; + vec3 lmFull_58; + vec4 light_59; + SurfaceOutput o_60; + Input surfIN_61; + vec2 tmpvar_62; + tmpvar_62 = IN_54.hip_pack0.xy; + surfIN_61.uv_MainTex = tmpvar_62; + vec2 tmpvar_63; + tmpvar_63 = IN_54.hip_pack0.zw; + surfIN_61.uv_Illum = tmpvar_63; + vec3 tmpvar_64; + tmpvar_64 = vec3(0.0, 0.0, 0.0); + o_60.Albedo = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = vec3(0.0, 0.0, 0.0); + o_60.Emission = tmpvar_65; + float tmpvar_66; + tmpvar_66 = 0.0; + o_60.Specular = tmpvar_66; + float tmpvar_67; + tmpvar_67 = 0.0; + o_60.Alpha = tmpvar_67; + float tmpvar_68; + tmpvar_68 = 0.0; + o_60.Gloss = tmpvar_68; + surf (surfIN_61, o_60); + vec4 tmpvar_69; + tmpvar_69 = texture2DProj (_LightBuffer, IN_54.hip_screen); + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + light_59 = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = log2 (light_59); + vec4 tmpvar_72; + tmpvar_72 = -(tmpvar_71); + light_59 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = texture2D (unity_Lightmap, IN_54.hip_lmapFade.xy); + vec3 tmpvar_74; + tmpvar_74 = DecodeLightmap (tmpvar_73); + vec3 tmpvar_75; + tmpvar_75 = tmpvar_74; + lmFull_58 = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = texture2D (unity_LightmapInd, IN_54.hip_lmapFade.xy); + vec3 tmpvar_77; + tmpvar_77 = DecodeLightmap (tmpvar_76); + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + lmIndirect_57 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = xll_saturate (IN_54.hip_lmapFade.z); + vec3 tmpvar_80; + tmpvar_80 = vec3(tmpvar_79); + vec3 tmpvar_81; + tmpvar_81 = mix (lmIndirect_57, lmFull_58, tmpvar_80); + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81; + lm_56 = tmpvar_82; + vec3 tmpvar_83; + tmpvar_83 = (light_59.xyz + lm_56); + light_59.xyz = tmpvar_83.xyz.xyz; + vec4 tmpvar_84; + tmpvar_84 = LightingBlinnPhong_PrePass (o_60, light_59); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + col_55 = tmpvar_85; + vec3 tmpvar_86; + tmpvar_86 = (col_55.xyz + o_60.Emission); + col_55.xyz = tmpvar_86.xyz.xyz; + return col_55; +} + +void main () +{ + v2f_surf xlt_IN_87; + vec4 xl_retval_88; + vec4 tmpvar_89; + tmpvar_89 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_87.pos = tmpvar_89; + float tmpvar_90; + tmpvar_90 = xlv_FOG.x; + xlt_IN_87.fog = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = gl_TexCoord[0].xyzw; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlt_IN_87.hip_pack0 = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93 = gl_TexCoord[1].xyzw; + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlt_IN_87.hip_screen = tmpvar_94; + vec3 tmpvar_95; + tmpvar_95 = gl_TexCoord[2].xyz; + vec3 tmpvar_96; + tmpvar_96 = tmpvar_95; + xlt_IN_87.hip_lmapFade = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97 = frag_surf (xlt_IN_87); + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + xl_retval_88 = tmpvar_98; + vec4 tmpvar_99; + tmpvar_99 = xl_retval_88.xyzw; + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + gl_FragData[0] = tmpvar_100; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-out.txt new file mode 100644 index 000000000..58d717337 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Self-Illumin_Specular2-out.txt @@ -0,0 +1,33 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Illum; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 col_3; + vec4 light_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, tmpvar_1.xy); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * _Color); + vec4 tmpvar_7; + tmpvar_7 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_4.w = tmpvar_7.w; + light_4.xyz = (tmpvar_7.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (tmpvar_7.w * tmpvar_5.w); + c_8.xyz = ((tmpvar_6.xyz * light_4.xyz) + ((light_4.xyz * _SpecColor.xyz) * tmpvar_9)); + c_8.w = (tmpvar_6.w + (tmpvar_9 * _SpecColor.w)); + col_3.w = c_8.w; + col_3.xyz = (c_8.xyz + (tmpvar_6.xyz * texture2D (_Illum, tmpvar_1.zw).w)); + gl_FragData[0] = col_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-ir.txt new file mode 100644 index 000000000..9b222dcce --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-ir.txt @@ -0,0 +1,226 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tex_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + tex_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (tex_3.xyz * _Color.xyz); + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = tex_3.w; + o_2.Gloss = tmpvar_7; + float tmpvar_8; + tmpvar_8 = (tex_3.w * _Color.w); + o_2.Alpha = tmpvar_8; + float tmpvar_9; + tmpvar_9 = _Shininess; + o_2.Specular = tmpvar_9; +} + +float UnitySpotCookie ( + in vec4 LightCoord_10 +) +{ + vec4 tmpvar_11; + tmpvar_11 = texture2D (_LightTexture0, ((LightCoord_10.xy / LightCoord_10.w) + 0.5)); + return tmpvar_11.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_12 +) +{ + float tmpvar_13; + tmpvar_13 = dot (LightCoord_12, LightCoord_12); + vec2 tmpvar_14; + tmpvar_14 = vec2(tmpvar_13); + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14.xy; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); + return tmpvar_16.w; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_17, + in vec3 lightDir_18, + in vec3 viewDir_19, + in float atten_20 +) +{ + vec4 c_21; + float spec_22; + float nh_23; + float diff_24; + vec3 h_25; + vec3 tmpvar_26; + tmpvar_26 = normalize ((lightDir_18 + viewDir_19)); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + h_25 = tmpvar_27; + float tmpvar_28; + tmpvar_28 = dot (s_17.Normal, lightDir_18); + float tmpvar_29; + tmpvar_29 = max (0.0, tmpvar_28); + float tmpvar_30; + tmpvar_30 = tmpvar_29; + diff_24 = tmpvar_30; + float tmpvar_31; + tmpvar_31 = dot (s_17.Normal, h_25); + float tmpvar_32; + tmpvar_32 = max (0.0, tmpvar_31); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + nh_23 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = pow (nh_23, (s_17.Specular * 128.0)); + float tmpvar_35; + tmpvar_35 = (tmpvar_34 * s_17.Gloss); + spec_22 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = ((((s_17.Albedo * _LightColor0.xyz) * diff_24) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_22)) * (atten_20 * 2.0)); + c_21.xyz = tmpvar_36.xyz.xyz; + float tmpvar_37; + tmpvar_37 = (s_17.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_22) * atten_20)); + c_21.w = vec4(tmpvar_37).w; + return c_21; +} + +vec4 frag_surf ( + in v2f_surf IN_38 +) +{ + vec4 c_39; + vec3 lightDir_40; + SurfaceOutput o_41; + Input surfIN_42; + vec2 tmpvar_43; + tmpvar_43 = IN_38.hip_pack0.xy; + surfIN_42.uv_MainTex = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = vec3(0.0, 0.0, 0.0); + o_41.Albedo = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = vec3(0.0, 0.0, 0.0); + o_41.Emission = tmpvar_45; + float tmpvar_46; + tmpvar_46 = 0.0; + o_41.Specular = tmpvar_46; + float tmpvar_47; + tmpvar_47 = 0.0; + o_41.Alpha = tmpvar_47; + float tmpvar_48; + tmpvar_48 = 0.0; + o_41.Gloss = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = IN_38.normal; + o_41.Normal = tmpvar_49; + surf (surfIN_42, o_41); + vec3 tmpvar_50; + tmpvar_50 = IN_38.lightDir; + lightDir_40 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = normalize (lightDir_40); + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + lightDir_40 = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = IN_38.viewDir.xyz; + vec3 tmpvar_54; + tmpvar_54 = normalize (tmpvar_53); + float tmpvar_55; + tmpvar_55 = UnitySpotCookie (IN_38._LightCoord); + float tmpvar_56; + tmpvar_56 = UnitySpotAttenuate (IN_38._LightCoord.xyz); + vec4 tmpvar_57; + tmpvar_57 = LightingBlinnPhong (o_41, lightDir_40, tmpvar_54, ((float((IN_38._LightCoord.z > 0.0)) * tmpvar_55) * tmpvar_56)); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + c_39 = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + c_39.w = vec4(tmpvar_59).w; + return c_39; +} + +void main () +{ + v2f_surf xlt_IN_60; + vec4 xl_retval_61; + vec4 tmpvar_62; + tmpvar_62 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_60.pos = tmpvar_62; + float tmpvar_63; + tmpvar_63 = xlv_FOG.x; + xlt_IN_60.fog = tmpvar_63; + vec2 tmpvar_64; + tmpvar_64 = gl_TexCoord[0].xy; + vec2 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_IN_60.hip_pack0 = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = gl_TexCoord[1].xyz; + vec3 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_IN_60.normal = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = gl_TexCoord[2].xyz; + vec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + xlt_IN_60.lightDir = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = gl_TexCoord[3].xyz; + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + xlt_IN_60.viewDir = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = gl_TexCoord[4].xyzw; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlt_IN_60._LightCoord = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = frag_surf (xlt_IN_60); + vec4 tmpvar_75; + tmpvar_75 = tmpvar_74; + xl_retval_61 = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = xl_retval_61.xyzw; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + gl_FragData[0] = tmpvar_77; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-out.txt new file mode 100644 index 000000000..51824f70a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular-out.txt @@ -0,0 +1,30 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[4]; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec3 tmpvar_5; + tmpvar_5 = normalize(gl_TexCoord[2].xyz); + float atten_6; + atten_6 = ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w); + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (pow (max (0.0, dot (tmpvar_1, normalize((tmpvar_5 + normalize(gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_7.xyz = (((((tmpvar_4.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_5))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_8)) * (atten_6 * 2.0)); + c_7.w = ((tmpvar_4.w * _Color.w) + (((_LightColor0.w * _SpecColor.w) * tmpvar_8) * atten_6)); + c_3.xyz = c_7.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-ir.txt new file mode 100644 index 000000000..28aa8ed58 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-ir.txt @@ -0,0 +1,102 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tex_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + tex_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (tex_3.xyz * _Color.xyz); + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = tex_3.w; + o_2.Gloss = tmpvar_7; + float tmpvar_8; + tmpvar_8 = (tex_3.w * _Color.w); + o_2.Alpha = tmpvar_8; + float tmpvar_9; + tmpvar_9 = _Shininess; + o_2.Specular = tmpvar_9; +} + +vec4 frag_surf ( + in v2f_surf IN_10 +) +{ + vec4 res_11; + Input surfIN_12; + SurfaceOutput o_13; + vec3 tmpvar_14; + tmpvar_14 = vec3(0.0, 0.0, 0.0); + o_13.Albedo = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = vec3(0.0, 0.0, 0.0); + o_13.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_13.Specular = tmpvar_16; + float tmpvar_17; + tmpvar_17 = 0.0; + o_13.Alpha = tmpvar_17; + float tmpvar_18; + tmpvar_18 = 0.0; + o_13.Gloss = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = IN_10.normal; + o_13.Normal = tmpvar_19; + surf (surfIN_12, o_13); + vec3 tmpvar_20; + tmpvar_20 = ((o_13.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_11.xyz = tmpvar_20.xyz.xyz; + float tmpvar_21; + tmpvar_21 = o_13.Specular; + res_11.w = vec4(tmpvar_21).w; + return res_11; +} + +void main () +{ + v2f_surf xlt_IN_22; + vec4 xl_retval_23; + vec4 tmpvar_24; + tmpvar_24 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_22.pos = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = gl_TexCoord[0].xyz; + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_IN_22.normal = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = frag_surf (xlt_IN_22); + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xl_retval_23 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = xl_retval_23.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + gl_FragData[0] = tmpvar_30; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-out.txt new file mode 100644 index 000000000..28ed5f368 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular1-out.txt @@ -0,0 +1,9 @@ +uniform float _Shininess; +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = _Shininess; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-ir.txt new file mode 100644 index 000000000..418900589 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-ir.txt @@ -0,0 +1,293 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec4 tex_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + tex_35 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = (tex_35.xyz * _Color.xyz); + o_34.Albedo = tmpvar_38; + float tmpvar_39; + tmpvar_39 = tex_35.w; + o_34.Gloss = tmpvar_39; + float tmpvar_40; + tmpvar_40 = (tex_35.w * _Color.w); + o_34.Alpha = tmpvar_40; + float tmpvar_41; + tmpvar_41 = _Shininess; + o_34.Specular = tmpvar_41; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_42, + in vec4 light_43 +) +{ + vec4 c_44; + float spec_45; + float tmpvar_46; + tmpvar_46 = (light_43.w * s_42.Gloss); + spec_45 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = ((s_42.Albedo * light_43.xyz) + ((light_43.xyz * _SpecColor.xyz) * spec_45)); + c_44.xyz = tmpvar_47.xyz.xyz; + float tmpvar_48; + tmpvar_48 = (s_42.Alpha + (spec_45 * _SpecColor.w)); + c_44.w = vec4(tmpvar_48).w; + return c_44; +} + +vec3 DecodeLightmap ( + in vec4 color_49 +) +{ + return (2.0 * color_49.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_50 +) +{ + vec4 col_51; + vec3 lm_52; + vec3 lmIndirect_53; + vec3 lmFull_54; + vec4 light_55; + SurfaceOutput o_56; + Input surfIN_57; + vec2 tmpvar_58; + tmpvar_58 = IN_50.hip_pack0.xy; + surfIN_57.uv_MainTex = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = vec3(0.0, 0.0, 0.0); + o_56.Albedo = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = vec3(0.0, 0.0, 0.0); + o_56.Emission = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.0; + o_56.Specular = tmpvar_61; + float tmpvar_62; + tmpvar_62 = 0.0; + o_56.Alpha = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_56.Gloss = tmpvar_63; + surf (surfIN_57, o_56); + vec4 tmpvar_64; + tmpvar_64 = texture2DProj (_LightBuffer, IN_50.hip_screen); + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + light_55 = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = log2 (light_55); + vec4 tmpvar_67; + tmpvar_67 = -(tmpvar_66); + light_55 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = texture2D (unity_Lightmap, IN_50.hip_lmapFade.xy); + vec3 tmpvar_69; + tmpvar_69 = DecodeLightmap (tmpvar_68); + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + lmFull_54 = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = texture2D (unity_LightmapInd, IN_50.hip_lmapFade.xy); + vec3 tmpvar_72; + tmpvar_72 = DecodeLightmap (tmpvar_71); + vec3 tmpvar_73; + tmpvar_73 = tmpvar_72; + lmIndirect_53 = tmpvar_73; + float tmpvar_74; + tmpvar_74 = xll_saturate (IN_50.hip_lmapFade.z); + vec3 tmpvar_75; + tmpvar_75 = vec3(tmpvar_74); + vec3 tmpvar_76; + tmpvar_76 = mix (lmIndirect_53, lmFull_54, tmpvar_75); + vec3 tmpvar_77; + tmpvar_77 = tmpvar_76; + lm_52 = tmpvar_77; + vec3 tmpvar_78; + tmpvar_78 = (light_55.xyz + lm_52); + light_55.xyz = tmpvar_78.xyz.xyz; + vec4 tmpvar_79; + tmpvar_79 = LightingBlinnPhong_PrePass (o_56, light_55); + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + col_51 = tmpvar_80; + return col_51; +} + +void main () +{ + v2f_surf xlt_IN_81; + vec4 xl_retval_82; + vec4 tmpvar_83; + tmpvar_83 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_81.pos = tmpvar_83; + float tmpvar_84; + tmpvar_84 = xlv_FOG.x; + xlt_IN_81.fog = tmpvar_84; + vec2 tmpvar_85; + tmpvar_85 = gl_TexCoord[0].xy; + vec2 tmpvar_86; + tmpvar_86 = tmpvar_85; + xlt_IN_81.hip_pack0 = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = gl_TexCoord[1].xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + xlt_IN_81.hip_screen = tmpvar_88; + vec3 tmpvar_89; + tmpvar_89 = gl_TexCoord[2].xyz; + vec3 tmpvar_90; + tmpvar_90 = tmpvar_89; + xlt_IN_81.hip_lmapFade = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = frag_surf (xlt_IN_81); + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + xl_retval_82 = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93 = xl_retval_82.xyzw; + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + gl_FragData[0] = tmpvar_94; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-out.txt new file mode 100644 index 000000000..8b761811b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Specular2-out.txt @@ -0,0 +1,25 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_4.w; + light_2.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_5; + float tmpvar_6; + tmpvar_6 = (tmpvar_4.w * tmpvar_3.w); + c_5.xyz = (((tmpvar_3.xyz * _Color.xyz) * light_2.xyz) + ((light_2.xyz * _SpecColor.xyz) * tmpvar_6)); + c_5.w = ((tmpvar_3.w * _Color.w) + (tmpvar_6 * _SpecColor.w)); + gl_FragData[0] = c_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-ir.txt new file mode 100644 index 000000000..abd37b8d7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-ir.txt @@ -0,0 +1,186 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv2_Detail; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Detail; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_4; + tmpvar_4 = texture2D (_Detail, IN_1.uv2_Detail); + vec3 tmpvar_5; + tmpvar_5 = ((tmpvar_3.xyz * tmpvar_4.xyz) * 2.0); + o_2.Albedo = tmpvar_5; +} + +float UnitySpotCookie ( + in vec4 LightCoord_6 +) +{ + vec4 tmpvar_7; + tmpvar_7 = texture2D (_LightTexture0, ((LightCoord_6.xy / LightCoord_6.w) + 0.5)); + return tmpvar_7.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_8 +) +{ + float tmpvar_9; + tmpvar_9 = dot (LightCoord_8, LightCoord_8); + vec2 tmpvar_10; + tmpvar_10 = vec2(tmpvar_9); + vec2 tmpvar_11; + tmpvar_11 = tmpvar_10.xy; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_LightTextureB0, tmpvar_11); + return tmpvar_12.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_13, + in vec3 lightDir_14, + in float atten_15 +) +{ + vec4 c_16; + float diff_17; + float tmpvar_18; + tmpvar_18 = dot (s_13.Normal, lightDir_14); + float tmpvar_19; + tmpvar_19 = max (0.0, tmpvar_18); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + diff_17 = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = ((s_13.Albedo * _LightColor0.xyz) * ((diff_17 * atten_15) * 2.0)); + c_16.xyz = tmpvar_21.xyz.xyz; + float tmpvar_22; + tmpvar_22 = s_13.Alpha; + c_16.w = vec4(tmpvar_22).w; + return c_16; +} + +vec4 frag_surf ( + in v2f_surf IN_23 +) +{ + vec4 c_24; + vec3 lightDir_25; + SurfaceOutput o_26; + Input surfIN_27; + vec2 tmpvar_28; + tmpvar_28 = IN_23.hip_pack0.xy; + surfIN_27.uv_MainTex = tmpvar_28; + vec2 tmpvar_29; + tmpvar_29 = IN_23.hip_pack0.zw; + surfIN_27.uv2_Detail = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(0.0, 0.0, 0.0); + o_26.Albedo = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_26.Emission = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_26.Specular = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_26.Alpha = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_26.Gloss = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = IN_23.normal; + o_26.Normal = tmpvar_35; + surf (surfIN_27, o_26); + vec3 tmpvar_36; + tmpvar_36 = IN_23.lightDir; + lightDir_25 = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = normalize (lightDir_25); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + lightDir_25 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = UnitySpotCookie (IN_23._LightCoord); + float tmpvar_40; + tmpvar_40 = UnitySpotAttenuate (IN_23._LightCoord.xyz); + vec4 tmpvar_41; + tmpvar_41 = LightingLambert (o_26, lightDir_25, ((float((IN_23._LightCoord.z > 0.0)) * tmpvar_39) * tmpvar_40)); + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + c_24 = tmpvar_42; + float tmpvar_43; + tmpvar_43 = 0.0; + c_24.w = vec4(tmpvar_43).w; + return c_24; +} + +void main () +{ + v2f_surf xlt_IN_44; + vec4 xl_retval_45; + vec4 tmpvar_46; + tmpvar_46 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_44.pos = tmpvar_46; + float tmpvar_47; + tmpvar_47 = xlv_FOG.x; + xlt_IN_44.fog = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_TexCoord[0].xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_44.hip_pack0 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[1].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_44.normal = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = gl_TexCoord[2].xyz; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_44.lightDir = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = gl_TexCoord[3].xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_44._LightCoord = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = frag_surf (xlt_IN_44); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xl_retval_45 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = xl_retval_45.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_FragData[0] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-out.txt new file mode 100644 index 000000000..c0db067ae --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV-out.txt @@ -0,0 +1,20 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _Detail; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[3]; + vec4 c_3; + vec4 c_4; + c_4.xyz = ((((texture2D (_MainTex, tmpvar_1.xy).xyz * texture2D (_Detail, tmpvar_1.zw).xyz) * 2.0) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_4.w = 0.0; + c_3.xyz = c_4.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_2UV1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-ir.txt new file mode 100644 index 000000000..2667d1020 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-ir.txt @@ -0,0 +1,135 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv2_Detail; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Detail; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_4; + tmpvar_4 = texture2D (_Detail, IN_1.uv2_Detail); + vec3 tmpvar_5; + tmpvar_5 = ((tmpvar_3.xyz * tmpvar_4.xyz) * 2.0); + o_2.Albedo = tmpvar_5; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_6, + in vec4 light_7 +) +{ + vec4 c_8; + vec3 tmpvar_9; + tmpvar_9 = (s_6.Albedo * light_7.xyz); + c_8.xyz = tmpvar_9.xyz.xyz; + float tmpvar_10; + tmpvar_10 = s_6.Alpha; + c_8.w = vec4(tmpvar_10).w; + return c_8; +} + +vec4 frag_surf ( + in v2f_surf IN_11 +) +{ + vec4 col_12; + vec4 light_13; + SurfaceOutput o_14; + Input surfIN_15; + vec2 tmpvar_16; + tmpvar_16 = IN_11.hip_pack0.xy; + surfIN_15.uv_MainTex = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = IN_11.hip_pack0.zw; + surfIN_15.uv2_Detail = tmpvar_17; + vec3 tmpvar_18; + tmpvar_18 = vec3(0.0, 0.0, 0.0); + o_14.Albedo = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(0.0, 0.0, 0.0); + o_14.Emission = tmpvar_19; + float tmpvar_20; + tmpvar_20 = 0.0; + o_14.Specular = tmpvar_20; + float tmpvar_21; + tmpvar_21 = 0.0; + o_14.Alpha = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_14.Gloss = tmpvar_22; + surf (surfIN_15, o_14); + vec4 tmpvar_23; + tmpvar_23 = texture2DProj (_LightBuffer, IN_11.hip_screen); + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + light_13 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = log2 (light_13); + vec4 tmpvar_26; + tmpvar_26 = -(tmpvar_25); + light_13 = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = (light_13.xyz + unity_Ambient.xyz); + light_13.xyz = tmpvar_27.xyz.xyz; + vec4 tmpvar_28; + tmpvar_28 = LightingLambert_PrePass (o_14, light_13); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + col_12 = tmpvar_29; + return col_12; +} + +void main () +{ + v2f_surf xlt_IN_30; + vec4 xl_retval_31; + vec4 tmpvar_32; + tmpvar_32 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_30.pos = tmpvar_32; + float tmpvar_33; + tmpvar_33 = xlv_FOG.x; + xlt_IN_30.fog = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_TexCoord[0].xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_IN_30.hip_pack0 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_TexCoord[1].xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_IN_30.hip_screen = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = frag_surf (xlt_IN_30); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_31 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_31.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_FragData[0] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-out.txt new file mode 100644 index 000000000..686949547 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_2UV1-out.txt @@ -0,0 +1,19 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform sampler2D _Detail; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_3.w; + light_2.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); + vec4 c_4; + c_4.xyz = (((texture2D (_MainTex, tmpvar_1.xy).xyz * texture2D (_Detail, tmpvar_1.zw).xyz) * 2.0) * light_2.xyz); + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-ir.txt new file mode 100644 index 000000000..3c3701e9f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-ir.txt @@ -0,0 +1,228 @@ +struct MySurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + vec3 GlossColor; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_SpecMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _SpecMap; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout MySurfaceOutput o_2 +) +{ + vec4 spec_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec3 tmpvar_5; + tmpvar_5 = (tmpvar_4.xyz * 0.3); + o_2.Albedo = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_SpecMap, IN_1.uv_SpecMap); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + spec_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = spec_3.xyz; + o_2.GlossColor = tmpvar_8; + float tmpvar_9; + tmpvar_9 = 0.25; + o_2.Specular = tmpvar_9; +} + +float UnitySpotCookie ( + in vec4 LightCoord_10 +) +{ + vec4 tmpvar_11; + tmpvar_11 = texture2D (_LightTexture0, ((LightCoord_10.xy / LightCoord_10.w) + 0.5)); + return tmpvar_11.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_12 +) +{ + float tmpvar_13; + tmpvar_13 = dot (LightCoord_12, LightCoord_12); + vec2 tmpvar_14; + tmpvar_14 = vec2(tmpvar_13); + vec2 tmpvar_15; + tmpvar_15 = tmpvar_14.xy; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_LightTextureB0, tmpvar_15); + return tmpvar_16.w; +} + +vec4 LightingColoredSpecular ( + in MySurfaceOutput s_17, + in vec3 lightDir_18, + in vec3 viewDir_19, + in float atten_20 +) +{ + vec4 c_21; + vec3 specCol_22; + float spec_23; + float nh_24; + float diff_25; + vec3 h_26; + vec3 tmpvar_27; + tmpvar_27 = normalize ((lightDir_18 + viewDir_19)); + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + h_26 = tmpvar_28; + float tmpvar_29; + tmpvar_29 = dot (s_17.Normal, lightDir_18); + float tmpvar_30; + tmpvar_30 = max (0.0, tmpvar_29); + float tmpvar_31; + tmpvar_31 = tmpvar_30; + diff_25 = tmpvar_31; + float tmpvar_32; + tmpvar_32 = dot (s_17.Normal, h_26); + float tmpvar_33; + tmpvar_33 = max (0.0, tmpvar_32); + float tmpvar_34; + tmpvar_34 = tmpvar_33; + nh_24 = tmpvar_34; + float tmpvar_35; + tmpvar_35 = pow (nh_24, 32.0); + float tmpvar_36; + tmpvar_36 = tmpvar_35; + spec_23 = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = (spec_23 * s_17.GlossColor); + specCol_22 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = ((((s_17.Albedo * _LightColor0.xyz) * diff_25) + (_LightColor0.xyz * specCol_22)) * (atten_20 * 2.0)); + c_21.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = s_17.Alpha; + c_21.w = vec4(tmpvar_39).w; + return c_21; +} + +vec4 frag_surf ( + in v2f_surf IN_40 +) +{ + vec4 c_41; + vec3 lightDir_42; + MySurfaceOutput o_43; + Input surfIN_44; + vec2 tmpvar_45; + tmpvar_45 = IN_40.hip_pack0.xy; + surfIN_44.uv_MainTex = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = IN_40.hip_pack0.zw; + surfIN_44.uv_SpecMap = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = vec3(0.0, 0.0, 0.0); + o_43.Albedo = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_43.Emission = tmpvar_48; + float tmpvar_49; + tmpvar_49 = 0.0; + o_43.Specular = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_43.Alpha = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = IN_40.normal; + o_43.Normal = tmpvar_51; + surf (surfIN_44, o_43); + vec3 tmpvar_52; + tmpvar_52 = IN_40.lightDir; + lightDir_42 = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = normalize (lightDir_42); + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + lightDir_42 = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = IN_40.viewDir.xyz; + vec3 tmpvar_56; + tmpvar_56 = normalize (tmpvar_55); + float tmpvar_57; + tmpvar_57 = UnitySpotCookie (IN_40._LightCoord); + float tmpvar_58; + tmpvar_58 = UnitySpotAttenuate (IN_40._LightCoord.xyz); + vec4 tmpvar_59; + tmpvar_59 = LightingColoredSpecular (o_43, lightDir_42, tmpvar_56, ((float((IN_40._LightCoord.z > 0.0)) * tmpvar_57) * tmpvar_58)); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + c_41 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.0; + c_41.w = vec4(tmpvar_61).w; + return c_41; +} + +void main () +{ + v2f_surf xlt_IN_62; + vec4 xl_retval_63; + vec4 tmpvar_64; + tmpvar_64 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_62.pos = tmpvar_64; + float tmpvar_65; + tmpvar_65 = xlv_FOG.x; + xlt_IN_62.fog = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = gl_TexCoord[0].xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_IN_62.hip_pack0 = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = gl_TexCoord[1].xyz; + vec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + xlt_IN_62.normal = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = gl_TexCoord[2].xyz; + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + xlt_IN_62.lightDir = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = gl_TexCoord[3].xyz; + vec3 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlt_IN_62.viewDir = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = gl_TexCoord[4].xyzw; + vec4 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_62._LightCoord = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = frag_surf (xlt_IN_62); + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + xl_retval_63 = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = xl_retval_63.xyzw; + vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + gl_FragData[0] = tmpvar_79; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-out.txt new file mode 100644 index 000000000..61f65e4a5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular-out.txt @@ -0,0 +1,24 @@ +uniform sampler2D _SpecMap; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec4 tmpvar_3; + tmpvar_3 = gl_TexCoord[4]; + vec4 c_4; + vec3 tmpvar_5; + tmpvar_5 = normalize(gl_TexCoord[2].xyz); + vec4 c_6; + c_6.xyz = (((((texture2D (_MainTex, tmpvar_1.xy).xyz * 0.3) * _LightColor0.xyz) * max (0.0, dot (tmpvar_2, tmpvar_5))) + (_LightColor0.xyz * (pow (max (0.0, dot (tmpvar_2, normalize((tmpvar_5 + normalize(gl_TexCoord[3].xyz))))), 32.0) * texture2D (_SpecMap, tmpvar_1.zw).xyz))) * (((float((tmpvar_3.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_3.xy / tmpvar_3.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_3.xyz, tmpvar_3.xyz))).w) * 2.0)); + c_6.w = 0.0; + c_4.xyz = c_6.xyz; + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Colored_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-ir.txt new file mode 100644 index 000000000..a819405b3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-ir.txt @@ -0,0 +1,98 @@ +struct MySurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + vec3 GlossColor; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_SpecMap; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform sampler2D _SpecMap; +uniform sampler2D _MainTex; +void surf ( + in Input IN_1, + inout MySurfaceOutput o_2 +) +{ + vec4 spec_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec3 tmpvar_5; + tmpvar_5 = (tmpvar_4.xyz * 0.3); + o_2.Albedo = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_SpecMap, IN_1.uv_SpecMap); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + spec_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = spec_3.xyz; + o_2.GlossColor = tmpvar_8; + float tmpvar_9; + tmpvar_9 = 0.25; + o_2.Specular = tmpvar_9; +} + +vec4 frag_surf ( + in v2f_surf IN_10 +) +{ + vec4 res_11; + Input surfIN_12; + MySurfaceOutput o_13; + vec3 tmpvar_14; + tmpvar_14 = vec3(0.0, 0.0, 0.0); + o_13.Albedo = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = vec3(0.0, 0.0, 0.0); + o_13.Emission = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_13.Specular = tmpvar_16; + float tmpvar_17; + tmpvar_17 = 0.0; + o_13.Alpha = tmpvar_17; + vec3 tmpvar_18; + tmpvar_18 = IN_10.normal; + o_13.Normal = tmpvar_18; + surf (surfIN_12, o_13); + vec3 tmpvar_19; + tmpvar_19 = ((o_13.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_11.xyz = tmpvar_19.xyz.xyz; + float tmpvar_20; + tmpvar_20 = o_13.Specular; + res_11.w = vec4(tmpvar_20).w; + return res_11; +} + +void main () +{ + v2f_surf xlt_IN_21; + vec4 xl_retval_22; + vec4 tmpvar_23; + tmpvar_23 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_21.pos = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_TexCoord[0].xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_IN_21.normal = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = frag_surf (xlt_IN_21); + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xl_retval_22 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = xl_retval_22.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_FragData[0] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-out.txt new file mode 100644 index 000000000..146d2a623 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Colored_Specular1-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.25; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-ir.txt new file mode 100644 index 000000000..f33a8138e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-ir.txt @@ -0,0 +1,158 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec3 foo; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 cust_foo; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec3 tmpvar_3; + tmpvar_3 = IN_1.foo; + o_2.Albedo = tmpvar_3; +} + +vec4 LightingLambert ( + in SurfaceOutput s_4, + in vec3 lightDir_5, + in float atten_6 +) +{ + vec4 c_7; + float diff_8; + float tmpvar_9; + tmpvar_9 = dot (s_4.Normal, lightDir_5); + float tmpvar_10; + tmpvar_10 = max (0.0, tmpvar_9); + float tmpvar_11; + tmpvar_11 = tmpvar_10; + diff_8 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = ((s_4.Albedo * _LightColor0.xyz) * ((diff_8 * atten_6) * 2.0)); + c_7.xyz = tmpvar_12.xyz.xyz; + float tmpvar_13; + tmpvar_13 = s_4.Alpha; + c_7.w = vec4(tmpvar_13).w; + return c_7; +} + +vec4 frag_surf ( + in v2f_surf IN_14 +) +{ + vec4 c_15; + vec3 lightDir_16; + SurfaceOutput o_17; + Input surfIN_18; + vec3 tmpvar_19; + tmpvar_19 = IN_14.cust_foo; + surfIN_18.foo = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(0.0, 0.0, 0.0); + o_17.Albedo = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_17.Emission = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_17.Specular = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_17.Alpha = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_17.Gloss = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = IN_14.normal; + o_17.Normal = tmpvar_25; + surf (surfIN_18, o_17); + vec3 tmpvar_26; + tmpvar_26 = IN_14.lightDir; + lightDir_16 = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = normalize (lightDir_16); + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + lightDir_16 = tmpvar_28; + float tmpvar_29; + tmpvar_29 = dot (IN_14._LightCoord, IN_14._LightCoord); + vec2 tmpvar_30; + tmpvar_30 = vec2(tmpvar_29); + vec2 tmpvar_31; + tmpvar_31 = tmpvar_30.xy; + vec4 tmpvar_32; + tmpvar_32 = texture2D (_LightTextureB0, tmpvar_31); + vec4 tmpvar_33; + tmpvar_33 = textureCube (_LightTexture0, IN_14._LightCoord); + vec4 tmpvar_34; + tmpvar_34 = LightingLambert (o_17, lightDir_16, (tmpvar_32.w * tmpvar_33.w)); + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + c_15 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + c_15.w = vec4(tmpvar_36).w; + return c_15; +} + +void main () +{ + v2f_surf xlt_IN_37; + vec4 xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_37.pos = tmpvar_39; + float tmpvar_40; + tmpvar_40 = xlv_FOG.x; + xlt_IN_37.fog = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_TexCoord[0].xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_37.cust_foo = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_TexCoord[1].xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_37.normal = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_TexCoord[2].xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_37.lightDir = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[3].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_37._LightCoord = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = frag_surf (xlt_IN_37); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xl_retval_38 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_38.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_FragData[0] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-out.txt new file mode 100644 index 000000000..978a38da9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[3].xyz; + vec4 c_2; + vec4 c_3; + c_3.xyz = ((gl_TexCoord[0].xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); + c_3.w = 0.0; + c_2.xyz = c_3.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-ir.txt new file mode 100644 index 000000000..6fb785a6f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-ir.txt @@ -0,0 +1,144 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec3 foo; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 cust_foo; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec3 tmpvar_3; + tmpvar_3 = IN_1.foo; + o_2.Albedo = tmpvar_3; +} + +vec4 LightingLambert ( + in SurfaceOutput s_4, + in vec3 lightDir_5, + in float atten_6 +) +{ + vec4 c_7; + float diff_8; + float tmpvar_9; + tmpvar_9 = dot (s_4.Normal, lightDir_5); + float tmpvar_10; + tmpvar_10 = max (0.0, tmpvar_9); + float tmpvar_11; + tmpvar_11 = tmpvar_10; + diff_8 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = ((s_4.Albedo * _LightColor0.xyz) * ((diff_8 * atten_6) * 2.0)); + c_7.xyz = tmpvar_12.xyz.xyz; + float tmpvar_13; + tmpvar_13 = s_4.Alpha; + c_7.w = vec4(tmpvar_13).w; + return c_7; +} + +vec4 frag_surf ( + in v2f_surf IN_14 +) +{ + vec4 c_15; + vec3 lightDir_16; + SurfaceOutput o_17; + Input surfIN_18; + vec3 tmpvar_19; + tmpvar_19 = IN_14.cust_foo; + surfIN_18.foo = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(0.0, 0.0, 0.0); + o_17.Albedo = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_17.Emission = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_17.Specular = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_17.Alpha = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_17.Gloss = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = IN_14.normal; + o_17.Normal = tmpvar_25; + surf (surfIN_18, o_17); + vec3 tmpvar_26; + tmpvar_26 = IN_14.lightDir; + lightDir_16 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_LightTexture0, IN_14._LightCoord); + vec4 tmpvar_28; + tmpvar_28 = LightingLambert (o_17, lightDir_16, (tmpvar_27.w * 1.0)); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + c_15 = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + c_15.w = vec4(tmpvar_30).w; + return c_15; +} + +void main () +{ + v2f_surf xlt_IN_31; + vec4 xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_31.pos = tmpvar_33; + float tmpvar_34; + tmpvar_34 = xlv_FOG.x; + xlt_IN_31.fog = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = gl_TexCoord[0].xyz; + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_IN_31.cust_foo = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_TexCoord[1].xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_IN_31.normal = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = gl_TexCoord[2].xyz; + vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_31.lightDir = tmpvar_40; + vec2 tmpvar_41; + tmpvar_41 = gl_TexCoord[3].xy; + vec2 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_31._LightCoord = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = frag_surf (xlt_IN_31); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_32 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_32.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_FragData[0] = tmpvar_46; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-out.txt new file mode 100644 index 000000000..f90d1ff93 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data1-out.txt @@ -0,0 +1,13 @@ +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec4 c_1; + vec4 c_2; + c_2.xyz = ((gl_TexCoord[0].xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_2.w = 0.0; + c_1.xyz = c_2.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Custom_Data2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-ir.txt new file mode 100644 index 000000000..59b85f687 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-ir.txt @@ -0,0 +1,270 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec3 foo; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 cust_foo; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _LightBuffer; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + vec3 tmpvar_35; + tmpvar_35 = IN_33.foo; + o_34.Albedo = tmpvar_35; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_36, + in vec4 light_37 +) +{ + vec4 c_38; + vec3 tmpvar_39; + tmpvar_39 = (s_36.Albedo * light_37.xyz); + c_38.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = s_36.Alpha; + c_38.w = vec4(tmpvar_40).w; + return c_38; +} + +vec3 DecodeLightmap ( + in vec4 color_41 +) +{ + return (2.0 * color_41.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_42 +) +{ + vec4 col_43; + vec3 lm_44; + vec3 lmIndirect_45; + vec3 lmFull_46; + vec4 light_47; + SurfaceOutput o_48; + Input surfIN_49; + vec3 tmpvar_50; + tmpvar_50 = IN_42.cust_foo; + surfIN_49.foo = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + o_48.Albedo = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = vec3(0.0, 0.0, 0.0); + o_48.Emission = tmpvar_52; + float tmpvar_53; + tmpvar_53 = 0.0; + o_48.Specular = tmpvar_53; + float tmpvar_54; + tmpvar_54 = 0.0; + o_48.Alpha = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 0.0; + o_48.Gloss = tmpvar_55; + surf (surfIN_49, o_48); + vec4 tmpvar_56; + tmpvar_56 = texture2DProj (_LightBuffer, IN_42.hip_screen); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + light_47 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = log2 (light_47); + vec4 tmpvar_59; + tmpvar_59 = -(tmpvar_58); + light_47 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = texture2D (unity_Lightmap, IN_42.hip_lmapFade.xy); + vec3 tmpvar_61; + tmpvar_61 = DecodeLightmap (tmpvar_60); + vec3 tmpvar_62; + tmpvar_62 = tmpvar_61; + lmFull_46 = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = texture2D (unity_LightmapInd, IN_42.hip_lmapFade.xy); + vec3 tmpvar_64; + tmpvar_64 = DecodeLightmap (tmpvar_63); + vec3 tmpvar_65; + tmpvar_65 = tmpvar_64; + lmIndirect_45 = tmpvar_65; + float tmpvar_66; + tmpvar_66 = xll_saturate (IN_42.hip_lmapFade.z); + vec3 tmpvar_67; + tmpvar_67 = vec3(tmpvar_66); + vec3 tmpvar_68; + tmpvar_68 = mix (lmIndirect_45, lmFull_46, tmpvar_67); + vec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + lm_44 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = (light_47.xyz + lm_44); + light_47.xyz = tmpvar_70.xyz.xyz; + vec4 tmpvar_71; + tmpvar_71 = LightingLambert_PrePass (o_48, light_47); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + col_43 = tmpvar_72; + return col_43; +} + +void main () +{ + v2f_surf xlt_IN_73; + vec4 xl_retval_74; + vec4 tmpvar_75; + tmpvar_75 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_73.pos = tmpvar_75; + float tmpvar_76; + tmpvar_76 = xlv_FOG.x; + xlt_IN_73.fog = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = gl_TexCoord[0].xyz; + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_IN_73.cust_foo = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = gl_TexCoord[1].xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + xlt_IN_73.hip_screen = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = gl_TexCoord[2].xyz; + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_IN_73.hip_lmapFade = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = frag_surf (xlt_IN_73); + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + xl_retval_74 = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = xl_retval_74.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + gl_FragData[0] = tmpvar_86; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-out.txt new file mode 100644 index 000000000..6041eef2b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Custom_Data2-out.txt @@ -0,0 +1,18 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _LightBuffer; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_3.w; + light_2.xyz = (tmpvar_3.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_4; + c_4.xyz = (gl_TexCoord[0].xyz * light_2.xyz); + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAdd-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-ir.txt new file mode 100644 index 000000000..a50257b62 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-ir.txt @@ -0,0 +1,147 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, IN_1.uv_MainTex); + vec3 tmpvar_4; + tmpvar_4 = (tmpvar_3.xyz * 0.5); + o_2.Albedo = tmpvar_4; +} + +vec4 LightingLambert ( + in SurfaceOutput s_5, + in vec3 lightDir_6, + in float atten_7 +) +{ + vec4 c_8; + float diff_9; + float tmpvar_10; + tmpvar_10 = dot (s_5.Normal, lightDir_6); + float tmpvar_11; + tmpvar_11 = max (0.0, tmpvar_10); + float tmpvar_12; + tmpvar_12 = tmpvar_11; + diff_9 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = ((s_5.Albedo * _LightColor0.xyz) * ((diff_9 * atten_7) * 2.0)); + c_8.xyz = tmpvar_13.xyz.xyz; + float tmpvar_14; + tmpvar_14 = s_5.Alpha; + c_8.w = vec4(tmpvar_14).w; + return c_8; +} + +vec4 frag_surf ( + in v2f_surf IN_15 +) +{ + vec4 c_16; + vec3 lightDir_17; + SurfaceOutput o_18; + Input surfIN_19; + vec2 tmpvar_20; + tmpvar_20 = IN_15.hip_pack0.xy; + surfIN_19.uv_MainTex = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_18.Albedo = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(0.0, 0.0, 0.0); + o_18.Emission = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_18.Specular = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_18.Alpha = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_18.Gloss = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = IN_15.normal; + o_18.Normal = tmpvar_26; + surf (surfIN_19, o_18); + vec3 tmpvar_27; + tmpvar_27 = IN_15.lightDir; + lightDir_17 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = texture2D (_LightTexture0, IN_15._LightCoord); + vec4 tmpvar_29; + tmpvar_29 = LightingLambert (o_18, lightDir_17, (tmpvar_28.w * 1.0)); + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + c_16 = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + c_16.w = vec4(tmpvar_31).w; + return c_16; +} + +void main () +{ + v2f_surf xlt_IN_32; + vec4 xl_retval_33; + vec4 tmpvar_34; + tmpvar_34 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_32.pos = tmpvar_34; + float tmpvar_35; + tmpvar_35 = xlv_FOG.x; + xlt_IN_32.fog = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = gl_TexCoord[0].xy; + vec2 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_IN_32.hip_pack0 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = gl_TexCoord[1].xyz; + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_IN_32.normal = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = gl_TexCoord[2].xyz; + vec3 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_IN_32.lightDir = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = gl_TexCoord[3].xy; + vec2 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_IN_32._LightCoord = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = frag_surf (xlt_IN_32); + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_33 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_33.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_FragData[0] = tmpvar_47; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-out.txt new file mode 100644 index 000000000..cd015222b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAdd-out.txt @@ -0,0 +1,14 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec4 c_1; + vec4 c_2; + c_2.xyz = (((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * 0.5) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_2.w = 0.0; + c_1.xyz = c_2.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump3-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-ir.txt new file mode 100644 index 000000000..5aff9d570 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-ir.txt @@ -0,0 +1,187 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_Decal; + vec2 uv_DecalBump; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 vlight; + vec4 _ShadowCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightColor0; +uniform sampler2D _DecalBump; +uniform sampler2D _Decal; +float unitySampleShadow ( + in vec4 shadowCoord_1 +) +{ + float shadow_2; + vec4 tmpvar_3; + tmpvar_3 = texture2DProj (_ShadowMapTexture, shadowCoord_1); + float tmpvar_4; + tmpvar_4 = tmpvar_3.x; + shadow_2 = tmpvar_4; + return shadow_2; +} + +vec4 UnpackNormal ( + in vec4 packednormal_5 +) +{ + vec4 normal_6; + vec2 tmpvar_7; + tmpvar_7 = ((packednormal_5.wy * 2.0) - 1.0); + normal_6.xy = tmpvar_7.xy.xy; + float tmpvar_8; + tmpvar_8 = sqrt (((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + float tmpvar_9; + tmpvar_9 = tmpvar_8; + normal_6.z = vec3(tmpvar_9).z; + return normal_6; +} + +void surf ( + in Input IN_10, + inout SurfaceOutput o_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = texture2D (_Decal, IN_10.uv_Decal); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12.xyz * 0.5); + o_11.Albedo = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_DecalBump, IN_10.uv_DecalBump); + vec4 tmpvar_15; + tmpvar_15 = UnpackNormal (tmpvar_14); + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15.xyz; + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_11.Normal = tmpvar_17; +} + +vec4 LightingLambert ( + in SurfaceOutput s_18, + in vec3 lightDir_19, + in float atten_20 +) +{ + vec4 c_21; + float diff_22; + float tmpvar_23; + tmpvar_23 = dot (s_18.Normal, lightDir_19); + float tmpvar_24; + tmpvar_24 = max (0.0, tmpvar_23); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + diff_22 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = ((s_18.Albedo * _LightColor0.xyz) * ((diff_22 * atten_20) * 2.0)); + c_21.xyz = tmpvar_26.xyz.xyz; + float tmpvar_27; + tmpvar_27 = s_18.Alpha; + c_21.w = vec4(tmpvar_27).w; + return c_21; +} + +vec4 frag_surf ( + in v2f_surf IN_28 +) +{ + vec4 c_29; + float atten_30; + SurfaceOutput o_31; + Input surfIN_32; + vec2 tmpvar_33; + tmpvar_33 = IN_28.hip_pack0.xy; + surfIN_32.uv_Decal = tmpvar_33; + vec2 tmpvar_34; + tmpvar_34 = IN_28.hip_pack0.zw; + surfIN_32.uv_DecalBump = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = vec3(0.0, 0.0, 0.0); + o_31.Albedo = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = vec3(0.0, 0.0, 0.0); + o_31.Emission = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_31.Specular = tmpvar_37; + float tmpvar_38; + tmpvar_38 = 0.0; + o_31.Alpha = tmpvar_38; + float tmpvar_39; + tmpvar_39 = 0.0; + o_31.Gloss = tmpvar_39; + surf (surfIN_32, o_31); + float tmpvar_40; + tmpvar_40 = unitySampleShadow (IN_28._ShadowCoord); + float tmpvar_41; + tmpvar_41 = tmpvar_40; + atten_30 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = LightingLambert (o_31, IN_28.lightDir, atten_30); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + c_29 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = (c_29.xyz + (o_31.Albedo * IN_28.vlight)); + c_29.xyz = tmpvar_44.xyz.xyz; + return c_29; +} + +void main () +{ + v2f_surf xlt_IN_45; + vec4 xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_45.pos = tmpvar_47; + float tmpvar_48; + tmpvar_48 = xlv_FOG.x; + xlt_IN_45.fog = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_TexCoord[0].xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_45.hip_pack0 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_45.lightDir = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[2].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_45.vlight = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = gl_TexCoord[3].xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_45._ShadowCoord = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = frag_surf (xlt_IN_45); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xl_retval_46 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = xl_retval_46.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_FragData[0] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-out.txt new file mode 100644 index 000000000..1aa0d8aa3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump3-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D _ShadowMapTexture; +uniform vec4 _LightColor0; +uniform sampler2D _DecalBump; +uniform sampler2D _Decal; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec3 tmpvar_3; + tmpvar_3 = (texture2D (_Decal, tmpvar_1.xy).xyz * 0.5); + vec4 normal_4; + normal_4.xy = ((texture2D (_DecalBump, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 c_5; + c_5.xyz = ((tmpvar_3 * _LightColor0.xyz) * ((max (0.0, dot (normal_4.xyz, gl_TexCoord[1].xyz)) * texture2DProj (_ShadowMapTexture, gl_TexCoord[3]).x) * 2.0)); + c_5.w = 0.0; + c_2.w = c_5.w; + c_2.xyz = (c_5.xyz + (tmpvar_3 * gl_TexCoord[2].xyz)); + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_DecalAddBump5-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-ir.txt new file mode 100644 index 000000000..658b945d9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-ir.txt @@ -0,0 +1,179 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_Decal; + vec2 uv_DecalBump; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _DecalBump; +uniform sampler2D _Decal; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = texture2D (_Decal, IN_6.uv_Decal); + vec3 tmpvar_9; + tmpvar_9 = (tmpvar_8.xyz * 0.5); + o_7.Albedo = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_DecalBump, IN_6.uv_DecalBump); + vec4 tmpvar_11; + tmpvar_11 = UnpackNormal (tmpvar_10); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11.xyz; + vec3 tmpvar_13; + tmpvar_13 = tmpvar_12; + o_7.Normal = tmpvar_13; +} + +vec4 LightingLambert ( + in SurfaceOutput s_14, + in vec3 lightDir_15, + in float atten_16 +) +{ + vec4 c_17; + float diff_18; + float tmpvar_19; + tmpvar_19 = dot (s_14.Normal, lightDir_15); + float tmpvar_20; + tmpvar_20 = max (0.0, tmpvar_19); + float tmpvar_21; + tmpvar_21 = tmpvar_20; + diff_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = ((s_14.Albedo * _LightColor0.xyz) * ((diff_18 * atten_16) * 2.0)); + c_17.xyz = tmpvar_22.xyz.xyz; + float tmpvar_23; + tmpvar_23 = s_14.Alpha; + c_17.w = vec4(tmpvar_23).w; + return c_17; +} + +vec4 frag_surf ( + in v2f_surf IN_24 +) +{ + vec4 c_25; + vec3 lightDir_26; + SurfaceOutput o_27; + Input surfIN_28; + vec2 tmpvar_29; + tmpvar_29 = IN_24.hip_pack0.xy; + surfIN_28.uv_Decal = tmpvar_29; + vec2 tmpvar_30; + tmpvar_30 = IN_24.hip_pack0.zw; + surfIN_28.uv_DecalBump = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_27.Albedo = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_27.Emission = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_27.Specular = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_27.Alpha = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_27.Gloss = tmpvar_35; + surf (surfIN_28, o_27); + vec3 tmpvar_36; + tmpvar_36 = IN_24.lightDir; + lightDir_26 = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = normalize (lightDir_26); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + lightDir_26 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = dot (IN_24._LightCoord, IN_24._LightCoord); + vec2 tmpvar_40; + tmpvar_40 = vec2(tmpvar_39); + vec2 tmpvar_41; + tmpvar_41 = tmpvar_40.xy; + vec4 tmpvar_42; + tmpvar_42 = texture2D (_LightTexture0, tmpvar_41); + vec4 tmpvar_43; + tmpvar_43 = LightingLambert (o_27, lightDir_26, tmpvar_42.w); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + c_25 = tmpvar_44; + float tmpvar_45; + tmpvar_45 = 0.0; + c_25.w = vec4(tmpvar_45).w; + return c_25; +} + +void main () +{ + v2f_surf xlt_IN_46; + vec4 xl_retval_47; + vec4 tmpvar_48; + tmpvar_48 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_46.pos = tmpvar_48; + float tmpvar_49; + tmpvar_49 = xlv_FOG.x; + xlt_IN_46.fog = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = gl_TexCoord[0].xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_46.hip_pack0 = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = gl_TexCoord[1].xyz; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_46.lightDir = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = gl_TexCoord[2].xyz; + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_46._LightCoord = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = frag_surf (xlt_IN_46); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xl_retval_47 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = xl_retval_47.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_FragData[0] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-out.txt new file mode 100644 index 000000000..4ba073d3c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_DecalAddBump5-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _DecalBump; +uniform sampler2D _Decal; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 c_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_DecalBump, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 c_5; + c_5.xyz = (((texture2D (_Decal, tmpvar_1.xy).xyz * 0.5) * _LightColor0.xyz) * ((max (0.0, dot (normal_4.xyz, normalize(gl_TexCoord[1].xyz))) * texture2D (_LightTexture0, vec2(dot (tmpvar_2, tmpvar_2))).w) * 2.0)); + c_5.w = 0.0; + c_3.xyz = c_5.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Diffuse_Wrapped-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-ir.txt new file mode 100644 index 000000000..c3015568b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-ir.txt @@ -0,0 +1,149 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, IN_1.uv_MainTex); + vec3 tmpvar_4; + tmpvar_4 = tmpvar_3.xyz; + o_2.Albedo = tmpvar_4; +} + +vec4 LightingWrapLambert ( + in SurfaceOutput s_5, + in vec3 lightDir_6, + in float atten_7 +) +{ + vec4 c_8; + float diff_9; + float NdotL_10; + float tmpvar_11; + tmpvar_11 = dot (s_5.Normal, lightDir_6); + float tmpvar_12; + tmpvar_12 = tmpvar_11; + NdotL_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = ((NdotL_10 * 0.5) + 0.5); + diff_9 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = ((s_5.Albedo * _LightColor0.xyz) * ((diff_9 * atten_7) * 2.0)); + c_8.xyz = tmpvar_14.xyz.xyz; + float tmpvar_15; + tmpvar_15 = s_5.Alpha; + c_8.w = vec4(tmpvar_15).w; + return c_8; +} + +vec4 frag_surf ( + in v2f_surf IN_16 +) +{ + vec4 c_17; + vec3 lightDir_18; + SurfaceOutput o_19; + Input surfIN_20; + vec2 tmpvar_21; + tmpvar_21 = IN_16.hip_pack0.xy; + surfIN_20.uv_MainTex = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(0.0, 0.0, 0.0); + o_19.Albedo = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = vec3(0.0, 0.0, 0.0); + o_19.Emission = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_19.Specular = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_19.Alpha = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_19.Gloss = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = IN_16.normal; + o_19.Normal = tmpvar_27; + surf (surfIN_20, o_19); + vec3 tmpvar_28; + tmpvar_28 = IN_16.lightDir; + lightDir_18 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_LightTexture0, IN_16._LightCoord); + vec4 tmpvar_30; + tmpvar_30 = LightingWrapLambert (o_19, lightDir_18, (tmpvar_29.w * 1.0)); + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + c_17 = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + c_17.w = vec4(tmpvar_32).w; + return c_17; +} + +void main () +{ + v2f_surf xlt_IN_33; + vec4 xl_retval_34; + vec4 tmpvar_35; + tmpvar_35 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_33.pos = tmpvar_35; + float tmpvar_36; + tmpvar_36 = xlv_FOG.x; + xlt_IN_33.fog = tmpvar_36; + vec2 tmpvar_37; + tmpvar_37 = gl_TexCoord[0].xy; + vec2 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_IN_33.hip_pack0 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = gl_TexCoord[1].xyz; + vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_33.normal = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_TexCoord[2].xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_33.lightDir = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43 = gl_TexCoord[3].xy; + vec2 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_33._LightCoord = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = frag_surf (xlt_IN_33); + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xl_retval_34 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = xl_retval_34.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_FragData[0] = tmpvar_48; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-out.txt new file mode 100644 index 000000000..90f44341c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Diffuse_Wrapped-out.txt @@ -0,0 +1,14 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec4 c_1; + vec4 c_2; + c_2.xyz = ((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _LightColor0.xyz) * ((((dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz) * 0.5) + 0.5) * texture2D (_LightTexture0, gl_TexCoord[3].xy).w) * 2.0)); + c_2.w = 0.0; + c_1.xyz = c_2.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-ir.txt new file mode 100644 index 000000000..a7f82671c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-ir.txt @@ -0,0 +1,261 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; +}; +varying vec4 xlv_FOG; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + float rim_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec3 tmpvar_37; + tmpvar_37 = tmpvar_36.xyz; + o_34.Albedo = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = normalize (IN_33.viewDir); + float tmpvar_39; + tmpvar_39 = dot (tmpvar_38, o_34.Normal); + float tmpvar_40; + tmpvar_40 = xll_saturate (tmpvar_39); + float tmpvar_41; + tmpvar_41 = (1.0 - tmpvar_40); + rim_35 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = pow (rim_35, _RimPower); + vec3 tmpvar_43; + tmpvar_43 = (_RimColor.xyz * tmpvar_42); + o_34.Emission = tmpvar_43; +} + +vec4 LightingLambert ( + in SurfaceOutput s_44, + in vec3 lightDir_45, + in float atten_46 +) +{ + vec4 c_47; + float diff_48; + float tmpvar_49; + tmpvar_49 = dot (s_44.Normal, lightDir_45); + float tmpvar_50; + tmpvar_50 = max (0.0, tmpvar_49); + float tmpvar_51; + tmpvar_51 = tmpvar_50; + diff_48 = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = ((s_44.Albedo * _LightColor0.xyz) * ((diff_48 * atten_46) * 2.0)); + c_47.xyz = tmpvar_52.xyz.xyz; + float tmpvar_53; + tmpvar_53 = s_44.Alpha; + c_47.w = vec4(tmpvar_53).w; + return c_47; +} + +vec4 frag_surf ( + in v2f_surf IN_54 +) +{ + vec4 c_55; + vec3 lightDir_56; + SurfaceOutput o_57; + Input surfIN_58; + vec2 tmpvar_59; + tmpvar_59 = IN_54.hip_pack0.xy; + surfIN_58.uv_MainTex = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = vec3(0.0, 0.0, 0.0); + o_57.Albedo = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_57.Emission = tmpvar_61; + float tmpvar_62; + tmpvar_62 = 0.0; + o_57.Specular = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_57.Alpha = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_57.Gloss = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = IN_54.normal; + o_57.Normal = tmpvar_65; + surf (surfIN_58, o_57); + vec3 tmpvar_66; + tmpvar_66 = IN_54.lightDir; + lightDir_56 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = LightingLambert (o_57, lightDir_56, 1.0); + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + c_55 = tmpvar_68; + float tmpvar_69; + tmpvar_69 = 0.0; + c_55.w = vec4(tmpvar_69).w; + return c_55; +} + +void main () +{ + v2f_surf xlt_IN_70; + vec4 xl_retval_71; + vec4 tmpvar_72; + tmpvar_72 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_70.pos = tmpvar_72; + float tmpvar_73; + tmpvar_73 = xlv_FOG.x; + xlt_IN_70.fog = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = gl_TexCoord[0].xy; + vec2 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_70.hip_pack0 = tmpvar_75; + vec3 tmpvar_76; + tmpvar_76 = gl_TexCoord[1].xyz; + vec3 tmpvar_77; + tmpvar_77 = tmpvar_76; + xlt_IN_70.normal = tmpvar_77; + vec3 tmpvar_78; + tmpvar_78 = gl_TexCoord[2].xyz; + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + xlt_IN_70.lightDir = tmpvar_79; + vec4 tmpvar_80; + tmpvar_80 = frag_surf (xlt_IN_70); + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + xl_retval_71 = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = xl_retval_71.xyzw; + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + gl_FragData[0] = tmpvar_83; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-out.txt new file mode 100644 index 000000000..bc056d4c0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim-out.txt @@ -0,0 +1,13 @@ +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +void main () +{ + vec4 c_1; + vec4 c_2; + c_2.xyz = ((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * 2.0)); + c_2.w = 0.0; + c_1.xyz = c_2.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-ir.txt new file mode 100644 index 000000000..641bd40a0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-ir.txt @@ -0,0 +1,272 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec3 normal; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + float rim_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec3 tmpvar_37; + tmpvar_37 = tmpvar_36.xyz; + o_34.Albedo = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = normalize (IN_33.viewDir); + float tmpvar_39; + tmpvar_39 = dot (tmpvar_38, o_34.Normal); + float tmpvar_40; + tmpvar_40 = xll_saturate (tmpvar_39); + float tmpvar_41; + tmpvar_41 = (1.0 - tmpvar_40); + rim_35 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = pow (rim_35, _RimPower); + vec3 tmpvar_43; + tmpvar_43 = (_RimColor.xyz * tmpvar_42); + o_34.Emission = tmpvar_43; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_44, + in vec4 light_45 +) +{ + vec4 c_46; + vec3 tmpvar_47; + tmpvar_47 = (s_44.Albedo * light_45.xyz); + c_46.xyz = tmpvar_47.xyz.xyz; + float tmpvar_48; + tmpvar_48 = s_44.Alpha; + c_46.w = vec4(tmpvar_48).w; + return c_46; +} + +vec4 frag_surf ( + in v2f_surf IN_49 +) +{ + vec4 col_50; + vec4 light_51; + SurfaceOutput o_52; + Input surfIN_53; + vec2 tmpvar_54; + tmpvar_54 = IN_49.hip_pack0.xy; + surfIN_53.uv_MainTex = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = IN_49.viewDir; + surfIN_53.viewDir = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_52.Albedo = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = vec3(0.0, 0.0, 0.0); + o_52.Emission = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_52.Specular = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_52.Alpha = tmpvar_59; + float tmpvar_60; + tmpvar_60 = 0.0; + o_52.Gloss = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = IN_49.normal; + o_52.Normal = tmpvar_61; + surf (surfIN_53, o_52); + vec4 tmpvar_62; + tmpvar_62 = texture2DProj (_LightBuffer, IN_49.hip_screen); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + light_51 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = log2 (light_51); + vec4 tmpvar_65; + tmpvar_65 = -(tmpvar_64); + light_51 = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = (light_51.xyz + unity_Ambient.xyz); + light_51.xyz = tmpvar_66.xyz.xyz; + vec4 tmpvar_67; + tmpvar_67 = LightingLambert_PrePass (o_52, light_51); + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + col_50 = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = (col_50.xyz + o_52.Emission); + col_50.xyz = tmpvar_69.xyz.xyz; + return col_50; +} + +void main () +{ + v2f_surf xlt_IN_70; + vec4 xl_retval_71; + vec4 tmpvar_72; + tmpvar_72 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_70.pos = tmpvar_72; + float tmpvar_73; + tmpvar_73 = xlv_FOG.x; + xlt_IN_70.fog = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = gl_TexCoord[0].xy; + vec2 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_70.hip_pack0 = tmpvar_75; + vec3 tmpvar_76; + tmpvar_76 = gl_TexCoord[1].xyz; + vec3 tmpvar_77; + tmpvar_77 = tmpvar_76; + xlt_IN_70.viewDir = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = gl_TexCoord[2].xyzw; + vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + xlt_IN_70.hip_screen = tmpvar_79; + vec3 tmpvar_80; + tmpvar_80 = gl_TexCoord[3].xyz; + vec3 tmpvar_81; + tmpvar_81 = tmpvar_80; + xlt_IN_70.normal = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = frag_surf (xlt_IN_70); + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + xl_retval_71 = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = xl_retval_71.xyzw; + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + gl_FragData[0] = tmpvar_85; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-out.txt new file mode 100644 index 000000000..b526cce70 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim1-out.txt @@ -0,0 +1,21 @@ +uniform vec4 unity_Ambient; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void main () +{ + vec4 col_1; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_2.w = tmpvar_3.w; + light_2.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); + vec4 c_4; + c_4.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * light_2.xyz); + c_4.w = 0.0; + col_1.w = c_4.w; + col_1.xyz = (c_4.xyz + (_RimColor.xyz * pow ((1.0 - clamp (dot (normalize(gl_TexCoord[1].xyz), gl_TexCoord[3].xyz), 0.0, 1.0)), _RimPower))); + gl_FragData[0] = col_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-ir.txt new file mode 100644 index 000000000..ff4ab9104 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-ir.txt @@ -0,0 +1,312 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec3 normal; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +void surf ( + in Input IN_33, + inout SurfaceOutput o_34 +) +{ + float rim_35; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_MainTex, IN_33.uv_MainTex); + vec3 tmpvar_37; + tmpvar_37 = tmpvar_36.xyz; + o_34.Albedo = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = normalize (IN_33.viewDir); + float tmpvar_39; + tmpvar_39 = dot (tmpvar_38, o_34.Normal); + float tmpvar_40; + tmpvar_40 = xll_saturate (tmpvar_39); + float tmpvar_41; + tmpvar_41 = (1.0 - tmpvar_40); + rim_35 = tmpvar_41; + float tmpvar_42; + tmpvar_42 = pow (rim_35, _RimPower); + vec3 tmpvar_43; + tmpvar_43 = (_RimColor.xyz * tmpvar_42); + o_34.Emission = tmpvar_43; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_44, + in vec4 light_45 +) +{ + vec4 c_46; + vec3 tmpvar_47; + tmpvar_47 = (s_44.Albedo * light_45.xyz); + c_46.xyz = tmpvar_47.xyz.xyz; + float tmpvar_48; + tmpvar_48 = s_44.Alpha; + c_46.w = vec4(tmpvar_48).w; + return c_46; +} + +vec3 DecodeLightmap ( + in vec4 color_49 +) +{ + return (2.0 * color_49.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_50 +) +{ + vec4 col_51; + vec3 lm_52; + vec3 lmIndirect_53; + vec3 lmFull_54; + vec4 light_55; + SurfaceOutput o_56; + Input surfIN_57; + vec2 tmpvar_58; + tmpvar_58 = IN_50.hip_pack0.xy; + surfIN_57.uv_MainTex = tmpvar_58; + vec3 tmpvar_59; + tmpvar_59 = IN_50.viewDir; + surfIN_57.viewDir = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = vec3(0.0, 0.0, 0.0); + o_56.Albedo = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_56.Emission = tmpvar_61; + float tmpvar_62; + tmpvar_62 = 0.0; + o_56.Specular = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_56.Alpha = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_56.Gloss = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = IN_50.normal; + o_56.Normal = tmpvar_65; + surf (surfIN_57, o_56); + vec4 tmpvar_66; + tmpvar_66 = texture2DProj (_LightBuffer, IN_50.hip_screen); + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + light_55 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = log2 (light_55); + vec4 tmpvar_69; + tmpvar_69 = -(tmpvar_68); + light_55 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = texture2D (unity_Lightmap, IN_50.hip_lmapFade.xy); + vec3 tmpvar_71; + tmpvar_71 = DecodeLightmap (tmpvar_70); + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + lmFull_54 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = texture2D (unity_LightmapInd, IN_50.hip_lmapFade.xy); + vec3 tmpvar_74; + tmpvar_74 = DecodeLightmap (tmpvar_73); + vec3 tmpvar_75; + tmpvar_75 = tmpvar_74; + lmIndirect_53 = tmpvar_75; + float tmpvar_76; + tmpvar_76 = xll_saturate (IN_50.hip_lmapFade.z); + vec3 tmpvar_77; + tmpvar_77 = vec3(tmpvar_76); + vec3 tmpvar_78; + tmpvar_78 = mix (lmIndirect_53, lmFull_54, tmpvar_77); + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + lm_52 = tmpvar_79; + vec3 tmpvar_80; + tmpvar_80 = (light_55.xyz + lm_52); + light_55.xyz = tmpvar_80.xyz.xyz; + vec4 tmpvar_81; + tmpvar_81 = LightingLambert_PrePass (o_56, light_55); + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + col_51 = tmpvar_82; + vec3 tmpvar_83; + tmpvar_83 = (col_51.xyz + o_56.Emission); + col_51.xyz = tmpvar_83.xyz.xyz; + return col_51; +} + +void main () +{ + v2f_surf xlt_IN_84; + vec4 xl_retval_85; + vec4 tmpvar_86; + tmpvar_86 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_84.pos = tmpvar_86; + float tmpvar_87; + tmpvar_87 = xlv_FOG.x; + xlt_IN_84.fog = tmpvar_87; + vec2 tmpvar_88; + tmpvar_88 = gl_TexCoord[0].xy; + vec2 tmpvar_89; + tmpvar_89 = tmpvar_88; + xlt_IN_84.hip_pack0 = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = gl_TexCoord[1].xyz; + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_84.viewDir = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92 = gl_TexCoord[2].xyzw; + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_84.hip_screen = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = gl_TexCoord[3].xyz; + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_84.normal = tmpvar_95; + vec3 tmpvar_96; + tmpvar_96 = gl_TexCoord[4].xyz; + vec3 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_84.hip_lmapFade = tmpvar_97; + vec4 tmpvar_98; + tmpvar_98 = frag_surf (xlt_IN_84); + vec4 tmpvar_99; + tmpvar_99 = tmpvar_98; + xl_retval_85 = tmpvar_99; + vec4 tmpvar_100; + tmpvar_100 = xl_retval_85.xyzw; + vec4 tmpvar_101; + tmpvar_101 = tmpvar_100; + gl_FragData[0] = tmpvar_101; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-out.txt new file mode 100644 index 000000000..b5c1b7b5d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim2-out.txt @@ -0,0 +1,24 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[4].xyz; + vec4 col_2; + vec4 light_3; + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_3.w = tmpvar_4.w; + light_3.xyz = (tmpvar_4.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_5; + c_5.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * light_3.xyz); + c_5.w = 0.0; + col_2.w = c_5.w; + col_2.xyz = (c_5.xyz + (_RimColor.xyz * pow ((1.0 - clamp (dot (normalize(gl_TexCoord[1].xyz), gl_TexCoord[3].xyz), 0.0, 1.0)), _RimPower))); + gl_FragData[0] = col_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-ir.txt new file mode 100644 index 000000000..9221c1dab --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-ir.txt @@ -0,0 +1,319 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_BumpMap; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _BumpMap; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec4 UnpackNormal ( + in vec4 packednormal_33 +) +{ + vec4 normal_34; + vec2 tmpvar_35; + tmpvar_35 = ((packednormal_33.wy * 2.0) - 1.0); + normal_34.xy = tmpvar_35.xy.xy; + float tmpvar_36; + tmpvar_36 = sqrt (((1.0 - (normal_34.x * normal_34.x)) - (normal_34.y * normal_34.y))); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + normal_34.z = vec3(tmpvar_37).z; + return normal_34; +} + +void surf ( + in Input IN_38, + inout SurfaceOutput o_39 +) +{ + float rim_40; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_MainTex, IN_38.uv_BumpMap); + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41.xyz; + o_39.Albedo = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = texture2D (_BumpMap, IN_38.uv_BumpMap); + vec4 tmpvar_44; + tmpvar_44 = UnpackNormal (tmpvar_43); + vec3 tmpvar_45; + tmpvar_45 = tmpvar_44.xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + o_39.Normal = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = normalize (IN_38.viewDir); + float tmpvar_48; + tmpvar_48 = dot (tmpvar_47, o_39.Normal); + float tmpvar_49; + tmpvar_49 = xll_saturate (tmpvar_48); + float tmpvar_50; + tmpvar_50 = (1.0 - tmpvar_49); + rim_40 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = pow (rim_40, _RimPower); + vec3 tmpvar_52; + tmpvar_52 = (_RimColor.xyz * tmpvar_51); + o_39.Emission = tmpvar_52; +} + +float UnitySpotCookie ( + in vec4 LightCoord_53 +) +{ + vec4 tmpvar_54; + tmpvar_54 = texture2D (_LightTexture0, ((LightCoord_53.xy / LightCoord_53.w) + 0.5)); + return tmpvar_54.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_55 +) +{ + float tmpvar_56; + tmpvar_56 = dot (LightCoord_55, LightCoord_55); + vec2 tmpvar_57; + tmpvar_57 = vec2(tmpvar_56); + vec2 tmpvar_58; + tmpvar_58 = tmpvar_57.xy; + vec4 tmpvar_59; + tmpvar_59 = texture2D (_LightTextureB0, tmpvar_58); + return tmpvar_59.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_60, + in vec3 lightDir_61, + in float atten_62 +) +{ + vec4 c_63; + float diff_64; + float tmpvar_65; + tmpvar_65 = dot (s_60.Normal, lightDir_61); + float tmpvar_66; + tmpvar_66 = max (0.0, tmpvar_65); + float tmpvar_67; + tmpvar_67 = tmpvar_66; + diff_64 = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = ((s_60.Albedo * _LightColor0.xyz) * ((diff_64 * atten_62) * 2.0)); + c_63.xyz = tmpvar_68.xyz.xyz; + float tmpvar_69; + tmpvar_69 = s_60.Alpha; + c_63.w = vec4(tmpvar_69).w; + return c_63; +} + +vec4 frag_surf ( + in v2f_surf IN_70 +) +{ + vec4 c_71; + vec3 lightDir_72; + SurfaceOutput o_73; + Input surfIN_74; + vec2 tmpvar_75; + tmpvar_75 = IN_70.hip_pack0.xy; + surfIN_74.uv_BumpMap = tmpvar_75; + vec3 tmpvar_76; + tmpvar_76 = vec3(0.0, 0.0, 0.0); + o_73.Albedo = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = vec3(0.0, 0.0, 0.0); + o_73.Emission = tmpvar_77; + float tmpvar_78; + tmpvar_78 = 0.0; + o_73.Specular = tmpvar_78; + float tmpvar_79; + tmpvar_79 = 0.0; + o_73.Alpha = tmpvar_79; + float tmpvar_80; + tmpvar_80 = 0.0; + o_73.Gloss = tmpvar_80; + surf (surfIN_74, o_73); + vec3 tmpvar_81; + tmpvar_81 = IN_70.lightDir; + lightDir_72 = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = normalize (lightDir_72); + vec3 tmpvar_83; + tmpvar_83 = tmpvar_82; + lightDir_72 = tmpvar_83; + float tmpvar_84; + tmpvar_84 = UnitySpotCookie (IN_70._LightCoord); + float tmpvar_85; + tmpvar_85 = UnitySpotAttenuate (IN_70._LightCoord.xyz); + vec4 tmpvar_86; + tmpvar_86 = LightingLambert (o_73, lightDir_72, ((float((IN_70._LightCoord.z > 0.0)) * tmpvar_84) * tmpvar_85)); + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + c_71 = tmpvar_87; + float tmpvar_88; + tmpvar_88 = 0.0; + c_71.w = vec4(tmpvar_88).w; + return c_71; +} + +void main () +{ + v2f_surf xlt_IN_89; + vec4 xl_retval_90; + vec4 tmpvar_91; + tmpvar_91 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_89.pos = tmpvar_91; + float tmpvar_92; + tmpvar_92 = xlv_FOG.x; + xlt_IN_89.fog = tmpvar_92; + vec2 tmpvar_93; + tmpvar_93 = gl_TexCoord[0].xy; + vec2 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlt_IN_89.hip_pack0 = tmpvar_94; + vec3 tmpvar_95; + tmpvar_95 = gl_TexCoord[1].xyz; + vec3 tmpvar_96; + tmpvar_96 = tmpvar_95; + xlt_IN_89.lightDir = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97 = gl_TexCoord[2].xyzw; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + xlt_IN_89._LightCoord = tmpvar_98; + vec4 tmpvar_99; + tmpvar_99 = frag_surf (xlt_IN_89); + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + xl_retval_90 = tmpvar_100; + vec4 tmpvar_101; + tmpvar_101 = xl_retval_90.xyzw; + vec4 tmpvar_102; + tmpvar_102 = tmpvar_101; + gl_FragData[0] = tmpvar_102; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-out.txt new file mode 100644 index 000000000..58f6b154c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump-out.txt @@ -0,0 +1,23 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _BumpMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[2]; + vec4 c_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_1).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 c_5; + c_5.xyz = ((texture2D (_MainTex, tmpvar_1).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_4.xyz, normalize(gl_TexCoord[1].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_5.w = 0.0; + c_3.xyz = c_5.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Rim_Bump1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-ir.txt new file mode 100644 index 000000000..7d846d4d2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-ir.txt @@ -0,0 +1,301 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_BumpMap; + vec3 viewDir; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform float _RimPower; +uniform vec4 _RimColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _BumpMap; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec2 xll_saturate ( + in vec2 x_3 +) +{ + vec2 tmpvar_4; + tmpvar_4 = clamp (x_3, 0.0, 1.0); + return tmpvar_4; +} + +vec3 xll_saturate ( + in vec3 x_5 +) +{ + vec3 tmpvar_6; + tmpvar_6 = clamp (x_5, 0.0, 1.0); + return tmpvar_6; +} + +vec4 xll_saturate ( + in vec4 x_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = clamp (x_7, 0.0, 1.0); + return tmpvar_8; +} + +mat2 xll_saturate ( + in mat2 m_9 +) +{ + vec2 tmpvar_10; + tmpvar_10 = clamp (m_9[0], 0.0, 1.0); + vec2 tmpvar_11; + tmpvar_11 = clamp (m_9[1], 0.0, 1.0); + mat2 tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_10; + tmpvar_12[0] = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_12[1] = tmpvar_14; + return tmpvar_12; +} + +mat3 xll_saturate ( + in mat3 m_15 +) +{ + vec3 tmpvar_16; + tmpvar_16 = clamp (m_15[0], 0.0, 1.0); + vec3 tmpvar_17; + tmpvar_17 = clamp (m_15[1], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_15[2], 0.0, 1.0); + mat3 tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_16; + tmpvar_19[0] = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_19[1] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_19[2] = tmpvar_22; + return tmpvar_19; +} + +mat4 xll_saturate ( + in mat4 m_23 +) +{ + vec4 tmpvar_24; + tmpvar_24 = clamp (m_23[0], 0.0, 1.0); + vec4 tmpvar_25; + tmpvar_25 = clamp (m_23[1], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_23[2], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_23[3], 0.0, 1.0); + mat4 tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_24; + tmpvar_28[0] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_28[1] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_28[2] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_28[3] = tmpvar_32; + return tmpvar_28; +} + +vec4 UnpackNormal ( + in vec4 packednormal_33 +) +{ + vec4 normal_34; + vec2 tmpvar_35; + tmpvar_35 = ((packednormal_33.wy * 2.0) - 1.0); + normal_34.xy = tmpvar_35.xy.xy; + float tmpvar_36; + tmpvar_36 = sqrt (((1.0 - (normal_34.x * normal_34.x)) - (normal_34.y * normal_34.y))); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + normal_34.z = vec3(tmpvar_37).z; + return normal_34; +} + +void surf ( + in Input IN_38, + inout SurfaceOutput o_39 +) +{ + float rim_40; + vec4 tmpvar_41; + tmpvar_41 = texture2D (_MainTex, IN_38.uv_BumpMap); + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41.xyz; + o_39.Albedo = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = texture2D (_BumpMap, IN_38.uv_BumpMap); + vec4 tmpvar_44; + tmpvar_44 = UnpackNormal (tmpvar_43); + vec3 tmpvar_45; + tmpvar_45 = tmpvar_44.xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + o_39.Normal = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = normalize (IN_38.viewDir); + float tmpvar_48; + tmpvar_48 = dot (tmpvar_47, o_39.Normal); + float tmpvar_49; + tmpvar_49 = xll_saturate (tmpvar_48); + float tmpvar_50; + tmpvar_50 = (1.0 - tmpvar_49); + rim_40 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = pow (rim_40, _RimPower); + vec3 tmpvar_52; + tmpvar_52 = (_RimColor.xyz * tmpvar_51); + o_39.Emission = tmpvar_52; +} + +vec4 LightingLambert ( + in SurfaceOutput s_53, + in vec3 lightDir_54, + in float atten_55 +) +{ + vec4 c_56; + float diff_57; + float tmpvar_58; + tmpvar_58 = dot (s_53.Normal, lightDir_54); + float tmpvar_59; + tmpvar_59 = max (0.0, tmpvar_58); + float tmpvar_60; + tmpvar_60 = tmpvar_59; + diff_57 = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = ((s_53.Albedo * _LightColor0.xyz) * ((diff_57 * atten_55) * 2.0)); + c_56.xyz = tmpvar_61.xyz.xyz; + float tmpvar_62; + tmpvar_62 = s_53.Alpha; + c_56.w = vec4(tmpvar_62).w; + return c_56; +} + +vec4 frag_surf ( + in v2f_surf IN_63 +) +{ + vec4 c_64; + vec3 lightDir_65; + SurfaceOutput o_66; + Input surfIN_67; + vec2 tmpvar_68; + tmpvar_68 = IN_63.hip_pack0.xy; + surfIN_67.uv_BumpMap = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = vec3(0.0, 0.0, 0.0); + o_66.Albedo = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = vec3(0.0, 0.0, 0.0); + o_66.Emission = tmpvar_70; + float tmpvar_71; + tmpvar_71 = 0.0; + o_66.Specular = tmpvar_71; + float tmpvar_72; + tmpvar_72 = 0.0; + o_66.Alpha = tmpvar_72; + float tmpvar_73; + tmpvar_73 = 0.0; + o_66.Gloss = tmpvar_73; + surf (surfIN_67, o_66); + vec3 tmpvar_74; + tmpvar_74 = IN_63.lightDir; + lightDir_65 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = normalize (lightDir_65); + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75; + lightDir_65 = tmpvar_76; + float tmpvar_77; + tmpvar_77 = dot (IN_63._LightCoord, IN_63._LightCoord); + vec2 tmpvar_78; + tmpvar_78 = vec2(tmpvar_77); + vec2 tmpvar_79; + tmpvar_79 = tmpvar_78.xy; + vec4 tmpvar_80; + tmpvar_80 = texture2D (_LightTextureB0, tmpvar_79); + vec4 tmpvar_81; + tmpvar_81 = textureCube (_LightTexture0, IN_63._LightCoord); + vec4 tmpvar_82; + tmpvar_82 = LightingLambert (o_66, lightDir_65, (tmpvar_80.w * tmpvar_81.w)); + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + c_64 = tmpvar_83; + float tmpvar_84; + tmpvar_84 = 0.0; + c_64.w = vec4(tmpvar_84).w; + return c_64; +} + +void main () +{ + v2f_surf xlt_IN_85; + vec4 xl_retval_86; + vec4 tmpvar_87; + tmpvar_87 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_85.pos = tmpvar_87; + float tmpvar_88; + tmpvar_88 = xlv_FOG.x; + xlt_IN_85.fog = tmpvar_88; + vec2 tmpvar_89; + tmpvar_89 = gl_TexCoord[0].xy; + vec2 tmpvar_90; + tmpvar_90 = tmpvar_89; + xlt_IN_85.hip_pack0 = tmpvar_90; + vec3 tmpvar_91; + tmpvar_91 = gl_TexCoord[1].xyz; + vec3 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlt_IN_85.lightDir = tmpvar_92; + vec3 tmpvar_93; + tmpvar_93 = gl_TexCoord[2].xyz; + vec3 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlt_IN_85._LightCoord = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95 = frag_surf (xlt_IN_85); + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + xl_retval_86 = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97 = xl_retval_86.xyzw; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + gl_FragData[0] = tmpvar_98; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-out.txt new file mode 100644 index 000000000..9f9299503 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Rim_Bump1-out.txt @@ -0,0 +1,23 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _BumpMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 c_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_1).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 c_5; + c_5.xyz = ((texture2D (_MainTex, tmpvar_1).xyz * _LightColor0.xyz) * ((max (0.0, dot (normal_4.xyz, normalize(gl_TexCoord[1].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w)) * 2.0)); + c_5.w = 0.0; + c_3.xyz = c_5.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-ir.txt new file mode 100644 index 000000000..84555d660 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-ir.txt @@ -0,0 +1,180 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec4 screenPos; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec2 uv_3; + vec2 tmpvar_4; + tmpvar_4 = (IN_1.screenPos.xy / IN_1.screenPos.w); + uv_3 = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = (uv_3 * vec2(2.0, 1.0)); + uv_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = vec3(0.5, 0.5, 0.5); + o_2.Albedo = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, uv_3); + vec3 tmpvar_8; + tmpvar_8 = (tmpvar_7.xyz * 0.5); + o_2.Emission = tmpvar_8; +} + +float UnitySpotCookie ( + in vec4 LightCoord_9 +) +{ + vec4 tmpvar_10; + tmpvar_10 = texture2D (_LightTexture0, ((LightCoord_9.xy / LightCoord_9.w) + 0.5)); + return tmpvar_10.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_11 +) +{ + float tmpvar_12; + tmpvar_12 = dot (LightCoord_11, LightCoord_11); + vec2 tmpvar_13; + tmpvar_13 = vec2(tmpvar_12); + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13.xy; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_LightTextureB0, tmpvar_14); + return tmpvar_15.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_16, + in vec3 lightDir_17, + in float atten_18 +) +{ + vec4 c_19; + float diff_20; + float tmpvar_21; + tmpvar_21 = dot (s_16.Normal, lightDir_17); + float tmpvar_22; + tmpvar_22 = max (0.0, tmpvar_21); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + diff_20 = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = ((s_16.Albedo * _LightColor0.xyz) * ((diff_20 * atten_18) * 2.0)); + c_19.xyz = tmpvar_24.xyz.xyz; + float tmpvar_25; + tmpvar_25 = s_16.Alpha; + c_19.w = vec4(tmpvar_25).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_26 +) +{ + vec4 c_27; + vec3 lightDir_28; + Input surfIN_29; + SurfaceOutput o_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_30.Albedo = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_30.Emission = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_30.Specular = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_30.Alpha = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_30.Gloss = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = IN_26.normal; + o_30.Normal = tmpvar_36; + surf (surfIN_29, o_30); + vec3 tmpvar_37; + tmpvar_37 = IN_26.lightDir; + lightDir_28 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = normalize (lightDir_28); + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + lightDir_28 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = UnitySpotCookie (IN_26._LightCoord); + float tmpvar_41; + tmpvar_41 = UnitySpotAttenuate (IN_26._LightCoord.xyz); + vec4 tmpvar_42; + tmpvar_42 = LightingLambert (o_30, lightDir_28, ((float((IN_26._LightCoord.z > 0.0)) * tmpvar_40) * tmpvar_41)); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + c_27 = tmpvar_43; + float tmpvar_44; + tmpvar_44 = 0.0; + c_27.w = vec4(tmpvar_44).w; + return c_27; +} + +void main () +{ + v2f_surf xlt_IN_45; + vec4 xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_45.pos = tmpvar_47; + float tmpvar_48; + tmpvar_48 = xlv_FOG.x; + xlt_IN_45.fog = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[0].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_45.normal = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_45.lightDir = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = gl_TexCoord[2].xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_45._LightCoord = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = frag_surf (xlt_IN_45); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xl_retval_46 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_46.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_FragData[0] = tmpvar_58; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-out.txt new file mode 100644 index 000000000..626aad518 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[2]; + vec4 c_2; + vec4 c_3; + c_3.xyz = ((vec3(0.5, 0.5, 0.5) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[0].xyz, normalize(gl_TexCoord[1].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_1.xyz, tmpvar_1.xyz))).w)) * 2.0)); + c_3.w = 0.0; + c_2.xyz = c_3.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-ir.txt new file mode 100644 index 000000000..34a869bd6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-ir.txt @@ -0,0 +1,162 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec4 screenPos; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec2 uv_3; + vec2 tmpvar_4; + tmpvar_4 = (IN_1.screenPos.xy / IN_1.screenPos.w); + uv_3 = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = (uv_3 * vec2(2.0, 1.0)); + uv_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = vec3(0.5, 0.5, 0.5); + o_2.Albedo = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, uv_3); + vec3 tmpvar_8; + tmpvar_8 = (tmpvar_7.xyz * 0.5); + o_2.Emission = tmpvar_8; +} + +vec4 LightingLambert ( + in SurfaceOutput s_9, + in vec3 lightDir_10, + in float atten_11 +) +{ + vec4 c_12; + float diff_13; + float tmpvar_14; + tmpvar_14 = dot (s_9.Normal, lightDir_10); + float tmpvar_15; + tmpvar_15 = max (0.0, tmpvar_14); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + diff_13 = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = ((s_9.Albedo * _LightColor0.xyz) * ((diff_13 * atten_11) * 2.0)); + c_12.xyz = tmpvar_17.xyz.xyz; + float tmpvar_18; + tmpvar_18 = s_9.Alpha; + c_12.w = vec4(tmpvar_18).w; + return c_12; +} + +vec4 frag_surf ( + in v2f_surf IN_19 +) +{ + vec4 c_20; + vec3 lightDir_21; + Input surfIN_22; + SurfaceOutput o_23; + vec3 tmpvar_24; + tmpvar_24 = vec3(0.0, 0.0, 0.0); + o_23.Albedo = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(0.0, 0.0, 0.0); + o_23.Emission = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_23.Specular = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_23.Alpha = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_23.Gloss = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = IN_19.normal; + o_23.Normal = tmpvar_29; + surf (surfIN_22, o_23); + vec3 tmpvar_30; + tmpvar_30 = IN_19.lightDir; + lightDir_21 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = normalize (lightDir_21); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + lightDir_21 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = dot (IN_19._LightCoord, IN_19._LightCoord); + vec2 tmpvar_34; + tmpvar_34 = vec2(tmpvar_33); + vec2 tmpvar_35; + tmpvar_35 = tmpvar_34.xy; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_LightTextureB0, tmpvar_35); + vec4 tmpvar_37; + tmpvar_37 = textureCube (_LightTexture0, IN_19._LightCoord); + vec4 tmpvar_38; + tmpvar_38 = LightingLambert (o_23, lightDir_21, (tmpvar_36.w * tmpvar_37.w)); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + c_20 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + c_20.w = vec4(tmpvar_40).w; + return c_20; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + float tmpvar_44; + tmpvar_44 = xlv_FOG.x; + xlt_IN_41.fog = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_TexCoord[0].xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_41.normal = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[1].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_41.lightDir = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[2].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_41._LightCoord = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = frag_surf (xlt_IN_41); + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_42 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_42.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_FragData[0] = tmpvar_54; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-out.txt new file mode 100644 index 000000000..51d235348 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos1-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 c_2; + vec4 c_3; + c_3.xyz = ((vec3(0.5, 0.5, 0.5) * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[0].xyz, normalize(gl_TexCoord[1].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); + c_3.w = 0.0; + c_2.xyz = c_3.xyz; + c_2.w = 0.0; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPos2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-ir.txt new file mode 100644 index 000000000..c85a4d70c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-ir.txt @@ -0,0 +1,97 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec4 screenPos; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform sampler2D _MainTex; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec2 uv_3; + vec2 tmpvar_4; + tmpvar_4 = (IN_1.screenPos.xy / IN_1.screenPos.w); + uv_3 = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = (uv_3 * vec2(2.0, 1.0)); + uv_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = vec3(0.5, 0.5, 0.5); + o_2.Albedo = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, uv_3); + vec3 tmpvar_8; + tmpvar_8 = (tmpvar_7.xyz * 0.5); + o_2.Emission = tmpvar_8; +} + +vec4 frag_surf ( + in v2f_surf IN_9 +) +{ + vec4 res_10; + Input surfIN_11; + SurfaceOutput o_12; + vec3 tmpvar_13; + tmpvar_13 = vec3(0.0, 0.0, 0.0); + o_12.Albedo = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = vec3(0.0, 0.0, 0.0); + o_12.Emission = tmpvar_14; + float tmpvar_15; + tmpvar_15 = 0.0; + o_12.Specular = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_12.Alpha = tmpvar_16; + float tmpvar_17; + tmpvar_17 = 0.0; + o_12.Gloss = tmpvar_17; + vec3 tmpvar_18; + tmpvar_18 = IN_9.normal; + o_12.Normal = tmpvar_18; + surf (surfIN_11, o_12); + vec3 tmpvar_19; + tmpvar_19 = ((o_12.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_10.xyz = tmpvar_19.xyz.xyz; + float tmpvar_20; + tmpvar_20 = o_12.Specular; + res_10.w = vec4(tmpvar_20).w; + return res_10; +} + +void main () +{ + v2f_surf xlt_IN_21; + vec4 xl_retval_22; + vec4 tmpvar_23; + tmpvar_23 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_21.pos = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_TexCoord[0].xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_IN_21.normal = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = frag_surf (xlt_IN_21); + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xl_retval_22 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = xl_retval_22.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_FragData[0] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-out.txt new file mode 100644 index 000000000..d5e6cd110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPos2-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-ir.txt new file mode 100644 index 000000000..2c1199e9e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-ir.txt @@ -0,0 +1,94 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec4 screenPos; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform sampler2D _MainTex; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec2 uv_3; + vec2 tmpvar_4; + tmpvar_4 = (IN_1.screenPos.xy / IN_1.screenPos.w); + uv_3 = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = (uv_3 * vec2(2.0, 1.0)); + uv_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, uv_3); + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6.xyz; + o_2.Albedo = tmpvar_7; +} + +vec4 frag_surf ( + in v2f_surf IN_8 +) +{ + vec4 res_9; + Input surfIN_10; + SurfaceOutput o_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(0.0, 0.0, 0.0); + o_11.Albedo = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = vec3(0.0, 0.0, 0.0); + o_11.Emission = tmpvar_13; + float tmpvar_14; + tmpvar_14 = 0.0; + o_11.Specular = tmpvar_14; + float tmpvar_15; + tmpvar_15 = 0.0; + o_11.Alpha = tmpvar_15; + float tmpvar_16; + tmpvar_16 = 0.0; + o_11.Gloss = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = IN_8.normal; + o_11.Normal = tmpvar_17; + surf (surfIN_10, o_11); + vec3 tmpvar_18; + tmpvar_18 = ((o_11.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_9.xyz = tmpvar_18.xyz.xyz; + float tmpvar_19; + tmpvar_19 = o_11.Specular; + res_9.w = vec4(tmpvar_19).w; + return res_9; +} + +void main () +{ + v2f_surf xlt_IN_20; + vec4 xl_retval_21; + vec4 tmpvar_22; + tmpvar_22 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_20.pos = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_TexCoord[0].xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_IN_20.normal = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = frag_surf (xlt_IN_20); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xl_retval_21 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = xl_retval_21.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_FragData[0] = tmpvar_28; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-out.txt new file mode 100644 index 000000000..d5e6cd110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_ScreenPosAlbedo1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-ir.txt new file mode 100644 index 000000000..107776240 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-ir.txt @@ -0,0 +1,135 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec4 screenPos; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_screenPos; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec2 uv_3; + vec2 tmpvar_4; + tmpvar_4 = (IN_1.screenPos.xy / IN_1.screenPos.w); + uv_3 = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = (uv_3 * vec2(2.0, 1.0)); + uv_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, uv_3); + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6.xyz; + o_2.Albedo = tmpvar_7; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_8, + in vec4 light_9 +) +{ + vec4 c_10; + vec3 tmpvar_11; + tmpvar_11 = (s_8.Albedo * light_9.xyz); + c_10.xyz = tmpvar_11.xyz.xyz; + float tmpvar_12; + tmpvar_12 = s_8.Alpha; + c_10.w = vec4(tmpvar_12).w; + return c_10; +} + +vec4 frag_surf ( + in v2f_surf IN_13 +) +{ + vec4 col_14; + vec4 light_15; + SurfaceOutput o_16; + Input surfIN_17; + vec4 tmpvar_18; + tmpvar_18 = IN_13.hip_screenPos; + surfIN_17.screenPos = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(0.0, 0.0, 0.0); + o_16.Albedo = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(0.0, 0.0, 0.0); + o_16.Emission = tmpvar_20; + float tmpvar_21; + tmpvar_21 = 0.0; + o_16.Specular = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_16.Alpha = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_16.Gloss = tmpvar_23; + surf (surfIN_17, o_16); + vec4 tmpvar_24; + tmpvar_24 = texture2DProj (_LightBuffer, IN_13.hip_screen); + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + light_15 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = log2 (light_15); + vec4 tmpvar_27; + tmpvar_27 = -(tmpvar_26); + light_15 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = (light_15.xyz + unity_Ambient.xyz); + light_15.xyz = tmpvar_28.xyz.xyz; + vec4 tmpvar_29; + tmpvar_29 = LightingLambert_PrePass (o_16, light_15); + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + col_14 = tmpvar_30; + return col_14; +} + +void main () +{ + v2f_surf xlt_IN_31; + vec4 xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_31.pos = tmpvar_33; + float tmpvar_34; + tmpvar_34 = xlv_FOG.x; + xlt_IN_31.fog = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_TexCoord[0].xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_IN_31.hip_screenPos = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_TexCoord[1].xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_IN_31.hip_screen = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = frag_surf (xlt_IN_31); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_32 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_32.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_FragData[0] = tmpvar_42; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-out.txt new file mode 100644 index 000000000..d0771428c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_ScreenPosAlbedo1-out.txt @@ -0,0 +1,18 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_3.w; + light_2.xyz = (tmpvar_3.xyz + unity_Ambient.xyz); + vec4 c_4; + c_4.xyz = (texture2D (_MainTex, ((tmpvar_1.xy / tmpvar_1.w) * vec2(2.0, 1.0))).xyz * light_2.xyz); + c_4.w = 0.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-ir.txt new file mode 100644 index 000000000..8a6f5e9ad --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-ir.txt @@ -0,0 +1,201 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldPos; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldPos; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + float tmpvar_4; + tmpvar_4 = fract (((IN_2.worldPos.y + (IN_2.worldPos.z * 0.1)) * 5.0)); + xll_clip ((tmpvar_4 - 0.5)); + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec3 tmpvar_6; + tmpvar_6 = tmpvar_5.xyz; + o_3.Albedo = tmpvar_6; +} + +float UnitySpotCookie ( + in vec4 LightCoord_7 +) +{ + vec4 tmpvar_8; + tmpvar_8 = texture2D (_LightTexture0, ((LightCoord_7.xy / LightCoord_7.w) + 0.5)); + return tmpvar_8.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_9 +) +{ + float tmpvar_10; + tmpvar_10 = dot (LightCoord_9, LightCoord_9); + vec2 tmpvar_11; + tmpvar_11 = vec2(tmpvar_10); + vec2 tmpvar_12; + tmpvar_12 = tmpvar_11.xy; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_LightTextureB0, tmpvar_12); + return tmpvar_13.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_14, + in vec3 lightDir_15, + in float atten_16 +) +{ + vec4 c_17; + float diff_18; + float tmpvar_19; + tmpvar_19 = dot (s_14.Normal, lightDir_15); + float tmpvar_20; + tmpvar_20 = max (0.0, tmpvar_19); + float tmpvar_21; + tmpvar_21 = tmpvar_20; + diff_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = ((s_14.Albedo * _LightColor0.xyz) * ((diff_18 * atten_16) * 2.0)); + c_17.xyz = tmpvar_22.xyz.xyz; + float tmpvar_23; + tmpvar_23 = s_14.Alpha; + c_17.w = vec4(tmpvar_23).w; + return c_17; +} + +vec4 frag_surf ( + in v2f_surf IN_24 +) +{ + vec4 c_25; + vec3 lightDir_26; + SurfaceOutput o_27; + Input surfIN_28; + vec2 tmpvar_29; + tmpvar_29 = IN_24.hip_pack0.xy; + surfIN_28.uv_MainTex = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = IN_24.worldPos; + surfIN_28.worldPos = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(0.0, 0.0, 0.0); + o_27.Albedo = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_27.Emission = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_27.Specular = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_27.Alpha = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_27.Gloss = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = IN_24.normal; + o_27.Normal = tmpvar_36; + surf (surfIN_28, o_27); + vec3 tmpvar_37; + tmpvar_37 = IN_24.lightDir; + lightDir_26 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = normalize (lightDir_26); + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + lightDir_26 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = UnitySpotCookie (IN_24._LightCoord); + float tmpvar_41; + tmpvar_41 = UnitySpotAttenuate (IN_24._LightCoord.xyz); + vec4 tmpvar_42; + tmpvar_42 = LightingLambert (o_27, lightDir_26, ((float((IN_24._LightCoord.z > 0.0)) * tmpvar_40) * tmpvar_41)); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + c_25 = tmpvar_43; + float tmpvar_44; + tmpvar_44 = 0.0; + c_25.w = vec4(tmpvar_44).w; + return c_25; +} + +void main () +{ + v2f_surf xlt_IN_45; + vec4 xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_45.pos = tmpvar_47; + float tmpvar_48; + tmpvar_48 = xlv_FOG.x; + xlt_IN_45.fog = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = gl_TexCoord[0].xy; + vec2 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_45.hip_pack0 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_45.worldPos = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_TexCoord[2].xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_IN_45.normal = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = gl_TexCoord[3].xyz; + vec3 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_IN_45.lightDir = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = gl_TexCoord[4].xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_IN_45._LightCoord = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = frag_surf (xlt_IN_45); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xl_retval_46 = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = xl_retval_46.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_FragData[0] = tmpvar_62; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-out.txt new file mode 100644 index 000000000..c7a616599 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices-out.txt @@ -0,0 +1,24 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec4 tmpvar_2; + tmpvar_2 = gl_TexCoord[4]; + vec4 c_3; + float x_4; + x_4 = (fract(((tmpvar_1.y + (tmpvar_1.z * 0.1)) * 5.0)) - 0.5); + if ((x_4 < 0.0)) { + discard; + }; + vec4 c_5; + c_5.xyz = ((texture2D (_MainTex, gl_TexCoord[0].xy).xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[2].xyz, normalize(gl_TexCoord[3].xyz))) * ((float((tmpvar_2.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_2.xy / tmpvar_2.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_2.xyz, tmpvar_2.xyz))).w)) * 2.0)); + c_5.w = 0.0; + c_3.xyz = c_5.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-ir.txt new file mode 100644 index 000000000..35420313a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-ir.txt @@ -0,0 +1,150 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldPos; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldPos; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + float tmpvar_4; + tmpvar_4 = fract (((IN_2.worldPos.y + (IN_2.worldPos.z * 0.1)) * 5.0)); + xll_clip ((tmpvar_4 - 0.5)); + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec3 tmpvar_6; + tmpvar_6 = tmpvar_5.xyz; + o_3.Albedo = tmpvar_6; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_7, + in vec4 light_8 +) +{ + vec4 c_9; + vec3 tmpvar_10; + tmpvar_10 = (s_7.Albedo * light_8.xyz); + c_9.xyz = tmpvar_10.xyz.xyz; + float tmpvar_11; + tmpvar_11 = s_7.Alpha; + c_9.w = vec4(tmpvar_11).w; + return c_9; +} + +vec4 frag_surf ( + in v2f_surf IN_12 +) +{ + vec4 col_13; + vec4 light_14; + SurfaceOutput o_15; + Input surfIN_16; + vec2 tmpvar_17; + tmpvar_17 = IN_12.hip_pack0.xy; + surfIN_16.uv_MainTex = tmpvar_17; + vec3 tmpvar_18; + tmpvar_18 = IN_12.worldPos; + surfIN_16.worldPos = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(0.0, 0.0, 0.0); + o_15.Albedo = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(0.0, 0.0, 0.0); + o_15.Emission = tmpvar_20; + float tmpvar_21; + tmpvar_21 = 0.0; + o_15.Specular = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_15.Alpha = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_15.Gloss = tmpvar_23; + surf (surfIN_16, o_15); + vec4 tmpvar_24; + tmpvar_24 = texture2DProj (_LightBuffer, IN_12.hip_screen); + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + light_14 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = log2 (light_14); + vec4 tmpvar_27; + tmpvar_27 = -(tmpvar_26); + light_14 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = (light_14.xyz + unity_Ambient.xyz); + light_14.xyz = tmpvar_28.xyz.xyz; + vec4 tmpvar_29; + tmpvar_29 = LightingLambert_PrePass (o_15, light_14); + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + col_13 = tmpvar_30; + return col_13; +} + +void main () +{ + v2f_surf xlt_IN_31; + vec4 xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_31.pos = tmpvar_33; + float tmpvar_34; + tmpvar_34 = xlv_FOG.x; + xlt_IN_31.fog = tmpvar_34; + vec2 tmpvar_35; + tmpvar_35 = gl_TexCoord[0].xy; + vec2 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_IN_31.hip_pack0 = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_TexCoord[1].xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_IN_31.worldPos = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_TexCoord[2].xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_31.hip_screen = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = frag_surf (xlt_IN_31); + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xl_retval_32 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = xl_retval_32.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_FragData[0] = tmpvar_44; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-out.txt new file mode 100644 index 000000000..a328ab3b4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices1-out.txt @@ -0,0 +1,23 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec4 light_2; + float x_3; + x_3 = (fract(((tmpvar_1.y + (tmpvar_1.z * 0.1)) * 5.0)) - 0.5); + if ((x_3 < 0.0)) { + discard; + }; + vec4 tmpvar_4; + tmpvar_4 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_2.w = tmpvar_4.w; + light_2.xyz = (tmpvar_4.xyz + unity_Ambient.xyz); + vec4 c_5; + c_5.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * light_2.xyz); + c_5.w = 0.0; + gl_FragData[0] = c_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-ir.txt new file mode 100644 index 000000000..836ce6ed0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-ir.txt @@ -0,0 +1,295 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldPos; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldPos; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +void surf ( + in Input IN_34, + inout SurfaceOutput o_35 +) +{ + float tmpvar_36; + tmpvar_36 = fract (((IN_34.worldPos.y + (IN_34.worldPos.z * 0.1)) * 5.0)); + xll_clip ((tmpvar_36 - 0.5)); + vec4 tmpvar_37; + tmpvar_37 = texture2D (_MainTex, IN_34.uv_MainTex); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37.xyz; + o_35.Albedo = tmpvar_38; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_39, + in vec4 light_40 +) +{ + vec4 c_41; + vec3 tmpvar_42; + tmpvar_42 = (s_39.Albedo * light_40.xyz); + c_41.xyz = tmpvar_42.xyz.xyz; + float tmpvar_43; + tmpvar_43 = s_39.Alpha; + c_41.w = vec4(tmpvar_43).w; + return c_41; +} + +vec3 DecodeLightmap ( + in vec4 color_44 +) +{ + return (2.0 * color_44.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_45 +) +{ + vec4 col_46; + vec3 lm_47; + vec3 lmIndirect_48; + vec3 lmFull_49; + vec4 light_50; + SurfaceOutput o_51; + Input surfIN_52; + vec2 tmpvar_53; + tmpvar_53 = IN_45.hip_pack0.xy; + surfIN_52.uv_MainTex = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = IN_45.worldPos; + surfIN_52.worldPos = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = vec3(0.0, 0.0, 0.0); + o_51.Albedo = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = vec3(0.0, 0.0, 0.0); + o_51.Emission = tmpvar_56; + float tmpvar_57; + tmpvar_57 = 0.0; + o_51.Specular = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + o_51.Alpha = tmpvar_58; + float tmpvar_59; + tmpvar_59 = 0.0; + o_51.Gloss = tmpvar_59; + surf (surfIN_52, o_51); + vec4 tmpvar_60; + tmpvar_60 = texture2DProj (_LightBuffer, IN_45.hip_screen); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + light_50 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = log2 (light_50); + vec4 tmpvar_63; + tmpvar_63 = -(tmpvar_62); + light_50 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = texture2D (unity_Lightmap, IN_45.hip_lmapFade.xy); + vec3 tmpvar_65; + tmpvar_65 = DecodeLightmap (tmpvar_64); + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + lmFull_49 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = texture2D (unity_LightmapInd, IN_45.hip_lmapFade.xy); + vec3 tmpvar_68; + tmpvar_68 = DecodeLightmap (tmpvar_67); + vec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + lmIndirect_48 = tmpvar_69; + float tmpvar_70; + tmpvar_70 = xll_saturate (IN_45.hip_lmapFade.z); + vec3 tmpvar_71; + tmpvar_71 = vec3(tmpvar_70); + vec3 tmpvar_72; + tmpvar_72 = mix (lmIndirect_48, lmFull_49, tmpvar_71); + vec3 tmpvar_73; + tmpvar_73 = tmpvar_72; + lm_47 = tmpvar_73; + vec3 tmpvar_74; + tmpvar_74 = (light_50.xyz + lm_47); + light_50.xyz = tmpvar_74.xyz.xyz; + vec4 tmpvar_75; + tmpvar_75 = LightingLambert_PrePass (o_51, light_50); + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + col_46 = tmpvar_76; + return col_46; +} + +void main () +{ + v2f_surf xlt_IN_77; + vec4 xl_retval_78; + vec4 tmpvar_79; + tmpvar_79 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_77.pos = tmpvar_79; + float tmpvar_80; + tmpvar_80 = xlv_FOG.x; + xlt_IN_77.fog = tmpvar_80; + vec2 tmpvar_81; + tmpvar_81 = gl_TexCoord[0].xy; + vec2 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_IN_77.hip_pack0 = tmpvar_82; + vec3 tmpvar_83; + tmpvar_83 = gl_TexCoord[1].xyz; + vec3 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_IN_77.worldPos = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = gl_TexCoord[2].xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + xlt_IN_77.hip_screen = tmpvar_86; + vec3 tmpvar_87; + tmpvar_87 = gl_TexCoord[3].xyz; + vec3 tmpvar_88; + tmpvar_88 = tmpvar_87; + xlt_IN_77.hip_lmapFade = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = frag_surf (xlt_IN_77); + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + xl_retval_78 = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = xl_retval_78.xyzw; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + gl_FragData[0] = tmpvar_92; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-out.txt new file mode 100644 index 000000000..8c59a8db0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices2-out.txt @@ -0,0 +1,26 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 light_3; + float x_4; + x_4 = (fract(((tmpvar_1.y + (tmpvar_1.z * 0.1)) * 5.0)) - 0.5); + if ((x_4 < 0.0)) { + discard; + }; + vec4 tmpvar_5; + tmpvar_5 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[2]))); + light_3.w = tmpvar_5.w; + light_3.xyz = (tmpvar_5.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_2.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_2.xy).xyz), vec3(clamp (tmpvar_2.z, 0.0, 1.0)))); + vec4 c_6; + c_6.xyz = (texture2D (_MainTex, gl_TexCoord[0].xy).xyz * light_3.xyz); + c_6.w = 0.0; + gl_FragData[0] = c_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_Slices3-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-ir.txt new file mode 100644 index 000000000..195977bcf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-ir.txt @@ -0,0 +1,325 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec3 worldPos; +}; +struct v2f_surf { + vec4 pos; + vec3 _ShadowCoord0; + vec3 _ShadowCoord1; + vec3 _ShadowCoord2; + vec3 _ShadowCoord3; + vec2 _ShadowZFade; + vec3 worldPos; +}; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _MainTex; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +void surf ( + in Input IN_34, + inout SurfaceOutput o_35 +) +{ + float tmpvar_36; + tmpvar_36 = fract (((IN_34.worldPos.y + (IN_34.worldPos.z * 0.1)) * 5.0)); + xll_clip ((tmpvar_36 - 0.5)); + vec4 tmpvar_37; + tmpvar_37 = texture2D (_MainTex, IN_34.uv_MainTex); + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37.xyz; + o_35.Albedo = tmpvar_38; +} + +vec2 EncodeFloatRG ( + in float v_39 +) +{ + vec2 enc_40; + float kEncodeBit_41; + vec2 kEncodeMul_42; + vec2 tmpvar_43; + tmpvar_43 = vec2(1.0, 255.0); + kEncodeMul_42 = tmpvar_43; + float tmpvar_44; + tmpvar_44 = 0.00392157; + kEncodeBit_41 = tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = (kEncodeMul_42 * v_39); + enc_40 = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = fract (enc_40); + vec2 tmpvar_47; + tmpvar_47 = tmpvar_46; + enc_40 = tmpvar_47; + float tmpvar_48; + tmpvar_48 = (enc_40.x - (enc_40.y * kEncodeBit_41)); + enc_40.x = tmpvar_48; + return enc_40; +} + +vec4 frag_surf ( + in v2f_surf IN_49 +) +{ + vec4 res_50; + float faded_51; + float shadow_52; + vec4 coord_53; + vec4 weights_54; + vec4 far_55; + vec4 near_56; + vec4 z_57; + SurfaceOutput o_58; + Input surfIN_59; + vec3 tmpvar_60; + tmpvar_60 = IN_49.worldPos; + surfIN_59.worldPos = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_58.Albedo = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = vec3(0.0, 0.0, 0.0); + o_58.Emission = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_58.Specular = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_58.Alpha = tmpvar_64; + float tmpvar_65; + tmpvar_65 = 0.0; + o_58.Gloss = tmpvar_65; + surf (surfIN_59, o_58); + vec4 tmpvar_66; + tmpvar_66 = vec4(IN_49._ShadowZFade.x); + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + z_57 = tmpvar_67; + bvec4 tmpvar_68; + tmpvar_68 = greaterThanEqual (z_57, _LightSplitsNear); + vec4 tmpvar_69; + tmpvar_69 = vec4(tmpvar_68).xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + near_56 = tmpvar_70; + bvec4 tmpvar_71; + tmpvar_71 = lessThan (z_57, _LightSplitsFar); + vec4 tmpvar_72; + tmpvar_72 = vec4(tmpvar_71).xyzw; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + far_55 = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = (near_56 * far_55); + weights_54 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75.w = 1.0; + tmpvar_75.xyz = ((((IN_49._ShadowCoord0 * weights_54.x) + (IN_49._ShadowCoord1 * weights_54.y)) + (IN_49._ShadowCoord2 * weights_54.z)) + (IN_49._ShadowCoord3 * weights_54.w)).xyz; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + coord_53 = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = texture2D (_ShadowMapTexture, coord_53.xy); + float tmpvar_78; + if ((tmpvar_77.x < coord_53.z)) { + tmpvar_78 = _LightShadowData.x; + } else { + tmpvar_78 = 1.0; + }; + float tmpvar_79; + tmpvar_79 = tmpvar_78; + shadow_52 = tmpvar_79; + float tmpvar_80; + tmpvar_80 = xll_saturate (IN_49._ShadowZFade.y); + float tmpvar_81; + tmpvar_81 = xll_saturate ((shadow_52 + tmpvar_80)); + float tmpvar_82; + tmpvar_82 = tmpvar_81; + faded_51 = tmpvar_82; + float tmpvar_83; + tmpvar_83 = faded_51; + res_50.x = tmpvar_83; + float tmpvar_84; + tmpvar_84 = 1.0; + res_50.y = vec2(tmpvar_84).y; + vec2 tmpvar_85; + tmpvar_85 = EncodeFloatRG ((1.0 - (z_57 * _ProjectionParams.w)).x); + vec2 tmpvar_86; + tmpvar_86 = tmpvar_85; + res_50.zw = tmpvar_86.xxxy.zw; + return res_50; +} + +void main () +{ + v2f_surf xlt_IN_87; + vec4 xl_retval_88; + vec4 tmpvar_89; + tmpvar_89 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_87.pos = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = gl_TexCoord[0].xyz; + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_87._ShadowCoord0 = tmpvar_91; + vec3 tmpvar_92; + tmpvar_92 = gl_TexCoord[1].xyz; + vec3 tmpvar_93; + tmpvar_93 = tmpvar_92; + xlt_IN_87._ShadowCoord1 = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = gl_TexCoord[2].xyz; + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + xlt_IN_87._ShadowCoord2 = tmpvar_95; + vec3 tmpvar_96; + tmpvar_96 = gl_TexCoord[3].xyz; + vec3 tmpvar_97; + tmpvar_97 = tmpvar_96; + xlt_IN_87._ShadowCoord3 = tmpvar_97; + vec2 tmpvar_98; + tmpvar_98 = gl_TexCoord[4].xy; + vec2 tmpvar_99; + tmpvar_99 = tmpvar_98; + xlt_IN_87._ShadowZFade = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = gl_TexCoord[5].xyz; + vec3 tmpvar_101; + tmpvar_101 = tmpvar_100; + xlt_IN_87.worldPos = tmpvar_101; + vec4 tmpvar_102; + tmpvar_102 = frag_surf (xlt_IN_87); + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + xl_retval_88 = tmpvar_103; + vec4 tmpvar_104; + tmpvar_104 = xl_retval_88.xyzw; + vec4 tmpvar_105; + tmpvar_105 = tmpvar_104; + gl_FragData[0] = tmpvar_105; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-out.txt new file mode 100644 index 000000000..315386b25 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_Slices3-out.txt @@ -0,0 +1,41 @@ +uniform sampler2D _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[4].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[5].xyz; + vec4 res_3; + float x_4; + x_4 = (fract(((tmpvar_2.y + (tmpvar_2.z * 0.1)) * 5.0)) - 0.5); + if ((x_4 < 0.0)) { + discard; + }; + vec4 tmpvar_5; + tmpvar_5 = (vec4(greaterThanEqual (tmpvar_1.xxxx, _LightSplitsNear)) * vec4(lessThan (tmpvar_1.xxxx, _LightSplitsFar))); + vec4 tmpvar_6; + tmpvar_6.w = 1.0; + tmpvar_6.xyz = ((((gl_TexCoord[0].xyz * tmpvar_5.x) + (gl_TexCoord[1].xyz * tmpvar_5.y)) + (gl_TexCoord[2].xyz * tmpvar_5.z)) + (gl_TexCoord[3].xyz * tmpvar_5.w)); + vec4 tmpvar_7; + tmpvar_7 = texture2D (_ShadowMapTexture, tmpvar_6.xy); + float tmpvar_8; + if ((tmpvar_7.x < tmpvar_6.z)) { + tmpvar_8 = _LightShadowData.x; + } else { + tmpvar_8 = 1.0; + }; + res_3.x = clamp ((tmpvar_8 + clamp (tmpvar_1.y, 0.0, 1.0)), 0.0, 1.0); + res_3.y = 1.0; + vec2 enc_9; + vec2 tmpvar_10; + tmpvar_10 = fract((vec2(1.0, 255.0) * (1.0 - (tmpvar_1.xxxx * _ProjectionParams.w)).x)); + enc_9.y = tmpvar_10.y; + enc_9.x = (tmpvar_10.x - (tmpvar_10.y * 0.00392157)); + res_3.zw = enc_9; + gl_FragData[0] = res_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-ir.txt new file mode 100644 index 000000000..0877279b6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-ir.txt @@ -0,0 +1,138 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 worldRefl; + vec3 normal; + vec3 lightDir; +}; +varying vec4 xlv_FOG; +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = textureCube (_Cube, IN_1.worldRefl); + vec3 tmpvar_4; + tmpvar_4 = tmpvar_3.xyz; + o_2.Albedo = tmpvar_4; +} + +vec4 LightingLambert ( + in SurfaceOutput s_5, + in vec3 lightDir_6, + in float atten_7 +) +{ + vec4 c_8; + float diff_9; + float tmpvar_10; + tmpvar_10 = dot (s_5.Normal, lightDir_6); + float tmpvar_11; + tmpvar_11 = max (0.0, tmpvar_10); + float tmpvar_12; + tmpvar_12 = tmpvar_11; + diff_9 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = ((s_5.Albedo * _LightColor0.xyz) * ((diff_9 * atten_7) * 2.0)); + c_8.xyz = tmpvar_13.xyz.xyz; + float tmpvar_14; + tmpvar_14 = s_5.Alpha; + c_8.w = vec4(tmpvar_14).w; + return c_8; +} + +vec4 frag_surf ( + in v2f_surf IN_15 +) +{ + vec4 c_16; + vec3 lightDir_17; + SurfaceOutput o_18; + Input surfIN_19; + vec3 tmpvar_20; + tmpvar_20 = IN_15.worldRefl; + surfIN_19.worldRefl = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = vec3(0.0, 0.0, 0.0); + o_18.Albedo = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(0.0, 0.0, 0.0); + o_18.Emission = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_18.Specular = tmpvar_23; + float tmpvar_24; + tmpvar_24 = 0.0; + o_18.Alpha = tmpvar_24; + float tmpvar_25; + tmpvar_25 = 0.0; + o_18.Gloss = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = IN_15.normal; + o_18.Normal = tmpvar_26; + surf (surfIN_19, o_18); + vec3 tmpvar_27; + tmpvar_27 = IN_15.lightDir; + lightDir_17 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = LightingLambert (o_18, lightDir_17, 1.0); + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + c_16 = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + c_16.w = vec4(tmpvar_30).w; + return c_16; +} + +void main () +{ + v2f_surf xlt_IN_31; + vec4 xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_31.pos = tmpvar_33; + float tmpvar_34; + tmpvar_34 = xlv_FOG.x; + xlt_IN_31.fog = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = gl_TexCoord[0].xyz; + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_IN_31.worldRefl = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_TexCoord[1].xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_IN_31.normal = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = gl_TexCoord[2].xyz; + vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_31.lightDir = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = frag_surf (xlt_IN_31); + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xl_retval_32 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = xl_retval_32.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_FragData[0] = tmpvar_44; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-out.txt new file mode 100644 index 000000000..b7edfe906 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl-out.txt @@ -0,0 +1,13 @@ +uniform vec4 _LightColor0; +uniform samplerCube _Cube; +void main () +{ + vec4 c_1; + vec4 c_2; + c_2.xyz = ((textureCube (_Cube, gl_TexCoord[0].xyz).xyz * _LightColor0.xyz) * (max (0.0, dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz)) * 2.0)); + c_2.w = 0.0; + c_1.xyz = c_2.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Surface_WorldRefl1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-ir.txt new file mode 100644 index 000000000..7e4f7db97 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-ir.txt @@ -0,0 +1,87 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec3 worldRefl; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +uniform samplerCube _Cube; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = textureCube (_Cube, IN_1.worldRefl); + vec3 tmpvar_4; + tmpvar_4 = tmpvar_3.xyz; + o_2.Albedo = tmpvar_4; +} + +vec4 frag_surf ( + in v2f_surf IN_5 +) +{ + vec4 res_6; + Input surfIN_7; + SurfaceOutput o_8; + vec3 tmpvar_9; + tmpvar_9 = vec3(0.0, 0.0, 0.0); + o_8.Albedo = tmpvar_9; + vec3 tmpvar_10; + tmpvar_10 = vec3(0.0, 0.0, 0.0); + o_8.Emission = tmpvar_10; + float tmpvar_11; + tmpvar_11 = 0.0; + o_8.Specular = tmpvar_11; + float tmpvar_12; + tmpvar_12 = 0.0; + o_8.Alpha = tmpvar_12; + float tmpvar_13; + tmpvar_13 = 0.0; + o_8.Gloss = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = IN_5.normal; + o_8.Normal = tmpvar_14; + surf (surfIN_7, o_8); + vec3 tmpvar_15; + tmpvar_15 = ((o_8.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_6.xyz = tmpvar_15.xyz.xyz; + float tmpvar_16; + tmpvar_16 = o_8.Specular; + res_6.w = vec4(tmpvar_16).w; + return res_6; +} + +void main () +{ + v2f_surf xlt_IN_17; + vec4 xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_17.pos = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_TexCoord[0].xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_IN_17.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = frag_surf (xlt_IN_17); + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_18 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = xl_retval_18.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_FragData[0] = tmpvar_25; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-out.txt new file mode 100644 index 000000000..d5e6cd110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Surface_WorldRefl1-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-ir.txt new file mode 100644 index 000000000..8698637db --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-ir.txt @@ -0,0 +1,35 @@ +struct v2f { + vec4 pos; + vec4 color; +}; +vec4 frag ( + in v2f i_1 +) +{ + return i_1.color; +} + +void main () +{ + v2f xlt_i_2; + vec4 xl_retval_3; + vec4 tmpvar_4; + tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_2.pos = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = gl_Color.xyzw; + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + xlt_i_2.color = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = frag (xlt_i_2); + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + xl_retval_3 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = xl_retval_3.xyzw; + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + gl_FragData[0] = tmpvar_10; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_CgNormals-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_CgNormals-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-ir.txt new file mode 100644 index 000000000..066a56ee5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-ir.txt @@ -0,0 +1,39 @@ +struct v2f { + vec4 vertex; + vec2 texcoord; +}; +uniform sampler2D _MainTex; +uniform vec4 _Color; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (tmpvar_2 * _Color); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec2 tmpvar_6; + tmpvar_6 = gl_TexCoord[0].xy; + vec2 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.texcoord = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = frag (xlt_i_3); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xl_retval_4 = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = xl_retval_4.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_FragData[0] = tmpvar_11; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_FontShaderCull-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_FontShaderCull-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-ir.txt new file mode 100644 index 000000000..8565daa71 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-ir.txt @@ -0,0 +1,50 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform vec4 _ZBufferParams; +uniform sampler2D _CameraDepthTexture; +float Linear01Depth ( + in float z_1 +) +{ + return (1.0 / ((_ZBufferParams.x * z_1) + _ZBufferParams.y)); +} + +vec4 frag ( + in v2f i_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2D (_CameraDepthTexture, i_2.uv); + float tmpvar_4; + tmpvar_4 = Linear01Depth (tmpvar_3.x); + vec4 tmpvar_5; + tmpvar_5 = vec4((1.0 - tmpvar_4)); + return tmpvar_5; +} + +void main () +{ + v2f xlt_i_6; + vec4 xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_6.pos = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = gl_TexCoord[0].xy; + vec2 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_6.uv = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = frag (xlt_i_6); + vec4 tmpvar_12; + tmpvar_12 = tmpvar_11; + xl_retval_7 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = xl_retval_7.xyzw; + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + gl_FragData[0] = tmpvar_14; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderDepthTexture-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderDepthTexture-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-ir.txt new file mode 100644 index 000000000..3b31f8651 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-ir.txt @@ -0,0 +1,38 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.uv); + return tmpvar_2; +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.pos = tmpvar_5; + vec2 tmpvar_6; + tmpvar_6 = gl_TexCoord[0].xy; + vec2 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.uv = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = frag (xlt_i_3); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xl_retval_4 = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = xl_retval_4.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_FragData[0] = tmpvar_11; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Test_VertexShaderTexture-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Test_VertexShaderTexture-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-ir.txt new file mode 100644 index 000000000..aec89fdd6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-ir.txt @@ -0,0 +1,132 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex9; +uniform sampler2D _MainTex8; +uniform sampler2D _MainTex7; +uniform sampler2D _MainTex6; +uniform sampler2D _MainTex5; +uniform sampler2D _MainTex4; +uniform sampler2D _MainTex3; +uniform sampler2D _MainTex2; +uniform sampler2D _MainTex15; +uniform sampler2D _MainTex14; +uniform sampler2D _MainTex13; +uniform sampler2D _MainTex12; +uniform sampler2D _MainTex11; +uniform sampler2D _MainTex10; +uniform sampler2D _MainTex1; +uniform sampler2D _MainTex0; +vec4 frag ( + in v2f i_1 +) +{ + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex0, i_1.uv); + vec4 tmpvar_4; + tmpvar_4 = tmpvar_3; + col_2 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex1, i_1.uv); + vec4 tmpvar_6; + tmpvar_6 = (col_2 + tmpvar_5); + col_2 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex2, i_1.uv); + vec4 tmpvar_8; + tmpvar_8 = (col_2 + tmpvar_7); + col_2 = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex3, i_1.uv); + vec4 tmpvar_10; + tmpvar_10 = (col_2 + tmpvar_9); + col_2 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex4, i_1.uv); + vec4 tmpvar_12; + tmpvar_12 = (col_2 + tmpvar_11); + col_2 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = texture2D (_MainTex5, i_1.uv); + vec4 tmpvar_14; + tmpvar_14 = (col_2 + tmpvar_13); + col_2 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_MainTex6, i_1.uv); + vec4 tmpvar_16; + tmpvar_16 = (col_2 + tmpvar_15); + col_2 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_MainTex7, i_1.uv); + vec4 tmpvar_18; + tmpvar_18 = (col_2 + tmpvar_17); + col_2 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = texture2D (_MainTex8, i_1.uv); + vec4 tmpvar_20; + tmpvar_20 = (col_2 + tmpvar_19); + col_2 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = texture2D (_MainTex9, i_1.uv); + vec4 tmpvar_22; + tmpvar_22 = (col_2 + tmpvar_21); + col_2 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = texture2D (_MainTex10, i_1.uv); + vec4 tmpvar_24; + tmpvar_24 = (col_2 + tmpvar_23); + col_2 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = texture2D (_MainTex11, i_1.uv); + vec4 tmpvar_26; + tmpvar_26 = (col_2 + tmpvar_25); + col_2 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = texture2D (_MainTex12, i_1.uv); + vec4 tmpvar_28; + tmpvar_28 = (col_2 + tmpvar_27); + col_2 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = texture2D (_MainTex13, i_1.uv); + vec4 tmpvar_30; + tmpvar_30 = (col_2 + tmpvar_29); + col_2 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = texture2D (_MainTex14, i_1.uv); + vec4 tmpvar_32; + tmpvar_32 = (col_2 + tmpvar_31); + col_2 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = texture2D (_MainTex15, i_1.uv); + vec4 tmpvar_34; + tmpvar_34 = (col_2 + tmpvar_33); + col_2 = tmpvar_34; + return col_2; +} + +void main () +{ + v2f xlt_i_35; + vec4 xl_retval_36; + vec4 tmpvar_37; + tmpvar_37 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_35.pos = tmpvar_37; + vec2 tmpvar_38; + tmpvar_38 = gl_TexCoord[0].xy; + vec2 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_i_35.uv = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = frag (xlt_i_35); + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xl_retval_36 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_36.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_FragData[0] = tmpvar_43; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Blend_Many_Textures-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Blend_Many_Textures-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-ir.txt new file mode 100644 index 000000000..927a222bc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-ir.txt @@ -0,0 +1,146 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec3 tmpvar_3; + tmpvar_3 = vec3(0.0, 1.0, 0.0); + o_2.Emission = tmpvar_3; +} + +vec4 LightingLambert ( + in SurfaceOutput s_4, + in vec3 lightDir_5, + in float atten_6 +) +{ + vec4 c_7; + float diff_8; + float tmpvar_9; + tmpvar_9 = dot (s_4.Normal, lightDir_5); + float tmpvar_10; + tmpvar_10 = max (0.0, tmpvar_9); + float tmpvar_11; + tmpvar_11 = tmpvar_10; + diff_8 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = ((s_4.Albedo * _LightColor0.xyz) * ((diff_8 * atten_6) * 2.0)); + c_7.xyz = tmpvar_12.xyz.xyz; + float tmpvar_13; + tmpvar_13 = s_4.Alpha; + c_7.w = vec4(tmpvar_13).w; + return c_7; +} + +vec4 frag_surf ( + in v2f_surf IN_14 +) +{ + vec4 c_15; + vec3 lightDir_16; + Input surfIN_17; + SurfaceOutput o_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(0.0, 0.0, 0.0); + o_18.Albedo = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(0.0, 0.0, 0.0); + o_18.Emission = tmpvar_20; + float tmpvar_21; + tmpvar_21 = 0.0; + o_18.Specular = tmpvar_21; + float tmpvar_22; + tmpvar_22 = 0.0; + o_18.Alpha = tmpvar_22; + float tmpvar_23; + tmpvar_23 = 0.0; + o_18.Gloss = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = IN_14.normal; + o_18.Normal = tmpvar_24; + surf (surfIN_17, o_18); + vec3 tmpvar_25; + tmpvar_25 = IN_14.lightDir; + lightDir_16 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = normalize (lightDir_16); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + lightDir_16 = tmpvar_27; + float tmpvar_28; + tmpvar_28 = dot (IN_14._LightCoord, IN_14._LightCoord); + vec2 tmpvar_29; + tmpvar_29 = vec2(tmpvar_28); + vec2 tmpvar_30; + tmpvar_30 = tmpvar_29.xy; + vec4 tmpvar_31; + tmpvar_31 = texture2D (_LightTexture0, tmpvar_30); + vec4 tmpvar_32; + tmpvar_32 = LightingLambert (o_18, lightDir_16, tmpvar_31.w); + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + c_15 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + c_15.w = vec4(tmpvar_34).w; + return c_15; +} + +void main () +{ + v2f_surf xlt_IN_35; + vec4 xl_retval_36; + vec4 tmpvar_37; + tmpvar_37 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_35.pos = tmpvar_37; + float tmpvar_38; + tmpvar_38 = xlv_FOG.x; + xlt_IN_35.fog = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = gl_TexCoord[0].xyz; + vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_IN_35.normal = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_TexCoord[1].xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_IN_35.lightDir = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_TexCoord[2].xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_IN_35._LightCoord = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = frag_surf (xlt_IN_35); + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xl_retval_36 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = xl_retval_36.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_FragData[0] = tmpvar_48; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-out.txt new file mode 100644 index 000000000..94881b4bd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 c_1; + c_1.xyz = vec3(0.0, 0.0, 0.0); + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tests_Fwd-Def-Vert1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-ir.txt new file mode 100644 index 000000000..cca120304 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-ir.txt @@ -0,0 +1,84 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec3 tmpvar_3; + tmpvar_3 = vec3(1.0, 0.0, 0.0); + o_2.Emission = tmpvar_3; +} + +vec4 frag_surf ( + in v2f_surf IN_4 +) +{ + vec4 res_5; + Input surfIN_6; + SurfaceOutput o_7; + vec3 tmpvar_8; + tmpvar_8 = vec3(0.0, 0.0, 0.0); + o_7.Albedo = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = vec3(0.0, 0.0, 0.0); + o_7.Emission = tmpvar_9; + float tmpvar_10; + tmpvar_10 = 0.0; + o_7.Specular = tmpvar_10; + float tmpvar_11; + tmpvar_11 = 0.0; + o_7.Alpha = tmpvar_11; + float tmpvar_12; + tmpvar_12 = 0.0; + o_7.Gloss = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = IN_4.normal; + o_7.Normal = tmpvar_13; + surf (surfIN_6, o_7); + vec3 tmpvar_14; + tmpvar_14 = ((o_7.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_5.xyz = tmpvar_14.xyz.xyz; + float tmpvar_15; + tmpvar_15 = o_7.Specular; + res_5.w = vec4(tmpvar_15).w; + return res_5; +} + +void main () +{ + v2f_surf xlt_IN_16; + vec4 xl_retval_17; + vec4 tmpvar_18; + tmpvar_18 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_16.pos = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = gl_TexCoord[0].xyz; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_IN_16.normal = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = frag_surf (xlt_IN_16); + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xl_retval_17 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = xl_retval_17.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + gl_FragData[0] = tmpvar_24; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-out.txt new file mode 100644 index 000000000..d5e6cd110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tests_Fwd-Def-Vert1-out.txt @@ -0,0 +1,8 @@ +void main () +{ + vec4 res_1; + res_1.xyz = ((gl_TexCoord[0].xyz * vec3(0.5, 0.5, -0.5)) + 0.5); + res_1.w = 0.0; + gl_FragData[0] = res_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-ir.txt new file mode 100644 index 000000000..db4436cd1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-ir.txt @@ -0,0 +1,44 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec3 texcoord; +}; +uniform samplerCube _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = textureCube (_MainTex, i_1.texcoord); + return tmpvar_2; +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.vertex = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = gl_Color.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_i_3.color = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = gl_TexCoord[0].xyz; + vec3 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_i_3.texcoord = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = frag (xlt_i_3); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xl_retval_4 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = xl_retval_4.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FragData[0] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-TexGen_Cube_Refl-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-TexGen_Cube_Refl-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-ir.txt new file mode 100644 index 000000000..4c20be042 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-ir.txt @@ -0,0 +1,59 @@ +struct v2f { + vec4 pos; + vec2 texcoord; + vec3 cubenormal; +}; +uniform samplerCube _ToonShade; +uniform sampler2D _MainTex; +uniform vec4 _Color; +vec4 frag ( + in v2f i_1 +) +{ + vec4 cube_2; + vec4 col_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, i_1.texcoord); + vec4 tmpvar_5; + tmpvar_5 = (_Color * tmpvar_4); + col_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = textureCube (_ToonShade, i_1.cubenormal); + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + cube_2 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8.xyz = ((2.0 * cube_2.xyz) * col_3.xyz).xyz; + tmpvar_8.w = col_3.w; + return tmpvar_8; +} + +void main () +{ + v2f xlt_i_9; + vec4 xl_retval_10; + vec4 tmpvar_11; + tmpvar_11 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_9.pos = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_TexCoord[0].xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_i_9.texcoord = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = gl_TexCoord[1].xyz; + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_i_9.cubenormal = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = frag (xlt_i_9); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xl_retval_10 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_10.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FragData[0] = tmpvar_19; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Basic-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Basic-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Toon_Lighted-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-ir.txt new file mode 100644 index 000000000..95ca7cc54 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-ir.txt @@ -0,0 +1,163 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _Ramp; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 LightingToonRamp ( + in SurfaceOutput s_8, + in vec3 lightDir_9, + in float atten_10 +) +{ + vec4 c_11; + vec3 ramp_12; + float d_13; + float tmpvar_14; + tmpvar_14 = dot (s_8.Normal, lightDir_9); + float tmpvar_15; + tmpvar_15 = ((tmpvar_14 * 0.5) + 0.5); + d_13 = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16.x = d_13; + tmpvar_16.y = d_13; + vec4 tmpvar_17; + tmpvar_17 = texture2D (_Ramp, tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + ramp_12 = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = (((s_8.Albedo * _LightColor0.xyz) * ramp_12) * (atten_10 * 2.0)); + c_11.xyz = tmpvar_19.xyz.xyz; + float tmpvar_20; + tmpvar_20 = 0.0; + c_11.w = vec4(tmpvar_20).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_21 +) +{ + vec4 c_22; + vec3 lightDir_23; + SurfaceOutput o_24; + Input surfIN_25; + vec2 tmpvar_26; + tmpvar_26 = IN_21.hip_pack0.xy; + surfIN_25.uv_MainTex = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_24.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_24.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_24.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_24.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_24.Gloss = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = IN_21.normal; + o_24.Normal = tmpvar_32; + surf (surfIN_25, o_24); + vec3 tmpvar_33; + tmpvar_33 = IN_21.lightDir; + lightDir_23 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = texture2D (_LightTexture0, IN_21._LightCoord); + vec4 tmpvar_35; + tmpvar_35 = LightingToonRamp (o_24, lightDir_23, (tmpvar_34.w * 1.0)); + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + c_22 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + c_22.w = vec4(tmpvar_37).w; + return c_22; +} + +void main () +{ + v2f_surf xlt_IN_38; + vec4 xl_retval_39; + vec4 tmpvar_40; + tmpvar_40 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_38.pos = tmpvar_40; + float tmpvar_41; + tmpvar_41 = xlv_FOG.x; + xlt_IN_38.fog = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = gl_TexCoord[0].xy; + vec2 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_IN_38.hip_pack0 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = gl_TexCoord[1].xyz; + vec3 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_38.normal = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_TexCoord[2].xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_38.lightDir = tmpvar_47; + vec2 tmpvar_48; + tmpvar_48 = gl_TexCoord[3].xy; + vec2 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_38._LightCoord = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = frag_surf (xlt_IN_38); + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xl_retval_39 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = xl_retval_39.xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_FragData[0] = tmpvar_53; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-out.txt new file mode 100644 index 000000000..92c3cfaba --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Toon_Lighted-out.txt @@ -0,0 +1,16 @@ +uniform sampler2D _Ramp; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec4 c_1; + vec4 c_2; + c_2.xyz = ((((texture2D (_MainTex, gl_TexCoord[0].xy) * _Color).xyz * _LightColor0.xyz) * texture2D (_Ramp, vec2(((dot (gl_TexCoord[1].xyz, gl_TexCoord[2].xyz) * 0.5) + 0.5))).xyz) * (texture2D (_LightTexture0, gl_TexCoord[3].xy).w * 2.0)); + c_2.w = 0.0; + c_1.xyz = c_2.xyz; + c_1.w = 0.0; + gl_FragData[0] = c_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-ir.txt new file mode 100644 index 000000000..8923b3090 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-ir.txt @@ -0,0 +1,229 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 tex_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + tex_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (tex_8.xyz * _Color.xyz); + o_7.Albedo = tmpvar_11; + float tmpvar_12; + tmpvar_12 = tex_8.w; + o_7.Gloss = tmpvar_12; + float tmpvar_13; + tmpvar_13 = (tex_8.w * _Color.w); + o_7.Alpha = tmpvar_13; + float tmpvar_14; + tmpvar_14 = _Shininess; + o_7.Specular = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_BumpMap, IN_6.uv_BumpMap); + vec4 tmpvar_16; + tmpvar_16 = UnpackNormal (tmpvar_15); + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16.xyz; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + o_7.Normal = tmpvar_18; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_19, + in vec3 lightDir_20, + in vec3 viewDir_21, + in float atten_22 +) +{ + vec4 c_23; + float spec_24; + float nh_25; + float diff_26; + vec3 h_27; + vec3 tmpvar_28; + tmpvar_28 = normalize ((lightDir_20 + viewDir_21)); + vec3 tmpvar_29; + tmpvar_29 = tmpvar_28; + h_27 = tmpvar_29; + float tmpvar_30; + tmpvar_30 = dot (s_19.Normal, lightDir_20); + float tmpvar_31; + tmpvar_31 = max (0.0, tmpvar_30); + float tmpvar_32; + tmpvar_32 = tmpvar_31; + diff_26 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = dot (s_19.Normal, h_27); + float tmpvar_34; + tmpvar_34 = max (0.0, tmpvar_33); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + nh_25 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = pow (nh_25, (s_19.Specular * 128.0)); + float tmpvar_37; + tmpvar_37 = (tmpvar_36 * s_19.Gloss); + spec_24 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = ((((s_19.Albedo * _LightColor0.xyz) * diff_26) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_24)) * (atten_22 * 2.0)); + c_23.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = (s_19.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_24) * atten_22)); + c_23.w = vec4(tmpvar_39).w; + return c_23; +} + +vec4 frag_surf ( + in v2f_surf IN_40 +) +{ + vec4 c_41; + vec3 lightDir_42; + SurfaceOutput o_43; + Input surfIN_44; + vec2 tmpvar_45; + tmpvar_45 = IN_40.hip_pack0.xy; + surfIN_44.uv_MainTex = tmpvar_45; + vec2 tmpvar_46; + tmpvar_46 = IN_40.hip_pack0.zw; + surfIN_44.uv_BumpMap = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = vec3(0.0, 0.0, 0.0); + o_43.Albedo = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_43.Emission = tmpvar_48; + float tmpvar_49; + tmpvar_49 = 0.0; + o_43.Specular = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_43.Alpha = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + o_43.Gloss = tmpvar_51; + surf (surfIN_44, o_43); + vec3 tmpvar_52; + tmpvar_52 = IN_40.lightDir; + lightDir_42 = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = normalize (lightDir_42); + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + lightDir_42 = tmpvar_54; + vec3 tmpvar_55; + tmpvar_55 = IN_40.viewDir.xyz; + vec3 tmpvar_56; + tmpvar_56 = normalize (tmpvar_55); + float tmpvar_57; + tmpvar_57 = dot (IN_40._LightCoord, IN_40._LightCoord); + vec2 tmpvar_58; + tmpvar_58 = vec2(tmpvar_57); + vec2 tmpvar_59; + tmpvar_59 = tmpvar_58.xy; + vec4 tmpvar_60; + tmpvar_60 = texture2D (_LightTextureB0, tmpvar_59); + vec4 tmpvar_61; + tmpvar_61 = textureCube (_LightTexture0, IN_40._LightCoord); + vec4 tmpvar_62; + tmpvar_62 = LightingBlinnPhong (o_43, lightDir_42, tmpvar_56, (tmpvar_60.w * tmpvar_61.w)); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + c_41 = tmpvar_63; + float tmpvar_64; + tmpvar_64 = o_43.Alpha; + c_41.w = vec4(tmpvar_64).w; + return c_41; +} + +void main () +{ + v2f_surf xlt_IN_65; + vec4 xl_retval_66; + vec4 tmpvar_67; + tmpvar_67 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_65.pos = tmpvar_67; + float tmpvar_68; + tmpvar_68 = xlv_FOG.x; + xlt_IN_65.fog = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = gl_TexCoord[0].xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_65.hip_pack0 = tmpvar_70; + vec3 tmpvar_71; + tmpvar_71 = gl_TexCoord[1].xyz; + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_IN_65.lightDir = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = gl_TexCoord[2].xyz; + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_IN_65.viewDir = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = gl_TexCoord[3].xyz; + vec3 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_IN_65._LightCoord = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = frag_surf (xlt_IN_65); + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xl_retval_66 = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = xl_retval_66.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + gl_FragData[0] = tmpvar_80; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-out.txt new file mode 100644 index 000000000..b17e18586 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Bumped_Specular-out.txt @@ -0,0 +1,36 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1.xy); + float tmpvar_5; + tmpvar_5 = (tmpvar_4.w * _Color.w); + vec4 normal_6; + normal_6.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_6.z = sqrt(((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + vec3 tmpvar_7; + tmpvar_7 = normalize(gl_TexCoord[1].xyz); + float atten_8; + atten_8 = (texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w); + vec4 c_9; + float tmpvar_10; + tmpvar_10 = (pow (max (0.0, dot (normal_6.xyz, normalize((tmpvar_7 + normalize(gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_9.xyz = (((((tmpvar_4.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_6.xyz, tmpvar_7))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_10)) * (atten_8 * 2.0)); + c_9.w = (tmpvar_5 + (((_LightColor0.w * _SpecColor.w) * tmpvar_10) * atten_8)); + c_3.xyz = c_9.xyz; + c_3.w = tmpvar_5; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..319cc41dc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt @@ -0,0 +1,178 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 UnpackNormal ( + in vec4 packednormal_2 +) +{ + vec4 normal_3; + vec2 tmpvar_4; + tmpvar_4 = ((packednormal_2.wy * 2.0) - 1.0); + normal_3.xy = tmpvar_4.xy.xy; + float tmpvar_5; + tmpvar_5 = sqrt (((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + float tmpvar_6; + tmpvar_6 = tmpvar_5; + normal_3.z = vec3(tmpvar_6).z; + return normal_3; +} + +void surf ( + in Input IN_7, + inout SurfaceOutput o_8 +) +{ + vec4 c_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_7.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * _Color); + c_9 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = c_9.xyz; + o_8.Albedo = tmpvar_12; + float tmpvar_13; + tmpvar_13 = c_9.w; + o_8.Alpha = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_BumpMap, IN_7.uv_BumpMap); + vec4 tmpvar_15; + tmpvar_15 = UnpackNormal (tmpvar_14); + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15.xyz; + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_8.Normal = tmpvar_17; +} + +vec4 LightingLambert ( + in SurfaceOutput s_18, + in vec3 lightDir_19, + in float atten_20 +) +{ + vec4 c_21; + float diff_22; + float tmpvar_23; + tmpvar_23 = dot (s_18.Normal, lightDir_19); + float tmpvar_24; + tmpvar_24 = max (0.0, tmpvar_23); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + diff_22 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = ((s_18.Albedo * _LightColor0.xyz) * ((diff_22 * atten_20) * 2.0)); + c_21.xyz = tmpvar_26.xyz.xyz; + float tmpvar_27; + tmpvar_27 = s_18.Alpha; + c_21.w = vec4(tmpvar_27).w; + return c_21; +} + +vec4 frag_surf ( + in v2f_surf IN_28 +) +{ + vec4 c_29; + vec3 lightDir_30; + SurfaceOutput o_31; + Input surfIN_32; + vec2 tmpvar_33; + tmpvar_33 = IN_28.hip_pack0.xy; + surfIN_32.uv_MainTex = tmpvar_33; + vec2 tmpvar_34; + tmpvar_34 = IN_28.hip_pack0.zw; + surfIN_32.uv_BumpMap = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = vec3(0.0, 0.0, 0.0); + o_31.Albedo = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = vec3(0.0, 0.0, 0.0); + o_31.Emission = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_31.Specular = tmpvar_37; + float tmpvar_38; + tmpvar_38 = 0.0; + o_31.Alpha = tmpvar_38; + float tmpvar_39; + tmpvar_39 = 0.0; + o_31.Gloss = tmpvar_39; + surf (surfIN_32, o_31); + xll_clip ((o_31.Alpha - _Cutoff)); + vec3 tmpvar_40; + tmpvar_40 = IN_28.lightDir; + lightDir_30 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = LightingLambert (o_31, lightDir_30, 1.0); + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + c_29 = tmpvar_42; + float tmpvar_43; + tmpvar_43 = o_31.Alpha; + c_29.w = vec4(tmpvar_43).w; + return c_29; +} + +void main () +{ + v2f_surf xlt_IN_44; + vec4 xl_retval_45; + vec4 tmpvar_46; + tmpvar_46 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_44.pos = tmpvar_46; + float tmpvar_47; + tmpvar_47 = xlv_FOG.x; + xlt_IN_44.fog = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_TexCoord[0].xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_44.hip_pack0 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[1].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_44.lightDir = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = frag_surf (xlt_IN_44); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xl_retval_45 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_45.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_FragData[0] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-out.txt new file mode 100644 index 000000000..b9ba3a72f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse-out.txt @@ -0,0 +1,30 @@ +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, tmpvar_1.xy) * _Color); + float tmpvar_4; + tmpvar_4 = tmpvar_3.w; + vec4 normal_5; + normal_5.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + float x_6; + x_6 = (tmpvar_3.w - _Cutoff); + if ((x_6 < 0.0)) { + discard; + }; + vec4 c_7; + c_7.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * (max (0.0, dot (normal_5.xyz, gl_TexCoord[1].xyz)) * 2.0)); + c_7.w = tmpvar_4; + c_2.xyz = c_7.xyz; + c_2.w = tmpvar_4; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..e010d39dc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt @@ -0,0 +1,174 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 UnpackNormal ( + in vec4 packednormal_2 +) +{ + vec4 normal_3; + vec2 tmpvar_4; + tmpvar_4 = ((packednormal_2.wy * 2.0) - 1.0); + normal_3.xy = tmpvar_4.xy.xy; + float tmpvar_5; + tmpvar_5 = sqrt (((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + float tmpvar_6; + tmpvar_6 = tmpvar_5; + normal_3.z = vec3(tmpvar_6).z; + return normal_3; +} + +void surf ( + in Input IN_7, + inout SurfaceOutput o_8 +) +{ + vec4 c_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_7.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * _Color); + c_9 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = c_9.xyz; + o_8.Albedo = tmpvar_12; + float tmpvar_13; + tmpvar_13 = c_9.w; + o_8.Alpha = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = texture2D (_BumpMap, IN_7.uv_BumpMap); + vec4 tmpvar_15; + tmpvar_15 = UnpackNormal (tmpvar_14); + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15.xyz; + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_8.Normal = tmpvar_17; +} + +vec4 LightingLambert_PrePass ( + in SurfaceOutput s_18, + in vec4 light_19 +) +{ + vec4 c_20; + vec3 tmpvar_21; + tmpvar_21 = (s_18.Albedo * light_19.xyz); + c_20.xyz = tmpvar_21.xyz.xyz; + float tmpvar_22; + tmpvar_22 = s_18.Alpha; + c_20.w = vec4(tmpvar_22).w; + return c_20; +} + +vec4 frag_surf ( + in v2f_surf IN_23 +) +{ + vec4 col_24; + vec4 light_25; + SurfaceOutput o_26; + Input surfIN_27; + vec2 tmpvar_28; + tmpvar_28 = IN_23.hip_pack0.xy; + surfIN_27.uv_MainTex = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = vec3(0.0, 0.0, 0.0); + o_26.Albedo = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(0.0, 0.0, 0.0); + o_26.Emission = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_26.Specular = tmpvar_31; + float tmpvar_32; + tmpvar_32 = 0.0; + o_26.Alpha = tmpvar_32; + float tmpvar_33; + tmpvar_33 = 0.0; + o_26.Gloss = tmpvar_33; + surf (surfIN_27, o_26); + xll_clip ((o_26.Alpha - _Cutoff)); + vec4 tmpvar_34; + tmpvar_34 = texture2DProj (_LightBuffer, IN_23.hip_screen); + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + light_25 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = log2 (light_25); + vec4 tmpvar_37; + tmpvar_37 = -(tmpvar_36); + light_25 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = (light_25.xyz + unity_Ambient.xyz); + light_25.xyz = tmpvar_38.xyz.xyz; + vec4 tmpvar_39; + tmpvar_39 = LightingLambert_PrePass (o_26, light_25); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + col_24 = tmpvar_40; + return col_24; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + float tmpvar_44; + tmpvar_44 = xlv_FOG.x; + xlt_IN_41.fog = tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = gl_TexCoord[0].xy; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_41.hip_pack0 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_TexCoord[1].xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_41.hip_screen = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = frag_surf (xlt_IN_41); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xl_retval_42 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_42.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_FragData[0] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt new file mode 100644 index 000000000..67cde282a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt @@ -0,0 +1,30 @@ +uniform vec4 unity_Ambient; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 light_1; + vec2 tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + float x_5; + x_5 = (tmpvar_3.w - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + vec4 tmpvar_6; + tmpvar_6 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_1.w = tmpvar_6.w; + light_1.xyz = (tmpvar_6.xyz + unity_Ambient.xyz); + vec4 c_7; + c_7.xyz = (tmpvar_3.xyz * light_1.xyz); + c_7.w = tmpvar_3.w; + gl_FragData[0] = c_7; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-ir.txt new file mode 100644 index 000000000..ecddaff68 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-ir.txt @@ -0,0 +1,180 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + vec4 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 UnpackNormal ( + in vec4 packednormal_2 +) +{ + vec4 normal_3; + vec2 tmpvar_4; + tmpvar_4 = ((packednormal_2.wy * 2.0) - 1.0); + normal_3.xy = tmpvar_4.xy.xy; + float tmpvar_5; + tmpvar_5 = sqrt (((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + float tmpvar_6; + tmpvar_6 = tmpvar_5; + normal_3.z = vec3(tmpvar_6).z; + return normal_3; +} + +void surf ( + in Input IN_7, + inout SurfaceOutput o_8 +) +{ + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_7.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = (tex_9.xyz * _Color.xyz); + o_8.Albedo = tmpvar_12; + float tmpvar_13; + tmpvar_13 = tex_9.w; + o_8.Gloss = tmpvar_13; + float tmpvar_14; + tmpvar_14 = (tex_9.w * _Color.w); + o_8.Alpha = tmpvar_14; + float tmpvar_15; + tmpvar_15 = _Shininess; + o_8.Specular = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_7.uv_BumpMap); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_8.Normal = tmpvar_19; +} + +vec4 frag_surf ( + in v2f_surf IN_20 +) +{ + vec4 res_21; + vec3 viewN_22; + SurfaceOutput o_23; + Input surfIN_24; + vec2 tmpvar_25; + tmpvar_25 = IN_20.hip_pack0.xy; + surfIN_24.uv_MainTex = tmpvar_25; + vec2 tmpvar_26; + tmpvar_26 = IN_20.hip_pack0.zw; + surfIN_24.uv_BumpMap = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = vec3(0.0, 0.0, 0.0); + o_23.Albedo = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = vec3(0.0, 0.0, 0.0); + o_23.Emission = tmpvar_28; + float tmpvar_29; + tmpvar_29 = 0.0; + o_23.Specular = tmpvar_29; + float tmpvar_30; + tmpvar_30 = 0.0; + o_23.Alpha = tmpvar_30; + float tmpvar_31; + tmpvar_31 = 0.0; + o_23.Gloss = tmpvar_31; + surf (surfIN_24, o_23); + xll_clip ((o_23.Alpha - _Cutoff)); + float tmpvar_32; + tmpvar_32 = dot (IN_20.TtoV0, o_23.Normal); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + viewN_22.x = tmpvar_33; + float tmpvar_34; + tmpvar_34 = dot (IN_20.TtoV1, o_23.Normal); + float tmpvar_35; + tmpvar_35 = tmpvar_34; + viewN_22.y = vec2(tmpvar_35).y; + float tmpvar_36; + tmpvar_36 = dot (IN_20.TtoV2, o_23.Normal); + float tmpvar_37; + tmpvar_37 = tmpvar_36; + viewN_22.z = vec3(tmpvar_37).z; + vec3 tmpvar_38; + tmpvar_38 = viewN_22; + o_23.Normal = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = ((o_23.Normal * vec3(0.5, 0.5, -0.5)) + 0.5); + res_21.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = o_23.Specular; + res_21.w = vec4(tmpvar_40).w; + return res_21; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = gl_TexCoord[0].xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_IN_41.hip_pack0 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_TexCoord[1].xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_IN_41.TtoV0 = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = gl_TexCoord[2].xyz; + vec3 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_IN_41.TtoV1 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_TexCoord[3].xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_41.TtoV2 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = frag_surf (xlt_IN_41); + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xl_retval_42 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_42.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_FragData[0] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-out.txt new file mode 100644 index 000000000..1428b85b8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular-out.txt @@ -0,0 +1,27 @@ +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[0]; + vec4 res_2; + vec3 viewN_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_1.zw).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + float x_5; + x_5 = ((texture2D (_MainTex, tmpvar_1.xy).w * _Color.w) - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + viewN_3.x = dot (gl_TexCoord[1].xyz, normal_4.xyz); + viewN_3.y = dot (gl_TexCoord[2].xyz, normal_4.xyz); + viewN_3.z = dot (gl_TexCoord[3].xyz, normal_4.xyz); + res_2.xyz = ((viewN_3 * vec3(0.5, 0.5, -0.5)) + 0.5); + res_2.w = _Shininess; + gl_FragData[0] = res_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-ir.txt new file mode 100644 index 000000000..b7cb57ff2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-ir.txt @@ -0,0 +1,186 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec2 uv_BumpMap; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 UnpackNormal ( + in vec4 packednormal_2 +) +{ + vec4 normal_3; + vec2 tmpvar_4; + tmpvar_4 = ((packednormal_2.wy * 2.0) - 1.0); + normal_3.xy = tmpvar_4.xy.xy; + float tmpvar_5; + tmpvar_5 = sqrt (((1.0 - (normal_3.x * normal_3.x)) - (normal_3.y * normal_3.y))); + float tmpvar_6; + tmpvar_6 = tmpvar_5; + normal_3.z = vec3(tmpvar_6).z; + return normal_3; +} + +void surf ( + in Input IN_7, + inout SurfaceOutput o_8 +) +{ + vec4 tex_9; + vec4 tmpvar_10; + tmpvar_10 = texture2D (_MainTex, IN_7.uv_MainTex); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + tex_9 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = (tex_9.xyz * _Color.xyz); + o_8.Albedo = tmpvar_12; + float tmpvar_13; + tmpvar_13 = tex_9.w; + o_8.Gloss = tmpvar_13; + float tmpvar_14; + tmpvar_14 = (tex_9.w * _Color.w); + o_8.Alpha = tmpvar_14; + float tmpvar_15; + tmpvar_15 = _Shininess; + o_8.Specular = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_7.uv_BumpMap); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_8.Normal = tmpvar_19; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_20, + in vec4 light_21 +) +{ + vec4 c_22; + float spec_23; + float tmpvar_24; + tmpvar_24 = (light_21.w * s_20.Gloss); + spec_23 = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = ((s_20.Albedo * light_21.xyz) + ((light_21.xyz * _SpecColor.xyz) * spec_23)); + c_22.xyz = tmpvar_25.xyz.xyz; + float tmpvar_26; + tmpvar_26 = (s_20.Alpha + (spec_23 * _SpecColor.w)); + c_22.w = vec4(tmpvar_26).w; + return c_22; +} + +vec4 frag_surf ( + in v2f_surf IN_27 +) +{ + vec4 col_28; + vec4 light_29; + SurfaceOutput o_30; + Input surfIN_31; + vec2 tmpvar_32; + tmpvar_32 = IN_27.hip_pack0.xy; + surfIN_31.uv_MainTex = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_30.Albedo = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(0.0, 0.0, 0.0); + o_30.Emission = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_30.Specular = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_30.Alpha = tmpvar_36; + float tmpvar_37; + tmpvar_37 = 0.0; + o_30.Gloss = tmpvar_37; + surf (surfIN_31, o_30); + xll_clip ((o_30.Alpha - _Cutoff)); + vec4 tmpvar_38; + tmpvar_38 = texture2DProj (_LightBuffer, IN_27.hip_screen); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + light_29 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = log2 (light_29); + vec4 tmpvar_41; + tmpvar_41 = -(tmpvar_40); + light_29 = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = (light_29.xyz + unity_Ambient.xyz); + light_29.xyz = tmpvar_42.xyz.xyz; + vec4 tmpvar_43; + tmpvar_43 = LightingBlinnPhong_PrePass (o_30, light_29); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + col_28 = tmpvar_44; + return col_28; +} + +void main () +{ + v2f_surf xlt_IN_45; + vec4 xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_45.pos = tmpvar_47; + float tmpvar_48; + tmpvar_48 = xlv_FOG.x; + xlt_IN_45.fog = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = gl_TexCoord[0].xy; + vec2 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_45.hip_pack0 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_TexCoord[1].xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_45.hip_screen = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = frag_surf (xlt_IN_45); + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_46 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_46.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_FragData[0] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-out.txt new file mode 100644 index 000000000..9f2db47f3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Bumped_Specular1-out.txt @@ -0,0 +1,35 @@ +uniform vec4 unity_Ambient; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec4 light_1; + vec2 tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); + float tmpvar_4; + tmpvar_4 = (tmpvar_3.w * _Color.w); + vec4 normal_5; + normal_5.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); + normal_5.z = sqrt(((1.0 - (normal_5.x * normal_5.x)) - (normal_5.y * normal_5.y))); + float x_6; + x_6 = (tmpvar_4 - _Cutoff); + if ((x_6 < 0.0)) { + discard; + }; + vec4 tmpvar_7; + tmpvar_7 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_1.w = tmpvar_7.w; + light_1.xyz = (tmpvar_7.xyz + unity_Ambient.xyz); + vec4 c_8; + float tmpvar_9; + tmpvar_9 = (tmpvar_7.w * tmpvar_3.w); + c_8.xyz = (((tmpvar_3.xyz * _Color.xyz) * light_1.xyz) + ((light_1.xyz * _SpecColor.xyz) * tmpvar_9)); + c_8.w = (tmpvar_4 + (tmpvar_9 * _SpecColor.w)); + gl_FragData[0] = c_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-ir.txt new file mode 100644 index 000000000..1dbbe265f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-ir.txt @@ -0,0 +1,198 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 c_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * _Color); + c_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = c_4.xyz; + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = c_4.w; + o_3.Alpha = tmpvar_8; +} + +float UnitySpotCookie ( + in vec4 LightCoord_9 +) +{ + vec4 tmpvar_10; + tmpvar_10 = texture2D (_LightTexture0, ((LightCoord_9.xy / LightCoord_9.w) + 0.5)); + return tmpvar_10.w; +} + +float UnitySpotAttenuate ( + in vec3 LightCoord_11 +) +{ + float tmpvar_12; + tmpvar_12 = dot (LightCoord_11, LightCoord_11); + vec2 tmpvar_13; + tmpvar_13 = vec2(tmpvar_12); + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13.xy; + vec4 tmpvar_15; + tmpvar_15 = texture2D (_LightTextureB0, tmpvar_14); + return tmpvar_15.w; +} + +vec4 LightingLambert ( + in SurfaceOutput s_16, + in vec3 lightDir_17, + in float atten_18 +) +{ + vec4 c_19; + float diff_20; + float tmpvar_21; + tmpvar_21 = dot (s_16.Normal, lightDir_17); + float tmpvar_22; + tmpvar_22 = max (0.0, tmpvar_21); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + diff_20 = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = ((s_16.Albedo * _LightColor0.xyz) * ((diff_20 * atten_18) * 2.0)); + c_19.xyz = tmpvar_24.xyz.xyz; + float tmpvar_25; + tmpvar_25 = s_16.Alpha; + c_19.w = vec4(tmpvar_25).w; + return c_19; +} + +vec4 frag_surf ( + in v2f_surf IN_26 +) +{ + vec4 c_27; + vec3 lightDir_28; + SurfaceOutput o_29; + Input surfIN_30; + vec2 tmpvar_31; + tmpvar_31 = IN_26.hip_pack0.xy; + surfIN_30.uv_MainTex = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = vec3(0.0, 0.0, 0.0); + o_29.Albedo = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = vec3(0.0, 0.0, 0.0); + o_29.Emission = tmpvar_33; + float tmpvar_34; + tmpvar_34 = 0.0; + o_29.Specular = tmpvar_34; + float tmpvar_35; + tmpvar_35 = 0.0; + o_29.Alpha = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.0; + o_29.Gloss = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = IN_26.normal; + o_29.Normal = tmpvar_37; + surf (surfIN_30, o_29); + xll_clip ((o_29.Alpha - _Cutoff)); + vec3 tmpvar_38; + tmpvar_38 = IN_26.lightDir; + lightDir_28 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = normalize (lightDir_28); + vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + lightDir_28 = tmpvar_40; + float tmpvar_41; + tmpvar_41 = UnitySpotCookie (IN_26._LightCoord); + float tmpvar_42; + tmpvar_42 = UnitySpotAttenuate (IN_26._LightCoord.xyz); + vec4 tmpvar_43; + tmpvar_43 = LightingLambert (o_29, lightDir_28, ((float((IN_26._LightCoord.z > 0.0)) * tmpvar_41) * tmpvar_42)); + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + c_27 = tmpvar_44; + float tmpvar_45; + tmpvar_45 = o_29.Alpha; + c_27.w = vec4(tmpvar_45).w; + return c_27; +} + +void main () +{ + v2f_surf xlt_IN_46; + vec4 xl_retval_47; + vec4 tmpvar_48; + tmpvar_48 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_46.pos = tmpvar_48; + float tmpvar_49; + tmpvar_49 = xlv_FOG.x; + xlt_IN_46.fog = tmpvar_49; + vec2 tmpvar_50; + tmpvar_50 = gl_TexCoord[0].xy; + vec2 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_IN_46.hip_pack0 = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = gl_TexCoord[1].xyz; + vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_IN_46.normal = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = gl_TexCoord[2].xyz; + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_46.lightDir = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = gl_TexCoord[3].xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_46._LightCoord = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = frag_surf (xlt_IN_46); + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xl_retval_47 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = xl_retval_47.xyzw; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + gl_FragData[0] = tmpvar_61; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-out.txt new file mode 100644 index 000000000..df8b3a8c2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Diffuse-out.txt @@ -0,0 +1,28 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = gl_TexCoord[3]; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + float tmpvar_4; + tmpvar_4 = tmpvar_3.w; + float x_5; + x_5 = (tmpvar_3.w - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + vec4 c_6; + c_6.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * ((float((tmpvar_1.z > 0.0)) * texture2D (_LightTexture0, ((tmpvar_1.xy / tmpvar_1.w) + 0.5)).w) * texture2D (_LightTextureB0, vec2(dot (tmpvar_1.xyz, tmpvar_1.xyz))).w)) * 2.0)); + c_6.w = tmpvar_4; + c_2.xyz = c_6.xyz; + c_2.w = tmpvar_4; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-ir.txt new file mode 100644 index 000000000..1f9c8d825 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-ir.txt @@ -0,0 +1,196 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 tex_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = (tex_4.xyz * _Color.xyz); + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = tex_4.w; + o_3.Gloss = tmpvar_8; + float tmpvar_9; + tmpvar_9 = (tex_4.w * _Color.w); + o_3.Alpha = tmpvar_9; + float tmpvar_10; + tmpvar_10 = _Shininess; + o_3.Specular = tmpvar_10; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_11, + in vec3 lightDir_12, + in vec3 viewDir_13, + in float atten_14 +) +{ + vec4 c_15; + float spec_16; + float nh_17; + float diff_18; + vec3 h_19; + vec3 tmpvar_20; + tmpvar_20 = normalize ((lightDir_12 + viewDir_13)); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + h_19 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (s_11.Normal, lightDir_12); + float tmpvar_23; + tmpvar_23 = max (0.0, tmpvar_22); + float tmpvar_24; + tmpvar_24 = tmpvar_23; + diff_18 = tmpvar_24; + float tmpvar_25; + tmpvar_25 = dot (s_11.Normal, h_19); + float tmpvar_26; + tmpvar_26 = max (0.0, tmpvar_25); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + nh_17 = tmpvar_27; + float tmpvar_28; + tmpvar_28 = pow (nh_17, (s_11.Specular * 128.0)); + float tmpvar_29; + tmpvar_29 = (tmpvar_28 * s_11.Gloss); + spec_16 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = ((((s_11.Albedo * _LightColor0.xyz) * diff_18) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_16)) * (atten_14 * 2.0)); + c_15.xyz = tmpvar_30.xyz.xyz; + float tmpvar_31; + tmpvar_31 = (s_11.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_16) * atten_14)); + c_15.w = vec4(tmpvar_31).w; + return c_15; +} + +vec4 frag_surf ( + in v2f_surf IN_32 +) +{ + vec4 c_33; + vec3 lightDir_34; + SurfaceOutput o_35; + Input surfIN_36; + vec2 tmpvar_37; + tmpvar_37 = IN_32.hip_pack0.xy; + surfIN_36.uv_MainTex = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_35.Albedo = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = vec3(0.0, 0.0, 0.0); + o_35.Emission = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_35.Specular = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_35.Alpha = tmpvar_41; + float tmpvar_42; + tmpvar_42 = 0.0; + o_35.Gloss = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = IN_32.normal; + o_35.Normal = tmpvar_43; + surf (surfIN_36, o_35); + xll_clip ((o_35.Alpha - _Cutoff)); + vec3 tmpvar_44; + tmpvar_44 = IN_32.lightDir; + lightDir_34 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = IN_32.viewDir.xyz; + vec3 tmpvar_46; + tmpvar_46 = normalize (tmpvar_45); + vec4 tmpvar_47; + tmpvar_47 = LightingBlinnPhong (o_35, lightDir_34, tmpvar_46, 1.0); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + c_33 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = o_35.Alpha; + c_33.w = vec4(tmpvar_49).w; + return c_33; +} + +void main () +{ + v2f_surf xlt_IN_50; + vec4 xl_retval_51; + vec4 tmpvar_52; + tmpvar_52 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_50.pos = tmpvar_52; + float tmpvar_53; + tmpvar_53 = xlv_FOG.x; + xlt_IN_50.fog = tmpvar_53; + vec2 tmpvar_54; + tmpvar_54 = gl_TexCoord[0].xy; + vec2 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_50.hip_pack0 = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = gl_TexCoord[1].xyz; + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_50.normal = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = gl_TexCoord[2].xyz; + vec3 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_IN_50.lightDir = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = gl_TexCoord[3].xyz; + vec3 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_IN_50.viewDir = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = frag_surf (xlt_IN_50); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + xl_retval_51 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = xl_retval_51.xyzw; + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + gl_FragData[0] = tmpvar_65; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-out.txt new file mode 100644 index 000000000..ce9dad0f5 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular-out.txt @@ -0,0 +1,32 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + float tmpvar_5; + tmpvar_5 = (tmpvar_4.w * _Color.w); + float x_6; + x_6 = (tmpvar_5 - _Cutoff); + if ((x_6 < 0.0)) { + discard; + }; + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (pow (max (0.0, dot (tmpvar_1, normalize((tmpvar_2 + normalize(gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_7.xyz = (((((tmpvar_4.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_8)) * 2.0); + c_7.w = (tmpvar_5 + ((_LightColor0.w * _SpecColor.w) * tmpvar_8)); + c_3.xyz = c_7.xyz; + c_3.w = tmpvar_5; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-ir.txt new file mode 100644 index 000000000..eeec2e22c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-ir.txt @@ -0,0 +1,219 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +void surf ( + in Input IN_2, + inout SurfaceOutput o_3 +) +{ + vec4 tex_4; + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, IN_2.uv_MainTex); + vec4 tmpvar_6; + tmpvar_6 = tmpvar_5; + tex_4 = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = (tex_4.xyz * _Color.xyz); + o_3.Albedo = tmpvar_7; + float tmpvar_8; + tmpvar_8 = tex_4.w; + o_3.Gloss = tmpvar_8; + float tmpvar_9; + tmpvar_9 = (tex_4.w * _Color.w); + o_3.Alpha = tmpvar_9; + float tmpvar_10; + tmpvar_10 = _Shininess; + o_3.Specular = tmpvar_10; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_11, + in vec3 lightDir_12, + in vec3 viewDir_13, + in float atten_14 +) +{ + vec4 c_15; + float spec_16; + float nh_17; + float diff_18; + vec3 h_19; + vec3 tmpvar_20; + tmpvar_20 = normalize ((lightDir_12 + viewDir_13)); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + h_19 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (s_11.Normal, lightDir_12); + float tmpvar_23; + tmpvar_23 = max (0.0, tmpvar_22); + float tmpvar_24; + tmpvar_24 = tmpvar_23; + diff_18 = tmpvar_24; + float tmpvar_25; + tmpvar_25 = dot (s_11.Normal, h_19); + float tmpvar_26; + tmpvar_26 = max (0.0, tmpvar_25); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + nh_17 = tmpvar_27; + float tmpvar_28; + tmpvar_28 = pow (nh_17, (s_11.Specular * 128.0)); + float tmpvar_29; + tmpvar_29 = (tmpvar_28 * s_11.Gloss); + spec_16 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = ((((s_11.Albedo * _LightColor0.xyz) * diff_18) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_16)) * (atten_14 * 2.0)); + c_15.xyz = tmpvar_30.xyz.xyz; + float tmpvar_31; + tmpvar_31 = (s_11.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_16) * atten_14)); + c_15.w = vec4(tmpvar_31).w; + return c_15; +} + +vec4 frag_surf ( + in v2f_surf IN_32 +) +{ + vec4 c_33; + vec3 lightDir_34; + SurfaceOutput o_35; + Input surfIN_36; + vec2 tmpvar_37; + tmpvar_37 = IN_32.hip_pack0.xy; + surfIN_36.uv_MainTex = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_35.Albedo = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = vec3(0.0, 0.0, 0.0); + o_35.Emission = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_35.Specular = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_35.Alpha = tmpvar_41; + float tmpvar_42; + tmpvar_42 = 0.0; + o_35.Gloss = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = IN_32.normal; + o_35.Normal = tmpvar_43; + surf (surfIN_36, o_35); + xll_clip ((o_35.Alpha - _Cutoff)); + vec3 tmpvar_44; + tmpvar_44 = IN_32.lightDir; + lightDir_34 = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = normalize (lightDir_34); + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + lightDir_34 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = IN_32.viewDir.xyz; + vec3 tmpvar_48; + tmpvar_48 = normalize (tmpvar_47); + float tmpvar_49; + tmpvar_49 = dot (IN_32._LightCoord, IN_32._LightCoord); + vec2 tmpvar_50; + tmpvar_50 = vec2(tmpvar_49); + vec2 tmpvar_51; + tmpvar_51 = tmpvar_50.xy; + vec4 tmpvar_52; + tmpvar_52 = texture2D (_LightTextureB0, tmpvar_51); + vec4 tmpvar_53; + tmpvar_53 = textureCube (_LightTexture0, IN_32._LightCoord); + vec4 tmpvar_54; + tmpvar_54 = LightingBlinnPhong (o_35, lightDir_34, tmpvar_48, (tmpvar_52.w * tmpvar_53.w)); + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + c_33 = tmpvar_55; + float tmpvar_56; + tmpvar_56 = o_35.Alpha; + c_33.w = vec4(tmpvar_56).w; + return c_33; +} + +void main () +{ + v2f_surf xlt_IN_57; + vec4 xl_retval_58; + vec4 tmpvar_59; + tmpvar_59 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_57.pos = tmpvar_59; + float tmpvar_60; + tmpvar_60 = xlv_FOG.x; + xlt_IN_57.fog = tmpvar_60; + vec2 tmpvar_61; + tmpvar_61 = gl_TexCoord[0].xy; + vec2 tmpvar_62; + tmpvar_62 = tmpvar_61; + xlt_IN_57.hip_pack0 = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = gl_TexCoord[1].xyz; + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_IN_57.normal = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = gl_TexCoord[2].xyz; + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_IN_57.lightDir = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = gl_TexCoord[3].xyz; + vec3 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_IN_57.viewDir = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = gl_TexCoord[4].xyz; + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_57._LightCoord = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = frag_surf (xlt_IN_57); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xl_retval_58 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = xl_retval_58.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + gl_FragData[0] = tmpvar_74; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-out.txt new file mode 100644 index 000000000..217fa1191 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular1-out.txt @@ -0,0 +1,38 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[4].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + float tmpvar_5; + tmpvar_5 = (tmpvar_4.w * _Color.w); + float x_6; + x_6 = (tmpvar_5 - _Cutoff); + if ((x_6 < 0.0)) { + discard; + }; + vec3 tmpvar_7; + tmpvar_7 = normalize(gl_TexCoord[2].xyz); + float atten_8; + atten_8 = (texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w); + vec4 c_9; + float tmpvar_10; + tmpvar_10 = (pow (max (0.0, dot (tmpvar_1, normalize((tmpvar_7 + normalize(gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_9.xyz = (((((tmpvar_4.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_7))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_10)) * (atten_8 * 2.0)); + c_9.w = (tmpvar_5 + (((_LightColor0.w * _SpecColor.w) * tmpvar_10) * atten_8)); + c_3.xyz = c_9.xyz; + c_3.w = tmpvar_5; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Cutout_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-ir.txt new file mode 100644 index 000000000..24dbe75fd --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-ir.txt @@ -0,0 +1,304 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +void surf ( + in Input IN_34, + inout SurfaceOutput o_35 +) +{ + vec4 tex_36; + vec4 tmpvar_37; + tmpvar_37 = texture2D (_MainTex, IN_34.uv_MainTex); + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + tex_36 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = (tex_36.xyz * _Color.xyz); + o_35.Albedo = tmpvar_39; + float tmpvar_40; + tmpvar_40 = tex_36.w; + o_35.Gloss = tmpvar_40; + float tmpvar_41; + tmpvar_41 = (tex_36.w * _Color.w); + o_35.Alpha = tmpvar_41; + float tmpvar_42; + tmpvar_42 = _Shininess; + o_35.Specular = tmpvar_42; +} + +vec4 LightingBlinnPhong_PrePass ( + in SurfaceOutput s_43, + in vec4 light_44 +) +{ + vec4 c_45; + float spec_46; + float tmpvar_47; + tmpvar_47 = (light_44.w * s_43.Gloss); + spec_46 = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = ((s_43.Albedo * light_44.xyz) + ((light_44.xyz * _SpecColor.xyz) * spec_46)); + c_45.xyz = tmpvar_48.xyz.xyz; + float tmpvar_49; + tmpvar_49 = (s_43.Alpha + (spec_46 * _SpecColor.w)); + c_45.w = vec4(tmpvar_49).w; + return c_45; +} + +vec3 DecodeLightmap ( + in vec4 color_50 +) +{ + return (2.0 * color_50.xyz); +} + +vec4 frag_surf ( + in v2f_surf IN_51 +) +{ + vec4 col_52; + vec3 lm_53; + vec3 lmIndirect_54; + vec3 lmFull_55; + vec4 light_56; + SurfaceOutput o_57; + Input surfIN_58; + vec2 tmpvar_59; + tmpvar_59 = IN_51.hip_pack0.xy; + surfIN_58.uv_MainTex = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = vec3(0.0, 0.0, 0.0); + o_57.Albedo = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = vec3(0.0, 0.0, 0.0); + o_57.Emission = tmpvar_61; + float tmpvar_62; + tmpvar_62 = 0.0; + o_57.Specular = tmpvar_62; + float tmpvar_63; + tmpvar_63 = 0.0; + o_57.Alpha = tmpvar_63; + float tmpvar_64; + tmpvar_64 = 0.0; + o_57.Gloss = tmpvar_64; + surf (surfIN_58, o_57); + xll_clip ((o_57.Alpha - _Cutoff)); + vec4 tmpvar_65; + tmpvar_65 = texture2DProj (_LightBuffer, IN_51.hip_screen); + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + light_56 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = log2 (light_56); + vec4 tmpvar_68; + tmpvar_68 = -(tmpvar_67); + light_56 = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = texture2D (unity_Lightmap, IN_51.hip_lmapFade.xy); + vec3 tmpvar_70; + tmpvar_70 = DecodeLightmap (tmpvar_69); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + lmFull_55 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = texture2D (unity_LightmapInd, IN_51.hip_lmapFade.xy); + vec3 tmpvar_73; + tmpvar_73 = DecodeLightmap (tmpvar_72); + vec3 tmpvar_74; + tmpvar_74 = tmpvar_73; + lmIndirect_54 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = xll_saturate (IN_51.hip_lmapFade.z); + vec3 tmpvar_76; + tmpvar_76 = vec3(tmpvar_75); + vec3 tmpvar_77; + tmpvar_77 = mix (lmIndirect_54, lmFull_55, tmpvar_76); + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + lm_53 = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = (light_56.xyz + lm_53); + light_56.xyz = tmpvar_79.xyz.xyz; + vec4 tmpvar_80; + tmpvar_80 = LightingBlinnPhong_PrePass (o_57, light_56); + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + col_52 = tmpvar_81; + return col_52; +} + +void main () +{ + v2f_surf xlt_IN_82; + vec4 xl_retval_83; + vec4 tmpvar_84; + tmpvar_84 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_82.pos = tmpvar_84; + float tmpvar_85; + tmpvar_85 = xlv_FOG.x; + xlt_IN_82.fog = tmpvar_85; + vec2 tmpvar_86; + tmpvar_86 = gl_TexCoord[0].xy; + vec2 tmpvar_87; + tmpvar_87 = tmpvar_86; + xlt_IN_82.hip_pack0 = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = gl_TexCoord[1].xyzw; + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + xlt_IN_82.hip_screen = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = gl_TexCoord[2].xyz; + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + xlt_IN_82.hip_lmapFade = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92 = frag_surf (xlt_IN_82); + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + xl_retval_83 = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = xl_retval_83.xyzw; + vec4 tmpvar_95; + tmpvar_95 = tmpvar_94; + gl_FragData[0] = tmpvar_95; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-out.txt new file mode 100644 index 000000000..56994a993 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Cutout_Specular2-out.txt @@ -0,0 +1,33 @@ +uniform sampler2D unity_LightmapInd; +uniform sampler2D unity_Lightmap; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform sampler2D _LightBuffer; +uniform float _Cutoff; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[2].xyz; + vec4 light_2; + vec4 tmpvar_3; + tmpvar_3 = texture2D (_MainTex, gl_TexCoord[0].xy); + float tmpvar_4; + tmpvar_4 = (tmpvar_3.w * _Color.w); + float x_5; + x_5 = (tmpvar_4 - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + vec4 tmpvar_6; + tmpvar_6 = -(log2(texture2DProj (_LightBuffer, gl_TexCoord[1]))); + light_2.w = tmpvar_6.w; + light_2.xyz = (tmpvar_6.xyz + mix ((2.0 * texture2D (unity_LightmapInd, tmpvar_1.xy).xyz), (2.0 * texture2D (unity_Lightmap, tmpvar_1.xy).xyz), vec3(clamp (tmpvar_1.z, 0.0, 1.0)))); + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (tmpvar_6.w * tmpvar_3.w); + c_7.xyz = (((tmpvar_3.xyz * _Color.xyz) * light_2.xyz) + ((light_2.xyz * _SpecColor.xyz) * tmpvar_8)); + c_7.w = (tmpvar_4 + (tmpvar_8 * _SpecColor.w)); + gl_FragData[0] = c_7; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-ir.txt new file mode 100644 index 000000000..d3e5edcb0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-ir.txt @@ -0,0 +1,169 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * _Color); + c_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = c_3.xyz; + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = c_3.w; + o_2.Alpha = tmpvar_7; +} + +vec4 LightingLambert ( + in SurfaceOutput s_8, + in vec3 lightDir_9, + in float atten_10 +) +{ + vec4 c_11; + float diff_12; + float tmpvar_13; + tmpvar_13 = dot (s_8.Normal, lightDir_9); + float tmpvar_14; + tmpvar_14 = max (0.0, tmpvar_13); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + diff_12 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = ((s_8.Albedo * _LightColor0.xyz) * ((diff_12 * atten_10) * 2.0)); + c_11.xyz = tmpvar_16.xyz.xyz; + float tmpvar_17; + tmpvar_17 = s_8.Alpha; + c_11.w = vec4(tmpvar_17).w; + return c_11; +} + +vec4 frag_surf ( + in v2f_surf IN_18 +) +{ + vec4 c_19; + vec3 lightDir_20; + SurfaceOutput o_21; + Input surfIN_22; + vec2 tmpvar_23; + tmpvar_23 = IN_18.hip_pack0.xy; + surfIN_22.uv_MainTex = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = vec3(0.0, 0.0, 0.0); + o_21.Albedo = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = vec3(0.0, 0.0, 0.0); + o_21.Emission = tmpvar_25; + float tmpvar_26; + tmpvar_26 = 0.0; + o_21.Specular = tmpvar_26; + float tmpvar_27; + tmpvar_27 = 0.0; + o_21.Alpha = tmpvar_27; + float tmpvar_28; + tmpvar_28 = 0.0; + o_21.Gloss = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = IN_18.normal; + o_21.Normal = tmpvar_29; + surf (surfIN_22, o_21); + vec3 tmpvar_30; + tmpvar_30 = IN_18.lightDir; + lightDir_20 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = normalize (lightDir_20); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + lightDir_20 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = dot (IN_18._LightCoord, IN_18._LightCoord); + vec2 tmpvar_34; + tmpvar_34 = vec2(tmpvar_33); + vec2 tmpvar_35; + tmpvar_35 = tmpvar_34.xy; + vec4 tmpvar_36; + tmpvar_36 = texture2D (_LightTextureB0, tmpvar_35); + vec4 tmpvar_37; + tmpvar_37 = textureCube (_LightTexture0, IN_18._LightCoord); + vec4 tmpvar_38; + tmpvar_38 = LightingLambert (o_21, lightDir_20, (tmpvar_36.w * tmpvar_37.w)); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + c_19 = tmpvar_39; + float tmpvar_40; + tmpvar_40 = o_21.Alpha; + c_19.w = vec4(tmpvar_40).w; + return c_19; +} + +void main () +{ + v2f_surf xlt_IN_41; + vec4 xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_41.pos = tmpvar_43; + float tmpvar_44; + tmpvar_44 = xlv_FOG.x; + xlt_IN_41.fog = tmpvar_44; + vec2 tmpvar_45; + tmpvar_45 = gl_TexCoord[0].xy; + vec2 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_IN_41.hip_pack0 = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[1].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_IN_41.normal = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[2].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_IN_41.lightDir = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[3].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_IN_41._LightCoord = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = frag_surf (xlt_IN_41); + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_42 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_42.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_FragData[0] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-out.txt new file mode 100644 index 000000000..f3a72a94b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Diffuse-out.txt @@ -0,0 +1,22 @@ +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[3].xyz; + vec4 c_2; + vec4 tmpvar_3; + tmpvar_3 = (texture2D (_MainTex, gl_TexCoord[0].xy) * _Color); + float tmpvar_4; + tmpvar_4 = tmpvar_3.w; + vec4 c_5; + c_5.xyz = ((tmpvar_3.xyz * _LightColor0.xyz) * ((max (0.0, dot (gl_TexCoord[1].xyz, normalize(gl_TexCoord[2].xyz))) * (texture2D (_LightTextureB0, vec2(dot (tmpvar_1, tmpvar_1))).w * textureCube (_LightTexture0, tmpvar_1).w)) * 2.0)); + c_5.w = tmpvar_4; + c_2.xyz = c_5.xyz; + c_2.w = tmpvar_4; + gl_FragData[0] = c_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Transparent_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-ir.txt new file mode 100644 index 000000000..5561c16e7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-ir.txt @@ -0,0 +1,194 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void surf ( + in Input IN_1, + inout SurfaceOutput o_2 +) +{ + vec4 tex_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, IN_1.uv_MainTex); + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + tex_3 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = (tex_3.xyz * _Color.xyz); + o_2.Albedo = tmpvar_6; + float tmpvar_7; + tmpvar_7 = tex_3.w; + o_2.Gloss = tmpvar_7; + float tmpvar_8; + tmpvar_8 = (tex_3.w * _Color.w); + o_2.Alpha = tmpvar_8; + float tmpvar_9; + tmpvar_9 = _Shininess; + o_2.Specular = tmpvar_9; +} + +vec4 LightingBlinnPhong ( + in SurfaceOutput s_10, + in vec3 lightDir_11, + in vec3 viewDir_12, + in float atten_13 +) +{ + vec4 c_14; + float spec_15; + float nh_16; + float diff_17; + vec3 h_18; + vec3 tmpvar_19; + tmpvar_19 = normalize ((lightDir_11 + viewDir_12)); + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + h_18 = tmpvar_20; + float tmpvar_21; + tmpvar_21 = dot (s_10.Normal, lightDir_11); + float tmpvar_22; + tmpvar_22 = max (0.0, tmpvar_21); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + diff_17 = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (s_10.Normal, h_18); + float tmpvar_25; + tmpvar_25 = max (0.0, tmpvar_24); + float tmpvar_26; + tmpvar_26 = tmpvar_25; + nh_16 = tmpvar_26; + float tmpvar_27; + tmpvar_27 = pow (nh_16, (s_10.Specular * 128.0)); + float tmpvar_28; + tmpvar_28 = (tmpvar_27 * s_10.Gloss); + spec_15 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = ((((s_10.Albedo * _LightColor0.xyz) * diff_17) + ((_LightColor0.xyz * _SpecColor.xyz) * spec_15)) * (atten_13 * 2.0)); + c_14.xyz = tmpvar_29.xyz.xyz; + float tmpvar_30; + tmpvar_30 = (s_10.Alpha + (((_LightColor0.w * _SpecColor.w) * spec_15) * atten_13)); + c_14.w = vec4(tmpvar_30).w; + return c_14; +} + +vec4 frag_surf ( + in v2f_surf IN_31 +) +{ + vec4 c_32; + vec3 lightDir_33; + SurfaceOutput o_34; + Input surfIN_35; + vec2 tmpvar_36; + tmpvar_36 = IN_31.hip_pack0.xy; + surfIN_35.uv_MainTex = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = vec3(0.0, 0.0, 0.0); + o_34.Albedo = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = vec3(0.0, 0.0, 0.0); + o_34.Emission = tmpvar_38; + float tmpvar_39; + tmpvar_39 = 0.0; + o_34.Specular = tmpvar_39; + float tmpvar_40; + tmpvar_40 = 0.0; + o_34.Alpha = tmpvar_40; + float tmpvar_41; + tmpvar_41 = 0.0; + o_34.Gloss = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = IN_31.normal; + o_34.Normal = tmpvar_42; + surf (surfIN_35, o_34); + vec3 tmpvar_43; + tmpvar_43 = IN_31.lightDir; + lightDir_33 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = IN_31.viewDir.xyz; + vec3 tmpvar_45; + tmpvar_45 = normalize (tmpvar_44); + vec4 tmpvar_46; + tmpvar_46 = texture2D (_LightTexture0, IN_31._LightCoord); + vec4 tmpvar_47; + tmpvar_47 = LightingBlinnPhong (o_34, lightDir_33, tmpvar_45, (tmpvar_46.w * 1.0)); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + c_32 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = o_34.Alpha; + c_32.w = vec4(tmpvar_49).w; + return c_32; +} + +void main () +{ + v2f_surf xlt_IN_50; + vec4 xl_retval_51; + vec4 tmpvar_52; + tmpvar_52 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_50.pos = tmpvar_52; + float tmpvar_53; + tmpvar_53 = xlv_FOG.x; + xlt_IN_50.fog = tmpvar_53; + vec2 tmpvar_54; + tmpvar_54 = gl_TexCoord[0].xy; + vec2 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_IN_50.hip_pack0 = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = gl_TexCoord[1].xyz; + vec3 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_IN_50.normal = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = gl_TexCoord[2].xyz; + vec3 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_IN_50.lightDir = tmpvar_59; + vec3 tmpvar_60; + tmpvar_60 = gl_TexCoord[3].xyz; + vec3 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_IN_50.viewDir = tmpvar_61; + vec2 tmpvar_62; + tmpvar_62 = gl_TexCoord[4].xy; + vec2 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_IN_50._LightCoord = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = frag_surf (xlt_IN_50); + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + xl_retval_51 = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = xl_retval_51.xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + gl_FragData[0] = tmpvar_67; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-out.txt new file mode 100644 index 000000000..8fb1a10cb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Transparent_Specular-out.txt @@ -0,0 +1,29 @@ +uniform vec4 _SpecColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTexture0; +uniform vec4 _LightColor0; +uniform vec4 _Color; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = gl_TexCoord[1].xyz; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[2].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, gl_TexCoord[0].xy); + float tmpvar_5; + tmpvar_5 = (tmpvar_4.w * _Color.w); + float atten_6; + atten_6 = texture2D (_LightTexture0, gl_TexCoord[4].xy).w; + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (pow (max (0.0, dot (tmpvar_1, normalize((tmpvar_2 + normalize(gl_TexCoord[3].xyz))))), (_Shininess * 128.0)) * tmpvar_4.w); + c_7.xyz = (((((tmpvar_4.xyz * _Color.xyz) * _LightColor0.xyz) * max (0.0, dot (tmpvar_1, tmpvar_2))) + ((_LightColor0.xyz * _SpecColor.xyz) * tmpvar_8)) * (atten_6 * 2.0)); + c_7.w = (tmpvar_5 + (((_LightColor0.w * _SpecColor.w) * tmpvar_8) * atten_6)); + c_3.xyz = c_7.xyz; + c_3.w = tmpvar_5; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-TreeCreatorLeavesRT-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-ir.txt new file mode 100644 index 000000000..b97eb0dd6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-ir.txt @@ -0,0 +1,158 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec3 color; + vec3 backContrib; + vec3 nl; + vec3 nh; +}; +uniform sampler2D _TranslucencyMap; +uniform vec3 _TranslucencyColor; +uniform vec4 _TerrainTreeLightColors[4]; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform float _Cutoff; +uniform sampler2D _BumpSpecMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +vec4 frag ( + in v2f i_2 +) +{ + vec4 c_3; + float spec_4; + float nh_5; + float nl_6; + vec3 translucencyColor_7; + vec3 lightColor_8; + int j_9; + vec3 backContribs_10; + vec3 light_11; + float gloss_12; + vec4 trngls_13; + float specular_14; + vec3 albedo_15; + vec4 col_16; + int tmpvar_17; + tmpvar_17 = 0; + j_9 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_MainTex, i_2.uv); + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + col_16 = tmpvar_19; + xll_clip ((col_16.w - _Cutoff)); + vec3 tmpvar_20; + tmpvar_20 = (col_16.xyz * i_2.color); + albedo_15 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = texture2D (_BumpSpecMap, i_2.uv); + float tmpvar_22; + tmpvar_22 = (tmpvar_21.x * 128.0); + specular_14 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = texture2D (_TranslucencyMap, i_2.uv); + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + trngls_13 = tmpvar_24; + float tmpvar_25; + tmpvar_25 = trngls_13.w; + gloss_12 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = gl_LightModel.ambient.xyz; + vec3 tmpvar_27; + tmpvar_27 = (tmpvar_26 * albedo_15); + light_11 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = (i_2.backContrib * trngls_13.z); + backContribs_10 = tmpvar_28; + while (true) { + if (!((j_9 < 3))) { + break; + }; + vec3 tmpvar_29; + tmpvar_29 = _TerrainTreeLightColors[j_9].xyz; + lightColor_8 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = (backContribs_10[j_9] * _TranslucencyColor); + translucencyColor_7 = tmpvar_30; + float tmpvar_31; + tmpvar_31 = i_2.nl[j_9]; + nl_6 = tmpvar_31; + float tmpvar_32; + tmpvar_32 = i_2.nh[j_9]; + nh_5 = tmpvar_32; + float tmpvar_33; + tmpvar_33 = pow (nh_5, specular_14); + float tmpvar_34; + tmpvar_34 = (tmpvar_33 * gloss_12); + spec_4 = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = (light_11 + (((albedo_15 * (translucencyColor_7 + nl_6)) + (_SpecColor.xyz * spec_4)) * lightColor_8)); + light_11 = tmpvar_35; + int _post_incdec_tmp_36; + _post_incdec_tmp_36 = j_9; + int tmpvar_37; + tmpvar_37 = (j_9 + 1); + j_9 = tmpvar_37; + }; + vec3 tmpvar_38; + tmpvar_38 = (light_11 * 2.0); + c_3.xyz = tmpvar_38.xyz.xyz; + float tmpvar_39; + tmpvar_39 = 1.0; + c_3.w = vec4(tmpvar_39).w; + return c_3; +} + +void main () +{ + v2f xlt_i_40; + vec4 xl_retval_41; + vec4 tmpvar_42; + tmpvar_42 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_40.pos = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43 = gl_TexCoord[0].xy; + vec2 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_i_40.uv = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_TexCoord[1].xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_i_40.color = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_TexCoord[2].xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_i_40.backContrib = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = gl_TexCoord[3].xyz; + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_i_40.nl = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_TexCoord[4].xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_i_40.nh = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = frag (xlt_i_40); + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_41 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_41.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_FragData[0] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-out.txt new file mode 100644 index 000000000..62b1b1b20 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-TreeCreatorLeavesRT-out.txt @@ -0,0 +1,47 @@ +uniform sampler2D _TranslucencyMap; +uniform vec3 _TranslucencyColor; +uniform vec4 _TerrainTreeLightColors[4]; +uniform vec4 _SpecColor; +uniform sampler2D _MainTex; +uniform float _Cutoff; +uniform sampler2D _BumpSpecMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + vec3 tmpvar_3; + tmpvar_2 = gl_TexCoord[3].xyz; + tmpvar_3 = gl_TexCoord[4].xyz; + vec4 c_4; + vec3 backContribs_5; + vec3 light_6; + float specular_7; + vec4 tmpvar_8; + tmpvar_8 = texture2D (_MainTex, tmpvar_1); + float x_9; + x_9 = (tmpvar_8.w - _Cutoff); + if ((x_9 < 0.0)) { + discard; + }; + vec3 tmpvar_10; + tmpvar_10 = (tmpvar_8.xyz * gl_TexCoord[1].xyz); + specular_7 = (texture2D (_BumpSpecMap, tmpvar_1).x * 128.0); + vec4 tmpvar_11; + tmpvar_11 = texture2D (_TranslucencyMap, tmpvar_1); + light_6 = (gl_LightModel.ambient.xyz * tmpvar_10); + backContribs_5 = (gl_TexCoord[2].xyz * tmpvar_11.z); + float tmpvar_12; + tmpvar_12 = (pow (tmpvar_3.x, specular_7) * tmpvar_11.w); + light_6 = (light_6 + (((tmpvar_10 * ((backContribs_5.x * _TranslucencyColor) + tmpvar_2.x)) + (_SpecColor.xyz * tmpvar_12)) * _TerrainTreeLightColors[0].xyz)); + float tmpvar_13; + tmpvar_13 = (pow (tmpvar_3.y, specular_7) * tmpvar_11.w); + light_6 = (light_6 + (((tmpvar_10 * ((backContribs_5.y * _TranslucencyColor) + tmpvar_2.y)) + (_SpecColor.xyz * tmpvar_13)) * _TerrainTreeLightColors[1].xyz)); + float tmpvar_14; + tmpvar_14 = (pow (tmpvar_3.z, specular_7) * tmpvar_11.w); + light_6 = (light_6 + (((tmpvar_10 * ((backContribs_5.z * _TranslucencyColor) + tmpvar_2.z)) + (_SpecColor.xyz * tmpvar_14)) * _TerrainTreeLightColors[2].xyz)); + c_4.xyz = (light_6 * 2.0); + c_4.w = 1.0; + gl_FragData[0] = c_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-ir.txt new file mode 100644 index 000000000..d669987a3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-ir.txt @@ -0,0 +1,214 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; +}; +varying vec4 xlv_FOG; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform sampler2D _GlossMap; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + c_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (c_8.xyz * IN_6.color.xyz); + o_7.Albedo = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_GlossMap, IN_6.uv_MainTex); + float tmpvar_13; + tmpvar_13 = tmpvar_12.w; + o_7.Gloss = tmpvar_13; + float tmpvar_14; + tmpvar_14 = _Color.w; + o_7.Alpha = tmpvar_14; + float tmpvar_15; + tmpvar_15 = _Shininess; + o_7.Specular = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_6.uv_MainTex); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_7.Normal = tmpvar_19; +} + +vec4 LightingTreeBark ( + in SurfaceOutput s_20, + in vec3 lightDir_21, + in vec3 viewDir_22, + in float atten_23 +) +{ + vec4 c_24; + float spec_25; + float nh_26; + float diff_27; + vec3 h_28; + vec3 tmpvar_29; + tmpvar_29 = normalize ((lightDir_21 + viewDir_22)); + vec3 tmpvar_30; + tmpvar_30 = tmpvar_29; + h_28 = tmpvar_30; + float tmpvar_31; + tmpvar_31 = dot (s_20.Normal, lightDir_21); + float tmpvar_32; + tmpvar_32 = max (0.0, tmpvar_31); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + diff_27 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = dot (s_20.Normal, h_28); + float tmpvar_35; + tmpvar_35 = max (0.0, tmpvar_34); + float tmpvar_36; + tmpvar_36 = tmpvar_35; + nh_26 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = pow (nh_26, (s_20.Specular * 128.0)); + float tmpvar_38; + tmpvar_38 = (tmpvar_37 * s_20.Gloss); + spec_25 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = ((((s_20.Albedo * _LightColor0.xyz) * diff_27) + (_LightColor0.xyz * spec_25)) * (atten_23 * 2.0)); + c_24.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = (((_LightColor0.w * spec_25) * atten_23) * s_20.Alpha); + c_24.w = vec4(tmpvar_40).w; + return c_24; +} + +vec4 frag_surf ( + in v2f_surf IN_41 +) +{ + vec4 c_42; + vec3 lightDir_43; + SurfaceOutput o_44; + Input surfIN_45; + vec2 tmpvar_46; + tmpvar_46 = IN_41.hip_pack0.xy; + surfIN_45.uv_MainTex = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = IN_41.lop_color; + surfIN_45.color = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_44.Albedo = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = vec3(0.0, 0.0, 0.0); + o_44.Emission = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_44.Specular = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + o_44.Alpha = tmpvar_51; + float tmpvar_52; + tmpvar_52 = 0.0; + o_44.Gloss = tmpvar_52; + surf (surfIN_45, o_44); + vec3 tmpvar_53; + tmpvar_53 = IN_41.lightDir; + lightDir_43 = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = IN_41.viewDir.xyz; + vec3 tmpvar_55; + tmpvar_55 = normalize (tmpvar_54); + vec4 tmpvar_56; + tmpvar_56 = LightingTreeBark (o_44, lightDir_43, tmpvar_55, 1.0); + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + c_42 = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.0; + c_42.w = vec4(tmpvar_58).w; + return c_42; +} + +void main () +{ + v2f_surf xlt_IN_59; + vec4 xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_59.pos = tmpvar_61; + float tmpvar_62; + tmpvar_62 = xlv_FOG.x; + xlt_IN_59.fog = tmpvar_62; + vec2 tmpvar_63; + tmpvar_63 = gl_TexCoord[0].xy; + vec2 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_IN_59.hip_pack0 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = gl_Color.xyzw; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_IN_59.lop_color = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = gl_TexCoord[1].xyz; + vec3 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_IN_59.lightDir = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = gl_TexCoord[2].xyz; + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_IN_59.viewDir = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = frag_surf (xlt_IN_59); + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xl_retval_60 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = xl_retval_60.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + gl_FragData[0] = tmpvar_74; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-out.txt new file mode 100644 index 000000000..fd48910e9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader-out.txt @@ -0,0 +1,26 @@ +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform vec4 _LightColor0; +uniform sampler2D _GlossMap; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[1].xyz; + vec4 c_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_1).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec4 c_5; + float tmpvar_6; + tmpvar_6 = (pow (max (0.0, dot (normal_4.xyz, normalize((tmpvar_2 + normalize(gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * texture2D (_GlossMap, tmpvar_1).w); + c_5.xyz = (((((texture2D (_MainTex, tmpvar_1).xyz * gl_Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_4.xyz, tmpvar_2))) + (_LightColor0.xyz * tmpvar_6)) * 2.0); + c_5.w = ((_LightColor0.w * tmpvar_6) * _Color.w); + c_3.xyz = c_5.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Bark_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-ir.txt new file mode 100644 index 000000000..669848d55 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-ir.txt @@ -0,0 +1,237 @@ +struct SurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _GlossMap; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +vec4 UnpackNormal ( + in vec4 packednormal_1 +) +{ + vec4 normal_2; + vec2 tmpvar_3; + tmpvar_3 = ((packednormal_1.wy * 2.0) - 1.0); + normal_2.xy = tmpvar_3.xy.xy; + float tmpvar_4; + tmpvar_4 = sqrt (((1.0 - (normal_2.x * normal_2.x)) - (normal_2.y * normal_2.y))); + float tmpvar_5; + tmpvar_5 = tmpvar_4; + normal_2.z = vec3(tmpvar_5).z; + return normal_2; +} + +void surf ( + in Input IN_6, + inout SurfaceOutput o_7 +) +{ + vec4 c_8; + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, IN_6.uv_MainTex); + vec4 tmpvar_10; + tmpvar_10 = tmpvar_9; + c_8 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (c_8.xyz * IN_6.color.xyz); + o_7.Albedo = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = texture2D (_GlossMap, IN_6.uv_MainTex); + float tmpvar_13; + tmpvar_13 = tmpvar_12.w; + o_7.Gloss = tmpvar_13; + float tmpvar_14; + tmpvar_14 = _Color.w; + o_7.Alpha = tmpvar_14; + float tmpvar_15; + tmpvar_15 = _Shininess; + o_7.Specular = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = texture2D (_BumpMap, IN_6.uv_MainTex); + vec4 tmpvar_17; + tmpvar_17 = UnpackNormal (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + o_7.Normal = tmpvar_19; +} + +vec4 LightingTreeBark ( + in SurfaceOutput s_20, + in vec3 lightDir_21, + in vec3 viewDir_22, + in float atten_23 +) +{ + vec4 c_24; + float spec_25; + float nh_26; + float diff_27; + vec3 h_28; + vec3 tmpvar_29; + tmpvar_29 = normalize ((lightDir_21 + viewDir_22)); + vec3 tmpvar_30; + tmpvar_30 = tmpvar_29; + h_28 = tmpvar_30; + float tmpvar_31; + tmpvar_31 = dot (s_20.Normal, lightDir_21); + float tmpvar_32; + tmpvar_32 = max (0.0, tmpvar_31); + float tmpvar_33; + tmpvar_33 = tmpvar_32; + diff_27 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = dot (s_20.Normal, h_28); + float tmpvar_35; + tmpvar_35 = max (0.0, tmpvar_34); + float tmpvar_36; + tmpvar_36 = tmpvar_35; + nh_26 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = pow (nh_26, (s_20.Specular * 128.0)); + float tmpvar_38; + tmpvar_38 = (tmpvar_37 * s_20.Gloss); + spec_25 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = ((((s_20.Albedo * _LightColor0.xyz) * diff_27) + (_LightColor0.xyz * spec_25)) * (atten_23 * 2.0)); + c_24.xyz = tmpvar_39.xyz.xyz; + float tmpvar_40; + tmpvar_40 = (((_LightColor0.w * spec_25) * atten_23) * s_20.Alpha); + c_24.w = vec4(tmpvar_40).w; + return c_24; +} + +vec4 frag_surf ( + in v2f_surf IN_41 +) +{ + vec4 c_42; + vec3 lightDir_43; + SurfaceOutput o_44; + Input surfIN_45; + vec2 tmpvar_46; + tmpvar_46 = IN_41.hip_pack0.xy; + surfIN_45.uv_MainTex = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = IN_41.lop_color; + surfIN_45.color = tmpvar_47; + vec3 tmpvar_48; + tmpvar_48 = vec3(0.0, 0.0, 0.0); + o_44.Albedo = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = vec3(0.0, 0.0, 0.0); + o_44.Emission = tmpvar_49; + float tmpvar_50; + tmpvar_50 = 0.0; + o_44.Specular = tmpvar_50; + float tmpvar_51; + tmpvar_51 = 0.0; + o_44.Alpha = tmpvar_51; + float tmpvar_52; + tmpvar_52 = 0.0; + o_44.Gloss = tmpvar_52; + surf (surfIN_45, o_44); + vec3 tmpvar_53; + tmpvar_53 = IN_41.lightDir; + lightDir_43 = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = normalize (lightDir_43); + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + lightDir_43 = tmpvar_55; + vec3 tmpvar_56; + tmpvar_56 = IN_41.viewDir.xyz; + vec3 tmpvar_57; + tmpvar_57 = normalize (tmpvar_56); + float tmpvar_58; + tmpvar_58 = dot (IN_41._LightCoord, IN_41._LightCoord); + vec2 tmpvar_59; + tmpvar_59 = vec2(tmpvar_58); + vec2 tmpvar_60; + tmpvar_60 = tmpvar_59.xy; + vec4 tmpvar_61; + tmpvar_61 = texture2D (_LightTextureB0, tmpvar_60); + vec4 tmpvar_62; + tmpvar_62 = textureCube (_LightTexture0, IN_41._LightCoord); + vec4 tmpvar_63; + tmpvar_63 = LightingTreeBark (o_44, lightDir_43, tmpvar_57, (tmpvar_61.w * tmpvar_62.w)); + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + c_42 = tmpvar_64; + float tmpvar_65; + tmpvar_65 = 0.0; + c_42.w = vec4(tmpvar_65).w; + return c_42; +} + +void main () +{ + v2f_surf xlt_IN_66; + vec4 xl_retval_67; + vec4 tmpvar_68; + tmpvar_68 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_66.pos = tmpvar_68; + float tmpvar_69; + tmpvar_69 = xlv_FOG.x; + xlt_IN_66.fog = tmpvar_69; + vec2 tmpvar_70; + tmpvar_70 = gl_TexCoord[0].xy; + vec2 tmpvar_71; + tmpvar_71 = tmpvar_70; + xlt_IN_66.hip_pack0 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = gl_Color.xyzw; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlt_IN_66.lop_color = tmpvar_73; + vec3 tmpvar_74; + tmpvar_74 = gl_TexCoord[1].xyz; + vec3 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_IN_66.lightDir = tmpvar_75; + vec3 tmpvar_76; + tmpvar_76 = gl_TexCoord[2].xyz; + vec3 tmpvar_77; + tmpvar_77 = tmpvar_76; + xlt_IN_66.viewDir = tmpvar_77; + vec3 tmpvar_78; + tmpvar_78 = gl_TexCoord[3].xyz; + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + xlt_IN_66._LightCoord = tmpvar_79; + vec4 tmpvar_80; + tmpvar_80 = frag_surf (xlt_IN_66); + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + xl_retval_67 = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = xl_retval_67.xyzw; + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + gl_FragData[0] = tmpvar_83; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-out.txt new file mode 100644 index 000000000..b1849829b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Bark_Shader1-out.txt @@ -0,0 +1,32 @@ +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _GlossMap; +uniform vec4 _Color; +uniform sampler2D _BumpMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 c_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_1).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + vec3 tmpvar_5; + tmpvar_5 = normalize(gl_TexCoord[1].xyz); + float atten_6; + atten_6 = (texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w); + vec4 c_7; + float tmpvar_8; + tmpvar_8 = (pow (max (0.0, dot (normal_4.xyz, normalize((tmpvar_5 + normalize(gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * texture2D (_GlossMap, tmpvar_1).w); + c_7.xyz = (((((texture2D (_MainTex, tmpvar_1).xyz * gl_Color.xyz) * _LightColor0.xyz) * max (0.0, dot (normal_4.xyz, tmpvar_5))) + (_LightColor0.xyz * tmpvar_8)) * (atten_6 * 2.0)); + c_7.w = (((_LightColor0.w * tmpvar_8) * atten_6) * _Color.w); + c_3.xyz = c_7.xyz; + c_3.w = 0.0; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-ir.txt new file mode 100644 index 000000000..959454b60 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-ir.txt @@ -0,0 +1,383 @@ +struct LeafSurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + vec3 Translucency; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +uniform sampler2D _TranslucencyMap; +uniform vec4 _TranslucencyColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _GlossMap; +uniform float _Cutoff; +uniform sampler2D _BumpMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +vec4 UnpackNormal ( + in vec4 packednormal_34 +) +{ + vec4 normal_35; + vec2 tmpvar_36; + tmpvar_36 = ((packednormal_34.wy * 2.0) - 1.0); + normal_35.xy = tmpvar_36.xy.xy; + float tmpvar_37; + tmpvar_37 = sqrt (((1.0 - (normal_35.x * normal_35.x)) - (normal_35.y * normal_35.y))); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + normal_35.z = vec3(tmpvar_38).z; + return normal_35; +} + +void surf ( + in Input IN_39, + inout LeafSurfaceOutput o_40 +) +{ + vec4 c_41; + vec4 tmpvar_42; + tmpvar_42 = texture2D (_MainTex, IN_39.uv_MainTex); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + c_41 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = (c_41.xyz * IN_39.color.xyz); + o_40.Albedo = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = texture2D (_TranslucencyMap, IN_39.uv_MainTex); + vec3 tmpvar_46; + tmpvar_46 = _TranslucencyColor.xyz; + vec3 tmpvar_47; + tmpvar_47 = (tmpvar_45.xyz * tmpvar_46); + o_40.Translucency = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = texture2D (_GlossMap, IN_39.uv_MainTex); + float tmpvar_49; + tmpvar_49 = tmpvar_48.w; + o_40.Gloss = tmpvar_49; + float tmpvar_50; + tmpvar_50 = (c_41.w * IN_39.color.w); + o_40.Alpha = tmpvar_50; + float tmpvar_51; + tmpvar_51 = _Shininess; + o_40.Specular = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = texture2D (_BumpMap, IN_39.uv_MainTex); + vec4 tmpvar_53; + tmpvar_53 = UnpackNormal (tmpvar_52); + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53.xyz; + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + o_40.Normal = tmpvar_55; +} + +vec4 LightingTreeLeaf ( + in LeafSurfaceOutput s_56, + in vec3 lightDir_57, + in vec3 viewDir_58, + in float atten_59 +) +{ + vec4 c_60; + vec3 col_61; + vec3 translucencyColor_62; + float trans_63; + float spec_64; + float nh_65; + float diff_66; + vec3 h_67; + vec3 tmpvar_68; + tmpvar_68 = normalize ((lightDir_57 + viewDir_58)); + vec3 tmpvar_69; + tmpvar_69 = tmpvar_68; + h_67 = tmpvar_69; + float tmpvar_70; + tmpvar_70 = dot (s_56.Normal, lightDir_57); + float tmpvar_71; + tmpvar_71 = tmpvar_70; + diff_66 = tmpvar_71; + float tmpvar_72; + tmpvar_72 = dot (s_56.Normal, h_67); + float tmpvar_73; + tmpvar_73 = max (0.0, tmpvar_72); + float tmpvar_74; + tmpvar_74 = tmpvar_73; + nh_65 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = pow (nh_65, (s_56.Specular * 128.0)); + float tmpvar_76; + tmpvar_76 = (tmpvar_75 * s_56.Gloss); + spec_64 = tmpvar_76; + float tmpvar_77; + tmpvar_77 = max (0.0, -(diff_66)); + float tmpvar_78; + tmpvar_78 = tmpvar_77; + trans_63 = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = ((s_56.Translucency * trans_63) * 2.0); + translucencyColor_62 = tmpvar_79; + float tmpvar_80; + tmpvar_80 = max (0.0, ((diff_66 * 0.5) + 0.5)); + float tmpvar_81; + tmpvar_81 = tmpvar_80; + diff_66 = tmpvar_81; + vec3 tmpvar_82; + tmpvar_82 = (s_56.Albedo * (diff_66 + translucencyColor_62)); + col_61 = tmpvar_82; + float tmpvar_83; + tmpvar_83 = ceil (trans_63); + float tmpvar_84; + tmpvar_84 = xll_saturate (tmpvar_83); + vec3 tmpvar_85; + tmpvar_85 = (col_61 + (spec_64 * (1.0 - tmpvar_84))); + col_61 = tmpvar_85; + vec3 tmpvar_86; + tmpvar_86 = (col_61 * _LightColor0.xyz); + col_61 = tmpvar_86; + vec3 tmpvar_87; + tmpvar_87 = (col_61 * (atten_59 * 2.0)); + c_60.xyz = tmpvar_87.xyz.xyz; + return c_60; +} + +vec4 frag_surf ( + in v2f_surf IN_88 +) +{ + vec4 c_89; + vec3 lightDir_90; + LeafSurfaceOutput o_91; + Input surfIN_92; + vec2 tmpvar_93; + tmpvar_93 = IN_88.hip_pack0.xy; + surfIN_92.uv_MainTex = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = IN_88.lop_color; + surfIN_92.color = tmpvar_94; + vec3 tmpvar_95; + tmpvar_95 = vec3(0.0, 0.0, 0.0); + o_91.Albedo = tmpvar_95; + vec3 tmpvar_96; + tmpvar_96 = vec3(0.0, 0.0, 0.0); + o_91.Emission = tmpvar_96; + float tmpvar_97; + tmpvar_97 = 0.0; + o_91.Specular = tmpvar_97; + float tmpvar_98; + tmpvar_98 = 0.0; + o_91.Alpha = tmpvar_98; + surf (surfIN_92, o_91); + xll_clip ((o_91.Alpha - _Cutoff)); + vec3 tmpvar_99; + tmpvar_99 = IN_88.lightDir; + lightDir_90 = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = normalize (lightDir_90); + vec3 tmpvar_101; + tmpvar_101 = tmpvar_100; + lightDir_90 = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = IN_88.viewDir.xyz; + vec3 tmpvar_103; + tmpvar_103 = normalize (tmpvar_102); + float tmpvar_104; + tmpvar_104 = dot (IN_88._LightCoord, IN_88._LightCoord); + vec2 tmpvar_105; + tmpvar_105 = vec2(tmpvar_104); + vec2 tmpvar_106; + tmpvar_106 = tmpvar_105.xy; + vec4 tmpvar_107; + tmpvar_107 = texture2D (_LightTextureB0, tmpvar_106); + vec4 tmpvar_108; + tmpvar_108 = textureCube (_LightTexture0, IN_88._LightCoord); + vec4 tmpvar_109; + tmpvar_109 = LightingTreeLeaf (o_91, lightDir_90, tmpvar_103, (tmpvar_107.w * tmpvar_108.w)); + vec4 tmpvar_110; + tmpvar_110 = tmpvar_109; + c_89 = tmpvar_110; + float tmpvar_111; + tmpvar_111 = o_91.Alpha; + c_89.w = vec4(tmpvar_111).w; + return c_89; +} + +void main () +{ + v2f_surf xlt_IN_112; + vec4 xl_retval_113; + vec4 tmpvar_114; + tmpvar_114 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_112.pos = tmpvar_114; + float tmpvar_115; + tmpvar_115 = xlv_FOG.x; + xlt_IN_112.fog = tmpvar_115; + vec2 tmpvar_116; + tmpvar_116 = gl_TexCoord[0].xy; + vec2 tmpvar_117; + tmpvar_117 = tmpvar_116; + xlt_IN_112.hip_pack0 = tmpvar_117; + vec4 tmpvar_118; + tmpvar_118 = gl_Color.xyzw; + vec4 tmpvar_119; + tmpvar_119 = tmpvar_118; + xlt_IN_112.lop_color = tmpvar_119; + vec3 tmpvar_120; + tmpvar_120 = gl_TexCoord[1].xyz; + vec3 tmpvar_121; + tmpvar_121 = tmpvar_120; + xlt_IN_112.lightDir = tmpvar_121; + vec3 tmpvar_122; + tmpvar_122 = gl_TexCoord[2].xyz; + vec3 tmpvar_123; + tmpvar_123 = tmpvar_122; + xlt_IN_112.viewDir = tmpvar_123; + vec3 tmpvar_124; + tmpvar_124 = gl_TexCoord[3].xyz; + vec3 tmpvar_125; + tmpvar_125 = tmpvar_124; + xlt_IN_112._LightCoord = tmpvar_125; + vec4 tmpvar_126; + tmpvar_126 = frag_surf (xlt_IN_112); + vec4 tmpvar_127; + tmpvar_127 = tmpvar_126; + xl_retval_113 = tmpvar_127; + vec4 tmpvar_128; + tmpvar_128 = xl_retval_113.xyzw; + vec4 tmpvar_129; + tmpvar_129 = tmpvar_128; + gl_FragData[0] = tmpvar_129; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-out.txt new file mode 100644 index 000000000..2824ede77 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader-out.txt @@ -0,0 +1,42 @@ +uniform sampler2D _TranslucencyMap; +uniform vec4 _TranslucencyColor; +uniform float _Shininess; +uniform sampler2D _MainTex; +uniform sampler2D _LightTextureB0; +uniform samplerCube _LightTexture0; +uniform vec4 _LightColor0; +uniform sampler2D _GlossMap; +uniform float _Cutoff; +uniform sampler2D _BumpMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec3 tmpvar_2; + tmpvar_2 = gl_TexCoord[3].xyz; + vec4 c_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1); + float tmpvar_5; + tmpvar_5 = (tmpvar_4.w * gl_Color.w); + vec4 normal_6; + normal_6.xy = ((texture2D (_BumpMap, tmpvar_1).wy * 2.0) - 1.0); + normal_6.z = sqrt(((1.0 - (normal_6.x * normal_6.x)) - (normal_6.y * normal_6.y))); + float x_7; + x_7 = (tmpvar_5 - _Cutoff); + if ((x_7 < 0.0)) { + discard; + }; + vec3 tmpvar_8; + tmpvar_8 = normalize(gl_TexCoord[1].xyz); + vec4 c_9; + float tmpvar_10; + tmpvar_10 = dot (normal_6.xyz, tmpvar_8); + float tmpvar_11; + tmpvar_11 = max (0.0, -(tmpvar_10)); + c_9.xyz = (((((tmpvar_4.xyz * gl_Color.xyz) * (max (0.0, ((tmpvar_10 * 0.5) + 0.5)) + (((texture2D (_TranslucencyMap, tmpvar_1).xyz * _TranslucencyColor.xyz) * tmpvar_11) * 2.0))) + ((pow (max (0.0, dot (normal_6.xyz, normalize((tmpvar_8 + normalize(gl_TexCoord[2].xyz))))), (_Shininess * 128.0)) * texture2D (_GlossMap, tmpvar_1).w) * (1.0 - clamp (ceil(tmpvar_11), 0.0, 1.0)))) * _LightColor0.xyz) * ((texture2D (_LightTextureB0, vec2(dot (tmpvar_2, tmpvar_2))).w * textureCube (_LightTexture0, tmpvar_2).w) * 2.0)); + c_3.xyz = c_9.xyz; + c_3.w = tmpvar_5; + gl_FragData[0] = c_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Tree_Editor_Leaf_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-ir.txt new file mode 100644 index 000000000..0dcf80da8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-ir.txt @@ -0,0 +1,383 @@ +struct LeafSurfaceOutput { + vec3 Albedo; + vec3 Normal; + vec3 Emission; + vec3 Translucency; + float Specular; + float Gloss; + float Alpha; +}; +struct Input { + vec2 uv_MainTex; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec3 _ShadowCoord0; + vec3 _ShadowCoord1; + vec3 _ShadowCoord2; + vec3 _ShadowCoord3; + vec2 _ShadowZFade; + vec2 hip_pack0; + vec4 lop_color; +}; +uniform sampler2D _TranslucencyMap; +uniform vec4 _TranslucencyColor; +uniform float _Shininess; +uniform sampler2D _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _MainTex; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform sampler2D _GlossMap; +uniform float _Cutoff; +uniform sampler2D _BumpMap; +void xll_clip ( + in float x_1 +) +{ + if ((x_1 < 0.0)) { + discard; + }; +} + +float xll_saturate ( + in float x_2 +) +{ + float tmpvar_3; + tmpvar_3 = clamp (x_2, 0.0, 1.0); + return tmpvar_3; +} + +vec2 xll_saturate ( + in vec2 x_4 +) +{ + vec2 tmpvar_5; + tmpvar_5 = clamp (x_4, 0.0, 1.0); + return tmpvar_5; +} + +vec3 xll_saturate ( + in vec3 x_6 +) +{ + vec3 tmpvar_7; + tmpvar_7 = clamp (x_6, 0.0, 1.0); + return tmpvar_7; +} + +vec4 xll_saturate ( + in vec4 x_8 +) +{ + vec4 tmpvar_9; + tmpvar_9 = clamp (x_8, 0.0, 1.0); + return tmpvar_9; +} + +mat2 xll_saturate ( + in mat2 m_10 +) +{ + vec2 tmpvar_11; + tmpvar_11 = clamp (m_10[0], 0.0, 1.0); + vec2 tmpvar_12; + tmpvar_12 = clamp (m_10[1], 0.0, 1.0); + mat2 tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = tmpvar_11; + tmpvar_13[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = tmpvar_12; + tmpvar_13[1] = tmpvar_15; + return tmpvar_13; +} + +mat3 xll_saturate ( + in mat3 m_16 +) +{ + vec3 tmpvar_17; + tmpvar_17 = clamp (m_16[0], 0.0, 1.0); + vec3 tmpvar_18; + tmpvar_18 = clamp (m_16[1], 0.0, 1.0); + vec3 tmpvar_19; + tmpvar_19 = clamp (m_16[2], 0.0, 1.0); + mat3 tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_17; + tmpvar_20[0] = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_18; + tmpvar_20[1] = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_19; + tmpvar_20[2] = tmpvar_23; + return tmpvar_20; +} + +mat4 xll_saturate ( + in mat4 m_24 +) +{ + vec4 tmpvar_25; + tmpvar_25 = clamp (m_24[0], 0.0, 1.0); + vec4 tmpvar_26; + tmpvar_26 = clamp (m_24[1], 0.0, 1.0); + vec4 tmpvar_27; + tmpvar_27 = clamp (m_24[2], 0.0, 1.0); + vec4 tmpvar_28; + tmpvar_28 = clamp (m_24[3], 0.0, 1.0); + mat4 tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_25; + tmpvar_29[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_26; + tmpvar_29[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_27; + tmpvar_29[2] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_28; + tmpvar_29[3] = tmpvar_33; + return tmpvar_29; +} + +vec4 UnpackNormal ( + in vec4 packednormal_34 +) +{ + vec4 normal_35; + vec2 tmpvar_36; + tmpvar_36 = ((packednormal_34.wy * 2.0) - 1.0); + normal_35.xy = tmpvar_36.xy.xy; + float tmpvar_37; + tmpvar_37 = sqrt (((1.0 - (normal_35.x * normal_35.x)) - (normal_35.y * normal_35.y))); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + normal_35.z = vec3(tmpvar_38).z; + return normal_35; +} + +void surf ( + in Input IN_39, + inout LeafSurfaceOutput o_40 +) +{ + vec4 c_41; + vec4 tmpvar_42; + tmpvar_42 = texture2D (_MainTex, IN_39.uv_MainTex); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + c_41 = tmpvar_43; + vec3 tmpvar_44; + tmpvar_44 = (c_41.xyz * IN_39.color.xyz); + o_40.Albedo = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = texture2D (_TranslucencyMap, IN_39.uv_MainTex); + vec3 tmpvar_46; + tmpvar_46 = _TranslucencyColor.xyz; + vec3 tmpvar_47; + tmpvar_47 = (tmpvar_45.xyz * tmpvar_46); + o_40.Translucency = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = texture2D (_GlossMap, IN_39.uv_MainTex); + float tmpvar_49; + tmpvar_49 = tmpvar_48.w; + o_40.Gloss = tmpvar_49; + float tmpvar_50; + tmpvar_50 = (c_41.w * IN_39.color.w); + o_40.Alpha = tmpvar_50; + float tmpvar_51; + tmpvar_51 = _Shininess; + o_40.Specular = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = texture2D (_BumpMap, IN_39.uv_MainTex); + vec4 tmpvar_53; + tmpvar_53 = UnpackNormal (tmpvar_52); + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53.xyz; + vec3 tmpvar_55; + tmpvar_55 = tmpvar_54; + o_40.Normal = tmpvar_55; +} + +vec2 EncodeFloatRG ( + in float v_56 +) +{ + vec2 enc_57; + float kEncodeBit_58; + vec2 kEncodeMul_59; + vec2 tmpvar_60; + tmpvar_60 = vec2(1.0, 255.0); + kEncodeMul_59 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.00392157; + kEncodeBit_58 = tmpvar_61; + vec2 tmpvar_62; + tmpvar_62 = (kEncodeMul_59 * v_56); + enc_57 = tmpvar_62; + vec2 tmpvar_63; + tmpvar_63 = fract (enc_57); + vec2 tmpvar_64; + tmpvar_64 = tmpvar_63; + enc_57 = tmpvar_64; + float tmpvar_65; + tmpvar_65 = (enc_57.x - (enc_57.y * kEncodeBit_58)); + enc_57.x = tmpvar_65; + return enc_57; +} + +vec4 frag_surf ( + in v2f_surf IN_66 +) +{ + vec4 res_67; + float faded_68; + float shadow_69; + vec4 coord_70; + vec4 weights_71; + vec4 far_72; + vec4 near_73; + vec4 z_74; + LeafSurfaceOutput o_75; + Input surfIN_76; + vec2 tmpvar_77; + tmpvar_77 = IN_66.hip_pack0.xy; + surfIN_76.uv_MainTex = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = IN_66.lop_color; + surfIN_76.color = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = vec3(0.0, 0.0, 0.0); + o_75.Albedo = tmpvar_79; + vec3 tmpvar_80; + tmpvar_80 = vec3(0.0, 0.0, 0.0); + o_75.Emission = tmpvar_80; + float tmpvar_81; + tmpvar_81 = 0.0; + o_75.Specular = tmpvar_81; + float tmpvar_82; + tmpvar_82 = 0.0; + o_75.Alpha = tmpvar_82; + surf (surfIN_76, o_75); + xll_clip ((o_75.Alpha - _Cutoff)); + vec4 tmpvar_83; + tmpvar_83 = vec4(IN_66._ShadowZFade.x); + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + z_74 = tmpvar_84; + bvec4 tmpvar_85; + tmpvar_85 = greaterThanEqual (z_74, _LightSplitsNear); + vec4 tmpvar_86; + tmpvar_86 = vec4(tmpvar_85).xyzw; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + near_73 = tmpvar_87; + bvec4 tmpvar_88; + tmpvar_88 = lessThan (z_74, _LightSplitsFar); + vec4 tmpvar_89; + tmpvar_89 = vec4(tmpvar_88).xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + far_72 = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = (near_73 * far_72); + weights_71 = tmpvar_91; + vec4 tmpvar_92; + tmpvar_92.w = 1.0; + tmpvar_92.xyz = ((((IN_66._ShadowCoord0 * weights_71.x) + (IN_66._ShadowCoord1 * weights_71.y)) + (IN_66._ShadowCoord2 * weights_71.z)) + (IN_66._ShadowCoord3 * weights_71.w)).xyz; + vec4 tmpvar_93; + tmpvar_93 = tmpvar_92; + coord_70 = tmpvar_93; + vec4 tmpvar_94; + tmpvar_94 = texture2D (_ShadowMapTexture, coord_70.xy); + float tmpvar_95; + if ((tmpvar_94.x < coord_70.z)) { + tmpvar_95 = _LightShadowData.x; + } else { + tmpvar_95 = 1.0; + }; + float tmpvar_96; + tmpvar_96 = tmpvar_95; + shadow_69 = tmpvar_96; + float tmpvar_97; + tmpvar_97 = xll_saturate (IN_66._ShadowZFade.y); + float tmpvar_98; + tmpvar_98 = xll_saturate ((shadow_69 + tmpvar_97)); + float tmpvar_99; + tmpvar_99 = tmpvar_98; + faded_68 = tmpvar_99; + float tmpvar_100; + tmpvar_100 = faded_68; + res_67.x = tmpvar_100; + float tmpvar_101; + tmpvar_101 = 1.0; + res_67.y = vec2(tmpvar_101).y; + vec2 tmpvar_102; + tmpvar_102 = EncodeFloatRG ((1.0 - (z_74 * _ProjectionParams.w)).x); + vec2 tmpvar_103; + tmpvar_103 = tmpvar_102; + res_67.zw = tmpvar_103.xxxy.zw; + return res_67; +} + +void main () +{ + v2f_surf xlt_IN_104; + vec4 xl_retval_105; + vec4 tmpvar_106; + tmpvar_106 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_IN_104.pos = tmpvar_106; + vec3 tmpvar_107; + tmpvar_107 = gl_TexCoord[0].xyz; + vec3 tmpvar_108; + tmpvar_108 = tmpvar_107; + xlt_IN_104._ShadowCoord0 = tmpvar_108; + vec3 tmpvar_109; + tmpvar_109 = gl_TexCoord[1].xyz; + vec3 tmpvar_110; + tmpvar_110 = tmpvar_109; + xlt_IN_104._ShadowCoord1 = tmpvar_110; + vec3 tmpvar_111; + tmpvar_111 = gl_TexCoord[2].xyz; + vec3 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_IN_104._ShadowCoord2 = tmpvar_112; + vec3 tmpvar_113; + tmpvar_113 = gl_TexCoord[3].xyz; + vec3 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_IN_104._ShadowCoord3 = tmpvar_114; + vec2 tmpvar_115; + tmpvar_115 = gl_TexCoord[4].xy; + vec2 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_IN_104._ShadowZFade = tmpvar_116; + vec2 tmpvar_117; + tmpvar_117 = gl_TexCoord[5].xy; + vec2 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_IN_104.hip_pack0 = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = gl_Color.xyzw; + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + xlt_IN_104.lop_color = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121 = frag_surf (xlt_IN_104); + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + xl_retval_105 = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123 = xl_retval_105.xyzw; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + gl_FragData[0] = tmpvar_124; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-out.txt new file mode 100644 index 000000000..be9cfe8fc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Tree_Editor_Leaf_Shader1-out.txt @@ -0,0 +1,47 @@ +uniform sampler2D _ShadowMapTexture; +uniform vec4 _ProjectionParams; +uniform sampler2D _MainTex; +uniform vec4 _LightSplitsNear; +uniform vec4 _LightSplitsFar; +uniform vec4 _LightShadowData; +uniform float _Cutoff; +uniform sampler2D _BumpMap; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[4].xy; + vec2 tmpvar_2; + tmpvar_2 = gl_TexCoord[5].xy; + vec4 res_3; + vec4 normal_4; + normal_4.xy = ((texture2D (_BumpMap, tmpvar_2).wy * 2.0) - 1.0); + normal_4.z = sqrt(((1.0 - (normal_4.x * normal_4.x)) - (normal_4.y * normal_4.y))); + float x_5; + x_5 = ((texture2D (_MainTex, tmpvar_2).w * gl_Color.w) - _Cutoff); + if ((x_5 < 0.0)) { + discard; + }; + vec4 tmpvar_6; + tmpvar_6 = (vec4(greaterThanEqual (tmpvar_1.xxxx, _LightSplitsNear)) * vec4(lessThan (tmpvar_1.xxxx, _LightSplitsFar))); + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = ((((gl_TexCoord[0].xyz * tmpvar_6.x) + (gl_TexCoord[1].xyz * tmpvar_6.y)) + (gl_TexCoord[2].xyz * tmpvar_6.z)) + (gl_TexCoord[3].xyz * tmpvar_6.w)); + vec4 tmpvar_8; + tmpvar_8 = texture2D (_ShadowMapTexture, tmpvar_7.xy); + float tmpvar_9; + if ((tmpvar_8.x < tmpvar_7.z)) { + tmpvar_9 = _LightShadowData.x; + } else { + tmpvar_9 = 1.0; + }; + res_3.x = clamp ((tmpvar_9 + clamp (tmpvar_1.y, 0.0, 1.0)), 0.0, 1.0); + res_3.y = 1.0; + vec2 enc_10; + vec2 tmpvar_11; + tmpvar_11 = fract((vec2(1.0, 255.0) * (1.0 - (tmpvar_1.xxxx * _ProjectionParams.w)).x)); + enc_10.y = tmpvar_11.y; + enc_10.x = (tmpvar_11.x - (tmpvar_11.y * 0.00392157)); + res_3.zw = enc_10; + gl_FragData[0] = res_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-ir.txt new file mode 100644 index 000000000..90ce2d961 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-ir.txt @@ -0,0 +1,55 @@ +struct v2f { + vec4 pos; + float fog; + vec4 color; + vec2 texcoord; + vec3 normal; +}; +varying vec4 xlv_FOG; +uniform sampler2D _MainTex; +vec4 frag ( + in v2f i_1 +) +{ + vec4 tmpvar_2; + tmpvar_2 = texture2D (_MainTex, i_1.texcoord); + return (i_1.color * tmpvar_2); +} + +void main () +{ + v2f xlt_i_3; + vec4 xl_retval_4; + vec4 tmpvar_5; + tmpvar_5 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_3.pos = tmpvar_5; + float tmpvar_6; + tmpvar_6 = xlv_FOG.x; + xlt_i_3.fog = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = gl_Color.xyzw; + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + xlt_i_3.color = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = gl_TexCoord[0].xy; + vec2 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_i_3.texcoord = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = gl_TexCoord[1].xyz; + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11; + xlt_i_3.normal = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = frag (xlt_i_3); + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_4 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_4.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_FragData[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-Vertex_Colored-out.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-Vertex_Colored-out.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/fragment/unity-currently_adapted-in.txt rename to 3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-in.txt diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-ir.txt new file mode 100644 index 000000000..5302a61a1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-ir.txt @@ -0,0 +1,92 @@ +struct v2f_img { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex; +uniform sampler2D _CurTex; +uniform vec4 _AdaptParams; +vec4 frag ( + in v2f_img i_1 +) +{ + vec4 valNew_2; + vec2 delta_3; + vec2 valCur_4; + vec2 valAdapted_5; + vec4 tmpvar_6; + tmpvar_6 = texture2D (_MainTex, i_1.uv); + vec2 tmpvar_7; + tmpvar_7 = tmpvar_6.xy; + valAdapted_5 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = texture2D (_CurTex, i_1.uv); + vec2 tmpvar_9; + tmpvar_9 = tmpvar_8.xy; + valCur_4 = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = ((valCur_4 - valAdapted_5) * _AdaptParams.x); + delta_3 = tmpvar_10; + float tmpvar_11; + tmpvar_11 = sign (delta_3.x); + float tmpvar_12; + tmpvar_12 = abs (delta_3.x); + float tmpvar_13; + tmpvar_13 = max (0.00392157, tmpvar_12); + float tmpvar_14; + tmpvar_14 = (tmpvar_11 * tmpvar_13); + delta_3.x = tmpvar_14; + float tmpvar_15; + tmpvar_15 = sign (delta_3.y); + float tmpvar_16; + tmpvar_16 = abs (delta_3.y); + float tmpvar_17; + tmpvar_17 = max (0.00392157, tmpvar_16); + float tmpvar_18; + tmpvar_18 = (tmpvar_15 * tmpvar_17); + delta_3.y = vec2(tmpvar_18).y; + vec2 tmpvar_19; + tmpvar_19 = (valAdapted_5 + delta_3); + valNew_2.xy = tmpvar_19.xy.xy; + float tmpvar_20; + tmpvar_20 = max (valNew_2.x, _AdaptParams.z); + float tmpvar_21; + tmpvar_21 = tmpvar_20; + valNew_2.x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = min (valNew_2.y, _AdaptParams.y); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + valNew_2.y = vec2(tmpvar_23).y; + float tmpvar_24; + tmpvar_24 = ((valNew_2.x - valNew_2.y) + 0.01); + valNew_2.z = vec3(tmpvar_24).z; + float tmpvar_25; + tmpvar_25 = (valNew_2.y / valNew_2.z); + valNew_2.w = vec4(tmpvar_25).w; + return valNew_2; +} + +void main () +{ + v2f_img xlt_i_26; + vec4 xl_retval_27; + vec4 tmpvar_28; + tmpvar_28 = vec4(0.0, 0.0, 0.0, 0.0); + xlt_i_26.pos = tmpvar_28; + vec2 tmpvar_29; + tmpvar_29 = gl_TexCoord[0].xy; + vec2 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_i_26.uv = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = frag (xlt_i_26); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xl_retval_27 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = xl_retval_27.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_FragData[0] = tmpvar_34; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-out.txt new file mode 100644 index 000000000..31adeed99 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zun-currently_adapted-out.txt @@ -0,0 +1,23 @@ +uniform sampler2D _MainTex; +uniform sampler2D _CurTex; +uniform vec4 _AdaptParams; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_TexCoord[0].xy; + vec4 valNew_2; + vec2 delta_3; + vec4 tmpvar_4; + tmpvar_4 = texture2D (_MainTex, tmpvar_1); + vec2 tmpvar_5; + tmpvar_5 = ((texture2D (_CurTex, tmpvar_1).xy - tmpvar_4.xy) * _AdaptParams.x); + delta_3.x = (sign(tmpvar_5.x) * max (0.00392157, abs(tmpvar_5.x))); + delta_3.y = (sign(tmpvar_5.y) * max (0.00392157, abs(tmpvar_5.y))); + valNew_2.xy = (tmpvar_4.xy + delta_3); + valNew_2.x = max (valNew_2.x, _AdaptParams.z); + valNew_2.y = min (valNew_2.y, _AdaptParams.y); + valNew_2.z = ((valNew_2.x - valNew_2.y) + 0.01); + valNew_2.w = (valNew_2.y / valNew_2.z); + gl_FragData[0] = valNew_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-in.txt b/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-in.txt new file mode 100644 index 000000000..60192e038 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-in.txt @@ -0,0 +1,46 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +uniform sampler2D _MainTex; +uniform vec4 _MainTex_TexelSize; + +vec2 maxMag (in vec2 a, in vec2 b) +{ + float ma; + float mb; + ma = dot(a, a); + mb = dot(b, b); + return mix (a, b, vec2(step(ma, mb))); +} +vec4 TileMax (in v2f i) +{ + vec2 uvCorner; + vec2 mx; + vec2 v; + uvCorner = i.uv; + mx = vec2(texture2D( _MainTex, uvCorner)); + int j = 0; + for ( ; (j < 8); (j++)) + { + int l = 0; + for ( ; (l < 8); (l++)) + { + v = texture2D (_MainTex, (uvCorner + (vec2(float(l),float(j)) * _MainTex_TexelSize.xy))).xy; + mx = maxMag(mx, v); + } + } + return vec4(mx, 0.0, 0.0); +} + +varying vec2 xlv_TEXCOORD0; + +void main() +{ + vec4 c; + v2f ii; + ii.pos = vec4(0.0); + ii.uv = xlv_TEXCOORD0; + c = TileMax(ii); + gl_FragData[0] = c; +} diff --git a/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-ir.txt b/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-ir.txt new file mode 100644 index 000000000..8dcb34200 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-ir.txt @@ -0,0 +1,117 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +vec2 maxMag ( + in vec2 a_1, + in vec2 b_2 +) +{ + float mb_3; + float ma_4; + float tmpvar_5; + tmpvar_5 = dot (a_1, a_1); + float tmpvar_6; + tmpvar_6 = tmpvar_5; + ma_4 = tmpvar_6; + float tmpvar_7; + tmpvar_7 = dot (b_2, b_2); + float tmpvar_8; + tmpvar_8 = tmpvar_7; + mb_3 = tmpvar_8; + float tmpvar_9; + tmpvar_9 = step (ma_4, mb_3); + vec2 tmpvar_10; + tmpvar_10 = vec2(tmpvar_9); + vec2 tmpvar_11; + tmpvar_11 = mix (a_1, b_2, tmpvar_10); + return tmpvar_11; +} + +vec4 TileMax ( + in v2f i_12 +) +{ + int j_13; + vec2 v_14; + vec2 mx_15; + vec2 uvCorner_16; + vec2 tmpvar_17; + tmpvar_17 = i_12.uv; + uvCorner_16 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = texture2D (_MainTex, uvCorner_16); + vec2 tmpvar_19; + tmpvar_19 = tmpvar_18.xy; + vec2 tmpvar_20; + tmpvar_20 = tmpvar_19; + mx_15 = tmpvar_20; + int tmpvar_21; + tmpvar_21 = 0; + j_13 = tmpvar_21; + while (true) { + int l_22; + if (!((j_13 < 8))) { + break; + }; + int tmpvar_23; + tmpvar_23 = 0; + l_22 = tmpvar_23; + while (true) { + if (!((l_22 < 8))) { + break; + }; + vec2 tmpvar_24; + tmpvar_24.x = float(l_22); + tmpvar_24.y = float(j_13); + vec4 tmpvar_25; + tmpvar_25 = texture2D (_MainTex, (uvCorner_16 + (tmpvar_24 * _MainTex_TexelSize.xy))); + vec2 tmpvar_26; + tmpvar_26 = tmpvar_25.xy; + v_14 = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = maxMag (mx_15, v_14); + vec2 tmpvar_28; + tmpvar_28 = tmpvar_27; + mx_15 = tmpvar_28; + int _post_incdec_tmp_29; + _post_incdec_tmp_29 = l_22; + int tmpvar_30; + tmpvar_30 = (l_22 + 1); + l_22 = tmpvar_30; + }; + int _post_incdec_tmp_31; + _post_incdec_tmp_31 = j_13; + int tmpvar_32; + tmpvar_32 = (j_13 + 1); + j_13 = tmpvar_32; + }; + vec4 tmpvar_33; + tmpvar_33.zw = vec2(0.0, 0.0); + tmpvar_33.xy = mx_15.xy; + return tmpvar_33; +} + +void main () +{ + v2f ii_34; + vec4 c_35; + vec4 tmpvar_36; + tmpvar_36 = vec4(0.0, 0.0, 0.0, 0.0); + ii_34.pos = tmpvar_36; + vec2 tmpvar_37; + tmpvar_37 = xlv_TEXCOORD0; + ii_34.uv = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = TileMax (ii_34); + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + c_35 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = c_35; + gl_FragData[0] = tmpvar_40; +} + diff --git a/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-out.txt b/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-out.txt new file mode 100644 index 000000000..e04ae6c6a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/fragment/zunity-MotionBlur-TileMax-out.txt @@ -0,0 +1,68 @@ +varying vec2 xlv_TEXCOORD0; +uniform vec4 _MainTex_TexelSize; +uniform sampler2D _MainTex; +void main () +{ + int j_1; + vec2 mx_2; + vec2 uvCorner_3; + uvCorner_3 = xlv_TEXCOORD0; + mx_2 = texture2D (_MainTex, xlv_TEXCOORD0).xy; + j_1 = 0; + for (int j_1 = 0; j_1 < 8; ) { + vec2 tmpvar_4; + tmpvar_4.x = 0.0; + tmpvar_4.y = float(j_1); + vec4 tmpvar_5; + tmpvar_5 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_4 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_5.xy, vec2(float((dot (tmpvar_5.xy, tmpvar_5.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_6; + tmpvar_6.x = 1.0; + tmpvar_6.y = float(j_1); + vec4 tmpvar_7; + tmpvar_7 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_6 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_7.xy, vec2(float((dot (tmpvar_7.xy, tmpvar_7.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_8; + tmpvar_8.x = 2.0; + tmpvar_8.y = float(j_1); + vec4 tmpvar_9; + tmpvar_9 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_8 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_9.xy, vec2(float((dot (tmpvar_9.xy, tmpvar_9.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_10; + tmpvar_10.x = 3.0; + tmpvar_10.y = float(j_1); + vec4 tmpvar_11; + tmpvar_11 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_10 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_11.xy, vec2(float((dot (tmpvar_11.xy, tmpvar_11.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_12; + tmpvar_12.x = 4.0; + tmpvar_12.y = float(j_1); + vec4 tmpvar_13; + tmpvar_13 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_12 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_13.xy, vec2(float((dot (tmpvar_13.xy, tmpvar_13.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_14; + tmpvar_14.x = 5.0; + tmpvar_14.y = float(j_1); + vec4 tmpvar_15; + tmpvar_15 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_14 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_15.xy, vec2(float((dot (tmpvar_15.xy, tmpvar_15.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_16; + tmpvar_16.x = 6.0; + tmpvar_16.y = float(j_1); + vec4 tmpvar_17; + tmpvar_17 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_16 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_17.xy, vec2(float((dot (tmpvar_17.xy, tmpvar_17.xy) >= dot (mx_2, mx_2))))); + vec2 tmpvar_18; + tmpvar_18.x = 7.0; + tmpvar_18.y = float(j_1); + vec4 tmpvar_19; + tmpvar_19 = texture2D (_MainTex, (uvCorner_3 + (tmpvar_18 * _MainTex_TexelSize.xy))); + mx_2 = mix (mx_2, tmpvar_19.xy, vec2(float((dot (tmpvar_19.xy, tmpvar_19.xy) >= dot (mx_2, mx_2))))); + j_1 = (j_1 + 1); + }; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = mx_2; + gl_FragData[0] = tmpvar_20; +} + diff --git a/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp b/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp index 36f4a66c1..47e3aaa40 100644 --- a/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp +++ b/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp @@ -12,6 +12,7 @@ #if GOT_GFX #ifdef _MSC_VER +#define GOT_MORE_THAN_GLSL_120 1 #include #include extern "C" { @@ -34,12 +35,14 @@ static PFNGLGETINFOLOGARBPROC glGetInfoLogARB; static PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; } #else +#define GOT_MORE_THAN_GLSL_120 0 #include #include #include #endif #else // GOT_GFX +#define GOT_MORE_THAN_GLSL_120 0 #include #include #include "dirent.h" @@ -47,6 +50,12 @@ static PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; #include "GL/glext.h" #endif + +#ifndef _MSC_VER +#include +#endif + + static bool InitializeOpenGL () { bool hasGLSL = false; @@ -128,8 +137,17 @@ static void replace_string (std::string& target, const std::string& search, cons } } -static bool CheckGLSL (bool vertex, bool gles, const char* prefix, const std::string& source) +static bool CheckGLSL (bool vertex, bool gles, const std::string& testName, const char* prefix, const std::string& source) { + #if !GOT_GFX + return true; // just assume it's ok + #endif + + #if !GOT_MORE_THAN_GLSL_120 + if (source.find("#version 140") != std::string::npos) + return true; + #endif + std::string src; if (gles) { @@ -137,16 +155,19 @@ static bool CheckGLSL (bool vertex, bool gles, const char* prefix, const std::st src += "#define mediump\n"; src += "#define highp\n"; src += "#define texture2DLodEXT texture2DLod\n"; + src += "#define texture2DProjLodEXT texture2DProjLod\n"; + src += "float shadow2DEXT (sampler2DShadow s, vec3 p) { return shadow2D(s,p).r; }\n"; + src += "float shadow2DProjEXT (sampler2DShadow s, vec4 p) { return shadow2DProj(s,p).r; }\n"; } src += source; if (gles) { replace_string (src, "GL_EXT_shader_texture_lod", "GL_ARB_shader_texture_lod", 0); replace_string (src, "#extension GL_OES_standard_derivatives : require", "", 0); + replace_string (src, "#extension GL_EXT_shadow_samplers : require", "", 0); } const char* sourcePtr = src.c_str(); -#if GOT_GFX GLhandleARB shader = glCreateShaderObjectARB (vertex ? GL_VERTEX_SHADER_ARB : GL_FRAGMENT_SHADER_ARB); glShaderSourceARB (shader, 1, &sourcePtr, NULL); @@ -159,15 +180,11 @@ static bool CheckGLSL (bool vertex, bool gles, const char* prefix, const std::st char log[4096]; GLsizei logLength; glGetInfoLogARB (shader, sizeof(log), &logLength, log); - printf (" glsl compile error on %s:\n%s\n", prefix, log); + printf ("\n %s: real glsl compiler error on %s:\n%s\n", testName.c_str(), prefix, log); res = false; } glDeleteObjectARB (shader); return res; -#else - // just assume it's ok... - return true; -#endif } @@ -269,6 +286,7 @@ static void MassageFragmentForGLES (std::string& s) } static bool TestFile (glslopt_ctx* ctx, bool vertex, + const std::string& testName, const std::string& inputPath, const std::string& hirPath, const std::string& outputPath, @@ -278,12 +296,12 @@ static bool TestFile (glslopt_ctx* ctx, bool vertex, std::string input; if (!ReadStringFromFile (inputPath.c_str(), input)) { - printf (" failed to read input file\n"); + printf ("\n %s: failed to read input file\n", testName.c_str()); return false; } if (doCheckGLSL) { - if (!CheckGLSL (vertex, gles, "input", input.c_str())) + if (!CheckGLSL (vertex, gles, testName, "input", input.c_str())) return false; } @@ -316,14 +334,14 @@ static bool TestFile (glslopt_ctx* ctx, bool vertex, FILE* f = fopen (hirPath.c_str(), "wb"); if (!f) { - printf (" can't write to IR file!\n"); + printf ("\n %s: can't write to IR file!\n", testName.c_str()); } else { fwrite (textHir.c_str(), 1, textHir.size(), f); fclose (f); } - printf (" does not match raw output\n"); + printf ("\n %s: does not match raw output\n", testName.c_str()); res = false; } @@ -333,24 +351,24 @@ static bool TestFile (glslopt_ctx* ctx, bool vertex, FILE* f = fopen (outputPath.c_str(), "wb"); if (!f) { - printf (" can't write to optimized file!\n"); + printf ("\n %s: can't write to optimized file!\n", testName.c_str()); } else { fwrite (textOpt.c_str(), 1, textOpt.size(), f); fclose (f); } - printf (" does not match optimized output\n"); + printf ("\n %s: does not match optimized output\n", testName.c_str()); res = false; } - if (res && doCheckGLSL && !CheckGLSL (vertex, gles, "raw", textHir.c_str())) + if (res && doCheckGLSL && !CheckGLSL (vertex, gles, testName, "raw", textHir.c_str())) res = false; - if (res && doCheckGLSL && !CheckGLSL (vertex, gles, "optimized", textOpt.c_str())) + if (res && doCheckGLSL && !CheckGLSL (vertex, gles, testName, "optimized", textOpt.c_str())) res = false; } else { - printf (" optimize error: %s\n", glslopt_get_log(shader)); + printf ("\n %s: optimize error: %s\n", testName.c_str(), glslopt_get_log(shader)); res = false; } @@ -391,17 +409,18 @@ int main (int argc, const char** argv) static const char* kApiOut[2] = {"-outES.txt", "-out.txt"}; for (int api = 0; api < 2; ++api) { - printf ("** running %s tests for %s...\n", kTypeName[type], kAPIName[api]); + printf ("\n** running %s tests for %s...\n", kTypeName[type], kAPIName[api]); StringVector inputFiles = GetFiles (testFolder, kApiIn[api]); size_t n = inputFiles.size(); for (size_t i = 0; i < n; ++i) { std::string inname = inputFiles[i]; - printf ("test %s\n", inname.c_str()); + //if (inname != "ast-in.txt") + // continue; std::string hirname = inname.substr (0,inname.size()-strlen(kApiIn[api])) + kApiIR[api]; std::string outname = inname.substr (0,inname.size()-strlen(kApiIn[api])) + kApiOut[api]; - bool ok = TestFile (ctx[api], type==0, testFolder + "/" + inname, testFolder + "/" + hirname, testFolder + "/" + outname, api==0, hasOpenGL); + bool ok = TestFile (ctx[api], type==0, inname, testFolder + "/" + inname, testFolder + "/" + hirname, testFolder + "/" + outname, api==0, hasOpenGL); if (!ok) { ++errors; @@ -414,9 +433,12 @@ int main (int argc, const char** argv) float timeDelta = float(time1-time0)/CLOCKS_PER_SEC; if (errors != 0) - printf ("**** %i tests (%.2fsec), %i !!!FAILED!!!\n", tests, timeDelta, errors); + printf ("\n**** %i tests (%.2fsec), %i !!!FAILED!!!\n", tests, timeDelta, errors); else - printf ("**** %i tests (%.2fsec) succeeded\n", tests, timeDelta); + printf ("\n**** %i tests (%.2fsec) succeeded\n", tests, timeDelta); + + // 3.25s + // with builtin call linking, 3.84s for (int i = 0; i < 2; ++i) glslopt_cleanup (ctx[i]); diff --git a/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-irES.txt index 6dd6f4521..63a4d22b2 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-irES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-irES.txt @@ -38,514 +38,514 @@ attribute highp vec4 _glesMultiTexCoord0; attribute mediump vec3 _glesNormal; attribute highp vec4 _glesVertex; float xll_mod ( - in float x, - in float y + in float x_1, + in float y_2 ) { - float f; - float d; - float tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - float tmpvar_2; - tmpvar_2 = abs (d); - float tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - float tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; + float f_3; + float d_4; float tmpvar_5; - if ((d >= 0.0)) { - tmpvar_5 = f; - } else { - tmpvar_5 = -(f); - }; - return tmpvar_5; -} - -vec2 xll_mod ( - in vec2 x, - in vec2 y -) -{ - vec2 f; - vec2 d; - vec2 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = abs (d); - vec2 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec2 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; + tmpvar_5 = (x_1 / y_2); + d_4 = tmpvar_5; float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; - vec2 tmpvar_7; - tmpvar_7.x = tmpvar_5; - tmpvar_7.y = tmpvar_6; - return tmpvar_7; -} - -vec3 xll_mod ( - in vec3 x, - in vec3 y -) -{ - vec3 f; - vec3 d; - vec3 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = abs (d); - vec3 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; - float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; + tmpvar_6 = abs (d_4); float tmpvar_7; - if ((d.z >= 0.0)) { - tmpvar_7 = f.z; - } else { - tmpvar_7 = -(f.z); - }; - vec3 tmpvar_8; - tmpvar_8.x = tmpvar_5; - tmpvar_8.y = tmpvar_6; - tmpvar_8.z = tmpvar_7; - return tmpvar_8; -} - -vec4 xll_mod ( - in vec4 x, - in vec4 y -) -{ - vec4 f; - vec4 d; - vec4 tmpvar_1; - tmpvar_1 = (x / y); - d = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = abs (d); - vec4 tmpvar_3; - tmpvar_3 = fract (tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * y); - f = tmpvar_4; - float tmpvar_5; - if ((d.x >= 0.0)) { - tmpvar_5 = f.x; - } else { - tmpvar_5 = -(f.x); - }; - float tmpvar_6; - if ((d.y >= 0.0)) { - tmpvar_6 = f.y; - } else { - tmpvar_6 = -(f.y); - }; - float tmpvar_7; - if ((d.z >= 0.0)) { - tmpvar_7 = f.z; - } else { - tmpvar_7 = -(f.z); - }; + tmpvar_7 = fract (tmpvar_6); float tmpvar_8; - if ((d.w >= 0.0)) { - tmpvar_8 = f.w; + tmpvar_8 = (tmpvar_7 * y_2); + f_3 = tmpvar_8; + float tmpvar_9; + if ((d_4 >= 0.0)) { + tmpvar_9 = f_3; } else { - tmpvar_8 = -(f.w); + tmpvar_9 = -(f_3); }; - vec4 tmpvar_9; - tmpvar_9.x = tmpvar_5; - tmpvar_9.y = tmpvar_6; - tmpvar_9.z = tmpvar_7; - tmpvar_9.w = tmpvar_8; return tmpvar_9; } -float xll_saturate ( - in float x +vec2 xll_mod ( + in vec2 x_10, + in vec2 y_11 ) { - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + vec2 f_12; + vec2 d_13; + vec2 tmpvar_14; + tmpvar_14 = (x_10 / y_11); + d_13 = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = abs (d_13); + vec2 tmpvar_16; + tmpvar_16 = fract (tmpvar_15); + vec2 tmpvar_17; + tmpvar_17 = (tmpvar_16 * y_11); + f_12 = tmpvar_17; + float tmpvar_18; + if ((d_13.x >= 0.0)) { + tmpvar_18 = f_12.x; + } else { + tmpvar_18 = -(f_12.x); + }; + float tmpvar_19; + if ((d_13.y >= 0.0)) { + tmpvar_19 = f_12.y; + } else { + tmpvar_19 = -(f_12.y); + }; + vec2 tmpvar_20; + tmpvar_20.x = tmpvar_18; + tmpvar_20.y = tmpvar_19; + return tmpvar_20; +} + +vec3 xll_mod ( + in vec3 x_21, + in vec3 y_22 +) +{ + vec3 f_23; + vec3 d_24; + vec3 tmpvar_25; + tmpvar_25 = (x_21 / y_22); + d_24 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = abs (d_24); + vec3 tmpvar_27; + tmpvar_27 = fract (tmpvar_26); + vec3 tmpvar_28; + tmpvar_28 = (tmpvar_27 * y_22); + f_23 = tmpvar_28; + float tmpvar_29; + if ((d_24.x >= 0.0)) { + tmpvar_29 = f_23.x; + } else { + tmpvar_29 = -(f_23.x); + }; + float tmpvar_30; + if ((d_24.y >= 0.0)) { + tmpvar_30 = f_23.y; + } else { + tmpvar_30 = -(f_23.y); + }; + float tmpvar_31; + if ((d_24.z >= 0.0)) { + tmpvar_31 = f_23.z; + } else { + tmpvar_31 = -(f_23.z); + }; + vec3 tmpvar_32; + tmpvar_32.x = tmpvar_29; + tmpvar_32.y = tmpvar_30; + tmpvar_32.z = tmpvar_31; + return tmpvar_32; +} + +vec4 xll_mod ( + in vec4 x_33, + in vec4 y_34 +) +{ + vec4 f_35; + vec4 d_36; + vec4 tmpvar_37; + tmpvar_37 = (x_33 / y_34); + d_36 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = abs (d_36); + vec4 tmpvar_39; + tmpvar_39 = fract (tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = (tmpvar_39 * y_34); + f_35 = tmpvar_40; + float tmpvar_41; + if ((d_36.x >= 0.0)) { + tmpvar_41 = f_35.x; + } else { + tmpvar_41 = -(f_35.x); + }; + float tmpvar_42; + if ((d_36.y >= 0.0)) { + tmpvar_42 = f_35.y; + } else { + tmpvar_42 = -(f_35.y); + }; + float tmpvar_43; + if ((d_36.z >= 0.0)) { + tmpvar_43 = f_35.z; + } else { + tmpvar_43 = -(f_35.z); + }; + float tmpvar_44; + if ((d_36.w >= 0.0)) { + tmpvar_44 = f_35.w; + } else { + tmpvar_44 = -(f_35.w); + }; + vec4 tmpvar_45; + tmpvar_45.x = tmpvar_41; + tmpvar_45.y = tmpvar_42; + tmpvar_45.z = tmpvar_43; + tmpvar_45.w = tmpvar_44; + return tmpvar_45; +} + +float xll_saturate ( + in float x_46 +) +{ + float tmpvar_47; + tmpvar_47 = clamp (x_46, 0.0, 1.0); + return tmpvar_47; } vec2 xll_saturate ( - in vec2 x + in vec2 x_48 ) { - vec2 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + vec2 tmpvar_49; + tmpvar_49 = clamp (x_48, 0.0, 1.0); + return tmpvar_49; } vec3 xll_saturate ( - in vec3 x + in vec3 x_50 ) { - vec3 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + vec3 tmpvar_51; + tmpvar_51 = clamp (x_50, 0.0, 1.0); + return tmpvar_51; } vec4 xll_saturate ( - in vec4 x + in vec4 x_52 ) { - vec4 tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; + vec4 tmpvar_53; + tmpvar_53 = clamp (x_52, 0.0, 1.0); + return tmpvar_53; } mat2 xll_saturate ( - in mat2 m + in mat2 m_54 ) { - vec2 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec2 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - mat2 tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_1; - tmpvar_3[0] = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = tmpvar_2; - tmpvar_3[1] = tmpvar_5; - return tmpvar_3; + vec2 tmpvar_55; + tmpvar_55 = clamp (m_54[0], 0.0, 1.0); + vec2 tmpvar_56; + tmpvar_56 = clamp (m_54[1], 0.0, 1.0); + mat2 tmpvar_57; + vec2 tmpvar_58; + tmpvar_58 = tmpvar_55; + tmpvar_57[0] = tmpvar_58; + vec2 tmpvar_59; + tmpvar_59 = tmpvar_56; + tmpvar_57[1] = tmpvar_59; + return tmpvar_57; } mat3 xll_saturate ( - in mat3 m + in mat3 m_60 ) { - vec3 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec3 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec3 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + vec3 tmpvar_61; + tmpvar_61 = clamp (m_60[0], 0.0, 1.0); + vec3 tmpvar_62; + tmpvar_62 = clamp (m_60[1], 0.0, 1.0); + vec3 tmpvar_63; + tmpvar_63 = clamp (m_60[2], 0.0, 1.0); + mat3 tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = tmpvar_61; + tmpvar_64[0] = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = tmpvar_62; + tmpvar_64[1] = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = tmpvar_63; + tmpvar_64[2] = tmpvar_67; + return tmpvar_64; } mat4 xll_saturate ( - in mat4 m + in mat4 m_68 ) { - vec4 tmpvar_1; - tmpvar_1 = clamp (m[0], 0.0, 1.0); - vec4 tmpvar_2; - tmpvar_2 = clamp (m[1], 0.0, 1.0); - vec4 tmpvar_3; - tmpvar_3 = clamp (m[2], 0.0, 1.0); - vec4 tmpvar_4; - tmpvar_4 = clamp (m[3], 0.0, 1.0); - mat4 tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_1; - tmpvar_5[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = tmpvar_2; - tmpvar_5[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_3; - tmpvar_5[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = tmpvar_4; - tmpvar_5[3] = tmpvar_9; - return tmpvar_5; + vec4 tmpvar_69; + tmpvar_69 = clamp (m_68[0], 0.0, 1.0); + vec4 tmpvar_70; + tmpvar_70 = clamp (m_68[1], 0.0, 1.0); + vec4 tmpvar_71; + tmpvar_71 = clamp (m_68[2], 0.0, 1.0); + vec4 tmpvar_72; + tmpvar_72 = clamp (m_68[3], 0.0, 1.0); + mat4 tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_69; + tmpvar_73[0] = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = tmpvar_70; + tmpvar_73[1] = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_71; + tmpvar_73[2] = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_72; + tmpvar_73[3] = tmpvar_77; + return tmpvar_73; } void CalcOrthonormalBasis ( - in highp vec3 dir, - out highp vec3 right, - out highp vec3 up + in highp vec3 dir_78, + out highp vec3 right_79, + out highp vec3 up_80 ) { - highp float tmpvar_1; - tmpvar_1 = abs (dir.y); - vec3 tmpvar_2; - if ((tmpvar_1 > 0.999)) { - tmpvar_2 = vec3(0.0, 0.0, 1.0); + highp float tmpvar_81; + tmpvar_81 = abs (dir_78.y); + vec3 tmpvar_82; + if ((tmpvar_81 > 0.999)) { + tmpvar_82 = vec3(0.0, 0.0, 1.0); } else { - tmpvar_2 = vec3(0.0, 1.0, 0.0); + tmpvar_82 = vec3(0.0, 1.0, 0.0); }; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - up = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = cross (up, dir); - highp vec3 tmpvar_5; - tmpvar_5 = normalize (tmpvar_4); - highp vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - right = tmpvar_6; - highp vec3 tmpvar_7; - tmpvar_7 = cross (dir, right); - highp vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - up = tmpvar_8; + vec3 tmpvar_83; + tmpvar_83 = tmpvar_82; + up_80 = tmpvar_83; + highp vec3 tmpvar_84; + tmpvar_84 = cross (up_80, dir_78); + highp vec3 tmpvar_85; + tmpvar_85 = normalize (tmpvar_84); + highp vec3 tmpvar_86; + tmpvar_86 = tmpvar_85; + right_79 = tmpvar_86; + highp vec3 tmpvar_87; + tmpvar_87 = cross (dir_78, right_79); + highp vec3 tmpvar_88; + tmpvar_88 = tmpvar_87; + up_80 = tmpvar_88; } float CalcFadeOutFactor ( - in highp float dist + in highp float dist_89 ) { - highp float ffadeout; - highp float nfadeout; - float tmpvar_1; - tmpvar_1 = xll_saturate ((dist / _FadeOutDistNear)); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - nfadeout = tmpvar_2; - highp float tmpvar_3; - tmpvar_3 = max ((dist - _FadeOutDistFar), 0.0); - float tmpvar_4; - tmpvar_4 = xll_saturate ((tmpvar_3 * 0.2)); - float tmpvar_5; - tmpvar_5 = (1.0 - tmpvar_4); - ffadeout = tmpvar_5; - highp float tmpvar_6; - tmpvar_6 = (ffadeout * ffadeout); - ffadeout = tmpvar_6; - highp float tmpvar_7; - tmpvar_7 = (nfadeout * nfadeout); - nfadeout = tmpvar_7; - highp float tmpvar_8; - tmpvar_8 = (nfadeout * nfadeout); - nfadeout = tmpvar_8; - highp float tmpvar_9; - tmpvar_9 = (nfadeout * ffadeout); - nfadeout = tmpvar_9; - return nfadeout; + highp float ffadeout_90; + highp float nfadeout_91; + float tmpvar_92; + tmpvar_92 = xll_saturate ((dist_89 / _FadeOutDistNear)); + float tmpvar_93; + tmpvar_93 = tmpvar_92; + nfadeout_91 = tmpvar_93; + highp float tmpvar_94; + tmpvar_94 = max ((dist_89 - _FadeOutDistFar), 0.0); + float tmpvar_95; + tmpvar_95 = xll_saturate ((tmpvar_94 * 0.2)); + float tmpvar_96; + tmpvar_96 = (1.0 - tmpvar_95); + ffadeout_90 = tmpvar_96; + highp float tmpvar_97; + tmpvar_97 = (ffadeout_90 * ffadeout_90); + ffadeout_90 = tmpvar_97; + highp float tmpvar_98; + tmpvar_98 = (nfadeout_91 * nfadeout_91); + nfadeout_91 = tmpvar_98; + highp float tmpvar_99; + tmpvar_99 = (nfadeout_91 * nfadeout_91); + nfadeout_91 = tmpvar_99; + highp float tmpvar_100; + tmpvar_100 = (nfadeout_91 * ffadeout_90); + nfadeout_91 = tmpvar_100; + return nfadeout_91; } float CalcDistScale ( - in highp float dist + in highp float dist_101 ) { - highp float distScale; - highp float tmpvar_1; - tmpvar_1 = max ((dist - _SizeGrowStartDist), 0.0); - highp float tmpvar_2; - tmpvar_2 = min ((tmpvar_1 / _SizeGrowEndDist), 1.0); - highp float tmpvar_3; - tmpvar_3 = tmpvar_2; - distScale = tmpvar_3; - return ((distScale * distScale) * _MaxGrowSize); + highp float distScale_102; + highp float tmpvar_103; + tmpvar_103 = max ((dist_101 - _SizeGrowStartDist), 0.0); + highp float tmpvar_104; + tmpvar_104 = min ((tmpvar_103 / _SizeGrowEndDist), 1.0); + highp float tmpvar_105; + tmpvar_105 = tmpvar_104; + distScale_102 = tmpvar_105; + return ((distScale_102 * distScale_102) * _MaxGrowSize); } v2f xlat_main ( - in appdata_full v + in appdata_full v_106 ) { - v2f o; - highp float noiseWave; - highp float noise; - highp float noiseTime; - highp float wave; - highp float fracTime; - highp float time; - highp vec3 BBLocalPos; - highp vec3 BBNormal; - highp float distScale; - highp vec3 upLocal; - highp vec3 rightLocal; - highp float localDirLength; - highp vec3 localDir; - highp vec3 viewerLocal; - highp vec3 centerLocal; - highp vec3 centerOffs; - highp vec3 tmpvar_1; - tmpvar_1.z = 0.0; - tmpvar_1.xy = (vec2(0.5, 0.5) - v.color.xy).xy; - highp vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1 * v.texcoord1.xyy); - centerOffs = tmpvar_2; - highp vec3 tmpvar_3; - tmpvar_3 = (v.vertex.xyz + centerOffs.xyz); - centerLocal = tmpvar_3; - highp vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = _WorldSpaceCameraPos.xyz; - highp vec3 tmpvar_5; - tmpvar_5 = (_World2Object * tmpvar_4).xyz; - highp vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - viewerLocal = tmpvar_6; - highp vec3 tmpvar_7; - tmpvar_7 = (viewerLocal - centerLocal); - localDir = tmpvar_7; - highp float tmpvar_8; - tmpvar_8 = mix (0.0, localDir.y, _VerticalBillboarding); - highp float tmpvar_9; - tmpvar_9 = tmpvar_8; - localDir.y = vec2(tmpvar_9).y; - highp float tmpvar_10; - tmpvar_10 = length (localDir); - highp float tmpvar_11; - tmpvar_11 = tmpvar_10; - localDirLength = tmpvar_11; - CalcOrthonormalBasis ((localDir / localDirLength), rightLocal, upLocal); - highp float tmpvar_12; - tmpvar_12 = CalcDistScale (localDirLength); - highp float tmpvar_13; - tmpvar_13 = (tmpvar_12 * v.color.w); - distScale = tmpvar_13; - highp vec3 tmpvar_14; - tmpvar_14 = ((rightLocal * v.normal.x) + (upLocal * v.normal.y)); - BBNormal = tmpvar_14; - highp vec3 tmpvar_15; - tmpvar_15 = ((centerLocal - ((rightLocal * centerOffs.x) + (upLocal * centerOffs.y))) + (BBNormal * distScale)); - BBLocalPos = tmpvar_15; - highp float tmpvar_16; - tmpvar_16 = (_Time.y + (_BlinkingTimeOffsScale * v.color.z)); - time = tmpvar_16; - float tmpvar_17; - tmpvar_17 = xll_mod (time, (_TimeOnDuration + _TimeOffDuration)); - float tmpvar_18; - tmpvar_18 = tmpvar_17; - fracTime = tmpvar_18; - highp float tmpvar_19; - tmpvar_19 = smoothstep (0.0, (_TimeOnDuration * 0.25), fracTime); - highp float tmpvar_20; - tmpvar_20 = smoothstep ((_TimeOnDuration * 0.75), _TimeOnDuration, fracTime); - highp float tmpvar_21; - tmpvar_21 = (tmpvar_19 * (1.0 - tmpvar_20)); - wave = tmpvar_21; - highp float tmpvar_22; - tmpvar_22 = (time * (6.28319 / _TimeOnDuration)); - noiseTime = tmpvar_22; - highp float tmpvar_23; - tmpvar_23 = sin (noiseTime); - highp float tmpvar_24; - tmpvar_24 = cos (((noiseTime * 0.6366) + 56.7272)); - highp float tmpvar_25; - tmpvar_25 = (tmpvar_23 * ((0.5 * tmpvar_24) + 0.5)); - noise = tmpvar_25; - highp float tmpvar_26; - tmpvar_26 = ((_NoiseAmount * noise) + (1.0 - _NoiseAmount)); - noiseWave = tmpvar_26; - highp float tmpvar_27; + v2f o_107; + highp float noiseWave_108; + highp float noise_109; + highp float noiseTime_110; + highp float wave_111; + highp float fracTime_112; + highp float time_113; + highp vec3 BBLocalPos_114; + highp vec3 BBNormal_115; + highp float distScale_116; + highp vec3 upLocal_117; + highp vec3 rightLocal_118; + highp float localDirLength_119; + highp vec3 localDir_120; + highp vec3 viewerLocal_121; + highp vec3 centerLocal_122; + highp vec3 centerOffs_123; + highp vec3 tmpvar_124; + tmpvar_124.z = 0.0; + tmpvar_124.xy = (vec2(0.5, 0.5) - v_106.color.xy).xy; + highp vec3 tmpvar_125; + tmpvar_125 = (tmpvar_124 * v_106.texcoord1.xyy); + centerOffs_123 = tmpvar_125; + highp vec3 tmpvar_126; + tmpvar_126 = (v_106.vertex.xyz + centerOffs_123.xyz); + centerLocal_122 = tmpvar_126; + highp vec4 tmpvar_127; + tmpvar_127.w = 1.0; + tmpvar_127.xyz = _WorldSpaceCameraPos.xyz; + highp vec3 tmpvar_128; + tmpvar_128 = (_World2Object * tmpvar_127).xyz; + highp vec3 tmpvar_129; + tmpvar_129 = tmpvar_128; + viewerLocal_121 = tmpvar_129; + highp vec3 tmpvar_130; + tmpvar_130 = (viewerLocal_121 - centerLocal_122); + localDir_120 = tmpvar_130; + highp float tmpvar_131; + tmpvar_131 = mix (0.0, localDir_120.y, _VerticalBillboarding); + highp float tmpvar_132; + tmpvar_132 = tmpvar_131; + localDir_120.y = vec2(tmpvar_132).y; + highp float tmpvar_133; + tmpvar_133 = length (localDir_120); + highp float tmpvar_134; + tmpvar_134 = tmpvar_133; + localDirLength_119 = tmpvar_134; + CalcOrthonormalBasis ((localDir_120 / localDirLength_119), rightLocal_118, upLocal_117); + highp float tmpvar_135; + tmpvar_135 = CalcDistScale (localDirLength_119); + highp float tmpvar_136; + tmpvar_136 = (tmpvar_135 * v_106.color.w); + distScale_116 = tmpvar_136; + highp vec3 tmpvar_137; + tmpvar_137 = ((rightLocal_118 * v_106.normal.x) + (upLocal_117 * v_106.normal.y)); + BBNormal_115 = tmpvar_137; + highp vec3 tmpvar_138; + tmpvar_138 = ((centerLocal_122 - ((rightLocal_118 * centerOffs_123.x) + (upLocal_117 * centerOffs_123.y))) + (BBNormal_115 * distScale_116)); + BBLocalPos_114 = tmpvar_138; + highp float tmpvar_139; + tmpvar_139 = (_Time.y + (_BlinkingTimeOffsScale * v_106.color.z)); + time_113 = tmpvar_139; + float tmpvar_140; + tmpvar_140 = xll_mod (time_113, (_TimeOnDuration + _TimeOffDuration)); + float tmpvar_141; + tmpvar_141 = tmpvar_140; + fracTime_112 = tmpvar_141; + highp float tmpvar_142; + tmpvar_142 = smoothstep (0.0, (_TimeOnDuration * 0.25), fracTime_112); + highp float tmpvar_143; + tmpvar_143 = smoothstep ((_TimeOnDuration * 0.75), _TimeOnDuration, fracTime_112); + highp float tmpvar_144; + tmpvar_144 = (tmpvar_142 * (1.0 - tmpvar_143)); + wave_111 = tmpvar_144; + highp float tmpvar_145; + tmpvar_145 = (time_113 * (6.28319 / _TimeOnDuration)); + noiseTime_110 = tmpvar_145; + highp float tmpvar_146; + tmpvar_146 = sin (noiseTime_110); + highp float tmpvar_147; + tmpvar_147 = cos (((noiseTime_110 * 0.6366) + 56.7272)); + highp float tmpvar_148; + tmpvar_148 = (tmpvar_146 * ((0.5 * tmpvar_147) + 0.5)); + noise_109 = tmpvar_148; + highp float tmpvar_149; + tmpvar_149 = ((_NoiseAmount * noise_109) + (1.0 - _NoiseAmount)); + noiseWave_108 = tmpvar_149; + highp float tmpvar_150; if ((_NoiseAmount < 0.01)) { - tmpvar_27 = wave; + tmpvar_150 = wave_111; } else { - tmpvar_27 = noiseWave; + tmpvar_150 = noiseWave_108; }; - highp float tmpvar_28; - tmpvar_28 = tmpvar_27; - wave = tmpvar_28; - highp float tmpvar_29; - tmpvar_29 = (wave + _Bias); - wave = tmpvar_29; - highp vec2 tmpvar_30; - tmpvar_30 = v.texcoord.xy; - o.uv = tmpvar_30; - highp vec4 tmpvar_31; - tmpvar_31.w = 1.0; - tmpvar_31.xyz = BBLocalPos.xyz; - highp vec4 tmpvar_32; - tmpvar_32 = (glstate_matrix_mvp * tmpvar_31); - o.pos = tmpvar_32; - highp float tmpvar_33; - tmpvar_33 = CalcFadeOutFactor (localDirLength); - highp vec4 tmpvar_34; - tmpvar_34 = (((tmpvar_33 * _Color) * _Multiplier) * wave); - o.color = tmpvar_34; - return o; + highp float tmpvar_151; + tmpvar_151 = tmpvar_150; + wave_111 = tmpvar_151; + highp float tmpvar_152; + tmpvar_152 = (wave_111 + _Bias); + wave_111 = tmpvar_152; + highp vec2 tmpvar_153; + tmpvar_153 = v_106.texcoord.xy; + o_107.uv = tmpvar_153; + highp vec4 tmpvar_154; + tmpvar_154.w = 1.0; + tmpvar_154.xyz = BBLocalPos_114.xyz; + highp vec4 tmpvar_155; + tmpvar_155 = (glstate_matrix_mvp * tmpvar_154); + o_107.pos = tmpvar_155; + highp float tmpvar_156; + tmpvar_156 = CalcFadeOutFactor (localDirLength_119); + highp vec4 tmpvar_157; + tmpvar_157 = (((tmpvar_156 * _Color) * _Multiplier) * wave_111); + o_107.color = tmpvar_157; + return o_107; } void main () { - appdata_full xlt_v; - v2f xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = _glesVertex.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - mediump vec3 tmpvar_5; - tmpvar_5 = _glesNormal.xyz; - mediump vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7 = _glesMultiTexCoord0.xyzw; - highp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9 = _glesMultiTexCoord1.xyzw; - highp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - lowp vec4 tmpvar_11; - tmpvar_11 = _glesColor.xyzw; - lowp vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f tmpvar_13; - tmpvar_13 = xlat_main (xlt_v); - v2f tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - highp vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - highp vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xlv_SV_POSITION = tmpvar_16; - highp vec2 tmpvar_17; - tmpvar_17 = xl_retval.uv.xy; - highp vec2 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_TEXCOORD0 = tmpvar_18; - lowp vec4 tmpvar_19; - tmpvar_19 = xl_retval.color.xyzw; - lowp vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - xlv_TEXCOORD1 = tmpvar_20; + appdata_full xlt_v_158; + v2f xl_retval_159; + highp vec4 tmpvar_160; + tmpvar_160 = _glesVertex.xyzw; + highp vec4 tmpvar_161; + tmpvar_161 = tmpvar_160; + xlt_v_158.vertex = tmpvar_161; + vec4 tmpvar_162; + tmpvar_162 = TANGENT.xyzw; + vec4 tmpvar_163; + tmpvar_163 = tmpvar_162; + xlt_v_158.tangent = tmpvar_163; + mediump vec3 tmpvar_164; + tmpvar_164 = _glesNormal.xyz; + mediump vec3 tmpvar_165; + tmpvar_165 = tmpvar_164; + xlt_v_158.normal = tmpvar_165; + highp vec4 tmpvar_166; + tmpvar_166 = _glesMultiTexCoord0.xyzw; + highp vec4 tmpvar_167; + tmpvar_167 = tmpvar_166; + xlt_v_158.texcoord = tmpvar_167; + highp vec4 tmpvar_168; + tmpvar_168 = _glesMultiTexCoord1.xyzw; + highp vec4 tmpvar_169; + tmpvar_169 = tmpvar_168; + xlt_v_158.texcoord1 = tmpvar_169; + lowp vec4 tmpvar_170; + tmpvar_170 = _glesColor.xyzw; + lowp vec4 tmpvar_171; + tmpvar_171 = tmpvar_170; + xlt_v_158.color = tmpvar_171; + v2f tmpvar_172; + tmpvar_172 = xlat_main (xlt_v_158); + v2f tmpvar_173; + tmpvar_173 = tmpvar_172; + xl_retval_159 = tmpvar_173; + highp vec4 tmpvar_174; + tmpvar_174 = xl_retval_159.pos.xyzw; + highp vec4 tmpvar_175; + tmpvar_175 = tmpvar_174; + xlv_SV_POSITION = tmpvar_175; + highp vec2 tmpvar_176; + tmpvar_176 = xl_retval_159.uv.xy; + highp vec2 tmpvar_177; + tmpvar_177 = tmpvar_176; + xlv_TEXCOORD0 = tmpvar_177; + lowp vec4 tmpvar_178; + tmpvar_178 = xl_retval_159.color.xyzw; + lowp vec4 tmpvar_179; + tmpvar_179 = tmpvar_178; + xlv_TEXCOORD1 = tmpvar_179; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES.txt index e18ec17c6..93cd8eaa2 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES.txt @@ -30,80 +30,86 @@ void main () tmpvar_1 = _glesNormal; tmpvar_2 = _glesColor; lowp vec4 tmpvar_3; - highp vec3 localDir; - highp vec3 tmpvar_4; - tmpvar_4.z = 0.0; - tmpvar_4.xy = (vec2(0.5, 0.5) - tmpvar_2.xy); + highp vec3 localDir_4; highp vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * _glesMultiTexCoord1.xyy); + tmpvar_5.z = 0.0; + tmpvar_5.xy = (vec2(0.5, 0.5) - tmpvar_2.xy); highp vec3 tmpvar_6; - tmpvar_6 = (_glesVertex.xyz + tmpvar_5); - highp vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = _WorldSpaceCameraPos; - highp vec3 tmpvar_8; - tmpvar_8 = ((_World2Object * tmpvar_7).xyz - tmpvar_6); - localDir = tmpvar_8; - localDir.y = mix (0.0, tmpvar_8.y, _VerticalBillboarding); - highp float tmpvar_9; - tmpvar_9 = length (localDir); - highp vec3 dir; - dir = (localDir / tmpvar_9); + tmpvar_6 = (tmpvar_5 * _glesMultiTexCoord1.xyy); + highp vec3 tmpvar_7; + tmpvar_7 = (_glesVertex.xyz + tmpvar_6); + highp vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos; + highp vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz - tmpvar_7); + localDir_4.xz = tmpvar_9.xz; + localDir_4.y = mix (0.0, tmpvar_9.y, _VerticalBillboarding); highp float tmpvar_10; - tmpvar_10 = abs (dir.y); - vec3 tmpvar_11; - if ((tmpvar_10 > 0.999)) { - tmpvar_11 = vec3(0.0, 0.0, 1.0); + tmpvar_10 = sqrt(dot (localDir_4, localDir_4)); + highp vec3 dir_11; + dir_11 = (localDir_4 / tmpvar_10); + highp float tmpvar_12; + tmpvar_12 = abs(dir_11.y); + vec3 tmpvar_13; + if ((tmpvar_12 > 0.999)) { + tmpvar_13 = vec3(0.0, 0.0, 1.0); } else { - tmpvar_11 = vec3(0.0, 1.0, 0.0); + tmpvar_13 = vec3(0.0, 1.0, 0.0); }; - highp vec3 tmpvar_12; - tmpvar_12 = normalize (cross (tmpvar_11, dir)); - highp vec3 tmpvar_13; - tmpvar_13 = cross (dir, tmpvar_12); - highp float tmpvar_14; - tmpvar_14 = min ((max ((tmpvar_9 - _SizeGrowStartDist), 0.0) / _SizeGrowEndDist), 1.0); + highp vec3 tmpvar_14; + tmpvar_14 = normalize(((tmpvar_13.yzx * dir_11.zxy) - (tmpvar_13.zxy * dir_11.yzx))); highp vec3 tmpvar_15; - tmpvar_15 = ((tmpvar_6 - ((tmpvar_12 * tmpvar_5.x) + (tmpvar_13 * tmpvar_5.y))) + (((tmpvar_12 * tmpvar_1.x) + (tmpvar_13 * tmpvar_1.y)) * (((tmpvar_14 * tmpvar_14) * _MaxGrowSize) * tmpvar_2.w))); + tmpvar_15 = ((dir_11.yzx * tmpvar_14.zxy) - (dir_11.zxy * tmpvar_14.yzx)); highp float tmpvar_16; - tmpvar_16 = (_Time.y + (_BlinkingTimeOffsScale * tmpvar_2.z)); - highp float y; - y = (_TimeOnDuration + _TimeOffDuration); - float tmpvar_17; - tmpvar_17 = (tmpvar_16 / y); - float tmpvar_18; - tmpvar_18 = (fract (abs (tmpvar_17)) * y); - float tmpvar_19; - if ((tmpvar_17 >= 0.0)) { - tmpvar_19 = tmpvar_18; - } else { - tmpvar_19 = -(tmpvar_18); - }; + tmpvar_16 = min ((max ((tmpvar_10 - _SizeGrowStartDist), 0.0) / _SizeGrowEndDist), 1.0); + highp vec3 tmpvar_17; + tmpvar_17 = ((tmpvar_7 - ((tmpvar_14 * tmpvar_6.x) + (tmpvar_15 * tmpvar_6.y))) + (((tmpvar_14 * tmpvar_1.x) + (tmpvar_15 * tmpvar_1.y)) * (((tmpvar_16 * tmpvar_16) * _MaxGrowSize) * tmpvar_2.w))); + highp float tmpvar_18; + tmpvar_18 = (_Time.y + (_BlinkingTimeOffsScale * tmpvar_2.z)); + highp float y_19; + y_19 = (_TimeOnDuration + _TimeOffDuration); highp float tmpvar_20; - tmpvar_20 = (smoothstep (0.0, (_TimeOnDuration * 0.25), tmpvar_19) * (1.0 - smoothstep ((_TimeOnDuration * 0.75), _TimeOnDuration, tmpvar_19))); + tmpvar_20 = (tmpvar_18 / y_19); highp float tmpvar_21; - tmpvar_21 = (tmpvar_16 * (6.28319 / _TimeOnDuration)); + tmpvar_21 = (fract(abs(tmpvar_20)) * y_19); highp float tmpvar_22; - tmpvar_22 = ((_NoiseAmount * (sin (tmpvar_21) * ((0.5 * cos (((tmpvar_21 * 0.6366) + 56.7272))) + 0.5))) + (1.0 - _NoiseAmount)); - highp float tmpvar_23; - if ((_NoiseAmount < 0.01)) { - tmpvar_23 = tmpvar_20; + if ((tmpvar_20 >= 0.0)) { + tmpvar_22 = tmpvar_21; } else { - tmpvar_23 = tmpvar_22; + tmpvar_22 = -(tmpvar_21); }; - highp vec4 tmpvar_24; - tmpvar_24.w = 1.0; - tmpvar_24.xyz = tmpvar_15; - highp float tmpvar_25; - tmpvar_25 = clamp ((tmpvar_9 / _FadeOutDistNear), 0.0, 1.0); - float tmpvar_26; - tmpvar_26 = (1.0 - clamp ((max ((tmpvar_9 - _FadeOutDistFar), 0.0) * 0.2), 0.0, 1.0)); + highp float t_23; + t_23 = max (min ((tmpvar_22 / (_TimeOnDuration * 0.25)), 1.0), 0.0); + highp float edge0_24; + edge0_24 = (_TimeOnDuration * 0.75); + highp float t_25; + t_25 = max (min (((tmpvar_22 - edge0_24) / (_TimeOnDuration - edge0_24)), 1.0), 0.0); + highp float tmpvar_26; + tmpvar_26 = ((t_23 * (t_23 * (3.0 - (2.0 * t_23)))) * (1.0 - (t_25 * (t_25 * (3.0 - (2.0 * t_25)))))); highp float tmpvar_27; - tmpvar_27 = (tmpvar_25 * tmpvar_25); - highp vec4 tmpvar_28; - tmpvar_28 = (((((tmpvar_27 * tmpvar_27) * (tmpvar_26 * tmpvar_26)) * _Color) * _Multiplier) * (tmpvar_23 + _Bias)); - tmpvar_3 = tmpvar_28; - xlv_SV_POSITION = (glstate_matrix_mvp * tmpvar_24); + tmpvar_27 = (tmpvar_18 * (6.28319 / _TimeOnDuration)); + highp float tmpvar_28; + tmpvar_28 = ((_NoiseAmount * (sin(tmpvar_27) * ((0.5 * cos(((tmpvar_27 * 0.6366) + 56.7272))) + 0.5))) + (1.0 - _NoiseAmount)); + highp float tmpvar_29; + if ((_NoiseAmount < 0.01)) { + tmpvar_29 = tmpvar_26; + } else { + tmpvar_29 = tmpvar_28; + }; + highp vec4 tmpvar_30; + tmpvar_30.w = 1.0; + tmpvar_30.xyz = tmpvar_17; + highp float tmpvar_31; + tmpvar_31 = clamp ((tmpvar_10 / _FadeOutDistNear), 0.0, 1.0); + highp float tmpvar_32; + tmpvar_32 = (1.0 - clamp ((max ((tmpvar_10 - _FadeOutDistFar), 0.0) * 0.2), 0.0, 1.0)); + highp float tmpvar_33; + tmpvar_33 = (tmpvar_31 * tmpvar_31); + highp vec4 tmpvar_34; + tmpvar_34 = (((((tmpvar_33 * tmpvar_33) * (tmpvar_32 * tmpvar_32)) * _Color) * _Multiplier) * (tmpvar_29 + _Bias)); + tmpvar_3 = tmpvar_34; + xlv_SV_POSITION = (glstate_matrix_mvp * tmpvar_30); xlv_TEXCOORD0 = _glesMultiTexCoord0.xy; xlv_TEXCOORD1 = tmpvar_3; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-in.txt b/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-in.txt new file mode 100644 index 000000000..2f1f39925 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-in.txt @@ -0,0 +1,10 @@ +varying vec4 var4; +varying float var1; +varying vec4 var4ok; + +void main() +{ + var4 = vec4(0.0); + var1 = 0.5; + var4ok = gl_Vertex; +} diff --git a/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-ir.txt new file mode 100644 index 000000000..a386d348a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-ir.txt @@ -0,0 +1,16 @@ +varying vec4 var4ok; +varying float var1; +varying vec4 var4; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = vec4(0.0, 0.0, 0.0, 0.0); + var4 = tmpvar_1; + float tmpvar_2; + tmpvar_2 = 0.5; + var1 = tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = gl_Vertex; + var4ok = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-out.txt b/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-out.txt new file mode 100644 index 000000000..4a1657f87 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/bug-varying-const-out.txt @@ -0,0 +1,10 @@ +varying vec4 var4ok; +varying float var1; +varying vec4 var4; +void main () +{ + var4 = vec4(0.0, 0.0, 0.0, 0.0); + var1 = 0.5; + var4ok = gl_Vertex; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-ir.txt deleted file mode 100644 index 0e67c7308..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-ir.txt +++ /dev/null @@ -1,301 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 vlight; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 shlight; - mat3 rotation; - vec3 binormal; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - worldN = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.x; - tmpvar_7[0].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.x; - tmpvar_7[0].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.x; - tmpvar_7[0].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.y; - tmpvar_7[1].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.y; - tmpvar_7[1].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.y; - tmpvar_7[1].z = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.tangent.z; - tmpvar_7[2].x = tmpvar_14; - float tmpvar_15; - tmpvar_15 = binormal.z; - tmpvar_7[2].y = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.normal.z; - tmpvar_7[2].z = tmpvar_16; - mat3 tmpvar_17; - tmpvar_17 = (tmpvar_7); - rotation = (tmpvar_17); - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.lightDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20); - o.viewDir = tmpvar_21; - vec4 tmpvar_22; - tmpvar_22.w = 1.0; - tmpvar_22.xyz = worldN.xyz; - vec3 tmpvar_23; - tmpvar_23 = ShadeSH9 (tmpvar_22); - vec3 tmpvar_24; - tmpvar_24 = tmpvar_23; - shlight = tmpvar_24; - vec3 tmpvar_25; - tmpvar_25 = shlight; - o.vlight = tmpvar_25; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-particle-ir.txt deleted file mode 100644 index 2b6a518cb..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-ir.txt +++ /dev/null @@ -1,72 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -struct appdata_t { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -varying vec2 xlv_TEXCOORD0; -varying vec4 xlv_COLOR; -uniform mat4 glstate_matrix_mvp; -uniform vec4 _MainTex_ST; -v2f xlat_main ( - in appdata_t v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.color = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.texcoord = tmpvar_3; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = xlat_main (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.vertex.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlv_COLOR = tmpvar_12; - vec2 tmpvar_13; - tmpvar_13 = xl_retval.texcoord.xy; - vec2 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_TEXCOORD0 = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-particle-irES.txt deleted file mode 100644 index 6da34f81e..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-irES.txt +++ /dev/null @@ -1,77 +0,0 @@ -struct v2f { - highp vec4 vertex; - lowp vec4 color; - mediump vec2 texcoord; -}; -struct appdata_t { - highp vec4 vertex; - lowp vec4 color; - highp vec2 texcoord; -}; -varying mediump vec2 xlv_TEXCOORD0; -varying lowp vec4 xlv_COLOR; -uniform highp mat4 glstate_matrix_mvp; -uniform highp vec4 _MainTex_ST; -attribute lowp vec4 _glesColor; -attribute highp vec4 _glesMultiTexCoord1; -attribute highp vec4 _glesMultiTexCoord0; -attribute mediump vec3 _glesNormal; -attribute highp vec4 _glesVertex; -v2f xlat_main ( - in appdata_t v -) -{ - v2f o; - highp vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.vertex = tmpvar_1; - lowp vec4 tmpvar_2; - tmpvar_2 = v.color; - o.color = tmpvar_2; - highp vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.texcoord = tmpvar_3; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = _glesVertex.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - lowp vec4 tmpvar_3; - tmpvar_3 = _glesColor.xyzw; - lowp vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - highp vec2 tmpvar_5; - tmpvar_5 = _glesMultiTexCoord0.xy; - highp vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = xlat_main (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9 = xl_retval.vertex.xyzw; - highp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - lowp vec4 tmpvar_11; - tmpvar_11 = xl_retval.color.xyzw; - lowp vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlv_COLOR = tmpvar_12; - mediump vec2 tmpvar_13; - tmpvar_13 = xl_retval.texcoord.xy; - mediump vec2 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_TEXCOORD0 = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-ir.txt deleted file mode 100644 index 7c24b07b0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-ir.txt +++ /dev/null @@ -1,96 +0,0 @@ -struct v2f { - vec4 pos; - vec4 uv; - vec3 ray; -}; -struct appdata { - vec4 vertex; - vec3 normal; -}; -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_TEXCOORD0; -uniform mat4 glstate_matrix_mvp; -uniform mat4 glstate_matrix_modelview0; -uniform vec4 _ProjectionParams; -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f xlat_main ( - in appdata v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((glstate_matrix_modelview0 * v.vertex).xyz * vec3(-1.0, -1.0, 1.0)); - o.ray = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(float((v.normal.z != 0.0))); - vec3 tmpvar_6; - tmpvar_6 = mix (o.ray, v.normal, tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.ray = tmpvar_7; - return o; -} - -void main () -{ - appdata xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = xlat_main (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.uv.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlv_TEXCOORD0 = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = xl_retval.ray.xyz; - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlv_TEXCOORD1 = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-irES.txt deleted file mode 100644 index 0620c2ea0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-irES.txt +++ /dev/null @@ -1,101 +0,0 @@ -struct v2f { - highp vec4 pos; - highp vec4 uv; - highp vec3 ray; -}; -struct appdata { - highp vec4 vertex; - highp vec3 normal; -}; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_TEXCOORD0; -uniform highp mat4 glstate_matrix_mvp; -uniform highp mat4 glstate_matrix_modelview0; -uniform highp vec4 _ProjectionParams; -attribute lowp vec4 _glesColor; -attribute highp vec4 _glesMultiTexCoord1; -attribute highp vec4 _glesMultiTexCoord0; -attribute mediump vec3 _glesNormal; -attribute highp vec4 _glesVertex; -vec4 ComputeScreenPos ( - in highp vec4 pos -) -{ - highp vec4 o; - highp vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - highp vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - highp vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f xlat_main ( - in appdata v -) -{ - v2f o; - highp vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.pos = tmpvar_1; - highp vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - highp vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.uv = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = ((glstate_matrix_modelview0 * v.vertex).xyz * vec3(-1.0, -1.0, 1.0)); - o.ray = tmpvar_4; - highp vec3 tmpvar_5; - tmpvar_5 = vec3(float((v.normal.z != 0.0))); - highp vec3 tmpvar_6; - tmpvar_6 = mix (o.ray, v.normal, tmpvar_5); - highp vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.ray = tmpvar_7; - return o; -} - -void main () -{ - appdata xlt_v; - v2f xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = _glesVertex.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - highp vec3 tmpvar_3; - tmpvar_3 = _glesNormal.xyz; - highp vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = xlat_main (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - highp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9 = xl_retval.uv.xyzw; - highp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlv_TEXCOORD0 = tmpvar_10; - highp vec3 tmpvar_11; - tmpvar_11 = xl_retval.ray.xyz; - highp vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlv_TEXCOORD1 = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-ir.txt deleted file mode 100644 index 624dfb076..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-ir.txt +++ /dev/null @@ -1,428 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec2 _LightCoord; -}; -varying vec2 xlv_TEXCOORD3; -varying vec3 xlv_TEXCOORD2; -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_COLOR0; -varying vec2 xlv_TEXCOORD0; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform mat4 glstate_matrix_mvp; -uniform mat4 glstate_matrix_invtrans_modelview0; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform vec4 _Time; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -vec4 Squash ( - in vec4 pos -) -{ - vec3 projectedVertex; - vec3 planeNormal; - vec3 tmpvar_1; - tmpvar_1 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = pos.xyz; - float tmpvar_3; - tmpvar_3 = dot (planeNormal, tmpvar_2); - vec3 tmpvar_4; - tmpvar_4 = (pos.xyz - ((tmpvar_3 + _SquashPlaneNormal.w) * planeNormal)); - projectedVertex = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(_SquashAmount); - vec3 tmpvar_6; - tmpvar_6 = mix (projectedVertex, pos.xyz, tmpvar_5); - vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = tmpvar_6.xyz; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; - return pos; -} - -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tangent.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = normal.xy.xy; - vec4 tmpvar_12; - tmpvar_12 = (pos + ((tmpvar_11 * mat) * isBillboard)); - pos = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = vec3(isBillboard); - vec3 tmpvar_14; - tmpvar_14 = mix (normal, norb, tmpvar_13); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - normal = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16.w = -1.0; - tmpvar_16.xyz = tanb.xyz; - vec4 tmpvar_17; - tmpvar_17 = vec4(isBillboard); - vec4 tmpvar_18; - tmpvar_18 = mix (tangent, tmpvar_16, tmpvar_17); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - tangent = tmpvar_19; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_Time.yy + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertLeaf ( - inout appdata_full v -) -{ - ExpandBillboard (glstate_matrix_invtrans_modelview0, v.vertex, v.normal, v.tangent); - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = vec3(1.0, 1.0, 1.0); - tmpvar_7.w = v.color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf xlat_main ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertLeaf (v); - vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_2.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = v.color; - o.lop_color = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * v.tangent.w); - binormal = tmpvar_5; - mat3 tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.tangent.x; - tmpvar_6[0].x = tmpvar_7; - float tmpvar_8; - tmpvar_8 = binormal.x; - tmpvar_6[0].y = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.normal.x; - tmpvar_6[0].z = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.y; - tmpvar_6[1].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.y; - tmpvar_6[1].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.y; - tmpvar_6[1].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.z; - tmpvar_6[2].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.z; - tmpvar_6[2].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.z; - tmpvar_6[2].z = tmpvar_15; - mat3 tmpvar_16; - tmpvar_16 = (tmpvar_6); - rotation = (tmpvar_16); - vec3 tmpvar_17; - tmpvar_17 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_18; - tmpvar_18 = (rotation * tmpvar_17); - o.lightDir = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_20; - tmpvar_20 = (rotation * tmpvar_19); - o.viewDir = tmpvar_20; - vec2 tmpvar_21; - tmpvar_21 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_21; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = xlat_main (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec2 tmpvar_17; - tmpvar_17 = xl_retval.hip_pack0.xy; - vec2 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_TEXCOORD0 = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.lop_color.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - xlv_COLOR0 = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = xl_retval.lightDir.xyz; - vec3 tmpvar_22; - tmpvar_22 = tmpvar_21; - xlv_TEXCOORD1 = tmpvar_22; - vec3 tmpvar_23; - tmpvar_23 = xl_retval.viewDir.xyz; - vec3 tmpvar_24; - tmpvar_24 = tmpvar_23; - xlv_TEXCOORD2 = tmpvar_24; - vec2 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xy; - vec2 tmpvar_26; - tmpvar_26 = tmpvar_25; - xlv_TEXCOORD3 = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-irES.txt deleted file mode 100644 index 56898d5da..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-irES.txt +++ /dev/null @@ -1,433 +0,0 @@ -struct appdata_full { - highp vec4 vertex; - highp vec4 tangent; - highp vec3 normal; - highp vec4 texcoord; - highp vec4 texcoord1; - highp vec4 color; -}; -struct v2f_surf { - highp vec4 pos; - highp vec2 hip_pack0; - highp vec4 lop_color; - highp vec3 lightDir; - highp vec3 viewDir; - highp vec2 _LightCoord; -}; -varying highp vec2 xlv_TEXCOORD3; -varying highp vec3 xlv_TEXCOORD2; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_COLOR0; -varying highp vec2 xlv_TEXCOORD0; -attribute vec4 TANGENT; -uniform highp vec4 unity_Scale; -uniform highp mat4 glstate_matrix_mvp; -uniform highp mat4 glstate_matrix_invtrans_modelview0; -uniform highp vec4 _WorldSpaceLightPos0; -uniform highp vec3 _WorldSpaceCameraPos; -uniform highp mat4 _World2Object; -uniform highp vec4 _Wind; -uniform highp vec4 _Time; -uniform highp vec4 _SquashPlaneNormal; -uniform highp float _SquashAmount; -uniform highp vec4 _Scale; -uniform highp mat4 _Object2World; -uniform highp vec4 _MainTex_ST; -uniform highp mat4 _LightMatrix0; -attribute lowp vec4 _glesColor; -attribute highp vec4 _glesMultiTexCoord1; -attribute highp vec4 _glesMultiTexCoord0; -attribute mediump vec3 _glesNormal; -attribute highp vec4 _glesVertex; -vec4 Squash ( - in highp vec4 pos -) -{ - highp vec3 projectedVertex; - highp vec3 planeNormal; - highp vec3 tmpvar_1; - tmpvar_1 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_1; - highp vec3 tmpvar_2; - tmpvar_2 = pos.xyz; - highp float tmpvar_3; - tmpvar_3 = dot (planeNormal, tmpvar_2); - highp vec3 tmpvar_4; - tmpvar_4 = (pos.xyz - ((tmpvar_3 + _SquashPlaneNormal.w) * planeNormal)); - projectedVertex = tmpvar_4; - highp vec3 tmpvar_5; - tmpvar_5 = vec3(_SquashAmount); - highp vec3 tmpvar_6; - tmpvar_6 = mix (projectedVertex, pos.xyz, tmpvar_5); - highp vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = tmpvar_6.xyz; - highp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; - return pos; -} - -void ExpandBillboard ( - in highp mat4 mat, - inout highp vec4 pos, - inout highp vec3 normal, - inout highp vec4 tangent -) -{ - highp vec3 tanb; - highp vec3 norb; - highp float isBillboard; - highp float tmpvar_1; - tmpvar_1 = abs (tangent.w); - highp float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - highp vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - highp vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - highp vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - highp vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tangent.xyz.xyz; - highp vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - highp vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - highp vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - highp vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = normal.xy.xy; - highp vec4 tmpvar_12; - tmpvar_12 = (pos + ((tmpvar_11 * mat) * isBillboard)); - pos = tmpvar_12; - highp vec3 tmpvar_13; - tmpvar_13 = vec3(isBillboard); - highp vec3 tmpvar_14; - tmpvar_14 = mix (normal, norb, tmpvar_13); - highp vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - normal = tmpvar_15; - highp vec4 tmpvar_16; - tmpvar_16.w = -1.0; - tmpvar_16.xyz = tanb.xyz; - highp vec4 tmpvar_17; - tmpvar_17 = vec4(isBillboard); - highp vec4 tmpvar_18; - tmpvar_18 = mix (tangent, tmpvar_16, tmpvar_17); - highp vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - tangent = tmpvar_19; -} - -vec4 TriangleWave ( - in highp vec4 x -) -{ - highp vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - highp vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in highp vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in highp vec4 x -) -{ - highp vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - highp vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in highp vec4 pos, - in highp vec3 normal, - in highp vec4 animParams -) -{ - highp vec3 bend; - highp vec2 vWavesSum; - highp vec4 vWaves; - highp vec2 vWavesIn; - highp float fVtxPhase; - highp float fBranchPhase; - highp float fObjPhase; - highp float fBranchAmp; - highp float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - highp float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - highp float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - highp float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - highp vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - highp float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - highp float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - highp vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - highp vec2 tmpvar_10; - tmpvar_10 = (_Time.yy + tmpvar_9); - vWavesIn = tmpvar_10; - highp vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - highp vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - highp vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - highp vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - highp vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - highp vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - highp float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - highp vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - highp vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertLeaf ( - inout appdata_full v -) -{ - ExpandBillboard (glstate_matrix_invtrans_modelview0, v.vertex, v.normal, v.tangent); - highp vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - highp vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - highp vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - highp vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - highp vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - highp vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7.xyz = vec3(1.0, 1.0, 1.0); - tmpvar_7.w = v.color.w; - highp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - highp vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - highp vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - highp vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - highp vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -vec3 ObjSpaceViewDir ( - in highp vec4 v -) -{ - highp vec3 objSpaceCameraPos; - highp vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - highp vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in highp vec4 v -) -{ - highp vec3 objSpaceLightPos; - highp vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf xlat_main ( - in appdata_full v -) -{ - highp mat3 rotation; - highp vec3 binormal; - v2f_surf o; - TreeVertLeaf (v); - highp vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.pos = tmpvar_1; - highp vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_2.xy.xy; - highp vec4 tmpvar_3; - tmpvar_3 = v.color; - o.lop_color = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = cross (v.normal, v.tangent.xyz); - highp vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * v.tangent.w); - binormal = tmpvar_5; - mat3 tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.tangent.x; - tmpvar_6[0].x = tmpvar_7; - float tmpvar_8; - tmpvar_8 = binormal.x; - tmpvar_6[0].y = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.normal.x; - tmpvar_6[0].z = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.y; - tmpvar_6[1].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.y; - tmpvar_6[1].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.y; - tmpvar_6[1].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.z; - tmpvar_6[2].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.z; - tmpvar_6[2].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.z; - tmpvar_6[2].z = tmpvar_15; - mat3 tmpvar_16; - tmpvar_16 = (tmpvar_6); - rotation = (tmpvar_16); - highp vec3 tmpvar_17; - tmpvar_17 = ObjSpaceLightDir (v.vertex); - highp vec3 tmpvar_18; - tmpvar_18 = (rotation * tmpvar_17); - o.lightDir = tmpvar_18; - highp vec3 tmpvar_19; - tmpvar_19 = ObjSpaceViewDir (v.vertex); - highp vec3 tmpvar_20; - tmpvar_20 = (rotation * tmpvar_19); - o.viewDir = tmpvar_20; - highp vec2 tmpvar_21; - tmpvar_21 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_21; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = _glesVertex.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - highp vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - highp vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - highp vec3 tmpvar_5; - tmpvar_5 = _glesNormal.xyz; - highp vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - highp vec4 tmpvar_7; - tmpvar_7 = _glesMultiTexCoord0.xyzw; - highp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9 = _glesMultiTexCoord1.xyzw; - highp vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - highp vec4 tmpvar_11; - tmpvar_11 = _glesColor.xyzw; - highp vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = xlat_main (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - highp vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - highp vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - highp vec2 tmpvar_17; - tmpvar_17 = xl_retval.hip_pack0.xy; - highp vec2 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_TEXCOORD0 = tmpvar_18; - highp vec4 tmpvar_19; - tmpvar_19 = xl_retval.lop_color.xyzw; - highp vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - xlv_COLOR0 = tmpvar_20; - highp vec3 tmpvar_21; - tmpvar_21 = xl_retval.lightDir.xyz; - highp vec3 tmpvar_22; - tmpvar_22 = tmpvar_21; - xlv_TEXCOORD1 = tmpvar_22; - highp vec3 tmpvar_23; - tmpvar_23 = xl_retval.viewDir.xyz; - highp vec3 tmpvar_24; - tmpvar_24 = tmpvar_23; - xlv_TEXCOORD2 = tmpvar_24; - highp vec2 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xy; - highp vec2 tmpvar_26; - tmpvar_26 = tmpvar_25; - xlv_TEXCOORD3 = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-out.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-out.txt deleted file mode 100644 index 088ebb942..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-out.txt +++ /dev/null @@ -1,100 +0,0 @@ -varying vec2 xlv_TEXCOORD3; -varying vec3 xlv_TEXCOORD2; -varying vec3 xlv_TEXCOORD1; -varying vec4 xlv_COLOR0; -varying vec2 xlv_TEXCOORD0; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform mat4 glstate_matrix_mvp; -uniform mat4 glstate_matrix_invtrans_modelview0; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform vec4 _Time; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - float tmpvar_3; - tmpvar_3 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = gl_Normal; - vec4 tmpvar_5; - tmpvar_5.w = 0.0; - tmpvar_5.xyz = TANGENT.xyz; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = gl_Normal.xy; - vec4 tmpvar_7; - tmpvar_7 = (gl_Vertex + ((tmpvar_6 * glstate_matrix_invtrans_modelview0) * tmpvar_3)); - vec3 tmpvar_8; - tmpvar_8 = mix (gl_Normal, normalize ((tmpvar_4 * glstate_matrix_invtrans_modelview0)).xyz, vec3(tmpvar_3)); - vec4 tmpvar_9; - tmpvar_9.w = -1.0; - tmpvar_9.xyz = normalize ((tmpvar_5 * glstate_matrix_invtrans_modelview0)).xyz; - vec4 tmpvar_10; - tmpvar_10 = mix (TANGENT, tmpvar_9, vec4(tmpvar_3)); - tmpvar_1 = tmpvar_7; - tmpvar_2 = tmpvar_10; - tmpvar_1.xyz = (tmpvar_7.xyz * _Scale.xyz); - vec4 pos_i0; - pos_i0 = tmpvar_1; - vec3 bend; - float tmpvar_11; - tmpvar_11 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_12; - tmpvar_12.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_11))); - tmpvar_12.y = tmpvar_11; - vec4 tmpvar_13; - tmpvar_13 = abs (((fract ((((fract (((_Time.yy + tmpvar_12).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_14; - tmpvar_14 = ((tmpvar_13 * tmpvar_13) * (3.0 - (2.0 * tmpvar_13))); - vec2 tmpvar_15; - tmpvar_15 = (tmpvar_14.xz + tmpvar_14.yw); - bend = ((gl_Color.y * 0.1) * tmpvar_8); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos_i0.xyz = (tmpvar_1.xyz + (((tmpvar_15.xyx * bend) + ((_Wind.xyz * tmpvar_15.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos_i0.xyz = (pos_i0.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_16; - tmpvar_16 = mix ((pos_i0.xyz - ((dot (_SquashPlaneNormal.xyz, pos_i0.xyz) + _SquashPlaneNormal.w) * _SquashPlaneNormal.xyz)), pos_i0.xyz, vec3(_SquashAmount)); - vec4 tmpvar_17; - tmpvar_17.w = 1.0; - tmpvar_17.xyz = tmpvar_16; - tmpvar_1 = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.xyz = vec3(1.0, 1.0, 1.0); - tmpvar_18.w = gl_Color.w; - vec3 tmpvar_19; - tmpvar_19 = normalize (tmpvar_8); - tmpvar_2.xyz = normalize (tmpvar_10.xyz); - vec3 tmpvar_20; - tmpvar_20 = (cross (tmpvar_19, tmpvar_2.xyz) * tmpvar_10.w); - mat3 tmpvar_21; - tmpvar_21[0].x = tmpvar_2.x; - tmpvar_21[0].y = tmpvar_20.x; - tmpvar_21[0].z = tmpvar_19.x; - tmpvar_21[1].x = tmpvar_2.y; - tmpvar_21[1].y = tmpvar_20.y; - tmpvar_21[1].z = tmpvar_19.y; - tmpvar_21[2].x = tmpvar_2.z; - tmpvar_21[2].y = tmpvar_20.z; - tmpvar_21[2].z = tmpvar_19.z; - vec4 tmpvar_22; - tmpvar_22.w = 1.0; - tmpvar_22.xyz = _WorldSpaceCameraPos; - gl_Position = (glstate_matrix_mvp * tmpvar_17); - xlv_TEXCOORD0 = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - xlv_COLOR0 = tmpvar_18; - xlv_TEXCOORD1 = (tmpvar_21 * (_World2Object * _WorldSpaceLightPos0).xyz); - xlv_TEXCOORD2 = (tmpvar_21 * (((_World2Object * tmpvar_22).xyz * unity_Scale.w) - tmpvar_16)); - xlv_TEXCOORD3 = (_LightMatrix0 * (_Object2World * tmpvar_17)).xy; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-outES.txt deleted file mode 100644 index efb2800bd..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-outES.txt +++ /dev/null @@ -1,109 +0,0 @@ -varying highp vec2 xlv_TEXCOORD3; -varying highp vec3 xlv_TEXCOORD2; -varying highp vec3 xlv_TEXCOORD1; -varying highp vec4 xlv_COLOR0; -varying highp vec2 xlv_TEXCOORD0; -attribute vec4 TANGENT; -uniform highp vec4 unity_Scale; -uniform highp mat4 glstate_matrix_mvp; -uniform highp mat4 glstate_matrix_invtrans_modelview0; -uniform highp vec4 _WorldSpaceLightPos0; -uniform highp vec3 _WorldSpaceCameraPos; -uniform highp mat4 _World2Object; -uniform highp vec4 _Wind; -uniform highp vec4 _Time; -uniform highp vec4 _SquashPlaneNormal; -uniform highp float _SquashAmount; -uniform highp vec4 _Scale; -uniform highp mat4 _Object2World; -uniform highp vec4 _MainTex_ST; -uniform highp mat4 _LightMatrix0; -attribute lowp vec4 _glesColor; -attribute highp vec4 _glesMultiTexCoord1; -attribute highp vec4 _glesMultiTexCoord0; -attribute mediump vec3 _glesNormal; -attribute highp vec4 _glesVertex; -void main () -{ - highp vec3 tmpvar_1; - tmpvar_1 = _glesNormal; - highp vec4 tmpvar_2; - tmpvar_2 = _glesColor; - highp vec4 tmpvar_3; - highp vec4 tmpvar_4; - highp float tmpvar_5; - tmpvar_5 = (1.0 - abs (TANGENT.w)); - highp vec4 tmpvar_6; - tmpvar_6.w = 0.0; - tmpvar_6.xyz = tmpvar_1; - highp vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = TANGENT.xyz; - highp vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = tmpvar_1.xy; - highp vec4 tmpvar_9; - tmpvar_9 = (_glesVertex + ((tmpvar_8 * glstate_matrix_invtrans_modelview0) * tmpvar_5)); - highp vec3 tmpvar_10; - tmpvar_10 = mix (tmpvar_1, normalize ((tmpvar_6 * glstate_matrix_invtrans_modelview0)).xyz, vec3(tmpvar_5)); - highp vec4 tmpvar_11; - tmpvar_11.w = -1.0; - tmpvar_11.xyz = normalize ((tmpvar_7 * glstate_matrix_invtrans_modelview0)).xyz; - highp vec4 tmpvar_12; - tmpvar_12 = mix (TANGENT, tmpvar_11, vec4(tmpvar_5)); - tmpvar_3 = tmpvar_9; - tmpvar_4 = tmpvar_12; - tmpvar_3.xyz = (tmpvar_9.xyz * _Scale.xyz); - highp vec4 pos_i0; - pos_i0 = tmpvar_3; - highp vec3 bend; - highp float tmpvar_13; - tmpvar_13 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + tmpvar_2.x); - highp vec2 tmpvar_14; - tmpvar_14.x = dot (tmpvar_3.xyz, vec3((tmpvar_2.y + tmpvar_13))); - tmpvar_14.y = tmpvar_13; - highp vec4 tmpvar_15; - tmpvar_15 = abs (((fract ((((fract (((_Time.yy + tmpvar_14).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - highp vec4 tmpvar_16; - tmpvar_16 = ((tmpvar_15 * tmpvar_15) * (3.0 - (2.0 * tmpvar_15))); - highp vec2 tmpvar_17; - tmpvar_17 = (tmpvar_16.xz + tmpvar_16.yw); - bend = ((tmpvar_2.y * 0.1) * tmpvar_10); - bend.y = (_glesMultiTexCoord1.y * 0.3); - pos_i0.xyz = (tmpvar_3.xyz + (((tmpvar_17.xyx * bend) + ((_Wind.xyz * tmpvar_17.y) * _glesMultiTexCoord1.y)) * _Wind.w)); - pos_i0.xyz = (pos_i0.xyz + (_glesMultiTexCoord1.x * _Wind.xyz)); - highp vec3 tmpvar_18; - tmpvar_18 = mix ((pos_i0.xyz - ((dot (_SquashPlaneNormal.xyz, pos_i0.xyz) + _SquashPlaneNormal.w) * _SquashPlaneNormal.xyz)), pos_i0.xyz, vec3(_SquashAmount)); - highp vec4 tmpvar_19; - tmpvar_19.w = 1.0; - tmpvar_19.xyz = tmpvar_18; - tmpvar_3 = tmpvar_19; - highp vec4 tmpvar_20; - tmpvar_20.xyz = vec3(1.0, 1.0, 1.0); - tmpvar_20.w = tmpvar_2.w; - highp vec3 tmpvar_21; - tmpvar_21 = normalize (tmpvar_10); - tmpvar_4.xyz = normalize (tmpvar_12.xyz); - highp vec3 tmpvar_22; - tmpvar_22 = (cross (tmpvar_21, tmpvar_4.xyz) * tmpvar_12.w); - highp mat3 tmpvar_23; - tmpvar_23[0].x = tmpvar_4.x; - tmpvar_23[0].y = tmpvar_22.x; - tmpvar_23[0].z = tmpvar_21.x; - tmpvar_23[1].x = tmpvar_4.y; - tmpvar_23[1].y = tmpvar_22.y; - tmpvar_23[1].z = tmpvar_21.y; - tmpvar_23[2].x = tmpvar_4.z; - tmpvar_23[2].y = tmpvar_22.z; - tmpvar_23[2].z = tmpvar_21.z; - highp vec4 tmpvar_24; - tmpvar_24.w = 1.0; - tmpvar_24.xyz = _WorldSpaceCameraPos; - gl_Position = (glstate_matrix_mvp * tmpvar_19); - xlv_TEXCOORD0 = ((_glesMultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - xlv_COLOR0 = tmpvar_20; - xlv_TEXCOORD1 = (tmpvar_23 * (_World2Object * _WorldSpaceLightPos0).xyz); - xlv_TEXCOORD2 = (tmpvar_23 * (((_World2Object * tmpvar_24).xyz * unity_Scale.w) - tmpvar_18)); - xlv_TEXCOORD3 = (_LightMatrix0 * (_Object2World * tmpvar_19)).xy; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-in.txt b/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-in.txt new file mode 100644 index 000000000..c6a44d276 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-in.txt @@ -0,0 +1,14 @@ +#version 140 + +uniform vec2 p; + +in vec4 position; +in vec4 icol; + +out vec4 col; + +void main (void) +{ + col = icol; + gl_Position = vec4(p, 0.0, 0.0) + position; +} diff --git a/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-ir.txt new file mode 100644 index 000000000..d56219332 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-ir.txt @@ -0,0 +1,18 @@ +#version 140 +out vec4 col; +in vec4 icol; +in vec4 position; +uniform vec2 p; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = icol; + col = tmpvar_1; + vec4 tmpvar_2; + tmpvar_2.zw = vec2(0.0, 0.0); + tmpvar_2.xy = p.xy; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_2 + position); + gl_Position = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-out.txt b/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-out.txt new file mode 100644 index 000000000..d651533ac --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/glsl140-basic-out.txt @@ -0,0 +1,14 @@ +#version 140 +out vec4 col; +in vec4 icol; +in vec4 position; +uniform vec2 p; +void main () +{ + col = icol; + vec4 tmpvar_1; + tmpvar_1.zw = vec2(0.0, 0.0); + tmpvar_1.xy = p; + gl_Position = (tmpvar_1 + position); +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-in.txt b/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-in.txt new file mode 100644 index 000000000..d3f4091ba --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-in.txt @@ -0,0 +1,26 @@ +#version 140 + +uniform vec2 p; + +in vec4 position; +in vec4 icol; + +out vec4 col; +flat out ivec4 colint; + +void main (void) +{ + gl_Position = vec4(p, 0.0, 0.0) + position; + + // integers & vertex ID & instance ID + colint.x = gl_VertexID; + colint.y = gl_InstanceID ^ gl_InstanceID; + colint.z = gl_InstanceID << 2; + colint.w = colint.x + colint.y; + + // new built-ins + col.x = trunc(position.x); + col.y = round(position.y); + col.z = roundEven(position.y); + col.w = cosh(position.w); +} diff --git a/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-ir.txt new file mode 100644 index 000000000..edcd13b87 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-ir.txt @@ -0,0 +1,48 @@ +#version 140 +flat out ivec4 colint; +out vec4 col; +in vec4 icol; +in vec4 position; +uniform vec2 p; +void main () +{ + vec4 tmpvar_1; + tmpvar_1.zw = vec2(0.0, 0.0); + tmpvar_1.xy = p.xy; + vec4 tmpvar_2; + tmpvar_2 = (tmpvar_1 + position); + gl_Position = tmpvar_2; + int tmpvar_3; + tmpvar_3 = gl_VertexID; + colint.x = tmpvar_3; + int tmpvar_4; + tmpvar_4 = (gl_InstanceID ^ gl_InstanceID); + colint.y = ivec2(tmpvar_4).y; + int tmpvar_5; + tmpvar_5 = (gl_InstanceID << 2); + colint.z = ivec3(tmpvar_5).z; + int tmpvar_6; + tmpvar_6 = (colint.x + colint.y); + colint.w = ivec4(tmpvar_6).w; + float tmpvar_7; + tmpvar_7 = trunc (position.x); + float tmpvar_8; + tmpvar_8 = tmpvar_7; + col.x = tmpvar_8; + float tmpvar_9; + tmpvar_9 = round (position.y); + float tmpvar_10; + tmpvar_10 = tmpvar_9; + col.y = vec2(tmpvar_10).y; + float tmpvar_11; + tmpvar_11 = roundEven (position.y); + float tmpvar_12; + tmpvar_12 = tmpvar_11; + col.z = vec3(tmpvar_12).z; + float tmpvar_13; + tmpvar_13 = cosh (position.w); + float tmpvar_14; + tmpvar_14 = tmpvar_13; + col.w = vec4(tmpvar_14).w; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-out.txt b/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-out.txt new file mode 100644 index 000000000..36fe7178f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/glsl140-integers-out.txt @@ -0,0 +1,21 @@ +#version 140 +flat out ivec4 colint; +out vec4 col; +in vec4 position; +uniform vec2 p; +void main () +{ + vec4 tmpvar_1; + tmpvar_1.zw = vec2(0.0, 0.0); + tmpvar_1.xy = p; + gl_Position = (tmpvar_1 + position); + colint.x = gl_VertexID; + colint.y = (gl_InstanceID ^ gl_InstanceID); + colint.z = (gl_InstanceID << 2); + colint.w = (gl_VertexID + colint.y); + col.x = trunc(position.x); + col.y = roundEven(position.y); + col.z = roundEven(position.y); + col.w = (0.5 * (exp(position.w) + exp(-(position.w)))); +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-for-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-for-ir.txt index c4f5c5fb1..5c435a2a0 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/loops-for-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-for-ir.txt @@ -14,138 +14,138 @@ uniform mat4 UNITY_MATRIX_MVP; uniform mat4 UNITY_MATRIX_MV; uniform mat4 UNITY_MATRIX_IT_MV; mat3 xll_constructMat3 ( - in mat4 m + in mat4 m_1 ) { - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; + tmpvar_2 = m_1[0].xyz; vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; vec3 tmpvar_6; tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; + tmpvar_5[0] = tmpvar_6; vec3 tmpvar_7; tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; } vec3 ShadeMyVertexLights ( - in vec4 vertex, - in vec3 normal + in vec4 vertex_9, + in vec3 normal_10 ) { - float diff; - float atten; - float lengthSq; - vec3 toLight; - int i; - vec3 lightColor; - vec3 viewN; - vec3 viewpos; - vec3 tmpvar_1; - tmpvar_1 = vec3(0.0, 0.0, 0.0); - lightColor = tmpvar_1; - int tmpvar_2; - tmpvar_2 = 0; - i = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (UNITY_MATRIX_MV * vertex).xyz; - viewpos = tmpvar_3; - mat3 tmpvar_4; - tmpvar_4 = (xll_constructMat3 (UNITY_MATRIX_IT_MV)); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * normal); - viewN = tmpvar_5; + float diff_11; + float atten_12; + float lengthSq_13; + vec3 toLight_14; + int i_15; + vec3 lightColor_16; + vec3 viewN_17; + vec3 viewpos_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(0.0, 0.0, 0.0); + lightColor_16 = tmpvar_19; + int tmpvar_20; + tmpvar_20 = 0; + i_15 = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = (UNITY_MATRIX_MV * vertex_9).xyz; + viewpos_18 = tmpvar_21; + mat3 tmpvar_22; + tmpvar_22 = xll_constructMat3 (UNITY_MATRIX_IT_MV); + vec3 tmpvar_23; + tmpvar_23 = (tmpvar_22 * normal_10); + viewN_17 = tmpvar_23; while (true) { - if (!((i < 2))) { + if (!((i_15 < 2))) { break; }; - vec3 tmpvar_6; - tmpvar_6 = (unity_LightPosition[i].xyz - viewpos.xyz); - toLight = tmpvar_6; - float tmpvar_7; - tmpvar_7 = dot (toLight, toLight); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - lengthSq = tmpvar_8; - float tmpvar_9; - tmpvar_9 = (1.0 / (1.0 + (lengthSq * unity_LightAtten[i].z))); - atten = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = normalize (toLight); - float tmpvar_11; - tmpvar_11 = dot (viewN, tmpvar_10); - float tmpvar_12; - tmpvar_12 = max (0.0, tmpvar_11); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - diff = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = (lightColor + (unity_LightColor[i].xyz * (diff * atten))); - lightColor = tmpvar_14; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_15; - tmpvar_15 = (i + 1); - i = tmpvar_15; + vec3 tmpvar_24; + tmpvar_24 = (unity_LightPosition[i_15].xyz - viewpos_18.xyz); + toLight_14 = tmpvar_24; + float tmpvar_25; + tmpvar_25 = dot (toLight_14, toLight_14); + float tmpvar_26; + tmpvar_26 = tmpvar_25; + lengthSq_13 = tmpvar_26; + float tmpvar_27; + tmpvar_27 = (1.0 / (1.0 + (lengthSq_13 * unity_LightAtten[i_15].z))); + atten_12 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = normalize (toLight_14); + float tmpvar_29; + tmpvar_29 = dot (viewN_17, tmpvar_28); + float tmpvar_30; + tmpvar_30 = max (0.0, tmpvar_29); + float tmpvar_31; + tmpvar_31 = tmpvar_30; + diff_11 = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = (lightColor_16 + (unity_LightColor[i_15].xyz * (diff_11 * atten_12))); + lightColor_16 = tmpvar_32; + int _post_incdec_tmp_33; + _post_incdec_tmp_33 = i_15; + int tmpvar_34; + tmpvar_34 = (i_15 + 1); + i_15 = tmpvar_34; }; - return (lightColor * 2.0); + return (lightColor_16 * 2.0); } v2f xlat_main ( - in appdata v + in appdata v_35 ) { - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (UNITY_MATRIX_MVP * v.vertex); - o.pos = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ShadeMyVertexLights (v.vertex, v.normal); - vec4 tmpvar_3; - tmpvar_3.w = 1.0; - tmpvar_3.xyz = tmpvar_2.xyz; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.color = tmpvar_4; - return o; + v2f o_36; + vec4 tmpvar_37; + tmpvar_37 = (UNITY_MATRIX_MVP * v_35.vertex); + o_36.pos = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = ShadeMyVertexLights (v_35.vertex, v_35.normal); + vec4 tmpvar_39; + tmpvar_39.w = 1.0; + tmpvar_39.xyz = tmpvar_38.xyz; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + o_36.color = tmpvar_40; + return o_36; } void main () { - appdata xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = xlat_main (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.color.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlv_TEXCOORD0 = tmpvar_10; + appdata xlt_v_41; + v2f xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Vertex.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_41.vertex = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_Normal.xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_41.normal = tmpvar_46; + v2f tmpvar_47; + tmpvar_47 = xlat_main (xlt_v_41); + v2f tmpvar_48; + tmpvar_48 = tmpvar_47; + xl_retval_42 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = xl_retval_42.pos.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_Position = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_42.color.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlv_TEXCOORD0 = tmpvar_52; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-for-out.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-for-out.txt index ab2bda1d5..eadb7c1ee 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/loops-for-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-for-out.txt @@ -7,25 +7,25 @@ uniform mat4 UNITY_MATRIX_MV; uniform mat4 UNITY_MATRIX_IT_MV; void main () { - vec3 lightColor; - vec3 viewN; - vec3 viewpos; - viewpos = (UNITY_MATRIX_MV * gl_Vertex).xyz; - mat3 tmpvar_1; - tmpvar_1[0] = UNITY_MATRIX_IT_MV[0].xyz; - tmpvar_1[1] = UNITY_MATRIX_IT_MV[1].xyz; - tmpvar_1[2] = UNITY_MATRIX_IT_MV[2].xyz; - viewN = (tmpvar_1 * gl_Normal); - vec3 tmpvar_2; - tmpvar_2 = (unity_LightPosition[0].xyz - viewpos); - lightColor = (unity_LightColor[0].xyz * (max (0.0, dot (viewN, normalize (tmpvar_2))) * (1.0/((1.0 + (dot (tmpvar_2, tmpvar_2) * unity_LightAtten[0].z)))))); - vec3 tmpvar_3; - tmpvar_3 = (unity_LightPosition[1].xyz - viewpos); - lightColor = (lightColor + (unity_LightColor[1].xyz * (max (0.0, dot (viewN, normalize (tmpvar_3))) * (1.0/((1.0 + (dot (tmpvar_3, tmpvar_3) * unity_LightAtten[1].z))))))); - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = (lightColor * 2.0); + vec3 lightColor_1; + vec3 viewN_2; + vec3 viewpos_3; + viewpos_3 = (UNITY_MATRIX_MV * gl_Vertex).xyz; + mat3 tmpvar_4; + tmpvar_4[0] = UNITY_MATRIX_IT_MV[0].xyz; + tmpvar_4[1] = UNITY_MATRIX_IT_MV[1].xyz; + tmpvar_4[2] = UNITY_MATRIX_IT_MV[2].xyz; + viewN_2 = (tmpvar_4 * gl_Normal); + vec3 tmpvar_5; + tmpvar_5 = (unity_LightPosition[0].xyz - viewpos_3); + lightColor_1 = (unity_LightColor[0].xyz * (max (0.0, dot (viewN_2, normalize(tmpvar_5))) * (1.0/((1.0 + (dot (tmpvar_5, tmpvar_5) * unity_LightAtten[0].z)))))); + vec3 tmpvar_6; + tmpvar_6 = (unity_LightPosition[1].xyz - viewpos_3); + lightColor_1 = (lightColor_1 + (unity_LightColor[1].xyz * (max (0.0, dot (viewN_2, normalize(tmpvar_6))) * (1.0/((1.0 + (dot (tmpvar_6, tmpvar_6) * unity_LightAtten[1].z))))))); + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = (lightColor_1 * 2.0); gl_Position = (UNITY_MATRIX_MVP * gl_Vertex); - xlv_TEXCOORD0 = tmpvar_4; + xlv_TEXCOORD0 = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-ir.txt index 6fef85024..3be422d75 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-ir.txt @@ -2,30 +2,30 @@ varying vec4 varColor; uniform vec4 uniColors[4]; void main () { - int i; - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex; - gl_Position = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.0, 0.0, 0.0, 0.0); - col = tmpvar_2; - int tmpvar_3; - tmpvar_3 = 0; - i = tmpvar_3; + int i_1; + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = gl_Vertex; + gl_Position = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); + col_2 = tmpvar_4; + int tmpvar_5; + tmpvar_5 = 0; + i_1 = tmpvar_5; while (true) { - if (!((i < 4))) { + if (!((i_1 < 4))) { break; }; - vec4 tmpvar_4; - tmpvar_4 = (col + uniColors[i]); - col = tmpvar_4; - int tmpvar_5; - tmpvar_5 = (i + 1); - i = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (col_2 + uniColors[i_1]); + col_2 = tmpvar_6; + int tmpvar_7; + tmpvar_7 = (i_1 + 1); + i_1 = tmpvar_7; }; - vec4 tmpvar_6; - tmpvar_6 = col; - varColor = tmpvar_6; + vec4 tmpvar_8; + tmpvar_8 = col_2; + varColor = tmpvar_8; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-out.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-out.txt index 3058fbb9f..668f0df24 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forsimple-out.txt @@ -2,12 +2,12 @@ varying vec4 varColor; uniform vec4 uniColors[4]; void main () { - vec4 col; + vec4 col_1; gl_Position = gl_Vertex; - col = uniColors[0]; - col = (col + uniColors[1]); - col = (col + uniColors[2]); - col = (col + uniColors[3]); - varColor = col; + col_1 = uniColors[0]; + col_1 = (col_1 + uniColors[1]); + col_1 = (col_1 + uniColors[2]); + col_1 = (col_1 + uniColors[3]); + varColor = col_1; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-inES.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-inES.txt new file mode 100644 index 000000000..d335ed21c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-inES.txt @@ -0,0 +1,71 @@ + +#line 14 +struct v2f { + mediump vec4 pos; + mediump vec4 color; +}; +#line 9 +struct appdata { + highp vec4 vertex; + highp vec3 normal; +}; +uniform highp mat4 UNITY_MATRIX_MVP; +uniform highp vec4 unity_LightAtten[4]; +uniform highp vec4 unity_LightColor[4]; +v2f xlat_main( in appdata v ); +#line 35 +v2f xlat_main( in appdata v ) { + v2f o; + highp int i = 0; + highp int i_1 = 0; + highp int j = 3; + highp int i_2 = 0; + highp vec4 l; + highp int i_3 = 0; + highp vec4 l_1; + highp int k = 1; + highp int z; + #line 38 + o.pos = (UNITY_MATRIX_MVP * v.vertex); + o.color = vec4( 0.00000); + for ( ; (i < 2); (++i)) { + o.color += unity_LightColor[i]; + } + #line 45 + for ( ; (i_1 < 4); (++i_1)) { + o.color += unity_LightColor[i_1]; + } + #line 49 + for ( ; (j >= 0); j = (j - 1)) { + o.color += unity_LightColor[j]; + } + #line 53 + for ( ; (i_2 < 2); (++i_2)) { + l = (unity_LightColor[i_2] * unity_LightAtten[i_2].x); + o.color += l; + } + #line 59 + for ( ; (i_3 < 2); (++i_3)) { + l_1 = (unity_LightColor[i_3] * unity_LightAtten[i_3].z); + o.color += l_1; + } + #line 65 + while ( (k < 3) ) { + o.color += unity_LightColor[k].x; + #line 69 + z = (k + 1); + k = z; + } + #line 73 + return o; +} +varying mediump vec4 xlv_TEXCOORD0; +void main() { + v2f xl_retval; + appdata xlt_v; + xlt_v.vertex = vec4( gl_Vertex); + xlt_v.normal = vec3( gl_Normal); + xl_retval = xlat_main( xlt_v); + gl_Position = vec4( xl_retval.pos); + xlv_TEXCOORD0 = vec4( xl_retval.color); +} diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-irES.txt new file mode 100644 index 000000000..31db1ab8e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-irES.txt @@ -0,0 +1,164 @@ +struct v2f { + mediump vec4 pos; + mediump vec4 color; +}; +struct appdata { + highp vec4 vertex; + highp vec3 normal; +}; +varying mediump vec4 xlv_TEXCOORD0; +uniform highp vec4 unity_LightColor[4]; +uniform highp vec4 unity_LightAtten[4]; +uniform highp mat4 UNITY_MATRIX_MVP; +attribute lowp vec4 _glesColor; +attribute highp vec4 _glesMultiTexCoord1; +attribute highp vec4 _glesMultiTexCoord0; +attribute mediump vec3 _glesNormal; +attribute highp vec4 _glesVertex; +v2f xlat_main ( + in appdata v_1 +) +{ + int z_2; + int k_3; + highp vec4 l_1_4; + int i_3_5; + highp vec4 l_6; + int i_2_7; + int j_8; + int i_1_9; + int i_10; + v2f o_11; + int tmpvar_12; + tmpvar_12 = 0; + i_10 = tmpvar_12; + int tmpvar_13; + tmpvar_13 = 0; + i_1_9 = tmpvar_13; + int tmpvar_14; + tmpvar_14 = 3; + j_8 = tmpvar_14; + int tmpvar_15; + tmpvar_15 = 0; + i_2_7 = tmpvar_15; + int tmpvar_16; + tmpvar_16 = 0; + i_3_5 = tmpvar_16; + int tmpvar_17; + tmpvar_17 = 1; + k_3 = tmpvar_17; + highp vec4 tmpvar_18; + tmpvar_18 = (UNITY_MATRIX_MVP * v_1.vertex); + o_11.pos = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = vec4(0.0, 0.0, 0.0, 0.0); + o_11.color = tmpvar_19; + while (true) { + if (!((i_10 < 2))) { + break; + }; + highp vec4 tmpvar_20; + tmpvar_20 = (o_11.color + unity_LightColor[i_10]); + o_11.color = tmpvar_20; + int tmpvar_21; + tmpvar_21 = (i_10 + 1); + i_10 = tmpvar_21; + }; + while (true) { + if (!((i_1_9 < 4))) { + break; + }; + highp vec4 tmpvar_22; + tmpvar_22 = (o_11.color + unity_LightColor[i_1_9]); + o_11.color = tmpvar_22; + int tmpvar_23; + tmpvar_23 = (i_1_9 + 1); + i_1_9 = tmpvar_23; + }; + while (true) { + if (!((j_8 >= 0))) { + break; + }; + highp vec4 tmpvar_24; + tmpvar_24 = (o_11.color + unity_LightColor[j_8]); + o_11.color = tmpvar_24; + int tmpvar_25; + tmpvar_25 = (j_8 - 1); + j_8 = tmpvar_25; + }; + while (true) { + if (!((i_2_7 < 2))) { + break; + }; + highp vec4 tmpvar_26; + tmpvar_26 = (unity_LightColor[i_2_7] * unity_LightAtten[i_2_7].x); + l_6 = tmpvar_26; + highp vec4 tmpvar_27; + tmpvar_27 = (o_11.color + l_6); + o_11.color = tmpvar_27; + int tmpvar_28; + tmpvar_28 = (i_2_7 + 1); + i_2_7 = tmpvar_28; + }; + while (true) { + if (!((i_3_5 < 2))) { + break; + }; + highp vec4 tmpvar_29; + tmpvar_29 = (unity_LightColor[i_3_5] * unity_LightAtten[i_3_5].z); + l_1_4 = tmpvar_29; + highp vec4 tmpvar_30; + tmpvar_30 = (o_11.color + l_1_4); + o_11.color = tmpvar_30; + int tmpvar_31; + tmpvar_31 = (i_3_5 + 1); + i_3_5 = tmpvar_31; + }; + while (true) { + if (!((k_3 < 3))) { + break; + }; + highp vec4 tmpvar_32; + tmpvar_32 = (o_11.color + unity_LightColor[k_3].x); + o_11.color = tmpvar_32; + int tmpvar_33; + tmpvar_33 = (k_3 + 1); + z_2 = tmpvar_33; + int tmpvar_34; + tmpvar_34 = z_2; + k_3 = tmpvar_34; + }; + return o_11; +} + +void main () +{ + appdata xlt_v_35; + v2f xl_retval_36; + highp vec4 tmpvar_37; + tmpvar_37 = _glesVertex.xyzw; + highp vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_35.vertex = tmpvar_38; + mediump vec3 tmpvar_39; + tmpvar_39 = _glesNormal.xyz; + mediump vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_35.normal = tmpvar_40; + v2f tmpvar_41; + tmpvar_41 = xlat_main (xlt_v_35); + v2f tmpvar_42; + tmpvar_42 = tmpvar_41; + xl_retval_36 = tmpvar_42; + mediump vec4 tmpvar_43; + tmpvar_43 = xl_retval_36.pos.xyzw; + mediump vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_Position = tmpvar_44; + mediump vec4 tmpvar_45; + tmpvar_45 = xl_retval_36.color.xyzw; + mediump vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlv_TEXCOORD0 = tmpvar_46; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES.txt new file mode 100644 index 000000000..6989523d9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES.txt @@ -0,0 +1,64 @@ +varying mediump vec4 xlv_TEXCOORD0; +uniform highp vec4 unity_LightColor[4]; +uniform highp vec4 unity_LightAtten[4]; +uniform highp mat4 UNITY_MATRIX_MVP; +attribute highp vec4 _glesVertex; +void main () +{ + mediump vec4 tmpvar_1; + mediump vec4 tmpvar_2; + highp vec4 tmpvar_3; + tmpvar_3 = (UNITY_MATRIX_MVP * _glesVertex); + tmpvar_1 = tmpvar_3; + highp vec4 tmpvar_4; + tmpvar_4 = unity_LightColor[0]; + tmpvar_2 = tmpvar_4; + highp vec4 tmpvar_5; + tmpvar_5 = (tmpvar_2 + unity_LightColor[1]); + tmpvar_2 = tmpvar_5; + highp vec4 tmpvar_6; + tmpvar_6 = (tmpvar_2 + unity_LightColor[0]); + tmpvar_2 = tmpvar_6; + highp vec4 tmpvar_7; + tmpvar_7 = (tmpvar_2 + unity_LightColor[1]); + tmpvar_2 = tmpvar_7; + highp vec4 tmpvar_8; + tmpvar_8 = (tmpvar_2 + unity_LightColor[2]); + tmpvar_2 = tmpvar_8; + highp vec4 tmpvar_9; + tmpvar_9 = (tmpvar_2 + unity_LightColor[3]); + tmpvar_2 = tmpvar_9; + highp vec4 tmpvar_10; + tmpvar_10 = (tmpvar_2 + unity_LightColor[3]); + tmpvar_2 = tmpvar_10; + highp vec4 tmpvar_11; + tmpvar_11 = (tmpvar_2 + unity_LightColor[2]); + tmpvar_2 = tmpvar_11; + highp vec4 tmpvar_12; + tmpvar_12 = (tmpvar_2 + unity_LightColor[1]); + tmpvar_2 = tmpvar_12; + highp vec4 tmpvar_13; + tmpvar_13 = (tmpvar_2 + unity_LightColor[0]); + tmpvar_2 = tmpvar_13; + highp vec4 tmpvar_14; + tmpvar_14 = (tmpvar_2 + (unity_LightColor[0] * unity_LightAtten[0].x)); + tmpvar_2 = tmpvar_14; + highp vec4 tmpvar_15; + tmpvar_15 = (tmpvar_2 + (unity_LightColor[1] * unity_LightAtten[1].x)); + tmpvar_2 = tmpvar_15; + highp vec4 tmpvar_16; + tmpvar_16 = (tmpvar_2 + (unity_LightColor[0] * unity_LightAtten[0].z)); + tmpvar_2 = tmpvar_16; + highp vec4 tmpvar_17; + tmpvar_17 = (tmpvar_2 + (unity_LightColor[1] * unity_LightAtten[1].z)); + tmpvar_2 = tmpvar_17; + highp vec4 tmpvar_18; + tmpvar_18 = (tmpvar_2 + unity_LightColor[1].x); + tmpvar_2 = tmpvar_18; + highp vec4 tmpvar_19; + tmpvar_19 = (tmpvar_2 + unity_LightColor[2].x); + tmpvar_2 = tmpvar_19; + gl_Position = tmpvar_1; + xlv_TEXCOORD0 = tmpvar_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-ir.txt index 113552d2f..86f8c0306 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-ir.txt @@ -2,32 +2,32 @@ varying vec4 varColor; uniform vec4 uniColors[4]; void main () { - int i; - vec4 col; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex; - gl_Position = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.0, 0.0, 0.0, 0.0); - col = tmpvar_2; - int tmpvar_3; - tmpvar_3 = 0; - i = tmpvar_3; + int i_1; + vec4 col_2; + vec4 tmpvar_3; + tmpvar_3 = gl_Vertex; + gl_Position = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); + col_2 = tmpvar_4; + int tmpvar_5; + tmpvar_5 = 0; + i_1 = tmpvar_5; while (true) { - if (!((i < 4))) { + if (!((i_1 < 4))) { break; }; - vec4 tmpvar_4; - tmpvar_4 = max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[i]); - vec4 tmpvar_5; - tmpvar_5 = (col + tmpvar_4); - col = tmpvar_5; - int tmpvar_6; - tmpvar_6 = (i + 1); - i = tmpvar_6; + vec4 tmpvar_6; + tmpvar_6 = max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[i_1]); + vec4 tmpvar_7; + tmpvar_7 = (col_2 + tmpvar_6); + col_2 = tmpvar_7; + int tmpvar_8; + tmpvar_8 = (i_1 + 1); + i_1 = tmpvar_8; }; - vec4 tmpvar_7; - tmpvar_7 = col; - varColor = tmpvar_7; + vec4 tmpvar_9; + tmpvar_9 = col_2; + varColor = tmpvar_9; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-out.txt b/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-out.txt index f98c7df20..6ad258137 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/loops-forwithcalls-out.txt @@ -2,12 +2,12 @@ varying vec4 varColor; uniform vec4 uniColors[4]; void main () { - vec4 col; + vec4 col_1; gl_Position = gl_Vertex; - col = max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[0]); - col = (col + max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[1])); - col = (col + max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[2])); - col = (col + max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[3])); - varColor = col; + col_1 = max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[0]); + col_1 = (col_1 + max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[1])); + col_1 = (col_1 + max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[2])); + col_1 = (col_1 + max (vec4(0.0, 0.0, 0.0, 0.0), uniColors[3])); + varColor = col_1; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-ir.txt index 96120b37c..4badf65ed 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-ir.txt @@ -1,55 +1,55 @@ float foo ( - in float a, - in float b, - in float c + in float a_1, + in float b_2, + in float c_3 ) { - return ((a + b) + c); + return ((a_1 + b_2) + c_3); } float bar ( - in float a, - in float b + in float a_4, + in float b_5 ) { - float c; - float tmpvar_1; - tmpvar_1 = (a * b); - c = tmpvar_1; - float tmpvar_2; - tmpvar_2 = foo (a, b, c); - return tmpvar_2; + float c_6; + float tmpvar_7; + tmpvar_7 = (a_4 * b_5); + c_6 = tmpvar_7; + float tmpvar_8; + tmpvar_8 = foo (a_4, b_5, c_6); + return tmpvar_8; } float har ( - in float a + in float a_9 ) { - float c; - float b; - float tmpvar_1; - tmpvar_1 = sqrt (a); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - b = tmpvar_2; - float tmpvar_3; - tmpvar_3 = sqrt (b); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - c = tmpvar_4; - float tmpvar_5; - tmpvar_5 = bar (a, b); - return (tmpvar_5 + c); + float c_10; + float b_11; + float tmpvar_12; + tmpvar_12 = sqrt (a_9); + float tmpvar_13; + tmpvar_13 = tmpvar_12; + b_11 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = sqrt (b_11); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + c_10 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = bar (a_9, b_11); + return (tmpvar_16 + c_10); } void main () { - float tmpvar_1; - tmpvar_1 = har (gl_Vertex.x); - vec4 tmpvar_2; - tmpvar_2 = vec4(tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - gl_Position = tmpvar_3; + float tmpvar_17; + tmpvar_17 = har (gl_Vertex.x); + vec4 tmpvar_18; + tmpvar_18 = vec4(tmpvar_17); + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_Position = tmpvar_19; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-out.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-out.txt index 4a6ac77e5..ca8b1aaf9 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-inline-varnames-out.txt @@ -1,7 +1,7 @@ void main () { float tmpvar_1; - tmpvar_1 = sqrt (gl_Vertex.x); - gl_Position = vec4((((gl_Vertex.x + tmpvar_1) + (gl_Vertex.x * tmpvar_1)) + sqrt (tmpvar_1))); + tmpvar_1 = sqrt(gl_Vertex.x); + gl_Position = vec4((((gl_Vertex.x + tmpvar_1) + (gl_Vertex.x * tmpvar_1)) + sqrt(tmpvar_1))); } diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-constr-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-constr-ir.txt index 3e1bdc24a..565e42f28 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-constr-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-constr-ir.txt @@ -1,21 +1,21 @@ void main () { - vec3 n; - mat3 m; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - gl_Position = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (mat3(0.1, 0.8, 0.1, 0.3, 0.3, 0.5, 0.9, 0.0, 0.1)); - m = (tmpvar_2); - vec3 tmpvar_3; - tmpvar_3 = (m * gl_Normal); - n = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = ((n * 0.5) + 0.5).xyz; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - gl_FrontColor = tmpvar_5; + vec3 n_1; + mat3 m_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); + gl_Position = tmpvar_3; + mat3 tmpvar_4; + tmpvar_4 = (mat3(0.1, 0.8, 0.1, 0.3, 0.3, 0.5, 0.9, 0.0, 0.1)); + m_2 = (tmpvar_4); + vec3 tmpvar_5; + tmpvar_5 = (m_2 * gl_Normal); + n_1 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 1.0; + tmpvar_6.xyz = ((n_1 * 0.5) + 0.5).xyz; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + gl_FrontColor = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-irES.txt index d8b61717d..5549b6c13 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-irES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-irES.txt @@ -27,181 +27,181 @@ attribute highp vec4 _glesMultiTexCoord0; attribute mediump vec3 _glesNormal; attribute highp vec4 _glesVertex; mat3 xll_transpose ( - in mat3 m + in mat3 m_1 ) { - mat3 tmpvar_1; - float tmpvar_2; - tmpvar_2 = m[0][0]; - tmpvar_1[0].x = tmpvar_2; + mat3 tmpvar_2; float tmpvar_3; - tmpvar_3 = m[1][0]; - tmpvar_1[0].y = tmpvar_3; + tmpvar_3 = m_1[0][0]; + tmpvar_2[0].x = tmpvar_3; float tmpvar_4; - tmpvar_4 = m[2][0]; - tmpvar_1[0].z = tmpvar_4; + tmpvar_4 = m_1[1][0]; + tmpvar_2[0].y = tmpvar_4; float tmpvar_5; - tmpvar_5 = m[0][1]; - tmpvar_1[1].x = tmpvar_5; + tmpvar_5 = m_1[2][0]; + tmpvar_2[0].z = tmpvar_5; float tmpvar_6; - tmpvar_6 = m[1][1]; - tmpvar_1[1].y = tmpvar_6; + tmpvar_6 = m_1[0][1]; + tmpvar_2[1].x = tmpvar_6; float tmpvar_7; - tmpvar_7 = m[2][1]; - tmpvar_1[1].z = tmpvar_7; + tmpvar_7 = m_1[1][1]; + tmpvar_2[1].y = tmpvar_7; float tmpvar_8; - tmpvar_8 = m[0][2]; - tmpvar_1[2].x = tmpvar_8; + tmpvar_8 = m_1[2][1]; + tmpvar_2[1].z = tmpvar_8; float tmpvar_9; - tmpvar_9 = m[1][2]; - tmpvar_1[2].y = tmpvar_9; + tmpvar_9 = m_1[0][2]; + tmpvar_2[2].x = tmpvar_9; float tmpvar_10; - tmpvar_10 = m[2][2]; - tmpvar_1[2].z = tmpvar_10; - return tmpvar_1; + tmpvar_10 = m_1[1][2]; + tmpvar_2[2].y = tmpvar_10; + float tmpvar_11; + tmpvar_11 = m_1[2][2]; + tmpvar_2[2].z = tmpvar_11; + return tmpvar_2; } mat3 xll_constructMat3 ( - in mat4 m + in mat4 m_12 ) { - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; + vec3 tmpvar_13; + tmpvar_13 = m_12[0].xyz; + vec3 tmpvar_14; + tmpvar_14 = m_12[1].xyz; + vec3 tmpvar_15; + tmpvar_15 = m_12[2].xyz; + mat3 tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = tmpvar_13; + tmpvar_16[0] = tmpvar_17; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_14; + tmpvar_16[1] = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_15; + tmpvar_16[2] = tmpvar_19; + return tmpvar_16; } vec3 ObjSpaceViewDir ( - in highp vec4 v + in highp vec4 v_20 ) { - highp vec3 objSpaceCameraPos; - highp vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - highp vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); + highp vec3 objSpaceCameraPos_21; + highp vec4 tmpvar_22; + tmpvar_22.w = 1.0; + tmpvar_22.xyz = _WorldSpaceCameraPos.xyz.xyz; + highp vec3 tmpvar_23; + tmpvar_23 = ((_World2Object * tmpvar_22).xyz * unity_Scale.w); + objSpaceCameraPos_21 = tmpvar_23; + return (objSpaceCameraPos_21 - v_20.xyz); } vec3 ObjSpaceLightDir ( - in highp vec4 v + in highp vec4 v_24 ) { - highp vec3 objSpaceLightPos; - highp vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; + highp vec3 objSpaceLightPos_25; + highp vec3 tmpvar_26; + tmpvar_26 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_25 = tmpvar_26; + return objSpaceLightPos_25.xyz; } v2f_surf vert_surf ( - in appdata v + in appdata v_27 ) { - highp vec3 viewDirForLight; - highp vec3 lightDir; - highp mat3 rotation; - highp vec3 binormal; - highp vec3 worldN; - v2f_surf o; - highp vec4 tmpvar_1; - tmpvar_1 = (glstate_matrix_mvp * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - highp vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - worldN = tmpvar_3; - highp vec3 tmpvar_4; - tmpvar_4 = worldN; - o.worldN = tmpvar_4; - highp vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - highp vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = v.tangent.xyz; - tmpvar_7[0] = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = binormal; - tmpvar_7[1] = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = v.normal; - tmpvar_7[2] = tmpvar_10; - mat3 tmpvar_11; - tmpvar_11 = (xll_transpose (tmpvar_7)); - mat3 tmpvar_12; - tmpvar_12 = (tmpvar_11); - rotation = (tmpvar_12); - highp vec3 tmpvar_13; - tmpvar_13 = ObjSpaceLightDir (v.vertex); - highp vec3 tmpvar_14; - tmpvar_14 = (rotation * tmpvar_13); - lightDir = tmpvar_14; - highp vec3 tmpvar_15; - tmpvar_15 = lightDir; - o.lightDir = tmpvar_15; - highp vec3 tmpvar_16; - tmpvar_16 = ObjSpaceViewDir (v.vertex); - highp vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - viewDirForLight = tmpvar_17; - highp vec3 tmpvar_18; - tmpvar_18 = normalize (viewDirForLight); - highp vec3 tmpvar_19; - tmpvar_19 = normalize ((lightDir + tmpvar_18)); - highp vec3 tmpvar_20; - tmpvar_20 = tmpvar_19; - o.viewDir = tmpvar_20; - return o; + highp vec3 viewDirForLight_28; + highp vec3 lightDir_29; + highp mat3 rotation_30; + highp vec3 binormal_31; + highp vec3 worldN_32; + v2f_surf o_33; + highp vec4 tmpvar_34; + tmpvar_34 = (glstate_matrix_mvp * v_27.vertex); + o_33.pos = tmpvar_34; + mat3 tmpvar_35; + tmpvar_35 = xll_constructMat3 (_Object2World); + highp vec3 tmpvar_36; + tmpvar_36 = (tmpvar_35 * v_27.normal); + worldN_32 = tmpvar_36; + highp vec3 tmpvar_37; + tmpvar_37 = worldN_32; + o_33.worldN = tmpvar_37; + highp vec3 tmpvar_38; + tmpvar_38 = cross (v_27.normal, v_27.tangent.xyz); + highp vec3 tmpvar_39; + tmpvar_39 = (tmpvar_38 * v_27.tangent.w); + binormal_31 = tmpvar_39; + mat3 tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = v_27.tangent.xyz; + tmpvar_40[0] = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = binormal_31; + tmpvar_40[1] = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = v_27.normal; + tmpvar_40[2] = tmpvar_43; + mat3 tmpvar_44; + tmpvar_44 = xll_transpose (tmpvar_40); + mat3 tmpvar_45; + tmpvar_45 = (tmpvar_44); + rotation_30 = (tmpvar_45); + highp vec3 tmpvar_46; + tmpvar_46 = ObjSpaceLightDir (v_27.vertex); + highp vec3 tmpvar_47; + tmpvar_47 = (rotation_30 * tmpvar_46); + lightDir_29 = tmpvar_47; + highp vec3 tmpvar_48; + tmpvar_48 = lightDir_29; + o_33.lightDir = tmpvar_48; + highp vec3 tmpvar_49; + tmpvar_49 = ObjSpaceViewDir (v_27.vertex); + highp vec3 tmpvar_50; + tmpvar_50 = (rotation_30 * tmpvar_49); + viewDirForLight_28 = tmpvar_50; + highp vec3 tmpvar_51; + tmpvar_51 = normalize (viewDirForLight_28); + highp vec3 tmpvar_52; + tmpvar_52 = normalize ((lightDir_29 + tmpvar_51)); + highp vec3 tmpvar_53; + tmpvar_53 = tmpvar_52; + o_33.viewDir = tmpvar_53; + return o_33; } void main () { - v2f_surf rv; - appdata v; - vec4 tmpvar_1; - tmpvar_1 = attrVertex; - v.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = attrTangent; - v.tangent = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = attrNormal; - v.normal = tmpvar_3; - v2f_surf tmpvar_4; - tmpvar_4 = vert_surf (v); - v2f_surf tmpvar_5; - tmpvar_5 = tmpvar_4; - rv = tmpvar_5; - highp vec4 tmpvar_6; - tmpvar_6 = rv.pos; - gl_Position = tmpvar_6; - lowp vec3 tmpvar_7; - tmpvar_7 = rv.worldN; - varWorldN = tmpvar_7; - lowp vec3 tmpvar_8; - tmpvar_8 = rv.lightDir; - varLightDir = tmpvar_8; - lowp vec3 tmpvar_9; - tmpvar_9 = rv.viewDir; - varViewDir = tmpvar_9; + v2f_surf rv_54; + appdata v_55; + vec4 tmpvar_56; + tmpvar_56 = attrVertex; + v_55.vertex = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = attrTangent; + v_55.tangent = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = attrNormal; + v_55.normal = tmpvar_58; + v2f_surf tmpvar_59; + tmpvar_59 = vert_surf (v_55); + v2f_surf tmpvar_60; + tmpvar_60 = tmpvar_59; + rv_54 = tmpvar_60; + highp vec4 tmpvar_61; + tmpvar_61 = rv_54.pos; + gl_Position = tmpvar_61; + lowp vec3 tmpvar_62; + tmpvar_62 = rv_54.worldN; + varWorldN = tmpvar_62; + lowp vec3 tmpvar_63; + tmpvar_63 = rv_54.lightDir; + varLightDir = tmpvar_63; + lowp vec3 tmpvar_64; + tmpvar_64 = rv_54.viewDir; + varViewDir = tmpvar_64; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES.txt index feffd9b8b..525b70504 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES.txt @@ -22,29 +22,29 @@ void main () highp vec3 tmpvar_5; tmpvar_5 = (tmpvar_4 * attrNormal); tmpvar_3 = tmpvar_5; - highp mat3 tmpvar_6; - tmpvar_6[0] = attrTangent.xyz; - tmpvar_6[1] = (cross (attrNormal, attrTangent.xyz) * attrTangent.w); - tmpvar_6[2] = attrNormal; - mat3 tmpvar_7; - tmpvar_7[0].x = tmpvar_6[0].x; - tmpvar_7[0].y = tmpvar_6[1].x; - tmpvar_7[0].z = tmpvar_6[2].x; - tmpvar_7[1].x = tmpvar_6[0].y; - tmpvar_7[1].y = tmpvar_6[1].y; - tmpvar_7[1].z = tmpvar_6[2].y; - tmpvar_7[2].x = tmpvar_6[0].z; - tmpvar_7[2].y = tmpvar_6[1].z; - tmpvar_7[2].z = tmpvar_6[2].z; - highp vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * (_World2Object * _WorldSpaceLightPos0).xyz); - tmpvar_1 = tmpvar_8; - highp vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = _WorldSpaceCameraPos; - highp vec3 tmpvar_10; - tmpvar_10 = normalize ((tmpvar_8 + normalize ((tmpvar_7 * (((_World2Object * tmpvar_9).xyz * unity_Scale.w) - attrVertex.xyz))))); - tmpvar_2 = tmpvar_10; + highp vec3 tmpvar_6; + highp vec3 tmpvar_7; + tmpvar_6 = attrTangent.xyz; + tmpvar_7 = (((attrNormal.yzx * attrTangent.zxy) - (attrNormal.zxy * attrTangent.yzx)) * attrTangent.w); + highp mat3 tmpvar_8; + tmpvar_8[0].x = tmpvar_6.x; + tmpvar_8[0].y = tmpvar_7.x; + tmpvar_8[0].z = attrNormal.x; + tmpvar_8[1].x = tmpvar_6.y; + tmpvar_8[1].y = tmpvar_7.y; + tmpvar_8[1].z = attrNormal.y; + tmpvar_8[2].x = tmpvar_6.z; + tmpvar_8[2].y = tmpvar_7.z; + tmpvar_8[2].z = attrNormal.z; + highp vec3 tmpvar_9; + tmpvar_9 = (tmpvar_8 * (_World2Object * _WorldSpaceLightPos0).xyz); + tmpvar_1 = tmpvar_9; + highp vec4 tmpvar_10; + tmpvar_10.w = 1.0; + tmpvar_10.xyz = _WorldSpaceCameraPos; + highp vec3 tmpvar_11; + tmpvar_11 = normalize((tmpvar_9 + normalize((tmpvar_8 * (((_World2Object * tmpvar_10).xyz * unity_Scale.w) - attrVertex.xyz))))); + tmpvar_2 = tmpvar_11; gl_Position = (glstate_matrix_mvp * attrVertex); varWorldN = tmpvar_3; varLightDir = tmpvar_1; diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-negsub-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-negsub-ir.txt index a6e068ede..e54f61ce2 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/opt-negsub-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-negsub-ir.txt @@ -7,34 +7,34 @@ uniform mat3 m3a; uniform mat4 mvp; void main () { - vec3 rc; - vec3 rb; - vec3 tb; - vec3 ra; - vec3 ta; - vec4 tmpvar_1; - tmpvar_1 = (mvp * gl_Vertex); - gl_Position = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = -((v3a.xyz - gl_Vertex.xyz)); - ta = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (m3a * ta); - ra = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = -(((mvp * v3b).xyz - gl_Vertex.xyz)); - tb = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = (m3b * tb); - rb = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (m3c * -((v3c.xyz - gl_Vertex.xyz))); - rc = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = ((ra + rb) + rc).xyz; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_FrontColor = tmpvar_8; + vec3 rc_1; + vec3 rb_2; + vec3 tb_3; + vec3 ra_4; + vec3 ta_5; + vec4 tmpvar_6; + tmpvar_6 = (mvp * gl_Vertex); + gl_Position = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = -((v3a.xyz - gl_Vertex.xyz)); + ta_5 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = (m3a * ta_5); + ra_4 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = -(((mvp * v3b).xyz - gl_Vertex.xyz)); + tb_3 = tmpvar_9; + vec3 tmpvar_10; + tmpvar_10 = (m3b * tb_3); + rb_2 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (m3c * -((v3c.xyz - gl_Vertex.xyz))); + rc_1 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12.w = 1.0; + tmpvar_12.xyz = ((ra_4 + rb_2) + rc_1).xyz; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + gl_FrontColor = tmpvar_13; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-in.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-in.txt new file mode 100644 index 000000000..a2f1f172c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-in.txt @@ -0,0 +1,42 @@ +struct appdata_full { + vec4 vertex; + vec3 normal; +}; +struct v2f { + vec4 pos; + vec3 backContrib; + vec3 nl; +}; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform float _TranslucencyViewDependency; + +v2f vert(in appdata_full v) +{ + v2f o; + vec3 viewDir; + o.pos = v.vertex; + viewDir = v.vertex.xyz; + + // Do we unroll this loop? + // At some point we didn't since the loop body was deemed "too large" + for (int j = 0; j < 3; j++) + { + vec3 lightDir = _TerrainTreeLightDirections[j]; + float nl = dot(v.normal, lightDir); + float backContrib = dot(viewDir, -lightDir); + o.backContrib[ j ] = mix(-nl, backContrib, _TranslucencyViewDependency); + o.nl[ j ] = max(0.0, (nl * 0.6) + 0.4); + } + return o; +} + +void main() { + v2f xl_retval; + appdata_full xlt_v; + xlt_v.vertex = gl_Vertex; + xlt_v.normal = gl_Normal; + xl_retval = vert(xlt_v); + gl_Position = xl_retval.pos; + gl_TexCoord[2] = vec4(xl_retval.backContrib, 0.0); + gl_TexCoord[3] = vec4(xl_retval.nl, 0.0); +} diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-ir.txt new file mode 100644 index 000000000..b0bf7293b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-ir.txt @@ -0,0 +1,98 @@ +struct appdata_full { + vec4 vertex; + vec3 normal; +}; +struct v2f { + vec4 pos; + vec3 backContrib; + vec3 nl; +}; +uniform float _TranslucencyViewDependency; +uniform vec3 _TerrainTreeLightDirections[4]; +v2f vert ( + in appdata_full v_1 +) +{ + int j_2; + vec3 viewDir_3; + v2f o_4; + vec4 tmpvar_5; + tmpvar_5 = v_1.vertex; + o_4.pos = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = v_1.vertex.xyz; + viewDir_3 = tmpvar_6; + int tmpvar_7; + tmpvar_7 = 0; + j_2 = tmpvar_7; + while (true) { + float backContrib_8; + float nl_9; + vec3 lightDir_10; + if (!((j_2 < 3))) { + break; + }; + vec3 tmpvar_11; + tmpvar_11 = _TerrainTreeLightDirections[j_2]; + lightDir_10 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = dot (v_1.normal, lightDir_10); + float tmpvar_13; + tmpvar_13 = tmpvar_12; + nl_9 = tmpvar_13; + float tmpvar_14; + tmpvar_14 = dot (viewDir_3, -(lightDir_10)); + float tmpvar_15; + tmpvar_15 = tmpvar_14; + backContrib_8 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = mix (-(nl_9), backContrib_8, _TranslucencyViewDependency); + float tmpvar_17; + tmpvar_17 = tmpvar_16; + o_4.backContrib[j_2] = tmpvar_17; + float tmpvar_18; + tmpvar_18 = max (0.0, ((nl_9 * 0.6) + 0.4)); + float tmpvar_19; + tmpvar_19 = tmpvar_18; + o_4.nl[j_2] = tmpvar_19; + int _post_incdec_tmp_20; + _post_incdec_tmp_20 = j_2; + int tmpvar_21; + tmpvar_21 = (j_2 + 1); + j_2 = tmpvar_21; + }; + return o_4; +} + +void main () +{ + appdata_full xlt_v_22; + v2f xl_retval_23; + vec4 tmpvar_24; + tmpvar_24 = gl_Vertex; + xlt_v_22.vertex = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = gl_Normal; + xlt_v_22.normal = tmpvar_25; + v2f tmpvar_26; + tmpvar_26 = vert (xlt_v_22); + v2f tmpvar_27; + tmpvar_27 = tmpvar_26; + xl_retval_23 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = xl_retval_23.pos; + gl_Position = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.w = 0.0; + tmpvar_29.xyz = xl_retval_23.backContrib.xyz; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + gl_TexCoord[2] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31.w = 0.0; + tmpvar_31.xyz = xl_retval_23.nl.xyz; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_TexCoord[3] = tmpvar_32; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-out.txt b/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-out.txt new file mode 100644 index 000000000..85e116688 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/opt-unroll-out.txt @@ -0,0 +1,35 @@ +uniform float _TranslucencyViewDependency; +uniform vec3 _TerrainTreeLightDirections[4]; +void main () +{ + vec3 tmpvar_1; + vec3 tmpvar_2; + vec3 tmpvar_3; + tmpvar_3 = _TerrainTreeLightDirections[0]; + float tmpvar_4; + tmpvar_4 = dot (gl_Normal, tmpvar_3); + tmpvar_1.x = mix (-(tmpvar_4), dot (gl_Vertex.xyz, -(tmpvar_3)), _TranslucencyViewDependency); + tmpvar_2.x = max (0.0, ((tmpvar_4 * 0.6) + 0.4)); + vec3 tmpvar_5; + tmpvar_5 = _TerrainTreeLightDirections[1]; + float tmpvar_6; + tmpvar_6 = dot (gl_Normal, tmpvar_5); + tmpvar_1.y = mix (-(tmpvar_6), dot (gl_Vertex.xyz, -(tmpvar_5)), _TranslucencyViewDependency); + tmpvar_2.y = max (0.0, ((tmpvar_6 * 0.6) + 0.4)); + vec3 tmpvar_7; + tmpvar_7 = _TerrainTreeLightDirections[2]; + float tmpvar_8; + tmpvar_8 = dot (gl_Normal, tmpvar_7); + tmpvar_1.z = mix (-(tmpvar_8), dot (gl_Vertex.xyz, -(tmpvar_7)), _TranslucencyViewDependency); + tmpvar_2.z = max (0.0, ((tmpvar_8 * 0.6) + 0.4)); + gl_Position = gl_Vertex; + vec4 tmpvar_9; + tmpvar_9.w = 0.0; + tmpvar_9.xyz = tmpvar_1; + gl_TexCoord[2] = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = tmpvar_2; + gl_TexCoord[3] = tmpvar_10; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/types-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/types-ir.txt index e97b6a912..79de32358 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/types-ir.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/types-ir.txt @@ -13,80 +13,80 @@ varying vec4 xlv_COLOR; varying vec2 xlv_TEXCOORD0; uniform mat4 mvp; v2f xlat_main ( - in a2v v + in a2v v_1 ) { - float dz; - float dy; - float dx; - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (mvp * v.pos); - o.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = (o.color.xyz + v.normal); - o.color.xyz = tmpvar_3.xyz.xyz; - vec2 tmpvar_4; - tmpvar_4 = v.uv; - o.uv = tmpvar_4; - float tmpvar_5; - tmpvar_5 = v.pos.x; - dx = tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.pos.y; - dy = tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.pos.z; - dz = tmpvar_7; - return o; + float dz_2; + float dy_3; + float dx_4; + v2f o_5; + vec4 tmpvar_6; + tmpvar_6 = (mvp * v_1.pos); + o_5.pos = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7 = v_1.color; + o_5.color = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = (o_5.color.xyz + v_1.normal); + o_5.color.xyz = tmpvar_8.xyz.xyz; + vec2 tmpvar_9; + tmpvar_9 = v_1.uv; + o_5.uv = tmpvar_9; + float tmpvar_10; + tmpvar_10 = v_1.pos.x; + dx_4 = tmpvar_10; + float tmpvar_11; + tmpvar_11 = v_1.pos.y; + dy_3 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = v_1.pos.z; + dz_2 = tmpvar_12; + return o_5; } void main () { - a2v xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.pos = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.uv = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_Color.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.color = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = xlat_main (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - vec2 tmpvar_13; - tmpvar_13 = xl_retval.uv.xy; - vec2 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_TEXCOORD0 = tmpvar_14; + a2v xlt_v_13; + v2f xl_retval_14; vec4 tmpvar_15; - tmpvar_15 = xl_retval.color.xyzw; + tmpvar_15 = gl_Vertex.xyzw; vec4 tmpvar_16; tmpvar_16 = tmpvar_15; - xlv_COLOR = tmpvar_16; + xlt_v_13.pos = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = gl_MultiTexCoord0.xy; + vec2 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_13.uv = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = gl_Normal.xyz; + vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_13.normal = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = gl_Color.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_13.color = tmpvar_22; + v2f tmpvar_23; + tmpvar_23 = xlat_main (xlt_v_13); + v2f tmpvar_24; + tmpvar_24 = tmpvar_23; + xl_retval_14 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = xl_retval_14.pos.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + gl_Position = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = xl_retval_14.uv.xy; + vec2 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlv_TEXCOORD0 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = xl_retval_14.color.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlv_COLOR = tmpvar_30; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/types-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/types-irES.txt index c967dde2b..e0d25fa2b 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/types-irES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/types-irES.txt @@ -18,80 +18,80 @@ attribute highp vec4 _glesMultiTexCoord0; attribute mediump vec3 _glesNormal; attribute highp vec4 _glesVertex; v2f xlat_main ( - in a2v v + in a2v v_1 ) { - lowp float dz; - mediump float dy; - highp float dx; - v2f o; - highp vec4 tmpvar_1; - tmpvar_1 = (mvp * v.pos); - o.pos = tmpvar_1; - lowp vec4 tmpvar_2; - tmpvar_2 = v.color; - o.color = tmpvar_2; - mediump vec3 tmpvar_3; - tmpvar_3 = (o.color.xyz + v.normal); - o.color.xyz = tmpvar_3.xyz.xyz; - highp vec2 tmpvar_4; - tmpvar_4 = v.uv; - o.uv = tmpvar_4; - highp float tmpvar_5; - tmpvar_5 = v.pos.x; - dx = tmpvar_5; - highp float tmpvar_6; - tmpvar_6 = v.pos.y; - dy = tmpvar_6; - highp float tmpvar_7; - tmpvar_7 = v.pos.z; - dz = tmpvar_7; - return o; + lowp float dz_2; + mediump float dy_3; + highp float dx_4; + v2f o_5; + highp vec4 tmpvar_6; + tmpvar_6 = (mvp * v_1.pos); + o_5.pos = tmpvar_6; + lowp vec4 tmpvar_7; + tmpvar_7 = v_1.color; + o_5.color = tmpvar_7; + mediump vec3 tmpvar_8; + tmpvar_8 = (o_5.color.xyz + v_1.normal); + o_5.color.xyz = tmpvar_8.xyz.xyz; + highp vec2 tmpvar_9; + tmpvar_9 = v_1.uv; + o_5.uv = tmpvar_9; + highp float tmpvar_10; + tmpvar_10 = v_1.pos.x; + dx_4 = tmpvar_10; + highp float tmpvar_11; + tmpvar_11 = v_1.pos.y; + dy_3 = tmpvar_11; + highp float tmpvar_12; + tmpvar_12 = v_1.pos.z; + dz_2 = tmpvar_12; + return o_5; } void main () { - a2v xlt_v; - v2f xl_retval; - highp vec4 tmpvar_1; - tmpvar_1 = _glesVertex.xyzw; - highp vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.pos = tmpvar_2; - highp vec2 tmpvar_3; - tmpvar_3 = _glesMultiTexCoord0.xy; - highp vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.uv = tmpvar_4; - mediump vec3 tmpvar_5; - tmpvar_5 = _glesNormal.xyz; - mediump vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - lowp vec4 tmpvar_7; - tmpvar_7 = _glesColor.xyzw; - lowp vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.color = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = xlat_main (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - highp vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - highp vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - mediump vec2 tmpvar_13; - tmpvar_13 = xl_retval.uv.xy; - mediump vec2 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_TEXCOORD0 = tmpvar_14; - lowp vec4 tmpvar_15; - tmpvar_15 = xl_retval.color.xyzw; - lowp vec4 tmpvar_16; + a2v xlt_v_13; + v2f xl_retval_14; + highp vec4 tmpvar_15; + tmpvar_15 = _glesVertex.xyzw; + highp vec4 tmpvar_16; tmpvar_16 = tmpvar_15; - xlv_COLOR = tmpvar_16; + xlt_v_13.pos = tmpvar_16; + highp vec2 tmpvar_17; + tmpvar_17 = _glesMultiTexCoord0.xy; + highp vec2 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_13.uv = tmpvar_18; + mediump vec3 tmpvar_19; + tmpvar_19 = _glesNormal.xyz; + mediump vec3 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_13.normal = tmpvar_20; + lowp vec4 tmpvar_21; + tmpvar_21 = _glesColor.xyzw; + lowp vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_13.color = tmpvar_22; + v2f tmpvar_23; + tmpvar_23 = xlat_main (xlt_v_13); + v2f tmpvar_24; + tmpvar_24 = tmpvar_23; + xl_retval_14 = tmpvar_24; + highp vec4 tmpvar_25; + tmpvar_25 = xl_retval_14.pos.xyzw; + highp vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + gl_Position = tmpvar_26; + mediump vec2 tmpvar_27; + tmpvar_27 = xl_retval_14.uv.xy; + mediump vec2 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlv_TEXCOORD0 = tmpvar_28; + lowp vec4 tmpvar_29; + tmpvar_29 = xl_retval_14.color.xyzw; + lowp vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlv_COLOR = tmpvar_30; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/types-out.txt b/3rdparty/glsl-optimizer/tests/vertex/types-out.txt index 9bf1fc64c..88c255e46 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/types-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/types-out.txt @@ -4,7 +4,7 @@ uniform mat4 mvp; void main () { vec4 tmpvar_1; - tmpvar_1 = gl_Color; + tmpvar_1.w = gl_Color.w; tmpvar_1.xyz = (gl_Color.xyz + gl_Normal); gl_Position = (mvp * gl_Vertex); xlv_TEXCOORD0 = gl_MultiTexCoord0.xy; diff --git a/3rdparty/glsl-optimizer/tests/vertex/types-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/types-outES.txt index 431ab1794..cc0f4ccbd 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/types-outES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/types-outES.txt @@ -11,7 +11,7 @@ void main () tmpvar_1 = _glesMultiTexCoord0.xy; mediump vec2 tmpvar_2; lowp vec4 tmpvar_3; - tmpvar_3 = _glesColor; + tmpvar_3.w = _glesColor.w; mediump vec3 tmpvar_4; tmpvar_4 = (_glesColor.xyz + _glesNormal); tmpvar_3.xyz = tmpvar_4; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-ir.txt deleted file mode 100644 index ff62ea859..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,177 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0 = tmpvar_2.xy.xy; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - mat3 tmpvar_16; - tmpvar_16 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16[0].xyz); - o.TtoV0 = tmpvar_17; - mat3 tmpvar_18; - tmpvar_18 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18[1].xyz); - o.TtoV1 = tmpvar_19; - mat3 tmpvar_20; - tmpvar_20 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20[2].xyz); - o.TtoV2 = tmpvar_21; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.TtoV0.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.TtoV1.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.TtoV2.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-out.txt deleted file mode 100644 index 244b1b9f5..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-out.txt +++ /dev/null @@ -1,47 +0,0 @@ -attribute vec4 TANGENT; -uniform vec4 _BumpMap_ST; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_2; - tmpvar_2[0].x = TANGENT.x; - tmpvar_2[0].y = tmpvar_1.x; - tmpvar_2[0].z = gl_Normal.x; - tmpvar_2[1].x = TANGENT.y; - tmpvar_2[1].y = tmpvar_1.y; - tmpvar_2[1].z = gl_Normal.y; - tmpvar_2[2].x = TANGENT.z; - tmpvar_2[2].y = tmpvar_1.z; - tmpvar_2[2].z = gl_Normal.z; - mat3 tmpvar_3; - tmpvar_3[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_3[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_3[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - mat3 tmpvar_4; - tmpvar_4[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_4[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_4[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - mat3 tmpvar_5; - tmpvar_5[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_5[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_5[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - gl_TexCoord[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = (tmpvar_2 * tmpvar_3[0]); - gl_TexCoord[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (tmpvar_2 * tmpvar_4[1]); - gl_TexCoord[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (tmpvar_2 * tmpvar_5[2]); - gl_TexCoord[3] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-ir.txt deleted file mode 100644 index 6b7ae345b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-out.txt deleted file mode 100644 index 2f3f8d3dc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_4; - tmpvar_4.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_4.x = tmpvar_1.z; - xlv_FOG = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_5; - gl_TexCoord[1] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-ir.txt deleted file mode 100644 index 7680c076f..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-ir.txt +++ /dev/null @@ -1,439 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 vlight; - vec4 _ShadowCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -vec3 Shade4PointLights ( - in vec4 lightPosX, - in vec4 lightPosY, - in vec4 lightPosZ, - in vec3 lightColor0, - in vec3 lightColor1, - in vec3 lightColor2, - in vec3 lightColor3, - in vec4 lightAttenSq, - in vec3 pos, - in vec3 normal -) -{ - vec3 col; - vec4 diff; - vec4 atten; - vec4 corr; - vec4 ndotl; - vec4 lengthSq; - vec4 toLightZ; - vec4 toLightY; - vec4 toLightX; - vec4 tmpvar_1; - tmpvar_1 = (lightPosX - pos.x); - toLightX = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (lightPosY - pos.y); - toLightY = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (lightPosZ - pos.z); - toLightZ = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); - lengthSq = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (lengthSq + (toLightX * toLightX)); - lengthSq = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (lengthSq + (toLightY * toLightY)); - lengthSq = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (lengthSq + (toLightZ * toLightZ)); - lengthSq = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); - ndotl = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (ndotl + (toLightX * normal.x)); - ndotl = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (ndotl + (toLightY * normal.y)); - ndotl = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (ndotl + (toLightZ * normal.z)); - ndotl = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = inversesqrt (lengthSq); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - corr = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl * corr)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - ndotl = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = (1.0 / (1.0 + (lengthSq * lightAttenSq))); - atten = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (ndotl * atten); - diff = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = vec3(0.0, 0.0, 0.0); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col + (lightColor0 * diff.x)); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col + (lightColor1 * diff.y)); - col = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (col + (lightColor2 * diff.z)); - col = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (col + (lightColor3 * diff.w)); - col = tmpvar_22; - return col; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 worldPos; - vec3 shlight; - mat3 rotation; - vec3 binormal; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - worldN = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.x; - tmpvar_7[0].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.x; - tmpvar_7[0].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.x; - tmpvar_7[0].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.y; - tmpvar_7[1].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.y; - tmpvar_7[1].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.y; - tmpvar_7[1].z = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.tangent.z; - tmpvar_7[2].x = tmpvar_14; - float tmpvar_15; - tmpvar_15 = binormal.z; - tmpvar_7[2].y = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.normal.z; - tmpvar_7[2].z = tmpvar_16; - mat3 tmpvar_17; - tmpvar_17 = (tmpvar_7); - rotation = (tmpvar_17); - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.lightDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20); - o.viewDir = tmpvar_21; - vec4 tmpvar_22; - tmpvar_22.w = 1.0; - tmpvar_22.xyz = worldN.xyz; - vec3 tmpvar_23; - tmpvar_23 = ShadeSH9 (tmpvar_22); - vec3 tmpvar_24; - tmpvar_24 = tmpvar_23; - shlight = tmpvar_24; - vec3 tmpvar_25; - tmpvar_25 = shlight; - o.vlight = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = (_Object2World * v.vertex).xyz; - worldPos = tmpvar_26; - vec3 tmpvar_27; - tmpvar_27 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos, worldN); - vec3 tmpvar_28; - tmpvar_28 = (o.vlight + tmpvar_27); - o.vlight = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29 = ComputeScreenPos (o.pos); - vec4 tmpvar_30; - tmpvar_30 = tmpvar_29; - o._ShadowCoord = tmpvar_30; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._ShadowCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-out.txt deleted file mode 100644 index f89a0eb27..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-out.txt +++ /dev/null @@ -1,108 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - mat3 tmpvar_3; - tmpvar_3[0] = _Object2World[0].xyz; - tmpvar_3[1] = _Object2World[1].xyz; - tmpvar_3[2] = _Object2World[2].xyz; - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (gl_Normal * unity_Scale.w)); - vec3 tmpvar_5; - tmpvar_5 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_6; - tmpvar_6[0].x = TANGENT.x; - tmpvar_6[0].y = tmpvar_5.x; - tmpvar_6[0].z = gl_Normal.x; - tmpvar_6[1].x = TANGENT.y; - tmpvar_6[1].y = tmpvar_5.y; - tmpvar_6[1].z = gl_Normal.y; - tmpvar_6[2].x = TANGENT.z; - tmpvar_6[2].y = tmpvar_5.z; - tmpvar_6[2].z = gl_Normal.z; - vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = _WorldSpaceCameraPos; - vec4 tmpvar_8; - tmpvar_8.w = 1.0; - tmpvar_8.xyz = tmpvar_4; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_8); - x1.y = dot (unity_SHAg, tmpvar_8); - x1.z = dot (unity_SHAb, tmpvar_8); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_4.xyzz * tmpvar_4.yzzx); - x2.x = dot (unity_SHBr, tmpvar_9); - x2.y = dot (unity_SHBg, tmpvar_9); - x2.z = dot (unity_SHBb, tmpvar_9); - vec3 tmpvar_10; - tmpvar_10 = (_Object2World * gl_Vertex).xyz; - vec4 tmpvar_11; - tmpvar_11 = (unity_4LightPosX0 - tmpvar_10.x); - vec4 tmpvar_12; - tmpvar_12 = (unity_4LightPosY0 - tmpvar_10.y); - vec4 tmpvar_13; - tmpvar_13 = (unity_4LightPosZ0 - tmpvar_10.z); - vec4 tmpvar_14; - tmpvar_14 = (((tmpvar_11 * tmpvar_11) + (tmpvar_12 * tmpvar_12)) + (tmpvar_13 * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_11 * tmpvar_4.x) + (tmpvar_12 * tmpvar_4.y)) + (tmpvar_13 * tmpvar_4.z)) * inversesqrt (tmpvar_14))) * (1.0/((1.0 + (tmpvar_14 * unity_4LightAtten0))))); - vec4 o_i0; - vec4 tmpvar_16; - tmpvar_16 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_16; - vec2 tmpvar_17; - tmpvar_17.x = tmpvar_16.x; - tmpvar_17.y = (tmpvar_16.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_17 + tmpvar_16.w); - o_i0.zw = tmpvar_2.zw; - gl_Position = tmpvar_2; - vec4 tmpvar_18; - tmpvar_18.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_18.x = tmpvar_2.z; - xlv_FOG = tmpvar_18; - gl_TexCoord[0] = tmpvar_1; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); - gl_TexCoord[1] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 0.0; - tmpvar_20.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); - gl_TexCoord[2] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = (((x1 + x2) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))) + ((((unity_LightColor0 * tmpvar_15.x) + (unity_LightColor1 * tmpvar_15.y)) + (unity_LightColor2 * tmpvar_15.z)) + (unity_LightColor3 * tmpvar_15.w))); - gl_TexCoord[3] = tmpvar_21; - gl_TexCoord[4] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-ir.txt deleted file mode 100644 index c8752824a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-ir.txt +++ /dev/null @@ -1,147 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_4.xy.xy; - float tmpvar_5; - tmpvar_5 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_5).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-out.txt deleted file mode 100644 index e52b6728b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-out.txt +++ /dev/null @@ -1,37 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec3 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; - tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_6; - gl_TexCoord[1] = o_i0; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tmpvar_1; - gl_TexCoord[2] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Decal-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Decal-ir.txt deleted file mode 100644 index 6bf98c141..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Decal-ir.txt +++ /dev/null @@ -1,164 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _DecalTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _DecalTex_ST.xy) + _DecalTex_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.lightDir = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-ir.txt deleted file mode 100644 index f7f80c2c0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-ir.txt +++ /dev/null @@ -1,172 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-ir.txt deleted file mode 100644 index c8752824a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-ir.txt +++ /dev/null @@ -1,147 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_4.xy.xy; - float tmpvar_5; - tmpvar_5 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_5).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-out.txt deleted file mode 100644 index e52b6728b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-out.txt +++ /dev/null @@ -1,37 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec3 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; - tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_6; - gl_TexCoord[1] = o_i0; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tmpvar_1; - gl_TexCoord[2] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt deleted file mode 100644 index af73215dd..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-ir.txt +++ /dev/null @@ -1,218 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 vlight; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 shlight; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - worldN = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = worldN; - o.normal = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.w = 1.0; - tmpvar_5.xyz = worldN.xyz; - vec3 tmpvar_6; - tmpvar_6 = ShadeSH9 (tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - shlight = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = shlight; - o.vlight = tmpvar_8; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt deleted file mode 100644 index 64d0a3561..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-out.txt +++ /dev/null @@ -1,53 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - mat3 tmpvar_2; - tmpvar_2[0] = _Object2World[0].xyz; - tmpvar_2[1] = _Object2World[1].xyz; - tmpvar_2[2] = _Object2World[2].xyz; - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (gl_Normal * unity_Scale.w)); - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = tmpvar_3; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_4); - x1.y = dot (unity_SHAg, tmpvar_4); - x1.z = dot (unity_SHAb, tmpvar_4); - vec4 tmpvar_5; - tmpvar_5 = (tmpvar_3.xyzz * tmpvar_3.yzzx); - x2.x = dot (unity_SHBr, tmpvar_5); - x2.y = dot (unity_SHBg, tmpvar_5); - x2.z = dot (unity_SHBb, tmpvar_5); - gl_Position = tmpvar_1; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_1.z; - xlv_FOG = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = tmpvar_3; - gl_TexCoord[1] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = ((x1 + x2) + (unity_SHC.xyz * ((tmpvar_3.x * tmpvar_3.x) - (tmpvar_3.y * tmpvar_3.y)))); - gl_TexCoord[2] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-ir.txt deleted file mode 100644 index 2cfb6c4df..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-ir.txt +++ /dev/null @@ -1,106 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 uvgrab; - vec2 uvbump; - vec2 uvmain; -}; -struct appdata_t { - vec4 vertex; - vec2 texcoord; -}; -vec2 MultiplyUV ( - in mat4 mat, - in vec2 inUV -) -{ - vec4 temp; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.x = inUV.x; - tmpvar_1.y = inUV.y; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - temp = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (mat * temp); - temp = tmpvar_3; - return temp.xy; -} - -v2f vert ( - in appdata_t v -) -{ - float scale; - v2f o; - float tmpvar_1; - tmpvar_1 = 1.0; - scale = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * v.vertex); - o.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = o.vertex.x; - tmpvar_3.y = (o.vertex.y * scale); - vec2 tmpvar_4; - tmpvar_4 = ((tmpvar_3 + o.vertex.w) * 0.5); - o.uvgrab.xy = tmpvar_4.xy.xy; - vec2 tmpvar_5; - tmpvar_5 = o.vertex.zw; - o.uvgrab.zw = tmpvar_5.xxxy.zw; - vec2 tmpvar_6; - tmpvar_6 = MultiplyUV (gl_TextureMatrix[1], v.texcoord); - vec2 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.uvbump = tmpvar_7; - vec2 tmpvar_8; - tmpvar_8 = MultiplyUV (gl_TextureMatrix[2], v.texcoord); - vec2 tmpvar_9; - tmpvar_9 = tmpvar_8; - o.uvmain = tmpvar_9; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.vertex.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.uvgrab.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_TexCoord[0] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.uvbump.xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[1] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.uvmain.xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[2] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-out.txt deleted file mode 100644 index c301d9beb..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-out.txt +++ /dev/null @@ -1,27 +0,0 @@ -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - tmpvar_1.xy = ((tmpvar_2.xy + tmpvar_2.w) * 0.5); - tmpvar_1.zw = tmpvar_2.zw; - vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 0.0); - tmpvar_3.x = gl_MultiTexCoord0.x; - tmpvar_3.y = gl_MultiTexCoord0.y; - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.x = gl_MultiTexCoord0.x; - tmpvar_4.y = gl_MultiTexCoord0.y; - gl_Position = tmpvar_2; - gl_TexCoord[0] = tmpvar_1; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = (gl_TextureMatrix[1] * tmpvar_3).xy; - gl_TexCoord[1] = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = (gl_TextureMatrix[2] * tmpvar_4).xy; - gl_TexCoord[2] = tmpvar_6; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-ir.txt deleted file mode 100644 index db8edeea9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-ir.txt +++ /dev/null @@ -1,120 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec2 bumpuv[2]; - vec3 viewDir; -}; -struct appdata { - vec4 vertex; - vec3 normal; -}; -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform float _WaveScale; -uniform vec4 _WaveOffset; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -v2f vert ( - in appdata v -) -{ - vec4 temp; - v2f o; - PositionFog (v.vertex, o.pos, o.fog); - vec4 tmpvar_1; - tmpvar_1 = ((v.vertex.xzxz * _WaveScale) + _WaveOffset); - temp = tmpvar_1.xyzw.xyzw; - vec2 tmpvar_2; - tmpvar_2 = (temp.xy * vec2(0.4, 0.45)); - o.bumpuv[0] = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = temp.wz; - o.bumpuv[1] = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = normalize (tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.viewDir = tmpvar_6.xzy.xyz; - return o; -} - -void main () -{ - appdata xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_9.x = xl_retval.fog; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlv_FOG = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.bumpuv[0].xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[0] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.bumpuv[1].xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[1] = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = 0.0; - tmpvar_15.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_TexCoord[2] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-ir.txt deleted file mode 100644 index af38f4e83..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-ir.txt +++ /dev/null @@ -1,53 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 uv; -}; -v2f vert ( - in vec4 vertex, - in vec2 uv -) -{ - float scale; - v2f o; - float tmpvar_1; - tmpvar_1 = 1.0; - scale = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * vertex); - o.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = o.vertex.x; - tmpvar_3.y = (o.vertex.y * scale); - vec2 tmpvar_4; - tmpvar_4 = ((tmpvar_3 + o.vertex.w) * 0.5); - o.uv.xy = tmpvar_4.xy.xy; - vec2 tmpvar_5; - tmpvar_5 = o.vertex.zw; - o.uv.zw = tmpvar_5.xxxy.zw; - return o; -} - -void main () -{ - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec2 tmpvar_2; - tmpvar_2 = gl_MultiTexCoord0.xy; - v2f tmpvar_3; - tmpvar_3 = vert (tmpvar_1, tmpvar_2); - v2f tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = xl_retval.vertex.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_Position = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.uv.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_TexCoord[0] = tmpvar_8; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-ir.txt deleted file mode 100644 index 150709f47..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-ir.txt +++ /dev/null @@ -1,177 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec4 nz; -}; -struct appdata { - vec4 vertex; - vec3 normal; - vec4 color; - vec4 texcoord; -}; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _ProjectionParams; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -v2f vert ( - in appdata v -) -{ - v2f o; - TerrainAnimateTree (v.vertex, v.color.w); - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = v.texcoord.xy; - o.uv = tmpvar_2; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.normal); - o.nz.xyz = tmpvar_4.xyz.xyz; - float tmpvar_5; - tmpvar_5 = -(((gl_ModelViewMatrix * v.vertex).z * _ProjectionParams.w)); - o.nz.w = vec4(tmpvar_5).w; - return o; -} - -void main () -{ - appdata xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.color = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = vert (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.uv.xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[0] = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.nz.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_TexCoord[1] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-out.txt deleted file mode 100644 index b5a42617b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-out.txt +++ /dev/null @@ -1,36 +0,0 @@ -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _ProjectionParams; -void main () -{ - vec4 tmpvar_1; - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); - vec3 tmpvar_3; - tmpvar_3.xz = vec2(0.0, 0.0); - tmpvar_3.y = _SquashPlaneNormal.w; - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_4; - mat3 tmpvar_5; - tmpvar_5[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_5[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_5[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - tmpvar_1.xyz = (tmpvar_5 * gl_Normal); - tmpvar_1.w = -(((gl_ModelViewMatrix * tmpvar_4).z * _ProjectionParams.w)); - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_4); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_6; - gl_TexCoord[1] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-ir.txt deleted file mode 100644 index 8f62b0648..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-ir.txt +++ /dev/null @@ -1,249 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec4 nz; -}; -struct appdata_grass { - vec4 vertex; - vec4 tangent; - vec4 color; - vec4 texcoord; - vec4 texcoord1; -}; -attribute vec4 TANGENT; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform vec4 _ProjectionParams; -void FastSinCos ( - in vec4 val, - out vec4 s, - out vec4 c -) -{ - vec4 cos8; - vec4 sin7; - vec4 r3; - vec4 r2; - vec4 r1; - vec4 r8; - vec4 r7; - vec4 r6; - vec4 r5; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); - sin7 = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); - cos8 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ((val * 6.40885) - 3.14159); - val = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (val * val); - r5 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (r5 * r5); - r6 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (r6 * r5); - r7 = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (r6 * r5); - r8 = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (r5 * val); - r1 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (r1 * r5); - r2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (r2 * r5); - r3 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (((val + (r1 * sin7.y)) + (r2 * sin7.z)) + (r3 * sin7.w)); - s = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = ((((1.0 + (r5 * cos8.x)) + (r6 * cos8.y)) + (r7 * cos8.z)) + (r8 * cos8.w)); - c = tmpvar_12; -} - -void TerrainWaveGrass ( - inout vec4 vertex, - in float waveAmount, - in vec3 color, - out vec4 outColor -) -{ - vec3 waveColor; - vec3 waveMove; - float lighting; - vec4 c; - vec4 s; - vec4 waves; - vec4 _waveZmove; - vec4 _waveXmove; - vec4 waveSpeed; - vec4 _waveZSize; - vec4 _waveXSize; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.2, 2.0, 1.6, 4.8); - waveSpeed = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.024, 0.04, -0.12, 0.096); - _waveXmove = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(0.006, 0.02, -0.02, 0.1); - _waveZmove = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - waveMove = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); - _waveXSize = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); - _waveZSize = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (vertex.x * _waveXSize); - waves = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (waves + (vertex.z * _waveZSize)); - waves = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (waves + (_WaveAndDistance.x * waveSpeed)); - waves = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = fract (waves); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - waves = tmpvar_11; - FastSinCos (waves, s, c); - vec4 tmpvar_12; - tmpvar_12 = (s * s); - s = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = (s * s); - s = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); - float tmpvar_15; - tmpvar_15 = dot (s, tmpvar_14); - float tmpvar_16; - tmpvar_16 = (tmpvar_15 * 0.7); - lighting = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (s * waveAmount); - s = tmpvar_17; - float tmpvar_18; - tmpvar_18 = dot (s, _waveXmove); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - waveMove.x = tmpvar_19; - float tmpvar_20; - tmpvar_20 = dot (s, _waveZmove); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - waveMove.z = vec3(tmpvar_21).z; - vec2 tmpvar_22; - tmpvar_22 = (vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - vertex.xz = tmpvar_22.xxy.xz; - vec3 tmpvar_23; - tmpvar_23 = vec3(lighting); - vec3 tmpvar_24; - tmpvar_24 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_23); - vec3 tmpvar_25; - tmpvar_25 = tmpvar_24; - waveColor = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = ((color * waveColor) * 2.0); - outColor.xyz = tmpvar_26.xyz.xyz; - float tmpvar_27; - tmpvar_27 = 1.0; - outColor.w = vec4(tmpvar_27).w; -} - -v2f vert ( - in appdata_grass v -) -{ - v2f o; - vec4 dummyColor; - float waveAmount; - float tmpvar_1; - tmpvar_1 = (v.color.w * _WaveAndDistance.z); - waveAmount = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.0, 0.0, 0.0, 0.0); - dummyColor = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = dummyColor.xyz; - TerrainWaveGrass (v.vertex, waveAmount, tmpvar_3, dummyColor); - vec4 tmpvar_4; - tmpvar_4 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = v.texcoord.xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.uv = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = vec3(0.0, 0.0, 1.0); - o.nz.xyz = tmpvar_7.xyz.xyz; - float tmpvar_8; - tmpvar_8 = -(((gl_ModelViewMatrix * v.vertex).z * _ProjectionParams.w)); - o.nz.w = vec4(tmpvar_8).w; - return o; -} - -void main () -{ - appdata_grass xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_Color.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.color = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - v2f tmpvar_11; - tmpvar_11 = vert (xlt_v); - v2f tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.pos.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_Position = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.zw = vec2(0.0, 0.0); - tmpvar_15.xy = xl_retval.uv.xy; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_TexCoord[0] = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.nz.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[1] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-out.txt deleted file mode 100644 index 7ecd879e9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-out.txt +++ /dev/null @@ -1,36 +0,0 @@ -uniform vec4 _WaveAndDistance; -uniform vec4 _ProjectionParams; -void main () -{ - vec4 tmpvar_1; - vec4 vertex; - vertex = gl_Vertex; - vec3 waveMove; - waveMove = vec3(0.0, 0.0, 0.0); - vec4 tmpvar_2; - tmpvar_2 = ((fract ((((gl_Vertex.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (gl_Vertex.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * tmpvar_2); - vec4 tmpvar_5; - tmpvar_5 = (tmpvar_4 * tmpvar_3); - vec4 tmpvar_6; - tmpvar_6 = (((tmpvar_2 + (tmpvar_4 * -0.161616)) + (tmpvar_5 * 0.0083333)) + ((tmpvar_5 * tmpvar_3) * -0.00019841)); - vec4 tmpvar_7; - tmpvar_7 = (tmpvar_6 * tmpvar_6); - vec4 tmpvar_8; - tmpvar_8 = ((tmpvar_7 * tmpvar_7) * (gl_Color.w * _WaveAndDistance.z)); - waveMove.x = dot (tmpvar_8, vec4(0.024, 0.04, -0.12, 0.096)); - waveMove.z = dot (tmpvar_8, vec4(0.006, 0.02, -0.02, 0.1)); - vertex.xz = (gl_Vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - tmpvar_1.xyz = vec3(0.0, 0.0, 1.0); - tmpvar_1.w = -(((gl_ModelViewMatrix * vertex).z * _ProjectionParams.w)); - gl_Position = (gl_ModelViewProjectionMatrix * vertex); - vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 0.0); - tmpvar_9.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_9; - gl_TexCoord[1] = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-ir.txt deleted file mode 100644 index 6026ddbe4..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-ir.txt +++ /dev/null @@ -1,134 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -struct appdata_tree_billboard { - vec4 vertex; - vec4 color; - vec4 texcoord; - vec2 texcoord1; -}; -uniform vec4 _TreeBillboardDistances; -uniform vec4 _TreeBillboardCameraUp; -uniform vec3 _TreeBillboardCameraRight; -uniform vec4 _TreeBillboardCameraPos; -uniform vec4 _TreeBillboardCameraFront; -void TerrainBillboardTree ( - inout vec4 pos, - in vec2 offset, - in float offsetz -) -{ - float absRadius; - float billboardRootOffsetFactor; - float billboardModeFactor; - float radius; - float billboardAngleFactor; - float treeDistanceSqr; - vec3 treePos; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz - _TreeBillboardCameraPos.xyz); - treePos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (treePos, treePos); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - treeDistanceSqr = tmpvar_3; - if ((treeDistanceSqr > _TreeBillboardDistances.x)) { - vec2 tmpvar_4; - tmpvar_4 = vec2(0.0, 0.0); - offset = tmpvar_4.xy.xy; - }; - vec3 tmpvar_5; - tmpvar_5 = (pos.xyz + (_TreeBillboardCameraRight.xyz * offset.x)); - pos.xyz = tmpvar_5.xyz.xyz; - float tmpvar_6; - tmpvar_6 = _TreeBillboardCameraPos.w; - billboardAngleFactor = tmpvar_6; - float tmpvar_7; - tmpvar_7 = mix (offset.y, offsetz, billboardAngleFactor); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - radius = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _TreeBillboardCameraUp.w; - billboardModeFactor = tmpvar_9; - float tmpvar_10; - tmpvar_10 = _TreeBillboardCameraFront.w; - billboardRootOffsetFactor = tmpvar_10; - float tmpvar_11; - tmpvar_11 = abs (radius); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - absRadius = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, radius); - vec3 tmpvar_14; - tmpvar_14 = vec3(billboardModeFactor); - vec3 tmpvar_15; - tmpvar_15 = mix (((((_TreeBillboardCameraUp.xyz * tmpvar_13) * 2.0) - (vec3(0.0, 1.0, 0.0) * absRadius)) - ((_TreeBillboardCameraUp.xyz * absRadius) * billboardRootOffsetFactor)), (_TreeBillboardCameraUp.xyz * radius), tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = (pos.xyz + tmpvar_15); - pos.xyz = tmpvar_16.xyz.xyz; -} - -v2f vert ( - in appdata_tree_billboard v -) -{ - v2f o; - TerrainBillboardTree (v.vertex, v.texcoord1.xy, v.texcoord.y); - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = v.texcoord.x; - o.uv.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = float((v.texcoord.y > 0.0)); - o.uv.y = vec2(tmpvar_3).y; - return o; -} - -void main () -{ - appdata_tree_billboard xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord1.xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord1 = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = vert (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.uv.xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-out.txt deleted file mode 100644 index 968ae2119..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-out.txt +++ /dev/null @@ -1,36 +0,0 @@ -uniform vec4 _TreeBillboardDistances; -uniform vec4 _TreeBillboardCameraUp; -uniform vec3 _TreeBillboardCameraRight; -uniform vec4 _TreeBillboardCameraPos; -uniform vec4 _TreeBillboardCameraFront; -void main () -{ - vec2 tmpvar_1; - vec4 pos; - pos = gl_Vertex; - vec2 offset; - offset = gl_MultiTexCoord1.xy; - float offsetz; - offsetz = gl_MultiTexCoord0.y; - vec3 tmpvar_2; - tmpvar_2 = (gl_Vertex.xyz - _TreeBillboardCameraPos.xyz); - float tmpvar_3; - tmpvar_3 = dot (tmpvar_2, tmpvar_2); - if ((tmpvar_3 > _TreeBillboardDistances.x)) { - offset = vec2(0.0, 0.0); - }; - pos.xyz = (gl_Vertex.xyz + (_TreeBillboardCameraRight * offset.x)); - float tmpvar_4; - tmpvar_4 = mix (offset.y, offsetz, _TreeBillboardCameraPos.w); - float tmpvar_5; - tmpvar_5 = abs (tmpvar_4); - pos.xyz = (pos.xyz + mix (((((_TreeBillboardCameraUp.xyz * max (0.0, tmpvar_4)) * 2.0) - (vec3(0.0, 1.0, 0.0) * tmpvar_5)) - ((_TreeBillboardCameraUp.xyz * tmpvar_5) * _TreeBillboardCameraFront.w)), (_TreeBillboardCameraUp.xyz * tmpvar_4), _TreeBillboardCameraUp.www)); - tmpvar_1.x = gl_MultiTexCoord0.x; - tmpvar_1.y = float((gl_MultiTexCoord0.y > 0.0)); - gl_Position = (gl_ModelViewProjectionMatrix * pos); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = tmpvar_1; - gl_TexCoord[0] = tmpvar_6; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-ir.txt deleted file mode 100644 index ede5989e1..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-ir.txt +++ /dev/null @@ -1,130 +0,0 @@ -struct appdata_img { - vec4 vertex; - vec2 texcoord; -}; -struct v2f { - vec4 pos; - vec4 uv[4]; -}; -uniform vec4 _MainTex_TexelSize; -vec2 MultiplyUV ( - in mat4 mat, - in vec2 inUV -) -{ - vec4 temp; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.x = inUV.x; - tmpvar_1.y = inUV.y; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - temp = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (mat * temp); - temp = tmpvar_3; - return temp.xy; -} - -v2f vert ( - in appdata_img v -) -{ - float offY; - float offX; - vec4 uv; - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = MultiplyUV (gl_TextureMatrix[0], v.texcoord); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - uv.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = vec2(0.0, 0.0); - uv.zw = tmpvar_4.xxxy.zw; - float tmpvar_5; - tmpvar_5 = _MainTex_TexelSize.x; - offX = tmpvar_5; - float tmpvar_6; - tmpvar_6 = _MainTex_TexelSize.y; - offY = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 1.0); - tmpvar_7.x = -(offX); - tmpvar_7.y = -(offY); - vec4 tmpvar_8; - tmpvar_8 = (uv + tmpvar_7); - o.uv[0] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 1.0); - tmpvar_9.x = offX; - tmpvar_9.y = -(offY); - vec4 tmpvar_10; - tmpvar_10 = (uv + tmpvar_9); - o.uv[1] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 1.0); - tmpvar_11.x = offX; - tmpvar_11.y = offY; - vec4 tmpvar_12; - tmpvar_12 = (uv + tmpvar_11); - o.uv[2] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 1.0); - tmpvar_13.x = -(offX); - tmpvar_13.y = offY; - vec4 tmpvar_14; - tmpvar_14 = (uv + tmpvar_13); - o.uv[3] = tmpvar_14; - return o; -} - -void main () -{ - appdata_img xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.uv[0].xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_TexCoord[0] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.uv[1].xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[1] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.uv[2].xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[2] = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.uv[3].xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_TexCoord[3] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-out.txt deleted file mode 100644 index ef6485186..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-out.txt +++ /dev/null @@ -1,38 +0,0 @@ -uniform vec4 _MainTex_TexelSize; -void main () -{ - vec4 uv; - vec4 tmpvar_1[4]; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.x = gl_MultiTexCoord0.x; - tmpvar_2.y = gl_MultiTexCoord0.y; - uv.xy = (gl_TextureMatrix[0] * tmpvar_2).xy; - uv.zw = vec2(0.0, 0.0); - vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 1.0); - tmpvar_3.x = -(_MainTex_TexelSize.x); - tmpvar_3.y = -(_MainTex_TexelSize.y); - tmpvar_1[0] = (uv + tmpvar_3); - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 1.0); - tmpvar_4.x = _MainTex_TexelSize.x; - tmpvar_4.y = -(_MainTex_TexelSize.y); - tmpvar_1[1] = (uv + tmpvar_4); - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 1.0); - tmpvar_5.x = _MainTex_TexelSize.x; - tmpvar_5.y = _MainTex_TexelSize.y; - tmpvar_1[2] = (uv + tmpvar_5); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 1.0); - tmpvar_6.x = -(_MainTex_TexelSize.x); - tmpvar_6.y = _MainTex_TexelSize.y; - tmpvar_1[3] = (uv + tmpvar_6); - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - gl_TexCoord[0] = tmpvar_1[0]; - gl_TexCoord[1] = tmpvar_1[1]; - gl_TexCoord[2] = tmpvar_1[2]; - gl_TexCoord[3] = tmpvar_1[3]; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-ir.txt deleted file mode 100644 index 86b83f28a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-ir.txt +++ /dev/null @@ -1,87 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; - vec2 texgencoord; -}; -struct appdata_t { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform vec4 _MainTex_ST; -uniform mat4 _GUIClipTextureMatrix; -v2f vert ( - in appdata_t v -) -{ - vec4 texgen; - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewMatrix * v.vertex); - texgen = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = (_GUIClipTextureMatrix * texgen).xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.texgencoord = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = v.color; - o.color = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.texcoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.vertex.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FrontColor = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.texcoord.xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[0] = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.zw = vec2(0.0, 0.0); - tmpvar_15.xy = xl_retval.texgencoord.xy; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_TexCoord[1] = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-ir.txt deleted file mode 100644 index 2d76ee708..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-ir.txt +++ /dev/null @@ -1,93 +0,0 @@ -struct v2f { - vec4 pos; - vec4 uv; - vec3 ray; -}; -struct appdata { - vec4 vertex; - vec3 texcoord; -}; -uniform vec4 _ProjectionParams; -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f vert ( - in appdata v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ((gl_ModelViewMatrix * v.vertex).xyz * vec3(-1.0, -1.0, 1.0)); - o.ray = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = vec3(float((v.texcoord.z != 0.0))); - vec3 tmpvar_6; - tmpvar_6 = mix (o.ray, v.texcoord, tmpvar_5); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.ray = tmpvar_7; - return o; -} - -void main () -{ - appdata xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.uv.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_TexCoord[0] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.w = 0.0; - tmpvar_11.xyz = xl_retval.ray.xyz; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[1] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-out.txt deleted file mode 100644 index f0ae277e6..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-out.txt +++ /dev/null @@ -1,22 +0,0 @@ -uniform vec4 _ProjectionParams; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - gl_TexCoord[0] = o_i0; - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = mix (((gl_ModelViewMatrix * gl_Vertex).xyz * vec3(-1.0, -1.0, 1.0)), gl_MultiTexCoord0.xyz, vec3(float((gl_MultiTexCoord0.z != 0.0)))); - gl_TexCoord[1] = tmpvar_4; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-ir.txt deleted file mode 100644 index 0e1332d5d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-ir.txt +++ /dev/null @@ -1,97 +0,0 @@ -struct appdata_img { - vec4 vertex; - vec2 texcoord; -}; -struct v2f { - vec4 pos; - vec2 uv; - vec2 uvg; - vec2 uvs; -}; -uniform vec4 _ScratchOffsetScale; -uniform vec4 _GrainOffsetScale; -vec2 MultiplyUV ( - in mat4 mat, - in vec2 inUV -) -{ - vec4 temp; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.x = inUV.x; - tmpvar_1.y = inUV.y; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - temp = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (mat * temp); - temp = tmpvar_3; - return temp.xy; -} - -v2f vert ( - in appdata_img v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = MultiplyUV (gl_TextureMatrix[0], v.texcoord); - vec2 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.uv = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord.xy * _GrainOffsetScale.zw) + _GrainOffsetScale.xy); - o.uvg = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = ((v.texcoord.xy * _ScratchOffsetScale.zw) + _ScratchOffsetScale.xy); - o.uvs = tmpvar_5; - return o; -} - -void main () -{ - appdata_img xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 0.0); - tmpvar_9.xy = xl_retval.uv.xy; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_TexCoord[0] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.uvg.xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[1] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.uvs.xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[2] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-out.txt deleted file mode 100644 index 8e1acf1de..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-out.txt +++ /dev/null @@ -1,23 +0,0 @@ -uniform vec4 _ScratchOffsetScale; -uniform vec4 _GrainOffsetScale; -void main () -{ - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.x = gl_MultiTexCoord0.x; - tmpvar_1.y = gl_MultiTexCoord0.y; - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = (gl_TextureMatrix[0] * tmpvar_1).xy; - gl_TexCoord[0] = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 0.0); - tmpvar_3.xy = ((gl_MultiTexCoord0.xy * _GrainOffsetScale.zw) + _GrainOffsetScale.xy); - gl_TexCoord[1] = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.xy = ((gl_MultiTexCoord0.xy * _ScratchOffsetScale.zw) + _ScratchOffsetScale.xy); - gl_TexCoord[2] = tmpvar_4; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-ir.txt deleted file mode 100644 index b2fca6127..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-ir.txt +++ /dev/null @@ -1,154 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 color; - vec2 uv; -}; -struct appdata_tree_billboard { - vec4 vertex; - vec4 color; - vec4 texcoord; - vec2 texcoord1; -}; -varying vec4 xlv_FOG; -uniform vec4 _TreeBillboardDistances; -uniform vec4 _TreeBillboardCameraUp; -uniform vec3 _TreeBillboardCameraRight; -uniform vec4 _TreeBillboardCameraPos; -uniform vec4 _TreeBillboardCameraFront; -void TerrainBillboardTree ( - inout vec4 pos, - in vec2 offset, - in float offsetz -) -{ - float absRadius; - float billboardRootOffsetFactor; - float billboardModeFactor; - float radius; - float billboardAngleFactor; - float treeDistanceSqr; - vec3 treePos; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz - _TreeBillboardCameraPos.xyz); - treePos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (treePos, treePos); - float tmpvar_3; - tmpvar_3 = tmpvar_2; - treeDistanceSqr = tmpvar_3; - if ((treeDistanceSqr > _TreeBillboardDistances.x)) { - vec2 tmpvar_4; - tmpvar_4 = vec2(0.0, 0.0); - offset = tmpvar_4.xy.xy; - }; - vec3 tmpvar_5; - tmpvar_5 = (pos.xyz + (_TreeBillboardCameraRight.xyz * offset.x)); - pos.xyz = tmpvar_5.xyz.xyz; - float tmpvar_6; - tmpvar_6 = _TreeBillboardCameraPos.w; - billboardAngleFactor = tmpvar_6; - float tmpvar_7; - tmpvar_7 = mix (offset.y, offsetz, billboardAngleFactor); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - radius = tmpvar_8; - float tmpvar_9; - tmpvar_9 = _TreeBillboardCameraUp.w; - billboardModeFactor = tmpvar_9; - float tmpvar_10; - tmpvar_10 = _TreeBillboardCameraFront.w; - billboardRootOffsetFactor = tmpvar_10; - float tmpvar_11; - tmpvar_11 = abs (radius); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - absRadius = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, radius); - vec3 tmpvar_14; - tmpvar_14 = vec3(billboardModeFactor); - vec3 tmpvar_15; - tmpvar_15 = mix (((((_TreeBillboardCameraUp.xyz * tmpvar_13) * 2.0) - (vec3(0.0, 1.0, 0.0) * absRadius)) - ((_TreeBillboardCameraUp.xyz * absRadius) * billboardRootOffsetFactor)), (_TreeBillboardCameraUp.xyz * radius), tmpvar_14); - vec3 tmpvar_16; - tmpvar_16 = (pos.xyz + tmpvar_15); - pos.xyz = tmpvar_16.xyz.xyz; -} - -v2f vert ( - in appdata_tree_billboard v -) -{ - v2f o; - TerrainBillboardTree (v.vertex, v.texcoord1.xy, v.texcoord.y); - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = o.pos.z; - o.fog = tmpvar_2; - float tmpvar_3; - tmpvar_3 = v.texcoord.x; - o.uv.x = tmpvar_3; - float tmpvar_4; - tmpvar_4 = float((v.texcoord.y > 0.0)); - o.uv.y = vec2(tmpvar_4).y; - vec4 tmpvar_5; - tmpvar_5 = v.color; - o.color = tmpvar_5; - return o; -} - -void main () -{ - appdata_tree_billboard xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord1.xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord1 = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = vert (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_13.x = xl_retval.fog; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_FOG = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.color.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FrontColor = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.uv.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-out.txt deleted file mode 100644 index c9c8d4c78..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-out.txt +++ /dev/null @@ -1,44 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _TreeBillboardDistances; -uniform vec4 _TreeBillboardCameraUp; -uniform vec3 _TreeBillboardCameraRight; -uniform vec4 _TreeBillboardCameraPos; -uniform vec4 _TreeBillboardCameraFront; -void main () -{ - vec2 tmpvar_1; - vec4 pos; - pos = gl_Vertex; - vec2 offset; - offset = gl_MultiTexCoord1.xy; - float offsetz; - offsetz = gl_MultiTexCoord0.y; - vec3 tmpvar_2; - tmpvar_2 = (gl_Vertex.xyz - _TreeBillboardCameraPos.xyz); - float tmpvar_3; - tmpvar_3 = dot (tmpvar_2, tmpvar_2); - if ((tmpvar_3 > _TreeBillboardDistances.x)) { - offset = vec2(0.0, 0.0); - }; - pos.xyz = (gl_Vertex.xyz + (_TreeBillboardCameraRight * offset.x)); - float tmpvar_4; - tmpvar_4 = mix (offset.y, offsetz, _TreeBillboardCameraPos.w); - float tmpvar_5; - tmpvar_5 = abs (tmpvar_4); - pos.xyz = (pos.xyz + mix (((((_TreeBillboardCameraUp.xyz * max (0.0, tmpvar_4)) * 2.0) - (vec3(0.0, 1.0, 0.0) * tmpvar_5)) - ((_TreeBillboardCameraUp.xyz * tmpvar_5) * _TreeBillboardCameraFront.w)), (_TreeBillboardCameraUp.xyz * tmpvar_4), _TreeBillboardCameraUp.www)); - vec4 tmpvar_6; - tmpvar_6 = (gl_ModelViewProjectionMatrix * pos); - tmpvar_1.x = gl_MultiTexCoord0.x; - tmpvar_1.y = float((gl_MultiTexCoord0.y > 0.0)); - gl_Position = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_7.x = tmpvar_6.z; - xlv_FOG = tmpvar_7; - gl_FrontColor = gl_Color; - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = tmpvar_1; - gl_TexCoord[0] = tmpvar_8; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt deleted file mode 100644 index 0455f960b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt +++ /dev/null @@ -1,527 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 vlight; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec3 _CameraUp; -uniform vec3 _CameraRight; -uniform vec4 _CameraPosition; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void FastSinCos ( - in vec4 val, - out vec4 s, - out vec4 c -) -{ - vec4 cos8; - vec4 sin7; - vec4 r3; - vec4 r2; - vec4 r1; - vec4 r8; - vec4 r7; - vec4 r6; - vec4 r5; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); - sin7 = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); - cos8 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ((val * 6.40885) - 3.14159); - val = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (val * val); - r5 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (r5 * r5); - r6 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (r6 * r5); - r7 = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (r6 * r5); - r8 = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (r5 * val); - r1 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (r1 * r5); - r2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (r2 * r5); - r3 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (((val + (r1 * sin7.y)) + (r2 * sin7.z)) + (r3 * sin7.w)); - s = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = ((((1.0 + (r5 * cos8.x)) + (r6 * cos8.y)) + (r7 * cos8.z)) + (r8 * cos8.w)); - c = tmpvar_12; -} - -void TerrainWaveGrass ( - inout vec4 vertex, - in float waveAmount, - in vec3 color, - out vec4 outColor -) -{ - vec3 waveColor; - vec3 waveMove; - float lighting; - vec4 c; - vec4 s; - vec4 waves; - vec4 _waveZmove; - vec4 _waveXmove; - vec4 waveSpeed; - vec4 _waveZSize; - vec4 _waveXSize; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.2, 2.0, 1.6, 4.8); - waveSpeed = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.024, 0.04, -0.12, 0.096); - _waveXmove = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(0.006, 0.02, -0.02, 0.1); - _waveZmove = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - waveMove = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); - _waveXSize = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); - _waveZSize = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (vertex.x * _waveXSize); - waves = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (waves + (vertex.z * _waveZSize)); - waves = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (waves + (_WaveAndDistance.x * waveSpeed)); - waves = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = fract (waves); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - waves = tmpvar_11; - FastSinCos (waves, s, c); - vec4 tmpvar_12; - tmpvar_12 = (s * s); - s = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = (s * s); - s = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); - float tmpvar_15; - tmpvar_15 = dot (s, tmpvar_14); - float tmpvar_16; - tmpvar_16 = (tmpvar_15 * 0.7); - lighting = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (s * waveAmount); - s = tmpvar_17; - float tmpvar_18; - tmpvar_18 = dot (s, _waveXmove); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - waveMove.x = tmpvar_19; - float tmpvar_20; - tmpvar_20 = dot (s, _waveZmove); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - waveMove.z = vec3(tmpvar_21).z; - vec2 tmpvar_22; - tmpvar_22 = (vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - vertex.xz = tmpvar_22.xxy.xz; - vec3 tmpvar_23; - tmpvar_23 = vec3(lighting); - vec3 tmpvar_24; - tmpvar_24 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_23); - vec3 tmpvar_25; - tmpvar_25 = tmpvar_24; - waveColor = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = ((color * waveColor) * 2.0); - outColor.xyz = tmpvar_26.xyz.xyz; - float tmpvar_27; - tmpvar_27 = 1.0; - outColor.w = vec4(tmpvar_27).w; -} - -void TerrainBillboardGrass ( - inout vec4 pos, - in vec2 offset -) -{ - vec3 grasspos; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz - _CameraPosition.xyz); - grasspos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (grasspos, grasspos); - if ((tmpvar_2 > _WaveAndDistance.w)) { - vec2 tmpvar_3; - tmpvar_3 = vec2(0.0, 0.0); - offset = tmpvar_3; - }; - vec3 tmpvar_4; - tmpvar_4 = (pos.xyz + (offset.x * _CameraRight.xyz)); - pos.xyz = tmpvar_4.xyz.xyz; - vec3 tmpvar_5; - tmpvar_5 = (pos.xyz + (offset.y * _CameraUp.xyz)); - pos.xyz = tmpvar_5.xyz.xyz; -} - -void vert ( - inout appdata_full v -) -{ - vec4 color; - float waveAmount; - TerrainBillboardGrass (v.vertex, v.tangent.xy); - float tmpvar_1; - tmpvar_1 = v.tangent.y; - waveAmount = tmpvar_1; - TerrainWaveGrass (v.vertex, waveAmount, v.color.xyz, color); - vec4 tmpvar_2; - tmpvar_2 = color; - v.color = tmpvar_2; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -vec3 Shade4PointLights ( - in vec4 lightPosX, - in vec4 lightPosY, - in vec4 lightPosZ, - in vec3 lightColor0, - in vec3 lightColor1, - in vec3 lightColor2, - in vec3 lightColor3, - in vec4 lightAttenSq, - in vec3 pos, - in vec3 normal -) -{ - vec3 col; - vec4 diff; - vec4 atten; - vec4 corr; - vec4 ndotl; - vec4 lengthSq; - vec4 toLightZ; - vec4 toLightY; - vec4 toLightX; - vec4 tmpvar_1; - tmpvar_1 = (lightPosX - pos.x); - toLightX = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (lightPosY - pos.y); - toLightY = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (lightPosZ - pos.z); - toLightZ = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); - lengthSq = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (lengthSq + (toLightX * toLightX)); - lengthSq = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (lengthSq + (toLightY * toLightY)); - lengthSq = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (lengthSq + (toLightZ * toLightZ)); - lengthSq = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); - ndotl = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (ndotl + (toLightX * normal.x)); - ndotl = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (ndotl + (toLightY * normal.y)); - ndotl = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (ndotl + (toLightZ * normal.z)); - ndotl = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = inversesqrt (lengthSq); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - corr = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl * corr)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - ndotl = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = (1.0 / (1.0 + (lengthSq * lightAttenSq))); - atten = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (ndotl * atten); - diff = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = vec3(0.0, 0.0, 0.0); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col + (lightColor0 * diff.x)); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col + (lightColor1 * diff.y)); - col = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (col + (lightColor2 * diff.z)); - col = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (col + (lightColor3 * diff.w)); - col = tmpvar_22; - return col; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 worldPos; - vec3 shlight; - vec3 worldN; - v2f_surf o; - vert (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - worldN = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = worldN; - o.normal = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.w = 1.0; - tmpvar_6.xyz = worldN.xyz; - vec3 tmpvar_7; - tmpvar_7 = ShadeSH9 (tmpvar_6); - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - shlight = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = shlight; - o.vlight = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (_Object2World * v.vertex).xyz; - worldPos = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos, worldN); - vec3 tmpvar_12; - tmpvar_12 = (o.vlight + tmpvar_11); - o.vlight = tmpvar_12; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.normal.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt deleted file mode 100644 index 047690b2e..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt +++ /dev/null @@ -1,119 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec3 _CameraUp; -uniform vec3 _CameraRight; -uniform vec4 _CameraPosition; -void main () -{ - vec4 pos; - pos = gl_Vertex; - vec2 offset; - offset = TANGENT.xy; - vec3 tmpvar_1; - tmpvar_1 = (gl_Vertex.xyz - _CameraPosition.xyz); - float tmpvar_2; - tmpvar_2 = dot (tmpvar_1, tmpvar_1); - if ((tmpvar_2 > _WaveAndDistance.w)) { - offset = vec2(0.0, 0.0); - }; - pos.xyz = (gl_Vertex.xyz + (offset.x * _CameraRight)); - pos.xyz = (pos.xyz + (offset.y * _CameraUp)); - vec4 vertex; - vertex = pos; - vec4 outColor; - vec3 waveMove; - waveMove = vec3(0.0, 0.0, 0.0); - vec4 tmpvar_3; - tmpvar_3 = ((fract ((((pos.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (pos.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * tmpvar_3); - vec4 tmpvar_5; - tmpvar_5 = (tmpvar_4 * tmpvar_3); - vec4 tmpvar_6; - tmpvar_6 = (tmpvar_5 * tmpvar_4); - vec4 tmpvar_7; - tmpvar_7 = (((tmpvar_3 + (tmpvar_5 * -0.161616)) + (tmpvar_6 * 0.0083333)) + ((tmpvar_6 * tmpvar_4) * -0.00019841)); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * tmpvar_7); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_8 * tmpvar_8); - vec4 tmpvar_10; - tmpvar_10 = (tmpvar_9 * TANGENT.y); - waveMove.x = dot (tmpvar_10, vec4(0.024, 0.04, -0.12, 0.096)); - waveMove.z = dot (tmpvar_10, vec4(0.006, 0.02, -0.02, 0.1)); - vertex.xz = (pos.xz - (waveMove.xz * _WaveAndDistance.z)); - outColor.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_9, vec4(0.6742, 0.6742, 0.26968, 0.13484)) * 0.7)))) * 2.0); - outColor.w = 1.0; - vec4 tmpvar_11; - tmpvar_11 = (gl_ModelViewProjectionMatrix * vertex); - mat3 tmpvar_12; - tmpvar_12[0] = _Object2World[0].xyz; - tmpvar_12[1] = _Object2World[1].xyz; - tmpvar_12[2] = _Object2World[2].xyz; - vec3 tmpvar_13; - tmpvar_13 = (tmpvar_12 * (gl_Normal * unity_Scale.w)); - vec4 tmpvar_14; - tmpvar_14.w = 1.0; - tmpvar_14.xyz = tmpvar_13; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_14); - x1.y = dot (unity_SHAg, tmpvar_14); - x1.z = dot (unity_SHAb, tmpvar_14); - vec4 tmpvar_15; - tmpvar_15 = (tmpvar_13.xyzz * tmpvar_13.yzzx); - x2.x = dot (unity_SHBr, tmpvar_15); - x2.y = dot (unity_SHBg, tmpvar_15); - x2.z = dot (unity_SHBb, tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = (_Object2World * vertex).xyz; - vec4 tmpvar_17; - tmpvar_17 = (unity_4LightPosX0 - tmpvar_16.x); - vec4 tmpvar_18; - tmpvar_18 = (unity_4LightPosY0 - tmpvar_16.y); - vec4 tmpvar_19; - tmpvar_19 = (unity_4LightPosZ0 - tmpvar_16.z); - vec4 tmpvar_20; - tmpvar_20 = (((tmpvar_17 * tmpvar_17) + (tmpvar_18 * tmpvar_18)) + (tmpvar_19 * tmpvar_19)); - vec4 tmpvar_21; - tmpvar_21 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_17 * tmpvar_13.x) + (tmpvar_18 * tmpvar_13.y)) + (tmpvar_19 * tmpvar_13.z)) * inversesqrt (tmpvar_20))) * (1.0/((1.0 + (tmpvar_20 * unity_4LightAtten0))))); - gl_Position = tmpvar_11; - vec4 tmpvar_22; - tmpvar_22.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_22.x = tmpvar_11.z; - xlv_FOG = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_23; - gl_FrontColor = outColor; - vec4 tmpvar_24; - tmpvar_24.w = 0.0; - tmpvar_24.xyz = tmpvar_13; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = (((x1 + x2) + (unity_SHC.xyz * ((tmpvar_13.x * tmpvar_13.x) - (tmpvar_13.y * tmpvar_13.y)))) + ((((unity_LightColor0 * tmpvar_21.x) + (unity_LightColor1 * tmpvar_21.y)) + (unity_LightColor2 * tmpvar_21.z)) + (unity_LightColor3 * tmpvar_21.w))); - gl_TexCoord[2] = tmpvar_25; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt deleted file mode 100644 index 7db8e7dd8..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt +++ /dev/null @@ -1,375 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec3 _CameraUp; -uniform vec3 _CameraRight; -uniform vec4 _CameraPosition; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void FastSinCos ( - in vec4 val, - out vec4 s, - out vec4 c -) -{ - vec4 cos8; - vec4 sin7; - vec4 r3; - vec4 r2; - vec4 r1; - vec4 r8; - vec4 r7; - vec4 r6; - vec4 r5; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); - sin7 = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); - cos8 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ((val * 6.40885) - 3.14159); - val = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (val * val); - r5 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (r5 * r5); - r6 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (r6 * r5); - r7 = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (r6 * r5); - r8 = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (r5 * val); - r1 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (r1 * r5); - r2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (r2 * r5); - r3 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (((val + (r1 * sin7.y)) + (r2 * sin7.z)) + (r3 * sin7.w)); - s = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = ((((1.0 + (r5 * cos8.x)) + (r6 * cos8.y)) + (r7 * cos8.z)) + (r8 * cos8.w)); - c = tmpvar_12; -} - -void TerrainWaveGrass ( - inout vec4 vertex, - in float waveAmount, - in vec3 color, - out vec4 outColor -) -{ - vec3 waveColor; - vec3 waveMove; - float lighting; - vec4 c; - vec4 s; - vec4 waves; - vec4 _waveZmove; - vec4 _waveXmove; - vec4 waveSpeed; - vec4 _waveZSize; - vec4 _waveXSize; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.2, 2.0, 1.6, 4.8); - waveSpeed = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.024, 0.04, -0.12, 0.096); - _waveXmove = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(0.006, 0.02, -0.02, 0.1); - _waveZmove = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - waveMove = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); - _waveXSize = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); - _waveZSize = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (vertex.x * _waveXSize); - waves = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (waves + (vertex.z * _waveZSize)); - waves = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (waves + (_WaveAndDistance.x * waveSpeed)); - waves = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = fract (waves); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - waves = tmpvar_11; - FastSinCos (waves, s, c); - vec4 tmpvar_12; - tmpvar_12 = (s * s); - s = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = (s * s); - s = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); - float tmpvar_15; - tmpvar_15 = dot (s, tmpvar_14); - float tmpvar_16; - tmpvar_16 = (tmpvar_15 * 0.7); - lighting = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (s * waveAmount); - s = tmpvar_17; - float tmpvar_18; - tmpvar_18 = dot (s, _waveXmove); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - waveMove.x = tmpvar_19; - float tmpvar_20; - tmpvar_20 = dot (s, _waveZmove); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - waveMove.z = vec3(tmpvar_21).z; - vec2 tmpvar_22; - tmpvar_22 = (vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - vertex.xz = tmpvar_22.xxy.xz; - vec3 tmpvar_23; - tmpvar_23 = vec3(lighting); - vec3 tmpvar_24; - tmpvar_24 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_23); - vec3 tmpvar_25; - tmpvar_25 = tmpvar_24; - waveColor = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = ((color * waveColor) * 2.0); - outColor.xyz = tmpvar_26.xyz.xyz; - float tmpvar_27; - tmpvar_27 = 1.0; - outColor.w = vec4(tmpvar_27).w; -} - -void TerrainBillboardGrass ( - inout vec4 pos, - in vec2 offset -) -{ - vec3 grasspos; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz - _CameraPosition.xyz); - grasspos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (grasspos, grasspos); - if ((tmpvar_2 > _WaveAndDistance.w)) { - vec2 tmpvar_3; - tmpvar_3 = vec2(0.0, 0.0); - offset = tmpvar_3; - }; - vec3 tmpvar_4; - tmpvar_4 = (pos.xyz + (offset.x * _CameraRight.xyz)); - pos.xyz = tmpvar_4.xyz.xyz; - vec3 tmpvar_5; - tmpvar_5 = (pos.xyz + (offset.y * _CameraUp.xyz)); - pos.xyz = tmpvar_5.xyz.xyz; -} - -void vert ( - inout appdata_full v -) -{ - vec4 color; - float waveAmount; - TerrainBillboardGrass (v.vertex, v.tangent.xy); - float tmpvar_1; - tmpvar_1 = v.tangent.y; - waveAmount = tmpvar_1; - TerrainWaveGrass (v.vertex, waveAmount, v.color.xyz, color); - vec4 tmpvar_2; - tmpvar_2 = color; - v.color = tmpvar_2; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vert (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_7; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.normal.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt deleted file mode 100644 index 2fc97c544..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt +++ /dev/null @@ -1,83 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec3 _CameraUp; -uniform vec3 _CameraRight; -uniform vec4 _CameraPosition; -void main () -{ - vec4 pos; - pos = gl_Vertex; - vec2 offset; - offset = TANGENT.xy; - vec3 tmpvar_1; - tmpvar_1 = (gl_Vertex.xyz - _CameraPosition.xyz); - float tmpvar_2; - tmpvar_2 = dot (tmpvar_1, tmpvar_1); - if ((tmpvar_2 > _WaveAndDistance.w)) { - offset = vec2(0.0, 0.0); - }; - pos.xyz = (gl_Vertex.xyz + (offset.x * _CameraRight)); - pos.xyz = (pos.xyz + (offset.y * _CameraUp)); - vec4 vertex; - vertex = pos; - vec4 outColor; - vec3 waveMove; - waveMove = vec3(0.0, 0.0, 0.0); - vec4 tmpvar_3; - tmpvar_3 = ((fract ((((pos.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (pos.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * tmpvar_3); - vec4 tmpvar_5; - tmpvar_5 = (tmpvar_4 * tmpvar_3); - vec4 tmpvar_6; - tmpvar_6 = (tmpvar_5 * tmpvar_4); - vec4 tmpvar_7; - tmpvar_7 = (((tmpvar_3 + (tmpvar_5 * -0.161616)) + (tmpvar_6 * 0.0083333)) + ((tmpvar_6 * tmpvar_4) * -0.00019841)); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * tmpvar_7); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_8 * tmpvar_8); - vec4 tmpvar_10; - tmpvar_10 = (tmpvar_9 * TANGENT.y); - waveMove.x = dot (tmpvar_10, vec4(0.024, 0.04, -0.12, 0.096)); - waveMove.z = dot (tmpvar_10, vec4(0.006, 0.02, -0.02, 0.1)); - vertex.xz = (pos.xz - (waveMove.xz * _WaveAndDistance.z)); - outColor.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_9, vec4(0.6742, 0.6742, 0.26968, 0.13484)) * 0.7)))) * 2.0); - outColor.w = 1.0; - vec4 tmpvar_11; - tmpvar_11 = (gl_ModelViewProjectionMatrix * vertex); - mat3 tmpvar_12; - tmpvar_12[0] = _Object2World[0].xyz; - tmpvar_12[1] = _Object2World[1].xyz; - tmpvar_12[2] = _Object2World[2].xyz; - gl_Position = tmpvar_11; - vec4 tmpvar_13; - tmpvar_13.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_13.x = tmpvar_11.z; - xlv_FOG = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14.zw = vec2(0.0, 0.0); - tmpvar_14.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_14; - gl_FrontColor = outColor; - vec4 tmpvar_15; - tmpvar_15.w = 0.0; - tmpvar_15.xyz = (tmpvar_12 * (gl_Normal * unity_Scale.w)); - gl_TexCoord[1] = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16.w = 0.0; - tmpvar_16.xyz = (_WorldSpaceLightPos0.xyz - (_Object2World * vertex).xyz); - gl_TexCoord[2] = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = (_LightMatrix0 * (_Object2World * vertex)).xyz; - gl_TexCoord[3] = tmpvar_17; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt deleted file mode 100644 index 4fcd54600..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt +++ /dev/null @@ -1,292 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec4 lop_color; -}; -attribute vec4 TANGENT; -uniform vec4 unity_LightShadowBias; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform vec4 _MainTex_ST; -uniform vec3 _CameraUp; -uniform vec3 _CameraRight; -uniform vec4 _CameraPosition; -void FastSinCos ( - in vec4 val, - out vec4 s, - out vec4 c -) -{ - vec4 cos8; - vec4 sin7; - vec4 r3; - vec4 r2; - vec4 r1; - vec4 r8; - vec4 r7; - vec4 r6; - vec4 r5; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); - sin7 = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); - cos8 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ((val * 6.40885) - 3.14159); - val = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (val * val); - r5 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (r5 * r5); - r6 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (r6 * r5); - r7 = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (r6 * r5); - r8 = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (r5 * val); - r1 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (r1 * r5); - r2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (r2 * r5); - r3 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (((val + (r1 * sin7.y)) + (r2 * sin7.z)) + (r3 * sin7.w)); - s = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = ((((1.0 + (r5 * cos8.x)) + (r6 * cos8.y)) + (r7 * cos8.z)) + (r8 * cos8.w)); - c = tmpvar_12; -} - -void TerrainWaveGrass ( - inout vec4 vertex, - in float waveAmount, - in vec3 color, - out vec4 outColor -) -{ - vec3 waveColor; - vec3 waveMove; - float lighting; - vec4 c; - vec4 s; - vec4 waves; - vec4 _waveZmove; - vec4 _waveXmove; - vec4 waveSpeed; - vec4 _waveZSize; - vec4 _waveXSize; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.2, 2.0, 1.6, 4.8); - waveSpeed = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.024, 0.04, -0.12, 0.096); - _waveXmove = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(0.006, 0.02, -0.02, 0.1); - _waveZmove = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - waveMove = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); - _waveXSize = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); - _waveZSize = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (vertex.x * _waveXSize); - waves = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (waves + (vertex.z * _waveZSize)); - waves = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (waves + (_WaveAndDistance.x * waveSpeed)); - waves = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = fract (waves); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - waves = tmpvar_11; - FastSinCos (waves, s, c); - vec4 tmpvar_12; - tmpvar_12 = (s * s); - s = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = (s * s); - s = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); - float tmpvar_15; - tmpvar_15 = dot (s, tmpvar_14); - float tmpvar_16; - tmpvar_16 = (tmpvar_15 * 0.7); - lighting = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (s * waveAmount); - s = tmpvar_17; - float tmpvar_18; - tmpvar_18 = dot (s, _waveXmove); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - waveMove.x = tmpvar_19; - float tmpvar_20; - tmpvar_20 = dot (s, _waveZmove); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - waveMove.z = vec3(tmpvar_21).z; - vec2 tmpvar_22; - tmpvar_22 = (vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - vertex.xz = tmpvar_22.xxy.xz; - vec3 tmpvar_23; - tmpvar_23 = vec3(lighting); - vec3 tmpvar_24; - tmpvar_24 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_23); - vec3 tmpvar_25; - tmpvar_25 = tmpvar_24; - waveColor = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = ((color * waveColor) * 2.0); - outColor.xyz = tmpvar_26.xyz.xyz; - float tmpvar_27; - tmpvar_27 = 1.0; - outColor.w = vec4(tmpvar_27).w; -} - -void TerrainBillboardGrass ( - inout vec4 pos, - in vec2 offset -) -{ - vec3 grasspos; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz - _CameraPosition.xyz); - grasspos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = dot (grasspos, grasspos); - if ((tmpvar_2 > _WaveAndDistance.w)) { - vec2 tmpvar_3; - tmpvar_3 = vec2(0.0, 0.0); - offset = tmpvar_3; - }; - vec3 tmpvar_4; - tmpvar_4 = (pos.xyz + (offset.x * _CameraRight.xyz)); - pos.xyz = tmpvar_4.xyz.xyz; - vec3 tmpvar_5; - tmpvar_5 = (pos.xyz + (offset.y * _CameraUp.xyz)); - pos.xyz = tmpvar_5.xyz.xyz; -} - -void vert ( - inout appdata_full v -) -{ - vec4 color; - float waveAmount; - TerrainBillboardGrass (v.vertex, v.tangent.xy); - float tmpvar_1; - tmpvar_1 = v.tangent.y; - waveAmount = tmpvar_1; - TerrainWaveGrass (v.vertex, waveAmount, v.color.xyz, color); - vec4 tmpvar_2; - tmpvar_2 = color; - v.color = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vert (v); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (o.pos.z + unity_LightShadowBias.x); - o.pos.z = vec3(tmpvar_4).z; - if ((o.pos.z < -(o.pos.w))) { - float tmpvar_5; - tmpvar_5 = -(o.pos.w); - o.pos.z = vec3(tmpvar_5).z; - }; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[1] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.lop_color.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_FrontColor = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt deleted file mode 100644 index 1a4059276..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt +++ /dev/null @@ -1,67 +0,0 @@ -attribute vec4 TANGENT; -uniform vec4 unity_LightShadowBias; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform vec4 _MainTex_ST; -uniform vec3 _CameraUp; -uniform vec3 _CameraRight; -uniform vec4 _CameraPosition; -void main () -{ - vec4 tmpvar_1; - vec2 tmpvar_2; - vec4 pos; - pos = gl_Vertex; - vec2 offset; - offset = TANGENT.xy; - vec3 tmpvar_3; - tmpvar_3 = (gl_Vertex.xyz - _CameraPosition.xyz); - float tmpvar_4; - tmpvar_4 = dot (tmpvar_3, tmpvar_3); - if ((tmpvar_4 > _WaveAndDistance.w)) { - offset = vec2(0.0, 0.0); - }; - pos.xyz = (gl_Vertex.xyz + (offset.x * _CameraRight)); - pos.xyz = (pos.xyz + (offset.y * _CameraUp)); - vec4 vertex; - vertex = pos; - vec4 outColor; - vec3 waveMove; - waveMove = vec3(0.0, 0.0, 0.0); - vec4 tmpvar_5; - tmpvar_5 = ((fract ((((pos.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (pos.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); - vec4 tmpvar_6; - tmpvar_6 = (tmpvar_5 * tmpvar_5); - vec4 tmpvar_7; - tmpvar_7 = (tmpvar_6 * tmpvar_5); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * tmpvar_6); - vec4 tmpvar_9; - tmpvar_9 = (((tmpvar_5 + (tmpvar_7 * -0.161616)) + (tmpvar_8 * 0.0083333)) + ((tmpvar_8 * tmpvar_6) * -0.00019841)); - vec4 tmpvar_10; - tmpvar_10 = (tmpvar_9 * tmpvar_9); - vec4 tmpvar_11; - tmpvar_11 = (tmpvar_10 * tmpvar_10); - vec4 tmpvar_12; - tmpvar_12 = (tmpvar_11 * TANGENT.y); - waveMove.x = dot (tmpvar_12, vec4(0.024, 0.04, -0.12, 0.096)); - waveMove.z = dot (tmpvar_12, vec4(0.006, 0.02, -0.02, 0.1)); - vertex.xz = (pos.xz - (waveMove.xz * _WaveAndDistance.z)); - outColor.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_11, vec4(0.6742, 0.6742, 0.26968, 0.13484)) * 0.7)))) * 2.0); - outColor.w = 1.0; - tmpvar_2 = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - vec4 tmpvar_13; - tmpvar_13 = (gl_ModelViewProjectionMatrix * vertex); - tmpvar_1 = tmpvar_13; - tmpvar_1.z = (tmpvar_13.z + unity_LightShadowBias.x); - if ((tmpvar_1.z < -(tmpvar_13.w))) { - tmpvar_1.z = -(tmpvar_13.w); - }; - gl_Position = tmpvar_1; - vec4 tmpvar_14; - tmpvar_14.zw = vec2(0.0, 0.0); - tmpvar_14.xy = tmpvar_2; - gl_TexCoord[1] = tmpvar_14; - gl_FrontColor = outColor; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt deleted file mode 100644 index 2bdac3dbe..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt +++ /dev/null @@ -1,346 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void FastSinCos ( - in vec4 val, - out vec4 s, - out vec4 c -) -{ - vec4 cos8; - vec4 sin7; - vec4 r3; - vec4 r2; - vec4 r1; - vec4 r8; - vec4 r7; - vec4 r6; - vec4 r5; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); - sin7 = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); - cos8 = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ((val * 6.40885) - 3.14159); - val = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (val * val); - r5 = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (r5 * r5); - r6 = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (r6 * r5); - r7 = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (r6 * r5); - r8 = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (r5 * val); - r1 = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (r1 * r5); - r2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (r2 * r5); - r3 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (((val + (r1 * sin7.y)) + (r2 * sin7.z)) + (r3 * sin7.w)); - s = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = ((((1.0 + (r5 * cos8.x)) + (r6 * cos8.y)) + (r7 * cos8.z)) + (r8 * cos8.w)); - c = tmpvar_12; -} - -void TerrainWaveGrass ( - inout vec4 vertex, - in float waveAmount, - in vec3 color, - out vec4 outColor -) -{ - vec3 waveColor; - vec3 waveMove; - float lighting; - vec4 c; - vec4 s; - vec4 waves; - vec4 _waveZmove; - vec4 _waveXmove; - vec4 waveSpeed; - vec4 _waveZSize; - vec4 _waveXSize; - vec4 tmpvar_1; - tmpvar_1 = vec4(1.2, 2.0, 1.6, 4.8); - waveSpeed = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = vec4(0.024, 0.04, -0.12, 0.096); - _waveXmove = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = vec4(0.006, 0.02, -0.02, 0.1); - _waveZmove = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(0.0, 0.0, 0.0); - waveMove = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); - _waveXSize = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); - _waveZSize = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (vertex.x * _waveXSize); - waves = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (waves + (vertex.z * _waveZSize)); - waves = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (waves + (_WaveAndDistance.x * waveSpeed)); - waves = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = fract (waves); - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - waves = tmpvar_11; - FastSinCos (waves, s, c); - vec4 tmpvar_12; - tmpvar_12 = (s * s); - s = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = (s * s); - s = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); - float tmpvar_15; - tmpvar_15 = dot (s, tmpvar_14); - float tmpvar_16; - tmpvar_16 = (tmpvar_15 * 0.7); - lighting = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (s * waveAmount); - s = tmpvar_17; - float tmpvar_18; - tmpvar_18 = dot (s, _waveXmove); - float tmpvar_19; - tmpvar_19 = tmpvar_18; - waveMove.x = tmpvar_19; - float tmpvar_20; - tmpvar_20 = dot (s, _waveZmove); - float tmpvar_21; - tmpvar_21 = tmpvar_20; - waveMove.z = vec3(tmpvar_21).z; - vec2 tmpvar_22; - tmpvar_22 = (vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - vertex.xz = tmpvar_22.xxy.xz; - vec3 tmpvar_23; - tmpvar_23 = vec3(lighting); - vec3 tmpvar_24; - tmpvar_24 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_23); - vec3 tmpvar_25; - tmpvar_25 = tmpvar_24; - waveColor = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = ((color * waveColor) * 2.0); - outColor.xyz = tmpvar_26.xyz.xyz; - float tmpvar_27; - tmpvar_27 = 1.0; - outColor.w = vec4(tmpvar_27).w; -} - -void vert ( - inout appdata_full v -) -{ - vec4 color; - float waveAmount; - float tmpvar_1; - tmpvar_1 = (v.color.w * _WaveAndDistance.z); - waveAmount = tmpvar_1; - TerrainWaveGrass (v.vertex, waveAmount, v.color.xyz, color); - vec4 tmpvar_2; - tmpvar_2 = color; - v.color = tmpvar_2; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vert (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_7; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.normal.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt deleted file mode 100644 index a032a431a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt +++ /dev/null @@ -1,63 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec4 _WavingTint; -uniform vec4 _WaveAndDistance; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -void main () -{ - vec4 vertex; - vertex = gl_Vertex; - vec4 outColor; - vec3 waveMove; - waveMove = vec3(0.0, 0.0, 0.0); - vec4 tmpvar_1; - tmpvar_1 = ((fract ((((gl_Vertex.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (gl_Vertex.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * tmpvar_1); - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * tmpvar_2); - vec4 tmpvar_5; - tmpvar_5 = (((tmpvar_1 + (tmpvar_3 * -0.161616)) + (tmpvar_4 * 0.0083333)) + ((tmpvar_4 * tmpvar_2) * -0.00019841)); - vec4 tmpvar_6; - tmpvar_6 = (tmpvar_5 * tmpvar_5); - vec4 tmpvar_7; - tmpvar_7 = (tmpvar_6 * tmpvar_6); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_7 * (gl_Color.w * _WaveAndDistance.z)); - waveMove.x = dot (tmpvar_8, vec4(0.024, 0.04, -0.12, 0.096)); - waveMove.z = dot (tmpvar_8, vec4(0.006, 0.02, -0.02, 0.1)); - vertex.xz = (gl_Vertex.xz - (waveMove.xz * _WaveAndDistance.z)); - outColor.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_7, vec4(0.6742, 0.6742, 0.26968, 0.13484)) * 0.7)))) * 2.0); - outColor.w = 1.0; - vec4 tmpvar_9; - tmpvar_9 = (gl_ModelViewProjectionMatrix * vertex); - mat3 tmpvar_10; - tmpvar_10[0] = _Object2World[0].xyz; - tmpvar_10[1] = _Object2World[1].xyz; - tmpvar_10[2] = _Object2World[2].xyz; - gl_Position = tmpvar_9; - vec4 tmpvar_11; - tmpvar_11.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_11.x = tmpvar_9.z; - xlv_FOG = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12.zw = vec2(0.0, 0.0); - tmpvar_12.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_12; - gl_FrontColor = outColor; - vec4 tmpvar_13; - tmpvar_13.w = 0.0; - tmpvar_13.xyz = (tmpvar_10 * (gl_Normal * unity_Scale.w)); - gl_TexCoord[1] = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14.w = 0.0; - tmpvar_14.xyz = (_WorldSpaceLightPos0.xyz - (_Object2World * vertex).xyz); - gl_TexCoord[2] = tmpvar_14; - gl_TexCoord[3] = (_LightMatrix0 * (_Object2World * vertex)); -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt deleted file mode 100644 index d09aa2002..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt +++ /dev/null @@ -1,227 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 uv; - vec4 color; -}; -struct appdata_tree { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 color; - vec4 texcoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _Color; -uniform float _AO; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -v2f vert ( - in appdata_tree v -) -{ - float occ; - float atten; - int i; - vec4 lightColor; - vec4 lightDir; - v2f o; - vec3 viewpos; - int tmpvar_1; - tmpvar_1 = 0; - i = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 1.0; - atten = tmpvar_2; - TerrainAnimateTree (v.vertex, v.color.w); - vec3 tmpvar_3; - tmpvar_3 = (gl_ModelViewMatrix * v.vertex).xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - viewpos = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_5; - float tmpvar_6; - tmpvar_6 = o.pos.z; - o.fog = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = v.texcoord; - o.uv = tmpvar_7; - float tmpvar_8; - tmpvar_8 = _AO; - lightDir.w = vec4(tmpvar_8).w; - vec4 tmpvar_9; - tmpvar_9 = gl_LightModel.ambient; - lightColor = tmpvar_9; - while (true) { - if (!((i < 4))) { - break; - }; - vec3 tmpvar_10; - tmpvar_10 = _TerrainTreeLightDirections[i]; - lightDir.xyz = tmpvar_10.xyz.xyz; - float tmpvar_11; - tmpvar_11 = dot (lightDir.xyz, v.normal); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - occ = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, occ); - float tmpvar_14; - tmpvar_14 = tmpvar_13; - occ = tmpvar_14; - float tmpvar_15; - tmpvar_15 = (occ * atten); - occ = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = (lightColor + (_TerrainTreeLightColors[i] * occ)); - lightColor = tmpvar_16; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_17; - tmpvar_17 = (i + 1); - i = tmpvar_17; - }; - float tmpvar_18; - tmpvar_18 = 1.0; - lightColor.w = vec4(tmpvar_18).w; - vec4 tmpvar_19; - tmpvar_19 = (lightColor * _Color); - o.color = tmpvar_19; - float tmpvar_20; - tmpvar_20 = 1.0; - o.color.w = vec4(tmpvar_20).w; - return o; -} - -void main () -{ - appdata_tree xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_Color.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.color = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord = tmpvar_10; - v2f tmpvar_11; - tmpvar_11 = vert (xlt_v); - v2f tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.pos.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_Position = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_15.x = xl_retval.fog; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xlv_FOG = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.uv.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.color.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_FrontColor = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt deleted file mode 100644 index d42892552..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt +++ /dev/null @@ -1,52 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _Color; -uniform float _AO; -void main () -{ - vec4 lightColor; - vec4 lightDir; - vec4 tmpvar_1; - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); - vec3 tmpvar_3; - tmpvar_3.xz = vec2(0.0, 0.0); - tmpvar_3.y = _SquashPlaneNormal.w; - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (gl_ModelViewProjectionMatrix * tmpvar_4); - lightDir.w = _AO; - lightColor = gl_LightModel.ambient; - lightDir.xyz = _TerrainTreeLightDirections[0]; - lightColor = (lightColor + (_TerrainTreeLightColors[0] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightDir.xyz = _TerrainTreeLightDirections[1]; - lightColor = (lightColor + (_TerrainTreeLightColors[1] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightDir.xyz = _TerrainTreeLightDirections[2]; - lightColor = (lightColor + (_TerrainTreeLightColors[2] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightDir.xyz = _TerrainTreeLightDirections[3]; - lightColor = (lightColor + (_TerrainTreeLightColors[3] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightColor.w = 1.0; - tmpvar_1 = (lightColor * _Color); - tmpvar_1.w = 1.0; - gl_Position = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_5.z; - xlv_FOG = tmpvar_6; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_FrontColor = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt deleted file mode 100644 index d09aa2002..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt +++ /dev/null @@ -1,227 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 uv; - vec4 color; -}; -struct appdata_tree { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 color; - vec4 texcoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _Color; -uniform float _AO; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -v2f vert ( - in appdata_tree v -) -{ - float occ; - float atten; - int i; - vec4 lightColor; - vec4 lightDir; - v2f o; - vec3 viewpos; - int tmpvar_1; - tmpvar_1 = 0; - i = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 1.0; - atten = tmpvar_2; - TerrainAnimateTree (v.vertex, v.color.w); - vec3 tmpvar_3; - tmpvar_3 = (gl_ModelViewMatrix * v.vertex).xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - viewpos = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_5; - float tmpvar_6; - tmpvar_6 = o.pos.z; - o.fog = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = v.texcoord; - o.uv = tmpvar_7; - float tmpvar_8; - tmpvar_8 = _AO; - lightDir.w = vec4(tmpvar_8).w; - vec4 tmpvar_9; - tmpvar_9 = gl_LightModel.ambient; - lightColor = tmpvar_9; - while (true) { - if (!((i < 4))) { - break; - }; - vec3 tmpvar_10; - tmpvar_10 = _TerrainTreeLightDirections[i]; - lightDir.xyz = tmpvar_10.xyz.xyz; - float tmpvar_11; - tmpvar_11 = dot (lightDir.xyz, v.normal); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - occ = tmpvar_12; - float tmpvar_13; - tmpvar_13 = max (0.0, occ); - float tmpvar_14; - tmpvar_14 = tmpvar_13; - occ = tmpvar_14; - float tmpvar_15; - tmpvar_15 = (occ * atten); - occ = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = (lightColor + (_TerrainTreeLightColors[i] * occ)); - lightColor = tmpvar_16; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_17; - tmpvar_17 = (i + 1); - i = tmpvar_17; - }; - float tmpvar_18; - tmpvar_18 = 1.0; - lightColor.w = vec4(tmpvar_18).w; - vec4 tmpvar_19; - tmpvar_19 = (lightColor * _Color); - o.color = tmpvar_19; - float tmpvar_20; - tmpvar_20 = 1.0; - o.color.w = vec4(tmpvar_20).w; - return o; -} - -void main () -{ - appdata_tree xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_Color.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.color = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord = tmpvar_10; - v2f tmpvar_11; - tmpvar_11 = vert (xlt_v); - v2f tmpvar_12; - tmpvar_12 = tmpvar_11; - xl_retval = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = xl_retval.pos.xyzw; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_Position = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_15.x = xl_retval.fog; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - xlv_FOG = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.uv.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.color.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_FrontColor = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt deleted file mode 100644 index d42892552..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt +++ /dev/null @@ -1,52 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _Color; -uniform float _AO; -void main () -{ - vec4 lightColor; - vec4 lightDir; - vec4 tmpvar_1; - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); - vec3 tmpvar_3; - tmpvar_3.xz = vec2(0.0, 0.0); - tmpvar_3.y = _SquashPlaneNormal.w; - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (gl_ModelViewProjectionMatrix * tmpvar_4); - lightDir.w = _AO; - lightColor = gl_LightModel.ambient; - lightDir.xyz = _TerrainTreeLightDirections[0]; - lightColor = (lightColor + (_TerrainTreeLightColors[0] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightDir.xyz = _TerrainTreeLightDirections[1]; - lightColor = (lightColor + (_TerrainTreeLightColors[1] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightDir.xyz = _TerrainTreeLightDirections[2]; - lightColor = (lightColor + (_TerrainTreeLightColors[2] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightDir.xyz = _TerrainTreeLightDirections[3]; - lightColor = (lightColor + (_TerrainTreeLightColors[3] * max (0.0, dot (lightDir.xyz, gl_Normal)))); - lightColor.w = 1.0; - tmpvar_1 = (lightColor * _Color); - tmpvar_1.w = 1.0; - gl_Position = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_5.z; - xlv_FOG = tmpvar_6; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_FrontColor = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt deleted file mode 100644 index a7e6fe4be..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt +++ /dev/null @@ -1,384 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_pack1; - vec2 hip_pack2; - vec3 normal; - vec3 vlight; - vec4 _ShadowCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _Splat3_ST; -uniform vec4 _Splat2_ST; -uniform vec4 _Splat1_ST; -uniform vec4 _Splat0_ST; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _Control_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -vec3 Shade4PointLights ( - in vec4 lightPosX, - in vec4 lightPosY, - in vec4 lightPosZ, - in vec3 lightColor0, - in vec3 lightColor1, - in vec3 lightColor2, - in vec3 lightColor3, - in vec4 lightAttenSq, - in vec3 pos, - in vec3 normal -) -{ - vec3 col; - vec4 diff; - vec4 atten; - vec4 corr; - vec4 ndotl; - vec4 lengthSq; - vec4 toLightZ; - vec4 toLightY; - vec4 toLightX; - vec4 tmpvar_1; - tmpvar_1 = (lightPosX - pos.x); - toLightX = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (lightPosY - pos.y); - toLightY = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (lightPosZ - pos.z); - toLightZ = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); - lengthSq = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (lengthSq + (toLightX * toLightX)); - lengthSq = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (lengthSq + (toLightY * toLightY)); - lengthSq = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (lengthSq + (toLightZ * toLightZ)); - lengthSq = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); - ndotl = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (ndotl + (toLightX * normal.x)); - ndotl = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (ndotl + (toLightY * normal.y)); - ndotl = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (ndotl + (toLightZ * normal.z)); - ndotl = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = inversesqrt (lengthSq); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - corr = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl * corr)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - ndotl = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = (1.0 / (1.0 + (lengthSq * lightAttenSq))); - atten = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (ndotl * atten); - diff = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = vec3(0.0, 0.0, 0.0); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col + (lightColor0 * diff.x)); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col + (lightColor1 * diff.y)); - col = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (col + (lightColor2 * diff.z)); - col = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (col + (lightColor3 * diff.w)); - col = tmpvar_22; - return col; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 worldPos; - vec3 shlight; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _Control_ST.xy) + _Control_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _Splat0_ST.xy) + _Splat0_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _Splat1_ST.xy) + _Splat1_ST.zw); - o.hip_pack1.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord.xy * _Splat2_ST.xy) + _Splat2_ST.zw); - o.hip_pack1.zw = tmpvar_4.xxxy.zw; - vec2 tmpvar_5; - tmpvar_5 = ((v.texcoord.xy * _Splat3_ST.xy) + _Splat3_ST.zw); - o.hip_pack2 = tmpvar_5.xy.xy; - mat3 tmpvar_6; - tmpvar_6 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6 * (v.normal * unity_Scale.w)); - worldN = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = worldN; - o.normal = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = worldN.xyz; - vec3 tmpvar_10; - tmpvar_10 = ShadeSH9 (tmpvar_9); - vec3 tmpvar_11; - tmpvar_11 = tmpvar_10; - shlight = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = shlight; - o.vlight = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = (_Object2World * v.vertex).xyz; - worldPos = tmpvar_13; - vec3 tmpvar_14; - tmpvar_14 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos, worldN); - vec3 tmpvar_15; - tmpvar_15 = (o.vlight + tmpvar_14); - o.vlight = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = ComputeScreenPos (o.pos); - vec4 tmpvar_17; - tmpvar_17 = tmpvar_16; - o._ShadowCoord = tmpvar_17; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_pack1.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = xl_retval.hip_pack2.xy; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.normal.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29 = xl_retval._ShadowCoord.xyzw; - vec4 tmpvar_30; - tmpvar_30 = tmpvar_29; - gl_TexCoord[5] = tmpvar_30; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt deleted file mode 100644 index fadbb41b9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt +++ /dev/null @@ -1,96 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _Splat3_ST; -uniform vec4 _Splat2_ST; -uniform vec4 _Splat1_ST; -uniform vec4 _Splat0_ST; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _Control_ST; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); - tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _Control_ST.xy) + _Control_ST.zw); - tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _Splat0_ST.xy) + _Splat0_ST.zw); - tmpvar_2.xy = ((gl_MultiTexCoord0.xy * _Splat1_ST.xy) + _Splat1_ST.zw); - tmpvar_2.zw = ((gl_MultiTexCoord0.xy * _Splat2_ST.xy) + _Splat2_ST.zw); - mat3 tmpvar_4; - tmpvar_4[0] = _Object2World[0].xyz; - tmpvar_4[1] = _Object2World[1].xyz; - tmpvar_4[2] = _Object2World[2].xyz; - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * (gl_Normal * unity_Scale.w)); - vec4 tmpvar_6; - tmpvar_6.w = 1.0; - tmpvar_6.xyz = tmpvar_5; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_6); - x1.y = dot (unity_SHAg, tmpvar_6); - x1.z = dot (unity_SHAb, tmpvar_6); - vec4 tmpvar_7; - tmpvar_7 = (tmpvar_5.xyzz * tmpvar_5.yzzx); - x2.x = dot (unity_SHBr, tmpvar_7); - x2.y = dot (unity_SHBg, tmpvar_7); - x2.z = dot (unity_SHBb, tmpvar_7); - vec3 tmpvar_8; - tmpvar_8 = (_Object2World * gl_Vertex).xyz; - vec4 tmpvar_9; - tmpvar_9 = (unity_4LightPosX0 - tmpvar_8.x); - vec4 tmpvar_10; - tmpvar_10 = (unity_4LightPosY0 - tmpvar_8.y); - vec4 tmpvar_11; - tmpvar_11 = (unity_4LightPosZ0 - tmpvar_8.z); - vec4 tmpvar_12; - tmpvar_12 = (((tmpvar_9 * tmpvar_9) + (tmpvar_10 * tmpvar_10)) + (tmpvar_11 * tmpvar_11)); - vec4 tmpvar_13; - tmpvar_13 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_9 * tmpvar_5.x) + (tmpvar_10 * tmpvar_5.y)) + (tmpvar_11 * tmpvar_5.z)) * inversesqrt (tmpvar_12))) * (1.0/((1.0 + (tmpvar_12 * unity_4LightAtten0))))); - vec4 o_i0; - vec4 tmpvar_14; - tmpvar_14 = (tmpvar_3 * 0.5); - o_i0 = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15.x = tmpvar_14.x; - tmpvar_15.y = (tmpvar_14.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_15 + tmpvar_14.w); - o_i0.zw = tmpvar_3.zw; - gl_Position = tmpvar_3; - vec4 tmpvar_16; - tmpvar_16.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_16.x = tmpvar_3.z; - xlv_FOG = tmpvar_16; - gl_TexCoord[0] = tmpvar_1; - gl_TexCoord[1] = tmpvar_2; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = ((gl_MultiTexCoord0.xy * _Splat3_ST.xy) + _Splat3_ST.zw); - gl_TexCoord[2] = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.w = 0.0; - tmpvar_18.xyz = tmpvar_5; - gl_TexCoord[3] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (((x1 + x2) + (unity_SHC.xyz * ((tmpvar_5.x * tmpvar_5.x) - (tmpvar_5.y * tmpvar_5.y)))) + ((((unity_LightColor0 * tmpvar_13.x) + (unity_LightColor1 * tmpvar_13.y)) + (unity_LightColor2 * tmpvar_13.z)) + (unity_LightColor3 * tmpvar_13.w))); - gl_TexCoord[4] = tmpvar_19; - gl_TexCoord[5] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt deleted file mode 100644 index 1b7af9e76..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt +++ /dev/null @@ -1,175 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_pack1; - vec2 hip_pack2; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _Splat3_ST; -uniform vec4 _Splat2_ST; -uniform vec4 _Splat1_ST; -uniform vec4 _Splat0_ST; -uniform vec4 _ProjectionParams; -uniform vec4 _Control_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _Control_ST.xy) + _Control_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _Splat0_ST.xy) + _Splat0_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _Splat1_ST.xy) + _Splat1_ST.zw); - o.hip_pack1.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord.xy * _Splat2_ST.xy) + _Splat2_ST.zw); - o.hip_pack1.zw = tmpvar_4.xxxy.zw; - vec2 tmpvar_5; - tmpvar_5 = ((v.texcoord.xy * _Splat3_ST.xy) + _Splat3_ST.zw); - o.hip_pack2 = tmpvar_5.xy.xy; - vec4 tmpvar_6; - tmpvar_6 = ComputeScreenPos (o.pos); - vec4 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.hip_screen = tmpvar_7; - vec2 tmpvar_8; - tmpvar_8 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_8.xy.xy; - float tmpvar_9; - tmpvar_9 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_9).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_pack1.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = xl_retval.hip_pack2.xy; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt deleted file mode 100644 index 01a6175ad..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-ir.txt +++ /dev/null @@ -1,126 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; - vec3 color; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -v2f vert ( - in appdata_full v -) -{ - float diff; - vec3 lightDir; - int i; - vec3 lightColor; - v2f o; - int tmpvar_1; - tmpvar_1 = 0; - i = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = v.texcoord.xy; - o.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_LightModel.ambient.xyz; - lightColor = tmpvar_4; - while (true) { - if (!((i < 4))) { - break; - }; - vec3 tmpvar_5; - tmpvar_5 = _TerrainTreeLightDirections[i]; - lightDir = tmpvar_5.xyz.xyz; - float tmpvar_6; - tmpvar_6 = dot (lightDir.xyz, v.normal); - float tmpvar_7; - tmpvar_7 = max (0.0, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - diff = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (_TerrainTreeLightColors[i] * diff).xyz; - vec3 tmpvar_10; - tmpvar_10 = (lightColor + tmpvar_9); - lightColor = tmpvar_10; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_11; - tmpvar_11 = (i + 1); - i = tmpvar_11; - }; - vec3 tmpvar_12; - tmpvar_12 = (lightColor * v.color.w); - o.color = tmpvar_12; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f tmpvar_13; - tmpvar_13 = vert (xlt_v); - v2f tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.uv.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.color.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt deleted file mode 100644 index e8ecbc903..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-out.txt +++ /dev/null @@ -1,21 +0,0 @@ -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -void main () -{ - vec3 lightColor; - lightColor = gl_LightModel.ambient.xyz; - lightColor = (lightColor + (_TerrainTreeLightColors[0] * max (0.0, dot (_TerrainTreeLightDirections[0], gl_Normal))).xyz); - lightColor = (lightColor + (_TerrainTreeLightColors[1] * max (0.0, dot (_TerrainTreeLightDirections[1], gl_Normal))).xyz); - lightColor = (lightColor + (_TerrainTreeLightColors[2] * max (0.0, dot (_TerrainTreeLightDirections[2], gl_Normal))).xyz); - lightColor = (lightColor + (_TerrainTreeLightColors[3] * max (0.0, dot (_TerrainTreeLightDirections[3], gl_Normal))).xyz); - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = (lightColor * gl_Color.w); - gl_TexCoord[1] = tmpvar_2; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt deleted file mode 100644 index faf3df628..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt +++ /dev/null @@ -1,185 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f { - vec4 pos; - vec2 uv; - vec3 color; -}; -attribute vec4 TANGENT; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.yw = vec2(0.0, 0.0); - tmpvar_7.x = normal.z; - tmpvar_7.z = -(normal.x); - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (pos + ((tangent * mat) * isBillboard)); - pos = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = vec3(isBillboard); - vec3 tmpvar_13; - tmpvar_13 = mix (normal, norb, tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - normal = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = -1.0; - tmpvar_15.xyz = tanb.xyz; - vec4 tmpvar_16; - tmpvar_16 = vec4(isBillboard); - vec4 tmpvar_17; - tmpvar_17 = mix (tangent, tmpvar_15, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - tangent = tmpvar_18; -} - -v2f vert ( - in appdata_full v -) -{ - float diff; - vec3 lightDir; - int i; - vec3 lightColor; - v2f o; - int tmpvar_1; - tmpvar_1 = 0; - i = tmpvar_1; - ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v.vertex, v.normal, v.tangent); - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = v.texcoord.xy; - o.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = gl_LightModel.ambient.xyz; - lightColor = tmpvar_4; - while (true) { - if (!((i < 4))) { - break; - }; - vec3 tmpvar_5; - tmpvar_5 = _TerrainTreeLightDirections[i]; - lightDir = tmpvar_5.xyz.xyz; - float tmpvar_6; - tmpvar_6 = dot (lightDir.xyz, v.normal); - float tmpvar_7; - tmpvar_7 = max (0.0, ((tmpvar_6 * 0.5) + 0.5)); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - diff = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (_TerrainTreeLightColors[i] * diff).xyz; - vec3 tmpvar_10; - tmpvar_10 = (lightColor + tmpvar_9); - lightColor = tmpvar_10; - int _post_incdec_tmp; - _post_incdec_tmp = i; - int tmpvar_11; - tmpvar_11 = (i + 1); - i = tmpvar_11; - }; - vec3 tmpvar_12; - tmpvar_12 = (lightColor * v.color.w); - o.color = tmpvar_12; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f tmpvar_13; - tmpvar_13 = vert (xlt_v); - v2f tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.uv.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.color.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt deleted file mode 100644 index bf43c699b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-out.txt +++ /dev/null @@ -1,29 +0,0 @@ -attribute vec4 TANGENT; -uniform vec3 _TerrainTreeLightDirections[4]; -uniform vec4 _TerrainTreeLightColors[4]; -void main () -{ - vec3 lightColor; - float tmpvar_1; - tmpvar_1 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = gl_Normal; - vec3 tmpvar_3; - tmpvar_3 = mix (gl_Normal, normalize ((tmpvar_2 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_1)); - lightColor = gl_LightModel.ambient.xyz; - lightColor = (lightColor + (_TerrainTreeLightColors[0] * max (0.0, ((dot (_TerrainTreeLightDirections[0], tmpvar_3) * 0.5) + 0.5))).xyz); - lightColor = (lightColor + (_TerrainTreeLightColors[1] * max (0.0, ((dot (_TerrainTreeLightDirections[1], tmpvar_3) * 0.5) + 0.5))).xyz); - lightColor = (lightColor + (_TerrainTreeLightColors[2] * max (0.0, ((dot (_TerrainTreeLightDirections[2], tmpvar_3) * 0.5) + 0.5))).xyz); - lightColor = (lightColor + (_TerrainTreeLightColors[3] * max (0.0, ((dot (_TerrainTreeLightDirections[3], tmpvar_3) * 0.5) + 0.5))).xyz); - gl_Position = (gl_ModelViewProjectionMatrix * (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_1))); - vec4 tmpvar_4; - tmpvar_4.zw = vec2(0.0, 0.0); - tmpvar_4.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.w = 0.0; - tmpvar_5.xyz = (lightColor * gl_Color.w); - gl_TexCoord[1] = tmpvar_5; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt deleted file mode 100644 index ac29aa707..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-ir.txt +++ /dev/null @@ -1,395 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertBark ( - inout appdata_full v -) -{ - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertBark (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt deleted file mode 100644 index 6507427a8..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-out.txt +++ /dev/null @@ -1,96 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_1 = gl_Vertex; - tmpvar_2 = TANGENT; - tmpvar_1.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 pos; - pos = tmpvar_1; - vec3 bend; - float tmpvar_3; - tmpvar_3 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_4; - tmpvar_4.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_3))); - tmpvar_4.y = tmpvar_3; - vec4 tmpvar_5; - tmpvar_5 = abs (((fract ((((fract (((_TimeX + tmpvar_4).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_6; - tmpvar_6 = ((tmpvar_5 * tmpvar_5) * (3.0 - (2.0 * tmpvar_5))); - vec2 tmpvar_7; - tmpvar_7 = (tmpvar_6.xz + tmpvar_6.yw); - bend = ((gl_Color.y * 0.1) * gl_Normal); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos.xyz = (tmpvar_1.xyz + (((tmpvar_7.xyx * bend) + ((_Wind.xyz * tmpvar_7.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos.xyz = (pos.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_8; - tmpvar_8.xz = vec2(0.0, 0.0); - tmpvar_8.y = _SquashPlaneNormal.w; - vec3 tmpvar_9; - tmpvar_9 = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_8 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9; - tmpvar_1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.xyz = (gl_Color.w * _Color.xyz); - tmpvar_11.w = _Color.w; - vec3 tmpvar_12; - tmpvar_12 = normalize (gl_Normal); - tmpvar_2.xyz = normalize (TANGENT.xyz); - vec4 tmpvar_13; - tmpvar_13 = (gl_ModelViewProjectionMatrix * tmpvar_10); - vec3 tmpvar_14; - tmpvar_14 = (cross (tmpvar_12, tmpvar_2.xyz) * TANGENT.w); - mat3 tmpvar_15; - tmpvar_15[0].x = tmpvar_2.x; - tmpvar_15[0].y = tmpvar_14.x; - tmpvar_15[0].z = tmpvar_12.x; - tmpvar_15[1].x = tmpvar_2.y; - tmpvar_15[1].y = tmpvar_14.y; - tmpvar_15[1].z = tmpvar_12.y; - tmpvar_15[2].x = tmpvar_2.z; - tmpvar_15[2].y = tmpvar_14.z; - tmpvar_15[2].z = tmpvar_12.z; - vec4 tmpvar_16; - tmpvar_16.w = 1.0; - tmpvar_16.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_13; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = tmpvar_13.z; - xlv_FOG = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_18; - gl_FrontColor = tmpvar_11; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (tmpvar_15 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_9)); - gl_TexCoord[1] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 0.0; - tmpvar_20.xyz = (tmpvar_15 * (((_World2Object * tmpvar_16).xyz * unity_Scale.w) - tmpvar_9)); - gl_TexCoord[2] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = (_LightMatrix0 * (_Object2World * tmpvar_10)).xyz; - gl_TexCoord[3] = tmpvar_21; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt deleted file mode 100644 index e3d14b336..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-ir.txt +++ /dev/null @@ -1,262 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; -}; -attribute vec4 TANGENT; -uniform vec4 unity_LightShadowBias; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertBark ( - inout appdata_full v -) -{ - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - TreeVertBark (v); - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = (o.pos.z + unity_LightShadowBias.x); - o.pos.z = vec3(tmpvar_2).z; - if ((o.pos.z < -(o.pos.w))) { - float tmpvar_3; - tmpvar_3 = -(o.pos.w); - o.pos.z = vec3(tmpvar_3).z; - }; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt deleted file mode 100644 index 657b548fd..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-out.txt +++ /dev/null @@ -1,48 +0,0 @@ -uniform vec4 unity_LightShadowBias; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = gl_Vertex; - tmpvar_2.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 pos; - pos = tmpvar_2; - vec3 bend; - float tmpvar_3; - tmpvar_3 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_4; - tmpvar_4.x = dot (tmpvar_2.xyz, vec3((gl_Color.y + tmpvar_3))); - tmpvar_4.y = tmpvar_3; - vec4 tmpvar_5; - tmpvar_5 = abs (((fract ((((fract (((_TimeX + tmpvar_4).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_6; - tmpvar_6 = ((tmpvar_5 * tmpvar_5) * (3.0 - (2.0 * tmpvar_5))); - vec2 tmpvar_7; - tmpvar_7 = (tmpvar_6.xz + tmpvar_6.yw); - bend = ((gl_Color.y * 0.1) * gl_Normal); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos.xyz = (tmpvar_2.xyz + (((tmpvar_7.xyx * bend) + ((_Wind.xyz * tmpvar_7.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos.xyz = (pos.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_8; - tmpvar_8.xz = vec2(0.0, 0.0); - tmpvar_8.y = _SquashPlaneNormal.w; - vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_8 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - tmpvar_2 = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (gl_ModelViewProjectionMatrix * tmpvar_9); - tmpvar_1 = tmpvar_10; - tmpvar_1.z = (tmpvar_10.z + unity_LightShadowBias.x); - if ((tmpvar_1.z < -(tmpvar_10.w))) { - tmpvar_1.z = -(tmpvar_10.w); - }; - gl_Position = tmpvar_1; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt deleted file mode 100644 index 48ab8ed86..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-ir.txt +++ /dev/null @@ -1,443 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.yw = vec2(0.0, 0.0); - tmpvar_7.x = normal.z; - tmpvar_7.z = -(normal.x); - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (pos + ((tangent * mat) * isBillboard)); - pos = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = vec3(isBillboard); - vec3 tmpvar_13; - tmpvar_13 = mix (normal, norb, tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - normal = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = -1.0; - tmpvar_15.xyz = tanb.xyz; - vec4 tmpvar_16; - tmpvar_16 = vec4(isBillboard); - vec4 tmpvar_17; - tmpvar_17 = mix (tangent, tmpvar_15, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - tangent = tmpvar_18; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertLeaf ( - inout appdata_full v -) -{ - ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v.vertex, v.normal, v.tangent); - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertLeaf (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt deleted file mode 100644 index 6764a6f77..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-out.txt +++ /dev/null @@ -1,109 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - float tmpvar_3; - tmpvar_3 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = gl_Normal; - vec4 tmpvar_5; - tmpvar_5.yw = vec2(0.0, 0.0); - tmpvar_5.x = gl_Normal.z; - tmpvar_5.z = -(gl_Normal.x); - vec4 tmpvar_6; - tmpvar_6 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); - vec3 tmpvar_7; - tmpvar_7 = mix (gl_Normal, normalize ((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3)); - vec4 tmpvar_8; - tmpvar_8.w = -1.0; - tmpvar_8.xyz = normalize ((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz; - vec4 tmpvar_9; - tmpvar_9 = mix (TANGENT, tmpvar_8, vec4(tmpvar_3)); - tmpvar_1 = tmpvar_6; - tmpvar_2 = tmpvar_9; - tmpvar_1.xyz = (tmpvar_6.xyz * _Scale.xyz); - vec4 pos_i0; - pos_i0 = tmpvar_1; - vec3 bend; - float tmpvar_10; - tmpvar_10 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_11; - tmpvar_11.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_10))); - tmpvar_11.y = tmpvar_10; - vec4 tmpvar_12; - tmpvar_12 = abs (((fract ((((fract (((_TimeX + tmpvar_11).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_13; - tmpvar_13 = ((tmpvar_12 * tmpvar_12) * (3.0 - (2.0 * tmpvar_12))); - vec2 tmpvar_14; - tmpvar_14 = (tmpvar_13.xz + tmpvar_13.yw); - bend = ((gl_Color.y * 0.1) * tmpvar_7); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos_i0.xyz = (tmpvar_1.xyz + (((tmpvar_14.xyx * bend) + ((_Wind.xyz * tmpvar_14.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos_i0.xyz = (pos_i0.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_15; - tmpvar_15.xz = vec2(0.0, 0.0); - tmpvar_15.y = _SquashPlaneNormal.w; - vec3 tmpvar_16; - tmpvar_16 = mix ((pos_i0.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_15 - pos_i0.xyz)) * _SquashPlaneNormal.xyz)), pos_i0.xyz, vec3(_SquashAmount)); - vec4 tmpvar_17; - tmpvar_17.w = 1.0; - tmpvar_17.xyz = tmpvar_16; - tmpvar_1 = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.xyz = (gl_Color.w * _Color.xyz); - tmpvar_18.w = _Color.w; - vec3 tmpvar_19; - tmpvar_19 = normalize (tmpvar_7); - tmpvar_2.xyz = normalize (tmpvar_9.xyz); - vec4 tmpvar_20; - tmpvar_20 = (gl_ModelViewProjectionMatrix * tmpvar_17); - vec3 tmpvar_21; - tmpvar_21 = (cross (tmpvar_19, tmpvar_2.xyz) * tmpvar_9.w); - mat3 tmpvar_22; - tmpvar_22[0].x = tmpvar_2.x; - tmpvar_22[0].y = tmpvar_21.x; - tmpvar_22[0].z = tmpvar_19.x; - tmpvar_22[1].x = tmpvar_2.y; - tmpvar_22[1].y = tmpvar_21.y; - tmpvar_22[1].z = tmpvar_19.y; - tmpvar_22[2].x = tmpvar_2.z; - tmpvar_22[2].y = tmpvar_21.z; - tmpvar_22[2].z = tmpvar_19.z; - vec4 tmpvar_23; - tmpvar_23.w = 1.0; - tmpvar_23.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_20; - vec4 tmpvar_24; - tmpvar_24.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_24.x = tmpvar_20.z; - xlv_FOG = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_25; - gl_FrontColor = tmpvar_18; - vec4 tmpvar_26; - tmpvar_26.w = 0.0; - tmpvar_26.xyz = (tmpvar_22 * (_World2Object * _WorldSpaceLightPos0).xyz); - gl_TexCoord[1] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = (tmpvar_22 * (((_World2Object * tmpvar_23).xyz * unity_Scale.w) - tmpvar_16)); - gl_TexCoord[2] = tmpvar_27; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt deleted file mode 100644 index d18a617a0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt +++ /dev/null @@ -1,454 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.yw = vec2(0.0, 0.0); - tmpvar_7.x = normal.z; - tmpvar_7.z = -(normal.x); - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (pos + ((tangent * mat) * isBillboard)); - pos = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = vec3(isBillboard); - vec3 tmpvar_13; - tmpvar_13 = mix (normal, norb, tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - normal = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = -1.0; - tmpvar_15.xyz = tanb.xyz; - vec4 tmpvar_16; - tmpvar_16 = vec4(isBillboard); - vec4 tmpvar_17; - tmpvar_17 = mix (tangent, tmpvar_15, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - tangent = tmpvar_18; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertLeaf ( - inout appdata_full v -) -{ - ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v.vertex, v.normal, v.tangent); - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertLeaf (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt deleted file mode 100644 index 456889bd5..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-out.txt +++ /dev/null @@ -1,114 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - float tmpvar_3; - tmpvar_3 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = gl_Normal; - vec4 tmpvar_5; - tmpvar_5.yw = vec2(0.0, 0.0); - tmpvar_5.x = gl_Normal.z; - tmpvar_5.z = -(gl_Normal.x); - vec4 tmpvar_6; - tmpvar_6 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); - vec3 tmpvar_7; - tmpvar_7 = mix (gl_Normal, normalize ((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3)); - vec4 tmpvar_8; - tmpvar_8.w = -1.0; - tmpvar_8.xyz = normalize ((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz; - vec4 tmpvar_9; - tmpvar_9 = mix (TANGENT, tmpvar_8, vec4(tmpvar_3)); - tmpvar_1 = tmpvar_6; - tmpvar_2 = tmpvar_9; - tmpvar_1.xyz = (tmpvar_6.xyz * _Scale.xyz); - vec4 pos_i0; - pos_i0 = tmpvar_1; - vec3 bend; - float tmpvar_10; - tmpvar_10 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_11; - tmpvar_11.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_10))); - tmpvar_11.y = tmpvar_10; - vec4 tmpvar_12; - tmpvar_12 = abs (((fract ((((fract (((_TimeX + tmpvar_11).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_13; - tmpvar_13 = ((tmpvar_12 * tmpvar_12) * (3.0 - (2.0 * tmpvar_12))); - vec2 tmpvar_14; - tmpvar_14 = (tmpvar_13.xz + tmpvar_13.yw); - bend = ((gl_Color.y * 0.1) * tmpvar_7); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos_i0.xyz = (tmpvar_1.xyz + (((tmpvar_14.xyx * bend) + ((_Wind.xyz * tmpvar_14.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos_i0.xyz = (pos_i0.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_15; - tmpvar_15.xz = vec2(0.0, 0.0); - tmpvar_15.y = _SquashPlaneNormal.w; - vec3 tmpvar_16; - tmpvar_16 = mix ((pos_i0.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_15 - pos_i0.xyz)) * _SquashPlaneNormal.xyz)), pos_i0.xyz, vec3(_SquashAmount)); - vec4 tmpvar_17; - tmpvar_17.w = 1.0; - tmpvar_17.xyz = tmpvar_16; - tmpvar_1 = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.xyz = (gl_Color.w * _Color.xyz); - tmpvar_18.w = _Color.w; - vec3 tmpvar_19; - tmpvar_19 = normalize (tmpvar_7); - tmpvar_2.xyz = normalize (tmpvar_9.xyz); - vec4 tmpvar_20; - tmpvar_20 = (gl_ModelViewProjectionMatrix * tmpvar_17); - vec3 tmpvar_21; - tmpvar_21 = (cross (tmpvar_19, tmpvar_2.xyz) * tmpvar_9.w); - mat3 tmpvar_22; - tmpvar_22[0].x = tmpvar_2.x; - tmpvar_22[0].y = tmpvar_21.x; - tmpvar_22[0].z = tmpvar_19.x; - tmpvar_22[1].x = tmpvar_2.y; - tmpvar_22[1].y = tmpvar_21.y; - tmpvar_22[1].z = tmpvar_19.y; - tmpvar_22[2].x = tmpvar_2.z; - tmpvar_22[2].y = tmpvar_21.z; - tmpvar_22[2].z = tmpvar_19.z; - vec4 tmpvar_23; - tmpvar_23.w = 1.0; - tmpvar_23.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_20; - vec4 tmpvar_24; - tmpvar_24.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_24.x = tmpvar_20.z; - xlv_FOG = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_25; - gl_FrontColor = tmpvar_18; - vec4 tmpvar_26; - tmpvar_26.w = 0.0; - tmpvar_26.xyz = (tmpvar_22 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_16)); - gl_TexCoord[1] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = (tmpvar_22 * (((_World2Object * tmpvar_23).xyz * unity_Scale.w) - tmpvar_16)); - gl_TexCoord[2] = tmpvar_27; - vec4 tmpvar_28; - tmpvar_28.w = 0.0; - tmpvar_28.xyz = (_LightMatrix0 * (_Object2World * tmpvar_17)).xyz; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-ir.txt deleted file mode 100644 index 87eb3027b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-ir.txt +++ /dev/null @@ -1,90 +0,0 @@ -struct appdata_img { - vec4 vertex; - vec2 texcoord; -}; -struct v2f { - vec4 pos; - vec2 uv; - vec2 uvOrig; -}; -uniform vec4 _CenterRadius; -vec2 MultiplyUV ( - in mat4 mat, - in vec2 inUV -) -{ - vec4 temp; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.x = inUV.x; - tmpvar_1.y = inUV.y; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - temp = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (mat * temp); - temp = tmpvar_3; - return temp.xy; -} - -v2f vert ( - in appdata_img v -) -{ - vec2 uv; - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = (v.texcoord.xy - _CenterRadius.xy); - uv = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = MultiplyUV (gl_TextureMatrix[0], uv); - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.uv = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = uv; - o.uvOrig = tmpvar_5; - return o; -} - -void main () -{ - appdata_img xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.pos.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.zw = vec2(0.0, 0.0); - tmpvar_9.xy = xl_retval.uv.xy; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_TexCoord[0] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.uvOrig.xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[1] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt deleted file mode 100644 index 9f3548686..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,178 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec2 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec2 tmpvar_18; - tmpvar_18 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_18; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = xl_retval._LightCoord.xy; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-ir.txt deleted file mode 100644 index 0061670cc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-ir.txt +++ /dev/null @@ -1,251 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -void treevertex ( - inout appdata_full v -) -{ - TerrainAnimateTree (v.vertex, v.color.w); -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - treevertex (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-out.txt deleted file mode 100644 index 7781ece71..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-out.txt +++ /dev/null @@ -1,52 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -void main () -{ - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_1; - tmpvar_1.w = 0.0; - tmpvar_1.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_1).xyz, gl_Color.www); - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec4 tmpvar_3; - tmpvar_3.w = 1.0; - tmpvar_3.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_2 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (gl_ModelViewProjectionMatrix * tmpvar_3); - mat3 tmpvar_5; - tmpvar_5[0] = _Object2World[0].xyz; - tmpvar_5[1] = _Object2World[1].xyz; - tmpvar_5[2] = _Object2World[2].xyz; - gl_Position = tmpvar_4; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_4.z; - xlv_FOG = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (tmpvar_5 * (gl_Normal * unity_Scale.w)); - gl_TexCoord[1] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (_WorldSpaceLightPos0.xyz - (_Object2World * tmpvar_3).xyz); - gl_TexCoord[2] = tmpvar_9; - gl_TexCoord[3] = (_LightMatrix0 * (_Object2World * tmpvar_3)); -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-ir.txt deleted file mode 100644 index cd04249bc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-ir.txt +++ /dev/null @@ -1,161 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec3 vec; -}; -attribute vec4 TANGENT; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _LightPositionRange; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -void treevertex ( - inout appdata_full v -) -{ - TerrainAnimateTree (v.vertex, v.color.w); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - treevertex (v); - vec3 tmpvar_1; - tmpvar_1 = ((_Object2World * v.vertex).xyz - _LightPositionRange.xyz); - o.vec = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_2; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.vec.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-out.txt deleted file mode 100644 index 6a13816b5..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-out.txt +++ /dev/null @@ -1,29 +0,0 @@ -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _LightPositionRange; -void main () -{ - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_1; - tmpvar_1.w = 0.0; - tmpvar_1.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_1).xyz, gl_Color.www); - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec4 tmpvar_3; - tmpvar_3.w = 1.0; - tmpvar_3.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_2 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_3; - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_3); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = ((_Object2World * tmpvar_3).xyz - _LightPositionRange.xyz); - gl_TexCoord[0] = tmpvar_4; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-ir.txt deleted file mode 100644 index 8527b65e0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-ir.txt +++ /dev/null @@ -1,216 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec3 _ShadowCoord0; - vec3 _ShadowCoord1; - vec3 _ShadowCoord2; - vec3 _ShadowCoord3; - vec2 _ShadowZFade; -}; -attribute vec4 TANGENT; -uniform mat4 _World2Shadow3; -uniform mat4 _World2Shadow2; -uniform mat4 _World2Shadow1; -uniform mat4 _World2Shadow; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _LightShadowData; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -void treevertex ( - inout appdata_full v -) -{ - TerrainAnimateTree (v.vertex, v.color.w); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec4 wpos; - float z; - v2f_surf o; - treevertex (v); - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = -((gl_ModelViewMatrix * v.vertex).z); - z = tmpvar_2; - float tmpvar_3; - tmpvar_3 = z; - o._ShadowZFade.x = tmpvar_3; - float tmpvar_4; - tmpvar_4 = ((z * _LightShadowData.z) + _LightShadowData.w); - o._ShadowZFade.y = vec2(tmpvar_4).y; - vec4 tmpvar_5; - tmpvar_5 = (_Object2World * v.vertex); - wpos = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (_World2Shadow * wpos).xyz; - o._ShadowCoord0 = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = (_World2Shadow1 * wpos).xyz; - o._ShadowCoord1 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (_World2Shadow2 * wpos).xyz; - o._ShadowCoord2 = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (_World2Shadow3 * wpos).xyz; - o._ShadowCoord3 = tmpvar_9; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval._ShadowCoord0.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval._ShadowCoord1.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval._ShadowCoord2.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval._ShadowCoord3.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = xl_retval._ShadowZFade.xy; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[4] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-out.txt deleted file mode 100644 index beb0c7ab0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-out.txt +++ /dev/null @@ -1,56 +0,0 @@ -uniform mat4 _World2Shadow3; -uniform mat4 _World2Shadow2; -uniform mat4 _World2Shadow1; -uniform mat4 _World2Shadow; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _LightShadowData; -void main () -{ - vec2 tmpvar_1; - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); - vec3 tmpvar_3; - tmpvar_3.xz = vec2(0.0, 0.0); - tmpvar_3.y = _SquashPlaneNormal.w; - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_4; - float tmpvar_5; - tmpvar_5 = -((gl_ModelViewMatrix * tmpvar_4).z); - tmpvar_1.x = tmpvar_5; - tmpvar_1.y = ((tmpvar_5 * _LightShadowData.z) + _LightShadowData.w); - vec4 tmpvar_6; - tmpvar_6 = (_Object2World * tmpvar_4); - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_4); - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = (_World2Shadow * tmpvar_6).xyz; - gl_TexCoord[0] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (_World2Shadow1 * tmpvar_6).xyz; - gl_TexCoord[1] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (_World2Shadow2 * tmpvar_6).xyz; - gl_TexCoord[2] = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10.w = 0.0; - tmpvar_10.xyz = (_World2Shadow3 * tmpvar_6).xyz; - gl_TexCoord[3] = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = tmpvar_1; - gl_TexCoord[4] = tmpvar_11; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-ir.txt deleted file mode 100644 index 797761e1c..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-ir.txt +++ /dev/null @@ -1,212 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -void treevertex ( - inout appdata_full v -) -{ - TerrainAnimateTree (v.vertex, v.color.w); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - treevertex (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-out.txt deleted file mode 100644 index 71dd9bfd2..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-out.txt +++ /dev/null @@ -1,46 +0,0 @@ -varying vec4 xlv_FOG; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_1; - tmpvar_1.w = 0.0; - tmpvar_1.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_1).xyz, gl_Color.www); - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec4 tmpvar_3; - tmpvar_3.w = 1.0; - tmpvar_3.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_2 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = (gl_ModelViewProjectionMatrix * tmpvar_3); - vec4 o_i0; - vec4 tmpvar_5; - tmpvar_5 = (tmpvar_4 * 0.5); - o_i0 = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6.x = tmpvar_5.x; - tmpvar_6.y = (tmpvar_5.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_6 + tmpvar_5.w); - o_i0.zw = tmpvar_4.zw; - gl_Position = tmpvar_4; - vec4 tmpvar_7; - tmpvar_7.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_7.x = tmpvar_4.z; - xlv_FOG = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_8; - gl_TexCoord[1] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-ir.txt deleted file mode 100644 index 62156cba2..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-ir.txt +++ /dev/null @@ -1,172 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec3 vec; - vec2 hip_pack0; -}; -attribute vec4 TANGENT; -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _LightPositionRange; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void TerrainAnimateTree ( - inout vec4 pos, - in float alpha -) -{ - vec3 bent; - vec3 tmpvar_1; - tmpvar_1 = (pos.xyz * _Scale.xyz); - pos.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = pos.xyz.xyz; - vec3 tmpvar_3; - tmpvar_3 = (_TerrainEngineBendTree * tmpvar_2).xyz; - bent = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = vec3(alpha); - vec3 tmpvar_5; - tmpvar_5 = mix (pos.xyz, bent, tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - pos.xyz = tmpvar_6.xyz.xyz; - vec4 tmpvar_7; - tmpvar_7 = Squash (pos); - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - pos = tmpvar_8; -} - -void treevertex ( - inout appdata_full v -) -{ - TerrainAnimateTree (v.vertex, v.color.w); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - treevertex (v); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = ((_Object2World * v.vertex).xyz - _LightPositionRange.xyz); - o.vec = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.vec.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-out.txt deleted file mode 100644 index efbeb447a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-out.txt +++ /dev/null @@ -1,34 +0,0 @@ -uniform mat4 _TerrainEngineBendTree; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _LightPositionRange; -void main () -{ - vec4 pos; - pos = gl_Vertex; - pos.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 tmpvar_1; - tmpvar_1.w = 0.0; - tmpvar_1.xyz = pos.xyz; - pos.xyz = mix (pos.xyz, (_TerrainEngineBendTree * tmpvar_1).xyz, gl_Color.www); - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec4 tmpvar_3; - tmpvar_3.w = 1.0; - tmpvar_3.xyz = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_2 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - pos = tmpvar_3; - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_3); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = ((_Object2World * tmpvar_3).xyz - _LightPositionRange.xyz); - gl_TexCoord[0] = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[1] = tmpvar_5; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-ir.txt deleted file mode 100644 index 7680c076f..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-ir.txt +++ /dev/null @@ -1,439 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 vlight; - vec4 _ShadowCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -vec3 Shade4PointLights ( - in vec4 lightPosX, - in vec4 lightPosY, - in vec4 lightPosZ, - in vec3 lightColor0, - in vec3 lightColor1, - in vec3 lightColor2, - in vec3 lightColor3, - in vec4 lightAttenSq, - in vec3 pos, - in vec3 normal -) -{ - vec3 col; - vec4 diff; - vec4 atten; - vec4 corr; - vec4 ndotl; - vec4 lengthSq; - vec4 toLightZ; - vec4 toLightY; - vec4 toLightX; - vec4 tmpvar_1; - tmpvar_1 = (lightPosX - pos.x); - toLightX = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (lightPosY - pos.y); - toLightY = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (lightPosZ - pos.z); - toLightZ = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4 = vec4(0.0, 0.0, 0.0, 0.0); - lengthSq = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (lengthSq + (toLightX * toLightX)); - lengthSq = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (lengthSq + (toLightY * toLightY)); - lengthSq = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (lengthSq + (toLightZ * toLightZ)); - lengthSq = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = vec4(0.0, 0.0, 0.0, 0.0); - ndotl = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (ndotl + (toLightX * normal.x)); - ndotl = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = (ndotl + (toLightY * normal.y)); - ndotl = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (ndotl + (toLightZ * normal.z)); - ndotl = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12 = inversesqrt (lengthSq); - vec4 tmpvar_13; - tmpvar_13 = tmpvar_12; - corr = tmpvar_13; - vec4 tmpvar_14; - tmpvar_14 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl * corr)); - vec4 tmpvar_15; - tmpvar_15 = tmpvar_14; - ndotl = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16 = (1.0 / (1.0 + (lengthSq * lightAttenSq))); - atten = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (ndotl * atten); - diff = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = vec3(0.0, 0.0, 0.0); - col = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (col + (lightColor0 * diff.x)); - col = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (col + (lightColor1 * diff.y)); - col = tmpvar_20; - vec3 tmpvar_21; - tmpvar_21 = (col + (lightColor2 * diff.z)); - col = tmpvar_21; - vec3 tmpvar_22; - tmpvar_22 = (col + (lightColor3 * diff.w)); - col = tmpvar_22; - return col; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 worldPos; - vec3 shlight; - mat3 rotation; - vec3 binormal; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - worldN = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.x; - tmpvar_7[0].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.x; - tmpvar_7[0].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.x; - tmpvar_7[0].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.y; - tmpvar_7[1].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.y; - tmpvar_7[1].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.y; - tmpvar_7[1].z = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.tangent.z; - tmpvar_7[2].x = tmpvar_14; - float tmpvar_15; - tmpvar_15 = binormal.z; - tmpvar_7[2].y = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.normal.z; - tmpvar_7[2].z = tmpvar_16; - mat3 tmpvar_17; - tmpvar_17 = (tmpvar_7); - rotation = (tmpvar_17); - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.lightDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20); - o.viewDir = tmpvar_21; - vec4 tmpvar_22; - tmpvar_22.w = 1.0; - tmpvar_22.xyz = worldN.xyz; - vec3 tmpvar_23; - tmpvar_23 = ShadeSH9 (tmpvar_22); - vec3 tmpvar_24; - tmpvar_24 = tmpvar_23; - shlight = tmpvar_24; - vec3 tmpvar_25; - tmpvar_25 = shlight; - o.vlight = tmpvar_25; - vec3 tmpvar_26; - tmpvar_26 = (_Object2World * v.vertex).xyz; - worldPos = tmpvar_26; - vec3 tmpvar_27; - tmpvar_27 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos, worldN); - vec3 tmpvar_28; - tmpvar_28 = (o.vlight + tmpvar_27); - o.vlight = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29 = ComputeScreenPos (o.pos); - vec4 tmpvar_30; - tmpvar_30 = tmpvar_29; - o._ShadowCoord = tmpvar_30; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._ShadowCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-out.txt deleted file mode 100644 index f89a0eb27..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-out.txt +++ /dev/null @@ -1,108 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec3 unity_LightColor3; -uniform vec3 unity_LightColor2; -uniform vec3 unity_LightColor1; -uniform vec3 unity_LightColor0; -uniform vec4 unity_4LightPosZ0; -uniform vec4 unity_4LightPosY0; -uniform vec4 unity_4LightPosX0; -uniform vec4 unity_4LightAtten0; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - mat3 tmpvar_3; - tmpvar_3[0] = _Object2World[0].xyz; - tmpvar_3[1] = _Object2World[1].xyz; - tmpvar_3[2] = _Object2World[2].xyz; - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (gl_Normal * unity_Scale.w)); - vec3 tmpvar_5; - tmpvar_5 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_6; - tmpvar_6[0].x = TANGENT.x; - tmpvar_6[0].y = tmpvar_5.x; - tmpvar_6[0].z = gl_Normal.x; - tmpvar_6[1].x = TANGENT.y; - tmpvar_6[1].y = tmpvar_5.y; - tmpvar_6[1].z = gl_Normal.y; - tmpvar_6[2].x = TANGENT.z; - tmpvar_6[2].y = tmpvar_5.z; - tmpvar_6[2].z = gl_Normal.z; - vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = _WorldSpaceCameraPos; - vec4 tmpvar_8; - tmpvar_8.w = 1.0; - tmpvar_8.xyz = tmpvar_4; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_8); - x1.y = dot (unity_SHAg, tmpvar_8); - x1.z = dot (unity_SHAb, tmpvar_8); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_4.xyzz * tmpvar_4.yzzx); - x2.x = dot (unity_SHBr, tmpvar_9); - x2.y = dot (unity_SHBg, tmpvar_9); - x2.z = dot (unity_SHBb, tmpvar_9); - vec3 tmpvar_10; - tmpvar_10 = (_Object2World * gl_Vertex).xyz; - vec4 tmpvar_11; - tmpvar_11 = (unity_4LightPosX0 - tmpvar_10.x); - vec4 tmpvar_12; - tmpvar_12 = (unity_4LightPosY0 - tmpvar_10.y); - vec4 tmpvar_13; - tmpvar_13 = (unity_4LightPosZ0 - tmpvar_10.z); - vec4 tmpvar_14; - tmpvar_14 = (((tmpvar_11 * tmpvar_11) + (tmpvar_12 * tmpvar_12)) + (tmpvar_13 * tmpvar_13)); - vec4 tmpvar_15; - tmpvar_15 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_11 * tmpvar_4.x) + (tmpvar_12 * tmpvar_4.y)) + (tmpvar_13 * tmpvar_4.z)) * inversesqrt (tmpvar_14))) * (1.0/((1.0 + (tmpvar_14 * unity_4LightAtten0))))); - vec4 o_i0; - vec4 tmpvar_16; - tmpvar_16 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_16; - vec2 tmpvar_17; - tmpvar_17.x = tmpvar_16.x; - tmpvar_17.y = (tmpvar_16.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_17 + tmpvar_16.w); - o_i0.zw = tmpvar_2.zw; - gl_Position = tmpvar_2; - vec4 tmpvar_18; - tmpvar_18.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_18.x = tmpvar_2.z; - xlv_FOG = tmpvar_18; - gl_TexCoord[0] = tmpvar_1; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); - gl_TexCoord[1] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 0.0; - tmpvar_20.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); - gl_TexCoord[2] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = (((x1 + x2) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))) + ((((unity_LightColor0 * tmpvar_15.x) + (unity_LightColor1 * tmpvar_15.y)) + (unity_LightColor2 * tmpvar_15.z)) + (unity_LightColor3 * tmpvar_15.w))); - gl_TexCoord[3] = tmpvar_21; - gl_TexCoord[4] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-ir.txt deleted file mode 100644 index 9f7a84527..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-ir.txt +++ /dev/null @@ -1,202 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.x; - tmpvar_7[0].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.x; - tmpvar_7[0].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.x; - tmpvar_7[0].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.y; - tmpvar_7[1].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.y; - tmpvar_7[1].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.y; - tmpvar_7[1].z = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.tangent.z; - tmpvar_7[2].x = tmpvar_14; - float tmpvar_15; - tmpvar_15 = binormal.z; - tmpvar_7[2].y = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.normal.z; - tmpvar_7[2].z = tmpvar_16; - mat3 tmpvar_17; - tmpvar_17 = (tmpvar_7); - rotation = (tmpvar_17); - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-out.txt deleted file mode 100644 index 4e316762f..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-out.txt +++ /dev/null @@ -1,52 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; - vec3 tmpvar_5; - tmpvar_5 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_6; - tmpvar_6[0].x = TANGENT.x; - tmpvar_6[0].y = tmpvar_5.x; - tmpvar_6[0].z = gl_Normal.x; - tmpvar_6[1].x = TANGENT.y; - tmpvar_6[1].y = tmpvar_5.y; - tmpvar_6[1].z = gl_Normal.y; - tmpvar_6[2].x = TANGENT.z; - tmpvar_6[2].y = tmpvar_5.z; - tmpvar_6[2].z = gl_Normal.z; - vec4 tmpvar_7; - tmpvar_7.w = 1.0; - tmpvar_7.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_2; - vec4 tmpvar_8; - tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_8.x = tmpvar_2.z; - xlv_FOG = tmpvar_8; - gl_TexCoord[0] = tmpvar_1; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); - gl_TexCoord[1] = tmpvar_9; - gl_TexCoord[2] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-ir.txt deleted file mode 100644 index a8328b242..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-ir.txt +++ /dev/null @@ -1,217 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_5.xy.xy; - float tmpvar_6; - tmpvar_6 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_6).z; - vec3 tmpvar_7; - tmpvar_7 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * v.tangent.w); - binormal = tmpvar_8; - mat3 tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.x; - tmpvar_9[0].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.x; - tmpvar_9[0].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.x; - tmpvar_9[0].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.y; - tmpvar_9[1].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.y; - tmpvar_9[1].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.y; - tmpvar_9[1].z = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.tangent.z; - tmpvar_9[2].x = tmpvar_16; - float tmpvar_17; - tmpvar_17 = binormal.z; - tmpvar_9[2].y = tmpvar_17; - float tmpvar_18; - tmpvar_18 = v.normal.z; - tmpvar_9[2].z = tmpvar_18; - mat3 tmpvar_19; - tmpvar_19 = (tmpvar_9); - rotation = (tmpvar_19); - vec3 tmpvar_20; - tmpvar_20 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20); - o.viewDir = tmpvar_21; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-ir.txt deleted file mode 100644 index fc8d292b8..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-ir.txt +++ /dev/null @@ -1,70 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -struct appdata_t { - vec4 vertex; - vec4 color; - vec2 texcoord; -}; -uniform vec4 _MainTex_ST; -v2f vert ( - in appdata_t v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.vertex = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.color = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.texcoord = tmpvar_3; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xy; - vec2 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.vertex.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FrontColor = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.zw = vec2(0.0, 0.0); - tmpvar_13.xy = xl_retval.texcoord.xy; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-ir.txt deleted file mode 100644 index 9f3548686..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,178 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec2 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec2 tmpvar_18; - tmpvar_18 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_18; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.zw = vec2(0.0, 0.0); - tmpvar_23.xy = xl_retval._LightCoord.xy; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-ir.txt deleted file mode 100644 index cb2ed4d2d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,277 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec4 TtoW0; - vec4 TtoW1; - vec4 TtoW2; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - vec3 worldRefl; - vec3 viewDir; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_4; - tmpvar_4 = -(tmpvar_3); - viewDir = tmpvar_4; - mat3 tmpvar_5; - tmpvar_5 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * viewDir); - worldRefl = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * v.tangent.w); - binormal = tmpvar_8; - mat3 tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.x; - tmpvar_9[0].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.x; - tmpvar_9[0].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.x; - tmpvar_9[0].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.y; - tmpvar_9[1].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.y; - tmpvar_9[1].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.y; - tmpvar_9[1].z = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.tangent.z; - tmpvar_9[2].x = tmpvar_16; - float tmpvar_17; - tmpvar_17 = binormal.z; - tmpvar_9[2].y = tmpvar_17; - float tmpvar_18; - tmpvar_18 = v.normal.z; - tmpvar_9[2].z = tmpvar_18; - mat3 tmpvar_19; - tmpvar_19 = (tmpvar_9); - rotation = (tmpvar_19); - vec4 tmpvar_20; - tmpvar_20.xyz = (rotation * _Object2World[0].xyz).xyz; - tmpvar_20.w = worldRefl.x; - vec4 tmpvar_21; - tmpvar_21 = (tmpvar_20 * unity_Scale.w); - o.TtoW0 = tmpvar_21; - vec4 tmpvar_22; - tmpvar_22.xyz = (rotation * _Object2World[1].xyz).xyz; - tmpvar_22.w = worldRefl.y; - vec4 tmpvar_23; - tmpvar_23 = (tmpvar_22 * unity_Scale.w); - o.TtoW1 = tmpvar_23; - vec4 tmpvar_24; - tmpvar_24.xyz = (rotation * _Object2World[2].xyz).xyz; - tmpvar_24.w = worldRefl.z; - vec4 tmpvar_25; - tmpvar_25 = (tmpvar_24 * unity_Scale.w); - o.TtoW2 = tmpvar_25; - vec4 tmpvar_26; - tmpvar_26 = ComputeScreenPos (o.pos); - vec4 tmpvar_27; - tmpvar_27 = tmpvar_26; - o.hip_screen = tmpvar_27; - vec2 tmpvar_28; - tmpvar_28 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_28.xy.xy; - float tmpvar_29; - tmpvar_29 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_29).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.TtoW0.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval.TtoW1.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval.TtoW2.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29.w = 0.0; - tmpvar_29.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_30; - tmpvar_30 = tmpvar_29; - gl_TexCoord[5] = tmpvar_30; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-ir.txt deleted file mode 100644 index 87f27d197..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-ir.txt +++ /dev/null @@ -1,206 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-ir.txt deleted file mode 100644 index ff62ea859..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-ir.txt +++ /dev/null @@ -1,177 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec2 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0 = tmpvar_2.xy.xy; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - mat3 tmpvar_16; - tmpvar_16 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16[0].xyz); - o.TtoV0 = tmpvar_17; - mat3 tmpvar_18; - tmpvar_18 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18[1].xyz); - o.TtoV1 = tmpvar_19; - mat3 tmpvar_20; - tmpvar_20 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20[2].xyz); - o.TtoV2 = tmpvar_21; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.TtoV0.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.TtoV1.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.TtoV2.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-out.txt deleted file mode 100644 index 244b1b9f5..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-out.txt +++ /dev/null @@ -1,47 +0,0 @@ -attribute vec4 TANGENT; -uniform vec4 _BumpMap_ST; -void main () -{ - vec3 tmpvar_1; - tmpvar_1 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_2; - tmpvar_2[0].x = TANGENT.x; - tmpvar_2[0].y = tmpvar_1.x; - tmpvar_2[0].z = gl_Normal.x; - tmpvar_2[1].x = TANGENT.y; - tmpvar_2[1].y = tmpvar_1.y; - tmpvar_2[1].z = gl_Normal.y; - tmpvar_2[2].x = TANGENT.z; - tmpvar_2[2].y = tmpvar_1.z; - tmpvar_2[2].z = gl_Normal.z; - mat3 tmpvar_3; - tmpvar_3[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_3[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_3[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - mat3 tmpvar_4; - tmpvar_4[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_4[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_4[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - mat3 tmpvar_5; - tmpvar_5[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_5[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_5[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - gl_TexCoord[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = (tmpvar_2 * tmpvar_3[0]); - gl_TexCoord[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (tmpvar_2 * tmpvar_4[1]); - gl_TexCoord[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (tmpvar_2 * tmpvar_5[2]); - gl_TexCoord[3] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-ir.txt deleted file mode 100644 index 0a00aaccd..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-ir.txt +++ /dev/null @@ -1,262 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec4 TtoW0; - vec4 TtoW1; - vec4 TtoW2; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - vec3 worldRefl; - vec3 viewDir; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_4; - tmpvar_4 = -(tmpvar_3); - viewDir = tmpvar_4; - mat3 tmpvar_5; - tmpvar_5 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * viewDir); - worldRefl = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * v.tangent.w); - binormal = tmpvar_8; - mat3 tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.x; - tmpvar_9[0].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.x; - tmpvar_9[0].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.x; - tmpvar_9[0].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.y; - tmpvar_9[1].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.y; - tmpvar_9[1].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.y; - tmpvar_9[1].z = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.tangent.z; - tmpvar_9[2].x = tmpvar_16; - float tmpvar_17; - tmpvar_17 = binormal.z; - tmpvar_9[2].y = tmpvar_17; - float tmpvar_18; - tmpvar_18 = v.normal.z; - tmpvar_9[2].z = tmpvar_18; - mat3 tmpvar_19; - tmpvar_19 = (tmpvar_9); - rotation = (tmpvar_19); - vec4 tmpvar_20; - tmpvar_20.xyz = (rotation * _Object2World[0].xyz).xyz; - tmpvar_20.w = worldRefl.x; - vec4 tmpvar_21; - tmpvar_21 = (tmpvar_20 * unity_Scale.w); - o.TtoW0 = tmpvar_21; - vec4 tmpvar_22; - tmpvar_22.xyz = (rotation * _Object2World[1].xyz).xyz; - tmpvar_22.w = worldRefl.y; - vec4 tmpvar_23; - tmpvar_23 = (tmpvar_22 * unity_Scale.w); - o.TtoW1 = tmpvar_23; - vec4 tmpvar_24; - tmpvar_24.xyz = (rotation * _Object2World[2].xyz).xyz; - tmpvar_24.w = worldRefl.z; - vec4 tmpvar_25; - tmpvar_25 = (tmpvar_24 * unity_Scale.w); - o.TtoW2 = tmpvar_25; - vec4 tmpvar_26; - tmpvar_26 = ComputeScreenPos (o.pos); - vec4 tmpvar_27; - tmpvar_27 = tmpvar_26; - o.hip_screen = tmpvar_27; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.TtoW0.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval.TtoW1.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval.TtoW2.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-ir.txt deleted file mode 100644 index 2aa3e4cd8..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-ir.txt +++ /dev/null @@ -1,189 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec2 uv; - vec2 uv2; - vec3 I; - vec3 TtoW0; - vec3 TtoW1; - vec3 TtoW2; -}; -struct appdata_tan { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -vec3 WorldSpaceViewDir ( - in vec4 v -) -{ - return (_WorldSpaceCameraPos.xyz - (_Object2World * v).xyz); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f vert ( - in appdata_tan v -) -{ - mat3 rotation; - vec3 binormal; - v2f o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.uv = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.uv2 = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = WorldSpaceViewDir (v.vertex); - vec3 tmpvar_4; - tmpvar_4 = -(tmpvar_3); - o.I = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.x; - tmpvar_7[0].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.x; - tmpvar_7[0].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.x; - tmpvar_7[0].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.y; - tmpvar_7[1].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.y; - tmpvar_7[1].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.y; - tmpvar_7[1].z = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.tangent.z; - tmpvar_7[2].x = tmpvar_14; - float tmpvar_15; - tmpvar_15 = binormal.z; - tmpvar_7[2].y = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.normal.z; - tmpvar_7[2].z = tmpvar_16; - mat3 tmpvar_17; - tmpvar_17 = (tmpvar_7); - rotation = (tmpvar_17); - vec3 tmpvar_18; - tmpvar_18 = (rotation * (_Object2World[0].xyz * unity_Scale.w)); - o.TtoW0 = tmpvar_18; - vec3 tmpvar_19; - tmpvar_19 = (rotation * (_Object2World[1].xyz * unity_Scale.w)); - o.TtoW1 = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (rotation * (_Object2World[2].xyz * unity_Scale.w)); - o.TtoW2 = tmpvar_20; - return o; -} - -void main () -{ - appdata_tan xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = vert (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_13.x = xl_retval.fog; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_FOG = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.zw = vec2(0.0, 0.0); - tmpvar_15.xy = xl_retval.uv.xy; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_TexCoord[0] = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.uv2.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[1] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.I.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[2] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.TtoW0.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[3] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.TtoW1.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[4] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.TtoW2.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[5] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-ir.txt deleted file mode 100644 index c7c3395e1..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-ir.txt +++ /dev/null @@ -1,171 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-ir.txt deleted file mode 100644 index 182a17fe1..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-ir.txt +++ /dev/null @@ -1,197 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldRefl; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 viewRefl; - vec3 viewDir; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_3; - tmpvar_3 = -(tmpvar_2); - viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = reflect (viewDir, v.normal); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - viewRefl = tmpvar_5; - mat3 tmpvar_6; - tmpvar_6 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6 * viewRefl); - o.worldRefl = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = ComputeScreenPos (o.pos); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - o.hip_screen = tmpvar_9; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.worldRefl.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-out.txt deleted file mode 100644 index fabd2bc33..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-out.txt +++ /dev/null @@ -1,43 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = _WorldSpaceCameraPos; - mat3 tmpvar_3; - tmpvar_3[0] = _Object2World[0].xyz; - tmpvar_3[1] = _Object2World[1].xyz; - tmpvar_3[2] = _Object2World[2].xyz; - vec4 o_i0; - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5.x = tmpvar_4.x; - tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_5 + tmpvar_4.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_1.z; - xlv_FOG = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (tmpvar_3 * reflect ((gl_Vertex.xyz - ((_World2Object * tmpvar_2).xyz * unity_Scale.w)), gl_Normal)); - gl_TexCoord[1] = tmpvar_8; - gl_TexCoord[2] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-ir.txt deleted file mode 100644 index a7e87ecd7..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-ir.txt +++ /dev/null @@ -1,205 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-ir.txt deleted file mode 100644 index 049e46c56..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-ir.txt +++ /dev/null @@ -1,274 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec4 TtoW0; - vec4 TtoW1; - vec4 TtoW2; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - vec3 worldRefl; - vec3 viewDir; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_4; - tmpvar_4 = -(tmpvar_3); - viewDir = tmpvar_4; - mat3 tmpvar_5; - tmpvar_5 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * viewDir); - worldRefl = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * v.tangent.w); - binormal = tmpvar_8; - mat3 tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.x; - tmpvar_9[0].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.x; - tmpvar_9[0].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.x; - tmpvar_9[0].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.y; - tmpvar_9[1].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.y; - tmpvar_9[1].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.y; - tmpvar_9[1].z = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.tangent.z; - tmpvar_9[2].x = tmpvar_16; - float tmpvar_17; - tmpvar_17 = binormal.z; - tmpvar_9[2].y = tmpvar_17; - float tmpvar_18; - tmpvar_18 = v.normal.z; - tmpvar_9[2].z = tmpvar_18; - mat3 tmpvar_19; - tmpvar_19 = (tmpvar_9); - rotation = (tmpvar_19); - vec4 tmpvar_20; - tmpvar_20.xyz = (rotation * _Object2World[0].xyz).xyz; - tmpvar_20.w = worldRefl.x; - vec4 tmpvar_21; - tmpvar_21 = (tmpvar_20 * unity_Scale.w); - o.TtoW0 = tmpvar_21; - vec4 tmpvar_22; - tmpvar_22.xyz = (rotation * _Object2World[1].xyz).xyz; - tmpvar_22.w = worldRefl.y; - vec4 tmpvar_23; - tmpvar_23 = (tmpvar_22 * unity_Scale.w); - o.TtoW1 = tmpvar_23; - vec4 tmpvar_24; - tmpvar_24.xyz = (rotation * _Object2World[2].xyz).xyz; - tmpvar_24.w = worldRefl.z; - vec4 tmpvar_25; - tmpvar_25 = (tmpvar_24 * unity_Scale.w); - o.TtoW2 = tmpvar_25; - vec4 tmpvar_26; - tmpvar_26 = ComputeScreenPos (o.pos); - vec4 tmpvar_27; - tmpvar_27 = tmpvar_26; - o.hip_screen = tmpvar_27; - vec3 tmpvar_28; - tmpvar_28 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_29; - tmpvar_29 = (rotation * tmpvar_28); - o.viewDir = tmpvar_29; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval.TtoW0.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval.TtoW1.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29 = xl_retval.TtoW2.xyzw; - vec4 tmpvar_30; - tmpvar_30 = tmpvar_29; - gl_TexCoord[5] = tmpvar_30; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-ir.txt deleted file mode 100644 index 9eab39855..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-ir.txt +++ /dev/null @@ -1,206 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-ir.txt deleted file mode 100644 index a25b3711c..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-ir.txt +++ /dev/null @@ -1,206 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec2 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec2 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = xl_retval._LightCoord.xy; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-ir.txt deleted file mode 100644 index d25a0fef9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-ir.txt +++ /dev/null @@ -1,191 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceViewDir ( - in vec4 v -) -{ - return (_WorldSpaceCameraPos.xyz - (_Object2World * v).xyz); -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = WorldSpaceViewDir (v.vertex); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.viewDir = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_8; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-ir.txt deleted file mode 100644 index 182a17fe1..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-ir.txt +++ /dev/null @@ -1,197 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldRefl; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 viewRefl; - vec3 viewDir; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_3; - tmpvar_3 = -(tmpvar_2); - viewDir = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = reflect (viewDir, v.normal); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - viewRefl = tmpvar_5; - mat3 tmpvar_6; - tmpvar_6 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6 * viewRefl); - o.worldRefl = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = ComputeScreenPos (o.pos); - vec4 tmpvar_9; - tmpvar_9 = tmpvar_8; - o.hip_screen = tmpvar_9; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.worldRefl.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-out.txt deleted file mode 100644 index fabd2bc33..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-out.txt +++ /dev/null @@ -1,43 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = _WorldSpaceCameraPos; - mat3 tmpvar_3; - tmpvar_3[0] = _Object2World[0].xyz; - tmpvar_3[1] = _Object2World[1].xyz; - tmpvar_3[2] = _Object2World[2].xyz; - vec4 o_i0; - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5.x = tmpvar_4.x; - tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_5 + tmpvar_4.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_1.z; - xlv_FOG = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.zw = vec2(0.0, 0.0); - tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (tmpvar_3 * reflect ((gl_Vertex.xyz - ((_World2Object * tmpvar_2).xyz * unity_Scale.w)), gl_Normal)); - gl_TexCoord[1] = tmpvar_8; - gl_TexCoord[2] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-ir.txt deleted file mode 100644 index 5c28938a4..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-ir.txt +++ /dev/null @@ -1,54 +0,0 @@ -struct v2f { - vec4 vertex; - vec3 texcoord; -}; -struct appdata_t { - vec4 vertex; - vec3 texcoord; -}; -v2f vert ( - in appdata_t v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.vertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = v.texcoord; - o.texcoord = tmpvar_2; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - v2f tmpvar_5; - tmpvar_5 = vert (xlt_v); - v2f tmpvar_6; - tmpvar_6 = tmpvar_5; - xl_retval = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = xl_retval.vertex.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - gl_Position = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = xl_retval.texcoord.xyz; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_TexCoord[0] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-ir.txt deleted file mode 100644 index 0bf9822ab..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,178 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_18; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-ir.txt deleted file mode 100644 index bb4a8330b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-ir.txt +++ /dev/null @@ -1,135 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -uniform vec4 _Illum_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _Illum_ST.xy) + _Illum_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-ir.txt deleted file mode 100644 index 1c9e12c8f..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-ir.txt +++ /dev/null @@ -1,150 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -uniform vec4 _Illum_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _Illum_ST.xy) + _Illum_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_5.xy.xy; - float tmpvar_6; - tmpvar_6 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_6).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-ir.txt deleted file mode 100644 index a7e87ecd7..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-ir.txt +++ /dev/null @@ -1,205 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-ir.txt deleted file mode 100644 index 9eab39855..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-ir.txt +++ /dev/null @@ -1,206 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 viewDir; - vec3 lightDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-ir.txt deleted file mode 100644 index d6a193652..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-ir.txt +++ /dev/null @@ -1,38 +0,0 @@ -struct v2f { - vec4 vertex; -}; -struct appdata_t { - vec4 vertex; -}; -v2f vert ( - in appdata_t v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.vertex = tmpvar_1; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - v2f tmpvar_3; - tmpvar_3 = vert (xlt_v); - v2f tmpvar_4; - tmpvar_4 = tmpvar_3; - xl_retval = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = xl_retval.vertex.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - gl_Position = tmpvar_6; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Specular-ir.txt deleted file mode 100644 index d25a0fef9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular-ir.txt +++ /dev/null @@ -1,191 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceViewDir ( - in vec4 v -) -{ - return (_WorldSpaceCameraPos.xyz - (_Object2World * v).xyz); -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = WorldSpaceViewDir (v.vertex); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.viewDir = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_8; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-ir.txt deleted file mode 100644 index c8752824a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-ir.txt +++ /dev/null @@ -1,147 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_4.xy.xy; - float tmpvar_5; - tmpvar_5 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_5).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-out.txt deleted file mode 100644 index e52b6728b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-out.txt +++ /dev/null @@ -1,37 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec3 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; - tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_6; - gl_TexCoord[1] = o_i0; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tmpvar_1; - gl_TexCoord[2] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-ir.txt deleted file mode 100644 index 2548683d6..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-ir.txt +++ /dev/null @@ -1,174 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Detail_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord1.xy * _Detail_ST.xy) + _Detail_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_7; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-ir.txt deleted file mode 100644 index af9d3cb0a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-ir.txt +++ /dev/null @@ -1,135 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -uniform vec4 _Detail_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord1.xy * _Detail_ST.xy) + _Detail_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-ir.txt deleted file mode 100644 index 3c59b85b0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-ir.txt +++ /dev/null @@ -1,194 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform vec4 _SpecMap_ST; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceViewDir ( - in vec4 v -) -{ - return (_WorldSpaceCameraPos.xyz - (_Object2World * v).xyz); -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _SpecMap_ST.xy) + _SpecMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.lightDir = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = WorldSpaceViewDir (v.vertex); - vec3 tmpvar_8; - tmpvar_8 = tmpvar_7; - o.viewDir = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_9; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-ir.txt deleted file mode 100644 index bda6a6ce9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-ir.txt +++ /dev/null @@ -1,186 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct Input { - vec3 foo; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 cust_foo; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void vert ( - inout appdata_full v, - out Input o -) -{ - vec3 tmpvar_1; - tmpvar_1 = ((v.normal * 0.5) + 0.5); - o.foo = tmpvar_1; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - Input customInputData; - vert (v, customInputData); - vec3 tmpvar_1; - tmpvar_1 = customInputData.foo; - o.cust_foo = tmpvar_1; - PositionFog (v.vertex, o.pos, o.fog); - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.cust_foo.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-ir.txt deleted file mode 100644 index d4167aa67..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-ir.txt +++ /dev/null @@ -1,186 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct Input { - vec3 foo; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 cust_foo; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void vert ( - inout appdata_full v, - out Input o -) -{ - vec3 tmpvar_1; - tmpvar_1 = ((v.normal * 0.5) + 0.5); - o.foo = tmpvar_1; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - Input customInputData; - vert (v, customInputData); - vec3 tmpvar_1; - tmpvar_1 = customInputData.foo; - o.cust_foo = tmpvar_1; - PositionFog (v.vertex, o.pos, o.fog); - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.cust_foo.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = xl_retval._LightCoord.xy; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-ir.txt deleted file mode 100644 index 06225cf7b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-ir.txt +++ /dev/null @@ -1,161 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct Input { - vec3 foo; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec3 cust_foo; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -void vert ( - inout appdata_full v, - out Input o -) -{ - vec3 tmpvar_1; - tmpvar_1 = ((v.normal * 0.5) + 0.5); - o.foo = tmpvar_1; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - Input customInputData; - vert (v, customInputData); - vec3 tmpvar_1; - tmpvar_1 = customInputData.foo; - o.cust_foo = tmpvar_1; - PositionFog (v.vertex, o.pos, o.fog); - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_4.xy.xy; - float tmpvar_5; - tmpvar_5 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_5).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.cust_foo.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-out.txt deleted file mode 100644 index bf5329555..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-out.txt +++ /dev/null @@ -1,36 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -void main () -{ - vec3 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0_i1; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0_i1 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0_i1.xy = (tmpvar_4 + tmpvar_3.w); - o_i0_i1.zw = tmpvar_2.zw; - tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.w = 0.0; - tmpvar_6.xyz = ((gl_Normal * 0.5) + 0.5); - gl_TexCoord[0] = tmpvar_6; - gl_TexCoord[1] = o_i0_i1; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tmpvar_1; - gl_TexCoord[2] = tmpvar_7; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-ir.txt deleted file mode 100644 index f031a9d94..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-ir.txt +++ /dev/null @@ -1,161 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-ir.txt deleted file mode 100644 index 6b7ae345b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-out.txt deleted file mode 100644 index 2f3f8d3dc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_4; - tmpvar_4.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_4.x = tmpvar_1.z; - xlv_FOG = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_5; - gl_TexCoord[1] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-ir.txt deleted file mode 100644 index f68ed4cca..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-ir.txt +++ /dev/null @@ -1,183 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec2 hip_lmap; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_LightmapST; -uniform mat4 _Object2World; -uniform vec4 _Decal_ST; -uniform vec4 _DecalBump_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _Decal_ST.xy) + _Decal_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _DecalBump_ST.xy) + _DecalBump_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmap = tmpvar_3.xy.xy; - mat3 tmpvar_4; - tmpvar_4 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * (v.normal * unity_Scale.w)); - worldN = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6 * v.tangent.w); - binormal = tmpvar_7; - mat3 tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.x; - tmpvar_8[0].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.x; - tmpvar_8[0].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.x; - tmpvar_8[0].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.y; - tmpvar_8[1].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.y; - tmpvar_8[1].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.y; - tmpvar_8[1].z = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.tangent.z; - tmpvar_8[2].x = tmpvar_15; - float tmpvar_16; - tmpvar_16 = binormal.z; - tmpvar_8[2].y = tmpvar_16; - float tmpvar_17; - tmpvar_17 = v.normal.z; - tmpvar_8[2].z = tmpvar_17; - mat3 tmpvar_18; - tmpvar_18 = (tmpvar_8); - rotation = (tmpvar_18); - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.zw = vec2(0.0, 0.0); - tmpvar_21.xy = xl_retval.hip_lmap.xy; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-ir.txt deleted file mode 100644 index c94e9103b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-ir.txt +++ /dev/null @@ -1,306 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 vlight; - vec4 _ShadowCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_SHC; -uniform vec4 unity_SHBr; -uniform vec4 unity_SHBg; -uniform vec4 unity_SHBb; -uniform vec4 unity_SHAr; -uniform vec4 unity_SHAg; -uniform vec4 unity_SHAb; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _Decal_ST; -uniform vec4 _DecalBump_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 ShadeSH9 ( - in vec4 normal -) -{ - vec3 x3; - float vC; - vec3 x2; - vec4 vB; - vec3 x1; - float tmpvar_1; - tmpvar_1 = dot (unity_SHAr, normal); - float tmpvar_2; - tmpvar_2 = tmpvar_1; - x1.x = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (unity_SHAg, normal); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - x1.y = vec2(tmpvar_4).y; - float tmpvar_5; - tmpvar_5 = dot (unity_SHAb, normal); - float tmpvar_6; - tmpvar_6 = tmpvar_5; - x1.z = vec3(tmpvar_6).z; - vec4 tmpvar_7; - tmpvar_7 = (normal.xyzz * normal.yzzx); - vB = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (unity_SHBr, vB); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - x2.x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (unity_SHBg, vB); - float tmpvar_11; - tmpvar_11 = tmpvar_10; - x2.y = vec2(tmpvar_11).y; - float tmpvar_12; - tmpvar_12 = dot (unity_SHBb, vB); - float tmpvar_13; - tmpvar_13 = tmpvar_12; - x2.z = vec3(tmpvar_13).z; - float tmpvar_14; - tmpvar_14 = ((normal.x * normal.x) - (normal.y * normal.y)); - vC = tmpvar_14; - vec3 tmpvar_15; - tmpvar_15 = (unity_SHC.xyz * vC); - x3 = tmpvar_15; - return ((x1 + x2) + x3); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 shlight; - mat3 rotation; - vec3 binormal; - vec3 worldN; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _Decal_ST.xy) + _Decal_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _DecalBump_ST.xy) + _DecalBump_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - worldN = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * v.tangent.w); - binormal = tmpvar_6; - mat3 tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.x; - tmpvar_7[0].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.x; - tmpvar_7[0].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.x; - tmpvar_7[0].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.y; - tmpvar_7[1].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.y; - tmpvar_7[1].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.y; - tmpvar_7[1].z = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.tangent.z; - tmpvar_7[2].x = tmpvar_14; - float tmpvar_15; - tmpvar_15 = binormal.z; - tmpvar_7[2].y = tmpvar_15; - float tmpvar_16; - tmpvar_16 = v.normal.z; - tmpvar_7[2].z = tmpvar_16; - mat3 tmpvar_17; - tmpvar_17 = (tmpvar_7); - rotation = (tmpvar_17); - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.lightDir = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 1.0; - tmpvar_20.xyz = worldN.xyz; - vec3 tmpvar_21; - tmpvar_21 = ShadeSH9 (tmpvar_20); - vec3 tmpvar_22; - tmpvar_22 = tmpvar_21; - shlight = tmpvar_22; - vec3 tmpvar_23; - tmpvar_23 = shlight; - o.vlight = tmpvar_23; - vec4 tmpvar_24; - tmpvar_24 = ComputeScreenPos (o.pos); - vec4 tmpvar_25; - tmpvar_25 = tmpvar_24; - o._ShadowCoord = tmpvar_25; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.vlight.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._ShadowCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-ir.txt deleted file mode 100644 index 7e2e968cd..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-ir.txt +++ /dev/null @@ -1,172 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec2 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = xl_retval._LightCoord.xy; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-ir.txt deleted file mode 100644 index f031a9d94..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-ir.txt +++ /dev/null @@ -1,161 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-ir.txt deleted file mode 100644 index 9adae7db5..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-ir.txt +++ /dev/null @@ -1,209 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * v.tangent.w); - binormal = tmpvar_5; - mat3 tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.tangent.x; - tmpvar_6[0].x = tmpvar_7; - float tmpvar_8; - tmpvar_8 = binormal.x; - tmpvar_6[0].y = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.normal.x; - tmpvar_6[0].z = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.y; - tmpvar_6[1].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.y; - tmpvar_6[1].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.y; - tmpvar_6[1].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.z; - tmpvar_6[2].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.z; - tmpvar_6[2].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.z; - tmpvar_6[2].z = tmpvar_15; - mat3 tmpvar_16; - tmpvar_16 = (tmpvar_6); - rotation = (tmpvar_16); - vec3 tmpvar_17; - tmpvar_17 = (rotation * (v.normal * unity_Scale.w)); - o.normal = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.normal.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-out.txt deleted file mode 100644 index 89d86455a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-out.txt +++ /dev/null @@ -1,55 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - vec3 tmpvar_4; - tmpvar_4 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_5; - tmpvar_5[0].x = TANGENT.x; - tmpvar_5[0].y = tmpvar_4.x; - tmpvar_5[0].z = gl_Normal.x; - tmpvar_5[1].x = TANGENT.y; - tmpvar_5[1].y = tmpvar_4.y; - tmpvar_5[1].z = gl_Normal.y; - tmpvar_5[2].x = TANGENT.z; - tmpvar_5[2].y = tmpvar_4.z; - tmpvar_5[2].z = gl_Normal.z; - vec4 tmpvar_6; - tmpvar_6.w = 1.0; - tmpvar_6.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_1; - vec4 tmpvar_7; - tmpvar_7.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_7.x = tmpvar_1.z; - xlv_FOG = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (tmpvar_5 * (((_World2Object * tmpvar_6).xyz * unity_Scale.w) - gl_Vertex.xyz)); - gl_TexCoord[1] = tmpvar_9; - gl_TexCoord[2] = o_i0; - vec4 tmpvar_10; - tmpvar_10.w = 0.0; - tmpvar_10.xyz = (tmpvar_5 * (gl_Normal * unity_Scale.w)); - gl_TexCoord[3] = tmpvar_10; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-ir.txt deleted file mode 100644 index 48c164c9c..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-ir.txt +++ /dev/null @@ -1,224 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 viewDir; - vec4 hip_screen; - vec3 normal; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_4.xy.xy; - float tmpvar_5; - tmpvar_5 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_5).z; - vec3 tmpvar_6; - tmpvar_6 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_7; - tmpvar_7 = (tmpvar_6 * v.tangent.w); - binormal = tmpvar_7; - mat3 tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.x; - tmpvar_8[0].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.x; - tmpvar_8[0].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.x; - tmpvar_8[0].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.y; - tmpvar_8[1].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.y; - tmpvar_8[1].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.y; - tmpvar_8[1].z = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.tangent.z; - tmpvar_8[2].x = tmpvar_15; - float tmpvar_16; - tmpvar_16 = binormal.z; - tmpvar_8[2].y = tmpvar_16; - float tmpvar_17; - tmpvar_17 = v.normal.z; - tmpvar_8[2].z = tmpvar_17; - mat3 tmpvar_18; - tmpvar_18 = (tmpvar_8); - rotation = (tmpvar_18); - vec3 tmpvar_19; - tmpvar_19 = (rotation * (v.normal * unity_Scale.w)); - o.normal = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_21; - tmpvar_21 = (rotation * tmpvar_20); - o.viewDir = tmpvar_21; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.normal.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-ir.txt deleted file mode 100644 index ae6d445be..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-ir.txt +++ /dev/null @@ -1,175 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.tangent.w); - binormal = tmpvar_3; - mat3 tmpvar_4; - float tmpvar_5; - tmpvar_5 = v.tangent.x; - tmpvar_4[0].x = tmpvar_5; - float tmpvar_6; - tmpvar_6 = binormal.x; - tmpvar_4[0].y = tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.normal.x; - tmpvar_4[0].z = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.y; - tmpvar_4[1].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.y; - tmpvar_4[1].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.y; - tmpvar_4[1].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.z; - tmpvar_4[2].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.z; - tmpvar_4[2].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.z; - tmpvar_4[2].z = tmpvar_13; - mat3 tmpvar_14; - tmpvar_14 = (tmpvar_4); - rotation = (tmpvar_14); - vec3 tmpvar_15; - tmpvar_15 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_16; - tmpvar_16 = (rotation * tmpvar_15); - o.lightDir = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_17; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-ir.txt deleted file mode 100644 index 4d57353f8..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-ir.txt +++ /dev/null @@ -1,176 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 lightDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.tangent.w); - binormal = tmpvar_3; - mat3 tmpvar_4; - float tmpvar_5; - tmpvar_5 = v.tangent.x; - tmpvar_4[0].x = tmpvar_5; - float tmpvar_6; - tmpvar_6 = binormal.x; - tmpvar_4[0].y = tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.normal.x; - tmpvar_4[0].z = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.tangent.y; - tmpvar_4[1].x = tmpvar_8; - float tmpvar_9; - tmpvar_9 = binormal.y; - tmpvar_4[1].y = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.normal.y; - tmpvar_4[1].z = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.tangent.z; - tmpvar_4[2].x = tmpvar_11; - float tmpvar_12; - tmpvar_12 = binormal.z; - tmpvar_4[2].y = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.normal.z; - tmpvar_4[2].z = tmpvar_13; - mat3 tmpvar_14; - tmpvar_14 = (tmpvar_4); - rotation = (tmpvar_14); - vec3 tmpvar_15; - tmpvar_15 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_16; - tmpvar_16 = (rotation * tmpvar_15); - o.lightDir = tmpvar_16; - vec3 tmpvar_17; - tmpvar_17 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_17; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-ir.txt deleted file mode 100644 index 1324fdf24..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-ir.txt +++ /dev/null @@ -1,160 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - mat3 tmpvar_1; - tmpvar_1 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.lightDir = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_5; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.normal.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-ir.txt deleted file mode 100644 index 6ba4142e6..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-ir.txt +++ /dev/null @@ -1,161 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec3 normal; - vec3 lightDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - mat3 tmpvar_1; - tmpvar_1 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_2; - tmpvar_2 = (tmpvar_1 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.lightDir = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_5; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.normal.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-ir.txt deleted file mode 100644 index 3d0bf38c6..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_screenPos; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec4 tmpvar_1; - tmpvar_1 = ComputeScreenPos (o.pos); - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - o.hip_screenPos = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_screenPos.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-out.txt deleted file mode 100644 index 65efadd7a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-out.txt +++ /dev/null @@ -1,33 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _ProjectionParams; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - vec4 o_i0_i1; - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_1 * 0.5); - o_i0_i1 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5.x = tmpvar_4.x; - tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); - o_i0_i1.xy = (tmpvar_5 + tmpvar_4.w); - o_i0_i1.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_1.z; - xlv_FOG = tmpvar_6; - gl_TexCoord[0] = o_i0; - gl_TexCoord[1] = o_i0_i1; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-ir.txt deleted file mode 100644 index 831e675e2..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-ir.txt +++ /dev/null @@ -1,181 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldPos; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = (_Object2World * v.vertex).xyz; - o.worldPos = tmpvar_2; - mat3 tmpvar_3; - tmpvar_3 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.lightDir = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_7; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.worldPos.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.normal.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-ir.txt deleted file mode 100644 index 1d019fc5d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-ir.txt +++ /dev/null @@ -1,143 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldPos; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = (_Object2World * v.vertex).xyz; - o.worldPos = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.worldPos.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-out.txt deleted file mode 100644 index 73455ea57..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-out.txt +++ /dev/null @@ -1,33 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_4; - tmpvar_4.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_4.x = tmpvar_1.z; - xlv_FOG = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.w = 0.0; - tmpvar_6.xyz = (_Object2World * gl_Vertex).xyz; - gl_TexCoord[1] = tmpvar_6; - gl_TexCoord[2] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-ir.txt deleted file mode 100644 index c0f6bb413..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-ir.txt +++ /dev/null @@ -1,158 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 worldPos; - vec4 hip_screen; - vec3 hip_lmapFade; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec3 tmpvar_2; - tmpvar_2 = (_Object2World * v.vertex).xyz; - o.worldPos = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = ComputeScreenPos (o.pos); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - o.hip_screen = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5 = ((v.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - o.hip_lmapFade.xy = tmpvar_5.xy.xy; - float tmpvar_6; - tmpvar_6 = ((-((gl_ModelViewMatrix * v.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - o.hip_lmapFade.z = vec3(tmpvar_6).z; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.worldPos.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.hip_lmapFade.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-out.txt deleted file mode 100644 index 1c79b9b50..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-out.txt +++ /dev/null @@ -1,42 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; -uniform vec4 _ProjectionParams; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -void main () -{ - vec3 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; - tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); - gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = (_Object2World * gl_Vertex).xyz; - gl_TexCoord[1] = tmpvar_7; - gl_TexCoord[2] = o_i0; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = tmpvar_1; - gl_TexCoord[3] = tmpvar_8; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-ir.txt deleted file mode 100644 index 2ef099c52..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-ir.txt +++ /dev/null @@ -1,146 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 _ShadowCoord0; - vec3 _ShadowCoord1; - vec3 _ShadowCoord2; - vec3 _ShadowCoord3; - vec2 _ShadowZFade; - vec3 worldPos; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -uniform mat4 _World2Shadow3; -uniform mat4 _World2Shadow2; -uniform mat4 _World2Shadow1; -uniform mat4 _World2Shadow; -uniform mat4 _Object2World; -uniform vec4 _LightShadowData; -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec4 wpos; - float z; - v2f_surf o; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v.vertex).xyz; - o.worldPos = tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_2; - float tmpvar_3; - tmpvar_3 = -((gl_ModelViewMatrix * v.vertex).z); - z = tmpvar_3; - float tmpvar_4; - tmpvar_4 = z; - o._ShadowZFade.x = tmpvar_4; - float tmpvar_5; - tmpvar_5 = ((z * _LightShadowData.z) + _LightShadowData.w); - o._ShadowZFade.y = vec2(tmpvar_5).y; - vec4 tmpvar_6; - tmpvar_6 = (_Object2World * v.vertex); - wpos = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = (_World2Shadow * wpos).xyz; - o._ShadowCoord0 = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (_World2Shadow1 * wpos).xyz; - o._ShadowCoord1 = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (_World2Shadow2 * wpos).xyz; - o._ShadowCoord2 = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (_World2Shadow3 * wpos).xyz; - o._ShadowCoord3 = tmpvar_10; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval._ShadowCoord0.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval._ShadowCoord1.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval._ShadowCoord2.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval._ShadowCoord3.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = xl_retval._ShadowZFade.xy; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[4] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval.worldPos.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[5] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-ir.txt deleted file mode 100644 index 18a09433b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-ir.txt +++ /dev/null @@ -1,190 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec3 worldRefl; - vec3 normal; - vec3 lightDir; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec3 viewRefl; - vec3 viewDir; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec3 tmpvar_1; - tmpvar_1 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_2; - tmpvar_2 = -(tmpvar_1); - viewDir = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = reflect (viewDir, v.normal); - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - viewRefl = tmpvar_4; - mat3 tmpvar_5; - tmpvar_5 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_6; - tmpvar_6 = (tmpvar_5 * viewRefl); - o.worldRefl = tmpvar_6; - mat3 tmpvar_7; - tmpvar_7 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_8; - tmpvar_8 = (tmpvar_7 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - o.lightDir = tmpvar_10; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.worldRefl.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-out.txt deleted file mode 100644 index 73fa4599e..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-out.txt +++ /dev/null @@ -1,40 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 tmpvar_2; - tmpvar_2.w = 1.0; - tmpvar_2.xyz = _WorldSpaceCameraPos; - mat3 tmpvar_3; - tmpvar_3[0] = _Object2World[0].xyz; - tmpvar_3[1] = _Object2World[1].xyz; - tmpvar_3[2] = _Object2World[2].xyz; - mat3 tmpvar_4; - tmpvar_4[0] = _Object2World[0].xyz; - tmpvar_4[1] = _Object2World[1].xyz; - tmpvar_4[2] = _Object2World[2].xyz; - gl_Position = tmpvar_1; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_1.z; - xlv_FOG = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6.w = 0.0; - tmpvar_6.xyz = (tmpvar_3 * reflect ((gl_Vertex.xyz - ((_World2Object * tmpvar_2).xyz * unity_Scale.w)), gl_Normal)); - gl_TexCoord[0] = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = (tmpvar_4 * (gl_Normal * unity_Scale.w)); - gl_TexCoord[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = _WorldSpaceLightPos0.xyz; - gl_TexCoord[2] = tmpvar_8; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-ir.txt deleted file mode 100644 index 50b15335d..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec3 normal; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - o.normal = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval.normal.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-ir.txt deleted file mode 100644 index 3ef8127a9..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-ir.txt +++ /dev/null @@ -1,91 +0,0 @@ -struct v2f { - vec4 pos; - vec4 color; -}; -struct appdata_base { - vec4 vertex; - vec3 normal; - vec4 texcoord; -}; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f vert ( - in appdata_base v -) -{ - vec3 normal; - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * v.normal); - normal = tmpvar_3; - vec4 tmpvar_4; - tmpvar_4.w = 1.0; - tmpvar_4.xyz = ((normal * 0.5) + 0.5).xyz; - vec4 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.color = tmpvar_5; - return o; -} - -void main () -{ - appdata_base xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.pos.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FrontColor = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-ir.txt deleted file mode 100644 index e59ef5556..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-ir.txt +++ /dev/null @@ -1,83 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -struct appdata_base { - vec4 vertex; - vec3 normal; - vec4 texcoord; -}; -uniform sampler2D _CameraDepthTexture; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; -} - -v2f vert ( - in appdata_base v -) -{ - v2f o; - float tex; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = v.texcoord.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (_CameraDepthTexture, tmpvar_1); - float tmpvar_3; - tmpvar_3 = tmpvar_2.x; - tex = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.vertex.y + ((1.0 - tex) * 3.0)); - v.vertex.y = vec2(tmpvar_4).y; - vec4 tmpvar_5; - tmpvar_5 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = v.texcoord.xy; - o.uv = tmpvar_6; - return o; -} - -void main () -{ - appdata_base xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.pos.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.uv.xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-ir.txt deleted file mode 100644 index ef7878757..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-ir.txt +++ /dev/null @@ -1,83 +0,0 @@ -struct v2f { - vec4 pos; - vec2 uv; -}; -struct appdata_base { - vec4 vertex; - vec3 normal; - vec4 texcoord; -}; -uniform sampler2D _MainTex; -vec4 xll_tex2Dlod ( - in sampler2D s, - in vec4 coord -) -{ - vec4 tmpvar_1; - tmpvar_1 = texture2DLod (s, coord.xy, coord.w); - return tmpvar_1; -} - -v2f vert ( - in appdata_base v -) -{ - v2f o; - vec4 tex; - vec4 tmpvar_1; - tmpvar_1.zw = vec2(0.0, 0.0); - tmpvar_1.xy = v.texcoord.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = xll_tex2Dlod (_MainTex, tmpvar_1); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - tex = tmpvar_3; - float tmpvar_4; - tmpvar_4 = (v.vertex.y + (tex.x * 2.0)); - v.vertex.y = vec2(tmpvar_4).y; - vec4 tmpvar_5; - tmpvar_5 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6 = v.texcoord.xy; - o.uv = tmpvar_6; - return o; -} - -void main () -{ - appdata_base xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = gl_Normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.normal = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.texcoord = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.pos.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.uv.xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[0] = tmpvar_12; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-out.txt deleted file mode 100644 index ad4a51315..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-out.txt +++ /dev/null @@ -1,16 +0,0 @@ -uniform sampler2D _MainTex; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex; - vec4 tmpvar_2; - tmpvar_2.zw = vec2(0.0, 0.0); - tmpvar_2.xy = gl_MultiTexCoord0.xy; - tmpvar_1.y = (gl_Vertex.y + (texture2DLod (_MainTex, tmpvar_2.xy, 0.0).x * 2.0)); - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_1); - vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 0.0); - tmpvar_3.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_3; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-ir.txt deleted file mode 100644 index c698dbbdc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-ir.txt +++ /dev/null @@ -1,104 +0,0 @@ -struct v2f { - vec4 vertex; - vec4 color; - vec3 texcoord; -}; -struct appdata_t { - vec4 vertex; - vec4 color; - vec3 normal; -}; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -v2f vert ( - in appdata_t v -) -{ - vec3 viewDir; - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.vertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_3; - tmpvar_3 = normalize (tmpvar_2); - vec3 tmpvar_4; - tmpvar_4 = -(tmpvar_3); - viewDir = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = reflect (viewDir, v.normal); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - o.texcoord = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = o.texcoord.xyz; - vec3 tmpvar_8; - tmpvar_8 = (gl_ModelViewMatrix * tmpvar_7).xyz; - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8; - o.texcoord = tmpvar_9; - vec4 tmpvar_10; - tmpvar_10 = v.color; - o.color = tmpvar_10; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.vertex.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_FrontColor = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.w = 0.0; - tmpvar_13.xyz = xl_retval.texcoord.xyz; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[0] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-out.txt deleted file mode 100644 index 2f901cd0e..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-out.txt +++ /dev/null @@ -1,19 +0,0 @@ -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -void main () -{ - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos; - vec4 tmpvar_2; - tmpvar_2.w = 0.0; - tmpvar_2.xyz = reflect (-(normalize ((((_World2Object * tmpvar_1).xyz * unity_Scale.w) - gl_Vertex.xyz))), gl_Normal); - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - gl_FrontColor = gl_Color; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = (gl_ModelViewMatrix * tmpvar_2).xyz; - gl_TexCoord[0] = tmpvar_3; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-ir.txt deleted file mode 100644 index b4363fe50..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-ir.txt +++ /dev/null @@ -1,76 +0,0 @@ -struct v2f { - vec4 pos; - vec2 texcoord; - vec3 cubenormal; -}; -struct appdata { - vec4 vertex; - vec2 texcoord; - vec3 normal; -}; -uniform vec4 _MainTex_ST; -v2f vert ( - in appdata v -) -{ - v2f o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.texcoord = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = v.normal.xyz; - vec3 tmpvar_4; - tmpvar_4 = (gl_ModelViewMatrix * tmpvar_3).xyz; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.cubenormal = tmpvar_5; - return o; -} - -void main () -{ - appdata xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = gl_MultiTexCoord0.xy; - vec2 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.texcoord = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - v2f tmpvar_7; - tmpvar_7 = vert (xlt_v); - v2f tmpvar_8; - tmpvar_8 = tmpvar_7; - xl_retval = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = xl_retval.pos.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - gl_Position = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = xl_retval.texcoord.xy; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_TexCoord[0] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.w = 0.0; - tmpvar_13.xyz = xl_retval.cubenormal.xyz; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - gl_TexCoord[1] = tmpvar_14; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-ir.txt deleted file mode 100644 index 87f27d197..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-ir.txt +++ /dev/null @@ -1,206 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt deleted file mode 100644 index 8790fed9b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-ir.txt +++ /dev/null @@ -1,166 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec4 hip_pack0; - vec3 lightDir; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _World2Object; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_1.xy.xy; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_2.xxxy.zw; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt deleted file mode 100644 index 6b7ae345b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt deleted file mode 100644 index 2f3f8d3dc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_4; - tmpvar_4.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_4.x = tmpvar_1.z; - xlv_FOG = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_5; - gl_TexCoord[1] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-ir.txt deleted file mode 100644 index 9e934af72..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-ir.txt +++ /dev/null @@ -1,180 +0,0 @@ -struct v2f_surf { - vec4 pos; - vec4 hip_pack0; - vec3 TtoV0; - vec3 TtoV1; - vec3 TtoV2; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -attribute vec4 TANGENT; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0.xy = tmpvar_2.xy.xy; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - o.hip_pack0.zw = tmpvar_3.xxxy.zw; - vec3 tmpvar_4; - tmpvar_4 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_5; - tmpvar_5 = (tmpvar_4 * v.tangent.w); - binormal = tmpvar_5; - mat3 tmpvar_6; - float tmpvar_7; - tmpvar_7 = v.tangent.x; - tmpvar_6[0].x = tmpvar_7; - float tmpvar_8; - tmpvar_8 = binormal.x; - tmpvar_6[0].y = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.normal.x; - tmpvar_6[0].z = tmpvar_9; - float tmpvar_10; - tmpvar_10 = v.tangent.y; - tmpvar_6[1].x = tmpvar_10; - float tmpvar_11; - tmpvar_11 = binormal.y; - tmpvar_6[1].y = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.normal.y; - tmpvar_6[1].z = tmpvar_12; - float tmpvar_13; - tmpvar_13 = v.tangent.z; - tmpvar_6[2].x = tmpvar_13; - float tmpvar_14; - tmpvar_14 = binormal.z; - tmpvar_6[2].y = tmpvar_14; - float tmpvar_15; - tmpvar_15 = v.normal.z; - tmpvar_6[2].z = tmpvar_15; - mat3 tmpvar_16; - tmpvar_16 = (tmpvar_6); - rotation = (tmpvar_16); - mat3 tmpvar_17; - tmpvar_17 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_18; - tmpvar_18 = (rotation * tmpvar_17[0].xyz); - o.TtoV0 = tmpvar_18; - mat3 tmpvar_19; - tmpvar_19 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_20; - tmpvar_20 = (rotation * tmpvar_19[1].xyz); - o.TtoV1 = tmpvar_20; - mat3 tmpvar_21; - tmpvar_21 = (xll_constructMat3 (gl_ModelViewMatrixInverseTranspose)); - vec3 tmpvar_22; - tmpvar_22 = (rotation * tmpvar_21[2].xyz); - o.TtoV2 = tmpvar_22; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17 = xl_retval.hip_pack0.xyzw; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.TtoV0.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.TtoV1.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.TtoV2.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-out.txt deleted file mode 100644 index d5cca7232..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-out.txt +++ /dev/null @@ -1,48 +0,0 @@ -attribute vec4 TANGENT; -uniform vec4 _MainTex_ST; -uniform vec4 _BumpMap_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - vec3 tmpvar_2; - tmpvar_2 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); - mat3 tmpvar_3; - tmpvar_3[0].x = TANGENT.x; - tmpvar_3[0].y = tmpvar_2.x; - tmpvar_3[0].z = gl_Normal.x; - tmpvar_3[1].x = TANGENT.y; - tmpvar_3[1].y = tmpvar_2.y; - tmpvar_3[1].z = gl_Normal.y; - tmpvar_3[2].x = TANGENT.z; - tmpvar_3[2].y = tmpvar_2.z; - tmpvar_3[2].z = gl_Normal.z; - mat3 tmpvar_4; - tmpvar_4[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_4[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_4[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - mat3 tmpvar_5; - tmpvar_5[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_5[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_5[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - mat3 tmpvar_6; - tmpvar_6[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; - tmpvar_6[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; - tmpvar_6[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; - gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); - gl_TexCoord[0] = tmpvar_1; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = (tmpvar_3 * tmpvar_4[0]); - gl_TexCoord[1] = tmpvar_7; - vec4 tmpvar_8; - tmpvar_8.w = 0.0; - tmpvar_8.xyz = (tmpvar_3 * tmpvar_5[1]); - gl_TexCoord[2] = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = (tmpvar_3 * tmpvar_6[2]); - gl_TexCoord[3] = tmpvar_9; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-ir.txt deleted file mode 100644 index 6b7ae345b..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-ir.txt +++ /dev/null @@ -1,132 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 hip_screen; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec4 ComputeScreenPos ( - in vec4 pos -) -{ - vec4 o; - vec4 tmpvar_1; - tmpvar_1 = (pos * 0.5); - o = tmpvar_1; - vec2 tmpvar_2; - tmpvar_2.x = o.x; - tmpvar_2.y = (o.y * _ProjectionParams.x); - vec2 tmpvar_3; - tmpvar_3 = (tmpvar_2 + o.w); - o.xy = tmpvar_3.xy.xy; - vec2 tmpvar_4; - tmpvar_4 = pos.zw; - o.zw = tmpvar_4.xxxy.zw; - return o; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = ComputeScreenPos (o.pos); - vec4 tmpvar_3; - tmpvar_3 = tmpvar_2; - o.hip_screen = tmpvar_3; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.hip_screen.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-out.txt deleted file mode 100644 index 2f3f8d3dc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-out.txt +++ /dev/null @@ -1,28 +0,0 @@ -varying vec4 xlv_FOG; -uniform vec4 _ProjectionParams; -uniform vec4 _MainTex_ST; -void main () -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; - gl_Position = tmpvar_1; - vec4 tmpvar_4; - tmpvar_4.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_4.x = tmpvar_1.z; - xlv_FOG = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_5; - gl_TexCoord[1] = o_i0; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-ir.txt deleted file mode 100644 index c7c3395e1..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-ir.txt +++ /dev/null @@ -1,171 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec4 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return (_WorldSpaceLightPos0.xyz - worldPos); -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec4 tmpvar_6; - tmpvar_6 = (_LightMatrix0 * (_Object2World * v.vertex)); - o._LightCoord = tmpvar_6; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25 = xl_retval._LightCoord.xyzw; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-ir.txt deleted file mode 100644 index 427fe2cf4..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-ir.txt +++ /dev/null @@ -1,181 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceViewDir ( - in vec4 v -) -{ - return (_WorldSpaceCameraPos.xyz - (_Object2World * v).xyz); -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = WorldSpaceViewDir (v.vertex); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.viewDir = tmpvar_7; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-ir.txt deleted file mode 100644 index 9dc945062..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-ir.txt +++ /dev/null @@ -1,192 +0,0 @@ -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec3 normal; - vec3 lightDir; - vec3 viewDir; - vec2 _LightCoord; -}; -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -mat3 xll_constructMat3 ( - in mat4 m -) -{ - vec3 tmpvar_1; - tmpvar_1 = m[0].xyz; - vec3 tmpvar_2; - tmpvar_2 = m[1].xyz; - vec3 tmpvar_3; - tmpvar_3 = m[2].xyz; - mat3 tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = tmpvar_1; - tmpvar_4[0] = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_2; - tmpvar_4[1] = tmpvar_6; - vec3 tmpvar_7; - tmpvar_7 = tmpvar_3; - tmpvar_4[2] = tmpvar_7; - return tmpvar_4; -} - -vec3 WorldSpaceViewDir ( - in vec4 v -) -{ - return (_WorldSpaceCameraPos.xyz - (_Object2World * v).xyz); -} - -vec3 WorldSpaceLightDir ( - in vec4 v -) -{ - vec3 worldPos; - vec3 tmpvar_1; - tmpvar_1 = (_Object2World * v).xyz; - worldPos = tmpvar_1; - return _WorldSpaceLightPos0.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - v2f_surf o; - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - mat3 tmpvar_2; - tmpvar_2 = (xll_constructMat3 (_Object2World)); - vec3 tmpvar_3; - tmpvar_3 = (tmpvar_2 * (v.normal * unity_Scale.w)); - o.normal = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = WorldSpaceLightDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4; - o.lightDir = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = WorldSpaceViewDir (v.vertex); - vec3 tmpvar_7; - tmpvar_7 = tmpvar_6; - o.viewDir = tmpvar_7; - vec2 tmpvar_8; - tmpvar_8 = (_LightMatrix0 * (_Object2World * v.vertex)).xy; - o._LightCoord = tmpvar_8; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.normal.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[1] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[2] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[3] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.zw = vec2(0.0, 0.0); - tmpvar_27.xy = xl_retval._LightCoord.xy; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[4] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-ir.txt deleted file mode 100644 index 0ce51c3bc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-ir.txt +++ /dev/null @@ -1,276 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f { - vec4 pos; - vec2 uv; - vec3 color; - vec3 backContrib; - vec3 nl; - vec3 nh; -}; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform float _TranslucencyViewDependency; -uniform vec3 _TerrainTreeLightDirections[4]; -float xll_saturate ( - in float x -) -{ - float tmpvar_1; - tmpvar_1 = clamp (x, 0.0, 1.0); - return tmpvar_1; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tangent.xyz.xyz; - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.zw = vec2(0.0, 0.0); - tmpvar_11.xy = normal.xy.xy; - vec4 tmpvar_12; - tmpvar_12 = (pos + ((tmpvar_11 * mat) * isBillboard)); - pos = tmpvar_12; - vec3 tmpvar_13; - tmpvar_13 = vec3(isBillboard); - vec3 tmpvar_14; - tmpvar_14 = mix (normal, norb, tmpvar_13); - vec3 tmpvar_15; - tmpvar_15 = tmpvar_14; - normal = tmpvar_15; - vec4 tmpvar_16; - tmpvar_16.w = -1.0; - tmpvar_16.xyz = tanb.xyz; - vec4 tmpvar_17; - tmpvar_17 = vec4(isBillboard); - vec4 tmpvar_18; - tmpvar_18 = mix (tangent, tmpvar_16, tmpvar_17); - vec4 tmpvar_19; - tmpvar_19 = tmpvar_18; - tangent = tmpvar_19; -} - -v2f vert ( - in appdata_full v -) -{ - float nh; - vec3 h; - float backContrib; - float nl; - vec3 lightDir; - int j; - vec3 viewDir; - v2f o; - int tmpvar_1; - tmpvar_1 = 0; - j = tmpvar_1; - ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v.vertex, v.normal, v.tangent); - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = v.texcoord.xy; - o.uv = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_5; - tmpvar_5 = normalize (tmpvar_4); - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - viewDir = tmpvar_6; - while (true) { - if (!((j < 3))) { - break; - }; - vec3 tmpvar_7; - tmpvar_7 = _TerrainTreeLightDirections[j]; - lightDir = tmpvar_7; - float tmpvar_8; - tmpvar_8 = dot (v.normal, lightDir); - float tmpvar_9; - tmpvar_9 = tmpvar_8; - nl = tmpvar_9; - float tmpvar_10; - tmpvar_10 = dot (viewDir, -(lightDir)); - float tmpvar_11; - tmpvar_11 = xll_saturate (tmpvar_10); - float tmpvar_12; - tmpvar_12 = tmpvar_11; - backContrib = tmpvar_12; - float tmpvar_13; - tmpvar_13 = xll_saturate (-(nl)); - float tmpvar_14; - tmpvar_14 = mix (tmpvar_13, backContrib, _TranslucencyViewDependency); - float tmpvar_15; - tmpvar_15 = tmpvar_14; - backContrib = tmpvar_15; - float tmpvar_16; - tmpvar_16 = (backContrib * 2.0); - o.backContrib[j] = tmpvar_16; - float tmpvar_17; - tmpvar_17 = max (0.0, ((nl * 0.6) + 0.4)); - float tmpvar_18; - tmpvar_18 = tmpvar_17; - nl = tmpvar_18; - float tmpvar_19; - tmpvar_19 = nl; - o.nl[j] = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = normalize ((lightDir + viewDir)); - vec3 tmpvar_21; - tmpvar_21 = tmpvar_20; - h = tmpvar_21; - float tmpvar_22; - tmpvar_22 = dot (v.normal, h); - float tmpvar_23; - tmpvar_23 = max (0.0, tmpvar_22); - float tmpvar_24; - tmpvar_24 = tmpvar_23; - nh = tmpvar_24; - float tmpvar_25; - tmpvar_25 = nh; - o.nh[j] = tmpvar_25; - int _post_incdec_tmp; - _post_incdec_tmp = j; - int tmpvar_26; - tmpvar_26 = (j + 1); - j = tmpvar_26; - }; - vec3 tmpvar_27; - tmpvar_27 = vec3(v.color.w); - vec3 tmpvar_28; - tmpvar_28 = tmpvar_27; - o.color = tmpvar_28; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f tmpvar_13; - tmpvar_13 = vert (xlt_v); - v2f tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.uv.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.color.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval.backContrib.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.nl.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.nh.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[4] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-out.txt deleted file mode 100644 index 6ee776196..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-out.txt +++ /dev/null @@ -1,72 +0,0 @@ -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform float _TranslucencyViewDependency; -uniform vec3 _TerrainTreeLightDirections[4]; -void main () -{ - vec3 viewDir; - vec3 tmpvar_1; - vec3 tmpvar_2; - vec3 tmpvar_3; - float tmpvar_4; - tmpvar_4 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_5; - tmpvar_5.w = 0.0; - tmpvar_5.xyz = gl_Normal; - vec4 tmpvar_6; - tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = gl_Normal.xy; - vec4 tmpvar_7; - tmpvar_7 = (gl_Vertex + ((tmpvar_6 * gl_ModelViewMatrixInverseTranspose) * tmpvar_4)); - vec3 tmpvar_8; - tmpvar_8 = mix (gl_Normal, normalize ((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_4)); - vec4 tmpvar_9; - tmpvar_9.w = 1.0; - tmpvar_9.xyz = _WorldSpaceCameraPos; - viewDir = normalize ((((_World2Object * tmpvar_9).xyz * unity_Scale.w) - tmpvar_7.xyz)); - vec3 tmpvar_10; - tmpvar_10 = _TerrainTreeLightDirections[0]; - float tmpvar_11; - tmpvar_11 = dot (tmpvar_8, tmpvar_10); - tmpvar_1.x = (mix (clamp (-(tmpvar_11), 0.0, 1.0), clamp (dot (viewDir, -(tmpvar_10)), 0.0, 1.0), _TranslucencyViewDependency) * 2.0); - tmpvar_2.x = max (0.0, ((tmpvar_11 * 0.6) + 0.4)); - tmpvar_3.x = max (0.0, dot (tmpvar_8, normalize ((tmpvar_10 + viewDir)))); - vec3 tmpvar_12; - tmpvar_12 = _TerrainTreeLightDirections[1]; - float tmpvar_13; - tmpvar_13 = dot (tmpvar_8, tmpvar_12); - tmpvar_1.y = (mix (clamp (-(tmpvar_13), 0.0, 1.0), clamp (dot (viewDir, -(tmpvar_12)), 0.0, 1.0), _TranslucencyViewDependency) * 2.0); - tmpvar_2.y = max (0.0, ((tmpvar_13 * 0.6) + 0.4)); - tmpvar_3.y = max (0.0, dot (tmpvar_8, normalize ((tmpvar_12 + viewDir)))); - vec3 tmpvar_14; - tmpvar_14 = _TerrainTreeLightDirections[2]; - float tmpvar_15; - tmpvar_15 = dot (tmpvar_8, tmpvar_14); - tmpvar_1.z = (mix (clamp (-(tmpvar_15), 0.0, 1.0), clamp (dot (viewDir, -(tmpvar_14)), 0.0, 1.0), _TranslucencyViewDependency) * 2.0); - tmpvar_2.z = max (0.0, ((tmpvar_15 * 0.6) + 0.4)); - tmpvar_3.z = max (0.0, dot (tmpvar_8, normalize ((tmpvar_14 + viewDir)))); - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_7); - vec4 tmpvar_16; - tmpvar_16.zw = vec2(0.0, 0.0); - tmpvar_16.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = gl_Color.www; - gl_TexCoord[1] = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.w = 0.0; - tmpvar_18.xyz = tmpvar_1; - gl_TexCoord[2] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = tmpvar_2; - gl_TexCoord[3] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 0.0; - tmpvar_20.xyz = tmpvar_3; - gl_TexCoord[4] = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-ir.txt deleted file mode 100644 index 73c69679a..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-ir.txt +++ /dev/null @@ -1,384 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertBark ( - inout appdata_full v -) -{ - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return objSpaceLightPos.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertBark (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-out.txt deleted file mode 100644 index 141acd1d7..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-out.txt +++ /dev/null @@ -1,91 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_1 = gl_Vertex; - tmpvar_2 = TANGENT; - tmpvar_1.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 pos; - pos = tmpvar_1; - vec3 bend; - float tmpvar_3; - tmpvar_3 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_4; - tmpvar_4.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_3))); - tmpvar_4.y = tmpvar_3; - vec4 tmpvar_5; - tmpvar_5 = abs (((fract ((((fract (((_TimeX + tmpvar_4).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_6; - tmpvar_6 = ((tmpvar_5 * tmpvar_5) * (3.0 - (2.0 * tmpvar_5))); - vec2 tmpvar_7; - tmpvar_7 = (tmpvar_6.xz + tmpvar_6.yw); - bend = ((gl_Color.y * 0.1) * gl_Normal); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos.xyz = (tmpvar_1.xyz + (((tmpvar_7.xyx * bend) + ((_Wind.xyz * tmpvar_7.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos.xyz = (pos.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_8; - tmpvar_8.xz = vec2(0.0, 0.0); - tmpvar_8.y = _SquashPlaneNormal.w; - vec3 tmpvar_9; - tmpvar_9 = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_8 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9; - tmpvar_1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.xyz = (gl_Color.w * _Color.xyz); - tmpvar_11.w = _Color.w; - vec3 tmpvar_12; - tmpvar_12 = normalize (gl_Normal); - tmpvar_2.xyz = normalize (TANGENT.xyz); - vec4 tmpvar_13; - tmpvar_13 = (gl_ModelViewProjectionMatrix * tmpvar_10); - vec3 tmpvar_14; - tmpvar_14 = (cross (tmpvar_12, tmpvar_2.xyz) * TANGENT.w); - mat3 tmpvar_15; - tmpvar_15[0].x = tmpvar_2.x; - tmpvar_15[0].y = tmpvar_14.x; - tmpvar_15[0].z = tmpvar_12.x; - tmpvar_15[1].x = tmpvar_2.y; - tmpvar_15[1].y = tmpvar_14.y; - tmpvar_15[1].z = tmpvar_12.y; - tmpvar_15[2].x = tmpvar_2.z; - tmpvar_15[2].y = tmpvar_14.z; - tmpvar_15[2].z = tmpvar_12.z; - vec4 tmpvar_16; - tmpvar_16.w = 1.0; - tmpvar_16.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_13; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = tmpvar_13.z; - xlv_FOG = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_18; - gl_FrontColor = tmpvar_11; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (tmpvar_15 * (_World2Object * _WorldSpaceLightPos0).xyz); - gl_TexCoord[1] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 0.0; - tmpvar_20.xyz = (tmpvar_15 * (((_World2Object * tmpvar_16).xyz * unity_Scale.w) - tmpvar_9)); - gl_TexCoord[2] = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-ir.txt deleted file mode 100644 index ac29aa707..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-ir.txt +++ /dev/null @@ -1,395 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertBark ( - inout appdata_full v -) -{ - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertBark (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-out.txt deleted file mode 100644 index 6507427a8..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-out.txt +++ /dev/null @@ -1,96 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - tmpvar_1 = gl_Vertex; - tmpvar_2 = TANGENT; - tmpvar_1.xyz = (gl_Vertex.xyz * _Scale.xyz); - vec4 pos; - pos = tmpvar_1; - vec3 bend; - float tmpvar_3; - tmpvar_3 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_4; - tmpvar_4.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_3))); - tmpvar_4.y = tmpvar_3; - vec4 tmpvar_5; - tmpvar_5 = abs (((fract ((((fract (((_TimeX + tmpvar_4).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_6; - tmpvar_6 = ((tmpvar_5 * tmpvar_5) * (3.0 - (2.0 * tmpvar_5))); - vec2 tmpvar_7; - tmpvar_7 = (tmpvar_6.xz + tmpvar_6.yw); - bend = ((gl_Color.y * 0.1) * gl_Normal); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos.xyz = (tmpvar_1.xyz + (((tmpvar_7.xyx * bend) + ((_Wind.xyz * tmpvar_7.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos.xyz = (pos.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_8; - tmpvar_8.xz = vec2(0.0, 0.0); - tmpvar_8.y = _SquashPlaneNormal.w; - vec3 tmpvar_9; - tmpvar_9 = mix ((pos.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_8 - pos.xyz)) * _SquashPlaneNormal.xyz)), pos.xyz, vec3(_SquashAmount)); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9; - tmpvar_1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11.xyz = (gl_Color.w * _Color.xyz); - tmpvar_11.w = _Color.w; - vec3 tmpvar_12; - tmpvar_12 = normalize (gl_Normal); - tmpvar_2.xyz = normalize (TANGENT.xyz); - vec4 tmpvar_13; - tmpvar_13 = (gl_ModelViewProjectionMatrix * tmpvar_10); - vec3 tmpvar_14; - tmpvar_14 = (cross (tmpvar_12, tmpvar_2.xyz) * TANGENT.w); - mat3 tmpvar_15; - tmpvar_15[0].x = tmpvar_2.x; - tmpvar_15[0].y = tmpvar_14.x; - tmpvar_15[0].z = tmpvar_12.x; - tmpvar_15[1].x = tmpvar_2.y; - tmpvar_15[1].y = tmpvar_14.y; - tmpvar_15[1].z = tmpvar_12.y; - tmpvar_15[2].x = tmpvar_2.z; - tmpvar_15[2].y = tmpvar_14.z; - tmpvar_15[2].z = tmpvar_12.z; - vec4 tmpvar_16; - tmpvar_16.w = 1.0; - tmpvar_16.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_13; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = tmpvar_13.z; - xlv_FOG = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.zw = vec2(0.0, 0.0); - tmpvar_18.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_18; - gl_FrontColor = tmpvar_11; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (tmpvar_15 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_9)); - gl_TexCoord[1] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.w = 0.0; - tmpvar_20.xyz = (tmpvar_15 * (((_World2Object * tmpvar_16).xyz * unity_Scale.w) - tmpvar_9)); - gl_TexCoord[2] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = (_LightMatrix0 * (_Object2World * tmpvar_10)).xyz; - gl_TexCoord[3] = tmpvar_21; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-ir.txt deleted file mode 100644 index d18a617a0..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-ir.txt +++ /dev/null @@ -1,454 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - float fog; - vec2 hip_pack0; - vec4 lop_color; - vec3 lightDir; - vec3 viewDir; - vec3 _LightCoord; -}; -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.yw = vec2(0.0, 0.0); - tmpvar_7.x = normal.z; - tmpvar_7.z = -(normal.x); - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (pos + ((tangent * mat) * isBillboard)); - pos = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = vec3(isBillboard); - vec3 tmpvar_13; - tmpvar_13 = mix (normal, norb, tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - normal = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = -1.0; - tmpvar_15.xyz = tanb.xyz; - vec4 tmpvar_16; - tmpvar_16 = vec4(isBillboard); - vec4 tmpvar_17; - tmpvar_17 = mix (tangent, tmpvar_15, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - tangent = tmpvar_18; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertLeaf ( - inout appdata_full v -) -{ - ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v.vertex, v.normal, v.tangent); - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -vec3 ObjSpaceViewDir ( - in vec4 v -) -{ - vec3 objSpaceCameraPos; - vec4 tmpvar_1; - tmpvar_1.w = 1.0; - tmpvar_1.xyz = _WorldSpaceCameraPos.xyz.xyz; - vec3 tmpvar_2; - tmpvar_2 = ((_World2Object * tmpvar_1).xyz * unity_Scale.w); - objSpaceCameraPos = tmpvar_2; - return (objSpaceCameraPos - v.xyz); -} - -vec3 ObjSpaceLightDir ( - in vec4 v -) -{ - vec3 objSpaceLightPos; - vec3 tmpvar_1; - tmpvar_1 = (_World2Object * _WorldSpaceLightPos0).xyz; - objSpaceLightPos = tmpvar_1; - return ((objSpaceLightPos.xyz * unity_Scale.w) - v.xyz); -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - mat3 rotation; - vec3 binormal; - v2f_surf o; - TreeVertLeaf (v); - PositionFog (v.vertex, o.pos, o.fog); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec3 tmpvar_3; - tmpvar_3 = cross (v.normal, v.tangent.xyz); - vec3 tmpvar_4; - tmpvar_4 = (tmpvar_3 * v.tangent.w); - binormal = tmpvar_4; - mat3 tmpvar_5; - float tmpvar_6; - tmpvar_6 = v.tangent.x; - tmpvar_5[0].x = tmpvar_6; - float tmpvar_7; - tmpvar_7 = binormal.x; - tmpvar_5[0].y = tmpvar_7; - float tmpvar_8; - tmpvar_8 = v.normal.x; - tmpvar_5[0].z = tmpvar_8; - float tmpvar_9; - tmpvar_9 = v.tangent.y; - tmpvar_5[1].x = tmpvar_9; - float tmpvar_10; - tmpvar_10 = binormal.y; - tmpvar_5[1].y = tmpvar_10; - float tmpvar_11; - tmpvar_11 = v.normal.y; - tmpvar_5[1].z = tmpvar_11; - float tmpvar_12; - tmpvar_12 = v.tangent.z; - tmpvar_5[2].x = tmpvar_12; - float tmpvar_13; - tmpvar_13 = binormal.z; - tmpvar_5[2].y = tmpvar_13; - float tmpvar_14; - tmpvar_14 = v.normal.z; - tmpvar_5[2].z = tmpvar_14; - mat3 tmpvar_15; - tmpvar_15 = (tmpvar_5); - rotation = (tmpvar_15); - vec3 tmpvar_16; - tmpvar_16 = ObjSpaceLightDir (v.vertex); - vec3 tmpvar_17; - tmpvar_17 = (rotation * tmpvar_16); - o.lightDir = tmpvar_17; - vec3 tmpvar_18; - tmpvar_18 = ObjSpaceViewDir (v.vertex); - vec3 tmpvar_19; - tmpvar_19 = (rotation * tmpvar_18); - o.viewDir = tmpvar_19; - vec3 tmpvar_20; - tmpvar_20 = (_LightMatrix0 * (_Object2World * v.vertex)).xyz; - o._LightCoord = tmpvar_20; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_17.x = xl_retval.fog; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - xlv_FOG = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.zw = vec2(0.0, 0.0); - tmpvar_19.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[0] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21 = xl_retval.lop_color.xyzw; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_FrontColor = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval.lightDir.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[1] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.w = 0.0; - tmpvar_25.xyz = xl_retval.viewDir.xyz; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[2] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = xl_retval._LightCoord.xyz; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-out.txt deleted file mode 100644 index 456889bd5..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-out.txt +++ /dev/null @@ -1,114 +0,0 @@ -varying vec4 xlv_FOG; -attribute vec4 TANGENT; -uniform vec4 unity_Scale; -uniform vec4 _WorldSpaceLightPos0; -uniform vec3 _WorldSpaceCameraPos; -uniform mat4 _World2Object; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform mat4 _LightMatrix0; -uniform vec4 _Color; -void main () -{ - vec4 tmpvar_1; - vec4 tmpvar_2; - float tmpvar_3; - tmpvar_3 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = gl_Normal; - vec4 tmpvar_5; - tmpvar_5.yw = vec2(0.0, 0.0); - tmpvar_5.x = gl_Normal.z; - tmpvar_5.z = -(gl_Normal.x); - vec4 tmpvar_6; - tmpvar_6 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); - vec3 tmpvar_7; - tmpvar_7 = mix (gl_Normal, normalize ((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3)); - vec4 tmpvar_8; - tmpvar_8.w = -1.0; - tmpvar_8.xyz = normalize ((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz; - vec4 tmpvar_9; - tmpvar_9 = mix (TANGENT, tmpvar_8, vec4(tmpvar_3)); - tmpvar_1 = tmpvar_6; - tmpvar_2 = tmpvar_9; - tmpvar_1.xyz = (tmpvar_6.xyz * _Scale.xyz); - vec4 pos_i0; - pos_i0 = tmpvar_1; - vec3 bend; - float tmpvar_10; - tmpvar_10 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_11; - tmpvar_11.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_10))); - tmpvar_11.y = tmpvar_10; - vec4 tmpvar_12; - tmpvar_12 = abs (((fract ((((fract (((_TimeX + tmpvar_11).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_13; - tmpvar_13 = ((tmpvar_12 * tmpvar_12) * (3.0 - (2.0 * tmpvar_12))); - vec2 tmpvar_14; - tmpvar_14 = (tmpvar_13.xz + tmpvar_13.yw); - bend = ((gl_Color.y * 0.1) * tmpvar_7); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos_i0.xyz = (tmpvar_1.xyz + (((tmpvar_14.xyx * bend) + ((_Wind.xyz * tmpvar_14.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos_i0.xyz = (pos_i0.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_15; - tmpvar_15.xz = vec2(0.0, 0.0); - tmpvar_15.y = _SquashPlaneNormal.w; - vec3 tmpvar_16; - tmpvar_16 = mix ((pos_i0.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_15 - pos_i0.xyz)) * _SquashPlaneNormal.xyz)), pos_i0.xyz, vec3(_SquashAmount)); - vec4 tmpvar_17; - tmpvar_17.w = 1.0; - tmpvar_17.xyz = tmpvar_16; - tmpvar_1 = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.xyz = (gl_Color.w * _Color.xyz); - tmpvar_18.w = _Color.w; - vec3 tmpvar_19; - tmpvar_19 = normalize (tmpvar_7); - tmpvar_2.xyz = normalize (tmpvar_9.xyz); - vec4 tmpvar_20; - tmpvar_20 = (gl_ModelViewProjectionMatrix * tmpvar_17); - vec3 tmpvar_21; - tmpvar_21 = (cross (tmpvar_19, tmpvar_2.xyz) * tmpvar_9.w); - mat3 tmpvar_22; - tmpvar_22[0].x = tmpvar_2.x; - tmpvar_22[0].y = tmpvar_21.x; - tmpvar_22[0].z = tmpvar_19.x; - tmpvar_22[1].x = tmpvar_2.y; - tmpvar_22[1].y = tmpvar_21.y; - tmpvar_22[1].z = tmpvar_19.y; - tmpvar_22[2].x = tmpvar_2.z; - tmpvar_22[2].y = tmpvar_21.z; - tmpvar_22[2].z = tmpvar_19.z; - vec4 tmpvar_23; - tmpvar_23.w = 1.0; - tmpvar_23.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_20; - vec4 tmpvar_24; - tmpvar_24.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_24.x = tmpvar_20.z; - xlv_FOG = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[0] = tmpvar_25; - gl_FrontColor = tmpvar_18; - vec4 tmpvar_26; - tmpvar_26.w = 0.0; - tmpvar_26.xyz = (tmpvar_22 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_16)); - gl_TexCoord[1] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.w = 0.0; - tmpvar_27.xyz = (tmpvar_22 * (((_World2Object * tmpvar_23).xyz * unity_Scale.w) - tmpvar_16)); - gl_TexCoord[2] = tmpvar_27; - vec4 tmpvar_28; - tmpvar_28.w = 0.0; - tmpvar_28.xyz = (_LightMatrix0 * (_Object2World * tmpvar_17)).xyz; - gl_TexCoord[3] = tmpvar_28; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-ir.txt deleted file mode 100644 index 01d0138dc..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-ir.txt +++ /dev/null @@ -1,398 +0,0 @@ -struct appdata_full { - vec4 vertex; - vec4 tangent; - vec3 normal; - vec4 texcoord; - vec4 texcoord1; - vec4 color; -}; -struct v2f_surf { - vec4 pos; - vec3 _ShadowCoord0; - vec3 _ShadowCoord1; - vec3 _ShadowCoord2; - vec3 _ShadowCoord3; - vec2 _ShadowZFade; - vec2 hip_pack0; - vec4 lop_color; -}; -attribute vec4 TANGENT; -uniform mat4 _World2Shadow3; -uniform mat4 _World2Shadow2; -uniform mat4 _World2Shadow1; -uniform mat4 _World2Shadow; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _LightShadowData; -uniform vec4 _Color; -vec4 Squash ( - in vec4 pos -) -{ - vec3 planeNormal; - vec3 planePoint; - vec3 projectedVertex; - vec3 tmpvar_1; - tmpvar_1 = pos.xyz; - projectedVertex = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2.xz = vec2(0.0, 0.0); - tmpvar_2.y = _SquashPlaneNormal.w; - vec3 tmpvar_3; - tmpvar_3 = tmpvar_2; - planePoint = tmpvar_3; - vec3 tmpvar_4; - tmpvar_4 = _SquashPlaneNormal.xyz; - planeNormal = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = pos.xyz; - float tmpvar_6; - tmpvar_6 = dot (planeNormal, (planePoint - tmpvar_5)); - vec3 tmpvar_7; - tmpvar_7 = (projectedVertex + (tmpvar_6 * planeNormal)); - projectedVertex = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = vec3(_SquashAmount); - vec3 tmpvar_9; - tmpvar_9 = mix (projectedVertex, pos.xyz, tmpvar_8); - vec4 tmpvar_10; - tmpvar_10.w = 1.0; - tmpvar_10.xyz = tmpvar_9.xyz; - vec4 tmpvar_11; - tmpvar_11 = tmpvar_10; - pos = tmpvar_11; - return pos; -} - -void ExpandBillboard ( - in mat4 mat, - inout vec4 pos, - inout vec3 normal, - inout vec4 tangent -) -{ - vec3 tanb; - vec3 norb; - float isBillboard; - float tmpvar_1; - tmpvar_1 = abs (tangent.w); - float tmpvar_2; - tmpvar_2 = (1.0 - tmpvar_1); - isBillboard = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3.w = 0.0; - tmpvar_3.xyz = normal.xyz; - vec4 tmpvar_4; - tmpvar_4 = normalize ((tmpvar_3 * mat)); - vec3 tmpvar_5; - tmpvar_5 = tmpvar_4.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - norb = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.yw = vec2(0.0, 0.0); - tmpvar_7.x = normal.z; - tmpvar_7.z = -(normal.x); - vec4 tmpvar_8; - tmpvar_8 = normalize ((tmpvar_7 * mat)); - vec3 tmpvar_9; - tmpvar_9 = tmpvar_8.xyz; - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - tanb = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = (pos + ((tangent * mat) * isBillboard)); - pos = tmpvar_11; - vec3 tmpvar_12; - tmpvar_12 = vec3(isBillboard); - vec3 tmpvar_13; - tmpvar_13 = mix (normal, norb, tmpvar_12); - vec3 tmpvar_14; - tmpvar_14 = tmpvar_13; - normal = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15.w = -1.0; - tmpvar_15.xyz = tanb.xyz; - vec4 tmpvar_16; - tmpvar_16 = vec4(isBillboard); - vec4 tmpvar_17; - tmpvar_17 = mix (tangent, tmpvar_15, tmpvar_16); - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - tangent = tmpvar_18; -} - -vec4 TriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = fract ((x + 0.5)); - vec4 tmpvar_2; - tmpvar_2 = abs (((tmpvar_1 * 2.0) - 1.0)); - return tmpvar_2; -} - -vec4 SmoothCurve ( - in vec4 x -) -{ - return ((x * x) * (3.0 - (2.0 * x))); -} - -vec4 SmoothTriangleWave ( - in vec4 x -) -{ - vec4 tmpvar_1; - tmpvar_1 = TriangleWave (x); - vec4 tmpvar_2; - tmpvar_2 = SmoothCurve (tmpvar_1); - return tmpvar_2; -} - -vec4 AnimateVertex ( - in vec4 pos, - in vec3 normal, - in vec4 animParams -) -{ - vec3 bend; - vec2 vWavesSum; - vec4 vWaves; - vec2 vWavesIn; - float fVtxPhase; - float fBranchPhase; - float fObjPhase; - float fBranchAmp; - float fDetailAmp; - float tmpvar_1; - tmpvar_1 = 0.1; - fDetailAmp = tmpvar_1; - float tmpvar_2; - tmpvar_2 = 0.3; - fBranchAmp = tmpvar_2; - float tmpvar_3; - tmpvar_3 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); - float tmpvar_4; - tmpvar_4 = tmpvar_3; - fObjPhase = tmpvar_4; - float tmpvar_5; - tmpvar_5 = (fObjPhase + animParams.x); - fBranchPhase = tmpvar_5; - vec3 tmpvar_6; - tmpvar_6 = vec3((animParams.y + fBranchPhase)); - float tmpvar_7; - tmpvar_7 = dot (pos.xyz, tmpvar_6); - float tmpvar_8; - tmpvar_8 = tmpvar_7; - fVtxPhase = tmpvar_8; - vec2 tmpvar_9; - tmpvar_9.x = fVtxPhase; - tmpvar_9.y = fBranchPhase; - vec2 tmpvar_10; - tmpvar_10 = (_TimeX + tmpvar_9); - vWavesIn = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = fract ((vWavesIn.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); - vec4 tmpvar_12; - tmpvar_12 = ((tmpvar_11 * 2.0) - 1.0); - vWaves = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13 = SmoothTriangleWave (vWaves); - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - vWaves = tmpvar_14; - vec2 tmpvar_15; - tmpvar_15 = (vWaves.xz + vWaves.yw); - vWavesSum = tmpvar_15; - vec3 tmpvar_16; - tmpvar_16 = ((animParams.y * fDetailAmp) * normal.xyz); - bend = tmpvar_16; - float tmpvar_17; - tmpvar_17 = (animParams.w * fBranchAmp); - bend.y = vec2(tmpvar_17).y; - vec3 tmpvar_18; - tmpvar_18 = (pos.xyz + (((vWavesSum.xyx * bend) + ((_Wind.xyz * vWavesSum.y) * animParams.w)) * _Wind.w)); - pos.xyz = tmpvar_18.xyz.xyz; - vec3 tmpvar_19; - tmpvar_19 = (pos.xyz + (animParams.z * _Wind.xyz)); - pos.xyz = tmpvar_19.xyz.xyz; - return pos; -} - -void TreeVertLeaf ( - inout appdata_full v -) -{ - ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v.vertex, v.normal, v.tangent); - vec3 tmpvar_1; - tmpvar_1 = (v.vertex.xyz * _Scale.xyz); - v.vertex.xyz = tmpvar_1.xyz.xyz; - vec4 tmpvar_2; - tmpvar_2.xy = v.color.xy.xy; - tmpvar_2.zw = v.texcoord1.xy.xy; - vec4 tmpvar_3; - tmpvar_3 = AnimateVertex (v.vertex, v.normal, tmpvar_2); - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - v.vertex = tmpvar_4; - vec4 tmpvar_5; - tmpvar_5 = Squash (v.vertex); - vec4 tmpvar_6; - tmpvar_6 = tmpvar_5; - v.vertex = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7.xyz = (v.color.w * _Color.xyz).xyz; - tmpvar_7.w = _Color.w; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - v.color = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = normalize (v.normal); - vec3 tmpvar_10; - tmpvar_10 = tmpvar_9; - v.normal = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = normalize (v.tangent.xyz); - vec3 tmpvar_12; - tmpvar_12 = tmpvar_11; - v.tangent.xyz = tmpvar_12.xyz.xyz; -} - -v2f_surf vert_surf ( - in appdata_full v -) -{ - vec4 wpos; - float z; - v2f_surf o; - TreeVertLeaf (v); - vec2 tmpvar_1; - tmpvar_1 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.hip_pack0 = tmpvar_1.xy.xy; - vec4 tmpvar_2; - tmpvar_2 = v.color; - o.lop_color = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (gl_ModelViewProjectionMatrix * v.vertex); - o.pos = tmpvar_3; - float tmpvar_4; - tmpvar_4 = -((gl_ModelViewMatrix * v.vertex).z); - z = tmpvar_4; - float tmpvar_5; - tmpvar_5 = z; - o._ShadowZFade.x = tmpvar_5; - float tmpvar_6; - tmpvar_6 = ((z * _LightShadowData.z) + _LightShadowData.w); - o._ShadowZFade.y = vec2(tmpvar_6).y; - vec4 tmpvar_7; - tmpvar_7 = (_Object2World * v.vertex); - wpos = tmpvar_7; - vec3 tmpvar_8; - tmpvar_8 = (_World2Shadow * wpos).xyz; - o._ShadowCoord0 = tmpvar_8; - vec3 tmpvar_9; - tmpvar_9 = (_World2Shadow1 * wpos).xyz; - o._ShadowCoord1 = tmpvar_9; - vec3 tmpvar_10; - tmpvar_10 = (_World2Shadow2 * wpos).xyz; - o._ShadowCoord2 = tmpvar_10; - vec3 tmpvar_11; - tmpvar_11 = (_World2Shadow3 * wpos).xyz; - o._ShadowCoord3 = tmpvar_11; - return o; -} - -void main () -{ - appdata_full xlt_v; - v2f_surf xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = TANGENT.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.tangent = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec4 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xyzw; - vec4 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - vec4 tmpvar_9; - tmpvar_9 = gl_MultiTexCoord1.xyzw; - vec4 tmpvar_10; - tmpvar_10 = tmpvar_9; - xlt_v.texcoord1 = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = gl_Color.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - xlt_v.color = tmpvar_12; - v2f_surf tmpvar_13; - tmpvar_13 = vert_surf (xlt_v); - v2f_surf tmpvar_14; - tmpvar_14 = tmpvar_13; - xl_retval = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.pos.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_Position = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = xl_retval._ShadowCoord0.xyz; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval._ShadowCoord1.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.w = 0.0; - tmpvar_21.xyz = xl_retval._ShadowCoord2.xyz; - vec4 tmpvar_22; - tmpvar_22 = tmpvar_21; - gl_TexCoord[2] = tmpvar_22; - vec4 tmpvar_23; - tmpvar_23.w = 0.0; - tmpvar_23.xyz = xl_retval._ShadowCoord3.xyz; - vec4 tmpvar_24; - tmpvar_24 = tmpvar_23; - gl_TexCoord[3] = tmpvar_24; - vec4 tmpvar_25; - tmpvar_25.zw = vec2(0.0, 0.0); - tmpvar_25.xy = xl_retval._ShadowZFade.xy; - vec4 tmpvar_26; - tmpvar_26 = tmpvar_25; - gl_TexCoord[4] = tmpvar_26; - vec4 tmpvar_27; - tmpvar_27.zw = vec2(0.0, 0.0); - tmpvar_27.xy = xl_retval.hip_pack0.xy; - vec4 tmpvar_28; - tmpvar_28 = tmpvar_27; - gl_TexCoord[5] = tmpvar_28; - vec4 tmpvar_29; - tmpvar_29 = xl_retval.lop_color.xyzw; - vec4 tmpvar_30; - tmpvar_30 = tmpvar_29; - gl_FrontColor = tmpvar_30; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-out.txt deleted file mode 100644 index a882f7831..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-out.txt +++ /dev/null @@ -1,89 +0,0 @@ -attribute vec4 TANGENT; -uniform mat4 _World2Shadow3; -uniform mat4 _World2Shadow2; -uniform mat4 _World2Shadow1; -uniform mat4 _World2Shadow; -uniform vec4 _Wind; -uniform float _TimeX; -uniform vec4 _SquashPlaneNormal; -uniform float _SquashAmount; -uniform vec4 _Scale; -uniform mat4 _Object2World; -uniform vec4 _MainTex_ST; -uniform vec4 _LightShadowData; -uniform vec4 _Color; -void main () -{ - vec2 tmpvar_1; - vec4 tmpvar_2; - float tmpvar_3; - tmpvar_3 = (1.0 - abs (TANGENT.w)); - vec4 tmpvar_4; - tmpvar_4.w = 0.0; - tmpvar_4.xyz = gl_Normal; - vec4 tmpvar_5; - tmpvar_5 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); - tmpvar_2 = tmpvar_5; - tmpvar_2.xyz = (tmpvar_5.xyz * _Scale.xyz); - vec4 pos_i0; - pos_i0 = tmpvar_2; - vec3 bend; - float tmpvar_6; - tmpvar_6 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); - vec2 tmpvar_7; - tmpvar_7.x = dot (tmpvar_2.xyz, vec3((gl_Color.y + tmpvar_6))); - tmpvar_7.y = tmpvar_6; - vec4 tmpvar_8; - tmpvar_8 = abs (((fract ((((fract (((_TimeX + tmpvar_7).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); - vec4 tmpvar_9; - tmpvar_9 = ((tmpvar_8 * tmpvar_8) * (3.0 - (2.0 * tmpvar_8))); - vec2 tmpvar_10; - tmpvar_10 = (tmpvar_9.xz + tmpvar_9.yw); - bend = ((gl_Color.y * 0.1) * mix (gl_Normal, normalize ((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3))); - bend.y = (gl_MultiTexCoord1.y * 0.3); - pos_i0.xyz = (tmpvar_2.xyz + (((tmpvar_10.xyx * bend) + ((_Wind.xyz * tmpvar_10.y) * gl_MultiTexCoord1.y)) * _Wind.w)); - pos_i0.xyz = (pos_i0.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); - vec3 tmpvar_11; - tmpvar_11.xz = vec2(0.0, 0.0); - tmpvar_11.y = _SquashPlaneNormal.w; - vec4 tmpvar_12; - tmpvar_12.w = 1.0; - tmpvar_12.xyz = mix ((pos_i0.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_11 - pos_i0.xyz)) * _SquashPlaneNormal.xyz)), pos_i0.xyz, vec3(_SquashAmount)); - tmpvar_2 = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.xyz = (gl_Color.w * _Color.xyz); - tmpvar_13.w = _Color.w; - float tmpvar_14; - tmpvar_14 = -((gl_ModelViewMatrix * tmpvar_12).z); - tmpvar_1.x = tmpvar_14; - tmpvar_1.y = ((tmpvar_14 * _LightShadowData.z) + _LightShadowData.w); - vec4 tmpvar_15; - tmpvar_15 = (_Object2World * tmpvar_12); - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_12); - vec4 tmpvar_16; - tmpvar_16.w = 0.0; - tmpvar_16.xyz = (_World2Shadow * tmpvar_15).xyz; - gl_TexCoord[0] = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.w = 0.0; - tmpvar_17.xyz = (_World2Shadow1 * tmpvar_15).xyz; - gl_TexCoord[1] = tmpvar_17; - vec4 tmpvar_18; - tmpvar_18.w = 0.0; - tmpvar_18.xyz = (_World2Shadow2 * tmpvar_15).xyz; - gl_TexCoord[2] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = (_World2Shadow3 * tmpvar_15).xyz; - gl_TexCoord[3] = tmpvar_19; - vec4 tmpvar_20; - tmpvar_20.zw = vec2(0.0, 0.0); - tmpvar_20.xy = tmpvar_1; - gl_TexCoord[4] = tmpvar_20; - vec4 tmpvar_21; - tmpvar_21.zw = vec2(0.0, 0.0); - tmpvar_21.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - gl_TexCoord[5] = tmpvar_21; - gl_FrontColor = tmpvar_13; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-ir.txt deleted file mode 100644 index c1fc4bb08..000000000 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-ir.txt +++ /dev/null @@ -1,106 +0,0 @@ -struct v2f { - vec4 pos; - float fog; - vec4 color; - vec2 texcoord; - vec3 normal; -}; -struct appdata_t { - vec4 vertex; - vec4 color; - vec3 normal; - vec2 texcoord; -}; -varying vec4 xlv_FOG; -uniform vec4 _MainTex_ST; -void PositionFog ( - in vec4 v, - out vec4 pos, - out float fog -) -{ - vec4 tmpvar_1; - tmpvar_1 = (gl_ModelViewProjectionMatrix * v); - pos = tmpvar_1; - float tmpvar_2; - tmpvar_2 = pos.z; - fog = tmpvar_2; -} - -v2f vert ( - in appdata_t v -) -{ - v2f o; - PositionFog (v.vertex, o.pos, o.fog); - vec4 tmpvar_1; - tmpvar_1 = v.color; - o.color = tmpvar_1; - vec3 tmpvar_2; - tmpvar_2 = v.normal; - o.normal = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3 = ((v.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); - o.texcoord = tmpvar_3; - return o; -} - -void main () -{ - appdata_t xlt_v; - v2f xl_retval; - vec4 tmpvar_1; - tmpvar_1 = gl_Vertex.xyzw; - vec4 tmpvar_2; - tmpvar_2 = tmpvar_1; - xlt_v.vertex = tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = gl_Color.xyzw; - vec4 tmpvar_4; - tmpvar_4 = tmpvar_3; - xlt_v.color = tmpvar_4; - vec3 tmpvar_5; - tmpvar_5 = gl_Normal.xyz; - vec3 tmpvar_6; - tmpvar_6 = tmpvar_5; - xlt_v.normal = tmpvar_6; - vec2 tmpvar_7; - tmpvar_7 = gl_MultiTexCoord0.xy; - vec2 tmpvar_8; - tmpvar_8 = tmpvar_7; - xlt_v.texcoord = tmpvar_8; - v2f tmpvar_9; - tmpvar_9 = vert (xlt_v); - v2f tmpvar_10; - tmpvar_10 = tmpvar_9; - xl_retval = tmpvar_10; - vec4 tmpvar_11; - tmpvar_11 = xl_retval.pos.xyzw; - vec4 tmpvar_12; - tmpvar_12 = tmpvar_11; - gl_Position = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_13.x = xl_retval.fog; - vec4 tmpvar_14; - tmpvar_14 = tmpvar_13; - xlv_FOG = tmpvar_14; - vec4 tmpvar_15; - tmpvar_15 = xl_retval.color.xyzw; - vec4 tmpvar_16; - tmpvar_16 = tmpvar_15; - gl_FrontColor = tmpvar_16; - vec4 tmpvar_17; - tmpvar_17.zw = vec2(0.0, 0.0); - tmpvar_17.xy = xl_retval.texcoord.xy; - vec4 tmpvar_18; - tmpvar_18 = tmpvar_17; - gl_TexCoord[0] = tmpvar_18; - vec4 tmpvar_19; - tmpvar_19.w = 0.0; - tmpvar_19.xyz = xl_retval.normal.xyz; - vec4 tmpvar_20; - tmpvar_20 = tmpvar_19; - gl_TexCoord[1] = tmpvar_20; -} - diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-in.txt b/3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-ir.txt new file mode 100644 index 000000000..af81f6873 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-ir.txt @@ -0,0 +1,301 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 vlight; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 ShadeSH9 ( + in vec4 normal_9 +) +{ + vec3 x3_10; + float vC_11; + vec3 x2_12; + vec4 vB_13; + vec3 x1_14; + float tmpvar_15; + tmpvar_15 = dot (unity_SHAr, normal_9); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + x1_14.x = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (unity_SHAg, normal_9); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + x1_14.y = vec2(tmpvar_18).y; + float tmpvar_19; + tmpvar_19 = dot (unity_SHAb, normal_9); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + x1_14.z = vec3(tmpvar_20).z; + vec4 tmpvar_21; + tmpvar_21 = (normal_9.xyzz * normal_9.yzzx); + vB_13 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (unity_SHBr, vB_13); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + x2_12.x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (unity_SHBg, vB_13); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + x2_12.y = vec2(tmpvar_25).y; + float tmpvar_26; + tmpvar_26 = dot (unity_SHBb, vB_13); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + x2_12.z = vec3(tmpvar_27).z; + float tmpvar_28; + tmpvar_28 = ((normal_9.x * normal_9.x) - (normal_9.y * normal_9.y)); + vC_11 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (unity_SHC.xyz * vC_11); + x3_10 = tmpvar_29; + return ((x1_14 + x2_12) + x3_10); +} + +void PositionFog ( + in vec4 v_30, + out vec4 pos_31, + out float fog_32 +) +{ + vec4 tmpvar_33; + tmpvar_33 = (gl_ModelViewProjectionMatrix * v_30); + pos_31 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = pos_31.z; + fog_32 = tmpvar_34; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_35 +) +{ + vec3 objSpaceCameraPos_36; + vec4 tmpvar_37; + tmpvar_37.w = 1.0; + tmpvar_37.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_38; + tmpvar_38 = ((_World2Object * tmpvar_37).xyz * unity_Scale.w); + objSpaceCameraPos_36 = tmpvar_38; + return (objSpaceCameraPos_36 - v_35.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_39 +) +{ + vec3 objSpaceLightPos_40; + vec3 tmpvar_41; + tmpvar_41 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_40 = tmpvar_41; + return objSpaceLightPos_40.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_42 +) +{ + vec3 shlight_43; + mat3 rotation_44; + vec3 binormal_45; + vec3 worldN_46; + v2f_surf o_47; + PositionFog (v_42.vertex, o_47.pos, o_47.fog); + vec2 tmpvar_48; + tmpvar_48 = ((v_42.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_47.hip_pack0.xy = tmpvar_48.xy.xy; + vec2 tmpvar_49; + tmpvar_49 = ((v_42.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_47.hip_pack0.zw = tmpvar_49.xxxy.zw; + mat3 tmpvar_50; + tmpvar_50 = xll_constructMat3 (_Object2World); + vec3 tmpvar_51; + tmpvar_51 = (tmpvar_50 * (v_42.normal * unity_Scale.w)); + worldN_46 = tmpvar_51; + vec3 tmpvar_52; + tmpvar_52 = cross (v_42.normal, v_42.tangent.xyz); + vec3 tmpvar_53; + tmpvar_53 = (tmpvar_52 * v_42.tangent.w); + binormal_45 = tmpvar_53; + mat3 tmpvar_54; + float tmpvar_55; + tmpvar_55 = v_42.tangent.x; + tmpvar_54[0].x = tmpvar_55; + float tmpvar_56; + tmpvar_56 = binormal_45.x; + tmpvar_54[0].y = tmpvar_56; + float tmpvar_57; + tmpvar_57 = v_42.normal.x; + tmpvar_54[0].z = tmpvar_57; + float tmpvar_58; + tmpvar_58 = v_42.tangent.y; + tmpvar_54[1].x = tmpvar_58; + float tmpvar_59; + tmpvar_59 = binormal_45.y; + tmpvar_54[1].y = tmpvar_59; + float tmpvar_60; + tmpvar_60 = v_42.normal.y; + tmpvar_54[1].z = tmpvar_60; + float tmpvar_61; + tmpvar_61 = v_42.tangent.z; + tmpvar_54[2].x = tmpvar_61; + float tmpvar_62; + tmpvar_62 = binormal_45.z; + tmpvar_54[2].y = tmpvar_62; + float tmpvar_63; + tmpvar_63 = v_42.normal.z; + tmpvar_54[2].z = tmpvar_63; + mat3 tmpvar_64; + tmpvar_64 = (tmpvar_54); + rotation_44 = (tmpvar_64); + vec3 tmpvar_65; + tmpvar_65 = ObjSpaceLightDir (v_42.vertex); + vec3 tmpvar_66; + tmpvar_66 = (rotation_44 * tmpvar_65); + o_47.lightDir = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = ObjSpaceViewDir (v_42.vertex); + vec3 tmpvar_68; + tmpvar_68 = (rotation_44 * tmpvar_67); + o_47.viewDir = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69.w = 1.0; + tmpvar_69.xyz = worldN_46.xyz; + vec3 tmpvar_70; + tmpvar_70 = ShadeSH9 (tmpvar_69); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + shlight_43 = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = shlight_43; + o_47.vlight = tmpvar_72; + return o_47; +} + +void main () +{ + appdata_full xlt_v_73; + v2f_surf xl_retval_74; + vec4 tmpvar_75; + tmpvar_75 = gl_Vertex.xyzw; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_v_73.vertex = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = TANGENT.xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_v_73.tangent = tmpvar_78; + vec3 tmpvar_79; + tmpvar_79 = gl_Normal.xyz; + vec3 tmpvar_80; + tmpvar_80 = tmpvar_79; + xlt_v_73.normal = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_v_73.texcoord = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_v_73.texcoord1 = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = gl_Color.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + xlt_v_73.color = tmpvar_86; + v2f_surf tmpvar_87; + tmpvar_87 = vert_surf (xlt_v_73); + v2f_surf tmpvar_88; + tmpvar_88 = tmpvar_87; + xl_retval_74 = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = xl_retval_74.pos.xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + gl_Position = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_91.x = xl_retval_74.fog; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlv_FOG = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93 = xl_retval_74.hip_pack0.xyzw; + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + gl_TexCoord[0] = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95.w = 0.0; + tmpvar_95.xyz = xl_retval_74.viewDir.xyz; + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + gl_TexCoord[1] = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97.w = 0.0; + tmpvar_97.xyz = xl_retval_74.lightDir.xyz; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + gl_TexCoord[2] = tmpvar_98; + vec4 tmpvar_99; + tmpvar_99.w = 0.0; + tmpvar_99.xyz = xl_retval_74.vlight.xyz; + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + gl_TexCoord[3] = tmpvar_100; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-out.txt b/3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-out.txt similarity index 62% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-out.txt index 012b6fe3e..4daa8ff56 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-alphabumpspec-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/z-alphabumpspec-out.txt @@ -28,7 +28,7 @@ void main () vec3 tmpvar_4; tmpvar_4 = (tmpvar_3 * (gl_Normal * unity_Scale.w)); vec3 tmpvar_5; - tmpvar_5 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_5 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_6; tmpvar_6[0].x = TANGENT.x; tmpvar_6[0].y = tmpvar_5.x; @@ -45,33 +45,33 @@ void main () vec4 tmpvar_8; tmpvar_8.w = 1.0; tmpvar_8.xyz = tmpvar_4; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_8); - x1.y = dot (unity_SHAg, tmpvar_8); - x1.z = dot (unity_SHAb, tmpvar_8); - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_4.xyzz * tmpvar_4.yzzx); - x2.x = dot (unity_SHBr, tmpvar_9); - x2.y = dot (unity_SHBg, tmpvar_9); - x2.z = dot (unity_SHBb, tmpvar_9); - gl_Position = tmpvar_2; - vec4 tmpvar_10; - tmpvar_10.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_10.x = tmpvar_2.z; - xlv_FOG = tmpvar_10; - gl_TexCoord[0] = tmpvar_1; + vec3 x2_9; + vec3 x1_10; + x1_10.x = dot (unity_SHAr, tmpvar_8); + x1_10.y = dot (unity_SHAg, tmpvar_8); + x1_10.z = dot (unity_SHAb, tmpvar_8); vec4 tmpvar_11; - tmpvar_11.w = 0.0; - tmpvar_11.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); - gl_TexCoord[1] = tmpvar_11; + tmpvar_11 = (tmpvar_4.xyzz * tmpvar_4.yzzx); + x2_9.x = dot (unity_SHBr, tmpvar_11); + x2_9.y = dot (unity_SHBg, tmpvar_11); + x2_9.z = dot (unity_SHBb, tmpvar_11); + gl_Position = tmpvar_2; vec4 tmpvar_12; - tmpvar_12.w = 0.0; - tmpvar_12.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); - gl_TexCoord[2] = tmpvar_12; + tmpvar_12.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_12.x = tmpvar_2.z; + xlv_FOG = tmpvar_12; + gl_TexCoord[0] = tmpvar_1; vec4 tmpvar_13; tmpvar_13.w = 0.0; - tmpvar_13.xyz = ((x1 + x2) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))); - gl_TexCoord[3] = tmpvar_13; + tmpvar_13.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); + gl_TexCoord[1] = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14.w = 0.0; + tmpvar_14.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); + gl_TexCoord[2] = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.w = 0.0; + tmpvar_15.xyz = ((x1_10 + x2_9) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))); + gl_TexCoord[3] = tmpvar_15; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-in.txt b/3rdparty/glsl-optimizer/tests/vertex/z-particle-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-particle-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-particle-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-inES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-particle-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-particle-inES.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-particle-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-particle-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/z-particle-ir.txt new file mode 100644 index 000000000..57642c6eb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-particle-ir.txt @@ -0,0 +1,72 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +struct appdata_t { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +varying vec2 xlv_TEXCOORD0; +varying vec4 xlv_COLOR; +uniform mat4 glstate_matrix_mvp; +uniform vec4 _MainTex_ST; +v2f xlat_main ( + in appdata_t v_1 +) +{ + v2f o_2; + vec4 tmpvar_3; + tmpvar_3 = (glstate_matrix_mvp * v_1.vertex); + o_2.vertex = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = v_1.color; + o_2.color = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = ((v_1.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_2.texcoord = tmpvar_5; + return o_2; +} + +void main () +{ + appdata_t xlt_v_6; + v2f xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = gl_Vertex.xyzw; + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_v_6.vertex = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Color.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_v_6.color = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_MultiTexCoord0.xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_v_6.texcoord = tmpvar_13; + v2f tmpvar_14; + tmpvar_14 = xlat_main (xlt_v_6); + v2f tmpvar_15; + tmpvar_15 = tmpvar_14; + xl_retval_7 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = xl_retval_7.vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_Position = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_7.color.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlv_COLOR = tmpvar_19; + vec2 tmpvar_20; + tmpvar_20 = xl_retval_7.texcoord.xy; + vec2 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlv_TEXCOORD0 = tmpvar_21; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-particle-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-particle-irES.txt new file mode 100644 index 000000000..e64250049 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-particle-irES.txt @@ -0,0 +1,77 @@ +struct v2f { + highp vec4 vertex; + lowp vec4 color; + mediump vec2 texcoord; +}; +struct appdata_t { + highp vec4 vertex; + lowp vec4 color; + highp vec2 texcoord; +}; +varying mediump vec2 xlv_TEXCOORD0; +varying lowp vec4 xlv_COLOR; +uniform highp mat4 glstate_matrix_mvp; +uniform highp vec4 _MainTex_ST; +attribute lowp vec4 _glesColor; +attribute highp vec4 _glesMultiTexCoord1; +attribute highp vec4 _glesMultiTexCoord0; +attribute mediump vec3 _glesNormal; +attribute highp vec4 _glesVertex; +v2f xlat_main ( + in appdata_t v_1 +) +{ + v2f o_2; + highp vec4 tmpvar_3; + tmpvar_3 = (glstate_matrix_mvp * v_1.vertex); + o_2.vertex = tmpvar_3; + lowp vec4 tmpvar_4; + tmpvar_4 = v_1.color; + o_2.color = tmpvar_4; + highp vec2 tmpvar_5; + tmpvar_5 = ((v_1.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_2.texcoord = tmpvar_5; + return o_2; +} + +void main () +{ + appdata_t xlt_v_6; + v2f xl_retval_7; + highp vec4 tmpvar_8; + tmpvar_8 = _glesVertex.xyzw; + highp vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_v_6.vertex = tmpvar_9; + lowp vec4 tmpvar_10; + tmpvar_10 = _glesColor.xyzw; + lowp vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_v_6.color = tmpvar_11; + highp vec2 tmpvar_12; + tmpvar_12 = _glesMultiTexCoord0.xy; + highp vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_v_6.texcoord = tmpvar_13; + v2f tmpvar_14; + tmpvar_14 = xlat_main (xlt_v_6); + v2f tmpvar_15; + tmpvar_15 = tmpvar_14; + xl_retval_7 = tmpvar_15; + highp vec4 tmpvar_16; + tmpvar_16 = xl_retval_7.vertex.xyzw; + highp vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_Position = tmpvar_17; + lowp vec4 tmpvar_18; + tmpvar_18 = xl_retval_7.color.xyzw; + lowp vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlv_COLOR = tmpvar_19; + mediump vec2 tmpvar_20; + tmpvar_20 = xl_retval_7.texcoord.xy; + mediump vec2 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlv_TEXCOORD0 = tmpvar_21; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-out.txt b/3rdparty/glsl-optimizer/tests/vertex/z-particle-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-particle-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-particle-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-particle-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-particle-outES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-particle-outES.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-particle-outES.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-in.txt b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-inES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-inES.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-ir.txt new file mode 100644 index 000000000..f6b9a4a3a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-ir.txt @@ -0,0 +1,96 @@ +struct v2f { + vec4 pos; + vec4 uv; + vec3 ray; +}; +struct appdata { + vec4 vertex; + vec3 normal; +}; +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_TEXCOORD0; +uniform mat4 glstate_matrix_mvp; +uniform mat4 glstate_matrix_modelview0; +uniform vec4 _ProjectionParams; +vec4 ComputeScreenPos ( + in vec4 pos_1 +) +{ + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (pos_1 * 0.5); + o_2 = tmpvar_3; + vec2 tmpvar_4; + tmpvar_4.x = o_2.x; + tmpvar_4.y = (o_2.y * _ProjectionParams.x); + vec2 tmpvar_5; + tmpvar_5 = (tmpvar_4 + o_2.w); + o_2.xy = tmpvar_5.xy.xy; + vec2 tmpvar_6; + tmpvar_6 = pos_1.zw; + o_2.zw = tmpvar_6.xxxy.zw; + return o_2; +} + +v2f xlat_main ( + in appdata v_7 +) +{ + v2f o_8; + vec4 tmpvar_9; + tmpvar_9 = (glstate_matrix_mvp * v_7.vertex); + o_8.pos = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = ComputeScreenPos (o_8.pos); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + o_8.uv = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = ((glstate_matrix_modelview0 * v_7.vertex).xyz * vec3(-1.0, -1.0, 1.0)); + o_8.ray = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = vec3(float((v_7.normal.z != 0.0))); + vec3 tmpvar_14; + tmpvar_14 = mix (o_8.ray, v_7.normal, tmpvar_13); + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + o_8.ray = tmpvar_15; + return o_8; +} + +void main () +{ + appdata xlt_v_16; + v2f xl_retval_17; + vec4 tmpvar_18; + tmpvar_18 = gl_Vertex.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_16.vertex = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_16.normal = tmpvar_21; + v2f tmpvar_22; + tmpvar_22 = xlat_main (xlt_v_16); + v2f tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_17 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = xl_retval_17.pos.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_Position = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = xl_retval_17.uv.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlv_TEXCOORD0 = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = xl_retval_17.ray.xyz; + vec3 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlv_TEXCOORD1 = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-irES.txt new file mode 100644 index 000000000..350852569 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-irES.txt @@ -0,0 +1,101 @@ +struct v2f { + highp vec4 pos; + highp vec4 uv; + highp vec3 ray; +}; +struct appdata { + highp vec4 vertex; + highp vec3 normal; +}; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_TEXCOORD0; +uniform highp mat4 glstate_matrix_mvp; +uniform highp mat4 glstate_matrix_modelview0; +uniform highp vec4 _ProjectionParams; +attribute lowp vec4 _glesColor; +attribute highp vec4 _glesMultiTexCoord1; +attribute highp vec4 _glesMultiTexCoord0; +attribute mediump vec3 _glesNormal; +attribute highp vec4 _glesVertex; +vec4 ComputeScreenPos ( + in highp vec4 pos_1 +) +{ + highp vec4 o_2; + highp vec4 tmpvar_3; + tmpvar_3 = (pos_1 * 0.5); + o_2 = tmpvar_3; + highp vec2 tmpvar_4; + tmpvar_4.x = o_2.x; + tmpvar_4.y = (o_2.y * _ProjectionParams.x); + highp vec2 tmpvar_5; + tmpvar_5 = (tmpvar_4 + o_2.w); + o_2.xy = tmpvar_5.xy.xy; + highp vec2 tmpvar_6; + tmpvar_6 = pos_1.zw; + o_2.zw = tmpvar_6.xxxy.zw; + return o_2; +} + +v2f xlat_main ( + in appdata v_7 +) +{ + v2f o_8; + highp vec4 tmpvar_9; + tmpvar_9 = (glstate_matrix_mvp * v_7.vertex); + o_8.pos = tmpvar_9; + highp vec4 tmpvar_10; + tmpvar_10 = ComputeScreenPos (o_8.pos); + highp vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + o_8.uv = tmpvar_11; + highp vec3 tmpvar_12; + tmpvar_12 = ((glstate_matrix_modelview0 * v_7.vertex).xyz * vec3(-1.0, -1.0, 1.0)); + o_8.ray = tmpvar_12; + highp vec3 tmpvar_13; + tmpvar_13 = vec3(float((v_7.normal.z != 0.0))); + highp vec3 tmpvar_14; + tmpvar_14 = mix (o_8.ray, v_7.normal, tmpvar_13); + highp vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + o_8.ray = tmpvar_15; + return o_8; +} + +void main () +{ + appdata xlt_v_16; + v2f xl_retval_17; + highp vec4 tmpvar_18; + tmpvar_18 = _glesVertex.xyzw; + highp vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_16.vertex = tmpvar_19; + highp vec3 tmpvar_20; + tmpvar_20 = _glesNormal.xyz; + highp vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_16.normal = tmpvar_21; + v2f tmpvar_22; + tmpvar_22 = xlat_main (xlt_v_16); + v2f tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_17 = tmpvar_23; + highp vec4 tmpvar_24; + tmpvar_24 = xl_retval_17.pos.xyzw; + highp vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_Position = tmpvar_25; + highp vec4 tmpvar_26; + tmpvar_26 = xl_retval_17.uv.xyzw; + highp vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlv_TEXCOORD0 = tmpvar_27; + highp vec3 tmpvar_28; + tmpvar_28 = xl_retval_17.ray.xyz; + highp vec3 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlv_TEXCOORD1 = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-out.txt b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-out.txt similarity index 61% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-out.txt index 8a3200d64..28164dabe 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-out.txt @@ -7,17 +7,16 @@ void main () { vec4 tmpvar_1; tmpvar_1 = (glstate_matrix_mvp * gl_Vertex); - vec4 o_i0; - vec4 tmpvar_2; - tmpvar_2 = (tmpvar_1 * 0.5); - o_i0 = tmpvar_2; - vec2 tmpvar_3; - tmpvar_3.x = tmpvar_2.x; - tmpvar_3.y = (tmpvar_2.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_3 + tmpvar_2.w); - o_i0.zw = tmpvar_1.zw; + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; gl_Position = tmpvar_1; - xlv_TEXCOORD0 = o_i0; + xlv_TEXCOORD0 = o_2; xlv_TEXCOORD1 = mix (((glstate_matrix_modelview0 * gl_Vertex).xyz * vec3(-1.0, -1.0, 1.0)), gl_Normal, vec3(float((gl_Normal.z != 0.0)))); } diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES.txt similarity index 67% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-outES.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES.txt index 52e38cd27..71f240670 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/complex-prepasslight-outES.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES.txt @@ -11,17 +11,16 @@ void main () tmpvar_1 = _glesNormal; highp vec4 tmpvar_2; tmpvar_2 = (glstate_matrix_mvp * _glesVertex); - highp vec4 o_i0; - highp vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - highp vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; + highp vec4 o_3; + highp vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + highp vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; gl_Position = tmpvar_2; - xlv_TEXCOORD0 = o_i0; + xlv_TEXCOORD0 = o_3; xlv_TEXCOORD1 = mix (((glstate_matrix_modelview0 * _glesVertex).xyz * vec3(-1.0, -1.0, 1.0)), tmpvar_1, vec3(float((tmpvar_1.z != 0.0)))); } diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-in.txt b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-inES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-inES.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/complex-treeleaf-inES.txt rename to 3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-inES.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-ir.txt new file mode 100644 index 000000000..0fc4f287f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-ir.txt @@ -0,0 +1,428 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec2 _LightCoord; +}; +varying vec2 xlv_TEXCOORD3; +varying vec3 xlv_TEXCOORD2; +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_COLOR0; +varying vec2 xlv_TEXCOORD0; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform mat4 glstate_matrix_mvp; +uniform mat4 glstate_matrix_invtrans_modelview0; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform vec4 _Time; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 projectedVertex_2; + vec3 planeNormal_3; + vec3 tmpvar_4; + tmpvar_4 = _SquashPlaneNormal.xyz; + planeNormal_3 = tmpvar_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + float tmpvar_6; + tmpvar_6 = dot (planeNormal_3, tmpvar_5); + vec3 tmpvar_7; + tmpvar_7 = (pos_1.xyz - ((tmpvar_6 + _SquashPlaneNormal.w) * planeNormal_3)); + projectedVertex_2 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = vec3(_SquashAmount); + vec3 tmpvar_9; + tmpvar_9 = mix (projectedVertex_2, pos_1.xyz, tmpvar_8); + vec4 tmpvar_10; + tmpvar_10.w = 1.0; + tmpvar_10.xyz = tmpvar_9.xyz; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + pos_1 = tmpvar_11; + return pos_1; +} + +void ExpandBillboard ( + in mat4 mat_12, + inout vec4 pos_13, + inout vec3 normal_14, + inout vec4 tangent_15 +) +{ + vec3 tanb_16; + vec3 norb_17; + float isBillboard_18; + float tmpvar_19; + tmpvar_19 = abs (tangent_15.w); + float tmpvar_20; + tmpvar_20 = (1.0 - tmpvar_19); + isBillboard_18 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = normal_14.xyz; + vec4 tmpvar_22; + tmpvar_22 = normalize ((tmpvar_21 * mat_12)); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22.xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + norb_17 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.w = 0.0; + tmpvar_25.xyz = tangent_15.xyz.xyz; + vec4 tmpvar_26; + tmpvar_26 = normalize ((tmpvar_25 * mat_12)); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26.xyz; + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + tanb_16 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.zw = vec2(0.0, 0.0); + tmpvar_29.xy = normal_14.xy.xy; + vec4 tmpvar_30; + tmpvar_30 = (pos_13 + ((tmpvar_29 * mat_12) * isBillboard_18)); + pos_13 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = vec3(isBillboard_18); + vec3 tmpvar_32; + tmpvar_32 = mix (normal_14, norb_17, tmpvar_31); + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + normal_14 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34.w = -1.0; + tmpvar_34.xyz = tanb_16.xyz; + vec4 tmpvar_35; + tmpvar_35 = vec4(isBillboard_18); + vec4 tmpvar_36; + tmpvar_36 = mix (tangent_15, tmpvar_34, tmpvar_35); + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + tangent_15 = tmpvar_37; +} + +vec4 TriangleWave ( + in vec4 x_38 +) +{ + vec4 tmpvar_39; + tmpvar_39 = fract ((x_38 + 0.5)); + vec4 tmpvar_40; + tmpvar_40 = abs (((tmpvar_39 * 2.0) - 1.0)); + return tmpvar_40; +} + +vec4 SmoothCurve ( + in vec4 x_41 +) +{ + return ((x_41 * x_41) * (3.0 - (2.0 * x_41))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_42 +) +{ + vec4 tmpvar_43; + tmpvar_43 = TriangleWave (x_42); + vec4 tmpvar_44; + tmpvar_44 = SmoothCurve (tmpvar_43); + return tmpvar_44; +} + +vec4 AnimateVertex ( + in vec4 pos_45, + in vec3 normal_46, + in vec4 animParams_47 +) +{ + vec3 bend_48; + vec2 vWavesSum_49; + vec4 vWaves_50; + vec2 vWavesIn_51; + float fVtxPhase_52; + float fBranchPhase_53; + float fObjPhase_54; + float fBranchAmp_55; + float fDetailAmp_56; + float tmpvar_57; + tmpvar_57 = 0.1; + fDetailAmp_56 = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.3; + fBranchAmp_55 = tmpvar_58; + float tmpvar_59; + tmpvar_59 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_60; + tmpvar_60 = tmpvar_59; + fObjPhase_54 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = (fObjPhase_54 + animParams_47.x); + fBranchPhase_53 = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = vec3((animParams_47.y + fBranchPhase_53)); + float tmpvar_63; + tmpvar_63 = dot (pos_45.xyz, tmpvar_62); + float tmpvar_64; + tmpvar_64 = tmpvar_63; + fVtxPhase_52 = tmpvar_64; + vec2 tmpvar_65; + tmpvar_65.x = fVtxPhase_52; + tmpvar_65.y = fBranchPhase_53; + vec2 tmpvar_66; + tmpvar_66 = (_Time.yy + tmpvar_65); + vWavesIn_51 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = fract ((vWavesIn_51.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_68; + tmpvar_68 = ((tmpvar_67 * 2.0) - 1.0); + vWaves_50 = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = SmoothTriangleWave (vWaves_50); + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + vWaves_50 = tmpvar_70; + vec2 tmpvar_71; + tmpvar_71 = (vWaves_50.xz + vWaves_50.yw); + vWavesSum_49 = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = ((animParams_47.y * fDetailAmp_56) * normal_46.xyz); + bend_48 = tmpvar_72; + float tmpvar_73; + tmpvar_73 = (animParams_47.w * fBranchAmp_55); + bend_48.y = vec2(tmpvar_73).y; + vec3 tmpvar_74; + tmpvar_74 = (pos_45.xyz + (((vWavesSum_49.xyx * bend_48) + ((_Wind.xyz * vWavesSum_49.y) * animParams_47.w)) * _Wind.w)); + pos_45.xyz = tmpvar_74.xyz.xyz; + vec3 tmpvar_75; + tmpvar_75 = (pos_45.xyz + (animParams_47.z * _Wind.xyz)); + pos_45.xyz = tmpvar_75.xyz.xyz; + return pos_45; +} + +void TreeVertLeaf ( + inout appdata_full v_76 +) +{ + ExpandBillboard (glstate_matrix_invtrans_modelview0, v_76.vertex, v_76.normal, v_76.tangent); + vec3 tmpvar_77; + tmpvar_77 = (v_76.vertex.xyz * _Scale.xyz); + v_76.vertex.xyz = tmpvar_77.xyz.xyz; + vec4 tmpvar_78; + tmpvar_78.xy = v_76.color.xy.xy; + tmpvar_78.zw = v_76.texcoord1.xy.xy; + vec4 tmpvar_79; + tmpvar_79 = AnimateVertex (v_76.vertex, v_76.normal, tmpvar_78); + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + v_76.vertex = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = Squash (v_76.vertex); + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + v_76.vertex = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83.xyz = vec3(1.0, 1.0, 1.0); + tmpvar_83.w = v_76.color.w; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + v_76.color = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = normalize (v_76.normal); + vec3 tmpvar_86; + tmpvar_86 = tmpvar_85; + v_76.normal = tmpvar_86; + vec3 tmpvar_87; + tmpvar_87 = normalize (v_76.tangent.xyz); + vec3 tmpvar_88; + tmpvar_88 = tmpvar_87; + v_76.tangent.xyz = tmpvar_88.xyz.xyz; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_89 +) +{ + vec3 objSpaceCameraPos_90; + vec4 tmpvar_91; + tmpvar_91.w = 1.0; + tmpvar_91.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_92; + tmpvar_92 = ((_World2Object * tmpvar_91).xyz * unity_Scale.w); + objSpaceCameraPos_90 = tmpvar_92; + return (objSpaceCameraPos_90 - v_89.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_93 +) +{ + vec3 objSpaceLightPos_94; + vec3 tmpvar_95; + tmpvar_95 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_94 = tmpvar_95; + return objSpaceLightPos_94.xyz; +} + +v2f_surf xlat_main ( + in appdata_full v_96 +) +{ + mat3 rotation_97; + vec3 binormal_98; + v2f_surf o_99; + TreeVertLeaf (v_96); + vec4 tmpvar_100; + tmpvar_100 = (glstate_matrix_mvp * v_96.vertex); + o_99.pos = tmpvar_100; + vec2 tmpvar_101; + tmpvar_101 = ((v_96.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_99.hip_pack0 = tmpvar_101.xy.xy; + vec4 tmpvar_102; + tmpvar_102 = v_96.color; + o_99.lop_color = tmpvar_102; + vec3 tmpvar_103; + tmpvar_103 = cross (v_96.normal, v_96.tangent.xyz); + vec3 tmpvar_104; + tmpvar_104 = (tmpvar_103 * v_96.tangent.w); + binormal_98 = tmpvar_104; + mat3 tmpvar_105; + float tmpvar_106; + tmpvar_106 = v_96.tangent.x; + tmpvar_105[0].x = tmpvar_106; + float tmpvar_107; + tmpvar_107 = binormal_98.x; + tmpvar_105[0].y = tmpvar_107; + float tmpvar_108; + tmpvar_108 = v_96.normal.x; + tmpvar_105[0].z = tmpvar_108; + float tmpvar_109; + tmpvar_109 = v_96.tangent.y; + tmpvar_105[1].x = tmpvar_109; + float tmpvar_110; + tmpvar_110 = binormal_98.y; + tmpvar_105[1].y = tmpvar_110; + float tmpvar_111; + tmpvar_111 = v_96.normal.y; + tmpvar_105[1].z = tmpvar_111; + float tmpvar_112; + tmpvar_112 = v_96.tangent.z; + tmpvar_105[2].x = tmpvar_112; + float tmpvar_113; + tmpvar_113 = binormal_98.z; + tmpvar_105[2].y = tmpvar_113; + float tmpvar_114; + tmpvar_114 = v_96.normal.z; + tmpvar_105[2].z = tmpvar_114; + mat3 tmpvar_115; + tmpvar_115 = (tmpvar_105); + rotation_97 = (tmpvar_115); + vec3 tmpvar_116; + tmpvar_116 = ObjSpaceLightDir (v_96.vertex); + vec3 tmpvar_117; + tmpvar_117 = (rotation_97 * tmpvar_116); + o_99.lightDir = tmpvar_117; + vec3 tmpvar_118; + tmpvar_118 = ObjSpaceViewDir (v_96.vertex); + vec3 tmpvar_119; + tmpvar_119 = (rotation_97 * tmpvar_118); + o_99.viewDir = tmpvar_119; + vec2 tmpvar_120; + tmpvar_120 = (_LightMatrix0 * (_Object2World * v_96.vertex)).xy; + o_99._LightCoord = tmpvar_120; + return o_99; +} + +void main () +{ + appdata_full xlt_v_121; + v2f_surf xl_retval_122; + vec4 tmpvar_123; + tmpvar_123 = gl_Vertex.xyzw; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + xlt_v_121.vertex = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = TANGENT.xyzw; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + xlt_v_121.tangent = tmpvar_126; + vec3 tmpvar_127; + tmpvar_127 = gl_Normal.xyz; + vec3 tmpvar_128; + tmpvar_128 = tmpvar_127; + xlt_v_121.normal = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + xlt_v_121.texcoord = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + xlt_v_121.texcoord1 = tmpvar_132; + vec4 tmpvar_133; + tmpvar_133 = gl_Color.xyzw; + vec4 tmpvar_134; + tmpvar_134 = tmpvar_133; + xlt_v_121.color = tmpvar_134; + v2f_surf tmpvar_135; + tmpvar_135 = xlat_main (xlt_v_121); + v2f_surf tmpvar_136; + tmpvar_136 = tmpvar_135; + xl_retval_122 = tmpvar_136; + vec4 tmpvar_137; + tmpvar_137 = xl_retval_122.pos.xyzw; + vec4 tmpvar_138; + tmpvar_138 = tmpvar_137; + gl_Position = tmpvar_138; + vec2 tmpvar_139; + tmpvar_139 = xl_retval_122.hip_pack0.xy; + vec2 tmpvar_140; + tmpvar_140 = tmpvar_139; + xlv_TEXCOORD0 = tmpvar_140; + vec4 tmpvar_141; + tmpvar_141 = xl_retval_122.lop_color.xyzw; + vec4 tmpvar_142; + tmpvar_142 = tmpvar_141; + xlv_COLOR0 = tmpvar_142; + vec3 tmpvar_143; + tmpvar_143 = xl_retval_122.lightDir.xyz; + vec3 tmpvar_144; + tmpvar_144 = tmpvar_143; + xlv_TEXCOORD1 = tmpvar_144; + vec3 tmpvar_145; + tmpvar_145 = xl_retval_122.viewDir.xyz; + vec3 tmpvar_146; + tmpvar_146 = tmpvar_145; + xlv_TEXCOORD2 = tmpvar_146; + vec2 tmpvar_147; + tmpvar_147 = xl_retval_122._LightCoord.xy; + vec2 tmpvar_148; + tmpvar_148 = tmpvar_147; + xlv_TEXCOORD3 = tmpvar_148; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-irES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-irES.txt new file mode 100644 index 000000000..af9d86398 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-irES.txt @@ -0,0 +1,433 @@ +struct appdata_full { + highp vec4 vertex; + highp vec4 tangent; + highp vec3 normal; + highp vec4 texcoord; + highp vec4 texcoord1; + highp vec4 color; +}; +struct v2f_surf { + highp vec4 pos; + highp vec2 hip_pack0; + highp vec4 lop_color; + highp vec3 lightDir; + highp vec3 viewDir; + highp vec2 _LightCoord; +}; +varying highp vec2 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_COLOR0; +varying highp vec2 xlv_TEXCOORD0; +attribute vec4 TANGENT; +uniform highp vec4 unity_Scale; +uniform highp mat4 glstate_matrix_mvp; +uniform highp mat4 glstate_matrix_invtrans_modelview0; +uniform highp vec4 _WorldSpaceLightPos0; +uniform highp vec3 _WorldSpaceCameraPos; +uniform highp mat4 _World2Object; +uniform highp vec4 _Wind; +uniform highp vec4 _Time; +uniform highp vec4 _SquashPlaneNormal; +uniform highp float _SquashAmount; +uniform highp vec4 _Scale; +uniform highp mat4 _Object2World; +uniform highp vec4 _MainTex_ST; +uniform highp mat4 _LightMatrix0; +attribute lowp vec4 _glesColor; +attribute highp vec4 _glesMultiTexCoord1; +attribute highp vec4 _glesMultiTexCoord0; +attribute mediump vec3 _glesNormal; +attribute highp vec4 _glesVertex; +vec4 Squash ( + in highp vec4 pos_1 +) +{ + highp vec3 projectedVertex_2; + highp vec3 planeNormal_3; + highp vec3 tmpvar_4; + tmpvar_4 = _SquashPlaneNormal.xyz; + planeNormal_3 = tmpvar_4; + highp vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + highp float tmpvar_6; + tmpvar_6 = dot (planeNormal_3, tmpvar_5); + highp vec3 tmpvar_7; + tmpvar_7 = (pos_1.xyz - ((tmpvar_6 + _SquashPlaneNormal.w) * planeNormal_3)); + projectedVertex_2 = tmpvar_7; + highp vec3 tmpvar_8; + tmpvar_8 = vec3(_SquashAmount); + highp vec3 tmpvar_9; + tmpvar_9 = mix (projectedVertex_2, pos_1.xyz, tmpvar_8); + highp vec4 tmpvar_10; + tmpvar_10.w = 1.0; + tmpvar_10.xyz = tmpvar_9.xyz; + highp vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + pos_1 = tmpvar_11; + return pos_1; +} + +void ExpandBillboard ( + in highp mat4 mat_12, + inout highp vec4 pos_13, + inout highp vec3 normal_14, + inout highp vec4 tangent_15 +) +{ + highp vec3 tanb_16; + highp vec3 norb_17; + highp float isBillboard_18; + highp float tmpvar_19; + tmpvar_19 = abs (tangent_15.w); + highp float tmpvar_20; + tmpvar_20 = (1.0 - tmpvar_19); + isBillboard_18 = tmpvar_20; + highp vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = normal_14.xyz; + highp vec4 tmpvar_22; + tmpvar_22 = normalize ((tmpvar_21 * mat_12)); + highp vec3 tmpvar_23; + tmpvar_23 = tmpvar_22.xyz; + highp vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + norb_17 = tmpvar_24; + highp vec4 tmpvar_25; + tmpvar_25.w = 0.0; + tmpvar_25.xyz = tangent_15.xyz.xyz; + highp vec4 tmpvar_26; + tmpvar_26 = normalize ((tmpvar_25 * mat_12)); + highp vec3 tmpvar_27; + tmpvar_27 = tmpvar_26.xyz; + highp vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + tanb_16 = tmpvar_28; + highp vec4 tmpvar_29; + tmpvar_29.zw = vec2(0.0, 0.0); + tmpvar_29.xy = normal_14.xy.xy; + highp vec4 tmpvar_30; + tmpvar_30 = (pos_13 + ((tmpvar_29 * mat_12) * isBillboard_18)); + pos_13 = tmpvar_30; + highp vec3 tmpvar_31; + tmpvar_31 = vec3(isBillboard_18); + highp vec3 tmpvar_32; + tmpvar_32 = mix (normal_14, norb_17, tmpvar_31); + highp vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + normal_14 = tmpvar_33; + highp vec4 tmpvar_34; + tmpvar_34.w = -1.0; + tmpvar_34.xyz = tanb_16.xyz; + highp vec4 tmpvar_35; + tmpvar_35 = vec4(isBillboard_18); + highp vec4 tmpvar_36; + tmpvar_36 = mix (tangent_15, tmpvar_34, tmpvar_35); + highp vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + tangent_15 = tmpvar_37; +} + +vec4 TriangleWave ( + in highp vec4 x_38 +) +{ + highp vec4 tmpvar_39; + tmpvar_39 = fract ((x_38 + 0.5)); + highp vec4 tmpvar_40; + tmpvar_40 = abs (((tmpvar_39 * 2.0) - 1.0)); + return tmpvar_40; +} + +vec4 SmoothCurve ( + in highp vec4 x_41 +) +{ + return ((x_41 * x_41) * (3.0 - (2.0 * x_41))); +} + +vec4 SmoothTriangleWave ( + in highp vec4 x_42 +) +{ + highp vec4 tmpvar_43; + tmpvar_43 = TriangleWave (x_42); + highp vec4 tmpvar_44; + tmpvar_44 = SmoothCurve (tmpvar_43); + return tmpvar_44; +} + +vec4 AnimateVertex ( + in highp vec4 pos_45, + in highp vec3 normal_46, + in highp vec4 animParams_47 +) +{ + highp vec3 bend_48; + highp vec2 vWavesSum_49; + highp vec4 vWaves_50; + highp vec2 vWavesIn_51; + highp float fVtxPhase_52; + highp float fBranchPhase_53; + highp float fObjPhase_54; + highp float fBranchAmp_55; + highp float fDetailAmp_56; + float tmpvar_57; + tmpvar_57 = 0.1; + fDetailAmp_56 = tmpvar_57; + float tmpvar_58; + tmpvar_58 = 0.3; + fBranchAmp_55 = tmpvar_58; + highp float tmpvar_59; + tmpvar_59 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + highp float tmpvar_60; + tmpvar_60 = tmpvar_59; + fObjPhase_54 = tmpvar_60; + highp float tmpvar_61; + tmpvar_61 = (fObjPhase_54 + animParams_47.x); + fBranchPhase_53 = tmpvar_61; + highp vec3 tmpvar_62; + tmpvar_62 = vec3((animParams_47.y + fBranchPhase_53)); + highp float tmpvar_63; + tmpvar_63 = dot (pos_45.xyz, tmpvar_62); + highp float tmpvar_64; + tmpvar_64 = tmpvar_63; + fVtxPhase_52 = tmpvar_64; + highp vec2 tmpvar_65; + tmpvar_65.x = fVtxPhase_52; + tmpvar_65.y = fBranchPhase_53; + highp vec2 tmpvar_66; + tmpvar_66 = (_Time.yy + tmpvar_65); + vWavesIn_51 = tmpvar_66; + highp vec4 tmpvar_67; + tmpvar_67 = fract ((vWavesIn_51.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + highp vec4 tmpvar_68; + tmpvar_68 = ((tmpvar_67 * 2.0) - 1.0); + vWaves_50 = tmpvar_68; + highp vec4 tmpvar_69; + tmpvar_69 = SmoothTriangleWave (vWaves_50); + highp vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + vWaves_50 = tmpvar_70; + highp vec2 tmpvar_71; + tmpvar_71 = (vWaves_50.xz + vWaves_50.yw); + vWavesSum_49 = tmpvar_71; + highp vec3 tmpvar_72; + tmpvar_72 = ((animParams_47.y * fDetailAmp_56) * normal_46.xyz); + bend_48 = tmpvar_72; + highp float tmpvar_73; + tmpvar_73 = (animParams_47.w * fBranchAmp_55); + bend_48.y = vec2(tmpvar_73).y; + highp vec3 tmpvar_74; + tmpvar_74 = (pos_45.xyz + (((vWavesSum_49.xyx * bend_48) + ((_Wind.xyz * vWavesSum_49.y) * animParams_47.w)) * _Wind.w)); + pos_45.xyz = tmpvar_74.xyz.xyz; + highp vec3 tmpvar_75; + tmpvar_75 = (pos_45.xyz + (animParams_47.z * _Wind.xyz)); + pos_45.xyz = tmpvar_75.xyz.xyz; + return pos_45; +} + +void TreeVertLeaf ( + inout appdata_full v_76 +) +{ + ExpandBillboard (glstate_matrix_invtrans_modelview0, v_76.vertex, v_76.normal, v_76.tangent); + highp vec3 tmpvar_77; + tmpvar_77 = (v_76.vertex.xyz * _Scale.xyz); + v_76.vertex.xyz = tmpvar_77.xyz.xyz; + highp vec4 tmpvar_78; + tmpvar_78.xy = v_76.color.xy.xy; + tmpvar_78.zw = v_76.texcoord1.xy.xy; + highp vec4 tmpvar_79; + tmpvar_79 = AnimateVertex (v_76.vertex, v_76.normal, tmpvar_78); + highp vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + v_76.vertex = tmpvar_80; + highp vec4 tmpvar_81; + tmpvar_81 = Squash (v_76.vertex); + highp vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + v_76.vertex = tmpvar_82; + highp vec4 tmpvar_83; + tmpvar_83.xyz = vec3(1.0, 1.0, 1.0); + tmpvar_83.w = v_76.color.w; + highp vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + v_76.color = tmpvar_84; + highp vec3 tmpvar_85; + tmpvar_85 = normalize (v_76.normal); + highp vec3 tmpvar_86; + tmpvar_86 = tmpvar_85; + v_76.normal = tmpvar_86; + highp vec3 tmpvar_87; + tmpvar_87 = normalize (v_76.tangent.xyz); + highp vec3 tmpvar_88; + tmpvar_88 = tmpvar_87; + v_76.tangent.xyz = tmpvar_88.xyz.xyz; +} + +vec3 ObjSpaceViewDir ( + in highp vec4 v_89 +) +{ + highp vec3 objSpaceCameraPos_90; + highp vec4 tmpvar_91; + tmpvar_91.w = 1.0; + tmpvar_91.xyz = _WorldSpaceCameraPos.xyz.xyz; + highp vec3 tmpvar_92; + tmpvar_92 = ((_World2Object * tmpvar_91).xyz * unity_Scale.w); + objSpaceCameraPos_90 = tmpvar_92; + return (objSpaceCameraPos_90 - v_89.xyz); +} + +vec3 ObjSpaceLightDir ( + in highp vec4 v_93 +) +{ + highp vec3 objSpaceLightPos_94; + highp vec3 tmpvar_95; + tmpvar_95 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_94 = tmpvar_95; + return objSpaceLightPos_94.xyz; +} + +v2f_surf xlat_main ( + in appdata_full v_96 +) +{ + highp mat3 rotation_97; + highp vec3 binormal_98; + v2f_surf o_99; + TreeVertLeaf (v_96); + highp vec4 tmpvar_100; + tmpvar_100 = (glstate_matrix_mvp * v_96.vertex); + o_99.pos = tmpvar_100; + highp vec2 tmpvar_101; + tmpvar_101 = ((v_96.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_99.hip_pack0 = tmpvar_101.xy.xy; + highp vec4 tmpvar_102; + tmpvar_102 = v_96.color; + o_99.lop_color = tmpvar_102; + highp vec3 tmpvar_103; + tmpvar_103 = cross (v_96.normal, v_96.tangent.xyz); + highp vec3 tmpvar_104; + tmpvar_104 = (tmpvar_103 * v_96.tangent.w); + binormal_98 = tmpvar_104; + mat3 tmpvar_105; + float tmpvar_106; + tmpvar_106 = v_96.tangent.x; + tmpvar_105[0].x = tmpvar_106; + float tmpvar_107; + tmpvar_107 = binormal_98.x; + tmpvar_105[0].y = tmpvar_107; + float tmpvar_108; + tmpvar_108 = v_96.normal.x; + tmpvar_105[0].z = tmpvar_108; + float tmpvar_109; + tmpvar_109 = v_96.tangent.y; + tmpvar_105[1].x = tmpvar_109; + float tmpvar_110; + tmpvar_110 = binormal_98.y; + tmpvar_105[1].y = tmpvar_110; + float tmpvar_111; + tmpvar_111 = v_96.normal.y; + tmpvar_105[1].z = tmpvar_111; + float tmpvar_112; + tmpvar_112 = v_96.tangent.z; + tmpvar_105[2].x = tmpvar_112; + float tmpvar_113; + tmpvar_113 = binormal_98.z; + tmpvar_105[2].y = tmpvar_113; + float tmpvar_114; + tmpvar_114 = v_96.normal.z; + tmpvar_105[2].z = tmpvar_114; + mat3 tmpvar_115; + tmpvar_115 = (tmpvar_105); + rotation_97 = (tmpvar_115); + highp vec3 tmpvar_116; + tmpvar_116 = ObjSpaceLightDir (v_96.vertex); + highp vec3 tmpvar_117; + tmpvar_117 = (rotation_97 * tmpvar_116); + o_99.lightDir = tmpvar_117; + highp vec3 tmpvar_118; + tmpvar_118 = ObjSpaceViewDir (v_96.vertex); + highp vec3 tmpvar_119; + tmpvar_119 = (rotation_97 * tmpvar_118); + o_99.viewDir = tmpvar_119; + highp vec2 tmpvar_120; + tmpvar_120 = (_LightMatrix0 * (_Object2World * v_96.vertex)).xy; + o_99._LightCoord = tmpvar_120; + return o_99; +} + +void main () +{ + appdata_full xlt_v_121; + v2f_surf xl_retval_122; + highp vec4 tmpvar_123; + tmpvar_123 = _glesVertex.xyzw; + highp vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + xlt_v_121.vertex = tmpvar_124; + highp vec4 tmpvar_125; + tmpvar_125 = TANGENT.xyzw; + highp vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + xlt_v_121.tangent = tmpvar_126; + highp vec3 tmpvar_127; + tmpvar_127 = _glesNormal.xyz; + highp vec3 tmpvar_128; + tmpvar_128 = tmpvar_127; + xlt_v_121.normal = tmpvar_128; + highp vec4 tmpvar_129; + tmpvar_129 = _glesMultiTexCoord0.xyzw; + highp vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + xlt_v_121.texcoord = tmpvar_130; + highp vec4 tmpvar_131; + tmpvar_131 = _glesMultiTexCoord1.xyzw; + highp vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + xlt_v_121.texcoord1 = tmpvar_132; + highp vec4 tmpvar_133; + tmpvar_133 = _glesColor.xyzw; + highp vec4 tmpvar_134; + tmpvar_134 = tmpvar_133; + xlt_v_121.color = tmpvar_134; + v2f_surf tmpvar_135; + tmpvar_135 = xlat_main (xlt_v_121); + v2f_surf tmpvar_136; + tmpvar_136 = tmpvar_135; + xl_retval_122 = tmpvar_136; + highp vec4 tmpvar_137; + tmpvar_137 = xl_retval_122.pos.xyzw; + highp vec4 tmpvar_138; + tmpvar_138 = tmpvar_137; + gl_Position = tmpvar_138; + highp vec2 tmpvar_139; + tmpvar_139 = xl_retval_122.hip_pack0.xy; + highp vec2 tmpvar_140; + tmpvar_140 = tmpvar_139; + xlv_TEXCOORD0 = tmpvar_140; + highp vec4 tmpvar_141; + tmpvar_141 = xl_retval_122.lop_color.xyzw; + highp vec4 tmpvar_142; + tmpvar_142 = tmpvar_141; + xlv_COLOR0 = tmpvar_142; + highp vec3 tmpvar_143; + tmpvar_143 = xl_retval_122.lightDir.xyz; + highp vec3 tmpvar_144; + tmpvar_144 = tmpvar_143; + xlv_TEXCOORD1 = tmpvar_144; + highp vec3 tmpvar_145; + tmpvar_145 = xl_retval_122.viewDir.xyz; + highp vec3 tmpvar_146; + tmpvar_146 = tmpvar_145; + xlv_TEXCOORD2 = tmpvar_146; + highp vec2 tmpvar_147; + tmpvar_147 = xl_retval_122._LightCoord.xy; + highp vec2 tmpvar_148; + tmpvar_148 = tmpvar_147; + xlv_TEXCOORD3 = tmpvar_148; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-out.txt b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-out.txt new file mode 100644 index 000000000..4e35d1df9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-out.txt @@ -0,0 +1,100 @@ +varying vec2 xlv_TEXCOORD3; +varying vec3 xlv_TEXCOORD2; +varying vec3 xlv_TEXCOORD1; +varying vec4 xlv_COLOR0; +varying vec2 xlv_TEXCOORD0; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform mat4 glstate_matrix_mvp; +uniform mat4 glstate_matrix_invtrans_modelview0; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform vec4 _Time; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + float tmpvar_3; + tmpvar_3 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = gl_Normal; + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = TANGENT.xyz; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = gl_Normal.xy; + vec4 tmpvar_7; + tmpvar_7 = (gl_Vertex + ((tmpvar_6 * glstate_matrix_invtrans_modelview0) * tmpvar_3)); + vec3 tmpvar_8; + tmpvar_8 = mix (gl_Normal, normalize((tmpvar_4 * glstate_matrix_invtrans_modelview0)).xyz, vec3(tmpvar_3)); + vec4 tmpvar_9; + tmpvar_9.w = -1.0; + tmpvar_9.xyz = normalize((tmpvar_5 * glstate_matrix_invtrans_modelview0)).xyz; + vec4 tmpvar_10; + tmpvar_10 = mix (TANGENT, tmpvar_9, vec4(tmpvar_3)); + tmpvar_1.w = tmpvar_7.w; + tmpvar_2.w = tmpvar_10.w; + tmpvar_1.xyz = (tmpvar_7.xyz * _Scale.xyz); + vec4 pos_11; + pos_11.w = tmpvar_1.w; + vec3 bend_12; + float tmpvar_13; + tmpvar_13 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_14; + tmpvar_14.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_13))); + tmpvar_14.y = tmpvar_13; + vec4 tmpvar_15; + tmpvar_15 = abs(((fract((((fract(((_Time.yy + tmpvar_14).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_16; + tmpvar_16 = ((tmpvar_15 * tmpvar_15) * (3.0 - (2.0 * tmpvar_15))); + vec2 tmpvar_17; + tmpvar_17 = (tmpvar_16.xz + tmpvar_16.yw); + bend_12.xz = ((gl_Color.y * 0.1) * tmpvar_8).xz; + bend_12.y = (gl_MultiTexCoord1.y * 0.3); + pos_11.xyz = (tmpvar_1.xyz + (((tmpvar_17.xyx * bend_12) + ((_Wind.xyz * tmpvar_17.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_11.xyz = (pos_11.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_18; + tmpvar_18 = mix ((pos_11.xyz - ((dot (_SquashPlaneNormal.xyz, pos_11.xyz) + _SquashPlaneNormal.w) * _SquashPlaneNormal.xyz)), pos_11.xyz, vec3(_SquashAmount)); + vec4 tmpvar_19; + tmpvar_19.w = 1.0; + tmpvar_19.xyz = tmpvar_18; + tmpvar_1 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.xyz = vec3(1.0, 1.0, 1.0); + tmpvar_20.w = gl_Color.w; + vec3 tmpvar_21; + tmpvar_21 = normalize(tmpvar_8); + tmpvar_2.xyz = normalize(tmpvar_10.xyz); + vec3 tmpvar_22; + tmpvar_22 = (((tmpvar_21.yzx * tmpvar_2.zxy) - (tmpvar_21.zxy * tmpvar_2.yzx)) * tmpvar_10.w); + mat3 tmpvar_23; + tmpvar_23[0].x = tmpvar_2.x; + tmpvar_23[0].y = tmpvar_22.x; + tmpvar_23[0].z = tmpvar_21.x; + tmpvar_23[1].x = tmpvar_2.y; + tmpvar_23[1].y = tmpvar_22.y; + tmpvar_23[1].z = tmpvar_21.y; + tmpvar_23[2].x = tmpvar_2.z; + tmpvar_23[2].y = tmpvar_22.z; + tmpvar_23[2].z = tmpvar_21.z; + vec4 tmpvar_24; + tmpvar_24.w = 1.0; + tmpvar_24.xyz = _WorldSpaceCameraPos; + gl_Position = (glstate_matrix_mvp * tmpvar_19); + xlv_TEXCOORD0 = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + xlv_COLOR0 = tmpvar_20; + xlv_TEXCOORD1 = (tmpvar_23 * (_World2Object * _WorldSpaceLightPos0).xyz); + xlv_TEXCOORD2 = (tmpvar_23 * (((_World2Object * tmpvar_24).xyz * unity_Scale.w) - tmpvar_18)); + xlv_TEXCOORD3 = (_LightMatrix0 * (_Object2World * tmpvar_19)).xy; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES.txt b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES.txt new file mode 100644 index 000000000..0e21e3756 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES.txt @@ -0,0 +1,109 @@ +varying highp vec2 xlv_TEXCOORD3; +varying highp vec3 xlv_TEXCOORD2; +varying highp vec3 xlv_TEXCOORD1; +varying highp vec4 xlv_COLOR0; +varying highp vec2 xlv_TEXCOORD0; +attribute vec4 TANGENT; +uniform highp vec4 unity_Scale; +uniform highp mat4 glstate_matrix_mvp; +uniform highp mat4 glstate_matrix_invtrans_modelview0; +uniform highp vec4 _WorldSpaceLightPos0; +uniform highp vec3 _WorldSpaceCameraPos; +uniform highp mat4 _World2Object; +uniform highp vec4 _Wind; +uniform highp vec4 _Time; +uniform highp vec4 _SquashPlaneNormal; +uniform highp float _SquashAmount; +uniform highp vec4 _Scale; +uniform highp mat4 _Object2World; +uniform highp vec4 _MainTex_ST; +uniform highp mat4 _LightMatrix0; +attribute lowp vec4 _glesColor; +attribute highp vec4 _glesMultiTexCoord1; +attribute highp vec4 _glesMultiTexCoord0; +attribute mediump vec3 _glesNormal; +attribute highp vec4 _glesVertex; +void main () +{ + highp vec3 tmpvar_1; + tmpvar_1 = _glesNormal; + highp vec4 tmpvar_2; + tmpvar_2 = _glesColor; + highp vec4 tmpvar_3; + highp vec4 tmpvar_4; + highp float tmpvar_5; + tmpvar_5 = (1.0 - abs(TANGENT.w)); + highp vec4 tmpvar_6; + tmpvar_6.w = 0.0; + tmpvar_6.xyz = tmpvar_1; + highp vec4 tmpvar_7; + tmpvar_7.w = 0.0; + tmpvar_7.xyz = TANGENT.xyz; + highp vec4 tmpvar_8; + tmpvar_8.zw = vec2(0.0, 0.0); + tmpvar_8.xy = tmpvar_1.xy; + highp vec4 tmpvar_9; + tmpvar_9 = (_glesVertex + ((tmpvar_8 * glstate_matrix_invtrans_modelview0) * tmpvar_5)); + highp vec3 tmpvar_10; + tmpvar_10 = mix (tmpvar_1, normalize((tmpvar_6 * glstate_matrix_invtrans_modelview0)).xyz, vec3(tmpvar_5)); + highp vec4 tmpvar_11; + tmpvar_11.w = -1.0; + tmpvar_11.xyz = normalize((tmpvar_7 * glstate_matrix_invtrans_modelview0)).xyz; + highp vec4 tmpvar_12; + tmpvar_12 = mix (TANGENT, tmpvar_11, vec4(tmpvar_5)); + tmpvar_3.w = tmpvar_9.w; + tmpvar_4.w = tmpvar_12.w; + tmpvar_3.xyz = (tmpvar_9.xyz * _Scale.xyz); + highp vec4 pos_13; + pos_13.w = tmpvar_3.w; + highp vec3 bend_14; + highp float tmpvar_15; + tmpvar_15 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + tmpvar_2.x); + highp vec2 tmpvar_16; + tmpvar_16.x = dot (tmpvar_3.xyz, vec3((tmpvar_2.y + tmpvar_15))); + tmpvar_16.y = tmpvar_15; + highp vec4 tmpvar_17; + tmpvar_17 = abs(((fract((((fract(((_Time.yy + tmpvar_16).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + highp vec4 tmpvar_18; + tmpvar_18 = ((tmpvar_17 * tmpvar_17) * (3.0 - (2.0 * tmpvar_17))); + highp vec2 tmpvar_19; + tmpvar_19 = (tmpvar_18.xz + tmpvar_18.yw); + bend_14.xz = ((tmpvar_2.y * 0.1) * tmpvar_10).xz; + bend_14.y = (_glesMultiTexCoord1.y * 0.3); + pos_13.xyz = (tmpvar_3.xyz + (((tmpvar_19.xyx * bend_14) + ((_Wind.xyz * tmpvar_19.y) * _glesMultiTexCoord1.y)) * _Wind.w)); + pos_13.xyz = (pos_13.xyz + (_glesMultiTexCoord1.x * _Wind.xyz)); + highp vec3 tmpvar_20; + tmpvar_20 = mix ((pos_13.xyz - ((dot (_SquashPlaneNormal.xyz, pos_13.xyz) + _SquashPlaneNormal.w) * _SquashPlaneNormal.xyz)), pos_13.xyz, vec3(_SquashAmount)); + highp vec4 tmpvar_21; + tmpvar_21.w = 1.0; + tmpvar_21.xyz = tmpvar_20; + tmpvar_3 = tmpvar_21; + highp vec4 tmpvar_22; + tmpvar_22.xyz = vec3(1.0, 1.0, 1.0); + tmpvar_22.w = tmpvar_2.w; + highp vec3 tmpvar_23; + tmpvar_23 = normalize(tmpvar_10); + tmpvar_4.xyz = normalize(tmpvar_12.xyz); + highp vec3 tmpvar_24; + tmpvar_24 = (((tmpvar_23.yzx * tmpvar_4.zxy) - (tmpvar_23.zxy * tmpvar_4.yzx)) * tmpvar_12.w); + highp mat3 tmpvar_25; + tmpvar_25[0].x = tmpvar_4.x; + tmpvar_25[0].y = tmpvar_24.x; + tmpvar_25[0].z = tmpvar_23.x; + tmpvar_25[1].x = tmpvar_4.y; + tmpvar_25[1].y = tmpvar_24.y; + tmpvar_25[1].z = tmpvar_23.y; + tmpvar_25[2].x = tmpvar_4.z; + tmpvar_25[2].y = tmpvar_24.z; + tmpvar_25[2].z = tmpvar_23.z; + highp vec4 tmpvar_26; + tmpvar_26.w = 1.0; + tmpvar_26.xyz = _WorldSpaceCameraPos; + gl_Position = (glstate_matrix_mvp * tmpvar_21); + xlv_TEXCOORD0 = ((_glesMultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + xlv_COLOR0 = tmpvar_22; + xlv_TEXCOORD1 = (tmpvar_25 * (_World2Object * _WorldSpaceLightPos0).xyz); + xlv_TEXCOORD2 = (tmpvar_25 * (((_World2Object * tmpvar_26).xyz * unity_Scale.w) - tmpvar_20)); + xlv_TEXCOORD3 = (_LightMatrix0 * (_Object2World * tmpvar_21)).xy; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..179c8cc48 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-ir.txt @@ -0,0 +1,177 @@ +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + vec4 tmpvar_13; + tmpvar_13 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_12.pos = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0 = tmpvar_14.xy.xy; + vec3 tmpvar_15; + tmpvar_15 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_9.tangent.w); + binormal_11 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_9.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_11.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_11.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_11.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_9.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_10 = (tmpvar_27); + mat3 tmpvar_28; + tmpvar_28 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_29; + tmpvar_29 = (rotation_10 * tmpvar_28[0].xyz); + o_12.TtoV0 = tmpvar_29; + mat3 tmpvar_30; + tmpvar_30 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_31; + tmpvar_31 = (rotation_10 * tmpvar_30[1].xyz); + o_12.TtoV1 = tmpvar_31; + mat3 tmpvar_32; + tmpvar_32 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_33; + tmpvar_33 = (rotation_10 * tmpvar_32[2].xyz); + o_12.TtoV2 = tmpvar_33; + return o_12; +} + +void main () +{ + appdata_full xlt_v_34; + v2f_surf xl_retval_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Vertex.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_34.vertex = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = TANGENT.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_34.tangent = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = gl_Normal.xyz; + vec3 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_34.normal = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_34.texcoord = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_v_34.texcoord1 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = gl_Color.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_v_34.color = tmpvar_47; + v2f_surf tmpvar_48; + tmpvar_48 = vert_surf (xlt_v_34); + v2f_surf tmpvar_49; + tmpvar_49 = tmpvar_48; + xl_retval_35 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = xl_retval_35.pos.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_Position = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.zw = vec2(0.0, 0.0); + tmpvar_52.xy = xl_retval_35.hip_pack0.xy; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[0] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54.w = 0.0; + tmpvar_54.xyz = xl_retval_35.TtoV0.xyz; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[1] = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56.w = 0.0; + tmpvar_56.xyz = xl_retval_35.TtoV1.xyz; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_TexCoord[2] = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58.w = 0.0; + tmpvar_58.xyz = xl_retval_35.TtoV2.xyz; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_TexCoord[3] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-out.txt new file mode 100644 index 000000000..2d9c18872 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse-out.txt @@ -0,0 +1,35 @@ +attribute vec4 TANGENT; +uniform vec4 _BumpMap_ST; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_2; + tmpvar_2[0].x = TANGENT.x; + tmpvar_2[0].y = tmpvar_1.x; + tmpvar_2[0].z = gl_Normal.x; + tmpvar_2[1].x = TANGENT.y; + tmpvar_2[1].y = tmpvar_1.y; + tmpvar_2[1].z = gl_Normal.y; + tmpvar_2[2].x = TANGENT.z; + tmpvar_2[2].y = tmpvar_1.z; + tmpvar_2[2].z = gl_Normal.z; + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_3; + tmpvar_3.zw = vec2(0.0, 0.0); + tmpvar_3.xy = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + gl_TexCoord[0] = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = (tmpvar_2 * gl_ModelViewMatrixInverseTranspose[0].xyz); + gl_TexCoord[1] = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = (tmpvar_2 * gl_ModelViewMatrixInverseTranspose[1].xyz); + gl_TexCoord[2] = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 0.0; + tmpvar_6.xyz = (tmpvar_2 * gl_ModelViewMatrixInverseTranspose[2].xyz); + gl_TexCoord[3] = tmpvar_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..a13d7f753 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-ir.txt @@ -0,0 +1,132 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + return o_13; +} + +void main () +{ + appdata_full xlt_v_17; + v2f_surf xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = gl_Vertex.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_17.vertex = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = TANGENT.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_17.tangent = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_Normal.xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_17.normal = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_17.texcoord = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_17.texcoord1 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_Color.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_17.color = tmpvar_30; + v2f_surf tmpvar_31; + tmpvar_31 = vert_surf (xlt_v_17); + v2f_surf tmpvar_32; + tmpvar_32 = tmpvar_31; + xl_retval_18 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = xl_retval_18.pos.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_Position = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_35.x = xl_retval_18.fog; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlv_FOG = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.zw = vec2(0.0, 0.0); + tmpvar_37.xy = xl_retval_18.hip_pack0.xy; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + gl_TexCoord[0] = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_18.hip_screen.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[1] = tmpvar_40; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-out.txt new file mode 100644 index 000000000..6e8b0331f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Diffuse1-out.txt @@ -0,0 +1,27 @@ +varying vec4 xlv_FOG; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_5; + tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_5.x = tmpvar_1.z; + xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_6; + gl_TexCoord[1] = o_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-ir.txt new file mode 100644 index 000000000..c13bd778e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-ir.txt @@ -0,0 +1,439 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 vlight; + vec4 _ShadowCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 ShadeSH9 ( + in vec4 normal_9 +) +{ + vec3 x3_10; + float vC_11; + vec3 x2_12; + vec4 vB_13; + vec3 x1_14; + float tmpvar_15; + tmpvar_15 = dot (unity_SHAr, normal_9); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + x1_14.x = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (unity_SHAg, normal_9); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + x1_14.y = vec2(tmpvar_18).y; + float tmpvar_19; + tmpvar_19 = dot (unity_SHAb, normal_9); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + x1_14.z = vec3(tmpvar_20).z; + vec4 tmpvar_21; + tmpvar_21 = (normal_9.xyzz * normal_9.yzzx); + vB_13 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (unity_SHBr, vB_13); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + x2_12.x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (unity_SHBg, vB_13); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + x2_12.y = vec2(tmpvar_25).y; + float tmpvar_26; + tmpvar_26 = dot (unity_SHBb, vB_13); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + x2_12.z = vec3(tmpvar_27).z; + float tmpvar_28; + tmpvar_28 = ((normal_9.x * normal_9.x) - (normal_9.y * normal_9.y)); + vC_11 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (unity_SHC.xyz * vC_11); + x3_10 = tmpvar_29; + return ((x1_14 + x2_12) + x3_10); +} + +vec3 Shade4PointLights ( + in vec4 lightPosX_30, + in vec4 lightPosY_31, + in vec4 lightPosZ_32, + in vec3 lightColor0_33, + in vec3 lightColor1_34, + in vec3 lightColor2_35, + in vec3 lightColor3_36, + in vec4 lightAttenSq_37, + in vec3 pos_38, + in vec3 normal_39 +) +{ + vec3 col_40; + vec4 diff_41; + vec4 atten_42; + vec4 corr_43; + vec4 ndotl_44; + vec4 lengthSq_45; + vec4 toLightZ_46; + vec4 toLightY_47; + vec4 toLightX_48; + vec4 tmpvar_49; + tmpvar_49 = (lightPosX_30 - pos_38.x); + toLightX_48 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = (lightPosY_31 - pos_38.y); + toLightY_47 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = (lightPosZ_32 - pos_38.z); + toLightZ_46 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = vec4(0.0, 0.0, 0.0, 0.0); + lengthSq_45 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = (lengthSq_45 + (toLightX_48 * toLightX_48)); + lengthSq_45 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = (lengthSq_45 + (toLightY_47 * toLightY_47)); + lengthSq_45 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = (lengthSq_45 + (toLightZ_46 * toLightZ_46)); + lengthSq_45 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = vec4(0.0, 0.0, 0.0, 0.0); + ndotl_44 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = (ndotl_44 + (toLightX_48 * normal_39.x)); + ndotl_44 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = (ndotl_44 + (toLightY_47 * normal_39.y)); + ndotl_44 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = (ndotl_44 + (toLightZ_46 * normal_39.z)); + ndotl_44 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = inversesqrt (lengthSq_45); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + corr_43 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl_44 * corr_43)); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + ndotl_44 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = (1.0 / (1.0 + (lengthSq_45 * lightAttenSq_37))); + atten_42 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = (ndotl_44 * atten_42); + diff_41 = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = vec3(0.0, 0.0, 0.0); + col_40 = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = (col_40 + (lightColor0_33 * diff_41.x)); + col_40 = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = (col_40 + (lightColor1_34 * diff_41.y)); + col_40 = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = (col_40 + (lightColor2_35 * diff_41.z)); + col_40 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = (col_40 + (lightColor3_36 * diff_41.w)); + col_40 = tmpvar_70; + return col_40; +} + +void PositionFog ( + in vec4 v_71, + out vec4 pos_72, + out float fog_73 +) +{ + vec4 tmpvar_74; + tmpvar_74 = (gl_ModelViewProjectionMatrix * v_71); + pos_72 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = pos_72.z; + fog_73 = tmpvar_75; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_76 +) +{ + vec3 objSpaceCameraPos_77; + vec4 tmpvar_78; + tmpvar_78.w = 1.0; + tmpvar_78.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_79; + tmpvar_79 = ((_World2Object * tmpvar_78).xyz * unity_Scale.w); + objSpaceCameraPos_77 = tmpvar_79; + return (objSpaceCameraPos_77 - v_76.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_80 +) +{ + vec3 objSpaceLightPos_81; + vec3 tmpvar_82; + tmpvar_82 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_81 = tmpvar_82; + return objSpaceLightPos_81.xyz; +} + +vec4 ComputeScreenPos ( + in vec4 pos_83 +) +{ + vec4 o_84; + vec4 tmpvar_85; + tmpvar_85 = (pos_83 * 0.5); + o_84 = tmpvar_85; + vec2 tmpvar_86; + tmpvar_86.x = o_84.x; + tmpvar_86.y = (o_84.y * _ProjectionParams.x); + vec2 tmpvar_87; + tmpvar_87 = (tmpvar_86 + o_84.w); + o_84.xy = tmpvar_87.xy.xy; + vec2 tmpvar_88; + tmpvar_88 = pos_83.zw; + o_84.zw = tmpvar_88.xxxy.zw; + return o_84; +} + +v2f_surf vert_surf ( + in appdata_full v_89 +) +{ + vec3 worldPos_90; + vec3 shlight_91; + mat3 rotation_92; + vec3 binormal_93; + vec3 worldN_94; + v2f_surf o_95; + PositionFog (v_89.vertex, o_95.pos, o_95.fog); + vec2 tmpvar_96; + tmpvar_96 = ((v_89.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_95.hip_pack0.xy = tmpvar_96.xy.xy; + vec2 tmpvar_97; + tmpvar_97 = ((v_89.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_95.hip_pack0.zw = tmpvar_97.xxxy.zw; + mat3 tmpvar_98; + tmpvar_98 = xll_constructMat3 (_Object2World); + vec3 tmpvar_99; + tmpvar_99 = (tmpvar_98 * (v_89.normal * unity_Scale.w)); + worldN_94 = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = cross (v_89.normal, v_89.tangent.xyz); + vec3 tmpvar_101; + tmpvar_101 = (tmpvar_100 * v_89.tangent.w); + binormal_93 = tmpvar_101; + mat3 tmpvar_102; + float tmpvar_103; + tmpvar_103 = v_89.tangent.x; + tmpvar_102[0].x = tmpvar_103; + float tmpvar_104; + tmpvar_104 = binormal_93.x; + tmpvar_102[0].y = tmpvar_104; + float tmpvar_105; + tmpvar_105 = v_89.normal.x; + tmpvar_102[0].z = tmpvar_105; + float tmpvar_106; + tmpvar_106 = v_89.tangent.y; + tmpvar_102[1].x = tmpvar_106; + float tmpvar_107; + tmpvar_107 = binormal_93.y; + tmpvar_102[1].y = tmpvar_107; + float tmpvar_108; + tmpvar_108 = v_89.normal.y; + tmpvar_102[1].z = tmpvar_108; + float tmpvar_109; + tmpvar_109 = v_89.tangent.z; + tmpvar_102[2].x = tmpvar_109; + float tmpvar_110; + tmpvar_110 = binormal_93.z; + tmpvar_102[2].y = tmpvar_110; + float tmpvar_111; + tmpvar_111 = v_89.normal.z; + tmpvar_102[2].z = tmpvar_111; + mat3 tmpvar_112; + tmpvar_112 = (tmpvar_102); + rotation_92 = (tmpvar_112); + vec3 tmpvar_113; + tmpvar_113 = ObjSpaceLightDir (v_89.vertex); + vec3 tmpvar_114; + tmpvar_114 = (rotation_92 * tmpvar_113); + o_95.lightDir = tmpvar_114; + vec3 tmpvar_115; + tmpvar_115 = ObjSpaceViewDir (v_89.vertex); + vec3 tmpvar_116; + tmpvar_116 = (rotation_92 * tmpvar_115); + o_95.viewDir = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117.w = 1.0; + tmpvar_117.xyz = worldN_94.xyz; + vec3 tmpvar_118; + tmpvar_118 = ShadeSH9 (tmpvar_117); + vec3 tmpvar_119; + tmpvar_119 = tmpvar_118; + shlight_91 = tmpvar_119; + vec3 tmpvar_120; + tmpvar_120 = shlight_91; + o_95.vlight = tmpvar_120; + vec3 tmpvar_121; + tmpvar_121 = (_Object2World * v_89.vertex).xyz; + worldPos_90 = tmpvar_121; + vec3 tmpvar_122; + tmpvar_122 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos_90, worldN_94); + vec3 tmpvar_123; + tmpvar_123 = (o_95.vlight + tmpvar_122); + o_95.vlight = tmpvar_123; + vec4 tmpvar_124; + tmpvar_124 = ComputeScreenPos (o_95.pos); + vec4 tmpvar_125; + tmpvar_125 = tmpvar_124; + o_95._ShadowCoord = tmpvar_125; + return o_95; +} + +void main () +{ + appdata_full xlt_v_126; + v2f_surf xl_retval_127; + vec4 tmpvar_128; + tmpvar_128 = gl_Vertex.xyzw; + vec4 tmpvar_129; + tmpvar_129 = tmpvar_128; + xlt_v_126.vertex = tmpvar_129; + vec4 tmpvar_130; + tmpvar_130 = TANGENT.xyzw; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + xlt_v_126.tangent = tmpvar_131; + vec3 tmpvar_132; + tmpvar_132 = gl_Normal.xyz; + vec3 tmpvar_133; + tmpvar_133 = tmpvar_132; + xlt_v_126.normal = tmpvar_133; + vec4 tmpvar_134; + tmpvar_134 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_135; + tmpvar_135 = tmpvar_134; + xlt_v_126.texcoord = tmpvar_135; + vec4 tmpvar_136; + tmpvar_136 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_137; + tmpvar_137 = tmpvar_136; + xlt_v_126.texcoord1 = tmpvar_137; + vec4 tmpvar_138; + tmpvar_138 = gl_Color.xyzw; + vec4 tmpvar_139; + tmpvar_139 = tmpvar_138; + xlt_v_126.color = tmpvar_139; + v2f_surf tmpvar_140; + tmpvar_140 = vert_surf (xlt_v_126); + v2f_surf tmpvar_141; + tmpvar_141 = tmpvar_140; + xl_retval_127 = tmpvar_141; + vec4 tmpvar_142; + tmpvar_142 = xl_retval_127.pos.xyzw; + vec4 tmpvar_143; + tmpvar_143 = tmpvar_142; + gl_Position = tmpvar_143; + vec4 tmpvar_144; + tmpvar_144.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_144.x = xl_retval_127.fog; + vec4 tmpvar_145; + tmpvar_145 = tmpvar_144; + xlv_FOG = tmpvar_145; + vec4 tmpvar_146; + tmpvar_146 = xl_retval_127.hip_pack0.xyzw; + vec4 tmpvar_147; + tmpvar_147 = tmpvar_146; + gl_TexCoord[0] = tmpvar_147; + vec4 tmpvar_148; + tmpvar_148.w = 0.0; + tmpvar_148.xyz = xl_retval_127.viewDir.xyz; + vec4 tmpvar_149; + tmpvar_149 = tmpvar_148; + gl_TexCoord[1] = tmpvar_149; + vec4 tmpvar_150; + tmpvar_150.w = 0.0; + tmpvar_150.xyz = xl_retval_127.lightDir.xyz; + vec4 tmpvar_151; + tmpvar_151 = tmpvar_150; + gl_TexCoord[2] = tmpvar_151; + vec4 tmpvar_152; + tmpvar_152.w = 0.0; + tmpvar_152.xyz = xl_retval_127.vlight.xyz; + vec4 tmpvar_153; + tmpvar_153 = tmpvar_152; + gl_TexCoord[3] = tmpvar_153; + vec4 tmpvar_154; + tmpvar_154 = xl_retval_127._ShadowCoord.xyzw; + vec4 tmpvar_155; + tmpvar_155 = tmpvar_154; + gl_TexCoord[4] = tmpvar_155; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-out.txt new file mode 100644 index 000000000..535fdb22c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular-out.txt @@ -0,0 +1,107 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + mat3 tmpvar_3; + tmpvar_3[0] = _Object2World[0].xyz; + tmpvar_3[1] = _Object2World[1].xyz; + tmpvar_3[2] = _Object2World[2].xyz; + vec3 tmpvar_4; + tmpvar_4 = (tmpvar_3 * (gl_Normal * unity_Scale.w)); + vec3 tmpvar_5; + tmpvar_5 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_6; + tmpvar_6[0].x = TANGENT.x; + tmpvar_6[0].y = tmpvar_5.x; + tmpvar_6[0].z = gl_Normal.x; + tmpvar_6[1].x = TANGENT.y; + tmpvar_6[1].y = tmpvar_5.y; + tmpvar_6[1].z = gl_Normal.y; + tmpvar_6[2].x = TANGENT.z; + tmpvar_6[2].y = tmpvar_5.z; + tmpvar_6[2].z = gl_Normal.z; + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = _WorldSpaceCameraPos; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = tmpvar_4; + vec3 x2_9; + vec3 x1_10; + x1_10.x = dot (unity_SHAr, tmpvar_8); + x1_10.y = dot (unity_SHAg, tmpvar_8); + x1_10.z = dot (unity_SHAb, tmpvar_8); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_4.xyzz * tmpvar_4.yzzx); + x2_9.x = dot (unity_SHBr, tmpvar_11); + x2_9.y = dot (unity_SHBg, tmpvar_11); + x2_9.z = dot (unity_SHBb, tmpvar_11); + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * gl_Vertex).xyz; + vec4 tmpvar_13; + tmpvar_13 = (unity_4LightPosX0 - tmpvar_12.x); + vec4 tmpvar_14; + tmpvar_14 = (unity_4LightPosY0 - tmpvar_12.y); + vec4 tmpvar_15; + tmpvar_15 = (unity_4LightPosZ0 - tmpvar_12.z); + vec4 tmpvar_16; + tmpvar_16 = (((tmpvar_13 * tmpvar_13) + (tmpvar_14 * tmpvar_14)) + (tmpvar_15 * tmpvar_15)); + vec4 tmpvar_17; + tmpvar_17 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_13 * tmpvar_4.x) + (tmpvar_14 * tmpvar_4.y)) + (tmpvar_15 * tmpvar_4.z)) * inversesqrt(tmpvar_16))) * (1.0/((1.0 + (tmpvar_16 * unity_4LightAtten0))))); + vec4 o_18; + vec4 tmpvar_19; + tmpvar_19 = (tmpvar_2 * 0.5); + vec2 tmpvar_20; + tmpvar_20.x = tmpvar_19.x; + tmpvar_20.y = (tmpvar_19.y * _ProjectionParams.x); + o_18.xy = (tmpvar_20 + tmpvar_19.w); + o_18.zw = tmpvar_2.zw; + gl_Position = tmpvar_2; + vec4 tmpvar_21; + tmpvar_21.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_21.x = tmpvar_2.z; + xlv_FOG = tmpvar_21; + gl_TexCoord[0] = tmpvar_1; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); + gl_TexCoord[1] = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23.w = 0.0; + tmpvar_23.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); + gl_TexCoord[2] = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24.w = 0.0; + tmpvar_24.xyz = (((x1_10 + x2_9) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))) + ((((unity_LightColor0 * tmpvar_17.x) + (unity_LightColor1 * tmpvar_17.y)) + (unity_LightColor2 * tmpvar_17.z)) + (unity_LightColor3 * tmpvar_17.w))); + gl_TexCoord[3] = tmpvar_24; + gl_TexCoord[4] = o_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Bumped_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-ir.txt new file mode 100644 index 000000000..38e2b72f4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-ir.txt @@ -0,0 +1,147 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = ((v_12.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_13.hip_lmapFade.xy = tmpvar_17.xy.xy; + float tmpvar_18; + tmpvar_18 = ((-((gl_ModelViewMatrix * v_12.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_13.hip_lmapFade.z = vec3(tmpvar_18).z; + return o_13; +} + +void main () +{ + appdata_full xlt_v_19; + v2f_surf xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = gl_Vertex.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_19.vertex = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = TANGENT.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_19.tangent = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = gl_Normal.xyz; + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_19.normal = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_19.texcoord = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_19.texcoord1 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = gl_Color.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_19.color = tmpvar_32; + v2f_surf tmpvar_33; + tmpvar_33 = vert_surf (xlt_v_19); + v2f_surf tmpvar_34; + tmpvar_34 = tmpvar_33; + xl_retval_20 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = xl_retval_20.pos.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + gl_Position = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_37.x = xl_retval_20.fog; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlv_FOG = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39.zw = vec2(0.0, 0.0); + tmpvar_39.xy = xl_retval_20.hip_pack0.xy; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[0] = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_20.hip_screen.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_TexCoord[1] = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.w = 0.0; + tmpvar_43.xyz = xl_retval_20.hip_lmapFade.xyz; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_TexCoord[2] = tmpvar_44; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-out.txt new file mode 100644 index 000000000..5dedb6f9a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Bumped_Specular2-out.txt @@ -0,0 +1,36 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec3 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; + tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + gl_Position = tmpvar_2; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_7; + gl_TexCoord[1] = o_3; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = tmpvar_1; + gl_TexCoord[2] = tmpvar_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Decal-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Decal-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Decal-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Decal-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Decal-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Decal-ir.txt new file mode 100644 index 000000000..052450fa9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Decal-ir.txt @@ -0,0 +1,164 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _DecalTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0.xy = tmpvar_19.xy.xy; + vec2 tmpvar_20; + tmpvar_20 = ((v_17.texcoord.xy * _DecalTex_ST.xy) + _DecalTex_ST.zw); + o_18.hip_pack0.zw = tmpvar_20.xxxy.zw; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_18.lightDir = tmpvar_24; + return o_18; +} + +void main () +{ + appdata_full xlt_v_25; + v2f_surf xl_retval_26; + vec4 tmpvar_27; + tmpvar_27 = gl_Vertex.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_25.vertex = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = TANGENT.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_25.tangent = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = gl_Normal.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_25.normal = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_25.texcoord = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_25.texcoord1 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Color.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_25.color = tmpvar_38; + v2f_surf tmpvar_39; + tmpvar_39 = vert_surf (xlt_v_25); + v2f_surf tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_26 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_26.pos.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_Position = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_43.x = xl_retval_26.fog; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlv_FOG = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_26.hip_pack0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[0] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 0.0; + tmpvar_47.xyz = xl_retval_26.normal.xyz; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[1] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_26.lightDir.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[2] = tmpvar_50; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Decal-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Decal-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Decal-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Decal-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-ir.txt new file mode 100644 index 000000000..9b5fc8839 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-ir.txt @@ -0,0 +1,172 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + mat3 tmpvar_20; + tmpvar_20 = xll_constructMat3 (_Object2World); + vec3 tmpvar_21; + tmpvar_21 = (tmpvar_20 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_18.lightDir = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = (_LightMatrix0 * (_Object2World * v_17.vertex)).xyz; + o_18._LightCoord = tmpvar_24; + return o_18; +} + +void main () +{ + appdata_full xlt_v_25; + v2f_surf xl_retval_26; + vec4 tmpvar_27; + tmpvar_27 = gl_Vertex.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_25.vertex = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = TANGENT.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_25.tangent = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = gl_Normal.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_25.normal = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_25.texcoord = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_25.texcoord1 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Color.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_25.color = tmpvar_38; + v2f_surf tmpvar_39; + tmpvar_39 = vert_surf (xlt_v_25); + v2f_surf tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_26 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_26.pos.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_Position = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_43.x = xl_retval_26.fog; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlv_FOG = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.zw = vec2(0.0, 0.0); + tmpvar_45.xy = xl_retval_26.hip_pack0.xy; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[0] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 0.0; + tmpvar_47.xyz = xl_retval_26.normal.xyz; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[1] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_26.lightDir.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[2] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_26._LightCoord.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[3] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-ir.txt new file mode 100644 index 000000000..38e2b72f4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-ir.txt @@ -0,0 +1,147 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = ((v_12.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_13.hip_lmapFade.xy = tmpvar_17.xy.xy; + float tmpvar_18; + tmpvar_18 = ((-((gl_ModelViewMatrix * v_12.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_13.hip_lmapFade.z = vec3(tmpvar_18).z; + return o_13; +} + +void main () +{ + appdata_full xlt_v_19; + v2f_surf xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = gl_Vertex.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_19.vertex = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = TANGENT.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_19.tangent = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = gl_Normal.xyz; + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_19.normal = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_19.texcoord = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_19.texcoord1 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = gl_Color.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_19.color = tmpvar_32; + v2f_surf tmpvar_33; + tmpvar_33 = vert_surf (xlt_v_19); + v2f_surf tmpvar_34; + tmpvar_34 = tmpvar_33; + xl_retval_20 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = xl_retval_20.pos.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + gl_Position = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_37.x = xl_retval_20.fog; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlv_FOG = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39.zw = vec2(0.0, 0.0); + tmpvar_39.xy = xl_retval_20.hip_pack0.xy; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[0] = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_20.hip_screen.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_TexCoord[1] = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.w = 0.0; + tmpvar_43.xyz = xl_retval_20.hip_lmapFade.xyz; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_TexCoord[2] = tmpvar_44; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-out.txt new file mode 100644 index 000000000..5dedb6f9a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse2-out.txt @@ -0,0 +1,36 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec3 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; + tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + gl_Position = tmpvar_2; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_7; + gl_TexCoord[1] = o_3; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = tmpvar_1; + gl_TexCoord[2] = tmpvar_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Diffuse_Alpha_Shadowed_ZWrite-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt new file mode 100644 index 000000000..517731a1e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-ir.txt @@ -0,0 +1,218 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 vlight; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 ShadeSH9 ( + in vec4 normal_9 +) +{ + vec3 x3_10; + float vC_11; + vec3 x2_12; + vec4 vB_13; + vec3 x1_14; + float tmpvar_15; + tmpvar_15 = dot (unity_SHAr, normal_9); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + x1_14.x = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (unity_SHAg, normal_9); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + x1_14.y = vec2(tmpvar_18).y; + float tmpvar_19; + tmpvar_19 = dot (unity_SHAb, normal_9); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + x1_14.z = vec3(tmpvar_20).z; + vec4 tmpvar_21; + tmpvar_21 = (normal_9.xyzz * normal_9.yzzx); + vB_13 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (unity_SHBr, vB_13); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + x2_12.x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (unity_SHBg, vB_13); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + x2_12.y = vec2(tmpvar_25).y; + float tmpvar_26; + tmpvar_26 = dot (unity_SHBb, vB_13); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + x2_12.z = vec3(tmpvar_27).z; + float tmpvar_28; + tmpvar_28 = ((normal_9.x * normal_9.x) - (normal_9.y * normal_9.y)); + vC_11 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (unity_SHC.xyz * vC_11); + x3_10 = tmpvar_29; + return ((x1_14 + x2_12) + x3_10); +} + +void PositionFog ( + in vec4 v_30, + out vec4 pos_31, + out float fog_32 +) +{ + vec4 tmpvar_33; + tmpvar_33 = (gl_ModelViewProjectionMatrix * v_30); + pos_31 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = pos_31.z; + fog_32 = tmpvar_34; +} + +v2f_surf vert_surf ( + in appdata_full v_35 +) +{ + vec3 shlight_36; + vec3 worldN_37; + v2f_surf o_38; + PositionFog (v_35.vertex, o_38.pos, o_38.fog); + vec2 tmpvar_39; + tmpvar_39 = ((v_35.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_38.hip_pack0 = tmpvar_39.xy.xy; + mat3 tmpvar_40; + tmpvar_40 = xll_constructMat3 (_Object2World); + vec3 tmpvar_41; + tmpvar_41 = (tmpvar_40 * (v_35.normal * unity_Scale.w)); + worldN_37 = tmpvar_41; + vec3 tmpvar_42; + tmpvar_42 = worldN_37; + o_38.normal = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.w = 1.0; + tmpvar_43.xyz = worldN_37.xyz; + vec3 tmpvar_44; + tmpvar_44 = ShadeSH9 (tmpvar_43); + vec3 tmpvar_45; + tmpvar_45 = tmpvar_44; + shlight_36 = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = shlight_36; + o_38.vlight = tmpvar_46; + return o_38; +} + +void main () +{ + appdata_full xlt_v_47; + v2f_surf xl_retval_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Vertex.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_47.vertex = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = TANGENT.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_47.tangent = tmpvar_52; + vec3 tmpvar_53; + tmpvar_53 = gl_Normal.xyz; + vec3 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_v_47.normal = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_v_47.texcoord = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_v_47.texcoord1 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = gl_Color.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xlt_v_47.color = tmpvar_60; + v2f_surf tmpvar_61; + tmpvar_61 = vert_surf (xlt_v_47); + v2f_surf tmpvar_62; + tmpvar_62 = tmpvar_61; + xl_retval_48 = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = xl_retval_48.pos.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_Position = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_65.x = xl_retval_48.fog; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlv_FOG = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.zw = vec2(0.0, 0.0); + tmpvar_67.xy = xl_retval_48.hip_pack0.xy; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + gl_TexCoord[0] = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69.w = 0.0; + tmpvar_69.xyz = xl_retval_48.normal.xyz; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + gl_TexCoord[1] = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71.w = 0.0; + tmpvar_71.xyz = xl_retval_48.vlight.xyz; + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + gl_TexCoord[2] = tmpvar_72; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt new file mode 100644 index 000000000..bddcaa43d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Diffuse_Alpha_Shadowed_ZWrite-out.txt @@ -0,0 +1,53 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + mat3 tmpvar_2; + tmpvar_2[0] = _Object2World[0].xyz; + tmpvar_2[1] = _Object2World[1].xyz; + tmpvar_2[2] = _Object2World[2].xyz; + vec3 tmpvar_3; + tmpvar_3 = (tmpvar_2 * (gl_Normal * unity_Scale.w)); + vec4 tmpvar_4; + tmpvar_4.w = 1.0; + tmpvar_4.xyz = tmpvar_3; + vec3 x2_5; + vec3 x1_6; + x1_6.x = dot (unity_SHAr, tmpvar_4); + x1_6.y = dot (unity_SHAg, tmpvar_4); + x1_6.z = dot (unity_SHAb, tmpvar_4); + vec4 tmpvar_7; + tmpvar_7 = (tmpvar_3.xyzz * tmpvar_3.yzzx); + x2_5.x = dot (unity_SHBr, tmpvar_7); + x2_5.y = dot (unity_SHBg, tmpvar_7); + x2_5.z = dot (unity_SHBb, tmpvar_7); + gl_Position = tmpvar_1; + vec4 tmpvar_8; + tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_8.x = tmpvar_1.z; + xlv_FOG = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.zw = vec2(0.0, 0.0); + tmpvar_9.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = tmpvar_3; + gl_TexCoord[1] = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11.w = 0.0; + tmpvar_11.xyz = ((x1_6 + x2_5) + (unity_SHC.xyz * ((tmpvar_3.x * tmpvar_3.x) - (tmpvar_3.y * tmpvar_3.y)))); + gl_TexCoord[2] = tmpvar_11; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-FX_Glass_Stained_BumpDistort-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-ir.txt new file mode 100644 index 000000000..41e4108c2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-ir.txt @@ -0,0 +1,106 @@ +struct v2f { + vec4 vertex; + vec4 uvgrab; + vec2 uvbump; + vec2 uvmain; +}; +struct appdata_t { + vec4 vertex; + vec2 texcoord; +}; +vec2 MultiplyUV ( + in mat4 mat_1, + in vec2 inUV_2 +) +{ + vec4 temp_3; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.x = inUV_2.x; + tmpvar_4.y = inUV_2.y; + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + temp_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (mat_1 * temp_3); + temp_3 = tmpvar_6; + return temp_3.xy; +} + +v2f vert ( + in appdata_t v_7 +) +{ + float scale_8; + v2f o_9; + float tmpvar_10; + tmpvar_10 = 1.0; + scale_8 = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_7.vertex); + o_9.vertex = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12.x = o_9.vertex.x; + tmpvar_12.y = (o_9.vertex.y * scale_8); + vec2 tmpvar_13; + tmpvar_13 = ((tmpvar_12 + o_9.vertex.w) * 0.5); + o_9.uvgrab.xy = tmpvar_13.xy.xy; + vec2 tmpvar_14; + tmpvar_14 = o_9.vertex.zw; + o_9.uvgrab.zw = tmpvar_14.xxxy.zw; + vec2 tmpvar_15; + tmpvar_15 = MultiplyUV (gl_TextureMatrix[1], v_7.texcoord); + vec2 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_9.uvbump = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = MultiplyUV (gl_TextureMatrix[2], v_7.texcoord); + vec2 tmpvar_18; + tmpvar_18 = tmpvar_17; + o_9.uvmain = tmpvar_18; + return o_9; +} + +void main () +{ + appdata_t xlt_v_19; + v2f xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = gl_Vertex.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_19.vertex = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = gl_MultiTexCoord0.xy; + vec2 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_19.texcoord = tmpvar_24; + v2f tmpvar_25; + tmpvar_25 = vert (xlt_v_19); + v2f tmpvar_26; + tmpvar_26 = tmpvar_25; + xl_retval_20 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = xl_retval_20.vertex.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_Position = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = xl_retval_20.uvgrab.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + gl_TexCoord[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31.zw = vec2(0.0, 0.0); + tmpvar_31.xy = xl_retval_20.uvbump.xy; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_TexCoord[1] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33.zw = vec2(0.0, 0.0); + tmpvar_33.xy = xl_retval_20.uvmain.xy; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_TexCoord[2] = tmpvar_34; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-out.txt new file mode 100644 index 000000000..7ba3a251d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Glass_Stained_BumpDistort-out.txt @@ -0,0 +1,29 @@ +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_MultiTexCoord0.xy; + vec4 tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); + tmpvar_2.xy = ((tmpvar_3.xy + tmpvar_3.w) * 0.5); + tmpvar_2.zw = tmpvar_3.zw; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.x = tmpvar_1.x; + tmpvar_4.y = tmpvar_1.y; + vec4 tmpvar_5; + tmpvar_5.zw = vec2(0.0, 0.0); + tmpvar_5.x = tmpvar_1.x; + tmpvar_5.y = tmpvar_1.y; + gl_Position = tmpvar_3; + gl_TexCoord[0] = tmpvar_2; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = (gl_TextureMatrix[1] * tmpvar_4).xy; + gl_TexCoord[1] = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = (gl_TextureMatrix[2] * tmpvar_5).xy; + gl_TexCoord[2] = tmpvar_7; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-ir.txt new file mode 100644 index 000000000..196c84d41 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-ir.txt @@ -0,0 +1,120 @@ +struct v2f { + vec4 pos; + float fog; + vec2 bumpuv[2]; + vec3 viewDir; +}; +struct appdata { + vec4 vertex; + vec3 normal; +}; +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform float _WaveScale; +uniform vec4 _WaveOffset; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +v2f vert ( + in appdata v_10 +) +{ + vec4 temp_11; + v2f o_12; + PositionFog (v_10.vertex, o_12.pos, o_12.fog); + vec4 tmpvar_13; + tmpvar_13 = ((v_10.vertex.xzxz * _WaveScale) + _WaveOffset); + temp_11 = tmpvar_13.xyzw.xyzw; + vec2 tmpvar_14; + tmpvar_14 = (temp_11.xy * vec2(0.4, 0.45)); + o_12.bumpuv[0] = tmpvar_14; + vec2 tmpvar_15; + tmpvar_15 = temp_11.wz; + o_12.bumpuv[1] = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = ObjSpaceViewDir (v_10.vertex); + vec3 tmpvar_17; + tmpvar_17 = normalize (tmpvar_16); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + o_12.viewDir = tmpvar_18.xzy.xyz; + return o_12; +} + +void main () +{ + appdata xlt_v_19; + v2f xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = gl_Vertex.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_19.vertex = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_Normal.xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_19.normal = tmpvar_24; + v2f tmpvar_25; + tmpvar_25 = vert (xlt_v_19); + v2f tmpvar_26; + tmpvar_26 = tmpvar_25; + xl_retval_20 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = xl_retval_20.pos.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_Position = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_29.x = xl_retval_20.fog; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlv_FOG = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31.zw = vec2(0.0, 0.0); + tmpvar_31.xy = xl_retval_20.bumpuv[0].xy; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_TexCoord[0] = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33.zw = vec2(0.0, 0.0); + tmpvar_33.xy = xl_retval_20.bumpuv[1].xy; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_TexCoord[1] = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35.w = 0.0; + tmpvar_35.xyz = xl_retval_20.viewDir.xyz; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + gl_TexCoord[2] = tmpvar_36; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-out.txt similarity index 68% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-out.txt index e7b595ce1..e3dff8457 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-FX_Water_(simple)-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-FX_Water_(simple)-out.txt @@ -6,13 +6,10 @@ uniform float _WaveScale; uniform vec4 _WaveOffset; void main () { - vec4 temp; - vec2 tmpvar_1[2]; + vec4 temp_1; vec4 tmpvar_2; tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - temp = ((gl_Vertex.xzxz * _WaveScale) + _WaveOffset); - tmpvar_1[0] = (temp.xy * vec2(0.4, 0.45)); - tmpvar_1[1] = temp.wz; + temp_1 = ((gl_Vertex.xzxz * _WaveScale) + _WaveOffset); vec4 tmpvar_3; tmpvar_3.w = 1.0; tmpvar_3.xyz = _WorldSpaceCameraPos; @@ -23,15 +20,15 @@ void main () xlv_FOG = tmpvar_4; vec4 tmpvar_5; tmpvar_5.zw = vec2(0.0, 0.0); - tmpvar_5.xy = tmpvar_1[0]; + tmpvar_5.xy = (temp_1.xy * vec2(0.4, 0.45)); gl_TexCoord[0] = tmpvar_5; vec4 tmpvar_6; tmpvar_6.zw = vec2(0.0, 0.0); - tmpvar_6.xy = tmpvar_1[1]; + tmpvar_6.xy = temp_1.wz; gl_TexCoord[1] = tmpvar_6; vec4 tmpvar_7; tmpvar_7.w = 0.0; - tmpvar_7.xyz = normalize ((((_World2Object * tmpvar_3).xyz * unity_Scale.w) - gl_Vertex.xyz)).xzy; + tmpvar_7.xyz = normalize((((_World2Object * tmpvar_3).xyz * unity_Scale.w) - gl_Vertex.xyz)).xzy; gl_TexCoord[2] = tmpvar_7; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-ir.txt new file mode 100644 index 000000000..724a50c3e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-ir.txt @@ -0,0 +1,53 @@ +struct v2f { + vec4 vertex; + vec4 uv; +}; +v2f vert ( + in vec4 vertex_1, + in vec2 uv_2 +) +{ + float scale_3; + v2f o_4; + float tmpvar_5; + tmpvar_5 = 1.0; + scale_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (gl_ModelViewProjectionMatrix * vertex_1); + o_4.vertex = tmpvar_6; + vec2 tmpvar_7; + tmpvar_7.x = o_4.vertex.x; + tmpvar_7.y = (o_4.vertex.y * scale_3); + vec2 tmpvar_8; + tmpvar_8 = ((tmpvar_7 + o_4.vertex.w) * 0.5); + o_4.uv.xy = tmpvar_8.xy.xy; + vec2 tmpvar_9; + tmpvar_9 = o_4.vertex.zw; + o_4.uv.zw = tmpvar_9.xxxy.zw; + return o_4; +} + +void main () +{ + v2f xl_retval_10; + vec4 tmpvar_11; + tmpvar_11 = gl_Vertex.xyzw; + vec2 tmpvar_12; + tmpvar_12 = gl_MultiTexCoord0.xy; + v2f tmpvar_13; + tmpvar_13 = vert (tmpvar_11, tmpvar_12); + v2f tmpvar_14; + tmpvar_14 = tmpvar_13; + xl_retval_10 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = xl_retval_10.vertex.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_Position = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = xl_retval_10.uv.xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + gl_TexCoord[0] = tmpvar_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Grab_Invert-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Grab_Invert-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-ir.txt new file mode 100644 index 000000000..7b488296d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-ir.txt @@ -0,0 +1,177 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec4 nz; +}; +struct appdata { + vec4 vertex; + vec3 normal; + vec4 color; + vec4 texcoord; +}; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _ProjectionParams; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec4 Squash ( + in vec4 pos_9 +) +{ + vec3 planeNormal_10; + vec3 planePoint_11; + vec3 projectedVertex_12; + vec3 tmpvar_13; + tmpvar_13 = pos_9.xyz; + projectedVertex_12 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14.xz = vec2(0.0, 0.0); + tmpvar_14.y = _SquashPlaneNormal.w; + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + planePoint_11 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = _SquashPlaneNormal.xyz; + planeNormal_10 = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = pos_9.xyz; + float tmpvar_18; + tmpvar_18 = dot (planeNormal_10, (planePoint_11 - tmpvar_17)); + vec3 tmpvar_19; + tmpvar_19 = (projectedVertex_12 + (tmpvar_18 * planeNormal_10)); + projectedVertex_12 = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(_SquashAmount); + vec3 tmpvar_21; + tmpvar_21 = mix (projectedVertex_12, pos_9.xyz, tmpvar_20); + vec4 tmpvar_22; + tmpvar_22.w = 1.0; + tmpvar_22.xyz = tmpvar_21.xyz; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + pos_9 = tmpvar_23; + return pos_9; +} + +void TerrainAnimateTree ( + inout vec4 pos_24, + in float alpha_25 +) +{ + vec3 bent_26; + vec3 tmpvar_27; + tmpvar_27 = (pos_24.xyz * _Scale.xyz); + pos_24.xyz = tmpvar_27.xyz.xyz; + vec4 tmpvar_28; + tmpvar_28.w = 0.0; + tmpvar_28.xyz = pos_24.xyz.xyz; + vec3 tmpvar_29; + tmpvar_29 = (_TerrainEngineBendTree * tmpvar_28).xyz; + bent_26 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(alpha_25); + vec3 tmpvar_31; + tmpvar_31 = mix (pos_24.xyz, bent_26, tmpvar_30); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + pos_24.xyz = tmpvar_32.xyz.xyz; + vec4 tmpvar_33; + tmpvar_33 = Squash (pos_24); + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + pos_24 = tmpvar_34; +} + +v2f vert ( + in appdata v_35 +) +{ + v2f o_36; + TerrainAnimateTree (v_35.vertex, v_35.color.w); + vec4 tmpvar_37; + tmpvar_37 = (gl_ModelViewProjectionMatrix * v_35.vertex); + o_36.pos = tmpvar_37; + vec2 tmpvar_38; + tmpvar_38 = v_35.texcoord.xy; + o_36.uv = tmpvar_38; + mat3 tmpvar_39; + tmpvar_39 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_40; + tmpvar_40 = (tmpvar_39 * v_35.normal); + o_36.nz.xyz = tmpvar_40.xyz.xyz; + float tmpvar_41; + tmpvar_41 = -(((gl_ModelViewMatrix * v_35.vertex).z * _ProjectionParams.w)); + o_36.nz.w = vec4(tmpvar_41).w; + return o_36; +} + +void main () +{ + appdata xlt_v_42; + v2f xl_retval_43; + vec4 tmpvar_44; + tmpvar_44 = gl_Vertex.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_v_42.vertex = tmpvar_45; + vec3 tmpvar_46; + tmpvar_46 = gl_Normal.xyz; + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_v_42.normal = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = gl_Color.xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_v_42.color = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_v_42.texcoord = tmpvar_51; + v2f tmpvar_52; + tmpvar_52 = vert (xlt_v_42); + v2f tmpvar_53; + tmpvar_53 = tmpvar_52; + xl_retval_43 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_43.pos.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_Position = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56.zw = vec2(0.0, 0.0); + tmpvar_56.xy = xl_retval_43.uv.xy; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_TexCoord[0] = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = xl_retval_43.nz.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_TexCoord[1] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-out.txt new file mode 100644 index 000000000..ef77f3c8a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture-out.txt @@ -0,0 +1,36 @@ +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _ProjectionParams; +void main () +{ + vec4 tmpvar_1; + vec4 pos_2; + pos_2.w = gl_Vertex.w; + pos_2.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_3; + tmpvar_3.w = 0.0; + tmpvar_3.xyz = pos_2.xyz; + pos_2.xyz = mix (pos_2.xyz, (_TerrainEngineBendTree * tmpvar_3).xyz, gl_Color.www); + vec3 tmpvar_4; + tmpvar_4.xz = vec2(0.0, 0.0); + tmpvar_4.y = _SquashPlaneNormal.w; + vec4 tmpvar_5; + tmpvar_5.w = 1.0; + tmpvar_5.xyz = mix ((pos_2.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_4 - pos_2.xyz)) * _SquashPlaneNormal.xyz)), pos_2.xyz, vec3(_SquashAmount)); + pos_2 = tmpvar_5; + mat3 tmpvar_6; + tmpvar_6[0] = gl_ModelViewMatrixInverseTranspose[0].xyz; + tmpvar_6[1] = gl_ModelViewMatrixInverseTranspose[1].xyz; + tmpvar_6[2] = gl_ModelViewMatrixInverseTranspose[2].xyz; + tmpvar_1.xyz = (tmpvar_6 * gl_Normal); + tmpvar_1.w = -(((gl_ModelViewMatrix * tmpvar_5).z * _ProjectionParams.w)); + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_5); + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = gl_MultiTexCoord0.xy; + gl_TexCoord[0] = tmpvar_7; + gl_TexCoord[1] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthNormalTexture1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-ir.txt new file mode 100644 index 000000000..6087e9367 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-ir.txt @@ -0,0 +1,249 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec4 nz; +}; +struct appdata_grass { + vec4 vertex; + vec4 tangent; + vec4 color; + vec4 texcoord; + vec4 texcoord1; +}; +attribute vec4 TANGENT; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform vec4 _ProjectionParams; +void FastSinCos ( + in vec4 val_1, + out vec4 s_2, + out vec4 c_3 +) +{ + vec4 cos8_4; + vec4 sin7_5; + vec4 r3_6; + vec4 r2_7; + vec4 r1_8; + vec4 r8_9; + vec4 r7_10; + vec4 r6_11; + vec4 r5_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); + sin7_5 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); + cos8_4 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = ((val_1 * 6.40885) - 3.14159); + val_1 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = (val_1 * val_1); + r5_12 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = (r5_12 * r5_12); + r6_11 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = (r6_11 * r5_12); + r7_10 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = (r6_11 * r5_12); + r8_9 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20 = (r5_12 * val_1); + r1_8 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = (r1_8 * r5_12); + r2_7 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = (r2_7 * r5_12); + r3_6 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = (((val_1 + (r1_8 * sin7_5.y)) + (r2_7 * sin7_5.z)) + (r3_6 * sin7_5.w)); + s_2 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = ((((1.0 + (r5_12 * cos8_4.x)) + (r6_11 * cos8_4.y)) + (r7_10 * cos8_4.z)) + (r8_9 * cos8_4.w)); + c_3 = tmpvar_24; +} + +void TerrainWaveGrass ( + inout vec4 vertex_25, + in float waveAmount_26, + in vec3 color_27, + out vec4 outColor_28 +) +{ + vec3 waveColor_29; + vec3 waveMove_30; + float lighting_31; + vec4 c_32; + vec4 s_33; + vec4 waves_34; + vec4 _waveZmove_35; + vec4 _waveXmove_36; + vec4 waveSpeed_37; + vec4 _waveZSize_38; + vec4 _waveXSize_39; + vec4 tmpvar_40; + tmpvar_40 = vec4(1.2, 2.0, 1.6, 4.8); + waveSpeed_37 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = vec4(0.024, 0.04, -0.12, 0.096); + _waveXmove_36 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = vec4(0.006, 0.02, -0.02, 0.1); + _waveZmove_35 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = vec3(0.0, 0.0, 0.0); + waveMove_30 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); + _waveXSize_39 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); + _waveZSize_38 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = (vertex_25.x * _waveXSize_39); + waves_34 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = (waves_34 + (vertex_25.z * _waveZSize_38)); + waves_34 = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = (waves_34 + (_WaveAndDistance.x * waveSpeed_37)); + waves_34 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = fract (waves_34); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + waves_34 = tmpvar_50; + FastSinCos (waves_34, s_33, c_32); + vec4 tmpvar_51; + tmpvar_51 = (s_33 * s_33); + s_33 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = (s_33 * s_33); + s_33 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); + float tmpvar_54; + tmpvar_54 = dot (s_33, tmpvar_53); + float tmpvar_55; + tmpvar_55 = (tmpvar_54 * 0.7); + lighting_31 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = (s_33 * waveAmount_26); + s_33 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = dot (s_33, _waveXmove_36); + float tmpvar_58; + tmpvar_58 = tmpvar_57; + waveMove_30.x = tmpvar_58; + float tmpvar_59; + tmpvar_59 = dot (s_33, _waveZmove_35); + float tmpvar_60; + tmpvar_60 = tmpvar_59; + waveMove_30.z = vec3(tmpvar_60).z; + vec2 tmpvar_61; + tmpvar_61 = (vertex_25.xz - (waveMove_30.xz * _WaveAndDistance.z)); + vertex_25.xz = tmpvar_61.xxy.xz; + vec3 tmpvar_62; + tmpvar_62 = vec3(lighting_31); + vec3 tmpvar_63; + tmpvar_63 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_62); + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + waveColor_29 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = ((color_27 * waveColor_29) * 2.0); + outColor_28.xyz = tmpvar_65.xyz.xyz; + float tmpvar_66; + tmpvar_66 = 1.0; + outColor_28.w = vec4(tmpvar_66).w; +} + +v2f vert ( + in appdata_grass v_67 +) +{ + v2f o_68; + vec4 dummyColor_69; + float waveAmount_70; + float tmpvar_71; + tmpvar_71 = (v_67.color.w * _WaveAndDistance.z); + waveAmount_70 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = vec4(0.0, 0.0, 0.0, 0.0); + dummyColor_69 = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = dummyColor_69.xyz; + TerrainWaveGrass (v_67.vertex, waveAmount_70, tmpvar_73, dummyColor_69); + vec4 tmpvar_74; + tmpvar_74 = (gl_ModelViewProjectionMatrix * v_67.vertex); + o_68.pos = tmpvar_74; + vec2 tmpvar_75; + tmpvar_75 = v_67.texcoord.xy; + vec2 tmpvar_76; + tmpvar_76 = tmpvar_75; + o_68.uv = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = vec3(0.0, 0.0, 1.0); + o_68.nz.xyz = tmpvar_77.xyz.xyz; + float tmpvar_78; + tmpvar_78 = -(((gl_ModelViewMatrix * v_67.vertex).z * _ProjectionParams.w)); + o_68.nz.w = vec4(tmpvar_78).w; + return o_68; +} + +void main () +{ + appdata_grass xlt_v_79; + v2f xl_retval_80; + vec4 tmpvar_81; + tmpvar_81 = gl_Vertex.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_v_79.vertex = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = TANGENT.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_v_79.tangent = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = gl_Color.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + xlt_v_79.color = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + xlt_v_79.texcoord = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + xlt_v_79.texcoord1 = tmpvar_90; + v2f tmpvar_91; + tmpvar_91 = vert (xlt_v_79); + v2f tmpvar_92; + tmpvar_92 = tmpvar_91; + xl_retval_80 = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93 = xl_retval_80.pos.xyzw; + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + gl_Position = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95.zw = vec2(0.0, 0.0); + tmpvar_95.xy = xl_retval_80.uv.xy; + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + gl_TexCoord[0] = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97 = xl_retval_80.nz.xyzw; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + gl_TexCoord[1] = tmpvar_98; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-out.txt new file mode 100644 index 000000000..9e3698ed1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthNormalTexture1-out.txt @@ -0,0 +1,36 @@ +uniform vec4 _WaveAndDistance; +uniform vec4 _ProjectionParams; +void main () +{ + vec4 tmpvar_1; + vec4 vertex_2; + vertex_2.yw = gl_Vertex.yw; + vec3 waveMove_3; + waveMove_3.y = 0.0; + vec4 tmpvar_4; + tmpvar_4 = ((fract((((gl_Vertex.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (gl_Vertex.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * tmpvar_4); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * tmpvar_4); + vec4 tmpvar_7; + tmpvar_7 = (tmpvar_6 * tmpvar_5); + vec4 tmpvar_8; + tmpvar_8 = (((tmpvar_4 + (tmpvar_6 * -0.161616)) + (tmpvar_7 * 0.0083333)) + ((tmpvar_7 * tmpvar_5) * -0.00019841)); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_8 * tmpvar_8); + vec4 tmpvar_10; + tmpvar_10 = ((tmpvar_9 * tmpvar_9) * (gl_Color.w * _WaveAndDistance.z)); + waveMove_3.x = dot (tmpvar_10, vec4(0.024, 0.04, -0.12, 0.096)); + waveMove_3.z = dot (tmpvar_10, vec4(0.006, 0.02, -0.02, 0.1)); + vertex_2.xz = (gl_Vertex.xz - (waveMove_3.xz * _WaveAndDistance.z)); + tmpvar_1.xyz = vec3(0.0, 0.0, 1.0); + tmpvar_1.w = -(((gl_ModelViewMatrix * vertex_2).z * _ProjectionParams.w)); + gl_Position = (gl_ModelViewProjectionMatrix * vertex_2); + vec4 tmpvar_11; + tmpvar_11.zw = vec2(0.0, 0.0); + tmpvar_11.xy = gl_MultiTexCoord0.xy; + gl_TexCoord[0] = tmpvar_11; + gl_TexCoord[1] = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Camera-DepthTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-ir.txt new file mode 100644 index 000000000..044dfb131 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-ir.txt @@ -0,0 +1,134 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +struct appdata_tree_billboard { + vec4 vertex; + vec4 color; + vec4 texcoord; + vec2 texcoord1; +}; +uniform vec4 _TreeBillboardDistances; +uniform vec4 _TreeBillboardCameraUp; +uniform vec3 _TreeBillboardCameraRight; +uniform vec4 _TreeBillboardCameraPos; +uniform vec4 _TreeBillboardCameraFront; +void TerrainBillboardTree ( + inout vec4 pos_1, + in vec2 offset_2, + in float offsetz_3 +) +{ + float absRadius_4; + float billboardRootOffsetFactor_5; + float billboardModeFactor_6; + float radius_7; + float billboardAngleFactor_8; + float treeDistanceSqr_9; + vec3 treePos_10; + vec3 tmpvar_11; + tmpvar_11 = (pos_1.xyz - _TreeBillboardCameraPos.xyz); + treePos_10 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = dot (treePos_10, treePos_10); + float tmpvar_13; + tmpvar_13 = tmpvar_12; + treeDistanceSqr_9 = tmpvar_13; + if ((treeDistanceSqr_9 > _TreeBillboardDistances.x)) { + vec2 tmpvar_14; + tmpvar_14 = vec2(0.0, 0.0); + offset_2 = tmpvar_14.xy.xy; + }; + vec3 tmpvar_15; + tmpvar_15 = (pos_1.xyz + (_TreeBillboardCameraRight.xyz * offset_2.x)); + pos_1.xyz = tmpvar_15.xyz.xyz; + float tmpvar_16; + tmpvar_16 = _TreeBillboardCameraPos.w; + billboardAngleFactor_8 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = mix (offset_2.y, offsetz_3, billboardAngleFactor_8); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + radius_7 = tmpvar_18; + float tmpvar_19; + tmpvar_19 = _TreeBillboardCameraUp.w; + billboardModeFactor_6 = tmpvar_19; + float tmpvar_20; + tmpvar_20 = _TreeBillboardCameraFront.w; + billboardRootOffsetFactor_5 = tmpvar_20; + float tmpvar_21; + tmpvar_21 = abs (radius_7); + float tmpvar_22; + tmpvar_22 = tmpvar_21; + absRadius_4 = tmpvar_22; + float tmpvar_23; + tmpvar_23 = max (0.0, radius_7); + vec3 tmpvar_24; + tmpvar_24 = vec3(billboardModeFactor_6); + vec3 tmpvar_25; + tmpvar_25 = mix (((((_TreeBillboardCameraUp.xyz * tmpvar_23) * 2.0) - (vec3(0.0, 1.0, 0.0) * absRadius_4)) - ((_TreeBillboardCameraUp.xyz * absRadius_4) * billboardRootOffsetFactor_5)), (_TreeBillboardCameraUp.xyz * radius_7), tmpvar_24); + vec3 tmpvar_26; + tmpvar_26 = (pos_1.xyz + tmpvar_25); + pos_1.xyz = tmpvar_26.xyz.xyz; +} + +v2f vert ( + in appdata_tree_billboard v_27 +) +{ + v2f o_28; + TerrainBillboardTree (v_27.vertex, v_27.texcoord1.xy, v_27.texcoord.y); + vec4 tmpvar_29; + tmpvar_29 = (gl_ModelViewProjectionMatrix * v_27.vertex); + o_28.pos = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_27.texcoord.x; + o_28.uv.x = tmpvar_30; + float tmpvar_31; + tmpvar_31 = float((v_27.texcoord.y > 0.0)); + o_28.uv.y = vec2(tmpvar_31).y; + return o_28; +} + +void main () +{ + appdata_tree_billboard xlt_v_32; + v2f xl_retval_33; + vec4 tmpvar_34; + tmpvar_34 = gl_Vertex.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_32.vertex = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Color.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_32.color = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_32.texcoord = tmpvar_39; + vec2 tmpvar_40; + tmpvar_40 = gl_MultiTexCoord1.xy; + vec2 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_32.texcoord1 = tmpvar_41; + v2f tmpvar_42; + tmpvar_42 = vert (xlt_v_32); + v2f tmpvar_43; + tmpvar_43 = tmpvar_42; + xl_retval_33 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = xl_retval_33.pos.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_Position = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.zw = vec2(0.0, 0.0); + tmpvar_46.xy = xl_retval_33.uv.xy; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[0] = tmpvar_47; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-out.txt new file mode 100644 index 000000000..87cf7ccf8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Camera-DepthTexture-out.txt @@ -0,0 +1,34 @@ +uniform vec4 _TreeBillboardDistances; +uniform vec4 _TreeBillboardCameraUp; +uniform vec3 _TreeBillboardCameraRight; +uniform vec4 _TreeBillboardCameraPos; +uniform vec4 _TreeBillboardCameraFront; +void main () +{ + vec2 tmpvar_1; + vec4 pos_2; + pos_2 = gl_Vertex; + vec2 offset_3; + offset_3 = gl_MultiTexCoord1.xy; + vec3 tmpvar_4; + tmpvar_4 = (gl_Vertex.xyz - _TreeBillboardCameraPos.xyz); + float tmpvar_5; + tmpvar_5 = dot (tmpvar_4, tmpvar_4); + if ((tmpvar_5 > _TreeBillboardDistances.x)) { + offset_3 = vec2(0.0, 0.0); + }; + pos_2.xyz = (gl_Vertex.xyz + (_TreeBillboardCameraRight * offset_3.x)); + float tmpvar_6; + tmpvar_6 = mix (offset_3.y, gl_MultiTexCoord0.y, _TreeBillboardCameraPos.w); + float tmpvar_7; + tmpvar_7 = abs(tmpvar_6); + pos_2.xyz = (pos_2.xyz + mix (((((_TreeBillboardCameraUp.xyz * max (0.0, tmpvar_6)) * 2.0) - (vec3(0.0, 1.0, 0.0) * tmpvar_7)) - ((_TreeBillboardCameraUp.xyz * tmpvar_7) * _TreeBillboardCameraFront.w)), (_TreeBillboardCameraUp.xyz * tmpvar_6), _TreeBillboardCameraUp.www)); + tmpvar_1.x = gl_MultiTexCoord0.x; + tmpvar_1.y = float((gl_MultiTexCoord0.y > 0.0)); + gl_Position = (gl_ModelViewProjectionMatrix * pos_2); + vec4 tmpvar_8; + tmpvar_8.zw = vec2(0.0, 0.0); + tmpvar_8.xy = tmpvar_1; + gl_TexCoord[0] = tmpvar_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Glow_Downsample-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-ir.txt new file mode 100644 index 000000000..db70dab59 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-ir.txt @@ -0,0 +1,130 @@ +struct appdata_img { + vec4 vertex; + vec2 texcoord; +}; +struct v2f { + vec4 pos; + vec4 uv[4]; +}; +uniform vec4 _MainTex_TexelSize; +vec2 MultiplyUV ( + in mat4 mat_1, + in vec2 inUV_2 +) +{ + vec4 temp_3; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.x = inUV_2.x; + tmpvar_4.y = inUV_2.y; + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + temp_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (mat_1 * temp_3); + temp_3 = tmpvar_6; + return temp_3.xy; +} + +v2f vert ( + in appdata_img v_7 +) +{ + float offY_8; + float offX_9; + vec4 uv_10; + v2f o_11; + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_7.vertex); + o_11.pos = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = MultiplyUV (gl_TextureMatrix[0], v_7.texcoord); + vec2 tmpvar_14; + tmpvar_14 = tmpvar_13; + uv_10.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = vec2(0.0, 0.0); + uv_10.zw = tmpvar_15.xxxy.zw; + float tmpvar_16; + tmpvar_16 = _MainTex_TexelSize.x; + offX_9 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = _MainTex_TexelSize.y; + offY_8 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18.zw = vec2(0.0, 1.0); + tmpvar_18.x = -(offX_9); + tmpvar_18.y = -(offY_8); + vec4 tmpvar_19; + tmpvar_19 = (uv_10 + tmpvar_18); + o_11.uv[0] = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 1.0); + tmpvar_20.x = offX_9; + tmpvar_20.y = -(offY_8); + vec4 tmpvar_21; + tmpvar_21 = (uv_10 + tmpvar_20); + o_11.uv[1] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 1.0); + tmpvar_22.x = offX_9; + tmpvar_22.y = offY_8; + vec4 tmpvar_23; + tmpvar_23 = (uv_10 + tmpvar_22); + o_11.uv[2] = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24.zw = vec2(0.0, 1.0); + tmpvar_24.x = -(offX_9); + tmpvar_24.y = offY_8; + vec4 tmpvar_25; + tmpvar_25 = (uv_10 + tmpvar_24); + o_11.uv[3] = tmpvar_25; + return o_11; +} + +void main () +{ + appdata_img xlt_v_26; + v2f xl_retval_27; + vec4 tmpvar_28; + tmpvar_28 = gl_Vertex.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_26.vertex = tmpvar_29; + vec2 tmpvar_30; + tmpvar_30 = gl_MultiTexCoord0.xy; + vec2 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_26.texcoord = tmpvar_31; + v2f tmpvar_32; + tmpvar_32 = vert (xlt_v_26); + v2f tmpvar_33; + tmpvar_33 = tmpvar_32; + xl_retval_27 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = xl_retval_27.pos.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + gl_Position = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = xl_retval_27.uv[0].xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + gl_TexCoord[0] = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = xl_retval_27.uv[1].xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + gl_TexCoord[1] = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_27.uv[2].xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[2] = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_27.uv[3].xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_TexCoord[3] = tmpvar_43; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-out.txt new file mode 100644 index 000000000..55e3e26c1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Glow_Downsample-out.txt @@ -0,0 +1,39 @@ +uniform vec4 _MainTex_TexelSize; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_MultiTexCoord0.xy; + vec4 uv_2; + vec4 tmpvar_3; + tmpvar_3.zw = vec2(0.0, 0.0); + tmpvar_3.x = tmpvar_1.x; + tmpvar_3.y = tmpvar_1.y; + uv_2.xy = (gl_TextureMatrix[0] * tmpvar_3).xy; + uv_2.zw = vec2(0.0, 0.0); + float tmpvar_4; + tmpvar_4 = _MainTex_TexelSize.x; + float tmpvar_5; + tmpvar_5 = _MainTex_TexelSize.y; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 1.0); + tmpvar_6.x = -(_MainTex_TexelSize.x); + tmpvar_6.y = -(_MainTex_TexelSize.y); + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 1.0); + tmpvar_7.x = tmpvar_4; + tmpvar_7.y = -(_MainTex_TexelSize.y); + vec4 tmpvar_8; + tmpvar_8.zw = vec2(0.0, 1.0); + tmpvar_8.x = tmpvar_4; + tmpvar_8.y = tmpvar_5; + vec4 tmpvar_9; + tmpvar_9.zw = vec2(0.0, 1.0); + tmpvar_9.x = -(_MainTex_TexelSize.x); + tmpvar_9.y = tmpvar_5; + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + gl_TexCoord[0] = (uv_2 + tmpvar_6); + gl_TexCoord[1] = (uv_2 + tmpvar_7); + gl_TexCoord[2] = (uv_2 + tmpvar_8); + gl_TexCoord[3] = (uv_2 + tmpvar_9); +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-ir.txt new file mode 100644 index 000000000..312727868 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-ir.txt @@ -0,0 +1,87 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; + vec2 texgencoord; +}; +struct appdata_t { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform vec4 _MainTex_ST; +uniform mat4 _GUIClipTextureMatrix; +v2f vert ( + in appdata_t v_1 +) +{ + vec4 texgen_2; + v2f o_3; + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_3.vertex = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = (gl_ModelViewMatrix * v_1.vertex); + texgen_2 = tmpvar_5; + vec2 tmpvar_6; + tmpvar_6 = (_GUIClipTextureMatrix * texgen_2).xy; + vec2 tmpvar_7; + tmpvar_7 = tmpvar_6; + o_3.texgencoord = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = v_1.color; + o_3.color = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = ((v_1.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_3.texcoord = tmpvar_9; + return o_3; +} + +void main () +{ + appdata_t xlt_v_10; + v2f xl_retval_11; + vec4 tmpvar_12; + tmpvar_12 = gl_Vertex.xyzw; + vec4 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_v_10.vertex = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = gl_Color.xyzw; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_v_10.color = tmpvar_15; + vec2 tmpvar_16; + tmpvar_16 = gl_MultiTexCoord0.xy; + vec2 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_10.texcoord = tmpvar_17; + v2f tmpvar_18; + tmpvar_18 = vert (xlt_v_10); + v2f tmpvar_19; + tmpvar_19 = tmpvar_18; + xl_retval_11 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20 = xl_retval_11.vertex.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + gl_Position = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = xl_retval_11.color.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + gl_FrontColor = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24.zw = vec2(0.0, 0.0); + tmpvar_24.xy = xl_retval_11.texcoord.xy; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_TexCoord[0] = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26.zw = vec2(0.0, 0.0); + tmpvar_26.xy = xl_retval_11.texgencoord.xy; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + gl_TexCoord[1] = tmpvar_27; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-GUITextureClip-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-GUITextureClip-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Internal-PrePassLighting-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-ir.txt new file mode 100644 index 000000000..e8b9e883f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-ir.txt @@ -0,0 +1,93 @@ +struct v2f { + vec4 pos; + vec4 uv; + vec3 ray; +}; +struct appdata { + vec4 vertex; + vec3 texcoord; +}; +uniform vec4 _ProjectionParams; +vec4 ComputeScreenPos ( + in vec4 pos_1 +) +{ + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (pos_1 * 0.5); + o_2 = tmpvar_3; + vec2 tmpvar_4; + tmpvar_4.x = o_2.x; + tmpvar_4.y = (o_2.y * _ProjectionParams.x); + vec2 tmpvar_5; + tmpvar_5 = (tmpvar_4 + o_2.w); + o_2.xy = tmpvar_5.xy.xy; + vec2 tmpvar_6; + tmpvar_6 = pos_1.zw; + o_2.zw = tmpvar_6.xxxy.zw; + return o_2; +} + +v2f vert ( + in appdata v_7 +) +{ + v2f o_8; + vec4 tmpvar_9; + tmpvar_9 = (gl_ModelViewProjectionMatrix * v_7.vertex); + o_8.pos = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = ComputeScreenPos (o_8.pos); + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + o_8.uv = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = ((gl_ModelViewMatrix * v_7.vertex).xyz * vec3(-1.0, -1.0, 1.0)); + o_8.ray = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = vec3(float((v_7.texcoord.z != 0.0))); + vec3 tmpvar_14; + tmpvar_14 = mix (o_8.ray, v_7.texcoord, tmpvar_13); + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + o_8.ray = tmpvar_15; + return o_8; +} + +void main () +{ + appdata xlt_v_16; + v2f xl_retval_17; + vec4 tmpvar_18; + tmpvar_18 = gl_Vertex.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_16.vertex = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_MultiTexCoord0.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_16.texcoord = tmpvar_21; + v2f tmpvar_22; + tmpvar_22 = vert (xlt_v_16); + v2f tmpvar_23; + tmpvar_23 = tmpvar_22; + xl_retval_17 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = xl_retval_17.pos.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_Position = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = xl_retval_17.uv.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + gl_TexCoord[0] = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28.w = 0.0; + tmpvar_28.xyz = xl_retval_17.ray.xyz; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_TexCoord[1] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-out.txt new file mode 100644 index 000000000..3863fd91a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Internal-PrePassLighting-out.txt @@ -0,0 +1,21 @@ +uniform vec4 _ProjectionParams; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + gl_TexCoord[0] = o_2; + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = mix (((gl_ModelViewMatrix * gl_Vertex).xyz * vec3(-1.0, -1.0, 1.0)), gl_MultiTexCoord0.xyz, vec3(float((gl_MultiTexCoord0.z != 0.0)))); + gl_TexCoord[1] = tmpvar_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Noise_Shader_RGB-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-ir.txt new file mode 100644 index 000000000..205bd8a5f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-ir.txt @@ -0,0 +1,97 @@ +struct appdata_img { + vec4 vertex; + vec2 texcoord; +}; +struct v2f { + vec4 pos; + vec2 uv; + vec2 uvg; + vec2 uvs; +}; +uniform vec4 _ScratchOffsetScale; +uniform vec4 _GrainOffsetScale; +vec2 MultiplyUV ( + in mat4 mat_1, + in vec2 inUV_2 +) +{ + vec4 temp_3; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.x = inUV_2.x; + tmpvar_4.y = inUV_2.y; + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + temp_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (mat_1 * temp_3); + temp_3 = tmpvar_6; + return temp_3.xy; +} + +v2f vert ( + in appdata_img v_7 +) +{ + v2f o_8; + vec4 tmpvar_9; + tmpvar_9 = (gl_ModelViewProjectionMatrix * v_7.vertex); + o_8.pos = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = MultiplyUV (gl_TextureMatrix[0], v_7.texcoord); + vec2 tmpvar_11; + tmpvar_11 = tmpvar_10; + o_8.uv = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = ((v_7.texcoord.xy * _GrainOffsetScale.zw) + _GrainOffsetScale.xy); + o_8.uvg = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13 = ((v_7.texcoord.xy * _ScratchOffsetScale.zw) + _ScratchOffsetScale.xy); + o_8.uvs = tmpvar_13; + return o_8; +} + +void main () +{ + appdata_img xlt_v_14; + v2f xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec2 tmpvar_18; + tmpvar_18 = gl_MultiTexCoord0.xy; + vec2 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.texcoord = tmpvar_19; + v2f tmpvar_20; + tmpvar_20 = vert (xlt_v_14); + v2f tmpvar_21; + tmpvar_21 = tmpvar_20; + xl_retval_15 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = xl_retval_15.pos.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + gl_Position = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24.zw = vec2(0.0, 0.0); + tmpvar_24.xy = xl_retval_15.uv.xy; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + gl_TexCoord[0] = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26.zw = vec2(0.0, 0.0); + tmpvar_26.xy = xl_retval_15.uvg.xy; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + gl_TexCoord[1] = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28.zw = vec2(0.0, 0.0); + tmpvar_28.xy = xl_retval_15.uvs.xy; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_TexCoord[2] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-out.txt new file mode 100644 index 000000000..d5fac99be --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Noise_Shader_RGB-out.txt @@ -0,0 +1,25 @@ +uniform vec4 _ScratchOffsetScale; +uniform vec4 _GrainOffsetScale; +void main () +{ + vec2 tmpvar_1; + tmpvar_1 = gl_MultiTexCoord0.xy; + vec4 tmpvar_2; + tmpvar_2.zw = vec2(0.0, 0.0); + tmpvar_2.x = tmpvar_1.x; + tmpvar_2.y = tmpvar_1.y; + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_3; + tmpvar_3.zw = vec2(0.0, 0.0); + tmpvar_3.xy = (gl_TextureMatrix[0] * tmpvar_2).xy; + gl_TexCoord[0] = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.xy = ((gl_MultiTexCoord0.xy * _GrainOffsetScale.zw) + _GrainOffsetScale.xy); + gl_TexCoord[1] = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5.zw = vec2(0.0, 0.0); + tmpvar_5.xy = ((gl_MultiTexCoord0.xy * _ScratchOffsetScale.zw) + _ScratchOffsetScale.xy); + gl_TexCoord[2] = tmpvar_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_BillboardTree-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-ir.txt new file mode 100644 index 000000000..df5313097 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-ir.txt @@ -0,0 +1,154 @@ +struct v2f { + vec4 pos; + float fog; + vec4 color; + vec2 uv; +}; +struct appdata_tree_billboard { + vec4 vertex; + vec4 color; + vec4 texcoord; + vec2 texcoord1; +}; +varying vec4 xlv_FOG; +uniform vec4 _TreeBillboardDistances; +uniform vec4 _TreeBillboardCameraUp; +uniform vec3 _TreeBillboardCameraRight; +uniform vec4 _TreeBillboardCameraPos; +uniform vec4 _TreeBillboardCameraFront; +void TerrainBillboardTree ( + inout vec4 pos_1, + in vec2 offset_2, + in float offsetz_3 +) +{ + float absRadius_4; + float billboardRootOffsetFactor_5; + float billboardModeFactor_6; + float radius_7; + float billboardAngleFactor_8; + float treeDistanceSqr_9; + vec3 treePos_10; + vec3 tmpvar_11; + tmpvar_11 = (pos_1.xyz - _TreeBillboardCameraPos.xyz); + treePos_10 = tmpvar_11; + float tmpvar_12; + tmpvar_12 = dot (treePos_10, treePos_10); + float tmpvar_13; + tmpvar_13 = tmpvar_12; + treeDistanceSqr_9 = tmpvar_13; + if ((treeDistanceSqr_9 > _TreeBillboardDistances.x)) { + vec2 tmpvar_14; + tmpvar_14 = vec2(0.0, 0.0); + offset_2 = tmpvar_14.xy.xy; + }; + vec3 tmpvar_15; + tmpvar_15 = (pos_1.xyz + (_TreeBillboardCameraRight.xyz * offset_2.x)); + pos_1.xyz = tmpvar_15.xyz.xyz; + float tmpvar_16; + tmpvar_16 = _TreeBillboardCameraPos.w; + billboardAngleFactor_8 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = mix (offset_2.y, offsetz_3, billboardAngleFactor_8); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + radius_7 = tmpvar_18; + float tmpvar_19; + tmpvar_19 = _TreeBillboardCameraUp.w; + billboardModeFactor_6 = tmpvar_19; + float tmpvar_20; + tmpvar_20 = _TreeBillboardCameraFront.w; + billboardRootOffsetFactor_5 = tmpvar_20; + float tmpvar_21; + tmpvar_21 = abs (radius_7); + float tmpvar_22; + tmpvar_22 = tmpvar_21; + absRadius_4 = tmpvar_22; + float tmpvar_23; + tmpvar_23 = max (0.0, radius_7); + vec3 tmpvar_24; + tmpvar_24 = vec3(billboardModeFactor_6); + vec3 tmpvar_25; + tmpvar_25 = mix (((((_TreeBillboardCameraUp.xyz * tmpvar_23) * 2.0) - (vec3(0.0, 1.0, 0.0) * absRadius_4)) - ((_TreeBillboardCameraUp.xyz * absRadius_4) * billboardRootOffsetFactor_5)), (_TreeBillboardCameraUp.xyz * radius_7), tmpvar_24); + vec3 tmpvar_26; + tmpvar_26 = (pos_1.xyz + tmpvar_25); + pos_1.xyz = tmpvar_26.xyz.xyz; +} + +v2f vert ( + in appdata_tree_billboard v_27 +) +{ + v2f o_28; + TerrainBillboardTree (v_27.vertex, v_27.texcoord1.xy, v_27.texcoord.y); + vec4 tmpvar_29; + tmpvar_29 = (gl_ModelViewProjectionMatrix * v_27.vertex); + o_28.pos = tmpvar_29; + float tmpvar_30; + tmpvar_30 = o_28.pos.z; + o_28.fog = tmpvar_30; + float tmpvar_31; + tmpvar_31 = v_27.texcoord.x; + o_28.uv.x = tmpvar_31; + float tmpvar_32; + tmpvar_32 = float((v_27.texcoord.y > 0.0)); + o_28.uv.y = vec2(tmpvar_32).y; + vec4 tmpvar_33; + tmpvar_33 = v_27.color; + o_28.color = tmpvar_33; + return o_28; +} + +void main () +{ + appdata_tree_billboard xlt_v_34; + v2f xl_retval_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Vertex.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_34.vertex = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_Color.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_34.color = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_34.texcoord = tmpvar_41; + vec2 tmpvar_42; + tmpvar_42 = gl_MultiTexCoord1.xy; + vec2 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_34.texcoord1 = tmpvar_43; + v2f tmpvar_44; + tmpvar_44 = vert (xlt_v_34); + v2f tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_35 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_35.pos.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_Position = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_48.x = xl_retval_35.fog; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlv_FOG = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = xl_retval_35.color.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_FrontColor = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.zw = vec2(0.0, 0.0); + tmpvar_52.xy = xl_retval_35.uv.xy; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[0] = tmpvar_53; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-out.txt new file mode 100644 index 000000000..0ca441624 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_BillboardTree-out.txt @@ -0,0 +1,42 @@ +varying vec4 xlv_FOG; +uniform vec4 _TreeBillboardDistances; +uniform vec4 _TreeBillboardCameraUp; +uniform vec3 _TreeBillboardCameraRight; +uniform vec4 _TreeBillboardCameraPos; +uniform vec4 _TreeBillboardCameraFront; +void main () +{ + vec2 tmpvar_1; + vec4 pos_2; + pos_2 = gl_Vertex; + vec2 offset_3; + offset_3 = gl_MultiTexCoord1.xy; + vec3 tmpvar_4; + tmpvar_4 = (gl_Vertex.xyz - _TreeBillboardCameraPos.xyz); + float tmpvar_5; + tmpvar_5 = dot (tmpvar_4, tmpvar_4); + if ((tmpvar_5 > _TreeBillboardDistances.x)) { + offset_3 = vec2(0.0, 0.0); + }; + pos_2.xyz = (gl_Vertex.xyz + (_TreeBillboardCameraRight * offset_3.x)); + float tmpvar_6; + tmpvar_6 = mix (offset_3.y, gl_MultiTexCoord0.y, _TreeBillboardCameraPos.w); + float tmpvar_7; + tmpvar_7 = abs(tmpvar_6); + pos_2.xyz = (pos_2.xyz + mix (((((_TreeBillboardCameraUp.xyz * max (0.0, tmpvar_6)) * 2.0) - (vec3(0.0, 1.0, 0.0) * tmpvar_7)) - ((_TreeBillboardCameraUp.xyz * tmpvar_7) * _TreeBillboardCameraFront.w)), (_TreeBillboardCameraUp.xyz * tmpvar_6), _TreeBillboardCameraUp.www)); + vec4 tmpvar_8; + tmpvar_8 = (gl_ModelViewProjectionMatrix * pos_2); + tmpvar_1.x = gl_MultiTexCoord0.x; + tmpvar_1.y = float((gl_MultiTexCoord0.y > 0.0)); + gl_Position = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_9.x = tmpvar_8.z; + xlv_FOG = tmpvar_9; + gl_FrontColor = gl_Color; + vec4 tmpvar_10; + tmpvar_10.zw = vec2(0.0, 0.0); + tmpvar_10.xy = tmpvar_1; + gl_TexCoord[0] = tmpvar_10; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt new file mode 100644 index 000000000..8932b3eb9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-ir.txt @@ -0,0 +1,527 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 vlight; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec3 _CameraUp; +uniform vec3 _CameraRight; +uniform vec4 _CameraPosition; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void FastSinCos ( + in vec4 val_9, + out vec4 s_10, + out vec4 c_11 +) +{ + vec4 cos8_12; + vec4 sin7_13; + vec4 r3_14; + vec4 r2_15; + vec4 r1_16; + vec4 r8_17; + vec4 r7_18; + vec4 r6_19; + vec4 r5_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); + sin7_13 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); + cos8_12 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = ((val_9 * 6.40885) - 3.14159); + val_9 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = (val_9 * val_9); + r5_20 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (r5_20 * r5_20); + r6_19 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = (r6_19 * r5_20); + r7_18 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = (r6_19 * r5_20); + r8_17 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = (r5_20 * val_9); + r1_16 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = (r1_16 * r5_20); + r2_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (r2_15 * r5_20); + r3_14 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = (((val_9 + (r1_16 * sin7_13.y)) + (r2_15 * sin7_13.z)) + (r3_14 * sin7_13.w)); + s_10 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = ((((1.0 + (r5_20 * cos8_12.x)) + (r6_19 * cos8_12.y)) + (r7_18 * cos8_12.z)) + (r8_17 * cos8_12.w)); + c_11 = tmpvar_32; +} + +void TerrainWaveGrass ( + inout vec4 vertex_33, + in float waveAmount_34, + in vec3 color_35, + out vec4 outColor_36 +) +{ + vec3 waveColor_37; + vec3 waveMove_38; + float lighting_39; + vec4 c_40; + vec4 s_41; + vec4 waves_42; + vec4 _waveZmove_43; + vec4 _waveXmove_44; + vec4 waveSpeed_45; + vec4 _waveZSize_46; + vec4 _waveXSize_47; + vec4 tmpvar_48; + tmpvar_48 = vec4(1.2, 2.0, 1.6, 4.8); + waveSpeed_45 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = vec4(0.024, 0.04, -0.12, 0.096); + _waveXmove_44 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.006, 0.02, -0.02, 0.1); + _waveZmove_43 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + waveMove_38 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); + _waveXSize_47 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); + _waveZSize_46 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = (vertex_33.x * _waveXSize_47); + waves_42 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = (waves_42 + (vertex_33.z * _waveZSize_46)); + waves_42 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = (waves_42 + (_WaveAndDistance.x * waveSpeed_45)); + waves_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = fract (waves_42); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + waves_42 = tmpvar_58; + FastSinCos (waves_42, s_41, c_40); + vec4 tmpvar_59; + tmpvar_59 = (s_41 * s_41); + s_41 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = (s_41 * s_41); + s_41 = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); + float tmpvar_62; + tmpvar_62 = dot (s_41, tmpvar_61); + float tmpvar_63; + tmpvar_63 = (tmpvar_62 * 0.7); + lighting_39 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = (s_41 * waveAmount_34); + s_41 = tmpvar_64; + float tmpvar_65; + tmpvar_65 = dot (s_41, _waveXmove_44); + float tmpvar_66; + tmpvar_66 = tmpvar_65; + waveMove_38.x = tmpvar_66; + float tmpvar_67; + tmpvar_67 = dot (s_41, _waveZmove_43); + float tmpvar_68; + tmpvar_68 = tmpvar_67; + waveMove_38.z = vec3(tmpvar_68).z; + vec2 tmpvar_69; + tmpvar_69 = (vertex_33.xz - (waveMove_38.xz * _WaveAndDistance.z)); + vertex_33.xz = tmpvar_69.xxy.xz; + vec3 tmpvar_70; + tmpvar_70 = vec3(lighting_39); + vec3 tmpvar_71; + tmpvar_71 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_70); + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + waveColor_37 = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = ((color_35 * waveColor_37) * 2.0); + outColor_36.xyz = tmpvar_73.xyz.xyz; + float tmpvar_74; + tmpvar_74 = 1.0; + outColor_36.w = vec4(tmpvar_74).w; +} + +void TerrainBillboardGrass ( + inout vec4 pos_75, + in vec2 offset_76 +) +{ + vec3 grasspos_77; + vec3 tmpvar_78; + tmpvar_78 = (pos_75.xyz - _CameraPosition.xyz); + grasspos_77 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = dot (grasspos_77, grasspos_77); + if ((tmpvar_79 > _WaveAndDistance.w)) { + vec2 tmpvar_80; + tmpvar_80 = vec2(0.0, 0.0); + offset_76 = tmpvar_80; + }; + vec3 tmpvar_81; + tmpvar_81 = (pos_75.xyz + (offset_76.x * _CameraRight.xyz)); + pos_75.xyz = tmpvar_81.xyz.xyz; + vec3 tmpvar_82; + tmpvar_82 = (pos_75.xyz + (offset_76.y * _CameraUp.xyz)); + pos_75.xyz = tmpvar_82.xyz.xyz; +} + +void vert ( + inout appdata_full v_83 +) +{ + vec4 color_84; + float waveAmount_85; + TerrainBillboardGrass (v_83.vertex, v_83.tangent.xy); + float tmpvar_86; + tmpvar_86 = v_83.tangent.y; + waveAmount_85 = tmpvar_86; + TerrainWaveGrass (v_83.vertex, waveAmount_85, v_83.color.xyz, color_84); + vec4 tmpvar_87; + tmpvar_87 = color_84; + v_83.color = tmpvar_87; +} + +vec3 ShadeSH9 ( + in vec4 normal_88 +) +{ + vec3 x3_89; + float vC_90; + vec3 x2_91; + vec4 vB_92; + vec3 x1_93; + float tmpvar_94; + tmpvar_94 = dot (unity_SHAr, normal_88); + float tmpvar_95; + tmpvar_95 = tmpvar_94; + x1_93.x = tmpvar_95; + float tmpvar_96; + tmpvar_96 = dot (unity_SHAg, normal_88); + float tmpvar_97; + tmpvar_97 = tmpvar_96; + x1_93.y = vec2(tmpvar_97).y; + float tmpvar_98; + tmpvar_98 = dot (unity_SHAb, normal_88); + float tmpvar_99; + tmpvar_99 = tmpvar_98; + x1_93.z = vec3(tmpvar_99).z; + vec4 tmpvar_100; + tmpvar_100 = (normal_88.xyzz * normal_88.yzzx); + vB_92 = tmpvar_100; + float tmpvar_101; + tmpvar_101 = dot (unity_SHBr, vB_92); + float tmpvar_102; + tmpvar_102 = tmpvar_101; + x2_91.x = tmpvar_102; + float tmpvar_103; + tmpvar_103 = dot (unity_SHBg, vB_92); + float tmpvar_104; + tmpvar_104 = tmpvar_103; + x2_91.y = vec2(tmpvar_104).y; + float tmpvar_105; + tmpvar_105 = dot (unity_SHBb, vB_92); + float tmpvar_106; + tmpvar_106 = tmpvar_105; + x2_91.z = vec3(tmpvar_106).z; + float tmpvar_107; + tmpvar_107 = ((normal_88.x * normal_88.x) - (normal_88.y * normal_88.y)); + vC_90 = tmpvar_107; + vec3 tmpvar_108; + tmpvar_108 = (unity_SHC.xyz * vC_90); + x3_89 = tmpvar_108; + return ((x1_93 + x2_91) + x3_89); +} + +vec3 Shade4PointLights ( + in vec4 lightPosX_109, + in vec4 lightPosY_110, + in vec4 lightPosZ_111, + in vec3 lightColor0_112, + in vec3 lightColor1_113, + in vec3 lightColor2_114, + in vec3 lightColor3_115, + in vec4 lightAttenSq_116, + in vec3 pos_117, + in vec3 normal_118 +) +{ + vec3 col_119; + vec4 diff_120; + vec4 atten_121; + vec4 corr_122; + vec4 ndotl_123; + vec4 lengthSq_124; + vec4 toLightZ_125; + vec4 toLightY_126; + vec4 toLightX_127; + vec4 tmpvar_128; + tmpvar_128 = (lightPosX_109 - pos_117.x); + toLightX_127 = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129 = (lightPosY_110 - pos_117.y); + toLightY_126 = tmpvar_129; + vec4 tmpvar_130; + tmpvar_130 = (lightPosZ_111 - pos_117.z); + toLightZ_125 = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131 = vec4(0.0, 0.0, 0.0, 0.0); + lengthSq_124 = tmpvar_131; + vec4 tmpvar_132; + tmpvar_132 = (lengthSq_124 + (toLightX_127 * toLightX_127)); + lengthSq_124 = tmpvar_132; + vec4 tmpvar_133; + tmpvar_133 = (lengthSq_124 + (toLightY_126 * toLightY_126)); + lengthSq_124 = tmpvar_133; + vec4 tmpvar_134; + tmpvar_134 = (lengthSq_124 + (toLightZ_125 * toLightZ_125)); + lengthSq_124 = tmpvar_134; + vec4 tmpvar_135; + tmpvar_135 = vec4(0.0, 0.0, 0.0, 0.0); + ndotl_123 = tmpvar_135; + vec4 tmpvar_136; + tmpvar_136 = (ndotl_123 + (toLightX_127 * normal_118.x)); + ndotl_123 = tmpvar_136; + vec4 tmpvar_137; + tmpvar_137 = (ndotl_123 + (toLightY_126 * normal_118.y)); + ndotl_123 = tmpvar_137; + vec4 tmpvar_138; + tmpvar_138 = (ndotl_123 + (toLightZ_125 * normal_118.z)); + ndotl_123 = tmpvar_138; + vec4 tmpvar_139; + tmpvar_139 = inversesqrt (lengthSq_124); + vec4 tmpvar_140; + tmpvar_140 = tmpvar_139; + corr_122 = tmpvar_140; + vec4 tmpvar_141; + tmpvar_141 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl_123 * corr_122)); + vec4 tmpvar_142; + tmpvar_142 = tmpvar_141; + ndotl_123 = tmpvar_142; + vec4 tmpvar_143; + tmpvar_143 = (1.0 / (1.0 + (lengthSq_124 * lightAttenSq_116))); + atten_121 = tmpvar_143; + vec4 tmpvar_144; + tmpvar_144 = (ndotl_123 * atten_121); + diff_120 = tmpvar_144; + vec3 tmpvar_145; + tmpvar_145 = vec3(0.0, 0.0, 0.0); + col_119 = tmpvar_145; + vec3 tmpvar_146; + tmpvar_146 = (col_119 + (lightColor0_112 * diff_120.x)); + col_119 = tmpvar_146; + vec3 tmpvar_147; + tmpvar_147 = (col_119 + (lightColor1_113 * diff_120.y)); + col_119 = tmpvar_147; + vec3 tmpvar_148; + tmpvar_148 = (col_119 + (lightColor2_114 * diff_120.z)); + col_119 = tmpvar_148; + vec3 tmpvar_149; + tmpvar_149 = (col_119 + (lightColor3_115 * diff_120.w)); + col_119 = tmpvar_149; + return col_119; +} + +void PositionFog ( + in vec4 v_150, + out vec4 pos_151, + out float fog_152 +) +{ + vec4 tmpvar_153; + tmpvar_153 = (gl_ModelViewProjectionMatrix * v_150); + pos_151 = tmpvar_153; + float tmpvar_154; + tmpvar_154 = pos_151.z; + fog_152 = tmpvar_154; +} + +v2f_surf vert_surf ( + in appdata_full v_155 +) +{ + vec3 worldPos_156; + vec3 shlight_157; + vec3 worldN_158; + v2f_surf o_159; + vert (v_155); + PositionFog (v_155.vertex, o_159.pos, o_159.fog); + vec2 tmpvar_160; + tmpvar_160 = ((v_155.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_159.hip_pack0 = tmpvar_160.xy.xy; + vec4 tmpvar_161; + tmpvar_161 = v_155.color; + o_159.lop_color = tmpvar_161; + mat3 tmpvar_162; + tmpvar_162 = xll_constructMat3 (_Object2World); + vec3 tmpvar_163; + tmpvar_163 = (tmpvar_162 * (v_155.normal * unity_Scale.w)); + worldN_158 = tmpvar_163; + vec3 tmpvar_164; + tmpvar_164 = worldN_158; + o_159.normal = tmpvar_164; + vec4 tmpvar_165; + tmpvar_165.w = 1.0; + tmpvar_165.xyz = worldN_158.xyz; + vec3 tmpvar_166; + tmpvar_166 = ShadeSH9 (tmpvar_165); + vec3 tmpvar_167; + tmpvar_167 = tmpvar_166; + shlight_157 = tmpvar_167; + vec3 tmpvar_168; + tmpvar_168 = shlight_157; + o_159.vlight = tmpvar_168; + vec3 tmpvar_169; + tmpvar_169 = (_Object2World * v_155.vertex).xyz; + worldPos_156 = tmpvar_169; + vec3 tmpvar_170; + tmpvar_170 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos_156, worldN_158); + vec3 tmpvar_171; + tmpvar_171 = (o_159.vlight + tmpvar_170); + o_159.vlight = tmpvar_171; + return o_159; +} + +void main () +{ + appdata_full xlt_v_172; + v2f_surf xl_retval_173; + vec4 tmpvar_174; + tmpvar_174 = gl_Vertex.xyzw; + vec4 tmpvar_175; + tmpvar_175 = tmpvar_174; + xlt_v_172.vertex = tmpvar_175; + vec4 tmpvar_176; + tmpvar_176 = TANGENT.xyzw; + vec4 tmpvar_177; + tmpvar_177 = tmpvar_176; + xlt_v_172.tangent = tmpvar_177; + vec3 tmpvar_178; + tmpvar_178 = gl_Normal.xyz; + vec3 tmpvar_179; + tmpvar_179 = tmpvar_178; + xlt_v_172.normal = tmpvar_179; + vec4 tmpvar_180; + tmpvar_180 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_181; + tmpvar_181 = tmpvar_180; + xlt_v_172.texcoord = tmpvar_181; + vec4 tmpvar_182; + tmpvar_182 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_183; + tmpvar_183 = tmpvar_182; + xlt_v_172.texcoord1 = tmpvar_183; + vec4 tmpvar_184; + tmpvar_184 = gl_Color.xyzw; + vec4 tmpvar_185; + tmpvar_185 = tmpvar_184; + xlt_v_172.color = tmpvar_185; + v2f_surf tmpvar_186; + tmpvar_186 = vert_surf (xlt_v_172); + v2f_surf tmpvar_187; + tmpvar_187 = tmpvar_186; + xl_retval_173 = tmpvar_187; + vec4 tmpvar_188; + tmpvar_188 = xl_retval_173.pos.xyzw; + vec4 tmpvar_189; + tmpvar_189 = tmpvar_188; + gl_Position = tmpvar_189; + vec4 tmpvar_190; + tmpvar_190.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_190.x = xl_retval_173.fog; + vec4 tmpvar_191; + tmpvar_191 = tmpvar_190; + xlv_FOG = tmpvar_191; + vec4 tmpvar_192; + tmpvar_192.zw = vec2(0.0, 0.0); + tmpvar_192.xy = xl_retval_173.hip_pack0.xy; + vec4 tmpvar_193; + tmpvar_193 = tmpvar_192; + gl_TexCoord[0] = tmpvar_193; + vec4 tmpvar_194; + tmpvar_194 = xl_retval_173.lop_color.xyzw; + vec4 tmpvar_195; + tmpvar_195 = tmpvar_194; + gl_FrontColor = tmpvar_195; + vec4 tmpvar_196; + tmpvar_196.w = 0.0; + tmpvar_196.xyz = xl_retval_173.normal.xyz; + vec4 tmpvar_197; + tmpvar_197 = tmpvar_196; + gl_TexCoord[1] = tmpvar_197; + vec4 tmpvar_198; + tmpvar_198.w = 0.0; + tmpvar_198.xyz = xl_retval_173.vlight.xyz; + vec4 tmpvar_199; + tmpvar_199 = tmpvar_198; + gl_TexCoord[2] = tmpvar_199; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt new file mode 100644 index 000000000..9b5d97136 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass-out.txt @@ -0,0 +1,119 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec3 _CameraUp; +uniform vec3 _CameraRight; +uniform vec4 _CameraPosition; +void main () +{ + vec4 pos_1; + pos_1 = gl_Vertex; + vec2 offset_2; + offset_2 = TANGENT.xy; + vec3 tmpvar_3; + tmpvar_3 = (gl_Vertex.xyz - _CameraPosition.xyz); + float tmpvar_4; + tmpvar_4 = dot (tmpvar_3, tmpvar_3); + if ((tmpvar_4 > _WaveAndDistance.w)) { + offset_2 = vec2(0.0, 0.0); + }; + pos_1.xyz = (gl_Vertex.xyz + (offset_2.x * _CameraRight)); + pos_1.xyz = (pos_1.xyz + (offset_2.y * _CameraUp)); + vec4 vertex_5; + vertex_5.yw = pos_1.yw; + vec4 outColor_6; + vec3 waveMove_7; + waveMove_7.y = 0.0; + vec4 tmpvar_8; + tmpvar_8 = ((fract((((pos_1.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (pos_1.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_8 * tmpvar_8); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * tmpvar_8); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * tmpvar_9); + vec4 tmpvar_12; + tmpvar_12 = (((tmpvar_8 + (tmpvar_10 * -0.161616)) + (tmpvar_11 * 0.0083333)) + ((tmpvar_11 * tmpvar_9) * -0.00019841)); + vec4 tmpvar_13; + tmpvar_13 = (tmpvar_12 * tmpvar_12); + vec4 tmpvar_14; + tmpvar_14 = (tmpvar_13 * tmpvar_13); + vec4 tmpvar_15; + tmpvar_15 = (tmpvar_14 * TANGENT.y); + waveMove_7.x = dot (tmpvar_15, vec4(0.024, 0.04, -0.12, 0.096)); + waveMove_7.z = dot (tmpvar_15, vec4(0.006, 0.02, -0.02, 0.1)); + vertex_5.xz = (pos_1.xz - (waveMove_7.xz * _WaveAndDistance.z)); + outColor_6.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_14, normalize(vec4(1.0, 1.0, 0.4, 0.2))) * 0.7)))) * 2.0); + outColor_6.w = 1.0; + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * vertex_5); + mat3 tmpvar_17; + tmpvar_17[0] = _Object2World[0].xyz; + tmpvar_17[1] = _Object2World[1].xyz; + tmpvar_17[2] = _Object2World[2].xyz; + vec3 tmpvar_18; + tmpvar_18 = (tmpvar_17 * (gl_Normal * unity_Scale.w)); + vec4 tmpvar_19; + tmpvar_19.w = 1.0; + tmpvar_19.xyz = tmpvar_18; + vec3 x2_20; + vec3 x1_21; + x1_21.x = dot (unity_SHAr, tmpvar_19); + x1_21.y = dot (unity_SHAg, tmpvar_19); + x1_21.z = dot (unity_SHAb, tmpvar_19); + vec4 tmpvar_22; + tmpvar_22 = (tmpvar_18.xyzz * tmpvar_18.yzzx); + x2_20.x = dot (unity_SHBr, tmpvar_22); + x2_20.y = dot (unity_SHBg, tmpvar_22); + x2_20.z = dot (unity_SHBb, tmpvar_22); + vec3 tmpvar_23; + tmpvar_23 = (_Object2World * vertex_5).xyz; + vec4 tmpvar_24; + tmpvar_24 = (unity_4LightPosX0 - tmpvar_23.x); + vec4 tmpvar_25; + tmpvar_25 = (unity_4LightPosY0 - tmpvar_23.y); + vec4 tmpvar_26; + tmpvar_26 = (unity_4LightPosZ0 - tmpvar_23.z); + vec4 tmpvar_27; + tmpvar_27 = (((tmpvar_24 * tmpvar_24) + (tmpvar_25 * tmpvar_25)) + (tmpvar_26 * tmpvar_26)); + vec4 tmpvar_28; + tmpvar_28 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_24 * tmpvar_18.x) + (tmpvar_25 * tmpvar_18.y)) + (tmpvar_26 * tmpvar_18.z)) * inversesqrt(tmpvar_27))) * (1.0/((1.0 + (tmpvar_27 * unity_4LightAtten0))))); + gl_Position = tmpvar_16; + vec4 tmpvar_29; + tmpvar_29.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_29.x = tmpvar_16.z; + xlv_FOG = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30.zw = vec2(0.0, 0.0); + tmpvar_30.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_30; + gl_FrontColor = outColor_6; + vec4 tmpvar_31; + tmpvar_31.w = 0.0; + tmpvar_31.xyz = tmpvar_18; + gl_TexCoord[1] = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = (((x1_21 + x2_20) + (unity_SHC.xyz * ((tmpvar_18.x * tmpvar_18.x) - (tmpvar_18.y * tmpvar_18.y)))) + ((((unity_LightColor0 * tmpvar_28.x) + (unity_LightColor1 * tmpvar_28.y)) + (unity_LightColor2 * tmpvar_28.z)) + (unity_LightColor3 * tmpvar_28.w))); + gl_TexCoord[2] = tmpvar_32; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt new file mode 100644 index 000000000..a39c1dc27 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-ir.txt @@ -0,0 +1,375 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec3 _CameraUp; +uniform vec3 _CameraRight; +uniform vec4 _CameraPosition; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void FastSinCos ( + in vec4 val_9, + out vec4 s_10, + out vec4 c_11 +) +{ + vec4 cos8_12; + vec4 sin7_13; + vec4 r3_14; + vec4 r2_15; + vec4 r1_16; + vec4 r8_17; + vec4 r7_18; + vec4 r6_19; + vec4 r5_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); + sin7_13 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); + cos8_12 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = ((val_9 * 6.40885) - 3.14159); + val_9 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = (val_9 * val_9); + r5_20 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (r5_20 * r5_20); + r6_19 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = (r6_19 * r5_20); + r7_18 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = (r6_19 * r5_20); + r8_17 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = (r5_20 * val_9); + r1_16 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = (r1_16 * r5_20); + r2_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (r2_15 * r5_20); + r3_14 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = (((val_9 + (r1_16 * sin7_13.y)) + (r2_15 * sin7_13.z)) + (r3_14 * sin7_13.w)); + s_10 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = ((((1.0 + (r5_20 * cos8_12.x)) + (r6_19 * cos8_12.y)) + (r7_18 * cos8_12.z)) + (r8_17 * cos8_12.w)); + c_11 = tmpvar_32; +} + +void TerrainWaveGrass ( + inout vec4 vertex_33, + in float waveAmount_34, + in vec3 color_35, + out vec4 outColor_36 +) +{ + vec3 waveColor_37; + vec3 waveMove_38; + float lighting_39; + vec4 c_40; + vec4 s_41; + vec4 waves_42; + vec4 _waveZmove_43; + vec4 _waveXmove_44; + vec4 waveSpeed_45; + vec4 _waveZSize_46; + vec4 _waveXSize_47; + vec4 tmpvar_48; + tmpvar_48 = vec4(1.2, 2.0, 1.6, 4.8); + waveSpeed_45 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = vec4(0.024, 0.04, -0.12, 0.096); + _waveXmove_44 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.006, 0.02, -0.02, 0.1); + _waveZmove_43 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + waveMove_38 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); + _waveXSize_47 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); + _waveZSize_46 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = (vertex_33.x * _waveXSize_47); + waves_42 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = (waves_42 + (vertex_33.z * _waveZSize_46)); + waves_42 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = (waves_42 + (_WaveAndDistance.x * waveSpeed_45)); + waves_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = fract (waves_42); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + waves_42 = tmpvar_58; + FastSinCos (waves_42, s_41, c_40); + vec4 tmpvar_59; + tmpvar_59 = (s_41 * s_41); + s_41 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = (s_41 * s_41); + s_41 = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); + float tmpvar_62; + tmpvar_62 = dot (s_41, tmpvar_61); + float tmpvar_63; + tmpvar_63 = (tmpvar_62 * 0.7); + lighting_39 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = (s_41 * waveAmount_34); + s_41 = tmpvar_64; + float tmpvar_65; + tmpvar_65 = dot (s_41, _waveXmove_44); + float tmpvar_66; + tmpvar_66 = tmpvar_65; + waveMove_38.x = tmpvar_66; + float tmpvar_67; + tmpvar_67 = dot (s_41, _waveZmove_43); + float tmpvar_68; + tmpvar_68 = tmpvar_67; + waveMove_38.z = vec3(tmpvar_68).z; + vec2 tmpvar_69; + tmpvar_69 = (vertex_33.xz - (waveMove_38.xz * _WaveAndDistance.z)); + vertex_33.xz = tmpvar_69.xxy.xz; + vec3 tmpvar_70; + tmpvar_70 = vec3(lighting_39); + vec3 tmpvar_71; + tmpvar_71 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_70); + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + waveColor_37 = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = ((color_35 * waveColor_37) * 2.0); + outColor_36.xyz = tmpvar_73.xyz.xyz; + float tmpvar_74; + tmpvar_74 = 1.0; + outColor_36.w = vec4(tmpvar_74).w; +} + +void TerrainBillboardGrass ( + inout vec4 pos_75, + in vec2 offset_76 +) +{ + vec3 grasspos_77; + vec3 tmpvar_78; + tmpvar_78 = (pos_75.xyz - _CameraPosition.xyz); + grasspos_77 = tmpvar_78; + float tmpvar_79; + tmpvar_79 = dot (grasspos_77, grasspos_77); + if ((tmpvar_79 > _WaveAndDistance.w)) { + vec2 tmpvar_80; + tmpvar_80 = vec2(0.0, 0.0); + offset_76 = tmpvar_80; + }; + vec3 tmpvar_81; + tmpvar_81 = (pos_75.xyz + (offset_76.x * _CameraRight.xyz)); + pos_75.xyz = tmpvar_81.xyz.xyz; + vec3 tmpvar_82; + tmpvar_82 = (pos_75.xyz + (offset_76.y * _CameraUp.xyz)); + pos_75.xyz = tmpvar_82.xyz.xyz; +} + +void vert ( + inout appdata_full v_83 +) +{ + vec4 color_84; + float waveAmount_85; + TerrainBillboardGrass (v_83.vertex, v_83.tangent.xy); + float tmpvar_86; + tmpvar_86 = v_83.tangent.y; + waveAmount_85 = tmpvar_86; + TerrainWaveGrass (v_83.vertex, waveAmount_85, v_83.color.xyz, color_84); + vec4 tmpvar_87; + tmpvar_87 = color_84; + v_83.color = tmpvar_87; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_88 +) +{ + vec3 worldPos_89; + vec3 tmpvar_90; + tmpvar_90 = (_Object2World * v_88).xyz; + worldPos_89 = tmpvar_90; + return (_WorldSpaceLightPos0.xyz - worldPos_89); +} + +void PositionFog ( + in vec4 v_91, + out vec4 pos_92, + out float fog_93 +) +{ + vec4 tmpvar_94; + tmpvar_94 = (gl_ModelViewProjectionMatrix * v_91); + pos_92 = tmpvar_94; + float tmpvar_95; + tmpvar_95 = pos_92.z; + fog_93 = tmpvar_95; +} + +v2f_surf vert_surf ( + in appdata_full v_96 +) +{ + v2f_surf o_97; + vert (v_96); + PositionFog (v_96.vertex, o_97.pos, o_97.fog); + vec2 tmpvar_98; + tmpvar_98 = ((v_96.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_97.hip_pack0 = tmpvar_98.xy.xy; + vec4 tmpvar_99; + tmpvar_99 = v_96.color; + o_97.lop_color = tmpvar_99; + mat3 tmpvar_100; + tmpvar_100 = xll_constructMat3 (_Object2World); + vec3 tmpvar_101; + tmpvar_101 = (tmpvar_100 * (v_96.normal * unity_Scale.w)); + o_97.normal = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = WorldSpaceLightDir (v_96.vertex); + vec3 tmpvar_103; + tmpvar_103 = tmpvar_102; + o_97.lightDir = tmpvar_103; + vec3 tmpvar_104; + tmpvar_104 = (_LightMatrix0 * (_Object2World * v_96.vertex)).xyz; + o_97._LightCoord = tmpvar_104; + return o_97; +} + +void main () +{ + appdata_full xlt_v_105; + v2f_surf xl_retval_106; + vec4 tmpvar_107; + tmpvar_107 = gl_Vertex.xyzw; + vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + xlt_v_105.vertex = tmpvar_108; + vec4 tmpvar_109; + tmpvar_109 = TANGENT.xyzw; + vec4 tmpvar_110; + tmpvar_110 = tmpvar_109; + xlt_v_105.tangent = tmpvar_110; + vec3 tmpvar_111; + tmpvar_111 = gl_Normal.xyz; + vec3 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_v_105.normal = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_v_105.texcoord = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_v_105.texcoord1 = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117 = gl_Color.xyzw; + vec4 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_v_105.color = tmpvar_118; + v2f_surf tmpvar_119; + tmpvar_119 = vert_surf (xlt_v_105); + v2f_surf tmpvar_120; + tmpvar_120 = tmpvar_119; + xl_retval_106 = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121 = xl_retval_106.pos.xyzw; + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + gl_Position = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_123.x = xl_retval_106.fog; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + xlv_FOG = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125.zw = vec2(0.0, 0.0); + tmpvar_125.xy = xl_retval_106.hip_pack0.xy; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_TexCoord[0] = tmpvar_126; + vec4 tmpvar_127; + tmpvar_127 = xl_retval_106.lop_color.xyzw; + vec4 tmpvar_128; + tmpvar_128 = tmpvar_127; + gl_FrontColor = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129.w = 0.0; + tmpvar_129.xyz = xl_retval_106.normal.xyz; + vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + gl_TexCoord[1] = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131.w = 0.0; + tmpvar_131.xyz = xl_retval_106.lightDir.xyz; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + gl_TexCoord[2] = tmpvar_132; + vec4 tmpvar_133; + tmpvar_133.w = 0.0; + tmpvar_133.xyz = xl_retval_106._LightCoord.xyz; + vec4 tmpvar_134; + tmpvar_134 = tmpvar_133; + gl_TexCoord[3] = tmpvar_134; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt new file mode 100644 index 000000000..84950e786 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass1-out.txt @@ -0,0 +1,83 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec3 _CameraUp; +uniform vec3 _CameraRight; +uniform vec4 _CameraPosition; +void main () +{ + vec4 pos_1; + pos_1 = gl_Vertex; + vec2 offset_2; + offset_2 = TANGENT.xy; + vec3 tmpvar_3; + tmpvar_3 = (gl_Vertex.xyz - _CameraPosition.xyz); + float tmpvar_4; + tmpvar_4 = dot (tmpvar_3, tmpvar_3); + if ((tmpvar_4 > _WaveAndDistance.w)) { + offset_2 = vec2(0.0, 0.0); + }; + pos_1.xyz = (gl_Vertex.xyz + (offset_2.x * _CameraRight)); + pos_1.xyz = (pos_1.xyz + (offset_2.y * _CameraUp)); + vec4 vertex_5; + vertex_5.yw = pos_1.yw; + vec4 outColor_6; + vec3 waveMove_7; + waveMove_7.y = 0.0; + vec4 tmpvar_8; + tmpvar_8 = ((fract((((pos_1.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (pos_1.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_8 * tmpvar_8); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * tmpvar_8); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * tmpvar_9); + vec4 tmpvar_12; + tmpvar_12 = (((tmpvar_8 + (tmpvar_10 * -0.161616)) + (tmpvar_11 * 0.0083333)) + ((tmpvar_11 * tmpvar_9) * -0.00019841)); + vec4 tmpvar_13; + tmpvar_13 = (tmpvar_12 * tmpvar_12); + vec4 tmpvar_14; + tmpvar_14 = (tmpvar_13 * tmpvar_13); + vec4 tmpvar_15; + tmpvar_15 = (tmpvar_14 * TANGENT.y); + waveMove_7.x = dot (tmpvar_15, vec4(0.024, 0.04, -0.12, 0.096)); + waveMove_7.z = dot (tmpvar_15, vec4(0.006, 0.02, -0.02, 0.1)); + vertex_5.xz = (pos_1.xz - (waveMove_7.xz * _WaveAndDistance.z)); + outColor_6.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_14, normalize(vec4(1.0, 1.0, 0.4, 0.2))) * 0.7)))) * 2.0); + outColor_6.w = 1.0; + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * vertex_5); + mat3 tmpvar_17; + tmpvar_17[0] = _Object2World[0].xyz; + tmpvar_17[1] = _Object2World[1].xyz; + tmpvar_17[2] = _Object2World[2].xyz; + gl_Position = tmpvar_16; + vec4 tmpvar_18; + tmpvar_18.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_18.x = tmpvar_16.z; + xlv_FOG = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19.zw = vec2(0.0, 0.0); + tmpvar_19.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_19; + gl_FrontColor = outColor_6; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = (tmpvar_17 * (gl_Normal * unity_Scale.w)); + gl_TexCoord[1] = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = (_WorldSpaceLightPos0.xyz - (_Object2World * vertex_5).xyz); + gl_TexCoord[2] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (_LightMatrix0 * (_Object2World * vertex_5)).xyz; + gl_TexCoord[3] = tmpvar_22; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt new file mode 100644 index 000000000..57b937d0b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-ir.txt @@ -0,0 +1,292 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec4 lop_color; +}; +attribute vec4 TANGENT; +uniform vec4 unity_LightShadowBias; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform vec4 _MainTex_ST; +uniform vec3 _CameraUp; +uniform vec3 _CameraRight; +uniform vec4 _CameraPosition; +void FastSinCos ( + in vec4 val_1, + out vec4 s_2, + out vec4 c_3 +) +{ + vec4 cos8_4; + vec4 sin7_5; + vec4 r3_6; + vec4 r2_7; + vec4 r1_8; + vec4 r8_9; + vec4 r7_10; + vec4 r6_11; + vec4 r5_12; + vec4 tmpvar_13; + tmpvar_13 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); + sin7_5 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); + cos8_4 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = ((val_1 * 6.40885) - 3.14159); + val_1 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = (val_1 * val_1); + r5_12 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = (r5_12 * r5_12); + r6_11 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = (r6_11 * r5_12); + r7_10 = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = (r6_11 * r5_12); + r8_9 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20 = (r5_12 * val_1); + r1_8 = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = (r1_8 * r5_12); + r2_7 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = (r2_7 * r5_12); + r3_6 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = (((val_1 + (r1_8 * sin7_5.y)) + (r2_7 * sin7_5.z)) + (r3_6 * sin7_5.w)); + s_2 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = ((((1.0 + (r5_12 * cos8_4.x)) + (r6_11 * cos8_4.y)) + (r7_10 * cos8_4.z)) + (r8_9 * cos8_4.w)); + c_3 = tmpvar_24; +} + +void TerrainWaveGrass ( + inout vec4 vertex_25, + in float waveAmount_26, + in vec3 color_27, + out vec4 outColor_28 +) +{ + vec3 waveColor_29; + vec3 waveMove_30; + float lighting_31; + vec4 c_32; + vec4 s_33; + vec4 waves_34; + vec4 _waveZmove_35; + vec4 _waveXmove_36; + vec4 waveSpeed_37; + vec4 _waveZSize_38; + vec4 _waveXSize_39; + vec4 tmpvar_40; + tmpvar_40 = vec4(1.2, 2.0, 1.6, 4.8); + waveSpeed_37 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = vec4(0.024, 0.04, -0.12, 0.096); + _waveXmove_36 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = vec4(0.006, 0.02, -0.02, 0.1); + _waveZmove_35 = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = vec3(0.0, 0.0, 0.0); + waveMove_30 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); + _waveXSize_39 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); + _waveZSize_38 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = (vertex_25.x * _waveXSize_39); + waves_34 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = (waves_34 + (vertex_25.z * _waveZSize_38)); + waves_34 = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = (waves_34 + (_WaveAndDistance.x * waveSpeed_37)); + waves_34 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = fract (waves_34); + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + waves_34 = tmpvar_50; + FastSinCos (waves_34, s_33, c_32); + vec4 tmpvar_51; + tmpvar_51 = (s_33 * s_33); + s_33 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = (s_33 * s_33); + s_33 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); + float tmpvar_54; + tmpvar_54 = dot (s_33, tmpvar_53); + float tmpvar_55; + tmpvar_55 = (tmpvar_54 * 0.7); + lighting_31 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = (s_33 * waveAmount_26); + s_33 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = dot (s_33, _waveXmove_36); + float tmpvar_58; + tmpvar_58 = tmpvar_57; + waveMove_30.x = tmpvar_58; + float tmpvar_59; + tmpvar_59 = dot (s_33, _waveZmove_35); + float tmpvar_60; + tmpvar_60 = tmpvar_59; + waveMove_30.z = vec3(tmpvar_60).z; + vec2 tmpvar_61; + tmpvar_61 = (vertex_25.xz - (waveMove_30.xz * _WaveAndDistance.z)); + vertex_25.xz = tmpvar_61.xxy.xz; + vec3 tmpvar_62; + tmpvar_62 = vec3(lighting_31); + vec3 tmpvar_63; + tmpvar_63 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_62); + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + waveColor_29 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = ((color_27 * waveColor_29) * 2.0); + outColor_28.xyz = tmpvar_65.xyz.xyz; + float tmpvar_66; + tmpvar_66 = 1.0; + outColor_28.w = vec4(tmpvar_66).w; +} + +void TerrainBillboardGrass ( + inout vec4 pos_67, + in vec2 offset_68 +) +{ + vec3 grasspos_69; + vec3 tmpvar_70; + tmpvar_70 = (pos_67.xyz - _CameraPosition.xyz); + grasspos_69 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = dot (grasspos_69, grasspos_69); + if ((tmpvar_71 > _WaveAndDistance.w)) { + vec2 tmpvar_72; + tmpvar_72 = vec2(0.0, 0.0); + offset_68 = tmpvar_72; + }; + vec3 tmpvar_73; + tmpvar_73 = (pos_67.xyz + (offset_68.x * _CameraRight.xyz)); + pos_67.xyz = tmpvar_73.xyz.xyz; + vec3 tmpvar_74; + tmpvar_74 = (pos_67.xyz + (offset_68.y * _CameraUp.xyz)); + pos_67.xyz = tmpvar_74.xyz.xyz; +} + +void vert ( + inout appdata_full v_75 +) +{ + vec4 color_76; + float waveAmount_77; + TerrainBillboardGrass (v_75.vertex, v_75.tangent.xy); + float tmpvar_78; + tmpvar_78 = v_75.tangent.y; + waveAmount_77 = tmpvar_78; + TerrainWaveGrass (v_75.vertex, waveAmount_77, v_75.color.xyz, color_76); + vec4 tmpvar_79; + tmpvar_79 = color_76; + v_75.color = tmpvar_79; +} + +v2f_surf vert_surf ( + in appdata_full v_80 +) +{ + v2f_surf o_81; + vert (v_80); + vec2 tmpvar_82; + tmpvar_82 = ((v_80.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_81.hip_pack0 = tmpvar_82.xy.xy; + vec4 tmpvar_83; + tmpvar_83 = v_80.color; + o_81.lop_color = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = (gl_ModelViewProjectionMatrix * v_80.vertex); + o_81.pos = tmpvar_84; + float tmpvar_85; + tmpvar_85 = (o_81.pos.z + unity_LightShadowBias.x); + o_81.pos.z = vec3(tmpvar_85).z; + if ((o_81.pos.z < -(o_81.pos.w))) { + float tmpvar_86; + tmpvar_86 = -(o_81.pos.w); + o_81.pos.z = vec3(tmpvar_86).z; + }; + return o_81; +} + +void main () +{ + appdata_full xlt_v_87; + v2f_surf xl_retval_88; + vec4 tmpvar_89; + tmpvar_89 = gl_Vertex.xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + xlt_v_87.vertex = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = TANGENT.xyzw; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + xlt_v_87.tangent = tmpvar_92; + vec3 tmpvar_93; + tmpvar_93 = gl_Normal.xyz; + vec3 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlt_v_87.normal = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + xlt_v_87.texcoord = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + xlt_v_87.texcoord1 = tmpvar_98; + vec4 tmpvar_99; + tmpvar_99 = gl_Color.xyzw; + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + xlt_v_87.color = tmpvar_100; + v2f_surf tmpvar_101; + tmpvar_101 = vert_surf (xlt_v_87); + v2f_surf tmpvar_102; + tmpvar_102 = tmpvar_101; + xl_retval_88 = tmpvar_102; + vec4 tmpvar_103; + tmpvar_103 = xl_retval_88.pos.xyzw; + vec4 tmpvar_104; + tmpvar_104 = tmpvar_103; + gl_Position = tmpvar_104; + vec4 tmpvar_105; + tmpvar_105.zw = vec2(0.0, 0.0); + tmpvar_105.xy = xl_retval_88.hip_pack0.xy; + vec4 tmpvar_106; + tmpvar_106 = tmpvar_105; + gl_TexCoord[1] = tmpvar_106; + vec4 tmpvar_107; + tmpvar_107 = xl_retval_88.lop_color.xyzw; + vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + gl_FrontColor = tmpvar_108; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt new file mode 100644 index 000000000..e851e6244 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_BillboardWavingDoublePass2-out.txt @@ -0,0 +1,67 @@ +attribute vec4 TANGENT; +uniform vec4 unity_LightShadowBias; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform vec4 _MainTex_ST; +uniform vec3 _CameraUp; +uniform vec3 _CameraRight; +uniform vec4 _CameraPosition; +void main () +{ + vec4 tmpvar_1; + vec2 tmpvar_2; + vec4 pos_3; + pos_3 = gl_Vertex; + vec2 offset_4; + offset_4 = TANGENT.xy; + vec3 tmpvar_5; + tmpvar_5 = (gl_Vertex.xyz - _CameraPosition.xyz); + float tmpvar_6; + tmpvar_6 = dot (tmpvar_5, tmpvar_5); + if ((tmpvar_6 > _WaveAndDistance.w)) { + offset_4 = vec2(0.0, 0.0); + }; + pos_3.xyz = (gl_Vertex.xyz + (offset_4.x * _CameraRight)); + pos_3.xyz = (pos_3.xyz + (offset_4.y * _CameraUp)); + vec4 vertex_7; + vertex_7.yw = pos_3.yw; + vec4 outColor_8; + vec3 waveMove_9; + waveMove_9.y = 0.0; + vec4 tmpvar_10; + tmpvar_10 = ((fract((((pos_3.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (pos_3.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * tmpvar_10); + vec4 tmpvar_12; + tmpvar_12 = (tmpvar_11 * tmpvar_10); + vec4 tmpvar_13; + tmpvar_13 = (tmpvar_12 * tmpvar_11); + vec4 tmpvar_14; + tmpvar_14 = (((tmpvar_10 + (tmpvar_12 * -0.161616)) + (tmpvar_13 * 0.0083333)) + ((tmpvar_13 * tmpvar_11) * -0.00019841)); + vec4 tmpvar_15; + tmpvar_15 = (tmpvar_14 * tmpvar_14); + vec4 tmpvar_16; + tmpvar_16 = (tmpvar_15 * tmpvar_15); + vec4 tmpvar_17; + tmpvar_17 = (tmpvar_16 * TANGENT.y); + waveMove_9.x = dot (tmpvar_17, vec4(0.024, 0.04, -0.12, 0.096)); + waveMove_9.z = dot (tmpvar_17, vec4(0.006, 0.02, -0.02, 0.1)); + vertex_7.xz = (pos_3.xz - (waveMove_9.xz * _WaveAndDistance.z)); + outColor_8.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_16, normalize(vec4(1.0, 1.0, 0.4, 0.2))) * 0.7)))) * 2.0); + outColor_8.w = 1.0; + tmpvar_2 = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + vec4 tmpvar_18; + tmpvar_18 = (gl_ModelViewProjectionMatrix * vertex_7); + tmpvar_1.xyw = tmpvar_18.xyw; + tmpvar_1.z = (tmpvar_18.z + unity_LightShadowBias.x); + if ((tmpvar_1.z < -(tmpvar_18.w))) { + tmpvar_1.z = -(tmpvar_18.w); + }; + gl_Position = tmpvar_1; + vec4 tmpvar_19; + tmpvar_19.zw = vec2(0.0, 0.0); + tmpvar_19.xy = tmpvar_2; + gl_TexCoord[1] = tmpvar_19; + gl_FrontColor = outColor_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt new file mode 100644 index 000000000..dfceada2b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-ir.txt @@ -0,0 +1,346 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void FastSinCos ( + in vec4 val_9, + out vec4 s_10, + out vec4 c_11 +) +{ + vec4 cos8_12; + vec4 sin7_13; + vec4 r3_14; + vec4 r2_15; + vec4 r1_16; + vec4 r8_17; + vec4 r7_18; + vec4 r6_19; + vec4 r5_20; + vec4 tmpvar_21; + tmpvar_21 = vec4(1.0, -0.161616, 0.0083333, -0.00019841); + sin7_13 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = vec4(-0.5, 0.0416667, -0.00138889, 2.48016e-05); + cos8_12 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = ((val_9 * 6.40885) - 3.14159); + val_9 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = (val_9 * val_9); + r5_20 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (r5_20 * r5_20); + r6_19 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = (r6_19 * r5_20); + r7_18 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = (r6_19 * r5_20); + r8_17 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = (r5_20 * val_9); + r1_16 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = (r1_16 * r5_20); + r2_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (r2_15 * r5_20); + r3_14 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = (((val_9 + (r1_16 * sin7_13.y)) + (r2_15 * sin7_13.z)) + (r3_14 * sin7_13.w)); + s_10 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = ((((1.0 + (r5_20 * cos8_12.x)) + (r6_19 * cos8_12.y)) + (r7_18 * cos8_12.z)) + (r8_17 * cos8_12.w)); + c_11 = tmpvar_32; +} + +void TerrainWaveGrass ( + inout vec4 vertex_33, + in float waveAmount_34, + in vec3 color_35, + out vec4 outColor_36 +) +{ + vec3 waveColor_37; + vec3 waveMove_38; + float lighting_39; + vec4 c_40; + vec4 s_41; + vec4 waves_42; + vec4 _waveZmove_43; + vec4 _waveXmove_44; + vec4 waveSpeed_45; + vec4 _waveZSize_46; + vec4 _waveXSize_47; + vec4 tmpvar_48; + tmpvar_48 = vec4(1.2, 2.0, 1.6, 4.8); + waveSpeed_45 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = vec4(0.024, 0.04, -0.12, 0.096); + _waveXmove_44 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = vec4(0.006, 0.02, -0.02, 0.1); + _waveZmove_43 = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = vec3(0.0, 0.0, 0.0); + waveMove_38 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y); + _waveXSize_47 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y); + _waveZSize_46 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = (vertex_33.x * _waveXSize_47); + waves_42 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = (waves_42 + (vertex_33.z * _waveZSize_46)); + waves_42 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = (waves_42 + (_WaveAndDistance.x * waveSpeed_45)); + waves_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = fract (waves_42); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + waves_42 = tmpvar_58; + FastSinCos (waves_42, s_41, c_40); + vec4 tmpvar_59; + tmpvar_59 = (s_41 * s_41); + s_41 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = (s_41 * s_41); + s_41 = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = normalize (vec4(1.0, 1.0, 0.4, 0.2)); + float tmpvar_62; + tmpvar_62 = dot (s_41, tmpvar_61); + float tmpvar_63; + tmpvar_63 = (tmpvar_62 * 0.7); + lighting_39 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = (s_41 * waveAmount_34); + s_41 = tmpvar_64; + float tmpvar_65; + tmpvar_65 = dot (s_41, _waveXmove_44); + float tmpvar_66; + tmpvar_66 = tmpvar_65; + waveMove_38.x = tmpvar_66; + float tmpvar_67; + tmpvar_67 = dot (s_41, _waveZmove_43); + float tmpvar_68; + tmpvar_68 = tmpvar_67; + waveMove_38.z = vec3(tmpvar_68).z; + vec2 tmpvar_69; + tmpvar_69 = (vertex_33.xz - (waveMove_38.xz * _WaveAndDistance.z)); + vertex_33.xz = tmpvar_69.xxy.xz; + vec3 tmpvar_70; + tmpvar_70 = vec3(lighting_39); + vec3 tmpvar_71; + tmpvar_71 = mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, tmpvar_70); + vec3 tmpvar_72; + tmpvar_72 = tmpvar_71; + waveColor_37 = tmpvar_72; + vec3 tmpvar_73; + tmpvar_73 = ((color_35 * waveColor_37) * 2.0); + outColor_36.xyz = tmpvar_73.xyz.xyz; + float tmpvar_74; + tmpvar_74 = 1.0; + outColor_36.w = vec4(tmpvar_74).w; +} + +void vert ( + inout appdata_full v_75 +) +{ + vec4 color_76; + float waveAmount_77; + float tmpvar_78; + tmpvar_78 = (v_75.color.w * _WaveAndDistance.z); + waveAmount_77 = tmpvar_78; + TerrainWaveGrass (v_75.vertex, waveAmount_77, v_75.color.xyz, color_76); + vec4 tmpvar_79; + tmpvar_79 = color_76; + v_75.color = tmpvar_79; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_80 +) +{ + vec3 worldPos_81; + vec3 tmpvar_82; + tmpvar_82 = (_Object2World * v_80).xyz; + worldPos_81 = tmpvar_82; + return (_WorldSpaceLightPos0.xyz - worldPos_81); +} + +void PositionFog ( + in vec4 v_83, + out vec4 pos_84, + out float fog_85 +) +{ + vec4 tmpvar_86; + tmpvar_86 = (gl_ModelViewProjectionMatrix * v_83); + pos_84 = tmpvar_86; + float tmpvar_87; + tmpvar_87 = pos_84.z; + fog_85 = tmpvar_87; +} + +v2f_surf vert_surf ( + in appdata_full v_88 +) +{ + v2f_surf o_89; + vert (v_88); + PositionFog (v_88.vertex, o_89.pos, o_89.fog); + vec2 tmpvar_90; + tmpvar_90 = ((v_88.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_89.hip_pack0 = tmpvar_90.xy.xy; + vec4 tmpvar_91; + tmpvar_91 = v_88.color; + o_89.lop_color = tmpvar_91; + mat3 tmpvar_92; + tmpvar_92 = xll_constructMat3 (_Object2World); + vec3 tmpvar_93; + tmpvar_93 = (tmpvar_92 * (v_88.normal * unity_Scale.w)); + o_89.normal = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = WorldSpaceLightDir (v_88.vertex); + vec3 tmpvar_95; + tmpvar_95 = tmpvar_94; + o_89.lightDir = tmpvar_95; + vec4 tmpvar_96; + tmpvar_96 = (_LightMatrix0 * (_Object2World * v_88.vertex)); + o_89._LightCoord = tmpvar_96; + return o_89; +} + +void main () +{ + appdata_full xlt_v_97; + v2f_surf xl_retval_98; + vec4 tmpvar_99; + tmpvar_99 = gl_Vertex.xyzw; + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + xlt_v_97.vertex = tmpvar_100; + vec4 tmpvar_101; + tmpvar_101 = TANGENT.xyzw; + vec4 tmpvar_102; + tmpvar_102 = tmpvar_101; + xlt_v_97.tangent = tmpvar_102; + vec3 tmpvar_103; + tmpvar_103 = gl_Normal.xyz; + vec3 tmpvar_104; + tmpvar_104 = tmpvar_103; + xlt_v_97.normal = tmpvar_104; + vec4 tmpvar_105; + tmpvar_105 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_106; + tmpvar_106 = tmpvar_105; + xlt_v_97.texcoord = tmpvar_106; + vec4 tmpvar_107; + tmpvar_107 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + xlt_v_97.texcoord1 = tmpvar_108; + vec4 tmpvar_109; + tmpvar_109 = gl_Color.xyzw; + vec4 tmpvar_110; + tmpvar_110 = tmpvar_109; + xlt_v_97.color = tmpvar_110; + v2f_surf tmpvar_111; + tmpvar_111 = vert_surf (xlt_v_97); + v2f_surf tmpvar_112; + tmpvar_112 = tmpvar_111; + xl_retval_98 = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113 = xl_retval_98.pos.xyzw; + vec4 tmpvar_114; + tmpvar_114 = tmpvar_113; + gl_Position = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_115.x = xl_retval_98.fog; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlv_FOG = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117.zw = vec2(0.0, 0.0); + tmpvar_117.xy = xl_retval_98.hip_pack0.xy; + vec4 tmpvar_118; + tmpvar_118 = tmpvar_117; + gl_TexCoord[0] = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = xl_retval_98.lop_color.xyzw; + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + gl_FrontColor = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121.w = 0.0; + tmpvar_121.xyz = xl_retval_98.normal.xyz; + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + gl_TexCoord[1] = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123.w = 0.0; + tmpvar_123.xyz = xl_retval_98.lightDir.xyz; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + gl_TexCoord[2] = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = xl_retval_98._LightCoord.xyzw; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_TexCoord[3] = tmpvar_126; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt new file mode 100644 index 000000000..deae43b30 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Details_WavingDoublePass1-out.txt @@ -0,0 +1,63 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec4 _WavingTint; +uniform vec4 _WaveAndDistance; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +void main () +{ + vec4 vertex_1; + vertex_1.yw = gl_Vertex.yw; + vec4 outColor_2; + vec3 waveMove_3; + waveMove_3.y = 0.0; + vec4 tmpvar_4; + tmpvar_4 = ((fract((((gl_Vertex.x * (vec4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y)) + (gl_Vertex.z * (vec4(0.006, 0.02, 0.02, 0.05) * _WaveAndDistance.y))) + (_WaveAndDistance.x * vec4(1.2, 2.0, 1.6, 4.8)))) * 6.40885) - 3.14159); + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_4 * tmpvar_4); + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_5 * tmpvar_4); + vec4 tmpvar_7; + tmpvar_7 = (tmpvar_6 * tmpvar_5); + vec4 tmpvar_8; + tmpvar_8 = (((tmpvar_4 + (tmpvar_6 * -0.161616)) + (tmpvar_7 * 0.0083333)) + ((tmpvar_7 * tmpvar_5) * -0.00019841)); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_8 * tmpvar_8); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_9 * tmpvar_9); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_10 * (gl_Color.w * _WaveAndDistance.z)); + waveMove_3.x = dot (tmpvar_11, vec4(0.024, 0.04, -0.12, 0.096)); + waveMove_3.z = dot (tmpvar_11, vec4(0.006, 0.02, -0.02, 0.1)); + vertex_1.xz = (gl_Vertex.xz - (waveMove_3.xz * _WaveAndDistance.z)); + outColor_2.xyz = ((gl_Color.xyz * mix (vec3(0.5, 0.5, 0.5), _WavingTint.xyz, vec3((dot (tmpvar_10, normalize(vec4(1.0, 1.0, 0.4, 0.2))) * 0.7)))) * 2.0); + outColor_2.w = 1.0; + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * vertex_1); + mat3 tmpvar_13; + tmpvar_13[0] = _Object2World[0].xyz; + tmpvar_13[1] = _Object2World[1].xyz; + tmpvar_13[2] = _Object2World[2].xyz; + gl_Position = tmpvar_12; + vec4 tmpvar_14; + tmpvar_14.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_14.x = tmpvar_12.z; + xlv_FOG = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.zw = vec2(0.0, 0.0); + tmpvar_15.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_15; + gl_FrontColor = outColor_2; + vec4 tmpvar_16; + tmpvar_16.w = 0.0; + tmpvar_16.xyz = (tmpvar_13 * (gl_Normal * unity_Scale.w)); + gl_TexCoord[1] = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17.w = 0.0; + tmpvar_17.xyz = (_WorldSpaceLightPos0.xyz - (_Object2World * vertex_1).xyz); + gl_TexCoord[2] = tmpvar_17; + gl_TexCoord[3] = (_LightMatrix0 * (_Object2World * vertex_1)); +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt new file mode 100644 index 000000000..eec47c4de --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-ir.txt @@ -0,0 +1,227 @@ +struct v2f { + vec4 pos; + float fog; + vec4 uv; + vec4 color; +}; +struct appdata_tree { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 color; + vec4 texcoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _Color; +uniform float _AO; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void TerrainAnimateTree ( + inout vec4 pos_16, + in float alpha_17 +) +{ + vec3 bent_18; + vec3 tmpvar_19; + tmpvar_19 = (pos_16.xyz * _Scale.xyz); + pos_16.xyz = tmpvar_19.xyz.xyz; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = pos_16.xyz.xyz; + vec3 tmpvar_21; + tmpvar_21 = (_TerrainEngineBendTree * tmpvar_20).xyz; + bent_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(alpha_17); + vec3 tmpvar_23; + tmpvar_23 = mix (pos_16.xyz, bent_18, tmpvar_22); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + pos_16.xyz = tmpvar_24.xyz.xyz; + vec4 tmpvar_25; + tmpvar_25 = Squash (pos_16); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + pos_16 = tmpvar_26; +} + +v2f vert ( + in appdata_tree v_27 +) +{ + float occ_28; + float atten_29; + int i_30; + vec4 lightColor_31; + vec4 lightDir_32; + v2f o_33; + vec3 viewpos_34; + int tmpvar_35; + tmpvar_35 = 0; + i_30 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 1.0; + atten_29 = tmpvar_36; + TerrainAnimateTree (v_27.vertex, v_27.color.w); + vec3 tmpvar_37; + tmpvar_37 = (gl_ModelViewMatrix * v_27.vertex).xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + viewpos_34 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (gl_ModelViewProjectionMatrix * v_27.vertex); + o_33.pos = tmpvar_39; + float tmpvar_40; + tmpvar_40 = o_33.pos.z; + o_33.fog = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = v_27.texcoord; + o_33.uv = tmpvar_41; + float tmpvar_42; + tmpvar_42 = _AO; + lightDir_32.w = vec4(tmpvar_42).w; + vec4 tmpvar_43; + tmpvar_43 = gl_LightModel.ambient; + lightColor_31 = tmpvar_43; + while (true) { + if (!((i_30 < 4))) { + break; + }; + vec3 tmpvar_44; + tmpvar_44 = _TerrainTreeLightDirections[i_30]; + lightDir_32.xyz = tmpvar_44.xyz.xyz; + float tmpvar_45; + tmpvar_45 = dot (lightDir_32.xyz, v_27.normal); + float tmpvar_46; + tmpvar_46 = tmpvar_45; + occ_28 = tmpvar_46; + float tmpvar_47; + tmpvar_47 = max (0.0, occ_28); + float tmpvar_48; + tmpvar_48 = tmpvar_47; + occ_28 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = (occ_28 * atten_29); + occ_28 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = (lightColor_31 + (_TerrainTreeLightColors[i_30] * occ_28)); + lightColor_31 = tmpvar_50; + int _post_incdec_tmp_51; + _post_incdec_tmp_51 = i_30; + int tmpvar_52; + tmpvar_52 = (i_30 + 1); + i_30 = tmpvar_52; + }; + float tmpvar_53; + tmpvar_53 = 1.0; + lightColor_31.w = vec4(tmpvar_53).w; + vec4 tmpvar_54; + tmpvar_54 = (lightColor_31 * _Color); + o_33.color = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 1.0; + o_33.color.w = vec4(tmpvar_55).w; + return o_33; +} + +void main () +{ + appdata_tree xlt_v_56; + v2f xl_retval_57; + vec4 tmpvar_58; + tmpvar_58 = gl_Vertex.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_v_56.vertex = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = TANGENT.xyzw; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_v_56.tangent = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = gl_Normal.xyz; + vec3 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_v_56.normal = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = gl_Color.xyzw; + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_v_56.color = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_v_56.texcoord = tmpvar_67; + v2f tmpvar_68; + tmpvar_68 = vert (xlt_v_56); + v2f tmpvar_69; + tmpvar_69 = tmpvar_68; + xl_retval_57 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = xl_retval_57.pos.xyzw; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + gl_Position = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_72.x = xl_retval_57.fog; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlv_FOG = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = xl_retval_57.uv.xyzw; + vec4 tmpvar_75; + tmpvar_75 = tmpvar_74; + gl_TexCoord[0] = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = xl_retval_57.color.xyzw; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + gl_FrontColor = tmpvar_77; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt new file mode 100644 index 000000000..cf8ea1a12 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Bark_rendertex-out.txt @@ -0,0 +1,52 @@ +varying vec4 xlv_FOG; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _Color; +uniform float _AO; +void main () +{ + vec4 lightColor_1; + vec4 lightDir_2; + vec4 tmpvar_3; + vec4 pos_4; + pos_4.w = gl_Vertex.w; + pos_4.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = pos_4.xyz; + pos_4.xyz = mix (pos_4.xyz, (_TerrainEngineBendTree * tmpvar_5).xyz, gl_Color.www); + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = mix ((pos_4.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_6 - pos_4.xyz)) * _SquashPlaneNormal.xyz)), pos_4.xyz, vec3(_SquashAmount)); + pos_4 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (gl_ModelViewProjectionMatrix * tmpvar_7); + lightDir_2.w = _AO; + lightColor_1 = gl_LightModel.ambient; + lightDir_2.xyz = _TerrainTreeLightDirections[0]; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[0] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))); + lightDir_2.xyz = _TerrainTreeLightDirections[1]; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[1] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))); + lightDir_2.xyz = _TerrainTreeLightDirections[2]; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[2] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))); + lightDir_2.xyz = _TerrainTreeLightDirections[3]; + lightColor_1.xyz = (lightColor_1 + (_TerrainTreeLightColors[3] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))).xyz; + lightColor_1.w = 1.0; + tmpvar_3.xyz = (lightColor_1 * _Color).xyz; + tmpvar_3.w = 1.0; + gl_Position = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_9.x = tmpvar_8.z; + xlv_FOG = tmpvar_9; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_FrontColor = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt new file mode 100644 index 000000000..eec47c4de --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-ir.txt @@ -0,0 +1,227 @@ +struct v2f { + vec4 pos; + float fog; + vec4 uv; + vec4 color; +}; +struct appdata_tree { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 color; + vec4 texcoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _Color; +uniform float _AO; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void TerrainAnimateTree ( + inout vec4 pos_16, + in float alpha_17 +) +{ + vec3 bent_18; + vec3 tmpvar_19; + tmpvar_19 = (pos_16.xyz * _Scale.xyz); + pos_16.xyz = tmpvar_19.xyz.xyz; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = pos_16.xyz.xyz; + vec3 tmpvar_21; + tmpvar_21 = (_TerrainEngineBendTree * tmpvar_20).xyz; + bent_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(alpha_17); + vec3 tmpvar_23; + tmpvar_23 = mix (pos_16.xyz, bent_18, tmpvar_22); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + pos_16.xyz = tmpvar_24.xyz.xyz; + vec4 tmpvar_25; + tmpvar_25 = Squash (pos_16); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + pos_16 = tmpvar_26; +} + +v2f vert ( + in appdata_tree v_27 +) +{ + float occ_28; + float atten_29; + int i_30; + vec4 lightColor_31; + vec4 lightDir_32; + v2f o_33; + vec3 viewpos_34; + int tmpvar_35; + tmpvar_35 = 0; + i_30 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 1.0; + atten_29 = tmpvar_36; + TerrainAnimateTree (v_27.vertex, v_27.color.w); + vec3 tmpvar_37; + tmpvar_37 = (gl_ModelViewMatrix * v_27.vertex).xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + viewpos_34 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = (gl_ModelViewProjectionMatrix * v_27.vertex); + o_33.pos = tmpvar_39; + float tmpvar_40; + tmpvar_40 = o_33.pos.z; + o_33.fog = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = v_27.texcoord; + o_33.uv = tmpvar_41; + float tmpvar_42; + tmpvar_42 = _AO; + lightDir_32.w = vec4(tmpvar_42).w; + vec4 tmpvar_43; + tmpvar_43 = gl_LightModel.ambient; + lightColor_31 = tmpvar_43; + while (true) { + if (!((i_30 < 4))) { + break; + }; + vec3 tmpvar_44; + tmpvar_44 = _TerrainTreeLightDirections[i_30]; + lightDir_32.xyz = tmpvar_44.xyz.xyz; + float tmpvar_45; + tmpvar_45 = dot (lightDir_32.xyz, v_27.normal); + float tmpvar_46; + tmpvar_46 = tmpvar_45; + occ_28 = tmpvar_46; + float tmpvar_47; + tmpvar_47 = max (0.0, occ_28); + float tmpvar_48; + tmpvar_48 = tmpvar_47; + occ_28 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = (occ_28 * atten_29); + occ_28 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = (lightColor_31 + (_TerrainTreeLightColors[i_30] * occ_28)); + lightColor_31 = tmpvar_50; + int _post_incdec_tmp_51; + _post_incdec_tmp_51 = i_30; + int tmpvar_52; + tmpvar_52 = (i_30 + 1); + i_30 = tmpvar_52; + }; + float tmpvar_53; + tmpvar_53 = 1.0; + lightColor_31.w = vec4(tmpvar_53).w; + vec4 tmpvar_54; + tmpvar_54 = (lightColor_31 * _Color); + o_33.color = tmpvar_54; + float tmpvar_55; + tmpvar_55 = 1.0; + o_33.color.w = vec4(tmpvar_55).w; + return o_33; +} + +void main () +{ + appdata_tree xlt_v_56; + v2f xl_retval_57; + vec4 tmpvar_58; + tmpvar_58 = gl_Vertex.xyzw; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_v_56.vertex = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = TANGENT.xyzw; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_v_56.tangent = tmpvar_61; + vec3 tmpvar_62; + tmpvar_62 = gl_Normal.xyz; + vec3 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_v_56.normal = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = gl_Color.xyzw; + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_v_56.color = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + xlt_v_56.texcoord = tmpvar_67; + v2f tmpvar_68; + tmpvar_68 = vert (xlt_v_56); + v2f tmpvar_69; + tmpvar_69 = tmpvar_68; + xl_retval_57 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = xl_retval_57.pos.xyzw; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + gl_Position = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_72.x = xl_retval_57.fog; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + xlv_FOG = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74 = xl_retval_57.uv.xyzw; + vec4 tmpvar_75; + tmpvar_75 = tmpvar_74; + gl_TexCoord[0] = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = xl_retval_57.color.xyzw; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + gl_FrontColor = tmpvar_77; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt new file mode 100644 index 000000000..cf8ea1a12 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Soft_Occlusion_Leaves_rendertex-out.txt @@ -0,0 +1,52 @@ +varying vec4 xlv_FOG; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _Color; +uniform float _AO; +void main () +{ + vec4 lightColor_1; + vec4 lightDir_2; + vec4 tmpvar_3; + vec4 pos_4; + pos_4.w = gl_Vertex.w; + pos_4.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = pos_4.xyz; + pos_4.xyz = mix (pos_4.xyz, (_TerrainEngineBendTree * tmpvar_5).xyz, gl_Color.www); + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = mix ((pos_4.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_6 - pos_4.xyz)) * _SquashPlaneNormal.xyz)), pos_4.xyz, vec3(_SquashAmount)); + pos_4 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (gl_ModelViewProjectionMatrix * tmpvar_7); + lightDir_2.w = _AO; + lightColor_1 = gl_LightModel.ambient; + lightDir_2.xyz = _TerrainTreeLightDirections[0]; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[0] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))); + lightDir_2.xyz = _TerrainTreeLightDirections[1]; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[1] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))); + lightDir_2.xyz = _TerrainTreeLightDirections[2]; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[2] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))); + lightDir_2.xyz = _TerrainTreeLightDirections[3]; + lightColor_1.xyz = (lightColor_1 + (_TerrainTreeLightColors[3] * max (0.0, dot (lightDir_2.xyz, gl_Normal)))).xyz; + lightColor_1.w = 1.0; + tmpvar_3.xyz = (lightColor_1 * _Color).xyz; + tmpvar_3.w = 1.0; + gl_Position = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_9.x = tmpvar_8.z; + xlv_FOG = tmpvar_9; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_FrontColor = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt new file mode 100644 index 000000000..c1a7bffb1 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-ir.txt @@ -0,0 +1,384 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_pack1; + vec2 hip_pack2; + vec3 normal; + vec3 vlight; + vec4 _ShadowCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _Splat3_ST; +uniform vec4 _Splat2_ST; +uniform vec4 _Splat1_ST; +uniform vec4 _Splat0_ST; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _Control_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 ShadeSH9 ( + in vec4 normal_9 +) +{ + vec3 x3_10; + float vC_11; + vec3 x2_12; + vec4 vB_13; + vec3 x1_14; + float tmpvar_15; + tmpvar_15 = dot (unity_SHAr, normal_9); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + x1_14.x = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (unity_SHAg, normal_9); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + x1_14.y = vec2(tmpvar_18).y; + float tmpvar_19; + tmpvar_19 = dot (unity_SHAb, normal_9); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + x1_14.z = vec3(tmpvar_20).z; + vec4 tmpvar_21; + tmpvar_21 = (normal_9.xyzz * normal_9.yzzx); + vB_13 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (unity_SHBr, vB_13); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + x2_12.x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (unity_SHBg, vB_13); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + x2_12.y = vec2(tmpvar_25).y; + float tmpvar_26; + tmpvar_26 = dot (unity_SHBb, vB_13); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + x2_12.z = vec3(tmpvar_27).z; + float tmpvar_28; + tmpvar_28 = ((normal_9.x * normal_9.x) - (normal_9.y * normal_9.y)); + vC_11 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (unity_SHC.xyz * vC_11); + x3_10 = tmpvar_29; + return ((x1_14 + x2_12) + x3_10); +} + +vec3 Shade4PointLights ( + in vec4 lightPosX_30, + in vec4 lightPosY_31, + in vec4 lightPosZ_32, + in vec3 lightColor0_33, + in vec3 lightColor1_34, + in vec3 lightColor2_35, + in vec3 lightColor3_36, + in vec4 lightAttenSq_37, + in vec3 pos_38, + in vec3 normal_39 +) +{ + vec3 col_40; + vec4 diff_41; + vec4 atten_42; + vec4 corr_43; + vec4 ndotl_44; + vec4 lengthSq_45; + vec4 toLightZ_46; + vec4 toLightY_47; + vec4 toLightX_48; + vec4 tmpvar_49; + tmpvar_49 = (lightPosX_30 - pos_38.x); + toLightX_48 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = (lightPosY_31 - pos_38.y); + toLightY_47 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = (lightPosZ_32 - pos_38.z); + toLightZ_46 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = vec4(0.0, 0.0, 0.0, 0.0); + lengthSq_45 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = (lengthSq_45 + (toLightX_48 * toLightX_48)); + lengthSq_45 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = (lengthSq_45 + (toLightY_47 * toLightY_47)); + lengthSq_45 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = (lengthSq_45 + (toLightZ_46 * toLightZ_46)); + lengthSq_45 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = vec4(0.0, 0.0, 0.0, 0.0); + ndotl_44 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = (ndotl_44 + (toLightX_48 * normal_39.x)); + ndotl_44 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = (ndotl_44 + (toLightY_47 * normal_39.y)); + ndotl_44 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = (ndotl_44 + (toLightZ_46 * normal_39.z)); + ndotl_44 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = inversesqrt (lengthSq_45); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + corr_43 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl_44 * corr_43)); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + ndotl_44 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = (1.0 / (1.0 + (lengthSq_45 * lightAttenSq_37))); + atten_42 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = (ndotl_44 * atten_42); + diff_41 = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = vec3(0.0, 0.0, 0.0); + col_40 = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = (col_40 + (lightColor0_33 * diff_41.x)); + col_40 = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = (col_40 + (lightColor1_34 * diff_41.y)); + col_40 = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = (col_40 + (lightColor2_35 * diff_41.z)); + col_40 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = (col_40 + (lightColor3_36 * diff_41.w)); + col_40 = tmpvar_70; + return col_40; +} + +void PositionFog ( + in vec4 v_71, + out vec4 pos_72, + out float fog_73 +) +{ + vec4 tmpvar_74; + tmpvar_74 = (gl_ModelViewProjectionMatrix * v_71); + pos_72 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = pos_72.z; + fog_73 = tmpvar_75; +} + +vec4 ComputeScreenPos ( + in vec4 pos_76 +) +{ + vec4 o_77; + vec4 tmpvar_78; + tmpvar_78 = (pos_76 * 0.5); + o_77 = tmpvar_78; + vec2 tmpvar_79; + tmpvar_79.x = o_77.x; + tmpvar_79.y = (o_77.y * _ProjectionParams.x); + vec2 tmpvar_80; + tmpvar_80 = (tmpvar_79 + o_77.w); + o_77.xy = tmpvar_80.xy.xy; + vec2 tmpvar_81; + tmpvar_81 = pos_76.zw; + o_77.zw = tmpvar_81.xxxy.zw; + return o_77; +} + +v2f_surf vert_surf ( + in appdata_full v_82 +) +{ + vec3 worldPos_83; + vec3 shlight_84; + vec3 worldN_85; + v2f_surf o_86; + PositionFog (v_82.vertex, o_86.pos, o_86.fog); + vec2 tmpvar_87; + tmpvar_87 = ((v_82.texcoord.xy * _Control_ST.xy) + _Control_ST.zw); + o_86.hip_pack0.xy = tmpvar_87.xy.xy; + vec2 tmpvar_88; + tmpvar_88 = ((v_82.texcoord.xy * _Splat0_ST.xy) + _Splat0_ST.zw); + o_86.hip_pack0.zw = tmpvar_88.xxxy.zw; + vec2 tmpvar_89; + tmpvar_89 = ((v_82.texcoord.xy * _Splat1_ST.xy) + _Splat1_ST.zw); + o_86.hip_pack1.xy = tmpvar_89.xy.xy; + vec2 tmpvar_90; + tmpvar_90 = ((v_82.texcoord.xy * _Splat2_ST.xy) + _Splat2_ST.zw); + o_86.hip_pack1.zw = tmpvar_90.xxxy.zw; + vec2 tmpvar_91; + tmpvar_91 = ((v_82.texcoord.xy * _Splat3_ST.xy) + _Splat3_ST.zw); + o_86.hip_pack2 = tmpvar_91.xy.xy; + mat3 tmpvar_92; + tmpvar_92 = xll_constructMat3 (_Object2World); + vec3 tmpvar_93; + tmpvar_93 = (tmpvar_92 * (v_82.normal * unity_Scale.w)); + worldN_85 = tmpvar_93; + vec3 tmpvar_94; + tmpvar_94 = worldN_85; + o_86.normal = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95.w = 1.0; + tmpvar_95.xyz = worldN_85.xyz; + vec3 tmpvar_96; + tmpvar_96 = ShadeSH9 (tmpvar_95); + vec3 tmpvar_97; + tmpvar_97 = tmpvar_96; + shlight_84 = tmpvar_97; + vec3 tmpvar_98; + tmpvar_98 = shlight_84; + o_86.vlight = tmpvar_98; + vec3 tmpvar_99; + tmpvar_99 = (_Object2World * v_82.vertex).xyz; + worldPos_83 = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos_83, worldN_85); + vec3 tmpvar_101; + tmpvar_101 = (o_86.vlight + tmpvar_100); + o_86.vlight = tmpvar_101; + vec4 tmpvar_102; + tmpvar_102 = ComputeScreenPos (o_86.pos); + vec4 tmpvar_103; + tmpvar_103 = tmpvar_102; + o_86._ShadowCoord = tmpvar_103; + return o_86; +} + +void main () +{ + appdata_full xlt_v_104; + v2f_surf xl_retval_105; + vec4 tmpvar_106; + tmpvar_106 = gl_Vertex.xyzw; + vec4 tmpvar_107; + tmpvar_107 = tmpvar_106; + xlt_v_104.vertex = tmpvar_107; + vec4 tmpvar_108; + tmpvar_108 = TANGENT.xyzw; + vec4 tmpvar_109; + tmpvar_109 = tmpvar_108; + xlt_v_104.tangent = tmpvar_109; + vec3 tmpvar_110; + tmpvar_110 = gl_Normal.xyz; + vec3 tmpvar_111; + tmpvar_111 = tmpvar_110; + xlt_v_104.normal = tmpvar_111; + vec4 tmpvar_112; + tmpvar_112 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_113; + tmpvar_113 = tmpvar_112; + xlt_v_104.texcoord = tmpvar_113; + vec4 tmpvar_114; + tmpvar_114 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_115; + tmpvar_115 = tmpvar_114; + xlt_v_104.texcoord1 = tmpvar_115; + vec4 tmpvar_116; + tmpvar_116 = gl_Color.xyzw; + vec4 tmpvar_117; + tmpvar_117 = tmpvar_116; + xlt_v_104.color = tmpvar_117; + v2f_surf tmpvar_118; + tmpvar_118 = vert_surf (xlt_v_104); + v2f_surf tmpvar_119; + tmpvar_119 = tmpvar_118; + xl_retval_105 = tmpvar_119; + vec4 tmpvar_120; + tmpvar_120 = xl_retval_105.pos.xyzw; + vec4 tmpvar_121; + tmpvar_121 = tmpvar_120; + gl_Position = tmpvar_121; + vec4 tmpvar_122; + tmpvar_122.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_122.x = xl_retval_105.fog; + vec4 tmpvar_123; + tmpvar_123 = tmpvar_122; + xlv_FOG = tmpvar_123; + vec4 tmpvar_124; + tmpvar_124 = xl_retval_105.hip_pack0.xyzw; + vec4 tmpvar_125; + tmpvar_125 = tmpvar_124; + gl_TexCoord[0] = tmpvar_125; + vec4 tmpvar_126; + tmpvar_126 = xl_retval_105.hip_pack1.xyzw; + vec4 tmpvar_127; + tmpvar_127 = tmpvar_126; + gl_TexCoord[1] = tmpvar_127; + vec4 tmpvar_128; + tmpvar_128.zw = vec2(0.0, 0.0); + tmpvar_128.xy = xl_retval_105.hip_pack2.xy; + vec4 tmpvar_129; + tmpvar_129 = tmpvar_128; + gl_TexCoord[2] = tmpvar_129; + vec4 tmpvar_130; + tmpvar_130.w = 0.0; + tmpvar_130.xyz = xl_retval_105.normal.xyz; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + gl_TexCoord[3] = tmpvar_131; + vec4 tmpvar_132; + tmpvar_132.w = 0.0; + tmpvar_132.xyz = xl_retval_105.vlight.xyz; + vec4 tmpvar_133; + tmpvar_133 = tmpvar_132; + gl_TexCoord[4] = tmpvar_133; + vec4 tmpvar_134; + tmpvar_134 = xl_retval_105._ShadowCoord.xyzw; + vec4 tmpvar_135; + tmpvar_135 = tmpvar_134; + gl_TexCoord[5] = tmpvar_135; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt new file mode 100644 index 000000000..1116de908 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-AddPass-out.txt @@ -0,0 +1,95 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _Splat3_ST; +uniform vec4 _Splat2_ST; +uniform vec4 _Splat1_ST; +uniform vec4 _Splat0_ST; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _Control_ST; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); + tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _Control_ST.xy) + _Control_ST.zw); + tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _Splat0_ST.xy) + _Splat0_ST.zw); + tmpvar_2.xy = ((gl_MultiTexCoord0.xy * _Splat1_ST.xy) + _Splat1_ST.zw); + tmpvar_2.zw = ((gl_MultiTexCoord0.xy * _Splat2_ST.xy) + _Splat2_ST.zw); + mat3 tmpvar_4; + tmpvar_4[0] = _Object2World[0].xyz; + tmpvar_4[1] = _Object2World[1].xyz; + tmpvar_4[2] = _Object2World[2].xyz; + vec3 tmpvar_5; + tmpvar_5 = (tmpvar_4 * (gl_Normal * unity_Scale.w)); + vec4 tmpvar_6; + tmpvar_6.w = 1.0; + tmpvar_6.xyz = tmpvar_5; + vec3 x2_7; + vec3 x1_8; + x1_8.x = dot (unity_SHAr, tmpvar_6); + x1_8.y = dot (unity_SHAg, tmpvar_6); + x1_8.z = dot (unity_SHAb, tmpvar_6); + vec4 tmpvar_9; + tmpvar_9 = (tmpvar_5.xyzz * tmpvar_5.yzzx); + x2_7.x = dot (unity_SHBr, tmpvar_9); + x2_7.y = dot (unity_SHBg, tmpvar_9); + x2_7.z = dot (unity_SHBb, tmpvar_9); + vec3 tmpvar_10; + tmpvar_10 = (_Object2World * gl_Vertex).xyz; + vec4 tmpvar_11; + tmpvar_11 = (unity_4LightPosX0 - tmpvar_10.x); + vec4 tmpvar_12; + tmpvar_12 = (unity_4LightPosY0 - tmpvar_10.y); + vec4 tmpvar_13; + tmpvar_13 = (unity_4LightPosZ0 - tmpvar_10.z); + vec4 tmpvar_14; + tmpvar_14 = (((tmpvar_11 * tmpvar_11) + (tmpvar_12 * tmpvar_12)) + (tmpvar_13 * tmpvar_13)); + vec4 tmpvar_15; + tmpvar_15 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_11 * tmpvar_5.x) + (tmpvar_12 * tmpvar_5.y)) + (tmpvar_13 * tmpvar_5.z)) * inversesqrt(tmpvar_14))) * (1.0/((1.0 + (tmpvar_14 * unity_4LightAtten0))))); + vec4 o_16; + vec4 tmpvar_17; + tmpvar_17 = (tmpvar_3 * 0.5); + vec2 tmpvar_18; + tmpvar_18.x = tmpvar_17.x; + tmpvar_18.y = (tmpvar_17.y * _ProjectionParams.x); + o_16.xy = (tmpvar_18 + tmpvar_17.w); + o_16.zw = tmpvar_3.zw; + gl_Position = tmpvar_3; + vec4 tmpvar_19; + tmpvar_19.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_19.x = tmpvar_3.z; + xlv_FOG = tmpvar_19; + gl_TexCoord[0] = tmpvar_1; + gl_TexCoord[1] = tmpvar_2; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = ((gl_MultiTexCoord0.xy * _Splat3_ST.xy) + _Splat3_ST.zw); + gl_TexCoord[2] = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = tmpvar_5; + gl_TexCoord[3] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (((x1_8 + x2_7) + (unity_SHC.xyz * ((tmpvar_5.x * tmpvar_5.x) - (tmpvar_5.y * tmpvar_5.y)))) + ((((unity_LightColor0 * tmpvar_15.x) + (unity_LightColor1 * tmpvar_15.y)) + (unity_LightColor2 * tmpvar_15.z)) + (unity_LightColor3 * tmpvar_15.w))); + gl_TexCoord[4] = tmpvar_22; + gl_TexCoord[5] = o_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt new file mode 100644 index 000000000..dfcdf2ced --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-ir.txt @@ -0,0 +1,175 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_pack1; + vec2 hip_pack2; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _Splat3_ST; +uniform vec4 _Splat2_ST; +uniform vec4 _Splat1_ST; +uniform vec4 _Splat0_ST; +uniform vec4 _ProjectionParams; +uniform vec4 _Control_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _Control_ST.xy) + _Control_ST.zw); + o_13.hip_pack0.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = ((v_12.texcoord.xy * _Splat0_ST.xy) + _Splat0_ST.zw); + o_13.hip_pack0.zw = tmpvar_15.xxxy.zw; + vec2 tmpvar_16; + tmpvar_16 = ((v_12.texcoord.xy * _Splat1_ST.xy) + _Splat1_ST.zw); + o_13.hip_pack1.xy = tmpvar_16.xy.xy; + vec2 tmpvar_17; + tmpvar_17 = ((v_12.texcoord.xy * _Splat2_ST.xy) + _Splat2_ST.zw); + o_13.hip_pack1.zw = tmpvar_17.xxxy.zw; + vec2 tmpvar_18; + tmpvar_18 = ((v_12.texcoord.xy * _Splat3_ST.xy) + _Splat3_ST.zw); + o_13.hip_pack2 = tmpvar_18.xy.xy; + vec4 tmpvar_19; + tmpvar_19 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + o_13.hip_screen = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ((v_12.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_13.hip_lmapFade.xy = tmpvar_21.xy.xy; + float tmpvar_22; + tmpvar_22 = ((-((gl_ModelViewMatrix * v_12.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_13.hip_lmapFade.z = vec3(tmpvar_22).z; + return o_13; +} + +void main () +{ + appdata_full xlt_v_23; + v2f_surf xl_retval_24; + vec4 tmpvar_25; + tmpvar_25 = gl_Vertex.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_23.vertex = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = TANGENT.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_23.tangent = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = gl_Normal.xyz; + vec3 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_23.normal = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_23.texcoord = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_23.texcoord1 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_Color.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_23.color = tmpvar_36; + v2f_surf tmpvar_37; + tmpvar_37 = vert_surf (xlt_v_23); + v2f_surf tmpvar_38; + tmpvar_38 = tmpvar_37; + xl_retval_24 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_24.pos.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_Position = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_41.x = xl_retval_24.fog; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlv_FOG = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = xl_retval_24.hip_pack0.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_TexCoord[0] = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_24.hip_pack1.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[1] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.zw = vec2(0.0, 0.0); + tmpvar_47.xy = xl_retval_24.hip_pack2.xy; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[2] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = xl_retval_24.hip_screen.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[3] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_24.hip_lmapFade.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[4] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt similarity index 63% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt index 88957a7a7..b3d6c3868 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_TerrainEngine_Splatmap_Lightmap-FirstPass1-out.txt @@ -18,32 +18,31 @@ void main () tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _Splat0_ST.xy) + _Splat0_ST.zw); tmpvar_2.xy = ((gl_MultiTexCoord0.xy * _Splat1_ST.xy) + _Splat1_ST.zw); tmpvar_2.zw = ((gl_MultiTexCoord0.xy * _Splat2_ST.xy) + _Splat2_ST.zw); - vec4 o_i0; - vec4 tmpvar_5; - tmpvar_5 = (tmpvar_4 * 0.5); - o_i0 = tmpvar_5; - vec2 tmpvar_6; - tmpvar_6.x = tmpvar_5.x; - tmpvar_6.y = (tmpvar_5.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_6 + tmpvar_5.w); - o_i0.zw = tmpvar_4.zw; + vec4 o_5; + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_4 * 0.5); + vec2 tmpvar_7; + tmpvar_7.x = tmpvar_6.x; + tmpvar_7.y = (tmpvar_6.y * _ProjectionParams.x); + o_5.xy = (tmpvar_7 + tmpvar_6.w); + o_5.zw = tmpvar_4.zw; tmpvar_3.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); tmpvar_3.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); gl_Position = tmpvar_4; - vec4 tmpvar_7; - tmpvar_7.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_7.x = tmpvar_4.z; - xlv_FOG = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_8.x = tmpvar_4.z; + xlv_FOG = tmpvar_8; gl_TexCoord[0] = tmpvar_1; gl_TexCoord[1] = tmpvar_2; - vec4 tmpvar_8; - tmpvar_8.zw = vec2(0.0, 0.0); - tmpvar_8.xy = ((gl_MultiTexCoord0.xy * _Splat3_ST.xy) + _Splat3_ST.zw); - gl_TexCoord[2] = tmpvar_8; - gl_TexCoord[3] = o_i0; vec4 tmpvar_9; - tmpvar_9.w = 0.0; - tmpvar_9.xyz = tmpvar_3; - gl_TexCoord[4] = tmpvar_9; + tmpvar_9.zw = vec2(0.0, 0.0); + tmpvar_9.xy = ((gl_MultiTexCoord0.xy * _Splat3_ST.xy) + _Splat3_ST.zw); + gl_TexCoord[2] = tmpvar_9; + gl_TexCoord[3] = o_5; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = tmpvar_3; + gl_TexCoord[4] = tmpvar_10; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Bark_Shader_Rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt new file mode 100644 index 000000000..8dcf9a2c7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-ir.txt @@ -0,0 +1,126 @@ +struct v2f { + vec4 pos; + vec2 uv; + vec3 color; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +v2f vert ( + in appdata_full v_1 +) +{ + float diff_2; + vec3 lightDir_3; + int i_4; + vec3 lightColor_5; + v2f o_6; + int tmpvar_7; + tmpvar_7 = 0; + i_4 = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_6.pos = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9 = v_1.texcoord.xy; + o_6.uv = tmpvar_9; + vec3 tmpvar_10; + tmpvar_10 = gl_LightModel.ambient.xyz; + lightColor_5 = tmpvar_10; + while (true) { + if (!((i_4 < 4))) { + break; + }; + vec3 tmpvar_11; + tmpvar_11 = _TerrainTreeLightDirections[i_4]; + lightDir_3 = tmpvar_11.xyz.xyz; + float tmpvar_12; + tmpvar_12 = dot (lightDir_3.xyz, v_1.normal); + float tmpvar_13; + tmpvar_13 = max (0.0, tmpvar_12); + float tmpvar_14; + tmpvar_14 = tmpvar_13; + diff_2 = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = (_TerrainTreeLightColors[i_4] * diff_2).xyz; + vec3 tmpvar_16; + tmpvar_16 = (lightColor_5 + tmpvar_15); + lightColor_5 = tmpvar_16; + int _post_incdec_tmp_17; + _post_incdec_tmp_17 = i_4; + int tmpvar_18; + tmpvar_18 = (i_4 + 1); + i_4 = tmpvar_18; + }; + vec3 tmpvar_19; + tmpvar_19 = (lightColor_5 * v_1.color.w); + o_6.color = tmpvar_19; + return o_6; +} + +void main () +{ + appdata_full xlt_v_20; + v2f xl_retval_21; + vec4 tmpvar_22; + tmpvar_22 = gl_Vertex.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_20.vertex = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = TANGENT.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_20.tangent = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = gl_Normal.xyz; + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_20.normal = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_20.texcoord = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_20.texcoord1 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_Color.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_20.color = tmpvar_33; + v2f tmpvar_34; + tmpvar_34 = vert (xlt_v_20); + v2f tmpvar_35; + tmpvar_35 = tmpvar_34; + xl_retval_21 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = xl_retval_21.pos.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + gl_Position = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38.zw = vec2(0.0, 0.0); + tmpvar_38.xy = xl_retval_21.uv.xy; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + gl_TexCoord[0] = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40.w = 0.0; + tmpvar_40.xyz = xl_retval_21.color.xyz; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[1] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt new file mode 100644 index 000000000..464ac5077 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Bark_Shader_Rendertex-out.txt @@ -0,0 +1,21 @@ +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +void main () +{ + vec3 lightColor_1; + lightColor_1 = gl_LightModel.ambient.xyz; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[0] * max (0.0, dot (_TerrainTreeLightDirections[0], gl_Normal))).xyz); + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[1] * max (0.0, dot (_TerrainTreeLightDirections[1], gl_Normal))).xyz); + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[2] * max (0.0, dot (_TerrainTreeLightDirections[2], gl_Normal))).xyz); + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[3] * max (0.0, dot (_TerrainTreeLightDirections[3], gl_Normal))).xyz); + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_2; + tmpvar_2.zw = vec2(0.0, 0.0); + tmpvar_2.xy = gl_MultiTexCoord0.xy; + gl_TexCoord[0] = tmpvar_2; + vec4 tmpvar_3; + tmpvar_3.w = 0.0; + tmpvar_3.xyz = (lightColor_1 * gl_Color.w); + gl_TexCoord[1] = tmpvar_3; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Leaf_Shader_Rendertex-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt new file mode 100644 index 000000000..33f0af0e7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-ir.txt @@ -0,0 +1,185 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f { + vec4 pos; + vec2 uv; + vec3 color; +}; +attribute vec4 TANGENT; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +void ExpandBillboard ( + in mat4 mat_1, + inout vec4 pos_2, + inout vec3 normal_3, + inout vec4 tangent_4 +) +{ + vec3 tanb_5; + vec3 norb_6; + float isBillboard_7; + float tmpvar_8; + tmpvar_8 = abs (tangent_4.w); + float tmpvar_9; + tmpvar_9 = (1.0 - tmpvar_8); + isBillboard_7 = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = normal_3.xyz; + vec4 tmpvar_11; + tmpvar_11 = normalize ((tmpvar_10 * mat_1)); + vec3 tmpvar_12; + tmpvar_12 = tmpvar_11.xyz; + vec3 tmpvar_13; + tmpvar_13 = tmpvar_12; + norb_6 = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14.yw = vec2(0.0, 0.0); + tmpvar_14.x = normal_3.z; + tmpvar_14.z = -(normal_3.x); + vec4 tmpvar_15; + tmpvar_15 = normalize ((tmpvar_14 * mat_1)); + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15.xyz; + vec3 tmpvar_17; + tmpvar_17 = tmpvar_16; + tanb_5 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = (pos_2 + ((tangent_4 * mat_1) * isBillboard_7)); + pos_2 = tmpvar_18; + vec3 tmpvar_19; + tmpvar_19 = vec3(isBillboard_7); + vec3 tmpvar_20; + tmpvar_20 = mix (normal_3, norb_6, tmpvar_19); + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + normal_3 = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = -1.0; + tmpvar_22.xyz = tanb_5.xyz; + vec4 tmpvar_23; + tmpvar_23 = vec4(isBillboard_7); + vec4 tmpvar_24; + tmpvar_24 = mix (tangent_4, tmpvar_22, tmpvar_23); + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + tangent_4 = tmpvar_25; +} + +v2f vert ( + in appdata_full v_26 +) +{ + float diff_27; + vec3 lightDir_28; + int i_29; + vec3 lightColor_30; + v2f o_31; + int tmpvar_32; + tmpvar_32 = 0; + i_29 = tmpvar_32; + ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v_26.vertex, v_26.normal, v_26.tangent); + vec4 tmpvar_33; + tmpvar_33 = (gl_ModelViewProjectionMatrix * v_26.vertex); + o_31.pos = tmpvar_33; + vec2 tmpvar_34; + tmpvar_34 = v_26.texcoord.xy; + o_31.uv = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = gl_LightModel.ambient.xyz; + lightColor_30 = tmpvar_35; + while (true) { + if (!((i_29 < 4))) { + break; + }; + vec3 tmpvar_36; + tmpvar_36 = _TerrainTreeLightDirections[i_29]; + lightDir_28 = tmpvar_36.xyz.xyz; + float tmpvar_37; + tmpvar_37 = dot (lightDir_28.xyz, v_26.normal); + float tmpvar_38; + tmpvar_38 = max (0.0, ((tmpvar_37 * 0.5) + 0.5)); + float tmpvar_39; + tmpvar_39 = tmpvar_38; + diff_27 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (_TerrainTreeLightColors[i_29] * diff_27).xyz; + vec3 tmpvar_41; + tmpvar_41 = (lightColor_30 + tmpvar_40); + lightColor_30 = tmpvar_41; + int _post_incdec_tmp_42; + _post_incdec_tmp_42 = i_29; + int tmpvar_43; + tmpvar_43 = (i_29 + 1); + i_29 = tmpvar_43; + }; + vec3 tmpvar_44; + tmpvar_44 = (lightColor_30 * v_26.color.w); + o_31.color = tmpvar_44; + return o_31; +} + +void main () +{ + appdata_full xlt_v_45; + v2f xl_retval_46; + vec4 tmpvar_47; + tmpvar_47 = gl_Vertex.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_45.vertex = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = TANGENT.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_45.tangent = tmpvar_50; + vec3 tmpvar_51; + tmpvar_51 = gl_Normal.xyz; + vec3 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_45.normal = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_v_45.texcoord = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlt_v_45.texcoord1 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = gl_Color.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlt_v_45.color = tmpvar_58; + v2f tmpvar_59; + tmpvar_59 = vert (xlt_v_45); + v2f tmpvar_60; + tmpvar_60 = tmpvar_59; + xl_retval_46 = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = xl_retval_46.pos.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_Position = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.zw = vec2(0.0, 0.0); + tmpvar_63.xy = xl_retval_46.uv.xy; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[0] = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65.w = 0.0; + tmpvar_65.xyz = xl_retval_46.color.xyz; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + gl_TexCoord[1] = tmpvar_66; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt new file mode 100644 index 000000000..35f03a81b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Leaf_Shader_Rendertex-out.txt @@ -0,0 +1,29 @@ +attribute vec4 TANGENT; +uniform vec3 _TerrainTreeLightDirections[4]; +uniform vec4 _TerrainTreeLightColors[4]; +void main () +{ + vec3 lightColor_1; + float tmpvar_2; + tmpvar_2 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_3; + tmpvar_3.w = 0.0; + tmpvar_3.xyz = gl_Normal; + vec3 tmpvar_4; + tmpvar_4 = mix (gl_Normal, normalize((tmpvar_3 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_2)); + lightColor_1 = gl_LightModel.ambient.xyz; + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[0] * max (0.0, ((dot (_TerrainTreeLightDirections[0], tmpvar_4) * 0.5) + 0.5))).xyz); + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[1] * max (0.0, ((dot (_TerrainTreeLightDirections[1], tmpvar_4) * 0.5) + 0.5))).xyz); + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[2] * max (0.0, ((dot (_TerrainTreeLightDirections[2], tmpvar_4) * 0.5) + 0.5))).xyz); + lightColor_1 = (lightColor_1 + (_TerrainTreeLightColors[3] * max (0.0, ((dot (_TerrainTreeLightDirections[3], tmpvar_4) * 0.5) + 0.5))).xyz); + gl_Position = (gl_ModelViewProjectionMatrix * (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_2))); + vec4 tmpvar_5; + tmpvar_5.zw = vec2(0.0, 0.0); + tmpvar_5.xy = gl_MultiTexCoord0.xy; + gl_TexCoord[0] = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 0.0; + tmpvar_6.xyz = (lightColor_1 * gl_Color.w); + gl_TexCoord[1] = tmpvar_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt new file mode 100644 index 000000000..2a8f700e8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-ir.txt @@ -0,0 +1,395 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +vec4 TriangleWave ( + in vec4 x_16 +) +{ + vec4 tmpvar_17; + tmpvar_17 = fract ((x_16 + 0.5)); + vec4 tmpvar_18; + tmpvar_18 = abs (((tmpvar_17 * 2.0) - 1.0)); + return tmpvar_18; +} + +vec4 SmoothCurve ( + in vec4 x_19 +) +{ + return ((x_19 * x_19) * (3.0 - (2.0 * x_19))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_20 +) +{ + vec4 tmpvar_21; + tmpvar_21 = TriangleWave (x_20); + vec4 tmpvar_22; + tmpvar_22 = SmoothCurve (tmpvar_21); + return tmpvar_22; +} + +vec4 AnimateVertex ( + in vec4 pos_23, + in vec3 normal_24, + in vec4 animParams_25 +) +{ + vec3 bend_26; + vec2 vWavesSum_27; + vec4 vWaves_28; + vec2 vWavesIn_29; + float fVtxPhase_30; + float fBranchPhase_31; + float fObjPhase_32; + float fBranchAmp_33; + float fDetailAmp_34; + float tmpvar_35; + tmpvar_35 = 0.1; + fDetailAmp_34 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.3; + fBranchAmp_33 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + fObjPhase_32 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = (fObjPhase_32 + animParams_25.x); + fBranchPhase_31 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = vec3((animParams_25.y + fBranchPhase_31)); + float tmpvar_41; + tmpvar_41 = dot (pos_23.xyz, tmpvar_40); + float tmpvar_42; + tmpvar_42 = tmpvar_41; + fVtxPhase_30 = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43.x = fVtxPhase_30; + tmpvar_43.y = fBranchPhase_31; + vec2 tmpvar_44; + tmpvar_44 = (_TimeX + tmpvar_43); + vWavesIn_29 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = fract ((vWavesIn_29.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_46; + tmpvar_46 = ((tmpvar_45 * 2.0) - 1.0); + vWaves_28 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = SmoothTriangleWave (vWaves_28); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + vWaves_28 = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = (vWaves_28.xz + vWaves_28.yw); + vWavesSum_27 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = ((animParams_25.y * fDetailAmp_34) * normal_24.xyz); + bend_26 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = (animParams_25.w * fBranchAmp_33); + bend_26.y = vec2(tmpvar_51).y; + vec3 tmpvar_52; + tmpvar_52 = (pos_23.xyz + (((vWavesSum_27.xyx * bend_26) + ((_Wind.xyz * vWavesSum_27.y) * animParams_25.w)) * _Wind.w)); + pos_23.xyz = tmpvar_52.xyz.xyz; + vec3 tmpvar_53; + tmpvar_53 = (pos_23.xyz + (animParams_25.z * _Wind.xyz)); + pos_23.xyz = tmpvar_53.xyz.xyz; + return pos_23; +} + +void TreeVertBark ( + inout appdata_full v_54 +) +{ + vec3 tmpvar_55; + tmpvar_55 = (v_54.vertex.xyz * _Scale.xyz); + v_54.vertex.xyz = tmpvar_55.xyz.xyz; + vec4 tmpvar_56; + tmpvar_56.xy = v_54.color.xy.xy; + tmpvar_56.zw = v_54.texcoord1.xy.xy; + vec4 tmpvar_57; + tmpvar_57 = AnimateVertex (v_54.vertex, v_54.normal, tmpvar_56); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + v_54.vertex = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = Squash (v_54.vertex); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + v_54.vertex = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.xyz = (v_54.color.w * _Color.xyz).xyz; + tmpvar_61.w = _Color.w; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + v_54.color = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = normalize (v_54.normal); + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + v_54.normal = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = normalize (v_54.tangent.xyz); + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + v_54.tangent.xyz = tmpvar_66.xyz.xyz; +} + +void PositionFog ( + in vec4 v_67, + out vec4 pos_68, + out float fog_69 +) +{ + vec4 tmpvar_70; + tmpvar_70 = (gl_ModelViewProjectionMatrix * v_67); + pos_68 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = pos_68.z; + fog_69 = tmpvar_71; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_72 +) +{ + vec3 objSpaceCameraPos_73; + vec4 tmpvar_74; + tmpvar_74.w = 1.0; + tmpvar_74.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_75; + tmpvar_75 = ((_World2Object * tmpvar_74).xyz * unity_Scale.w); + objSpaceCameraPos_73 = tmpvar_75; + return (objSpaceCameraPos_73 - v_72.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_76 +) +{ + vec3 objSpaceLightPos_77; + vec3 tmpvar_78; + tmpvar_78 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_77 = tmpvar_78; + return ((objSpaceLightPos_77.xyz * unity_Scale.w) - v_76.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_79 +) +{ + mat3 rotation_80; + vec3 binormal_81; + v2f_surf o_82; + TreeVertBark (v_79); + PositionFog (v_79.vertex, o_82.pos, o_82.fog); + vec2 tmpvar_83; + tmpvar_83 = ((v_79.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_82.hip_pack0 = tmpvar_83.xy.xy; + vec4 tmpvar_84; + tmpvar_84 = v_79.color; + o_82.lop_color = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = cross (v_79.normal, v_79.tangent.xyz); + vec3 tmpvar_86; + tmpvar_86 = (tmpvar_85 * v_79.tangent.w); + binormal_81 = tmpvar_86; + mat3 tmpvar_87; + float tmpvar_88; + tmpvar_88 = v_79.tangent.x; + tmpvar_87[0].x = tmpvar_88; + float tmpvar_89; + tmpvar_89 = binormal_81.x; + tmpvar_87[0].y = tmpvar_89; + float tmpvar_90; + tmpvar_90 = v_79.normal.x; + tmpvar_87[0].z = tmpvar_90; + float tmpvar_91; + tmpvar_91 = v_79.tangent.y; + tmpvar_87[1].x = tmpvar_91; + float tmpvar_92; + tmpvar_92 = binormal_81.y; + tmpvar_87[1].y = tmpvar_92; + float tmpvar_93; + tmpvar_93 = v_79.normal.y; + tmpvar_87[1].z = tmpvar_93; + float tmpvar_94; + tmpvar_94 = v_79.tangent.z; + tmpvar_87[2].x = tmpvar_94; + float tmpvar_95; + tmpvar_95 = binormal_81.z; + tmpvar_87[2].y = tmpvar_95; + float tmpvar_96; + tmpvar_96 = v_79.normal.z; + tmpvar_87[2].z = tmpvar_96; + mat3 tmpvar_97; + tmpvar_97 = (tmpvar_87); + rotation_80 = (tmpvar_97); + vec3 tmpvar_98; + tmpvar_98 = ObjSpaceLightDir (v_79.vertex); + vec3 tmpvar_99; + tmpvar_99 = (rotation_80 * tmpvar_98); + o_82.lightDir = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = ObjSpaceViewDir (v_79.vertex); + vec3 tmpvar_101; + tmpvar_101 = (rotation_80 * tmpvar_100); + o_82.viewDir = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = (_LightMatrix0 * (_Object2World * v_79.vertex)).xyz; + o_82._LightCoord = tmpvar_102; + return o_82; +} + +void main () +{ + appdata_full xlt_v_103; + v2f_surf xl_retval_104; + vec4 tmpvar_105; + tmpvar_105 = gl_Vertex.xyzw; + vec4 tmpvar_106; + tmpvar_106 = tmpvar_105; + xlt_v_103.vertex = tmpvar_106; + vec4 tmpvar_107; + tmpvar_107 = TANGENT.xyzw; + vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + xlt_v_103.tangent = tmpvar_108; + vec3 tmpvar_109; + tmpvar_109 = gl_Normal.xyz; + vec3 tmpvar_110; + tmpvar_110 = tmpvar_109; + xlt_v_103.normal = tmpvar_110; + vec4 tmpvar_111; + tmpvar_111 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_v_103.texcoord = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_v_103.texcoord1 = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115 = gl_Color.xyzw; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_v_103.color = tmpvar_116; + v2f_surf tmpvar_117; + tmpvar_117 = vert_surf (xlt_v_103); + v2f_surf tmpvar_118; + tmpvar_118 = tmpvar_117; + xl_retval_104 = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = xl_retval_104.pos.xyzw; + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + gl_Position = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_121.x = xl_retval_104.fog; + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + xlv_FOG = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123.zw = vec2(0.0, 0.0); + tmpvar_123.xy = xl_retval_104.hip_pack0.xy; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + gl_TexCoord[0] = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = xl_retval_104.lop_color.xyzw; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_FrontColor = tmpvar_126; + vec4 tmpvar_127; + tmpvar_127.w = 0.0; + tmpvar_127.xyz = xl_retval_104.lightDir.xyz; + vec4 tmpvar_128; + tmpvar_128 = tmpvar_127; + gl_TexCoord[1] = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129.w = 0.0; + tmpvar_129.xyz = xl_retval_104.viewDir.xyz; + vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + gl_TexCoord[2] = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131.w = 0.0; + tmpvar_131.xyz = xl_retval_104._LightCoord.xyz; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + gl_TexCoord[3] = tmpvar_132; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt new file mode 100644 index 000000000..d78cfb7c9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader-out.txt @@ -0,0 +1,96 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_1.w = gl_Vertex.w; + tmpvar_2.w = TANGENT.w; + tmpvar_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 pos_3; + pos_3.w = tmpvar_1.w; + vec3 bend_4; + float tmpvar_5; + tmpvar_5 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_6; + tmpvar_6.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_5))); + tmpvar_6.y = tmpvar_5; + vec4 tmpvar_7; + tmpvar_7 = abs(((fract((((fract(((_TimeX + tmpvar_6).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_8; + tmpvar_8 = ((tmpvar_7 * tmpvar_7) * (3.0 - (2.0 * tmpvar_7))); + vec2 tmpvar_9; + tmpvar_9 = (tmpvar_8.xz + tmpvar_8.yw); + bend_4.xz = ((gl_Color.y * 0.1) * gl_Normal).xz; + bend_4.y = (gl_MultiTexCoord1.y * 0.3); + pos_3.xyz = (tmpvar_1.xyz + (((tmpvar_9.xyx * bend_4) + ((_Wind.xyz * tmpvar_9.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_3.xyz = (pos_3.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_10; + tmpvar_10.xz = vec2(0.0, 0.0); + tmpvar_10.y = _SquashPlaneNormal.w; + vec3 tmpvar_11; + tmpvar_11 = mix ((pos_3.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_10 - pos_3.xyz)) * _SquashPlaneNormal.xyz)), pos_3.xyz, vec3(_SquashAmount)); + vec4 tmpvar_12; + tmpvar_12.w = 1.0; + tmpvar_12.xyz = tmpvar_11; + tmpvar_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13.xyz = (gl_Color.w * _Color.xyz); + tmpvar_13.w = _Color.w; + vec3 tmpvar_14; + tmpvar_14 = normalize(gl_Normal); + tmpvar_2.xyz = normalize(TANGENT.xyz); + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * tmpvar_12); + vec3 tmpvar_16; + tmpvar_16 = (((tmpvar_14.yzx * tmpvar_2.zxy) - (tmpvar_14.zxy * tmpvar_2.yzx)) * TANGENT.w); + mat3 tmpvar_17; + tmpvar_17[0].x = tmpvar_2.x; + tmpvar_17[0].y = tmpvar_16.x; + tmpvar_17[0].z = tmpvar_14.x; + tmpvar_17[1].x = tmpvar_2.y; + tmpvar_17[1].y = tmpvar_16.y; + tmpvar_17[1].z = tmpvar_14.y; + tmpvar_17[2].x = tmpvar_2.z; + tmpvar_17[2].y = tmpvar_16.z; + tmpvar_17[2].z = tmpvar_14.z; + vec4 tmpvar_18; + tmpvar_18.w = 1.0; + tmpvar_18.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_15; + vec4 tmpvar_19; + tmpvar_19.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_19.x = tmpvar_15.z; + xlv_FOG = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_20; + gl_FrontColor = tmpvar_13; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = (tmpvar_17 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_11)); + gl_TexCoord[1] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (tmpvar_17 * (((_World2Object * tmpvar_18).xyz * unity_Scale.w) - tmpvar_11)); + gl_TexCoord[2] = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23.w = 0.0; + tmpvar_23.xyz = (_LightMatrix0 * (_Object2World * tmpvar_12)).xyz; + gl_TexCoord[3] = tmpvar_23; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Bark_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt new file mode 100644 index 000000000..a8277744b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-ir.txt @@ -0,0 +1,262 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; +}; +attribute vec4 TANGENT; +uniform vec4 unity_LightShadowBias; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +vec4 TriangleWave ( + in vec4 x_16 +) +{ + vec4 tmpvar_17; + tmpvar_17 = fract ((x_16 + 0.5)); + vec4 tmpvar_18; + tmpvar_18 = abs (((tmpvar_17 * 2.0) - 1.0)); + return tmpvar_18; +} + +vec4 SmoothCurve ( + in vec4 x_19 +) +{ + return ((x_19 * x_19) * (3.0 - (2.0 * x_19))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_20 +) +{ + vec4 tmpvar_21; + tmpvar_21 = TriangleWave (x_20); + vec4 tmpvar_22; + tmpvar_22 = SmoothCurve (tmpvar_21); + return tmpvar_22; +} + +vec4 AnimateVertex ( + in vec4 pos_23, + in vec3 normal_24, + in vec4 animParams_25 +) +{ + vec3 bend_26; + vec2 vWavesSum_27; + vec4 vWaves_28; + vec2 vWavesIn_29; + float fVtxPhase_30; + float fBranchPhase_31; + float fObjPhase_32; + float fBranchAmp_33; + float fDetailAmp_34; + float tmpvar_35; + tmpvar_35 = 0.1; + fDetailAmp_34 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.3; + fBranchAmp_33 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + fObjPhase_32 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = (fObjPhase_32 + animParams_25.x); + fBranchPhase_31 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = vec3((animParams_25.y + fBranchPhase_31)); + float tmpvar_41; + tmpvar_41 = dot (pos_23.xyz, tmpvar_40); + float tmpvar_42; + tmpvar_42 = tmpvar_41; + fVtxPhase_30 = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43.x = fVtxPhase_30; + tmpvar_43.y = fBranchPhase_31; + vec2 tmpvar_44; + tmpvar_44 = (_TimeX + tmpvar_43); + vWavesIn_29 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = fract ((vWavesIn_29.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_46; + tmpvar_46 = ((tmpvar_45 * 2.0) - 1.0); + vWaves_28 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = SmoothTriangleWave (vWaves_28); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + vWaves_28 = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = (vWaves_28.xz + vWaves_28.yw); + vWavesSum_27 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = ((animParams_25.y * fDetailAmp_34) * normal_24.xyz); + bend_26 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = (animParams_25.w * fBranchAmp_33); + bend_26.y = vec2(tmpvar_51).y; + vec3 tmpvar_52; + tmpvar_52 = (pos_23.xyz + (((vWavesSum_27.xyx * bend_26) + ((_Wind.xyz * vWavesSum_27.y) * animParams_25.w)) * _Wind.w)); + pos_23.xyz = tmpvar_52.xyz.xyz; + vec3 tmpvar_53; + tmpvar_53 = (pos_23.xyz + (animParams_25.z * _Wind.xyz)); + pos_23.xyz = tmpvar_53.xyz.xyz; + return pos_23; +} + +void TreeVertBark ( + inout appdata_full v_54 +) +{ + vec3 tmpvar_55; + tmpvar_55 = (v_54.vertex.xyz * _Scale.xyz); + v_54.vertex.xyz = tmpvar_55.xyz.xyz; + vec4 tmpvar_56; + tmpvar_56.xy = v_54.color.xy.xy; + tmpvar_56.zw = v_54.texcoord1.xy.xy; + vec4 tmpvar_57; + tmpvar_57 = AnimateVertex (v_54.vertex, v_54.normal, tmpvar_56); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + v_54.vertex = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = Squash (v_54.vertex); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + v_54.vertex = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.xyz = (v_54.color.w * _Color.xyz).xyz; + tmpvar_61.w = _Color.w; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + v_54.color = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = normalize (v_54.normal); + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + v_54.normal = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = normalize (v_54.tangent.xyz); + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + v_54.tangent.xyz = tmpvar_66.xyz.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_67 +) +{ + v2f_surf o_68; + TreeVertBark (v_67); + vec4 tmpvar_69; + tmpvar_69 = (gl_ModelViewProjectionMatrix * v_67.vertex); + o_68.pos = tmpvar_69; + float tmpvar_70; + tmpvar_70 = (o_68.pos.z + unity_LightShadowBias.x); + o_68.pos.z = vec3(tmpvar_70).z; + if ((o_68.pos.z < -(o_68.pos.w))) { + float tmpvar_71; + tmpvar_71 = -(o_68.pos.w); + o_68.pos.z = vec3(tmpvar_71).z; + }; + return o_68; +} + +void main () +{ + appdata_full xlt_v_72; + v2f_surf xl_retval_73; + vec4 tmpvar_74; + tmpvar_74 = gl_Vertex.xyzw; + vec4 tmpvar_75; + tmpvar_75 = tmpvar_74; + xlt_v_72.vertex = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76 = TANGENT.xyzw; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + xlt_v_72.tangent = tmpvar_77; + vec3 tmpvar_78; + tmpvar_78 = gl_Normal.xyz; + vec3 tmpvar_79; + tmpvar_79 = tmpvar_78; + xlt_v_72.normal = tmpvar_79; + vec4 tmpvar_80; + tmpvar_80 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_81; + tmpvar_81 = tmpvar_80; + xlt_v_72.texcoord = tmpvar_81; + vec4 tmpvar_82; + tmpvar_82 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + xlt_v_72.texcoord1 = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = gl_Color.xyzw; + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + xlt_v_72.color = tmpvar_85; + v2f_surf tmpvar_86; + tmpvar_86 = vert_surf (xlt_v_72); + v2f_surf tmpvar_87; + tmpvar_87 = tmpvar_86; + xl_retval_73 = tmpvar_87; + vec4 tmpvar_88; + tmpvar_88 = xl_retval_73.pos.xyzw; + vec4 tmpvar_89; + tmpvar_89 = tmpvar_88; + gl_Position = tmpvar_89; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt new file mode 100644 index 000000000..c0e978180 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Bark_Shader1-out.txt @@ -0,0 +1,48 @@ +uniform vec4 unity_LightShadowBias; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2.w = gl_Vertex.w; + tmpvar_2.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 pos_3; + pos_3.w = tmpvar_2.w; + vec3 bend_4; + float tmpvar_5; + tmpvar_5 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_6; + tmpvar_6.x = dot (tmpvar_2.xyz, vec3((gl_Color.y + tmpvar_5))); + tmpvar_6.y = tmpvar_5; + vec4 tmpvar_7; + tmpvar_7 = abs(((fract((((fract(((_TimeX + tmpvar_6).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_8; + tmpvar_8 = ((tmpvar_7 * tmpvar_7) * (3.0 - (2.0 * tmpvar_7))); + vec2 tmpvar_9; + tmpvar_9 = (tmpvar_8.xz + tmpvar_8.yw); + bend_4.xz = ((gl_Color.y * 0.1) * gl_Normal).xz; + bend_4.y = (gl_MultiTexCoord1.y * 0.3); + pos_3.xyz = (tmpvar_2.xyz + (((tmpvar_9.xyx * bend_4) + ((_Wind.xyz * tmpvar_9.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_3.xyz = (pos_3.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_10; + tmpvar_10.xz = vec2(0.0, 0.0); + tmpvar_10.y = _SquashPlaneNormal.w; + vec4 tmpvar_11; + tmpvar_11.w = 1.0; + tmpvar_11.xyz = mix ((pos_3.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_10 - pos_3.xyz)) * _SquashPlaneNormal.xyz)), pos_3.xyz, vec3(_SquashAmount)); + tmpvar_2 = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * tmpvar_11); + tmpvar_1.xyw = tmpvar_12.xyw; + tmpvar_1.z = (tmpvar_12.z + unity_LightShadowBias.x); + if ((tmpvar_1.z < -(tmpvar_12.w))) { + tmpvar_1.z = -(tmpvar_12.w); + }; + gl_Position = tmpvar_1; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt new file mode 100644 index 000000000..15deb3968 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-ir.txt @@ -0,0 +1,443 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void ExpandBillboard ( + in mat4 mat_16, + inout vec4 pos_17, + inout vec3 normal_18, + inout vec4 tangent_19 +) +{ + vec3 tanb_20; + vec3 norb_21; + float isBillboard_22; + float tmpvar_23; + tmpvar_23 = abs (tangent_19.w); + float tmpvar_24; + tmpvar_24 = (1.0 - tmpvar_23); + isBillboard_22 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.w = 0.0; + tmpvar_25.xyz = normal_18.xyz; + vec4 tmpvar_26; + tmpvar_26 = normalize ((tmpvar_25 * mat_16)); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26.xyz; + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + norb_21 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.yw = vec2(0.0, 0.0); + tmpvar_29.x = normal_18.z; + tmpvar_29.z = -(normal_18.x); + vec4 tmpvar_30; + tmpvar_30 = normalize ((tmpvar_29 * mat_16)); + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + tanb_20 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = (pos_17 + ((tangent_19 * mat_16) * isBillboard_22)); + pos_17 = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(isBillboard_22); + vec3 tmpvar_35; + tmpvar_35 = mix (normal_18, norb_21, tmpvar_34); + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + normal_18 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.w = -1.0; + tmpvar_37.xyz = tanb_20.xyz; + vec4 tmpvar_38; + tmpvar_38 = vec4(isBillboard_22); + vec4 tmpvar_39; + tmpvar_39 = mix (tangent_19, tmpvar_37, tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + tangent_19 = tmpvar_40; +} + +vec4 TriangleWave ( + in vec4 x_41 +) +{ + vec4 tmpvar_42; + tmpvar_42 = fract ((x_41 + 0.5)); + vec4 tmpvar_43; + tmpvar_43 = abs (((tmpvar_42 * 2.0) - 1.0)); + return tmpvar_43; +} + +vec4 SmoothCurve ( + in vec4 x_44 +) +{ + return ((x_44 * x_44) * (3.0 - (2.0 * x_44))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_45 +) +{ + vec4 tmpvar_46; + tmpvar_46 = TriangleWave (x_45); + vec4 tmpvar_47; + tmpvar_47 = SmoothCurve (tmpvar_46); + return tmpvar_47; +} + +vec4 AnimateVertex ( + in vec4 pos_48, + in vec3 normal_49, + in vec4 animParams_50 +) +{ + vec3 bend_51; + vec2 vWavesSum_52; + vec4 vWaves_53; + vec2 vWavesIn_54; + float fVtxPhase_55; + float fBranchPhase_56; + float fObjPhase_57; + float fBranchAmp_58; + float fDetailAmp_59; + float tmpvar_60; + tmpvar_60 = 0.1; + fDetailAmp_59 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.3; + fBranchAmp_58 = tmpvar_61; + float tmpvar_62; + tmpvar_62 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_63; + tmpvar_63 = tmpvar_62; + fObjPhase_57 = tmpvar_63; + float tmpvar_64; + tmpvar_64 = (fObjPhase_57 + animParams_50.x); + fBranchPhase_56 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = vec3((animParams_50.y + fBranchPhase_56)); + float tmpvar_66; + tmpvar_66 = dot (pos_48.xyz, tmpvar_65); + float tmpvar_67; + tmpvar_67 = tmpvar_66; + fVtxPhase_55 = tmpvar_67; + vec2 tmpvar_68; + tmpvar_68.x = fVtxPhase_55; + tmpvar_68.y = fBranchPhase_56; + vec2 tmpvar_69; + tmpvar_69 = (_TimeX + tmpvar_68); + vWavesIn_54 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = fract ((vWavesIn_54.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_71; + tmpvar_71 = ((tmpvar_70 * 2.0) - 1.0); + vWaves_53 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = SmoothTriangleWave (vWaves_53); + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + vWaves_53 = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = (vWaves_53.xz + vWaves_53.yw); + vWavesSum_52 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = ((animParams_50.y * fDetailAmp_59) * normal_49.xyz); + bend_51 = tmpvar_75; + float tmpvar_76; + tmpvar_76 = (animParams_50.w * fBranchAmp_58); + bend_51.y = vec2(tmpvar_76).y; + vec3 tmpvar_77; + tmpvar_77 = (pos_48.xyz + (((vWavesSum_52.xyx * bend_51) + ((_Wind.xyz * vWavesSum_52.y) * animParams_50.w)) * _Wind.w)); + pos_48.xyz = tmpvar_77.xyz.xyz; + vec3 tmpvar_78; + tmpvar_78 = (pos_48.xyz + (animParams_50.z * _Wind.xyz)); + pos_48.xyz = tmpvar_78.xyz.xyz; + return pos_48; +} + +void TreeVertLeaf ( + inout appdata_full v_79 +) +{ + ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v_79.vertex, v_79.normal, v_79.tangent); + vec3 tmpvar_80; + tmpvar_80 = (v_79.vertex.xyz * _Scale.xyz); + v_79.vertex.xyz = tmpvar_80.xyz.xyz; + vec4 tmpvar_81; + tmpvar_81.xy = v_79.color.xy.xy; + tmpvar_81.zw = v_79.texcoord1.xy.xy; + vec4 tmpvar_82; + tmpvar_82 = AnimateVertex (v_79.vertex, v_79.normal, tmpvar_81); + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + v_79.vertex = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = Squash (v_79.vertex); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + v_79.vertex = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86.xyz = (v_79.color.w * _Color.xyz).xyz; + tmpvar_86.w = _Color.w; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + v_79.color = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = normalize (v_79.normal); + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88; + v_79.normal = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = normalize (v_79.tangent.xyz); + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + v_79.tangent.xyz = tmpvar_91.xyz.xyz; +} + +void PositionFog ( + in vec4 v_92, + out vec4 pos_93, + out float fog_94 +) +{ + vec4 tmpvar_95; + tmpvar_95 = (gl_ModelViewProjectionMatrix * v_92); + pos_93 = tmpvar_95; + float tmpvar_96; + tmpvar_96 = pos_93.z; + fog_94 = tmpvar_96; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_97 +) +{ + vec3 objSpaceCameraPos_98; + vec4 tmpvar_99; + tmpvar_99.w = 1.0; + tmpvar_99.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_100; + tmpvar_100 = ((_World2Object * tmpvar_99).xyz * unity_Scale.w); + objSpaceCameraPos_98 = tmpvar_100; + return (objSpaceCameraPos_98 - v_97.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_101 +) +{ + vec3 objSpaceLightPos_102; + vec3 tmpvar_103; + tmpvar_103 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_102 = tmpvar_103; + return objSpaceLightPos_102.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_104 +) +{ + mat3 rotation_105; + vec3 binormal_106; + v2f_surf o_107; + TreeVertLeaf (v_104); + PositionFog (v_104.vertex, o_107.pos, o_107.fog); + vec2 tmpvar_108; + tmpvar_108 = ((v_104.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_107.hip_pack0 = tmpvar_108.xy.xy; + vec4 tmpvar_109; + tmpvar_109 = v_104.color; + o_107.lop_color = tmpvar_109; + vec3 tmpvar_110; + tmpvar_110 = cross (v_104.normal, v_104.tangent.xyz); + vec3 tmpvar_111; + tmpvar_111 = (tmpvar_110 * v_104.tangent.w); + binormal_106 = tmpvar_111; + mat3 tmpvar_112; + float tmpvar_113; + tmpvar_113 = v_104.tangent.x; + tmpvar_112[0].x = tmpvar_113; + float tmpvar_114; + tmpvar_114 = binormal_106.x; + tmpvar_112[0].y = tmpvar_114; + float tmpvar_115; + tmpvar_115 = v_104.normal.x; + tmpvar_112[0].z = tmpvar_115; + float tmpvar_116; + tmpvar_116 = v_104.tangent.y; + tmpvar_112[1].x = tmpvar_116; + float tmpvar_117; + tmpvar_117 = binormal_106.y; + tmpvar_112[1].y = tmpvar_117; + float tmpvar_118; + tmpvar_118 = v_104.normal.y; + tmpvar_112[1].z = tmpvar_118; + float tmpvar_119; + tmpvar_119 = v_104.tangent.z; + tmpvar_112[2].x = tmpvar_119; + float tmpvar_120; + tmpvar_120 = binormal_106.z; + tmpvar_112[2].y = tmpvar_120; + float tmpvar_121; + tmpvar_121 = v_104.normal.z; + tmpvar_112[2].z = tmpvar_121; + mat3 tmpvar_122; + tmpvar_122 = (tmpvar_112); + rotation_105 = (tmpvar_122); + vec3 tmpvar_123; + tmpvar_123 = ObjSpaceLightDir (v_104.vertex); + vec3 tmpvar_124; + tmpvar_124 = (rotation_105 * tmpvar_123); + o_107.lightDir = tmpvar_124; + vec3 tmpvar_125; + tmpvar_125 = ObjSpaceViewDir (v_104.vertex); + vec3 tmpvar_126; + tmpvar_126 = (rotation_105 * tmpvar_125); + o_107.viewDir = tmpvar_126; + return o_107; +} + +void main () +{ + appdata_full xlt_v_127; + v2f_surf xl_retval_128; + vec4 tmpvar_129; + tmpvar_129 = gl_Vertex.xyzw; + vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + xlt_v_127.vertex = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131 = TANGENT.xyzw; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + xlt_v_127.tangent = tmpvar_132; + vec3 tmpvar_133; + tmpvar_133 = gl_Normal.xyz; + vec3 tmpvar_134; + tmpvar_134 = tmpvar_133; + xlt_v_127.normal = tmpvar_134; + vec4 tmpvar_135; + tmpvar_135 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_136; + tmpvar_136 = tmpvar_135; + xlt_v_127.texcoord = tmpvar_136; + vec4 tmpvar_137; + tmpvar_137 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_138; + tmpvar_138 = tmpvar_137; + xlt_v_127.texcoord1 = tmpvar_138; + vec4 tmpvar_139; + tmpvar_139 = gl_Color.xyzw; + vec4 tmpvar_140; + tmpvar_140 = tmpvar_139; + xlt_v_127.color = tmpvar_140; + v2f_surf tmpvar_141; + tmpvar_141 = vert_surf (xlt_v_127); + v2f_surf tmpvar_142; + tmpvar_142 = tmpvar_141; + xl_retval_128 = tmpvar_142; + vec4 tmpvar_143; + tmpvar_143 = xl_retval_128.pos.xyzw; + vec4 tmpvar_144; + tmpvar_144 = tmpvar_143; + gl_Position = tmpvar_144; + vec4 tmpvar_145; + tmpvar_145.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_145.x = xl_retval_128.fog; + vec4 tmpvar_146; + tmpvar_146 = tmpvar_145; + xlv_FOG = tmpvar_146; + vec4 tmpvar_147; + tmpvar_147.zw = vec2(0.0, 0.0); + tmpvar_147.xy = xl_retval_128.hip_pack0.xy; + vec4 tmpvar_148; + tmpvar_148 = tmpvar_147; + gl_TexCoord[0] = tmpvar_148; + vec4 tmpvar_149; + tmpvar_149 = xl_retval_128.lop_color.xyzw; + vec4 tmpvar_150; + tmpvar_150 = tmpvar_149; + gl_FrontColor = tmpvar_150; + vec4 tmpvar_151; + tmpvar_151.w = 0.0; + tmpvar_151.xyz = xl_retval_128.lightDir.xyz; + vec4 tmpvar_152; + tmpvar_152 = tmpvar_151; + gl_TexCoord[1] = tmpvar_152; + vec4 tmpvar_153; + tmpvar_153.w = 0.0; + tmpvar_153.xyz = xl_retval_128.viewDir.xyz; + vec4 tmpvar_154; + tmpvar_154 = tmpvar_153; + gl_TexCoord[2] = tmpvar_154; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt new file mode 100644 index 000000000..ea93b48ac --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader-out.txt @@ -0,0 +1,109 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + float tmpvar_3; + tmpvar_3 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = gl_Normal; + vec4 tmpvar_5; + tmpvar_5.yw = vec2(0.0, 0.0); + tmpvar_5.x = gl_Normal.z; + tmpvar_5.z = -(gl_Normal.x); + vec4 tmpvar_6; + tmpvar_6 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); + vec3 tmpvar_7; + tmpvar_7 = mix (gl_Normal, normalize((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3)); + vec4 tmpvar_8; + tmpvar_8.w = -1.0; + tmpvar_8.xyz = normalize((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz; + vec4 tmpvar_9; + tmpvar_9 = mix (TANGENT, tmpvar_8, vec4(tmpvar_3)); + tmpvar_1.w = tmpvar_6.w; + tmpvar_2.w = tmpvar_9.w; + tmpvar_1.xyz = (tmpvar_6.xyz * _Scale.xyz); + vec4 pos_10; + pos_10.w = tmpvar_1.w; + vec3 bend_11; + float tmpvar_12; + tmpvar_12 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_13; + tmpvar_13.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_12))); + tmpvar_13.y = tmpvar_12; + vec4 tmpvar_14; + tmpvar_14 = abs(((fract((((fract(((_TimeX + tmpvar_13).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_15; + tmpvar_15 = ((tmpvar_14 * tmpvar_14) * (3.0 - (2.0 * tmpvar_14))); + vec2 tmpvar_16; + tmpvar_16 = (tmpvar_15.xz + tmpvar_15.yw); + bend_11.xz = ((gl_Color.y * 0.1) * tmpvar_7).xz; + bend_11.y = (gl_MultiTexCoord1.y * 0.3); + pos_10.xyz = (tmpvar_1.xyz + (((tmpvar_16.xyx * bend_11) + ((_Wind.xyz * tmpvar_16.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_10.xyz = (pos_10.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_17; + tmpvar_17.xz = vec2(0.0, 0.0); + tmpvar_17.y = _SquashPlaneNormal.w; + vec3 tmpvar_18; + tmpvar_18 = mix ((pos_10.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_17 - pos_10.xyz)) * _SquashPlaneNormal.xyz)), pos_10.xyz, vec3(_SquashAmount)); + vec4 tmpvar_19; + tmpvar_19.w = 1.0; + tmpvar_19.xyz = tmpvar_18; + tmpvar_1 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.xyz = (gl_Color.w * _Color.xyz); + tmpvar_20.w = _Color.w; + vec3 tmpvar_21; + tmpvar_21 = normalize(tmpvar_7); + tmpvar_2.xyz = normalize(tmpvar_9.xyz); + vec4 tmpvar_22; + tmpvar_22 = (gl_ModelViewProjectionMatrix * tmpvar_19); + vec3 tmpvar_23; + tmpvar_23 = (((tmpvar_21.yzx * tmpvar_2.zxy) - (tmpvar_21.zxy * tmpvar_2.yzx)) * tmpvar_9.w); + mat3 tmpvar_24; + tmpvar_24[0].x = tmpvar_2.x; + tmpvar_24[0].y = tmpvar_23.x; + tmpvar_24[0].z = tmpvar_21.x; + tmpvar_24[1].x = tmpvar_2.y; + tmpvar_24[1].y = tmpvar_23.y; + tmpvar_24[1].z = tmpvar_21.y; + tmpvar_24[2].x = tmpvar_2.z; + tmpvar_24[2].y = tmpvar_23.z; + tmpvar_24[2].z = tmpvar_21.z; + vec4 tmpvar_25; + tmpvar_25.w = 1.0; + tmpvar_25.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_22; + vec4 tmpvar_26; + tmpvar_26.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_26.x = tmpvar_22.z; + xlv_FOG = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27.zw = vec2(0.0, 0.0); + tmpvar_27.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_27; + gl_FrontColor = tmpvar_20; + vec4 tmpvar_28; + tmpvar_28.w = 0.0; + tmpvar_28.xyz = (tmpvar_24 * (_World2Object * _WorldSpaceLightPos0).xyz); + gl_TexCoord[1] = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.w = 0.0; + tmpvar_29.xyz = (tmpvar_24 * (((_World2Object * tmpvar_25).xyz * unity_Scale.w) - tmpvar_18)); + gl_TexCoord[2] = tmpvar_29; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Tree_Optimized_Leaf_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt new file mode 100644 index 000000000..1f7782285 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-ir.txt @@ -0,0 +1,454 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void ExpandBillboard ( + in mat4 mat_16, + inout vec4 pos_17, + inout vec3 normal_18, + inout vec4 tangent_19 +) +{ + vec3 tanb_20; + vec3 norb_21; + float isBillboard_22; + float tmpvar_23; + tmpvar_23 = abs (tangent_19.w); + float tmpvar_24; + tmpvar_24 = (1.0 - tmpvar_23); + isBillboard_22 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.w = 0.0; + tmpvar_25.xyz = normal_18.xyz; + vec4 tmpvar_26; + tmpvar_26 = normalize ((tmpvar_25 * mat_16)); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26.xyz; + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + norb_21 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.yw = vec2(0.0, 0.0); + tmpvar_29.x = normal_18.z; + tmpvar_29.z = -(normal_18.x); + vec4 tmpvar_30; + tmpvar_30 = normalize ((tmpvar_29 * mat_16)); + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + tanb_20 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = (pos_17 + ((tangent_19 * mat_16) * isBillboard_22)); + pos_17 = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(isBillboard_22); + vec3 tmpvar_35; + tmpvar_35 = mix (normal_18, norb_21, tmpvar_34); + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + normal_18 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.w = -1.0; + tmpvar_37.xyz = tanb_20.xyz; + vec4 tmpvar_38; + tmpvar_38 = vec4(isBillboard_22); + vec4 tmpvar_39; + tmpvar_39 = mix (tangent_19, tmpvar_37, tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + tangent_19 = tmpvar_40; +} + +vec4 TriangleWave ( + in vec4 x_41 +) +{ + vec4 tmpvar_42; + tmpvar_42 = fract ((x_41 + 0.5)); + vec4 tmpvar_43; + tmpvar_43 = abs (((tmpvar_42 * 2.0) - 1.0)); + return tmpvar_43; +} + +vec4 SmoothCurve ( + in vec4 x_44 +) +{ + return ((x_44 * x_44) * (3.0 - (2.0 * x_44))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_45 +) +{ + vec4 tmpvar_46; + tmpvar_46 = TriangleWave (x_45); + vec4 tmpvar_47; + tmpvar_47 = SmoothCurve (tmpvar_46); + return tmpvar_47; +} + +vec4 AnimateVertex ( + in vec4 pos_48, + in vec3 normal_49, + in vec4 animParams_50 +) +{ + vec3 bend_51; + vec2 vWavesSum_52; + vec4 vWaves_53; + vec2 vWavesIn_54; + float fVtxPhase_55; + float fBranchPhase_56; + float fObjPhase_57; + float fBranchAmp_58; + float fDetailAmp_59; + float tmpvar_60; + tmpvar_60 = 0.1; + fDetailAmp_59 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.3; + fBranchAmp_58 = tmpvar_61; + float tmpvar_62; + tmpvar_62 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_63; + tmpvar_63 = tmpvar_62; + fObjPhase_57 = tmpvar_63; + float tmpvar_64; + tmpvar_64 = (fObjPhase_57 + animParams_50.x); + fBranchPhase_56 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = vec3((animParams_50.y + fBranchPhase_56)); + float tmpvar_66; + tmpvar_66 = dot (pos_48.xyz, tmpvar_65); + float tmpvar_67; + tmpvar_67 = tmpvar_66; + fVtxPhase_55 = tmpvar_67; + vec2 tmpvar_68; + tmpvar_68.x = fVtxPhase_55; + tmpvar_68.y = fBranchPhase_56; + vec2 tmpvar_69; + tmpvar_69 = (_TimeX + tmpvar_68); + vWavesIn_54 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = fract ((vWavesIn_54.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_71; + tmpvar_71 = ((tmpvar_70 * 2.0) - 1.0); + vWaves_53 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = SmoothTriangleWave (vWaves_53); + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + vWaves_53 = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = (vWaves_53.xz + vWaves_53.yw); + vWavesSum_52 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = ((animParams_50.y * fDetailAmp_59) * normal_49.xyz); + bend_51 = tmpvar_75; + float tmpvar_76; + tmpvar_76 = (animParams_50.w * fBranchAmp_58); + bend_51.y = vec2(tmpvar_76).y; + vec3 tmpvar_77; + tmpvar_77 = (pos_48.xyz + (((vWavesSum_52.xyx * bend_51) + ((_Wind.xyz * vWavesSum_52.y) * animParams_50.w)) * _Wind.w)); + pos_48.xyz = tmpvar_77.xyz.xyz; + vec3 tmpvar_78; + tmpvar_78 = (pos_48.xyz + (animParams_50.z * _Wind.xyz)); + pos_48.xyz = tmpvar_78.xyz.xyz; + return pos_48; +} + +void TreeVertLeaf ( + inout appdata_full v_79 +) +{ + ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v_79.vertex, v_79.normal, v_79.tangent); + vec3 tmpvar_80; + tmpvar_80 = (v_79.vertex.xyz * _Scale.xyz); + v_79.vertex.xyz = tmpvar_80.xyz.xyz; + vec4 tmpvar_81; + tmpvar_81.xy = v_79.color.xy.xy; + tmpvar_81.zw = v_79.texcoord1.xy.xy; + vec4 tmpvar_82; + tmpvar_82 = AnimateVertex (v_79.vertex, v_79.normal, tmpvar_81); + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + v_79.vertex = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = Squash (v_79.vertex); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + v_79.vertex = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86.xyz = (v_79.color.w * _Color.xyz).xyz; + tmpvar_86.w = _Color.w; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + v_79.color = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = normalize (v_79.normal); + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88; + v_79.normal = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = normalize (v_79.tangent.xyz); + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + v_79.tangent.xyz = tmpvar_91.xyz.xyz; +} + +void PositionFog ( + in vec4 v_92, + out vec4 pos_93, + out float fog_94 +) +{ + vec4 tmpvar_95; + tmpvar_95 = (gl_ModelViewProjectionMatrix * v_92); + pos_93 = tmpvar_95; + float tmpvar_96; + tmpvar_96 = pos_93.z; + fog_94 = tmpvar_96; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_97 +) +{ + vec3 objSpaceCameraPos_98; + vec4 tmpvar_99; + tmpvar_99.w = 1.0; + tmpvar_99.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_100; + tmpvar_100 = ((_World2Object * tmpvar_99).xyz * unity_Scale.w); + objSpaceCameraPos_98 = tmpvar_100; + return (objSpaceCameraPos_98 - v_97.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_101 +) +{ + vec3 objSpaceLightPos_102; + vec3 tmpvar_103; + tmpvar_103 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_102 = tmpvar_103; + return ((objSpaceLightPos_102.xyz * unity_Scale.w) - v_101.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_104 +) +{ + mat3 rotation_105; + vec3 binormal_106; + v2f_surf o_107; + TreeVertLeaf (v_104); + PositionFog (v_104.vertex, o_107.pos, o_107.fog); + vec2 tmpvar_108; + tmpvar_108 = ((v_104.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_107.hip_pack0 = tmpvar_108.xy.xy; + vec4 tmpvar_109; + tmpvar_109 = v_104.color; + o_107.lop_color = tmpvar_109; + vec3 tmpvar_110; + tmpvar_110 = cross (v_104.normal, v_104.tangent.xyz); + vec3 tmpvar_111; + tmpvar_111 = (tmpvar_110 * v_104.tangent.w); + binormal_106 = tmpvar_111; + mat3 tmpvar_112; + float tmpvar_113; + tmpvar_113 = v_104.tangent.x; + tmpvar_112[0].x = tmpvar_113; + float tmpvar_114; + tmpvar_114 = binormal_106.x; + tmpvar_112[0].y = tmpvar_114; + float tmpvar_115; + tmpvar_115 = v_104.normal.x; + tmpvar_112[0].z = tmpvar_115; + float tmpvar_116; + tmpvar_116 = v_104.tangent.y; + tmpvar_112[1].x = tmpvar_116; + float tmpvar_117; + tmpvar_117 = binormal_106.y; + tmpvar_112[1].y = tmpvar_117; + float tmpvar_118; + tmpvar_118 = v_104.normal.y; + tmpvar_112[1].z = tmpvar_118; + float tmpvar_119; + tmpvar_119 = v_104.tangent.z; + tmpvar_112[2].x = tmpvar_119; + float tmpvar_120; + tmpvar_120 = binormal_106.z; + tmpvar_112[2].y = tmpvar_120; + float tmpvar_121; + tmpvar_121 = v_104.normal.z; + tmpvar_112[2].z = tmpvar_121; + mat3 tmpvar_122; + tmpvar_122 = (tmpvar_112); + rotation_105 = (tmpvar_122); + vec3 tmpvar_123; + tmpvar_123 = ObjSpaceLightDir (v_104.vertex); + vec3 tmpvar_124; + tmpvar_124 = (rotation_105 * tmpvar_123); + o_107.lightDir = tmpvar_124; + vec3 tmpvar_125; + tmpvar_125 = ObjSpaceViewDir (v_104.vertex); + vec3 tmpvar_126; + tmpvar_126 = (rotation_105 * tmpvar_125); + o_107.viewDir = tmpvar_126; + vec3 tmpvar_127; + tmpvar_127 = (_LightMatrix0 * (_Object2World * v_104.vertex)).xyz; + o_107._LightCoord = tmpvar_127; + return o_107; +} + +void main () +{ + appdata_full xlt_v_128; + v2f_surf xl_retval_129; + vec4 tmpvar_130; + tmpvar_130 = gl_Vertex.xyzw; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + xlt_v_128.vertex = tmpvar_131; + vec4 tmpvar_132; + tmpvar_132 = TANGENT.xyzw; + vec4 tmpvar_133; + tmpvar_133 = tmpvar_132; + xlt_v_128.tangent = tmpvar_133; + vec3 tmpvar_134; + tmpvar_134 = gl_Normal.xyz; + vec3 tmpvar_135; + tmpvar_135 = tmpvar_134; + xlt_v_128.normal = tmpvar_135; + vec4 tmpvar_136; + tmpvar_136 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_137; + tmpvar_137 = tmpvar_136; + xlt_v_128.texcoord = tmpvar_137; + vec4 tmpvar_138; + tmpvar_138 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_139; + tmpvar_139 = tmpvar_138; + xlt_v_128.texcoord1 = tmpvar_139; + vec4 tmpvar_140; + tmpvar_140 = gl_Color.xyzw; + vec4 tmpvar_141; + tmpvar_141 = tmpvar_140; + xlt_v_128.color = tmpvar_141; + v2f_surf tmpvar_142; + tmpvar_142 = vert_surf (xlt_v_128); + v2f_surf tmpvar_143; + tmpvar_143 = tmpvar_142; + xl_retval_129 = tmpvar_143; + vec4 tmpvar_144; + tmpvar_144 = xl_retval_129.pos.xyzw; + vec4 tmpvar_145; + tmpvar_145 = tmpvar_144; + gl_Position = tmpvar_145; + vec4 tmpvar_146; + tmpvar_146.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_146.x = xl_retval_129.fog; + vec4 tmpvar_147; + tmpvar_147 = tmpvar_146; + xlv_FOG = tmpvar_147; + vec4 tmpvar_148; + tmpvar_148.zw = vec2(0.0, 0.0); + tmpvar_148.xy = xl_retval_129.hip_pack0.xy; + vec4 tmpvar_149; + tmpvar_149 = tmpvar_148; + gl_TexCoord[0] = tmpvar_149; + vec4 tmpvar_150; + tmpvar_150 = xl_retval_129.lop_color.xyzw; + vec4 tmpvar_151; + tmpvar_151 = tmpvar_150; + gl_FrontColor = tmpvar_151; + vec4 tmpvar_152; + tmpvar_152.w = 0.0; + tmpvar_152.xyz = xl_retval_129.lightDir.xyz; + vec4 tmpvar_153; + tmpvar_153 = tmpvar_152; + gl_TexCoord[1] = tmpvar_153; + vec4 tmpvar_154; + tmpvar_154.w = 0.0; + tmpvar_154.xyz = xl_retval_129.viewDir.xyz; + vec4 tmpvar_155; + tmpvar_155 = tmpvar_154; + gl_TexCoord[2] = tmpvar_155; + vec4 tmpvar_156; + tmpvar_156.w = 0.0; + tmpvar_156.xyz = xl_retval_129._LightCoord.xyz; + vec4 tmpvar_157; + tmpvar_157 = tmpvar_156; + gl_TexCoord[3] = tmpvar_157; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt new file mode 100644 index 000000000..c9c5cf074 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Tree_Optimized_Leaf_Shader1-out.txt @@ -0,0 +1,114 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + float tmpvar_3; + tmpvar_3 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = gl_Normal; + vec4 tmpvar_5; + tmpvar_5.yw = vec2(0.0, 0.0); + tmpvar_5.x = gl_Normal.z; + tmpvar_5.z = -(gl_Normal.x); + vec4 tmpvar_6; + tmpvar_6 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); + vec3 tmpvar_7; + tmpvar_7 = mix (gl_Normal, normalize((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3)); + vec4 tmpvar_8; + tmpvar_8.w = -1.0; + tmpvar_8.xyz = normalize((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz; + vec4 tmpvar_9; + tmpvar_9 = mix (TANGENT, tmpvar_8, vec4(tmpvar_3)); + tmpvar_1.w = tmpvar_6.w; + tmpvar_2.w = tmpvar_9.w; + tmpvar_1.xyz = (tmpvar_6.xyz * _Scale.xyz); + vec4 pos_10; + pos_10.w = tmpvar_1.w; + vec3 bend_11; + float tmpvar_12; + tmpvar_12 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_13; + tmpvar_13.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_12))); + tmpvar_13.y = tmpvar_12; + vec4 tmpvar_14; + tmpvar_14 = abs(((fract((((fract(((_TimeX + tmpvar_13).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_15; + tmpvar_15 = ((tmpvar_14 * tmpvar_14) * (3.0 - (2.0 * tmpvar_14))); + vec2 tmpvar_16; + tmpvar_16 = (tmpvar_15.xz + tmpvar_15.yw); + bend_11.xz = ((gl_Color.y * 0.1) * tmpvar_7).xz; + bend_11.y = (gl_MultiTexCoord1.y * 0.3); + pos_10.xyz = (tmpvar_1.xyz + (((tmpvar_16.xyx * bend_11) + ((_Wind.xyz * tmpvar_16.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_10.xyz = (pos_10.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_17; + tmpvar_17.xz = vec2(0.0, 0.0); + tmpvar_17.y = _SquashPlaneNormal.w; + vec3 tmpvar_18; + tmpvar_18 = mix ((pos_10.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_17 - pos_10.xyz)) * _SquashPlaneNormal.xyz)), pos_10.xyz, vec3(_SquashAmount)); + vec4 tmpvar_19; + tmpvar_19.w = 1.0; + tmpvar_19.xyz = tmpvar_18; + tmpvar_1 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.xyz = (gl_Color.w * _Color.xyz); + tmpvar_20.w = _Color.w; + vec3 tmpvar_21; + tmpvar_21 = normalize(tmpvar_7); + tmpvar_2.xyz = normalize(tmpvar_9.xyz); + vec4 tmpvar_22; + tmpvar_22 = (gl_ModelViewProjectionMatrix * tmpvar_19); + vec3 tmpvar_23; + tmpvar_23 = (((tmpvar_21.yzx * tmpvar_2.zxy) - (tmpvar_21.zxy * tmpvar_2.yzx)) * tmpvar_9.w); + mat3 tmpvar_24; + tmpvar_24[0].x = tmpvar_2.x; + tmpvar_24[0].y = tmpvar_23.x; + tmpvar_24[0].z = tmpvar_21.x; + tmpvar_24[1].x = tmpvar_2.y; + tmpvar_24[1].y = tmpvar_23.y; + tmpvar_24[1].z = tmpvar_21.y; + tmpvar_24[2].x = tmpvar_2.z; + tmpvar_24[2].y = tmpvar_23.z; + tmpvar_24[2].z = tmpvar_21.z; + vec4 tmpvar_25; + tmpvar_25.w = 1.0; + tmpvar_25.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_22; + vec4 tmpvar_26; + tmpvar_26.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_26.x = tmpvar_22.z; + xlv_FOG = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27.zw = vec2(0.0, 0.0); + tmpvar_27.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_27; + gl_FrontColor = tmpvar_20; + vec4 tmpvar_28; + tmpvar_28.w = 0.0; + tmpvar_28.xyz = (tmpvar_24 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_18)); + gl_TexCoord[1] = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.w = 0.0; + tmpvar_29.xyz = (tmpvar_24 * (((_World2Object * tmpvar_25).xyz * unity_Scale.w) - tmpvar_18)); + gl_TexCoord[2] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30.w = 0.0; + tmpvar_30.xyz = (_LightMatrix0 * (_Object2World * tmpvar_19)).xyz; + gl_TexCoord[3] = tmpvar_30; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-ir.txt new file mode 100644 index 000000000..9bcbb06b4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-ir.txt @@ -0,0 +1,90 @@ +struct appdata_img { + vec4 vertex; + vec2 texcoord; +}; +struct v2f { + vec4 pos; + vec2 uv; + vec2 uvOrig; +}; +uniform vec4 _CenterRadius; +vec2 MultiplyUV ( + in mat4 mat_1, + in vec2 inUV_2 +) +{ + vec4 temp_3; + vec4 tmpvar_4; + tmpvar_4.zw = vec2(0.0, 0.0); + tmpvar_4.x = inUV_2.x; + tmpvar_4.y = inUV_2.y; + vec4 tmpvar_5; + tmpvar_5 = tmpvar_4; + temp_3 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (mat_1 * temp_3); + temp_3 = tmpvar_6; + return temp_3.xy; +} + +v2f vert ( + in appdata_img v_7 +) +{ + vec2 uv_8; + v2f o_9; + vec4 tmpvar_10; + tmpvar_10 = (gl_ModelViewProjectionMatrix * v_7.vertex); + o_9.pos = tmpvar_10; + vec2 tmpvar_11; + tmpvar_11 = (v_7.texcoord.xy - _CenterRadius.xy); + uv_8 = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = MultiplyUV (gl_TextureMatrix[0], uv_8); + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + o_9.uv = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = uv_8; + o_9.uvOrig = tmpvar_14; + return o_9; +} + +void main () +{ + appdata_img xlt_v_15; + v2f xl_retval_16; + vec4 tmpvar_17; + tmpvar_17 = gl_Vertex.xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_15.vertex = tmpvar_18; + vec2 tmpvar_19; + tmpvar_19 = gl_MultiTexCoord0.xy; + vec2 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_15.texcoord = tmpvar_20; + v2f tmpvar_21; + tmpvar_21 = vert (xlt_v_15); + v2f tmpvar_22; + tmpvar_22 = tmpvar_21; + xl_retval_16 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = xl_retval_16.pos.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + gl_Position = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.zw = vec2(0.0, 0.0); + tmpvar_25.xy = xl_retval_16.uv.xy; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + gl_TexCoord[0] = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27.zw = vec2(0.0, 0.0); + tmpvar_27.xy = xl_retval_16.uvOrig.xy; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_TexCoord[1] = tmpvar_28; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Hidden_Twist_Effect-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Hidden_Twist_Effect-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..79c900f52 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-ir.txt @@ -0,0 +1,178 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec2 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_6 +) +{ + vec3 objSpaceLightPos_7; + vec3 tmpvar_8; + tmpvar_8 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_7 = tmpvar_8; + return objSpaceLightPos_7.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + PositionFog (v_9.vertex, o_12.pos, o_12.fog); + vec2 tmpvar_13; + tmpvar_13 = ((v_9.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_12.hip_pack0.xy = tmpvar_13.xy.xy; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0.zw = tmpvar_14.xxxy.zw; + vec3 tmpvar_15; + tmpvar_15 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_9.tangent.w); + binormal_11 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_9.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_11.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_11.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_11.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_9.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_10 = (tmpvar_27); + vec3 tmpvar_28; + tmpvar_28 = ObjSpaceLightDir (v_9.vertex); + vec3 tmpvar_29; + tmpvar_29 = (rotation_10 * tmpvar_28); + o_12.lightDir = tmpvar_29; + vec2 tmpvar_30; + tmpvar_30 = (_LightMatrix0 * (_Object2World * v_9.vertex)).xy; + o_12._LightCoord = tmpvar_30; + return o_12; +} + +void main () +{ + appdata_full xlt_v_31; + v2f_surf xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = gl_Vertex.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_31.vertex = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = TANGENT.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_31.tangent = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_Normal.xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_31.normal = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_31.texcoord = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_31.texcoord1 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Color.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_31.color = tmpvar_44; + v2f_surf tmpvar_45; + tmpvar_45 = vert_surf (xlt_v_31); + v2f_surf tmpvar_46; + tmpvar_46 = tmpvar_45; + xl_retval_32 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = xl_retval_32.pos.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_Position = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_49.x = xl_retval_32.fog; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlv_FOG = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_32.hip_pack0.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[0] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_32.lightDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[1] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.zw = vec2(0.0, 0.0); + tmpvar_55.xy = xl_retval_32._LightCoord.xy; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[2] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt similarity index 93% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt index ee11d4d75..a35760d3f 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt @@ -14,7 +14,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-ir.txt new file mode 100644 index 000000000..0b0319b3f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-ir.txt @@ -0,0 +1,251 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec4 Squash ( + in vec4 pos_9 +) +{ + vec3 planeNormal_10; + vec3 planePoint_11; + vec3 projectedVertex_12; + vec3 tmpvar_13; + tmpvar_13 = pos_9.xyz; + projectedVertex_12 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14.xz = vec2(0.0, 0.0); + tmpvar_14.y = _SquashPlaneNormal.w; + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + planePoint_11 = tmpvar_15; + vec3 tmpvar_16; + tmpvar_16 = _SquashPlaneNormal.xyz; + planeNormal_10 = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = pos_9.xyz; + float tmpvar_18; + tmpvar_18 = dot (planeNormal_10, (planePoint_11 - tmpvar_17)); + vec3 tmpvar_19; + tmpvar_19 = (projectedVertex_12 + (tmpvar_18 * planeNormal_10)); + projectedVertex_12 = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = vec3(_SquashAmount); + vec3 tmpvar_21; + tmpvar_21 = mix (projectedVertex_12, pos_9.xyz, tmpvar_20); + vec4 tmpvar_22; + tmpvar_22.w = 1.0; + tmpvar_22.xyz = tmpvar_21.xyz; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + pos_9 = tmpvar_23; + return pos_9; +} + +void TerrainAnimateTree ( + inout vec4 pos_24, + in float alpha_25 +) +{ + vec3 bent_26; + vec3 tmpvar_27; + tmpvar_27 = (pos_24.xyz * _Scale.xyz); + pos_24.xyz = tmpvar_27.xyz.xyz; + vec4 tmpvar_28; + tmpvar_28.w = 0.0; + tmpvar_28.xyz = pos_24.xyz.xyz; + vec3 tmpvar_29; + tmpvar_29 = (_TerrainEngineBendTree * tmpvar_28).xyz; + bent_26 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = vec3(alpha_25); + vec3 tmpvar_31; + tmpvar_31 = mix (pos_24.xyz, bent_26, tmpvar_30); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + pos_24.xyz = tmpvar_32.xyz.xyz; + vec4 tmpvar_33; + tmpvar_33 = Squash (pos_24); + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + pos_24 = tmpvar_34; +} + +void treevertex ( + inout appdata_full v_35 +) +{ + TerrainAnimateTree (v_35.vertex, v_35.color.w); +} + +vec3 WorldSpaceLightDir ( + in vec4 v_36 +) +{ + vec3 worldPos_37; + vec3 tmpvar_38; + tmpvar_38 = (_Object2World * v_36).xyz; + worldPos_37 = tmpvar_38; + return (_WorldSpaceLightPos0.xyz - worldPos_37); +} + +void PositionFog ( + in vec4 v_39, + out vec4 pos_40, + out float fog_41 +) +{ + vec4 tmpvar_42; + tmpvar_42 = (gl_ModelViewProjectionMatrix * v_39); + pos_40 = tmpvar_42; + float tmpvar_43; + tmpvar_43 = pos_40.z; + fog_41 = tmpvar_43; +} + +v2f_surf vert_surf ( + in appdata_full v_44 +) +{ + v2f_surf o_45; + treevertex (v_44); + PositionFog (v_44.vertex, o_45.pos, o_45.fog); + vec2 tmpvar_46; + tmpvar_46 = ((v_44.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_45.hip_pack0 = tmpvar_46.xy.xy; + mat3 tmpvar_47; + tmpvar_47 = xll_constructMat3 (_Object2World); + vec3 tmpvar_48; + tmpvar_48 = (tmpvar_47 * (v_44.normal * unity_Scale.w)); + o_45.normal = tmpvar_48; + vec3 tmpvar_49; + tmpvar_49 = WorldSpaceLightDir (v_44.vertex); + vec3 tmpvar_50; + tmpvar_50 = tmpvar_49; + o_45.lightDir = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = (_LightMatrix0 * (_Object2World * v_44.vertex)); + o_45._LightCoord = tmpvar_51; + return o_45; +} + +void main () +{ + appdata_full xlt_v_52; + v2f_surf xl_retval_53; + vec4 tmpvar_54; + tmpvar_54 = gl_Vertex.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_v_52.vertex = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = TANGENT.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_v_52.tangent = tmpvar_57; + vec3 tmpvar_58; + tmpvar_58 = gl_Normal.xyz; + vec3 tmpvar_59; + tmpvar_59 = tmpvar_58; + xlt_v_52.normal = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + xlt_v_52.texcoord = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlt_v_52.texcoord1 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = gl_Color.xyzw; + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + xlt_v_52.color = tmpvar_65; + v2f_surf tmpvar_66; + tmpvar_66 = vert_surf (xlt_v_52); + v2f_surf tmpvar_67; + tmpvar_67 = tmpvar_66; + xl_retval_53 = tmpvar_67; + vec4 tmpvar_68; + tmpvar_68 = xl_retval_53.pos.xyzw; + vec4 tmpvar_69; + tmpvar_69 = tmpvar_68; + gl_Position = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_70.x = xl_retval_53.fog; + vec4 tmpvar_71; + tmpvar_71 = tmpvar_70; + xlv_FOG = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72.zw = vec2(0.0, 0.0); + tmpvar_72.xy = xl_retval_53.hip_pack0.xy; + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + gl_TexCoord[0] = tmpvar_73; + vec4 tmpvar_74; + tmpvar_74.w = 0.0; + tmpvar_74.xyz = xl_retval_53.normal.xyz; + vec4 tmpvar_75; + tmpvar_75 = tmpvar_74; + gl_TexCoord[1] = tmpvar_75; + vec4 tmpvar_76; + tmpvar_76.w = 0.0; + tmpvar_76.xyz = xl_retval_53.lightDir.xyz; + vec4 tmpvar_77; + tmpvar_77 = tmpvar_76; + gl_TexCoord[2] = tmpvar_77; + vec4 tmpvar_78; + tmpvar_78 = xl_retval_53._LightCoord.xyzw; + vec4 tmpvar_79; + tmpvar_79 = tmpvar_78; + gl_TexCoord[3] = tmpvar_79; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-out.txt new file mode 100644 index 000000000..d617d828d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark-out.txt @@ -0,0 +1,52 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +void main () +{ + vec4 pos_1; + pos_1.w = gl_Vertex.w; + pos_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_2; + tmpvar_2.w = 0.0; + tmpvar_2.xyz = pos_1.xyz; + pos_1.xyz = mix (pos_1.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); + vec3 tmpvar_3; + tmpvar_3.xz = vec2(0.0, 0.0); + tmpvar_3.y = _SquashPlaneNormal.w; + vec4 tmpvar_4; + tmpvar_4.w = 1.0; + tmpvar_4.xyz = mix ((pos_1.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos_1.xyz)) * _SquashPlaneNormal.xyz)), pos_1.xyz, vec3(_SquashAmount)); + pos_1 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = (gl_ModelViewProjectionMatrix * tmpvar_4); + mat3 tmpvar_6; + tmpvar_6[0] = _Object2World[0].xyz; + tmpvar_6[1] = _Object2World[1].xyz; + tmpvar_6[2] = _Object2World[2].xyz; + gl_Position = tmpvar_5; + vec4 tmpvar_7; + tmpvar_7.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_7.x = tmpvar_5.z; + xlv_FOG = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8.zw = vec2(0.0, 0.0); + tmpvar_8.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.w = 0.0; + tmpvar_9.xyz = (tmpvar_6 * (gl_Normal * unity_Scale.w)); + gl_TexCoord[1] = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = (_WorldSpaceLightPos0.xyz - (_Object2World * tmpvar_4).xyz); + gl_TexCoord[2] = tmpvar_10; + gl_TexCoord[3] = (_LightMatrix0 * (_Object2World * tmpvar_4)); +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-ir.txt new file mode 100644 index 000000000..7052cdc5b --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-ir.txt @@ -0,0 +1,161 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec3 vec; +}; +attribute vec4 TANGENT; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _LightPositionRange; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void TerrainAnimateTree ( + inout vec4 pos_16, + in float alpha_17 +) +{ + vec3 bent_18; + vec3 tmpvar_19; + tmpvar_19 = (pos_16.xyz * _Scale.xyz); + pos_16.xyz = tmpvar_19.xyz.xyz; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = pos_16.xyz.xyz; + vec3 tmpvar_21; + tmpvar_21 = (_TerrainEngineBendTree * tmpvar_20).xyz; + bent_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(alpha_17); + vec3 tmpvar_23; + tmpvar_23 = mix (pos_16.xyz, bent_18, tmpvar_22); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + pos_16.xyz = tmpvar_24.xyz.xyz; + vec4 tmpvar_25; + tmpvar_25 = Squash (pos_16); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + pos_16 = tmpvar_26; +} + +void treevertex ( + inout appdata_full v_27 +) +{ + TerrainAnimateTree (v_27.vertex, v_27.color.w); +} + +v2f_surf vert_surf ( + in appdata_full v_28 +) +{ + v2f_surf o_29; + treevertex (v_28); + vec3 tmpvar_30; + tmpvar_30 = ((_Object2World * v_28.vertex).xyz - _LightPositionRange.xyz); + o_29.vec = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = (gl_ModelViewProjectionMatrix * v_28.vertex); + o_29.pos = tmpvar_31; + return o_29; +} + +void main () +{ + appdata_full xlt_v_32; + v2f_surf xl_retval_33; + vec4 tmpvar_34; + tmpvar_34 = gl_Vertex.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_32.vertex = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = TANGENT.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_32.tangent = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = gl_Normal.xyz; + vec3 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_32.normal = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_32.texcoord = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_32.texcoord1 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = gl_Color.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_v_32.color = tmpvar_45; + v2f_surf tmpvar_46; + tmpvar_46 = vert_surf (xlt_v_32); + v2f_surf tmpvar_47; + tmpvar_47 = tmpvar_46; + xl_retval_33 = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = xl_retval_33.pos.xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_Position = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.w = 0.0; + tmpvar_50.xyz = xl_retval_33.vec.xyz; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[0] = tmpvar_51; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-out.txt new file mode 100644 index 000000000..293ee2307 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark2-out.txt @@ -0,0 +1,29 @@ +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _LightPositionRange; +void main () +{ + vec4 pos_1; + pos_1.w = gl_Vertex.w; + pos_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_2; + tmpvar_2.w = 0.0; + tmpvar_2.xyz = pos_1.xyz; + pos_1.xyz = mix (pos_1.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); + vec3 tmpvar_3; + tmpvar_3.xz = vec2(0.0, 0.0); + tmpvar_3.y = _SquashPlaneNormal.w; + vec4 tmpvar_4; + tmpvar_4.w = 1.0; + tmpvar_4.xyz = mix ((pos_1.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos_1.xyz)) * _SquashPlaneNormal.xyz)), pos_1.xyz, vec3(_SquashAmount)); + pos_1 = tmpvar_4; + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_4); + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = ((_Object2World * tmpvar_4).xyz - _LightPositionRange.xyz); + gl_TexCoord[0] = tmpvar_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Bark3-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-ir.txt new file mode 100644 index 000000000..11ff88f01 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-ir.txt @@ -0,0 +1,216 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec3 _ShadowCoord0; + vec3 _ShadowCoord1; + vec3 _ShadowCoord2; + vec3 _ShadowCoord3; + vec2 _ShadowZFade; +}; +attribute vec4 TANGENT; +uniform mat4 _World2Shadow3; +uniform mat4 _World2Shadow2; +uniform mat4 _World2Shadow1; +uniform mat4 _World2Shadow; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _LightShadowData; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void TerrainAnimateTree ( + inout vec4 pos_16, + in float alpha_17 +) +{ + vec3 bent_18; + vec3 tmpvar_19; + tmpvar_19 = (pos_16.xyz * _Scale.xyz); + pos_16.xyz = tmpvar_19.xyz.xyz; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = pos_16.xyz.xyz; + vec3 tmpvar_21; + tmpvar_21 = (_TerrainEngineBendTree * tmpvar_20).xyz; + bent_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(alpha_17); + vec3 tmpvar_23; + tmpvar_23 = mix (pos_16.xyz, bent_18, tmpvar_22); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + pos_16.xyz = tmpvar_24.xyz.xyz; + vec4 tmpvar_25; + tmpvar_25 = Squash (pos_16); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + pos_16 = tmpvar_26; +} + +void treevertex ( + inout appdata_full v_27 +) +{ + TerrainAnimateTree (v_27.vertex, v_27.color.w); +} + +v2f_surf vert_surf ( + in appdata_full v_28 +) +{ + vec4 wpos_29; + float z_30; + v2f_surf o_31; + treevertex (v_28); + vec4 tmpvar_32; + tmpvar_32 = (gl_ModelViewProjectionMatrix * v_28.vertex); + o_31.pos = tmpvar_32; + float tmpvar_33; + tmpvar_33 = -((gl_ModelViewMatrix * v_28.vertex).z); + z_30 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = z_30; + o_31._ShadowZFade.x = tmpvar_34; + float tmpvar_35; + tmpvar_35 = ((z_30 * _LightShadowData.z) + _LightShadowData.w); + o_31._ShadowZFade.y = vec2(tmpvar_35).y; + vec4 tmpvar_36; + tmpvar_36 = (_Object2World * v_28.vertex); + wpos_29 = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = (_World2Shadow * wpos_29).xyz; + o_31._ShadowCoord0 = tmpvar_37; + vec3 tmpvar_38; + tmpvar_38 = (_World2Shadow1 * wpos_29).xyz; + o_31._ShadowCoord1 = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = (_World2Shadow2 * wpos_29).xyz; + o_31._ShadowCoord2 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = (_World2Shadow3 * wpos_29).xyz; + o_31._ShadowCoord3 = tmpvar_40; + return o_31; +} + +void main () +{ + appdata_full xlt_v_41; + v2f_surf xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Vertex.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_41.vertex = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = TANGENT.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_41.tangent = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_Normal.xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_41.normal = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_41.texcoord = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_41.texcoord1 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = gl_Color.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_v_41.color = tmpvar_54; + v2f_surf tmpvar_55; + tmpvar_55 = vert_surf (xlt_v_41); + v2f_surf tmpvar_56; + tmpvar_56 = tmpvar_55; + xl_retval_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_42.pos.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_Position = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_42._ShadowCoord0.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[0] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_42._ShadowCoord1.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[1] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_42._ShadowCoord2.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[2] = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65.w = 0.0; + tmpvar_65.xyz = xl_retval_42._ShadowCoord3.xyz; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + gl_TexCoord[3] = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.zw = vec2(0.0, 0.0); + tmpvar_67.xy = xl_retval_42._ShadowZFade.xy; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + gl_TexCoord[4] = tmpvar_68; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-out.txt new file mode 100644 index 000000000..e0f158851 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Bark3-out.txt @@ -0,0 +1,56 @@ +uniform mat4 _World2Shadow3; +uniform mat4 _World2Shadow2; +uniform mat4 _World2Shadow1; +uniform mat4 _World2Shadow; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _LightShadowData; +void main () +{ + vec2 tmpvar_1; + vec4 pos_2; + pos_2.w = gl_Vertex.w; + pos_2.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_3; + tmpvar_3.w = 0.0; + tmpvar_3.xyz = pos_2.xyz; + pos_2.xyz = mix (pos_2.xyz, (_TerrainEngineBendTree * tmpvar_3).xyz, gl_Color.www); + vec3 tmpvar_4; + tmpvar_4.xz = vec2(0.0, 0.0); + tmpvar_4.y = _SquashPlaneNormal.w; + vec4 tmpvar_5; + tmpvar_5.w = 1.0; + tmpvar_5.xyz = mix ((pos_2.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_4 - pos_2.xyz)) * _SquashPlaneNormal.xyz)), pos_2.xyz, vec3(_SquashAmount)); + pos_2 = tmpvar_5; + float tmpvar_6; + tmpvar_6 = -((gl_ModelViewMatrix * tmpvar_5).z); + tmpvar_1.x = tmpvar_6; + tmpvar_1.y = ((tmpvar_6 * _LightShadowData.z) + _LightShadowData.w); + vec4 tmpvar_7; + tmpvar_7 = (_Object2World * tmpvar_5); + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_5); + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = (_World2Shadow * tmpvar_7).xyz; + gl_TexCoord[0] = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.w = 0.0; + tmpvar_9.xyz = (_World2Shadow1 * tmpvar_7).xyz; + gl_TexCoord[1] = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = (_World2Shadow2 * tmpvar_7).xyz; + gl_TexCoord[2] = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11.w = 0.0; + tmpvar_11.xyz = (_World2Shadow3 * tmpvar_7).xyz; + gl_TexCoord[3] = tmpvar_11; + vec4 tmpvar_12; + tmpvar_12.zw = vec2(0.0, 0.0); + tmpvar_12.xy = tmpvar_1; + gl_TexCoord[4] = tmpvar_12; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-ir.txt new file mode 100644 index 000000000..3373ad2f9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-ir.txt @@ -0,0 +1,212 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void TerrainAnimateTree ( + inout vec4 pos_16, + in float alpha_17 +) +{ + vec3 bent_18; + vec3 tmpvar_19; + tmpvar_19 = (pos_16.xyz * _Scale.xyz); + pos_16.xyz = tmpvar_19.xyz.xyz; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = pos_16.xyz.xyz; + vec3 tmpvar_21; + tmpvar_21 = (_TerrainEngineBendTree * tmpvar_20).xyz; + bent_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(alpha_17); + vec3 tmpvar_23; + tmpvar_23 = mix (pos_16.xyz, bent_18, tmpvar_22); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + pos_16.xyz = tmpvar_24.xyz.xyz; + vec4 tmpvar_25; + tmpvar_25 = Squash (pos_16); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + pos_16 = tmpvar_26; +} + +void treevertex ( + inout appdata_full v_27 +) +{ + TerrainAnimateTree (v_27.vertex, v_27.color.w); +} + +void PositionFog ( + in vec4 v_28, + out vec4 pos_29, + out float fog_30 +) +{ + vec4 tmpvar_31; + tmpvar_31 = (gl_ModelViewProjectionMatrix * v_28); + pos_29 = tmpvar_31; + float tmpvar_32; + tmpvar_32 = pos_29.z; + fog_30 = tmpvar_32; +} + +vec4 ComputeScreenPos ( + in vec4 pos_33 +) +{ + vec4 o_34; + vec4 tmpvar_35; + tmpvar_35 = (pos_33 * 0.5); + o_34 = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36.x = o_34.x; + tmpvar_36.y = (o_34.y * _ProjectionParams.x); + vec2 tmpvar_37; + tmpvar_37 = (tmpvar_36 + o_34.w); + o_34.xy = tmpvar_37.xy.xy; + vec2 tmpvar_38; + tmpvar_38 = pos_33.zw; + o_34.zw = tmpvar_38.xxxy.zw; + return o_34; +} + +v2f_surf vert_surf ( + in appdata_full v_39 +) +{ + v2f_surf o_40; + treevertex (v_39); + PositionFog (v_39.vertex, o_40.pos, o_40.fog); + vec2 tmpvar_41; + tmpvar_41 = ((v_39.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_40.hip_pack0 = tmpvar_41.xy.xy; + vec4 tmpvar_42; + tmpvar_42 = ComputeScreenPos (o_40.pos); + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + o_40.hip_screen = tmpvar_43; + return o_40; +} + +void main () +{ + appdata_full xlt_v_44; + v2f_surf xl_retval_45; + vec4 tmpvar_46; + tmpvar_46 = gl_Vertex.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_v_44.vertex = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = TANGENT.xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlt_v_44.tangent = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = gl_Normal.xyz; + vec3 tmpvar_51; + tmpvar_51 = tmpvar_50; + xlt_v_44.normal = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + xlt_v_44.texcoord = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + xlt_v_44.texcoord1 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = gl_Color.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + xlt_v_44.color = tmpvar_57; + v2f_surf tmpvar_58; + tmpvar_58 = vert_surf (xlt_v_44); + v2f_surf tmpvar_59; + tmpvar_59 = tmpvar_58; + xl_retval_45 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = xl_retval_45.pos.xyzw; + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + gl_Position = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_62.x = xl_retval_45.fog; + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + xlv_FOG = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64.zw = vec2(0.0, 0.0); + tmpvar_64.xy = xl_retval_45.hip_pack0.xy; + vec4 tmpvar_65; + tmpvar_65 = tmpvar_64; + gl_TexCoord[0] = tmpvar_65; + vec4 tmpvar_66; + tmpvar_66 = xl_retval_45.hip_screen.xyzw; + vec4 tmpvar_67; + tmpvar_67 = tmpvar_66; + gl_TexCoord[1] = tmpvar_67; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-out.txt new file mode 100644 index 000000000..92f9d351d --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves1-out.txt @@ -0,0 +1,45 @@ +varying vec4 xlv_FOG; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 pos_1; + pos_1.w = gl_Vertex.w; + pos_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_2; + tmpvar_2.w = 0.0; + tmpvar_2.xyz = pos_1.xyz; + pos_1.xyz = mix (pos_1.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); + vec3 tmpvar_3; + tmpvar_3.xz = vec2(0.0, 0.0); + tmpvar_3.y = _SquashPlaneNormal.w; + vec4 tmpvar_4; + tmpvar_4.w = 1.0; + tmpvar_4.xyz = mix ((pos_1.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos_1.xyz)) * _SquashPlaneNormal.xyz)), pos_1.xyz, vec3(_SquashAmount)); + pos_1 = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5 = (gl_ModelViewProjectionMatrix * tmpvar_4); + vec4 o_6; + vec4 tmpvar_7; + tmpvar_7 = (tmpvar_5 * 0.5); + vec2 tmpvar_8; + tmpvar_8.x = tmpvar_7.x; + tmpvar_8.y = (tmpvar_7.y * _ProjectionParams.x); + o_6.xy = (tmpvar_8 + tmpvar_7.w); + o_6.zw = tmpvar_5.zw; + gl_Position = tmpvar_5; + vec4 tmpvar_9; + tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_9.x = tmpvar_5.z; + xlv_FOG = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.zw = vec2(0.0, 0.0); + tmpvar_10.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_10; + gl_TexCoord[1] = o_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Nature_Soft_Occlusion_Leaves3-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-ir.txt new file mode 100644 index 000000000..839bed816 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-ir.txt @@ -0,0 +1,172 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec3 vec; + vec2 hip_pack0; +}; +attribute vec4 TANGENT; +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _LightPositionRange; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void TerrainAnimateTree ( + inout vec4 pos_16, + in float alpha_17 +) +{ + vec3 bent_18; + vec3 tmpvar_19; + tmpvar_19 = (pos_16.xyz * _Scale.xyz); + pos_16.xyz = tmpvar_19.xyz.xyz; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = pos_16.xyz.xyz; + vec3 tmpvar_21; + tmpvar_21 = (_TerrainEngineBendTree * tmpvar_20).xyz; + bent_18 = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = vec3(alpha_17); + vec3 tmpvar_23; + tmpvar_23 = mix (pos_16.xyz, bent_18, tmpvar_22); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + pos_16.xyz = tmpvar_24.xyz.xyz; + vec4 tmpvar_25; + tmpvar_25 = Squash (pos_16); + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + pos_16 = tmpvar_26; +} + +void treevertex ( + inout appdata_full v_27 +) +{ + TerrainAnimateTree (v_27.vertex, v_27.color.w); +} + +v2f_surf vert_surf ( + in appdata_full v_28 +) +{ + v2f_surf o_29; + treevertex (v_28); + vec2 tmpvar_30; + tmpvar_30 = ((v_28.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_29.hip_pack0 = tmpvar_30.xy.xy; + vec3 tmpvar_31; + tmpvar_31 = ((_Object2World * v_28.vertex).xyz - _LightPositionRange.xyz); + o_29.vec = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = (gl_ModelViewProjectionMatrix * v_28.vertex); + o_29.pos = tmpvar_32; + return o_29; +} + +void main () +{ + appdata_full xlt_v_33; + v2f_surf xl_retval_34; + vec4 tmpvar_35; + tmpvar_35 = gl_Vertex.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_33.vertex = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = TANGENT.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_33.tangent = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = gl_Normal.xyz; + vec3 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_33.normal = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_33.texcoord = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_33.texcoord1 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_Color.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_33.color = tmpvar_46; + v2f_surf tmpvar_47; + tmpvar_47 = vert_surf (xlt_v_33); + v2f_surf tmpvar_48; + tmpvar_48 = tmpvar_47; + xl_retval_34 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = xl_retval_34.pos.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_Position = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_34.vec.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[0] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.zw = vec2(0.0, 0.0); + tmpvar_53.xy = xl_retval_34.hip_pack0.xy; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[1] = tmpvar_54; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-out.txt new file mode 100644 index 000000000..2c3eddff3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Nature_Soft_Occlusion_Leaves3-out.txt @@ -0,0 +1,34 @@ +uniform mat4 _TerrainEngineBendTree; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _LightPositionRange; +void main () +{ + vec4 pos_1; + pos_1.w = gl_Vertex.w; + pos_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 tmpvar_2; + tmpvar_2.w = 0.0; + tmpvar_2.xyz = pos_1.xyz; + pos_1.xyz = mix (pos_1.xyz, (_TerrainEngineBendTree * tmpvar_2).xyz, gl_Color.www); + vec3 tmpvar_3; + tmpvar_3.xz = vec2(0.0, 0.0); + tmpvar_3.y = _SquashPlaneNormal.w; + vec4 tmpvar_4; + tmpvar_4.w = 1.0; + tmpvar_4.xyz = mix ((pos_1.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_3 - pos_1.xyz)) * _SquashPlaneNormal.xyz)), pos_1.xyz, vec3(_SquashAmount)); + pos_1 = tmpvar_4; + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_4); + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = ((_Object2World * tmpvar_4).xyz - _LightPositionRange.xyz); + gl_TexCoord[0] = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[1] = tmpvar_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-ir.txt new file mode 100644 index 000000000..c13bd778e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-ir.txt @@ -0,0 +1,439 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 vlight; + vec4 _ShadowCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 ShadeSH9 ( + in vec4 normal_9 +) +{ + vec3 x3_10; + float vC_11; + vec3 x2_12; + vec4 vB_13; + vec3 x1_14; + float tmpvar_15; + tmpvar_15 = dot (unity_SHAr, normal_9); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + x1_14.x = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (unity_SHAg, normal_9); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + x1_14.y = vec2(tmpvar_18).y; + float tmpvar_19; + tmpvar_19 = dot (unity_SHAb, normal_9); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + x1_14.z = vec3(tmpvar_20).z; + vec4 tmpvar_21; + tmpvar_21 = (normal_9.xyzz * normal_9.yzzx); + vB_13 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (unity_SHBr, vB_13); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + x2_12.x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (unity_SHBg, vB_13); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + x2_12.y = vec2(tmpvar_25).y; + float tmpvar_26; + tmpvar_26 = dot (unity_SHBb, vB_13); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + x2_12.z = vec3(tmpvar_27).z; + float tmpvar_28; + tmpvar_28 = ((normal_9.x * normal_9.x) - (normal_9.y * normal_9.y)); + vC_11 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (unity_SHC.xyz * vC_11); + x3_10 = tmpvar_29; + return ((x1_14 + x2_12) + x3_10); +} + +vec3 Shade4PointLights ( + in vec4 lightPosX_30, + in vec4 lightPosY_31, + in vec4 lightPosZ_32, + in vec3 lightColor0_33, + in vec3 lightColor1_34, + in vec3 lightColor2_35, + in vec3 lightColor3_36, + in vec4 lightAttenSq_37, + in vec3 pos_38, + in vec3 normal_39 +) +{ + vec3 col_40; + vec4 diff_41; + vec4 atten_42; + vec4 corr_43; + vec4 ndotl_44; + vec4 lengthSq_45; + vec4 toLightZ_46; + vec4 toLightY_47; + vec4 toLightX_48; + vec4 tmpvar_49; + tmpvar_49 = (lightPosX_30 - pos_38.x); + toLightX_48 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = (lightPosY_31 - pos_38.y); + toLightY_47 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = (lightPosZ_32 - pos_38.z); + toLightZ_46 = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = vec4(0.0, 0.0, 0.0, 0.0); + lengthSq_45 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = (lengthSq_45 + (toLightX_48 * toLightX_48)); + lengthSq_45 = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = (lengthSq_45 + (toLightY_47 * toLightY_47)); + lengthSq_45 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = (lengthSq_45 + (toLightZ_46 * toLightZ_46)); + lengthSq_45 = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = vec4(0.0, 0.0, 0.0, 0.0); + ndotl_44 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = (ndotl_44 + (toLightX_48 * normal_39.x)); + ndotl_44 = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58 = (ndotl_44 + (toLightY_47 * normal_39.y)); + ndotl_44 = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = (ndotl_44 + (toLightZ_46 * normal_39.z)); + ndotl_44 = tmpvar_59; + vec4 tmpvar_60; + tmpvar_60 = inversesqrt (lengthSq_45); + vec4 tmpvar_61; + tmpvar_61 = tmpvar_60; + corr_43 = tmpvar_61; + vec4 tmpvar_62; + tmpvar_62 = max (vec4(0.0, 0.0, 0.0, 0.0), (ndotl_44 * corr_43)); + vec4 tmpvar_63; + tmpvar_63 = tmpvar_62; + ndotl_44 = tmpvar_63; + vec4 tmpvar_64; + tmpvar_64 = (1.0 / (1.0 + (lengthSq_45 * lightAttenSq_37))); + atten_42 = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = (ndotl_44 * atten_42); + diff_41 = tmpvar_65; + vec3 tmpvar_66; + tmpvar_66 = vec3(0.0, 0.0, 0.0); + col_40 = tmpvar_66; + vec3 tmpvar_67; + tmpvar_67 = (col_40 + (lightColor0_33 * diff_41.x)); + col_40 = tmpvar_67; + vec3 tmpvar_68; + tmpvar_68 = (col_40 + (lightColor1_34 * diff_41.y)); + col_40 = tmpvar_68; + vec3 tmpvar_69; + tmpvar_69 = (col_40 + (lightColor2_35 * diff_41.z)); + col_40 = tmpvar_69; + vec3 tmpvar_70; + tmpvar_70 = (col_40 + (lightColor3_36 * diff_41.w)); + col_40 = tmpvar_70; + return col_40; +} + +void PositionFog ( + in vec4 v_71, + out vec4 pos_72, + out float fog_73 +) +{ + vec4 tmpvar_74; + tmpvar_74 = (gl_ModelViewProjectionMatrix * v_71); + pos_72 = tmpvar_74; + float tmpvar_75; + tmpvar_75 = pos_72.z; + fog_73 = tmpvar_75; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_76 +) +{ + vec3 objSpaceCameraPos_77; + vec4 tmpvar_78; + tmpvar_78.w = 1.0; + tmpvar_78.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_79; + tmpvar_79 = ((_World2Object * tmpvar_78).xyz * unity_Scale.w); + objSpaceCameraPos_77 = tmpvar_79; + return (objSpaceCameraPos_77 - v_76.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_80 +) +{ + vec3 objSpaceLightPos_81; + vec3 tmpvar_82; + tmpvar_82 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_81 = tmpvar_82; + return objSpaceLightPos_81.xyz; +} + +vec4 ComputeScreenPos ( + in vec4 pos_83 +) +{ + vec4 o_84; + vec4 tmpvar_85; + tmpvar_85 = (pos_83 * 0.5); + o_84 = tmpvar_85; + vec2 tmpvar_86; + tmpvar_86.x = o_84.x; + tmpvar_86.y = (o_84.y * _ProjectionParams.x); + vec2 tmpvar_87; + tmpvar_87 = (tmpvar_86 + o_84.w); + o_84.xy = tmpvar_87.xy.xy; + vec2 tmpvar_88; + tmpvar_88 = pos_83.zw; + o_84.zw = tmpvar_88.xxxy.zw; + return o_84; +} + +v2f_surf vert_surf ( + in appdata_full v_89 +) +{ + vec3 worldPos_90; + vec3 shlight_91; + mat3 rotation_92; + vec3 binormal_93; + vec3 worldN_94; + v2f_surf o_95; + PositionFog (v_89.vertex, o_95.pos, o_95.fog); + vec2 tmpvar_96; + tmpvar_96 = ((v_89.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_95.hip_pack0.xy = tmpvar_96.xy.xy; + vec2 tmpvar_97; + tmpvar_97 = ((v_89.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_95.hip_pack0.zw = tmpvar_97.xxxy.zw; + mat3 tmpvar_98; + tmpvar_98 = xll_constructMat3 (_Object2World); + vec3 tmpvar_99; + tmpvar_99 = (tmpvar_98 * (v_89.normal * unity_Scale.w)); + worldN_94 = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = cross (v_89.normal, v_89.tangent.xyz); + vec3 tmpvar_101; + tmpvar_101 = (tmpvar_100 * v_89.tangent.w); + binormal_93 = tmpvar_101; + mat3 tmpvar_102; + float tmpvar_103; + tmpvar_103 = v_89.tangent.x; + tmpvar_102[0].x = tmpvar_103; + float tmpvar_104; + tmpvar_104 = binormal_93.x; + tmpvar_102[0].y = tmpvar_104; + float tmpvar_105; + tmpvar_105 = v_89.normal.x; + tmpvar_102[0].z = tmpvar_105; + float tmpvar_106; + tmpvar_106 = v_89.tangent.y; + tmpvar_102[1].x = tmpvar_106; + float tmpvar_107; + tmpvar_107 = binormal_93.y; + tmpvar_102[1].y = tmpvar_107; + float tmpvar_108; + tmpvar_108 = v_89.normal.y; + tmpvar_102[1].z = tmpvar_108; + float tmpvar_109; + tmpvar_109 = v_89.tangent.z; + tmpvar_102[2].x = tmpvar_109; + float tmpvar_110; + tmpvar_110 = binormal_93.z; + tmpvar_102[2].y = tmpvar_110; + float tmpvar_111; + tmpvar_111 = v_89.normal.z; + tmpvar_102[2].z = tmpvar_111; + mat3 tmpvar_112; + tmpvar_112 = (tmpvar_102); + rotation_92 = (tmpvar_112); + vec3 tmpvar_113; + tmpvar_113 = ObjSpaceLightDir (v_89.vertex); + vec3 tmpvar_114; + tmpvar_114 = (rotation_92 * tmpvar_113); + o_95.lightDir = tmpvar_114; + vec3 tmpvar_115; + tmpvar_115 = ObjSpaceViewDir (v_89.vertex); + vec3 tmpvar_116; + tmpvar_116 = (rotation_92 * tmpvar_115); + o_95.viewDir = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117.w = 1.0; + tmpvar_117.xyz = worldN_94.xyz; + vec3 tmpvar_118; + tmpvar_118 = ShadeSH9 (tmpvar_117); + vec3 tmpvar_119; + tmpvar_119 = tmpvar_118; + shlight_91 = tmpvar_119; + vec3 tmpvar_120; + tmpvar_120 = shlight_91; + o_95.vlight = tmpvar_120; + vec3 tmpvar_121; + tmpvar_121 = (_Object2World * v_89.vertex).xyz; + worldPos_90 = tmpvar_121; + vec3 tmpvar_122; + tmpvar_122 = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3, unity_4LightAtten0, worldPos_90, worldN_94); + vec3 tmpvar_123; + tmpvar_123 = (o_95.vlight + tmpvar_122); + o_95.vlight = tmpvar_123; + vec4 tmpvar_124; + tmpvar_124 = ComputeScreenPos (o_95.pos); + vec4 tmpvar_125; + tmpvar_125 = tmpvar_124; + o_95._ShadowCoord = tmpvar_125; + return o_95; +} + +void main () +{ + appdata_full xlt_v_126; + v2f_surf xl_retval_127; + vec4 tmpvar_128; + tmpvar_128 = gl_Vertex.xyzw; + vec4 tmpvar_129; + tmpvar_129 = tmpvar_128; + xlt_v_126.vertex = tmpvar_129; + vec4 tmpvar_130; + tmpvar_130 = TANGENT.xyzw; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + xlt_v_126.tangent = tmpvar_131; + vec3 tmpvar_132; + tmpvar_132 = gl_Normal.xyz; + vec3 tmpvar_133; + tmpvar_133 = tmpvar_132; + xlt_v_126.normal = tmpvar_133; + vec4 tmpvar_134; + tmpvar_134 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_135; + tmpvar_135 = tmpvar_134; + xlt_v_126.texcoord = tmpvar_135; + vec4 tmpvar_136; + tmpvar_136 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_137; + tmpvar_137 = tmpvar_136; + xlt_v_126.texcoord1 = tmpvar_137; + vec4 tmpvar_138; + tmpvar_138 = gl_Color.xyzw; + vec4 tmpvar_139; + tmpvar_139 = tmpvar_138; + xlt_v_126.color = tmpvar_139; + v2f_surf tmpvar_140; + tmpvar_140 = vert_surf (xlt_v_126); + v2f_surf tmpvar_141; + tmpvar_141 = tmpvar_140; + xl_retval_127 = tmpvar_141; + vec4 tmpvar_142; + tmpvar_142 = xl_retval_127.pos.xyzw; + vec4 tmpvar_143; + tmpvar_143 = tmpvar_142; + gl_Position = tmpvar_143; + vec4 tmpvar_144; + tmpvar_144.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_144.x = xl_retval_127.fog; + vec4 tmpvar_145; + tmpvar_145 = tmpvar_144; + xlv_FOG = tmpvar_145; + vec4 tmpvar_146; + tmpvar_146 = xl_retval_127.hip_pack0.xyzw; + vec4 tmpvar_147; + tmpvar_147 = tmpvar_146; + gl_TexCoord[0] = tmpvar_147; + vec4 tmpvar_148; + tmpvar_148.w = 0.0; + tmpvar_148.xyz = xl_retval_127.viewDir.xyz; + vec4 tmpvar_149; + tmpvar_149 = tmpvar_148; + gl_TexCoord[1] = tmpvar_149; + vec4 tmpvar_150; + tmpvar_150.w = 0.0; + tmpvar_150.xyz = xl_retval_127.lightDir.xyz; + vec4 tmpvar_151; + tmpvar_151 = tmpvar_150; + gl_TexCoord[2] = tmpvar_151; + vec4 tmpvar_152; + tmpvar_152.w = 0.0; + tmpvar_152.xyz = xl_retval_127.vlight.xyz; + vec4 tmpvar_153; + tmpvar_153 = tmpvar_152; + gl_TexCoord[3] = tmpvar_153; + vec4 tmpvar_154; + tmpvar_154 = xl_retval_127._ShadowCoord.xyzw; + vec4 tmpvar_155; + tmpvar_155 = tmpvar_154; + gl_TexCoord[4] = tmpvar_155; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-out.txt new file mode 100644 index 000000000..535fdb22c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse-out.txt @@ -0,0 +1,107 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec3 unity_LightColor3; +uniform vec3 unity_LightColor2; +uniform vec3 unity_LightColor1; +uniform vec3 unity_LightColor0; +uniform vec4 unity_4LightPosZ0; +uniform vec4 unity_4LightPosY0; +uniform vec4 unity_4LightPosX0; +uniform vec4 unity_4LightAtten0; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + mat3 tmpvar_3; + tmpvar_3[0] = _Object2World[0].xyz; + tmpvar_3[1] = _Object2World[1].xyz; + tmpvar_3[2] = _Object2World[2].xyz; + vec3 tmpvar_4; + tmpvar_4 = (tmpvar_3 * (gl_Normal * unity_Scale.w)); + vec3 tmpvar_5; + tmpvar_5 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_6; + tmpvar_6[0].x = TANGENT.x; + tmpvar_6[0].y = tmpvar_5.x; + tmpvar_6[0].z = gl_Normal.x; + tmpvar_6[1].x = TANGENT.y; + tmpvar_6[1].y = tmpvar_5.y; + tmpvar_6[1].z = gl_Normal.y; + tmpvar_6[2].x = TANGENT.z; + tmpvar_6[2].y = tmpvar_5.z; + tmpvar_6[2].z = gl_Normal.z; + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xyz = _WorldSpaceCameraPos; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = tmpvar_4; + vec3 x2_9; + vec3 x1_10; + x1_10.x = dot (unity_SHAr, tmpvar_8); + x1_10.y = dot (unity_SHAg, tmpvar_8); + x1_10.z = dot (unity_SHAb, tmpvar_8); + vec4 tmpvar_11; + tmpvar_11 = (tmpvar_4.xyzz * tmpvar_4.yzzx); + x2_9.x = dot (unity_SHBr, tmpvar_11); + x2_9.y = dot (unity_SHBg, tmpvar_11); + x2_9.z = dot (unity_SHBb, tmpvar_11); + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * gl_Vertex).xyz; + vec4 tmpvar_13; + tmpvar_13 = (unity_4LightPosX0 - tmpvar_12.x); + vec4 tmpvar_14; + tmpvar_14 = (unity_4LightPosY0 - tmpvar_12.y); + vec4 tmpvar_15; + tmpvar_15 = (unity_4LightPosZ0 - tmpvar_12.z); + vec4 tmpvar_16; + tmpvar_16 = (((tmpvar_13 * tmpvar_13) + (tmpvar_14 * tmpvar_14)) + (tmpvar_15 * tmpvar_15)); + vec4 tmpvar_17; + tmpvar_17 = (max (vec4(0.0, 0.0, 0.0, 0.0), ((((tmpvar_13 * tmpvar_4.x) + (tmpvar_14 * tmpvar_4.y)) + (tmpvar_15 * tmpvar_4.z)) * inversesqrt(tmpvar_16))) * (1.0/((1.0 + (tmpvar_16 * unity_4LightAtten0))))); + vec4 o_18; + vec4 tmpvar_19; + tmpvar_19 = (tmpvar_2 * 0.5); + vec2 tmpvar_20; + tmpvar_20.x = tmpvar_19.x; + tmpvar_20.y = (tmpvar_19.y * _ProjectionParams.x); + o_18.xy = (tmpvar_20 + tmpvar_19.w); + o_18.zw = tmpvar_2.zw; + gl_Position = tmpvar_2; + vec4 tmpvar_21; + tmpvar_21.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_21.x = tmpvar_2.z; + xlv_FOG = tmpvar_21; + gl_TexCoord[0] = tmpvar_1; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); + gl_TexCoord[1] = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23.w = 0.0; + tmpvar_23.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); + gl_TexCoord[2] = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24.w = 0.0; + tmpvar_24.xyz = (((x1_10 + x2_9) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))) + ((((unity_LightColor0 * tmpvar_17.x) + (unity_LightColor1 * tmpvar_17.y)) + (unity_LightColor2 * tmpvar_17.z)) + (unity_LightColor3 * tmpvar_17.w))); + gl_TexCoord[3] = tmpvar_24; + gl_TexCoord[4] = o_18; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-ir.txt new file mode 100644 index 000000000..02196f2be --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-ir.txt @@ -0,0 +1,202 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_10 +) +{ + vec4 o_11; + vec4 tmpvar_12; + tmpvar_12 = (pos_10 * 0.5); + o_11 = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13.x = o_11.x; + tmpvar_13.y = (o_11.y * _ProjectionParams.x); + vec2 tmpvar_14; + tmpvar_14 = (tmpvar_13 + o_11.w); + o_11.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = pos_10.zw; + o_11.zw = tmpvar_15.xxxy.zw; + return o_11; +} + +v2f_surf vert_surf ( + in appdata_full v_16 +) +{ + mat3 rotation_17; + vec3 binormal_18; + v2f_surf o_19; + PositionFog (v_16.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_16.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0.xy = tmpvar_20.xy.xy; + vec2 tmpvar_21; + tmpvar_21 = ((v_16.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_19.hip_pack0.zw = tmpvar_21.xxxy.zw; + vec4 tmpvar_22; + tmpvar_22 = ComputeScreenPos (o_19.pos); + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_19.hip_screen = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = cross (v_16.normal, v_16.tangent.xyz); + vec3 tmpvar_25; + tmpvar_25 = (tmpvar_24 * v_16.tangent.w); + binormal_18 = tmpvar_25; + mat3 tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_16.tangent.x; + tmpvar_26[0].x = tmpvar_27; + float tmpvar_28; + tmpvar_28 = binormal_18.x; + tmpvar_26[0].y = tmpvar_28; + float tmpvar_29; + tmpvar_29 = v_16.normal.x; + tmpvar_26[0].z = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_16.tangent.y; + tmpvar_26[1].x = tmpvar_30; + float tmpvar_31; + tmpvar_31 = binormal_18.y; + tmpvar_26[1].y = tmpvar_31; + float tmpvar_32; + tmpvar_32 = v_16.normal.y; + tmpvar_26[1].z = tmpvar_32; + float tmpvar_33; + tmpvar_33 = v_16.tangent.z; + tmpvar_26[2].x = tmpvar_33; + float tmpvar_34; + tmpvar_34 = binormal_18.z; + tmpvar_26[2].y = tmpvar_34; + float tmpvar_35; + tmpvar_35 = v_16.normal.z; + tmpvar_26[2].z = tmpvar_35; + mat3 tmpvar_36; + tmpvar_36 = (tmpvar_26); + rotation_17 = (tmpvar_36); + vec3 tmpvar_37; + tmpvar_37 = ObjSpaceViewDir (v_16.vertex); + vec3 tmpvar_38; + tmpvar_38 = (rotation_17 * tmpvar_37); + o_19.viewDir = tmpvar_38; + return o_19; +} + +void main () +{ + appdata_full xlt_v_39; + v2f_surf xl_retval_40; + vec4 tmpvar_41; + tmpvar_41 = gl_Vertex.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_39.vertex = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = TANGENT.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_39.tangent = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_Normal.xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_39.normal = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_39.texcoord = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_39.texcoord1 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_Color.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_39.color = tmpvar_52; + v2f_surf tmpvar_53; + tmpvar_53 = vert_surf (xlt_v_39); + v2f_surf tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_40 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_40.pos.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_Position = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_57.x = xl_retval_40.fog; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlv_FOG = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = xl_retval_40.hip_pack0.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[0] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_40.viewDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[1] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = xl_retval_40.hip_screen.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[2] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-out.txt similarity index 62% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-out.txt index fe06607a4..5214368b9 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse1-out.txt @@ -1,8 +1,6 @@ varying vec4 xlv_FOG; attribute vec4 TANGENT; uniform vec4 unity_Scale; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; uniform vec3 _WorldSpaceCameraPos; uniform mat4 _World2Object; uniform vec4 _ProjectionParams; @@ -11,24 +9,20 @@ uniform vec4 _BumpMap_ST; void main () { vec4 tmpvar_1; - vec3 tmpvar_2; - vec4 tmpvar_3; - tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); - vec4 o_i0; + vec4 o_3; vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * 0.5); - o_i0 = tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); vec2 tmpvar_5; tmpvar_5.x = tmpvar_4.x; tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_5 + tmpvar_4.w); - o_i0.zw = tmpvar_3.zw; - tmpvar_2.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_2.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; vec3 tmpvar_6; - tmpvar_6 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_6 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_7; tmpvar_7[0].x = TANGENT.x; tmpvar_7[0].y = tmpvar_6.x; @@ -42,20 +36,16 @@ void main () vec4 tmpvar_8; tmpvar_8.w = 1.0; tmpvar_8.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_3; + gl_Position = tmpvar_2; vec4 tmpvar_9; tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_9.x = tmpvar_3.z; + tmpvar_9.x = tmpvar_2.z; xlv_FOG = tmpvar_9; gl_TexCoord[0] = tmpvar_1; vec4 tmpvar_10; tmpvar_10.w = 0.0; tmpvar_10.xyz = (tmpvar_7 * (((_World2Object * tmpvar_8).xyz * unity_Scale.w) - gl_Vertex.xyz)); gl_TexCoord[1] = tmpvar_10; - gl_TexCoord[2] = o_i0; - vec4 tmpvar_11; - tmpvar_11.w = 0.0; - tmpvar_11.xyz = tmpvar_2; - gl_TexCoord[3] = tmpvar_11; + gl_TexCoord[2] = o_3; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Parallax_Diffuse2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-ir.txt new file mode 100644 index 000000000..534c6f07e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-ir.txt @@ -0,0 +1,217 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_10 +) +{ + vec4 o_11; + vec4 tmpvar_12; + tmpvar_12 = (pos_10 * 0.5); + o_11 = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13.x = o_11.x; + tmpvar_13.y = (o_11.y * _ProjectionParams.x); + vec2 tmpvar_14; + tmpvar_14 = (tmpvar_13 + o_11.w); + o_11.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = pos_10.zw; + o_11.zw = tmpvar_15.xxxy.zw; + return o_11; +} + +v2f_surf vert_surf ( + in appdata_full v_16 +) +{ + mat3 rotation_17; + vec3 binormal_18; + v2f_surf o_19; + PositionFog (v_16.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_16.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0.xy = tmpvar_20.xy.xy; + vec2 tmpvar_21; + tmpvar_21 = ((v_16.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_19.hip_pack0.zw = tmpvar_21.xxxy.zw; + vec4 tmpvar_22; + tmpvar_22 = ComputeScreenPos (o_19.pos); + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_19.hip_screen = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = ((v_16.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_19.hip_lmapFade.xy = tmpvar_24.xy.xy; + float tmpvar_25; + tmpvar_25 = ((-((gl_ModelViewMatrix * v_16.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_19.hip_lmapFade.z = vec3(tmpvar_25).z; + vec3 tmpvar_26; + tmpvar_26 = cross (v_16.normal, v_16.tangent.xyz); + vec3 tmpvar_27; + tmpvar_27 = (tmpvar_26 * v_16.tangent.w); + binormal_18 = tmpvar_27; + mat3 tmpvar_28; + float tmpvar_29; + tmpvar_29 = v_16.tangent.x; + tmpvar_28[0].x = tmpvar_29; + float tmpvar_30; + tmpvar_30 = binormal_18.x; + tmpvar_28[0].y = tmpvar_30; + float tmpvar_31; + tmpvar_31 = v_16.normal.x; + tmpvar_28[0].z = tmpvar_31; + float tmpvar_32; + tmpvar_32 = v_16.tangent.y; + tmpvar_28[1].x = tmpvar_32; + float tmpvar_33; + tmpvar_33 = binormal_18.y; + tmpvar_28[1].y = tmpvar_33; + float tmpvar_34; + tmpvar_34 = v_16.normal.y; + tmpvar_28[1].z = tmpvar_34; + float tmpvar_35; + tmpvar_35 = v_16.tangent.z; + tmpvar_28[2].x = tmpvar_35; + float tmpvar_36; + tmpvar_36 = binormal_18.z; + tmpvar_28[2].y = tmpvar_36; + float tmpvar_37; + tmpvar_37 = v_16.normal.z; + tmpvar_28[2].z = tmpvar_37; + mat3 tmpvar_38; + tmpvar_38 = (tmpvar_28); + rotation_17 = (tmpvar_38); + vec3 tmpvar_39; + tmpvar_39 = ObjSpaceViewDir (v_16.vertex); + vec3 tmpvar_40; + tmpvar_40 = (rotation_17 * tmpvar_39); + o_19.viewDir = tmpvar_40; + return o_19; +} + +void main () +{ + appdata_full xlt_v_41; + v2f_surf xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Vertex.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_41.vertex = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = TANGENT.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_41.tangent = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_Normal.xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_41.normal = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_41.texcoord = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_41.texcoord1 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = gl_Color.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_v_41.color = tmpvar_54; + v2f_surf tmpvar_55; + tmpvar_55 = vert_surf (xlt_v_41); + v2f_surf tmpvar_56; + tmpvar_56 = tmpvar_55; + xl_retval_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_42.pos.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_Position = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_59.x = xl_retval_42.fog; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xlv_FOG = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = xl_retval_42.hip_pack0.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[0] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_42.viewDir.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[1] = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = xl_retval_42.hip_screen.xyzw; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + gl_TexCoord[2] = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.w = 0.0; + tmpvar_67.xyz = xl_retval_42.hip_lmapFade.xyz; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + gl_TexCoord[3] = tmpvar_68; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-out.txt new file mode 100644 index 000000000..81b6e5681 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Parallax_Diffuse2-out.txt @@ -0,0 +1,60 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void main () +{ + vec4 tmpvar_1; + vec3 tmpvar_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); + tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + vec4 o_4; + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_3 * 0.5); + vec2 tmpvar_6; + tmpvar_6.x = tmpvar_5.x; + tmpvar_6.y = (tmpvar_5.y * _ProjectionParams.x); + o_4.xy = (tmpvar_6 + tmpvar_5.w); + o_4.zw = tmpvar_3.zw; + tmpvar_2.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_2.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + vec3 tmpvar_7; + tmpvar_7 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_8; + tmpvar_8[0].x = TANGENT.x; + tmpvar_8[0].y = tmpvar_7.x; + tmpvar_8[0].z = gl_Normal.x; + tmpvar_8[1].x = TANGENT.y; + tmpvar_8[1].y = tmpvar_7.y; + tmpvar_8[1].z = gl_Normal.y; + tmpvar_8[2].x = TANGENT.z; + tmpvar_8[2].y = tmpvar_7.z; + tmpvar_8[2].z = gl_Normal.z; + vec4 tmpvar_9; + tmpvar_9.w = 1.0; + tmpvar_9.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_3; + vec4 tmpvar_10; + tmpvar_10.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_10.x = tmpvar_3.z; + xlv_FOG = tmpvar_10; + gl_TexCoord[0] = tmpvar_1; + vec4 tmpvar_11; + tmpvar_11.w = 0.0; + tmpvar_11.xyz = (tmpvar_8 * (((_World2Object * tmpvar_9).xyz * unity_Scale.w) - gl_Vertex.xyz)); + gl_TexCoord[1] = tmpvar_11; + gl_TexCoord[2] = o_4; + vec4 tmpvar_12; + tmpvar_12.w = 0.0; + tmpvar_12.xyz = tmpvar_2; + gl_TexCoord[3] = tmpvar_12; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-ir.txt new file mode 100644 index 000000000..848c01530 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-ir.txt @@ -0,0 +1,70 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +struct appdata_t { + vec4 vertex; + vec4 color; + vec2 texcoord; +}; +uniform vec4 _MainTex_ST; +v2f vert ( + in appdata_t v_1 +) +{ + v2f o_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_2.vertex = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4 = v_1.color; + o_2.color = tmpvar_4; + vec2 tmpvar_5; + tmpvar_5 = ((v_1.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_2.texcoord = tmpvar_5; + return o_2; +} + +void main () +{ + appdata_t xlt_v_6; + v2f xl_retval_7; + vec4 tmpvar_8; + tmpvar_8 = gl_Vertex.xyzw; + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + xlt_v_6.vertex = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Color.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_v_6.color = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_MultiTexCoord0.xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_v_6.texcoord = tmpvar_13; + v2f tmpvar_14; + tmpvar_14 = vert (xlt_v_6); + v2f tmpvar_15; + tmpvar_15 = tmpvar_14; + xl_retval_7 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = xl_retval_7.vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + gl_Position = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_7.color.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_FrontColor = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = xl_retval_7.texcoord.xy; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + gl_TexCoord[0] = tmpvar_21; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Particles_Blend-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Particles_Blend-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..79c900f52 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-ir.txt @@ -0,0 +1,178 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec2 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_6 +) +{ + vec3 objSpaceLightPos_7; + vec3 tmpvar_8; + tmpvar_8 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_7 = tmpvar_8; + return objSpaceLightPos_7.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + PositionFog (v_9.vertex, o_12.pos, o_12.fog); + vec2 tmpvar_13; + tmpvar_13 = ((v_9.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_12.hip_pack0.xy = tmpvar_13.xy.xy; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0.zw = tmpvar_14.xxxy.zw; + vec3 tmpvar_15; + tmpvar_15 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_9.tangent.w); + binormal_11 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_9.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_11.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_11.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_11.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_9.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_10 = (tmpvar_27); + vec3 tmpvar_28; + tmpvar_28 = ObjSpaceLightDir (v_9.vertex); + vec3 tmpvar_29; + tmpvar_29 = (rotation_10 * tmpvar_28); + o_12.lightDir = tmpvar_29; + vec2 tmpvar_30; + tmpvar_30 = (_LightMatrix0 * (_Object2World * v_9.vertex)).xy; + o_12._LightCoord = tmpvar_30; + return o_12; +} + +void main () +{ + appdata_full xlt_v_31; + v2f_surf xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = gl_Vertex.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_31.vertex = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = TANGENT.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_31.tangent = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_Normal.xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_31.normal = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_31.texcoord = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_31.texcoord1 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Color.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_31.color = tmpvar_44; + v2f_surf tmpvar_45; + tmpvar_45 = vert_surf (xlt_v_31); + v2f_surf tmpvar_46; + tmpvar_46 = tmpvar_45; + xl_retval_32 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = xl_retval_32.pos.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_Position = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_49.x = xl_retval_32.fog; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlv_FOG = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_32.hip_pack0.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[0] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_32.lightDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[1] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.zw = vec2(0.0, 0.0); + tmpvar_55.xy = xl_retval_32._LightCoord.xy; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[2] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-out.txt similarity index 93% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-out.txt index ee11d4d75..a35760d3f 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Legacy_Shaders_Lightmapped_Bumped_Diffuse-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse-out.txt @@ -14,7 +14,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..a4f3e476a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-ir.txt @@ -0,0 +1,277 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec4 TtoW0; + vec4 TtoW1; + vec4 TtoW2; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void PositionFog ( + in vec4 v_9, + out vec4 pos_10, + out float fog_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9); + pos_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = pos_10.z; + fog_11 = tmpvar_13; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_14 +) +{ + vec3 objSpaceCameraPos_15; + vec4 tmpvar_16; + tmpvar_16.w = 1.0; + tmpvar_16.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_17; + tmpvar_17 = ((_World2Object * tmpvar_16).xyz * unity_Scale.w); + objSpaceCameraPos_15 = tmpvar_17; + return (objSpaceCameraPos_15 - v_14.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_18 +) +{ + vec4 o_19; + vec4 tmpvar_20; + tmpvar_20 = (pos_18 * 0.5); + o_19 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21.x = o_19.x; + tmpvar_21.y = (o_19.y * _ProjectionParams.x); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 + o_19.w); + o_19.xy = tmpvar_22.xy.xy; + vec2 tmpvar_23; + tmpvar_23 = pos_18.zw; + o_19.zw = tmpvar_23.xxxy.zw; + return o_19; +} + +v2f_surf vert_surf ( + in appdata_full v_24 +) +{ + mat3 rotation_25; + vec3 binormal_26; + vec3 worldRefl_27; + vec3 viewDir_28; + v2f_surf o_29; + PositionFog (v_24.vertex, o_29.pos, o_29.fog); + vec2 tmpvar_30; + tmpvar_30 = ((v_24.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_29.hip_pack0.xy = tmpvar_30.xy.xy; + vec2 tmpvar_31; + tmpvar_31 = ((v_24.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_29.hip_pack0.zw = tmpvar_31.xxxy.zw; + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceViewDir (v_24.vertex); + vec3 tmpvar_33; + tmpvar_33 = -(tmpvar_32); + viewDir_28 = tmpvar_33; + mat3 tmpvar_34; + tmpvar_34 = xll_constructMat3 (_Object2World); + vec3 tmpvar_35; + tmpvar_35 = (tmpvar_34 * viewDir_28); + worldRefl_27 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = cross (v_24.normal, v_24.tangent.xyz); + vec3 tmpvar_37; + tmpvar_37 = (tmpvar_36 * v_24.tangent.w); + binormal_26 = tmpvar_37; + mat3 tmpvar_38; + float tmpvar_39; + tmpvar_39 = v_24.tangent.x; + tmpvar_38[0].x = tmpvar_39; + float tmpvar_40; + tmpvar_40 = binormal_26.x; + tmpvar_38[0].y = tmpvar_40; + float tmpvar_41; + tmpvar_41 = v_24.normal.x; + tmpvar_38[0].z = tmpvar_41; + float tmpvar_42; + tmpvar_42 = v_24.tangent.y; + tmpvar_38[1].x = tmpvar_42; + float tmpvar_43; + tmpvar_43 = binormal_26.y; + tmpvar_38[1].y = tmpvar_43; + float tmpvar_44; + tmpvar_44 = v_24.normal.y; + tmpvar_38[1].z = tmpvar_44; + float tmpvar_45; + tmpvar_45 = v_24.tangent.z; + tmpvar_38[2].x = tmpvar_45; + float tmpvar_46; + tmpvar_46 = binormal_26.z; + tmpvar_38[2].y = tmpvar_46; + float tmpvar_47; + tmpvar_47 = v_24.normal.z; + tmpvar_38[2].z = tmpvar_47; + mat3 tmpvar_48; + tmpvar_48 = (tmpvar_38); + rotation_25 = (tmpvar_48); + vec4 tmpvar_49; + tmpvar_49.xyz = (rotation_25 * _Object2World[0].xyz).xyz; + tmpvar_49.w = worldRefl_27.x; + vec4 tmpvar_50; + tmpvar_50 = (tmpvar_49 * unity_Scale.w); + o_29.TtoW0 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.xyz = (rotation_25 * _Object2World[1].xyz).xyz; + tmpvar_51.w = worldRefl_27.y; + vec4 tmpvar_52; + tmpvar_52 = (tmpvar_51 * unity_Scale.w); + o_29.TtoW1 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.xyz = (rotation_25 * _Object2World[2].xyz).xyz; + tmpvar_53.w = worldRefl_27.z; + vec4 tmpvar_54; + tmpvar_54 = (tmpvar_53 * unity_Scale.w); + o_29.TtoW2 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = ComputeScreenPos (o_29.pos); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + o_29.hip_screen = tmpvar_56; + vec2 tmpvar_57; + tmpvar_57 = ((v_24.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_29.hip_lmapFade.xy = tmpvar_57.xy.xy; + float tmpvar_58; + tmpvar_58 = ((-((gl_ModelViewMatrix * v_24.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_29.hip_lmapFade.z = vec3(tmpvar_58).z; + return o_29; +} + +void main () +{ + appdata_full xlt_v_59; + v2f_surf xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = gl_Vertex.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + xlt_v_59.vertex = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = TANGENT.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_v_59.tangent = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = gl_Normal.xyz; + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_v_59.normal = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_v_59.texcoord = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_v_59.texcoord1 = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = gl_Color.xyzw; + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_v_59.color = tmpvar_72; + v2f_surf tmpvar_73; + tmpvar_73 = vert_surf (xlt_v_59); + v2f_surf tmpvar_74; + tmpvar_74 = tmpvar_73; + xl_retval_60 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = xl_retval_60.pos.xyzw; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + gl_Position = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_77.x = xl_retval_60.fog; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlv_FOG = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = xl_retval_60.hip_pack0.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + gl_TexCoord[0] = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = xl_retval_60.hip_screen.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + gl_TexCoord[1] = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = xl_retval_60.TtoW0.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + gl_TexCoord[2] = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = xl_retval_60.TtoW1.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + gl_TexCoord[3] = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = xl_retval_60.TtoW2.xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + gl_TexCoord[4] = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89.w = 0.0; + tmpvar_89.xyz = xl_retval_60.hip_lmapFade.xyz; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + gl_TexCoord[5] = tmpvar_90; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-out.txt similarity index 78% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-out.txt index 06434a482..60cde11b9 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Diffuse1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Diffuse1-out.txt @@ -27,7 +27,7 @@ void main () vec3 tmpvar_6; tmpvar_6 = (tmpvar_5 * (gl_Vertex.xyz - ((_World2Object * tmpvar_4).xyz * unity_Scale.w))); vec3 tmpvar_7; - tmpvar_7 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_7 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_8; tmpvar_8[0].x = TANGENT.x; tmpvar_8[0].y = tmpvar_7.x; @@ -47,30 +47,29 @@ void main () vec4 tmpvar_11; tmpvar_11.xyz = (tmpvar_8 * _Object2World[2].xyz); tmpvar_11.w = tmpvar_6.z; - vec4 o_i0; - vec4 tmpvar_12; - tmpvar_12 = (tmpvar_3 * 0.5); - o_i0 = tmpvar_12; - vec2 tmpvar_13; - tmpvar_13.x = tmpvar_12.x; - tmpvar_13.y = (tmpvar_12.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_13 + tmpvar_12.w); - o_i0.zw = tmpvar_3.zw; + vec4 o_12; + vec4 tmpvar_13; + tmpvar_13 = (tmpvar_3 * 0.5); + vec2 tmpvar_14; + tmpvar_14.x = tmpvar_13.x; + tmpvar_14.y = (tmpvar_13.y * _ProjectionParams.x); + o_12.xy = (tmpvar_14 + tmpvar_13.w); + o_12.zw = tmpvar_3.zw; tmpvar_2.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); tmpvar_2.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); gl_Position = tmpvar_3; - vec4 tmpvar_14; - tmpvar_14.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_14.x = tmpvar_3.z; - xlv_FOG = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_15.x = tmpvar_3.z; + xlv_FOG = tmpvar_15; gl_TexCoord[0] = tmpvar_1; - gl_TexCoord[1] = o_i0; + gl_TexCoord[1] = o_12; gl_TexCoord[2] = (tmpvar_9 * unity_Scale.w); gl_TexCoord[3] = (tmpvar_10 * unity_Scale.w); gl_TexCoord[4] = (tmpvar_11 * unity_Scale.w); - vec4 tmpvar_15; - tmpvar_15.w = 0.0; - tmpvar_15.xyz = tmpvar_2; - gl_TexCoord[5] = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16.w = 0.0; + tmpvar_16.xyz = tmpvar_2; + gl_TexCoord[5] = tmpvar_16; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-ir.txt new file mode 100644 index 000000000..db41fd5f6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-ir.txt @@ -0,0 +1,206 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return ((objSpaceLightPos_11.xyz * unity_Scale.w) - v_10.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)).xyz; + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_38._LightCoord.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-out.txt index 3dc712ebe..1909fb05a 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-ir.txt new file mode 100644 index 000000000..179c8cc48 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-ir.txt @@ -0,0 +1,177 @@ +struct v2f_surf { + vec4 pos; + vec2 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + vec4 tmpvar_13; + tmpvar_13 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_12.pos = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0 = tmpvar_14.xy.xy; + vec3 tmpvar_15; + tmpvar_15 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_9.tangent.w); + binormal_11 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_9.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_11.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_11.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_11.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_9.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_10 = (tmpvar_27); + mat3 tmpvar_28; + tmpvar_28 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_29; + tmpvar_29 = (rotation_10 * tmpvar_28[0].xyz); + o_12.TtoV0 = tmpvar_29; + mat3 tmpvar_30; + tmpvar_30 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_31; + tmpvar_31 = (rotation_10 * tmpvar_30[1].xyz); + o_12.TtoV1 = tmpvar_31; + mat3 tmpvar_32; + tmpvar_32 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_33; + tmpvar_33 = (rotation_10 * tmpvar_32[2].xyz); + o_12.TtoV2 = tmpvar_33; + return o_12; +} + +void main () +{ + appdata_full xlt_v_34; + v2f_surf xl_retval_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Vertex.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_34.vertex = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = TANGENT.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_34.tangent = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = gl_Normal.xyz; + vec3 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_34.normal = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_34.texcoord = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlt_v_34.texcoord1 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = gl_Color.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlt_v_34.color = tmpvar_47; + v2f_surf tmpvar_48; + tmpvar_48 = vert_surf (xlt_v_34); + v2f_surf tmpvar_49; + tmpvar_49 = tmpvar_48; + xl_retval_35 = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = xl_retval_35.pos.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_Position = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.zw = vec2(0.0, 0.0); + tmpvar_52.xy = xl_retval_35.hip_pack0.xy; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[0] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54.w = 0.0; + tmpvar_54.xyz = xl_retval_35.TtoV0.xyz; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[1] = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56.w = 0.0; + tmpvar_56.xyz = xl_retval_35.TtoV1.xyz; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_TexCoord[2] = tmpvar_57; + vec4 tmpvar_58; + tmpvar_58.w = 0.0; + tmpvar_58.xyz = xl_retval_35.TtoV2.xyz; + vec4 tmpvar_59; + tmpvar_59 = tmpvar_58; + gl_TexCoord[3] = tmpvar_59; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-out.txt new file mode 100644 index 000000000..2d9c18872 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular1-out.txt @@ -0,0 +1,35 @@ +attribute vec4 TANGENT; +uniform vec4 _BumpMap_ST; +void main () +{ + vec3 tmpvar_1; + tmpvar_1 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_2; + tmpvar_2[0].x = TANGENT.x; + tmpvar_2[0].y = tmpvar_1.x; + tmpvar_2[0].z = gl_Normal.x; + tmpvar_2[1].x = TANGENT.y; + tmpvar_2[1].y = tmpvar_1.y; + tmpvar_2[1].z = gl_Normal.y; + tmpvar_2[2].x = TANGENT.z; + tmpvar_2[2].y = tmpvar_1.z; + tmpvar_2[2].z = gl_Normal.z; + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_3; + tmpvar_3.zw = vec2(0.0, 0.0); + tmpvar_3.xy = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + gl_TexCoord[0] = tmpvar_3; + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = (tmpvar_2 * gl_ModelViewMatrixInverseTranspose[0].xyz); + gl_TexCoord[1] = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = (tmpvar_2 * gl_ModelViewMatrixInverseTranspose[1].xyz); + gl_TexCoord[2] = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 0.0; + tmpvar_6.xyz = (tmpvar_2 * gl_ModelViewMatrixInverseTranspose[2].xyz); + gl_TexCoord[3] = tmpvar_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-ir.txt new file mode 100644 index 000000000..6b7fe6c63 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-ir.txt @@ -0,0 +1,262 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec4 TtoW0; + vec4 TtoW1; + vec4 TtoW2; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void PositionFog ( + in vec4 v_9, + out vec4 pos_10, + out float fog_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9); + pos_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = pos_10.z; + fog_11 = tmpvar_13; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_14 +) +{ + vec3 objSpaceCameraPos_15; + vec4 tmpvar_16; + tmpvar_16.w = 1.0; + tmpvar_16.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_17; + tmpvar_17 = ((_World2Object * tmpvar_16).xyz * unity_Scale.w); + objSpaceCameraPos_15 = tmpvar_17; + return (objSpaceCameraPos_15 - v_14.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_18 +) +{ + vec4 o_19; + vec4 tmpvar_20; + tmpvar_20 = (pos_18 * 0.5); + o_19 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21.x = o_19.x; + tmpvar_21.y = (o_19.y * _ProjectionParams.x); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 + o_19.w); + o_19.xy = tmpvar_22.xy.xy; + vec2 tmpvar_23; + tmpvar_23 = pos_18.zw; + o_19.zw = tmpvar_23.xxxy.zw; + return o_19; +} + +v2f_surf vert_surf ( + in appdata_full v_24 +) +{ + mat3 rotation_25; + vec3 binormal_26; + vec3 worldRefl_27; + vec3 viewDir_28; + v2f_surf o_29; + PositionFog (v_24.vertex, o_29.pos, o_29.fog); + vec2 tmpvar_30; + tmpvar_30 = ((v_24.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_29.hip_pack0.xy = tmpvar_30.xy.xy; + vec2 tmpvar_31; + tmpvar_31 = ((v_24.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_29.hip_pack0.zw = tmpvar_31.xxxy.zw; + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceViewDir (v_24.vertex); + vec3 tmpvar_33; + tmpvar_33 = -(tmpvar_32); + viewDir_28 = tmpvar_33; + mat3 tmpvar_34; + tmpvar_34 = xll_constructMat3 (_Object2World); + vec3 tmpvar_35; + tmpvar_35 = (tmpvar_34 * viewDir_28); + worldRefl_27 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = cross (v_24.normal, v_24.tangent.xyz); + vec3 tmpvar_37; + tmpvar_37 = (tmpvar_36 * v_24.tangent.w); + binormal_26 = tmpvar_37; + mat3 tmpvar_38; + float tmpvar_39; + tmpvar_39 = v_24.tangent.x; + tmpvar_38[0].x = tmpvar_39; + float tmpvar_40; + tmpvar_40 = binormal_26.x; + tmpvar_38[0].y = tmpvar_40; + float tmpvar_41; + tmpvar_41 = v_24.normal.x; + tmpvar_38[0].z = tmpvar_41; + float tmpvar_42; + tmpvar_42 = v_24.tangent.y; + tmpvar_38[1].x = tmpvar_42; + float tmpvar_43; + tmpvar_43 = binormal_26.y; + tmpvar_38[1].y = tmpvar_43; + float tmpvar_44; + tmpvar_44 = v_24.normal.y; + tmpvar_38[1].z = tmpvar_44; + float tmpvar_45; + tmpvar_45 = v_24.tangent.z; + tmpvar_38[2].x = tmpvar_45; + float tmpvar_46; + tmpvar_46 = binormal_26.z; + tmpvar_38[2].y = tmpvar_46; + float tmpvar_47; + tmpvar_47 = v_24.normal.z; + tmpvar_38[2].z = tmpvar_47; + mat3 tmpvar_48; + tmpvar_48 = (tmpvar_38); + rotation_25 = (tmpvar_48); + vec4 tmpvar_49; + tmpvar_49.xyz = (rotation_25 * _Object2World[0].xyz).xyz; + tmpvar_49.w = worldRefl_27.x; + vec4 tmpvar_50; + tmpvar_50 = (tmpvar_49 * unity_Scale.w); + o_29.TtoW0 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.xyz = (rotation_25 * _Object2World[1].xyz).xyz; + tmpvar_51.w = worldRefl_27.y; + vec4 tmpvar_52; + tmpvar_52 = (tmpvar_51 * unity_Scale.w); + o_29.TtoW1 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.xyz = (rotation_25 * _Object2World[2].xyz).xyz; + tmpvar_53.w = worldRefl_27.z; + vec4 tmpvar_54; + tmpvar_54 = (tmpvar_53 * unity_Scale.w); + o_29.TtoW2 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = ComputeScreenPos (o_29.pos); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + o_29.hip_screen = tmpvar_56; + return o_29; +} + +void main () +{ + appdata_full xlt_v_57; + v2f_surf xl_retval_58; + vec4 tmpvar_59; + tmpvar_59 = gl_Vertex.xyzw; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xlt_v_57.vertex = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = TANGENT.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + xlt_v_57.tangent = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = gl_Normal.xyz; + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_v_57.normal = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_v_57.texcoord = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_v_57.texcoord1 = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = gl_Color.xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_v_57.color = tmpvar_70; + v2f_surf tmpvar_71; + tmpvar_71 = vert_surf (xlt_v_57); + v2f_surf tmpvar_72; + tmpvar_72 = tmpvar_71; + xl_retval_58 = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = xl_retval_58.pos.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + gl_Position = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_75.x = xl_retval_58.fog; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlv_FOG = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77 = xl_retval_58.hip_pack0.xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + gl_TexCoord[0] = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = xl_retval_58.hip_screen.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + gl_TexCoord[1] = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = xl_retval_58.TtoW0.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + gl_TexCoord[2] = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = xl_retval_58.TtoW1.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + gl_TexCoord[3] = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = xl_retval_58.TtoW2.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + gl_TexCoord[4] = tmpvar_86; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-out.txt similarity index 78% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-out.txt index 22aeb24ee..9edd70601 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Specular2-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Specular2-out.txt @@ -24,7 +24,7 @@ void main () vec3 tmpvar_5; tmpvar_5 = (tmpvar_4 * (gl_Vertex.xyz - ((_World2Object * tmpvar_3).xyz * unity_Scale.w))); vec3 tmpvar_6; - tmpvar_6 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_6 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_7; tmpvar_7[0].x = TANGENT.x; tmpvar_7[0].y = tmpvar_6.x; @@ -44,22 +44,21 @@ void main () vec4 tmpvar_10; tmpvar_10.xyz = (tmpvar_7 * _Object2World[2].xyz); tmpvar_10.w = tmpvar_5.z; - vec4 o_i0; - vec4 tmpvar_11; - tmpvar_11 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_11; - vec2 tmpvar_12; - tmpvar_12.x = tmpvar_11.x; - tmpvar_12.y = (tmpvar_11.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_12 + tmpvar_11.w); - o_i0.zw = tmpvar_2.zw; + vec4 o_11; + vec4 tmpvar_12; + tmpvar_12 = (tmpvar_2 * 0.5); + vec2 tmpvar_13; + tmpvar_13.x = tmpvar_12.x; + tmpvar_13.y = (tmpvar_12.y * _ProjectionParams.x); + o_11.xy = (tmpvar_13 + tmpvar_12.w); + o_11.zw = tmpvar_2.zw; gl_Position = tmpvar_2; - vec4 tmpvar_13; - tmpvar_13.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_13.x = tmpvar_2.z; - xlv_FOG = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_14.x = tmpvar_2.z; + xlv_FOG = tmpvar_14; gl_TexCoord[0] = tmpvar_1; - gl_TexCoord[1] = o_i0; + gl_TexCoord[1] = o_11; gl_TexCoord[2] = (tmpvar_8 * unity_Scale.w); gl_TexCoord[3] = (tmpvar_9 * unity_Scale.w); gl_TexCoord[4] = (tmpvar_10 * unity_Scale.w); diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-ir.txt new file mode 100644 index 000000000..c484e67be --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-ir.txt @@ -0,0 +1,189 @@ +struct v2f { + vec4 pos; + float fog; + vec2 uv; + vec2 uv2; + vec3 I; + vec3 TtoW0; + vec3 TtoW1; + vec3 TtoW2; +}; +struct appdata_tan { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +vec3 WorldSpaceViewDir ( + in vec4 v_1 +) +{ + return (_WorldSpaceCameraPos.xyz - (_Object2World * v_1).xyz); +} + +void PositionFog ( + in vec4 v_2, + out vec4 pos_3, + out float fog_4 +) +{ + vec4 tmpvar_5; + tmpvar_5 = (gl_ModelViewProjectionMatrix * v_2); + pos_3 = tmpvar_5; + float tmpvar_6; + tmpvar_6 = pos_3.z; + fog_4 = tmpvar_6; +} + +v2f vert ( + in appdata_tan v_7 +) +{ + mat3 rotation_8; + vec3 binormal_9; + v2f o_10; + PositionFog (v_7.vertex, o_10.pos, o_10.fog); + vec2 tmpvar_11; + tmpvar_11 = ((v_7.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_10.uv = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = ((v_7.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_10.uv2 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = WorldSpaceViewDir (v_7.vertex); + vec3 tmpvar_14; + tmpvar_14 = -(tmpvar_13); + o_10.I = tmpvar_14; + vec3 tmpvar_15; + tmpvar_15 = cross (v_7.normal, v_7.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_7.tangent.w); + binormal_9 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_7.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_9.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_7.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_7.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_9.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_7.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_7.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_9.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_7.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_8 = (tmpvar_27); + vec3 tmpvar_28; + tmpvar_28 = (rotation_8 * (_Object2World[0].xyz * unity_Scale.w)); + o_10.TtoW0 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (rotation_8 * (_Object2World[1].xyz * unity_Scale.w)); + o_10.TtoW1 = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = (rotation_8 * (_Object2World[2].xyz * unity_Scale.w)); + o_10.TtoW2 = tmpvar_30; + return o_10; +} + +void main () +{ + appdata_tan xlt_v_31; + v2f xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = gl_Vertex.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_31.vertex = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = TANGENT.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_31.tangent = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_Normal.xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_31.normal = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_31.texcoord = tmpvar_40; + v2f tmpvar_41; + tmpvar_41 = vert (xlt_v_31); + v2f tmpvar_42; + tmpvar_42 = tmpvar_41; + xl_retval_32 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = xl_retval_32.pos.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_Position = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_45.x = xl_retval_32.fog; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlv_FOG = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.zw = vec2(0.0, 0.0); + tmpvar_47.xy = xl_retval_32.uv.xy; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[0] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.zw = vec2(0.0, 0.0); + tmpvar_49.xy = xl_retval_32.uv2.xy; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[1] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_32.I.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[2] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_32.TtoW0.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[3] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.w = 0.0; + tmpvar_55.xyz = xl_retval_32.TtoW1.xyz; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[4] = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.w = 0.0; + tmpvar_57.xyz = xl_retval_32.TtoW2.xyz; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[5] = tmpvar_58; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-out.txt index e3d501682..336fa7a7d 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Bumped_Unlit-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Bumped_Unlit-out.txt @@ -10,7 +10,7 @@ void main () vec4 tmpvar_1; tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); vec3 tmpvar_2; - tmpvar_2 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_2 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_3; tmpvar_3[0].x = TANGENT.x; tmpvar_3[0].y = tmpvar_2.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-ir.txt new file mode 100644 index 000000000..dfe724d28 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-ir.txt @@ -0,0 +1,171 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + mat3 tmpvar_20; + tmpvar_20 = xll_constructMat3 (_Object2World); + vec3 tmpvar_21; + tmpvar_21 = (tmpvar_20 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_18.lightDir = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = (_LightMatrix0 * (_Object2World * v_17.vertex)); + o_18._LightCoord = tmpvar_24; + return o_18; +} + +void main () +{ + appdata_full xlt_v_25; + v2f_surf xl_retval_26; + vec4 tmpvar_27; + tmpvar_27 = gl_Vertex.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_25.vertex = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = TANGENT.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_25.tangent = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = gl_Normal.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_25.normal = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_25.texcoord = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_25.texcoord1 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Color.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_25.color = tmpvar_38; + v2f_surf tmpvar_39; + tmpvar_39 = vert_surf (xlt_v_25); + v2f_surf tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_26 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_26.pos.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_Position = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_43.x = xl_retval_26.fog; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlv_FOG = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.zw = vec2(0.0, 0.0); + tmpvar_45.xy = xl_retval_26.hip_pack0.xy; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[0] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 0.0; + tmpvar_47.xyz = xl_retval_26.normal.xyz; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[1] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_26.lightDir.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[2] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_26._LightCoord.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[3] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-ir.txt new file mode 100644 index 000000000..7f9615b21 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-ir.txt @@ -0,0 +1,197 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldRefl; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void PositionFog ( + in vec4 v_9, + out vec4 pos_10, + out float fog_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9); + pos_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = pos_10.z; + fog_11 = tmpvar_13; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_14 +) +{ + vec3 objSpaceCameraPos_15; + vec4 tmpvar_16; + tmpvar_16.w = 1.0; + tmpvar_16.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_17; + tmpvar_17 = ((_World2Object * tmpvar_16).xyz * unity_Scale.w); + objSpaceCameraPos_15 = tmpvar_17; + return (objSpaceCameraPos_15 - v_14.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_18 +) +{ + vec4 o_19; + vec4 tmpvar_20; + tmpvar_20 = (pos_18 * 0.5); + o_19 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21.x = o_19.x; + tmpvar_21.y = (o_19.y * _ProjectionParams.x); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 + o_19.w); + o_19.xy = tmpvar_22.xy.xy; + vec2 tmpvar_23; + tmpvar_23 = pos_18.zw; + o_19.zw = tmpvar_23.xxxy.zw; + return o_19; +} + +v2f_surf vert_surf ( + in appdata_full v_24 +) +{ + vec3 viewRefl_25; + vec3 viewDir_26; + v2f_surf o_27; + PositionFog (v_24.vertex, o_27.pos, o_27.fog); + vec2 tmpvar_28; + tmpvar_28 = ((v_24.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_27.hip_pack0 = tmpvar_28.xy.xy; + vec3 tmpvar_29; + tmpvar_29 = ObjSpaceViewDir (v_24.vertex); + vec3 tmpvar_30; + tmpvar_30 = -(tmpvar_29); + viewDir_26 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = reflect (viewDir_26, v_24.normal); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + viewRefl_25 = tmpvar_32; + mat3 tmpvar_33; + tmpvar_33 = xll_constructMat3 (_Object2World); + vec3 tmpvar_34; + tmpvar_34 = (tmpvar_33 * viewRefl_25); + o_27.worldRefl = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = ComputeScreenPos (o_27.pos); + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + o_27.hip_screen = tmpvar_36; + return o_27; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.zw = vec2(0.0, 0.0); + tmpvar_57.xy = xl_retval_38.hip_pack0.xy; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.worldRefl.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = xl_retval_38.hip_screen.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-out.txt new file mode 100644 index 000000000..46f6b0110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Diffuse1-out.txt @@ -0,0 +1,44 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_2; + tmpvar_2.w = 1.0; + tmpvar_2.xyz = _WorldSpaceCameraPos; + vec3 tmpvar_3; + tmpvar_3 = (gl_Vertex.xyz - ((_World2Object * tmpvar_2).xyz * unity_Scale.w)); + mat3 tmpvar_4; + tmpvar_4[0] = _Object2World[0].xyz; + tmpvar_4[1] = _Object2World[1].xyz; + tmpvar_4[2] = _Object2World[2].xyz; + vec4 o_5; + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_1 * 0.5); + vec2 tmpvar_7; + tmpvar_7.x = tmpvar_6.x; + tmpvar_7.y = (tmpvar_6.y * _ProjectionParams.x); + o_5.xy = (tmpvar_7 + tmpvar_6.w); + o_5.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_8; + tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_8.x = tmpvar_1.z; + xlv_FOG = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.zw = vec2(0.0, 0.0); + tmpvar_9.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = (tmpvar_4 * (tmpvar_3 - (2.0 * (dot (gl_Normal, tmpvar_3) * gl_Normal)))); + gl_TexCoord[1] = tmpvar_10; + gl_TexCoord[2] = o_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-ir.txt new file mode 100644 index 000000000..45db56523 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-ir.txt @@ -0,0 +1,205 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return ((objSpaceLightPos_11.xyz * unity_Scale.w) - v_10.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)); + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = xl_retval_38._LightCoord.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-out.txt index cf827be05..7433c9fa4 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-ir.txt new file mode 100644 index 000000000..dde933701 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-ir.txt @@ -0,0 +1,274 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec4 TtoW0; + vec4 TtoW1; + vec4 TtoW2; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void PositionFog ( + in vec4 v_9, + out vec4 pos_10, + out float fog_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9); + pos_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = pos_10.z; + fog_11 = tmpvar_13; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_14 +) +{ + vec3 objSpaceCameraPos_15; + vec4 tmpvar_16; + tmpvar_16.w = 1.0; + tmpvar_16.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_17; + tmpvar_17 = ((_World2Object * tmpvar_16).xyz * unity_Scale.w); + objSpaceCameraPos_15 = tmpvar_17; + return (objSpaceCameraPos_15 - v_14.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_18 +) +{ + vec4 o_19; + vec4 tmpvar_20; + tmpvar_20 = (pos_18 * 0.5); + o_19 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21.x = o_19.x; + tmpvar_21.y = (o_19.y * _ProjectionParams.x); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 + o_19.w); + o_19.xy = tmpvar_22.xy.xy; + vec2 tmpvar_23; + tmpvar_23 = pos_18.zw; + o_19.zw = tmpvar_23.xxxy.zw; + return o_19; +} + +v2f_surf vert_surf ( + in appdata_full v_24 +) +{ + mat3 rotation_25; + vec3 binormal_26; + vec3 worldRefl_27; + vec3 viewDir_28; + v2f_surf o_29; + PositionFog (v_24.vertex, o_29.pos, o_29.fog); + vec2 tmpvar_30; + tmpvar_30 = ((v_24.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_29.hip_pack0.xy = tmpvar_30.xy.xy; + vec2 tmpvar_31; + tmpvar_31 = ((v_24.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_29.hip_pack0.zw = tmpvar_31.xxxy.zw; + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceViewDir (v_24.vertex); + vec3 tmpvar_33; + tmpvar_33 = -(tmpvar_32); + viewDir_28 = tmpvar_33; + mat3 tmpvar_34; + tmpvar_34 = xll_constructMat3 (_Object2World); + vec3 tmpvar_35; + tmpvar_35 = (tmpvar_34 * viewDir_28); + worldRefl_27 = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = cross (v_24.normal, v_24.tangent.xyz); + vec3 tmpvar_37; + tmpvar_37 = (tmpvar_36 * v_24.tangent.w); + binormal_26 = tmpvar_37; + mat3 tmpvar_38; + float tmpvar_39; + tmpvar_39 = v_24.tangent.x; + tmpvar_38[0].x = tmpvar_39; + float tmpvar_40; + tmpvar_40 = binormal_26.x; + tmpvar_38[0].y = tmpvar_40; + float tmpvar_41; + tmpvar_41 = v_24.normal.x; + tmpvar_38[0].z = tmpvar_41; + float tmpvar_42; + tmpvar_42 = v_24.tangent.y; + tmpvar_38[1].x = tmpvar_42; + float tmpvar_43; + tmpvar_43 = binormal_26.y; + tmpvar_38[1].y = tmpvar_43; + float tmpvar_44; + tmpvar_44 = v_24.normal.y; + tmpvar_38[1].z = tmpvar_44; + float tmpvar_45; + tmpvar_45 = v_24.tangent.z; + tmpvar_38[2].x = tmpvar_45; + float tmpvar_46; + tmpvar_46 = binormal_26.z; + tmpvar_38[2].y = tmpvar_46; + float tmpvar_47; + tmpvar_47 = v_24.normal.z; + tmpvar_38[2].z = tmpvar_47; + mat3 tmpvar_48; + tmpvar_48 = (tmpvar_38); + rotation_25 = (tmpvar_48); + vec4 tmpvar_49; + tmpvar_49.xyz = (rotation_25 * _Object2World[0].xyz).xyz; + tmpvar_49.w = worldRefl_27.x; + vec4 tmpvar_50; + tmpvar_50 = (tmpvar_49 * unity_Scale.w); + o_29.TtoW0 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.xyz = (rotation_25 * _Object2World[1].xyz).xyz; + tmpvar_51.w = worldRefl_27.y; + vec4 tmpvar_52; + tmpvar_52 = (tmpvar_51 * unity_Scale.w); + o_29.TtoW1 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.xyz = (rotation_25 * _Object2World[2].xyz).xyz; + tmpvar_53.w = worldRefl_27.z; + vec4 tmpvar_54; + tmpvar_54 = (tmpvar_53 * unity_Scale.w); + o_29.TtoW2 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = ComputeScreenPos (o_29.pos); + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + o_29.hip_screen = tmpvar_56; + vec3 tmpvar_57; + tmpvar_57 = ObjSpaceViewDir (v_24.vertex); + vec3 tmpvar_58; + tmpvar_58 = (rotation_25 * tmpvar_57); + o_29.viewDir = tmpvar_58; + return o_29; +} + +void main () +{ + appdata_full xlt_v_59; + v2f_surf xl_retval_60; + vec4 tmpvar_61; + tmpvar_61 = gl_Vertex.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + xlt_v_59.vertex = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = TANGENT.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + xlt_v_59.tangent = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = gl_Normal.xyz; + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + xlt_v_59.normal = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + xlt_v_59.texcoord = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + xlt_v_59.texcoord1 = tmpvar_70; + vec4 tmpvar_71; + tmpvar_71 = gl_Color.xyzw; + vec4 tmpvar_72; + tmpvar_72 = tmpvar_71; + xlt_v_59.color = tmpvar_72; + v2f_surf tmpvar_73; + tmpvar_73 = vert_surf (xlt_v_59); + v2f_surf tmpvar_74; + tmpvar_74 = tmpvar_73; + xl_retval_60 = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = xl_retval_60.pos.xyzw; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + gl_Position = tmpvar_76; + vec4 tmpvar_77; + tmpvar_77.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_77.x = xl_retval_60.fog; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlv_FOG = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = xl_retval_60.hip_pack0.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + gl_TexCoord[0] = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81.w = 0.0; + tmpvar_81.xyz = xl_retval_60.viewDir.xyz; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + gl_TexCoord[1] = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = xl_retval_60.hip_screen.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + gl_TexCoord[2] = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = xl_retval_60.TtoW0.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + gl_TexCoord[3] = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = xl_retval_60.TtoW1.xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + gl_TexCoord[4] = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89 = xl_retval_60.TtoW2.xyzw; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + gl_TexCoord[5] = tmpvar_90; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-out.txt similarity index 72% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-out.txt index a95262aeb..1f0c03a1e 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Diffuse1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Diffuse1-out.txt @@ -24,7 +24,7 @@ void main () vec3 tmpvar_5; tmpvar_5 = (tmpvar_4 * (gl_Vertex.xyz - ((_World2Object * tmpvar_3).xyz * unity_Scale.w))); vec3 tmpvar_6; - tmpvar_6 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_6 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_7; tmpvar_7[0].x = TANGENT.x; tmpvar_7[0].y = tmpvar_6.x; @@ -44,29 +44,28 @@ void main () vec4 tmpvar_10; tmpvar_10.xyz = (tmpvar_7 * _Object2World[2].xyz); tmpvar_10.w = tmpvar_5.z; - vec4 o_i0; - vec4 tmpvar_11; - tmpvar_11 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_11; - vec2 tmpvar_12; - tmpvar_12.x = tmpvar_11.x; - tmpvar_12.y = (tmpvar_11.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_12 + tmpvar_11.w); - o_i0.zw = tmpvar_2.zw; - vec4 tmpvar_13; - tmpvar_13.w = 1.0; - tmpvar_13.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_2; + vec4 o_11; + vec4 tmpvar_12; + tmpvar_12 = (tmpvar_2 * 0.5); + vec2 tmpvar_13; + tmpvar_13.x = tmpvar_12.x; + tmpvar_13.y = (tmpvar_12.y * _ProjectionParams.x); + o_11.xy = (tmpvar_13 + tmpvar_12.w); + o_11.zw = tmpvar_2.zw; vec4 tmpvar_14; - tmpvar_14.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_14.x = tmpvar_2.z; - xlv_FOG = tmpvar_14; - gl_TexCoord[0] = tmpvar_1; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_2; vec4 tmpvar_15; - tmpvar_15.w = 0.0; - tmpvar_15.xyz = (tmpvar_7 * (((_World2Object * tmpvar_13).xyz * unity_Scale.w) - gl_Vertex.xyz)); - gl_TexCoord[1] = tmpvar_15; - gl_TexCoord[2] = o_i0; + tmpvar_15.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_15.x = tmpvar_2.z; + xlv_FOG = tmpvar_15; + gl_TexCoord[0] = tmpvar_1; + vec4 tmpvar_16; + tmpvar_16.w = 0.0; + tmpvar_16.xyz = (tmpvar_7 * (((_World2Object * tmpvar_14).xyz * unity_Scale.w) - gl_Vertex.xyz)); + gl_TexCoord[1] = tmpvar_16; + gl_TexCoord[2] = o_11; gl_TexCoord[3] = (tmpvar_8 * unity_Scale.w); gl_TexCoord[4] = (tmpvar_9 * unity_Scale.w); gl_TexCoord[5] = (tmpvar_10 * unity_Scale.w); diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-ir.txt new file mode 100644 index 000000000..108214120 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-ir.txt @@ -0,0 +1,206 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return ((objSpaceLightPos_11.xyz * unity_Scale.w) - v_10.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)).xyz; + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_38._LightCoord.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-out.txt index 6d4f4e204..f837248fa 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-ir.txt new file mode 100644 index 000000000..b275478f3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-ir.txt @@ -0,0 +1,206 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec2 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return objSpaceLightPos_11.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec2 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)).xy; + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.zw = vec2(0.0, 0.0); + tmpvar_63.xy = xl_retval_38._LightCoord.xy; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-out.txt index 1e237ae2f..66f4a3ff0 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Parallax_Specular1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Parallax_Specular1-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-ir.txt new file mode 100644 index 000000000..8f70b73cb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-ir.txt @@ -0,0 +1,191 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceViewDir ( + in vec4 v_9 +) +{ + return (_WorldSpaceCameraPos.xyz - (_Object2World * v_9).xyz); +} + +vec3 WorldSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 worldPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * v_10).xyz; + worldPos_11 = tmpvar_12; + return (_WorldSpaceLightPos0.xyz - worldPos_11); +} + +void PositionFog ( + in vec4 v_13, + out vec4 pos_14, + out float fog_15 +) +{ + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * v_13); + pos_14 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = pos_14.z; + fog_15 = tmpvar_17; +} + +v2f_surf vert_surf ( + in appdata_full v_18 +) +{ + v2f_surf o_19; + PositionFog (v_18.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_18.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0 = tmpvar_20.xy.xy; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_18.normal * unity_Scale.w)); + o_19.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_18.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_19.lightDir = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = WorldSpaceViewDir (v_18.vertex); + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + o_19.viewDir = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = (_LightMatrix0 * (_Object2World * v_18.vertex)); + o_19._LightCoord = tmpvar_27; + return o_19; +} + +void main () +{ + appdata_full xlt_v_28; + v2f_surf xl_retval_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Vertex.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_28.vertex = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = TANGENT.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_28.tangent = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = gl_Normal.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_28.normal = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_28.texcoord = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_28.texcoord1 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_Color.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_28.color = tmpvar_41; + v2f_surf tmpvar_42; + tmpvar_42 = vert_surf (xlt_v_28); + v2f_surf tmpvar_43; + tmpvar_43 = tmpvar_42; + xl_retval_29 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = xl_retval_29.pos.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_Position = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_46.x = xl_retval_29.fog; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlv_FOG = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.zw = vec2(0.0, 0.0); + tmpvar_48.xy = xl_retval_29.hip_pack0.xy; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[0] = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.w = 0.0; + tmpvar_50.xyz = xl_retval_29.normal.xyz; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[1] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_29.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[2] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54.w = 0.0; + tmpvar_54.xyz = xl_retval_29.viewDir.xyz; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[3] = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = xl_retval_29._LightCoord.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_TexCoord[4] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Reflective_Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-ir.txt new file mode 100644 index 000000000..7f9615b21 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-ir.txt @@ -0,0 +1,197 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldRefl; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void PositionFog ( + in vec4 v_9, + out vec4 pos_10, + out float fog_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9); + pos_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = pos_10.z; + fog_11 = tmpvar_13; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_14 +) +{ + vec3 objSpaceCameraPos_15; + vec4 tmpvar_16; + tmpvar_16.w = 1.0; + tmpvar_16.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_17; + tmpvar_17 = ((_World2Object * tmpvar_16).xyz * unity_Scale.w); + objSpaceCameraPos_15 = tmpvar_17; + return (objSpaceCameraPos_15 - v_14.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_18 +) +{ + vec4 o_19; + vec4 tmpvar_20; + tmpvar_20 = (pos_18 * 0.5); + o_19 = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21.x = o_19.x; + tmpvar_21.y = (o_19.y * _ProjectionParams.x); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 + o_19.w); + o_19.xy = tmpvar_22.xy.xy; + vec2 tmpvar_23; + tmpvar_23 = pos_18.zw; + o_19.zw = tmpvar_23.xxxy.zw; + return o_19; +} + +v2f_surf vert_surf ( + in appdata_full v_24 +) +{ + vec3 viewRefl_25; + vec3 viewDir_26; + v2f_surf o_27; + PositionFog (v_24.vertex, o_27.pos, o_27.fog); + vec2 tmpvar_28; + tmpvar_28 = ((v_24.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_27.hip_pack0 = tmpvar_28.xy.xy; + vec3 tmpvar_29; + tmpvar_29 = ObjSpaceViewDir (v_24.vertex); + vec3 tmpvar_30; + tmpvar_30 = -(tmpvar_29); + viewDir_26 = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = reflect (viewDir_26, v_24.normal); + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + viewRefl_25 = tmpvar_32; + mat3 tmpvar_33; + tmpvar_33 = xll_constructMat3 (_Object2World); + vec3 tmpvar_34; + tmpvar_34 = (tmpvar_33 * viewRefl_25); + o_27.worldRefl = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = ComputeScreenPos (o_27.pos); + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + o_27.hip_screen = tmpvar_36; + return o_27; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.zw = vec2(0.0, 0.0); + tmpvar_57.xy = xl_retval_38.hip_pack0.xy; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.worldRefl.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61 = xl_retval_38.hip_screen.xyzw; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-out.txt new file mode 100644 index 000000000..46f6b0110 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Reflective_Specular2-out.txt @@ -0,0 +1,44 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_2; + tmpvar_2.w = 1.0; + tmpvar_2.xyz = _WorldSpaceCameraPos; + vec3 tmpvar_3; + tmpvar_3 = (gl_Vertex.xyz - ((_World2Object * tmpvar_2).xyz * unity_Scale.w)); + mat3 tmpvar_4; + tmpvar_4[0] = _Object2World[0].xyz; + tmpvar_4[1] = _Object2World[1].xyz; + tmpvar_4[2] = _Object2World[2].xyz; + vec4 o_5; + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_1 * 0.5); + vec2 tmpvar_7; + tmpvar_7.x = tmpvar_6.x; + tmpvar_7.y = (tmpvar_6.y * _ProjectionParams.x); + o_5.xy = (tmpvar_7 + tmpvar_6.w); + o_5.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_8; + tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_8.x = tmpvar_1.z; + xlv_FOG = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.zw = vec2(0.0, 0.0); + tmpvar_9.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.w = 0.0; + tmpvar_10.xyz = (tmpvar_4 * (tmpvar_3 - (2.0 * (dot (gl_Normal, tmpvar_3) * gl_Normal)))); + gl_TexCoord[1] = tmpvar_10; + gl_TexCoord[2] = o_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-ir.txt new file mode 100644 index 000000000..6ce0c9bcf --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-ir.txt @@ -0,0 +1,54 @@ +struct v2f { + vec4 vertex; + vec3 texcoord; +}; +struct appdata_t { + vec4 vertex; + vec3 texcoord; +}; +v2f vert ( + in appdata_t v_1 +) +{ + v2f o_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_2.vertex = tmpvar_3; + vec3 tmpvar_4; + tmpvar_4 = v_1.texcoord; + o_2.texcoord = tmpvar_4; + return o_2; +} + +void main () +{ + appdata_t xlt_v_5; + v2f xl_retval_6; + vec4 tmpvar_7; + tmpvar_7 = gl_Vertex.xyzw; + vec4 tmpvar_8; + tmpvar_8 = tmpvar_7; + xlt_v_5.vertex = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = gl_MultiTexCoord0.xyz; + vec3 tmpvar_10; + tmpvar_10 = tmpvar_9; + xlt_v_5.texcoord = tmpvar_10; + v2f tmpvar_11; + tmpvar_11 = vert (xlt_v_5); + v2f tmpvar_12; + tmpvar_12 = tmpvar_11; + xl_retval_6 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13 = xl_retval_6.vertex.xyzw; + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + gl_Position = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.w = 0.0; + tmpvar_15.xyz = xl_retval_6.texcoord.xyz; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + gl_TexCoord[0] = tmpvar_16; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-RenderFX_Skybox_Cubed-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-RenderFX_Skybox_Cubed-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..db58fc285 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-ir.txt @@ -0,0 +1,178 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_6 +) +{ + vec3 objSpaceLightPos_7; + vec3 tmpvar_8; + tmpvar_8 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_7 = tmpvar_8; + return ((objSpaceLightPos_7.xyz * unity_Scale.w) - v_6.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + PositionFog (v_9.vertex, o_12.pos, o_12.fog); + vec2 tmpvar_13; + tmpvar_13 = ((v_9.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_12.hip_pack0.xy = tmpvar_13.xy.xy; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0.zw = tmpvar_14.xxxy.zw; + vec3 tmpvar_15; + tmpvar_15 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_9.tangent.w); + binormal_11 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_9.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_11.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_11.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_11.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_9.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_10 = (tmpvar_27); + vec3 tmpvar_28; + tmpvar_28 = ObjSpaceLightDir (v_9.vertex); + vec3 tmpvar_29; + tmpvar_29 = (rotation_10 * tmpvar_28); + o_12.lightDir = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = (_LightMatrix0 * (_Object2World * v_9.vertex)); + o_12._LightCoord = tmpvar_30; + return o_12; +} + +void main () +{ + appdata_full xlt_v_31; + v2f_surf xl_retval_32; + vec4 tmpvar_33; + tmpvar_33 = gl_Vertex.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_31.vertex = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = TANGENT.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_31.tangent = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = gl_Normal.xyz; + vec3 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_31.normal = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_31.texcoord = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_31.texcoord1 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Color.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_31.color = tmpvar_44; + v2f_surf tmpvar_45; + tmpvar_45 = vert_surf (xlt_v_31); + v2f_surf tmpvar_46; + tmpvar_46 = tmpvar_45; + xl_retval_32 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = xl_retval_32.pos.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_Position = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_49.x = xl_retval_32.fog; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlv_FOG = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_32.hip_pack0.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[0] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_32.lightDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[1] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_32._LightCoord.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[2] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-out.txt similarity index 92% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-out.txt index e2733f88c..1fea6ffee 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Diffuse-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Diffuse-out.txt @@ -15,7 +15,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-ir.txt new file mode 100644 index 000000000..7ed21c7f8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-ir.txt @@ -0,0 +1,135 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +uniform vec4 _Illum_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = ((v_12.texcoord.xy * _Illum_ST.xy) + _Illum_ST.zw); + o_13.hip_pack0.zw = tmpvar_15.xxxy.zw; + vec4 tmpvar_16; + tmpvar_16 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_13.hip_screen = tmpvar_17; + return o_13; +} + +void main () +{ + appdata_full xlt_v_18; + v2f_surf xl_retval_19; + vec4 tmpvar_20; + tmpvar_20 = gl_Vertex.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_18.vertex = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = TANGENT.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_18.tangent = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_Normal.xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_18.normal = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_18.texcoord = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_18.texcoord1 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Color.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_18.color = tmpvar_31; + v2f_surf tmpvar_32; + tmpvar_32 = vert_surf (xlt_v_18); + v2f_surf tmpvar_33; + tmpvar_33 = tmpvar_32; + xl_retval_19 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = xl_retval_19.pos.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + gl_Position = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_36.x = xl_retval_19.fog; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlv_FOG = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = xl_retval_19.hip_pack0.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + gl_TexCoord[0] = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_19.hip_screen.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[1] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-out.txt similarity index 53% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-out.txt index 366846d48..f1e3883dd 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Bumped_Specular1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Bumped_Specular1-out.txt @@ -9,21 +9,20 @@ void main () tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _Illum_ST.xy) + _Illum_ST.zw); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; gl_TexCoord[0] = tmpvar_1; - gl_TexCoord[1] = o_i0; + gl_TexCoord[1] = o_3; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-ir.txt new file mode 100644 index 000000000..16bfb4f29 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-ir.txt @@ -0,0 +1,150 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +uniform vec4 _Illum_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = ((v_12.texcoord.xy * _Illum_ST.xy) + _Illum_ST.zw); + o_13.hip_pack0.zw = tmpvar_15.xxxy.zw; + vec4 tmpvar_16; + tmpvar_16 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_13.hip_screen = tmpvar_17; + vec2 tmpvar_18; + tmpvar_18 = ((v_12.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_13.hip_lmapFade.xy = tmpvar_18.xy.xy; + float tmpvar_19; + tmpvar_19 = ((-((gl_ModelViewMatrix * v_12.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_13.hip_lmapFade.z = vec3(tmpvar_19).z; + return o_13; +} + +void main () +{ + appdata_full xlt_v_20; + v2f_surf xl_retval_21; + vec4 tmpvar_22; + tmpvar_22 = gl_Vertex.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_20.vertex = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = TANGENT.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_20.tangent = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = gl_Normal.xyz; + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_20.normal = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_20.texcoord = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_20.texcoord1 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_Color.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_20.color = tmpvar_33; + v2f_surf tmpvar_34; + tmpvar_34 = vert_surf (xlt_v_20); + v2f_surf tmpvar_35; + tmpvar_35 = tmpvar_34; + xl_retval_21 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = xl_retval_21.pos.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + gl_Position = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_38.x = xl_retval_21.fog; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlv_FOG = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_21.hip_pack0.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[0] = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_21.hip_screen.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_TexCoord[1] = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.w = 0.0; + tmpvar_44.xyz = xl_retval_21.hip_lmapFade.xyz; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_TexCoord[2] = tmpvar_45; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-out.txt similarity index 61% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-out.txt index 61b5dc68f..63c99b8ea 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Diffuse1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Diffuse1-out.txt @@ -12,27 +12,26 @@ void main () tmpvar_3 = (gl_ModelViewProjectionMatrix * gl_Vertex); tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _Illum_ST.xy) + _Illum_ST.zw); - vec4 o_i0; - vec4 tmpvar_4; - tmpvar_4 = (tmpvar_3 * 0.5); - o_i0 = tmpvar_4; - vec2 tmpvar_5; - tmpvar_5.x = tmpvar_4.x; - tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_5 + tmpvar_4.w); - o_i0.zw = tmpvar_3.zw; + vec4 o_4; + vec4 tmpvar_5; + tmpvar_5 = (tmpvar_3 * 0.5); + vec2 tmpvar_6; + tmpvar_6.x = tmpvar_5.x; + tmpvar_6.y = (tmpvar_5.y * _ProjectionParams.x); + o_4.xy = (tmpvar_6 + tmpvar_5.w); + o_4.zw = tmpvar_3.zw; tmpvar_2.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); tmpvar_2.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); gl_Position = tmpvar_3; - vec4 tmpvar_6; - tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_6.x = tmpvar_3.z; - xlv_FOG = tmpvar_6; - gl_TexCoord[0] = tmpvar_1; - gl_TexCoord[1] = o_i0; vec4 tmpvar_7; - tmpvar_7.w = 0.0; - tmpvar_7.xyz = tmpvar_2; - gl_TexCoord[2] = tmpvar_7; + tmpvar_7.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_7.x = tmpvar_3.z; + xlv_FOG = tmpvar_7; + gl_TexCoord[0] = tmpvar_1; + gl_TexCoord[1] = o_4; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = tmpvar_2; + gl_TexCoord[2] = tmpvar_8; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-ir.txt new file mode 100644 index 000000000..45db56523 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-ir.txt @@ -0,0 +1,205 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return ((objSpaceLightPos_11.xyz * unity_Scale.w) - v_10.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)); + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = xl_retval_38._LightCoord.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-out.txt index cf827be05..7433c9fa4 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Diffuse-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Diffuse-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-ir.txt new file mode 100644 index 000000000..108214120 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-ir.txt @@ -0,0 +1,206 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 viewDir; + vec3 lightDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return ((objSpaceLightPos_11.xyz * unity_Scale.w) - v_10.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)).xyz; + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_38._LightCoord.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-out.txt index 6d4f4e204..f837248fa 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Parallax_Specular1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Parallax_Specular1-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Self-Illumin_Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Self-Illumin_Specular1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-ir.txt new file mode 100644 index 000000000..cb1cce1b7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-ir.txt @@ -0,0 +1,38 @@ +struct v2f { + vec4 vertex; +}; +struct appdata_t { + vec4 vertex; +}; +v2f vert ( + in appdata_t v_1 +) +{ + v2f o_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_2.vertex = tmpvar_3; + return o_2; +} + +void main () +{ + appdata_t xlt_v_4; + v2f xl_retval_5; + vec4 tmpvar_6; + tmpvar_6 = gl_Vertex.xyzw; + vec4 tmpvar_7; + tmpvar_7 = tmpvar_6; + xlt_v_4.vertex = tmpvar_7; + v2f tmpvar_8; + tmpvar_8 = vert (xlt_v_4); + v2f tmpvar_9; + tmpvar_9 = tmpvar_8; + xl_retval_5 = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10 = xl_retval_5.vertex.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + gl_Position = tmpvar_11; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-ShowDestAlpha-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-ShowDestAlpha-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular-ir.txt new file mode 100644 index 000000000..8f70b73cb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular-ir.txt @@ -0,0 +1,191 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceViewDir ( + in vec4 v_9 +) +{ + return (_WorldSpaceCameraPos.xyz - (_Object2World * v_9).xyz); +} + +vec3 WorldSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 worldPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * v_10).xyz; + worldPos_11 = tmpvar_12; + return (_WorldSpaceLightPos0.xyz - worldPos_11); +} + +void PositionFog ( + in vec4 v_13, + out vec4 pos_14, + out float fog_15 +) +{ + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * v_13); + pos_14 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = pos_14.z; + fog_15 = tmpvar_17; +} + +v2f_surf vert_surf ( + in appdata_full v_18 +) +{ + v2f_surf o_19; + PositionFog (v_18.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_18.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0 = tmpvar_20.xy.xy; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_18.normal * unity_Scale.w)); + o_19.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_18.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_19.lightDir = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = WorldSpaceViewDir (v_18.vertex); + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + o_19.viewDir = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = (_LightMatrix0 * (_Object2World * v_18.vertex)); + o_19._LightCoord = tmpvar_27; + return o_19; +} + +void main () +{ + appdata_full xlt_v_28; + v2f_surf xl_retval_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Vertex.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_28.vertex = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = TANGENT.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_28.tangent = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = gl_Normal.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_28.normal = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_28.texcoord = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_28.texcoord1 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_Color.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_28.color = tmpvar_41; + v2f_surf tmpvar_42; + tmpvar_42 = vert_surf (xlt_v_28); + v2f_surf tmpvar_43; + tmpvar_43 = tmpvar_42; + xl_retval_29 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = xl_retval_29.pos.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_Position = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_46.x = xl_retval_29.fog; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlv_FOG = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.zw = vec2(0.0, 0.0); + tmpvar_48.xy = xl_retval_29.hip_pack0.xy; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[0] = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.w = 0.0; + tmpvar_50.xyz = xl_retval_29.normal.xyz; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[1] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_29.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[2] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54.w = 0.0; + tmpvar_54.xyz = xl_retval_29.viewDir.xyz; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[3] = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56 = xl_retval_29._LightCoord.xyzw; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_TexCoord[4] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Specular-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Specular1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Specular2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-ir.txt new file mode 100644 index 000000000..38e2b72f4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-ir.txt @@ -0,0 +1,147 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + vec2 tmpvar_17; + tmpvar_17 = ((v_12.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_13.hip_lmapFade.xy = tmpvar_17.xy.xy; + float tmpvar_18; + tmpvar_18 = ((-((gl_ModelViewMatrix * v_12.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_13.hip_lmapFade.z = vec3(tmpvar_18).z; + return o_13; +} + +void main () +{ + appdata_full xlt_v_19; + v2f_surf xl_retval_20; + vec4 tmpvar_21; + tmpvar_21 = gl_Vertex.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_19.vertex = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = TANGENT.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_19.tangent = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = gl_Normal.xyz; + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_19.normal = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_19.texcoord = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_19.texcoord1 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = gl_Color.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_19.color = tmpvar_32; + v2f_surf tmpvar_33; + tmpvar_33 = vert_surf (xlt_v_19); + v2f_surf tmpvar_34; + tmpvar_34 = tmpvar_33; + xl_retval_20 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = xl_retval_20.pos.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + gl_Position = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_37.x = xl_retval_20.fog; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlv_FOG = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39.zw = vec2(0.0, 0.0); + tmpvar_39.xy = xl_retval_20.hip_pack0.xy; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[0] = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_20.hip_screen.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_TexCoord[1] = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.w = 0.0; + tmpvar_43.xyz = xl_retval_20.hip_lmapFade.xyz; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_TexCoord[2] = tmpvar_44; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-out.txt new file mode 100644 index 000000000..5dedb6f9a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Specular2-out.txt @@ -0,0 +1,36 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec3 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; + tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + gl_Position = tmpvar_2; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_7; + gl_TexCoord[1] = o_3; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = tmpvar_1; + gl_TexCoord[2] = tmpvar_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-ir.txt new file mode 100644 index 000000000..f2302ccf3 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-ir.txt @@ -0,0 +1,174 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Detail_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0.xy = tmpvar_19.xy.xy; + vec2 tmpvar_20; + tmpvar_20 = ((v_17.texcoord1.xy * _Detail_ST.xy) + _Detail_ST.zw); + o_18.hip_pack0.zw = tmpvar_20.xxxy.zw; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_18.lightDir = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (_LightMatrix0 * (_Object2World * v_17.vertex)); + o_18._LightCoord = tmpvar_25; + return o_18; +} + +void main () +{ + appdata_full xlt_v_26; + v2f_surf xl_retval_27; + vec4 tmpvar_28; + tmpvar_28 = gl_Vertex.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_26.vertex = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = TANGENT.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_26.tangent = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = gl_Normal.xyz; + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_26.normal = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_26.texcoord = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_26.texcoord1 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_Color.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_26.color = tmpvar_39; + v2f_surf tmpvar_40; + tmpvar_40 = vert_surf (xlt_v_26); + v2f_surf tmpvar_41; + tmpvar_41 = tmpvar_40; + xl_retval_27 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_27.pos.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_Position = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_44.x = xl_retval_27.fog; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlv_FOG = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_27.hip_pack0.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[0] = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.w = 0.0; + tmpvar_48.xyz = xl_retval_27.normal.xyz; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[1] = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.w = 0.0; + tmpvar_50.xyz = xl_retval_27.lightDir.xyz; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[2] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52 = xl_retval_27._LightCoord.xyzw; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[3] = tmpvar_53; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-ir.txt new file mode 100644 index 000000000..cb4969bd9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-ir.txt @@ -0,0 +1,135 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +uniform vec4 _Detail_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = ((v_12.texcoord1.xy * _Detail_ST.xy) + _Detail_ST.zw); + o_13.hip_pack0.zw = tmpvar_15.xxxy.zw; + vec4 tmpvar_16; + tmpvar_16 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_13.hip_screen = tmpvar_17; + return o_13; +} + +void main () +{ + appdata_full xlt_v_18; + v2f_surf xl_retval_19; + vec4 tmpvar_20; + tmpvar_20 = gl_Vertex.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_18.vertex = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = TANGENT.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_18.tangent = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_Normal.xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_18.normal = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_18.texcoord = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_18.texcoord1 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Color.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_18.color = tmpvar_31; + v2f_surf tmpvar_32; + tmpvar_32 = vert_surf (xlt_v_18); + v2f_surf tmpvar_33; + tmpvar_33 = tmpvar_32; + xl_retval_19 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = xl_retval_19.pos.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + gl_Position = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_36.x = xl_retval_19.fog; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlv_FOG = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = xl_retval_19.hip_pack0.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + gl_TexCoord[0] = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_19.hip_screen.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[1] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-out.txt similarity index 53% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-out.txt index 18a8b9afb..76ea81825 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_2UV1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_2UV1-out.txt @@ -9,21 +9,20 @@ void main () tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord1.xy * _Detail_ST.xy) + _Detail_ST.zw); - vec4 o_i0; - vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; - vec2 tmpvar_4; - tmpvar_4.x = tmpvar_3.x; - tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; gl_Position = tmpvar_2; - vec4 tmpvar_5; - tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_5.x = tmpvar_2.z; - xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; gl_TexCoord[0] = tmpvar_1; - gl_TexCoord[1] = o_i0; + gl_TexCoord[1] = o_3; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-ir.txt new file mode 100644 index 000000000..cb68a45ee --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-ir.txt @@ -0,0 +1,194 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform vec4 _SpecMap_ST; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceViewDir ( + in vec4 v_9 +) +{ + return (_WorldSpaceCameraPos.xyz - (_Object2World * v_9).xyz); +} + +vec3 WorldSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 worldPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * v_10).xyz; + worldPos_11 = tmpvar_12; + return (_WorldSpaceLightPos0.xyz - worldPos_11); +} + +void PositionFog ( + in vec4 v_13, + out vec4 pos_14, + out float fog_15 +) +{ + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * v_13); + pos_14 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = pos_14.z; + fog_15 = tmpvar_17; +} + +v2f_surf vert_surf ( + in appdata_full v_18 +) +{ + v2f_surf o_19; + PositionFog (v_18.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_18.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0.xy = tmpvar_20.xy.xy; + vec2 tmpvar_21; + tmpvar_21 = ((v_18.texcoord.xy * _SpecMap_ST.xy) + _SpecMap_ST.zw); + o_19.hip_pack0.zw = tmpvar_21.xxxy.zw; + mat3 tmpvar_22; + tmpvar_22 = xll_constructMat3 (_Object2World); + vec3 tmpvar_23; + tmpvar_23 = (tmpvar_22 * (v_18.normal * unity_Scale.w)); + o_19.normal = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = WorldSpaceLightDir (v_18.vertex); + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + o_19.lightDir = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = WorldSpaceViewDir (v_18.vertex); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + o_19.viewDir = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = (_LightMatrix0 * (_Object2World * v_18.vertex)); + o_19._LightCoord = tmpvar_28; + return o_19; +} + +void main () +{ + appdata_full xlt_v_29; + v2f_surf xl_retval_30; + vec4 tmpvar_31; + tmpvar_31 = gl_Vertex.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_29.vertex = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = TANGENT.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_29.tangent = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = gl_Normal.xyz; + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_29.normal = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_29.texcoord = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_29.texcoord1 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_Color.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_29.color = tmpvar_42; + v2f_surf tmpvar_43; + tmpvar_43 = vert_surf (xlt_v_29); + v2f_surf tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_30 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_30.pos.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_Position = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_47.x = xl_retval_30.fog; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlv_FOG = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = xl_retval_30.hip_pack0.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[0] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_30.normal.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[1] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_30.lightDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[2] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.w = 0.0; + tmpvar_55.xyz = xl_retval_30.viewDir.xyz; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[3] = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_30._LightCoord.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[4] = tmpvar_58; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Colored_Specular1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Colored_Specular1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-ir.txt new file mode 100644 index 000000000..9143927f0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-ir.txt @@ -0,0 +1,186 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct Input { + vec3 foo; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 cust_foo; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void vert ( + inout appdata_full v_9, + out Input o_10 +) +{ + vec3 tmpvar_11; + tmpvar_11 = ((v_9.normal * 0.5) + 0.5); + o_10.foo = tmpvar_11; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_12 +) +{ + vec3 worldPos_13; + vec3 tmpvar_14; + tmpvar_14 = (_Object2World * v_12).xyz; + worldPos_13 = tmpvar_14; + return (_WorldSpaceLightPos0.xyz - worldPos_13); +} + +void PositionFog ( + in vec4 v_15, + out vec4 pos_16, + out float fog_17 +) +{ + vec4 tmpvar_18; + tmpvar_18 = (gl_ModelViewProjectionMatrix * v_15); + pos_16 = tmpvar_18; + float tmpvar_19; + tmpvar_19 = pos_16.z; + fog_17 = tmpvar_19; +} + +v2f_surf vert_surf ( + in appdata_full v_20 +) +{ + v2f_surf o_21; + Input customInputData_22; + vert (v_20, customInputData_22); + vec3 tmpvar_23; + tmpvar_23 = customInputData_22.foo; + o_21.cust_foo = tmpvar_23; + PositionFog (v_20.vertex, o_21.pos, o_21.fog); + mat3 tmpvar_24; + tmpvar_24 = xll_constructMat3 (_Object2World); + vec3 tmpvar_25; + tmpvar_25 = (tmpvar_24 * (v_20.normal * unity_Scale.w)); + o_21.normal = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = WorldSpaceLightDir (v_20.vertex); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + o_21.lightDir = tmpvar_27; + vec3 tmpvar_28; + tmpvar_28 = (_LightMatrix0 * (_Object2World * v_20.vertex)).xyz; + o_21._LightCoord = tmpvar_28; + return o_21; +} + +void main () +{ + appdata_full xlt_v_29; + v2f_surf xl_retval_30; + vec4 tmpvar_31; + tmpvar_31 = gl_Vertex.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_29.vertex = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = TANGENT.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_29.tangent = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = gl_Normal.xyz; + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_29.normal = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_29.texcoord = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_29.texcoord1 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_Color.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_29.color = tmpvar_42; + v2f_surf tmpvar_43; + tmpvar_43 = vert_surf (xlt_v_29); + v2f_surf tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_30 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_30.pos.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_Position = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_47.x = xl_retval_30.fog; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlv_FOG = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_30.cust_foo.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[0] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_30.normal.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[1] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_30.lightDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[2] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.w = 0.0; + tmpvar_55.xyz = xl_retval_30._LightCoord.xyz; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[3] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-ir.txt new file mode 100644 index 000000000..ac47708bb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-ir.txt @@ -0,0 +1,186 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct Input { + vec3 foo; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 cust_foo; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void vert ( + inout appdata_full v_9, + out Input o_10 +) +{ + vec3 tmpvar_11; + tmpvar_11 = ((v_9.normal * 0.5) + 0.5); + o_10.foo = tmpvar_11; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_12 +) +{ + vec3 worldPos_13; + vec3 tmpvar_14; + tmpvar_14 = (_Object2World * v_12).xyz; + worldPos_13 = tmpvar_14; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_15, + out vec4 pos_16, + out float fog_17 +) +{ + vec4 tmpvar_18; + tmpvar_18 = (gl_ModelViewProjectionMatrix * v_15); + pos_16 = tmpvar_18; + float tmpvar_19; + tmpvar_19 = pos_16.z; + fog_17 = tmpvar_19; +} + +v2f_surf vert_surf ( + in appdata_full v_20 +) +{ + v2f_surf o_21; + Input customInputData_22; + vert (v_20, customInputData_22); + vec3 tmpvar_23; + tmpvar_23 = customInputData_22.foo; + o_21.cust_foo = tmpvar_23; + PositionFog (v_20.vertex, o_21.pos, o_21.fog); + mat3 tmpvar_24; + tmpvar_24 = xll_constructMat3 (_Object2World); + vec3 tmpvar_25; + tmpvar_25 = (tmpvar_24 * (v_20.normal * unity_Scale.w)); + o_21.normal = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = WorldSpaceLightDir (v_20.vertex); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + o_21.lightDir = tmpvar_27; + vec2 tmpvar_28; + tmpvar_28 = (_LightMatrix0 * (_Object2World * v_20.vertex)).xy; + o_21._LightCoord = tmpvar_28; + return o_21; +} + +void main () +{ + appdata_full xlt_v_29; + v2f_surf xl_retval_30; + vec4 tmpvar_31; + tmpvar_31 = gl_Vertex.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_29.vertex = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = TANGENT.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_29.tangent = tmpvar_34; + vec3 tmpvar_35; + tmpvar_35 = gl_Normal.xyz; + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_29.normal = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_29.texcoord = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_29.texcoord1 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = gl_Color.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_29.color = tmpvar_42; + v2f_surf tmpvar_43; + tmpvar_43 = vert_surf (xlt_v_29); + v2f_surf tmpvar_44; + tmpvar_44 = tmpvar_43; + xl_retval_30 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_30.pos.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_Position = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_47.x = xl_retval_30.fog; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlv_FOG = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_30.cust_foo.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[0] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_30.normal.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[1] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_30.lightDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[2] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.zw = vec2(0.0, 0.0); + tmpvar_55.xy = xl_retval_30._LightCoord.xy; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[3] = tmpvar_56; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Custom_Data2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-ir.txt new file mode 100644 index 000000000..2e036780e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-ir.txt @@ -0,0 +1,161 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct Input { + vec3 foo; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec3 cust_foo; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +void vert ( + inout appdata_full v_1, + out Input o_2 +) +{ + vec3 tmpvar_3; + tmpvar_3 = ((v_1.normal * 0.5) + 0.5); + o_2.foo = tmpvar_3; +} + +void PositionFog ( + in vec4 v_4, + out vec4 pos_5, + out float fog_6 +) +{ + vec4 tmpvar_7; + tmpvar_7 = (gl_ModelViewProjectionMatrix * v_4); + pos_5 = tmpvar_7; + float tmpvar_8; + tmpvar_8 = pos_5.z; + fog_6 = tmpvar_8; +} + +vec4 ComputeScreenPos ( + in vec4 pos_9 +) +{ + vec4 o_10; + vec4 tmpvar_11; + tmpvar_11 = (pos_9 * 0.5); + o_10 = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12.x = o_10.x; + tmpvar_12.y = (o_10.y * _ProjectionParams.x); + vec2 tmpvar_13; + tmpvar_13 = (tmpvar_12 + o_10.w); + o_10.xy = tmpvar_13.xy.xy; + vec2 tmpvar_14; + tmpvar_14 = pos_9.zw; + o_10.zw = tmpvar_14.xxxy.zw; + return o_10; +} + +v2f_surf vert_surf ( + in appdata_full v_15 +) +{ + v2f_surf o_16; + Input customInputData_17; + vert (v_15, customInputData_17); + vec3 tmpvar_18; + tmpvar_18 = customInputData_17.foo; + o_16.cust_foo = tmpvar_18; + PositionFog (v_15.vertex, o_16.pos, o_16.fog); + vec4 tmpvar_19; + tmpvar_19 = ComputeScreenPos (o_16.pos); + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + o_16.hip_screen = tmpvar_20; + vec2 tmpvar_21; + tmpvar_21 = ((v_15.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_16.hip_lmapFade.xy = tmpvar_21.xy.xy; + float tmpvar_22; + tmpvar_22 = ((-((gl_ModelViewMatrix * v_15.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_16.hip_lmapFade.z = vec3(tmpvar_22).z; + return o_16; +} + +void main () +{ + appdata_full xlt_v_23; + v2f_surf xl_retval_24; + vec4 tmpvar_25; + tmpvar_25 = gl_Vertex.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_23.vertex = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = TANGENT.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_23.tangent = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = gl_Normal.xyz; + vec3 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_23.normal = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_23.texcoord = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_23.texcoord1 = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_Color.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_23.color = tmpvar_36; + v2f_surf tmpvar_37; + tmpvar_37 = vert_surf (xlt_v_23); + v2f_surf tmpvar_38; + tmpvar_38 = tmpvar_37; + xl_retval_24 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_24.pos.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_Position = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_41.x = xl_retval_24.fog; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlv_FOG = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.w = 0.0; + tmpvar_43.xyz = xl_retval_24.cust_foo.xyz; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_TexCoord[0] = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = xl_retval_24.hip_screen.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[1] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 0.0; + tmpvar_47.xyz = xl_retval_24.hip_lmapFade.xyz; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[2] = tmpvar_48; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-out.txt new file mode 100644 index 000000000..e9f0404da --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Custom_Data2-out.txt @@ -0,0 +1,35 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +void main () +{ + vec3 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; + tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + gl_Position = tmpvar_2; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.w = 0.0; + tmpvar_7.xyz = ((gl_Normal * 0.5) + 0.5); + gl_TexCoord[0] = tmpvar_7; + gl_TexCoord[1] = o_3; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = tmpvar_1; + gl_TexCoord[2] = tmpvar_8; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-ir.txt new file mode 100644 index 000000000..1f83f28dc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-ir.txt @@ -0,0 +1,161 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + mat3 tmpvar_20; + tmpvar_20 = xll_constructMat3 (_Object2World); + vec3 tmpvar_21; + tmpvar_21 = (tmpvar_20 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_18.lightDir = tmpvar_23; + return o_18; +} + +void main () +{ + appdata_full xlt_v_24; + v2f_surf xl_retval_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Vertex.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_24.vertex = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = TANGENT.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_24.tangent = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = gl_Normal.xyz; + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_24.normal = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_24.texcoord = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_24.texcoord1 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Color.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_24.color = tmpvar_37; + v2f_surf tmpvar_38; + tmpvar_38 = vert_surf (xlt_v_24); + v2f_surf tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_25 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_25.pos.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_Position = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_42.x = xl_retval_25.fog; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlv_FOG = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.zw = vec2(0.0, 0.0); + tmpvar_44.xy = xl_retval_25.hip_pack0.xy; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_TexCoord[0] = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.w = 0.0; + tmpvar_46.xyz = xl_retval_25.normal.xyz; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[1] = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.w = 0.0; + tmpvar_48.xyz = xl_retval_25.lightDir.xyz; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[2] = tmpvar_49; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-ir.txt new file mode 100644 index 000000000..a13d7f753 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-ir.txt @@ -0,0 +1,132 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + return o_13; +} + +void main () +{ + appdata_full xlt_v_17; + v2f_surf xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = gl_Vertex.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_17.vertex = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = TANGENT.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_17.tangent = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_Normal.xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_17.normal = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_17.texcoord = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_17.texcoord1 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_Color.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_17.color = tmpvar_30; + v2f_surf tmpvar_31; + tmpvar_31 = vert_surf (xlt_v_17); + v2f_surf tmpvar_32; + tmpvar_32 = tmpvar_31; + xl_retval_18 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = xl_retval_18.pos.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_Position = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_35.x = xl_retval_18.fog; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlv_FOG = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.zw = vec2(0.0, 0.0); + tmpvar_37.xy = xl_retval_18.hip_pack0.xy; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + gl_TexCoord[0] = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_18.hip_screen.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[1] = tmpvar_40; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-out.txt new file mode 100644 index 000000000..6e8b0331f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump1-out.txt @@ -0,0 +1,27 @@ +varying vec4 xlv_FOG; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_5; + tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_5.x = tmpvar_1.z; + xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_6; + gl_TexCoord[1] = o_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-ir.txt new file mode 100644 index 000000000..2991310b4 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-ir.txt @@ -0,0 +1,183 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec2 hip_lmap; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_LightmapST; +uniform mat4 _Object2World; +uniform vec4 _Decal_ST; +uniform vec4 _DecalBump_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +void PositionFog ( + in vec4 v_9, + out vec4 pos_10, + out float fog_11 +) +{ + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9); + pos_10 = tmpvar_12; + float tmpvar_13; + tmpvar_13 = pos_10.z; + fog_11 = tmpvar_13; +} + +v2f_surf vert_surf ( + in appdata_full v_14 +) +{ + mat3 rotation_15; + vec3 binormal_16; + vec3 worldN_17; + v2f_surf o_18; + PositionFog (v_14.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_14.texcoord.xy * _Decal_ST.xy) + _Decal_ST.zw); + o_18.hip_pack0.xy = tmpvar_19.xy.xy; + vec2 tmpvar_20; + tmpvar_20 = ((v_14.texcoord.xy * _DecalBump_ST.xy) + _DecalBump_ST.zw); + o_18.hip_pack0.zw = tmpvar_20.xxxy.zw; + vec2 tmpvar_21; + tmpvar_21 = ((v_14.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_18.hip_lmap = tmpvar_21.xy.xy; + mat3 tmpvar_22; + tmpvar_22 = xll_constructMat3 (_Object2World); + vec3 tmpvar_23; + tmpvar_23 = (tmpvar_22 * (v_14.normal * unity_Scale.w)); + worldN_17 = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = cross (v_14.normal, v_14.tangent.xyz); + vec3 tmpvar_25; + tmpvar_25 = (tmpvar_24 * v_14.tangent.w); + binormal_16 = tmpvar_25; + mat3 tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_14.tangent.x; + tmpvar_26[0].x = tmpvar_27; + float tmpvar_28; + tmpvar_28 = binormal_16.x; + tmpvar_26[0].y = tmpvar_28; + float tmpvar_29; + tmpvar_29 = v_14.normal.x; + tmpvar_26[0].z = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_14.tangent.y; + tmpvar_26[1].x = tmpvar_30; + float tmpvar_31; + tmpvar_31 = binormal_16.y; + tmpvar_26[1].y = tmpvar_31; + float tmpvar_32; + tmpvar_32 = v_14.normal.y; + tmpvar_26[1].z = tmpvar_32; + float tmpvar_33; + tmpvar_33 = v_14.tangent.z; + tmpvar_26[2].x = tmpvar_33; + float tmpvar_34; + tmpvar_34 = binormal_16.z; + tmpvar_26[2].y = tmpvar_34; + float tmpvar_35; + tmpvar_35 = v_14.normal.z; + tmpvar_26[2].z = tmpvar_35; + mat3 tmpvar_36; + tmpvar_36 = (tmpvar_26); + rotation_15 = (tmpvar_36); + return o_18; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.zw = vec2(0.0, 0.0); + tmpvar_59.xy = xl_retval_38.hip_lmap.xy; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump2-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump2-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-ir.txt new file mode 100644 index 000000000..769293b2e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-ir.txt @@ -0,0 +1,306 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 vlight; + vec4 _ShadowCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_SHC; +uniform vec4 unity_SHBr; +uniform vec4 unity_SHBg; +uniform vec4 unity_SHBb; +uniform vec4 unity_SHAr; +uniform vec4 unity_SHAg; +uniform vec4 unity_SHAb; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _Decal_ST; +uniform vec4 _DecalBump_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 ShadeSH9 ( + in vec4 normal_9 +) +{ + vec3 x3_10; + float vC_11; + vec3 x2_12; + vec4 vB_13; + vec3 x1_14; + float tmpvar_15; + tmpvar_15 = dot (unity_SHAr, normal_9); + float tmpvar_16; + tmpvar_16 = tmpvar_15; + x1_14.x = tmpvar_16; + float tmpvar_17; + tmpvar_17 = dot (unity_SHAg, normal_9); + float tmpvar_18; + tmpvar_18 = tmpvar_17; + x1_14.y = vec2(tmpvar_18).y; + float tmpvar_19; + tmpvar_19 = dot (unity_SHAb, normal_9); + float tmpvar_20; + tmpvar_20 = tmpvar_19; + x1_14.z = vec3(tmpvar_20).z; + vec4 tmpvar_21; + tmpvar_21 = (normal_9.xyzz * normal_9.yzzx); + vB_13 = tmpvar_21; + float tmpvar_22; + tmpvar_22 = dot (unity_SHBr, vB_13); + float tmpvar_23; + tmpvar_23 = tmpvar_22; + x2_12.x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = dot (unity_SHBg, vB_13); + float tmpvar_25; + tmpvar_25 = tmpvar_24; + x2_12.y = vec2(tmpvar_25).y; + float tmpvar_26; + tmpvar_26 = dot (unity_SHBb, vB_13); + float tmpvar_27; + tmpvar_27 = tmpvar_26; + x2_12.z = vec3(tmpvar_27).z; + float tmpvar_28; + tmpvar_28 = ((normal_9.x * normal_9.x) - (normal_9.y * normal_9.y)); + vC_11 = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (unity_SHC.xyz * vC_11); + x3_10 = tmpvar_29; + return ((x1_14 + x2_12) + x3_10); +} + +void PositionFog ( + in vec4 v_30, + out vec4 pos_31, + out float fog_32 +) +{ + vec4 tmpvar_33; + tmpvar_33 = (gl_ModelViewProjectionMatrix * v_30); + pos_31 = tmpvar_33; + float tmpvar_34; + tmpvar_34 = pos_31.z; + fog_32 = tmpvar_34; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_35 +) +{ + vec3 objSpaceLightPos_36; + vec3 tmpvar_37; + tmpvar_37 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_36 = tmpvar_37; + return objSpaceLightPos_36.xyz; +} + +vec4 ComputeScreenPos ( + in vec4 pos_38 +) +{ + vec4 o_39; + vec4 tmpvar_40; + tmpvar_40 = (pos_38 * 0.5); + o_39 = tmpvar_40; + vec2 tmpvar_41; + tmpvar_41.x = o_39.x; + tmpvar_41.y = (o_39.y * _ProjectionParams.x); + vec2 tmpvar_42; + tmpvar_42 = (tmpvar_41 + o_39.w); + o_39.xy = tmpvar_42.xy.xy; + vec2 tmpvar_43; + tmpvar_43 = pos_38.zw; + o_39.zw = tmpvar_43.xxxy.zw; + return o_39; +} + +v2f_surf vert_surf ( + in appdata_full v_44 +) +{ + vec3 shlight_45; + mat3 rotation_46; + vec3 binormal_47; + vec3 worldN_48; + v2f_surf o_49; + PositionFog (v_44.vertex, o_49.pos, o_49.fog); + vec2 tmpvar_50; + tmpvar_50 = ((v_44.texcoord.xy * _Decal_ST.xy) + _Decal_ST.zw); + o_49.hip_pack0.xy = tmpvar_50.xy.xy; + vec2 tmpvar_51; + tmpvar_51 = ((v_44.texcoord.xy * _DecalBump_ST.xy) + _DecalBump_ST.zw); + o_49.hip_pack0.zw = tmpvar_51.xxxy.zw; + mat3 tmpvar_52; + tmpvar_52 = xll_constructMat3 (_Object2World); + vec3 tmpvar_53; + tmpvar_53 = (tmpvar_52 * (v_44.normal * unity_Scale.w)); + worldN_48 = tmpvar_53; + vec3 tmpvar_54; + tmpvar_54 = cross (v_44.normal, v_44.tangent.xyz); + vec3 tmpvar_55; + tmpvar_55 = (tmpvar_54 * v_44.tangent.w); + binormal_47 = tmpvar_55; + mat3 tmpvar_56; + float tmpvar_57; + tmpvar_57 = v_44.tangent.x; + tmpvar_56[0].x = tmpvar_57; + float tmpvar_58; + tmpvar_58 = binormal_47.x; + tmpvar_56[0].y = tmpvar_58; + float tmpvar_59; + tmpvar_59 = v_44.normal.x; + tmpvar_56[0].z = tmpvar_59; + float tmpvar_60; + tmpvar_60 = v_44.tangent.y; + tmpvar_56[1].x = tmpvar_60; + float tmpvar_61; + tmpvar_61 = binormal_47.y; + tmpvar_56[1].y = tmpvar_61; + float tmpvar_62; + tmpvar_62 = v_44.normal.y; + tmpvar_56[1].z = tmpvar_62; + float tmpvar_63; + tmpvar_63 = v_44.tangent.z; + tmpvar_56[2].x = tmpvar_63; + float tmpvar_64; + tmpvar_64 = binormal_47.z; + tmpvar_56[2].y = tmpvar_64; + float tmpvar_65; + tmpvar_65 = v_44.normal.z; + tmpvar_56[2].z = tmpvar_65; + mat3 tmpvar_66; + tmpvar_66 = (tmpvar_56); + rotation_46 = (tmpvar_66); + vec3 tmpvar_67; + tmpvar_67 = ObjSpaceLightDir (v_44.vertex); + vec3 tmpvar_68; + tmpvar_68 = (rotation_46 * tmpvar_67); + o_49.lightDir = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69.w = 1.0; + tmpvar_69.xyz = worldN_48.xyz; + vec3 tmpvar_70; + tmpvar_70 = ShadeSH9 (tmpvar_69); + vec3 tmpvar_71; + tmpvar_71 = tmpvar_70; + shlight_45 = tmpvar_71; + vec3 tmpvar_72; + tmpvar_72 = shlight_45; + o_49.vlight = tmpvar_72; + vec4 tmpvar_73; + tmpvar_73 = ComputeScreenPos (o_49.pos); + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + o_49._ShadowCoord = tmpvar_74; + return o_49; +} + +void main () +{ + appdata_full xlt_v_75; + v2f_surf xl_retval_76; + vec4 tmpvar_77; + tmpvar_77 = gl_Vertex.xyzw; + vec4 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_v_75.vertex = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = TANGENT.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + xlt_v_75.tangent = tmpvar_80; + vec3 tmpvar_81; + tmpvar_81 = gl_Normal.xyz; + vec3 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_v_75.normal = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_v_75.texcoord = tmpvar_84; + vec4 tmpvar_85; + tmpvar_85 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_86; + tmpvar_86 = tmpvar_85; + xlt_v_75.texcoord1 = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = gl_Color.xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + xlt_v_75.color = tmpvar_88; + v2f_surf tmpvar_89; + tmpvar_89 = vert_surf (xlt_v_75); + v2f_surf tmpvar_90; + tmpvar_90 = tmpvar_89; + xl_retval_76 = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91 = xl_retval_76.pos.xyzw; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + gl_Position = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_93.x = xl_retval_76.fog; + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + xlv_FOG = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95 = xl_retval_76.hip_pack0.xyzw; + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + gl_TexCoord[0] = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97.w = 0.0; + tmpvar_97.xyz = xl_retval_76.lightDir.xyz; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + gl_TexCoord[1] = tmpvar_98; + vec4 tmpvar_99; + tmpvar_99.w = 0.0; + tmpvar_99.xyz = xl_retval_76.vlight.xyz; + vec4 tmpvar_100; + tmpvar_100 = tmpvar_99; + gl_TexCoord[2] = tmpvar_100; + vec4 tmpvar_101; + tmpvar_101 = xl_retval_76._ShadowCoord.xyzw; + vec4 tmpvar_102; + tmpvar_102 = tmpvar_101; + gl_TexCoord[3] = tmpvar_102; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-out.txt similarity index 55% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-out.txt index 6a46402f0..0fa9011f5 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_DecalAddBump3-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_DecalAddBump3-out.txt @@ -28,7 +28,7 @@ void main () vec3 tmpvar_4; tmpvar_4 = (tmpvar_3 * (gl_Normal * unity_Scale.w)); vec3 tmpvar_5; - tmpvar_5 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_5 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_6; tmpvar_6[0].x = TANGENT.x; tmpvar_6[0].y = tmpvar_5.x; @@ -42,39 +42,38 @@ void main () vec4 tmpvar_7; tmpvar_7.w = 1.0; tmpvar_7.xyz = tmpvar_4; - vec3 x2; - vec3 x1; - x1.x = dot (unity_SHAr, tmpvar_7); - x1.y = dot (unity_SHAg, tmpvar_7); - x1.z = dot (unity_SHAb, tmpvar_7); - vec4 tmpvar_8; - tmpvar_8 = (tmpvar_4.xyzz * tmpvar_4.yzzx); - x2.x = dot (unity_SHBr, tmpvar_8); - x2.y = dot (unity_SHBg, tmpvar_8); - x2.z = dot (unity_SHBb, tmpvar_8); - vec4 o_i0; - vec4 tmpvar_9; - tmpvar_9 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_9; - vec2 tmpvar_10; - tmpvar_10.x = tmpvar_9.x; - tmpvar_10.y = (tmpvar_9.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_10 + tmpvar_9.w); - o_i0.zw = tmpvar_2.zw; - gl_Position = tmpvar_2; - vec4 tmpvar_11; - tmpvar_11.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_11.x = tmpvar_2.z; - xlv_FOG = tmpvar_11; - gl_TexCoord[0] = tmpvar_1; + vec3 x2_8; + vec3 x1_9; + x1_9.x = dot (unity_SHAr, tmpvar_7); + x1_9.y = dot (unity_SHAg, tmpvar_7); + x1_9.z = dot (unity_SHAb, tmpvar_7); + vec4 tmpvar_10; + tmpvar_10 = (tmpvar_4.xyzz * tmpvar_4.yzzx); + x2_8.x = dot (unity_SHBr, tmpvar_10); + x2_8.y = dot (unity_SHBg, tmpvar_10); + x2_8.z = dot (unity_SHBb, tmpvar_10); + vec4 o_11; vec4 tmpvar_12; - tmpvar_12.w = 0.0; - tmpvar_12.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); - gl_TexCoord[1] = tmpvar_12; - vec4 tmpvar_13; - tmpvar_13.w = 0.0; - tmpvar_13.xyz = ((x1 + x2) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))); - gl_TexCoord[2] = tmpvar_13; - gl_TexCoord[3] = o_i0; + tmpvar_12 = (tmpvar_2 * 0.5); + vec2 tmpvar_13; + tmpvar_13.x = tmpvar_12.x; + tmpvar_13.y = (tmpvar_12.y * _ProjectionParams.x); + o_11.xy = (tmpvar_13 + tmpvar_12.w); + o_11.zw = tmpvar_2.zw; + gl_Position = tmpvar_2; + vec4 tmpvar_14; + tmpvar_14.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_14.x = tmpvar_2.z; + xlv_FOG = tmpvar_14; + gl_TexCoord[0] = tmpvar_1; + vec4 tmpvar_15; + tmpvar_15.w = 0.0; + tmpvar_15.xyz = (tmpvar_6 * (_World2Object * _WorldSpaceLightPos0).xyz); + gl_TexCoord[1] = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16.w = 0.0; + tmpvar_16.xyz = ((x1_9 + x2_8) + (unity_SHC.xyz * ((tmpvar_4.x * tmpvar_4.x) - (tmpvar_4.y * tmpvar_4.y)))); + gl_TexCoord[2] = tmpvar_16; + gl_TexCoord[3] = o_11; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-ir.txt new file mode 100644 index 000000000..d461fbaef --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-ir.txt @@ -0,0 +1,172 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec2 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + mat3 tmpvar_20; + tmpvar_20 = xll_constructMat3 (_Object2World); + vec3 tmpvar_21; + tmpvar_21 = (tmpvar_20 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_18.lightDir = tmpvar_23; + vec2 tmpvar_24; + tmpvar_24 = (_LightMatrix0 * (_Object2World * v_17.vertex)).xy; + o_18._LightCoord = tmpvar_24; + return o_18; +} + +void main () +{ + appdata_full xlt_v_25; + v2f_surf xl_retval_26; + vec4 tmpvar_27; + tmpvar_27 = gl_Vertex.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_25.vertex = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = TANGENT.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_25.tangent = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = gl_Normal.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_25.normal = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_25.texcoord = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_25.texcoord1 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Color.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_25.color = tmpvar_38; + v2f_surf tmpvar_39; + tmpvar_39 = vert_surf (xlt_v_25); + v2f_surf tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_26 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_26.pos.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_Position = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_43.x = xl_retval_26.fog; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlv_FOG = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.zw = vec2(0.0, 0.0); + tmpvar_45.xy = xl_retval_26.hip_pack0.xy; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[0] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 0.0; + tmpvar_47.xyz = xl_retval_26.normal.xyz; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[1] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_26.lightDir.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[2] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.zw = vec2(0.0, 0.0); + tmpvar_51.xy = xl_retval_26._LightCoord.xy; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[3] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Diffuse_Wrapped-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Diffuse_Wrapped-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-ir.txt new file mode 100644 index 000000000..1f83f28dc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-ir.txt @@ -0,0 +1,161 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + mat3 tmpvar_20; + tmpvar_20 = xll_constructMat3 (_Object2World); + vec3 tmpvar_21; + tmpvar_21 = (tmpvar_20 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_18.lightDir = tmpvar_23; + return o_18; +} + +void main () +{ + appdata_full xlt_v_24; + v2f_surf xl_retval_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Vertex.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_24.vertex = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = TANGENT.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_24.tangent = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = gl_Normal.xyz; + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_24.normal = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_24.texcoord = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_24.texcoord1 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Color.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_24.color = tmpvar_37; + v2f_surf tmpvar_38; + tmpvar_38 = vert_surf (xlt_v_24); + v2f_surf tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_25 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_25.pos.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_Position = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_42.x = xl_retval_25.fog; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlv_FOG = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.zw = vec2(0.0, 0.0); + tmpvar_44.xy = xl_retval_25.hip_pack0.xy; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_TexCoord[0] = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.w = 0.0; + tmpvar_46.xyz = xl_retval_25.normal.xyz; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[1] = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.w = 0.0; + tmpvar_48.xyz = xl_retval_25.lightDir.xyz; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[2] = tmpvar_49; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-ir.txt new file mode 100644 index 000000000..f57e743dc --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-ir.txt @@ -0,0 +1,209 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_10 +) +{ + vec4 o_11; + vec4 tmpvar_12; + tmpvar_12 = (pos_10 * 0.5); + o_11 = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13.x = o_11.x; + tmpvar_13.y = (o_11.y * _ProjectionParams.x); + vec2 tmpvar_14; + tmpvar_14 = (tmpvar_13 + o_11.w); + o_11.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = pos_10.zw; + o_11.zw = tmpvar_15.xxxy.zw; + return o_11; +} + +v2f_surf vert_surf ( + in appdata_full v_16 +) +{ + mat3 rotation_17; + vec3 binormal_18; + v2f_surf o_19; + PositionFog (v_16.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_16.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0 = tmpvar_20.xy.xy; + vec4 tmpvar_21; + tmpvar_21 = ComputeScreenPos (o_19.pos); + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_19.hip_screen = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = cross (v_16.normal, v_16.tangent.xyz); + vec3 tmpvar_24; + tmpvar_24 = (tmpvar_23 * v_16.tangent.w); + binormal_18 = tmpvar_24; + mat3 tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_16.tangent.x; + tmpvar_25[0].x = tmpvar_26; + float tmpvar_27; + tmpvar_27 = binormal_18.x; + tmpvar_25[0].y = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_16.normal.x; + tmpvar_25[0].z = tmpvar_28; + float tmpvar_29; + tmpvar_29 = v_16.tangent.y; + tmpvar_25[1].x = tmpvar_29; + float tmpvar_30; + tmpvar_30 = binormal_18.y; + tmpvar_25[1].y = tmpvar_30; + float tmpvar_31; + tmpvar_31 = v_16.normal.y; + tmpvar_25[1].z = tmpvar_31; + float tmpvar_32; + tmpvar_32 = v_16.tangent.z; + tmpvar_25[2].x = tmpvar_32; + float tmpvar_33; + tmpvar_33 = binormal_18.z; + tmpvar_25[2].y = tmpvar_33; + float tmpvar_34; + tmpvar_34 = v_16.normal.z; + tmpvar_25[2].z = tmpvar_34; + mat3 tmpvar_35; + tmpvar_35 = (tmpvar_25); + rotation_17 = (tmpvar_35); + vec3 tmpvar_36; + tmpvar_36 = (rotation_17 * (v_16.normal * unity_Scale.w)); + o_19.normal = tmpvar_36; + vec3 tmpvar_37; + tmpvar_37 = ObjSpaceViewDir (v_16.vertex); + vec3 tmpvar_38; + tmpvar_38 = (rotation_17 * tmpvar_37); + o_19.viewDir = tmpvar_38; + return o_19; +} + +void main () +{ + appdata_full xlt_v_39; + v2f_surf xl_retval_40; + vec4 tmpvar_41; + tmpvar_41 = gl_Vertex.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_39.vertex = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = TANGENT.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_39.tangent = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = gl_Normal.xyz; + vec3 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_39.normal = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_39.texcoord = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_39.texcoord1 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_Color.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_39.color = tmpvar_52; + v2f_surf tmpvar_53; + tmpvar_53 = vert_surf (xlt_v_39); + v2f_surf tmpvar_54; + tmpvar_54 = tmpvar_53; + xl_retval_40 = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55 = xl_retval_40.pos.xyzw; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_Position = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_57.x = xl_retval_40.fog; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + xlv_FOG = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.zw = vec2(0.0, 0.0); + tmpvar_59.xy = xl_retval_40.hip_pack0.xy; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[0] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_40.viewDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[1] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63 = xl_retval_40.hip_screen.xyzw; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[2] = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65.w = 0.0; + tmpvar_65.xyz = xl_retval_40.normal.xyz; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + gl_TexCoord[3] = tmpvar_66; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-out.txt similarity index 63% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-out.txt index d3739189c..7c12a26c6 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim1-out.txt @@ -1,30 +1,24 @@ varying vec4 xlv_FOG; attribute vec4 TANGENT; uniform vec4 unity_Scale; -uniform vec4 unity_LightmapST; -uniform vec4 unity_LightmapFade; uniform vec3 _WorldSpaceCameraPos; uniform mat4 _World2Object; uniform vec4 _ProjectionParams; uniform vec4 _MainTex_ST; void main () { - vec3 tmpvar_1; - vec4 tmpvar_2; - tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); - vec4 o_i0; + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; vec4 tmpvar_3; - tmpvar_3 = (tmpvar_2 * 0.5); - o_i0 = tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); vec2 tmpvar_4; tmpvar_4.x = tmpvar_3.x; tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); - o_i0.xy = (tmpvar_4 + tmpvar_3.w); - o_i0.zw = tmpvar_2.zw; - tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); - tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; vec3 tmpvar_5; - tmpvar_5 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_5 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_6; tmpvar_6[0].x = TANGENT.x; tmpvar_6[0].y = tmpvar_5.x; @@ -38,10 +32,10 @@ void main () vec4 tmpvar_7; tmpvar_7.w = 1.0; tmpvar_7.xyz = _WorldSpaceCameraPos; - gl_Position = tmpvar_2; + gl_Position = tmpvar_1; vec4 tmpvar_8; tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); - tmpvar_8.x = tmpvar_2.z; + tmpvar_8.x = tmpvar_1.z; xlv_FOG = tmpvar_8; vec4 tmpvar_9; tmpvar_9.zw = vec2(0.0, 0.0); @@ -51,14 +45,10 @@ void main () tmpvar_10.w = 0.0; tmpvar_10.xyz = (tmpvar_6 * (((_World2Object * tmpvar_7).xyz * unity_Scale.w) - gl_Vertex.xyz)); gl_TexCoord[1] = tmpvar_10; - gl_TexCoord[2] = o_i0; + gl_TexCoord[2] = o_2; vec4 tmpvar_11; tmpvar_11.w = 0.0; tmpvar_11.xyz = (tmpvar_6 * (gl_Normal * unity_Scale.w)); gl_TexCoord[3] = tmpvar_11; - vec4 tmpvar_12; - tmpvar_12.w = 0.0; - tmpvar_12.xyz = tmpvar_1; - gl_TexCoord[4] = tmpvar_12; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-ir.txt new file mode 100644 index 000000000..734fd37e0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-ir.txt @@ -0,0 +1,224 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 viewDir; + vec4 hip_screen; + vec3 normal; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec4 ComputeScreenPos ( + in vec4 pos_10 +) +{ + vec4 o_11; + vec4 tmpvar_12; + tmpvar_12 = (pos_10 * 0.5); + o_11 = tmpvar_12; + vec2 tmpvar_13; + tmpvar_13.x = o_11.x; + tmpvar_13.y = (o_11.y * _ProjectionParams.x); + vec2 tmpvar_14; + tmpvar_14 = (tmpvar_13 + o_11.w); + o_11.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = pos_10.zw; + o_11.zw = tmpvar_15.xxxy.zw; + return o_11; +} + +v2f_surf vert_surf ( + in appdata_full v_16 +) +{ + mat3 rotation_17; + vec3 binormal_18; + v2f_surf o_19; + PositionFog (v_16.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_16.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0 = tmpvar_20.xy.xy; + vec4 tmpvar_21; + tmpvar_21 = ComputeScreenPos (o_19.pos); + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_19.hip_screen = tmpvar_22; + vec2 tmpvar_23; + tmpvar_23 = ((v_16.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_19.hip_lmapFade.xy = tmpvar_23.xy.xy; + float tmpvar_24; + tmpvar_24 = ((-((gl_ModelViewMatrix * v_16.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_19.hip_lmapFade.z = vec3(tmpvar_24).z; + vec3 tmpvar_25; + tmpvar_25 = cross (v_16.normal, v_16.tangent.xyz); + vec3 tmpvar_26; + tmpvar_26 = (tmpvar_25 * v_16.tangent.w); + binormal_18 = tmpvar_26; + mat3 tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_16.tangent.x; + tmpvar_27[0].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_18.x; + tmpvar_27[0].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_16.normal.x; + tmpvar_27[0].z = tmpvar_30; + float tmpvar_31; + tmpvar_31 = v_16.tangent.y; + tmpvar_27[1].x = tmpvar_31; + float tmpvar_32; + tmpvar_32 = binormal_18.y; + tmpvar_27[1].y = tmpvar_32; + float tmpvar_33; + tmpvar_33 = v_16.normal.y; + tmpvar_27[1].z = tmpvar_33; + float tmpvar_34; + tmpvar_34 = v_16.tangent.z; + tmpvar_27[2].x = tmpvar_34; + float tmpvar_35; + tmpvar_35 = binormal_18.z; + tmpvar_27[2].y = tmpvar_35; + float tmpvar_36; + tmpvar_36 = v_16.normal.z; + tmpvar_27[2].z = tmpvar_36; + mat3 tmpvar_37; + tmpvar_37 = (tmpvar_27); + rotation_17 = (tmpvar_37); + vec3 tmpvar_38; + tmpvar_38 = (rotation_17 * (v_16.normal * unity_Scale.w)); + o_19.normal = tmpvar_38; + vec3 tmpvar_39; + tmpvar_39 = ObjSpaceViewDir (v_16.vertex); + vec3 tmpvar_40; + tmpvar_40 = (rotation_17 * tmpvar_39); + o_19.viewDir = tmpvar_40; + return o_19; +} + +void main () +{ + appdata_full xlt_v_41; + v2f_surf xl_retval_42; + vec4 tmpvar_43; + tmpvar_43 = gl_Vertex.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_41.vertex = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = TANGENT.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_41.tangent = tmpvar_46; + vec3 tmpvar_47; + tmpvar_47 = gl_Normal.xyz; + vec3 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_41.normal = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_41.texcoord = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + xlt_v_41.texcoord1 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = gl_Color.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlt_v_41.color = tmpvar_54; + v2f_surf tmpvar_55; + tmpvar_55 = vert_surf (xlt_v_41); + v2f_surf tmpvar_56; + tmpvar_56 = tmpvar_55; + xl_retval_42 = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_42.pos.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_Position = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_59.x = xl_retval_42.fog; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + xlv_FOG = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.zw = vec2(0.0, 0.0); + tmpvar_61.xy = xl_retval_42.hip_pack0.xy; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[0] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_42.viewDir.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[1] = tmpvar_64; + vec4 tmpvar_65; + tmpvar_65 = xl_retval_42.hip_screen.xyzw; + vec4 tmpvar_66; + tmpvar_66 = tmpvar_65; + gl_TexCoord[2] = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.w = 0.0; + tmpvar_67.xyz = xl_retval_42.normal.xyz; + vec4 tmpvar_68; + tmpvar_68 = tmpvar_67; + gl_TexCoord[3] = tmpvar_68; + vec4 tmpvar_69; + tmpvar_69.w = 0.0; + tmpvar_69.xyz = xl_retval_42.hip_lmapFade.xyz; + vec4 tmpvar_70; + tmpvar_70 = tmpvar_69; + gl_TexCoord[4] = tmpvar_70; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-out.txt new file mode 100644 index 000000000..f3e5b72d6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim2-out.txt @@ -0,0 +1,63 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec3 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; + tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + vec3 tmpvar_6; + tmpvar_6 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_7; + tmpvar_7[0].x = TANGENT.x; + tmpvar_7[0].y = tmpvar_6.x; + tmpvar_7[0].z = gl_Normal.x; + tmpvar_7[1].x = TANGENT.y; + tmpvar_7[1].y = tmpvar_6.y; + tmpvar_7[1].z = gl_Normal.y; + tmpvar_7[2].x = TANGENT.z; + tmpvar_7[2].y = tmpvar_6.z; + tmpvar_7[2].z = gl_Normal.z; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_2; + vec4 tmpvar_9; + tmpvar_9.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_9.x = tmpvar_2.z; + xlv_FOG = tmpvar_9; + vec4 tmpvar_10; + tmpvar_10.zw = vec2(0.0, 0.0); + tmpvar_10.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_10; + vec4 tmpvar_11; + tmpvar_11.w = 0.0; + tmpvar_11.xyz = (tmpvar_7 * (((_World2Object * tmpvar_8).xyz * unity_Scale.w) - gl_Vertex.xyz)); + gl_TexCoord[1] = tmpvar_11; + gl_TexCoord[2] = o_3; + vec4 tmpvar_12; + tmpvar_12.w = 0.0; + tmpvar_12.xyz = (tmpvar_7 * (gl_Normal * unity_Scale.w)); + gl_TexCoord[3] = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13.w = 0.0; + tmpvar_13.xyz = tmpvar_1; + gl_TexCoord[4] = tmpvar_13; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-ir.txt new file mode 100644 index 000000000..54b160074 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-ir.txt @@ -0,0 +1,175 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_6 +) +{ + vec3 objSpaceLightPos_7; + vec3 tmpvar_8; + tmpvar_8 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_7 = tmpvar_8; + return ((objSpaceLightPos_7.xyz * unity_Scale.w) - v_6.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + PositionFog (v_9.vertex, o_12.pos, o_12.fog); + vec2 tmpvar_13; + tmpvar_13 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0 = tmpvar_13.xy.xy; + vec3 tmpvar_14; + tmpvar_14 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_15; + tmpvar_15 = (tmpvar_14 * v_9.tangent.w); + binormal_11 = tmpvar_15; + mat3 tmpvar_16; + float tmpvar_17; + tmpvar_17 = v_9.tangent.x; + tmpvar_16[0].x = tmpvar_17; + float tmpvar_18; + tmpvar_18 = binormal_11.x; + tmpvar_16[0].y = tmpvar_18; + float tmpvar_19; + tmpvar_19 = v_9.normal.x; + tmpvar_16[0].z = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.tangent.y; + tmpvar_16[1].x = tmpvar_20; + float tmpvar_21; + tmpvar_21 = binormal_11.y; + tmpvar_16[1].y = tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_9.normal.y; + tmpvar_16[1].z = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.tangent.z; + tmpvar_16[2].x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = binormal_11.z; + tmpvar_16[2].y = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_9.normal.z; + tmpvar_16[2].z = tmpvar_25; + mat3 tmpvar_26; + tmpvar_26 = (tmpvar_16); + rotation_10 = (tmpvar_26); + vec3 tmpvar_27; + tmpvar_27 = ObjSpaceLightDir (v_9.vertex); + vec3 tmpvar_28; + tmpvar_28 = (rotation_10 * tmpvar_27); + o_12.lightDir = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = (_LightMatrix0 * (_Object2World * v_9.vertex)); + o_12._LightCoord = tmpvar_29; + return o_12; +} + +void main () +{ + appdata_full xlt_v_30; + v2f_surf xl_retval_31; + vec4 tmpvar_32; + tmpvar_32 = gl_Vertex.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_30.vertex = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = TANGENT.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_30.tangent = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = gl_Normal.xyz; + vec3 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_30.normal = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_30.texcoord = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_30.texcoord1 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = gl_Color.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_30.color = tmpvar_43; + v2f_surf tmpvar_44; + tmpvar_44 = vert_surf (xlt_v_30); + v2f_surf tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_31 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_31.pos.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_Position = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_48.x = xl_retval_31.fog; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlv_FOG = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.zw = vec2(0.0, 0.0); + tmpvar_50.xy = xl_retval_31.hip_pack0.xy; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[0] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_31.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[1] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_31._LightCoord.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[2] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-out.txt similarity index 92% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-out.txt index 5302b834d..0564ae9c4 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump-out.txt @@ -11,7 +11,7 @@ void main () vec4 tmpvar_1; tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); vec3 tmpvar_2; - tmpvar_2 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_2 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_3; tmpvar_3[0].x = TANGENT.x; tmpvar_3[0].y = tmpvar_2.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-ir.txt new file mode 100644 index 000000000..5aaeb8aa0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-ir.txt @@ -0,0 +1,176 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 lightDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_6 +) +{ + vec3 objSpaceLightPos_7; + vec3 tmpvar_8; + tmpvar_8 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_7 = tmpvar_8; + return ((objSpaceLightPos_7.xyz * unity_Scale.w) - v_6.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + PositionFog (v_9.vertex, o_12.pos, o_12.fog); + vec2 tmpvar_13; + tmpvar_13 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0 = tmpvar_13.xy.xy; + vec3 tmpvar_14; + tmpvar_14 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_15; + tmpvar_15 = (tmpvar_14 * v_9.tangent.w); + binormal_11 = tmpvar_15; + mat3 tmpvar_16; + float tmpvar_17; + tmpvar_17 = v_9.tangent.x; + tmpvar_16[0].x = tmpvar_17; + float tmpvar_18; + tmpvar_18 = binormal_11.x; + tmpvar_16[0].y = tmpvar_18; + float tmpvar_19; + tmpvar_19 = v_9.normal.x; + tmpvar_16[0].z = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.tangent.y; + tmpvar_16[1].x = tmpvar_20; + float tmpvar_21; + tmpvar_21 = binormal_11.y; + tmpvar_16[1].y = tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_9.normal.y; + tmpvar_16[1].z = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.tangent.z; + tmpvar_16[2].x = tmpvar_23; + float tmpvar_24; + tmpvar_24 = binormal_11.z; + tmpvar_16[2].y = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_9.normal.z; + tmpvar_16[2].z = tmpvar_25; + mat3 tmpvar_26; + tmpvar_26 = (tmpvar_16); + rotation_10 = (tmpvar_26); + vec3 tmpvar_27; + tmpvar_27 = ObjSpaceLightDir (v_9.vertex); + vec3 tmpvar_28; + tmpvar_28 = (rotation_10 * tmpvar_27); + o_12.lightDir = tmpvar_28; + vec3 tmpvar_29; + tmpvar_29 = (_LightMatrix0 * (_Object2World * v_9.vertex)).xyz; + o_12._LightCoord = tmpvar_29; + return o_12; +} + +void main () +{ + appdata_full xlt_v_30; + v2f_surf xl_retval_31; + vec4 tmpvar_32; + tmpvar_32 = gl_Vertex.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_30.vertex = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = TANGENT.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_30.tangent = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = gl_Normal.xyz; + vec3 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_30.normal = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_30.texcoord = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_30.texcoord1 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = gl_Color.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_30.color = tmpvar_43; + v2f_surf tmpvar_44; + tmpvar_44 = vert_surf (xlt_v_30); + v2f_surf tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_31 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_31.pos.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_Position = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_48.x = xl_retval_31.fog; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlv_FOG = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.zw = vec2(0.0, 0.0); + tmpvar_50.xy = xl_retval_31.hip_pack0.xy; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[0] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_31.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[1] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54.w = 0.0; + tmpvar_54.xyz = xl_retval_31._LightCoord.xyz; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[2] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-out.txt similarity index 92% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-out.txt index 9a997f0a3..cc9aebe0e 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Rim_Bump1-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Rim_Bump1-out.txt @@ -11,7 +11,7 @@ void main () vec4 tmpvar_1; tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); vec3 tmpvar_2; - tmpvar_2 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_2 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_3; tmpvar_3[0].x = TANGENT.x; tmpvar_3[0].y = tmpvar_2.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-ir.txt new file mode 100644 index 000000000..0bb837710 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-ir.txt @@ -0,0 +1,160 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + mat3 tmpvar_19; + tmpvar_19 = xll_constructMat3 (_Object2World); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_18.lightDir = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = (_LightMatrix0 * (_Object2World * v_17.vertex)); + o_18._LightCoord = tmpvar_23; + return o_18; +} + +void main () +{ + appdata_full xlt_v_24; + v2f_surf xl_retval_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Vertex.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_24.vertex = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = TANGENT.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_24.tangent = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = gl_Normal.xyz; + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_24.normal = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_24.texcoord = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_24.texcoord1 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Color.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_24.color = tmpvar_37; + v2f_surf tmpvar_38; + tmpvar_38 = vert_surf (xlt_v_24); + v2f_surf tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_25 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_25.pos.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_Position = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_42.x = xl_retval_25.fog; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlv_FOG = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.w = 0.0; + tmpvar_44.xyz = xl_retval_25.normal.xyz; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_TexCoord[0] = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.w = 0.0; + tmpvar_46.xyz = xl_retval_25.lightDir.xyz; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[1] = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48 = xl_retval_25._LightCoord.xyzw; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[2] = tmpvar_49; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-ir.txt new file mode 100644 index 000000000..0eda7468a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-ir.txt @@ -0,0 +1,161 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec3 normal; + vec3 lightDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + mat3 tmpvar_19; + tmpvar_19 = xll_constructMat3 (_Object2World); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + o_18.lightDir = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = (_LightMatrix0 * (_Object2World * v_17.vertex)).xyz; + o_18._LightCoord = tmpvar_23; + return o_18; +} + +void main () +{ + appdata_full xlt_v_24; + v2f_surf xl_retval_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Vertex.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_24.vertex = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = TANGENT.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_24.tangent = tmpvar_29; + vec3 tmpvar_30; + tmpvar_30 = gl_Normal.xyz; + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_24.normal = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_24.texcoord = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_24.texcoord1 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_Color.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_24.color = tmpvar_37; + v2f_surf tmpvar_38; + tmpvar_38 = vert_surf (xlt_v_24); + v2f_surf tmpvar_39; + tmpvar_39 = tmpvar_38; + xl_retval_25 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_25.pos.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_Position = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_42.x = xl_retval_25.fog; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlv_FOG = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.w = 0.0; + tmpvar_44.xyz = xl_retval_25.normal.xyz; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_TexCoord[0] = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.w = 0.0; + tmpvar_46.xyz = xl_retval_25.lightDir.xyz; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[1] = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.w = 0.0; + tmpvar_48.xyz = xl_retval_25._LightCoord.xyz; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[2] = tmpvar_49; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPos2-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPos2-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_ScreenPosAlbedo1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-ir.txt new file mode 100644 index 000000000..fa02fdea6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-ir.txt @@ -0,0 +1,132 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_screenPos; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec4 tmpvar_14; + tmpvar_14 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + o_13.hip_screenPos = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_13.hip_screen = tmpvar_17; + return o_13; +} + +void main () +{ + appdata_full xlt_v_18; + v2f_surf xl_retval_19; + vec4 tmpvar_20; + tmpvar_20 = gl_Vertex.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_18.vertex = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = TANGENT.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_18.tangent = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_Normal.xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_18.normal = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_18.texcoord = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_18.texcoord1 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Color.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_18.color = tmpvar_31; + v2f_surf tmpvar_32; + tmpvar_32 = vert_surf (xlt_v_18); + v2f_surf tmpvar_33; + tmpvar_33 = tmpvar_32; + xl_retval_19 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = xl_retval_19.pos.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + gl_Position = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_36.x = xl_retval_19.fog; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlv_FOG = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = xl_retval_19.hip_screenPos.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + gl_TexCoord[0] = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = xl_retval_19.hip_screen.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[1] = tmpvar_41; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-out.txt new file mode 100644 index 000000000..0e4f04cfb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_ScreenPosAlbedo1-out.txt @@ -0,0 +1,31 @@ +varying vec4 xlv_FOG; +uniform vec4 _ProjectionParams; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + vec4 o_5; + vec4 tmpvar_6; + tmpvar_6 = (tmpvar_1 * 0.5); + vec2 tmpvar_7; + tmpvar_7.x = tmpvar_6.x; + tmpvar_7.y = (tmpvar_6.y * _ProjectionParams.x); + o_5.xy = (tmpvar_7 + tmpvar_6.w); + o_5.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_8; + tmpvar_8.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_8.x = tmpvar_1.z; + xlv_FOG = tmpvar_8; + gl_TexCoord[0] = o_2; + gl_TexCoord[1] = o_5; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-ir.txt new file mode 100644 index 000000000..5826fc015 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-ir.txt @@ -0,0 +1,181 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldPos; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + vec3 tmpvar_20; + tmpvar_20 = (_Object2World * v_17.vertex).xyz; + o_18.worldPos = tmpvar_20; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_18.lightDir = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = (_LightMatrix0 * (_Object2World * v_17.vertex)); + o_18._LightCoord = tmpvar_25; + return o_18; +} + +void main () +{ + appdata_full xlt_v_26; + v2f_surf xl_retval_27; + vec4 tmpvar_28; + tmpvar_28 = gl_Vertex.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_26.vertex = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = TANGENT.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_26.tangent = tmpvar_31; + vec3 tmpvar_32; + tmpvar_32 = gl_Normal.xyz; + vec3 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_26.normal = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_26.texcoord = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_26.texcoord1 = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_Color.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_26.color = tmpvar_39; + v2f_surf tmpvar_40; + tmpvar_40 = vert_surf (xlt_v_26); + v2f_surf tmpvar_41; + tmpvar_41 = tmpvar_40; + xl_retval_27 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_27.pos.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_Position = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_44.x = xl_retval_27.fog; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + xlv_FOG = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.zw = vec2(0.0, 0.0); + tmpvar_46.xy = xl_retval_27.hip_pack0.xy; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[0] = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.w = 0.0; + tmpvar_48.xyz = xl_retval_27.worldPos.xyz; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[1] = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.w = 0.0; + tmpvar_50.xyz = xl_retval_27.normal.xyz; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[2] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_27.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[3] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54 = xl_retval_27._LightCoord.xyzw; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[4] = tmpvar_55; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-ir.txt new file mode 100644 index 000000000..db0e904eb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-ir.txt @@ -0,0 +1,143 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldPos; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec3 tmpvar_15; + tmpvar_15 = (_Object2World * v_12.vertex).xyz; + o_13.worldPos = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_13.hip_screen = tmpvar_17; + return o_13; +} + +void main () +{ + appdata_full xlt_v_18; + v2f_surf xl_retval_19; + vec4 tmpvar_20; + tmpvar_20 = gl_Vertex.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_18.vertex = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = TANGENT.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_18.tangent = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_Normal.xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_18.normal = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_18.texcoord = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_18.texcoord1 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Color.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_18.color = tmpvar_31; + v2f_surf tmpvar_32; + tmpvar_32 = vert_surf (xlt_v_18); + v2f_surf tmpvar_33; + tmpvar_33 = tmpvar_32; + xl_retval_19 = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = xl_retval_19.pos.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + gl_Position = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_36.x = xl_retval_19.fog; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlv_FOG = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38.zw = vec2(0.0, 0.0); + tmpvar_38.xy = xl_retval_19.hip_pack0.xy; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + gl_TexCoord[0] = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40.w = 0.0; + tmpvar_40.xyz = xl_retval_19.worldPos.xyz; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[1] = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = xl_retval_19.hip_screen.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_TexCoord[2] = tmpvar_43; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-out.txt new file mode 100644 index 000000000..e98121c7c --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices1-out.txt @@ -0,0 +1,32 @@ +varying vec4 xlv_FOG; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_5; + tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_5.x = tmpvar_1.z; + xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.w = 0.0; + tmpvar_7.xyz = (_Object2World * gl_Vertex).xyz; + gl_TexCoord[1] = tmpvar_7; + gl_TexCoord[2] = o_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices2-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-ir.txt new file mode 100644 index 000000000..60108be71 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-ir.txt @@ -0,0 +1,158 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 worldPos; + vec4 hip_screen; + vec3 hip_lmapFade; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec3 tmpvar_15; + tmpvar_15 = (_Object2World * v_12.vertex).xyz; + o_13.worldPos = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + o_13.hip_screen = tmpvar_17; + vec2 tmpvar_18; + tmpvar_18 = ((v_12.texcoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + o_13.hip_lmapFade.xy = tmpvar_18.xy.xy; + float tmpvar_19; + tmpvar_19 = ((-((gl_ModelViewMatrix * v_12.vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + o_13.hip_lmapFade.z = vec3(tmpvar_19).z; + return o_13; +} + +void main () +{ + appdata_full xlt_v_20; + v2f_surf xl_retval_21; + vec4 tmpvar_22; + tmpvar_22 = gl_Vertex.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_20.vertex = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = TANGENT.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_20.tangent = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = gl_Normal.xyz; + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_20.normal = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + xlt_v_20.texcoord = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_20.texcoord1 = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = gl_Color.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_20.color = tmpvar_33; + v2f_surf tmpvar_34; + tmpvar_34 = vert_surf (xlt_v_20); + v2f_surf tmpvar_35; + tmpvar_35 = tmpvar_34; + xl_retval_21 = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = xl_retval_21.pos.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + gl_Position = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_38.x = xl_retval_21.fog; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlv_FOG = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40.zw = vec2(0.0, 0.0); + tmpvar_40.xy = xl_retval_21.hip_pack0.xy; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + gl_TexCoord[0] = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42.w = 0.0; + tmpvar_42.xyz = xl_retval_21.worldPos.xyz; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + gl_TexCoord[1] = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = xl_retval_21.hip_screen.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_TexCoord[2] = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.w = 0.0; + tmpvar_46.xyz = xl_retval_21.hip_lmapFade.xyz; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_TexCoord[3] = tmpvar_47; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-out.txt new file mode 100644 index 000000000..b0652cf58 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices2-out.txt @@ -0,0 +1,41 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_LightmapST; +uniform vec4 unity_LightmapFade; +uniform vec4 _ProjectionParams; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +void main () +{ + vec3 tmpvar_1; + vec4 tmpvar_2; + tmpvar_2 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_3; + vec4 tmpvar_4; + tmpvar_4 = (tmpvar_2 * 0.5); + vec2 tmpvar_5; + tmpvar_5.x = tmpvar_4.x; + tmpvar_5.y = (tmpvar_4.y * _ProjectionParams.x); + o_3.xy = (tmpvar_5 + tmpvar_4.w); + o_3.zw = tmpvar_2.zw; + tmpvar_1.xy = ((gl_MultiTexCoord1.xy * unity_LightmapST.xy) + unity_LightmapST.zw); + tmpvar_1.z = ((-((gl_ModelViewMatrix * gl_Vertex).z) * unity_LightmapFade.z) + unity_LightmapFade.w); + gl_Position = tmpvar_2; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_2.z; + xlv_FOG = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = (_Object2World * gl_Vertex).xyz; + gl_TexCoord[1] = tmpvar_8; + gl_TexCoord[2] = o_3; + vec4 tmpvar_9; + tmpvar_9.w = 0.0; + tmpvar_9.xyz = tmpvar_1; + gl_TexCoord[3] = tmpvar_9; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-ir.txt new file mode 100644 index 000000000..406d6cbeb --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-ir.txt @@ -0,0 +1,146 @@ +struct v2f_surf { + vec4 pos; + vec3 _ShadowCoord0; + vec3 _ShadowCoord1; + vec3 _ShadowCoord2; + vec3 _ShadowCoord3; + vec2 _ShadowZFade; + vec3 worldPos; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +uniform mat4 _World2Shadow3; +uniform mat4 _World2Shadow2; +uniform mat4 _World2Shadow1; +uniform mat4 _World2Shadow; +uniform mat4 _Object2World; +uniform vec4 _LightShadowData; +v2f_surf vert_surf ( + in appdata_full v_1 +) +{ + vec4 wpos_2; + float z_3; + v2f_surf o_4; + vec3 tmpvar_5; + tmpvar_5 = (_Object2World * v_1.vertex).xyz; + o_4.worldPos = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_4.pos = tmpvar_6; + float tmpvar_7; + tmpvar_7 = -((gl_ModelViewMatrix * v_1.vertex).z); + z_3 = tmpvar_7; + float tmpvar_8; + tmpvar_8 = z_3; + o_4._ShadowZFade.x = tmpvar_8; + float tmpvar_9; + tmpvar_9 = ((z_3 * _LightShadowData.z) + _LightShadowData.w); + o_4._ShadowZFade.y = vec2(tmpvar_9).y; + vec4 tmpvar_10; + tmpvar_10 = (_Object2World * v_1.vertex); + wpos_2 = tmpvar_10; + vec3 tmpvar_11; + tmpvar_11 = (_World2Shadow * wpos_2).xyz; + o_4._ShadowCoord0 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Shadow1 * wpos_2).xyz; + o_4._ShadowCoord1 = tmpvar_12; + vec3 tmpvar_13; + tmpvar_13 = (_World2Shadow2 * wpos_2).xyz; + o_4._ShadowCoord2 = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = (_World2Shadow3 * wpos_2).xyz; + o_4._ShadowCoord3 = tmpvar_14; + return o_4; +} + +void main () +{ + appdata_full xlt_v_15; + v2f_surf xl_retval_16; + vec4 tmpvar_17; + tmpvar_17 = gl_Vertex.xyzw; + vec4 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_15.vertex = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = TANGENT.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_15.tangent = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = gl_Normal.xyz; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_15.normal = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_15.texcoord = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_15.texcoord1 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_Color.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_15.color = tmpvar_28; + v2f_surf tmpvar_29; + tmpvar_29 = vert_surf (xlt_v_15); + v2f_surf tmpvar_30; + tmpvar_30 = tmpvar_29; + xl_retval_16 = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = xl_retval_16.pos.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_Position = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33.w = 0.0; + tmpvar_33.xyz = xl_retval_16._ShadowCoord0.xyz; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_TexCoord[0] = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35.w = 0.0; + tmpvar_35.xyz = xl_retval_16._ShadowCoord1.xyz; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + gl_TexCoord[1] = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.w = 0.0; + tmpvar_37.xyz = xl_retval_16._ShadowCoord2.xyz; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + gl_TexCoord[2] = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39.w = 0.0; + tmpvar_39.xyz = xl_retval_16._ShadowCoord3.xyz; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[3] = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41.zw = vec2(0.0, 0.0); + tmpvar_41.xy = xl_retval_16._ShadowZFade.xy; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_TexCoord[4] = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.w = 0.0; + tmpvar_43.xyz = xl_retval_16.worldPos.xyz; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_TexCoord[5] = tmpvar_44; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_Slices3-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_Slices3-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-ir.txt new file mode 100644 index 000000000..aa6fa6236 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-ir.txt @@ -0,0 +1,190 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec3 worldRefl; + vec3 normal; + vec3 lightDir; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_17 +) +{ + vec3 objSpaceCameraPos_18; + vec4 tmpvar_19; + tmpvar_19.w = 1.0; + tmpvar_19.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_20; + tmpvar_20 = ((_World2Object * tmpvar_19).xyz * unity_Scale.w); + objSpaceCameraPos_18 = tmpvar_20; + return (objSpaceCameraPos_18 - v_17.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_21 +) +{ + vec3 viewRefl_22; + vec3 viewDir_23; + v2f_surf o_24; + PositionFog (v_21.vertex, o_24.pos, o_24.fog); + vec3 tmpvar_25; + tmpvar_25 = ObjSpaceViewDir (v_21.vertex); + vec3 tmpvar_26; + tmpvar_26 = -(tmpvar_25); + viewDir_23 = tmpvar_26; + vec3 tmpvar_27; + tmpvar_27 = reflect (viewDir_23, v_21.normal); + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + viewRefl_22 = tmpvar_28; + mat3 tmpvar_29; + tmpvar_29 = xll_constructMat3 (_Object2World); + vec3 tmpvar_30; + tmpvar_30 = (tmpvar_29 * viewRefl_22); + o_24.worldRefl = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = xll_constructMat3 (_Object2World); + vec3 tmpvar_32; + tmpvar_32 = (tmpvar_31 * (v_21.normal * unity_Scale.w)); + o_24.normal = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = WorldSpaceLightDir (v_21.vertex); + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + o_24.lightDir = tmpvar_34; + return o_24; +} + +void main () +{ + appdata_full xlt_v_35; + v2f_surf xl_retval_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Vertex.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_35.vertex = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = TANGENT.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_35.tangent = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_Normal.xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_35.normal = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_35.texcoord = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_35.texcoord1 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_Color.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_35.color = tmpvar_48; + v2f_surf tmpvar_49; + tmpvar_49 = vert_surf (xlt_v_35); + v2f_surf tmpvar_50; + tmpvar_50 = tmpvar_49; + xl_retval_36 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_36.pos.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_Position = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_53.x = xl_retval_36.fog; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + xlv_FOG = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.w = 0.0; + tmpvar_55.xyz = xl_retval_36.worldRefl.xyz; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[0] = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.w = 0.0; + tmpvar_57.xyz = xl_retval_36.normal.xyz; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[1] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_36.lightDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[2] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-out.txt new file mode 100644 index 000000000..0b75fd189 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl-out.txt @@ -0,0 +1,42 @@ +varying vec4 xlv_FOG; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 tmpvar_2; + tmpvar_2.w = 1.0; + tmpvar_2.xyz = _WorldSpaceCameraPos; + vec3 tmpvar_3; + tmpvar_3 = (gl_Vertex.xyz - ((_World2Object * tmpvar_2).xyz * unity_Scale.w)); + mat3 tmpvar_4; + tmpvar_4[0] = _Object2World[0].xyz; + tmpvar_4[1] = _Object2World[1].xyz; + tmpvar_4[2] = _Object2World[2].xyz; + mat3 tmpvar_5; + tmpvar_5[0] = _Object2World[0].xyz; + tmpvar_5[1] = _Object2World[1].xyz; + tmpvar_5[2] = _Object2World[2].xyz; + gl_Position = tmpvar_1; + vec4 tmpvar_6; + tmpvar_6.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_6.x = tmpvar_1.z; + xlv_FOG = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.w = 0.0; + tmpvar_7.xyz = (tmpvar_4 * (tmpvar_3 - (2.0 * (dot (gl_Normal, tmpvar_3) * gl_Normal)))); + gl_TexCoord[0] = tmpvar_7; + vec4 tmpvar_8; + tmpvar_8.w = 0.0; + tmpvar_8.xyz = (tmpvar_5 * (gl_Normal * unity_Scale.w)); + gl_TexCoord[1] = tmpvar_8; + vec4 tmpvar_9; + tmpvar_9.w = 0.0; + tmpvar_9.xyz = _WorldSpaceLightPos0.xyz; + gl_TexCoord[2] = tmpvar_9; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-ir.txt new file mode 100644 index 000000000..f4a15b02e --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-ir.txt @@ -0,0 +1,104 @@ +struct v2f_surf { + vec4 pos; + vec3 normal; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + v2f_surf o_10; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_10.pos = tmpvar_11; + mat3 tmpvar_12; + tmpvar_12 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_13; + tmpvar_13 = (tmpvar_12 * v_9.normal); + o_10.normal = tmpvar_13; + return o_10; +} + +void main () +{ + appdata_full xlt_v_14; + v2f_surf xl_retval_15; + vec4 tmpvar_16; + tmpvar_16 = gl_Vertex.xyzw; + vec4 tmpvar_17; + tmpvar_17 = tmpvar_16; + xlt_v_14.vertex = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = TANGENT.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + xlt_v_14.tangent = tmpvar_19; + vec3 tmpvar_20; + tmpvar_20 = gl_Normal.xyz; + vec3 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_14.normal = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_14.texcoord = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_14.texcoord1 = tmpvar_25; + vec4 tmpvar_26; + tmpvar_26 = gl_Color.xyzw; + vec4 tmpvar_27; + tmpvar_27 = tmpvar_26; + xlt_v_14.color = tmpvar_27; + v2f_surf tmpvar_28; + tmpvar_28 = vert_surf (xlt_v_14); + v2f_surf tmpvar_29; + tmpvar_29 = tmpvar_28; + xl_retval_15 = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_15.pos.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_Position = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_15.normal.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Surface_WorldRefl1-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Surface_WorldRefl1-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-ir.txt new file mode 100644 index 000000000..a769709e6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-ir.txt @@ -0,0 +1,91 @@ +struct v2f { + vec4 pos; + vec4 color; +}; +struct appdata_base { + vec4 vertex; + vec3 normal; + vec4 texcoord; +}; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f vert ( + in appdata_base v_9 +) +{ + vec3 normal_10; + v2f o_11; + vec4 tmpvar_12; + tmpvar_12 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_11.pos = tmpvar_12; + mat3 tmpvar_13; + tmpvar_13 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_14; + tmpvar_14 = (tmpvar_13 * v_9.normal); + normal_10 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.w = 1.0; + tmpvar_15.xyz = ((normal_10 * 0.5) + 0.5).xyz; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_11.color = tmpvar_16; + return o_11; +} + +void main () +{ + appdata_base xlt_v_17; + v2f xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = gl_Vertex.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_17.vertex = tmpvar_20; + vec3 tmpvar_21; + tmpvar_21 = gl_Normal.xyz; + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_17.normal = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_17.texcoord = tmpvar_24; + v2f tmpvar_25; + tmpvar_25 = vert (xlt_v_17); + v2f tmpvar_26; + tmpvar_26 = tmpvar_25; + xl_retval_18 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = xl_retval_18.pos.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_Position = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = xl_retval_18.color.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + gl_FrontColor = tmpvar_30; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Test_CgNormals-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Test_CgNormals-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-ir.txt new file mode 100644 index 000000000..b0cddc3e7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-ir.txt @@ -0,0 +1,83 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +struct appdata_base { + vec4 vertex; + vec3 normal; + vec4 texcoord; +}; +uniform sampler2D _CameraDepthTexture; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +v2f vert ( + in appdata_base v_4 +) +{ + v2f o_5; + float tex_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = v_4.texcoord.xy.xy; + vec4 tmpvar_8; + tmpvar_8 = xll_tex2Dlod (_CameraDepthTexture, tmpvar_7); + float tmpvar_9; + tmpvar_9 = tmpvar_8.x; + tex_6 = tmpvar_9; + float tmpvar_10; + tmpvar_10 = (v_4.vertex.y + ((1.0 - tex_6) * 3.0)); + v_4.vertex.y = vec2(tmpvar_10).y; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_4.vertex); + o_5.pos = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = v_4.texcoord.xy; + o_5.uv = tmpvar_12; + return o_5; +} + +void main () +{ + appdata_base xlt_v_13; + v2f xl_retval_14; + vec4 tmpvar_15; + tmpvar_15 = gl_Vertex.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xlt_v_13.vertex = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = gl_Normal.xyz; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_13.normal = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_13.texcoord = tmpvar_20; + v2f tmpvar_21; + tmpvar_21 = vert (xlt_v_13); + v2f tmpvar_22; + tmpvar_22 = tmpvar_21; + xl_retval_14 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = xl_retval_14.pos.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + gl_Position = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.zw = vec2(0.0, 0.0); + tmpvar_25.xy = xl_retval_14.uv.xy; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + gl_TexCoord[0] = tmpvar_26; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-out.txt similarity index 61% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-out.txt index c11b1a4f2..1dbc679ff 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderDepthTexture-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderDepthTexture-out.txt @@ -2,15 +2,12 @@ uniform sampler2D _CameraDepthTexture; void main () { vec4 tmpvar_1; - tmpvar_1 = gl_Vertex; + tmpvar_1.xzw = gl_Vertex.xzw; + tmpvar_1.y = (gl_Vertex.y + ((1.0 - texture2DLod (_CameraDepthTexture, gl_MultiTexCoord0.xy, 0.0).x) * 3.0)); + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_1); vec4 tmpvar_2; tmpvar_2.zw = vec2(0.0, 0.0); tmpvar_2.xy = gl_MultiTexCoord0.xy; - tmpvar_1.y = (gl_Vertex.y + ((1.0 - texture2DLod (_CameraDepthTexture, tmpvar_2.xy, 0.0).x) * 3.0)); - gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_1); - vec4 tmpvar_3; - tmpvar_3.zw = vec2(0.0, 0.0); - tmpvar_3.xy = gl_MultiTexCoord0.xy; - gl_TexCoord[0] = tmpvar_3; + gl_TexCoord[0] = tmpvar_2; } diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Test_VertexShaderTexture-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-ir.txt new file mode 100644 index 000000000..181e337f2 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-ir.txt @@ -0,0 +1,83 @@ +struct v2f { + vec4 pos; + vec2 uv; +}; +struct appdata_base { + vec4 vertex; + vec3 normal; + vec4 texcoord; +}; +uniform sampler2D _MainTex; +vec4 xll_tex2Dlod ( + in sampler2D s_1, + in vec4 coord_2 +) +{ + vec4 tmpvar_3; + tmpvar_3 = texture2DLod (s_1, coord_2.xy, coord_2.w); + return tmpvar_3; +} + +v2f vert ( + in appdata_base v_4 +) +{ + v2f o_5; + vec4 tex_6; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = v_4.texcoord.xy.xy; + vec4 tmpvar_8; + tmpvar_8 = xll_tex2Dlod (_MainTex, tmpvar_7); + vec4 tmpvar_9; + tmpvar_9 = tmpvar_8; + tex_6 = tmpvar_9; + float tmpvar_10; + tmpvar_10 = (v_4.vertex.y + (tex_6.x * 2.0)); + v_4.vertex.y = vec2(tmpvar_10).y; + vec4 tmpvar_11; + tmpvar_11 = (gl_ModelViewProjectionMatrix * v_4.vertex); + o_5.pos = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = v_4.texcoord.xy; + o_5.uv = tmpvar_12; + return o_5; +} + +void main () +{ + appdata_base xlt_v_13; + v2f xl_retval_14; + vec4 tmpvar_15; + tmpvar_15 = gl_Vertex.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xlt_v_13.vertex = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = gl_Normal.xyz; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_13.normal = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_13.texcoord = tmpvar_20; + v2f tmpvar_21; + tmpvar_21 = vert (xlt_v_13); + v2f tmpvar_22; + tmpvar_22 = tmpvar_21; + xl_retval_14 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = xl_retval_14.pos.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + gl_Position = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.zw = vec2(0.0, 0.0); + tmpvar_25.xy = xl_retval_14.uv.xy; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + gl_TexCoord[0] = tmpvar_26; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-out.txt new file mode 100644 index 000000000..300d18006 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Test_VertexShaderTexture-out.txt @@ -0,0 +1,13 @@ +uniform sampler2D _MainTex; +void main () +{ + vec4 tmpvar_1; + tmpvar_1.xzw = gl_Vertex.xzw; + tmpvar_1.y = (gl_Vertex.y + (texture2DLod (_MainTex, gl_MultiTexCoord0.xy, 0.0).x * 2.0)); + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_1); + vec4 tmpvar_2; + tmpvar_2.zw = vec2(0.0, 0.0); + tmpvar_2.xy = gl_MultiTexCoord0.xy; + gl_TexCoord[0] = tmpvar_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-TexGen_Cube_Refl-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-ir.txt new file mode 100644 index 000000000..99802fae6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-ir.txt @@ -0,0 +1,104 @@ +struct v2f { + vec4 vertex; + vec4 color; + vec3 texcoord; +}; +struct appdata_t { + vec4 vertex; + vec4 color; + vec3 normal; +}; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +vec3 ObjSpaceViewDir ( + in vec4 v_1 +) +{ + vec3 objSpaceCameraPos_2; + vec4 tmpvar_3; + tmpvar_3.w = 1.0; + tmpvar_3.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_4; + tmpvar_4 = ((_World2Object * tmpvar_3).xyz * unity_Scale.w); + objSpaceCameraPos_2 = tmpvar_4; + return (objSpaceCameraPos_2 - v_1.xyz); +} + +v2f vert ( + in appdata_t v_5 +) +{ + vec3 viewDir_6; + v2f o_7; + vec4 tmpvar_8; + tmpvar_8 = (gl_ModelViewProjectionMatrix * v_5.vertex); + o_7.vertex = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = ObjSpaceViewDir (v_5.vertex); + vec3 tmpvar_10; + tmpvar_10 = normalize (tmpvar_9); + vec3 tmpvar_11; + tmpvar_11 = -(tmpvar_10); + viewDir_6 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = reflect (viewDir_6, v_5.normal); + vec3 tmpvar_13; + tmpvar_13 = tmpvar_12; + o_7.texcoord = tmpvar_13; + vec4 tmpvar_14; + tmpvar_14.w = 0.0; + tmpvar_14.xyz = o_7.texcoord.xyz; + vec3 tmpvar_15; + tmpvar_15 = (gl_ModelViewMatrix * tmpvar_14).xyz; + vec3 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_7.texcoord = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17 = v_5.color; + o_7.color = tmpvar_17; + return o_7; +} + +void main () +{ + appdata_t xlt_v_18; + v2f xl_retval_19; + vec4 tmpvar_20; + tmpvar_20 = gl_Vertex.xyzw; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + xlt_v_18.vertex = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22 = gl_Color.xyzw; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + xlt_v_18.color = tmpvar_23; + vec3 tmpvar_24; + tmpvar_24 = gl_Normal.xyz; + vec3 tmpvar_25; + tmpvar_25 = tmpvar_24; + xlt_v_18.normal = tmpvar_25; + v2f tmpvar_26; + tmpvar_26 = vert (xlt_v_18); + v2f tmpvar_27; + tmpvar_27 = tmpvar_26; + xl_retval_19 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28 = xl_retval_19.vertex.xyzw; + vec4 tmpvar_29; + tmpvar_29 = tmpvar_28; + gl_Position = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30 = xl_retval_19.color.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + gl_FrontColor = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32.w = 0.0; + tmpvar_32.xyz = xl_retval_19.texcoord.xyz; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + gl_TexCoord[0] = tmpvar_33; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-out.txt new file mode 100644 index 000000000..676689aa9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-TexGen_Cube_Refl-out.txt @@ -0,0 +1,21 @@ +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +void main () +{ + vec4 tmpvar_1; + tmpvar_1.w = 1.0; + tmpvar_1.xyz = _WorldSpaceCameraPos; + vec3 tmpvar_2; + tmpvar_2 = -(normalize((((_World2Object * tmpvar_1).xyz * unity_Scale.w) - gl_Vertex.xyz))); + vec4 tmpvar_3; + tmpvar_3.w = 0.0; + tmpvar_3.xyz = (tmpvar_2 - (2.0 * (dot (gl_Normal, tmpvar_2) * gl_Normal))); + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + gl_FrontColor = gl_Color; + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = (gl_ModelViewMatrix * tmpvar_3).xyz; + gl_TexCoord[0] = tmpvar_4; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-ir.txt new file mode 100644 index 000000000..186cd8011 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-ir.txt @@ -0,0 +1,76 @@ +struct v2f { + vec4 pos; + vec2 texcoord; + vec3 cubenormal; +}; +struct appdata { + vec4 vertex; + vec2 texcoord; + vec3 normal; +}; +uniform vec4 _MainTex_ST; +v2f vert ( + in appdata v_1 +) +{ + v2f o_2; + vec4 tmpvar_3; + tmpvar_3 = (gl_ModelViewProjectionMatrix * v_1.vertex); + o_2.pos = tmpvar_3; + vec2 tmpvar_4; + tmpvar_4 = ((v_1.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_2.texcoord = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = v_1.normal.xyz; + vec3 tmpvar_6; + tmpvar_6 = (gl_ModelViewMatrix * tmpvar_5).xyz; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + o_2.cubenormal = tmpvar_7; + return o_2; +} + +void main () +{ + appdata xlt_v_8; + v2f xl_retval_9; + vec4 tmpvar_10; + tmpvar_10 = gl_Vertex.xyzw; + vec4 tmpvar_11; + tmpvar_11 = tmpvar_10; + xlt_v_8.vertex = tmpvar_11; + vec2 tmpvar_12; + tmpvar_12 = gl_MultiTexCoord0.xy; + vec2 tmpvar_13; + tmpvar_13 = tmpvar_12; + xlt_v_8.texcoord = tmpvar_13; + vec3 tmpvar_14; + tmpvar_14 = gl_Normal.xyz; + vec3 tmpvar_15; + tmpvar_15 = tmpvar_14; + xlt_v_8.normal = tmpvar_15; + v2f tmpvar_16; + tmpvar_16 = vert (xlt_v_8); + v2f tmpvar_17; + tmpvar_17 = tmpvar_16; + xl_retval_9 = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18 = xl_retval_9.pos.xyzw; + vec4 tmpvar_19; + tmpvar_19 = tmpvar_18; + gl_Position = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = xl_retval_9.texcoord.xy; + vec4 tmpvar_21; + tmpvar_21 = tmpvar_20; + gl_TexCoord[0] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = xl_retval_9.cubenormal.xyz; + vec4 tmpvar_23; + tmpvar_23 = tmpvar_22; + gl_TexCoord[1] = tmpvar_23; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Toon_Basic-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Toon_Basic-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-ir.txt new file mode 100644 index 000000000..db41fd5f6 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-ir.txt @@ -0,0 +1,206 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_6 +) +{ + vec3 objSpaceCameraPos_7; + vec4 tmpvar_8; + tmpvar_8.w = 1.0; + tmpvar_8.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_9; + tmpvar_9 = ((_World2Object * tmpvar_8).xyz * unity_Scale.w); + objSpaceCameraPos_7 = tmpvar_9; + return (objSpaceCameraPos_7 - v_6.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 objSpaceLightPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_11 = tmpvar_12; + return ((objSpaceLightPos_11.xyz * unity_Scale.w) - v_10.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_13 +) +{ + mat3 rotation_14; + vec3 binormal_15; + v2f_surf o_16; + PositionFog (v_13.vertex, o_16.pos, o_16.fog); + vec2 tmpvar_17; + tmpvar_17 = ((v_13.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_16.hip_pack0.xy = tmpvar_17.xy.xy; + vec2 tmpvar_18; + tmpvar_18 = ((v_13.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_16.hip_pack0.zw = tmpvar_18.xxxy.zw; + vec3 tmpvar_19; + tmpvar_19 = cross (v_13.normal, v_13.tangent.xyz); + vec3 tmpvar_20; + tmpvar_20 = (tmpvar_19 * v_13.tangent.w); + binormal_15 = tmpvar_20; + mat3 tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_13.tangent.x; + tmpvar_21[0].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_15.x; + tmpvar_21[0].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_13.normal.x; + tmpvar_21[0].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_13.tangent.y; + tmpvar_21[1].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_15.y; + tmpvar_21[1].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_13.normal.y; + tmpvar_21[1].z = tmpvar_27; + float tmpvar_28; + tmpvar_28 = v_13.tangent.z; + tmpvar_21[2].x = tmpvar_28; + float tmpvar_29; + tmpvar_29 = binormal_15.z; + tmpvar_21[2].y = tmpvar_29; + float tmpvar_30; + tmpvar_30 = v_13.normal.z; + tmpvar_21[2].z = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = (tmpvar_21); + rotation_14 = (tmpvar_31); + vec3 tmpvar_32; + tmpvar_32 = ObjSpaceLightDir (v_13.vertex); + vec3 tmpvar_33; + tmpvar_33 = (rotation_14 * tmpvar_32); + o_16.lightDir = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = ObjSpaceViewDir (v_13.vertex); + vec3 tmpvar_35; + tmpvar_35 = (rotation_14 * tmpvar_34); + o_16.viewDir = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = (_LightMatrix0 * (_Object2World * v_13.vertex)).xyz; + o_16._LightCoord = tmpvar_36; + return o_16; +} + +void main () +{ + appdata_full xlt_v_37; + v2f_surf xl_retval_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Vertex.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_37.vertex = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = TANGENT.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_37.tangent = tmpvar_42; + vec3 tmpvar_43; + tmpvar_43 = gl_Normal.xyz; + vec3 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_37.normal = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_37.texcoord = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_37.texcoord1 = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49 = gl_Color.xyzw; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + xlt_v_37.color = tmpvar_50; + v2f_surf tmpvar_51; + tmpvar_51 = vert_surf (xlt_v_37); + v2f_surf tmpvar_52; + tmpvar_52 = tmpvar_51; + xl_retval_38 = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_38.pos.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_Position = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_55.x = xl_retval_38.fog; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + xlv_FOG = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57 = xl_retval_38.hip_pack0.xyzw; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[0] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_38.lightDir.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[1] = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.w = 0.0; + tmpvar_61.xyz = xl_retval_38.viewDir.xyz; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + gl_TexCoord[2] = tmpvar_62; + vec4 tmpvar_63; + tmpvar_63.w = 0.0; + tmpvar_63.xyz = xl_retval_38._LightCoord.xyz; + vec4 tmpvar_64; + tmpvar_64 = tmpvar_63; + gl_TexCoord[3] = tmpvar_64; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-out.txt similarity index 94% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-out.txt index 3dc712ebe..1909fb05a 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Bumped_Specular-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Bumped_Specular-out.txt @@ -16,7 +16,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt new file mode 100644 index 000000000..5e136a41f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-ir.txt @@ -0,0 +1,166 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec4 hip_pack0; + vec3 lightDir; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _World2Object; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec3 ObjSpaceLightDir ( + in vec4 v_6 +) +{ + vec3 objSpaceLightPos_7; + vec3 tmpvar_8; + tmpvar_8 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_7 = tmpvar_8; + return objSpaceLightPos_7.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + PositionFog (v_9.vertex, o_12.pos, o_12.fog); + vec2 tmpvar_13; + tmpvar_13 = ((v_9.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_12.hip_pack0.xy = tmpvar_13.xy.xy; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0.zw = tmpvar_14.xxxy.zw; + vec3 tmpvar_15; + tmpvar_15 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_16; + tmpvar_16 = (tmpvar_15 * v_9.tangent.w); + binormal_11 = tmpvar_16; + mat3 tmpvar_17; + float tmpvar_18; + tmpvar_18 = v_9.tangent.x; + tmpvar_17[0].x = tmpvar_18; + float tmpvar_19; + tmpvar_19 = binormal_11.x; + tmpvar_17[0].y = tmpvar_19; + float tmpvar_20; + tmpvar_20 = v_9.normal.x; + tmpvar_17[0].z = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.tangent.y; + tmpvar_17[1].x = tmpvar_21; + float tmpvar_22; + tmpvar_22 = binormal_11.y; + tmpvar_17[1].y = tmpvar_22; + float tmpvar_23; + tmpvar_23 = v_9.normal.y; + tmpvar_17[1].z = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.tangent.z; + tmpvar_17[2].x = tmpvar_24; + float tmpvar_25; + tmpvar_25 = binormal_11.z; + tmpvar_17[2].y = tmpvar_25; + float tmpvar_26; + tmpvar_26 = v_9.normal.z; + tmpvar_17[2].z = tmpvar_26; + mat3 tmpvar_27; + tmpvar_27 = (tmpvar_17); + rotation_10 = (tmpvar_27); + vec3 tmpvar_28; + tmpvar_28 = ObjSpaceLightDir (v_9.vertex); + vec3 tmpvar_29; + tmpvar_29 = (rotation_10 * tmpvar_28); + o_12.lightDir = tmpvar_29; + return o_12; +} + +void main () +{ + appdata_full xlt_v_30; + v2f_surf xl_retval_31; + vec4 tmpvar_32; + tmpvar_32 = gl_Vertex.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_30.vertex = tmpvar_33; + vec4 tmpvar_34; + tmpvar_34 = TANGENT.xyzw; + vec4 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_30.tangent = tmpvar_35; + vec3 tmpvar_36; + tmpvar_36 = gl_Normal.xyz; + vec3 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_30.normal = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_30.texcoord = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_30.texcoord1 = tmpvar_41; + vec4 tmpvar_42; + tmpvar_42 = gl_Color.xyzw; + vec4 tmpvar_43; + tmpvar_43 = tmpvar_42; + xlt_v_30.color = tmpvar_43; + v2f_surf tmpvar_44; + tmpvar_44 = vert_surf (xlt_v_30); + v2f_surf tmpvar_45; + tmpvar_45 = tmpvar_44; + xl_retval_31 = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46 = xl_retval_31.pos.xyzw; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + gl_Position = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_48.x = xl_retval_31.fog; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + xlv_FOG = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50 = xl_retval_31.hip_pack0.xyzw; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[0] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_31.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[1] = tmpvar_53; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-out.txt similarity index 91% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-out.txt index daa189340..f485da26f 100644 --- a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse-out.txt +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse-out.txt @@ -12,7 +12,7 @@ void main () tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); vec3 tmpvar_3; - tmpvar_3 = (cross (gl_Normal, TANGENT.xyz) * TANGENT.w); + tmpvar_3 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); mat3 tmpvar_4; tmpvar_4[0].x = TANGENT.x; tmpvar_4[0].y = tmpvar_3.x; diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Diffuse1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt new file mode 100644 index 000000000..a13d7f753 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-ir.txt @@ -0,0 +1,132 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + return o_13; +} + +void main () +{ + appdata_full xlt_v_17; + v2f_surf xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = gl_Vertex.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_17.vertex = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = TANGENT.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_17.tangent = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_Normal.xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_17.normal = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_17.texcoord = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_17.texcoord1 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_Color.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_17.color = tmpvar_30; + v2f_surf tmpvar_31; + tmpvar_31 = vert_surf (xlt_v_17); + v2f_surf tmpvar_32; + tmpvar_32 = tmpvar_31; + xl_retval_18 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = xl_retval_18.pos.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_Position = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_35.x = xl_retval_18.fog; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlv_FOG = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.zw = vec2(0.0, 0.0); + tmpvar_37.xy = xl_retval_18.hip_pack0.xy; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + gl_TexCoord[0] = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_18.hip_screen.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[1] = tmpvar_40; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt new file mode 100644 index 000000000..6e8b0331f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Diffuse1-out.txt @@ -0,0 +1,27 @@ +varying vec4 xlv_FOG; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_5; + tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_5.x = tmpvar_1.z; + xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_6; + gl_TexCoord[1] = o_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-ir.txt new file mode 100644 index 000000000..c051f97a0 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-ir.txt @@ -0,0 +1,180 @@ +struct v2f_surf { + vec4 pos; + vec4 hip_pack0; + vec3 TtoV0; + vec3 TtoV1; + vec3 TtoV2; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +attribute vec4 TANGENT; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +v2f_surf vert_surf ( + in appdata_full v_9 +) +{ + mat3 rotation_10; + vec3 binormal_11; + v2f_surf o_12; + vec4 tmpvar_13; + tmpvar_13 = (gl_ModelViewProjectionMatrix * v_9.vertex); + o_12.pos = tmpvar_13; + vec2 tmpvar_14; + tmpvar_14 = ((v_9.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_12.hip_pack0.xy = tmpvar_14.xy.xy; + vec2 tmpvar_15; + tmpvar_15 = ((v_9.texcoord.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + o_12.hip_pack0.zw = tmpvar_15.xxxy.zw; + vec3 tmpvar_16; + tmpvar_16 = cross (v_9.normal, v_9.tangent.xyz); + vec3 tmpvar_17; + tmpvar_17 = (tmpvar_16 * v_9.tangent.w); + binormal_11 = tmpvar_17; + mat3 tmpvar_18; + float tmpvar_19; + tmpvar_19 = v_9.tangent.x; + tmpvar_18[0].x = tmpvar_19; + float tmpvar_20; + tmpvar_20 = binormal_11.x; + tmpvar_18[0].y = tmpvar_20; + float tmpvar_21; + tmpvar_21 = v_9.normal.x; + tmpvar_18[0].z = tmpvar_21; + float tmpvar_22; + tmpvar_22 = v_9.tangent.y; + tmpvar_18[1].x = tmpvar_22; + float tmpvar_23; + tmpvar_23 = binormal_11.y; + tmpvar_18[1].y = tmpvar_23; + float tmpvar_24; + tmpvar_24 = v_9.normal.y; + tmpvar_18[1].z = tmpvar_24; + float tmpvar_25; + tmpvar_25 = v_9.tangent.z; + tmpvar_18[2].x = tmpvar_25; + float tmpvar_26; + tmpvar_26 = binormal_11.z; + tmpvar_18[2].y = tmpvar_26; + float tmpvar_27; + tmpvar_27 = v_9.normal.z; + tmpvar_18[2].z = tmpvar_27; + mat3 tmpvar_28; + tmpvar_28 = (tmpvar_18); + rotation_10 = (tmpvar_28); + mat3 tmpvar_29; + tmpvar_29 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_30; + tmpvar_30 = (rotation_10 * tmpvar_29[0].xyz); + o_12.TtoV0 = tmpvar_30; + mat3 tmpvar_31; + tmpvar_31 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_32; + tmpvar_32 = (rotation_10 * tmpvar_31[1].xyz); + o_12.TtoV1 = tmpvar_32; + mat3 tmpvar_33; + tmpvar_33 = xll_constructMat3 (gl_ModelViewMatrixInverseTranspose); + vec3 tmpvar_34; + tmpvar_34 = (rotation_10 * tmpvar_33[2].xyz); + o_12.TtoV2 = tmpvar_34; + return o_12; +} + +void main () +{ + appdata_full xlt_v_35; + v2f_surf xl_retval_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Vertex.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_35.vertex = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = TANGENT.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_35.tangent = tmpvar_40; + vec3 tmpvar_41; + tmpvar_41 = gl_Normal.xyz; + vec3 tmpvar_42; + tmpvar_42 = tmpvar_41; + xlt_v_35.normal = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlt_v_35.texcoord = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlt_v_35.texcoord1 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = gl_Color.xyzw; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + xlt_v_35.color = tmpvar_48; + v2f_surf tmpvar_49; + tmpvar_49 = vert_surf (xlt_v_35); + v2f_surf tmpvar_50; + tmpvar_50 = tmpvar_49; + xl_retval_36 = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_36.pos.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_Position = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53 = xl_retval_36.hip_pack0.xyzw; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[0] = tmpvar_54; + vec4 tmpvar_55; + tmpvar_55.w = 0.0; + tmpvar_55.xyz = xl_retval_36.TtoV0.xyz; + vec4 tmpvar_56; + tmpvar_56 = tmpvar_55; + gl_TexCoord[1] = tmpvar_56; + vec4 tmpvar_57; + tmpvar_57.w = 0.0; + tmpvar_57.xyz = xl_retval_36.TtoV1.xyz; + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + gl_TexCoord[2] = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59.w = 0.0; + tmpvar_59.xyz = xl_retval_36.TtoV2.xyz; + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + gl_TexCoord[3] = tmpvar_60; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-out.txt new file mode 100644 index 000000000..f95f66485 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular-out.txt @@ -0,0 +1,36 @@ +attribute vec4 TANGENT; +uniform vec4 _MainTex_ST; +uniform vec4 _BumpMap_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + tmpvar_1.zw = ((gl_MultiTexCoord0.xy * _BumpMap_ST.xy) + _BumpMap_ST.zw); + vec3 tmpvar_2; + tmpvar_2 = (((gl_Normal.yzx * TANGENT.zxy) - (gl_Normal.zxy * TANGENT.yzx)) * TANGENT.w); + mat3 tmpvar_3; + tmpvar_3[0].x = TANGENT.x; + tmpvar_3[0].y = tmpvar_2.x; + tmpvar_3[0].z = gl_Normal.x; + tmpvar_3[1].x = TANGENT.y; + tmpvar_3[1].y = tmpvar_2.y; + tmpvar_3[1].z = gl_Normal.y; + tmpvar_3[2].x = TANGENT.z; + tmpvar_3[2].y = tmpvar_2.z; + tmpvar_3[2].z = gl_Normal.z; + gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex); + gl_TexCoord[0] = tmpvar_1; + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = (tmpvar_3 * gl_ModelViewMatrixInverseTranspose[0].xyz); + gl_TexCoord[1] = tmpvar_4; + vec4 tmpvar_5; + tmpvar_5.w = 0.0; + tmpvar_5.xyz = (tmpvar_3 * gl_ModelViewMatrixInverseTranspose[1].xyz); + gl_TexCoord[2] = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 0.0; + tmpvar_6.xyz = (tmpvar_3 * gl_ModelViewMatrixInverseTranspose[2].xyz); + gl_TexCoord[3] = tmpvar_6; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Bumped_Specular1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-ir.txt new file mode 100644 index 000000000..a13d7f753 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-ir.txt @@ -0,0 +1,132 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 hip_screen; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +vec4 ComputeScreenPos ( + in vec4 pos_6 +) +{ + vec4 o_7; + vec4 tmpvar_8; + tmpvar_8 = (pos_6 * 0.5); + o_7 = tmpvar_8; + vec2 tmpvar_9; + tmpvar_9.x = o_7.x; + tmpvar_9.y = (o_7.y * _ProjectionParams.x); + vec2 tmpvar_10; + tmpvar_10 = (tmpvar_9 + o_7.w); + o_7.xy = tmpvar_10.xy.xy; + vec2 tmpvar_11; + tmpvar_11 = pos_6.zw; + o_7.zw = tmpvar_11.xxxy.zw; + return o_7; +} + +v2f_surf vert_surf ( + in appdata_full v_12 +) +{ + v2f_surf o_13; + PositionFog (v_12.vertex, o_13.pos, o_13.fog); + vec2 tmpvar_14; + tmpvar_14 = ((v_12.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_13.hip_pack0 = tmpvar_14.xy.xy; + vec4 tmpvar_15; + tmpvar_15 = ComputeScreenPos (o_13.pos); + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + o_13.hip_screen = tmpvar_16; + return o_13; +} + +void main () +{ + appdata_full xlt_v_17; + v2f_surf xl_retval_18; + vec4 tmpvar_19; + tmpvar_19 = gl_Vertex.xyzw; + vec4 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_17.vertex = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21 = TANGENT.xyzw; + vec4 tmpvar_22; + tmpvar_22 = tmpvar_21; + xlt_v_17.tangent = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = gl_Normal.xyz; + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + xlt_v_17.normal = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlt_v_17.texcoord = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_17.texcoord1 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = gl_Color.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_17.color = tmpvar_30; + v2f_surf tmpvar_31; + tmpvar_31 = vert_surf (xlt_v_17); + v2f_surf tmpvar_32; + tmpvar_32 = tmpvar_31; + xl_retval_18 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = xl_retval_18.pos.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + gl_Position = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_35.x = xl_retval_18.fog; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlv_FOG = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.zw = vec2(0.0, 0.0); + tmpvar_37.xy = xl_retval_18.hip_pack0.xy; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + gl_TexCoord[0] = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = xl_retval_18.hip_screen.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + gl_TexCoord[1] = tmpvar_40; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-out.txt new file mode 100644 index 000000000..6e8b0331f --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Bumped_Specular1-out.txt @@ -0,0 +1,27 @@ +varying vec4 xlv_FOG; +uniform vec4 _ProjectionParams; +uniform vec4 _MainTex_ST; +void main () +{ + vec4 tmpvar_1; + tmpvar_1 = (gl_ModelViewProjectionMatrix * gl_Vertex); + vec4 o_2; + vec4 tmpvar_3; + tmpvar_3 = (tmpvar_1 * 0.5); + vec2 tmpvar_4; + tmpvar_4.x = tmpvar_3.x; + tmpvar_4.y = (tmpvar_3.y * _ProjectionParams.x); + o_2.xy = (tmpvar_4 + tmpvar_3.w); + o_2.zw = tmpvar_1.zw; + gl_Position = tmpvar_1; + vec4 tmpvar_5; + tmpvar_5.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_5.x = tmpvar_1.z; + xlv_FOG = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.zw = vec2(0.0, 0.0); + tmpvar_6.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_6; + gl_TexCoord[1] = o_2; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-ir.txt new file mode 100644 index 000000000..dfe724d28 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-ir.txt @@ -0,0 +1,171 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec4 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceLightDir ( + in vec4 v_9 +) +{ + vec3 worldPos_10; + vec3 tmpvar_11; + tmpvar_11 = (_Object2World * v_9).xyz; + worldPos_10 = tmpvar_11; + return (_WorldSpaceLightPos0.xyz - worldPos_10); +} + +void PositionFog ( + in vec4 v_12, + out vec4 pos_13, + out float fog_14 +) +{ + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * v_12); + pos_13 = tmpvar_15; + float tmpvar_16; + tmpvar_16 = pos_13.z; + fog_14 = tmpvar_16; +} + +v2f_surf vert_surf ( + in appdata_full v_17 +) +{ + v2f_surf o_18; + PositionFog (v_17.vertex, o_18.pos, o_18.fog); + vec2 tmpvar_19; + tmpvar_19 = ((v_17.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_18.hip_pack0 = tmpvar_19.xy.xy; + mat3 tmpvar_20; + tmpvar_20 = xll_constructMat3 (_Object2World); + vec3 tmpvar_21; + tmpvar_21 = (tmpvar_20 * (v_17.normal * unity_Scale.w)); + o_18.normal = tmpvar_21; + vec3 tmpvar_22; + tmpvar_22 = WorldSpaceLightDir (v_17.vertex); + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + o_18.lightDir = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24 = (_LightMatrix0 * (_Object2World * v_17.vertex)); + o_18._LightCoord = tmpvar_24; + return o_18; +} + +void main () +{ + appdata_full xlt_v_25; + v2f_surf xl_retval_26; + vec4 tmpvar_27; + tmpvar_27 = gl_Vertex.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + xlt_v_25.vertex = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29 = TANGENT.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_25.tangent = tmpvar_30; + vec3 tmpvar_31; + tmpvar_31 = gl_Normal.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_25.normal = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_25.texcoord = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_25.texcoord1 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_Color.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_25.color = tmpvar_38; + v2f_surf tmpvar_39; + tmpvar_39 = vert_surf (xlt_v_25); + v2f_surf tmpvar_40; + tmpvar_40 = tmpvar_39; + xl_retval_26 = tmpvar_40; + vec4 tmpvar_41; + tmpvar_41 = xl_retval_26.pos.xyzw; + vec4 tmpvar_42; + tmpvar_42 = tmpvar_41; + gl_Position = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_43.x = xl_retval_26.fog; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + xlv_FOG = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.zw = vec2(0.0, 0.0); + tmpvar_45.xy = xl_retval_26.hip_pack0.xy; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + gl_TexCoord[0] = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 0.0; + tmpvar_47.xyz = xl_retval_26.normal.xyz; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[1] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_26.lightDir.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[2] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51 = xl_retval_26._LightCoord.xyzw; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[3] = tmpvar_52; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Diffuse-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Diffuse-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-ir.txt new file mode 100644 index 000000000..342f7b464 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-ir.txt @@ -0,0 +1,181 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceViewDir ( + in vec4 v_9 +) +{ + return (_WorldSpaceCameraPos.xyz - (_Object2World * v_9).xyz); +} + +vec3 WorldSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 worldPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * v_10).xyz; + worldPos_11 = tmpvar_12; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_13, + out vec4 pos_14, + out float fog_15 +) +{ + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * v_13); + pos_14 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = pos_14.z; + fog_15 = tmpvar_17; +} + +v2f_surf vert_surf ( + in appdata_full v_18 +) +{ + v2f_surf o_19; + PositionFog (v_18.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_18.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0 = tmpvar_20.xy.xy; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_18.normal * unity_Scale.w)); + o_19.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_18.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_19.lightDir = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = WorldSpaceViewDir (v_18.vertex); + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + o_19.viewDir = tmpvar_26; + return o_19; +} + +void main () +{ + appdata_full xlt_v_27; + v2f_surf xl_retval_28; + vec4 tmpvar_29; + tmpvar_29 = gl_Vertex.xyzw; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + xlt_v_27.vertex = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31 = TANGENT.xyzw; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + xlt_v_27.tangent = tmpvar_32; + vec3 tmpvar_33; + tmpvar_33 = gl_Normal.xyz; + vec3 tmpvar_34; + tmpvar_34 = tmpvar_33; + xlt_v_27.normal = tmpvar_34; + vec4 tmpvar_35; + tmpvar_35 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_36; + tmpvar_36 = tmpvar_35; + xlt_v_27.texcoord = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_38; + tmpvar_38 = tmpvar_37; + xlt_v_27.texcoord1 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39 = gl_Color.xyzw; + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + xlt_v_27.color = tmpvar_40; + v2f_surf tmpvar_41; + tmpvar_41 = vert_surf (xlt_v_27); + v2f_surf tmpvar_42; + tmpvar_42 = tmpvar_41; + xl_retval_28 = tmpvar_42; + vec4 tmpvar_43; + tmpvar_43 = xl_retval_28.pos.xyzw; + vec4 tmpvar_44; + tmpvar_44 = tmpvar_43; + gl_Position = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_45.x = xl_retval_28.fog; + vec4 tmpvar_46; + tmpvar_46 = tmpvar_45; + xlv_FOG = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.zw = vec2(0.0, 0.0); + tmpvar_47.xy = xl_retval_28.hip_pack0.xy; + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + gl_TexCoord[0] = tmpvar_48; + vec4 tmpvar_49; + tmpvar_49.w = 0.0; + tmpvar_49.xyz = xl_retval_28.normal.xyz; + vec4 tmpvar_50; + tmpvar_50 = tmpvar_49; + gl_TexCoord[1] = tmpvar_50; + vec4 tmpvar_51; + tmpvar_51.w = 0.0; + tmpvar_51.xyz = xl_retval_28.lightDir.xyz; + vec4 tmpvar_52; + tmpvar_52 = tmpvar_51; + gl_TexCoord[2] = tmpvar_52; + vec4 tmpvar_53; + tmpvar_53.w = 0.0; + tmpvar_53.xyz = xl_retval_28.viewDir.xyz; + vec4 tmpvar_54; + tmpvar_54 = tmpvar_53; + gl_TexCoord[3] = tmpvar_54; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Cutout_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Cutout_Specular-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-ir.txt new file mode 100644 index 000000000..7b997fdf8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-ir.txt @@ -0,0 +1,192 @@ +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec3 normal; + vec3 lightDir; + vec3 viewDir; + vec2 _LightCoord; +}; +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +mat3 xll_constructMat3 ( + in mat4 m_1 +) +{ + vec3 tmpvar_2; + tmpvar_2 = m_1[0].xyz; + vec3 tmpvar_3; + tmpvar_3 = m_1[1].xyz; + vec3 tmpvar_4; + tmpvar_4 = m_1[2].xyz; + mat3 tmpvar_5; + vec3 tmpvar_6; + tmpvar_6 = tmpvar_2; + tmpvar_5[0] = tmpvar_6; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_3; + tmpvar_5[1] = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = tmpvar_4; + tmpvar_5[2] = tmpvar_8; + return tmpvar_5; +} + +vec3 WorldSpaceViewDir ( + in vec4 v_9 +) +{ + return (_WorldSpaceCameraPos.xyz - (_Object2World * v_9).xyz); +} + +vec3 WorldSpaceLightDir ( + in vec4 v_10 +) +{ + vec3 worldPos_11; + vec3 tmpvar_12; + tmpvar_12 = (_Object2World * v_10).xyz; + worldPos_11 = tmpvar_12; + return _WorldSpaceLightPos0.xyz; +} + +void PositionFog ( + in vec4 v_13, + out vec4 pos_14, + out float fog_15 +) +{ + vec4 tmpvar_16; + tmpvar_16 = (gl_ModelViewProjectionMatrix * v_13); + pos_14 = tmpvar_16; + float tmpvar_17; + tmpvar_17 = pos_14.z; + fog_15 = tmpvar_17; +} + +v2f_surf vert_surf ( + in appdata_full v_18 +) +{ + v2f_surf o_19; + PositionFog (v_18.vertex, o_19.pos, o_19.fog); + vec2 tmpvar_20; + tmpvar_20 = ((v_18.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_19.hip_pack0 = tmpvar_20.xy.xy; + mat3 tmpvar_21; + tmpvar_21 = xll_constructMat3 (_Object2World); + vec3 tmpvar_22; + tmpvar_22 = (tmpvar_21 * (v_18.normal * unity_Scale.w)); + o_19.normal = tmpvar_22; + vec3 tmpvar_23; + tmpvar_23 = WorldSpaceLightDir (v_18.vertex); + vec3 tmpvar_24; + tmpvar_24 = tmpvar_23; + o_19.lightDir = tmpvar_24; + vec3 tmpvar_25; + tmpvar_25 = WorldSpaceViewDir (v_18.vertex); + vec3 tmpvar_26; + tmpvar_26 = tmpvar_25; + o_19.viewDir = tmpvar_26; + vec2 tmpvar_27; + tmpvar_27 = (_LightMatrix0 * (_Object2World * v_18.vertex)).xy; + o_19._LightCoord = tmpvar_27; + return o_19; +} + +void main () +{ + appdata_full xlt_v_28; + v2f_surf xl_retval_29; + vec4 tmpvar_30; + tmpvar_30 = gl_Vertex.xyzw; + vec4 tmpvar_31; + tmpvar_31 = tmpvar_30; + xlt_v_28.vertex = tmpvar_31; + vec4 tmpvar_32; + tmpvar_32 = TANGENT.xyzw; + vec4 tmpvar_33; + tmpvar_33 = tmpvar_32; + xlt_v_28.tangent = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = gl_Normal.xyz; + vec3 tmpvar_35; + tmpvar_35 = tmpvar_34; + xlt_v_28.normal = tmpvar_35; + vec4 tmpvar_36; + tmpvar_36 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_37; + tmpvar_37 = tmpvar_36; + xlt_v_28.texcoord = tmpvar_37; + vec4 tmpvar_38; + tmpvar_38 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_39; + tmpvar_39 = tmpvar_38; + xlt_v_28.texcoord1 = tmpvar_39; + vec4 tmpvar_40; + tmpvar_40 = gl_Color.xyzw; + vec4 tmpvar_41; + tmpvar_41 = tmpvar_40; + xlt_v_28.color = tmpvar_41; + v2f_surf tmpvar_42; + tmpvar_42 = vert_surf (xlt_v_28); + v2f_surf tmpvar_43; + tmpvar_43 = tmpvar_42; + xl_retval_29 = tmpvar_43; + vec4 tmpvar_44; + tmpvar_44 = xl_retval_29.pos.xyzw; + vec4 tmpvar_45; + tmpvar_45 = tmpvar_44; + gl_Position = tmpvar_45; + vec4 tmpvar_46; + tmpvar_46.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_46.x = xl_retval_29.fog; + vec4 tmpvar_47; + tmpvar_47 = tmpvar_46; + xlv_FOG = tmpvar_47; + vec4 tmpvar_48; + tmpvar_48.zw = vec2(0.0, 0.0); + tmpvar_48.xy = xl_retval_29.hip_pack0.xy; + vec4 tmpvar_49; + tmpvar_49 = tmpvar_48; + gl_TexCoord[0] = tmpvar_49; + vec4 tmpvar_50; + tmpvar_50.w = 0.0; + tmpvar_50.xyz = xl_retval_29.normal.xyz; + vec4 tmpvar_51; + tmpvar_51 = tmpvar_50; + gl_TexCoord[1] = tmpvar_51; + vec4 tmpvar_52; + tmpvar_52.w = 0.0; + tmpvar_52.xyz = xl_retval_29.lightDir.xyz; + vec4 tmpvar_53; + tmpvar_53 = tmpvar_52; + gl_TexCoord[2] = tmpvar_53; + vec4 tmpvar_54; + tmpvar_54.w = 0.0; + tmpvar_54.xyz = xl_retval_29.viewDir.xyz; + vec4 tmpvar_55; + tmpvar_55 = tmpvar_54; + gl_TexCoord[3] = tmpvar_55; + vec4 tmpvar_56; + tmpvar_56.zw = vec2(0.0, 0.0); + tmpvar_56.xy = xl_retval_29._LightCoord.xy; + vec4 tmpvar_57; + tmpvar_57 = tmpvar_56; + gl_TexCoord[4] = tmpvar_57; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Transparent_Specular-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Transparent_Specular-out.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-TreeCreatorLeavesRT-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-ir.txt new file mode 100644 index 000000000..3316b2caa --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-ir.txt @@ -0,0 +1,276 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f { + vec4 pos; + vec2 uv; + vec3 color; + vec3 backContrib; + vec3 nl; + vec3 nh; +}; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform float _TranslucencyViewDependency; +uniform vec3 _TerrainTreeLightDirections[4]; +float xll_saturate ( + in float x_1 +) +{ + float tmpvar_2; + tmpvar_2 = clamp (x_1, 0.0, 1.0); + return tmpvar_2; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_3 +) +{ + vec3 objSpaceCameraPos_4; + vec4 tmpvar_5; + tmpvar_5.w = 1.0; + tmpvar_5.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_6; + tmpvar_6 = ((_World2Object * tmpvar_5).xyz * unity_Scale.w); + objSpaceCameraPos_4 = tmpvar_6; + return (objSpaceCameraPos_4 - v_3.xyz); +} + +void ExpandBillboard ( + in mat4 mat_7, + inout vec4 pos_8, + inout vec3 normal_9, + inout vec4 tangent_10 +) +{ + vec3 tanb_11; + vec3 norb_12; + float isBillboard_13; + float tmpvar_14; + tmpvar_14 = abs (tangent_10.w); + float tmpvar_15; + tmpvar_15 = (1.0 - tmpvar_14); + isBillboard_13 = tmpvar_15; + vec4 tmpvar_16; + tmpvar_16.w = 0.0; + tmpvar_16.xyz = normal_9.xyz; + vec4 tmpvar_17; + tmpvar_17 = normalize ((tmpvar_16 * mat_7)); + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17.xyz; + vec3 tmpvar_19; + tmpvar_19 = tmpvar_18; + norb_12 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = tangent_10.xyz.xyz; + vec4 tmpvar_21; + tmpvar_21 = normalize ((tmpvar_20 * mat_7)); + vec3 tmpvar_22; + tmpvar_22 = tmpvar_21.xyz; + vec3 tmpvar_23; + tmpvar_23 = tmpvar_22; + tanb_11 = tmpvar_23; + vec4 tmpvar_24; + tmpvar_24.zw = vec2(0.0, 0.0); + tmpvar_24.xy = normal_9.xy.xy; + vec4 tmpvar_25; + tmpvar_25 = (pos_8 + ((tmpvar_24 * mat_7) * isBillboard_13)); + pos_8 = tmpvar_25; + vec3 tmpvar_26; + tmpvar_26 = vec3(isBillboard_13); + vec3 tmpvar_27; + tmpvar_27 = mix (normal_9, norb_12, tmpvar_26); + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + normal_9 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.w = -1.0; + tmpvar_29.xyz = tanb_11.xyz; + vec4 tmpvar_30; + tmpvar_30 = vec4(isBillboard_13); + vec4 tmpvar_31; + tmpvar_31 = mix (tangent_10, tmpvar_29, tmpvar_30); + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + tangent_10 = tmpvar_32; +} + +v2f vert ( + in appdata_full v_33 +) +{ + float nh_34; + vec3 h_35; + float backContrib_36; + float nl_37; + vec3 lightDir_38; + int j_39; + vec3 viewDir_40; + v2f o_41; + int tmpvar_42; + tmpvar_42 = 0; + j_39 = tmpvar_42; + ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v_33.vertex, v_33.normal, v_33.tangent); + vec4 tmpvar_43; + tmpvar_43 = (gl_ModelViewProjectionMatrix * v_33.vertex); + o_41.pos = tmpvar_43; + vec2 tmpvar_44; + tmpvar_44 = v_33.texcoord.xy; + o_41.uv = tmpvar_44; + vec3 tmpvar_45; + tmpvar_45 = ObjSpaceViewDir (v_33.vertex); + vec3 tmpvar_46; + tmpvar_46 = normalize (tmpvar_45); + vec3 tmpvar_47; + tmpvar_47 = tmpvar_46; + viewDir_40 = tmpvar_47; + while (true) { + if (!((j_39 < 3))) { + break; + }; + vec3 tmpvar_48; + tmpvar_48 = _TerrainTreeLightDirections[j_39]; + lightDir_38 = tmpvar_48; + float tmpvar_49; + tmpvar_49 = dot (v_33.normal, lightDir_38); + float tmpvar_50; + tmpvar_50 = tmpvar_49; + nl_37 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = dot (viewDir_40, -(lightDir_38)); + float tmpvar_52; + tmpvar_52 = xll_saturate (tmpvar_51); + float tmpvar_53; + tmpvar_53 = tmpvar_52; + backContrib_36 = tmpvar_53; + float tmpvar_54; + tmpvar_54 = xll_saturate (-(nl_37)); + float tmpvar_55; + tmpvar_55 = mix (tmpvar_54, backContrib_36, _TranslucencyViewDependency); + float tmpvar_56; + tmpvar_56 = tmpvar_55; + backContrib_36 = tmpvar_56; + float tmpvar_57; + tmpvar_57 = (backContrib_36 * 2.0); + o_41.backContrib[j_39] = tmpvar_57; + float tmpvar_58; + tmpvar_58 = max (0.0, ((nl_37 * 0.6) + 0.4)); + float tmpvar_59; + tmpvar_59 = tmpvar_58; + nl_37 = tmpvar_59; + float tmpvar_60; + tmpvar_60 = nl_37; + o_41.nl[j_39] = tmpvar_60; + vec3 tmpvar_61; + tmpvar_61 = normalize ((lightDir_38 + viewDir_40)); + vec3 tmpvar_62; + tmpvar_62 = tmpvar_61; + h_35 = tmpvar_62; + float tmpvar_63; + tmpvar_63 = dot (v_33.normal, h_35); + float tmpvar_64; + tmpvar_64 = max (0.0, tmpvar_63); + float tmpvar_65; + tmpvar_65 = tmpvar_64; + nh_34 = tmpvar_65; + float tmpvar_66; + tmpvar_66 = nh_34; + o_41.nh[j_39] = tmpvar_66; + int _post_incdec_tmp_67; + _post_incdec_tmp_67 = j_39; + int tmpvar_68; + tmpvar_68 = (j_39 + 1); + j_39 = tmpvar_68; + }; + vec3 tmpvar_69; + tmpvar_69 = vec3(v_33.color.w); + vec3 tmpvar_70; + tmpvar_70 = tmpvar_69; + o_41.color = tmpvar_70; + return o_41; +} + +void main () +{ + appdata_full xlt_v_71; + v2f xl_retval_72; + vec4 tmpvar_73; + tmpvar_73 = gl_Vertex.xyzw; + vec4 tmpvar_74; + tmpvar_74 = tmpvar_73; + xlt_v_71.vertex = tmpvar_74; + vec4 tmpvar_75; + tmpvar_75 = TANGENT.xyzw; + vec4 tmpvar_76; + tmpvar_76 = tmpvar_75; + xlt_v_71.tangent = tmpvar_76; + vec3 tmpvar_77; + tmpvar_77 = gl_Normal.xyz; + vec3 tmpvar_78; + tmpvar_78 = tmpvar_77; + xlt_v_71.normal = tmpvar_78; + vec4 tmpvar_79; + tmpvar_79 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_80; + tmpvar_80 = tmpvar_79; + xlt_v_71.texcoord = tmpvar_80; + vec4 tmpvar_81; + tmpvar_81 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_82; + tmpvar_82 = tmpvar_81; + xlt_v_71.texcoord1 = tmpvar_82; + vec4 tmpvar_83; + tmpvar_83 = gl_Color.xyzw; + vec4 tmpvar_84; + tmpvar_84 = tmpvar_83; + xlt_v_71.color = tmpvar_84; + v2f tmpvar_85; + tmpvar_85 = vert (xlt_v_71); + v2f tmpvar_86; + tmpvar_86 = tmpvar_85; + xl_retval_72 = tmpvar_86; + vec4 tmpvar_87; + tmpvar_87 = xl_retval_72.pos.xyzw; + vec4 tmpvar_88; + tmpvar_88 = tmpvar_87; + gl_Position = tmpvar_88; + vec4 tmpvar_89; + tmpvar_89.zw = vec2(0.0, 0.0); + tmpvar_89.xy = xl_retval_72.uv.xy; + vec4 tmpvar_90; + tmpvar_90 = tmpvar_89; + gl_TexCoord[0] = tmpvar_90; + vec4 tmpvar_91; + tmpvar_91.w = 0.0; + tmpvar_91.xyz = xl_retval_72.color.xyz; + vec4 tmpvar_92; + tmpvar_92 = tmpvar_91; + gl_TexCoord[1] = tmpvar_92; + vec4 tmpvar_93; + tmpvar_93.w = 0.0; + tmpvar_93.xyz = xl_retval_72.backContrib.xyz; + vec4 tmpvar_94; + tmpvar_94 = tmpvar_93; + gl_TexCoord[2] = tmpvar_94; + vec4 tmpvar_95; + tmpvar_95.w = 0.0; + tmpvar_95.xyz = xl_retval_72.nl.xyz; + vec4 tmpvar_96; + tmpvar_96 = tmpvar_95; + gl_TexCoord[3] = tmpvar_96; + vec4 tmpvar_97; + tmpvar_97.w = 0.0; + tmpvar_97.xyz = xl_retval_72.nh.xyz; + vec4 tmpvar_98; + tmpvar_98 = tmpvar_97; + gl_TexCoord[4] = tmpvar_98; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-out.txt new file mode 100644 index 000000000..995514427 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-TreeCreatorLeavesRT-out.txt @@ -0,0 +1,72 @@ +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform float _TranslucencyViewDependency; +uniform vec3 _TerrainTreeLightDirections[4]; +void main () +{ + vec3 viewDir_1; + vec3 tmpvar_2; + vec3 tmpvar_3; + vec3 tmpvar_4; + float tmpvar_5; + tmpvar_5 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_6; + tmpvar_6.w = 0.0; + tmpvar_6.xyz = gl_Normal; + vec4 tmpvar_7; + tmpvar_7.zw = vec2(0.0, 0.0); + tmpvar_7.xy = gl_Normal.xy; + vec4 tmpvar_8; + tmpvar_8 = (gl_Vertex + ((tmpvar_7 * gl_ModelViewMatrixInverseTranspose) * tmpvar_5)); + vec3 tmpvar_9; + tmpvar_9 = mix (gl_Normal, normalize((tmpvar_6 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_5)); + vec4 tmpvar_10; + tmpvar_10.w = 1.0; + tmpvar_10.xyz = _WorldSpaceCameraPos; + viewDir_1 = normalize((((_World2Object * tmpvar_10).xyz * unity_Scale.w) - tmpvar_8.xyz)); + vec3 tmpvar_11; + tmpvar_11 = _TerrainTreeLightDirections[0]; + float tmpvar_12; + tmpvar_12 = dot (tmpvar_9, tmpvar_11); + tmpvar_2.x = (mix (clamp (-(tmpvar_12), 0.0, 1.0), clamp (dot (viewDir_1, -(tmpvar_11)), 0.0, 1.0), _TranslucencyViewDependency) * 2.0); + tmpvar_3.x = max (0.0, ((tmpvar_12 * 0.6) + 0.4)); + tmpvar_4.x = max (0.0, dot (tmpvar_9, normalize((tmpvar_11 + viewDir_1)))); + vec3 tmpvar_13; + tmpvar_13 = _TerrainTreeLightDirections[1]; + float tmpvar_14; + tmpvar_14 = dot (tmpvar_9, tmpvar_13); + tmpvar_2.y = (mix (clamp (-(tmpvar_14), 0.0, 1.0), clamp (dot (viewDir_1, -(tmpvar_13)), 0.0, 1.0), _TranslucencyViewDependency) * 2.0); + tmpvar_3.y = max (0.0, ((tmpvar_14 * 0.6) + 0.4)); + tmpvar_4.y = max (0.0, dot (tmpvar_9, normalize((tmpvar_13 + viewDir_1)))); + vec3 tmpvar_15; + tmpvar_15 = _TerrainTreeLightDirections[2]; + float tmpvar_16; + tmpvar_16 = dot (tmpvar_9, tmpvar_15); + tmpvar_2.z = (mix (clamp (-(tmpvar_16), 0.0, 1.0), clamp (dot (viewDir_1, -(tmpvar_15)), 0.0, 1.0), _TranslucencyViewDependency) * 2.0); + tmpvar_3.z = max (0.0, ((tmpvar_16 * 0.6) + 0.4)); + tmpvar_4.z = max (0.0, dot (tmpvar_9, normalize((tmpvar_15 + viewDir_1)))); + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_8); + vec4 tmpvar_17; + tmpvar_17.zw = vec2(0.0, 0.0); + tmpvar_17.xy = gl_MultiTexCoord0.xy; + gl_TexCoord[0] = tmpvar_17; + vec4 tmpvar_18; + tmpvar_18.w = 0.0; + tmpvar_18.xyz = gl_Color.www; + gl_TexCoord[1] = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19.w = 0.0; + tmpvar_19.xyz = tmpvar_2; + gl_TexCoord[2] = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = tmpvar_3; + gl_TexCoord[3] = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = tmpvar_4; + gl_TexCoord[4] = tmpvar_21; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-ir.txt new file mode 100644 index 000000000..64aebadd7 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-ir.txt @@ -0,0 +1,384 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +vec4 TriangleWave ( + in vec4 x_16 +) +{ + vec4 tmpvar_17; + tmpvar_17 = fract ((x_16 + 0.5)); + vec4 tmpvar_18; + tmpvar_18 = abs (((tmpvar_17 * 2.0) - 1.0)); + return tmpvar_18; +} + +vec4 SmoothCurve ( + in vec4 x_19 +) +{ + return ((x_19 * x_19) * (3.0 - (2.0 * x_19))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_20 +) +{ + vec4 tmpvar_21; + tmpvar_21 = TriangleWave (x_20); + vec4 tmpvar_22; + tmpvar_22 = SmoothCurve (tmpvar_21); + return tmpvar_22; +} + +vec4 AnimateVertex ( + in vec4 pos_23, + in vec3 normal_24, + in vec4 animParams_25 +) +{ + vec3 bend_26; + vec2 vWavesSum_27; + vec4 vWaves_28; + vec2 vWavesIn_29; + float fVtxPhase_30; + float fBranchPhase_31; + float fObjPhase_32; + float fBranchAmp_33; + float fDetailAmp_34; + float tmpvar_35; + tmpvar_35 = 0.1; + fDetailAmp_34 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.3; + fBranchAmp_33 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + fObjPhase_32 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = (fObjPhase_32 + animParams_25.x); + fBranchPhase_31 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = vec3((animParams_25.y + fBranchPhase_31)); + float tmpvar_41; + tmpvar_41 = dot (pos_23.xyz, tmpvar_40); + float tmpvar_42; + tmpvar_42 = tmpvar_41; + fVtxPhase_30 = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43.x = fVtxPhase_30; + tmpvar_43.y = fBranchPhase_31; + vec2 tmpvar_44; + tmpvar_44 = (_TimeX + tmpvar_43); + vWavesIn_29 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = fract ((vWavesIn_29.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_46; + tmpvar_46 = ((tmpvar_45 * 2.0) - 1.0); + vWaves_28 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = SmoothTriangleWave (vWaves_28); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + vWaves_28 = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = (vWaves_28.xz + vWaves_28.yw); + vWavesSum_27 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = ((animParams_25.y * fDetailAmp_34) * normal_24.xyz); + bend_26 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = (animParams_25.w * fBranchAmp_33); + bend_26.y = vec2(tmpvar_51).y; + vec3 tmpvar_52; + tmpvar_52 = (pos_23.xyz + (((vWavesSum_27.xyx * bend_26) + ((_Wind.xyz * vWavesSum_27.y) * animParams_25.w)) * _Wind.w)); + pos_23.xyz = tmpvar_52.xyz.xyz; + vec3 tmpvar_53; + tmpvar_53 = (pos_23.xyz + (animParams_25.z * _Wind.xyz)); + pos_23.xyz = tmpvar_53.xyz.xyz; + return pos_23; +} + +void TreeVertBark ( + inout appdata_full v_54 +) +{ + vec3 tmpvar_55; + tmpvar_55 = (v_54.vertex.xyz * _Scale.xyz); + v_54.vertex.xyz = tmpvar_55.xyz.xyz; + vec4 tmpvar_56; + tmpvar_56.xy = v_54.color.xy.xy; + tmpvar_56.zw = v_54.texcoord1.xy.xy; + vec4 tmpvar_57; + tmpvar_57 = AnimateVertex (v_54.vertex, v_54.normal, tmpvar_56); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + v_54.vertex = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = Squash (v_54.vertex); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + v_54.vertex = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.xyz = (v_54.color.w * _Color.xyz).xyz; + tmpvar_61.w = _Color.w; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + v_54.color = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = normalize (v_54.normal); + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + v_54.normal = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = normalize (v_54.tangent.xyz); + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + v_54.tangent.xyz = tmpvar_66.xyz.xyz; +} + +void PositionFog ( + in vec4 v_67, + out vec4 pos_68, + out float fog_69 +) +{ + vec4 tmpvar_70; + tmpvar_70 = (gl_ModelViewProjectionMatrix * v_67); + pos_68 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = pos_68.z; + fog_69 = tmpvar_71; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_72 +) +{ + vec3 objSpaceCameraPos_73; + vec4 tmpvar_74; + tmpvar_74.w = 1.0; + tmpvar_74.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_75; + tmpvar_75 = ((_World2Object * tmpvar_74).xyz * unity_Scale.w); + objSpaceCameraPos_73 = tmpvar_75; + return (objSpaceCameraPos_73 - v_72.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_76 +) +{ + vec3 objSpaceLightPos_77; + vec3 tmpvar_78; + tmpvar_78 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_77 = tmpvar_78; + return objSpaceLightPos_77.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_79 +) +{ + mat3 rotation_80; + vec3 binormal_81; + v2f_surf o_82; + TreeVertBark (v_79); + PositionFog (v_79.vertex, o_82.pos, o_82.fog); + vec2 tmpvar_83; + tmpvar_83 = ((v_79.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_82.hip_pack0 = tmpvar_83.xy.xy; + vec4 tmpvar_84; + tmpvar_84 = v_79.color; + o_82.lop_color = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = cross (v_79.normal, v_79.tangent.xyz); + vec3 tmpvar_86; + tmpvar_86 = (tmpvar_85 * v_79.tangent.w); + binormal_81 = tmpvar_86; + mat3 tmpvar_87; + float tmpvar_88; + tmpvar_88 = v_79.tangent.x; + tmpvar_87[0].x = tmpvar_88; + float tmpvar_89; + tmpvar_89 = binormal_81.x; + tmpvar_87[0].y = tmpvar_89; + float tmpvar_90; + tmpvar_90 = v_79.normal.x; + tmpvar_87[0].z = tmpvar_90; + float tmpvar_91; + tmpvar_91 = v_79.tangent.y; + tmpvar_87[1].x = tmpvar_91; + float tmpvar_92; + tmpvar_92 = binormal_81.y; + tmpvar_87[1].y = tmpvar_92; + float tmpvar_93; + tmpvar_93 = v_79.normal.y; + tmpvar_87[1].z = tmpvar_93; + float tmpvar_94; + tmpvar_94 = v_79.tangent.z; + tmpvar_87[2].x = tmpvar_94; + float tmpvar_95; + tmpvar_95 = binormal_81.z; + tmpvar_87[2].y = tmpvar_95; + float tmpvar_96; + tmpvar_96 = v_79.normal.z; + tmpvar_87[2].z = tmpvar_96; + mat3 tmpvar_97; + tmpvar_97 = (tmpvar_87); + rotation_80 = (tmpvar_97); + vec3 tmpvar_98; + tmpvar_98 = ObjSpaceLightDir (v_79.vertex); + vec3 tmpvar_99; + tmpvar_99 = (rotation_80 * tmpvar_98); + o_82.lightDir = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = ObjSpaceViewDir (v_79.vertex); + vec3 tmpvar_101; + tmpvar_101 = (rotation_80 * tmpvar_100); + o_82.viewDir = tmpvar_101; + return o_82; +} + +void main () +{ + appdata_full xlt_v_102; + v2f_surf xl_retval_103; + vec4 tmpvar_104; + tmpvar_104 = gl_Vertex.xyzw; + vec4 tmpvar_105; + tmpvar_105 = tmpvar_104; + xlt_v_102.vertex = tmpvar_105; + vec4 tmpvar_106; + tmpvar_106 = TANGENT.xyzw; + vec4 tmpvar_107; + tmpvar_107 = tmpvar_106; + xlt_v_102.tangent = tmpvar_107; + vec3 tmpvar_108; + tmpvar_108 = gl_Normal.xyz; + vec3 tmpvar_109; + tmpvar_109 = tmpvar_108; + xlt_v_102.normal = tmpvar_109; + vec4 tmpvar_110; + tmpvar_110 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_111; + tmpvar_111 = tmpvar_110; + xlt_v_102.texcoord = tmpvar_111; + vec4 tmpvar_112; + tmpvar_112 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_113; + tmpvar_113 = tmpvar_112; + xlt_v_102.texcoord1 = tmpvar_113; + vec4 tmpvar_114; + tmpvar_114 = gl_Color.xyzw; + vec4 tmpvar_115; + tmpvar_115 = tmpvar_114; + xlt_v_102.color = tmpvar_115; + v2f_surf tmpvar_116; + tmpvar_116 = vert_surf (xlt_v_102); + v2f_surf tmpvar_117; + tmpvar_117 = tmpvar_116; + xl_retval_103 = tmpvar_117; + vec4 tmpvar_118; + tmpvar_118 = xl_retval_103.pos.xyzw; + vec4 tmpvar_119; + tmpvar_119 = tmpvar_118; + gl_Position = tmpvar_119; + vec4 tmpvar_120; + tmpvar_120.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_120.x = xl_retval_103.fog; + vec4 tmpvar_121; + tmpvar_121 = tmpvar_120; + xlv_FOG = tmpvar_121; + vec4 tmpvar_122; + tmpvar_122.zw = vec2(0.0, 0.0); + tmpvar_122.xy = xl_retval_103.hip_pack0.xy; + vec4 tmpvar_123; + tmpvar_123 = tmpvar_122; + gl_TexCoord[0] = tmpvar_123; + vec4 tmpvar_124; + tmpvar_124 = xl_retval_103.lop_color.xyzw; + vec4 tmpvar_125; + tmpvar_125 = tmpvar_124; + gl_FrontColor = tmpvar_125; + vec4 tmpvar_126; + tmpvar_126.w = 0.0; + tmpvar_126.xyz = xl_retval_103.lightDir.xyz; + vec4 tmpvar_127; + tmpvar_127 = tmpvar_126; + gl_TexCoord[1] = tmpvar_127; + vec4 tmpvar_128; + tmpvar_128.w = 0.0; + tmpvar_128.xyz = xl_retval_103.viewDir.xyz; + vec4 tmpvar_129; + tmpvar_129 = tmpvar_128; + gl_TexCoord[2] = tmpvar_129; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-out.txt new file mode 100644 index 000000000..7bcd691da --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader-out.txt @@ -0,0 +1,91 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_1.w = gl_Vertex.w; + tmpvar_2.w = TANGENT.w; + tmpvar_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 pos_3; + pos_3.w = tmpvar_1.w; + vec3 bend_4; + float tmpvar_5; + tmpvar_5 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_6; + tmpvar_6.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_5))); + tmpvar_6.y = tmpvar_5; + vec4 tmpvar_7; + tmpvar_7 = abs(((fract((((fract(((_TimeX + tmpvar_6).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_8; + tmpvar_8 = ((tmpvar_7 * tmpvar_7) * (3.0 - (2.0 * tmpvar_7))); + vec2 tmpvar_9; + tmpvar_9 = (tmpvar_8.xz + tmpvar_8.yw); + bend_4.xz = ((gl_Color.y * 0.1) * gl_Normal).xz; + bend_4.y = (gl_MultiTexCoord1.y * 0.3); + pos_3.xyz = (tmpvar_1.xyz + (((tmpvar_9.xyx * bend_4) + ((_Wind.xyz * tmpvar_9.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_3.xyz = (pos_3.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_10; + tmpvar_10.xz = vec2(0.0, 0.0); + tmpvar_10.y = _SquashPlaneNormal.w; + vec3 tmpvar_11; + tmpvar_11 = mix ((pos_3.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_10 - pos_3.xyz)) * _SquashPlaneNormal.xyz)), pos_3.xyz, vec3(_SquashAmount)); + vec4 tmpvar_12; + tmpvar_12.w = 1.0; + tmpvar_12.xyz = tmpvar_11; + tmpvar_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13.xyz = (gl_Color.w * _Color.xyz); + tmpvar_13.w = _Color.w; + vec3 tmpvar_14; + tmpvar_14 = normalize(gl_Normal); + tmpvar_2.xyz = normalize(TANGENT.xyz); + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * tmpvar_12); + vec3 tmpvar_16; + tmpvar_16 = (((tmpvar_14.yzx * tmpvar_2.zxy) - (tmpvar_14.zxy * tmpvar_2.yzx)) * TANGENT.w); + mat3 tmpvar_17; + tmpvar_17[0].x = tmpvar_2.x; + tmpvar_17[0].y = tmpvar_16.x; + tmpvar_17[0].z = tmpvar_14.x; + tmpvar_17[1].x = tmpvar_2.y; + tmpvar_17[1].y = tmpvar_16.y; + tmpvar_17[1].z = tmpvar_14.y; + tmpvar_17[2].x = tmpvar_2.z; + tmpvar_17[2].y = tmpvar_16.z; + tmpvar_17[2].z = tmpvar_14.z; + vec4 tmpvar_18; + tmpvar_18.w = 1.0; + tmpvar_18.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_15; + vec4 tmpvar_19; + tmpvar_19.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_19.x = tmpvar_15.z; + xlv_FOG = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_20; + gl_FrontColor = tmpvar_13; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = (tmpvar_17 * (_World2Object * _WorldSpaceLightPos0).xyz); + gl_TexCoord[1] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (tmpvar_17 * (((_World2Object * tmpvar_18).xyz * unity_Scale.w) - tmpvar_11)); + gl_TexCoord[2] = tmpvar_22; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Bark_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-ir.txt new file mode 100644 index 000000000..2a8f700e8 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-ir.txt @@ -0,0 +1,395 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +vec4 TriangleWave ( + in vec4 x_16 +) +{ + vec4 tmpvar_17; + tmpvar_17 = fract ((x_16 + 0.5)); + vec4 tmpvar_18; + tmpvar_18 = abs (((tmpvar_17 * 2.0) - 1.0)); + return tmpvar_18; +} + +vec4 SmoothCurve ( + in vec4 x_19 +) +{ + return ((x_19 * x_19) * (3.0 - (2.0 * x_19))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_20 +) +{ + vec4 tmpvar_21; + tmpvar_21 = TriangleWave (x_20); + vec4 tmpvar_22; + tmpvar_22 = SmoothCurve (tmpvar_21); + return tmpvar_22; +} + +vec4 AnimateVertex ( + in vec4 pos_23, + in vec3 normal_24, + in vec4 animParams_25 +) +{ + vec3 bend_26; + vec2 vWavesSum_27; + vec4 vWaves_28; + vec2 vWavesIn_29; + float fVtxPhase_30; + float fBranchPhase_31; + float fObjPhase_32; + float fBranchAmp_33; + float fDetailAmp_34; + float tmpvar_35; + tmpvar_35 = 0.1; + fDetailAmp_34 = tmpvar_35; + float tmpvar_36; + tmpvar_36 = 0.3; + fBranchAmp_33 = tmpvar_36; + float tmpvar_37; + tmpvar_37 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_38; + tmpvar_38 = tmpvar_37; + fObjPhase_32 = tmpvar_38; + float tmpvar_39; + tmpvar_39 = (fObjPhase_32 + animParams_25.x); + fBranchPhase_31 = tmpvar_39; + vec3 tmpvar_40; + tmpvar_40 = vec3((animParams_25.y + fBranchPhase_31)); + float tmpvar_41; + tmpvar_41 = dot (pos_23.xyz, tmpvar_40); + float tmpvar_42; + tmpvar_42 = tmpvar_41; + fVtxPhase_30 = tmpvar_42; + vec2 tmpvar_43; + tmpvar_43.x = fVtxPhase_30; + tmpvar_43.y = fBranchPhase_31; + vec2 tmpvar_44; + tmpvar_44 = (_TimeX + tmpvar_43); + vWavesIn_29 = tmpvar_44; + vec4 tmpvar_45; + tmpvar_45 = fract ((vWavesIn_29.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_46; + tmpvar_46 = ((tmpvar_45 * 2.0) - 1.0); + vWaves_28 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47 = SmoothTriangleWave (vWaves_28); + vec4 tmpvar_48; + tmpvar_48 = tmpvar_47; + vWaves_28 = tmpvar_48; + vec2 tmpvar_49; + tmpvar_49 = (vWaves_28.xz + vWaves_28.yw); + vWavesSum_27 = tmpvar_49; + vec3 tmpvar_50; + tmpvar_50 = ((animParams_25.y * fDetailAmp_34) * normal_24.xyz); + bend_26 = tmpvar_50; + float tmpvar_51; + tmpvar_51 = (animParams_25.w * fBranchAmp_33); + bend_26.y = vec2(tmpvar_51).y; + vec3 tmpvar_52; + tmpvar_52 = (pos_23.xyz + (((vWavesSum_27.xyx * bend_26) + ((_Wind.xyz * vWavesSum_27.y) * animParams_25.w)) * _Wind.w)); + pos_23.xyz = tmpvar_52.xyz.xyz; + vec3 tmpvar_53; + tmpvar_53 = (pos_23.xyz + (animParams_25.z * _Wind.xyz)); + pos_23.xyz = tmpvar_53.xyz.xyz; + return pos_23; +} + +void TreeVertBark ( + inout appdata_full v_54 +) +{ + vec3 tmpvar_55; + tmpvar_55 = (v_54.vertex.xyz * _Scale.xyz); + v_54.vertex.xyz = tmpvar_55.xyz.xyz; + vec4 tmpvar_56; + tmpvar_56.xy = v_54.color.xy.xy; + tmpvar_56.zw = v_54.texcoord1.xy.xy; + vec4 tmpvar_57; + tmpvar_57 = AnimateVertex (v_54.vertex, v_54.normal, tmpvar_56); + vec4 tmpvar_58; + tmpvar_58 = tmpvar_57; + v_54.vertex = tmpvar_58; + vec4 tmpvar_59; + tmpvar_59 = Squash (v_54.vertex); + vec4 tmpvar_60; + tmpvar_60 = tmpvar_59; + v_54.vertex = tmpvar_60; + vec4 tmpvar_61; + tmpvar_61.xyz = (v_54.color.w * _Color.xyz).xyz; + tmpvar_61.w = _Color.w; + vec4 tmpvar_62; + tmpvar_62 = tmpvar_61; + v_54.color = tmpvar_62; + vec3 tmpvar_63; + tmpvar_63 = normalize (v_54.normal); + vec3 tmpvar_64; + tmpvar_64 = tmpvar_63; + v_54.normal = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = normalize (v_54.tangent.xyz); + vec3 tmpvar_66; + tmpvar_66 = tmpvar_65; + v_54.tangent.xyz = tmpvar_66.xyz.xyz; +} + +void PositionFog ( + in vec4 v_67, + out vec4 pos_68, + out float fog_69 +) +{ + vec4 tmpvar_70; + tmpvar_70 = (gl_ModelViewProjectionMatrix * v_67); + pos_68 = tmpvar_70; + float tmpvar_71; + tmpvar_71 = pos_68.z; + fog_69 = tmpvar_71; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_72 +) +{ + vec3 objSpaceCameraPos_73; + vec4 tmpvar_74; + tmpvar_74.w = 1.0; + tmpvar_74.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_75; + tmpvar_75 = ((_World2Object * tmpvar_74).xyz * unity_Scale.w); + objSpaceCameraPos_73 = tmpvar_75; + return (objSpaceCameraPos_73 - v_72.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_76 +) +{ + vec3 objSpaceLightPos_77; + vec3 tmpvar_78; + tmpvar_78 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_77 = tmpvar_78; + return ((objSpaceLightPos_77.xyz * unity_Scale.w) - v_76.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_79 +) +{ + mat3 rotation_80; + vec3 binormal_81; + v2f_surf o_82; + TreeVertBark (v_79); + PositionFog (v_79.vertex, o_82.pos, o_82.fog); + vec2 tmpvar_83; + tmpvar_83 = ((v_79.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_82.hip_pack0 = tmpvar_83.xy.xy; + vec4 tmpvar_84; + tmpvar_84 = v_79.color; + o_82.lop_color = tmpvar_84; + vec3 tmpvar_85; + tmpvar_85 = cross (v_79.normal, v_79.tangent.xyz); + vec3 tmpvar_86; + tmpvar_86 = (tmpvar_85 * v_79.tangent.w); + binormal_81 = tmpvar_86; + mat3 tmpvar_87; + float tmpvar_88; + tmpvar_88 = v_79.tangent.x; + tmpvar_87[0].x = tmpvar_88; + float tmpvar_89; + tmpvar_89 = binormal_81.x; + tmpvar_87[0].y = tmpvar_89; + float tmpvar_90; + tmpvar_90 = v_79.normal.x; + tmpvar_87[0].z = tmpvar_90; + float tmpvar_91; + tmpvar_91 = v_79.tangent.y; + tmpvar_87[1].x = tmpvar_91; + float tmpvar_92; + tmpvar_92 = binormal_81.y; + tmpvar_87[1].y = tmpvar_92; + float tmpvar_93; + tmpvar_93 = v_79.normal.y; + tmpvar_87[1].z = tmpvar_93; + float tmpvar_94; + tmpvar_94 = v_79.tangent.z; + tmpvar_87[2].x = tmpvar_94; + float tmpvar_95; + tmpvar_95 = binormal_81.z; + tmpvar_87[2].y = tmpvar_95; + float tmpvar_96; + tmpvar_96 = v_79.normal.z; + tmpvar_87[2].z = tmpvar_96; + mat3 tmpvar_97; + tmpvar_97 = (tmpvar_87); + rotation_80 = (tmpvar_97); + vec3 tmpvar_98; + tmpvar_98 = ObjSpaceLightDir (v_79.vertex); + vec3 tmpvar_99; + tmpvar_99 = (rotation_80 * tmpvar_98); + o_82.lightDir = tmpvar_99; + vec3 tmpvar_100; + tmpvar_100 = ObjSpaceViewDir (v_79.vertex); + vec3 tmpvar_101; + tmpvar_101 = (rotation_80 * tmpvar_100); + o_82.viewDir = tmpvar_101; + vec3 tmpvar_102; + tmpvar_102 = (_LightMatrix0 * (_Object2World * v_79.vertex)).xyz; + o_82._LightCoord = tmpvar_102; + return o_82; +} + +void main () +{ + appdata_full xlt_v_103; + v2f_surf xl_retval_104; + vec4 tmpvar_105; + tmpvar_105 = gl_Vertex.xyzw; + vec4 tmpvar_106; + tmpvar_106 = tmpvar_105; + xlt_v_103.vertex = tmpvar_106; + vec4 tmpvar_107; + tmpvar_107 = TANGENT.xyzw; + vec4 tmpvar_108; + tmpvar_108 = tmpvar_107; + xlt_v_103.tangent = tmpvar_108; + vec3 tmpvar_109; + tmpvar_109 = gl_Normal.xyz; + vec3 tmpvar_110; + tmpvar_110 = tmpvar_109; + xlt_v_103.normal = tmpvar_110; + vec4 tmpvar_111; + tmpvar_111 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_v_103.texcoord = tmpvar_112; + vec4 tmpvar_113; + tmpvar_113 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_v_103.texcoord1 = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115 = gl_Color.xyzw; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_v_103.color = tmpvar_116; + v2f_surf tmpvar_117; + tmpvar_117 = vert_surf (xlt_v_103); + v2f_surf tmpvar_118; + tmpvar_118 = tmpvar_117; + xl_retval_104 = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = xl_retval_104.pos.xyzw; + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + gl_Position = tmpvar_120; + vec4 tmpvar_121; + tmpvar_121.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_121.x = xl_retval_104.fog; + vec4 tmpvar_122; + tmpvar_122 = tmpvar_121; + xlv_FOG = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123.zw = vec2(0.0, 0.0); + tmpvar_123.xy = xl_retval_104.hip_pack0.xy; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + gl_TexCoord[0] = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125 = xl_retval_104.lop_color.xyzw; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_FrontColor = tmpvar_126; + vec4 tmpvar_127; + tmpvar_127.w = 0.0; + tmpvar_127.xyz = xl_retval_104.lightDir.xyz; + vec4 tmpvar_128; + tmpvar_128 = tmpvar_127; + gl_TexCoord[1] = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129.w = 0.0; + tmpvar_129.xyz = xl_retval_104.viewDir.xyz; + vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + gl_TexCoord[2] = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131.w = 0.0; + tmpvar_131.xyz = xl_retval_104._LightCoord.xyz; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + gl_TexCoord[3] = tmpvar_132; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-out.txt new file mode 100644 index 000000000..d78cfb7c9 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Bark_Shader1-out.txt @@ -0,0 +1,96 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + tmpvar_1.w = gl_Vertex.w; + tmpvar_2.w = TANGENT.w; + tmpvar_1.xyz = (gl_Vertex.xyz * _Scale.xyz); + vec4 pos_3; + pos_3.w = tmpvar_1.w; + vec3 bend_4; + float tmpvar_5; + tmpvar_5 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_6; + tmpvar_6.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_5))); + tmpvar_6.y = tmpvar_5; + vec4 tmpvar_7; + tmpvar_7 = abs(((fract((((fract(((_TimeX + tmpvar_6).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_8; + tmpvar_8 = ((tmpvar_7 * tmpvar_7) * (3.0 - (2.0 * tmpvar_7))); + vec2 tmpvar_9; + tmpvar_9 = (tmpvar_8.xz + tmpvar_8.yw); + bend_4.xz = ((gl_Color.y * 0.1) * gl_Normal).xz; + bend_4.y = (gl_MultiTexCoord1.y * 0.3); + pos_3.xyz = (tmpvar_1.xyz + (((tmpvar_9.xyx * bend_4) + ((_Wind.xyz * tmpvar_9.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_3.xyz = (pos_3.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_10; + tmpvar_10.xz = vec2(0.0, 0.0); + tmpvar_10.y = _SquashPlaneNormal.w; + vec3 tmpvar_11; + tmpvar_11 = mix ((pos_3.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_10 - pos_3.xyz)) * _SquashPlaneNormal.xyz)), pos_3.xyz, vec3(_SquashAmount)); + vec4 tmpvar_12; + tmpvar_12.w = 1.0; + tmpvar_12.xyz = tmpvar_11; + tmpvar_1 = tmpvar_12; + vec4 tmpvar_13; + tmpvar_13.xyz = (gl_Color.w * _Color.xyz); + tmpvar_13.w = _Color.w; + vec3 tmpvar_14; + tmpvar_14 = normalize(gl_Normal); + tmpvar_2.xyz = normalize(TANGENT.xyz); + vec4 tmpvar_15; + tmpvar_15 = (gl_ModelViewProjectionMatrix * tmpvar_12); + vec3 tmpvar_16; + tmpvar_16 = (((tmpvar_14.yzx * tmpvar_2.zxy) - (tmpvar_14.zxy * tmpvar_2.yzx)) * TANGENT.w); + mat3 tmpvar_17; + tmpvar_17[0].x = tmpvar_2.x; + tmpvar_17[0].y = tmpvar_16.x; + tmpvar_17[0].z = tmpvar_14.x; + tmpvar_17[1].x = tmpvar_2.y; + tmpvar_17[1].y = tmpvar_16.y; + tmpvar_17[1].z = tmpvar_14.y; + tmpvar_17[2].x = tmpvar_2.z; + tmpvar_17[2].y = tmpvar_16.z; + tmpvar_17[2].z = tmpvar_14.z; + vec4 tmpvar_18; + tmpvar_18.w = 1.0; + tmpvar_18.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_15; + vec4 tmpvar_19; + tmpvar_19.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_19.x = tmpvar_15.z; + xlv_FOG = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_20; + gl_FrontColor = tmpvar_13; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = (tmpvar_17 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_11)); + gl_TexCoord[1] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.w = 0.0; + tmpvar_22.xyz = (tmpvar_17 * (((_World2Object * tmpvar_18).xyz * unity_Scale.w) - tmpvar_11)); + gl_TexCoord[2] = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23.w = 0.0; + tmpvar_23.xyz = (_LightMatrix0 * (_Object2World * tmpvar_12)).xyz; + gl_TexCoord[3] = tmpvar_23; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-ir.txt new file mode 100644 index 000000000..1f7782285 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-ir.txt @@ -0,0 +1,454 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + float fog; + vec2 hip_pack0; + vec4 lop_color; + vec3 lightDir; + vec3 viewDir; + vec3 _LightCoord; +}; +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void ExpandBillboard ( + in mat4 mat_16, + inout vec4 pos_17, + inout vec3 normal_18, + inout vec4 tangent_19 +) +{ + vec3 tanb_20; + vec3 norb_21; + float isBillboard_22; + float tmpvar_23; + tmpvar_23 = abs (tangent_19.w); + float tmpvar_24; + tmpvar_24 = (1.0 - tmpvar_23); + isBillboard_22 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.w = 0.0; + tmpvar_25.xyz = normal_18.xyz; + vec4 tmpvar_26; + tmpvar_26 = normalize ((tmpvar_25 * mat_16)); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26.xyz; + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + norb_21 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.yw = vec2(0.0, 0.0); + tmpvar_29.x = normal_18.z; + tmpvar_29.z = -(normal_18.x); + vec4 tmpvar_30; + tmpvar_30 = normalize ((tmpvar_29 * mat_16)); + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + tanb_20 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = (pos_17 + ((tangent_19 * mat_16) * isBillboard_22)); + pos_17 = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(isBillboard_22); + vec3 tmpvar_35; + tmpvar_35 = mix (normal_18, norb_21, tmpvar_34); + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + normal_18 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.w = -1.0; + tmpvar_37.xyz = tanb_20.xyz; + vec4 tmpvar_38; + tmpvar_38 = vec4(isBillboard_22); + vec4 tmpvar_39; + tmpvar_39 = mix (tangent_19, tmpvar_37, tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + tangent_19 = tmpvar_40; +} + +vec4 TriangleWave ( + in vec4 x_41 +) +{ + vec4 tmpvar_42; + tmpvar_42 = fract ((x_41 + 0.5)); + vec4 tmpvar_43; + tmpvar_43 = abs (((tmpvar_42 * 2.0) - 1.0)); + return tmpvar_43; +} + +vec4 SmoothCurve ( + in vec4 x_44 +) +{ + return ((x_44 * x_44) * (3.0 - (2.0 * x_44))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_45 +) +{ + vec4 tmpvar_46; + tmpvar_46 = TriangleWave (x_45); + vec4 tmpvar_47; + tmpvar_47 = SmoothCurve (tmpvar_46); + return tmpvar_47; +} + +vec4 AnimateVertex ( + in vec4 pos_48, + in vec3 normal_49, + in vec4 animParams_50 +) +{ + vec3 bend_51; + vec2 vWavesSum_52; + vec4 vWaves_53; + vec2 vWavesIn_54; + float fVtxPhase_55; + float fBranchPhase_56; + float fObjPhase_57; + float fBranchAmp_58; + float fDetailAmp_59; + float tmpvar_60; + tmpvar_60 = 0.1; + fDetailAmp_59 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.3; + fBranchAmp_58 = tmpvar_61; + float tmpvar_62; + tmpvar_62 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_63; + tmpvar_63 = tmpvar_62; + fObjPhase_57 = tmpvar_63; + float tmpvar_64; + tmpvar_64 = (fObjPhase_57 + animParams_50.x); + fBranchPhase_56 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = vec3((animParams_50.y + fBranchPhase_56)); + float tmpvar_66; + tmpvar_66 = dot (pos_48.xyz, tmpvar_65); + float tmpvar_67; + tmpvar_67 = tmpvar_66; + fVtxPhase_55 = tmpvar_67; + vec2 tmpvar_68; + tmpvar_68.x = fVtxPhase_55; + tmpvar_68.y = fBranchPhase_56; + vec2 tmpvar_69; + tmpvar_69 = (_TimeX + tmpvar_68); + vWavesIn_54 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = fract ((vWavesIn_54.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_71; + tmpvar_71 = ((tmpvar_70 * 2.0) - 1.0); + vWaves_53 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = SmoothTriangleWave (vWaves_53); + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + vWaves_53 = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = (vWaves_53.xz + vWaves_53.yw); + vWavesSum_52 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = ((animParams_50.y * fDetailAmp_59) * normal_49.xyz); + bend_51 = tmpvar_75; + float tmpvar_76; + tmpvar_76 = (animParams_50.w * fBranchAmp_58); + bend_51.y = vec2(tmpvar_76).y; + vec3 tmpvar_77; + tmpvar_77 = (pos_48.xyz + (((vWavesSum_52.xyx * bend_51) + ((_Wind.xyz * vWavesSum_52.y) * animParams_50.w)) * _Wind.w)); + pos_48.xyz = tmpvar_77.xyz.xyz; + vec3 tmpvar_78; + tmpvar_78 = (pos_48.xyz + (animParams_50.z * _Wind.xyz)); + pos_48.xyz = tmpvar_78.xyz.xyz; + return pos_48; +} + +void TreeVertLeaf ( + inout appdata_full v_79 +) +{ + ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v_79.vertex, v_79.normal, v_79.tangent); + vec3 tmpvar_80; + tmpvar_80 = (v_79.vertex.xyz * _Scale.xyz); + v_79.vertex.xyz = tmpvar_80.xyz.xyz; + vec4 tmpvar_81; + tmpvar_81.xy = v_79.color.xy.xy; + tmpvar_81.zw = v_79.texcoord1.xy.xy; + vec4 tmpvar_82; + tmpvar_82 = AnimateVertex (v_79.vertex, v_79.normal, tmpvar_81); + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + v_79.vertex = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = Squash (v_79.vertex); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + v_79.vertex = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86.xyz = (v_79.color.w * _Color.xyz).xyz; + tmpvar_86.w = _Color.w; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + v_79.color = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = normalize (v_79.normal); + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88; + v_79.normal = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = normalize (v_79.tangent.xyz); + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + v_79.tangent.xyz = tmpvar_91.xyz.xyz; +} + +void PositionFog ( + in vec4 v_92, + out vec4 pos_93, + out float fog_94 +) +{ + vec4 tmpvar_95; + tmpvar_95 = (gl_ModelViewProjectionMatrix * v_92); + pos_93 = tmpvar_95; + float tmpvar_96; + tmpvar_96 = pos_93.z; + fog_94 = tmpvar_96; +} + +vec3 ObjSpaceViewDir ( + in vec4 v_97 +) +{ + vec3 objSpaceCameraPos_98; + vec4 tmpvar_99; + tmpvar_99.w = 1.0; + tmpvar_99.xyz = _WorldSpaceCameraPos.xyz.xyz; + vec3 tmpvar_100; + tmpvar_100 = ((_World2Object * tmpvar_99).xyz * unity_Scale.w); + objSpaceCameraPos_98 = tmpvar_100; + return (objSpaceCameraPos_98 - v_97.xyz); +} + +vec3 ObjSpaceLightDir ( + in vec4 v_101 +) +{ + vec3 objSpaceLightPos_102; + vec3 tmpvar_103; + tmpvar_103 = (_World2Object * _WorldSpaceLightPos0).xyz; + objSpaceLightPos_102 = tmpvar_103; + return ((objSpaceLightPos_102.xyz * unity_Scale.w) - v_101.xyz); +} + +v2f_surf vert_surf ( + in appdata_full v_104 +) +{ + mat3 rotation_105; + vec3 binormal_106; + v2f_surf o_107; + TreeVertLeaf (v_104); + PositionFog (v_104.vertex, o_107.pos, o_107.fog); + vec2 tmpvar_108; + tmpvar_108 = ((v_104.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_107.hip_pack0 = tmpvar_108.xy.xy; + vec4 tmpvar_109; + tmpvar_109 = v_104.color; + o_107.lop_color = tmpvar_109; + vec3 tmpvar_110; + tmpvar_110 = cross (v_104.normal, v_104.tangent.xyz); + vec3 tmpvar_111; + tmpvar_111 = (tmpvar_110 * v_104.tangent.w); + binormal_106 = tmpvar_111; + mat3 tmpvar_112; + float tmpvar_113; + tmpvar_113 = v_104.tangent.x; + tmpvar_112[0].x = tmpvar_113; + float tmpvar_114; + tmpvar_114 = binormal_106.x; + tmpvar_112[0].y = tmpvar_114; + float tmpvar_115; + tmpvar_115 = v_104.normal.x; + tmpvar_112[0].z = tmpvar_115; + float tmpvar_116; + tmpvar_116 = v_104.tangent.y; + tmpvar_112[1].x = tmpvar_116; + float tmpvar_117; + tmpvar_117 = binormal_106.y; + tmpvar_112[1].y = tmpvar_117; + float tmpvar_118; + tmpvar_118 = v_104.normal.y; + tmpvar_112[1].z = tmpvar_118; + float tmpvar_119; + tmpvar_119 = v_104.tangent.z; + tmpvar_112[2].x = tmpvar_119; + float tmpvar_120; + tmpvar_120 = binormal_106.z; + tmpvar_112[2].y = tmpvar_120; + float tmpvar_121; + tmpvar_121 = v_104.normal.z; + tmpvar_112[2].z = tmpvar_121; + mat3 tmpvar_122; + tmpvar_122 = (tmpvar_112); + rotation_105 = (tmpvar_122); + vec3 tmpvar_123; + tmpvar_123 = ObjSpaceLightDir (v_104.vertex); + vec3 tmpvar_124; + tmpvar_124 = (rotation_105 * tmpvar_123); + o_107.lightDir = tmpvar_124; + vec3 tmpvar_125; + tmpvar_125 = ObjSpaceViewDir (v_104.vertex); + vec3 tmpvar_126; + tmpvar_126 = (rotation_105 * tmpvar_125); + o_107.viewDir = tmpvar_126; + vec3 tmpvar_127; + tmpvar_127 = (_LightMatrix0 * (_Object2World * v_104.vertex)).xyz; + o_107._LightCoord = tmpvar_127; + return o_107; +} + +void main () +{ + appdata_full xlt_v_128; + v2f_surf xl_retval_129; + vec4 tmpvar_130; + tmpvar_130 = gl_Vertex.xyzw; + vec4 tmpvar_131; + tmpvar_131 = tmpvar_130; + xlt_v_128.vertex = tmpvar_131; + vec4 tmpvar_132; + tmpvar_132 = TANGENT.xyzw; + vec4 tmpvar_133; + tmpvar_133 = tmpvar_132; + xlt_v_128.tangent = tmpvar_133; + vec3 tmpvar_134; + tmpvar_134 = gl_Normal.xyz; + vec3 tmpvar_135; + tmpvar_135 = tmpvar_134; + xlt_v_128.normal = tmpvar_135; + vec4 tmpvar_136; + tmpvar_136 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_137; + tmpvar_137 = tmpvar_136; + xlt_v_128.texcoord = tmpvar_137; + vec4 tmpvar_138; + tmpvar_138 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_139; + tmpvar_139 = tmpvar_138; + xlt_v_128.texcoord1 = tmpvar_139; + vec4 tmpvar_140; + tmpvar_140 = gl_Color.xyzw; + vec4 tmpvar_141; + tmpvar_141 = tmpvar_140; + xlt_v_128.color = tmpvar_141; + v2f_surf tmpvar_142; + tmpvar_142 = vert_surf (xlt_v_128); + v2f_surf tmpvar_143; + tmpvar_143 = tmpvar_142; + xl_retval_129 = tmpvar_143; + vec4 tmpvar_144; + tmpvar_144 = xl_retval_129.pos.xyzw; + vec4 tmpvar_145; + tmpvar_145 = tmpvar_144; + gl_Position = tmpvar_145; + vec4 tmpvar_146; + tmpvar_146.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_146.x = xl_retval_129.fog; + vec4 tmpvar_147; + tmpvar_147 = tmpvar_146; + xlv_FOG = tmpvar_147; + vec4 tmpvar_148; + tmpvar_148.zw = vec2(0.0, 0.0); + tmpvar_148.xy = xl_retval_129.hip_pack0.xy; + vec4 tmpvar_149; + tmpvar_149 = tmpvar_148; + gl_TexCoord[0] = tmpvar_149; + vec4 tmpvar_150; + tmpvar_150 = xl_retval_129.lop_color.xyzw; + vec4 tmpvar_151; + tmpvar_151 = tmpvar_150; + gl_FrontColor = tmpvar_151; + vec4 tmpvar_152; + tmpvar_152.w = 0.0; + tmpvar_152.xyz = xl_retval_129.lightDir.xyz; + vec4 tmpvar_153; + tmpvar_153 = tmpvar_152; + gl_TexCoord[1] = tmpvar_153; + vec4 tmpvar_154; + tmpvar_154.w = 0.0; + tmpvar_154.xyz = xl_retval_129.viewDir.xyz; + vec4 tmpvar_155; + tmpvar_155 = tmpvar_154; + gl_TexCoord[2] = tmpvar_155; + vec4 tmpvar_156; + tmpvar_156.w = 0.0; + tmpvar_156.xyz = xl_retval_129._LightCoord.xyz; + vec4 tmpvar_157; + tmpvar_157 = tmpvar_156; + gl_TexCoord[3] = tmpvar_157; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-out.txt new file mode 100644 index 000000000..c9c5cf074 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader-out.txt @@ -0,0 +1,114 @@ +varying vec4 xlv_FOG; +attribute vec4 TANGENT; +uniform vec4 unity_Scale; +uniform vec4 _WorldSpaceLightPos0; +uniform vec3 _WorldSpaceCameraPos; +uniform mat4 _World2Object; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform mat4 _LightMatrix0; +uniform vec4 _Color; +void main () +{ + vec4 tmpvar_1; + vec4 tmpvar_2; + float tmpvar_3; + tmpvar_3 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = gl_Normal; + vec4 tmpvar_5; + tmpvar_5.yw = vec2(0.0, 0.0); + tmpvar_5.x = gl_Normal.z; + tmpvar_5.z = -(gl_Normal.x); + vec4 tmpvar_6; + tmpvar_6 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); + vec3 tmpvar_7; + tmpvar_7 = mix (gl_Normal, normalize((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3)); + vec4 tmpvar_8; + tmpvar_8.w = -1.0; + tmpvar_8.xyz = normalize((tmpvar_5 * gl_ModelViewMatrixInverseTranspose)).xyz; + vec4 tmpvar_9; + tmpvar_9 = mix (TANGENT, tmpvar_8, vec4(tmpvar_3)); + tmpvar_1.w = tmpvar_6.w; + tmpvar_2.w = tmpvar_9.w; + tmpvar_1.xyz = (tmpvar_6.xyz * _Scale.xyz); + vec4 pos_10; + pos_10.w = tmpvar_1.w; + vec3 bend_11; + float tmpvar_12; + tmpvar_12 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_13; + tmpvar_13.x = dot (tmpvar_1.xyz, vec3((gl_Color.y + tmpvar_12))); + tmpvar_13.y = tmpvar_12; + vec4 tmpvar_14; + tmpvar_14 = abs(((fract((((fract(((_TimeX + tmpvar_13).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_15; + tmpvar_15 = ((tmpvar_14 * tmpvar_14) * (3.0 - (2.0 * tmpvar_14))); + vec2 tmpvar_16; + tmpvar_16 = (tmpvar_15.xz + tmpvar_15.yw); + bend_11.xz = ((gl_Color.y * 0.1) * tmpvar_7).xz; + bend_11.y = (gl_MultiTexCoord1.y * 0.3); + pos_10.xyz = (tmpvar_1.xyz + (((tmpvar_16.xyx * bend_11) + ((_Wind.xyz * tmpvar_16.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_10.xyz = (pos_10.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_17; + tmpvar_17.xz = vec2(0.0, 0.0); + tmpvar_17.y = _SquashPlaneNormal.w; + vec3 tmpvar_18; + tmpvar_18 = mix ((pos_10.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_17 - pos_10.xyz)) * _SquashPlaneNormal.xyz)), pos_10.xyz, vec3(_SquashAmount)); + vec4 tmpvar_19; + tmpvar_19.w = 1.0; + tmpvar_19.xyz = tmpvar_18; + tmpvar_1 = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.xyz = (gl_Color.w * _Color.xyz); + tmpvar_20.w = _Color.w; + vec3 tmpvar_21; + tmpvar_21 = normalize(tmpvar_7); + tmpvar_2.xyz = normalize(tmpvar_9.xyz); + vec4 tmpvar_22; + tmpvar_22 = (gl_ModelViewProjectionMatrix * tmpvar_19); + vec3 tmpvar_23; + tmpvar_23 = (((tmpvar_21.yzx * tmpvar_2.zxy) - (tmpvar_21.zxy * tmpvar_2.yzx)) * tmpvar_9.w); + mat3 tmpvar_24; + tmpvar_24[0].x = tmpvar_2.x; + tmpvar_24[0].y = tmpvar_23.x; + tmpvar_24[0].z = tmpvar_21.x; + tmpvar_24[1].x = tmpvar_2.y; + tmpvar_24[1].y = tmpvar_23.y; + tmpvar_24[1].z = tmpvar_21.y; + tmpvar_24[2].x = tmpvar_2.z; + tmpvar_24[2].y = tmpvar_23.z; + tmpvar_24[2].z = tmpvar_21.z; + vec4 tmpvar_25; + tmpvar_25.w = 1.0; + tmpvar_25.xyz = _WorldSpaceCameraPos; + gl_Position = tmpvar_22; + vec4 tmpvar_26; + tmpvar_26.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_26.x = tmpvar_22.z; + xlv_FOG = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27.zw = vec2(0.0, 0.0); + tmpvar_27.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[0] = tmpvar_27; + gl_FrontColor = tmpvar_20; + vec4 tmpvar_28; + tmpvar_28.w = 0.0; + tmpvar_28.xyz = (tmpvar_24 * (((_World2Object * _WorldSpaceLightPos0).xyz * unity_Scale.w) - tmpvar_18)); + gl_TexCoord[1] = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.w = 0.0; + tmpvar_29.xyz = (tmpvar_24 * (((_World2Object * tmpvar_25).xyz * unity_Scale.w) - tmpvar_18)); + gl_TexCoord[2] = tmpvar_29; + vec4 tmpvar_30; + tmpvar_30.w = 0.0; + tmpvar_30.xyz = (_LightMatrix0 * (_Object2World * tmpvar_19)).xyz; + gl_TexCoord[3] = tmpvar_30; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Tree_Editor_Leaf_Shader1-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-ir.txt new file mode 100644 index 000000000..c54d37180 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-ir.txt @@ -0,0 +1,398 @@ +struct appdata_full { + vec4 vertex; + vec4 tangent; + vec3 normal; + vec4 texcoord; + vec4 texcoord1; + vec4 color; +}; +struct v2f_surf { + vec4 pos; + vec3 _ShadowCoord0; + vec3 _ShadowCoord1; + vec3 _ShadowCoord2; + vec3 _ShadowCoord3; + vec2 _ShadowZFade; + vec2 hip_pack0; + vec4 lop_color; +}; +attribute vec4 TANGENT; +uniform mat4 _World2Shadow3; +uniform mat4 _World2Shadow2; +uniform mat4 _World2Shadow1; +uniform mat4 _World2Shadow; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _LightShadowData; +uniform vec4 _Color; +vec4 Squash ( + in vec4 pos_1 +) +{ + vec3 planeNormal_2; + vec3 planePoint_3; + vec3 projectedVertex_4; + vec3 tmpvar_5; + tmpvar_5 = pos_1.xyz; + projectedVertex_4 = tmpvar_5; + vec3 tmpvar_6; + tmpvar_6.xz = vec2(0.0, 0.0); + tmpvar_6.y = _SquashPlaneNormal.w; + vec3 tmpvar_7; + tmpvar_7 = tmpvar_6; + planePoint_3 = tmpvar_7; + vec3 tmpvar_8; + tmpvar_8 = _SquashPlaneNormal.xyz; + planeNormal_2 = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = pos_1.xyz; + float tmpvar_10; + tmpvar_10 = dot (planeNormal_2, (planePoint_3 - tmpvar_9)); + vec3 tmpvar_11; + tmpvar_11 = (projectedVertex_4 + (tmpvar_10 * planeNormal_2)); + projectedVertex_4 = tmpvar_11; + vec3 tmpvar_12; + tmpvar_12 = vec3(_SquashAmount); + vec3 tmpvar_13; + tmpvar_13 = mix (projectedVertex_4, pos_1.xyz, tmpvar_12); + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = tmpvar_13.xyz; + vec4 tmpvar_15; + tmpvar_15 = tmpvar_14; + pos_1 = tmpvar_15; + return pos_1; +} + +void ExpandBillboard ( + in mat4 mat_16, + inout vec4 pos_17, + inout vec3 normal_18, + inout vec4 tangent_19 +) +{ + vec3 tanb_20; + vec3 norb_21; + float isBillboard_22; + float tmpvar_23; + tmpvar_23 = abs (tangent_19.w); + float tmpvar_24; + tmpvar_24 = (1.0 - tmpvar_23); + isBillboard_22 = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.w = 0.0; + tmpvar_25.xyz = normal_18.xyz; + vec4 tmpvar_26; + tmpvar_26 = normalize ((tmpvar_25 * mat_16)); + vec3 tmpvar_27; + tmpvar_27 = tmpvar_26.xyz; + vec3 tmpvar_28; + tmpvar_28 = tmpvar_27; + norb_21 = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.yw = vec2(0.0, 0.0); + tmpvar_29.x = normal_18.z; + tmpvar_29.z = -(normal_18.x); + vec4 tmpvar_30; + tmpvar_30 = normalize ((tmpvar_29 * mat_16)); + vec3 tmpvar_31; + tmpvar_31 = tmpvar_30.xyz; + vec3 tmpvar_32; + tmpvar_32 = tmpvar_31; + tanb_20 = tmpvar_32; + vec4 tmpvar_33; + tmpvar_33 = (pos_17 + ((tangent_19 * mat_16) * isBillboard_22)); + pos_17 = tmpvar_33; + vec3 tmpvar_34; + tmpvar_34 = vec3(isBillboard_22); + vec3 tmpvar_35; + tmpvar_35 = mix (normal_18, norb_21, tmpvar_34); + vec3 tmpvar_36; + tmpvar_36 = tmpvar_35; + normal_18 = tmpvar_36; + vec4 tmpvar_37; + tmpvar_37.w = -1.0; + tmpvar_37.xyz = tanb_20.xyz; + vec4 tmpvar_38; + tmpvar_38 = vec4(isBillboard_22); + vec4 tmpvar_39; + tmpvar_39 = mix (tangent_19, tmpvar_37, tmpvar_38); + vec4 tmpvar_40; + tmpvar_40 = tmpvar_39; + tangent_19 = tmpvar_40; +} + +vec4 TriangleWave ( + in vec4 x_41 +) +{ + vec4 tmpvar_42; + tmpvar_42 = fract ((x_41 + 0.5)); + vec4 tmpvar_43; + tmpvar_43 = abs (((tmpvar_42 * 2.0) - 1.0)); + return tmpvar_43; +} + +vec4 SmoothCurve ( + in vec4 x_44 +) +{ + return ((x_44 * x_44) * (3.0 - (2.0 * x_44))); +} + +vec4 SmoothTriangleWave ( + in vec4 x_45 +) +{ + vec4 tmpvar_46; + tmpvar_46 = TriangleWave (x_45); + vec4 tmpvar_47; + tmpvar_47 = SmoothCurve (tmpvar_46); + return tmpvar_47; +} + +vec4 AnimateVertex ( + in vec4 pos_48, + in vec3 normal_49, + in vec4 animParams_50 +) +{ + vec3 bend_51; + vec2 vWavesSum_52; + vec4 vWaves_53; + vec2 vWavesIn_54; + float fVtxPhase_55; + float fBranchPhase_56; + float fObjPhase_57; + float fBranchAmp_58; + float fDetailAmp_59; + float tmpvar_60; + tmpvar_60 = 0.1; + fDetailAmp_59 = tmpvar_60; + float tmpvar_61; + tmpvar_61 = 0.3; + fBranchAmp_58 = tmpvar_61; + float tmpvar_62; + tmpvar_62 = dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)); + float tmpvar_63; + tmpvar_63 = tmpvar_62; + fObjPhase_57 = tmpvar_63; + float tmpvar_64; + tmpvar_64 = (fObjPhase_57 + animParams_50.x); + fBranchPhase_56 = tmpvar_64; + vec3 tmpvar_65; + tmpvar_65 = vec3((animParams_50.y + fBranchPhase_56)); + float tmpvar_66; + tmpvar_66 = dot (pos_48.xyz, tmpvar_65); + float tmpvar_67; + tmpvar_67 = tmpvar_66; + fVtxPhase_55 = tmpvar_67; + vec2 tmpvar_68; + tmpvar_68.x = fVtxPhase_55; + tmpvar_68.y = fBranchPhase_56; + vec2 tmpvar_69; + tmpvar_69 = (_TimeX + tmpvar_68); + vWavesIn_54 = tmpvar_69; + vec4 tmpvar_70; + tmpvar_70 = fract ((vWavesIn_54.xxyy * vec4(1.975, 0.793, 0.375, 0.193))); + vec4 tmpvar_71; + tmpvar_71 = ((tmpvar_70 * 2.0) - 1.0); + vWaves_53 = tmpvar_71; + vec4 tmpvar_72; + tmpvar_72 = SmoothTriangleWave (vWaves_53); + vec4 tmpvar_73; + tmpvar_73 = tmpvar_72; + vWaves_53 = tmpvar_73; + vec2 tmpvar_74; + tmpvar_74 = (vWaves_53.xz + vWaves_53.yw); + vWavesSum_52 = tmpvar_74; + vec3 tmpvar_75; + tmpvar_75 = ((animParams_50.y * fDetailAmp_59) * normal_49.xyz); + bend_51 = tmpvar_75; + float tmpvar_76; + tmpvar_76 = (animParams_50.w * fBranchAmp_58); + bend_51.y = vec2(tmpvar_76).y; + vec3 tmpvar_77; + tmpvar_77 = (pos_48.xyz + (((vWavesSum_52.xyx * bend_51) + ((_Wind.xyz * vWavesSum_52.y) * animParams_50.w)) * _Wind.w)); + pos_48.xyz = tmpvar_77.xyz.xyz; + vec3 tmpvar_78; + tmpvar_78 = (pos_48.xyz + (animParams_50.z * _Wind.xyz)); + pos_48.xyz = tmpvar_78.xyz.xyz; + return pos_48; +} + +void TreeVertLeaf ( + inout appdata_full v_79 +) +{ + ExpandBillboard (gl_ModelViewMatrixInverseTranspose, v_79.vertex, v_79.normal, v_79.tangent); + vec3 tmpvar_80; + tmpvar_80 = (v_79.vertex.xyz * _Scale.xyz); + v_79.vertex.xyz = tmpvar_80.xyz.xyz; + vec4 tmpvar_81; + tmpvar_81.xy = v_79.color.xy.xy; + tmpvar_81.zw = v_79.texcoord1.xy.xy; + vec4 tmpvar_82; + tmpvar_82 = AnimateVertex (v_79.vertex, v_79.normal, tmpvar_81); + vec4 tmpvar_83; + tmpvar_83 = tmpvar_82; + v_79.vertex = tmpvar_83; + vec4 tmpvar_84; + tmpvar_84 = Squash (v_79.vertex); + vec4 tmpvar_85; + tmpvar_85 = tmpvar_84; + v_79.vertex = tmpvar_85; + vec4 tmpvar_86; + tmpvar_86.xyz = (v_79.color.w * _Color.xyz).xyz; + tmpvar_86.w = _Color.w; + vec4 tmpvar_87; + tmpvar_87 = tmpvar_86; + v_79.color = tmpvar_87; + vec3 tmpvar_88; + tmpvar_88 = normalize (v_79.normal); + vec3 tmpvar_89; + tmpvar_89 = tmpvar_88; + v_79.normal = tmpvar_89; + vec3 tmpvar_90; + tmpvar_90 = normalize (v_79.tangent.xyz); + vec3 tmpvar_91; + tmpvar_91 = tmpvar_90; + v_79.tangent.xyz = tmpvar_91.xyz.xyz; +} + +v2f_surf vert_surf ( + in appdata_full v_92 +) +{ + vec4 wpos_93; + float z_94; + v2f_surf o_95; + TreeVertLeaf (v_92); + vec2 tmpvar_96; + tmpvar_96 = ((v_92.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_95.hip_pack0 = tmpvar_96.xy.xy; + vec4 tmpvar_97; + tmpvar_97 = v_92.color; + o_95.lop_color = tmpvar_97; + vec4 tmpvar_98; + tmpvar_98 = (gl_ModelViewProjectionMatrix * v_92.vertex); + o_95.pos = tmpvar_98; + float tmpvar_99; + tmpvar_99 = -((gl_ModelViewMatrix * v_92.vertex).z); + z_94 = tmpvar_99; + float tmpvar_100; + tmpvar_100 = z_94; + o_95._ShadowZFade.x = tmpvar_100; + float tmpvar_101; + tmpvar_101 = ((z_94 * _LightShadowData.z) + _LightShadowData.w); + o_95._ShadowZFade.y = vec2(tmpvar_101).y; + vec4 tmpvar_102; + tmpvar_102 = (_Object2World * v_92.vertex); + wpos_93 = tmpvar_102; + vec3 tmpvar_103; + tmpvar_103 = (_World2Shadow * wpos_93).xyz; + o_95._ShadowCoord0 = tmpvar_103; + vec3 tmpvar_104; + tmpvar_104 = (_World2Shadow1 * wpos_93).xyz; + o_95._ShadowCoord1 = tmpvar_104; + vec3 tmpvar_105; + tmpvar_105 = (_World2Shadow2 * wpos_93).xyz; + o_95._ShadowCoord2 = tmpvar_105; + vec3 tmpvar_106; + tmpvar_106 = (_World2Shadow3 * wpos_93).xyz; + o_95._ShadowCoord3 = tmpvar_106; + return o_95; +} + +void main () +{ + appdata_full xlt_v_107; + v2f_surf xl_retval_108; + vec4 tmpvar_109; + tmpvar_109 = gl_Vertex.xyzw; + vec4 tmpvar_110; + tmpvar_110 = tmpvar_109; + xlt_v_107.vertex = tmpvar_110; + vec4 tmpvar_111; + tmpvar_111 = TANGENT.xyzw; + vec4 tmpvar_112; + tmpvar_112 = tmpvar_111; + xlt_v_107.tangent = tmpvar_112; + vec3 tmpvar_113; + tmpvar_113 = gl_Normal.xyz; + vec3 tmpvar_114; + tmpvar_114 = tmpvar_113; + xlt_v_107.normal = tmpvar_114; + vec4 tmpvar_115; + tmpvar_115 = gl_MultiTexCoord0.xyzw; + vec4 tmpvar_116; + tmpvar_116 = tmpvar_115; + xlt_v_107.texcoord = tmpvar_116; + vec4 tmpvar_117; + tmpvar_117 = gl_MultiTexCoord1.xyzw; + vec4 tmpvar_118; + tmpvar_118 = tmpvar_117; + xlt_v_107.texcoord1 = tmpvar_118; + vec4 tmpvar_119; + tmpvar_119 = gl_Color.xyzw; + vec4 tmpvar_120; + tmpvar_120 = tmpvar_119; + xlt_v_107.color = tmpvar_120; + v2f_surf tmpvar_121; + tmpvar_121 = vert_surf (xlt_v_107); + v2f_surf tmpvar_122; + tmpvar_122 = tmpvar_121; + xl_retval_108 = tmpvar_122; + vec4 tmpvar_123; + tmpvar_123 = xl_retval_108.pos.xyzw; + vec4 tmpvar_124; + tmpvar_124 = tmpvar_123; + gl_Position = tmpvar_124; + vec4 tmpvar_125; + tmpvar_125.w = 0.0; + tmpvar_125.xyz = xl_retval_108._ShadowCoord0.xyz; + vec4 tmpvar_126; + tmpvar_126 = tmpvar_125; + gl_TexCoord[0] = tmpvar_126; + vec4 tmpvar_127; + tmpvar_127.w = 0.0; + tmpvar_127.xyz = xl_retval_108._ShadowCoord1.xyz; + vec4 tmpvar_128; + tmpvar_128 = tmpvar_127; + gl_TexCoord[1] = tmpvar_128; + vec4 tmpvar_129; + tmpvar_129.w = 0.0; + tmpvar_129.xyz = xl_retval_108._ShadowCoord2.xyz; + vec4 tmpvar_130; + tmpvar_130 = tmpvar_129; + gl_TexCoord[2] = tmpvar_130; + vec4 tmpvar_131; + tmpvar_131.w = 0.0; + tmpvar_131.xyz = xl_retval_108._ShadowCoord3.xyz; + vec4 tmpvar_132; + tmpvar_132 = tmpvar_131; + gl_TexCoord[3] = tmpvar_132; + vec4 tmpvar_133; + tmpvar_133.zw = vec2(0.0, 0.0); + tmpvar_133.xy = xl_retval_108._ShadowZFade.xy; + vec4 tmpvar_134; + tmpvar_134 = tmpvar_133; + gl_TexCoord[4] = tmpvar_134; + vec4 tmpvar_135; + tmpvar_135.zw = vec2(0.0, 0.0); + tmpvar_135.xy = xl_retval_108.hip_pack0.xy; + vec4 tmpvar_136; + tmpvar_136 = tmpvar_135; + gl_TexCoord[5] = tmpvar_136; + vec4 tmpvar_137; + tmpvar_137 = xl_retval_108.lop_color.xyzw; + vec4 tmpvar_138; + tmpvar_138 = tmpvar_137; + gl_FrontColor = tmpvar_138; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-out.txt new file mode 100644 index 000000000..f2cd6ba73 --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Tree_Editor_Leaf_Shader1-out.txt @@ -0,0 +1,89 @@ +attribute vec4 TANGENT; +uniform mat4 _World2Shadow3; +uniform mat4 _World2Shadow2; +uniform mat4 _World2Shadow1; +uniform mat4 _World2Shadow; +uniform vec4 _Wind; +uniform float _TimeX; +uniform vec4 _SquashPlaneNormal; +uniform float _SquashAmount; +uniform vec4 _Scale; +uniform mat4 _Object2World; +uniform vec4 _MainTex_ST; +uniform vec4 _LightShadowData; +uniform vec4 _Color; +void main () +{ + vec2 tmpvar_1; + vec4 tmpvar_2; + float tmpvar_3; + tmpvar_3 = (1.0 - abs(TANGENT.w)); + vec4 tmpvar_4; + tmpvar_4.w = 0.0; + tmpvar_4.xyz = gl_Normal; + vec4 tmpvar_5; + tmpvar_5 = (gl_Vertex + ((TANGENT * gl_ModelViewMatrixInverseTranspose) * tmpvar_3)); + tmpvar_2.w = tmpvar_5.w; + tmpvar_2.xyz = (tmpvar_5.xyz * _Scale.xyz); + vec4 pos_6; + pos_6.w = tmpvar_2.w; + vec3 bend_7; + float tmpvar_8; + tmpvar_8 = (dot (_Object2World[3].xyz, vec3(1.0, 1.0, 1.0)) + gl_Color.x); + vec2 tmpvar_9; + tmpvar_9.x = dot (tmpvar_2.xyz, vec3((gl_Color.y + tmpvar_8))); + tmpvar_9.y = tmpvar_8; + vec4 tmpvar_10; + tmpvar_10 = abs(((fract((((fract(((_TimeX + tmpvar_9).xxyy * vec4(1.975, 0.793, 0.375, 0.193))) * 2.0) - 1.0) + 0.5)) * 2.0) - 1.0)); + vec4 tmpvar_11; + tmpvar_11 = ((tmpvar_10 * tmpvar_10) * (3.0 - (2.0 * tmpvar_10))); + vec2 tmpvar_12; + tmpvar_12 = (tmpvar_11.xz + tmpvar_11.yw); + bend_7.xz = ((gl_Color.y * 0.1) * mix (gl_Normal, normalize((tmpvar_4 * gl_ModelViewMatrixInverseTranspose)).xyz, vec3(tmpvar_3))).xz; + bend_7.y = (gl_MultiTexCoord1.y * 0.3); + pos_6.xyz = (tmpvar_2.xyz + (((tmpvar_12.xyx * bend_7) + ((_Wind.xyz * tmpvar_12.y) * gl_MultiTexCoord1.y)) * _Wind.w)); + pos_6.xyz = (pos_6.xyz + (gl_MultiTexCoord1.x * _Wind.xyz)); + vec3 tmpvar_13; + tmpvar_13.xz = vec2(0.0, 0.0); + tmpvar_13.y = _SquashPlaneNormal.w; + vec4 tmpvar_14; + tmpvar_14.w = 1.0; + tmpvar_14.xyz = mix ((pos_6.xyz + (dot (_SquashPlaneNormal.xyz, (tmpvar_13 - pos_6.xyz)) * _SquashPlaneNormal.xyz)), pos_6.xyz, vec3(_SquashAmount)); + tmpvar_2 = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15.xyz = (gl_Color.w * _Color.xyz); + tmpvar_15.w = _Color.w; + float tmpvar_16; + tmpvar_16 = -((gl_ModelViewMatrix * tmpvar_14).z); + tmpvar_1.x = tmpvar_16; + tmpvar_1.y = ((tmpvar_16 * _LightShadowData.z) + _LightShadowData.w); + vec4 tmpvar_17; + tmpvar_17 = (_Object2World * tmpvar_14); + gl_Position = (gl_ModelViewProjectionMatrix * tmpvar_14); + vec4 tmpvar_18; + tmpvar_18.w = 0.0; + tmpvar_18.xyz = (_World2Shadow * tmpvar_17).xyz; + gl_TexCoord[0] = tmpvar_18; + vec4 tmpvar_19; + tmpvar_19.w = 0.0; + tmpvar_19.xyz = (_World2Shadow1 * tmpvar_17).xyz; + gl_TexCoord[1] = tmpvar_19; + vec4 tmpvar_20; + tmpvar_20.w = 0.0; + tmpvar_20.xyz = (_World2Shadow2 * tmpvar_17).xyz; + gl_TexCoord[2] = tmpvar_20; + vec4 tmpvar_21; + tmpvar_21.w = 0.0; + tmpvar_21.xyz = (_World2Shadow3 * tmpvar_17).xyz; + gl_TexCoord[3] = tmpvar_21; + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 0.0); + tmpvar_22.xy = tmpvar_1; + gl_TexCoord[4] = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23.zw = vec2(0.0, 0.0); + tmpvar_23.xy = ((gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + gl_TexCoord[5] = tmpvar_23; + gl_FrontColor = tmpvar_15; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-in.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-in.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-in.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-in.txt diff --git a/3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-ir.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-ir.txt new file mode 100644 index 000000000..61026e91a --- /dev/null +++ b/3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-ir.txt @@ -0,0 +1,106 @@ +struct v2f { + vec4 pos; + float fog; + vec4 color; + vec2 texcoord; + vec3 normal; +}; +struct appdata_t { + vec4 vertex; + vec4 color; + vec3 normal; + vec2 texcoord; +}; +varying vec4 xlv_FOG; +uniform vec4 _MainTex_ST; +void PositionFog ( + in vec4 v_1, + out vec4 pos_2, + out float fog_3 +) +{ + vec4 tmpvar_4; + tmpvar_4 = (gl_ModelViewProjectionMatrix * v_1); + pos_2 = tmpvar_4; + float tmpvar_5; + tmpvar_5 = pos_2.z; + fog_3 = tmpvar_5; +} + +v2f vert ( + in appdata_t v_6 +) +{ + v2f o_7; + PositionFog (v_6.vertex, o_7.pos, o_7.fog); + vec4 tmpvar_8; + tmpvar_8 = v_6.color; + o_7.color = tmpvar_8; + vec3 tmpvar_9; + tmpvar_9 = v_6.normal; + o_7.normal = tmpvar_9; + vec2 tmpvar_10; + tmpvar_10 = ((v_6.texcoord.xy * _MainTex_ST.xy) + _MainTex_ST.zw); + o_7.texcoord = tmpvar_10; + return o_7; +} + +void main () +{ + appdata_t xlt_v_11; + v2f xl_retval_12; + vec4 tmpvar_13; + tmpvar_13 = gl_Vertex.xyzw; + vec4 tmpvar_14; + tmpvar_14 = tmpvar_13; + xlt_v_11.vertex = tmpvar_14; + vec4 tmpvar_15; + tmpvar_15 = gl_Color.xyzw; + vec4 tmpvar_16; + tmpvar_16 = tmpvar_15; + xlt_v_11.color = tmpvar_16; + vec3 tmpvar_17; + tmpvar_17 = gl_Normal.xyz; + vec3 tmpvar_18; + tmpvar_18 = tmpvar_17; + xlt_v_11.normal = tmpvar_18; + vec2 tmpvar_19; + tmpvar_19 = gl_MultiTexCoord0.xy; + vec2 tmpvar_20; + tmpvar_20 = tmpvar_19; + xlt_v_11.texcoord = tmpvar_20; + v2f tmpvar_21; + tmpvar_21 = vert (xlt_v_11); + v2f tmpvar_22; + tmpvar_22 = tmpvar_21; + xl_retval_12 = tmpvar_22; + vec4 tmpvar_23; + tmpvar_23 = xl_retval_12.pos.xyzw; + vec4 tmpvar_24; + tmpvar_24 = tmpvar_23; + gl_Position = tmpvar_24; + vec4 tmpvar_25; + tmpvar_25.yzw = vec3(0.0, 0.0, 0.0); + tmpvar_25.x = xl_retval_12.fog; + vec4 tmpvar_26; + tmpvar_26 = tmpvar_25; + xlv_FOG = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27 = xl_retval_12.color.xyzw; + vec4 tmpvar_28; + tmpvar_28 = tmpvar_27; + gl_FrontColor = tmpvar_28; + vec4 tmpvar_29; + tmpvar_29.zw = vec2(0.0, 0.0); + tmpvar_29.xy = xl_retval_12.texcoord.xy; + vec4 tmpvar_30; + tmpvar_30 = tmpvar_29; + gl_TexCoord[0] = tmpvar_30; + vec4 tmpvar_31; + tmpvar_31.w = 0.0; + tmpvar_31.xyz = xl_retval_12.normal.xyz; + vec4 tmpvar_32; + tmpvar_32 = tmpvar_31; + gl_TexCoord[1] = tmpvar_32; +} + diff --git a/3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-out.txt b/3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-out.txt similarity index 100% rename from 3rdparty/glsl-optimizer/tests/vertex/unity-Vertex_Colored-out.txt rename to 3rdparty/glsl-optimizer/tests/vertex/zun-Vertex_Colored-out.txt diff --git a/3rdparty/openctm/COMPILING.txt b/3rdparty/openctm/COMPILING.txt new file mode 100644 index 000000000..64d1975d7 --- /dev/null +++ b/3rdparty/openctm/COMPILING.txt @@ -0,0 +1,100 @@ +1. PREREQUISITES +================ + +In order to compile the OpenCTM shared library, all you need is a supported +compiler and it should compile right out of the box. + +In order to compile the entire OpenCTM package, including documentation and the +tools, there are some extra dependencies: + +- To build all the tools, you need GLUT, and for Un*x/X11 you also need + GTK+ 2.0 (Ubuntu: sudo apt-get install libgtk2.0-dev). + +- To build the documentation you need Doxygen (www.doxygen.org), a full + LaTeX installation (see TeX Live - http://www.tug.org/texlive/), and Groff + (Windows: http://gnuwin32.sourceforge.net/packages/groff.htm, + Mac OS X: preinstalled, Ubuntu: sudo apt-get install groff). + + +2. COMPILING +============ + +There are a few makefiles for different systems and compilers. Just pick the +one that fits your system, and run "make" on the corresponding file. Here are +a few specific instructions: + + +2.1 Windows, MinGW32 +-------------------- + +mingw32-make -f Makefile.mingw + + +2.2 Windows, MS Visual Studio (Express) 2008 +-------------------------------------------- + +nmake /f Makefile.msvc + + +2.3 Mac OS X +------------ + +make -f Makefile.macosx + + +2.4 Linux +--------- + +make -f Makefile.linux + + +2.5 OpenSolaris +--------------- + +gmake -f Makefile.linux + + +3. BUILD TARGETS +================ + +By default, the OpenCTM shared library and the OpenCTM tools are compiled when +make is run. To select what is built, use one of the following build targets +(just append it to the end of the make command line): + + openctm (the shared library) + toolset (the tools) + documentation (the HTML and PDF documentation) + all (openctm + toolset + documentation) + clean (clean all the built files - start from scratch) + +For instance, to just build the OpenCTM shared library under Windows with +MS Visual Studio, type: + + nmake /f Makefile.msvc openctm + + +4. INSTALLATION +=============== + +For Linux and Mac OS X, it is possible to make a system wide installation by +using the "install" build target. The installation process will install the +following: + + - OpenCTM shared library + - OpenCTM C/C++ headers (inlcude files) + - ctmconv and ctmviewer tools + - Man pages + +Just make sure that the Makefile contains the correct (and desired) +installation paths. Also, you need to have root privileges to make a system +wide installation. + +For instance, to compile and install OpenCTM under Ubuntu, do: + +make -f Makefile.linux +sudo make -f Makefile.linux install + +...and to compile and install OpenCTM under Mac OS X, do: + +make -f Makefile.macosx +sudo make -f Makefile.macosx install diff --git a/3rdparty/openctm/LICENSE.txt b/3rdparty/openctm/LICENSE.txt new file mode 100644 index 000000000..7a2d90b3d --- /dev/null +++ b/3rdparty/openctm/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2009-2010 Marcus Geelnard + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. diff --git a/3rdparty/openctm/Makefile.linux b/3rdparty/openctm/Makefile.linux new file mode 100644 index 000000000..9cdc37e82 --- /dev/null +++ b/3rdparty/openctm/Makefile.linux @@ -0,0 +1,65 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.linux +# Description: Top level makefile for Linux systems (should work on most +# Un*x-like systems with gcc, e.g. OpenSolaris). +############################################################################### +# Copyright (c) 2009 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +.phony: default all openctm toolset documentation install clean + +default: openctm toolset +all: openctm toolset documentation + +clean: + cd lib && $(MAKE) -f Makefile.linux clean && cd .. + cd tools && $(MAKE) -f Makefile.linux clean && cd .. + cd doc && $(MAKE) -f Makefile.linux clean && cd .. + +openctm: + cd lib && $(MAKE) -f Makefile.linux -j2 && cd .. + +toolset: + cd tools && $(MAKE) -f Makefile.linux -j2 && cd .. + +documentation: + cd doc && $(MAKE) -f Makefile.linux -j2 && cd .. + + +# Installation settings +LIBDIR = /usr/lib/ +INCDIR = /usr/local/include/ +BINDIR = /usr/local/bin/ +MAN1DIR = /usr/local/share/man/man1/ +CP = cp +MKDIR = mkdir -p + +install: + $(CP) lib/libopenctm.so $(LIBDIR) + $(CP) lib/openctm.h $(INCDIR) + $(CP) lib/openctmpp.h $(INCDIR) + $(CP) tools/ctmconv $(BINDIR) + $(CP) tools/ctmviewer $(BINDIR) + $(MKDIR) $(MAN1DIR) + $(CP) doc/ctmconv.1 $(MAN1DIR) + $(CP) doc/ctmviewer.1 $(MAN1DIR) diff --git a/3rdparty/openctm/Makefile.macosx b/3rdparty/openctm/Makefile.macosx new file mode 100644 index 000000000..d0b1844ae --- /dev/null +++ b/3rdparty/openctm/Makefile.macosx @@ -0,0 +1,64 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.macosx +# Description: Top level makefile for Mac OS X. +############################################################################### +# Copyright (c) 2009 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +.phony: default all openctm toolset documentation clean + +default: openctm toolset +all: openctm toolset documentation + +clean: + cd lib && $(MAKE) -f Makefile.macosx clean && cd .. + cd tools && $(MAKE) -f Makefile.macosx clean && cd .. + cd doc && $(MAKE) -f Makefile.macosx clean && cd .. + +openctm: + cd lib && $(MAKE) -f Makefile.macosx -j2 && cd .. + +toolset: + cd tools && $(MAKE) -f Makefile.macosx -j2 && cd .. + +documentation: + cd doc && $(MAKE) -f Makefile.macosx -j2 && cd .. + + +# Installation settings +LIBDIR = /usr/local/lib/ +INCDIR = /usr/local/include/ +BINDIR = /usr/local/bin/ +MAN1DIR = /usr/local/share/man/man1/ +CP = cp +MKDIR = mkdir -p + +install: + $(CP) lib/libopenctm.dylib $(LIBDIR) + $(CP) lib/openctm.h $(INCDIR) + $(CP) lib/openctmpp.h $(INCDIR) + $(CP) tools/ctmconv $(BINDIR) + $(CP) tools/ctmviewer $(BINDIR) + $(MKDIR) $(MAN1DIR) + $(CP) doc/ctmconv.1 $(MAN1DIR) + $(CP) doc/ctmviewer.1 $(MAN1DIR) diff --git a/3rdparty/openctm/Makefile.mingw b/3rdparty/openctm/Makefile.mingw new file mode 100644 index 000000000..e9265d8f0 --- /dev/null +++ b/3rdparty/openctm/Makefile.mingw @@ -0,0 +1,45 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.mingw +# Description: Top level makefile for Windows / MinGW32. +############################################################################### +# Copyright (c) 2009 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +.phony: default all openctm toolset documentation clean + +default: openctm toolset +all: openctm toolset documentation + +clean: + cd lib && $(MAKE) -f Makefile.mingw clean && cd .. + cd tools && $(MAKE) -f Makefile.mingw clean && cd .. + cd doc && $(MAKE) -f Makefile.win clean && cd .. + +openctm: + cd lib && $(MAKE) -f Makefile.mingw -j2 && cd .. + +toolset: + cd tools && $(MAKE) -f Makefile.mingw -j2 && cd .. + +documentation: + cd doc && $(MAKE) -f Makefile.win -j2 && cd .. diff --git a/3rdparty/openctm/Makefile.msvc b/3rdparty/openctm/Makefile.msvc new file mode 100644 index 000000000..13173ab09 --- /dev/null +++ b/3rdparty/openctm/Makefile.msvc @@ -0,0 +1,45 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.msvc +# Description: Top level makefile for Windows / MS Visual Studio 2008. +############################################################################### +# Copyright (c) 2009 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +.PHONY: default all openctm toolset documentation clean + +default: openctm toolset +all: openctm toolset documentation + +clean: + cd lib && $(MAKE) /nologo /f Makefile.msvc clean && cd .. + cd tools && $(MAKE) /nologo /f Makefile.msvc clean && cd .. + cd doc && $(MAKE) /nologo /f Makefile.win clean && cd .. + +openctm: + cd lib && $(MAKE) /nologo /f Makefile.msvc && cd .. + +toolset: + cd tools && $(MAKE) /nologo /f Makefile.msvc && cd .. + +documentation: + cd doc && $(MAKE) /nologo /f Makefile.win && cd .. diff --git a/3rdparty/openctm/README.txt b/3rdparty/openctm/README.txt new file mode 100644 index 000000000..c90571f99 --- /dev/null +++ b/3rdparty/openctm/README.txt @@ -0,0 +1,152 @@ +1. INTRODUCTION +=============== + +Welcome to OpenCTM! + +OpenCTM is a file format, a software library and a tool set for compression of +3D triangle meshes. The geometry is compressed to a fraction of comparable file +formats (3DS, STL, COLLADA, VRML...), and the format is easily accessible +through a simple, portable API. + +The library is written in portable C (C99), and should compile nicely on any +32/64-bit system regardless of endianity (big endian or little endian). + + +2. LICENSE +========== + +The OpenCTM API and the OpenCTM tools are released under the zlib/libpng +license (see LICENSE.txt). + +3. CREDITS +========== + +Many people have helped out in the development process of OpenCTM, with +valuable feedback, programming efforts, test models and conceptual ideas. +Also, OpenCTM relies heavily on many other open source projects. + +Here is an incomplete list of persons that deserve credit: + +- Igor Pavlov (LZMA library) +- Jonas Innala (COLLADA importer, Maya exporter plugin) +- Ilian Dinev (help with the OpenCTM file format design and the LWO loader) +- Lee Thomason (TinyXML) +- Diego Nehab (RPly - for loading PLY files) +- Lev Povalahev, Marcelo E. Magallon, Milan Ikits (GLEW) +- Thomas G. Lane, Guido Vollbeding (libjpeg) +- Jean-loup Gailly, Mark Adler (zlib) +- Daniel Karling (pnglite) + +During the development of OpenCTM, the following software has been used +extensively: + +- Ubuntu (www.ubuntu.com) +- Blender (www.blender.org) +- GCC (gcc.gnu.org) +- SciTE (www.scintilla.org/SciTE.html) +- Notepad++ (notepad-plus.sourceforge.net) +- Smultron (smultron.sourceforge.net) + +Legal notices: + +- This software is based in part on the work of the Independent JPEG Group. + + +4. CHANGES +========== + +v1.0.3 - 2010.01.15 +------------------- +- Added support for PNG format textures (ctmviewer). + +- Added support for LightWave LWO files (ctmconv and ctmviewer). + +- Added support for Geomview OFF files, e.g. as used by the Princeton Shape + Benchmark (ctmconv and ctmviewer). + +- Improved the OBJ file loader (ctmviewer and ctmconv). + +- Experimental support for VRML 2.0 files - export only (ctmconv and ctmviewer). + +- Made it possible to run ctmviewer without command line arguments. + +- Improved the normal calculation algorithm (ctmviewer and ctmconv). + +- Normals are no longer exported if no normals were present in the input file + (ctmviewer). + + +v1.0.2 - 2009.12.13 +------------------- +- Added an OpenCTM exporter plugin for Maya [Jonas Innala]. + +- Added the possiblity to save and load files from ctmviewer, effectively + turning it into a quick and simple converter tool (without all the options + in the ctmconv program, though). + +- Added a function to load texture files from ctmviewer. + +- Improved the camera control in ctmviewer (panning with the right mouse + button, zooming with the middle mouse button and the mouse wheel, feature + focusing by double clicking, Y/Z up axis selection and "fit to screen" + function). + +- Added a GUI dialog for showing errors in ctmviewer (this is especially useful + under Windows, where console output is disabeled). + +- Added an option for calculating the normals in ctmconv (if the input file + does not have normals). + +- Added options for turning off normals, texture coordinates and/or vertex + colors for the output file in ctmconv. + +- Added manuals for ctmviewer and ctmconv (man pages). + +- Added a "make install" build target for Mac OS X and Linux for simple system + wide installation (see COMPILING.txt). + +- NOTE: The Linux/X11 version of ctmviewer now reqires GTK+ 2.0. + + +v1.0.1 - 2009.11.15 +------------------- +- Notable reduction of the memory footprint by tuning of the LZMA compression + parameters. + +- Added a Wavefront OBJ file importer/exporter. + +- Some improvements to ctmviewer and ctmconv. + +- Some directory structure and build system cleanups. + + +v1.0 - 2009.11.09 +----------------- +- Added a COLLADA converter module to the ctmconv program [Jonas Innala]. + +- Added Python bindings and a demo Python program. + +- Improved the internal mesh integrity checking, to minimize the risk of invalid + data processing. + +- Improved the file format specification document. + + +v0.8 (beta) - 2009.09.14 +------------------------ +- Introduced a new API function for controlling the compression level + (ctmCompressionLevel), and set the default compression level to 5 (rather + than 9, which would eat a lot of memory, usally without much difference). + +- Changed the name "texture map" in the API to "UV map" (and all + corresponding constant and function names). This is more in line with + the nomenclature of most 3D authoring software, and avoids the confusion + with the term texture mapping in 3D hardware (which is not limited to + 2D UV mapping coordinates). + +- A few updates to the documentation. + + +v0.7 (beta) - 2009.08.29 +------------------------ +- This was the first public release of OpenCTM. diff --git a/3rdparty/openctm/bindings/delphi/OpenCTM.pas b/3rdparty/openctm/bindings/delphi/OpenCTM.pas new file mode 100644 index 000000000..bdbb5222e --- /dev/null +++ b/3rdparty/openctm/bindings/delphi/OpenCTM.pas @@ -0,0 +1,189 @@ +unit OpenCTM; +//------------------------------------------------------------------------------ +// Product: OpenCTM +// File: OpenCTM.pas +// Description: Delphi API bindings. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//------------------------------------------------------------------------------ + +interface + +//------------------------------------------------------------------------------ +// Types +//------------------------------------------------------------------------------ + +type + // Basic types + TCTMfloat = Single; + TCTMint = Integer; + TCTMuint = Cardinal; + TCTMcontext = Pointer; + TCTMenum = Cardinal; + + // Pointer types + PCTMfloat = ^TCTMfloat; + PCTMint = ^TCTMint; + PCTMuint = ^TCTMuint; + + // Callback function pointer types + TCTMreadfn = function (ABuf: Pointer; ACount: TCTMuint; AUserData: Pointer): TCTMuint; stdcall; + TCTMwritefn = function (ABuf: Pointer; ACount: TCTMuint; AUserData: Pointer): TCTMuint; stdcall; + + +//------------------------------------------------------------------------------ +// Constants +//------------------------------------------------------------------------------ + +const + CTM_API_VERSION = $00000100; + CTM_TRUE = 1; + CTM_FALSE = 0; + + // TCTMenum + CTM_NONE = $0000; + CTM_INVALID_CONTEXT = $0001; + CTM_INVALID_ARGUMENT = $0002; + CTM_INVALID_OPERATION = $0003; + CTM_INVALID_MESH = $0004; + CTM_OUT_OF_MEMORY = $0005; + CTM_FILE_ERROR = $0006; + CTM_BAD_FORMAT = $0007; + CTM_LZMA_ERROR = $0008; + CTM_INTERNAL_ERROR = $0009; + CTM_UNSUPPORTED_FORMAT_VERSION = $000A; + CTM_IMPORT = $0101; + CTM_EXPORT = $0102; + CTM_METHOD_RAW = $0201; + CTM_METHOD_MG1 = $0202; + CTM_METHOD_MG2 = $0203; + CTM_VERTEX_COUNT = $0301; + CTM_TRIANGLE_COUNT = $0302; + CTM_HAS_NORMALS = $0303; + CTM_UV_MAP_COUNT = $0304; + CTM_ATTRIB_MAP_COUNT = $0305; + CTM_VERTEX_PRECISION = $0306; + CTM_NORMAL_PRECISION = $0307; + CTM_COMPRESSION_METHOD = $0308; + CTM_FILE_COMMENT = $0309; + CTM_NAME = $0501; + CTM_FILE_NAME = $0502; + CTM_PRECISION = $0503; + CTM_INDICES = $0601; + CTM_VERTICES = $0602; + CTM_NORMALS = $0603; + CTM_UV_MAP_1 = $0700; + CTM_UV_MAP_2 = $0701; + CTM_UV_MAP_3 = $0702; + CTM_UV_MAP_4 = $0703; + CTM_UV_MAP_5 = $0704; + CTM_UV_MAP_6 = $0705; + CTM_UV_MAP_7 = $0706; + CTM_UV_MAP_8 = $0707; + CTM_ATTRIB_MAP_1 = $0800; + CTM_ATTRIB_MAP_2 = $0801; + CTM_ATTRIB_MAP_3 = $0802; + CTM_ATTRIB_MAP_4 = $0803; + CTM_ATTRIB_MAP_5 = $0804; + CTM_ATTRIB_MAP_6 = $0805; + CTM_ATTRIB_MAP_7 = $0806; + CTM_ATTRIB_MAP_8 = $0807; + + +//------------------------------------------------------------------------------ +// Function prototypes +//------------------------------------------------------------------------------ + +function ctmNewContext(AMode: TCTMenum): TCTMcontext; stdcall; +procedure ctmFreeContext(AContext: TCTMcontext); stdcall; +function ctmGetError(AContext: TCTMcontext): TCTMenum; stdcall; +function ctmErrorString(AError: TCTMenum): PChar; stdcall; +function ctmGetInteger(AContext: TCTMcontext; AProperty: TCTMenum): TCTMuint; stdcall; +function ctmGetFloat(AContext: TCTMcontext; AProperty: TCTMenum): TCTMfloat; stdcall; +function ctmGetIntegerArray(AContext: TCTMcontext; AProperty: TCTMenum): PCTMuint; stdcall; +function ctmGetFloatArray(AContext: TCTMcontext; AProperty: TCTMenum): PCTMfloat; stdcall; +function ctmGetNamedUVMap(AContext: TCTMcontext; AName: PChar): TCTMenum; stdcall; +function ctmGetUVMapString(AContext: TCTMcontext; AUVMap: TCTMenum; AProperty: TCTMenum): PChar; stdcall; +function ctmGetUVMapFloat(AContext: TCTMcontext; AUVMap: TCTMenum; AProperty: TCTMenum): TCTMfloat; stdcall; +function ctmGetNamedAttribMap(AContext: TCTMcontext; AName: PChar): TCTMenum; stdcall; +function ctmGetAttribMapString(AContext: TCTMcontext; AAttribMap: TCTMenum; AProperty: TCTMenum): PChar; stdcall; +function ctmGetAttribMapFloat(AContext: TCTMcontext; AAttribMap: TCTMenum; AProperty: TCTMenum): TCTMfloat; stdcall; +function ctmGetString(AContext: TCTMcontext; AProperty: TCTMenum): PChar; stdcall; +procedure ctmCompressionMethod(AContext: TCTMcontext; AMethod: TCTMenum); stdcall; +procedure ctmCompressionLevel(AContext: TCTMcontext; ALevel: TCTMuint); stdcall; +procedure ctmVertexPrecision(AContext: TCTMcontext; APrecision: TCTMfloat); stdcall; +procedure ctmVertexPrecisionRel(AContext: TCTMcontext; ARelPrecision: TCTMfloat); stdcall; +procedure ctmNormalPrecision(AContext: TCTMcontext; APrecision: TCTMfloat); stdcall; +procedure ctmUVCoordPrecision(AContext: TCTMcontext; AUVMap: TCTMenum; APrecision: TCTMfloat); stdcall; +procedure ctmAttribPrecision(AContext: TCTMcontext; AAttribMap: TCTMenum; APrecision: TCTMfloat); stdcall; +procedure ctmFileComment(AContext: TCTMcontext; AFileComment: PChar); stdcall; +procedure ctmDefineMesh(AContext: TCTMcontext; AVertices: PCTMfloat; AVertexCount: TCTMuint; AIndices: PCTMuint; ATriangleCount: TCTMuint; ANormals: PCTMfloat); stdcall; +function ctmAddUVMap(AContext: TCTMcontext; AUVCoords: PCTMfloat; AName: PChar; AFileName: PChar): TCTMenum; stdcall; +function ctmAddAttribMap(AContext: TCTMcontext; AAttribValues: PCTMfloat; AName: PChar): TCTMenum; stdcall; +procedure ctmLoad(AContext: TCTMcontext; AFileName: PChar); stdcall; +procedure ctmLoadCustom(AContext: TCTMcontext; AReadFn: TCTMreadfn; AUserData: Pointer); stdcall; +procedure ctmSave(AContext: TCTMcontext; AFileName: PChar); stdcall; +procedure ctmSaveCustom(AContext: TCTMcontext; AWriteFn: TCTMwritefn; AUserData: Pointer); stdcall; + + +implementation + +//------------------------------------------------------------------------------ +// DLL interface +//------------------------------------------------------------------------------ + +const + DLLNAME = 'openctm.dll'; + +function ctmNewContext; external DLLNAME; +procedure ctmFreeContext; external DLLNAME; +function ctmGetError; external DLLNAME; +function ctmErrorString; external DLLNAME; +function ctmGetInteger; external DLLNAME; +function ctmGetFloat; external DLLNAME; +function ctmGetIntegerArray; external DLLNAME; +function ctmGetFloatArray; external DLLNAME; +function ctmGetNamedUVMap; external DLLNAME; +function ctmGetUVMapString; external DLLNAME; +function ctmGetUVMapFloat; external DLLNAME; +function ctmGetNamedAttribMap; external DLLNAME; +function ctmGetAttribMapString; external DLLNAME; +function ctmGetAttribMapFloat; external DLLNAME; +function ctmGetString; external DLLNAME; +procedure ctmCompressionMethod; external DLLNAME; +procedure ctmCompressionLevel; external DLLNAME; +procedure ctmVertexPrecision; external DLLNAME; +procedure ctmVertexPrecisionRel; external DLLNAME; +procedure ctmNormalPrecision; external DLLNAME; +procedure ctmUVCoordPrecision; external DLLNAME; +procedure ctmAttribPrecision; external DLLNAME; +procedure ctmFileComment; external DLLNAME; +procedure ctmDefineMesh; external DLLNAME; +function ctmAddUVMap; external DLLNAME; +function ctmAddAttribMap; external DLLNAME; +procedure ctmLoad; external DLLNAME; +procedure ctmLoadCustom; external DLLNAME; +procedure ctmSave; external DLLNAME; +procedure ctmSaveCustom; external DLLNAME; + +end. + diff --git a/3rdparty/openctm/bindings/python/ctminfo.py b/3rdparty/openctm/bindings/python/ctminfo.py new file mode 100644 index 000000000..98c13989b --- /dev/null +++ b/3rdparty/openctm/bindings/python/ctminfo.py @@ -0,0 +1,61 @@ +#! /usr/bin/env python +#------------------------------------------------------------------------------ +# Program: ctminfo.py +# Description: Show information about an OpenCTM file +# License: Public domain +#------------------------------------------------------------------------------ + +import sys +import openctm +from openctm import * + +# Check arguments +if len(sys.argv) != 2: + print("Usage: " + sys.argv[0] + " file") + sys.exit() + +# Create an OpenCTM context, and load the file +ctm = ctmNewContext(CTM_IMPORT) +ctmLoad(ctm, sys.argv[1]) +err = ctmGetError(ctm) +if err != CTM_NONE: + print("Error loading file: " + str(ctmErrorString(err))) + sys.exit() + +# Interpret information +if ctmGetInteger(ctm, CTM_HAS_NORMALS) == CTM_TRUE: + hasNormals = "yes" +else: + hasNormals = "no"; +method = ctmGetInteger(ctm, CTM_COMPRESSION_METHOD) +if method == CTM_METHOD_RAW: + methodStr = "RAW" +elif method == CTM_METHOD_MG1: + methodStr = "MG1" +elif method == CTM_METHOD_MG2: + methodStr = "MG2" +else: + methodStr = "Unknown" + +# Print information +print(" File: " + sys.argv[1]) +print(" Comment: " + str(ctmGetString(ctm, CTM_FILE_COMMENT))) +print("Triangle count: " + str(ctmGetInteger(ctm, CTM_TRIANGLE_COUNT))) +print(" Vertex count: " + str(ctmGetInteger(ctm, CTM_VERTEX_COUNT))) +print(" Has normals: " + hasNormals) +print(" Method: " + methodStr) + +# List UV maps +uvMapCount = ctmGetInteger(ctm, CTM_UV_MAP_COUNT) +print(" UV maps: " + str(uvMapCount)) +for i in range(uvMapCount): + print(" CTM_UV_MAP_" + str(i+1) + ": \"" + str(ctmGetUVMapString(ctm, CTM_UV_MAP_1 + i, CTM_NAME)) + "\", ref = \"" + str(ctmGetUVMapString(ctm, CTM_UV_MAP_1 + i, CTM_FILE_NAME)) + "\"") + +# List attrib maps +attribMapCount = ctmGetInteger(ctm, CTM_ATTRIB_MAP_COUNT) +print("Attribute maps: " + str(attribMapCount)) +for i in range(attribMapCount): + print(" CTM_ATTRIB_MAP_" + str(i+1) + ": \"" + str(ctmGetAttribMapString(ctm, CTM_ATTRIB_MAP_1 + i, CTM_NAME)) + "\"") + +# Free the OpenCTM context +ctmFreeContext(ctm) diff --git a/3rdparty/openctm/bindings/python/openctm.py b/3rdparty/openctm/bindings/python/openctm.py new file mode 100644 index 000000000..9632eb133 --- /dev/null +++ b/3rdparty/openctm/bindings/python/openctm.py @@ -0,0 +1,204 @@ +#------------------------------------------------------------------------------ +# Product: OpenCTM +# File: openctm.py +# Description: Python API bindings (tested with Python 2.5.2 and Python 3.0) +#------------------------------------------------------------------------------ +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +#------------------------------------------------------------------------------ + +import os +import ctypes +from ctypes import * +from ctypes.util import find_library + +# Types +CTMfloat = c_float +CTMint = c_int32 +CTMuint = c_uint32 +CTMcontext = c_void_p +CTMenum = c_uint32 + +# Constants +CTM_API_VERSION = 0x00000100 +CTM_TRUE = 1 +CTM_FALSE = 0 + +# CTMenum +CTM_NONE = 0x0000 +CTM_INVALID_CONTEXT = 0x0001 +CTM_INVALID_ARGUMENT = 0x0002 +CTM_INVALID_OPERATION = 0x0003 +CTM_INVALID_MESH = 0x0004 +CTM_OUT_OF_MEMORY = 0x0005 +CTM_FILE_ERROR = 0x0006 +CTM_BAD_FORMAT = 0x0007 +CTM_LZMA_ERROR = 0x0008 +CTM_INTERNAL_ERROR = 0x0009 +CTM_UNSUPPORTED_FORMAT_VERSION = 0x000A +CTM_IMPORT = 0x0101 +CTM_EXPORT = 0x0102 +CTM_METHOD_RAW = 0x0201 +CTM_METHOD_MG1 = 0x0202 +CTM_METHOD_MG2 = 0x0203 +CTM_VERTEX_COUNT = 0x0301 +CTM_TRIANGLE_COUNT = 0x0302 +CTM_HAS_NORMALS = 0x0303 +CTM_UV_MAP_COUNT = 0x0304 +CTM_ATTRIB_MAP_COUNT = 0x0305 +CTM_VERTEX_PRECISION = 0x0306 +CTM_NORMAL_PRECISION = 0x0307 +CTM_COMPRESSION_METHOD = 0x0308 +CTM_FILE_COMMENT = 0x0309 +CTM_NAME = 0x0501 +CTM_FILE_NAME = 0x0502 +CTM_PRECISION = 0x0503 +CTM_INDICES = 0x0601 +CTM_VERTICES = 0x0602 +CTM_NORMALS = 0x0603 +CTM_UV_MAP_1 = 0x0700 +CTM_UV_MAP_2 = 0x0701 +CTM_UV_MAP_3 = 0x0702 +CTM_UV_MAP_4 = 0x0703 +CTM_UV_MAP_5 = 0x0704 +CTM_UV_MAP_6 = 0x0705 +CTM_UV_MAP_7 = 0x0706 +CTM_UV_MAP_8 = 0x0707 +CTM_ATTRIB_MAP_1 = 0x0800 +CTM_ATTRIB_MAP_2 = 0x0801 +CTM_ATTRIB_MAP_3 = 0x0802 +CTM_ATTRIB_MAP_4 = 0x0803 +CTM_ATTRIB_MAP_5 = 0x0804 +CTM_ATTRIB_MAP_6 = 0x0805 +CTM_ATTRIB_MAP_7 = 0x0806 +CTM_ATTRIB_MAP_8 = 0x0807 + +# Load the OpenCTM shared library +if os.name == 'nt': + _lib = WinDLL('openctm.dll') +else: + _libName = find_library('openctm') + if not _libName: + raise Exception('Could not find the OpenCTM shared library.') + _lib = CDLL(_libName) +if not _lib: + raise Exception('Could not open the OpenCTM shared library.') + +# Functions +ctmNewContext = _lib.ctmNewContext +ctmNewContext.argtypes = [CTMenum] +ctmNewContext.restype = CTMcontext + +ctmFreeContext = _lib.ctmFreeContext +ctmFreeContext.argtypes = [CTMcontext] + +ctmGetError = _lib.ctmGetError +ctmGetError.argtypes = [CTMcontext] +ctmGetError.restype = CTMenum + +ctmErrorString = _lib.ctmErrorString +ctmErrorString.argtypes = [CTMenum] +ctmErrorString.restype = c_char_p + +ctmGetInteger = _lib.ctmGetInteger +ctmGetInteger.argtypes = [CTMcontext, CTMenum] +ctmGetInteger.restype = CTMint + +ctmGetFloat = _lib.ctmGetFloat +ctmGetFloat.argtypes = [CTMcontext, CTMenum] +ctmGetFloat.restype = CTMfloat + +ctmGetIntegerArray = _lib.ctmGetIntegerArray +ctmGetIntegerArray.argtypes = [CTMcontext, CTMenum] +ctmGetIntegerArray.restype = POINTER(CTMuint) + +ctmGetFloatArray = _lib.ctmGetFloatArray +ctmGetFloatArray.argtypes = [CTMcontext, CTMenum] +ctmGetFloatArray.restype = POINTER(CTMfloat) + +ctmGetNamedUVMap = _lib.ctmGetNamedUVMap +ctmGetNamedUVMap.argtypes = [CTMcontext, c_char_p] +ctmGetNamedUVMap.restype = CTMenum + +ctmGetUVMapString = _lib.ctmGetUVMapString +ctmGetUVMapString.argtypes = [CTMcontext, CTMenum, CTMenum] +ctmGetUVMapString.restype = c_char_p + +ctmGetUVMapFloat = _lib.ctmGetUVMapFloat +ctmGetUVMapFloat.argtypes = [CTMcontext, CTMenum, CTMenum] +ctmGetUVMapFloat.restype = CTMfloat + +ctmGetNamedAttribMap = _lib.ctmGetNamedAttribMap +ctmGetNamedAttribMap.argtypes = [CTMcontext, c_char_p] +ctmGetNamedAttribMap.restype = CTMenum + +ctmGetAttribMapString = _lib.ctmGetAttribMapString +ctmGetAttribMapString.argtypes = [CTMcontext, CTMenum, CTMenum] +ctmGetAttribMapString.restype = c_char_p + +ctmGetAttribMapFloat = _lib.ctmGetAttribMapFloat +ctmGetAttribMapFloat.argtypes = [CTMcontext, CTMenum, CTMenum] +ctmGetAttribMapFloat.restype = CTMfloat + +ctmGetString = _lib.ctmGetString +ctmGetString.argtypes = [CTMcontext, CTMenum] +ctmGetString.restype = c_char_p + +ctmCompressionMethod = _lib.ctmCompressionMethod +ctmCompressionMethod.argtypes = [CTMcontext, CTMenum] + +ctmCompressionLevel = _lib.ctmCompressionLevel +ctmCompressionLevel.argtypes = [CTMcontext, CTMuint] + +ctmVertexPrecision = _lib.ctmVertexPrecision +ctmVertexPrecision.argtypes = [CTMcontext, CTMfloat] + +ctmVertexPrecisionRel = _lib.ctmVertexPrecisionRel +ctmVertexPrecisionRel.argtypes = [CTMcontext, CTMfloat] + +ctmNormalPrecision = _lib.ctmNormalPrecision +ctmNormalPrecision.argtypes = [CTMcontext, CTMfloat] + +ctmUVCoordPrecision = _lib.ctmUVCoordPrecision +ctmUVCoordPrecision.argtypes = [CTMcontext, CTMenum, CTMfloat] + +ctmAttribPrecision = _lib.ctmAttribPrecision +ctmAttribPrecision.argtypes = [CTMcontext, CTMenum, CTMfloat] + +ctmFileComment = _lib.ctmFileComment +ctmFileComment.argtypes = [CTMcontext, c_char_p] + +ctmDefineMesh = _lib.ctmDefineMesh +ctmDefineMesh.argtypes = [CTMcontext, POINTER(CTMfloat), CTMuint, POINTER(CTMuint), CTMuint, POINTER(CTMfloat)] + +ctmAddUVMap = _lib.ctmAddUVMap +ctmAddUVMap.argtypes = [CTMcontext, POINTER(CTMfloat), c_char_p, c_char_p] +ctmAddUVMap.restype = CTMenum + +ctmAddAttribMap = _lib.ctmAddAttribMap +ctmAddAttribMap.argtypes = [CTMcontext, POINTER(CTMfloat), c_char_p] +ctmAddAttribMap.restype = CTMenum + +ctmLoad = _lib.ctmLoad +ctmLoad.argtypes = [CTMcontext, c_char_p] + +ctmSave = _lib.ctmSave +ctmSave.argtypes = [CTMcontext, c_char_p] diff --git a/3rdparty/openctm/build-src.sh b/3rdparty/openctm/build-src.sh new file mode 100644 index 000000000..b296c1c63 --- /dev/null +++ b/3rdparty/openctm/build-src.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# Name of the distribution +distname=OpenCTM-1.0.3 + +# Clean the source directories +echo Cleaning up... +make -f Makefile.linux clean + +# Build all the necessary files +echo Building documentation... +make -f Makefile.linux documentation + +# Set up a temporary directory +tmproot=/tmp/openctm-$USER-$$ +mkdir $tmproot +tmpdir=$tmproot/$distname +mkdir $tmpdir + +# Copy files +echo Copying files to $tmpdir... +cp Makefile* *.txt $tmpdir/ +mkdir $tmpdir/lib +cp lib/*.c lib/*.h lib/*.rc lib/*.def lib/Makefile* $tmpdir/lib/ +mkdir $tmpdir/lib/liblzma +cp lib/liblzma/* $tmpdir/lib/liblzma/ +mkdir $tmpdir/tools +cp tools/*.cpp tools/*.mm tools/*.h tools/*.vert tools/*.frag tools/*.rc tools/Makefile* $tmpdir/tools/ +mkdir $tmpdir/tools/icons +cp tools/icons/* $tmpdir/tools/icons/ +mkdir $tmpdir/tools/jpeg +cp tools/jpeg/* $tmpdir/tools/jpeg/ +mkdir $tmpdir/tools/rply +cp tools/rply/* $tmpdir/tools/rply/ +mkdir $tmpdir/tools/glew +cp tools/glew/* $tmpdir/tools/glew/ +mkdir $tmpdir/tools/glew/GL +cp tools/glew/GL/* $tmpdir/tools/glew/GL/ +mkdir $tmpdir/tools/tinyxml +cp tools/tinyxml/* $tmpdir/tools/tinyxml/ +mkdir $tmpdir/tools/zlib +cp tools/zlib/* $tmpdir/tools/zlib/ +mkdir $tmpdir/tools/pnglite +cp tools/pnglite/* $tmpdir/tools/pnglite/ + +mkdir $tmpdir/doc +cp doc/DevelopersManual.pdf $tmpdir/doc/ +cp doc/FormatSpecification.pdf $tmpdir/doc/ +cp doc/ctmconv.1 $tmpdir/doc/ +cp doc/ctmviewer.1 $tmpdir/doc/ +mkdir $tmpdir/doc/APIReference +cp doc/APIReference/* $tmpdir/doc/APIReference/ + +mkdir $tmpdir/plugins +mkdir $tmpdir/plugins/blender +cp plugins/blender/* $tmpdir/plugins/blender/ +mkdir $tmpdir/plugins/maya +cp plugins/maya/* $tmpdir/plugins/maya/ + +mkdir $tmpdir/bindings +mkdir $tmpdir/bindings/delphi +cp bindings/delphi/* $tmpdir/bindings/delphi/ +mkdir $tmpdir/bindings/python +cp bindings/python/* $tmpdir/bindings/python/ + +# Create archives +olddir=`pwd` +cd $tmproot +tar -cvf $distname-src.tar $distname +bzip2 -9 $distname-src.tar +zip -9r $distname-src.zip $distname +cd $olddir +cp $tmproot/*.bz2 $tmproot/*.zip ./ + +# Remove temporary directory +rm -rf $tmproot + diff --git a/3rdparty/openctm/doc/DevelopersManual.tex b/3rdparty/openctm/doc/DevelopersManual.tex new file mode 100644 index 000000000..731e91074 --- /dev/null +++ b/3rdparty/openctm/doc/DevelopersManual.tex @@ -0,0 +1,678 @@ +%------------------------------------------------------------------------------- +% Document: OpenCTM Developers Manual +% Author: Marcus Geelnard +% Compile: pdflatex DevelopersManual.tex +%------------------------------------------------------------------------------- +% Note: You need a LaTeX environment to build this document as PDF. The +% recommended way is to install TeX Live (http://www.tug.org/texlive/) and +% a decent LaTeX editor (e.g. texmaker, LEd, etc). +% +% Ubuntu: sudo apt-get install texlive-full +% Mac OS X: http://www.tug.org/mactex/ (MacTeX.mpkg.zip) +% +% To build the PDF document, run pdflatex twice on this .tex file (in order to +% correctly build the TOC). +%------------------------------------------------------------------------------- + +% Use the OpenCTM TeX style +\input{openctm-tex.sty} + +% Document properties +\author{Marcus Geelnard} +\title{OpenCTM Developers Manual} + +% PDF specific document properties +\hypersetup{pdftitle={OpenCTM Developers Manual}} +\hypersetup{pdfauthor={Marcus Geelnard}} +\hypersetup{pdfkeywords={OpenCTM,manual}} + +% Document contents +\begin{document} + +%--[ Title page ]--------------------------------------------------------------- + +\begin{titlepage} +\begin{center} +~ +\vspace{5cm} + +\includegraphics[width=10.0cm]{logo.pdf} +\vspace{0.4cm} + +{\large Software Library version 1.0.3} + +\vspace{1.0cm} + +{\Large Developers Manual} +\vspace{1.5cm} + +Copyright \copyright \ 2009-2010 Marcus Geelnard +\end{center} +\end{titlepage} + + +%--[ Table of contents ]-------------------------------------------------------- + +\tableofcontents + + +%------------------------------------------------------------------------------- + +\chapter{Introduction} +The OpenCTM file format is an open format for storing 3D triangle meshes. +One of the main advantages over other similar file formats is its ability +to losslessly compress the triangle geometry to a fraction of the corresponding +raw data size. + +This document describes how to use the OpenCTM API to load and save OpenCTM +format files. It is mostly written for C/C++ users, but should be useful for +other programming languages too, since the concepts and function calls are +virtually identical regardless of programming language. + +For a complete reference to the OpenCTM API, please use the Doxygen generated +OpenCTM API Reference, which describes all API functions, types, constants etc. + + + +%------------------------------------------------------------------------------- + +\chapter{Concepts} + +\section{The OpenCTM API} +The OpenCTM API makes it easy to read and write OpenCTM format files. The API is +implemented in the form of a software library that an application can be linked +to in order to access the OpenCTM API. + +The software library itself is written in standard, portable C language, but +can be used from many other programming languages (writing language bindings +for new languages should be fairly straight forward, since the API was written +with cross-language portability in mind). + + +\section{The triangle mesh} +The triangle mesh, in OpenCTM terms, is managed in a format that is well suited +for a modern 3D rendering pipeline, such as OpenGL. + +At a glance, the OpenCTM mesh has the following properties: + +\begin{itemize} + \item A vertex is a set of attributes that uniquely identify the vertex. + This includes: vertex coordinate, normal, UV coordinate(s) and + custom vertex attribute(s) (such as color, weight, etc). + \item A triangle is described by three vertex indices. + \item In the OpenCTM API, these mesh data are treated as arrays (an integer + array for the triangle indices, and floating point arrays for the + vertex data). + \item All vertex data arrays in a mesh must have the same number of elements + (for instance, there is exactly one normal associated with each + vertex coordinate). + \item All mesh data are optional, except for the triangle indices and the + vertex coordinates. For instance, it is possible to leave out the + normal information. +\end{itemize} + +For an example of the mesh data structure see table \ref{tab:MeshVert} (vertex +data) and table \ref{tab:MeshTri} (triangle data). + +\begin{table}[p] +\centering +\begin{tabular}{|l|l|l|l|l|l|l|l|}\hline +\textbf{Index} & 0 & 1 & 2 & 3 & 4 & \textellipsis & N\\ \hline +\textbf{Vertex} & $v_0$ & $v_1$ & $v_2$ & $v_3$ & $v_4$ & \textellipsis & $v_N$\\ \hline +\textbf{Normal} & $n_0$ & $n_1$ & $n_2$ & $n_3$ & $n_4$ & \textellipsis & $n_N$\\ \hline +\textbf{UVCoord1} & $t1_0$ & $t1_1$ & $t1_2$ & $t1_3$ & $t1_4$ & \textellipsis & $t1_N$\\ \hline +\textbf{UVCoord2} & $t2_0$ & $t2_1$ & $t2_2$ & $t2_3$ & $t2_4$ & \textellipsis & $t2_N$\\ \hline +\textbf{Attrib1} & $a1_0$ & $a1_1$ & $a1_2$ & $a1_3$ & $a1_4$ & \textellipsis & $a1_N$\\ \hline +\textbf{Attrib2} & $a2_0$ & $a2_1$ & $a2_2$ & $a2_3$ & $a2_4$ & \textellipsis & $a2_N$\\ \hline +\end{tabular} +\caption{Mesh vertex data structure in OpenCTM, for a mesh with normals, +two UV coordinates per vertex, and two custom attributes per vertex.} +\label{tab:MeshVert} +\end{table} + +\begin{table}[p] +\centering +\begin{tabular}{|l|l|l|l|l|l|l|l|}\hline +\textbf{Triangle} & $tri_0$ & $tri_1$ & $tri_2$ & $tri_3$ & $tri_4$ & \textellipsis & $tri_M$\\ \hline +\end{tabular} +\caption{Mesh triangle data structure in OpenCTM, where $tri_k$ is a tuple of +three vertex indices. For instance, +$tri_0=(0, 1, 2)$, +$tri_1=(0, 2, 3)$, +$tri_2=(3, 5, 4)$, \textellipsis} +\label{tab:MeshTri} +\end{table} + + +\subsection{Triangle indices} +\label{sec:MeshIndices} + +Each triangle is described by three integers: one vertex index for each corner +of the triangle). The triangle index array looks like this: + +\begin{tabular}{|l|l|l|l|l|l|l|l|l|l|}\hline +$tri^0_0$ & $tri^1_0$ & $tri^2_0$ & $tri^0_1$ & $tri^1_1$ & $tri^2_1$ & \textellipsis & $tri^0_M$ & $tri^1_M$ & $tri^2_M$\\ \hline +\end{tabular} + +\textellipsis where $tri^j_k$ is the vertex index for the $j$:th corner of the +$k$:th triangle. + + +\subsection{Vertex coordinates} + +Each vertex coordinate is described by three floating point values: $x$, $y$ +and $z$. The vertex coordinate array looks like this: + +\begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|}\hline +$x_0$ & $y_0$ & $z_0$ & $x_1$ & $y_1$ & $z_1$ & \textellipsis & $x_N$ & $y_N$ & $z_N$\\ \hline +\end{tabular} + +\textellipsis where $x_k$, $y_k$ and $z_k$ are the $x$, $y$ and $z$ coordinates +of the $k$:th vertex. + + +\subsection{Normals} + +Each normal is described by three floating point values: $x$, $y$ +and $z$. The normal array looks like this: + +\begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|}\hline +$x_0$ & $y_0$ & $z_0$ & $x_1$ & $y_1$ & $z_1$ & \textellipsis & $x_N$ & $y_N$ & $z_N$\\ \hline +\end{tabular} + +\textellipsis where $x_k$, $y_k$ and $z_k$ are the $x$, $y$ and $z$ components +of the $k$:th normal. + + +\subsection{UV coordinates} + +A mesh may have several UV maps, where each UV map is described by: + +\begin{itemize} + \item A UV coordinate array. + \item A unique UV map name. + \item A file name reference (optional). +\end{itemize} + +Each UV coordinate is described by two floating point values: $u$ and $v$. +A UV coordinate array looks like this: + +\begin{tabular}{|l|l|l|l|l|l|l|l|l|l|}\hline +$u_0$ & $v_0$ & $u_1$ & $v_1$ & $u_2$ & $v_2$ & \textellipsis & $u_N$ & $v_N$\\ \hline +\end{tabular} + +\textellipsis where $u_k$ and $v_k$ are the $u$ and $v$ components +of the $k$:th UV coordinate. + + +\subsection{Custom vertex attributes} + +A mesh may have several custom vertex attribute maps, where each attribute map +is described by: + +\begin{itemize} + \item A vertex attribute array. + \item A unique attribute map name. +\end{itemize} + +Each vertex attribute is described by four floating point values: $a$, $b$, $c$ +and $d$. An attribute array looks like this: + +\begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|l|l|}\hline +$a_0$ & $b_0$ & $c_0$ & $d_0$ & $a_1$ & $b_1$ & $c_1$ & $d_1$ & \textellipsis & $a_N$ & $b_N$ & $c_N$ & $d_N$\\ \hline +\end{tabular} + +\textellipsis where $a_k$, $b_k$, $c_k$ and $d_k$ are the four attribute values +of the $k$:th attribute. + + +\section{The OpenCTM context} +The OpenCTM API uses a \emph{context} for almost all operations (function calls). +The context is created and destroyed with the functions ctmNewContext() and +ctmFreeContext(), respectively. + +A program may instantiate any number of contexts, and all OpenCTM function +calls are completely thread safe (multiple threads can use the OpenCTM API +at the same time), as long as each context instance is handled by a single +thread. + +Each context is fully self contained and independent of other contexts. + +There are two types of OpenCTM context: \emph{import contexts} and +\emph{export contexts}. Import contexts are used for importing OpenCTM files, +and export contexts are used for exporting OpenCTM files. + +The context type is selected when creating the context. + + + +%------------------------------------------------------------------------------- + +\chapter{Compression Methods} +The OpenCTM file format supports a few different compression methods, each +with its own advantages and disadvantages. The API makes it possible to +select which method to use when creating OpenCTM files (the default method +is MG1). + + +\section{RAW} +The RAW compression method is not really a compression method, since it only +stores the data in a raw, uncompressed form. The result is a file with the same +size and data format as the in-memory mesh data structure. + +The RAW method is mostly useful for testing purposes, but can be preferred in +certain situations, for instance when file writing speeds and a small memory +footprint is more important than minimizing file sizes. + +Another situation where the RAW method can be useful is when you need an +easily parsable binary file format. Usually the OpenCTM API can be used in +almost any application, but in some environments, such as certain script +languages or data inspecion tools, it can be handy to have access to the +raw data. + + +\section{MG1} +The MG1 compression method effectively reduces the size of the mesh data +by re-coding the connectivity information of the mesh into an easily +compressible format. The data is then compressed using LZMA. + +The floating point data, such as vertex coordinates and normals, is fully +preserved in the MG1 method, by simply applying lossless LZMA compression +to it. + +Under typical condititions, the connectivity information is compressed to +about two bytes per triangle (17\% of the original size), and vertex data +is compressed to about 75\% of the original size. + +While creating MG1 files can be a relatively slow process (compared to the +RAW method, for instance) the reading speed is usually very high, thanks to +the fast LZMA decoder and the uncomplicated data format. + + +\section{MG2} +The MG2 compression method offers the highest level of compression among the +different OpenCTM methods. It uses the same method for compressing connectivity +information as the MG1 method, but does a better job at compressing vertex +data. + +Vertex data is converted to a fixed point representation, which allows for +efficient, lossless, prediction based data compression algorithms. + +In short, the MG2 method divides the mesh into small sub-spaces, sorts the data +geometrically, and applies delta-prediction to the data, which effectively +lowers the data entropy. The re-coded vertex data is then compressed with +LZMA. + +When using the OpenCTM API for creating MG2 files you can trade mesh resolution +for compression ratio, and the API provides several functions for controlling +the resolution of different vertex attributes independently. Therefor it is +usually important to know the resolution requirements for your specific +application when using the MG2 method. + +In some applications, such as games, movies and art, it is important that the +3D model is not visually degraded by compression. In such applications +you will typically tune your resolution settings using trial and error, +until you find a setting that does not alter the model visually. + +In other applications, such as CAD/CAM, 3D scanning, calibration, etc, +reasonable resolution settings can usually be derived from the limitations +of the process in which the model is used. For instance, there is usually no +need for nanometer precision in the design of an airplane wing, and there +is little use of micrometer resolution in a manufacturing process that can +not reproduce features smaller than 0.15 mm. + +As a side effect of the fact that MG2 produces smaller files than the MG1 +method does, loading files is usually faster with the MG2 method than with +the MG1 method. Saving files with the MG2 method is about as fast as with +the MG1 method. + + + +%------------------------------------------------------------------------------- + +\chapter{Basic Usage} + +\section{Prerequisites} +To use the OpenCTM API, you need to include the OpenCTM include file, like this: + +\begin{lstlisting} +#include +\end{lstlisting} + +You also need to link with the OpenCTM import library. For instance, in MS +Visual Studio you can add "openctm.lib" to your Additional Dependencies field +in the Linker section. For gcc/g++ or similar compilers, you will typically +add -lopenctm to the list of compiler options, for instance: + +\begin{lstlisting} +> g++ -o foo foo.cpp -lopenctm +\end{lstlisting} + + +\section{Loading OpenCTM files} +Below is a minimal example of how to load an OpenCTM file with the OpenCTM API, +in just a few lines of code: + +\begin{lstlisting} +CTMcontext context; +CTMuint vertCount, triCount, * indices; +CTMfloat * vertices; + +// Create a new importer context +context = ctmNewContext(CTM_IMPORT); + +// Load the OpenCTM file +ctmLoad(context, "mymesh.ctm"); +if(ctmGetError(context) == CTM_NONE) +{ + // Access the mesh data + vertCount = ctmGetInteger(context, CTM_VERTEX_COUNT); + vertices = ctmGetFloatArray(context, CTM_VERTICES); + triCount = ctmGetInteger(context, CTM_TRIANGLE_COUNT); + indices = ctmGetIntegerArray(context, CTM_INDICES); + + // Deal with the mesh (e.g. transcode it to our + // internal representation) + // ... +} + +// Free the context +ctmFreeContext(context); +\end{lstlisting} + + +\section{Creating OpenCTM files} +Below is a minimal example of how to save an OpenCTM file with the OpenCTM API, +in just a few lines of code: + +\begin{lstlisting} +void MySaveFile(CTMuint aVertCount, CTMuint aTriCount, + CTMfloat * aVertices, CTMuint * aIndices, + const char * aFileName) +{ + CTMcontext context; + + // Create a new exporter context + context = ctmNewContext(CTM_EXPORT); + + // Define our mesh representation to OpenCTM + ctmDefineMesh(context, aVertices, aVertCount, aIndices, aTriCount, NULL); + + // Save the OpenCTM file + ctmSave(context, aFileName); + + // Free the context + ctmFreeContext(context); +} +\end{lstlisting} + + + +%------------------------------------------------------------------------------- + +\chapter{Controlling Compression} +When creating OpenCTM files, one of the most important things to control with +the API is the compression method. + + +\section{Selecting the compression method} +You can select which compression method to use with the ctmCompressionMethod() +function. The different options are: + +\begin{tabular}{|l|l|}\hline +\textbf{Name} & \textbf{Description}\\ \hline +CTM\_METHOD\_RAW & Use the RAW compression method.\\ \hline +CTM\_METHOD\_MG1 & Use the MG1 compression method (default).\\ \hline +CTM\_METHOD\_MG2 & Use the MG2 compression method.\\ \hline +\end{tabular} + +For instance, to select the MG2 compression method for a given OpenCTM context, +use: + +\begin{lstlisting} + ctmCompressionMethod(context, CTM_METHOD_MG2); +\end{lstlisting} + + +\section{Selecting the compression level} +You can select which LZMA compression level to use with the ctmCompressionLevel() +function. The compression level can be in the range 0-9, where 0 is the fastest +compression, and 9 is the best compression. The compression level also affects the +amount of memory that is used during compression (anywhere from a few megabytes to +several hundred megabytes). + +\begin{lstlisting} + ctmCompressionMethod(context, 4); +\end{lstlisting} + +The default compression level is 1. + + +\section{Selecting fixed point precision} +When the MG2 compression method is used, further compression control is provided +through the API that deals with the fixed point precision for different vertex +attributes. The different attribute precisions that can be controlled are: + +\begin{tabular}{|l|l|}\hline +\textbf{Attribute} & \textbf{API function}\\ \hline +Vertex coordinate & ctmVertexPrecision() / ctmVertexPrecisionRel()\\ \hline +Normal & ctmNormalPrecision()\\ \hline +UV coordinates & ctmUVCoordPrecision()\\ \hline +Custom attributes & ctmAttribPrecision()\\ \hline +\end{tabular} + +Reasonable default values for the fixed point precisions are selected by the API +unless the corresponding API functions are called. However, the API does not know +the requirements for the mesh, which is why it is always a good idea to specify +the fixed point precision that is most relevant for your specific mesh. + + +\subsection{Vertex coordinate precision} +The vertex coordinate precision can be controlled in two ways: + +\begin{itemize} + \item Absolute precision - ctmVertexPrecision(). + \item Relative precision - ctmVertexPrecisionRel(). +\end{itemize} + +You typically specify the absolute precision when you know the properties of the +mesh and what is going to be used for (for instance, if it is a product of a +measurment procecss, or if it will be used in a manufacturing process). For +example, if the vertex coordinate unit is meters, and the precision is specified +as $0.001$, the fixed point precision will be 1 mm: + +\begin{lstlisting} + ctmVertexPrecision(context, 0.001); +\end{lstlisting} + +When you do not know much about the mesh, it can be useful to specify the +relative precision. The ctmVertexPrecisionRel() function will analyze the mesh +to find a useful base measure, which is multiplied by a scaling factor that +is given as an argument to the function. + +The relative precision function uses the average triangle edge length as the +base measure. So for example, if you specify $0.01$ as the relative precision, +the precision will be 1\% of the average triangle edge length, which is usually +a good figure for meshes that will be used in visualization applications: + +\begin{lstlisting} + ctmVertexPrecisionRel(context, 0.01); +\end{lstlisting} + +It should be noted that unlike the ctmVertexPrecision() function, the +ctmVertexPrecisionRel() function requires that the mesh has been specified +before calling the function. + +The default vertex coordinate precision is $2^{-10} \approx 0.00098$. + + +\subsection{Normal precision} +In the MG2 compression method, each vertex normal is represented in spherical +coordinates (the coordinate system is aligned to the average normal of all +triangles that connect to the vertex). + +The precision controls both the angular resolution and the radial resolution +(magnitude). For instance, $0.01$ means that the circle is divided into 100 +steps, and the normal magnitude is rounded to 2 decimals: + +\begin{lstlisting} + ctmNormalPrecision(context, 0.01); +\end{lstlisting} + +The default normal precision is $2^{-8} \approx 0.0039$. + + +\subsection{UV coordinate precision} +UV coordinate precision is specified on a per UV map basis, and +gives the absolute precision in UV coordinate space. + +The effects of different precisions depend on many different things. For +instance if the UV map is used for mapping a 2D texture onto the triangle +mesh, the resolution of the texture can influence the required UV +coordinate precision (e.g. a 4096x4096 texture may require better +precision than a 256x256 texture). The resolution of the mesh may also +affect the required UV coordinate precision. + +To specify a resolution of $0.001$ for the UV map $uvMap$, use: + +\begin{lstlisting} + ctmUVCoordPrecision(context, uvMap, 0.001); +\end{lstlisting} + +The default UV coordinate precision is $2^{-12} \approx 0.00024$. + + +\subsection{Custom attribute precision} +As with UV coordinates, the precision for custom vertex attributes are +specified on a per attribute basis. + +The precision of a custom attribute depends entirely on the type of +attribute. For instance, standard color attributes typically do not require +more then eigh bits per component, which means that $1/256$ is a good +precision setting (if the value range is $[0,1]$): + +\begin{lstlisting} + ctmAttribPrecision(context, attribMap, 1.0/256.0); +\end{lstlisting} + +For integer values, the precision $1.0$ is a good choice. + +The default vertex attribute precision is $2^{-8} \approx 0.0039$. + + + +%------------------------------------------------------------------------------- + +\chapter{Error Handling} +An error can occur when calling any of the OpenCTM API functions. To check +for errors, call the ctmGetError() function, which returns a positive error +code if something went wrong, or zero (CTM\_NONE) if no error has occured. + +See \ref{tab:ErrorCodes} for a list of possible error codes. + +\begin{table}[p] +\centering +\begin{tabular}{|l|p{7cm}|}\hline +\textbf{Code} & \textbf{Description}\\ \hline +CTM\_NONE (zero) & No error has occured (everything is OK).\\ \hline +CTM\_INVALID\_CONTEXT & The OpenCTM context was invalid (e.g. NULL).\\ \hline +CTM\_INVALID\_ARGUMENT & A function argument was invalid.\\ \hline +CTM\_INVALID\_OPERATION & The operation is not allowed.\\ \hline +CTM\_INVALID\_MESH & The mesh was invalid (e.g. no vertices).\\ \hline +CTM\_OUT\_OF\_MEMORY & Not enough memory to proceed.\\ \hline +CTM\_FILE\_ERROR & File I/O error.\\ \hline +CTM\_BAD\_FORMAT & File format error (e.g. unrecognized format or corrupted file).\\ \hline +CTM\_LZMA\_ERROR & An error occured within the LZMA library.\\ \hline +CTM\_INTERNAL\_ERROR & An internal error occured (indicates a bug).\\ \hline +CTM\_UNSUPPORTED\_FORMAT\_VERSION & Unsupported file format version.\\ \hline +\end{tabular} +\caption{OpenCTM error codes.} +\label{tab:ErrorCodes} +\end{table} + +The last error code that indicates a failure is stored per OpenCTM context +until the ctmGetError() function is called. Calling the function will reset +the error state. + +It is also possible to convert an error code to an error string, using the +ctmErrorString() function, which takes an error code as its argument, and +returns a constant C string (pointer to a null terminated UTF-8 format +character string). + + + +%------------------------------------------------------------------------------- + +\chapter{C++ Extensions} +To take better advantage of some of the C++ language features, such as +exception handling, a few C++ wrapper classes are availbale through the standard +API when compiling a C++ program. As usual, just include "openctm.h", and you +will have access to two C++ classes: CTMimporer and CTMexporter. + +The main differences between the C++ classes and the standard API are: + +\begin{itemize} + \item The C++ classes call ctmNewContext() and ctmFreeContext() in their + constructors and destructors respectively, which makes it easier to + use the C++ dynamic scope mechanisms (such as exception handling). + \item Whenever an OpenCTM error occurs, an exception is thrown. Hence, there + is no method corresponding to the ctmGetError() function. +\end{itemize} + +\section{The CTMimporter class} +Here is an example of how to use the CTMimporter class in C++: + +\begin{lstlisting} +try +{ + // Create a new OpenCTM importer object + CTMimporter ctm; + + // Load the OpenCTM file + ctm.Load("mymesh.ctm"); + + // Access the mesh data + CTMuint vertCount = ctm.GetInteger(CTM_VERTEX_COUNT); + CTMfloat * vertices = ctm.GetFloatArray(CTM_VERTICES); + CTMuint triCount = ctm.GetInteger(CTM_TRIANGLE_COUNT); + CTMuint * indices = ctm.GetIntegerArray(CTM_INDICES); + + // Deal with the mesh (e.g. transcode it to our + // internal representation) + // ... +} +catch(exception &e) +{ + cout << "Error: " << e.what() << endl; +} +\end{lstlisting} + + +\section{The CTMexporter class} +Here is an example of how to use the CTMexporter class in C++: + +\begin{lstlisting} +void MySaveFile(CTMuint aVertCount, CTMuint aTriCount, + CTMfloat * aVertices, CTMuint * aIndices, + const char * aFileName) +{ + try + { + // Create a new OpenCTM exporter object + CTMexporter ctm; + + // Define our mesh representation to OpenCTM + ctm.DefineMesh(aVertices, aVertCount, aIndices, aTriCount, NULL); + + // Save the OpenCTM file + ctm.Save(aFileName); + } + catch(exception &e) + { + cout << "Error: " << e.what() << endl; + } +} +\end{lstlisting} + + +\end{document} diff --git a/3rdparty/openctm/doc/Doxyfile b/3rdparty/openctm/doc/Doxyfile new file mode 100644 index 000000000..db75e5d00 --- /dev/null +++ b/3rdparty/openctm/doc/Doxyfile @@ -0,0 +1,1417 @@ +# Doxyfile 1.5.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = OpenCTM + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.0.3 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, +# and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../lib + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = ../lib/internal.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = CTMEXPORT CTMCALL + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = APIReference + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = DoxygenFooter.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 1 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hiererachy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = NONE + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is enabled by default, which results in a transparent +# background. Warning: Depending on the platform used, enabling this option +# may lead to badly anti-aliased labels on the edges of a graph (i.e. they +# become hard to read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/3rdparty/openctm/doc/DoxygenFooter.html b/3rdparty/openctm/doc/DoxygenFooter.html new file mode 100644 index 000000000..ada6a7e39 --- /dev/null +++ b/3rdparty/openctm/doc/DoxygenFooter.html @@ -0,0 +1,6 @@ +
+

Copyright © 2009-2010 Marcus Geelnard — + openctm.sourceforge.net

+
+ + diff --git a/3rdparty/openctm/doc/FormatSpecification.tex b/3rdparty/openctm/doc/FormatSpecification.tex new file mode 100644 index 000000000..feee115c2 --- /dev/null +++ b/3rdparty/openctm/doc/FormatSpecification.tex @@ -0,0 +1,678 @@ +%------------------------------------------------------------------------------- +% Document: OpenCTM Format Specification +% Author: Marcus Geelnard +% Compile: pdflatex FormatSpecification.tex +%------------------------------------------------------------------------------- +% Note: You need a LaTeX environment to build this document as PDF. The +% recommended way is to install TeX Live (http://www.tug.org/texlive/) and +% a decent LaTeX editor (e.g. texmaker, LEd, etc). +% +% Ubuntu: sudo apt-get install texlive-full +% Mac OS X: http://www.tug.org/mactex/ (MacTeX.mpkg.zip) +% +% To build the PDF document, run pdflatex twice on this .tex file (in order to +% correctly build the TOC). +%------------------------------------------------------------------------------- + +% Use the OpenCTM TeX style +\input{openctm-tex.sty} + +% Document properties +\author{Marcus Geelnard} +\title{OpenCTM Format Specification} + +% PDF specific document properties +\hypersetup{pdftitle={OpenCTM Format Specification}} +\hypersetup{pdfauthor={Marcus Geelnard}} +\hypersetup{pdfkeywords={OpenCTM,format,specification}} + +% Document contents +\begin{document} + +%--[ Title page ]--------------------------------------------------------------- + +\begin{titlepage} +\begin{center} +~ +\vspace{5cm} + +\includegraphics[width=10.0cm]{logo.pdf} +\vspace{0.4cm} + +{\large File format version 5} + +\vspace{1.0cm} + +{\Large Format Specification} +\vspace{1.5cm} + +Copyright \copyright \ 2009-2010 Marcus Geelnard +\end{center} +\end{titlepage} + + +%--[ Table of contents ]-------------------------------------------------------- + +\tableofcontents + + +%------------------------------------------------------------------------------- + +\chapter{Overview} +This document describes version 5 of the OpenCTM file format. + +\section{File structure} +The structure of an OpenCTM file is as follows: + +[Header]\newline +[Body data] + +Each part of the file is described in the following chapters. + +\section{Data formats} +All integer fields are stored in 32-bit little endian format (least significant +byte first). + +All floating point fields are stored in 32-bit binary IEEE 754 format (little +endian). + +All strings are stored as a 32-bit integer string length (number of bytes) +followed by a UTF-8 format string (there is no zero termination and no BOM). + +\section{Packed data} +\label{sec:PackedData} +Some portions of the file are be packed by the lossless LZMA entropy coder, +and are encoded as follows: + +\begin{tabular}{|l|l|p{11cm}|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Packed size (number of bytes, $p$).\\ \hline +4 & - & LZMA specific props (five bytes, required by the LZMA decoder).\\ \hline +9 & - & LZMA packed stream ($p$ bytes long) that has been generated by the LzmaCompress() function of the LZMA API.\\ \hline +\end{tabular} + +The length of the unpacked data is always known from the context (e.g. the +triangle count uniquely defines the number of bytes required for the +uncompressed triangle indices array). + +\subsection{Element interleaving} +Some packed data arrays use element level interleaving, meaning that the +data values are rearranged at the element level. For instance, in a data array +with three elements per value (stride = 3), $x$, $y$ and $z$, the elements are +rearranged as follows: + +\begin{center} +$x_1,y_1,z_1,x_2,y_2,z_2,\ldots,x_N,y_N,z_N \Rightarrow +x_1,x_2,\ldots,x_N,y_1,y_2,\ldots,y_N,z_1,z_2,\ldots,z_N$ +\end{center} + +When decompressing an array that uses element interleaving, the process is +reversed. + +\subsection{Byte interleaving} +All packed data arrays use byte level interleaving, meaning that data values +are rearranged at the byte level. For instance, in an integer array, where each +element consists of four bytes: $a$, $b$, $c$ and $d$, the bytes are rearranged +as follows: + +\begin{center} +$a_1,b_1,c_1,d_1,a_2,b_2,c_2,d_2,\ldots,a_N,b_N,c_N,d_N \Rightarrow +a_1,a_2,\ldots,a_N,b_1,b_2,\ldots,b_N,c_1,c_2,\ldots,c_N,d_1,d_2,\ldots,d_N$ +\end{center} + +When decompressing an array that uses byte interleaving, the process is +reversed. + +\subsection{Signed magnitude representation} +Some packed integer arrays use signed magnitude representation. + +A signed magnitude value, $x'$, is converted to a two's complement value, +$x$, with the following method: + +$x = \begin{cases} +x'\; shr\; 1 & x'_0 = 0 \\ +-((x'+1)\; shr\; 1) & x'_0 = 1 +\end{cases}$ + +...where $x'_0$ is the least significant bit of $x'$. + + +%------------------------------------------------------------------------------- + +\chapter{Header} +The file must start with a header, which looks as follows: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Magic identifier (0x4d54434f, or "OCTM" when read as ASCII).\\ \hline +4 & Integer & File format version (0x00000005 = version 5).\\ \hline +8 & Integer & Compression method, which must be one of the following:\\ + & & 0x00574152 - Use the RAW compression method.\\ + & & 0x0031474d - Use the MG1 compression method.\\ + & & 0x0032474d - Use the MG2 compression method.\\ \hline +12 & Integer & Vertex count.\\ \hline +16 & Integer & Triangle count.\\ \hline +20 & Integer & UV map count.\\ \hline +24 & Integer & Attribute map count.\\ \hline +28 & Integer & Boolean flags, or:ed together:\\ + & & 0x00000001 - The file contains per-vertex normals.\\ \hline +32 & String & File comment ($p$ bytes long string).\\ \hline +\end{tabular} + +The length of the file header is $36+p$ bytes, where $p$ is the length of the +comment string. + + +%------------------------------------------------------------------------------- + +\chapter{Body data} +The body data follows immediately after the file header. Its file offset is +dictated by the length of the file header. + +The format of the body data is specific for each compression method, which is +defined by the "Compression method" field in the header. + +The body data contains the vertex, index, normal, UV map and attribute map +data, usually in a compressed form. + + +\section{RAW} +The layout of the body data for the RAW compression method is: + +[Indices]\newline +[Vertices]\newline +[Normals]\newline +[UV map 0]\newline +[UV map 1]\newline +...\newline +[UV map N]\newline +[Attribute map 0]\newline +[Attribute map 1]\newline +...\newline +[Attribute map M] + +\subsection{Indices} +The indices are stored as an integer identifier, 0x58444e49 ("INDX"), followed +by all the triangle indices. Each index is an unsigned integer value. There are +three indices per triangle, and the number of triangles is given by the +"Triangle count" field in the header: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x58444e49, or "INDX" when read as ASCII).\\ \hline +4 & Integer & Vertex index for the 1st corner of the 1st triangle.\\ \hline +8 & Integer & Vertex index for the 2nd corner of the 1st triangle.\\ \hline +12 & Integer & Vertex index for the 3rd corner of the 1st triangle.\\ \hline +16 & Integer & Vertex index for the 1st corner of the 2nd triangle.\\ \hline +... & & \\ \hline +\end{tabular} + +The length of the indices section is $4(1+3N)$ bytes, where $N$ is the triangle +count. + +\subsection{Vertices} +The vertices are stored as an integer identifier, 0x54524556 ("VERT"), followed +by all the vertex coordinates. Each vertex coordinate is stored as three +floating point values ($x,y,z$), and the number of vertices is given by the +"Vertex count" field in the header: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x54524556, or "VERT" when read as ASCII).\\ \hline +4 & Float & $x$ coordinate of the 1st vertex.\\ \hline +8 & Float & $y$ coordinate of the 1st vertex.\\ \hline +12 & Float & $z$ coordinate of the 1st vertex.\\ \hline +16 & Float & $x$ coordinate of the 2nd vertex.\\ \hline +... & & \\ \hline +\end{tabular} + +The length of the vertices section is $4(1+3N)$ bytes, where $N$ is the vertex +count. + +\subsection{Normals} +The normals section is optional, and only present if the per-vertex normals +flag is set in the header. + +The normals are stored as an integer identifier, 0x4d524f4e ("NORM"), followed +by all the normal coordinates. Each normal is stored as three floating point +values ($x,y,z$), and the number of normals is given by the "Vertex count" field +in the header: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x4d524f4e, or "NORM" when read as ASCII).\\ \hline +4 & Float & $x$ coordinate of the 1st normal.\\ \hline +8 & Float & $y$ coordinate of the 1st normal.\\ \hline +12 & Float & $z$ coordinate of the 1st normal.\\ \hline +16 & Float & $x$ coordinate of the 2nd normal.\\ \hline +... & & \\ \hline +\end{tabular} + +The length of the normals section is $4(1+3N)$ bytes, where $N$ is the vertex +count. + +\subsection{UV maps} +There can be zero or more UV maps. The number of UV maps is given by the +UV map count in the header. + +Each UV map starts with an integer identifier, 0x43584554 ("TEXC"), followed +by two strings (the UV map name and the UV map file name reference), and +finally all the UV coordinates. Each UV coordinate is stored as two floating point +values ($u,v$), and the number of UV coordinates is given by the "Vertex count" +field in the header: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x43584554, or "TEXC" when read as ASCII).\\ \hline +4 & String & Unique UV map name ($p$ bytes long string).\\ \hline +$8+p$ & String & UV map file name reference ($q$ bytes long string).\\ \hline +$12+p+q$ & Float & $u$ coordinate of the 1st UV coordinate.\\ \hline +$16+p+q$ & Float & $v$ coordinate of the 1st UV coordinate.\\ \hline +$20+p+q$ & Float & $u$ coordinate of the 2nd UV coordinate.\\ \hline +... & & \\ \hline +\end{tabular} + +The length of a UV map section is $4(3+2N)+p+q$ bytes, where $N$ is the vertex +count, $p$ is the name string length, and $q$ is the file name reference string +length. + +\subsection{Attribute maps} +There can be zero or more attribute maps. The number of attribute maps is given by the +attribute map count in the header. + +Each attribute map starts with an integer identifier, 0x52545441 ("ATTR"), followed +by the attribute map name string, and finally all the attribute values. Each attribute +value is stored as four floating point values ($a,b,c,d$), and the number of +attribute values is given by the "Vertex count" field in the header: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x52545441, or "ATTR" when read as ASCII).\\ \hline +4 & String & Unique attribute map name ($p$ bytes long string).\\ \hline +$8+p$ & Float & $a$ component of the 1st attribute value.\\ \hline +$12+p$ & Float & $b$ component of the 1st attribute value.\\ \hline +$16+p$ & Float & $c$ component of the 1st attribute value.\\ \hline +$20+p$ & Float & $d$ component of the 1st attribute value.\\ \hline +$24+p$ & Float & $a$ component of the 2nd attribute value.\\ \hline +... & & \\ \hline +\end{tabular} + +The length of an attribute map section is $4(2+4N)+p$ bytes, where $N$ is the vertex +count, and $p$ is the name string length. + + +\section{MG1} +The layout of the body data for the MG1 compression method is: + +[Indices]\newline +[Vertices]\newline +[Normals]\newline +[UV map 0]\newline +[UV map 1]\newline +...\newline +[UV map N]\newline +[Attribute map 0]\newline +[Attribute map 1]\newline +...\newline +[Attribute map M] + +\subsection{Indices} +\label{sec:MG1Indices} +The triangle indices are stored as an integer identifier, 0x58444e49 ("INDX"), +followed by a packed integer array with element interleaving (see +\ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x58444e49, or "INDX" when read as ASCII).\\ \hline +4 & - & Packed indices data.\\ \hline +\end{tabular} + +The unpacked indices array contains delta-encoded indices: + +$i'_{1,1}, i'_{1,2}, i'_{1,3}, i'_{2,1}, i'_{2,2}, i'_{2,3} ..., i'_{M,1}, i'_{M,2}, i'_{M,3}$ + +...that translate into the original triangle indices with the following method: + +$i_{k,1} = \begin{cases} +i'_{k,1} + i_{k-1,1} & (k \geq 2) \\ +i'_{k,1} & (k = 1) +\end{cases}$ + +$i_{k,2} = \begin{cases} +i'_{k,2} + i_{k-1,2} & (k \geq 2, i_{k,1} = i_{k-1,1}) \\ +i'_{k,2} + i_{k,1} & (\text{otherwise}) +\end{cases}$ + +$i_{k,3} = i'_{k,3} + i_{k,1}$ + +...where $i_{k,1}, i_{k,2}$ and $i_{k,3}$ are the 1:st, 2:nd and 3:rd vertex index of the +$k$:th triangle, respectively. + +Please note that the indices should be sorted in such a manner that +$i'_{k,1} \geq 0, i'_{k,2} \geq 0$ and $i'_{k,3} \geq 0 \; \forall \: k$. + +\subsection{Vertices} +The vertices are stored as an integer identifier, 0x54524556 ("VERT"), followed +by a packed float array without element interleaving (see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x54524556, or "VERT" when read as ASCII).\\ \hline +4 & - & Packed vertices data.\\ \hline +\end{tabular} + +The unpacked vertex array is stored as in the RAW format ($x, y, z$). + +\subsection{Normals} +The normals section is optional, and only present if the per-vertex normals +flag is set in the header. + +The normals are stored as an integer identifier, 0x4d524f4e ("NORM"), followed +by a packed float array with element interleaving (see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x4d524f4e, or "NORM" when read as ASCII).\\ \hline +4 & - & Packed normals data.\\ \hline +\end{tabular} + +The unpacked normal array is stored as in the RAW format ($x, y, z$). + +\subsection{UV maps} +There can be zero or more UV maps. The number of UV maps is given by the +UV map count in the header. + +Each UV map starts with an integer identifier, 0x43584554 ("TEXC"), followed +by two strings (the UV map name and the UV map file name reference), and +finally the packed UV coordinate data. + +The UV coordinate data is a packed float array with element interleaving +(see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x43584554, or "TEXC" when read as ASCII).\\ \hline +4 & String & Unique UV map name ($p$ bytes long string).\\ \hline +$8+p$ & String & UV map file name reference ($q$ bytes long string).\\ \hline +$12+p+q$ & - & Packed UV coordinate data.\\ \hline +\end{tabular} + +...where $p$ is the name string length, and $q$ is the file name reference string +length. + +The unpacked UV coordinate array is stored as in the RAW format ($u, v$). + +\subsection{Attribute maps} +There can be zero or more attribute maps. The number of attribute maps is given by the +attribute map count in the header. + +Each attribute map starts with an integer identifier, 0x52545441 ("ATTR"), followed +by the attribute map name string, and finally the packed attribute values. + +The attribute value data is a packed float array with element interleaving +(see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x52545441, or "ATTR" when read as ASCII).\\ \hline +4 & String & Unique attribute map name ($p$ bytes long string).\\ \hline +$8+p$ & - & Packed attribute value data.\\ \hline +\end{tabular} + +...where $p$ is the name string length. + +The unpacked attribute value array is stored as in the RAW format ($a, b, c, d$). + + +\section{MG2} +The layout of the body data for the MG2 compression method is: + +[MG2 header]\newline +[Vertices]\newline +[Grid indices]\newline +[Indices]\newline +[Normals]\newline +[UV map 0]\newline +[UV map 1]\newline +...\newline +[UV map N]\newline +[Attribute map 0]\newline +[Attribute map 1]\newline +...\newline +[Attribute map M] + +\subsection{MG2 vertex coordinate coding} +\label{sec:MG2VertexCoding} +In the MG2 compression method, all the vertices are divided into a 3D grid, +which can be described by an axis aligned bounding box (minimum fit to the +vertices), and the division factors along the $x$, $y$ and $z$ axes, as shown +in figure \ref{fig:Grid}. + +\begin{figure}[pht] +\centering +\includegraphics[width=10.0cm]{grid.pdf} +\caption{3D space subdivision grid. $LB$ and $HB$ are the lower and higher bounds +of the axis aligned bounding box. $div_x$, $div_y$ and $div_z$ are the number +of divisions along each of the axes.} +\label{fig:Grid} +\end{figure} + +The vertices are all coded relative to the grid origin of the grid box to which +they belong, and all vertices are associated with a grid box with a unique +grid index. + +The grid index, $gi$, is encoded as: + +$gi = g_x + div_x(g_y + div_y \times g_z)$ + +...where $g_x$, $g_y$ and $g_z$ are the integer $x$, $y$ and $z$ positions of the grid +box, within the grid, and: + +$g_x \in [0, div_x), g_y \in [0, div_y), g_z \in [0, div_z)$ + +The grid box origin (lower bound) of each grid box is defined by: + +$gridorigin_x(g_x) = LB_x + \frac{HB_x - LB_x}{div_x} g_x$ + +$gridorigin_y(g_y) = LB_y + \frac{HB_y - LB_y}{div_y} g_y$ + +$gridorigin_z(g_z) = LB_z + \frac{HB_z - LB_z}{div_z} g_z$ + + +\subsection{MG2 header} +The MG2 header contains information about how to interpret the mesh data. The +header looks as follows: + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x4832474d, or "MG2H" when read as ASCII).\\ \hline +4 & Float & Vertex precision.\\ \hline +8 & Float & Normal precision.\\ \hline +12 & Float & $LB_x$ ($z$ coordinate of the lower bound of the bounding box).\\ \hline +16 & Float & $LB_y$ ($y$ coordinate of the lower bound of the bounding box).\\ \hline +20 & Float & $LB_z$ ($z$ coordinate of the lower bound of the bounding box).\\ \hline +24 & Float & $HB_x$ ($x$ coordinate of the higher bound of the bounding box).\\ \hline +28 & Float & $HB_y$ ($y$ coordinate of the higher bound of the bounding box).\\ \hline +32 & Float & $HB_z$ ($z$ coordinate of the higher bound of the bounding box).\\ \hline +36 & Integer & $div_x$ (number of grid divisions along the $x$ axis, $\geq 1$).\\ \hline +40 & Integer & $div_y$ (number of grid divisions along the $y$ axis, $\geq 1$).\\ \hline +44 & Integer & $div_z$ (number of grid divisions along the $z$ axis, $\geq 1$).\\ \hline +\end{tabular} + + +\subsection{Vertices} +The vertices are stored as an integer identifier, 0x54524556 ("VERT"), followed +by the packed vertex coordinate data. + +The vertex coordinate data is a packed integer array with element interleaving +(see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x54524556, or "VERT" when read as ASCII).\\ \hline +4 & - & Packed vertex coordinate data.\\ \hline +\end{tabular} + +The unpacked vertex array has three elements per vertex: + +$x'_1, y'_1, z'_1, x'_2, y'_2, z'_2, ..., x'_N, y'_N, z'_N$ + +The original vertex coordinate, ($x_k$, $y_k$, $z_k$), for vertex number $k$ is defined as: + +$dx_k = \begin{cases} +x'_k + dx_{k-1} & (k \geq 2, gi_k = gi_{k-1})\\ +x'_k & (otherwise) +\end{cases}$ + +$x_k = s \times dx_k + gridorigin_x(gi_k)$ + +$y_k = s \times y'_k + gridorigin_y(gi_k)$ + +$z_k = s \times z'_k + gridorigin_z(gi_k)$ + +...where $s$ is the vertex precision, $gi_k$ is the $k$:th grid index (see \ref{sec:GridIndices}), +and $gridorigin(gi_k)$ is the origin (lower bound) of the grid box that is indicated by +grid index $gi_k$, according to \ref{sec:MG2VertexCoding}. + +Please note that the vertices should be sorted in such a manner that $x'_k \geq 0, y'_k \geq 0$ +and $z'_k \geq 0 \; \forall \: k$. + + +\subsection{Grid indices} +\label{sec:GridIndices} +The grid indices are stored as an integer identifier, 0x58444947 ("GIDX"), followed +by a packed integer array (see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x58444947, or "GIDX" when read as ASCII).\\ \hline +4 & - & Packed grid indices data.\\ \hline +\end{tabular} + +The unpacked grid indices array has one element per vertex: + +$gi'_1, gi'_2, ..., gi'_N$ + +The grid index for vertex number $k$ is defined as: + +$gi_k = \begin{cases} +gi'_k + gi_{k-1} & (k \geq 2)\\ +gi'_k & (k = 1) +\end{cases}$ + +Please note that the vertices should be sorted in such a manner that $gi'_k \geq 0 \: \forall \: k$. + + +\subsection{Indices} +The triangle indices are stored exactly as in the MG1 method (see \ref{sec:MG1Indices}). + +\subsection{Normals} +The normals section is optional, and only present if the per-vertex normals +flag is set in the header. + +The normals are stored as an integer identifier, 0x4d524f4e ("NORM"), followed +by a packed integer array with element interleaving (see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x4d524f4e, or "NORM" when read as ASCII).\\ \hline +4 & - & Packed normals data.\\ \hline +\end{tabular} + +Note: This section of the document is not yet complete... Please see the source +code file compressMG2.c for more information about how to interpret the +normal data array. + + +\subsection{UV maps} +There can be zero or more UV maps. The number of UV maps is given by the +UV map count in the header. + +Each UV map starts with an integer identifier, 0x43584554 ("TEXC"), followed +by two strings (the UV map name and the UV map file name reference), the +UV coordinate precision (a float value), and finally the packed UV coordinate data. + +The UV coordinate data is a packed integer array with element interleaving +and signed magnitude format (see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x43584554, or "TEXC" when read as ASCII).\\ \hline +4 & String & Unique UV map name ($p$ bytes long string).\\ \hline +$8+p$ & String & UV map file name reference ($q$ bytes long string).\\ \hline +$12+p+q$ & Float & UV coordinate precision, $s$.\\ \hline +$16+p+q$ & - & Packed UV coordinate data.\\ \hline +\end{tabular} + +...where $p$ is the name string length, and $q$ is the file name reference string +length. + +The unpacked UV coordinate array contains delta-encoded coordinates: + +$u'_1, v'_1, u'_2, v'_2, ..., u'_N, v'_N$ + +The original UV coordinates are restored with the following method: + +$u_k = \begin{cases} +s \times (u'_k + u_{k-1}) & (k \geq 2)\\ +s \times u'_k & (k = 1) +\end{cases}$ + +$v_k = \begin{cases} +s \times (v'_k + v_{k-1}) & (k \geq 2)\\ +s \times v'_k & (k = 1) +\end{cases}$ + +...where $s$ is the UV coordinate precision. + +\subsection{Attribute maps} +There can be zero or more attribute maps. The number of attribute maps is given by the +attribute map count in the header. + +Each attribute map starts with an integer identifier, 0x52545441 ("ATTR"), followed +by the attribute map name string, the attribute value precision (a float value), and +finally the packed attribute values. + +The attribute value data is a packed integer array with element interleaving +and signed magnitude format (see \ref{sec:PackedData}). + +\begin{tabular}{|l|l|l|}\hline +\textbf{Offset} & \textbf{Type} & \textbf{Description}\\ \hline +0 & Integer & Identifier (0x52545441, or "ATTR" when read as ASCII).\\ \hline +4 & String & Unique attribute map name ($p$ bytes long string).\\ \hline +$8+p$ & Float & Attribute value precision, $s$.\\ \hline +$12+p$ & - & Packed attribute value data.\\ \hline +\end{tabular} + +...where $p$ is the name string length. + +The unpacked attribute value array contains delta-encoded attribute values: + +$a'_1, b'_1, c'_1, d'_1, a'_2, b'_2, c'_2, d'_2, ..., a'_N, b'_N, c'_N, d'_N$ + +The original attributes are restored with the following method: + +$a_k = \begin{cases} +s \times (a'_k + a_{k-1}) & (k \geq 2)\\ +s \times a'_k & (k = 1) +\end{cases}$ + +$b_k = \begin{cases} +s \times (b'_k + b_{k-1}) & (k \geq 2)\\ +s \times b'_k & (k = 1) +\end{cases}$ + +$c_k = \begin{cases} +s \times (c'_k + c_{k-1}) & (k \geq 2)\\ +s \times c'_k & (k = 1) +\end{cases}$ + +$d_k = \begin{cases} +s \times (d'_k + d_{k-1}) & (k \geq 2)\\ +s \times d'_k & (k = 1) +\end{cases}$ + +...where $s$ is the attribute value precision. + +\end{document} diff --git a/3rdparty/openctm/doc/Makefile.linux b/3rdparty/openctm/doc/Makefile.linux new file mode 100644 index 000000000..a94deefa5 --- /dev/null +++ b/3rdparty/openctm/doc/Makefile.linux @@ -0,0 +1,58 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.linux +# Description: Makefile for the documentation for Linux systems (should work on +# most Un*x-like systems, e.g. OpenSolaris). +# This build system requires Doxygen, a full LaTeX installation +# (try TeX Live, http://www.tug.org/texlive/) and Groff +# (Ubuntu: sudo apt-get install groff). +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +.PHONY: all clean + +all: DevelopersManual.pdf \ + FormatSpecification.pdf \ + APIReference/index.html \ + ctmconv.html \ + ctmviewer.html + +clean: + rm -f APIReference/*.* DevelopersManual.pdf FormatSpecification.pdf *.aux *.toc *.log *.out ctmconv.html ctmviewer.html + +DevelopersManual.pdf: DevelopersManual.tex + pdflatex DevelopersManual.tex + pdflatex DevelopersManual.tex + +FormatSpecification.pdf: FormatSpecification.tex + pdflatex FormatSpecification.tex + pdflatex FormatSpecification.tex + +APIReference/index.html: ../lib/openctm.h ../lib/openctmpp.h + doxygen + +ctmconv.html: ctmconv.1 + groff -t -mandoc -Thtml $< > $@ + +ctmviewer.html: ctmviewer.1 + groff -t -mandoc -Thtml $< > $@ diff --git a/3rdparty/openctm/doc/Makefile.macosx b/3rdparty/openctm/doc/Makefile.macosx new file mode 100644 index 000000000..ba6b38877 --- /dev/null +++ b/3rdparty/openctm/doc/Makefile.macosx @@ -0,0 +1,56 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.macosx +# Description: Makefile for the documentation for Mac OS X. +# This build system requires Doxygen and a full LaTeX installation +# (try MacTeX, http://www.tug.org/mactex/). +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +.PHONY: all clean + +all: DevelopersManual.pdf \ + FormatSpecification.pdf \ + APIReference/index.html \ + ctmconv.html \ + ctmviewer.html + +clean: + rm -f APIReference/*.* DevelopersManual.pdf FormatSpecification.pdf *.aux *.toc *.log *.out ctmconv.html ctmviewer.html + +DevelopersManual.pdf: DevelopersManual.tex + pdflatex DevelopersManual.tex + pdflatex DevelopersManual.tex + +FormatSpecification.pdf: FormatSpecification.tex + pdflatex FormatSpecification.tex + pdflatex FormatSpecification.tex + +APIReference/index.html: ../lib/openctm.h ../lib/openctmpp.h + doxygen + +ctmconv.html: ctmconv.1 + groff -t -mandoc -Thtml $< > $@ + +ctmviewer.html: ctmviewer.1 + groff -t -mandoc -Thtml $< > $@ diff --git a/3rdparty/openctm/doc/Makefile.win b/3rdparty/openctm/doc/Makefile.win new file mode 100644 index 000000000..2d6b36028 --- /dev/null +++ b/3rdparty/openctm/doc/Makefile.win @@ -0,0 +1,58 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.win +# Description: Makefile for the documentation for Windows. +# This build system requires Doxygen, a full LaTeX installation +# (try TeX Live, http://www.tug.org/texlive/) and Groff +# (try http://gnuwin32.sourceforge.net/packages/groff.htm). +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +all: DevelopersManual.pdf \ + FormatSpecification.pdf \ + APIReference\index.html \ + ctmconv.html \ + ctmviewer.html + +.PHONY: all clean + + +clean: + del /Q APIReference\*.* DevelopersManual.pdf FormatSpecification.pdf *.aux *.toc *.log *.out ctmconv.html ctmviewer.html + +DevelopersManual.pdf: DevelopersManual.tex + pdflatex DevelopersManual.tex + pdflatex DevelopersManual.tex + +FormatSpecification.pdf: FormatSpecification.tex + pdflatex FormatSpecification.tex + pdflatex FormatSpecification.tex + +APIReference\index.html: ..\lib\openctm.h ..\lib\openctmpp.h + doxygen + +ctmconv.html: ctmconv.1 + groff -t -mandoc -Thtml ctmconv.1 > ctmconv.html + +ctmviewer.html: ctmviewer.1 + groff -t -mandoc -Thtml ctmviewer.1 > ctmviewer.html diff --git a/3rdparty/openctm/doc/ctmconv.1 b/3rdparty/openctm/doc/ctmconv.1 new file mode 100644 index 000000000..ad76f0745 --- /dev/null +++ b/3rdparty/openctm/doc/ctmconv.1 @@ -0,0 +1,92 @@ +.TH ctmconv 1 +.SH NAME +.B ctmconv +- file format converter for 3D models +.SH SYNOPSIS +.B ctmconv +.I infile outfile [options] +.SH DESCRIPTION +.B ctmconv +is a 3D file converter that can convert 3D model files to and from several +different formats. +.PP +The file +.I infile +is loaded, and then saved as +.I outfile +in the target file format. +.PP +The input and output file formats are determined from the file endings. +.SH OPTIONS +The following options are available: +.TP 16 +.B --scale arg +Scale the mesh by a scalar factor. +.TP +.B --upaxis arg +Set up axis (X, Y, Z, -X, -Y, -Z). If != Z, the mesh will be flipped. +.TP +.B --flip +Flip triangle orientation. +.TP +.B --calc-normals +If the source file does not contain any normals, calculate them. +.TP +.B --no-normals +Do not export normals. +.TP +.B --no-texcoords +Do not export texture coordinates. +.TP +.B --no-colors +Do not export vertex colors. +.TP +.B --comment arg +Set the file comment (default is to use the comment from the input file, if +any). +.TP +.B --texfile arg +Set the texture file name reference for the texture (default is to use the +texture file name reference from the input file, if any). +.PP +When exporting an OpenCTM file, the following options are also +available: +.TP 16 +.B --method arg +Select compression method (RAW, MG1, MG2). +.TP +.B --level arg +Set the compression level (0 - 9). +.TP +.B --vprec arg +Set vertex precision (only for MG2). +.TP +.B --vprecrel arg +Set vertex precision, relative method (only for MG2). +.TP +.B --nprec arg +Set normal precision (only for MG2). +.TP +.B --tprec arg +Set texture map precision (only for MG2). +.TP +.B --cprec arg +Set color precision (only for MG2). +.SH FILE FORMATS +The following 3D model file formats are supported: +OpenCTM (.ctm), +Stanford triangle format (.ply), +Stereolitography (.stl), +3D Studio (.3ds), +COLLADA 1.4/1.5 (.dae), +Wavefront geometry file (.obj), +LightWave object (.lwo), +Geomview object file format (.off), +VRML 2.0 - export only (.wrl). +.SH AVAILABILITY +.B ctmconv +is designed to be portable, and is available for several different systems, +including (but not limited to): Windows, Mac OS X (10.3+), Linux and +OpenSolaris. +.SH SEE ALSO +ctmviewer(1) diff --git a/3rdparty/openctm/doc/ctmviewer.1 b/3rdparty/openctm/doc/ctmviewer.1 new file mode 100644 index 000000000..d06dce48d --- /dev/null +++ b/3rdparty/openctm/doc/ctmviewer.1 @@ -0,0 +1,86 @@ +.TH ctmviewer 1 +.SH NAME +.B ctmviewer +- 3D viewer for models of various file formats +.SH SYNOPSIS +.B ctmviewer +.I [modelfile [texturefile]] +.SH DESCRIPTION +.B ctmviewer +is a 3D file viewer that can load, show and save 3D model files in several +different formats. +.PP +The program displays an interactive 3D view of the model, which can be operated +with the mouse (e.g. for rotating and zooming). +.PP +If the selected model file contains texture coordinate information, it is +possible to specify which 2D image file to use as a texture with the additional +.I texturefile +argument. If no texture file is given (either by the 3D model file, or by the +.I texturefile +argument), a standard 2D grid is used as a texture. +.SH GUI OPERATIONS +In addition to the command line arguments, +.B ctmviewer +offers several operations that can be performed from the 3D GUI display. For +help, press the F1 key. +.SS Loading and Saving +It is possible to load and save 3D model files from the program by either +using the buttons in the upper left corner of the 3D display, or by using the +keyboard shortcuts CTRL+O (open) and CTRL+S (save). +.PP +It is also possible to load a texture file from the program by using the +Open Texture button. +.SS Rendering +To toggle between a normal filled surface view (default) and a wire frame view, +press the 'w' key. +.SS Camera Control +By holding down the left mouse button and moving the mouse, the camera is +rotated around the 3D model. +.PP +By holding down the right mouse button and moving the mouse, the camera will +pan left/right and up/down. +.PP +By holding down the middle mouse button and moving the mouse, the camera will +zoom in and out. It is also possible to use the mouse wheel (not supported on +all systems) or the +/- keys to zoom in and out. +.PP +Double click the left mouse button on a point on the model to focus the camera +on that point. +.PP +Press the 'f' key to fit the model into the screen view (re-center and re-zoom). +.PP +Press the 'y' key to change the camera up direction to the Y axis (may be +necessary if the model was designed in or for an environment where the Y axis +is considered the up direction). +.PP +Press the 'z' key to change the camera up direction to the Z axis (default). +.SH FILE FORMATS +The following 3D model file formats are supported: +OpenCTM (.ctm), +Stanford triangle format (.ply), +Stereolitography (.stl), +3D Studio (.3ds), +COLLADA 1.4/1.5 (.dae), +Wavefront geometry file (.obj), +LightWave object (.lwo), +Geomview object file format (.off), +VRML 2.0 - export only (.wrl). +.PP +The following 2D image file formats are supported (texture): +JPEG (.jpg), PNG (.png). +.SH AVAILABILITY +.B ctmviewer +is designed to be portable, and is available for several different systems, +including (but not limited to): Windows, Mac OS X (10.3+), Linux and +OpenSolaris. +.PP +.B ctmviewer +uses OpenGL for its accelerated 3D display. When the OpenGL implementation +supports it, +.B ctmviewer +will use per pixel Phong shading for improved visual appearance. Otherwise +.B ctmviewer +will fall back to classic per vertex shading. +.SH SEE ALSO +ctmconv(1) diff --git a/3rdparty/openctm/doc/grid.pdf b/3rdparty/openctm/doc/grid.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d367cad1b09e3c5b4c85e4175e9a75ebd6eb71fc GIT binary patch literal 6564 zcma)BWmuHm)|PIiI|h-Cp&Mz0p&LYE90nL-fMMuRIt6J7LApVtyOkCY6k%utX%Ol9 z!1ui8yw^E@zI{E{v!8uGYp->$z4niN-J4ZMNrhK{PZ*!IZm04BUkJbtaDHx&FD(rK zYCz$(NIQV=Eu@DJ004k0Fh?X5aoanBkx(Tl#Mv5(|M)S!8xjEpJK=j}zRDPib!yQH zyIA2=p@V56I*=Ox=5g^cCE+opOcsN(>YT2vl|9do6~{A%7td-386zQ5u{+{f9Zul& zj+3%EZt5Fv68+Eib{39*(O%vxIE}r4LvPlv8f5GTA6yUcZtrEA zrJsqY&#C(rB%Nem1geU(BDO9*T~}RL*8k?pbwa+HCy46ErM&Pe&^^hV;Qk0-1!Yzx zX!m}ys5vlr+YWiR*ZN}l%$VCRYnSlEi~Te$x&^mu@~{B+6MA3qkw;z!G1VFMmu?Quif6#keLxr#io`uGYjPo1Zyk~0U-&FTBcrigc{udwzT1V! z;gr#kzcysL6l4C?(X(UvL++#Cu#EkiOLti(iPo72-jO=PN;;Oyp2xijnx|V;vk0Mf z1+|N~q^+`gyRB*mb86&A%9!WBY8{5dtq6L>Fp#HZjxg+K#=+L!7~SvQfKS7^r{`{P6{+|v80xMiREAAOe>xnP;yl=bnA zJr{rC6jmdXt=o9uJ-rZ67nF493k$fwYU!#yQ@pwOQ8c6`GTZF9k}oEeP%-PxUC(Nh z>q^UBQa>9J=b$9~1?wOZyY)rkxwYS$j$(fxo6)C$Cw^%Rz_FN;bn{u74I9$ebZ5zm zDDL_o_gUnyUki&>|DwPLGl)pGYZu!~UNMV`h-<%siOSEjgp#jL4(Q1sR-5AA<;#dU zsz}qx>;z=3R=@M%HH){Z8$f2%eTjBX^wF3uUO3JDhQ^Kw2RdD%d;{tvJl#MZ)+bpO zZZUH)cuj=(g95a1J9-{tMPHc z+cqg*j_u7B>6FTLj=xLOzl3$a{AnqP@haX#X|ndYj)NjHR{{@1ogAm+d^!sZw-&~k zGRk(D@>Ih#VY3RJ#B-&c7ZX3>>eq^v=d^xTs@+B23Ud^55EUgRH8uT+dI`%*^ByMi z$xF2kVzAVN7Jen_7C?_(^Id#upKC`)g+SsJI_+RJ7;BJt^|v{z0FDSOoq0E< zM_){5Q$}bOTG=>*D`#yMX>y0*UDzT73UY4S));xz*2gKj(ah1S_g#ITZ#Tl&Qk5(|TYHe|#qjR3l5 z+5Av=dG_1@kExk$-Z1h%g#^3_7xhSwP2+ESx4pKly^cS&otCLZ zKD+!W>D6f9$mY0al53jI8sl`@W?_$O3c?*Wy={;ix3q1Lcb*cKvSakto_q#{;zjSYDM7EcHcG8$AaCjNbl~8QgfL*msjAZX zNzxQgF4a5Oazn(b>sL@R+COGvVLTpR9W5O*Xq$liD5@rBkD+V)2O$Rz83{8A)RCnk zT7(gfLyySuo&}?iGpKx&!pm>d-?vguAod4Ml!}G)9WAZTs2N1hdS~HcFFKgNkGtaJ zVB~trmC2*SGp=!LV=?07RXzT}m+i^)K+T@6hRZZXdDJnL5r0f6MyT?e0JPci4^$rZ zSZYa3SCeVXR;Iy@p3$eNC3yonj^qvTl;D!-`nVb!Zd)ODZxUD7`~uo=MOqaH4!WlF zs!}IN$*)kN_WxfZn1aF_XMYeN6w@1 z3|A7VtB>RdMnM(mO?@14Xd#>!Ju4tUw3XMuT6<^`IO`buFkg@$L|ow7MnfI7Lk=|Z z*tYpi;l4m_O?8j(G;C3aC}C>$HO;Py<;Xx-#yH& zAr&F)?J2-PN!w$z*K2SkBrQSYtP_CJNBda<4YhUT6)nl<>@$ma@J((L2Yrlax;3up zkZ9CJ5pbRpN3)b40S!qGAl#k!^vutcFyd+qr^IVivw@l@{&BNk@|L<4jRRf~FK!S} zBVOG(oP-4{?Ho<0;8dVv_>!}k>Apep97_3U_y!JGVr}UlR?FGen$`oXz+3Wi30xR^ zkHw4ox#L#e42qx(IPfte2d{)-M3uzO%#GN&XutHW7E;zgU*}FH57va9?fiIH!mP~M z@zv3A(@s#ok=CD+;{;ltH;~(}1x=c%&!1k_*E=Nf_?0toJ%H&X8|XAZ#9i6W>(9x? zQHjw^fuqdiKYHll0gy-UgRyjC3<Cc;X+iGS4x-enGI<;%NHeY z^D^Q34|-4Z*IzHR7BWUS7YT+sOh_Cl`N<{&q~PZ=Bn#RFqY2J;vwAn64GwF8ryg9N zF;^4UC&>YajE^_iwHJoHT}BHg%>6 zq`4Km3^#@!4B_wyiS1@du+7am@@;%ah@El6)Q_ma-femT8G~4}DP+~h$+e*z&)p_s zN+-Xg;Az6HSoViQc|zOQcA4KVQ|Ctp9evgVzove*3{GX!KdGI{?QjK&+#dXlB`Xga zyRm)*h<^LfQNsQ1Nqv>Yd1)@!ZtCf8eNN!PlSwTHX(r_awS3?E4bexUgFm7#WS=9v ze|IFJTk7MlEEI#McRrHWq9M*o`Bn%)5@iz$4Fl52dK9cCa+9A864xch_24)>zUn=C zZg?(R`=!@x1}NR1Mv<9=bX6lM0Txhz&l`V0`e1zTjOc3X;gBwa?o&*N&kDN=zQcVxs>9le6Os4s;f5M;a2^g2TR90;1#OE+HHkt+%XSm%`uO-;z_>vIn@bUT=T3s$ zd>HrJu=FpdzuH<%dnt`ta580mqf@OI_5>N$gw#*>s|ZYgLCW=57>!MlEM{=_(|5ks zp-O5~>R5~&X+}GoE|{P-2zRVK5+NrYITOJz1PM7DTcEySwap7TP4c7qzYjgK9r+QoDweJUq3aMRTifs-!q zcA0)SwO8}pVcmMT(E6qn@EXO@EPamcnTJ0b{kE8g(`N%;XUp@dq!ex`d60g?cU3wO zpn(^#3QUmS?I-3-=rGmm1Ri1T;J?Q|Ye3^-#o7~#4A8!+&3K%tpk!EmSTxjIVX+^+ z7nc^)a+I_6=4QuO7~gv5v>$S*;26spfG%^NLEv{-Bk-Epfvy>4OhfDGQjwx)$h!25 zH$3;trJS92QClGFn$5F96xrTV~4J*J|;3~izn zE+smjQf)(0%ySwa$Bo(FyjMg~NWCn>!HLmyIZ)UPdaFg!t$)@EDiI5jJtb0BSS)$8 zM{o75cya3M1v&c4m|2Q;&ZB3RMR0Ol|Sow@Nhhd!)fN!(U)Q>KA>mc82M()0< z;NVKKa*U<~SPJ}+>WG3zDd&n0Ll=TJk?vGSM*i@*z+oXN>;p!kD*0YoW1vvwQc%${ zC4kN1@+Ul3Wl-sSeb|;Eck?5W>f4MUXAiANflm%{)n%r}iP2121B39hS42~b5eKQXSC-t-C1$0q#v27_j1d`5wcEW_l9ga?Cb`&5VzQL+%~P?W1fx z?zzy0zF;ok@6$L!cX~Q^T^=y%hpT3I1o0ay4XBanTG?5VbDVs;By{RvI>nOym0QnI ze<(8F6YPDGs=It16=g`5u79Fq+Q)556Z?f^Lb{Z1koO+Ar~g~hH?3-7)H}XKyYE^@ zbfi-1XQzU}h-o|q1#I0tLEPL~ya#oN))TsJ&1uVnsH}G;QHiFlbN$}BGIV*nqXfCB zY+t05Oy5OExiVy5Nn{L2G~1|lgT4(FI3(1wdOA)x7+X@n&Wrp5h9r<}+mkux!27vn z?|OZ)ZZPBWriK6>oRd>opS18EpbPcw)+&Sh+37ffaW|(;h)Zl0VPAoJ~A8 zAcP!AVhvUi$)HejRV_fTviUd6ji4lm$g>ercip{&x9>Zbsf#Rr_eJxxRXJhHx7GOk z3buaQdLcm6vsD@N3^+O8FzcBmH2S?PAVAl+=AKM^!Z1sQYZz*lNXxx^i9nv1G(x`W z(OFZ;<4iMYl?HgTsu0w69)N=`>xvyjo08p3Y!2Kvh@G&ynD#OCZEfaoI_Y|E8h(;FtE>Dt6>4rc@=5#5S9`*ckmCD-#ji*E z+B6Jp7$_z6_=WNTx7>tedGufPMjv*c#25!xcjcGLHO4NdK83J)M=kRAv|0Kym(Bo6 z<)T=n^Dds$siBwoj|xZrlpu!Ff(rSoT8LUcYTZCrWUi zE@|r_hmsK~=8Ao=BFU)+kdaQw$rX=n*ZKqbKCZ&G9ii%(ZD8v_TCUX={p-2=HAMl1 zKTy3I$Nkx@hqXS&-#H5O;_N0WzcZil)Q~ zZ8jt!&dlVlVe9NRPvn>OR57IGrrrxmd>lFoH*}1zGfz3Iej#XhM0)VNaMo-Bx>{t; zpPS%+PSe=%V)_c~voMX(Q&Hv}eBWOTHVBwp>M{X^A;S->`b4;iHmGSWq9X<{N@w_0 z)#R+oH_vrm6;>3Igs15lVz#Q3)6r@dPJ;C;Vtj-lVGRtOoQ(M5#oxKSXm&#K{7z;g z={Y2Y5@uV?U$!y75_*Ee;{WLbAHO|3H?=m3lXb1y7>mud;<%)6XxS_QYwBJz?F&|K zvSJGXB&#>&GH@Uk*w%4)q>@e8e(^ z!}WvtM3YtKvPTB_DWyxYu!u62&WaH*L)?-!yPdS}3{jLchRM-Zb#u|7v=j9yFJT9v zI6ob3+PqqKRpd9WYRtV5hH(aB+4p*p{FQ8LWF$uJYq2@z-Ag}Ro<7o(4t*g-A`!UM zhQHkNq~Gq>3r}E#T$= z=B~5fMt!K(;)_lW1?1i~q}xm#X=+|nH1lEez!>0bA$#FmserM>qq z{=tjBJ>GZrjCC%tY*SXn`+3kZ(v#iDcw>Ze3dZ?`DX!U=(x2jz5mEdjjoyp$#PAnw zb}f&XyzhK&I+VVyshW?Fs2tx8GjZen%reR2b7w|-OQIp~Hum80Jvx9Md4KUCxu>fe zeZ(#e0aiLuZ+v$#b4w-P=GxV^GdRCqv=x7(@6jnP10F~nW@;p3L!Xr_x5L{e>AKmv zHGi7cx7hRLc>l6WT*!>F=^oLS-!@KsBz~W$q0|3$nysuA7m9sCv`ApxrjRM;l?FRk4| z8-Z$DX9$df?brqRqo(1f8?7WcqNSR6?J@I$r46f0`?EATKm`tIvRt0geXf4Ss~UEU zDWIri{M3#>Y1*0ehd7}Tft#V@8+thwLVPIP`d>Qo?bn?GeJ4BL^|!*ah^U0{ox$Bu z@ZSRUA4yu-3;9GJc`HW)q^0kG+Xe*l-wpskMR|Y#00;r!zHde9+aI^@+vi_?ME>mu z05tG+fdYU!U|Z-PpE_U!6pp-|_P6e>3AKiS6`Z{QX15SOK$M>!ASB8UF#lt%=nO~R zn!5q+r1QUY@+Syqcb9(<`pf?x^ly&(w^0#bxSPveEQt5tu;MMQ1oePHpn6Xf?!dp8 z1NES8&h7{Z)D3W#zurIcxMTUZVE>;y-2PBghgrMba=uGd@84|Q?^64R1JQptP`nlL zkgizM)NC2uiX1lYw6265waM%Z$4{)wW4aJF`b+};cP zzi0iY3S$2V{ug^iFcR$OZ2Onz+lsjTs}BE}1e@=u1MLV|+$tgOn~D)|2gJP8J` literal 0 HcmV?d00001 diff --git a/3rdparty/openctm/doc/grid.svg b/3rdparty/openctm/doc/grid.svg new file mode 100644 index 000000000..7bb43e27e --- /dev/null +++ b/3rdparty/openctm/doc/grid.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + x y z + LB HB + + + + + + + + + + + + + + + + + + + + + + + + + + + + divx divy divz + diff --git a/3rdparty/openctm/doc/logo.pdf b/3rdparty/openctm/doc/logo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a81acda5bdc9ff8a67cc062b5609c7c580d8e86 GIT binary patch literal 2885 zcmchZdpMNo8^`6`pd8C#>7}g0YR-cxhm2E7nT9dcDuWq@IWY4&B%&BOL=KUbZ8b5g z)qyr4tq8TEA`!|ln@HGDRI=}k+I8*kkKgaF-*e6NJo9|t=f0o!zVG+C?vEkS!D%ZB zj)fUkzPa)dh5?WO$1fOWWd$HyY3x8S2*5%T2?hWF!im8IXEaXwWXC`Y^RT~J&^2E&%eEM;I{NT^OFbB^~ zot0pfyR$x4KP-!xqHMHYURvsndw*o^r{%DkBpadI=F#p?Wsf#QYsrnN1pi_)-@gCd z;iRnCYnkOQUhanBH%_a%j_$I=cqQwf$_vjvK=^%nO^59rg{{OZknDlq;wSO&73H zq3cS({Bf$#F7nm3Hf$!ptozk=xC>_S3889)r&xhO$~p~YC;8>cO(ru^Qf%8K3>!y>^N}j1!);l-X7npj+3`v~PLsb+Cis3^f9 z39rGVcDnc0pi;EghiYWP=I1wD&?b$W0wh!P$(65&YaXYAfOX=c>bG}xExQc)$cjM0PuFV=r>?beJ9;w`)_`aWm?L|~2$OaUj2Gl_1-29+86McKyYbxeZkSs0b48ay*`fSM)wSb0%&rMMj~|hjVF^sf zKY3NPMmh*x!)p8%l-mp96ldgA;sza+o~RA-`+6P1ndAB~`h^`sZYLsq z*sneM@1qSiZYd^_yh)yKByKrnKUV4;&a8?}?LW1NMtWQ{(HWbqg!OwNWu767rx(m$ zv79s3mk-ohZjRPvoiDM7P`MFt`}BD3h*yH=*2F^XBNO`bW*cNx&C6>?K2Q#xu7x2+ zXc8$cVlEt3%2my3F3y(hmPy~m zmtU`>z>LbJ**I`MXDv8ii6JiVesddJEKf`n*6!DJbqrkc?!GSb{Ic3H%fa<|6}gp3 zQF|V$)Q{ngIcd_m_r7D=N>aG#ZqIXBzm}ws3Dm+4tQ5mR@*59FX`QE94!2D6vZOkX z5fwUL@-N;WITbQvZe^FOckZmhwqigfsE5$yi)ep1_e19;-EhC<3o1_y1{D^}Gb4>I zl7J!RllGkInu$M1S&Fg@FZ@os?^^MGC*)7z);US9Fa6WyrFCDSp~P;3EK?SLVrDvn zbZ@Zmv*y9ktj$K({eK2cFX$-d4!o&XJLjV-XG2aioxFH-fYP(0&lR(N@C?Ov=TS0I zn0{PEc;sk8P5(UeoQN}Rf9!STPH#KbC5V%T23i#Ad31b@otrdl-5$9N=9 zx7)P|C)wYW+_cm>CY-3|mFt*gkxT2Jr)oD1b>QJdncW5jrx(DzYmq>ix*(%?4kw*& zw(Vxgd2rrkQ+BJ2R(x?)kvvj&1J+5Oq%OG9`(Vu;G|_#s$RPcLDYfmwl&pKAWytr= zvehTg%#O)JY~e_phuI}K$+rAIJR!;(~S3G!?&>u zGaZCfVdZ>(PQHBl<=4;XMk62Ip1)^|h|E(-KmR~wPUV+|jC)!ry-AB$V%UV;$wg#> zwA^E#IW}eKfo;T^?PE0vn^)h!#*}B9bTO}IX)n$wSnSc+Is5%j8E!p4zSA{+fc~U* zi!=Dt`UUUDk8d+Njy(MJGU8?$?~wa5RJNeWDY(Gk_V$Tqj-B}<1D^=7HO4&q5KhRc!@j>?T;6#5^Q-LT z)};?RHfn<9M)Gpb@e<&Vdu&SX`k}CY;AS4onO!@*r_MC80h^rD}zRH0;1TP?m3mE%T8C(v4g5%&Q9AF#-f}z_G zP)Z>&kV_2>V)*mm9B!bAiTD~KmlF`~4{_W7ZuU<-ELL5=LS*(-kjmr)uDFJ3!~0T^ ze{7<-G&&3kSi+Eh55OFU!{7iq@I^yo@OVJ{6kz|Yp-}&!A(2pk|2~JrLrD>h)wXyj z)Bn=2=FrFbFAcZ)9LS|Im^7{!cHJ4#H0YJZ+{od8fGF^l&&7pJ=K!KIkVIwSfmALi Rju35*#lQ>=9o?K@e*qG?j9CBx literal 0 HcmV?d00001 diff --git a/3rdparty/openctm/doc/openctm-tex.sty b/3rdparty/openctm/doc/openctm-tex.sty new file mode 100644 index 000000000..9e17ef415 --- /dev/null +++ b/3rdparty/openctm/doc/openctm-tex.sty @@ -0,0 +1,33 @@ +% Document class +\documentclass[11pt,a4paper]{report} + +% Packages +\usepackage[latin1]{inputenc} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{listings} +\usepackage{color} +\usepackage{times} +\usepackage{graphicx} + +% Paragraph styles +\raggedright +\usepackage{parskip} + +% Code listings +\lstset{frame=single,frameround=tttt,backgroundcolor=\color{code},% + language=C,basicstyle={\ttfamily\small},% + breaklines,breakindent=0pt,postbreak=\space\space\space\space} + +% Colors +\definecolor{link}{rgb}{0.6,0.0,0.0} +\definecolor{code}{rgb}{0.9,0.9,1.0} +\definecolor{codeA}{rgb}{0.9,1.0,0.9} +\definecolor{codeB}{rgb}{1.0,0.9,0.9} + +% PDF specific document properties +% hyperref (bookmarks, links etc) - use this package last +\usepackage[colorlinks=true,linkcolor=link,bookmarks=true,bookmarksopen=true,% + pdfhighlight=/N,bookmarksnumbered=true,bookmarksopenlevel=1,% + pdfview=FitH,pdfstartview=FitH]{hyperref} diff --git a/3rdparty/openctm/lib/Makefile.linux b/3rdparty/openctm/lib/Makefile.linux new file mode 100644 index 000000000..764312799 --- /dev/null +++ b/3rdparty/openctm/lib/Makefile.linux @@ -0,0 +1,81 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.linux +# Description: Makefile for Linux systems (should work on most Un*x-like +# systems with gcc, e.g. OpenSolaris). +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +LZMADIR = liblzma +CC = gcc +CFLAGS = -O3 -W -Wall -c -fPIC -DOPENCTM_BUILD -I$(LZMADIR) -DLZMA_PREFIX_CTM -std=c99 -pedantic +CFLAGS_LZMA = -O3 -W -Wall -c -fPIC -DLZMA_PREFIX_CTM -std=c99 -pedantic +RM = rm -f +DEPEND = $(CPP) -MM + +DYNAMICLIB = libopenctm.so + +OBJS = openctm.o \ + stream.o \ + compressRAW.o \ + compressMG1.o \ + compressMG2.o + +LZMA_OBJS = Alloc.o \ + LzFind.o \ + LzmaDec.o \ + LzmaEnc.o \ + LzmaLib.o + +SRCS = openctm.c \ + stream.c \ + compressRAW.c \ + compressMG1.c \ + compressMG2.c + +LZMA_SRCS = $(LZMADIR)/Alloc.c \ + $(LZMADIR)/LzFind.c \ + $(LZMADIR)/LzmaDec.c \ + $(LZMADIR)/LzmaEnc.c \ + $(LZMADIR)/LzmaLib.c + +.phony: all clean depend + +all: $(DYNAMICLIB) + +clean: + $(RM) $(DYNAMICLIB) $(OBJS) $(LZMA_OBJS) + +$(DYNAMICLIB): $(OBJS) $(LZMA_OBJS) + gcc -shared -s -Wl,-soname,$@ -o $@ $(OBJS) $(LZMA_OBJS) -lm + +%.o: %.c + $(CC) $(CFLAGS) $< + +%.o: $(LZMADIR)/%.c + $(CC) $(CFLAGS_LZMA) $< + +depend: + $(DEPEND) $(SRCS) $(LZMA_SRCS) > make.depend + +-include make.depend diff --git a/3rdparty/openctm/lib/Makefile.macosx b/3rdparty/openctm/lib/Makefile.macosx new file mode 100644 index 000000000..03c391416 --- /dev/null +++ b/3rdparty/openctm/lib/Makefile.macosx @@ -0,0 +1,80 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.macosx +# Description: Makefile for Mac OS X. +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +LZMADIR = liblzma +CC = gcc +CFLAGS = -O3 -W -Wall -c -fvisibility=hidden -DOPENCTM_BUILD -I$(LZMADIR) -DLZMA_PREFIX_CTM -std=c99 -pedantic +CFLAGS_LZMA = -O3 -W -Wall -c -fvisibility=hidden -DLZMA_PREFIX_CTM -std=c99 -pedantic +RM = rm -f +DEPEND = $(CPP) -MM + +DYNAMICLIB = libopenctm.dylib + +OBJS = openctm.o \ + stream.o \ + compressRAW.o \ + compressMG1.o \ + compressMG2.o + +LZMA_OBJS = Alloc.o \ + LzFind.o \ + LzmaDec.o \ + LzmaEnc.o \ + LzmaLib.o + +SRCS = openctm.c \ + stream.c \ + compressRAW.c \ + compressMG1.c \ + compressMG2.c + +LZMA_SRCS = $(LZMADIR)/Alloc.c \ + $(LZMADIR)/LzFind.c \ + $(LZMADIR)/LzmaDec.c \ + $(LZMADIR)/LzmaEnc.c \ + $(LZMADIR)/LzmaLib.c + +.phony: all clean depend + +all: $(DYNAMICLIB) + +clean: + $(RM) $(DYNAMICLIB) $(OBJS) $(LZMA_OBJS) + +$(DYNAMICLIB): $(OBJS) $(LZMA_OBJS) + gcc -dynamiclib -o $@ $(OBJS) $(LZMA_OBJS) + +%.o: %.c + $(CC) $(CFLAGS) $< + +%.o: $(LZMADIR)/%.c + $(CC) $(CFLAGS_LZMA) $< + +depend: + $(DEPEND) $(SRCS) $(LZMA_SRCS) > make.depend + +-include make.depend diff --git a/3rdparty/openctm/lib/Makefile.mingw b/3rdparty/openctm/lib/Makefile.mingw new file mode 100644 index 000000000..bfa0466d1 --- /dev/null +++ b/3rdparty/openctm/lib/Makefile.mingw @@ -0,0 +1,87 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.mingw +# Description: Makefile for MinGW32 for Windows. +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +LZMADIR = liblzma +CC = gcc +CFLAGS = -O3 -W -Wall -c -DOPENCTM_BUILD -I$(LZMADIR) -DLZMA_PREFIX_CTM -std=c99 -pedantic +CFLAGS_LZMA = -O3 -W -Wall -c -DLZMA_PREFIX_CTM -std=c99 -pedantic +RM = del /Q +DEPEND = $(CC) -MM +RC = windres + +DYNAMICLIB = openctm.dll +LINKLIB = libopenctm.a + +OBJS = openctm.o \ + stream.o \ + compressRAW.o \ + compressMG1.o \ + compressMG2.o + +LZMA_OBJS = Alloc.o \ + LzFind.o \ + LzmaDec.o \ + LzmaEnc.o \ + LzmaLib.o + +SRCS = openctm.c \ + stream.c \ + compressRAW.c \ + compressMG1.c \ + compressMG2.c + +LZMA_SRCS = $(LZMADIR)/Alloc.c \ + $(LZMADIR)/LzFind.c \ + $(LZMADIR)/LzmaDec.c \ + $(LZMADIR)/LzmaEnc.c \ + $(LZMADIR)/LzmaLib.c + +.phony: all clean depend + +all: $(DYNAMICLIB) + +clean: + $(RM) $(DYNAMICLIB) $(LINKLIB) $(OBJS) $(LZMA_OBJS) openctm-res.o + +$(DYNAMICLIB): $(OBJS) $(LZMA_OBJS) openctm-mingw1.def openctm-mingw2.def openctm-res.o + dllwrap --def openctm-mingw1.def -o $@ $(OBJS) $(LZMA_OBJS) openctm-res.o + strip $@ + dlltool --kill-at --output-lib $(LINKLIB) --def openctm-mingw2.def + +openctm-res.o: openctm.rc + $(RC) $< $@ + +%.o: %.c + $(CC) $(CFLAGS) $< + +%.o: $(LZMADIR)/%.c + $(CC) $(CFLAGS_LZMA) $< + +depend: + $(DEPEND) $(SRCS) $(LZMA_SRCS) > make.depend + +-include make.depend diff --git a/3rdparty/openctm/lib/Makefile.msvc b/3rdparty/openctm/lib/Makefile.msvc new file mode 100644 index 000000000..766f79181 --- /dev/null +++ b/3rdparty/openctm/lib/Makefile.msvc @@ -0,0 +1,103 @@ +############################################################################### +# Product: OpenCTM +# File: Makefile.msvc +# Description: Makefile for MS Visual Studio 2008 for Windows. +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +LZMADIR = liblzma +CC = cl +CFLAGS = /nologo /Ox /W3 /c /DOPENCTM_BUILD /I$(LZMADIR) /DLZMA_PREFIX_CTM /D_CRT_SECURE_NO_WARNINGS +CFLAGS_LZMA = /nologo /Ox /W3 /c /DLZMA_PREFIX_CTM +RM = del /Q +RC = rc + +DYNAMICLIB = openctm.dll +LINKLIB = openctm.lib + +OBJS = openctm.obj \ + stream.obj \ + compressRAW.obj \ + compressMG1.obj \ + compressMG2.obj + +LZMA_OBJS = Alloc.obj \ + LzFind.obj \ + LzmaDec.obj \ + LzmaEnc.obj \ + LzmaLib.obj + +SRCS = openctm.c \ + stream.c \ + compressRAW.c \ + compressMG1.c \ + compressMG2.c + +LZMA_SRCS = $(LZMADIR)\Alloc.c \ + $(LZMADIR)\LzFind.c \ + $(LZMADIR)\LzmaDec.c \ + $(LZMADIR)\LzmaEnc.c \ + $(LZMADIR)\LzmaLib.c + +all: $(DYNAMICLIB) + +.PHONY: clean + +clean: + $(RM) $(DYNAMICLIB) $(LINKLIB) $(OBJS) $(LZMA_OBJS) openctm.res + +$(DYNAMICLIB): $(OBJS) $(LZMA_OBJS) openctm-msvc.def openctm.res + link /nologo /out:$@ /dll /implib:$(LINKLIB) /def:openctm-msvc.def $(OBJS) $(LZMA_OBJS) openctm.res + +openctm.res: openctm.rc + $(RC) openctm.rc + +openctm.obj: openctm.c openctm.h internal.h + $(CC) $(CFLAGS) openctm.c + +stream.obj: stream.c openctm.h internal.h + $(CC) $(CFLAGS) stream.c + +compressRAW.obj: compressRAW.c openctm.h internal.h + $(CC) $(CFLAGS) compressRAW.c + +compressMG1.obj: compressMG1.c openctm.h internal.h + $(CC) $(CFLAGS) compressMG1.c + +compressMG2.obj: compressMG2.c openctm.h internal.h + $(CC) $(CFLAGS) compressMG2.c + +Alloc.obj: $(LZMADIR)\Alloc.c $(LZMADIR)\Alloc.h + $(CC) $(CFLAGS_LZMA) $(LZMADIR)\Alloc.c + +LzFind.obj: $(LZMADIR)\LzFind.c $(LZMADIR)\LzFind.h $(LZMADIR)\Types.h $(LZMADIR)\LzHash.h $(LZMADIR)\NameMangle.h + $(CC) $(CFLAGS_LZMA) $(LZMADIR)\LzFind.c + +LzmaDec.obj: $(LZMADIR)\LzmaDec.c $(LZMADIR)\LzmaDec.h $(LZMADIR)\Types.h $(LZMADIR)\NameMangle.h + $(CC) $(CFLAGS_LZMA) $(LZMADIR)\LzmaDec.c + +LzmaEnc.obj: $(LZMADIR)\LzmaEnc.c $(LZMADIR)\LzmaEnc.h $(LZMADIR)\Types.h $(LZMADIR)\LzFind.h $(LZMADIR)\NameMangle.h + $(CC) $(CFLAGS_LZMA) $(LZMADIR)\LzmaEnc.c + +LzmaLib.obj: $(LZMADIR)\LzmaLib.c $(LZMADIR)\LzmaEnc.h $(LZMADIR)\Types.h $(LZMADIR)\LzmaDec.h $(LZMADIR)\Alloc.h $(LZMADIR)\LzmaLib.h $(LZMADIR)\NameMangle.h + $(CC) $(CFLAGS_LZMA) $(LZMADIR)\LzmaLib.c diff --git a/3rdparty/openctm/lib/compressMG1.c b/3rdparty/openctm/lib/compressMG1.c new file mode 100644 index 000000000..b26f6fd81 --- /dev/null +++ b/3rdparty/openctm/lib/compressMG1.c @@ -0,0 +1,324 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: compressMG1.c +// Description: Implementation of the MG1 compression method. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include "openctm.h" +#include "internal.h" + +#ifdef __DEBUG_ +#include +#endif + + +//----------------------------------------------------------------------------- +// _compareTriangle() - Comparator for the triangle sorting. +//----------------------------------------------------------------------------- +static int _compareTriangle(const void * elem1, const void * elem2) +{ + CTMuint * tri1 = (CTMuint *) elem1; + CTMuint * tri2 = (CTMuint *) elem2; + if(tri1[0] != tri2[0]) + return tri1[0] - tri2[0]; + else + return tri1[1] - tri2[1]; +} + +//----------------------------------------------------------------------------- +// _ctmReArrangeTriangles() - Re-arrange all triangles for optimal +// compression. +//----------------------------------------------------------------------------- +static void _ctmReArrangeTriangles(_CTMcontext * self, CTMuint * aIndices) +{ + CTMuint * tri, tmp, i; + + // Step 1: Make sure that the first index of each triangle is the smallest + // one (rotate triangle nodes if necessary) + for(i = 0; i < self->mTriangleCount; ++ i) + { + tri = &aIndices[i * 3]; + if((tri[1] < tri[0]) && (tri[1] < tri[2])) + { + tmp = tri[0]; + tri[0] = tri[1]; + tri[1] = tri[2]; + tri[2] = tmp; + } + else if((tri[2] < tri[0]) && (tri[2] < tri[1])) + { + tmp = tri[0]; + tri[0] = tri[2]; + tri[2] = tri[1]; + tri[1] = tmp; + } + } + + // Step 2: Sort the triangles based on the first triangle index + qsort((void *) aIndices, self->mTriangleCount, sizeof(CTMuint) * 3, _compareTriangle); +} + +//----------------------------------------------------------------------------- +// _ctmMakeIndexDeltas() - Calculate various forms of derivatives in order to +// reduce data entropy. +//----------------------------------------------------------------------------- +static void _ctmMakeIndexDeltas(_CTMcontext * self, CTMuint * aIndices) +{ + CTMint i; + for(i = self->mTriangleCount - 1; i >= 0; -- i) + { + // Step 1: Calculate delta from second triangle index to the previous + // second triangle index, if the previous triangle shares the same first + // index, otherwise calculate the delta to the first triangle index + if((i >= 1) && (aIndices[i * 3] == aIndices[(i - 1) * 3])) + aIndices[i * 3 + 1] -= aIndices[(i - 1) * 3 + 1]; + else + aIndices[i * 3 + 1] -= aIndices[i * 3]; + + // Step 2: Calculate delta from third triangle index to the first triangle + // index + aIndices[i * 3 + 2] -= aIndices[i * 3]; + + // Step 3: Calculate derivative of the first triangle index + if(i >= 1) + aIndices[i * 3] -= aIndices[(i - 1) * 3]; + } +} + +//----------------------------------------------------------------------------- +// _ctmRestoreIndices() - Restore original indices (inverse derivative +// operation). +//----------------------------------------------------------------------------- +static void _ctmRestoreIndices(_CTMcontext * self, CTMuint * aIndices) +{ + CTMuint i; + + for(i = 0; i < self->mTriangleCount; ++ i) + { + // Step 1: Reverse derivative of the first triangle index + if(i >= 1) + aIndices[i * 3] += aIndices[(i - 1) * 3]; + + // Step 2: Reverse delta from third triangle index to the first triangle + // index + aIndices[i * 3 + 2] += aIndices[i * 3]; + + // Step 3: Reverse delta from second triangle index to the previous + // second triangle index, if the previous triangle shares the same first + // index, otherwise reverse the delta to the first triangle index + if((i >= 1) && (aIndices[i * 3] == aIndices[(i - 1) * 3])) + aIndices[i * 3 + 1] += aIndices[(i - 1) * 3 + 1]; + else + aIndices[i * 3 + 1] += aIndices[i * 3]; + } +} + +//----------------------------------------------------------------------------- +// _ctmCompressMesh_MG1() - Compress the mesh that is stored in the CTM +// context, and write it the the output stream in the CTM context. +//----------------------------------------------------------------------------- +int _ctmCompressMesh_MG1(_CTMcontext * self) +{ + CTMuint * indices; + _CTMfloatmap * map; + CTMuint i; + +#ifdef __DEBUG_ + printf("COMPRESSION METHOD: MG1\n"); +#endif + + // Perpare (sort) indices + indices = (CTMuint *) malloc(sizeof(CTMuint) * self->mTriangleCount * 3); + if(!indices) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + for(i = 0; i < self->mTriangleCount * 3; ++ i) + indices[i] = self->mIndices[i]; + _ctmReArrangeTriangles(self, indices); + + // Calculate index deltas (entropy-reduction) + _ctmMakeIndexDeltas(self, indices); + + // Write triangle indices +#ifdef __DEBUG_ + printf("Inidices: "); +#endif + _ctmStreamWrite(self, (void *) "INDX", 4); + if(!_ctmStreamWritePackedInts(self, (CTMint *) indices, self->mTriangleCount, 3, CTM_FALSE)) + { + free((void *) indices); + return CTM_FALSE; + } + + // Free temporary resources + free((void *) indices); + + // Write vertices +#ifdef __DEBUG_ + printf("Vertices: "); +#endif + _ctmStreamWrite(self, (void *) "VERT", 4); + if(!_ctmStreamWritePackedFloats(self, self->mVertices, self->mVertexCount * 3, 1)) + { + free((void *) indices); + return CTM_FALSE; + } + + // Write normals + if(self->mNormals) + { +#ifdef __DEBUG_ + printf("Normals: "); +#endif + _ctmStreamWrite(self, (void *) "NORM", 4); + if(!_ctmStreamWritePackedFloats(self, self->mNormals, self->mVertexCount, 3)) + return CTM_FALSE; + } + + // Write UV maps + map = self->mUVMaps; + while(map) + { +#ifdef __DEBUG_ + printf("UV coordinates (%s): ", map->mName ? map->mName : "no name"); +#endif + _ctmStreamWrite(self, (void *) "TEXC", 4); + _ctmStreamWriteSTRING(self, map->mName); + _ctmStreamWriteSTRING(self, map->mFileName); + if(!_ctmStreamWritePackedFloats(self, map->mValues, self->mVertexCount, 2)) + return CTM_FALSE; + map = map->mNext; + } + + // Write attribute maps + map = self->mAttribMaps; + while(map) + { +#ifdef __DEBUG_ + printf("Vertex attributes (%s): ", map->mName ? map->mName : "no name"); +#endif + _ctmStreamWrite(self, (void *) "ATTR", 4); + _ctmStreamWriteSTRING(self, map->mName); + if(!_ctmStreamWritePackedFloats(self, map->mValues, self->mVertexCount, 4)) + return CTM_FALSE; + map = map->mNext; + } + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmUncompressMesh_MG1() - Uncmpress the mesh from the input stream in the +// CTM context, and store the resulting mesh in the CTM context. +//----------------------------------------------------------------------------- +int _ctmUncompressMesh_MG1(_CTMcontext * self) +{ + CTMuint * indices; + _CTMfloatmap * map; + CTMuint i; + + // Allocate memory for the indices + indices = (CTMuint *) malloc(sizeof(CTMuint) * self->mTriangleCount * 3); + if(!indices) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Read triangle indices + if(_ctmStreamReadUINT(self) != FOURCC("INDX")) + { + self->mError = CTM_BAD_FORMAT; + free(indices); + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, (CTMint *) indices, self->mTriangleCount, 3, CTM_FALSE)) + return CTM_FALSE; + + // Restore indices + _ctmRestoreIndices(self, indices); + for(i = 0; i < self->mTriangleCount * 3; ++ i) + self->mIndices[i] = indices[i]; + + // Free temporary resources + free(indices); + + // Read vertices + if(_ctmStreamReadUINT(self) != FOURCC("VERT")) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + if(!_ctmStreamReadPackedFloats(self, self->mVertices, self->mVertexCount * 3, 1)) + return CTM_FALSE; + + // Read normals + if(self->mNormals) + { + if(_ctmStreamReadUINT(self) != FOURCC("NORM")) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + if(!_ctmStreamReadPackedFloats(self, self->mNormals, self->mVertexCount, 3)) + return CTM_FALSE; + } + + // Read UV maps + map = self->mUVMaps; + while(map) + { + if(_ctmStreamReadUINT(self) != FOURCC("TEXC")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + _ctmStreamReadSTRING(self, &map->mName); + _ctmStreamReadSTRING(self, &map->mFileName); + if(!_ctmStreamReadPackedFloats(self, map->mValues, self->mVertexCount, 2)) + return CTM_FALSE; + map = map->mNext; + } + + // Read vertex attribute maps + map = self->mAttribMaps; + while(map) + { + if(_ctmStreamReadUINT(self) != FOURCC("ATTR")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + _ctmStreamReadSTRING(self, &map->mName); + if(!_ctmStreamReadPackedFloats(self, map->mValues, self->mVertexCount, 4)) + return CTM_FALSE; + map = map->mNext; + } + + return CTM_TRUE; +} diff --git a/3rdparty/openctm/lib/compressMG2.c b/3rdparty/openctm/lib/compressMG2.c new file mode 100644 index 000000000..787928349 --- /dev/null +++ b/3rdparty/openctm/lib/compressMG2.c @@ -0,0 +1,1319 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: compressMG2.c +// Description: Implementation of the MG2 compression method. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include "openctm.h" +#include "internal.h" + +#ifdef __DEBUG_ +#include +#endif + +// We need PI +#ifndef PI +#define PI 3.141592653589793238462643f +#endif + + +//----------------------------------------------------------------------------- +// _CTMgrid - 3D space subdivision grid. +//----------------------------------------------------------------------------- +typedef struct { + // Axis-aligned boudning box for the grid. + CTMfloat mMin[3]; + CTMfloat mMax[3]; + + // How many divisions per axis (minimum 1). + CTMuint mDivision[3]; + + // Size of each grid box. + CTMfloat mSize[3]; +} _CTMgrid; + +//----------------------------------------------------------------------------- +// _CTMsortvertex - Vertex information. +//----------------------------------------------------------------------------- +typedef struct { + // Vertex X coordinate (used for sorting). + CTMfloat x; + + // Grid index. This is the index into the 3D space subdivision grid. + CTMuint mGridIndex; + + // Original index (before sorting). + CTMuint mOriginalIndex; +} _CTMsortvertex; + +//----------------------------------------------------------------------------- +// _ctmSetupGrid() - Setup the 3D space subdivision grid. +//----------------------------------------------------------------------------- +static void _ctmSetupGrid(_CTMcontext * self, _CTMgrid * aGrid) +{ + CTMuint i; + CTMfloat factor[3], sum, wantedGrids; + + // Calculate the mesh bounding box + aGrid->mMin[0] = aGrid->mMax[0] = self->mVertices[0]; + aGrid->mMin[1] = aGrid->mMax[1] = self->mVertices[1]; + aGrid->mMin[2] = aGrid->mMax[2] = self->mVertices[2]; + for(i = 1; i < self->mVertexCount; ++ i) + { + if(self->mVertices[i * 3] < aGrid->mMin[0]) + aGrid->mMin[0] = self->mVertices[i * 3]; + else if(self->mVertices[i * 3] > aGrid->mMax[0]) + aGrid->mMax[0] = self->mVertices[i * 3]; + if(self->mVertices[i * 3 + 1] < aGrid->mMin[1]) + aGrid->mMin[1] = self->mVertices[i * 3 + 1]; + else if(self->mVertices[i * 3 + 1] > aGrid->mMax[1]) + aGrid->mMax[1] = self->mVertices[i * 3 + 1]; + if(self->mVertices[i * 3 + 2] < aGrid->mMin[2]) + aGrid->mMin[2] = self->mVertices[i * 3 + 2]; + else if(self->mVertices[i * 3 + 2] > aGrid->mMax[2]) + aGrid->mMax[2] = self->mVertices[i * 3 + 2]; + } + + // Determine optimal grid resolution, based on the number of vertices and + // the bounding box. + // NOTE: This algorithm is quite crude, and could very well be optimized for + // better compression levels in the future without affecting the file format + // or backward compatibility at all. + for(i = 0; i < 3; ++ i) + factor[i] = aGrid->mMax[i] - aGrid->mMin[i]; + sum = factor[0] + factor[1] + factor[2]; + if(sum > 1e-30f) + { + sum = 1.0f / sum; + for(i = 0; i < 3; ++ i) + factor[i] *= sum; + wantedGrids = powf(100.0f * self->mVertexCount, 1.0f / 3.0f); + for(i = 0; i < 3; ++ i) + { + aGrid->mDivision[i] = (CTMuint) ceilf(wantedGrids * factor[i]); + if(aGrid->mDivision[i] < 1) + aGrid->mDivision[i] = 1; + } + } + else + { + aGrid->mDivision[0] = 4; + aGrid->mDivision[1] = 4; + aGrid->mDivision[2] = 4; + } +#ifdef __DEBUG_ + printf("Division: (%d %d %d)\n", aGrid->mDivision[0], aGrid->mDivision[1], aGrid->mDivision[2]); +#endif + + // Calculate grid sizes + for(i = 0; i < 3; ++ i) + aGrid->mSize[i] = (aGrid->mMax[i] - aGrid->mMin[i]) / aGrid->mDivision[i]; +} + +//----------------------------------------------------------------------------- +// _ctmPointToGridIdx() - Convert a point to a grid index. +//----------------------------------------------------------------------------- +static CTMuint _ctmPointToGridIdx(_CTMgrid * aGrid, CTMfloat * aPoint) +{ + CTMuint i, idx[3]; + + for(i = 0; i < 3; ++ i) + { + idx[i] = (CTMuint) floorf((aPoint[i] - aGrid->mMin[i]) / aGrid->mSize[i]); + if(idx[i] >= aGrid->mDivision[i]) + idx[i] = aGrid->mDivision[i] - 1; + } + + return idx[0] + aGrid->mDivision[0] * (idx[1] + aGrid->mDivision[1] * idx[2]); +} + +//----------------------------------------------------------------------------- +// _ctmGridIdxToPoint() - Convert a grid index to a point (the min x/y/z for +// the given grid box). +//----------------------------------------------------------------------------- +static void _ctmGridIdxToPoint(_CTMgrid * aGrid, CTMuint aIdx, CTMfloat * aPoint) +{ + CTMuint gridIdx[3], zdiv, ydiv, i; + + zdiv = aGrid->mDivision[0] * aGrid->mDivision[1]; + ydiv = aGrid->mDivision[0]; + + gridIdx[2] = aIdx / zdiv; + aIdx -= gridIdx[2] * zdiv; + gridIdx[1] = aIdx / ydiv; + aIdx -= gridIdx[1] * ydiv; + gridIdx[0] = aIdx; + + for(i = 0; i < 3; ++ i) + aPoint[i] = gridIdx[i] * aGrid->mSize[i] + aGrid->mMin[i]; +} + +//----------------------------------------------------------------------------- +// _compareVertex() - Comparator for the vertex sorting. +//----------------------------------------------------------------------------- +static int _compareVertex(const void * elem1, const void * elem2) +{ + _CTMsortvertex * v1 = (_CTMsortvertex *) elem1; + _CTMsortvertex * v2 = (_CTMsortvertex *) elem2; + if(v1->mGridIndex != v2->mGridIndex) + return v1->mGridIndex - v2->mGridIndex; + else if(v1->x < v2->x) + return -1; + else if(v1->x > v2->x) + return 1; + else + return 0; +} + +//----------------------------------------------------------------------------- +// _ctmSortVertices() - Setup the vertex array. Assign each vertex to a grid +// box, and sort all vertices. +//----------------------------------------------------------------------------- +static void _ctmSortVertices(_CTMcontext * self, _CTMsortvertex * aSortVertices, + _CTMgrid * aGrid) +{ + CTMuint i; + + // Prepare sort vertex array + for(i = 0; i < self->mVertexCount; ++ i) + { + // Store vertex properties in the sort vertex array + aSortVertices[i].x = self->mVertices[i * 3]; + aSortVertices[i].mGridIndex = _ctmPointToGridIdx(aGrid, &self->mVertices[i * 3]); + aSortVertices[i].mOriginalIndex = i; + } + + // Sort vertices. The elements are first sorted by their grid indices, and + // scondly by their x coordinates. + qsort((void *) aSortVertices, self->mVertexCount, sizeof(_CTMsortvertex), _compareVertex); +} + +//----------------------------------------------------------------------------- +// _ctmReIndexIndices() - Re-index all indices, based on the sorted vertices. +//----------------------------------------------------------------------------- +static int _ctmReIndexIndices(_CTMcontext * self, _CTMsortvertex * aSortVertices, + CTMuint * aIndices) +{ + CTMuint i, * indexLUT; + + // Create temporary lookup-array, O(n) + indexLUT = (CTMuint *) malloc(sizeof(CTMuint) * self->mVertexCount); + if(!indexLUT) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + for(i = 0; i < self->mVertexCount; ++ i) + indexLUT[aSortVertices[i].mOriginalIndex] = i; + + // Convert old indices to new indices, O(n) + for(i = 0; i < self->mTriangleCount * 3; ++ i) + aIndices[i] = indexLUT[self->mIndices[i]]; + + // Free temporary lookup-array + free((void *) indexLUT); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _compareTriangle() - Comparator for the triangle sorting. +//----------------------------------------------------------------------------- +static int _compareTriangle(const void * elem1, const void * elem2) +{ + CTMuint * tri1 = (CTMuint *) elem1; + CTMuint * tri2 = (CTMuint *) elem2; + if(tri1[0] != tri2[0]) + return tri1[0] - tri2[0]; + else + return tri1[1] - tri2[1]; +} + +//----------------------------------------------------------------------------- +// _ctmReArrangeTriangles() - Re-arrange all triangles for optimal +// compression. +//----------------------------------------------------------------------------- +static void _ctmReArrangeTriangles(_CTMcontext * self, CTMuint * aIndices) +{ + CTMuint * tri, tmp, i; + + // Step 1: Make sure that the first index of each triangle is the smallest + // one (rotate triangle nodes if necessary) + for(i = 0; i < self->mTriangleCount; ++ i) + { + tri = &aIndices[i * 3]; + if((tri[1] < tri[0]) && (tri[1] < tri[2])) + { + tmp = tri[0]; + tri[0] = tri[1]; + tri[1] = tri[2]; + tri[2] = tmp; + } + else if((tri[2] < tri[0]) && (tri[2] < tri[1])) + { + tmp = tri[0]; + tri[0] = tri[2]; + tri[2] = tri[1]; + tri[1] = tmp; + } + } + + // Step 2: Sort the triangles based on the first triangle index + qsort((void *) aIndices, self->mTriangleCount, sizeof(CTMuint) * 3, _compareTriangle); +} + +//----------------------------------------------------------------------------- +// _ctmMakeIndexDeltas() - Calculate various forms of derivatives in order to +// reduce data entropy. +//----------------------------------------------------------------------------- +static void _ctmMakeIndexDeltas(_CTMcontext * self, CTMuint * aIndices) +{ + CTMint i; + for(i = self->mTriangleCount - 1; i >= 0; -- i) + { + // Step 1: Calculate delta from second triangle index to the previous + // second triangle index, if the previous triangle shares the same first + // index, otherwise calculate the delta to the first triangle index + if((i >= 1) && (aIndices[i * 3] == aIndices[(i - 1) * 3])) + aIndices[i * 3 + 1] -= aIndices[(i - 1) * 3 + 1]; + else + aIndices[i * 3 + 1] -= aIndices[i * 3]; + + // Step 2: Calculate delta from third triangle index to the first triangle + // index + aIndices[i * 3 + 2] -= aIndices[i * 3]; + + // Step 3: Calculate derivative of the first triangle index + if(i >= 1) + aIndices[i * 3] -= aIndices[(i - 1) * 3]; + } +} + +//----------------------------------------------------------------------------- +// _ctmRestoreIndices() - Restore original indices (inverse derivative +// operation). +//----------------------------------------------------------------------------- +static void _ctmRestoreIndices(_CTMcontext * self, CTMuint * aIndices) +{ + CTMuint i; + + for(i = 0; i < self->mTriangleCount; ++ i) + { + // Step 1: Reverse derivative of the first triangle index + if(i >= 1) + aIndices[i * 3] += aIndices[(i - 1) * 3]; + + // Step 2: Reverse delta from third triangle index to the first triangle + // index + aIndices[i * 3 + 2] += aIndices[i * 3]; + + // Step 3: Reverse delta from second triangle index to the previous + // second triangle index, if the previous triangle shares the same first + // index, otherwise reverse the delta to the first triangle index + if((i >= 1) && (aIndices[i * 3] == aIndices[(i - 1) * 3])) + aIndices[i * 3 + 1] += aIndices[(i - 1) * 3 + 1]; + else + aIndices[i * 3 + 1] += aIndices[i * 3]; + } +} + +//----------------------------------------------------------------------------- +// _ctmMakeVertexDeltas() - Calculate various forms of derivatives in order to +// reduce data entropy. +//----------------------------------------------------------------------------- +static void _ctmMakeVertexDeltas(_CTMcontext * self, CTMint * aIntVertices, + _CTMsortvertex * aSortVertices, _CTMgrid * aGrid) +{ + CTMuint i, gridIdx, prevGridIndex, oldIdx; + CTMfloat gridOrigin[3], scale; + CTMint deltaX, prevDeltaX; + + // Vertex scaling factor + scale = 1.0f / self->mVertexPrecision; + + prevGridIndex = 0x7fffffff; + prevDeltaX = 0; + for(i = 0; i < self->mVertexCount; ++ i) + { + // Get grid box origin + gridIdx = aSortVertices[i].mGridIndex; + _ctmGridIdxToPoint(aGrid, gridIdx, gridOrigin); + + // Get old vertex coordinate index (before vertex sorting) + oldIdx = aSortVertices[i].mOriginalIndex; + + // Store delta to the grid box origin in the integer vertex array. For the + // X axis (which is sorted) we also do the delta to the previous coordinate + // in the box. + deltaX = (CTMint) floorf(scale * (self->mVertices[oldIdx * 3] - gridOrigin[0]) + 0.5f); + if(gridIdx == prevGridIndex) + aIntVertices[i * 3] = deltaX - prevDeltaX; + else + aIntVertices[i * 3] = deltaX; + aIntVertices[i * 3 + 1] = (CTMint) floorf(scale * (self->mVertices[oldIdx * 3 + 1] - gridOrigin[1]) + 0.5f); + aIntVertices[i * 3 + 2] = (CTMint) floorf(scale * (self->mVertices[oldIdx * 3 + 2] - gridOrigin[2]) + 0.5f); + + prevGridIndex = gridIdx; + prevDeltaX = deltaX; + } +} + +//----------------------------------------------------------------------------- +// _ctmRestoreVertices() - Calculate inverse derivatives of the vertices. +//----------------------------------------------------------------------------- +static void _ctmRestoreVertices(_CTMcontext * self, CTMint * aIntVertices, + CTMuint * aGridIndices, _CTMgrid * aGrid, CTMfloat * aVertices) +{ + CTMuint i, gridIdx, prevGridIndex; + CTMfloat gridOrigin[3], scale; + CTMint deltaX, prevDeltaX; + + scale = self->mVertexPrecision; + + prevGridIndex = 0x7fffffff; + prevDeltaX = 0; + for(i = 0; i < self->mVertexCount; ++ i) + { + // Get grid box origin + gridIdx = aGridIndices[i]; + _ctmGridIdxToPoint(aGrid, gridIdx, gridOrigin); + + // Restore original point + deltaX = aIntVertices[i * 3]; + if(gridIdx == prevGridIndex) + deltaX += prevDeltaX; + aVertices[i * 3] = scale * deltaX + gridOrigin[0]; + aVertices[i * 3 + 1] = scale * aIntVertices[i * 3 + 1] + gridOrigin[1]; + aVertices[i * 3 + 2] = scale * aIntVertices[i * 3 + 2] + gridOrigin[2]; + + prevGridIndex = gridIdx; + prevDeltaX = deltaX; + } +} + +//----------------------------------------------------------------------------- +// _ctmCalcSmoothNormals() - Calculate the smooth normals for a given mesh. +// These are used as the nominal normals for normal deltas & reconstruction. +//----------------------------------------------------------------------------- +static void _ctmCalcSmoothNormals(_CTMcontext * self, CTMfloat * aVertices, + CTMuint * aIndices, CTMfloat * aSmoothNormals) +{ + CTMuint i, j, k, tri[3]; + CTMfloat len; + CTMfloat v1[3], v2[3], n[3]; + + // Clear smooth normals array + for(i = 0; i < 3 * self->mVertexCount; ++ i) + aSmoothNormals[i] = 0.0f; + + // Calculate sums of all neigbouring triangle normals for each vertex + for(i = 0; i < self->mTriangleCount; ++ i) + { + // Get triangle corner indices + for(j = 0; j < 3; ++ j) + tri[j] = aIndices[i * 3 + j]; + + // Calculate the normalized cross product of two triangle edges (i.e. the + // flat triangle normal) + for(j = 0; j < 3; ++ j) + { + v1[j] = aVertices[tri[1] * 3 + j] - aVertices[tri[0] * 3 + j]; + v2[j] = aVertices[tri[2] * 3 + j] - aVertices[tri[0] * 3 + j]; + } + n[0] = v1[1] * v2[2] - v1[2] * v2[1]; + n[1] = v1[2] * v2[0] - v1[0] * v2[2]; + n[2] = v1[0] * v2[1] - v1[1] * v2[0]; + len = sqrtf(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]); + if(len > 1e-10f) + len = 1.0f / len; + else + len = 1.0f; + for(j = 0; j < 3; ++ j) + n[j] *= len; + + // Add the flat normal to all three triangle vertices + for(k = 0; k < 3; ++ k) + for(j = 0; j < 3; ++ j) + aSmoothNormals[tri[k] * 3 + j] += n[j]; + } + + // Normalize the normal sums, which gives the unit length smooth normals + for(i = 0; i < self->mVertexCount; ++ i) + { + len = sqrtf(aSmoothNormals[i * 3] * aSmoothNormals[i * 3] + + aSmoothNormals[i * 3 + 1] * aSmoothNormals[i * 3 + 1] + + aSmoothNormals[i * 3 + 2] * aSmoothNormals[i * 3 + 2]); + if(len > 1e-10f) + len = 1.0f / len; + else + len = 1.0f; + for(j = 0; j < 3; ++ j) + aSmoothNormals[i * 3 + j] *= len; + } +} + +//----------------------------------------------------------------------------- +// _ctmMakeNormalCoordSys() - Create an ortho-normalized coordinate system +// where the Z-axis is aligned with the given normal. +// Note 1: This function is central to how the compressed normal data is +// interpreted, and it can not be changed (mathematically) without making the +// coder/decoder incompatible with other versions of the library! +// Note 2: Since we do this for every single normal, this routine needs to be +// fast. The current implementation uses: 12 MUL, 1 DIV, 1 SQRT, ~6 ADD. +//----------------------------------------------------------------------------- +static void _ctmMakeNormalCoordSys(CTMfloat * aNormal, CTMfloat * aBasisAxes) +{ + CTMfloat len, * x, * y, * z; + CTMuint i; + + // Pointers to the basis axes (aBasisAxes is a 3x3 matrix) + x = aBasisAxes; + y = &aBasisAxes[3]; + z = &aBasisAxes[6]; + + // Z = normal (must be unit length!) + for(i = 0; i < 3; ++ i) + z[i] = aNormal[i]; + + // Calculate a vector that is guaranteed to be orthogonal to the normal, non- + // zero, and a continuous function of the normal (no discrete jumps): + // X = (0,0,1) x normal + (1,0,0) x normal + x[0] = -aNormal[1]; + x[1] = aNormal[0] - aNormal[2]; + x[2] = aNormal[1]; + + // Normalize the new X axis (note: |x[2]| = |x[0]|) + len = sqrtf(2.0 * x[0] * x[0] + x[1] * x[1]); + if(len > 1.0e-20f) + { + len = 1.0f / len; + x[0] *= len; + x[1] *= len; + x[2] *= len; + } + + // Let Y = Z x X (no normalization needed, since |Z| = |X| = 1) + y[0] = z[1] * x[2] - z[2] * x[1]; + y[1] = z[2] * x[0] - z[0] * x[2]; + y[2] = z[0] * x[1] - z[1] * x[0]; +} + +//----------------------------------------------------------------------------- +// _ctmMakeNormalDeltas() - Convert the normals to a new coordinate system: +// magnitude, phi, theta (relative to predicted smooth normals). +//----------------------------------------------------------------------------- +static CTMint _ctmMakeNormalDeltas(_CTMcontext * self, CTMint * aIntNormals, + CTMfloat * aVertices, CTMuint * aIndices, _CTMsortvertex * aSortVertices) +{ + CTMuint i, j, oldIdx, intPhi; + CTMfloat magn, phi, theta, scale, thetaScale; + CTMfloat * smoothNormals, n[3], n2[3], basisAxes[9]; + + // Allocate temporary memory for the nominal vertex normals + smoothNormals = (CTMfloat *) malloc(3 * sizeof(CTMfloat) * self->mVertexCount); + if(!smoothNormals) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Calculate smooth normals (Note: aVertices and aIndices use the sorted + // index space, so smoothNormals will too) + _ctmCalcSmoothNormals(self, aVertices, aIndices, smoothNormals); + + // Normal scaling factor + scale = 1.0f / self->mNormalPrecision; + + for(i = 0; i < self->mVertexCount; ++ i) + { + // Get old normal index (before vertex sorting) + oldIdx = aSortVertices[i].mOriginalIndex; + + // Calculate normal magnitude (should always be 1.0 for unit length normals) + magn = sqrtf(self->mNormals[oldIdx * 3] * self->mNormals[oldIdx * 3] + + self->mNormals[oldIdx * 3 + 1] * self->mNormals[oldIdx * 3 + 1] + + self->mNormals[oldIdx * 3 + 2] * self->mNormals[oldIdx * 3 + 2]); + if(magn < 1e-10f) + magn = 1.0f; + + // Invert magnitude if the normal is negative compared to the predicted + // smooth normal + if((smoothNormals[i * 3] * self->mNormals[oldIdx * 3] + + smoothNormals[i * 3 + 1] * self->mNormals[oldIdx * 3 + 1] + + smoothNormals[i * 3 + 2] * self->mNormals[oldIdx * 3 + 2]) < 0.0f) + magn = -magn; + + // Store the magnitude in the first element of the three normal elements + aIntNormals[i * 3] = (CTMint) floorf(scale * magn + 0.5f); + + // Normalize the normal (1 / magn) - and flip it if magn < 0 + magn = 1.0f / magn; + for(j = 0; j < 3; ++ j) + n[j] = self->mNormals[oldIdx * 3 + j] * magn; + + // Convert the normal to angular representation (phi, theta) in a coordinate + // system where the nominal (smooth) normal is the Z-axis + _ctmMakeNormalCoordSys(&smoothNormals[i * 3], basisAxes); + for(j = 0; j < 3; ++ j) + n2[j] = basisAxes[j * 3] * n[0] + + basisAxes[j * 3 + 1] * n[1] + + basisAxes[j * 3 + 2] * n[2]; + if(n2[2] >= 1.0f) + phi = 0.0f; + else + phi = acosf(n2[2]); + theta = atan2f(n2[1], n2[0]); + + // Round phi and theta (spherical coordinates) to integers. Note: We let the + // theta resolution vary with the x/y circumference (roughly phi). + intPhi = (CTMint) floorf(phi * (scale / (0.5f * PI)) + 0.5f); + if(intPhi == 0) + thetaScale = 0.0f; + else if(intPhi <= 4) + thetaScale = 2.0f / PI; + else + thetaScale = ((CTMfloat) intPhi) / (2.0f * PI); + aIntNormals[i * 3 + 1] = intPhi; + aIntNormals[i * 3 + 2] = (CTMint) floorf((theta + PI) * thetaScale + 0.5f); + } + + // Free temporary resources + free(smoothNormals); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmRestoreNormals() - Convert the normals back to cartesian coordinates. +//----------------------------------------------------------------------------- +static CTMint _ctmRestoreNormals(_CTMcontext * self, CTMint * aIntNormals) +{ + CTMuint i, j, intPhi; + CTMfloat magn, phi, theta, scale, thetaScale; + CTMfloat * smoothNormals, n[3], n2[3], basisAxes[9]; + + // Allocate temporary memory for the nominal vertex normals + smoothNormals = (CTMfloat *) malloc(3 * sizeof(CTMfloat) * self->mVertexCount); + if(!smoothNormals) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Calculate smooth normals (nominal normals) + _ctmCalcSmoothNormals(self, self->mVertices, self->mIndices, smoothNormals); + + // Normal scaling factor + scale = self->mNormalPrecision; + + for(i = 0; i < self->mVertexCount; ++ i) + { + // Get the normal magnitude from the first of the three normal elements + magn = aIntNormals[i * 3] * scale; + + // Get phi and theta (spherical coordinates, relative to the smooth normal). + intPhi = aIntNormals[i * 3 + 1]; + phi = intPhi * (0.5f * PI) * scale; + if(intPhi == 0) + thetaScale = 0.0f; + else if(intPhi <= 4) + thetaScale = PI / 2.0f; + else + thetaScale = (2.0f * PI) / ((CTMfloat) intPhi); + theta = aIntNormals[i * 3 + 2] * thetaScale - PI; + + // Convert the normal from the angular representation (phi, theta) back to + // cartesian coordinates + n2[0] = sinf(phi) * cosf(theta); + n2[1] = sinf(phi) * sinf(theta); + n2[2] = cosf(phi); + _ctmMakeNormalCoordSys(&smoothNormals[i * 3], basisAxes); + for(j = 0; j < 3; ++ j) + n[j] = basisAxes[j] * n2[0] + + basisAxes[3 + j] * n2[1] + + basisAxes[6 + j] * n2[2]; + + // Apply normal magnitude, and output to the normals array + for(j = 0; j < 3; ++ j) + self->mNormals[i * 3 + j] = n[j] * magn; + } + + // Free temporary resources + free(smoothNormals); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmMakeUVCoordDeltas() - Calculate various forms of derivatives in order +// to reduce data entropy. +//----------------------------------------------------------------------------- +static void _ctmMakeUVCoordDeltas(_CTMcontext * self, _CTMfloatmap * aMap, + CTMint * aIntUVCoords, _CTMsortvertex * aSortVertices) +{ + CTMuint i, oldIdx; + CTMint u, v, prevU, prevV; + CTMfloat scale; + + // UV coordinate scaling factor + scale = 1.0f / aMap->mPrecision; + + prevU = prevV = 0; + for(i = 0; i < self->mVertexCount; ++ i) + { + // Get old UV coordinate index (before vertex sorting) + oldIdx = aSortVertices[i].mOriginalIndex; + + // Convert to fixed point + u = (CTMint) floorf(scale * aMap->mValues[oldIdx * 2] + 0.5f); + v = (CTMint) floorf(scale * aMap->mValues[oldIdx * 2 + 1] + 0.5f); + + // Calculate delta and store it in the converted array. NOTE: Here we rely + // on the fact that vertices are sorted, and usually close to each other, + // which means that UV coordinates should also be close to each other... + aIntUVCoords[i * 2] = u - prevU; + aIntUVCoords[i * 2 + 1] = v - prevV; + + prevU = u; + prevV = v; + } +} + +//----------------------------------------------------------------------------- +// _ctmRestoreUVCoords() - Calculate inverse derivatives of the UV +// coordinates. +//----------------------------------------------------------------------------- +static void _ctmRestoreUVCoords(_CTMcontext * self, _CTMfloatmap * aMap, + CTMint * aIntUVCoords) +{ + CTMuint i; + CTMint u, v, prevU, prevV; + CTMfloat scale; + + // UV coordinate scaling factor + scale = aMap->mPrecision; + + prevU = prevV = 0; + for(i = 0; i < self->mVertexCount; ++ i) + { + // Calculate inverse delta + u = aIntUVCoords[i * 2] + prevU; + v = aIntUVCoords[i * 2 + 1] + prevV; + + // Convert to floating point + aMap->mValues[i * 2] = (CTMfloat) u * scale; + aMap->mValues[i * 2 + 1] = (CTMfloat) v * scale; + + prevU = u; + prevV = v; + } +} + +//----------------------------------------------------------------------------- +// _ctmMakeAttribDeltas() - Calculate various forms of derivatives in order +// to reduce data entropy. +//----------------------------------------------------------------------------- +static void _ctmMakeAttribDeltas(_CTMcontext * self, _CTMfloatmap * aMap, + CTMint * aIntAttribs, _CTMsortvertex * aSortVertices) +{ + CTMuint i, j, oldIdx; + CTMint value[4], prev[4]; + CTMfloat scale; + + // Attribute scaling factor + scale = 1.0f / aMap->mPrecision; + + for(j = 0; j < 4; ++ j) + prev[j] = 0; + + for(i = 0; i < self->mVertexCount; ++ i) + { + // Get old attribute index (before vertex sorting) + oldIdx = aSortVertices[i].mOriginalIndex; + + // Convert to fixed point, and calculate delta and store it in the converted + // array. NOTE: Here we rely on the fact that vertices are sorted, and + // usually close to each other, which means that attributes should also + // be close to each other (and we assume that they somehow vary slowly with + // the geometry)... + for(j = 0; j < 4; ++ j) + { + value[j] = (CTMint) floorf(scale * aMap->mValues[oldIdx * 4 + j] + 0.5f); + aIntAttribs[i * 4 + j] = value[j] - prev[j]; + prev[j] = value[j]; + } + } +} + +//----------------------------------------------------------------------------- +// _ctmRestoreAttribs() - Calculate inverse derivatives of the vertex +// attributes. +//----------------------------------------------------------------------------- +static void _ctmRestoreAttribs(_CTMcontext * self, _CTMfloatmap * aMap, + CTMint * aIntAttribs) +{ + CTMuint i, j; + CTMint value[4], prev[4]; + CTMfloat scale; + + // Attribute scaling factor + scale = aMap->mPrecision; + + for(j = 0; j < 4; ++ j) + prev[j] = 0; + + for(i = 0; i < self->mVertexCount; ++ i) + { + // Calculate inverse delta, and convert to floating point + for(j = 0; j < 4; ++ j) + { + value[j] = aIntAttribs[i * 4 + j] + prev[j]; + aMap->mValues[i * 4 + j] = (CTMfloat) value[j] * scale; + prev[j] = value[j]; + } + } +} + +//----------------------------------------------------------------------------- +// _ctmCompressMesh_MG2() - Compress the mesh that is stored in the CTM +// context, and write it the the output stream in the CTM context. +//----------------------------------------------------------------------------- +int _ctmCompressMesh_MG2(_CTMcontext * self) +{ + _CTMgrid grid; + _CTMsortvertex * sortVertices; + _CTMfloatmap * map; + CTMuint * indices, * deltaIndices, * gridIndices; + CTMint * intVertices, * intNormals, * intUVCoords, * intAttribs; + CTMfloat * restoredVertices; + CTMuint i; + +#ifdef __DEBUG_ + printf("COMPRESSION METHOD: MG2\n"); +#endif + + // Setup 3D space subdivision grid + _ctmSetupGrid(self, &grid); + + // Write MG2-specific header information to the stream + _ctmStreamWrite(self, (void *) "MG2H", 4); + _ctmStreamWriteFLOAT(self, self->mVertexPrecision); + _ctmStreamWriteFLOAT(self, self->mNormalPrecision); + _ctmStreamWriteFLOAT(self, grid.mMin[0]); + _ctmStreamWriteFLOAT(self, grid.mMin[1]); + _ctmStreamWriteFLOAT(self, grid.mMin[2]); + _ctmStreamWriteFLOAT(self, grid.mMax[0]); + _ctmStreamWriteFLOAT(self, grid.mMax[1]); + _ctmStreamWriteFLOAT(self, grid.mMax[2]); + _ctmStreamWriteUINT(self, grid.mDivision[0]); + _ctmStreamWriteUINT(self, grid.mDivision[1]); + _ctmStreamWriteUINT(self, grid.mDivision[2]); + + // Prepare (sort) vertices + sortVertices = (_CTMsortvertex *) malloc(sizeof(_CTMsortvertex) * self->mVertexCount); + if(!sortVertices) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + _ctmSortVertices(self, sortVertices, &grid); + + // Convert vertices to integers and calculate vertex deltas (entropy-reduction) + intVertices = (CTMint *) malloc(sizeof(CTMint) * 3 * self->mVertexCount); + if(!intVertices) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) sortVertices); + return CTM_FALSE; + } + _ctmMakeVertexDeltas(self, intVertices, sortVertices, &grid); + + // Write vertices +#ifdef __DEBUG_ + printf("Vertices: "); +#endif + _ctmStreamWrite(self, (void *) "VERT", 4); + if(!_ctmStreamWritePackedInts(self, intVertices, self->mVertexCount, 3, CTM_FALSE)) + { + free((void *) intVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Prepare grid indices (deltas) + gridIndices = (CTMuint *) malloc(sizeof(CTMuint) * self->mVertexCount); + if(!gridIndices) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) intVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + gridIndices[0] = sortVertices[0].mGridIndex; + for(i = 1; i < self->mVertexCount; ++ i) + gridIndices[i] = sortVertices[i].mGridIndex - sortVertices[i - 1].mGridIndex; + + // Write grid indices +#ifdef __DEBUG_ + printf("Grid indices: "); +#endif + _ctmStreamWrite(self, (void *) "GIDX", 4); + if(!_ctmStreamWritePackedInts(self, (CTMint *) gridIndices, self->mVertexCount, 1, CTM_FALSE)) + { + free((void *) gridIndices); + free((void *) intVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Calculate the result of the compressed -> decompressed vertices, in order + // to use the same vertex data for calculating nominal normals as the + // decompression routine (i.e. compensate for the vertex error when + // calculating the normals) + restoredVertices = (CTMfloat *) malloc(sizeof(CTMfloat) * 3 * self->mVertexCount); + if(!restoredVertices) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) gridIndices); + free((void *) intVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + for(i = 1; i < self->mVertexCount; ++ i) + gridIndices[i] += gridIndices[i - 1]; + _ctmRestoreVertices(self, intVertices, gridIndices, &grid, restoredVertices); + + // Free temporary resources + free((void *) gridIndices); + free((void *) intVertices); + + // Perpare (sort) indices + indices = (CTMuint *) malloc(sizeof(CTMuint) * self->mTriangleCount * 3); + if(!indices) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + if(!_ctmReIndexIndices(self, sortVertices, indices)) + { + free((void *) indices); + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + _ctmReArrangeTriangles(self, indices); + + // Calculate index deltas (entropy-reduction) + deltaIndices = (CTMuint *) malloc(sizeof(CTMuint) * self->mTriangleCount * 3); + if(!indices) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) indices); + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + for(i = 0; i < self->mTriangleCount * 3; ++ i) + deltaIndices[i] = indices[i]; + _ctmMakeIndexDeltas(self, deltaIndices); + + // Write triangle indices +#ifdef __DEBUG_ + printf("Indices: "); +#endif + _ctmStreamWrite(self, (void *) "INDX", 4); + if(!_ctmStreamWritePackedInts(self, (CTMint *) deltaIndices, self->mTriangleCount, 3, CTM_FALSE)) + { + free((void *) deltaIndices); + free((void *) indices); + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Free temporary data for the indices + free((void *) deltaIndices); + + if(self->mNormals) + { + // Convert normals to integers and calculate deltas (entropy-reduction) + intNormals = (CTMint *) malloc(sizeof(CTMint) * 3 * self->mVertexCount); + if(!intNormals) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) indices); + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + if(!_ctmMakeNormalDeltas(self, intNormals, restoredVertices, indices, sortVertices)) + { + free((void *) indices); + free((void *) intNormals); + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Write normals +#ifdef __DEBUG_ + printf("Normals: "); +#endif + _ctmStreamWrite(self, (void *) "NORM", 4); + if(!_ctmStreamWritePackedInts(self, intNormals, self->mVertexCount, 3, CTM_FALSE)) + { + free((void *) indices); + free((void *) intNormals); + free((void *) restoredVertices); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Free temporary normal data + free((void *) intNormals); + } + + // Free restored indices and vertices + free((void *) indices); + free((void *) restoredVertices); + + // Write UV maps + map = self->mUVMaps; + while(map) + { + // Convert UV coordinates to integers and calculate deltas (entropy-reduction) + intUVCoords = (CTMint *) malloc(sizeof(CTMint) * 2 * self->mVertexCount); + if(!intUVCoords) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) sortVertices); + return CTM_FALSE; + } + _ctmMakeUVCoordDeltas(self, map, intUVCoords, sortVertices); + + // Write UV coordinates +#ifdef __DEBUG_ + printf("Texture coordinates (%s): ", map->mName ? map->mName : "no name"); +#endif + _ctmStreamWrite(self, (void *) "TEXC", 4); + _ctmStreamWriteSTRING(self, map->mName); + _ctmStreamWriteSTRING(self, map->mFileName); + _ctmStreamWriteFLOAT(self, map->mPrecision); + if(!_ctmStreamWritePackedInts(self, intUVCoords, self->mVertexCount, 2, CTM_TRUE)) + { + free((void *) intUVCoords); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Free temporary UV coordinate data + free((void *) intUVCoords); + + map = map->mNext; + } + + // Write vertex attribute maps + map = self->mAttribMaps; + while(map) + { + // Convert vertex attributes to integers and calculate deltas (entropy-reduction) + intAttribs = (CTMint *) malloc(sizeof(CTMint) * 4 * self->mVertexCount); + if(!intAttribs) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) sortVertices); + return CTM_FALSE; + } + _ctmMakeAttribDeltas(self, map, intAttribs, sortVertices); + + // Write vertex attributes +#ifdef __DEBUG_ + printf("Vertex attributes (%s): ", map->mName ? map->mName : "no name"); +#endif + _ctmStreamWrite(self, (void *) "ATTR", 4); + _ctmStreamWriteSTRING(self, map->mName); + _ctmStreamWriteFLOAT(self, map->mPrecision); + if(!_ctmStreamWritePackedInts(self, intAttribs, self->mVertexCount, 4, CTM_TRUE)) + { + free((void *) intAttribs); + free((void *) sortVertices); + return CTM_FALSE; + } + + // Free temporary vertex attribute data + free((void *) intAttribs); + + map = map->mNext; + } + + // Free temporary data + free((void *) sortVertices); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmUncompressMesh_MG2() - Uncmpress the mesh from the input stream in the +// CTM context, and store the resulting mesh in the CTM context. +//----------------------------------------------------------------------------- +int _ctmUncompressMesh_MG2(_CTMcontext * self) +{ + CTMuint * gridIndices, i; + CTMint * intVertices, * intNormals, * intUVCoords, * intAttribs; + _CTMfloatmap * map; + _CTMgrid grid; + + // Read MG2-specific header information from the stream + if(_ctmStreamReadUINT(self) != FOURCC("MG2H")) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + self->mVertexPrecision = _ctmStreamReadFLOAT(self); + if(self->mVertexPrecision <= 0.0f) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + self->mNormalPrecision = _ctmStreamReadFLOAT(self); + if(self->mNormalPrecision <= 0.0f) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + grid.mMin[0] = _ctmStreamReadFLOAT(self); + grid.mMin[1] = _ctmStreamReadFLOAT(self); + grid.mMin[2] = _ctmStreamReadFLOAT(self); + grid.mMax[0] = _ctmStreamReadFLOAT(self); + grid.mMax[1] = _ctmStreamReadFLOAT(self); + grid.mMax[2] = _ctmStreamReadFLOAT(self); + if((grid.mMax[0] < grid.mMin[0]) || + (grid.mMax[1] < grid.mMin[1]) || + (grid.mMax[2] < grid.mMin[2])) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + grid.mDivision[0] = _ctmStreamReadUINT(self); + grid.mDivision[1] = _ctmStreamReadUINT(self); + grid.mDivision[2] = _ctmStreamReadUINT(self); + if((grid.mDivision[0] < 1) || (grid.mDivision[1] < 1) || (grid.mDivision[2] < 1)) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + + // Initialize 3D space subdivision grid + for(i = 0; i < 3; ++ i) + grid.mSize[i] = (grid.mMax[i] - grid.mMin[i]) / grid.mDivision[i]; + + // Read vertices + if(_ctmStreamReadUINT(self) != FOURCC("VERT")) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + intVertices = (CTMint *) malloc(sizeof(CTMint) * self->mVertexCount * 3); + if(!intVertices) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, intVertices, self->mVertexCount, 3, CTM_FALSE)) + { + free((void *) intVertices); + return CTM_FALSE; + } + + // Read grid indices + if(_ctmStreamReadUINT(self) != FOURCC("GIDX")) + { + free((void *) intVertices); + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + gridIndices = (CTMuint *) malloc(sizeof(CTMuint) * self->mVertexCount); + if(!gridIndices) + { + self->mError = CTM_OUT_OF_MEMORY; + free((void *) intVertices); + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, (CTMint *) gridIndices, self->mVertexCount, 1, CTM_FALSE)) + { + free((void *) gridIndices); + free((void *) intVertices); + return CTM_FALSE; + } + + // Restore grid indices (deltas) + for(i = 1; i < self->mVertexCount; ++ i) + gridIndices[i] += gridIndices[i - 1]; + + // Restore vertices + _ctmRestoreVertices(self, intVertices, gridIndices, &grid, self->mVertices); + + // Free temporary resources + free((void *) gridIndices); + free((void *) intVertices); + + // Read triangle indices + if(_ctmStreamReadUINT(self) != FOURCC("INDX")) + { + self->mError = CTM_BAD_FORMAT; + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, (CTMint *) self->mIndices, self->mTriangleCount, 3, CTM_FALSE)) + return CTM_FALSE; + + // Restore indices + _ctmRestoreIndices(self, self->mIndices); + + // Check that all indices are within range + for(i = 0; i < (self->mTriangleCount * 3); ++ i) + { + if(self->mIndices[i] >= self->mVertexCount) + { + self->mError = CTM_INVALID_MESH; + return CTM_FALSE; + } + } + + // Read normals + if(self->mNormals) + { + intNormals = (CTMint *) malloc(sizeof(CTMint) * self->mVertexCount * 3); + if(!intNormals) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + if(_ctmStreamReadUINT(self) != FOURCC("NORM")) + { + self->mError = CTM_BAD_FORMAT; + free((void *) intNormals); + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, intNormals, self->mVertexCount, 3, CTM_FALSE)) + { + free((void *) intNormals); + return CTM_FALSE; + } + + // Restore normals + if(!_ctmRestoreNormals(self, intNormals)) + { + free((void *) intNormals); + return CTM_FALSE; + } + + // Free temporary normals data + free((void *) intNormals); + } + + // Read UV maps + map = self->mUVMaps; + while(map) + { + intUVCoords = (CTMint *) malloc(sizeof(CTMint) * self->mVertexCount * 2); + if(!intUVCoords) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + if(_ctmStreamReadUINT(self) != FOURCC("TEXC")) + { + self->mError = CTM_BAD_FORMAT; + free((void *) intUVCoords); + return CTM_FALSE; + } + _ctmStreamReadSTRING(self, &map->mName); + _ctmStreamReadSTRING(self, &map->mFileName); + map->mPrecision = _ctmStreamReadFLOAT(self); + if(map->mPrecision <= 0.0f) + { + self->mError = CTM_BAD_FORMAT; + free((void *) intUVCoords); + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, intUVCoords, self->mVertexCount, 2, CTM_TRUE)) + { + free((void *) intUVCoords); + return CTM_FALSE; + } + + // Restore UV coordinates + _ctmRestoreUVCoords(self, map, intUVCoords); + + // Free temporary UV coordinate data + free((void *) intUVCoords); + + map = map->mNext; + } + + // Read vertex attribute maps + map = self->mAttribMaps; + while(map) + { + intAttribs = (CTMint *) malloc(sizeof(CTMint) * self->mVertexCount * 4); + if(!intAttribs) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + if(_ctmStreamReadUINT(self) != FOURCC("ATTR")) + { + self->mError = CTM_BAD_FORMAT; + free((void *) intAttribs); + return CTM_FALSE; + } + _ctmStreamReadSTRING(self, &map->mName); + map->mPrecision = _ctmStreamReadFLOAT(self); + if(map->mPrecision <= 0.0f) + { + self->mError = CTM_BAD_FORMAT; + free((void *) intAttribs); + return CTM_FALSE; + } + if(!_ctmStreamReadPackedInts(self, intAttribs, self->mVertexCount, 4, CTM_TRUE)) + { + free((void *) intAttribs); + return CTM_FALSE; + } + + // Restore vertex attributes + _ctmRestoreAttribs(self, map, intAttribs); + + // Free temporary vertex attribute data + free((void *) intAttribs); + + map = map->mNext; + } + + return CTM_TRUE; +} diff --git a/3rdparty/openctm/lib/compressRAW.c b/3rdparty/openctm/lib/compressRAW.c new file mode 100644 index 000000000..6b2052bf6 --- /dev/null +++ b/3rdparty/openctm/lib/compressRAW.c @@ -0,0 +1,181 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: compressRAW.c +// Description: Implementation of the RAW compression method. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include "openctm.h" +#include "internal.h" + +#ifdef __DEBUG_ +#include +#endif + + +//----------------------------------------------------------------------------- +// _ctmCompressMesh_RAW() - Compress the mesh that is stored in the CTM +// context using the RAW method, and write it the the output stream in the CTM +// context. +//----------------------------------------------------------------------------- +int _ctmCompressMesh_RAW(_CTMcontext * self) +{ + CTMuint i; + _CTMfloatmap * map; + +#ifdef __DEBUG_ + printf("COMPRESSION METHOD: RAW\n"); +#endif + + // Write triangle indices +#ifdef __DEBUG_ + printf("Inidices: %d bytes\n", (CTMuint)(self->mTriangleCount * 3 * sizeof(CTMuint))); +#endif + _ctmStreamWrite(self, (void *) "INDX", 4); + for(i = 0; i < self->mTriangleCount * 3; ++ i) + _ctmStreamWriteUINT(self, self->mIndices[i]); + + // Write vertices +#ifdef __DEBUG_ + printf("Vertices: %d bytes\n", (CTMuint)(self->mVertexCount * 3 * sizeof(CTMfloat))); +#endif + _ctmStreamWrite(self, (void *) "VERT", 4); + for(i = 0; i < self->mVertexCount * 3; ++ i) + _ctmStreamWriteFLOAT(self, self->mVertices[i]); + + // Write normals + if(self->mNormals) + { +#ifdef __DEBUG_ + printf("Normals: %d bytes\n", (CTMuint)(self->mVertexCount * 3 * sizeof(CTMfloat))); +#endif + _ctmStreamWrite(self, (void *) "NORM", 4); + for(i = 0; i < self->mVertexCount * 3; ++ i) + _ctmStreamWriteFLOAT(self, self->mNormals[i]); + } + + // Write UV maps + map = self->mUVMaps; + while(map) + { +#ifdef __DEBUG_ + printf("UV coordinates (%s): %d bytes\n", map->mName ? map->mName : "no name", (CTMuint)(self->mVertexCount * 2 * sizeof(CTMfloat))); +#endif + _ctmStreamWrite(self, (void *) "TEXC", 4); + _ctmStreamWriteSTRING(self, map->mName); + _ctmStreamWriteSTRING(self, map->mFileName); + for(i = 0; i < self->mVertexCount * 2; ++ i) + _ctmStreamWriteFLOAT(self, map->mValues[i]); + map = map->mNext; + } + + // Write attribute maps + map = self->mAttribMaps; + while(map) + { +#ifdef __DEBUG_ + printf("Vertex attributes (%s): %d bytes\n", map->mName ? map->mName : "no name", (CTMuint)(self->mVertexCount * 4 * sizeof(CTMfloat))); +#endif + _ctmStreamWrite(self, (void *) "ATTR", 4); + _ctmStreamWriteSTRING(self, map->mName); + for(i = 0; i < self->mVertexCount * 4; ++ i) + _ctmStreamWriteFLOAT(self, map->mValues[i]); + map = map->mNext; + } + + return 1; +} + +//----------------------------------------------------------------------------- +// _ctmUncompressMesh_RAW() - Uncmpress the mesh from the input stream in the +// CTM context using the RAW method, and store the resulting mesh in the CTM +// context. +//----------------------------------------------------------------------------- +int _ctmUncompressMesh_RAW(_CTMcontext * self) +{ + CTMuint i; + _CTMfloatmap * map; + + // Read triangle indices + if(_ctmStreamReadUINT(self) != FOURCC("INDX")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + for(i = 0; i < self->mTriangleCount * 3; ++ i) + self->mIndices[i] = _ctmStreamReadUINT(self); + + // Read vertices + if(_ctmStreamReadUINT(self) != FOURCC("VERT")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + for(i = 0; i < self->mVertexCount * 3; ++ i) + self->mVertices[i] = _ctmStreamReadFLOAT(self); + + // Read normals + if(self->mNormals) + { + if(_ctmStreamReadUINT(self) != FOURCC("NORM")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + for(i = 0; i < self->mVertexCount * 3; ++ i) + self->mNormals[i] = _ctmStreamReadFLOAT(self); + } + + // Read UV maps + map = self->mUVMaps; + while(map) + { + if(_ctmStreamReadUINT(self) != FOURCC("TEXC")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + _ctmStreamReadSTRING(self, &map->mName); + _ctmStreamReadSTRING(self, &map->mFileName); + for(i = 0; i < self->mVertexCount * 2; ++ i) + map->mValues[i] = _ctmStreamReadFLOAT(self); + map = map->mNext; + } + + // Read attribute maps + map = self->mAttribMaps; + while(map) + { + if(_ctmStreamReadUINT(self) != FOURCC("ATTR")) + { + self->mError = CTM_BAD_FORMAT; + return 0; + } + _ctmStreamReadSTRING(self, &map->mName); + for(i = 0; i < self->mVertexCount * 4; ++ i) + map->mValues[i] = _ctmStreamReadFLOAT(self); + map = map->mNext; + } + + return 1; +} diff --git a/3rdparty/openctm/lib/internal.h b/3rdparty/openctm/lib/internal.h new file mode 100644 index 000000000..67c9033d4 --- /dev/null +++ b/3rdparty/openctm/lib/internal.h @@ -0,0 +1,147 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: internal.h +// Description: Internal (private) declarations, types and function prototypes. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __OPENCTM_INTERNAL_H_ +#define __OPENCTM_INTERNAL_H_ + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- +// OpenCTM file format version (v5). +#define _CTM_FORMAT_VERSION 0x00000005 + +// Flags for the Mesh flags field of the file header +#define _CTM_HAS_NORMALS_BIT 0x00000001 + +//----------------------------------------------------------------------------- +// _CTMfloatmap - Internal representation of a floating point based vertex map +// (used for UV maps and attribute maps). +//----------------------------------------------------------------------------- +typedef struct _CTMfloatmap_struct _CTMfloatmap; +struct _CTMfloatmap_struct { + char * mName; // Unique name + char * mFileName; // File name reference (used only for UV maps) + CTMfloat mPrecision; // Precision for this map + CTMfloat * mValues; // Attribute/UV coordinate values (per vertex) + _CTMfloatmap * mNext; // Pointer to the next map in the list (linked list) +}; + +//----------------------------------------------------------------------------- +// _CTMcontext - Internal CTM context structure. +//----------------------------------------------------------------------------- +typedef struct { + // Context mode (import or export) + CTMenum mMode; + + // Vertices + CTMfloat * mVertices; + CTMuint mVertexCount; + + // Indices + CTMuint * mIndices; + CTMuint mTriangleCount; + + // Normals (optional) + CTMfloat * mNormals; + + // Multiple sets of UV coordinate maps (optional) + CTMuint mUVMapCount; + _CTMfloatmap * mUVMaps; + + // Multiple sets of custom vertex attribute maps (optional) + CTMuint mAttribMapCount; + _CTMfloatmap * mAttribMaps; + + // Last error code + CTMenum mError; + + // The selected compression method + CTMenum mMethod; + + // The selected compression level + CTMuint mCompressionLevel; + + // Vertex coordinate precision + CTMfloat mVertexPrecision; + + // Normal precision (angular + magnitude) + CTMfloat mNormalPrecision; + + // File comment + char * mFileComment; + + // Read() function pointer + CTMreadfn mReadFn; + + // Write() function pointer + CTMwritefn mWriteFn; + + // User data (for stream read/write - usually the stream handle) + void * mUserData; +} _CTMcontext; + +//----------------------------------------------------------------------------- +// Macros +//----------------------------------------------------------------------------- +#define FOURCC(str) (((CTMuint) str[0]) | (((CTMuint) str[1]) << 8) | \ + (((CTMuint) str[2]) << 16) | (((CTMuint) str[3]) << 24)) + +//----------------------------------------------------------------------------- +// Funcion prototypes for stream.c +//----------------------------------------------------------------------------- +CTMuint _ctmStreamRead(_CTMcontext * self, void * aBuf, CTMuint aCount); +CTMuint _ctmStreamWrite(_CTMcontext * self, void * aBuf, CTMuint aCount); +CTMuint _ctmStreamReadUINT(_CTMcontext * self); +void _ctmStreamWriteUINT(_CTMcontext * self, CTMuint aValue); +CTMfloat _ctmStreamReadFLOAT(_CTMcontext * self); +void _ctmStreamWriteFLOAT(_CTMcontext * self, CTMfloat aValue); +void _ctmStreamReadSTRING(_CTMcontext * self, char ** aValue); +void _ctmStreamWriteSTRING(_CTMcontext * self, const char * aValue); +int _ctmStreamReadPackedInts(_CTMcontext * self, CTMint * aData, CTMuint aCount, CTMuint aSize, CTMint aSignedInts); +int _ctmStreamWritePackedInts(_CTMcontext * self, CTMint * aData, CTMuint aCount, CTMuint aSize, CTMint aSignedInts); +int _ctmStreamReadPackedFloats(_CTMcontext * self, CTMfloat * aData, CTMuint aCount, CTMuint aSize); +int _ctmStreamWritePackedFloats(_CTMcontext * self, CTMfloat * aData, CTMuint aCount, CTMuint aSize); + +//----------------------------------------------------------------------------- +// Funcion prototypes for compressRAW.c +//----------------------------------------------------------------------------- +int _ctmCompressMesh_RAW(_CTMcontext * self); +int _ctmUncompressMesh_RAW(_CTMcontext * self); + +//----------------------------------------------------------------------------- +// Funcion prototypes for compressMG1.c +//----------------------------------------------------------------------------- +int _ctmCompressMesh_MG1(_CTMcontext * self); +int _ctmUncompressMesh_MG1(_CTMcontext * self); + +//----------------------------------------------------------------------------- +// Funcion prototypes for compressMG2.c +//----------------------------------------------------------------------------- +int _ctmCompressMesh_MG2(_CTMcontext * self); +int _ctmUncompressMesh_MG2(_CTMcontext * self); + +#endif // __OPENCTM_INTERNAL_H_ diff --git a/3rdparty/openctm/lib/liblzma/Alloc.c b/3rdparty/openctm/lib/liblzma/Alloc.c new file mode 100644 index 000000000..bb24a772b --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/Alloc.c @@ -0,0 +1,127 @@ +/* Alloc.c -- Memory allocation functions +2008-09-24 +Igor Pavlov +Public domain */ + +#ifdef _WIN32 +#include +#endif +#include + +#include "Alloc.h" + +/* #define _SZ_ALLOC_DEBUG */ + +/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ +#ifdef _SZ_ALLOC_DEBUG +#include +int g_allocCount = 0; +int g_allocCountMid = 0; +int g_allocCountBig = 0; +#endif + +void *MyAlloc(size_t size) +{ + if (size == 0) + return 0; + #ifdef _SZ_ALLOC_DEBUG + { + void *p = malloc(size); + fprintf(stderr, "\nAlloc %10d bytes, count = %10d, addr = %8X", size, g_allocCount++, (unsigned)p); + return p; + } + #else + return malloc(size); + #endif +} + +void MyFree(void *address) +{ + #ifdef _SZ_ALLOC_DEBUG + if (address != 0) + fprintf(stderr, "\nFree; count = %10d, addr = %8X", --g_allocCount, (unsigned)address); + #endif + free(address); +} + +#ifdef _WIN32 + +void *MidAlloc(size_t size) +{ + if (size == 0) + return 0; + #ifdef _SZ_ALLOC_DEBUG + fprintf(stderr, "\nAlloc_Mid %10d bytes; count = %10d", size, g_allocCountMid++); + #endif + return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); +} + +void MidFree(void *address) +{ + #ifdef _SZ_ALLOC_DEBUG + if (address != 0) + fprintf(stderr, "\nFree_Mid; count = %10d", --g_allocCountMid); + #endif + if (address == 0) + return; + VirtualFree(address, 0, MEM_RELEASE); +} + +#ifndef MEM_LARGE_PAGES +#undef _7ZIP_LARGE_PAGES +#endif + +#ifdef _7ZIP_LARGE_PAGES +SIZE_T g_LargePageSize = 0; +typedef SIZE_T (WINAPI *GetLargePageMinimumP)(); +#endif + +void SetLargePageSize() +{ + #ifdef _7ZIP_LARGE_PAGES + SIZE_T size = 0; + GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP) + GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum"); + if (largePageMinimum == 0) + return; + size = largePageMinimum(); + if (size == 0 || (size & (size - 1)) != 0) + return; + g_LargePageSize = size; + #endif +} + + +void *BigAlloc(size_t size) +{ + if (size == 0) + return 0; + #ifdef _SZ_ALLOC_DEBUG + fprintf(stderr, "\nAlloc_Big %10d bytes; count = %10d", size, g_allocCountBig++); + #endif + + #ifdef _7ZIP_LARGE_PAGES + if (g_LargePageSize != 0 && g_LargePageSize <= (1 << 30) && size >= (1 << 18)) + { + void *res = VirtualAlloc(0, (size + g_LargePageSize - 1) & (~(g_LargePageSize - 1)), + MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE); + if (res != 0) + return res; + } + #endif + return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); +} + +void BigFree(void *address) +{ + #ifdef _SZ_ALLOC_DEBUG + if (address != 0) + fprintf(stderr, "\nFree_Big; count = %10d", --g_allocCountBig); + #endif + + if (address == 0) + return; + VirtualFree(address, 0, MEM_RELEASE); +} + +#endif diff --git a/3rdparty/openctm/lib/liblzma/Alloc.h b/3rdparty/openctm/lib/liblzma/Alloc.h new file mode 100644 index 000000000..2f56fecaf --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/Alloc.h @@ -0,0 +1,34 @@ +/* Alloc.h -- Memory allocation functions +2008-03-13 +Igor Pavlov +Public domain */ + +#ifndef __COMMON_ALLOC_H +#define __COMMON_ALLOC_H + +#include + +#include "NameMangle.h" + +void *MyAlloc(size_t size); +void MyFree(void *address); + +#ifdef _WIN32 + +void SetLargePageSize(); + +void *MidAlloc(size_t size); +void MidFree(void *address); +void *BigAlloc(size_t size); +void BigFree(void *address); + +#else + +#define MidAlloc(size) MyAlloc(size) +#define MidFree(address) MyFree(address) +#define BigAlloc(size) MyAlloc(size) +#define BigFree(address) MyFree(address) + +#endif + +#endif diff --git a/3rdparty/openctm/lib/liblzma/LzFind.c b/3rdparty/openctm/lib/liblzma/LzFind.c new file mode 100644 index 000000000..e0ebe6235 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzFind.c @@ -0,0 +1,751 @@ +/* LzFind.c -- Match finder for LZ algorithms +2008-10-04 : Igor Pavlov : Public domain */ + +#include + +#include "LzFind.h" +#include "LzHash.h" + +#define kEmptyHashValue 0 +#define kMaxValForNormalize ((UInt32)0xFFFFFFFF) +#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */ +#define kNormalizeMask (~(kNormalizeStepMin - 1)) +#define kMaxHistorySize ((UInt32)3 << 30) + +#define kStartMaxLen 3 + +static void LzInWindow_Free(CMatchFinder *p, ISzAlloc *alloc) +{ + if (!p->directInput) + { + alloc->Free(alloc, p->bufferBase); + p->bufferBase = 0; + } +} + +/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */ + +static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAlloc *alloc) +{ + UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv; + if (p->directInput) + { + p->blockSize = blockSize; + return 1; + } + if (p->bufferBase == 0 || p->blockSize != blockSize) + { + LzInWindow_Free(p, alloc); + p->blockSize = blockSize; + p->bufferBase = (Byte *)alloc->Alloc(alloc, (size_t)blockSize); + } + return (p->bufferBase != 0); +} + +Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; } +Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 index) { return p->buffer[index]; } + +UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; } + +void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue) +{ + p->posLimit -= subValue; + p->pos -= subValue; + p->streamPos -= subValue; +} + +static void MatchFinder_ReadBlock(CMatchFinder *p) +{ + if (p->streamEndWasReached || p->result != SZ_OK) + return; + for (;;) + { + Byte *dest = p->buffer + (p->streamPos - p->pos); + size_t size = (p->bufferBase + p->blockSize - dest); + if (size == 0) + return; + p->result = p->stream->Read(p->stream, dest, &size); + if (p->result != SZ_OK) + return; + if (size == 0) + { + p->streamEndWasReached = 1; + return; + } + p->streamPos += (UInt32)size; + if (p->streamPos - p->pos > p->keepSizeAfter) + return; + } +} + +void MatchFinder_MoveBlock(CMatchFinder *p) +{ + memmove(p->bufferBase, + p->buffer - p->keepSizeBefore, + (size_t)(p->streamPos - p->pos + p->keepSizeBefore)); + p->buffer = p->bufferBase + p->keepSizeBefore; +} + +int MatchFinder_NeedMove(CMatchFinder *p) +{ + /* if (p->streamEndWasReached) return 0; */ + return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter); +} + +void MatchFinder_ReadIfRequired(CMatchFinder *p) +{ + if (p->streamEndWasReached) + return; + if (p->keepSizeAfter >= p->streamPos - p->pos) + MatchFinder_ReadBlock(p); +} + +static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p) +{ + if (MatchFinder_NeedMove(p)) + MatchFinder_MoveBlock(p); + MatchFinder_ReadBlock(p); +} + +static void MatchFinder_SetDefaultSettings(CMatchFinder *p) +{ + p->cutValue = 32; + p->btMode = 1; + p->numHashBytes = 4; + /* p->skipModeBits = 0; */ + p->directInput = 0; + p->bigHash = 0; +} + +#define kCrcPoly 0xEDB88320 + +void MatchFinder_Construct(CMatchFinder *p) +{ + UInt32 i; + p->bufferBase = 0; + p->directInput = 0; + p->hash = 0; + MatchFinder_SetDefaultSettings(p); + + for (i = 0; i < 256; i++) + { + UInt32 r = i; + int j; + for (j = 0; j < 8; j++) + r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); + p->crc[i] = r; + } +} + +static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->hash); + p->hash = 0; +} + +void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc) +{ + MatchFinder_FreeThisClassMemory(p, alloc); + LzInWindow_Free(p, alloc); +} + +static CLzRef* AllocRefs(UInt32 num, ISzAlloc *alloc) +{ + size_t sizeInBytes = (size_t)num * sizeof(CLzRef); + if (sizeInBytes / sizeof(CLzRef) != num) + return 0; + return (CLzRef *)alloc->Alloc(alloc, sizeInBytes); +} + +int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAlloc *alloc) +{ + UInt32 sizeReserv; + if (historySize > kMaxHistorySize) + { + MatchFinder_Free(p, alloc); + return 0; + } + sizeReserv = historySize >> 1; + if (historySize > ((UInt32)2 << 30)) + sizeReserv = historySize >> 2; + sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19); + + p->keepSizeBefore = historySize + keepAddBufferBefore + 1; + p->keepSizeAfter = matchMaxLen + keepAddBufferAfter; + /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */ + if (LzInWindow_Create(p, sizeReserv, alloc)) + { + UInt32 newCyclicBufferSize = (historySize /* >> p->skipModeBits */) + 1; + UInt32 hs; + p->matchMaxLen = matchMaxLen; + { + p->fixedHashSize = 0; + if (p->numHashBytes == 2) + hs = (1 << 16) - 1; + else + { + hs = historySize - 1; + hs |= (hs >> 1); + hs |= (hs >> 2); + hs |= (hs >> 4); + hs |= (hs >> 8); + hs >>= 1; + /* hs >>= p->skipModeBits; */ + hs |= 0xFFFF; /* don't change it! It's required for Deflate */ + if (hs > (1 << 24)) + { + if (p->numHashBytes == 3) + hs = (1 << 24) - 1; + else + hs >>= 1; + } + } + p->hashMask = hs; + hs++; + if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size; + if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size; + if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size; + hs += p->fixedHashSize; + } + + { + UInt32 prevSize = p->hashSizeSum + p->numSons; + UInt32 newSize; + p->historySize = historySize; + p->hashSizeSum = hs; + p->cyclicBufferSize = newCyclicBufferSize; + p->numSons = (p->btMode ? newCyclicBufferSize * 2 : newCyclicBufferSize); + newSize = p->hashSizeSum + p->numSons; + if (p->hash != 0 && prevSize == newSize) + return 1; + MatchFinder_FreeThisClassMemory(p, alloc); + p->hash = AllocRefs(newSize, alloc); + if (p->hash != 0) + { + p->son = p->hash + p->hashSizeSum; + return 1; + } + } + } + MatchFinder_Free(p, alloc); + return 0; +} + +static void MatchFinder_SetLimits(CMatchFinder *p) +{ + UInt32 limit = kMaxValForNormalize - p->pos; + UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos; + if (limit2 < limit) + limit = limit2; + limit2 = p->streamPos - p->pos; + if (limit2 <= p->keepSizeAfter) + { + if (limit2 > 0) + limit2 = 1; + } + else + limit2 -= p->keepSizeAfter; + if (limit2 < limit) + limit = limit2; + { + UInt32 lenLimit = p->streamPos - p->pos; + if (lenLimit > p->matchMaxLen) + lenLimit = p->matchMaxLen; + p->lenLimit = lenLimit; + } + p->posLimit = p->pos + limit; +} + +void MatchFinder_Init(CMatchFinder *p) +{ + UInt32 i; + for (i = 0; i < p->hashSizeSum; i++) + p->hash[i] = kEmptyHashValue; + p->cyclicBufferPos = 0; + p->buffer = p->bufferBase; + p->pos = p->streamPos = p->cyclicBufferSize; + p->result = SZ_OK; + p->streamEndWasReached = 0; + MatchFinder_ReadBlock(p); + MatchFinder_SetLimits(p); +} + +static UInt32 MatchFinder_GetSubValue(CMatchFinder *p) +{ + return (p->pos - p->historySize - 1) & kNormalizeMask; +} + +void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems) +{ + UInt32 i; + for (i = 0; i < numItems; i++) + { + UInt32 value = items[i]; + if (value <= subValue) + value = kEmptyHashValue; + else + value -= subValue; + items[i] = value; + } +} + +static void MatchFinder_Normalize(CMatchFinder *p) +{ + UInt32 subValue = MatchFinder_GetSubValue(p); + MatchFinder_Normalize3(subValue, p->hash, p->hashSizeSum + p->numSons); + MatchFinder_ReduceOffsets(p, subValue); +} + +static void MatchFinder_CheckLimits(CMatchFinder *p) +{ + if (p->pos == kMaxValForNormalize) + MatchFinder_Normalize(p); + if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos) + MatchFinder_CheckAndMoveAndRead(p); + if (p->cyclicBufferPos == p->cyclicBufferSize) + p->cyclicBufferPos = 0; + MatchFinder_SetLimits(p); +} + +static UInt32 * Hc_GetMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *distances, UInt32 maxLen) +{ + son[_cyclicBufferPos] = curMatch; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + return distances; + { + const Byte *pb = cur - delta; + curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; + if (pb[maxLen] == cur[maxLen] && *pb == *cur) + { + UInt32 len = 0; + while (++len != lenLimit) + if (pb[len] != cur[len]) + break; + if (maxLen < len) + { + *distances++ = maxLen = len; + *distances++ = delta - 1; + if (len == lenLimit) + return distances; + } + } + } + } +} + +UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *distances, UInt32 maxLen) +{ + CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; + CLzRef *ptr1 = son + (_cyclicBufferPos << 1); + UInt32 len0 = 0, len1 = 0; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + { + *ptr0 = *ptr1 = kEmptyHashValue; + return distances; + } + { + CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); + const Byte *pb = cur - delta; + UInt32 len = (len0 < len1 ? len0 : len1); + if (pb[len] == cur[len]) + { + if (++len != lenLimit && pb[len] == cur[len]) + while (++len != lenLimit) + if (pb[len] != cur[len]) + break; + if (maxLen < len) + { + *distances++ = maxLen = len; + *distances++ = delta - 1; + if (len == lenLimit) + { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return distances; + } + } + } + if (pb[len] < cur[len]) + { + *ptr1 = curMatch; + ptr1 = pair + 1; + curMatch = *ptr1; + len1 = len; + } + else + { + *ptr0 = curMatch; + ptr0 = pair; + curMatch = *ptr0; + len0 = len; + } + } + } +} + +static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue) +{ + CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; + CLzRef *ptr1 = son + (_cyclicBufferPos << 1); + UInt32 len0 = 0, len1 = 0; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + { + *ptr0 = *ptr1 = kEmptyHashValue; + return; + } + { + CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); + const Byte *pb = cur - delta; + UInt32 len = (len0 < len1 ? len0 : len1); + if (pb[len] == cur[len]) + { + while (++len != lenLimit) + if (pb[len] != cur[len]) + break; + { + if (len == lenLimit) + { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return; + } + } + } + if (pb[len] < cur[len]) + { + *ptr1 = curMatch; + ptr1 = pair + 1; + curMatch = *ptr1; + len1 = len; + } + else + { + *ptr0 = curMatch; + ptr0 = pair; + curMatch = *ptr0; + len0 = len; + } + } + } +} + +#define MOVE_POS \ + ++p->cyclicBufferPos; \ + p->buffer++; \ + if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p); + +#define MOVE_POS_RET MOVE_POS return offset; + +static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; } + +#define GET_MATCHES_HEADER2(minLen, ret_op) \ + UInt32 lenLimit; UInt32 hashValue; const Byte *cur; UInt32 curMatch; \ + lenLimit = p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \ + cur = p->buffer; + +#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0) +#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue) + +#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue + +#define GET_MATCHES_FOOTER(offset, maxLen) \ + offset = (UInt32)(GetMatchesSpec1(lenLimit, curMatch, MF_PARAMS(p), \ + distances + offset, maxLen) - distances); MOVE_POS_RET; + +#define SKIP_FOOTER \ + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS; + +static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(2) + HASH2_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = 0; + GET_MATCHES_FOOTER(offset, 1) +} + +UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = 0; + GET_MATCHES_FOOTER(offset, 2) +} + +static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, delta2, maxLen, offset; + GET_MATCHES_HEADER(3) + + HASH3_CALC; + + delta2 = p->pos - p->hash[hash2Value]; + curMatch = p->hash[kFix3HashSize + hashValue]; + + p->hash[hash2Value] = + p->hash[kFix3HashSize + hashValue] = p->pos; + + + maxLen = 2; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[0] = maxLen; + distances[1] = delta2 - 1; + offset = 2; + if (maxLen == lenLimit) + { + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); + MOVE_POS_RET; + } + } + GET_MATCHES_FOOTER(offset, maxLen) +} + +static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; + GET_MATCHES_HEADER(4) + + HASH4_CALC; + + delta2 = p->pos - p->hash[ hash2Value]; + delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; + curMatch = p->hash[kFix4HashSize + hashValue]; + + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + + maxLen = 1; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + distances[0] = maxLen = 2; + distances[1] = delta2 - 1; + offset = 2; + } + if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) + { + maxLen = 3; + distances[offset + 1] = delta3 - 1; + offset += 2; + delta2 = delta3; + } + if (offset != 0) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[offset - 2] = maxLen; + if (maxLen == lenLimit) + { + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); + MOVE_POS_RET; + } + } + if (maxLen < 3) + maxLen = 3; + GET_MATCHES_FOOTER(offset, maxLen) +} + +static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; + GET_MATCHES_HEADER(4) + + HASH4_CALC; + + delta2 = p->pos - p->hash[ hash2Value]; + delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; + curMatch = p->hash[kFix4HashSize + hashValue]; + + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + + maxLen = 1; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + distances[0] = maxLen = 2; + distances[1] = delta2 - 1; + offset = 2; + } + if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) + { + maxLen = 3; + distances[offset + 1] = delta3 - 1; + offset += 2; + delta2 = delta3; + } + if (offset != 0) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[offset - 2] = maxLen; + if (maxLen == lenLimit) + { + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS_RET; + } + } + if (maxLen < 3) + maxLen = 3; + offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), + distances + offset, maxLen) - (distances)); + MOVE_POS_RET +} + +UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), + distances, 2) - (distances)); + MOVE_POS_RET +} + +static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(2) + HASH2_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value; + SKIP_HEADER(3) + HASH3_CALC; + curMatch = p->hash[kFix3HashSize + hashValue]; + p->hash[hash2Value] = + p->hash[kFix3HashSize + hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value, hash3Value; + SKIP_HEADER(4) + HASH4_CALC; + curMatch = p->hash[kFix4HashSize + hashValue]; + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = p->pos; + p->hash[kFix4HashSize + hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value, hash3Value; + SKIP_HEADER(4) + HASH4_CALC; + curMatch = p->hash[kFix4HashSize + hashValue]; + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS + } + while (--num != 0); +} + +void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS + } + while (--num != 0); +} + +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable) +{ + vTable->Init = (Mf_Init_Func)MatchFinder_Init; + vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinder_GetIndexByte; + vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes; + vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos; + if (!p->btMode) + { + vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip; + } + else if (p->numHashBytes == 2) + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip; + } + else if (p->numHashBytes == 3) + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip; + } + else + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip; + } +} diff --git a/3rdparty/openctm/lib/liblzma/LzFind.h b/3rdparty/openctm/lib/liblzma/LzFind.h new file mode 100644 index 000000000..423d67e0c --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzFind.h @@ -0,0 +1,107 @@ +/* LzFind.h -- Match finder for LZ algorithms +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZFIND_H +#define __LZFIND_H + +#include "Types.h" + +typedef UInt32 CLzRef; + +typedef struct _CMatchFinder +{ + Byte *buffer; + UInt32 pos; + UInt32 posLimit; + UInt32 streamPos; + UInt32 lenLimit; + + UInt32 cyclicBufferPos; + UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */ + + UInt32 matchMaxLen; + CLzRef *hash; + CLzRef *son; + UInt32 hashMask; + UInt32 cutValue; + + Byte *bufferBase; + ISeqInStream *stream; + int streamEndWasReached; + + UInt32 blockSize; + UInt32 keepSizeBefore; + UInt32 keepSizeAfter; + + UInt32 numHashBytes; + int directInput; + int btMode; + /* int skipModeBits; */ + int bigHash; + UInt32 historySize; + UInt32 fixedHashSize; + UInt32 hashSizeSum; + UInt32 numSons; + SRes result; + UInt32 crc[256]; +} CMatchFinder; + +#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer) +#define Inline_MatchFinder_GetIndexByte(p, index) ((p)->buffer[(Int32)(index)]) + +#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos) + +int MatchFinder_NeedMove(CMatchFinder *p); +Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p); +void MatchFinder_MoveBlock(CMatchFinder *p); +void MatchFinder_ReadIfRequired(CMatchFinder *p); + +void MatchFinder_Construct(CMatchFinder *p); + +/* Conditions: + historySize <= 3 GB + keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB +*/ +int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAlloc *alloc); +void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc); +void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems); +void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue); + +UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue, + UInt32 *distances, UInt32 maxLen); + +/* +Conditions: + Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func. + Mf_GetPointerToCurrentPos_Func's result must be used only before any other function +*/ + +typedef void (*Mf_Init_Func)(void *object); +typedef Byte (*Mf_GetIndexByte_Func)(void *object, Int32 index); +typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object); +typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object); +typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances); +typedef void (*Mf_Skip_Func)(void *object, UInt32); + +typedef struct _IMatchFinder +{ + Mf_Init_Func Init; + Mf_GetIndexByte_Func GetIndexByte; + Mf_GetNumAvailableBytes_Func GetNumAvailableBytes; + Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos; + Mf_GetMatches_Func GetMatches; + Mf_Skip_Func Skip; +} IMatchFinder; + +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable); + +void MatchFinder_Init(CMatchFinder *p); +UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); +UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); +void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); +void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); + +#endif diff --git a/3rdparty/openctm/lib/liblzma/LzHash.h b/3rdparty/openctm/lib/liblzma/LzHash.h new file mode 100644 index 000000000..c92341750 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzHash.h @@ -0,0 +1,54 @@ +/* LzHash.h -- HASH functions for LZ algorithms +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZHASH_H +#define __LZHASH_H + +#define kHash2Size (1 << 10) +#define kHash3Size (1 << 16) +#define kHash4Size (1 << 20) + +#define kFix3HashSize (kHash2Size) +#define kFix4HashSize (kHash2Size + kHash3Size) +#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size) + +#define HASH2_CALC hashValue = cur[0] | ((UInt32)cur[1] << 8); + +#define HASH3_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hashValue = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; } + +#define HASH4_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ + hashValue = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & p->hashMask; } + +#define HASH5_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ + hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)); \ + hashValue = (hash4Value ^ (p->crc[cur[4]] << 3)) & p->hashMask; \ + hash4Value &= (kHash4Size - 1); } + +/* #define HASH_ZIP_CALC hashValue = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */ +#define HASH_ZIP_CALC hashValue = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF; + + +#define MT_HASH2_CALC \ + hash2Value = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1); + +#define MT_HASH3_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); } + +#define MT_HASH4_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ + hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); } + +#endif diff --git a/3rdparty/openctm/lib/liblzma/LzmaDec.c b/3rdparty/openctm/lib/liblzma/LzmaDec.c new file mode 100644 index 000000000..eb5250174 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzmaDec.c @@ -0,0 +1,1007 @@ +/* LzmaDec.c -- LZMA Decoder +2008-11-06 : Igor Pavlov : Public domain */ + +#include "LzmaDec.h" + +#include + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } +#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) + +#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 768 + +#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + +#if Literal != LZMA_BASE_SIZE +StopCompilingDueBUG +#endif + +static const Byte kLiteralNextStates[kNumStates * 2] = +{ + 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5, + 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10 +}; + +#define LZMA_DIC_MIN (1 << 12) + +/* First LZMA-symbol is always decoded. +And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization +Out: + Result: + SZ_OK - OK + SZ_ERROR_DATA - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : Flush marker + = kMatchSpecLenStart + 2 : State Init Marker +*/ + +static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = p->probs; + + unsigned state = p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; + unsigned lc = p->prop.lc; + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = processedPos & pbMask; + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (checkDicSize != 0 || processedPos != 0) + prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); + + if (state < kNumLitStates) + { + symbol = 1; + do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + unsigned offs = 0x100; + symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + dic[dicPos++] = (Byte)symbol; + processedPos++; + + state = kLiteralNextStates[state]; + /* if (state < 4) state = 0; else if (state < 10) state -= 3; else state -= 6; */ + continue; + } + else + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = (1 << kLenNumMidBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, limit, len); + len += offset; + } + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + int numDirectBits = (int)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos + distance - posSlot - 1; + { + UInt32 mask = 1; + unsigned i = 1; + do + { + GET_BIT2(prob + i, i, ; , distance |= mask); + mask <<= 1; + } + while (--numDirectBits != 0); + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits != 0); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + GET_BIT2(prob + i, i, ; , distance |= 1); + GET_BIT2(prob + i, i, ; , distance |= 2); + GET_BIT2(prob + i, i, ; , distance |= 4); + GET_BIT2(prob + i, i, ; , distance |= 8); + } + if (distance == (UInt32)0xFFFFFFFF) + { + len += kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + if (checkDicSize == 0) + { + if (distance >= processedPos) + return SZ_ERROR_DATA; + } + else if (distance >= checkDicSize) + return SZ_ERROR_DATA; + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + /* state = kLiteralNextStates[state]; */ + } + + len += kMatchMinLen; + + if (limit == dicPos) + return SZ_ERROR_DATA; + { + SizeT rem = limit - dicPos; + unsigned curLen = ((rem < len) ? (unsigned)rem : len); + SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (pos + curLen <= dicBufSize) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + NORMALIZE; + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = p->remainLen; + UInt32 rep0 = p->reps[0]; + if (limit - dicPos < len) + len = (unsigned)(limit - dicPos); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len-- != 0) + { + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + } + RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); + if (p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + if (p->remainLen > kMatchSpecLenStart) + { + p->remainLen = kMatchSpecLenStart; + } + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + CLzmaProb *probs = p->probs; + unsigned state = p->state; + ELzmaDummy res; + + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += (LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumMidBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + int numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits != 0); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + do + { + GET_BIT_CHECK(prob + i, i); + } + while (--numDirectBits != 0); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +static void LzmaDec_InitRc(CLzmaDec *p, const Byte *data) +{ + p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]); + p->range = 0xFFFFFFFF; + p->needFlush = 0; +} + +void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->needFlush = 1; + p->remainLen = 0; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->needInitState = 1; + } + if (initState) + p->needInitState = 1; +} + +void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + +static void LzmaDec_InitStateReal(CLzmaDec *p) +{ + UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp)); + UInt32 i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + p->needInitState = 0; +} + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + LzmaDec_WriteRem(p, dicLimit); + + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow; + + if (p->needFlush != 0) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + + LzmaDec_InitRc(p, p->tempBuf); + p->tempBufSize = 0; + } + + checkEndMarkNow = 0; + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->needInitState) + LzmaDec_InitStateReal(p); + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = (SizeT)(p->buf - src); + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf)); + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + if (p->code == 0) + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; +} + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT outSize = *destLen; + SizeT inSize = *srcLen; + *srcLen = *destLen = 0; + for (;;) + { + SizeT inSizeCur = inSize, outSizeCur, dicPos; + ELzmaFinishMode curFinishMode; + SRes res; + if (p->dicPos == p->dicBufSize) + p->dicPos = 0; + dicPos = p->dicPos; + if (outSize > p->dicBufSize - dicPos) + { + outSizeCur = p->dicBufSize; + curFinishMode = LZMA_FINISH_ANY; + } + else + { + outSizeCur = dicPos + outSize; + curFinishMode = finishMode; + } + + res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); + src += inSizeCur; + inSize -= inSizeCur; + *srcLen += inSizeCur; + outSizeCur = p->dicPos - dicPos; + memcpy(dest, p->dic + dicPos, outSizeCur); + dest += outSizeCur; + outSize -= outSizeCur; + *destLen += outSizeCur; + if (res != 0) + return res; + if (outSizeCur == 0 || outSize == 0) + return SZ_OK; + } +} + +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->probs); + p->probs = 0; +} + +static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->dic); + p->dic = 0; +} + +void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc) +{ + LzmaDec_FreeProbs(p, alloc); + LzmaDec_FreeDict(p, alloc); +} + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = d % 9; + d /= 9; + p->pb = d / 5; + p->lp = d % 5; + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (p->probs == 0 || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); + p->numProbs = numProbs; + if (p->probs == 0) + return SZ_ERROR_MEM; + } + return SZ_OK; +} + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + SizeT dicBufSize; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + dicBufSize = propNew.dicSize; + if (p->dic == 0 || dicBufSize != p->dicBufSize) + { + LzmaDec_FreeDict(p, alloc); + p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize); + if (p->dic == 0) + { + LzmaDec_FreeProbs(p, alloc); + return SZ_ERROR_MEM; + } + } + p->dicBufSize = dicBufSize; + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc) +{ + CLzmaDec p; + SRes res; + SizeT inSize = *srcLen; + SizeT outSize = *destLen; + *srcLen = *destLen = 0; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; + + LzmaDec_Construct(&p); + res = LzmaDec_AllocateProbs(&p, propData, propSize, alloc); + if (res != 0) + return res; + p.dic = dest; + p.dicBufSize = outSize; + + LzmaDec_Init(&p); + + *srcLen = inSize; + res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); + + if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) + res = SZ_ERROR_INPUT_EOF; + + (*destLen) = p.dicPos; + LzmaDec_FreeProbs(&p, alloc); + return res; +} diff --git a/3rdparty/openctm/lib/liblzma/LzmaDec.h b/3rdparty/openctm/lib/liblzma/LzmaDec.h new file mode 100644 index 000000000..ad7d7057a --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzmaDec.h @@ -0,0 +1,223 @@ +/* LzmaDec.h -- LZMA Decoder +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZMADEC_H +#define __LZMADEC_H + +#include "Types.h" + +/* #define _LZMA_PROB32 */ +/* _LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + + +/* ---------- LZMA Properties ---------- */ + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaProps +{ + unsigned lc, lp, pb; + UInt32 dicSize; +} CLzmaProps; + +/* LzmaProps_Decode - decodes properties +Returns: + SZ_OK + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); + + +/* ---------- LZMA Decoder state ---------- */ + +/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. + Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ + +#define LZMA_REQUIRED_INPUT_MAX 20 + +typedef struct +{ + CLzmaProps prop; + CLzmaProb *probs; + Byte *dic; + const Byte *buf; + UInt32 range, code; + SizeT dicPos; + SizeT dicBufSize; + UInt32 processedPos; + UInt32 checkDicSize; + unsigned state; + UInt32 reps[4]; + unsigned remainLen; + int needFlush; + int needInitState; + UInt32 numProbs; + unsigned tempBufSize; + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; +} CLzmaDec; + +#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; } + +void LzmaDec_Init(CLzmaDec *p); + +/* There are two types of LZMA streams: + 0) Stream with end mark. That end mark adds about 6 bytes to compressed size. + 1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */ + +typedef enum +{ + LZMA_FINISH_ANY, /* finish at any point */ + LZMA_FINISH_END /* block must be finished at the end */ +} ELzmaFinishMode; + +/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! + + You must use LZMA_FINISH_END, when you know that current output buffer + covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. + + If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, + and output value of destLen will be less than output buffer size limit. + You can check status result also. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + +typedef enum +{ + LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ + LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ + LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ + LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ +} ELzmaStatus; + +/* ELzmaStatus is used only as output value for function call */ + + +/* ---------- Interfaces ---------- */ + +/* There are 3 levels of interfaces: + 1) Dictionary Interface + 2) Buffer Interface + 3) One Call Interface + You can select any of these interfaces, but don't mix functions from different + groups for same object. */ + + +/* There are two variants to allocate state for Dictionary Interface: + 1) LzmaDec_Allocate / LzmaDec_Free + 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs + You can use variant 2, if you set dictionary buffer manually. + For Buffer Interface you must always use variant 1. + +LzmaDec_Allocate* can return: + SZ_OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc); + +SRes LzmaDec_Allocate(CLzmaDec *state, const Byte *prop, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_Free(CLzmaDec *state, ISzAlloc *alloc); + +/* ---------- Dictionary Interface ---------- */ + +/* You can use it, if you want to eliminate the overhead for data copying from + dictionary to some other external buffer. + You must work with CLzmaDec variables directly in this interface. + + STEPS: + LzmaDec_Constr() + LzmaDec_Allocate() + for (each new stream) + { + LzmaDec_Init() + while (it needs more decompression) + { + LzmaDec_DecodeToDic() + use data from CLzmaDec::dic and update CLzmaDec::dicPos + } + } + LzmaDec_Free() +*/ + +/* LzmaDec_DecodeToDic + + The decoding to internal dictionary buffer (CLzmaDec::dic). + You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! + +finishMode: + It has meaning only if the decoding reaches output limit (dicLimit). + LZMA_FINISH_ANY - Decode just dicLimit bytes. + LZMA_FINISH_END - Stream must be finished after dicLimit. + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error +*/ + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- Buffer Interface ---------- */ + +/* It's zlib-like interface. + See LzmaDec_DecodeToDic description for information about STEPS and return results, + but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need + to work with CLzmaDec variables manually. + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). +*/ + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- One Call Interface ---------- */ + +/* LzmaDecode + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). +*/ + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc); + +#endif diff --git a/3rdparty/openctm/lib/liblzma/LzmaEnc.c b/3rdparty/openctm/lib/liblzma/LzmaEnc.c new file mode 100644 index 000000000..2f59851b1 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzmaEnc.c @@ -0,0 +1,2281 @@ +/* LzmaEnc.c -- LZMA Encoder +2009-02-02 : Igor Pavlov : Public domain */ + +#include + +/* #define SHOW_STAT */ +/* #define SHOW_STAT2 */ + +#if defined(SHOW_STAT) || defined(SHOW_STAT2) +#include +#endif + +#include "LzmaEnc.h" + +#include "LzFind.h" +#ifdef COMPRESS_MF_MT +#include "LzFindMt.h" +#endif + +#ifdef SHOW_STAT +static int ttt = 0; +#endif + +#define kBlockSizeMax ((1 << LZMA_NUM_BLOCK_SIZE_BITS) - 1) + +#define kBlockSize (9 << 10) +#define kUnpackBlockSize (1 << 18) +#define kMatchArraySize (1 << 21) +#define kMatchRecordMaxSize ((LZMA_MATCH_LEN_MAX * 2 + 3) * LZMA_MATCH_LEN_MAX) + +#define kNumMaxDirectBits (31) + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 +#define kProbInitValue (kBitModelTotal >> 1) + +#define kNumMoveReducingBits 4 +#define kNumBitPriceShiftBits 4 +#define kBitPrice (1 << kNumBitPriceShiftBits) + +void LzmaEncProps_Init(CLzmaEncProps *p) +{ + p->level = 5; + p->dictSize = p->mc = 0; + p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1; + p->writeEndMark = 0; +} + +void LzmaEncProps_Normalize(CLzmaEncProps *p) +{ + int level = p->level; + if (level < 0) level = 5; + p->level = level; + if (p->dictSize == 0) p->dictSize = (level <= 5 ? (1 << (level * 2 + 14)) : (level == 6 ? (1 << 25) : (1 << 26))); + if (p->lc < 0) p->lc = 3; + if (p->lp < 0) p->lp = 0; + if (p->pb < 0) p->pb = 2; + if (p->algo < 0) p->algo = (level < 5 ? 0 : 1); + if (p->fb < 0) p->fb = (level < 7 ? 32 : 64); + if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1); + if (p->numHashBytes < 0) p->numHashBytes = 4; + if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1); + if (p->numThreads < 0) + p->numThreads = + #ifdef COMPRESS_MF_MT + ((p->btMode && p->algo) ? 2 : 1); + #else + 1; + #endif +} + +UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2) +{ + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + return props.dictSize; +} + +/* #define LZMA_LOG_BSR */ +/* Define it for Intel's CPU */ + + +#ifdef LZMA_LOG_BSR + +#define kDicLogSizeMaxCompress 30 + +#define BSR2_RET(pos, res) { unsigned long i; _BitScanReverse(&i, (pos)); res = (i + i) + ((pos >> (i - 1)) & 1); } + +static UInt32 GetPosSlot1(UInt32 pos) +{ + UInt32 res; + BSR2_RET(pos, res); + return res; +} +#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } +#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); } + +#else + +#define kNumLogBits (9 + (int)sizeof(size_t) / 2) +#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7) + +void LzmaEnc_FastPosInit(Byte *g_FastPos) +{ + int c = 2, slotFast; + g_FastPos[0] = 0; + g_FastPos[1] = 1; + + for (slotFast = 2; slotFast < kNumLogBits * 2; slotFast++) + { + UInt32 k = (1 << ((slotFast >> 1) - 1)); + UInt32 j; + for (j = 0; j < k; j++, c++) + g_FastPos[c] = (Byte)slotFast; + } +} + +#define BSR2_RET(pos, res) { UInt32 i = 6 + ((kNumLogBits - 1) & \ + (0 - (((((UInt32)1 << (kNumLogBits + 6)) - 1) - pos) >> 31))); \ + res = p->g_FastPos[pos >> i] + (i * 2); } +/* +#define BSR2_RET(pos, res) { res = (pos < (1 << (kNumLogBits + 6))) ? \ + p->g_FastPos[pos >> 6] + 12 : \ + p->g_FastPos[pos >> (6 + kNumLogBits - 1)] + (6 + (kNumLogBits - 1)) * 2; } +*/ + +#define GetPosSlot1(pos) p->g_FastPos[pos] +#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } +#define GetPosSlot(pos, res) { if (pos < kNumFullDistances) res = p->g_FastPos[pos]; else BSR2_RET(pos, res); } + +#endif + + +#define LZMA_NUM_REPS 4 + +typedef unsigned CState; + +typedef struct _COptimal +{ + UInt32 price; + + CState state; + int prev1IsChar; + int prev2; + + UInt32 posPrev2; + UInt32 backPrev2; + + UInt32 posPrev; + UInt32 backPrev; + UInt32 backs[LZMA_NUM_REPS]; +} COptimal; + +#define kNumOpts (1 << 12) + +#define kNumLenToPosStates 4 +#define kNumPosSlotBits 6 +#define kDicLogSizeMin 0 +#define kDicLogSizeMax 32 +#define kDistTableSizeMax (kDicLogSizeMax * 2) + + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) +#define kAlignMask (kAlignTableSize - 1) + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumPosModels (kEndPosModelIndex - kStartPosModelIndex) + +#define kNumFullDistances (1 << (kEndPosModelIndex / 2)) + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + +#define LZMA_PB_MAX 4 +#define LZMA_LC_MAX 8 +#define LZMA_LP_MAX 4 + +#define LZMA_NUM_PB_STATES_MAX (1 << LZMA_PB_MAX) + + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define kLenNumSymbolsTotal (kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define LZMA_MATCH_LEN_MIN 2 +#define LZMA_MATCH_LEN_MAX (LZMA_MATCH_LEN_MIN + kLenNumSymbolsTotal - 1) + +#define kNumStates 12 + +typedef struct +{ + CLzmaProb choice; + CLzmaProb choice2; + CLzmaProb low[LZMA_NUM_PB_STATES_MAX << kLenNumLowBits]; + CLzmaProb mid[LZMA_NUM_PB_STATES_MAX << kLenNumMidBits]; + CLzmaProb high[kLenNumHighSymbols]; +} CLenEnc; + +typedef struct +{ + CLenEnc p; + UInt32 prices[LZMA_NUM_PB_STATES_MAX][kLenNumSymbolsTotal]; + UInt32 tableSize; + UInt32 counters[LZMA_NUM_PB_STATES_MAX]; +} CLenPriceEnc; + +typedef struct _CRangeEnc +{ + UInt32 range; + Byte cache; + UInt64 low; + UInt64 cacheSize; + Byte *buf; + Byte *bufLim; + Byte *bufBase; + ISeqOutStream *outStream; + UInt64 processed; + SRes res; +} CRangeEnc; + +typedef struct _CSeqInStreamBuf +{ + ISeqInStream funcTable; + const Byte *data; + SizeT rem; +} CSeqInStreamBuf; + +static SRes MyRead(void *pp, void *data, size_t *size) +{ + size_t curSize = *size; + CSeqInStreamBuf *p = (CSeqInStreamBuf *)pp; + if (p->rem < curSize) + curSize = p->rem; + memcpy(data, p->data, curSize); + p->rem -= curSize; + p->data += curSize; + *size = curSize; + return SZ_OK; +} + +typedef struct +{ + CLzmaProb *litProbs; + + CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; + CLzmaProb isRep[kNumStates]; + CLzmaProb isRepG0[kNumStates]; + CLzmaProb isRepG1[kNumStates]; + CLzmaProb isRepG2[kNumStates]; + CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; + + CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; + CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; + CLzmaProb posAlignEncoder[1 << kNumAlignBits]; + + CLenPriceEnc lenEnc; + CLenPriceEnc repLenEnc; + + UInt32 reps[LZMA_NUM_REPS]; + UInt32 state; +} CSaveState; + +typedef struct _CLzmaEnc +{ + IMatchFinder matchFinder; + void *matchFinderObj; + + #ifdef COMPRESS_MF_MT + Bool mtMode; + CMatchFinderMt matchFinderMt; + #endif + + CMatchFinder matchFinderBase; + + #ifdef COMPRESS_MF_MT + Byte pad[128]; + #endif + + UInt32 optimumEndIndex; + UInt32 optimumCurrentIndex; + + UInt32 longestMatchLength; + UInt32 numPairs; + UInt32 numAvail; + COptimal opt[kNumOpts]; + + #ifndef LZMA_LOG_BSR + Byte g_FastPos[1 << kNumLogBits]; + #endif + + UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; + UInt32 matches[LZMA_MATCH_LEN_MAX * 2 + 2 + 1]; + UInt32 numFastBytes; + UInt32 additionalOffset; + UInt32 reps[LZMA_NUM_REPS]; + UInt32 state; + + UInt32 posSlotPrices[kNumLenToPosStates][kDistTableSizeMax]; + UInt32 distancesPrices[kNumLenToPosStates][kNumFullDistances]; + UInt32 alignPrices[kAlignTableSize]; + UInt32 alignPriceCount; + + UInt32 distTableSize; + + unsigned lc, lp, pb; + unsigned lpMask, pbMask; + + CLzmaProb *litProbs; + + CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; + CLzmaProb isRep[kNumStates]; + CLzmaProb isRepG0[kNumStates]; + CLzmaProb isRepG1[kNumStates]; + CLzmaProb isRepG2[kNumStates]; + CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; + + CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; + CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; + CLzmaProb posAlignEncoder[1 << kNumAlignBits]; + + CLenPriceEnc lenEnc; + CLenPriceEnc repLenEnc; + + unsigned lclp; + + Bool fastMode; + + CRangeEnc rc; + + Bool writeEndMark; + UInt64 nowPos64; + UInt32 matchPriceCount; + Bool finished; + Bool multiThread; + + SRes result; + UInt32 dictSize; + UInt32 matchFinderCycles; + + ISeqInStream *inStream; + CSeqInStreamBuf seqBufInStream; + + CSaveState saveState; +} CLzmaEnc; + +void LzmaEnc_SaveState(CLzmaEncHandle pp) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + CSaveState *dest = &p->saveState; + int i; + dest->lenEnc = p->lenEnc; + dest->repLenEnc = p->repLenEnc; + dest->state = p->state; + + for (i = 0; i < kNumStates; i++) + { + memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i])); + memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i])); + } + for (i = 0; i < kNumLenToPosStates; i++) + memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i])); + memcpy(dest->isRep, p->isRep, sizeof(p->isRep)); + memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0)); + memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1)); + memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2)); + memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders)); + memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder)); + memcpy(dest->reps, p->reps, sizeof(p->reps)); + memcpy(dest->litProbs, p->litProbs, (0x300 << p->lclp) * sizeof(CLzmaProb)); +} + +void LzmaEnc_RestoreState(CLzmaEncHandle pp) +{ + CLzmaEnc *dest = (CLzmaEnc *)pp; + const CSaveState *p = &dest->saveState; + int i; + dest->lenEnc = p->lenEnc; + dest->repLenEnc = p->repLenEnc; + dest->state = p->state; + + for (i = 0; i < kNumStates; i++) + { + memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i])); + memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i])); + } + for (i = 0; i < kNumLenToPosStates; i++) + memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i])); + memcpy(dest->isRep, p->isRep, sizeof(p->isRep)); + memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0)); + memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1)); + memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2)); + memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders)); + memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder)); + memcpy(dest->reps, p->reps, sizeof(p->reps)); + memcpy(dest->litProbs, p->litProbs, (0x300 << dest->lclp) * sizeof(CLzmaProb)); +} + +SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + + if (props.lc > LZMA_LC_MAX || props.lp > LZMA_LP_MAX || props.pb > LZMA_PB_MAX || + props.dictSize > (1U << kDicLogSizeMaxCompress) || props.dictSize > (1U << 30)) + return SZ_ERROR_PARAM; + p->dictSize = props.dictSize; + p->matchFinderCycles = props.mc; + { + unsigned fb = props.fb; + if (fb < 5) + fb = 5; + if (fb > LZMA_MATCH_LEN_MAX) + fb = LZMA_MATCH_LEN_MAX; + p->numFastBytes = fb; + } + p->lc = props.lc; + p->lp = props.lp; + p->pb = props.pb; + p->fastMode = (props.algo == 0); + p->matchFinderBase.btMode = props.btMode; + { + UInt32 numHashBytes = 4; + if (props.btMode) + { + if (props.numHashBytes < 2) + numHashBytes = 2; + else if (props.numHashBytes < 4) + numHashBytes = props.numHashBytes; + } + p->matchFinderBase.numHashBytes = numHashBytes; + } + + p->matchFinderBase.cutValue = props.mc; + + p->writeEndMark = props.writeEndMark; + + #ifdef COMPRESS_MF_MT + /* + if (newMultiThread != _multiThread) + { + ReleaseMatchFinder(); + _multiThread = newMultiThread; + } + */ + p->multiThread = (props.numThreads > 1); + #endif + + return SZ_OK; +} + +static const int kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; +static const int kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; +static const int kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; +static const int kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; + +#define IsCharState(s) ((s) < 7) + +#define GetLenToPosState(len) (((len) < kNumLenToPosStates + 1) ? (len) - 2 : kNumLenToPosStates - 1) + +#define kInfinityPrice (1 << 30) + +static void RangeEnc_Construct(CRangeEnc *p) +{ + p->outStream = 0; + p->bufBase = 0; +} + +#define RangeEnc_GetProcessed(p) ((p)->processed + ((p)->buf - (p)->bufBase) + (p)->cacheSize) + +#define RC_BUF_SIZE (1 << 16) +static int RangeEnc_Alloc(CRangeEnc *p, ISzAlloc *alloc) +{ + if (p->bufBase == 0) + { + p->bufBase = (Byte *)alloc->Alloc(alloc, RC_BUF_SIZE); + if (p->bufBase == 0) + return 0; + p->bufLim = p->bufBase + RC_BUF_SIZE; + } + return 1; +} + +static void RangeEnc_Free(CRangeEnc *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->bufBase); + p->bufBase = 0; +} + +static void RangeEnc_Init(CRangeEnc *p) +{ + /* Stream.Init(); */ + p->low = 0; + p->range = 0xFFFFFFFF; + p->cacheSize = 1; + p->cache = 0; + + p->buf = p->bufBase; + + p->processed = 0; + p->res = SZ_OK; +} + +static void RangeEnc_FlushStream(CRangeEnc *p) +{ + size_t num; + if (p->res != SZ_OK) + return; + num = p->buf - p->bufBase; + if (num != p->outStream->Write(p->outStream, p->bufBase, num)) + p->res = SZ_ERROR_WRITE; + p->processed += num; + p->buf = p->bufBase; +} + +static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p) +{ + if ((UInt32)p->low < (UInt32)0xFF000000 || (int)(p->low >> 32) != 0) + { + Byte temp = p->cache; + do + { + Byte *buf = p->buf; + *buf++ = (Byte)(temp + (Byte)(p->low >> 32)); + p->buf = buf; + if (buf == p->bufLim) + RangeEnc_FlushStream(p); + temp = 0xFF; + } + while (--p->cacheSize != 0); + p->cache = (Byte)((UInt32)p->low >> 24); + } + p->cacheSize++; + p->low = (UInt32)p->low << 8; +} + +static void RangeEnc_FlushData(CRangeEnc *p) +{ + int i; + for (i = 0; i < 5; i++) + RangeEnc_ShiftLow(p); +} + +static void RangeEnc_EncodeDirectBits(CRangeEnc *p, UInt32 value, int numBits) +{ + do + { + p->range >>= 1; + p->low += p->range & (0 - ((value >> --numBits) & 1)); + if (p->range < kTopValue) + { + p->range <<= 8; + RangeEnc_ShiftLow(p); + } + } + while (numBits != 0); +} + +static void RangeEnc_EncodeBit(CRangeEnc *p, CLzmaProb *prob, UInt32 symbol) +{ + UInt32 ttt = *prob; + UInt32 newBound = (p->range >> kNumBitModelTotalBits) * ttt; + if (symbol == 0) + { + p->range = newBound; + ttt += (kBitModelTotal - ttt) >> kNumMoveBits; + } + else + { + p->low += newBound; + p->range -= newBound; + ttt -= ttt >> kNumMoveBits; + } + *prob = (CLzmaProb)ttt; + if (p->range < kTopValue) + { + p->range <<= 8; + RangeEnc_ShiftLow(p); + } +} + +static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol) +{ + symbol |= 0x100; + do + { + RangeEnc_EncodeBit(p, probs + (symbol >> 8), (symbol >> 7) & 1); + symbol <<= 1; + } + while (symbol < 0x10000); +} + +static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol, UInt32 matchByte) +{ + UInt32 offs = 0x100; + symbol |= 0x100; + do + { + matchByte <<= 1; + RangeEnc_EncodeBit(p, probs + (offs + (matchByte & offs) + (symbol >> 8)), (symbol >> 7) & 1); + symbol <<= 1; + offs &= ~(matchByte ^ symbol); + } + while (symbol < 0x10000); +} + +void LzmaEnc_InitPriceTables(UInt32 *ProbPrices) +{ + UInt32 i; + for (i = (1 << kNumMoveReducingBits) / 2; i < kBitModelTotal; i += (1 << kNumMoveReducingBits)) + { + const int kCyclesBits = kNumBitPriceShiftBits; + UInt32 w = i; + UInt32 bitCount = 0; + int j; + for (j = 0; j < kCyclesBits; j++) + { + w = w * w; + bitCount <<= 1; + while (w >= ((UInt32)1 << 16)) + { + w >>= 1; + bitCount++; + } + } + ProbPrices[i >> kNumMoveReducingBits] = ((kNumBitModelTotalBits << kCyclesBits) - 15 - bitCount); + } +} + + +#define GET_PRICE(prob, symbol) \ + p->ProbPrices[((prob) ^ (((-(int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; + +#define GET_PRICEa(prob, symbol) \ + ProbPrices[((prob) ^ ((-((int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; + +#define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits] +#define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] + +#define GET_PRICE_0a(prob) ProbPrices[(prob) >> kNumMoveReducingBits] +#define GET_PRICE_1a(prob) ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] + +static UInt32 LitEnc_GetPrice(const CLzmaProb *probs, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + symbol |= 0x100; + do + { + price += GET_PRICEa(probs[symbol >> 8], (symbol >> 7) & 1); + symbol <<= 1; + } + while (symbol < 0x10000); + return price; +} + +static UInt32 LitEnc_GetPriceMatched(const CLzmaProb *probs, UInt32 symbol, UInt32 matchByte, UInt32 *ProbPrices) +{ + UInt32 price = 0; + UInt32 offs = 0x100; + symbol |= 0x100; + do + { + matchByte <<= 1; + price += GET_PRICEa(probs[offs + (matchByte & offs) + (symbol >> 8)], (symbol >> 7) & 1); + symbol <<= 1; + offs &= ~(matchByte ^ symbol); + } + while (symbol < 0x10000); + return price; +} + + +static void RcTree_Encode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) +{ + UInt32 m = 1; + int i; + for (i = numBitLevels; i != 0;) + { + UInt32 bit; + i--; + bit = (symbol >> i) & 1; + RangeEnc_EncodeBit(rc, probs + m, bit); + m = (m << 1) | bit; + } +} + +static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) +{ + UInt32 m = 1; + int i; + for (i = 0; i < numBitLevels; i++) + { + UInt32 bit = symbol & 1; + RangeEnc_EncodeBit(rc, probs + m, bit); + m = (m << 1) | bit; + symbol >>= 1; + } +} + +static UInt32 RcTree_GetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + symbol |= (1 << numBitLevels); + while (symbol != 1) + { + price += GET_PRICEa(probs[symbol >> 1], symbol & 1); + symbol >>= 1; + } + return price; +} + +static UInt32 RcTree_ReverseGetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + UInt32 m = 1; + int i; + for (i = numBitLevels; i != 0; i--) + { + UInt32 bit = symbol & 1; + symbol >>= 1; + price += GET_PRICEa(probs[m], bit); + m = (m << 1) | bit; + } + return price; +} + + +static void LenEnc_Init(CLenEnc *p) +{ + unsigned i; + p->choice = p->choice2 = kProbInitValue; + for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumLowBits); i++) + p->low[i] = kProbInitValue; + for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumMidBits); i++) + p->mid[i] = kProbInitValue; + for (i = 0; i < kLenNumHighSymbols; i++) + p->high[i] = kProbInitValue; +} + +static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState) +{ + if (symbol < kLenNumLowSymbols) + { + RangeEnc_EncodeBit(rc, &p->choice, 0); + RcTree_Encode(rc, p->low + (posState << kLenNumLowBits), kLenNumLowBits, symbol); + } + else + { + RangeEnc_EncodeBit(rc, &p->choice, 1); + if (symbol < kLenNumLowSymbols + kLenNumMidSymbols) + { + RangeEnc_EncodeBit(rc, &p->choice2, 0); + RcTree_Encode(rc, p->mid + (posState << kLenNumMidBits), kLenNumMidBits, symbol - kLenNumLowSymbols); + } + else + { + RangeEnc_EncodeBit(rc, &p->choice2, 1); + RcTree_Encode(rc, p->high, kLenNumHighBits, symbol - kLenNumLowSymbols - kLenNumMidSymbols); + } + } +} + +static void LenEnc_SetPrices(CLenEnc *p, UInt32 posState, UInt32 numSymbols, UInt32 *prices, UInt32 *ProbPrices) +{ + UInt32 a0 = GET_PRICE_0a(p->choice); + UInt32 a1 = GET_PRICE_1a(p->choice); + UInt32 b0 = a1 + GET_PRICE_0a(p->choice2); + UInt32 b1 = a1 + GET_PRICE_1a(p->choice2); + UInt32 i = 0; + for (i = 0; i < kLenNumLowSymbols; i++) + { + if (i >= numSymbols) + return; + prices[i] = a0 + RcTree_GetPrice(p->low + (posState << kLenNumLowBits), kLenNumLowBits, i, ProbPrices); + } + for (; i < kLenNumLowSymbols + kLenNumMidSymbols; i++) + { + if (i >= numSymbols) + return; + prices[i] = b0 + RcTree_GetPrice(p->mid + (posState << kLenNumMidBits), kLenNumMidBits, i - kLenNumLowSymbols, ProbPrices); + } + for (; i < numSymbols; i++) + prices[i] = b1 + RcTree_GetPrice(p->high, kLenNumHighBits, i - kLenNumLowSymbols - kLenNumMidSymbols, ProbPrices); +} + +static void MY_FAST_CALL LenPriceEnc_UpdateTable(CLenPriceEnc *p, UInt32 posState, UInt32 *ProbPrices) +{ + LenEnc_SetPrices(&p->p, posState, p->tableSize, p->prices[posState], ProbPrices); + p->counters[posState] = p->tableSize; +} + +static void LenPriceEnc_UpdateTables(CLenPriceEnc *p, UInt32 numPosStates, UInt32 *ProbPrices) +{ + UInt32 posState; + for (posState = 0; posState < numPosStates; posState++) + LenPriceEnc_UpdateTable(p, posState, ProbPrices); +} + +static void LenEnc_Encode2(CLenPriceEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState, Bool updatePrice, UInt32 *ProbPrices) +{ + LenEnc_Encode(&p->p, rc, symbol, posState); + if (updatePrice) + if (--p->counters[posState] == 0) + LenPriceEnc_UpdateTable(p, posState, ProbPrices); +} + + + + +static void MovePos(CLzmaEnc *p, UInt32 num) +{ + #ifdef SHOW_STAT + ttt += num; + printf("\n MovePos %d", num); + #endif + if (num != 0) + { + p->additionalOffset += num; + p->matchFinder.Skip(p->matchFinderObj, num); + } +} + +static UInt32 ReadMatchDistances(CLzmaEnc *p, UInt32 *numDistancePairsRes) +{ + UInt32 lenRes = 0, numPairs; + p->numAvail = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + numPairs = p->matchFinder.GetMatches(p->matchFinderObj, p->matches); + #ifdef SHOW_STAT + printf("\n i = %d numPairs = %d ", ttt, numPairs / 2); + ttt++; + { + UInt32 i; + for (i = 0; i < numPairs; i += 2) + printf("%2d %6d | ", p->matches[i], p->matches[i + 1]); + } + #endif + if (numPairs > 0) + { + lenRes = p->matches[numPairs - 2]; + if (lenRes == p->numFastBytes) + { + const Byte *pby = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + UInt32 distance = p->matches[numPairs - 1] + 1; + UInt32 numAvail = p->numAvail; + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + { + const Byte *pby2 = pby - distance; + for (; lenRes < numAvail && pby[lenRes] == pby2[lenRes]; lenRes++); + } + } + } + p->additionalOffset++; + *numDistancePairsRes = numPairs; + return lenRes; +} + + +#define MakeAsChar(p) (p)->backPrev = (UInt32)(-1); (p)->prev1IsChar = False; +#define MakeAsShortRep(p) (p)->backPrev = 0; (p)->prev1IsChar = False; +#define IsShortRep(p) ((p)->backPrev == 0) + +static UInt32 GetRepLen1Price(CLzmaEnc *p, UInt32 state, UInt32 posState) +{ + return + GET_PRICE_0(p->isRepG0[state]) + + GET_PRICE_0(p->isRep0Long[state][posState]); +} + +static UInt32 GetPureRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 state, UInt32 posState) +{ + UInt32 price; + if (repIndex == 0) + { + price = GET_PRICE_0(p->isRepG0[state]); + price += GET_PRICE_1(p->isRep0Long[state][posState]); + } + else + { + price = GET_PRICE_1(p->isRepG0[state]); + if (repIndex == 1) + price += GET_PRICE_0(p->isRepG1[state]); + else + { + price += GET_PRICE_1(p->isRepG1[state]); + price += GET_PRICE(p->isRepG2[state], repIndex - 2); + } + } + return price; +} + +static UInt32 GetRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 len, UInt32 state, UInt32 posState) +{ + return p->repLenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN] + + GetPureRepPrice(p, repIndex, state, posState); +} + +static UInt32 Backward(CLzmaEnc *p, UInt32 *backRes, UInt32 cur) +{ + UInt32 posMem = p->opt[cur].posPrev; + UInt32 backMem = p->opt[cur].backPrev; + p->optimumEndIndex = cur; + do + { + if (p->opt[cur].prev1IsChar) + { + MakeAsChar(&p->opt[posMem]) + p->opt[posMem].posPrev = posMem - 1; + if (p->opt[cur].prev2) + { + p->opt[posMem - 1].prev1IsChar = False; + p->opt[posMem - 1].posPrev = p->opt[cur].posPrev2; + p->opt[posMem - 1].backPrev = p->opt[cur].backPrev2; + } + } + { + UInt32 posPrev = posMem; + UInt32 backCur = backMem; + + backMem = p->opt[posPrev].backPrev; + posMem = p->opt[posPrev].posPrev; + + p->opt[posPrev].backPrev = backCur; + p->opt[posPrev].posPrev = cur; + cur = posPrev; + } + } + while (cur != 0); + *backRes = p->opt[0].backPrev; + p->optimumCurrentIndex = p->opt[0].posPrev; + return p->optimumCurrentIndex; +} + +#define LIT_PROBS(pos, prevByte) (p->litProbs + ((((pos) & p->lpMask) << p->lc) + ((prevByte) >> (8 - p->lc))) * 0x300) + +static UInt32 GetOptimum(CLzmaEnc *p, UInt32 position, UInt32 *backRes) +{ + UInt32 numAvail, mainLen, numPairs, repMaxIndex, i, posState, lenEnd, len, cur; + UInt32 matchPrice, repMatchPrice, normalMatchPrice; + UInt32 reps[LZMA_NUM_REPS], repLens[LZMA_NUM_REPS]; + UInt32 *matches; + const Byte *data; + Byte curByte, matchByte; + if (p->optimumEndIndex != p->optimumCurrentIndex) + { + const COptimal *opt = &p->opt[p->optimumCurrentIndex]; + UInt32 lenRes = opt->posPrev - p->optimumCurrentIndex; + *backRes = opt->backPrev; + p->optimumCurrentIndex = opt->posPrev; + return lenRes; + } + p->optimumCurrentIndex = p->optimumEndIndex = 0; + + if (p->additionalOffset == 0) + mainLen = ReadMatchDistances(p, &numPairs); + else + { + mainLen = p->longestMatchLength; + numPairs = p->numPairs; + } + + numAvail = p->numAvail; + if (numAvail < 2) + { + *backRes = (UInt32)(-1); + return 1; + } + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + repMaxIndex = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 lenTest; + const Byte *data2; + reps[i] = p->reps[i]; + data2 = data - (reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + { + repLens[i] = 0; + continue; + } + for (lenTest = 2; lenTest < numAvail && data[lenTest] == data2[lenTest]; lenTest++); + repLens[i] = lenTest; + if (lenTest > repLens[repMaxIndex]) + repMaxIndex = i; + } + if (repLens[repMaxIndex] >= p->numFastBytes) + { + UInt32 lenRes; + *backRes = repMaxIndex; + lenRes = repLens[repMaxIndex]; + MovePos(p, lenRes - 1); + return lenRes; + } + + matches = p->matches; + if (mainLen >= p->numFastBytes) + { + *backRes = matches[numPairs - 1] + LZMA_NUM_REPS; + MovePos(p, mainLen - 1); + return mainLen; + } + curByte = *data; + matchByte = *(data - (reps[0] + 1)); + + if (mainLen < 2 && curByte != matchByte && repLens[repMaxIndex] < 2) + { + *backRes = (UInt32)-1; + return 1; + } + + p->opt[0].state = (CState)p->state; + + posState = (position & p->pbMask); + + { + const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); + p->opt[1].price = GET_PRICE_0(p->isMatch[p->state][posState]) + + (!IsCharState(p->state) ? + LitEnc_GetPriceMatched(probs, curByte, matchByte, p->ProbPrices) : + LitEnc_GetPrice(probs, curByte, p->ProbPrices)); + } + + MakeAsChar(&p->opt[1]); + + matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]); + + if (matchByte == curByte) + { + UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, p->state, posState); + if (shortRepPrice < p->opt[1].price) + { + p->opt[1].price = shortRepPrice; + MakeAsShortRep(&p->opt[1]); + } + } + lenEnd = ((mainLen >= repLens[repMaxIndex]) ? mainLen : repLens[repMaxIndex]); + + if (lenEnd < 2) + { + *backRes = p->opt[1].backPrev; + return 1; + } + + p->opt[1].posPrev = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + p->opt[0].backs[i] = reps[i]; + + len = lenEnd; + do + p->opt[len--].price = kInfinityPrice; + while (len >= 2); + + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 repLen = repLens[i]; + UInt32 price; + if (repLen < 2) + continue; + price = repMatchPrice + GetPureRepPrice(p, i, p->state, posState); + do + { + UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][repLen - 2]; + COptimal *opt = &p->opt[repLen]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = 0; + opt->backPrev = i; + opt->prev1IsChar = False; + } + } + while (--repLen >= 2); + } + + normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[p->state]); + + len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); + if (len <= mainLen) + { + UInt32 offs = 0; + while (len > matches[offs]) + offs += 2; + for (; ; len++) + { + COptimal *opt; + UInt32 distance = matches[offs + 1]; + + UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN]; + UInt32 lenToPosState = GetLenToPosState(len); + if (distance < kNumFullDistances) + curAndLenPrice += p->distancesPrices[lenToPosState][distance]; + else + { + UInt32 slot; + GetPosSlot2(distance, slot); + curAndLenPrice += p->alignPrices[distance & kAlignMask] + p->posSlotPrices[lenToPosState][slot]; + } + opt = &p->opt[len]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = 0; + opt->backPrev = distance + LZMA_NUM_REPS; + opt->prev1IsChar = False; + } + if (len == matches[offs]) + { + offs += 2; + if (offs == numPairs) + break; + } + } + } + + cur = 0; + + #ifdef SHOW_STAT2 + if (position >= 0) + { + unsigned i; + printf("\n pos = %4X", position); + for (i = cur; i <= lenEnd; i++) + printf("\nprice[%4X] = %d", position - cur + i, p->opt[i].price); + } + #endif + + for (;;) + { + UInt32 numAvailFull, newLen, numPairs, posPrev, state, posState, startLen; + UInt32 curPrice, curAnd1Price, matchPrice, repMatchPrice; + Bool nextIsChar; + Byte curByte, matchByte; + const Byte *data; + COptimal *curOpt; + COptimal *nextOpt; + + cur++; + if (cur == lenEnd) + return Backward(p, backRes, cur); + + newLen = ReadMatchDistances(p, &numPairs); + if (newLen >= p->numFastBytes) + { + p->numPairs = numPairs; + p->longestMatchLength = newLen; + return Backward(p, backRes, cur); + } + position++; + curOpt = &p->opt[cur]; + posPrev = curOpt->posPrev; + if (curOpt->prev1IsChar) + { + posPrev--; + if (curOpt->prev2) + { + state = p->opt[curOpt->posPrev2].state; + if (curOpt->backPrev2 < LZMA_NUM_REPS) + state = kRepNextStates[state]; + else + state = kMatchNextStates[state]; + } + else + state = p->opt[posPrev].state; + state = kLiteralNextStates[state]; + } + else + state = p->opt[posPrev].state; + if (posPrev == cur - 1) + { + if (IsShortRep(curOpt)) + state = kShortRepNextStates[state]; + else + state = kLiteralNextStates[state]; + } + else + { + UInt32 pos; + const COptimal *prevOpt; + if (curOpt->prev1IsChar && curOpt->prev2) + { + posPrev = curOpt->posPrev2; + pos = curOpt->backPrev2; + state = kRepNextStates[state]; + } + else + { + pos = curOpt->backPrev; + if (pos < LZMA_NUM_REPS) + state = kRepNextStates[state]; + else + state = kMatchNextStates[state]; + } + prevOpt = &p->opt[posPrev]; + if (pos < LZMA_NUM_REPS) + { + UInt32 i; + reps[0] = prevOpt->backs[pos]; + for (i = 1; i <= pos; i++) + reps[i] = prevOpt->backs[i - 1]; + for (; i < LZMA_NUM_REPS; i++) + reps[i] = prevOpt->backs[i]; + } + else + { + UInt32 i; + reps[0] = (pos - LZMA_NUM_REPS); + for (i = 1; i < LZMA_NUM_REPS; i++) + reps[i] = prevOpt->backs[i - 1]; + } + } + curOpt->state = (CState)state; + + curOpt->backs[0] = reps[0]; + curOpt->backs[1] = reps[1]; + curOpt->backs[2] = reps[2]; + curOpt->backs[3] = reps[3]; + + curPrice = curOpt->price; + nextIsChar = False; + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + curByte = *data; + matchByte = *(data - (reps[0] + 1)); + + posState = (position & p->pbMask); + + curAnd1Price = curPrice + GET_PRICE_0(p->isMatch[state][posState]); + { + const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); + curAnd1Price += + (!IsCharState(state) ? + LitEnc_GetPriceMatched(probs, curByte, matchByte, p->ProbPrices) : + LitEnc_GetPrice(probs, curByte, p->ProbPrices)); + } + + nextOpt = &p->opt[cur + 1]; + + if (curAnd1Price < nextOpt->price) + { + nextOpt->price = curAnd1Price; + nextOpt->posPrev = cur; + MakeAsChar(nextOpt); + nextIsChar = True; + } + + matchPrice = curPrice + GET_PRICE_1(p->isMatch[state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[state]); + + if (matchByte == curByte && !(nextOpt->posPrev < cur && nextOpt->backPrev == 0)) + { + UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, state, posState); + if (shortRepPrice <= nextOpt->price) + { + nextOpt->price = shortRepPrice; + nextOpt->posPrev = cur; + MakeAsShortRep(nextOpt); + nextIsChar = True; + } + } + numAvailFull = p->numAvail; + { + UInt32 temp = kNumOpts - 1 - cur; + if (temp < numAvailFull) + numAvailFull = temp; + } + + if (numAvailFull < 2) + continue; + numAvail = (numAvailFull <= p->numFastBytes ? numAvailFull : p->numFastBytes); + + if (!nextIsChar && matchByte != curByte) /* speed optimization */ + { + /* try Literal + rep0 */ + UInt32 temp; + UInt32 lenTest2; + const Byte *data2 = data - (reps[0] + 1); + UInt32 limit = p->numFastBytes + 1; + if (limit > numAvailFull) + limit = numAvailFull; + + for (temp = 1; temp < limit && data[temp] == data2[temp]; temp++); + lenTest2 = temp - 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kLiteralNextStates[state]; + UInt32 posStateNext = (position + 1) & p->pbMask; + UInt32 nextRepMatchPrice = curAnd1Price + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 curAndLenPrice; + COptimal *opt; + UInt32 offset = cur + 1 + lenTest2; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = False; + } + } + } + } + + startLen = 2; /* speed optimization */ + { + UInt32 repIndex; + for (repIndex = 0; repIndex < LZMA_NUM_REPS; repIndex++) + { + UInt32 lenTest; + UInt32 lenTestTemp; + UInt32 price; + const Byte *data2 = data - (reps[repIndex] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + for (lenTest = 2; lenTest < numAvail && data[lenTest] == data2[lenTest]; lenTest++); + while (lenEnd < cur + lenTest) + p->opt[++lenEnd].price = kInfinityPrice; + lenTestTemp = lenTest; + price = repMatchPrice + GetPureRepPrice(p, repIndex, state, posState); + do + { + UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][lenTest - 2]; + COptimal *opt = &p->opt[cur + lenTest]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur; + opt->backPrev = repIndex; + opt->prev1IsChar = False; + } + } + while (--lenTest >= 2); + lenTest = lenTestTemp; + + if (repIndex == 0) + startLen = lenTest + 1; + + /* if (_maxMode) */ + { + UInt32 lenTest2 = lenTest + 1; + UInt32 limit = lenTest2 + p->numFastBytes; + UInt32 nextRepMatchPrice; + if (limit > numAvailFull) + limit = numAvailFull; + for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); + lenTest2 -= lenTest + 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kRepNextStates[state]; + UInt32 posStateNext = (position + lenTest) & p->pbMask; + UInt32 curAndLenCharPrice = + price + p->repLenEnc.prices[posState][lenTest - 2] + + GET_PRICE_0(p->isMatch[state2][posStateNext]) + + LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), + data[lenTest], data2[lenTest], p->ProbPrices); + state2 = kLiteralNextStates[state2]; + posStateNext = (position + lenTest + 1) & p->pbMask; + nextRepMatchPrice = curAndLenCharPrice + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 curAndLenPrice; + COptimal *opt; + UInt32 offset = cur + lenTest + 1 + lenTest2; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + lenTest + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = True; + opt->posPrev2 = cur; + opt->backPrev2 = repIndex; + } + } + } + } + } + } + /* for (UInt32 lenTest = 2; lenTest <= newLen; lenTest++) */ + if (newLen > numAvail) + { + newLen = numAvail; + for (numPairs = 0; newLen > matches[numPairs]; numPairs += 2); + matches[numPairs] = newLen; + numPairs += 2; + } + if (newLen >= startLen) + { + UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[state]); + UInt32 offs, curBack, posSlot; + UInt32 lenTest; + while (lenEnd < cur + newLen) + p->opt[++lenEnd].price = kInfinityPrice; + + offs = 0; + while (startLen > matches[offs]) + offs += 2; + curBack = matches[offs + 1]; + GetPosSlot2(curBack, posSlot); + for (lenTest = /*2*/ startLen; ; lenTest++) + { + UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][lenTest - LZMA_MATCH_LEN_MIN]; + UInt32 lenToPosState = GetLenToPosState(lenTest); + COptimal *opt; + if (curBack < kNumFullDistances) + curAndLenPrice += p->distancesPrices[lenToPosState][curBack]; + else + curAndLenPrice += p->posSlotPrices[lenToPosState][posSlot] + p->alignPrices[curBack & kAlignMask]; + + opt = &p->opt[cur + lenTest]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur; + opt->backPrev = curBack + LZMA_NUM_REPS; + opt->prev1IsChar = False; + } + + if (/*_maxMode && */lenTest == matches[offs]) + { + /* Try Match + Literal + Rep0 */ + const Byte *data2 = data - (curBack + 1); + UInt32 lenTest2 = lenTest + 1; + UInt32 limit = lenTest2 + p->numFastBytes; + UInt32 nextRepMatchPrice; + if (limit > numAvailFull) + limit = numAvailFull; + for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); + lenTest2 -= lenTest + 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kMatchNextStates[state]; + UInt32 posStateNext = (position + lenTest) & p->pbMask; + UInt32 curAndLenCharPrice = curAndLenPrice + + GET_PRICE_0(p->isMatch[state2][posStateNext]) + + LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), + data[lenTest], data2[lenTest], p->ProbPrices); + state2 = kLiteralNextStates[state2]; + posStateNext = (posStateNext + 1) & p->pbMask; + nextRepMatchPrice = curAndLenCharPrice + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 offset = cur + lenTest + 1 + lenTest2; + UInt32 curAndLenPrice; + COptimal *opt; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + lenTest + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = True; + opt->posPrev2 = cur; + opt->backPrev2 = curBack + LZMA_NUM_REPS; + } + } + } + offs += 2; + if (offs == numPairs) + break; + curBack = matches[offs + 1]; + if (curBack >= kNumFullDistances) + GetPosSlot2(curBack, posSlot); + } + } + } + } +} + +#define ChangePair(smallDist, bigDist) (((bigDist) >> 7) > (smallDist)) + +static UInt32 GetOptimumFast(CLzmaEnc *p, UInt32 *backRes) +{ + UInt32 numAvail, mainLen, mainDist, numPairs, repIndex, repLen, i; + const Byte *data; + const UInt32 *matches; + + if (p->additionalOffset == 0) + mainLen = ReadMatchDistances(p, &numPairs); + else + { + mainLen = p->longestMatchLength; + numPairs = p->numPairs; + } + + numAvail = p->numAvail; + *backRes = (UInt32)-1; + if (numAvail < 2) + return 1; + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + + repLen = repIndex = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 len; + const Byte *data2 = data - (p->reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + for (len = 2; len < numAvail && data[len] == data2[len]; len++); + if (len >= p->numFastBytes) + { + *backRes = i; + MovePos(p, len - 1); + return len; + } + if (len > repLen) + { + repIndex = i; + repLen = len; + } + } + + matches = p->matches; + if (mainLen >= p->numFastBytes) + { + *backRes = matches[numPairs - 1] + LZMA_NUM_REPS; + MovePos(p, mainLen - 1); + return mainLen; + } + + mainDist = 0; /* for GCC */ + if (mainLen >= 2) + { + mainDist = matches[numPairs - 1]; + while (numPairs > 2 && mainLen == matches[numPairs - 4] + 1) + { + if (!ChangePair(matches[numPairs - 3], mainDist)) + break; + numPairs -= 2; + mainLen = matches[numPairs - 2]; + mainDist = matches[numPairs - 1]; + } + if (mainLen == 2 && mainDist >= 0x80) + mainLen = 1; + } + + if (repLen >= 2 && ( + (repLen + 1 >= mainLen) || + (repLen + 2 >= mainLen && mainDist >= (1 << 9)) || + (repLen + 3 >= mainLen && mainDist >= (1 << 15)))) + { + *backRes = repIndex; + MovePos(p, repLen - 1); + return repLen; + } + + if (mainLen < 2 || numAvail <= 2) + return 1; + + p->longestMatchLength = ReadMatchDistances(p, &p->numPairs); + if (p->longestMatchLength >= 2) + { + UInt32 newDistance = matches[p->numPairs - 1]; + if ((p->longestMatchLength >= mainLen && newDistance < mainDist) || + (p->longestMatchLength == mainLen + 1 && !ChangePair(mainDist, newDistance)) || + (p->longestMatchLength > mainLen + 1) || + (p->longestMatchLength + 1 >= mainLen && mainLen >= 3 && ChangePair(newDistance, mainDist))) + return 1; + } + + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 len, limit; + const Byte *data2 = data - (p->reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + limit = mainLen - 1; + for (len = 2; len < limit && data[len] == data2[len]; len++); + if (len >= limit) + return 1; + } + *backRes = mainDist + LZMA_NUM_REPS; + MovePos(p, mainLen - 2); + return mainLen; +} + +static void WriteEndMarker(CLzmaEnc *p, UInt32 posState) +{ + UInt32 len; + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + len = LZMA_MATCH_LEN_MIN; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, (1 << kNumPosSlotBits) - 1); + RangeEnc_EncodeDirectBits(&p->rc, (((UInt32)1 << 30) - 1) >> kNumAlignBits, 30 - kNumAlignBits); + RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, kAlignMask); +} + +static SRes CheckErrors(CLzmaEnc *p) +{ + if (p->result != SZ_OK) + return p->result; + if (p->rc.res != SZ_OK) + p->result = SZ_ERROR_WRITE; + if (p->matchFinderBase.result != SZ_OK) + p->result = SZ_ERROR_READ; + if (p->result != SZ_OK) + p->finished = True; + return p->result; +} + +static SRes Flush(CLzmaEnc *p, UInt32 nowPos) +{ + /* ReleaseMFStream(); */ + p->finished = True; + if (p->writeEndMark) + WriteEndMarker(p, nowPos & p->pbMask); + RangeEnc_FlushData(&p->rc); + RangeEnc_FlushStream(&p->rc); + return CheckErrors(p); +} + +static void FillAlignPrices(CLzmaEnc *p) +{ + UInt32 i; + for (i = 0; i < kAlignTableSize; i++) + p->alignPrices[i] = RcTree_ReverseGetPrice(p->posAlignEncoder, kNumAlignBits, i, p->ProbPrices); + p->alignPriceCount = 0; +} + +static void FillDistancesPrices(CLzmaEnc *p) +{ + UInt32 tempPrices[kNumFullDistances]; + UInt32 i, lenToPosState; + for (i = kStartPosModelIndex; i < kNumFullDistances; i++) + { + UInt32 posSlot = GetPosSlot1(i); + UInt32 footerBits = ((posSlot >> 1) - 1); + UInt32 base = ((2 | (posSlot & 1)) << footerBits); + tempPrices[i] = RcTree_ReverseGetPrice(p->posEncoders + base - posSlot - 1, footerBits, i - base, p->ProbPrices); + } + + for (lenToPosState = 0; lenToPosState < kNumLenToPosStates; lenToPosState++) + { + UInt32 posSlot; + const CLzmaProb *encoder = p->posSlotEncoder[lenToPosState]; + UInt32 *posSlotPrices = p->posSlotPrices[lenToPosState]; + for (posSlot = 0; posSlot < p->distTableSize; posSlot++) + posSlotPrices[posSlot] = RcTree_GetPrice(encoder, kNumPosSlotBits, posSlot, p->ProbPrices); + for (posSlot = kEndPosModelIndex; posSlot < p->distTableSize; posSlot++) + posSlotPrices[posSlot] += ((((posSlot >> 1) - 1) - kNumAlignBits) << kNumBitPriceShiftBits); + + { + UInt32 *distancesPrices = p->distancesPrices[lenToPosState]; + UInt32 i; + for (i = 0; i < kStartPosModelIndex; i++) + distancesPrices[i] = posSlotPrices[i]; + for (; i < kNumFullDistances; i++) + distancesPrices[i] = posSlotPrices[GetPosSlot1(i)] + tempPrices[i]; + } + } + p->matchPriceCount = 0; +} + +void LzmaEnc_Construct(CLzmaEnc *p) +{ + RangeEnc_Construct(&p->rc); + MatchFinder_Construct(&p->matchFinderBase); + #ifdef COMPRESS_MF_MT + MatchFinderMt_Construct(&p->matchFinderMt); + p->matchFinderMt.MatchFinder = &p->matchFinderBase; + #endif + + { + CLzmaEncProps props; + LzmaEncProps_Init(&props); + LzmaEnc_SetProps(p, &props); + } + + #ifndef LZMA_LOG_BSR + LzmaEnc_FastPosInit(p->g_FastPos); + #endif + + LzmaEnc_InitPriceTables(p->ProbPrices); + p->litProbs = 0; + p->saveState.litProbs = 0; +} + +CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc) +{ + void *p; + p = alloc->Alloc(alloc, sizeof(CLzmaEnc)); + if (p != 0) + LzmaEnc_Construct((CLzmaEnc *)p); + return p; +} + +void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->litProbs); + alloc->Free(alloc, p->saveState.litProbs); + p->litProbs = 0; + p->saveState.litProbs = 0; +} + +void LzmaEnc_Destruct(CLzmaEnc *p, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + #ifdef COMPRESS_MF_MT + MatchFinderMt_Destruct(&p->matchFinderMt, allocBig); + #endif + MatchFinder_Free(&p->matchFinderBase, allocBig); + LzmaEnc_FreeLits(p, alloc); + RangeEnc_Free(&p->rc, alloc); +} + +void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig); + alloc->Free(alloc, p); +} + +static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize, UInt32 maxUnpackSize) +{ + UInt32 nowPos32, startPos32; + if (p->inStream != 0) + { + p->matchFinderBase.stream = p->inStream; + p->matchFinder.Init(p->matchFinderObj); + p->inStream = 0; + } + + if (p->finished) + return p->result; + RINOK(CheckErrors(p)); + + nowPos32 = (UInt32)p->nowPos64; + startPos32 = nowPos32; + + if (p->nowPos64 == 0) + { + UInt32 numPairs; + Byte curByte; + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) + return Flush(p, nowPos32); + ReadMatchDistances(p, &numPairs); + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][0], 0); + p->state = kLiteralNextStates[p->state]; + curByte = p->matchFinder.GetIndexByte(p->matchFinderObj, 0 - p->additionalOffset); + LitEnc_Encode(&p->rc, p->litProbs, curByte); + p->additionalOffset--; + nowPos32++; + } + + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) != 0) + for (;;) + { + UInt32 pos, len, posState; + + if (p->fastMode) + len = GetOptimumFast(p, &pos); + else + len = GetOptimum(p, nowPos32, &pos); + + #ifdef SHOW_STAT2 + printf("\n pos = %4X, len = %d pos = %d", nowPos32, len, pos); + #endif + + posState = nowPos32 & p->pbMask; + if (len == 1 && pos == (UInt32)-1) + { + Byte curByte; + CLzmaProb *probs; + const Byte *data; + + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 0); + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; + curByte = *data; + probs = LIT_PROBS(nowPos32, *(data - 1)); + if (IsCharState(p->state)) + LitEnc_Encode(&p->rc, probs, curByte); + else + LitEnc_EncodeMatched(&p->rc, probs, curByte, *(data - p->reps[0] - 1)); + p->state = kLiteralNextStates[p->state]; + } + else + { + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); + if (pos < LZMA_NUM_REPS) + { + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 1); + if (pos == 0) + { + RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 0); + RangeEnc_EncodeBit(&p->rc, &p->isRep0Long[p->state][posState], ((len == 1) ? 0 : 1)); + } + else + { + UInt32 distance = p->reps[pos]; + RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 1); + if (pos == 1) + RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 0); + else + { + RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 1); + RangeEnc_EncodeBit(&p->rc, &p->isRepG2[p->state], pos - 2); + if (pos == 3) + p->reps[3] = p->reps[2]; + p->reps[2] = p->reps[1]; + } + p->reps[1] = p->reps[0]; + p->reps[0] = distance; + } + if (len == 1) + p->state = kShortRepNextStates[p->state]; + else + { + LenEnc_Encode2(&p->repLenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + p->state = kRepNextStates[p->state]; + } + } + else + { + UInt32 posSlot; + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + pos -= LZMA_NUM_REPS; + GetPosSlot(pos, posSlot); + RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, posSlot); + + if (posSlot >= kStartPosModelIndex) + { + UInt32 footerBits = ((posSlot >> 1) - 1); + UInt32 base = ((2 | (posSlot & 1)) << footerBits); + UInt32 posReduced = pos - base; + + if (posSlot < kEndPosModelIndex) + RcTree_ReverseEncode(&p->rc, p->posEncoders + base - posSlot - 1, footerBits, posReduced); + else + { + RangeEnc_EncodeDirectBits(&p->rc, posReduced >> kNumAlignBits, footerBits - kNumAlignBits); + RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, posReduced & kAlignMask); + p->alignPriceCount++; + } + } + p->reps[3] = p->reps[2]; + p->reps[2] = p->reps[1]; + p->reps[1] = p->reps[0]; + p->reps[0] = pos; + p->matchPriceCount++; + } + } + p->additionalOffset -= len; + nowPos32 += len; + if (p->additionalOffset == 0) + { + UInt32 processed; + if (!p->fastMode) + { + if (p->matchPriceCount >= (1 << 7)) + FillDistancesPrices(p); + if (p->alignPriceCount >= kAlignTableSize) + FillAlignPrices(p); + } + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) + break; + processed = nowPos32 - startPos32; + if (useLimits) + { + if (processed + kNumOpts + 300 >= maxUnpackSize || + RangeEnc_GetProcessed(&p->rc) + kNumOpts * 2 >= maxPackSize) + break; + } + else if (processed >= (1 << 15)) + { + p->nowPos64 += nowPos32 - startPos32; + return CheckErrors(p); + } + } + } + p->nowPos64 += nowPos32 - startPos32; + return Flush(p, nowPos32); +} + +#define kBigHashDicLimit ((UInt32)1 << 24) + +static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + UInt32 beforeSize = kNumOpts; + Bool btMode; + if (!RangeEnc_Alloc(&p->rc, alloc)) + return SZ_ERROR_MEM; + btMode = (p->matchFinderBase.btMode != 0); + #ifdef COMPRESS_MF_MT + p->mtMode = (p->multiThread && !p->fastMode && btMode); + #endif + + { + unsigned lclp = p->lc + p->lp; + if (p->litProbs == 0 || p->saveState.litProbs == 0 || p->lclp != lclp) + { + LzmaEnc_FreeLits(p, alloc); + p->litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); + p->saveState.litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); + if (p->litProbs == 0 || p->saveState.litProbs == 0) + { + LzmaEnc_FreeLits(p, alloc); + return SZ_ERROR_MEM; + } + p->lclp = lclp; + } + } + + p->matchFinderBase.bigHash = (p->dictSize > kBigHashDicLimit); + + if (beforeSize + p->dictSize < keepWindowSize) + beforeSize = keepWindowSize - p->dictSize; + + #ifdef COMPRESS_MF_MT + if (p->mtMode) + { + RINOK(MatchFinderMt_Create(&p->matchFinderMt, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)); + p->matchFinderObj = &p->matchFinderMt; + MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder); + } + else + #endif + { + if (!MatchFinder_Create(&p->matchFinderBase, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)) + return SZ_ERROR_MEM; + p->matchFinderObj = &p->matchFinderBase; + MatchFinder_CreateVTable(&p->matchFinderBase, &p->matchFinder); + } + return SZ_OK; +} + +void LzmaEnc_Init(CLzmaEnc *p) +{ + UInt32 i; + p->state = 0; + for (i = 0 ; i < LZMA_NUM_REPS; i++) + p->reps[i] = 0; + + RangeEnc_Init(&p->rc); + + + for (i = 0; i < kNumStates; i++) + { + UInt32 j; + for (j = 0; j < LZMA_NUM_PB_STATES_MAX; j++) + { + p->isMatch[i][j] = kProbInitValue; + p->isRep0Long[i][j] = kProbInitValue; + } + p->isRep[i] = kProbInitValue; + p->isRepG0[i] = kProbInitValue; + p->isRepG1[i] = kProbInitValue; + p->isRepG2[i] = kProbInitValue; + } + + { + UInt32 num = 0x300 << (p->lp + p->lc); + for (i = 0; i < num; i++) + p->litProbs[i] = kProbInitValue; + } + + { + for (i = 0; i < kNumLenToPosStates; i++) + { + CLzmaProb *probs = p->posSlotEncoder[i]; + UInt32 j; + for (j = 0; j < (1 << kNumPosSlotBits); j++) + probs[j] = kProbInitValue; + } + } + { + for (i = 0; i < kNumFullDistances - kEndPosModelIndex; i++) + p->posEncoders[i] = kProbInitValue; + } + + LenEnc_Init(&p->lenEnc.p); + LenEnc_Init(&p->repLenEnc.p); + + for (i = 0; i < (1 << kNumAlignBits); i++) + p->posAlignEncoder[i] = kProbInitValue; + + p->optimumEndIndex = 0; + p->optimumCurrentIndex = 0; + p->additionalOffset = 0; + + p->pbMask = (1 << p->pb) - 1; + p->lpMask = (1 << p->lp) - 1; +} + +void LzmaEnc_InitPrices(CLzmaEnc *p) +{ + if (!p->fastMode) + { + FillDistancesPrices(p); + FillAlignPrices(p); + } + + p->lenEnc.tableSize = + p->repLenEnc.tableSize = + p->numFastBytes + 1 - LZMA_MATCH_LEN_MIN; + LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, p->ProbPrices); + LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, p->ProbPrices); +} + +static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + UInt32 i; + for (i = 0; i < (UInt32)kDicLogSizeMaxCompress; i++) + if (p->dictSize <= ((UInt32)1 << i)) + break; + p->distTableSize = i * 2; + + p->finished = False; + p->result = SZ_OK; + RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig)); + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); + p->nowPos64 = 0; + return SZ_OK; +} + +static SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqInStream *inStream, ISeqOutStream *outStream, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + p->inStream = inStream; + p->rc.outStream = outStream; + return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig); +} + +SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, + ISeqInStream *inStream, UInt32 keepWindowSize, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + p->inStream = inStream; + return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); +} + +static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen) +{ + p->seqBufInStream.funcTable.Read = MyRead; + p->seqBufInStream.data = src; + p->seqBufInStream.rem = srcLen; +} + +SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, + UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + LzmaEnc_SetInputBuf(p, src, srcLen); + p->inStream = &p->seqBufInStream.funcTable; + return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); +} + +void LzmaEnc_Finish(CLzmaEncHandle pp) +{ + #ifdef COMPRESS_MF_MT + CLzmaEnc *p = (CLzmaEnc *)pp; + if (p->mtMode) + MatchFinderMt_ReleaseStream(&p->matchFinderMt); + #else + pp = pp; + #endif +} + +typedef struct _CSeqOutStreamBuf +{ + ISeqOutStream funcTable; + Byte *data; + SizeT rem; + Bool overflow; +} CSeqOutStreamBuf; + +static size_t MyWrite(void *pp, const void *data, size_t size) +{ + CSeqOutStreamBuf *p = (CSeqOutStreamBuf *)pp; + if (p->rem < size) + { + size = p->rem; + p->overflow = True; + } + memcpy(p->data, data, size); + p->rem -= size; + p->data += size; + return size; +} + + +UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp) +{ + const CLzmaEnc *p = (CLzmaEnc *)pp; + return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); +} + +const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp) +{ + const CLzmaEnc *p = (CLzmaEnc *)pp; + return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; +} + +SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, Bool reInit, + Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + UInt64 nowPos64; + SRes res; + CSeqOutStreamBuf outStream; + + outStream.funcTable.Write = MyWrite; + outStream.data = dest; + outStream.rem = *destLen; + outStream.overflow = False; + + p->writeEndMark = False; + p->finished = False; + p->result = SZ_OK; + + if (reInit) + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); + nowPos64 = p->nowPos64; + RangeEnc_Init(&p->rc); + p->rc.outStream = &outStream.funcTable; + + res = LzmaEnc_CodeOneBlock(p, True, desiredPackSize, *unpackSize); + + *unpackSize = (UInt32)(p->nowPos64 - nowPos64); + *destLen -= outStream.rem; + if (outStream.overflow) + return SZ_ERROR_OUTPUT_EOF; + + return res; +} + +SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + SRes res = SZ_OK; + + #ifdef COMPRESS_MF_MT + Byte allocaDummy[0x300]; + int i = 0; + for (i = 0; i < 16; i++) + allocaDummy[i] = (Byte)i; + #endif + + RINOK(LzmaEnc_Prepare(pp, inStream, outStream, alloc, allocBig)); + + for (;;) + { + res = LzmaEnc_CodeOneBlock(p, False, 0, 0); + if (res != SZ_OK || p->finished != 0) + break; + if (progress != 0) + { + res = progress->Progress(progress, p->nowPos64, RangeEnc_GetProcessed(&p->rc)); + if (res != SZ_OK) + { + res = SZ_ERROR_PROGRESS; + break; + } + } + } + LzmaEnc_Finish(pp); + return res; +} + +SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + int i; + UInt32 dictSize = p->dictSize; + if (*size < LZMA_PROPS_SIZE) + return SZ_ERROR_PARAM; + *size = LZMA_PROPS_SIZE; + props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc); + + for (i = 11; i <= 30; i++) + { + if (dictSize <= ((UInt32)2 << i)) + { + dictSize = (2 << i); + break; + } + if (dictSize <= ((UInt32)3 << i)) + { + dictSize = (3 << i); + break; + } + } + + for (i = 0; i < 4; i++) + props[1 + i] = (Byte)(dictSize >> (8 * i)); + return SZ_OK; +} + +SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + SRes res; + CLzmaEnc *p = (CLzmaEnc *)pp; + + CSeqOutStreamBuf outStream; + + LzmaEnc_SetInputBuf(p, src, srcLen); + + outStream.funcTable.Write = MyWrite; + outStream.data = dest; + outStream.rem = *destLen; + outStream.overflow = False; + + p->writeEndMark = writeEndMark; + res = LzmaEnc_Encode(pp, &outStream.funcTable, &p->seqBufInStream.funcTable, + progress, alloc, allocBig); + + *destLen -= outStream.rem; + if (outStream.overflow) + return SZ_ERROR_OUTPUT_EOF; + return res; +} + +SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc); + SRes res; + if (p == 0) + return SZ_ERROR_MEM; + + res = LzmaEnc_SetProps(p, props); + if (res == SZ_OK) + { + res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize); + if (res == SZ_OK) + res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen, + writeEndMark, progress, alloc, allocBig); + } + + LzmaEnc_Destroy(p, alloc, allocBig); + return res; +} diff --git a/3rdparty/openctm/lib/liblzma/LzmaEnc.h b/3rdparty/openctm/lib/liblzma/LzmaEnc.h new file mode 100644 index 000000000..e3d84fa35 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzmaEnc.h @@ -0,0 +1,72 @@ +/* LzmaEnc.h -- LZMA Encoder +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZMAENC_H +#define __LZMAENC_H + +#include "Types.h" + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaEncProps +{ + int level; /* 0 <= level <= 9 */ + UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version + (1 << 12) <= dictSize <= (1 << 30) for 64-bit version + default = (1 << 24) */ + int lc; /* 0 <= lc <= 8, default = 3 */ + int lp; /* 0 <= lp <= 4, default = 0 */ + int pb; /* 0 <= pb <= 4, default = 2 */ + int algo; /* 0 - fast, 1 - normal, default = 1 */ + int fb; /* 5 <= fb <= 273, default = 32 */ + int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */ + int numHashBytes; /* 2, 3 or 4, default = 4 */ + UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */ + unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */ + int numThreads; /* 1 or 2, default = 2 */ +} CLzmaEncProps; + +void LzmaEncProps_Init(CLzmaEncProps *p); +void LzmaEncProps_Normalize(CLzmaEncProps *p); +UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2); + + +/* ---------- CLzmaEncHandle Interface ---------- */ + +/* LzmaEnc_* functions can return the following exit codes: +Returns: + SZ_OK - OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_PARAM - Incorrect paramater in props + SZ_ERROR_WRITE - Write callback error. + SZ_ERROR_PROGRESS - some break from progress callback + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) +*/ + +typedef void * CLzmaEncHandle; + +CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc); +void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig); +SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props); +SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size); +SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); +SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); + +/* ---------- One Call Interface ---------- */ + +/* LzmaEncode +Return code: + SZ_OK - OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_PARAM - Incorrect paramater + SZ_ERROR_OUTPUT_EOF - output buffer overflow + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) +*/ + +SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); + +#endif diff --git a/3rdparty/openctm/lib/liblzma/LzmaLib.c b/3rdparty/openctm/lib/liblzma/LzmaLib.c new file mode 100644 index 000000000..ddc8db7e5 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzmaLib.c @@ -0,0 +1,48 @@ +/* LzmaLib.c -- LZMA library wrapper +2008-08-05 +Igor Pavlov +Public domain */ + +#include "LzmaEnc.h" +#include "LzmaDec.h" +#include "Alloc.h" +#include "LzmaLib.h" + +static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } +static void SzFree(void *p, void *address) { p = p; MyFree(address); } +static ISzAlloc g_Alloc = { SzAlloc, SzFree }; + +MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, + unsigned char *outProps, size_t *outPropsSize, + int level, /* 0 <= level <= 9, default = 5 */ + unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */ + int lc, /* 0 <= lc <= 8, default = 3 */ + int lp, /* 0 <= lp <= 4, default = 0 */ + int pb, /* 0 <= pb <= 4, default = 2 */ + int fb, /* 5 <= fb <= 273, default = 32 */ + int numThreads, /* 1 or 2, default = 2 */ + int algo /* 0 = fast, 1 = normal */ +) +{ + CLzmaEncProps props; + LzmaEncProps_Init(&props); + props.level = level; + props.dictSize = dictSize; + props.lc = lc; + props.lp = lp; + props.pb = pb; + props.fb = fb; + props.numThreads = numThreads; + props.algo = algo; + + return LzmaEncode(dest, destLen, src, srcLen, &props, outProps, outPropsSize, 0, + NULL, &g_Alloc, &g_Alloc); +} + + +MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen, + const unsigned char *props, size_t propsSize) +{ + ELzmaStatus status; + return LzmaDecode(dest, destLen, src, srcLen, props, (unsigned)propsSize, LZMA_FINISH_ANY, &status, &g_Alloc); +} diff --git a/3rdparty/openctm/lib/liblzma/LzmaLib.h b/3rdparty/openctm/lib/liblzma/LzmaLib.h new file mode 100644 index 000000000..5d39af013 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/LzmaLib.h @@ -0,0 +1,136 @@ +/* LzmaLib.h -- LZMA library interface +2008-08-05 +Igor Pavlov +Public domain */ + +#ifndef __LZMALIB_H +#define __LZMALIB_H + +#include "Types.h" + +#ifdef __cplusplus + #define MY_EXTERN_C extern "C" +#else + #define MY_EXTERN_C extern +#endif + +#define MY_STDAPI MY_EXTERN_C int MY_STD_CALL + +#define LZMA_PROPS_SIZE 5 + +/* +RAM requirements for LZMA: + for compression: (dictSize * 11.5 + 6 MB) + state_size + for decompression: dictSize + state_size + state_size = (4 + (1.5 << (lc + lp))) KB + by default (lc=3, lp=0), state_size = 16 KB. + +LZMA properties (5 bytes) format + Offset Size Description + 0 1 lc, lp and pb in encoded form. + 1 4 dictSize (little endian). +*/ + +/* +LzmaCompress +------------ + +outPropsSize - + In: the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5. + Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5. + + LZMA Encoder will use defult values for any parameter, if it is + -1 for any from: level, loc, lp, pb, fb, numThreads + 0 for dictSize + +level - compression level: 0 <= level <= 9; + + level dictSize algo fb + 0: 16 KB 0 32 + 1: 64 KB 0 32 + 2: 256 KB 0 32 + 3: 1 MB 0 32 + 4: 4 MB 0 32 + 5: 16 MB 1 32 + 6: 32 MB 1 32 + 7+: 64 MB 1 64 + + The default value for "level" is 5. + + algo = 0 means fast method + algo = 1 means normal method + +dictSize - The dictionary size in bytes. The maximum value is + 128 MB = (1 << 27) bytes for 32-bit version + 1 GB = (1 << 30) bytes for 64-bit version + The default value is 16 MB = (1 << 24) bytes. + It's recommended to use the dictionary that is larger than 4 KB and + that can be calculated as (1 << N) or (3 << N) sizes. + +lc - The number of literal context bits (high bits of previous literal). + It can be in the range from 0 to 8. The default value is 3. + Sometimes lc=4 gives the gain for big files. + +lp - The number of literal pos bits (low bits of current position for literals). + It can be in the range from 0 to 4. The default value is 0. + The lp switch is intended for periodical data when the period is equal to 2^lp. + For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's + better to set lc=0, if you change lp switch. + +pb - The number of pos bits (low bits of current position). + It can be in the range from 0 to 4. The default value is 2. + The pb switch is intended for periodical data when the period is equal 2^pb. + +fb - Word size (the number of fast bytes). + It can be in the range from 5 to 273. The default value is 32. + Usually, a big number gives a little bit better compression ratio and + slower compression process. + +numThreads - The number of thereads. 1 or 2. The default value is 2. + Fast mode (algo = 0) can use only 1 thread. + +Out: + destLen - processed output size +Returns: + SZ_OK - OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_PARAM - Incorrect paramater + SZ_ERROR_OUTPUT_EOF - output buffer overflow + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) +*/ + +MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, + unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */ + int level, /* 0 <= level <= 9, default = 5 */ + unsigned dictSize, /* default = (1 << 24) */ + int lc, /* 0 <= lc <= 8, default = 3 */ + int lp, /* 0 <= lp <= 4, default = 0 */ + int pb, /* 0 <= pb <= 4, default = 2 */ + int fb, /* 5 <= fb <= 273, default = 32 */ + int numThreads, /* 1 or 2, default = 2 */ + int algo /* 0 = fast, 1 = normal, default = 0 for level < 5, 1 for level >= 5 */ + ); + +/* +LzmaUncompress +-------------- +In: + dest - output data + destLen - output data size + src - input data + srcLen - input data size +Out: + destLen - processed output size + srcLen - processed input size +Returns: + SZ_OK - OK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation arror + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer (src) +*/ + +MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen, + const unsigned char *props, size_t propsSize); + +#endif diff --git a/3rdparty/openctm/lib/liblzma/NameMangle.h b/3rdparty/openctm/lib/liblzma/NameMangle.h new file mode 100644 index 000000000..c1690e73a --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/NameMangle.h @@ -0,0 +1,84 @@ +/* NameMangle.h -- Name mangling to avoid linking conflicts +2009-04-15 : Marcus Geelnard : Public domain */ + +#ifndef __7Z_NAMEMANGLE_H +#define __7Z_NAMEMANGLE_H + +#ifdef LZMA_PREFIX_CTM + +/* Alloc.c */ +#define MyAlloc _ctm_MyAlloc +#define MyFree _ctm_MyFree +#ifdef _WIN32 +#define MidAlloc _ctm_MidAlloc +#define MidFree _ctm_MidFree +#define SetLargePageSize _ctm_SetLargePageSize +#define BigAlloc _ctm_BigAlloc +#define BigFree _ctm_BigFree +#endif /* _WIN32 */ + +/* LzFind.c */ +#define MatchFinder_GetPointerToCurrentPos _ctm_MatchFinder_GetPointerToCurrentPos +#define MatchFinder_GetIndexByte _ctm_MatchFinder_GetIndexByte +#define MatchFinder_GetNumAvailableBytes _ctm_MatchFinder_GetNumAvailableBytes +#define MatchFinder_ReduceOffsets _ctm_MatchFinder_ReduceOffsets +#define MatchFinder_MoveBlock _ctm_MatchFinder_MoveBlock +#define MatchFinder_NeedMove _ctm_MatchFinder_NeedMove +#define MatchFinder_ReadIfRequired _ctm_MatchFinder_ReadIfRequired +#define MatchFinder_Construct _ctm_MatchFinder_Construct +#define MatchFinder_Free _ctm_MatchFinder_Free +#define MatchFinder_Create _ctm_MatchFinder_Create +#define MatchFinder_Init _ctm_MatchFinder_Init +#define MatchFinder_Normalize3 _ctm_MatchFinder_Normalize3 +#define GetMatchesSpec1 _ctm_GetMatchesSpec1 +#define Bt3Zip_MatchFinder_GetMatches _ctm_Bt3Zip_MatchFinder_GetMatches +#define Hc3Zip_MatchFinder_GetMatches _ctm_Hc3Zip_MatchFinder_GetMatches +#define Bt3Zip_MatchFinder_Skip _ctm_Bt3Zip_MatchFinder_Skip +#define Hc3Zip_MatchFinder_Skip _ctm_Hc3Zip_MatchFinder_Skip +#define MatchFinder_CreateVTable _ctm_MatchFinder_CreateVTable + +/* LzmaDec.c */ +#define LzmaDec_InitDicAndState _ctm_LzmaDec_InitDicAndState +#define LzmaDec_Init _ctm_LzmaDec_Init +#define LzmaDec_DecodeToDic _ctm_LzmaDec_DecodeToDic +#define LzmaDec_DecodeToBuf _ctm_LzmaDec_DecodeToBuf +#define LzmaDec_FreeProbs _ctm_LzmaDec_FreeProbs +#define LzmaDec_Free _ctm_LzmaDec_Free +#define LzmaProps_Decode _ctm_LzmaProps_Decode +#define LzmaDec_AllocateProbs _ctm_LzmaDec_AllocateProbs +#define LzmaDec_Allocate _ctm_LzmaDec_Allocate +#define LzmaDecode _ctm_LzmaDecode + +/* LzmaEnc.c */ +#define LzmaEncProps_Init _ctm_LzmaEncProps_Init +#define LzmaEncProps_Normalize _ctm_LzmaEncProps_Normalize +#define LzmaEncProps_GetDictSize _ctm_LzmaEncProps_GetDictSize +#define LzmaEnc_FastPosInit _ctm_LzmaEnc_FastPosInit +#define LzmaEnc_SaveState _ctm_LzmaEnc_SaveState +#define LzmaEnc_RestoreState _ctm_LzmaEnc_RestoreState +#define LzmaEnc_SetProps _ctm_LzmaEnc_SetProps +#define LzmaEnc_InitPriceTables _ctm_LzmaEnc_InitPriceTables +#define LzmaEnc_Construct _ctm_LzmaEnc_Construct +#define LzmaEnc_Create _ctm_LzmaEnc_Create +#define LzmaEnc_FreeLits _ctm_LzmaEnc_FreeLits +#define LzmaEnc_Destruct _ctm_LzmaEnc_Destruct +#define LzmaEnc_Destroy _ctm_LzmaEnc_Destroy +#define LzmaEnc_Init _ctm_LzmaEnc_Init +#define LzmaEnc_InitPrices _ctm_LzmaEnc_InitPrices +#define LzmaEnc_PrepareForLzma2 _ctm_LzmaEnc_PrepareForLzma2 +#define LzmaEnc_MemPrepare _ctm_LzmaEnc_MemPrepare +#define LzmaEnc_Finish _ctm_LzmaEnc_Finish +#define LzmaEnc_GetNumAvailableBytes _ctm_LzmaEnc_GetNumAvailableBytes +#define LzmaEnc_GetCurBuf _ctm_LzmaEnc_GetCurBuf +#define LzmaEnc_CodeOneMemBlock _ctm_LzmaEnc_CodeOneMemBlock +#define LzmaEnc_Encode _ctm_LzmaEnc_Encode +#define LzmaEnc_WriteProperties _ctm_LzmaEnc_WriteProperties +#define LzmaEnc_MemEncode _ctm_LzmaEnc_MemEncode + +/* LzmaLib.c */ +#define LzmaCompress _ctm_LzmaCompress +#define LzmaUncompress _ctm_LzmaUncompress + +#endif /* LZMA_PREFIX_CTM */ + +#endif /* __7Z_NAMEMANGLE_H */ diff --git a/3rdparty/openctm/lib/liblzma/Types.h b/3rdparty/openctm/lib/liblzma/Types.h new file mode 100644 index 000000000..6e5e30e4a --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/Types.h @@ -0,0 +1,210 @@ +/* Types.h -- Basic types +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_TYPES_H +#define __7Z_TYPES_H + +#include + +#ifdef _WIN32 +#include +#endif + +#include "NameMangle.h" + +#define SZ_OK 0 + +#define SZ_ERROR_DATA 1 +#define SZ_ERROR_MEM 2 +#define SZ_ERROR_CRC 3 +#define SZ_ERROR_UNSUPPORTED 4 +#define SZ_ERROR_PARAM 5 +#define SZ_ERROR_INPUT_EOF 6 +#define SZ_ERROR_OUTPUT_EOF 7 +#define SZ_ERROR_READ 8 +#define SZ_ERROR_WRITE 9 +#define SZ_ERROR_PROGRESS 10 +#define SZ_ERROR_FAIL 11 +#define SZ_ERROR_THREAD 12 + +#define SZ_ERROR_ARCHIVE 16 +#define SZ_ERROR_NO_ARCHIVE 17 + +typedef int SRes; + +#ifdef _WIN32 +typedef DWORD WRes; +#else +typedef int WRes; +#endif + +#ifndef RINOK +#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } +#endif + +typedef unsigned char Byte; +typedef short Int16; +typedef unsigned short UInt16; + +#ifdef _LZMA_UINT32_IS_ULONG +typedef long Int32; +typedef unsigned long UInt32; +#else +typedef int Int32; +typedef unsigned int UInt32; +#endif + +#ifdef _SZ_NO_INT_64 + +/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. + NOTES: Some code will work incorrectly in that case! */ + +typedef long Int64; +typedef unsigned long UInt64; + +#else + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif + +#endif + +#ifdef _LZMA_NO_SYSTEM_SIZE_T +typedef UInt32 SizeT; +#else +typedef size_t SizeT; +#endif + +typedef int Bool; +#define True 1 +#define False 0 + + +#ifdef _MSC_VER + +#if _MSC_VER >= 1300 +#define MY_NO_INLINE __declspec(noinline) +#else +#define MY_NO_INLINE +#endif + +#define MY_CDECL __cdecl +#define MY_STD_CALL __stdcall +#define MY_FAST_CALL MY_NO_INLINE __fastcall + +#else + +#define MY_CDECL +#define MY_STD_CALL +#define MY_FAST_CALL + +#endif + + +/* The following interfaces use first parameter as pointer to structure */ + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ +} ISeqInStream; + +/* it can return SZ_ERROR_INPUT_EOF */ +SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); +SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); +SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); + +typedef struct +{ + size_t (*Write)(void *p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ +} ISeqOutStream; + +typedef enum +{ + SZ_SEEK_SET = 0, + SZ_SEEK_CUR = 1, + SZ_SEEK_END = 2 +} ESzSeek; + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ISeekInStream; + +typedef struct +{ + SRes (*Look)(void *p, void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ + SRes (*Skip)(void *p, size_t offset); + /* offset must be <= output(*size) of Look */ + + SRes (*Read)(void *p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ILookInStream; + +SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); +SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); + +/* reads via ILookInStream::Read */ +SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); +SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); + +#define LookToRead_BUF_SIZE (1 << 14) + +typedef struct +{ + ILookInStream s; + ISeekInStream *realStream; + size_t pos; + size_t size; + Byte buf[LookToRead_BUF_SIZE]; +} CLookToRead; + +void LookToRead_CreateVTable(CLookToRead *p, int lookahead); +void LookToRead_Init(CLookToRead *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToLook; + +void SecToLook_CreateVTable(CSecToLook *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToRead; + +void SecToRead_CreateVTable(CSecToRead *p); + +typedef struct +{ + SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ +} ICompressProgress; + +typedef struct +{ + void *(*Alloc)(void *p, size_t size); + void (*Free)(void *p, void *address); /* address can be 0 */ +} ISzAlloc; + +#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) +#define IAlloc_Free(p, a) (p)->Free((p), a) + +#endif diff --git a/3rdparty/openctm/lib/liblzma/readme.txt b/3rdparty/openctm/lib/liblzma/readme.txt new file mode 100644 index 000000000..b34ccddf0 --- /dev/null +++ b/3rdparty/openctm/lib/liblzma/readme.txt @@ -0,0 +1,7 @@ +This is the C library implementation of LZMA compression/decompression by Igor Pavlov. + +Author: Igor Pavlov +License: Public domain +Version: 4.65 (2009-02-03) + +Some administrative adaptations for integration in OpenCTM were made by Marcus Geelnard. diff --git a/3rdparty/openctm/lib/make.depend b/3rdparty/openctm/lib/make.depend new file mode 100644 index 000000000..d48e7aab5 --- /dev/null +++ b/3rdparty/openctm/lib/make.depend @@ -0,0 +1,15 @@ +openctm.o: openctm.c openctm.h internal.h +stream.o: stream.c openctm.h internal.h +compressRAW.o: compressRAW.c openctm.h internal.h +compressMG1.o: compressMG1.c openctm.h internal.h +compressMG2.o: compressMG2.c openctm.h internal.h +Alloc.o: liblzma/Alloc.c liblzma/Alloc.h liblzma/NameMangle.h +LzFind.o: liblzma/LzFind.c liblzma/LzFind.h liblzma/Types.h \ + liblzma/NameMangle.h liblzma/LzHash.h +LzmaDec.o: liblzma/LzmaDec.c liblzma/LzmaDec.h liblzma/Types.h \ + liblzma/NameMangle.h +LzmaEnc.o: liblzma/LzmaEnc.c liblzma/LzmaEnc.h liblzma/Types.h \ + liblzma/NameMangle.h liblzma/LzFind.h +LzmaLib.o: liblzma/LzmaLib.c liblzma/LzmaEnc.h liblzma/Types.h \ + liblzma/NameMangle.h liblzma/LzmaDec.h liblzma/Alloc.h \ + liblzma/LzmaLib.h diff --git a/3rdparty/openctm/lib/openctm-mingw1.def b/3rdparty/openctm/lib/openctm-mingw1.def new file mode 100644 index 000000000..58b7f70f9 --- /dev/null +++ b/3rdparty/openctm/lib/openctm-mingw1.def @@ -0,0 +1,32 @@ +LIBRARY openctm.dll +EXPORTS + ctmAddAttribMap = ctmAddAttribMap@12 @1 + ctmAddUVMap = ctmAddUVMap@16 @2 + ctmAttribPrecision = ctmAttribPrecision@12 @3 + ctmCompressionLevel = ctmCompressionLevel@8 @4 + ctmCompressionMethod = ctmCompressionMethod@8 @5 + ctmDefineMesh = ctmDefineMesh@24 @6 + ctmFileComment = ctmFileComment@8 @7 + ctmFreeContext = ctmFreeContext@4 @8 + ctmGetAttribMapFloat = ctmGetAttribMapFloat@12 @9 + ctmGetAttribMapString = ctmGetAttribMapString@12 @10 + ctmGetError = ctmGetError@4 @11 + ctmGetFloat = ctmGetFloat@8 @12 + ctmGetFloatArray = ctmGetFloatArray@8 @13 + ctmGetInteger = ctmGetInteger@8 @14 + ctmGetIntegerArray = ctmGetIntegerArray@8 @15 + ctmGetNamedAttribMap = ctmGetNamedAttribMap@8 @16 + ctmGetNamedUVMap = ctmGetNamedUVMap@8 @17 + ctmGetString = ctmGetString@8 @18 + ctmGetUVMapFloat = ctmGetUVMapFloat@12 @19 + ctmGetUVMapString = ctmGetUVMapString@12 @20 + ctmErrorString = ctmErrorString@4 @21 + ctmLoad = ctmLoad@8 @22 + ctmLoadCustom = ctmLoadCustom@12 @23 + ctmNewContext = ctmNewContext@4 @24 + ctmNormalPrecision = ctmNormalPrecision@8 @25 + ctmSave = ctmSave@8 @26 + ctmSaveCustom = ctmSaveCustom@12 @27 + ctmUVCoordPrecision = ctmUVCoordPrecision@12 @28 + ctmVertexPrecision = ctmVertexPrecision@8 @29 + ctmVertexPrecisionRel = ctmVertexPrecisionRel@8 @30 diff --git a/3rdparty/openctm/lib/openctm-mingw2.def b/3rdparty/openctm/lib/openctm-mingw2.def new file mode 100644 index 000000000..853b22d1c --- /dev/null +++ b/3rdparty/openctm/lib/openctm-mingw2.def @@ -0,0 +1,32 @@ +LIBRARY openctm.dll +EXPORTS + ctmAddAttribMap@12 @1 + ctmAddUVMap@16 @2 + ctmAttribPrecision@12 @3 + ctmCompressionLevel@8 @4 + ctmCompressionMethod@8 @5 + ctmDefineMesh@24 @6 + ctmFileComment@8 @7 + ctmFreeContext@4 @8 + ctmGetAttribMapFloat@12 @9 + ctmGetAttribMapString@12 @10 + ctmGetError@4 @11 + ctmGetFloat@8 @12 + ctmGetFloatArray@8 @13 + ctmGetInteger@8 @14 + ctmGetIntegerArray@8 @15 + ctmGetNamedAttribMap@8 @16 + ctmGetNamedUVMap@8 @17 + ctmGetString@8 @18 + ctmGetUVMapFloat@12 @19 + ctmGetUVMapString@12 @20 + ctmErrorString@4 @21 + ctmLoad@8 @22 + ctmLoadCustom@12 @23 + ctmNewContext@4 @24 + ctmNormalPrecision@8 @25 + ctmSave@8 @26 + ctmSaveCustom@12 @27 + ctmUVCoordPrecision@12 @28 + ctmVertexPrecision@8 @29 + ctmVertexPrecisionRel@8 @30 diff --git a/3rdparty/openctm/lib/openctm-msvc.def b/3rdparty/openctm/lib/openctm-msvc.def new file mode 100644 index 000000000..1cb524bf4 --- /dev/null +++ b/3rdparty/openctm/lib/openctm-msvc.def @@ -0,0 +1,32 @@ +LIBRARY openctm.dll +EXPORTS + ctmAddAttribMap + ctmAddUVMap + ctmAttribPrecision + ctmCompressionLevel + ctmCompressionMethod + ctmDefineMesh + ctmFileComment + ctmFreeContext + ctmGetAttribMapFloat + ctmGetAttribMapString + ctmGetError + ctmGetFloat + ctmGetFloatArray + ctmGetInteger + ctmGetIntegerArray + ctmGetNamedAttribMap + ctmGetNamedUVMap + ctmGetString + ctmGetUVMapFloat + ctmGetUVMapString + ctmErrorString + ctmLoad + ctmLoadCustom + ctmNewContext + ctmNormalPrecision + ctmSave + ctmSaveCustom + ctmUVCoordPrecision + ctmVertexPrecision + ctmVertexPrecisionRel diff --git a/3rdparty/openctm/lib/openctm.c b/3rdparty/openctm/lib/openctm.c new file mode 100644 index 000000000..f1b9303ae --- /dev/null +++ b/3rdparty/openctm/lib/openctm.c @@ -0,0 +1,1423 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: openctm.c +// Description: API functions. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include "openctm.h" +#include "internal.h" + + +// The C99 macro isfinite() is not supported on all platforms (specifically, +// MS Visual Studio does not support C99) +#if !defined(isfinite) && defined(_MSC_VER) + #include + #define isfinite(x) _finite(x) +#endif + + +//----------------------------------------------------------------------------- +// _ctmFreeMapList() - Free a float map list. +//----------------------------------------------------------------------------- +static void _ctmFreeMapList(_CTMcontext * self, _CTMfloatmap * aMapList) +{ + _CTMfloatmap * map, * nextMap; + map = aMapList; + while(map) + { + // Free internally allocated array (if we are in import mode) + if((self->mMode == CTM_IMPORT) && map->mValues) + free(map->mValues); + + // Free map name + if(map->mName) + free(map->mName); + + // Free file name + if(map->mFileName) + free(map->mFileName); + + nextMap = map->mNext; + free(map); + map = nextMap; + } +} + +//----------------------------------------------------------------------------- +// _ctmClearMesh() - Clear the mesh in a CTM context. +//----------------------------------------------------------------------------- +static void _ctmClearMesh(_CTMcontext * self) +{ + // Free internally allocated mesh arrays + if(self->mMode == CTM_IMPORT) + { + if(self->mVertices) + free(self->mVertices); + if(self->mIndices) + free(self->mIndices); + if(self->mNormals) + free(self->mNormals); + } + + // Clear externally assigned mesh arrays + self->mVertices = (CTMfloat *) 0; + self->mVertexCount = 0; + self->mIndices = (CTMuint *) 0; + self->mTriangleCount = 0; + self->mNormals = (CTMfloat *) 0; + + // Free UV coordinate map list + _ctmFreeMapList(self, self->mUVMaps); + self->mUVMaps = (_CTMfloatmap *) 0; + self->mUVMapCount = 0; + + // Free attribute map list + _ctmFreeMapList(self, self->mAttribMaps); + self->mAttribMaps = (_CTMfloatmap *) 0; + self->mAttribMapCount = 0; +} + +//----------------------------------------------------------------------------- +// _ctmCheckMeshIntegrity() - Check if a mesh is valid (i.e. is non-empty, and +// contains valid data). +//----------------------------------------------------------------------------- + +static CTMint _ctmCheckMeshIntegrity(_CTMcontext * self) +{ + CTMuint i; + _CTMfloatmap * map; + + // Check that we have all the mandatory data + if(!self->mVertices || !self->mIndices || (self->mVertexCount < 1) || + (self->mTriangleCount < 1)) + { + return CTM_FALSE; + } + + // Check that all indices are within range + for(i = 0; i < (self->mTriangleCount * 3); ++ i) + { + if(self->mIndices[i] >= self->mVertexCount) + { + return CTM_FALSE; + } + } + + // Check that all vertices are finite (non-NaN, non-inf) + for(i = 0; i < self->mVertexCount * 3; ++ i) + { + if(!isfinite(self->mVertices[i])) + { + return CTM_FALSE; + } + } + + // Check that all normals are finite (non-NaN, non-inf) + if(self->mNormals) + { + for(i = 0; i < self->mVertexCount * 3; ++ i) + { + if(!isfinite(self->mNormals[i])) + { + return CTM_FALSE; + } + } + } + + // Check that all UV maps are finite (non-NaN, non-inf) + map = self->mUVMaps; + while(map) + { + for(i = 0; i < self->mVertexCount * 2; ++ i) + { + if(!isfinite(map->mValues[i])) + { + return CTM_FALSE; + } + } + map = map->mNext; + } + + // Check that all attribute maps are finite (non-NaN, non-inf) + map = self->mAttribMaps; + while(map) + { + for(i = 0; i < self->mVertexCount * 4; ++ i) + { + if(!isfinite(map->mValues[i])) + { + return CTM_FALSE; + } + } + map = map->mNext; + } + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// ctmNewContext() +//----------------------------------------------------------------------------- +CTMEXPORT CTMcontext CTMCALL ctmNewContext(CTMenum aMode) +{ + _CTMcontext * self; + + // Allocate memory for the new structure + self = (_CTMcontext *) malloc(sizeof(_CTMcontext)); + + // Initialize structure (set null pointers and zero array lengths) + memset(self, 0, sizeof(_CTMcontext)); + self->mMode = aMode; + self->mError = CTM_NONE; + self->mMethod = CTM_METHOD_MG1; + self->mCompressionLevel = 1; + self->mVertexPrecision = 1.0f / 1024.0f; + self->mNormalPrecision = 1.0f / 256.0f; + + return (CTMcontext) self; +} + +//----------------------------------------------------------------------------- +// ctmFreeContext() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmFreeContext(CTMcontext aContext) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return; + + // Free all mesh resources + _ctmClearMesh(self); + + // Free the file comment + if(self->mFileComment) + free(self->mFileComment); + + // Free the context + free(self); +} + +//----------------------------------------------------------------------------- +// ctmGetError() +//----------------------------------------------------------------------------- +CTMEXPORT CTMenum CTMCALL ctmGetError(CTMcontext aContext) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + CTMenum err; + + if(!self) return CTM_INVALID_CONTEXT; + + // Get error code and reset error state + err = self->mError; + self->mError = CTM_NONE; + return err; +} + +//----------------------------------------------------------------------------- +// ctmErrorString() +//----------------------------------------------------------------------------- +CTMEXPORT const char * CTMCALL ctmErrorString(CTMenum aError) +{ + switch(aError) + { + case CTM_INVALID_CONTEXT: + return "CTM_INVALID_CONTEXT"; + case CTM_INVALID_ARGUMENT: + return "CTM_INVALID_ARGUMENT"; + case CTM_INVALID_OPERATION: + return "CTM_INVALID_OPERATION"; + case CTM_INVALID_MESH: + return "CTM_INVALID_MESH"; + case CTM_OUT_OF_MEMORY: + return "CTM_OUT_OF_MEMORY"; + case CTM_FILE_ERROR: + return "CTM_FILE_ERROR"; + case CTM_BAD_FORMAT: + return "CTM_BAD_FORMAT"; + case CTM_LZMA_ERROR: + return "CTM_LZMA_ERROR"; + case CTM_INTERNAL_ERROR: + return "CTM_INTERNAL_ERROR"; + case CTM_UNSUPPORTED_FORMAT_VERSION: + return "CTM_UNSUPPORTED_FORMAT_VERSION"; + default: + return "Unknown error code"; + } +} + +//----------------------------------------------------------------------------- +// ctmGetInteger() +//----------------------------------------------------------------------------- +CTMEXPORT CTMuint CTMCALL ctmGetInteger(CTMcontext aContext, CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return 0; + + switch(aProperty) + { + case CTM_VERTEX_COUNT: + return self->mVertexCount; + + case CTM_TRIANGLE_COUNT: + return self->mTriangleCount; + + case CTM_UV_MAP_COUNT: + return self->mUVMapCount; + + case CTM_ATTRIB_MAP_COUNT: + return self->mAttribMapCount; + + case CTM_HAS_NORMALS: + return self->mNormals ? CTM_TRUE : CTM_FALSE; + + case CTM_COMPRESSION_METHOD: + return (CTMuint) self->mMethod; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return 0; +} + +//----------------------------------------------------------------------------- +// ctmGetFloat() +//----------------------------------------------------------------------------- +CTMEXPORT CTMfloat CTMCALL ctmGetFloat(CTMcontext aContext, CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return 0.0f; + + switch(aProperty) + { + case CTM_VERTEX_PRECISION: + return self->mVertexPrecision; + + case CTM_NORMAL_PRECISION: + return self->mNormalPrecision; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return 0.0f; +} + +//----------------------------------------------------------------------------- +// ctmGetIntegerArray() +//----------------------------------------------------------------------------- +CTMEXPORT const CTMuint * CTMCALL ctmGetIntegerArray(CTMcontext aContext, + CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return (CTMuint *) 0; + + switch(aProperty) + { + case CTM_INDICES: + return self->mIndices; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return (CTMuint *) 0; +} + +//----------------------------------------------------------------------------- +// ctmGetFloatArray() +//----------------------------------------------------------------------------- +CTMEXPORT const CTMfloat * CTMCALL ctmGetFloatArray(CTMcontext aContext, + CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return (CTMfloat *) 0; + + // Did the user request a UV map? + if((aProperty >= CTM_UV_MAP_1) && + ((CTMuint)(aProperty - CTM_UV_MAP_1) < self->mUVMapCount)) + { + map = self->mUVMaps; + i = CTM_UV_MAP_1; + while(map && (i != aProperty)) + { + map = map->mNext; + ++ i; + } + if(!map) + { + self->mError = CTM_INTERNAL_ERROR; + return (CTMfloat *) 0; + } + return map->mValues; + } + + // Did the user request an attribute map? + if((aProperty >= CTM_ATTRIB_MAP_1) && + ((CTMuint)(aProperty - CTM_ATTRIB_MAP_1) < self->mAttribMapCount)) + { + map = self->mAttribMaps; + i = CTM_ATTRIB_MAP_1; + while(map && (i != aProperty)) + { + map = map->mNext; + ++ i; + } + if(!map) + { + self->mError = CTM_INTERNAL_ERROR; + return (CTMfloat *) 0; + } + return map->mValues; + } + + switch(aProperty) + { + case CTM_VERTICES: + return self->mVertices; + + case CTM_NORMALS: + return self->mNormals; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return (CTMfloat *) 0; +} + +//----------------------------------------------------------------------------- +// ctmGetNamedUVMap() +//----------------------------------------------------------------------------- +CTMEXPORT CTMenum CTMCALL ctmGetNamedUVMap(CTMcontext aContext, + const char * aName) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint result; + if(!self) return CTM_NONE; + + map = self->mUVMaps; + result = CTM_UV_MAP_1; + while(map && (strcmp(aName, map->mName) != 0)) + { + map = map->mNext; + ++ result; + } + if(!map) + { + return CTM_NONE; + } + return result; +} + +//----------------------------------------------------------------------------- +// ctmGetUVMapString() +//----------------------------------------------------------------------------- +CTMEXPORT const char * CTMCALL ctmGetUVMapString(CTMcontext aContext, + CTMenum aUVMap, CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return (const char *) 0; + + // Find the indicated map + map = self->mUVMaps; + i = CTM_UV_MAP_1; + while(map && (i != aUVMap)) + { + ++ i; + map = map->mNext; + } + if(!map) + { + self->mError = CTM_INVALID_ARGUMENT; + return (const char *) 0; + } + + // Get the requested string + switch(aProperty) + { + case CTM_NAME: + return (const char *) map->mName; + + case CTM_FILE_NAME: + return (const char *) map->mFileName; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return (const char *) 0; +} + +//----------------------------------------------------------------------------- +// ctmGetUVMapFloat() +//----------------------------------------------------------------------------- +CTMEXPORT CTMfloat CTMCALL ctmGetUVMapFloat(CTMcontext aContext, + CTMenum aUVMap, CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return 0.0f; + + // Find the indicated map + map = self->mUVMaps; + i = CTM_UV_MAP_1; + while(map && (i != aUVMap)) + { + ++ i; + map = map->mNext; + } + if(!map) + { + self->mError = CTM_INVALID_ARGUMENT; + return 0.0f; + } + + // Get the requested string + switch(aProperty) + { + case CTM_PRECISION: + return map->mPrecision; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return 0.0f; +} + +//----------------------------------------------------------------------------- +// ctmGetAttribMapString() +//----------------------------------------------------------------------------- +CTMEXPORT const char * CTMCALL ctmGetAttribMapString(CTMcontext aContext, + CTMenum aAttribMap, CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return (const char *) 0; + + // Find the indicated map + map = self->mAttribMaps; + i = CTM_ATTRIB_MAP_1; + while(map && (i != aAttribMap)) + { + ++ i; + map = map->mNext; + } + if(!map) + { + self->mError = CTM_INVALID_ARGUMENT; + return (const char *) 0; + } + + // Get the requested string + switch(aProperty) + { + case CTM_NAME: + return (const char *) map->mName; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return (const char *) 0; +} + +//----------------------------------------------------------------------------- +// ctmGetAttribMapFloat() +//----------------------------------------------------------------------------- +CTMEXPORT CTMfloat CTMCALL ctmGetAttribMapFloat(CTMcontext aContext, + CTMenum aAttribMap, CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return 0.0f; + + // Find the indicated map + map = self->mAttribMaps; + i = CTM_ATTRIB_MAP_1; + while(map && (i != aAttribMap)) + { + ++ i; + map = map->mNext; + } + if(!map) + { + self->mError = CTM_INVALID_ARGUMENT; + return 0.0f; + } + + // Get the requested string + switch(aProperty) + { + case CTM_PRECISION: + return map->mPrecision; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return 0.0f; +} + +//----------------------------------------------------------------------------- +// ctmGetNamedAttribMap() +//----------------------------------------------------------------------------- +CTMEXPORT CTMenum CTMCALL ctmGetNamedAttribMap(CTMcontext aContext, + const char * aName) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint result; + if(!self) return CTM_NONE; + + map = self->mAttribMaps; + result = CTM_ATTRIB_MAP_1; + while(map && (strcmp(aName, map->mName) != 0)) + { + map = map->mNext; + ++ result; + } + if(!map) + { + return CTM_NONE; + } + return result; +} + +//----------------------------------------------------------------------------- +// ctmGetString() +//----------------------------------------------------------------------------- +CTMEXPORT const char * CTMCALL ctmGetString(CTMcontext aContext, + CTMenum aProperty) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return 0; + + switch(aProperty) + { + case CTM_FILE_COMMENT: + return (const char *) self->mFileComment; + + default: + self->mError = CTM_INVALID_ARGUMENT; + } + + return (const char *) 0; +} + +//----------------------------------------------------------------------------- +// ctmCompressionMethod() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmCompressionMethod(CTMcontext aContext, + CTMenum aMethod) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if((aMethod != CTM_METHOD_RAW) && (aMethod != CTM_METHOD_MG1) && + (aMethod != CTM_METHOD_MG2)) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Set method + self->mMethod = aMethod; +} + +//----------------------------------------------------------------------------- +// ctmCompressionLevel() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmCompressionLevel(CTMcontext aContext, + CTMuint aLevel) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(aLevel > 9) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Set the compression level + self->mCompressionLevel = aLevel; +} + +//----------------------------------------------------------------------------- +// ctmVertexPrecision() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmVertexPrecision(CTMcontext aContext, + CTMfloat aPrecision) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(aPrecision <= 0.0f) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Set precision + self->mVertexPrecision = aPrecision; +} + +//----------------------------------------------------------------------------- +// ctmVertexPrecisionRel() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmVertexPrecisionRel(CTMcontext aContext, + CTMfloat aRelPrecision) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + CTMfloat avgEdgeLength, * p1, * p2; + CTMuint edgeCount, i, j; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(aRelPrecision <= 0.0f) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Calculate the average edge length (Note: we actually sum up all the half- + // edges, so in a proper solid mesh all connected edges are counted twice) + avgEdgeLength = 0.0f; + edgeCount = 0; + for(i = 0; i < self->mTriangleCount; ++ i) + { + p1 = &self->mVertices[self->mIndices[i * 3 + 2] * 3]; + for(j = 0; j < 3; ++ j) + { + p2 = &self->mVertices[self->mIndices[i * 3 + j] * 3]; + avgEdgeLength += sqrtf((p2[0] - p1[0]) * (p2[0] - p1[0]) + + (p2[1] - p1[1]) * (p2[1] - p1[1]) + + (p2[2] - p1[2]) * (p2[2] - p1[2])); + p1 = p2; + ++ edgeCount; + } + } + if(edgeCount == 0) + { + self->mError = CTM_INVALID_MESH; + return; + } + avgEdgeLength /= (CTMfloat) edgeCount; + + // Set precision + self->mVertexPrecision = aRelPrecision * avgEdgeLength; +} + +//----------------------------------------------------------------------------- +// ctmNormalPrecision() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmNormalPrecision(CTMcontext aContext, + CTMfloat aPrecision) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(aPrecision <= 0.0f) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Set precision + self->mNormalPrecision = aPrecision; +} + +//----------------------------------------------------------------------------- +// ctmUVCoordPrecision() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmUVCoordPrecision(CTMcontext aContext, + CTMenum aUVMap, CTMfloat aPrecision) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(aPrecision <= 0.0f) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Find the indicated map + map = self->mUVMaps; + i = CTM_UV_MAP_1; + while(map && (i != aUVMap)) + { + ++ i; + map = map->mNext; + } + if(!map) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Update the precision + map->mPrecision = aPrecision; +} + +//----------------------------------------------------------------------------- +// ctmAttribPrecision() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmAttribPrecision(CTMcontext aContext, + CTMenum aAttribMap, CTMfloat aPrecision) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + CTMuint i; + if(!self) return; + + // You are only allowed to change compression attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(aPrecision <= 0.0f) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Find the indicated map + map = self->mAttribMaps; + i = CTM_ATTRIB_MAP_1; + while(map && (i != aAttribMap)) + { + ++ i; + map = map->mNext; + } + if(!map) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Update the precision + map->mPrecision = aPrecision; +} + +//----------------------------------------------------------------------------- +// ctmFileComment() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmFileComment(CTMcontext aContext, + const char * aFileComment) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + int len; + if(!self) return; + + // You are only allowed to change file attributes in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Free the old comment string, if necessary + if(self->mFileComment) + { + free(self->mFileComment); + self->mFileComment = (char *) 0; + } + + // Get length of string (if empty, do nothing) + if(!aFileComment) + return; + len = strlen(aFileComment); + if(!len) + return; + + // Copy the string + self->mFileComment = (char *) malloc(len + 1); + if(!self->mFileComment) + { + self->mError = CTM_OUT_OF_MEMORY; + return; + } + strcpy(self->mFileComment, aFileComment); +} + +//----------------------------------------------------------------------------- +// ctmDefineMesh() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmDefineMesh(CTMcontext aContext, + const CTMfloat * aVertices, CTMuint aVertexCount, const CTMuint * aIndices, + CTMuint aTriangleCount, const CTMfloat * aNormals) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + if(!self) return; + + // You are only allowed to (re)define the mesh in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check arguments + if(!aVertices || !aIndices || !aVertexCount || !aTriangleCount) + { + self->mError = CTM_INVALID_ARGUMENT; + return; + } + + // Clear the old mesh, if any + _ctmClearMesh(self); + + // Set vertex array pointer + self->mVertices = (CTMfloat *) aVertices; + self->mVertexCount = aVertexCount; + + // Set index array pointer + self->mIndices = (CTMuint *) aIndices; + self->mTriangleCount = aTriangleCount; + + // Set normal array pointer + self->mNormals = (CTMfloat *) aNormals; +} + +//----------------------------------------------------------------------------- +// _ctmAddFloatMap() +//----------------------------------------------------------------------------- +static _CTMfloatmap * _ctmAddFloatMap(_CTMcontext * self, + const CTMfloat * aValues, const char * aName, const char * aFileName, + _CTMfloatmap ** aList) +{ + _CTMfloatmap * map; + CTMuint len; + + // Allocate memory for a new map list item and append it to the list + if(!*aList) + { + *aList = (_CTMfloatmap *) malloc(sizeof(_CTMfloatmap)); + map = *aList; + } + else + { + map = *aList; + while(map->mNext) + map = map->mNext; + map->mNext = (_CTMfloatmap *) malloc(sizeof(_CTMfloatmap)); + map = map->mNext; + } + if(!map) + { + self->mError = CTM_OUT_OF_MEMORY; + return (_CTMfloatmap *) 0; + } + + // Init the map item + memset(map, 0, sizeof(_CTMfloatmap)); + map->mPrecision = 1.0f / 1024.0f; + map->mValues = (CTMfloat *) aValues; + + // Set name of the map + if(aName) + { + // Get length of string (if empty, do nothing) + len = strlen(aName); + if(len) + { + // Copy the string + map->mName = (char *) malloc(len + 1); + if(!map->mName) + { + self->mError = CTM_OUT_OF_MEMORY; + free(map); + return (_CTMfloatmap *) 0; + } + strcpy(map->mName, aName); + } + } + + // Set file name reference for the map + if(aFileName) + { + // Get length of string (if empty, do nothing) + len = strlen(aFileName); + if(len) + { + // Copy the string + map->mFileName = (char *) malloc(len + 1); + if(!map->mFileName) + { + self->mError = CTM_OUT_OF_MEMORY; + if(map->mName) + free(map->mName); + free(map); + return (_CTMfloatmap *) 0; + } + strcpy(map->mFileName, aFileName); + } + } + + return map; +} + +//----------------------------------------------------------------------------- +// ctmAddUVMap() +//----------------------------------------------------------------------------- +CTMEXPORT CTMenum CTMCALL ctmAddUVMap(CTMcontext aContext, + const CTMfloat * aUVCoords, const char * aName, const char * aFileName) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + if(!self) return CTM_NONE; + + // Add a new UV map to the UV map list + map = _ctmAddFloatMap(self, aUVCoords, aName, aFileName, &self->mUVMaps); + if(!map) + return CTM_NONE; + else + { + // The default UV coordinate precision is 2^-12 + map->mPrecision = 1.0f / 4096.0f; + ++ self->mUVMapCount; + return CTM_UV_MAP_1 + self->mUVMapCount - 1; + } +} + +//----------------------------------------------------------------------------- +// ctmAddAttribMap() +//----------------------------------------------------------------------------- +CTMEXPORT CTMenum CTMCALL ctmAddAttribMap(CTMcontext aContext, + const CTMfloat * aAttribValues, const char * aName) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + _CTMfloatmap * map; + if(!self) return CTM_NONE; + + // Add a new attribute map to the attribute map list + map = _ctmAddFloatMap(self, aAttribValues, aName, (const char *) 0, + &self->mAttribMaps); + if(!map) + return CTM_NONE; + else + { + // The default vertex attribute precision is 2^-8 + map->mPrecision = 1.0f / 256.0f; + ++ self->mAttribMapCount; + return CTM_ATTRIB_MAP_1 + self->mAttribMapCount - 1; + } +} + +//----------------------------------------------------------------------------- +// _ctmDefaultRead() +//----------------------------------------------------------------------------- +static CTMuint CTMCALL _ctmDefaultRead(void * aBuf, CTMuint aCount, + void * aUserData) +{ + return (CTMuint) fread(aBuf, 1, (size_t) aCount, (FILE *) aUserData); +} + +//----------------------------------------------------------------------------- +// ctmLoad() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmLoad(CTMcontext aContext, const char * aFileName) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + FILE * f; + if(!self) return; + + // You are only allowed to load data in import mode + if(self->mMode != CTM_IMPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Open file stream + f = fopen(aFileName, "rb"); + if(!f) + { + self->mError = CTM_FILE_ERROR; + return; + } + + // Load the file + ctmLoadCustom(self, _ctmDefaultRead, (void *) f); + + // Close file stream + fclose(f); +} + +//----------------------------------------------------------------------------- +// _ctmAllocateFloatMaps() +//----------------------------------------------------------------------------- +static CTMuint _ctmAllocateFloatMaps(_CTMcontext * self, + _CTMfloatmap ** aMapListPtr, CTMuint aCount, CTMuint aChannels) +{ + _CTMfloatmap ** mapListPtr; + CTMuint i, size; + + mapListPtr = aMapListPtr; + for(i = 0; i < aCount; ++ i) + { + // Allocate & clear memory for this map + *mapListPtr = (_CTMfloatmap *) malloc(sizeof(_CTMfloatmap)); + if(!*mapListPtr) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + memset(*mapListPtr, 0, sizeof(_CTMfloatmap)); + + // Allocate & clear memory for the float array + size = aChannels * sizeof(CTMfloat) * self->mVertexCount; + (*mapListPtr)->mValues = (CTMfloat *) malloc(size); + if(!(*mapListPtr)->mValues) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + memset((*mapListPtr)->mValues, 0, size); + + // Next map... + mapListPtr = &(*mapListPtr)->mNext; + } + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// ctmLoadCustom() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmLoadCustom(CTMcontext aContext, CTMreadfn aReadFn, + void * aUserData) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + CTMuint formatVersion, flags, method; + if(!self) return; + + // You are only allowed to load data in import mode + if(self->mMode != CTM_IMPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Initialize stream + self->mReadFn = aReadFn; + self->mUserData = aUserData; + + // Clear any old mesh arrays + _ctmClearMesh(self); + + // Read header from stream + if(_ctmStreamReadUINT(self) != FOURCC("OCTM")) + { + self->mError = CTM_BAD_FORMAT; + return; + } + formatVersion = _ctmStreamReadUINT(self); + if(formatVersion != _CTM_FORMAT_VERSION) + { + self->mError = CTM_UNSUPPORTED_FORMAT_VERSION; + return; + } + method = _ctmStreamReadUINT(self); + if(method == FOURCC("RAW\0")) + self->mMethod = CTM_METHOD_RAW; + else if(method == FOURCC("MG1\0")) + self->mMethod = CTM_METHOD_MG1; + else if(method == FOURCC("MG2\0")) + self->mMethod = CTM_METHOD_MG2; + else + { + self->mError = CTM_BAD_FORMAT; + return; + } + self->mVertexCount = _ctmStreamReadUINT(self); + if(self->mVertexCount == 0) + { + self->mError = CTM_BAD_FORMAT; + return; + } + self->mTriangleCount = _ctmStreamReadUINT(self); + if(self->mTriangleCount == 0) + { + self->mError = CTM_BAD_FORMAT; + return; + } + self->mUVMapCount = _ctmStreamReadUINT(self); + self->mAttribMapCount = _ctmStreamReadUINT(self); + flags = _ctmStreamReadUINT(self); + _ctmStreamReadSTRING(self, &self->mFileComment); + + // Allocate memory for the mesh arrays + self->mVertices = (CTMfloat *) malloc(self->mVertexCount * sizeof(CTMfloat) * 3); + if(!self->mVertices) + { + self->mError = CTM_OUT_OF_MEMORY; + return; + } + self->mIndices = (CTMuint *) malloc(self->mTriangleCount * sizeof(CTMuint) * 3); + if(!self->mIndices) + { + _ctmClearMesh(self); + self->mError = CTM_OUT_OF_MEMORY; + return; + } + if(flags & _CTM_HAS_NORMALS_BIT) + { + self->mNormals = (CTMfloat *) malloc(self->mVertexCount * sizeof(CTMfloat) * 3); + if(!self->mNormals) + { + _ctmClearMesh(self); + self->mError = CTM_OUT_OF_MEMORY; + return; + } + } + + // Allocate memory for the UV and attribute maps (if any) + if(!_ctmAllocateFloatMaps(self, &self->mUVMaps, self->mUVMapCount, 2)) + { + _ctmClearMesh(self); + self->mError = CTM_OUT_OF_MEMORY; + return; + } + if(!_ctmAllocateFloatMaps(self, &self->mAttribMaps, self->mAttribMapCount, 4)) + { + _ctmClearMesh(self); + self->mError = CTM_OUT_OF_MEMORY; + return; + } + + // Uncompress from stream + switch(self->mMethod) + { + case CTM_METHOD_RAW: + _ctmUncompressMesh_RAW(self); + break; + + case CTM_METHOD_MG1: + _ctmUncompressMesh_MG1(self); + break; + + case CTM_METHOD_MG2: + _ctmUncompressMesh_MG2(self); + break; + + default: + self->mError = CTM_INTERNAL_ERROR; + } + + // Check mesh integrity + if(!_ctmCheckMeshIntegrity(self)) + { + self->mError = CTM_INVALID_MESH; + return; + } +} + +//----------------------------------------------------------------------------- +// _ctmDefaultWrite() +//----------------------------------------------------------------------------- +static CTMuint CTMCALL _ctmDefaultWrite(const void * aBuf, CTMuint aCount, + void * aUserData) +{ + return (CTMuint) fwrite(aBuf, 1, (size_t) aCount, (FILE *) aUserData); +} + +//----------------------------------------------------------------------------- +// ctmSave() +//----------------------------------------------------------------------------- +CTMEXPORT void CTMCALL ctmSave(CTMcontext aContext, const char * aFileName) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + FILE * f; + if(!self) return; + + // You are only allowed to save data in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Open file stream + f = fopen(aFileName, "wb"); + if(!f) + { + self->mError = CTM_FILE_ERROR; + return; + } + + // Save the file + ctmSaveCustom(self, _ctmDefaultWrite, (void *) f); + + // Close file stream + fclose(f); +} + +//----------------------------------------------------------------------------- +// ctmSaveCustom() +//----------------------------------------------------------------------------- +void CTMCALL ctmSaveCustom(CTMcontext aContext, CTMwritefn aWriteFn, + void * aUserData) +{ + _CTMcontext * self = (_CTMcontext *) aContext; + CTMuint flags; + if(!self) return; + + // You are only allowed to save data in export mode + if(self->mMode != CTM_EXPORT) + { + self->mError = CTM_INVALID_OPERATION; + return; + } + + // Check mesh integrity + if(!_ctmCheckMeshIntegrity(self)) + { + self->mError = CTM_INVALID_MESH; + return; + } + + // Initialize stream + self->mWriteFn = aWriteFn; + self->mUserData = aUserData; + + // Determine flags + flags = 0; + if(self->mNormals) + flags |= _CTM_HAS_NORMALS_BIT; + + // Write header to stream + _ctmStreamWrite(self, (void *) "OCTM", 4); + _ctmStreamWriteUINT(self, _CTM_FORMAT_VERSION); + switch(self->mMethod) + { + case CTM_METHOD_RAW: + _ctmStreamWrite(self, (void *) "RAW\0", 4); + break; + + case CTM_METHOD_MG1: + _ctmStreamWrite(self, (void *) "MG1\0", 4); + break; + + case CTM_METHOD_MG2: + _ctmStreamWrite(self, (void *) "MG2\0", 4); + break; + + default: + self->mError = CTM_INTERNAL_ERROR; + return; + } + _ctmStreamWriteUINT(self, self->mVertexCount); + _ctmStreamWriteUINT(self, self->mTriangleCount); + _ctmStreamWriteUINT(self, self->mUVMapCount); + _ctmStreamWriteUINT(self, self->mAttribMapCount); + _ctmStreamWriteUINT(self, flags); + _ctmStreamWriteSTRING(self, self->mFileComment); + + // Compress to stream + switch(self->mMethod) + { + case CTM_METHOD_RAW: + _ctmCompressMesh_RAW(self); + break; + + case CTM_METHOD_MG1: + _ctmCompressMesh_MG1(self); + break; + + case CTM_METHOD_MG2: + _ctmCompressMesh_MG2(self); + break; + + default: + self->mError = CTM_INTERNAL_ERROR; + return; + } +} diff --git a/3rdparty/openctm/lib/openctm.h b/3rdparty/openctm/lib/openctm.h new file mode 100644 index 000000000..c3af29365 --- /dev/null +++ b/3rdparty/openctm/lib/openctm.h @@ -0,0 +1,655 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: openctm.h +// Description: OpenCTM API definition. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __OPENCTM_H_ +#define __OPENCTM_H_ + +/*! @mainpage OpenCTM API Reference + * + * @section intro_sec Introduction + * + * OpenCTM is an open file format for storing compressed triangle meshes. + * In order to easily read and write OpenCTM files (usually suffixed .ctm) an + * API (Application Program Interface) is provided that can easily be used from + * most modern programming languages. + * + * The OpenCTM functionality itself is written in highly portable standard C + * (C99). + * + * @section usage_sec Usage + * + * For information about how to use the OpenCTM API, see openctm.h. + * + * For information about the C++ wrapper classes, see CTMimporter and + * CTMexporter. + * + * @section example_sec Example usage + * + * @subsection example_load_sec Loading a CTM file + * + * Here is a simple example of loading a CTM file: + * + * @code + * CTMcontext context; + * CTMuint vertCount, triCount, * indices; + * CTMfloat * vertices; + * + * // Create a new context + * context = ctmNewContext(CTM_IMPORT); + * + * // Load the OpenCTM file + * ctmLoad(context, "mymesh.ctm"); + * if(ctmGetError(context) == CTM_NONE) + * { + * // Access the mesh data + * vertCount = ctmGetInteger(context, CTM_VERTEX_COUNT); + * vertices = ctmGetFloatArray(context, CTM_VERTICES); + * triCount = ctmGetInteger(context, CTM_TRIANGLE_COUNT); + * indices = ctmGetIntegerArray(context, CTM_INDICES); + * + * // Deal with the mesh (e.g. transcode it to our internal representation) + * // ... + * } + * + * // Free the context + * ctmFreeContext(context); + * @endcode + * + * @subsection example_create_sec Creating a CTM file + * + * Here is a simple example of creating a CTM file: + * + * @code + * CTMcontext context; + * CTMuint vertCount, triCount, * indices; + * CTMfloat * vertices; + * + * // Create our mesh in memory + * vertCount = 100; + * triCount = 120; + * vertices = (CTMfloat *) malloc(3 * sizeof(CTMfloat) * vertCount); + * indices = (CTMuint *) malloc(3 * sizeof(CTMuint) * triCount); + * // ... + * + * // Create a new context + * context = ctmNewContext(CTM_EXPORT); + * + * // Define our mesh representation to OpenCTM (store references to it in + * // the context) + * ctmDefineMesh(context, vertices, vertCount, indices, triCount, NULL); + * + * // Save the OpenCTM file + * ctmSave(context, "mymesh.ctm"); + * + * // Free the context + * ctmFreeContext(context); + * + * // Free our mesh + * free(indices); + * free(vertices); + * @endcode + */ + +#ifdef __cplusplus +extern "C" { +#endif + + +// Declare calling conventions etc. +#if defined(WIN32) || defined(_WIN32) + // Windows + #if defined(OPENCTM_STATIC) + #define CTMEXPORT + #else + #if defined(OPENCTM_BUILD) + #define CTMEXPORT __declspec(dllexport) + #else + #define CTMEXPORT __declspec(dllimport) + #endif + #endif + #if defined(__MINGW32__) + #define CTMCALL __attribute__ ((__stdcall__)) + #elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) + #define CTMCALL __stdcall + #else + #define CTMCALL + #endif +#else + // Unix + #if !defined(OPENCTM_STATIC) && !defined(OPENCTM_BUILD) + #define CTMEXPORT extern + #else + #if defined(OPENCTM_BUILD) && defined(__GNUC__) && (__GNUC__ >= 4) + #define CTMEXPORT __attribute__ ((visibility("default"))) + #else + #define CTMEXPORT + #endif + #endif + #define CTMCALL +#endif + + +// Get system specific type definitions for sized integers. We use the C99 +// standard stdint.h for this. +#ifdef _MSC_VER + // MS Visual Studio does not support C99 + typedef int int32_t; + typedef unsigned int uint32_t; +#else + #include +#endif + + +/// OpenCTM API version (1.0). +#define CTM_API_VERSION 0x00000100 + +/// Boolean TRUE. +#define CTM_TRUE 1 + +/// Boolean FALSE. +#define CTM_FALSE 0 + +/// Single precision floating point type (IEEE 754 32 bits wide). +typedef float CTMfloat; + +/// Signed integer (32 bits wide). +typedef int32_t CTMint; + +/// Unsigned integer (32 bits wide). +typedef uint32_t CTMuint; + +/// OpenCTM context handle. +typedef void * CTMcontext; + +/// OpenCTM specific enumerators. +/// @note For the information query functions, it is an error to query a value +/// of the wrong type (e.g. to query a string value with the +/// ctmGetInteger() function). +typedef enum { + // Error codes (see ctmGetError()) + CTM_NONE = 0x0000, ///< No error has occured (everything is OK). + /// Also used as an error return value for + /// functions that should return a CTMenum + /// value. + CTM_INVALID_CONTEXT = 0x0001, ///< The OpenCTM context was invalid (e.g. NULL). + CTM_INVALID_ARGUMENT = 0x0002, ///< A function argument was invalid. + CTM_INVALID_OPERATION = 0x0003, ///< The operation is not allowed. + CTM_INVALID_MESH = 0x0004, ///< The mesh was invalid (e.g. no vertices). + CTM_OUT_OF_MEMORY = 0x0005, ///< Not enough memory to proceed. + CTM_FILE_ERROR = 0x0006, ///< File I/O error. + CTM_BAD_FORMAT = 0x0007, ///< File format error (e.g. unrecognized format or corrupted file). + CTM_LZMA_ERROR = 0x0008, ///< An error occured within the LZMA library. + CTM_INTERNAL_ERROR = 0x0009, ///< An internal error occured (indicates a bug). + CTM_UNSUPPORTED_FORMAT_VERSION = 0x000A, ///< Unsupported file format version. + + // OpenCTM context modes + CTM_IMPORT = 0x0101, ///< The OpenCTM context will be used for importing data. + CTM_EXPORT = 0x0102, ///< The OpenCTM context will be used for exporting data. + + // Compression methods + CTM_METHOD_RAW = 0x0201, ///< Just store the raw data. + CTM_METHOD_MG1 = 0x0202, ///< Lossless compression (floating point). + CTM_METHOD_MG2 = 0x0203, ///< Lossless compression (fixed point). + + // Context queries + CTM_VERTEX_COUNT = 0x0301, ///< Number of vertices in the mesh (integer). + CTM_TRIANGLE_COUNT = 0x0302, ///< Number of triangles in the mesh (integer). + CTM_HAS_NORMALS = 0x0303, ///< CTM_TRUE if the mesh has normals (integer). + CTM_UV_MAP_COUNT = 0x0304, ///< Number of UV coordinate sets (integer). + CTM_ATTRIB_MAP_COUNT = 0x0305, ///< Number of custom attribute sets (integer). + CTM_VERTEX_PRECISION = 0x0306, ///< Vertex precision - for MG2 (float). + CTM_NORMAL_PRECISION = 0x0307, ///< Normal precision - for MG2 (float). + CTM_COMPRESSION_METHOD = 0x0308, ///< Compression method (integer). + CTM_FILE_COMMENT = 0x0309, ///< File comment (string). + + // UV/attribute map queries + CTM_NAME = 0x0501, ///< Unique name (UV/attrib map string). + CTM_FILE_NAME = 0x0502, ///< File name reference (UV map string). + CTM_PRECISION = 0x0503, ///< Value precision (UV/attrib map float). + + // Array queries + CTM_INDICES = 0x0601, ///< Triangle indices (integer array). + CTM_VERTICES = 0x0602, ///< Vertex point coordinates (float array). + CTM_NORMALS = 0x0603, ///< Per vertex normals (float array). + CTM_UV_MAP_1 = 0x0700, ///< Per vertex UV map 1 (float array). + CTM_UV_MAP_2 = 0x0701, ///< Per vertex UV map 2 (float array). + CTM_UV_MAP_3 = 0x0702, ///< Per vertex UV map 3 (float array). + CTM_UV_MAP_4 = 0x0703, ///< Per vertex UV map 4 (float array). + CTM_UV_MAP_5 = 0x0704, ///< Per vertex UV map 5 (float array). + CTM_UV_MAP_6 = 0x0705, ///< Per vertex UV map 6 (float array). + CTM_UV_MAP_7 = 0x0706, ///< Per vertex UV map 7 (float array). + CTM_UV_MAP_8 = 0x0707, ///< Per vertex UV map 8 (float array). + CTM_ATTRIB_MAP_1 = 0x0800, ///< Per vertex attribute map 1 (float array). + CTM_ATTRIB_MAP_2 = 0x0801, ///< Per vertex attribute map 2 (float array). + CTM_ATTRIB_MAP_3 = 0x0802, ///< Per vertex attribute map 3 (float array). + CTM_ATTRIB_MAP_4 = 0x0803, ///< Per vertex attribute map 4 (float array). + CTM_ATTRIB_MAP_5 = 0x0804, ///< Per vertex attribute map 5 (float array). + CTM_ATTRIB_MAP_6 = 0x0805, ///< Per vertex attribute map 6 (float array). + CTM_ATTRIB_MAP_7 = 0x0806, ///< Per vertex attribute map 7 (float array). + CTM_ATTRIB_MAP_8 = 0x0807 ///< Per vertex attribute map 8 (float array). +} CTMenum; + +/// Stream read() function pointer. +/// @param[in] aBuf Pointer to the memory buffer to which data should be read. +/// @param[in] aCount The number of bytes to read. +/// @param[in] aUserData The custom user data that was passed to the +/// ctmLoadCustom() function. +/// @return The number of bytes actually read (if this is less than aCount, it +/// indicates that an error occured or the end of file was reached +/// before all bytes were read). +typedef CTMuint (CTMCALL * CTMreadfn)(void * aBuf, CTMuint aCount, void * aUserData); + +/// Stream write() function pointer. +/// @param[in] aBuf Pointer to the memory buffer from which data should be written. +/// @param[in] aCount The number of bytes to write. +/// @param[in] aUserData The custom user data that was passed to the +/// ctmSaveCustom() function. +/// @return The number of bytes actually written (if this is less than aCount, it +/// indicates that an error occured). +typedef CTMuint (CTMCALL * CTMwritefn)(const void * aBuf, CTMuint aCount, void * aUserData); + +/// Create a new OpenCTM context. The context is used for all subsequent +/// OpenCTM function calls. Several contexts can coexist at the same time. +/// @param[in] aMode An OpenCTM context mode. Set this to CTM_IMPORT if the +/// context will be used for importing data, or set it to CTM_EXPORT +/// if it will be used for exporting data. +/// @return An OpenCTM context handle (or NULL if no context could be created). +CTMEXPORT CTMcontext CTMCALL ctmNewContext(CTMenum aMode); + +/// Free an OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @see ctmNewContext() +CTMEXPORT void CTMCALL ctmFreeContext(CTMcontext aContext); + +/// Returns the latest error. Calling this function will return the last +/// produced error code, or CTM_NO_ERROR (zero) if no error has occured since +/// the last call to ctmGetError(). When this function is called, the internal +/// error varibale will be reset to CTM_NONE. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @return An OpenCTM error code. +/// @see CTMenum +CTMEXPORT CTMenum CTMCALL ctmGetError(CTMcontext aContext); + +/// Converts an OpenCTM error code to a zero-terminated string. +/// @param[in] aError An OpenCTM error code, as returned by ctmGetError(). +/// @return A zero terminated string that describes the error. For instance, +/// if \c aError is CTM_INVALID_OPERATION, then the return value will +/// be "CTM_INVALID_OPERATION". +/// @see CTMenum +CTMEXPORT const char * CTMCALL ctmErrorString(CTMenum aError); + +/// Get information about an OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aProperty Which property to return. +/// @return An integer value, representing the OpenCTM context property given +/// by \c aProperty. +/// @see CTMenum +CTMEXPORT CTMuint CTMCALL ctmGetInteger(CTMcontext aContext, CTMenum aProperty); + +/// Get information about an OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aProperty Which property to return. +/// @return A floating point value, representing the OpenCTM context property +/// given by \c aProperty. +/// @see CTMenum +CTMEXPORT CTMfloat CTMCALL ctmGetFloat(CTMcontext aContext, CTMenum aProperty); + +/// Get an integer array from an OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aProperty Which array to return. +/// @return An integer array. If the requested array does not exist, or +/// if \c aProperty does not indicate an integer array, the function +/// returns NULL. +/// @note The array is only valid as long as the OpenCTM context is valid, or +/// until the corresponding array changes within the OpenCTM context. +/// Trying to access an invalid array will result in undefined +/// behaviour. Therefor it is recommended that the array is copied to +/// a new variable if it is to be used other than directly after the call +/// to ctmGetIntegerArray(). +/// @see CTMenum +CTMEXPORT const CTMuint * CTMCALL ctmGetIntegerArray(CTMcontext aContext, + CTMenum aProperty); + +/// Get a floating point array from an OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aProperty Which array to return. +/// @return A floating point array. If the requested array does not exist, or +/// if \c aProperty does not indicate a float array, the function +/// returns NULL. +/// @note The array is only valid as long as the OpenCTM context is valid, or +/// until the corresponding array changes within the OpenCTM context. +/// Trying to access an invalid array will result in undefined +/// behaviour. Therefor it is recommended that the array is copied to +/// a new variable if it is to be used other than directly after the call +/// to ctmGetFloatArray(). +/// @see CTMenum +CTMEXPORT const CTMfloat * CTMCALL ctmGetFloatArray(CTMcontext aContext, + CTMenum aProperty); + +/// Get a reference to the named UV map. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aName The name of the UV map that should be returned. +/// @return A reference to a UV map. If the UV map was found, a value of +/// CTM_UV_MAP_1 or higher is returned, otherwise CTM_NONE is +/// returned. +CTMEXPORT CTMenum CTMCALL ctmGetNamedUVMap(CTMcontext aContext, + const char * aName); + +/// Get information about a UV map. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aUVMap Which UV map to query (CTM_UV_MAP_1 or higher). +/// @param[in] aProperty Which UV map property to return. +/// @return A string value, representing the UV map property given +/// by \c aProperty. +/// @note The string is only valid as long as the UV map within the OpenCTM +/// context is valid. Trying to access an invalid string will result in +/// undefined behaviour. Therefor it is recommended that the string is +/// copied to a new variable if it is to be used other than directly after +/// the call to ctmGetUVMapString(). +/// @see CTMenum +CTMEXPORT const char * CTMCALL ctmGetUVMapString(CTMcontext aContext, + CTMenum aUVMap, CTMenum aProperty); + +/// Get information about a UV map. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aUVMap Which UV map to query (CTM_UV_MAP_1 or higher). +/// @param[in] aProperty Which UV map property to return. +/// @return A floating point value, representing the UV map property given +/// by \c aProperty. +/// @see CTMenum +CTMEXPORT CTMfloat CTMCALL ctmGetUVMapFloat(CTMcontext aContext, + CTMenum aUVMap, CTMenum aProperty); + +/// Get a reference to the named vertex attribute map. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aName The name of the attribute map that should be returned. +/// @return A reference to an attribute map. If the attribute map was found, +/// a value of CTM_ATTRIB_MAP_1 or higher is returned, otherwise +/// CTM_NONE is returned. +CTMEXPORT CTMenum CTMCALL ctmGetNamedAttribMap(CTMcontext aContext, + const char * aName); + +/// Get information about a vertex attribute map. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aAttribMap Which vertex attribute map to query (CTM_ATTRIB_MAP_1 +/// or higher). +/// @param[in] aProperty Which vertex attribute map property to return. +/// @return A string value, representing the vertex attribute map property given +/// by \c aProperty. +/// @note The string is only valid as long as the vertex attribute map within +/// the OpenCTM context is valid. Trying to access an invalid string will +/// result in undefined behaviour. Therefor it is recommended that the +/// string is copied to a new variable if it is to be used other than +/// directly after the call to ctmGetAttribMapString(). +/// @see CTMenum +CTMEXPORT const char * CTMCALL ctmGetAttribMapString(CTMcontext aContext, + CTMenum aAttribMap, CTMenum aProperty); + +/// Get information about a vertex attribute map. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aAttribMap Which vertex attribute map to query (CTM_ATTRIB_MAP_1 +/// or higher). +/// @param[in] aProperty Which vertex attribute map property to return. +/// @return A floating point value, representing the vertex attribute map +/// property given by \c aProperty. +/// @see CTMenum +CTMEXPORT CTMfloat CTMCALL ctmGetAttribMapFloat(CTMcontext aContext, + CTMenum aAttribMap, CTMenum aProperty); + +/// Get information about an OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aProperty Which property to return. +/// @return A string value, representing the OpenCTM context property given +/// by \c aProperty. +/// @note The string is only valid as long as the OpenCTM context is valid, or +/// until the corresponding string changes within the OpenCTM context +/// (e.g. calling ctmFileComment() invalidates the CTM_FILE_COMMENT +/// string). Trying to access an invalid string will result in undefined +/// behaviour. Therefor it is recommended that the string is copied to +/// a new variable if it is to be used other than directly after the call +/// to ctmGetString(). +/// @see CTMenum +CTMEXPORT const char * CTMCALL ctmGetString(CTMcontext aContext, + CTMenum aProperty); + +/// Set which compression method to use for the given OpenCTM context. +/// The selected compression method will be used when calling the ctmSave() +/// function. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aMethod Which compression method to use: CTM_METHOD_RAW, +/// CTM_METHOD_MG1 or CTM_METHOD_MG2 (the default method is +/// CTM_METHOD_MG1). +/// @see CTM_METHOD_RAW, CTM_METHOD_MG1, CTM_METHOD_MG2 +CTMEXPORT void CTMCALL ctmCompressionMethod(CTMcontext aContext, + CTMenum aMethod); + +/// Set which LZMA compression level to use for the given OpenCTM context. +/// The compression level can be between 0 (fastest) and 9 (best). The higher +/// the compression level, the more memory is required for compression and +/// decompression. The default compression level is 1. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aLevel Which compression level to use (0 to 9). +CTMEXPORT void CTMCALL ctmCompressionLevel(CTMcontext aContext, + CTMuint aLevel); + +/// Set the vertex coordinate precision (only used by the MG2 compression +/// method). +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aPrecision Fixed point precision. For instance, if this value is +/// 0.001, all vertex coordinates will be rounded to three decimals. +/// The default vertex coordinate precision is 2^-10 ~= 0.00098. +CTMEXPORT void CTMCALL ctmVertexPrecision(CTMcontext aContext, + CTMfloat aPrecision); + +/// Set the vertex coordinate precision, relative to the mesh dimensions (only +/// used by the MG2 compression method). +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aRelPrecision Relative precision. This factor is multiplied by the +/// average triangle edge length in the mesh in order to obtain the +/// final, fixed point precision. For instance, if aRelPrecision is +/// 0.01, and the average edge length is 3.7, then the fixed point +/// precision is set to 0.037. +/// @note The mesh must have been defined using the ctmDefineMesh() function +/// before calling this function. +/// @see ctmVertexPrecision(). +CTMEXPORT void CTMCALL ctmVertexPrecisionRel(CTMcontext aContext, + CTMfloat aRelPrecision); + +/// Set the normal precision (only used by the MG2 compression method). The +/// normal is represented in spherical coordinates in the MG2 compression +/// method, and the normal precision controls the angular and radial resolution. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aPrecision Fixed point precision. For the angular information, +/// this value represents the angular precision. For the radial +/// information, this value is the linear resolution. For instance, +/// 0.01 means that the circle is divided into 100 steps, and the +/// normal magnitude is rounded to 2 decimals. The default normal +/// precision is 2^-8 ~= 0.0039. +CTMEXPORT void CTMCALL ctmNormalPrecision(CTMcontext aContext, + CTMfloat aPrecision); + +/// Set the coordinate precision for the specified UV map (only used by the +/// MG2 compression method). +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aUVMap A UV map specifier for a defined UV map +/// (CTM_UV_MAP_1, ...). +/// @param[in] aPrecision Fixed point precision. For instance, if this value is +/// 0.001, all UV coordinates will be rounded to three decimals. +/// The default UV coordinate precision is 2^-12 ~= 0.00024. +/// @see ctmAddUVMap(). +CTMEXPORT void CTMCALL ctmUVCoordPrecision(CTMcontext aContext, + CTMenum aUVMap, CTMfloat aPrecision); + +/// Set the attribute value precision for the specified attribute map (only +/// used by the MG2 compression method). +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aAttribMap An attribute map specifier for a defined attribute map +/// (CTM_ATTRIB_MAP_1, ...). +/// @param[in] aPrecision Fixed point precision. For instance, if this value is +/// 0.001, all attribute values will be rounded to three decimals. +/// If the attributes represent integer values, set the precision +/// to 1.0. The default attribute precision is 2^-8 ~= 0.0039. +/// @see ctmAddAttribMap(). +CTMEXPORT void CTMCALL ctmAttribPrecision(CTMcontext aContext, + CTMenum aAttribMap, CTMfloat aPrecision); + +/// Set the file comment for the given OpenCTM context. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aFileComment The file comment (zero terminated UTF-8 string). +CTMEXPORT void CTMCALL ctmFileComment(CTMcontext aContext, + const char * aFileComment); + +/// Define a triangle mesh. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aVertices An array of vertices (three consecutive floats make +/// one vertex). +/// @param[in] aVertexCount The number of vertices in \c aVertices (and +/// optionally \c aTexCoords). +/// @param[in] aIndices An array of vertex indices (three consecutive integers +/// make one triangle). +/// @param[in] aTriangleCount The number of triangles in \c aIndices (there +/// must be exactly 3 x \c aTriangleCount indices in \c aIndices). +/// @param[in] aNormals An array of per-vertex normals (or NULL if there are +/// no normals). Each normal is made up by three consecutive floats, +/// and there must be \c aVertexCount normals. +/// @see ctmAddUVMap(), ctmAddAttribMap(), ctmSave(), ctmSaveCustom(). +CTMEXPORT void CTMCALL ctmDefineMesh(CTMcontext aContext, + const CTMfloat * aVertices, CTMuint aVertexCount, const CTMuint * aIndices, + CTMuint aTriangleCount, const CTMfloat * aNormals); + +/// Define a UV map. There can be several UV maps in a mesh. A UV map is +/// typically used for 2D texture mapping. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aUVCoords An array of UV coordinates. Each UV coordinate is made +/// up by two consecutive floats, and there must be as many +/// coordinates as there are vertices in the mesh. +/// @param[in] aName A unique name for this UV map (zero terminated UTF-8 +/// string). +/// @param[in] aFileName A reference to a image file (zero terminated +/// UTF-8 string). If no file name reference exists, pass NULL. +/// @return A UV map index (CTM_UV_MAP_1 and higher). If the function +/// failed, it will return the zero valued CTM_NONE (use ctmGetError() +/// to determine the cause of the error). +/// @note A triangle mesh must have been defined before calling this function, +/// since the number of vertices is defined by the triangle mesh. +/// @see ctmDefineMesh(). +CTMEXPORT CTMenum CTMCALL ctmAddUVMap(CTMcontext aContext, + const CTMfloat * aUVCoords, const char * aName, const char * aFileName); + +/// Define a custom vertex attribute map. Custom vertex attributes can be used +/// for defining special per-vertex attributes, such as color, weight, ambient +/// occlusion factor, etc. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aAttribValues An array of attribute values. Each attribute value +/// is made up by four consecutive floats, and there must be as many +/// values as there are vertices in the mesh. +/// @param[in] aName A unique name for this attribute map (zero terminated UTF-8 +/// string). +/// @return A attribute map index (CTM_ATTRIB_MAP_1 and higher). If the function +/// failed, it will return the zero valued CTM_NONE (use ctmGetError() +/// to determine the cause of the error). +/// @note A triangle mesh must have been defined before calling this function, +/// since the number of vertices is defined by the triangle mesh. +/// @see ctmDefineMesh(). +CTMEXPORT CTMenum CTMCALL ctmAddAttribMap(CTMcontext aContext, + const CTMfloat * aAttribValues, const char * aName); + +/// Load an OpenCTM format file into the context. The mesh data can be retrieved +/// with the various ctmGet functions. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aFileName The name of the file to be loaded. +CTMEXPORT void CTMCALL ctmLoad(CTMcontext aContext, const char * aFileName); + +/// Load an OpenCTM format file using a custom stream read function. The mesh +/// data can be retrieved with the various ctmGet functions. +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aReadFn Pointer to a custom stream read function. +/// @param[in] aUserData Custom user data, which can be a C language FILE +/// handle, C++ istream object, or a custom object pointer +/// of any type. The user data pointer will be passed to the +/// custom stream read function. +/// @see CTMreadfn. +CTMEXPORT void CTMCALL ctmLoadCustom(CTMcontext aContext, CTMreadfn aReadFn, + void * aUserData); + +/// Save an OpenCTM format file. The mesh must have been defined by +/// ctmDefineMesh(). +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aFileName The name of the file to be saved. +CTMEXPORT void CTMCALL ctmSave(CTMcontext aContext, const char * aFileName); + +/// Save an OpenCTM format file using a custom stream write function. The mesh +/// must have been defined by ctmDefineMesh(). +/// @param[in] aContext An OpenCTM context that has been created by +/// ctmNewContext(). +/// @param[in] aWriteFn Pointer to a custom stream write function. +/// @param[in] aUserData Custom user data, which can be a C language FILE +/// handle, C++ ostream object, or a custom object pointer +/// of any type. The user data pointer will be passed to the +/// custom stream write function. +/// @see CTMwritefn. +CTMEXPORT void CTMCALL ctmSaveCustom(CTMcontext aContext, CTMwritefn aWriteFn, + void * aUserData); + +#ifdef __cplusplus +} +#endif + + +// C++ extensions to the API (to disable C++ extensions, define OPENCTM_NO_CPP) +#if defined(__cplusplus) && !defined(OPENCTM_NO_CPP) + #include "openctmpp.h" +#endif + +#endif // __OPENCTM_H_ diff --git a/3rdparty/openctm/lib/openctm.rc b/3rdparty/openctm/lib/openctm.rc new file mode 100644 index 000000000..e95823843 --- /dev/null +++ b/3rdparty/openctm/lib/openctm.rc @@ -0,0 +1,26 @@ + +1 VERSIONINFO + FILEVERSION 1,0,3,0 + PRODUCTVERSION 1,0,3,0 + FILEOS 0x4 + FILETYPE 0x2 + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "ProductVersion", "1.0.3.0" + VALUE "FileVersion", "1.0.3.0" + VALUE "FileDescription", "OpenCTM API shared library" + VALUE "ProductName", "OpenCTM" + VALUE "OriginalFilename", "openctm.dll" + VALUE "LegalCopyright", "© 2009-2010 Marcus Geelnard" + VALUE "License", "This software is released under the zlib/libpng license." + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END + END diff --git a/3rdparty/openctm/lib/openctmpp.h b/3rdparty/openctm/lib/openctmpp.h new file mode 100644 index 000000000..1d54a243b --- /dev/null +++ b/3rdparty/openctm/lib/openctmpp.h @@ -0,0 +1,377 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: openctmpp.h +// Description: C++ wrapper for the OpenCTM API. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +// To disable C++ extensions, define OPENCTM_NO_CPP +#ifndef OPENCTM_NO_CPP + +#ifndef __OPENCTMPP_H_ +#define __OPENCTMPP_H_ + +// Just in case (if this file was included from outside openctm.h)... +#ifndef __OPENCTM_H_ +#include "openctm.h" +#endif + +#include + +/// OpenCTM exception. When an error occurs, a \c ctm_error exception is +/// thrown. Its what() function returns the name of the OpenCTM error code +/// (for instance "CTM_INVALID_OPERATION"). +class ctm_error: public std::exception +{ + private: + CTMenum mErrorCode; + + public: + explicit ctm_error(CTMenum aError) + { + mErrorCode = aError; + } + + virtual const char* what() const throw() + { + return ctmErrorString(mErrorCode); + } + + CTMenum error_code() const throw() + { + return mErrorCode; + } +}; + + +/// OpenCTM importer class. This is a C++ wrapper class for an OpenCTM import +/// context. Usage example: +/// +/// @code +/// // Create a new OpenCTM importer object +/// CTMimporter ctm; +/// +/// // Load the OpenCTM file +/// ctm.Load("mymesh.ctm"); +/// +/// // Access the mesh data +/// vertCount = ctm.GetInteger(CTM_VERTEX_COUNT); +/// vertices = ctm.GetFloatArray(CTM_VERTICES); +/// triCount = ctm.GetInteger(CTM_TRIANGLE_COUNT); +/// indices = ctm.GetIntegerArray(CTM_INDICES); +/// +/// // Deal with the mesh (e.g. transcode it to our internal representation) +/// // ... +/// @endcode + +class CTMimporter { + private: + /// The OpenCTM context handle. + CTMcontext mContext; + + /// Check for OpenCTM errors, and throw an exception if an error has + /// occured. + void CheckError() + { + CTMenum err = ctmGetError(mContext); + if(err != CTM_NONE) + throw ctm_error(err); + } + + public: + /// Constructor + CTMimporter() + { + mContext = ctmNewContext(CTM_IMPORT); + } + + /// Destructor + ~CTMimporter() + { + ctmFreeContext(mContext); + } + + /// Wrapper for ctmGetInteger() + CTMuint GetInteger(CTMenum aProperty) + { + CTMuint res = ctmGetInteger(mContext, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetFloat() + CTMfloat GetFloat(CTMenum aProperty) + { + CTMfloat res = ctmGetFloat(mContext, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetIntegerArray() + const CTMuint * GetIntegerArray(CTMenum aProperty) + { + const CTMuint * res = ctmGetIntegerArray(mContext, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetFloatArray() + const CTMfloat * GetFloatArray(CTMenum aProperty) + { + const CTMfloat * res = ctmGetFloatArray(mContext, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetNamedUVMap() + CTMenum GetNamedUVMap(const char * aName) + { + CTMenum res = ctmGetNamedUVMap(mContext, aName); + CheckError(); + return res; + } + + /// Wrapper for ctmGetUVMapString() + const char * GetUVMapString(CTMenum aUVMap, CTMenum aProperty) + { + const char * res = ctmGetUVMapString(mContext, aUVMap, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetUVMapFloat() + CTMfloat GetUVMapFloat(CTMenum aUVMap, CTMenum aProperty) + { + CTMfloat res = ctmGetUVMapFloat(mContext, aUVMap, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetNamedAttribMap() + CTMenum GetNamedAttribMap(const char * aName) + { + CTMenum res = ctmGetNamedAttribMap(mContext, aName); + CheckError(); + return res; + } + + /// Wrapper for ctmGetAttribMapString() + const char * GetAttribMapString(CTMenum aAttribMap, CTMenum aProperty) + { + const char * res = ctmGetAttribMapString(mContext, aAttribMap, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetAttribMapFloat() + CTMfloat GetAttribMapFloat(CTMenum aAttribMap, CTMenum aProperty) + { + CTMfloat res = ctmGetAttribMapFloat(mContext, aAttribMap, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmGetString() + const char * GetString(CTMenum aProperty) + { + const char * res = ctmGetString(mContext, aProperty); + CheckError(); + return res; + } + + /// Wrapper for ctmLoad() + void Load(const char * aFileName) + { + ctmLoad(mContext, aFileName); + CheckError(); + } + + /// Wrapper for ctmLoadCustom() + void LoadCustom(CTMreadfn aReadFn, void * aUserData) + { + ctmLoadCustom(mContext, aReadFn, aUserData); + CheckError(); + } + + // You can not copy nor assign from one CTMimporter object to another, since + // the object contains hidden state. By declaring these dummy prototypes + // without an implementation, you will at least get linker errors if you try + // to copy or assign a CTMimporter object. + CTMimporter(const CTMimporter& v); + CTMimporter& operator=(const CTMimporter& v); +}; + + +/// OpenCTM exporter class. This is a C++ wrapper class for an OpenCTM export +/// context. Usage example: +/// @code +/// void MySaveFile(CTMuint aVertCount, CTMuint aTriCount, CTMfloat * aVertices, +/// CTMuint * aIndices, const char * aFileName) +/// { +/// // Create a new OpenCTM exporter object +/// CTMexporter ctm; +/// +/// // Define our mesh representation to OpenCTM (store references to it in +/// // the context) +/// ctm.DefineMesh(aVertices, aVertCount, aIndices, aTriCount, NULL); +/// +/// // Save the OpenCTM file +/// ctm.Save(aFileName); +/// } +/// @endcode + +class CTMexporter { + private: + /// The OpenCTM context handle. + CTMcontext mContext; + + /// Check for OpenCTM errors, and throw an exception if an error has + /// occured. + void CheckError() + { + CTMenum err = ctmGetError(mContext); + if(err != CTM_NONE) + throw ctm_error(err); + } + + public: + /// Constructor + CTMexporter() + { + mContext = ctmNewContext(CTM_EXPORT); + } + + /// Destructor + ~CTMexporter() + { + ctmFreeContext(mContext); + } + + /// Wrapper for ctmCompressionMethod() + void CompressionMethod(CTMenum aMethod) + { + ctmCompressionMethod(mContext, aMethod); + CheckError(); + } + + /// Wrapper for ctmCompressionLevel() + void CompressionLevel(CTMuint aLevel) + { + ctmCompressionLevel(mContext, aLevel); + CheckError(); + } + + /// Wrapper for ctmVertexPrecision() + void VertexPrecision(CTMfloat aPrecision) + { + ctmVertexPrecision(mContext, aPrecision); + CheckError(); + } + + /// Wrapper for ctmVertexPrecisionRel() + void VertexPrecisionRel(CTMfloat aRelPrecision) + { + ctmVertexPrecisionRel(mContext, aRelPrecision); + CheckError(); + } + + /// Wrapper for ctmNormalPrecision() + void NormalPrecision(CTMfloat aPrecision) + { + ctmNormalPrecision(mContext, aPrecision); + CheckError(); + } + + /// Wrapper for ctmUVCoordPrecision() + void UVCoordPrecision(CTMenum aUVMap, CTMfloat aPrecision) + { + ctmUVCoordPrecision(mContext, aUVMap, aPrecision); + CheckError(); + } + + /// Wrapper for ctmAttribPrecision() + void AttribPrecision(CTMenum aAttribMap, CTMfloat aPrecision) + { + ctmAttribPrecision(mContext, aAttribMap, aPrecision); + CheckError(); + } + + /// Wrapper for ctmFileComment() + void FileComment(const char * aFileComment) + { + ctmFileComment(mContext, aFileComment); + CheckError(); + } + + /// Wrapper for ctmDefineMesh() + void DefineMesh(const CTMfloat * aVertices, CTMuint aVertexCount, + const CTMuint * aIndices, CTMuint aTriangleCount, + const CTMfloat * aNormals) + { + ctmDefineMesh(mContext, aVertices, aVertexCount, aIndices, aTriangleCount, + aNormals); + CheckError(); + } + + /// Wrapper for ctmAddUVMap() + CTMenum AddUVMap(const CTMfloat * aUVCoords, const char * aName, + const char * aFileName) + { + CTMenum res = ctmAddUVMap(mContext, aUVCoords, aName, aFileName); + CheckError(); + return res; + } + + /// Wrapper for ctmAddAttribMap() + CTMenum AddAttribMap(const CTMfloat * aAttribValues, const char * aName) + { + CTMenum res = ctmAddAttribMap(mContext, aAttribValues, aName); + CheckError(); + return res; + } + + /// Wrapper for ctmSave() + void Save(const char * aFileName) + { + ctmSave(mContext, aFileName); + CheckError(); + } + + /// Wrapper for ctmSaveCustom() + void SaveCustom(CTMwritefn aWriteFn, void * aUserData) + { + ctmSaveCustom(mContext, aWriteFn, aUserData); + CheckError(); + } + + // You can not copy nor assign from one CTMexporter object to another, since + // the object contains hidden state. By declaring these dummy prototypes + // without an implementation, you will at least get linker errors if you try + // to copy or assign a CTMexporter object. + CTMexporter(const CTMexporter& v); + CTMexporter& operator=(const CTMexporter& v); +}; + +#endif // __OPENCTMPP_H_ + +#endif // OPENCTM_NO_CPP diff --git a/3rdparty/openctm/lib/stream.c b/3rdparty/openctm/lib/stream.c new file mode 100644 index 000000000..5ed85b7a9 --- /dev/null +++ b/3rdparty/openctm/lib/stream.c @@ -0,0 +1,512 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM +// File: stream.c +// Description: Stream I/O functions. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include "openctm.h" +#include "internal.h" + +#ifdef __DEBUG_ +#include +#endif + +//----------------------------------------------------------------------------- +// _ctmStreamRead() - Read data from a stream. +//----------------------------------------------------------------------------- +CTMuint _ctmStreamRead(_CTMcontext * self, void * aBuf, CTMuint aCount) +{ + if(!self->mUserData || !self->mReadFn) + return 0; + + return self->mReadFn(aBuf, aCount, self->mUserData); +} + +//----------------------------------------------------------------------------- +// _ctmStreamWrite() - Write data to a stream. +//----------------------------------------------------------------------------- +CTMuint _ctmStreamWrite(_CTMcontext * self, void * aBuf, CTMuint aCount) +{ + if(!self->mUserData || !self->mWriteFn) + return 0; + + return self->mWriteFn(aBuf, aCount, self->mUserData); +} + +//----------------------------------------------------------------------------- +// _ctmStreamReadUINT() - Read an unsigned integer from a stream in a machine +// endian independent manner (for portability). +//----------------------------------------------------------------------------- +CTMuint _ctmStreamReadUINT(_CTMcontext * self) +{ + unsigned char buf[4]; + _ctmStreamRead(self, (void *) buf, 4); + return ((CTMuint) buf[0]) | + (((CTMuint) buf[1]) << 8) | + (((CTMuint) buf[2]) << 16) | + (((CTMuint) buf[3]) << 24); +} + +//----------------------------------------------------------------------------- +// _ctmStreamWriteUINT() - Write an unsigned integer to a stream in a machine +// endian independent manner (for portability). +//----------------------------------------------------------------------------- +void _ctmStreamWriteUINT(_CTMcontext * self, CTMuint aValue) +{ + unsigned char buf[4]; + buf[0] = aValue & 0x000000ff; + buf[1] = (aValue >> 8) & 0x000000ff; + buf[2] = (aValue >> 16) & 0x000000ff; + buf[3] = (aValue >> 24) & 0x000000ff; + _ctmStreamWrite(self, (void *) buf, 4); +} + +//----------------------------------------------------------------------------- +// _ctmStreamReadFLOAT() - Read a floating point value from a stream in a +// machine endian independent manner (for portability). +//----------------------------------------------------------------------------- +CTMfloat _ctmStreamReadFLOAT(_CTMcontext * self) +{ + union { + CTMfloat f; + CTMuint i; + } u; + u.i = _ctmStreamReadUINT(self); + return u.f; +} + +//----------------------------------------------------------------------------- +// _ctmStreamWriteFLOAT() - Write a floating point value to a stream in a +// machine endian independent manner (for portability). +//----------------------------------------------------------------------------- +void _ctmStreamWriteFLOAT(_CTMcontext * self, CTMfloat aValue) +{ + union { + CTMfloat f; + CTMuint i; + } u; + u.f = aValue; + _ctmStreamWriteUINT(self, u.i); +} + +//----------------------------------------------------------------------------- +// _ctmStreamReadSTRING() - Read a string value from a stream. The format of +// the string in the stream is: an unsigned integer (string length) followed by +// the string (without null termination). +//----------------------------------------------------------------------------- +void _ctmStreamReadSTRING(_CTMcontext * self, char ** aValue) +{ + CTMuint len; + + // Clear the old string + if(*aValue) + { + free(*aValue); + *aValue = (char *) 0; + } + + // Get string length + len = _ctmStreamReadUINT(self); + + // Read string + if(len > 0) + { + *aValue = (char *) malloc(len + 1); + if(*aValue) + { + _ctmStreamRead(self, (void *) *aValue, len); + (*aValue)[len] = 0; + } + } +} + +//----------------------------------------------------------------------------- +// _ctmStreamWriteSTRING() - Write a string value to a stream. The format of +// the string in the stream is: an unsigned integer (string length) followed by +// the string (without null termination). +//----------------------------------------------------------------------------- +void _ctmStreamWriteSTRING(_CTMcontext * self, const char * aValue) +{ + CTMuint len; + + // Get string length + if(aValue) + len = strlen(aValue); + else + len = 0; + + // Write string length + _ctmStreamWriteUINT(self, len); + + // Write string + if(len > 0) + _ctmStreamWrite(self, (void *) aValue, len); +} + +//----------------------------------------------------------------------------- +// _ctmStreamReadPackedInts() - Read an compressed binary integer data array +// from a stream, and uncompress it. +//----------------------------------------------------------------------------- +int _ctmStreamReadPackedInts(_CTMcontext * self, CTMint * aData, + CTMuint aCount, CTMuint aSize, CTMint aSignedInts) +{ + size_t packedSize, unpackedSize; + CTMuint i, k, x; + CTMint value; + unsigned char * packed, * tmp; + unsigned char props[5]; + int lzmaRes; + + // Read packed data size from the stream + packedSize = (size_t) _ctmStreamReadUINT(self); + + // Read LZMA compression props from the stream + _ctmStreamRead(self, (void *) props, 5); + + // Allocate memory and read the packed data from the stream + packed = (unsigned char *) malloc(packedSize); + if(!packed) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + _ctmStreamRead(self, (void *) packed, packedSize); + + // Allocate memory for interleaved array + tmp = (unsigned char *) malloc(aCount * aSize * 4); + if(!tmp) + { + free(packed); + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Uncompress + unpackedSize = aCount * aSize * 4; + lzmaRes = LzmaUncompress(tmp, &unpackedSize, packed, + &packedSize, props, 5); + + // Free the packed array + free(packed); + + // Error? + if((lzmaRes != SZ_OK) || (unpackedSize != aCount * aSize * 4)) + { + self->mError = CTM_LZMA_ERROR; + free(tmp); + return CTM_FALSE; + } + + // Convert interleaved array to integers + for(i = 0; i < aCount; ++ i) + { + for(k = 0; k < aSize; ++ k) + { + value = (CTMint) tmp[i + k * aCount + 3 * aCount * aSize] | + (((CTMint) tmp[i + k * aCount + 2 * aCount * aSize]) << 8) | + (((CTMint) tmp[i + k * aCount + aCount * aSize]) << 16) | + (((CTMint) tmp[i + k * aCount]) << 24); + // Convert signed magnitude to two's complement? + if(aSignedInts) + { + x = (CTMuint) value; + value = (x & 1) ? -(CTMint)((x + 1) >> 1) : (CTMint)(x >> 1); + } + aData[i * aSize + k] = value; + } + } + + // Free the interleaved array + free(tmp); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmStreamWritePackedInts() - Compress a binary integer data array, and +// write it to a stream. +//----------------------------------------------------------------------------- +int _ctmStreamWritePackedInts(_CTMcontext * self, CTMint * aData, + CTMuint aCount, CTMuint aSize, CTMint aSignedInts) +{ + int lzmaRes, lzmaAlgo; + CTMuint i, k; + CTMint value; + size_t bufSize, outPropsSize; + unsigned char * packed, outProps[5], *tmp; +#ifdef __DEBUG_ + CTMuint negCount = 0; +#endif + + // Allocate memory for interleaved array + tmp = (unsigned char *) malloc(aCount * aSize * 4); + if(!tmp) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Convert integers to an interleaved array + for(i = 0; i < aCount; ++ i) + { + for(k = 0; k < aSize; ++ k) + { + value = aData[i * aSize + k]; + // Convert two's complement to signed magnitude? + if(aSignedInts) + value = value < 0 ? -1 - (value << 1) : value << 1; +#ifdef __DEBUG_ + else if(value < 0) + ++ negCount; +#endif + tmp[i + k * aCount + 3 * aCount * aSize] = value & 0x000000ff; + tmp[i + k * aCount + 2 * aCount * aSize] = (value >> 8) & 0x000000ff; + tmp[i + k * aCount + aCount * aSize] = (value >> 16) & 0x000000ff; + tmp[i + k * aCount] = (value >> 24) & 0x000000ff; + } + } + + // Allocate memory for the packed data + bufSize = 1000 + aCount * aSize * 4; + packed = (unsigned char *) malloc(bufSize); + if(!packed) + { + free(tmp); + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Call LZMA to compress + outPropsSize = 5; + lzmaAlgo = (self->mCompressionLevel < 1 ? 0 : 1); + lzmaRes = LzmaCompress(packed, + &bufSize, + (const unsigned char *) tmp, + aCount * aSize * 4, + outProps, + &outPropsSize, + self->mCompressionLevel, // Level (0-9) + 0, -1, -1, -1, -1, -1, // Default values (set by level) + lzmaAlgo // Algorithm (0 = fast, 1 = normal) + ); + + // Free temporary array + free(tmp); + + // Error? + if(lzmaRes != SZ_OK) + { + self->mError = CTM_LZMA_ERROR; + free(packed); + return CTM_FALSE; + } + +#ifdef __DEBUG_ + printf("%d->%d bytes (%d negative words)\n", aCount * aSize * 4, (int) bufSize, negCount); +#endif + + // Write packed data size to the stream + _ctmStreamWriteUINT(self, (CTMuint) bufSize); + + // Write LZMA compression props to the stream + _ctmStreamWrite(self, (void *) outProps, 5); + + // Write the packed data to the stream + _ctmStreamWrite(self, (void *) packed, (CTMuint) bufSize); + + // Free the packed data + free(packed); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmStreamReadPackedFloats() - Read an compressed binary float data array +// from a stream, and uncompress it. +//----------------------------------------------------------------------------- +int _ctmStreamReadPackedFloats(_CTMcontext * self, CTMfloat * aData, + CTMuint aCount, CTMuint aSize) +{ + CTMuint i, k; + size_t packedSize, unpackedSize; + union { + CTMfloat f; + CTMint i; + } value; + unsigned char * packed, * tmp; + unsigned char props[5]; + int lzmaRes; + + // Read packed data size from the stream + packedSize = (size_t) _ctmStreamReadUINT(self); + + // Read LZMA compression props from the stream + _ctmStreamRead(self, (void *) props, 5); + + // Allocate memory and read the packed data from the stream + packed = (unsigned char *) malloc(packedSize); + if(!packed) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + _ctmStreamRead(self, (void *) packed, packedSize); + + // Allocate memory for interleaved array + tmp = (unsigned char *) malloc(aCount * aSize * 4); + if(!tmp) + { + free(packed); + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Uncompress + unpackedSize = aCount * aSize * 4; + lzmaRes = LzmaUncompress(tmp, &unpackedSize, packed, + &packedSize, props, 5); + + // Free the packed array + free(packed); + + // Error? + if((lzmaRes != SZ_OK) || (unpackedSize != aCount * aSize * 4)) + { + self->mError = CTM_LZMA_ERROR; + free(tmp); + return CTM_FALSE; + } + + // Convert interleaved array to floats + for(i = 0; i < aCount; ++ i) + { + for(k = 0; k < aSize; ++ k) + { + value.i = (CTMint) tmp[i + k * aCount + 3 * aCount * aSize] | + (((CTMint) tmp[i + k * aCount + 2 * aCount * aSize]) << 8) | + (((CTMint) tmp[i + k * aCount + aCount * aSize]) << 16) | + (((CTMint) tmp[i + k * aCount]) << 24); + aData[i * aSize + k] = value.f; + } + } + + // Free the interleaved array + free(tmp); + + return CTM_TRUE; +} + +//----------------------------------------------------------------------------- +// _ctmStreamWritePackedFloats() - Compress a binary float data array, and +// write it to a stream. +//----------------------------------------------------------------------------- +int _ctmStreamWritePackedFloats(_CTMcontext * self, CTMfloat * aData, + CTMuint aCount, CTMuint aSize) +{ + int lzmaRes, lzmaAlgo; + CTMuint i, k; + union { + CTMfloat f; + CTMint i; + } value; + size_t bufSize, outPropsSize; + unsigned char * packed, outProps[5], *tmp; + + // Allocate memory for interleaved array + tmp = (unsigned char *) malloc(aCount * aSize * 4); + if(!tmp) + { + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Convert floats to an interleaved array + for(i = 0; i < aCount; ++ i) + { + for(k = 0; k < aSize; ++ k) + { + value.f = aData[i * aSize + k]; + tmp[i + k * aCount + 3 * aCount * aSize] = value.i & 0x000000ff; + tmp[i + k * aCount + 2 * aCount * aSize] = (value.i >> 8) & 0x000000ff; + tmp[i + k * aCount + aCount * aSize] = (value.i >> 16) & 0x000000ff; + tmp[i + k * aCount] = (value.i >> 24) & 0x000000ff; + } + } + + // Allocate memory for the packed data + bufSize = 1000 + aCount * aSize * 4; + packed = (unsigned char *) malloc(bufSize); + if(!packed) + { + free(tmp); + self->mError = CTM_OUT_OF_MEMORY; + return CTM_FALSE; + } + + // Call LZMA to compress + outPropsSize = 5; + lzmaAlgo = (self->mCompressionLevel < 1 ? 0 : 1); + lzmaRes = LzmaCompress(packed, + &bufSize, + (const unsigned char *) tmp, + aCount * aSize * 4, + outProps, + &outPropsSize, + self->mCompressionLevel, // Level (0-9) + 0, -1, -1, -1, -1, -1, // Default values (set by level) + lzmaAlgo // Algorithm (0 = fast, 1 = normal) + ); + + // Free temporary array + free(tmp); + + // Error? + if(lzmaRes != SZ_OK) + { + self->mError = CTM_LZMA_ERROR; + free(packed); + return CTM_FALSE; + } + +#ifdef __DEBUG_ + printf("%d->%d bytes\n", aCount * aSize * 4, (int) bufSize); +#endif + + // Write packed data size to the stream + _ctmStreamWriteUINT(self, (CTMuint) bufSize); + + // Write LZMA compression props to the stream + _ctmStreamWrite(self, (void *) outProps, 5); + + // Write the packed data to the stream + _ctmStreamWrite(self, (void *) packed, (CTMuint) bufSize); + + // Free the packed data + free(packed); + + return CTM_TRUE; +} diff --git a/3rdparty/openctm/plugins/blender/openctm_export.py b/3rdparty/openctm/plugins/blender/openctm_export.py new file mode 100644 index 000000000..5f335be2f --- /dev/null +++ b/3rdparty/openctm/plugins/blender/openctm_export.py @@ -0,0 +1,332 @@ +#!BPY + +""" +Name: 'OpenCTM (*.ctm)...' +Blender: 248 +Group: 'Export' +Tooltip: 'Export active object to OpenCTM (compressed) format' +""" + +import bpy +import Blender +from Blender import Mesh, Scene, Window, sys, Image, Draw +import BPyMesh +import ctypes +from ctypes import * +from ctypes.util import find_library +import os + + +__author__ = "Marcus Geelnard" +__version__ = "0.4" +__bpydoc__ = """\ +This script exports OpenCTM files from Blender. It supports normals, +colours, and UV coordinates per vertex. Only one mesh can be exported +at a time. +""" + +# Copyright (C) 2009-2010: Marcus Geelnard +# +# This program is released to the public domain. +# +# Portions of this code are taken from ply_export.py in Blender +# 2.48. +# +# The script uses the OpenCTM shared library (.so, .dll, etc). If no +# such library can be found, the script will exit with an error +# message. +# +# v0.4, 2009-09-14 +# - Updated to OpenCTM API version 0.8 (texture maps are now called UV maps) +# +# v0.3, 2009-08-09 +# - Changed vertex color attribute name to "Color" +# +# v0.2, 2009-06-30 +# - Added precision settings for MG2 export +# - Added some error checking +# +# v0.1, 2009-05-31 +# - First test version with an alpha version of the OpenCTM API +# + + +def file_callback(filename): + + if not filename.lower().endswith('.ctm'): + filename += '.ctm' + + # Get object mesh from the selected object + scn = bpy.data.scenes.active + ob = scn.objects.active + if not ob: + Blender.Draw.PupMenu('Error%t|Select 1 active object') + return + mesh = BPyMesh.getMeshFromObject(ob, None, False, False, scn) + if not mesh: + Blender.Draw.PupMenu('Error%t|Could not get mesh data from active object') + return + + # Check which mesh properties are present... + hasVertexUV = mesh.vertexUV or mesh.faceUV + hasVertexColors = mesh.vertexColors + + # Show a GUI for the export settings + pupBlock = [] + EXPORT_APPLY_MODIFIERS = Draw.Create(1) + pupBlock.append(('Apply Modifiers', EXPORT_APPLY_MODIFIERS, 'Use transformed mesh data.')) + EXPORT_NORMALS = Draw.Create(1) + pupBlock.append(('Normals', EXPORT_NORMALS, 'Export vertex normal data.')) + if hasVertexUV: + EXPORT_UV = Draw.Create(1) + pupBlock.append(('UVs', EXPORT_UV, 'Export texface UV coords.')) + if hasVertexColors: + EXPORT_COLORS = Draw.Create(1) + pupBlock.append(('Colors', EXPORT_COLORS, 'Export vertex Colors.')) + EXPORT_MG2 = Draw.Create(0) + pupBlock.append(('Fixed Point', EXPORT_MG2, 'Use limited precision algorithm (MG2 method = better compression).')) + if not Draw.PupBlock('Export...', pupBlock): + return + + # Adjust export settings according to GUI selections + EXPORT_APPLY_MODIFIERS = EXPORT_APPLY_MODIFIERS.val + EXPORT_NORMALS = EXPORT_NORMALS.val + if hasVertexUV: + EXPORT_UV = EXPORT_UV.val + else: + EXPORT_UV = False + if hasVertexColors: + EXPORT_COLORS = EXPORT_COLORS.val + else: + EXPORT_COLORS = False + EXPORT_MG2 = EXPORT_MG2.val + + # If the user wants to export MG2, then show another GUI... + if EXPORT_MG2: + pupBlock = [] + EXPORT_VPREC = Draw.Create(0.01) + pupBlock.append(('Vertex', EXPORT_VPREC, 0.0001, 1.0, 'Relative vertex precision (fixed point).')) + if EXPORT_NORMALS: + EXPORT_NPREC = Draw.Create(1.0/256.0) + pupBlock.append(('Normal', EXPORT_NPREC, 0.0001, 1.0, 'Normal precision (fixed point).')) + if EXPORT_UV: + EXPORT_UVPREC = Draw.Create(1.0/1024.0) + pupBlock.append(('UV', EXPORT_UVPREC, 0.0001, 1.0, 'UV precision (fixed point).')) + if EXPORT_COLORS: + EXPORT_CPREC = Draw.Create(1.0/256.0) + pupBlock.append(('Color', EXPORT_CPREC, 0.0001, 1.0, 'Color precision (fixed point).')) + if not Draw.PupBlock('Fixed point precision...', pupBlock): + return + + # Adjust export settings according to GUI selections + if EXPORT_MG2: + EXPORT_VPREC = EXPORT_VPREC.val + else: + EXPORT_VPREC = 0.1 + if EXPORT_MG2 and EXPORT_NORMALS: + EXPORT_NPREC = EXPORT_NPREC.val + else: + EXPORT_NPREC = 0.1 + if EXPORT_MG2 and EXPORT_UV: + EXPORT_UVPREC = EXPORT_UVPREC.val + else: + EXPORT_UVPREC = 0.1 + if EXPORT_MG2 and EXPORT_COLORS: + EXPORT_CPREC = EXPORT_CPREC.val + else: + EXPORT_CPREC = 0.1 + + is_editmode = Blender.Window.EditMode() + if is_editmode: + Blender.Window.EditMode(0, '', 0) + Window.WaitCursor(1) + try: + # Get the mesh, again, if we wanted modifiers (from GUI selection) + if EXPORT_APPLY_MODIFIERS: + mesh = BPyMesh.getMeshFromObject(ob, None, EXPORT_APPLY_MODIFIERS, False, scn) + if not mesh: + Blender.Draw.PupMenu('Error%t|Could not get mesh data from active object') + return + mesh.transform(ob.matrixWorld, True) + + # Count triangles (quads count as two triangles) + triangleCount = 0 + for f in mesh.faces: + if len(f.v) == 4: + triangleCount += 2 + else: + triangleCount += 1 + + # Extract indices from the Blender mesh (quads are split into two triangles) + pindices = cast((c_int * 3 * triangleCount)(), POINTER(c_int)) + i = 0 + for f in mesh.faces: + pindices[i] = c_int(f.v[0].index) + pindices[i + 1] = c_int(f.v[1].index) + pindices[i + 2] = c_int(f.v[2].index) + i += 3 + if len(f.v) == 4: + pindices[i] = c_int(f.v[0].index) + pindices[i + 1] = c_int(f.v[2].index) + pindices[i + 2] = c_int(f.v[3].index) + i += 3 + + # Extract vertex array from the Blender mesh + vertexCount = len(mesh.verts) + pvertices = cast((c_float * 3 * vertexCount)(), POINTER(c_float)) + i = 0 + for v in mesh.verts: + pvertices[i] = c_float(v.co.x) + pvertices[i + 1] = c_float(v.co.y) + pvertices[i + 2] = c_float(v.co.z) + i += 3 + + # Extract normals + if EXPORT_NORMALS: + pnormals = cast((c_float * 3 * vertexCount)(), POINTER(c_float)) + i = 0 + for v in mesh.verts: + pnormals[i] = c_float(v.no.x) + pnormals[i + 1] = c_float(v.no.y) + pnormals[i + 2] = c_float(v.no.z) + i += 3 + else: + pnormals = POINTER(c_float)() + + # Extract UVs + if EXPORT_UV: + ptexCoords = cast((c_float * 2 * vertexCount)(), POINTER(c_float)) + if mesh.faceUV: + for f in mesh.faces: + for j, v in enumerate(f.v): + k = v.index + if k < vertexCount: + uv = f.uv[j] + ptexCoords[k * 2] = uv[0] + ptexCoords[k * 2 + 1] = uv[1] + else: + i = 0 + for v in mesh.verts: + ptexCoords[i] = c_float(v.uvco[0]) + ptexCoords[i + 1] = c_float(v.uvco[1]) + i += 2 + else: + ptexCoords = POINTER(c_float)() + + # Extract colors + if EXPORT_COLORS: + pcolors = cast((c_float * 4 * vertexCount)(), POINTER(c_float)) + for f in mesh.faces: + for j, v in enumerate(f.v): + k = v.index + if k < vertexCount: + col = f.col[j] + pcolors[k * 4] = col.r / 255.0 + pcolors[k * 4 + 1] = col.g / 255.0 + pcolors[k * 4 + 2] = col.b / 255.0 + pcolors[k * 4 + 3] = 1.0 + else: + pcolors = POINTER(c_float)() + + # Load the OpenCTM shared library + if os.name == 'nt': + libHDL = WinDLL('openctm.dll') + else: + libName = find_library('openctm') + if not libName: + Blender.Draw.PupMenu('Could not find the OpenCTM shared library') + return + libHDL = CDLL(libName) + if not libHDL: + Blender.Draw.PupMenu('Could not open the OpenCTM shared library') + return + + # Get all the functions from the shared library that we need + ctmNewContext = libHDL.ctmNewContext + ctmNewContext.argtypes = [c_int] + ctmNewContext.restype = c_void_p + ctmFreeContext = libHDL.ctmFreeContext + ctmFreeContext.argtypes = [c_void_p] + ctmGetError = libHDL.ctmGetError + ctmGetError.argtypes = [c_void_p] + ctmGetError.restype = c_int + ctmErrorString = libHDL.ctmErrorString + ctmErrorString.argtypes = [c_int] + ctmErrorString.restype = c_char_p + ctmFileComment = libHDL.ctmFileComment + ctmFileComment.argtypes = [c_void_p, c_char_p] + ctmDefineMesh = libHDL.ctmDefineMesh + ctmDefineMesh.argtypes = [c_void_p, POINTER(c_float), c_int, POINTER(c_int), c_int, POINTER(c_float)] + ctmSave = libHDL.ctmSave + ctmSave.argtypes = [c_void_p, c_char_p] + ctmAddUVMap = libHDL.ctmAddUVMap + ctmAddUVMap.argtypes = [c_void_p, POINTER(c_float), c_char_p, c_char_p] + ctmAddUVMap.restype = c_int + ctmAddAttribMap = libHDL.ctmAddAttribMap + ctmAddAttribMap.argtypes = [c_void_p, POINTER(c_float), c_char_p] + ctmAddAttribMap.restype = c_int + ctmCompressionMethod = libHDL.ctmCompressionMethod + ctmCompressionMethod.argtypes = [c_void_p, c_int] + ctmVertexPrecisionRel = libHDL.ctmVertexPrecisionRel + ctmVertexPrecisionRel.argtypes = [c_void_p, c_float] + ctmNormalPrecision = libHDL.ctmNormalPrecision + ctmNormalPrecision.argtypes = [c_void_p, c_float] + ctmUVCoordPrecision = libHDL.ctmUVCoordPrecision + ctmUVCoordPrecision.argtypes = [c_void_p, c_int, c_float] + ctmAttribPrecision = libHDL.ctmAttribPrecision + ctmAttribPrecision.argtypes = [c_void_p, c_int, c_float] + + # Create an OpenCTM context + ctm = ctmNewContext(0x0102) # CTM_EXPORT + try: + # Set the file comment + ctmFileComment(ctm, c_char_p('%s - created by Blender %s (www.blender.org)' % (ob.getName(), Blender.Get('version')))) + + # Define the mesh + ctmDefineMesh(ctm, pvertices, c_int(vertexCount), pindices, c_int(triangleCount), pnormals) + + # Add UV coordinates? + if EXPORT_UV: + tm = ctmAddUVMap(ctm, ptexCoords, c_char_p(), c_char_p()) + if EXPORT_MG2: + ctmUVCoordPrecision(ctm, tm, EXPORT_UVPREC) + + # Add colors? + if EXPORT_COLORS: + cm = ctmAddAttribMap(ctm, pcolors, c_char_p('Color')) + if EXPORT_MG2: + ctmAttribPrecision(ctm, cm, EXPORT_CPREC) + + # Set compression method + if EXPORT_MG2: + ctmCompressionMethod(ctm, 0x0203) # CTM_METHOD_MG2 + ctmVertexPrecisionRel(ctm, EXPORT_VPREC) + if EXPORT_NORMALS: + ctmNormalPrecision(ctm, EXPORT_NPREC) + + else: + ctmCompressionMethod(ctm, 0x0202) # CTM_METHOD_MG1 + + # Save the file + ctmSave(ctm, c_char_p(filename)) + + # Check for errors + e = ctmGetError(ctm) + if e != 0: + s = ctmErrorString(e) + Blender.Draw.PupMenu('Error%t|Could not save the file: ' + s) + + finally: + # Free the OpenCTM context + ctmFreeContext(ctm) + + finally: + Window.WaitCursor(0) + if is_editmode: + Blender.Window.EditMode(1, '', 0) + +def main(): + Blender.Window.FileSelector(file_callback, 'Export OpenCTM', Blender.sys.makename(ext='.ctm')) + +if __name__=='__main__': + main() \ No newline at end of file diff --git a/3rdparty/openctm/plugins/blender/openctm_import.py b/3rdparty/openctm/plugins/blender/openctm_import.py new file mode 100644 index 000000000..42ef5b49b --- /dev/null +++ b/3rdparty/openctm/plugins/blender/openctm_import.py @@ -0,0 +1,226 @@ +#!BPY + +""" +Name: 'OpenCTM (*.ctm)...' +Blender: 248 +Group: 'Import' +Tooltip: 'Import an OpenCTM file' +""" + +import bpy +import Blender +from Blender import Mesh, Scene, Window, sys, Image, Draw +import BPyMesh +import math +import ctypes +from ctypes import * +from ctypes.util import find_library +import os + + +__author__ = "Marcus Geelnard" +__version__ = "0.4" +__bpydoc__ = """\ +This script imports OpenCTM files into Blender. It supports normals, +colours, and UV coordinates per vertex. +""" + +# Copyright (C) 2009-2010: Marcus Geelnard +# +# This program is released to the public domain. +# +# Portions of this code are taken from ply_import.py in Blender +# 2.48. +# +# The script uses the OpenCTM shared library (.so, .dll, etc). If no +# such library can be found, the script will exit with an error +# message. +# +# v0.4, 2009-09-14 +# - Updated to OpenCTM API version 0.8 (texture maps are now called UV maps) +# +# v0.3, 2009-08-09 +# - Changed vertex color attribute name to "Color" +# +# v0.2, 2009-06-30 +# - Better error reporting +# +# v0.1, 2009-05-31 +# - First test version with an alpha version of the OpenCTM API +# + +def file_callback(filename): + + Window.WaitCursor(1) + try: + # Load the OpenCTM shared library + if os.name == 'nt': + libHDL = WinDLL('openctm.dll') + else: + libName = find_library('openctm') + if not libName: + Blender.Draw.PupMenu('Could not find the OpenCTM shared library') + return + libHDL = CDLL(libName) + if not libHDL: + Blender.Draw.PupMenu('Could not open the OpenCTM shared library') + return + + # Get all the functions from the shared library that we need + ctmNewContext = libHDL.ctmNewContext + ctmNewContext.argtypes = [c_int] + ctmNewContext.restype = c_void_p + ctmFreeContext = libHDL.ctmFreeContext + ctmFreeContext.argtypes = [c_void_p] + ctmGetError = libHDL.ctmGetError + ctmGetError.argtypes = [c_void_p] + ctmGetError.restype = c_int + ctmErrorString = libHDL.ctmErrorString + ctmErrorString.argtypes = [c_int] + ctmErrorString.restype = c_char_p + ctmLoad = libHDL.ctmLoad + ctmLoad.argtypes = [c_void_p, c_char_p] + ctmGetInteger = libHDL.ctmGetInteger + ctmGetInteger.argtypes = [c_void_p, c_int] + ctmGetInteger.restype = c_int + ctmGetString = libHDL.ctmGetString + ctmGetString.argtypes = [c_void_p, c_int] + ctmGetString.restype = c_char_p + ctmGetIntegerArray = libHDL.ctmGetIntegerArray + ctmGetIntegerArray.argtypes = [c_void_p, c_int] + ctmGetIntegerArray.restype = POINTER(c_int) + ctmGetFloatArray = libHDL.ctmGetFloatArray + ctmGetFloatArray.argtypes = [c_void_p, c_int] + ctmGetFloatArray.restype = POINTER(c_float) + ctmGetNamedAttribMap = libHDL.ctmGetNamedAttribMap + ctmGetNamedAttribMap.argtypes = [c_void_p, c_char_p] + ctmGetNamedAttribMap.restype = c_int + + # Create an OpenCTM context + ctm = ctmNewContext(0x0101) # CTM_IMPORT + try: + # Load the file + ctmLoad(ctm, c_char_p(filename)) + err = ctmGetError(ctm) + if err != 0: + s = ctmErrorString(err) + Blender.Draw.PupMenu('Could not load the file: ' + s) + return + + # Get the mesh properties + vertexCount = ctmGetInteger(ctm, 0x0301) # CTM_VERTEX_COUNT + triangleCount = ctmGetInteger(ctm, 0x0302) # CTM_TRIANGLE_COUNT + hasNormals = ctmGetInteger(ctm, 0x0303) # CTM_HAS_NORMALS + texMapCount = ctmGetInteger(ctm, 0x0304) # CTM_UV_MAP_COUNT + + # Get indices + pindices = ctmGetIntegerArray(ctm, 0x0601) # CTM_INDICES + + # Get vertices + pvertices = ctmGetFloatArray(ctm, 0x0602) # CTM_VERTICES + + # Get normals + if hasNormals == 1: + pnormals = ctmGetFloatArray(ctm, 0x0603) # CTM_NORMALS + else: + pnormals = None + + # Get texture coordinates + if texMapCount > 0: + ptexCoords = ctmGetFloatArray(ctm, 0x0700) # CTM_UV_MAP_1 + else: + ptexCoords = None + + # Get colors + colorMap = ctmGetNamedAttribMap(ctm, c_char_p('Color')) + if colorMap != 0: + pcolors = ctmGetFloatArray(ctm, colorMap) + else: + pcolors = None + + # We will be creating vectors... + Vector = Blender.Mathutils.Vector + + # Create Blender verts and faces + verts = [] + for i in range(vertexCount): + verts.append(Vector(pvertices[i * 3], pvertices[i * 3 + 1], pvertices[i * 3 + 2])) + faces = [] + for i in range(triangleCount): + faces.append((pindices[i * 3], pindices[i * 3 + 1], pindices[i * 3 + 2])) + + # Create a new Blender mesh from the loaded mesh data + objName = Blender.sys.splitext(Blender.sys.basename(filename))[0] + mesh = bpy.data.meshes.new(objName) + mesh.verts.extend(verts) + mesh.faces.extend(faces) + + # Add normals? + if pnormals: + i = 0 + for v in mesh.verts: + n = Vector(pnormals[i], pnormals[i + 1], pnormals[i + 2]) + v.no = n + i += 3 + else: + mesh.calcNormals() + + # Always use smooth normals - regardless if they are defined or calculated + for f in mesh.faces: + f.smooth = 1 + + # Add texture coordinates? + if ptexCoords: + mesh.faceUV = 1 + for f in mesh.faces: + for j, v in enumerate(f.v): + k = v.index + if k < vertexCount: + uv = f.uv[j] + uv[0] = ptexCoords[k * 2] + uv[1] = ptexCoords[k * 2 + 1] + + # Add colors? + if pcolors: + mesh.vertexColors = 1 + for f in mesh.faces: + for j, v in enumerate(f.v): + k = v.index + if k < vertexCount: + col = f.col[j] + r = int(round(pcolors[k * 4] * 255.0)) + if r < 0: r = 0 + if r > 255: r = 255 + g = int(round(pcolors[k * 4 + 1] * 255.0)) + if g < 0: g = 0 + if g > 255: g = 255 + b = int(round(pcolors[k * 4 + 2] * 255.0)) + if b < 0: b = 0 + if b > 255: b = 255 + col.r = r + col.g = g + col.b = b + + # Select all vertices in the mesh + mesh.sel = True + + # Create a new object with the new mesh + scn = bpy.data.scenes.active + scn.objects.selected = [] + obj = scn.objects.new(mesh, objName) + scn.objects.active = obj + + finally: + # Free the OpenCTM context + ctmFreeContext(ctm) + + finally: + Window.WaitCursor(0) + + Blender.Redraw() + +def main(): + Blender.Window.FileSelector(file_callback, 'Import OpenCTM', '*.ctm') + +if __name__=='__main__': + main() \ No newline at end of file diff --git a/3rdparty/openctm/plugins/blender/readme.txt b/3rdparty/openctm/plugins/blender/readme.txt new file mode 100644 index 000000000..0cc32beed --- /dev/null +++ b/3rdparty/openctm/plugins/blender/readme.txt @@ -0,0 +1,48 @@ +OpenCTM Blender import/export scripts + + +INSTRUCTIONS +============ + +The OpenCTM Blender import/export scripts makes it possible to import and +export OpenCTM format files in Blender (a free 3D modeling software - +http://www.blender.org). + +To use these scripts, they need to be properly installed along with the +OpenCTM shared library. + +Below follow instructions for the three major platforms under which these +scripts have been tested. + + +Windows: +-------- + +1) Copy the file "openctm.dll" to the Blender program folder (e.g. + C:\Program Files\Blender Foundation\Blender). +2) Copy the files openctm_export.py and openctm_import.py to the Blender + scripts folder (e.g. %APPDATA%\Blender Foundation\Blender\.blender\scripts). +3) Restart Blender (you may need to run Scripts > Update Menus in a Scripts + window in order for the File > Import / Export menus to be updated). + + +Mac OS X: +--------- + +1) Copy the file "libopenctm.dylib" to /usr/local/lib (e.g. using + "sudo cp libopenctm.dylib /usr/local/lib/"). +2) Copy the files openctm_export.py and openctm_import.py to the Blender + scripts folder (e.g. /Applications/blender.app/Contents/MacOS/.blender/scripts/). +3) Restart Blender (you may need to run Scripts > Update Menus in a Scripts + window in order for the File > Import / Export menus to be updated). + + +Linux: +------ + +1) Copy the file "libopenctm.so" to /usr/lib (e.g. using + "sudo cp libopenctm.so /usr/lib/"). +2) Copy the files openctm_export.py and openctm_import.py to the Blender + scripts folder (e.g. /usr/share/blender/scripts/blender/). +3) Restart Blender (you may need to run Scripts > Update Menus in a Scripts + window in order for the File > Import / Export menus to be updated). diff --git a/3rdparty/openctm/plugins/maya/openctm_translator.py b/3rdparty/openctm/plugins/maya/openctm_translator.py new file mode 100644 index 000000000..db5e2a80c --- /dev/null +++ b/3rdparty/openctm/plugins/maya/openctm_translator.py @@ -0,0 +1,196 @@ +""" +OpenCTM Exporter for Maya. +""" +import maya.OpenMaya as OpenMaya +import maya.OpenMayaMPx as OpenMayaMPx +import maya.cmds as mc +import sys, math +import os +import ctypes +from ctypes import * +import openctm + +__author__ = "Jonas Innala" +__version__ = "0.1" + +kPluginTranslatorTypeName = "OpenCTM Exporter" +class OpemCTMExporter(OpenMayaMPx.MPxFileTranslator): + def __init__(self): + OpenMayaMPx.MPxFileTranslator.__init__(self) + def haveWriteMethod(self): + return True + def haveReadMethod(self): + return False + def filter(self): + return "*.ctm" + def defaultExtension(self): + return "ctm" + def writer( self, fileObject, optionString, accessMode ): + fileName = fileObject.fullName() + selection = OpenMaya.MSelectionList() + all = (accessMode == self.kExportAccessMode or accessMode == self.kSaveAccessMode) + dagIterator = None + if(all): + dagIterator = OpenMaya.MItDag(OpenMaya.MItDag.kBreadthFirst, OpenMaya.MFn.kGeometric) + else: + OpenMaya.MGlobal.getActiveSelectionList( selection ) + dagIterator = OpenMaya.MItSelectionList ( selection, OpenMaya.MFn.kGeometric ) + ctmindices = [] + ctmvertices = [] + ctmnormals = [] + ctmtexcoords = [] + indicesOffset = 0 + while not dagIterator.isDone(): + dagPath = OpenMaya.MDagPath() + if (all): + dagIterator.getPath(dagPath) + else: + dagIterator.getDagPath(dagPath) + fnMesh = None + try: + fnMesh = OpenMaya.MFnMesh( dagPath ) + except: + dagIterator.next() + continue + meshPoints = OpenMaya.MPointArray() + fnMesh.getPoints( meshPoints,OpenMaya.MSpace.kWorld ) + + meshNormals = OpenMaya.MFloatVectorArray() + fnMesh.getNormals(meshNormals) + + UVSets = [] + fnMesh.getUVSetNames( UVSets ) + + + u = OpenMaya.MFloatArray() + v = OpenMaya.MFloatArray() + fnMesh.getUVs( u, v, UVSets[0] ) + iterPolys = OpenMaya.MItMeshPolygon( dagPath ) + offset = 0 + maxPoints = 0 + normals = {} + uvs = {} + while not iterPolys.isDone(): + if not iterPolys.hasValidTriangulation(): + return OpenMaya.MStatus.kFailiure + + uvSet = [] + iterPolys.getUVSetNames(uvSet) + + polygonVertices = OpenMaya.MIntArray() + iterPolys.getVertices( polygonVertices ) + + + numTrianglesPx = OpenMaya.MScriptUtil() + numTrianglesPx.createFromInt(0) + numTrianglesPtr = numTrianglesPx.asIntPtr() + + iterPolys.numTriangles(numTrianglesPtr) + + numTriangles = OpenMaya.MScriptUtil(numTrianglesPtr).asInt() + offset = len(ctmvertices) + localindices = [] + for i in range( numTriangles ): + + points = OpenMaya.MPointArray() + indices = OpenMaya.MIntArray() + iterPolys.getTriangle( i, points,indices) + ctmindices.append (indicesOffset) + indicesOffset += 1 + ctmindices.append (indicesOffset) + indicesOffset += 1 + ctmindices.append (indicesOffset) + indicesOffset += 1 + localindices.append(int(indices[0])) + localindices.append(int(indices[1])) + localindices.append(int(indices[2])) + + localIndex = [] + for gt in range(indices.length()) : + for gv in range( polygonVertices.length() ): + if indices[gt] == polygonVertices[gv]: + localIndex.append( gv ) + break + + normals[int(indices[0])] = (float(meshNormals[iterPolys.normalIndex(localIndex[0])].x),float(meshNormals[iterPolys.normalIndex(localIndex[0])].y),float(meshNormals[iterPolys.normalIndex(localIndex[0])].z)) + normals[int(indices[1])] = (float(meshNormals[iterPolys.normalIndex(localIndex[1])].x),float(meshNormals[iterPolys.normalIndex(localIndex[1])].y),float(meshNormals[iterPolys.normalIndex(localIndex[1])].z)) + normals[int(indices[2])] = (float(meshNormals[iterPolys.normalIndex(localIndex[2])].x),float(meshNormals[iterPolys.normalIndex(localIndex[2])].y),float(meshNormals[iterPolys.normalIndex(localIndex[2])].z)) + uvID = [0,0,0] + + for vtxInPolygon in range(3): + uvIDPx = OpenMaya.MScriptUtil() + uvIDPx.createFromInt(0) + uvIDPtr = numTrianglesPx.asIntPtr() + iterPolys.getUVIndex( localIndex[vtxInPolygon], uvIDPtr, UVSets[0] ) + uvID[vtxInPolygon] = OpenMaya.MScriptUtil(uvIDPtr).asInt() + if (iterPolys.hasUVs()): + uvs[int(indices[0])] = (u[uvID[0]], v[uvID[0]]) + uvs[int(indices[1])] = (u[uvID[1]], v[uvID[1]]) + uvs[int(indices[2])] = (u[uvID[2]], v[uvID[2]]) + + for i in localindices: + ctmvertices.append (float(meshPoints[i].x)) + ctmvertices.append (float(meshPoints[i].y)) + ctmvertices.append (float(meshPoints[i].z)) + ctmnormals.append(normals[i][0]) + ctmnormals.append(normals[i][1]) + ctmnormals.append(normals[i][2]) + if (iterPolys.hasUVs()): + ctmtexcoords.append(uvs[i][0]) + ctmtexcoords.append(uvs[i][1]) + + iterPolys.next() + dagIterator.next() + + pindices = cast((openctm.CTMuint * len(ctmindices))(), POINTER(openctm.CTMuint)) + pvertices = cast((openctm.CTMfloat * len(ctmvertices))(), POINTER(openctm.CTMfloat)) + pnormals = cast((openctm.CTMfloat * len(ctmnormals))(), POINTER(openctm.CTMfloat)) + ptexcoords = cast((openctm.CTMfloat * len(ctmtexcoords))(), POINTER(openctm.CTMfloat)) + for i in range(len(ctmindices)): + pindices[i] = openctm.CTMuint(ctmindices[i]) + for i in range(len(ctmvertices)): + pvertices[i] = openctm.CTMfloat(ctmvertices[i]) + pnormals[i] = openctm.CTMfloat(ctmnormals[i]) + for i in range(len(ctmtexcoords)): + ptexcoords[i] = openctm.CTMfloat(ctmtexcoords[i]) + + context = openctm.ctmNewContext(openctm.CTM_EXPORT) + comment = "Exported with OpenCTM exporter using Maya " + OpenMaya.MGlobal.mayaVersion() + openctm.ctmFileComment(context, c_char_p(comment)) + openctm.ctmDefineMesh(context, pvertices, openctm.CTMuint(len(ctmvertices)/3), pindices, openctm.CTMuint(len(ctmindices)/3), pnormals) + openctm.ctmAddUVMap (context, ptexcoords,c_char_p() , c_char_p()) + openctm.ctmSave(context, c_char_p(fileName)) + openctm.ctmFreeContext(context) + e = openctm.ctmGetError(context) + if e != 0: + s = openctm.ctmErrorString(e) + print s + return OpenMaya.MStatus.kFailiure + else: + return OpenMaya.MStatus.kSuccess + + def reader( self, fileObject, optionString, accessMode ): + return OpenMaya.MStatus.kFailiure + + +def translatorCreator(): + return OpenMayaMPx.asMPxPtr( OpemCTMExporter() ) + +def initializePlugin(mobject): + mplugin = OpenMayaMPx.MFnPlugin(mobject, "Autodesk", "10.0", "Any") + + try: + mplugin.registerFileTranslator( kPluginTranslatorTypeName, None, translatorCreator ) + except: + sys.stderr.write( "Failed to register command: %s\n" % kPluginTranslatorTypeName ) + raise + + +def uninitializePlugin(mobject): + mplugin = OpenMayaMPx.MFnPlugin(mobject) + print "Plug-in OpenCTM Exporter uninitialized" + try: + mplugin.deregisterFileTranslator( kPluginTranslatorTypeName ) + except: + sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName ) + raise diff --git a/3rdparty/openctm/plugins/maya/readme.txt b/3rdparty/openctm/plugins/maya/readme.txt new file mode 100644 index 000000000..ef53ef847 --- /dev/null +++ b/3rdparty/openctm/plugins/maya/readme.txt @@ -0,0 +1,31 @@ +OpenCTM Maya export scripts + + +INSTRUCTIONS +============ + +The OpenCTM Maya export scripts makes it possible to export OpenCTM format files in Maya (http://autodesk.com/). + +To use these scripts, they need to be properly installed along with the +OpenCTM shared library. + + +Windows: +-------- +1) Copy "openctm.dll" to your maya plugin folder (e.g. C:\Program Files\Autodesk\Maya2008\bin\plug-ins for Maya 2008). +2) Copy openctm_translator.py to your maya plugin folder (e.g. C:\Program Files\Autodesk\Maya2008\bin\plug-ins for Maya 2008). +3) Copy openctm.py in /bindings/python/ to the same folder as openctm_translator.py (e.g. C:\Program Files\Autodesk\Maya2008\bin\plug-ins for Maya 2008). + +Mac OS X: +--------- + +1) Copy the file "libopenctm.dylib" to /usr/local/lib (e.g. using + "sudo cp libopenctm.dylib /usr/local/lib/"). +2) Copy openctm_translator.py to your maya plugin folder (e.g. /Users/Shared/Autodesk/maya/2010/plug-ins for Maya 2010). +3) Copy openctm.py in /bindings/python/ to the same folder as openctm_translator.py (e.g. /Users/Shared/Autodesk/maya/2010/plug-ins for Maya 2010). + +Linux: +------ + +1) Copy the file "libopenctm.so" to /usr/lib (e.g. using + "sudo cp libopenctm.so /usr/lib/"). diff --git a/3rdparty/openctm/tools/3ds.cpp b/3rdparty/openctm/tools/3ds.cpp new file mode 100644 index 000000000..62f0beae8 --- /dev/null +++ b/3rdparty/openctm/tools/3ds.cpp @@ -0,0 +1,432 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: 3ds.cpp +// Description: Implementation of the 3DS file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include "3ds.h" + +#ifdef _MSC_VER +typedef unsigned short uint16; +typedef unsigned int uint32; +#else +#include +typedef uint16_t uint16; +typedef uint32_t uint32; +#endif + +using namespace std; + + +// Known 3DS chunks +#define CHUNK_MAIN 0x4d4d +#define CHUNK_M3D_VERSION 0x0002 +#define CHUNK_3DEDIT 0x3d3d +#define CHUNK_MESH_VERSION 0x3d3e +#define CHUNK_OBJECT 0x4000 +#define CHUNK_TRIMESH 0x4100 +#define CHUNK_VERTEXLIST 0x4110 +#define CHUNK_MAPPINGCOORDS 0x4140 +#define CHUNK_FACES 0x4120 +#define CHUNK_MSH_MAT_GROUP 0x4130 +#define CHUNK_MAT_ENTRY 0xafff +#define CHUNK_MAT_NAME 0xa000 +#define CHUNK_MAT_TEXMAP 0xa200 +#define CHUNK_MAT_MAPNAME 0xa300 + +// 3DS object class +class Obj3DS { + public: + vector mIndices; + vector mVertices; + vector mUVCoords; +}; + + +/// Read a 16-bit integer, endian independent. +static uint16 ReadInt16(istream &aStream) +{ + unsigned char buf[2]; + aStream.read((char *) buf, 2); + return ((uint16) buf[0]) | (((uint16) buf[1]) << 8); +} + +/// Write a 16-bit integer, endian independent. +static void WriteInt16(ostream &aStream, uint16 aValue) +{ + unsigned char buf[2]; + buf[0] = aValue & 255; + buf[1] = (aValue >> 8) & 255; + aStream.write((char *) buf, 2); +} + +/// Read a 32-bit integer, endian independent. +static uint32 ReadInt32(istream &aStream) +{ + unsigned char buf[4]; + aStream.read((char *) buf, 4); + return ((uint32) buf[0]) | (((uint32) buf[1]) << 8) | + (((uint32) buf[2]) << 16) | (((uint32) buf[3]) << 24); +} + +/// Write a 32-bit integer, endian independent. +static void WriteInt32(ostream &aStream, uint32 aValue) +{ + unsigned char buf[4]; + buf[0] = aValue & 255; + buf[1] = (aValue >> 8) & 255; + buf[2] = (aValue >> 16) & 255; + buf[3] = (aValue >> 24) & 255; + aStream.write((char *) buf, 4); +} + +/// Read a Vector2, endian independent. +static Vector2 ReadVector2(istream &aStream) +{ + union { + uint32 i; + float f; + } val; + Vector2 result; + val.i = ReadInt32(aStream); + result.u = val.f; + val.i = ReadInt32(aStream); + result.v = val.f; + return result; +} + +/// Write a Vector2, endian independent. +static void WriteVector2(ostream &aStream, Vector2 aValue) +{ + union { + uint32 i; + float f; + } val; + val.f = aValue.u; + WriteInt32(aStream, val.i); + val.f = aValue.v; + WriteInt32(aStream, val.i); +} + +/// Read a Vector3, endian independent. +static Vector3 ReadVector3(istream &aStream) +{ + union { + uint32 i; + float f; + } val; + Vector3 result; + val.i = ReadInt32(aStream); + result.x = val.f; + val.i = ReadInt32(aStream); + result.y = val.f; + val.i = ReadInt32(aStream); + result.z = val.f; + return result; +} + +/// Write a Vector3, endian independent. +static void WriteVector3(ostream &aStream, Vector3 aValue) +{ + union { + uint32 i; + float f; + } val; + val.f = aValue.x; + WriteInt32(aStream, val.i); + val.f = aValue.y; + WriteInt32(aStream, val.i); + val.f = aValue.z; + WriteInt32(aStream, val.i); +} + +/// Import a 3DS file from a file. +void Import_3DS(const char * aFileName, Mesh * aMesh) +{ + // Clear the mesh + aMesh->Clear(); + + // Open the input file + ifstream f(aFileName, ios::in | ios::binary); + if(f.fail()) + throw runtime_error("Could not open input file."); + + // Get file size + f.seekg(0, ios::end); + uint32 fileSize = f.tellg(); + f.seekg(0, ios::beg); + + // Check file size (rough initial check) + if(fileSize < 6) + throw runtime_error("Invalid 3DS file format."); + + uint16 chunk, count; + uint32 chunkLen; + + // Read & check file header identifier + chunk = ReadInt16(f); + chunkLen = ReadInt32(f); + if((chunk != CHUNK_MAIN) || (chunkLen != fileSize)) + throw runtime_error("Invalid 3DS file format."); + + // Parse chunks, and store the data in a temporary list, objList... + Obj3DS * obj = 0; + list objList; + bool hasUVCoords = false; + while(uint32(f.tellg()) < fileSize) + { + // Read next chunk + chunk = ReadInt16(f); + chunkLen = ReadInt32(f); + + // What chunk did we get? + switch(chunk) + { + // 3D Edit -> Step into + case CHUNK_3DEDIT: + break; + + // Object -> Step into + case CHUNK_OBJECT: + // Skip object name (null terminated string) + while((uint32(f.tellg()) < fileSize) && f.get()) {}; + + // Create a new object + objList.push_back(Obj3DS()); + obj = &objList.back(); + break; + + // Triangle mesh -> Step into + case CHUNK_TRIMESH: + break; + + // Vertex list (point coordinates) + case CHUNK_VERTEXLIST: + count = ReadInt16(f); + if((!obj) || ((obj->mVertices.size() > 0) && (obj->mVertices.size() != count))) + { + f.seekg(count * 12, ios::cur); + break; + } + if(obj->mVertices.size() == 0) + obj->mVertices.resize(count); + for(uint16 i = 0; i < count; ++ i) + obj->mVertices[i] = ReadVector3(f); + break; + + // Texture map coordinates (UV coordinates) + case CHUNK_MAPPINGCOORDS: + count = ReadInt16(f); + if((!obj) || ((obj->mUVCoords.size() > 0) && (obj->mUVCoords.size() != count))) + { + f.seekg(count * 8, ios::cur); + break; + } + if(obj->mUVCoords.size() == 0) + obj->mUVCoords.resize(count); + for(uint16 i = 0; i < count; ++ i) + obj->mUVCoords[i] = ReadVector2(f); + if(count > 0) + hasUVCoords = true; + break; + + // Face description (triangle indices) + case CHUNK_FACES: + count = ReadInt16(f); + if(!obj) + { + f.seekg(count * 8, ios::cur); + break; + } + if(obj->mIndices.size() == 0) + obj->mIndices.resize(3 * count); + for(uint32 i = 0; i < count; ++ i) + { + obj->mIndices[i * 3] = ReadInt16(f); + obj->mIndices[i * 3 + 1] = ReadInt16(f); + obj->mIndices[i * 3 + 2] = ReadInt16(f); + ReadInt16(f); // Skip face flag + } + break; + + default: // Unknown/ignored - skip past this one + f.seekg(chunkLen - 6, ios::cur); + } + } + + // Close the input file + f.close(); + + // Convert the loaded object list to the mesh structore (merge all geometries) + aMesh->Clear(); + for(list::iterator o = objList.begin(); o != objList.end(); ++ o) + { + // Append... + uint32 idxOffset = aMesh->mIndices.size(); + uint32 vertOffset = aMesh->mVertices.size(); + aMesh->mIndices.resize(idxOffset + (*o).mIndices.size()); + aMesh->mVertices.resize(vertOffset + (*o).mVertices.size()); + if(hasUVCoords) + aMesh->mTexCoords.resize(vertOffset + (*o).mVertices.size()); + + // Transcode the data + for(uint32 i = 0; i < (*o).mIndices.size(); ++ i) + aMesh->mIndices[idxOffset + i] = vertOffset + uint32((*o).mIndices[i]); + for(uint32 i = 0; i < (*o).mVertices.size(); ++ i) + aMesh->mVertices[vertOffset + i] = (*o).mVertices[i]; + if(hasUVCoords) + { + if((*o).mUVCoords.size() == (*o).mVertices.size()) + for(uint32 i = 0; i < (*o).mVertices.size(); ++ i) + aMesh->mTexCoords[vertOffset + i] = (*o).mUVCoords[i]; + else + for(uint32 i = 0; i < (*o).mVertices.size(); ++ i) + aMesh->mTexCoords[vertOffset + i] = Vector2(0.0f, 0.0f); + } + } +} + +/// Export a 3DS file to a file. +void Export_3DS(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // First, check that the mesh fits in a 3DS file (at most 65535 triangles + // and 65535 vertices are supported). + if((aMesh->mIndices.size() > (3*65535)) || (aMesh->mVertices.size() > 65535)) + throw runtime_error("The mesh is too large to fit in a 3DS file."); + + // What should we export? + bool exportTexCoords = aMesh->HasTexCoords() && !aOptions.mNoTexCoords; + + // Predefined names / strings + string objName("Object1"); + string matName("Material0"); + + // Get mesh properties + uint32 triCount = aMesh->mIndices.size() / 3; + uint32 vertCount = aMesh->mVertices.size(); + + // Calculate the material chunk size + uint32 materialSize = 0; + uint32 matGroupSize = 0; + if(exportTexCoords && aMesh->mTexFileName.size() > 0) + { + materialSize += 24 + matName.size() + 1 + aMesh->mTexFileName.size() + 1; + matGroupSize += 8 + matName.size() + 1 + 2 * triCount; + } + + // Calculate the mesh chunk size + uint32 triMeshSize = 22 + 8 * triCount + 12 * vertCount + matGroupSize; + if(exportTexCoords) + triMeshSize += 8 + 8 * vertCount; + + // Calculate the total file size + uint32 fileSize = 38 + objName.size() + 1 + materialSize + triMeshSize; + + // Open the output file + ofstream f(aFileName, ios::out | ios::binary); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // Write file header + WriteInt16(f, CHUNK_MAIN); + WriteInt32(f, fileSize); + WriteInt16(f, CHUNK_M3D_VERSION); + WriteInt32(f, 6 + 4); + WriteInt32(f, 0x00000003); + + // 3D Edit chunk + WriteInt16(f, CHUNK_3DEDIT); + WriteInt32(f, 16 + materialSize + objName.size() + 1 + triMeshSize); + WriteInt16(f, CHUNK_MESH_VERSION); + WriteInt32(f, 6 + 4); + WriteInt32(f, 0x00000003); + + // Material chunk + if(materialSize > 0) + { + WriteInt16(f, CHUNK_MAT_ENTRY); + WriteInt32(f, materialSize); + WriteInt16(f, CHUNK_MAT_NAME); + WriteInt32(f, 6 + matName.size() + 1); + f.write(matName.c_str(), matName.size() + 1); + WriteInt16(f, CHUNK_MAT_TEXMAP); + WriteInt32(f, 12 + aMesh->mTexFileName.size() + 1); + WriteInt16(f, CHUNK_MAT_MAPNAME); + WriteInt32(f, 6 + aMesh->mTexFileName.size() + 1); + f.write(aMesh->mTexFileName.c_str(), aMesh->mTexFileName.size() + 1); + } + + // Object chunk + WriteInt16(f, CHUNK_OBJECT); + WriteInt32(f, 6 + objName.size() + 1 + triMeshSize); + f.write(objName.c_str(), objName.size() + 1); + + // Triangle Mesh chunk + WriteInt16(f, CHUNK_TRIMESH); + WriteInt32(f, triMeshSize); + + // Vertex List chunk + WriteInt16(f, CHUNK_VERTEXLIST); + WriteInt32(f, 8 + 12 * vertCount); + WriteInt16(f, vertCount); + for(uint32 i = 0; i < vertCount; ++ i) + WriteVector3(f, aMesh->mVertices[i]); + + // Mapping Coordinates chunk + if(exportTexCoords) + { + WriteInt16(f, CHUNK_MAPPINGCOORDS); + WriteInt32(f, 8 + 8 * vertCount); + WriteInt16(f, vertCount); + for(uint32 i = 0; i < vertCount; ++ i) + WriteVector2(f, aMesh->mTexCoords[i]); + } + + // Faces chunk + WriteInt16(f, CHUNK_FACES); + WriteInt32(f, 8 + 8 * triCount); + WriteInt16(f, triCount); + for(uint32 i = 0; i < triCount; ++ i) + { + WriteInt16(f, uint16(aMesh->mIndices[i * 3])); + WriteInt16(f, uint16(aMesh->mIndices[i * 3 + 1])); + WriteInt16(f, uint16(aMesh->mIndices[i * 3 + 2])); + WriteInt16(f, 0); + } + + // Material Group chunk + if(matGroupSize > 0) + { + WriteInt16(f, CHUNK_MSH_MAT_GROUP); + WriteInt32(f, matGroupSize); + f.write(matName.c_str(), matName.size() + 1); + WriteInt16(f, triCount); + for(uint16 i = 0; i < triCount; ++ i) + WriteInt16(f, i); + } +} diff --git a/3rdparty/openctm/tools/3ds.h b/3rdparty/openctm/tools/3ds.h new file mode 100644 index 000000000..eaaf9afd9 --- /dev/null +++ b/3rdparty/openctm/tools/3ds.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: 3ds.h +// Description: Interface for the 3DS file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __3DS_H_ +#define __3DS_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a 3DS file from a file. +void Import_3DS(const char * aFileName, Mesh * aMesh); + +/// Export a 3DS file to a file. +void Export_3DS(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __3DS_H_ diff --git a/3rdparty/openctm/tools/Makefile.linux b/3rdparty/openctm/tools/Makefile.linux new file mode 100644 index 000000000..7fcc23659 --- /dev/null +++ b/3rdparty/openctm/tools/Makefile.linux @@ -0,0 +1,112 @@ +############################################################################### +# Product: OpenCTM tools +# File: Makefile.linux +# Description: Makefile for the OpenCTM tools, Linux version +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +OPENCTMDIR = ../lib +GLEWDIR = glew +JPEGDIR = jpeg +RPLYDIR = rply +TINYXMLDIR = tinyxml +ZLIBDIR = zlib +PNGLITEDIR = pnglite + +CPP = g++ +CPPFLAGS = -c -O3 -W -Wall `pkg-config --cflags gtk+-2.0` -I$(OPENCTMDIR) -I$(RPLYDIR) -I$(JPEGDIR) -I$(TINYXMLDIR) -I$(GLEWDIR) -I$(ZLIBDIR) -I$(PNGLITEDIR) + +MESHOBJS = mesh.o meshio.o ctm.o ply.o rply.o stl.o 3ds.o dae.o obj.o lwo.o off.o wrl.o +CTMCONVOBJS = ctmconv.o common.o systimer.o convoptions.o $(MESHOBJS) +CTMVIEWEROBJS = ctmviewer.o common.o image.o systimer.o sysdialog_gtk.o convoptions.o glew.o pnglite.o $(MESHOBJS) +CTMBENCHOBJS = ctmbench.o systimer.o + +all: ctmconv ctmviewer ctmbench + +clean: + rm -f ctmconv ctmviewer ctmbench $(CTMCONVOBJS) $(CTMVIEWEROBJS) $(CTMBENCHOBJS) bin2c phong_frag.h phong_vert.h + cd $(JPEGDIR) && $(MAKE) -f makefile.linux clean + cd $(TINYXMLDIR) && $(MAKE) -f Makefile.linux clean + cd $(ZLIBDIR) && $(MAKE) -f Makefile.linux clean + +libopenctm.so: $(OPENCTMDIR)/libopenctm.so + cp $< $@ + +ctmconv: $(CTMCONVOBJS) $(TINYXMLDIR)/libtinyxml.a libopenctm.so + $(CPP) -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) $(CTMCONVOBJS) -Wl,-rpath,. -lopenctm -ltinyxml + +ctmviewer: $(CTMVIEWEROBJS) $(JPEGDIR)/libjpeg.a $(TINYXMLDIR)/libtinyxml.a $(ZLIBDIR)/libz.a libopenctm.so + $(CPP) -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) -L$(JPEGDIR) -L$(ZLIBDIR) $(CTMVIEWEROBJS) -Wl,-rpath,. -lopenctm -ltinyxml -ljpeg -lz -lglut -lGL -lGLU `pkg-config --libs gtk+-2.0` + +ctmbench: $(CTMBENCHOBJS) libopenctm.so + $(CPP) -s -o $@ -L$(OPENCTMDIR) $(CTMBENCHOBJS) -Wl,-rpath,. -lopenctm + +%.o: %.cpp + $(CPP) $(CPPFLAGS) -o $@ $< + +ctmconv.o: ctmconv.cpp systimer.h convoptions.h mesh.h meshio.h +ctmviewer.o: ctmviewer.cpp common.h image.h systimer.h sysdialog.h mesh.h meshio.h phong_vert.h phong_frag.h icons/icon_open.h icons/icon_save.h icons/icon_help.h +ctmbench.o: ctmbench.cpp systimer.h +common.o: common.cpp common.h +image.o: image.cpp image.h common.h $(JPEGDIR)/libjpeg.a +systimer.o: systimer.cpp systimer.h +sysdialog_gtk.o: sysdialog_gtk.cpp sysdialog.h +convoptions.o: convoptions.cpp convoptions.h +mesh.o: mesh.cpp mesh.h convoptions.h +meshio.o: meshio.cpp common.h convoptions.h mesh.h ctm.h ply.h stl.h 3ds.h dae.h obj.h lwo.h off.h wrl.h +ctm.o: ctm.cpp ctm.h mesh.h convoptions.h +ply.o: ply.cpp ply.h mesh.h convoptions.h common.h +stl.o: stl.cpp stl.h mesh.h convoptions.h +3ds.o: 3ds.cpp 3ds.h mesh.h convoptions.h +dae.o: dae.cpp dae.h mesh.h convoptions.h +obj.o: obj.cpp obj.h mesh.h convoptions.h common.h +lwo.o: lwo.cpp lwo.h mesh.h convoptions.h +off.o: off.cpp off.h mesh.h convoptions.h common.h +wrl.o: wrl.cpp wrl.h mesh.h convoptions.h common.h + +phong_vert.h: phong.vert bin2c + ./bin2c phong.vert phongVertSrc > $@ + +phong_frag.h: phong.frag bin2c + ./bin2c phong.frag phongFragSrc > $@ + +bin2c: bin2c.cpp + $(CPP) -Os -W -Wall -o $@ $< + +$(JPEGDIR)/libjpeg.a: + cd $(JPEGDIR) && $(MAKE) -f makefile.linux libjpeg.a + +$(ZLIBDIR)/libz.a: + cd $(ZLIBDIR) && $(MAKE) -f Makefile.linux + +glew.o: $(GLEWDIR)/glew.c + gcc -c -Os -W -I$(GLEWDIR) -o $@ $< + +rply.o: $(RPLYDIR)/rply.c + gcc -c -O2 -W -I$(RPLYDIR) -o $@ $< + +pnglite.o: $(PNGLITEDIR)/pnglite.c + gcc -c -O2 -W -I$(PNGLITEDIR) -o $@ $< + +$(TINYXMLDIR)/libtinyxml.a: + cd $(TINYXMLDIR) && $(MAKE) -f Makefile.linux diff --git a/3rdparty/openctm/tools/Makefile.macosx b/3rdparty/openctm/tools/Makefile.macosx new file mode 100644 index 000000000..29a903efd --- /dev/null +++ b/3rdparty/openctm/tools/Makefile.macosx @@ -0,0 +1,117 @@ +############################################################################### +# Product: OpenCTM tools +# File: Makefile.macosx +# Description: Makefile for the OpenCTM tools, Mac OS X version +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +OPENCTMDIR = ../lib +GLEWDIR = glew +JPEGDIR = jpeg +RPLYDIR = rply +TINYXMLDIR = tinyxml +ZLIBDIR = zlib +PNGLITEDIR = pnglite + +CPP = g++ +CPPFLAGS = -c -O3 -W -Wall -I$(OPENCTMDIR) -I$(RPLYDIR) -I$(JPEGDIR) -I$(TINYXMLDIR) -I$(GLEWDIR) -I$(ZLIBDIR) -I$(PNGLITEDIR) +OCPP = g++ -x objective-c++ +OCPPFLAGS = -c -O3 -W -Wall + +MESHOBJS = mesh.o meshio.o ctm.o ply.o rply.o stl.o 3ds.o dae.o obj.o lwo.o off.o wrl.o +CTMCONVOBJS = ctmconv.o common.o systimer.o convoptions.o $(MESHOBJS) +CTMVIEWEROBJS = ctmviewer.o common.o image.o systimer.o sysdialog_mac.o convoptions.o glew.o pnglite.o $(MESHOBJS) +CTMBENCHOBJS = ctmbench.o systimer.o + +all: ctmconv ctmviewer ctmbench + +clean: + rm -f ctmconv ctmviewer ctmbench $(CTMCONVOBJS) $(CTMVIEWEROBJS) $(CTMBENCHOBJS) bin2c phong_frag.h phong_vert.h + cd $(JPEGDIR) && $(MAKE) -f makefile.macosx clean + cd $(TINYXMLDIR) && $(MAKE) -f Makefile.macosx clean + cd $(ZLIBDIR) && $(MAKE) -f Makefile.macosx clean + +libopenctm.so: $(OPENCTMDIR)/libopenctm.so + cp $< $@ + +ctmconv: $(CTMCONVOBJS) $(TINYXMLDIR)/libtinyxml.a $(OPENCTMDIR)/libopenctm.dylib + $(CPP) -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) $(CTMCONVOBJS) -lopenctm -ltinyxml + +ctmviewer: $(CTMVIEWEROBJS) $(JPEGDIR)/libjpeg.a $(TINYXMLDIR)/libtinyxml.a $(ZLIBDIR)/libz.a $(OPENCTMDIR)/libopenctm.dylib + $(CPP) -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) -L$(JPEGDIR) -L$(ZLIBDIR) $(CTMVIEWEROBJS) -lopenctm -ltinyxml -ljpeg -lz -framework GLUT -framework OpenGL -framework Cocoa + +ctmbench: $(CTMBENCHOBJS) $(OPENCTMDIR)/libopenctm.dylib + $(CPP) -o $@ -L$(OPENCTMDIR) $(CTMBENCHOBJS) -lopenctm + +%.o: %.cpp + $(CPP) $(CPPFLAGS) -o $@ $< + +%.o: %.mm + $(OCPP) $(OCPPFLAGS) -o $@ $< + +ctmconv.o: ctmconv.cpp systimer.h convoptions.h mesh.h meshio.h +ctmviewer.o: ctmviewer.cpp common.h image.h systimer.h sysdialog.h mesh.h meshio.h phong_vert.h phong_frag.h icons/icon_open.h icons/icon_save.h icons/icon_help.h +ctmbench.o: ctmbench.cpp systimer.h +common.o: common.cpp common.h +image.o: image.cpp image.h common.h $(JPEGDIR)/libjpeg.a +systimer.o: systimer.cpp systimer.h +sysdialog_mac.o: sysdialog_mac.mm sysdialog.h +convoptions.o: convoptions.cpp convoptions.h +mesh.o: mesh.cpp mesh.h convoptions.h +meshio.o: meshio.cpp common.h convoptions.h mesh.h ctm.h ply.h stl.h 3ds.h dae.h obj.h lwo.h off.h wrl.h +ctm.o: ctm.cpp ctm.h mesh.h convoptions.h +ply.o: ply.cpp ply.h mesh.h convoptions.h common.h +stl.o: stl.cpp stl.h mesh.h convoptions.h +3ds.o: 3ds.cpp 3ds.h mesh.h convoptions.h +dae.o: dae.cpp dae.h mesh.h convoptions.h +obj.o: obj.cpp obj.h mesh.h convoptions.h common.h +lwo.o: lwo.cpp lwo.h mesh.h convoptions.h +off.o: off.cpp off.h mesh.h convoptions.h common.h +wrl.o: wrl.cpp wrl.h mesh.h convoptions.h common.h + +phong_vert.h: phong.vert bin2c + ./bin2c phong.vert phongVertSrc > $@ + +phong_frag.h: phong.frag bin2c + ./bin2c phong.frag phongFragSrc > $@ + +bin2c: bin2c.cpp + $(CPP) -Os -W -Wall -o $@ $< + +$(JPEGDIR)/libjpeg.a: + cd $(JPEGDIR) && $(MAKE) -f makefile.macosx libjpeg.a + +$(ZLIBDIR)/libz.a: + cd $(ZLIBDIR) && $(MAKE) -f Makefile.macosx + +glew.o: $(GLEWDIR)/glew.c + gcc -c -Os -W -I$(GLEWDIR) -o $@ $< + +rply.o: $(RPLYDIR)/rply.c + gcc -c -O2 -W -I$(RPLYDIR) -o $@ $< + +pnglite.o: $(PNGLITEDIR)/pnglite.c + gcc -c -O2 -W -I$(PNGLITEDIR) -o $@ $< + +$(TINYXMLDIR)/libtinyxml.a: + cd $(TINYXMLDIR) && $(MAKE) -f Makefile.macosx diff --git a/3rdparty/openctm/tools/Makefile.mingw b/3rdparty/openctm/tools/Makefile.mingw new file mode 100644 index 000000000..5b6556afb --- /dev/null +++ b/3rdparty/openctm/tools/Makefile.mingw @@ -0,0 +1,119 @@ +############################################################################### +# Product: OpenCTM tools +# File: Makefile.mingw +# Description: Makefile for the OpenCTM tools, MinGW32 version +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +OPENCTMDIR = ..\lib +GLEWDIR = glew +JPEGDIR = jpeg +RPLYDIR = rply +TINYXMLDIR = tinyxml +ZLIBDIR = zlib +PNGLITEDIR = pnglite + +CPP = g++ +CPPFLAGS = -c -O3 -W -Wall -I$(OPENCTMDIR) -I$(RPLYDIR) -I$(JPEGDIR) -I$(TINYXMLDIR) -I$(GLEWDIR) -I$(ZLIBDIR) -I$(PNGLITEDIR) -DGLEW_STATIC +RC = windres + +MESHOBJS = mesh.o meshio.o ctm.o ply.o rply.o stl.o 3ds.o dae.o obj.o lwo.o off.o wrl.o +CTMCONVOBJS = ctmconv.o common.o systimer.o convoptions.o $(MESHOBJS) ctmconv-res.o +CTMVIEWEROBJS = ctmviewer.o common.o image.o systimer.o sysdialog_win.o convoptions.o glew.o pnglite.o $(MESHOBJS) ctmviewer-res.o +CTMBENCHOBJS = ctmbench.o systimer.o + +all: ctmconv.exe ctmviewer.exe ctmbench.exe + +clean: + del /Q ctmconv.exe ctmviewer.exe ctmbench.exe $(CTMCONVOBJS) $(CTMVIEWEROBJS) $(CTMBENCHOBJS) bin2c.exe phong_frag.h phong_vert.h + cd $(JPEGDIR) && $(MAKE) -f Makefile.mingw clean + cd $(TINYXMLDIR) && $(MAKE) -f Makefile.mingw clean + cd $(ZLIBDIR) && $(MAKE) -f Makefile.mingw clean + +openctm.dll: $(OPENCTMDIR)\openctm.dll + copy $< $@ + +ctmconv.exe: $(CTMCONVOBJS) $(TINYXMLDIR)/libtinyxml.a openctm.dll + $(CPP) -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) $(CTMCONVOBJS) -lopenctm -ltinyxml + +ctmviewer.exe: $(CTMVIEWEROBJS) $(JPEGDIR)/libjpeg.a $(TINYXMLDIR)/libtinyxml.a $(ZLIBDIR)/libz.a openctm.dll + $(CPP) -mwindows -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) -L$(JPEGDIR) -L$(ZLIBDIR) $(CTMVIEWEROBJS) -lopenctm -ltinyxml -ljpeg -lz -lfreeglut -lopengl32 -lglu32 -lcomdlg32 + +ctmbench.exe: $(CTMBENCHOBJS) openctm.dll + $(CPP) -s -o $@ -L$(OPENCTMDIR) $(CTMBENCHOBJS) -lopenctm + +%.o: %.cpp + $(CPP) $(CPPFLAGS) -o $@ $< + +ctmconv.o: ctmconv.cpp systimer.h convoptions.h mesh.h meshio.h +ctmviewer.o: ctmviewer.cpp common.h image.h systimer.h sysdialog.h mesh.h meshio.h phong_vert.h phong_frag.h icons/icon_open.h icons/icon_save.h icons/icon_help.h +ctmbench.o: ctmbench.cpp systimer.h +common.o: common.cpp common.h +image.o: image.cpp image.h common.h $(JPEGDIR)/libjpeg.a +systimer.o: systimer.cpp systimer.h +sysdialog_win.o: sysdialog_win.cpp sysdialog.h +convoptions.o: convoptions.cpp convoptions.h +mesh.o: mesh.cpp mesh.h convoptions.h +meshio.o: meshio.cpp common.h convoptions.h mesh.h ctm.h ply.h stl.h 3ds.h dae.h obj.h lwo.h off.h wrl.h +ctm.o: ctm.cpp ctm.h mesh.h convoptions.h +ply.o: ply.cpp ply.h mesh.h convoptions.h common.h +stl.o: stl.cpp stl.h mesh.h convoptions.h +3ds.o: 3ds.cpp 3ds.h mesh.h convoptions.h +dae.o: dae.cpp dae.h mesh.h convoptions.h +obj.o: obj.cpp obj.h mesh.h convoptions.h common.h +lwo.o: lwo.cpp lwo.h mesh.h convoptions.h +off.o: off.cpp off.h mesh.h convoptions.h common.h +wrl.o: wrl.cpp wrl.h mesh.h convoptions.h common.h + +phong_vert.h: phong.vert bin2c.exe + bin2c.exe phong.vert phongVertSrc > $@ + +phong_frag.h: phong.frag bin2c.exe + bin2c.exe phong.frag phongFragSrc > $@ + +bin2c.exe: bin2c.cpp + $(CPP) -Os -W -Wall -o $@ $< + +ctmconv-res.o: ctmconv.rc icons\openctm.ico + $(RC) $< $@ + +ctmviewer-res.o: ctmviewer.rc icons\openctm.ico + $(RC) $< $@ + +$(JPEGDIR)/libjpeg.a: + cd $(JPEGDIR) && $(MAKE) -f Makefile.mingw libjpeg.a + +$(ZLIBDIR)/libz.a: + cd $(ZLIBDIR) && $(MAKE) -f Makefile.mingw + +glew.o: $(GLEWDIR)/glew.c + gcc -c -Os -W -I$(GLEWDIR) -DGLEW_STATIC -o $@ $< + +rply.o: $(RPLYDIR)/rply.c + gcc -c -O2 -W -I$(RPLYDIR) -o $@ $< + +pnglite.o: $(PNGLITEDIR)/pnglite.c + gcc -c -O2 -W -I$(PNGLITEDIR) -o $@ $< + +$(TINYXMLDIR)/libtinyxml.a: + cd $(TINYXMLDIR) && $(MAKE) -f Makefile.mingw diff --git a/3rdparty/openctm/tools/Makefile.msvc b/3rdparty/openctm/tools/Makefile.msvc new file mode 100644 index 000000000..9ccbe5dee --- /dev/null +++ b/3rdparty/openctm/tools/Makefile.msvc @@ -0,0 +1,119 @@ +############################################################################### +# Product: OpenCTM tools +# File: Makefile.msvc +# Description: Makefile for the OpenCTM tools, MS Visual Studio version +############################################################################### +# Copyright (c) 2009-2010 Marcus Geelnard +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not +# be misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source +# distribution. +############################################################################### + +OPENCTMDIR = ..\lib +GLEWDIR = glew +JPEGDIR = jpeg +RPLYDIR = rply +TINYXMLDIR = tinyxml +ZLIBDIR = zlib +PNGLITEDIR = pnglite + +CPP = cl +CPPFLAGS = /nologo /c /Ox /W3 /EHsc /I$(OPENCTMDIR) /I$(RPLYDIR) /I$(JPEGDIR) /I$(TINYXMLDIR) /I$(GLEWDIR) /I$(ZLIBDIR) /I$(PNGLITEDIR) /DGLEW_STATIC /D_CRT_SECURE_NO_WARNINGS +RC = rc + +MESHOBJS = mesh.obj meshio.obj ctm.obj ply.obj rply.obj stl.obj 3ds.obj dae.obj obj.obj lwo.obj off.obj wrl.obj +CTMCONVOBJS = ctmconv.obj common.obj systimer.obj convoptions.obj $(MESHOBJS) ctmconv.res +CTMVIEWEROBJS = ctmviewer.obj common.obj image.obj systimer.obj sysdialog_win.obj convoptions.obj glew.obj pnglite.obj $(MESHOBJS) ctmviewer.res +CTMBENCHOBJS = ctmbench.obj systimer.obj + +all: ctmconv.exe ctmviewer.exe ctmbench.exe + +clean: + del /Q ctmconv.exe ctmviewer.exe ctmbench.exe $(CTMCONVOBJS) $(CTMVIEWEROBJS) $(CTMBENCHOBJS) bin2c.exe phong_frag.h phong_vert.h + cd $(JPEGDIR) && $(MAKE) /fmakefile.vc cleanlib + cd $(TINYXMLDIR) && $(MAKE) /fMakefile.msvc clean + cd $(ZLIBDIR) && $(MAKE) /fMakefile.msvc clean + +openctm.dll: $(OPENCTMDIR)\openctm.dll + copy $(OPENCTMDIR)\openctm.dll openctm.dll + +ctmconv.exe: $(CTMCONVOBJS) $(TINYXMLDIR)\tinyxml.lib openctm.dll + $(CPP) /nologo /Fe$@ $(CTMCONVOBJS) /link /LIBPATH:$(OPENCTMDIR) /LIBPATH:$(TINYXMLDIR) openctm.lib tinyxml.lib + +ctmviewer.exe: $(CTMVIEWEROBJS) $(JPEGDIR)\libjpeg.lib $(TINYXMLDIR)\tinyxml.lib $(ZLIBDIR)\libz.lib openctm.dll + $(CPP) /nologo /Fe$@ $(CTMVIEWEROBJS) /link /subsystem:windows /entry:mainCRTStartup /LIBPATH:$(OPENCTMDIR) /LIBPATH:$(TINYXMLDIR) /LIBPATH:$(JPEGDIR) /LIBPATH:$(ZLIBDIR) openctm.lib tinyxml.lib glut.lib libjpeg.lib libz.lib opengl32.lib glu32.lib + +ctmbench.exe: $(CTMBENCHOBJS) openctm.dll + $(CPP) /nologo /Fe$@ $(CTMBENCHOBJS) /link /LIBPATH:$(OPENCTMDIR) openctm.lib + +.cpp.obj: + $(CPP) $(CPPFLAGS) /Fo$@ $< + +ctmconv.obj: ctmconv.cpp systimer.h convoptions.h mesh.h meshio.h +ctmviewer.obj: ctmviewer.cpp common.h image.h systimer.h sysdialog.h mesh.h meshio.h phong_vert.h phong_frag.h icons\icon_open.h icons\icon_save.h icons\icon_help.h +ctmbench.obj: ctmbench.cpp systimer.h +common.obj: common.cpp common.h +image.obj: image.cpp image.h common.h $(JPEGDIR)\libjpeg.lib +systimer.obj: systimer.cpp systimer.h +sysdialog_win.obj: sysdialog_win.cpp sysdialog.h +convoptions.obj: convoptions.cpp convoptions.h +mesh.obj: mesh.cpp mesh.h convoptions.h +meshio.obj: meshio.cpp common.h convoptions.h mesh.h ctm.h ply.h stl.h 3ds.h dae.h obj.h lwo.h off.h wrl.h +ctm.obj: ctm.cpp ctm.h mesh.h convoptions.h +ply.obj: ply.cpp ply.h mesh.h convoptions.h common.h +stl.obj: stl.cpp stl.h mesh.h convoptions.h +3ds.obj: 3ds.cpp 3ds.h mesh.h convoptions.h +dae.obj: dae.cpp dae.h mesh.h convoptions.h +obj.obj: obj.cpp obj.h mesh.h convoptions.h common.h +lwo.obj: lwo.cpp lwo.h mesh.h convoptions.h +off.obj: off.cpp off.h mesh.h convoptions.h common.h +wrl.obj: wrl.cpp wrl.h mesh.h convoptions.h common.h + +phong_vert.h: phong.vert bin2c.exe + bin2c.exe phong.vert phongVertSrc > $@ + +phong_frag.h: phong.frag bin2c.exe + bin2c.exe phong.frag phongFragSrc > $@ + +bin2c.exe: bin2c.cpp + $(CPP) /nologo /Ox /W3 /EHsc /Fe$@ bin2c.cpp + +ctmconv.res: ctmconv.rc icons\openctm.ico + $(RC) ctmconv.rc + +ctmviewer.res: ctmviewer.rc icons\openctm.ico + $(RC) ctmviewer.rc + +$(JPEGDIR)\libjpeg.lib: + cd $(JPEGDIR) && $(MAKE) /fmakefile.vc libjpeg.lib + +$(ZLIBDIR)\libz.lib: + cd $(ZLIBDIR) && $(MAKE) /fMakefile.msvc + +glew.obj: $(GLEWDIR)\glew.c + cl /nologo /c /Ox /W3 /I$(GLEWDIR) /DGLEW_STATIC /Fo$@ $(GLEWDIR)\glew.c + +rply.obj: $(RPLYDIR)\rply.c + cl /nologo /c /Ox /W3 /I$(RPLYDIR) /D_CRT_SECURE_NO_WARNINGS /Fo$@ $(RPLYDIR)\rply.c + +pnglite.obj: $(PNGLITEDIR)\pnglite.c + cl /nologo /c /Ox /W3 /I$(PNGLITEDIR) /D_CRT_SECURE_NO_WARNINGS /Fo$@ $(PNGLITEDIR)\pnglite.c + +$(TINYXMLDIR)\tinyxml.lib: + cd $(TINYXMLDIR) && $(MAKE) /fMakefile.msvc diff --git a/3rdparty/openctm/tools/bin2c.cpp b/3rdparty/openctm/tools/bin2c.cpp new file mode 100644 index 000000000..2fae343da --- /dev/null +++ b/3rdparty/openctm/tools/bin2c.cpp @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: bin2c.cpp +// Description: Binary to C source code file converter (used for building the +/// tools). +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include + +using namespace std; + + +int main(int argc, char ** argv) +{ + // Check arguments + if(argc != 3) + { + cerr << "Usage: " << argv[0] << " file varname" << endl; + return 0; + } + + // Open input file + ifstream f(argv[1], ios::binary | ios::in); + if(f.fail()) + { + cerr << "Unable to open file: " << argv[1] << endl; + return 0; + } + + // Read & translate input file and print to standard out... + cout << "static const unsigned char " << argv[2] << "[] = {" << endl; + while(!f.eof()) + { + unsigned char buf[19]; + f.read((char *) buf, 19); + unsigned int count = f.gcount(); + if(count > 0) + { + cout << " "; + for(unsigned int i = 0; i < count; ++ i) + cout << int(buf[i]) << ","; + cout << endl; + } + } + cout << " 0" << endl; + cout << "};" << endl; + + // Close input file + f.close(); + + return 0; +} diff --git a/3rdparty/openctm/tools/common.cpp b/3rdparty/openctm/tools/common.cpp new file mode 100644 index 000000000..22371ef62 --- /dev/null +++ b/3rdparty/openctm/tools/common.cpp @@ -0,0 +1,97 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: common.cpp +// Description: Miscellaneous helper functions. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include "common.h" + +using namespace std; + +// Convert a string to upper case. +string UpperCase(const string &aString) +{ + string result(aString); + for(unsigned int i = 0; i < result.size(); ++ i) + result[i] = toupper(result[i]); + return result; +} + +// Trim heading and trailing white spaces of a string +string TrimString(const string &aString) +{ + size_t l = aString.size(); + size_t p1 = 0, p2 = l - 1; + while((p1 < p2) && IsWhiteSpace(aString[p1])) + ++ p1; + while((p2 > p1) && IsWhiteSpace(aString[p2])) + -- p2; + return aString.substr(p1, p2 - p1 + 1); +} + +// Extract the file name of a file path (excluding the path). +string ExtractFileName(const string &aString) +{ + string result = ""; + size_t pathPos = aString.rfind("/"); + if(pathPos == string::npos) + pathPos = aString.rfind("\\"); + if(pathPos != string::npos) + result = aString.substr(pathPos + 1); + return result; +} + +// Extract the file path of a file path (excluding the file name). +string ExtractFilePath(const string &aString) +{ + string result = ""; + size_t pathPos = aString.rfind("/"); + if(pathPos == string::npos) + pathPos = aString.rfind("\\"); + if(pathPos != string::npos) + result = aString.substr(0, pathPos); + return result; +} + +// Extract the file extension of a file name. +string ExtractFileExt(const string &aString) +{ + string result = ""; + size_t extPos = aString.rfind("."); + if(extPos != string::npos) + result = aString.substr(extPos); + return result; +} + +// Check if a character is an end-of-line marker or not +bool IsEOL(const char c) +{ + return (c == '\n') || (c == '\r'); +} + +// Check if a character is a white space or not +bool IsWhiteSpace(const char c) +{ + return (c == ' ') || (c == '\t') || (c == '\n') || (c == '\r'); +} diff --git a/3rdparty/openctm/tools/common.h b/3rdparty/openctm/tools/common.h new file mode 100644 index 000000000..11c545b22 --- /dev/null +++ b/3rdparty/openctm/tools/common.h @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: common.h +// Description: Miscellaneous helper functions. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __COMMON_H_ +#define __COMMON_H_ + +#include + +// Convert a string to upper case. +std::string UpperCase(const std::string &aString); + +// Trim heading and trailing white spaces of a string +std::string TrimString(const std::string &aString); + +// Extract the file name of a file path (excluding the path). +std::string ExtractFileName(const std::string &aString); + +// Extract the file path of a file path (excluding the file name). +std::string ExtractFilePath(const std::string &aString); + +// Extract the file extension of a file name. +std::string ExtractFileExt(const std::string &aString); + +// Check if a character is an end-of-line marker or not +bool IsEOL(const char c); + +// Check if a character is a white space or not +bool IsWhiteSpace(const char c); + +#endif // __COMMON_H_ diff --git a/3rdparty/openctm/tools/convoptions.cpp b/3rdparty/openctm/tools/convoptions.cpp new file mode 100644 index 000000000..bab301b5c --- /dev/null +++ b/3rdparty/openctm/tools/convoptions.cpp @@ -0,0 +1,190 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: convoptions.cpp +// Description: Implementation of the conversion options class. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include "convoptions.h" + +using namespace std; + + +/// Constructor +Options::Options() +{ + // Set default values + mScale = 1.0f; + mUpAxis = uaZ; + mFlipTriangles = false; + mCalcNormals = false; + mNoNormals = false; + mNoTexCoords = false; + mNoColors = false; + + mMethod = CTM_METHOD_MG2; + mLevel = 1; + mVertexPrecision = 0.0f; + mVertexPrecisionRel = 0.01f; + mNormalPrecision = 1.0f / 256.0f; + mTexMapPrecision = 1.0f / 4096.0f; + mColorPrecision = 1.0f / 256.0f; + mComment = string(""); + mTexFileName = string(""); +} + +/// Convert a string to a floating point value +static CTMfloat GetFloatArg(char * aFloatString) +{ + stringstream s; + s << aFloatString; + s.seekg(0); + CTMfloat f; + s >> f; + return f; +} + +/// Convert a string to an integer value +static CTMint GetIntArg(char * aIntString) +{ + stringstream s; + s << aIntString; + s.seekg(0); + CTMint i; + s >> i; + return i; +} + +/// Get options from the command line arguments +void Options::GetFromArgs(int argc, char **argv, int aStartIdx) +{ + for(int i = aStartIdx; i < argc; ++ i) + { + string cmd(argv[i]); + if((cmd == string("--scale")) && (i < (argc - 1))) + { + mScale = GetFloatArg(argv[i + 1]); + ++ i; + } + else if((cmd == string("--upaxis")) && (i < (argc - 1))) + { + string upaxis(argv[i + 1]); + ++ i; + if(upaxis == string("X")) + mUpAxis = uaX; + else if(upaxis == string("Y")) + mUpAxis = uaY; + else if(upaxis == string("Z")) + mUpAxis = uaZ; + else if(upaxis == string("-X")) + mUpAxis = uaNX; + else if(upaxis == string("-Y")) + mUpAxis = uaNY; + else if(upaxis == string("-Z")) + mUpAxis = uaNZ; + else + throw runtime_error("Invalid up axis (use X, Y, Z, -X, -Y or -Z)."); + } + else if(cmd == string("--flip")) + { + mFlipTriangles = true; + } + else if(cmd == string("--calc-normals")) + { + mCalcNormals = true; + } + else if(cmd == string("--no-normals")) + { + mNoNormals = true; + } + else if(cmd == string("--no-texcoords")) + { + mNoTexCoords = true; + } + else if(cmd == string("--no-colors")) + { + mNoColors = true; + } + else if((cmd == string("--method")) && (i < (argc - 1))) + { + string method(argv[i + 1]); + ++ i; + if(method == string("RAW")) + mMethod = CTM_METHOD_RAW; + else if(method == string("MG1")) + mMethod = CTM_METHOD_MG1; + else if(method == string("MG2")) + mMethod = CTM_METHOD_MG2; + else + throw runtime_error("Invalid method (use RAW, MG1 or MG2)."); + } + else if((cmd == string("--level")) && (i < (argc - 1))) + { + CTMint val = GetIntArg(argv[i + 1]); + if( (val < 0) || (val > 9) ) + throw runtime_error("Invalid compression level (it must be in the range 0 - 9)."); + mLevel = CTMuint(val); + ++ i; + } + else if((cmd == string("--vprec")) && (i < (argc - 1))) + { + mVertexPrecision = GetFloatArg(argv[i + 1]); + ++ i; + } + else if((cmd == string("--vprecrel")) && (i < (argc - 1))) + { + mVertexPrecisionRel = GetFloatArg(argv[i + 1]); + ++ i; + } + else if((cmd == string("--nprec")) && (i < (argc - 1))) + { + mNormalPrecision = GetFloatArg(argv[i + 1]); + ++ i; + } + else if((cmd == string("--tprec")) && (i < (argc - 1))) + { + mTexMapPrecision = GetFloatArg(argv[i + 1]); + ++ i; + } + else if((cmd == string("--cprec")) && (i < (argc - 1))) + { + mColorPrecision = GetFloatArg(argv[i + 1]); + ++ i; + } + else if((cmd == string("--comment")) && (i < (argc - 1))) + { + mComment = string(argv[i + 1]); + ++ i; + } + else if((cmd == string("--texfile")) && (i < (argc - 1))) + { + mTexFileName = string(argv[i + 1]); + ++ i; + } + else + throw runtime_error(string("Invalid argument: ") + cmd); + } +} diff --git a/3rdparty/openctm/tools/convoptions.h b/3rdparty/openctm/tools/convoptions.h new file mode 100644 index 000000000..283e158db --- /dev/null +++ b/3rdparty/openctm/tools/convoptions.h @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: convoptions.h +// Description: Interface for the conversion options class. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __CONVOPTIONS_H_ +#define __CONVOPTIONS_H_ + +#include +#include + + +typedef enum { + uaX, uaY, uaZ, uaNX, uaNY, uaNZ +} UpAxis; + +class Options { + public: + /// Constructor + Options(); + + /// Get options from the command line arguments + void GetFromArgs(int argc, char **argv, int aStartIdx); + + CTMfloat mScale; + UpAxis mUpAxis; + bool mFlipTriangles; + bool mCalcNormals; + bool mNoNormals; + bool mNoTexCoords; + bool mNoColors; + + CTMenum mMethod; + CTMuint mLevel; + + CTMfloat mVertexPrecision; + CTMfloat mVertexPrecisionRel; + CTMfloat mNormalPrecision; + CTMfloat mTexMapPrecision; + CTMfloat mColorPrecision; + + std::string mComment; + std::string mTexFileName; +}; + +#endif // __CONVOPTIONS_H_ diff --git a/3rdparty/openctm/tools/ctm.cpp b/3rdparty/openctm/tools/ctm.cpp new file mode 100644 index 000000000..7ed749d5a --- /dev/null +++ b/3rdparty/openctm/tools/ctm.cpp @@ -0,0 +1,166 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ctm.h +// Description: Implementation of the OpenCTM file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include "ctm.h" + +using namespace std; + + +/// Import an OpenCTM file from a file. +void Import_CTM(const char * aFileName, Mesh * aMesh) +{ + // Clear the mesh + aMesh->Clear(); + + // Load the file using the OpenCTM API + CTMimporter ctm; + + // Load the file + ctm.Load(aFileName); + + // Extract file comment + const char * comment = ctm.GetString(CTM_FILE_COMMENT); + if(comment) + aMesh->mComment = string(comment); + + // Extract indices + CTMuint numTriangles = ctm.GetInteger(CTM_TRIANGLE_COUNT); + aMesh->mIndices.resize(numTriangles * 3); + const CTMuint * indices = ctm.GetIntegerArray(CTM_INDICES); + for(CTMuint i = 0; i < numTriangles * 3; ++ i) + aMesh->mIndices[i] = indices[i]; + + // Extract vertices + CTMuint numVertices = ctm.GetInteger(CTM_VERTEX_COUNT); + aMesh->mVertices.resize(numVertices); + const CTMfloat * vertices = ctm.GetFloatArray(CTM_VERTICES); + for(CTMuint i = 0; i < numVertices; ++ i) + { + aMesh->mVertices[i].x = vertices[i * 3]; + aMesh->mVertices[i].y = vertices[i * 3 + 1]; + aMesh->mVertices[i].z = vertices[i * 3 + 2]; + } + + // Extract normals + if(ctm.GetInteger(CTM_HAS_NORMALS) == CTM_TRUE) + { + aMesh->mNormals.resize(numVertices); + const CTMfloat * normals = ctm.GetFloatArray(CTM_NORMALS); + for(CTMuint i = 0; i < numVertices; ++ i) + { + aMesh->mNormals[i].x = normals[i * 3]; + aMesh->mNormals[i].y = normals[i * 3 + 1]; + aMesh->mNormals[i].z = normals[i * 3 + 2]; + } + } + + // Extract texture coordinates + if(ctm.GetInteger(CTM_UV_MAP_COUNT) > 0) + { + aMesh->mTexCoords.resize(numVertices); + const CTMfloat * texCoords = ctm.GetFloatArray(CTM_UV_MAP_1); + for(CTMuint i = 0; i < numVertices; ++ i) + { + aMesh->mTexCoords[i].u = texCoords[i * 2]; + aMesh->mTexCoords[i].v = texCoords[i * 2 + 1]; + } + const char * str = ctm.GetUVMapString(CTM_UV_MAP_1, CTM_FILE_NAME); + if(str) + aMesh->mTexFileName = string(str); + else + aMesh->mTexFileName = string(""); + } + + // Extract colors + CTMenum colorAttrib = ctm.GetNamedAttribMap("Color"); + if(colorAttrib != CTM_NONE) + { + aMesh->mColors.resize(numVertices); + const CTMfloat * colors = ctm.GetFloatArray(colorAttrib); + for(CTMuint i = 0; i < numVertices; ++ i) + { + aMesh->mColors[i].x = colors[i * 4]; + aMesh->mColors[i].y = colors[i * 4 + 1]; + aMesh->mColors[i].z = colors[i * 4 + 2]; + aMesh->mColors[i].w = colors[i * 4 + 3]; + } + } +} + +/// Export an OpenCTM file to a file. +void Export_CTM(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Save the file using the OpenCTM API + CTMexporter ctm; + + // Define mesh + CTMfloat * normals = 0; + if(aMesh->HasNormals() && !aOptions.mNoNormals) + normals = &aMesh->mNormals[0].x; + ctm.DefineMesh((CTMfloat *) &aMesh->mVertices[0].x, aMesh->mVertices.size(), + (const CTMuint*) &aMesh->mIndices[0], aMesh->mIndices.size() / 3, + normals); + + // Define texture coordinates + if(aMesh->HasTexCoords()) + { + const char * fileName = NULL; + if(aMesh->mTexFileName.size() > 0) + fileName = aMesh->mTexFileName.c_str(); + CTMenum map = ctm.AddUVMap(&aMesh->mTexCoords[0].u, "Diffuse color", fileName); + ctm.UVCoordPrecision(map, aOptions.mTexMapPrecision); + } + + // Define vertex colors + if(aMesh->HasColors()) + { + CTMenum map = ctm.AddAttribMap(&aMesh->mColors[0].x, "Color"); + ctm.AttribPrecision(map, aOptions.mColorPrecision); + } + + // Set file comment + if(aMesh->mComment.size() > 0) + ctm.FileComment(aMesh->mComment.c_str()); + + // Set compression method and level + ctm.CompressionMethod(aOptions.mMethod); + ctm.CompressionLevel(aOptions.mLevel); + + // Set vertex precision + if(aOptions.mVertexPrecision > 0.0f) + ctm.VertexPrecision(aOptions.mVertexPrecision); + else + ctm.VertexPrecisionRel(aOptions.mVertexPrecisionRel); + + // Set normal precision + ctm.NormalPrecision(aOptions.mNormalPrecision); + + // Export file + ctm.Save(aFileName); +} diff --git a/3rdparty/openctm/tools/ctm.h b/3rdparty/openctm/tools/ctm.h new file mode 100644 index 000000000..82f5ec34d --- /dev/null +++ b/3rdparty/openctm/tools/ctm.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ctm.h +// Description: Interface for the OpenCTM file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __CTM_H_ +#define __CTM_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import an OpenCTM file from a file. +void Import_CTM(const char * aFileName, Mesh * aMesh); + +/// Export an OpenCTM file to a file. +void Export_CTM(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __CTM_H_ diff --git a/3rdparty/openctm/tools/ctmbench.cpp b/3rdparty/openctm/tools/ctmbench.cpp new file mode 100644 index 000000000..71cabafd2 --- /dev/null +++ b/3rdparty/openctm/tools/ctmbench.cpp @@ -0,0 +1,189 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ctmbench.cpp +// Description: Load/save benchmark tool. This tools is actually just a quick +// hack used for development and testing. To change the compression +// parameters for the save benchmarks, a recompile is required. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include "systimer.h" + +using namespace std; + + +//----------------------------------------------------------------------------- +// BenchmarkLoads() - Benchmark function for loading OpenCTM files. +//----------------------------------------------------------------------------- + +void BenchmarkLoads(int aIterations, const char * aFileName, double &tMin, + double &tMax, double &tTotal) +{ + SysTimer timer; + + // Iterate... + cout << "Doing " << aIterations << " load iterations..." << endl << flush; + for(int i = 0; i < aIterations; ++ i) + { + CTMimporter ctm; + + // Start the timer + timer.Push(); + + // Load the file + ctm.Load(aFileName); + + // Stop the timer + double t = timer.PopDelta(); + if(i == 0) + { + tMin = t; + tMax = t; + } + else + { + if(t < tMin) tMin = t; + if(t > tMax) tMax = t; + } + tTotal += t; + } +} + + +//----------------------------------------------------------------------------- +// BenchmarkSaves() - Benchmark function for saving OpenCTM files. +//----------------------------------------------------------------------------- + +void BenchmarkSaves(int aIterations, const char * aInFile, const char * aOutFile, + double &tMin, double &tMax, double &tTotal) +{ + SysTimer timer; + + // Load the file + CTMimporter in; + in.Load(aInFile); + + // Extract mesh definition + CTMint triCount = in.GetInteger(CTM_TRIANGLE_COUNT); + CTMint vertCount = in.GetInteger(CTM_VERTEX_COUNT); + const CTMuint * indx = in.GetIntegerArray(CTM_INDICES); + const CTMfloat * vert = in.GetFloatArray(CTM_VERTICES); + const CTMfloat * norm = 0; + if(in.GetInteger(CTM_HAS_NORMALS)) + norm = in.GetFloatArray(CTM_NORMALS); + + // Iterate... + cout << "Doing " << aIterations << " save iterations..." << endl << flush; + for(int i = 0; i < aIterations; ++ i) + { + // Define the mesh + CTMexporter out; + out.DefineMesh(vert, vertCount, indx, triCount, norm); + + int uvCount = in.GetInteger(CTM_UV_MAP_COUNT); + for(int k = 0; k < uvCount; ++ k) + { + const CTMfloat * uvMap = in.GetFloatArray(CTMenum(CTM_UV_MAP_1 + k)); + const char * name = in.GetUVMapString(CTMenum(CTM_UV_MAP_1 + k), CTM_NAME); + const char * fileName = in.GetUVMapString(CTMenum(CTM_UV_MAP_1 + k), CTM_FILE_NAME); + out.AddUVMap(uvMap, name, fileName); + } + + int attrCount = in.GetInteger(CTM_ATTRIB_MAP_COUNT); + for(int k = 0; k < attrCount; ++ k) + { + const CTMfloat * attrMap = in.GetFloatArray(CTMenum(CTM_ATTRIB_MAP_1 + k)); + const char * name = in.GetAttribMapString(CTMenum(CTM_ATTRIB_MAP_1 + k), CTM_NAME); + out.AddAttribMap(attrMap, name); + } + + // Select compression parameters + out.CompressionMethod(CTM_METHOD_MG1); + + // Start the timer + timer.Push(); + + // Save the file + out.Save(aOutFile); + + // Stop the timer + double t = timer.PopDelta(); + if(i == 0) + { + tMin = t; + tMax = t; + } + else + { + if(t < tMin) tMin = t; + if(t > tMax) tMax = t; + } + tTotal += t; + } +} + + +//----------------------------------------------------------------------------- +// main() - Program entry. +//----------------------------------------------------------------------------- + +int main(int argc, char **argv) +{ + // Usage? + if((argc < 3) || (argc > 4)) + { + cout << "Usage: ctmbench iterations infile [outfile]" << endl; + return 0; + } + + // Get the number of iterations + int iterations; + iterations = atoi(argv[1]); + if(iterations < 1) + iterations = 1; + + // Should we do load benchmarking or save benchmarking? + bool benchSave = (argc == 4); + + try + { + double tMin = 0.0, tMax = 0.0, tTotal = 0.0; + if(benchSave) + BenchmarkSaves(iterations, argv[2], argv[3], tMin, tMax, tTotal); + else + BenchmarkLoads(iterations, argv[2], tMin, tMax, tTotal); + + // Print report + cout << " Min: " << tMin * 1000.0 << " ms" << endl; + cout << " Max: " << tMax * 1000.0 << " ms" << endl; + cout << "Avg.: " << (tTotal / iterations) * 1000.0 << " ms" << endl; + } + catch(exception &e) + { + cout << "Error: " << e.what() << endl; + } +} diff --git a/3rdparty/openctm/tools/ctmconv.cpp b/3rdparty/openctm/tools/ctmconv.cpp new file mode 100644 index 000000000..62993aab2 --- /dev/null +++ b/3rdparty/openctm/tools/ctmconv.cpp @@ -0,0 +1,234 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ctmconv.cpp +// Description: 3D file format conversion tool. The program can be used to +// convert various 3D file formats to and from the OpenCTM file +// format, and also for conversion between other formats. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include "systimer.h" +#include "convoptions.h" +#include "mesh.h" +#include "meshio.h" + +using namespace std; + + +//----------------------------------------------------------------------------- +// PreProcessMesh() +//----------------------------------------------------------------------------- +static void PreProcessMesh(Mesh &aMesh, Options &aOptions) +{ + // Nothing to do? + if((aOptions.mScale == 1.0f) && (aOptions.mUpAxis == uaZ) && + (!aOptions.mFlipTriangles) && (!aOptions.mCalcNormals)) + return; + + // Create 3x3 transformation matrices for the vertices and the normals + Vector3 vX, vY, vZ; + Vector3 nX, nY, nZ; + switch(aOptions.mUpAxis) + { + case uaX: + nX = Vector3(0.0f, 0.0f, 1.0f); + nY = Vector3(0.0f, 1.0f, 0.0f); + nZ = Vector3(-1.0f, 0.0f, 0.0f); + break; + case uaY: + nX = Vector3(1.0f, 0.0f, 0.0f); + nY = Vector3(0.0f, 0.0f, 1.0f); + nZ = Vector3(0.0f, -1.0f, 0.0f); + break; + case uaZ: + nX = Vector3(1.0f, 0.0f, 0.0f); + nY = Vector3(0.0f, 1.0f, 0.0f); + nZ = Vector3(0.0f, 0.0f, 1.0f); + break; + case uaNX: + nX = Vector3(0.0f, 0.0f, -1.0f); + nY = Vector3(0.0f, 1.0f, 0.0f); + nZ = Vector3(1.0f, 0.0f, 0.0f); + break; + case uaNY: + nX = Vector3(1.0f, 0.0f, 0.0f); + nY = Vector3(0.0f, 0.0f, -1.0f); + nZ = Vector3(0.0f, 1.0f, 0.0f); + break; + case uaNZ: + nX = Vector3(-1.0f, 0.0f, 0.0f); + nY = Vector3(0.0f, 1.0f, 0.0f); + nZ = Vector3(0.0f, 0.0f, -1.0f); + break; + } + vX = nX * aOptions.mScale; + vY = nY * aOptions.mScale; + vZ = nZ * aOptions.mScale; + + cout << "Processing... " << flush; + SysTimer timer; + timer.Push(); + + // Update all vertex coordinates + for(CTMuint i = 0; i < aMesh.mVertices.size(); ++ i) + aMesh.mVertices[i] = vX * aMesh.mVertices[i].x + + vY * aMesh.mVertices[i].y + + vZ * aMesh.mVertices[i].z; + + // Update all normals + if(aMesh.HasNormals() && !aOptions.mNoNormals) + { + for(CTMuint i = 0; i < aMesh.mNormals.size(); ++ i) + aMesh.mNormals[i] = nX * aMesh.mNormals[i].x + + nY * aMesh.mNormals[i].y + + nZ * aMesh.mNormals[i].z; + } + + // Flip trianlges? + if(aOptions.mFlipTriangles) + { + CTMuint triCount = aMesh.mIndices.size() / 3; + for(CTMuint i = 0; i < triCount; ++ i) + { + CTMuint tmp = aMesh.mIndices[i * 3]; + aMesh.mIndices[i * 3] = aMesh.mIndices[i * 3 + 1]; + aMesh.mIndices[i * 3 + 1] = tmp; + } + } + + // Calculate normals? + if((!aOptions.mNoNormals) && aOptions.mCalcNormals && + (!aMesh.HasNormals())) + aMesh.CalculateNormals(); + + double dt = timer.PopDelta(); + cout << 1000.0 * dt << " ms" << endl; +} + + +//----------------------------------------------------------------------------- +// main() +//----------------------------------------------------------------------------- +int main(int argc, char ** argv) +{ + // Get file names and options + Options opt; + string inFile; + string outFile; + try + { + if(argc < 3) + throw runtime_error("Too few arguments."); + inFile = string(argv[1]); + outFile = string(argv[2]); + opt.GetFromArgs(argc, argv, 3); + } + catch(exception &e) + { + cout << "Error: " << e.what() << endl << endl; + cout << "Usage: " << argv[0] << " infile outfile [options]" << endl << endl; + cout << "Options:" << endl; + cout << endl << " Data manipulation (all formats)" << endl; + cout << " --scale arg Scale the mesh by a scalar factor." << endl; + cout << " --upaxis arg Set up axis (X, Y, Z, -X, -Y, -Z). If != Z, the mesh will" << endl; + cout << " be flipped." << endl; + cout << " --flip Flip triangle orientation." << endl; + cout << " --calc-normals If the source file does not contain any normals, calculate" << endl; + cout << " them." << endl; + cout << " --no-normals Do not export normals." << endl; + cout << " --no-texcoords Do not export texture coordinates." << endl; + cout << " --no-colors Do not export vertex colors." << endl; + cout << endl << " OpenCTM output" << endl; + cout << " --method arg Select compression method (RAW, MG1, MG2)" << endl; + cout << " --level arg Set the compression level (0 - 9)" << endl; + cout << endl << " OpenCTM MG2 method" << endl; + cout << " --vprec arg Set vertex precision" << endl; + cout << " --vprecrel arg Set vertex precision, relative method" << endl; + cout << " --nprec arg Set normal precision" << endl; + cout << " --tprec arg Set texture map precision" << endl; + cout << " --cprec arg Set color precision" << endl; + cout << endl << " Miscellaneous" << endl; + cout << " --comment arg Set the file comment (default is to use the comment" << endl; + cout << " from the input file, if any)." << endl; + cout << " --texfile arg Set the texture file name reference for the texture" << endl; + cout << " (default is to use the texture file name reference" << endl; + cout << " from the input file, if any)." << endl; + + // Show supported formats + cout << endl << "Supported file formats:" << endl << endl; + list formatList; + SupportedFormats(formatList); + for(list::iterator i = formatList.begin(); i != formatList.end(); ++ i) + cout << " " << (*i) << endl; + cout << endl; + + return 0; + } + + try + { + // Define mesh + Mesh mesh; + + // Create a timer instance + SysTimer timer; + double dt; + + // Load input file + cout << "Loading " << inFile << "... " << flush; + timer.Push(); + ImportMesh(inFile.c_str(), &mesh); + dt = timer.PopDelta(); + cout << 1000.0 * dt << " ms" << endl; + + // Manipulate the mesh + PreProcessMesh(mesh, opt); + + // Override comment? + if(opt.mComment.size() > 0) + mesh.mComment = opt.mComment; + + // Override texture file name? + if(opt.mTexFileName.size() > 0) + mesh.mTexFileName = opt.mTexFileName; + + // Save output file + cout << "Saving " << outFile << "... " << flush; + timer.Push(); + ExportMesh(outFile.c_str(), &mesh, opt); + dt = timer.PopDelta(); + cout << 1000.0 * dt << " ms" << endl; + } + catch(exception &e) + { + cout << "Error: " << e.what() << endl; + } + + return 0; +} diff --git a/3rdparty/openctm/tools/ctmconv.rc b/3rdparty/openctm/tools/ctmconv.rc new file mode 100644 index 000000000..10ffe1c5e --- /dev/null +++ b/3rdparty/openctm/tools/ctmconv.rc @@ -0,0 +1,27 @@ +0 ICON "icons\openctm.ico" + +1 VERSIONINFO + FILEVERSION 1,0,3,0 + PRODUCTVERSION 1,0,3,0 + FILEOS 0x04 + FILETYPE 0x01 + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "ProductVersion", "1.0.3.0" + VALUE "FileVersion", "1.0.3.0" + VALUE "FileDescription", "OpenCTM 3D file converter" + VALUE "ProductName", "ctmconv" + VALUE "OriginalFilename", "ctmconv.exe" + VALUE "LegalCopyright", "© 2009-2010 Marcus Geelnard" + VALUE "License", "This software is released under the zlib/libpng license." + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END + END diff --git a/3rdparty/openctm/tools/ctmviewer.cpp b/3rdparty/openctm/tools/ctmviewer.cpp new file mode 100644 index 000000000..6c5a457b0 --- /dev/null +++ b/3rdparty/openctm/tools/ctmviewer.cpp @@ -0,0 +1,1787 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ctmviewer.cpp +// Description: 3D file viewer. The program can be used to view OpenCTM files +// in an interactive OpenGL window. Files in other supported +// formats can also be viewed. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#ifdef __APPLE_CC__ + #include +#else + #include +#endif +#include +#include "mesh.h" +#include "meshio.h" +#include "sysdialog.h" +#include "systimer.h" +#include "image.h" +#include "common.h" + +using namespace std; + + +// We need PI +#ifndef PI + #define PI 3.141592653589793238462643f +#endif + +// Configuration constants +#define FOCUS_TIME 0.1 +#define DOUBLE_CLICK_TIME 0.25 + + +//----------------------------------------------------------------------------- +// GLSL source code (generated from source by bin2c) +//----------------------------------------------------------------------------- + +#include "phong_vert.h" +#include "phong_frag.h" + + +//----------------------------------------------------------------------------- +// Icon bitmaps +//----------------------------------------------------------------------------- + +#include "icons/icon_open.h" +#include "icons/icon_save.h" +#include "icons/icon_texture.h" +#include "icons/icon_help.h" + + +//----------------------------------------------------------------------------- +// The GLViewer application class (declaration) +//----------------------------------------------------------------------------- + +class GLButton; + +class GLViewer { + private: + // File information for the current mesh + string mFileName, mFilePath; + long mFileSize; + + // Window state cariables + int mWidth, mHeight; + GLint mDepthBufferResolution; + int mOldMouseX, mOldMouseY; + double mLastClickTime; + bool mMouseRotate; + bool mMouseZoom; + bool mMousePan; + bool mFocusing; + Vector3 mFocusStartPos; + Vector3 mFocusEndPos; + double mFocusStartTime; + double mFocusEndTime; + double mFocusStartDistance; + double mFocusEndDistance; + + // Camera state + Vector3 mCameraPosition; + Vector3 mCameraLookAt; + Vector3 mCameraUp; + GLdouble mModelviewMatrix[16]; + GLdouble mProjectionMatrix[16]; + GLint mViewport[4]; + + // Mesh information + Mesh * mMesh; + Vector3 mAABBMin, mAABBMax; + GLuint mDisplayList; + GLuint mTexHandle; + + // Polygon rendering mode (fill / line) + GLenum mPolyMode; + + // GLSL objects + bool mUseShader; + GLuint mShaderProgram; + GLuint mVertShader; + GLuint mFragShader; + + // List of GUI buttons + list mButtons; + + // Master timer resource + SysTimer mTimer; + + /// Set up the camera. + void SetupCamera(); + + /// Initialize the GLSL shader (requires OpenGL 2.0 or better). + void InitShader(); + + /// Initialize the texture. + void InitTexture(const char * aFileName); + + /// Set up the scene lighting. + void SetupLighting(); + + /// Set up the material. + void SetupMaterial(); + + /// Draw a mesh + void DrawMesh(Mesh * aMesh); + + /// Load a file to the mesh + void LoadFile(const char * aFileName, const char * aOverrideTexture); + + /// Load a texture file + void LoadTexture(const char * aFileName); + + /// Draw an outline box. + void DrawOutlineBox(int x1, int y1, int x2, int y2, + float r, float g, float b, float a); + + /// Draw a string using GLUT. The string is shown on top of an alpha-blended + /// quad. + void DrawString(string aString, int x, int y); + + /// Draw 2D overlay + void Draw2DOverlay(); + + /// Get 3D coordinate under the mouse cursor. + bool WinCoordTo3DCoord(int x, int y, Vector3 &aPoint); + + /// Update the focus position of the camera. + void UpdateFocus(); + + public: + /// Constructor + GLViewer(); + + /// Destructor + ~GLViewer(); + + /// Open another file + void ActionOpenFile(); + + /// Save the file + void ActionSaveFile(); + + /// Open a texture file + void ActionOpenTexture(); + + /// Toggle wire frame view on/off + void ActionToggleWireframe(); + + /// Fit model to the screen (re-focus) + void ActionFitToScreen(); + + /// Set camera up direction to Y + void ActionCameraUpY(); + + /// Set camera up direction to Z + void ActionCameraUpZ(); + + /// Zoom camera one step in + void ActionZoomIn(); + + /// Zoom camera one step out + void ActionZoomOut(); + + /// Exit program + void ActionExit(); + + /// Show a help dialog + void ActionHelp(); + + /// Redraw function. + void WindowRedraw(void); + + /// Resize function. + void WindowResize(int w, int h); + + /// Mouse click function + void MouseClick(int button, int state, int x, int y); + + /// Mouse move function + void MouseMove(int x, int y); + + /// Keyboard function + void KeyDown(unsigned char key, int x, int y); + + /// Keyboard function (special keys) + void SpecialKeyDown(int key, int x, int y); + + /// Run the application + void Run(int argc, char **argv); +}; + + + +//----------------------------------------------------------------------------- +// A class for OpenGL rendered GUI buttons +//----------------------------------------------------------------------------- + +class GLButton { + private: + // Texture handle + GLuint mTexHandle; + + // Highlight on/off + bool mHighlight; + + public: + /// Constructor. + GLButton() + { + mTexHandle = 0; + mPosX = 0; + mPosY = 0; + mWidth = 32; + mHeight = 32; + mHighlight = false; + mParent = NULL; + } + + /// Destructor. + virtual ~GLButton() + { + if(mTexHandle) + glDeleteTextures(1, &mTexHandle); + } + + /// Set glyph for this button. + void SetGlyph(const unsigned char * aBitmap, int aWidth, int aHeight, + int aComponents) + { + // Update the button size + mWidth = aWidth; + mHeight = aHeight; + + // Upload the texture to OpenGL + if(mTexHandle) + glDeleteTextures(1, &mTexHandle); + glGenTextures(1, &mTexHandle); + if(mTexHandle) + { + // Determine the color format + GLuint format; + if(aComponents == 3) + format = GL_RGB; + else if(aComponents == 4) + format = GL_RGBA; + else + format = GL_LUMINANCE; + + glBindTexture(GL_TEXTURE_2D, mTexHandle); + + if(GLEW_VERSION_1_4) + { + // Generate mipmaps automatically and use them + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexImage2D(GL_TEXTURE_2D, 0, aComponents, aWidth, aHeight, 0, + format, GL_UNSIGNED_BYTE, (GLvoid *) aBitmap); + } + } + + /// Redraw function. + void Redraw() + { + // Set opacity of the icon + if(mHighlight) + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + else + glColor4f(1.0f, 1.0f, 1.0f, 0.7f); + + // Enable texturing + if(mTexHandle) + { + glBindTexture(GL_TEXTURE_2D, mTexHandle); + glEnable(GL_TEXTURE_2D); + } + + // Enable blending + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // Draw the icon as a textured quad + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); + glVertex2i(mPosX, mPosY); + glTexCoord2f(1.0f, 0.0f); + glVertex2i(mPosX + mWidth, mPosY); + glTexCoord2f(1.0f, 1.0f); + glVertex2i(mPosX + mWidth, mPosY + mHeight); + glTexCoord2f(0.0f, 1.0f); + glVertex2i(mPosX, mPosY + mHeight); + glEnd(); + + // We're done + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + } + + /// Mouse move function. The function returns true if the state of the + /// button has changed. + bool MouseMove(int x, int y) + { + bool hit = (x >= mPosX) && (x < (mPosX + mWidth)) && + (y >= mPosY) && (y < (mPosY + mHeight)); + bool changed = (mHighlight != hit); + mHighlight = hit; + return changed; + } + + /// Mouse click function. + bool MouseClick(int aState, int x, int y) + { + bool hit = (x >= mPosX) && (x < (mPosX + mWidth)) && + (y >= mPosY) && (y < (mPosY + mHeight)); + if(hit && (aState == GLUT_DOWN)) + DoAction(); + return hit; + } + + /// The action function that will be performed when a button is clicked. + virtual void DoAction() {} + + GLint mPosX, mPosY; + GLint mWidth, mHeight; + GLViewer * mParent; +}; + + +//----------------------------------------------------------------------------- +// Customized button classes (implementing different actions) +//----------------------------------------------------------------------------- + +class OpenButton: public GLButton { + public: + void DoAction() + { + if(!mParent) + return; + mParent->ActionOpenFile(); + } +}; + +class SaveButton: public GLButton { + public: + void DoAction() + { + if(!mParent) + return; + mParent->ActionSaveFile(); + } +}; + +class OpenTextureButton: public GLButton { + public: + void DoAction() + { + if(!mParent) + return; + mParent->ActionOpenTexture(); + } +}; + +class HelpButton: public GLButton { + public: + void DoAction() + { + if(!mParent) + return; + mParent->ActionHelp(); + } +}; + + +//----------------------------------------------------------------------------- +// GLUT callback function prototypes +//----------------------------------------------------------------------------- + +void GLUTWindowRedraw(void); +void GLUTWindowResize(int w, int h); +void GLUTMouseClick(int button, int state, int x, int y); +void GLUTMouseMove(int x, int y); +void GLUTKeyDown(unsigned char key, int x, int y); +void GLUTSpecialKeyDown(int key, int x, int y); + + +//----------------------------------------------------------------------------- +// GLViewer: OpenGL related functions +//----------------------------------------------------------------------------- + +/// Set up the camera. +void GLViewer::SetupCamera() +{ + if(mMesh) + mMesh->BoundingBox(mAABBMin, mAABBMax); + else + { + mAABBMin = Vector3(-1.0f, -1.0f, -1.0f); + mAABBMax = Vector3(1.0f, 1.0f, 1.0f); + } + mCameraLookAt = (mAABBMax + mAABBMin) * 0.5f; + float delta = (mAABBMax - mAABBMin).Abs(); + if(mCameraUp.z > 0.0f) + mCameraPosition = Vector3(mCameraLookAt.x, + mCameraLookAt.y - 0.8f * delta, + mCameraLookAt.z + 0.2f * delta); + else + mCameraPosition = Vector3(mCameraLookAt.x, + mCameraLookAt.y + 0.2f * delta, + mCameraLookAt.z + 0.8f * delta); +} + +/// Initialize the GLSL shader (requires OpenGL 2.0 or better). +void GLViewer::InitShader() +{ + const GLchar * src[1]; + + // Load vertex shader + mVertShader = glCreateShader(GL_VERTEX_SHADER); + src[0] = (const GLchar *) phongVertSrc; + glShaderSource(mVertShader, 1, src, NULL); + + // Load fragment shader + mFragShader = glCreateShader(GL_FRAGMENT_SHADER); + src[0] = (const GLchar *) phongFragSrc; + glShaderSource(mFragShader, 1, src, NULL); + + int status; + + // Compile the vertex shader + glCompileShader(mVertShader); + glGetShaderiv(mVertShader, GL_COMPILE_STATUS, &status); + if(!status) + throw runtime_error("Could not compile vertex shader."); + + // Compile the fragment shader + glCompileShader(mFragShader); + glGetShaderiv(mFragShader, GL_COMPILE_STATUS, &status); + if(!status) + throw runtime_error("Could not compile fragment shader."); + + // Link the shader program + mShaderProgram = glCreateProgram(); + glAttachShader(mShaderProgram, mVertShader); + glAttachShader(mShaderProgram, mFragShader); + glLinkProgram(mShaderProgram); + glGetProgramiv(mShaderProgram, GL_LINK_STATUS, &status); + if(!status) + throw runtime_error("Could not link shader program."); + + mUseShader = true; +} + +/// Initialize the texture. +void GLViewer::InitTexture(const char * aFileName) +{ + Image image; + + // Load texture from a file + if(aFileName) + { + // Check if file exists, and determine actual file name (relative or absolute) + bool fileExists = false; + string name = string(aFileName); + FILE * inFile = fopen(name.c_str(), "rb"); + if(inFile) + fileExists = true; + else if(mFilePath.size() > 0) + { + // Try the same path as the mesh file + name = mFilePath + string(aFileName); + inFile = fopen(name.c_str(), "rb"); + if(inFile) + fileExists = true; + } + if(inFile) + fclose(inFile); + + if(fileExists) + { + cout << "Loading texture (" << aFileName << ")..." << endl; + try + { + image.LoadFromFile(name.c_str()); + } + catch(exception &e) + { + cout << "Error loading texture: " << e.what() << endl; + image.Clear(); + } + } + } + + // If no texture was loaded + if(image.IsEmpty()) + { + cout << "Loading texture (dummy)..." << endl; + + // Create a default, synthetic texture + image.SetSize(256, 256, 1); + for(int y = 0; y < image.mHeight; ++ y) + { + for(int x = 0; x < image.mWidth; ++ x) + { + if(((x & 0x000f) == 0) || ((y & 0x000f) == 0)) + image.mData[y * image.mWidth + x] = 192; + else + image.mData[y * image.mWidth + x] = 255; + } + } + } + + // Upload the texture to OpenGL + if(!image.IsEmpty()) + glGenTextures(1, &mTexHandle); + else + mTexHandle = 0; + if(mTexHandle) + { + // Determine the color format + GLuint format; + if(image.mComponents == 3) + format = GL_RGB; + else if(image.mComponents == 4) + format = GL_RGBA; + else + format = GL_LUMINANCE; + + glBindTexture(GL_TEXTURE_2D, mTexHandle); + + if(GLEW_VERSION_1_4) + { + // Generate mipmaps automatically and use them + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexImage2D(GL_TEXTURE_2D, 0, image.mComponents, image.mWidth, image.mHeight, 0, format, GL_UNSIGNED_BYTE, (GLvoid *) &image.mData[0]); + } +} + +/// Set up the scene lighting. +void GLViewer::SetupLighting() +{ + GLfloat pos[4], ambient[4], diffuse[4], specular[4]; + + // Set scene lighting properties + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); + glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); + ambient[0] = 0.2; + ambient[1] = 0.2; + ambient[2] = 0.2; + ambient[3] = 1.0; + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); + + // Set-up head light (GL_LIGHT0) + pos[0] = mCameraPosition.x; + pos[1] = mCameraPosition.y; + pos[2] = mCameraPosition.z; + pos[3] = 1.0f; + glLightfv(GL_LIGHT0, GL_POSITION, pos); + ambient[0] = 0.0f; + ambient[1] = 0.0f; + ambient[2] = 0.0f; + ambient[3] = 1.0f; + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); + diffuse[0] = 0.8f; + diffuse[1] = 0.8f; + diffuse[2] = 0.8f; + diffuse[3] = 1.0f; + glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); + specular[0] = 1.0f; + specular[1] = 1.0f; + specular[2] = 1.0f; + specular[3] = 1.0f; + glLightfv(GL_LIGHT0, GL_SPECULAR, specular); + glEnable(GL_LIGHT0); +} + +/// Set up the material. +void GLViewer::SetupMaterial() +{ + GLfloat specular[4], emission[4]; + + // Set up the material + specular[0] = 0.3f; + specular[1] = 0.3f; + specular[2] = 0.3f; + specular[3] = 1.0f; + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); + emission[0] = 0.0f; + emission[1] = 0.0f; + emission[2] = 0.0f; + emission[3] = 1.0f; + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 40.0f); + + // Use color material for the diffuse and ambient components + glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); + glEnable(GL_COLOR_MATERIAL); +} + +/// Draw a mesh +void GLViewer::DrawMesh(Mesh * aMesh) +{ + // We always have vertices + glVertexPointer(3, GL_FLOAT, 0, &aMesh->mVertices[0]); + glEnableClientState(GL_VERTEX_ARRAY); + + // Do we have normals? + if(aMesh->mNormals.size() == aMesh->mVertices.size()) + { + glNormalPointer(GL_FLOAT, 0, &aMesh->mNormals[0]); + glEnableClientState(GL_NORMAL_ARRAY); + } + + // Do we have texture coordinates? + if(aMesh->mTexCoords.size() == aMesh->mVertices.size()) + { + glTexCoordPointer(2, GL_FLOAT, 0, &aMesh->mTexCoords[0]); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + } + + // Do we have colors? + if(aMesh->mColors.size() == aMesh->mVertices.size()) + { + glColorPointer(4, GL_FLOAT, 0, &aMesh->mColors[0]); + glEnableClientState(GL_COLOR_ARRAY); + } + + // Use glDrawElements to draw the triangles... + glShadeModel(GL_SMOOTH); + if(GLEW_VERSION_1_2) + glDrawRangeElements(GL_TRIANGLES, 0, aMesh->mVertices.size() - 1, + aMesh->mIndices.size(), GL_UNSIGNED_INT, + &aMesh->mIndices[0]); + else + glDrawElements(GL_TRIANGLES, aMesh->mIndices.size(), GL_UNSIGNED_INT, + &aMesh->mIndices[0]); + + // We do not use the client state anymore... + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); +} + +// Load a file to the mesh +void GLViewer::LoadFile(const char * aFileName, const char * aOverrideTexture) +{ + // Get the file size + ifstream f(aFileName, ios::in | ios::binary); + if(f.fail()) + throw runtime_error("Unable to open the file."); + f.seekg(0, ios_base::end); + long tmpFileSize = (long) f.tellg(); + f.close(); + + // Load the mesh + cout << "Loading " << aFileName << "..." << flush; + mTimer.Push(); + Mesh * newMesh = new Mesh(); + try + { + ImportMesh(aFileName, newMesh); + } + catch(exception &e) + { + delete newMesh; + throw; + } + if(mMesh) + delete mMesh; + mMesh = newMesh; + cout << "done (" << int(mTimer.PopDelta() * 1000.0 + 0.5) << " ms)" << endl; + + // Get the file name (excluding the path), and the path (excluding the file name) + mFileName = ExtractFileName(string(aFileName)); + mFilePath = ExtractFilePath(string(aFileName)); + + // The temporary file size is now the official file size... + mFileSize = tmpFileSize; + + // Set window title + string windowCaption = string("OpenCTM viewer - ") + mFileName; + glutSetWindowTitle(windowCaption.c_str()); + + // If the file did not contain any normals, calculate them now... + if(mMesh->mNormals.size() != mMesh->mVertices.size()) + { + cout << "Calculating normals..." << flush; + mTimer.Push(); + mMesh->CalculateNormals(); + cout << "done (" << int(mTimer.PopDelta() * 1000.0 + 0.5) << " ms)" << endl; + } + + // Load the texture + if(mTexHandle) + glDeleteTextures(1, &mTexHandle); + mTexHandle = 0; + if(mMesh->mTexCoords.size() == mMesh->mVertices.size()) + { + string texFileName = mMesh->mTexFileName; + if(aOverrideTexture) + texFileName = string(aOverrideTexture); + if(texFileName.size() > 0) + InitTexture(texFileName.c_str()); + else + InitTexture(0); + } + + // Setup texture parameters for the shader + if(mUseShader) + { + glUseProgram(mShaderProgram); + + // Set the uUseTexture uniform + GLint useTexLoc = glGetUniformLocation(mShaderProgram, "uUseTexture"); + if(useTexLoc >= 0) + glUniform1i(useTexLoc, glIsTexture(mTexHandle)); + + // Set the uTex uniform + GLint texLoc = glGetUniformLocation(mShaderProgram, "uTex"); + if(texLoc >= 0) + glUniform1i(texLoc, 0); + + glUseProgram(0); + } + + // Load the mesh into a displaylist + if(mDisplayList) + glDeleteLists(mDisplayList, 1); + mDisplayList = glGenLists(1); + glNewList(mDisplayList, GL_COMPILE); + DrawMesh(mMesh); + glEndList(); + + // Init the camera for the new mesh + mCameraUp = Vector3(0.0f, 0.0f, 1.0f); + SetupCamera(); +} + +// Load a texture file +void GLViewer::LoadTexture(const char * aFileName) +{ + // Load the texture + if(mTexHandle) + glDeleteTextures(1, &mTexHandle); + mTexHandle = 0; + if(mMesh->mTexCoords.size() == mMesh->mVertices.size()) + InitTexture(aFileName); + + // Setup texture parameters for the shader + if(mUseShader) + { + glUseProgram(mShaderProgram); + + // Set the uUseTexture uniform + GLint useTexLoc = glGetUniformLocation(mShaderProgram, "uUseTexture"); + if(useTexLoc >= 0) + glUniform1i(useTexLoc, glIsTexture(mTexHandle)); + + // Set the uTex uniform + GLint texLoc = glGetUniformLocation(mShaderProgram, "uTex"); + if(texLoc >= 0) + glUniform1i(texLoc, 0); + + glUseProgram(0); + } +} + +// Draw an outline box. +void GLViewer::DrawOutlineBox(int x1, int y1, int x2, int y2, + float r, float g, float b, float a) +{ + // Draw a blended box + // Note: We add (1,1) to the (x2,y2) corner to cover the entire pixel range + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBegin(GL_QUADS); + glColor4f(r, g, b, 0.7f * a); + glVertex2i(x1, y1); + glVertex2i(x2+1, y1); + glColor4f(r, g, b, 0.7f * a + 0.3f); + glVertex2i(x2+1, y2+1); + glVertex2i(x1, y2+1); + glEnd(); + glDisable(GL_BLEND); + + // Draw a solid outline + glPushMatrix(); + glTranslatef(0.5f, 0.5f, 0.0f); // Compensate for 0.5 pixel center offset + glColor4f(r, g, b, 1.0f); + glBegin(GL_LINE_LOOP); + glVertex2i(x1, y1-1); + glVertex2i(x2, y1-1); + glVertex2i(x2+1, y1); + glVertex2i(x2+1, y2); + glVertex2i(x2, y2+1); + glVertex2i(x1, y2+1); + glVertex2i(x1-1, y2); + glVertex2i(x1-1, y1); + glEnd(); + glPopMatrix(); +} + +// Draw a string using GLUT. The string is shown on top of an alpha-blended +// quad. +void GLViewer::DrawString(string aString, int x, int y) +{ + // Calculate the size of the string box + int x0 = x, y0 = y; + int x1 = x0, y1 = y0; + int x2 = x0, y2 = y0; + for(unsigned int i = 0; i < aString.size(); ++ i) + { + int c = (int) aString[i]; + if(c == (int) 10) + { + x2 = x; + y2 += 13; + } + else if(c != (int) 13) + { + x2 += glutBitmapWidth(GLUT_BITMAP_8_BY_13, c); + if(x2 > x1) x1 = x2; + } + } + y1 = y2 + 13; + + // Draw a alpha blended box + DrawOutlineBox(x0-4, y0-3, x1+4, y1+4, 0.3f, 0.3f, 0.3f, 0.6f); + + // Print the text + glColor3f(1.0f, 1.0f, 1.0f); + x2 = x; + y2 = y + 13; + for(unsigned int i = 0; i < aString.size(); ++ i) + { + int c = (int) aString[i]; + if(c == (int) 10) + { + x2 = x; + y2 += 13; + } + else if(c != (int) 13) + { + glRasterPos2i(x2, y2); + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, c); + x2 += glutBitmapWidth(GLUT_BITMAP_8_BY_13, c); + } + } +} + +// Draw 2D overlay +void GLViewer::Draw2DOverlay() +{ + // Setup the matrices for a width x height 2D screen + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0.0, (double) mWidth, (double) mHeight, 0.0, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + // Setup the rendering pipeline for 2D rendering + glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); + + // Render an info string + if(mMesh) + { + stringstream s; + s << mFileName << " (" << (mFileSize + 512) / 1024 << "KB)" << endl; + s << mMesh->mVertices.size() << " vertices" << endl; + s << mMesh->mIndices.size() / 3 << " triangles"; + DrawString(s.str(), 10, mHeight - 50); + } + + // Calculate buttons bounding box, and draw it as an outline box + int x1 = 9999, y1 = 9999, x2 = 0, y2 = 0; + for(list::iterator b = mButtons.begin(); b != mButtons.end(); ++ b) + { + if((*b)->mPosX < x1) x1 = (*b)->mPosX; + if(((*b)->mPosX + (*b)->mWidth) > x2) x2 = (*b)->mPosX + (*b)->mWidth; + if((*b)->mPosY < y1) y1 = (*b)->mPosY; + if(((*b)->mPosY + (*b)->mHeight) > y2) y2 = (*b)->mPosY + (*b)->mHeight; + } + DrawOutlineBox(x1-5, y1-5, x2+5, y2+5, 0.3f, 0.3f, 0.3f, 0.6f); + + // Render all the buttons (last = on top) + for(list::iterator b = mButtons.begin(); b != mButtons.end(); ++ b) + (*b)->Redraw(); +} + +/// Get 3D coordinate under the mouse cursor. +bool GLViewer::WinCoordTo3DCoord(int x, int y, Vector3 &aPoint) +{ + // Read back the depth value at at (x, y) + GLfloat z = 0.0f; + glReadPixels(x, mHeight - y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, (GLvoid *) &z); + if((z > 0.0f) && (z < 1.0f)) + { + // Convert the window coordinate to space coordinates + GLdouble objX, objY, objZ; + gluUnProject((GLdouble) x, (GLdouble) (mHeight - y), (GLdouble) z, + mModelviewMatrix, mProjectionMatrix, mViewport, + &objX, &objY, &objZ); + aPoint = Vector3((float) objX, (float) objY, (float) objZ); + return true; + } + else + return false; +} + +/// Update the focus position of the camera. +void GLViewer::UpdateFocus() +{ + double w = (mTimer.GetTime() - mFocusStartTime) / (mFocusEndTime - mFocusStartTime); + Vector3 dir = Normalize(mCameraPosition - mCameraLookAt); + if(w < 1.0) + { + w = pow(w, 0.2); + mCameraLookAt = mFocusStartPos + (mFocusEndPos - mFocusStartPos) * w; + mCameraPosition = mCameraLookAt + dir * (mFocusStartDistance + (mFocusEndDistance - mFocusStartDistance) * w); + } + else + { + mCameraLookAt = mFocusEndPos; + mCameraPosition = mCameraLookAt + dir * mFocusEndDistance; + mFocusing = false; + } + glutPostRedisplay(); +} + + +//----------------------------------------------------------------------------- +// Actions (user activated functions) +//----------------------------------------------------------------------------- + +/// Open another file +void GLViewer::ActionOpenFile() +{ + SysOpenDialog od; + od.mFilters.push_back(string("All supported 3D files|*.ctm;*.ply;*.stl;*.3ds;*.dae;*.obj;*.lwo;*.off")); + od.mFilters.push_back(string("OpenCTM (.ctm)|*.ctm")); + od.mFilters.push_back(string("Stanford triangle format (.ply)|*.ply")); + od.mFilters.push_back(string("Stereolitography (.stl)|*.stl")); + od.mFilters.push_back(string("3D Studio (.3ds)|*.3ds")); + od.mFilters.push_back(string("COLLADA (.dae)|*.dae")); + od.mFilters.push_back(string("Wavefront geometry file (.obj)|*.obj")); + od.mFilters.push_back(string("LightWave object (.lwo)|*.lwo")); + od.mFilters.push_back(string("Geomview object file format (.off)|*.off")); + if(od.Show()) + { + try + { + LoadFile(od.mFileName.c_str(), NULL); + glutPostRedisplay(); + } + catch(exception &e) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Error"; + mb.mText = string(e.what()); + mb.Show(); + } + } +} + +/// Save the file +void GLViewer::ActionSaveFile() +{ + if(!mMesh) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Save File"; + mb.mText = string("No mesh has been loaded."); + mb.Show(); + return; + } + + SysSaveDialog sd; + sd.mFilters.push_back(string("All files|*")); + sd.mFilters.push_back(string("OpenCTM (.ctm)|*.ctm")); + sd.mFilters.push_back(string("Stanford triangle format (.ply)|*.ply")); + sd.mFilters.push_back(string("Stereolitography (.stl)|*.stl")); + sd.mFilters.push_back(string("3D Studio (.3ds)|*.3ds")); + sd.mFilters.push_back(string("COLLADA (.dae)|*.dae")); + sd.mFilters.push_back(string("Wavefront geometry file (.obj)|*.obj")); + sd.mFilters.push_back(string("LightWave object (.lwo)|*.lwo")); + sd.mFilters.push_back(string("Geomview object file format (.off)|*.off")); + sd.mFilters.push_back(string("VRML 2.0 (.wrl)|*.wrl")); + sd.mFileName = mFileName; + if(sd.Show()) + { + try + { + Options opt; + + // Do not export normals that do not come from the original file + if(!mMesh->mOriginalNormals) + opt.mNoNormals = true; + + // Export the mesh + ExportMesh(sd.mFileName.c_str(), mMesh, opt); + } + catch(exception &e) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Error"; + mb.mText = string(e.what()); + mb.Show(); + } + } +} + +/// Open a texture file +void GLViewer::ActionOpenTexture() +{ + if(!mMesh || (mMesh->mTexCoords.size() < 1)) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Open Texture File"; + mb.mText = string("This mesh does not have any texture coordinates."); + mb.Show(); + return; + } + + SysOpenDialog od; + od.mCaption = string("Open Texture File"); + od.mFilters.push_back(string("All supported texture files|*.jpg;*.jpeg;*.png")); + od.mFilters.push_back(string("JPEG|*.jpg;*.jpeg")); + od.mFilters.push_back(string("PNG|*.png")); + if(od.Show()) + { + try + { + LoadTexture(od.mFileName.c_str()); + mMesh->mTexFileName = ExtractFileName(od.mFileName); + glutPostRedisplay(); + } + catch(exception &e) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Error"; + mb.mText = string(e.what()); + mb.Show(); + } + } +} + +/// Toggle wire frame view on/off +void GLViewer::ActionToggleWireframe() +{ + if(mPolyMode == GL_LINE) + mPolyMode = GL_FILL; + else + mPolyMode = GL_LINE; + glutPostRedisplay(); +} + +/// Fit model to the screen (re-focus) +void GLViewer::ActionFitToScreen() +{ + double now = mTimer.GetTime(); + mFocusStartTime = now; + mFocusEndTime = now + FOCUS_TIME; + mFocusStartPos = mCameraLookAt; + mFocusStartDistance = (mCameraLookAt - mCameraPosition).Abs(); + mFocusEndPos = (mAABBMax + mAABBMin) * 0.5f; + mFocusEndDistance = 0.825 * (mAABBMax - mAABBMin).Abs(); + mFocusing = true; + UpdateFocus(); + glutPostRedisplay(); +} + +/// Set camera up direction to Y +void GLViewer::ActionCameraUpY() +{ + mCameraUp = Vector3(0.0f, 1.0f, 0.0f); + SetupCamera(); + glutPostRedisplay(); +} + +/// Set camera up direction to Z +void GLViewer::ActionCameraUpZ() +{ + mCameraUp = Vector3(0.0f, 0.0f, 1.0f); + SetupCamera(); + glutPostRedisplay(); +} + +/// Zoom camera one step in +void GLViewer::ActionZoomIn() +{ + double now = mTimer.GetTime(); + mFocusStartTime = now; + mFocusEndTime = now + FOCUS_TIME; + mFocusStartPos = mCameraLookAt; + mFocusStartDistance = (mCameraLookAt - mCameraPosition).Abs(); + mFocusEndPos = mCameraLookAt; + mFocusEndDistance = (1.0/1.5) * mFocusStartDistance; + mFocusing = true; + UpdateFocus(); + glutPostRedisplay(); +} + +/// Zoom camera one step out +void GLViewer::ActionZoomOut() +{ + double now = mTimer.GetTime(); + mFocusStartTime = now; + mFocusEndTime = now + FOCUS_TIME; + mFocusStartPos = mCameraLookAt; + mFocusStartDistance = (mCameraLookAt - mCameraPosition).Abs(); + mFocusEndPos = mCameraLookAt; + mFocusEndDistance = 1.5 * mFocusStartDistance; + mFocusing = true; + UpdateFocus(); + glutPostRedisplay(); +} + +/// Exit program +void GLViewer::ActionExit() +{ + // Note: In freeglut you can do glutLeaveMainLoop(), which is more graceful + exit(0); +} + +/// Show a help dialog +void GLViewer::ActionHelp() +{ + stringstream helpText; + helpText << "ctmviewer - OpenCTM file viewer" << endl; + helpText << "Copyright (c) 2009-2010 Marcus Geelnard" << endl << endl; + helpText << "Keyboard actions:" << endl; + helpText << " W - Toggle wire frame view on/off" << endl; + helpText << " F - Fit model to the screen" << endl; + helpText << " Y - Set Y as the up axis (change camera view)" << endl; + helpText << " Z - Set Z as the up axis (change camera view)" << endl; + helpText << " +/- - Zoom in/out with the camera" << endl; + helpText << " ESC - Exit program" << endl << endl; + helpText << "Mouse control:" << endl; + helpText << " Left button - Rotate camera" << endl; + helpText << " Middle button or wheel - Zoom camera" << endl; + helpText << " Right button - Pan camera" << endl; + helpText << " Double click - Focus on indicated surface"; + + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtInformation; + mb.mCaption = "Help"; + mb.mText = helpText.str(); + mb.Show(); +} + + +//----------------------------------------------------------------------------- +// GLUT callback functions +//----------------------------------------------------------------------------- + +/// Redraw function. +void GLViewer::WindowRedraw(void) +{ + // Get buffer properties + glGetIntegerv(GL_DEPTH_BITS, &mDepthBufferResolution); + + // Set the viewport to be the entire window + glViewport(0, 0, mWidth, mHeight); + + // Clear the buffer(s) + glClear(GL_DEPTH_BUFFER_BIT); + + // Draw a gradient background + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); + glBegin(GL_QUADS); + glColor3f(0.4f, 0.5f, 0.7f); + glVertex3f(-1.0f, -1.0f, 0.5f); + glColor3f(0.3f, 0.4f, 0.7f); + glVertex3f(1.0f, -1.0f, 0.5f); + glColor3f(0.1f, 0.1f, 0.2f); + glVertex3f(1.0f, 1.0f, 0.5f); + glColor3f(0.1f, 0.15f, 0.24f); + glVertex3f(-1.0f, 1.0f, 0.5f); + glEnd(); + + // Calculate screen ratio (width / height) + float ratio; + if(mHeight == 0) + ratio = 1.0f; + else + ratio = (float) mWidth / (float) mHeight; + + // Calculate optimal near and far Z clipping planes + float farZ = (mAABBMax - mAABBMin).Abs() + + (mCameraPosition - mCameraLookAt).Abs(); + if(farZ < 1e-20f) + farZ = 1e-20f; + float nearZ; + if(mDepthBufferResolution >= 24) + nearZ = 0.0001f * farZ; + else + nearZ = 0.01f * farZ; + + // Set up perspective projection + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(60.0f, ratio, nearZ, farZ); + + // Set up the camera modelview matrix + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(mCameraPosition.x, mCameraPosition.y, mCameraPosition.z, + mCameraLookAt.x, mCameraLookAt.y, mCameraLookAt.z, + mCameraUp.x, mCameraUp.y, mCameraUp.z); + + // Read back camera matrices + glGetDoublev(GL_MODELVIEW_MATRIX, mModelviewMatrix); + glGetDoublev(GL_PROJECTION_MATRIX, mProjectionMatrix); + glGetIntegerv(GL_VIEWPORT, mViewport); + + // Set up the lights + SetupLighting(); + + // Enable material shader + if(mUseShader) + glUseProgram(mShaderProgram); + else + glEnable(GL_LIGHTING); + + // Draw the mesh + SetupMaterial(); + glEnable(GL_DEPTH_TEST); + glPolygonMode(GL_FRONT_AND_BACK, mPolyMode); + if(mTexHandle) + { + glBindTexture(GL_TEXTURE_2D, mTexHandle); + glEnable(GL_TEXTURE_2D); + glColor3f(1.0f, 1.0f, 1.0f); + } + else + glColor3f(0.9f, 0.86f, 0.7f); + if(mDisplayList) + glCallList(mDisplayList); + glDisable(GL_TEXTURE_2D); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + // Disable material shader + if(mUseShader) + glUseProgram(0); + else + glDisable(GL_LIGHTING); + + // Draw 2D overlay (information text etc) + Draw2DOverlay(); + + // Swap buffers + glutSwapBuffers(); + + // Focusing? + if(mFocusing) + { + UpdateFocus(); + glutPostRedisplay(); + } +} + +/// Resize function. +void GLViewer::WindowResize(int w, int h) +{ + // Store the new window size + mWidth = w; + mHeight = h; +} + +/// Mouse click function +void GLViewer::MouseClick(int button, int state, int x, int y) +{ + bool clickConsumed = false; + if(button == GLUT_LEFT_BUTTON) + { + // Check if any of the GUI buttons were clicked + for(list::iterator b = mButtons.begin(); b != mButtons.end(); ++ b) + { + if((*b)->MouseClick(state, x, y)) + clickConsumed = true; + } + if(!clickConsumed) + { + if(state == GLUT_DOWN) + { + double now = mTimer.GetTime(); + if((now - mLastClickTime) < DOUBLE_CLICK_TIME) + { + // Double click occured + Vector3 mouseCoord3D; + if(WinCoordTo3DCoord(x, y, mouseCoord3D)) + { + mFocusStartTime = now; + mFocusEndTime = now + FOCUS_TIME; + mFocusStartPos = mCameraLookAt; + mFocusEndPos = mouseCoord3D; + mFocusStartDistance = (mCameraLookAt - mCameraPosition).Abs(); + mFocusEndDistance = mFocusStartDistance; + mFocusing = true; + } + mLastClickTime = -1000.0; + } + else + { + // Single click occured + mMouseRotate = true; + mLastClickTime = now; + } + } + else if(state == GLUT_UP) + mMouseRotate = false; + } + } + else if(button == GLUT_MIDDLE_BUTTON) + { + if(state == GLUT_DOWN) + mMouseZoom = true; + else if(state == GLUT_UP) + mMouseZoom = false; + } + else if(button == GLUT_RIGHT_BUTTON) + { + if(state == GLUT_DOWN) + mMousePan = true; + else if(state == GLUT_UP) + mMousePan = false; + } + else if(button == 3) // Mouse wheel up on some systems + { + if(state == GLUT_DOWN) + ActionZoomIn(); + } + else if(button == 4) // Mouse wheel down on some systems + { + if(state == GLUT_DOWN) + ActionZoomOut(); + } + mOldMouseX = x; + mOldMouseY = y; + + // Focusing? + if(mFocusing) + { + UpdateFocus(); + glutPostRedisplay(); + } +} + +/// Mouse move function +void GLViewer::MouseMove(int x, int y) +{ + bool needsRedraw = false; + + float deltaX = (float) x - (float) mOldMouseX; + float deltaY = (float) y - (float) mOldMouseY; + mOldMouseX = x; + mOldMouseY = y; + + if(mMouseRotate) + { + // Calculate delta angles + float scale = 3.0f; + if(mHeight > 0) + scale /= (float) mHeight; + float deltaTheta = -scale * deltaX; + float deltaPhi = -scale * deltaY; + + // Adjust camera angles + Vector3 viewVector = mCameraPosition - mCameraLookAt; + float r = sqrtf(viewVector.x * viewVector.x + + viewVector.y * viewVector.y + + viewVector.z * viewVector.z); + float phi, theta; + if(r > 1e-20f) + { + if(mCameraUp.z > 0.0f) + { + phi = acosf(viewVector.z / r); + theta = atan2f(viewVector.y, viewVector.x); + } + else + { + phi = acosf(viewVector.y / r); + theta = atan2f(-viewVector.z, viewVector.x); + } + } + else + { + if(mCameraUp.z > 0.0f) + phi = viewVector.z > 0.0f ? 0.05f * PI : 0.95f * PI; + else + phi = viewVector.y > 0.0f ? 0.05f * PI : 0.95f * PI; + theta = 0.0f; + } + phi += deltaPhi; + theta += deltaTheta; + if(phi > (0.95f * PI)) + phi = 0.95f * PI; + else if(phi < (0.05f * PI)) + phi = 0.05f * PI; + + // Update the camera position + if(mCameraUp.z > 0.0f) + { + viewVector.x = r * cos(theta) * sin(phi); + viewVector.y = r * sin(theta) * sin(phi); + viewVector.z = r * cos(phi); + } + else + { + viewVector.x = r * cos(theta) * sin(phi); + viewVector.y = r * cos(phi); + viewVector.z = -r * sin(theta) * sin(phi); + } + mCameraPosition = mCameraLookAt + viewVector; + + needsRedraw = true; + } + else if(mMouseZoom) + { + // Calculate delta angles + float scale = 3.0f; + if(mHeight > 0) + scale /= (float) mHeight; + float zoom = scale * deltaY; + + // Adjust camera zoom + Vector3 viewVector = mCameraPosition - mCameraLookAt; + viewVector = viewVector * powf(2.0f, zoom); + + // Update the camera position + mCameraPosition = mCameraLookAt + viewVector; + + needsRedraw = true; + } + else if(mMousePan) + { + // Calculate delta movement + float scale = 1.0f * (mCameraPosition - mCameraLookAt).Abs(); + if(mHeight > 0) + scale /= (float) mHeight; + float panX = scale * deltaX; + float panY = scale * deltaY; + + // Calculate camera movement + Vector3 viewDir = Normalize(mCameraPosition - mCameraLookAt); + Vector3 rightDir = Normalize(Cross(viewDir, mCameraUp)); + Vector3 upDir = Normalize(Cross(rightDir, viewDir)); + Vector3 moveDelta = rightDir * panX + upDir * panY; + + // Update the camera position + mCameraPosition += moveDelta; + mCameraLookAt += moveDelta; + + needsRedraw = true; + } + else + { + // Call mouse move for all the GUI buttons + for(list::iterator b = mButtons.begin(); b != mButtons.end(); ++ b) + { + if((*b)->MouseMove(x, y)) + needsRedraw = true; + } + } + + // Redraw? + if(needsRedraw) + glutPostRedisplay(); +} + +/// Keyboard function +void GLViewer::KeyDown(unsigned char key, int x, int y) +{ + if(key == 15) // CTRL+O + ActionOpenFile(); + else if(key == 19) // CTRL+S + ActionSaveFile(); + else if(key == 'w') + ActionToggleWireframe(); + else if(key == 'f') + ActionFitToScreen(); + else if(key == 'y') + ActionCameraUpY(); + else if(key == 'z') + ActionCameraUpZ(); + else if(key == '+') + ActionZoomIn(); + else if(key == '-') + ActionZoomOut(); + else if(key == 27) // ESC + ActionExit(); +} + +/// Keyboard function (special keys) +void GLViewer::SpecialKeyDown(int key, int x, int y) +{ + if(key == GLUT_KEY_F1) + ActionHelp(); +} + + +//----------------------------------------------------------------------------- +// Application main code +//----------------------------------------------------------------------------- + +/// Constructor +GLViewer::GLViewer() +{ + // Clear internal state + mFileName = ""; + mFilePath = ""; + mFileSize = 0; + mWidth = 1; + mHeight = 1; + mDepthBufferResolution = 16; + mOldMouseX = 0; + mOldMouseY = 0; + mMouseRotate = false; + mMouseZoom = false; + mMousePan = false; + mCameraUp = Vector3(0.0f, 0.0f, 1.0f); + mFocusStartPos = Vector3(0.0f, 0.0f, 0.0f); + mFocusEndPos = Vector3(0.0f, 0.0f, 0.0f); + mFocusStartTime = 0.0; + mFocusEndTime = 0.0; + mFocusStartDistance = 1.0; + mFocusEndDistance = 1.0; + mFocusing = false; + mLastClickTime = -1000.0; + mDisplayList = 0; + mPolyMode = GL_FILL; + mTexHandle = 0; + mUseShader = false; + mShaderProgram = 0; + mVertShader = 0; + mFragShader = 0; + mMesh = NULL; +} + +/// Destructor +GLViewer::~GLViewer() +{ + // Free all GUI buttons + for(list::iterator b = mButtons.begin(); b != mButtons.end(); ++ b) + delete (*b); + + // Free the mesh + if(mMesh) + delete mMesh; +} + +/// Run the application +void GLViewer::Run(int argc, char **argv) +{ + try + { + // Init GLUT + glutInit(&argc, argv); + + // Create the glut window + glutInitWindowSize(640, 480); + glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); + glutCreateWindow("OpenCTM viewer"); + + // Init GLEW (for OpenGL 2.x support) + if(glewInit() != GLEW_OK) + throw runtime_error("Unable to initialize GLEW."); + + // Load the phong shader, if we can + if(GLEW_VERSION_2_0) + InitShader(); + else if(GLEW_VERSION_1_2) + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); + + // Set the GLUT callback functions (these are bridged to the corresponding + // class methods) + glutReshapeFunc(GLUTWindowResize); + glutDisplayFunc(GLUTWindowRedraw); + glutMouseFunc(GLUTMouseClick); + glutMotionFunc(GLUTMouseMove); + glutPassiveMotionFunc(GLUTMouseMove); + glutKeyboardFunc(GLUTKeyDown); + glutSpecialFunc(GLUTSpecialKeyDown); + + // Create GUI buttons + GLButton * b1 = new OpenButton(); + mButtons.push_back(b1); + b1->mParent = this; + b1->SetGlyph(icon_open, 32, 32, 4); + b1->mPosX = 12; + b1->mPosY = 10; + GLButton * b2 = new SaveButton(); + mButtons.push_back(b2); + b2->mParent = this; + b2->SetGlyph(icon_save, 32, 32, 4); + b2->mPosX = 60; + b2->mPosY = 10; + GLButton * b3 = new OpenTextureButton(); + mButtons.push_back(b3); + b3->mParent = this; + b3->SetGlyph(icon_texture, 32, 32, 4); + b3->mPosX = 108; + b3->mPosY = 10; + GLButton * b4 = new HelpButton(); + mButtons.push_back(b4); + b4->mParent = this; + b4->SetGlyph(icon_help, 32, 32, 4); + b4->mPosX = 156; + b4->mPosY = 10; + + // Load the file + if(argc >= 2) + { + const char * overrideTexName = NULL; + if(argc >= 3) + overrideTexName = argv[2]; + LoadFile(argv[1], overrideTexName); + } + + // Enter the main loop + glutMainLoop(); + } + catch(ctm_error &e) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Error"; + mb.mText = string("OpenCTM error: ") + string(e.what()); + mb.Show(); + } + catch(exception &e) + { + SysMessageBox mb; + mb.mMessageType = SysMessageBox::mtError; + mb.mCaption = "Error"; + mb.mText = string(e.what()); + mb.Show(); + } + cout << endl; +} + + +//----------------------------------------------------------------------------- +// Bridge GLUT callback functions to class methods +//----------------------------------------------------------------------------- + +// NOTE: This is just a hack to be able to reference the application class +// object from the GLUT callback functions, since there is no way (afaik) to +// pass user data (i.e. the object reference) through GLUT... +static GLViewer * gGLViewer = NULL; + +/// Redraw function. +void GLUTWindowRedraw(void) +{ + if(gGLViewer) + gGLViewer->WindowRedraw(); +} + +/// Resize function. +void GLUTWindowResize(int w, int h) +{ + if(gGLViewer) + gGLViewer->WindowResize(w, h); +} + +/// Mouse click function +void GLUTMouseClick(int button, int state, int x, int y) +{ + if(gGLViewer) + gGLViewer->MouseClick(button, state, x, y); +} + +/// Mouse move function +void GLUTMouseMove(int x, int y) +{ + if(gGLViewer) + gGLViewer->MouseMove(x, y); +} + +/// Keyboard function +void GLUTKeyDown(unsigned char key, int x, int y) +{ + if(gGLViewer) + gGLViewer->KeyDown(key, x, y); +} + +/// Keyboard function (special keys) +void GLUTSpecialKeyDown(int key, int x, int y) +{ + if(gGLViewer) + gGLViewer->SpecialKeyDown(key, x, y); +} + + +//----------------------------------------------------------------------------- +// Program startup +//----------------------------------------------------------------------------- + +/// Program entry. +int main(int argc, char **argv) +{ + // Run the application class + gGLViewer = new GLViewer; + gGLViewer->Run(argc, argv); + delete gGLViewer; + gGLViewer = NULL; + + return 0; +} diff --git a/3rdparty/openctm/tools/ctmviewer.exe.manifest b/3rdparty/openctm/tools/ctmviewer.exe.manifest new file mode 100644 index 000000000..44de30a69 --- /dev/null +++ b/3rdparty/openctm/tools/ctmviewer.exe.manifest @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/3rdparty/openctm/tools/ctmviewer.rc b/3rdparty/openctm/tools/ctmviewer.rc new file mode 100644 index 000000000..e4b7221b5 --- /dev/null +++ b/3rdparty/openctm/tools/ctmviewer.rc @@ -0,0 +1,29 @@ +GLUT_ICON ICON "icons\\openctm.ico" + +1 VERSIONINFO + FILEVERSION 1,0,3,0 + PRODUCTVERSION 1,0,3,0 + FILEOS 0x04 + FILETYPE 0x01 + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "ProductVersion", "1.0.3.0" + VALUE "FileVersion", "1.0.3.0" + VALUE "FileDescription", "OpenCTM 3D file viewer" + VALUE "ProductName", "ctmviewer" + VALUE "OriginalFilename", "ctmviewer.exe" + VALUE "LegalCopyright", "© 2009-2010 Marcus Geelnard" + VALUE "License", "This software is released under the zlib/libpng license." + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END + END + +1 24 "ctmviewer.exe.manifest" diff --git a/3rdparty/openctm/tools/dae.cpp b/3rdparty/openctm/tools/dae.cpp new file mode 100644 index 000000000..d4c4521d1 --- /dev/null +++ b/3rdparty/openctm/tools/dae.cpp @@ -0,0 +1,725 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: dae.cpp +// Description: Implementation of the DAE (Collada) file format +// importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include +#include "dae.h" + +#if !defined(WIN32) && defined(_WIN32) +#define WIN32 +#endif +#ifdef WIN32 +#include +#endif + + +using namespace std; + +enum Axis +{ + X,Y,Z,S,T +}; + +class Source +{ +public: + Source() : stride(0), count(0), offset(0) + { + } + + Source(const Source& copy) : array(copy.array), stride(copy.stride), count(copy.count), offset(copy.offset), params(copy.params) + { + } + + vector array; + size_t stride, count, offset; + vector params; + +}; + +class Indexes { +public: + Indexes(size_t _vertIndex = 0, size_t _normalIndex = 0, size_t _texcoordIndex = 0) : vertIndex(_vertIndex), normalIndex(_normalIndex), texcoordIndex(_texcoordIndex) { + + } + + Indexes(const Indexes& copy) : vertIndex(copy.vertIndex), normalIndex(copy.normalIndex), texcoordIndex(copy.texcoordIndex) { + + } + + size_t vertIndex, normalIndex, texcoordIndex; +}; + +enum Semantic +{ + VERTEX, + NORMAL, + TEXCOORD, + POSITIONS, + UNKNOWN +}; + +struct Input +{ + string source; + Semantic semantic; + size_t offset; +}; + +Semantic ToSemantic(const string& semantic) +{ + if (semantic == "VERTEX") + return VERTEX; + else if (semantic == "NORMAL") + return NORMAL; + else if (semantic == "TEXCOORD") + return TEXCOORD; + else if (semantic == "POSITIONS") + return POSITIONS; + else + return UNKNOWN; +} + +void ReadIndexArray(TiXmlElement* p , vector& array) +{ + istringstream strStream (p->GetText()); + char val[100]; + size_t value = 0; + while (!strStream.eof()) { + strStream >> val; + value = atoi(val); + array.push_back(value); + } +} + +void ReadInputs(TiXmlElement* rootElem,bool& hasVerts,bool& hasNormals,bool& hasTexcoords, string& vertSource,string& normalSource,string& texcoordSource, vector& inputs) { + TiXmlHandle root(rootElem); + for(TiXmlElement* inputElem = root.FirstChild( "input" ).ToElement();inputElem; inputElem = inputElem->NextSiblingElement()) + { + if(string(inputElem->Value()) != "input") + continue; + //TiXmlHandle input(inputElem); + inputs.push_back(Input()); + inputs.back().source = string(inputElem->Attribute("source")).substr(1); + inputs.back().offset = atoi(inputElem->Attribute("offset")); + inputs.back().semantic = ToSemantic(inputElem->Attribute("semantic")); + switch(inputs.back().semantic) + { + case VERTEX: + hasVerts = true; + vertSource = inputs.back().source; + break; + case NORMAL: + hasNormals = true; + normalSource = inputs.back().source; + break; + case TEXCOORD: + hasTexcoords = true; + texcoordSource = inputs.back().source; + break; + default: + break; + } + } +} + +Source& GetSource(map& sources, map >& vertices,const string& source) +{ + map::iterator srcIterator = sources.find(source); + if (srcIterator != sources.end()) + return srcIterator->second; + map >::iterator vertIterator = vertices.find(source); + if (vertIterator != vertices.end() ) { + for (vector::iterator i = vertIterator->second.begin(); i != vertIterator->second.end() ; ++i) { + srcIterator = sources.find(i->source); + if (srcIterator != sources.end()) + return srcIterator->second; + + } + } else { + throw string("Error"); + } + + return srcIterator->second; +} + +void InsertVertNormalTexcoord(vector& vertVector,vector& normalVector,vector& texcoordVector, bool hasVerts, bool hasNormals, bool hasTexcoords,const string& vertSource ,const string& normalSource ,const string& texcoordSource ,size_t vertIndex , size_t normalIndex , size_t texcoordIndex, map& sources,map >& vertices) +{ + if (hasVerts) { + Source& src = GetSource(sources, vertices , vertSource); + float x = 0, y = 0, z = 0; + if (src.stride >= 1) + x = src.array[src.offset + vertIndex*src.stride]; + if (src.stride >= 2) + y = src.array[src.offset + vertIndex*src.stride + 1]; + if (src.stride >= 3) + z = src.array[src.offset + vertIndex*src.stride + 2]; + vertVector.push_back(Vector3(x,y,z)); + } + + if (hasNormals) { + Source& src = GetSource(sources, vertices , normalSource); + float x = 0, y = 0, z = 0; + if (src.stride >= 1) + x = src.array[src.offset + normalIndex*src.stride]; + if (src.stride >= 2) + y = src.array[src.offset + normalIndex*src.stride + 1]; + if (src.stride >= 3) + z = src.array[src.offset + normalIndex*src.stride + 2]; + normalVector.push_back(Vector3(x,y,z) ); + } + + if (hasTexcoords) { + Source& src = GetSource(sources, vertices , texcoordSource); + float s = 0, t = 0; + if (src.stride >= 1) + s = src.array[src.offset + texcoordIndex*src.stride]; + if (src.stride >= 2) + t = src.array[src.offset + texcoordIndex*src.stride + 1]; + + texcoordVector.push_back(Vector2(s,t)); + } +} + +/// Import a DAE file from a file. +void Import_DAE(const char * aFileName, Mesh * aMesh) +{ + // Start by ensuring that we use proper locale settings for the file format + setlocale(LC_NUMERIC, "C"); + + // Clear the mesh + aMesh->Clear(); + + // Load the XML document + TiXmlDocument doc(aFileName); + if (doc.LoadFile()) + { + + TiXmlHandle hDoc(&doc); + TiXmlElement* elem = hDoc.FirstChildElement().Element(); + TiXmlHandle hRoot(elem); + + map sources; + size_t indicesOffset = 0, vertexOffset = 0, texcoordOffset = 0, normalOffset = 0; + + TiXmlHandle geometry = hRoot.FirstChild( "library_geometries" ).FirstChild("geometry"); + for(elem = geometry.ToElement(); elem; elem=elem->NextSiblingElement()) + { + TiXmlHandle geometry(elem); + + TiXmlElement* meshElem = geometry.FirstChild("mesh").ToElement(); + + if(meshElem) + { + TiXmlHandle mesh(meshElem); + + TiXmlElement* sourceElem; + for(sourceElem = mesh.FirstChild("source").ToElement(); sourceElem; + sourceElem = sourceElem->NextSiblingElement()) + { + if(string(sourceElem->Value()) != "source") + continue; + TiXmlHandle source(sourceElem); + string id = source.ToElement()->Attribute("id"); + TiXmlElement* arr = sourceElem->FirstChild("float_array")->ToElement(); + string str = arr->GetText(); + istringstream strStream (str); + sources.insert(make_pair(id, Source())); + + TiXmlElement* techniqueElem = sourceElem->FirstChild("technique_common")->ToElement(); + TiXmlElement* accessorElem = techniqueElem->FirstChild("accessor")->ToElement(); + + sources[id].stride = atoi(accessorElem->Attribute("stride")); + sources[id].count = atoi(accessorElem->Attribute("count")); + if (accessorElem->Attribute("offset")) + sources[id].offset = atoi(accessorElem->Attribute("offset")); + + char val[100]; + float value = 0; + while(!strStream.eof()) + { + strStream >> val; + value = float(atof(val)); + sources[id].array.push_back(value); + } + } + + TiXmlElement* verticesElem = mesh.FirstChild("vertices").ToElement(); + map > vertices; + if (verticesElem) { + string id = verticesElem->Attribute("id"); + vertices.insert(make_pair(id, vector())); + TiXmlElement* inputElem; + for(inputElem = verticesElem->FirstChild("input")->ToElement(); + inputElem; inputElem = inputElem->NextSiblingElement()) + { + if(string(inputElem->Value()) != "input") + continue; + + vertices[id].push_back(Input()); + vertices[id].back().source = string(inputElem->Attribute("source")).substr(1); + vertices[id].back().semantic = ToSemantic(inputElem->Attribute("semantic")); + } + } + + TiXmlElement* trianglesElem = mesh.FirstChild("triangles").ToElement(); + if(trianglesElem) + { + TiXmlHandle triangles(trianglesElem); + vector inputs; + bool hasVerts = false, hasNormals = false, hasTexcoords = false; + string vertSource = "", normalSource = "", texcoordSource = ""; + /* + TiXmlElement* inputElem; + for(inputElem = triangles.FirstChild( "input" ).ToElement(); + inputElem; inputElem = inputElem->NextSiblingElement()) + { + if(string(inputElem->Value()) != "input") + continue; + //TiXmlHandle input(inputElem); + inputs.push_back(Input()); + inputs.back().source = string(inputElem->Attribute("source")).substr(1); + inputs.back().offset = atoi(inputElem->Attribute("offset")); + inputs.back().semantic = ToSemantic(inputElem->Attribute("semantic")); + switch(inputs.back().semantic) + { + case VERTEX: + hasVerts = true; + vertSource = inputs.back().source; + break; + case NORMAL: + hasNormals = true; + normalSource = inputs.back().source; + break; + case TEXCOORD: + hasTexcoords = true; + texcoordSource = inputs.back().source; + break; + default: + break; + } + } + */ + ReadInputs(trianglesElem, hasVerts, hasNormals, hasTexcoords, vertSource, normalSource, texcoordSource, inputs); + + vector pArray; + TiXmlElement* p = triangles.FirstChild( "p" ).ToElement(); + + ReadIndexArray(p,pArray); + + vector indexVector; + vector vertVector, normalVector; + vector texcoordVector; + map > > prevIndices; + size_t index = 0; + for (size_t i = 0; i < pArray.size() ; i += inputs.size()) { + size_t vertIndex = 0, normalIndex = 0, texcoordIndex = 0; + for (vector::const_iterator j = inputs.begin(); j != inputs.end(); ++j) { + switch (j->semantic) { + case VERTEX: + vertIndex = pArray[i + j->offset]; + break; + case NORMAL: + normalIndex = pArray[i + j->offset]; + break; + case TEXCOORD: + texcoordIndex = pArray[i + j->offset]; + break; + default: + break; + } + } + map > >::iterator prevIt1 = prevIndices.find(vertIndex); + + if(prevIt1 != prevIndices.end()) + { + map >::iterator prevIt2 = prevIt1->second.find(normalIndex); + if(prevIt2 != prevIt1->second.end()) + { + map< size_t, size_t >::iterator prevIt3 = prevIt2->second.find(texcoordIndex); + if(prevIt3 != prevIt2->second.end()) + { + indexVector.push_back(prevIt3->second); + } + else + { + indexVector.push_back(index); + prevIt2->second.insert(make_pair(texcoordIndex, index)); + InsertVertNormalTexcoord(vertVector, normalVector, texcoordVector, hasVerts, hasNormals, hasTexcoords, vertSource, normalSource, texcoordSource, vertIndex, normalIndex, texcoordIndex, sources, vertices); + ++index; + } + } + else + { + indexVector.push_back(index); + prevIt1->second.insert(make_pair(normalIndex, map< size_t, size_t >())); + prevIt1->second[normalIndex].insert(make_pair(texcoordIndex, index)); + InsertVertNormalTexcoord(vertVector, normalVector, texcoordVector, hasVerts, hasNormals, hasTexcoords, vertSource, normalSource, texcoordSource, vertIndex, normalIndex, texcoordIndex, sources, vertices); + ++index; + } + } + else + { + indexVector.push_back(index); + prevIndices.insert(make_pair(vertIndex,map >())); + prevIndices[vertIndex].insert(make_pair(normalIndex, map< size_t, size_t >())); + prevIndices[vertIndex][normalIndex].insert(make_pair(texcoordIndex, index)); + InsertVertNormalTexcoord(vertVector, normalVector, texcoordVector, hasVerts, hasNormals, hasTexcoords, vertSource, normalSource, texcoordSource, vertIndex, normalIndex, texcoordIndex, sources, vertices); + ++index; + } + + } + + TiXmlElement* polylistElem = mesh.FirstChild("polylist").ToElement(); + + if (polylistElem) { + TiXmlHandle polylist(polylistElem); + vector vcountArray, pArray; + TiXmlElement* vcountElem = polylist.FirstChild("vcount").ToElement(); + ReadIndexArray(vcountElem, vcountArray); + TiXmlElement* pElem = polylist.FirstChild("p").ToElement(); + ReadIndexArray(pElem, pArray); + vector inputs; + bool hasVerts = false, hasNormals = false, hasTexcoords = false; + string vertSource = "", normalSource = "", texcoordSource = ""; + + ReadInputs(polylistElem, hasVerts, hasNormals, hasTexcoords, vertSource, normalSource, texcoordSource, inputs); + size_t offset = 0; + for (size_t i = 0; i < vcountArray.size(); ++i) { + vector convexPolygon; + for (size_t j = 0; j < vcountArray[i]; ++j) { + convexPolygon.push_back(Indexes()); + for (vector::const_iterator j = inputs.begin(); j != inputs.end(); ++j) { + switch (j->semantic) { + case VERTEX: + convexPolygon.back().vertIndex = pArray[offset + j->offset]; + break; + case NORMAL: + convexPolygon.back().normalIndex = pArray[offset + j->offset]; + break; + case TEXCOORD: + convexPolygon.back().texcoordIndex = pArray[offset + j->offset]; + break; + default: + break; + } + } + } + offset += vcountArray[i]; + } + + + + } + + size_t indicesOff = indicesOffset, vertexOff = vertexOffset, normalOff = normalOffset, texcoordOff = texcoordOffset; + indicesOffset += indexVector.size(); + vertexOffset += vertVector.size(); + normalOffset += normalVector.size(); + texcoordOffset += texcoordVector.size(); + aMesh->mIndices.resize(indicesOffset ); + aMesh->mVertices.resize(vertexOffset ); + aMesh->mNormals.resize(normalOffset ); + aMesh->mTexCoords.resize(texcoordOffset ); + + for(size_t i = 0; i < indexVector.size(); ++i) + aMesh->mIndices[indicesOff + i] = indexVector[i]; + + for(size_t i = 0; i < vertVector.size(); ++i) + aMesh->mVertices[vertexOff + i] = vertVector[i]; + + for(size_t i = 0; i < normalVector.size(); ++i) + aMesh->mNormals[normalOff + i] = normalVector[i]; + + for(size_t i = 0; i < texcoordVector.size(); ++i) + aMesh->mTexCoords[texcoordOff + i] = texcoordVector[i]; + } + } + } + } + else + throw runtime_error("Could not open input file."); +} + +/// Dump a float array to an XML text node. +static void FloatArrayToXML(TiXmlElement * aNode, float * aArray, + unsigned int aCount) +{ + stringstream ss; + for(unsigned int i = 0; i < aCount; ++ i) + ss << aArray[i] << " "; + aNode->LinkEndChild(new TiXmlText(ss.str().c_str())); +} + +/// Generate an ISO 8601 format date string. +static string MakeISO8601DateTime(void) +{ + char buf[500]; +#ifdef WIN32 + SYSTEMTIME tm; + GetSystemTime(&tm); + sprintf(buf, "%i-%02i-%02iT%02i:%02i:%02i.%03iZ", tm.wYear, + tm.wMonth, tm.wDay, tm.wHour, tm.wMinute, tm.wSecond, + tm.wMilliseconds); +#else + time_t t; + time(&t); + struct tm tm; + localtime_r(&t, &tm); + sprintf(buf, "%i-%02i-%02iT%02i:%02i:%02i", tm.tm_year + 1900, + tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); +#endif + return string(buf); +} + +/// Export a DAE file to a file. +void Export_DAE(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Start by ensuring that we use proper locale settings for the file format + setlocale(LC_NUMERIC, "C"); + + // What should we export? + bool exportTexCoords = aMesh->HasTexCoords() && !aOptions.mNoTexCoords; + bool exportNormals = aMesh->HasNormals() && !aOptions.mNoNormals; + + TiXmlDocument xmlDoc; + TiXmlElement * elem; + string dateTime = MakeISO8601DateTime(); + + // Set XML declaration + xmlDoc.LinkEndChild(new TiXmlDeclaration("1.0", "utf-8", "")); + + // Create root node + TiXmlElement * root = new TiXmlElement("COLLADA"); + xmlDoc.LinkEndChild(root); + root->SetAttribute("xmlns", "http://www.collada.org/2005/11/COLLADASchema"); + root->SetAttribute("version", "1.4.1"); + + // Create traceability nodes + TiXmlElement * asset = new TiXmlElement("asset"); + root->LinkEndChild(asset); + TiXmlElement * contributor = new TiXmlElement("contributor"); + asset->LinkEndChild(contributor); + TiXmlElement * authoring_tool = new TiXmlElement("authoring_tool"); + contributor->LinkEndChild(authoring_tool); + authoring_tool->LinkEndChild(new TiXmlText("ctmconv")); + TiXmlElement * comments = new TiXmlElement("comments"); + contributor->LinkEndChild(comments); + comments->LinkEndChild(new TiXmlText(aMesh->mComment.c_str())); + elem = new TiXmlElement("created"); + asset->LinkEndChild(elem); + elem->LinkEndChild(new TiXmlText(dateTime.c_str())); + elem = new TiXmlElement("modified"); + asset->LinkEndChild(elem); + elem->LinkEndChild(new TiXmlText(dateTime.c_str())); + + // Create the geometry nodes + TiXmlElement * library_geometries = new TiXmlElement("library_geometries"); + root->LinkEndChild(library_geometries); + TiXmlElement * geometry = new TiXmlElement("geometry"); + library_geometries->LinkEndChild(geometry); + geometry->SetAttribute("id", "Mesh-1"); + geometry->SetAttribute("name", "Mesh-1"); + TiXmlElement * mesh = new TiXmlElement("mesh"); + geometry->LinkEndChild(mesh); + + // Vertices (positions) + TiXmlElement * source_position = new TiXmlElement("source"); + mesh->LinkEndChild(source_position); + source_position->SetAttribute("id", "Mesh-1-positions"); + source_position->SetAttribute("name", "position"); + TiXmlElement * positions_array = new TiXmlElement("float_array"); + source_position->LinkEndChild(positions_array); + positions_array->SetAttribute("id", "Mesh-1-positions-array"); + positions_array->SetAttribute("count", int(aMesh->mVertices.size() * 3)); + FloatArrayToXML(positions_array, &aMesh->mVertices[0].x, aMesh->mVertices.size() * 3); + TiXmlElement * positions_technique = new TiXmlElement("technique_common"); + source_position->LinkEndChild(positions_technique); + TiXmlElement * positions_technique_accessor = new TiXmlElement("accessor"); + positions_technique->LinkEndChild(positions_technique_accessor); + positions_technique_accessor->SetAttribute("count", int(aMesh->mVertices.size())); + positions_technique_accessor->SetAttribute("offset", 0); + positions_technique_accessor->SetAttribute("source", "#Mesh-1-positions-array"); + positions_technique_accessor->SetAttribute("stride", 3); + elem = new TiXmlElement("param"); + positions_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "X"); + elem->SetAttribute("type", "float"); + elem = new TiXmlElement("param"); + positions_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "Y"); + elem->SetAttribute("type", "float"); + elem = new TiXmlElement("param"); + positions_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "Z"); + elem->SetAttribute("type", "float"); + + // Normals + if(exportNormals) + { + TiXmlElement * source_normal = new TiXmlElement("source"); + mesh->LinkEndChild(source_normal); + source_normal->SetAttribute("id", "Mesh-1-normals"); + source_normal->SetAttribute("name", "normal"); + TiXmlElement * normals_array = new TiXmlElement("float_array"); + source_normal->LinkEndChild(normals_array); + normals_array->SetAttribute("id", "Mesh-1-normals-array"); + normals_array->SetAttribute("count", int(aMesh->mVertices.size() * 3)); + FloatArrayToXML(normals_array, &aMesh->mNormals[0].x, aMesh->mNormals.size() * 3); + TiXmlElement * normals_technique = new TiXmlElement("technique_common"); + source_normal->LinkEndChild(normals_technique); + TiXmlElement * normals_technique_accessor = new TiXmlElement("accessor"); + normals_technique->LinkEndChild(normals_technique_accessor); + normals_technique_accessor->SetAttribute("count", int(aMesh->mVertices.size())); + normals_technique_accessor->SetAttribute("offset", 0); + normals_technique_accessor->SetAttribute("source", "#Mesh-1-normals-array"); + normals_technique_accessor->SetAttribute("stride", 3); + elem = new TiXmlElement("param"); + normals_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "X"); + elem->SetAttribute("type", "float"); + elem = new TiXmlElement("param"); + normals_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "Y"); + elem->SetAttribute("type", "float"); + elem = new TiXmlElement("param"); + normals_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "Z"); + elem->SetAttribute("type", "float"); + } + + // UV map + if(exportTexCoords) + { + TiXmlElement * source_map1 = new TiXmlElement("source"); + mesh->LinkEndChild(source_map1); + source_map1->SetAttribute("id", "Mesh-1-map1"); + source_map1->SetAttribute("name", "map1"); + TiXmlElement * map1_array = new TiXmlElement("float_array"); + source_map1->LinkEndChild(map1_array); + map1_array->SetAttribute("id", "Mesh-1-map1-array"); + map1_array->SetAttribute("count", int(aMesh->mVertices.size() * 3)); + FloatArrayToXML(map1_array, &aMesh->mTexCoords[0].u, aMesh->mTexCoords.size() * 2); + TiXmlElement * map1_technique = new TiXmlElement("technique_common"); + source_map1->LinkEndChild(map1_technique); + TiXmlElement * map1_technique_accessor = new TiXmlElement("accessor"); + map1_technique->LinkEndChild(map1_technique_accessor); + map1_technique_accessor->SetAttribute("count", int(aMesh->mVertices.size())); + map1_technique_accessor->SetAttribute("offset", 0); + map1_technique_accessor->SetAttribute("source", "#Mesh-1-map1-array"); + map1_technique_accessor->SetAttribute("stride", 2); + elem = new TiXmlElement("param"); + map1_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "S"); + elem->SetAttribute("type", "float"); + elem = new TiXmlElement("param"); + map1_technique_accessor->LinkEndChild(elem); + elem->SetAttribute("name", "T"); + elem->SetAttribute("type", "float"); + } + + // Vertices + TiXmlElement * vertices = new TiXmlElement("vertices"); + mesh->LinkEndChild(vertices); + vertices->SetAttribute("id", "Mesh-1-vertices"); + TiXmlElement * vertices_input = new TiXmlElement("input"); + vertices->LinkEndChild(vertices_input); + vertices_input->SetAttribute("semantic", "POSITION"); + vertices_input->SetAttribute("source", "#Mesh-1-positions"); + + // Triangles + TiXmlElement * triangles = new TiXmlElement("triangles"); + mesh->LinkEndChild(triangles); + triangles->SetAttribute("count", int(aMesh->mIndices.size() / 3)); + int triangleInputCount = 0; + elem = new TiXmlElement("input"); + triangles->LinkEndChild(elem); + elem->SetAttribute("offset", triangleInputCount); + elem->SetAttribute("semantic", "VERTEX"); + elem->SetAttribute("source", "#Mesh-1-vertices"); + ++ triangleInputCount; + if(exportNormals) + { + elem = new TiXmlElement("input"); + triangles->LinkEndChild(elem); + elem->SetAttribute("offset", triangleInputCount); + elem->SetAttribute("semantic", "NORMAL"); + elem->SetAttribute("source", "#Mesh-1-normals"); + ++ triangleInputCount; + } + if(exportTexCoords) + { + elem = new TiXmlElement("input"); + triangles->LinkEndChild(elem); + elem->SetAttribute("offset", triangleInputCount); + elem->SetAttribute("semantic", "TEXCOORD"); + elem->SetAttribute("source", "#Mesh-1-map1"); + elem->SetAttribute("set", 0); + ++ triangleInputCount; + } + { + elem = new TiXmlElement("p"); + triangles->LinkEndChild(elem); + stringstream ss; + for(unsigned int i = 0; i < aMesh->mIndices.size(); ++ i) + for(int j = 0; j < triangleInputCount; ++ j) + ss << aMesh->mIndices[i] << " "; + elem->LinkEndChild(new TiXmlText(ss.str().c_str())); + } + + // Scene + TiXmlElement * library_visual_scenes = new TiXmlElement("library_visual_scenes"); + root->LinkEndChild(library_visual_scenes); + TiXmlElement * visual_scene = new TiXmlElement("visual_scene"); + library_visual_scenes->LinkEndChild(visual_scene); + visual_scene->SetAttribute("id", "Scene-1"); + visual_scene->SetAttribute("name", "Scene-1"); + TiXmlElement * visual_scene_node = new TiXmlElement("node"); + visual_scene->LinkEndChild(visual_scene_node); + visual_scene_node->SetAttribute("id", "Object-1"); + visual_scene_node->SetAttribute("name", "Object-1"); + TiXmlElement * instance_geometry = new TiXmlElement("instance_geometry"); + visual_scene_node->LinkEndChild(instance_geometry); + instance_geometry->SetAttribute("url", "#Mesh-1"); + TiXmlElement * scene = new TiXmlElement("scene"); + root->LinkEndChild(scene); + TiXmlElement * instance_visual_scene = new TiXmlElement("instance_visual_scene"); + scene->LinkEndChild(instance_visual_scene); + instance_visual_scene->SetAttribute("url", "#Scene-1"); + + // Save the XML document to a file + xmlDoc.SaveFile(aFileName); + if(xmlDoc.Error()) + throw runtime_error(string(xmlDoc.ErrorDesc())); +} diff --git a/3rdparty/openctm/tools/dae.h b/3rdparty/openctm/tools/dae.h new file mode 100644 index 000000000..196b82ef6 --- /dev/null +++ b/3rdparty/openctm/tools/dae.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: dae.h +// Description: Interface for the DAE (Collada) file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __DAE_H_ +#define __DAE_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a DAE file from a file. +void Import_DAE(const char * aFileName, Mesh * aMesh); + +/// Export a DAE file to a file. +void Export_DAE(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __DAE_H_ diff --git a/3rdparty/openctm/tools/glew/GL/glew.h b/3rdparty/openctm/tools/glew/GL/glew.h new file mode 100644 index 000000000..0de2efc38 --- /dev/null +++ b/3rdparty/openctm/tools/glew/GL/glew.h @@ -0,0 +1,12262 @@ +/* +** 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)) && defined(_MSC_VER) && _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 +#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 + +typedef unsigned int GLenum; +typedef unsigned int GLbitfield; +typedef unsigned int GLuint; +typedef int GLint; +typedef int GLsizei; +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) +# if _MSC_VER < 1400 +typedef __int64 GLint64EXT; +typedef unsigned __int64 GLuint64EXT; +# else +typedef signed long long GLint64EXT; +typedef unsigned long long GLuint64EXT; +# endif +#else +# if defined(__MINGW32__) +#include +# endif +typedef int64_t GLint64EXT; +typedef uint64_t 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) (GLuint program, 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_VERSION_3_0 ---------------------------- */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 + +#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES +#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 +#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 +#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 +#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB +#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 +#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 +#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 +#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_DEPTH_BUFFER 0x8223 +#define GL_STENCIL_BUFFER 0x8224 +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_ALPHA_INTEGER 0x8D97 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 + +typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERPROC) (GLuint, GLenum); +typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEPROC) (GLenum, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEPROC) (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr); +typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONPROC) (GLuint, GLuint, const GLchar*); +typedef void (GLAPIENTRY * PFNGLCLAMPCOLORPROC) (GLenum, GLenum); +typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFIPROC) (GLenum, GLint, GLfloat, GLint); +typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFVPROC) (GLenum, GLint, const GLfloat*); +typedef void (GLAPIENTRY * PFNGLCLEARBUFFERIVPROC) (GLenum, GLint, const GLint*); +typedef void (GLAPIENTRY * PFNGLCLEARBUFFERUIVPROC) (GLenum, GLint, const GLuint*); +typedef void (GLAPIENTRY * PFNGLCOLORMASKIPROC) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); +typedef void (GLAPIENTRY * PFNGLDISABLEIPROC) (GLenum, GLuint); +typedef void (GLAPIENTRY * PFNGLENABLEIPROC) (GLenum, GLuint); +typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (GLAPIENTRY * PFNGLGETBOOLEANI_VPROC) (GLenum, GLuint, GLboolean*); +typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONPROC) (GLuint, const GLchar*); +typedef void (GLAPIENTRY * PFNGLGETINTEGERI_VPROC) (GLenum, GLuint, GLint*); +typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGIPROC) (GLenum, GLuint); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVPROC) (GLenum, GLenum, GLint*); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVPROC) (GLenum, GLenum, GLuint*); +typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint, GLuint, GLint*); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVPROC) (GLuint, GLint, GLuint*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVPROC) (GLuint, GLenum, GLint*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint, GLenum, GLuint*); +typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDIPROC) (GLenum, GLuint); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVPROC) (GLenum, GLenum, const GLint*); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVPROC) (GLenum, GLenum, const GLuint*); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint, GLsizei, const GLint*, GLenum); +typedef void (GLAPIENTRY * PFNGLUNIFORM1UIPROC) (GLint, GLuint); +typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVPROC) (GLint, GLsizei, const GLuint*); +typedef void (GLAPIENTRY * PFNGLUNIFORM2UIPROC) (GLint, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVPROC) (GLint, GLsizei, const GLuint*); +typedef void (GLAPIENTRY * PFNGLUNIFORM3UIPROC) (GLint, GLuint, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVPROC) (GLint, GLsizei, const GLuint*); +typedef void (GLAPIENTRY * PFNGLUNIFORM4UIPROC) (GLint, GLuint, GLuint, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVPROC) (GLint, GLsizei, const GLuint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IPROC) (GLuint, GLint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVPROC) (GLuint, const GLint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIPROC) (GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVPROC) (GLuint, const GLuint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IPROC) (GLuint, GLint, GLint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVPROC) (GLuint, const GLint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIPROC) (GLuint, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVPROC) (GLuint, const GLuint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IPROC) (GLuint, GLint, GLint, GLint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVPROC) (GLuint, const GLint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIPROC) (GLuint, GLuint, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVPROC) (GLuint, const GLuint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVPROC) (GLuint, const GLbyte*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IPROC) (GLuint, GLint, GLint, GLint, GLint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVPROC) (GLuint, const GLint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVPROC) (GLuint, const GLshort*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVPROC) (GLuint, const GLubyte*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIPROC) (GLuint, GLuint, GLuint, GLuint, GLuint); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVPROC) (GLuint, const GLuint*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVPROC) (GLuint, const GLushort*); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint, GLint, GLenum, GLsizei, const GLvoid*); + +#define glBeginConditionalRender GLEW_GET_FUN(__glewBeginConditionalRender) +#define glBeginTransformFeedback GLEW_GET_FUN(__glewBeginTransformFeedback) +#define glBindBufferBase GLEW_GET_FUN(__glewBindBufferBase) +#define glBindBufferRange GLEW_GET_FUN(__glewBindBufferRange) +#define glBindFragDataLocation GLEW_GET_FUN(__glewBindFragDataLocation) +#define glClampColor GLEW_GET_FUN(__glewClampColor) +#define glClearBufferfi GLEW_GET_FUN(__glewClearBufferfi) +#define glClearBufferfv GLEW_GET_FUN(__glewClearBufferfv) +#define glClearBufferiv GLEW_GET_FUN(__glewClearBufferiv) +#define glClearBufferuiv GLEW_GET_FUN(__glewClearBufferuiv) +#define glColorMaski GLEW_GET_FUN(__glewColorMaski) +#define glDisablei GLEW_GET_FUN(__glewDisablei) +#define glEnablei GLEW_GET_FUN(__glewEnablei) +#define glEndConditionalRender GLEW_GET_FUN(__glewEndConditionalRender) +#define glEndTransformFeedback GLEW_GET_FUN(__glewEndTransformFeedback) +#define glGetBooleani_v GLEW_GET_FUN(__glewGetBooleani_v) +#define glGetFragDataLocation GLEW_GET_FUN(__glewGetFragDataLocation) +#define glGetIntegeri_v GLEW_GET_FUN(__glewGetIntegeri_v) +#define glGetStringi GLEW_GET_FUN(__glewGetStringi) +#define glGetTexParameterIiv GLEW_GET_FUN(__glewGetTexParameterIiv) +#define glGetTexParameterIuiv GLEW_GET_FUN(__glewGetTexParameterIuiv) +#define glGetTransformFeedbackVarying GLEW_GET_FUN(__glewGetTransformFeedbackVarying) +#define glGetUniformuiv GLEW_GET_FUN(__glewGetUniformuiv) +#define glGetVertexAttribIiv GLEW_GET_FUN(__glewGetVertexAttribIiv) +#define glGetVertexAttribIuiv GLEW_GET_FUN(__glewGetVertexAttribIuiv) +#define glIsEnabledi GLEW_GET_FUN(__glewIsEnabledi) +#define glTexParameterIiv GLEW_GET_FUN(__glewTexParameterIiv) +#define glTexParameterIuiv GLEW_GET_FUN(__glewTexParameterIuiv) +#define glTransformFeedbackVaryings GLEW_GET_FUN(__glewTransformFeedbackVaryings) +#define glUniform1ui GLEW_GET_FUN(__glewUniform1ui) +#define glUniform1uiv GLEW_GET_FUN(__glewUniform1uiv) +#define glUniform2ui GLEW_GET_FUN(__glewUniform2ui) +#define glUniform2uiv GLEW_GET_FUN(__glewUniform2uiv) +#define glUniform3ui GLEW_GET_FUN(__glewUniform3ui) +#define glUniform3uiv GLEW_GET_FUN(__glewUniform3uiv) +#define glUniform4ui GLEW_GET_FUN(__glewUniform4ui) +#define glUniform4uiv GLEW_GET_FUN(__glewUniform4uiv) +#define glVertexAttribI1i GLEW_GET_FUN(__glewVertexAttribI1i) +#define glVertexAttribI1iv GLEW_GET_FUN(__glewVertexAttribI1iv) +#define glVertexAttribI1ui GLEW_GET_FUN(__glewVertexAttribI1ui) +#define glVertexAttribI1uiv GLEW_GET_FUN(__glewVertexAttribI1uiv) +#define glVertexAttribI2i GLEW_GET_FUN(__glewVertexAttribI2i) +#define glVertexAttribI2iv GLEW_GET_FUN(__glewVertexAttribI2iv) +#define glVertexAttribI2ui GLEW_GET_FUN(__glewVertexAttribI2ui) +#define glVertexAttribI2uiv GLEW_GET_FUN(__glewVertexAttribI2uiv) +#define glVertexAttribI3i GLEW_GET_FUN(__glewVertexAttribI3i) +#define glVertexAttribI3iv GLEW_GET_FUN(__glewVertexAttribI3iv) +#define glVertexAttribI3ui GLEW_GET_FUN(__glewVertexAttribI3ui) +#define glVertexAttribI3uiv GLEW_GET_FUN(__glewVertexAttribI3uiv) +#define glVertexAttribI4bv GLEW_GET_FUN(__glewVertexAttribI4bv) +#define glVertexAttribI4i GLEW_GET_FUN(__glewVertexAttribI4i) +#define glVertexAttribI4iv GLEW_GET_FUN(__glewVertexAttribI4iv) +#define glVertexAttribI4sv GLEW_GET_FUN(__glewVertexAttribI4sv) +#define glVertexAttribI4ubv GLEW_GET_FUN(__glewVertexAttribI4ubv) +#define glVertexAttribI4ui GLEW_GET_FUN(__glewVertexAttribI4ui) +#define glVertexAttribI4uiv GLEW_GET_FUN(__glewVertexAttribI4uiv) +#define glVertexAttribI4usv GLEW_GET_FUN(__glewVertexAttribI4usv) +#define glVertexAttribIPointer GLEW_GET_FUN(__glewVertexAttribIPointer) + +#define GLEW_VERSION_3_0 GLEW_GET_VAR(__GLEW_VERSION_3_0) + +#endif /* GL_VERSION_3_0 */ + +/* -------------------------- 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_buffer_float ----------------------- */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 + +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD + +#define GLEW_ARB_depth_buffer_float GLEW_GET_VAR(__GLEW_ARB_depth_buffer_float) + +#endif /* GL_ARB_depth_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_draw_instanced ------------------------- */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 + +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount); + +#define glDrawArraysInstancedARB GLEW_GET_FUN(__glewDrawArraysInstancedARB) +#define glDrawElementsInstancedARB GLEW_GET_FUN(__glewDrawElementsInstancedARB) + +#define GLEW_ARB_draw_instanced GLEW_GET_VAR(__GLEW_ARB_draw_instanced) + +#endif /* GL_ARB_draw_instanced */ + +/* ------------------------ 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_framebuffer_object ----------------------- */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_INDEX 0x8222 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_SRGB 0x8C40 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 + +typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint* framebuffers); +typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint* renderbuffers); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURLAYERPROC) (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint* framebuffers); +typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint* renderbuffers); +typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glBindFramebuffer GLEW_GET_FUN(__glewBindFramebuffer) +#define glBindRenderbuffer GLEW_GET_FUN(__glewBindRenderbuffer) +#define glBlitFramebuffer GLEW_GET_FUN(__glewBlitFramebuffer) +#define glCheckFramebufferStatus GLEW_GET_FUN(__glewCheckFramebufferStatus) +#define glDeleteFramebuffers GLEW_GET_FUN(__glewDeleteFramebuffers) +#define glDeleteRenderbuffers GLEW_GET_FUN(__glewDeleteRenderbuffers) +#define glFramebufferRenderbuffer GLEW_GET_FUN(__glewFramebufferRenderbuffer) +#define glFramebufferTexturLayer GLEW_GET_FUN(__glewFramebufferTexturLayer) +#define glFramebufferTexture1D GLEW_GET_FUN(__glewFramebufferTexture1D) +#define glFramebufferTexture2D GLEW_GET_FUN(__glewFramebufferTexture2D) +#define glFramebufferTexture3D GLEW_GET_FUN(__glewFramebufferTexture3D) +#define glGenFramebuffers GLEW_GET_FUN(__glewGenFramebuffers) +#define glGenRenderbuffers GLEW_GET_FUN(__glewGenRenderbuffers) +#define glGenerateMipmap GLEW_GET_FUN(__glewGenerateMipmap) +#define glGetFramebufferAttachmentParameteriv GLEW_GET_FUN(__glewGetFramebufferAttachmentParameteriv) +#define glGetRenderbufferParameteriv GLEW_GET_FUN(__glewGetRenderbufferParameteriv) +#define glIsFramebuffer GLEW_GET_FUN(__glewIsFramebuffer) +#define glIsRenderbuffer GLEW_GET_FUN(__glewIsRenderbuffer) +#define glRenderbufferStorage GLEW_GET_FUN(__glewRenderbufferStorage) +#define glRenderbufferStorageMultisample GLEW_GET_FUN(__glewRenderbufferStorageMultisample) + +#define GLEW_ARB_framebuffer_object GLEW_GET_VAR(__GLEW_ARB_framebuffer_object) + +#endif /* GL_ARB_framebuffer_object */ + +/* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 + +#define GL_FRAMEBUFFER_SRGB 0x8DB9 + +#define GLEW_ARB_framebuffer_sRGB GLEW_GET_VAR(__GLEW_ARB_framebuffer_sRGB) + +#endif /* GL_ARB_framebuffer_sRGB */ + +/* ------------------------ GL_ARB_geometry_shader4 ------------------------ */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 + +#define GL_LINES_ADJACENCY_ARB 0xA +#define GL_LINE_STRIP_ADJACENCY_ARB 0xB +#define GL_TRIANGLES_ADJACENCY_ARB 0xC +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); + +#define glFramebufferTextureARB GLEW_GET_FUN(__glewFramebufferTextureARB) +#define glFramebufferTextureFaceARB GLEW_GET_FUN(__glewFramebufferTextureFaceARB) +#define glFramebufferTextureLayerARB GLEW_GET_FUN(__glewFramebufferTextureLayerARB) +#define glProgramParameteriARB GLEW_GET_FUN(__glewProgramParameteriARB) + +#define GLEW_ARB_geometry_shader4 GLEW_GET_VAR(__GLEW_ARB_geometry_shader4) + +#endif /* GL_ARB_geometry_shader4 */ + +/* ------------------------ 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_half_float_vertex ----------------------- */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 + +#define GL_HALF_FLOAT 0x140B + +#define GLEW_ARB_half_float_vertex GLEW_GET_VAR(__GLEW_ARB_half_float_vertex) + +#endif /* GL_ARB_half_float_vertex */ + +/* ----------------------------- 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_instanced_arrays ------------------------ */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 + +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE + +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); + +#define glVertexAttribDivisorARB GLEW_GET_FUN(__glewVertexAttribDivisorARB) + +#define GLEW_ARB_instanced_arrays GLEW_GET_VAR(__GLEW_ARB_instanced_arrays) + +#endif /* GL_ARB_instanced_arrays */ + +/* ------------------------ GL_ARB_map_buffer_range ------------------------ */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 + +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 + +typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); + +#define glFlushMappedBufferRange GLEW_GET_FUN(__glewFlushMappedBufferRange) +#define glMapBufferRange GLEW_GET_FUN(__glewMapBufferRange) + +#define GLEW_ARB_map_buffer_range GLEW_GET_VAR(__GLEW_ARB_map_buffer_range) + +#endif /* GL_ARB_map_buffer_range */ + +/* ------------------------- 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_buffer_object --------------------- */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 + +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E + +typedef void (GLAPIENTRY * PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); + +#define glTexBufferARB GLEW_GET_FUN(__glewTexBufferARB) + +#define GLEW_ARB_texture_buffer_object GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object) + +#endif /* GL_ARB_texture_buffer_object */ + +/* ----------------------- 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_compression_rgtc -------------------- */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 + +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE + +#define GLEW_ARB_texture_compression_rgtc GLEW_GET_VAR(__GLEW_ARB_texture_compression_rgtc) + +#endif /* GL_ARB_texture_compression_rgtc */ + +/* ------------------------ 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_texture_rg --------------------------- */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 + +#define GL_RED 0x1903 +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C + +#define GLEW_ARB_texture_rg GLEW_GET_VAR(__GLEW_ARB_texture_rg) + +#endif /* GL_ARB_texture_rg */ + +/* ------------------------ 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_array_object ---------------------- */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 + +#define GL_VERTEX_ARRAY_BINDING 0x85B5 + +typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); +typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); +typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYPROC) (GLuint array); + +#define glBindVertexArray GLEW_GET_FUN(__glewBindVertexArray) +#define glDeleteVertexArrays GLEW_GET_FUN(__glewDeleteVertexArrays) +#define glGenVertexArrays GLEW_GET_FUN(__glewGenVertexArrays) +#define glIsVertexArray GLEW_GET_FUN(__glewIsVertexArray) + +#define GLEW_ARB_vertex_array_object GLEW_GET_VAR(__GLEW_ARB_vertex_array_object) + +#endif /* GL_ARB_vertex_array_object */ + +/* -------------------------- 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 + +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 + +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_direct_state_access ---------------------- */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 + +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F + +typedef void (GLAPIENTRY * PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef GLenum (GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (GLAPIENTRY * PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, 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 * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, 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 * PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum* bufs); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (GLAPIENTRY * PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (GLAPIENTRY * PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, void* img); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, void* img); +typedef void (GLAPIENTRY * PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum pname, GLuint index, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum pname, GLuint index, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint* param); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void* pixels); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void** params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void* data); +typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void* string); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum pname, GLuint index, GLvoid** params); +typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void* pixels); +typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); +typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef void (GLAPIENTRY * PFNGLMATRIXFRUSTUMEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); +typedef void (GLAPIENTRY * PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum matrixMode); +typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m); +typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m); +typedef void (GLAPIENTRY * PFNGLMATRIXLOADDEXTPROC) (GLenum matrixMode, const GLdouble* m); +typedef void (GLAPIENTRY * PFNGLMATRIXLOADFEXTPROC) (GLenum matrixMode, const GLfloat* m); +typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m); +typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m); +typedef void (GLAPIENTRY * PFNGLMATRIXMULTDEXTPROC) (GLenum matrixMode, const GLdouble* m); +typedef void (GLAPIENTRY * PFNGLMATRIXMULTFEXTPROC) (GLenum matrixMode, const GLfloat* m); +typedef void (GLAPIENTRY * PFNGLMATRIXORTHOEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); +typedef void (GLAPIENTRY * PFNGLMATRIXPOPEXTPROC) (GLenum matrixMode); +typedef void (GLAPIENTRY * PFNGLMATRIXPUSHEXTPROC) (GLenum matrixMode); +typedef void (GLAPIENTRY * PFNGLMATRIXROTATEDEXTPROC) (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLMATRIXROTATEFEXTPROC) (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLMATRIXSCALEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLMATRIXSCALEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAPIENTRY * PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint* params); +typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param); +typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* param); +typedef void (GLAPIENTRY * PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void* data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void* string); +typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint* params); +typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat* param); +typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* param); +typedef void (GLAPIENTRY * PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); +typedef GLboolean (GLAPIENTRY * PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); + +#define glBindMultiTextureEXT GLEW_GET_FUN(__glewBindMultiTextureEXT) +#define glCheckNamedFramebufferStatusEXT GLEW_GET_FUN(__glewCheckNamedFramebufferStatusEXT) +#define glClientAttribDefaultEXT GLEW_GET_FUN(__glewClientAttribDefaultEXT) +#define glCompressedMultiTexImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage1DEXT) +#define glCompressedMultiTexImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage2DEXT) +#define glCompressedMultiTexImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage3DEXT) +#define glCompressedMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage1DEXT) +#define glCompressedMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage2DEXT) +#define glCompressedMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage3DEXT) +#define glCompressedTextureImage1DEXT GLEW_GET_FUN(__glewCompressedTextureImage1DEXT) +#define glCompressedTextureImage2DEXT GLEW_GET_FUN(__glewCompressedTextureImage2DEXT) +#define glCompressedTextureImage3DEXT GLEW_GET_FUN(__glewCompressedTextureImage3DEXT) +#define glCompressedTextureSubImage1DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage1DEXT) +#define glCompressedTextureSubImage2DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage2DEXT) +#define glCompressedTextureSubImage3DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage3DEXT) +#define glCopyMultiTexImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexImage1DEXT) +#define glCopyMultiTexImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexImage2DEXT) +#define glCopyMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage1DEXT) +#define glCopyMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage2DEXT) +#define glCopyMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage3DEXT) +#define glCopyTextureImage1DEXT GLEW_GET_FUN(__glewCopyTextureImage1DEXT) +#define glCopyTextureImage2DEXT GLEW_GET_FUN(__glewCopyTextureImage2DEXT) +#define glCopyTextureSubImage1DEXT GLEW_GET_FUN(__glewCopyTextureSubImage1DEXT) +#define glCopyTextureSubImage2DEXT GLEW_GET_FUN(__glewCopyTextureSubImage2DEXT) +#define glCopyTextureSubImage3DEXT GLEW_GET_FUN(__glewCopyTextureSubImage3DEXT) +#define glDisableClientStateIndexedEXT GLEW_GET_FUN(__glewDisableClientStateIndexedEXT) +#define glEnableClientStateIndexedEXT GLEW_GET_FUN(__glewEnableClientStateIndexedEXT) +#define glFramebufferDrawBufferEXT GLEW_GET_FUN(__glewFramebufferDrawBufferEXT) +#define glFramebufferDrawBuffersEXT GLEW_GET_FUN(__glewFramebufferDrawBuffersEXT) +#define glFramebufferReadBufferEXT GLEW_GET_FUN(__glewFramebufferReadBufferEXT) +#define glGenerateMultiTexMipmapEXT GLEW_GET_FUN(__glewGenerateMultiTexMipmapEXT) +#define glGenerateTextureMipmapEXT GLEW_GET_FUN(__glewGenerateTextureMipmapEXT) +#define glGetCompressedMultiTexImageEXT GLEW_GET_FUN(__glewGetCompressedMultiTexImageEXT) +#define glGetCompressedTextureImageEXT GLEW_GET_FUN(__glewGetCompressedTextureImageEXT) +#define glGetDoubleIndexedvEXT GLEW_GET_FUN(__glewGetDoubleIndexedvEXT) +#define glGetFloatIndexedvEXT GLEW_GET_FUN(__glewGetFloatIndexedvEXT) +#define glGetFramebufferParameterivEXT GLEW_GET_FUN(__glewGetFramebufferParameterivEXT) +#define glGetMultiTexEnvfvEXT GLEW_GET_FUN(__glewGetMultiTexEnvfvEXT) +#define glGetMultiTexEnvivEXT GLEW_GET_FUN(__glewGetMultiTexEnvivEXT) +#define glGetMultiTexGendvEXT GLEW_GET_FUN(__glewGetMultiTexGendvEXT) +#define glGetMultiTexGenfvEXT GLEW_GET_FUN(__glewGetMultiTexGenfvEXT) +#define glGetMultiTexGenivEXT GLEW_GET_FUN(__glewGetMultiTexGenivEXT) +#define glGetMultiTexImageEXT GLEW_GET_FUN(__glewGetMultiTexImageEXT) +#define glGetMultiTexLevelParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterfvEXT) +#define glGetMultiTexLevelParameterivEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterivEXT) +#define glGetMultiTexParameterIivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIivEXT) +#define glGetMultiTexParameterIuivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIuivEXT) +#define glGetMultiTexParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexParameterfvEXT) +#define glGetMultiTexParameterivEXT GLEW_GET_FUN(__glewGetMultiTexParameterivEXT) +#define glGetNamedBufferParameterivEXT GLEW_GET_FUN(__glewGetNamedBufferParameterivEXT) +#define glGetNamedBufferPointervEXT GLEW_GET_FUN(__glewGetNamedBufferPointervEXT) +#define glGetNamedBufferSubDataEXT GLEW_GET_FUN(__glewGetNamedBufferSubDataEXT) +#define glGetNamedFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferAttachmentParameterivEXT) +#define glGetNamedProgramLocalParameterIivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIivEXT) +#define glGetNamedProgramLocalParameterIuivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIuivEXT) +#define glGetNamedProgramLocalParameterdvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterdvEXT) +#define glGetNamedProgramLocalParameterfvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterfvEXT) +#define glGetNamedProgramStringEXT GLEW_GET_FUN(__glewGetNamedProgramStringEXT) +#define glGetNamedProgramivEXT GLEW_GET_FUN(__glewGetNamedProgramivEXT) +#define glGetNamedRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetNamedRenderbufferParameterivEXT) +#define glGetPointerIndexedvEXT GLEW_GET_FUN(__glewGetPointerIndexedvEXT) +#define glGetTextureImageEXT GLEW_GET_FUN(__glewGetTextureImageEXT) +#define glGetTextureLevelParameterfvEXT GLEW_GET_FUN(__glewGetTextureLevelParameterfvEXT) +#define glGetTextureLevelParameterivEXT GLEW_GET_FUN(__glewGetTextureLevelParameterivEXT) +#define glGetTextureParameterIivEXT GLEW_GET_FUN(__glewGetTextureParameterIivEXT) +#define glGetTextureParameterIuivEXT GLEW_GET_FUN(__glewGetTextureParameterIuivEXT) +#define glGetTextureParameterfvEXT GLEW_GET_FUN(__glewGetTextureParameterfvEXT) +#define glGetTextureParameterivEXT GLEW_GET_FUN(__glewGetTextureParameterivEXT) +#define glMapNamedBufferEXT GLEW_GET_FUN(__glewMapNamedBufferEXT) +#define glMatrixFrustumEXT GLEW_GET_FUN(__glewMatrixFrustumEXT) +#define glMatrixLoadIdentityEXT GLEW_GET_FUN(__glewMatrixLoadIdentityEXT) +#define glMatrixLoadTransposedEXT GLEW_GET_FUN(__glewMatrixLoadTransposedEXT) +#define glMatrixLoadTransposefEXT GLEW_GET_FUN(__glewMatrixLoadTransposefEXT) +#define glMatrixLoaddEXT GLEW_GET_FUN(__glewMatrixLoaddEXT) +#define glMatrixLoadfEXT GLEW_GET_FUN(__glewMatrixLoadfEXT) +#define glMatrixMultTransposedEXT GLEW_GET_FUN(__glewMatrixMultTransposedEXT) +#define glMatrixMultTransposefEXT GLEW_GET_FUN(__glewMatrixMultTransposefEXT) +#define glMatrixMultdEXT GLEW_GET_FUN(__glewMatrixMultdEXT) +#define glMatrixMultfEXT GLEW_GET_FUN(__glewMatrixMultfEXT) +#define glMatrixOrthoEXT GLEW_GET_FUN(__glewMatrixOrthoEXT) +#define glMatrixPopEXT GLEW_GET_FUN(__glewMatrixPopEXT) +#define glMatrixPushEXT GLEW_GET_FUN(__glewMatrixPushEXT) +#define glMatrixRotatedEXT GLEW_GET_FUN(__glewMatrixRotatedEXT) +#define glMatrixRotatefEXT GLEW_GET_FUN(__glewMatrixRotatefEXT) +#define glMatrixScaledEXT GLEW_GET_FUN(__glewMatrixScaledEXT) +#define glMatrixScalefEXT GLEW_GET_FUN(__glewMatrixScalefEXT) +#define glMatrixTranslatedEXT GLEW_GET_FUN(__glewMatrixTranslatedEXT) +#define glMatrixTranslatefEXT GLEW_GET_FUN(__glewMatrixTranslatefEXT) +#define glMultiTexBufferEXT GLEW_GET_FUN(__glewMultiTexBufferEXT) +#define glMultiTexCoordPointerEXT GLEW_GET_FUN(__glewMultiTexCoordPointerEXT) +#define glMultiTexEnvfEXT GLEW_GET_FUN(__glewMultiTexEnvfEXT) +#define glMultiTexEnvfvEXT GLEW_GET_FUN(__glewMultiTexEnvfvEXT) +#define glMultiTexEnviEXT GLEW_GET_FUN(__glewMultiTexEnviEXT) +#define glMultiTexEnvivEXT GLEW_GET_FUN(__glewMultiTexEnvivEXT) +#define glMultiTexGendEXT GLEW_GET_FUN(__glewMultiTexGendEXT) +#define glMultiTexGendvEXT GLEW_GET_FUN(__glewMultiTexGendvEXT) +#define glMultiTexGenfEXT GLEW_GET_FUN(__glewMultiTexGenfEXT) +#define glMultiTexGenfvEXT GLEW_GET_FUN(__glewMultiTexGenfvEXT) +#define glMultiTexGeniEXT GLEW_GET_FUN(__glewMultiTexGeniEXT) +#define glMultiTexGenivEXT GLEW_GET_FUN(__glewMultiTexGenivEXT) +#define glMultiTexImage1DEXT GLEW_GET_FUN(__glewMultiTexImage1DEXT) +#define glMultiTexImage2DEXT GLEW_GET_FUN(__glewMultiTexImage2DEXT) +#define glMultiTexImage3DEXT GLEW_GET_FUN(__glewMultiTexImage3DEXT) +#define glMultiTexParameterIivEXT GLEW_GET_FUN(__glewMultiTexParameterIivEXT) +#define glMultiTexParameterIuivEXT GLEW_GET_FUN(__glewMultiTexParameterIuivEXT) +#define glMultiTexParameterfEXT GLEW_GET_FUN(__glewMultiTexParameterfEXT) +#define glMultiTexParameterfvEXT GLEW_GET_FUN(__glewMultiTexParameterfvEXT) +#define glMultiTexParameteriEXT GLEW_GET_FUN(__glewMultiTexParameteriEXT) +#define glMultiTexParameterivEXT GLEW_GET_FUN(__glewMultiTexParameterivEXT) +#define glMultiTexRenderbufferEXT GLEW_GET_FUN(__glewMultiTexRenderbufferEXT) +#define glMultiTexSubImage1DEXT GLEW_GET_FUN(__glewMultiTexSubImage1DEXT) +#define glMultiTexSubImage2DEXT GLEW_GET_FUN(__glewMultiTexSubImage2DEXT) +#define glMultiTexSubImage3DEXT GLEW_GET_FUN(__glewMultiTexSubImage3DEXT) +#define glNamedBufferDataEXT GLEW_GET_FUN(__glewNamedBufferDataEXT) +#define glNamedBufferSubDataEXT GLEW_GET_FUN(__glewNamedBufferSubDataEXT) +#define glNamedFramebufferRenderbufferEXT GLEW_GET_FUN(__glewNamedFramebufferRenderbufferEXT) +#define glNamedFramebufferTexture1DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture1DEXT) +#define glNamedFramebufferTexture2DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture2DEXT) +#define glNamedFramebufferTexture3DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture3DEXT) +#define glNamedFramebufferTextureEXT GLEW_GET_FUN(__glewNamedFramebufferTextureEXT) +#define glNamedFramebufferTextureFaceEXT GLEW_GET_FUN(__glewNamedFramebufferTextureFaceEXT) +#define glNamedFramebufferTextureLayerEXT GLEW_GET_FUN(__glewNamedFramebufferTextureLayerEXT) +#define glNamedProgramLocalParameter4dEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dEXT) +#define glNamedProgramLocalParameter4dvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dvEXT) +#define glNamedProgramLocalParameter4fEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fEXT) +#define glNamedProgramLocalParameter4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fvEXT) +#define glNamedProgramLocalParameterI4iEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4iEXT) +#define glNamedProgramLocalParameterI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4ivEXT) +#define glNamedProgramLocalParameterI4uiEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uiEXT) +#define glNamedProgramLocalParameterI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uivEXT) +#define glNamedProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameters4fvEXT) +#define glNamedProgramLocalParametersI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4ivEXT) +#define glNamedProgramLocalParametersI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4uivEXT) +#define glNamedProgramStringEXT GLEW_GET_FUN(__glewNamedProgramStringEXT) +#define glNamedRenderbufferStorageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageEXT) +#define glNamedRenderbufferStorageMultisampleCoverageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleCoverageEXT) +#define glNamedRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleEXT) +#define glProgramUniform1fEXT GLEW_GET_FUN(__glewProgramUniform1fEXT) +#define glProgramUniform1fvEXT GLEW_GET_FUN(__glewProgramUniform1fvEXT) +#define glProgramUniform1iEXT GLEW_GET_FUN(__glewProgramUniform1iEXT) +#define glProgramUniform1ivEXT GLEW_GET_FUN(__glewProgramUniform1ivEXT) +#define glProgramUniform1uiEXT GLEW_GET_FUN(__glewProgramUniform1uiEXT) +#define glProgramUniform1uivEXT GLEW_GET_FUN(__glewProgramUniform1uivEXT) +#define glProgramUniform2fEXT GLEW_GET_FUN(__glewProgramUniform2fEXT) +#define glProgramUniform2fvEXT GLEW_GET_FUN(__glewProgramUniform2fvEXT) +#define glProgramUniform2iEXT GLEW_GET_FUN(__glewProgramUniform2iEXT) +#define glProgramUniform2ivEXT GLEW_GET_FUN(__glewProgramUniform2ivEXT) +#define glProgramUniform2uiEXT GLEW_GET_FUN(__glewProgramUniform2uiEXT) +#define glProgramUniform2uivEXT GLEW_GET_FUN(__glewProgramUniform2uivEXT) +#define glProgramUniform3fEXT GLEW_GET_FUN(__glewProgramUniform3fEXT) +#define glProgramUniform3fvEXT GLEW_GET_FUN(__glewProgramUniform3fvEXT) +#define glProgramUniform3iEXT GLEW_GET_FUN(__glewProgramUniform3iEXT) +#define glProgramUniform3ivEXT GLEW_GET_FUN(__glewProgramUniform3ivEXT) +#define glProgramUniform3uiEXT GLEW_GET_FUN(__glewProgramUniform3uiEXT) +#define glProgramUniform3uivEXT GLEW_GET_FUN(__glewProgramUniform3uivEXT) +#define glProgramUniform4fEXT GLEW_GET_FUN(__glewProgramUniform4fEXT) +#define glProgramUniform4fvEXT GLEW_GET_FUN(__glewProgramUniform4fvEXT) +#define glProgramUniform4iEXT GLEW_GET_FUN(__glewProgramUniform4iEXT) +#define glProgramUniform4ivEXT GLEW_GET_FUN(__glewProgramUniform4ivEXT) +#define glProgramUniform4uiEXT GLEW_GET_FUN(__glewProgramUniform4uiEXT) +#define glProgramUniform4uivEXT GLEW_GET_FUN(__glewProgramUniform4uivEXT) +#define glProgramUniformMatrix2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2fvEXT) +#define glProgramUniformMatrix2x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3fvEXT) +#define glProgramUniformMatrix2x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4fvEXT) +#define glProgramUniformMatrix3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3fvEXT) +#define glProgramUniformMatrix3x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2fvEXT) +#define glProgramUniformMatrix3x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4fvEXT) +#define glProgramUniformMatrix4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4fvEXT) +#define glProgramUniformMatrix4x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2fvEXT) +#define glProgramUniformMatrix4x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3fvEXT) +#define glPushClientAttribDefaultEXT GLEW_GET_FUN(__glewPushClientAttribDefaultEXT) +#define glTextureBufferEXT GLEW_GET_FUN(__glewTextureBufferEXT) +#define glTextureImage1DEXT GLEW_GET_FUN(__glewTextureImage1DEXT) +#define glTextureImage2DEXT GLEW_GET_FUN(__glewTextureImage2DEXT) +#define glTextureImage3DEXT GLEW_GET_FUN(__glewTextureImage3DEXT) +#define glTextureParameterIivEXT GLEW_GET_FUN(__glewTextureParameterIivEXT) +#define glTextureParameterIuivEXT GLEW_GET_FUN(__glewTextureParameterIuivEXT) +#define glTextureParameterfEXT GLEW_GET_FUN(__glewTextureParameterfEXT) +#define glTextureParameterfvEXT GLEW_GET_FUN(__glewTextureParameterfvEXT) +#define glTextureParameteriEXT GLEW_GET_FUN(__glewTextureParameteriEXT) +#define glTextureParameterivEXT GLEW_GET_FUN(__glewTextureParameterivEXT) +#define glTextureRenderbufferEXT GLEW_GET_FUN(__glewTextureRenderbufferEXT) +#define glTextureSubImage1DEXT GLEW_GET_FUN(__glewTextureSubImage1DEXT) +#define glTextureSubImage2DEXT GLEW_GET_FUN(__glewTextureSubImage2DEXT) +#define glTextureSubImage3DEXT GLEW_GET_FUN(__glewTextureSubImage3DEXT) +#define glUnmapNamedBufferEXT GLEW_GET_FUN(__glewUnmapNamedBufferEXT) + +#define GLEW_EXT_direct_state_access GLEW_GET_VAR(__GLEW_EXT_direct_state_access) + +#endif /* GL_EXT_direct_state_access */ + +/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 + +typedef void (GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint buf, 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 value, GLuint index, GLboolean* data); +typedef void (GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum value, 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 GL_RESCALE_NORMAL_EXT 0x803A + +#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_texture_swizzle ------------------------ */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 + +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 + +#define GLEW_EXT_texture_swizzle GLEW_GET_VAR(__GLEW_EXT_texture_swizzle) + +#endif /* GL_EXT_texture_swizzle */ + +/* --------------------------- 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_transform_feedback ----------------------- */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 + +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F + +typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, char *name); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); + +#define glBeginTransformFeedbackEXT GLEW_GET_FUN(__glewBeginTransformFeedbackEXT) +#define glBindBufferBaseEXT GLEW_GET_FUN(__glewBindBufferBaseEXT) +#define glBindBufferOffsetEXT GLEW_GET_FUN(__glewBindBufferOffsetEXT) +#define glBindBufferRangeEXT GLEW_GET_FUN(__glewBindBufferRangeEXT) +#define glEndTransformFeedbackEXT GLEW_GET_FUN(__glewEndTransformFeedbackEXT) +#define glGetTransformFeedbackVaryingEXT GLEW_GET_FUN(__glewGetTransformFeedbackVaryingEXT) +#define glTransformFeedbackVaryingsEXT GLEW_GET_FUN(__glewTransformFeedbackVaryingsEXT) + +#define GLEW_EXT_transform_feedback GLEW_GET_VAR(__GLEW_EXT_transform_feedback) + +#endif /* GL_EXT_transform_feedback */ + +/* -------------------------- 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_array_bgra ----------------------- */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 + +#define GL_BGRA 0x80E1 + +#define GLEW_EXT_vertex_array_bgra GLEW_GET_VAR(__GLEW_EXT_vertex_array_bgra) + +#endif /* GL_EXT_vertex_array_bgra */ + +/* -------------------------- 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_conditional_render ----------------------- */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 + +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 + +typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVPROC) (void); + +#define glBeginConditionalRenderNV GLEW_GET_FUN(__glewBeginConditionalRenderNV) +#define glEndConditionalRenderNV GLEW_GET_FUN(__glewEndConditionalRenderNV) + +#define GLEW_NV_conditional_render GLEW_GET_VAR(__GLEW_NV_conditional_render) + +#endif /* GL_NV_conditional_render */ + +/* ----------------------- 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_explicit_multisample ---------------------- */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 + +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 + +typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat* val); +typedef void (GLAPIENTRY * PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (GLAPIENTRY * PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); + +#define glGetMultisamplefvNV GLEW_GET_FUN(__glewGetMultisamplefvNV) +#define glSampleMaskIndexedNV GLEW_GET_FUN(__glewSampleMaskIndexedNV) +#define glTexRenderbufferNV GLEW_GET_FUN(__glewTexRenderbufferNV) + +#define GLEW_NV_explicit_multisample GLEW_GET_VAR(__GLEW_NV_explicit_multisample) + +#endif /* GL_NV_explicit_multisample */ + +/* ------------------------------ 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_present_video -------------------------- */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 + +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B + +typedef void (GLAPIENTRY * PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT* params); +typedef void (GLAPIENTRY * PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT* params); +typedef void (GLAPIENTRY * PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (GLAPIENTRY * PFNGLVIDEOPARAMETERIVNVPROC) (GLuint video_slot, GLenum pname, const GLint* params); + +#define glGetVideoi64vNV GLEW_GET_FUN(__glewGetVideoi64vNV) +#define glGetVideoivNV GLEW_GET_FUN(__glewGetVideoivNV) +#define glGetVideoui64vNV GLEW_GET_FUN(__glewGetVideoui64vNV) +#define glGetVideouivNV GLEW_GET_FUN(__glewGetVideouivNV) +#define glPresentFrameDualFillNV GLEW_GET_FUN(__glewPresentFrameDualFillNV) +#define glPresentFrameKeyedNV GLEW_GET_FUN(__glewPresentFrameKeyedNV) +#define glVideoParameterivNV GLEW_GET_FUN(__glewVideoParameterivNV) + +#define GLEW_NV_present_video GLEW_GET_VAR(__GLEW_NV_present_video) + +#endif /* GL_NV_present_video */ + +/* ------------------------ 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_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_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_point_line_texgen ----------------------- */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 + +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 + +#define GLEW_SGIS_point_line_texgen GLEW_GET_VAR(__GLEW_SGIS_point_line_texgen) + +#endif /* GL_SGIS_point_line_texgen */ + +/* ------------------------ 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_convolution_accuracy --------------------- */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 + +#define GL_CONVOLUTION_HINT_SGIX 0x8316 + +#define GLEW_SGIX_convolution_accuracy GLEW_GET_VAR(__GLEW_SGIX_convolution_accuracy) + +#endif /* GL_SGIX_convolution_accuracy */ + +/* ------------------------- 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 PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender; +GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback; +GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEPROC __glewBindBufferBase; +GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange; +GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation; +GLEW_FUN_EXPORT PFNGLCLAMPCOLORPROC __glewClampColor; +GLEW_FUN_EXPORT PFNGLCLEARBUFFERFIPROC __glewClearBufferfi; +GLEW_FUN_EXPORT PFNGLCLEARBUFFERFVPROC __glewClearBufferfv; +GLEW_FUN_EXPORT PFNGLCLEARBUFFERIVPROC __glewClearBufferiv; +GLEW_FUN_EXPORT PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv; +GLEW_FUN_EXPORT PFNGLCOLORMASKIPROC __glewColorMaski; +GLEW_FUN_EXPORT PFNGLDISABLEIPROC __glewDisablei; +GLEW_FUN_EXPORT PFNGLENABLEIPROC __glewEnablei; +GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender; +GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback; +GLEW_FUN_EXPORT PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v; +GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation; +GLEW_FUN_EXPORT PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v; +GLEW_FUN_EXPORT PFNGLGETSTRINGIPROC __glewGetStringi; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv; +GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying; +GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv; +GLEW_FUN_EXPORT PFNGLISENABLEDIPROC __glewIsEnabledi; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv; +GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings; +GLEW_FUN_EXPORT PFNGLUNIFORM1UIPROC __glewUniform1ui; +GLEW_FUN_EXPORT PFNGLUNIFORM1UIVPROC __glewUniform1uiv; +GLEW_FUN_EXPORT PFNGLUNIFORM2UIPROC __glewUniform2ui; +GLEW_FUN_EXPORT PFNGLUNIFORM2UIVPROC __glewUniform2uiv; +GLEW_FUN_EXPORT PFNGLUNIFORM3UIPROC __glewUniform3ui; +GLEW_FUN_EXPORT PFNGLUNIFORM3UIVPROC __glewUniform3uiv; +GLEW_FUN_EXPORT PFNGLUNIFORM4UIPROC __glewUniform4ui; +GLEW_FUN_EXPORT PFNGLUNIFORM4UIVPROC __glewUniform4uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer; + +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 PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB; + +GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer; +GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer; +GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer; +GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus; +GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers; +GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURLAYERPROC __glewFramebufferTexturLayer; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D; +GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers; +GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers; +GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap; +GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv; +GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv; +GLEW_FUN_EXPORT PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer; +GLEW_FUN_EXPORT PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer; +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage; +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample; + +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB; + +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 PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB; + +GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange; +GLEW_FUN_EXPORT PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange; + +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 PFNGLTEXBUFFERARBPROC __glewTexBufferARB; + +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 PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray; +GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays; +GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays; +GLEW_FUN_EXPORT PFNGLISVERTEXARRAYPROC __glewIsVertexArray; + +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 PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT; +GLEW_FUN_EXPORT PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT; +GLEW_FUN_EXPORT PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT; +GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT; +GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT; +GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT; +GLEW_FUN_EXPORT PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT; +GLEW_FUN_EXPORT PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT; +GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT; +GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT; +GLEW_FUN_EXPORT PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT; +GLEW_FUN_EXPORT PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT; +GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT; +GLEW_FUN_EXPORT PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT; +GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT; +GLEW_FUN_EXPORT PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT; +GLEW_FUN_EXPORT PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT; +GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT; +GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT; +GLEW_FUN_EXPORT PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT; +GLEW_FUN_EXPORT PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT; +GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT; +GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT; +GLEW_FUN_EXPORT PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT; +GLEW_FUN_EXPORT PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT; +GLEW_FUN_EXPORT PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT; +GLEW_FUN_EXPORT PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT; +GLEW_FUN_EXPORT PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT; +GLEW_FUN_EXPORT PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT; +GLEW_FUN_EXPORT PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT; +GLEW_FUN_EXPORT PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT; +GLEW_FUN_EXPORT PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT; +GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT; +GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT; +GLEW_FUN_EXPORT PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT; +GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT; +GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT; +GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT; +GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT; +GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT; +GLEW_FUN_EXPORT PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT; +GLEW_FUN_EXPORT PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT; +GLEW_FUN_EXPORT PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT; + +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 PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT; +GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT; +GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT; +GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT; +GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT; +GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT; +GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT; + +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 PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV; +GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV; + +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 PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV; +GLEW_FUN_EXPORT PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV; +GLEW_FUN_EXPORT PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV; + +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 PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV; +GLEW_FUN_EXPORT PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV; +GLEW_FUN_EXPORT PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV; +GLEW_FUN_EXPORT PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV; +GLEW_FUN_EXPORT PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV; +GLEW_FUN_EXPORT PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV; +GLEW_FUN_EXPORT PFNGLVIDEOPARAMETERIVNVPROC __glewVideoParameterivNV; + +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_VERSION_3_0; +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_buffer_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_instanced; +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_framebuffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_geometry_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_instanced_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_range; +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_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_rgtc; +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_texture_rg; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_object; +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_direct_state_access; +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_texture_swizzle; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_transform_feedback; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra; +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_conditional_render; +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_explicit_multisample; +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_present_video; +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_point_line_texgen; +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_convolution_accuracy; +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/openctm/tools/glew/GL/glxew.h b/3rdparty/openctm/tools/glew/GL/glxew.h new file mode 100644 index 000000000..eeb4b280d --- /dev/null +++ b/3rdparty/openctm/tools/glew/GL/glxew.h @@ -0,0 +1,1397 @@ +/* +** 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 + +typedef unsigned int GLXVideoDeviceNV; + +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_create_context ------------------------ */ + +#ifndef GLX_ARB_create_context +#define GLX_ARB_create_context 1 + +#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 +#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define GLX_CONTEXT_FLAGS_ARB 0x2094 + +typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); + +#define glXCreateContextAttribsARB GLXEW_GET_FUN(__glewXCreateContextAttribsARB) + +#define GLXEW_ARB_create_context GLXEW_GET_VAR(__GLXEW_ARB_create_context) + +#endif /* GLX_ARB_create_context */ + +/* ------------------------- 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_framebuffer_sRGB ----------------------- */ + +#ifndef GLX_ARB_framebuffer_sRGB +#define GLX_ARB_framebuffer_sRGB 1 + +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 + +#define GLXEW_ARB_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_ARB_framebuffer_sRGB) + +#endif /* GLX_ARB_framebuffer_sRGB */ + +/* ------------------------ 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_present_video ------------------------- */ + +#ifndef GLX_NV_present_video +#define GLX_NV_present_video 1 + +#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 + +typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display* dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); +typedef unsigned int* ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements); + +#define glXBindVideoDeviceNV GLXEW_GET_FUN(__glewXBindVideoDeviceNV) +#define glXEnumerateVideoDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoDevicesNV) + +#define GLXEW_NV_present_video GLXEW_GET_VAR(__GLXEW_NV_present_video) + +#endif /* GLX_NV_present_video */ + +/* --------------------------- GLX_NV_swap_group --------------------------- */ + +#ifndef GLX_NV_swap_group +#define GLX_NV_swap_group 1 + +typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display* dpy, GLuint group, GLuint barrier); +typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint group); +typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display* dpy, int screen, GLuint *count); +typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display* dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); +typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); +typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display* dpy, int screen); + +#define glXBindSwapBarrierNV GLXEW_GET_FUN(__glewXBindSwapBarrierNV) +#define glXJoinSwapGroupNV GLXEW_GET_FUN(__glewXJoinSwapGroupNV) +#define glXQueryFrameCountNV GLXEW_GET_FUN(__glewXQueryFrameCountNV) +#define glXQueryMaxSwapGroupsNV GLXEW_GET_FUN(__glewXQueryMaxSwapGroupsNV) +#define glXQuerySwapGroupNV GLXEW_GET_FUN(__glewXQuerySwapGroupNV) +#define glXResetFrameCountNV GLXEW_GET_FUN(__glewXResetFrameCountNV) + +#define GLXEW_NV_swap_group GLXEW_GET_VAR(__GLXEW_NV_swap_group) + +#endif /* GLX_NV_swap_group */ + +/* ----------------------- 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_NV_video_output -------------------------- */ + +#ifndef GLX_NV_video_output +#define GLX_NV_video_output 1 + +#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 +#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 +#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 +#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 +#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 +#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA +#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB +#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC + +typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); +typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); +typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); +typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice); +typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display* dpy, GLXPbuffer pbuf); +typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display* dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); + +#define glXBindVideoImageNV GLXEW_GET_FUN(__glewXBindVideoImageNV) +#define glXGetVideoDeviceNV GLXEW_GET_FUN(__glewXGetVideoDeviceNV) +#define glXGetVideoInfoNV GLXEW_GET_FUN(__glewXGetVideoInfoNV) +#define glXReleaseVideoDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoDeviceNV) +#define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV) +#define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV) + +#define GLXEW_NV_video_output GLXEW_GET_VAR(__GLXEW_NV_video_output) + +#endif /* GLX_NV_video_output */ + +/* -------------------------- 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 PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB; + +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 PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV; +extern PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV; + +extern PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV; +extern PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV; +extern PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV; +extern PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV; +extern PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV; +extern PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV; + +extern PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV; +extern PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV; + +extern PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV; +extern PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV; +extern PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV; +extern PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV; +extern PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV; +extern PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV; + +#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_create_context; +GLXEW_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; +GLXEW_EXPORT GLboolean __GLXEW_ARB_framebuffer_sRGB; +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_present_video; +GLXEW_EXPORT GLboolean __GLXEW_NV_swap_group; +GLXEW_EXPORT GLboolean __GLXEW_NV_vertex_array_range; +GLXEW_EXPORT GLboolean __GLXEW_NV_video_output; +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/openctm/tools/glew/GL/wglew.h b/3rdparty/openctm/tools/glew/GL/wglew.h new file mode 100644 index 000000000..d9dd3f25f --- /dev/null +++ b/3rdparty/openctm/tools/glew/GL/wglew.h @@ -0,0 +1,1165 @@ +/* +** 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. +*/ + +/* +** 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 __wglew_h__ +#define __wglew_h__ +#define __WGLEW_H__ + +#ifdef __wglext_h_ +#error wglext.h included before wglew.h +#endif + +#define __wglext_h_ + +#if !defined(APIENTRY) && !defined(__CYGWIN__) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +#include +#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 + +#ifdef __cplusplus +extern "C" { +#endif + +/* -------------------------- WGL_3DFX_multisample ------------------------- */ + +#ifndef WGL_3DFX_multisample +#define WGL_3DFX_multisample 1 + +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLES_3DFX 0x2061 + +#define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample) + +#endif /* WGL_3DFX_multisample */ + +/* ------------------------- WGL_3DL_stereo_control ------------------------ */ + +#ifndef WGL_3DL_stereo_control +#define WGL_3DL_stereo_control 1 + +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 + +typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); + +#define wglSetStereoEmitterState3DL WGLEW_GET_FUN(__wglewSetStereoEmitterState3DL) + +#define WGLEW_3DL_stereo_control WGLEW_GET_VAR(__WGLEW_3DL_stereo_control) + +#endif /* WGL_3DL_stereo_control */ + +/* ------------------------- WGL_ARB_buffer_region ------------------------- */ + +#ifndef WGL_ARB_buffer_region +#define WGL_ARB_buffer_region 1 + +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 + +typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); +typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); +typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); + +#define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB) +#define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB) +#define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB) +#define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB) + +#define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region) + +#endif /* WGL_ARB_buffer_region */ + +/* ------------------------- WGL_ARB_create_context ------------------------ */ + +#ifndef WGL_ARB_create_context +#define WGL_ARB_create_context 1 + +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 + +typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList); + +#define wglCreateContextAttribsARB WGLEW_GET_FUN(__wglewCreateContextAttribsARB) + +#define WGLEW_ARB_create_context WGLEW_GET_VAR(__WGLEW_ARB_create_context) + +#endif /* WGL_ARB_create_context */ + +/* ----------------------- WGL_ARB_extensions_string ----------------------- */ + +#ifndef WGL_ARB_extensions_string +#define WGL_ARB_extensions_string 1 + +typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); + +#define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB) + +#define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string) + +#endif /* WGL_ARB_extensions_string */ + +/* ------------------------ WGL_ARB_framebuffer_sRGB ----------------------- */ + +#ifndef WGL_ARB_framebuffer_sRGB +#define WGL_ARB_framebuffer_sRGB 1 + +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 + +#define WGLEW_ARB_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_ARB_framebuffer_sRGB) + +#endif /* WGL_ARB_framebuffer_sRGB */ + +/* ----------------------- WGL_ARB_make_current_read ----------------------- */ + +#ifndef WGL_ARB_make_current_read +#define WGL_ARB_make_current_read 1 + +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 + +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +#define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB) +#define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB) + +#define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read) + +#endif /* WGL_ARB_make_current_read */ + +/* -------------------------- WGL_ARB_multisample -------------------------- */ + +#ifndef WGL_ARB_multisample +#define WGL_ARB_multisample 1 + +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 + +#define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample) + +#endif /* WGL_ARB_multisample */ + +/* ---------------------------- WGL_ARB_pbuffer ---------------------------- */ + +#ifndef WGL_ARB_pbuffer +#define WGL_ARB_pbuffer 1 + +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_LOST_ARB 0x2036 + +DECLARE_HANDLE(HPBUFFERARB); + +typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int* piValue); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); + +#define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB) +#define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB) +#define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB) +#define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB) +#define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB) + +#define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer) + +#endif /* WGL_ARB_pbuffer */ + +/* -------------------------- WGL_ARB_pixel_format ------------------------- */ + +#ifndef WGL_ARB_pixel_format +#define WGL_ARB_pixel_format 1 + +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B + +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues); + +#define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB) +#define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB) +#define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB) + +#define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format) + +#endif /* WGL_ARB_pixel_format */ + +/* ----------------------- WGL_ARB_pixel_format_float ---------------------- */ + +#ifndef WGL_ARB_pixel_format_float +#define WGL_ARB_pixel_format_float 1 + +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 + +#define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float) + +#endif /* WGL_ARB_pixel_format_float */ + +/* ------------------------- WGL_ARB_render_texture ------------------------ */ + +#ifndef WGL_ARB_render_texture +#define WGL_ARB_render_texture 1 + +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 + +typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int* piAttribList); + +#define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB) +#define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB) +#define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB) + +#define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture) + +#endif /* WGL_ARB_render_texture */ + +/* ----------------------- WGL_ATI_pixel_format_float ---------------------- */ + +#ifndef WGL_ATI_pixel_format_float +#define WGL_ATI_pixel_format_float 1 + +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 + +#define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float) + +#endif /* WGL_ATI_pixel_format_float */ + +/* -------------------- WGL_ATI_render_texture_rectangle ------------------- */ + +#ifndef WGL_ATI_render_texture_rectangle +#define WGL_ATI_render_texture_rectangle 1 + +#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 + +#define WGLEW_ATI_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_ATI_render_texture_rectangle) + +#endif /* WGL_ATI_render_texture_rectangle */ + +/* -------------------------- WGL_EXT_depth_float -------------------------- */ + +#ifndef WGL_EXT_depth_float +#define WGL_EXT_depth_float 1 + +#define WGL_DEPTH_FLOAT_EXT 0x2040 + +#define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float) + +#endif /* WGL_EXT_depth_float */ + +/* ---------------------- WGL_EXT_display_color_table ---------------------- */ + +#ifndef WGL_EXT_display_color_table +#define WGL_EXT_display_color_table 1 + +typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef void (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (GLushort* table, GLuint length); + +#define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT) +#define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT) +#define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT) +#define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT) + +#define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table) + +#endif /* WGL_EXT_display_color_table */ + +/* ----------------------- WGL_EXT_extensions_string ----------------------- */ + +#ifndef WGL_EXT_extensions_string +#define WGL_EXT_extensions_string 1 + +typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); + +#define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT) + +#define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string) + +#endif /* WGL_EXT_extensions_string */ + +/* ------------------------ WGL_EXT_framebuffer_sRGB ----------------------- */ + +#ifndef WGL_EXT_framebuffer_sRGB +#define WGL_EXT_framebuffer_sRGB 1 + +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 + +#define WGLEW_EXT_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_EXT_framebuffer_sRGB) + +#endif /* WGL_EXT_framebuffer_sRGB */ + +/* ----------------------- WGL_EXT_make_current_read ----------------------- */ + +#ifndef WGL_EXT_make_current_read +#define WGL_EXT_make_current_read 1 + +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 + +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +#define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT) +#define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT) + +#define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read) + +#endif /* WGL_EXT_make_current_read */ + +/* -------------------------- WGL_EXT_multisample -------------------------- */ + +#ifndef WGL_EXT_multisample +#define WGL_EXT_multisample 1 + +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_SAMPLES_EXT 0x2042 + +#define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample) + +#endif /* WGL_EXT_multisample */ + +/* ---------------------------- WGL_EXT_pbuffer ---------------------------- */ + +#ifndef WGL_EXT_pbuffer +#define WGL_EXT_pbuffer 1 + +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 + +DECLARE_HANDLE(HPBUFFEREXT); + +typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); + +#define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT) +#define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT) +#define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT) +#define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT) +#define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT) + +#define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer) + +#endif /* WGL_EXT_pbuffer */ + +/* -------------------------- WGL_EXT_pixel_format ------------------------- */ + +#ifndef WGL_EXT_pixel_format +#define WGL_EXT_pixel_format 1 + +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_STEREO_EXT 0x2012 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_COLORINDEX_EXT 0x202C + +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues); + +#define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT) +#define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT) +#define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT) + +#define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format) + +#endif /* WGL_EXT_pixel_format */ + +/* ------------------- WGL_EXT_pixel_format_packed_float ------------------- */ + +#ifndef WGL_EXT_pixel_format_packed_float +#define WGL_EXT_pixel_format_packed_float 1 + +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 + +#define WGLEW_EXT_pixel_format_packed_float WGLEW_GET_VAR(__WGLEW_EXT_pixel_format_packed_float) + +#endif /* WGL_EXT_pixel_format_packed_float */ + +/* -------------------------- WGL_EXT_swap_control ------------------------- */ + +#ifndef WGL_EXT_swap_control +#define WGL_EXT_swap_control 1 + +typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); +typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); + +#define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT) +#define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT) + +#define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control) + +#endif /* WGL_EXT_swap_control */ + +/* --------------------- WGL_I3D_digital_video_control --------------------- */ + +#ifndef WGL_I3D_digital_video_control +#define WGL_I3D_digital_video_control 1 + +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 + +typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); +typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); + +#define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D) +#define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D) + +#define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control) + +#endif /* WGL_I3D_digital_video_control */ + +/* ----------------------------- WGL_I3D_gamma ----------------------------- */ + +#ifndef WGL_I3D_gamma +#define WGL_I3D_gamma 1 + +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F + +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue); +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); + +#define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D) +#define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D) +#define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D) +#define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D) + +#define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma) + +#endif /* WGL_I3D_gamma */ + +/* ---------------------------- WGL_I3D_genlock ---------------------------- */ + +#ifndef WGL_I3D_genlock +#define WGL_I3D_genlock 1 + +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C + +typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT* uRate); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT* uDelay); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT* uEdge); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT* uSource); +typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL* pFlag); +typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay); + +#define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D) +#define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D) +#define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D) +#define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D) +#define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D) +#define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D) +#define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D) +#define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D) +#define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D) +#define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D) +#define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D) +#define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D) + +#define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock) + +#endif /* WGL_I3D_genlock */ + +/* -------------------------- WGL_I3D_image_buffer ------------------------- */ + +#ifndef WGL_I3D_image_buffer +#define WGL_I3D_image_buffer 1 + +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 + +typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count); +typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); +typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); +typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, LPVOID* pAddress, UINT count); + +#define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D) +#define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D) +#define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D) +#define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D) + +#define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer) + +#endif /* WGL_I3D_image_buffer */ + +/* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */ + +#ifndef WGL_I3D_swap_frame_lock +#define WGL_I3D_swap_frame_lock 1 + +typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (VOID); +typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL* pFlag); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL* pFlag); + +#define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D) +#define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D) +#define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D) +#define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D) + +#define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock) + +#endif /* WGL_I3D_swap_frame_lock */ + +/* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */ + +#ifndef WGL_I3D_swap_frame_usage +#define WGL_I3D_swap_frame_usage 1 + +typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float* pUsage); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); + +#define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D) +#define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D) +#define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D) +#define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D) + +#define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage) + +#endif /* WGL_I3D_swap_frame_usage */ + +/* -------------------------- WGL_NV_float_buffer -------------------------- */ + +#ifndef WGL_NV_float_buffer +#define WGL_NV_float_buffer 1 + +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 + +#define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer) + +#endif /* WGL_NV_float_buffer */ + +/* -------------------------- WGL_NV_gpu_affinity -------------------------- */ + +#ifndef WGL_NV_gpu_affinity +#define WGL_NV_gpu_affinity 1 + +#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 + +DECLARE_HANDLE(HGPUNV); +typedef struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +} GPU_DEVICE, *PGPU_DEVICE; + +typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); +typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); +typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); +typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); + +#define wglCreateAffinityDCNV WGLEW_GET_FUN(__wglewCreateAffinityDCNV) +#define wglDeleteDCNV WGLEW_GET_FUN(__wglewDeleteDCNV) +#define wglEnumGpuDevicesNV WGLEW_GET_FUN(__wglewEnumGpuDevicesNV) +#define wglEnumGpusFromAffinityDCNV WGLEW_GET_FUN(__wglewEnumGpusFromAffinityDCNV) +#define wglEnumGpusNV WGLEW_GET_FUN(__wglewEnumGpusNV) + +#define WGLEW_NV_gpu_affinity WGLEW_GET_VAR(__WGLEW_NV_gpu_affinity) + +#endif /* WGL_NV_gpu_affinity */ + +/* -------------------------- WGL_NV_present_video ------------------------- */ + +#ifndef WGL_NV_present_video +#define WGL_NV_present_video 1 + +#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 + +DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); + +typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int* piAttribList); +typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDc, HVIDEOOUTPUTDEVICENV* phDeviceList); +typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int* piValue); + +#define wglBindVideoDeviceNV WGLEW_GET_FUN(__wglewBindVideoDeviceNV) +#define wglEnumerateVideoDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoDevicesNV) +#define wglQueryCurrentContextNV WGLEW_GET_FUN(__wglewQueryCurrentContextNV) + +#define WGLEW_NV_present_video WGLEW_GET_VAR(__WGLEW_NV_present_video) + +#endif /* WGL_NV_present_video */ + +/* ---------------------- WGL_NV_render_depth_texture ---------------------- */ + +#ifndef WGL_NV_render_depth_texture +#define WGL_NV_render_depth_texture 1 + +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 + +#define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture) + +#endif /* WGL_NV_render_depth_texture */ + +/* -------------------- WGL_NV_render_texture_rectangle -------------------- */ + +#ifndef WGL_NV_render_texture_rectangle +#define WGL_NV_render_texture_rectangle 1 + +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 + +#define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle) + +#endif /* WGL_NV_render_texture_rectangle */ + +/* --------------------------- WGL_NV_swap_group --------------------------- */ + +#ifndef WGL_NV_swap_group +#define WGL_NV_swap_group 1 + +typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); +typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint* count); +typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint* maxGroups, GLuint *maxBarriers); +typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint* group); +typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); + +#define wglBindSwapBarrierNV WGLEW_GET_FUN(__wglewBindSwapBarrierNV) +#define wglJoinSwapGroupNV WGLEW_GET_FUN(__wglewJoinSwapGroupNV) +#define wglQueryFrameCountNV WGLEW_GET_FUN(__wglewQueryFrameCountNV) +#define wglQueryMaxSwapGroupsNV WGLEW_GET_FUN(__wglewQueryMaxSwapGroupsNV) +#define wglQuerySwapGroupNV WGLEW_GET_FUN(__wglewQuerySwapGroupNV) +#define wglResetFrameCountNV WGLEW_GET_FUN(__wglewResetFrameCountNV) + +#define WGLEW_NV_swap_group WGLEW_GET_VAR(__WGLEW_NV_swap_group) + +#endif /* WGL_NV_swap_group */ + +/* ----------------------- WGL_NV_vertex_array_range ----------------------- */ + +#ifndef WGL_NV_vertex_array_range +#define WGL_NV_vertex_array_range 1 + +typedef void * (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); +typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); + +#define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV) +#define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV) + +#define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range) + +#endif /* WGL_NV_vertex_array_range */ + +/* -------------------------- WGL_NV_video_output -------------------------- */ + +#ifndef WGL_NV_video_output +#define WGL_NV_video_output 1 + +#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 +#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 +#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 +#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 +#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 +#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 +#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define WGL_VIDEO_OUT_FRAME 0x20C8 +#define WGL_VIDEO_OUT_FIELD_1 0x20C9 +#define WGL_VIDEO_OUT_FIELD_2 0x20CA +#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB +#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC + +DECLARE_HANDLE(HPVIDEODEV); + +typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV* hVideoDevice); +typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long* pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long* pulCounterPbuffer, BOOL bBlock); + +#define wglBindVideoImageNV WGLEW_GET_FUN(__wglewBindVideoImageNV) +#define wglGetVideoDeviceNV WGLEW_GET_FUN(__wglewGetVideoDeviceNV) +#define wglGetVideoInfoNV WGLEW_GET_FUN(__wglewGetVideoInfoNV) +#define wglReleaseVideoDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoDeviceNV) +#define wglReleaseVideoImageNV WGLEW_GET_FUN(__wglewReleaseVideoImageNV) +#define wglSendPbufferToVideoNV WGLEW_GET_FUN(__wglewSendPbufferToVideoNV) + +#define WGLEW_NV_video_output WGLEW_GET_VAR(__WGLEW_NV_video_output) + +#endif /* WGL_NV_video_output */ + +/* -------------------------- WGL_OML_sync_control ------------------------- */ + +#ifndef WGL_OML_sync_control +#define WGL_OML_sync_control 1 + +typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32* numerator, INT32 *denominator); +typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc); +typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc); +typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc); + +#define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML) +#define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML) +#define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML) +#define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML) +#define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML) +#define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML) + +#define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control) + +#endif /* WGL_OML_sync_control */ + +/* ------------------------------------------------------------------------- */ + +#ifdef GLEW_MX +#define WGLEW_EXPORT +#else +#define WGLEW_EXPORT GLEWAPI +#endif /* GLEW_MX */ + +#ifdef GLEW_MX +struct WGLEWContextStruct +{ +#endif /* GLEW_MX */ + +WGLEW_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL; + +WGLEW_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB; +WGLEW_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB; +WGLEW_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB; +WGLEW_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB; + +WGLEW_EXPORT PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB; + +WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB; + +WGLEW_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB; +WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB; + +WGLEW_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB; +WGLEW_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB; +WGLEW_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB; +WGLEW_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB; +WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB; + +WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB; + +WGLEW_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB; +WGLEW_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB; +WGLEW_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB; + +WGLEW_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT; +WGLEW_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT; +WGLEW_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT; +WGLEW_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT; + +WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT; + +WGLEW_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT; +WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT; + +WGLEW_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT; +WGLEW_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT; +WGLEW_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT; +WGLEW_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT; +WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT; + +WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT; +WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT; + +WGLEW_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT; +WGLEW_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT; + +WGLEW_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D; +WGLEW_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D; + +WGLEW_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D; +WGLEW_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D; +WGLEW_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D; +WGLEW_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D; + +WGLEW_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D; +WGLEW_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D; +WGLEW_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D; +WGLEW_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D; +WGLEW_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D; +WGLEW_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D; +WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D; +WGLEW_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D; +WGLEW_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D; + +WGLEW_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D; +WGLEW_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D; +WGLEW_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D; +WGLEW_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D; + +WGLEW_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D; +WGLEW_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D; +WGLEW_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D; +WGLEW_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D; + +WGLEW_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D; +WGLEW_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D; +WGLEW_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D; +WGLEW_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D; + +WGLEW_EXPORT PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV; +WGLEW_EXPORT PFNWGLDELETEDCNVPROC __wglewDeleteDCNV; +WGLEW_EXPORT PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV; +WGLEW_EXPORT PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV; +WGLEW_EXPORT PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV; + +WGLEW_EXPORT PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV; +WGLEW_EXPORT PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV; +WGLEW_EXPORT PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV; + +WGLEW_EXPORT PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV; +WGLEW_EXPORT PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV; +WGLEW_EXPORT PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV; +WGLEW_EXPORT PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV; +WGLEW_EXPORT PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV; +WGLEW_EXPORT PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV; + +WGLEW_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV; +WGLEW_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV; + +WGLEW_EXPORT PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV; +WGLEW_EXPORT PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV; +WGLEW_EXPORT PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV; +WGLEW_EXPORT PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV; +WGLEW_EXPORT PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV; +WGLEW_EXPORT PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV; + +WGLEW_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML; +WGLEW_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML; +WGLEW_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML; +WGLEW_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML; +WGLEW_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML; +WGLEW_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML; +WGLEW_EXPORT GLboolean __WGLEW_3DFX_multisample; +WGLEW_EXPORT GLboolean __WGLEW_3DL_stereo_control; +WGLEW_EXPORT GLboolean __WGLEW_ARB_buffer_region; +WGLEW_EXPORT GLboolean __WGLEW_ARB_create_context; +WGLEW_EXPORT GLboolean __WGLEW_ARB_extensions_string; +WGLEW_EXPORT GLboolean __WGLEW_ARB_framebuffer_sRGB; +WGLEW_EXPORT GLboolean __WGLEW_ARB_make_current_read; +WGLEW_EXPORT GLboolean __WGLEW_ARB_multisample; +WGLEW_EXPORT GLboolean __WGLEW_ARB_pbuffer; +WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format; +WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format_float; +WGLEW_EXPORT GLboolean __WGLEW_ARB_render_texture; +WGLEW_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; +WGLEW_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; +WGLEW_EXPORT GLboolean __WGLEW_EXT_depth_float; +WGLEW_EXPORT GLboolean __WGLEW_EXT_display_color_table; +WGLEW_EXPORT GLboolean __WGLEW_EXT_extensions_string; +WGLEW_EXPORT GLboolean __WGLEW_EXT_framebuffer_sRGB; +WGLEW_EXPORT GLboolean __WGLEW_EXT_make_current_read; +WGLEW_EXPORT GLboolean __WGLEW_EXT_multisample; +WGLEW_EXPORT GLboolean __WGLEW_EXT_pbuffer; +WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format; +WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format_packed_float; +WGLEW_EXPORT GLboolean __WGLEW_EXT_swap_control; +WGLEW_EXPORT GLboolean __WGLEW_I3D_digital_video_control; +WGLEW_EXPORT GLboolean __WGLEW_I3D_gamma; +WGLEW_EXPORT GLboolean __WGLEW_I3D_genlock; +WGLEW_EXPORT GLboolean __WGLEW_I3D_image_buffer; +WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock; +WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage; +WGLEW_EXPORT GLboolean __WGLEW_NV_float_buffer; +WGLEW_EXPORT GLboolean __WGLEW_NV_gpu_affinity; +WGLEW_EXPORT GLboolean __WGLEW_NV_present_video; +WGLEW_EXPORT GLboolean __WGLEW_NV_render_depth_texture; +WGLEW_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle; +WGLEW_EXPORT GLboolean __WGLEW_NV_swap_group; +WGLEW_EXPORT GLboolean __WGLEW_NV_vertex_array_range; +WGLEW_EXPORT GLboolean __WGLEW_NV_video_output; +WGLEW_EXPORT GLboolean __WGLEW_OML_sync_control; + +#ifdef GLEW_MX +}; /* WGLEWContextStruct */ +#endif /* GLEW_MX */ + +/* ------------------------------------------------------------------------- */ + +#ifdef GLEW_MX + +typedef struct WGLEWContextStruct WGLEWContext; +GLEWAPI GLenum wglewContextInit (WGLEWContext* ctx); +GLEWAPI GLboolean wglewContextIsSupported (WGLEWContext* ctx, const char* name); + +#define wglewInit() wglewContextInit(wglewGetContext()) +#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) + +#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) +#define WGLEW_GET_FUN(x) wglewGetContext()->x + +#else /* GLEW_MX */ + +#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) +#define WGLEW_GET_FUN(x) x + +GLEWAPI GLboolean wglewIsSupported (const char* name); + +#endif /* GLEW_MX */ + +GLEWAPI GLboolean wglewGetExtension (const char* name); + +#ifdef __cplusplus +} +#endif + +#undef GLEWAPI + +#endif /* __wglew_h__ */ diff --git a/3rdparty/openctm/tools/glew/LICENSE.txt b/3rdparty/openctm/tools/glew/LICENSE.txt new file mode 100644 index 000000000..89d74b801 --- /dev/null +++ b/3rdparty/openctm/tools/glew/LICENSE.txt @@ -0,0 +1,73 @@ +The OpenGL Extension Wrangler Library +Copyright (C) 2002-2007, Milan Ikits +Copyright (C) 2002-2007, 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. diff --git a/3rdparty/openctm/tools/glew/glew.c b/3rdparty/openctm/tools/glew/glew.c new file mode 100644 index 000000000..0fa974de1 --- /dev/null +++ b/3rdparty/openctm/tools/glew/glew.c @@ -0,0 +1,12180 @@ +/* +** 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 +#if defined(_WIN32) +# include +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +# include +#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] == '\0' || 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; + +PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender = NULL; +PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback = NULL; +PFNGLBINDBUFFERBASEPROC __glewBindBufferBase = NULL; +PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange = NULL; +PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation = NULL; +PFNGLCLAMPCOLORPROC __glewClampColor = NULL; +PFNGLCLEARBUFFERFIPROC __glewClearBufferfi = NULL; +PFNGLCLEARBUFFERFVPROC __glewClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC __glewClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv = NULL; +PFNGLCOLORMASKIPROC __glewColorMaski = NULL; +PFNGLDISABLEIPROC __glewDisablei = NULL; +PFNGLENABLEIPROC __glewEnablei = NULL; +PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender = NULL; +PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback = NULL; +PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v = NULL; +PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation = NULL; +PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v = NULL; +PFNGLGETSTRINGIPROC __glewGetStringi = NULL; +PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv = NULL; +PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying = NULL; +PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv = NULL; +PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv = NULL; +PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv = NULL; +PFNGLISENABLEDIPROC __glewIsEnabledi = NULL; +PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv = NULL; +PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings = NULL; +PFNGLUNIFORM1UIPROC __glewUniform1ui = NULL; +PFNGLUNIFORM1UIVPROC __glewUniform1uiv = NULL; +PFNGLUNIFORM2UIPROC __glewUniform2ui = NULL; +PFNGLUNIFORM2UIVPROC __glewUniform2uiv = NULL; +PFNGLUNIFORM3UIPROC __glewUniform3ui = NULL; +PFNGLUNIFORM3UIVPROC __glewUniform3uiv = NULL; +PFNGLUNIFORM4UIPROC __glewUniform4ui = NULL; +PFNGLUNIFORM4UIVPROC __glewUniform4uiv = NULL; +PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i = NULL; +PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv = NULL; +PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui = NULL; +PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv = NULL; +PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i = NULL; +PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv = NULL; +PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui = NULL; +PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv = NULL; +PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i = NULL; +PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv = NULL; +PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui = NULL; +PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv = NULL; +PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv = NULL; +PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i = NULL; +PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv = NULL; +PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv = NULL; +PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv = NULL; +PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui = NULL; +PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv = NULL; +PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer = 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; + +PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB = NULL; +PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB = NULL; + +PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer = NULL; +PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer = NULL; +PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus = NULL; +PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers = NULL; +PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERTEXTURLAYERPROC __glewFramebufferTexturLayer = NULL; +PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D = NULL; +PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D = NULL; +PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers = NULL; +PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers = NULL; +PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv = NULL; +PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer = NULL; +PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer = NULL; +PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample = NULL; + +PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB = NULL; +PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB = NULL; +PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB = 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; + +PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB = NULL; + +PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange = NULL; +PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange = 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; + +PFNGLTEXBUFFERARBPROC __glewTexBufferARB = 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; + +PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray = NULL; +PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays = NULL; +PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays = NULL; +PFNGLISVERTEXARRAYPROC __glewIsVertexArray = 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; + +PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT = NULL; +PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT = NULL; +PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT = NULL; +PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT = NULL; +PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT = NULL; +PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT = NULL; +PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT = NULL; +PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT = NULL; +PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT = NULL; +PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT = NULL; +PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT = NULL; +PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT = NULL; +PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT = NULL; +PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT = NULL; +PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT = NULL; +PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT = NULL; +PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT = NULL; +PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT = NULL; +PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT = NULL; +PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT = NULL; +PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT = NULL; +PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT = NULL; +PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT = NULL; +PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT = NULL; +PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT = NULL; +PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT = NULL; +PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT = NULL; +PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT = NULL; +PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT = NULL; +PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT = NULL; +PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT = NULL; +PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT = NULL; +PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT = NULL; +PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT = NULL; +PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT = NULL; +PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT = NULL; +PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT = NULL; +PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT = NULL; +PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT = NULL; +PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT = NULL; +PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT = NULL; +PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT = NULL; +PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT = NULL; +PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT = NULL; +PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT = NULL; +PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT = NULL; +PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT = NULL; +PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT = NULL; +PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT = NULL; +PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT = NULL; +PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT = NULL; +PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT = NULL; +PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT = NULL; +PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT = NULL; +PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT = NULL; +PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT = NULL; +PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT = NULL; +PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT = NULL; +PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT = NULL; +PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT = NULL; +PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT = NULL; +PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT = NULL; +PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT = NULL; +PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT = NULL; +PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT = NULL; +PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT = NULL; +PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT = NULL; +PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT = NULL; +PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT = NULL; +PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT = NULL; +PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT = NULL; +PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT = NULL; +PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT = NULL; +PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT = NULL; +PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT = NULL; +PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT = NULL; +PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT = NULL; +PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT = NULL; +PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT = NULL; +PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT = NULL; +PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT = NULL; +PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT = NULL; +PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT = NULL; +PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT = NULL; +PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT = NULL; +PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT = NULL; +PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT = NULL; +PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT = NULL; +PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT = NULL; +PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT = NULL; +PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT = NULL; +PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT = NULL; +PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT = NULL; +PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT = NULL; +PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT = NULL; +PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT = NULL; +PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT = NULL; +PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT = NULL; +PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT = NULL; +PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT = NULL; +PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT = NULL; +PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT = NULL; +PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT = NULL; +PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT = NULL; +PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT = NULL; +PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT = NULL; +PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT = NULL; +PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT = NULL; +PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT = NULL; +PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT = NULL; +PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT = NULL; +PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT = NULL; +PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT = NULL; +PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT = NULL; +PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT = NULL; +PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT = NULL; +PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT = NULL; +PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT = NULL; +PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT = NULL; +PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT = NULL; +PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT = NULL; +PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT = NULL; +PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT = NULL; +PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT = NULL; +PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT = NULL; +PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT = NULL; +PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT = NULL; +PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT = NULL; +PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT = NULL; +PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT = NULL; +PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT = NULL; +PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT = NULL; +PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT = NULL; +PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT = NULL; +PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT = NULL; +PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT = NULL; +PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT = NULL; +PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT = NULL; +PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT = NULL; +PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT = NULL; +PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT = NULL; +PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT = NULL; +PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT = NULL; +PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT = NULL; +PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT = 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; + +PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT = NULL; +PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT = NULL; +PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT = NULL; +PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT = NULL; +PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT = 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; + +PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV = NULL; +PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV = 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; + +PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV = NULL; +PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV = NULL; +PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV = 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; + +PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV = NULL; +PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV = NULL; +PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV = NULL; +PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV = NULL; +PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV = NULL; +PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV = NULL; +PFNGLVIDEOPARAMETERIVNVPROC __glewVideoParameterivNV = 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_VERSION_3_0 = 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_buffer_float = GL_FALSE; +GLboolean __GLEW_ARB_depth_texture = GL_FALSE; +GLboolean __GLEW_ARB_draw_buffers = GL_FALSE; +GLboolean __GLEW_ARB_draw_instanced = 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_framebuffer_object = GL_FALSE; +GLboolean __GLEW_ARB_framebuffer_sRGB = GL_FALSE; +GLboolean __GLEW_ARB_geometry_shader4 = GL_FALSE; +GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; +GLboolean __GLEW_ARB_half_float_vertex = GL_FALSE; +GLboolean __GLEW_ARB_imaging = GL_FALSE; +GLboolean __GLEW_ARB_instanced_arrays = GL_FALSE; +GLboolean __GLEW_ARB_map_buffer_range = 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_buffer_object = GL_FALSE; +GLboolean __GLEW_ARB_texture_compression = GL_FALSE; +GLboolean __GLEW_ARB_texture_compression_rgtc = 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_texture_rg = GL_FALSE; +GLboolean __GLEW_ARB_transpose_matrix = GL_FALSE; +GLboolean __GLEW_ARB_vertex_array_object = 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_direct_state_access = 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_texture_swizzle = GL_FALSE; +GLboolean __GLEW_EXT_timer_query = GL_FALSE; +GLboolean __GLEW_EXT_transform_feedback = GL_FALSE; +GLboolean __GLEW_EXT_vertex_array = GL_FALSE; +GLboolean __GLEW_EXT_vertex_array_bgra = 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_conditional_render = 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_explicit_multisample = 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_present_video = 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_point_line_texgen = 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_convolution_accuracy = 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_VERSION_3_0 + +static GLboolean _glewInit_GL_VERSION_3_0 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRender")) == NULL) || r; + r = ((glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedback")) == NULL) || r; + r = ((glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBase")) == NULL) || r; + r = ((glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRange")) == NULL) || r; + r = ((glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocation")) == NULL) || r; + r = ((glClampColor = (PFNGLCLAMPCOLORPROC)glewGetProcAddress((const GLubyte*)"glClampColor")) == NULL) || r; + r = ((glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfi")) == NULL) || r; + r = ((glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfv")) == NULL) || r; + r = ((glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferiv")) == NULL) || r; + r = ((glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferuiv")) == NULL) || r; + r = ((glColorMaski = (PFNGLCOLORMASKIPROC)glewGetProcAddress((const GLubyte*)"glColorMaski")) == NULL) || r; + r = ((glDisablei = (PFNGLDISABLEIPROC)glewGetProcAddress((const GLubyte*)"glDisablei")) == NULL) || r; + r = ((glEnablei = (PFNGLENABLEIPROC)glewGetProcAddress((const GLubyte*)"glEnablei")) == NULL) || r; + r = ((glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRender")) == NULL) || r; + r = ((glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedback")) == NULL) || r; + r = ((glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)glewGetProcAddress((const GLubyte*)"glGetBooleani_v")) == NULL) || r; + r = ((glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocation")) == NULL) || r; + r = ((glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)glewGetProcAddress((const GLubyte*)"glGetIntegeri_v")) == NULL) || r; + r = ((glGetStringi = (PFNGLGETSTRINGIPROC)glewGetProcAddress((const GLubyte*)"glGetStringi")) == NULL) || r; + r = ((glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIiv")) == NULL) || r; + r = ((glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuiv")) == NULL) || r; + r = ((glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVarying")) == NULL) || r; + r = ((glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuiv")) == NULL) || r; + r = ((glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIiv")) == NULL) || r; + r = ((glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuiv")) == NULL) || r; + r = ((glIsEnabledi = (PFNGLISENABLEDIPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledi")) == NULL) || r; + r = ((glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIiv")) == NULL) || r; + r = ((glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuiv")) == NULL) || r; + r = ((glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryings")) == NULL) || r; + r = ((glUniform1ui = (PFNGLUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui")) == NULL) || r; + r = ((glUniform1uiv = (PFNGLUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiv")) == NULL) || r; + r = ((glUniform2ui = (PFNGLUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui")) == NULL) || r; + r = ((glUniform2uiv = (PFNGLUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiv")) == NULL) || r; + r = ((glUniform3ui = (PFNGLUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui")) == NULL) || r; + r = ((glUniform3uiv = (PFNGLUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiv")) == NULL) || r; + r = ((glUniform4ui = (PFNGLUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui")) == NULL) || r; + r = ((glUniform4uiv = (PFNGLUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiv")) == NULL) || r; + r = ((glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1i")) == NULL) || r; + r = ((glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iv")) == NULL) || r; + r = ((glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ui")) == NULL) || r; + r = ((glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiv")) == NULL) || r; + r = ((glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2i")) == NULL) || r; + r = ((glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iv")) == NULL) || r; + r = ((glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ui")) == NULL) || r; + r = ((glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiv")) == NULL) || r; + r = ((glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3i")) == NULL) || r; + r = ((glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iv")) == NULL) || r; + r = ((glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ui")) == NULL) || r; + r = ((glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiv")) == NULL) || r; + r = ((glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bv")) == NULL) || r; + r = ((glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4i")) == NULL) || r; + r = ((glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iv")) == NULL) || r; + r = ((glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4sv")) == NULL) || r; + r = ((glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubv")) == NULL) || r; + r = ((glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ui")) == NULL) || r; + r = ((glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiv")) == NULL) || r; + r = ((glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usv")) == NULL) || r; + r = ((glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointer")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_3_0 */ + +#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_buffer_float + +#endif /* GL_ARB_depth_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_draw_instanced + +static GLboolean _glewInit_GL_ARB_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedARB")) == NULL) || r; + r = ((glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_draw_instanced */ + +#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_framebuffer_object + +static GLboolean _glewInit_GL_ARB_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindFramebuffer")) == NULL) || r; + r = ((glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbuffer")) == NULL) || r; + r = ((glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebuffer")) == NULL) || r; + r = ((glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatus")) == NULL) || r; + r = ((glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffers")) == NULL) || r; + r = ((glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffers")) == NULL) || r; + r = ((glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbuffer")) == NULL) || r; + r = ((glFramebufferTexturLayer = (PFNGLFRAMEBUFFERTEXTURLAYERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexturLayer")) == NULL) || r; + r = ((glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1D")) == NULL) || r; + r = ((glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2D")) == NULL) || r; + r = ((glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3D")) == NULL) || r; + r = ((glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffers")) == NULL) || r; + r = ((glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffers")) == NULL) || r; + r = ((glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmap")) == NULL) || r; + r = ((glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameteriv")) == NULL) || r; + r = ((glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameteriv")) == NULL) || r; + r = ((glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsFramebuffer")) == NULL) || r; + r = ((glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbuffer")) == NULL) || r; + r = ((glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorage")) == NULL) || r; + r = ((glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisample")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_framebuffer_object */ + +#ifdef GL_ARB_framebuffer_sRGB + +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifdef GL_ARB_geometry_shader4 + +static GLboolean _glewInit_GL_ARB_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureARB")) == NULL) || r; + r = ((glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceARB")) == NULL) || r; + r = ((glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerARB")) == NULL) || r; + r = ((glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_geometry_shader4 */ + +#ifdef GL_ARB_half_float_pixel + +#endif /* GL_ARB_half_float_pixel */ + +#ifdef GL_ARB_half_float_vertex + +#endif /* GL_ARB_half_float_vertex */ + +#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_instanced_arrays + +static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_instanced_arrays */ + +#ifdef GL_ARB_map_buffer_range + +static GLboolean _glewInit_GL_ARB_map_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRange")) == NULL) || r; + r = ((glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glMapBufferRange")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_map_buffer_range */ + +#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_buffer_object + +static GLboolean _glewInit_GL_ARB_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexBufferARB = (PFNGLTEXBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glTexBufferARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_texture_buffer_object */ + +#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_compression_rgtc + +#endif /* GL_ARB_texture_compression_rgtc */ + +#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_texture_rg + +#endif /* GL_ARB_texture_rg */ + +#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_array_object + +static GLboolean _glewInit_GL_ARB_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArray")) == NULL) || r; + r = ((glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArrays")) == NULL) || r; + r = ((glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArrays")) == NULL) || r; + r = ((glIsVertexArray = (PFNGLISVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArray")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_array_object */ + +#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_direct_state_access + +static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindMultiTextureEXT")) == NULL) || r; + r = ((glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckNamedFramebufferStatusEXT")) == NULL) || r; + r = ((glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glClientAttribDefaultEXT")) == NULL) || r; + r = ((glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage1DEXT")) == NULL) || r; + r = ((glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage2DEXT")) == NULL) || r; + r = ((glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage3DEXT")) == NULL) || r; + r = ((glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage1DEXT")) == NULL) || r; + r = ((glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage2DEXT")) == NULL) || r; + r = ((glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage3DEXT")) == NULL) || r; + r = ((glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage1DEXT")) == NULL) || r; + r = ((glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage2DEXT")) == NULL) || r; + r = ((glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage3DEXT")) == NULL) || r; + r = ((glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage1DEXT")) == NULL) || r; + r = ((glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage2DEXT")) == NULL) || r; + r = ((glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage3DEXT")) == NULL) || r; + r = ((glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage1DEXT")) == NULL) || r; + r = ((glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage2DEXT")) == NULL) || r; + r = ((glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage1DEXT")) == NULL) || r; + r = ((glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage2DEXT")) == NULL) || r; + r = ((glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage3DEXT")) == NULL) || r; + r = ((glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage1DEXT")) == NULL) || r; + r = ((glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage2DEXT")) == NULL) || r; + r = ((glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage1DEXT")) == NULL) || r; + r = ((glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage2DEXT")) == NULL) || r; + r = ((glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage3DEXT")) == NULL) || r; + r = ((glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateIndexedEXT")) == NULL) || r; + r = ((glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateIndexedEXT")) == NULL) || r; + r = ((glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBufferEXT")) == NULL) || r; + r = ((glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBuffersEXT")) == NULL) || r; + r = ((glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferReadBufferEXT")) == NULL) || r; + r = ((glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMultiTexMipmapEXT")) == NULL) || r; + r = ((glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateTextureMipmapEXT")) == NULL) || r; + r = ((glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedMultiTexImageEXT")) == NULL) || r; + r = ((glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTextureImageEXT")) == NULL) || r; + r = ((glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoubleIndexedvEXT")) == NULL) || r; + r = ((glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloatIndexedvEXT")) == NULL) || r; + r = ((glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameterivEXT")) == NULL) || r; + r = ((glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvfvEXT")) == NULL) || r; + r = ((glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvivEXT")) == NULL) || r; + r = ((glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGendvEXT")) == NULL) || r; + r = ((glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenfvEXT")) == NULL) || r; + r = ((glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenivEXT")) == NULL) || r; + r = ((glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexImageEXT")) == NULL) || r; + r = ((glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterfvEXT")) == NULL) || r; + r = ((glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterivEXT")) == NULL) || r; + r = ((glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIivEXT")) == NULL) || r; + r = ((glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIuivEXT")) == NULL) || r; + r = ((glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterfvEXT")) == NULL) || r; + r = ((glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterivEXT")) == NULL) || r; + r = ((glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterivEXT")) == NULL) || r; + r = ((glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferPointervEXT")) == NULL) || r; + r = ((glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferSubDataEXT")) == NULL) || r; + r = ((glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferAttachmentParameterivEXT")) == NULL) || r; + r = ((glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIivEXT")) == NULL) || r; + r = ((glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIuivEXT")) == NULL) || r; + r = ((glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterdvEXT")) == NULL) || r; + r = ((glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterfvEXT")) == NULL) || r; + r = ((glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramStringEXT")) == NULL) || r; + r = ((glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramivEXT")) == NULL) || r; + r = ((glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedRenderbufferParameterivEXT")) == NULL) || r; + r = ((glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointerIndexedvEXT")) == NULL) || r; + r = ((glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureImageEXT")) == NULL) || r; + r = ((glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterfvEXT")) == NULL) || r; + r = ((glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterivEXT")) == NULL) || r; + r = ((glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIivEXT")) == NULL) || r; + r = ((glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIuivEXT")) == NULL) || r; + r = ((glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterfvEXT")) == NULL) || r; + r = ((glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterivEXT")) == NULL) || r; + r = ((glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferEXT")) == NULL) || r; + r = ((glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixFrustumEXT")) == NULL) || r; + r = ((glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadIdentityEXT")) == NULL) || r; + r = ((glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposedEXT")) == NULL) || r; + r = ((glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposefEXT")) == NULL) || r; + r = ((glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoaddEXT")) == NULL) || r; + r = ((glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadfEXT")) == NULL) || r; + r = ((glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposedEXT")) == NULL) || r; + r = ((glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposefEXT")) == NULL) || r; + r = ((glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultdEXT")) == NULL) || r; + r = ((glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultfEXT")) == NULL) || r; + r = ((glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixOrthoEXT")) == NULL) || r; + r = ((glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPopEXT")) == NULL) || r; + r = ((glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPushEXT")) == NULL) || r; + r = ((glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatedEXT")) == NULL) || r; + r = ((glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatefEXT")) == NULL) || r; + r = ((glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScaledEXT")) == NULL) || r; + r = ((glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScalefEXT")) == NULL) || r; + r = ((glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatedEXT")) == NULL) || r; + r = ((glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatefEXT")) == NULL) || r; + r = ((glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexBufferEXT")) == NULL) || r; + r = ((glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordPointerEXT")) == NULL) || r; + r = ((glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfEXT")) == NULL) || r; + r = ((glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfvEXT")) == NULL) || r; + r = ((glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnviEXT")) == NULL) || r; + r = ((glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvivEXT")) == NULL) || r; + r = ((glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendEXT")) == NULL) || r; + r = ((glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendvEXT")) == NULL) || r; + r = ((glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfEXT")) == NULL) || r; + r = ((glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfvEXT")) == NULL) || r; + r = ((glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGeniEXT")) == NULL) || r; + r = ((glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenivEXT")) == NULL) || r; + r = ((glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage1DEXT")) == NULL) || r; + r = ((glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage2DEXT")) == NULL) || r; + r = ((glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage3DEXT")) == NULL) || r; + r = ((glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIivEXT")) == NULL) || r; + r = ((glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIuivEXT")) == NULL) || r; + r = ((glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfEXT")) == NULL) || r; + r = ((glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfvEXT")) == NULL) || r; + r = ((glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameteriEXT")) == NULL) || r; + r = ((glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterivEXT")) == NULL) || r; + r = ((glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexRenderbufferEXT")) == NULL) || r; + r = ((glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage1DEXT")) == NULL) || r; + r = ((glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage2DEXT")) == NULL) || r; + r = ((glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage3DEXT")) == NULL) || r; + r = ((glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferDataEXT")) == NULL) || r; + r = ((glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferSubDataEXT")) == NULL) || r; + r = ((glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferRenderbufferEXT")) == NULL) || r; + r = ((glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture1DEXT")) == NULL) || r; + r = ((glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture2DEXT")) == NULL) || r; + r = ((glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture3DEXT")) == NULL) || r; + r = ((glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureEXT")) == NULL) || r; + r = ((glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureFaceEXT")) == NULL) || r; + r = ((glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureLayerEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dvEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fvEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4iEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4ivEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uiEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uivEXT")) == NULL) || r; + r = ((glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameters4fvEXT")) == NULL) || r; + r = ((glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4ivEXT")) == NULL) || r; + r = ((glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4uivEXT")) == NULL) || r; + r = ((glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramStringEXT")) == NULL) || r; + r = ((glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageEXT")) == NULL) || r; + r = ((glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleCoverageEXT")) == NULL) || r; + r = ((glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleEXT")) == NULL) || r; + r = ((glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fEXT")) == NULL) || r; + r = ((glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fvEXT")) == NULL) || r; + r = ((glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iEXT")) == NULL) || r; + r = ((glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ivEXT")) == NULL) || r; + r = ((glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiEXT")) == NULL) || r; + r = ((glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uivEXT")) == NULL) || r; + r = ((glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fEXT")) == NULL) || r; + r = ((glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fvEXT")) == NULL) || r; + r = ((glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iEXT")) == NULL) || r; + r = ((glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ivEXT")) == NULL) || r; + r = ((glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiEXT")) == NULL) || r; + r = ((glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uivEXT")) == NULL) || r; + r = ((glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fEXT")) == NULL) || r; + r = ((glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fvEXT")) == NULL) || r; + r = ((glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iEXT")) == NULL) || r; + r = ((glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ivEXT")) == NULL) || r; + r = ((glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiEXT")) == NULL) || r; + r = ((glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uivEXT")) == NULL) || r; + r = ((glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fEXT")) == NULL) || r; + r = ((glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fvEXT")) == NULL) || r; + r = ((glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iEXT")) == NULL) || r; + r = ((glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ivEXT")) == NULL) || r; + r = ((glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiEXT")) == NULL) || r; + r = ((glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uivEXT")) == NULL) || r; + r = ((glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fvEXT")) == NULL) || r; + r = ((glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fvEXT")) == NULL) || r; + r = ((glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glPushClientAttribDefaultEXT")) == NULL) || r; + r = ((glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferEXT")) == NULL) || r; + r = ((glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage1DEXT")) == NULL) || r; + r = ((glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DEXT")) == NULL) || r; + r = ((glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DEXT")) == NULL) || r; + r = ((glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIivEXT")) == NULL) || r; + r = ((glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIuivEXT")) == NULL) || r; + r = ((glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfEXT")) == NULL) || r; + r = ((glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfvEXT")) == NULL) || r; + r = ((glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameteriEXT")) == NULL) || r; + r = ((glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterivEXT")) == NULL) || r; + r = ((glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureRenderbufferEXT")) == NULL) || r; + r = ((glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage1DEXT")) == NULL) || r; + r = ((glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage2DEXT")) == NULL) || r; + r = ((glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage3DEXT")) == NULL) || r; + r = ((glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUnmapNamedBufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_direct_state_access */ + +#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_texture_swizzle + +#endif /* GL_EXT_texture_swizzle */ + +#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_transform_feedback + +static GLboolean _glewInit_GL_EXT_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackEXT")) == NULL) || r; + r = ((glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseEXT")) == NULL) || r; + r = ((glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetEXT")) == NULL) || r; + r = ((glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeEXT")) == NULL) || r; + r = ((glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackEXT")) == NULL) || r; + r = ((glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingEXT")) == NULL) || r; + r = ((glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_transform_feedback */ + +#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_array_bgra + +#endif /* GL_EXT_vertex_array_bgra */ + +#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_conditional_render + +static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNV")) == NULL) || r; + r = ((glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_conditional_render */ + +#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_explicit_multisample + +static GLboolean _glewInit_GL_NV_explicit_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefvNV")) == NULL) || r; + r = ((glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskIndexedNV")) == NULL) || r; + r = ((glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glTexRenderbufferNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_explicit_multisample */ + +#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_present_video + +static GLboolean _glewInit_GL_NV_present_video (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoi64vNV")) == NULL) || r; + r = ((glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoivNV")) == NULL) || r; + r = ((glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoui64vNV")) == NULL) || r; + r = ((glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideouivNV")) == NULL) || r; + r = ((glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameDualFillNV")) == NULL) || r; + r = ((glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameKeyedNV")) == NULL) || r; + r = ((glVideoParameterivNV = (PFNGLVIDEOPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_present_video */ + +#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_point_line_texgen + +#endif /* GL_SGIS_point_line_texgen */ + +#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_convolution_accuracy + +#endif /* GL_SGIX_convolution_accuracy */ + +#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_VERSION_3_0 + if (glewExperimental || GLEW_VERSION_3_0) CONST_CAST(GLEW_VERSION_3_0) = !_glewInit_GL_VERSION_3_0(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_3_0 */ +#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_buffer_float + CONST_CAST(GLEW_ARB_depth_buffer_float) = glewGetExtension("GL_ARB_depth_buffer_float"); +#endif /* GL_ARB_depth_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_draw_instanced + CONST_CAST(GLEW_ARB_draw_instanced) = glewGetExtension("GL_ARB_draw_instanced"); + if (glewExperimental || GLEW_ARB_draw_instanced) CONST_CAST(GLEW_ARB_draw_instanced) = !_glewInit_GL_ARB_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_draw_instanced */ +#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_framebuffer_object + CONST_CAST(GLEW_ARB_framebuffer_object) = glewGetExtension("GL_ARB_framebuffer_object"); + if (glewExperimental || GLEW_ARB_framebuffer_object) CONST_CAST(GLEW_ARB_framebuffer_object) = !_glewInit_GL_ARB_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_framebuffer_object */ +#ifdef GL_ARB_framebuffer_sRGB + CONST_CAST(GLEW_ARB_framebuffer_sRGB) = glewGetExtension("GL_ARB_framebuffer_sRGB"); +#endif /* GL_ARB_framebuffer_sRGB */ +#ifdef GL_ARB_geometry_shader4 + CONST_CAST(GLEW_ARB_geometry_shader4) = glewGetExtension("GL_ARB_geometry_shader4"); + if (glewExperimental || GLEW_ARB_geometry_shader4) CONST_CAST(GLEW_ARB_geometry_shader4) = !_glewInit_GL_ARB_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_geometry_shader4 */ +#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_half_float_vertex + CONST_CAST(GLEW_ARB_half_float_vertex) = glewGetExtension("GL_ARB_half_float_vertex"); +#endif /* GL_ARB_half_float_vertex */ +#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_instanced_arrays + CONST_CAST(GLEW_ARB_instanced_arrays) = glewGetExtension("GL_ARB_instanced_arrays"); + if (glewExperimental || GLEW_ARB_instanced_arrays) CONST_CAST(GLEW_ARB_instanced_arrays) = !_glewInit_GL_ARB_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_instanced_arrays */ +#ifdef GL_ARB_map_buffer_range + CONST_CAST(GLEW_ARB_map_buffer_range) = glewGetExtension("GL_ARB_map_buffer_range"); + if (glewExperimental || GLEW_ARB_map_buffer_range) CONST_CAST(GLEW_ARB_map_buffer_range) = !_glewInit_GL_ARB_map_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_map_buffer_range */ +#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_buffer_object + CONST_CAST(GLEW_ARB_texture_buffer_object) = glewGetExtension("GL_ARB_texture_buffer_object"); + if (glewExperimental || GLEW_ARB_texture_buffer_object) CONST_CAST(GLEW_ARB_texture_buffer_object) = !_glewInit_GL_ARB_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_texture_buffer_object */ +#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_compression_rgtc + CONST_CAST(GLEW_ARB_texture_compression_rgtc) = glewGetExtension("GL_ARB_texture_compression_rgtc"); +#endif /* GL_ARB_texture_compression_rgtc */ +#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_texture_rg + CONST_CAST(GLEW_ARB_texture_rg) = glewGetExtension("GL_ARB_texture_rg"); +#endif /* GL_ARB_texture_rg */ +#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_array_object + CONST_CAST(GLEW_ARB_vertex_array_object) = glewGetExtension("GL_ARB_vertex_array_object"); + if (glewExperimental || GLEW_ARB_vertex_array_object) CONST_CAST(GLEW_ARB_vertex_array_object) = !_glewInit_GL_ARB_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_array_object */ +#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_direct_state_access + CONST_CAST(GLEW_EXT_direct_state_access) = glewGetExtension("GL_EXT_direct_state_access"); + if (glewExperimental || GLEW_EXT_direct_state_access) CONST_CAST(GLEW_EXT_direct_state_access) = !_glewInit_GL_EXT_direct_state_access(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_direct_state_access */ +#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_texture_swizzle + CONST_CAST(GLEW_EXT_texture_swizzle) = glewGetExtension("GL_EXT_texture_swizzle"); +#endif /* GL_EXT_texture_swizzle */ +#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_transform_feedback + CONST_CAST(GLEW_EXT_transform_feedback) = glewGetExtension("GL_EXT_transform_feedback"); + if (glewExperimental || GLEW_EXT_transform_feedback) CONST_CAST(GLEW_EXT_transform_feedback) = !_glewInit_GL_EXT_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_transform_feedback */ +#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_array_bgra + CONST_CAST(GLEW_EXT_vertex_array_bgra) = glewGetExtension("GL_EXT_vertex_array_bgra"); +#endif /* GL_EXT_vertex_array_bgra */ +#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_conditional_render + CONST_CAST(GLEW_NV_conditional_render) = glewGetExtension("GL_NV_conditional_render"); + if (glewExperimental || GLEW_NV_conditional_render) CONST_CAST(GLEW_NV_conditional_render) = !_glewInit_GL_NV_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_conditional_render */ +#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_explicit_multisample + CONST_CAST(GLEW_NV_explicit_multisample) = glewGetExtension("GL_NV_explicit_multisample"); + if (glewExperimental || GLEW_NV_explicit_multisample) CONST_CAST(GLEW_NV_explicit_multisample) = !_glewInit_GL_NV_explicit_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_explicit_multisample */ +#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_present_video + CONST_CAST(GLEW_NV_present_video) = glewGetExtension("GL_NV_present_video"); + if (glewExperimental || GLEW_NV_present_video) CONST_CAST(GLEW_NV_present_video) = !_glewInit_GL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_present_video */ +#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_point_line_texgen + CONST_CAST(GLEW_SGIS_point_line_texgen) = glewGetExtension("GL_SGIS_point_line_texgen"); +#endif /* GL_SGIS_point_line_texgen */ +#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_convolution_accuracy + CONST_CAST(GLEW_SGIX_convolution_accuracy) = glewGetExtension("GL_SGIX_convolution_accuracy"); +#endif /* GL_SGIX_convolution_accuracy */ +#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; + +PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB = 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; + +PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV = NULL; +PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV = NULL; +PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV = NULL; + +PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV = NULL; +PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV = NULL; +PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV = NULL; +PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV = NULL; +PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV = NULL; +PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV = NULL; + +PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV = NULL; +PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV = NULL; + +PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV = NULL; +PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV = NULL; +PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV = NULL; +PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV = NULL; +PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV = NULL; +PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV = 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_create_context = GL_FALSE; +GLboolean __WGLEW_ARB_extensions_string = GL_FALSE; +GLboolean __WGLEW_ARB_framebuffer_sRGB = 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_present_video = GL_FALSE; +GLboolean __WGLEW_NV_render_depth_texture = GL_FALSE; +GLboolean __WGLEW_NV_render_texture_rectangle = GL_FALSE; +GLboolean __WGLEW_NV_swap_group = GL_FALSE; +GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE; +GLboolean __WGLEW_NV_video_output = 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_create_context + +static GLboolean _glewInit_WGL_ARB_create_context (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateContextAttribsARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_create_context */ + +#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_framebuffer_sRGB + +#endif /* WGL_ARB_framebuffer_sRGB */ + +#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_present_video + +static GLboolean _glewInit_WGL_NV_present_video (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindVideoDeviceNV = (PFNWGLBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoDeviceNV")) == NULL) || r; + r = ((wglEnumerateVideoDevicesNV = (PFNWGLENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoDevicesNV")) == NULL) || r; + r = ((wglQueryCurrentContextNV = (PFNWGLQUERYCURRENTCONTEXTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryCurrentContextNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_present_video */ + +#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_swap_group + +static GLboolean _glewInit_WGL_NV_swap_group (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindSwapBarrierNV = (PFNWGLBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"wglBindSwapBarrierNV")) == NULL) || r; + r = ((wglJoinSwapGroupNV = (PFNWGLJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglJoinSwapGroupNV")) == NULL) || r; + r = ((wglQueryFrameCountNV = (PFNWGLQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameCountNV")) == NULL) || r; + r = ((wglQueryMaxSwapGroupsNV = (PFNWGLQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryMaxSwapGroupsNV")) == NULL) || r; + r = ((wglQuerySwapGroupNV = (PFNWGLQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglQuerySwapGroupNV")) == NULL) || r; + r = ((wglResetFrameCountNV = (PFNWGLRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglResetFrameCountNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_swap_group */ + +#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_NV_video_output + +static GLboolean _glewInit_WGL_NV_video_output (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindVideoImageNV = (PFNWGLBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoImageNV")) == NULL) || r; + r = ((wglGetVideoDeviceNV = (PFNWGLGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoDeviceNV")) == NULL) || r; + r = ((wglGetVideoInfoNV = (PFNWGLGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoInfoNV")) == NULL) || r; + r = ((wglReleaseVideoDeviceNV = (PFNWGLRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoDeviceNV")) == NULL) || r; + r = ((wglReleaseVideoImageNV = (PFNWGLRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoImageNV")) == NULL) || r; + r = ((wglSendPbufferToVideoNV = (PFNWGLSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"wglSendPbufferToVideoNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_video_output */ + +#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_create_context + CONST_CAST(WGLEW_ARB_create_context) = wglewGetExtension("WGL_ARB_create_context"); + if (glewExperimental || WGLEW_ARB_create_context|| crippled) CONST_CAST(WGLEW_ARB_create_context)= !_glewInit_WGL_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_create_context */ +#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_framebuffer_sRGB + CONST_CAST(WGLEW_ARB_framebuffer_sRGB) = wglewGetExtension("WGL_ARB_framebuffer_sRGB"); +#endif /* WGL_ARB_framebuffer_sRGB */ +#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_present_video + CONST_CAST(WGLEW_NV_present_video) = wglewGetExtension("WGL_NV_present_video"); + if (glewExperimental || WGLEW_NV_present_video|| crippled) CONST_CAST(WGLEW_NV_present_video)= !_glewInit_WGL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_present_video */ +#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_swap_group + CONST_CAST(WGLEW_NV_swap_group) = wglewGetExtension("WGL_NV_swap_group"); + if (glewExperimental || WGLEW_NV_swap_group|| crippled) CONST_CAST(WGLEW_NV_swap_group)= !_glewInit_WGL_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_swap_group */ +#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_NV_video_output + CONST_CAST(WGLEW_NV_video_output) = wglewGetExtension("WGL_NV_video_output"); + if (glewExperimental || WGLEW_NV_video_output|| crippled) CONST_CAST(WGLEW_NV_video_output)= !_glewInit_WGL_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_video_output */ +#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; + +PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB = 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; + +PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV = NULL; +PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV = NULL; + +PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV = NULL; +PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV = NULL; +PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV = NULL; +PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV = NULL; +PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV = NULL; +PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV = NULL; + +PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV = NULL; +PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV = NULL; + +PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV = NULL; +PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV = NULL; +PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV = NULL; +PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV = NULL; +PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV = NULL; +PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV = 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_create_context = GL_FALSE; +GLboolean __GLXEW_ARB_fbconfig_float = GL_FALSE; +GLboolean __GLXEW_ARB_framebuffer_sRGB = 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_present_video = GL_FALSE; +GLboolean __GLXEW_NV_swap_group = GL_FALSE; +GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; +GLboolean __GLXEW_NV_video_output = 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_create_context + +static GLboolean _glewInit_GLX_ARB_create_context (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB")) == NULL) || r; + + return r; +} + +#endif /* GLX_ARB_create_context */ + +#ifdef GLX_ARB_fbconfig_float + +#endif /* GLX_ARB_fbconfig_float */ + +#ifdef GLX_ARB_framebuffer_sRGB + +#endif /* GLX_ARB_framebuffer_sRGB */ + +#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_present_video + +static GLboolean _glewInit_GLX_NV_present_video (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindVideoDeviceNV = (PFNGLXBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoDeviceNV")) == NULL) || r; + r = ((glXEnumerateVideoDevicesNV = (PFNGLXENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoDevicesNV")) == NULL) || r; + + return r; +} + +#endif /* GLX_NV_present_video */ + +#ifdef GLX_NV_swap_group + +static GLboolean _glewInit_GLX_NV_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindSwapBarrierNV = (PFNGLXBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierNV")) == NULL) || r; + r = ((glXJoinSwapGroupNV = (PFNGLXJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupNV")) == NULL) || r; + r = ((glXQueryFrameCountNV = (PFNGLXQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryFrameCountNV")) == NULL) || r; + r = ((glXQueryMaxSwapGroupsNV = (PFNGLXQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapGroupsNV")) == NULL) || r; + r = ((glXQuerySwapGroupNV = (PFNGLXQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXQuerySwapGroupNV")) == NULL) || r; + r = ((glXResetFrameCountNV = (PFNGLXRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXResetFrameCountNV")) == NULL) || r; + + return r; +} + +#endif /* GLX_NV_swap_group */ + +#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_NV_video_output + +static GLboolean _glewInit_GLX_NV_video_output (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindVideoImageNV = (PFNGLXBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoImageNV")) == NULL) || r; + r = ((glXGetVideoDeviceNV = (PFNGLXGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoDeviceNV")) == NULL) || r; + r = ((glXGetVideoInfoNV = (PFNGLXGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoInfoNV")) == NULL) || r; + r = ((glXReleaseVideoDeviceNV = (PFNGLXRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoDeviceNV")) == NULL) || r; + r = ((glXReleaseVideoImageNV = (PFNGLXRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoImageNV")) == NULL) || r; + r = ((glXSendPbufferToVideoNV = (PFNGLXSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"glXSendPbufferToVideoNV")) == NULL) || r; + + return r; +} + +#endif /* GLX_NV_video_output */ + +#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_create_context + CONST_CAST(GLXEW_ARB_create_context) = glxewGetExtension("GLX_ARB_create_context"); + if (glewExperimental || GLXEW_ARB_create_context) CONST_CAST(GLXEW_ARB_create_context) = !_glewInit_GLX_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_ARB_create_context */ +#ifdef GLX_ARB_fbconfig_float + CONST_CAST(GLXEW_ARB_fbconfig_float) = glxewGetExtension("GLX_ARB_fbconfig_float"); +#endif /* GLX_ARB_fbconfig_float */ +#ifdef GLX_ARB_framebuffer_sRGB + CONST_CAST(GLXEW_ARB_framebuffer_sRGB) = glxewGetExtension("GLX_ARB_framebuffer_sRGB"); +#endif /* GLX_ARB_framebuffer_sRGB */ +#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_present_video + CONST_CAST(GLXEW_NV_present_video) = glxewGetExtension("GLX_NV_present_video"); + if (glewExperimental || GLXEW_NV_present_video) CONST_CAST(GLXEW_NV_present_video) = !_glewInit_GLX_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_NV_present_video */ +#ifdef GLX_NV_swap_group + CONST_CAST(GLXEW_NV_swap_group) = glxewGetExtension("GLX_NV_swap_group"); + if (glewExperimental || GLXEW_NV_swap_group) CONST_CAST(GLXEW_NV_swap_group) = !_glewInit_GLX_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_NV_swap_group */ +#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_NV_video_output + CONST_CAST(GLXEW_NV_video_output) = glxewGetExtension("GLX_NV_video_output"); + if (glewExperimental || GLXEW_NV_video_output) CONST_CAST(GLXEW_NV_video_output) = !_glewInit_GLX_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_NV_video_output */ +#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.1", + (const GLubyte*)"1", + (const GLubyte*)"5", + (const GLubyte*)"1" + }; + 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 +#ifdef GL_VERSION_3_0 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_0", 3)) + { + ret = GLEW_VERSION_3_0; + 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_buffer_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) + { + ret = GLEW_ARB_depth_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_draw_instanced + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) + { + ret = GLEW_ARB_draw_instanced; + 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_framebuffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) + { + ret = GLEW_ARB_framebuffer_object; + continue; + } +#endif +#ifdef GL_ARB_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = GLEW_ARB_framebuffer_sRGB; + continue; + } +#endif +#ifdef GL_ARB_geometry_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) + { + ret = GLEW_ARB_geometry_shader4; + 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_half_float_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_vertex", 17)) + { + ret = GLEW_ARB_half_float_vertex; + continue; + } +#endif +#ifdef GL_ARB_imaging + if (_glewStrSame3(&pos, &len, (const GLubyte*)"imaging", 7)) + { + ret = GLEW_ARB_imaging; + continue; + } +#endif +#ifdef GL_ARB_instanced_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) + { + ret = GLEW_ARB_instanced_arrays; + continue; + } +#endif +#ifdef GL_ARB_map_buffer_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_range", 16)) + { + ret = GLEW_ARB_map_buffer_range; + 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_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) + { + ret = GLEW_ARB_texture_buffer_object; + 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_compression_rgtc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) + { + ret = GLEW_ARB_texture_compression_rgtc; + 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_texture_rg + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rg", 10)) + { + ret = GLEW_ARB_texture_rg; + 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_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) + { + ret = GLEW_ARB_vertex_array_object; + 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_direct_state_access + if (_glewStrSame3(&pos, &len, (const GLubyte*)"direct_state_access", 19)) + { + ret = GLEW_EXT_direct_state_access; + 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_texture_swizzle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) + { + ret = GLEW_EXT_texture_swizzle; + 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_transform_feedback + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) + { + ret = GLEW_EXT_transform_feedback; + 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_array_bgra + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) + { + ret = GLEW_EXT_vertex_array_bgra; + 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_conditional_render + if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) + { + ret = GLEW_NV_conditional_render; + 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_explicit_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_multisample", 20)) + { + ret = GLEW_NV_explicit_multisample; + 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_present_video + if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) + { + ret = GLEW_NV_present_video; + 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_point_line_texgen + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_line_texgen", 17)) + { + ret = GLEW_SGIS_point_line_texgen; + 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_convolution_accuracy + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_accuracy", 20)) + { + ret = GLEW_SGIX_convolution_accuracy; + 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_create_context + if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) + { + ret = WGLEW_ARB_create_context; + 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_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = WGLEW_ARB_framebuffer_sRGB; + 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_present_video + if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) + { + ret = WGLEW_NV_present_video; + 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_swap_group + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) + { + ret = WGLEW_NV_swap_group; + 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 +#ifdef WGL_NV_video_output + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) + { + ret = WGLEW_NV_video_output; + 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_create_context + if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) + { + ret = GLXEW_ARB_create_context; + continue; + } +#endif +#ifdef GLX_ARB_fbconfig_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_float", 14)) + { + ret = GLXEW_ARB_fbconfig_float; + continue; + } +#endif +#ifdef GLX_ARB_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = GLXEW_ARB_framebuffer_sRGB; + 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_present_video + if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) + { + ret = GLXEW_NV_present_video; + continue; + } +#endif +#ifdef GLX_NV_swap_group + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) + { + ret = GLXEW_NV_swap_group; + 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 +#ifdef GLX_NV_video_output + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) + { + ret = GLXEW_NV_video_output; + 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/openctm/tools/icons/Document-open.svg b/3rdparty/openctm/tools/icons/Document-open.svg new file mode 100644 index 000000000..873d7e377 --- /dev/null +++ b/3rdparty/openctm/tools/icons/Document-open.svg @@ -0,0 +1,448 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/icons/Document-save.svg b/3rdparty/openctm/tools/icons/Document-save.svg new file mode 100644 index 000000000..c50833c10 --- /dev/null +++ b/3rdparty/openctm/tools/icons/Document-save.svg @@ -0,0 +1,557 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Save + + + Jakub Steiner + + + + + hdd + hard drive + save + io + store + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/icons/Help-browser.svg b/3rdparty/openctm/tools/icons/Help-browser.svg new file mode 100644 index 000000000..96908b883 --- /dev/null +++ b/3rdparty/openctm/tools/icons/Help-browser.svg @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Help Browser + 2005-11-06 + + + Tuomas Kuosmanen + + + + + help + browser + documentation + docs + man + info + + + + + + Jakub Steiner, Andreas Nilsson + + + http://tigert.com + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/icons/Texture.svg b/3rdparty/openctm/tools/icons/Texture.svg new file mode 100644 index 000000000..e1be3d47b --- /dev/null +++ b/3rdparty/openctm/tools/icons/Texture.svg @@ -0,0 +1,66 @@ + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/icons/icon_help.h b/3rdparty/openctm/tools/icons/icon_help.h new file mode 100644 index 000000000..070549662 --- /dev/null +++ b/3rdparty/openctm/tools/icons/icon_help.h @@ -0,0 +1,229 @@ +//------------------------------------------------------------------------------ +// Original: Help-browser.svg +// Size: 32x32 +// Format: RGBA +// Conversion: +// 1) SVG to 32x32 PNG with Inkscape +// 2) PNG to RGBA with ImageMagick (convert icon_help.png icon_help.rgba) +// 3) RGBA to C code with bin2c (bin2c icon_help.rgba icon_help > icon_help.h) +//------------------------------------------------------------------------------ + +static const unsigned char icon_help[] = { + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,31,73,135,49, + 34,75,136,152,51,90,145,205,80,114,161,219,106,134,175,230,106,134,175, + 230,80,114,161,219,51,91,145,205,33,77,137,153,31,73,135,49,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,33,75,136,92,68,103,155,219,148,168,198,246,209,218,231,255,247, + 249,251,255,247,249,251,255,247,249,251,255,247,249,251,255,247,249,251,255, + 247,249,251,255,210,219,231,255,149,170,198,246,69,104,155,219,33,74,137, + 93,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,30,75,135,34,34,76,138,207,133,156,190, + 248,240,243,247,255,247,249,251,255,238,242,246,255,189,202,221,255,162,181, + 207,255,140,164,196,255,141,164,197,255,163,182,208,255,190,203,221,255,239, + 242,247,255,247,249,251,255,240,243,247,255,136,158,192,248,35,77,138,207, + 30,75,135,34,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,31, + 73,136,73,66,102,153,230,197,208,224,255,247,249,251,255,228,233,241,255, + 122,149,186,255,67,105,158,255,63,102,157,255,65,104,158,255,66,105,159, + 255,66,106,159,255,66,106,159,255,66,105,159,255,71,109,161,255,125,152, + 189,255,228,234,241,255,247,249,251,255,199,210,226,255,67,103,154,229,35, + 73,136,73,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,30,75,135,68,109,137,177,240,237,241, + 246,255,247,249,251,255,181,196,217,255,72,110,161,255,64,103,157,255,67, + 106,159,255,69,108,161,255,71,110,162,255,72,111,163,255,73,112,164,255, + 73,112,164,255,72,111,163,255,71,110,163,255,70,109,161,255,79,116,166, + 255,184,199,219,255,247,249,251,255,238,241,246,255,111,139,178,240,34,75, + 135,68,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 31,77,131,33,66,102,154,229,237,241,246,255,236,240,245,255,123,150,187, + 255,62,102,156,255,66,105,159,255,70,109,161,255,73,111,164,255,75,114, + 165,255,77,116,167,255,79,117,168,255,80,118,168,255,80,118,168,255,79, + 117,168,255,78,116,167,255,76,114,166,255,73,112,164,255,71,109,162,255, + 129,155,191,255,237,241,246,255,238,242,246,255,67,104,155,229,31,77,131, + 33,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,34,76,137,207,197, + 208,224,255,247,249,251,255,123,150,187,255,63,102,157,255,67,107,160,255, + 72,110,163,255,75,114,165,255,79,117,168,255,81,119,170,255,102,135,180, + 255,120,150,189,255,128,157,194,255,114,146,187,255,94,130,177,255,84,122, + 172,255,82,120,170,255,80,118,168,255,76,115,166,255,73,111,163,255,130, + 156,192,255,248,249,251,255,200,211,227,255,37,79,138,207,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,33,74,134,93,133,157,190,248,247,249,251,255,181,196, + 217,255,63,102,156,255,68,107,160,255,72,111,163,255,77,115,167,255,81, + 119,169,255,185,200,220,255,217,224,235,255,233,237,242,255,244,246,247,255, + 251,251,251,255,240,242,246,255,228,234,241,255,193,206,224,255,101,136,180, + 255,85,123,173,255,82,120,170,255,78,116,167,255,74,112,164,255,186,200, + 220,255,248,249,251,255,137,161,194,248,33,74,137,93,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 68,103,155,219,240,243,247,255,228,233,241,255,73,111,161,255,67,106,159, + 255,72,111,163,255,77,116,167,255,82,120,170,255,86,124,173,255,224,230, + 238,255,244,244,244,255,247,247,247,255,250,250,250,255,252,252,252,255,251, + 251,251,255,249,249,249,255,247,247,247,255,210,220,232,255,96,131,179,255, + 88,125,174,255,83,121,171,255,79,117,168,255,84,121,170,255,229,235,242, + 255,241,244,248,255,70,105,156,219,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,30,75,135,51,148,168,198,246,247, + 249,251,255,123,150,187,255,65,104,158,255,71,110,162,255,76,115,166,255, + 82,120,170,255,87,125,174,255,92,129,177,255,225,231,238,255,245,245,245, + 255,233,238,244,255,222,230,239,255,229,235,243,255,250,251,252,255,249,249, + 249,255,246,246,246,255,244,244,245,255,137,164,199,255,93,130,178,255,88, + 126,174,255,83,121,171,255,78,116,167,255,132,158,193,255,248,249,251,255, + 152,172,201,246,30,75,135,51,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,33,75,137,153,209,218,231,255,239,242,247,255,68,107, + 159,255,68,107,161,255,75,113,165,255,80,119,169,255,86,124,173,255,92, + 129,177,255,97,134,180,255,224,231,240,255,182,199,221,255,121,154,195,255, + 111,147,190,255,116,151,193,255,224,231,240,255,249,249,249,255,246,246,246, + 255,244,244,244,255,174,193,216,255,98,135,181,255,93,130,178,255,88,125, + 174,255,82,120,170,255,82,118,169,255,240,243,247,255,212,221,233,255,35, + 77,138,153,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 51,89,146,206,247,249,251,255,189,203,221,255,65,104,158,255,72,110,163, + 255,78,116,167,255,84,122,171,255,90,127,176,255,96,133,180,255,101,138, + 184,255,107,143,188,255,111,146,190,255,114,150,193,255,117,152,195,255,128, + 161,200,255,231,237,244,255,248,248,248,255,246,246,246,255,243,243,244,255, + 149,174,207,255,103,139,184,255,97,134,181,255,92,129,177,255,86,123,173, + 255,79,118,168,255,194,207,225,255,248,249,251,255,54,92,148,205,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,80,114,162,219,247, + 249,251,255,164,182,208,255,68,107,160,255,74,113,165,255,81,119,169,255, + 87,125,174,255,94,131,178,255,100,136,182,255,106,142,187,255,111,147,190, + 255,116,151,194,255,120,155,197,255,133,166,203,255,221,230,239,255,249,249, + 249,255,247,247,247,255,245,245,245,255,224,231,239,255,120,154,195,255,107, + 143,188,255,101,138,183,255,95,132,179,255,89,126,175,255,82,120,170,255, + 171,189,213,255,248,249,251,255,83,117,164,219,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,106,135,175,230,247,249,251,255,143,166, + 198,255,69,108,161,255,76,115,166,255,83,121,171,255,90,127,176,255,96, + 133,180,255,103,139,185,255,109,145,189,255,115,150,193,255,121,156,197,255, + 132,164,204,255,221,230,241,255,248,248,248,255,247,247,247,255,245,245,245, + 255,232,237,243,255,148,176,209,255,117,152,194,255,111,146,190,255,104,141, + 186,255,98,135,181,255,91,129,177,255,85,122,172,255,152,174,204,255,248, + 249,251,255,109,137,177,230,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,106,135,176,230,247,249,251,255,143,167,198,255,71,110,162, + 255,78,116,167,255,85,123,172,255,92,129,177,255,99,135,182,255,106,142, + 187,255,112,148,191,255,119,154,196,255,125,159,200,255,204,218,233,255,245, + 245,245,255,245,245,245,255,245,245,245,255,235,239,245,255,161,187,217,255, + 126,161,201,255,120,155,197,255,114,149,192,255,107,143,188,255,100,137,183, + 255,94,131,178,255,87,124,173,255,153,175,205,255,248,249,251,255,110,137, + 177,230,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,81, + 115,162,219,247,249,251,255,166,184,209,255,72,111,163,255,79,117,168,255, + 86,124,173,255,93,130,178,255,100,137,183,255,107,143,188,255,114,150,193, + 255,121,156,198,255,128,162,202,255,226,233,240,255,242,242,242,255,243,243, + 243,255,243,244,245,255,179,201,226,255,136,169,208,255,129,164,203,255,123, + 157,199,255,116,151,194,255,109,145,189,255,102,138,184,255,95,132,179,255, + 88,125,174,255,173,191,215,255,248,249,251,255,84,118,164,219,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,52,92,146,206,247,249, + 251,255,192,205,223,255,73,112,164,255,80,118,169,255,87,125,174,255,94, + 131,179,255,101,138,184,255,108,144,189,255,116,151,194,255,123,157,199,255, + 131,165,205,255,212,223,237,255,216,227,238,255,218,228,239,255,220,230,241, + 255,154,185,218,255,138,172,210,255,131,165,205,255,124,159,200,255,117,152, + 195,255,110,146,190,255,103,139,185,255,96,133,180,255,89,126,175,255,197, + 210,227,255,248,249,251,255,56,95,149,205,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,35,77,138,152,211,220,232,255,239,243,247, + 255,79,116,167,255,80,118,169,255,87,125,174,255,94,131,179,255,101,138, + 184,255,109,144,189,255,116,151,194,255,123,158,199,255,131,165,204,255,209, + 221,235,255,217,227,239,255,219,229,241,255,218,229,240,255,155,185,218,255, + 139,172,210,255,132,166,205,255,125,159,200,255,117,153,195,255,110,146,190, + 255,103,139,185,255,96,133,180,255,94,130,178,255,241,244,248,255,214,222, + 234,255,37,79,139,152,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,31,73,135,49,151,172,200,246,248,249,251,255,132,158,193,255, + 80,118,168,255,87,124,173,255,94,131,178,255,101,137,183,255,108,144,188, + 255,115,150,193,255,122,157,198,255,132,165,204,255,230,235,241,255,236,236, + 236,255,237,237,237,255,236,238,241,255,160,188,219,255,137,170,209,255,130, + 164,204,255,123,158,199,255,116,152,194,255,109,145,189,255,102,139,184,255, + 95,132,179,255,142,168,200,255,248,250,252,255,155,176,203,246,31,73,135, + 49,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,70,105,157,218,241,244,248,255,230,235,242,255,90,126,173,255,86, + 123,173,255,92,130,177,255,99,136,182,255,106,142,187,255,113,148,192,255, + 120,155,196,255,129,162,202,255,229,234,240,255,234,234,234,255,235,235,235, + 255,234,237,240,255,155,184,216,255,133,167,206,255,127,162,202,255,121,156, + 198,255,115,150,193,255,108,144,188,255,101,137,183,255,104,139,184,255,232, + 237,244,255,242,245,249,255,73,108,159,218,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,33,75,136, + 92,139,162,195,247,248,249,251,255,189,203,222,255,84,122,171,255,91,128, + 176,255,97,134,181,255,104,140,185,255,110,146,190,255,116,152,194,255,125, + 159,199,255,231,236,241,255,237,237,237,255,237,237,237,255,237,239,242,255, + 150,179,212,255,128,162,203,255,123,158,199,255,118,153,195,255,112,147,191, + 255,105,141,186,255,99,135,182,255,194,208,226,255,248,250,252,255,145,167, + 199,247,36,78,139,92,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,38,80,140,206, + 202,213,228,255,248,249,251,255,139,164,198,255,88,126,174,255,95,132,179, + 255,101,137,183,255,107,143,187,255,112,148,191,255,119,153,195,255,157,183, + 212,255,162,187,215,255,164,188,217,255,163,188,216,255,130,163,203,255,123, + 157,199,255,119,154,196,255,114,149,192,255,108,144,188,255,102,139,184,255, + 148,173,205,255,249,250,252,255,206,217,231,255,41,81,141,206,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,31,77,131,33,71,106,158,229,239, + 242,247,255,238,242,247,255,141,166,199,255,91,128,177,255,97,134,181,255, + 103,139,185,255,108,144,188,255,112,148,191,255,116,151,194,255,119,154,196, + 255,121,156,197,255,121,156,197,255,120,155,196,255,117,152,195,255,113,149, + 192,255,109,145,189,255,104,140,185,255,150,175,206,255,240,243,248,255,240, + 244,248,255,74,109,160,229,31,77,131,33,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,34,79,139,68,115,142,180,240,239,243, + 247,255,248,250,252,255,193,207,225,255,103,138,183,255,98,135,181,255,103, + 139,185,255,107,143,188,255,110,146,190,255,113,148,192,255,114,150,193,255, + 114,150,193,255,113,149,192,255,111,147,190,255,108,144,188,255,113,147,189, + 255,197,211,228,255,249,250,252,255,241,244,248,255,118,145,184,240,38,79, + 139,68,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,30,70,124,76,71,107,157,231,205,215,230, + 255,248,250,252,255,232,237,244,255,146,171,203,255,104,138,184,255,101,138, + 184,255,104,141,186,255,107,143,187,255,108,144,188,255,108,144,188,255,107, + 143,188,255,110,145,188,255,152,176,207,255,234,239,245,255,249,250,252,255, + 208,219,232,255,74,109,158,231,31,65,114,83,0,0,0,6,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,2,0, + 0,0,16,0,0,0,28,15,37,63,69,37,77,135,217,143,165,196,250, + 242,245,249,255,248,250,252,255,242,245,249,255,201,213,229,255,177,195,218, + 255,163,185,212,255,164,186,212,255,178,197,220,255,202,215,230,255,243,246, + 249,255,249,250,252,255,243,246,249,255,146,169,199,250,39,79,134,219,13, + 34,57,76,0,0,0,37,0,0,0,24,0,0,0,11,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,0,0,0,5,0,0,0,19,0,0, + 0,32,0,0,0,45,0,0,0,58,24,52,93,137,70,102,150,231,155, + 175,202,249,216,225,236,255,249,250,252,255,249,250,252,255,249,250,252,255, + 249,250,252,255,249,250,252,255,249,250,252,255,217,226,237,255,157,176,203, + 250,71,104,151,232,25,51,90,144,0,0,0,67,0,0,0,54,0,0, + 0,40,0,0,0,28,0,0,0,15,0,0,0,1,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,0,0,0,9,0,0,0,22,0,0,0, + 34,0,0,0,45,0,0,0,57,0,0,0,68,14,32,59,112,31,65, + 114,188,58,93,141,225,87,117,159,234,110,136,173,241,110,136,173,241,87, + 116,158,234,59,93,141,226,32,66,113,190,13,30,56,118,0,0,0,75, + 0,0,0,64,0,0,0,53,0,0,0,42,0,0,0,30,0,0,0, + 18,0,0,0,4,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,0,0,0,9,0,0,0,20, + 0,0,0,30,0,0,0,38,0,0,0,45,0,0,0,52,0,0,0, + 57,0,0,0,61,0,0,0,64,0,0,0,64,0,0,0,63,0,0, + 0,60,0,0,0,56,0,0,0,50,0,0,0,43,0,0,0,35,0, + 0,0,27,0,0,0,17,0,0,0,5,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0, + 0,0,1,0,0,0,5,0,0,0,10,0,0,0,14,0,0,0,18, + 0,0,0,20,0,0,0,21,0,0,0,20,0,0,0,16,0,0,0, + 13,0,0,0,9,0,0,0,4,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0, + 0 +}; diff --git a/3rdparty/openctm/tools/icons/icon_open.h b/3rdparty/openctm/tools/icons/icon_open.h new file mode 100644 index 000000000..ba9b534f8 --- /dev/null +++ b/3rdparty/openctm/tools/icons/icon_open.h @@ -0,0 +1,229 @@ +//------------------------------------------------------------------------------ +// Original: Document_open.svg +// Size: 32x32 +// Format: RGBA +// Conversion: +// 1) SVG to 32x32 PNG with Inkscape +// 2) PNG to RGBA with ImageMagick (convert icon_open.png icon_open.rgba) +// 3) RGBA to C code with bin2c (bin2c icon_open.rgba icon_open > icon_open.h) +//------------------------------------------------------------------------------ + +static const unsigned char icon_open[] = { + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,77, + 77,77,56,76,76,76,57,75,75,75,58,78,78,78,59,77,77,77,60, + 75,75,75,61,78,78,78,62,81,81,81,63,86,86,86,65,89,89,89, + 66,91,91,91,67,94,94,94,68,100,100,100,69,102,102,102,70,104,104, + 104,71,106,106,106,72,110,110,110,74,112,112,112,75,117,117,117,76,119, + 119,119,77,121,121,121,78,123,123,123,79,128,128,128,10,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,107,107,107,231,214,214, + 214,247,204,204,204,246,203,203,203,246,201,201,201,246,201,201,201,245,199, + 199,199,246,200,200,200,245,199,199,199,246,199,199,199,246,200,200,200,246, + 200,200,200,246,201,201,201,246,200,200,200,247,202,202,202,246,201,201,201, + 247,202,202,202,248,202,202,202,248,203,203,203,248,203,203,203,249,204,204, + 204,249,148,148,148,237,123,123,123,27,255,255,255,0,255,255,255,0,255, + 255,255,0,90,90,90,36,90,90,90,48,90,90,90,48,90,90,90,48, + 90,90,90,48,90,90,90,48,118,118,118,217,252,252,252,255,250,250,250, + 255,250,250,250,255,250,250,250,255,250,250,250,255,250,250,250,255,250,250, + 250,255,250,250,250,255,250,250,250,255,250,250,250,255,250,250,250,255,250, + 250,250,255,250,250,250,255,250,250,250,255,250,250,250,255,250,250,250,255, + 250,250,250,255,250,250,250,255,250,250,250,255,250,250,250,255,158,158,158, + 228,112,112,112,16,255,255,255,0,255,255,255,0,96,96,96,71,140,140, + 140,237,167,167,167,240,168,168,168,240,168,168,168,240,169,169,169,240,170, + 170,170,241,125,125,125,251,242,242,242,255,241,241,241,255,201,201,201,255, + 194,194,194,255,194,194,194,255,194,194,194,255,194,194,194,255,194,194,194, + 255,195,195,195,255,195,195,195,255,195,195,195,255,195,195,195,255,195,195, + 195,255,195,195,195,255,195,195,195,255,195,195,195,255,196,196,196,255,202, + 202,202,255,247,247,247,255,248,248,248,255,148,148,148,227,102,102,102,5, + 255,255,255,0,255,255,255,0,94,94,94,89,189,189,189,254,169,169,169, + 255,162,162,162,255,162,162,162,255,162,162,162,255,162,162,162,255,137,137, + 137,255,237,237,237,255,231,231,231,255,211,211,211,255,208,208,208,255,208, + 208,208,255,209,209,209,255,209,209,209,255,209,209,209,255,209,209,209,255, + 209,209,209,255,210,210,210,255,210,210,210,255,210,210,210,255,211,211,211, + 255,211,211,211,255,227,227,227,255,232,232,232,255,233,233,233,255,238,238, + 238,255,238,238,238,255,139,139,139,226,255,255,255,0,255,255,255,0,255, + 255,255,0,90,90,90,61,180,180,180,249,165,165,165,255,156,156,156,255, + 156,156,156,255,156,156,156,255,156,156,156,255,161,161,161,255,228,228,228, + 255,221,221,221,255,199,199,199,255,197,197,197,255,198,198,198,255,198,198, + 198,255,198,198,198,255,199,199,199,255,199,199,199,255,199,199,199,255,199, + 199,199,255,199,199,199,255,200,200,200,255,200,200,200,255,200,200,200,255, + 220,220,220,255,227,227,227,255,227,227,227,255,228,228,228,255,228,228,228, + 255,131,131,131,212,255,255,255,0,255,255,255,0,255,255,255,0,90,90, + 90,37,171,171,171,241,177,177,177,255,162,162,162,255,162,162,162,255,162, + 162,162,255,139,139,139,255,209,209,209,255,213,213,213,255,211,211,211,255, + 178,178,178,255,178,178,178,255,179,179,179,255,179,179,179,255,179,179,179, + 255,179,179,179,255,179,179,179,255,179,179,179,255,179,179,179,255,179,179, + 179,255,180,180,180,255,180,180,180,255,180,180,180,255,180,180,180,255,180, + 180,180,255,180,180,180,255,212,212,212,255,210,210,210,255,122,122,122,184, + 255,255,255,0,255,255,255,0,255,255,255,0,90,90,90,12,156,156,156, + 236,182,182,182,255,161,161,161,255,161,161,161,255,161,161,161,255,117,117, + 117,255,227,227,227,255,201,201,201,255,190,190,190,255,178,178,178,255,178, + 178,178,255,178,178,178,255,178,178,178,255,178,178,178,255,178,178,178,255, + 178,178,178,255,179,179,179,255,179,179,179,255,179,179,179,255,179,179,179, + 255,179,179,179,255,180,180,180,255,180,180,180,255,180,180,180,255,198,198, + 198,255,208,208,208,255,179,179,179,254,112,112,112,116,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,141,141,141,230,180,180,180,255, + 155,155,155,255,155,155,155,255,153,153,153,255,154,154,154,255,208,208,208, + 255,192,192,192,255,182,182,182,255,181,181,181,255,182,182,182,255,182,182, + 182,255,183,183,183,255,183,183,183,255,183,183,183,255,184,184,184,255,184, + 184,184,255,184,184,184,255,184,184,184,255,184,184,184,255,185,185,185,255, + 185,185,185,255,185,185,185,255,191,191,191,255,197,197,197,255,198,198,198, + 255,128,128,128,228,102,102,102,25,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,129,129,129,220,185,185,185,255,156,156,156,255,156, + 156,156,255,128,128,128,255,204,204,204,255,183,183,183,255,182,182,182,255, + 174,174,174,255,174,174,174,255,174,174,174,255,174,174,174,255,175,175,175, + 255,175,175,175,255,175,175,175,255,176,176,176,255,176,176,176,255,176,176, + 176,255,176,176,176,255,176,176,176,255,177,177,177,255,177,177,177,255,177, + 177,177,255,183,183,183,255,188,188,188,255,181,181,181,255,109,109,109,188, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,117,117,117,210,197,197,197,255,161,161,161,255,160,160,160,255,112,112, + 112,255,210,210,210,255,172,172,172,255,167,167,167,255,165,165,165,255,165, + 165,165,255,165,165,165,255,165,165,165,255,165,165,165,255,165,165,165,255, + 166,166,166,255,166,166,166,255,166,166,166,255,166,166,166,255,166,166,166, + 255,170,170,170,255,177,177,177,255,177,177,177,255,178,178,178,255,178,178, + 178,255,179,179,179,255,134,134,134,237,90,90,90,62,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,104,104,104,198, + 198,198,198,255,155,155,155,255,150,150,150,255,158,158,158,255,185,185,185, + 255,126,146,171,255,90,126,170,255,90,126,170,255,90,126,170,255,90,126, + 170,255,90,126,170,255,90,126,170,255,90,126,170,255,90,125,170,255,90, + 125,170,255,90,125,170,255,90,125,170,255,90,125,170,255,90,125,170,255, + 90,125,170,255,90,125,170,255,90,125,170,255,90,125,170,255,90,125,170, + 255,70,108,154,243,61,109,170,187,61,109,170,187,61,109,170,187,61,109, + 170,187,59,108,169,68,255,255,255,0,102,102,102,175,185,185,185,255,146, + 146,146,255,119,119,119,255,195,195,195,255,175,175,175,255,87,125,174,255, + 169,196,225,255,163,191,222,255,163,191,222,255,163,191,223,255,163,191,223, + 255,163,191,223,255,163,191,223,255,163,191,223,255,163,191,223,255,163,191, + 223,255,163,191,223,255,163,191,223,255,163,191,223,255,163,191,223,255,163, + 191,223,255,163,191,222,255,163,191,222,255,163,191,222,255,163,191,222,255, + 163,191,222,255,163,191,222,255,162,191,222,255,149,180,215,255,61,109,170, + 146,255,255,255,0,102,102,102,145,181,181,181,255,142,142,142,255,107,107, + 107,255,208,208,208,255,180,180,180,255,99,136,183,255,155,187,221,255,133, + 172,213,255,133,172,213,255,133,172,213,255,133,172,213,255,133,172,213,255, + 133,172,213,255,132,171,213,255,132,171,213,255,132,171,213,255,132,171,213, + 255,131,171,213,255,131,170,213,255,131,170,213,255,130,170,212,255,130,170, + 212,255,129,170,212,255,129,170,212,255,129,169,212,255,128,169,212,255,128, + 168,212,255,130,170,212,255,126,162,204,245,52,101,164,66,255,255,255,0, + 98,98,98,109,175,175,175,255,139,139,139,255,159,159,159,255,190,190,190, + 255,175,178,183,255,113,148,191,255,146,180,218,255,133,172,213,255,133,172, + 213,255,132,171,213,255,132,171,213,255,132,171,213,255,131,171,213,255,131, + 171,213,255,131,170,213,255,131,170,213,255,130,170,212,255,129,170,212,255, + 129,170,212,255,129,169,212,255,129,169,212,255,128,169,212,255,128,169,212, + 255,128,168,212,255,127,168,212,255,127,168,212,255,118,162,208,255,143,179, + 217,255,86,129,183,229,52,101,164,10,255,255,255,0,90,90,90,74,162, + 162,162,252,122,122,122,255,196,196,196,255,189,189,189,255,158,169,183,255, + 126,161,201,255,137,175,215,255,132,171,213,255,131,171,213,255,131,170,213, + 255,131,170,213,255,130,170,212,255,130,170,212,255,129,170,212,255,129,170, + 212,255,129,169,212,255,128,169,212,255,128,169,212,255,128,168,212,255,128, + 168,212,255,127,168,212,255,127,168,212,255,127,168,211,255,126,167,211,255, + 126,167,211,255,118,162,208,255,114,159,207,255,150,184,219,255,63,111,171, + 210,255,255,255,0,255,255,255,0,90,90,90,50,147,147,147,242,114,114, + 114,255,208,208,208,255,193,193,193,255,137,157,183,255,136,171,210,255,131, + 170,213,255,130,170,212,255,130,170,212,255,129,170,212,255,129,169,212,255, + 129,169,212,255,128,169,212,255,128,169,212,255,128,168,212,255,127,168,212, + 255,127,168,212,255,127,168,211,255,127,168,211,255,126,167,211,255,126,167, + 211,255,126,167,211,255,125,167,211,255,125,166,211,255,117,161,208,255,114, + 159,207,255,116,160,208,255,138,173,212,255,60,109,170,159,255,255,255,0, + 255,255,255,0,90,90,90,25,134,134,134,234,107,107,107,255,220,220,220, + 255,198,198,198,255,109,141,180,255,142,177,214,255,129,169,212,255,129,169, + 212,255,128,169,212,255,128,168,212,255,128,168,212,255,127,168,212,255,127, + 168,212,255,127,168,211,255,126,167,211,255,126,167,211,255,126,167,211,255, + 126,167,211,255,125,167,211,255,125,167,211,255,125,166,211,255,124,166,210, + 255,120,163,209,255,115,159,207,255,114,159,207,255,114,159,207,255,126,167, + 211,255,108,150,197,245,53,102,164,77,255,255,255,0,255,255,255,0,90, + 90,90,3,124,124,124,229,106,106,106,255,217,217,217,255,202,202,202,255, + 91,130,179,255,141,178,216,255,128,168,212,255,127,168,212,255,127,168,211, + 255,127,168,211,255,126,167,211,255,126,167,211,255,126,167,211,255,126,167, + 211,255,125,167,211,255,125,166,211,255,125,166,211,255,124,166,210,255,124, + 166,210,255,123,165,210,255,121,164,209,255,116,161,208,255,114,159,207,255, + 114,159,207,255,114,159,207,255,114,159,207,255,133,172,213,255,75,121,178, + 225,52,101,164,11,255,255,255,0,255,255,255,0,255,255,255,0,115,115, + 115,222,108,108,108,255,206,206,206,255,202,203,204,255,94,135,183,255,132, + 171,213,255,126,167,211,255,126,167,211,255,126,167,211,255,125,167,211,255, + 125,167,211,255,125,166,211,255,123,165,210,255,122,165,210,255,121,164,209, + 255,121,164,209,255,120,163,209,255,118,162,209,255,117,161,208,255,115,160, + 207,255,114,159,207,255,114,159,207,255,114,159,207,255,114,159,207,255,114, + 159,207,255,114,159,207,255,132,170,213,255,61,109,170,203,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,109,109,109,214,110,110,110, + 255,144,144,144,255,126,136,149,255,102,142,189,255,127,167,212,255,125,166, + 211,255,123,165,210,255,120,163,209,255,118,162,208,255,116,160,208,255,114, + 159,207,255,114,159,207,255,114,159,207,255,114,159,207,255,114,159,207,255, + 114,159,207,255,114,159,207,255,114,159,207,255,114,159,207,255,114,159,207, + 255,114,159,207,255,114,159,207,255,114,159,207,255,114,159,207,255,117,161, + 208,255,110,152,200,254,58,106,168,123,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,104,104,104,205,134,134,134,255,102,102,102,255, + 80,105,137,255,112,153,201,255,118,161,209,255,115,160,208,255,113,158,207, + 255,112,158,207,255,112,158,207,255,112,158,207,255,112,158,207,255,112,158, + 207,255,112,158,207,255,112,158,206,255,112,158,206,255,112,157,206,255,111, + 157,206,255,111,157,206,255,111,157,206,255,111,157,206,255,111,157,206,255, + 111,157,206,255,111,157,206,255,111,157,206,255,118,162,208,255,77,125,181, + 231,52,101,164,37,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,102,102,102,189,145,145,145,255,106,107,108,255,70,112,164,255,113, + 159,208,255,108,155,206,255,108,155,206,255,108,155,205,255,107,155,205,255, + 107,155,205,255,107,155,205,255,107,155,205,255,107,154,205,255,107,154,205, + 255,107,154,205,255,107,154,205,255,107,154,205,255,106,154,205,255,106,154, + 205,255,106,154,205,255,106,154,205,255,106,154,205,255,106,154,205,255,106, + 154,205,255,106,154,205,255,109,155,206,255,60,109,170,207,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,92,92,92, + 168,122,122,122,255,75,95,119,255,86,133,187,255,104,152,204,255,103,152, + 204,255,103,152,204,255,103,152,204,255,102,151,204,255,102,151,204,255,102, + 151,204,255,102,151,204,255,102,151,204,255,102,151,204,255,102,151,204,255, + 102,151,204,255,101,151,204,255,101,151,204,255,101,151,204,255,101,151,204, + 255,101,151,204,255,101,151,204,255,101,150,204,255,101,150,204,255,102,150, + 204,255,82,131,188,246,52,98,157,100,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,0,0,0,12,77,77,77,146,100,104,109,255, + 62,104,157,255,97,148,203,255,98,149,203,255,98,148,203,255,98,148,203, + 255,97,148,203,255,97,148,203,255,97,148,203,255,97,148,203,255,97,148, + 203,255,97,148,203,255,97,148,203,255,97,148,203,255,97,148,203,255,97, + 148,203,255,97,148,203,255,97,148,203,255,97,148,203,255,97,148,203,255, + 97,148,203,255,97,148,203,255,97,148,203,255,96,147,203,255,58,107,166, + 228,9,17,28,30,0,0,0,3,255,255,255,0,255,255,255,0,255,255, + 255,0,0,0,0,14,49,49,49,74,67,91,121,243,60,106,164,254,64, + 108,163,253,63,108,163,253,63,108,163,253,63,108,163,253,64,108,163,253, + 64,108,163,253,63,108,163,253,63,108,163,253,63,108,163,253,63,108,163, + 253,63,108,163,253,64,108,163,253,64,108,163,253,64,108,163,253,64,108, + 163,253,64,108,163,253,64,108,163,253,64,108,163,253,64,108,163,253,63, + 108,163,252,62,109,168,238,58,106,165,234,40,74,119,113,0,0,0,26, + 0,0,0,4,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0, + 1,0,0,0,20,6,6,6,38,11,11,11,54,10,10,10,57,9,9, + 9,61,9,9,9,61,9,9,9,61,9,9,9,61,9,9,9,61,9, + 9,9,61,9,9,9,61,9,9,9,61,9,9,9,61,9,9,9,61, + 9,9,9,61,9,9,9,61,9,9,9,61,9,9,9,61,9,9,9, + 61,9,9,9,61,9,9,9,61,9,9,9,61,3,3,3,58,0,0, + 0,51,0,0,0,44,0,0,0,30,0,0,0,12,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 0,0,0,4,0,0,0,12,0,0,0,18,0,0,0,21,0,0,0, + 21,0,0,0,21,0,0,0,21,0,0,0,21,0,0,0,21,0,0, + 0,21,0,0,0,21,0,0,0,21,0,0,0,21,0,0,0,21,0, + 0,0,21,0,0,0,21,0,0,0,21,0,0,0,21,0,0,0,21, + 0,0,0,21,0,0,0,21,0,0,0,21,0,0,0,16,0,0,0, + 9,0,0,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0, + 0 +}; diff --git a/3rdparty/openctm/tools/icons/icon_save.h b/3rdparty/openctm/tools/icons/icon_save.h new file mode 100644 index 000000000..c6358c379 --- /dev/null +++ b/3rdparty/openctm/tools/icons/icon_save.h @@ -0,0 +1,229 @@ +//------------------------------------------------------------------------------ +// Original: Document_save.svg +// Size: 32x32 +// Format: RGBA +// Conversion: +// 1) SVG to 32x32 PNG with Inkscape +// 2) PNG to RGBA with ImageMagick (convert icon_save.png icon_save.rgba) +// 3) RGBA to C code with bin2c (bin2c icon_save.rgba icon_save > icon_save.h) +//------------------------------------------------------------------------------ + +static const unsigned char icon_save[] = { + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,34,74,136,45,39,82,143,155,52,92,148, + 216,63,100,155,212,56,94,150,200,37,80,141,165,33,71,136,47,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,35,70,132,29,45, + 85,143,203,99,132,177,231,141,168,202,255,151,176,209,255,149,174,207,255, + 146,172,206,255,132,160,198,255,103,136,179,237,49,89,147,166,39,78,137, + 13,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,31,71,133,25,65,101,154,204,151,176,208,199,146,174, + 207,232,142,169,204,255,144,170,205,255,140,168,203,255,136,165,202,255,131, + 161,200,255,130,160,199,255,130,158,196,254,64,100,153,226,32,74,138,24, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,35,70,139,22, + 57,94,149,192,153,176,206,165,103,132,177,208,79,113,162,216,73,110,160, + 225,96,128,173,236,134,162,199,255,135,165,202,255,128,159,198,255,123,155, + 196,255,119,152,194,255,134,162,199,255,66,103,156,204,0,0,255,1,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,43,83,141,147,118,143,181,155,45, + 85,143,177,33,71,130,47,255,255,255,0,255,255,255,0,35,71,135,36, + 43,84,144,197,122,152,190,247,127,159,198,255,119,152,194,255,115,149,192, + 255,111,146,191,255,122,152,191,248,34,78,137,128,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,39,78,137,13,60,98,151,162,36,78,138,161,0,0,255,1,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,255,1,47, + 86,145,207,135,163,200,255,115,149,192,255,111,146,190,255,107,142,189,255, + 120,153,195,255,78,113,163,232,0,128,128,2,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,36,77,138,50, + 43,84,143,136,26,77,128,10,85,85,85,3,83,83,83,102,83,83,83, + 136,83,83,83,136,83,83,83,136,83,83,83,136,72,80,95,153,104,134, + 175,247,115,149,192,255,107,142,189,255,103,139,187,255,99,137,185,255,116, + 144,183,249,70,80,97,154,83,83,83,136,83,83,83,136,83,83,83,136, + 83,83,83,136,83,83,83,136,84,84,84,70,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,35,78,137,65,34,74,136,45,255, + 255,255,0,96,96,96,175,222,222,222,254,239,239,239,253,238,238,238,253, + 238,238,238,253,238,238,238,253,237,237,237,252,100,130,173,255,119,152,194, + 255,102,139,187,255,98,136,185,255,94,133,183,255,123,152,191,255,155,172, + 195,253,230,230,230,252,229,229,229,252,228,228,228,252,228,228,228,252,227, + 227,227,252,171,171,171,254,83,83,83,80,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,31,75,137,41,0,85,170,3,85,85,85,30,176,176, + 176,254,233,234,234,255,153,169,192,255,142,161,187,255,142,161,188,255,141, + 160,187,255,141,160,187,255,79,112,161,255,119,152,194,255,97,135,184,255, + 94,133,183,255,90,130,181,255,128,158,196,255,76,109,157,255,138,157,184, + 255,137,156,183,255,136,155,182,255,136,155,182,255,161,174,192,255,231,231, + 231,254,105,105,105,204,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 36,73,146,7,255,255,255,0,82,82,82,124,231,231,231,253,227,227,227, + 255,166,179,198,255,86,118,165,255,119,150,191,255,116,148,189,255,118,149, + 190,255,121,151,192,255,116,150,193,255,93,132,182,255,89,129,181,255,85, + 126,179,255,116,149,193,255,125,155,194,255,125,154,194,255,123,153,192,255, + 134,162,198,255,72,107,156,255,182,191,202,255,224,224,224,255,172,172,172, + 255,81,81,81,41,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,124,124,124,228,240,240,240,255,225,225,225,255,228,228,228,255, + 148,165,190,255,108,139,181,255,106,142,189,255,93,132,183,255,92,131,182, + 255,90,130,181,255,87,128,180,255,84,125,178,255,81,123,177,255,77,120, + 175,255,70,115,172,255,66,111,170,255,97,136,184,255,107,136,178,255,162, + 175,193,255,220,220,220,255,216,216,216,255,220,220,220,252,83,83,83,141, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,82,82,82,62,200,200, + 200,255,229,229,229,255,224,224,224,255,229,229,229,255,232,232,232,255,133, + 154,185,255,114,144,185,255,99,137,185,255,86,127,179,255,84,125,178,255, + 79,121,176,255,69,114,172,255,61,108,168,255,54,102,165,255,52,101,164, + 255,77,120,175,255,112,142,183,255,142,160,187,255,221,221,221,255,217,217, + 217,255,216,216,216,255,226,226,226,255,132,132,132,241,85,85,85,6,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,86,86,86,159,237,237,237,253,224,224,224, + 255,229,229,229,255,229,229,229,255,228,228,228,255,225,225,225,255,112,138, + 174,255,99,134,179,255,65,111,170,255,53,102,164,255,52,101,164,255,52, + 101,164,255,52,101,164,255,52,101,164,255,69,114,172,255,118,148,188,255, + 117,140,175,255,220,220,220,255,220,220,220,255,219,219,219,255,219,219,219, + 255,217,217,217,255,192,192,192,254,82,82,82,84,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,93, + 93,93,11,156,156,156,248,234,234,234,255,226,226,226,255,225,225,225,255, + 223,223,223,255,219,219,219,255,216,216,216,255,213,213,213,255,94,123,164, + 255,104,137,181,255,62,109,169,255,52,101,164,255,52,101,164,255,52,101, + 164,255,62,108,168,255,120,150,191,255,94,123,164,255,211,211,211,255,213, + 213,213,255,214,214,214,255,216,216,216,255,217,217,217,255,216,216,216,255, + 224,224,224,253,97,97,97,189,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,82,82,82,96,218,218, + 218,254,222,222,222,255,222,222,222,255,219,219,219,255,216,216,216,255,213, + 213,213,255,213,213,213,255,212,212,212,255,209,210,211,255,86,117,160,255, + 111,144,188,255,60,107,168,255,52,101,164,255,56,104,166,255,118,149,191, + 255,82,113,158,255,201,201,203,255,206,206,206,255,209,209,209,255,211,211, + 211,255,212,212,212,255,215,215,215,255,217,217,217,255,220,220,220,255,157, + 157,157,254,85,85,85,30,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,107,107,107,201,236,236,236,253,218,218,218, + 255,223,223,223,255,215,215,215,255,213,213,213,255,213,213,213,255,212,212, + 212,255,210,210,210,255,207,207,207,255,199,200,202,255,79,110,156,255,116, + 148,190,255,59,106,167,255,114,147,190,255,80,113,160,255,189,191,194,255, + 201,201,201,255,205,205,205,255,206,206,206,255,208,208,208,255,211,211,211, + 255,213,213,213,255,218,218,218,255,211,211,211,255,206,206,206,252,82,82, + 82,127,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,80, + 80,80,35,181,181,181,254,226,226,226,255,218,218,218,255,220,220,220,255, + 225,225,225,255,218,218,218,255,215,215,215,255,212,212,212,255,210,210,210, + 255,206,206,206,255,203,203,203,255,192,194,197,255,79,112,159,255,131,160, + 197,255,84,117,162,255,180,185,191,255,201,201,201,255,203,203,203,255,205, + 205,205,255,208,208,208,255,210,210,210,255,212,212,212,255,224,224,224,255, + 214,214,214,255,212,212,212,255,221,221,221,255,120,120,120,232,128,128,128, + 2,255,255,255,0,255,255,255,0,255,255,255,0,82,82,82,130,226,226, + 226,252,219,219,219,255,219,219,219,255,218,218,218,255,220,220,220,255,229, + 229,229,255,221,221,221,255,215,215,215,255,213,213,213,255,210,210,210,255, + 206,206,206,255,206,206,206,255,189,192,198,255,66,100,151,255,173,180,192, + 255,205,205,205,255,206,206,206,255,207,207,207,255,210,210,210,255,211,211, + 211,255,218,218,218,255,226,226,226,255,215,215,215,255,212,212,212,255,213, + 213,213,255,214,214,214,255,175,175,175,255,83,83,83,71,255,255,255,0, + 255,255,255,0,0,0,0,1,134,134,134,234,231,231,231,255,222,222,222, + 255,224,224,224,255,219,219,219,255,219,219,219,255,218,218,218,255,226,226, + 226,255,230,230,230,255,227,227,227,255,219,219,219,255,215,215,215,255,213, + 213,213,255,211,211,211,255,208,209,209,255,213,213,213,255,213,213,213,255, + 216,216,216,255,220,220,220,255,226,226,226,255,229,229,229,255,222,222,222, + 255,213,213,213,255,214,214,214,255,213,213,213,255,222,222,222,255,215,215, + 215,255,215,215,215,252,91,91,91,174,255,255,255,0,255,255,255,0,80, + 80,80,32,190,190,190,255,223,223,223,255,221,221,221,255,225,225,225,255, + 218,218,218,255,218,218,218,255,219,219,219,255,219,219,219,255,219,219,219, + 255,222,222,222,255,229,229,229,255,232,232,232,255,233,233,233,255,234,234, + 234,255,235,235,235,255,234,234,234,255,232,232,232,255,230,230,230,255,227, + 227,227,255,220,220,220,255,215,215,215,255,215,215,215,255,214,214,214,255, + 213,213,213,255,213,213,213,255,220,220,220,255,213,213,213,255,218,218,218, + 255,139,139,139,244,255,255,255,0,255,255,255,0,83,83,83,55,211,211, + 211,255,235,235,235,255,233,233,233,255,234,234,234,255,234,234,234,255,233, + 233,233,255,233,233,233,255,233,233,233,255,233,233,233,255,233,233,233,255, + 233,233,233,255,232,232,232,255,232,232,232,255,232,232,232,255,232,232,232, + 255,232,232,232,255,232,232,232,255,231,231,231,255,231,231,231,255,230,230, + 230,255,230,230,230,255,229,229,229,255,229,229,229,255,229,229,229,255,228, + 228,228,255,228,228,228,255,227,227,227,255,227,227,227,255,128,128,128,250, + 255,255,255,0,255,255,255,0,82,82,82,56,191,191,191,255,192,192,192, + 255,187,187,187,255,186,186,186,255,185,185,185,255,184,184,184,255,183,183, + 183,255,181,181,181,255,180,180,180,255,179,179,179,255,178,178,178,255,177, + 177,177,255,175,175,175,255,174,174,174,255,173,173,173,255,172,172,172,255, + 170,170,170,255,169,169,169,255,168,168,168,255,167,167,167,255,165,165,165, + 255,164,164,164,255,163,163,163,255,162,162,162,255,160,160,160,255,159,159, + 159,255,159,159,159,255,169,169,169,255,118,118,118,250,255,255,255,0,255, + 255,255,0,82,82,82,56,189,189,189,255,191,191,191,255,187,187,187,255, + 176,176,176,255,168,168,168,255,170,170,170,255,172,172,172,255,173,173,173, + 255,174,174,174,255,175,175,175,255,175,175,175,255,175,175,175,255,175,175, + 175,255,174,174,174,255,172,172,172,255,171,171,171,255,170,170,170,255,169, + 169,169,255,178,178,178,255,169,169,169,255,167,167,167,255,172,172,172,255, + 172,172,172,255,164,164,164,255,162,162,162,255,173,173,173,255,159,159,159, + 255,168,168,168,255,117,117,117,250,255,255,255,0,255,255,255,0,82,82, + 82,56,188,188,188,255,191,191,191,255,187,187,187,255,160,160,160,255,140, + 140,140,255,149,149,149,255,154,154,154,255,160,160,160,255,166,166,166,255, + 169,169,169,255,172,172,172,255,173,173,173,255,174,174,174,255,174,174,174, + 255,172,172,172,255,171,171,171,255,169,169,169,255,168,168,168,255,190,190, + 190,255,170,170,170,255,166,166,166,255,179,179,179,255,183,183,183,255,167, + 167,167,255,162,162,162,255,183,183,183,255,159,159,159,255,167,167,167,255, + 116,116,116,250,255,255,255,0,255,255,255,0,82,82,82,56,186,186,186, + 255,191,191,191,255,186,186,186,255,165,165,165,255,141,141,141,255,148,148, + 148,255,154,154,154,255,160,160,160,255,166,166,166,255,168,168,168,255,171, + 171,171,255,173,173,173,255,174,174,174,255,173,173,173,255,171,171,171,255, + 170,170,170,255,169,169,169,255,168,168,168,255,190,190,190,255,170,170,170, + 255,166,166,166,255,179,179,179,255,182,182,182,255,166,166,166,255,162,162, + 162,255,183,183,183,255,159,159,159,255,167,167,167,255,115,115,115,250,255, + 255,255,0,0,0,0,3,70,70,70,65,185,185,185,255,191,191,191,255, + 185,185,185,255,180,180,180,255,180,180,180,255,177,177,177,255,169,169,169, + 255,166,166,166,255,166,166,166,255,168,168,168,255,171,171,171,255,173,173, + 173,255,173,173,173,255,173,173,173,255,171,171,171,255,169,169,169,255,168, + 168,168,255,167,167,167,255,190,190,190,255,170,170,170,255,165,165,165,255, + 178,178,178,255,182,182,182,255,166,166,166,255,162,162,162,255,183,183,183, + 255,159,159,159,255,166,166,166,255,114,114,114,250,0,0,0,6,0,0, + 0,7,69,69,69,67,178,178,178,255,192,192,192,255,185,185,185,255,187, + 187,187,255,191,191,191,255,192,192,192,255,192,192,192,255,192,192,192,255, + 192,192,192,255,190,190,190,255,184,184,184,255,177,177,177,255,173,173,173, + 255,171,171,171,255,171,171,171,255,169,169,169,255,168,168,168,255,166,166, + 166,255,177,177,177,255,167,167,167,255,164,164,164,255,170,170,170,255,170, + 170,170,255,162,162,162,255,161,161,161,255,170,170,170,255,159,159,159,255, + 165,165,165,255,111,111,111,247,0,0,0,10,255,255,255,0,46,46,46, + 17,120,120,120,242,198,198,198,252,201,201,201,251,200,200,200,251,198,198, + 198,251,197,197,197,251,194,194,194,251,192,192,192,252,190,190,190,252,189, + 189,189,252,187,187,187,251,185,185,185,251,183,183,183,252,181,181,181,252, + 180,180,180,252,177,177,177,252,175,175,175,251,173,173,173,251,172,172,172, + 251,169,169,169,251,167,167,167,251,165,165,165,251,164,164,164,250,162,162, + 162,250,160,160,160,250,160,160,160,250,159,159,159,250,147,147,147,252,86, + 86,86,182,0,0,0,2,255,255,255,0,255,255,255,0,82,82,82,31, + 81,81,81,113,79,79,79,125,77,77,77,130,75,75,75,133,73,73,73, + 136,72,72,72,139,70,70,70,141,69,69,69,144,68,68,68,146,67,67, + 67,148,66,66,66,150,66,66,66,150,66,66,66,151,66,66,66,151,66, + 66,66,151,66,66,66,150,67,67,67,149,68,68,68,146,69,69,69,145, + 70,70,70,143,71,71,71,140,73,73,73,137,74,74,74,134,76,76,76, + 131,78,78,78,127,81,81,81,123,84,84,84,100,85,85,85,12,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,2, + 0,0,0,4,0,0,0,8,0,0,0,11,0,0,0,13,0,0,0, + 16,0,0,0,18,0,0,0,20,0,0,0,20,0,0,0,19,0,0, + 0,17,0,0,0,15,0,0,0,12,0,0,0,9,0,0,0,6,0, + 0,0,3,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0, + 0 +}; diff --git a/3rdparty/openctm/tools/icons/icon_texture.h b/3rdparty/openctm/tools/icons/icon_texture.h new file mode 100644 index 000000000..79fd234f0 --- /dev/null +++ b/3rdparty/openctm/tools/icons/icon_texture.h @@ -0,0 +1,229 @@ +//------------------------------------------------------------------------------ +// Original: Texture.svg +// Size: 32x32 +// Format: RGBA +// Conversion: +// 1) SVG to 32x32 PNG with Inkscape +// 2) PNG to RGBA with ImageMagick (convert icon_texture.png icon_texture.rgba) +// 3) RGBA to C code with bin2c (bin2c icon_texture.rgba icon_texture > icon_texture.h) +//------------------------------------------------------------------------------ + +static const unsigned char icon_texture[] = { + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,131,132,131,34,191,192,191,151,217,217,217, + 212,220,221,220,219,220,221,220,219,220,221,220,219,220,221,220,219,220,221, + 220,219,220,220,220,219,220,220,220,219,220,220,220,219,219,220,219,219,219, + 220,219,219,219,219,218,219,218,219,218,219,218,219,218,219,217,218,217,219, + 217,218,217,219,217,217,216,219,216,217,216,219,216,217,216,219,216,216,215, + 219,215,216,215,219,215,215,214,219,214,215,214,219,214,215,214,219,214,214, + 213,219,213,214,213,219,199,200,199,188,160,160,159,99,255,255,255,0,255, + 255,255,0,186,186,186,156,248,249,248,255,248,249,248,255,248,249,248,255, + 248,249,248,255,248,249,248,255,248,249,248,255,248,248,247,255,247,248,247, + 255,247,248,247,255,246,247,246,255,246,247,246,255,246,247,246,255,245,246, + 245,255,245,246,245,255,245,245,244,255,244,245,244,255,244,245,244,255,243, + 244,243,255,243,244,243,255,243,243,242,255,242,243,242,255,242,243,242,255, + 242,242,241,255,241,242,241,255,241,241,240,255,240,241,240,255,240,241,240, + 255,240,240,239,255,231,232,231,246,58,58,58,20,255,255,255,0,211,212, + 211,218,248,249,248,255,248,249,248,255,248,249,248,255,248,249,248,255,248, + 249,248,255,248,249,248,255,247,248,247,255,247,248,247,255,246,247,246,255, + 246,247,246,255,246,247,246,255,245,246,245,255,245,246,245,255,245,245,244, + 255,244,245,244,255,244,245,244,255,243,244,243,255,243,244,243,255,243,243, + 242,255,242,243,242,255,242,243,242,255,242,242,241,255,241,242,241,255,241, + 241,240,255,240,241,240,255,240,241,240,255,240,240,239,255,239,240,239,255, + 239,239,238,255,148,148,148,94,255,255,255,0,214,215,214,226,248,249,248, + 255,248,249,248,255,248,249,248,255,248,249,248,255,248,249,248,255,247,248, + 247,255,247,248,247,255,246,247,246,255,246,247,246,255,246,247,246,255,245, + 246,245,255,245,246,245,255,245,245,244,255,244,245,244,255,244,245,244,255, + 243,244,243,255,243,244,243,255,243,243,242,255,242,243,242,255,242,243,242, + 255,242,242,241,255,241,242,241,255,241,241,240,255,240,241,240,255,240,241, + 240,255,240,240,239,255,239,240,239,255,239,239,238,255,239,239,238,255,148, + 149,148,111,255,255,255,0,214,215,214,227,248,249,248,255,248,249,248,255, + 248,249,248,255,248,249,248,255,247,248,247,255,247,248,247,255,246,247,246, + 255,246,247,246,255,246,247,246,255,245,246,245,255,245,246,245,255,245,245, + 244,255,244,245,244,255,244,245,244,255,243,244,243,255,243,244,243,255,243, + 243,242,255,242,243,242,255,242,243,242,255,242,242,241,255,241,242,241,255, + 241,241,240,255,240,241,240,255,240,241,240,255,240,240,239,255,239,240,239, + 255,239,239,238,255,239,239,238,255,238,239,238,255,147,147,147,112,255,255, + 255,0,214,215,214,227,248,249,248,255,248,249,248,255,248,249,248,255,247, + 248,247,255,247,248,247,255,246,247,246,255,246,247,246,255,246,247,246,255, + 245,246,245,255,245,246,245,255,245,245,244,255,244,245,244,255,244,245,244, + 255,243,244,243,255,243,244,243,255,243,243,242,255,242,243,242,255,242,243, + 242,255,242,242,241,255,241,242,241,255,241,241,240,255,240,241,240,255,240, + 241,240,255,240,240,239,255,239,240,239,255,239,239,238,255,239,239,238,255, + 238,239,238,255,238,238,237,255,147,147,147,112,255,255,255,0,214,215,214, + 227,248,249,248,255,248,249,248,255,63,118,176,255,71,126,186,255,72,126, + 186,255,72,128,188,255,73,129,188,255,74,129,189,255,75,130,190,255,75, + 131,191,255,76,132,191,255,76,133,192,255,77,134,193,255,78,135,194,255, + 79,135,194,255,79,137,195,255,80,138,196,255,81,138,197,255,81,139,197, + 255,82,140,198,255,82,141,199,255,83,142,200,255,84,143,200,255,85,144, + 201,255,85,144,202,255,86,145,203,255,116,153,194,255,238,238,237,255,237, + 238,237,255,147,147,146,112,255,255,255,0,214,215,214,227,248,249,248,255, + 247,248,247,255,71,124,183,255,78,131,194,255,79,132,195,255,80,133,196, + 255,81,134,197,255,81,136,198,255,82,137,199,255,83,138,200,255,84,139, + 201,255,85,140,202,255,86,142,203,255,87,143,204,255,88,144,205,255,89, + 145,206,255,89,146,207,255,90,148,208,255,91,149,209,255,92,150,210,255, + 93,151,211,255,94,152,212,255,95,154,213,255,96,155,214,255,97,156,215, + 255,97,157,216,255,123,161,199,255,237,238,237,255,237,237,236,255,147,147, + 146,112,255,255,255,0,214,215,214,227,247,248,247,255,247,248,247,255,79, + 130,183,255,89,139,194,255,86,137,194,255,83,135,194,255,80,133,194,255, + 78,131,194,255,79,133,195,255,80,134,196,255,84,131,189,255,86,126,181, + 255,83,123,178,255,83,121,175,255,81,119,174,255,79,117,171,255,78,114, + 168,255,77,112,166,255,75,110,164,255,73,108,161,255,73,105,159,255,71, + 103,157,255,69,101,153,255,68,100,152,255,74,112,166,255,89,142,200,255, + 122,160,198,255,237,238,237,255,237,237,236,255,146,147,146,112,255,255,255, + 0,213,214,213,227,247,248,247,255,247,248,247,255,98,143,189,255,100,147, + 194,255,97,145,194,255,94,143,194,255,91,140,194,255,88,138,194,255,85, + 136,194,255,85,133,191,255,85,128,185,255,83,126,182,255,82,124,180,255, + 81,123,179,255,80,121,177,255,79,119,176,255,78,117,174,255,77,116,172, + 255,76,114,170,255,75,113,169,255,75,112,166,255,73,110,165,255,71,109, + 163,255,71,107,162,255,71,108,162,255,75,114,170,255,127,159,196,255,237, + 237,236,255,236,237,236,255,146,146,145,112,255,255,255,0,213,214,213,227, + 247,248,247,255,246,247,246,255,100,145,188,255,110,155,194,255,107,153,194, + 255,104,150,194,255,101,148,194,255,98,146,194,255,96,144,194,255,92,142, + 194,255,90,140,194,255,87,137,194,255,84,135,194,255,81,133,194,255,78, + 131,194,255,79,132,195,255,80,133,196,255,81,135,197,255,82,136,198,255, + 82,137,199,255,82,136,199,255,79,133,195,255,76,130,189,255,72,124,182, + 255,67,117,174,255,62,110,165,255,117,142,174,255,236,237,236,255,236,236, + 235,255,146,146,145,112,255,255,255,0,213,214,213,227,246,247,246,255,246, + 247,246,255,107,150,187,255,121,163,194,255,118,160,194,255,115,158,194,255, + 112,156,194,255,109,154,194,255,106,152,194,255,103,150,194,255,100,147,194, + 255,97,145,194,255,94,143,194,255,91,141,194,255,87,138,193,255,80,131, + 188,255,72,122,182,255,64,113,173,255,56,103,161,255,47,91,148,255,41, + 83,138,255,38,79,132,255,35,74,126,255,31,69,120,255,28,64,113,255, + 24,59,107,255,121,141,170,255,236,236,235,255,236,236,235,255,145,146,145, + 112,255,255,255,0,212,213,212,227,246,247,246,255,246,246,245,255,115,156, + 187,255,131,171,194,255,128,168,194,255,126,166,194,255,123,164,194,255,120, + 162,194,255,117,160,194,255,114,157,194,255,107,152,194,255,92,140,190,255, + 78,128,184,255,68,118,177,255,60,108,171,255,56,104,164,255,53,100,159, + 255,50,96,153,255,47,91,148,255,44,87,142,255,40,82,136,255,37,77, + 130,255,34,73,124,255,30,68,118,255,27,63,112,255,24,58,106,255,120, + 141,169,255,236,236,235,255,235,236,235,255,145,145,145,112,255,255,255,0, + 212,213,212,227,246,246,245,255,245,246,245,255,115,156,186,255,136,174,194, + 255,136,174,194,255,136,174,194,255,132,172,193,255,116,158,191,255,96,142, + 188,255,77,127,184,255,65,117,179,255,63,114,177,255,62,112,174,255,59, + 109,170,255,57,105,166,255,54,102,161,255,51,98,156,255,49,93,151,255, + 45,89,145,255,42,85,139,255,39,80,134,255,36,76,128,255,33,71,122, + 255,29,66,116,255,26,62,110,255,23,57,104,255,120,140,168,255,235,236, + 235,255,235,235,234,255,145,145,145,112,255,255,255,0,212,212,212,227,245, + 246,245,255,245,246,245,255,143,163,170,255,147,178,193,255,133,172,193,255, + 100,143,182,255,67,116,173,255,61,111,173,255,62,112,174,255,62,112,174, + 255,61,111,173,255,60,110,171,255,59,108,169,255,57,105,165,255,55,102, + 161,255,52,98,157,255,49,95,152,255,47,91,147,255,44,87,142,255,41, + 82,136,255,38,78,131,255,34,74,125,255,31,69,120,255,28,65,114,255, + 25,60,108,255,22,55,102,255,119,140,168,255,235,235,234,255,235,235,234, + 255,145,145,144,112,255,255,255,0,212,212,212,227,245,246,245,255,244,245, + 244,255,179,178,163,255,160,160,144,255,119,117,100,255,83,89,96,255,62, + 98,145,255,58,107,167,255,58,107,168,255,58,107,168,255,58,107,167,255, + 57,105,166,255,56,103,163,255,54,101,160,255,52,98,156,255,50,95,152, + 255,47,91,148,255,44,88,143,255,42,84,138,255,39,80,133,255,36,76, + 128,255,33,71,123,255,30,67,117,255,27,63,111,255,23,58,106,255,20, + 54,100,255,119,139,166,255,235,235,234,255,234,235,234,255,145,145,144,112, + 255,255,255,0,212,212,212,227,244,245,244,255,244,245,244,255,128,133,117, + 255,169,158,132,255,148,140,112,255,104,103,83,255,111,108,91,255,91,90, + 85,255,72,91,115,255,59,97,146,255,55,102,161,255,54,101,160,255,52, + 99,157,255,51,97,155,255,49,94,151,255,47,91,148,255,45,88,144,255, + 42,84,139,255,40,81,134,255,37,77,130,255,34,73,125,255,31,69,119, + 255,28,65,114,255,25,60,109,255,22,56,103,255,19,52,98,255,118,138, + 165,255,234,235,234,255,234,234,233,255,145,145,144,112,255,255,255,0,212, + 212,211,227,244,245,244,255,244,245,244,255,124,128,111,255,140,133,107,255, + 87,88,64,255,114,113,93,255,165,154,129,255,128,121,105,255,116,117,94, + 255,107,108,87,255,107,96,83,255,96,92,90,255,70,88,112,255,51,90, + 140,255,46,90,146,255,44,87,143,255,42,84,139,255,40,81,135,255,37, + 77,130,255,35,74,126,255,35,70,119,255,29,66,116,255,26,62,111,255, + 23,58,106,255,20,54,100,255,17,49,95,255,117,137,164,255,234,234,233, + 255,234,234,233,255,144,144,144,112,255,255,255,0,211,212,211,227,244,245, + 244,255,243,244,243,255,122,126,107,255,97,98,76,255,101,100,78,255,116, + 113,99,255,159,146,122,255,149,139,114,255,151,138,115,255,146,136,111,255, + 117,106,87,255,140,125,103,255,123,106,87,255,109,94,79,255,57,83,119, + 255,41,83,138,255,39,80,134,255,37,77,130,255,35,74,126,255,79,88, + 95,255,113,106,89,255,60,72,90,255,24,59,107,255,21,55,102,255,18, + 51,97,255,15,47,92,255,116,136,162,255,234,234,233,255,233,233,232,255, + 144,144,144,112,255,255,255,0,211,212,211,227,243,244,243,255,243,244,243, + 255,245,245,244,255,245,246,245,255,245,246,245,255,245,245,245,255,245,245, + 245,255,245,245,244,255,244,245,244,255,244,245,244,255,244,244,243,255,243, + 244,243,255,243,243,242,255,243,243,242,255,242,243,242,255,242,242,242,255, + 242,242,242,255,242,242,241,255,242,242,241,255,241,242,241,255,241,241,240, + 255,241,241,240,255,240,240,239,255,240,240,239,255,239,240,239,255,239,239, + 239,255,238,238,237,255,233,233,232,255,233,233,232,255,144,144,144,112,255, + 255,255,0,210,211,210,227,243,244,243,255,243,243,242,255,242,243,242,255, + 242,243,242,255,242,242,241,255,241,242,241,255,241,241,240,255,240,241,240, + 255,240,241,240,255,240,240,239,255,239,240,239,255,239,239,238,255,239,239, + 238,255,238,239,238,255,238,238,237,255,237,238,237,255,237,237,236,255,237, + 237,236,255,236,237,236,255,236,236,235,255,236,236,235,255,235,235,234,255, + 235,235,234,255,234,235,234,255,234,234,233,255,234,234,233,255,233,233,232, + 255,233,233,232,255,233,233,232,255,144,144,143,112,255,255,255,0,210,211, + 210,227,243,243,242,255,242,243,242,255,242,243,242,255,242,242,241,255,241, + 242,241,255,241,241,240,255,240,241,240,255,240,241,240,255,240,240,239,255, + 239,240,239,255,239,239,238,255,239,239,238,255,238,239,238,255,238,238,237, + 255,237,238,237,255,237,237,236,255,237,237,236,255,236,237,236,255,236,236, + 235,255,236,236,235,255,235,235,234,255,235,235,234,255,234,235,234,255,234, + 234,233,255,234,234,233,255,233,233,232,255,233,233,232,255,233,233,232,255, + 232,232,231,255,144,144,143,112,255,255,255,0,210,210,209,227,242,243,242, + 255,242,243,242,255,242,242,241,255,241,242,241,255,241,241,240,255,240,241, + 240,255,240,241,240,255,240,240,239,255,239,240,239,255,239,239,238,255,239, + 239,238,255,238,239,238,255,238,238,237,255,237,238,237,255,237,237,236,255, + 237,237,236,255,236,237,236,255,236,236,235,255,236,236,235,255,235,235,234, + 255,235,235,234,255,234,235,234,255,234,234,233,255,234,234,233,255,233,233, + 232,255,233,233,232,255,233,233,232,255,232,232,231,255,232,232,231,255,143, + 143,143,112,255,255,255,0,188,189,188,202,242,243,242,255,242,242,241,255, + 241,242,241,255,241,241,240,255,241,241,240,255,240,241,240,255,240,240,239, + 255,239,240,239,255,239,239,238,255,239,239,238,255,238,239,238,255,238,238, + 237,255,238,238,237,255,237,237,236,255,237,237,236,255,236,237,236,255,236, + 236,235,255,236,236,235,255,235,236,235,255,235,235,234,255,234,235,234,255, + 234,234,233,255,234,234,233,255,233,233,232,255,233,233,232,255,233,233,232, + 255,232,232,231,255,232,232,231,255,231,232,231,255,104,104,104,66,255,255, + 255,0,136,136,136,122,232,232,231,248,241,242,241,255,241,242,241,255,241, + 241,240,255,240,241,240,255,240,240,239,255,239,240,239,255,239,240,239,255, + 239,239,238,255,238,239,238,255,238,238,237,255,238,238,237,255,237,238,237, + 255,237,237,236,255,236,237,236,255,236,236,235,255,236,236,235,255,235,236, + 235,255,235,235,234,255,235,235,234,255,234,234,233,255,234,234,233,255,233, + 234,233,255,233,233,232,255,233,233,232,255,232,232,231,255,232,232,231,255, + 231,232,231,255,187,187,186,220,26,26,26,5,255,255,255,0,26,26,26, + 5,36,36,36,67,109,109,109,141,117,117,117,151,117,117,117,151,117,117, + 116,151,116,117,116,151,116,117,116,151,116,116,116,151,116,116,116,151,116, + 116,115,151,116,116,115,151,115,116,115,151,115,115,115,151,115,115,115,151, + 115,115,115,151,115,115,115,151,115,115,115,151,115,115,114,151,115,115,114, + 151,114,114,114,151,114,114,114,151,114,114,114,151,114,114,113,151,114,114, + 113,151,113,113,113,151,113,113,113,151,113,113,113,151,74,74,74,107,26, + 26,26,32,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, + 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, + 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, + 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, + 255,255,0,255,255,255,0,255,255,255,0, + 0 +}; diff --git a/3rdparty/openctm/tools/icons/openctm.ico b/3rdparty/openctm/tools/icons/openctm.ico new file mode 100644 index 0000000000000000000000000000000000000000..35b850e0c9e7d2a38578e4099bc73e599e6676a4 GIT binary patch literal 32038 zcmeHQ3y>7W8SeFv1A-nZMx*GRQIr@pB*qen=FVq)Mx%u>F~D(qpcpkiq9m5ep?RqB zZ8W9PBC$k`#<%5@$Qg{NsCPTdfr{vg&mbZoC?c}?zMkpX-nr@7nc3OB#R^qF|IBQ6 z|KImdPj^qx-+e-)L_aZPh=6VqC-)QL5FtcUlYM?CuHTDmBS$*t!-Y70OCefX?DG)^ z2(f;&5F?NWNl}7*9ZH~Bv9!M}@*Mx=^LZX#1DPz3Pw5#f(%CyiI&&b;O9}GTLs$sq zR&nrk+laKa1hNitZixH?wEQfiTZ}wqv}m(lK>j?i{8O~OvWcl2r1$1uk88`tprJoT z{+nbOZPo%Y$r|BThEINC_!7c$E)Z>96H&$*$V$AwSDte(HzBvG?qc{EH=) zv~`IXb61@zCm=ubDp@3UIB-As2`HAH-vGKsY!QnEejJL#OYqJRX z*NT1vT9Efb$d{0%qP1u1kogyj?e_Z-@;nZ~J+iHqxi^Peuh9Mv8+b5zu^D{lI=@|J=hwRVa#h7OY!dIxb znO#ij_3PKD8rF;w8X*mkI!Fql{_&XC_#4wOZ61vVgzZcdqy@tEO8!H`vtScj>xpo5klt$tqwtp%Rd#jVgX_ECrxfhnsoA%2v|Cq+ zj#>RwIdOG>ePUS&kZegRwu)<;`AXPV{QEOBfKB#eI)-<} z#O&y}7(&`7j+v05VnTMiLO&5ru&?@Yg<~0>nM1>1D8oK+ z%!O>vejgZS7W)DHG247Rzd<<4v`-8lLJs2i1@HiJEyH?LmXn(qjINN>a6mNTwkpDSOy%f^V zdHz;-Y`=@Tzn}8Ct`o4o3}qZipR#Uy?6S_y6enlCuG`d)%e4Oj@;AypneQ)p9k=WJ zG|`dYNVn%bF2nw{$lIU&4D2rT*j|G7nnS#{{LW+8=a_7a-QH(^2fOQwZD*blJAn2=>|E4-^xuX4rktWBX%{)BX6Bx)#FzYNQ#j zwWZ!M@Z2cl9WR~|_7~vy-O!$F4!#e2IK$uB>&2L!{@ya9oCnyy9ls5h^9gC|O^_cyfI=7^IZPMG)$YvZxECr%VL=2>k{w7YScG(uA^Kov~RNtjJD}EBL~J1q%%i_;ZQ~VJ?>z9 zOgcL|pgti+r2D&m9QqJHx!kWXaSi}|_BBQh{NB>qCC4Z#4|N~oCx9Oo;YnLR2Zz-L z9)Hu*)(HNCbxfEa@QX)K&%+EoZ4Kam5B|5`N7+a7+qCz)pgUG#U!6UohVb({yBc#3 z#XH(#hC1VnxijOu*!$4`*8_WhX&-Sa!2PxnJ7XdzcDwU8UJmpDgwIhmb0<1NH?0*capXeZu1Prb`$<$Cjrm8^Asu zxJ_dL*7rxmxCL9N^l@~8_}@fXdl7?-?d5kt^E0{*V>NsqDSu8eA^Z=boXsTm)~?~e zZGJyYTkoUYZ;9h;zdU8){{s2Xg~+*C;2r~6Y4$tf6EN2I!x8sd8Tk2~PtM!$dp$5; zXU5HW6U23B>k;DO_2!F-|4HPt-^J7O8_|9^Ye4+^r0j=yjt}+PP3k-%e$EeeKxF(6 zW8UC%#D)6dme-y|pEWEgtbXN0z`q1(<-3M_*R$g~P4j7N8?Q)We%24Oek~;a*+?hj zkL>qUcYTZ+v*?=hYscs|DtTN2KV#@FgSasTz&0hIzPyNM!FT;hr8oc^A|rgq{){K+ z75{{GFk>RFv|G#ct*SI3zO!tV~IvK_;a{JcH^Uh&%$)4yOY!3-K`-`be z*O?N?04+KiZQY6tJRgY+)B})#x}UIh9WwBo8KiD$uys?tt+!6u8X4s88;Pk>r#c#? z7M)m!h5Vwa-qs_rHjC%OJbH+8uF|#G`BXWoTxCbuRX7}6NG@?~5OKA^5h%$LFvRmbE{U-13FUB4n^JPGDQ z%<&|;4;G2GdEbeOwG!#e;7=cX0BP27VGfb&&=Kp9XsEjz&~5k2eyx{tHzv&j!!>MfWK-N?nGJc+7CMpmwUmKs0aL=YX{n1Hm)nt z@g{woAbQ3HlzXo(smw7R4Rt6;sFt&5x78Hl9 z`2g)_73QHT%%6V9L5kPvm5O67w3*mtqT0S=xP`e^CI0GpxDoaW<7V!m6&y#cKM#+W`(4@3A64d0KRgd{zhBwo=D;{?%?Ehb zju1!U$JcwU5BSpuoMYQx$KrhV3yR}be)tSy=b~pxFDL48AMvLTxQEs`I$pUBP{w+@ z&%WZ^Ten#^mb<2$w)>DjjZ^N1xbbM{BL|^Pm;vd{x!1Mq^W0NH_hHoI8sJYK%!iE7 zvE$wFboe05xOoZVTlKtAj%$QJeZc)Pj@7Yq4Gnzoeu%ojy&lfh^M*aHA^z%lxCEHo zZ!la7g*nz|LihmBOYnZ5em-GHmv=IUOm8$Y|U8DTzgT)XT zyQc7Rz6d@DioH{9=1Pp4k5l=AbPe;T58OTM6bJZV5BT8qP<4U(wU&s_s&W3RO}JL^ zr*>kcefF90c^_|d)Q$Oc&Pbi^E$>2H03$v={9auj;#3*C>C+8n|<&&b+Z9MzmME_mRGDsF$zzyaxGm zZ&-Iv6z+A8`~6&qd(L+5d4bq>FUO$s8sg9IsAua~oxc5}P~7=`6l0IU8sX3QD|c^j zj@i*>{{g&%V(C?z$F(J6biYM8t^xj!0Yjm0jpc%PntrPye|{7HBcw35S8APkQC+|{@e=E{O&o)+SBd{euv4_>9AaM1 zLR}9tzx_Gx`6)ph%K5Dd{GWpj`S*H=)0w-uFT``sdjAIIIKE#FzfyTC%>QbXzp=u= zZ=qr`CQo2I?83R-_|H{1!z}vjezVNIw2Iw5qd_~fJr~v;ilEPwrntEZidm?Of10{{r{4^@N!4@|JNpl#?eR{;N>VSRDuI z@Ho`>FyAV^l=HY1if_>|`5h;~pWkkGRb|V42F&{r>-U?-`1=FaK`L)w=rZ}=hWv$? zS3B;vJ6!vYy}kM<=2iD|O#YmkI;p6flKULEo9$Kd}u@)WIu!Tr86 z+&$-aig0@XDtwjJ5&7SP^m6f~!sYBO=6$aH&gWu0)1>m%iVn$tEz+Iohgrt17sf7r zycysA=Qwjye)f{S23}i1I2XZhY<|M;@b13UUiQrZ))B+iJ9Z&F7sfUSX zsW%l3QUjXQ$Y^V@6ZluBbZ31Ir&tAEpM# +#include +#include +#include +#include "image.h" +#include "common.h" + +using namespace std; + + +/// Flip the image vertically. +void Image::FlipVertically() +{ + if((mWidth <= 0) || (mHeight <= 0)) + return; + + for(int y = 0; y < mHeight / 2; ++ y) + { + for(int x = 0; x < mWidth; ++ x) + { + for(int k = 0; k < mComponents; ++ k) + { + unsigned char tmp = mData[(y * mWidth + x) * mComponents + k]; + mData[(y * mWidth + x) * mComponents + k] = mData[((mHeight - 1 - y) * mWidth + x) * mComponents + k]; + mData[((mHeight - 1 - y) * mWidth + x) * mComponents + k] = tmp; + } + } + } +} + +/// Load image from a JPEG file. +void Image::LoadJPEG(const char * aFileName) +{ + FILE * inFile = fopen(aFileName, "rb"); + if(inFile != NULL) + { + // Init libjpeg resources + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, inFile); + + // Read JPEG header + jpeg_read_header(&cinfo, TRUE); + jpeg_start_decompress(&cinfo); + SetSize(cinfo.output_width, cinfo.output_height, cinfo.output_components); + + // Read pixel data + for(int i = 0; i < mHeight; ++ i) + { + unsigned char * scanLines[1]; + scanLines[0] = &mData[(mHeight - 1 - i) * mWidth * mComponents]; + jpeg_read_scanlines(&cinfo, scanLines, 1); + } + + // Finalize libjpeg resources + jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + + // Close input file + fclose(inFile); + } +} + +/// Load image from a PNG file. +void Image::LoadPNG(const char * aFileName) +{ + bool success = false; + png_t p; + png_init(0, 0); + if(png_open_file(&p, aFileName) == PNG_NO_ERROR) + { + if((p.depth == 8) && ((p.color_type == PNG_GREYSCALE) || + (p.color_type == PNG_TRUECOLOR) || + (p.color_type == PNG_TRUECOLOR_ALPHA)) && (p.width > 0) && + (p.height > 0) && (p.bpp >= 1) && (p.bpp <= 4)) + { + SetSize(p.width, p.height, p.bpp); + if(png_get_data(&p, &mData[0]) == PNG_NO_ERROR) + { + FlipVertically(); + success = true; + } + } + png_close_file(&p); + } + + // Did we have an error? + if(!success) + { + Clear(); + throw runtime_error("Unable to load PNG file."); + } +} + +/// Load an image from a file (any supported format). +void Image::LoadFromFile(const char * aFileName) +{ + string fileExt = UpperCase(ExtractFileExt(string(aFileName))); + if((fileExt == string(".JPG")) || (fileExt == string(".JPEG"))) + LoadJPEG(aFileName); + else if(fileExt == string(".PNG")) + LoadPNG(aFileName); + else + throw runtime_error("Unknown input file extension."); +} diff --git a/3rdparty/openctm/tools/image.h b/3rdparty/openctm/tools/image.h new file mode 100644 index 000000000..6ca293351 --- /dev/null +++ b/3rdparty/openctm/tools/image.h @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: image.h +// Description: Interface for the Image class. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __IMAGE_H_ +#define __IMAGE_H_ + +#include + +class Image { + private: + /// Load image from a JPEG file. + void LoadJPEG(const char * aFileName); + + /// Load image from a PNG file. + void LoadPNG(const char * aFileName); + + /// Flip the image vertically. + void FlipVertically(); + + public: + /// Constructor + Image() + { + mWidth = mHeight = 0; + mComponents = 4; + } + + /// Clear the image. + void Clear() + { + mWidth = mHeight = 0; + mComponents = 4; + mData.clear(); + } + + /// Set image dimensions. + void SetSize(int aWidth, int aHeight, int aComponents) + { + mWidth = aWidth; + mHeight = aHeight; + mComponents = aComponents; + mData.resize(mWidth * mHeight * mComponents); + } + + /// Load an image from a file (any supported format). + void LoadFromFile(const char * aFileName); + + /// Check if the image is empty. + bool IsEmpty() + { + return (mWidth == 0) || (mHeight == 0); + } + + /// Image width (in pixels). + int mWidth; + + /// Image height (in pixels). + int mHeight; + + /// Number of components (1, 3 or 4). + int mComponents; + + /// Pixel data + std::vector mData; +}; + + +#endif // __IMAGE_H_ diff --git a/3rdparty/openctm/tools/jpeg/Makefile.am b/3rdparty/openctm/tools/jpeg/Makefile.am new file mode 100644 index 000000000..a3c083779 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/Makefile.am @@ -0,0 +1,133 @@ +## Process this file with automake to produce Makefile.in +# +# Automake Makefile for the JPEG library +# +# This file is written by Bob Friesenhahn, Guido Vollbeding +# + +# Sources to build library +LIBSOURCES = jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c @MEMORYMGR@.c + +# System dependent sources +SYSDEPSOURCES = jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c + +# Headers which are installed to support the library +INSTINCLUDES = jerror.h jmorecfg.h jpeglib.h + +# Headers which are not installed +OTHERINCLUDES = cderror.h cdjpeg.h jdct.h jinclude.h jmemsys.h jpegint.h \ + jversion.h transupp.h + +# Manual pages (Automake uses 'MANS' for itself) +DISTMANS= cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1 + +# Other documentation files +DOCS= README install.txt usage.txt wizard.txt example.c libjpeg.txt \ + structure.txt coderules.txt filelist.txt change.log + +# Makefiles for various systems +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt + +# Configuration files +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms + +# Support scripts for configure +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing + +# Miscellaneous support files +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map + +# Test support files +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg + +# libtool libraries to build +lib_LTLIBRARIES = libjpeg.la + +# Library sources for libjpeg.la +libjpeg_la_SOURCES = $(LIBSOURCES) + +# LDFLAGS for libjpeg.la +libjpeg_la_LDFLAGS = -no-undefined \ + -version-info $(JPEG_LIB_VERSION) + +if HAVE_LD_VERSION_SCRIPT + libjpeg_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libjpeg.map +endif + +# Executables to build +bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +# Executable sources & libs +cjpeg_SOURCES = cjpeg.c rdppm.c rdgif.c rdtarga.c rdrle.c rdbmp.c \ + rdswitch.c cdjpeg.c +cjpeg_LDADD = libjpeg.la +djpeg_SOURCES = djpeg.c wrppm.c wrgif.c wrtarga.c wrrle.c wrbmp.c \ + rdcolmap.c cdjpeg.c +djpeg_LDADD = libjpeg.la +jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c +jpegtran_LDADD = libjpeg.la +rdjpgcom_SOURCES = rdjpgcom.c +wrjpgcom_SOURCES = wrjpgcom.c + +# Manual pages to install +man_MANS = $(DISTMANS) + +# Headers to install +include_HEADERS = $(INSTINCLUDES) + +# Other distributed headers +noinst_HEADERS = $(OTHERINCLUDES) + +# Other distributed files +EXTRA_DIST = $(DOCS) $(DISTMANS) $(MKFILES) $(CONFIGFILES) $(SYSDEPSOURCES) \ + $(OTHERFILES) $(TESTFILES) + +# Files to be cleaned +CLEANFILES = testout.ppm testout.bmp testout.jpg testoutp.ppm testoutp.jpg \ + testoutt.jpg + +# Install jconfig.h +install-data-local: + $(mkinstalldirs) $(DESTDIR)$(includedir) + $(INSTALL_HEADER) jconfig.h $(DESTDIR)$(includedir)/jconfig.h + +# Uninstall jconfig.h +uninstall-local: + rm -f $(DESTDIR)$(includedir)/jconfig.h + +# Run tests +test: check-local +check-local: + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm $(srcdir)/testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testorig.jpg + ./cjpeg -dct int -outfile testout.jpg $(srcdir)/testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm $(srcdir)/testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg $(srcdir)/testimg.ppm + ./jpegtran -outfile testoutt.jpg $(srcdir)/testprog.jpg + cmp $(srcdir)/testimg.ppm testout.ppm + cmp $(srcdir)/testimg.bmp testout.bmp + cmp $(srcdir)/testimg.jpg testout.jpg + cmp $(srcdir)/testimg.ppm testoutp.ppm + cmp $(srcdir)/testimgp.jpg testoutp.jpg + cmp $(srcdir)/testorig.jpg testoutt.jpg diff --git a/3rdparty/openctm/tools/jpeg/Makefile.in b/3rdparty/openctm/tools/jpeg/Makefile.in new file mode 100644 index 000000000..6e5dae07e --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/Makefile.in @@ -0,0 +1,1089 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Automake Makefile for the JPEG library +# +# This file is written by Bob Friesenhahn, Guido Vollbeding +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +ANSI2KNR = @ANSI2KNR@ +@HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libjpeg.map +bin_PROGRAMS = cjpeg$(EXEEXT) djpeg$(EXEEXT) jpegtran$(EXEEXT) \ + rdjpgcom$(EXEEXT) wrjpgcom$(EXEEXT) +subdir = . +DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(srcdir)/jconfig.cfg ansi2knr.c ansi2knr.1 depcomp \ + $(include_HEADERS) $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = jconfig.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libjpeg_la_LIBADD = +am__objects_1 = jaricom$U.lo jcapimin$U.lo jcapistd$U.lo jcarith$U.lo \ + jccoefct$U.lo jccolor$U.lo jcdctmgr$U.lo jchuff$U.lo \ + jcinit$U.lo jcmainct$U.lo jcmarker$U.lo jcmaster$U.lo \ + jcomapi$U.lo jcparam$U.lo jcprepct$U.lo jcsample$U.lo \ + jctrans$U.lo jdapimin$U.lo jdapistd$U.lo jdarith$U.lo \ + jdatadst$U.lo jdatasrc$U.lo jdcoefct$U.lo jdcolor$U.lo \ + jddctmgr$U.lo jdhuff$U.lo jdinput$U.lo jdmainct$U.lo \ + jdmarker$U.lo jdmaster$U.lo jdmerge$U.lo jdpostct$U.lo \ + jdsample$U.lo jdtrans$U.lo jerror$U.lo jfdctflt$U.lo \ + jfdctfst$U.lo jfdctint$U.lo jidctflt$U.lo jidctfst$U.lo \ + jidctint$U.lo jquant1$U.lo jquant2$U.lo jutils$U.lo \ + jmemmgr$U.lo @MEMORYMGR@$U.lo +am_libjpeg_la_OBJECTS = $(am__objects_1) +libjpeg_la_OBJECTS = $(am_libjpeg_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libjpeg_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libjpeg_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_cjpeg_OBJECTS = cjpeg$U.$(OBJEXT) rdppm$U.$(OBJEXT) \ + rdgif$U.$(OBJEXT) rdtarga$U.$(OBJEXT) rdrle$U.$(OBJEXT) \ + rdbmp$U.$(OBJEXT) rdswitch$U.$(OBJEXT) cdjpeg$U.$(OBJEXT) +cjpeg_OBJECTS = $(am_cjpeg_OBJECTS) +cjpeg_DEPENDENCIES = libjpeg.la +am_djpeg_OBJECTS = djpeg$U.$(OBJEXT) wrppm$U.$(OBJEXT) \ + wrgif$U.$(OBJEXT) wrtarga$U.$(OBJEXT) wrrle$U.$(OBJEXT) \ + wrbmp$U.$(OBJEXT) rdcolmap$U.$(OBJEXT) cdjpeg$U.$(OBJEXT) +djpeg_OBJECTS = $(am_djpeg_OBJECTS) +djpeg_DEPENDENCIES = libjpeg.la +am_jpegtran_OBJECTS = jpegtran$U.$(OBJEXT) rdswitch$U.$(OBJEXT) \ + cdjpeg$U.$(OBJEXT) transupp$U.$(OBJEXT) +jpegtran_OBJECTS = $(am_jpegtran_OBJECTS) +jpegtran_DEPENDENCIES = libjpeg.la +am_rdjpgcom_OBJECTS = rdjpgcom$U.$(OBJEXT) +rdjpgcom_OBJECTS = $(am_rdjpgcom_OBJECTS) +rdjpgcom_LDADD = $(LDADD) +am_wrjpgcom_OBJECTS = wrjpgcom$U.$(OBJEXT) +wrjpgcom_OBJECTS = $(am_wrjpgcom_OBJECTS) +wrjpgcom_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libjpeg_la_SOURCES) $(cjpeg_SOURCES) $(djpeg_SOURCES) \ + $(jpegtran_SOURCES) $(rdjpgcom_SOURCES) $(wrjpgcom_SOURCES) +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +HEADERS = $(include_HEADERS) $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEG_LIB_VERSION = @JPEG_LIB_VERSION@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MEMORYMGR = @MEMORYMGR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +U = @U@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Sources to build library +LIBSOURCES = jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c @MEMORYMGR@.c + + +# System dependent sources +SYSDEPSOURCES = jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c + +# Headers which are installed to support the library +INSTINCLUDES = jerror.h jmorecfg.h jpeglib.h + +# Headers which are not installed +OTHERINCLUDES = cderror.h cdjpeg.h jdct.h jinclude.h jmemsys.h jpegint.h \ + jversion.h transupp.h + + +# Manual pages (Automake uses 'MANS' for itself) +DISTMANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1 + +# Other documentation files +DOCS = README install.txt usage.txt wizard.txt example.c libjpeg.txt \ + structure.txt coderules.txt filelist.txt change.log + + +# Makefiles for various systems +MKFILES = configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt + + +# Configuration files +CONFIGFILES = jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms + + +# Support scripts for configure +CONFIGUREFILES = config.guess config.sub install-sh ltmain.sh depcomp missing + +# Miscellaneous support files +OTHERFILES = jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map + + +# Test support files +TESTFILES = testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg + + +# libtool libraries to build +lib_LTLIBRARIES = libjpeg.la + +# Library sources for libjpeg.la +libjpeg_la_SOURCES = $(LIBSOURCES) + +# LDFLAGS for libjpeg.la +libjpeg_la_LDFLAGS = -no-undefined -version-info $(JPEG_LIB_VERSION) \ + $(am__append_1) + +# Executable sources & libs +cjpeg_SOURCES = cjpeg.c rdppm.c rdgif.c rdtarga.c rdrle.c rdbmp.c \ + rdswitch.c cdjpeg.c + +cjpeg_LDADD = libjpeg.la +djpeg_SOURCES = djpeg.c wrppm.c wrgif.c wrtarga.c wrrle.c wrbmp.c \ + rdcolmap.c cdjpeg.c + +djpeg_LDADD = libjpeg.la +jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c +jpegtran_LDADD = libjpeg.la +rdjpgcom_SOURCES = rdjpgcom.c +wrjpgcom_SOURCES = wrjpgcom.c + +# Manual pages to install +man_MANS = $(DISTMANS) + +# Headers to install +include_HEADERS = $(INSTINCLUDES) + +# Other distributed headers +noinst_HEADERS = $(OTHERINCLUDES) + +# Other distributed files +EXTRA_DIST = $(DOCS) $(DISTMANS) $(MKFILES) $(CONFIGFILES) $(SYSDEPSOURCES) \ + $(OTHERFILES) $(TESTFILES) + + +# Files to be cleaned +CLEANFILES = testout.ppm testout.bmp testout.jpg testoutp.ppm testoutp.jpg \ + testoutt.jpg + +all: jconfig.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +jconfig.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/jconfig.cfg $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status jconfig.h +$(srcdir)/jconfig.cfg: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f jconfig.h stamp-h1 +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libjpeg.la: $(libjpeg_la_OBJECTS) $(libjpeg_la_DEPENDENCIES) + $(AM_V_CCLD)$(libjpeg_la_LINK) -rpath $(libdir) $(libjpeg_la_OBJECTS) $(libjpeg_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +cjpeg$(EXEEXT): $(cjpeg_OBJECTS) $(cjpeg_DEPENDENCIES) + @rm -f cjpeg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cjpeg_OBJECTS) $(cjpeg_LDADD) $(LIBS) +djpeg$(EXEEXT): $(djpeg_OBJECTS) $(djpeg_DEPENDENCIES) + @rm -f djpeg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(djpeg_OBJECTS) $(djpeg_LDADD) $(LIBS) +jpegtran$(EXEEXT): $(jpegtran_OBJECTS) $(jpegtran_DEPENDENCIES) + @rm -f jpegtran$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(jpegtran_OBJECTS) $(jpegtran_LDADD) $(LIBS) +rdjpgcom$(EXEEXT): $(rdjpgcom_OBJECTS) $(rdjpgcom_DEPENDENCIES) + @rm -f rdjpgcom$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rdjpgcom_OBJECTS) $(rdjpgcom_LDADD) $(LIBS) +wrjpgcom$(EXEEXT): $(wrjpgcom_OBJECTS) $(wrjpgcom_DEPENDENCIES) + @rm -f wrjpgcom$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(wrjpgcom_OBJECTS) $(wrjpgcom_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c +./ansi2knr: ansi2knr.$(OBJEXT) + $(LINK) ansi2knr.$(OBJEXT) $(LIBS) +ansi2knr.$(OBJEXT): $(CONFIG_HEADER) + +clean-krextra: + -rm -f ansi2knr + +mostlyclean-kr: + -test "$U" = "" || rm -f *_.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/@MEMORYMGR@$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdjpeg$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cjpeg$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/djpeg$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jaricom$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcapimin$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcapistd$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcarith$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jccoefct$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jccolor$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcdctmgr$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jchuff$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcinit$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcmainct$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcmarker$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcmaster$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcomapi$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcparam$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcprepct$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jcsample$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jctrans$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdapimin$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdapistd$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdarith$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdatadst$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdatasrc$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdcoefct$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdcolor$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jddctmgr$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdhuff$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdinput$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdmainct$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdmarker$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdmaster$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdmerge$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdpostct$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdsample$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jdtrans$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jerror$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfdctflt$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfdctfst$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfdctint$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jidctflt$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jidctfst$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jidctint$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jmemmgr$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpegtran$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jquant1$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jquant2$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jutils$U.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdbmp$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdcolmap$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdgif$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdjpgcom$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdppm$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdrle$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdswitch$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdtarga$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transupp$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrbmp$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrgif$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrjpgcom$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrppm$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrrle$U.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrtarga$U.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +@MEMORYMGR@_.c: @MEMORYMGR@.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/@MEMORYMGR@.c; then echo $(srcdir)/@MEMORYMGR@.c; else echo @MEMORYMGR@.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +cdjpeg_.c: cdjpeg.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/cdjpeg.c; then echo $(srcdir)/cdjpeg.c; else echo cdjpeg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +cjpeg_.c: cjpeg.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/cjpeg.c; then echo $(srcdir)/cjpeg.c; else echo cjpeg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +djpeg_.c: djpeg.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/djpeg.c; then echo $(srcdir)/djpeg.c; else echo djpeg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jaricom_.c: jaricom.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jaricom.c; then echo $(srcdir)/jaricom.c; else echo jaricom.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcapimin_.c: jcapimin.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcapimin.c; then echo $(srcdir)/jcapimin.c; else echo jcapimin.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcapistd_.c: jcapistd.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcapistd.c; then echo $(srcdir)/jcapistd.c; else echo jcapistd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcarith_.c: jcarith.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcarith.c; then echo $(srcdir)/jcarith.c; else echo jcarith.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jccoefct_.c: jccoefct.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jccoefct.c; then echo $(srcdir)/jccoefct.c; else echo jccoefct.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jccolor_.c: jccolor.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jccolor.c; then echo $(srcdir)/jccolor.c; else echo jccolor.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcdctmgr_.c: jcdctmgr.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcdctmgr.c; then echo $(srcdir)/jcdctmgr.c; else echo jcdctmgr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jchuff_.c: jchuff.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jchuff.c; then echo $(srcdir)/jchuff.c; else echo jchuff.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcinit_.c: jcinit.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcinit.c; then echo $(srcdir)/jcinit.c; else echo jcinit.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcmainct_.c: jcmainct.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcmainct.c; then echo $(srcdir)/jcmainct.c; else echo jcmainct.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcmarker_.c: jcmarker.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcmarker.c; then echo $(srcdir)/jcmarker.c; else echo jcmarker.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcmaster_.c: jcmaster.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcmaster.c; then echo $(srcdir)/jcmaster.c; else echo jcmaster.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcomapi_.c: jcomapi.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcomapi.c; then echo $(srcdir)/jcomapi.c; else echo jcomapi.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcparam_.c: jcparam.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcparam.c; then echo $(srcdir)/jcparam.c; else echo jcparam.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcprepct_.c: jcprepct.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcprepct.c; then echo $(srcdir)/jcprepct.c; else echo jcprepct.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jcsample_.c: jcsample.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jcsample.c; then echo $(srcdir)/jcsample.c; else echo jcsample.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jctrans_.c: jctrans.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jctrans.c; then echo $(srcdir)/jctrans.c; else echo jctrans.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdapimin_.c: jdapimin.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdapimin.c; then echo $(srcdir)/jdapimin.c; else echo jdapimin.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdapistd_.c: jdapistd.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdapistd.c; then echo $(srcdir)/jdapistd.c; else echo jdapistd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdarith_.c: jdarith.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdarith.c; then echo $(srcdir)/jdarith.c; else echo jdarith.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdatadst_.c: jdatadst.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdatadst.c; then echo $(srcdir)/jdatadst.c; else echo jdatadst.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdatasrc_.c: jdatasrc.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdatasrc.c; then echo $(srcdir)/jdatasrc.c; else echo jdatasrc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdcoefct_.c: jdcoefct.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdcoefct.c; then echo $(srcdir)/jdcoefct.c; else echo jdcoefct.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdcolor_.c: jdcolor.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdcolor.c; then echo $(srcdir)/jdcolor.c; else echo jdcolor.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jddctmgr_.c: jddctmgr.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jddctmgr.c; then echo $(srcdir)/jddctmgr.c; else echo jddctmgr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdhuff_.c: jdhuff.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdhuff.c; then echo $(srcdir)/jdhuff.c; else echo jdhuff.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdinput_.c: jdinput.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdinput.c; then echo $(srcdir)/jdinput.c; else echo jdinput.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdmainct_.c: jdmainct.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdmainct.c; then echo $(srcdir)/jdmainct.c; else echo jdmainct.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdmarker_.c: jdmarker.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdmarker.c; then echo $(srcdir)/jdmarker.c; else echo jdmarker.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdmaster_.c: jdmaster.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdmaster.c; then echo $(srcdir)/jdmaster.c; else echo jdmaster.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdmerge_.c: jdmerge.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdmerge.c; then echo $(srcdir)/jdmerge.c; else echo jdmerge.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdpostct_.c: jdpostct.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdpostct.c; then echo $(srcdir)/jdpostct.c; else echo jdpostct.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdsample_.c: jdsample.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdsample.c; then echo $(srcdir)/jdsample.c; else echo jdsample.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jdtrans_.c: jdtrans.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jdtrans.c; then echo $(srcdir)/jdtrans.c; else echo jdtrans.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jerror_.c: jerror.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jerror.c; then echo $(srcdir)/jerror.c; else echo jerror.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jfdctflt_.c: jfdctflt.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jfdctflt.c; then echo $(srcdir)/jfdctflt.c; else echo jfdctflt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jfdctfst_.c: jfdctfst.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jfdctfst.c; then echo $(srcdir)/jfdctfst.c; else echo jfdctfst.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jfdctint_.c: jfdctint.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jfdctint.c; then echo $(srcdir)/jfdctint.c; else echo jfdctint.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jidctflt_.c: jidctflt.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jidctflt.c; then echo $(srcdir)/jidctflt.c; else echo jidctflt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jidctfst_.c: jidctfst.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jidctfst.c; then echo $(srcdir)/jidctfst.c; else echo jidctfst.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jidctint_.c: jidctint.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jidctint.c; then echo $(srcdir)/jidctint.c; else echo jidctint.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jmemmgr_.c: jmemmgr.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jmemmgr.c; then echo $(srcdir)/jmemmgr.c; else echo jmemmgr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jpegtran_.c: jpegtran.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jpegtran.c; then echo $(srcdir)/jpegtran.c; else echo jpegtran.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jquant1_.c: jquant1.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jquant1.c; then echo $(srcdir)/jquant1.c; else echo jquant1.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jquant2_.c: jquant2.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jquant2.c; then echo $(srcdir)/jquant2.c; else echo jquant2.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +jutils_.c: jutils.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/jutils.c; then echo $(srcdir)/jutils.c; else echo jutils.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdbmp_.c: rdbmp.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdbmp.c; then echo $(srcdir)/rdbmp.c; else echo rdbmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdcolmap_.c: rdcolmap.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdcolmap.c; then echo $(srcdir)/rdcolmap.c; else echo rdcolmap.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdgif_.c: rdgif.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdgif.c; then echo $(srcdir)/rdgif.c; else echo rdgif.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdjpgcom_.c: rdjpgcom.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdjpgcom.c; then echo $(srcdir)/rdjpgcom.c; else echo rdjpgcom.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdppm_.c: rdppm.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdppm.c; then echo $(srcdir)/rdppm.c; else echo rdppm.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdrle_.c: rdrle.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdrle.c; then echo $(srcdir)/rdrle.c; else echo rdrle.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdswitch_.c: rdswitch.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdswitch.c; then echo $(srcdir)/rdswitch.c; else echo rdswitch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +rdtarga_.c: rdtarga.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rdtarga.c; then echo $(srcdir)/rdtarga.c; else echo rdtarga.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +transupp_.c: transupp.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/transupp.c; then echo $(srcdir)/transupp.c; else echo transupp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +wrbmp_.c: wrbmp.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/wrbmp.c; then echo $(srcdir)/wrbmp.c; else echo wrbmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +wrgif_.c: wrgif.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/wrgif.c; then echo $(srcdir)/wrgif.c; else echo wrgif.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +wrjpgcom_.c: wrjpgcom.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/wrjpgcom.c; then echo $(srcdir)/wrjpgcom.c; else echo wrjpgcom.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +wrppm_.c: wrppm.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/wrppm.c; then echo $(srcdir)/wrppm.c; else echo wrppm.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +wrrle_.c: wrrle.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/wrrle.c; then echo $(srcdir)/wrrle.c; else echo wrrle.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +wrtarga_.c: wrtarga.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/wrtarga.c; then echo $(srcdir)/wrtarga.c; else echo wrtarga.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > $@ || rm -f $@ +@MEMORYMGR@_.$(OBJEXT) @MEMORYMGR@_.lo cdjpeg_.$(OBJEXT) cdjpeg_.lo \ +cjpeg_.$(OBJEXT) cjpeg_.lo djpeg_.$(OBJEXT) djpeg_.lo \ +jaricom_.$(OBJEXT) jaricom_.lo jcapimin_.$(OBJEXT) jcapimin_.lo \ +jcapistd_.$(OBJEXT) jcapistd_.lo jcarith_.$(OBJEXT) jcarith_.lo \ +jccoefct_.$(OBJEXT) jccoefct_.lo jccolor_.$(OBJEXT) jccolor_.lo \ +jcdctmgr_.$(OBJEXT) jcdctmgr_.lo jchuff_.$(OBJEXT) jchuff_.lo \ +jcinit_.$(OBJEXT) jcinit_.lo jcmainct_.$(OBJEXT) jcmainct_.lo \ +jcmarker_.$(OBJEXT) jcmarker_.lo jcmaster_.$(OBJEXT) jcmaster_.lo \ +jcomapi_.$(OBJEXT) jcomapi_.lo jcparam_.$(OBJEXT) jcparam_.lo \ +jcprepct_.$(OBJEXT) jcprepct_.lo jcsample_.$(OBJEXT) jcsample_.lo \ +jctrans_.$(OBJEXT) jctrans_.lo jdapimin_.$(OBJEXT) jdapimin_.lo \ +jdapistd_.$(OBJEXT) jdapistd_.lo jdarith_.$(OBJEXT) jdarith_.lo \ +jdatadst_.$(OBJEXT) jdatadst_.lo jdatasrc_.$(OBJEXT) jdatasrc_.lo \ +jdcoefct_.$(OBJEXT) jdcoefct_.lo jdcolor_.$(OBJEXT) jdcolor_.lo \ +jddctmgr_.$(OBJEXT) jddctmgr_.lo jdhuff_.$(OBJEXT) jdhuff_.lo \ +jdinput_.$(OBJEXT) jdinput_.lo jdmainct_.$(OBJEXT) jdmainct_.lo \ +jdmarker_.$(OBJEXT) jdmarker_.lo jdmaster_.$(OBJEXT) jdmaster_.lo \ +jdmerge_.$(OBJEXT) jdmerge_.lo jdpostct_.$(OBJEXT) jdpostct_.lo \ +jdsample_.$(OBJEXT) jdsample_.lo jdtrans_.$(OBJEXT) jdtrans_.lo \ +jerror_.$(OBJEXT) jerror_.lo jfdctflt_.$(OBJEXT) jfdctflt_.lo \ +jfdctfst_.$(OBJEXT) jfdctfst_.lo jfdctint_.$(OBJEXT) jfdctint_.lo \ +jidctflt_.$(OBJEXT) jidctflt_.lo jidctfst_.$(OBJEXT) jidctfst_.lo \ +jidctint_.$(OBJEXT) jidctint_.lo jmemmgr_.$(OBJEXT) jmemmgr_.lo \ +jpegtran_.$(OBJEXT) jpegtran_.lo jquant1_.$(OBJEXT) jquant1_.lo \ +jquant2_.$(OBJEXT) jquant2_.lo jutils_.$(OBJEXT) jutils_.lo \ +rdbmp_.$(OBJEXT) rdbmp_.lo rdcolmap_.$(OBJEXT) rdcolmap_.lo \ +rdgif_.$(OBJEXT) rdgif_.lo rdjpgcom_.$(OBJEXT) rdjpgcom_.lo \ +rdppm_.$(OBJEXT) rdppm_.lo rdrle_.$(OBJEXT) rdrle_.lo \ +rdswitch_.$(OBJEXT) rdswitch_.lo rdtarga_.$(OBJEXT) rdtarga_.lo \ +transupp_.$(OBJEXT) transupp_.lo wrbmp_.$(OBJEXT) wrbmp_.lo \ +wrgif_.$(OBJEXT) wrgif_.lo wrjpgcom_.$(OBJEXT) wrjpgcom_.lo \ +wrppm_.$(OBJEXT) wrppm_.lo wrrle_.$(OBJEXT) wrrle_.lo \ +wrtarga_.$(OBJEXT) wrtarga_.lo : $(ANSI2KNR) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) jconfig.cfg $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) jconfig.cfg $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) jconfig.cfg $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) jconfig.cfg $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-am +all-am: Makefile $(ANSI2KNR) $(LTLIBRARIES) $(PROGRAMS) $(MANS) \ + $(HEADERS) jconfig.h +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-krextra \ + clean-libLTLIBRARIES clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local install-includeHEADERS install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic mostlyclean-kr \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-local uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: all check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am am--refresh check check-am check-local \ + clean clean-binPROGRAMS clean-generic clean-krextra \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-data-local install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-kr mostlyclean-libtool pdf \ + pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-local uninstall-man \ + uninstall-man1 + + +# Install jconfig.h +install-data-local: + $(mkinstalldirs) $(DESTDIR)$(includedir) + $(INSTALL_HEADER) jconfig.h $(DESTDIR)$(includedir)/jconfig.h + +# Uninstall jconfig.h +uninstall-local: + rm -f $(DESTDIR)$(includedir)/jconfig.h + +# Run tests +test: check-local +check-local: + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm $(srcdir)/testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testorig.jpg + ./cjpeg -dct int -outfile testout.jpg $(srcdir)/testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm $(srcdir)/testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg $(srcdir)/testimg.ppm + ./jpegtran -outfile testoutt.jpg $(srcdir)/testprog.jpg + cmp $(srcdir)/testimg.ppm testout.ppm + cmp $(srcdir)/testimg.bmp testout.bmp + cmp $(srcdir)/testimg.jpg testout.jpg + cmp $(srcdir)/testimg.ppm testoutp.ppm + cmp $(srcdir)/testimgp.jpg testoutp.jpg + cmp $(srcdir)/testorig.jpg testoutt.jpg + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/3rdparty/openctm/tools/jpeg/Makefile.mingw b/3rdparty/openctm/tools/jpeg/Makefile.mingw new file mode 100644 index 000000000..26457655f --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/Makefile.mingw @@ -0,0 +1,222 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for MinGW + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= gcc + +# You may need to adjust these cc options: +CFLAGS= -O2 -Wall -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= -s + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For DJGPP this is usually jmemnobs.o, but you could +# use jmemname.o if you want to use named temp files instead of swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= del +# library (.a) file creation command +AR= ar rcs +# Copy command +CP= copy /Y + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + +cjpeg.exe: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg.exe $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg.exe: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg.exe $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran.exe: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran.exe $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom.exe: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom.exe rdjpgcom.o $(LDLIBS) + +wrjpgcom.exe: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom.exe wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.mingw + $(CP) jconfig.mingw jconfig.h + +clean: + $(RM) *.o + $(RM) cjpeg.exe + $(RM) djpeg.exe + $(RM) jpegtran.exe + $(RM) rdjpgcom.exe + $(RM) wrjpgcom.exe + $(RM) libjpeg.a + $(RM) testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + $(RM) testout*.* + .\djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + .\djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + .\cjpeg -dct int -outfile testout.jpg testimg.ppm + .\djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + .\cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + .\jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jaricom.o: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.o: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.o: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/README b/3rdparty/openctm/tools/jpeg/README new file mode 100644 index 000000000..5cdf78fc0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/README @@ -0,0 +1,322 @@ +The Independent JPEG Group's JPEG software +========================================== + +README for release 7 of 27-Jun-2009 +=================================== + +This distribution contains the seventh public release of the Independent JPEG +Group's free JPEG software. You are welcome to redistribute this software and +to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. + +This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, +Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, +Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, +and other members of the Independent JPEG Group. + +IJG is not affiliated with the official ISO JPEG standards committee. + + +DOCUMENTATION ROADMAP +===================== + +This file contains the following sections: + +OVERVIEW General description of JPEG and the IJG software. +LEGAL ISSUES Copyright, lack of warranty, terms of distribution. +REFERENCES Where to learn more about JPEG. +ARCHIVE LOCATIONS Where to find newer versions of this software. +ACKNOWLEDGMENTS Special thanks. +FILE FORMAT WARS Software *not* to get. +TO DO Plans for future IJG releases. + +Other documentation files in the distribution are: + +User documentation: + install.txt How to configure and install the IJG software. + usage.txt Usage instructions for cjpeg, djpeg, jpegtran, + rdjpgcom, and wrjpgcom. + *.1 Unix-style man pages for programs (same info as usage.txt). + wizard.txt Advanced usage instructions for JPEG wizards only. + change.log Version-to-version change highlights. +Programmer and internal documentation: + libjpeg.txt How to use the JPEG library in your own programs. + example.c Sample code for calling the JPEG library. + structure.txt Overview of the JPEG library's internal structure. + filelist.txt Road map of IJG files. + coderules.txt Coding style rules --- please read if you contribute code. + +Please read at least the files install.txt and usage.txt. Some information +can also be found in the JPEG FAQ (Frequently Asked Questions) article. See +ARCHIVE LOCATIONS below to find out where to obtain the FAQ article. + +If you want to understand how the JPEG code works, we suggest reading one or +more of the REFERENCES, then looking at the documentation files (in roughly +the order listed) before diving into the code. + + +OVERVIEW +======== + +This package contains C software to implement JPEG image encoding, decoding, +and transcoding. JPEG (pronounced "jay-peg") is a standardized compression +method for full-color and gray-scale images. + +This software implements JPEG baseline, extended-sequential, and progressive +compression processes. Provision is made for supporting all variants of these +processes, although some uncommon parameter settings aren't implemented yet. +We have made no provision for supporting the hierarchical or lossless +processes defined in the standard. + +We provide a set of library routines for reading and writing JPEG image files, +plus two sample applications "cjpeg" and "djpeg", which use the library to +perform conversion between JPEG and some other popular image file formats. +The library is intended to be reused in other applications. + +In order to support file conversion and viewing software, we have included +considerable functionality beyond the bare JPEG coding/decoding capability; +for example, the color quantization modules are not strictly part of JPEG +decoding, but they are essential for output to colormapped file formats or +colormapped displays. These extra functions can be compiled out of the +library if not required for a particular application. + +We have also included "jpegtran", a utility for lossless transcoding between +different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple +applications for inserting and extracting textual comments in JFIF files. + +The emphasis in designing this software has been on achieving portability and +flexibility, while also making it fast enough to be useful. In particular, +the software is not intended to be read as a tutorial on JPEG. (See the +REFERENCES section for introductory material.) Rather, it is intended to +be reliable, portable, industrial-strength code. We do not claim to have +achieved that goal in every aspect of the software, but we strive for it. + +We welcome the use of this software as a component of commercial products. +No royalty is required, but we do ask for an acknowledgement in product +documentation, as described under LEGAL ISSUES. + + +LEGAL ISSUES +============ + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2009, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. +ansi2knr.c is NOT covered by the above copyright and conditions, but instead +by the usual distribution terms of the Free Software Foundation; principally, +that you must include source code if you redistribute it. (See the file +ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part +of any program generated from the IJG code, this does not limit you more than +the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltmain.sh). Another support script, install-sh, is copyright by X Consortium +but is also freely distributable. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + + +REFERENCES +========== + +We recommend reading one or more of these references before trying to +understand the innards of the JPEG software. + +The best short technical introduction to the JPEG compression algorithm is + Wallace, Gregory K. "The JPEG Still Picture Compression Standard", + Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. +(Adjacent articles in that issue discuss MPEG motion picture compression, +applications of JPEG, and related topics.) If you don't have the CACM issue +handy, a PostScript file containing a revised version of Wallace's article is +available at http://www.ijg.org/files/wallace.ps.gz. The file (actually +a preprint for an article that appeared in IEEE Trans. Consumer Electronics) +omits the sample images that appeared in CACM, but it includes corrections +and some added material. Note: the Wallace article is copyright ACM and IEEE, +and it may not be used for commercial purposes. + +A somewhat less technical, more leisurely introduction to JPEG can be found in +"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by +M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides +good explanations and example C code for a multitude of compression methods +including JPEG. It is an excellent source if you are comfortable reading C +code but don't know much about data compression in general. The book's JPEG +sample code is far from industrial-strength, but when you are ready to look +at a full implementation, you've got one here... + +The best currently available description of JPEG is the textbook "JPEG Still +Image Data Compression Standard" by William B. Pennebaker and Joan L. +Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. +Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG +standards (DIS 10918-1 and draft DIS 10918-2). +Although this is by far the most detailed and comprehensive exposition of +JPEG publicly available, we point out that it is still missing an explanation +of the most essential properties and algorithms of the underlying DCT +technology. +If you think that you know about DCT-based JPEG after reading this book, +then you are in delusion. The real fundamentals and corresponding potential +of DCT-based JPEG are not publicly known so far, and that is the reason for +all the mistaken developments taking place in the image coding domain. + +The original JPEG standard is divided into two parts, Part 1 being the actual +specification, while Part 2 covers compliance testing methods. Part 1 is +titled "Digital Compression and Coding of Continuous-tone Still Images, +Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS +10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of +Continuous-tone Still Images, Part 2: Compliance testing" and has document +numbers ISO/IEC IS 10918-2, ITU-T T.83. + +The JPEG standard does not specify all details of an interchangeable file +format. For the omitted details we follow the "JFIF" conventions, revision +1.02. A copy of the JFIF spec is available from: + Literature Department + C-Cube Microsystems, Inc. + 1778 McCarthy Blvd. + Milpitas, CA 95035 + phone (408) 944-6300, fax (408) 944-6314 +A PostScript version of this document is available at +http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at +http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. + +The TIFF 6.0 file format specification can be obtained by FTP from +ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme +found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. +IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). +Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 +(Compression tag 7). Copies of this Note can be obtained from +http://www.ijg.org/files/. It is expected that the next revision +of the TIFF spec will replace the 6.0 JPEG design with the Note's design. +Although IJG's own code does not support TIFF/JPEG, the free libtiff library +uses our library to implement TIFF/JPEG per the Note. + + +ARCHIVE LOCATIONS +================= + +The "official" archive site for this software is www.ijg.org. +The most recent released version can always be found there in +directory "files". This particular version will be archived as +http://www.ijg.org/files/jpegsrc.v7.tar.gz, and in Windows-compatible +"zip" archive format as http://www.ijg.org/files/jpegsr7.zip. + +The JPEG FAQ (Frequently Asked Questions) article is a source of some +general information about JPEG. +It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/ +and other news.answers archive sites, including the official news.answers +archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. +If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu +with body + send usenet/news.answers/jpeg-faq/part1 + send usenet/news.answers/jpeg-faq/part2 + + +ACKNOWLEDGMENTS +=============== + +Thank to Juergen Bruder of the Georg-Cantor-Organization at the +Martin-Luther-University Halle for providing me with a copy of the common +DCT algorithm article, only to find out that I had come to the same result +in a more direct and comprehensible way with a more generative approach. + +Thank to Istvan Sebestyen and Joan L. Mitchell for inviting me to the +ITU JPEG (Study Group 16) meeting in Geneva, Switzerland. + +Thank to Thomas Wiegand and Gary Sullivan for inviting me to the +Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland. + +Thank to John Korejwa and Massimo Ballerini for inviting me to +fruitful consultations in Boston, MA and Milan, Italy. + +Thank to Hendrik Elstner, Roland Fassauer, and Simone Zuck for +corresponding business development. + +Thank to Nico Zschach and Dirk Stelling of the technical support team +at the Digital Images company in Halle for providing me with extra +equipment for configuration tests. + +Thank to Richard F. Lyon (then of Foveon Inc.) for fruitful +communication about JPEG configuration in Sigma Photo Pro software. + +Last but not least special thank to Thomas G. Lane for the original +design and development of this singular software package. + + +FILE FORMAT WARS +================ + +The ISO JPEG standards committee actually promotes different formats like +JPEG-2000 or JPEG-XR which are incompatible with original DCT-based JPEG +and which are based on faulty technologies. IJG therefore does not and +will not support such momentary mistakes (see REFERENCES). +We have little or no sympathy for the promotion of these formats. Indeed, +one of the original reasons for developing this free software was to help +force convergence on common, interoperable format standards for JPEG files. +Don't use an incompatible file format! +(In any case, our decoder will remain capable of reading existing JPEG +image files indefinitely.) + + +TO DO +===== + +v7 is basically just a necessary interim release, paving the way for a +major breakthrough in image coding technology with the next v8 package +which is scheduled for release in the year 2010. + +Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. diff --git a/3rdparty/openctm/tools/jpeg/aclocal.m4 b/3rdparty/openctm/tools/jpeg/aclocal.m4 new file mode 100644 index 000000000..e4131c4dc --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/aclocal.m4 @@ -0,0 +1,8990 @@ +# generated automatically by aclocal 1.11 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, +[m4_warning([this file was generated for autoconf 2.63. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +AC_DEFUN([AM_C_PROTOTYPES], +[AC_REQUIRE([AC_C_PROTOTYPES]) +if test "$ac_cv_prog_cc_stdc" != no; then + U= ANSI2KNR= +else + U=_ ANSI2KNR=./ansi2knr +fi +# Ensure some checks needed by ansi2knr itself. +AC_REQUIRE([AC_HEADER_STDC]) +AC_CHECK_HEADERS([string.h]) +AC_SUBST([U])dnl +AC_SUBST([ANSI2KNR])dnl +_AM_SUBST_NOTMAKE([ANSI2KNR])dnl +]) + +AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/3rdparty/openctm/tools/jpeg/ansi2knr.1 b/3rdparty/openctm/tools/jpeg/ansi2knr.1 new file mode 100644 index 000000000..60b33cf4a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/ansi2knr.1 @@ -0,0 +1,36 @@ +.TH ANSI2KNR 1 "19 Jan 1996" +.SH NAME +ansi2knr \- convert ANSI C to Kernighan & Ritchie C +.SH SYNOPSIS +.I ansi2knr +[--varargs] input_file [output_file] +.SH DESCRIPTION +If no output_file is supplied, output goes to stdout. +.br +There are no error messages. +.sp +.I ansi2knr +recognizes function definitions by seeing a non-keyword identifier at the left +margin, followed by a left parenthesis, with a right parenthesis as the last +character on the line, and with a left brace as the first token on the +following line (ignoring possible intervening comments). It will recognize a +multi-line header provided that no intervening line ends with a left or right +brace or a semicolon. These algorithms ignore whitespace and comments, except +that the function name must be the first thing on the line. +.sp +The following constructs will confuse it: +.br + - Any other construct that starts at the left margin and follows the +above syntax (such as a macro or function call). +.br + - Some macros that tinker with the syntax of the function header. +.sp +The --varargs switch is obsolete, and is recognized only for +backwards compatibility. The present version of +.I ansi2knr +will always attempt to convert a ... argument to va_alist and va_dcl. +.SH AUTHOR +L. Peter Deutsch wrote the original ansi2knr and +continues to maintain the current version; most of the code in the current +version is his work. ansi2knr also includes contributions by Francois +Pinard and Jim Avera . diff --git a/3rdparty/openctm/tools/jpeg/ansi2knr.c b/3rdparty/openctm/tools/jpeg/ansi2knr.c new file mode 100644 index 000000000..cfcb4da25 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/ansi2knr.c @@ -0,0 +1,739 @@ +/* Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved. */ + +/*$Id: ansi2knr.c,v 1.14 2003/09/06 05:36:56 eggert Exp $*/ +/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ + +/* +ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY. No author or distributor accepts responsibility to anyone for the +consequences of using it or for whether it serves any particular purpose or +works at all, unless he says so in writing. Refer to the GNU General Public +License (the "GPL") for full details. + +Everyone is granted permission to copy, modify and redistribute ansi2knr, +but only under the conditions described in the GPL. A copy of this license +is supposed to have been given to you along with ansi2knr so you can know +your rights and responsibilities. It should be in a file named COPYLEFT, +or, if there is no file named COPYLEFT, a file named COPYING. Among other +things, the copyright notice and this notice must be preserved on all +copies. + +We explicitly state here what we believe is already implied by the GPL: if +the ansi2knr program is distributed as a separate set of sources and a +separate executable file which are aggregated on a storage medium together +with another program, this in itself does not bring the other program under +the GPL, nor does the mere fact that such a program or the procedures for +constructing it invoke the ansi2knr executable bring any other part of the +program under the GPL. +*/ + +/* + * Usage: + ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] + * --filename provides the file name for the #line directive in the output, + * overriding input_file (if present). + * If no input_file is supplied, input is read from stdin. + * If no output_file is supplied, output goes to stdout. + * There are no error messages. + * + * ansi2knr recognizes function definitions by seeing a non-keyword + * identifier at the left margin, followed by a left parenthesis, with a + * right parenthesis as the last character on the line, and with a left + * brace as the first token on the following line (ignoring possible + * intervening comments and/or preprocessor directives), except that a line + * consisting of only + * identifier1(identifier2) + * will not be considered a function definition unless identifier2 is + * the word "void", and a line consisting of + * identifier1(identifier2, <>) + * will not be considered a function definition. + * ansi2knr will recognize a multi-line header provided that no intervening + * line ends with a left or right brace or a semicolon. These algorithms + * ignore whitespace, comments, and preprocessor directives, except that + * the function name must be the first thing on the line. The following + * constructs will confuse it: + * - Any other construct that starts at the left margin and + * follows the above syntax (such as a macro or function call). + * - Some macros that tinker with the syntax of function headers. + */ + +/* + * The original and principal author of ansi2knr is L. Peter Deutsch + * . Other authors are noted in the change history + * that follows (in reverse chronological order): + + lpd 2000-04-12 backs out Eggert's changes because of bugs: + - concatlits didn't declare the type of its bufend argument; + - concatlits didn't recognize when it was inside a comment; + - scanstring could scan backward past the beginning of the string; when + - the check for \ + newline in scanstring was unnecessary. + + 2000-03-05 Paul Eggert + + Add support for concatenated string literals. + * ansi2knr.c (concatlits): New decl. + (main): Invoke concatlits to concatenate string literals. + (scanstring): Handle backslash-newline correctly. Work with + character constants. Fix bug when scanning backwards through + backslash-quote. Check for unterminated strings. + (convert1): Parse character constants, too. + (appendline, concatlits): New functions. + * ansi2knr.1: Document this. + + lpd 1999-08-17 added code to allow preprocessor directives + wherever comments are allowed + lpd 1999-04-12 added minor fixes from Pavel Roskin + for clean compilation with + gcc -W -Wall + lpd 1999-03-22 added hack to recognize lines consisting of + identifier1(identifier2, xxx) as *not* being procedures + lpd 1999-02-03 made indentation of preprocessor commands consistent + lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an + endless loop; quoted strings within an argument list + confused the parser + lpd 1999-01-24 added a check for write errors on the output, + suggested by Jim Meyering + lpd 1998-11-09 added further hack to recognize identifier(void) + as being a procedure + lpd 1998-10-23 added hack to recognize lines consisting of + identifier1(identifier2) as *not* being procedures + lpd 1997-12-08 made input_file optional; only closes input and/or + output file if not stdin or stdout respectively; prints + usage message on stderr rather than stdout; adds + --filename switch (changes suggested by + ) + lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with + compilers that don't understand void, as suggested by + Tom Lane + lpd 1996-01-15 changed to require that the first non-comment token + on the line following a function header be a left brace, + to reduce sensitivity to macros, as suggested by Tom Lane + + lpd 1995-06-22 removed #ifndefs whose sole purpose was to define + undefined preprocessor symbols as 0; changed all #ifdefs + for configuration symbols to #ifs + lpd 1995-04-05 changed copyright notice to make it clear that + including ansi2knr in a program does not bring the entire + program under the GPL + lpd 1994-12-18 added conditionals for systems where ctype macros + don't handle 8-bit characters properly, suggested by + Francois Pinard ; + removed --varargs switch (this is now the default) + lpd 1994-10-10 removed CONFIG_BROKETS conditional + lpd 1994-07-16 added some conditionals to help GNU `configure', + suggested by Francois Pinard ; + properly erase prototype args in function parameters, + contributed by Jim Avera ; + correct error in writeblanks (it shouldn't erase EOLs) + lpd 1989-xx-xx original version + */ + +/* Most of the conditionals here are to make ansi2knr work with */ +/* or without the GNU configure machinery. */ + +#if HAVE_CONFIG_H +# include +#endif + +#include +#include + +#if HAVE_CONFIG_H + +/* + For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). + This will define HAVE_CONFIG_H and so, activate the following lines. + */ + +# if STDC_HEADERS || HAVE_STRING_H +# include +# else +# include +# endif + +#else /* not HAVE_CONFIG_H */ + +/* Otherwise do it the hard way */ + +# ifdef BSD +# include +# else +# ifdef VMS + extern int strlen(), strncmp(); +# else +# include +# endif +# endif + +#endif /* not HAVE_CONFIG_H */ + +#if STDC_HEADERS +# include +#else +/* + malloc and free should be declared in stdlib.h, + but if you've got a K&R compiler, they probably aren't. + */ +# ifdef MSDOS +# include +# else +# ifdef VMS + extern char *malloc(); + extern void free(); +# else + extern char *malloc(); + extern int free(); +# endif +# endif + +#endif + +/* Define NULL (for *very* old compilers). */ +#ifndef NULL +# define NULL (0) +#endif + +/* + * The ctype macros don't always handle 8-bit characters correctly. + * Compensate for this here. + */ +#ifdef isascii +# undef HAVE_ISASCII /* just in case */ +# define HAVE_ISASCII 1 +#else +#endif +#if STDC_HEADERS || !HAVE_ISASCII +# define is_ascii(c) 1 +#else +# define is_ascii(c) isascii(c) +#endif + +#define is_space(c) (is_ascii(c) && isspace(c)) +#define is_alpha(c) (is_ascii(c) && isalpha(c)) +#define is_alnum(c) (is_ascii(c) && isalnum(c)) + +/* Scanning macros */ +#define isidchar(ch) (is_alnum(ch) || (ch) == '_') +#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') + +/* Forward references */ +char *ppdirforward(); +char *ppdirbackward(); +char *skipspace(); +char *scanstring(); +int writeblanks(); +int test1(); +int convert1(); + +/* The main program */ +int +main(argc, argv) + int argc; + char *argv[]; +{ FILE *in = stdin; + FILE *out = stdout; + char *filename = 0; + char *program_name = argv[0]; + char *output_name = 0; +#define bufsize 5000 /* arbitrary size */ + char *buf; + char *line; + char *more; + char *usage = + "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; + /* + * In previous versions, ansi2knr recognized a --varargs switch. + * If this switch was supplied, ansi2knr would attempt to convert + * a ... argument to va_alist and va_dcl; if this switch was not + * supplied, ansi2knr would simply drop any such arguments. + * Now, ansi2knr always does this conversion, and we only + * check for this switch for backward compatibility. + */ + int convert_varargs = 1; + int output_error; + + while ( argc > 1 && argv[1][0] == '-' ) { + if ( !strcmp(argv[1], "--varargs") ) { + convert_varargs = 1; + argc--; + argv++; + continue; + } + if ( !strcmp(argv[1], "--filename") && argc > 2 ) { + filename = argv[2]; + argc -= 2; + argv += 2; + continue; + } + fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name, + argv[1]); + fprintf(stderr, usage); + exit(1); + } + switch ( argc ) + { + default: + fprintf(stderr, usage); + exit(0); + case 3: + output_name = argv[2]; + out = fopen(output_name, "w"); + if ( out == NULL ) { + fprintf(stderr, "%s: Cannot open output file %s\n", + program_name, output_name); + exit(1); + } + /* falls through */ + case 2: + in = fopen(argv[1], "r"); + if ( in == NULL ) { + fprintf(stderr, "%s: Cannot open input file %s\n", + program_name, argv[1]); + exit(1); + } + if ( filename == 0 ) + filename = argv[1]; + /* falls through */ + case 1: + break; + } + if ( filename ) + fprintf(out, "#line 1 \"%s\"\n", filename); + buf = malloc(bufsize); + if ( buf == NULL ) + { + fprintf(stderr, "Unable to allocate read buffer!\n"); + exit(1); + } + line = buf; + while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) + { +test: line += strlen(line); + switch ( test1(buf) ) + { + case 2: /* a function header */ + convert1(buf, out, 1, convert_varargs); + break; + case 1: /* a function */ + /* Check for a { at the start of the next line. */ + more = ++line; +f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ + goto wl; + if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) + goto wl; + switch ( *skipspace(ppdirforward(more), 1) ) + { + case '{': + /* Definitely a function header. */ + convert1(buf, out, 0, convert_varargs); + fputs(more, out); + break; + case 0: + /* The next line was blank or a comment: */ + /* keep scanning for a non-comment. */ + line += strlen(line); + goto f; + default: + /* buf isn't a function header, but */ + /* more might be. */ + fputs(buf, out); + strcpy(buf, more); + line = buf; + goto test; + } + break; + case -1: /* maybe the start of a function */ + if ( line != buf + (bufsize - 1) ) /* overflow check */ + continue; + /* falls through */ + default: /* not a function */ +wl: fputs(buf, out); + break; + } + line = buf; + } + if ( line != buf ) + fputs(buf, out); + free(buf); + if ( output_name ) { + output_error = ferror(out); + output_error |= fclose(out); + } else { /* out == stdout */ + fflush(out); + output_error = ferror(out); + } + if ( output_error ) { + fprintf(stderr, "%s: error writing to %s\n", program_name, + (output_name ? output_name : "stdout")); + exit(1); + } + if ( in != stdin ) + fclose(in); + return 0; +} + +/* + * Skip forward or backward over one or more preprocessor directives. + */ +char * +ppdirforward(p) + char *p; +{ + for (; *p == '#'; ++p) { + for (; *p != '\r' && *p != '\n'; ++p) + if (*p == 0) + return p; + if (*p == '\r' && p[1] == '\n') + ++p; + } + return p; +} +char * +ppdirbackward(p, limit) + char *p; + char *limit; +{ + char *np = p; + + for (;; p = --np) { + if (*np == '\n' && np[-1] == '\r') + --np; + for (; np > limit && np[-1] != '\r' && np[-1] != '\n'; --np) + if (np[-1] == 0) + return np; + if (*np != '#') + return p; + } +} + +/* + * Skip over whitespace, comments, and preprocessor directives, + * in either direction. + */ +char * +skipspace(p, dir) + char *p; + int dir; /* 1 for forward, -1 for backward */ +{ + for ( ; ; ) { + while ( is_space(*p) ) + p += dir; + if ( !(*p == '/' && p[dir] == '*') ) + break; + p += dir; p += dir; + while ( !(*p == '*' && p[dir] == '/') ) { + if ( *p == 0 ) + return p; /* multi-line comment?? */ + p += dir; + } + p += dir; p += dir; + } + return p; +} + +/* Scan over a quoted string, in either direction. */ +char * +scanstring(p, dir) + char *p; + int dir; +{ + for (p += dir; ; p += dir) + if (*p == '"' && p[-dir] != '\\') + return p + dir; +} + +/* + * Write blanks over part of a string. + * Don't overwrite end-of-line characters. + */ +int +writeblanks(start, end) + char *start; + char *end; +{ char *p; + for ( p = start; p < end; p++ ) + if ( *p != '\r' && *p != '\n' ) + *p = ' '; + return 0; +} + +/* + * Test whether the string in buf is a function definition. + * The string may contain and/or end with a newline. + * Return as follows: + * 0 - definitely not a function definition; + * 1 - definitely a function definition; + * 2 - definitely a function prototype (NOT USED); + * -1 - may be the beginning of a function definition, + * append another line and look again. + * The reason we don't attempt to convert function prototypes is that + * Ghostscript's declaration-generating macros look too much like + * prototypes, and confuse the algorithms. + */ +int +test1(buf) + char *buf; +{ char *p = buf; + char *bend; + char *endfn; + int contin; + + if ( !isidfirstchar(*p) ) + return 0; /* no name at left margin */ + bend = skipspace(ppdirbackward(buf + strlen(buf) - 1, buf), -1); + switch ( *bend ) + { + case ';': contin = 0 /*2*/; break; + case ')': contin = 1; break; + case '{': return 0; /* not a function */ + case '}': return 0; /* not a function */ + default: contin = -1; + } + while ( isidchar(*p) ) + p++; + endfn = p; + p = skipspace(p, 1); + if ( *p++ != '(' ) + return 0; /* not a function */ + p = skipspace(p, 1); + if ( *p == ')' ) + return 0; /* no parameters */ + /* Check that the apparent function name isn't a keyword. */ + /* We only need to check for keywords that could be followed */ + /* by a left parenthesis (which, unfortunately, is most of them). */ + { static char *words[] = + { "asm", "auto", "case", "char", "const", "double", + "extern", "float", "for", "if", "int", "long", + "register", "return", "short", "signed", "sizeof", + "static", "switch", "typedef", "unsigned", + "void", "volatile", "while", 0 + }; + char **key = words; + char *kp; + unsigned len = endfn - buf; + + while ( (kp = *key) != 0 ) + { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) + return 0; /* name is a keyword */ + key++; + } + } + { + char *id = p; + int len; + /* + * Check for identifier1(identifier2) and not + * identifier1(void), or identifier1(identifier2, xxxx). + */ + + while ( isidchar(*p) ) + p++; + len = p - id; + p = skipspace(p, 1); + if (*p == ',' || + (*p == ')' && (len != 4 || strncmp(id, "void", 4))) + ) + return 0; /* not a function */ + } + /* + * If the last significant character was a ), we need to count + * parentheses, because it might be part of a formal parameter + * that is a procedure. + */ + if (contin > 0) { + int level = 0; + + for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1)) + level += (*p == '(' ? 1 : *p == ')' ? -1 : 0); + if (level > 0) + contin = -1; + } + return contin; +} + +/* Convert a recognized function definition or header to K&R syntax. */ +int +convert1(buf, out, header, convert_varargs) + char *buf; + FILE *out; + int header; /* Boolean */ + int convert_varargs; /* Boolean */ +{ char *endfn; + char *p; + /* + * The breaks table contains pointers to the beginning and end + * of each argument. + */ + char **breaks; + unsigned num_breaks = 2; /* for testing */ + char **btop; + char **bp; + char **ap; + char *vararg = 0; + + /* Pre-ANSI implementations don't agree on whether strchr */ + /* is called strchr or index, so we open-code it here. */ + for ( endfn = buf; *(endfn++) != '('; ) + ; +top: p = endfn; + breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); + if ( breaks == NULL ) + { /* Couldn't allocate break table, give up */ + fprintf(stderr, "Unable to allocate break table!\n"); + fputs(buf, out); + return -1; + } + btop = breaks + num_breaks * 2 - 2; + bp = breaks; + /* Parse the argument list */ + do + { int level = 0; + char *lp = NULL; + char *rp = NULL; + char *end = NULL; + + if ( bp >= btop ) + { /* Filled up break table. */ + /* Allocate a bigger one and start over. */ + free((char *)breaks); + num_breaks <<= 1; + goto top; + } + *bp++ = p; + /* Find the end of the argument */ + for ( ; end == NULL; p++ ) + { switch(*p) + { + case ',': + if ( !level ) end = p; + break; + case '(': + if ( !level ) lp = p; + level++; + break; + case ')': + if ( --level < 0 ) end = p; + else rp = p; + break; + case '/': + if (p[1] == '*') + p = skipspace(p, 1) - 1; + break; + case '"': + p = scanstring(p, 1) - 1; + break; + default: + ; + } + } + /* Erase any embedded prototype parameters. */ + if ( lp && rp ) + writeblanks(lp + 1, rp); + p--; /* back up over terminator */ + /* Find the name being declared. */ + /* This is complicated because of procedure and */ + /* array modifiers. */ + for ( ; ; ) + { p = skipspace(p - 1, -1); + switch ( *p ) + { + case ']': /* skip array dimension(s) */ + case ')': /* skip procedure args OR name */ + { int level = 1; + while ( level ) + switch ( *--p ) + { + case ']': case ')': + level++; + break; + case '[': case '(': + level--; + break; + case '/': + if (p > buf && p[-1] == '*') + p = skipspace(p, -1) + 1; + break; + case '"': + p = scanstring(p, -1) + 1; + break; + default: ; + } + } + if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) + { /* We found the name being declared */ + while ( !isidfirstchar(*p) ) + p = skipspace(p, 1) + 1; + goto found; + } + break; + default: + goto found; + } + } +found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) + { if ( convert_varargs ) + { *bp++ = "va_alist"; + vararg = p-2; + } + else + { p++; + if ( bp == breaks + 1 ) /* sole argument */ + writeblanks(breaks[0], p); + else + writeblanks(bp[-1] - 1, p); + bp--; + } + } + else + { while ( isidchar(*p) ) p--; + *bp++ = p+1; + } + p = end; + } + while ( *p++ == ',' ); + *bp = p; + /* Make a special check for 'void' arglist */ + if ( bp == breaks+2 ) + { p = skipspace(breaks[0], 1); + if ( !strncmp(p, "void", 4) ) + { p = skipspace(p+4, 1); + if ( p == breaks[2] - 1 ) + { bp = breaks; /* yup, pretend arglist is empty */ + writeblanks(breaks[0], p + 1); + } + } + } + /* Put out the function name and left parenthesis. */ + p = buf; + while ( p != endfn ) putc(*p, out), p++; + /* Put out the declaration. */ + if ( header ) + { fputs(");", out); + for ( p = breaks[0]; *p; p++ ) + if ( *p == '\r' || *p == '\n' ) + putc(*p, out); + } + else + { for ( ap = breaks+1; ap < bp; ap += 2 ) + { p = *ap; + while ( isidchar(*p) ) + putc(*p, out), p++; + if ( ap < bp - 1 ) + fputs(", ", out); + } + fputs(") ", out); + /* Put out the argument declarations */ + for ( ap = breaks+2; ap <= bp; ap += 2 ) + (*ap)[-1] = ';'; + if ( vararg != 0 ) + { *vararg = 0; + fputs(breaks[0], out); /* any prior args */ + fputs("va_dcl", out); /* the final arg */ + fputs(bp[0], out); + } + else + fputs(breaks[0], out); + } + free((char *)breaks); + return 0; +} diff --git a/3rdparty/openctm/tools/jpeg/cderror.h b/3rdparty/openctm/tools/jpeg/cderror.h new file mode 100644 index 000000000..c19d38fb4 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/cderror.h @@ -0,0 +1,132 @@ +/* + * cderror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the cjpeg/djpeg + * applications. These strings are not needed as part of the JPEG library + * proper. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef CDERROR_H +#define CDERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* CDERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */ + +#ifdef BMP_SUPPORTED +JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format") +JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported") +JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length") +JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1") +JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB") +JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported") +JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM") +JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image") +JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image") +JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image") +JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image") +#endif /* BMP_SUPPORTED */ + +#ifdef GIF_SUPPORTED +JMESSAGE(JERR_GIF_BUG, "GIF output got confused") +JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d") +JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB") +JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file") +JMESSAGE(JERR_GIF_NOT, "Not a GIF file") +JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image") +JMESSAGE(JTRC_GIF_BADVERSION, + "Warning: unexpected GIF version number '%c%c%c'") +JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x") +JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input") +JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file") +JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring") +JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image") +JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits") +#endif /* GIF_SUPPORTED */ + +#ifdef PPM_SUPPORTED +JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB") +JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file") +JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file") +JMESSAGE(JTRC_PGM, "%ux%u PGM image") +JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image") +JMESSAGE(JTRC_PPM, "%ux%u PPM image") +JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image") +#endif /* PPM_SUPPORTED */ + +#ifdef RLE_SUPPORTED +JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library") +JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB") +JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE") +JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file") +JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header") +JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header") +JMESSAGE(JERR_RLE_NOT, "Not an RLE file") +JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE") +JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup") +JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file") +JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d") +JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file") +JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d") +JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d") +#endif /* RLE_SUPPORTED */ + +#ifdef TARGA_SUPPORTED +JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format") +JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file") +JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB") +JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image") +JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image") +JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image") +#else +JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled") +#endif /* TARGA_SUPPORTED */ + +JMESSAGE(JERR_BAD_CMAP_FILE, + "Color map file is invalid or of unsupported format") +JMESSAGE(JERR_TOO_MANY_COLORS, + "Output file format cannot handle %d colormap entries") +JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed") +#ifdef TARGA_SUPPORTED +JMESSAGE(JERR_UNKNOWN_FORMAT, + "Unrecognized input file format --- perhaps you need -targa") +#else +JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format") +#endif +JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTADDONCODE +} ADDON_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE diff --git a/3rdparty/openctm/tools/jpeg/cdjpeg.c b/3rdparty/openctm/tools/jpeg/cdjpeg.c new file mode 100644 index 000000000..89fe63372 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/cdjpeg.c @@ -0,0 +1,181 @@ +/* + * cdjpeg.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains common support routines used by the IJG application + * programs (cjpeg, djpeg, jpegtran). + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include /* to declare isupper(), tolower() */ +#ifdef NEED_SIGNAL_CATCHER +#include /* to declare signal() */ +#endif +#ifdef USE_SETMODE +#include /* to declare setmode()'s parameter macros */ +/* If you have setmode() but not , just delete this line: */ +#include /* to declare setmode() */ +#endif + + +/* + * Signal catcher to ensure that temporary files are removed before aborting. + * NB: for Amiga Manx C this is actually a global routine named _abort(); + * we put "#define signal_catcher _abort" in jconfig.h. Talk about bogus... + */ + +#ifdef NEED_SIGNAL_CATCHER + +static j_common_ptr sig_cinfo; + +void /* must be global for Manx C */ +signal_catcher (int signum) +{ + if (sig_cinfo != NULL) { + if (sig_cinfo->err != NULL) /* turn off trace output */ + sig_cinfo->err->trace_level = 0; + jpeg_destroy(sig_cinfo); /* clean up memory allocation & temp files */ + } + exit(EXIT_FAILURE); +} + + +GLOBAL(void) +enable_signal_catcher (j_common_ptr cinfo) +{ + sig_cinfo = cinfo; +#ifdef SIGINT /* not all systems have SIGINT */ + signal(SIGINT, signal_catcher); +#endif +#ifdef SIGTERM /* not all systems have SIGTERM */ + signal(SIGTERM, signal_catcher); +#endif +} + +#endif + + +/* + * Optional progress monitor: display a percent-done figure on stderr. + */ + +#ifdef PROGRESS_REPORT + +METHODDEF(void) +progress_monitor (j_common_ptr cinfo) +{ + cd_progress_ptr prog = (cd_progress_ptr) cinfo->progress; + int total_passes = prog->pub.total_passes + prog->total_extra_passes; + int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); + + if (percent_done != prog->percent_done) { + prog->percent_done = percent_done; + if (total_passes > 1) { + fprintf(stderr, "\rPass %d/%d: %3d%% ", + prog->pub.completed_passes + prog->completed_extra_passes + 1, + total_passes, percent_done); + } else { + fprintf(stderr, "\r %3d%% ", percent_done); + } + fflush(stderr); + } +} + + +GLOBAL(void) +start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress) +{ + /* Enable progress display, unless trace output is on */ + if (cinfo->err->trace_level == 0) { + progress->pub.progress_monitor = progress_monitor; + progress->completed_extra_passes = 0; + progress->total_extra_passes = 0; + progress->percent_done = -1; + cinfo->progress = &progress->pub; + } +} + + +GLOBAL(void) +end_progress_monitor (j_common_ptr cinfo) +{ + /* Clear away progress display */ + if (cinfo->err->trace_level == 0) { + fprintf(stderr, "\r \r"); + fflush(stderr); + } +} + +#endif + + +/* + * Case-insensitive matching of possibly-abbreviated keyword switches. + * keyword is the constant keyword (must be lower case already), + * minchars is length of minimum legal abbreviation. + */ + +GLOBAL(boolean) +keymatch (char * arg, const char * keyword, int minchars) +{ + register int ca, ck; + register int nmatched = 0; + + while ((ca = *arg++) != '\0') { + if ((ck = *keyword++) == '\0') + return FALSE; /* arg longer than keyword, no good */ + if (isupper(ca)) /* force arg to lcase (assume ck is already) */ + ca = tolower(ca); + if (ca != ck) + return FALSE; /* no good */ + nmatched++; /* count matched characters */ + } + /* reached end of argument; fail if it's too short for unique abbrev */ + if (nmatched < minchars) + return FALSE; + return TRUE; /* A-OK */ +} + + +/* + * Routines to establish binary I/O mode for stdin and stdout. + * Non-Unix systems often require some hacking to get out of text mode. + */ + +GLOBAL(FILE *) +read_stdin (void) +{ + FILE * input_file = stdin; + +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdin), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) { + fprintf(stderr, "Cannot reopen stdin\n"); + exit(EXIT_FAILURE); + } +#endif + return input_file; +} + + +GLOBAL(FILE *) +write_stdout (void) +{ + FILE * output_file = stdout; + +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdout), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { + fprintf(stderr, "Cannot reopen stdout\n"); + exit(EXIT_FAILURE); + } +#endif + return output_file; +} diff --git a/3rdparty/openctm/tools/jpeg/cdjpeg.h b/3rdparty/openctm/tools/jpeg/cdjpeg.h new file mode 100644 index 000000000..c0d064cca --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/cdjpeg.h @@ -0,0 +1,187 @@ +/* + * cdjpeg.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains common declarations for the sample applications + * cjpeg and djpeg. It is NOT used by the core JPEG library. + */ + +#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ +#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" /* get library error codes too */ +#include "cderror.h" /* get application-specific error codes */ + + +/* + * Object interface for cjpeg's source file decoding modules + */ + +typedef struct cjpeg_source_struct * cjpeg_source_ptr; + +struct cjpeg_source_struct { + JMETHOD(void, start_input, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); + JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); + JMETHOD(void, finish_input, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); + + FILE *input_file; + + JSAMPARRAY buffer; + JDIMENSION buffer_height; +}; + + +/* + * Object interface for djpeg's output file encoding modules + */ + +typedef struct djpeg_dest_struct * djpeg_dest_ptr; + +struct djpeg_dest_struct { + /* start_output is called after jpeg_start_decompress finishes. + * The color map will be ready at this time, if one is needed. + */ + JMETHOD(void, start_output, (j_decompress_ptr cinfo, + djpeg_dest_ptr dinfo)); + /* Emit the specified number of pixel rows from the buffer. */ + JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, + djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied)); + /* Finish up at the end of the image. */ + JMETHOD(void, finish_output, (j_decompress_ptr cinfo, + djpeg_dest_ptr dinfo)); + + /* Target file spec; filled in by djpeg.c after object is created. */ + FILE * output_file; + + /* Output pixel-row buffer. Created by module init or start_output. + * Width is cinfo->output_width * cinfo->output_components; + * height is buffer_height. + */ + JSAMPARRAY buffer; + JDIMENSION buffer_height; +}; + + +/* + * cjpeg/djpeg may need to perform extra passes to convert to or from + * the source/destination file format. The JPEG library does not know + * about these passes, but we'd like them to be counted by the progress + * monitor. We use an expanded progress monitor object to hold the + * additional pass count. + */ + +struct cdjpeg_progress_mgr { + struct jpeg_progress_mgr pub; /* fields known to JPEG library */ + int completed_extra_passes; /* extra passes completed */ + int total_extra_passes; /* total extra */ + /* last printed percentage stored here to avoid multiple printouts */ + int percent_done; +}; + +typedef struct cdjpeg_progress_mgr * cd_progress_ptr; + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jinit_read_bmp jIRdBMP +#define jinit_write_bmp jIWrBMP +#define jinit_read_gif jIRdGIF +#define jinit_write_gif jIWrGIF +#define jinit_read_ppm jIRdPPM +#define jinit_write_ppm jIWrPPM +#define jinit_read_rle jIRdRLE +#define jinit_write_rle jIWrRLE +#define jinit_read_targa jIRdTarga +#define jinit_write_targa jIWrTarga +#define read_quant_tables RdQTables +#define read_scan_script RdScnScript +#define set_quality_ratings SetQRates +#define set_quant_slots SetQSlots +#define set_sample_factors SetSFacts +#define read_color_map RdCMap +#define enable_signal_catcher EnSigCatcher +#define start_progress_monitor StProgMon +#define end_progress_monitor EnProgMon +#define read_stdin RdStdin +#define write_stdout WrStdout +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + +/* Module selection routines for I/O modules. */ + +EXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo, + boolean is_os2)); +EXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo)); +EXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo)); +EXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo)); +EXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo)); + +/* cjpeg support routines (in rdswitch.c) */ + +EXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename, + boolean force_baseline)); +EXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename)); +EXTERN(boolean) set_quality_ratings JPP((j_compress_ptr cinfo, char *arg, + boolean force_baseline)); +EXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg)); +EXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg)); + +/* djpeg support routines (in rdcolmap.c) */ + +EXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* common support routines (in cdjpeg.c) */ + +EXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo)); +EXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo, + cd_progress_ptr progress)); +EXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo)); +EXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars)); +EXTERN(FILE *) read_stdin JPP((void)); +EXTERN(FILE *) write_stdout JPP((void)); + +/* miscellaneous useful macros */ + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#define WRITE_BINARY "w" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#define WRITE_BINARY "wb", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#define WRITE_BINARY "wb" +#endif +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif +#ifndef EXIT_SUCCESS +#ifdef VMS +#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ +#else +#define EXIT_SUCCESS 0 +#endif +#endif +#ifndef EXIT_WARNING +#ifdef VMS +#define EXIT_WARNING 1 /* VMS is very nonstandard */ +#else +#define EXIT_WARNING 2 +#endif +#endif diff --git a/3rdparty/openctm/tools/jpeg/change.log b/3rdparty/openctm/tools/jpeg/change.log new file mode 100644 index 000000000..85c0084b5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/change.log @@ -0,0 +1,270 @@ +CHANGE LOG for Independent JPEG Group's JPEG software + + +Version 7 27-Jun-2009 +---------------------- + +New scaled DCTs implemented. +djpeg now supports scalings N/8 with all N from 1 to 16. +cjpeg now supports scalings 8/N with all N from 1 to 16. +Scaled DCTs with size larger than 8 are now also used for resolving the +common 2x2 chroma subsampling case without additional spatial resampling. +Separate spatial resampling for those kind of files is now only necessary +for N>8 scaling cases. +Furthermore, separate scaled DCT functions are provided for direct resolving +of the common asymmetric subsampling cases (2x1 and 1x2) without additional +spatial resampling. + +cjpeg -quality option has been extended for support of separate quality +settings for luminance and chrominance (or in general, for every provided +quantization table slot). +New API function jpeg_default_qtables() and q_scale_factor array in library. + +Added -nosmooth option to cjpeg, complementary to djpeg. +New variable "do_fancy_downsampling" in library, complement to fancy +upsampling. Fancy upsampling now uses direct DCT scaling with sizes +larger than 8. The old method is not reversible and has been removed. + +Support arithmetic entropy encoding and decoding. +Added files jaricom.c, jcarith.c, jdarith.c. + +Straighten the file structure: +Removed files jidctred.c, jcphuff.c, jchuff.h, jdphuff.c, jdhuff.h. + +jpegtran has a new "lossless" cropping feature. + +Implement -perfect option in jpegtran, new API function +jtransform_perfect_transform() in transupp. (DP 204_perfect.dpatch) + +Better error messages for jpegtran fopen failure. +(DP 203_jpegtran_errmsg.dpatch) + +Fix byte order issue with 16bit PPM/PGM files in rdppm.c/wrppm.c: +according to Netpbm, the de facto standard implementation of the PNM formats, +the most significant byte is first. (DP 203_rdppm.dpatch) + +Add -raw option to rdjpgcom not to mangle the output. +(DP 205_rdjpgcom_raw.dpatch) + +Make rdjpgcom locale aware. (DP 201_rdjpgcom_locale.dpatch) + +Add extern "C" to jpeglib.h. +This avoids the need to put extern "C" { ... } around #include "jpeglib.h" +in your C++ application. Defining the symbol DONT_USE_EXTERN_C in the +configuration prevents this. (DP 202_jpeglib.h_c++.dpatch) + + +Version 6b 27-Mar-1998 +----------------------- + +jpegtran has new features for lossless image transformations (rotation +and flipping) as well as "lossless" reduction to grayscale. + +jpegtran now copies comments by default; it has a -copy switch to enable +copying all APPn blocks as well, or to suppress comments. (Formerly it +always suppressed comments and APPn blocks.) jpegtran now also preserves +JFIF version and resolution information. + +New decompressor library feature: COM and APPn markers found in the input +file can be saved in memory for later use by the application. (Before, +you had to code this up yourself with a custom marker processor.) + +There is an unused field "void * client_data" now in compress and decompress +parameter structs; this may be useful in some applications. + +JFIF version number information is now saved by the decoder and accepted by +the encoder. jpegtran uses this to copy the source file's version number, +to ensure "jpegtran -copy all" won't create bogus files that contain JFXX +extensions but claim to be version 1.01. Applications that generate their +own JFXX extension markers also (finally) have a supported way to cause the +encoder to emit JFIF version number 1.02. + +djpeg's trace mode reports JFIF 1.02 thumbnail images as such, rather +than as unknown APP0 markers. + +In -verbose mode, djpeg and rdjpgcom will try to print the contents of +APP12 markers as text. Some digital cameras store useful text information +in APP12 markers. + +Handling of truncated data streams is more robust: blocks beyond the one in +which the error occurs will be output as uniform gray, or left unchanged +if decoding a progressive JPEG. The appearance no longer depends on the +Huffman tables being used. + +Huffman tables are checked for validity much more carefully than before. + +To avoid the Unisys LZW patent, djpeg's GIF output capability has been +changed to produce "uncompressed GIFs", and cjpeg's GIF input capability +has been removed altogether. We're not happy about it either, but there +seems to be no good alternative. + +The configure script now supports building libjpeg as a shared library +on many flavors of Unix (all the ones that GNU libtool knows how to +build shared libraries for). Use "./configure --enable-shared" to +try this out. + +New jconfig file and makefiles for Microsoft Visual C++ and Developer Studio. +Also, a jconfig file and a build script for Metrowerks CodeWarrior +on Apple Macintosh. makefile.dj has been updated for DJGPP v2, and there +are miscellaneous other minor improvements in the makefiles. + +jmemmac.c now knows how to create temporary files following Mac System 7 +conventions. + +djpeg's -map switch is now able to read raw-format PPM files reliably. + +cjpeg -progressive -restart no longer generates any unnecessary DRI markers. + +Multiple calls to jpeg_simple_progression for a single JPEG object +no longer leak memory. + + +Version 6a 7-Feb-96 +-------------------- + +Library initialization sequence modified to detect version mismatches +and struct field packing mismatches between library and calling application. +This change requires applications to be recompiled, but does not require +any application source code change. + +All routine declarations changed to the style "GLOBAL(type) name ...", +that is, GLOBAL, LOCAL, METHODDEF, EXTERN are now macros taking the +routine's return type as an argument. This makes it possible to add +Microsoft-style linkage keywords to all the routines by changing just +these macros. Note that any application code that was using these macros +will have to be changed. + +DCT coefficient quantization tables are now stored in normal array order +rather than zigzag order. Application code that calls jpeg_add_quant_table, +or otherwise manipulates quantization tables directly, will need to be +changed. If you need to make such code work with either older or newer +versions of the library, a test like "#if JPEG_LIB_VERSION >= 61" is +recommended. + +djpeg's trace capability now dumps DQT tables in natural order, not zigzag +order. This allows the trace output to be made into a "-qtables" file +more easily. + +New system-dependent memory manager module for use on Apple Macintosh. + +Fix bug in cjpeg's -smooth option: last one or two scanlines would be +duplicates of the prior line unless the image height mod 16 was 1 or 2. + +Repair minor problems in VMS, BCC, MC6 makefiles. + +New configure script based on latest GNU Autoconf. + +Correct the list of include files needed by MetroWerks C for ccommand(). + +Numerous small documentation updates. + + +Version 6 2-Aug-95 +------------------- + +Progressive JPEG support: library can read and write full progressive JPEG +files. A "buffered image" mode supports incremental decoding for on-the-fly +display of progressive images. Simply recompiling an existing IJG-v5-based +decoder with v6 should allow it to read progressive files, though of course +without any special progressive display. + +New "jpegtran" application performs lossless transcoding between different +JPEG formats; primarily, it can be used to convert baseline to progressive +JPEG and vice versa. In support of jpegtran, the library now allows lossless +reading and writing of JPEG files as DCT coefficient arrays. This ability +may be of use in other applications. + +Notes for programmers: +* We changed jpeg_start_decompress() to be able to suspend; this makes all +decoding modes available to suspending-input applications. However, +existing applications that use suspending input will need to be changed +to check the return value from jpeg_start_decompress(). You don't need to +do anything if you don't use a suspending data source. +* We changed the interface to the virtual array routines: access_virt_array +routines now take a count of the number of rows to access this time. The +last parameter to request_virt_array routines is now interpreted as the +maximum number of rows that may be accessed at once, but not necessarily +the height of every access. + + +Version 5b 15-Mar-95 +--------------------- + +Correct bugs with grayscale images having v_samp_factor > 1. + +jpeg_write_raw_data() now supports output suspension. + +Correct bugs in "configure" script for case of compiling in +a directory other than the one containing the source files. + +Repair bug in jquant1.c: sometimes didn't use as many colors as it could. + +Borland C makefile and jconfig file work under either MS-DOS or OS/2. + +Miscellaneous improvements to documentation. + + +Version 5a 7-Dec-94 +-------------------- + +Changed color conversion roundoff behavior so that grayscale values are +represented exactly. (This causes test image files to change.) + +Make ordered dither use 16x16 instead of 4x4 pattern for a small quality +improvement. + +New configure script based on latest GNU Autoconf. +Fix configure script to handle CFLAGS correctly. +Rename *.auto files to *.cfg, so that configure script still works if +file names have been truncated for DOS. + +Fix bug in rdbmp.c: didn't allow for extra data between header and image. + +Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data. + +Fix several bugs in rdrle.c. + +NEED_SHORT_EXTERNAL_NAMES option was broken. + +Revise jerror.h/jerror.c for more flexibility in message table. + +Repair oversight in jmemname.c NO_MKTEMP case: file could be there +but unreadable. + + +Version 5 24-Sep-94 +-------------------- + +Version 5 represents a nearly complete redesign and rewrite of the IJG +software. Major user-visible changes include: + * Automatic configuration simplifies installation for most Unix systems. + * A range of speed vs. image quality tradeoffs are supported. + This includes resizing of an image during decompression: scaling down + by a factor of 1/2, 1/4, or 1/8 is handled very efficiently. + * New programs rdjpgcom and wrjpgcom allow insertion and extraction + of text comments in a JPEG file. + +The application programmer's interface to the library has changed completely. +Notable improvements include: + * We have eliminated the use of callback routines for handling the + uncompressed image data. The application now sees the library as a + set of routines that it calls to read or write image data on a + scanline-by-scanline basis. + * The application image data is represented in a conventional interleaved- + pixel format, rather than as a separate array for each color channel. + This can save a copying step in many programs. + * The handling of compressed data has been cleaned up: the application can + supply routines to source or sink the compressed data. It is possible to + suspend processing on source/sink buffer overrun, although this is not + supported in all operating modes. + * All static state has been eliminated from the library, so that multiple + instances of compression or decompression can be active concurrently. + * JPEG abbreviated datastream formats are supported, ie, quantization and + Huffman tables can be stored separately from the image data. + * And not only that, but the documentation of the library has improved + considerably! + + +The last widely used release before the version 5 rewrite was version 4A of +18-Feb-93. Change logs before that point have been discarded, since they +are not of much interest after the rewrite. diff --git a/3rdparty/openctm/tools/jpeg/cjpeg.1 b/3rdparty/openctm/tools/jpeg/cjpeg.1 new file mode 100644 index 000000000..fa7bfa814 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/cjpeg.1 @@ -0,0 +1,325 @@ +.TH CJPEG 1 "10 June 2009" +.SH NAME +cjpeg \- compress an image file to a JPEG file +.SH SYNOPSIS +.B cjpeg +[ +.I options +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B cjpeg +compresses the named image file, or the standard input if no file is +named, and produces a JPEG/JFIF file on the standard output. +The currently supported input file formats are: PPM (PBMPLUS color +format), PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster +Toolkit format). (RLE is supported only if the URT library is available.) +.SH OPTIONS +All switch names may be abbreviated; for example, +.B \-grayscale +may be written +.B \-gray +or +.BR \-gr . +Most of the "basic" switches can be abbreviated to as little as one letter. +Upper and lower case are equivalent (thus +.B \-BMP +is the same as +.BR \-bmp ). +British spellings are also accepted (e.g., +.BR \-greyscale ), +though for brevity these are not mentioned below. +.PP +The basic switches are: +.TP +.BI \-quality " N[,...]" +Scale quantization tables to adjust image quality. Quality is 0 (worst) to +100 (best); default is 75. (See below for more info.) +.TP +.B \-grayscale +Create monochrome JPEG file from color input. Be sure to use this switch when +compressing a grayscale BMP file, because +.B cjpeg +isn't bright enough to notice whether a BMP file uses only shades of gray. +By saying +.BR \-grayscale , +you'll get a smaller JPEG file that takes less time to process. +.TP +.B \-optimize +Perform optimization of entropy encoding parameters. Without this, default +encoding parameters are used. +.B \-optimize +usually makes the JPEG file a little smaller, but +.B cjpeg +runs somewhat slower and needs much more memory. Image quality and speed of +decompression are unaffected by +.BR \-optimize . +.TP +.B \-progressive +Create progressive JPEG file (see below). +.TP +.BI \-scale " M/N" +Scale the output image by a factor M/N. Currently supported scale factors are +8/N with all N from 1 to 16. +.TP +.B \-targa +Input file is Targa format. Targa files that contain an "identification" +field will not be automatically recognized by +.BR cjpeg ; +for such files you must specify +.B \-targa +to make +.B cjpeg +treat the input as Targa format. +For most Targa files, you won't need this switch. +.PP +The +.B \-quality +switch lets you trade off compressed file size against quality of the +reconstructed image: the higher the quality setting, the larger the JPEG file, +and the closer the output image will be to the original input. Normally you +want to use the lowest quality setting (smallest file) that decompresses into +something visually indistinguishable from the original image. For this +purpose the quality setting should be between 50 and 95; the default of 75 is +often about right. If you see defects at +.B \-quality +75, then go up 5 or 10 counts at a time until you are happy with the output +image. (The optimal setting will vary from one image to another.) +.PP +.B \-quality +100 will generate a quantization table of all 1's, minimizing loss in the +quantization step (but there is still information loss in subsampling, as well +as roundoff error). This setting is mainly of interest for experimental +purposes. Quality values above about 95 are +.B not +recommended for normal use; the compressed file size goes up dramatically for +hardly any gain in output image quality. +.PP +In the other direction, quality values below 50 will produce very small files +of low image quality. Settings around 5 to 10 might be useful in preparing an +index of a large image library, for example. Try +.B \-quality +2 (or so) for some amusing Cubist effects. (Note: quality +values below about 25 generate 2-byte quantization tables, which are +considered optional in the JPEG standard. +.B cjpeg +emits a warning message when you give such a quality value, because some +other JPEG programs may be unable to decode the resulting file. Use +.B \-baseline +if you need to ensure compatibility at low quality values.) +.PP +The +.B \-quality +option has been extended in IJG version 7 for support of separate quality +settings for luminance and chrominance (or in general, for every provided +quantization table slot). This feature is useful for high-quality +applications which cannot accept the damage of color data by coarse +subsampling settings. You can now easily reduce the color data amount more +smoothly with finer control without separate subsampling. The resulting file +is fully compliant with standard JPEG decoders. +Note that the +.B \-quality +ratings refer to the quantization table slots, and that the last value is +replicated if there are more q-table slots than parameters. The default +q-table slots are 0 for luminance and 1 for chrominance with default tables as +given in the JPEG standard. This is compatible with the old behaviour in case +that only one parameter is given, which is then used for both luminance and +chrominance (slots 0 and 1). More or custom quantization tables can be set +with +.B \-qtables +and assigned to components with +.B \-qslots +parameter (see the "wizard" switches below). +.B Caution: +You must explicitely add +.BI \-sample " 1x1" +for efficient separate color +quality selection, since the default value used by library is 2x2! +.PP +The +.B \-progressive +switch creates a "progressive JPEG" file. In this type of JPEG file, the data +is stored in multiple scans of increasing quality. If the file is being +transmitted over a slow communications link, the decoder can use the first +scan to display a low-quality image very quickly, and can then improve the +display with each subsequent scan. The final image is exactly equivalent to a +standard JPEG file of the same quality setting, and the total file size is +about the same --- often a little smaller. +.PP +Switches for advanced users: +.TP +.B \-dct int +Use integer DCT method (default). +.TP +.B \-dct fast +Use fast integer DCT (less accurate). +.TP +.B \-dct float +Use floating-point DCT method. +The float method is very slightly more accurate than the int method, but is +much slower unless your machine has very fast floating-point hardware. Also +note that results of the floating-point method may vary slightly across +machines, while the integer methods should give the same results everywhere. +The fast integer method is much less accurate than the other two. +.TP +.B \-nosmooth +Don't use high-quality downsampling. +.TP +.BI \-restart " N" +Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is +attached to the number. +.B \-restart 0 +(the default) means no restart markers. +.TP +.BI \-smooth " N" +Smooth the input image to eliminate dithering noise. N, ranging from 1 to +100, indicates the strength of smoothing. 0 (the default) means no smoothing. +.TP +.BI \-maxmemory " N" +Set limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if "M" is attached to the +number. For example, +.B \-max 4m +selects 4000000 bytes. If more space is needed, temporary files will be used. +.TP +.BI \-outfile " name" +Send output image to the named file, not to standard output. +.TP +.B \-verbose +Enable debug printout. More +.BR \-v 's +give more output. Also, version information is printed at startup. +.TP +.B \-debug +Same as +.BR \-verbose . +.PP +The +.B \-restart +option inserts extra markers that allow a JPEG decoder to resynchronize after +a transmission error. Without restart markers, any damage to a compressed +file will usually ruin the image from the point of the error to the end of the +image; with restart markers, the damage is usually confined to the portion of +the image up to the next restart marker. Of course, the restart markers +occupy extra space. We recommend +.B \-restart 1 +for images that will be transmitted across unreliable networks such as Usenet. +.PP +The +.B \-smooth +option filters the input to eliminate fine-scale noise. This is often useful +when converting dithered images to JPEG: a moderate smoothing factor of 10 to +50 gets rid of dithering patterns in the input file, resulting in a smaller +JPEG file and a better-looking image. Too large a smoothing factor will +visibly blur the image, however. +.PP +Switches for wizards: +.TP +.B \-arithmetic +Use arithmetic coding. +.B Caution: +arithmetic coded JPEG is not yet widely implemented, so many decoders will be +unable to view an arithmetic coded JPEG file at all. +.TP +.B \-baseline +Force baseline-compatible quantization tables to be generated. This clamps +quantization values to 8 bits even at low quality settings. (This switch is +poorly named, since it does not ensure that the output is actually baseline +JPEG. For example, you can use +.B \-baseline +and +.B \-progressive +together.) +.TP +.BI \-qtables " file" +Use the quantization tables given in the specified text file. +.TP +.BI \-qslots " N[,...]" +Select which quantization table to use for each color component. +.TP +.BI \-sample " HxV[,...]" +Set JPEG sampling factors for each color component. +.TP +.BI \-scans " file" +Use the scan script given in the specified text file. +.PP +The "wizard" switches are intended for experimentation with JPEG. If you +don't know what you are doing, \fBdon't use them\fR. These switches are +documented further in the file wizard.txt. +.SH EXAMPLES +.LP +This example compresses the PPM file foo.ppm with a quality factor of +60 and saves the output as foo.jpg: +.IP +.B cjpeg \-quality +.I 60 foo.ppm +.B > +.I foo.jpg +.SH HINTS +Color GIF files are not the ideal input for JPEG; JPEG is really intended for +compressing full-color (24-bit) images. In particular, don't try to convert +cartoons, line drawings, and other images that have only a few distinct +colors. GIF works great on these, JPEG does not. If you want to convert a +GIF to JPEG, you should experiment with +.BR cjpeg 's +.B \-quality +and +.B \-smooth +options to get a satisfactory conversion. +.B \-smooth 10 +or so is often helpful. +.PP +Avoid running an image through a series of JPEG compression/decompression +cycles. Image quality loss will accumulate; after ten or so cycles the image +may be noticeably worse than it was after one cycle. It's best to use a +lossless format while manipulating an image, then convert to JPEG format when +you are ready to file the image away. +.PP +The +.B \-optimize +option to +.B cjpeg +is worth using when you are making a "final" version for posting or archiving. +It's also a win when you are using low quality settings to make very small +JPEG files; the percentage improvement is often a lot more than it is on +larger files. (At present, +.B \-optimize +mode is always selected when generating progressive JPEG files.) +.SH ENVIRONMENT +.TP +.B JPEGMEM +If this environment variable is set, its value is the default memory limit. +The value is specified as described for the +.B \-maxmemory +switch. +.B JPEGMEM +overrides the default value specified when the program was compiled, and +itself is overridden by an explicit +.BR \-maxmemory . +.SH SEE ALSO +.BR djpeg (1), +.BR jpegtran (1), +.BR rdjpgcom (1), +.BR wrjpgcom (1) +.br +.BR ppm (5), +.BR pgm (5) +.br +Wallace, Gregory K. "The JPEG Still Picture Compression Standard", +Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. +.SH AUTHOR +Independent JPEG Group +.SH BUGS +GIF input files are no longer supported, to avoid the Unisys LZW patent. +(Conversion of GIF files to JPEG is usually a bad idea anyway.) +.PP +Not all variants of BMP and Targa file formats are supported. +.PP +The +.B \-targa +switch is not a bug, it's a feature. (It would be a bug if the Targa format +designers had not been clueless.) \ No newline at end of file diff --git a/3rdparty/openctm/tools/jpeg/cjpeg.c b/3rdparty/openctm/tools/jpeg/cjpeg.c new file mode 100644 index 000000000..8acd3025d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/cjpeg.c @@ -0,0 +1,616 @@ +/* + * cjpeg.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * Modified 2003-2008 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a command-line user interface for the JPEG compressor. + * It should work on any system with Unix- or MS-DOS-style command lines. + * + * Two different command line styles are permitted, depending on the + * compile-time switch TWO_FILE_COMMANDLINE: + * cjpeg [options] inputfile outputfile + * cjpeg [options] [inputfile] + * In the second style, output is always to standard output, which you'd + * normally redirect to a file or pipe to some other program. Input is + * either from a named file or from standard input (typically redirected). + * The second style is convenient on Unix but is unhelpful on systems that + * don't support pipes. Also, you MUST use the first style if your system + * doesn't do binary I/O to stdin/stdout. + * To simplify script writing, the "-outfile" switch is provided. The syntax + * cjpeg [options] -outfile outputfile inputfile + * works regardless of which command line style is used. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include "jversion.h" /* for version message */ + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + + +/* Create the add-on message string table. */ + +#define JMESSAGE(code,string) string , + +static const char * const cdjpeg_message_table[] = { +#include "cderror.h" + NULL +}; + + +/* + * This routine determines what format the input file is, + * and selects the appropriate input-reading module. + * + * To determine which family of input formats the file belongs to, + * we may look only at the first byte of the file, since C does not + * guarantee that more than one character can be pushed back with ungetc. + * Looking at additional bytes would require one of these approaches: + * 1) assume we can fseek() the input file (fails for piped input); + * 2) assume we can push back more than one character (works in + * some C implementations, but unportable); + * 3) provide our own buffering (breaks input readers that want to use + * stdio directly, such as the RLE library); + * or 4) don't put back the data, and modify the input_init methods to assume + * they start reading after the start of file (also breaks RLE library). + * #1 is attractive for MS-DOS but is untenable on Unix. + * + * The most portable solution for file types that can't be identified by their + * first byte is to make the user tell us what they are. This is also the + * only approach for "raw" file types that contain only arbitrary values. + * We presently apply this method for Targa files. Most of the time Targa + * files start with 0x00, so we recognize that case. Potentially, however, + * a Targa file could start with any byte value (byte 0 is the length of the + * seldom-used ID field), so we provide a switch to force Targa input mode. + */ + +static boolean is_targa; /* records user -targa switch */ + + +LOCAL(cjpeg_source_ptr) +select_file_type (j_compress_ptr cinfo, FILE * infile) +{ + int c; + + if (is_targa) { +#ifdef TARGA_SUPPORTED + return jinit_read_targa(cinfo); +#else + ERREXIT(cinfo, JERR_TGA_NOTCOMP); +#endif + } + + if ((c = getc(infile)) == EOF) + ERREXIT(cinfo, JERR_INPUT_EMPTY); + if (ungetc(c, infile) == EOF) + ERREXIT(cinfo, JERR_UNGETC_FAILED); + + switch (c) { +#ifdef BMP_SUPPORTED + case 'B': + return jinit_read_bmp(cinfo); +#endif +#ifdef GIF_SUPPORTED + case 'G': + return jinit_read_gif(cinfo); +#endif +#ifdef PPM_SUPPORTED + case 'P': + return jinit_read_ppm(cinfo); +#endif +#ifdef RLE_SUPPORTED + case 'R': + return jinit_read_rle(cinfo); +#endif +#ifdef TARGA_SUPPORTED + case 0x00: + return jinit_read_targa(cinfo); +#endif + default: + ERREXIT(cinfo, JERR_UNKNOWN_FORMAT); + break; + } + + return NULL; /* suppress compiler warnings */ +} + + +/* + * Argument-parsing code. + * The switch parser is designed to be useful with DOS-style command line + * syntax, ie, intermixed switches and file names, where only the switches + * to the left of a given file name affect processing of that file. + * The main program in this file doesn't actually use this capability... + */ + + +static const char * progname; /* program name for error messages */ +static char * outfilename; /* for -outfile switch */ + + +LOCAL(void) +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -quality N[,...] Compression quality (0..100; 5-95 is useful range)\n"); + fprintf(stderr, " -grayscale Create monochrome JPEG file\n"); +#ifdef ENTROPY_OPT_SUPPORTED + fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); +#endif +#ifdef C_PROGRESSIVE_SUPPORTED + fprintf(stderr, " -progressive Create progressive JPEG file\n"); +#endif +#ifdef DCT_SCALING_SUPPORTED + fprintf(stderr, " -scale M/N Scale image by fraction M/N, eg, 1/2\n"); +#endif +#ifdef TARGA_SUPPORTED + fprintf(stderr, " -targa Input file is Targa format (usually not needed)\n"); +#endif + fprintf(stderr, "Switches for advanced users:\n"); +#ifdef DCT_ISLOW_SUPPORTED + fprintf(stderr, " -dct int Use integer DCT method%s\n", + (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); +#endif +#ifdef DCT_IFAST_SUPPORTED + fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", + (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); +#endif +#ifdef DCT_FLOAT_SUPPORTED + fprintf(stderr, " -dct float Use floating-point DCT method%s\n", + (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); +#endif + fprintf(stderr, " -nosmooth Don't use high-quality downsampling\n"); + fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); +#ifdef INPUT_SMOOTHING_SUPPORTED + fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n"); +#endif + fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); + fprintf(stderr, " -outfile name Specify name for output file\n"); + fprintf(stderr, " -verbose or -debug Emit debug output\n"); + fprintf(stderr, "Switches for wizards:\n"); +#ifdef C_ARITH_CODING_SUPPORTED + fprintf(stderr, " -arithmetic Use arithmetic coding\n"); +#endif + fprintf(stderr, " -baseline Force baseline quantization tables\n"); + fprintf(stderr, " -qtables file Use quantization tables given in file\n"); + fprintf(stderr, " -qslots N[,...] Set component quantization tables\n"); + fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n"); +#ifdef C_MULTISCAN_FILES_SUPPORTED + fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); +#endif + exit(EXIT_FAILURE); +} + + +LOCAL(int) +parse_switches (j_compress_ptr cinfo, int argc, char **argv, + int last_file_arg_seen, boolean for_real) +/* Parse optional switches. + * Returns argv[] index of first file-name argument (== argc if none). + * Any file names with indexes <= last_file_arg_seen are ignored; + * they have presumably been processed in a previous iteration. + * (Pass 0 for last_file_arg_seen on the first or only iteration.) + * for_real is FALSE on the first (dummy) pass; we may skip any expensive + * processing. + */ +{ + int argn; + char * arg; + boolean force_baseline; + boolean simple_progressive; + char * qualityarg = NULL; /* saves -quality parm if any */ + char * qtablefile = NULL; /* saves -qtables filename if any */ + char * qslotsarg = NULL; /* saves -qslots parm if any */ + char * samplearg = NULL; /* saves -sample parm if any */ + char * scansarg = NULL; /* saves -scans parm if any */ + + /* Set up default JPEG parameters. */ + + force_baseline = FALSE; /* by default, allow 16-bit quantizers */ + simple_progressive = FALSE; + is_targa = FALSE; + outfilename = NULL; + cinfo->err->trace_level = 0; + + /* Scan command line options, adjust parameters */ + + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (*arg != '-') { + /* Not a switch, must be a file name argument */ + if (argn <= last_file_arg_seen) { + outfilename = NULL; /* -outfile applies to just one input file */ + continue; /* ignore this name if previously processed */ + } + break; /* else done parsing switches */ + } + arg++; /* advance past switch marker character */ + + if (keymatch(arg, "arithmetic", 1)) { + /* Use arithmetic coding. */ +#ifdef C_ARITH_CODING_SUPPORTED + cinfo->arith_code = TRUE; +#else + fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "baseline", 1)) { + /* Force baseline-compatible output (8-bit quantizer values). */ + force_baseline = TRUE; + + } else if (keymatch(arg, "dct", 2)) { + /* Select DCT algorithm. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "int", 1)) { + cinfo->dct_method = JDCT_ISLOW; + } else if (keymatch(argv[argn], "fast", 2)) { + cinfo->dct_method = JDCT_IFAST; + } else if (keymatch(argv[argn], "float", 2)) { + cinfo->dct_method = JDCT_FLOAT; + } else + usage(); + + } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { + /* Enable debug printouts. */ + /* On first -d, print version identification */ + static boolean printed_version = FALSE; + + if (! printed_version) { + fprintf(stderr, "Independent JPEG Group's CJPEG, version %s\n%s\n", + JVERSION, JCOPYRIGHT); + printed_version = TRUE; + } + cinfo->err->trace_level++; + + } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { + /* Force a monochrome JPEG file to be generated. */ + jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); + + } else if (keymatch(arg, "maxmemory", 3)) { + /* Maximum memory in Kb (or Mb with 'm'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (ch == 'm' || ch == 'M') + lval *= 1000L; + cinfo->mem->max_memory_to_use = lval * 1000L; + + } else if (keymatch(arg, "nosmooth", 3)) { + /* Suppress fancy downsampling */ + cinfo->do_fancy_downsampling = FALSE; + + } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { + /* Enable entropy parm optimization. */ +#ifdef ENTROPY_OPT_SUPPORTED + cinfo->optimize_coding = TRUE; +#else + fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "outfile", 4)) { + /* Set output file name. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + outfilename = argv[argn]; /* save it away for later use */ + + } else if (keymatch(arg, "progressive", 1)) { + /* Select simple progressive mode. */ +#ifdef C_PROGRESSIVE_SUPPORTED + simple_progressive = TRUE; + /* We must postpone execution until num_components is known. */ +#else + fprintf(stderr, "%s: sorry, progressive output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "quality", 1)) { + /* Quality ratings (quantization table scaling factors). */ + if (++argn >= argc) /* advance to next argument */ + usage(); + qualityarg = argv[argn]; + + } else if (keymatch(arg, "qslots", 2)) { + /* Quantization table slot numbers. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + qslotsarg = argv[argn]; + /* Must delay setting qslots until after we have processed any + * colorspace-determining switches, since jpeg_set_colorspace sets + * default quant table numbers. + */ + + } else if (keymatch(arg, "qtables", 2)) { + /* Quantization tables fetched from file. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + qtablefile = argv[argn]; + /* We postpone actually reading the file in case -quality comes later. */ + + } else if (keymatch(arg, "restart", 1)) { + /* Restart interval in MCU rows (or in MCUs with 'b'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (lval < 0 || lval > 65535L) + usage(); + if (ch == 'b' || ch == 'B') { + cinfo->restart_interval = (unsigned int) lval; + cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ + } else { + cinfo->restart_in_rows = (int) lval; + /* restart_interval will be computed during startup */ + } + + } else if (keymatch(arg, "sample", 2)) { + /* Set sampling factors. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + samplearg = argv[argn]; + /* Must delay setting sample factors until after we have processed any + * colorspace-determining switches, since jpeg_set_colorspace sets + * default sampling factors. + */ + + } else if (keymatch(arg, "scale", 4)) { + /* Scale the image by a fraction M/N. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d/%d", + &cinfo->scale_num, &cinfo->scale_denom) != 2) + usage(); + + } else if (keymatch(arg, "scans", 4)) { + /* Set scan script. */ +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (++argn >= argc) /* advance to next argument */ + usage(); + scansarg = argv[argn]; + /* We must postpone reading the file in case -progressive appears. */ +#else + fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "smooth", 2)) { + /* Set input smoothing factor. */ + int val; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d", &val) != 1) + usage(); + if (val < 0 || val > 100) + usage(); + cinfo->smoothing_factor = val; + + } else if (keymatch(arg, "targa", 1)) { + /* Input file is Targa format. */ + is_targa = TRUE; + + } else { + usage(); /* bogus switch */ + } + } + + /* Post-switch-scanning cleanup */ + + if (for_real) { + + /* Set quantization tables for selected quality. */ + /* Some or all may be overridden if -qtables is present. */ + if (qualityarg != NULL) /* process -quality if it was present */ + if (! set_quality_ratings(cinfo, qualityarg, force_baseline)) + usage(); + + if (qtablefile != NULL) /* process -qtables if it was present */ + if (! read_quant_tables(cinfo, qtablefile, force_baseline)) + usage(); + + if (qslotsarg != NULL) /* process -qslots if it was present */ + if (! set_quant_slots(cinfo, qslotsarg)) + usage(); + + if (samplearg != NULL) /* process -sample if it was present */ + if (! set_sample_factors(cinfo, samplearg)) + usage(); + +#ifdef C_PROGRESSIVE_SUPPORTED + if (simple_progressive) /* process -progressive; -scans can override */ + jpeg_simple_progression(cinfo); +#endif + +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (scansarg != NULL) /* process -scans if it was present */ + if (! read_scan_script(cinfo, scansarg)) + usage(); +#endif + } + + return argn; /* return index of next arg (file name) */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; +#ifdef PROGRESS_REPORT + struct cdjpeg_progress_mgr progress; +#endif + int file_index; + cjpeg_source_ptr src_mgr; + FILE * input_file; + FILE * output_file; + JDIMENSION num_scanlines; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "cjpeg"; /* in case C library doesn't provide it */ + + /* Initialize the JPEG compression object with default error handling. */ + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + /* Add some application-specific error messages (from cderror.h) */ + jerr.addon_message_table = cdjpeg_message_table; + jerr.first_addon_message = JMSG_FIRSTADDONCODE; + jerr.last_addon_message = JMSG_LASTADDONCODE; + + /* Now safe to enable signal catcher. */ +#ifdef NEED_SIGNAL_CATCHER + enable_signal_catcher((j_common_ptr) &cinfo); +#endif + + /* Initialize JPEG parameters. + * Much of this may be overridden later. + * In particular, we don't yet know the input file's color space, + * but we need to provide some value for jpeg_set_defaults() to work. + */ + + cinfo.in_color_space = JCS_RGB; /* arbitrary guess */ + jpeg_set_defaults(&cinfo); + + /* Scan command line to find file names. + * It is convenient to use just one switch-parsing routine, but the switch + * values read here are ignored; we will rescan the switches after opening + * the input file. + */ + + file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); + +#ifdef TWO_FILE_COMMANDLINE + /* Must have either -outfile switch or explicit output file name */ + if (outfilename == NULL) { + if (file_index != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + outfilename = argv[file_index+1]; + } else { + if (file_index != argc-1) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + } +#else + /* Unix style: expect zero or one file name */ + if (file_index < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } +#endif /* TWO_FILE_COMMANDLINE */ + + /* Open the input file. */ + if (file_index < argc) { + if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ + input_file = read_stdin(); + } + + /* Open the output file. */ + if (outfilename != NULL) { + if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, outfilename); + exit(EXIT_FAILURE); + } + } else { + /* default output file is stdout */ + output_file = write_stdout(); + } + +#ifdef PROGRESS_REPORT + start_progress_monitor((j_common_ptr) &cinfo, &progress); +#endif + + /* Figure out the input file format, and set up to read it. */ + src_mgr = select_file_type(&cinfo, input_file); + src_mgr->input_file = input_file; + + /* Read the input file header to obtain file size & colorspace. */ + (*src_mgr->start_input) (&cinfo, src_mgr); + + /* Now that we know input colorspace, fix colorspace-dependent defaults */ + jpeg_default_colorspace(&cinfo); + + /* Adjust default compression parameters by re-parsing the options */ + file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); + + /* Specify data destination for compression */ + jpeg_stdio_dest(&cinfo, output_file); + + /* Start compressor */ + jpeg_start_compress(&cinfo, TRUE); + + /* Process data */ + while (cinfo.next_scanline < cinfo.image_height) { + num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr); + (void) jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines); + } + + /* Finish compression and release memory */ + (*src_mgr->finish_input) (&cinfo, src_mgr); + jpeg_finish_compress(&cinfo); + jpeg_destroy_compress(&cinfo); + + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + +#ifdef PROGRESS_REPORT + end_progress_monitor((j_common_ptr) &cinfo); +#endif + + /* All done. */ + exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/3rdparty/openctm/tools/jpeg/ckconfig.c b/3rdparty/openctm/tools/jpeg/ckconfig.c new file mode 100644 index 000000000..fb9429af0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/ckconfig.c @@ -0,0 +1,402 @@ +/* + * ckconfig.c + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + */ + +/* + * This program is intended to help you determine how to configure the JPEG + * software for installation on a particular system. The idea is to try to + * compile and execute this program. If your compiler fails to compile the + * program, make changes as indicated in the comments below. Once you can + * compile the program, run it, and it will produce a "jconfig.h" file for + * your system. + * + * As a general rule, each time you try to compile this program, + * pay attention only to the *first* error message you get from the compiler. + * Many C compilers will issue lots of spurious error messages once they + * have gotten confused. Go to the line indicated in the first error message, + * and read the comments preceding that line to see what to change. + * + * Almost all of the edits you may need to make to this program consist of + * changing a line that reads "#define SOME_SYMBOL" to "#undef SOME_SYMBOL", + * or vice versa. This is called defining or undefining that symbol. + */ + + +/* First we must see if your system has the include files we need. + * We start out with the assumption that your system has all the ANSI-standard + * include files. If you get any error trying to include one of these files, + * undefine the corresponding HAVE_xxx symbol. + */ + +#define HAVE_STDDEF_H /* replace 'define' by 'undef' if error here */ +#ifdef HAVE_STDDEF_H /* next line will be skipped if you undef... */ +#include +#endif + +#define HAVE_STDLIB_H /* same thing for stdlib.h */ +#ifdef HAVE_STDLIB_H +#include +#endif + +#include /* If you ain't got this, you ain't got C. */ + +/* We have to see if your string functions are defined by + * strings.h (old BSD convention) or string.h (everybody else). + * We try the non-BSD convention first; define NEED_BSD_STRINGS + * if the compiler says it can't find string.h. + */ + +#undef NEED_BSD_STRINGS + +#ifdef NEED_BSD_STRINGS +#include +#else +#include +#endif + +/* On some systems (especially older Unix machines), type size_t is + * defined only in the include file . If you get a failure + * on the size_t test below, try defining NEED_SYS_TYPES_H. + */ + +#undef NEED_SYS_TYPES_H /* start by assuming we don't need it */ +#ifdef NEED_SYS_TYPES_H +#include +#endif + + +/* Usually type size_t is defined in one of the include files we've included + * above. If not, you'll get an error on the "typedef size_t my_size_t;" line. + * In that case, first try defining NEED_SYS_TYPES_H just above. + * If that doesn't work, you'll have to search through your system library + * to figure out which include file defines "size_t". Look for a line that + * says "typedef something-or-other size_t;". Then, change the line below + * that says "#include " to instead include the file + * you found size_t in, and define NEED_SPECIAL_INCLUDE. If you can't find + * type size_t anywhere, try replacing "#include " with + * "typedef unsigned int size_t;". + */ + +#undef NEED_SPECIAL_INCLUDE /* assume we DON'T need it, for starters */ + +#ifdef NEED_SPECIAL_INCLUDE +#include +#endif + +typedef size_t my_size_t; /* The payoff: do we have size_t now? */ + + +/* The next question is whether your compiler supports ANSI-style function + * prototypes. You need to know this in order to choose between using + * makefile.ansi and using makefile.unix. + * The #define line below is set to assume you have ANSI function prototypes. + * If you get an error in this group of lines, undefine HAVE_PROTOTYPES. + */ + +#define HAVE_PROTOTYPES + +#ifdef HAVE_PROTOTYPES +int testfunction (int arg1, int * arg2); /* check prototypes */ + +struct methods_struct { /* check method-pointer declarations */ + int (*error_exit) (char *msgtext); + int (*trace_message) (char *msgtext); + int (*another_method) (void); +}; + +int testfunction (int arg1, int * arg2) /* check definitions */ +{ + return arg2[arg1]; +} + +int test2function (void) /* check void arg list */ +{ + return 0; +} +#endif + + +/* Now we want to find out if your compiler knows what "unsigned char" means. + * If you get an error on the "unsigned char un_char;" line, + * then undefine HAVE_UNSIGNED_CHAR. + */ + +#define HAVE_UNSIGNED_CHAR + +#ifdef HAVE_UNSIGNED_CHAR +unsigned char un_char; +#endif + + +/* Now we want to find out if your compiler knows what "unsigned short" means. + * If you get an error on the "unsigned short un_short;" line, + * then undefine HAVE_UNSIGNED_SHORT. + */ + +#define HAVE_UNSIGNED_SHORT + +#ifdef HAVE_UNSIGNED_SHORT +unsigned short un_short; +#endif + + +/* Now we want to find out if your compiler understands type "void". + * If you get an error anywhere in here, undefine HAVE_VOID. + */ + +#define HAVE_VOID + +#ifdef HAVE_VOID +/* Caution: a C++ compiler will insist on complete prototypes */ +typedef void * void_ptr; /* check void * */ +#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ +typedef void (*void_func) (int a, int b); +#else +typedef void (*void_func) (); +#endif + +#ifdef HAVE_PROTOTYPES /* check void function result */ +void test3function (void_ptr arg1, void_func arg2) +#else +void test3function (arg1, arg2) + void_ptr arg1; + void_func arg2; +#endif +{ + char * locptr = (char *) arg1; /* check casting to and from void * */ + arg1 = (void *) locptr; + (*arg2) (1, 2); /* check call of fcn returning void */ +} +#endif + + +/* Now we want to find out if your compiler knows what "const" means. + * If you get an error here, undefine HAVE_CONST. + */ + +#define HAVE_CONST + +#ifdef HAVE_CONST +static const int carray[3] = {1, 2, 3}; + +#ifdef HAVE_PROTOTYPES +int test4function (const int arg1) +#else +int test4function (arg1) + const int arg1; +#endif +{ + return carray[arg1]; +} +#endif + + +/* If you get an error or warning about this structure definition, + * define INCOMPLETE_TYPES_BROKEN. + */ + +#undef INCOMPLETE_TYPES_BROKEN + +#ifndef INCOMPLETE_TYPES_BROKEN +typedef struct undefined_structure * undef_struct_ptr; +#endif + + +/* If you get an error about duplicate names, + * define NEED_SHORT_EXTERNAL_NAMES. + */ + +#undef NEED_SHORT_EXTERNAL_NAMES + +#ifndef NEED_SHORT_EXTERNAL_NAMES + +int possibly_duplicate_function () +{ + return 0; +} + +int possibly_dupli_function () +{ + return 1; +} + +#endif + + + +/************************************************************************ + * OK, that's it. You should not have to change anything beyond this + * point in order to compile and execute this program. (You might get + * some warnings, but you can ignore them.) + * When you run the program, it will make a couple more tests that it + * can do automatically, and then it will create jconfig.h and print out + * any additional suggestions it has. + ************************************************************************ + */ + + +#ifdef HAVE_PROTOTYPES +int is_char_signed (int arg) +#else +int is_char_signed (arg) + int arg; +#endif +{ + if (arg == 189) { /* expected result for unsigned char */ + return 0; /* type char is unsigned */ + } + else if (arg != -67) { /* expected result for signed char */ + printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + } + return 1; /* assume char is signed otherwise */ +} + + +#ifdef HAVE_PROTOTYPES +int is_shifting_signed (long arg) +#else +int is_shifting_signed (arg) + long arg; +#endif +/* See whether right-shift on a long is signed or not. */ +{ + long res = arg >> 4; + + if (res == -0x7F7E80CL) { /* expected result for signed shift */ + return 1; /* right shift is signed */ + } + /* see if unsigned-shift hack will fix it. */ + /* we can't just test exact value since it depends on width of long... */ + res |= (~0L) << (32-4); + if (res == -0x7F7E80CL) { /* expected result now? */ + return 0; /* right shift is unsigned */ + } + printf("Right shift isn't acting as I expect it to.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + return 0; /* try it with unsigned anyway */ +} + + +#ifdef HAVE_PROTOTYPES +int main (int argc, char ** argv) +#else +int main (argc, argv) + int argc; + char ** argv; +#endif +{ + char signed_char_check = (char) (-67); + FILE *outfile; + + /* Attempt to write jconfig.h */ + if ((outfile = fopen("jconfig.h", "w")) == NULL) { + printf("Failed to write jconfig.h\n"); + return 1; + } + + /* Write out all the info */ + fprintf(outfile, "/* jconfig.h --- generated by ckconfig.c */\n"); + fprintf(outfile, "/* see jconfig.txt for explanations */\n\n"); +#ifdef HAVE_PROTOTYPES + fprintf(outfile, "#define HAVE_PROTOTYPES\n"); +#else + fprintf(outfile, "#undef HAVE_PROTOTYPES\n"); +#endif +#ifdef HAVE_UNSIGNED_CHAR + fprintf(outfile, "#define HAVE_UNSIGNED_CHAR\n"); +#else + fprintf(outfile, "#undef HAVE_UNSIGNED_CHAR\n"); +#endif +#ifdef HAVE_UNSIGNED_SHORT + fprintf(outfile, "#define HAVE_UNSIGNED_SHORT\n"); +#else + fprintf(outfile, "#undef HAVE_UNSIGNED_SHORT\n"); +#endif +#ifdef HAVE_VOID + fprintf(outfile, "/* #define void char */\n"); +#else + fprintf(outfile, "#define void char\n"); +#endif +#ifdef HAVE_CONST + fprintf(outfile, "/* #define const */\n"); +#else + fprintf(outfile, "#define const\n"); +#endif + if (is_char_signed((int) signed_char_check)) + fprintf(outfile, "#undef CHAR_IS_UNSIGNED\n"); + else + fprintf(outfile, "#define CHAR_IS_UNSIGNED\n"); +#ifdef HAVE_STDDEF_H + fprintf(outfile, "#define HAVE_STDDEF_H\n"); +#else + fprintf(outfile, "#undef HAVE_STDDEF_H\n"); +#endif +#ifdef HAVE_STDLIB_H + fprintf(outfile, "#define HAVE_STDLIB_H\n"); +#else + fprintf(outfile, "#undef HAVE_STDLIB_H\n"); +#endif +#ifdef NEED_BSD_STRINGS + fprintf(outfile, "#define NEED_BSD_STRINGS\n"); +#else + fprintf(outfile, "#undef NEED_BSD_STRINGS\n"); +#endif +#ifdef NEED_SYS_TYPES_H + fprintf(outfile, "#define NEED_SYS_TYPES_H\n"); +#else + fprintf(outfile, "#undef NEED_SYS_TYPES_H\n"); +#endif + fprintf(outfile, "#undef NEED_FAR_POINTERS\n"); +#ifdef NEED_SHORT_EXTERNAL_NAMES + fprintf(outfile, "#define NEED_SHORT_EXTERNAL_NAMES\n"); +#else + fprintf(outfile, "#undef NEED_SHORT_EXTERNAL_NAMES\n"); +#endif +#ifdef INCOMPLETE_TYPES_BROKEN + fprintf(outfile, "#define INCOMPLETE_TYPES_BROKEN\n"); +#else + fprintf(outfile, "#undef INCOMPLETE_TYPES_BROKEN\n"); +#endif + fprintf(outfile, "\n#ifdef JPEG_INTERNALS\n\n"); + if (is_shifting_signed(-0x7F7E80B1L)) + fprintf(outfile, "#undef RIGHT_SHIFT_IS_UNSIGNED\n"); + else + fprintf(outfile, "#define RIGHT_SHIFT_IS_UNSIGNED\n"); + fprintf(outfile, "\n#endif /* JPEG_INTERNALS */\n"); + fprintf(outfile, "\n#ifdef JPEG_CJPEG_DJPEG\n\n"); + fprintf(outfile, "#define BMP_SUPPORTED /* BMP image file format */\n"); + fprintf(outfile, "#define GIF_SUPPORTED /* GIF image file format */\n"); + fprintf(outfile, "#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */\n"); + fprintf(outfile, "#undef RLE_SUPPORTED /* Utah RLE image file format */\n"); + fprintf(outfile, "#define TARGA_SUPPORTED /* Targa image file format */\n\n"); + fprintf(outfile, "#undef TWO_FILE_COMMANDLINE /* You may need this on non-Unix systems */\n"); + fprintf(outfile, "#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */\n"); + fprintf(outfile, "#undef DONT_USE_B_MODE\n"); + fprintf(outfile, "/* #define PROGRESS_REPORT */ /* optional */\n"); + fprintf(outfile, "\n#endif /* JPEG_CJPEG_DJPEG */\n"); + + /* Close the jconfig.h file */ + fclose(outfile); + + /* User report */ + printf("Configuration check for Independent JPEG Group's software done.\n"); + printf("\nI have written the jconfig.h file for you.\n\n"); +#ifdef HAVE_PROTOTYPES + printf("You should use makefile.ansi as the starting point for your Makefile.\n"); +#else + printf("You should use makefile.unix as the starting point for your Makefile.\n"); +#endif + +#ifdef NEED_SPECIAL_INCLUDE + printf("\nYou'll need to change jconfig.h to include the system include file\n"); + printf("that you found type size_t in, or add a direct definition of type\n"); + printf("size_t if that's what you used. Just add it to the end.\n"); +#endif + + return 0; +} diff --git a/3rdparty/openctm/tools/jpeg/coderules.txt b/3rdparty/openctm/tools/jpeg/coderules.txt new file mode 100644 index 000000000..382efad3a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/coderules.txt @@ -0,0 +1,118 @@ +IJG JPEG LIBRARY: CODING RULES + +Copyright (C) 1991-1996, Thomas G. Lane. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +Since numerous people will be contributing code and bug fixes, it's important +to establish a common coding style. The goal of using similar coding styles +is much more important than the details of just what that style is. + +In general we follow the recommendations of "Recommended C Style and Coding +Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and +Brader). This document is available in the IJG FTP archive (see +jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl). + +Block comments should be laid out thusly: + +/* + * Block comments in this style. + */ + +We indent statements in K&R style, e.g., + if (test) { + then-part; + } else { + else-part; + } +with two spaces per indentation level. (This indentation convention is +handled automatically by GNU Emacs and many other text editors.) + +Multi-word names should be written in lower case with underscores, e.g., +multi_word_name (not multiWordName). Preprocessor symbols and enum constants +are similar but upper case (MULTI_WORD_NAME). Names should be unique within +the first fifteen characters. (On some older systems, global names must be +unique within six characters. We accommodate this without cluttering the +source code by using macros to substitute shorter names.) + +We use function prototypes everywhere; we rely on automatic source code +transformation to feed prototype-less C compilers. Transformation is done +by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript). +ansi2knr is not very bright, so it imposes a format requirement on function +declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions +should be written in the following style: + +LOCAL(int *) +function_name (int a, char *b) +{ + code... +} + +Note that each function definition must begin with GLOBAL(type), LOCAL(type), +or METHODDEF(type). These macros expand to "static type" or just "type" as +appropriate. They provide a readable indication of the routine's usage and +can readily be changed for special needs. (For instance, special linkage +keywords can be inserted for use in Windows DLLs.) + +ansi2knr does not transform method declarations (function pointers in +structs). We handle these with a macro JMETHOD, defined as + #ifdef HAVE_PROTOTYPES + #define JMETHOD(type,methodname,arglist) type (*methodname) arglist + #else + #define JMETHOD(type,methodname,arglist) type (*methodname) () + #endif +which is used like this: + struct function_pointers { + JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp)); + JMETHOD(void, term_entropy_encoder, (void)); + }; +Note the set of parentheses surrounding the parameter list. + +A similar solution is used for forward and external function declarations +(see the EXTERN and JPP macros). + +If the code is to work on non-ANSI compilers, we cannot rely on a prototype +declaration to coerce actual parameters into the right types. Therefore, use +explicit casts on actual parameters whenever the actual parameter type is not +identical to the formal parameter. Beware of implicit conversions to "int". + +It seems there are some non-ANSI compilers in which the sizeof() operator +is defined to return int, yet size_t is defined as long. Needless to say, +this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(), +so that the result is guaranteed to be of type size_t. + + +The JPEG library is intended to be used within larger programs. Furthermore, +we want it to be reentrant so that it can be used by applications that process +multiple images concurrently. The following rules support these requirements: + +1. Avoid direct use of file I/O, "malloc", error report printouts, etc; +pass these through the common routines provided. + +2. Minimize global namespace pollution. Functions should be declared static +wherever possible. (Note that our method-based calling conventions help this +a lot: in many modules only the initialization function will ever need to be +called directly, so only that function need be externally visible.) All +global function names should begin with "jpeg_", and should have an +abbreviated name (unique in the first six characters) substituted by macro +when NEED_SHORT_EXTERNAL_NAMES is set. + +3. Don't use global variables; anything that must be used in another module +should be in the common data structures. + +4. Don't use static variables except for read-only constant tables. Variables +that should be private to a module can be placed into private structures (see +the system architecture document, structure.txt). + +5. Source file names should begin with "j" for files that are part of the +library proper; source files that are not part of the library, such as cjpeg.c +and djpeg.c, do not begin with "j". Keep source file names to eight +characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep +compression and decompression code in separate source files --- some +applications may want only one half of the library. + +Note: these rules (particularly #4) are not followed religiously in the +modules that are used in cjpeg/djpeg but are not part of the JPEG library +proper. Those modules are not really intended to be used in other +applications. diff --git a/3rdparty/openctm/tools/jpeg/config.guess b/3rdparty/openctm/tools/jpeg/config.guess new file mode 100644 index 000000000..49c41dc8d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/config.guess @@ -0,0 +1,1561 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2009-04-27' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/3rdparty/openctm/tools/jpeg/config.sub b/3rdparty/openctm/tools/jpeg/config.sub new file mode 100644 index 000000000..a95b231e9 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/config.sub @@ -0,0 +1,1686 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2009-04-17' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/3rdparty/openctm/tools/jpeg/configure b/3rdparty/openctm/tools/jpeg/configure new file mode 100644 index 000000000..a3cd8b074 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/configure @@ -0,0 +1,17139 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.63 for libjpeg 7.0. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='libjpeg' +PACKAGE_TARNAME='libjpeg' +PACKAGE_VERSION='7.0' +PACKAGE_STRING='libjpeg 7.0' +PACKAGE_BUGREPORT='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +JPEG_LIB_VERSION +MEMORYMGR +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +HAVE_LD_VERSION_SCRIPT_FALSE +HAVE_LD_VERSION_SCRIPT_TRUE +LN_S +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +ANSI2KNR +U +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_maintainer_mode +enable_ld_version_script +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_maxmem +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libjpeg 7.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libjpeg] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libjpeg 7.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-ld-version-script + enable linker version script (default is enabled + when possible) + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-maxmem=N enable use of temp files, set max mem usage to N MB + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +libjpeg configure 7.0 +generated by GNU Autoconf 2.63 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libjpeg $as_me 7.0, which was +generated by GNU Autoconf 2.63. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Directory where autotools helper scripts lives. +ac_aux_dir= +for ac_dir in . "$srcdir"/.; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# Generate configuration headers. +ac_config_headers="$ac_config_headers jconfig.h:jconfig.cfg" + + +# Hack: disable autoheader so that it doesn't overwrite our cfg template. +AUTOHEADER="echo autoheader ignored" + +# Check system type +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 +$as_echo "$as_me: error: invalid value of canonical target" >&2;} + { (exit 1); exit 1; }; };; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Initialize Automake +# Don't require all the GNU mandated files +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 +$as_echo "$as_me: error: unsafe absolute working directory name" >&2;} + { (exit 1); exit 1; }; };; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 +$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} + { (exit 1); exit 1; }; };; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +$as_echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libjpeg' + VERSION='7.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +# Make --enable-silent-rules the default. +# To get verbose build output you may configure +# with --disable-silent-rules or use "make V=1". +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + + +# This is required when using the de-ANSI-fication feature. +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:$LINENO: checking for function prototypes" >&5 +$as_echo_n "checking for function prototypes... " >&6; } +if test "$ac_cv_prog_cc_c89" != no; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define PROTOTYPES 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define __PROTOTYPES 1 +_ACEOF + +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +if test "$ac_cv_prog_cc_stdc" != no; then + U= ANSI2KNR= +else + U=_ ANSI2KNR=./ansi2knr +fi +# Ensure some checks needed by ansi2knr itself. + + +for ac_header in string.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +# Add configure option --enable-maintainer-mode which enables +# dependency checking and generation useful to package maintainers. +# This is made an option to avoid confusing end users. + +{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Check for programs +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + case $ac_cv_prog_cc_stdc in + no) ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; + *) { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c99=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + + +fi + + ;; +esac + { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if test "${ac_cv_prog_cc_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in + no) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + '') { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + *) { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +# Check if LD supports linker scripts, +# and define automake conditional HAVE_LD_VERSION_SCRIPT if so. +# Check whether --enable-ld-version-script was given. +if test "${enable_ld_version_script+set}" = set; then + enableval=$enable_ld_version_script; have_ld_version_script=$enableval +fi + +if test -z "$have_ld_version_script"; then + { $as_echo "$as_me:$LINENO: checking if LD -Wl,--version-script works" >&5 +$as_echo_n "checking if LD -Wl,--version-script works... " >&6; } + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" + cat > conftest.map <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + have_ld_version_script=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + have_ld_version_script=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + rm -f conftest.map + LDFLAGS="$save_LDFLAGS" + { $as_echo "$as_me:$LINENO: result: $have_ld_version_script" >&5 +$as_echo "$have_ld_version_script" >&6; } +fi + if test "$have_ld_version_script" = "yes"; then + HAVE_LD_VERSION_SCRIPT_TRUE= + HAVE_LD_VERSION_SCRIPT_FALSE='#' +else + HAVE_LD_VERSION_SCRIPT_TRUE='#' + HAVE_LD_VERSION_SCRIPT_FALSE= +fi + + +# See if compiler supports prototypes. +{ $as_echo "$as_me:$LINENO: checking for function prototypes" >&5 +$as_echo_n "checking for function prototypes... " >&6; } +if test "${ijg_cv_have_prototypes+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int testfunction (int arg1, int * arg2); /* check prototypes */ +struct methods_struct { /* check method-pointer declarations */ + int (*error_exit) (char *msgtext); + int (*trace_message) (char *msgtext); + int (*another_method) (void); +}; +int testfunction (int arg1, int * arg2) /* check definitions */ +{ return arg2[arg1]; } +int test2function (void) /* check void arg list */ +{ return 0; } + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ijg_cv_have_prototypes=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ijg_cv_have_prototypes=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +{ $as_echo "$as_me:$LINENO: result: $ijg_cv_have_prototypes" >&5 +$as_echo "$ijg_cv_have_prototypes" >&6; } +if test $ijg_cv_have_prototypes = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_PROTOTYPES 1 +_ACEOF + +else + echo Your compiler does not seem to know about function prototypes. + echo Perhaps it needs a special switch to enable ANSI C mode. + echo If so, we recommend running configure like this: + echo " ./configure CC='cc -switch'" + echo where -switch is the proper switch. +fi + +# Check header files + + + +for ac_header in stddef.h stdlib.h locale.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +if test "${ac_cv_header_string_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for string.h" >&5 +$as_echo_n "checking for string.h... " >&6; } +if test "${ac_cv_header_string_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5 +$as_echo "$ac_cv_header_string_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking string.h usability" >&5 +$as_echo_n "checking string.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking string.h presence" >&5 +$as_echo_n "checking string.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: string.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: string.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: string.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: string.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: string.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: string.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: string.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: string.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: string.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: string.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: string.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: string.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: string.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: string.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for string.h" >&5 +$as_echo_n "checking for string.h... " >&6; } +if test "${ac_cv_header_string_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_string_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5 +$as_echo "$ac_cv_header_string_h" >&6; } + +fi +if test "x$ac_cv_header_string_h" = x""yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define NEED_BSD_STRINGS 1 +_ACEOF + +fi + + + +# See whether type size_t is defined in any ANSI-standard places; +# if not, perhaps it is defined in . +{ $as_echo "$as_me:$LINENO: checking for size_t" >&5 +$as_echo_n "checking for size_t... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#ifdef HAVE_STDDEF_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#include +#ifdef NEED_BSD_STRINGS +#include +#else +#include +#endif +typedef size_t my_size_t; + +int +main () +{ + my_size_t foovar; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ijg_size_t_ok=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ijg_size_t_ok="not ANSI, perhaps it is in sys/types.h" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ijg_size_t_ok" >&5 +$as_echo "$ijg_size_t_ok" >&6; } +if test "$ijg_size_t_ok" != yes; then +if test "${ac_cv_header_sys_types_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for sys/types.h" >&5 +$as_echo_n "checking for sys/types.h... " >&6; } +if test "${ac_cv_header_sys_types_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5 +$as_echo "$ac_cv_header_sys_types_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking sys/types.h usability" >&5 +$as_echo_n "checking sys/types.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking sys/types.h presence" >&5 +$as_echo_n "checking sys/types.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: sys/types.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: sys/types.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: sys/types.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: sys/types.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: sys/types.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: sys/types.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/types.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: sys/types.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for sys/types.h" >&5 +$as_echo_n "checking for sys/types.h... " >&6; } +if test "${ac_cv_header_sys_types_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_sys_types_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5 +$as_echo "$ac_cv_header_sys_types_h" >&6; } + +fi +if test "x$ac_cv_header_sys_types_h" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define NEED_SYS_TYPES_H 1 +_ACEOF + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "size_t" >/dev/null 2>&1; then + ijg_size_t_ok="size_t is in sys/types.h" +else + ijg_size_t_ok=no +fi +rm -f conftest* + +else + ijg_size_t_ok=no +fi + + +{ $as_echo "$as_me:$LINENO: result: $ijg_size_t_ok" >&5 +$as_echo "$ijg_size_t_ok" >&6; } +if test "$ijg_size_t_ok" = no; then + echo Type size_t is not defined in any of the usual places. + echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. +fi +fi + +# Check compiler characteristics +{ $as_echo "$as_me:$LINENO: checking for type unsigned char" >&5 +$as_echo_n "checking for type unsigned char... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + unsigned char un_char; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define HAVE_UNSIGNED_CHAR 1 +_ACEOF + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: checking for type unsigned short" >&5 +$as_echo_n "checking for type unsigned short... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + unsigned short un_short; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define HAVE_UNSIGNED_SHORT 1 +_ACEOF + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: checking for type void" >&5 +$as_echo_n "checking for type void... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Caution: a C++ compiler will insist on valid prototypes */ +typedef void * void_ptr; /* check void * */ +#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ +typedef void (*void_func) (int a, int b); +#else +typedef void (*void_func) (); +#endif + +#ifdef HAVE_PROTOTYPES /* check void function result */ +void test3function (void_ptr arg1, void_func arg2) +#else +void test3function (arg1, arg2) + void_ptr arg1; + void_func arg2; +#endif +{ + char * locptr = (char *) arg1; /* check casting to and from void * */ + arg1 = (void *) locptr; + (*arg2) (1, 2); /* check call of fcn returning void */ +} + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define void char +_ACEOF + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if test "${ac_cv_c_const+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const /**/ +_ACEOF + +fi + + +# Check for non-broken inline under various spellings +{ $as_echo "$as_me:$LINENO: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +ijg_cv_inline="" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +} __inline__ int foo() { return 0; } +int bar() { return foo(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ijg_cv_inline="__inline__" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +} __inline int foo() { return 0; } +int bar() { return foo(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ijg_cv_inline="__inline" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +} inline int foo() { return 0; } +int bar() { return foo(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ijg_cv_inline="inline" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ijg_cv_inline" >&5 +$as_echo "$ijg_cv_inline" >&6; } + +cat >>confdefs.h <<_ACEOF +#define INLINE $ijg_cv_inline +_ACEOF + + +# We cannot check for bogus warnings, but at least we can check for errors +{ $as_echo "$as_me:$LINENO: checking for broken incomplete types" >&5 +$as_echo_n "checking for broken incomplete types... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + typedef struct undefined_structure * undef_struct_ptr; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: broken" >&5 +$as_echo "broken" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define INCOMPLETE_TYPES_BROKEN 1 +_ACEOF + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +# Test whether global names are unique to at least 15 chars +{ $as_echo "$as_me:$LINENO: checking for short external names" >&5 +$as_echo_n "checking for short external names... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int possibly_duplicate_function () { return 0; } +int possibly_dupli_function () { return 1; } + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: short" >&5 +$as_echo "short" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define NEED_SHORT_EXTERNAL_NAMES 1 +_ACEOF + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +# Run-time checks +{ $as_echo "$as_me:$LINENO: checking to see if char is signed" >&5 +$as_echo_n "checking to see if char is signed... " >&6; } +if test "$cross_compiling" = yes; then + echo Assuming that char is signed on target machine. +echo If it is unsigned, this will be a little bit inefficient. + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#ifdef HAVE_PROTOTYPES +int is_char_signed (int arg) +#else +int is_char_signed (arg) + int arg; +#endif +{ + if (arg == 189) { /* expected result for unsigned char */ + return 0; /* type char is unsigned */ + } + else if (arg != -67) { /* expected result for signed char */ + printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + } + return 1; /* assume char is signed otherwise */ +} +char signed_char_check = (char) (-67); +int main() { + exit(is_char_signed((int) signed_char_check)); +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define CHAR_IS_UNSIGNED 1 +_ACEOF + +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:$LINENO: checking to see if right shift is signed" >&5 +$as_echo_n "checking to see if right shift is signed... " >&6; } +if test "$cross_compiling" = yes; then + { $as_echo "$as_me:$LINENO: result: Assuming that right shift is signed on target machine." >&5 +$as_echo "Assuming that right shift is signed on target machine." >&6; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#ifdef HAVE_PROTOTYPES +int is_shifting_signed (long arg) +#else +int is_shifting_signed (arg) + long arg; +#endif +/* See whether right-shift on a long is signed or not. */ +{ + long res = arg >> 4; + + if (res == -0x7F7E80CL) { /* expected result for signed shift */ + return 1; /* right shift is signed */ + } + /* see if unsigned-shift hack will fix it. */ + /* we can't just test exact value since it depends on width of long... */ + res |= (~0L) << (32-4); + if (res == -0x7F7E80CL) { /* expected result now? */ + return 0; /* right shift is unsigned */ + } + printf("Right shift isn't acting as I expect it to.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + return 0; /* try it with unsigned anyway */ +} +int main() { + exit(is_shifting_signed(-0x7F7E80B1L)); +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define RIGHT_SHIFT_IS_UNSIGNED 1 +_ACEOF + +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:$LINENO: checking to see if fopen accepts b spec" >&5 +$as_echo_n "checking to see if fopen accepts b spec... " >&6; } +if test "$cross_compiling" = yes; then + { $as_echo "$as_me:$LINENO: result: Assuming that it does." >&5 +$as_echo "Assuming that it does." >&6; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +int main() { + if (fopen("conftestdata", "wb") != NULL) + exit(0); + exit(1); +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define DONT_USE_B_MODE 1 +_ACEOF + +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +# Configure libtool +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:$LINENO: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6' +macro_revision='1.3012' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:8424: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:8427: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:8430: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:$LINENO: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:$LINENO: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:$LINENO: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 9621 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_cc_needs_belf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_ld_exported_symbols_list=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_ld_exported_symbols_list=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + + +for ac_header in dlfcn.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +# Set options + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:$LINENO: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:$LINENO: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10984: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:10988: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11323: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:11327: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11428: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11432: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11483: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11487: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + shlibpath_overrides_runpath=yes +fi + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 +$as_echo_n "checking for shl_load... " >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +$as_echo "$ac_cv_func_shl_load" >&6; } +if test "x$ac_cv_func_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 +$as_echo_n "checking for dlopen... " >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +$as_echo "$ac_cv_func_dlopen" >&6; } +if test "x$ac_cv_func_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_svld_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_dld_link=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 14283 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 14379 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +# Select memory manager depending on user input. +# If no "-enable-maxmem", use jmemnobs +MEMORYMGR='jmemnobs' +MAXMEM="no" +# Check whether --enable-maxmem was given. +if test "${enable_maxmem+set}" = set; then + enableval=$enable_maxmem; MAXMEM="$enableval" +fi + +if test "x$MAXMEM" = xyes; then + MAXMEM=1 +fi +if test "x$MAXMEM" != xno; then + if test -n "`echo $MAXMEM | sed 's/[0-9]//g'`"; then + { { $as_echo "$as_me:$LINENO: error: non-numeric argument to --enable-maxmem" >&5 +$as_echo "$as_me: error: non-numeric argument to --enable-maxmem" >&2;} + { (exit 1); exit 1; }; } + fi + DEFAULTMAXMEM=`expr $MAXMEM \* 1048576` + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_MAX_MEM ${DEFAULTMAXMEM} +_ACEOF + +{ $as_echo "$as_me:$LINENO: checking for 'tmpfile()'" >&5 +$as_echo_n "checking for 'tmpfile()'... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ + FILE * tfile = tmpfile(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +MEMORYMGR='jmemansi' +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +MEMORYMGR='jmemname' + +# Test for the need to remove temporary files using a signal handler (for cjpeg/djpeg) + +cat >>confdefs.h <<\_ACEOF +#define NEED_SIGNAL_CATCHER 1 +_ACEOF + +{ $as_echo "$as_me:$LINENO: checking for 'mktemp()'" >&5 +$as_echo_n "checking for 'mktemp()'... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + char fname[80]; mktemp(fname); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define NO_MKTEMP 1 +_ACEOF + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi + + +# Extract the library version ID from jpeglib.h. +{ $as_echo "$as_me:$LINENO: checking libjpeg version number" >&5 +$as_echo_n "checking libjpeg version number... " >&6; } +JPEG_LIB_VERSION=`sed -e '/^#define JPEG_LIB_VERSION/!d' -e 's/^[^0-9]*\([0-9][0-9]*\).*$/\1/' $srcdir/jpeglib.h` +JPEG_LIB_VERSION="`expr $JPEG_LIB_VERSION / 10`:`expr $JPEG_LIB_VERSION % 10`" +{ $as_echo "$as_me:$LINENO: result: $JPEG_LIB_VERSION" >&5 +$as_echo "$JPEG_LIB_VERSION" >&6; } + + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by libjpeg $as_me 7.0, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +libjpeg config.status 7.0 +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "jconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS jconfig.h:jconfig.cfg" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Assembler program. +AS=$AS + +# DLL creation program. +DLLTOOL=$DLLTOOL + +# Object dumper program. +OBJDUMP=$OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/3rdparty/openctm/tools/jpeg/configure.ac b/3rdparty/openctm/tools/jpeg/configure.ac new file mode 100644 index 000000000..ff96fe107 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/configure.ac @@ -0,0 +1,317 @@ +# IJG auto-configuration source file. +# Process this file with autoconf to produce a configure script. + +# +# Configure script for IJG libjpeg +# + +AC_INIT([libjpeg], [7.0]) + +# Directory where autotools helper scripts lives. +AC_CONFIG_AUX_DIR([.]) + +# Generate configuration headers. +AC_CONFIG_HEADERS([jconfig.h:jconfig.cfg]) + +# Hack: disable autoheader so that it doesn't overwrite our cfg template. +AUTOHEADER="echo autoheader ignored" + +# Check system type +AC_CANONICAL_TARGET + +# Initialize Automake +# Don't require all the GNU mandated files +AM_INIT_AUTOMAKE([-Wall -Werror ansi2knr no-dist foreign]) + +# Make --enable-silent-rules the default. +# To get verbose build output you may configure +# with --disable-silent-rules or use "make V=1". +AM_SILENT_RULES([yes]) + +# This is required when using the de-ANSI-fication feature. +AM_C_PROTOTYPES + +# Add configure option --enable-maintainer-mode which enables +# dependency checking and generation useful to package maintainers. +# This is made an option to avoid confusing end users. +AM_MAINTAINER_MODE + +# Check for programs +AC_PROG_CC +AC_PROG_CC_STDC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_LN_S + +# Check if LD supports linker scripts, +# and define automake conditional HAVE_LD_VERSION_SCRIPT if so. +AC_ARG_ENABLE([ld-version-script], + AS_HELP_STRING([--enable-ld-version-script], + [enable linker version script (default is enabled when possible)]), + [have_ld_version_script=$enableval], []) +if test -z "$have_ld_version_script"; then + AC_MSG_CHECKING([if LD -Wl,--version-script works]) + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" + cat > conftest.map < rather than standard .])) + +# See whether type size_t is defined in any ANSI-standard places; +# if not, perhaps it is defined in . +AC_MSG_CHECKING(for size_t) +AC_TRY_COMPILE([ +#ifdef HAVE_STDDEF_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#include +#ifdef NEED_BSD_STRINGS +#include +#else +#include +#endif +typedef size_t my_size_t; +], [ my_size_t foovar; ], ijg_size_t_ok=yes, +[ijg_size_t_ok="not ANSI, perhaps it is in sys/types.h"]) +AC_MSG_RESULT($ijg_size_t_ok) +if test "$ijg_size_t_ok" != yes; then +AC_CHECK_HEADER(sys/types.h, [AC_DEFINE([NEED_SYS_TYPES_H],[1],[Need to include in order to obtain size_t.]) +AC_EGREP_CPP(size_t, [#include ], +[ijg_size_t_ok="size_t is in sys/types.h"], ijg_size_t_ok=no)], +ijg_size_t_ok=no) +AC_MSG_RESULT($ijg_size_t_ok) +if test "$ijg_size_t_ok" = no; then + echo Type size_t is not defined in any of the usual places. + echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. +fi +fi + +# Check compiler characteristics +AC_MSG_CHECKING(for type unsigned char) +AC_TRY_COMPILE(, [ unsigned char un_char; ], +[AC_MSG_RESULT(yes) +AC_DEFINE([HAVE_UNSIGNED_CHAR],[1],[Compiler supports 'unsigned char'.])], AC_MSG_RESULT(no)) +dnl +AC_MSG_CHECKING(for type unsigned short) +AC_TRY_COMPILE(, [ unsigned short un_short; ], +[AC_MSG_RESULT(yes) +AC_DEFINE([HAVE_UNSIGNED_SHORT],[1],[Compiler supports 'unsigned short'.])], AC_MSG_RESULT(no)) +dnl +AC_MSG_CHECKING(for type void) +AC_TRY_COMPILE([ +/* Caution: a C++ compiler will insist on valid prototypes */ +typedef void * void_ptr; /* check void * */ +#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ +typedef void (*void_func) (int a, int b); +#else +typedef void (*void_func) (); +#endif + +#ifdef HAVE_PROTOTYPES /* check void function result */ +void test3function (void_ptr arg1, void_func arg2) +#else +void test3function (arg1, arg2) + void_ptr arg1; + void_func arg2; +#endif +{ + char * locptr = (char *) arg1; /* check casting to and from void * */ + arg1 = (void *) locptr; + (*arg2) (1, 2); /* check call of fcn returning void */ +} +], [ ], AC_MSG_RESULT(yes), [AC_MSG_RESULT(no) +AC_DEFINE([void],[char],[Define 'void' as 'char' for archaic compilers that don't understand it.])]) +AC_C_CONST + +# Check for non-broken inline under various spellings +AC_MSG_CHECKING(for inline) +ijg_cv_inline="" +AC_TRY_COMPILE(, [} __inline__ int foo() { return 0; } +int bar() { return foo();], ijg_cv_inline="__inline__", +AC_TRY_COMPILE(, [} __inline int foo() { return 0; } +int bar() { return foo();], ijg_cv_inline="__inline", +AC_TRY_COMPILE(, [} inline int foo() { return 0; } +int bar() { return foo();], ijg_cv_inline="inline"))) +AC_MSG_RESULT($ijg_cv_inline) +AC_DEFINE_UNQUOTED([INLINE],[$ijg_cv_inline],[How to obtain function inlining.]) + +# We cannot check for bogus warnings, but at least we can check for errors +AC_MSG_CHECKING(for broken incomplete types) +AC_TRY_COMPILE([ typedef struct undefined_structure * undef_struct_ptr; ], , +AC_MSG_RESULT(ok), +[AC_MSG_RESULT(broken) +AC_DEFINE([INCOMPLETE_TYPES_BROKEN],[1],[Compiler does not support pointers to unspecified structures.])]) + +# Test whether global names are unique to at least 15 chars +AC_MSG_CHECKING(for short external names) +AC_TRY_LINK([ +int possibly_duplicate_function () { return 0; } +int possibly_dupli_function () { return 1; } +], [ ], AC_MSG_RESULT(ok), [AC_MSG_RESULT(short) +AC_DEFINE([NEED_SHORT_EXTERNAL_NAMES],[1],[Linker requires that global names be unique in first 15 characters.])]) + +# Run-time checks +AC_MSG_CHECKING(to see if char is signed) +AC_TRY_RUN([ +#ifdef HAVE_PROTOTYPES +int is_char_signed (int arg) +#else +int is_char_signed (arg) + int arg; +#endif +{ + if (arg == 189) { /* expected result for unsigned char */ + return 0; /* type char is unsigned */ + } + else if (arg != -67) { /* expected result for signed char */ + printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + } + return 1; /* assume char is signed otherwise */ +} +char signed_char_check = (char) (-67); +int main() { + exit(is_char_signed((int) signed_char_check)); +}], [AC_MSG_RESULT(no) +AC_DEFINE([CHAR_IS_UNSIGNED],[1],[Characters are unsigned])], AC_MSG_RESULT(yes), +[echo Assuming that char is signed on target machine. +echo If it is unsigned, this will be a little bit inefficient. +]) +dnl +AC_MSG_CHECKING(to see if right shift is signed) +AC_TRY_RUN([ +#ifdef HAVE_PROTOTYPES +int is_shifting_signed (long arg) +#else +int is_shifting_signed (arg) + long arg; +#endif +/* See whether right-shift on a long is signed or not. */ +{ + long res = arg >> 4; + + if (res == -0x7F7E80CL) { /* expected result for signed shift */ + return 1; /* right shift is signed */ + } + /* see if unsigned-shift hack will fix it. */ + /* we can't just test exact value since it depends on width of long... */ + res |= (~0L) << (32-4); + if (res == -0x7F7E80CL) { /* expected result now? */ + return 0; /* right shift is unsigned */ + } + printf("Right shift isn't acting as I expect it to.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + return 0; /* try it with unsigned anyway */ +} +int main() { + exit(is_shifting_signed(-0x7F7E80B1L)); +}], [AC_MSG_RESULT(no) +AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED],[1],[Broken compiler shifts signed values as an unsigned shift.])], AC_MSG_RESULT(yes), +AC_MSG_RESULT(Assuming that right shift is signed on target machine.)) +dnl +AC_MSG_CHECKING(to see if fopen accepts b spec) +AC_TRY_RUN([ +#include +int main() { + if (fopen("conftestdata", "wb") != NULL) + exit(0); + exit(1); +}], AC_MSG_RESULT(yes), [AC_MSG_RESULT(no) +AC_DEFINE([DONT_USE_B_MODE],[1],[Don't open files in binary mode.])], +AC_MSG_RESULT(Assuming that it does.)) + +# Configure libtool +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL + +# Select memory manager depending on user input. +# If no "-enable-maxmem", use jmemnobs +MEMORYMGR='jmemnobs' +MAXMEM="no" +AC_ARG_ENABLE(maxmem, +[ --enable-maxmem[=N] enable use of temp files, set max mem usage to N MB], +MAXMEM="$enableval") +dnl [# support --with-maxmem for backwards compatibility with IJG V5.] +dnl AC_ARG_WITH(maxmem, , MAXMEM="$withval") +if test "x$MAXMEM" = xyes; then + MAXMEM=1 +fi +if test "x$MAXMEM" != xno; then + if test -n "`echo $MAXMEM | sed 's/[[0-9]]//g'`"; then + AC_MSG_ERROR(non-numeric argument to --enable-maxmem) + fi + DEFAULTMAXMEM=`expr $MAXMEM \* 1048576` +AC_DEFINE_UNQUOTED([DEFAULT_MAX_MEM], [${DEFAULTMAXMEM}], [Maximum data space library will allocate.]) +AC_MSG_CHECKING([for 'tmpfile()']) +AC_TRY_LINK([#include ], [ FILE * tfile = tmpfile(); ], +[AC_MSG_RESULT(yes) +MEMORYMGR='jmemansi'], +[AC_MSG_RESULT(no) +dnl if tmpfile is not present, must use jmemname. +MEMORYMGR='jmemname' + +# Test for the need to remove temporary files using a signal handler (for cjpeg/djpeg) +AC_DEFINE([NEED_SIGNAL_CATCHER],[1],[Need signal handler to clean up temporary files.]) +AC_MSG_CHECKING([for 'mktemp()']) +AC_TRY_LINK(, [ char fname[80]; mktemp(fname); ], AC_MSG_RESULT(yes), +[AC_MSG_RESULT(no) +AC_DEFINE([NO_MKTEMP],[1],[The mktemp() function is not available.])])]) +fi +AC_SUBST(MEMORYMGR) + +# Extract the library version ID from jpeglib.h. +AC_MSG_CHECKING([libjpeg version number]) +[JPEG_LIB_VERSION=`sed -e '/^#define JPEG_LIB_VERSION/!d' -e 's/^[^0-9]*\([0-9][0-9]*\).*$/\1/' $srcdir/jpeglib.h`] +[JPEG_LIB_VERSION="`expr $JPEG_LIB_VERSION / 10`:`expr $JPEG_LIB_VERSION % 10`"] +AC_MSG_RESULT([$JPEG_LIB_VERSION]) +AC_SUBST([JPEG_LIB_VERSION]) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/3rdparty/openctm/tools/jpeg/depcomp b/3rdparty/openctm/tools/jpeg/depcomp new file mode 100644 index 000000000..2484462d0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/3rdparty/openctm/tools/jpeg/djpeg.1 b/3rdparty/openctm/tools/jpeg/djpeg.1 new file mode 100644 index 000000000..e07256029 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/djpeg.1 @@ -0,0 +1,251 @@ +.TH DJPEG 1 "28 March 2009" +.SH NAME +djpeg \- decompress a JPEG file to an image file +.SH SYNOPSIS +.B djpeg +[ +.I options +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B djpeg +decompresses the named JPEG file, or the standard input if no file is named, +and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP, +GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected. +(RLE is supported only if the URT library is available.) +.SH OPTIONS +All switch names may be abbreviated; for example, +.B \-grayscale +may be written +.B \-gray +or +.BR \-gr . +Most of the "basic" switches can be abbreviated to as little as one letter. +Upper and lower case are equivalent (thus +.B \-BMP +is the same as +.BR \-bmp ). +British spellings are also accepted (e.g., +.BR \-greyscale ), +though for brevity these are not mentioned below. +.PP +The basic switches are: +.TP +.BI \-colors " N" +Reduce image to at most N colors. This reduces the number of colors used in +the output image, so that it can be displayed on a colormapped display or +stored in a colormapped file format. For example, if you have an 8-bit +display, you'd need to reduce to 256 or fewer colors. +.TP +.BI \-quantize " N" +Same as +.BR \-colors . +.B \-colors +is the recommended name, +.B \-quantize +is provided only for backwards compatibility. +.TP +.B \-fast +Select recommended processing options for fast, low quality output. (The +default options are chosen for highest quality output.) Currently, this is +equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR. +.TP +.B \-grayscale +Force gray-scale output even if JPEG file is color. Useful for viewing on +monochrome displays; also, +.B djpeg +runs noticeably faster in this mode. +.TP +.BI \-scale " M/N" +Scale the output image by a factor M/N. Currently supported scale factors are +M/8 with all M from 1 to 16. If the /N part is omitted, then M specifies the +DCT scaled size to be applied on the given input, which is currently +equivalent to M/8 scaling, since the source DCT size is currently always 8. +Scaling is handy if the image is larger than your screen; also, +.B djpeg +runs much faster when scaling down the output. +.TP +.B \-bmp +Select BMP output format (Windows flavor). 8-bit colormapped format is +emitted if +.B \-colors +or +.B \-grayscale +is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color +format is emitted. +.TP +.B \-gif +Select GIF output format. Since GIF does not support more than 256 colors, +.B \-colors 256 +is assumed (unless you specify a smaller number of colors). +.TP +.B \-os2 +Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is +emitted if +.B \-colors +or +.B \-grayscale +is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color +format is emitted. +.TP +.B \-pnm +Select PBMPLUS (PPM/PGM) output format (this is the default format). +PGM is emitted if the JPEG file is gray-scale or if +.B \-grayscale +is specified; otherwise PPM is emitted. +.TP +.B \-rle +Select RLE output format. (Requires URT library.) +.TP +.B \-targa +Select Targa output format. Gray-scale format is emitted if the JPEG file is +gray-scale or if +.B \-grayscale +is specified; otherwise, colormapped format is emitted if +.B \-colors +is specified; otherwise, 24-bit full-color format is emitted. +.PP +Switches for advanced users: +.TP +.B \-dct int +Use integer DCT method (default). +.TP +.B \-dct fast +Use fast integer DCT (less accurate). +.TP +.B \-dct float +Use floating-point DCT method. +The float method is very slightly more accurate than the int method, but is +much slower unless your machine has very fast floating-point hardware. Also +note that results of the floating-point method may vary slightly across +machines, while the integer methods should give the same results everywhere. +The fast integer method is much less accurate than the other two. +.TP +.B \-dither fs +Use Floyd-Steinberg dithering in color quantization. +.TP +.B \-dither ordered +Use ordered dithering in color quantization. +.TP +.B \-dither none +Do not use dithering in color quantization. +By default, Floyd-Steinberg dithering is applied when quantizing colors; this +is slow but usually produces the best results. Ordered dither is a compromise +between speed and quality; no dithering is fast but usually looks awful. Note +that these switches have no effect unless color quantization is being done. +Ordered dither is only available in +.B \-onepass +mode. +.TP +.BI \-map " file" +Quantize to the colors used in the specified image file. This is useful for +producing multiple files with identical color maps, or for forcing a +predefined set of colors to be used. The +.I file +must be a GIF or PPM file. This option overrides +.B \-colors +and +.BR \-onepass . +.TP +.B \-nosmooth +Don't use high-quality upsampling. +.TP +.B \-onepass +Use one-pass instead of two-pass color quantization. The one-pass method is +faster and needs less memory, but it produces a lower-quality image. +.B \-onepass +is ignored unless you also say +.B \-colors +.IR N . +Also, the one-pass method is always used for gray-scale output (the two-pass +method is no improvement then). +.TP +.BI \-maxmemory " N" +Set limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if "M" is attached to the +number. For example, +.B \-max 4m +selects 4000000 bytes. If more space is needed, temporary files will be used. +.TP +.BI \-outfile " name" +Send output image to the named file, not to standard output. +.TP +.B \-verbose +Enable debug printout. More +.BR \-v 's +give more output. Also, version information is printed at startup. +.TP +.B \-debug +Same as +.BR \-verbose . +.SH EXAMPLES +.LP +This example decompresses the JPEG file foo.jpg, quantizes it to +256 colors, and saves the output in 8-bit BMP format in foo.bmp: +.IP +.B djpeg \-colors 256 \-bmp +.I foo.jpg +.B > +.I foo.bmp +.SH HINTS +To get a quick preview of an image, use the +.B \-grayscale +and/or +.B \-scale +switches. +.B \-grayscale \-scale 1/8 +is the fastest case. +.PP +Several options are available that trade off image quality to gain speed. +.B \-fast +turns on the recommended settings. +.PP +.B \-dct fast +and/or +.B \-nosmooth +gain speed at a small sacrifice in quality. +When producing a color-quantized image, +.B \-onepass \-dither ordered +is fast but much lower quality than the default behavior. +.B \-dither none +may give acceptable results in two-pass mode, but is seldom tolerable in +one-pass mode. +.PP +If you are fortunate enough to have very fast floating point hardware, +\fB\-dct float\fR may be even faster than \fB\-dct fast\fR. But on most +machines \fB\-dct float\fR is slower than \fB\-dct int\fR; in this case it is +not worth using, because its theoretical accuracy advantage is too small to be +significant in practice. +.SH ENVIRONMENT +.TP +.B JPEGMEM +If this environment variable is set, its value is the default memory limit. +The value is specified as described for the +.B \-maxmemory +switch. +.B JPEGMEM +overrides the default value specified when the program was compiled, and +itself is overridden by an explicit +.BR \-maxmemory . +.SH SEE ALSO +.BR cjpeg (1), +.BR jpegtran (1), +.BR rdjpgcom (1), +.BR wrjpgcom (1) +.br +.BR ppm (5), +.BR pgm (5) +.br +Wallace, Gregory K. "The JPEG Still Picture Compression Standard", +Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. +.SH AUTHOR +Independent JPEG Group +.SH BUGS +To avoid the Unisys LZW patent, +.B djpeg +produces uncompressed GIF files. These are larger than they should be, but +are readable by standard GIF decoders. diff --git a/3rdparty/openctm/tools/jpeg/djpeg.c b/3rdparty/openctm/tools/jpeg/djpeg.c new file mode 100644 index 000000000..363c628cb --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/djpeg.c @@ -0,0 +1,617 @@ +/* + * djpeg.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a command-line user interface for the JPEG decompressor. + * It should work on any system with Unix- or MS-DOS-style command lines. + * + * Two different command line styles are permitted, depending on the + * compile-time switch TWO_FILE_COMMANDLINE: + * djpeg [options] inputfile outputfile + * djpeg [options] [inputfile] + * In the second style, output is always to standard output, which you'd + * normally redirect to a file or pipe to some other program. Input is + * either from a named file or from standard input (typically redirected). + * The second style is convenient on Unix but is unhelpful on systems that + * don't support pipes. Also, you MUST use the first style if your system + * doesn't do binary I/O to stdin/stdout. + * To simplify script writing, the "-outfile" switch is provided. The syntax + * djpeg [options] -outfile outputfile inputfile + * works regardless of which command line style is used. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include "jversion.h" /* for version message */ + +#include /* to declare isprint() */ + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + + +/* Create the add-on message string table. */ + +#define JMESSAGE(code,string) string , + +static const char * const cdjpeg_message_table[] = { +#include "cderror.h" + NULL +}; + + +/* + * This list defines the known output image formats + * (not all of which need be supported by a given version). + * You can change the default output format by defining DEFAULT_FMT; + * indeed, you had better do so if you undefine PPM_SUPPORTED. + */ + +typedef enum { + FMT_BMP, /* BMP format (Windows flavor) */ + FMT_GIF, /* GIF format */ + FMT_OS2, /* BMP format (OS/2 flavor) */ + FMT_PPM, /* PPM/PGM (PBMPLUS formats) */ + FMT_RLE, /* RLE format */ + FMT_TARGA, /* Targa format */ + FMT_TIFF /* TIFF format */ +} IMAGE_FORMATS; + +#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */ +#define DEFAULT_FMT FMT_PPM +#endif + +static IMAGE_FORMATS requested_fmt; + + +/* + * Argument-parsing code. + * The switch parser is designed to be useful with DOS-style command line + * syntax, ie, intermixed switches and file names, where only the switches + * to the left of a given file name affect processing of that file. + * The main program in this file doesn't actually use this capability... + */ + + +static const char * progname; /* program name for error messages */ +static char * outfilename; /* for -outfile switch */ + + +LOCAL(void) +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -colors N Reduce image to no more than N colors\n"); + fprintf(stderr, " -fast Fast, low-quality processing\n"); + fprintf(stderr, " -grayscale Force grayscale output\n"); +#ifdef IDCT_SCALING_SUPPORTED + fprintf(stderr, " -scale M/N Scale output image by fraction M/N, eg, 1/8\n"); +#endif +#ifdef BMP_SUPPORTED + fprintf(stderr, " -bmp Select BMP output format (Windows style)%s\n", + (DEFAULT_FMT == FMT_BMP ? " (default)" : "")); +#endif +#ifdef GIF_SUPPORTED + fprintf(stderr, " -gif Select GIF output format%s\n", + (DEFAULT_FMT == FMT_GIF ? " (default)" : "")); +#endif +#ifdef BMP_SUPPORTED + fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n", + (DEFAULT_FMT == FMT_OS2 ? " (default)" : "")); +#endif +#ifdef PPM_SUPPORTED + fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n", + (DEFAULT_FMT == FMT_PPM ? " (default)" : "")); +#endif +#ifdef RLE_SUPPORTED + fprintf(stderr, " -rle Select Utah RLE output format%s\n", + (DEFAULT_FMT == FMT_RLE ? " (default)" : "")); +#endif +#ifdef TARGA_SUPPORTED + fprintf(stderr, " -targa Select Targa output format%s\n", + (DEFAULT_FMT == FMT_TARGA ? " (default)" : "")); +#endif + fprintf(stderr, "Switches for advanced users:\n"); +#ifdef DCT_ISLOW_SUPPORTED + fprintf(stderr, " -dct int Use integer DCT method%s\n", + (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); +#endif +#ifdef DCT_IFAST_SUPPORTED + fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", + (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); +#endif +#ifdef DCT_FLOAT_SUPPORTED + fprintf(stderr, " -dct float Use floating-point DCT method%s\n", + (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); +#endif + fprintf(stderr, " -dither fs Use F-S dithering (default)\n"); + fprintf(stderr, " -dither none Don't use dithering in quantization\n"); + fprintf(stderr, " -dither ordered Use ordered dither (medium speed, quality)\n"); +#ifdef QUANT_2PASS_SUPPORTED + fprintf(stderr, " -map FILE Map to colors used in named image file\n"); +#endif + fprintf(stderr, " -nosmooth Don't use high-quality upsampling\n"); +#ifdef QUANT_1PASS_SUPPORTED + fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n"); +#endif + fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); + fprintf(stderr, " -outfile name Specify name for output file\n"); + fprintf(stderr, " -verbose or -debug Emit debug output\n"); + exit(EXIT_FAILURE); +} + + +LOCAL(int) +parse_switches (j_decompress_ptr cinfo, int argc, char **argv, + int last_file_arg_seen, boolean for_real) +/* Parse optional switches. + * Returns argv[] index of first file-name argument (== argc if none). + * Any file names with indexes <= last_file_arg_seen are ignored; + * they have presumably been processed in a previous iteration. + * (Pass 0 for last_file_arg_seen on the first or only iteration.) + * for_real is FALSE on the first (dummy) pass; we may skip any expensive + * processing. + */ +{ + int argn; + char * arg; + + /* Set up default JPEG parameters. */ + requested_fmt = DEFAULT_FMT; /* set default output file format */ + outfilename = NULL; + cinfo->err->trace_level = 0; + + /* Scan command line options, adjust parameters */ + + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (*arg != '-') { + /* Not a switch, must be a file name argument */ + if (argn <= last_file_arg_seen) { + outfilename = NULL; /* -outfile applies to just one input file */ + continue; /* ignore this name if previously processed */ + } + break; /* else done parsing switches */ + } + arg++; /* advance past switch marker character */ + + if (keymatch(arg, "bmp", 1)) { + /* BMP output format. */ + requested_fmt = FMT_BMP; + + } else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) || + keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) { + /* Do color quantization. */ + int val; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d", &val) != 1) + usage(); + cinfo->desired_number_of_colors = val; + cinfo->quantize_colors = TRUE; + + } else if (keymatch(arg, "dct", 2)) { + /* Select IDCT algorithm. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "int", 1)) { + cinfo->dct_method = JDCT_ISLOW; + } else if (keymatch(argv[argn], "fast", 2)) { + cinfo->dct_method = JDCT_IFAST; + } else if (keymatch(argv[argn], "float", 2)) { + cinfo->dct_method = JDCT_FLOAT; + } else + usage(); + + } else if (keymatch(arg, "dither", 2)) { + /* Select dithering algorithm. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "fs", 2)) { + cinfo->dither_mode = JDITHER_FS; + } else if (keymatch(argv[argn], "none", 2)) { + cinfo->dither_mode = JDITHER_NONE; + } else if (keymatch(argv[argn], "ordered", 2)) { + cinfo->dither_mode = JDITHER_ORDERED; + } else + usage(); + + } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { + /* Enable debug printouts. */ + /* On first -d, print version identification */ + static boolean printed_version = FALSE; + + if (! printed_version) { + fprintf(stderr, "Independent JPEG Group's DJPEG, version %s\n%s\n", + JVERSION, JCOPYRIGHT); + printed_version = TRUE; + } + cinfo->err->trace_level++; + + } else if (keymatch(arg, "fast", 1)) { + /* Select recommended processing options for quick-and-dirty output. */ + cinfo->two_pass_quantize = FALSE; + cinfo->dither_mode = JDITHER_ORDERED; + if (! cinfo->quantize_colors) /* don't override an earlier -colors */ + cinfo->desired_number_of_colors = 216; + cinfo->dct_method = JDCT_FASTEST; + cinfo->do_fancy_upsampling = FALSE; + + } else if (keymatch(arg, "gif", 1)) { + /* GIF output format. */ + requested_fmt = FMT_GIF; + + } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { + /* Force monochrome output. */ + cinfo->out_color_space = JCS_GRAYSCALE; + + } else if (keymatch(arg, "map", 3)) { + /* Quantize to a color map taken from an input file. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (for_real) { /* too expensive to do twice! */ +#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ + FILE * mapfile; + + if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + read_color_map(cinfo, mapfile); + fclose(mapfile); + cinfo->quantize_colors = TRUE; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + + } else if (keymatch(arg, "maxmemory", 3)) { + /* Maximum memory in Kb (or Mb with 'm'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (ch == 'm' || ch == 'M') + lval *= 1000L; + cinfo->mem->max_memory_to_use = lval * 1000L; + + } else if (keymatch(arg, "nosmooth", 3)) { + /* Suppress fancy upsampling */ + cinfo->do_fancy_upsampling = FALSE; + + } else if (keymatch(arg, "onepass", 3)) { + /* Use fast one-pass quantization. */ + cinfo->two_pass_quantize = FALSE; + + } else if (keymatch(arg, "os2", 3)) { + /* BMP output format (OS/2 flavor). */ + requested_fmt = FMT_OS2; + + } else if (keymatch(arg, "outfile", 4)) { + /* Set output file name. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + outfilename = argv[argn]; /* save it away for later use */ + + } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) { + /* PPM/PGM output format. */ + requested_fmt = FMT_PPM; + + } else if (keymatch(arg, "rle", 1)) { + /* RLE output format. */ + requested_fmt = FMT_RLE; + + } else if (keymatch(arg, "scale", 1)) { + /* Scale the output image by a fraction M/N. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d/%d", + &cinfo->scale_num, &cinfo->scale_denom) < 1) + usage(); + + } else if (keymatch(arg, "targa", 1)) { + /* Targa output format. */ + requested_fmt = FMT_TARGA; + + } else { + usage(); /* bogus switch */ + } + } + + return argn; /* return index of next arg (file name) */ +} + + +/* + * Marker processor for COM and interesting APPn markers. + * This replaces the library's built-in processor, which just skips the marker. + * We want to print out the marker as text, to the extent possible. + * Note this code relies on a non-suspending data source. + */ + +LOCAL(unsigned int) +jpeg_getc (j_decompress_ptr cinfo) +/* Read next byte */ +{ + struct jpeg_source_mgr * datasrc = cinfo->src; + + if (datasrc->bytes_in_buffer == 0) { + if (! (*datasrc->fill_input_buffer) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + } + datasrc->bytes_in_buffer--; + return GETJOCTET(*datasrc->next_input_byte++); +} + + +METHODDEF(boolean) +print_text_marker (j_decompress_ptr cinfo) +{ + boolean traceit = (cinfo->err->trace_level >= 1); + INT32 length; + unsigned int ch; + unsigned int lastch = 0; + + length = jpeg_getc(cinfo) << 8; + length += jpeg_getc(cinfo); + length -= 2; /* discount the length word itself */ + + if (traceit) { + if (cinfo->unread_marker == JPEG_COM) + fprintf(stderr, "Comment, length %ld:\n", (long) length); + else /* assume it is an APPn otherwise */ + fprintf(stderr, "APP%d, length %ld:\n", + cinfo->unread_marker - JPEG_APP0, (long) length); + } + + while (--length >= 0) { + ch = jpeg_getc(cinfo); + if (traceit) { + /* Emit the character in a readable form. + * Nonprintables are converted to \nnn form, + * while \ is converted to \\. + * Newlines in CR, CR/LF, or LF form will be printed as one newline. + */ + if (ch == '\r') { + fprintf(stderr, "\n"); + } else if (ch == '\n') { + if (lastch != '\r') + fprintf(stderr, "\n"); + } else if (ch == '\\') { + fprintf(stderr, "\\\\"); + } else if (isprint(ch)) { + putc(ch, stderr); + } else { + fprintf(stderr, "\\%03o", ch); + } + lastch = ch; + } + } + + if (traceit) + fprintf(stderr, "\n"); + + return TRUE; +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; +#ifdef PROGRESS_REPORT + struct cdjpeg_progress_mgr progress; +#endif + int file_index; + djpeg_dest_ptr dest_mgr = NULL; + FILE * input_file; + FILE * output_file; + JDIMENSION num_scanlines; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "djpeg"; /* in case C library doesn't provide it */ + + /* Initialize the JPEG decompression object with default error handling. */ + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_decompress(&cinfo); + /* Add some application-specific error messages (from cderror.h) */ + jerr.addon_message_table = cdjpeg_message_table; + jerr.first_addon_message = JMSG_FIRSTADDONCODE; + jerr.last_addon_message = JMSG_LASTADDONCODE; + + /* Insert custom marker processor for COM and APP12. + * APP12 is used by some digital camera makers for textual info, + * so we provide the ability to display it as text. + * If you like, additional APPn marker types can be selected for display, + * but don't try to override APP0 or APP14 this way (see libjpeg.doc). + */ + jpeg_set_marker_processor(&cinfo, JPEG_COM, print_text_marker); + jpeg_set_marker_processor(&cinfo, JPEG_APP0+12, print_text_marker); + + /* Now safe to enable signal catcher. */ +#ifdef NEED_SIGNAL_CATCHER + enable_signal_catcher((j_common_ptr) &cinfo); +#endif + + /* Scan command line to find file names. */ + /* It is convenient to use just one switch-parsing routine, but the switch + * values read here are ignored; we will rescan the switches after opening + * the input file. + * (Exception: tracing level set here controls verbosity for COM markers + * found during jpeg_read_header...) + */ + + file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); + +#ifdef TWO_FILE_COMMANDLINE + /* Must have either -outfile switch or explicit output file name */ + if (outfilename == NULL) { + if (file_index != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + outfilename = argv[file_index+1]; + } else { + if (file_index != argc-1) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + } +#else + /* Unix style: expect zero or one file name */ + if (file_index < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } +#endif /* TWO_FILE_COMMANDLINE */ + + /* Open the input file. */ + if (file_index < argc) { + if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ + input_file = read_stdin(); + } + + /* Open the output file. */ + if (outfilename != NULL) { + if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, outfilename); + exit(EXIT_FAILURE); + } + } else { + /* default output file is stdout */ + output_file = write_stdout(); + } + +#ifdef PROGRESS_REPORT + start_progress_monitor((j_common_ptr) &cinfo, &progress); +#endif + + /* Specify data source for decompression */ + jpeg_stdio_src(&cinfo, input_file); + + /* Read file header, set default decompression parameters */ + (void) jpeg_read_header(&cinfo, TRUE); + + /* Adjust default decompression parameters by re-parsing the options */ + file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); + + /* Initialize the output module now to let it override any crucial + * option settings (for instance, GIF wants to force color quantization). + */ + switch (requested_fmt) { +#ifdef BMP_SUPPORTED + case FMT_BMP: + dest_mgr = jinit_write_bmp(&cinfo, FALSE); + break; + case FMT_OS2: + dest_mgr = jinit_write_bmp(&cinfo, TRUE); + break; +#endif +#ifdef GIF_SUPPORTED + case FMT_GIF: + dest_mgr = jinit_write_gif(&cinfo); + break; +#endif +#ifdef PPM_SUPPORTED + case FMT_PPM: + dest_mgr = jinit_write_ppm(&cinfo); + break; +#endif +#ifdef RLE_SUPPORTED + case FMT_RLE: + dest_mgr = jinit_write_rle(&cinfo); + break; +#endif +#ifdef TARGA_SUPPORTED + case FMT_TARGA: + dest_mgr = jinit_write_targa(&cinfo); + break; +#endif + default: + ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT); + break; + } + dest_mgr->output_file = output_file; + + /* Start decompressor */ + (void) jpeg_start_decompress(&cinfo); + + /* Write output file header */ + (*dest_mgr->start_output) (&cinfo, dest_mgr); + + /* Process data */ + while (cinfo.output_scanline < cinfo.output_height) { + num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer, + dest_mgr->buffer_height); + (*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines); + } + +#ifdef PROGRESS_REPORT + /* Hack: count final pass as done in case finish_output does an extra pass. + * The library won't have updated completed_passes. + */ + progress.pub.completed_passes = progress.pub.total_passes; +#endif + + /* Finish decompression and release memory. + * I must do it in this order because output module has allocated memory + * of lifespan JPOOL_IMAGE; it needs to finish before releasing memory. + */ + (*dest_mgr->finish_output) (&cinfo, dest_mgr); + (void) jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + +#ifdef PROGRESS_REPORT + end_progress_monitor((j_common_ptr) &cinfo); +#endif + + /* All done. */ + exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/3rdparty/openctm/tools/jpeg/example.c b/3rdparty/openctm/tools/jpeg/example.c new file mode 100644 index 000000000..e21cf1212 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/example.c @@ -0,0 +1,433 @@ +/* + * example.c + * + * This file illustrates how to use the IJG code as a subroutine library + * to read or write JPEG image files. You should look at this code in + * conjunction with the documentation file libjpeg.txt. + * + * This code will not do anything useful as-is, but it may be helpful as a + * skeleton for constructing routines that call the JPEG library. + * + * We present these routines in the same coding style used in the JPEG code + * (ANSI function definitions, etc); but you are of course free to code your + * routines in a different style if you prefer. + */ + +#include + +/* + * Include file for users of JPEG library. + * You will need to have included system headers that define at least + * the typedefs FILE and size_t before you can include jpeglib.h. + * (stdio.h is sufficient on ANSI-conforming systems.) + * You may also wish to include "jerror.h". + */ + +#include "jpeglib.h" + +/* + * is used for the optional error recovery mechanism shown in + * the second part of the example. + */ + +#include + + + +/******************** JPEG COMPRESSION SAMPLE INTERFACE *******************/ + +/* This half of the example shows how to feed data into the JPEG compressor. + * We present a minimal version that does not worry about refinements such + * as error recovery (the JPEG code will just exit() if it gets an error). + */ + + +/* + * IMAGE DATA FORMATS: + * + * The standard input image format is a rectangular array of pixels, with + * each pixel having the same number of "component" values (color channels). + * Each pixel row is an array of JSAMPLEs (which typically are unsigned chars). + * If you are working with color data, then the color values for each pixel + * must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit + * RGB color. + * + * For this example, we'll assume that this data structure matches the way + * our application has stored the image in memory, so we can just pass a + * pointer to our image buffer. In particular, let's say that the image is + * RGB color and is described by: + */ + +extern JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */ +extern int image_height; /* Number of rows in image */ +extern int image_width; /* Number of columns in image */ + + +/* + * Sample routine for JPEG compression. We assume that the target file name + * and a compression quality factor are passed in. + */ + +GLOBAL(void) +write_JPEG_file (char * filename, int quality) +{ + /* This struct contains the JPEG compression parameters and pointers to + * working space (which is allocated as needed by the JPEG library). + * It is possible to have several such structures, representing multiple + * compression/decompression processes, in existence at once. We refer + * to any one struct (and its associated working data) as a "JPEG object". + */ + struct jpeg_compress_struct cinfo; + /* This struct represents a JPEG error handler. It is declared separately + * because applications often want to supply a specialized error handler + * (see the second half of this file for an example). But here we just + * take the easy way out and use the standard error handler, which will + * print a message on stderr and call exit() if compression fails. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + struct jpeg_error_mgr jerr; + /* More stuff */ + FILE * outfile; /* target file */ + JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ + int row_stride; /* physical row width in image buffer */ + + /* Step 1: allocate and initialize JPEG compression object */ + + /* We have to set up the error handler first, in case the initialization + * step fails. (Unlikely, but it could happen if you are out of memory.) + * This routine fills in the contents of struct jerr, and returns jerr's + * address which we place into the link field in cinfo. + */ + cinfo.err = jpeg_std_error(&jerr); + /* Now we can initialize the JPEG compression object. */ + jpeg_create_compress(&cinfo); + + /* Step 2: specify data destination (eg, a file) */ + /* Note: steps 2 and 3 can be done in either order. */ + + /* Here we use the library-supplied code to send compressed data to a + * stdio stream. You can also write your own code to do something else. + * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that + * requires it in order to write binary files. + */ + if ((outfile = fopen(filename, "wb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + exit(1); + } + jpeg_stdio_dest(&cinfo, outfile); + + /* Step 3: set parameters for compression */ + + /* First we supply a description of the input image. + * Four fields of the cinfo struct must be filled in: + */ + cinfo.image_width = image_width; /* image width and height, in pixels */ + cinfo.image_height = image_height; + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ + /* Now use the library's routine to set default compression parameters. + * (You must set at least cinfo.in_color_space before calling this, + * since the defaults depend on the source color space.) + */ + jpeg_set_defaults(&cinfo); + /* Now you can set any non-default parameters you wish to. + * Here we just illustrate the use of quality (quantization table) scaling: + */ + jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); + + /* Step 4: Start compressor */ + + /* TRUE ensures that we will write a complete interchange-JPEG file. + * Pass TRUE unless you are very sure of what you're doing. + */ + jpeg_start_compress(&cinfo, TRUE); + + /* Step 5: while (scan lines remain to be written) */ + /* jpeg_write_scanlines(...); */ + + /* Here we use the library's state variable cinfo.next_scanline as the + * loop counter, so that we don't have to keep track ourselves. + * To keep things simple, we pass one scanline per call; you can pass + * more if you wish, though. + */ + row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ + + while (cinfo.next_scanline < cinfo.image_height) { + /* jpeg_write_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could pass + * more than one scanline at a time if that's more convenient. + */ + row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; + (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + + /* Step 6: Finish compression */ + + jpeg_finish_compress(&cinfo); + /* After finish_compress, we can close the output file. */ + fclose(outfile); + + /* Step 7: release JPEG compression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_compress(&cinfo); + + /* And we're done! */ +} + + +/* + * SOME FINE POINTS: + * + * In the above loop, we ignored the return value of jpeg_write_scanlines, + * which is the number of scanlines actually written. We could get away + * with this because we were only relying on the value of cinfo.next_scanline, + * which will be incremented correctly. If you maintain additional loop + * variables then you should be careful to increment them properly. + * Actually, for output to a stdio stream you needn't worry, because + * then jpeg_write_scanlines will write all the lines passed (or else exit + * with a fatal error). Partial writes can only occur if you use a data + * destination module that can demand suspension of the compressor. + * (If you don't know what that's for, you don't need it.) + * + * If the compressor requires full-image buffers (for entropy-coding + * optimization or a multi-scan JPEG file), it will create temporary + * files for anything that doesn't fit within the maximum-memory setting. + * (Note that temp files are NOT needed if you use the default parameters.) + * On some systems you may need to set up a signal handler to ensure that + * temporary files are deleted if the program is interrupted. See libjpeg.txt. + * + * Scanlines MUST be supplied in top-to-bottom order if you want your JPEG + * files to be compatible with everyone else's. If you cannot readily read + * your data in that order, you'll need an intermediate array to hold the + * image. See rdtarga.c or rdbmp.c for examples of handling bottom-to-top + * source data using the JPEG code's internal virtual-array mechanisms. + */ + + + +/******************** JPEG DECOMPRESSION SAMPLE INTERFACE *******************/ + +/* This half of the example shows how to read data from the JPEG decompressor. + * It's a bit more refined than the above, in that we show: + * (a) how to modify the JPEG library's standard error-reporting behavior; + * (b) how to allocate workspace using the library's memory manager. + * + * Just to make this example a little different from the first one, we'll + * assume that we do not intend to put the whole image into an in-memory + * buffer, but to send it line-by-line someplace else. We need a one- + * scanline-high JSAMPLE array as a work buffer, and we will let the JPEG + * memory manager allocate it for us. This approach is actually quite useful + * because we don't need to remember to deallocate the buffer separately: it + * will go away automatically when the JPEG object is cleaned up. + */ + + +/* + * ERROR HANDLING: + * + * The JPEG library's standard error handler (jerror.c) is divided into + * several "methods" which you can override individually. This lets you + * adjust the behavior without duplicating a lot of code, which you might + * have to update with each future release. + * + * Our example here shows how to override the "error_exit" method so that + * control is returned to the library's caller when a fatal error occurs, + * rather than calling exit() as the standard error_exit method does. + * + * We use C's setjmp/longjmp facility to return control. This means that the + * routine which calls the JPEG library must first execute a setjmp() call to + * establish the return point. We want the replacement error_exit to do a + * longjmp(). But we need to make the setjmp buffer accessible to the + * error_exit routine. To do this, we make a private extension of the + * standard JPEG error handler object. (If we were using C++, we'd say we + * were making a subclass of the regular error handler.) + * + * Here's the extended error handler struct: + */ + +struct my_error_mgr { + struct jpeg_error_mgr pub; /* "public" fields */ + + jmp_buf setjmp_buffer; /* for return to caller */ +}; + +typedef struct my_error_mgr * my_error_ptr; + +/* + * Here's the routine that will replace the standard error_exit method: + */ + +METHODDEF(void) +my_error_exit (j_common_ptr cinfo) +{ + /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ + my_error_ptr myerr = (my_error_ptr) cinfo->err; + + /* Always display the message. */ + /* We could postpone this until after returning, if we chose. */ + (*cinfo->err->output_message) (cinfo); + + /* Return control to the setjmp point */ + longjmp(myerr->setjmp_buffer, 1); +} + + +/* + * Sample routine for JPEG decompression. We assume that the source file name + * is passed in. We want to return 1 on success, 0 on error. + */ + + +GLOBAL(int) +read_JPEG_file (char * filename) +{ + /* This struct contains the JPEG decompression parameters and pointers to + * working space (which is allocated as needed by the JPEG library). + */ + struct jpeg_decompress_struct cinfo; + /* We use our private extension JPEG error handler. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + struct my_error_mgr jerr; + /* More stuff */ + FILE * infile; /* source file */ + JSAMPARRAY buffer; /* Output row buffer */ + int row_stride; /* physical row width in output buffer */ + + /* In this example we want to open the input file before doing anything else, + * so that the setjmp() error recovery below can assume the file is open. + * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that + * requires it in order to read binary files. + */ + + if ((infile = fopen(filename, "rb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + return 0; + } + + /* Step 1: allocate and initialize JPEG decompression object */ + + /* We set up the normal JPEG error routines, then override error_exit. */ + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + /* Establish the setjmp return context for my_error_exit to use. */ + if (setjmp(jerr.setjmp_buffer)) { + /* If we get here, the JPEG code has signaled an error. + * We need to clean up the JPEG object, close the input file, and return. + */ + jpeg_destroy_decompress(&cinfo); + fclose(infile); + return 0; + } + /* Now we can initialize the JPEG decompression object. */ + jpeg_create_decompress(&cinfo); + + /* Step 2: specify data source (eg, a file) */ + + jpeg_stdio_src(&cinfo, infile); + + /* Step 3: read file parameters with jpeg_read_header() */ + + (void) jpeg_read_header(&cinfo, TRUE); + /* We can ignore the return value from jpeg_read_header since + * (a) suspension is not possible with the stdio data source, and + * (b) we passed TRUE to reject a tables-only JPEG file as an error. + * See libjpeg.txt for more info. + */ + + /* Step 4: set parameters for decompression */ + + /* In this example, we don't need to change any of the defaults set by + * jpeg_read_header(), so we do nothing here. + */ + + /* Step 5: Start decompressor */ + + (void) jpeg_start_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* We may need to do some setup of our own at this point before reading + * the data. After jpeg_start_decompress() we have the correct scaled + * output image dimensions available, as well as the output colormap + * if we asked for color quantization. + * In this example, we need to make an output work buffer of the right size. + */ + /* JSAMPLEs per row in output buffer */ + row_stride = cinfo.output_width * cinfo.output_components; + /* Make a one-row-high sample array that will go away when done with image */ + buffer = (*cinfo.mem->alloc_sarray) + ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + + /* Step 6: while (scan lines remain to be read) */ + /* jpeg_read_scanlines(...); */ + + /* Here we use the library's state variable cinfo.output_scanline as the + * loop counter, so that we don't have to keep track ourselves. + */ + while (cinfo.output_scanline < cinfo.output_height) { + /* jpeg_read_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could ask for + * more than one scanline at a time if that's more convenient. + */ + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + /* Assume put_scanline_someplace wants a pointer and sample count. */ + put_scanline_someplace(buffer[0], row_stride); + } + + /* Step 7: Finish decompression */ + + (void) jpeg_finish_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* Step 8: Release JPEG decompression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_decompress(&cinfo); + + /* After finish_decompress, we can close the input file. + * Here we postpone it until after no more JPEG errors are possible, + * so as to simplify the setjmp error logic above. (Actually, I don't + * think that jpeg_destroy can do an error exit, but why assume anything...) + */ + fclose(infile); + + /* At this point you may want to check to see whether any corrupt-data + * warnings occurred (test whether jerr.pub.num_warnings is nonzero). + */ + + /* And we're done! */ + return 1; +} + + +/* + * SOME FINE POINTS: + * + * In the above code, we ignored the return value of jpeg_read_scanlines, + * which is the number of scanlines actually read. We could get away with + * this because we asked for only one line at a time and we weren't using + * a suspending data source. See libjpeg.txt for more info. + * + * We cheated a bit by calling alloc_sarray() after jpeg_start_decompress(); + * we should have done it beforehand to ensure that the space would be + * counted against the JPEG max_memory setting. In some systems the above + * code would risk an out-of-memory error. However, in general we don't + * know the output image dimensions before jpeg_start_decompress(), unless we + * call jpeg_calc_output_dimensions(). See libjpeg.txt for more about this. + * + * Scanlines are returned in the same order as they appear in the JPEG file, + * which is standardly top-to-bottom. If you must emit data bottom-to-top, + * you can use one of the virtual arrays provided by the JPEG memory manager + * to invert the data. See wrbmp.c for an example. + * + * As with compression, some operating modes may require temporary files. + * On some systems you may need to set up a signal handler to ensure that + * temporary files are deleted if the program is interrupted. See libjpeg.txt. + */ diff --git a/3rdparty/openctm/tools/jpeg/filelist.txt b/3rdparty/openctm/tools/jpeg/filelist.txt new file mode 100644 index 000000000..6624de7a2 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/filelist.txt @@ -0,0 +1,215 @@ +IJG JPEG LIBRARY: FILE LIST + +Copyright (C) 1994-2009, Thomas G. Lane, Guido Vollbeding. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +Here is a road map to the files in the IJG JPEG distribution. The +distribution includes the JPEG library proper, plus two application +programs ("cjpeg" and "djpeg") which use the library to convert JPEG +files to and from some other popular image formats. A third application +"jpegtran" uses the library to do lossless conversion between different +variants of JPEG. There are also two stand-alone applications, +"rdjpgcom" and "wrjpgcom". + + +THE JPEG LIBRARY +================ + +Include files: + +jpeglib.h JPEG library's exported data and function declarations. +jconfig.h Configuration declarations. Note: this file is not present + in the distribution; it is generated during installation. +jmorecfg.h Additional configuration declarations; need not be changed + for a standard installation. +jerror.h Declares JPEG library's error and trace message codes. +jinclude.h Central include file used by all IJG .c files to reference + system include files. +jpegint.h JPEG library's internal data structures. +jdct.h Private declarations for forward & reverse DCT subsystems. +jmemsys.h Private declarations for memory management subsystem. +jversion.h Version information. + +Applications using the library should include jpeglib.h (which in turn +includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included +if the application needs to reference individual JPEG error codes. The +other include files are intended for internal use and would not normally +be included by an application program. (cjpeg/djpeg/etc do use jinclude.h, +since its function is to improve portability of the whole IJG distribution. +Most other applications will directly include the system include files they +want, and hence won't need jinclude.h.) + + +C source code files: + +These files contain most of the functions intended to be called directly by +an application program: + +jcapimin.c Application program interface: core routines for compression. +jcapistd.c Application program interface: standard compression. +jdapimin.c Application program interface: core routines for decompression. +jdapistd.c Application program interface: standard decompression. +jcomapi.c Application program interface routines common to compression + and decompression. +jcparam.c Compression parameter setting helper routines. +jctrans.c API and library routines for transcoding compression. +jdtrans.c API and library routines for transcoding decompression. + +Compression side of the library: + +jcinit.c Initialization: determines which other modules to use. +jcmaster.c Master control: setup and inter-pass sequencing logic. +jcmainct.c Main buffer controller (preprocessor => JPEG compressor). +jcprepct.c Preprocessor buffer controller. +jccoefct.c Buffer controller for DCT coefficient buffer. +jccolor.c Color space conversion. +jcsample.c Downsampling. +jcdctmgr.c DCT manager (DCT implementation selection & control). +jfdctint.c Forward DCT using slow-but-accurate integer method. +jfdctfst.c Forward DCT using faster, less accurate integer method. +jfdctflt.c Forward DCT using floating-point arithmetic. +jchuff.c Huffman entropy coding. +jcarith.c Arithmetic entropy coding. +jcmarker.c JPEG marker writing. +jdatadst.c Data destination manager for stdio output. + +Decompression side of the library: + +jdmaster.c Master control: determines which other modules to use. +jdinput.c Input controller: controls input processing modules. +jdmainct.c Main buffer controller (JPEG decompressor => postprocessor). +jdcoefct.c Buffer controller for DCT coefficient buffer. +jdpostct.c Postprocessor buffer controller. +jdmarker.c JPEG marker reading. +jdhuff.c Huffman entropy decoding. +jdarith.c Arithmetic entropy decoding. +jddctmgr.c IDCT manager (IDCT implementation selection & control). +jidctint.c Inverse DCT using slow-but-accurate integer method. +jidctfst.c Inverse DCT using faster, less accurate integer method. +jidctflt.c Inverse DCT using floating-point arithmetic. +jdsample.c Upsampling. +jdcolor.c Color space conversion. +jdmerge.c Merged upsampling/color conversion (faster, lower quality). +jquant1.c One-pass color quantization using a fixed-spacing colormap. +jquant2.c Two-pass color quantization using a custom-generated colormap. + Also handles one-pass quantization to an externally given map. +jdatasrc.c Data source manager for stdio input. + +Support files for both compression and decompression: + +jaricom.c Tables for common use in arithmetic entropy encoding and + decoding routines. +jerror.c Standard error handling routines (application replaceable). +jmemmgr.c System-independent (more or less) memory management code. +jutils.c Miscellaneous utility routines. + +jmemmgr.c relies on a system-dependent memory management module. The IJG +distribution includes the following implementations of the system-dependent +module: + +jmemnobs.c "No backing store": assumes adequate virtual memory exists. +jmemansi.c Makes temporary files with ANSI-standard routine tmpfile(). +jmemname.c Makes temporary files with program-generated file names. +jmemdos.c Custom implementation for MS-DOS (16-bit environment only): + can use extended and expanded memory as well as temp files. +jmemmac.c Custom implementation for Apple Macintosh. + +Exactly one of the system-dependent modules should be configured into an +installed JPEG library (see install.txt for hints about which one to use). +On unusual systems you may find it worthwhile to make a special +system-dependent memory manager. + + +Non-C source code files: + +jmemdosa.asm 80x86 assembly code support for jmemdos.c; used only in + MS-DOS-specific configurations of the JPEG library. + + +CJPEG/DJPEG/JPEGTRAN +==================== + +Include files: + +cdjpeg.h Declarations shared by cjpeg/djpeg/jpegtran modules. +cderror.h Additional error and trace message codes for cjpeg et al. +transupp.h Declarations for jpegtran support routines in transupp.c. + +C source code files: + +cjpeg.c Main program for cjpeg. +djpeg.c Main program for djpeg. +jpegtran.c Main program for jpegtran. +cdjpeg.c Utility routines used by all three programs. +rdcolmap.c Code to read a colormap file for djpeg's "-map" switch. +rdswitch.c Code to process some of cjpeg's more complex switches. + Also used by jpegtran. +transupp.c Support code for jpegtran: lossless image manipulations. + +Image file reader modules for cjpeg: + +rdbmp.c BMP file input. +rdgif.c GIF file input (now just a stub). +rdppm.c PPM/PGM file input. +rdrle.c Utah RLE file input. +rdtarga.c Targa file input. + +Image file writer modules for djpeg: + +wrbmp.c BMP file output. +wrgif.c GIF file output (a mere shadow of its former self). +wrppm.c PPM/PGM file output. +wrrle.c Utah RLE file output. +wrtarga.c Targa file output. + + +RDJPGCOM/WRJPGCOM +================= + +C source code files: + +rdjpgcom.c Stand-alone rdjpgcom application. +wrjpgcom.c Stand-alone wrjpgcom application. + +These programs do not depend on the IJG library. They do use +jconfig.h and jinclude.h, only to improve portability. + + +ADDITIONAL FILES +================ + +Documentation (see README for a guide to the documentation files): + +README Master documentation file. +*.txt Other documentation files. +*.1 Documentation in Unix man page format. +change.log Version-to-version change highlights. +example.c Sample code for calling JPEG library. + +Configuration/installation files and programs (see install.txt for more info): + +configure Unix shell script to perform automatic configuration. +configure.ac Source file for use with Autoconf to generate configure. +ltmain.sh Support scripts for configure (from GNU libtool). +config.guess +config.sub +depcomp +missing +install-sh Install shell script for those Unix systems lacking one. +Makefile.in Makefile input for configure. +Makefile.am Source file for use with Automake to generate Makefile.in. +ckconfig.c Program to generate jconfig.h on non-Unix systems. +jconfig.txt Template for making jconfig.h by hand. +mak*.* Sample makefiles for particular systems. +jconfig.* Sample jconfig.h for particular systems. +libjpeg.map Script to generate shared library with versioned symbols. +aclocal.m4 M4 macro definitions for use with Autoconf. +ansi2knr.c De-ANSIfier for pre-ANSI C compilers (courtesy of + L. Peter Deutsch and Aladdin Enterprises). + +Test files (see install.txt for test procedure): + +test*.* Source and comparison files for confidence test. + These are binary image files, NOT text files. diff --git a/3rdparty/openctm/tools/jpeg/install-sh b/3rdparty/openctm/tools/jpeg/install-sh new file mode 100644 index 000000000..16c160754 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# 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 +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/3rdparty/openctm/tools/jpeg/install.txt b/3rdparty/openctm/tools/jpeg/install.txt new file mode 100644 index 000000000..24bb4ee9e --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/install.txt @@ -0,0 +1,1097 @@ +INSTALLATION INSTRUCTIONS for the Independent JPEG Group's JPEG software + +Copyright (C) 1991-2009, Thomas G. Lane, Guido Vollbeding. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +This file explains how to configure and install the IJG software. We have +tried to make this software extremely portable and flexible, so that it can be +adapted to almost any environment. The downside of this decision is that the +installation process is complicated. We have provided shortcuts to simplify +the task on common systems. But in any case, you will need at least a little +familiarity with C programming and program build procedures for your system. + +If you are only using this software as part of a larger program, the larger +program's installation procedure may take care of configuring the IJG code. +For example, Ghostscript's installation script will configure the IJG code. +You don't need to read this file if you just want to compile Ghostscript. + +If you are on a Unix machine, you may not need to read this file at all. +Try doing + ./configure + make + make test +If that doesn't complain, do + make install +(better do "make -n install" first to see if the makefile will put the files +where you want them). Read further if you run into snags or want to customize +the code for your system. + + +TABLE OF CONTENTS +----------------- + +Before you start +Configuring the software: + using the automatic "configure" script + using one of the supplied jconfig and makefile files + by hand +Building the software +Testing the software +Installing the software +Optional stuff +Optimization +Hints for specific systems + + +BEFORE YOU START +================ + +Before installing the software you must unpack the distributed source code. +Since you are reading this file, you have probably already succeeded in this +task. However, there is a potential for error if you needed to convert the +files to the local standard text file format (for example, if you are on +MS-DOS you may have converted LF end-of-line to CR/LF). You must apply +such conversion to all the files EXCEPT those whose names begin with "test". +The test files contain binary data; if you change them in any way then the +self-test will give bad results. + +Please check the last section of this file to see if there are hints for the +specific machine or compiler you are using. + + +CONFIGURING THE SOFTWARE +======================== + +To configure the IJG code for your system, you need to create two files: + * jconfig.h: contains values for system-dependent #define symbols. + * Makefile: controls the compilation process. +(On a non-Unix machine, you may create "project files" or some other +substitute for a Makefile. jconfig.h is needed in any environment.) + +We provide three different ways to generate these files: + * On a Unix system, you can just run the "configure" script. + * We provide sample jconfig files and makefiles for popular machines; + if your machine matches one of the samples, just copy the right sample + files to jconfig.h and Makefile. + * If all else fails, read the instructions below and make your own files. + + +Configuring the software using the automatic "configure" script +--------------------------------------------------------------- + +If you are on a Unix machine, you can just type + ./configure +and let the configure script construct appropriate configuration files. +If you're using "csh" on an old version of System V, you might need to type + sh configure +instead to prevent csh from trying to execute configure itself. +Expect configure to run for a few minutes, particularly on slower machines; +it works by compiling a series of test programs. + +Configure was created with GNU Autoconf and it follows the usual conventions +for GNU configure scripts. It makes a few assumptions that you may want to +override. You can do this by providing optional switches to configure: + +* Configure will build both static and shared libraries, if possible. +If you want to build libjpeg only as a static library, say + ./configure --disable-shared +If you want to build libjpeg only as a shared library, say + ./configure --disable-static +Configure uses GNU libtool to take care of system-dependent shared library +building methods. + +* Configure will use gcc (GNU C compiler) if it's available, otherwise cc. +To force a particular compiler to be selected, use the CC option, for example + ./configure CC='cc' +The same method can be used to include any unusual compiler switches. +For example, on HP-UX you probably want to say + ./configure CC='cc -Aa' +to get HP's compiler to run in ANSI mode. + +* The default CFLAGS setting is "-g" for non-gcc compilers, "-g -O2" for gcc. +You can override this by saying, for example, + ./configure CFLAGS='-O2' +if you want to compile without debugging support. + +* Configure will set up the makefile so that "make install" will install files +into /usr/local/bin, /usr/local/man, etc. You can specify an installation +prefix other than "/usr/local" by giving configure the option "--prefix=PATH". + +* If you don't have a lot of swap space, you may need to enable the IJG +software's internal virtual memory mechanism. To do this, give the option +"--enable-maxmem=N" where N is the default maxmemory limit in megabytes. +This is discussed in more detail under "Selecting a memory manager", below. +You probably don't need to worry about this on reasonably-sized Unix machines, +unless you plan to process very large images. + +Configure has some other features that are useful if you are cross-compiling +or working in a network of multiple machine types; but if you need those +features, you probably already know how to use them. + + +Configuring the software using one of the supplied jconfig and makefile files +----------------------------------------------------------------------------- + +If you have one of these systems, you can just use the provided configuration +files: + +Makefile jconfig file System and/or compiler + +makefile.manx jconfig.manx Amiga, Manx Aztec C +makefile.sas jconfig.sas Amiga, SAS C +makeproj.mac jconfig.mac Apple Macintosh, Metrowerks CodeWarrior +mak*jpeg.st jconfig.st Atari ST/STE/TT, Pure C or Turbo C +makefile.bcc jconfig.bcc MS-DOS or OS/2, Borland C +makefile.dj jconfig.dj MS-DOS, DJGPP (Delorie's port of GNU C) +makefile.mc6 jconfig.mc6 MS-DOS, Microsoft C (16-bit only) +makefile.wat jconfig.wat MS-DOS, OS/2, or Windows NT, Watcom C +makefile.vc jconfig.vc Windows NT/95, MS Visual C++ +make*.vc6 jconfig.vc Windows NT/95, MS Visual C++ 6 +make*.vc9 jconfig.vc Windows NT/95, MS Visual C++ 2008 (v9) +makefile.mms jconfig.vms Digital VMS, with MMS software +makefile.vms jconfig.vms Digital VMS, without MMS software + +Copy the proper jconfig file to jconfig.h and the makefile to Makefile (or +whatever your system uses as the standard makefile name). For more info see +the appropriate system-specific hints section near the end of this file. + + +Configuring the software by hand +-------------------------------- + +First, generate a jconfig.h file. If you are moderately familiar with C, +the comments in jconfig.txt should be enough information to do this; just +copy jconfig.txt to jconfig.h and edit it appropriately. Otherwise, you may +prefer to use the ckconfig.c program. You will need to compile and execute +ckconfig.c by hand --- we hope you know at least enough to do that. +ckconfig.c may not compile the first try (in fact, the whole idea is for it +to fail if anything is going to). If you get compile errors, fix them by +editing ckconfig.c according to the directions given in ckconfig.c. Once +you get it to run, it will write a suitable jconfig.h file, and will also +print out some advice about which makefile to use. + +You may also want to look at the canned jconfig files, if there is one for a +system similar to yours. + +Second, select a makefile and copy it to Makefile (or whatever your system +uses as the standard makefile name). The most generic makefiles we provide +are + makefile.ansi: if your C compiler supports function prototypes + makefile.unix: if not. +(You have function prototypes if ckconfig.c put "#define HAVE_PROTOTYPES" +in jconfig.h.) You may want to start from one of the other makefiles if +there is one for a system similar to yours. + +Look over the selected Makefile and adjust options as needed. In particular +you may want to change the CC and CFLAGS definitions. For instance, if you +are using GCC, set CC=gcc. If you had to use any compiler switches to get +ckconfig.c to work, make sure the same switches are in CFLAGS. + +If you are on a system that doesn't use makefiles, you'll need to set up +project files (or whatever you do use) to compile all the source files and +link them into executable files cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom. +See the file lists in any of the makefiles to find out which files go into +each program. Note that the provided makefiles all make a "library" file +libjpeg first, but you don't have to do that if you don't want to; the file +lists identify which source files are actually needed for compression, +decompression, or both. As a last resort, you can make a batch script that +just compiles everything and links it all together; makefile.vms is an example +of this (it's for VMS systems that have no make-like utility). + +Here are comments about some specific configuration decisions you'll +need to make: + +Command line style +------------------ + +These programs can use a Unix-like command line style which supports +redirection and piping, like this: + cjpeg inputfile >outputfile + cjpeg outputfile + source program | cjpeg >outputfile +The simpler "two file" command line style is just + cjpeg inputfile outputfile +You may prefer the two-file style, particularly if you don't have pipes. + +You MUST use two-file style on any system that doesn't cope well with binary +data fed through stdin/stdout; this is true for some MS-DOS compilers, for +example. If you're not on a Unix system, it's safest to assume you need +two-file style. (But if your compiler provides either the Posix-standard +fdopen() library routine or a Microsoft-compatible setmode() routine, you +can safely use the Unix command line style, by defining USE_FDOPEN or +USE_SETMODE respectively.) + +To use the two-file style, make jconfig.h say "#define TWO_FILE_COMMANDLINE". + +Selecting a memory manager +-------------------------- + +The IJG code is capable of working on images that are too big to fit in main +memory; data is swapped out to temporary files as necessary. However, the +code to do this is rather system-dependent. We provide five different +memory managers: + +* jmemansi.c This version uses the ANSI-standard library routine tmpfile(), + which not all non-ANSI systems have. On some systems + tmpfile() may put the temporary file in a non-optimal + location; if you don't like what it does, use jmemname.c. + +* jmemname.c This version creates named temporary files. For anything + except a Unix machine, you'll need to configure the + select_file_name() routine appropriately; see the comments + near the head of jmemname.c. If you use this version, define + NEED_SIGNAL_CATCHER in jconfig.h to make sure the temp files + are removed if the program is aborted. + +* jmemnobs.c (That stands for No Backing Store :-).) This will compile on + almost any system, but it assumes you have enough main memory + or virtual memory to hold the biggest images you work with. + +* jmemdos.c This should be used with most 16-bit MS-DOS compilers. + See the system-specific notes about MS-DOS for more info. + IMPORTANT: if you use this, define USE_MSDOS_MEMMGR in + jconfig.h, and include the assembly file jmemdosa.asm in the + programs. The supplied makefiles and jconfig files for + 16-bit MS-DOS compilers already do both. + +* jmemmac.c Custom version for Apple Macintosh; see the system-specific + notes for Macintosh for more info. + +To use a particular memory manager, change the SYSDEPMEM variable in your +makefile to equal the corresponding object file name (for example, jmemansi.o +or jmemansi.obj for jmemansi.c). + +If you have plenty of (real or virtual) main memory, just use jmemnobs.c. +"Plenty" means about ten bytes for every pixel in the largest images +you plan to process, so a lot of systems don't meet this criterion. +If yours doesn't, try jmemansi.c first. If that doesn't compile, you'll have +to use jmemname.c; be sure to adjust select_file_name() for local conditions. +You may also need to change unlink() to remove() in close_backing_store(). + +Except with jmemnobs.c or jmemmac.c, you need to adjust the DEFAULT_MAX_MEM +setting to a reasonable value for your system (either by adding a #define for +DEFAULT_MAX_MEM to jconfig.h, or by adding a -D switch to the Makefile). +This value limits the amount of data space the program will attempt to +allocate. Code and static data space isn't counted, so the actual memory +needs for cjpeg or djpeg are typically 100 to 150Kb more than the max-memory +setting. Larger max-memory settings reduce the amount of I/O needed to +process a large image, but too large a value can result in "insufficient +memory" failures. On most Unix machines (and other systems with virtual +memory), just set DEFAULT_MAX_MEM to several million and forget it. At the +other end of the spectrum, for MS-DOS machines you probably can't go much +above 300K to 400K. (On MS-DOS the value refers to conventional memory only. +Extended/expanded memory is handled separately by jmemdos.c.) + + +BUILDING THE SOFTWARE +===================== + +Now you should be able to compile the software. Just say "make" (or +whatever's necessary to start the compilation). Have a cup of coffee. + +Here are some things that could go wrong: + +If your compiler complains about undefined structures, you should be able to +shut it up by putting "#define INCOMPLETE_TYPES_BROKEN" in jconfig.h. + +If you have trouble with missing system include files or inclusion of the +wrong ones, read jinclude.h. This shouldn't happen if you used configure +or ckconfig.c to set up jconfig.h. + +There are a fair number of routines that do not use all of their parameters; +some compilers will issue warnings about this, which you can ignore. There +are also a few configuration checks that may give "unreachable code" warnings. +Any other warning deserves investigation. + +If you don't have a getenv() library routine, define NO_GETENV. + +Also see the system-specific hints, below. + + +TESTING THE SOFTWARE +==================== + +As a quick test of functionality we've included a small sample image in +several forms: + testorig.jpg Starting point for the djpeg tests. + testimg.ppm The output of djpeg testorig.jpg + testimg.bmp The output of djpeg -bmp -colors 256 testorig.jpg + testimg.jpg The output of cjpeg testimg.ppm + testprog.jpg Progressive-mode equivalent of testorig.jpg. + testimgp.jpg The output of cjpeg -progressive -optimize testimg.ppm +(The first- and second-generation .jpg files aren't identical since JPEG is +lossy.) If you can generate duplicates of the testimg* files then you +probably have working programs. + +With most of the makefiles, "make test" will perform the necessary +comparisons. + +If you're using a makefile that doesn't provide the test option, run djpeg +and cjpeg by hand and compare the output files to testimg* with whatever +binary file comparison tool you have. The files should be bit-for-bit +identical. + +If the programs complain "MAX_ALLOC_CHUNK is wrong, please fix", then you +need to reduce MAX_ALLOC_CHUNK to a value that fits in type size_t. +Try adding "#define MAX_ALLOC_CHUNK 65520L" to jconfig.h. A less likely +configuration error is "ALIGN_TYPE is wrong, please fix": defining ALIGN_TYPE +as long should take care of that one. + +If the cjpeg test run fails with "Missing Huffman code table entry", it's a +good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED. Go back to the +configuration step and run ckconfig.c. (This is a good plan for any other +test failure, too.) + +If you are using Unix (one-file) command line style on a non-Unix system, +it's a good idea to check that binary I/O through stdin/stdout actually +works. You should get the same results from "djpeg out.ppm" +as from "djpeg -outfile out.ppm testorig.jpg". Note that the makefiles all +use the latter style and therefore do not exercise stdin/stdout! If this +check fails, try recompiling with USE_SETMODE or USE_FDOPEN defined. +If it still doesn't work, better use two-file style. + +If you chose a memory manager other than jmemnobs.c, you should test that +temporary-file usage works. Try "djpeg -bmp -colors 256 -max 0 testorig.jpg" +and make sure its output matches testimg.bmp. If you have any really large +images handy, try compressing them with -optimize and/or decompressing with +-colors 256 to make sure your DEFAULT_MAX_MEM setting is not too large. + +NOTE: this is far from an exhaustive test of the JPEG software; some modules, +such as 1-pass color quantization, are not exercised at all. It's just a +quick test to give you some confidence that you haven't missed something +major. + + +INSTALLING THE SOFTWARE +======================= + +Once you're done with the above steps, you can install the software by +copying the executable files (cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom) +to wherever you normally install programs. On Unix systems, you'll also want +to put the man pages (cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1) +in the man-page directory. The pre-fab makefiles don't support this step +since there's such a wide variety of installation procedures on different +systems. + +If you generated a Makefile with the "configure" script, you can just say + make install +to install the programs and their man pages into the standard places. +(You'll probably need to be root to do this.) We recommend first saying + make -n install +to see where configure thought the files should go. You may need to edit +the Makefile, particularly if your system's conventions for man page +filenames don't match what configure expects. + +If you want to install the IJG library itself, for use in compiling other +programs besides ours, then you need to put the four include files + jpeglib.h jerror.h jconfig.h jmorecfg.h +into your include-file directory, and put the library file libjpeg.a +(extension may vary depending on system) wherever library files go. +If you generated a Makefile with "configure", it will do what it thinks +is the right thing if you say + make install-lib + + +OPTIONAL STUFF +============== + +Progress monitor: + +If you like, you can #define PROGRESS_REPORT (in jconfig.h) to enable display +of percent-done progress reports. The routine provided in cdjpeg.c merely +prints percentages to stderr, but you can customize it to do something +fancier. + +Utah RLE file format support: + +We distribute the software with support for RLE image files (Utah Raster +Toolkit format) disabled, because the RLE support won't compile without the +Utah library. If you have URT version 3.1 or later, you can enable RLE +support as follows: + 1. #define RLE_SUPPORTED in jconfig.h. + 2. Add a -I option to CFLAGS in the Makefile for the directory + containing the URT .h files (typically the "include" + subdirectory of the URT distribution). + 3. Add -L... -lrle to LDLIBS in the Makefile, where ... specifies + the directory containing the URT "librle.a" file (typically the + "lib" subdirectory of the URT distribution). + +Support for 12-bit-deep pixel data: + +The JPEG standard allows either 8-bit or 12-bit data precision. (For color, +this means 8 or 12 bits per channel, of course.) If you need to work with +deeper than 8-bit data, you can compile the IJG code for 12-bit operation. +To do so: + 1. In jmorecfg.h, define BITS_IN_JSAMPLE as 12 rather than 8. + 2. In jconfig.h, undefine BMP_SUPPORTED, RLE_SUPPORTED, and TARGA_SUPPORTED, + because the code for those formats doesn't handle 12-bit data and won't + even compile. (The PPM code does work, as explained below. The GIF + code works too; it scales 8-bit GIF data to and from 12-bit depth + automatically.) + 3. Compile. Don't expect "make test" to pass, since the supplied test + files are for 8-bit data. + +Currently, 12-bit support does not work on 16-bit-int machines. + +Note that a 12-bit version will not read 8-bit JPEG files, nor vice versa; +so you'll want to keep around a regular 8-bit compilation as well. +(Run-time selection of data depth, to allow a single copy that does both, +is possible but would probably slow things down considerably; it's very low +on our to-do list.) + +The PPM reader (rdppm.c) can read 12-bit data from either text-format or +binary-format PPM and PGM files. Binary-format PPM/PGM files which have a +maxval greater than 255 are assumed to use 2 bytes per sample, MSB first +(big-endian order). As of early 1995, 2-byte binary format is not +officially supported by the PBMPLUS library, but it is expected that a +future release of PBMPLUS will support it. Note that the PPM reader will +read files of any maxval regardless of the BITS_IN_JSAMPLE setting; incoming +data is automatically rescaled to either maxval=255 or maxval=4095 as +appropriate for the cjpeg bit depth. + +The PPM writer (wrppm.c) will normally write 2-byte binary PPM or PGM +format, maxval 4095, when compiled with BITS_IN_JSAMPLE=12. Since this +format is not yet widely supported, you can disable it by compiling wrppm.c +with PPM_NORAWWORD defined; then the data is scaled down to 8 bits to make a +standard 1-byte/sample PPM or PGM file. (Yes, this means still another copy +of djpeg to keep around. But hopefully you won't need it for very long. +Poskanzer's supposed to get that new PBMPLUS release out Real Soon Now.) + +Of course, if you are working with 12-bit data, you probably have it stored +in some other, nonstandard format. In that case you'll probably want to +write your own I/O modules to read and write your format. + +Note that a 12-bit version of cjpeg always runs in "-optimize" mode, in +order to generate valid Huffman tables. This is necessary because our +default Huffman tables only cover 8-bit data. + +Removing code: + +If you need to make a smaller version of the JPEG software, some optional +functions can be removed at compile time. See the xxx_SUPPORTED #defines in +jconfig.h and jmorecfg.h. If at all possible, we recommend that you leave in +decoder support for all valid JPEG files, to ensure that you can read anyone's +output. Taking out support for image file formats that you don't use is the +most painless way to make the programs smaller. Another possibility is to +remove some of the DCT methods: in particular, the "IFAST" method may not be +enough faster than the others to be worth keeping on your machine. (If you +do remove ISLOW or IFAST, be sure to redefine JDCT_DEFAULT or JDCT_FASTEST +to a supported method, by adding a #define in jconfig.h.) + + +OPTIMIZATION +============ + +Unless you own a Cray, you'll probably be interested in making the JPEG +software go as fast as possible. This section covers some machine-dependent +optimizations you may want to try. We suggest that before trying any of +this, you first get the basic installation to pass the self-test step. +Repeat the self-test after any optimization to make sure that you haven't +broken anything. + +The integer DCT routines perform a lot of multiplications. These +multiplications must yield 32-bit results, but none of their input values +are more than 16 bits wide. On many machines, notably the 680x0 and 80x86 +CPUs, a 16x16=>32 bit multiply instruction is faster than a full 32x32=>32 +bit multiply. Unfortunately there is no portable way to specify such a +multiplication in C, but some compilers can generate one when you use the +right combination of casts. See the MULTIPLYxxx macro definitions in +jdct.h. If your compiler makes "int" be 32 bits and "short" be 16 bits, +defining SHORTxSHORT_32 is fairly likely to work. When experimenting with +alternate definitions, be sure to test not only whether the code still works +(use the self-test), but also whether it is actually faster --- on some +compilers, alternate definitions may compute the right answer, yet be slower +than the default. Timing cjpeg on a large PGM (grayscale) input file is the +best way to check this, as the DCT will be the largest fraction of the runtime +in that mode. (Note: some of the distributed compiler-specific jconfig files +already contain #define switches to select appropriate MULTIPLYxxx +definitions.) + +If your machine has sufficiently fast floating point hardware, you may find +that the float DCT method is faster than the integer DCT methods, even +after tweaking the integer multiply macros. In that case you may want to +make the float DCT be the default method. (The only objection to this is +that float DCT results may vary slightly across machines.) To do that, add +"#define JDCT_DEFAULT JDCT_FLOAT" to jconfig.h. Even if you don't change +the default, you should redefine JDCT_FASTEST, which is the method selected +by djpeg's -fast switch. Don't forget to update the documentation files +(usage.txt and/or cjpeg.1, djpeg.1) to agree with what you've done. + +If access to "short" arrays is slow on your machine, it may be a win to +define type JCOEF as int rather than short. This will cost a good deal of +memory though, particularly in some multi-pass modes, so don't do it unless +you have memory to burn and short is REALLY slow. + +If your compiler can compile function calls in-line, make sure the INLINE +macro in jmorecfg.h is defined as the keyword that marks a function +inline-able. Some compilers have a switch that tells the compiler to inline +any function it thinks is profitable (e.g., -finline-functions for gcc). +Enabling such a switch is likely to make the compiled code bigger but faster. + +In general, it's worth trying the maximum optimization level of your compiler, +and experimenting with any optional optimizations such as loop unrolling. +(Unfortunately, far too many compilers have optimizer bugs ... be prepared to +back off if the code fails self-test.) If you do any experimentation along +these lines, please report the optimal settings to jpeg-info@jpegclub.org so +we can mention them in future releases. Be sure to specify your machine and +compiler version. + + +HINTS FOR SPECIFIC SYSTEMS +========================== + +We welcome reports on changes needed for systems not mentioned here. Submit +'em to jpeg-info@jpegclub.org. Also, if configure or ckconfig.c is wrong +about how to configure the JPEG software for your system, please let us know. + + +Acorn RISC OS: + +(Thanks to Simon Middleton for these hints on compiling with Desktop C.) +After renaming the files according to Acorn conventions, take a copy of +makefile.ansi, change all occurrences of 'libjpeg.a' to 'libjpeg.o' and +change these definitions as indicated: + +CFLAGS= -throwback -IC: -Wn +LDLIBS=C:o.Stubs +SYSDEPMEM=jmemansi.o +LN=Link +AR=LibFile -c -o + +Also add a new line '.c.o:; $(cc) $< $(cflags) -c -o $@'. Remove the +lines '$(RM) libjpeg.o' and '$(AR2) libjpeg.o' and the 'jconfig.h' +dependency section. + +Copy jconfig.txt to jconfig.h. Edit jconfig.h to define TWO_FILE_COMMANDLINE +and CHAR_IS_UNSIGNED. + +Run the makefile using !AMU not !Make. If you want to use the 'clean' and +'test' makefile entries then you will have to fiddle with the syntax a bit +and rename the test files. + + +Amiga: + +SAS C 6.50 reportedly is too buggy to compile the IJG code properly. +A patch to update to 6.51 is available from SAS or AmiNet FTP sites. + +The supplied config files are set up to use jmemname.c as the memory +manager, with temporary files being created on the device named by +"JPEGTMP:". + + +Atari ST/STE/TT: + +Copy the project files makcjpeg.st, makdjpeg.st, maktjpeg.st, and makljpeg.st +to cjpeg.prj, djpeg.prj, jpegtran.prj, and libjpeg.prj respectively. The +project files should work as-is with Pure C. For Turbo C, change library +filenames "pc..." to "tc..." in each project file. Note that libjpeg.prj +selects jmemansi.c as the recommended memory manager. You'll probably want to +adjust the DEFAULT_MAX_MEM setting --- you want it to be a couple hundred K +less than your normal free memory. Put "#define DEFAULT_MAX_MEM nnnn" into +jconfig.h to do this. + +To use the 68881/68882 coprocessor for the floating point DCT, add the +compiler option "-8" to the project files and replace pcfltlib.lib with +pc881lib.lib in cjpeg.prj and djpeg.prj. Or if you don't have a +coprocessor, you may prefer to remove the float DCT code by undefining +DCT_FLOAT_SUPPORTED in jmorecfg.h (since without a coprocessor, the float +code will be too slow to be useful). In that case, you can delete +pcfltlib.lib from the project files. + +Note that you must make libjpeg.lib before making cjpeg.ttp, djpeg.ttp, +or jpegtran.ttp. You'll have to perform the self-test by hand. + +We haven't bothered to include project files for rdjpgcom and wrjpgcom. +Those source files should just be compiled by themselves; they don't +depend on the JPEG library. You can use the default.prj project file +of the Pure C distribution to make the programs. + +There is a bug in some older versions of the Turbo C library which causes the +space used by temporary files created with "tmpfile()" not to be freed after +an abnormal program exit. If you check your disk afterwards, you will find +cluster chains that are allocated but not used by a file. This should not +happen in cjpeg/djpeg/jpegtran, since we enable a signal catcher to explicitly +close temp files before exiting. But if you use the JPEG library with your +own code, be sure to supply a signal catcher, or else use a different +system-dependent memory manager. + + +Cray: + +Should you be so fortunate as to be running JPEG on a Cray YMP, there is a +compiler bug in old versions of Cray's Standard C (prior to 3.1). If you +still have an old compiler, you'll need to insert a line reading +"#pragma novector" just before the loop + for (i = 1; i <= (int) htbl->bits[l]; i++) + huffsize[p++] = (char) l; +in fix_huff_tbl (in V5beta1, line 204 of jchuff.c and line 176 of jdhuff.c). +[This bug may or may not still occur with the current IJG code, but it's +probably a dead issue anyway...] + + +HP-UX: + +If you have HP-UX 7.05 or later with the "software development" C compiler, +you should run the compiler in ANSI mode. If using the configure script, +say + ./configure CC='cc -Aa' +(or -Ae if you prefer). If configuring by hand, use makefile.ansi and add +"-Aa" to the CFLAGS line in the makefile. + +If you have a pre-7.05 system, or if you are using the non-ANSI C compiler +delivered with a minimum HP-UX system, then you must use makefile.unix +(and do NOT add -Aa); or just run configure without the CC option. + +On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior +to A.08.07. If you get complaints about "not a typedef name", you'll have to +use makefile.unix, or run configure without the CC option. + + +Macintosh, generic comments: + +The supplied user-interface files (cjpeg.c, djpeg.c, etc) are set up to +provide a Unix-style command line interface. You can use this interface on +the Mac by means of the ccommand() library routine provided by Metrowerks +CodeWarrior or Think C. This is only appropriate for testing the library, +however; to make a user-friendly equivalent of cjpeg/djpeg you'd really want +to develop a Mac-style user interface. There isn't a complete example +available at the moment, but there are some helpful starting points: +1. Sam Bushell's free "To JPEG" applet provides drag-and-drop conversion to +JPEG under System 7 and later. This only illustrates how to use the +compression half of the library, but it does a very nice job of that part. +The CodeWarrior source code is available from http://www.pobox.com/~jsam. +2. Jim Brunner prepared a Mac-style user interface for both compression and +decompression. Unfortunately, it hasn't been updated since IJG v4, and +the library's API has changed considerably since then. Still it may be of +some help, particularly as a guide to compiling the IJG code under Think C. +Jim's code is available from the Info-Mac archives, at sumex-aim.stanford.edu +or mirrors thereof; see file /info-mac/dev/src/jpeg-convert-c.hqx. + +jmemmac.c is the recommended memory manager back end for Macintosh. It uses +NewPtr/DisposePtr instead of malloc/free, and has a Mac-specific +implementation of jpeg_mem_available(). It also creates temporary files that +follow Mac conventions. (That part of the code relies on System-7-or-later OS +functions. See the comments in jmemmac.c if you need to run it on System 6.) +NOTE that USE_MAC_MEMMGR must be defined in jconfig.h to use jmemmac.c. + +You can also use jmemnobs.c, if you don't care about handling images larger +than available memory. If you use any memory manager back end other than +jmemmac.c, we recommend replacing "malloc" and "free" by "NewPtr" and +"DisposePtr", because Mac C libraries often have peculiar implementations of +malloc/free. (For instance, free() may not return the freed space to the +Mac Memory Manager. This is undesirable for the IJG code because jmemmgr.c +already clumps space requests.) + + +Macintosh, Metrowerks CodeWarrior: + +The Unix-command-line-style interface can be used by defining USE_CCOMMAND. +You'll also need to define TWO_FILE_COMMANDLINE to avoid stdin/stdout. +This means that when using the cjpeg/djpeg programs, you'll have to type the +input and output file names in the "Arguments" text-edit box, rather than +using the file radio buttons. (Perhaps USE_FDOPEN or USE_SETMODE would +eliminate the problem, but I haven't heard from anyone who's tried it.) + +On 680x0 Macs, Metrowerks defines type "double" as a 10-byte IEEE extended +float. jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power +of 2. Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. + +The supplied configuration file jconfig.mac can be used for your jconfig.h; +it includes all the recommended symbol definitions. If you have AppleScript +installed, you can run the supplied script makeproj.mac to create CodeWarrior +project files for the library and the testbed applications, then build the +library and applications. (Thanks to Dan Sears and Don Agro for this nifty +hack, which saves us from trying to maintain CodeWarrior project files as part +of the IJG distribution...) + + +Macintosh, Think C: + +The documentation in Jim Brunner's "JPEG Convert" source code (see above) +includes detailed build instructions for Think C; it's probably somewhat +out of date for the current release, but may be helpful. + +If you want to build the minimal command line version, proceed as follows. +You'll have to prepare project files for the programs; we don't include any +in the distribution since they are not text files. Use the file lists in +any of the supplied makefiles as a guide. Also add the ANSI and Unix C +libraries in a separate segment. You may need to divide the JPEG files into +more than one segment; we recommend dividing compression and decompression +modules. Define USE_CCOMMAND in jconfig.h so that the ccommand() routine is +called. You must also define TWO_FILE_COMMANDLINE because stdin/stdout +don't handle binary data correctly. + +On 680x0 Macs, Think C defines type "double" as a 12-byte IEEE extended float. +jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power of 2. +Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. + +jconfig.mac should work as a jconfig.h configuration file for Think C, +but the makeproj.mac AppleScript script is specific to CodeWarrior. Sorry. + + +MIPS R3000: + +MIPS's cc version 1.31 has a rather nasty optimization bug. Don't use -O +if you have that compiler version. (Use "cc -V" to check the version.) +Note that the R3000 chip is found in workstations from DEC and others. + + +MS-DOS, generic comments for 16-bit compilers: + +The IJG code is designed to work well in 80x86 "small" or "medium" memory +models (i.e., data pointers are 16 bits unless explicitly declared "far"; +code pointers can be either size). You may be able to use small model to +compile cjpeg or djpeg by itself, but you will probably have to use medium +model for any larger application. This won't make much difference in +performance. You *will* take a noticeable performance hit if you use a +large-data memory model, and you should avoid "huge" model if at all +possible. Be sure that NEED_FAR_POINTERS is defined in jconfig.h if you use +a small-data memory model; be sure it is NOT defined if you use a large-data +model. (The supplied makefiles and jconfig files for Borland and Microsoft C +compile in medium model and define NEED_FAR_POINTERS.) + +The DOS-specific memory manager, jmemdos.c, should be used if possible. +It needs some assembly-code routines which are in jmemdosa.asm; make sure +your makefile assembles that file and includes it in the library. If you +don't have a suitable assembler, you can get pre-assembled object files for +jmemdosa by FTP from ftp.uu.net:/graphics/jpeg/jdosaobj.zip. (DOS-oriented +distributions of the IJG source code often include these object files.) + +When using jmemdos.c, jconfig.h must define USE_MSDOS_MEMMGR and must set +MAX_ALLOC_CHUNK to less than 64K (65520L is a typical value). If your +C library's far-heap malloc() can't allocate blocks that large, reduce +MAX_ALLOC_CHUNK to whatever it can handle. + +If you can't use jmemdos.c for some reason --- for example, because you +don't have an assembler to assemble jmemdosa.asm --- you'll have to fall +back to jmemansi.c or jmemname.c. You'll probably still need to set +MAX_ALLOC_CHUNK in jconfig.h, because most DOS C libraries won't malloc() +more than 64K at a time. IMPORTANT: if you use jmemansi.c or jmemname.c, +you will have to compile in a large-data memory model in order to get the +right stdio library. Too bad. + +wrjpgcom needs to be compiled in large model, because it malloc()s a 64KB +work area to hold the comment text. If your C library's malloc can't +handle that, reduce MAX_COM_LENGTH as necessary in wrjpgcom.c. + +Most MS-DOS compilers treat stdin/stdout as text files, so you must use +two-file command line style. But if your compiler has either fdopen() or +setmode(), you can use one-file style if you like. To do this, define +USE_SETMODE or USE_FDOPEN so that stdin/stdout will be set to binary mode. +(USE_SETMODE seems to work with more DOS compilers than USE_FDOPEN.) You +should test that I/O through stdin/stdout produces the same results as I/O +to explicitly named files... the "make test" procedures in the supplied +makefiles do NOT use stdin/stdout. + + +MS-DOS, generic comments for 32-bit compilers: + +None of the above comments about memory models apply if you are using a +32-bit flat-memory-space environment, such as DJGPP or Watcom C. (And you +should use one if you have it, as performance will be much better than +8086-compatible code!) For flat-memory-space compilers, do NOT define +NEED_FAR_POINTERS, and do NOT use jmemdos.c. Use jmemnobs.c if the +environment supplies adequate virtual memory, otherwise use jmemansi.c or +jmemname.c. + +You'll still need to be careful about binary I/O through stdin/stdout. +See the last paragraph of the previous section. + + +MS-DOS, Borland C: + +Be sure to convert all the source files to DOS text format (CR/LF newlines). +Although Borland C will often work OK with unmodified Unix (LF newlines) +source files, sometimes it will give bogus compile errors. +"Illegal character '#'" is the most common such error. (This is true with +Borland C 3.1, but perhaps is fixed in newer releases.) + +If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. +jconfig.bcc already includes #define USE_SETMODE to make this work. +(fdopen does not work correctly.) + + +MS-DOS, Microsoft C: + +makefile.mc6 works with Microsoft C, DOS Visual C++, etc. It should only +be used if you want to build a 16-bit (small or medium memory model) program. + +If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. +jconfig.mc6 already includes #define USE_SETMODE to make this work. +(fdopen does not work correctly.) + +Note that this makefile assumes that the working copy of itself is called +"makefile". If you want to call it something else, say "makefile.mak", +be sure to adjust the dependency line that reads "$(RFILE) : makefile". +Otherwise the make will fail because it doesn't know how to create "makefile". +Worse, some releases of Microsoft's make utilities give an incorrect error +message in this situation. + +Old versions of MS C fail with an "out of macro expansion space" error +because they can't cope with the macro TRACEMS8 (defined in jerror.h). +If this happens to you, the easiest solution is to change TRACEMS8 to +expand to nothing. You'll lose the ability to dump out JPEG coefficient +tables with djpeg -debug -debug, but at least you can compile. + +Original MS C 6.0 is very buggy; it compiles incorrect code unless you turn +off optimization entirely (remove -O from CFLAGS). 6.00A is better, but it +still generates bad code if you enable loop optimizations (-Ol or -Ox). + +MS C 8.0 crashes when compiling jquant1.c with optimization switch /Oo ... +which is on by default. To work around this bug, compile that one file +with /Oo-. + + +Microsoft Windows (all versions), generic comments: + +Some Windows system include files define typedef boolean as "unsigned char". +The IJG code also defines typedef boolean, but we make it "int" by default. +This doesn't affect the IJG programs because we don't import those Windows +include files. But if you use the JPEG library in your own program, and some +of your program's files import one definition of boolean while some import the +other, you can get all sorts of mysterious problems. A good preventive step +is to make the IJG library use "unsigned char" for boolean. To do that, +add something like this to your jconfig.h file: + /* Define "boolean" as unsigned char, not int, per Windows custom */ + #ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ + typedef unsigned char boolean; + #endif + #define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ +(This is already in jconfig.vc, by the way.) + +windef.h contains the declarations + #define far + #define FAR far +Since jmorecfg.h tries to define FAR as empty, you may get a compiler +warning if you include both jpeglib.h and windef.h (which windows.h +includes). To suppress the warning, you can put "#ifndef FAR"/"#endif" +around the line "#define FAR" in jmorecfg.h. +(Something like this is already in jmorecfg.h, by the way.) + +When using the library in a Windows application, you will almost certainly +want to modify or replace the error handler module jerror.c, since our +default error handler does a couple of inappropriate things: + 1. it tries to write error and warning messages on stderr; + 2. in event of a fatal error, it exits by calling exit(). + +A simple stopgap solution for problem 1 is to replace the line + fprintf(stderr, "%s\n", buffer); +(in output_message in jerror.c) with + MessageBox(GetActiveWindow(),buffer,"JPEG Error",MB_OK|MB_ICONERROR); +It's highly recommended that you at least do that much, since otherwise +error messages will disappear into nowhere. (Beginning with IJG v6b, this +code is already present in jerror.c; just define USE_WINDOWS_MESSAGEBOX in +jconfig.h to enable it.) + +The proper solution for problem 2 is to return control to your calling +application after a library error. This can be done with the setjmp/longjmp +technique discussed in libjpeg.txt and illustrated in example.c. (NOTE: +some older Windows C compilers provide versions of setjmp/longjmp that +don't actually work under Windows. You may need to use the Windows system +functions Catch and Throw instead.) + +The recommended memory manager under Windows is jmemnobs.c; in other words, +let Windows do any virtual memory management needed. You should NOT use +jmemdos.c nor jmemdosa.asm under Windows. + +For Windows 3.1, we recommend compiling in medium or large memory model; +for newer Windows versions, use a 32-bit flat memory model. (See the MS-DOS +sections above for more info about memory models.) In the 16-bit memory +models only, you'll need to put + #define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ +into jconfig.h to limit allocation chunks to 64Kb. (Without that, you'd +have to use huge memory model, which slows things down unnecessarily.) +jmemnobs.c works without modification in large or flat memory models, but to +use medium model, you need to modify its jpeg_get_large and jpeg_free_large +routines to allocate far memory. In any case, you might like to replace +its calls to malloc and free with direct calls on Windows memory allocation +functions. + +You may also want to modify jdatasrc.c and jdatadst.c to use Windows file +operations rather than fread/fwrite. This is only necessary if your C +compiler doesn't provide a competent implementation of C stdio functions. + +You might want to tweak the RGB_xxx macros in jmorecfg.h so that the library +will accept or deliver color pixels in BGR sample order, not RGB; BGR order +is usually more convenient under Windows. Note that this change will break +the sample applications cjpeg/djpeg, but the library itself works fine. + + +Many people want to convert the IJG library into a DLL. This is reasonably +straightforward, but watch out for the following: + + 1. Don't try to compile as a DLL in small or medium memory model; use +large model, or even better, 32-bit flat model. Many places in the IJG code +assume the address of a local variable is an ordinary (not FAR) pointer; +that isn't true in a medium-model DLL. + + 2. Microsoft C cannot pass file pointers between applications and DLLs. +(See Microsoft Knowledge Base, PSS ID Number Q50336.) So jdatasrc.c and +jdatadst.c don't work if you open a file in your application and then pass +the pointer to the DLL. One workaround is to make jdatasrc.c/jdatadst.c +part of your main application rather than part of the DLL. + + 3. You'll probably need to modify the macros GLOBAL() and EXTERN() to +attach suitable linkage keywords to the exported routine names. Similarly, +you'll want to modify METHODDEF() and JMETHOD() to ensure function pointers +are declared in a way that lets application routines be called back through +the function pointers. These macros are in jmorecfg.h. Typical definitions +for a 16-bit DLL are: + #define GLOBAL(type) type _far _pascal _loadds _export + #define EXTERN(type) extern type _far _pascal _loadds + #define METHODDEF(type) static type _far _pascal + #define JMETHOD(type,methodname,arglist) \ + type (_far _pascal *methodname) arglist +For a 32-bit DLL you may want something like + #define GLOBAL(type) __declspec(dllexport) type + #define EXTERN(type) extern __declspec(dllexport) type +Although not all the GLOBAL routines are actually intended to be called by +the application, the performance cost of making them all DLL entry points is +negligible. + +The unmodified IJG library presents a very C-specific application interface, +so the resulting DLL is only usable from C or C++ applications. There has +been some talk of writing wrapper code that would present a simpler interface +usable from other languages, such as Visual Basic. This is on our to-do list +but hasn't been very high priority --- any volunteers out there? + + +Microsoft Windows, Borland C: + +The provided jconfig.bcc should work OK in a 32-bit Windows environment, +but you'll need to tweak it in a 16-bit environment (you'd need to define +NEED_FAR_POINTERS and MAX_ALLOC_CHUNK). Beware that makefile.bcc will need +alteration if you want to use it for Windows --- in particular, you should +use jmemnobs.c not jmemdos.c under Windows. + +Borland C++ 4.5 fails with an internal compiler error when trying to compile +jdmerge.c in 32-bit mode. If enough people complain, perhaps Borland will fix +it. In the meantime, the simplest known workaround is to add a redundant +definition of the variable range_limit in h2v1_merged_upsample(), at the head +of the block that handles odd image width (about line 268 in v6 jdmerge.c): + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + register JSAMPLE * range_limit = cinfo->sample_range_limit; /* ADD THIS */ + cb = GETJSAMPLE(*inptr1); +Pretty bizarre, especially since the very similar routine h2v2_merged_upsample +doesn't trigger the bug. +Recent reports suggest that this bug does not occur with "bcc32a" (the +Pentium-optimized version of the compiler). + +Another report from a user of Borland C 4.5 was that incorrect code (leading +to a color shift in processed images) was produced if any of the following +optimization switch combinations were used: + -Ot -Og + -Ot -Op + -Ot -Om +So try backing off on optimization if you see such a problem. (Are there +several different releases all numbered "4.5"??) + + +Microsoft Windows, Microsoft Visual C++: + +jconfig.vc should work OK with any Microsoft compiler for a 32-bit memory +model. makefile.vc is intended for command-line use. (If you are using +the Developer Studio environment, you may prefer the DevStudio project +files; see below.) + +v7 adds extern "C" to jpeglib.h. This avoids the need to put extern "C" +{ ... } around #include "jpeglib.h" in your C++ application. +You can also force VC++ to treat the library as C++ code by renaming +all the *.c files to *.cpp (and adjusting the makefile to match). +In this case you also need to define the symbol DONT_USE_EXTERN_C in +the configuration to prevent jpeglib.h from using extern "C". + + +Microsoft Windows, Microsoft Visual C++ 6 Developer Studio: + +We include makefiles that should work as project files in DevStudio 6.0 or +later. There is a library makefile that builds the IJG library as a static +Win32 library, and application makefiles that build the sample applications +as Win32 console applications. (Even if you only want the library, we +recommend building the applications so that you can run the self-test.) + +To use: +1. Copy jconfig.vc to jconfig.h, makejdsw.vc6 to jpeg.dsw, + makeadsw.vc6 to apps.dsw, makejmak.vc6 to jpeg.mak, + makejdep.vc6 to jpeg.dep, makejdsp.vc6 to jpeg.dsp, + makecmak.vc6 to cjpeg.mak, makecdep.vc6 to cjpeg.dep, + makecdsp.vc6 to cjpeg.dsp, makedmak.vc6 to djpeg.mak, + makeddep.vc6 to djpeg.dep, makeddsp.vc6 to djpeg.dsp, + maketmak.vc6 to jpegtran.mak, maketdep.vc6 to jpegtran.dep, + maketdsp.vc6 to jpegtran.dsp, makermak.vc6 to rdjpgcom.mak, + makerdep.vc6 to rdjpgcom.dep, makerdsp.vc6 to rdjpgcom.dsp, + makewmak.vc6 to wrjpgcom.mak, makewdep.vc6 to wrjpgcom.dep, and + makewdsp.vc6 to wrjpgcom.dsp. (Note that the renaming is critical!) +2. Click on jpeg.dsw and apps.dsw to load the project workspaces. + (If you are using DevStudio more recent than 6.0, you'll probably + get a message saying that the project files are being updated.) +3. Build the library project, then the applications project. +4. Move the application .exe files from `app`\Release to an + appropriate location on your path. +5. To perform the self-test, execute the command line + NMAKE /f makefile.vc test + + +Microsoft Windows, Microsoft Visual C++ 2008 Developer Studio (v9): + +We include makefiles that should work as project files in Visual Studio +2008 or later. There is a library makefile that builds the IJG library +as a static Win32 library, and application makefiles that build the sample +applications as Win32 console applications. (Even if you only want the +library, we recommend building the applications so that you can run the +self-test.) + +To use: +1. Copy jconfig.vc to jconfig.h, makejsln.vc9 to jpeg.sln, + makeasln.vc9 to apps.sln, makejvcp.vc9 to jpeg.vcproj, + makecvcp.vc9 to cjpeg.vcproj, makedvcp.vc9 to djpeg.vcproj, + maketvcp.vc9 to jpegtran.vcproj, makervcp.vc9 to rdjpgcom.vcproj, and + makewvcp.vc9 to wrjpgcom.vcproj. (Note that the renaming is critical!) +2. Click on jpeg.sln and apps.sln to load the project solutions. + (If you are using Visual Studio more recent than 2008 (v9), you'll + probably get a message saying that the project files are being + updated.) +3. Build the library project, then the applications project. +4. Move the application .exe files from `app`\Release to an + appropriate location on your path. +5. To perform the self-test, execute the command line + NMAKE /f makefile.vc test + + +OS/2, Borland C++: + +Watch out for optimization bugs in older Borland compilers; you may need +to back off the optimization switch settings. See the comments in +makefile.bcc. + + +SGI: + +On some SGI systems, you may need to set "AR2= ar -ts" in the Makefile. +If you are using configure, you can do this by saying + ./configure RANLIB='ar -ts' +This change is not needed on all SGIs. Use it only if the make fails at the +stage of linking the completed programs. + +On the MIPS R4000 architecture (Indy, etc.), the compiler option "-mips2" +reportedly speeds up the float DCT method substantially, enough to make it +faster than the default int method (but still slower than the fast int +method). If you use -mips2, you may want to alter the default DCT method to +be float. To do this, put "#define JDCT_DEFAULT JDCT_FLOAT" in jconfig.h. + + +VMS: + +On an Alpha/VMS system with MMS, be sure to use the "/Marco=Alpha=1" +qualifier with MMS when building the JPEG package. + +VAX/VMS v5.5-1 may have problems with the test step of the build procedure +reporting differences when it compares the original and test images. If the +error points to the last block of the files, it is most likely bogus and may +be safely ignored. It seems to be because the files are Stream_LF and +Backup/Compare has difficulty with the (presumably) null padded files. +This problem was not observed on VAX/VMS v6.1 or AXP/VMS v6.1. diff --git a/3rdparty/openctm/tools/jpeg/jaricom.c b/3rdparty/openctm/tools/jpeg/jaricom.c new file mode 100644 index 000000000..23d73c387 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jaricom.c @@ -0,0 +1,148 @@ +/* + * jaricom.c + * + * Developed 1997 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains probability estimation tables for common use in + * arithmetic entropy encoding and decoding routines. + * + * This data represents Table D.2 in the JPEG spec (ISO/IEC IS 10918-1 + * and CCITT Recommendation ITU-T T.81) and Table 24 in the JBIG spec + * (ISO/IEC IS 11544 and CCITT Recommendation ITU-T T.82). + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +/* The following #define specifies the packing of the four components + * into the compact INT32 representation. + * Note that this formula must match the actual arithmetic encoder + * and decoder implementation. The implementation has to be changed + * if this formula is changed. + * The current organization is leaned on Markus Kuhn's JBIG + * implementation (jbig_tab.c). + */ + +#define V(a,b,c,d) (((INT32)a << 16) | ((INT32)c << 8) | ((INT32)d << 7) | b) + +const INT32 jaritab[113] = { +/* + * Index, Qe_Value, Next_Index_LPS, Next_Index_MPS, Switch_MPS + */ +/* 0 */ V( 0x5a1d, 1, 1, 1 ), +/* 1 */ V( 0x2586, 14, 2, 0 ), +/* 2 */ V( 0x1114, 16, 3, 0 ), +/* 3 */ V( 0x080b, 18, 4, 0 ), +/* 4 */ V( 0x03d8, 20, 5, 0 ), +/* 5 */ V( 0x01da, 23, 6, 0 ), +/* 6 */ V( 0x00e5, 25, 7, 0 ), +/* 7 */ V( 0x006f, 28, 8, 0 ), +/* 8 */ V( 0x0036, 30, 9, 0 ), +/* 9 */ V( 0x001a, 33, 10, 0 ), +/* 10 */ V( 0x000d, 35, 11, 0 ), +/* 11 */ V( 0x0006, 9, 12, 0 ), +/* 12 */ V( 0x0003, 10, 13, 0 ), +/* 13 */ V( 0x0001, 12, 13, 0 ), +/* 14 */ V( 0x5a7f, 15, 15, 1 ), +/* 15 */ V( 0x3f25, 36, 16, 0 ), +/* 16 */ V( 0x2cf2, 38, 17, 0 ), +/* 17 */ V( 0x207c, 39, 18, 0 ), +/* 18 */ V( 0x17b9, 40, 19, 0 ), +/* 19 */ V( 0x1182, 42, 20, 0 ), +/* 20 */ V( 0x0cef, 43, 21, 0 ), +/* 21 */ V( 0x09a1, 45, 22, 0 ), +/* 22 */ V( 0x072f, 46, 23, 0 ), +/* 23 */ V( 0x055c, 48, 24, 0 ), +/* 24 */ V( 0x0406, 49, 25, 0 ), +/* 25 */ V( 0x0303, 51, 26, 0 ), +/* 26 */ V( 0x0240, 52, 27, 0 ), +/* 27 */ V( 0x01b1, 54, 28, 0 ), +/* 28 */ V( 0x0144, 56, 29, 0 ), +/* 29 */ V( 0x00f5, 57, 30, 0 ), +/* 30 */ V( 0x00b7, 59, 31, 0 ), +/* 31 */ V( 0x008a, 60, 32, 0 ), +/* 32 */ V( 0x0068, 62, 33, 0 ), +/* 33 */ V( 0x004e, 63, 34, 0 ), +/* 34 */ V( 0x003b, 32, 35, 0 ), +/* 35 */ V( 0x002c, 33, 9, 0 ), +/* 36 */ V( 0x5ae1, 37, 37, 1 ), +/* 37 */ V( 0x484c, 64, 38, 0 ), +/* 38 */ V( 0x3a0d, 65, 39, 0 ), +/* 39 */ V( 0x2ef1, 67, 40, 0 ), +/* 40 */ V( 0x261f, 68, 41, 0 ), +/* 41 */ V( 0x1f33, 69, 42, 0 ), +/* 42 */ V( 0x19a8, 70, 43, 0 ), +/* 43 */ V( 0x1518, 72, 44, 0 ), +/* 44 */ V( 0x1177, 73, 45, 0 ), +/* 45 */ V( 0x0e74, 74, 46, 0 ), +/* 46 */ V( 0x0bfb, 75, 47, 0 ), +/* 47 */ V( 0x09f8, 77, 48, 0 ), +/* 48 */ V( 0x0861, 78, 49, 0 ), +/* 49 */ V( 0x0706, 79, 50, 0 ), +/* 50 */ V( 0x05cd, 48, 51, 0 ), +/* 51 */ V( 0x04de, 50, 52, 0 ), +/* 52 */ V( 0x040f, 50, 53, 0 ), +/* 53 */ V( 0x0363, 51, 54, 0 ), +/* 54 */ V( 0x02d4, 52, 55, 0 ), +/* 55 */ V( 0x025c, 53, 56, 0 ), +/* 56 */ V( 0x01f8, 54, 57, 0 ), +/* 57 */ V( 0x01a4, 55, 58, 0 ), +/* 58 */ V( 0x0160, 56, 59, 0 ), +/* 59 */ V( 0x0125, 57, 60, 0 ), +/* 60 */ V( 0x00f6, 58, 61, 0 ), +/* 61 */ V( 0x00cb, 59, 62, 0 ), +/* 62 */ V( 0x00ab, 61, 63, 0 ), +/* 63 */ V( 0x008f, 61, 32, 0 ), +/* 64 */ V( 0x5b12, 65, 65, 1 ), +/* 65 */ V( 0x4d04, 80, 66, 0 ), +/* 66 */ V( 0x412c, 81, 67, 0 ), +/* 67 */ V( 0x37d8, 82, 68, 0 ), +/* 68 */ V( 0x2fe8, 83, 69, 0 ), +/* 69 */ V( 0x293c, 84, 70, 0 ), +/* 70 */ V( 0x2379, 86, 71, 0 ), +/* 71 */ V( 0x1edf, 87, 72, 0 ), +/* 72 */ V( 0x1aa9, 87, 73, 0 ), +/* 73 */ V( 0x174e, 72, 74, 0 ), +/* 74 */ V( 0x1424, 72, 75, 0 ), +/* 75 */ V( 0x119c, 74, 76, 0 ), +/* 76 */ V( 0x0f6b, 74, 77, 0 ), +/* 77 */ V( 0x0d51, 75, 78, 0 ), +/* 78 */ V( 0x0bb6, 77, 79, 0 ), +/* 79 */ V( 0x0a40, 77, 48, 0 ), +/* 80 */ V( 0x5832, 80, 81, 1 ), +/* 81 */ V( 0x4d1c, 88, 82, 0 ), +/* 82 */ V( 0x438e, 89, 83, 0 ), +/* 83 */ V( 0x3bdd, 90, 84, 0 ), +/* 84 */ V( 0x34ee, 91, 85, 0 ), +/* 85 */ V( 0x2eae, 92, 86, 0 ), +/* 86 */ V( 0x299a, 93, 87, 0 ), +/* 87 */ V( 0x2516, 86, 71, 0 ), +/* 88 */ V( 0x5570, 88, 89, 1 ), +/* 89 */ V( 0x4ca9, 95, 90, 0 ), +/* 90 */ V( 0x44d9, 96, 91, 0 ), +/* 91 */ V( 0x3e22, 97, 92, 0 ), +/* 92 */ V( 0x3824, 99, 93, 0 ), +/* 93 */ V( 0x32b4, 99, 94, 0 ), +/* 94 */ V( 0x2e17, 93, 86, 0 ), +/* 95 */ V( 0x56a8, 95, 96, 1 ), +/* 96 */ V( 0x4f46, 101, 97, 0 ), +/* 97 */ V( 0x47e5, 102, 98, 0 ), +/* 98 */ V( 0x41cf, 103, 99, 0 ), +/* 99 */ V( 0x3c3d, 104, 100, 0 ), +/* 100 */ V( 0x375e, 99, 93, 0 ), +/* 101 */ V( 0x5231, 105, 102, 0 ), +/* 102 */ V( 0x4c0f, 106, 103, 0 ), +/* 103 */ V( 0x4639, 107, 104, 0 ), +/* 104 */ V( 0x415e, 103, 99, 0 ), +/* 105 */ V( 0x5627, 105, 106, 1 ), +/* 106 */ V( 0x50e7, 108, 107, 0 ), +/* 107 */ V( 0x4b85, 109, 103, 0 ), +/* 108 */ V( 0x5597, 110, 109, 0 ), +/* 109 */ V( 0x504f, 111, 107, 0 ), +/* 110 */ V( 0x5a10, 110, 111, 1 ), +/* 111 */ V( 0x5522, 112, 109, 0 ), +/* 112 */ V( 0x59eb, 112, 111, 1 ) +}; diff --git a/3rdparty/openctm/tools/jpeg/jcapimin.c b/3rdparty/openctm/tools/jpeg/jcapimin.c new file mode 100644 index 000000000..4cac19490 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcapimin.c @@ -0,0 +1,282 @@ +/* + * jcapimin.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the compression half + * of the JPEG library. These are the "minimum" API routines that may be + * needed in either the normal full-compression case or the transcoding-only + * case. + * + * Most of the routines intended to be called directly by an application + * are in this file or in jcapistd.c. But also see jcparam.c for + * parameter-setup helper routines, jcomapi.c for routines shared by + * compression and decompression, and jctrans.c for the transcoding case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Initialization of a JPEG compression object. + * The error manager must already be set up (in case memory manager fails). + */ + +GLOBAL(void) +jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize) +{ + int i; + + /* Guard against version mismatches between library and caller. */ + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + if (version != JPEG_LIB_VERSION) + ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); + if (structsize != SIZEOF(struct jpeg_compress_struct)) + ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, + (int) SIZEOF(struct jpeg_compress_struct), (int) structsize); + + /* For debugging purposes, we zero the whole master structure. + * But the application has already set the err pointer, and may have set + * client_data, so we have to save and restore those fields. + * Note: if application hasn't set client_data, tools like Purify may + * complain here. + */ + { + struct jpeg_error_mgr * err = cinfo->err; + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct)); + cinfo->err = err; + cinfo->client_data = client_data; + } + cinfo->is_decompressor = FALSE; + + /* Initialize a memory manager instance for this object */ + jinit_memory_mgr((j_common_ptr) cinfo); + + /* Zero out pointers to permanent structures. */ + cinfo->progress = NULL; + cinfo->dest = NULL; + + cinfo->comp_info = NULL; + + for (i = 0; i < NUM_QUANT_TBLS; i++) { + cinfo->quant_tbl_ptrs[i] = NULL; + cinfo->q_scale_factor[i] = 100; + } + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + cinfo->dc_huff_tbl_ptrs[i] = NULL; + cinfo->ac_huff_tbl_ptrs[i] = NULL; + } + + cinfo->script_space = NULL; + + cinfo->input_gamma = 1.0; /* in case application forgets */ + + /* OK, I'm ready */ + cinfo->global_state = CSTATE_START; +} + + +/* + * Destruction of a JPEG compression object + */ + +GLOBAL(void) +jpeg_destroy_compress (j_compress_ptr cinfo) +{ + jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Abort processing of a JPEG compression operation, + * but don't destroy the object itself. + */ + +GLOBAL(void) +jpeg_abort_compress (j_compress_ptr cinfo) +{ + jpeg_abort((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Forcibly suppress or un-suppress all quantization and Huffman tables. + * Marks all currently defined tables as already written (if suppress) + * or not written (if !suppress). This will control whether they get emitted + * by a subsequent jpeg_start_compress call. + * + * This routine is exported for use by applications that want to produce + * abbreviated JPEG datastreams. It logically belongs in jcparam.c, but + * since it is called by jpeg_start_compress, we put it here --- otherwise + * jcparam.o would be linked whether the application used it or not. + */ + +GLOBAL(void) +jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress) +{ + int i; + JQUANT_TBL * qtbl; + JHUFF_TBL * htbl; + + for (i = 0; i < NUM_QUANT_TBLS; i++) { + if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL) + qtbl->sent_table = suppress; + } + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL) + htbl->sent_table = suppress; + if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL) + htbl->sent_table = suppress; + } +} + + +/* + * Finish JPEG compression. + * + * If a multipass operating mode was selected, this may do a great deal of + * work including most of the actual output. + */ + +GLOBAL(void) +jpeg_finish_compress (j_compress_ptr cinfo) +{ + JDIMENSION iMCU_row; + + if (cinfo->global_state == CSTATE_SCANNING || + cinfo->global_state == CSTATE_RAW_OK) { + /* Terminate first pass */ + if (cinfo->next_scanline < cinfo->image_height) + ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); + (*cinfo->master->finish_pass) (cinfo); + } else if (cinfo->global_state != CSTATE_WRCOEFS) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Perform any remaining passes */ + while (! cinfo->master->is_last_pass) { + (*cinfo->master->prepare_for_pass) (cinfo); + for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) { + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) iMCU_row; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + /* We bypass the main controller and invoke coef controller directly; + * all work is being done from the coefficient buffer. + */ + if (! (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + } + (*cinfo->master->finish_pass) (cinfo); + } + /* Write EOI, do final cleanup */ + (*cinfo->marker->write_file_trailer) (cinfo); + (*cinfo->dest->term_destination) (cinfo); + /* We can use jpeg_abort to release memory and reset global_state */ + jpeg_abort((j_common_ptr) cinfo); +} + + +/* + * Write a special marker. + * This is only recommended for writing COM or APPn markers. + * Must be called after jpeg_start_compress() and before + * first call to jpeg_write_scanlines() or jpeg_write_raw_data(). + */ + +GLOBAL(void) +jpeg_write_marker (j_compress_ptr cinfo, int marker, + const JOCTET *dataptr, unsigned int datalen) +{ + JMETHOD(void, write_marker_byte, (j_compress_ptr info, int val)); + + if (cinfo->next_scanline != 0 || + (cinfo->global_state != CSTATE_SCANNING && + cinfo->global_state != CSTATE_RAW_OK && + cinfo->global_state != CSTATE_WRCOEFS)) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); + write_marker_byte = cinfo->marker->write_marker_byte; /* copy for speed */ + while (datalen--) { + (*write_marker_byte) (cinfo, *dataptr); + dataptr++; + } +} + +/* Same, but piecemeal. */ + +GLOBAL(void) +jpeg_write_m_header (j_compress_ptr cinfo, int marker, unsigned int datalen) +{ + if (cinfo->next_scanline != 0 || + (cinfo->global_state != CSTATE_SCANNING && + cinfo->global_state != CSTATE_RAW_OK && + cinfo->global_state != CSTATE_WRCOEFS)) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); +} + +GLOBAL(void) +jpeg_write_m_byte (j_compress_ptr cinfo, int val) +{ + (*cinfo->marker->write_marker_byte) (cinfo, val); +} + + +/* + * Alternate compression function: just write an abbreviated table file. + * Before calling this, all parameters and a data destination must be set up. + * + * To produce a pair of files containing abbreviated tables and abbreviated + * image data, one would proceed as follows: + * + * initialize JPEG object + * set JPEG parameters + * set destination to table file + * jpeg_write_tables(cinfo); + * set destination to image file + * jpeg_start_compress(cinfo, FALSE); + * write data... + * jpeg_finish_compress(cinfo); + * + * jpeg_write_tables has the side effect of marking all tables written + * (same as jpeg_suppress_tables(..., TRUE)). Thus a subsequent start_compress + * will not re-emit the tables unless it is passed write_all_tables=TRUE. + */ + +GLOBAL(void) +jpeg_write_tables (j_compress_ptr cinfo) +{ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* (Re)initialize error mgr and destination modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->dest->init_destination) (cinfo); + /* Initialize the marker writer ... bit of a crock to do it here. */ + jinit_marker_writer(cinfo); + /* Write them tables! */ + (*cinfo->marker->write_tables_only) (cinfo); + /* And clean up. */ + (*cinfo->dest->term_destination) (cinfo); + /* + * In library releases up through v6a, we called jpeg_abort() here to free + * any working memory allocated by the destination manager and marker + * writer. Some applications had a problem with that: they allocated space + * of their own from the library memory manager, and didn't want it to go + * away during write_tables. So now we do nothing. This will cause a + * memory leak if an app calls write_tables repeatedly without doing a full + * compression cycle or otherwise resetting the JPEG object. However, that + * seems less bad than unexpectedly freeing memory in the normal case. + * An app that prefers the old behavior can call jpeg_abort for itself after + * each call to jpeg_write_tables(). + */ +} diff --git a/3rdparty/openctm/tools/jpeg/jcapistd.c b/3rdparty/openctm/tools/jpeg/jcapistd.c new file mode 100644 index 000000000..fed66caf1 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcapistd.c @@ -0,0 +1,161 @@ +/* + * jcapistd.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the compression half + * of the JPEG library. These are the "standard" API routines that are + * used in the normal full-compression case. They are not used by a + * transcoding-only application. Note that if an application links in + * jpeg_start_compress, it will end up linking in the entire compressor. + * We thus must separate this file from jcapimin.c to avoid linking the + * whole compression library into a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Compression initialization. + * Before calling this, all parameters and a data destination must be set up. + * + * We require a write_all_tables parameter as a failsafe check when writing + * multiple datastreams from the same compression object. Since prior runs + * will have left all the tables marked sent_table=TRUE, a subsequent run + * would emit an abbreviated stream (no tables) by default. This may be what + * is wanted, but for safety's sake it should not be the default behavior: + * programmers should have to make a deliberate choice to emit abbreviated + * images. Therefore the documentation and examples should encourage people + * to pass write_all_tables=TRUE; then it will take active thought to do the + * wrong thing. + */ + +GLOBAL(void) +jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables) +{ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (write_all_tables) + jpeg_suppress_tables(cinfo, FALSE); /* mark all tables to be written */ + + /* (Re)initialize error mgr and destination modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->dest->init_destination) (cinfo); + /* Perform master selection of active modules */ + jinit_compress_master(cinfo); + /* Set up for the first pass */ + (*cinfo->master->prepare_for_pass) (cinfo); + /* Ready for application to drive first pass through jpeg_write_scanlines + * or jpeg_write_raw_data. + */ + cinfo->next_scanline = 0; + cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING); +} + + +/* + * Write some scanlines of data to the JPEG compressor. + * + * The return value will be the number of lines actually written. + * This should be less than the supplied num_lines only in case that + * the data destination module has requested suspension of the compressor, + * or if more than image_height scanlines are passed in. + * + * Note: we warn about excess calls to jpeg_write_scanlines() since + * this likely signals an application programmer error. However, + * excess scanlines passed in the last valid call are *silently* ignored, + * so that the application need not adjust num_lines for end-of-image + * when using a multiple-scanline buffer. + */ + +GLOBAL(JDIMENSION) +jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines, + JDIMENSION num_lines) +{ + JDIMENSION row_ctr, rows_left; + + if (cinfo->global_state != CSTATE_SCANNING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->next_scanline >= cinfo->image_height) + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->next_scanline; + cinfo->progress->pass_limit = (long) cinfo->image_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Give master control module another chance if this is first call to + * jpeg_write_scanlines. This lets output of the frame/scan headers be + * delayed so that application can write COM, etc, markers between + * jpeg_start_compress and jpeg_write_scanlines. + */ + if (cinfo->master->call_pass_startup) + (*cinfo->master->pass_startup) (cinfo); + + /* Ignore any extra scanlines at bottom of image. */ + rows_left = cinfo->image_height - cinfo->next_scanline; + if (num_lines > rows_left) + num_lines = rows_left; + + row_ctr = 0; + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines); + cinfo->next_scanline += row_ctr; + return row_ctr; +} + + +/* + * Alternate entry point to write raw data. + * Processes exactly one iMCU row per call, unless suspended. + */ + +GLOBAL(JDIMENSION) +jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, + JDIMENSION num_lines) +{ + JDIMENSION lines_per_iMCU_row; + + if (cinfo->global_state != CSTATE_RAW_OK) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->next_scanline >= cinfo->image_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->next_scanline; + cinfo->progress->pass_limit = (long) cinfo->image_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Give master control module another chance if this is first call to + * jpeg_write_raw_data. This lets output of the frame/scan headers be + * delayed so that application can write COM, etc, markers between + * jpeg_start_compress and jpeg_write_raw_data. + */ + if (cinfo->master->call_pass_startup) + (*cinfo->master->pass_startup) (cinfo); + + /* Verify that at least one iMCU row has been passed. */ + lines_per_iMCU_row = cinfo->max_v_samp_factor * DCTSIZE; + if (num_lines < lines_per_iMCU_row) + ERREXIT(cinfo, JERR_BUFFER_SIZE); + + /* Directly compress the row. */ + if (! (*cinfo->coef->compress_data) (cinfo, data)) { + /* If compressor did not consume the whole row, suspend processing. */ + return 0; + } + + /* OK, we processed one iMCU row. */ + cinfo->next_scanline += lines_per_iMCU_row; + return lines_per_iMCU_row; +} diff --git a/3rdparty/openctm/tools/jpeg/jcarith.c b/3rdparty/openctm/tools/jpeg/jcarith.c new file mode 100644 index 000000000..dc19d9505 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcarith.c @@ -0,0 +1,921 @@ +/* + * jcarith.c + * + * Developed 1997 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains portable arithmetic entropy encoding routines for JPEG + * (implementing the ISO/IEC IS 10918-1 and CCITT Recommendation ITU-T T.81). + * + * Both sequential and progressive modes are supported in this single module. + * + * Suspension is not currently supported in this module. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Expanded entropy encoder object for arithmetic encoding. */ + +typedef struct { + struct jpeg_entropy_encoder pub; /* public fields */ + + INT32 c; /* C register, base of coding interval, layout as in sec. D.1.3 */ + INT32 a; /* A register, normalized size of coding interval */ + INT32 sc; /* counter for stacked 0xFF values which might overflow */ + INT32 zc; /* counter for pending 0x00 output values which might * + * be discarded at the end ("Pacman" termination) */ + int ct; /* bit shift counter, determines when next byte will be written */ + int buffer; /* buffer for most recent output byte != 0xFF */ + + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ + int dc_context[MAX_COMPS_IN_SCAN]; /* context index for DC conditioning */ + + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + int next_restart_num; /* next restart number to write (0-7) */ + + /* Pointers to statistics areas (these workspaces have image lifespan) */ + unsigned char * dc_stats[NUM_ARITH_TBLS]; + unsigned char * ac_stats[NUM_ARITH_TBLS]; +} arith_entropy_encoder; + +typedef arith_entropy_encoder * arith_entropy_ptr; + +/* The following two definitions specify the allocation chunk size + * for the statistics area. + * According to sections F.1.4.4.1.3 and F.1.4.4.2, we need at least + * 49 statistics bins for DC, and 245 statistics bins for AC coding. + * Note that we use one additional AC bin for codings with fixed + * probability (0.5), thus the minimum number for AC is 246. + * + * We use a compact representation with 1 byte per statistics bin, + * thus the numbers directly represent byte sizes. + * This 1 byte per statistics bin contains the meaning of the MPS + * (more probable symbol) in the highest bit (mask 0x80), and the + * index into the probability estimation state machine table + * in the lower bits (mask 0x7F). + */ + +#define DC_STAT_BINS 64 +#define AC_STAT_BINS 256 + +/* NOTE: Uncomment the following #define if you want to use the + * given formula for calculating the AC conditioning parameter Kx + * for spectral selection progressive coding in section G.1.3.2 + * of the spec (Kx = Kmin + SRL (8 + Se - Kmin) 4). + * Although the spec and P&M authors claim that this "has proven + * to give good results for 8 bit precision samples", I'm not + * convinced yet that this is really beneficial. + * Early tests gave only very marginal compression enhancements + * (a few - around 5 or so - bytes even for very large files), + * which would turn out rather negative if we'd suppress the + * DAC (Define Arithmetic Conditioning) marker segments for + * the default parameters in the future. + * Note that currently the marker writing module emits 12-byte + * DAC segments for a full-component scan in a color image. + * This is not worth worrying about IMHO. However, since the + * spec defines the default values to be used if the tables + * are omitted (unlike Huffman tables, which are required + * anyway), one might optimize this behaviour in the future, + * and then it would be disadvantageous to use custom tables if + * they don't provide sufficient gain to exceed the DAC size. + * + * On the other hand, I'd consider it as a reasonable result + * that the conditioning has no significant influence on the + * compression performance. This means that the basic + * statistical model is already rather stable. + * + * Thus, at the moment, we use the default conditioning values + * anyway, and do not use the custom formula. + * +#define CALCULATE_SPECTRAL_CONDITIONING + */ + +/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. + * We assume that int right shift is unsigned if INT32 right shift is, + * which should be safe. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define ISHIFT_TEMPS int ishift_temp; +#define IRIGHT_SHIFT(x,shft) \ + ((ishift_temp = (x)) < 0 ? \ + (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \ + (ishift_temp >> (shft))) +#else +#define ISHIFT_TEMPS +#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +LOCAL(void) +emit_byte (int val, j_compress_ptr cinfo) +/* Write next output byte; we do not support suspension in this module. */ +{ + struct jpeg_destination_mgr * dest = cinfo->dest; + + *dest->next_output_byte++ = (JOCTET) val; + if (--dest->free_in_buffer == 0) + if (! (*dest->empty_output_buffer) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); +} + + +/* + * Finish up at the end of an arithmetic-compressed scan. + */ + +METHODDEF(void) +finish_pass (j_compress_ptr cinfo) +{ + arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; + INT32 temp; + + /* Section D.1.8: Termination of encoding */ + + /* Find the e->c in the coding interval with the largest + * number of trailing zero bits */ + if ((temp = (e->a - 1 + e->c) & 0xFFFF0000L) < e->c) + e->c = temp + 0x8000L; + else + e->c = temp; + /* Send remaining bytes to output */ + e->c <<= e->ct; + if (e->c & 0xF8000000L) { + /* One final overflow has to be handled */ + if (e->buffer >= 0) { + if (e->zc) + do emit_byte(0x00, cinfo); + while (--e->zc); + emit_byte(e->buffer + 1, cinfo); + if (e->buffer + 1 == 0xFF) + emit_byte(0x00, cinfo); + } + e->zc += e->sc; /* carry-over converts stacked 0xFF bytes to 0x00 */ + e->sc = 0; + } else { + if (e->buffer == 0) + ++e->zc; + else if (e->buffer >= 0) { + if (e->zc) + do emit_byte(0x00, cinfo); + while (--e->zc); + emit_byte(e->buffer, cinfo); + } + if (e->sc) { + if (e->zc) + do emit_byte(0x00, cinfo); + while (--e->zc); + do { + emit_byte(0xFF, cinfo); + emit_byte(0x00, cinfo); + } while (--e->sc); + } + } + /* Output final bytes only if they are not 0x00 */ + if (e->c & 0x7FFF800L) { + if (e->zc) /* output final pending zero bytes */ + do emit_byte(0x00, cinfo); + while (--e->zc); + emit_byte((e->c >> 19) & 0xFF, cinfo); + if (((e->c >> 19) & 0xFF) == 0xFF) + emit_byte(0x00, cinfo); + if (e->c & 0x7F800L) { + emit_byte((e->c >> 11) & 0xFF, cinfo); + if (((e->c >> 11) & 0xFF) == 0xFF) + emit_byte(0x00, cinfo); + } + } +} + + +/* + * The core arithmetic encoding routine (common in JPEG and JBIG). + * This needs to go as fast as possible. + * Machine-dependent optimization facilities + * are not utilized in this portable implementation. + * However, this code should be fairly efficient and + * may be a good base for further optimizations anyway. + * + * Parameter 'val' to be encoded may be 0 or 1 (binary decision). + * + * Note: I've added full "Pacman" termination support to the + * byte output routines, which is equivalent to the optional + * Discard_final_zeros procedure (Figure D.15) in the spec. + * Thus, we always produce the shortest possible output + * stream compliant to the spec (no trailing zero bytes, + * except for FF stuffing). + * + * I've also introduced a new scheme for accessing + * the probability estimation state machine table, + * derived from Markus Kuhn's JBIG implementation. + */ + +LOCAL(void) +arith_encode (j_compress_ptr cinfo, unsigned char *st, int val) +{ + extern const INT32 jaritab[]; + register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; + register unsigned char nl, nm; + register INT32 qe, temp; + register int sv; + + /* Fetch values from our compact representation of Table D.2: + * Qe values and probability estimation state machine + */ + sv = *st; + qe = jaritab[sv & 0x7F]; /* => Qe_Value */ + nl = qe & 0xFF; qe >>= 8; /* Next_Index_LPS + Switch_MPS */ + nm = qe & 0xFF; qe >>= 8; /* Next_Index_MPS */ + + /* Encode & estimation procedures per sections D.1.4 & D.1.5 */ + e->a -= qe; + if (val != (sv >> 7)) { + /* Encode the less probable symbol */ + if (e->a >= qe) { + /* If the interval size (qe) for the less probable symbol (LPS) + * is larger than the interval size for the MPS, then exchange + * the two symbols for coding efficiency, otherwise code the LPS + * as usual: */ + e->c += e->a; + e->a = qe; + } + *st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */ + } else { + /* Encode the more probable symbol */ + if (e->a >= 0x8000L) + return; /* A >= 0x8000 -> ready, no renormalization required */ + if (e->a < qe) { + /* If the interval size (qe) for the less probable symbol (LPS) + * is larger than the interval size for the MPS, then exchange + * the two symbols for coding efficiency: */ + e->c += e->a; + e->a = qe; + } + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + } + + /* Renormalization & data output per section D.1.6 */ + do { + e->a <<= 1; + e->c <<= 1; + if (--e->ct == 0) { + /* Another byte is ready for output */ + temp = e->c >> 19; + if (temp > 0xFF) { + /* Handle overflow over all stacked 0xFF bytes */ + if (e->buffer >= 0) { + if (e->zc) + do emit_byte(0x00, cinfo); + while (--e->zc); + emit_byte(e->buffer + 1, cinfo); + if (e->buffer + 1 == 0xFF) + emit_byte(0x00, cinfo); + } + e->zc += e->sc; /* carry-over converts stacked 0xFF bytes to 0x00 */ + e->sc = 0; + /* Note: The 3 spacer bits in the C register guarantee + * that the new buffer byte can't be 0xFF here + * (see page 160 in the P&M JPEG book). */ + e->buffer = temp & 0xFF; /* new output byte, might overflow later */ + } else if (temp == 0xFF) { + ++e->sc; /* stack 0xFF byte (which might overflow later) */ + } else { + /* Output all stacked 0xFF bytes, they will not overflow any more */ + if (e->buffer == 0) + ++e->zc; + else if (e->buffer >= 0) { + if (e->zc) + do emit_byte(0x00, cinfo); + while (--e->zc); + emit_byte(e->buffer, cinfo); + } + if (e->sc) { + if (e->zc) + do emit_byte(0x00, cinfo); + while (--e->zc); + do { + emit_byte(0xFF, cinfo); + emit_byte(0x00, cinfo); + } while (--e->sc); + } + e->buffer = temp & 0xFF; /* new output byte (can still overflow) */ + } + e->c &= 0x7FFFFL; + e->ct += 8; + } + } while (e->a < 0x8000L); +} + + +/* + * Emit a restart marker & resynchronize predictions. + */ + +LOCAL(void) +emit_restart (j_compress_ptr cinfo, int restart_num) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + int ci; + jpeg_component_info * compptr; + + finish_pass(cinfo); + + emit_byte(0xFF, cinfo); + emit_byte(JPEG_RST0 + restart_num, cinfo); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Re-initialize statistics areas */ + if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS); + /* Reset DC predictions to 0 */ + entropy->last_dc_val[ci] = 0; + entropy->dc_context[ci] = 0; + } + if (cinfo->progressive_mode == 0 || cinfo->Ss) { + MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS); + } + } + + /* Reset arithmetic encoding variables */ + entropy->c = 0; + entropy->a = 0x10000L; + entropy->sc = 0; + entropy->zc = 0; + entropy->ct = 11; + entropy->buffer = -1; /* empty */ +} + + +/* + * MCU encoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + JBLOCKROW block; + unsigned char *st; + int blkn, ci, tbl; + int v, v2, m; + ISHIFT_TEMPS + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + emit_restart(cinfo, entropy->next_restart_num); + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + tbl = cinfo->cur_comp_info[ci]->dc_tbl_no; + + /* Compute the DC value after the required point transform by Al. + * This is simply an arithmetic right shift. + */ + m = IRIGHT_SHIFT((int) ((*block)[0]), cinfo->Al); + + /* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */ + + /* Table F.4: Point to statistics bin S0 for DC coefficient coding */ + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + + /* Figure F.4: Encode_DC_DIFF */ + if ((v = m - entropy->last_dc_val[ci]) == 0) { + arith_encode(cinfo, st, 0); + entropy->dc_context[ci] = 0; /* zero diff category */ + } else { + entropy->last_dc_val[ci] = m; + arith_encode(cinfo, st, 1); + /* Figure F.6: Encoding nonzero value v */ + /* Figure F.7: Encoding the sign of v */ + if (v > 0) { + arith_encode(cinfo, st + 1, 0); /* Table F.4: SS = S0 + 1 */ + st += 2; /* Table F.4: SP = S0 + 2 */ + entropy->dc_context[ci] = 4; /* small positive diff category */ + } else { + v = -v; + arith_encode(cinfo, st + 1, 1); /* Table F.4: SS = S0 + 1 */ + st += 3; /* Table F.4: SN = S0 + 3 */ + entropy->dc_context[ci] = 8; /* small negative diff category */ + } + /* Figure F.8: Encoding the magnitude category of v */ + m = 0; + if (v -= 1) { + arith_encode(cinfo, st, 1); + m = 1; + v2 = v; + st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */ + while (v2 >>= 1) { + arith_encode(cinfo, st, 1); + m <<= 1; + st += 1; + } + } + arith_encode(cinfo, st, 0); + /* Section F.1.4.4.1.2: Establish dc_context conditioning category */ + if (m < (int) (((INT32) 1 << cinfo->arith_dc_L[tbl]) >> 1)) + entropy->dc_context[ci] = 0; /* zero diff category */ + else if (m > (int) (((INT32) 1 << cinfo->arith_dc_U[tbl]) >> 1)) + entropy->dc_context[ci] += 8; /* large diff category */ + /* Figure F.9: Encoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + arith_encode(cinfo, st, (m & v) ? 1 : 0); + } + } + + return TRUE; +} + + +/* + * MCU encoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + JBLOCKROW block; + unsigned char *st; + int tbl, k, ke; + int v, v2, m; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + emit_restart(cinfo, entropy->next_restart_num); + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + /* Encode the MCU data block */ + block = MCU_data[0]; + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + + /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */ + + /* Establish EOB (end-of-block) index */ + for (ke = cinfo->Se + 1; ke > 1; ke--) + /* We must apply the point transform by Al. For AC coefficients this + * is an integer division with rounding towards 0. To do this portably + * in C, we shift after obtaining the absolute value. + */ + if ((v = (*block)[jpeg_natural_order[ke - 1]]) >= 0) { + if (v >>= cinfo->Al) break; + } else { + v = -v; + if (v >>= cinfo->Al) break; + } + + /* Figure F.5: Encode_AC_Coefficients */ + for (k = cinfo->Ss; k < ke; k++) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + arith_encode(cinfo, st, 0); /* EOB decision */ + entropy->ac_stats[tbl][245] = 0; + for (;;) { + if ((v = (*block)[jpeg_natural_order[k]]) >= 0) { + if (v >>= cinfo->Al) { + arith_encode(cinfo, st + 1, 1); + arith_encode(cinfo, entropy->ac_stats[tbl] + 245, 0); + break; + } + } else { + v = -v; + if (v >>= cinfo->Al) { + arith_encode(cinfo, st + 1, 1); + arith_encode(cinfo, entropy->ac_stats[tbl] + 245, 1); + break; + } + } + arith_encode(cinfo, st + 1, 0); st += 3; k++; + } + st += 2; + /* Figure F.8: Encoding the magnitude category of v */ + m = 0; + if (v -= 1) { + arith_encode(cinfo, st, 1); + m = 1; + v2 = v; + if (v2 >>= 1) { + arith_encode(cinfo, st, 1); + m <<= 1; + st = entropy->ac_stats[tbl] + + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + while (v2 >>= 1) { + arith_encode(cinfo, st, 1); + m <<= 1; + st += 1; + } + } + } + arith_encode(cinfo, st, 0); + /* Figure F.9: Encoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + arith_encode(cinfo, st, (m & v) ? 1 : 0); + } + /* Encode EOB decision only if k <= cinfo->Se */ + if (k <= cinfo->Se) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + arith_encode(cinfo, st, 1); + } + + return TRUE; +} + + +/* + * MCU encoding for DC successive approximation refinement scan. + */ + +METHODDEF(boolean) +encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + unsigned char st[4]; + int Al, blkn; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + emit_restart(cinfo, entropy->next_restart_num); + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + Al = cinfo->Al; + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + st[0] = 0; /* use fixed probability estimation */ + /* We simply emit the Al'th bit of the DC coefficient value. */ + arith_encode(cinfo, st, (MCU_data[blkn][0][0] >> Al) & 1); + } + + return TRUE; +} + + +/* + * MCU encoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + JBLOCKROW block; + unsigned char *st; + int tbl, k, ke, kex; + int v; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + emit_restart(cinfo, entropy->next_restart_num); + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + /* Encode the MCU data block */ + block = MCU_data[0]; + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + + /* Section G.1.3.3: Encoding of AC coefficients */ + + /* Establish EOB (end-of-block) index */ + for (ke = cinfo->Se + 1; ke > 1; ke--) + /* We must apply the point transform by Al. For AC coefficients this + * is an integer division with rounding towards 0. To do this portably + * in C, we shift after obtaining the absolute value. + */ + if ((v = (*block)[jpeg_natural_order[ke - 1]]) >= 0) { + if (v >>= cinfo->Al) break; + } else { + v = -v; + if (v >>= cinfo->Al) break; + } + + /* Establish EOBx (previous stage end-of-block) index */ + for (kex = ke; kex > 1; kex--) + if ((v = (*block)[jpeg_natural_order[kex - 1]]) >= 0) { + if (v >>= cinfo->Ah) break; + } else { + v = -v; + if (v >>= cinfo->Ah) break; + } + + /* Figure G.10: Encode_AC_Coefficients_SA */ + for (k = cinfo->Ss; k < ke; k++) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + if (k >= kex) + arith_encode(cinfo, st, 0); /* EOB decision */ + entropy->ac_stats[tbl][245] = 0; + for (;;) { + if ((v = (*block)[jpeg_natural_order[k]]) >= 0) { + if (v >>= cinfo->Al) { + if (v >> 1) /* previously nonzero coef */ + arith_encode(cinfo, st + 2, (v & 1)); + else { /* newly nonzero coef */ + arith_encode(cinfo, st + 1, 1); + arith_encode(cinfo, entropy->ac_stats[tbl] + 245, 0); + } + break; + } + } else { + v = -v; + if (v >>= cinfo->Al) { + if (v >> 1) /* previously nonzero coef */ + arith_encode(cinfo, st + 2, (v & 1)); + else { /* newly nonzero coef */ + arith_encode(cinfo, st + 1, 1); + arith_encode(cinfo, entropy->ac_stats[tbl] + 245, 1); + } + break; + } + } + arith_encode(cinfo, st + 1, 0); st += 3; k++; + } + } + /* Encode EOB decision only if k <= cinfo->Se */ + if (k <= cinfo->Se) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + arith_encode(cinfo, st, 1); + } + + return TRUE; +} + + +/* + * Encode and output one MCU's worth of arithmetic-compressed coefficients. + */ + +METHODDEF(boolean) +encode_mcu (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + jpeg_component_info * compptr; + JBLOCKROW block; + unsigned char *st; + int blkn, ci, tbl, k, ke; + int v, v2, m; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + emit_restart(cinfo, entropy->next_restart_num); + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + + /* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */ + + tbl = compptr->dc_tbl_no; + + /* Table F.4: Point to statistics bin S0 for DC coefficient coding */ + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + + /* Figure F.4: Encode_DC_DIFF */ + if ((v = (*block)[0] - entropy->last_dc_val[ci]) == 0) { + arith_encode(cinfo, st, 0); + entropy->dc_context[ci] = 0; /* zero diff category */ + } else { + entropy->last_dc_val[ci] = (*block)[0]; + arith_encode(cinfo, st, 1); + /* Figure F.6: Encoding nonzero value v */ + /* Figure F.7: Encoding the sign of v */ + if (v > 0) { + arith_encode(cinfo, st + 1, 0); /* Table F.4: SS = S0 + 1 */ + st += 2; /* Table F.4: SP = S0 + 2 */ + entropy->dc_context[ci] = 4; /* small positive diff category */ + } else { + v = -v; + arith_encode(cinfo, st + 1, 1); /* Table F.4: SS = S0 + 1 */ + st += 3; /* Table F.4: SN = S0 + 3 */ + entropy->dc_context[ci] = 8; /* small negative diff category */ + } + /* Figure F.8: Encoding the magnitude category of v */ + m = 0; + if (v -= 1) { + arith_encode(cinfo, st, 1); + m = 1; + v2 = v; + st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */ + while (v2 >>= 1) { + arith_encode(cinfo, st, 1); + m <<= 1; + st += 1; + } + } + arith_encode(cinfo, st, 0); + /* Section F.1.4.4.1.2: Establish dc_context conditioning category */ + if (m < (int) (((INT32) 1 << cinfo->arith_dc_L[tbl]) >> 1)) + entropy->dc_context[ci] = 0; /* zero diff category */ + else if (m > (int) (((INT32) 1 << cinfo->arith_dc_U[tbl]) >> 1)) + entropy->dc_context[ci] += 8; /* large diff category */ + /* Figure F.9: Encoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + arith_encode(cinfo, st, (m & v) ? 1 : 0); + } + + /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */ + + tbl = compptr->ac_tbl_no; + + /* Establish EOB (end-of-block) index */ + for (ke = DCTSIZE2; ke > 1; ke--) + if ((*block)[jpeg_natural_order[ke - 1]]) break; + + /* Figure F.5: Encode_AC_Coefficients */ + for (k = 1; k < ke; k++) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + arith_encode(cinfo, st, 0); /* EOB decision */ + while ((v = (*block)[jpeg_natural_order[k]]) == 0) { + arith_encode(cinfo, st + 1, 0); st += 3; k++; + } + arith_encode(cinfo, st + 1, 1); + /* Figure F.6: Encoding nonzero value v */ + /* Figure F.7: Encoding the sign of v */ + entropy->ac_stats[tbl][245] = 0; + if (v > 0) { + arith_encode(cinfo, entropy->ac_stats[tbl] + 245, 0); + } else { + v = -v; + arith_encode(cinfo, entropy->ac_stats[tbl] + 245, 1); + } + st += 2; + /* Figure F.8: Encoding the magnitude category of v */ + m = 0; + if (v -= 1) { + arith_encode(cinfo, st, 1); + m = 1; + v2 = v; + if (v2 >>= 1) { + arith_encode(cinfo, st, 1); + m <<= 1; + st = entropy->ac_stats[tbl] + + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + while (v2 >>= 1) { + arith_encode(cinfo, st, 1); + m <<= 1; + st += 1; + } + } + } + arith_encode(cinfo, st, 0); + /* Figure F.9: Encoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + arith_encode(cinfo, st, (m & v) ? 1 : 0); + } + /* Encode EOB decision only if k < DCTSIZE2 */ + if (k < DCTSIZE2) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + arith_encode(cinfo, st, 1); + } + } + + return TRUE; +} + + +/* + * Initialize for an arithmetic-compressed scan. + */ + +METHODDEF(void) +start_pass (j_compress_ptr cinfo, boolean gather_statistics) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + int ci, tbl; + jpeg_component_info * compptr; + + if (gather_statistics) + /* Make sure to avoid that in the master control logic! + * We are fully adaptive here and need no extra + * statistics gathering pass! + */ + ERREXIT(cinfo, JERR_NOT_COMPILED); + + /* We assume jcmaster.c already validated the progressive scan parameters. */ + + /* Select execution routines */ + if (cinfo->progressive_mode) { + if (cinfo->Ah == 0) { + if (cinfo->Ss == 0) + entropy->pub.encode_mcu = encode_mcu_DC_first; + else + entropy->pub.encode_mcu = encode_mcu_AC_first; + } else { + if (cinfo->Ss == 0) + entropy->pub.encode_mcu = encode_mcu_DC_refine; + else + entropy->pub.encode_mcu = encode_mcu_AC_refine; + } + } else + entropy->pub.encode_mcu = encode_mcu; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Allocate & initialize requested statistics areas */ + if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + tbl = compptr->dc_tbl_no; + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + if (entropy->dc_stats[tbl] == NULL) + entropy->dc_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, DC_STAT_BINS); + MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS); + /* Initialize DC predictions to 0 */ + entropy->last_dc_val[ci] = 0; + entropy->dc_context[ci] = 0; + } + if (cinfo->progressive_mode == 0 || cinfo->Ss) { + tbl = compptr->ac_tbl_no; + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + if (entropy->ac_stats[tbl] == NULL) + entropy->ac_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, AC_STAT_BINS); + MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS); +#ifdef CALCULATE_SPECTRAL_CONDITIONING + if (cinfo->progressive_mode) + /* Section G.1.3.2: Set appropriate arithmetic conditioning value Kx */ + cinfo->arith_ac_K[tbl] = cinfo->Ss + ((8 + cinfo->Se - cinfo->Ss) >> 4); +#endif + } + } + + /* Initialize arithmetic encoding variables */ + entropy->c = 0; + entropy->a = 0x10000L; + entropy->sc = 0; + entropy->zc = 0; + entropy->ct = 11; + entropy->buffer = -1; /* empty */ + + /* Initialize restart stuff */ + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num = 0; +} + + +/* + * Module initialization routine for arithmetic entropy encoding. + */ + +GLOBAL(void) +jinit_arith_encoder (j_compress_ptr cinfo) +{ + arith_entropy_ptr entropy; + int i; + + entropy = (arith_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(arith_entropy_encoder)); + cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + entropy->pub.start_pass = start_pass; + entropy->pub.finish_pass = finish_pass; + + /* Mark tables unallocated */ + for (i = 0; i < NUM_ARITH_TBLS; i++) { + entropy->dc_stats[i] = NULL; + entropy->ac_stats[i] = NULL; + } +} diff --git a/3rdparty/openctm/tools/jpeg/jccoefct.c b/3rdparty/openctm/tools/jpeg/jccoefct.c new file mode 100644 index 000000000..1e026193a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jccoefct.c @@ -0,0 +1,453 @@ +/* + * jccoefct.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the coefficient buffer controller for compression. + * This controller is the top level of the JPEG compressor proper. + * The coefficient buffer lies between forward-DCT and entropy encoding steps. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* We use a full-image coefficient buffer when doing Huffman optimization, + * and also for writing multiple-scan JPEG files. In all cases, the DCT + * step is run during the first pass, and subsequent passes need only read + * the buffered coefficients. + */ +#ifdef ENTROPY_OPT_SUPPORTED +#define FULL_COEF_BUFFER_SUPPORTED +#else +#ifdef C_MULTISCAN_FILES_SUPPORTED +#define FULL_COEF_BUFFER_SUPPORTED +#endif +#endif + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_coef_controller pub; /* public fields */ + + JDIMENSION iMCU_row_num; /* iMCU row # within image */ + JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* For single-pass compression, it's sufficient to buffer just one MCU + * (although this may prove a bit slow in practice). We allocate a + * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each + * MCU constructed and sent. (On 80x86, the workspace is FAR even though + * it's not really very big; this is to keep the module interfaces unchanged + * when a large coefficient buffer is necessary.) + * In multi-pass modes, this array points to the current MCU's blocks + * within the virtual arrays. + */ + JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; + + /* In multi-pass modes, we need a virtual block array for each component. */ + jvirt_barray_ptr whole_image[MAX_COMPONENTS]; +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + + +/* Forward declarations */ +METHODDEF(boolean) compress_data + JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); +#ifdef FULL_COEF_BUFFER_SUPPORTED +METHODDEF(boolean) compress_first_pass + JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); +METHODDEF(boolean) compress_output + JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); +#endif + + +LOCAL(void) +start_iMCU_row (j_compress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->mcu_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + coef->iMCU_row_num = 0; + start_iMCU_row(cinfo); + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (coef->whole_image[0] != NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + coef->pub.compress_data = compress_data; + break; +#ifdef FULL_COEF_BUFFER_SUPPORTED + case JBUF_SAVE_AND_PASS: + if (coef->whole_image[0] == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + coef->pub.compress_data = compress_first_pass; + break; + case JBUF_CRANK_DEST: + if (coef->whole_image[0] == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + coef->pub.compress_data = compress_output; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data in the single-pass case. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the image. + * Returns TRUE if the iMCU row is completed, FALSE if suspended. + * + * NB: input_buf contains a plane for each component in image, + * which we index according to the component's SOF position. + */ + +METHODDEF(boolean) +compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, bi, ci, yindex, yoffset, blockcnt; + JDIMENSION ypos, xpos; + jpeg_component_info *compptr; + forward_DCT_ptr forward_DCT; + + /* Loop to write as much as one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col; + MCU_col_num++) { + /* Determine where data comes from in input_buf and do the DCT thing. + * Each call on forward_DCT processes a horizontal row of DCT blocks + * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks + * sequentially. Dummy blocks at the right or bottom edge are filled in + * specially. The data in them does not matter for image reconstruction, + * so we fill them with values that will encode to the smallest amount of + * data, viz: all zeroes in the AC entries, DC entries equal to previous + * block's DC value. (Thanks to Thomas Kinsman for this idea.) + */ + blkn = 0; + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + forward_DCT = cinfo->fdct->forward_DCT[compptr->component_index]; + blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + xpos = MCU_col_num * compptr->MCU_sample_width; + ypos = yoffset * compptr->DCT_v_scaled_size; + /* ypos == (yoffset+yindex) * DCTSIZE */ + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (coef->iMCU_row_num < last_iMCU_row || + yoffset+yindex < compptr->last_row_height) { + (*forward_DCT) (cinfo, compptr, + input_buf[compptr->component_index], + coef->MCU_buffer[blkn], + ypos, xpos, (JDIMENSION) blockcnt); + if (blockcnt < compptr->MCU_width) { + /* Create some dummy blocks at the right edge of the image. */ + jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt], + (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); + for (bi = blockcnt; bi < compptr->MCU_width; bi++) { + coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0]; + } + } + } else { + /* Create a row of dummy blocks at the bottom of the image. */ + jzero_far((void FAR *) coef->MCU_buffer[blkn], + compptr->MCU_width * SIZEOF(JBLOCK)); + for (bi = 0; bi < compptr->MCU_width; bi++) { + coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0]; + } + } + blkn += compptr->MCU_width; + ypos += compptr->DCT_v_scaled_size; + } + } + /* Try to write the MCU. In event of a suspension failure, we will + * re-DCT the MCU on restart (a bit inefficient, could be fixed...) + */ + if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->mcu_ctr = MCU_col_num; + return FALSE; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->mcu_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + coef->iMCU_row_num++; + start_iMCU_row(cinfo); + return TRUE; +} + + +#ifdef FULL_COEF_BUFFER_SUPPORTED + +/* + * Process some data in the first pass of a multi-pass case. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the image. + * This amount of data is read from the source buffer, DCT'd and quantized, + * and saved into the virtual arrays. We also generate suitable dummy blocks + * as needed at the right and lower edges. (The dummy blocks are constructed + * in the virtual arrays, which have been padded appropriately.) This makes + * it possible for subsequent passes not to worry about real vs. dummy blocks. + * + * We must also emit the data to the entropy encoder. This is conveniently + * done by calling compress_output() after we've loaded the current strip + * of the virtual arrays. + * + * NB: input_buf contains a plane for each component in image. All + * components are DCT'd and loaded into the virtual arrays in this pass. + * However, it may be that only a subset of the components are emitted to + * the entropy encoder during this first pass; be careful about looking + * at the scan-dependent variables (MCU dimensions, etc). + */ + +METHODDEF(boolean) +compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION blocks_across, MCUs_across, MCUindex; + int bi, ci, h_samp_factor, block_row, block_rows, ndummy; + JCOEF lastDC; + jpeg_component_info *compptr; + JBLOCKARRAY buffer; + JBLOCKROW thisblockrow, lastblockrow; + forward_DCT_ptr forward_DCT; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Align the virtual buffer for this component. */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + coef->iMCU_row_num * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, TRUE); + /* Count non-dummy DCT block rows in this iMCU row. */ + if (coef->iMCU_row_num < last_iMCU_row) + block_rows = compptr->v_samp_factor; + else { + /* NB: can't use last_row_height here, since may not be set! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + } + blocks_across = compptr->width_in_blocks; + h_samp_factor = compptr->h_samp_factor; + /* Count number of dummy blocks to be added at the right margin. */ + ndummy = (int) (blocks_across % h_samp_factor); + if (ndummy > 0) + ndummy = h_samp_factor - ndummy; + forward_DCT = cinfo->fdct->forward_DCT[ci]; + /* Perform DCT for all non-dummy blocks in this iMCU row. Each call + * on forward_DCT processes a complete horizontal row of DCT blocks. + */ + for (block_row = 0; block_row < block_rows; block_row++) { + thisblockrow = buffer[block_row]; + (*forward_DCT) (cinfo, compptr, input_buf[ci], thisblockrow, + (JDIMENSION) (block_row * compptr->DCT_v_scaled_size), + (JDIMENSION) 0, blocks_across); + if (ndummy > 0) { + /* Create dummy blocks at the right edge of the image. */ + thisblockrow += blocks_across; /* => first dummy block */ + jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); + lastDC = thisblockrow[-1][0]; + for (bi = 0; bi < ndummy; bi++) { + thisblockrow[bi][0] = lastDC; + } + } + } + /* If at end of image, create dummy block rows as needed. + * The tricky part here is that within each MCU, we want the DC values + * of the dummy blocks to match the last real block's DC value. + * This squeezes a few more bytes out of the resulting file... + */ + if (coef->iMCU_row_num == last_iMCU_row) { + blocks_across += ndummy; /* include lower right corner */ + MCUs_across = blocks_across / h_samp_factor; + for (block_row = block_rows; block_row < compptr->v_samp_factor; + block_row++) { + thisblockrow = buffer[block_row]; + lastblockrow = buffer[block_row-1]; + jzero_far((void FAR *) thisblockrow, + (size_t) (blocks_across * SIZEOF(JBLOCK))); + for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) { + lastDC = lastblockrow[h_samp_factor-1][0]; + for (bi = 0; bi < h_samp_factor; bi++) { + thisblockrow[bi][0] = lastDC; + } + thisblockrow += h_samp_factor; /* advance to next MCU in row */ + lastblockrow += h_samp_factor; + } + } + } + } + /* NB: compress_output will increment iMCU_row_num if successful. + * A suspension return will result in redoing all the work above next time. + */ + + /* Emit data to the entropy encoder, sharing code with subsequent passes */ + return compress_output(cinfo, input_buf); +} + + +/* + * Process some data in subsequent passes of a multi-pass case. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the scan. + * The data is obtained from the virtual arrays and fed to the entropy coder. + * Returns TRUE if the iMCU row is completed, FALSE if suspended. + * + * NB: input_buf is ignored; it is likely to be a NULL pointer. + */ + +METHODDEF(boolean) +compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + int blkn, ci, xindex, yindex, yoffset; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. + * NB: during first pass, this is safe only because the buffers will + * already be aligned properly, so jmemmgr.c won't need to do any I/O. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + coef->iMCU_row_num * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + coef->MCU_buffer[blkn++] = buffer_ptr++; + } + } + } + /* Try to write the MCU. */ + if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->mcu_ctr = MCU_col_num; + return FALSE; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->mcu_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + coef->iMCU_row_num++; + start_iMCU_row(cinfo); + return TRUE; +} + +#endif /* FULL_COEF_BUFFER_SUPPORTED */ + + +/* + * Initialize coefficient buffer controller. + */ + +GLOBAL(void) +jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer) +{ + my_coef_ptr coef; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_c_coef_controller *) coef; + coef->pub.start_pass = start_pass_coef; + + /* Create the coefficient buffer. */ + if (need_full_buffer) { +#ifdef FULL_COEF_BUFFER_SUPPORTED + /* Allocate a full-image virtual array for each component, */ + /* padded to a multiple of samp_factor DCT blocks in each direction. */ + int ci; + jpeg_component_info *compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) compptr->v_samp_factor); + } +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif + } else { + /* We only need a single-MCU buffer. */ + JBLOCKROW buffer; + int i; + + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { + coef->MCU_buffer[i] = buffer + i; + } + coef->whole_image[0] = NULL; /* flag for no virtual arrays */ + } +} diff --git a/3rdparty/openctm/tools/jpeg/jccolor.c b/3rdparty/openctm/tools/jpeg/jccolor.c new file mode 100644 index 000000000..266372454 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jccolor.c @@ -0,0 +1,459 @@ +/* + * jccolor.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains input colorspace conversion routines. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private subobject */ + +typedef struct { + struct jpeg_color_converter pub; /* public fields */ + + /* Private state for RGB->YCC conversion */ + INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */ +} my_color_converter; + +typedef my_color_converter * my_cconvert_ptr; + + +/**************** RGB -> YCbCr conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B + * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE + * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2, + * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and + * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0) + * were not represented exactly. Now we sacrifice exact representation of + * maximum red and maximum blue in order to get exact grayscales. + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times R,G,B for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included + * in the tables to save adding them separately in the inner loop. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS) +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L< Y section */ +#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */ +#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */ +#define R_CB_OFF (3*(MAXJSAMPLE+1)) +#define G_CB_OFF (4*(MAXJSAMPLE+1)) +#define B_CB_OFF (5*(MAXJSAMPLE+1)) +#define R_CR_OFF B_CB_OFF /* B=>Cb, R=>Cr are the same */ +#define G_CR_OFF (6*(MAXJSAMPLE+1)) +#define B_CR_OFF (7*(MAXJSAMPLE+1)) +#define TABLE_SIZE (8*(MAXJSAMPLE+1)) + + +/* + * Initialize for RGB->YCC colorspace conversion. + */ + +METHODDEF(void) +rgb_ycc_start (j_compress_ptr cinfo) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + INT32 * rgb_ycc_tab; + INT32 i; + + /* Allocate and fill in the conversion tables. */ + cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (TABLE_SIZE * SIZEOF(INT32))); + + for (i = 0; i <= MAXJSAMPLE; i++) { + rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; + rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i; + rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i; + rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i; + /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr. + * This ensures that the maximum output will round to MAXJSAMPLE + * not MAXJSAMPLE+1, and thus that we don't have to range-limit. + */ + rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; +/* B=>Cb and R=>Cr tables are the same + rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; +*/ + rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; + rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * + * Note that we change from the application's interleaved-pixel format + * to our internal noninterleaved, one-plane-per-component format. + * The input buffer is therefore three times as wide as the output buffer. + * + * A starting row offset is provided only for the output buffer. The caller + * can easily adjust the passed input_buf value to accommodate any row + * offset required on that side. + */ + +METHODDEF(void) +rgb_ycc_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_ycc_tab; + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr[RGB_RED]); + g = GETJSAMPLE(inptr[RGB_GREEN]); + b = GETJSAMPLE(inptr[RGB_BLUE]); + inptr += RGB_PIXELSIZE; + /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations + * must be too; we do not need an explicit range-limiting operation. + * Hence the value being shifted is never negative, and we don't + * need the general RIGHT_SHIFT macro. + */ + /* Y */ + outptr0[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + /* Cb */ + outptr1[col] = (JSAMPLE) + ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) + >> SCALEBITS); + /* Cr */ + outptr2[col] = (JSAMPLE) + ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) + >> SCALEBITS); + } + } +} + + +/**************** Cases other than RGB -> YCbCr **************/ + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles RGB->grayscale conversion, which is the same + * as the RGB->Y portion of RGB->YCbCr. + * We assume rgb_ycc_start has been called (we only use the Y tables). + */ + +METHODDEF(void) +rgb_gray_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_ycc_tab; + register JSAMPROW inptr; + register JSAMPROW outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr = output_buf[0][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr[RGB_RED]); + g = GETJSAMPLE(inptr[RGB_GREEN]); + b = GETJSAMPLE(inptr[RGB_BLUE]); + inptr += RGB_PIXELSIZE; + /* Y */ + outptr[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles Adobe-style CMYK->YCCK conversion, + * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same + * conversion as above, while passing K (black) unchanged. + * We assume rgb_ycc_start has been called. + */ + +METHODDEF(void) +cmyk_ycck_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_ycc_tab; + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2, outptr3; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + outptr3 = output_buf[3][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = MAXJSAMPLE - GETJSAMPLE(inptr[0]); + g = MAXJSAMPLE - GETJSAMPLE(inptr[1]); + b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); + /* K passes through as-is */ + outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ + inptr += 4; + /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations + * must be too; we do not need an explicit range-limiting operation. + * Hence the value being shifted is never negative, and we don't + * need the general RIGHT_SHIFT macro. + */ + /* Y */ + outptr0[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + /* Cb */ + outptr1[col] = (JSAMPLE) + ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) + >> SCALEBITS); + /* Cr */ + outptr2[col] = (JSAMPLE) + ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) + >> SCALEBITS); + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles grayscale output with no conversion. + * The source can be either plain grayscale or YCbCr (since Y == gray). + */ + +METHODDEF(void) +grayscale_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register JSAMPROW inptr; + register JSAMPROW outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + int instride = cinfo->input_components; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr = output_buf[0][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ + inptr += instride; + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles multi-component colorspaces without conversion. + * We assume input_components == num_components. + */ + +METHODDEF(void) +null_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register JSAMPROW inptr; + register JSAMPROW outptr; + register JDIMENSION col; + register int ci; + int nc = cinfo->num_components; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + /* It seems fastest to make a separate pass for each component. */ + for (ci = 0; ci < nc; ci++) { + inptr = *input_buf; + outptr = output_buf[ci][output_row]; + for (col = 0; col < num_cols; col++) { + outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ + inptr += nc; + } + } + input_buf++; + output_row++; + } +} + + +/* + * Empty method for start_pass. + */ + +METHODDEF(void) +null_method (j_compress_ptr cinfo) +{ + /* no work needed */ +} + + +/* + * Module initialization routine for input colorspace conversion. + */ + +GLOBAL(void) +jinit_color_converter (j_compress_ptr cinfo) +{ + my_cconvert_ptr cconvert; + + cconvert = (my_cconvert_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_color_converter)); + cinfo->cconvert = (struct jpeg_color_converter *) cconvert; + /* set start_pass to null method until we find out differently */ + cconvert->pub.start_pass = null_method; + + /* Make sure input_components agrees with in_color_space */ + switch (cinfo->in_color_space) { + case JCS_GRAYSCALE: + if (cinfo->input_components != 1) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + + case JCS_RGB: +#if RGB_PIXELSIZE != 3 + if (cinfo->input_components != RGB_PIXELSIZE) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; +#endif /* else share code with YCbCr */ + + case JCS_YCbCr: + if (cinfo->input_components != 3) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + + case JCS_CMYK: + case JCS_YCCK: + if (cinfo->input_components != 4) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + + default: /* JCS_UNKNOWN can be anything */ + if (cinfo->input_components < 1) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + } + + /* Check num_components, set conversion method based on requested space */ + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + if (cinfo->num_components != 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_GRAYSCALE) + cconvert->pub.color_convert = grayscale_convert; + else if (cinfo->in_color_space == JCS_RGB) { + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = rgb_gray_convert; + } else if (cinfo->in_color_space == JCS_YCbCr) + cconvert->pub.color_convert = grayscale_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_RGB: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_YCbCr: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_RGB) { + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = rgb_ycc_convert; + } else if (cinfo->in_color_space == JCS_YCbCr) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_CMYK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_CMYK) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_YCCK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_CMYK) { + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = cmyk_ycck_convert; + } else if (cinfo->in_color_space == JCS_YCCK) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + default: /* allow null conversion of JCS_UNKNOWN */ + if (cinfo->jpeg_color_space != cinfo->in_color_space || + cinfo->num_components != cinfo->input_components) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + cconvert->pub.color_convert = null_convert; + break; + } +} diff --git a/3rdparty/openctm/tools/jpeg/jcdctmgr.c b/3rdparty/openctm/tools/jpeg/jcdctmgr.c new file mode 100644 index 000000000..550b1a6e7 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcdctmgr.c @@ -0,0 +1,482 @@ +/* + * jcdctmgr.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the forward-DCT management logic. + * This code selects a particular DCT implementation to be used, + * and it performs related housekeeping chores including coefficient + * quantization. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + + +/* Private subobject for this module */ + +typedef struct { + struct jpeg_forward_dct pub; /* public fields */ + + /* Pointer to the DCT routine actually in use */ + forward_DCT_method_ptr do_dct[MAX_COMPONENTS]; + + /* The actual post-DCT divisors --- not identical to the quant table + * entries, because of scaling (especially for an unnormalized DCT). + * Each table is given in normal array order. + */ + DCTELEM * divisors[NUM_QUANT_TBLS]; + +#ifdef DCT_FLOAT_SUPPORTED + /* Same as above for the floating-point case. */ + float_DCT_method_ptr do_float_dct[MAX_COMPONENTS]; + FAST_FLOAT * float_divisors[NUM_QUANT_TBLS]; +#endif +} my_fdct_controller; + +typedef my_fdct_controller * my_fdct_ptr; + + +/* The current scaled-DCT routines require ISLOW-style divisor tables, + * so be sure to compile that code if either ISLOW or SCALING is requested. + */ +#ifdef DCT_ISLOW_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#else +#ifdef DCT_SCALING_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#endif +#endif + + +/* + * Perform forward DCT on one or more blocks of a component. + * + * The input samples are taken from the sample_data[] array starting at + * position start_row/start_col, and moving to the right for any additional + * blocks. The quantized coefficients are returned in coef_blocks[]. + */ + +METHODDEF(void) +forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks) +/* This version is used for integer DCT implementations. */ +{ + /* This routine is heavily used, so it's worth coding it tightly. */ + my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; + forward_DCT_method_ptr do_dct = fdct->do_dct[compptr->component_index]; + DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no]; + DCTELEM workspace[DCTSIZE2]; /* work area for FDCT subroutine */ + JDIMENSION bi; + + sample_data += start_row; /* fold in the vertical offset once */ + + for (bi = 0; bi < num_blocks; bi++, start_col += compptr->DCT_h_scaled_size) { + /* Perform the DCT */ + (*do_dct) (workspace, sample_data, start_col); + + /* Quantize/descale the coefficients, and store into coef_blocks[] */ + { register DCTELEM temp, qval; + register int i; + register JCOEFPTR output_ptr = coef_blocks[bi]; + + for (i = 0; i < DCTSIZE2; i++) { + qval = divisors[i]; + temp = workspace[i]; + /* Divide the coefficient value by qval, ensuring proper rounding. + * Since C does not specify the direction of rounding for negative + * quotients, we have to force the dividend positive for portability. + * + * In most files, at least half of the output values will be zero + * (at default quantization settings, more like three-quarters...) + * so we should ensure that this case is fast. On many machines, + * a comparison is enough cheaper than a divide to make a special test + * a win. Since both inputs will be nonnegative, we need only test + * for a < b to discover whether a/b is 0. + * If your machine's division is fast enough, define FAST_DIVIDE. + */ +#ifdef FAST_DIVIDE +#define DIVIDE_BY(a,b) a /= b +#else +#define DIVIDE_BY(a,b) if (a >= b) a /= b; else a = 0 +#endif + if (temp < 0) { + temp = -temp; + temp += qval>>1; /* for rounding */ + DIVIDE_BY(temp, qval); + temp = -temp; + } else { + temp += qval>>1; /* for rounding */ + DIVIDE_BY(temp, qval); + } + output_ptr[i] = (JCOEF) temp; + } + } + } +} + + +#ifdef DCT_FLOAT_SUPPORTED + +METHODDEF(void) +forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks) +/* This version is used for floating-point DCT implementations. */ +{ + /* This routine is heavily used, so it's worth coding it tightly. */ + my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; + float_DCT_method_ptr do_dct = fdct->do_float_dct[compptr->component_index]; + FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no]; + FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */ + JDIMENSION bi; + + sample_data += start_row; /* fold in the vertical offset once */ + + for (bi = 0; bi < num_blocks; bi++, start_col += compptr->DCT_h_scaled_size) { + /* Perform the DCT */ + (*do_dct) (workspace, sample_data, start_col); + + /* Quantize/descale the coefficients, and store into coef_blocks[] */ + { register FAST_FLOAT temp; + register int i; + register JCOEFPTR output_ptr = coef_blocks[bi]; + + for (i = 0; i < DCTSIZE2; i++) { + /* Apply the quantization and scaling factor */ + temp = workspace[i] * divisors[i]; + /* Round to nearest integer. + * Since C does not specify the direction of rounding for negative + * quotients, we have to force the dividend positive for portability. + * The maximum coefficient size is +-16K (for 12-bit data), so this + * code should work for either 16-bit or 32-bit ints. + */ + output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384); + } + } + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ + + +/* + * Initialize for a processing pass. + * Verify that all referenced Q-tables are present, and set up + * the divisor table for each one. + * In the current implementation, DCT of all components is done during + * the first pass, even if only some components will be output in the + * first scan. Hence all components should be examined here. + */ + +METHODDEF(void) +start_pass_fdctmgr (j_compress_ptr cinfo) +{ + my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; + int ci, qtblno, i; + jpeg_component_info *compptr; + int method = 0; + JQUANT_TBL * qtbl; + DCTELEM * dtbl; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Select the proper DCT routine for this component's scaling */ + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { +#ifdef DCT_SCALING_SUPPORTED + case ((1 << 8) + 1): + fdct->do_dct[ci] = jpeg_fdct_1x1; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((2 << 8) + 2): + fdct->do_dct[ci] = jpeg_fdct_2x2; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((3 << 8) + 3): + fdct->do_dct[ci] = jpeg_fdct_3x3; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((4 << 8) + 4): + fdct->do_dct[ci] = jpeg_fdct_4x4; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((5 << 8) + 5): + fdct->do_dct[ci] = jpeg_fdct_5x5; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((6 << 8) + 6): + fdct->do_dct[ci] = jpeg_fdct_6x6; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((7 << 8) + 7): + fdct->do_dct[ci] = jpeg_fdct_7x7; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((9 << 8) + 9): + fdct->do_dct[ci] = jpeg_fdct_9x9; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((10 << 8) + 10): + fdct->do_dct[ci] = jpeg_fdct_10x10; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((11 << 8) + 11): + fdct->do_dct[ci] = jpeg_fdct_11x11; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((12 << 8) + 12): + fdct->do_dct[ci] = jpeg_fdct_12x12; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((13 << 8) + 13): + fdct->do_dct[ci] = jpeg_fdct_13x13; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((14 << 8) + 14): + fdct->do_dct[ci] = jpeg_fdct_14x14; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((15 << 8) + 15): + fdct->do_dct[ci] = jpeg_fdct_15x15; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((16 << 8) + 16): + fdct->do_dct[ci] = jpeg_fdct_16x16; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((16 << 8) + 8): + fdct->do_dct[ci] = jpeg_fdct_16x8; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((14 << 8) + 7): + fdct->do_dct[ci] = jpeg_fdct_14x7; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((12 << 8) + 6): + fdct->do_dct[ci] = jpeg_fdct_12x6; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((10 << 8) + 5): + fdct->do_dct[ci] = jpeg_fdct_10x5; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((8 << 8) + 4): + fdct->do_dct[ci] = jpeg_fdct_8x4; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((6 << 8) + 3): + fdct->do_dct[ci] = jpeg_fdct_6x3; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((4 << 8) + 2): + fdct->do_dct[ci] = jpeg_fdct_4x2; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((2 << 8) + 1): + fdct->do_dct[ci] = jpeg_fdct_2x1; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((8 << 8) + 16): + fdct->do_dct[ci] = jpeg_fdct_8x16; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((7 << 8) + 14): + fdct->do_dct[ci] = jpeg_fdct_7x14; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((6 << 8) + 12): + fdct->do_dct[ci] = jpeg_fdct_6x12; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((5 << 8) + 10): + fdct->do_dct[ci] = jpeg_fdct_5x10; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((4 << 8) + 8): + fdct->do_dct[ci] = jpeg_fdct_4x8; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((3 << 8) + 6): + fdct->do_dct[ci] = jpeg_fdct_3x6; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((2 << 8) + 4): + fdct->do_dct[ci] = jpeg_fdct_2x4; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; + case ((1 << 8) + 2): + fdct->do_dct[ci] = jpeg_fdct_1x2; + method = JDCT_ISLOW; /* jfdctint uses islow-style table */ + break; +#endif + case ((DCTSIZE << 8) + DCTSIZE): + switch (cinfo->dct_method) { +#ifdef DCT_ISLOW_SUPPORTED + case JDCT_ISLOW: + fdct->do_dct[ci] = jpeg_fdct_islow; + method = JDCT_ISLOW; + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + fdct->do_dct[ci] = jpeg_fdct_ifast; + method = JDCT_IFAST; + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + fdct->do_float_dct[ci] = jpeg_fdct_float; + method = JDCT_FLOAT; + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + break; + default: + ERREXIT2(cinfo, JERR_BAD_DCTSIZE, + compptr->DCT_h_scaled_size, compptr->DCT_v_scaled_size); + break; + } + qtblno = compptr->quant_tbl_no; + /* Make sure specified quantization table is present */ + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + cinfo->quant_tbl_ptrs[qtblno] == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + qtbl = cinfo->quant_tbl_ptrs[qtblno]; + /* Compute divisors for this quant table */ + /* We may do this more than once for same table, but it's not a big deal */ + switch (method) { +#ifdef PROVIDE_ISLOW_TABLES + case JDCT_ISLOW: + /* For LL&M IDCT method, divisors are equal to raw quantization + * coefficients multiplied by 8 (to counteract scaling). + */ + if (fdct->divisors[qtblno] == NULL) { + fdct->divisors[qtblno] = (DCTELEM *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + DCTSIZE2 * SIZEOF(DCTELEM)); + } + dtbl = fdct->divisors[qtblno]; + for (i = 0; i < DCTSIZE2; i++) { + dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3; + } + fdct->pub.forward_DCT[ci] = forward_DCT; + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + { + /* For AA&N IDCT method, divisors are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * We apply a further scale factor of 8. + */ +#define CONST_BITS 14 + static const INT16 aanscales[DCTSIZE2] = { + /* precomputed values scaled up by 14 bits */ + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, + 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, + 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, + 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, + 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 + }; + SHIFT_TEMPS + + if (fdct->divisors[qtblno] == NULL) { + fdct->divisors[qtblno] = (DCTELEM *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + DCTSIZE2 * SIZEOF(DCTELEM)); + } + dtbl = fdct->divisors[qtblno]; + for (i = 0; i < DCTSIZE2; i++) { + dtbl[i] = (DCTELEM) + DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], + (INT32) aanscales[i]), + CONST_BITS-3); + } + } + fdct->pub.forward_DCT[ci] = forward_DCT; + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + { + /* For float AA&N IDCT method, divisors are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * We apply a further scale factor of 8. + * What's actually stored is 1/divisor so that the inner loop can + * use a multiplication rather than a division. + */ + FAST_FLOAT * fdtbl; + int row, col; + static const double aanscalefactor[DCTSIZE] = { + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + }; + + if (fdct->float_divisors[qtblno] == NULL) { + fdct->float_divisors[qtblno] = (FAST_FLOAT *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + DCTSIZE2 * SIZEOF(FAST_FLOAT)); + } + fdtbl = fdct->float_divisors[qtblno]; + i = 0; + for (row = 0; row < DCTSIZE; row++) { + for (col = 0; col < DCTSIZE; col++) { + fdtbl[i] = (FAST_FLOAT) + (1.0 / (((double) qtbl->quantval[i] * + aanscalefactor[row] * aanscalefactor[col] * 8.0))); + i++; + } + } + } + fdct->pub.forward_DCT[ci] = forward_DCT_float; + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + } +} + + +/* + * Initialize FDCT manager. + */ + +GLOBAL(void) +jinit_forward_dct (j_compress_ptr cinfo) +{ + my_fdct_ptr fdct; + int i; + + fdct = (my_fdct_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_fdct_controller)); + cinfo->fdct = (struct jpeg_forward_dct *) fdct; + fdct->pub.start_pass = start_pass_fdctmgr; + + /* Mark divisor tables unallocated */ + for (i = 0; i < NUM_QUANT_TBLS; i++) { + fdct->divisors[i] = NULL; +#ifdef DCT_FLOAT_SUPPORTED + fdct->float_divisors[i] = NULL; +#endif + } +} diff --git a/3rdparty/openctm/tools/jpeg/jchuff.c b/3rdparty/openctm/tools/jpeg/jchuff.c new file mode 100644 index 000000000..f3971209c --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jchuff.c @@ -0,0 +1,1612 @@ +/* + * jchuff.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2006-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy encoding routines. + * Both sequential and progressive modes are supported in this single module. + * + * Much of the complexity here has to do with supporting output suspension. + * If the data destination module demands suspension, we want to be able to + * back up to the start of the current MCU. To do this, we copy state + * variables into local working storage, and update them back to the + * permanent JPEG objects only upon successful completion of an MCU. + * + * We do not support output suspension for the progressive JPEG mode, since + * the library currently does not allow multiple-scan files to be written + * with output suspension. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* The legal range of a DCT coefficient is + * -1024 .. +1023 for 8-bit data; + * -16384 .. +16383 for 12-bit data. + * Hence the magnitude should always fit in 10 or 14 bits respectively. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MAX_COEF_BITS 10 +#else +#define MAX_COEF_BITS 14 +#endif + +/* Derived data constructed for each Huffman table */ + +typedef struct { + unsigned int ehufco[256]; /* code for each symbol */ + char ehufsi[256]; /* length of code for each symbol */ + /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ +} c_derived_tbl; + + +/* Expanded entropy encoder object for Huffman encoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + INT32 put_buffer; /* current bit-accumulation buffer */ + int put_bits; /* # of bits now in it */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).put_buffer = (src).put_buffer, \ + (dest).put_bits = (src).put_bits, \ + (dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_encoder pub; /* public fields */ + + savable_state saved; /* Bit buffer & DC state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + int next_restart_num; /* next restart number to write (0-7) */ + + /* Following four fields used only in sequential mode */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + c_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; + c_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; + + /* Statistics tables for optimization */ + long * dc_count_ptrs[NUM_HUFF_TBLS]; + long * ac_count_ptrs[NUM_HUFF_TBLS]; + + /* Following fields used only in progressive mode */ + + /* Mode flag: TRUE for optimization, FALSE for actual data output */ + boolean gather_statistics; + + /* next_output_byte/free_in_buffer are local copies of cinfo->dest fields. + */ + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + j_compress_ptr cinfo; /* link to cinfo (needed for dump_buffer) */ + + /* Coding status for AC components */ + int ac_tbl_no; /* the table number of the single component */ + unsigned int EOBRUN; /* run length of EOBs */ + unsigned int BE; /* # of buffered correction bits before MCU */ + char * bit_buffer; /* buffer for correction bits (1 per char) */ + /* packing correction bits tightly would save some space but cost time... */ + + /* Pointers to derived tables (these workspaces have image lifespan). + * Since any one scan in progressive mode codes only DC or only AC, + * we only need one set of tables, not one for DC and one for AC. + */ + c_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; + + /* Statistics tables for optimization; again, one set is enough */ + long * count_ptrs[NUM_HUFF_TBLS]; +} huff_entropy_encoder; + +typedef huff_entropy_encoder * huff_entropy_ptr; + +/* Working state while writing an MCU (sequential mode). + * This struct contains all the fields that are needed by subroutines. + */ + +typedef struct { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + savable_state cur; /* Current bit buffer & DC state */ + j_compress_ptr cinfo; /* dump_buffer needs access to this */ +} working_state; + +/* MAX_CORR_BITS is the number of bits the AC refinement correction-bit + * buffer can hold. Larger sizes may slightly improve compression, but + * 1000 is already well into the realm of overkill. + * The minimum safe size is 64 bits. + */ + +#define MAX_CORR_BITS 1000 /* Max # of correction bits I can buffer */ + +/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. + * We assume that int right shift is unsigned if INT32 right shift is, + * which should be safe. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define ISHIFT_TEMPS int ishift_temp; +#define IRIGHT_SHIFT(x,shft) \ + ((ishift_temp = (x)) < 0 ? \ + (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \ + (ishift_temp >> (shft))) +#else +#define ISHIFT_TEMPS +#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +/* + * Compute the derived values for a Huffman table. + * This routine also performs some validation checks on the table. + */ + +LOCAL(void) +jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno, + c_derived_tbl ** pdtbl) +{ + JHUFF_TBL *htbl; + c_derived_tbl *dtbl; + int p, i, l, lastp, si, maxsymbol; + char huffsize[257]; + unsigned int huffcode[257]; + unsigned int code; + + /* Note that huffsize[] and huffcode[] are filled in code-length order, + * paralleling the order of the symbols themselves in htbl->huffval[]. + */ + + /* Find the input Huffman table */ + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + htbl = + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + + /* Allocate a workspace if we haven't already done so. */ + if (*pdtbl == NULL) + *pdtbl = (c_derived_tbl *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(c_derived_tbl)); + dtbl = *pdtbl; + + /* Figure C.1: make table of Huffman code length for each symbol */ + + p = 0; + for (l = 1; l <= 16; l++) { + i = (int) htbl->bits[l]; + if (i < 0 || p + i > 256) /* protect against table overrun */ + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + while (i--) + huffsize[p++] = (char) l; + } + huffsize[p] = 0; + lastp = p; + + /* Figure C.2: generate the codes themselves */ + /* We also validate that the counts represent a legal Huffman code tree. */ + + code = 0; + si = huffsize[0]; + p = 0; + while (huffsize[p]) { + while (((int) huffsize[p]) == si) { + huffcode[p++] = code; + code++; + } + /* code is now 1 more than the last code used for codelength si; but + * it must still fit in si bits, since no code is allowed to be all ones. + */ + if (((INT32) code) >= (((INT32) 1) << si)) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + code <<= 1; + si++; + } + + /* Figure C.3: generate encoding tables */ + /* These are code and size indexed by symbol value */ + + /* Set all codeless symbols to have code length 0; + * this lets us detect duplicate VAL entries here, and later + * allows emit_bits to detect any attempt to emit such symbols. + */ + MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi)); + + /* This is also a convenient place to check for out-of-range + * and duplicated VAL entries. We allow 0..255 for AC symbols + * but only 0..15 for DC. (We could constrain them further + * based on data depth and mode, but this seems enough.) + */ + maxsymbol = isDC ? 15 : 255; + + for (p = 0; p < lastp; p++) { + i = htbl->huffval[p]; + if (i < 0 || i > maxsymbol || dtbl->ehufsi[i]) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + dtbl->ehufco[i] = huffcode[p]; + dtbl->ehufsi[i] = huffsize[p]; + } +} + + +/* Outputting bytes to the file. + * NB: these must be called only when actually outputting, + * that is, entropy->gather_statistics == FALSE. + */ + +/* Emit a byte, taking 'action' if must suspend. */ +#define emit_byte_s(state,val,action) \ + { *(state)->next_output_byte++ = (JOCTET) (val); \ + if (--(state)->free_in_buffer == 0) \ + if (! dump_buffer_s(state)) \ + { action; } } + +/* Emit a byte */ +#define emit_byte_e(entropy,val) \ + { *(entropy)->next_output_byte++ = (JOCTET) (val); \ + if (--(entropy)->free_in_buffer == 0) \ + dump_buffer_e(entropy); } + + +LOCAL(boolean) +dump_buffer_s (working_state * state) +/* Empty the output buffer; return TRUE if successful, FALSE if must suspend */ +{ + struct jpeg_destination_mgr * dest = state->cinfo->dest; + + if (! (*dest->empty_output_buffer) (state->cinfo)) + return FALSE; + /* After a successful buffer dump, must reset buffer pointers */ + state->next_output_byte = dest->next_output_byte; + state->free_in_buffer = dest->free_in_buffer; + return TRUE; +} + + +LOCAL(void) +dump_buffer_e (huff_entropy_ptr entropy) +/* Empty the output buffer; we do not support suspension in this case. */ +{ + struct jpeg_destination_mgr * dest = entropy->cinfo->dest; + + if (! (*dest->empty_output_buffer) (entropy->cinfo)) + ERREXIT(entropy->cinfo, JERR_CANT_SUSPEND); + /* After a successful buffer dump, must reset buffer pointers */ + entropy->next_output_byte = dest->next_output_byte; + entropy->free_in_buffer = dest->free_in_buffer; +} + + +/* Outputting bits to the file */ + +/* Only the right 24 bits of put_buffer are used; the valid bits are + * left-justified in this part. At most 16 bits can be passed to emit_bits + * in one call, and we never retain more than 7 bits in put_buffer + * between calls, so 24 bits are sufficient. + */ + +INLINE +LOCAL(boolean) +emit_bits_s (working_state * state, unsigned int code, int size) +/* Emit some bits; return TRUE if successful, FALSE if must suspend */ +{ + /* This routine is heavily used, so it's worth coding tightly. */ + register INT32 put_buffer = (INT32) code; + register int put_bits = state->cur.put_bits; + + /* if size is 0, caller used an invalid Huffman table entry */ + if (size == 0) + ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE); + + put_buffer &= (((INT32) 1)<cur.put_buffer; /* and merge with old buffer contents */ + + while (put_bits >= 8) { + int c = (int) ((put_buffer >> 16) & 0xFF); + + emit_byte_s(state, c, return FALSE); + if (c == 0xFF) { /* need to stuff a zero byte? */ + emit_byte_s(state, 0, return FALSE); + } + put_buffer <<= 8; + put_bits -= 8; + } + + state->cur.put_buffer = put_buffer; /* update state variables */ + state->cur.put_bits = put_bits; + + return TRUE; +} + + +INLINE +LOCAL(void) +emit_bits_e (huff_entropy_ptr entropy, unsigned int code, int size) +/* Emit some bits, unless we are in gather mode */ +{ + /* This routine is heavily used, so it's worth coding tightly. */ + register INT32 put_buffer = (INT32) code; + register int put_bits = entropy->saved.put_bits; + + /* if size is 0, caller used an invalid Huffman table entry */ + if (size == 0) + ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); + + if (entropy->gather_statistics) + return; /* do nothing if we're only getting stats */ + + put_buffer &= (((INT32) 1)<saved.put_buffer; + + while (put_bits >= 8) { + int c = (int) ((put_buffer >> 16) & 0xFF); + + emit_byte_e(entropy, c); + if (c == 0xFF) { /* need to stuff a zero byte? */ + emit_byte_e(entropy, 0); + } + put_buffer <<= 8; + put_bits -= 8; + } + + entropy->saved.put_buffer = put_buffer; /* update variables */ + entropy->saved.put_bits = put_bits; +} + + +LOCAL(boolean) +flush_bits_s (working_state * state) +{ + if (! emit_bits_s(state, 0x7F, 7)) /* fill any partial byte with ones */ + return FALSE; + state->cur.put_buffer = 0; /* and reset bit-buffer to empty */ + state->cur.put_bits = 0; + return TRUE; +} + + +LOCAL(void) +flush_bits_e (huff_entropy_ptr entropy) +{ + emit_bits_e(entropy, 0x7F, 7); /* fill any partial byte with ones */ + entropy->saved.put_buffer = 0; /* and reset bit-buffer to empty */ + entropy->saved.put_bits = 0; +} + + +/* + * Emit (or just count) a Huffman symbol. + */ + +INLINE +LOCAL(void) +emit_symbol (huff_entropy_ptr entropy, int tbl_no, int symbol) +{ + if (entropy->gather_statistics) + entropy->count_ptrs[tbl_no][symbol]++; + else { + c_derived_tbl * tbl = entropy->derived_tbls[tbl_no]; + emit_bits_e(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]); + } +} + + +/* + * Emit bits from a correction bit buffer. + */ + +LOCAL(void) +emit_buffered_bits (huff_entropy_ptr entropy, char * bufstart, + unsigned int nbits) +{ + if (entropy->gather_statistics) + return; /* no real work */ + + while (nbits > 0) { + emit_bits_e(entropy, (unsigned int) (*bufstart), 1); + bufstart++; + nbits--; + } +} + + +/* + * Emit any pending EOBRUN symbol. + */ + +LOCAL(void) +emit_eobrun (huff_entropy_ptr entropy) +{ + register int temp, nbits; + + if (entropy->EOBRUN > 0) { /* if there is any pending EOBRUN */ + temp = entropy->EOBRUN; + nbits = 0; + while ((temp >>= 1)) + nbits++; + /* safety check: shouldn't happen given limited correction-bit buffer */ + if (nbits > 14) + ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); + + emit_symbol(entropy, entropy->ac_tbl_no, nbits << 4); + if (nbits) + emit_bits_e(entropy, entropy->EOBRUN, nbits); + + entropy->EOBRUN = 0; + + /* Emit any buffered correction bits */ + emit_buffered_bits(entropy, entropy->bit_buffer, entropy->BE); + entropy->BE = 0; + } +} + + +/* + * Emit a restart marker & resynchronize predictions. + */ + +LOCAL(boolean) +emit_restart_s (working_state * state, int restart_num) +{ + int ci; + + if (! flush_bits_s(state)) + return FALSE; + + emit_byte_s(state, 0xFF, return FALSE); + emit_byte_s(state, JPEG_RST0 + restart_num, return FALSE); + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < state->cinfo->comps_in_scan; ci++) + state->cur.last_dc_val[ci] = 0; + + /* The restart counter is not updated until we successfully write the MCU. */ + + return TRUE; +} + + +LOCAL(void) +emit_restart_e (huff_entropy_ptr entropy, int restart_num) +{ + int ci; + + emit_eobrun(entropy); + + if (! entropy->gather_statistics) { + flush_bits_e(entropy); + emit_byte_e(entropy, 0xFF); + emit_byte_e(entropy, JPEG_RST0 + restart_num); + } + + if (entropy->cinfo->Ss == 0) { + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < entropy->cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + } else { + /* Re-initialize all AC-related fields to 0 */ + entropy->EOBRUN = 0; + entropy->BE = 0; + } +} + + +/* + * MCU encoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + register int temp, temp2; + register int nbits; + int blkn, ci; + int Al = cinfo->Al; + JBLOCKROW block; + jpeg_component_info * compptr; + ISHIFT_TEMPS + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart_e(entropy, entropy->next_restart_num); + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + + /* Compute the DC value after the required point transform by Al. + * This is simply an arithmetic right shift. + */ + temp2 = IRIGHT_SHIFT((int) ((*block)[0]), Al); + + /* DC differences are figured on the point-transformed values. */ + temp = temp2 - entropy->saved.last_dc_val[ci]; + entropy->saved.last_dc_val[ci] = temp2; + + /* Encode the DC coefficient difference per section G.1.2.1 */ + temp2 = temp; + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + /* For a negative input, want temp2 = bitwise complement of abs(input) */ + /* This code assumes we are on a two's complement machine */ + temp2--; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 0; + while (temp) { + nbits++; + temp >>= 1; + } + /* Check for out-of-range coefficient values. + * Since we're encoding a difference, the range limit is twice as much. + */ + if (nbits > MAX_COEF_BITS+1) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count/emit the Huffman-coded symbol for the number of bits */ + emit_symbol(entropy, compptr->dc_tbl_no, nbits); + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + if (nbits) /* emit_bits rejects calls with size 0 */ + emit_bits_e(entropy, (unsigned int) temp2, nbits); + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * MCU encoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + register int temp, temp2; + register int nbits; + register int r, k; + int Se = cinfo->Se; + int Al = cinfo->Al; + JBLOCKROW block; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart_e(entropy, entropy->next_restart_num); + + /* Encode the MCU data block */ + block = MCU_data[0]; + + /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */ + + r = 0; /* r = run length of zeros */ + + for (k = cinfo->Ss; k <= Se; k++) { + if ((temp = (*block)[jpeg_natural_order[k]]) == 0) { + r++; + continue; + } + /* We must apply the point transform by Al. For AC coefficients this + * is an integer division with rounding towards 0. To do this portably + * in C, we shift after obtaining the absolute value; so the code is + * interwoven with finding the abs value (temp) and output bits (temp2). + */ + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + temp >>= Al; /* apply the point transform */ + /* For a negative coef, want temp2 = bitwise complement of abs(coef) */ + temp2 = ~temp; + } else { + temp >>= Al; /* apply the point transform */ + temp2 = temp; + } + /* Watch out for case that nonzero coef is zero after point transform */ + if (temp == 0) { + r++; + continue; + } + + /* Emit any pending EOBRUN */ + if (entropy->EOBRUN > 0) + emit_eobrun(entropy); + /* if run length > 15, must emit special run-length-16 codes (0xF0) */ + while (r > 15) { + emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); + r -= 16; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 1; /* there must be at least one 1 bit */ + while ((temp >>= 1)) + nbits++; + /* Check for out-of-range coefficient values */ + if (nbits > MAX_COEF_BITS) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count/emit Huffman symbol for run length / number of bits */ + emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + nbits); + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + emit_bits_e(entropy, (unsigned int) temp2, nbits); + + r = 0; /* reset zero run length */ + } + + if (r > 0) { /* If there are trailing zeroes, */ + entropy->EOBRUN++; /* count an EOB */ + if (entropy->EOBRUN == 0x7FFF) + emit_eobrun(entropy); /* force it out to avoid overflow */ + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * MCU encoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, although the spec + * is not very clear on the point. + */ + +METHODDEF(boolean) +encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + register int temp; + int blkn; + int Al = cinfo->Al; + JBLOCKROW block; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart_e(entropy, entropy->next_restart_num); + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + + /* We simply emit the Al'th bit of the DC coefficient value. */ + temp = (*block)[0]; + emit_bits_e(entropy, (unsigned int) (temp >> Al), 1); + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * MCU encoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + register int temp; + register int r, k; + int EOB; + char *BR_buffer; + unsigned int BR; + int Se = cinfo->Se; + int Al = cinfo->Al; + JBLOCKROW block; + int absvalues[DCTSIZE2]; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart_e(entropy, entropy->next_restart_num); + + /* Encode the MCU data block */ + block = MCU_data[0]; + + /* It is convenient to make a pre-pass to determine the transformed + * coefficients' absolute values and the EOB position. + */ + EOB = 0; + for (k = cinfo->Ss; k <= Se; k++) { + temp = (*block)[jpeg_natural_order[k]]; + /* We must apply the point transform by Al. For AC coefficients this + * is an integer division with rounding towards 0. To do this portably + * in C, we shift after obtaining the absolute value. + */ + if (temp < 0) + temp = -temp; /* temp is abs value of input */ + temp >>= Al; /* apply the point transform */ + absvalues[k] = temp; /* save abs value for main pass */ + if (temp == 1) + EOB = k; /* EOB = index of last newly-nonzero coef */ + } + + /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */ + + r = 0; /* r = run length of zeros */ + BR = 0; /* BR = count of buffered bits added now */ + BR_buffer = entropy->bit_buffer + entropy->BE; /* Append bits to buffer */ + + for (k = cinfo->Ss; k <= Se; k++) { + if ((temp = absvalues[k]) == 0) { + r++; + continue; + } + + /* Emit any required ZRLs, but not if they can be folded into EOB */ + while (r > 15 && k <= EOB) { + /* emit any pending EOBRUN and the BE correction bits */ + emit_eobrun(entropy); + /* Emit ZRL */ + emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); + r -= 16; + /* Emit buffered correction bits that must be associated with ZRL */ + emit_buffered_bits(entropy, BR_buffer, BR); + BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ + BR = 0; + } + + /* If the coef was previously nonzero, it only needs a correction bit. + * NOTE: a straight translation of the spec's figure G.7 would suggest + * that we also need to test r > 15. But if r > 15, we can only get here + * if k > EOB, which implies that this coefficient is not 1. + */ + if (temp > 1) { + /* The correction bit is the next bit of the absolute value. */ + BR_buffer[BR++] = (char) (temp & 1); + continue; + } + + /* Emit any pending EOBRUN and the BE correction bits */ + emit_eobrun(entropy); + + /* Count/emit Huffman symbol for run length / number of bits */ + emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + 1); + + /* Emit output bit for newly-nonzero coef */ + temp = ((*block)[jpeg_natural_order[k]] < 0) ? 0 : 1; + emit_bits_e(entropy, (unsigned int) temp, 1); + + /* Emit buffered correction bits that must be associated with this code */ + emit_buffered_bits(entropy, BR_buffer, BR); + BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ + BR = 0; + r = 0; /* reset zero run length */ + } + + if (r > 0 || BR > 0) { /* If there are trailing zeroes, */ + entropy->EOBRUN++; /* count an EOB */ + entropy->BE += BR; /* concat my correction bits to older ones */ + /* We force out the EOB if we risk either: + * 1. overflow of the EOB counter; + * 2. overflow of the correction bit buffer during the next MCU. + */ + if (entropy->EOBRUN == 0x7FFF || entropy->BE > (MAX_CORR_BITS-DCTSIZE2+1)) + emit_eobrun(entropy); + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* Encode a single block's worth of coefficients */ + +LOCAL(boolean) +encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, + c_derived_tbl *dctbl, c_derived_tbl *actbl) +{ + register int temp, temp2; + register int nbits; + register int k, r, i; + + /* Encode the DC coefficient difference per section F.1.2.1 */ + + temp = temp2 = block[0] - last_dc_val; + + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + /* For a negative input, want temp2 = bitwise complement of abs(input) */ + /* This code assumes we are on a two's complement machine */ + temp2--; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 0; + while (temp) { + nbits++; + temp >>= 1; + } + /* Check for out-of-range coefficient values. + * Since we're encoding a difference, the range limit is twice as much. + */ + if (nbits > MAX_COEF_BITS+1) + ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); + + /* Emit the Huffman-coded symbol for the number of bits */ + if (! emit_bits_s(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits])) + return FALSE; + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + if (nbits) /* emit_bits rejects calls with size 0 */ + if (! emit_bits_s(state, (unsigned int) temp2, nbits)) + return FALSE; + + /* Encode the AC coefficients per section F.1.2.2 */ + + r = 0; /* r = run length of zeros */ + + for (k = 1; k < DCTSIZE2; k++) { + if ((temp = block[jpeg_natural_order[k]]) == 0) { + r++; + } else { + /* if run length > 15, must emit special run-length-16 codes (0xF0) */ + while (r > 15) { + if (! emit_bits_s(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0])) + return FALSE; + r -= 16; + } + + temp2 = temp; + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + /* This code assumes we are on a two's complement machine */ + temp2--; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 1; /* there must be at least one 1 bit */ + while ((temp >>= 1)) + nbits++; + /* Check for out-of-range coefficient values */ + if (nbits > MAX_COEF_BITS) + ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); + + /* Emit Huffman symbol for run length / number of bits */ + i = (r << 4) + nbits; + if (! emit_bits_s(state, actbl->ehufco[i], actbl->ehufsi[i])) + return FALSE; + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + if (! emit_bits_s(state, (unsigned int) temp2, nbits)) + return FALSE; + + r = 0; + } + } + + /* If the last coef(s) were zero, emit an end-of-block code */ + if (r > 0) + if (! emit_bits_s(state, actbl->ehufco[0], actbl->ehufsi[0])) + return FALSE; + + return TRUE; +} + + +/* + * Encode and output one MCU's worth of Huffman-compressed coefficients. + */ + +METHODDEF(boolean) +encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + working_state state; + int blkn, ci; + jpeg_component_info * compptr; + + /* Load up working state */ + state.next_output_byte = cinfo->dest->next_output_byte; + state.free_in_buffer = cinfo->dest->free_in_buffer; + ASSIGN_STATE(state.cur, entropy->saved); + state.cinfo = cinfo; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! emit_restart_s(&state, entropy->next_restart_num)) + return FALSE; + } + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + if (! encode_one_block(&state, + MCU_data[blkn][0], state.cur.last_dc_val[ci], + entropy->dc_derived_tbls[compptr->dc_tbl_no], + entropy->ac_derived_tbls[compptr->ac_tbl_no])) + return FALSE; + /* Update last_dc_val */ + state.cur.last_dc_val[ci] = MCU_data[blkn][0][0]; + } + + /* Completed MCU, so update state */ + cinfo->dest->next_output_byte = state.next_output_byte; + cinfo->dest->free_in_buffer = state.free_in_buffer; + ASSIGN_STATE(entropy->saved, state.cur); + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * Finish up at the end of a Huffman-compressed scan. + */ + +METHODDEF(void) +finish_pass_huff (j_compress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + working_state state; + + if (cinfo->progressive_mode) { + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Flush out any buffered data */ + emit_eobrun(entropy); + flush_bits_e(entropy); + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + } else { + /* Load up working state ... flush_bits needs it */ + state.next_output_byte = cinfo->dest->next_output_byte; + state.free_in_buffer = cinfo->dest->free_in_buffer; + ASSIGN_STATE(state.cur, entropy->saved); + state.cinfo = cinfo; + + /* Flush out the last data */ + if (! flush_bits_s(&state)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + + /* Update state */ + cinfo->dest->next_output_byte = state.next_output_byte; + cinfo->dest->free_in_buffer = state.free_in_buffer; + ASSIGN_STATE(entropy->saved, state.cur); + } +} + + +/* + * Huffman coding optimization. + * + * We first scan the supplied data and count the number of uses of each symbol + * that is to be Huffman-coded. (This process MUST agree with the code above.) + * Then we build a Huffman coding tree for the observed counts. + * Symbols which are not needed at all for the particular image are not + * assigned any code, which saves space in the DHT marker as well as in + * the compressed data. + */ + + +/* Process a single block's worth of coefficients */ + +LOCAL(void) +htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, + long dc_counts[], long ac_counts[]) +{ + register int temp; + register int nbits; + register int k, r; + + /* Encode the DC coefficient difference per section F.1.2.1 */ + + temp = block[0] - last_dc_val; + if (temp < 0) + temp = -temp; + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 0; + while (temp) { + nbits++; + temp >>= 1; + } + /* Check for out-of-range coefficient values. + * Since we're encoding a difference, the range limit is twice as much. + */ + if (nbits > MAX_COEF_BITS+1) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count the Huffman symbol for the number of bits */ + dc_counts[nbits]++; + + /* Encode the AC coefficients per section F.1.2.2 */ + + r = 0; /* r = run length of zeros */ + + for (k = 1; k < DCTSIZE2; k++) { + if ((temp = block[jpeg_natural_order[k]]) == 0) { + r++; + } else { + /* if run length > 15, must emit special run-length-16 codes (0xF0) */ + while (r > 15) { + ac_counts[0xF0]++; + r -= 16; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + if (temp < 0) + temp = -temp; + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 1; /* there must be at least one 1 bit */ + while ((temp >>= 1)) + nbits++; + /* Check for out-of-range coefficient values */ + if (nbits > MAX_COEF_BITS) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count Huffman symbol for run length / number of bits */ + ac_counts[(r << 4) + nbits]++; + + r = 0; + } + } + + /* If the last coef(s) were zero, emit an end-of-block code */ + if (r > 0) + ac_counts[0]++; +} + + +/* + * Trial-encode one MCU's worth of Huffman-compressed coefficients. + * No data is actually output, so no suspension return is possible. + */ + +METHODDEF(boolean) +encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int blkn, ci; + jpeg_component_info * compptr; + + /* Take care of restart intervals if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + /* Update restart state */ + entropy->restarts_to_go = cinfo->restart_interval; + } + entropy->restarts_to_go--; + } + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + htest_one_block(cinfo, MCU_data[blkn][0], entropy->saved.last_dc_val[ci], + entropy->dc_count_ptrs[compptr->dc_tbl_no], + entropy->ac_count_ptrs[compptr->ac_tbl_no]); + entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0]; + } + + return TRUE; +} + + +/* + * Generate the best Huffman code table for the given counts, fill htbl. + * + * The JPEG standard requires that no symbol be assigned a codeword of all + * one bits (so that padding bits added at the end of a compressed segment + * can't look like a valid code). Because of the canonical ordering of + * codewords, this just means that there must be an unused slot in the + * longest codeword length category. Section K.2 of the JPEG spec suggests + * reserving such a slot by pretending that symbol 256 is a valid symbol + * with count 1. In theory that's not optimal; giving it count zero but + * including it in the symbol set anyway should give a better Huffman code. + * But the theoretically better code actually seems to come out worse in + * practice, because it produces more all-ones bytes (which incur stuffed + * zero bytes in the final file). In any case the difference is tiny. + * + * The JPEG standard requires Huffman codes to be no more than 16 bits long. + * If some symbols have a very small but nonzero probability, the Huffman tree + * must be adjusted to meet the code length restriction. We currently use + * the adjustment method suggested in JPEG section K.2. This method is *not* + * optimal; it may not choose the best possible limited-length code. But + * typically only very-low-frequency symbols will be given less-than-optimal + * lengths, so the code is almost optimal. Experimental comparisons against + * an optimal limited-length-code algorithm indicate that the difference is + * microscopic --- usually less than a hundredth of a percent of total size. + * So the extra complexity of an optimal algorithm doesn't seem worthwhile. + */ + +LOCAL(void) +jpeg_gen_optimal_table (j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[]) +{ +#define MAX_CLEN 32 /* assumed maximum initial code length */ + UINT8 bits[MAX_CLEN+1]; /* bits[k] = # of symbols with code length k */ + int codesize[257]; /* codesize[k] = code length of symbol k */ + int others[257]; /* next symbol in current branch of tree */ + int c1, c2; + int p, i, j; + long v; + + /* This algorithm is explained in section K.2 of the JPEG standard */ + + MEMZERO(bits, SIZEOF(bits)); + MEMZERO(codesize, SIZEOF(codesize)); + for (i = 0; i < 257; i++) + others[i] = -1; /* init links to empty */ + + freq[256] = 1; /* make sure 256 has a nonzero count */ + /* Including the pseudo-symbol 256 in the Huffman procedure guarantees + * that no real symbol is given code-value of all ones, because 256 + * will be placed last in the largest codeword category. + */ + + /* Huffman's basic algorithm to assign optimal code lengths to symbols */ + + for (;;) { + /* Find the smallest nonzero frequency, set c1 = its symbol */ + /* In case of ties, take the larger symbol number */ + c1 = -1; + v = 1000000000L; + for (i = 0; i <= 256; i++) { + if (freq[i] && freq[i] <= v) { + v = freq[i]; + c1 = i; + } + } + + /* Find the next smallest nonzero frequency, set c2 = its symbol */ + /* In case of ties, take the larger symbol number */ + c2 = -1; + v = 1000000000L; + for (i = 0; i <= 256; i++) { + if (freq[i] && freq[i] <= v && i != c1) { + v = freq[i]; + c2 = i; + } + } + + /* Done if we've merged everything into one frequency */ + if (c2 < 0) + break; + + /* Else merge the two counts/trees */ + freq[c1] += freq[c2]; + freq[c2] = 0; + + /* Increment the codesize of everything in c1's tree branch */ + codesize[c1]++; + while (others[c1] >= 0) { + c1 = others[c1]; + codesize[c1]++; + } + + others[c1] = c2; /* chain c2 onto c1's tree branch */ + + /* Increment the codesize of everything in c2's tree branch */ + codesize[c2]++; + while (others[c2] >= 0) { + c2 = others[c2]; + codesize[c2]++; + } + } + + /* Now count the number of symbols of each code length */ + for (i = 0; i <= 256; i++) { + if (codesize[i]) { + /* The JPEG standard seems to think that this can't happen, */ + /* but I'm paranoid... */ + if (codesize[i] > MAX_CLEN) + ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW); + + bits[codesize[i]]++; + } + } + + /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure + * Huffman procedure assigned any such lengths, we must adjust the coding. + * Here is what the JPEG spec says about how this next bit works: + * Since symbols are paired for the longest Huffman code, the symbols are + * removed from this length category two at a time. The prefix for the pair + * (which is one bit shorter) is allocated to one of the pair; then, + * skipping the BITS entry for that prefix length, a code word from the next + * shortest nonzero BITS entry is converted into a prefix for two code words + * one bit longer. + */ + + for (i = MAX_CLEN; i > 16; i--) { + while (bits[i] > 0) { + j = i - 2; /* find length of new prefix to be used */ + while (bits[j] == 0) + j--; + + bits[i] -= 2; /* remove two symbols */ + bits[i-1]++; /* one goes in this length */ + bits[j+1] += 2; /* two new symbols in this length */ + bits[j]--; /* symbol of this length is now a prefix */ + } + } + + /* Remove the count for the pseudo-symbol 256 from the largest codelength */ + while (bits[i] == 0) /* find largest codelength still in use */ + i--; + bits[i]--; + + /* Return final symbol counts (only for lengths 0..16) */ + MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits)); + + /* Return a list of the symbols sorted by code length */ + /* It's not real clear to me why we don't need to consider the codelength + * changes made above, but the JPEG spec seems to think this works. + */ + p = 0; + for (i = 1; i <= MAX_CLEN; i++) { + for (j = 0; j <= 255; j++) { + if (codesize[j] == i) { + htbl->huffval[p] = (UINT8) j; + p++; + } + } + } + + /* Set sent_table FALSE so updated table will be written to JPEG file. */ + htbl->sent_table = FALSE; +} + + +/* + * Finish up a statistics-gathering pass and create the new Huffman tables. + */ + +METHODDEF(void) +finish_pass_gather (j_compress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, dctbl, actbl, tbl; + jpeg_component_info * compptr; + JHUFF_TBL **htblptr; + boolean did_dc[NUM_HUFF_TBLS]; + boolean did_ac[NUM_HUFF_TBLS]; + boolean did[NUM_HUFF_TBLS]; + + /* It's important not to apply jpeg_gen_optimal_table more than once + * per table, because it clobbers the input frequency counts! + */ + if (cinfo->progressive_mode) { + /* Flush out buffered data (all we care about is counting the EOB symbol) */ + emit_eobrun(entropy); + + MEMZERO(did, SIZEOF(did)); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + if (cinfo->Ss == 0) { + if (cinfo->Ah != 0) /* DC refinement needs no table */ + continue; + tbl = compptr->dc_tbl_no; + } else { + tbl = compptr->ac_tbl_no; + } + if (! did[tbl]) { + if (cinfo->Ss == 0) + htblptr = & cinfo->dc_huff_tbl_ptrs[tbl]; + else + htblptr = & cinfo->ac_huff_tbl_ptrs[tbl]; + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + jpeg_gen_optimal_table(cinfo, *htblptr, entropy->count_ptrs[tbl]); + did[tbl] = TRUE; + } + } + } else { + MEMZERO(did_dc, SIZEOF(did_dc)); + MEMZERO(did_ac, SIZEOF(did_ac)); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + if (! did_dc[dctbl]) { + htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl]; + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + jpeg_gen_optimal_table(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]); + did_dc[dctbl] = TRUE; + } + if (! did_ac[actbl]) { + htblptr = & cinfo->ac_huff_tbl_ptrs[actbl]; + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + jpeg_gen_optimal_table(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]); + did_ac[actbl] = TRUE; + } + } + } +} + + +/* + * Initialize for a Huffman-compressed scan. + * If gather_statistics is TRUE, we do not output anything during the scan, + * just count the Huffman symbols used and generate Huffman code tables. + */ + +METHODDEF(void) +start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, dctbl, actbl, tbl; + jpeg_component_info * compptr; + + if (gather_statistics) + entropy->pub.finish_pass = finish_pass_gather; + else + entropy->pub.finish_pass = finish_pass_huff; + + if (cinfo->progressive_mode) { + entropy->cinfo = cinfo; + entropy->gather_statistics = gather_statistics; + + /* We assume jcmaster.c already validated the scan parameters. */ + + /* Select execution routine */ + if (cinfo->Ah == 0) { + if (cinfo->Ss == 0) + entropy->pub.encode_mcu = encode_mcu_DC_first; + else + entropy->pub.encode_mcu = encode_mcu_AC_first; + } else { + if (cinfo->Ss == 0) + entropy->pub.encode_mcu = encode_mcu_DC_refine; + else { + entropy->pub.encode_mcu = encode_mcu_AC_refine; + /* AC refinement needs a correction bit buffer */ + if (entropy->bit_buffer == NULL) + entropy->bit_buffer = (char *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + MAX_CORR_BITS * SIZEOF(char)); + } + } + + /* Only DC coefficients may be interleaved, so cinfo->comps_in_scan = 1 + * for AC coefficients. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + /* Get table index */ + if (cinfo->Ss == 0) { + if (cinfo->Ah != 0) /* DC refinement needs no table */ + continue; + tbl = compptr->dc_tbl_no; + } else { + entropy->ac_tbl_no = tbl = compptr->ac_tbl_no; + } + if (gather_statistics) { + /* Check for invalid table index */ + /* (make_c_derived_tbl does this in the other path) */ + if (tbl < 0 || tbl >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl); + /* Allocate and zero the statistics tables */ + /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ + if (entropy->count_ptrs[tbl] == NULL) + entropy->count_ptrs[tbl] = (long *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 257 * SIZEOF(long)); + MEMZERO(entropy->count_ptrs[tbl], 257 * SIZEOF(long)); + } else { + /* Compute derived values for Huffman table */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_c_derived_tbl(cinfo, cinfo->Ss == 0, tbl, + & entropy->derived_tbls[tbl]); + } + } + + /* Initialize AC stuff */ + entropy->EOBRUN = 0; + entropy->BE = 0; + } else { + if (gather_statistics) + entropy->pub.encode_mcu = encode_mcu_gather; + else + entropy->pub.encode_mcu = encode_mcu_huff; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + if (gather_statistics) { + /* Check for invalid table indexes */ + /* (make_c_derived_tbl does this in the other path) */ + if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl); + if (actbl < 0 || actbl >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl); + /* Allocate and zero the statistics tables */ + /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ + if (entropy->dc_count_ptrs[dctbl] == NULL) + entropy->dc_count_ptrs[dctbl] = (long *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 257 * SIZEOF(long)); + MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long)); + if (entropy->ac_count_ptrs[actbl] == NULL) + entropy->ac_count_ptrs[actbl] = (long *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 257 * SIZEOF(long)); + MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long)); + } else { + /* Compute derived values for Huffman tables */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_c_derived_tbl(cinfo, TRUE, dctbl, + & entropy->dc_derived_tbls[dctbl]); + jpeg_make_c_derived_tbl(cinfo, FALSE, actbl, + & entropy->ac_derived_tbls[actbl]); + } + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + } + + /* Initialize bit buffer to empty */ + entropy->saved.put_buffer = 0; + entropy->saved.put_bits = 0; + + /* Initialize restart stuff */ + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num = 0; +} + + +/* + * Module initialization routine for Huffman entropy encoding. + */ + +GLOBAL(void) +jinit_huff_encoder (j_compress_ptr cinfo) +{ + huff_entropy_ptr entropy; + int i; + + entropy = (huff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(huff_entropy_encoder)); + cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + entropy->pub.start_pass = start_pass_huff; + + if (cinfo->progressive_mode) { + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->derived_tbls[i] = NULL; + entropy->count_ptrs[i] = NULL; + } + entropy->bit_buffer = NULL; /* needed only in AC refinement scan */ + } else { + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; + entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL; + } + } +} diff --git a/3rdparty/openctm/tools/jpeg/jcinit.c b/3rdparty/openctm/tools/jpeg/jcinit.c new file mode 100644 index 000000000..f7aa89fdb --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcinit.c @@ -0,0 +1,65 @@ +/* + * jcinit.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains initialization logic for the JPEG compressor. + * This routine is in charge of selecting the modules to be executed and + * making an initialization call to each one. + * + * Logically, this code belongs in jcmaster.c. It's split out because + * linking this routine implies linking the entire compression library. + * For a transcoding-only application, we want to be able to use jcmaster.c + * without linking in the whole library. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Master selection of compression modules. + * This is done once at the start of processing an image. We determine + * which modules will be used and give them appropriate initialization calls. + */ + +GLOBAL(void) +jinit_compress_master (j_compress_ptr cinfo) +{ + /* Initialize master control (includes parameter checking/processing) */ + jinit_c_master_control(cinfo, FALSE /* full compression */); + + /* Preprocessing */ + if (! cinfo->raw_data_in) { + jinit_color_converter(cinfo); + jinit_downsampler(cinfo); + jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */); + } + /* Forward DCT */ + jinit_forward_dct(cinfo); + /* Entropy encoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) + jinit_arith_encoder(cinfo); + else { + jinit_huff_encoder(cinfo); + } + + /* Need a full-image coefficient buffer in any multi-pass mode. */ + jinit_c_coef_controller(cinfo, + (boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding)); + jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */); + + jinit_marker_writer(cinfo); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Write the datastream header (SOI) immediately. + * Frame and scan headers are postponed till later. + * This lets application insert special markers after the SOI. + */ + (*cinfo->marker->write_file_header) (cinfo); +} diff --git a/3rdparty/openctm/tools/jpeg/jcmainct.c b/3rdparty/openctm/tools/jpeg/jcmainct.c new file mode 100644 index 000000000..669b7bb4b --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcmainct.c @@ -0,0 +1,293 @@ +/* + * jcmainct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the main buffer controller for compression. + * The main buffer lies between the pre-processor and the JPEG + * compressor proper; it holds downsampled data in the JPEG colorspace. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Note: currently, there is no operating mode in which a full-image buffer + * is needed at this step. If there were, that mode could not be used with + * "raw data" input, since this module is bypassed in that case. However, + * we've left the code here for possible use in special applications. + */ +#undef FULL_MAIN_BUFFER_SUPPORTED + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_main_controller pub; /* public fields */ + + JDIMENSION cur_iMCU_row; /* number of current iMCU row */ + JDIMENSION rowgroup_ctr; /* counts row groups received in iMCU row */ + boolean suspended; /* remember if we suspended output */ + J_BUF_MODE pass_mode; /* current operating mode */ + + /* If using just a strip buffer, this points to the entire set of buffers + * (we allocate one for each component). In the full-image case, this + * points to the currently accessible strips of the virtual arrays. + */ + JSAMPARRAY buffer[MAX_COMPONENTS]; + +#ifdef FULL_MAIN_BUFFER_SUPPORTED + /* If using full-image storage, this array holds pointers to virtual-array + * control blocks for each component. Unused if not full-image storage. + */ + jvirt_sarray_ptr whole_image[MAX_COMPONENTS]; +#endif +} my_main_controller; + +typedef my_main_controller * my_main_ptr; + + +/* Forward declarations */ +METHODDEF(void) process_data_simple_main + JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); +#ifdef FULL_MAIN_BUFFER_SUPPORTED +METHODDEF(void) process_data_buffer_main + JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); +#endif + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + /* Do nothing in raw-data mode. */ + if (cinfo->raw_data_in) + return; + + main->cur_iMCU_row = 0; /* initialize counters */ + main->rowgroup_ctr = 0; + main->suspended = FALSE; + main->pass_mode = pass_mode; /* save mode for use by process_data */ + + switch (pass_mode) { + case JBUF_PASS_THRU: +#ifdef FULL_MAIN_BUFFER_SUPPORTED + if (main->whole_image[0] != NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif + main->pub.process_data = process_data_simple_main; + break; +#ifdef FULL_MAIN_BUFFER_SUPPORTED + case JBUF_SAVE_SOURCE: + case JBUF_CRANK_DEST: + case JBUF_SAVE_AND_PASS: + if (main->whole_image[0] == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + main->pub.process_data = process_data_buffer_main; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data. + * This routine handles the simple pass-through mode, + * where we have only a strip buffer. + */ + +METHODDEF(void) +process_data_simple_main (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + /* Read input data if we haven't filled the main buffer yet */ + if (main->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) + (*cinfo->prep->pre_process_data) (cinfo, + input_buf, in_row_ctr, in_rows_avail, + main->buffer, &main->rowgroup_ctr, + (JDIMENSION) cinfo->min_DCT_v_scaled_size); + + /* If we don't have a full iMCU row buffered, return to application for + * more data. Note that preprocessor will always pad to fill the iMCU row + * at the bottom of the image. + */ + if (main->rowgroup_ctr != (JDIMENSION) cinfo->min_DCT_v_scaled_size) + return; + + /* Send the completed row to the compressor */ + if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + /* If compressor did not consume the whole row, then we must need to + * suspend processing and return to the application. In this situation + * we pretend we didn't yet consume the last input row; otherwise, if + * it happened to be the last row of the image, the application would + * think we were done. + */ + if (! main->suspended) { + (*in_row_ctr)--; + main->suspended = TRUE; + } + return; + } + /* We did finish the row. Undo our little suspension hack if a previous + * call suspended; then mark the main buffer empty. + */ + if (main->suspended) { + (*in_row_ctr)++; + main->suspended = FALSE; + } + main->rowgroup_ctr = 0; + main->cur_iMCU_row++; + } +} + + +#ifdef FULL_MAIN_BUFFER_SUPPORTED + +/* + * Process some data. + * This routine handles all of the modes that use a full-size buffer. + */ + +METHODDEF(void) +process_data_buffer_main (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci; + jpeg_component_info *compptr; + boolean writing = (main->pass_mode != JBUF_CRANK_DEST); + + while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + /* Realign the virtual buffers if at the start of an iMCU row. */ + if (main->rowgroup_ctr == 0) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + main->buffer[ci] = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, main->whole_image[ci], + main->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE), + (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing); + } + /* In a read pass, pretend we just read some source data. */ + if (! writing) { + *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; + main->rowgroup_ctr = DCTSIZE; + } + } + + /* If a write pass, read input data until the current iMCU row is full. */ + /* Note: preprocessor will pad if necessary to fill the last iMCU row. */ + if (writing) { + (*cinfo->prep->pre_process_data) (cinfo, + input_buf, in_row_ctr, in_rows_avail, + main->buffer, &main->rowgroup_ctr, + (JDIMENSION) DCTSIZE); + /* Return to application if we need more data to fill the iMCU row. */ + if (main->rowgroup_ctr < DCTSIZE) + return; + } + + /* Emit data, unless this is a sink-only pass. */ + if (main->pass_mode != JBUF_SAVE_SOURCE) { + if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + /* If compressor did not consume the whole row, then we must need to + * suspend processing and return to the application. In this situation + * we pretend we didn't yet consume the last input row; otherwise, if + * it happened to be the last row of the image, the application would + * think we were done. + */ + if (! main->suspended) { + (*in_row_ctr)--; + main->suspended = TRUE; + } + return; + } + /* We did finish the row. Undo our little suspension hack if a previous + * call suspended; then mark the main buffer empty. + */ + if (main->suspended) { + (*in_row_ctr)++; + main->suspended = FALSE; + } + } + + /* If get here, we are done with this iMCU row. Mark buffer empty. */ + main->rowgroup_ctr = 0; + main->cur_iMCU_row++; + } +} + +#endif /* FULL_MAIN_BUFFER_SUPPORTED */ + + +/* + * Initialize main buffer controller. + */ + +GLOBAL(void) +jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) +{ + my_main_ptr main; + int ci; + jpeg_component_info *compptr; + + main = (my_main_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_main_controller)); + cinfo->main = (struct jpeg_c_main_controller *) main; + main->pub.start_pass = start_pass_main; + + /* We don't need to create a buffer in raw-data mode. */ + if (cinfo->raw_data_in) + return; + + /* Create the buffer. It holds downsampled data, so each component + * may be of a different size. + */ + if (need_full_buffer) { +#ifdef FULL_MAIN_BUFFER_SUPPORTED + /* Allocate a full-image virtual array for each component */ + /* Note we pad the bottom to a multiple of the iMCU height */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + main->whole_image[ci] = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + compptr->width_in_blocks * compptr->DCT_h_scaled_size, + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor) * DCTSIZE, + (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size)); + } +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif + } else { +#ifdef FULL_MAIN_BUFFER_SUPPORTED + main->whole_image[0] = NULL; /* flag for no virtual arrays */ +#endif + /* Allocate a strip buffer for each component */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * compptr->DCT_h_scaled_size, + (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size)); + } + } +} diff --git a/3rdparty/openctm/tools/jpeg/jcmarker.c b/3rdparty/openctm/tools/jpeg/jcmarker.c new file mode 100644 index 000000000..7f1de978d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcmarker.c @@ -0,0 +1,667 @@ +/* + * jcmarker.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write JPEG datastream markers. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +typedef enum { /* JPEG marker codes */ + M_SOF0 = 0xc0, + M_SOF1 = 0xc1, + M_SOF2 = 0xc2, + M_SOF3 = 0xc3, + + M_SOF5 = 0xc5, + M_SOF6 = 0xc6, + M_SOF7 = 0xc7, + + M_JPG = 0xc8, + M_SOF9 = 0xc9, + M_SOF10 = 0xca, + M_SOF11 = 0xcb, + + M_SOF13 = 0xcd, + M_SOF14 = 0xce, + M_SOF15 = 0xcf, + + M_DHT = 0xc4, + + M_DAC = 0xcc, + + M_RST0 = 0xd0, + M_RST1 = 0xd1, + M_RST2 = 0xd2, + M_RST3 = 0xd3, + M_RST4 = 0xd4, + M_RST5 = 0xd5, + M_RST6 = 0xd6, + M_RST7 = 0xd7, + + M_SOI = 0xd8, + M_EOI = 0xd9, + M_SOS = 0xda, + M_DQT = 0xdb, + M_DNL = 0xdc, + M_DRI = 0xdd, + M_DHP = 0xde, + M_EXP = 0xdf, + + M_APP0 = 0xe0, + M_APP1 = 0xe1, + M_APP2 = 0xe2, + M_APP3 = 0xe3, + M_APP4 = 0xe4, + M_APP5 = 0xe5, + M_APP6 = 0xe6, + M_APP7 = 0xe7, + M_APP8 = 0xe8, + M_APP9 = 0xe9, + M_APP10 = 0xea, + M_APP11 = 0xeb, + M_APP12 = 0xec, + M_APP13 = 0xed, + M_APP14 = 0xee, + M_APP15 = 0xef, + + M_JPG0 = 0xf0, + M_JPG13 = 0xfd, + M_COM = 0xfe, + + M_TEM = 0x01, + + M_ERROR = 0x100 +} JPEG_MARKER; + + +/* Private state */ + +typedef struct { + struct jpeg_marker_writer pub; /* public fields */ + + unsigned int last_restart_interval; /* last DRI value emitted; 0 after SOI */ +} my_marker_writer; + +typedef my_marker_writer * my_marker_ptr; + + +/* + * Basic output routines. + * + * Note that we do not support suspension while writing a marker. + * Therefore, an application using suspension must ensure that there is + * enough buffer space for the initial markers (typ. 600-700 bytes) before + * calling jpeg_start_compress, and enough space to write the trailing EOI + * (a few bytes) before calling jpeg_finish_compress. Multipass compression + * modes are not supported at all with suspension, so those two are the only + * points where markers will be written. + */ + +LOCAL(void) +emit_byte (j_compress_ptr cinfo, int val) +/* Emit a byte */ +{ + struct jpeg_destination_mgr * dest = cinfo->dest; + + *(dest->next_output_byte)++ = (JOCTET) val; + if (--dest->free_in_buffer == 0) { + if (! (*dest->empty_output_buffer) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + } +} + + +LOCAL(void) +emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark) +/* Emit a marker code */ +{ + emit_byte(cinfo, 0xFF); + emit_byte(cinfo, (int) mark); +} + + +LOCAL(void) +emit_2bytes (j_compress_ptr cinfo, int value) +/* Emit a 2-byte integer; these are always MSB first in JPEG files */ +{ + emit_byte(cinfo, (value >> 8) & 0xFF); + emit_byte(cinfo, value & 0xFF); +} + + +/* + * Routines to write specific marker types. + */ + +LOCAL(int) +emit_dqt (j_compress_ptr cinfo, int index) +/* Emit a DQT marker */ +/* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */ +{ + JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index]; + int prec; + int i; + + if (qtbl == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index); + + prec = 0; + for (i = 0; i < DCTSIZE2; i++) { + if (qtbl->quantval[i] > 255) + prec = 1; + } + + if (! qtbl->sent_table) { + emit_marker(cinfo, M_DQT); + + emit_2bytes(cinfo, prec ? DCTSIZE2*2 + 1 + 2 : DCTSIZE2 + 1 + 2); + + emit_byte(cinfo, index + (prec<<4)); + + for (i = 0; i < DCTSIZE2; i++) { + /* The table entries must be emitted in zigzag order. */ + unsigned int qval = qtbl->quantval[jpeg_natural_order[i]]; + if (prec) + emit_byte(cinfo, (int) (qval >> 8)); + emit_byte(cinfo, (int) (qval & 0xFF)); + } + + qtbl->sent_table = TRUE; + } + + return prec; +} + + +LOCAL(void) +emit_dht (j_compress_ptr cinfo, int index, boolean is_ac) +/* Emit a DHT marker */ +{ + JHUFF_TBL * htbl; + int length, i; + + if (is_ac) { + htbl = cinfo->ac_huff_tbl_ptrs[index]; + index += 0x10; /* output index has AC bit set */ + } else { + htbl = cinfo->dc_huff_tbl_ptrs[index]; + } + + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index); + + if (! htbl->sent_table) { + emit_marker(cinfo, M_DHT); + + length = 0; + for (i = 1; i <= 16; i++) + length += htbl->bits[i]; + + emit_2bytes(cinfo, length + 2 + 1 + 16); + emit_byte(cinfo, index); + + for (i = 1; i <= 16; i++) + emit_byte(cinfo, htbl->bits[i]); + + for (i = 0; i < length; i++) + emit_byte(cinfo, htbl->huffval[i]); + + htbl->sent_table = TRUE; + } +} + + +LOCAL(void) +emit_dac (j_compress_ptr cinfo) +/* Emit a DAC marker */ +/* Since the useful info is so small, we want to emit all the tables in */ +/* one DAC marker. Therefore this routine does its own scan of the table. */ +{ +#ifdef C_ARITH_CODING_SUPPORTED + char dc_in_use[NUM_ARITH_TBLS]; + char ac_in_use[NUM_ARITH_TBLS]; + int length, i; + jpeg_component_info *compptr; + + for (i = 0; i < NUM_ARITH_TBLS; i++) + dc_in_use[i] = ac_in_use[i] = 0; + + for (i = 0; i < cinfo->comps_in_scan; i++) { + compptr = cinfo->cur_comp_info[i]; + dc_in_use[compptr->dc_tbl_no] = 1; + ac_in_use[compptr->ac_tbl_no] = 1; + } + + length = 0; + for (i = 0; i < NUM_ARITH_TBLS; i++) + length += dc_in_use[i] + ac_in_use[i]; + + emit_marker(cinfo, M_DAC); + + emit_2bytes(cinfo, length*2 + 2); + + for (i = 0; i < NUM_ARITH_TBLS; i++) { + if (dc_in_use[i]) { + emit_byte(cinfo, i); + emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4)); + } + if (ac_in_use[i]) { + emit_byte(cinfo, i + 0x10); + emit_byte(cinfo, cinfo->arith_ac_K[i]); + } + } +#endif /* C_ARITH_CODING_SUPPORTED */ +} + + +LOCAL(void) +emit_dri (j_compress_ptr cinfo) +/* Emit a DRI marker */ +{ + emit_marker(cinfo, M_DRI); + + emit_2bytes(cinfo, 4); /* fixed length */ + + emit_2bytes(cinfo, (int) cinfo->restart_interval); +} + + +LOCAL(void) +emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) +/* Emit a SOF marker */ +{ + int ci; + jpeg_component_info *compptr; + + emit_marker(cinfo, code); + + emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */ + + /* Make sure image isn't bigger than SOF field can handle */ + if ((long) cinfo->jpeg_height > 65535L || + (long) cinfo->jpeg_width > 65535L) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535); + + emit_byte(cinfo, cinfo->data_precision); + emit_2bytes(cinfo, (int) cinfo->jpeg_height); + emit_2bytes(cinfo, (int) cinfo->jpeg_width); + + emit_byte(cinfo, cinfo->num_components); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + emit_byte(cinfo, compptr->component_id); + emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor); + emit_byte(cinfo, compptr->quant_tbl_no); + } +} + + +LOCAL(void) +emit_sos (j_compress_ptr cinfo) +/* Emit a SOS marker */ +{ + int i, td, ta; + jpeg_component_info *compptr; + + emit_marker(cinfo, M_SOS); + + emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */ + + emit_byte(cinfo, cinfo->comps_in_scan); + + for (i = 0; i < cinfo->comps_in_scan; i++) { + compptr = cinfo->cur_comp_info[i]; + emit_byte(cinfo, compptr->component_id); + td = compptr->dc_tbl_no; + ta = compptr->ac_tbl_no; + if (cinfo->progressive_mode) { + /* Progressive mode: only DC or only AC tables are used in one scan; + * furthermore, Huffman coding of DC refinement uses no table at all. + * We emit 0 for unused field(s); this is recommended by the P&M text + * but does not seem to be specified in the standard. + */ + if (cinfo->Ss == 0) { + ta = 0; /* DC scan */ + if (cinfo->Ah != 0 && !cinfo->arith_code) + td = 0; /* no DC table either */ + } else { + td = 0; /* AC scan */ + } + } + emit_byte(cinfo, (td << 4) + ta); + } + + emit_byte(cinfo, cinfo->Ss); + emit_byte(cinfo, cinfo->Se); + emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al); +} + + +LOCAL(void) +emit_jfif_app0 (j_compress_ptr cinfo) +/* Emit a JFIF-compliant APP0 marker */ +{ + /* + * Length of APP0 block (2 bytes) + * Block ID (4 bytes - ASCII "JFIF") + * Zero byte (1 byte to terminate the ID string) + * Version Major, Minor (2 bytes - major first) + * Units (1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm) + * Xdpu (2 bytes - dots per unit horizontal) + * Ydpu (2 bytes - dots per unit vertical) + * Thumbnail X size (1 byte) + * Thumbnail Y size (1 byte) + */ + + emit_marker(cinfo, M_APP0); + + emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */ + + emit_byte(cinfo, 0x4A); /* Identifier: ASCII "JFIF" */ + emit_byte(cinfo, 0x46); + emit_byte(cinfo, 0x49); + emit_byte(cinfo, 0x46); + emit_byte(cinfo, 0); + emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */ + emit_byte(cinfo, cinfo->JFIF_minor_version); + emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */ + emit_2bytes(cinfo, (int) cinfo->X_density); + emit_2bytes(cinfo, (int) cinfo->Y_density); + emit_byte(cinfo, 0); /* No thumbnail image */ + emit_byte(cinfo, 0); +} + + +LOCAL(void) +emit_adobe_app14 (j_compress_ptr cinfo) +/* Emit an Adobe APP14 marker */ +{ + /* + * Length of APP14 block (2 bytes) + * Block ID (5 bytes - ASCII "Adobe") + * Version Number (2 bytes - currently 100) + * Flags0 (2 bytes - currently 0) + * Flags1 (2 bytes - currently 0) + * Color transform (1 byte) + * + * Although Adobe TN 5116 mentions Version = 101, all the Adobe files + * now in circulation seem to use Version = 100, so that's what we write. + * + * We write the color transform byte as 1 if the JPEG color space is + * YCbCr, 2 if it's YCCK, 0 otherwise. Adobe's definition has to do with + * whether the encoder performed a transformation, which is pretty useless. + */ + + emit_marker(cinfo, M_APP14); + + emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */ + + emit_byte(cinfo, 0x41); /* Identifier: ASCII "Adobe" */ + emit_byte(cinfo, 0x64); + emit_byte(cinfo, 0x6F); + emit_byte(cinfo, 0x62); + emit_byte(cinfo, 0x65); + emit_2bytes(cinfo, 100); /* Version */ + emit_2bytes(cinfo, 0); /* Flags0 */ + emit_2bytes(cinfo, 0); /* Flags1 */ + switch (cinfo->jpeg_color_space) { + case JCS_YCbCr: + emit_byte(cinfo, 1); /* Color transform = 1 */ + break; + case JCS_YCCK: + emit_byte(cinfo, 2); /* Color transform = 2 */ + break; + default: + emit_byte(cinfo, 0); /* Color transform = 0 */ + break; + } +} + + +/* + * These routines allow writing an arbitrary marker with parameters. + * The only intended use is to emit COM or APPn markers after calling + * write_file_header and before calling write_frame_header. + * Other uses are not guaranteed to produce desirable results. + * Counting the parameter bytes properly is the caller's responsibility. + */ + +METHODDEF(void) +write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen) +/* Emit an arbitrary marker header */ +{ + if (datalen > (unsigned int) 65533) /* safety check */ + ERREXIT(cinfo, JERR_BAD_LENGTH); + + emit_marker(cinfo, (JPEG_MARKER) marker); + + emit_2bytes(cinfo, (int) (datalen + 2)); /* total length */ +} + +METHODDEF(void) +write_marker_byte (j_compress_ptr cinfo, int val) +/* Emit one byte of marker parameters following write_marker_header */ +{ + emit_byte(cinfo, val); +} + + +/* + * Write datastream header. + * This consists of an SOI and optional APPn markers. + * We recommend use of the JFIF marker, but not the Adobe marker, + * when using YCbCr or grayscale data. The JFIF marker should NOT + * be used for any other JPEG colorspace. The Adobe marker is helpful + * to distinguish RGB, CMYK, and YCCK colorspaces. + * Note that an application can write additional header markers after + * jpeg_start_compress returns. + */ + +METHODDEF(void) +write_file_header (j_compress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + emit_marker(cinfo, M_SOI); /* first the SOI */ + + /* SOI is defined to reset restart interval to 0 */ + marker->last_restart_interval = 0; + + if (cinfo->write_JFIF_header) /* next an optional JFIF APP0 */ + emit_jfif_app0(cinfo); + if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */ + emit_adobe_app14(cinfo); +} + + +/* + * Write frame header. + * This consists of DQT and SOFn markers. + * Note that we do not emit the SOF until we have emitted the DQT(s). + * This avoids compatibility problems with incorrect implementations that + * try to error-check the quant table numbers as soon as they see the SOF. + */ + +METHODDEF(void) +write_frame_header (j_compress_ptr cinfo) +{ + int ci, prec; + boolean is_baseline; + jpeg_component_info *compptr; + + /* Emit DQT for each quantization table. + * Note that emit_dqt() suppresses any duplicate tables. + */ + prec = 0; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + prec += emit_dqt(cinfo, compptr->quant_tbl_no); + } + /* now prec is nonzero iff there are any 16-bit quant tables. */ + + /* Check for a non-baseline specification. + * Note we assume that Huffman table numbers won't be changed later. + */ + if (cinfo->arith_code || cinfo->progressive_mode || + cinfo->data_precision != 8) { + is_baseline = FALSE; + } else { + is_baseline = TRUE; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1) + is_baseline = FALSE; + } + if (prec && is_baseline) { + is_baseline = FALSE; + /* If it's baseline except for quantizer size, warn the user */ + TRACEMS(cinfo, 0, JTRC_16BIT_TABLES); + } + } + + /* Emit the proper SOF marker */ + if (cinfo->arith_code) { + if (cinfo->progressive_mode) + emit_sof(cinfo, M_SOF10); /* SOF code for progressive arithmetic */ + else + emit_sof(cinfo, M_SOF9); /* SOF code for sequential arithmetic */ + } else { + if (cinfo->progressive_mode) + emit_sof(cinfo, M_SOF2); /* SOF code for progressive Huffman */ + else if (is_baseline) + emit_sof(cinfo, M_SOF0); /* SOF code for baseline implementation */ + else + emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ + } +} + + +/* + * Write scan header. + * This consists of DHT or DAC markers, optional DRI, and SOS. + * Compressed data will be written following the SOS. + */ + +METHODDEF(void) +write_scan_header (j_compress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + int i; + jpeg_component_info *compptr; + + if (cinfo->arith_code) { + /* Emit arith conditioning info. We may have some duplication + * if the file has multiple scans, but it's so small it's hardly + * worth worrying about. + */ + emit_dac(cinfo); + } else { + /* Emit Huffman tables. + * Note that emit_dht() suppresses any duplicate tables. + */ + for (i = 0; i < cinfo->comps_in_scan; i++) { + compptr = cinfo->cur_comp_info[i]; + if (cinfo->progressive_mode) { + /* Progressive mode: only DC or only AC tables are used in one scan */ + if (cinfo->Ss == 0) { + if (cinfo->Ah == 0) /* DC needs no table for refinement scan */ + emit_dht(cinfo, compptr->dc_tbl_no, FALSE); + } else { + emit_dht(cinfo, compptr->ac_tbl_no, TRUE); + } + } else { + /* Sequential mode: need both DC and AC tables */ + emit_dht(cinfo, compptr->dc_tbl_no, FALSE); + emit_dht(cinfo, compptr->ac_tbl_no, TRUE); + } + } + } + + /* Emit DRI if required --- note that DRI value could change for each scan. + * We avoid wasting space with unnecessary DRIs, however. + */ + if (cinfo->restart_interval != marker->last_restart_interval) { + emit_dri(cinfo); + marker->last_restart_interval = cinfo->restart_interval; + } + + emit_sos(cinfo); +} + + +/* + * Write datastream trailer. + */ + +METHODDEF(void) +write_file_trailer (j_compress_ptr cinfo) +{ + emit_marker(cinfo, M_EOI); +} + + +/* + * Write an abbreviated table-specification datastream. + * This consists of SOI, DQT and DHT tables, and EOI. + * Any table that is defined and not marked sent_table = TRUE will be + * emitted. Note that all tables will be marked sent_table = TRUE at exit. + */ + +METHODDEF(void) +write_tables_only (j_compress_ptr cinfo) +{ + int i; + + emit_marker(cinfo, M_SOI); + + for (i = 0; i < NUM_QUANT_TBLS; i++) { + if (cinfo->quant_tbl_ptrs[i] != NULL) + (void) emit_dqt(cinfo, i); + } + + if (! cinfo->arith_code) { + for (i = 0; i < NUM_HUFF_TBLS; i++) { + if (cinfo->dc_huff_tbl_ptrs[i] != NULL) + emit_dht(cinfo, i, FALSE); + if (cinfo->ac_huff_tbl_ptrs[i] != NULL) + emit_dht(cinfo, i, TRUE); + } + } + + emit_marker(cinfo, M_EOI); +} + + +/* + * Initialize the marker writer module. + */ + +GLOBAL(void) +jinit_marker_writer (j_compress_ptr cinfo) +{ + my_marker_ptr marker; + + /* Create the subobject */ + marker = (my_marker_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_marker_writer)); + cinfo->marker = (struct jpeg_marker_writer *) marker; + /* Initialize method pointers */ + marker->pub.write_file_header = write_file_header; + marker->pub.write_frame_header = write_frame_header; + marker->pub.write_scan_header = write_scan_header; + marker->pub.write_file_trailer = write_file_trailer; + marker->pub.write_tables_only = write_tables_only; + marker->pub.write_marker_header = write_marker_header; + marker->pub.write_marker_byte = write_marker_byte; + /* Initialize private state */ + marker->last_restart_interval = 0; +} diff --git a/3rdparty/openctm/tools/jpeg/jcmaster.c b/3rdparty/openctm/tools/jpeg/jcmaster.c new file mode 100644 index 000000000..15f2b3032 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcmaster.c @@ -0,0 +1,770 @@ +/* + * jcmaster.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2003-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains master control logic for the JPEG compressor. + * These routines are concerned with parameter validation, initial setup, + * and inter-pass control (determining the number of passes and the work + * to be done in each pass). + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef enum { + main_pass, /* input data, also do first output step */ + huff_opt_pass, /* Huffman code optimization pass */ + output_pass /* data output pass */ +} c_pass_type; + +typedef struct { + struct jpeg_comp_master pub; /* public fields */ + + c_pass_type pass_type; /* the type of the current pass */ + + int pass_number; /* # of passes completed */ + int total_passes; /* total # of passes needed */ + + int scan_number; /* current index in scan_info[] */ +} my_comp_master; + +typedef my_comp_master * my_master_ptr; + + +/* + * Support routines that do various essential calculations. + */ + +/* + * Compute JPEG image dimensions and related values. + * NOTE: this is exported for possible use by application. + * Hence it mustn't do anything that can't be done twice. + */ + +GLOBAL(void) +jpeg_calc_jpeg_dimensions (j_compress_ptr cinfo) +/* Do computations that are needed before master selection phase */ +{ +#ifdef DCT_SCALING_SUPPORTED + + /* Compute actual JPEG image dimensions and DCT scaling choices. */ + if (cinfo->scale_num >= cinfo->scale_denom * 8) { + /* Provide 8/1 scaling */ + cinfo->jpeg_width = cinfo->image_width << 3; + cinfo->jpeg_height = cinfo->image_height << 3; + cinfo->min_DCT_h_scaled_size = 1; + cinfo->min_DCT_v_scaled_size = 1; + } else if (cinfo->scale_num >= cinfo->scale_denom * 4) { + /* Provide 4/1 scaling */ + cinfo->jpeg_width = cinfo->image_width << 2; + cinfo->jpeg_height = cinfo->image_height << 2; + cinfo->min_DCT_h_scaled_size = 2; + cinfo->min_DCT_v_scaled_size = 2; + } else if (cinfo->scale_num * 3 >= cinfo->scale_denom * 8) { + /* Provide 8/3 scaling */ + cinfo->jpeg_width = (cinfo->image_width << 1) + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 2, 3L); + cinfo->jpeg_height = (cinfo->image_height << 1) + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 2, 3L); + cinfo->min_DCT_h_scaled_size = 3; + cinfo->min_DCT_v_scaled_size = 3; + } else if (cinfo->scale_num >= cinfo->scale_denom * 2) { + /* Provide 2/1 scaling */ + cinfo->jpeg_width = cinfo->image_width << 1; + cinfo->jpeg_height = cinfo->image_height << 1; + cinfo->min_DCT_h_scaled_size = 4; + cinfo->min_DCT_v_scaled_size = 4; + } else if (cinfo->scale_num * 5 >= cinfo->scale_denom * 8) { + /* Provide 8/5 scaling */ + cinfo->jpeg_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 3, 5L); + cinfo->jpeg_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 3, 5L); + cinfo->min_DCT_h_scaled_size = 5; + cinfo->min_DCT_v_scaled_size = 5; + } else if (cinfo->scale_num * 3 >= cinfo->scale_denom * 4) { + /* Provide 4/3 scaling */ + cinfo->jpeg_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 3L); + cinfo->jpeg_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 3L); + cinfo->min_DCT_h_scaled_size = 6; + cinfo->min_DCT_v_scaled_size = 6; + } else if (cinfo->scale_num * 7 >= cinfo->scale_denom * 8) { + /* Provide 8/7 scaling */ + cinfo->jpeg_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 7L); + cinfo->jpeg_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 7L); + cinfo->min_DCT_h_scaled_size = 7; + cinfo->min_DCT_v_scaled_size = 7; + } else if (cinfo->scale_num >= cinfo->scale_denom) { + /* Provide 1/1 scaling */ + cinfo->jpeg_width = cinfo->image_width; + cinfo->jpeg_height = cinfo->image_height; + cinfo->min_DCT_h_scaled_size = DCTSIZE; + cinfo->min_DCT_v_scaled_size = DCTSIZE; + } else if (cinfo->scale_num * 9 >= cinfo->scale_denom * 8) { + /* Provide 8/9 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 8, 9L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 8, 9L); + cinfo->min_DCT_h_scaled_size = 9; + cinfo->min_DCT_v_scaled_size = 9; + } else if (cinfo->scale_num * 5 >= cinfo->scale_denom * 4) { + /* Provide 4/5 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 4, 5L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 4, 5L); + cinfo->min_DCT_h_scaled_size = 10; + cinfo->min_DCT_v_scaled_size = 10; + } else if (cinfo->scale_num * 11 >= cinfo->scale_denom * 8) { + /* Provide 8/11 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 8, 11L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 8, 11L); + cinfo->min_DCT_h_scaled_size = 11; + cinfo->min_DCT_v_scaled_size = 11; + } else if (cinfo->scale_num * 3 >= cinfo->scale_denom * 2) { + /* Provide 2/3 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 2, 3L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 2, 3L); + cinfo->min_DCT_h_scaled_size = 12; + cinfo->min_DCT_v_scaled_size = 12; + } else if (cinfo->scale_num * 13 >= cinfo->scale_denom * 8) { + /* Provide 8/13 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 8, 13L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 8, 13L); + cinfo->min_DCT_h_scaled_size = 13; + cinfo->min_DCT_v_scaled_size = 13; + } else if (cinfo->scale_num * 7 >= cinfo->scale_denom * 4) { + /* Provide 4/7 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 4, 7L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 4, 7L); + cinfo->min_DCT_h_scaled_size = 14; + cinfo->min_DCT_v_scaled_size = 14; + } else if (cinfo->scale_num * 15 >= cinfo->scale_denom * 8) { + /* Provide 8/15 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 8, 15L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 8, 15L); + cinfo->min_DCT_h_scaled_size = 15; + cinfo->min_DCT_v_scaled_size = 15; + } else { + /* Provide 1/2 scaling */ + cinfo->jpeg_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 2L); + cinfo->jpeg_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 2L); + cinfo->min_DCT_h_scaled_size = 16; + cinfo->min_DCT_v_scaled_size = 16; + } + +#else /* !DCT_SCALING_SUPPORTED */ + + /* Hardwire it to "no scaling" */ + cinfo->jpeg_width = cinfo->image_width; + cinfo->jpeg_height = cinfo->image_height; + cinfo->min_DCT_h_scaled_size = DCTSIZE; + cinfo->min_DCT_v_scaled_size = DCTSIZE; + +#endif /* DCT_SCALING_SUPPORTED */ +} + + +LOCAL(void) +initial_setup (j_compress_ptr cinfo) +/* Do computations that are needed before master selection phase */ +{ + int ci, ssize; + jpeg_component_info *compptr; + long samplesperrow; + JDIMENSION jd_samplesperrow; + + jpeg_calc_jpeg_dimensions(cinfo); + + /* Sanity check on image dimensions */ + if (cinfo->jpeg_height <= 0 || cinfo->jpeg_width <= 0 + || cinfo->num_components <= 0 || cinfo->input_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + + /* Make sure image isn't bigger than I can handle */ + if ((long) cinfo->jpeg_height > (long) JPEG_MAX_DIMENSION || + (long) cinfo->jpeg_width > (long) JPEG_MAX_DIMENSION) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); + + /* Width of an input scanline must be representable as JDIMENSION. */ + samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; + jd_samplesperrow = (JDIMENSION) samplesperrow; + if ((long) jd_samplesperrow != samplesperrow) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + + /* Check that number of components won't exceed internal array sizes */ + if (cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + + /* Compute maximum sampling factors; check factor validity */ + cinfo->max_h_samp_factor = 1; + cinfo->max_v_samp_factor = 1; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || + compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) + ERREXIT(cinfo, JERR_BAD_SAMPLING); + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + compptr->h_samp_factor); + cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, + compptr->v_samp_factor); + } + + /* Compute dimensions of components */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Fill in the correct component_index value; don't rely on application */ + compptr->component_index = ci; + /* In selecting the actual DCT scaling for each component, we try to + * scale down the chroma components via DCT scaling rather than downsampling. + * This saves time if the downsampler gets to use 1:1 scaling. + * Note this code adapts subsampling ratios which are powers of 2. + */ + ssize = 1; +#ifdef DCT_SCALING_SUPPORTED + while (cinfo->min_DCT_h_scaled_size * ssize <= + (cinfo->do_fancy_downsampling ? DCTSIZE : DCTSIZE / 2) && + (cinfo->max_h_samp_factor % (compptr->h_samp_factor * ssize * 2)) == 0) { + ssize = ssize * 2; + } +#endif + compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size * ssize; + ssize = 1; +#ifdef DCT_SCALING_SUPPORTED + while (cinfo->min_DCT_v_scaled_size * ssize <= + (cinfo->do_fancy_downsampling ? DCTSIZE : DCTSIZE / 2) && + (cinfo->max_v_samp_factor % (compptr->v_samp_factor * ssize * 2)) == 0) { + ssize = ssize * 2; + } +#endif + compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size * ssize; + + /* We don't support DCT ratios larger than 2. */ + if (compptr->DCT_h_scaled_size > compptr->DCT_v_scaled_size * 2) + compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size * 2; + else if (compptr->DCT_v_scaled_size > compptr->DCT_h_scaled_size * 2) + compptr->DCT_v_scaled_size = compptr->DCT_h_scaled_size * 2; + + /* Size in DCT blocks */ + compptr->width_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_width * (long) compptr->h_samp_factor, + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->height_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_height * (long) compptr->v_samp_factor, + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + /* Size in samples */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_width * + (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size), + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_height * + (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size), + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + /* Mark component needed (this flag isn't actually used for compression) */ + compptr->component_needed = TRUE; + } + + /* Compute number of fully interleaved MCU rows (number of times that + * main controller will call coefficient controller). + */ + cinfo->total_iMCU_rows = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); +} + + +#ifdef C_MULTISCAN_FILES_SUPPORTED + +LOCAL(void) +validate_script (j_compress_ptr cinfo) +/* Verify that the scan script in cinfo->scan_info[] is valid; also + * determine whether it uses progressive JPEG, and set cinfo->progressive_mode. + */ +{ + const jpeg_scan_info * scanptr; + int scanno, ncomps, ci, coefi, thisi; + int Ss, Se, Ah, Al; + boolean component_sent[MAX_COMPONENTS]; +#ifdef C_PROGRESSIVE_SUPPORTED + int * last_bitpos_ptr; + int last_bitpos[MAX_COMPONENTS][DCTSIZE2]; + /* -1 until that coefficient has been seen; then last Al for it */ +#endif + + if (cinfo->num_scans <= 0) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, 0); + + /* For sequential JPEG, all scans must have Ss=0, Se=DCTSIZE2-1; + * for progressive JPEG, no scan can have this. + */ + scanptr = cinfo->scan_info; + if (scanptr->Ss != 0 || scanptr->Se != DCTSIZE2-1) { +#ifdef C_PROGRESSIVE_SUPPORTED + cinfo->progressive_mode = TRUE; + last_bitpos_ptr = & last_bitpos[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + for (coefi = 0; coefi < DCTSIZE2; coefi++) + *last_bitpos_ptr++ = -1; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + cinfo->progressive_mode = FALSE; + for (ci = 0; ci < cinfo->num_components; ci++) + component_sent[ci] = FALSE; + } + + for (scanno = 1; scanno <= cinfo->num_scans; scanptr++, scanno++) { + /* Validate component indexes */ + ncomps = scanptr->comps_in_scan; + if (ncomps <= 0 || ncomps > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, ncomps, MAX_COMPS_IN_SCAN); + for (ci = 0; ci < ncomps; ci++) { + thisi = scanptr->component_index[ci]; + if (thisi < 0 || thisi >= cinfo->num_components) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); + /* Components must appear in SOF order within each scan */ + if (ci > 0 && thisi <= scanptr->component_index[ci-1]) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); + } + /* Validate progression parameters */ + Ss = scanptr->Ss; + Se = scanptr->Se; + Ah = scanptr->Ah; + Al = scanptr->Al; + if (cinfo->progressive_mode) { +#ifdef C_PROGRESSIVE_SUPPORTED + /* The JPEG spec simply gives the ranges 0..13 for Ah and Al, but that + * seems wrong: the upper bound ought to depend on data precision. + * Perhaps they really meant 0..N+1 for N-bit precision. + * Here we allow 0..10 for 8-bit data; Al larger than 10 results in + * out-of-range reconstructed DC values during the first DC scan, + * which might cause problems for some decoders. + */ +#if BITS_IN_JSAMPLE == 8 +#define MAX_AH_AL 10 +#else +#define MAX_AH_AL 13 +#endif + if (Ss < 0 || Ss >= DCTSIZE2 || Se < Ss || Se >= DCTSIZE2 || + Ah < 0 || Ah > MAX_AH_AL || Al < 0 || Al > MAX_AH_AL) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + if (Ss == 0) { + if (Se != 0) /* DC and AC together not OK */ + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } else { + if (ncomps != 1) /* AC scans must be for only one component */ + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } + for (ci = 0; ci < ncomps; ci++) { + last_bitpos_ptr = & last_bitpos[scanptr->component_index[ci]][0]; + if (Ss != 0 && last_bitpos_ptr[0] < 0) /* AC without prior DC scan */ + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + for (coefi = Ss; coefi <= Se; coefi++) { + if (last_bitpos_ptr[coefi] < 0) { + /* first scan of this coefficient */ + if (Ah != 0) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } else { + /* not first scan */ + if (Ah != last_bitpos_ptr[coefi] || Al != Ah-1) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } + last_bitpos_ptr[coefi] = Al; + } + } +#endif + } else { + /* For sequential JPEG, all progression parameters must be these: */ + if (Ss != 0 || Se != DCTSIZE2-1 || Ah != 0 || Al != 0) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + /* Make sure components are not sent twice */ + for (ci = 0; ci < ncomps; ci++) { + thisi = scanptr->component_index[ci]; + if (component_sent[thisi]) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); + component_sent[thisi] = TRUE; + } + } + } + + /* Now verify that everything got sent. */ + if (cinfo->progressive_mode) { +#ifdef C_PROGRESSIVE_SUPPORTED + /* For progressive mode, we only check that at least some DC data + * got sent for each component; the spec does not require that all bits + * of all coefficients be transmitted. Would it be wiser to enforce + * transmission of all coefficient bits?? + */ + for (ci = 0; ci < cinfo->num_components; ci++) { + if (last_bitpos[ci][0] < 0) + ERREXIT(cinfo, JERR_MISSING_DATA); + } +#endif + } else { + for (ci = 0; ci < cinfo->num_components; ci++) { + if (! component_sent[ci]) + ERREXIT(cinfo, JERR_MISSING_DATA); + } + } +} + +#endif /* C_MULTISCAN_FILES_SUPPORTED */ + + +LOCAL(void) +select_scan_parameters (j_compress_ptr cinfo) +/* Set up the scan parameters for the current scan */ +{ + int ci; + +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (cinfo->scan_info != NULL) { + /* Prepare for current scan --- the script is already validated */ + my_master_ptr master = (my_master_ptr) cinfo->master; + const jpeg_scan_info * scanptr = cinfo->scan_info + master->scan_number; + + cinfo->comps_in_scan = scanptr->comps_in_scan; + for (ci = 0; ci < scanptr->comps_in_scan; ci++) { + cinfo->cur_comp_info[ci] = + &cinfo->comp_info[scanptr->component_index[ci]]; + } + cinfo->Ss = scanptr->Ss; + cinfo->Se = scanptr->Se; + cinfo->Ah = scanptr->Ah; + cinfo->Al = scanptr->Al; + } + else +#endif + { + /* Prepare for single sequential-JPEG scan containing all components */ + if (cinfo->num_components > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPS_IN_SCAN); + cinfo->comps_in_scan = cinfo->num_components; + for (ci = 0; ci < cinfo->num_components; ci++) { + cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci]; + } + cinfo->Ss = 0; + cinfo->Se = DCTSIZE2-1; + cinfo->Ah = 0; + cinfo->Al = 0; + } +} + + +LOCAL(void) +per_scan_setup (j_compress_ptr cinfo) +/* Do computations that are needed before processing a JPEG scan */ +/* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */ +{ + int ci, mcublks, tmp; + jpeg_component_info *compptr; + + if (cinfo->comps_in_scan == 1) { + + /* Noninterleaved (single-component) scan */ + compptr = cinfo->cur_comp_info[0]; + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = compptr->width_in_blocks; + cinfo->MCU_rows_in_scan = compptr->height_in_blocks; + + /* For noninterleaved scan, always one block per MCU */ + compptr->MCU_width = 1; + compptr->MCU_height = 1; + compptr->MCU_blocks = 1; + compptr->MCU_sample_width = compptr->DCT_h_scaled_size; + compptr->last_col_width = 1; + /* For noninterleaved scans, it is convenient to define last_row_height + * as the number of block rows present in the last iMCU row. + */ + tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (tmp == 0) tmp = compptr->v_samp_factor; + compptr->last_row_height = tmp; + + /* Prepare array describing MCU composition */ + cinfo->blocks_in_MCU = 1; + cinfo->MCU_membership[0] = 0; + + } else { + + /* Interleaved (multi-component) scan */ + if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, + MAX_COMPS_IN_SCAN); + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_width, + (long) (cinfo->max_h_samp_factor*DCTSIZE)); + cinfo->MCU_rows_in_scan = (JDIMENSION) + jdiv_round_up((long) cinfo->jpeg_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + cinfo->blocks_in_MCU = 0; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Sampling factors give # of blocks of component in each MCU */ + compptr->MCU_width = compptr->h_samp_factor; + compptr->MCU_height = compptr->v_samp_factor; + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size; + /* Figure number of non-dummy blocks in last MCU column & row */ + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + if (tmp == 0) tmp = compptr->MCU_width; + compptr->last_col_width = tmp; + tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); + if (tmp == 0) tmp = compptr->MCU_height; + compptr->last_row_height = tmp; + /* Prepare array describing MCU composition */ + mcublks = compptr->MCU_blocks; + if (cinfo->blocks_in_MCU + mcublks > C_MAX_BLOCKS_IN_MCU) + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + while (mcublks-- > 0) { + cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; + } + } + + } + + /* Convert restart specified in rows to actual MCU count. */ + /* Note that count must fit in 16 bits, so we provide limiting. */ + if (cinfo->restart_in_rows > 0) { + long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row; + cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L); + } +} + + +/* + * Per-pass setup. + * This is called at the beginning of each pass. We determine which modules + * will be active during this pass and give them appropriate start_pass calls. + * We also set is_last_pass to indicate whether any more passes will be + * required. + */ + +METHODDEF(void) +prepare_for_pass (j_compress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + switch (master->pass_type) { + case main_pass: + /* Initial pass: will collect input data, and do either Huffman + * optimization or data output for the first scan. + */ + select_scan_parameters(cinfo); + per_scan_setup(cinfo); + if (! cinfo->raw_data_in) { + (*cinfo->cconvert->start_pass) (cinfo); + (*cinfo->downsample->start_pass) (cinfo); + (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU); + } + (*cinfo->fdct->start_pass) (cinfo); + (*cinfo->entropy->start_pass) (cinfo, cinfo->optimize_coding); + (*cinfo->coef->start_pass) (cinfo, + (master->total_passes > 1 ? + JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + if (cinfo->optimize_coding) { + /* No immediate data output; postpone writing frame/scan headers */ + master->pub.call_pass_startup = FALSE; + } else { + /* Will write frame/scan headers at first jpeg_write_scanlines call */ + master->pub.call_pass_startup = TRUE; + } + break; +#ifdef ENTROPY_OPT_SUPPORTED + case huff_opt_pass: + /* Do Huffman optimization for a scan after the first one. */ + select_scan_parameters(cinfo); + per_scan_setup(cinfo); + if (cinfo->Ss != 0 || cinfo->Ah == 0) { + (*cinfo->entropy->start_pass) (cinfo, TRUE); + (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); + master->pub.call_pass_startup = FALSE; + break; + } + /* Special case: Huffman DC refinement scans need no Huffman table + * and therefore we can skip the optimization pass for them. + */ + master->pass_type = output_pass; + master->pass_number++; + /*FALLTHROUGH*/ +#endif + case output_pass: + /* Do a data-output pass. */ + /* We need not repeat per-scan setup if prior optimization pass did it. */ + if (! cinfo->optimize_coding) { + select_scan_parameters(cinfo); + per_scan_setup(cinfo); + } + (*cinfo->entropy->start_pass) (cinfo, FALSE); + (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); + /* We emit frame/scan headers now */ + if (master->scan_number == 0) + (*cinfo->marker->write_frame_header) (cinfo); + (*cinfo->marker->write_scan_header) (cinfo); + master->pub.call_pass_startup = FALSE; + break; + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + } + + master->pub.is_last_pass = (master->pass_number == master->total_passes-1); + + /* Set up progress monitor's pass info if present */ + if (cinfo->progress != NULL) { + cinfo->progress->completed_passes = master->pass_number; + cinfo->progress->total_passes = master->total_passes; + } +} + + +/* + * Special start-of-pass hook. + * This is called by jpeg_write_scanlines if call_pass_startup is TRUE. + * In single-pass processing, we need this hook because we don't want to + * write frame/scan headers during jpeg_start_compress; we want to let the + * application write COM markers etc. between jpeg_start_compress and the + * jpeg_write_scanlines loop. + * In multi-pass processing, this routine is not used. + */ + +METHODDEF(void) +pass_startup (j_compress_ptr cinfo) +{ + cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */ + + (*cinfo->marker->write_frame_header) (cinfo); + (*cinfo->marker->write_scan_header) (cinfo); +} + + +/* + * Finish up at end of pass. + */ + +METHODDEF(void) +finish_pass_master (j_compress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + /* The entropy coder always needs an end-of-pass call, + * either to analyze statistics or to flush its output buffer. + */ + (*cinfo->entropy->finish_pass) (cinfo); + + /* Update state for next pass */ + switch (master->pass_type) { + case main_pass: + /* next pass is either output of scan 0 (after optimization) + * or output of scan 1 (if no optimization). + */ + master->pass_type = output_pass; + if (! cinfo->optimize_coding) + master->scan_number++; + break; + case huff_opt_pass: + /* next pass is always output of current scan */ + master->pass_type = output_pass; + break; + case output_pass: + /* next pass is either optimization or output of next scan */ + if (cinfo->optimize_coding) + master->pass_type = huff_opt_pass; + master->scan_number++; + break; + } + + master->pass_number++; +} + + +/* + * Initialize master compression control. + */ + +GLOBAL(void) +jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) +{ + my_master_ptr master; + + master = (my_master_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_comp_master)); + cinfo->master = (struct jpeg_comp_master *) master; + master->pub.prepare_for_pass = prepare_for_pass; + master->pub.pass_startup = pass_startup; + master->pub.finish_pass = finish_pass_master; + master->pub.is_last_pass = FALSE; + + /* Validate parameters, determine derived values */ + initial_setup(cinfo); + + if (cinfo->scan_info != NULL) { +#ifdef C_MULTISCAN_FILES_SUPPORTED + validate_script(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + cinfo->progressive_mode = FALSE; + cinfo->num_scans = 1; + } + + if (cinfo->progressive_mode && cinfo->arith_code == 0) /* TEMPORARY HACK ??? */ + cinfo->optimize_coding = TRUE; /* assume default tables no good for progressive mode */ + + /* Initialize my private state */ + if (transcode_only) { + /* no main pass in transcoding */ + if (cinfo->optimize_coding) + master->pass_type = huff_opt_pass; + else + master->pass_type = output_pass; + } else { + /* for normal compression, first pass is always this type: */ + master->pass_type = main_pass; + } + master->scan_number = 0; + master->pass_number = 0; + if (cinfo->optimize_coding) + master->total_passes = cinfo->num_scans * 2; + else + master->total_passes = cinfo->num_scans; +} diff --git a/3rdparty/openctm/tools/jpeg/jcomapi.c b/3rdparty/openctm/tools/jpeg/jcomapi.c new file mode 100644 index 000000000..1b1a340c1 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcomapi.c @@ -0,0 +1,106 @@ +/* + * jcomapi.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface routines that are used for both + * compression and decompression. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Abort processing of a JPEG compression or decompression operation, + * but don't destroy the object itself. + * + * For this, we merely clean up all the nonpermanent memory pools. + * Note that temp files (virtual arrays) are not allowed to belong to + * the permanent pool, so we will be able to close all temp files here. + * Closing a data source or destination, if necessary, is the application's + * responsibility. + */ + +GLOBAL(void) +jpeg_abort (j_common_ptr cinfo) +{ + int pool; + + /* Do nothing if called on a not-initialized or destroyed JPEG object. */ + if (cinfo->mem == NULL) + return; + + /* Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { + (*cinfo->mem->free_pool) (cinfo, pool); + } + + /* Reset overall state for possible reuse of object */ + if (cinfo->is_decompressor) { + cinfo->global_state = DSTATE_START; + /* Try to keep application from accessing now-deleted marker list. + * A bit kludgy to do it here, but this is the most central place. + */ + ((j_decompress_ptr) cinfo)->marker_list = NULL; + } else { + cinfo->global_state = CSTATE_START; + } +} + + +/* + * Destruction of a JPEG object. + * + * Everything gets deallocated except the master jpeg_compress_struct itself + * and the error manager struct. Both of these are supplied by the application + * and must be freed, if necessary, by the application. (Often they are on + * the stack and so don't need to be freed anyway.) + * Closing a data source or destination, if necessary, is the application's + * responsibility. + */ + +GLOBAL(void) +jpeg_destroy (j_common_ptr cinfo) +{ + /* We need only tell the memory manager to release everything. */ + /* NB: mem pointer is NULL if memory mgr failed to initialize. */ + if (cinfo->mem != NULL) + (*cinfo->mem->self_destruct) (cinfo); + cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ + cinfo->global_state = 0; /* mark it destroyed */ +} + + +/* + * Convenience routines for allocating quantization and Huffman tables. + * (Would jutils.c be a more reasonable place to put these?) + */ + +GLOBAL(JQUANT_TBL *) +jpeg_alloc_quant_table (j_common_ptr cinfo) +{ + JQUANT_TBL *tbl; + + tbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + return tbl; +} + + +GLOBAL(JHUFF_TBL *) +jpeg_alloc_huff_table (j_common_ptr cinfo) +{ + JHUFF_TBL *tbl; + + tbl = (JHUFF_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + return tbl; +} diff --git a/3rdparty/openctm/tools/jpeg/jconfig.bcc b/3rdparty/openctm/tools/jpeg/jconfig.bcc new file mode 100644 index 000000000..ae2e97e70 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.bcc @@ -0,0 +1,48 @@ +/* jconfig.bcc --- jconfig.h for Borland C (Turbo C) on MS-DOS or OS/2. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#ifdef __MSDOS__ +#define NEED_FAR_POINTERS /* for small or medium memory model */ +#endif +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN /* this assumes you have -w-stu in CFLAGS */ + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#ifdef __MSDOS__ +#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ +#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ +#define USE_FMEM /* Borland has _fmemcpy() and _fmemset() */ +#endif + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define USE_SETMODE /* Borland has setmode() */ +#ifdef __MSDOS__ +#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ +#endif +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.cfg b/3rdparty/openctm/tools/jpeg/jconfig.cfg new file mode 100644 index 000000000..2a509ae73 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.cfg @@ -0,0 +1,45 @@ +/* jconfig.cfg --- source file edited by configure script */ +/* see jconfig.txt for explanations */ + +#undef HAVE_PROTOTYPES +#undef HAVE_UNSIGNED_CHAR +#undef HAVE_UNSIGNED_SHORT +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#undef HAVE_STDDEF_H +#undef HAVE_STDLIB_H +#undef HAVE_LOCALE_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#undef INLINE +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.dj b/3rdparty/openctm/tools/jpeg/jconfig.dj new file mode 100644 index 000000000..9c0f2cebb --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.dj @@ -0,0 +1,38 @@ +/* jconfig.dj --- jconfig.h for DJGPP (Delorie's GNU C port) on MS-DOS. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ +#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.linux b/3rdparty/openctm/tools/jpeg/jconfig.linux new file mode 100644 index 000000000..025d5cf64 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.linux @@ -0,0 +1,38 @@ +/* jconfig.linux --- jconfig.h for Linux. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ +#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.mac b/3rdparty/openctm/tools/jpeg/jconfig.mac new file mode 100644 index 000000000..a5e5519fe --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.mac @@ -0,0 +1,43 @@ +/* jconfig.mac --- jconfig.h for CodeWarrior on Apple Macintosh */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define USE_MAC_MEMMGR /* Define this if you use jmemmac.c */ + +#define ALIGN_TYPE long /* Needed for 680x0 Macs */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define USE_CCOMMAND /* Command line reader for Macintosh */ +#define TWO_FILE_COMMANDLINE /* Binary I/O thru stdin/stdout doesn't work */ + +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.macosx b/3rdparty/openctm/tools/jpeg/jconfig.macosx new file mode 100644 index 000000000..ca6746ad8 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.macosx @@ -0,0 +1,37 @@ +/* jconfig.mac --- jconfig.h for CodeWarrior on Apple Macintosh */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* Binary I/O thru stdin/stdout doesn't work */ +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.manx b/3rdparty/openctm/tools/jpeg/jconfig.manx new file mode 100644 index 000000000..46ce2261f --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.manx @@ -0,0 +1,43 @@ +/* jconfig.manx --- jconfig.h for Amiga systems using Manx Aztec C ver 5.x. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ + +#define SHORTxSHORT_32 /* produces better DCT code with Aztec C */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#define signal_catcher _abort /* hack for Aztec C naming requirements */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.mc6 b/3rdparty/openctm/tools/jpeg/jconfig.mc6 new file mode 100644 index 000000000..894a635f1 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.mc6 @@ -0,0 +1,52 @@ +/* jconfig.mc6 --- jconfig.h for Microsoft C on MS-DOS, version 6.00A & up. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#define NEED_FAR_POINTERS /* for small or medium memory model */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ + +#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ + +#define USE_FMEM /* Microsoft has _fmemcpy() and _fmemset() */ + +#define NEED_FHEAPMIN /* far heap management routines are broken */ + +#define SHORTxLCONST_32 /* enable compiler-specific DCT optimization */ +/* Note: the above define is known to improve the code with Microsoft C 6.00A. + * I do not know whether it is good for later compiler versions. + * Please report any info on this point to jpeg-info@uunet.uu.net. + */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define USE_SETMODE /* Microsoft has setmode() */ +#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.mingw b/3rdparty/openctm/tools/jpeg/jconfig.mingw new file mode 100644 index 000000000..d3f24c4d0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.mingw @@ -0,0 +1,38 @@ +/* jconfig.mingw --- jconfig.h for MinGW. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ +#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.sas b/3rdparty/openctm/tools/jpeg/jconfig.sas new file mode 100644 index 000000000..8dc8cc184 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.sas @@ -0,0 +1,43 @@ +/* jconfig.sas --- jconfig.h for Amiga systems using SAS C 6.0 and up. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ + +#define NO_MKTEMP /* SAS C doesn't have mktemp() */ + +#define SHORTxSHORT_32 /* produces better DCT code with SAS C */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.st b/3rdparty/openctm/tools/jpeg/jconfig.st new file mode 100644 index 000000000..e0af8e100 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.st @@ -0,0 +1,42 @@ +/* jconfig.st --- jconfig.h for Atari ST/STE/TT using Pure C or Turbo C. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#define INCOMPLETE_TYPES_BROKEN /* suppress undefined-structure warnings */ + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define ALIGN_TYPE long /* apparently double is a weird size? */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* optional -- undef if you like Unix style */ +/* Note: if you undef TWO_FILE_COMMANDLINE, you may need to define + * USE_SETMODE. Some Atari compilers require it, some do not. + */ +#define NEED_SIGNAL_CATCHER /* needed if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.txt b/3rdparty/openctm/tools/jpeg/jconfig.txt new file mode 100644 index 000000000..253c9fd85 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.txt @@ -0,0 +1,155 @@ +/* + * jconfig.txt + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file documents the configuration options that are required to + * customize the JPEG software for a particular system. + * + * The actual configuration options for a particular installation are stored + * in jconfig.h. On many machines, jconfig.h can be generated automatically + * or copied from one of the "canned" jconfig files that we supply. But if + * you need to generate a jconfig.h file by hand, this file tells you how. + * + * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING. + * EDIT A COPY NAMED JCONFIG.H. + */ + + +/* + * These symbols indicate the properties of your machine or compiler. + * #define the symbol if yes, #undef it if no. + */ + +/* Does your compiler support function prototypes? + * (If not, you also need to use ansi2knr, see install.txt) + */ +#define HAVE_PROTOTYPES + +/* Does your compiler support the declaration "unsigned char" ? + * How about "unsigned short" ? + */ +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT + +/* Define "void" as "char" if your compiler doesn't know about type void. + * NOTE: be sure to define void such that "void *" represents the most general + * pointer type, e.g., that returned by malloc(). + */ +/* #define void char */ + +/* Define "const" as empty if your compiler doesn't know the "const" keyword. + */ +/* #define const */ + +/* Define this if an ordinary "char" type is unsigned. + * If you're not sure, leaving it undefined will work at some cost in speed. + * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. + */ +#undef CHAR_IS_UNSIGNED + +/* Define this if your system has an ANSI-conforming file. + */ +#define HAVE_STDDEF_H + +/* Define this if your system has an ANSI-conforming file. + */ +#define HAVE_STDLIB_H + +/* Define this if your system does not have an ANSI/SysV , + * but does have a BSD-style . + */ +#undef NEED_BSD_STRINGS + +/* Define this if your system does not provide typedef size_t in any of the + * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in + * instead. + */ +#undef NEED_SYS_TYPES_H + +/* For 80x86 machines, you need to define NEED_FAR_POINTERS, + * unless you are using a large-data memory model or 80386 flat-memory mode. + * On less brain-damaged CPUs this symbol must not be defined. + * (Defining this symbol causes large data structures to be referenced through + * "far" pointers and to be allocated with a special version of malloc.) + */ +#undef NEED_FAR_POINTERS + +/* Define this if your linker needs global names to be unique in less + * than the first 15 characters. + */ +#undef NEED_SHORT_EXTERNAL_NAMES + +/* Although a real ANSI C compiler can deal perfectly well with pointers to + * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI + * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, + * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you + * actually get "missing structure definition" warnings or errors while + * compiling the JPEG code. + */ +#undef INCOMPLETE_TYPES_BROKEN + + +/* + * The following options affect code selection within the JPEG library, + * but they don't need to be visible to applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS has been defined. + */ + +#ifdef JPEG_INTERNALS + +/* Define this if your compiler implements ">>" on signed values as a logical + * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, + * which is the normal and rational definition. + */ +#undef RIGHT_SHIFT_IS_UNSIGNED + + +#endif /* JPEG_INTERNALS */ + + +/* + * The remaining options do not affect the JPEG library proper, + * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). + * Other applications can ignore these. + */ + +#ifdef JPEG_CJPEG_DJPEG + +/* These defines indicate which image (non-JPEG) file formats are allowed. */ + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +/* Define this if you want to name both input and output files on the command + * line, rather than using stdout and optionally stdin. You MUST do this if + * your system can't cope with binary I/O to stdin/stdout. See comments at + * head of cjpeg.c or djpeg.c. + */ +#undef TWO_FILE_COMMANDLINE + +/* Define this if your system needs explicit cleanup of temporary files. + * This is crucial under MS-DOS, where the temporary "files" may be areas + * of extended memory; on most other systems it's not as important. + */ +#undef NEED_SIGNAL_CATCHER + +/* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). + * This is necessary on systems that distinguish text files from binary files, + * and is harmless on most systems that don't. If you have one of the rare + * systems that complains about the "b" spec, define this symbol. + */ +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. + */ +#undef PROGRESS_REPORT + + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.vc b/3rdparty/openctm/tools/jpeg/jconfig.vc new file mode 100644 index 000000000..709c4de5f --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.vc @@ -0,0 +1,45 @@ +/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +/* Define "boolean" as unsigned char, not int, per Windows custom */ +#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ +typedef unsigned char boolean; +#endif +#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ + + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Microsoft has setmode() */ +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.vms b/3rdparty/openctm/tools/jpeg/jconfig.vms new file mode 100644 index 000000000..bdaa027e5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.vms @@ -0,0 +1,37 @@ +/* jconfig.vms --- jconfig.h for use on Digital VMS. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* Needed on VMS */ +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jconfig.wat b/3rdparty/openctm/tools/jpeg/jconfig.wat new file mode 100644 index 000000000..f1e0c02f6 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jconfig.wat @@ -0,0 +1,38 @@ +/* jconfig.wat --- jconfig.h for Watcom C/C++ on MS-DOS or OS/2. */ +/* see jconfig.txt for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#define CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* Watcom uses flat 32-bit addressing */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Needed to make one-file style work in Watcom */ +#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/3rdparty/openctm/tools/jpeg/jcparam.c b/3rdparty/openctm/tools/jpeg/jcparam.c new file mode 100644 index 000000000..10c5c87e3 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcparam.c @@ -0,0 +1,632 @@ +/* + * jcparam.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * Modified 2003-2008 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains optional default-setting code for the JPEG compressor. + * Applications do not have to use this file, but those that don't use it + * must know a lot more about the innards of the JPEG code. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Quantization table setup routines + */ + +GLOBAL(void) +jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, boolean force_baseline) +/* Define a quantization table equal to the basic_table times + * a scale factor (given as a percentage). + * If force_baseline is TRUE, the computed quantization table entries + * are limited to 1..255 for JPEG baseline compatibility. + */ +{ + JQUANT_TBL ** qtblptr; + int i; + long temp; + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS) + ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl); + + qtblptr = & cinfo->quant_tbl_ptrs[which_tbl]; + + if (*qtblptr == NULL) + *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo); + + for (i = 0; i < DCTSIZE2; i++) { + temp = ((long) basic_table[i] * scale_factor + 50L) / 100L; + /* limit the values to the valid range */ + if (temp <= 0L) temp = 1L; + if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ + if (force_baseline && temp > 255L) + temp = 255L; /* limit to baseline range if requested */ + (*qtblptr)->quantval[i] = (UINT16) temp; + } + + /* Initialize sent_table FALSE so table will be written to JPEG file. */ + (*qtblptr)->sent_table = FALSE; +} + + +/* These are the sample quantization tables given in JPEG spec section K.1. + * The spec says that the values given produce "good" quality, and + * when divided by 2, "very good" quality. + */ +static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = { + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68, 109, 103, 77, + 24, 35, 55, 64, 81, 104, 113, 92, + 49, 64, 78, 87, 103, 121, 120, 101, + 72, 92, 95, 98, 112, 100, 103, 99 +}; +static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 +}; + + +GLOBAL(void) +jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline) +/* Set or change the 'quality' (quantization) setting, using default tables + * and straight percentage-scaling quality scales. + * This entry point allows different scalings for luminance and chrominance. + */ +{ + /* Set up two quantization tables using the specified scaling */ + jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, + cinfo->q_scale_factor[0], force_baseline); + jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, + cinfo->q_scale_factor[1], force_baseline); +} + + +GLOBAL(void) +jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, + boolean force_baseline) +/* Set or change the 'quality' (quantization) setting, using default tables + * and a straight percentage-scaling quality scale. In most cases it's better + * to use jpeg_set_quality (below); this entry point is provided for + * applications that insist on a linear percentage scaling. + */ +{ + /* Set up two quantization tables using the specified scaling */ + jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, + scale_factor, force_baseline); + jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, + scale_factor, force_baseline); +} + + +GLOBAL(int) +jpeg_quality_scaling (int quality) +/* Convert a user-specified quality rating to a percentage scaling factor + * for an underlying quantization table, using our recommended scaling curve. + * The input 'quality' factor should be 0 (terrible) to 100 (very good). + */ +{ + /* Safety limit on quality factor. Convert 0 to 1 to avoid zero divide. */ + if (quality <= 0) quality = 1; + if (quality > 100) quality = 100; + + /* The basic table is used as-is (scaling 100) for a quality of 50. + * Qualities 50..100 are converted to scaling percentage 200 - 2*Q; + * note that at Q=100 the scaling is 0, which will cause jpeg_add_quant_table + * to make all the table entries 1 (hence, minimum quantization loss). + * Qualities 1..50 are converted to scaling percentage 5000/Q. + */ + if (quality < 50) + quality = 5000 / quality; + else + quality = 200 - quality*2; + + return quality; +} + + +GLOBAL(void) +jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) +/* Set or change the 'quality' (quantization) setting, using default tables. + * This is the standard quality-adjusting entry point for typical user + * interfaces; only those who want detailed control over quantization tables + * would use the preceding three routines directly. + */ +{ + /* Convert user 0-100 rating to percentage scaling */ + quality = jpeg_quality_scaling(quality); + + /* Set up standard quality tables */ + jpeg_set_linear_quality(cinfo, quality, force_baseline); +} + + +/* + * Huffman table setup routines + */ + +LOCAL(void) +add_huff_table (j_compress_ptr cinfo, + JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val) +/* Define a Huffman table */ +{ + int nsymbols, len; + + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + + /* Copy the number-of-symbols-of-each-code-length counts */ + MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); + + /* Validate the counts. We do this here mainly so we can copy the right + * number of symbols from the val[] array, without risking marching off + * the end of memory. jchuff.c will do a more thorough test later. + */ + nsymbols = 0; + for (len = 1; len <= 16; len++) + nsymbols += bits[len]; + if (nsymbols < 1 || nsymbols > 256) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + + MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8)); + + /* Initialize sent_table FALSE so table will be written to JPEG file. */ + (*htblptr)->sent_table = FALSE; +} + + +LOCAL(void) +std_huff_tables (j_compress_ptr cinfo) +/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */ +/* IMPORTANT: these are only valid for 8-bit data precision! */ +{ + static const UINT8 bits_dc_luminance[17] = + { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; + static const UINT8 val_dc_luminance[] = + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + + static const UINT8 bits_dc_chrominance[17] = + { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; + static const UINT8 val_dc_chrominance[] = + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + + static const UINT8 bits_ac_luminance[17] = + { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d }; + static const UINT8 val_ac_luminance[] = + { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, + 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, + 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, + 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, + 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, + 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, + 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa }; + + static const UINT8 bits_ac_chrominance[17] = + { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 }; + static const UINT8 val_ac_chrominance[] = + { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, + 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, + 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, + 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, + 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, + 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, + 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, + 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, + 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa }; + + add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0], + bits_dc_luminance, val_dc_luminance); + add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0], + bits_ac_luminance, val_ac_luminance); + add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1], + bits_dc_chrominance, val_dc_chrominance); + add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1], + bits_ac_chrominance, val_ac_chrominance); +} + + +/* + * Default parameter setup for compression. + * + * Applications that don't choose to use this routine must do their + * own setup of all these parameters. Alternately, you can call this + * to establish defaults and then alter parameters selectively. This + * is the recommended approach since, if we add any new parameters, + * your code will still work (they'll be set to reasonable defaults). + */ + +GLOBAL(void) +jpeg_set_defaults (j_compress_ptr cinfo) +{ + int i; + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* Allocate comp_info array large enough for maximum component count. + * Array is made permanent in case application wants to compress + * multiple images at same param settings. + */ + if (cinfo->comp_info == NULL) + cinfo->comp_info = (jpeg_component_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + MAX_COMPONENTS * SIZEOF(jpeg_component_info)); + + /* Initialize everything not dependent on the color space */ + + cinfo->scale_num = 1; /* 1:1 scaling */ + cinfo->scale_denom = 1; + cinfo->data_precision = BITS_IN_JSAMPLE; + /* Set up two quantization tables using default quality of 75 */ + jpeg_set_quality(cinfo, 75, TRUE); + /* Set up two Huffman tables */ + std_huff_tables(cinfo); + + /* Initialize default arithmetic coding conditioning */ + for (i = 0; i < NUM_ARITH_TBLS; i++) { + cinfo->arith_dc_L[i] = 0; + cinfo->arith_dc_U[i] = 1; + cinfo->arith_ac_K[i] = 5; + } + + /* Default is no multiple-scan output */ + cinfo->scan_info = NULL; + cinfo->num_scans = 0; + + /* Expect normal source image, not raw downsampled data */ + cinfo->raw_data_in = FALSE; + + /* Use Huffman coding, not arithmetic coding, by default */ + cinfo->arith_code = FALSE; + + /* By default, don't do extra passes to optimize entropy coding */ + cinfo->optimize_coding = FALSE; + /* The standard Huffman tables are only valid for 8-bit data precision. + * If the precision is higher, force optimization on so that usable + * tables will be computed. This test can be removed if default tables + * are supplied that are valid for the desired precision. + */ + if (cinfo->data_precision > 8) + cinfo->optimize_coding = TRUE; + + /* By default, use the simpler non-cosited sampling alignment */ + cinfo->CCIR601_sampling = FALSE; + + /* By default, apply fancy downsampling */ + cinfo->do_fancy_downsampling = TRUE; + + /* No input smoothing */ + cinfo->smoothing_factor = 0; + + /* DCT algorithm preference */ + cinfo->dct_method = JDCT_DEFAULT; + + /* No restart markers */ + cinfo->restart_interval = 0; + cinfo->restart_in_rows = 0; + + /* Fill in default JFIF marker parameters. Note that whether the marker + * will actually be written is determined by jpeg_set_colorspace. + * + * By default, the library emits JFIF version code 1.01. + * An application that wants to emit JFIF 1.02 extension markers should set + * JFIF_minor_version to 2. We could probably get away with just defaulting + * to 1.02, but there may still be some decoders in use that will complain + * about that; saying 1.01 should minimize compatibility problems. + */ + cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */ + cinfo->JFIF_minor_version = 1; + cinfo->density_unit = 0; /* Pixel size is unknown by default */ + cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ + cinfo->Y_density = 1; + + /* Choose JPEG colorspace based on input space, set defaults accordingly */ + + jpeg_default_colorspace(cinfo); +} + + +/* + * Select an appropriate JPEG colorspace for in_color_space. + */ + +GLOBAL(void) +jpeg_default_colorspace (j_compress_ptr cinfo) +{ + switch (cinfo->in_color_space) { + case JCS_GRAYSCALE: + jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); + break; + case JCS_RGB: + jpeg_set_colorspace(cinfo, JCS_YCbCr); + break; + case JCS_YCbCr: + jpeg_set_colorspace(cinfo, JCS_YCbCr); + break; + case JCS_CMYK: + jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */ + break; + case JCS_YCCK: + jpeg_set_colorspace(cinfo, JCS_YCCK); + break; + case JCS_UNKNOWN: + jpeg_set_colorspace(cinfo, JCS_UNKNOWN); + break; + default: + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + } +} + + +/* + * Set the JPEG colorspace, and choose colorspace-dependent default values. + */ + +GLOBAL(void) +jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) +{ + jpeg_component_info * compptr; + int ci; + +#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ + (compptr = &cinfo->comp_info[index], \ + compptr->component_id = (id), \ + compptr->h_samp_factor = (hsamp), \ + compptr->v_samp_factor = (vsamp), \ + compptr->quant_tbl_no = (quant), \ + compptr->dc_tbl_no = (dctbl), \ + compptr->ac_tbl_no = (actbl) ) + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* For all colorspaces, we use Q and Huff tables 0 for luminance components, + * tables 1 for chrominance components. + */ + + cinfo->jpeg_color_space = colorspace; + + cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */ + cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */ + + switch (colorspace) { + case JCS_GRAYSCALE: + cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ + cinfo->num_components = 1; + /* JFIF specifies component ID 1 */ + SET_COMP(0, 1, 1,1, 0, 0,0); + break; + case JCS_RGB: + cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ + cinfo->num_components = 3; + SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); + SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); + SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); + break; + case JCS_YCbCr: + cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ + cinfo->num_components = 3; + /* JFIF specifies component IDs 1,2,3 */ + /* We default to 2x2 subsamples of chrominance */ + SET_COMP(0, 1, 2,2, 0, 0,0); + SET_COMP(1, 2, 1,1, 1, 1,1); + SET_COMP(2, 3, 1,1, 1, 1,1); + break; + case JCS_CMYK: + cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */ + cinfo->num_components = 4; + SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0); + SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0); + SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0); + SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0); + break; + case JCS_YCCK: + cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */ + cinfo->num_components = 4; + SET_COMP(0, 1, 2,2, 0, 0,0); + SET_COMP(1, 2, 1,1, 1, 1,1); + SET_COMP(2, 3, 1,1, 1, 1,1); + SET_COMP(3, 4, 2,2, 0, 0,0); + break; + case JCS_UNKNOWN: + cinfo->num_components = cinfo->input_components; + if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + for (ci = 0; ci < cinfo->num_components; ci++) { + SET_COMP(ci, ci, 1,1, 0, 0,0); + } + break; + default: + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + } +} + + +#ifdef C_PROGRESSIVE_SUPPORTED + +LOCAL(jpeg_scan_info *) +fill_a_scan (jpeg_scan_info * scanptr, int ci, + int Ss, int Se, int Ah, int Al) +/* Support routine: generate one scan for specified component */ +{ + scanptr->comps_in_scan = 1; + scanptr->component_index[0] = ci; + scanptr->Ss = Ss; + scanptr->Se = Se; + scanptr->Ah = Ah; + scanptr->Al = Al; + scanptr++; + return scanptr; +} + +LOCAL(jpeg_scan_info *) +fill_scans (jpeg_scan_info * scanptr, int ncomps, + int Ss, int Se, int Ah, int Al) +/* Support routine: generate one scan for each component */ +{ + int ci; + + for (ci = 0; ci < ncomps; ci++) { + scanptr->comps_in_scan = 1; + scanptr->component_index[0] = ci; + scanptr->Ss = Ss; + scanptr->Se = Se; + scanptr->Ah = Ah; + scanptr->Al = Al; + scanptr++; + } + return scanptr; +} + +LOCAL(jpeg_scan_info *) +fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al) +/* Support routine: generate interleaved DC scan if possible, else N scans */ +{ + int ci; + + if (ncomps <= MAX_COMPS_IN_SCAN) { + /* Single interleaved DC scan */ + scanptr->comps_in_scan = ncomps; + for (ci = 0; ci < ncomps; ci++) + scanptr->component_index[ci] = ci; + scanptr->Ss = scanptr->Se = 0; + scanptr->Ah = Ah; + scanptr->Al = Al; + scanptr++; + } else { + /* Noninterleaved DC scan for each component */ + scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al); + } + return scanptr; +} + + +/* + * Create a recommended progressive-JPEG script. + * cinfo->num_components and cinfo->jpeg_color_space must be correct. + */ + +GLOBAL(void) +jpeg_simple_progression (j_compress_ptr cinfo) +{ + int ncomps = cinfo->num_components; + int nscans; + jpeg_scan_info * scanptr; + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* Figure space needed for script. Calculation must match code below! */ + if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { + /* Custom script for YCbCr color images. */ + nscans = 10; + } else { + /* All-purpose script for other color spaces. */ + if (ncomps > MAX_COMPS_IN_SCAN) + nscans = 6 * ncomps; /* 2 DC + 4 AC scans per component */ + else + nscans = 2 + 4 * ncomps; /* 2 DC scans; 4 AC scans per component */ + } + + /* Allocate space for script. + * We need to put it in the permanent pool in case the application performs + * multiple compressions without changing the settings. To avoid a memory + * leak if jpeg_simple_progression is called repeatedly for the same JPEG + * object, we try to re-use previously allocated space, and we allocate + * enough space to handle YCbCr even if initially asked for grayscale. + */ + if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) { + cinfo->script_space_size = MAX(nscans, 10); + cinfo->script_space = (jpeg_scan_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + cinfo->script_space_size * SIZEOF(jpeg_scan_info)); + } + scanptr = cinfo->script_space; + cinfo->scan_info = scanptr; + cinfo->num_scans = nscans; + + if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { + /* Custom script for YCbCr color images. */ + /* Initial DC scan */ + scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); + /* Initial AC scan: get some luma data out in a hurry */ + scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2); + /* Chroma data is too small to be worth expending many scans on */ + scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1); + scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1); + /* Complete spectral selection for luma AC */ + scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2); + /* Refine next bit of luma AC */ + scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1); + /* Finish DC successive approximation */ + scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); + /* Finish AC successive approximation */ + scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0); + scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0); + /* Luma bottom bit comes last since it's usually largest scan */ + scanptr = fill_a_scan(scanptr, 0, 1, 63, 1, 0); + } else { + /* All-purpose script for other color spaces. */ + /* Successive approximation first pass */ + scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); + scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2); + scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2); + /* Successive approximation second pass */ + scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1); + /* Successive approximation final pass */ + scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); + scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0); + } +} + +#endif /* C_PROGRESSIVE_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jcprepct.c b/3rdparty/openctm/tools/jpeg/jcprepct.c new file mode 100644 index 000000000..00101e0b5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcprepct.c @@ -0,0 +1,358 @@ +/* + * jcprepct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the compression preprocessing controller. + * This controller manages the color conversion, downsampling, + * and edge expansion steps. + * + * Most of the complexity here is associated with buffering input rows + * as required by the downsampler. See the comments at the head of + * jcsample.c for the downsampler's needs. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* At present, jcsample.c can request context rows only for smoothing. + * In the future, we might also need context rows for CCIR601 sampling + * or other more-complex downsampling procedures. The code to support + * context rows should be compiled only if needed. + */ +#ifdef INPUT_SMOOTHING_SUPPORTED +#define CONTEXT_ROWS_SUPPORTED +#endif + + +/* + * For the simple (no-context-row) case, we just need to buffer one + * row group's worth of pixels for the downsampling step. At the bottom of + * the image, we pad to a full row group by replicating the last pixel row. + * The downsampler's last output row is then replicated if needed to pad + * out to a full iMCU row. + * + * When providing context rows, we must buffer three row groups' worth of + * pixels. Three row groups are physically allocated, but the row pointer + * arrays are made five row groups high, with the extra pointers above and + * below "wrapping around" to point to the last and first real row groups. + * This allows the downsampler to access the proper context rows. + * At the top and bottom of the image, we create dummy context rows by + * copying the first or last real pixel row. This copying could be avoided + * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the + * trouble on the compression side. + */ + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_prep_controller pub; /* public fields */ + + /* Downsampling input buffer. This buffer holds color-converted data + * until we have enough to do a downsample step. + */ + JSAMPARRAY color_buf[MAX_COMPONENTS]; + + JDIMENSION rows_to_go; /* counts rows remaining in source image */ + int next_buf_row; /* index of next row to store in color_buf */ + +#ifdef CONTEXT_ROWS_SUPPORTED /* only needed for context case */ + int this_row_group; /* starting row index of group to process */ + int next_buf_stop; /* downsample when we reach this index */ +#endif +} my_prep_controller; + +typedef my_prep_controller * my_prep_ptr; + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + + if (pass_mode != JBUF_PASS_THRU) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + /* Initialize total-height counter for detecting bottom of image */ + prep->rows_to_go = cinfo->image_height; + /* Mark the conversion buffer empty */ + prep->next_buf_row = 0; +#ifdef CONTEXT_ROWS_SUPPORTED + /* Preset additional state variables for context mode. + * These aren't used in non-context mode, so we needn't test which mode. + */ + prep->this_row_group = 0; + /* Set next_buf_stop to stop after two row groups have been read in. */ + prep->next_buf_stop = 2 * cinfo->max_v_samp_factor; +#endif +} + + +/* + * Expand an image vertically from height input_rows to height output_rows, + * by duplicating the bottom row. + */ + +LOCAL(void) +expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols, + int input_rows, int output_rows) +{ + register int row; + + for (row = input_rows; row < output_rows; row++) { + jcopy_sample_rows(image_data, input_rows-1, image_data, row, + 1, num_cols); + } +} + + +/* + * Process some data in the simple no-context case. + * + * Preprocessor output data is counted in "row groups". A row group + * is defined to be v_samp_factor sample rows of each component. + * Downsampling will produce this much data from each max_v_samp_factor + * input rows. + */ + +METHODDEF(void) +pre_process_data (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + int numrows, ci; + JDIMENSION inrows; + jpeg_component_info * compptr; + + while (*in_row_ctr < in_rows_avail && + *out_row_group_ctr < out_row_groups_avail) { + /* Do color conversion to fill the conversion buffer. */ + inrows = in_rows_avail - *in_row_ctr; + numrows = cinfo->max_v_samp_factor - prep->next_buf_row; + numrows = (int) MIN((JDIMENSION) numrows, inrows); + (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, + prep->color_buf, + (JDIMENSION) prep->next_buf_row, + numrows); + *in_row_ctr += numrows; + prep->next_buf_row += numrows; + prep->rows_to_go -= numrows; + /* If at bottom of image, pad to fill the conversion buffer. */ + if (prep->rows_to_go == 0 && + prep->next_buf_row < cinfo->max_v_samp_factor) { + for (ci = 0; ci < cinfo->num_components; ci++) { + expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, + prep->next_buf_row, cinfo->max_v_samp_factor); + } + prep->next_buf_row = cinfo->max_v_samp_factor; + } + /* If we've filled the conversion buffer, empty it. */ + if (prep->next_buf_row == cinfo->max_v_samp_factor) { + (*cinfo->downsample->downsample) (cinfo, + prep->color_buf, (JDIMENSION) 0, + output_buf, *out_row_group_ctr); + prep->next_buf_row = 0; + (*out_row_group_ctr)++; + } + /* If at bottom of image, pad the output to a full iMCU height. + * Note we assume the caller is providing a one-iMCU-height output buffer! + */ + if (prep->rows_to_go == 0 && + *out_row_group_ctr < out_row_groups_avail) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + numrows = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; + expand_bottom_edge(output_buf[ci], + compptr->width_in_blocks * compptr->DCT_h_scaled_size, + (int) (*out_row_group_ctr * numrows), + (int) (out_row_groups_avail * numrows)); + } + *out_row_group_ctr = out_row_groups_avail; + break; /* can exit outer loop without test */ + } + } +} + + +#ifdef CONTEXT_ROWS_SUPPORTED + +/* + * Process some data in the context case. + */ + +METHODDEF(void) +pre_process_context (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + int numrows, ci; + int buf_height = cinfo->max_v_samp_factor * 3; + JDIMENSION inrows; + + while (*out_row_group_ctr < out_row_groups_avail) { + if (*in_row_ctr < in_rows_avail) { + /* Do color conversion to fill the conversion buffer. */ + inrows = in_rows_avail - *in_row_ctr; + numrows = prep->next_buf_stop - prep->next_buf_row; + numrows = (int) MIN((JDIMENSION) numrows, inrows); + (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, + prep->color_buf, + (JDIMENSION) prep->next_buf_row, + numrows); + /* Pad at top of image, if first time through */ + if (prep->rows_to_go == cinfo->image_height) { + for (ci = 0; ci < cinfo->num_components; ci++) { + int row; + for (row = 1; row <= cinfo->max_v_samp_factor; row++) { + jcopy_sample_rows(prep->color_buf[ci], 0, + prep->color_buf[ci], -row, + 1, cinfo->image_width); + } + } + } + *in_row_ctr += numrows; + prep->next_buf_row += numrows; + prep->rows_to_go -= numrows; + } else { + /* Return for more data, unless we are at the bottom of the image. */ + if (prep->rows_to_go != 0) + break; + /* When at bottom of image, pad to fill the conversion buffer. */ + if (prep->next_buf_row < prep->next_buf_stop) { + for (ci = 0; ci < cinfo->num_components; ci++) { + expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, + prep->next_buf_row, prep->next_buf_stop); + } + prep->next_buf_row = prep->next_buf_stop; + } + } + /* If we've gotten enough data, downsample a row group. */ + if (prep->next_buf_row == prep->next_buf_stop) { + (*cinfo->downsample->downsample) (cinfo, + prep->color_buf, + (JDIMENSION) prep->this_row_group, + output_buf, *out_row_group_ctr); + (*out_row_group_ctr)++; + /* Advance pointers with wraparound as necessary. */ + prep->this_row_group += cinfo->max_v_samp_factor; + if (prep->this_row_group >= buf_height) + prep->this_row_group = 0; + if (prep->next_buf_row >= buf_height) + prep->next_buf_row = 0; + prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor; + } + } +} + + +/* + * Create the wrapped-around downsampling input buffer needed for context mode. + */ + +LOCAL(void) +create_context_buffer (j_compress_ptr cinfo) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + int rgroup_height = cinfo->max_v_samp_factor; + int ci, i; + jpeg_component_info * compptr; + JSAMPARRAY true_buffer, fake_buffer; + + /* Grab enough space for fake row pointers for all the components; + * we need five row groups' worth of pointers for each component. + */ + fake_buffer = (JSAMPARRAY) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (cinfo->num_components * 5 * rgroup_height) * + SIZEOF(JSAMPROW)); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Allocate the actual buffer space (3 row groups) for this component. + * We make the buffer wide enough to allow the downsampler to edge-expand + * horizontally within the buffer, if it so chooses. + */ + true_buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (((long) compptr->width_in_blocks * + cinfo->min_DCT_h_scaled_size * + cinfo->max_h_samp_factor) / compptr->h_samp_factor), + (JDIMENSION) (3 * rgroup_height)); + /* Copy true buffer row pointers into the middle of the fake row array */ + MEMCOPY(fake_buffer + rgroup_height, true_buffer, + 3 * rgroup_height * SIZEOF(JSAMPROW)); + /* Fill in the above and below wraparound pointers */ + for (i = 0; i < rgroup_height; i++) { + fake_buffer[i] = true_buffer[2 * rgroup_height + i]; + fake_buffer[4 * rgroup_height + i] = true_buffer[i]; + } + prep->color_buf[ci] = fake_buffer + rgroup_height; + fake_buffer += 5 * rgroup_height; /* point to space for next component */ + } +} + +#endif /* CONTEXT_ROWS_SUPPORTED */ + + +/* + * Initialize preprocessing controller. + */ + +GLOBAL(void) +jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer) +{ + my_prep_ptr prep; + int ci; + jpeg_component_info * compptr; + + if (need_full_buffer) /* safety check */ + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + prep = (my_prep_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_prep_controller)); + cinfo->prep = (struct jpeg_c_prep_controller *) prep; + prep->pub.start_pass = start_pass_prep; + + /* Allocate the color conversion buffer. + * We make the buffer wide enough to allow the downsampler to edge-expand + * horizontally within the buffer, if it so chooses. + */ + if (cinfo->downsample->need_context_rows) { + /* Set up to provide context rows */ +#ifdef CONTEXT_ROWS_SUPPORTED + prep->pub.pre_process_data = pre_process_context; + create_context_buffer(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + /* No context, just make it tall enough for one row group */ + prep->pub.pre_process_data = pre_process_data; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + prep->color_buf[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (((long) compptr->width_in_blocks * + cinfo->min_DCT_h_scaled_size * + cinfo->max_h_samp_factor) / compptr->h_samp_factor), + (JDIMENSION) cinfo->max_v_samp_factor); + } + } +} diff --git a/3rdparty/openctm/tools/jpeg/jcsample.c b/3rdparty/openctm/tools/jpeg/jcsample.c new file mode 100644 index 000000000..1aef8a6fc --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jcsample.c @@ -0,0 +1,545 @@ +/* + * jcsample.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains downsampling routines. + * + * Downsampling input data is counted in "row groups". A row group + * is defined to be max_v_samp_factor pixel rows of each component, + * from which the downsampler produces v_samp_factor sample rows. + * A single row group is processed in each call to the downsampler module. + * + * The downsampler is responsible for edge-expansion of its output data + * to fill an integral number of DCT blocks horizontally. The source buffer + * may be modified if it is helpful for this purpose (the source buffer is + * allocated wide enough to correspond to the desired output width). + * The caller (the prep controller) is responsible for vertical padding. + * + * The downsampler may request "context rows" by setting need_context_rows + * during startup. In this case, the input arrays will contain at least + * one row group's worth of pixels above and below the passed-in data; + * the caller will create dummy rows at image top and bottom by replicating + * the first or last real pixel row. + * + * An excellent reference for image resampling is + * Digital Image Warping, George Wolberg, 1990. + * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. + * + * The downsampling algorithm used here is a simple average of the source + * pixels covered by the output pixel. The hi-falutin sampling literature + * refers to this as a "box filter". In general the characteristics of a box + * filter are not very good, but for the specific cases we normally use (1:1 + * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not + * nearly so bad. If you intend to use other sampling ratios, you'd be well + * advised to improve this code. + * + * A simple input-smoothing capability is provided. This is mainly intended + * for cleaning up color-dithered GIF input files (if you find it inadequate, + * we suggest using an external filtering program such as pnmconvol). When + * enabled, each input pixel P is replaced by a weighted sum of itself and its + * eight neighbors. P's weight is 1-8*SF and each neighbor's weight is SF, + * where SF = (smoothing_factor / 1024). + * Currently, smoothing is only supported for 2h2v sampling factors. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Pointer to routine to downsample a single component */ +typedef JMETHOD(void, downsample1_ptr, + (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data)); + +/* Private subobject */ + +typedef struct { + struct jpeg_downsampler pub; /* public fields */ + + /* Downsampling method pointers, one per component */ + downsample1_ptr methods[MAX_COMPONENTS]; + + /* Height of an output row group for each component. */ + int rowgroup_height[MAX_COMPONENTS]; + + /* These arrays save pixel expansion factors so that int_downsample need not + * recompute them each time. They are unused for other downsampling methods. + */ + UINT8 h_expand[MAX_COMPONENTS]; + UINT8 v_expand[MAX_COMPONENTS]; +} my_downsampler; + +typedef my_downsampler * my_downsample_ptr; + + +/* + * Initialize for a downsampling pass. + */ + +METHODDEF(void) +start_pass_downsample (j_compress_ptr cinfo) +{ + /* no work for now */ +} + + +/* + * Expand a component horizontally from width input_cols to width output_cols, + * by duplicating the rightmost samples. + */ + +LOCAL(void) +expand_right_edge (JSAMPARRAY image_data, int num_rows, + JDIMENSION input_cols, JDIMENSION output_cols) +{ + register JSAMPROW ptr; + register JSAMPLE pixval; + register int count; + int row; + int numcols = (int) (output_cols - input_cols); + + if (numcols > 0) { + for (row = 0; row < num_rows; row++) { + ptr = image_data[row] + input_cols; + pixval = ptr[-1]; /* don't need GETJSAMPLE() here */ + for (count = numcols; count > 0; count--) + *ptr++ = pixval; + } + } +} + + +/* + * Do downsampling for a whole row group (all components). + * + * In this version we simply downsample each component independently. + */ + +METHODDEF(void) +sep_downsample (j_compress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_index, + JSAMPIMAGE output_buf, JDIMENSION out_row_group_index) +{ + my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample; + int ci; + jpeg_component_info * compptr; + JSAMPARRAY in_ptr, out_ptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + in_ptr = input_buf[ci] + in_row_index; + out_ptr = output_buf[ci] + + (out_row_group_index * downsample->rowgroup_height[ci]); + (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr); + } +} + + +/* + * Downsample pixel values of a single component. + * One row group is processed per call. + * This version handles arbitrary integral sampling ratios, without smoothing. + * Note that this version is not actually used for customary sampling ratios. + */ + +METHODDEF(void) +int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample; + int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v; + JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */ + JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size; + JSAMPROW inptr, outptr; + INT32 outvalue; + + h_expand = downsample->h_expand[compptr->component_index]; + v_expand = downsample->v_expand[compptr->component_index]; + numpix = h_expand * v_expand; + numpix2 = numpix/2; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data, cinfo->max_v_samp_factor, + cinfo->image_width, output_cols * h_expand); + + inrow = outrow = 0; + while (inrow < cinfo->max_v_samp_factor) { + outptr = output_data[outrow]; + for (outcol = 0, outcol_h = 0; outcol < output_cols; + outcol++, outcol_h += h_expand) { + outvalue = 0; + for (v = 0; v < v_expand; v++) { + inptr = input_data[inrow+v] + outcol_h; + for (h = 0; h < h_expand; h++) { + outvalue += (INT32) GETJSAMPLE(*inptr++); + } + } + *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix); + } + inrow += v_expand; + outrow++; + } +} + + +/* + * Downsample pixel values of a single component. + * This version handles the special case of a full-size component, + * without smoothing. + */ + +METHODDEF(void) +fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + /* Copy the data */ + jcopy_sample_rows(input_data, 0, output_data, 0, + cinfo->max_v_samp_factor, cinfo->image_width); + /* Edge-expand */ + expand_right_edge(output_data, cinfo->max_v_samp_factor, cinfo->image_width, + compptr->width_in_blocks * compptr->DCT_h_scaled_size); +} + + +/* + * Downsample pixel values of a single component. + * This version handles the common case of 2:1 horizontal and 1:1 vertical, + * without smoothing. + * + * A note about the "bias" calculations: when rounding fractional values to + * integer, we do not want to always round 0.5 up to the next integer. + * If we did that, we'd introduce a noticeable bias towards larger values. + * Instead, this code is arranged so that 0.5 will be rounded up or down at + * alternate pixel locations (a simple ordered dither pattern). + */ + +METHODDEF(void) +h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow; + JDIMENSION outcol; + JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size; + register JSAMPROW inptr, outptr; + register int bias; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data, cinfo->max_v_samp_factor, + cinfo->image_width, output_cols * 2); + + for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { + outptr = output_data[inrow]; + inptr = input_data[inrow]; + bias = 0; /* bias = 0,1,0,1,... for successive samples */ + for (outcol = 0; outcol < output_cols; outcol++) { + *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1]) + + bias) >> 1); + bias ^= 1; /* 0=>1, 1=>0 */ + inptr += 2; + } + } +} + + +/* + * Downsample pixel values of a single component. + * This version handles the standard case of 2:1 horizontal and 2:1 vertical, + * without smoothing. + */ + +METHODDEF(void) +h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow, outrow; + JDIMENSION outcol; + JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size; + register JSAMPROW inptr0, inptr1, outptr; + register int bias; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data, cinfo->max_v_samp_factor, + cinfo->image_width, output_cols * 2); + + inrow = outrow = 0; + while (inrow < cinfo->max_v_samp_factor) { + outptr = output_data[outrow]; + inptr0 = input_data[inrow]; + inptr1 = input_data[inrow+1]; + bias = 1; /* bias = 1,2,1,2,... for successive samples */ + for (outcol = 0; outcol < output_cols; outcol++) { + *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]) + + bias) >> 2); + bias ^= 3; /* 1=>2, 2=>1 */ + inptr0 += 2; inptr1 += 2; + } + inrow += 2; + outrow++; + } +} + + +#ifdef INPUT_SMOOTHING_SUPPORTED + +/* + * Downsample pixel values of a single component. + * This version handles the standard case of 2:1 horizontal and 2:1 vertical, + * with smoothing. One row of context is required. + */ + +METHODDEF(void) +h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow, outrow; + JDIMENSION colctr; + JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size; + register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr; + INT32 membersum, neighsum, memberscale, neighscale; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, + cinfo->image_width, output_cols * 2); + + /* We don't bother to form the individual "smoothed" input pixel values; + * we can directly compute the output which is the average of the four + * smoothed values. Each of the four member pixels contributes a fraction + * (1-8*SF) to its own smoothed image and a fraction SF to each of the three + * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final + * output. The four corner-adjacent neighbor pixels contribute a fraction + * SF to just one smoothed pixel, or SF/4 to the final output; while the + * eight edge-adjacent neighbors contribute SF to each of two smoothed + * pixels, or SF/2 overall. In order to use integer arithmetic, these + * factors are scaled by 2^16 = 65536. + * Also recall that SF = smoothing_factor / 1024. + */ + + memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */ + neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */ + + inrow = outrow = 0; + while (inrow < cinfo->max_v_samp_factor) { + outptr = output_data[outrow]; + inptr0 = input_data[inrow]; + inptr1 = input_data[inrow+1]; + above_ptr = input_data[inrow-1]; + below_ptr = input_data[inrow+2]; + + /* Special case for first column: pretend column -1 is same as column 0 */ + membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); + neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + + GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]); + neighsum += neighsum; + neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]); + membersum = membersum * memberscale + neighsum * neighscale; + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; + + for (colctr = output_cols - 2; colctr > 0; colctr--) { + /* sum of pixels directly mapped to this output element */ + membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); + /* sum of edge-neighbor pixels */ + neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + + GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) + + GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]); + /* The edge-neighbors count twice as much as corner-neighbors */ + neighsum += neighsum; + /* Add in the corner-neighbors */ + neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) + + GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]); + /* form final output scaled up by 2^16 */ + membersum = membersum * memberscale + neighsum * neighscale; + /* round, descale and output it */ + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; + } + + /* Special case for last column */ + membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); + neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + + GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]); + neighsum += neighsum; + neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]); + membersum = membersum * memberscale + neighsum * neighscale; + *outptr = (JSAMPLE) ((membersum + 32768) >> 16); + + inrow += 2; + outrow++; + } +} + + +/* + * Downsample pixel values of a single component. + * This version handles the special case of a full-size component, + * with smoothing. One row of context is required. + */ + +METHODDEF(void) +fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow; + JDIMENSION colctr; + JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size; + register JSAMPROW inptr, above_ptr, below_ptr, outptr; + INT32 membersum, neighsum, memberscale, neighscale; + int colsum, lastcolsum, nextcolsum; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, + cinfo->image_width, output_cols); + + /* Each of the eight neighbor pixels contributes a fraction SF to the + * smoothed pixel, while the main pixel contributes (1-8*SF). In order + * to use integer arithmetic, these factors are multiplied by 2^16 = 65536. + * Also recall that SF = smoothing_factor / 1024. + */ + + memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */ + neighscale = cinfo->smoothing_factor * 64; /* scaled SF */ + + for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { + outptr = output_data[inrow]; + inptr = input_data[inrow]; + above_ptr = input_data[inrow-1]; + below_ptr = input_data[inrow+1]; + + /* Special case for first column */ + colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) + + GETJSAMPLE(*inptr); + membersum = GETJSAMPLE(*inptr++); + nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + + GETJSAMPLE(*inptr); + neighsum = colsum + (colsum - membersum) + nextcolsum; + membersum = membersum * memberscale + neighsum * neighscale; + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + lastcolsum = colsum; colsum = nextcolsum; + + for (colctr = output_cols - 2; colctr > 0; colctr--) { + membersum = GETJSAMPLE(*inptr++); + above_ptr++; below_ptr++; + nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + + GETJSAMPLE(*inptr); + neighsum = lastcolsum + (colsum - membersum) + nextcolsum; + membersum = membersum * memberscale + neighsum * neighscale; + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + lastcolsum = colsum; colsum = nextcolsum; + } + + /* Special case for last column */ + membersum = GETJSAMPLE(*inptr); + neighsum = lastcolsum + (colsum - membersum) + colsum; + membersum = membersum * memberscale + neighsum * neighscale; + *outptr = (JSAMPLE) ((membersum + 32768) >> 16); + + } +} + +#endif /* INPUT_SMOOTHING_SUPPORTED */ + + +/* + * Module initialization routine for downsampling. + * Note that we must select a routine for each component. + */ + +GLOBAL(void) +jinit_downsampler (j_compress_ptr cinfo) +{ + my_downsample_ptr downsample; + int ci; + jpeg_component_info * compptr; + boolean smoothok = TRUE; + int h_in_group, v_in_group, h_out_group, v_out_group; + + downsample = (my_downsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_downsampler)); + cinfo->downsample = (struct jpeg_downsampler *) downsample; + downsample->pub.start_pass = start_pass_downsample; + downsample->pub.downsample = sep_downsample; + downsample->pub.need_context_rows = FALSE; + + if (cinfo->CCIR601_sampling) + ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); + + /* Verify we can handle the sampling factors, and set up method pointers */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Compute size of an "output group" for DCT scaling. This many samples + * are to be converted from max_h_samp_factor * max_v_samp_factor pixels. + */ + h_out_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) / + cinfo->min_DCT_h_scaled_size; + v_out_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; + h_in_group = cinfo->max_h_samp_factor; + v_in_group = cinfo->max_v_samp_factor; + downsample->rowgroup_height[ci] = v_out_group; /* save for use later */ + if (h_in_group == h_out_group && v_in_group == v_out_group) { +#ifdef INPUT_SMOOTHING_SUPPORTED + if (cinfo->smoothing_factor) { + downsample->methods[ci] = fullsize_smooth_downsample; + downsample->pub.need_context_rows = TRUE; + } else +#endif + downsample->methods[ci] = fullsize_downsample; + } else if (h_in_group == h_out_group * 2 && + v_in_group == v_out_group) { + smoothok = FALSE; + downsample->methods[ci] = h2v1_downsample; + } else if (h_in_group == h_out_group * 2 && + v_in_group == v_out_group * 2) { +#ifdef INPUT_SMOOTHING_SUPPORTED + if (cinfo->smoothing_factor) { + downsample->methods[ci] = h2v2_smooth_downsample; + downsample->pub.need_context_rows = TRUE; + } else +#endif + downsample->methods[ci] = h2v2_downsample; + } else if ((h_in_group % h_out_group) == 0 && + (v_in_group % v_out_group) == 0) { + smoothok = FALSE; + downsample->methods[ci] = int_downsample; + downsample->h_expand[ci] = (UINT8) (h_in_group / h_out_group); + downsample->v_expand[ci] = (UINT8) (v_in_group / v_out_group); + } else + ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); + } + +#ifdef INPUT_SMOOTHING_SUPPORTED + if (cinfo->smoothing_factor && !smoothok) + TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL); +#endif +} diff --git a/3rdparty/openctm/tools/jpeg/jctrans.c b/3rdparty/openctm/tools/jpeg/jctrans.c new file mode 100644 index 000000000..e1a97a57d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jctrans.c @@ -0,0 +1,381 @@ +/* + * jctrans.c + * + * Copyright (C) 1995-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains library routines for transcoding compression, + * that is, writing raw DCT coefficient arrays to an output JPEG file. + * The routines in jcapimin.c will also be needed by a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(void) transencode_master_selection + JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); +LOCAL(void) transencode_coef_controller + JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); + + +/* + * Compression initialization for writing raw-coefficient data. + * Before calling this, all parameters and a data destination must be set up. + * Call jpeg_finish_compress() to actually write the data. + * + * The number of passed virtual arrays must match cinfo->num_components. + * Note that the virtual arrays need not be filled or even realized at + * the time write_coefficients is called; indeed, if the virtual arrays + * were requested from this compression object's memory manager, they + * typically will be realized during this routine and filled afterwards. + */ + +GLOBAL(void) +jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) +{ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Mark all tables to be written */ + jpeg_suppress_tables(cinfo, FALSE); + /* (Re)initialize error mgr and destination modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->dest->init_destination) (cinfo); + /* Perform master selection of active modules */ + transencode_master_selection(cinfo, coef_arrays); + /* Wait for jpeg_finish_compress() call */ + cinfo->next_scanline = 0; /* so jpeg_write_marker works */ + cinfo->global_state = CSTATE_WRCOEFS; +} + + +/* + * Initialize the compression object with default parameters, + * then copy from the source object all parameters needed for lossless + * transcoding. Parameters that can be varied without loss (such as + * scan script and Huffman optimization) are left in their default states. + */ + +GLOBAL(void) +jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, + j_compress_ptr dstinfo) +{ + JQUANT_TBL ** qtblptr; + jpeg_component_info *incomp, *outcomp; + JQUANT_TBL *c_quant, *slot_quant; + int tblno, ci, coefi; + + /* Safety check to ensure start_compress not called yet. */ + if (dstinfo->global_state != CSTATE_START) + ERREXIT1(dstinfo, JERR_BAD_STATE, dstinfo->global_state); + /* Copy fundamental image dimensions */ + dstinfo->image_width = srcinfo->image_width; + dstinfo->image_height = srcinfo->image_height; + dstinfo->input_components = srcinfo->num_components; + dstinfo->in_color_space = srcinfo->jpeg_color_space; + /* Initialize all parameters to default values */ + jpeg_set_defaults(dstinfo); + /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB. + * Fix it to get the right header markers for the image colorspace. + */ + jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space); + dstinfo->data_precision = srcinfo->data_precision; + dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling; + /* Copy the source's quantization tables. */ + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { + if (srcinfo->quant_tbl_ptrs[tblno] != NULL) { + qtblptr = & dstinfo->quant_tbl_ptrs[tblno]; + if (*qtblptr == NULL) + *qtblptr = jpeg_alloc_quant_table((j_common_ptr) dstinfo); + MEMCOPY((*qtblptr)->quantval, + srcinfo->quant_tbl_ptrs[tblno]->quantval, + SIZEOF((*qtblptr)->quantval)); + (*qtblptr)->sent_table = FALSE; + } + } + /* Copy the source's per-component info. + * Note we assume jpeg_set_defaults has allocated the dest comp_info array. + */ + dstinfo->num_components = srcinfo->num_components; + if (dstinfo->num_components < 1 || dstinfo->num_components > MAX_COMPONENTS) + ERREXIT2(dstinfo, JERR_COMPONENT_COUNT, dstinfo->num_components, + MAX_COMPONENTS); + for (ci = 0, incomp = srcinfo->comp_info, outcomp = dstinfo->comp_info; + ci < dstinfo->num_components; ci++, incomp++, outcomp++) { + outcomp->component_id = incomp->component_id; + outcomp->h_samp_factor = incomp->h_samp_factor; + outcomp->v_samp_factor = incomp->v_samp_factor; + outcomp->quant_tbl_no = incomp->quant_tbl_no; + /* Make sure saved quantization table for component matches the qtable + * slot. If not, the input file re-used this qtable slot. + * IJG encoder currently cannot duplicate this. + */ + tblno = outcomp->quant_tbl_no; + if (tblno < 0 || tblno >= NUM_QUANT_TBLS || + srcinfo->quant_tbl_ptrs[tblno] == NULL) + ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno); + slot_quant = srcinfo->quant_tbl_ptrs[tblno]; + c_quant = incomp->quant_table; + if (c_quant != NULL) { + for (coefi = 0; coefi < DCTSIZE2; coefi++) { + if (c_quant->quantval[coefi] != slot_quant->quantval[coefi]) + ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno); + } + } + /* Note: we do not copy the source's Huffman table assignments; + * instead we rely on jpeg_set_colorspace to have made a suitable choice. + */ + } + /* Also copy JFIF version and resolution information, if available. + * Strictly speaking this isn't "critical" info, but it's nearly + * always appropriate to copy it if available. In particular, + * if the application chooses to copy JFIF 1.02 extension markers from + * the source file, we need to copy the version to make sure we don't + * emit a file that has 1.02 extensions but a claimed version of 1.01. + * We will *not*, however, copy version info from mislabeled "2.01" files. + */ + if (srcinfo->saw_JFIF_marker) { + if (srcinfo->JFIF_major_version == 1) { + dstinfo->JFIF_major_version = srcinfo->JFIF_major_version; + dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version; + } + dstinfo->density_unit = srcinfo->density_unit; + dstinfo->X_density = srcinfo->X_density; + dstinfo->Y_density = srcinfo->Y_density; + } +} + + +/* + * Master selection of compression modules for transcoding. + * This substitutes for jcinit.c's initialization of the full compressor. + */ + +LOCAL(void) +transencode_master_selection (j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays) +{ + /* Although we don't actually use input_components for transcoding, + * jcmaster.c's initial_setup will complain if input_components is 0. + */ + cinfo->input_components = 1; + /* Initialize master control (includes parameter checking/processing) */ + jinit_c_master_control(cinfo, TRUE /* transcode only */); + + /* Entropy encoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + jinit_arith_encoder(cinfo); + } else { + jinit_huff_encoder(cinfo); + } + + /* We need a special coefficient buffer controller. */ + transencode_coef_controller(cinfo, coef_arrays); + + jinit_marker_writer(cinfo); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Write the datastream header (SOI, JFIF) immediately. + * Frame and scan headers are postponed till later. + * This lets application insert special markers after the SOI. + */ + (*cinfo->marker->write_file_header) (cinfo); +} + + +/* + * The rest of this file is a special implementation of the coefficient + * buffer controller. This is similar to jccoefct.c, but it handles only + * output from presupplied virtual arrays. Furthermore, we generate any + * dummy padding blocks on-the-fly rather than expecting them to be present + * in the arrays. + */ + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_coef_controller pub; /* public fields */ + + JDIMENSION iMCU_row_num; /* iMCU row # within image */ + JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* Virtual block array for each component. */ + jvirt_barray_ptr * whole_image; + + /* Workspace for constructing dummy blocks at right/bottom edges. */ + JBLOCKROW dummy_buffer[C_MAX_BLOCKS_IN_MCU]; +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + + +LOCAL(void) +start_iMCU_row (j_compress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->mcu_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + if (pass_mode != JBUF_CRANK_DEST) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + coef->iMCU_row_num = 0; + start_iMCU_row(cinfo); +} + + +/* + * Process some data. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the scan. + * The data is obtained from the virtual arrays and fed to the entropy coder. + * Returns TRUE if the iMCU row is completed, FALSE if suspended. + * + * NB: input_buf is ignored; it is likely to be a NULL pointer. + */ + +METHODDEF(boolean) +compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, ci, xindex, yindex, yoffset, blockcnt; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + coef->iMCU_row_num * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (coef->iMCU_row_num < last_iMCU_row || + yindex+yoffset < compptr->last_row_height) { + /* Fill in pointers to real blocks in this row */ + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < blockcnt; xindex++) + MCU_buffer[blkn++] = buffer_ptr++; + } else { + /* At bottom of image, need a whole row of dummy blocks */ + xindex = 0; + } + /* Fill in any dummy blocks needed in this row. + * Dummy blocks are filled in the same way as in jccoefct.c: + * all zeroes in the AC entries, DC entries equal to previous + * block's DC value. The init routine has already zeroed the + * AC entries, so we need only set the DC entries correctly. + */ + for (; xindex < compptr->MCU_width; xindex++) { + MCU_buffer[blkn] = coef->dummy_buffer[blkn]; + MCU_buffer[blkn][0][0] = MCU_buffer[blkn-1][0][0]; + blkn++; + } + } + } + /* Try to write the MCU. */ + if (! (*cinfo->entropy->encode_mcu) (cinfo, MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->mcu_ctr = MCU_col_num; + return FALSE; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->mcu_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + coef->iMCU_row_num++; + start_iMCU_row(cinfo); + return TRUE; +} + + +/* + * Initialize coefficient buffer controller. + * + * Each passed coefficient array must be the right size for that + * coefficient: width_in_blocks wide and height_in_blocks high, + * with unitheight at least v_samp_factor. + */ + +LOCAL(void) +transencode_coef_controller (j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays) +{ + my_coef_ptr coef; + JBLOCKROW buffer; + int i; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_c_coef_controller *) coef; + coef->pub.start_pass = start_pass_coef; + coef->pub.compress_data = compress_output; + + /* Save pointer to virtual arrays */ + coef->whole_image = coef_arrays; + + /* Allocate and pre-zero space for dummy DCT blocks. */ + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + jzero_far((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { + coef->dummy_buffer[i] = buffer + i; + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdapimin.c b/3rdparty/openctm/tools/jpeg/jdapimin.c new file mode 100644 index 000000000..1ba7f1119 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdapimin.c @@ -0,0 +1,396 @@ +/* + * jdapimin.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * Modified 2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the decompression half + * of the JPEG library. These are the "minimum" API routines that may be + * needed in either the normal full-decompression case or the + * transcoding-only case. + * + * Most of the routines intended to be called directly by an application + * are in this file or in jdapistd.c. But also see jcomapi.c for routines + * shared by compression and decompression, and jdtrans.c for the transcoding + * case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Initialization of a JPEG decompression object. + * The error manager must already be set up (in case memory manager fails). + */ + +GLOBAL(void) +jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) +{ + int i; + + /* Guard against version mismatches between library and caller. */ + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + if (version != JPEG_LIB_VERSION) + ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); + if (structsize != SIZEOF(struct jpeg_decompress_struct)) + ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, + (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize); + + /* For debugging purposes, we zero the whole master structure. + * But the application has already set the err pointer, and may have set + * client_data, so we have to save and restore those fields. + * Note: if application hasn't set client_data, tools like Purify may + * complain here. + */ + { + struct jpeg_error_mgr * err = cinfo->err; + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); + cinfo->err = err; + cinfo->client_data = client_data; + } + cinfo->is_decompressor = TRUE; + + /* Initialize a memory manager instance for this object */ + jinit_memory_mgr((j_common_ptr) cinfo); + + /* Zero out pointers to permanent structures. */ + cinfo->progress = NULL; + cinfo->src = NULL; + + for (i = 0; i < NUM_QUANT_TBLS; i++) + cinfo->quant_tbl_ptrs[i] = NULL; + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + cinfo->dc_huff_tbl_ptrs[i] = NULL; + cinfo->ac_huff_tbl_ptrs[i] = NULL; + } + + /* Initialize marker processor so application can override methods + * for COM, APPn markers before calling jpeg_read_header. + */ + cinfo->marker_list = NULL; + jinit_marker_reader(cinfo); + + /* And initialize the overall input controller. */ + jinit_input_controller(cinfo); + + /* OK, I'm ready */ + cinfo->global_state = DSTATE_START; +} + + +/* + * Destruction of a JPEG decompression object + */ + +GLOBAL(void) +jpeg_destroy_decompress (j_decompress_ptr cinfo) +{ + jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Abort processing of a JPEG decompression operation, + * but don't destroy the object itself. + */ + +GLOBAL(void) +jpeg_abort_decompress (j_decompress_ptr cinfo) +{ + jpeg_abort((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Set default decompression parameters. + */ + +LOCAL(void) +default_decompress_parms (j_decompress_ptr cinfo) +{ + /* Guess the input colorspace, and set output colorspace accordingly. */ + /* (Wish JPEG committee had provided a real way to specify this...) */ + /* Note application may override our guesses. */ + switch (cinfo->num_components) { + case 1: + cinfo->jpeg_color_space = JCS_GRAYSCALE; + cinfo->out_color_space = JCS_GRAYSCALE; + break; + + case 3: + if (cinfo->saw_JFIF_marker) { + cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ + } else if (cinfo->saw_Adobe_marker) { + switch (cinfo->Adobe_transform) { + case 0: + cinfo->jpeg_color_space = JCS_RGB; + break; + case 1: + cinfo->jpeg_color_space = JCS_YCbCr; + break; + default: + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + break; + } + } else { + /* Saw no special markers, try to guess from the component IDs */ + int cid0 = cinfo->comp_info[0].component_id; + int cid1 = cinfo->comp_info[1].component_id; + int cid2 = cinfo->comp_info[2].component_id; + + if (cid0 == 1 && cid1 == 2 && cid2 == 3) + cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ + else if (cid0 == 82 && cid1 == 71 && cid2 == 66) + cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ + else { + TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + } + } + /* Always guess RGB is proper output colorspace. */ + cinfo->out_color_space = JCS_RGB; + break; + + case 4: + if (cinfo->saw_Adobe_marker) { + switch (cinfo->Adobe_transform) { + case 0: + cinfo->jpeg_color_space = JCS_CMYK; + break; + case 2: + cinfo->jpeg_color_space = JCS_YCCK; + break; + default: + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ + break; + } + } else { + /* No special markers, assume straight CMYK. */ + cinfo->jpeg_color_space = JCS_CMYK; + } + cinfo->out_color_space = JCS_CMYK; + break; + + default: + cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->out_color_space = JCS_UNKNOWN; + break; + } + + /* Set defaults for other decompression parameters. */ + cinfo->scale_num = DCTSIZE; /* 1:1 scaling */ + cinfo->scale_denom = DCTSIZE; + cinfo->output_gamma = 1.0; + cinfo->buffered_image = FALSE; + cinfo->raw_data_out = FALSE; + cinfo->dct_method = JDCT_DEFAULT; + cinfo->do_fancy_upsampling = TRUE; + cinfo->do_block_smoothing = TRUE; + cinfo->quantize_colors = FALSE; + /* We set these in case application only sets quantize_colors. */ + cinfo->dither_mode = JDITHER_FS; +#ifdef QUANT_2PASS_SUPPORTED + cinfo->two_pass_quantize = TRUE; +#else + cinfo->two_pass_quantize = FALSE; +#endif + cinfo->desired_number_of_colors = 256; + cinfo->colormap = NULL; + /* Initialize for no mode change in buffered-image mode. */ + cinfo->enable_1pass_quant = FALSE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; +} + + +/* + * Decompression startup: read start of JPEG datastream to see what's there. + * Need only initialize JPEG object and supply a data source before calling. + * + * This routine will read as far as the first SOS marker (ie, actual start of + * compressed data), and will save all tables and parameters in the JPEG + * object. It will also initialize the decompression parameters to default + * values, and finally return JPEG_HEADER_OK. On return, the application may + * adjust the decompression parameters and then call jpeg_start_decompress. + * (Or, if the application only wanted to determine the image parameters, + * the data need not be decompressed. In that case, call jpeg_abort or + * jpeg_destroy to release any temporary space.) + * If an abbreviated (tables only) datastream is presented, the routine will + * return JPEG_HEADER_TABLES_ONLY upon reaching EOI. The application may then + * re-use the JPEG object to read the abbreviated image datastream(s). + * It is unnecessary (but OK) to call jpeg_abort in this case. + * The JPEG_SUSPENDED return code only occurs if the data source module + * requests suspension of the decompressor. In this case the application + * should load more source data and then re-call jpeg_read_header to resume + * processing. + * If a non-suspending data source is used and require_image is TRUE, then the + * return code need not be inspected since only JPEG_HEADER_OK is possible. + * + * This routine is now just a front end to jpeg_consume_input, with some + * extra error checking. + */ + +GLOBAL(int) +jpeg_read_header (j_decompress_ptr cinfo, boolean require_image) +{ + int retcode; + + if (cinfo->global_state != DSTATE_START && + cinfo->global_state != DSTATE_INHEADER) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + retcode = jpeg_consume_input(cinfo); + + switch (retcode) { + case JPEG_REACHED_SOS: + retcode = JPEG_HEADER_OK; + break; + case JPEG_REACHED_EOI: + if (require_image) /* Complain if application wanted an image */ + ERREXIT(cinfo, JERR_NO_IMAGE); + /* Reset to start state; it would be safer to require the application to + * call jpeg_abort, but we can't change it now for compatibility reasons. + * A side effect is to free any temporary memory (there shouldn't be any). + */ + jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ + retcode = JPEG_HEADER_TABLES_ONLY; + break; + case JPEG_SUSPENDED: + /* no work */ + break; + } + + return retcode; +} + + +/* + * Consume data in advance of what the decompressor requires. + * This can be called at any time once the decompressor object has + * been created and a data source has been set up. + * + * This routine is essentially a state machine that handles a couple + * of critical state-transition actions, namely initial setup and + * transition from header scanning to ready-for-start_decompress. + * All the actual input is done via the input controller's consume_input + * method. + */ + +GLOBAL(int) +jpeg_consume_input (j_decompress_ptr cinfo) +{ + int retcode = JPEG_SUSPENDED; + + /* NB: every possible DSTATE value should be listed in this switch */ + switch (cinfo->global_state) { + case DSTATE_START: + /* Start-of-datastream actions: reset appropriate modules */ + (*cinfo->inputctl->reset_input_controller) (cinfo); + /* Initialize application's data source module */ + (*cinfo->src->init_source) (cinfo); + cinfo->global_state = DSTATE_INHEADER; + /*FALLTHROUGH*/ + case DSTATE_INHEADER: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ + /* Set up default parameters based on header data */ + default_decompress_parms(cinfo); + /* Set global state: ready for start_decompress */ + cinfo->global_state = DSTATE_READY; + } + break; + case DSTATE_READY: + /* Can't advance past first SOS until start_decompress is called */ + retcode = JPEG_REACHED_SOS; + break; + case DSTATE_PRELOAD: + case DSTATE_PRESCAN: + case DSTATE_SCANNING: + case DSTATE_RAW_OK: + case DSTATE_BUFIMAGE: + case DSTATE_BUFPOST: + case DSTATE_STOPPING: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + break; + default: + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + return retcode; +} + + +/* + * Have we finished reading the input file? + */ + +GLOBAL(boolean) +jpeg_input_complete (j_decompress_ptr cinfo) +{ + /* Check for valid jpeg object */ + if (cinfo->global_state < DSTATE_START || + cinfo->global_state > DSTATE_STOPPING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return cinfo->inputctl->eoi_reached; +} + + +/* + * Is there more than one scan? + */ + +GLOBAL(boolean) +jpeg_has_multiple_scans (j_decompress_ptr cinfo) +{ + /* Only valid after jpeg_read_header completes */ + if (cinfo->global_state < DSTATE_READY || + cinfo->global_state > DSTATE_STOPPING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return cinfo->inputctl->has_multiple_scans; +} + + +/* + * Finish JPEG decompression. + * + * This will normally just verify the file trailer and release temp storage. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_finish_decompress (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { + /* Terminate final pass of non-buffered mode */ + if (cinfo->output_scanline < cinfo->output_height) + ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); + (*cinfo->master->finish_output_pass) (cinfo); + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state == DSTATE_BUFIMAGE) { + /* Finishing after a buffered-image operation */ + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state != DSTATE_STOPPING) { + /* STOPPING = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read until EOI */ + while (! cinfo->inputctl->eoi_reached) { + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + /* Do final cleanup */ + (*cinfo->src->term_source) (cinfo); + /* We can use jpeg_abort to release memory and reset global_state */ + jpeg_abort((j_common_ptr) cinfo); + return TRUE; +} diff --git a/3rdparty/openctm/tools/jpeg/jdapistd.c b/3rdparty/openctm/tools/jpeg/jdapistd.c new file mode 100644 index 000000000..e81bd67dd --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdapistd.c @@ -0,0 +1,275 @@ +/* + * jdapistd.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the decompression half + * of the JPEG library. These are the "standard" API routines that are + * used in the normal full-decompression case. They are not used by a + * transcoding-only application. Note that if an application links in + * jpeg_start_decompress, it will end up linking in the entire decompressor. + * We thus must separate this file from jdapimin.c to avoid linking the + * whole decompression library into a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo)); + + +/* + * Decompression initialization. + * jpeg_read_header must be completed before calling this. + * + * If a multipass operating mode was selected, this will do all but the + * last pass, and thus may take a great deal of time. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_start_decompress (j_decompress_ptr cinfo) +{ + if (cinfo->global_state == DSTATE_READY) { + /* First call: initialize master control, select active modules */ + jinit_master_decompress(cinfo); + if (cinfo->buffered_image) { + /* No more work here; expecting jpeg_start_output next */ + cinfo->global_state = DSTATE_BUFIMAGE; + return TRUE; + } + cinfo->global_state = DSTATE_PRELOAD; + } + if (cinfo->global_state == DSTATE_PRELOAD) { + /* If file has multiple scans, absorb them all into the coef buffer */ + if (cinfo->inputctl->has_multiple_scans) { +#ifdef D_MULTISCAN_FILES_SUPPORTED + for (;;) { + int retcode; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + /* Absorb some more input */ + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_SUSPENDED) + return FALSE; + if (retcode == JPEG_REACHED_EOI) + break; + /* Advance progress counter if appropriate */ + if (cinfo->progress != NULL && + (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { + if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { + /* jdmaster underestimated number of scans; ratchet up one scan */ + cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; + } + } + } +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + } + cinfo->output_scan_number = cinfo->input_scan_number; + } else if (cinfo->global_state != DSTATE_PRESCAN) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Perform any dummy output passes, and set up for the final pass */ + return output_pass_setup(cinfo); +} + + +/* + * Set up for an output pass, and perform any dummy pass(es) needed. + * Common subroutine for jpeg_start_decompress and jpeg_start_output. + * Entry: global_state = DSTATE_PRESCAN only if previously suspended. + * Exit: If done, returns TRUE and sets global_state for proper output mode. + * If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN. + */ + +LOCAL(boolean) +output_pass_setup (j_decompress_ptr cinfo) +{ + if (cinfo->global_state != DSTATE_PRESCAN) { + /* First call: do pass setup */ + (*cinfo->master->prepare_for_output_pass) (cinfo); + cinfo->output_scanline = 0; + cinfo->global_state = DSTATE_PRESCAN; + } + /* Loop over any required dummy passes */ + while (cinfo->master->is_dummy_pass) { +#ifdef QUANT_2PASS_SUPPORTED + /* Crank through the dummy pass */ + while (cinfo->output_scanline < cinfo->output_height) { + JDIMENSION last_scanline; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + /* Process some data */ + last_scanline = cinfo->output_scanline; + (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, + &cinfo->output_scanline, (JDIMENSION) 0); + if (cinfo->output_scanline == last_scanline) + return FALSE; /* No progress made, must suspend */ + } + /* Finish up dummy pass, and set up for another one */ + (*cinfo->master->finish_output_pass) (cinfo); + (*cinfo->master->prepare_for_output_pass) (cinfo); + cinfo->output_scanline = 0; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* QUANT_2PASS_SUPPORTED */ + } + /* Ready for application to drive output pass through + * jpeg_read_scanlines or jpeg_read_raw_data. + */ + cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; + return TRUE; +} + + +/* + * Read some scanlines of data from the JPEG decompressor. + * + * The return value will be the number of lines actually read. + * This may be less than the number requested in several cases, + * including bottom of image, data source suspension, and operating + * modes that emit multiple scanlines at a time. + * + * Note: we warn about excess calls to jpeg_read_scanlines() since + * this likely signals an application programmer error. However, + * an oversize buffer (max_lines > scanlines remaining) is not an error. + */ + +GLOBAL(JDIMENSION) +jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, + JDIMENSION max_lines) +{ + JDIMENSION row_ctr; + + if (cinfo->global_state != DSTATE_SCANNING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->output_scanline >= cinfo->output_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Process some data */ + row_ctr = 0; + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); + cinfo->output_scanline += row_ctr; + return row_ctr; +} + + +/* + * Alternate entry point to read raw data. + * Processes exactly one iMCU row per call, unless suspended. + */ + +GLOBAL(JDIMENSION) +jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, + JDIMENSION max_lines) +{ + JDIMENSION lines_per_iMCU_row; + + if (cinfo->global_state != DSTATE_RAW_OK) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->output_scanline >= cinfo->output_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Verify that at least one iMCU row can be returned. */ + lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size; + if (max_lines < lines_per_iMCU_row) + ERREXIT(cinfo, JERR_BUFFER_SIZE); + + /* Decompress directly into user's buffer. */ + if (! (*cinfo->coef->decompress_data) (cinfo, data)) + return 0; /* suspension forced, can do nothing more */ + + /* OK, we processed one iMCU row. */ + cinfo->output_scanline += lines_per_iMCU_row; + return lines_per_iMCU_row; +} + + +/* Additional entry points for buffered-image mode. */ + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Initialize for an output pass in buffered-image mode. + */ + +GLOBAL(boolean) +jpeg_start_output (j_decompress_ptr cinfo, int scan_number) +{ + if (cinfo->global_state != DSTATE_BUFIMAGE && + cinfo->global_state != DSTATE_PRESCAN) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Limit scan number to valid range */ + if (scan_number <= 0) + scan_number = 1; + if (cinfo->inputctl->eoi_reached && + scan_number > cinfo->input_scan_number) + scan_number = cinfo->input_scan_number; + cinfo->output_scan_number = scan_number; + /* Perform any dummy output passes, and set up for the real pass */ + return output_pass_setup(cinfo); +} + + +/* + * Finish up after an output pass in buffered-image mode. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_finish_output (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) { + /* Terminate this pass. */ + /* We do not require the whole pass to have been completed. */ + (*cinfo->master->finish_output_pass) (cinfo); + cinfo->global_state = DSTATE_BUFPOST; + } else if (cinfo->global_state != DSTATE_BUFPOST) { + /* BUFPOST = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read markers looking for SOS or EOI */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + ! cinfo->inputctl->eoi_reached) { + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + cinfo->global_state = DSTATE_BUFIMAGE; + return TRUE; +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jdarith.c b/3rdparty/openctm/tools/jpeg/jdarith.c new file mode 100644 index 000000000..c28604cbe --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdarith.c @@ -0,0 +1,762 @@ +/* + * jdarith.c + * + * Developed 1997 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains portable arithmetic entropy decoding routines for JPEG + * (implementing the ISO/IEC IS 10918-1 and CCITT Recommendation ITU-T T.81). + * + * Both sequential and progressive modes are supported in this single module. + * + * Suspension is not currently supported in this module. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Expanded entropy decoder object for arithmetic decoding. */ + +typedef struct { + struct jpeg_entropy_decoder pub; /* public fields */ + + INT32 c; /* C register, base of coding interval + input bit buffer */ + INT32 a; /* A register, normalized size of coding interval */ + int ct; /* bit shift counter, # of bits left in bit buffer part of C */ + /* init: ct = -16 */ + /* run: ct = 0..7 */ + /* error: ct = -1 */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ + int dc_context[MAX_COMPS_IN_SCAN]; /* context index for DC conditioning */ + + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + + /* Pointers to statistics areas (these workspaces have image lifespan) */ + unsigned char * dc_stats[NUM_ARITH_TBLS]; + unsigned char * ac_stats[NUM_ARITH_TBLS]; +} arith_entropy_decoder; + +typedef arith_entropy_decoder * arith_entropy_ptr; + +/* The following two definitions specify the allocation chunk size + * for the statistics area. + * According to sections F.1.4.4.1.3 and F.1.4.4.2, we need at least + * 49 statistics bins for DC, and 245 statistics bins for AC coding. + * Note that we use one additional AC bin for codings with fixed + * probability (0.5), thus the minimum number for AC is 246. + * + * We use a compact representation with 1 byte per statistics bin, + * thus the numbers directly represent byte sizes. + * This 1 byte per statistics bin contains the meaning of the MPS + * (more probable symbol) in the highest bit (mask 0x80), and the + * index into the probability estimation state machine table + * in the lower bits (mask 0x7F). + */ + +#define DC_STAT_BINS 64 +#define AC_STAT_BINS 256 + + +LOCAL(int) +get_byte (j_decompress_ptr cinfo) +/* Read next input byte; we do not support suspension in this module. */ +{ + struct jpeg_source_mgr * src = cinfo->src; + + if (src->bytes_in_buffer == 0) + if (! (*src->fill_input_buffer) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + src->bytes_in_buffer--; + return GETJOCTET(*src->next_input_byte++); +} + + +/* + * The core arithmetic decoding routine (common in JPEG and JBIG). + * This needs to go as fast as possible. + * Machine-dependent optimization facilities + * are not utilized in this portable implementation. + * However, this code should be fairly efficient and + * may be a good base for further optimizations anyway. + * + * Return value is 0 or 1 (binary decision). + * + * Note: I've changed the handling of the code base & bit + * buffer register C compared to other implementations + * based on the standards layout & procedures. + * While it also contains both the actual base of the + * coding interval (16 bits) and the next-bits buffer, + * the cut-point between these two parts is floating + * (instead of fixed) with the bit shift counter CT. + * Thus, we also need only one (variable instead of + * fixed size) shift for the LPS/MPS decision, and + * we can get away with any renormalization update + * of C (except for new data insertion, of course). + * + * I've also introduced a new scheme for accessing + * the probability estimation state machine table, + * derived from Markus Kuhn's JBIG implementation. + */ + +LOCAL(int) +arith_decode (j_decompress_ptr cinfo, unsigned char *st) +{ + extern const INT32 jaritab[]; + register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; + register unsigned char nl, nm; + register INT32 qe, temp; + register int sv, data; + + /* Renormalization & data input per section D.2.6 */ + while (e->a < 0x8000L) { + if (--e->ct < 0) { + /* Need to fetch next data byte */ + if (cinfo->unread_marker) + data = 0; /* stuff zero data */ + else { + data = get_byte(cinfo); /* read next input byte */ + if (data == 0xFF) { /* zero stuff or marker code */ + do data = get_byte(cinfo); + while (data == 0xFF); /* swallow extra 0xFF bytes */ + if (data == 0) + data = 0xFF; /* discard stuffed zero byte */ + else { + /* Note: Different from the Huffman decoder, hitting + * a marker while processing the compressed data + * segment is legal in arithmetic coding. + * The convention is to supply zero data + * then until decoding is complete. + */ + cinfo->unread_marker = data; + data = 0; + } + } + } + e->c = (e->c << 8) | data; /* insert data into C register */ + if ((e->ct += 8) < 0) /* update bit shift counter */ + /* Need more initial bytes */ + if (++e->ct == 0) + /* Got 2 initial bytes -> re-init A and exit loop */ + e->a = 0x8000L; /* => e->a = 0x10000L after loop exit */ + } + e->a <<= 1; + } + + /* Fetch values from our compact representation of Table D.2: + * Qe values and probability estimation state machine + */ + sv = *st; + qe = jaritab[sv & 0x7F]; /* => Qe_Value */ + nl = qe & 0xFF; qe >>= 8; /* Next_Index_LPS + Switch_MPS */ + nm = qe & 0xFF; qe >>= 8; /* Next_Index_MPS */ + + /* Decode & estimation procedures per sections D.2.4 & D.2.5 */ + temp = e->a - qe; + e->a = temp; + temp <<= e->ct; + if (e->c >= temp) { + e->c -= temp; + /* Conditional LPS (less probable symbol) exchange */ + if (e->a < qe) { + e->a = qe; + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + } else { + e->a = qe; + *st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */ + sv ^= 0x80; /* Exchange LPS/MPS */ + } + } else if (e->a < 0x8000L) { + /* Conditional MPS (more probable symbol) exchange */ + if (e->a < qe) { + *st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */ + sv ^= 0x80; /* Exchange LPS/MPS */ + } else { + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + } + } + + return sv >> 7; +} + + +/* + * Check for a restart marker & resynchronize decoder. + */ + +LOCAL(void) +process_restart (j_decompress_ptr cinfo) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + int ci; + jpeg_component_info * compptr; + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Re-initialize statistics areas */ + if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS); + /* Reset DC predictions to 0 */ + entropy->last_dc_val[ci] = 0; + entropy->dc_context[ci] = 0; + } + if (cinfo->progressive_mode == 0 || cinfo->Ss) { + MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS); + } + } + + /* Reset arithmetic decoding variables */ + entropy->c = 0; + entropy->a = 0; + entropy->ct = -16; /* force reading 2 initial bytes to fill C */ + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Arithmetic MCU decoding. + * Each of these routines decodes and returns one MCU's worth of + * arithmetic-compressed coefficients. + * The coefficients are reordered from zigzag order into natural array order, + * but are not dequantized. + * + * The i'th block of the MCU is stored into the block pointed to by + * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. + */ + +/* + * MCU decoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + JBLOCKROW block; + unsigned char *st; + int blkn, ci, tbl, sign; + int v, m; + + /* Process restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + process_restart(cinfo); + entropy->restarts_to_go--; + } + + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + tbl = cinfo->cur_comp_info[ci]->dc_tbl_no; + + /* Sections F.2.4.1 & F.1.4.4.1: Decoding of DC coefficients */ + + /* Table F.4: Point to statistics bin S0 for DC coefficient coding */ + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + + /* Figure F.19: Decode_DC_DIFF */ + if (arith_decode(cinfo, st) == 0) + entropy->dc_context[ci] = 0; + else { + /* Figure F.21: Decoding nonzero value v */ + /* Figure F.22: Decoding the sign of v */ + sign = arith_decode(cinfo, st + 1); + st += 2; st += sign; + /* Figure F.23: Decoding the magnitude category of v */ + if ((m = arith_decode(cinfo, st)) != 0) { + st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */ + while (arith_decode(cinfo, st)) { + if ((m <<= 1) == 0x8000) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* magnitude overflow */ + return TRUE; + } + st += 1; + } + } + /* Section F.1.4.4.1.2: Establish dc_context conditioning category */ + if (m < (int) (((INT32) 1 << cinfo->arith_dc_L[tbl]) >> 1)) + entropy->dc_context[ci] = 0; /* zero diff category */ + else if (m > (int) (((INT32) 1 << cinfo->arith_dc_U[tbl]) >> 1)) + entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */ + else + entropy->dc_context[ci] = 4 + (sign * 4); /* small diff category */ + v = m; + /* Figure F.24: Decoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + if (arith_decode(cinfo, st)) v |= m; + v += 1; if (sign) v = -v; + entropy->last_dc_val[ci] += v; + } + + /* Scale and output the DC coefficient (assumes jpeg_natural_order[0]=0) */ + (*block)[0] = (JCOEF) (entropy->last_dc_val[ci] << cinfo->Al); + } + + return TRUE; +} + + +/* + * MCU decoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + JBLOCKROW block; + unsigned char *st; + int tbl, sign, k; + int v, m; + + /* Process restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + process_restart(cinfo); + entropy->restarts_to_go--; + } + + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + + /* There is always only one block per MCU */ + block = MCU_data[0]; + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + + /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */ + + /* Figure F.20: Decode_AC_coefficients */ + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + if (arith_decode(cinfo, st)) break; /* EOB flag */ + while (arith_decode(cinfo, st + 1) == 0) { + st += 3; k++; + if (k > cinfo->Se) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* spectral overflow */ + return TRUE; + } + } + /* Figure F.21: Decoding nonzero value v */ + /* Figure F.22: Decoding the sign of v */ + entropy->ac_stats[tbl][245] = 0; + sign = arith_decode(cinfo, entropy->ac_stats[tbl] + 245); + st += 2; + /* Figure F.23: Decoding the magnitude category of v */ + if ((m = arith_decode(cinfo, st)) != 0) { + if (arith_decode(cinfo, st)) { + m <<= 1; + st = entropy->ac_stats[tbl] + + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + while (arith_decode(cinfo, st)) { + if ((m <<= 1) == 0x8000) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* magnitude overflow */ + return TRUE; + } + st += 1; + } + } + } + v = m; + /* Figure F.24: Decoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + if (arith_decode(cinfo, st)) v |= m; + v += 1; if (sign) v = -v; + /* Scale and output coefficient in natural (dezigzagged) order */ + (*block)[jpeg_natural_order[k]] = (JCOEF) (v << cinfo->Al); + } + + return TRUE; +} + + +/* + * MCU decoding for DC successive approximation refinement scan. + */ + +METHODDEF(boolean) +decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + unsigned char st[4]; + int p1, blkn; + + /* Process restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + process_restart(cinfo); + entropy->restarts_to_go--; + } + + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + st[0] = 0; /* use fixed probability estimation */ + /* Encoded data is simply the next bit of the two's-complement DC value */ + if (arith_decode(cinfo, st)) + MCU_data[blkn][0][0] |= p1; + } + + return TRUE; +} + + +/* + * MCU decoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + JBLOCKROW block; + JCOEFPTR thiscoef; + unsigned char *st; + int tbl, k, kex; + int p1, m1; + + /* Process restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + process_restart(cinfo); + entropy->restarts_to_go--; + } + + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + + /* There is always only one block per MCU */ + block = MCU_data[0]; + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + + /* Establish EOBx (previous stage end-of-block) index */ + for (kex = cinfo->Se + 1; kex > 1; kex--) + if ((*block)[jpeg_natural_order[kex - 1]]) break; + + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + if (k >= kex) + if (arith_decode(cinfo, st)) break; /* EOB flag */ + for (;;) { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef) { /* previously nonzero coef */ + if (arith_decode(cinfo, st + 2)) { + if (*thiscoef < 0) + *thiscoef += m1; + else + *thiscoef += p1; + } + break; + } + if (arith_decode(cinfo, st + 1)) { /* newly nonzero coef */ + entropy->ac_stats[tbl][245] = 0; + if (arith_decode(cinfo, entropy->ac_stats[tbl] + 245)) + *thiscoef = m1; + else + *thiscoef = p1; + break; + } + st += 3; k++; + if (k > cinfo->Se) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* spectral overflow */ + return TRUE; + } + } + } + + return TRUE; +} + + +/* + * Decode one MCU's worth of arithmetic-compressed coefficients. + */ + +METHODDEF(boolean) +decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + jpeg_component_info * compptr; + JBLOCKROW block; + unsigned char *st; + int blkn, ci, tbl, sign, k; + int v, m; + + /* Process restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + process_restart(cinfo); + entropy->restarts_to_go--; + } + + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + + /* Sections F.2.4.1 & F.1.4.4.1: Decoding of DC coefficients */ + + tbl = compptr->dc_tbl_no; + + /* Table F.4: Point to statistics bin S0 for DC coefficient coding */ + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + + /* Figure F.19: Decode_DC_DIFF */ + if (arith_decode(cinfo, st) == 0) + entropy->dc_context[ci] = 0; + else { + /* Figure F.21: Decoding nonzero value v */ + /* Figure F.22: Decoding the sign of v */ + sign = arith_decode(cinfo, st + 1); + st += 2; st += sign; + /* Figure F.23: Decoding the magnitude category of v */ + if ((m = arith_decode(cinfo, st)) != 0) { + st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */ + while (arith_decode(cinfo, st)) { + if ((m <<= 1) == 0x8000) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* magnitude overflow */ + return TRUE; + } + st += 1; + } + } + /* Section F.1.4.4.1.2: Establish dc_context conditioning category */ + if (m < (int) (((INT32) 1 << cinfo->arith_dc_L[tbl]) >> 1)) + entropy->dc_context[ci] = 0; /* zero diff category */ + else if (m > (int) (((INT32) 1 << cinfo->arith_dc_U[tbl]) >> 1)) + entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */ + else + entropy->dc_context[ci] = 4 + (sign * 4); /* small diff category */ + v = m; + /* Figure F.24: Decoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + if (arith_decode(cinfo, st)) v |= m; + v += 1; if (sign) v = -v; + entropy->last_dc_val[ci] += v; + } + + (*block)[0] = (JCOEF) entropy->last_dc_val[ci]; + + /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */ + + tbl = compptr->ac_tbl_no; + + /* Figure F.20: Decode_AC_coefficients */ + for (k = 1; k < DCTSIZE2; k++) { + st = entropy->ac_stats[tbl] + 3 * (k - 1); + if (arith_decode(cinfo, st)) break; /* EOB flag */ + while (arith_decode(cinfo, st + 1) == 0) { + st += 3; k++; + if (k >= DCTSIZE2) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* spectral overflow */ + return TRUE; + } + } + /* Figure F.21: Decoding nonzero value v */ + /* Figure F.22: Decoding the sign of v */ + entropy->ac_stats[tbl][245] = 0; + sign = arith_decode(cinfo, entropy->ac_stats[tbl] + 245); + st += 2; + /* Figure F.23: Decoding the magnitude category of v */ + if ((m = arith_decode(cinfo, st)) != 0) { + if (arith_decode(cinfo, st)) { + m <<= 1; + st = entropy->ac_stats[tbl] + + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + while (arith_decode(cinfo, st)) { + if ((m <<= 1) == 0x8000) { + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + entropy->ct = -1; /* magnitude overflow */ + return TRUE; + } + st += 1; + } + } + } + v = m; + /* Figure F.24: Decoding the magnitude bit pattern of v */ + st += 14; + while (m >>= 1) + if (arith_decode(cinfo, st)) v |= m; + v += 1; if (sign) v = -v; + (*block)[jpeg_natural_order[k]] = (JCOEF) v; + } + } + + return TRUE; +} + + +/* + * Initialize for an arithmetic-compressed scan. + */ + +METHODDEF(void) +start_pass (j_decompress_ptr cinfo) +{ + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + int ci, tbl; + jpeg_component_info * compptr; + + if (cinfo->progressive_mode) { + /* Validate progressive scan parameters */ + if (cinfo->Ss == 0) { + if (cinfo->Se != 0) + goto bad; + } else { + /* need not check Ss/Se < 0 since they came from unsigned bytes */ + if (cinfo->Se < cinfo->Ss || cinfo->Se >= DCTSIZE2) + goto bad; + /* AC scans may have only one component */ + if (cinfo->comps_in_scan != 1) + goto bad; + } + if (cinfo->Ah != 0) { + /* Successive approximation refinement scan: must have Al = Ah-1. */ + if (cinfo->Ah-1 != cinfo->Al) + goto bad; + } + if (cinfo->Al > 13) { /* need not check for < 0 */ + bad: + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); + } + /* Update progression status, and verify that scan order is legal. + * Note that inter-scan inconsistencies are treated as warnings + * not fatal errors ... not clear if this is right way to behave. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + if (cinfo->Ah != expected) + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + coef_bit_ptr[coefi] = cinfo->Al; + } + } + /* Select MCU decoding routine */ + if (cinfo->Ah == 0) { + if (cinfo->Ss == 0) + entropy->pub.decode_mcu = decode_mcu_DC_first; + else + entropy->pub.decode_mcu = decode_mcu_AC_first; + } else { + if (cinfo->Ss == 0) + entropy->pub.decode_mcu = decode_mcu_DC_refine; + else + entropy->pub.decode_mcu = decode_mcu_AC_refine; + } + } else { + /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. + * This ought to be an error condition, but we make it a warning because + * there are some baseline files out there with all zeroes in these bytes. + */ + if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 || + cinfo->Ah != 0 || cinfo->Al != 0) + WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); + /* Select MCU decoding routine */ + entropy->pub.decode_mcu = decode_mcu; + } + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Allocate & initialize requested statistics areas */ + if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + tbl = compptr->dc_tbl_no; + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + if (entropy->dc_stats[tbl] == NULL) + entropy->dc_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, DC_STAT_BINS); + MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS); + /* Initialize DC predictions to 0 */ + entropy->last_dc_val[ci] = 0; + entropy->dc_context[ci] = 0; + } + if (cinfo->progressive_mode == 0 || cinfo->Ss) { + tbl = compptr->ac_tbl_no; + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + if (entropy->ac_stats[tbl] == NULL) + entropy->ac_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, AC_STAT_BINS); + MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS); + } + } + + /* Initialize arithmetic decoding variables */ + entropy->c = 0; + entropy->a = 0; + entropy->ct = -16; /* force reading 2 initial bytes to fill C */ + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Module initialization routine for arithmetic entropy decoding. + */ + +GLOBAL(void) +jinit_arith_decoder (j_decompress_ptr cinfo) +{ + arith_entropy_ptr entropy; + int i; + + entropy = (arith_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(arith_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass; + + /* Mark tables unallocated */ + for (i = 0; i < NUM_ARITH_TBLS; i++) { + entropy->dc_stats[i] = NULL; + entropy->ac_stats[i] = NULL; + } + + if (cinfo->progressive_mode) { + /* Create progression status table */ + int *coef_bit_ptr, ci; + cinfo->coef_bits = (int (*)[DCTSIZE2]) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components*DCTSIZE2*SIZEOF(int)); + coef_bit_ptr = & cinfo->coef_bits[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + for (i = 0; i < DCTSIZE2; i++) + *coef_bit_ptr++ = -1; + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdatadst.c b/3rdparty/openctm/tools/jpeg/jdatadst.c new file mode 100644 index 000000000..2ece4e95d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdatadst.c @@ -0,0 +1,151 @@ +/* + * jdatadst.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains compression data destination routines for the case of + * emitting JPEG data to a file (or any stdio stream). While these routines + * are sufficient for most applications, some will want to use a different + * destination manager. + * IMPORTANT: we assume that fwrite() will correctly transcribe an array of + * JOCTETs into 8-bit-wide elements on external storage. If char is wider + * than 8 bits on your machine, you may need to do some tweaking. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" + + +/* Expanded data destination object for stdio output */ + +typedef struct { + struct jpeg_destination_mgr pub; /* public fields */ + + FILE * outfile; /* target stream */ + JOCTET * buffer; /* start of buffer */ +} my_destination_mgr; + +typedef my_destination_mgr * my_dest_ptr; + +#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ + + +/* + * Initialize destination --- called by jpeg_start_compress + * before any data is actually written. + */ + +METHODDEF(void) +init_destination (j_compress_ptr cinfo) +{ + my_dest_ptr dest = (my_dest_ptr) cinfo->dest; + + /* Allocate the output buffer --- it will be released when done with image */ + dest->buffer = (JOCTET *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + OUTPUT_BUF_SIZE * SIZEOF(JOCTET)); + + dest->pub.next_output_byte = dest->buffer; + dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; +} + + +/* + * Empty the output buffer --- called whenever buffer fills up. + * + * In typical applications, this should write the entire output buffer + * (ignoring the current state of next_output_byte & free_in_buffer), + * reset the pointer & count to the start of the buffer, and return TRUE + * indicating that the buffer has been dumped. + * + * In applications that need to be able to suspend compression due to output + * overrun, a FALSE return indicates that the buffer cannot be emptied now. + * In this situation, the compressor will return to its caller (possibly with + * an indication that it has not accepted all the supplied scanlines). The + * application should resume compression after it has made more room in the + * output buffer. Note that there are substantial restrictions on the use of + * suspension --- see the documentation. + * + * When suspending, the compressor will back up to a convenient restart point + * (typically the start of the current MCU). next_output_byte & free_in_buffer + * indicate where the restart point will be if the current call returns FALSE. + * Data beyond this point will be regenerated after resumption, so do not + * write it out when emptying the buffer externally. + */ + +METHODDEF(boolean) +empty_output_buffer (j_compress_ptr cinfo) +{ + my_dest_ptr dest = (my_dest_ptr) cinfo->dest; + + if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) != + (size_t) OUTPUT_BUF_SIZE) + ERREXIT(cinfo, JERR_FILE_WRITE); + + dest->pub.next_output_byte = dest->buffer; + dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; + + return TRUE; +} + + +/* + * Terminate destination --- called by jpeg_finish_compress + * after all data has been written. Usually needs to flush buffer. + * + * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding + * application must deal with any cleanup that should happen even + * for error exit. + */ + +METHODDEF(void) +term_destination (j_compress_ptr cinfo) +{ + my_dest_ptr dest = (my_dest_ptr) cinfo->dest; + size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer; + + /* Write any data remaining in the buffer */ + if (datacount > 0) { + if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount) + ERREXIT(cinfo, JERR_FILE_WRITE); + } + fflush(dest->outfile); + /* Make sure we wrote the output file OK */ + if (ferror(dest->outfile)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * Prepare for output to a stdio stream. + * The caller must have already opened the stream, and is responsible + * for closing it after finishing compression. + */ + +GLOBAL(void) +jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) +{ + my_dest_ptr dest; + + /* The destination object is made permanent so that multiple JPEG images + * can be written to the same file without re-executing jpeg_stdio_dest. + * This makes it dangerous to use this manager and a different destination + * manager serially with the same JPEG object, because their private object + * sizes may be different. Caveat programmer. + */ + if (cinfo->dest == NULL) { /* first time for this JPEG object? */ + cinfo->dest = (struct jpeg_destination_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_destination_mgr)); + } + + dest = (my_dest_ptr) cinfo->dest; + dest->pub.init_destination = init_destination; + dest->pub.empty_output_buffer = empty_output_buffer; + dest->pub.term_destination = term_destination; + dest->outfile = outfile; +} diff --git a/3rdparty/openctm/tools/jpeg/jdatasrc.c b/3rdparty/openctm/tools/jpeg/jdatasrc.c new file mode 100644 index 000000000..29b698328 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdatasrc.c @@ -0,0 +1,212 @@ +/* + * jdatasrc.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains decompression data source routines for the case of + * reading JPEG data from a file (or any stdio stream). While these routines + * are sufficient for most applications, some will want to use a different + * source manager. + * IMPORTANT: we assume that fread() will correctly transcribe an array of + * JOCTETs from 8-bit-wide elements on external storage. If char is wider + * than 8 bits on your machine, you may need to do some tweaking. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" + + +/* Expanded data source object for stdio input */ + +typedef struct { + struct jpeg_source_mgr pub; /* public fields */ + + FILE * infile; /* source stream */ + JOCTET * buffer; /* start of buffer */ + boolean start_of_file; /* have we gotten any data yet? */ +} my_source_mgr; + +typedef my_source_mgr * my_src_ptr; + +#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */ + + +/* + * Initialize source --- called by jpeg_read_header + * before any data is actually read. + */ + +METHODDEF(void) +init_source (j_decompress_ptr cinfo) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + + /* We reset the empty-input-file flag for each image, + * but we don't clear the input buffer. + * This is correct behavior for reading a series of images from one source. + */ + src->start_of_file = TRUE; +} + + +/* + * Fill the input buffer --- called whenever buffer is emptied. + * + * In typical applications, this should read fresh data into the buffer + * (ignoring the current state of next_input_byte & bytes_in_buffer), + * reset the pointer & count to the start of the buffer, and return TRUE + * indicating that the buffer has been reloaded. It is not necessary to + * fill the buffer entirely, only to obtain at least one more byte. + * + * There is no such thing as an EOF return. If the end of the file has been + * reached, the routine has a choice of ERREXIT() or inserting fake data into + * the buffer. In most cases, generating a warning message and inserting a + * fake EOI marker is the best course of action --- this will allow the + * decompressor to output however much of the image is there. However, + * the resulting error message is misleading if the real problem is an empty + * input file, so we handle that case specially. + * + * In applications that need to be able to suspend compression due to input + * not being available yet, a FALSE return indicates that no more data can be + * obtained right now, but more may be forthcoming later. In this situation, + * the decompressor will return to its caller (with an indication of the + * number of scanlines it has read, if any). The application should resume + * decompression after it has loaded more data into the input buffer. Note + * that there are substantial restrictions on the use of suspension --- see + * the documentation. + * + * When suspending, the decompressor will back up to a convenient restart point + * (typically the start of the current MCU). next_input_byte & bytes_in_buffer + * indicate where the restart point will be if the current call returns FALSE. + * Data beyond this point must be rescanned after resumption, so move it to + * the front of the buffer rather than discarding it. + */ + +METHODDEF(boolean) +fill_input_buffer (j_decompress_ptr cinfo) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + size_t nbytes; + + nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); + + if (nbytes <= 0) { + if (src->start_of_file) /* Treat empty input file as fatal error */ + ERREXIT(cinfo, JERR_INPUT_EMPTY); + WARNMS(cinfo, JWRN_JPEG_EOF); + /* Insert a fake EOI marker */ + src->buffer[0] = (JOCTET) 0xFF; + src->buffer[1] = (JOCTET) JPEG_EOI; + nbytes = 2; + } + + src->pub.next_input_byte = src->buffer; + src->pub.bytes_in_buffer = nbytes; + src->start_of_file = FALSE; + + return TRUE; +} + + +/* + * Skip data --- used to skip over a potentially large amount of + * uninteresting data (such as an APPn marker). + * + * Writers of suspendable-input applications must note that skip_input_data + * is not granted the right to give a suspension return. If the skip extends + * beyond the data currently in the buffer, the buffer can be marked empty so + * that the next read will cause a fill_input_buffer call that can suspend. + * Arranging for additional bytes to be discarded before reloading the input + * buffer is the application writer's problem. + */ + +METHODDEF(void) +skip_input_data (j_decompress_ptr cinfo, long num_bytes) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + + /* Just a dumb implementation for now. Could use fseek() except + * it doesn't work on pipes. Not clear that being smart is worth + * any trouble anyway --- large skips are infrequent. + */ + if (num_bytes > 0) { + while (num_bytes > (long) src->pub.bytes_in_buffer) { + num_bytes -= (long) src->pub.bytes_in_buffer; + (void) fill_input_buffer(cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ + } + src->pub.next_input_byte += (size_t) num_bytes; + src->pub.bytes_in_buffer -= (size_t) num_bytes; + } +} + + +/* + * An additional method that can be provided by data source modules is the + * resync_to_restart method for error recovery in the presence of RST markers. + * For the moment, this source module just uses the default resync method + * provided by the JPEG library. That method assumes that no backtracking + * is possible. + */ + + +/* + * Terminate source --- called by jpeg_finish_decompress + * after all data has been read. Often a no-op. + * + * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding + * application must deal with any cleanup that should happen even + * for error exit. + */ + +METHODDEF(void) +term_source (j_decompress_ptr cinfo) +{ + /* no work necessary here */ +} + + +/* + * Prepare for input from a stdio stream. + * The caller must have already opened the stream, and is responsible + * for closing it after finishing decompression. + */ + +GLOBAL(void) +jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile) +{ + my_src_ptr src; + + /* The source object and input buffer are made permanent so that a series + * of JPEG images can be read from the same file by calling jpeg_stdio_src + * only before the first one. (If we discarded the buffer at the end of + * one image, we'd likely lose the start of the next one.) + * This makes it unsafe to use this manager and a different source + * manager serially with the same JPEG object. Caveat programmer. + */ + if (cinfo->src == NULL) { /* first time for this JPEG object? */ + cinfo->src = (struct jpeg_source_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_source_mgr)); + src = (my_src_ptr) cinfo->src; + src->buffer = (JOCTET *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + INPUT_BUF_SIZE * SIZEOF(JOCTET)); + } + + src = (my_src_ptr) cinfo->src; + src->pub.init_source = init_source; + src->pub.fill_input_buffer = fill_input_buffer; + src->pub.skip_input_data = skip_input_data; + src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ + src->pub.term_source = term_source; + src->infile = infile; + src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ + src->pub.next_input_byte = NULL; /* until buffer loaded */ +} diff --git a/3rdparty/openctm/tools/jpeg/jdcoefct.c b/3rdparty/openctm/tools/jpeg/jdcoefct.c new file mode 100644 index 000000000..8c81f8f3a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdcoefct.c @@ -0,0 +1,736 @@ +/* + * jdcoefct.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the coefficient buffer controller for decompression. + * This controller is the top level of the JPEG decompressor proper. + * The coefficient buffer lies between entropy decoding and inverse-DCT steps. + * + * In buffered-image mode, this controller is the interface between + * input-oriented processing and output-oriented processing. + * Also, the input side (only) is used when reading a file for transcoding. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +/* Block smoothing is only applicable for progressive JPEG, so: */ +#ifndef D_PROGRESSIVE_SUPPORTED +#undef BLOCK_SMOOTHING_SUPPORTED +#endif + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_coef_controller pub; /* public fields */ + + /* These variables keep track of the current location of the input side. */ + /* cinfo->input_iMCU_row is also used for this. */ + JDIMENSION MCU_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* The output side's location is represented by cinfo->output_iMCU_row. */ + + /* In single-pass modes, it's sufficient to buffer just one MCU. + * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks, + * and let the entropy decoder write into that workspace each time. + * (On 80x86, the workspace is FAR even though it's not really very big; + * this is to keep the module interfaces unchanged when a large coefficient + * buffer is necessary.) + * In multi-pass modes, this array points to the current MCU's blocks + * within the virtual arrays; it is used only by the input side. + */ + JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU]; + +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* In multi-pass modes, we need a virtual block array for each component. */ + jvirt_barray_ptr whole_image[MAX_COMPONENTS]; +#endif + +#ifdef BLOCK_SMOOTHING_SUPPORTED + /* When doing block smoothing, we latch coefficient Al values here */ + int * coef_bits_latch; +#define SAVED_COEFS 6 /* we save coef_bits[0..5] */ +#endif +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + +/* Forward declarations */ +METHODDEF(int) decompress_onepass + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#ifdef D_MULTISCAN_FILES_SUPPORTED +METHODDEF(int) decompress_data + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#endif +#ifdef BLOCK_SMOOTHING_SUPPORTED +LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo)); +METHODDEF(int) decompress_smooth_data + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#endif + + +LOCAL(void) +start_iMCU_row (j_decompress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row (input side) */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->MCU_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for an input processing pass. + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + cinfo->input_iMCU_row = 0; + start_iMCU_row(cinfo); +} + + +/* + * Initialize for an output processing pass. + */ + +METHODDEF(void) +start_output_pass (j_decompress_ptr cinfo) +{ +#ifdef BLOCK_SMOOTHING_SUPPORTED + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* If multipass, check to see whether to use block smoothing on this pass */ + if (coef->pub.coef_arrays != NULL) { + if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) + coef->pub.decompress_data = decompress_smooth_data; + else + coef->pub.decompress_data = decompress_data; + } +#endif + cinfo->output_iMCU_row = 0; +} + + +/* + * Decompress and return some data in the single-pass case. + * Always attempts to emit one fully interleaved MCU row ("iMCU" row). + * Input and output must run in lockstep since we have only a one-MCU buffer. + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + * + * NB: output_buf contains a plane for each component in image, + * which we index according to the component's SOF position. + */ + +METHODDEF(int) +decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, ci, xindex, yindex, yoffset, useful_width; + JSAMPARRAY output_ptr; + JDIMENSION start_col, output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Loop to process as much as one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; + MCU_col_num++) { + /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */ + jzero_far((void FAR *) coef->MCU_buffer[0], + (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->MCU_ctr = MCU_col_num; + return JPEG_SUSPENDED; + } + /* Determine where data should go in output_buf and do the IDCT thing. + * We skip dummy blocks at the right and bottom edges (but blkn gets + * incremented past them!). Note the inner loop relies on having + * allocated the MCU_buffer[] blocks sequentially. + */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) { + blkn += compptr->MCU_blocks; + continue; + } + inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; + useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + output_ptr = output_buf[compptr->component_index] + + yoffset * compptr->DCT_v_scaled_size; + start_col = MCU_col_num * compptr->MCU_sample_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (cinfo->input_iMCU_row < last_iMCU_row || + yoffset+yindex < compptr->last_row_height) { + output_col = start_col; + for (xindex = 0; xindex < useful_width; xindex++) { + (*inverse_DCT) (cinfo, compptr, + (JCOEFPTR) coef->MCU_buffer[blkn+xindex], + output_ptr, output_col); + output_col += compptr->DCT_h_scaled_size; + } + } + blkn += compptr->MCU_width; + output_ptr += compptr->DCT_v_scaled_size; + } + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + cinfo->output_iMCU_row++; + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + start_iMCU_row(cinfo); + return JPEG_ROW_COMPLETED; + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + + +/* + * Dummy consume-input routine for single-pass operation. + */ + +METHODDEF(int) +dummy_consume_data (j_decompress_ptr cinfo) +{ + return JPEG_SUSPENDED; /* Always indicate nothing was done */ +} + + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Consume input data and store it in the full-image coefficient buffer. + * We read as much as one fully interleaved MCU row ("iMCU" row) per call, + * ie, v_samp_factor block rows for each component in the scan. + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + */ + +METHODDEF(int) +consume_data (j_decompress_ptr cinfo) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + int blkn, ci, xindex, yindex, yoffset; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + cinfo->input_iMCU_row * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, TRUE); + /* Note: entropy decoder expects buffer to be zeroed, + * but this is handled automatically by the memory manager + * because we requested a pre-zeroed array. + */ + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + coef->MCU_buffer[blkn++] = buffer_ptr++; + } + } + } + /* Try to fetch the MCU. */ + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->MCU_ctr = MCU_col_num; + return JPEG_SUSPENDED; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + start_iMCU_row(cinfo); + return JPEG_ROW_COMPLETED; + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + + +/* + * Decompress and return some data in the multi-pass case. + * Always attempts to emit one fully interleaved MCU row ("iMCU" row). + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + * + * NB: output_buf contains a plane for each component in image. + */ + +METHODDEF(int) +decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION block_num; + int ci, block_row, block_rows; + JBLOCKARRAY buffer; + JBLOCKROW buffer_ptr; + JSAMPARRAY output_ptr; + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number < cinfo->output_scan_number || + (cinfo->input_scan_number == cinfo->output_scan_number && + cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) { + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Align the virtual buffer for this component. */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + cinfo->output_iMCU_row * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) + block_rows = compptr->v_samp_factor; + else { + /* NB: can't use last_row_height here; it is input-side-dependent! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + } + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + output_ptr = output_buf[ci]; + /* Loop over all DCT blocks to be processed. */ + for (block_row = 0; block_row < block_rows; block_row++) { + buffer_ptr = buffer[block_row]; + output_col = 0; + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr, + output_ptr, output_col); + buffer_ptr++; + output_col += compptr->DCT_h_scaled_size; + } + output_ptr += compptr->DCT_v_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + return JPEG_ROW_COMPLETED; + return JPEG_SCAN_COMPLETED; +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + + +#ifdef BLOCK_SMOOTHING_SUPPORTED + +/* + * This code applies interblock smoothing as described by section K.8 + * of the JPEG standard: the first 5 AC coefficients are estimated from + * the DC values of a DCT block and its 8 neighboring blocks. + * We apply smoothing only for progressive JPEG decoding, and only if + * the coefficients it can estimate are not yet known to full precision. + */ + +/* Natural-order array positions of the first 5 zigzag-order coefficients */ +#define Q01_POS 1 +#define Q10_POS 8 +#define Q20_POS 16 +#define Q11_POS 9 +#define Q02_POS 2 + +/* + * Determine whether block smoothing is applicable and safe. + * We also latch the current states of the coef_bits[] entries for the + * AC coefficients; otherwise, if the input side of the decompressor + * advances into a new scan, we might think the coefficients are known + * more accurately than they really are. + */ + +LOCAL(boolean) +smoothing_ok (j_decompress_ptr cinfo) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + boolean smoothing_useful = FALSE; + int ci, coefi; + jpeg_component_info *compptr; + JQUANT_TBL * qtable; + int * coef_bits; + int * coef_bits_latch; + + if (! cinfo->progressive_mode || cinfo->coef_bits == NULL) + return FALSE; + + /* Allocate latch area if not already done */ + if (coef->coef_bits_latch == NULL) + coef->coef_bits_latch = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * + (SAVED_COEFS * SIZEOF(int))); + coef_bits_latch = coef->coef_bits_latch; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* All components' quantization values must already be latched. */ + if ((qtable = compptr->quant_table) == NULL) + return FALSE; + /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */ + if (qtable->quantval[0] == 0 || + qtable->quantval[Q01_POS] == 0 || + qtable->quantval[Q10_POS] == 0 || + qtable->quantval[Q20_POS] == 0 || + qtable->quantval[Q11_POS] == 0 || + qtable->quantval[Q02_POS] == 0) + return FALSE; + /* DC values must be at least partly known for all components. */ + coef_bits = cinfo->coef_bits[ci]; + if (coef_bits[0] < 0) + return FALSE; + /* Block smoothing is helpful if some AC coefficients remain inaccurate. */ + for (coefi = 1; coefi <= 5; coefi++) { + coef_bits_latch[coefi] = coef_bits[coefi]; + if (coef_bits[coefi] != 0) + smoothing_useful = TRUE; + } + coef_bits_latch += SAVED_COEFS; + } + + return smoothing_useful; +} + + +/* + * Variant of decompress_data for use when doing block smoothing. + */ + +METHODDEF(int) +decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION block_num, last_block_column; + int ci, block_row, block_rows, access_rows; + JBLOCKARRAY buffer; + JBLOCKROW buffer_ptr, prev_block_row, next_block_row; + JSAMPARRAY output_ptr; + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + boolean first_row, last_row; + JBLOCK workspace; + int *coef_bits; + JQUANT_TBL *quanttbl; + INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; + int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; + int Al, pred; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + ! cinfo->inputctl->eoi_reached) { + if (cinfo->input_scan_number == cinfo->output_scan_number) { + /* If input is working on current scan, we ordinarily want it to + * have completed the current row. But if input scan is DC, + * we want it to keep one row ahead so that next block row's DC + * values are up to date. + */ + JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0; + if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta) + break; + } + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) { + block_rows = compptr->v_samp_factor; + access_rows = block_rows * 2; /* this and next iMCU row */ + last_row = FALSE; + } else { + /* NB: can't use last_row_height here; it is input-side-dependent! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + access_rows = block_rows; /* this iMCU row only */ + last_row = TRUE; + } + /* Align the virtual buffer for this component. */ + if (cinfo->output_iMCU_row > 0) { + access_rows += compptr->v_samp_factor; /* prior iMCU row too */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor, + (JDIMENSION) access_rows, FALSE); + buffer += compptr->v_samp_factor; /* point to current iMCU row */ + first_row = FALSE; + } else { + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE); + first_row = TRUE; + } + /* Fetch component-dependent info */ + coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); + quanttbl = compptr->quant_table; + Q00 = quanttbl->quantval[0]; + Q01 = quanttbl->quantval[Q01_POS]; + Q10 = quanttbl->quantval[Q10_POS]; + Q20 = quanttbl->quantval[Q20_POS]; + Q11 = quanttbl->quantval[Q11_POS]; + Q02 = quanttbl->quantval[Q02_POS]; + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + output_ptr = output_buf[ci]; + /* Loop over all DCT blocks to be processed. */ + for (block_row = 0; block_row < block_rows; block_row++) { + buffer_ptr = buffer[block_row]; + if (first_row && block_row == 0) + prev_block_row = buffer_ptr; + else + prev_block_row = buffer[block_row-1]; + if (last_row && block_row == block_rows-1) + next_block_row = buffer_ptr; + else + next_block_row = buffer[block_row+1]; + /* We fetch the surrounding DC values using a sliding-register approach. + * Initialize all nine here so as to do the right thing on narrow pics. + */ + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; + DC7 = DC8 = DC9 = (int) next_block_row[0][0]; + output_col = 0; + last_block_column = compptr->width_in_blocks - 1; + for (block_num = 0; block_num <= last_block_column; block_num++) { + /* Fetch current DCT block into workspace so we can modify it. */ + jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); + /* Update DC values */ + if (block_num < last_block_column) { + DC3 = (int) prev_block_row[1][0]; + DC6 = (int) buffer_ptr[1][0]; + DC9 = (int) next_block_row[1][0]; + } + /* Compute coefficient estimates per K.8. + * An estimate is applied only if coefficient is still zero, + * and is not known to be fully accurate. + */ + /* AC01 */ + if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) { + num = 36 * Q00 * (DC4 - DC6); + if (num >= 0) { + pred = (int) (((Q01<<7) + num) / (Q01<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q10<<7) + num) / (Q10<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q20<<7) + num) / (Q20<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q11<<7) + num) / (Q11<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q02<<7) + num) / (Q02<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<DCT_h_scaled_size; + } + output_ptr += compptr->DCT_v_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + return JPEG_ROW_COMPLETED; + return JPEG_SCAN_COMPLETED; +} + +#endif /* BLOCK_SMOOTHING_SUPPORTED */ + + +/* + * Initialize coefficient buffer controller. + */ + +GLOBAL(void) +jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_coef_ptr coef; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_d_coef_controller *) coef; + coef->pub.start_input_pass = start_input_pass; + coef->pub.start_output_pass = start_output_pass; +#ifdef BLOCK_SMOOTHING_SUPPORTED + coef->coef_bits_latch = NULL; +#endif + + /* Create the coefficient buffer. */ + if (need_full_buffer) { +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* Allocate a full-image virtual array for each component, */ + /* padded to a multiple of samp_factor DCT blocks in each direction. */ + /* Note we ask for a pre-zeroed array. */ + int ci, access_rows; + jpeg_component_info *compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + access_rows = compptr->v_samp_factor; +#ifdef BLOCK_SMOOTHING_SUPPORTED + /* If block smoothing could be used, need a bigger window */ + if (cinfo->progressive_mode) + access_rows *= 3; +#endif + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE, + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) access_rows); + } + coef->pub.consume_data = consume_data; + coef->pub.decompress_data = decompress_data; + coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + /* We only need a single-MCU buffer. */ + JBLOCKROW buffer; + int i; + + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { + coef->MCU_buffer[i] = buffer + i; + } + coef->pub.consume_data = dummy_consume_data; + coef->pub.decompress_data = decompress_onepass; + coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdcolor.c b/3rdparty/openctm/tools/jpeg/jdcolor.c new file mode 100644 index 000000000..fd7b13887 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdcolor.c @@ -0,0 +1,396 @@ +/* + * jdcolor.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains output colorspace conversion routines. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private subobject */ + +typedef struct { + struct jpeg_color_deconverter pub; /* public fields */ + + /* Private state for YCC->RGB conversion */ + int * Cr_r_tab; /* => table for Cr to R conversion */ + int * Cb_b_tab; /* => table for Cb to B conversion */ + INT32 * Cr_g_tab; /* => table for Cr to G conversion */ + INT32 * Cb_g_tab; /* => table for Cb to G conversion */ +} my_color_deconverter; + +typedef my_color_deconverter * my_cconvert_ptr; + + +/**************** YCbCr -> RGB conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * R = Y + 1.40200 * Cr + * G = Y - 0.34414 * Cb - 0.71414 * Cr + * B = Y + 1.77200 * Cb + * where Cb and Cr represent the incoming values less CENTERJSAMPLE. + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * Notice that Y, being an integral input, does not contribute any fraction + * so it need not participate in the rounding. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times Cb and Cr for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The Cr=>R and Cb=>B values can be rounded to integers in advance; the + * values for the G calculation are left scaled up, since we must add them + * together before rounding. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. + */ + +LOCAL(void) +build_ycc_rgb_table (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + int i; + INT32 x; + SHIFT_TEMPS + + cconvert->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + cconvert->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + cconvert->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.77200 * x */ + cconvert->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.71414 * x */ + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + } +} + + +/* + * Convert some rows of samples to the output colorspace. + * + * Note that we change from noninterleaved, one-plane-per-component format + * to interleaved-pixel format. The output buffer is therefore three times + * as wide as the input buffer. + * A starting row offset is provided only for the input buffer. The caller + * can easily adjust the passed output_buf value to accommodate any row + * offset required on that side. + */ + +METHODDEF(void) +ycc_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + SHIFT_TEMPS + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + y = GETJSAMPLE(inptr0[col]); + cb = GETJSAMPLE(inptr1[col]); + cr = GETJSAMPLE(inptr2[col]); + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + outptr[RGB_GREEN] = range_limit[y + + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + SCALEBITS))]; + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + outptr += RGB_PIXELSIZE; + } + } +} + + +/**************** Cases other than YCbCr -> RGB **************/ + + +/* + * Color conversion for no colorspace change: just copy the data, + * converting from separate-planes to interleaved representation. + */ + +METHODDEF(void) +null_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW inptr, outptr; + register JDIMENSION count; + register int num_components = cinfo->num_components; + JDIMENSION num_cols = cinfo->output_width; + int ci; + + while (--num_rows >= 0) { + for (ci = 0; ci < num_components; ci++) { + inptr = input_buf[ci][input_row]; + outptr = output_buf[0] + ci; + for (count = num_cols; count > 0; count--) { + *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ + outptr += num_components; + } + } + input_row++; + output_buf++; + } +} + + +/* + * Color conversion for grayscale: just copy the data. + * This also works for YCbCr -> grayscale conversion, in which + * we just copy the Y (luminance) component and ignore chrominance. + */ + +METHODDEF(void) +grayscale_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0, + num_rows, cinfo->output_width); +} + + +/* + * Convert grayscale to RGB: just duplicate the graylevel three times. + * This is provided to support applications that don't want to cope + * with grayscale as a separate case. + */ + +METHODDEF(void) +gray_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW inptr, outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr = input_buf[0][input_row++]; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + /* We can dispense with GETJSAMPLE() here */ + outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; + outptr += RGB_PIXELSIZE; + } + } +} + + +/* + * Adobe-style YCCK->CMYK conversion. + * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same + * conversion as above, while passing K (black) unchanged. + * We assume build_ycc_rgb_table has been called. + */ + +METHODDEF(void) +ycck_cmyk_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2, inptr3; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + SHIFT_TEMPS + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + inptr3 = input_buf[3][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + y = GETJSAMPLE(inptr0[col]); + cb = GETJSAMPLE(inptr1[col]); + cr = GETJSAMPLE(inptr2[col]); + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ + outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + SCALEBITS)))]; + outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */ + /* K passes through unchanged */ + outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ + outptr += 4; + } + } +} + + +/* + * Empty method for start_pass. + */ + +METHODDEF(void) +start_pass_dcolor (j_decompress_ptr cinfo) +{ + /* no work needed */ +} + + +/* + * Module initialization routine for output colorspace conversion. + */ + +GLOBAL(void) +jinit_color_deconverter (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert; + int ci; + + cconvert = (my_cconvert_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_color_deconverter)); + cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + cconvert->pub.start_pass = start_pass_dcolor; + + /* Make sure num_components agrees with jpeg_color_space */ + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + if (cinfo->num_components != 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + case JCS_RGB: + case JCS_YCbCr: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + case JCS_CMYK: + case JCS_YCCK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + default: /* JCS_UNKNOWN can be anything */ + if (cinfo->num_components < 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + } + + /* Set out_color_components and conversion method based on requested space. + * Also clear the component_needed flags for any unused components, + * so that earlier pipeline stages can avoid useless computation. + */ + + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + if (cinfo->jpeg_color_space == JCS_GRAYSCALE || + cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = grayscale_convert; + /* For color->grayscale conversion, only the Y (0) component is needed */ + for (ci = 1; ci < cinfo->num_components; ci++) + cinfo->comp_info[ci].component_needed = FALSE; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_RGB: + cinfo->out_color_components = RGB_PIXELSIZE; + if (cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = ycc_rgb_convert; + build_ycc_rgb_table(cinfo); + } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { + cconvert->pub.color_convert = gray_rgb_convert; + } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { + cconvert->pub.color_convert = null_convert; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_CMYK: + cinfo->out_color_components = 4; + if (cinfo->jpeg_color_space == JCS_YCCK) { + cconvert->pub.color_convert = ycck_cmyk_convert; + build_ycc_rgb_table(cinfo); + } else if (cinfo->jpeg_color_space == JCS_CMYK) { + cconvert->pub.color_convert = null_convert; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + default: + /* Permit null conversion to same output space */ + if (cinfo->out_color_space == cinfo->jpeg_color_space) { + cinfo->out_color_components = cinfo->num_components; + cconvert->pub.color_convert = null_convert; + } else /* unsupported non-null conversion */ + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + + if (cinfo->quantize_colors) + cinfo->output_components = 1; /* single colormapped output component */ + else + cinfo->output_components = cinfo->out_color_components; +} diff --git a/3rdparty/openctm/tools/jpeg/jdct.h b/3rdparty/openctm/tools/jpeg/jdct.h new file mode 100644 index 000000000..b1ff91250 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdct.h @@ -0,0 +1,393 @@ +/* + * jdct.h + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This include file contains common declarations for the forward and + * inverse DCT modules. These declarations are private to the DCT managers + * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms. + * The individual DCT algorithms are kept in separate files to ease + * machine-dependent tuning (e.g., assembly coding). + */ + + +/* + * A forward DCT routine is given a pointer to an input sample array and + * a pointer to a work area of type DCTELEM[]; the DCT is to be performed + * in-place in that buffer. Type DCTELEM is int for 8-bit samples, INT32 + * for 12-bit samples. (NOTE: Floating-point DCT implementations use an + * array of type FAST_FLOAT, instead.) + * The input data is to be fetched from the sample array starting at a + * specified column. (Any row offset needed will be applied to the array + * pointer before it is passed to the FDCT code.) + * Note that the number of samples fetched by the FDCT routine is + * DCT_h_scaled_size * DCT_v_scaled_size. + * The DCT outputs are returned scaled up by a factor of 8; they therefore + * have a range of +-8K for 8-bit data, +-128K for 12-bit data. This + * convention improves accuracy in integer implementations and saves some + * work in floating-point ones. + * Quantization of the output coefficients is done by jcdctmgr.c. + */ + +#if BITS_IN_JSAMPLE == 8 +typedef int DCTELEM; /* 16 or 32 bits is fine */ +#else +typedef INT32 DCTELEM; /* must have 32 bits */ +#endif + +typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data, + JSAMPARRAY sample_data, + JDIMENSION start_col)); +typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data, + JSAMPARRAY sample_data, + JDIMENSION start_col)); + + +/* + * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer + * to an output sample array. The routine must dequantize the input data as + * well as perform the IDCT; for dequantization, it uses the multiplier table + * pointed to by compptr->dct_table. The output data is to be placed into the + * sample array starting at a specified column. (Any row offset needed will + * be applied to the array pointer before it is passed to the IDCT code.) + * Note that the number of samples emitted by the IDCT routine is + * DCT_h_scaled_size * DCT_v_scaled_size. + */ + +/* typedef inverse_DCT_method_ptr is declared in jpegint.h */ + +/* + * Each IDCT routine has its own ideas about the best dct_table element type. + */ + +typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */ +#if BITS_IN_JSAMPLE == 8 +typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ +#define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ +#else +typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ +#define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ +#endif +typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ + + +/* + * Each IDCT routine is responsible for range-limiting its results and + * converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could + * be quite far out of range if the input data is corrupt, so a bulletproof + * range-limiting step is required. We use a mask-and-table-lookup method + * to do the combined operations quickly. See the comments with + * prepare_range_limit_table (in jdmaster.c) for more info. + */ + +#define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE) + +#define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_fdct_islow jFDislow +#define jpeg_fdct_ifast jFDifast +#define jpeg_fdct_float jFDfloat +#define jpeg_fdct_7x7 jFD7x7 +#define jpeg_fdct_6x6 jFD6x6 +#define jpeg_fdct_5x5 jFD5x5 +#define jpeg_fdct_4x4 jFD4x4 +#define jpeg_fdct_3x3 jFD3x3 +#define jpeg_fdct_2x2 jFD2x2 +#define jpeg_fdct_1x1 jFD1x1 +#define jpeg_fdct_9x9 jFD9x9 +#define jpeg_fdct_10x10 jFD10x10 +#define jpeg_fdct_11x11 jFD11x11 +#define jpeg_fdct_12x12 jFD12x12 +#define jpeg_fdct_13x13 jFD13x13 +#define jpeg_fdct_14x14 jFD14x14 +#define jpeg_fdct_15x15 jFD15x15 +#define jpeg_fdct_16x16 jFD16x16 +#define jpeg_fdct_16x8 jFD16x8 +#define jpeg_fdct_14x7 jFD14x7 +#define jpeg_fdct_12x6 jFD12x6 +#define jpeg_fdct_10x5 jFD10x5 +#define jpeg_fdct_8x4 jFD8x4 +#define jpeg_fdct_6x3 jFD6x3 +#define jpeg_fdct_4x2 jFD4x2 +#define jpeg_fdct_2x1 jFD2x1 +#define jpeg_fdct_8x16 jFD8x16 +#define jpeg_fdct_7x14 jFD7x14 +#define jpeg_fdct_6x12 jFD6x12 +#define jpeg_fdct_5x10 jFD5x10 +#define jpeg_fdct_4x8 jFD4x8 +#define jpeg_fdct_3x6 jFD3x6 +#define jpeg_fdct_2x4 jFD2x4 +#define jpeg_fdct_1x2 jFD1x2 +#define jpeg_idct_islow jRDislow +#define jpeg_idct_ifast jRDifast +#define jpeg_idct_float jRDfloat +#define jpeg_idct_7x7 jRD7x7 +#define jpeg_idct_6x6 jRD6x6 +#define jpeg_idct_5x5 jRD5x5 +#define jpeg_idct_4x4 jRD4x4 +#define jpeg_idct_3x3 jRD3x3 +#define jpeg_idct_2x2 jRD2x2 +#define jpeg_idct_1x1 jRD1x1 +#define jpeg_idct_9x9 jRD9x9 +#define jpeg_idct_10x10 jRD10x10 +#define jpeg_idct_11x11 jRD11x11 +#define jpeg_idct_12x12 jRD12x12 +#define jpeg_idct_13x13 jRD13x13 +#define jpeg_idct_14x14 jRD14x14 +#define jpeg_idct_15x15 jRD15x15 +#define jpeg_idct_16x16 jRD16x16 +#define jpeg_idct_16x8 jRD16x8 +#define jpeg_idct_14x7 jRD14x7 +#define jpeg_idct_12x6 jRD12x6 +#define jpeg_idct_10x5 jRD10x5 +#define jpeg_idct_8x4 jRD8x4 +#define jpeg_idct_6x3 jRD6x3 +#define jpeg_idct_4x2 jRD4x2 +#define jpeg_idct_2x1 jRD2x1 +#define jpeg_idct_8x16 jRD8x16 +#define jpeg_idct_7x14 jRD7x14 +#define jpeg_idct_6x12 jRD6x12 +#define jpeg_idct_5x10 jRD5x10 +#define jpeg_idct_4x8 jRD4x8 +#define jpeg_idct_3x6 jRD3x8 +#define jpeg_idct_2x4 jRD2x4 +#define jpeg_idct_1x2 jRD1x2 +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + +/* Extern declarations for the forward and inverse DCT routines. */ + +EXTERN(void) jpeg_fdct_islow + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_ifast + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_float + JPP((FAST_FLOAT * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_7x7 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_6x6 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_5x5 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_4x4 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_3x3 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_2x2 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_1x1 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_9x9 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_10x10 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_11x11 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_12x12 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_13x13 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_14x14 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_15x15 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_16x16 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_16x8 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_14x7 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_12x6 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_10x5 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_8x4 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_6x3 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_4x2 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_2x1 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_8x16 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_7x14 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_6x12 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_5x10 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_4x8 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_3x6 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_2x4 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); +EXTERN(void) jpeg_fdct_1x2 + JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)); + +EXTERN(void) jpeg_idct_islow + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_ifast + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_float + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_7x7 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_6x6 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_5x5 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_4x4 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_3x3 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_2x2 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_1x1 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_9x9 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_10x10 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_11x11 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_12x12 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_13x13 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_14x14 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_15x15 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_16x16 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_16x8 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_14x7 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_12x6 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_10x5 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_8x4 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_6x3 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_4x2 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_2x1 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_8x16 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_7x14 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_6x12 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_5x10 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_4x8 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_3x6 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_2x4 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_1x2 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); + + +/* + * Macros for handling fixed-point arithmetic; these are used by many + * but not all of the DCT/IDCT modules. + * + * All values are expected to be of type INT32. + * Fractional constants are scaled left by CONST_BITS bits. + * CONST_BITS is defined within each module using these macros, + * and may differ from one module to the next. + */ + +#define ONE ((INT32) 1) +#define CONST_SCALE (ONE << CONST_BITS) + +/* Convert a positive real constant to an integer scaled by CONST_SCALE. + * Caution: some C compilers fail to reduce "FIX(constant)" at compile time, + * thus causing a lot of useless floating-point operations at run time. + */ + +#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) + +/* Descale and correctly round an INT32 value that's scaled by N bits. + * We assume RIGHT_SHIFT rounds towards minus infinity, so adding + * the fudge factor is correct for either sign of X. + */ + +#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * This macro is used only when the two inputs will actually be no more than + * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a + * full 32x32 multiply. This provides a useful speedup on many machines. + * Unfortunately there is no way to specify a 16x16->32 multiply portably + * in C, but some C compilers will do the right thing if you provide the + * correct combination of casts. + */ + +#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ +#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) +#endif +#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ +#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) +#endif + +#ifndef MULTIPLY16C16 /* default definition */ +#define MULTIPLY16C16(var,const) ((var) * (const)) +#endif + +/* Same except both inputs are variables. */ + +#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ +#define MULTIPLY16V16(var1,var2) (((INT16) (var1)) * ((INT16) (var2))) +#endif + +#ifndef MULTIPLY16V16 /* default definition */ +#define MULTIPLY16V16(var1,var2) ((var1) * (var2)) +#endif diff --git a/3rdparty/openctm/tools/jpeg/jddctmgr.c b/3rdparty/openctm/tools/jpeg/jddctmgr.c new file mode 100644 index 000000000..07cb06f4f --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jddctmgr.c @@ -0,0 +1,382 @@ +/* + * jddctmgr.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the inverse-DCT management logic. + * This code selects a particular IDCT implementation to be used, + * and it performs related housekeeping chores. No code in this file + * is executed per IDCT step, only during output pass setup. + * + * Note that the IDCT routines are responsible for performing coefficient + * dequantization as well as the IDCT proper. This module sets up the + * dequantization multiplier table needed by the IDCT routine. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + + +/* + * The decompressor input side (jdinput.c) saves away the appropriate + * quantization table for each component at the start of the first scan + * involving that component. (This is necessary in order to correctly + * decode files that reuse Q-table slots.) + * When we are ready to make an output pass, the saved Q-table is converted + * to a multiplier table that will actually be used by the IDCT routine. + * The multiplier table contents are IDCT-method-dependent. To support + * application changes in IDCT method between scans, we can remake the + * multiplier tables if necessary. + * In buffered-image mode, the first output pass may occur before any data + * has been seen for some components, and thus before their Q-tables have + * been saved away. To handle this case, multiplier tables are preset + * to zeroes; the result of the IDCT will be a neutral gray level. + */ + + +/* Private subobject for this module */ + +typedef struct { + struct jpeg_inverse_dct pub; /* public fields */ + + /* This array contains the IDCT method code that each multiplier table + * is currently set up for, or -1 if it's not yet set up. + * The actual multiplier tables are pointed to by dct_table in the + * per-component comp_info structures. + */ + int cur_method[MAX_COMPONENTS]; +} my_idct_controller; + +typedef my_idct_controller * my_idct_ptr; + + +/* Allocated multiplier tables: big enough for any supported variant */ + +typedef union { + ISLOW_MULT_TYPE islow_array[DCTSIZE2]; +#ifdef DCT_IFAST_SUPPORTED + IFAST_MULT_TYPE ifast_array[DCTSIZE2]; +#endif +#ifdef DCT_FLOAT_SUPPORTED + FLOAT_MULT_TYPE float_array[DCTSIZE2]; +#endif +} multiplier_table; + + +/* The current scaled-IDCT routines require ISLOW-style multiplier tables, + * so be sure to compile that code if either ISLOW or SCALING is requested. + */ +#ifdef DCT_ISLOW_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#else +#ifdef IDCT_SCALING_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#endif +#endif + + +/* + * Prepare for an output pass. + * Here we select the proper IDCT routine for each component and build + * a matching multiplier table. + */ + +METHODDEF(void) +start_pass (j_decompress_ptr cinfo) +{ + my_idct_ptr idct = (my_idct_ptr) cinfo->idct; + int ci, i; + jpeg_component_info *compptr; + int method = 0; + inverse_DCT_method_ptr method_ptr = NULL; + JQUANT_TBL * qtbl; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Select the proper IDCT routine for this component's scaling */ + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { +#ifdef IDCT_SCALING_SUPPORTED + case ((1 << 8) + 1): + method_ptr = jpeg_idct_1x1; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((2 << 8) + 2): + method_ptr = jpeg_idct_2x2; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((3 << 8) + 3): + method_ptr = jpeg_idct_3x3; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((4 << 8) + 4): + method_ptr = jpeg_idct_4x4; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((5 << 8) + 5): + method_ptr = jpeg_idct_5x5; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((6 << 8) + 6): + method_ptr = jpeg_idct_6x6; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((7 << 8) + 7): + method_ptr = jpeg_idct_7x7; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((9 << 8) + 9): + method_ptr = jpeg_idct_9x9; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((10 << 8) + 10): + method_ptr = jpeg_idct_10x10; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((11 << 8) + 11): + method_ptr = jpeg_idct_11x11; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((12 << 8) + 12): + method_ptr = jpeg_idct_12x12; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((13 << 8) + 13): + method_ptr = jpeg_idct_13x13; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((14 << 8) + 14): + method_ptr = jpeg_idct_14x14; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((15 << 8) + 15): + method_ptr = jpeg_idct_15x15; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((16 << 8) + 16): + method_ptr = jpeg_idct_16x16; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((16 << 8) + 8): + method_ptr = jpeg_idct_16x8; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((14 << 8) + 7): + method_ptr = jpeg_idct_14x7; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((12 << 8) + 6): + method_ptr = jpeg_idct_12x6; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((10 << 8) + 5): + method_ptr = jpeg_idct_10x5; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((8 << 8) + 4): + method_ptr = jpeg_idct_8x4; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((6 << 8) + 3): + method_ptr = jpeg_idct_6x3; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((4 << 8) + 2): + method_ptr = jpeg_idct_4x2; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((2 << 8) + 1): + method_ptr = jpeg_idct_2x1; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((8 << 8) + 16): + method_ptr = jpeg_idct_8x16; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((7 << 8) + 14): + method_ptr = jpeg_idct_7x14; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((6 << 8) + 12): + method_ptr = jpeg_idct_6x12; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((5 << 8) + 10): + method_ptr = jpeg_idct_5x10; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((4 << 8) + 8): + method_ptr = jpeg_idct_4x8; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((3 << 8) + 6): + method_ptr = jpeg_idct_3x6; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((2 << 8) + 4): + method_ptr = jpeg_idct_2x4; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case ((1 << 8) + 2): + method_ptr = jpeg_idct_1x2; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; +#endif + case ((DCTSIZE << 8) + DCTSIZE): + switch (cinfo->dct_method) { +#ifdef DCT_ISLOW_SUPPORTED + case JDCT_ISLOW: + method_ptr = jpeg_idct_islow; + method = JDCT_ISLOW; + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + method_ptr = jpeg_idct_ifast; + method = JDCT_IFAST; + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + method_ptr = jpeg_idct_float; + method = JDCT_FLOAT; + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + break; + default: + ERREXIT2(cinfo, JERR_BAD_DCTSIZE, + compptr->DCT_h_scaled_size, compptr->DCT_v_scaled_size); + break; + } + idct->pub.inverse_DCT[ci] = method_ptr; + /* Create multiplier table from quant table. + * However, we can skip this if the component is uninteresting + * or if we already built the table. Also, if no quant table + * has yet been saved for the component, we leave the + * multiplier table all-zero; we'll be reading zeroes from the + * coefficient controller's buffer anyway. + */ + if (! compptr->component_needed || idct->cur_method[ci] == method) + continue; + qtbl = compptr->quant_table; + if (qtbl == NULL) /* happens if no data yet for component */ + continue; + idct->cur_method[ci] = method; + switch (method) { +#ifdef PROVIDE_ISLOW_TABLES + case JDCT_ISLOW: + { + /* For LL&M IDCT method, multipliers are equal to raw quantization + * coefficients, but are stored as ints to ensure access efficiency. + */ + ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; + for (i = 0; i < DCTSIZE2; i++) { + ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; + } + } + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + { + /* For AA&N IDCT method, multipliers are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * For integer operation, the multiplier table is to be scaled by + * IFAST_SCALE_BITS. + */ + IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; +#define CONST_BITS 14 + static const INT16 aanscales[DCTSIZE2] = { + /* precomputed values scaled up by 14 bits */ + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, + 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, + 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, + 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, + 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 + }; + SHIFT_TEMPS + + for (i = 0; i < DCTSIZE2; i++) { + ifmtbl[i] = (IFAST_MULT_TYPE) + DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], + (INT32) aanscales[i]), + CONST_BITS-IFAST_SCALE_BITS); + } + } + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + { + /* For float AA&N IDCT method, multipliers are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + */ + FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; + int row, col; + static const double aanscalefactor[DCTSIZE] = { + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + }; + + i = 0; + for (row = 0; row < DCTSIZE; row++) { + for (col = 0; col < DCTSIZE; col++) { + fmtbl[i] = (FLOAT_MULT_TYPE) + ((double) qtbl->quantval[i] * + aanscalefactor[row] * aanscalefactor[col]); + i++; + } + } + } + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + } +} + + +/* + * Initialize IDCT manager. + */ + +GLOBAL(void) +jinit_inverse_dct (j_decompress_ptr cinfo) +{ + my_idct_ptr idct; + int ci; + jpeg_component_info *compptr; + + idct = (my_idct_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_idct_controller)); + cinfo->idct = (struct jpeg_inverse_dct *) idct; + idct->pub.start_pass = start_pass; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Allocate and pre-zero a multiplier table for each component */ + compptr->dct_table = + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(multiplier_table)); + MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); + /* Mark multiplier table not yet set up for any method */ + idct->cur_method[ci] = -1; + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdhuff.c b/3rdparty/openctm/tools/jpeg/jdhuff.c new file mode 100644 index 000000000..bad2bc1aa --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdhuff.c @@ -0,0 +1,1309 @@ +/* + * jdhuff.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2006-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy decoding routines. + * Both sequential and progressive modes are supported in this single module. + * + * Much of the complexity here has to do with supporting input suspension. + * If the data source module demands suspension, we want to be able to back + * up to the start of the current MCU. To do this, we copy state variables + * into local working storage, and update them back to the permanent + * storage only upon successful completion of an MCU. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Derived data constructed for each Huffman table */ + +#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */ + +typedef struct { + /* Basic tables: (element [0] of each array is unused) */ + INT32 maxcode[18]; /* largest code of length k (-1 if none) */ + /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */ + INT32 valoffset[17]; /* huffval[] offset for codes of length k */ + /* valoffset[k] = huffval[] index of 1st symbol of code length k, less + * the smallest code of length k; so given a code of length k, the + * corresponding symbol is huffval[code + valoffset[k]] + */ + + /* Link to public Huffman table (needed only in jpeg_huff_decode) */ + JHUFF_TBL *pub; + + /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of + * the input data stream. If the next Huffman code is no more + * than HUFF_LOOKAHEAD bits long, we can obtain its length and + * the corresponding symbol directly from these tables. + */ + int look_nbits[1< 32 bits on your machine, and shifting/masking longs is + * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE + * appropriately should be a win. Unfortunately we can't define the size + * with something like #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8) + * because not all machines measure sizeof in 8-bit bytes. + */ + +typedef struct { /* Bitreading state saved across MCUs */ + bit_buf_type get_buffer; /* current bit-extraction buffer */ + int bits_left; /* # of unused bits in it */ +} bitread_perm_state; + +typedef struct { /* Bitreading working state within an MCU */ + /* Current data source location */ + /* We need a copy, rather than munging the original, in case of suspension */ + const JOCTET * next_input_byte; /* => next byte to read from source */ + size_t bytes_in_buffer; /* # of bytes remaining in source buffer */ + /* Bit input buffer --- note these values are kept in register variables, + * not in this struct, inside the inner loops. + */ + bit_buf_type get_buffer; /* current bit-extraction buffer */ + int bits_left; /* # of unused bits in it */ + /* Pointer needed by jpeg_fill_bit_buffer. */ + j_decompress_ptr cinfo; /* back link to decompress master record */ +} bitread_working_state; + +/* Macros to declare and load/save bitread local variables. */ +#define BITREAD_STATE_VARS \ + register bit_buf_type get_buffer; \ + register int bits_left; \ + bitread_working_state br_state + +#define BITREAD_LOAD_STATE(cinfop,permstate) \ + br_state.cinfo = cinfop; \ + br_state.next_input_byte = cinfop->src->next_input_byte; \ + br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \ + get_buffer = permstate.get_buffer; \ + bits_left = permstate.bits_left; + +#define BITREAD_SAVE_STATE(cinfop,permstate) \ + cinfop->src->next_input_byte = br_state.next_input_byte; \ + cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \ + permstate.get_buffer = get_buffer; \ + permstate.bits_left = bits_left + +/* + * These macros provide the in-line portion of bit fetching. + * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer + * before using GET_BITS, PEEK_BITS, or DROP_BITS. + * The variables get_buffer and bits_left are assumed to be locals, + * but the state struct might not be (jpeg_huff_decode needs this). + * CHECK_BIT_BUFFER(state,n,action); + * Ensure there are N bits in get_buffer; if suspend, take action. + * val = GET_BITS(n); + * Fetch next N bits. + * val = PEEK_BITS(n); + * Fetch next N bits without removing them from the buffer. + * DROP_BITS(n); + * Discard next N bits. + * The value N should be a simple variable, not an expression, because it + * is evaluated multiple times. + */ + +#define CHECK_BIT_BUFFER(state,nbits,action) \ + { if (bits_left < (nbits)) { \ + if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \ + { action; } \ + get_buffer = (state).get_buffer; bits_left = (state).bits_left; } } + +#define GET_BITS(nbits) \ + (((int) (get_buffer >> (bits_left -= (nbits)))) & BIT_MASK(nbits)) + +#define PEEK_BITS(nbits) \ + (((int) (get_buffer >> (bits_left - (nbits)))) & BIT_MASK(nbits)) + +#define DROP_BITS(nbits) \ + (bits_left -= (nbits)) + + +/* + * Code for extracting next Huffman-coded symbol from input bit stream. + * Again, this is time-critical and we make the main paths be macros. + * + * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits + * without looping. Usually, more than 95% of the Huffman codes will be 8 + * or fewer bits long. The few overlength codes are handled with a loop, + * which need not be inline code. + * + * Notes about the HUFF_DECODE macro: + * 1. Near the end of the data segment, we may fail to get enough bits + * for a lookahead. In that case, we do it the hard way. + * 2. If the lookahead table contains no entry, the next code must be + * more than HUFF_LOOKAHEAD bits long. + * 3. jpeg_huff_decode returns -1 if forced to suspend. + */ + +#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \ +{ register int nb, look; \ + if (bits_left < HUFF_LOOKAHEAD) { \ + if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \ + get_buffer = state.get_buffer; bits_left = state.bits_left; \ + if (bits_left < HUFF_LOOKAHEAD) { \ + nb = 1; goto slowlabel; \ + } \ + } \ + look = PEEK_BITS(HUFF_LOOKAHEAD); \ + if ((nb = htbl->look_nbits[look]) != 0) { \ + DROP_BITS(nb); \ + result = htbl->look_sym[look]; \ + } else { \ + nb = HUFF_LOOKAHEAD+1; \ +slowlabel: \ + if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \ + { failaction; } \ + get_buffer = state.get_buffer; bits_left = state.bits_left; \ + } \ +} + + +/* + * Expanded entropy decoder object for Huffman decoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + unsigned int EOBRUN; /* remaining EOBs in EOBRUN */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).EOBRUN = (src).EOBRUN, \ + (dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_decoder pub; /* public fields */ + + /* These fields are loaded into local variables at start of each MCU. + * In case of suspension, we exit WITHOUT updating them. + */ + bitread_perm_state bitstate; /* Bit buffer at start of MCU */ + savable_state saved; /* Other state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + + /* Following two fields used only in progressive mode */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + d_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; + + d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */ + + /* Following fields used only in sequential mode */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; + d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; + + /* Precalculated info set up by start_pass for use in decode_mcu: */ + + /* Pointers to derived tables to be used for each block within an MCU */ + d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU]; + d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU]; + /* Whether we care about the DC and AC coefficient values for each block */ + int coef_limit[D_MAX_BLOCKS_IN_MCU]; +} huff_entropy_decoder; + +typedef huff_entropy_decoder * huff_entropy_ptr; + + +static const int jpeg_zigzag_order[8][8] = { + { 0, 1, 5, 6, 14, 15, 27, 28 }, + { 2, 4, 7, 13, 16, 26, 29, 42 }, + { 3, 8, 12, 17, 25, 30, 41, 43 }, + { 9, 11, 18, 24, 31, 40, 44, 53 }, + { 10, 19, 23, 32, 39, 45, 52, 54 }, + { 20, 22, 33, 38, 46, 51, 55, 60 }, + { 21, 34, 37, 47, 50, 56, 59, 61 }, + { 35, 36, 48, 49, 57, 58, 62, 63 } +}; + + +/* + * Compute the derived values for a Huffman table. + * This routine also performs some validation checks on the table. + */ + +LOCAL(void) +jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno, + d_derived_tbl ** pdtbl) +{ + JHUFF_TBL *htbl; + d_derived_tbl *dtbl; + int p, i, l, si, numsymbols; + int lookbits, ctr; + char huffsize[257]; + unsigned int huffcode[257]; + unsigned int code; + + /* Note that huffsize[] and huffcode[] are filled in code-length order, + * paralleling the order of the symbols themselves in htbl->huffval[]. + */ + + /* Find the input Huffman table */ + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + htbl = + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + + /* Allocate a workspace if we haven't already done so. */ + if (*pdtbl == NULL) + *pdtbl = (d_derived_tbl *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(d_derived_tbl)); + dtbl = *pdtbl; + dtbl->pub = htbl; /* fill in back link */ + + /* Figure C.1: make table of Huffman code length for each symbol */ + + p = 0; + for (l = 1; l <= 16; l++) { + i = (int) htbl->bits[l]; + if (i < 0 || p + i > 256) /* protect against table overrun */ + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + while (i--) + huffsize[p++] = (char) l; + } + huffsize[p] = 0; + numsymbols = p; + + /* Figure C.2: generate the codes themselves */ + /* We also validate that the counts represent a legal Huffman code tree. */ + + code = 0; + si = huffsize[0]; + p = 0; + while (huffsize[p]) { + while (((int) huffsize[p]) == si) { + huffcode[p++] = code; + code++; + } + /* code is now 1 more than the last code used for codelength si; but + * it must still fit in si bits, since no code is allowed to be all ones. + */ + if (((INT32) code) >= (((INT32) 1) << si)) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + code <<= 1; + si++; + } + + /* Figure F.15: generate decoding tables for bit-sequential decoding */ + + p = 0; + for (l = 1; l <= 16; l++) { + if (htbl->bits[l]) { + /* valoffset[l] = huffval[] index of 1st symbol of code length l, + * minus the minimum code of length l + */ + dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; + p += htbl->bits[l]; + dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ + } else { + dtbl->maxcode[l] = -1; /* -1 if no codes of this length */ + } + } + dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ + + /* Compute lookahead tables to speed up decoding. + * First we set all the table entries to 0, indicating "too long"; + * then we iterate through the Huffman codes that are short enough and + * fill in all the entries that correspond to bit sequences starting + * with that code. + */ + + MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); + + p = 0; + for (l = 1; l <= HUFF_LOOKAHEAD; l++) { + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + /* l = current code's length, p = its index in huffcode[] & huffval[]. */ + /* Generate left-justified code followed by all possible bit sequences */ + lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + dtbl->look_nbits[lookbits] = l; + dtbl->look_sym[lookbits] = htbl->huffval[p]; + lookbits++; + } + } + } + + /* Validate symbols as being reasonable. + * For AC tables, we make no check, but accept all byte values 0..255. + * For DC tables, we require the symbols to be in range 0..15. + * (Tighter bounds could be applied depending on the data depth and mode, + * but this is sufficient to ensure safe decoding.) + */ + if (isDC) { + for (i = 0; i < numsymbols; i++) { + int sym = htbl->huffval[i]; + if (sym < 0 || sym > 15) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + } + } +} + + +/* + * Out-of-line code for bit fetching. + * Note: current values of get_buffer and bits_left are passed as parameters, + * but are returned in the corresponding fields of the state struct. + * + * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width + * of get_buffer to be used. (On machines with wider words, an even larger + * buffer could be used.) However, on some machines 32-bit shifts are + * quite slow and take time proportional to the number of places shifted. + * (This is true with most PC compilers, for instance.) In this case it may + * be a win to set MIN_GET_BITS to the minimum value of 15. This reduces the + * average shift distance at the cost of more calls to jpeg_fill_bit_buffer. + */ + +#ifdef SLOW_SHIFT_32 +#define MIN_GET_BITS 15 /* minimum allowable value */ +#else +#define MIN_GET_BITS (BIT_BUF_SIZE-7) +#endif + + +LOCAL(boolean) +jpeg_fill_bit_buffer (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + int nbits) +/* Load up the bit buffer to a depth of at least nbits */ +{ + /* Copy heavily used state fields into locals (hopefully registers) */ + register const JOCTET * next_input_byte = state->next_input_byte; + register size_t bytes_in_buffer = state->bytes_in_buffer; + j_decompress_ptr cinfo = state->cinfo; + + /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */ + /* (It is assumed that no request will be for more than that many bits.) */ + /* We fail to do so only if we hit a marker or are forced to suspend. */ + + if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ + while (bits_left < MIN_GET_BITS) { + register int c; + + /* Attempt to read a byte */ + if (bytes_in_buffer == 0) { + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + return FALSE; + next_input_byte = cinfo->src->next_input_byte; + bytes_in_buffer = cinfo->src->bytes_in_buffer; + } + bytes_in_buffer--; + c = GETJOCTET(*next_input_byte++); + + /* If it's 0xFF, check and discard stuffed zero byte */ + if (c == 0xFF) { + /* Loop here to discard any padding FF's on terminating marker, + * so that we can save a valid unread_marker value. NOTE: we will + * accept multiple FF's followed by a 0 as meaning a single FF data + * byte. This data pattern is not valid according to the standard. + */ + do { + if (bytes_in_buffer == 0) { + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + return FALSE; + next_input_byte = cinfo->src->next_input_byte; + bytes_in_buffer = cinfo->src->bytes_in_buffer; + } + bytes_in_buffer--; + c = GETJOCTET(*next_input_byte++); + } while (c == 0xFF); + + if (c == 0) { + /* Found FF/00, which represents an FF data byte */ + c = 0xFF; + } else { + /* Oops, it's actually a marker indicating end of compressed data. + * Save the marker code for later use. + * Fine point: it might appear that we should save the marker into + * bitread working state, not straight into permanent state. But + * once we have hit a marker, we cannot need to suspend within the + * current MCU, because we will read no more bytes from the data + * source. So it is OK to update permanent state right away. + */ + cinfo->unread_marker = c; + /* See if we need to insert some fake zero bits. */ + goto no_more_bytes; + } + } + + /* OK, load c into get_buffer */ + get_buffer = (get_buffer << 8) | c; + bits_left += 8; + } /* end while */ + } else { + no_more_bytes: + /* We get here if we've read the marker that terminates the compressed + * data segment. There should be enough bits in the buffer register + * to satisfy the request; if so, no problem. + */ + if (nbits > bits_left) { + /* Uh-oh. Report corrupted data to user and stuff zeroes into + * the data stream, so that we can produce some kind of image. + * We use a nonvolatile flag to ensure that only one warning message + * appears per data segment. + */ + if (! cinfo->entropy->insufficient_data) { + WARNMS(cinfo, JWRN_HIT_MARKER); + cinfo->entropy->insufficient_data = TRUE; + } + /* Fill the buffer with zero bits */ + get_buffer <<= MIN_GET_BITS - bits_left; + bits_left = MIN_GET_BITS; + } + } + + /* Unload the local registers */ + state->next_input_byte = next_input_byte; + state->bytes_in_buffer = bytes_in_buffer; + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + return TRUE; +} + + +/* + * Figure F.12: extend sign bit. + * On some machines, a shift and sub will be faster than a table lookup. + */ + +#ifdef AVOID_TABLES + +#define BIT_MASK(nbits) ((1<<(nbits))-1) +#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) - ((1<<(s))-1) : (x)) + +#else + +#define BIT_MASK(nbits) bmask[nbits] +#define HUFF_EXTEND(x,s) ((x) <= bmask[(s) - 1] ? (x) - bmask[s] : (x)) + +static const int bmask[16] = /* bmask[n] is mask for n rightmost bits */ + { 0, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, + 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF }; + +#endif /* AVOID_TABLES */ + + +/* + * Out-of-line code for Huffman code decoding. + */ + +LOCAL(int) +jpeg_huff_decode (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + d_derived_tbl * htbl, int min_bits) +{ + register int l = min_bits; + register INT32 code; + + /* HUFF_DECODE has determined that the code is at least min_bits */ + /* bits long, so fetch that many bits in one swoop. */ + + CHECK_BIT_BUFFER(*state, l, return -1); + code = GET_BITS(l); + + /* Collect the rest of the Huffman code one bit at a time. */ + /* This is per Figure F.16 in the JPEG spec. */ + + while (code > htbl->maxcode[l]) { + code <<= 1; + CHECK_BIT_BUFFER(*state, 1, return -1); + code |= GET_BITS(1); + l++; + } + + /* Unload the local registers */ + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + /* With garbage input we may reach the sentinel value l = 17. */ + + if (l > 16) { + WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); + return 0; /* fake a zero as the safest result */ + } + + return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; +} + + +/* + * Check for a restart marker & resynchronize decoder. + * Returns FALSE if must suspend. + */ + +LOCAL(boolean) +process_restart (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + entropy->bitstate.bits_left = 0; + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + return FALSE; + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + /* Re-init EOB run count, too */ + entropy->saved.EOBRUN = 0; + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + + /* Reset out-of-data flag, unless read_restart_marker left us smack up + * against a marker. In that case we will end up treating the next data + * segment as empty, and we can avoid producing bogus output pixels by + * leaving the flag set. + */ + if (cinfo->unread_marker == 0) + entropy->pub.insufficient_data = FALSE; + + return TRUE; +} + + +/* + * Huffman MCU decoding. + * Each of these routines decodes and returns one MCU's worth of + * Huffman-compressed coefficients. + * The coefficients are reordered from zigzag order into natural array order, + * but are not dequantized. + * + * The i'th block of the MCU is stored into the block pointed to by + * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. + * (Wholesale zeroing is usually a little faster than retail...) + * + * We return FALSE if data source requested suspension. In that case no + * changes have been made to permanent state. (Exception: some output + * coefficients may already have been assigned. This is harmless for + * spectral selection, since we'll just re-assign them on the next call. + * Successive approximation AC refinement has to be more careful, however.) + */ + +/* + * MCU decoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int Al = cinfo->Al; + register int s, r; + int blkn, ci; + JBLOCKROW block; + BITREAD_STATE_VARS; + savable_state state; + d_derived_tbl * tbl; + jpeg_component_info * compptr; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(state, entropy->saved); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + tbl = entropy->derived_tbls[compptr->dc_tbl_no]; + + /* Decode a single block's worth of coefficients */ + + /* Section F.2.2.1: decode the DC coefficient difference */ + HUFF_DECODE(s, br_state, tbl, return FALSE, label1); + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + } + + /* Convert DC difference to actual value, update last_dc_val */ + s += state.last_dc_val[ci]; + state.last_dc_val[ci] = s; + /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */ + (*block)[0] = (JCOEF) (s << Al); + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int Se = cinfo->Se; + int Al = cinfo->Al; + register int s, k, r; + unsigned int EOBRUN; + JBLOCKROW block; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state. + * We can avoid loading/saving bitread state if in an EOB run. + */ + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + + /* There is always only one block per MCU */ + + if (EOBRUN > 0) /* if it's a band of zeroes... */ + EOBRUN--; /* ...process it now (we do nothing) */ + else { + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + block = MCU_data[0]; + tbl = entropy->ac_derived_tbl; + + for (k = cinfo->Ss; k <= Se; k++) { + HUFF_DECODE(s, br_state, tbl, return FALSE, label2); + r = s >> 4; + s &= 15; + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + /* Scale and output coefficient in natural (dezigzagged) order */ + (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al); + } else { + if (r == 15) { /* ZRL */ + k += 15; /* skip 15 zeroes in band */ + } else { /* EOBr, run length is 2^r + appended bits */ + EOBRUN = 1 << r; + if (r) { /* EOBr, r > 0 */ + CHECK_BIT_BUFFER(br_state, r, return FALSE); + r = GET_BITS(r); + EOBRUN += r; + } + EOBRUN--; /* this band is processed at this moment */ + break; /* force end-of-band */ + } + } + } + + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + } + + /* Completed MCU, so update state */ + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, although the spec + * is not very clear on the point. + */ + +METHODDEF(boolean) +decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + int blkn; + JBLOCKROW block; + BITREAD_STATE_VARS; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* Not worth the cycles to check insufficient_data here, + * since we will not change the data anyway if we read zeroes. + */ + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + + /* Encoded data is simply the next bit of the two's-complement DC value */ + CHECK_BIT_BUFFER(br_state, 1, return FALSE); + if (GET_BITS(1)) + (*block)[0] |= p1; + /* Note: since we use |=, repeating the assignment later is safe */ + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int Se = cinfo->Se; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + int m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + register int s, k, r; + unsigned int EOBRUN; + JBLOCKROW block; + JCOEFPTR thiscoef; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + int num_newnz; + int newnz_pos[DCTSIZE2]; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, don't modify the MCU. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + + /* There is always only one block per MCU */ + block = MCU_data[0]; + tbl = entropy->ac_derived_tbl; + + /* If we are forced to suspend, we must undo the assignments to any newly + * nonzero coefficients in the block, because otherwise we'd get confused + * next time about which coefficients were already nonzero. + * But we need not undo addition of bits to already-nonzero coefficients; + * instead, we can test the current bit to see if we already did it. + */ + num_newnz = 0; + + /* initialize coefficient loop counter to start of band */ + k = cinfo->Ss; + + if (EOBRUN == 0) { + for (; k <= Se; k++) { + HUFF_DECODE(s, br_state, tbl, goto undoit, label3); + r = s >> 4; + s &= 15; + if (s) { + if (s != 1) /* size of new coef should always be 1 */ + WARNMS(cinfo, JWRN_HUFF_BAD_CODE); + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) + s = p1; /* newly nonzero coef is positive */ + else + s = m1; /* newly nonzero coef is negative */ + } else { + if (r != 15) { + EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */ + if (r) { + CHECK_BIT_BUFFER(br_state, r, goto undoit); + r = GET_BITS(r); + EOBRUN += r; + } + break; /* rest of block is handled by EOB logic */ + } + /* note s = 0 for processing ZRL */ + } + /* Advance over already-nonzero coefs and r still-zero coefs, + * appending correction bits to the nonzeroes. A correction bit is 1 + * if the absolute value of the coefficient must be increased. + */ + do { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef != 0) { + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) { + if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ + if (*thiscoef >= 0) + *thiscoef += p1; + else + *thiscoef += m1; + } + } + } else { + if (--r < 0) + break; /* reached target zero coefficient */ + } + k++; + } while (k <= Se); + if (s) { + int pos = jpeg_natural_order[k]; + /* Output newly nonzero coefficient */ + (*block)[pos] = (JCOEF) s; + /* Remember its position in case we have to suspend */ + newnz_pos[num_newnz++] = pos; + } + } + } + + if (EOBRUN > 0) { + /* Scan any remaining coefficient positions after the end-of-band + * (the last newly nonzero coefficient, if any). Append a correction + * bit to each already-nonzero coefficient. A correction bit is 1 + * if the absolute value of the coefficient must be increased. + */ + for (; k <= Se; k++) { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef != 0) { + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) { + if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ + if (*thiscoef >= 0) + *thiscoef += p1; + else + *thiscoef += m1; + } + } + } + } + /* Count one block completed in EOB run */ + EOBRUN--; + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; + +undoit: + /* Re-zero any output coefficients that we made newly nonzero */ + while (num_newnz > 0) + (*block)[newnz_pos[--num_newnz]] = 0; + + return FALSE; +} + + +/* + * Decode one MCU's worth of Huffman-compressed coefficients. + */ + +METHODDEF(boolean) +decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int blkn; + BITREAD_STATE_VARS; + savable_state state; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(state, entropy->saved); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + JBLOCKROW block = MCU_data[blkn]; + d_derived_tbl * htbl; + register int s, k, r; + int coef_limit, ci; + + /* Decode a single block's worth of coefficients */ + + /* Section F.2.2.1: decode the DC coefficient difference */ + htbl = entropy->dc_cur_tbls[blkn]; + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + + htbl = entropy->ac_cur_tbls[blkn]; + k = 1; + coef_limit = entropy->coef_limit[blkn]; + if (coef_limit) { + /* Convert DC difference to actual value, update last_dc_val */ + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + } + ci = cinfo->MCU_membership[blkn]; + s += state.last_dc_val[ci]; + state.last_dc_val[ci] = s; + /* Output the DC coefficient */ + (*block)[0] = (JCOEF) s; + + /* Section F.2.2.2: decode the AC coefficients */ + /* Since zeroes are skipped, output area must be cleared beforehand */ + for (; k < coef_limit; k++) { + HUFF_DECODE(s, br_state, htbl, return FALSE, label2); + + r = s >> 4; + s &= 15; + + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + /* Output coefficient in natural (dezigzagged) order. + * Note: the extra entries in jpeg_natural_order[] will save us + * if k >= DCTSIZE2, which could happen if the data is corrupted. + */ + (*block)[jpeg_natural_order[k]] = (JCOEF) s; + } else { + if (r != 15) + goto EndOfBlock; + k += 15; + } + } + } else { + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + DROP_BITS(s); + } + } + + /* Section F.2.2.2: decode the AC coefficients */ + /* In this path we just discard the values */ + for (; k < DCTSIZE2; k++) { + HUFF_DECODE(s, br_state, htbl, return FALSE, label3); + + r = s >> 4; + s &= 15; + + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + DROP_BITS(s); + } else { + if (r != 15) + break; + k += 15; + } + } + + EndOfBlock: ; + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * Initialize for a Huffman-compressed scan. + */ + +METHODDEF(void) +start_pass_huff_decoder (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, blkn, dctbl, actbl, i; + jpeg_component_info * compptr; + + if (cinfo->progressive_mode) { + /* Validate progressive scan parameters */ + if (cinfo->Ss == 0) { + if (cinfo->Se != 0) + goto bad; + } else { + /* need not check Ss/Se < 0 since they came from unsigned bytes */ + if (cinfo->Se < cinfo->Ss || cinfo->Se >= DCTSIZE2) + goto bad; + /* AC scans may have only one component */ + if (cinfo->comps_in_scan != 1) + goto bad; + } + if (cinfo->Ah != 0) { + /* Successive approximation refinement scan: must have Al = Ah-1. */ + if (cinfo->Ah-1 != cinfo->Al) + goto bad; + } + if (cinfo->Al > 13) { /* need not check for < 0 */ + /* Arguably the maximum Al value should be less than 13 for 8-bit precision, + * but the spec doesn't say so, and we try to be liberal about what we + * accept. Note: large Al values could result in out-of-range DC + * coefficients during early scans, leading to bizarre displays due to + * overflows in the IDCT math. But we won't crash. + */ + bad: + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); + } + /* Update progression status, and verify that scan order is legal. + * Note that inter-scan inconsistencies are treated as warnings + * not fatal errors ... not clear if this is right way to behave. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + if (cinfo->Ah != expected) + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + coef_bit_ptr[coefi] = cinfo->Al; + } + } + + /* Select MCU decoding routine */ + if (cinfo->Ah == 0) { + if (cinfo->Ss == 0) + entropy->pub.decode_mcu = decode_mcu_DC_first; + else + entropy->pub.decode_mcu = decode_mcu_AC_first; + } else { + if (cinfo->Ss == 0) + entropy->pub.decode_mcu = decode_mcu_DC_refine; + else + entropy->pub.decode_mcu = decode_mcu_AC_refine; + } + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Make sure requested tables are present, and compute derived tables. + * We may build same derived table more than once, but it's not expensive. + */ + if (cinfo->Ss == 0) { + if (cinfo->Ah == 0) { /* DC refinement needs no table */ + i = compptr->dc_tbl_no; + jpeg_make_d_derived_tbl(cinfo, TRUE, i, + & entropy->derived_tbls[i]); + } + } else { + i = compptr->ac_tbl_no; + jpeg_make_d_derived_tbl(cinfo, FALSE, i, + & entropy->derived_tbls[i]); + /* remember the single active table */ + entropy->ac_derived_tbl = entropy->derived_tbls[i]; + } + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Initialize private state variables */ + entropy->saved.EOBRUN = 0; + } else { + /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. + * This ought to be an error condition, but we make it a warning because + * there are some baseline files out there with all zeroes in these bytes. + */ + if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 || + cinfo->Ah != 0 || cinfo->Al != 0) + WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); + + /* Select MCU decoding routine */ + entropy->pub.decode_mcu = decode_mcu; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + /* Compute derived values for Huffman tables */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl, + & entropy->dc_derived_tbls[dctbl]); + jpeg_make_d_derived_tbl(cinfo, FALSE, actbl, + & entropy->ac_derived_tbls[actbl]); + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Precalculate decoding info for each block in an MCU of this scan */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + /* Precalculate which table to use for each block */ + entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; + entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; + /* Decide whether we really care about the coefficient values */ + if (compptr->component_needed) { + ci = compptr->DCT_v_scaled_size; + if (ci <= 0 || ci > 8) ci = 8; + i = compptr->DCT_h_scaled_size; + if (i <= 0 || i > 8) i = 8; + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order[ci - 1][i - 1]; + } else { + entropy->coef_limit[blkn] = 0; + } + } + } + + /* Initialize bitread state variables */ + entropy->bitstate.bits_left = 0; + entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ + entropy->pub.insufficient_data = FALSE; + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Module initialization routine for Huffman entropy decoding. + */ + +GLOBAL(void) +jinit_huff_decoder (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy; + int i; + + entropy = (huff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(huff_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass_huff_decoder; + + if (cinfo->progressive_mode) { + /* Create progression status table */ + int *coef_bit_ptr, ci; + cinfo->coef_bits = (int (*)[DCTSIZE2]) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components*DCTSIZE2*SIZEOF(int)); + coef_bit_ptr = & cinfo->coef_bits[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + for (i = 0; i < DCTSIZE2; i++) + *coef_bit_ptr++ = -1; + + /* Mark derived tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->derived_tbls[i] = NULL; + } + } else { + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; + } + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdinput.c b/3rdparty/openctm/tools/jpeg/jdinput.c new file mode 100644 index 000000000..2621768d5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdinput.c @@ -0,0 +1,384 @@ +/* + * jdinput.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2002-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains input control logic for the JPEG decompressor. + * These routines are concerned with controlling the decompressor's input + * processing (marker reading and coefficient decoding). The actual input + * reading is done in jdmarker.c, jdhuff.c, and jdarith.c. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef struct { + struct jpeg_input_controller pub; /* public fields */ + + boolean inheaders; /* TRUE until first SOS is reached */ +} my_input_controller; + +typedef my_input_controller * my_inputctl_ptr; + + +/* Forward declarations */ +METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo)); + + +/* + * Routines to calculate various quantities related to the size of the image. + */ + +LOCAL(void) +initial_setup (j_decompress_ptr cinfo) +/* Called once, when first SOS marker is reached */ +{ + int ci; + jpeg_component_info *compptr; + + /* Make sure image isn't bigger than I can handle */ + if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || + (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); + + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + + /* Check that number of components won't exceed internal array sizes */ + if (cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + + /* Compute maximum sampling factors; check factor validity */ + cinfo->max_h_samp_factor = 1; + cinfo->max_v_samp_factor = 1; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || + compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) + ERREXIT(cinfo, JERR_BAD_SAMPLING); + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + compptr->h_samp_factor); + cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, + compptr->v_samp_factor); + } + + /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE. + * In the full decompressor, this will be overridden by jdmaster.c; + * but in the transcoder, jdmaster.c is not used, so we must do it here. + */ + cinfo->min_DCT_h_scaled_size = DCTSIZE; + cinfo->min_DCT_v_scaled_size = DCTSIZE; + + /* Compute dimensions of components */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->DCT_h_scaled_size = DCTSIZE; + compptr->DCT_v_scaled_size = DCTSIZE; + /* Size in DCT blocks */ + compptr->width_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->height_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + /* downsampled_width and downsampled_height will also be overridden by + * jdmaster.c if we are doing full decompression. The transcoder library + * doesn't use these values, but the calling application might. + */ + /* Size in samples */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) cinfo->max_h_samp_factor); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) cinfo->max_v_samp_factor); + /* Mark component needed, until color conversion says otherwise */ + compptr->component_needed = TRUE; + /* Mark no quantization table yet saved for component */ + compptr->quant_table = NULL; + } + + /* Compute number of fully interleaved MCU rows. */ + cinfo->total_iMCU_rows = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + /* Decide whether file contains multiple scans */ + if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) + cinfo->inputctl->has_multiple_scans = TRUE; + else + cinfo->inputctl->has_multiple_scans = FALSE; +} + + +LOCAL(void) +per_scan_setup (j_decompress_ptr cinfo) +/* Do computations that are needed before processing a JPEG scan */ +/* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */ +{ + int ci, mcublks, tmp; + jpeg_component_info *compptr; + + if (cinfo->comps_in_scan == 1) { + + /* Noninterleaved (single-component) scan */ + compptr = cinfo->cur_comp_info[0]; + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = compptr->width_in_blocks; + cinfo->MCU_rows_in_scan = compptr->height_in_blocks; + + /* For noninterleaved scan, always one block per MCU */ + compptr->MCU_width = 1; + compptr->MCU_height = 1; + compptr->MCU_blocks = 1; + compptr->MCU_sample_width = compptr->DCT_h_scaled_size; + compptr->last_col_width = 1; + /* For noninterleaved scans, it is convenient to define last_row_height + * as the number of block rows present in the last iMCU row. + */ + tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (tmp == 0) tmp = compptr->v_samp_factor; + compptr->last_row_height = tmp; + + /* Prepare array describing MCU composition */ + cinfo->blocks_in_MCU = 1; + cinfo->MCU_membership[0] = 0; + + } else { + + /* Interleaved (multi-component) scan */ + if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, + MAX_COMPS_IN_SCAN); + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, + (long) (cinfo->max_h_samp_factor*DCTSIZE)); + cinfo->MCU_rows_in_scan = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + cinfo->blocks_in_MCU = 0; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Sampling factors give # of blocks of component in each MCU */ + compptr->MCU_width = compptr->h_samp_factor; + compptr->MCU_height = compptr->v_samp_factor; + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size; + /* Figure number of non-dummy blocks in last MCU column & row */ + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + if (tmp == 0) tmp = compptr->MCU_width; + compptr->last_col_width = tmp; + tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); + if (tmp == 0) tmp = compptr->MCU_height; + compptr->last_row_height = tmp; + /* Prepare array describing MCU composition */ + mcublks = compptr->MCU_blocks; + if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU) + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + while (mcublks-- > 0) { + cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; + } + } + + } +} + + +/* + * Save away a copy of the Q-table referenced by each component present + * in the current scan, unless already saved during a prior scan. + * + * In a multiple-scan JPEG file, the encoder could assign different components + * the same Q-table slot number, but change table definitions between scans + * so that each component uses a different Q-table. (The IJG encoder is not + * currently capable of doing this, but other encoders might.) Since we want + * to be able to dequantize all the components at the end of the file, this + * means that we have to save away the table actually used for each component. + * We do this by copying the table at the start of the first scan containing + * the component. + * The JPEG spec prohibits the encoder from changing the contents of a Q-table + * slot between scans of a component using that slot. If the encoder does so + * anyway, this decoder will simply use the Q-table values that were current + * at the start of the first scan for the component. + * + * The decompressor output side looks only at the saved quant tables, + * not at the current Q-table slots. + */ + +LOCAL(void) +latch_quant_tables (j_decompress_ptr cinfo) +{ + int ci, qtblno; + jpeg_component_info *compptr; + JQUANT_TBL * qtbl; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* No work if we already saved Q-table for this component */ + if (compptr->quant_table != NULL) + continue; + /* Make sure specified quantization table is present */ + qtblno = compptr->quant_tbl_no; + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + cinfo->quant_tbl_ptrs[qtblno] == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + /* OK, save away the quantization table */ + qtbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(JQUANT_TBL)); + MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); + compptr->quant_table = qtbl; + } +} + + +/* + * Initialize the input modules to read a scan of compressed data. + * The first call to this is done by jdmaster.c after initializing + * the entire decompressor (during jpeg_start_decompress). + * Subsequent calls come from consume_markers, below. + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + per_scan_setup(cinfo); + latch_quant_tables(cinfo); + (*cinfo->entropy->start_pass) (cinfo); + (*cinfo->coef->start_input_pass) (cinfo); + cinfo->inputctl->consume_input = cinfo->coef->consume_data; +} + + +/* + * Finish up after inputting a compressed-data scan. + * This is called by the coefficient controller after it's read all + * the expected data of the scan. + */ + +METHODDEF(void) +finish_input_pass (j_decompress_ptr cinfo) +{ + cinfo->inputctl->consume_input = consume_markers; +} + + +/* + * Read JPEG markers before, between, or after compressed-data scans. + * Change state as necessary when a new scan is reached. + * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + * + * The consume_input method pointer points either here or to the + * coefficient controller's consume_data routine, depending on whether + * we are reading a compressed data segment or inter-segment markers. + */ + +METHODDEF(int) +consume_markers (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + int val; + + if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */ + return JPEG_REACHED_EOI; + + val = (*cinfo->marker->read_markers) (cinfo); + + switch (val) { + case JPEG_REACHED_SOS: /* Found SOS */ + if (inputctl->inheaders) { /* 1st SOS */ + initial_setup(cinfo); + inputctl->inheaders = FALSE; + /* Note: start_input_pass must be called by jdmaster.c + * before any more input can be consumed. jdapimin.c is + * responsible for enforcing this sequencing. + */ + } else { /* 2nd or later SOS marker */ + if (! inputctl->pub.has_multiple_scans) + ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */ + start_input_pass(cinfo); + } + break; + case JPEG_REACHED_EOI: /* Found EOI */ + inputctl->pub.eoi_reached = TRUE; + if (inputctl->inheaders) { /* Tables-only datastream, apparently */ + if (cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOF_NO_SOS); + } else { + /* Prevent infinite loop in coef ctlr's decompress_data routine + * if user set output_scan_number larger than number of scans. + */ + if (cinfo->output_scan_number > cinfo->input_scan_number) + cinfo->output_scan_number = cinfo->input_scan_number; + } + break; + case JPEG_SUSPENDED: + break; + } + + return val; +} + + +/* + * Reset state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_input_controller (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + + inputctl->pub.consume_input = consume_markers; + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = TRUE; + /* Reset other modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->marker->reset_marker_reader) (cinfo); + /* Reset progression state -- would be cleaner if entropy decoder did this */ + cinfo->coef_bits = NULL; +} + + +/* + * Initialize the input controller module. + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_input_controller (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl; + + /* Create subobject in permanent pool */ + inputctl = (my_inputctl_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_input_controller)); + cinfo->inputctl = (struct jpeg_input_controller *) inputctl; + /* Initialize method pointers */ + inputctl->pub.consume_input = consume_markers; + inputctl->pub.reset_input_controller = reset_input_controller; + inputctl->pub.start_input_pass = start_input_pass; + inputctl->pub.finish_input_pass = finish_input_pass; + /* Initialize state: can't use reset_input_controller since we don't + * want to try to reset other modules yet. + */ + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = TRUE; +} diff --git a/3rdparty/openctm/tools/jpeg/jdmainct.c b/3rdparty/openctm/tools/jpeg/jdmainct.c new file mode 100644 index 000000000..995aa3970 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdmainct.c @@ -0,0 +1,512 @@ +/* + * jdmainct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the main buffer controller for decompression. + * The main buffer lies between the JPEG decompressor proper and the + * post-processor; it holds downsampled data in the JPEG colorspace. + * + * Note that this code is bypassed in raw-data mode, since the application + * supplies the equivalent of the main buffer in that case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * In the current system design, the main buffer need never be a full-image + * buffer; any full-height buffers will be found inside the coefficient or + * postprocessing controllers. Nonetheless, the main controller is not + * trivial. Its responsibility is to provide context rows for upsampling/ + * rescaling, and doing this in an efficient fashion is a bit tricky. + * + * Postprocessor input data is counted in "row groups". A row group + * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) + * sample rows of each component. (We require DCT_scaled_size values to be + * chosen such that these numbers are integers. In practice DCT_scaled_size + * values will likely be powers of two, so we actually have the stronger + * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.) + * Upsampling will typically produce max_v_samp_factor pixel rows from each + * row group (times any additional scale factor that the upsampler is + * applying). + * + * The coefficient controller will deliver data to us one iMCU row at a time; + * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or + * exactly min_DCT_scaled_size row groups. (This amount of data corresponds + * to one row of MCUs when the image is fully interleaved.) Note that the + * number of sample rows varies across components, but the number of row + * groups does not. Some garbage sample rows may be included in the last iMCU + * row at the bottom of the image. + * + * Depending on the vertical scaling algorithm used, the upsampler may need + * access to the sample row(s) above and below its current input row group. + * The upsampler is required to set need_context_rows TRUE at global selection + * time if so. When need_context_rows is FALSE, this controller can simply + * obtain one iMCU row at a time from the coefficient controller and dole it + * out as row groups to the postprocessor. + * + * When need_context_rows is TRUE, this controller guarantees that the buffer + * passed to postprocessing contains at least one row group's worth of samples + * above and below the row group(s) being processed. Note that the context + * rows "above" the first passed row group appear at negative row offsets in + * the passed buffer. At the top and bottom of the image, the required + * context rows are manufactured by duplicating the first or last real sample + * row; this avoids having special cases in the upsampling inner loops. + * + * The amount of context is fixed at one row group just because that's a + * convenient number for this controller to work with. The existing + * upsamplers really only need one sample row of context. An upsampler + * supporting arbitrary output rescaling might wish for more than one row + * group of context when shrinking the image; tough, we don't handle that. + * (This is justified by the assumption that downsizing will be handled mostly + * by adjusting the DCT_scaled_size values, so that the actual scale factor at + * the upsample step needn't be much less than one.) + * + * To provide the desired context, we have to retain the last two row groups + * of one iMCU row while reading in the next iMCU row. (The last row group + * can't be processed until we have another row group for its below-context, + * and so we have to save the next-to-last group too for its above-context.) + * We could do this most simply by copying data around in our buffer, but + * that'd be very slow. We can avoid copying any data by creating a rather + * strange pointer structure. Here's how it works. We allocate a workspace + * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number + * of row groups per iMCU row). We create two sets of redundant pointers to + * the workspace. Labeling the physical row groups 0 to M+1, the synthesized + * pointer lists look like this: + * M+1 M-1 + * master pointer --> 0 master pointer --> 0 + * 1 1 + * ... ... + * M-3 M-3 + * M-2 M + * M-1 M+1 + * M M-2 + * M+1 M-1 + * 0 0 + * We read alternate iMCU rows using each master pointer; thus the last two + * row groups of the previous iMCU row remain un-overwritten in the workspace. + * The pointer lists are set up so that the required context rows appear to + * be adjacent to the proper places when we pass the pointer lists to the + * upsampler. + * + * The above pictures describe the normal state of the pointer lists. + * At top and bottom of the image, we diddle the pointer lists to duplicate + * the first or last sample row as necessary (this is cheaper than copying + * sample rows around). + * + * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1. In that + * situation each iMCU row provides only one row group so the buffering logic + * must be different (eg, we must read two iMCU rows before we can emit the + * first row group). For now, we simply do not support providing context + * rows when min_DCT_scaled_size is 1. That combination seems unlikely to + * be worth providing --- if someone wants a 1/8th-size preview, they probably + * want it quick and dirty, so a context-free upsampler is sufficient. + */ + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_main_controller pub; /* public fields */ + + /* Pointer to allocated workspace (M or M+2 row groups). */ + JSAMPARRAY buffer[MAX_COMPONENTS]; + + boolean buffer_full; /* Have we gotten an iMCU row from decoder? */ + JDIMENSION rowgroup_ctr; /* counts row groups output to postprocessor */ + + /* Remaining fields are only used in the context case. */ + + /* These are the master pointers to the funny-order pointer lists. */ + JSAMPIMAGE xbuffer[2]; /* pointers to weird pointer lists */ + + int whichptr; /* indicates which pointer set is now in use */ + int context_state; /* process_data state machine status */ + JDIMENSION rowgroups_avail; /* row groups available to postprocessor */ + JDIMENSION iMCU_row_ctr; /* counts iMCU rows to detect image top/bot */ +} my_main_controller; + +typedef my_main_controller * my_main_ptr; + +/* context_state values: */ +#define CTX_PREPARE_FOR_IMCU 0 /* need to prepare for MCU row */ +#define CTX_PROCESS_IMCU 1 /* feeding iMCU to postprocessor */ +#define CTX_POSTPONED_ROW 2 /* feeding postponed row group */ + + +/* Forward declarations */ +METHODDEF(void) process_data_simple_main + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +METHODDEF(void) process_data_context_main + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +#ifdef QUANT_2PASS_SUPPORTED +METHODDEF(void) process_data_crank_post + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +#endif + + +LOCAL(void) +alloc_funny_pointers (j_decompress_ptr cinfo) +/* Allocate space for the funny pointer lists. + * This is done only once, not once per pass. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, rgroup; + int M = cinfo->min_DCT_v_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY xbuf; + + /* Get top-level space for component array pointers. + * We alloc both arrays with one call to save a few cycles. + */ + main->xbuffer[0] = (JSAMPIMAGE) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); + main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ + /* Get space for pointer lists --- M+4 row groups in each list. + * We alloc both pointer lists with one call to save a few cycles. + */ + xbuf = (JSAMPARRAY) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); + xbuf += rgroup; /* want one row group at negative offsets */ + main->xbuffer[0][ci] = xbuf; + xbuf += rgroup * (M + 4); + main->xbuffer[1][ci] = xbuf; + } +} + + +LOCAL(void) +make_funny_pointers (j_decompress_ptr cinfo) +/* Create the funny pointer lists discussed in the comments above. + * The actual workspace is already allocated (in main->buffer), + * and the space for the pointer lists is allocated too. + * This routine just fills in the curiously ordered lists. + * This will be repeated at the beginning of each pass. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, i, rgroup; + int M = cinfo->min_DCT_v_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY buf, xbuf0, xbuf1; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ + xbuf0 = main->xbuffer[0][ci]; + xbuf1 = main->xbuffer[1][ci]; + /* First copy the workspace pointers as-is */ + buf = main->buffer[ci]; + for (i = 0; i < rgroup * (M + 2); i++) { + xbuf0[i] = xbuf1[i] = buf[i]; + } + /* In the second list, put the last four row groups in swapped order */ + for (i = 0; i < rgroup * 2; i++) { + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i]; + } + /* The wraparound pointers at top and bottom will be filled later + * (see set_wraparound_pointers, below). Initially we want the "above" + * pointers to duplicate the first actual data line. This only needs + * to happen in xbuffer[0]. + */ + for (i = 0; i < rgroup; i++) { + xbuf0[i - rgroup] = xbuf0[0]; + } + } +} + + +LOCAL(void) +set_wraparound_pointers (j_decompress_ptr cinfo) +/* Set up the "wraparound" pointers at top and bottom of the pointer lists. + * This changes the pointer list state from top-of-image to the normal state. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, i, rgroup; + int M = cinfo->min_DCT_v_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY xbuf0, xbuf1; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ + xbuf0 = main->xbuffer[0][ci]; + xbuf1 = main->xbuffer[1][ci]; + for (i = 0; i < rgroup; i++) { + xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; + xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; + xbuf0[rgroup*(M+2) + i] = xbuf0[i]; + xbuf1[rgroup*(M+2) + i] = xbuf1[i]; + } + } +} + + +LOCAL(void) +set_bottom_pointers (j_decompress_ptr cinfo) +/* Change the pointer lists to duplicate the last sample row at the bottom + * of the image. whichptr indicates which xbuffer holds the final iMCU row. + * Also sets rowgroups_avail to indicate number of nondummy row groups in row. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, i, rgroup, iMCUheight, rows_left; + jpeg_component_info *compptr; + JSAMPARRAY xbuf; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Count sample rows in one iMCU row and in one row group */ + iMCUheight = compptr->v_samp_factor * compptr->DCT_v_scaled_size; + rgroup = iMCUheight / cinfo->min_DCT_v_scaled_size; + /* Count nondummy sample rows remaining for this component */ + rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight); + if (rows_left == 0) rows_left = iMCUheight; + /* Count nondummy row groups. Should get same answer for each component, + * so we need only do it once. + */ + if (ci == 0) { + main->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); + } + /* Duplicate the last real sample row rgroup*2 times; this pads out the + * last partial rowgroup and ensures at least one full rowgroup of context. + */ + xbuf = main->xbuffer[main->whichptr][ci]; + for (i = 0; i < rgroup * 2; i++) { + xbuf[rows_left + i] = xbuf[rows_left-1]; + } + } +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (cinfo->upsample->need_context_rows) { + main->pub.process_data = process_data_context_main; + make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ + main->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ + main->context_state = CTX_PREPARE_FOR_IMCU; + main->iMCU_row_ctr = 0; + } else { + /* Simple case with no context needed */ + main->pub.process_data = process_data_simple_main; + } + main->buffer_full = FALSE; /* Mark buffer empty */ + main->rowgroup_ctr = 0; + break; +#ifdef QUANT_2PASS_SUPPORTED + case JBUF_CRANK_DEST: + /* For last pass of 2-pass quantization, just crank the postprocessor */ + main->pub.process_data = process_data_crank_post; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data. + * This handles the simple case where no context is required. + */ + +METHODDEF(void) +process_data_simple_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + JDIMENSION rowgroups_avail; + + /* Read input data if we haven't filled the main buffer yet */ + if (! main->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) + return; /* suspension forced, can do nothing more */ + main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + } + + /* There are always min_DCT_scaled_size row groups in an iMCU row. */ + rowgroups_avail = (JDIMENSION) cinfo->min_DCT_v_scaled_size; + /* Note: at the bottom of the image, we may pass extra garbage row groups + * to the postprocessor. The postprocessor has to check for bottom + * of image anyway (at row resolution), so no point in us doing it too. + */ + + /* Feed the postprocessor */ + (*cinfo->post->post_process_data) (cinfo, main->buffer, + &main->rowgroup_ctr, rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + + /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ + if (main->rowgroup_ctr >= rowgroups_avail) { + main->buffer_full = FALSE; + main->rowgroup_ctr = 0; + } +} + + +/* + * Process some data. + * This handles the case where context rows must be provided. + */ + +METHODDEF(void) +process_data_context_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + /* Read input data if we haven't filled the main buffer yet */ + if (! main->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, + main->xbuffer[main->whichptr])) + return; /* suspension forced, can do nothing more */ + main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + main->iMCU_row_ctr++; /* count rows received */ + } + + /* Postprocessor typically will not swallow all the input data it is handed + * in one call (due to filling the output buffer first). Must be prepared + * to exit and restart. This switch lets us keep track of how far we got. + * Note that each case falls through to the next on successful completion. + */ + switch (main->context_state) { + case CTX_POSTPONED_ROW: + /* Call postprocessor using previously set pointers for postponed row */ + (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], + &main->rowgroup_ctr, main->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (main->rowgroup_ctr < main->rowgroups_avail) + return; /* Need to suspend */ + main->context_state = CTX_PREPARE_FOR_IMCU; + if (*out_row_ctr >= out_rows_avail) + return; /* Postprocessor exactly filled output buf */ + /*FALLTHROUGH*/ + case CTX_PREPARE_FOR_IMCU: + /* Prepare to process first M-1 row groups of this iMCU row */ + main->rowgroup_ctr = 0; + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); + /* Check for bottom of image: if so, tweak pointers to "duplicate" + * the last sample row, and adjust rowgroups_avail to ignore padding rows. + */ + if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) + set_bottom_pointers(cinfo); + main->context_state = CTX_PROCESS_IMCU; + /*FALLTHROUGH*/ + case CTX_PROCESS_IMCU: + /* Call postprocessor using previously set pointers */ + (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], + &main->rowgroup_ctr, main->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (main->rowgroup_ctr < main->rowgroups_avail) + return; /* Need to suspend */ + /* After the first iMCU, change wraparound pointers to normal state */ + if (main->iMCU_row_ctr == 1) + set_wraparound_pointers(cinfo); + /* Prepare to load new iMCU row using other xbuffer list */ + main->whichptr ^= 1; /* 0=>1 or 1=>0 */ + main->buffer_full = FALSE; + /* Still need to process last row group of this iMCU row, */ + /* which is saved at index M+1 of the other xbuffer */ + main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); + main->context_state = CTX_POSTPONED_ROW; + } +} + + +/* + * Process some data. + * Final pass of two-pass quantization: just call the postprocessor. + * Source data will be the postprocessor controller's internal buffer. + */ + +#ifdef QUANT_2PASS_SUPPORTED + +METHODDEF(void) +process_data_crank_post (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL, + (JDIMENSION *) NULL, (JDIMENSION) 0, + output_buf, out_row_ctr, out_rows_avail); +} + +#endif /* QUANT_2PASS_SUPPORTED */ + + +/* + * Initialize main buffer controller. + */ + +GLOBAL(void) +jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_main_ptr main; + int ci, rgroup, ngroups; + jpeg_component_info *compptr; + + main = (my_main_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_main_controller)); + cinfo->main = (struct jpeg_d_main_controller *) main; + main->pub.start_pass = start_pass_main; + + if (need_full_buffer) /* shouldn't happen */ + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + /* Allocate the workspace. + * ngroups is the number of row groups we need. + */ + if (cinfo->upsample->need_context_rows) { + if (cinfo->min_DCT_v_scaled_size < 2) /* unsupported, see comments above */ + ERREXIT(cinfo, JERR_NOTIMPL); + alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ + ngroups = cinfo->min_DCT_v_scaled_size + 2; + } else { + ngroups = cinfo->min_DCT_v_scaled_size; + } + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * compptr->DCT_h_scaled_size, + (JDIMENSION) (rgroup * ngroups)); + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdmarker.c b/3rdparty/openctm/tools/jpeg/jdmarker.c new file mode 100644 index 000000000..9811761d3 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdmarker.c @@ -0,0 +1,1360 @@ +/* + * jdmarker.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to decode JPEG datastream markers. + * Most of the complexity arises from our desire to support input + * suspension: if not all of the data for a marker is available, + * we must exit back to the application. On resumption, we reprocess + * the marker. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +typedef enum { /* JPEG marker codes */ + M_SOF0 = 0xc0, + M_SOF1 = 0xc1, + M_SOF2 = 0xc2, + M_SOF3 = 0xc3, + + M_SOF5 = 0xc5, + M_SOF6 = 0xc6, + M_SOF7 = 0xc7, + + M_JPG = 0xc8, + M_SOF9 = 0xc9, + M_SOF10 = 0xca, + M_SOF11 = 0xcb, + + M_SOF13 = 0xcd, + M_SOF14 = 0xce, + M_SOF15 = 0xcf, + + M_DHT = 0xc4, + + M_DAC = 0xcc, + + M_RST0 = 0xd0, + M_RST1 = 0xd1, + M_RST2 = 0xd2, + M_RST3 = 0xd3, + M_RST4 = 0xd4, + M_RST5 = 0xd5, + M_RST6 = 0xd6, + M_RST7 = 0xd7, + + M_SOI = 0xd8, + M_EOI = 0xd9, + M_SOS = 0xda, + M_DQT = 0xdb, + M_DNL = 0xdc, + M_DRI = 0xdd, + M_DHP = 0xde, + M_EXP = 0xdf, + + M_APP0 = 0xe0, + M_APP1 = 0xe1, + M_APP2 = 0xe2, + M_APP3 = 0xe3, + M_APP4 = 0xe4, + M_APP5 = 0xe5, + M_APP6 = 0xe6, + M_APP7 = 0xe7, + M_APP8 = 0xe8, + M_APP9 = 0xe9, + M_APP10 = 0xea, + M_APP11 = 0xeb, + M_APP12 = 0xec, + M_APP13 = 0xed, + M_APP14 = 0xee, + M_APP15 = 0xef, + + M_JPG0 = 0xf0, + M_JPG13 = 0xfd, + M_COM = 0xfe, + + M_TEM = 0x01, + + M_ERROR = 0x100 +} JPEG_MARKER; + + +/* Private state */ + +typedef struct { + struct jpeg_marker_reader pub; /* public fields */ + + /* Application-overridable marker processing methods */ + jpeg_marker_parser_method process_COM; + jpeg_marker_parser_method process_APPn[16]; + + /* Limit on marker data length to save for each marker type */ + unsigned int length_limit_COM; + unsigned int length_limit_APPn[16]; + + /* Status of COM/APPn marker saving */ + jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */ + unsigned int bytes_read; /* data bytes read so far in marker */ + /* Note: cur_marker is not linked into marker_list until it's all read. */ +} my_marker_reader; + +typedef my_marker_reader * my_marker_ptr; + + +/* + * Macros for fetching data from the data source module. + * + * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect + * the current restart point; we update them only when we have reached a + * suitable place to restart if a suspension occurs. + */ + +/* Declare and initialize local copies of input pointer/count */ +#define INPUT_VARS(cinfo) \ + struct jpeg_source_mgr * datasrc = (cinfo)->src; \ + const JOCTET * next_input_byte = datasrc->next_input_byte; \ + size_t bytes_in_buffer = datasrc->bytes_in_buffer + +/* Unload the local copies --- do this only at a restart boundary */ +#define INPUT_SYNC(cinfo) \ + ( datasrc->next_input_byte = next_input_byte, \ + datasrc->bytes_in_buffer = bytes_in_buffer ) + +/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */ +#define INPUT_RELOAD(cinfo) \ + ( next_input_byte = datasrc->next_input_byte, \ + bytes_in_buffer = datasrc->bytes_in_buffer ) + +/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available. + * Note we do *not* do INPUT_SYNC before calling fill_input_buffer, + * but we must reload the local copies after a successful fill. + */ +#define MAKE_BYTE_AVAIL(cinfo,action) \ + if (bytes_in_buffer == 0) { \ + if (! (*datasrc->fill_input_buffer) (cinfo)) \ + { action; } \ + INPUT_RELOAD(cinfo); \ + } + +/* Read a byte into variable V. + * If must suspend, take the specified action (typically "return FALSE"). + */ +#define INPUT_BYTE(cinfo,V,action) \ + MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V = GETJOCTET(*next_input_byte++); ) + +/* As above, but read two bytes interpreted as an unsigned 16-bit integer. + * V should be declared unsigned int or perhaps INT32. + */ +#define INPUT_2BYTES(cinfo,V,action) \ + MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \ + MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V += GETJOCTET(*next_input_byte++); ) + + +/* + * Routines to process JPEG markers. + * + * Entry condition: JPEG marker itself has been read and its code saved + * in cinfo->unread_marker; input restart point is just after the marker. + * + * Exit: if return TRUE, have read and processed any parameters, and have + * updated the restart point to point after the parameters. + * If return FALSE, was forced to suspend before reaching end of + * marker parameters; restart point has not been moved. Same routine + * will be called again after application supplies more input data. + * + * This approach to suspension assumes that all of a marker's parameters + * can fit into a single input bufferload. This should hold for "normal" + * markers. Some COM/APPn markers might have large parameter segments + * that might not fit. If we are simply dropping such a marker, we use + * skip_input_data to get past it, and thereby put the problem on the + * source manager's shoulders. If we are saving the marker's contents + * into memory, we use a slightly different convention: when forced to + * suspend, the marker processor updates the restart point to the end of + * what it's consumed (ie, the end of the buffer) before returning FALSE. + * On resumption, cinfo->unread_marker still contains the marker code, + * but the data source will point to the next chunk of marker data. + * The marker processor must retain internal state to deal with this. + * + * Note that we don't bother to avoid duplicate trace messages if a + * suspension occurs within marker parameters. Other side effects + * require more care. + */ + + +LOCAL(boolean) +get_soi (j_decompress_ptr cinfo) +/* Process an SOI marker */ +{ + int i; + + TRACEMS(cinfo, 1, JTRC_SOI); + + if (cinfo->marker->saw_SOI) + ERREXIT(cinfo, JERR_SOI_DUPLICATE); + + /* Reset all parameters that are defined to be reset by SOI */ + + for (i = 0; i < NUM_ARITH_TBLS; i++) { + cinfo->arith_dc_L[i] = 0; + cinfo->arith_dc_U[i] = 1; + cinfo->arith_ac_K[i] = 5; + } + cinfo->restart_interval = 0; + + /* Set initial assumptions for colorspace etc */ + + cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ + + cinfo->saw_JFIF_marker = FALSE; + cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ + cinfo->JFIF_minor_version = 1; + cinfo->density_unit = 0; + cinfo->X_density = 1; + cinfo->Y_density = 1; + cinfo->saw_Adobe_marker = FALSE; + cinfo->Adobe_transform = 0; + + cinfo->marker->saw_SOI = TRUE; + + return TRUE; +} + + +LOCAL(boolean) +get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) +/* Process a SOFn marker */ +{ + INT32 length; + int c, ci; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + + cinfo->progressive_mode = is_prog; + cinfo->arith_code = is_arith; + + INPUT_2BYTES(cinfo, length, return FALSE); + + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + + length -= 8; + + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + (int) cinfo->image_width, (int) cinfo->image_height, + cinfo->num_components); + + if (cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOF_DUPLICATE); + + /* We don't support files in which the image height is initially specified */ + /* as 0 and is later redefined by DNL. As long as we have to check that, */ + /* might as well have a general sanity check. */ + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 + || cinfo->num_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + + if (length != (cinfo->num_components * 3)) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + if (cinfo->comp_info == NULL) /* do only once, even if suspend */ + cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * SIZEOF(jpeg_component_info)); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->component_index = ci; + INPUT_BYTE(cinfo, compptr->component_id, return FALSE); + INPUT_BYTE(cinfo, c, return FALSE); + compptr->h_samp_factor = (c >> 4) & 15; + compptr->v_samp_factor = (c ) & 15; + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + compptr->component_id, compptr->h_samp_factor, + compptr->v_samp_factor, compptr->quant_tbl_no); + } + + cinfo->marker->saw_SOF = TRUE; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_sos (j_decompress_ptr cinfo) +/* Process a SOS marker */ +{ + INT32 length; + int i, ci, n, c, cc; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + + if (! cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOS_NO_SOF); + + INPUT_2BYTES(cinfo, length, return FALSE); + + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + + TRACEMS1(cinfo, 1, JTRC_SOS, n); + + if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + cinfo->comps_in_scan = n; + + /* Collect the component-spec parameters */ + + for (i = 0; i < n; i++) { + INPUT_BYTE(cinfo, cc, return FALSE); + INPUT_BYTE(cinfo, c, return FALSE); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (cc == compptr->component_id) + goto id_found; + } + + ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); + + id_found: + + cinfo->cur_comp_info[i] = compptr; + compptr->dc_tbl_no = (c >> 4) & 15; + compptr->ac_tbl_no = (c ) & 15; + + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + compptr->dc_tbl_no, compptr->ac_tbl_no); + } + + /* Collect the additional scan parameters Ss, Se, Ah/Al. */ + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Ss = c; + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Se = c; + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Ah = (c >> 4) & 15; + cinfo->Al = (c ) & 15; + + TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, + cinfo->Ah, cinfo->Al); + + /* Prepare to scan data & restart markers */ + cinfo->marker->next_restart_num = 0; + + /* Count another SOS marker */ + cinfo->input_scan_number++; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +#ifdef D_ARITH_CODING_SUPPORTED + +LOCAL(boolean) +get_dac (j_decompress_ptr cinfo) +/* Process a DAC marker */ +{ + INT32 length; + int index, val; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 0) { + INPUT_BYTE(cinfo, index, return FALSE); + INPUT_BYTE(cinfo, val, return FALSE); + + length -= 2; + + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + + if (index < 0 || index >= (2*NUM_ARITH_TBLS)) + ERREXIT1(cinfo, JERR_DAC_INDEX, index); + + if (index >= NUM_ARITH_TBLS) { /* define AC table */ + cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val; + } else { /* define DC table */ + cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); + cinfo->arith_dc_U[index] = (UINT8) (val >> 4); + if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) + ERREXIT1(cinfo, JERR_DAC_VALUE, val); + } + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + +#else /* ! D_ARITH_CODING_SUPPORTED */ + +#define get_dac(cinfo) skip_variable(cinfo) + +#endif /* D_ARITH_CODING_SUPPORTED */ + + +LOCAL(boolean) +get_dht (j_decompress_ptr cinfo) +/* Process a DHT marker */ +{ + INT32 length; + UINT8 bits[17]; + UINT8 huffval[256]; + int i, index, count; + JHUFF_TBL **htblptr; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 16) { + INPUT_BYTE(cinfo, index, return FALSE); + + TRACEMS1(cinfo, 1, JTRC_DHT, index); + + bits[0] = 0; + count = 0; + for (i = 1; i <= 16; i++) { + INPUT_BYTE(cinfo, bits[i], return FALSE); + count += bits[i]; + } + + length -= 1 + 16; + + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + bits[1], bits[2], bits[3], bits[4], + bits[5], bits[6], bits[7], bits[8]); + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + bits[9], bits[10], bits[11], bits[12], + bits[13], bits[14], bits[15], bits[16]); + + /* Here we just do minimal validation of the counts to avoid walking + * off the end of our table space. jdhuff.c will check more carefully. + */ + if (count > 256 || ((INT32) count) > length) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + + for (i = 0; i < count; i++) + INPUT_BYTE(cinfo, huffval[i], return FALSE); + + length -= count; + + if (index & 0x10) { /* AC table definition */ + index -= 0x10; + htblptr = &cinfo->ac_huff_tbl_ptrs[index]; + } else { /* DC table definition */ + htblptr = &cinfo->dc_huff_tbl_ptrs[index]; + } + + if (index < 0 || index >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_DHT_INDEX, index); + + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + + MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); + MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval)); + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_dqt (j_decompress_ptr cinfo) +/* Process a DQT marker */ +{ + INT32 length; + int n, i, prec; + unsigned int tmp; + JQUANT_TBL *quant_ptr; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 0) { + INPUT_BYTE(cinfo, n, return FALSE); + prec = n >> 4; + n &= 0x0F; + + TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); + + if (n >= NUM_QUANT_TBLS) + ERREXIT1(cinfo, JERR_DQT_INDEX, n); + + if (cinfo->quant_tbl_ptrs[n] == NULL) + cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo); + quant_ptr = cinfo->quant_tbl_ptrs[n]; + + for (i = 0; i < DCTSIZE2; i++) { + if (prec) + INPUT_2BYTES(cinfo, tmp, return FALSE); + else + INPUT_BYTE(cinfo, tmp, return FALSE); + /* We convert the zigzag-order table to natural array order. */ + quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp; + } + + if (cinfo->err->trace_level >= 2) { + for (i = 0; i < DCTSIZE2; i += 8) { + TRACEMS8(cinfo, 2, JTRC_QUANTVALS, + quant_ptr->quantval[i], quant_ptr->quantval[i+1], + quant_ptr->quantval[i+2], quant_ptr->quantval[i+3], + quant_ptr->quantval[i+4], quant_ptr->quantval[i+5], + quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]); + } + } + + length -= DCTSIZE2+1; + if (prec) length -= DCTSIZE2; + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_dri (j_decompress_ptr cinfo) +/* Process a DRI marker */ +{ + INT32 length; + unsigned int tmp; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + + if (length != 4) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_2BYTES(cinfo, tmp, return FALSE); + + TRACEMS1(cinfo, 1, JTRC_DRI, tmp); + + cinfo->restart_interval = tmp; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +/* + * Routines for processing APPn and COM markers. + * These are either saved in memory or discarded, per application request. + * APP0 and APP14 are specially checked to see if they are + * JFIF and Adobe markers, respectively. + */ + +#define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */ +#define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */ +#define APPN_DATA_LEN 14 /* Must be the largest of the above!! */ + + +LOCAL(void) +examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data, + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP0. + * Take appropriate action if it is a JFIF marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + INT32 totallen = (INT32) datalen + remaining; + + if (datalen >= APP0_DATA_LEN && + GETJOCTET(data[0]) == 0x4A && + GETJOCTET(data[1]) == 0x46 && + GETJOCTET(data[2]) == 0x49 && + GETJOCTET(data[3]) == 0x46 && + GETJOCTET(data[4]) == 0) { + /* Found JFIF APP0 marker: save info */ + cinfo->saw_JFIF_marker = TRUE; + cinfo->JFIF_major_version = GETJOCTET(data[5]); + cinfo->JFIF_minor_version = GETJOCTET(data[6]); + cinfo->density_unit = GETJOCTET(data[7]); + cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); + cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); + /* Check version. + * Major version must be 1, anything else signals an incompatible change. + * (We used to treat this as an error, but now it's a nonfatal warning, + * because some bozo at Hijaak couldn't read the spec.) + * Minor version should be 0..2, but process anyway if newer. + */ + if (cinfo->JFIF_major_version != 1) + WARNMS2(cinfo, JWRN_JFIF_MAJOR, + cinfo->JFIF_major_version, cinfo->JFIF_minor_version); + /* Generate trace messages */ + TRACEMS5(cinfo, 1, JTRC_JFIF, + cinfo->JFIF_major_version, cinfo->JFIF_minor_version, + cinfo->X_density, cinfo->Y_density, cinfo->density_unit); + /* Validate thumbnail dimensions and issue appropriate messages */ + if (GETJOCTET(data[12]) | GETJOCTET(data[13])) + TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, + GETJOCTET(data[12]), GETJOCTET(data[13])); + totallen -= APP0_DATA_LEN; + if (totallen != + ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) + TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); + } else if (datalen >= 6 && + GETJOCTET(data[0]) == 0x4A && + GETJOCTET(data[1]) == 0x46 && + GETJOCTET(data[2]) == 0x58 && + GETJOCTET(data[3]) == 0x58 && + GETJOCTET(data[4]) == 0) { + /* Found JFIF "JFXX" extension APP0 marker */ + /* The library doesn't actually do anything with these, + * but we try to produce a helpful trace message. + */ + switch (GETJOCTET(data[5])) { + case 0x10: + TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen); + break; + case 0x11: + TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen); + break; + case 0x13: + TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen); + break; + default: + TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, + GETJOCTET(data[5]), (int) totallen); + break; + } + } else { + /* Start of APP0 does not match "JFIF" or "JFXX", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + } +} + + +LOCAL(void) +examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data, + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP14. + * Take appropriate action if it is an Adobe marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + unsigned int version, flags0, flags1, transform; + + if (datalen >= APP14_DATA_LEN && + GETJOCTET(data[0]) == 0x41 && + GETJOCTET(data[1]) == 0x64 && + GETJOCTET(data[2]) == 0x6F && + GETJOCTET(data[3]) == 0x62 && + GETJOCTET(data[4]) == 0x65) { + /* Found Adobe APP14 marker */ + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + transform = GETJOCTET(data[11]); + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + cinfo->saw_Adobe_marker = TRUE; + cinfo->Adobe_transform = (UINT8) transform; + } else { + /* Start of APP14 does not match "Adobe", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); + } +} + + +METHODDEF(boolean) +get_interesting_appn (j_decompress_ptr cinfo) +/* Process an APP0 or APP14 marker without saving it */ +{ + INT32 length; + JOCTET b[APPN_DATA_LEN]; + unsigned int i, numtoread; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + /* get the interesting part of the marker data */ + if (length >= APPN_DATA_LEN) + numtoread = APPN_DATA_LEN; + else if (length > 0) + numtoread = (unsigned int) length; + else + numtoread = 0; + for (i = 0; i < numtoread; i++) + INPUT_BYTE(cinfo, b[i], return FALSE); + length -= numtoread; + + /* process it */ + switch (cinfo->unread_marker) { + case M_APP0: + examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length); + break; + case M_APP14: + examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length); + break; + default: + /* can't get here unless jpeg_save_markers chooses wrong processor */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + break; + } + + /* skip any remaining data -- could be lots */ + INPUT_SYNC(cinfo); + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + + +#ifdef SAVE_MARKERS_SUPPORTED + +METHODDEF(boolean) +save_marker (j_decompress_ptr cinfo) +/* Save an APPn or COM marker into the marker list */ +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + jpeg_saved_marker_ptr cur_marker = marker->cur_marker; + unsigned int bytes_read, data_length; + JOCTET FAR * data; + INT32 length = 0; + INPUT_VARS(cinfo); + + if (cur_marker == NULL) { + /* begin reading a marker */ + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + if (length >= 0) { /* watch out for bogus length word */ + /* figure out how much we want to save */ + unsigned int limit; + if (cinfo->unread_marker == (int) M_COM) + limit = marker->length_limit_COM; + else + limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0]; + if ((unsigned int) length < limit) + limit = (unsigned int) length; + /* allocate and initialize the marker item */ + cur_marker = (jpeg_saved_marker_ptr) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(struct jpeg_marker_struct) + limit); + cur_marker->next = NULL; + cur_marker->marker = (UINT8) cinfo->unread_marker; + cur_marker->original_length = (unsigned int) length; + cur_marker->data_length = limit; + /* data area is just beyond the jpeg_marker_struct */ + data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1); + marker->cur_marker = cur_marker; + marker->bytes_read = 0; + bytes_read = 0; + data_length = limit; + } else { + /* deal with bogus length word */ + bytes_read = data_length = 0; + data = NULL; + } + } else { + /* resume reading a marker */ + bytes_read = marker->bytes_read; + data_length = cur_marker->data_length; + data = cur_marker->data + bytes_read; + } + + while (bytes_read < data_length) { + INPUT_SYNC(cinfo); /* move the restart point to here */ + marker->bytes_read = bytes_read; + /* If there's not at least one byte in buffer, suspend */ + MAKE_BYTE_AVAIL(cinfo, return FALSE); + /* Copy bytes with reasonable rapidity */ + while (bytes_read < data_length && bytes_in_buffer > 0) { + *data++ = *next_input_byte++; + bytes_in_buffer--; + bytes_read++; + } + } + + /* Done reading what we want to read */ + if (cur_marker != NULL) { /* will be NULL if bogus length word */ + /* Add new marker to end of list */ + if (cinfo->marker_list == NULL) { + cinfo->marker_list = cur_marker; + } else { + jpeg_saved_marker_ptr prev = cinfo->marker_list; + while (prev->next != NULL) + prev = prev->next; + prev->next = cur_marker; + } + /* Reset pointer & calc remaining data length */ + data = cur_marker->data; + length = cur_marker->original_length - data_length; + } + /* Reset to initial state for next marker */ + marker->cur_marker = NULL; + + /* Process the marker if interesting; else just make a generic trace msg */ + switch (cinfo->unread_marker) { + case M_APP0: + examine_app0(cinfo, data, data_length, length); + break; + case M_APP14: + examine_app14(cinfo, data, data_length, length); + break; + default: + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, + (int) (data_length + length)); + break; + } + + /* skip any remaining data -- could be lots */ + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + +#endif /* SAVE_MARKERS_SUPPORTED */ + + +METHODDEF(boolean) +skip_variable (j_decompress_ptr cinfo) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + INT32 length; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); + + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + + +/* + * Find the next JPEG marker, save it in cinfo->unread_marker. + * Returns FALSE if had to suspend before reaching a marker; + * in that case cinfo->unread_marker is unchanged. + * + * Note that the result might not be a valid marker code, + * but it will never be 0 or FF. + */ + +LOCAL(boolean) +next_marker (j_decompress_ptr cinfo) +{ + int c; + INPUT_VARS(cinfo); + + for (;;) { + INPUT_BYTE(cinfo, c, return FALSE); + /* Skip any non-FF bytes. + * This may look a bit inefficient, but it will not occur in a valid file. + * We sync after each discarded byte so that a suspending data source + * can discard the byte from its buffer. + */ + while (c != 0xFF) { + cinfo->marker->discarded_bytes++; + INPUT_SYNC(cinfo); + INPUT_BYTE(cinfo, c, return FALSE); + } + /* This loop swallows any duplicate FF bytes. Extra FFs are legal as + * pad bytes, so don't count them in discarded_bytes. We assume there + * will not be so many consecutive FF bytes as to overflow a suspending + * data source's input buffer. + */ + do { + INPUT_BYTE(cinfo, c, return FALSE); + } while (c == 0xFF); + if (c != 0) + break; /* found a valid marker, exit loop */ + /* Reach here if we found a stuffed-zero data sequence (FF/00). + * Discard it and loop back to try again. + */ + cinfo->marker->discarded_bytes += 2; + INPUT_SYNC(cinfo); + } + + if (cinfo->marker->discarded_bytes != 0) { + WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); + cinfo->marker->discarded_bytes = 0; + } + + cinfo->unread_marker = c; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +first_marker (j_decompress_ptr cinfo) +/* Like next_marker, but used to obtain the initial SOI marker. */ +/* For this marker, we do not allow preceding garbage or fill; otherwise, + * we might well scan an entire input file before realizing it ain't JPEG. + * If an application wants to process non-JFIF files, it must seek to the + * SOI before calling the JPEG library. + */ +{ + int c, c2; + INPUT_VARS(cinfo); + + INPUT_BYTE(cinfo, c, return FALSE); + INPUT_BYTE(cinfo, c2, return FALSE); + if (c != 0xFF || c2 != (int) M_SOI) + ERREXIT2(cinfo, JERR_NO_SOI, c, c2); + + cinfo->unread_marker = c2; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +/* + * Read markers until SOS or EOI. + * + * Returns same codes as are defined for jpeg_consume_input: + * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + */ + +METHODDEF(int) +read_markers (j_decompress_ptr cinfo) +{ + /* Outer loop repeats once for each marker. */ + for (;;) { + /* Collect the marker proper, unless we already did. */ + /* NB: first_marker() enforces the requirement that SOI appear first. */ + if (cinfo->unread_marker == 0) { + if (! cinfo->marker->saw_SOI) { + if (! first_marker(cinfo)) + return JPEG_SUSPENDED; + } else { + if (! next_marker(cinfo)) + return JPEG_SUSPENDED; + } + } + /* At this point cinfo->unread_marker contains the marker code and the + * input point is just past the marker proper, but before any parameters. + * A suspension will cause us to return with this state still true. + */ + switch (cinfo->unread_marker) { + case M_SOI: + if (! get_soi(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + if (! get_sof(cinfo, FALSE, FALSE)) + return JPEG_SUSPENDED; + break; + + case M_SOF2: /* Progressive, Huffman */ + if (! get_sof(cinfo, TRUE, FALSE)) + return JPEG_SUSPENDED; + break; + + case M_SOF9: /* Extended sequential, arithmetic */ + if (! get_sof(cinfo, FALSE, TRUE)) + return JPEG_SUSPENDED; + break; + + case M_SOF10: /* Progressive, arithmetic */ + if (! get_sof(cinfo, TRUE, TRUE)) + return JPEG_SUSPENDED; + break; + + /* Currently unsupported SOFn types */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_JPG: /* Reserved for JPEG extensions */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker); + break; + + case M_SOS: + if (! get_sos(cinfo)) + return JPEG_SUSPENDED; + cinfo->unread_marker = 0; /* processed the marker */ + return JPEG_REACHED_SOS; + + case M_EOI: + TRACEMS(cinfo, 1, JTRC_EOI); + cinfo->unread_marker = 0; /* processed the marker */ + return JPEG_REACHED_EOI; + + case M_DAC: + if (! get_dac(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DHT: + if (! get_dht(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DQT: + if (! get_dqt(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DRI: + if (! get_dri(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_APP0: + case M_APP1: + case M_APP2: + case M_APP3: + case M_APP4: + case M_APP5: + case M_APP6: + case M_APP7: + case M_APP8: + case M_APP9: + case M_APP10: + case M_APP11: + case M_APP12: + case M_APP13: + case M_APP14: + case M_APP15: + if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[ + cinfo->unread_marker - (int) M_APP0]) (cinfo)) + return JPEG_SUSPENDED; + break; + + case M_COM: + if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) + return JPEG_SUSPENDED; + break; + + case M_RST0: /* these are all parameterless */ + case M_RST1: + case M_RST2: + case M_RST3: + case M_RST4: + case M_RST5: + case M_RST6: + case M_RST7: + case M_TEM: + TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker); + break; + + case M_DNL: /* Ignore DNL ... perhaps the wrong thing */ + if (! skip_variable(cinfo)) + return JPEG_SUSPENDED; + break; + + default: /* must be DHP, EXP, JPGn, or RESn */ + /* For now, we treat the reserved markers as fatal errors since they are + * likely to be used to signal incompatible JPEG Part 3 extensions. + * Once the JPEG 3 version-number marker is well defined, this code + * ought to change! + */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + break; + } + /* Successfully processed marker, so reset state variable */ + cinfo->unread_marker = 0; + } /* end loop */ +} + + +/* + * Read a restart marker, which is expected to appear next in the datastream; + * if the marker is not there, take appropriate recovery action. + * Returns FALSE if suspension is required. + * + * This is called by the entropy decoder after it has read an appropriate + * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder + * has already read a marker from the data source. Under normal conditions + * cinfo->unread_marker will be reset to 0 before returning; if not reset, + * it holds a marker which the decoder will be unable to read past. + */ + +METHODDEF(boolean) +read_restart_marker (j_decompress_ptr cinfo) +{ + /* Obtain a marker unless we already did. */ + /* Note that next_marker will complain if it skips any data. */ + if (cinfo->unread_marker == 0) { + if (! next_marker(cinfo)) + return FALSE; + } + + if (cinfo->unread_marker == + ((int) M_RST0 + cinfo->marker->next_restart_num)) { + /* Normal case --- swallow the marker and let entropy decoder continue */ + TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); + cinfo->unread_marker = 0; + } else { + /* Uh-oh, the restart markers have been messed up. */ + /* Let the data source manager determine how to resync. */ + if (! (*cinfo->src->resync_to_restart) (cinfo, + cinfo->marker->next_restart_num)) + return FALSE; + } + + /* Update next-restart state */ + cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; + + return TRUE; +} + + +/* + * This is the default resync_to_restart method for data source managers + * to use if they don't have any better approach. Some data source managers + * may be able to back up, or may have additional knowledge about the data + * which permits a more intelligent recovery strategy; such managers would + * presumably supply their own resync method. + * + * read_restart_marker calls resync_to_restart if it finds a marker other than + * the restart marker it was expecting. (This code is *not* used unless + * a nonzero restart interval has been declared.) cinfo->unread_marker is + * the marker code actually found (might be anything, except 0 or FF). + * The desired restart marker number (0..7) is passed as a parameter. + * This routine is supposed to apply whatever error recovery strategy seems + * appropriate in order to position the input stream to the next data segment. + * Note that cinfo->unread_marker is treated as a marker appearing before + * the current data-source input point; usually it should be reset to zero + * before returning. + * Returns FALSE if suspension is required. + * + * This implementation is substantially constrained by wanting to treat the + * input as a data stream; this means we can't back up. Therefore, we have + * only the following actions to work with: + * 1. Simply discard the marker and let the entropy decoder resume at next + * byte of file. + * 2. Read forward until we find another marker, discarding intervening + * data. (In theory we could look ahead within the current bufferload, + * without having to discard data if we don't find the desired marker. + * This idea is not implemented here, in part because it makes behavior + * dependent on buffer size and chance buffer-boundary positions.) + * 3. Leave the marker unread (by failing to zero cinfo->unread_marker). + * This will cause the entropy decoder to process an empty data segment, + * inserting dummy zeroes, and then we will reprocess the marker. + * + * #2 is appropriate if we think the desired marker lies ahead, while #3 is + * appropriate if the found marker is a future restart marker (indicating + * that we have missed the desired restart marker, probably because it got + * corrupted). + * We apply #2 or #3 if the found marker is a restart marker no more than + * two counts behind or ahead of the expected one. We also apply #2 if the + * found marker is not a legal JPEG marker code (it's certainly bogus data). + * If the found marker is a restart marker more than 2 counts away, we do #1 + * (too much risk that the marker is erroneous; with luck we will be able to + * resync at some future point). + * For any valid non-restart JPEG marker, we apply #3. This keeps us from + * overrunning the end of a scan. An implementation limited to single-scan + * files might find it better to apply #2 for markers other than EOI, since + * any other marker would have to be bogus data in that case. + */ + +GLOBAL(boolean) +jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired) +{ + int marker = cinfo->unread_marker; + int action = 1; + + /* Always put up a warning. */ + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + + /* Outer loop handles repeated decision after scanning forward. */ + for (;;) { + if (marker < (int) M_SOF0) + action = 2; /* invalid marker */ + else if (marker < (int) M_RST0 || marker > (int) M_RST7) + action = 3; /* valid non-restart marker */ + else { + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + marker == ((int) M_RST0 + ((desired+2) & 7))) + action = 3; /* one of the next two expected restarts */ + else if (marker == ((int) M_RST0 + ((desired-1) & 7)) || + marker == ((int) M_RST0 + ((desired-2) & 7))) + action = 2; /* a prior restart, so advance */ + else + action = 1; /* desired restart or too far away */ + } + TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); + switch (action) { + case 1: + /* Discard marker and let entropy decoder resume processing. */ + cinfo->unread_marker = 0; + return TRUE; + case 2: + /* Scan to the next marker, and repeat the decision loop. */ + if (! next_marker(cinfo)) + return FALSE; + marker = cinfo->unread_marker; + break; + case 3: + /* Return without advancing past this marker. */ + /* Entropy decoder will be forced to process an empty segment. */ + return TRUE; + } + } /* end loop */ +} + + +/* + * Reset marker processing state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + cinfo->comp_info = NULL; /* until allocated by get_sof */ + cinfo->input_scan_number = 0; /* no SOS seen yet */ + cinfo->unread_marker = 0; /* no pending marker */ + marker->pub.saw_SOI = FALSE; /* set internal state too */ + marker->pub.saw_SOF = FALSE; + marker->pub.discarded_bytes = 0; + marker->cur_marker = NULL; +} + + +/* + * Initialize the marker reader module. + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker; + int i; + + /* Create subobject in permanent pool */ + marker = (my_marker_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_marker_reader)); + cinfo->marker = (struct jpeg_marker_reader *) marker; + /* Initialize public method pointers */ + marker->pub.reset_marker_reader = reset_marker_reader; + marker->pub.read_markers = read_markers; + marker->pub.read_restart_marker = read_restart_marker; + /* Initialize COM/APPn processing. + * By default, we examine and then discard APP0 and APP14, + * but simply discard COM and all other APPn. + */ + marker->process_COM = skip_variable; + marker->length_limit_COM = 0; + for (i = 0; i < 16; i++) { + marker->process_APPn[i] = skip_variable; + marker->length_limit_APPn[i] = 0; + } + marker->process_APPn[0] = get_interesting_appn; + marker->process_APPn[14] = get_interesting_appn; + /* Reset marker processing state */ + reset_marker_reader(cinfo); +} + + +/* + * Control saving of COM and APPn markers into marker_list. + */ + +#ifdef SAVE_MARKERS_SUPPORTED + +GLOBAL(void) +jpeg_save_markers (j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + long maxlength; + jpeg_marker_parser_method processor; + + /* Length limit mustn't be larger than what we can allocate + * (should only be a concern in a 16-bit environment). + */ + maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct); + if (((long) length_limit) > maxlength) + length_limit = (unsigned int) maxlength; + + /* Choose processor routine to use. + * APP0/APP14 have special requirements. + */ + if (length_limit) { + processor = save_marker; + /* If saving APP0/APP14, save at least enough for our internal use. */ + if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN) + length_limit = APP0_DATA_LEN; + else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN) + length_limit = APP14_DATA_LEN; + } else { + processor = skip_variable; + /* If discarding APP0/APP14, use our regular on-the-fly processor. */ + if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14) + processor = get_interesting_appn; + } + + if (marker_code == (int) M_COM) { + marker->process_COM = processor; + marker->length_limit_COM = length_limit; + } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) { + marker->process_APPn[marker_code - (int) M_APP0] = processor; + marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit; + } else + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); +} + +#endif /* SAVE_MARKERS_SUPPORTED */ + + +/* + * Install a special processing method for COM or APPn markers. + */ + +GLOBAL(void) +jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + if (marker_code == (int) M_COM) + marker->process_COM = routine; + else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) + marker->process_APPn[marker_code - (int) M_APP0] = routine; + else + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); +} diff --git a/3rdparty/openctm/tools/jpeg/jdmaster.c b/3rdparty/openctm/tools/jpeg/jdmaster.c new file mode 100644 index 000000000..ff82ae052 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdmaster.c @@ -0,0 +1,663 @@ +/* + * jdmaster.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2002-2008 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains master control logic for the JPEG decompressor. + * These routines are concerned with selecting the modules to be executed + * and with determining the number of passes and the work to be done in each + * pass. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef struct { + struct jpeg_decomp_master pub; /* public fields */ + + int pass_number; /* # of passes completed */ + + boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ + + /* Saved references to initialized quantizer modules, + * in case we need to switch modes. + */ + struct jpeg_color_quantizer * quantizer_1pass; + struct jpeg_color_quantizer * quantizer_2pass; +} my_decomp_master; + +typedef my_decomp_master * my_master_ptr; + + +/* + * Determine whether merged upsample/color conversion should be used. + * CRUCIAL: this must match the actual capabilities of jdmerge.c! + */ + +LOCAL(boolean) +use_merged_upsample (j_decompress_ptr cinfo) +{ +#ifdef UPSAMPLE_MERGING_SUPPORTED + /* Merging is the equivalent of plain box-filter upsampling */ + if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) + return FALSE; + /* jdmerge.c only supports YCC=>RGB color conversion */ + if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || + cinfo->out_color_space != JCS_RGB || + cinfo->out_color_components != RGB_PIXELSIZE) + return FALSE; + /* and it only handles 2h1v or 2h2v sampling ratios */ + if (cinfo->comp_info[0].h_samp_factor != 2 || + cinfo->comp_info[1].h_samp_factor != 1 || + cinfo->comp_info[2].h_samp_factor != 1 || + cinfo->comp_info[0].v_samp_factor > 2 || + cinfo->comp_info[1].v_samp_factor != 1 || + cinfo->comp_info[2].v_samp_factor != 1) + return FALSE; + /* furthermore, it doesn't work if we've scaled the IDCTs differently */ + if (cinfo->comp_info[0].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size || + cinfo->comp_info[1].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size || + cinfo->comp_info[2].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size || + cinfo->comp_info[0].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size || + cinfo->comp_info[1].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size || + cinfo->comp_info[2].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size) + return FALSE; + /* ??? also need to test for upsample-time rescaling, when & if supported */ + return TRUE; /* by golly, it'll work... */ +#else + return FALSE; +#endif +} + + +/* + * Compute output image dimensions and related values. + * NOTE: this is exported for possible use by application. + * Hence it mustn't do anything that can't be done twice. + * Also note that it may be called before the master module is initialized! + */ + +GLOBAL(void) +jpeg_calc_output_dimensions (j_decompress_ptr cinfo) +/* Do computations that are needed before master selection phase */ +{ +#ifdef IDCT_SCALING_SUPPORTED + int ci; + jpeg_component_info *compptr; +#endif + + /* Prevent application from calling me at wrong times */ + if (cinfo->global_state != DSTATE_READY) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + +#ifdef IDCT_SCALING_SUPPORTED + + /* Compute actual output image dimensions and DCT scaling choices. */ + if (cinfo->scale_num * 8 <= cinfo->scale_denom) { + /* Provide 1/8 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 8L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 8L); + cinfo->min_DCT_h_scaled_size = 1; + cinfo->min_DCT_v_scaled_size = 1; + } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { + /* Provide 1/4 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 4L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 4L); + cinfo->min_DCT_h_scaled_size = 2; + cinfo->min_DCT_v_scaled_size = 2; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 3) { + /* Provide 3/8 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 3L, 8L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 3L, 8L); + cinfo->min_DCT_h_scaled_size = 3; + cinfo->min_DCT_v_scaled_size = 3; + } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { + /* Provide 1/2 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 2L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 2L); + cinfo->min_DCT_h_scaled_size = 4; + cinfo->min_DCT_v_scaled_size = 4; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 5) { + /* Provide 5/8 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 5L, 8L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 5L, 8L); + cinfo->min_DCT_h_scaled_size = 5; + cinfo->min_DCT_v_scaled_size = 5; + } else if (cinfo->scale_num * 4 <= cinfo->scale_denom * 3) { + /* Provide 3/4 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 3L, 4L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 3L, 4L); + cinfo->min_DCT_h_scaled_size = 6; + cinfo->min_DCT_v_scaled_size = 6; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 7) { + /* Provide 7/8 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 7L, 8L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 7L, 8L); + cinfo->min_DCT_h_scaled_size = 7; + cinfo->min_DCT_v_scaled_size = 7; + } else if (cinfo->scale_num <= cinfo->scale_denom) { + /* Provide 1/1 scaling */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + cinfo->min_DCT_h_scaled_size = DCTSIZE; + cinfo->min_DCT_v_scaled_size = DCTSIZE; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 9) { + /* Provide 9/8 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 8L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 8L); + cinfo->min_DCT_h_scaled_size = 9; + cinfo->min_DCT_v_scaled_size = 9; + } else if (cinfo->scale_num * 4 <= cinfo->scale_denom * 5) { + /* Provide 5/4 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 4L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 4L); + cinfo->min_DCT_h_scaled_size = 10; + cinfo->min_DCT_v_scaled_size = 10; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 11) { + /* Provide 11/8 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 3L, 8L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 3L, 8L); + cinfo->min_DCT_h_scaled_size = 11; + cinfo->min_DCT_v_scaled_size = 11; + } else if (cinfo->scale_num * 2 <= cinfo->scale_denom * 3) { + /* Provide 3/2 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 2L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 2L); + cinfo->min_DCT_h_scaled_size = 12; + cinfo->min_DCT_v_scaled_size = 12; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 13) { + /* Provide 13/8 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 5L, 8L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 5L, 8L); + cinfo->min_DCT_h_scaled_size = 13; + cinfo->min_DCT_v_scaled_size = 13; + } else if (cinfo->scale_num * 4 <= cinfo->scale_denom * 7) { + /* Provide 7/4 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 3L, 4L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 3L, 4L); + cinfo->min_DCT_h_scaled_size = 14; + cinfo->min_DCT_v_scaled_size = 14; + } else if (cinfo->scale_num * 8 <= cinfo->scale_denom * 15) { + /* Provide 15/8 scaling */ + cinfo->output_width = cinfo->image_width + (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 7L, 8L); + cinfo->output_height = cinfo->image_height + (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 7L, 8L); + cinfo->min_DCT_h_scaled_size = 15; + cinfo->min_DCT_v_scaled_size = 15; + } else { + /* Provide 2/1 scaling */ + cinfo->output_width = cinfo->image_width << 1; + cinfo->output_height = cinfo->image_height << 1; + cinfo->min_DCT_h_scaled_size = 16; + cinfo->min_DCT_v_scaled_size = 16; + } + /* In selecting the actual DCT scaling for each component, we try to + * scale up the chroma components via IDCT scaling rather than upsampling. + * This saves time if the upsampler gets to use 1:1 scaling. + * Note this code adapts subsampling ratios which are powers of 2. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + int ssize = 1; + while (cinfo->min_DCT_h_scaled_size * ssize <= + (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) && + (cinfo->max_h_samp_factor % (compptr->h_samp_factor * ssize * 2)) == 0) { + ssize = ssize * 2; + } + compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size * ssize; + ssize = 1; + while (cinfo->min_DCT_v_scaled_size * ssize <= + (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) && + (cinfo->max_v_samp_factor % (compptr->v_samp_factor * ssize * 2)) == 0) { + ssize = ssize * 2; + } + compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size * ssize; + + /* We don't support IDCT ratios larger than 2. */ + if (compptr->DCT_h_scaled_size > compptr->DCT_v_scaled_size * 2) + compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size * 2; + else if (compptr->DCT_v_scaled_size > compptr->DCT_h_scaled_size * 2) + compptr->DCT_v_scaled_size = compptr->DCT_h_scaled_size * 2; + } + + /* Recompute downsampled dimensions of components; + * application needs to know these if using raw downsampled data. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Size in samples, after IDCT scaling */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * + (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size), + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * + (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size), + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + } + +#else /* !IDCT_SCALING_SUPPORTED */ + + /* Hardwire it to "no scaling" */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, + * and has computed unscaled downsampled_width and downsampled_height. + */ + +#endif /* IDCT_SCALING_SUPPORTED */ + + /* Report number of components in selected colorspace. */ + /* Probably this should be in the color conversion module... */ + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + break; + case JCS_RGB: +#if RGB_PIXELSIZE != 3 + cinfo->out_color_components = RGB_PIXELSIZE; + break; +#endif /* else share code with YCbCr */ + case JCS_YCbCr: + cinfo->out_color_components = 3; + break; + case JCS_CMYK: + case JCS_YCCK: + cinfo->out_color_components = 4; + break; + default: /* else must be same colorspace as in file */ + cinfo->out_color_components = cinfo->num_components; + break; + } + cinfo->output_components = (cinfo->quantize_colors ? 1 : + cinfo->out_color_components); + + /* See if upsampler will want to emit more than one row at a time */ + if (use_merged_upsample(cinfo)) + cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; + else + cinfo->rec_outbuf_height = 1; +} + + +/* + * Several decompression processes need to range-limit values to the range + * 0..MAXJSAMPLE; the input value may fall somewhat outside this range + * due to noise introduced by quantization, roundoff error, etc. These + * processes are inner loops and need to be as fast as possible. On most + * machines, particularly CPUs with pipelines or instruction prefetch, + * a (subscript-check-less) C table lookup + * x = sample_range_limit[x]; + * is faster than explicit tests + * if (x < 0) x = 0; + * else if (x > MAXJSAMPLE) x = MAXJSAMPLE; + * These processes all use a common table prepared by the routine below. + * + * For most steps we can mathematically guarantee that the initial value + * of x is within MAXJSAMPLE+1 of the legal range, so a table running from + * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial + * limiting step (just after the IDCT), a wildly out-of-range value is + * possible if the input data is corrupt. To avoid any chance of indexing + * off the end of memory and getting a bad-pointer trap, we perform the + * post-IDCT limiting thus: + * x = range_limit[x & MASK]; + * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit + * samples. Under normal circumstances this is more than enough range and + * a correct output will be generated; with bogus input data the mask will + * cause wraparound, and we will safely generate a bogus-but-in-range output. + * For the post-IDCT step, we want to convert the data from signed to unsigned + * representation by adding CENTERJSAMPLE at the same time that we limit it. + * So the post-IDCT limiting table ends up looking like this: + * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, + * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), + * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), + * 0,1,...,CENTERJSAMPLE-1 + * Negative inputs select values from the upper half of the table after + * masking. + * + * We can save some space by overlapping the start of the post-IDCT table + * with the simpler range limiting table. The post-IDCT table begins at + * sample_range_limit + CENTERJSAMPLE. + * + * Note that the table is allocated in near data space on PCs; it's small + * enough and used often enough to justify this. + */ + +LOCAL(void) +prepare_range_limit_table (j_decompress_ptr cinfo) +/* Allocate and fill in the sample_range_limit table */ +{ + JSAMPLE * table; + int i; + + table = (JSAMPLE *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE)); + table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ + cinfo->sample_range_limit = table; + /* First segment of "simple" table: limit[x] = 0 for x < 0 */ + MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + /* Main part of "simple" table: limit[x] = x */ + for (i = 0; i <= MAXJSAMPLE; i++) + table[i] = (JSAMPLE) i; + table += CENTERJSAMPLE; /* Point to where post-IDCT table starts */ + /* End of simple table, rest of first half of post-IDCT table */ + for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) + table[i] = MAXJSAMPLE; + /* Second half of post-IDCT table */ + MEMZERO(table + (2 * (MAXJSAMPLE+1)), + (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE)); + MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), + cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE)); +} + + +/* + * Master selection of decompression modules. + * This is done once at jpeg_start_decompress time. We determine + * which modules will be used and give them appropriate initialization calls. + * We also initialize the decompressor input side to begin consuming data. + * + * Since jpeg_read_header has finished, we know what is in the SOF + * and (first) SOS markers. We also have all the application parameter + * settings. + */ + +LOCAL(void) +master_selection (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + boolean use_c_buffer; + long samplesperrow; + JDIMENSION jd_samplesperrow; + + /* Initialize dimensions and other stuff */ + jpeg_calc_output_dimensions(cinfo); + prepare_range_limit_table(cinfo); + + /* Width of an output scanline must be representable as JDIMENSION. */ + samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components; + jd_samplesperrow = (JDIMENSION) samplesperrow; + if ((long) jd_samplesperrow != samplesperrow) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + + /* Initialize my private state */ + master->pass_number = 0; + master->using_merged_upsample = use_merged_upsample(cinfo); + + /* Color quantizer selection */ + master->quantizer_1pass = NULL; + master->quantizer_2pass = NULL; + /* No mode changes if not using buffered-image mode. */ + if (! cinfo->quantize_colors || ! cinfo->buffered_image) { + cinfo->enable_1pass_quant = FALSE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; + } + if (cinfo->quantize_colors) { + if (cinfo->raw_data_out) + ERREXIT(cinfo, JERR_NOTIMPL); + /* 2-pass quantizer only works in 3-component color space. */ + if (cinfo->out_color_components != 3) { + cinfo->enable_1pass_quant = TRUE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; + cinfo->colormap = NULL; + } else if (cinfo->colormap != NULL) { + cinfo->enable_external_quant = TRUE; + } else if (cinfo->two_pass_quantize) { + cinfo->enable_2pass_quant = TRUE; + } else { + cinfo->enable_1pass_quant = TRUE; + } + + if (cinfo->enable_1pass_quant) { +#ifdef QUANT_1PASS_SUPPORTED + jinit_1pass_quantizer(cinfo); + master->quantizer_1pass = cinfo->cquantize; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + + /* We use the 2-pass code to map to external colormaps. */ + if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) { +#ifdef QUANT_2PASS_SUPPORTED + jinit_2pass_quantizer(cinfo); + master->quantizer_2pass = cinfo->cquantize; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + /* If both quantizers are initialized, the 2-pass one is left active; + * this is necessary for starting with quantization to an external map. + */ + } + + /* Post-processing: in particular, color conversion first */ + if (! cinfo->raw_data_out) { + if (master->using_merged_upsample) { +#ifdef UPSAMPLE_MERGING_SUPPORTED + jinit_merged_upsampler(cinfo); /* does color conversion too */ +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + jinit_color_deconverter(cinfo); + jinit_upsampler(cinfo); + } + jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); + } + /* Inverse DCT */ + jinit_inverse_dct(cinfo); + /* Entropy decoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + jinit_arith_decoder(cinfo); + } else { + jinit_huff_decoder(cinfo); + } + + /* Initialize principal buffer controllers. */ + use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; + jinit_d_coef_controller(cinfo, use_c_buffer); + + if (! cinfo->raw_data_out) + jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Initialize input side of decompressor to consume first scan. */ + (*cinfo->inputctl->start_input_pass) (cinfo); + +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* If jpeg_start_decompress will read the whole file, initialize + * progress monitoring appropriately. The input step is counted + * as one pass. + */ + if (cinfo->progress != NULL && ! cinfo->buffered_image && + cinfo->inputctl->has_multiple_scans) { + int nscans; + /* Estimate number of scans to set pass_limit. */ + if (cinfo->progressive_mode) { + /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ + nscans = 2 + 3 * cinfo->num_components; + } else { + /* For a nonprogressive multiscan file, estimate 1 scan per component. */ + nscans = cinfo->num_components; + } + cinfo->progress->pass_counter = 0L; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + cinfo->progress->completed_passes = 0; + cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); + /* Count the input pass as done */ + master->pass_number++; + } +#endif /* D_MULTISCAN_FILES_SUPPORTED */ +} + + +/* + * Per-pass setup. + * This is called at the beginning of each output pass. We determine which + * modules will be active during this pass and give them appropriate + * start_pass calls. We also set is_dummy_pass to indicate whether this + * is a "real" output pass or a dummy pass for color quantization. + * (In the latter case, jdapistd.c will crank the pass to completion.) + */ + +METHODDEF(void) +prepare_for_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (master->pub.is_dummy_pass) { +#ifdef QUANT_2PASS_SUPPORTED + /* Final pass of 2-pass quantization */ + master->pub.is_dummy_pass = FALSE; + (*cinfo->cquantize->start_pass) (cinfo, FALSE); + (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); + (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* QUANT_2PASS_SUPPORTED */ + } else { + if (cinfo->quantize_colors && cinfo->colormap == NULL) { + /* Select new quantization method */ + if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { + cinfo->cquantize = master->quantizer_2pass; + master->pub.is_dummy_pass = TRUE; + } else if (cinfo->enable_1pass_quant) { + cinfo->cquantize = master->quantizer_1pass; + } else { + ERREXIT(cinfo, JERR_MODE_CHANGE); + } + } + (*cinfo->idct->start_pass) (cinfo); + (*cinfo->coef->start_output_pass) (cinfo); + if (! cinfo->raw_data_out) { + if (! master->using_merged_upsample) + (*cinfo->cconvert->start_pass) (cinfo); + (*cinfo->upsample->start_pass) (cinfo); + if (cinfo->quantize_colors) + (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); + (*cinfo->post->start_pass) (cinfo, + (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + } + } + + /* Set up progress monitor's pass info if present */ + if (cinfo->progress != NULL) { + cinfo->progress->completed_passes = master->pass_number; + cinfo->progress->total_passes = master->pass_number + + (master->pub.is_dummy_pass ? 2 : 1); + /* In buffered-image mode, we assume one more output pass if EOI not + * yet reached, but no more passes if EOI has been reached. + */ + if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { + cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); + } + } +} + + +/* + * Finish up at end of an output pass. + */ + +METHODDEF(void) +finish_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (cinfo->quantize_colors) + (*cinfo->cquantize->finish_pass) (cinfo); + master->pass_number++; +} + + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Switch to a new external colormap between output passes. + */ + +GLOBAL(void) +jpeg_new_colormap (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + /* Prevent application from calling me at wrong times */ + if (cinfo->global_state != DSTATE_BUFIMAGE) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (cinfo->quantize_colors && cinfo->enable_external_quant && + cinfo->colormap != NULL) { + /* Select 2-pass quantizer for external colormap use */ + cinfo->cquantize = master->quantizer_2pass; + /* Notify quantizer of colormap change */ + (*cinfo->cquantize->new_color_map) (cinfo); + master->pub.is_dummy_pass = FALSE; /* just in case */ + } else + ERREXIT(cinfo, JERR_MODE_CHANGE); +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + + +/* + * Initialize master decompression control and select active modules. + * This is performed at the start of jpeg_start_decompress. + */ + +GLOBAL(void) +jinit_master_decompress (j_decompress_ptr cinfo) +{ + my_master_ptr master; + + master = (my_master_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_decomp_master)); + cinfo->master = (struct jpeg_decomp_master *) master; + master->pub.prepare_for_output_pass = prepare_for_output_pass; + master->pub.finish_output_pass = finish_output_pass; + + master->pub.is_dummy_pass = FALSE; + + master_selection(cinfo); +} diff --git a/3rdparty/openctm/tools/jpeg/jdmerge.c b/3rdparty/openctm/tools/jpeg/jdmerge.c new file mode 100644 index 000000000..9e3a595de --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdmerge.c @@ -0,0 +1,400 @@ +/* + * jdmerge.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains code for merged upsampling/color conversion. + * + * This file combines functions from jdsample.c and jdcolor.c; + * read those files first to understand what's going on. + * + * When the chroma components are to be upsampled by simple replication + * (ie, box filtering), we can save some work in color conversion by + * calculating all the output pixels corresponding to a pair of chroma + * samples at one time. In the conversion equations + * R = Y + K1 * Cr + * G = Y + K2 * Cb + K3 * Cr + * B = Y + K4 * Cb + * only the Y term varies among the group of pixels corresponding to a pair + * of chroma samples, so the rest of the terms can be calculated just once. + * At typical sampling ratios, this eliminates half or three-quarters of the + * multiplications needed for color conversion. + * + * This file currently provides implementations for the following cases: + * YCbCr => RGB color conversion only. + * Sampling ratios of 2h1v or 2h2v. + * No scaling needed at upsample time. + * Corner-aligned (non-CCIR601) sampling alignment. + * Other special cases could be added, but in most applications these are + * the only common cases. (For uncommon cases we fall back on the more + * general code in jdsample.c and jdcolor.c.) + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef UPSAMPLE_MERGING_SUPPORTED + + +/* Private subobject */ + +typedef struct { + struct jpeg_upsampler pub; /* public fields */ + + /* Pointer to routine to do actual upsampling/conversion of one row group */ + JMETHOD(void, upmethod, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf)); + + /* Private state for YCC->RGB conversion */ + int * Cr_r_tab; /* => table for Cr to R conversion */ + int * Cb_b_tab; /* => table for Cb to B conversion */ + INT32 * Cr_g_tab; /* => table for Cr to G conversion */ + INT32 * Cb_g_tab; /* => table for Cb to G conversion */ + + /* For 2:1 vertical sampling, we produce two output rows at a time. + * We need a "spare" row buffer to hold the second output row if the + * application provides just a one-row buffer; we also use the spare + * to discard the dummy last row if the image height is odd. + */ + JSAMPROW spare_row; + boolean spare_full; /* T if spare buffer is occupied */ + + JDIMENSION out_row_width; /* samples per output row */ + JDIMENSION rows_to_go; /* counts rows remaining in image */ +} my_upsampler; + +typedef my_upsampler * my_upsample_ptr; + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. + * This is taken directly from jdcolor.c; see that file for more info. + */ + +LOCAL(void) +build_ycc_rgb_table (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + int i; + INT32 x; + SHIFT_TEMPS + + upsample->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + upsample->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + upsample->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + upsample->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + upsample->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.77200 * x */ + upsample->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.71414 * x */ + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + } +} + + +/* + * Initialize for an upsampling pass. + */ + +METHODDEF(void) +start_pass_merged_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the spare buffer empty */ + upsample->spare_full = FALSE; + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; +} + + +/* + * Control routine to do upsampling (and color conversion). + * + * The control routine just handles the row buffering considerations. + */ + +METHODDEF(void) +merged_2v_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 2:1 vertical sampling case: may need a spare row. */ +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + JSAMPROW work_ptrs[2]; + JDIMENSION num_rows; /* number of rows returned to caller */ + + if (upsample->spare_full) { + /* If we have a spare row saved from a previous cycle, just return it. */ + jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, + 1, upsample->out_row_width); + num_rows = 1; + upsample->spare_full = FALSE; + } else { + /* Figure number of rows to return to caller. */ + num_rows = 2; + /* Not more than the distance to the end of the image. */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + /* Create output pointer array for upsampler. */ + work_ptrs[0] = output_buf[*out_row_ctr]; + if (num_rows > 1) { + work_ptrs[1] = output_buf[*out_row_ctr + 1]; + } else { + work_ptrs[1] = upsample->spare_row; + upsample->spare_full = TRUE; + } + /* Now do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); + } + + /* Adjust counts */ + *out_row_ctr += num_rows; + upsample->rows_to_go -= num_rows; + /* When the buffer is emptied, declare this input row group consumed */ + if (! upsample->spare_full) + (*in_row_group_ctr)++; +} + + +METHODDEF(void) +merged_1v_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 1:1 vertical sampling case: much easier, never need a spare row. */ +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Just do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, + output_buf + *out_row_ctr); + /* Adjust counts */ + (*out_row_ctr)++; + (*in_row_group_ctr)++; +} + + +/* + * These are the routines invoked by the control routines to do + * the actual upsampling/conversion. One row group is processed per call. + * + * Note: since we may be writing directly into application-supplied buffers, + * we have to be honest about the output width; we can't assume the buffer + * has been rounded up to an even width. + */ + + +/* + * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical. + */ + +METHODDEF(void) +h2v1_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + register int y, cred, cgreen, cblue; + int cb, cr; + register JSAMPROW outptr; + JSAMPROW inptr0, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + int * Crrtab = upsample->Cr_r_tab; + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + SHIFT_TEMPS + + inptr0 = input_buf[0][in_row_group_ctr]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr = output_buf[0]; + /* Loop for each pair of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + /* Do the chroma part of the calculation */ + cb = GETJSAMPLE(*inptr1++); + cr = GETJSAMPLE(*inptr2++); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + /* Fetch 2 Y values and emit 2 pixels */ + y = GETJSAMPLE(*inptr0++); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr0++); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr0); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + } +} + + +/* + * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical. + */ + +METHODDEF(void) +h2v2_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + register int y, cred, cgreen, cblue; + int cb, cr; + register JSAMPROW outptr0, outptr1; + JSAMPROW inptr00, inptr01, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + int * Crrtab = upsample->Cr_r_tab; + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + SHIFT_TEMPS + + inptr00 = input_buf[0][in_row_group_ctr*2]; + inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr0 = output_buf[0]; + outptr1 = output_buf[1]; + /* Loop for each group of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + /* Do the chroma part of the calculation */ + cb = GETJSAMPLE(*inptr1++); + cr = GETJSAMPLE(*inptr2++); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + /* Fetch 4 Y values and emit 4 pixels */ + y = GETJSAMPLE(*inptr00++); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + outptr0 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr00++); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + outptr0 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr01++); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr01++); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr00); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + y = GETJSAMPLE(*inptr01); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + } +} + + +/* + * Module initialization routine for merged upsampling/color conversion. + * + * NB: this is called under the conditions determined by use_merged_upsample() + * in jdmaster.c. That routine MUST correspond to the actual capabilities + * of this module; no safety checks are made here. + */ + +GLOBAL(void) +jinit_merged_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_merged_upsample; + upsample->pub.need_context_rows = FALSE; + + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + + if (cinfo->max_v_samp_factor == 2) { + upsample->pub.upsample = merged_2v_upsample; + upsample->upmethod = h2v2_merged_upsample; + /* Allocate a spare row buffer */ + upsample->spare_row = (JSAMPROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (upsample->out_row_width * SIZEOF(JSAMPLE))); + } else { + upsample->pub.upsample = merged_1v_upsample; + upsample->upmethod = h2v1_merged_upsample; + /* No spare row needed */ + upsample->spare_row = NULL; + } + + build_ycc_rgb_table(cinfo); +} + +#endif /* UPSAMPLE_MERGING_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jdosabcc.obj b/3rdparty/openctm/tools/jpeg/jdosabcc.obj new file mode 100644 index 0000000000000000000000000000000000000000..eb60d8619c43d234fedbf53b01c10cfb429964b5 GIT binary patch literal 775 zcmZqRW8lfkP0dZoFHY1;EY4ltp}@evAQMtrl$5XFSX`W%o0OAUq@WO%T2!2wpQm7~ zXE3`%gu&ru)5Kf}6rDFZn1RAR)0h|-GC<6QQ>Fg+z`ddIr+t@Y77i3CWr$C1t6-E6LWGP%6~C1EQ86U0?k3lWHK^%A{$g*lv$EG zoq<6KW-Um0Vp(ElP9o6TW{eE1$Zjl7P0e;;VEBbBR+O5UlF7jEu!DucVG-lR1uGaC z85lyl--Lw+2L`dp?POp$8pgH7=B#27`_VYIPIlu1^6XKO(eZJyrxB{UOXkIz(>gyW;1O|v81i1y%y0hsZ Y+hDFlvCU@=E5lKb5XQe>*62m7#|W5!s6`j;#xCS!&Ty1_rM9ETFmZMX8A? znG6g95IxC>IXMs&S&T3h#i^;;E^zhv1*v%qVD%sa5$b<2FmOXmOwP$KPE~_*%ZoBg zQl~R8EbU-nU|7U>aluMPMh1q^?l)oK!GS?+ayuCqj)rk}iCm?l`tBc0eUexMaJ-IJ*6~b}%^MQ*;!hh-ZsEPz{f@8&3)A4n~I8IE{p= zb|6Ca4hHA5`Zf(EY{r+254`5wApqp|9O^!NB#uq3lU=PdoC%Acj>K`Pb+fB=hcl^l zm$Rw$#dD~2$Fuy8W9vQ*l7i?{>-1-V>xBl{j&#$rihT0>xfpuQ7#MbPF#P$vtQ5^J tr(J!0BY?mF5r!bgVA^*!9b_HMnJCt+n8U$v)RTdcF^TbI7ZU?R2>`P`+W`Oo literal 0 HcmV?d00001 diff --git a/3rdparty/openctm/tools/jpeg/jdosaobj.txt b/3rdparty/openctm/tools/jpeg/jdosaobj.txt new file mode 100644 index 000000000..b3b15add1 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdosaobj.txt @@ -0,0 +1,16 @@ +This archive contains already-assembled object files for JMEMDOSA.ASM +of the Independent JPEG Group's JPEG package. These files will be helpful +if you want to compile the IJG code for DOS, but don't have an assembler. + +These files were prepared from the 3/13/1992 version of JMEMDOSA.ASM, +which is still unchanged as of mid-1998. You can use these files with +releases 3 through 6 of the IJG code, and probably future releases too. + +To use these files, copy the proper version to JMEMDOSA.OBJ. Make sure +this file has a newer date than JMEMDOSA.ASM. Then compile the code as +usual. + +Object files included: + +JDOSAMSC.OBJ For Microsoft C version 5 or later. +JDOSABCC.OBJ For Borland C version 3.0 or later. diff --git a/3rdparty/openctm/tools/jpeg/jdpostct.c b/3rdparty/openctm/tools/jpeg/jdpostct.c new file mode 100644 index 000000000..7ba9eed52 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdpostct.c @@ -0,0 +1,290 @@ +/* + * jdpostct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the decompression postprocessing controller. + * This controller manages the upsampling, color conversion, and color + * quantization/reduction steps; specifically, it controls the buffering + * between upsample/color conversion and color quantization/reduction. + * + * If no color quantization/reduction is required, then this module has no + * work to do, and it just hands off to the upsample/color conversion code. + * An integrated upsample/convert/quantize process would replace this module + * entirely. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_post_controller pub; /* public fields */ + + /* Color quantization source buffer: this holds output data from + * the upsample/color conversion step to be passed to the quantizer. + * For two-pass color quantization, we need a full-image buffer; + * for one-pass operation, a strip buffer is sufficient. + */ + jvirt_sarray_ptr whole_image; /* virtual array, or NULL if one-pass */ + JSAMPARRAY buffer; /* strip buffer, or current strip of virtual */ + JDIMENSION strip_height; /* buffer size in rows */ + /* for two-pass mode only: */ + JDIMENSION starting_row; /* row # of first row in current strip */ + JDIMENSION next_row; /* index of next row to fill/empty in strip */ +} my_post_controller; + +typedef my_post_controller * my_post_ptr; + + +/* Forward declarations */ +METHODDEF(void) post_process_1pass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +#ifdef QUANT_2PASS_SUPPORTED +METHODDEF(void) post_process_prepass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +METHODDEF(void) post_process_2pass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +#endif + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (cinfo->quantize_colors) { + /* Single-pass processing with color quantization. */ + post->pub.post_process_data = post_process_1pass; + /* We could be doing buffered-image output before starting a 2-pass + * color quantization; in that case, jinit_d_post_controller did not + * allocate a strip buffer. Use the virtual-array buffer as workspace. + */ + if (post->buffer == NULL) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + (JDIMENSION) 0, post->strip_height, TRUE); + } + } else { + /* For single-pass processing without color quantization, + * I have no work to do; just call the upsampler directly. + */ + post->pub.post_process_data = cinfo->upsample->upsample; + } + break; +#ifdef QUANT_2PASS_SUPPORTED + case JBUF_SAVE_AND_PASS: + /* First pass of 2-pass quantization */ + if (post->whole_image == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + post->pub.post_process_data = post_process_prepass; + break; + case JBUF_CRANK_DEST: + /* Second pass of 2-pass quantization */ + if (post->whole_image == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + post->pub.post_process_data = post_process_2pass; + break; +#endif /* QUANT_2PASS_SUPPORTED */ + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } + post->starting_row = post->next_row = 0; +} + + +/* + * Process some data in the one-pass (strip buffer) case. + * This is used for color precision reduction as well as one-pass quantization. + */ + +METHODDEF(void) +post_process_1pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION num_rows, max_rows; + + /* Fill the buffer, but not more than what we can dump out in one go. */ + /* Note we rely on the upsampler to detect bottom of image. */ + max_rows = out_rows_avail - *out_row_ctr; + if (max_rows > post->strip_height) + max_rows = post->strip_height; + num_rows = 0; + (*cinfo->upsample->upsample) (cinfo, + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &num_rows, max_rows); + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer, output_buf + *out_row_ctr, (int) num_rows); + *out_row_ctr += num_rows; +} + + +#ifdef QUANT_2PASS_SUPPORTED + +/* + * Process some data in the first pass of 2-pass quantization. + */ + +METHODDEF(void) +post_process_prepass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION old_next_row, num_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + post->starting_row, post->strip_height, TRUE); + } + + /* Upsample some data (up to a strip height's worth). */ + old_next_row = post->next_row; + (*cinfo->upsample->upsample) (cinfo, + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &post->next_row, post->strip_height); + + /* Allow quantizer to scan new data. No data is emitted, */ + /* but we advance out_row_ctr so outer loop can tell when we're done. */ + if (post->next_row > old_next_row) { + num_rows = post->next_row - old_next_row; + (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, + (JSAMPARRAY) NULL, (int) num_rows); + *out_row_ctr += num_rows; + } + + /* Advance if we filled the strip. */ + if (post->next_row >= post->strip_height) { + post->starting_row += post->strip_height; + post->next_row = 0; + } +} + + +/* + * Process some data in the second pass of 2-pass quantization. + */ + +METHODDEF(void) +post_process_2pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION num_rows, max_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + post->starting_row, post->strip_height, FALSE); + } + + /* Determine number of rows to emit. */ + num_rows = post->strip_height - post->next_row; /* available in strip */ + max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ + if (num_rows > max_rows) + num_rows = max_rows; + /* We have to check bottom of image here, can't depend on upsampler. */ + max_rows = cinfo->output_height - post->starting_row; + if (num_rows > max_rows) + num_rows = max_rows; + + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer + post->next_row, output_buf + *out_row_ctr, + (int) num_rows); + *out_row_ctr += num_rows; + + /* Advance if we filled the strip. */ + post->next_row += num_rows; + if (post->next_row >= post->strip_height) { + post->starting_row += post->strip_height; + post->next_row = 0; + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ + + +/* + * Initialize postprocessing controller. + */ + +GLOBAL(void) +jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_post_ptr post; + + post = (my_post_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_post_controller)); + cinfo->post = (struct jpeg_d_post_controller *) post; + post->pub.start_pass = start_pass_dpost; + post->whole_image = NULL; /* flag for no virtual arrays */ + post->buffer = NULL; /* flag for no strip buffer */ + + /* Create the quantization buffer, if needed */ + if (cinfo->quantize_colors) { + /* The buffer strip height is max_v_samp_factor, which is typically + * an efficient number of rows for upsampling to return. + * (In the presence of output rescaling, we might want to be smarter?) + */ + post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; + if (need_full_buffer) { + /* Two-pass color quantization: need full-image storage. */ + /* We round up the number of rows to a multiple of the strip height. */ +#ifdef QUANT_2PASS_SUPPORTED + post->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + cinfo->output_width * cinfo->out_color_components, + (JDIMENSION) jround_up((long) cinfo->output_height, + (long) post->strip_height), + post->strip_height); +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif /* QUANT_2PASS_SUPPORTED */ + } else { + /* One-pass color quantization: just make a strip buffer. */ + post->buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width * cinfo->out_color_components, + post->strip_height); + } + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdsample.c b/3rdparty/openctm/tools/jpeg/jdsample.c new file mode 100644 index 000000000..94f9599f0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdsample.c @@ -0,0 +1,361 @@ +/* + * jdsample.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * Modified 2002-2008 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains upsampling routines. + * + * Upsampling input data is counted in "row groups". A row group + * is defined to be (v_samp_factor * DCT_v_scaled_size / min_DCT_v_scaled_size) + * sample rows of each component. Upsampling will normally produce + * max_v_samp_factor pixel rows from each row group (but this could vary + * if the upsampler is applying a scale factor of its own). + * + * An excellent reference for image resampling is + * Digital Image Warping, George Wolberg, 1990. + * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Pointer to routine to upsample a single component */ +typedef JMETHOD(void, upsample1_ptr, + (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)); + +/* Private subobject */ + +typedef struct { + struct jpeg_upsampler pub; /* public fields */ + + /* Color conversion buffer. When using separate upsampling and color + * conversion steps, this buffer holds one upsampled row group until it + * has been color converted and output. + * Note: we do not allocate any storage for component(s) which are full-size, + * ie do not need rescaling. The corresponding entry of color_buf[] is + * simply set to point to the input data array, thereby avoiding copying. + */ + JSAMPARRAY color_buf[MAX_COMPONENTS]; + + /* Per-component upsampling method pointers */ + upsample1_ptr methods[MAX_COMPONENTS]; + + int next_row_out; /* counts rows emitted from color_buf */ + JDIMENSION rows_to_go; /* counts rows remaining in image */ + + /* Height of an input row group for each component. */ + int rowgroup_height[MAX_COMPONENTS]; + + /* These arrays save pixel expansion factors so that int_expand need not + * recompute them each time. They are unused for other upsampling methods. + */ + UINT8 h_expand[MAX_COMPONENTS]; + UINT8 v_expand[MAX_COMPONENTS]; +} my_upsampler; + +typedef my_upsampler * my_upsample_ptr; + + +/* + * Initialize for an upsampling pass. + */ + +METHODDEF(void) +start_pass_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the conversion buffer empty */ + upsample->next_row_out = cinfo->max_v_samp_factor; + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; +} + + +/* + * Control routine to do upsampling (and color conversion). + * + * In this version we upsample each component independently. + * We upsample one row group into the conversion buffer, then apply + * color conversion a row at a time. + */ + +METHODDEF(void) +sep_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + int ci; + jpeg_component_info * compptr; + JDIMENSION num_rows; + + /* Fill the conversion buffer, if it's empty */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Invoke per-component upsample method. Notice we pass a POINTER + * to color_buf[ci], so that fullsize_upsample can change it. + */ + (*upsample->methods[ci]) (cinfo, compptr, + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + upsample->color_buf + ci); + } + upsample->next_row_out = 0; + } + + /* Color-convert and emit rows */ + + /* How many we have in the buffer: */ + num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); + /* Not more than the distance to the end of the image. Need this test + * in case the image height is not a multiple of max_v_samp_factor: + */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + + (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, + (JDIMENSION) upsample->next_row_out, + output_buf + *out_row_ctr, + (int) num_rows); + + /* Adjust counts */ + *out_row_ctr += num_rows; + upsample->rows_to_go -= num_rows; + upsample->next_row_out += num_rows; + /* When the buffer is emptied, declare this input row group consumed */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) + (*in_row_group_ctr)++; +} + + +/* + * These are the routines invoked by sep_upsample to upsample pixel values + * of a single component. One row group is processed per call. + */ + + +/* + * For full-size components, we just make color_buf[ci] point at the + * input buffer, and thus avoid copying any data. Note that this is + * safe only because sep_upsample doesn't declare the input row group + * "consumed" until we are done color converting and emitting it. + */ + +METHODDEF(void) +fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = input_data; +} + + +/* + * This is a no-op version used for "uninteresting" components. + * These components will not be referenced by color conversion. + */ + +METHODDEF(void) +noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = NULL; /* safety check */ +} + + +/* + * This version handles any integral sampling ratios. + * This is not used for typical JPEG files, so it need not be fast. + * Nor, for that matter, is it particularly accurate: the algorithm is + * simple replication of the input pixel onto the corresponding output + * pixels. The hi-falutin sampling literature refers to this as a + * "box filter". A box filter tends to introduce visible artifacts, + * so if you are actually going to use 3:1 or 4:1 sampling ratios + * you would be well advised to improve this code. + */ + +METHODDEF(void) +int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + register int h; + JSAMPROW outend; + int h_expand, v_expand; + int inrow, outrow; + + h_expand = upsample->h_expand[compptr->component_index]; + v_expand = upsample->v_expand[compptr->component_index]; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + /* Generate one output row with proper horizontal expansion */ + inptr = input_data[inrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + for (h = h_expand; h > 0; h--) { + *outptr++ = invalue; + } + } + /* Generate any additional output rows by duplicating the first one */ + if (v_expand > 1) { + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + v_expand-1, cinfo->output_width); + } + inrow++; + outrow += v_expand; + } +} + + +/* + * Fast processing for the common case of 2:1 horizontal and 1:1 vertical. + * It's still a box filter. + */ + +METHODDEF(void) +h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int outrow; + + for (outrow = 0; outrow < cinfo->max_v_samp_factor; outrow++) { + inptr = input_data[outrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + } +} + + +/* + * Fast processing for the common case of 2:1 horizontal and 2:1 vertical. + * It's still a box filter. + */ + +METHODDEF(void) +h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int inrow, outrow; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + inptr = input_data[inrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 1, cinfo->output_width); + inrow++; + outrow += 2; + } +} + + +/* + * Module initialization routine for upsampling. + */ + +GLOBAL(void) +jinit_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + int ci; + jpeg_component_info * compptr; + boolean need_buffer; + int h_in_group, v_in_group, h_out_group, v_out_group; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_upsample; + upsample->pub.upsample = sep_upsample; + upsample->pub.need_context_rows = FALSE; /* until we find out differently */ + + if (cinfo->CCIR601_sampling) /* this isn't supported */ + ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); + + /* Verify we can handle the sampling factors, select per-component methods, + * and create storage as needed. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Compute size of an "input group" after IDCT scaling. This many samples + * are to be converted to max_h_samp_factor * max_v_samp_factor pixels. + */ + h_in_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) / + cinfo->min_DCT_h_scaled_size; + v_in_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + cinfo->min_DCT_v_scaled_size; + h_out_group = cinfo->max_h_samp_factor; + v_out_group = cinfo->max_v_samp_factor; + upsample->rowgroup_height[ci] = v_in_group; /* save for use later */ + need_buffer = TRUE; + if (! compptr->component_needed) { + /* Don't bother to upsample an uninteresting component. */ + upsample->methods[ci] = noop_upsample; + need_buffer = FALSE; + } else if (h_in_group == h_out_group && v_in_group == v_out_group) { + /* Fullsize components can be processed without any work. */ + upsample->methods[ci] = fullsize_upsample; + need_buffer = FALSE; + } else if (h_in_group * 2 == h_out_group && + v_in_group == v_out_group) { + /* Special case for 2h1v upsampling */ + upsample->methods[ci] = h2v1_upsample; + } else if (h_in_group * 2 == h_out_group && + v_in_group * 2 == v_out_group) { + /* Special case for 2h2v upsampling */ + upsample->methods[ci] = h2v2_upsample; + } else if ((h_out_group % h_in_group) == 0 && + (v_out_group % v_in_group) == 0) { + /* Generic integral-factors upsampling method */ + upsample->methods[ci] = int_upsample; + upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group); + upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group); + } else + ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); + if (need_buffer) { + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) jround_up((long) cinfo->output_width, + (long) cinfo->max_h_samp_factor), + (JDIMENSION) cinfo->max_v_samp_factor); + } + } +} diff --git a/3rdparty/openctm/tools/jpeg/jdtrans.c b/3rdparty/openctm/tools/jpeg/jdtrans.c new file mode 100644 index 000000000..5e42c5bb0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jdtrans.c @@ -0,0 +1,136 @@ +/* + * jdtrans.c + * + * Copyright (C) 1995-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains library routines for transcoding decompression, + * that is, reading raw DCT coefficient arrays from an input JPEG file. + * The routines in jdapimin.c will also be needed by a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(void) transdecode_master_selection JPP((j_decompress_ptr cinfo)); + + +/* + * Read the coefficient arrays from a JPEG file. + * jpeg_read_header must be completed before calling this. + * + * The entire image is read into a set of virtual coefficient-block arrays, + * one per component. The return value is a pointer to the array of + * virtual-array descriptors. These can be manipulated directly via the + * JPEG memory manager, or handed off to jpeg_write_coefficients(). + * To release the memory occupied by the virtual arrays, call + * jpeg_finish_decompress() when done with the data. + * + * An alternative usage is to simply obtain access to the coefficient arrays + * during a buffered-image-mode decompression operation. This is allowed + * after any jpeg_finish_output() call. The arrays can be accessed until + * jpeg_finish_decompress() is called. (Note that any call to the library + * may reposition the arrays, so don't rely on access_virt_barray() results + * to stay valid across library calls.) + * + * Returns NULL if suspended. This case need be checked only if + * a suspending data source is used. + */ + +GLOBAL(jvirt_barray_ptr *) +jpeg_read_coefficients (j_decompress_ptr cinfo) +{ + if (cinfo->global_state == DSTATE_READY) { + /* First call: initialize active modules */ + transdecode_master_selection(cinfo); + cinfo->global_state = DSTATE_RDCOEFS; + } + if (cinfo->global_state == DSTATE_RDCOEFS) { + /* Absorb whole file into the coef buffer */ + for (;;) { + int retcode; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + /* Absorb some more input */ + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_SUSPENDED) + return NULL; + if (retcode == JPEG_REACHED_EOI) + break; + /* Advance progress counter if appropriate */ + if (cinfo->progress != NULL && + (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { + if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { + /* startup underestimated number of scans; ratchet up one scan */ + cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; + } + } + } + /* Set state so that jpeg_finish_decompress does the right thing */ + cinfo->global_state = DSTATE_STOPPING; + } + /* At this point we should be in state DSTATE_STOPPING if being used + * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access + * to the coefficients during a full buffered-image-mode decompression. + */ + if ((cinfo->global_state == DSTATE_STOPPING || + cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) { + return cinfo->coef->coef_arrays; + } + /* Oops, improper usage */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return NULL; /* keep compiler happy */ +} + + +/* + * Master selection of decompression modules for transcoding. + * This substitutes for jdmaster.c's initialization of the full decompressor. + */ + +LOCAL(void) +transdecode_master_selection (j_decompress_ptr cinfo) +{ + /* This is effectively a buffered-image operation. */ + cinfo->buffered_image = TRUE; + + /* Entropy decoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) + jinit_arith_decoder(cinfo); + else { + jinit_huff_decoder(cinfo); + } + + /* Always get a full-image coefficient buffer. */ + jinit_d_coef_controller(cinfo, TRUE); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Initialize input side of decompressor to consume first scan. */ + (*cinfo->inputctl->start_input_pass) (cinfo); + + /* Initialize progress monitoring. */ + if (cinfo->progress != NULL) { + int nscans; + /* Estimate number of scans to set pass_limit. */ + if (cinfo->progressive_mode) { + /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ + nscans = 2 + 3 * cinfo->num_components; + } else if (cinfo->inputctl->has_multiple_scans) { + /* For a nonprogressive multiscan file, estimate 1 scan per component. */ + nscans = cinfo->num_components; + } else { + nscans = 1; + } + cinfo->progress->pass_counter = 0L; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + cinfo->progress->completed_passes = 0; + cinfo->progress->total_passes = 1; + } +} diff --git a/3rdparty/openctm/tools/jpeg/jerror.c b/3rdparty/openctm/tools/jpeg/jerror.c new file mode 100644 index 000000000..c98aed76e --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jerror.c @@ -0,0 +1,252 @@ +/* + * jerror.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains simple error-reporting and trace-message routines. + * These are suitable for Unix-like systems and others where writing to + * stderr is the right thing to do. Many applications will want to replace + * some or all of these routines. + * + * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile, + * you get a Windows-specific hack to display error messages in a dialog box. + * It ain't much, but it beats dropping error messages into the bit bucket, + * which is what happens to output to stderr under most Windows C compilers. + * + * These routines are used by both the compression and decompression code. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jversion.h" +#include "jerror.h" + +#ifdef USE_WINDOWS_MESSAGEBOX +#include +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif + + +/* + * Create the message string table. + * We do this from the master message list in jerror.h by re-reading + * jerror.h with a suitable definition for macro JMESSAGE. + * The message table is made an external symbol just in case any applications + * want to refer to it directly. + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_message_table jMsgTable +#endif + +#define JMESSAGE(code,string) string , + +const char * const jpeg_std_message_table[] = { +#include "jerror.h" + NULL +}; + + +/* + * Error exit handler: must not return to caller. + * + * Applications may override this if they want to get control back after + * an error. Typically one would longjmp somewhere instead of exiting. + * The setjmp buffer can be made a private field within an expanded error + * handler object. Note that the info needed to generate an error message + * is stored in the error object, so you can generate the message now or + * later, at your convenience. + * You should make sure that the JPEG object is cleaned up (with jpeg_abort + * or jpeg_destroy) at some point. + */ + +METHODDEF(void) +error_exit (j_common_ptr cinfo) +{ + /* Always display the message */ + (*cinfo->err->output_message) (cinfo); + + /* Let the memory manager delete any temp files before we die */ + jpeg_destroy(cinfo); + + exit(EXIT_FAILURE); +} + + +/* + * Actual output of an error or trace message. + * Applications may override this method to send JPEG messages somewhere + * other than stderr. + * + * On Windows, printing to stderr is generally completely useless, + * so we provide optional code to produce an error-dialog popup. + * Most Windows applications will still prefer to override this routine, + * but if they don't, it'll do something at least marginally useful. + * + * NOTE: to use the library in an environment that doesn't support the + * C stdio library, you may have to delete the call to fprintf() entirely, + * not just not use this routine. + */ + +METHODDEF(void) +output_message (j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + /* Create the message */ + (*cinfo->err->format_message) (cinfo, buffer); + +#ifdef USE_WINDOWS_MESSAGEBOX + /* Display it in a message dialog box */ + MessageBox(GetActiveWindow(), buffer, "JPEG Library Error", + MB_OK | MB_ICONERROR); +#else + /* Send it to stderr, adding a newline */ + fprintf(stderr, "%s\n", buffer); +#endif +} + + +/* + * Decide whether to emit a trace or warning message. + * msg_level is one of: + * -1: recoverable corrupt-data warning, may want to abort. + * 0: important advisory messages (always display to user). + * 1: first level of tracing detail. + * 2,3,...: successively more detailed tracing messages. + * An application might override this method if it wanted to abort on warnings + * or change the policy about which messages to display. + */ + +METHODDEF(void) +emit_message (j_common_ptr cinfo, int msg_level) +{ + struct jpeg_error_mgr * err = cinfo->err; + + if (msg_level < 0) { + /* It's a warning message. Since corrupt files may generate many warnings, + * the policy implemented here is to show only the first warning, + * unless trace_level >= 3. + */ + if (err->num_warnings == 0 || err->trace_level >= 3) + (*err->output_message) (cinfo); + /* Always count warnings in num_warnings. */ + err->num_warnings++; + } else { + /* It's a trace message. Show it if trace_level >= msg_level. */ + if (err->trace_level >= msg_level) + (*err->output_message) (cinfo); + } +} + + +/* + * Format a message string for the most recent JPEG error or message. + * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX + * characters. Note that no '\n' character is added to the string. + * Few applications should need to override this method. + */ + +METHODDEF(void) +format_message (j_common_ptr cinfo, char * buffer) +{ + struct jpeg_error_mgr * err = cinfo->err; + int msg_code = err->msg_code; + const char * msgtext = NULL; + const char * msgptr; + char ch; + boolean isstring; + + /* Look up message string in proper table */ + if (msg_code > 0 && msg_code <= err->last_jpeg_message) { + msgtext = err->jpeg_message_table[msg_code]; + } else if (err->addon_message_table != NULL && + msg_code >= err->first_addon_message && + msg_code <= err->last_addon_message) { + msgtext = err->addon_message_table[msg_code - err->first_addon_message]; + } + + /* Defend against bogus message number */ + if (msgtext == NULL) { + err->msg_parm.i[0] = msg_code; + msgtext = err->jpeg_message_table[0]; + } + + /* Check for string parameter, as indicated by %s in the message text */ + isstring = FALSE; + msgptr = msgtext; + while ((ch = *msgptr++) != '\0') { + if (ch == '%') { + if (*msgptr == 's') isstring = TRUE; + break; + } + } + + /* Format the message into the passed buffer */ + if (isstring) + sprintf(buffer, msgtext, err->msg_parm.s); + else + sprintf(buffer, msgtext, + err->msg_parm.i[0], err->msg_parm.i[1], + err->msg_parm.i[2], err->msg_parm.i[3], + err->msg_parm.i[4], err->msg_parm.i[5], + err->msg_parm.i[6], err->msg_parm.i[7]); +} + + +/* + * Reset error state variables at start of a new image. + * This is called during compression startup to reset trace/error + * processing to default state, without losing any application-specific + * method pointers. An application might possibly want to override + * this method if it has additional error processing state. + */ + +METHODDEF(void) +reset_error_mgr (j_common_ptr cinfo) +{ + cinfo->err->num_warnings = 0; + /* trace_level is not reset since it is an application-supplied parameter */ + cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ +} + + +/* + * Fill in the standard error-handling methods in a jpeg_error_mgr object. + * Typical call is: + * struct jpeg_compress_struct cinfo; + * struct jpeg_error_mgr err; + * + * cinfo.err = jpeg_std_error(&err); + * after which the application may override some of the methods. + */ + +GLOBAL(struct jpeg_error_mgr *) +jpeg_std_error (struct jpeg_error_mgr * err) +{ + err->error_exit = error_exit; + err->emit_message = emit_message; + err->output_message = output_message; + err->format_message = format_message; + err->reset_error_mgr = reset_error_mgr; + + err->trace_level = 0; /* default = no tracing */ + err->num_warnings = 0; /* no warnings emitted yet */ + err->msg_code = 0; /* may be useful as a flag for "no error" */ + + /* Initialize message table pointers */ + err->jpeg_message_table = jpeg_std_message_table; + err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; + + err->addon_message_table = NULL; + err->first_addon_message = 0; /* for safety */ + err->last_addon_message = 0; + + return err; +} diff --git a/3rdparty/openctm/tools/jpeg/jerror.h b/3rdparty/openctm/tools/jpeg/jerror.h new file mode 100644 index 000000000..478b74d78 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jerror.h @@ -0,0 +1,304 @@ +/* + * jerror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * Modified 1997-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the JPEG library. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + * A set of error-reporting macros are defined too. Some applications using + * the JPEG library may wish to include this file to get the error codes + * and/or the macros. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef JERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* JERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ + +/* For maintenance convenience, list is alphabetical by message code name */ +JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") +JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") +JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") +JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") +JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request") +JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") +JMESSAGE(JERR_BAD_DCTSIZE, "DCT scaled block size %dx%d not supported") +JMESSAGE(JERR_BAD_DROP_SAMPLING, + "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c") +JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") +JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") +JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") +JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") +JMESSAGE(JERR_BAD_LIB_VERSION, + "Wrong JPEG library version: library is %d, caller expects %d") +JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") +JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") +JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") +JMESSAGE(JERR_BAD_PROGRESSION, + "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") +JMESSAGE(JERR_BAD_PROG_SCRIPT, + "Invalid progressive parameters at scan script entry %d") +JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") +JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") +JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") +JMESSAGE(JERR_BAD_STRUCT_SIZE, + "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") +JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") +JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") +JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") +JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") +JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") +JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") +JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") +JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") +JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") +JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") +JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") +JMESSAGE(JERR_EMS_READ, "Read from EMS failed") +JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") +JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") +JMESSAGE(JERR_FILE_READ, "Input file read error") +JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") +JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") +JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") +JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") +JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") +JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") +JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") +JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, + "Cannot transcode due to multiple use of quantization table %d") +JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") +JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") +JMESSAGE(JERR_NOTIMPL, "Not implemented yet") +JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") +JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined") +JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") +JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") +JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") +JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") +JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") +JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") +JMESSAGE(JERR_QUANT_COMPONENTS, + "Cannot quantize more than %d color components") +JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") +JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") +JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") +JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") +JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") +JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") +JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") +JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") +JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") +JMESSAGE(JERR_TFILE_WRITE, + "Write failed on temporary file --- out of disk space?") +JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") +JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") +JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") +JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") +JMESSAGE(JERR_XMS_READ, "Read from XMS failed") +JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") +JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) +JMESSAGE(JMSG_VERSION, JVERSION) +JMESSAGE(JTRC_16BIT_TABLES, + "Caution: quantization tables are too coarse for baseline JPEG") +JMESSAGE(JTRC_ADOBE, + "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") +JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") +JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") +JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") +JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") +JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") +JMESSAGE(JTRC_DRI, "Define Restart Interval %u") +JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") +JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") +JMESSAGE(JTRC_EOI, "End Of Image") +JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") +JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") +JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, + "Warning: thumbnail image size does not match data length %u") +JMESSAGE(JTRC_JFIF_EXTENSION, + "JFIF extension marker: type 0x%02x, length %u") +JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") +JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") +JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") +JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") +JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") +JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") +JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") +JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") +JMESSAGE(JTRC_RST, "RST%d") +JMESSAGE(JTRC_SMOOTH_NOTIMPL, + "Smoothing not supported with nonstandard sampling ratios") +JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") +JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") +JMESSAGE(JTRC_SOI, "Start of Image") +JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") +JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") +JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") +JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") +JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") +JMESSAGE(JTRC_THUMB_JPEG, + "JFIF extension marker: JPEG-compressed thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_PALETTE, + "JFIF extension marker: palette thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_RGB, + "JFIF extension marker: RGB thumbnail image, length %u") +JMESSAGE(JTRC_UNKNOWN_IDS, + "Unrecognized component IDs %d %d %d, assuming YCbCr") +JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") +JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") +JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") +JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code") +JMESSAGE(JWRN_BOGUS_PROGRESSION, + "Inconsistent progression sequence for component %d coefficient %d") +JMESSAGE(JWRN_EXTRANEOUS_DATA, + "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") +JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") +JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") +JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") +JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") +JMESSAGE(JWRN_MUST_RESYNC, + "Corrupt JPEG data: found marker 0x%02x instead of RST%d") +JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") +JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTMSGCODE +} J_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE + + +#ifndef JERROR_H +#define JERROR_H + +/* Macros to simplify using the error and trace message stuff */ +/* The first parameter is either type of cinfo pointer */ + +/* Fatal errors (print message and exit) */ +#define ERREXIT(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT3(cinfo,code,p1,p2,p3) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT6(cinfo,code,p1,p2,p3,p4,p5,p6) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (cinfo)->err->msg_parm.i[4] = (p5), \ + (cinfo)->err->msg_parm.i[5] = (p6), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXITS(cinfo,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) + +#define MAKESTMT(stuff) do { stuff } while (0) + +/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ +#define WARNMS(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) + +/* Informational/debugging messages */ +#define TRACEMS(cinfo,lvl,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS1(cinfo,lvl,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS2(cinfo,lvl,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMSS(cinfo,lvl,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) + +#endif /* JERROR_H */ diff --git a/3rdparty/openctm/tools/jpeg/jfdctflt.c b/3rdparty/openctm/tools/jpeg/jfdctflt.c new file mode 100644 index 000000000..3c1b17480 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jfdctflt.c @@ -0,0 +1,174 @@ +/* + * jfdctflt.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2003-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a floating-point implementation of the + * forward DCT (Discrete Cosine Transform). + * + * This implementation should be more accurate than either of the integer + * DCT implementations. However, it may not give the same results on all + * machines because of differences in roundoff behavior. Speed will depend + * on the hardware's floating point capacity. + * + * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT + * on each column. Direct algorithms are also available, but they are + * much more complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with a fixed-point + * implementation, accuracy is lost due to imprecise representation of the + * scaled quantization values. However, that problem does not arise if + * we use floating point arithmetic. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_FLOAT_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* + * Perform the forward DCT on one block of samples. + */ + +GLOBAL(void) +jpeg_fdct_float (FAST_FLOAT * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + FAST_FLOAT tmp10, tmp11, tmp12, tmp13; + FAST_FLOAT z1, z2, z3, z4, z5, z11, z13; + FAST_FLOAT *dataptr; + JSAMPROW elemptr; + int ctr; + + /* Pass 1: process rows. */ + + dataptr = data; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Load data into workspace */ + tmp0 = (FAST_FLOAT) (GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7])); + tmp7 = (FAST_FLOAT) (GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7])); + tmp1 = (FAST_FLOAT) (GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6])); + tmp6 = (FAST_FLOAT) (GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6])); + tmp2 = (FAST_FLOAT) (GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5])); + tmp5 = (FAST_FLOAT) (GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5])); + tmp3 = (FAST_FLOAT) (GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4])); + tmp4 = (FAST_FLOAT) (GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4])); + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + /* Apply unsigned->signed conversion */ + dataptr[0] = tmp10 + tmp11 - 8 * CENTERJSAMPLE; /* phase 3 */ + dataptr[4] = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ + dataptr[2] = tmp13 + z1; /* phase 5 */ + dataptr[6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ + z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ + z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ + z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[5] = z13 + z2; /* phase 6 */ + dataptr[3] = z13 - z2; + dataptr[1] = z11 + z4; + dataptr[7] = z11 - z4; + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ + dataptr[DCTSIZE*4] = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ + dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ + dataptr[DCTSIZE*6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ + z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ + z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ + z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ + dataptr[DCTSIZE*3] = z13 - z2; + dataptr[DCTSIZE*1] = z11 + z4; + dataptr[DCTSIZE*7] = z11 - z4; + + dataptr++; /* advance pointer to next column */ + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jfdctfst.c b/3rdparty/openctm/tools/jpeg/jfdctfst.c new file mode 100644 index 000000000..82b92317b --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jfdctfst.c @@ -0,0 +1,230 @@ +/* + * jfdctfst.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2003-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a fast, not so accurate integer implementation of the + * forward DCT (Discrete Cosine Transform). + * + * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT + * on each column. Direct algorithms are also available, but they are + * much more complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with fixed-point math, + * accuracy is lost due to imprecise representation of the scaled + * quantization values. The smaller the quantization table entry, the less + * precise the scaled value, so this implementation does worse with high- + * quality-setting files than with low-quality ones. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_IFAST_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling decisions are generally the same as in the LL&M algorithm; + * see jfdctint.c for more details. However, we choose to descale + * (right shift) multiplication products as soon as they are formed, + * rather than carrying additional fractional bits into subsequent additions. + * This compromises accuracy slightly, but it lets us save a few shifts. + * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) + * everywhere except in the multiplications proper; this saves a good deal + * of work on 16-bit-int machines. + * + * Again to save a few shifts, the intermediate results between pass 1 and + * pass 2 are not upscaled, but are represented only to integral precision. + * + * A final compromise is to represent the multiplicative constants to only + * 8 fractional bits, rather than 13. This saves some shifting work on some + * machines, and may also reduce the cost of multiplication (since there + * are fewer one-bits in the constants). + */ + +#define CONST_BITS 8 + + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 8 +#define FIX_0_382683433 ((INT32) 98) /* FIX(0.382683433) */ +#define FIX_0_541196100 ((INT32) 139) /* FIX(0.541196100) */ +#define FIX_0_707106781 ((INT32) 181) /* FIX(0.707106781) */ +#define FIX_1_306562965 ((INT32) 334) /* FIX(1.306562965) */ +#else +#define FIX_0_382683433 FIX(0.382683433) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_707106781 FIX(0.707106781) +#define FIX_1_306562965 FIX(1.306562965) +#endif + + +/* We can gain a little more speed, with a further compromise in accuracy, + * by omitting the addition in a descaling shift. This yields an incorrectly + * rounded result half the time... + */ + +#ifndef USE_ACCURATE_ROUNDING +#undef DESCALE +#define DESCALE(x,n) RIGHT_SHIFT(x, n) +#endif + + +/* Multiply a DCTELEM variable by an INT32 constant, and immediately + * descale to yield a DCTELEM result. + */ + +#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) + + +/* + * Perform the forward DCT on one block of samples. + */ + +GLOBAL(void) +jpeg_fdct_ifast (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + DCTELEM tmp10, tmp11, tmp12, tmp13; + DCTELEM z1, z2, z3, z4, z5, z11, z13; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + + dataptr = data; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Load data into workspace */ + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); + tmp7 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]); + tmp6 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]); + tmp5 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]); + tmp4 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]); + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + /* Apply unsigned->signed conversion */ + dataptr[0] = tmp10 + tmp11 - 8 * CENTERJSAMPLE; /* phase 3 */ + dataptr[4] = tmp10 - tmp11; + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ + dataptr[2] = tmp13 + z1; /* phase 5 */ + dataptr[6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ + z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ + z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ + z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[5] = z13 + z2; /* phase 6 */ + dataptr[3] = z13 - z2; + dataptr[1] = z11 + z4; + dataptr[7] = z11 - z4; + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ + dataptr[DCTSIZE*4] = tmp10 - tmp11; + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ + dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ + dataptr[DCTSIZE*6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ + z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ + z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ + z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ + dataptr[DCTSIZE*3] = z13 - z2; + dataptr[DCTSIZE*1] = z11 + z4; + dataptr[DCTSIZE*7] = z11 - z4; + + dataptr++; /* advance pointer to next column */ + } +} + +#endif /* DCT_IFAST_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jfdctint.c b/3rdparty/openctm/tools/jpeg/jfdctint.c new file mode 100644 index 000000000..529eaf867 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jfdctint.c @@ -0,0 +1,4348 @@ +/* + * jfdctint.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * Modification developed 2003-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a slow-but-accurate integer implementation of the + * forward DCT (Discrete Cosine Transform). + * + * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT + * on each column. Direct algorithms are also available, but they are + * much more complex and seem not to be any faster when reduced to code. + * + * This implementation is based on an algorithm described in + * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT + * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, + * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. + * The primary algorithm described there uses 11 multiplies and 29 adds. + * We use their alternate method with 12 multiplies and 32 adds. + * The advantage of this method is that no data path contains more than one + * multiplication; this allows a very simple and accurate implementation in + * scaled fixed-point arithmetic, with a minimal number of shifts. + * + * We also provide FDCT routines with various input sample block sizes for + * direct resolution reduction or enlargement and for direct resolving the + * common 2x1 and 1x2 subsampling cases without additional resampling: NxN + * (N=1...16), 2NxN, and Nx2N (N=1...8) pixels for one 8x8 output DCT block. + * + * For N<8 we fill the remaining block coefficients with zero. + * For N>8 we apply a partial N-point FDCT on the input samples, computing + * just the lower 8 frequency coefficients and discarding the rest. + * + * We must scale the output coefficients of the N-point FDCT appropriately + * to the standard 8-point FDCT level by 8/N per 1-D pass. This scaling + * is folded into the constant multipliers (pass 2) and/or final/initial + * shifting. + * + * CAUTION: We rely on the FIX() macro except for the N=1,2,4,8 cases + * since there would be too many additional constants to pre-calculate. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_ISLOW_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCT blocks. /* deliberate syntax err */ +#endif + + +/* + * The poop on this scaling stuff is as follows: + * + * Each 1-D DCT step produces outputs which are a factor of sqrt(N) + * larger than the true DCT outputs. The final outputs are therefore + * a factor of N larger than desired; since N=8 this can be cured by + * a simple right shift at the end of the algorithm. The advantage of + * this arrangement is that we save two multiplications per 1-D DCT, + * because the y0 and y4 outputs need not be divided by sqrt(N). + * In the IJG code, this factor of 8 is removed by the quantization step + * (in jcdctmgr.c), NOT in this module. + * + * We have to do addition and subtraction of the integer inputs, which + * is no problem, and multiplication by fractional constants, which is + * a problem to do in integer arithmetic. We multiply all the constants + * by CONST_SCALE and convert them to integer constants (thus retaining + * CONST_BITS bits of precision in the constants). After doing a + * multiplication we have to divide the product by CONST_SCALE, with proper + * rounding, to produce the correct output. This division can be done + * cheaply as a right shift of CONST_BITS bits. We postpone shifting + * as long as possible so that partial sums can be added together with + * full fractional precision. + * + * The outputs of the first pass are scaled up by PASS1_BITS bits so that + * they are represented to better-than-integral precision. These outputs + * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word + * with the recommended scaling. (For 12-bit sample data, the intermediate + * array is INT32 anyway.) + * + * To avoid overflow of the 32-bit intermediate results in pass 2, we must + * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis + * shows that the values given below are the most effective. + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ +#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ +#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ +#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ +#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ +#else +#define FIX_0_298631336 FIX(0.298631336) +#define FIX_0_390180644 FIX(0.390180644) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_175875602 FIX(1.175875602) +#define FIX_1_501321110 FIX(1.501321110) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_1_961570560 FIX(1.961570560) +#define FIX_2_053119869 FIX(2.053119869) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_072711026 FIX(3.072711026) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* + * Perform the forward DCT on one block of samples. + */ + +GLOBAL(void) +jpeg_fdct_islow (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + dataptr = data; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]); + + tmp10 = tmp0 + tmp3; + tmp12 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp13 = tmp1 - tmp2; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + dataptr[2] = (DCTELEM) RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), + CONST_BITS-PASS1_BITS); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * cK represents sqrt(2) * cos(K*pi/16). + * i0..i3 in the paper are tmp0..tmp3 here. + */ + + tmp10 = tmp0 + tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp0 + tmp2; + tmp13 = tmp1 + tmp3; + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ + tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + + tmp12 += z1; + tmp13 += z1; + + dataptr[1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) + RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) + RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) + RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + + /* Add fudge factor here for final descale. */ + tmp10 = tmp0 + tmp3 + (ONE << (PASS1_BITS-1)); + tmp12 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp13 = tmp1 - tmp2; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp10 + tmp11, PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) RIGHT_SHIFT(tmp10 - tmp11, PASS1_BITS); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS+PASS1_BITS-1); + dataptr[DCTSIZE*2] = (DCTELEM) + RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) + RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), CONST_BITS+PASS1_BITS); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * cK represents sqrt(2) * cos(K*pi/16). + * i0..i3 in the paper are tmp0..tmp3 here. + */ + + tmp10 = tmp0 + tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp0 + tmp2; + tmp13 = tmp1 + tmp3; + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS+PASS1_BITS-1); + + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ + tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + + tmp12 += z1; + tmp13 += z1; + + dataptr[DCTSIZE*1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) + RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*7] = (DCTELEM) + RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + +#ifdef DCT_SCALING_SUPPORTED + + +/* + * Perform the forward DCT on a 7x7 sample block. + */ + +GLOBAL(void) +jpeg_fdct_7x7 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* cK represents sqrt(2) * cos(K*pi/14). */ + + dataptr = data; + for (ctr = 0; ctr < 7; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[6]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[5]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[4]); + tmp3 = GETJSAMPLE(elemptr[3]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[6]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[5]); + tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[4]); + + z1 = tmp0 + tmp2; + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((z1 + tmp1 + tmp3 - 7 * CENTERJSAMPLE) << PASS1_BITS); + tmp3 += tmp3; + z1 -= tmp3; + z1 -= tmp3; + z1 = MULTIPLY(z1, FIX(0.353553391)); /* (c2+c6-c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp2, FIX(0.920609002)); /* (c2+c4-c6)/2 */ + z3 = MULTIPLY(tmp1 - tmp2, FIX(0.314692123)); /* c6 */ + dataptr[2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS-PASS1_BITS); + z1 -= z2; + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.881747734)); /* c4 */ + dataptr[4] = (DCTELEM) + DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.707106781)), /* c2+c6-c4 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.613604268)); /* c5 */ + tmp0 += tmp3; + tmp2 += tmp3 + MULTIPLY(tmp12, FIX(1.870828693)); /* c3+c1-c5 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/7)**2 = 64/49, which we fold + * into the constant multipliers: + * cK now represents sqrt(2) * cos(K*pi/14) * 64/49. + */ + + dataptr = data; + for (ctr = 0; ctr < 7; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*6]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*5]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*4]; + tmp3 = dataptr[DCTSIZE*3]; + + tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*6]; + tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*5]; + tmp12 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*4]; + + z1 = tmp0 + tmp2; + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(z1 + tmp1 + tmp3, FIX(1.306122449)), /* 64/49 */ + CONST_BITS+PASS1_BITS); + tmp3 += tmp3; + z1 -= tmp3; + z1 -= tmp3; + z1 = MULTIPLY(z1, FIX(0.461784020)); /* (c2+c6-c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp2, FIX(1.202428084)); /* (c2+c4-c6)/2 */ + z3 = MULTIPLY(tmp1 - tmp2, FIX(0.411026446)); /* c6 */ + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS+PASS1_BITS); + z1 -= z2; + z2 = MULTIPLY(tmp0 - tmp1, FIX(1.151670509)); /* c4 */ + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.923568041)), /* c2+c6-c4 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.221765677)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.222383464)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.800824523)); /* -c1 */ + tmp1 += tmp2; + tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.801442310)); /* c5 */ + tmp0 += tmp3; + tmp2 += tmp3 + MULTIPLY(tmp12, FIX(2.443531355)); /* c3+c1-c5 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 6x6 sample block. + */ + +GLOBAL(void) +jpeg_fdct_6x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2; + INT32 tmp10, tmp11, tmp12; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* cK represents sqrt(2) * cos(K*pi/12). */ + + dataptr = data; + for (ctr = 0; ctr < 6; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[5]); + tmp11 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[4]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[3]); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[5]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[4]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[3]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 - 6 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp12, FIX(1.224744871)), /* c2 */ + CONST_BITS-PASS1_BITS); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(0.707106781)), /* c4 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp10 = DESCALE(MULTIPLY(tmp0 + tmp2, FIX(0.366025404)), /* c5 */ + CONST_BITS-PASS1_BITS); + + dataptr[1] = (DCTELEM) (tmp10 + ((tmp0 + tmp1) << PASS1_BITS)); + dataptr[3] = (DCTELEM) ((tmp0 - tmp1 - tmp2) << PASS1_BITS); + dataptr[5] = (DCTELEM) (tmp10 + ((tmp2 - tmp1) << PASS1_BITS)); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/6)**2 = 16/9, which we fold + * into the constant multipliers: + * cK now represents sqrt(2) * cos(K*pi/12) * 16/9. + */ + + dataptr = data; + for (ctr = 0; ctr < 6; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*5]; + tmp11 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3]; + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp12, FIX(2.177324216)), /* c2 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(1.257078722)), /* c4 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp2, FIX(0.650711829)); /* c5 */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0 + tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp2, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp2 - tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 5x5 sample block. + */ + +GLOBAL(void) +jpeg_fdct_5x5 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2; + INT32 tmp10, tmp11; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We scale the results further by 2 as part of output adaption */ + /* scaling for different DCT size. */ + /* cK represents sqrt(2) * cos(K*pi/10). */ + + dataptr = data; + for (ctr = 0; ctr < 5; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[4]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[3]); + tmp2 = GETJSAMPLE(elemptr[2]); + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[4]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[3]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp2 - 5 * CENTERJSAMPLE) << (PASS1_BITS+1)); + tmp11 = MULTIPLY(tmp11, FIX(0.790569415)); /* (c2+c4)/2 */ + tmp10 -= tmp2 << 2; + tmp10 = MULTIPLY(tmp10, FIX(0.353553391)); /* (c2-c4)/2 */ + dataptr[2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS-PASS1_BITS-1); + dataptr[4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS-PASS1_BITS-1); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp1, FIX(0.831253876)); /* c3 */ + + dataptr[1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.513743148)), /* c1-c3 */ + CONST_BITS-PASS1_BITS-1); + dataptr[3] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.176250899)), /* c1+c3 */ + CONST_BITS-PASS1_BITS-1); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/5)**2 = 64/25, which we partially + * fold into the constant multipliers (other part was done in pass 1): + * cK now represents sqrt(2) * cos(K*pi/10) * 32/25. + */ + + dataptr = data; + for (ctr = 0; ctr < 5; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*4]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*3]; + tmp2 = dataptr[DCTSIZE*2]; + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*4]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*3]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp2, FIX(1.28)), /* 32/25 */ + CONST_BITS+PASS1_BITS); + tmp11 = MULTIPLY(tmp11, FIX(1.011928851)); /* (c2+c4)/2 */ + tmp10 -= tmp2 << 2; + tmp10 = MULTIPLY(tmp10, FIX(0.452548340)); /* (c2-c4)/2 */ + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp1, FIX(1.064004961)); /* c3 */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.657591230)), /* c1-c3 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.785601151)), /* c1+c3 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 4x4 sample block. + */ + +GLOBAL(void) +jpeg_fdct_4x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1; + INT32 tmp10, tmp11; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We must also scale the output by (8/4)**2 = 2**2, which we add here. */ + /* cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. */ + + dataptr = data; + for (ctr = 0; ctr < 4; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[3]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[2]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[3]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[2]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp0 + tmp1 - 4 * CENTERJSAMPLE) << (PASS1_BITS+2)); + dataptr[2] = (DCTELEM) ((tmp0 - tmp1) << (PASS1_BITS+2)); + + /* Odd part */ + + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-3); + + dataptr[1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS-2); + dataptr[3] = (DCTELEM) + RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS-2); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + */ + + dataptr = data; + for (ctr = 0; ctr < 4; ctr++) { + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*3] + (ONE << (PASS1_BITS-1)); + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*2]; + + tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*3]; + tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*2]; + + dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp0 + tmp1, PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) RIGHT_SHIFT(tmp0 - tmp1, PASS1_BITS); + + /* Odd part */ + + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS+PASS1_BITS-1); + + dataptr[DCTSIZE*1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 3x3 sample block. + */ + +GLOBAL(void) +jpeg_fdct_3x3 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We scale the results further by 2**2 as part of output adaption */ + /* scaling for different DCT size. */ + /* cK represents sqrt(2) * cos(K*pi/6). */ + + dataptr = data; + for (ctr = 0; ctr < 3; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[2]); + tmp1 = GETJSAMPLE(elemptr[1]); + + tmp2 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[2]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp0 + tmp1 - 3 * CENTERJSAMPLE) << (PASS1_BITS+2)); + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(0.707106781)), /* c2 */ + CONST_BITS-PASS1_BITS-2); + + /* Odd part */ + + dataptr[1] = (DCTELEM) + DESCALE(MULTIPLY(tmp2, FIX(1.224744871)), /* c1 */ + CONST_BITS-PASS1_BITS-2); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/3)**2 = 64/9, which we partially + * fold into the constant multipliers (other part was done in pass 1): + * cK now represents sqrt(2) * cos(K*pi/6) * 16/9. + */ + + dataptr = data; + for (ctr = 0; ctr < 3; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*2]; + tmp1 = dataptr[DCTSIZE*1]; + + tmp2 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*2]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 + tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(1.257078722)), /* c2 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(MULTIPLY(tmp2, FIX(2.177324216)), /* c1 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 2x2 sample block. + */ + +GLOBAL(void) +jpeg_fdct_2x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + JSAMPROW elemptr; + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + + /* Row 0 */ + elemptr = sample_data[0] + start_col; + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[1]); + tmp1 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[1]); + + /* Row 1 */ + elemptr = sample_data[1] + start_col; + + tmp2 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[1]); + tmp3 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[1]); + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/2)**2 = 2**4. + */ + + /* Column 0 */ + /* Apply unsigned->signed conversion */ + data[DCTSIZE*0] = (DCTELEM) ((tmp0 + tmp2 - 4 * CENTERJSAMPLE) << 4); + data[DCTSIZE*1] = (DCTELEM) ((tmp0 - tmp2) << 4); + + /* Column 1 */ + data[DCTSIZE*0+1] = (DCTELEM) ((tmp1 + tmp3) << 4); + data[DCTSIZE*1+1] = (DCTELEM) ((tmp1 - tmp3) << 4); +} + + +/* + * Perform the forward DCT on a 1x1 sample block. + */ + +GLOBAL(void) +jpeg_fdct_1x1 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* We leave the result scaled up by an overall factor of 8. */ + /* We must also scale the output by (8/1)**2 = 2**6. */ + /* Apply unsigned->signed conversion */ + data[0] = (DCTELEM) + ((GETJSAMPLE(sample_data[0][start_col]) - CENTERJSAMPLE) << 6); +} + + +/* + * Perform the forward DCT on a 9x9 sample block. + */ + +GLOBAL(void) +jpeg_fdct_9x9 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2; + DCTELEM workspace[8]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* we scale the results further by 2 as part of output adaption */ + /* scaling for different DCT size. */ + /* cK represents sqrt(2) * cos(K*pi/18). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[8]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[7]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[6]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[5]); + tmp4 = GETJSAMPLE(elemptr[4]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[8]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[7]); + tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[6]); + tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[5]); + + z1 = tmp0 + tmp2 + tmp3; + z2 = tmp1 + tmp4; + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) ((z1 + z2 - 9 * CENTERJSAMPLE) << 1); + dataptr[6] = (DCTELEM) + DESCALE(MULTIPLY(z1 - z2 - z2, FIX(0.707106781)), /* c6 */ + CONST_BITS-1); + z1 = MULTIPLY(tmp0 - tmp2, FIX(1.328926049)); /* c2 */ + z2 = MULTIPLY(tmp1 - tmp4 - tmp4, FIX(0.707106781)); /* c6 */ + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp2 - tmp3, FIX(1.083350441)) /* c4 */ + + z1 + z2, CONST_BITS-1); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp3 - tmp0, FIX(0.245575608)) /* c8 */ + + z1 - z2, CONST_BITS-1); + + /* Odd part */ + + dataptr[3] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12 - tmp13, FIX(1.224744871)), /* c3 */ + CONST_BITS-1); + + tmp11 = MULTIPLY(tmp11, FIX(1.224744871)); /* c3 */ + tmp0 = MULTIPLY(tmp10 + tmp12, FIX(0.909038955)); /* c5 */ + tmp1 = MULTIPLY(tmp10 + tmp13, FIX(0.483689525)); /* c7 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp11 + tmp0 + tmp1, CONST_BITS-1); + + tmp2 = MULTIPLY(tmp12 - tmp13, FIX(1.392728481)); /* c1 */ + + dataptr[5] = (DCTELEM) DESCALE(tmp0 - tmp11 - tmp2, CONST_BITS-1); + dataptr[7] = (DCTELEM) DESCALE(tmp1 - tmp11 + tmp2, CONST_BITS-1); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 9) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/9)**2 = 64/81, which we partially + * fold into the constant multipliers and final/initial shifting: + * cK now represents sqrt(2) * cos(K*pi/18) * 128/81. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*0]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*7]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*6]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*5]; + tmp4 = dataptr[DCTSIZE*4]; + + tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*0]; + tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*7]; + tmp12 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*6]; + tmp13 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*5]; + + z1 = tmp0 + tmp2 + tmp3; + z2 = tmp1 + tmp4; + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(z1 + z2, FIX(1.580246914)), /* 128/81 */ + CONST_BITS+2); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(MULTIPLY(z1 - z2 - z2, FIX(1.117403309)), /* c6 */ + CONST_BITS+2); + z1 = MULTIPLY(tmp0 - tmp2, FIX(2.100031287)); /* c2 */ + z2 = MULTIPLY(tmp1 - tmp4 - tmp4, FIX(1.117403309)); /* c6 */ + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp2 - tmp3, FIX(1.711961190)) /* c4 */ + + z1 + z2, CONST_BITS+2); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp3 - tmp0, FIX(0.388070096)) /* c8 */ + + z1 - z2, CONST_BITS+2); + + /* Odd part */ + + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12 - tmp13, FIX(1.935399303)), /* c3 */ + CONST_BITS+2); + + tmp11 = MULTIPLY(tmp11, FIX(1.935399303)); /* c3 */ + tmp0 = MULTIPLY(tmp10 + tmp12, FIX(1.436506004)); /* c5 */ + tmp1 = MULTIPLY(tmp10 + tmp13, FIX(0.764348879)); /* c7 */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp11 + tmp0 + tmp1, CONST_BITS+2); + + tmp2 = MULTIPLY(tmp12 - tmp13, FIX(2.200854883)); /* c1 */ + + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(tmp0 - tmp11 - tmp2, CONST_BITS+2); + dataptr[DCTSIZE*7] = (DCTELEM) + DESCALE(tmp1 - tmp11 + tmp2, CONST_BITS+2); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 10x10 sample block. + */ + +GLOBAL(void) +jpeg_fdct_10x10 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + DCTELEM workspace[8*2]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* we scale the results further by 2 as part of output adaption */ + /* scaling for different DCT size. */ + /* cK represents sqrt(2) * cos(K*pi/20). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[9]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[8]); + tmp12 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[7]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[6]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[5]); + + tmp10 = tmp0 + tmp4; + tmp13 = tmp0 - tmp4; + tmp11 = tmp1 + tmp3; + tmp14 = tmp1 - tmp3; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[9]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[8]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[7]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[6]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[5]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 + tmp12 - 10 * CENTERJSAMPLE) << 1); + tmp12 += tmp12; + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.144122806)) - /* c4 */ + MULTIPLY(tmp11 - tmp12, FIX(0.437016024)), /* c8 */ + CONST_BITS-1); + tmp10 = MULTIPLY(tmp13 + tmp14, FIX(0.831253876)); /* c6 */ + dataptr[2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.513743148)), /* c2-c6 */ + CONST_BITS-1); + dataptr[6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.176250899)), /* c2+c6 */ + CONST_BITS-1); + + /* Odd part */ + + tmp10 = tmp0 + tmp4; + tmp11 = tmp1 - tmp3; + dataptr[5] = (DCTELEM) ((tmp10 - tmp11 - tmp2) << 1); + tmp2 <<= CONST_BITS; + dataptr[1] = (DCTELEM) + DESCALE(MULTIPLY(tmp0, FIX(1.396802247)) + /* c1 */ + MULTIPLY(tmp1, FIX(1.260073511)) + tmp2 + /* c3 */ + MULTIPLY(tmp3, FIX(0.642039522)) + /* c7 */ + MULTIPLY(tmp4, FIX(0.221231742)), /* c9 */ + CONST_BITS-1); + tmp12 = MULTIPLY(tmp0 - tmp4, FIX(0.951056516)) - /* (c3+c7)/2 */ + MULTIPLY(tmp1 + tmp3, FIX(0.587785252)); /* (c1-c9)/2 */ + tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.309016994)) + /* (c3-c7)/2 */ + (tmp11 << (CONST_BITS - 1)) - tmp2; + dataptr[3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS-1); + dataptr[7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS-1); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 10) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/10)**2 = 16/25, which we partially + * fold into the constant multipliers and final/initial shifting: + * cK now represents sqrt(2) * cos(K*pi/20) * 32/25. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*1]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*0]; + tmp12 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*7]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*6]; + tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*5]; + + tmp10 = tmp0 + tmp4; + tmp13 = tmp0 - tmp4; + tmp11 = tmp1 + tmp3; + tmp14 = tmp1 - tmp3; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*1]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*0]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*7]; + tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*6]; + tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*5]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(1.28)), /* 32/25 */ + CONST_BITS+2); + tmp12 += tmp12; + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.464477191)) - /* c4 */ + MULTIPLY(tmp11 - tmp12, FIX(0.559380511)), /* c8 */ + CONST_BITS+2); + tmp10 = MULTIPLY(tmp13 + tmp14, FIX(1.064004961)); /* c6 */ + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.657591230)), /* c2-c6 */ + CONST_BITS+2); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.785601151)), /* c2+c6 */ + CONST_BITS+2); + + /* Odd part */ + + tmp10 = tmp0 + tmp4; + tmp11 = tmp1 - tmp3; + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp2, FIX(1.28)), /* 32/25 */ + CONST_BITS+2); + tmp2 = MULTIPLY(tmp2, FIX(1.28)); /* 32/25 */ + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(MULTIPLY(tmp0, FIX(1.787906876)) + /* c1 */ + MULTIPLY(tmp1, FIX(1.612894094)) + tmp2 + /* c3 */ + MULTIPLY(tmp3, FIX(0.821810588)) + /* c7 */ + MULTIPLY(tmp4, FIX(0.283176630)), /* c9 */ + CONST_BITS+2); + tmp12 = MULTIPLY(tmp0 - tmp4, FIX(1.217352341)) - /* (c3+c7)/2 */ + MULTIPLY(tmp1 + tmp3, FIX(0.752365123)); /* (c1-c9)/2 */ + tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.395541753)) + /* (c3-c7)/2 */ + MULTIPLY(tmp11, FIX(0.64)) - tmp2; /* 16/25 */ + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS+2); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS+2); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on an 11x11 sample block. + */ + +GLOBAL(void) +jpeg_fdct_11x11 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 z1, z2, z3; + DCTELEM workspace[8*3]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* we scale the results further by 2 as part of output adaption */ + /* scaling for different DCT size. */ + /* cK represents sqrt(2) * cos(K*pi/22). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[10]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[9]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[8]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[7]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[6]); + tmp5 = GETJSAMPLE(elemptr[5]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[10]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[9]); + tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[8]); + tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[7]); + tmp14 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[6]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 - 11 * CENTERJSAMPLE) << 1); + tmp5 += tmp5; + tmp0 -= tmp5; + tmp1 -= tmp5; + tmp2 -= tmp5; + tmp3 -= tmp5; + tmp4 -= tmp5; + z1 = MULTIPLY(tmp0 + tmp3, FIX(1.356927976)) + /* c2 */ + MULTIPLY(tmp2 + tmp4, FIX(0.201263574)); /* c10 */ + z2 = MULTIPLY(tmp1 - tmp3, FIX(0.926112931)); /* c6 */ + z3 = MULTIPLY(tmp0 - tmp1, FIX(1.189712156)); /* c4 */ + dataptr[2] = (DCTELEM) + DESCALE(z1 + z2 - MULTIPLY(tmp3, FIX(1.018300590)) /* c2+c8-c6 */ + - MULTIPLY(tmp4, FIX(1.390975730)), /* c4+c10 */ + CONST_BITS-1); + dataptr[4] = (DCTELEM) + DESCALE(z2 + z3 + MULTIPLY(tmp1, FIX(0.062335650)) /* c4-c6-c10 */ + - MULTIPLY(tmp2, FIX(1.356927976)) /* c2 */ + + MULTIPLY(tmp4, FIX(0.587485545)), /* c8 */ + CONST_BITS-1); + dataptr[6] = (DCTELEM) + DESCALE(z1 + z3 - MULTIPLY(tmp0, FIX(1.620527200)) /* c2+c4-c6 */ + - MULTIPLY(tmp2, FIX(0.788749120)), /* c8+c10 */ + CONST_BITS-1); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.286413905)); /* c3 */ + tmp2 = MULTIPLY(tmp10 + tmp12, FIX(1.068791298)); /* c5 */ + tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.764581576)); /* c7 */ + tmp0 = tmp1 + tmp2 + tmp3 - MULTIPLY(tmp10, FIX(1.719967871)) /* c7+c5+c3-c1 */ + + MULTIPLY(tmp14, FIX(0.398430003)); /* c9 */ + tmp4 = MULTIPLY(tmp11 + tmp12, - FIX(0.764581576)); /* -c7 */ + tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(1.399818907)); /* -c1 */ + tmp1 += tmp4 + tmp5 + MULTIPLY(tmp11, FIX(1.276416582)) /* c9+c7+c1-c3 */ + - MULTIPLY(tmp14, FIX(1.068791298)); /* c5 */ + tmp10 = MULTIPLY(tmp12 + tmp13, FIX(0.398430003)); /* c9 */ + tmp2 += tmp4 + tmp10 - MULTIPLY(tmp12, FIX(1.989053629)) /* c9+c5+c3-c7 */ + + MULTIPLY(tmp14, FIX(1.399818907)); /* c1 */ + tmp3 += tmp5 + tmp10 + MULTIPLY(tmp13, FIX(1.305598626)) /* c1+c5-c9-c7 */ + - MULTIPLY(tmp14, FIX(1.286413905)); /* c3 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-1); + dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-1); + dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-1); + dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS-1); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 11) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/11)**2 = 64/121, which we partially + * fold into the constant multipliers and final/initial shifting: + * cK now represents sqrt(2) * cos(K*pi/22) * 128/121. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*2]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*1]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*0]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*7]; + tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*6]; + tmp5 = dataptr[DCTSIZE*5]; + + tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*2]; + tmp11 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*1]; + tmp12 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*0]; + tmp13 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*7]; + tmp14 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*6]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5, + FIX(1.057851240)), /* 128/121 */ + CONST_BITS+2); + tmp5 += tmp5; + tmp0 -= tmp5; + tmp1 -= tmp5; + tmp2 -= tmp5; + tmp3 -= tmp5; + tmp4 -= tmp5; + z1 = MULTIPLY(tmp0 + tmp3, FIX(1.435427942)) + /* c2 */ + MULTIPLY(tmp2 + tmp4, FIX(0.212906922)); /* c10 */ + z2 = MULTIPLY(tmp1 - tmp3, FIX(0.979689713)); /* c6 */ + z3 = MULTIPLY(tmp0 - tmp1, FIX(1.258538479)); /* c4 */ + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(z1 + z2 - MULTIPLY(tmp3, FIX(1.077210542)) /* c2+c8-c6 */ + - MULTIPLY(tmp4, FIX(1.471445400)), /* c4+c10 */ + CONST_BITS+2); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(z2 + z3 + MULTIPLY(tmp1, FIX(0.065941844)) /* c4-c6-c10 */ + - MULTIPLY(tmp2, FIX(1.435427942)) /* c2 */ + + MULTIPLY(tmp4, FIX(0.621472312)), /* c8 */ + CONST_BITS+2); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(z1 + z3 - MULTIPLY(tmp0, FIX(1.714276708)) /* c2+c4-c6 */ + - MULTIPLY(tmp2, FIX(0.834379234)), /* c8+c10 */ + CONST_BITS+2); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.360834544)); /* c3 */ + tmp2 = MULTIPLY(tmp10 + tmp12, FIX(1.130622199)); /* c5 */ + tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.808813568)); /* c7 */ + tmp0 = tmp1 + tmp2 + tmp3 - MULTIPLY(tmp10, FIX(1.819470145)) /* c7+c5+c3-c1 */ + + MULTIPLY(tmp14, FIX(0.421479672)); /* c9 */ + tmp4 = MULTIPLY(tmp11 + tmp12, - FIX(0.808813568)); /* -c7 */ + tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(1.480800167)); /* -c1 */ + tmp1 += tmp4 + tmp5 + MULTIPLY(tmp11, FIX(1.350258864)) /* c9+c7+c1-c3 */ + - MULTIPLY(tmp14, FIX(1.130622199)); /* c5 */ + tmp10 = MULTIPLY(tmp12 + tmp13, FIX(0.421479672)); /* c9 */ + tmp2 += tmp4 + tmp10 - MULTIPLY(tmp12, FIX(2.104122847)) /* c9+c5+c3-c7 */ + + MULTIPLY(tmp14, FIX(1.480800167)); /* c1 */ + tmp3 += tmp5 + tmp10 + MULTIPLY(tmp13, FIX(1.381129125)) /* c1+c5-c9-c7 */ + - MULTIPLY(tmp14, FIX(1.360834544)); /* c3 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+2); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+2); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+2); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+2); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 12x12 sample block. + */ + +GLOBAL(void) +jpeg_fdct_12x12 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + DCTELEM workspace[8*4]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + /* cK represents sqrt(2) * cos(K*pi/24). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[11]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[10]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[9]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[8]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[7]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[6]); + + tmp10 = tmp0 + tmp5; + tmp13 = tmp0 - tmp5; + tmp11 = tmp1 + tmp4; + tmp14 = tmp1 - tmp4; + tmp12 = tmp2 + tmp3; + tmp15 = tmp2 - tmp3; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[11]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[10]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[9]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[8]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[7]); + tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[6]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) (tmp10 + tmp11 + tmp12 - 12 * CENTERJSAMPLE); + dataptr[6] = (DCTELEM) (tmp13 - tmp14 - tmp15); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.224744871)), /* c4 */ + CONST_BITS); + dataptr[2] = (DCTELEM) + DESCALE(tmp14 - tmp15 + MULTIPLY(tmp13 + tmp15, FIX(1.366025404)), /* c2 */ + CONST_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp1 + tmp4, FIX_0_541196100); /* c9 */ + tmp14 = tmp10 + MULTIPLY(tmp1, FIX_0_765366865); /* c3-c9 */ + tmp15 = tmp10 - MULTIPLY(tmp4, FIX_1_847759065); /* c3+c9 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.121971054)); /* c5 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.860918669)); /* c7 */ + tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.580774953)) /* c5+c7-c1 */ + + MULTIPLY(tmp5, FIX(0.184591911)); /* c11 */ + tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.184591911)); /* -c11 */ + tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.339493912)) /* c1+c5-c11 */ + + MULTIPLY(tmp5, FIX(0.860918669)); /* c7 */ + tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.725788011)) /* c1+c11-c7 */ + - MULTIPLY(tmp5, FIX(1.121971054)); /* c5 */ + tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.306562965)) /* c3 */ + - MULTIPLY(tmp2 + tmp5, FIX_0_541196100); /* c9 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 12) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/12)**2 = 4/9, which we partially + * fold into the constant multipliers and final shifting: + * cK now represents sqrt(2) * cos(K*pi/24) * 8/9. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*3]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*2]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*1]; + tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*0]; + tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*7]; + tmp5 = dataptr[DCTSIZE*5] + dataptr[DCTSIZE*6]; + + tmp10 = tmp0 + tmp5; + tmp13 = tmp0 - tmp5; + tmp11 = tmp1 + tmp4; + tmp14 = tmp1 - tmp4; + tmp12 = tmp2 + tmp3; + tmp15 = tmp2 - tmp3; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*3]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*2]; + tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*1]; + tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*0]; + tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*7]; + tmp5 = dataptr[DCTSIZE*5] - dataptr[DCTSIZE*6]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(0.888888889)), /* 8/9 */ + CONST_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(MULTIPLY(tmp13 - tmp14 - tmp15, FIX(0.888888889)), /* 8/9 */ + CONST_BITS+1); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.088662108)), /* c4 */ + CONST_BITS+1); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp14 - tmp15, FIX(0.888888889)) + /* 8/9 */ + MULTIPLY(tmp13 + tmp15, FIX(1.214244803)), /* c2 */ + CONST_BITS+1); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp1 + tmp4, FIX(0.481063200)); /* c9 */ + tmp14 = tmp10 + MULTIPLY(tmp1, FIX(0.680326102)); /* c3-c9 */ + tmp15 = tmp10 - MULTIPLY(tmp4, FIX(1.642452502)); /* c3+c9 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(0.997307603)); /* c5 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.765261039)); /* c7 */ + tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.516244403)) /* c5+c7-c1 */ + + MULTIPLY(tmp5, FIX(0.164081699)); /* c11 */ + tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.164081699)); /* -c11 */ + tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.079550144)) /* c1+c5-c11 */ + + MULTIPLY(tmp5, FIX(0.765261039)); /* c7 */ + tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.645144899)) /* c1+c11-c7 */ + - MULTIPLY(tmp5, FIX(0.997307603)); /* c5 */ + tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.161389302)) /* c3 */ + - MULTIPLY(tmp2 + tmp5, FIX(0.481063200)); /* c9 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+1); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+1); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 13x13 sample block. + */ + +GLOBAL(void) +jpeg_fdct_13x13 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 z1, z2; + DCTELEM workspace[8*5]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + /* cK represents sqrt(2) * cos(K*pi/26). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[12]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[11]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[10]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[9]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[8]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[7]); + tmp6 = GETJSAMPLE(elemptr[6]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[12]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[11]); + tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[10]); + tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[9]); + tmp14 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[8]); + tmp15 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[7]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + (tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6 - 13 * CENTERJSAMPLE); + tmp6 += tmp6; + tmp0 -= tmp6; + tmp1 -= tmp6; + tmp2 -= tmp6; + tmp3 -= tmp6; + tmp4 -= tmp6; + tmp5 -= tmp6; + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp0, FIX(1.373119086)) + /* c2 */ + MULTIPLY(tmp1, FIX(1.058554052)) + /* c6 */ + MULTIPLY(tmp2, FIX(0.501487041)) - /* c10 */ + MULTIPLY(tmp3, FIX(0.170464608)) - /* c12 */ + MULTIPLY(tmp4, FIX(0.803364869)) - /* c8 */ + MULTIPLY(tmp5, FIX(1.252223920)), /* c4 */ + CONST_BITS); + z1 = MULTIPLY(tmp0 - tmp2, FIX(1.155388986)) - /* (c4+c6)/2 */ + MULTIPLY(tmp3 - tmp4, FIX(0.435816023)) - /* (c2-c10)/2 */ + MULTIPLY(tmp1 - tmp5, FIX(0.316450131)); /* (c8-c12)/2 */ + z2 = MULTIPLY(tmp0 + tmp2, FIX(0.096834934)) - /* (c4-c6)/2 */ + MULTIPLY(tmp3 + tmp4, FIX(0.937303064)) + /* (c2+c10)/2 */ + MULTIPLY(tmp1 + tmp5, FIX(0.486914739)); /* (c8+c12)/2 */ + + dataptr[4] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS); + dataptr[6] = (DCTELEM) DESCALE(z1 - z2, CONST_BITS); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.322312651)); /* c3 */ + tmp2 = MULTIPLY(tmp10 + tmp12, FIX(1.163874945)); /* c5 */ + tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.937797057)) + /* c7 */ + MULTIPLY(tmp14 + tmp15, FIX(0.338443458)); /* c11 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(tmp10, FIX(2.020082300)) + /* c3+c5+c7-c1 */ + MULTIPLY(tmp14, FIX(0.318774355)); /* c9-c11 */ + tmp4 = MULTIPLY(tmp14 - tmp15, FIX(0.937797057)) - /* c7 */ + MULTIPLY(tmp11 + tmp12, FIX(0.338443458)); /* c11 */ + tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(1.163874945)); /* -c5 */ + tmp1 += tmp4 + tmp5 + + MULTIPLY(tmp11, FIX(0.837223564)) - /* c5+c9+c11-c3 */ + MULTIPLY(tmp14, FIX(2.341699410)); /* c1+c7 */ + tmp6 = MULTIPLY(tmp12 + tmp13, - FIX(0.657217813)); /* -c9 */ + tmp2 += tmp4 + tmp6 - + MULTIPLY(tmp12, FIX(1.572116027)) + /* c1+c5-c9-c11 */ + MULTIPLY(tmp15, FIX(2.260109708)); /* c3+c7 */ + tmp3 += tmp5 + tmp6 + + MULTIPLY(tmp13, FIX(2.205608352)) - /* c3+c5+c9-c7 */ + MULTIPLY(tmp15, FIX(1.742345811)); /* c1+c11 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 13) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/13)**2 = 64/169, which we partially + * fold into the constant multipliers and final shifting: + * cK now represents sqrt(2) * cos(K*pi/26) * 128/169. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*4]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*3]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*2]; + tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*1]; + tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*0]; + tmp5 = dataptr[DCTSIZE*5] + dataptr[DCTSIZE*7]; + tmp6 = dataptr[DCTSIZE*6]; + + tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*4]; + tmp11 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*3]; + tmp12 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*2]; + tmp13 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*1]; + tmp14 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*0]; + tmp15 = dataptr[DCTSIZE*5] - dataptr[DCTSIZE*7]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6, + FIX(0.757396450)), /* 128/169 */ + CONST_BITS+1); + tmp6 += tmp6; + tmp0 -= tmp6; + tmp1 -= tmp6; + tmp2 -= tmp6; + tmp3 -= tmp6; + tmp4 -= tmp6; + tmp5 -= tmp6; + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp0, FIX(1.039995521)) + /* c2 */ + MULTIPLY(tmp1, FIX(0.801745081)) + /* c6 */ + MULTIPLY(tmp2, FIX(0.379824504)) - /* c10 */ + MULTIPLY(tmp3, FIX(0.129109289)) - /* c12 */ + MULTIPLY(tmp4, FIX(0.608465700)) - /* c8 */ + MULTIPLY(tmp5, FIX(0.948429952)), /* c4 */ + CONST_BITS+1); + z1 = MULTIPLY(tmp0 - tmp2, FIX(0.875087516)) - /* (c4+c6)/2 */ + MULTIPLY(tmp3 - tmp4, FIX(0.330085509)) - /* (c2-c10)/2 */ + MULTIPLY(tmp1 - tmp5, FIX(0.239678205)); /* (c8-c12)/2 */ + z2 = MULTIPLY(tmp0 + tmp2, FIX(0.073342435)) - /* (c4-c6)/2 */ + MULTIPLY(tmp3 + tmp4, FIX(0.709910013)) + /* (c2+c10)/2 */ + MULTIPLY(tmp1 + tmp5, FIX(0.368787494)); /* (c8+c12)/2 */ + + dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 - z2, CONST_BITS+1); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.001514908)); /* c3 */ + tmp2 = MULTIPLY(tmp10 + tmp12, FIX(0.881514751)); /* c5 */ + tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.710284161)) + /* c7 */ + MULTIPLY(tmp14 + tmp15, FIX(0.256335874)); /* c11 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(tmp10, FIX(1.530003162)) + /* c3+c5+c7-c1 */ + MULTIPLY(tmp14, FIX(0.241438564)); /* c9-c11 */ + tmp4 = MULTIPLY(tmp14 - tmp15, FIX(0.710284161)) - /* c7 */ + MULTIPLY(tmp11 + tmp12, FIX(0.256335874)); /* c11 */ + tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(0.881514751)); /* -c5 */ + tmp1 += tmp4 + tmp5 + + MULTIPLY(tmp11, FIX(0.634110155)) - /* c5+c9+c11-c3 */ + MULTIPLY(tmp14, FIX(1.773594819)); /* c1+c7 */ + tmp6 = MULTIPLY(tmp12 + tmp13, - FIX(0.497774438)); /* -c9 */ + tmp2 += tmp4 + tmp6 - + MULTIPLY(tmp12, FIX(1.190715098)) + /* c1+c5-c9-c11 */ + MULTIPLY(tmp15, FIX(1.711799069)); /* c3+c7 */ + tmp3 += tmp5 + tmp6 + + MULTIPLY(tmp13, FIX(1.670519935)) - /* c3+c5+c9-c7 */ + MULTIPLY(tmp15, FIX(1.319646532)); /* c1+c11 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+1); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+1); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 14x14 sample block. + */ + +GLOBAL(void) +jpeg_fdct_14x14 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + DCTELEM workspace[8*6]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + /* cK represents sqrt(2) * cos(K*pi/28). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[13]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[12]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[11]); + tmp13 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[10]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[9]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[8]); + tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[7]); + + tmp10 = tmp0 + tmp6; + tmp14 = tmp0 - tmp6; + tmp11 = tmp1 + tmp5; + tmp15 = tmp1 - tmp5; + tmp12 = tmp2 + tmp4; + tmp16 = tmp2 - tmp4; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[13]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[12]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[11]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[10]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[9]); + tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[8]); + tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[7]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + (tmp10 + tmp11 + tmp12 + tmp13 - 14 * CENTERJSAMPLE); + tmp13 += tmp13; + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.274162392)) + /* c4 */ + MULTIPLY(tmp11 - tmp13, FIX(0.314692123)) - /* c12 */ + MULTIPLY(tmp12 - tmp13, FIX(0.881747734)), /* c8 */ + CONST_BITS); + + tmp10 = MULTIPLY(tmp14 + tmp15, FIX(1.105676686)); /* c6 */ + + dataptr[2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.273079590)) /* c2-c6 */ + + MULTIPLY(tmp16, FIX(0.613604268)), /* c10 */ + CONST_BITS); + dataptr[6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.719280954)) /* c6+c10 */ + - MULTIPLY(tmp16, FIX(1.378756276)), /* c2 */ + CONST_BITS); + + /* Odd part */ + + tmp10 = tmp1 + tmp2; + tmp11 = tmp5 - tmp4; + dataptr[7] = (DCTELEM) (tmp0 - tmp10 + tmp3 - tmp11 - tmp6); + tmp3 <<= CONST_BITS; + tmp10 = MULTIPLY(tmp10, - FIX(0.158341681)); /* -c13 */ + tmp11 = MULTIPLY(tmp11, FIX(1.405321284)); /* c1 */ + tmp10 += tmp11 - tmp3; + tmp11 = MULTIPLY(tmp0 + tmp2, FIX(1.197448846)) + /* c5 */ + MULTIPLY(tmp4 + tmp6, FIX(0.752406978)); /* c9 */ + dataptr[5] = (DCTELEM) + DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(2.373959773)) /* c3+c5-c13 */ + + MULTIPLY(tmp4, FIX(1.119999435)), /* c1+c11-c9 */ + CONST_BITS); + tmp12 = MULTIPLY(tmp0 + tmp1, FIX(1.334852607)) + /* c3 */ + MULTIPLY(tmp5 - tmp6, FIX(0.467085129)); /* c11 */ + dataptr[3] = (DCTELEM) + DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.424103948)) /* c3-c9-c13 */ + - MULTIPLY(tmp5, FIX(3.069855259)), /* c1+c5+c11 */ + CONST_BITS); + dataptr[1] = (DCTELEM) + DESCALE(tmp11 + tmp12 + tmp3 + tmp6 - + MULTIPLY(tmp0 + tmp6, FIX(1.126980169)), /* c3+c5-c1 */ + CONST_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 14) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/14)**2 = 16/49, which we partially + * fold into the constant multipliers and final shifting: + * cK now represents sqrt(2) * cos(K*pi/28) * 32/49. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*3]; + tmp13 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*2]; + tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*1]; + tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*0]; + tmp6 = dataptr[DCTSIZE*6] + dataptr[DCTSIZE*7]; + + tmp10 = tmp0 + tmp6; + tmp14 = tmp0 - tmp6; + tmp11 = tmp1 + tmp5; + tmp15 = tmp1 - tmp5; + tmp12 = tmp2 + tmp4; + tmp16 = tmp2 - tmp4; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*3]; + tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*2]; + tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*1]; + tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*0]; + tmp6 = dataptr[DCTSIZE*6] - dataptr[DCTSIZE*7]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12 + tmp13, + FIX(0.653061224)), /* 32/49 */ + CONST_BITS+1); + tmp13 += tmp13; + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(0.832106052)) + /* c4 */ + MULTIPLY(tmp11 - tmp13, FIX(0.205513223)) - /* c12 */ + MULTIPLY(tmp12 - tmp13, FIX(0.575835255)), /* c8 */ + CONST_BITS+1); + + tmp10 = MULTIPLY(tmp14 + tmp15, FIX(0.722074570)); /* c6 */ + + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.178337691)) /* c2-c6 */ + + MULTIPLY(tmp16, FIX(0.400721155)), /* c10 */ + CONST_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.122795725)) /* c6+c10 */ + - MULTIPLY(tmp16, FIX(0.900412262)), /* c2 */ + CONST_BITS+1); + + /* Odd part */ + + tmp10 = tmp1 + tmp2; + tmp11 = tmp5 - tmp4; + dataptr[DCTSIZE*7] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp10 + tmp3 - tmp11 - tmp6, + FIX(0.653061224)), /* 32/49 */ + CONST_BITS+1); + tmp3 = MULTIPLY(tmp3 , FIX(0.653061224)); /* 32/49 */ + tmp10 = MULTIPLY(tmp10, - FIX(0.103406812)); /* -c13 */ + tmp11 = MULTIPLY(tmp11, FIX(0.917760839)); /* c1 */ + tmp10 += tmp11 - tmp3; + tmp11 = MULTIPLY(tmp0 + tmp2, FIX(0.782007410)) + /* c5 */ + MULTIPLY(tmp4 + tmp6, FIX(0.491367823)); /* c9 */ + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(1.550341076)) /* c3+c5-c13 */ + + MULTIPLY(tmp4, FIX(0.731428202)), /* c1+c11-c9 */ + CONST_BITS+1); + tmp12 = MULTIPLY(tmp0 + tmp1, FIX(0.871740478)) + /* c3 */ + MULTIPLY(tmp5 - tmp6, FIX(0.305035186)); /* c11 */ + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.276965844)) /* c3-c9-c13 */ + - MULTIPLY(tmp5, FIX(2.004803435)), /* c1+c5+c11 */ + CONST_BITS+1); + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp11 + tmp12 + tmp3 + - MULTIPLY(tmp0, FIX(0.735987049)) /* c3+c5-c1 */ + - MULTIPLY(tmp6, FIX(0.082925825)), /* c9-c11-c13 */ + CONST_BITS+1); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 15x15 sample block. + */ + +GLOBAL(void) +jpeg_fdct_15x15 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 z1, z2, z3; + DCTELEM workspace[8*7]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + /* cK represents sqrt(2) * cos(K*pi/30). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[14]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[13]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[12]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[11]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[10]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[9]); + tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[8]); + tmp7 = GETJSAMPLE(elemptr[7]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[14]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[13]); + tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[12]); + tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[11]); + tmp14 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[10]); + tmp15 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[9]); + tmp16 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[8]); + + z1 = tmp0 + tmp4 + tmp5; + z2 = tmp1 + tmp3 + tmp6; + z3 = tmp2 + tmp7; + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) (z1 + z2 + z3 - 15 * CENTERJSAMPLE); + z3 += z3; + dataptr[6] = (DCTELEM) + DESCALE(MULTIPLY(z1 - z3, FIX(1.144122806)) - /* c6 */ + MULTIPLY(z2 - z3, FIX(0.437016024)), /* c12 */ + CONST_BITS); + tmp2 += ((tmp1 + tmp4) >> 1) - tmp7 - tmp7; + z1 = MULTIPLY(tmp3 - tmp2, FIX(1.531135173)) - /* c2+c14 */ + MULTIPLY(tmp6 - tmp2, FIX(2.238241955)); /* c4+c8 */ + z2 = MULTIPLY(tmp5 - tmp2, FIX(0.798468008)) - /* c8-c14 */ + MULTIPLY(tmp0 - tmp2, FIX(0.091361227)); /* c2-c4 */ + z3 = MULTIPLY(tmp0 - tmp3, FIX(1.383309603)) + /* c2 */ + MULTIPLY(tmp6 - tmp5, FIX(0.946293579)) + /* c8 */ + MULTIPLY(tmp1 - tmp4, FIX(0.790569415)); /* (c6+c12)/2 */ + + dataptr[2] = (DCTELEM) DESCALE(z1 + z3, CONST_BITS); + dataptr[4] = (DCTELEM) DESCALE(z2 + z3, CONST_BITS); + + /* Odd part */ + + tmp2 = MULTIPLY(tmp10 - tmp12 - tmp13 + tmp15 + tmp16, + FIX(1.224744871)); /* c5 */ + tmp1 = MULTIPLY(tmp10 - tmp14 - tmp15, FIX(1.344997024)) + /* c3 */ + MULTIPLY(tmp11 - tmp13 - tmp16, FIX(0.831253876)); /* c9 */ + tmp12 = MULTIPLY(tmp12, FIX(1.224744871)); /* c5 */ + tmp4 = MULTIPLY(tmp10 - tmp16, FIX(1.406466353)) + /* c1 */ + MULTIPLY(tmp11 + tmp14, FIX(1.344997024)) + /* c3 */ + MULTIPLY(tmp13 + tmp15, FIX(0.575212477)); /* c11 */ + tmp0 = MULTIPLY(tmp13, FIX(0.475753014)) - /* c7-c11 */ + MULTIPLY(tmp14, FIX(0.513743148)) + /* c3-c9 */ + MULTIPLY(tmp16, FIX(1.700497885)) + tmp4 + tmp12; /* c1+c13 */ + tmp3 = MULTIPLY(tmp10, - FIX(0.355500862)) - /* -(c1-c7) */ + MULTIPLY(tmp11, FIX(2.176250899)) - /* c3+c9 */ + MULTIPLY(tmp15, FIX(0.869244010)) + tmp4 - tmp12; /* c11+c13 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 15) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/15)**2 = 64/225, which we partially + * fold into the constant multipliers and final shifting: + * cK now represents sqrt(2) * cos(K*pi/30) * 256/225. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*6]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*5]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*4]; + tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*3]; + tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*2]; + tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*1]; + tmp6 = dataptr[DCTSIZE*6] + wsptr[DCTSIZE*0]; + tmp7 = dataptr[DCTSIZE*7]; + + tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*6]; + tmp11 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*5]; + tmp12 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*4]; + tmp13 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*3]; + tmp14 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*2]; + tmp15 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*1]; + tmp16 = dataptr[DCTSIZE*6] - wsptr[DCTSIZE*0]; + + z1 = tmp0 + tmp4 + tmp5; + z2 = tmp1 + tmp3 + tmp6; + z3 = tmp2 + tmp7; + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(z1 + z2 + z3, FIX(1.137777778)), /* 256/225 */ + CONST_BITS+2); + z3 += z3; + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(MULTIPLY(z1 - z3, FIX(1.301757503)) - /* c6 */ + MULTIPLY(z2 - z3, FIX(0.497227121)), /* c12 */ + CONST_BITS+2); + tmp2 += ((tmp1 + tmp4) >> 1) - tmp7 - tmp7; + z1 = MULTIPLY(tmp3 - tmp2, FIX(1.742091575)) - /* c2+c14 */ + MULTIPLY(tmp6 - tmp2, FIX(2.546621957)); /* c4+c8 */ + z2 = MULTIPLY(tmp5 - tmp2, FIX(0.908479156)) - /* c8-c14 */ + MULTIPLY(tmp0 - tmp2, FIX(0.103948774)); /* c2-c4 */ + z3 = MULTIPLY(tmp0 - tmp3, FIX(1.573898926)) + /* c2 */ + MULTIPLY(tmp6 - tmp5, FIX(1.076671805)) + /* c8 */ + MULTIPLY(tmp1 - tmp4, FIX(0.899492312)); /* (c6+c12)/2 */ + + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + z3, CONST_BITS+2); + dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(z2 + z3, CONST_BITS+2); + + /* Odd part */ + + tmp2 = MULTIPLY(tmp10 - tmp12 - tmp13 + tmp15 + tmp16, + FIX(1.393487498)); /* c5 */ + tmp1 = MULTIPLY(tmp10 - tmp14 - tmp15, FIX(1.530307725)) + /* c3 */ + MULTIPLY(tmp11 - tmp13 - tmp16, FIX(0.945782187)); /* c9 */ + tmp12 = MULTIPLY(tmp12, FIX(1.393487498)); /* c5 */ + tmp4 = MULTIPLY(tmp10 - tmp16, FIX(1.600246161)) + /* c1 */ + MULTIPLY(tmp11 + tmp14, FIX(1.530307725)) + /* c3 */ + MULTIPLY(tmp13 + tmp15, FIX(0.654463974)); /* c11 */ + tmp0 = MULTIPLY(tmp13, FIX(0.541301207)) - /* c7-c11 */ + MULTIPLY(tmp14, FIX(0.584525538)) + /* c3-c9 */ + MULTIPLY(tmp16, FIX(1.934788705)) + tmp4 + tmp12; /* c1+c13 */ + tmp3 = MULTIPLY(tmp10, - FIX(0.404480980)) - /* -(c1-c7) */ + MULTIPLY(tmp11, FIX(2.476089912)) - /* c3+c9 */ + MULTIPLY(tmp15, FIX(0.989006518)) + tmp4 - tmp12; /* c11+c13 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+2); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+2); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+2); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+2); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 16x16 sample block. + */ + +GLOBAL(void) +jpeg_fdct_16x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17; + DCTELEM workspace[DCTSIZE2]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* cK represents sqrt(2) * cos(K*pi/32). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[15]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[14]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[13]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[12]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[11]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[10]); + tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[9]); + tmp7 = GETJSAMPLE(elemptr[7]) + GETJSAMPLE(elemptr[8]); + + tmp10 = tmp0 + tmp7; + tmp14 = tmp0 - tmp7; + tmp11 = tmp1 + tmp6; + tmp15 = tmp1 - tmp6; + tmp12 = tmp2 + tmp5; + tmp16 = tmp2 - tmp5; + tmp13 = tmp3 + tmp4; + tmp17 = tmp3 - tmp4; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[15]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[14]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[13]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[12]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[11]); + tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[10]); + tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[9]); + tmp7 = GETJSAMPLE(elemptr[7]) - GETJSAMPLE(elemptr[8]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 + tmp12 + tmp13 - 16 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */ + MULTIPLY(tmp11 - tmp12, FIX_0_541196100), /* c12[16] = c6[8] */ + CONST_BITS-PASS1_BITS); + + tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) + /* c14[16] = c7[8] */ + MULTIPLY(tmp14 - tmp16, FIX(1.387039845)); /* c2[16] = c1[8] */ + + dataptr[2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982)) /* c6+c14 */ + + MULTIPLY(tmp16, FIX(2.172734804)), /* c2+c10 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243)) /* c2-c6 */ + - MULTIPLY(tmp17, FIX(1.061594338)), /* c10+c14 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) + /* c3 */ + MULTIPLY(tmp6 - tmp7, FIX(0.410524528)); /* c13 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) + /* c5 */ + MULTIPLY(tmp5 + tmp7, FIX(0.666655658)); /* c11 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) + /* c7 */ + MULTIPLY(tmp4 - tmp7, FIX(0.897167586)); /* c9 */ + tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) + /* c15 */ + MULTIPLY(tmp6 - tmp5, FIX(1.407403738)); /* c1 */ + tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) + /* -c11 */ + MULTIPLY(tmp4 + tmp6, - FIX(1.247225013)); /* -c5 */ + tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) + /* -c3 */ + MULTIPLY(tmp5 - tmp4, FIX(0.410524528)); /* c13 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(tmp0, FIX(2.286341144)) + /* c7+c5+c3-c1 */ + MULTIPLY(tmp7, FIX(0.779653625)); /* c15+c13-c11+c9 */ + tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */ + - MULTIPLY(tmp6, FIX(1.663905119)); /* c7+c13+c1-c5 */ + tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */ + + MULTIPLY(tmp5, FIX(1.227391138)); /* c9-c11+c1-c13 */ + tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */ + + MULTIPLY(tmp4, FIX(2.167985692)); /* c1+c13+c5-c9 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == DCTSIZE * 2) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/16)**2 = 1/2**2. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*3]; + tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*2]; + tmp6 = dataptr[DCTSIZE*6] + wsptr[DCTSIZE*1]; + tmp7 = dataptr[DCTSIZE*7] + wsptr[DCTSIZE*0]; + + tmp10 = tmp0 + tmp7; + tmp14 = tmp0 - tmp7; + tmp11 = tmp1 + tmp6; + tmp15 = tmp1 - tmp6; + tmp12 = tmp2 + tmp5; + tmp16 = tmp2 - tmp5; + tmp13 = tmp3 + tmp4; + tmp17 = tmp3 - tmp4; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*3]; + tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*2]; + tmp6 = dataptr[DCTSIZE*6] - wsptr[DCTSIZE*1]; + tmp7 = dataptr[DCTSIZE*7] - wsptr[DCTSIZE*0]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(tmp10 + tmp11 + tmp12 + tmp13, PASS1_BITS+2); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */ + MULTIPLY(tmp11 - tmp12, FIX_0_541196100), /* c12[16] = c6[8] */ + CONST_BITS+PASS1_BITS+2); + + tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) + /* c14[16] = c7[8] */ + MULTIPLY(tmp14 - tmp16, FIX(1.387039845)); /* c2[16] = c1[8] */ + + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982)) /* c6+c14 */ + + MULTIPLY(tmp16, FIX(2.172734804)), /* c2+10 */ + CONST_BITS+PASS1_BITS+2); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243)) /* c2-c6 */ + - MULTIPLY(tmp17, FIX(1.061594338)), /* c10+c14 */ + CONST_BITS+PASS1_BITS+2); + + /* Odd part */ + + tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) + /* c3 */ + MULTIPLY(tmp6 - tmp7, FIX(0.410524528)); /* c13 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) + /* c5 */ + MULTIPLY(tmp5 + tmp7, FIX(0.666655658)); /* c11 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) + /* c7 */ + MULTIPLY(tmp4 - tmp7, FIX(0.897167586)); /* c9 */ + tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) + /* c15 */ + MULTIPLY(tmp6 - tmp5, FIX(1.407403738)); /* c1 */ + tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) + /* -c11 */ + MULTIPLY(tmp4 + tmp6, - FIX(1.247225013)); /* -c5 */ + tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) + /* -c3 */ + MULTIPLY(tmp5 - tmp4, FIX(0.410524528)); /* c13 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(tmp0, FIX(2.286341144)) + /* c7+c5+c3-c1 */ + MULTIPLY(tmp7, FIX(0.779653625)); /* c15+c13-c11+c9 */ + tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */ + - MULTIPLY(tmp6, FIX(1.663905119)); /* c7+c13+c1-c5 */ + tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */ + + MULTIPLY(tmp5, FIX(1.227391138)); /* c9-c11+c1-c13 */ + tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */ + + MULTIPLY(tmp4, FIX(2.167985692)); /* c1+c13+c5-c9 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+PASS1_BITS+2); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+PASS1_BITS+2); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+PASS1_BITS+2); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+PASS1_BITS+2); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 16x8 sample block. + * + * 16-point FDCT in pass 1 (rows), 8-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_16x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17; + INT32 z1; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 16-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/32). */ + + dataptr = data; + ctr = 0; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[15]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[14]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[13]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[12]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[11]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[10]); + tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[9]); + tmp7 = GETJSAMPLE(elemptr[7]) + GETJSAMPLE(elemptr[8]); + + tmp10 = tmp0 + tmp7; + tmp14 = tmp0 - tmp7; + tmp11 = tmp1 + tmp6; + tmp15 = tmp1 - tmp6; + tmp12 = tmp2 + tmp5; + tmp16 = tmp2 - tmp5; + tmp13 = tmp3 + tmp4; + tmp17 = tmp3 - tmp4; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[15]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[14]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[13]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[12]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[11]); + tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[10]); + tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[9]); + tmp7 = GETJSAMPLE(elemptr[7]) - GETJSAMPLE(elemptr[8]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 + tmp12 + tmp13 - 16 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */ + MULTIPLY(tmp11 - tmp12, FIX_0_541196100), /* c12[16] = c6[8] */ + CONST_BITS-PASS1_BITS); + + tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) + /* c14[16] = c7[8] */ + MULTIPLY(tmp14 - tmp16, FIX(1.387039845)); /* c2[16] = c1[8] */ + + dataptr[2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982)) /* c6+c14 */ + + MULTIPLY(tmp16, FIX(2.172734804)), /* c2+c10 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243)) /* c2-c6 */ + - MULTIPLY(tmp17, FIX(1.061594338)), /* c10+c14 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) + /* c3 */ + MULTIPLY(tmp6 - tmp7, FIX(0.410524528)); /* c13 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) + /* c5 */ + MULTIPLY(tmp5 + tmp7, FIX(0.666655658)); /* c11 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) + /* c7 */ + MULTIPLY(tmp4 - tmp7, FIX(0.897167586)); /* c9 */ + tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) + /* c15 */ + MULTIPLY(tmp6 - tmp5, FIX(1.407403738)); /* c1 */ + tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) + /* -c11 */ + MULTIPLY(tmp4 + tmp6, - FIX(1.247225013)); /* -c5 */ + tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) + /* -c3 */ + MULTIPLY(tmp5 - tmp4, FIX(0.410524528)); /* c13 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(tmp0, FIX(2.286341144)) + /* c7+c5+c3-c1 */ + MULTIPLY(tmp7, FIX(0.779653625)); /* c15+c13-c11+c9 */ + tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */ + - MULTIPLY(tmp6, FIX(1.663905119)); /* c7+c13+c1-c5 */ + tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */ + + MULTIPLY(tmp5, FIX(1.227391138)); /* c9-c11+c1-c13 */ + tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */ + + MULTIPLY(tmp4, FIX(2.167985692)); /* c1+c13+c5-c9 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by 8/16 = 1/2. + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + + tmp10 = tmp0 + tmp3; + tmp12 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp13 = tmp1 - tmp2; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS+1); + dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS+1); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), + CONST_BITS+PASS1_BITS+1); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * i0..i3 in the paper are tmp0..tmp3 here. + */ + + tmp10 = tmp0 + tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp0 + tmp2; + tmp13 = tmp1 + tmp3; + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ + tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + + tmp12 += z1; + tmp13 += z1; + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0 + tmp10 + tmp12, + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1 + tmp11 + tmp13, + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2 + tmp11 + tmp12, + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3 + tmp10 + tmp13, + CONST_BITS+PASS1_BITS+1); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 14x7 sample block. + * + * 14-point FDCT in pass 1 (rows), 7-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_14x7 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 z1, z2, z3; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Zero bottom row of output coefficient block. */ + MEMZERO(&data[DCTSIZE*7], SIZEOF(DCTELEM) * DCTSIZE); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 14-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/28). */ + + dataptr = data; + for (ctr = 0; ctr < 7; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[13]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[12]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[11]); + tmp13 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[10]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[9]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[8]); + tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[7]); + + tmp10 = tmp0 + tmp6; + tmp14 = tmp0 - tmp6; + tmp11 = tmp1 + tmp5; + tmp15 = tmp1 - tmp5; + tmp12 = tmp2 + tmp4; + tmp16 = tmp2 - tmp4; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[13]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[12]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[11]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[10]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[9]); + tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[8]); + tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[7]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 + tmp12 + tmp13 - 14 * CENTERJSAMPLE) << PASS1_BITS); + tmp13 += tmp13; + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.274162392)) + /* c4 */ + MULTIPLY(tmp11 - tmp13, FIX(0.314692123)) - /* c12 */ + MULTIPLY(tmp12 - tmp13, FIX(0.881747734)), /* c8 */ + CONST_BITS-PASS1_BITS); + + tmp10 = MULTIPLY(tmp14 + tmp15, FIX(1.105676686)); /* c6 */ + + dataptr[2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.273079590)) /* c2-c6 */ + + MULTIPLY(tmp16, FIX(0.613604268)), /* c10 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.719280954)) /* c6+c10 */ + - MULTIPLY(tmp16, FIX(1.378756276)), /* c2 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp10 = tmp1 + tmp2; + tmp11 = tmp5 - tmp4; + dataptr[7] = (DCTELEM) ((tmp0 - tmp10 + tmp3 - tmp11 - tmp6) << PASS1_BITS); + tmp3 <<= CONST_BITS; + tmp10 = MULTIPLY(tmp10, - FIX(0.158341681)); /* -c13 */ + tmp11 = MULTIPLY(tmp11, FIX(1.405321284)); /* c1 */ + tmp10 += tmp11 - tmp3; + tmp11 = MULTIPLY(tmp0 + tmp2, FIX(1.197448846)) + /* c5 */ + MULTIPLY(tmp4 + tmp6, FIX(0.752406978)); /* c9 */ + dataptr[5] = (DCTELEM) + DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(2.373959773)) /* c3+c5-c13 */ + + MULTIPLY(tmp4, FIX(1.119999435)), /* c1+c11-c9 */ + CONST_BITS-PASS1_BITS); + tmp12 = MULTIPLY(tmp0 + tmp1, FIX(1.334852607)) + /* c3 */ + MULTIPLY(tmp5 - tmp6, FIX(0.467085129)); /* c11 */ + dataptr[3] = (DCTELEM) + DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.424103948)) /* c3-c9-c13 */ + - MULTIPLY(tmp5, FIX(3.069855259)), /* c1+c5+c11 */ + CONST_BITS-PASS1_BITS); + dataptr[1] = (DCTELEM) + DESCALE(tmp11 + tmp12 + tmp3 + tmp6 - + MULTIPLY(tmp0 + tmp6, FIX(1.126980169)), /* c3+c5-c1 */ + CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/14)*(8/7) = 32/49, which we + * partially fold into the constant multipliers and final shifting: + * 7-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/14) * 64/49. + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*6]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*5]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*4]; + tmp3 = dataptr[DCTSIZE*3]; + + tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*6]; + tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*5]; + tmp12 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*4]; + + z1 = tmp0 + tmp2; + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(z1 + tmp1 + tmp3, FIX(1.306122449)), /* 64/49 */ + CONST_BITS+PASS1_BITS+1); + tmp3 += tmp3; + z1 -= tmp3; + z1 -= tmp3; + z1 = MULTIPLY(z1, FIX(0.461784020)); /* (c2+c6-c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp2, FIX(1.202428084)); /* (c2+c4-c6)/2 */ + z3 = MULTIPLY(tmp1 - tmp2, FIX(0.411026446)); /* c6 */ + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS+PASS1_BITS+1); + z1 -= z2; + z2 = MULTIPLY(tmp0 - tmp1, FIX(1.151670509)); /* c4 */ + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.923568041)), /* c2+c6-c4 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS+PASS1_BITS+1); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.221765677)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.222383464)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.800824523)); /* -c1 */ + tmp1 += tmp2; + tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.801442310)); /* c5 */ + tmp0 += tmp3; + tmp2 += tmp3 + MULTIPLY(tmp12, FIX(2.443531355)); /* c3+c1-c5 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+PASS1_BITS+1); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 12x6 sample block. + * + * 12-point FDCT in pass 1 (rows), 6-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_12x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Zero 2 bottom rows of output coefficient block. */ + MEMZERO(&data[DCTSIZE*6], SIZEOF(DCTELEM) * DCTSIZE * 2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 12-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/24). */ + + dataptr = data; + for (ctr = 0; ctr < 6; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[11]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[10]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[9]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[8]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[7]); + tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[6]); + + tmp10 = tmp0 + tmp5; + tmp13 = tmp0 - tmp5; + tmp11 = tmp1 + tmp4; + tmp14 = tmp1 - tmp4; + tmp12 = tmp2 + tmp3; + tmp15 = tmp2 - tmp3; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[11]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[10]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[9]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[8]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[7]); + tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[6]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 + tmp12 - 12 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[6] = (DCTELEM) ((tmp13 - tmp14 - tmp15) << PASS1_BITS); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.224744871)), /* c4 */ + CONST_BITS-PASS1_BITS); + dataptr[2] = (DCTELEM) + DESCALE(tmp14 - tmp15 + MULTIPLY(tmp13 + tmp15, FIX(1.366025404)), /* c2 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp1 + tmp4, FIX_0_541196100); /* c9 */ + tmp14 = tmp10 + MULTIPLY(tmp1, FIX_0_765366865); /* c3-c9 */ + tmp15 = tmp10 - MULTIPLY(tmp4, FIX_1_847759065); /* c3+c9 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.121971054)); /* c5 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.860918669)); /* c7 */ + tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.580774953)) /* c5+c7-c1 */ + + MULTIPLY(tmp5, FIX(0.184591911)); /* c11 */ + tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.184591911)); /* -c11 */ + tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.339493912)) /* c1+c5-c11 */ + + MULTIPLY(tmp5, FIX(0.860918669)); /* c7 */ + tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.725788011)) /* c1+c11-c7 */ + - MULTIPLY(tmp5, FIX(1.121971054)); /* c5 */ + tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.306562965)) /* c3 */ + - MULTIPLY(tmp2 + tmp5, FIX_0_541196100); /* c9 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/12)*(8/6) = 8/9, which we + * partially fold into the constant multipliers and final shifting: + * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12) * 16/9. + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*5]; + tmp11 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3]; + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp12, FIX(2.177324216)), /* c2 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(1.257078722)), /* c4 */ + CONST_BITS+PASS1_BITS+1); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp2, FIX(0.650711829)); /* c5 */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0 + tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp2, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp2 - tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS+1); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 10x5 sample block. + * + * 10-point FDCT in pass 1 (rows), 5-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_10x5 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Zero 3 bottom rows of output coefficient block. */ + MEMZERO(&data[DCTSIZE*5], SIZEOF(DCTELEM) * DCTSIZE * 3); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 10-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/20). */ + + dataptr = data; + for (ctr = 0; ctr < 5; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[9]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[8]); + tmp12 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[7]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[6]); + tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[5]); + + tmp10 = tmp0 + tmp4; + tmp13 = tmp0 - tmp4; + tmp11 = tmp1 + tmp3; + tmp14 = tmp1 - tmp3; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[9]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[8]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[7]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[6]); + tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[5]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 + tmp12 - 10 * CENTERJSAMPLE) << PASS1_BITS); + tmp12 += tmp12; + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.144122806)) - /* c4 */ + MULTIPLY(tmp11 - tmp12, FIX(0.437016024)), /* c8 */ + CONST_BITS-PASS1_BITS); + tmp10 = MULTIPLY(tmp13 + tmp14, FIX(0.831253876)); /* c6 */ + dataptr[2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.513743148)), /* c2-c6 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.176250899)), /* c2+c6 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp10 = tmp0 + tmp4; + tmp11 = tmp1 - tmp3; + dataptr[5] = (DCTELEM) ((tmp10 - tmp11 - tmp2) << PASS1_BITS); + tmp2 <<= CONST_BITS; + dataptr[1] = (DCTELEM) + DESCALE(MULTIPLY(tmp0, FIX(1.396802247)) + /* c1 */ + MULTIPLY(tmp1, FIX(1.260073511)) + tmp2 + /* c3 */ + MULTIPLY(tmp3, FIX(0.642039522)) + /* c7 */ + MULTIPLY(tmp4, FIX(0.221231742)), /* c9 */ + CONST_BITS-PASS1_BITS); + tmp12 = MULTIPLY(tmp0 - tmp4, FIX(0.951056516)) - /* (c3+c7)/2 */ + MULTIPLY(tmp1 + tmp3, FIX(0.587785252)); /* (c1-c9)/2 */ + tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.309016994)) + /* (c3-c7)/2 */ + (tmp11 << (CONST_BITS - 1)) - tmp2; + dataptr[3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/10)*(8/5) = 32/25, which we + * fold into the constant multipliers: + * 5-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/10) * 32/25. + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*4]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*3]; + tmp2 = dataptr[DCTSIZE*2]; + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*4]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*3]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp2, FIX(1.28)), /* 32/25 */ + CONST_BITS+PASS1_BITS); + tmp11 = MULTIPLY(tmp11, FIX(1.011928851)); /* (c2+c4)/2 */ + tmp10 -= tmp2 << 2; + tmp10 = MULTIPLY(tmp10, FIX(0.452548340)); /* (c2-c4)/2 */ + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp1, FIX(1.064004961)); /* c3 */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.657591230)), /* c1-c3 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.785601151)), /* c1+c3 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on an 8x4 sample block. + * + * 8-point FDCT in pass 1 (rows), 4-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_8x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Zero 4 bottom rows of output coefficient block. */ + MEMZERO(&data[DCTSIZE*4], SIZEOF(DCTELEM) * DCTSIZE * 4); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We must also scale the output by 8/4 = 2, which we add here. */ + + dataptr = data; + for (ctr = 0; ctr < 4; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]); + + tmp10 = tmp0 + tmp3; + tmp12 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp13 = tmp1 - tmp2; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << (PASS1_BITS+1)); + dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << (PASS1_BITS+1)); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-2); + dataptr[2] = (DCTELEM) RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), + CONST_BITS-PASS1_BITS-1); + dataptr[6] = (DCTELEM) RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), + CONST_BITS-PASS1_BITS-1); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * i0..i3 in the paper are tmp0..tmp3 here. + */ + + tmp10 = tmp0 + tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp0 + tmp2; + tmp13 = tmp1 + tmp3; + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-2); + + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ + tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + + tmp12 += z1; + tmp13 += z1; + + dataptr[1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS-PASS1_BITS-1); + dataptr[3] = (DCTELEM) + RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS-PASS1_BITS-1); + dataptr[5] = (DCTELEM) + RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS-PASS1_BITS-1); + dataptr[7] = (DCTELEM) + RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS-PASS1_BITS-1); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * 4-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*3] + (ONE << (PASS1_BITS-1)); + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*2]; + + tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*3]; + tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*2]; + + dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp0 + tmp1, PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) RIGHT_SHIFT(tmp0 - tmp1, PASS1_BITS); + + /* Odd part */ + + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS+PASS1_BITS-1); + + dataptr[DCTSIZE*1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 6x3 sample block. + * + * 6-point FDCT in pass 1 (rows), 3-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_6x3 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2; + INT32 tmp10, tmp11, tmp12; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We scale the results further by 2 as part of output adaption */ + /* scaling for different DCT size. */ + /* 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + + dataptr = data; + for (ctr = 0; ctr < 3; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[5]); + tmp11 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[4]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[3]); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[5]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[4]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[3]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 - 6 * CENTERJSAMPLE) << (PASS1_BITS+1)); + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp12, FIX(1.224744871)), /* c2 */ + CONST_BITS-PASS1_BITS-1); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(0.707106781)), /* c4 */ + CONST_BITS-PASS1_BITS-1); + + /* Odd part */ + + tmp10 = DESCALE(MULTIPLY(tmp0 + tmp2, FIX(0.366025404)), /* c5 */ + CONST_BITS-PASS1_BITS-1); + + dataptr[1] = (DCTELEM) (tmp10 + ((tmp0 + tmp1) << (PASS1_BITS+1))); + dataptr[3] = (DCTELEM) ((tmp0 - tmp1 - tmp2) << (PASS1_BITS+1)); + dataptr[5] = (DCTELEM) (tmp10 + ((tmp2 - tmp1) << (PASS1_BITS+1))); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/6)*(8/3) = 32/9, which we partially + * fold into the constant multipliers (other part was done in pass 1): + * 3-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/6) * 16/9. + */ + + dataptr = data; + for (ctr = 0; ctr < 6; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*2]; + tmp1 = dataptr[DCTSIZE*1]; + + tmp2 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*2]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 + tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(1.257078722)), /* c2 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(MULTIPLY(tmp2, FIX(2.177324216)), /* c1 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 4x2 sample block. + * + * 4-point FDCT in pass 1 (rows), 2-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_4x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1; + INT32 tmp10, tmp11; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We must also scale the output by (8/4)*(8/2) = 2**3, which we add here. */ + /* 4-point FDCT kernel, */ + /* cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. */ + + dataptr = data; + for (ctr = 0; ctr < 2; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[3]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[2]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[3]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[2]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp0 + tmp1 - 4 * CENTERJSAMPLE) << (PASS1_BITS+3)); + dataptr[2] = (DCTELEM) ((tmp0 - tmp1) << (PASS1_BITS+3)); + + /* Odd part */ + + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-4); + + dataptr[1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS-3); + dataptr[3] = (DCTELEM) + RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS-3); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + */ + + dataptr = data; + for (ctr = 0; ctr < 4; ctr++) { + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = dataptr[DCTSIZE*0] + (ONE << (PASS1_BITS-1)); + tmp1 = dataptr[DCTSIZE*1]; + + dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp0 + tmp1, PASS1_BITS); + + /* Odd part */ + + dataptr[DCTSIZE*1] = (DCTELEM) RIGHT_SHIFT(tmp0 - tmp1, PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 2x1 sample block. + * + * 2-point FDCT in pass 1 (rows), 1-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_2x1 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1; + JSAMPROW elemptr; + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + elemptr = sample_data[0] + start_col; + + tmp0 = GETJSAMPLE(elemptr[0]); + tmp1 = GETJSAMPLE(elemptr[1]); + + /* We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/2)*(8/1) = 2**5. + */ + + /* Even part */ + /* Apply unsigned->signed conversion */ + data[0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 5); + + /* Odd part */ + data[1] = (DCTELEM) ((tmp0 - tmp1) << 5); +} + + +/* + * Perform the forward DCT on an 8x16 sample block. + * + * 8-point FDCT in pass 1 (rows), 16-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_8x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17; + INT32 z1; + DCTELEM workspace[DCTSIZE2]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]); + + tmp10 = tmp0 + tmp3; + tmp12 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp13 = tmp1 - tmp2; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]); + tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), + CONST_BITS-PASS1_BITS); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * i0..i3 in the paper are tmp0..tmp3 here. + */ + + tmp10 = tmp0 + tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp0 + tmp2; + tmp13 = tmp1 + tmp3; + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ + tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + + tmp12 += z1; + tmp13 += z1; + + dataptr[1] = (DCTELEM) DESCALE(tmp0 + tmp10 + tmp12, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp1 + tmp11 + tmp13, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp2 + tmp11 + tmp12, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp3 + tmp10 + tmp13, CONST_BITS-PASS1_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == DCTSIZE * 2) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by 8/16 = 1/2. + * 16-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/32). + */ + + dataptr = data; + wsptr = workspace; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*3]; + tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*2]; + tmp6 = dataptr[DCTSIZE*6] + wsptr[DCTSIZE*1]; + tmp7 = dataptr[DCTSIZE*7] + wsptr[DCTSIZE*0]; + + tmp10 = tmp0 + tmp7; + tmp14 = tmp0 - tmp7; + tmp11 = tmp1 + tmp6; + tmp15 = tmp1 - tmp6; + tmp12 = tmp2 + tmp5; + tmp16 = tmp2 - tmp5; + tmp13 = tmp3 + tmp4; + tmp17 = tmp3 - tmp4; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*3]; + tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*2]; + tmp6 = dataptr[DCTSIZE*6] - wsptr[DCTSIZE*1]; + tmp7 = dataptr[DCTSIZE*7] - wsptr[DCTSIZE*0]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(tmp10 + tmp11 + tmp12 + tmp13, PASS1_BITS+1); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */ + MULTIPLY(tmp11 - tmp12, FIX_0_541196100), /* c12[16] = c6[8] */ + CONST_BITS+PASS1_BITS+1); + + tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) + /* c14[16] = c7[8] */ + MULTIPLY(tmp14 - tmp16, FIX(1.387039845)); /* c2[16] = c1[8] */ + + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982)) /* c6+c14 */ + + MULTIPLY(tmp16, FIX(2.172734804)), /* c2+c10 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243)) /* c2-c6 */ + - MULTIPLY(tmp17, FIX(1.061594338)), /* c10+c14 */ + CONST_BITS+PASS1_BITS+1); + + /* Odd part */ + + tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) + /* c3 */ + MULTIPLY(tmp6 - tmp7, FIX(0.410524528)); /* c13 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) + /* c5 */ + MULTIPLY(tmp5 + tmp7, FIX(0.666655658)); /* c11 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) + /* c7 */ + MULTIPLY(tmp4 - tmp7, FIX(0.897167586)); /* c9 */ + tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) + /* c15 */ + MULTIPLY(tmp6 - tmp5, FIX(1.407403738)); /* c1 */ + tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) + /* -c11 */ + MULTIPLY(tmp4 + tmp6, - FIX(1.247225013)); /* -c5 */ + tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) + /* -c3 */ + MULTIPLY(tmp5 - tmp4, FIX(0.410524528)); /* c13 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(tmp0, FIX(2.286341144)) + /* c7+c5+c3-c1 */ + MULTIPLY(tmp7, FIX(0.779653625)); /* c15+c13-c11+c9 */ + tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */ + - MULTIPLY(tmp6, FIX(1.663905119)); /* c7+c13+c1-c5 */ + tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */ + + MULTIPLY(tmp5, FIX(1.227391138)); /* c9-c11+c1-c13 */ + tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */ + + MULTIPLY(tmp4, FIX(2.167985692)); /* c1+c13+c5-c9 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+PASS1_BITS+1); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 7x14 sample block. + * + * 7-point FDCT in pass 1 (rows), 14-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_7x14 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 z1, z2, z3; + DCTELEM workspace[8*6]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 7-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/14). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[6]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[5]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[4]); + tmp3 = GETJSAMPLE(elemptr[3]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[6]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[5]); + tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[4]); + + z1 = tmp0 + tmp2; + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((z1 + tmp1 + tmp3 - 7 * CENTERJSAMPLE) << PASS1_BITS); + tmp3 += tmp3; + z1 -= tmp3; + z1 -= tmp3; + z1 = MULTIPLY(z1, FIX(0.353553391)); /* (c2+c6-c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp2, FIX(0.920609002)); /* (c2+c4-c6)/2 */ + z3 = MULTIPLY(tmp1 - tmp2, FIX(0.314692123)); /* c6 */ + dataptr[2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS-PASS1_BITS); + z1 -= z2; + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.881747734)); /* c4 */ + dataptr[4] = (DCTELEM) + DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.707106781)), /* c2+c6-c4 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp1 = MULTIPLY(tmp10 + tmp11, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.613604268)); /* c5 */ + tmp0 += tmp3; + tmp2 += tmp3 + MULTIPLY(tmp12, FIX(1.870828693)); /* c3+c1-c5 */ + + dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-PASS1_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 14) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/7)*(8/14) = 32/49, which we + * fold into the constant multipliers: + * 14-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/28) * 32/49. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*3]; + tmp13 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*2]; + tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*1]; + tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*0]; + tmp6 = dataptr[DCTSIZE*6] + dataptr[DCTSIZE*7]; + + tmp10 = tmp0 + tmp6; + tmp14 = tmp0 - tmp6; + tmp11 = tmp1 + tmp5; + tmp15 = tmp1 - tmp5; + tmp12 = tmp2 + tmp4; + tmp16 = tmp2 - tmp4; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*3]; + tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*2]; + tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*1]; + tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*0]; + tmp6 = dataptr[DCTSIZE*6] - dataptr[DCTSIZE*7]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12 + tmp13, + FIX(0.653061224)), /* 32/49 */ + CONST_BITS+PASS1_BITS); + tmp13 += tmp13; + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp13, FIX(0.832106052)) + /* c4 */ + MULTIPLY(tmp11 - tmp13, FIX(0.205513223)) - /* c12 */ + MULTIPLY(tmp12 - tmp13, FIX(0.575835255)), /* c8 */ + CONST_BITS+PASS1_BITS); + + tmp10 = MULTIPLY(tmp14 + tmp15, FIX(0.722074570)); /* c6 */ + + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.178337691)) /* c2-c6 */ + + MULTIPLY(tmp16, FIX(0.400721155)), /* c10 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.122795725)) /* c6+c10 */ + - MULTIPLY(tmp16, FIX(0.900412262)), /* c2 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = tmp1 + tmp2; + tmp11 = tmp5 - tmp4; + dataptr[DCTSIZE*7] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp10 + tmp3 - tmp11 - tmp6, + FIX(0.653061224)), /* 32/49 */ + CONST_BITS+PASS1_BITS); + tmp3 = MULTIPLY(tmp3 , FIX(0.653061224)); /* 32/49 */ + tmp10 = MULTIPLY(tmp10, - FIX(0.103406812)); /* -c13 */ + tmp11 = MULTIPLY(tmp11, FIX(0.917760839)); /* c1 */ + tmp10 += tmp11 - tmp3; + tmp11 = MULTIPLY(tmp0 + tmp2, FIX(0.782007410)) + /* c5 */ + MULTIPLY(tmp4 + tmp6, FIX(0.491367823)); /* c9 */ + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(1.550341076)) /* c3+c5-c13 */ + + MULTIPLY(tmp4, FIX(0.731428202)), /* c1+c11-c9 */ + CONST_BITS+PASS1_BITS); + tmp12 = MULTIPLY(tmp0 + tmp1, FIX(0.871740478)) + /* c3 */ + MULTIPLY(tmp5 - tmp6, FIX(0.305035186)); /* c11 */ + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.276965844)) /* c3-c9-c13 */ + - MULTIPLY(tmp5, FIX(2.004803435)), /* c1+c5+c11 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp11 + tmp12 + tmp3 + - MULTIPLY(tmp0, FIX(0.735987049)) /* c3+c5-c1 */ + - MULTIPLY(tmp6, FIX(0.082925825)), /* c9-c11-c13 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 6x12 sample block. + * + * 6-point FDCT in pass 1 (rows), 12-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_6x12 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + DCTELEM workspace[8*4]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[5]); + tmp11 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[4]); + tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[3]); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[5]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[4]); + tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[3]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp11 - 6 * CENTERJSAMPLE) << PASS1_BITS); + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp12, FIX(1.224744871)), /* c2 */ + CONST_BITS-PASS1_BITS); + dataptr[4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(0.707106781)), /* c4 */ + CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp10 = DESCALE(MULTIPLY(tmp0 + tmp2, FIX(0.366025404)), /* c5 */ + CONST_BITS-PASS1_BITS); + + dataptr[1] = (DCTELEM) (tmp10 + ((tmp0 + tmp1) << PASS1_BITS)); + dataptr[3] = (DCTELEM) ((tmp0 - tmp1 - tmp2) << PASS1_BITS); + dataptr[5] = (DCTELEM) (tmp10 + ((tmp2 - tmp1) << PASS1_BITS)); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 12) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/6)*(8/12) = 8/9, which we + * fold into the constant multipliers: + * 12-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/24) * 8/9. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*3]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*2]; + tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*1]; + tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*0]; + tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*7]; + tmp5 = dataptr[DCTSIZE*5] + dataptr[DCTSIZE*6]; + + tmp10 = tmp0 + tmp5; + tmp13 = tmp0 - tmp5; + tmp11 = tmp1 + tmp4; + tmp14 = tmp1 - tmp4; + tmp12 = tmp2 + tmp3; + tmp15 = tmp2 - tmp3; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*3]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*2]; + tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*1]; + tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*0]; + tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*7]; + tmp5 = dataptr[DCTSIZE*5] - dataptr[DCTSIZE*6]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(0.888888889)), /* 8/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(MULTIPLY(tmp13 - tmp14 - tmp15, FIX(0.888888889)), /* 8/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.088662108)), /* c4 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp14 - tmp15, FIX(0.888888889)) + /* 8/9 */ + MULTIPLY(tmp13 + tmp15, FIX(1.214244803)), /* c2 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp1 + tmp4, FIX(0.481063200)); /* c9 */ + tmp14 = tmp10 + MULTIPLY(tmp1, FIX(0.680326102)); /* c3-c9 */ + tmp15 = tmp10 - MULTIPLY(tmp4, FIX(1.642452502)); /* c3+c9 */ + tmp12 = MULTIPLY(tmp0 + tmp2, FIX(0.997307603)); /* c5 */ + tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.765261039)); /* c7 */ + tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.516244403)) /* c5+c7-c1 */ + + MULTIPLY(tmp5, FIX(0.164081699)); /* c11 */ + tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.164081699)); /* -c11 */ + tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.079550144)) /* c1+c5-c11 */ + + MULTIPLY(tmp5, FIX(0.765261039)); /* c7 */ + tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.645144899)) /* c1+c11-c7 */ + - MULTIPLY(tmp5, FIX(0.997307603)); /* c5 */ + tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.161389302)) /* c3 */ + - MULTIPLY(tmp2 + tmp5, FIX(0.481063200)); /* c9 */ + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 5x10 sample block. + * + * 5-point FDCT in pass 1 (rows), 10-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_5x10 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4; + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + DCTELEM workspace[8*2]; + DCTELEM *dataptr; + DCTELEM *wsptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* 5-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/10). */ + + dataptr = data; + ctr = 0; + for (;;) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[4]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[3]); + tmp2 = GETJSAMPLE(elemptr[2]); + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + + tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[4]); + tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[3]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp10 + tmp2 - 5 * CENTERJSAMPLE) << PASS1_BITS); + tmp11 = MULTIPLY(tmp11, FIX(0.790569415)); /* (c2+c4)/2 */ + tmp10 -= tmp2 << 2; + tmp10 = MULTIPLY(tmp10, FIX(0.353553391)); /* (c2-c4)/2 */ + dataptr[2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS-PASS1_BITS); + dataptr[4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS-PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp1, FIX(0.831253876)); /* c3 */ + + dataptr[1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.513743148)), /* c1-c3 */ + CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.176250899)), /* c1+c3 */ + CONST_BITS-PASS1_BITS); + + ctr++; + + if (ctr != DCTSIZE) { + if (ctr == 10) + break; /* Done. */ + dataptr += DCTSIZE; /* advance pointer to next row */ + } else + dataptr = workspace; /* switch pointer to extended workspace */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/5)*(8/10) = 32/25, which we + * fold into the constant multipliers: + * 10-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/20) * 32/25. + */ + + dataptr = data; + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*1]; + tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*0]; + tmp12 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*7]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*6]; + tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*5]; + + tmp10 = tmp0 + tmp4; + tmp13 = tmp0 - tmp4; + tmp11 = tmp1 + tmp3; + tmp14 = tmp1 - tmp3; + + tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*1]; + tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*0]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*7]; + tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*6]; + tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*5]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(1.28)), /* 32/25 */ + CONST_BITS+PASS1_BITS); + tmp12 += tmp12; + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.464477191)) - /* c4 */ + MULTIPLY(tmp11 - tmp12, FIX(0.559380511)), /* c8 */ + CONST_BITS+PASS1_BITS); + tmp10 = MULTIPLY(tmp13 + tmp14, FIX(1.064004961)); /* c6 */ + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.657591230)), /* c2-c6 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.785601151)), /* c2+c6 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = tmp0 + tmp4; + tmp11 = tmp1 - tmp3; + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp2, FIX(1.28)), /* 32/25 */ + CONST_BITS+PASS1_BITS); + tmp2 = MULTIPLY(tmp2, FIX(1.28)); /* 32/25 */ + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(MULTIPLY(tmp0, FIX(1.787906876)) + /* c1 */ + MULTIPLY(tmp1, FIX(1.612894094)) + tmp2 + /* c3 */ + MULTIPLY(tmp3, FIX(0.821810588)) + /* c7 */ + MULTIPLY(tmp4, FIX(0.283176630)), /* c9 */ + CONST_BITS+PASS1_BITS); + tmp12 = MULTIPLY(tmp0 - tmp4, FIX(1.217352341)) - /* (c3+c7)/2 */ + MULTIPLY(tmp1 + tmp3, FIX(0.752365123)); /* (c1-c9)/2 */ + tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.395541753)) + /* (c3-c7)/2 */ + MULTIPLY(tmp11, FIX(0.64)) - tmp2; /* 16/25 */ + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + wsptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 4x8 sample block. + * + * 4-point FDCT in pass 1 (rows), 8-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_4x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We must also scale the output by 8/4 = 2, which we add here. */ + /* 4-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). */ + + dataptr = data; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[3]); + tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[2]); + + tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[3]); + tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[2]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp0 + tmp1 - 4 * CENTERJSAMPLE) << (PASS1_BITS+1)); + dataptr[2] = (DCTELEM) ((tmp0 - tmp1) << (PASS1_BITS+1)); + + /* Odd part */ + + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-2); + + dataptr[1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS-1); + dataptr[3] = (DCTELEM) + RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS-1); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + */ + + dataptr = data; + for (ctr = 0; ctr < 4; ctr++) { + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + + /* Add fudge factor here for final descale. */ + tmp10 = tmp0 + tmp3 + (ONE << (PASS1_BITS-1)); + tmp12 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp13 = tmp1 - tmp2; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp10 + tmp11, PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) RIGHT_SHIFT(tmp10 - tmp11, PASS1_BITS); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS+PASS1_BITS-1); + dataptr[DCTSIZE*2] = (DCTELEM) + RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) + RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), CONST_BITS+PASS1_BITS); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * i0..i3 in the paper are tmp0..tmp3 here. + */ + + tmp10 = tmp0 + tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp0 + tmp2; + tmp13 = tmp1 + tmp3; + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS+PASS1_BITS-1); + + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ + tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + + tmp12 += z1; + tmp13 += z1; + + dataptr[DCTSIZE*1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) + RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*7] = (DCTELEM) + RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 3x6 sample block. + * + * 3-point FDCT in pass 1 (rows), 6-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_3x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1, tmp2; + INT32 tmp10, tmp11, tmp12; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* We scale the results further by 2 as part of output adaption */ + /* scaling for different DCT size. */ + /* 3-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/6). */ + + dataptr = data; + for (ctr = 0; ctr < 6; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[2]); + tmp1 = GETJSAMPLE(elemptr[1]); + + tmp2 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[2]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) + ((tmp0 + tmp1 - 3 * CENTERJSAMPLE) << (PASS1_BITS+1)); + dataptr[2] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(0.707106781)), /* c2 */ + CONST_BITS-PASS1_BITS-1); + + /* Odd part */ + + dataptr[1] = (DCTELEM) + DESCALE(MULTIPLY(tmp2, FIX(1.224744871)), /* c1 */ + CONST_BITS-PASS1_BITS-1); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + * We must also scale the output by (8/6)*(8/3) = 32/9, which we partially + * fold into the constant multipliers (other part was done in pass 1): + * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12) * 16/9. + */ + + dataptr = data; + for (ctr = 0; ctr < 3; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*5]; + tmp11 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3]; + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*5]; + tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*4]; + tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3]; + + dataptr[DCTSIZE*0] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 + tmp11, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(MULTIPLY(tmp12, FIX(2.177324216)), /* c2 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) + DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(1.257078722)), /* c4 */ + CONST_BITS+PASS1_BITS); + + /* Odd part */ + + tmp10 = MULTIPLY(tmp0 + tmp2, FIX(0.650711829)); /* c5 */ + + dataptr[DCTSIZE*1] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp0 + tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + DESCALE(MULTIPLY(tmp0 - tmp1 - tmp2, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) + DESCALE(tmp10 + MULTIPLY(tmp2 - tmp1, FIX(1.777777778)), /* 16/9 */ + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 2x4 sample block. + * + * 2-point FDCT in pass 1 (rows), 4-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_2x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1; + INT32 tmp10, tmp11; + DCTELEM *dataptr; + JSAMPROW elemptr; + int ctr; + SHIFT_TEMPS + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + /* We must also scale the output by (8/2)*(8/4) = 2**3, which we add here. */ + + dataptr = data; + for (ctr = 0; ctr < 4; ctr++) { + elemptr = sample_data[ctr] + start_col; + + /* Even part */ + + tmp0 = GETJSAMPLE(elemptr[0]); + tmp1 = GETJSAMPLE(elemptr[1]); + + /* Apply unsigned->signed conversion */ + dataptr[0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 3); + + /* Odd part */ + + dataptr[1] = (DCTELEM) ((tmp0 - tmp1) << 3); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. + * 4-point FDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. + */ + + dataptr = data; + for (ctr = 0; ctr < 2; ctr++) { + /* Even part */ + + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*3]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*2]; + + tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*3]; + tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*2]; + + dataptr[DCTSIZE*0] = (DCTELEM) (tmp0 + tmp1); + dataptr[DCTSIZE*2] = (DCTELEM) (tmp0 - tmp1); + + /* Odd part */ + + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-1); + + dataptr[DCTSIZE*1] = (DCTELEM) + RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */ + CONST_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) + RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */ + CONST_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + + +/* + * Perform the forward DCT on a 1x2 sample block. + * + * 1-point FDCT in pass 1 (rows), 2-point in pass 2 (columns). + */ + +GLOBAL(void) +jpeg_fdct_1x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) +{ + INT32 tmp0, tmp1; + + /* Pre-zero output coefficient block. */ + MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); + + tmp0 = GETJSAMPLE(sample_data[0][start_col]); + tmp1 = GETJSAMPLE(sample_data[1][start_col]); + + /* We leave the results scaled up by an overall factor of 8. + * We must also scale the output by (8/1)*(8/2) = 2**5. + */ + + /* Even part */ + /* Apply unsigned->signed conversion */ + data[DCTSIZE*0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 5); + + /* Odd part */ + data[DCTSIZE*1] = (DCTELEM) ((tmp0 - tmp1) << 5); +} + +#endif /* DCT_SCALING_SUPPORTED */ +#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jidctflt.c b/3rdparty/openctm/tools/jpeg/jidctflt.c new file mode 100644 index 000000000..5fea54c23 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jidctflt.c @@ -0,0 +1,242 @@ +/* + * jidctflt.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a floating-point implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * This implementation should be more accurate than either of the integer + * IDCT implementations. However, it may not give the same results on all + * machines because of differences in roundoff behavior. Speed will depend + * on the hardware's floating point capacity. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with a fixed-point + * implementation, accuracy is lost due to imprecise representation of the + * scaled quantization values. However, that problem does not arise if + * we use floating point arithmetic. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_FLOAT_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce a float result. + */ + +#define DEQUANTIZE(coef,quantval) (((FAST_FLOAT) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + FAST_FLOAT tmp10, tmp11, tmp12, tmp13; + FAST_FLOAT z5, z10, z11, z12, z13; + JCOEFPTR inptr; + FLOAT_MULT_TYPE * quantptr; + FAST_FLOAT * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + + tmp0 = tmp10 + tmp13; /* phase 2 */ + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z13 = tmp6 + tmp5; /* phase 6 */ + z10 = tmp6 - tmp5; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ + tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + wsptr[DCTSIZE*0] = tmp0 + tmp7; + wsptr[DCTSIZE*7] = tmp0 - tmp7; + wsptr[DCTSIZE*1] = tmp1 + tmp6; + wsptr[DCTSIZE*6] = tmp1 - tmp6; + wsptr[DCTSIZE*2] = tmp2 + tmp5; + wsptr[DCTSIZE*5] = tmp2 - tmp5; + wsptr[DCTSIZE*4] = tmp3 + tmp4; + wsptr[DCTSIZE*3] = tmp3 - tmp4; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * And testing floats for zero is relatively expensive, so we don't bother. + */ + + /* Even part */ + + tmp10 = wsptr[0] + wsptr[4]; + tmp11 = wsptr[0] - wsptr[4]; + + tmp13 = wsptr[2] + wsptr[6]; + tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; + + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + z13 = wsptr[5] + wsptr[3]; + z10 = wsptr[5] - wsptr[3]; + z11 = wsptr[1] + wsptr[7]; + z12 = wsptr[1] - wsptr[7]; + + tmp7 = z11 + z13; + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ + tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + /* Final output stage: scale down by a factor of 8 and range-limit */ + + outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jidctfst.c b/3rdparty/openctm/tools/jpeg/jidctfst.c new file mode 100644 index 000000000..078b8c444 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jidctfst.c @@ -0,0 +1,368 @@ +/* + * jidctfst.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a fast, not so accurate integer implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with fixed-point math, + * accuracy is lost due to imprecise representation of the scaled + * quantization values. The smaller the quantization table entry, the less + * precise the scaled value, so this implementation does worse with high- + * quality-setting files than with low-quality ones. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_IFAST_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling decisions are generally the same as in the LL&M algorithm; + * see jidctint.c for more details. However, we choose to descale + * (right shift) multiplication products as soon as they are formed, + * rather than carrying additional fractional bits into subsequent additions. + * This compromises accuracy slightly, but it lets us save a few shifts. + * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) + * everywhere except in the multiplications proper; this saves a good deal + * of work on 16-bit-int machines. + * + * The dequantized coefficients are not integers because the AA&N scaling + * factors have been incorporated. We represent them scaled up by PASS1_BITS, + * so that the first and second IDCT rounds have the same input scaling. + * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to + * avoid a descaling shift; this compromises accuracy rather drastically + * for small quantization table entries, but it saves a lot of shifts. + * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway, + * so we use a much larger scaling factor to preserve accuracy. + * + * A final compromise is to represent the multiplicative constants to only + * 8 fractional bits, rather than 13. This saves some shifting work on some + * machines, and may also reduce the cost of multiplication (since there + * are fewer one-bits in the constants). + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 8 +#define PASS1_BITS 2 +#else +#define CONST_BITS 8 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 8 +#define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */ +#define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */ +#define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */ +#define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */ +#else +#define FIX_1_082392200 FIX(1.082392200) +#define FIX_1_414213562 FIX(1.414213562) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_2_613125930 FIX(2.613125930) +#endif + + +/* We can gain a little more speed, with a further compromise in accuracy, + * by omitting the addition in a descaling shift. This yields an incorrectly + * rounded result half the time... + */ + +#ifndef USE_ACCURATE_ROUNDING +#undef DESCALE +#define DESCALE(x,n) RIGHT_SHIFT(x, n) +#endif + + +/* Multiply a DCTELEM variable by an INT32 constant, and immediately + * descale to yield a DCTELEM result. + */ + +#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce a DCTELEM result. For 8-bit data a 16x16->16 + * multiplication will do. For 12-bit data, the multiplier table is + * declared INT32, so a 32-bit multiply will be used. + */ + +#if BITS_IN_JSAMPLE == 8 +#define DEQUANTIZE(coef,quantval) (((IFAST_MULT_TYPE) (coef)) * (quantval)) +#else +#define DEQUANTIZE(coef,quantval) \ + DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS) +#endif + + +/* Like DESCALE, but applies to a DCTELEM and produces an int. + * We assume that int right shift is unsigned if INT32 right shift is. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define ISHIFT_TEMPS DCTELEM ishift_temp; +#if BITS_IN_JSAMPLE == 8 +#define DCTELEMBITS 16 /* DCTELEM may be 16 or 32 bits */ +#else +#define DCTELEMBITS 32 /* DCTELEM must be 32 bits */ +#endif +#define IRIGHT_SHIFT(x,shft) \ + ((ishift_temp = (x)) < 0 ? \ + (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \ + (ishift_temp >> (shft))) +#else +#define ISHIFT_TEMPS +#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + +#ifdef USE_ACCURATE_ROUNDING +#define IDESCALE(x,n) ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n)) +#else +#define IDESCALE(x,n) ((int) IRIGHT_SHIFT(x, n)) +#endif + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + DCTELEM tmp10, tmp11, tmp12, tmp13; + DCTELEM z5, z10, z11, z12, z13; + JCOEFPTR inptr; + IFAST_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS /* for DESCALE */ + ISHIFT_TEMPS /* for IDESCALE */ + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ + + tmp0 = tmp10 + tmp13; /* phase 2 */ + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z13 = tmp6 + tmp5; /* phase 6 */ + z10 = tmp6 - tmp5; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); + wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); + wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); + wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); + wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5); + wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); + wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); + wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * On machines with very fast multiplication, it's possible that the + * test takes more time than it's worth. In that case this section + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + outptr[4] = dcval; + outptr[5] = dcval; + outptr[6] = dcval; + outptr[7] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); + tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); + + tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); + tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) + - tmp13; + + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; + z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; + z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; + z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + /* Final output stage: scale down by a factor of 8 and range-limit */ + + outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_IFAST_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jidctint.c b/3rdparty/openctm/tools/jpeg/jidctint.c new file mode 100644 index 000000000..49ef79f56 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jidctint.c @@ -0,0 +1,5137 @@ +/* + * jidctint.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * Modification developed 2002-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a slow-but-accurate integer implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on an algorithm described in + * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT + * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, + * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. + * The primary algorithm described there uses 11 multiplies and 29 adds. + * We use their alternate method with 12 multiplies and 32 adds. + * The advantage of this method is that no data path contains more than one + * multiplication; this allows a very simple and accurate implementation in + * scaled fixed-point arithmetic, with a minimal number of shifts. + * + * We also provide IDCT routines with various output sample block sizes for + * direct resolution reduction or enlargement and for direct resolving the + * common 2x1 and 1x2 subsampling cases without additional resampling: NxN + * (N=1...16), 2NxN, and Nx2N (N=1...8) pixels for one 8x8 input DCT block. + * + * For N<8 we simply take the corresponding low-frequency coefficients of + * the 8x8 input DCT block and apply an NxN point IDCT on the sub-block + * to yield the downscaled outputs. + * This can be seen as direct low-pass downsampling from the DCT domain + * point of view rather than the usual spatial domain point of view, + * yielding significant computational savings and results at least + * as good as common bilinear (averaging) spatial downsampling. + * + * For N>8 we apply a partial NxN IDCT on the 8 input coefficients as + * lower frequencies and higher frequencies assumed to be zero. + * It turns out that the computational effort is similar to the 8x8 IDCT + * regarding the output size. + * Furthermore, the scaling and descaling is the same for all IDCT sizes. + * + * CAUTION: We rely on the FIX() macro except for the N=1,2,4,8 cases + * since there would be too many additional constants to pre-calculate. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_ISLOW_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCT blocks. /* deliberate syntax err */ +#endif + + +/* + * The poop on this scaling stuff is as follows: + * + * Each 1-D IDCT step produces outputs which are a factor of sqrt(N) + * larger than the true IDCT outputs. The final outputs are therefore + * a factor of N larger than desired; since N=8 this can be cured by + * a simple right shift at the end of the algorithm. The advantage of + * this arrangement is that we save two multiplications per 1-D IDCT, + * because the y0 and y4 inputs need not be divided by sqrt(N). + * + * We have to do addition and subtraction of the integer inputs, which + * is no problem, and multiplication by fractional constants, which is + * a problem to do in integer arithmetic. We multiply all the constants + * by CONST_SCALE and convert them to integer constants (thus retaining + * CONST_BITS bits of precision in the constants). After doing a + * multiplication we have to divide the product by CONST_SCALE, with proper + * rounding, to produce the correct output. This division can be done + * cheaply as a right shift of CONST_BITS bits. We postpone shifting + * as long as possible so that partial sums can be added together with + * full fractional precision. + * + * The outputs of the first pass are scaled up by PASS1_BITS bits so that + * they are represented to better-than-integral precision. These outputs + * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word + * with the recommended scaling. (To scale up 12-bit sample data further, an + * intermediate INT32 array would be needed.) + * + * To avoid overflow of the 32-bit intermediate results in pass 2, we must + * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis + * shows that the values given below are the most effective. + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ +#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ +#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ +#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ +#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ +#else +#define FIX_0_298631336 FIX(0.298631336) +#define FIX_0_390180644 FIX(0.390180644) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_175875602 FIX(1.175875602) +#define FIX_1_501321110 FIX(1.501321110) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_1_961570560 FIX(1.961570560) +#define FIX_2_053119869 FIX(2.053119869) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_072711026 FIX(3.072711026) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce an int result. In this module, both inputs and result + * are 16 bits or less, so either int or short multiply will work. + */ + +#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z2 <<= CONST_BITS; + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z2 += ONE << (CONST_BITS-PASS1_BITS-1); + + tmp0 = z2 + z3; + tmp1 = z2 - z3; + + tmp10 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + tmp11 = tmp1 + tmp3; + tmp12 = tmp1 - tmp3; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + z2 = tmp0 + tmp2; + z3 = tmp1 + tmp3; + + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z2 += z1; + z3 += z1; + + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + tmp0 += z1 + z2; + tmp3 += z1 + z3; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp1 += z1 + z3; + tmp2 += z1 + z2; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * On machines with very fast multiplication, it's possible that the + * test takes more time than it's worth. In that case this section + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + outptr[4] = dcval; + outptr[5] = dcval; + outptr[6] = dcval; + outptr[7] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + + /* Add fudge factor here for final descale. */ + z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 = (INT32) wsptr[4]; + + tmp0 = (z2 + z3) << CONST_BITS; + tmp1 = (z2 - z3) << CONST_BITS; + + tmp10 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + tmp11 = tmp1 + tmp3; + tmp12 = tmp1 - tmp3; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = (INT32) wsptr[7]; + tmp1 = (INT32) wsptr[5]; + tmp2 = (INT32) wsptr[3]; + tmp3 = (INT32) wsptr[1]; + + z2 = tmp0 + tmp2; + z3 = tmp1 + tmp3; + + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z2 += z1; + z3 += z1; + + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + tmp0 += z1 + z2; + tmp3 += z1 + z3; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp1 += z1 + z3; + tmp2 += z1 + z2; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#ifdef IDCT_SCALING_SUPPORTED + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 7x7 output block. + * + * Optimized algorithm with 12 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/14). + */ + +GLOBAL(void) +jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[7*7]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp13 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp13 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp0 = z1 + z3; + z2 -= tmp0; + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + tmp0 += z2; + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + + /* Final output stage */ + + wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[7*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[7*3] = (int) RIGHT_SHIFT(tmp13, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 7 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp13 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp0 = z1 + z3; + z2 -= tmp0; + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + tmp0 += z2; + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 7; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 6x6 output block. + * + * Optimized algorithm with 3 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/12). + */ + +GLOBAL(void) +jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[6*6]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS); + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + tmp10 = tmp1 + tmp0; + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[6*1] = (int) (tmp11 + tmp1); + wsptr[6*4] = (int) (tmp11 - tmp1); + wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 6 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[4]; + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = tmp0 - tmp10 - tmp10; + tmp10 = (INT32) wsptr[2]; + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + tmp10 = tmp1 + tmp0; + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << CONST_BITS; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 5x5 output block. + * + * Optimized algorithm with 5 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/10). + */ + +GLOBAL(void) +jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[5*5]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp12 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + z3 = tmp12 + z2; + tmp10 = z3 + z1; + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + + /* Final output stage */ + + wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[5*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 5 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp12 <<= CONST_BITS; + tmp0 = (INT32) wsptr[2]; + tmp1 = (INT32) wsptr[4]; + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + z3 = tmp12 + z2; + tmp10 = z3 + z1; + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 5; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 4x4 output block. + * + * Optimized algorithm with 3 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. + */ + +GLOBAL(void) +jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[4*4]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + + tmp10 = (tmp0 + tmp2) << PASS1_BITS; + tmp12 = (tmp0 - tmp2) << PASS1_BITS; + + /* Odd part */ + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS); + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS); + + /* Final output stage */ + + wsptr[4*0] = (int) (tmp10 + tmp0); + wsptr[4*3] = (int) (tmp10 - tmp0); + wsptr[4*1] = (int) (tmp12 + tmp2); + wsptr[4*2] = (int) (tmp12 - tmp2); + } + + /* Pass 2: process 4 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp2 = (INT32) wsptr[2]; + + tmp10 = (tmp0 + tmp2) << CONST_BITS; + tmp12 = (tmp0 - tmp2) << CONST_BITS; + + /* Odd part */ + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 4; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 3x3 output block. + * + * Optimized algorithm with 2 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/6). + */ + +GLOBAL(void) +jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[3*3]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + tmp10 = tmp0 + tmp12; + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + + /* Final output stage */ + + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[3*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 3 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[2]; + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + tmp10 = tmp0 + tmp12; + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = (INT32) wsptr[1]; + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 3; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 2x2 output block. + * + * Multiplication-less algorithm. + */ + +GLOBAL(void) +jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + ISLOW_MULT_TYPE * quantptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* Pass 1: process columns from input. */ + + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + + /* Column 0 */ + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + /* Add fudge factor here for final descale. */ + tmp4 += ONE << 2; + + tmp0 = tmp4 + tmp5; + tmp2 = tmp4 - tmp5; + + /* Column 1 */ + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0+1], quantptr[DCTSIZE*0+1]); + tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1+1], quantptr[DCTSIZE*1+1]); + + tmp1 = tmp4 + tmp5; + tmp3 = tmp4 - tmp5; + + /* Pass 2: process 2 rows, store into output array. */ + + /* Row 0 */ + outptr = output_buf[0] + output_col; + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK]; + + /* Row 1 */ + outptr = output_buf[1] + output_col; + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp2 + tmp3, 3) & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2 - tmp3, 3) & RANGE_MASK]; +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 1x1 output block. + * + * We hardly need an inverse DCT routine for this: just take the + * average pixel value, which is one-eighth of the DC coefficient. + */ + +GLOBAL(void) +jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + int dcval; + ISLOW_MULT_TYPE * quantptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* 1x1 is trivial: just take the DC coefficient divided by 8. */ + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + dcval = DEQUANTIZE(coef_block[0], quantptr[0]); + dcval = (int) DESCALE((INT32) dcval, 3); + + output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 9x9 output block. + * + * Optimized algorithm with 10 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/18). + */ + +GLOBAL(void) +jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*9]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + tmp1 = tmp0 + tmp3; + tmp2 = tmp0 - tmp3 - tmp3; + + tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */ + tmp11 = tmp2 + tmp0; + tmp14 = tmp2 - tmp0 - tmp0; + + tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */ + tmp2 = MULTIPLY(z1, FIX(1.083350441)); /* c4 */ + tmp3 = MULTIPLY(z2, FIX(0.245575608)); /* c8 */ + + tmp10 = tmp1 + tmp0 - tmp3; + tmp12 = tmp1 - tmp0 + tmp2; + tmp13 = tmp1 - tmp2 + tmp3; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + tmp0 = tmp2 + tmp3 - z2; + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + tmp2 += z2 - tmp1; + tmp3 += z2 + tmp1; + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp13 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp13 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp14, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 9 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 9; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + tmp1 = tmp0 + tmp3; + tmp2 = tmp0 - tmp3 - tmp3; + + tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */ + tmp11 = tmp2 + tmp0; + tmp14 = tmp2 - tmp0 - tmp0; + + tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */ + tmp2 = MULTIPLY(z1, FIX(1.083350441)); /* c4 */ + tmp3 = MULTIPLY(z2, FIX(0.245575608)); /* c8 */ + + tmp10 = tmp1 + tmp0 - tmp3; + tmp12 = tmp1 - tmp0 + tmp2; + tmp13 = tmp1 - tmp2 + tmp3; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + tmp0 = tmp2 + tmp3 - z2; + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + tmp2 += z2 - tmp1; + tmp3 += z2 + tmp1; + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 10x10 output block. + * + * Optimized algorithm with 12 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/20). + */ + +GLOBAL(void) +jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24; + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*10]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + tmp10 = z3 + z1; + tmp11 = z3 - z2; + + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + CONST_BITS-PASS1_BITS); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + tmp21 = tmp11 + tmp13; + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + z5 = z3 << CONST_BITS; + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + z4 = z5 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) (tmp22 + tmp12); + wsptr[8*7] = (int) (tmp22 - tmp12); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 10 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 10; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + tmp10 = z3 + z1; + tmp11 = z3 - z2; + + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + tmp21 = tmp11 + tmp13; + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z3 <<= CONST_BITS; + z4 = (INT32) wsptr[7]; + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + z4 = z3 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 11x11 output block. + * + * Optimized algorithm with 24 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/22). + */ + +GLOBAL(void) +jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*11]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp10 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp10 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + z4 = z1 + z3; + tmp24 = MULTIPLY(z4, - FIX(1.155664402)); /* -(c2-c10) */ + z4 -= z2; + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + tmp21 = tmp20 + tmp23 + tmp25 - + MULTIPLY(z2, FIX(1.821790775)); /* c2+c4+c10-c6 */ + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + tmp24 += tmp25; + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + MULTIPLY(z1, FIX(1.390975730)); /* c4+c10 */ + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z2; + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.887983902)); /* c3-c9 */ + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(0.923107866)); /* c7+c5+c3-c1-2*c9 */ + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + tmp11 += z1; + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + MULTIPLY(z4, FIX(1.684843907)); /* c3+c9 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 11 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 11; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp10 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + z4 = z1 + z3; + tmp24 = MULTIPLY(z4, - FIX(1.155664402)); /* -(c2-c10) */ + z4 -= z2; + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + tmp21 = tmp20 + tmp23 + tmp25 - + MULTIPLY(z2, FIX(1.821790775)); /* c2+c4+c10-c6 */ + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + tmp24 += tmp25; + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + MULTIPLY(z1, FIX(1.390975730)); /* c4+c10 */ + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z2; + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.887983902)); /* c3-c9 */ + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(0.923107866)); /* c7+c5+c3-c1-2*c9 */ + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + tmp11 += z1; + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + MULTIPLY(z4, FIX(1.684843907)); /* c3+c9 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 12x12 output block. + * + * Optimized algorithm with 15 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/24). + */ + +GLOBAL(void) +jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*12]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z2 <<= CONST_BITS; + + tmp12 = z1 - z2; + + tmp21 = z3 + tmp12; + tmp24 = z3 - tmp12; + + tmp12 = z4 + z2; + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + + tmp22 = tmp11 + tmp12; + tmp23 = tmp11 - tmp12; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 12 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 12; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 <<= CONST_BITS; + + z4 = (INT32) wsptr[4]; + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = (INT32) wsptr[2]; + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = (INT32) wsptr[6]; + z2 <<= CONST_BITS; + + tmp12 = z1 - z2; + + tmp21 = z3 + tmp12; + tmp24 = z3 - tmp12; + + tmp12 = z4 + z2; + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + + tmp22 = tmp11 + tmp12; + tmp23 = tmp11 - tmp12; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 13x13 output block. + * + * Optimized algorithm with 29 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/26). + */ + +GLOBAL(void) +jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*13]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.435816023)); /* (c2-c10)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + + tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */ + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + tmp15 = z1 + z4; + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(2.020082300)); /* c7+c5+c3-c1 */ + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + tmp11 += tmp14; + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + tmp12 += tmp14; + tmp13 += tmp14; + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + MULTIPLY(z2, FIX(0.466105296)); /* c1-c7 */ + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + tmp14 += z1; + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + MULTIPLY(z4, FIX(1.742345811)); /* c1+c11 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 13 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 13; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[4]; + z4 = (INT32) wsptr[6]; + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.435816023)); /* (c2-c10)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + + tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */ + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + tmp15 = z1 + z4; + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(2.020082300)); /* c7+c5+c3-c1 */ + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + tmp11 += tmp14; + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + tmp12 += tmp14; + tmp13 += tmp14; + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + MULTIPLY(z2, FIX(0.466105296)); /* c1-c7 */ + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + tmp14 += z1; + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + MULTIPLY(z4, FIX(1.742345811)); /* c1+c11 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 14x14 output block. + * + * Optimized algorithm with 20 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/28). + */ + +GLOBAL(void) +jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*14]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + + tmp10 = z1 + z2; + tmp11 = z1 + z3; + tmp12 = z1 - z4; + + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + CONST_BITS-PASS1_BITS); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + + tmp20 = tmp10 + tmp13; + tmp26 = tmp10 - tmp13; + tmp21 = tmp11 + tmp14; + tmp25 = tmp11 - tmp14; + tmp22 = tmp12 + tmp15; + tmp24 = tmp12 - tmp15; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp13 = z4 << CONST_BITS; + + tmp14 = z1 + z3; + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + tmp16 += tmp15; + z1 += z4; + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + + tmp13 = (z1 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) (tmp23 + tmp13); + wsptr[8*10] = (int) (tmp23 - tmp13); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 14 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 14; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + + tmp10 = z1 + z2; + tmp11 = z1 + z3; + tmp12 = z1 - z4; + + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + + tmp20 = tmp10 + tmp13; + tmp26 = tmp10 - tmp13; + tmp21 = tmp11 + tmp14; + tmp25 = tmp11 - tmp14; + tmp22 = tmp12 + tmp15; + tmp24 = tmp12 - tmp15; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + z4 <<= CONST_BITS; + + tmp14 = z1 + z3; + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + tmp16 += tmp15; + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 15x15 output block. + * + * Optimized algorithm with 22 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/30). + */ + +GLOBAL(void) +jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*15]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + + tmp12 = z1 - tmp10; + tmp13 = z1 + tmp11; + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + + z4 = z2 - z3; + z3 += z2; + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + + tmp20 = tmp13 + tmp10 + tmp11; + tmp23 = tmp12 - tmp10 + tmp11 + z2; + + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + + tmp25 = tmp13 - tmp10 - tmp11; + tmp26 = tmp12 + tmp10 - tmp11 - z2; + + tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + + tmp21 = tmp12 + tmp10 + tmp11; + tmp24 = tmp13 - tmp10 + tmp11; + tmp11 += tmp11; + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp13 = z2 - z4; + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + z2 = z1 - z4; + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*14] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 15 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 15; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[4]; + z4 = (INT32) wsptr[6]; + + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + + tmp12 = z1 - tmp10; + tmp13 = z1 + tmp11; + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + + z4 = z2 - z3; + z3 += z2; + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + + tmp20 = tmp13 + tmp10 + tmp11; + tmp23 = tmp12 - tmp10 + tmp11 + z2; + + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + + tmp25 = tmp13 - tmp10 - tmp11; + tmp26 = tmp12 + tmp10 - tmp11 - z2; + + tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + + tmp21 = tmp12 + tmp10 + tmp11; + tmp24 = tmp13 - tmp10 + tmp11; + tmp11 += tmp11; + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z4 = (INT32) wsptr[5]; + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + z4 = (INT32) wsptr[7]; + + tmp13 = z2 - z4; + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + z2 = z1 - z4; + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 16x16 output block. + * + * Optimized algorithm with 28 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/32). + */ + +GLOBAL(void) +jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*16]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += 1 << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + tmp12 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + + tmp20 = tmp10 + tmp0; + tmp27 = tmp10 - tmp0; + tmp21 = tmp12 + tmp1; + tmp26 = tmp12 - tmp1; + tmp22 = tmp13 + tmp2; + tmp25 = tmp13 - tmp2; + tmp23 = tmp11 + tmp3; + tmp24 = tmp11 - tmp3; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 16 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 16; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[4]; + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + tmp12 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + + tmp20 = tmp10 + tmp0; + tmp27 = tmp10 - tmp0; + tmp21 = tmp12 + tmp1; + tmp26 = tmp12 - tmp1; + tmp22 = tmp13 + tmp2; + tmp25 = tmp13 - tmp2; + tmp23 = tmp11 + tmp3; + tmp24 = tmp11 - tmp3; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 16x8 output block. + * + * 8-point IDCT in pass 1 (columns), 16-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*8]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z2 <<= CONST_BITS; + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z2 += ONE << (CONST_BITS-PASS1_BITS-1); + + tmp0 = z2 + z3; + tmp1 = z2 - z3; + + tmp10 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + tmp11 = tmp1 + tmp3; + tmp12 = tmp1 - tmp3; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + z2 = tmp0 + tmp2; + z3 = tmp1 + tmp3; + + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z2 += z1; + z3 += z1; + + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + tmp0 += z1 + z2; + tmp3 += z1 + z3; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp1 += z1 + z3; + tmp2 += z1 + z2; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process 8 rows from work array, store into output array. + * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32). + */ + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[4]; + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + tmp12 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + + tmp20 = tmp10 + tmp0; + tmp27 = tmp10 - tmp0; + tmp21 = tmp12 + tmp1; + tmp26 = tmp12 - tmp1; + tmp22 = tmp13 + tmp2; + tmp25 = tmp13 - tmp2; + tmp23 = tmp11 + tmp3; + tmp24 = tmp11 - tmp3; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 14x7 output block. + * + * 7-point IDCT in pass 1 (columns), 14-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_14x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*7]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp23 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp23 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp23 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp10 = z1 + z3; + z2 -= tmp10; + tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */ + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp10 = tmp11 - tmp12; + tmp11 += tmp12; + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp11 += tmp12; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + tmp10 += z2; + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 7 rows from work array, store into output array. + * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28). + */ + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + + tmp10 = z1 + z2; + tmp11 = z1 + z3; + tmp12 = z1 - z4; + + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + + tmp20 = tmp10 + tmp13; + tmp26 = tmp10 - tmp13; + tmp21 = tmp11 + tmp14; + tmp25 = tmp11 - tmp14; + tmp22 = tmp12 + tmp15; + tmp24 = tmp12 - tmp15; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + z4 <<= CONST_BITS; + + tmp14 = z1 + z3; + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + tmp16 += tmp15; + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 12x6 output block. + * + * 6-point IDCT in pass 1 (columns), 12-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_12x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*6]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp10 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp10 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp12 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + tmp11 = tmp10 + tmp20; + tmp21 = RIGHT_SHIFT(tmp10 - tmp20 - tmp20, CONST_BITS-PASS1_BITS); + tmp20 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp10 = MULTIPLY(tmp20, FIX(1.224744871)); /* c2 */ + tmp20 = tmp11 + tmp10; + tmp22 = tmp11 - tmp10; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp10 = tmp11 + ((z1 + z2) << CONST_BITS); + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + tmp11 = (z1 - z2 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) (tmp21 + tmp11); + wsptr[8*4] = (int) (tmp21 - tmp11); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 6 rows from work array, store into output array. + * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24). + */ + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 <<= CONST_BITS; + + z4 = (INT32) wsptr[4]; + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = (INT32) wsptr[2]; + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = (INT32) wsptr[6]; + z2 <<= CONST_BITS; + + tmp12 = z1 - z2; + + tmp21 = z3 + tmp12; + tmp24 = z3 - tmp12; + + tmp12 = z4 + z2; + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + + tmp22 = tmp11 + tmp12; + tmp23 = tmp11 - tmp12; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 10x5 output block. + * + * 5-point IDCT in pass 1 (columns), 10-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_10x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*5]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp12 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp13 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp14 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + z3 = tmp12 + z2; + tmp10 = z3 + z1; + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp10 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp11 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 5 rows from work array, store into output array. + * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20). + */ + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + tmp10 = z3 + z1; + tmp11 = z3 - z2; + + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + tmp21 = tmp11 + tmp13; + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z3 <<= CONST_BITS; + z4 = (INT32) wsptr[7]; + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + z4 = z3 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 8x4 output block. + * + * 4-point IDCT in pass 1 (columns), 8-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_8x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*4]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 4-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + + tmp10 = (tmp0 + tmp2) << PASS1_BITS; + tmp12 = (tmp0 - tmp2) << PASS1_BITS; + + /* Odd part */ + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS); + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS); + + /* Final output stage */ + + wsptr[8*0] = (int) (tmp10 + tmp0); + wsptr[8*3] = (int) (tmp10 - tmp0); + wsptr[8*1] = (int) (tmp12 + tmp2); + wsptr[8*2] = (int) (tmp12 - tmp2); + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + + /* Add fudge factor here for final descale. */ + z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 = (INT32) wsptr[4]; + + tmp0 = (z2 + z3) << CONST_BITS; + tmp1 = (z2 - z3) << CONST_BITS; + + tmp10 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + tmp11 = tmp1 + tmp3; + tmp12 = tmp1 - tmp3; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = (INT32) wsptr[7]; + tmp1 = (INT32) wsptr[5]; + tmp2 = (INT32) wsptr[3]; + tmp3 = (INT32) wsptr[1]; + + z2 = tmp0 + tmp2; + z3 = tmp1 + tmp3; + + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z2 += z1; + z3 += z1; + + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + tmp0 += z1 + z2; + tmp3 += z1 + z3; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp1 += z1 + z3; + tmp2 += z1 + z2; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 6x3 output block. + * + * 3-point IDCT in pass 1 (columns), 6-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_6x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[6*3]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + tmp10 = tmp0 + tmp12; + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[6*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[6*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 3 rows from work array, store into output array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[4]; + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = tmp0 - tmp10 - tmp10; + tmp10 = (INT32) wsptr[2]; + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + tmp10 = tmp1 + tmp0; + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << CONST_BITS; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 4x2 output block. + * + * 2-point IDCT in pass 1 (columns), 4-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_4x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + INT32 * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + INT32 workspace[4*2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + /* Odd part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + /* Final output stage */ + + wsptr[4*0] = tmp10 + tmp0; + wsptr[4*1] = tmp10 - tmp0; + } + + /* Pass 2: process 2 rows from work array, store into output array. + * 4-point IDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. + */ + wsptr = workspace; + for (ctr = 0; ctr < 2; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = wsptr[0] + (ONE << 2); + tmp2 = wsptr[2]; + + tmp10 = (tmp0 + tmp2) << CONST_BITS; + tmp12 = (tmp0 - tmp2) << CONST_BITS; + + /* Odd part */ + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = wsptr[1]; + z3 = wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+3) + & RANGE_MASK]; + + wsptr += 4; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 2x1 output block. + * + * 1-point IDCT in pass 1 (columns), 2-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_2x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp10; + ISLOW_MULT_TYPE * quantptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* Pass 1: empty. */ + + /* Pass 2: process 1 row from input, store into output array. */ + + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + outptr = output_buf[0] + output_col; + + /* Even part */ + + tmp10 = DEQUANTIZE(coef_block[0], quantptr[0]); + /* Add fudge factor here for final descale. */ + tmp10 += ONE << 2; + + /* Odd part */ + + tmp0 = DEQUANTIZE(coef_block[1], quantptr[1]); + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) & RANGE_MASK]; +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 8x16 output block. + * + * 16-point IDCT in pass 1 (columns), 8-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_8x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*16]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + tmp12 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + + tmp20 = tmp10 + tmp0; + tmp27 = tmp10 - tmp0; + tmp21 = tmp12 + tmp1; + tmp26 = tmp12 - tmp1; + tmp22 = tmp13 + tmp2; + tmp25 = tmp13 - tmp2; + tmp23 = tmp11 + tmp3; + tmp24 = tmp11 - tmp3; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < 16; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + + /* Add fudge factor here for final descale. */ + z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 = (INT32) wsptr[4]; + + tmp0 = (z2 + z3) << CONST_BITS; + tmp1 = (z2 - z3) << CONST_BITS; + + tmp10 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + tmp11 = tmp1 + tmp3; + tmp12 = tmp1 - tmp3; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = (INT32) wsptr[7]; + tmp1 = (INT32) wsptr[5]; + tmp2 = (INT32) wsptr[3]; + tmp3 = (INT32) wsptr[1]; + + z2 = tmp0 + tmp2; + z3 = tmp1 + tmp3; + + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z2 += z1; + z3 += z1; + + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + tmp0 += z1 + z2; + tmp3 += z1 + z3; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp1 += z1 + z3; + tmp2 += z1 + z2; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 7x14 output block. + * + * 14-point IDCT in pass 1 (columns), 7-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_7x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[7*14]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + + tmp10 = z1 + z2; + tmp11 = z1 + z3; + tmp12 = z1 - z4; + + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + CONST_BITS-PASS1_BITS); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + + tmp20 = tmp10 + tmp13; + tmp26 = tmp10 - tmp13; + tmp21 = tmp11 + tmp14; + tmp25 = tmp11 - tmp14; + tmp22 = tmp12 + tmp15; + tmp24 = tmp12 - tmp15; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp13 = z4 << CONST_BITS; + + tmp14 = z1 + z3; + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + tmp16 += tmp15; + z1 += z4; + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + + tmp13 = (z1 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[7*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[7*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[7*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[7*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[7*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[7*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[7*3] = (int) (tmp23 + tmp13); + wsptr[7*10] = (int) (tmp23 - tmp13); + wsptr[7*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[7*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[7*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[7*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[7*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + wsptr[7*7] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 14 rows from work array, store into output array. + * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14). + */ + wsptr = workspace; + for (ctr = 0; ctr < 14; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp23 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp23 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp10 = z1 + z3; + z2 -= tmp10; + tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */ + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp10 = tmp11 - tmp12; + tmp11 += tmp12; + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp11 += tmp12; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + tmp10 += z2; + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 7; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 6x12 output block. + * + * 12-point IDCT in pass 1 (columns), 6-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_6x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[6*12]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z2 <<= CONST_BITS; + + tmp12 = z1 - z2; + + tmp21 = z3 + tmp12; + tmp24 = z3 - tmp12; + + tmp12 = z4 + z2; + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + + tmp22 = tmp11 + tmp12; + tmp23 = tmp11 - tmp12; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[6*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[6*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[6*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[6*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[6*9] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[6*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[6*8] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[6*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[6*7] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[6*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[6*6] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 12 rows from work array, store into output array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + wsptr = workspace; + for (ctr = 0; ctr < 12; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp10 <<= CONST_BITS; + tmp12 = (INT32) wsptr[4]; + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + tmp11 = tmp10 + tmp20; + tmp21 = tmp10 - tmp20 - tmp20; + tmp20 = (INT32) wsptr[2]; + tmp10 = MULTIPLY(tmp20, FIX(1.224744871)); /* c2 */ + tmp20 = tmp11 + tmp10; + tmp22 = tmp11 - tmp10; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp10 = tmp11 + ((z1 + z2) << CONST_BITS); + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + tmp11 = (z1 - z2 - z3) << CONST_BITS; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 5x10 output block. + * + * 10-point IDCT in pass 1 (columns), 5-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_5x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24; + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[5*10]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + tmp10 = z3 + z1; + tmp11 = z3 - z2; + + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + CONST_BITS-PASS1_BITS); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + tmp21 = tmp11 + tmp13; + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + z5 = z3 << CONST_BITS; + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + z4 = z5 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + + /* Final output stage */ + + wsptr[5*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[5*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[5*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[5*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[5*2] = (int) (tmp22 + tmp12); + wsptr[5*7] = (int) (tmp22 - tmp12); + wsptr[5*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[5*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[5*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[5*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 10 rows from work array, store into output array. + * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10). + */ + wsptr = workspace; + for (ctr = 0; ctr < 10; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp12 <<= CONST_BITS; + tmp13 = (INT32) wsptr[2]; + tmp14 = (INT32) wsptr[4]; + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + z3 = tmp12 + z2; + tmp10 = z3 + z1; + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 5; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 4x8 output block. + * + * 8-point IDCT in pass 1 (columns), 4-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[4*8]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 4; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[4*0] = dcval; + wsptr[4*1] = dcval; + wsptr[4*2] = dcval; + wsptr[4*3] = dcval; + wsptr[4*4] = dcval; + wsptr[4*5] = dcval; + wsptr[4*6] = dcval; + wsptr[4*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z2 <<= CONST_BITS; + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z2 += ONE << (CONST_BITS-PASS1_BITS-1); + + tmp0 = z2 + z3; + tmp1 = z2 - z3; + + tmp10 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + tmp11 = tmp1 + tmp3; + tmp12 = tmp1 - tmp3; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + z2 = tmp0 + tmp2; + z3 = tmp1 + tmp3; + + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z2 += z1; + z3 += z1; + + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + tmp0 += z1 + z2; + tmp3 += z1 + z3; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp1 += z1 + z3; + tmp2 += z1 + z2; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + wsptr[4*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[4*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[4*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[4*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[4*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[4*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[4*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[4*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process 8 rows from work array, store into output array. + * 4-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp2 = (INT32) wsptr[2]; + + tmp10 = (tmp0 + tmp2) << CONST_BITS; + tmp12 = (tmp0 - tmp2) << CONST_BITS; + + /* Odd part */ + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 4; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 3x6 output block. + * + * 6-point IDCT in pass 1 (columns), 3-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_3x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[3*6]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS); + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + tmp10 = tmp1 + tmp0; + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[3*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[3*1] = (int) (tmp11 + tmp1); + wsptr[3*4] = (int) (tmp11 - tmp1); + wsptr[3*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[3*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 6 rows from work array, store into output array. + * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6). + */ + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[2]; + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + tmp10 = tmp0 + tmp12; + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = (INT32) wsptr[1]; + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 3; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 2x4 output block. + * + * 4-point IDCT in pass 1 (columns), 2-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_2x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + INT32 * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + INT32 workspace[2*4]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. + * 4-point IDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 2; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + + tmp10 = (tmp0 + tmp2) << CONST_BITS; + tmp12 = (tmp0 - tmp2) << CONST_BITS; + + /* Odd part */ + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + + /* Final output stage */ + + wsptr[2*0] = tmp10 + tmp0; + wsptr[2*3] = tmp10 - tmp0; + wsptr[2*1] = tmp12 + tmp2; + wsptr[2*2] = tmp12 - tmp2; + } + + /* Pass 2: process 4 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp10 = wsptr[0] + (ONE << (CONST_BITS+2)); + + /* Odd part */ + + tmp0 = wsptr[1]; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS+3) + & RANGE_MASK]; + + wsptr += 2; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 1x2 output block. + * + * 2-point IDCT in pass 1 (columns), 1-point in pass 2 (rows). + */ + +GLOBAL(void) +jpeg_idct_1x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp10; + ISLOW_MULT_TYPE * quantptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* Process 1 column from input, store into output array. */ + + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + + /* Even part */ + + tmp10 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + /* Add fudge factor here for final descale. */ + tmp10 += ONE << 2; + + /* Odd part */ + + tmp0 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + + /* Final output stage */ + + output_buf[0][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) + & RANGE_MASK]; + output_buf[1][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) + & RANGE_MASK]; +} + +#endif /* IDCT_SCALING_SUPPORTED */ +#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jinclude.h b/3rdparty/openctm/tools/jpeg/jinclude.h new file mode 100644 index 000000000..5ff60fedf --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jinclude.h @@ -0,0 +1,91 @@ +/* + * jinclude.h + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file exists to provide a single place to fix any problems with + * including the wrong system include files. (Common problems are taken + * care of by the standard jconfig symbols, but on really weird systems + * you may have to edit this file.) + * + * NOTE: this file is NOT intended to be included by applications using the + * JPEG library. Most applications need only include jpeglib.h. + */ + + +/* Include auto-config file to find out which system include files we need. */ + +#include "jconfig.h" /* auto configuration options */ +#define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ + +/* + * We need the NULL macro and size_t typedef. + * On an ANSI-conforming system it is sufficient to include . + * Otherwise, we get them from or ; we may have to + * pull in as well. + * Note that the core JPEG library does not require ; + * only the default error handler and data source/destination modules do. + * But we must pull it in because of the references to FILE in jpeglib.h. + * You can remove those references if you want to compile without . + */ + +#ifdef HAVE_STDDEF_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef NEED_SYS_TYPES_H +#include +#endif + +#include + +/* + * We need memory copying and zeroing functions, plus strncpy(). + * ANSI and System V implementations declare these in . + * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). + * Some systems may declare memset and memcpy in . + * + * NOTE: we assume the size parameters to these functions are of type size_t. + * Change the casts in these macros if not! + */ + +#ifdef NEED_BSD_STRINGS + +#include +#define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) +#define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) + +#else /* not BSD, assume ANSI/SysV string lib */ + +#include +#define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) +#define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) + +#endif + +/* + * In ANSI C, and indeed any rational implementation, size_t is also the + * type returned by sizeof(). However, it seems there are some irrational + * implementations out there, in which sizeof() returns an int even though + * size_t is defined as long or unsigned long. To ensure consistent results + * we always use this SIZEOF() macro in place of using sizeof() directly. + */ + +#define SIZEOF(object) ((size_t) sizeof(object)) + +/* + * The modules that use fread() and fwrite() always invoke them through + * these macros. On some systems you may need to twiddle the argument casts. + * CAUTION: argument order is different from underlying functions! + */ + +#define JFREAD(file,buf,sizeofbuf) \ + ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) +#define JFWRITE(file,buf,sizeofbuf) \ + ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) diff --git a/3rdparty/openctm/tools/jpeg/jmemansi.c b/3rdparty/openctm/tools/jpeg/jmemansi.c new file mode 100644 index 000000000..b5da4743f --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemansi.c @@ -0,0 +1,167 @@ +/* + * jmemansi.c + * + * Copyright (C) 1992-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a simple generic implementation of the system- + * dependent portion of the JPEG memory manager. This implementation + * assumes that you have the ANSI-standard library routine tmpfile(). + * Also, the problem of determining the amount of memory available + * is shoved onto the user. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + +#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ +#define SEEK_SET 0 /* if not, assume 0 is correct */ +#endif + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFREAD(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFWRITE(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + fclose(info->temp_file); + /* Since this implementation uses tmpfile() to create the file, + * no explicit file deletion is needed. + */ +} + + +/* + * Initial opening of a backing-store object. + * + * This version uses tmpfile(), which constructs a suitable file name + * behind the scenes. We don't have to use info->temp_name[] at all; + * indeed, we can't even find out the actual name of the temp file. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + if ((info->temp_file = tmpfile()) == NULL) + ERREXITS(cinfo, JERR_TFILE_CREATE, ""); + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/3rdparty/openctm/tools/jpeg/jmemdos.c b/3rdparty/openctm/tools/jpeg/jmemdos.c new file mode 100644 index 000000000..0955047ec --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemdos.c @@ -0,0 +1,638 @@ +/* + * jmemdos.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides an MS-DOS-compatible implementation of the system- + * dependent portion of the JPEG memory manager. Temporary data can be + * stored in extended or expanded memory as well as in regular DOS files. + * + * If you use this file, you must be sure that NEED_FAR_POINTERS is defined + * if you compile in a small-data memory model; it should NOT be defined if + * you use a large-data memory model. This file is not recommended if you + * are using a flat-memory-space 386 environment such as DJGCC or Watcom C. + * Also, this code will NOT work if struct fields are aligned on greater than + * 2-byte boundaries. + * + * Based on code contributed by Ge' Weijers. + */ + +/* + * If you have both extended and expanded memory, you may want to change the + * order in which they are tried in jopen_backing_store. On a 286 machine + * expanded memory is usually faster, since extended memory access involves + * an expensive protected-mode-and-back switch. On 386 and better, extended + * memory is usually faster. As distributed, the code tries extended memory + * first (what? not everyone has a 386? :-). + * + * You can disable use of extended/expanded memory entirely by altering these + * definitions or overriding them from the Makefile (eg, -DEMS_SUPPORTED=0). + */ + +#ifndef XMS_SUPPORTED +#define XMS_SUPPORTED 1 +#endif +#ifndef EMS_SUPPORTED +#define EMS_SUPPORTED 1 +#endif + + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare these */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +extern char * getenv JPP((const char * name)); +#endif + +#ifdef NEED_FAR_POINTERS + +#ifdef __TURBOC__ +/* These definitions work for Borland C (Turbo C) */ +#include /* need farmalloc(), farfree() */ +#define far_malloc(x) farmalloc(x) +#define far_free(x) farfree(x) +#else +/* These definitions work for Microsoft C and compatible compilers */ +#include /* need _fmalloc(), _ffree() */ +#define far_malloc(x) _fmalloc(x) +#define far_free(x) _ffree(x) +#endif + +#else /* not NEED_FAR_POINTERS */ + +#define far_malloc(x) malloc(x) +#define far_free(x) free(x) + +#endif /* NEED_FAR_POINTERS */ + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#else +#define READ_BINARY "rb" +#endif + +#ifndef USE_MSDOS_MEMMGR /* make sure user got configuration right */ + You forgot to define USE_MSDOS_MEMMGR in jconfig.h. /* deliberate syntax error */ +#endif + +#if MAX_ALLOC_CHUNK >= 65535L /* make sure jconfig.h got this right */ + MAX_ALLOC_CHUNK should be less than 64K. /* deliberate syntax error */ +#endif + + +/* + * Declarations for assembly-language support routines (see jmemdosa.asm). + * + * The functions are declared "far" as are all their pointer arguments; + * this ensures the assembly source code will work regardless of the + * compiler memory model. We assume "short" is 16 bits, "long" is 32. + */ + +typedef void far * XMSDRIVER; /* actually a pointer to code */ +typedef struct { /* registers for calling XMS driver */ + unsigned short ax, dx, bx; + void far * ds_si; + } XMScontext; +typedef struct { /* registers for calling EMS driver */ + unsigned short ax, dx, bx; + void far * ds_si; + } EMScontext; + +extern short far jdos_open JPP((short far * handle, char far * filename)); +extern short far jdos_close JPP((short handle)); +extern short far jdos_seek JPP((short handle, long offset)); +extern short far jdos_read JPP((short handle, void far * buffer, + unsigned short count)); +extern short far jdos_write JPP((short handle, void far * buffer, + unsigned short count)); +extern void far jxms_getdriver JPP((XMSDRIVER far *)); +extern void far jxms_calldriver JPP((XMSDRIVER, XMScontext far *)); +extern short far jems_available JPP((void)); +extern void far jems_calldriver JPP((EMScontext far *)); + + +/* + * Selection of a file name for a temporary file. + * This is highly system-dependent, and you may want to customize it. + */ + +static int next_file_num; /* to distinguish among several temp files */ + +LOCAL(void) +select_file_name (char * fname) +{ + const char * env; + char * ptr; + FILE * tfile; + + /* Keep generating file names till we find one that's not in use */ + for (;;) { + /* Get temp directory name from environment TMP or TEMP variable; + * if none, use "." + */ + if ((env = (const char *) getenv("TMP")) == NULL) + if ((env = (const char *) getenv("TEMP")) == NULL) + env = "."; + if (*env == '\0') /* null string means "." */ + env = "."; + ptr = fname; /* copy name to fname */ + while (*env != '\0') + *ptr++ = *env++; + if (ptr[-1] != '\\' && ptr[-1] != '/') + *ptr++ = '\\'; /* append backslash if not in env variable */ + /* Append a suitable file name */ + next_file_num++; /* advance counter */ + sprintf(ptr, "JPG%03d.TMP", next_file_num); + /* Probe to see if file name is already in use */ + if ((tfile = fopen(fname, READ_BINARY)) == NULL) + break; + fclose(tfile); /* oops, it's there; close tfile & try again */ + } +} + + +/* + * Near-memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are allocated in far memory, if possible + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) far_malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + far_free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 300000L /* for total usage about 450K */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + +/* + * For MS-DOS we support three types of backing storage: + * 1. Conventional DOS files. We access these by direct DOS calls rather + * than via the stdio package. This provides a bit better performance, + * but the real reason is that the buffers to be read or written are FAR. + * The stdio library for small-data memory models can't cope with that. + * 2. Extended memory, accessed per the XMS V2.0 specification. + * 3. Expanded memory, accessed per the LIM/EMS 4.0 specification. + * You'll need copies of those specs to make sense of the related code. + * The specs are available by Internet FTP from the SIMTEL archives + * (oak.oakland.edu and its various mirror sites). See files + * pub/msdos/microsoft/xms20.arc and pub/msdos/info/limems41.zip. + */ + + +/* + * Access methods for a DOS file. + */ + + +METHODDEF(void) +read_file_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (jdos_seek(info->handle.file_handle, file_offset)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ + if (byte_count > 65535L) /* safety check */ + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + if (jdos_read(info->handle.file_handle, buffer_address, + (unsigned short) byte_count)) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_file_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (jdos_seek(info->handle.file_handle, file_offset)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ + if (byte_count > 65535L) /* safety check */ + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + if (jdos_write(info->handle.file_handle, buffer_address, + (unsigned short) byte_count)) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_file_store (j_common_ptr cinfo, backing_store_ptr info) +{ + jdos_close(info->handle.file_handle); /* close the file */ + remove(info->temp_name); /* delete the file */ +/* If your system doesn't have remove(), try unlink() instead. + * remove() is the ANSI-standard name for this function, but + * unlink() was more common in pre-ANSI systems. + */ + TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); +} + + +LOCAL(boolean) +open_file_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + short handle; + + select_file_name(info->temp_name); + if (jdos_open((short far *) & handle, (char far *) info->temp_name)) { + /* might as well exit since jpeg_open_backing_store will fail anyway */ + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + return FALSE; + } + info->handle.file_handle = handle; + info->read_backing_store = read_file_store; + info->write_backing_store = write_file_store; + info->close_backing_store = close_file_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); + return TRUE; /* succeeded */ +} + + +/* + * Access methods for extended memory. + */ + +#if XMS_SUPPORTED + +static XMSDRIVER xms_driver; /* saved address of XMS driver */ + +typedef union { /* either long offset or real-mode pointer */ + long offset; + void far * ptr; + } XMSPTR; + +typedef struct { /* XMS move specification structure */ + long length; + XMSH src_handle; + XMSPTR src; + XMSH dst_handle; + XMSPTR dst; + } XMSspec; + +#define ODD(X) (((X) & 1L) != 0) + + +METHODDEF(void) +read_xms_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + XMScontext ctx; + XMSspec spec; + char endbuffer[2]; + + /* The XMS driver can't cope with an odd length, so handle the last byte + * specially if byte_count is odd. We don't expect this to be common. + */ + + spec.length = byte_count & (~ 1L); + spec.src_handle = info->handle.xms_handle; + spec.src.offset = file_offset; + spec.dst_handle = 0; + spec.dst.ptr = buffer_address; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x0b00; /* EMB move */ + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + ERREXIT(cinfo, JERR_XMS_READ); + + if (ODD(byte_count)) { + read_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + ((char FAR *) buffer_address)[byte_count - 1L] = endbuffer[0]; + } +} + + +METHODDEF(void) +write_xms_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + XMScontext ctx; + XMSspec spec; + char endbuffer[2]; + + /* The XMS driver can't cope with an odd length, so handle the last byte + * specially if byte_count is odd. We don't expect this to be common. + */ + + spec.length = byte_count & (~ 1L); + spec.src_handle = 0; + spec.src.ptr = buffer_address; + spec.dst_handle = info->handle.xms_handle; + spec.dst.offset = file_offset; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x0b00; /* EMB move */ + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + ERREXIT(cinfo, JERR_XMS_WRITE); + + if (ODD(byte_count)) { + read_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + endbuffer[0] = ((char FAR *) buffer_address)[byte_count - 1L]; + write_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + } +} + + +METHODDEF(void) +close_xms_store (j_common_ptr cinfo, backing_store_ptr info) +{ + XMScontext ctx; + + ctx.dx = info->handle.xms_handle; + ctx.ax = 0x0a00; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + TRACEMS1(cinfo, 1, JTRC_XMS_CLOSE, info->handle.xms_handle); + /* we ignore any error return from the driver */ +} + + +LOCAL(boolean) +open_xms_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + XMScontext ctx; + + /* Get address of XMS driver */ + jxms_getdriver((XMSDRIVER far *) & xms_driver); + if (xms_driver == NULL) + return FALSE; /* no driver to be had */ + + /* Get version number, must be >= 2.00 */ + ctx.ax = 0x0000; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax < (unsigned short) 0x0200) + return FALSE; + + /* Try to get space (expressed in kilobytes) */ + ctx.dx = (unsigned short) ((total_bytes_needed + 1023L) >> 10); + ctx.ax = 0x0900; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + return FALSE; + + /* Succeeded, save the handle and away we go */ + info->handle.xms_handle = ctx.dx; + info->read_backing_store = read_xms_store; + info->write_backing_store = write_xms_store; + info->close_backing_store = close_xms_store; + TRACEMS1(cinfo, 1, JTRC_XMS_OPEN, ctx.dx); + return TRUE; /* succeeded */ +} + +#endif /* XMS_SUPPORTED */ + + +/* + * Access methods for expanded memory. + */ + +#if EMS_SUPPORTED + +/* The EMS move specification structure requires word and long fields aligned + * at odd byte boundaries. Some compilers will align struct fields at even + * byte boundaries. While it's usually possible to force byte alignment, + * that causes an overall performance penalty and may pose problems in merging + * JPEG into a larger application. Instead we accept some rather dirty code + * here. Note this code would fail if the hardware did not allow odd-byte + * word & long accesses, but all 80x86 CPUs do. + */ + +typedef void far * EMSPTR; + +typedef union { /* EMS move specification structure */ + long length; /* It's easy to access first 4 bytes */ + char bytes[18]; /* Misaligned fields in here! */ + } EMSspec; + +/* Macros for accessing misaligned fields */ +#define FIELD_AT(spec,offset,type) (*((type *) &(spec.bytes[offset]))) +#define SRC_TYPE(spec) FIELD_AT(spec,4,char) +#define SRC_HANDLE(spec) FIELD_AT(spec,5,EMSH) +#define SRC_OFFSET(spec) FIELD_AT(spec,7,unsigned short) +#define SRC_PAGE(spec) FIELD_AT(spec,9,unsigned short) +#define SRC_PTR(spec) FIELD_AT(spec,7,EMSPTR) +#define DST_TYPE(spec) FIELD_AT(spec,11,char) +#define DST_HANDLE(spec) FIELD_AT(spec,12,EMSH) +#define DST_OFFSET(spec) FIELD_AT(spec,14,unsigned short) +#define DST_PAGE(spec) FIELD_AT(spec,16,unsigned short) +#define DST_PTR(spec) FIELD_AT(spec,14,EMSPTR) + +#define EMSPAGESIZE 16384L /* gospel, see the EMS specs */ + +#define HIBYTE(W) (((W) >> 8) & 0xFF) +#define LOBYTE(W) ((W) & 0xFF) + + +METHODDEF(void) +read_ems_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + EMScontext ctx; + EMSspec spec; + + spec.length = byte_count; + SRC_TYPE(spec) = 1; + SRC_HANDLE(spec) = info->handle.ems_handle; + SRC_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); + SRC_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); + DST_TYPE(spec) = 0; + DST_HANDLE(spec) = 0; + DST_PTR(spec) = buffer_address; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x5700; /* move memory region */ + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + ERREXIT(cinfo, JERR_EMS_READ); +} + + +METHODDEF(void) +write_ems_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + EMScontext ctx; + EMSspec spec; + + spec.length = byte_count; + SRC_TYPE(spec) = 0; + SRC_HANDLE(spec) = 0; + SRC_PTR(spec) = buffer_address; + DST_TYPE(spec) = 1; + DST_HANDLE(spec) = info->handle.ems_handle; + DST_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); + DST_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x5700; /* move memory region */ + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + ERREXIT(cinfo, JERR_EMS_WRITE); +} + + +METHODDEF(void) +close_ems_store (j_common_ptr cinfo, backing_store_ptr info) +{ + EMScontext ctx; + + ctx.ax = 0x4500; + ctx.dx = info->handle.ems_handle; + jems_calldriver((EMScontext far *) & ctx); + TRACEMS1(cinfo, 1, JTRC_EMS_CLOSE, info->handle.ems_handle); + /* we ignore any error return from the driver */ +} + + +LOCAL(boolean) +open_ems_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + EMScontext ctx; + + /* Is EMS driver there? */ + if (! jems_available()) + return FALSE; + + /* Get status, make sure EMS is OK */ + ctx.ax = 0x4000; + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + return FALSE; + + /* Get version, must be >= 4.0 */ + ctx.ax = 0x4600; + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0 || LOBYTE(ctx.ax) < 0x40) + return FALSE; + + /* Try to allocate requested space */ + ctx.ax = 0x4300; + ctx.bx = (unsigned short) ((total_bytes_needed + EMSPAGESIZE-1L) / EMSPAGESIZE); + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + return FALSE; + + /* Succeeded, save the handle and away we go */ + info->handle.ems_handle = ctx.dx; + info->read_backing_store = read_ems_store; + info->write_backing_store = write_ems_store; + info->close_backing_store = close_ems_store; + TRACEMS1(cinfo, 1, JTRC_EMS_OPEN, ctx.dx); + return TRUE; /* succeeded */ +} + +#endif /* EMS_SUPPORTED */ + + +/* + * Initial opening of a backing-store object. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + /* Try extended memory, then expanded memory, then regular file. */ +#if XMS_SUPPORTED + if (open_xms_store(cinfo, info, total_bytes_needed)) + return; +#endif +#if EMS_SUPPORTED + if (open_ems_store(cinfo, info, total_bytes_needed)) + return; +#endif + if (open_file_store(cinfo, info, total_bytes_needed)) + return; + ERREXITS(cinfo, JERR_TFILE_CREATE, ""); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; /* initialize temp file name generator */ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* Microsoft C, at least in v6.00A, will not successfully reclaim freed + * blocks of size > 32Kbytes unless we give it a kick in the rear, like so: + */ +#ifdef NEED_FHEAPMIN + _fheapmin(); +#endif +} diff --git a/3rdparty/openctm/tools/jpeg/jmemdosa.asm b/3rdparty/openctm/tools/jpeg/jmemdosa.asm new file mode 100644 index 000000000..c6ec48b34 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemdosa.asm @@ -0,0 +1,379 @@ +; +; jmemdosa.asm +; +; Copyright (C) 1992, Thomas G. Lane. +; This file is part of the Independent JPEG Group's software. +; For conditions of distribution and use, see the accompanying README file. +; +; This file contains low-level interface routines to support the MS-DOS +; backing store manager (jmemdos.c). Routines are provided to access disk +; files through direct DOS calls, and to access XMS and EMS drivers. +; +; This file should assemble with Microsoft's MASM or any compatible +; assembler (including Borland's Turbo Assembler). If you haven't got +; a compatible assembler, better fall back to jmemansi.c or jmemname.c. +; +; To minimize dependence on the C compiler's register usage conventions, +; we save and restore all 8086 registers, even though most compilers only +; require SI,DI,DS to be preserved. Also, we use only 16-bit-wide return +; values, which everybody returns in AX. +; +; Based on code contributed by Ge' Weijers. +; + +JMEMDOSA_TXT segment byte public 'CODE' + + assume cs:JMEMDOSA_TXT + + public _jdos_open + public _jdos_close + public _jdos_seek + public _jdos_read + public _jdos_write + public _jxms_getdriver + public _jxms_calldriver + public _jems_available + public _jems_calldriver + +; +; short far jdos_open (short far * handle, char far * filename) +; +; Create and open a temporary file +; +_jdos_open proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov cx,0 ; normal file attributes + lds dx,dword ptr [bp+10] ; get filename pointer + mov ah,3ch ; create file + int 21h + jc open_err ; if failed, return error code + lds bx,dword ptr [bp+6] ; get handle pointer + mov word ptr [bx],ax ; save the handle + xor ax,ax ; return zero for OK +open_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_open endp + + +; +; short far jdos_close (short handle) +; +; Close the file handle +; +_jdos_close proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + mov ah,3eh ; close file + int 21h + jc close_err ; if failed, return error code + xor ax,ax ; return zero for OK +close_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_close endp + + +; +; short far jdos_seek (short handle, long offset) +; +; Set file position +; +_jdos_seek proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + mov dx,word ptr [bp+8] ; LS offset + mov cx,word ptr [bp+10] ; MS offset + mov ax,4200h ; absolute seek + int 21h + jc seek_err ; if failed, return error code + xor ax,ax ; return zero for OK +seek_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_seek endp + + +; +; short far jdos_read (short handle, void far * buffer, unsigned short count) +; +; Read from file +; +_jdos_read proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + lds dx,dword ptr [bp+8] ; buffer address + mov cx,word ptr [bp+12] ; number of bytes + mov ah,3fh ; read file + int 21h + jc read_err ; if failed, return error code + cmp ax,word ptr [bp+12] ; make sure all bytes were read + je read_ok + mov ax,1 ; else return 1 for not OK + jmp short read_err +read_ok: xor ax,ax ; return zero for OK +read_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_read endp + + +; +; short far jdos_write (short handle, void far * buffer, unsigned short count) +; +; Write to file +; +_jdos_write proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + lds dx,dword ptr [bp+8] ; buffer address + mov cx,word ptr [bp+12] ; number of bytes + mov ah,40h ; write file + int 21h + jc write_err ; if failed, return error code + cmp ax,word ptr [bp+12] ; make sure all bytes written + je write_ok + mov ax,1 ; else return 1 for not OK + jmp short write_err +write_ok: xor ax,ax ; return zero for OK +write_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_write endp + + +; +; void far jxms_getdriver (XMSDRIVER far *) +; +; Get the address of the XMS driver, or NULL if not available +; +_jxms_getdriver proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov ax,4300h ; call multiplex interrupt with + int 2fh ; a magic cookie, hex 4300 + cmp al,80h ; AL should contain hex 80 + je xmsavail + xor dx,dx ; no XMS driver available + xor ax,ax ; return a nil pointer + jmp short xmsavail_done +xmsavail: mov ax,4310h ; fetch driver address with + int 2fh ; another magic cookie + mov dx,es ; copy address to dx:ax + mov ax,bx +xmsavail_done: les bx,dword ptr [bp+6] ; get pointer to return value + mov word ptr es:[bx],ax + mov word ptr es:[bx+2],dx + pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jxms_getdriver endp + + +; +; void far jxms_calldriver (XMSDRIVER, XMScontext far *) +; +; The XMScontext structure contains values for the AX,DX,BX,SI,DS registers. +; These are loaded, the XMS call is performed, and the new values of the +; AX,DX,BX registers are written back to the context structure. +; +_jxms_calldriver proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + les bx,dword ptr [bp+10] ; get XMScontext pointer + mov ax,word ptr es:[bx] ; load registers + mov dx,word ptr es:[bx+2] + mov si,word ptr es:[bx+6] + mov ds,word ptr es:[bx+8] + mov bx,word ptr es:[bx+4] + call dword ptr [bp+6] ; call the driver + mov cx,bx ; save returned BX for a sec + les bx,dword ptr [bp+10] ; get XMScontext pointer + mov word ptr es:[bx],ax ; put back ax,dx,bx + mov word ptr es:[bx+2],dx + mov word ptr es:[bx+4],cx + pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jxms_calldriver endp + + +; +; short far jems_available (void) +; +; Have we got an EMS driver? (this comes straight from the EMS 4.0 specs) +; +_jems_available proc far + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov ax,3567h ; get interrupt vector 67h + int 21h + push cs + pop ds + mov di,000ah ; check offs 10 in returned seg + lea si,ASCII_device_name ; against literal string + mov cx,8 + cld + repe cmpsb + jne no_ems + mov ax,1 ; match, it's there + jmp short avail_done +no_ems: xor ax,ax ; it's not there +avail_done: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + ret + +ASCII_device_name db "EMMXXXX0" + +_jems_available endp + + +; +; void far jems_calldriver (EMScontext far *) +; +; The EMScontext structure contains values for the AX,DX,BX,SI,DS registers. +; These are loaded, the EMS trap is performed, and the new values of the +; AX,DX,BX registers are written back to the context structure. +; +_jems_calldriver proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + les bx,dword ptr [bp+6] ; get EMScontext pointer + mov ax,word ptr es:[bx] ; load registers + mov dx,word ptr es:[bx+2] + mov si,word ptr es:[bx+6] + mov ds,word ptr es:[bx+8] + mov bx,word ptr es:[bx+4] + int 67h ; call the EMS driver + mov cx,bx ; save returned BX for a sec + les bx,dword ptr [bp+6] ; get EMScontext pointer + mov word ptr es:[bx],ax ; put back ax,dx,bx + mov word ptr es:[bx+2],dx + mov word ptr es:[bx+4],cx + pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jems_calldriver endp + +JMEMDOSA_TXT ends + + end diff --git a/3rdparty/openctm/tools/jpeg/jmemmac.c b/3rdparty/openctm/tools/jpeg/jmemmac.c new file mode 100644 index 000000000..a6f043ed4 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemmac.c @@ -0,0 +1,289 @@ +/* + * jmemmac.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * jmemmac.c provides an Apple Macintosh implementation of the system- + * dependent portion of the JPEG memory manager. + * + * If you use jmemmac.c, then you must define USE_MAC_MEMMGR in the + * JPEG_INTERNALS part of jconfig.h. + * + * jmemmac.c uses the Macintosh toolbox routines NewPtr and DisposePtr + * instead of malloc and free. It accurately determines the amount of + * memory available by using CompactMem. Notice that if left to its + * own devices, this code can chew up all available space in the + * application's zone, with the exception of the rather small "slop" + * factor computed in jpeg_mem_available(). The application can ensure + * that more space is left over by reducing max_memory_to_use. + * + * Large images are swapped to disk using temporary files and System 7.0+'s + * temporary folder functionality. + * + * Note that jmemmac.c depends on two features of MacOS that were first + * introduced in System 7: FindFolder and the FSSpec-based calls. + * If your application uses jmemmac.c and is run under System 6 or earlier, + * and the jpeg library decides it needs a temporary file, it will abort, + * printing error messages about requiring System 7. (If no temporary files + * are created, it will run fine.) + * + * If you want to use jmemmac.c in an application that might be used with + * System 6 or earlier, then you should remove dependencies on FindFolder + * and the FSSpec calls. You will need to replace FindFolder with some + * other mechanism for finding a place to put temporary files, and you + * should replace the FSSpec calls with their HFS equivalents: + * + * FSpDelete -> HDelete + * FSpGetFInfo -> HGetFInfo + * FSpCreate -> HCreate + * FSpOpenDF -> HOpen *** Note: not HOpenDF *** + * FSMakeFSSpec -> (fill in spec by hand.) + * + * (Use HOpen instead of HOpenDF. HOpen is just a glue-interface to PBHOpen, + * which is on all HFS macs. HOpenDF is a System 7 addition which avoids the + * ages-old problem of names starting with a period.) + * + * Contributed by Sam Bushell (jsam@iagu.on.net) and + * Dan Gildor (gyld@in-touch.com). + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef USE_MAC_MEMMGR /* make sure user got configuration right */ + You forgot to define USE_MAC_MEMMGR in jconfig.h. /* deliberate syntax error */ +#endif + +#include /* we use the MacOS memory manager */ +#include /* we use the MacOS File stuff */ +#include /* we use the MacOS HFS stuff */ +#include /* for smSystemScript */ +#include /* we use Gestalt to test for specific functionality */ + +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "JPG%03d.TMP" +#endif + +static int next_file_num; /* to distinguish among several temp files */ + + +/* + * Memory allocation and freeing are controlled by the MacOS library + * routines NewPtr() and DisposePtr(), which allocate fixed-address + * storage. Unfortunately, the IJG library isn't smart enough to cope + * with relocatable storage. + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) NewPtr(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + DisposePtr((Ptr) object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: we include FAR keywords in the routine declarations simply for + * consistency with the rest of the IJG code; FAR should expand to empty + * on rational architectures like the Mac. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) NewPtr(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + DisposePtr((Ptr) object); +} + + +/* + * This routine computes the total memory space available for allocation. + */ + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + long limit = cinfo->mem->max_memory_to_use - already_allocated; + long slop, mem; + + /* Don't ask for more than what application has told us we may use */ + if (max_bytes_needed > limit && limit > 0) + max_bytes_needed = limit; + /* Find whether there's a big enough free block in the heap. + * CompactMem tries to create a contiguous block of the requested size, + * and then returns the size of the largest free block (which could be + * much more or much less than we asked for). + * We add some slop to ensure we don't use up all available memory. + */ + slop = max_bytes_needed / 16 + 32768L; + mem = CompactMem(max_bytes_needed + slop) - slop; + if (mem < 0) + mem = 0; /* sigh, couldn't even get the slop */ + /* Don't take more than the application says we can have */ + if (mem > limit && limit > 0) + mem = limit; + return mem; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + long bytes = byte_count; + long retVal; + + if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) + ERREXIT(cinfo, JERR_TFILE_SEEK); + + retVal = FSRead ( info->temp_file, &bytes, + (unsigned char *) buffer_address ); + if ( retVal != noErr || bytes != byte_count ) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + long bytes = byte_count; + long retVal; + + if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) + ERREXIT(cinfo, JERR_TFILE_SEEK); + + retVal = FSWrite ( info->temp_file, &bytes, + (unsigned char *) buffer_address ); + if ( retVal != noErr || bytes != byte_count ) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + FSClose ( info->temp_file ); + FSpDelete ( &(info->tempSpec) ); +} + + +/* + * Initial opening of a backing-store object. + * + * This version uses FindFolder to find the Temporary Items folder, + * and puts the temporary file in there. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + short tmpRef, vRefNum; + long dirID; + FInfo finderInfo; + FSSpec theSpec; + Str255 fName; + OSErr osErr; + long gestaltResponse = 0; + + /* Check that FSSpec calls are available. */ + osErr = Gestalt( gestaltFSAttr, &gestaltResponse ); + if ( ( osErr != noErr ) + || !( gestaltResponse & (1<temp_name, TEMP_FILE_NAME, next_file_num); + strcpy ( (Ptr)fName+1, info->temp_name ); + *fName = strlen (info->temp_name); + osErr = FSMakeFSSpec ( vRefNum, dirID, fName, &theSpec ); + + if ( (osErr = FSpGetFInfo ( &theSpec, &finderInfo ) ) != noErr ) + break; + } + + osErr = FSpCreate ( &theSpec, '????', '????', smSystemScript ); + if ( osErr != noErr ) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + + osErr = FSpOpenDF ( &theSpec, fsRdWrPerm, &(info->temp_file) ); + if ( osErr != noErr ) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + + info->tempSpec = theSpec; + + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; + + /* max_memory_to_use will be initialized to FreeMem()'s result; + * the calling application might later reduce it, for example + * to leave room to invoke multiple JPEG objects. + * Note that FreeMem returns the total number of free bytes; + * it may not be possible to allocate a single block of this size. + */ + return FreeMem(); +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/3rdparty/openctm/tools/jpeg/jmemmgr.c b/3rdparty/openctm/tools/jpeg/jmemmgr.c new file mode 100644 index 000000000..b636f1be5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemmgr.c @@ -0,0 +1,1118 @@ +/* + * jmemmgr.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the JPEG system-independent memory management + * routines. This code is usable across a wide variety of machines; most + * of the system dependencies have been isolated in a separate file. + * The major functions provided here are: + * * pool-based allocation and freeing of memory; + * * policy decisions about how to divide available memory among the + * virtual arrays; + * * control logic for swapping virtual arrays between main memory and + * backing storage. + * The separate system-dependent file provides the actual backing-storage + * access code, and it contains the policy decision about how much total + * main memory to use. + * This file is system-dependent in the sense that some of its functions + * are unnecessary in some systems. For example, if there is enough virtual + * memory so that backing storage will never be used, much of the virtual + * array control logic could be removed. (Of course, if you have that much + * memory then you shouldn't care about a little bit of unused code...) + */ + +#define JPEG_INTERNALS +#define AM_MEMORY_MANAGER /* we define jvirt_Xarray_control structs */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef NO_GETENV +#ifndef HAVE_STDLIB_H /* should declare getenv() */ +extern char * getenv JPP((const char * name)); +#endif +#endif + + +/* + * Some important notes: + * The allocation routines provided here must never return NULL. + * They should exit to error_exit if unsuccessful. + * + * It's not a good idea to try to merge the sarray and barray routines, + * even though they are textually almost the same, because samples are + * usually stored as bytes while coefficients are shorts or ints. Thus, + * in machines where byte pointers have a different representation from + * word pointers, the resulting machine code could not be the same. + */ + + +/* + * Many machines require storage alignment: longs must start on 4-byte + * boundaries, doubles on 8-byte boundaries, etc. On such machines, malloc() + * always returns pointers that are multiples of the worst-case alignment + * requirement, and we had better do so too. + * There isn't any really portable way to determine the worst-case alignment + * requirement. This module assumes that the alignment requirement is + * multiples of sizeof(ALIGN_TYPE). + * By default, we define ALIGN_TYPE as double. This is necessary on some + * workstations (where doubles really do need 8-byte alignment) and will work + * fine on nearly everything. If your machine has lesser alignment needs, + * you can save a few bytes by making ALIGN_TYPE smaller. + * The only place I know of where this will NOT work is certain Macintosh + * 680x0 compilers that define double as a 10-byte IEEE extended float. + * Doing 10-byte alignment is counterproductive because longwords won't be + * aligned well. Put "#define ALIGN_TYPE long" in jconfig.h if you have + * such a compiler. + */ + +#ifndef ALIGN_TYPE /* so can override from jconfig.h */ +#define ALIGN_TYPE double +#endif + + +/* + * We allocate objects from "pools", where each pool is gotten with a single + * request to jpeg_get_small() or jpeg_get_large(). There is no per-object + * overhead within a pool, except for alignment padding. Each pool has a + * header with a link to the next pool of the same class. + * Small and large pool headers are identical except that the latter's + * link pointer must be FAR on 80x86 machines. + * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE + * field. This forces the compiler to make SIZEOF(small_pool_hdr) a multiple + * of the alignment requirement of ALIGN_TYPE. + */ + +typedef union small_pool_struct * small_pool_ptr; + +typedef union small_pool_struct { + struct { + small_pool_ptr next; /* next in list of pools */ + size_t bytes_used; /* how many bytes already used within pool */ + size_t bytes_left; /* bytes still available in this pool */ + } hdr; + ALIGN_TYPE dummy; /* included in union to ensure alignment */ +} small_pool_hdr; + +typedef union large_pool_struct FAR * large_pool_ptr; + +typedef union large_pool_struct { + struct { + large_pool_ptr next; /* next in list of pools */ + size_t bytes_used; /* how many bytes already used within pool */ + size_t bytes_left; /* bytes still available in this pool */ + } hdr; + ALIGN_TYPE dummy; /* included in union to ensure alignment */ +} large_pool_hdr; + + +/* + * Here is the full definition of a memory manager object. + */ + +typedef struct { + struct jpeg_memory_mgr pub; /* public fields */ + + /* Each pool identifier (lifetime class) names a linked list of pools. */ + small_pool_ptr small_list[JPOOL_NUMPOOLS]; + large_pool_ptr large_list[JPOOL_NUMPOOLS]; + + /* Since we only have one lifetime class of virtual arrays, only one + * linked list is necessary (for each datatype). Note that the virtual + * array control blocks being linked together are actually stored somewhere + * in the small-pool list. + */ + jvirt_sarray_ptr virt_sarray_list; + jvirt_barray_ptr virt_barray_list; + + /* This counts total space obtained from jpeg_get_small/large */ + long total_space_allocated; + + /* alloc_sarray and alloc_barray set this value for use by virtual + * array routines. + */ + JDIMENSION last_rowsperchunk; /* from most recent alloc_sarray/barray */ +} my_memory_mgr; + +typedef my_memory_mgr * my_mem_ptr; + + +/* + * The control blocks for virtual arrays. + * Note that these blocks are allocated in the "small" pool area. + * System-dependent info for the associated backing store (if any) is hidden + * inside the backing_store_info struct. + */ + +struct jvirt_sarray_control { + JSAMPARRAY mem_buffer; /* => the in-memory buffer */ + JDIMENSION rows_in_array; /* total virtual array height */ + JDIMENSION samplesperrow; /* width of array (and of memory buffer) */ + JDIMENSION maxaccess; /* max rows accessed by access_virt_sarray */ + JDIMENSION rows_in_mem; /* height of memory buffer */ + JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ + JDIMENSION cur_start_row; /* first logical row # in the buffer */ + JDIMENSION first_undef_row; /* row # of first uninitialized row */ + boolean pre_zero; /* pre-zero mode requested? */ + boolean dirty; /* do current buffer contents need written? */ + boolean b_s_open; /* is backing-store data valid? */ + jvirt_sarray_ptr next; /* link to next virtual sarray control block */ + backing_store_info b_s_info; /* System-dependent control info */ +}; + +struct jvirt_barray_control { + JBLOCKARRAY mem_buffer; /* => the in-memory buffer */ + JDIMENSION rows_in_array; /* total virtual array height */ + JDIMENSION blocksperrow; /* width of array (and of memory buffer) */ + JDIMENSION maxaccess; /* max rows accessed by access_virt_barray */ + JDIMENSION rows_in_mem; /* height of memory buffer */ + JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ + JDIMENSION cur_start_row; /* first logical row # in the buffer */ + JDIMENSION first_undef_row; /* row # of first uninitialized row */ + boolean pre_zero; /* pre-zero mode requested? */ + boolean dirty; /* do current buffer contents need written? */ + boolean b_s_open; /* is backing-store data valid? */ + jvirt_barray_ptr next; /* link to next virtual barray control block */ + backing_store_info b_s_info; /* System-dependent control info */ +}; + + +#ifdef MEM_STATS /* optional extra stuff for statistics */ + +LOCAL(void) +print_mem_stats (j_common_ptr cinfo, int pool_id) +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + + /* Since this is only a debugging stub, we can cheat a little by using + * fprintf directly rather than going through the trace message code. + * This is helpful because message parm array can't handle longs. + */ + fprintf(stderr, "Freeing pool %d, total space = %ld\n", + pool_id, mem->total_space_allocated); + + for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL; + lhdr_ptr = lhdr_ptr->hdr.next) { + fprintf(stderr, " Large chunk used %ld\n", + (long) lhdr_ptr->hdr.bytes_used); + } + + for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL; + shdr_ptr = shdr_ptr->hdr.next) { + fprintf(stderr, " Small chunk used %ld free %ld\n", + (long) shdr_ptr->hdr.bytes_used, + (long) shdr_ptr->hdr.bytes_left); + } +} + +#endif /* MEM_STATS */ + + +LOCAL(void) +out_of_memory (j_common_ptr cinfo, int which) +/* Report an out-of-memory error and stop execution */ +/* If we compiled MEM_STATS support, report alloc requests before dying */ +{ +#ifdef MEM_STATS + cinfo->err->trace_level = 2; /* force self_destruct to report stats */ +#endif + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); +} + + +/* + * Allocation of "small" objects. + * + * For these, we use pooled storage. When a new pool must be created, + * we try to get enough space for the current request plus a "slop" factor, + * where the slop will be the amount of leftover space in the new pool. + * The speed vs. space tradeoff is largely determined by the slop values. + * A different slop value is provided for each pool class (lifetime), + * and we also distinguish the first pool of a class from later ones. + * NOTE: the values given work fairly well on both 16- and 32-bit-int + * machines, but may be too small if longs are 64 bits or more. + */ + +static const size_t first_pool_slop[JPOOL_NUMPOOLS] = +{ + 1600, /* first PERMANENT pool */ + 16000 /* first IMAGE pool */ +}; + +static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = +{ + 0, /* additional PERMANENT pools */ + 5000 /* additional IMAGE pools */ +}; + +#define MIN_SLOP 50 /* greater than 0 to avoid futile looping */ + + +METHODDEF(void *) +alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject) +/* Allocate a "small" object */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr hdr_ptr, prev_hdr_ptr; + char * data_ptr; + size_t odd_bytes, min_request, slop; + + /* Check for unsatisfiable request (do now to ensure no overflow below) */ + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) + out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ + + /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ + odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); + if (odd_bytes > 0) + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + + /* See if space is available in any existing pool */ + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + prev_hdr_ptr = NULL; + hdr_ptr = mem->small_list[pool_id]; + while (hdr_ptr != NULL) { + if (hdr_ptr->hdr.bytes_left >= sizeofobject) + break; /* found pool with enough space */ + prev_hdr_ptr = hdr_ptr; + hdr_ptr = hdr_ptr->hdr.next; + } + + /* Time to make a new pool? */ + if (hdr_ptr == NULL) { + /* min_request is what we need now, slop is what will be leftover */ + min_request = sizeofobject + SIZEOF(small_pool_hdr); + if (prev_hdr_ptr == NULL) /* first pool in class? */ + slop = first_pool_slop[pool_id]; + else + slop = extra_pool_slop[pool_id]; + /* Don't ask for more than MAX_ALLOC_CHUNK */ + if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) + slop = (size_t) (MAX_ALLOC_CHUNK-min_request); + /* Try to get space, if fail reduce slop and try again */ + for (;;) { + hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); + if (hdr_ptr != NULL) + break; + slop /= 2; + if (slop < MIN_SLOP) /* give up when it gets real small */ + out_of_memory(cinfo, 2); /* jpeg_get_small failed */ + } + mem->total_space_allocated += min_request + slop; + /* Success, initialize the new pool header and add to end of list */ + hdr_ptr->hdr.next = NULL; + hdr_ptr->hdr.bytes_used = 0; + hdr_ptr->hdr.bytes_left = sizeofobject + slop; + if (prev_hdr_ptr == NULL) /* first pool in class? */ + mem->small_list[pool_id] = hdr_ptr; + else + prev_hdr_ptr->hdr.next = hdr_ptr; + } + + /* OK, allocate the object from the current pool */ + data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */ + data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ + hdr_ptr->hdr.bytes_used += sizeofobject; + hdr_ptr->hdr.bytes_left -= sizeofobject; + + return (void *) data_ptr; +} + + +/* + * Allocation of "large" objects. + * + * The external semantics of these are the same as "small" objects, + * except that FAR pointers are used on 80x86. However the pool + * management heuristics are quite different. We assume that each + * request is large enough that it may as well be passed directly to + * jpeg_get_large; the pool management just links everything together + * so that we can free it all on demand. + * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY + * structures. The routines that create these structures (see below) + * deliberately bunch rows together to ensure a large request size. + */ + +METHODDEF(void FAR *) +alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject) +/* Allocate a "large" object */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + large_pool_ptr hdr_ptr; + size_t odd_bytes; + + /* Check for unsatisfiable request (do now to ensure no overflow below) */ + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) + out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ + + /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ + odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); + if (odd_bytes > 0) + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + + /* Always make a new pool */ + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + + SIZEOF(large_pool_hdr)); + if (hdr_ptr == NULL) + out_of_memory(cinfo, 4); /* jpeg_get_large failed */ + mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); + + /* Success, initialize the new pool header and add to list */ + hdr_ptr->hdr.next = mem->large_list[pool_id]; + /* We maintain space counts in each pool header for statistical purposes, + * even though they are not needed for allocation. + */ + hdr_ptr->hdr.bytes_used = sizeofobject; + hdr_ptr->hdr.bytes_left = 0; + mem->large_list[pool_id] = hdr_ptr; + + return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */ +} + + +/* + * Creation of 2-D sample arrays. + * The pointers are in near heap, the samples themselves in FAR heap. + * + * To minimize allocation overhead and to allow I/O of large contiguous + * blocks, we allocate the sample rows in groups of as many rows as possible + * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request. + * NB: the virtual array control routines, later in this file, know about + * this chunking of rows. The rowsperchunk value is left in the mem manager + * object so that it can be saved away if this sarray is the workspace for + * a virtual array. + */ + +METHODDEF(JSAMPARRAY) +alloc_sarray (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, JDIMENSION numrows) +/* Allocate a 2-D sample array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + JSAMPARRAY result; + JSAMPROW workspace; + JDIMENSION rowsperchunk, currow, i; + long ltemp; + + /* Calculate max # of rows allowed in one allocation chunk */ + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + ((long) samplesperrow * SIZEOF(JSAMPLE)); + if (ltemp <= 0) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + if (ltemp < (long) numrows) + rowsperchunk = (JDIMENSION) ltemp; + else + rowsperchunk = numrows; + mem->last_rowsperchunk = rowsperchunk; + + /* Get space for row pointers (small object) */ + result = (JSAMPARRAY) alloc_small(cinfo, pool_id, + (size_t) (numrows * SIZEOF(JSAMPROW))); + + /* Get the rows themselves (large objects) */ + currow = 0; + while (currow < numrows) { + rowsperchunk = MIN(rowsperchunk, numrows - currow); + workspace = (JSAMPROW) alloc_large(cinfo, pool_id, + (size_t) ((size_t) rowsperchunk * (size_t) samplesperrow + * SIZEOF(JSAMPLE))); + for (i = rowsperchunk; i > 0; i--) { + result[currow++] = workspace; + workspace += samplesperrow; + } + } + + return result; +} + + +/* + * Creation of 2-D coefficient-block arrays. + * This is essentially the same as the code for sample arrays, above. + */ + +METHODDEF(JBLOCKARRAY) +alloc_barray (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, JDIMENSION numrows) +/* Allocate a 2-D coefficient-block array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + JBLOCKARRAY result; + JBLOCKROW workspace; + JDIMENSION rowsperchunk, currow, i; + long ltemp; + + /* Calculate max # of rows allowed in one allocation chunk */ + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + ((long) blocksperrow * SIZEOF(JBLOCK)); + if (ltemp <= 0) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + if (ltemp < (long) numrows) + rowsperchunk = (JDIMENSION) ltemp; + else + rowsperchunk = numrows; + mem->last_rowsperchunk = rowsperchunk; + + /* Get space for row pointers (small object) */ + result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, + (size_t) (numrows * SIZEOF(JBLOCKROW))); + + /* Get the rows themselves (large objects) */ + currow = 0; + while (currow < numrows) { + rowsperchunk = MIN(rowsperchunk, numrows - currow); + workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, + (size_t) ((size_t) rowsperchunk * (size_t) blocksperrow + * SIZEOF(JBLOCK))); + for (i = rowsperchunk; i > 0; i--) { + result[currow++] = workspace; + workspace += blocksperrow; + } + } + + return result; +} + + +/* + * About virtual array management: + * + * The above "normal" array routines are only used to allocate strip buffers + * (as wide as the image, but just a few rows high). Full-image-sized buffers + * are handled as "virtual" arrays. The array is still accessed a strip at a + * time, but the memory manager must save the whole array for repeated + * accesses. The intended implementation is that there is a strip buffer in + * memory (as high as is possible given the desired memory limit), plus a + * backing file that holds the rest of the array. + * + * The request_virt_array routines are told the total size of the image and + * the maximum number of rows that will be accessed at once. The in-memory + * buffer must be at least as large as the maxaccess value. + * + * The request routines create control blocks but not the in-memory buffers. + * That is postponed until realize_virt_arrays is called. At that time the + * total amount of space needed is known (approximately, anyway), so free + * memory can be divided up fairly. + * + * The access_virt_array routines are responsible for making a specific strip + * area accessible (after reading or writing the backing file, if necessary). + * Note that the access routines are told whether the caller intends to modify + * the accessed strip; during a read-only pass this saves having to rewrite + * data to disk. The access routines are also responsible for pre-zeroing + * any newly accessed rows, if pre-zeroing was requested. + * + * In current usage, the access requests are usually for nonoverlapping + * strips; that is, successive access start_row numbers differ by exactly + * num_rows = maxaccess. This means we can get good performance with simple + * buffer dump/reload logic, by making the in-memory buffer be a multiple + * of the access height; then there will never be accesses across bufferload + * boundaries. The code will still work with overlapping access requests, + * but it doesn't handle bufferload overlaps very efficiently. + */ + + +METHODDEF(jvirt_sarray_ptr) +request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero, + JDIMENSION samplesperrow, JDIMENSION numrows, + JDIMENSION maxaccess) +/* Request a virtual 2-D sample array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + jvirt_sarray_ptr result; + + /* Only IMAGE-lifetime virtual arrays are currently supported */ + if (pool_id != JPOOL_IMAGE) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + /* get control block */ + result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, + SIZEOF(struct jvirt_sarray_control)); + + result->mem_buffer = NULL; /* marks array not yet realized */ + result->rows_in_array = numrows; + result->samplesperrow = samplesperrow; + result->maxaccess = maxaccess; + result->pre_zero = pre_zero; + result->b_s_open = FALSE; /* no associated backing-store object */ + result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ + mem->virt_sarray_list = result; + + return result; +} + + +METHODDEF(jvirt_barray_ptr) +request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero, + JDIMENSION blocksperrow, JDIMENSION numrows, + JDIMENSION maxaccess) +/* Request a virtual 2-D coefficient-block array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + jvirt_barray_ptr result; + + /* Only IMAGE-lifetime virtual arrays are currently supported */ + if (pool_id != JPOOL_IMAGE) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + /* get control block */ + result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, + SIZEOF(struct jvirt_barray_control)); + + result->mem_buffer = NULL; /* marks array not yet realized */ + result->rows_in_array = numrows; + result->blocksperrow = blocksperrow; + result->maxaccess = maxaccess; + result->pre_zero = pre_zero; + result->b_s_open = FALSE; /* no associated backing-store object */ + result->next = mem->virt_barray_list; /* add to list of virtual arrays */ + mem->virt_barray_list = result; + + return result; +} + + +METHODDEF(void) +realize_virt_arrays (j_common_ptr cinfo) +/* Allocate the in-memory buffers for any unrealized virtual arrays */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + long space_per_minheight, maximum_space, avail_mem; + long minheights, max_minheights; + jvirt_sarray_ptr sptr; + jvirt_barray_ptr bptr; + + /* Compute the minimum space needed (maxaccess rows in each buffer) + * and the maximum space needed (full image height in each buffer). + * These may be of use to the system-dependent jpeg_mem_available routine. + */ + space_per_minheight = 0; + maximum_space = 0; + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + space_per_minheight += (long) sptr->maxaccess * + (long) sptr->samplesperrow * SIZEOF(JSAMPLE); + maximum_space += (long) sptr->rows_in_array * + (long) sptr->samplesperrow * SIZEOF(JSAMPLE); + } + } + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + space_per_minheight += (long) bptr->maxaccess * + (long) bptr->blocksperrow * SIZEOF(JBLOCK); + maximum_space += (long) bptr->rows_in_array * + (long) bptr->blocksperrow * SIZEOF(JBLOCK); + } + } + + if (space_per_minheight <= 0) + return; /* no unrealized arrays, no work */ + + /* Determine amount of memory to actually use; this is system-dependent. */ + avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space, + mem->total_space_allocated); + + /* If the maximum space needed is available, make all the buffers full + * height; otherwise parcel it out with the same number of minheights + * in each buffer. + */ + if (avail_mem >= maximum_space) + max_minheights = 1000000000L; + else { + max_minheights = avail_mem / space_per_minheight; + /* If there doesn't seem to be enough space, try to get the minimum + * anyway. This allows a "stub" implementation of jpeg_mem_available(). + */ + if (max_minheights <= 0) + max_minheights = 1; + } + + /* Allocate the in-memory buffers and initialize backing store as needed. */ + + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; + if (minheights <= max_minheights) { + /* This buffer fits in memory */ + sptr->rows_in_mem = sptr->rows_in_array; + } else { + /* It doesn't fit in memory, create backing store. */ + sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); + jpeg_open_backing_store(cinfo, & sptr->b_s_info, + (long) sptr->rows_in_array * + (long) sptr->samplesperrow * + (long) SIZEOF(JSAMPLE)); + sptr->b_s_open = TRUE; + } + sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, + sptr->samplesperrow, sptr->rows_in_mem); + sptr->rowsperchunk = mem->last_rowsperchunk; + sptr->cur_start_row = 0; + sptr->first_undef_row = 0; + sptr->dirty = FALSE; + } + } + + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; + if (minheights <= max_minheights) { + /* This buffer fits in memory */ + bptr->rows_in_mem = bptr->rows_in_array; + } else { + /* It doesn't fit in memory, create backing store. */ + bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); + jpeg_open_backing_store(cinfo, & bptr->b_s_info, + (long) bptr->rows_in_array * + (long) bptr->blocksperrow * + (long) SIZEOF(JBLOCK)); + bptr->b_s_open = TRUE; + } + bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, + bptr->blocksperrow, bptr->rows_in_mem); + bptr->rowsperchunk = mem->last_rowsperchunk; + bptr->cur_start_row = 0; + bptr->first_undef_row = 0; + bptr->dirty = FALSE; + } + } +} + + +LOCAL(void) +do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual sample array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); + file_offset = ptr->cur_start_row * bytesperrow; + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + /* One chunk, but check for short chunk at end of buffer */ + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + /* Transfer no more than is currently defined */ + thisrow = (long) ptr->cur_start_row + i; + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + /* Transfer no more than fits in file */ + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + else + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + + +LOCAL(void) +do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual coefficient-block array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); + file_offset = ptr->cur_start_row * bytesperrow; + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + /* One chunk, but check for short chunk at end of buffer */ + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + /* Transfer no more than is currently defined */ + thisrow = (long) ptr->cur_start_row + i; + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + /* Transfer no more than fits in file */ + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + else + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + + +METHODDEF(JSAMPARRAY) +access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, + JDIMENSION start_row, JDIMENSION num_rows, + boolean writable) +/* Access the part of a virtual sample array starting at start_row */ +/* and extending for num_rows rows. writable is true if */ +/* caller intends to modify the accessed area. */ +{ + JDIMENSION end_row = start_row + num_rows; + JDIMENSION undef_row; + + /* debugging check */ + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + ptr->mem_buffer == NULL) + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + + /* Make the desired part of the virtual array accessible */ + if (start_row < ptr->cur_start_row || + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + if (! ptr->b_s_open) + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + /* Flush old buffer contents if necessary */ + if (ptr->dirty) { + do_sarray_io(cinfo, ptr, TRUE); + ptr->dirty = FALSE; + } + /* Decide what part of virtual array to access. + * Algorithm: if target address > current window, assume forward scan, + * load starting at target address. If target address < current window, + * assume backward scan, load so that target area is top of window. + * Note that when switching from forward write to forward read, will have + * start_row = 0, so the limiting case applies and we load from 0 anyway. + */ + if (start_row > ptr->cur_start_row) { + ptr->cur_start_row = start_row; + } else { + /* use long arithmetic here to avoid overflow & unsigned problems */ + long ltemp; + + ltemp = (long) end_row - (long) ptr->rows_in_mem; + if (ltemp < 0) + ltemp = 0; /* don't fall off front end of file */ + ptr->cur_start_row = (JDIMENSION) ltemp; + } + /* Read in the selected part of the array. + * During the initial write pass, we will do no actual read + * because the selected part is all undefined. + */ + do_sarray_io(cinfo, ptr, FALSE); + } + /* Ensure the accessed part of the array is defined; prezero if needed. + * To improve locality of access, we only prezero the part of the array + * that the caller is about to access, not the entire in-memory array. + */ + if (ptr->first_undef_row < end_row) { + if (ptr->first_undef_row < start_row) { + if (writable) /* writer skipped over a section of array */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + undef_row = start_row; /* but reader is allowed to read ahead */ + } else { + undef_row = ptr->first_undef_row; + } + if (writable) + ptr->first_undef_row = end_row; + if (ptr->pre_zero) { + size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE); + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + end_row -= ptr->cur_start_row; + while (undef_row < end_row) { + jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + undef_row++; + } + } else { + if (! writable) /* reader looking at undefined data */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + } + } + /* Flag the buffer dirty if caller will write in it */ + if (writable) + ptr->dirty = TRUE; + /* Return address of proper part of the buffer */ + return ptr->mem_buffer + (start_row - ptr->cur_start_row); +} + + +METHODDEF(JBLOCKARRAY) +access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, + JDIMENSION start_row, JDIMENSION num_rows, + boolean writable) +/* Access the part of a virtual block array starting at start_row */ +/* and extending for num_rows rows. writable is true if */ +/* caller intends to modify the accessed area. */ +{ + JDIMENSION end_row = start_row + num_rows; + JDIMENSION undef_row; + + /* debugging check */ + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + ptr->mem_buffer == NULL) + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + + /* Make the desired part of the virtual array accessible */ + if (start_row < ptr->cur_start_row || + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + if (! ptr->b_s_open) + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + /* Flush old buffer contents if necessary */ + if (ptr->dirty) { + do_barray_io(cinfo, ptr, TRUE); + ptr->dirty = FALSE; + } + /* Decide what part of virtual array to access. + * Algorithm: if target address > current window, assume forward scan, + * load starting at target address. If target address < current window, + * assume backward scan, load so that target area is top of window. + * Note that when switching from forward write to forward read, will have + * start_row = 0, so the limiting case applies and we load from 0 anyway. + */ + if (start_row > ptr->cur_start_row) { + ptr->cur_start_row = start_row; + } else { + /* use long arithmetic here to avoid overflow & unsigned problems */ + long ltemp; + + ltemp = (long) end_row - (long) ptr->rows_in_mem; + if (ltemp < 0) + ltemp = 0; /* don't fall off front end of file */ + ptr->cur_start_row = (JDIMENSION) ltemp; + } + /* Read in the selected part of the array. + * During the initial write pass, we will do no actual read + * because the selected part is all undefined. + */ + do_barray_io(cinfo, ptr, FALSE); + } + /* Ensure the accessed part of the array is defined; prezero if needed. + * To improve locality of access, we only prezero the part of the array + * that the caller is about to access, not the entire in-memory array. + */ + if (ptr->first_undef_row < end_row) { + if (ptr->first_undef_row < start_row) { + if (writable) /* writer skipped over a section of array */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + undef_row = start_row; /* but reader is allowed to read ahead */ + } else { + undef_row = ptr->first_undef_row; + } + if (writable) + ptr->first_undef_row = end_row; + if (ptr->pre_zero) { + size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK); + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + end_row -= ptr->cur_start_row; + while (undef_row < end_row) { + jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + undef_row++; + } + } else { + if (! writable) /* reader looking at undefined data */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + } + } + /* Flag the buffer dirty if caller will write in it */ + if (writable) + ptr->dirty = TRUE; + /* Return address of proper part of the buffer */ + return ptr->mem_buffer + (start_row - ptr->cur_start_row); +} + + +/* + * Release all objects belonging to a specified pool. + */ + +METHODDEF(void) +free_pool (j_common_ptr cinfo, int pool_id) +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + size_t space_freed; + + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + +#ifdef MEM_STATS + if (cinfo->err->trace_level > 1) + print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */ +#endif + + /* If freeing IMAGE pool, close any virtual arrays first */ + if (pool_id == JPOOL_IMAGE) { + jvirt_sarray_ptr sptr; + jvirt_barray_ptr bptr; + + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->b_s_open) { /* there may be no backing store */ + sptr->b_s_open = FALSE; /* prevent recursive close if error */ + (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); + } + } + mem->virt_sarray_list = NULL; + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->b_s_open) { /* there may be no backing store */ + bptr->b_s_open = FALSE; /* prevent recursive close if error */ + (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); + } + } + mem->virt_barray_list = NULL; + } + + /* Release large objects */ + lhdr_ptr = mem->large_list[pool_id]; + mem->large_list[pool_id] = NULL; + + while (lhdr_ptr != NULL) { + large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next; + space_freed = lhdr_ptr->hdr.bytes_used + + lhdr_ptr->hdr.bytes_left + + SIZEOF(large_pool_hdr); + jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + lhdr_ptr = next_lhdr_ptr; + } + + /* Release small objects */ + shdr_ptr = mem->small_list[pool_id]; + mem->small_list[pool_id] = NULL; + + while (shdr_ptr != NULL) { + small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next; + space_freed = shdr_ptr->hdr.bytes_used + + shdr_ptr->hdr.bytes_left + + SIZEOF(small_pool_hdr); + jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + shdr_ptr = next_shdr_ptr; + } +} + + +/* + * Close up shop entirely. + * Note that this cannot be called unless cinfo->mem is non-NULL. + */ + +METHODDEF(void) +self_destruct (j_common_ptr cinfo) +{ + int pool; + + /* Close all backing store, release all memory. + * Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + free_pool(cinfo, pool); + } + + /* Release the memory manager control block too. */ + jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); + cinfo->mem = NULL; /* ensures I will be called only once */ + + jpeg_mem_term(cinfo); /* system-dependent cleanup */ +} + + +/* + * Memory manager initialization. + * When this is called, only the error manager pointer is valid in cinfo! + */ + +GLOBAL(void) +jinit_memory_mgr (j_common_ptr cinfo) +{ + my_mem_ptr mem; + long max_to_use; + int pool; + size_t test_mac; + + cinfo->mem = NULL; /* for safety if init fails */ + + /* Check for configuration errors. + * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably + * doesn't reflect any real hardware alignment requirement. + * The test is a little tricky: for X>0, X and X-1 have no one-bits + * in common if and only if X is a power of 2, ie has only one one-bit. + * Some compilers may give an "unreachable code" warning here; ignore it. + */ + if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0) + ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE); + /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be + * a multiple of SIZEOF(ALIGN_TYPE). + * Again, an "unreachable code" warning may be ignored here. + * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK. + */ + test_mac = (size_t) MAX_ALLOC_CHUNK; + if ((long) test_mac != MAX_ALLOC_CHUNK || + (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + + max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ + + /* Attempt to allocate memory manager's control block */ + mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); + + if (mem == NULL) { + jpeg_mem_term(cinfo); /* system-dependent cleanup */ + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); + } + + /* OK, fill in the method pointers */ + mem->pub.alloc_small = alloc_small; + mem->pub.alloc_large = alloc_large; + mem->pub.alloc_sarray = alloc_sarray; + mem->pub.alloc_barray = alloc_barray; + mem->pub.request_virt_sarray = request_virt_sarray; + mem->pub.request_virt_barray = request_virt_barray; + mem->pub.realize_virt_arrays = realize_virt_arrays; + mem->pub.access_virt_sarray = access_virt_sarray; + mem->pub.access_virt_barray = access_virt_barray; + mem->pub.free_pool = free_pool; + mem->pub.self_destruct = self_destruct; + + /* Make MAX_ALLOC_CHUNK accessible to other modules */ + mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK; + + /* Initialize working state */ + mem->pub.max_memory_to_use = max_to_use; + + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + mem->small_list[pool] = NULL; + mem->large_list[pool] = NULL; + } + mem->virt_sarray_list = NULL; + mem->virt_barray_list = NULL; + + mem->total_space_allocated = SIZEOF(my_memory_mgr); + + /* Declare ourselves open for business */ + cinfo->mem = & mem->pub; + + /* Check for an environment variable JPEGMEM; if found, override the + * default max_memory setting from jpeg_mem_init. Note that the + * surrounding application may again override this value. + * If your system doesn't support getenv(), define NO_GETENV to disable + * this feature. + */ +#ifndef NO_GETENV + { char * memenv; + + if ((memenv = getenv("JPEGMEM")) != NULL) { + char ch = 'x'; + + if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { + if (ch == 'm' || ch == 'M') + max_to_use *= 1000L; + mem->pub.max_memory_to_use = max_to_use * 1000L; + } + } + } +#endif + +} diff --git a/3rdparty/openctm/tools/jpeg/jmemname.c b/3rdparty/openctm/tools/jpeg/jmemname.c new file mode 100644 index 000000000..e28b212f4 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemname.c @@ -0,0 +1,276 @@ +/* + * jmemname.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a generic implementation of the system-dependent + * portion of the JPEG memory manager. This implementation assumes that + * you must explicitly construct a name for each temp file. + * Also, the problem of determining the amount of memory available + * is shoved onto the user. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + +#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ +#define SEEK_SET 0 /* if not, assume 0 is correct */ +#endif + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#define RW_BINARY "w+" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#define RW_BINARY "w+b", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#define RW_BINARY "w+b" +#endif +#endif + + +/* + * Selection of a file name for a temporary file. + * This is system-dependent! + * + * The code as given is suitable for most Unix systems, and it is easily + * modified for most non-Unix systems. Some notes: + * 1. The temp file is created in the directory named by TEMP_DIRECTORY. + * The default value is /usr/tmp, which is the conventional place for + * creating large temp files on Unix. On other systems you'll probably + * want to change the file location. You can do this by editing the + * #define, or (preferred) by defining TEMP_DIRECTORY in jconfig.h. + * + * 2. If you need to change the file name as well as its location, + * you can override the TEMP_FILE_NAME macro. (Note that this is + * actually a printf format string; it must contain %s and %d.) + * Few people should need to do this. + * + * 3. mktemp() is used to ensure that multiple processes running + * simultaneously won't select the same file names. If your system + * doesn't have mktemp(), define NO_MKTEMP to do it the hard way. + * (If you don't have , also define NO_ERRNO_H.) + * + * 4. You probably want to define NEED_SIGNAL_CATCHER so that cjpeg.c/djpeg.c + * will cause the temp files to be removed if you stop the program early. + */ + +#ifndef TEMP_DIRECTORY /* can override from jconfig.h or Makefile */ +#define TEMP_DIRECTORY "/usr/tmp/" /* recommended setting for Unix */ +#endif + +static int next_file_num; /* to distinguish among several temp files */ + +#ifdef NO_MKTEMP + +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "%sJPG%03d.TMP" +#endif + +#ifndef NO_ERRNO_H +#include /* to define ENOENT */ +#endif + +/* ANSI C specifies that errno is a macro, but on older systems it's more + * likely to be a plain int variable. And not all versions of errno.h + * bother to declare it, so we have to in order to be most portable. Thus: + */ +#ifndef errno +extern int errno; +#endif + + +LOCAL(void) +select_file_name (char * fname) +{ + FILE * tfile; + + /* Keep generating file names till we find one that's not in use */ + for (;;) { + next_file_num++; /* advance counter */ + sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); + if ((tfile = fopen(fname, READ_BINARY)) == NULL) { + /* fopen could have failed for a reason other than the file not + * being there; for example, file there but unreadable. + * If isn't available, then we cannot test the cause. + */ +#ifdef ENOENT + if (errno != ENOENT) + continue; +#endif + break; + } + fclose(tfile); /* oops, it's there; close tfile & try again */ + } +} + +#else /* ! NO_MKTEMP */ + +/* Note that mktemp() requires the initial filename to end in six X's */ +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "%sJPG%dXXXXXX" +#endif + +LOCAL(void) +select_file_name (char * fname) +{ + next_file_num++; /* advance counter */ + sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); + mktemp(fname); /* make sure file name is unique */ + /* mktemp replaces the trailing XXXXXX with a unique string of characters */ +} + +#endif /* NO_MKTEMP */ + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFREAD(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFWRITE(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + fclose(info->temp_file); /* close the file */ + unlink(info->temp_name); /* delete the file */ +/* If your system doesn't have unlink(), use remove() instead. + * remove() is the ANSI-standard name for this function, but if + * your system was ANSI you'd be using jmemansi.c, right? + */ + TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); +} + + +/* + * Initial opening of a backing-store object. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + select_file_name(info->temp_name); + if ((info->temp_file = fopen(info->temp_name, RW_BINARY)) == NULL) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; /* initialize temp file name generator */ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/3rdparty/openctm/tools/jpeg/jmemnobs.c b/3rdparty/openctm/tools/jpeg/jmemnobs.c new file mode 100644 index 000000000..6aa1e9295 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemnobs.c @@ -0,0 +1,109 @@ +/* + * jmemnobs.c + * + * Copyright (C) 1992-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a really simple implementation of the system- + * dependent portion of the JPEG memory manager. This implementation + * assumes that no backing-store files are needed: all required space + * can be obtained from malloc(). + * This is very portable in the sense that it'll compile on almost anything, + * but you'd better have lots of main memory (or virtual memory) if you want + * to process big images. + * Note that the max_memory_to_use option is ignored by this implementation. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * Here we always say, "we got all you want bud!" + */ + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return max_bytes_needed; +} + + +/* + * Backing store (temporary file) management. + * Since jpeg_mem_available always promised the moon, + * this should never be called and we can just error out. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + ERREXIT(cinfo, JERR_NO_BACKING_STORE); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. Here, there isn't any. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + return 0; /* just set max_memory_to_use to 0 */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/3rdparty/openctm/tools/jpeg/jmemsys.h b/3rdparty/openctm/tools/jpeg/jmemsys.h new file mode 100644 index 000000000..2a8796119 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmemsys.h @@ -0,0 +1,198 @@ +/* + * jmemsys.h + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This include file defines the interface between the system-independent + * and system-dependent portions of the JPEG memory manager. No other + * modules need include it. (The system-independent portion is jmemmgr.c; + * there are several different versions of the system-dependent portion.) + * + * This file works as-is for the system-dependent memory managers supplied + * in the IJG distribution. You may need to modify it if you write a + * custom memory manager. If system-dependent changes are needed in + * this file, the best method is to #ifdef them based on a configuration + * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR + * and USE_MAC_MEMMGR. + */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_get_small jGetSmall +#define jpeg_free_small jFreeSmall +#define jpeg_get_large jGetLarge +#define jpeg_free_large jFreeLarge +#define jpeg_mem_available jMemAvail +#define jpeg_open_backing_store jOpenBackStore +#define jpeg_mem_init jMemInit +#define jpeg_mem_term jMemTerm +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* + * These two functions are used to allocate and release small chunks of + * memory. (Typically the total amount requested through jpeg_get_small is + * no more than 20K or so; this will be requested in chunks of a few K each.) + * Behavior should be the same as for the standard library functions malloc + * and free; in particular, jpeg_get_small must return NULL on failure. + * On most systems, these ARE malloc and free. jpeg_free_small is passed the + * size of the object being freed, just in case it's needed. + * On an 80x86 machine using small-data memory model, these manage near heap. + */ + +EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject)); +EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object, + size_t sizeofobject)); + +/* + * These two functions are used to allocate and release large chunks of + * memory (up to the total free space designated by jpeg_mem_available). + * The interface is the same as above, except that on an 80x86 machine, + * far pointers are used. On most other machines these are identical to + * the jpeg_get/free_small routines; but we keep them separate anyway, + * in case a different allocation strategy is desirable for large chunks. + */ + +EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo, + size_t sizeofobject)); +EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object, + size_t sizeofobject)); + +/* + * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may + * be requested in a single call to jpeg_get_large (and jpeg_get_small for that + * matter, but that case should never come into play). This macro is needed + * to model the 64Kb-segment-size limit of far addressing on 80x86 machines. + * On those machines, we expect that jconfig.h will provide a proper value. + * On machines with 32-bit flat address spaces, any large constant may be used. + * + * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type + * size_t and will be a multiple of sizeof(align_type). + */ + +#ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */ +#define MAX_ALLOC_CHUNK 1000000000L +#endif + +/* + * This routine computes the total space still available for allocation by + * jpeg_get_large. If more space than this is needed, backing store will be + * used. NOTE: any memory already allocated must not be counted. + * + * There is a minimum space requirement, corresponding to the minimum + * feasible buffer sizes; jmemmgr.c will request that much space even if + * jpeg_mem_available returns zero. The maximum space needed, enough to hold + * all working storage in memory, is also passed in case it is useful. + * Finally, the total space already allocated is passed. If no better + * method is available, cinfo->mem->max_memory_to_use - already_allocated + * is often a suitable calculation. + * + * It is OK for jpeg_mem_available to underestimate the space available + * (that'll just lead to more backing-store access than is really necessary). + * However, an overestimate will lead to failure. Hence it's wise to subtract + * a slop factor from the true available space. 5% should be enough. + * + * On machines with lots of virtual memory, any large constant may be returned. + * Conversely, zero may be returned to always use the minimum amount of memory. + */ + +EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo, + long min_bytes_needed, + long max_bytes_needed, + long already_allocated)); + + +/* + * This structure holds whatever state is needed to access a single + * backing-store object. The read/write/close method pointers are called + * by jmemmgr.c to manipulate the backing-store object; all other fields + * are private to the system-dependent backing store routines. + */ + +#define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */ + + +#ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */ + +typedef unsigned short XMSH; /* type of extended-memory handles */ +typedef unsigned short EMSH; /* type of expanded-memory handles */ + +typedef union { + short file_handle; /* DOS file handle if it's a temp file */ + XMSH xms_handle; /* handle if it's a chunk of XMS */ + EMSH ems_handle; /* handle if it's a chunk of EMS */ +} handle_union; + +#endif /* USE_MSDOS_MEMMGR */ + +#ifdef USE_MAC_MEMMGR /* Mac-specific junk */ +#include +#endif /* USE_MAC_MEMMGR */ + + +typedef struct backing_store_struct * backing_store_ptr; + +typedef struct backing_store_struct { + /* Methods for reading/writing/closing this backing-store object */ + JMETHOD(void, read_backing_store, (j_common_ptr cinfo, + backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count)); + JMETHOD(void, write_backing_store, (j_common_ptr cinfo, + backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count)); + JMETHOD(void, close_backing_store, (j_common_ptr cinfo, + backing_store_ptr info)); + + /* Private fields for system-dependent backing-store management */ +#ifdef USE_MSDOS_MEMMGR + /* For the MS-DOS manager (jmemdos.c), we need: */ + handle_union handle; /* reference to backing-store storage object */ + char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ +#else +#ifdef USE_MAC_MEMMGR + /* For the Mac manager (jmemmac.c), we need: */ + short temp_file; /* file reference number to temp file */ + FSSpec tempSpec; /* the FSSpec for the temp file */ + char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ +#else + /* For a typical implementation with temp files, we need: */ + FILE * temp_file; /* stdio reference to temp file */ + char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */ +#endif +#endif +} backing_store_info; + + +/* + * Initial opening of a backing-store object. This must fill in the + * read/write/close pointers in the object. The read/write routines + * may take an error exit if the specified maximum file size is exceeded. + * (If jpeg_mem_available always returns a large value, this routine can + * just take an error exit.) + */ + +EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo, + backing_store_ptr info, + long total_bytes_needed)); + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. jpeg_mem_init will be called before anything is + * allocated (and, therefore, nothing in cinfo is of use except the error + * manager pointer). It should return a suitable default value for + * max_memory_to_use; this may subsequently be overridden by the surrounding + * application. (Note that max_memory_to_use is only important if + * jpeg_mem_available chooses to consult it ... no one else will.) + * jpeg_mem_term may assume that all requested memory has been freed and that + * all opened backing-store objects have been closed. + */ + +EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo)); diff --git a/3rdparty/openctm/tools/jpeg/jmorecfg.h b/3rdparty/openctm/tools/jpeg/jmorecfg.h new file mode 100644 index 000000000..8bda4fa9b --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jmorecfg.h @@ -0,0 +1,371 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 1997-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ +#ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */ +#ifndef _BASETSD_H /* ...same but for MinGW basetsd.h */ +#ifndef QGLOBAL_H /* Qt defines it in qglobal.h */ +typedef long INT32; +#endif +#endif +#endif +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern type + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +#ifndef FAR +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#define FAR +#endif +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#define C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define DCT_SCALING_SUPPORTED /* Input rescaling via DCT? (Requires DCT_ISLOW)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#define D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/3rdparty/openctm/tools/jpeg/jpegint.h b/3rdparty/openctm/tools/jpeg/jpegint.h new file mode 100644 index 000000000..23454d6c8 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jpegint.h @@ -0,0 +1,395 @@ +/* + * jpegint.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 1997-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides common declarations for the various JPEG modules. + * These declarations are considered internal to the JPEG library; most + * applications using the library shouldn't need to include this file. + */ + + +/* Declarations for both compression & decompression */ + +typedef enum { /* Operating modes for buffer controllers */ + JBUF_PASS_THRU, /* Plain stripwise operation */ + /* Remaining modes require a full-image buffer to have been created */ + JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ + JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ + JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ +} J_BUF_MODE; + +/* Values of global_state field (jdapi.c has some dependencies on ordering!) */ +#define CSTATE_START 100 /* after create_compress */ +#define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ +#define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ +#define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ +#define DSTATE_START 200 /* after create_decompress */ +#define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ +#define DSTATE_READY 202 /* found SOS, ready for start_decompress */ +#define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ +#define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ +#define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ +#define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ +#define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ +#define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ +#define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ +#define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ + + +/* Declarations for compression modules */ + +/* Master control module */ +struct jpeg_comp_master { + JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); + JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); + JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean call_pass_startup; /* True if pass_startup must be called */ + boolean is_last_pass; /* True during last pass */ +}; + +/* Main buffer control (downsampled-data buffer) */ +struct jpeg_c_main_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, process_data, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail)); +}; + +/* Compression preprocessing (downsampling input buffer control) */ +struct jpeg_c_prep_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, + JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail)); +}; + +/* Coefficient buffer control */ +struct jpeg_c_coef_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, + JSAMPIMAGE input_buf)); +}; + +/* Colorspace conversion */ +struct jpeg_color_converter { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + JMETHOD(void, color_convert, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows)); +}; + +/* Downsampling */ +struct jpeg_downsampler { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + JMETHOD(void, downsample, (j_compress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_index, + JSAMPIMAGE output_buf, + JDIMENSION out_row_group_index)); + + boolean need_context_rows; /* TRUE if need rows above & below */ +}; + +/* Forward DCT (also controls coefficient quantization) */ +typedef JMETHOD(void, forward_DCT_ptr, + (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks)); + +struct jpeg_forward_dct { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + /* It is useful to allow each component to have a separate FDCT method. */ + forward_DCT_ptr forward_DCT[MAX_COMPONENTS]; +}; + +/* Entropy encoding */ +struct jpeg_entropy_encoder { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); + JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); + JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); +}; + +/* Marker writing */ +struct jpeg_marker_writer { + JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); + JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); + /* These routines are exported to allow insertion of extra markers */ + /* Probably only COM and APPn markers should be written this way */ + JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker, + unsigned int datalen)); + JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val)); +}; + + +/* Declarations for decompression modules */ + +/* Master control module */ +struct jpeg_decomp_master { + JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ +}; + +/* Input control module */ +struct jpeg_input_controller { + JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); + JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); + JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean has_multiple_scans; /* True if file has multiple scans */ + boolean eoi_reached; /* True when EOI has been consumed */ +}; + +/* Main buffer control (downsampled-data buffer) */ +struct jpeg_d_main_controller { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, process_data, (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +}; + +/* Coefficient buffer control */ +struct jpeg_d_coef_controller { + JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); + JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); + JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); + JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, + JSAMPIMAGE output_buf)); + /* Pointer to array of coefficient virtual arrays, or NULL if none */ + jvirt_barray_ptr *coef_arrays; +}; + +/* Decompression postprocessing (color quantization buffer control) */ +struct jpeg_d_post_controller { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, + JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +}; + +/* Marker reading & parsing */ +struct jpeg_marker_reader { + JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); + /* Read markers until SOS or EOI. + * Returns same codes as are defined for jpeg_consume_input: + * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + */ + JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); + /* Read a restart marker --- exported for use by entropy decoder only */ + jpeg_marker_parser_method read_restart_marker; + + /* State of marker reader --- nominally internal, but applications + * supplying COM or APPn handlers might like to know the state. + */ + boolean saw_SOI; /* found SOI? */ + boolean saw_SOF; /* found SOF? */ + int next_restart_num; /* next restart number expected (0-7) */ + unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ +}; + +/* Entropy decoding */ +struct jpeg_entropy_decoder { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); + + /* This is here to share code between baseline and progressive decoders; */ + /* other modules probably should not use it */ + boolean insufficient_data; /* set TRUE after emitting warning */ +}; + +/* Inverse DCT (also performs dequantization) */ +typedef JMETHOD(void, inverse_DCT_method_ptr, + (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col)); + +struct jpeg_inverse_dct { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + /* It is useful to allow each component to have a separate IDCT method. */ + inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; +}; + +/* Upsampling (note that upsampler must also call color converter) */ +struct jpeg_upsampler { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, upsample, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, + JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); + + boolean need_context_rows; /* TRUE if need rows above & below */ +}; + +/* Colorspace conversion */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +/* Color quantization or color precision reduction */ +struct jpeg_color_quantizer { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); + JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, + int num_rows)); + JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); +}; + + +/* Miscellaneous useful macros */ + +#undef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#undef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + + +/* We assume that right shift corresponds to signed division by 2 with + * rounding towards minus infinity. This is correct for typical "arithmetic + * shift" instructions that shift in copies of the sign bit. But some + * C compilers implement >> with an unsigned shift. For these machines you + * must define RIGHT_SHIFT_IS_UNSIGNED. + * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. + * It is only applied with constant shift counts. SHIFT_TEMPS must be + * included in the variables of any routine using RIGHT_SHIFT. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define SHIFT_TEMPS INT32 shift_temp; +#define RIGHT_SHIFT(x,shft) \ + ((shift_temp = (x)) < 0 ? \ + (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ + (shift_temp >> (shft))) +#else +#define SHIFT_TEMPS +#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jinit_compress_master jICompress +#define jinit_c_master_control jICMaster +#define jinit_c_main_controller jICMainC +#define jinit_c_prep_controller jICPrepC +#define jinit_c_coef_controller jICCoefC +#define jinit_color_converter jICColor +#define jinit_downsampler jIDownsampler +#define jinit_forward_dct jIFDCT +#define jinit_huff_encoder jIHEncoder +#define jinit_arith_encoder jIAEncoder +#define jinit_marker_writer jIMWriter +#define jinit_master_decompress jIDMaster +#define jinit_d_main_controller jIDMainC +#define jinit_d_coef_controller jIDCoefC +#define jinit_d_post_controller jIDPostC +#define jinit_input_controller jIInCtlr +#define jinit_marker_reader jIMReader +#define jinit_huff_decoder jIHDecoder +#define jinit_arith_decoder jIADecoder +#define jinit_inverse_dct jIIDCT +#define jinit_upsampler jIUpsampler +#define jinit_color_deconverter jIDColor +#define jinit_1pass_quantizer jI1Quant +#define jinit_2pass_quantizer jI2Quant +#define jinit_merged_upsampler jIMUpsampler +#define jinit_memory_mgr jIMemMgr +#define jdiv_round_up jDivRound +#define jround_up jRound +#define jcopy_sample_rows jCopySamples +#define jcopy_block_row jCopyBlocks +#define jzero_far jZeroFar +#define jpeg_zigzag_order jZIGTable +#define jpeg_natural_order jZAGTable +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Compression module initialization routines */ +EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, + boolean transcode_only)); +EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_arith_encoder JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); +/* Decompression module initialization routines */ +EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_arith_decoder JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); +/* Memory manager initialization */ +EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); + +/* Utility routines in jutils.c */ +EXTERN(long) jdiv_round_up JPP((long a, long b)); +EXTERN(long) jround_up JPP((long a, long b)); +EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, JDIMENSION num_cols)); +EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks)); +EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); +/* Constant tables in jutils.c */ +#if 0 /* This table is not actually needed in v6a */ +extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ +#endif +extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ + +/* Suppress undefined-structure complaints if necessary. */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +#endif +#endif /* INCOMPLETE_TYPES_BROKEN */ diff --git a/3rdparty/openctm/tools/jpeg/jpeglib.h b/3rdparty/openctm/tools/jpeg/jpeglib.h new file mode 100644 index 000000000..0b3287226 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jpeglib.h @@ -0,0 +1,1135 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * Modified 2002-2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +#ifdef __cplusplus +#ifndef DONT_USE_EXTERN_C +extern "C" { +#endif +#endif + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 70". + */ + +#define JPEG_LIB_VERSION 70 /* Version 7.0 */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples, + * reflecting any scaling we choose to apply during the DCT step. + * Values from 1 to 16 are supported. + * Note that different components may receive different DCT scalings. + */ + int DCT_h_scaled_size; + int DCT_v_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface); + * DCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_h_scaled_size/DCTSIZE) + * and similarly for height. + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + JDIMENSION jpeg_width; /* scaled JPEG image width */ + JDIMENSION jpeg_height; /* scaled JPEG image height */ + /* Dimensions of actual JPEG image that will be written to file, + * derived from input dimensions by scaling factors above. + * These fields are computed by jpeg_start_compress(). + * You can also use jpeg_calc_jpeg_dimensions() to determine these values + * in advance of calling jpeg_start_compress(). + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + int q_scale_factor[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined, + * and corresponding scale factors (percentage, initialized 100). + */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ + int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ + int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_v_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_default_qtables jDefQTables +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_calc_jpeg_dimensions jCjpegDimensions +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_default_qtables JPP((j_compress_ptr cinfo, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Precalculate JPEG dimensions for current compression parameters. */ +EXTERN(void) jpeg_calc_jpeg_dimensions JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.txt concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#ifdef __cplusplus +#ifndef DONT_USE_EXTERN_C +} +#endif +#endif + +#endif /* JPEGLIB_H */ diff --git a/3rdparty/openctm/tools/jpeg/jpegtran.1 b/3rdparty/openctm/tools/jpeg/jpegtran.1 new file mode 100644 index 000000000..737423cf5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jpegtran.1 @@ -0,0 +1,272 @@ +.TH JPEGTRAN 1 "28 March 2009" +.SH NAME +jpegtran \- lossless transformation of JPEG files +.SH SYNOPSIS +.B jpegtran +[ +.I options +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B jpegtran +performs various useful transformations of JPEG files. +It can translate the coded representation from one variant of JPEG to another, +for example from baseline JPEG to progressive JPEG or vice versa. It can also +perform some rearrangements of the image data, for example turning an image +from landscape to portrait format by rotation. +.PP +.B jpegtran +works by rearranging the compressed data (DCT coefficients), without +ever fully decoding the image. Therefore, its transformations are lossless: +there is no image degradation at all, which would not be true if you used +.B djpeg +followed by +.B cjpeg +to accomplish the same conversion. But by the same token, +.B jpegtran +cannot perform lossy operations such as changing the image quality. +.PP +.B jpegtran +reads the named JPEG/JFIF file, or the standard input if no file is +named, and produces a JPEG/JFIF file on the standard output. +.SH OPTIONS +All switch names may be abbreviated; for example, +.B \-optimize +may be written +.B \-opt +or +.BR \-o . +Upper and lower case are equivalent. +British spellings are also accepted (e.g., +.BR \-optimise ), +though for brevity these are not mentioned below. +.PP +To specify the coded JPEG representation used in the output file, +.B jpegtran +accepts a subset of the switches recognized by +.BR cjpeg : +.TP +.B \-optimize +Perform optimization of entropy encoding parameters. +.TP +.B \-progressive +Create progressive JPEG file. +.TP +.BI \-restart " N" +Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is +attached to the number. +.TP +.B \-arithmetic +Use arithmetic coding. +.TP +.BI \-scans " file" +Use the scan script given in the specified text file. +.PP +See +.BR cjpeg (1) +for more details about these switches. +If you specify none of these switches, you get a plain baseline-JPEG output +file. The quality setting and so forth are determined by the input file. +.PP +The image can be losslessly transformed by giving one of these switches: +.TP +.B \-flip horizontal +Mirror image horizontally (left-right). +.TP +.B \-flip vertical +Mirror image vertically (top-bottom). +.TP +.B \-rotate 90 +Rotate image 90 degrees clockwise. +.TP +.B \-rotate 180 +Rotate image 180 degrees. +.TP +.B \-rotate 270 +Rotate image 270 degrees clockwise (or 90 ccw). +.TP +.B \-transpose +Transpose image (across UL-to-LR axis). +.TP +.B \-transverse +Transverse transpose (across UR-to-LL axis). +.IP +The transpose transformation has no restrictions regarding image dimensions. +The other transformations operate rather oddly if the image dimensions are not +a multiple of the iMCU size (usually 8 or 16 pixels), because they can only +transform complete blocks of DCT coefficient data in the desired way. +.IP +.BR jpegtran 's +default behavior when transforming an odd-size image is designed +to preserve exact reversibility and mathematical consistency of the +transformation set. As stated, transpose is able to flip the entire image +area. Horizontal mirroring leaves any partial iMCU column at the right edge +untouched, but is able to flip all rows of the image. Similarly, vertical +mirroring leaves any partial iMCU row at the bottom edge untouched, but is +able to flip all columns. The other transforms can be built up as sequences +of transpose and flip operations; for consistency, their actions on edge +pixels are defined to be the same as the end result of the corresponding +transpose-and-flip sequence. +.IP +For practical use, you may prefer to discard any untransformable edge pixels +rather than having a strange-looking strip along the right and/or bottom edges +of a transformed image. To do this, add the +.B \-trim +switch: +.TP +.B \-trim +Drop non-transformable edge blocks. +.IP +Obviously, a transformation with +.B \-trim +is not reversible, so strictly speaking +.B jpegtran +with this switch is not lossless. Also, the expected mathematical +equivalences between the transformations no longer hold. For example, +.B \-rot 270 -trim +trims only the bottom edge, but +.B \-rot 90 -trim +followed by +.B \-rot 180 -trim +trims both edges. +.IP +If you are only interested in perfect transformation, add the +.B \-perfect +switch: +.TP +.B \-perfect +Fails with an error if the transformation is not perfect. +.IP +For example you may want to do +.IP +.B (jpegtran \-rot 90 -perfect +.I foo.jpg +.B || djpeg +.I foo.jpg +.B | pnmflip \-r90 | cjpeg) +.IP +to do a perfect rotation if available or an approximated one if not. +.PP +We also offer a lossless-crop option, which discards data outside a given +image region but losslessly preserves what is inside. Like the rotate and +flip transforms, lossless crop is restricted by the current JPEG format: the +upper left corner of the selected region must fall on an iMCU boundary. If +this does not hold for the given crop parameters, we silently move the upper +left corner up and/or left to make it so, simultaneously increasing the region +dimensions to keep the lower right crop corner unchanged. (Thus, the output +image covers at least the requested region, but may cover more.) + +The image can be losslessly cropped by giving the switch: +.TP +.B \-crop WxH+X+Y +Crop to a rectangular subarea of width W, height H starting at point X,Y. +.PP +Another not-strictly-lossless transformation switch is: +.TP +.B \-grayscale +Force grayscale output. +.IP +This option discards the chrominance channels if the input image is YCbCr +(ie, a standard color JPEG), resulting in a grayscale JPEG file. The +luminance channel is preserved exactly, so this is a better method of reducing +to grayscale than decompression, conversion, and recompression. This switch +is particularly handy for fixing a monochrome picture that was mistakenly +encoded as a color JPEG. (In such a case, the space savings from getting rid +of the near-empty chroma channels won't be large; but the decoding time for +a grayscale JPEG is substantially less than that for a color JPEG.) +.PP +.B jpegtran +also recognizes these switches that control what to do with "extra" markers, +such as comment blocks: +.TP +.B \-copy none +Copy no extra markers from source file. This setting suppresses all +comments and other excess baggage present in the source file. +.TP +.B \-copy comments +Copy only comment markers. This setting copies comments from the source file, +but discards any other inessential (for image display) data. +.TP +.B \-copy all +Copy all extra markers. This setting preserves miscellaneous markers +found in the source file, such as JFIF thumbnails, Exif data, and Photoshop +settings. In some files these extra markers can be sizable. +.IP +The default behavior is +.BR "\-copy comments" . +(Note: in IJG releases v6 and v6a, +.B jpegtran +always did the equivalent of +.BR "\-copy none" .) +.PP +Additional switches recognized by jpegtran are: +.TP +.BI \-maxmemory " N" +Set limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if "M" is attached to the +number. For example, +.B \-max 4m +selects 4000000 bytes. If more space is needed, temporary files will be used. +.TP +.BI \-outfile " name" +Send output image to the named file, not to standard output. +.TP +.B \-verbose +Enable debug printout. More +.BR \-v 's +give more output. Also, version information is printed at startup. +.TP +.B \-debug +Same as +.BR \-verbose . +.SH EXAMPLES +.LP +This example converts a baseline JPEG file to progressive form: +.IP +.B jpegtran \-progressive +.I foo.jpg +.B > +.I fooprog.jpg +.PP +This example rotates an image 90 degrees clockwise, discarding any +unrotatable edge pixels: +.IP +.B jpegtran \-rot 90 -trim +.I foo.jpg +.B > +.I foo90.jpg +.SH ENVIRONMENT +.TP +.B JPEGMEM +If this environment variable is set, its value is the default memory limit. +The value is specified as described for the +.B \-maxmemory +switch. +.B JPEGMEM +overrides the default value specified when the program was compiled, and +itself is overridden by an explicit +.BR \-maxmemory . +.SH SEE ALSO +.BR cjpeg (1), +.BR djpeg (1), +.BR rdjpgcom (1), +.BR wrjpgcom (1) +.br +Wallace, Gregory K. "The JPEG Still Picture Compression Standard", +Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. +.SH AUTHOR +Independent JPEG Group +.SH BUGS +The transform options can't transform odd-size images perfectly. Use +.B \-trim +or +.B \-perfect +if you don't like the results. +.PP +The entire image is read into memory and then written out again, even in +cases where this isn't really necessary. Expect swapping on large images, +especially when using the more complex transform options. diff --git a/3rdparty/openctm/tools/jpeg/jpegtran.c b/3rdparty/openctm/tools/jpeg/jpegtran.c new file mode 100644 index 000000000..7004c4e4a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jpegtran.c @@ -0,0 +1,546 @@ +/* + * jpegtran.c + * + * Copyright (C) 1995-2001, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a command-line user interface for JPEG transcoding. + * It is very similar to cjpeg.c, but provides lossless transcoding between + * different JPEG file formats. It also provides some lossless and sort-of- + * lossless transformations of JPEG data. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include "transupp.h" /* Support routines for jpegtran */ +#include "jversion.h" /* for version message */ + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + + +/* + * Argument-parsing code. + * The switch parser is designed to be useful with DOS-style command line + * syntax, ie, intermixed switches and file names, where only the switches + * to the left of a given file name affect processing of that file. + * The main program in this file doesn't actually use this capability... + */ + + +static const char * progname; /* program name for error messages */ +static char * outfilename; /* for -outfile switch */ +static JCOPY_OPTION copyoption; /* -copy switch */ +static jpeg_transform_info transformoption; /* image transformation options */ + + +LOCAL(void) +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -copy none Copy no extra markers from source file\n"); + fprintf(stderr, " -copy comments Copy only comment markers (default)\n"); + fprintf(stderr, " -copy all Copy all extra markers\n"); +#ifdef ENTROPY_OPT_SUPPORTED + fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); +#endif +#ifdef C_PROGRESSIVE_SUPPORTED + fprintf(stderr, " -progressive Create progressive JPEG file\n"); +#endif +#if TRANSFORMS_SUPPORTED + fprintf(stderr, "Switches for modifying the image:\n"); + fprintf(stderr, " -crop WxH+X+Y Crop to a rectangular subarea\n"); + fprintf(stderr, " -grayscale Reduce to grayscale (omit color data)\n"); + fprintf(stderr, " -flip [horizontal|vertical] Mirror image (left-right or top-bottom)\n"); + fprintf(stderr, " -perfect Fail if there is non-transformable edge blocks\n"); + fprintf(stderr, " -rotate [90|180|270] Rotate image (degrees clockwise)\n"); + fprintf(stderr, " -transpose Transpose image\n"); + fprintf(stderr, " -transverse Transverse transpose image\n"); + fprintf(stderr, " -trim Drop non-transformable edge blocks\n"); +#endif /* TRANSFORMS_SUPPORTED */ + fprintf(stderr, "Switches for advanced users:\n"); + fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); + fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); + fprintf(stderr, " -outfile name Specify name for output file\n"); + fprintf(stderr, " -verbose or -debug Emit debug output\n"); + fprintf(stderr, "Switches for wizards:\n"); +#ifdef C_ARITH_CODING_SUPPORTED + fprintf(stderr, " -arithmetic Use arithmetic coding\n"); +#endif +#ifdef C_MULTISCAN_FILES_SUPPORTED + fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); +#endif + exit(EXIT_FAILURE); +} + + +LOCAL(void) +select_transform (JXFORM_CODE transform) +/* Silly little routine to detect multiple transform options, + * which we can't handle. + */ +{ +#if TRANSFORMS_SUPPORTED + if (transformoption.transform == JXFORM_NONE || + transformoption.transform == transform) { + transformoption.transform = transform; + } else { + fprintf(stderr, "%s: can only do one image transformation at a time\n", + progname); + usage(); + } +#else + fprintf(stderr, "%s: sorry, image transformation was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif +} + + +LOCAL(int) +parse_switches (j_compress_ptr cinfo, int argc, char **argv, + int last_file_arg_seen, boolean for_real) +/* Parse optional switches. + * Returns argv[] index of first file-name argument (== argc if none). + * Any file names with indexes <= last_file_arg_seen are ignored; + * they have presumably been processed in a previous iteration. + * (Pass 0 for last_file_arg_seen on the first or only iteration.) + * for_real is FALSE on the first (dummy) pass; we may skip any expensive + * processing. + */ +{ + int argn; + char * arg; + boolean simple_progressive; + char * scansarg = NULL; /* saves -scans parm if any */ + + /* Set up default JPEG parameters. */ + simple_progressive = FALSE; + outfilename = NULL; + copyoption = JCOPYOPT_DEFAULT; + transformoption.transform = JXFORM_NONE; + transformoption.trim = FALSE; + transformoption.perfect = FALSE; + transformoption.force_grayscale = FALSE; + transformoption.crop = FALSE; + cinfo->err->trace_level = 0; + + /* Scan command line options, adjust parameters */ + + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (*arg != '-') { + /* Not a switch, must be a file name argument */ + if (argn <= last_file_arg_seen) { + outfilename = NULL; /* -outfile applies to just one input file */ + continue; /* ignore this name if previously processed */ + } + break; /* else done parsing switches */ + } + arg++; /* advance past switch marker character */ + + if (keymatch(arg, "arithmetic", 1)) { + /* Use arithmetic coding. */ +#ifdef C_ARITH_CODING_SUPPORTED + cinfo->arith_code = TRUE; +#else + fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "copy", 2)) { + /* Select which extra markers to copy. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "none", 1)) { + copyoption = JCOPYOPT_NONE; + } else if (keymatch(argv[argn], "comments", 1)) { + copyoption = JCOPYOPT_COMMENTS; + } else if (keymatch(argv[argn], "all", 1)) { + copyoption = JCOPYOPT_ALL; + } else + usage(); + + } else if (keymatch(arg, "crop", 2)) { + /* Perform lossless cropping. */ +#if TRANSFORMS_SUPPORTED + if (++argn >= argc) /* advance to next argument */ + usage(); + if (! jtransform_parse_crop_spec(&transformoption, argv[argn])) { + fprintf(stderr, "%s: bogus -crop argument '%s'\n", + progname, argv[argn]); + exit(EXIT_FAILURE); + } +#else + select_transform(JXFORM_NONE); /* force an error */ +#endif + + } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { + /* Enable debug printouts. */ + /* On first -d, print version identification */ + static boolean printed_version = FALSE; + + if (! printed_version) { + fprintf(stderr, "Independent JPEG Group's JPEGTRAN, version %s\n%s\n", + JVERSION, JCOPYRIGHT); + printed_version = TRUE; + } + cinfo->err->trace_level++; + + } else if (keymatch(arg, "flip", 1)) { + /* Mirror left-right or top-bottom. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "horizontal", 1)) + select_transform(JXFORM_FLIP_H); + else if (keymatch(argv[argn], "vertical", 1)) + select_transform(JXFORM_FLIP_V); + else + usage(); + + } else if (keymatch(arg, "grayscale", 1) || keymatch(arg, "greyscale",1)) { + /* Force to grayscale. */ +#if TRANSFORMS_SUPPORTED + transformoption.force_grayscale = TRUE; +#else + select_transform(JXFORM_NONE); /* force an error */ +#endif + + } else if (keymatch(arg, "maxmemory", 3)) { + /* Maximum memory in Kb (or Mb with 'm'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (ch == 'm' || ch == 'M') + lval *= 1000L; + cinfo->mem->max_memory_to_use = lval * 1000L; + + } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { + /* Enable entropy parm optimization. */ +#ifdef ENTROPY_OPT_SUPPORTED + cinfo->optimize_coding = TRUE; +#else + fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "outfile", 4)) { + /* Set output file name. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + outfilename = argv[argn]; /* save it away for later use */ + + } else if (keymatch(arg, "perfect", 2)) { + /* Fail if there is any partial edge MCUs that the transform can't + * handle. */ + transformoption.perfect = TRUE; + + } else if (keymatch(arg, "progressive", 2)) { + /* Select simple progressive mode. */ +#ifdef C_PROGRESSIVE_SUPPORTED + simple_progressive = TRUE; + /* We must postpone execution until num_components is known. */ +#else + fprintf(stderr, "%s: sorry, progressive output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "restart", 1)) { + /* Restart interval in MCU rows (or in MCUs with 'b'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (lval < 0 || lval > 65535L) + usage(); + if (ch == 'b' || ch == 'B') { + cinfo->restart_interval = (unsigned int) lval; + cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ + } else { + cinfo->restart_in_rows = (int) lval; + /* restart_interval will be computed during startup */ + } + + } else if (keymatch(arg, "rotate", 2)) { + /* Rotate 90, 180, or 270 degrees (measured clockwise). */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "90", 2)) + select_transform(JXFORM_ROT_90); + else if (keymatch(argv[argn], "180", 3)) + select_transform(JXFORM_ROT_180); + else if (keymatch(argv[argn], "270", 3)) + select_transform(JXFORM_ROT_270); + else + usage(); + + } else if (keymatch(arg, "scans", 1)) { + /* Set scan script. */ +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (++argn >= argc) /* advance to next argument */ + usage(); + scansarg = argv[argn]; + /* We must postpone reading the file in case -progressive appears. */ +#else + fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "transpose", 1)) { + /* Transpose (across UL-to-LR axis). */ + select_transform(JXFORM_TRANSPOSE); + + } else if (keymatch(arg, "transverse", 6)) { + /* Transverse transpose (across UR-to-LL axis). */ + select_transform(JXFORM_TRANSVERSE); + + } else if (keymatch(arg, "trim", 3)) { + /* Trim off any partial edge MCUs that the transform can't handle. */ + transformoption.trim = TRUE; + + } else { + usage(); /* bogus switch */ + } + } + + /* Post-switch-scanning cleanup */ + + if (for_real) { + +#ifdef C_PROGRESSIVE_SUPPORTED + if (simple_progressive) /* process -progressive; -scans can override */ + jpeg_simple_progression(cinfo); +#endif + +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (scansarg != NULL) /* process -scans if it was present */ + if (! read_scan_script(cinfo, scansarg)) + usage(); +#endif + } + + return argn; /* return index of next arg (file name) */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + struct jpeg_decompress_struct srcinfo; + struct jpeg_compress_struct dstinfo; + struct jpeg_error_mgr jsrcerr, jdsterr; +#ifdef PROGRESS_REPORT + struct cdjpeg_progress_mgr progress; +#endif + jvirt_barray_ptr * src_coef_arrays; + jvirt_barray_ptr * dst_coef_arrays; + int file_index; + /* We assume all-in-memory processing and can therefore use only a + * single file pointer for sequential input and output operation. + */ + FILE * fp; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "jpegtran"; /* in case C library doesn't provide it */ + + /* Initialize the JPEG decompression object with default error handling. */ + srcinfo.err = jpeg_std_error(&jsrcerr); + jpeg_create_decompress(&srcinfo); + /* Initialize the JPEG compression object with default error handling. */ + dstinfo.err = jpeg_std_error(&jdsterr); + jpeg_create_compress(&dstinfo); + + /* Now safe to enable signal catcher. + * Note: we assume only the decompression object will have virtual arrays. + */ +#ifdef NEED_SIGNAL_CATCHER + enable_signal_catcher((j_common_ptr) &srcinfo); +#endif + + /* Scan command line to find file names. + * It is convenient to use just one switch-parsing routine, but the switch + * values read here are mostly ignored; we will rescan the switches after + * opening the input file. Also note that most of the switches affect the + * destination JPEG object, so we parse into that and then copy over what + * needs to affects the source too. + */ + + file_index = parse_switches(&dstinfo, argc, argv, 0, FALSE); + jsrcerr.trace_level = jdsterr.trace_level; + srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use; + +#ifdef TWO_FILE_COMMANDLINE + /* Must have either -outfile switch or explicit output file name */ + if (outfilename == NULL) { + if (file_index != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + outfilename = argv[file_index+1]; + } else { + if (file_index != argc-1) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + } +#else + /* Unix style: expect zero or one file name */ + if (file_index < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } +#endif /* TWO_FILE_COMMANDLINE */ + + /* Open the input file. */ + if (file_index < argc) { + if ((fp = fopen(argv[file_index], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s for reading\n", progname, argv[file_index]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ + fp = read_stdin(); + } + +#ifdef PROGRESS_REPORT + start_progress_monitor((j_common_ptr) &dstinfo, &progress); +#endif + + /* Specify data source for decompression */ + jpeg_stdio_src(&srcinfo, fp); + + /* Enable saving of extra markers that we want to copy */ + jcopy_markers_setup(&srcinfo, copyoption); + + /* Read file header */ + (void) jpeg_read_header(&srcinfo, TRUE); + + /* Any space needed by a transform option must be requested before + * jpeg_read_coefficients so that memory allocation will be done right. + */ +#if TRANSFORMS_SUPPORTED + /* Fails right away if -perfect is given and transformation is not perfect. + */ + if (transformoption.perfect && + !jtransform_perfect_transform(srcinfo.image_width, srcinfo.image_height, + srcinfo.max_h_samp_factor * DCTSIZE, srcinfo.max_v_samp_factor * DCTSIZE, + transformoption.transform)) { + fprintf(stderr, "%s: transformation is not perfect\n", progname); + exit(EXIT_FAILURE); + } + jtransform_request_workspace(&srcinfo, &transformoption); +#endif + + /* Read source file as DCT coefficients */ + src_coef_arrays = jpeg_read_coefficients(&srcinfo); + + /* Initialize destination compression parameters from source values */ + jpeg_copy_critical_parameters(&srcinfo, &dstinfo); + + /* Adjust destination parameters if required by transform options; + * also find out which set of coefficient arrays will hold the output. + */ +#if TRANSFORMS_SUPPORTED + dst_coef_arrays = jtransform_adjust_parameters(&srcinfo, &dstinfo, + src_coef_arrays, + &transformoption); +#else + dst_coef_arrays = src_coef_arrays; +#endif + + /* Close input file, if we opened it. + * Note: we assume that jpeg_read_coefficients consumed all input + * until JPEG_REACHED_EOI, and that jpeg_finish_decompress will + * only consume more while (! cinfo->inputctl->eoi_reached). + * We cannot call jpeg_finish_decompress here since we still need the + * virtual arrays allocated from the source object for processing. + */ + if (fp != stdin) + fclose(fp); + + /* Open the output file. */ + if (outfilename != NULL) { + if ((fp = fopen(outfilename, WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s for writing\n", progname, outfilename); + exit(EXIT_FAILURE); + } + } else { + /* default output file is stdout */ + fp = write_stdout(); + } + + /* Adjust default compression parameters by re-parsing the options */ + file_index = parse_switches(&dstinfo, argc, argv, 0, TRUE); + + /* Specify data destination for compression */ + jpeg_stdio_dest(&dstinfo, fp); + + /* Start compressor (note no image data is actually written here) */ + jpeg_write_coefficients(&dstinfo, dst_coef_arrays); + + /* Copy to the output file any extra markers that we want to preserve */ + jcopy_markers_execute(&srcinfo, &dstinfo, copyoption); + + /* Execute image transformation, if any */ +#if TRANSFORMS_SUPPORTED + jtransform_execute_transformation(&srcinfo, &dstinfo, + src_coef_arrays, + &transformoption); +#endif + + /* Finish compression and release memory */ + jpeg_finish_compress(&dstinfo); + jpeg_destroy_compress(&dstinfo); + (void) jpeg_finish_decompress(&srcinfo); + jpeg_destroy_decompress(&srcinfo); + + /* Close output file, if we opened it */ + if (fp != stdout) + fclose(fp); + +#ifdef PROGRESS_REPORT + end_progress_monitor((j_common_ptr) &dstinfo); +#endif + + /* All done. */ + exit(jsrcerr.num_warnings + jdsterr.num_warnings ?EXIT_WARNING:EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/3rdparty/openctm/tools/jpeg/jquant1.c b/3rdparty/openctm/tools/jpeg/jquant1.c new file mode 100644 index 000000000..aaa34a189 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jquant1.c @@ -0,0 +1,856 @@ +/* + * jquant1.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains 1-pass color quantization (color mapping) routines. + * These routines provide mapping to a fixed color map using equally spaced + * color values. Optional Floyd-Steinberg or ordered dithering is available. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef QUANT_1PASS_SUPPORTED + + +/* + * The main purpose of 1-pass quantization is to provide a fast, if not very + * high quality, colormapped output capability. A 2-pass quantizer usually + * gives better visual quality; however, for quantized grayscale output this + * quantizer is perfectly adequate. Dithering is highly recommended with this + * quantizer, though you can turn it off if you really want to. + * + * In 1-pass quantization the colormap must be chosen in advance of seeing the + * image. We use a map consisting of all combinations of Ncolors[i] color + * values for the i'th component. The Ncolors[] values are chosen so that + * their product, the total number of colors, is no more than that requested. + * (In most cases, the product will be somewhat less.) + * + * Since the colormap is orthogonal, the representative value for each color + * component can be determined without considering the other components; + * then these indexes can be combined into a colormap index by a standard + * N-dimensional-array-subscript calculation. Most of the arithmetic involved + * can be precalculated and stored in the lookup table colorindex[]. + * colorindex[i][j] maps pixel value j in component i to the nearest + * representative value (grid plane) for that component; this index is + * multiplied by the array stride for component i, so that the + * index of the colormap entry closest to a given pixel value is just + * sum( colorindex[component-number][pixel-component-value] ) + * Aside from being fast, this scheme allows for variable spacing between + * representative values with no additional lookup cost. + * + * If gamma correction has been applied in color conversion, it might be wise + * to adjust the color grid spacing so that the representative colors are + * equidistant in linear space. At this writing, gamma correction is not + * implemented by jdcolor, so nothing is done here. + */ + + +/* Declarations for ordered dithering. + * + * We use a standard 16x16 ordered dither array. The basic concept of ordered + * dithering is described in many references, for instance Dale Schumacher's + * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991). + * In place of Schumacher's comparisons against a "threshold" value, we add a + * "dither" value to the input pixel and then round the result to the nearest + * output value. The dither value is equivalent to (0.5 - threshold) times + * the distance between output values. For ordered dithering, we assume that + * the output colors are equally spaced; if not, results will probably be + * worse, since the dither may be too much or too little at a given point. + * + * The normal calculation would be to form pixel value + dither, range-limit + * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual. + * We can skip the separate range-limiting step by extending the colorindex + * table in both directions. + */ + +#define ODITHER_SIZE 16 /* dimension of dither matrix */ +/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */ +#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE) /* # cells in matrix */ +#define ODITHER_MASK (ODITHER_SIZE-1) /* mask for wrapping around counters */ + +typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE]; +typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE]; + +static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = { + /* Bayer's order-4 dither array. Generated by the code given in + * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I. + * The values in this array must range from 0 to ODITHER_CELLS-1. + */ + { 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255 }, + { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 }, + { 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 }, + { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 }, + { 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247 }, + { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 }, + { 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 }, + { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 }, + { 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253 }, + { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 }, + { 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 }, + { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 }, + { 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245 }, + { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 }, + { 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 }, + { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 } +}; + + +/* Declarations for Floyd-Steinberg dithering. + * + * Errors are accumulated into the array fserrors[], at a resolution of + * 1/16th of a pixel count. The error at a given pixel is propagated + * to its not-yet-processed neighbors using the standard F-S fractions, + * ... (here) 7/16 + * 3/16 5/16 1/16 + * We work left-to-right on even rows, right-to-left on odd rows. + * + * We can get away with a single array (holding one row's worth of errors) + * by using it to store the current row's errors at pixel columns not yet + * processed, but the next row's errors at columns already processed. We + * need only a few extra variables to hold the errors immediately around the + * current column. (If we are lucky, those variables are in registers, but + * even if not, they're probably cheaper to access than array elements are.) + * + * The fserrors[] array is indexed [component#][position]. + * We provide (#columns + 2) entries per component; the extra entry at each + * end saves us from special-casing the first and last pixels. + * + * Note: on a wide image, we might not have enough room in a PC's near data + * segment to hold the error array; so it is allocated with alloc_large. + */ + +#if BITS_IN_JSAMPLE == 8 +typedef INT16 FSERROR; /* 16 bits should be enough */ +typedef int LOCFSERROR; /* use 'int' for calculation temps */ +#else +typedef INT32 FSERROR; /* may need more than 16 bits */ +typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ +#endif + +typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */ + + +/* Private subobject */ + +#define MAX_Q_COMPS 4 /* max components I can handle */ + +typedef struct { + struct jpeg_color_quantizer pub; /* public fields */ + + /* Initially allocated colormap is saved here */ + JSAMPARRAY sv_colormap; /* The color map as a 2-D pixel array */ + int sv_actual; /* number of entries in use */ + + JSAMPARRAY colorindex; /* Precomputed mapping for speed */ + /* colorindex[i][j] = index of color closest to pixel value j in component i, + * premultiplied as described above. Since colormap indexes must fit into + * JSAMPLEs, the entries of this array will too. + */ + boolean is_padded; /* is the colorindex padded for odither? */ + + int Ncolors[MAX_Q_COMPS]; /* # of values alloced to each component */ + + /* Variables for ordered dithering */ + int row_index; /* cur row's vertical index in dither matrix */ + ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ + + /* Variables for Floyd-Steinberg dithering */ + FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ + boolean on_odd_row; /* flag to remember which row we are on */ +} my_cquantizer; + +typedef my_cquantizer * my_cquantize_ptr; + + +/* + * Policy-making subroutines for create_colormap and create_colorindex. + * These routines determine the colormap to be used. The rest of the module + * only assumes that the colormap is orthogonal. + * + * * select_ncolors decides how to divvy up the available colors + * among the components. + * * output_value defines the set of representative values for a component. + * * largest_input_value defines the mapping from input values to + * representative values for a component. + * Note that the latter two routines may impose different policies for + * different components, though this is not currently done. + */ + + +LOCAL(int) +select_ncolors (j_decompress_ptr cinfo, int Ncolors[]) +/* Determine allocation of desired colors to components, */ +/* and fill in Ncolors[] array to indicate choice. */ +/* Return value is total number of colors (product of Ncolors[] values). */ +{ + int nc = cinfo->out_color_components; /* number of color components */ + int max_colors = cinfo->desired_number_of_colors; + int total_colors, iroot, i, j; + boolean changed; + long temp; + static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE }; + + /* We can allocate at least the nc'th root of max_colors per component. */ + /* Compute floor(nc'th root of max_colors). */ + iroot = 1; + do { + iroot++; + temp = iroot; /* set temp = iroot ** nc */ + for (i = 1; i < nc; i++) + temp *= iroot; + } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */ + iroot--; /* now iroot = floor(root) */ + + /* Must have at least 2 color values per component */ + if (iroot < 2) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp); + + /* Initialize to iroot color values for each component */ + total_colors = 1; + for (i = 0; i < nc; i++) { + Ncolors[i] = iroot; + total_colors *= iroot; + } + /* We may be able to increment the count for one or more components without + * exceeding max_colors, though we know not all can be incremented. + * Sometimes, the first component can be incremented more than once! + * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.) + * In RGB colorspace, try to increment G first, then R, then B. + */ + do { + changed = FALSE; + for (i = 0; i < nc; i++) { + j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); + /* calculate new total_colors if Ncolors[j] is incremented */ + temp = total_colors / Ncolors[j]; + temp *= Ncolors[j]+1; /* done in long arith to avoid oflo */ + if (temp > (long) max_colors) + break; /* won't fit, done with this pass */ + Ncolors[j]++; /* OK, apply the increment */ + total_colors = (int) temp; + changed = TRUE; + } + } while (changed); + + return total_colors; +} + + +LOCAL(int) +output_value (j_decompress_ptr cinfo, int ci, int j, int maxj) +/* Return j'th output value, where j will range from 0 to maxj */ +/* The output values must fall in 0..MAXJSAMPLE in increasing order */ +{ + /* We always provide values 0 and MAXJSAMPLE for each component; + * any additional values are equally spaced between these limits. + * (Forcing the upper and lower values to the limits ensures that + * dithering can't produce a color outside the selected gamut.) + */ + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); +} + + +LOCAL(int) +largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj) +/* Return largest input value that should map to j'th output value */ +/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */ +{ + /* Breakpoints are halfway between values returned by output_value */ + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); +} + + +/* + * Create the colormap. + */ + +LOCAL(void) +create_colormap (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPARRAY colormap; /* Created colormap */ + int total_colors; /* Number of distinct output colors */ + int i,j,k, nci, blksize, blkdist, ptr, val; + + /* Select number of colors for each component */ + total_colors = select_ncolors(cinfo, cquantize->Ncolors); + + /* Report selected color counts */ + if (cinfo->out_color_components == 3) + TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, + total_colors, cquantize->Ncolors[0], + cquantize->Ncolors[1], cquantize->Ncolors[2]); + else + TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); + + /* Allocate and fill in the colormap. */ + /* The colors are ordered in the map in standard row-major order, */ + /* i.e. rightmost (highest-indexed) color changes most rapidly. */ + + colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + /* blkdist is distance between groups of identical entries for a component */ + blkdist = total_colors; + + for (i = 0; i < cinfo->out_color_components; i++) { + /* fill in colormap entries for i'th color component */ + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + blksize = blkdist / nci; + for (j = 0; j < nci; j++) { + /* Compute j'th output value (out of nci) for component */ + val = output_value(cinfo, i, j, nci-1); + /* Fill in all colormap entries that have this value of this component */ + for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { + /* fill in blksize entries beginning at ptr */ + for (k = 0; k < blksize; k++) + colormap[i][ptr+k] = (JSAMPLE) val; + } + } + blkdist = blksize; /* blksize of this color is blkdist of next */ + } + + /* Save the colormap in private storage, + * where it will survive color quantization mode changes. + */ + cquantize->sv_colormap = colormap; + cquantize->sv_actual = total_colors; +} + + +/* + * Create the color index table. + */ + +LOCAL(void) +create_colorindex (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPROW indexptr; + int i,j,k, nci, blksize, val, pad; + + /* For ordered dither, we pad the color index tables by MAXJSAMPLE in + * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE). + * This is not necessary in the other dithering modes. However, we + * flag whether it was done in case user changes dithering mode. + */ + if (cinfo->dither_mode == JDITHER_ORDERED) { + pad = MAXJSAMPLE*2; + cquantize->is_padded = TRUE; + } else { + pad = 0; + cquantize->is_padded = FALSE; + } + + cquantize->colorindex = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (MAXJSAMPLE+1 + pad), + (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + blksize = cquantize->sv_actual; + + for (i = 0; i < cinfo->out_color_components; i++) { + /* fill in colorindex entries for i'th color component */ + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + blksize = blksize / nci; + + /* adjust colorindex pointers to provide padding at negative indexes. */ + if (pad) + cquantize->colorindex[i] += MAXJSAMPLE; + + /* in loop, val = index of current output value, */ + /* and k = largest j that maps to current val */ + indexptr = cquantize->colorindex[i]; + val = 0; + k = largest_input_value(cinfo, i, 0, nci-1); + for (j = 0; j <= MAXJSAMPLE; j++) { + while (j > k) /* advance val if past boundary */ + k = largest_input_value(cinfo, i, ++val, nci-1); + /* premultiply so that no multiplication needed in main processing */ + indexptr[j] = (JSAMPLE) (val * blksize); + } + /* Pad at both ends if necessary */ + if (pad) + for (j = 1; j <= MAXJSAMPLE; j++) { + indexptr[-j] = indexptr[0]; + indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; + } + } +} + + +/* + * Create an ordered-dither array for a component having ncolors + * distinct output values. + */ + +LOCAL(ODITHER_MATRIX_PTR) +make_odither_array (j_decompress_ptr cinfo, int ncolors) +{ + ODITHER_MATRIX_PTR odither; + int j,k; + INT32 num,den; + + odither = (ODITHER_MATRIX_PTR) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ODITHER_MATRIX)); + /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1). + * Hence the dither value for the matrix cell with fill order f + * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). + * On 16-bit-int machine, be careful to avoid overflow. + */ + den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); + for (j = 0; j < ODITHER_SIZE; j++) { + for (k = 0; k < ODITHER_SIZE; k++) { + num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) + * MAXJSAMPLE; + /* Ensure round towards zero despite C's lack of consistency + * about rounding negative values in integer division... + */ + odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); + } + } + return odither; +} + + +/* + * Create the ordered-dither tables. + * Components having the same number of representative colors may + * share a dither table. + */ + +LOCAL(void) +create_odither_tables (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + ODITHER_MATRIX_PTR odither; + int i, j, nci; + + for (i = 0; i < cinfo->out_color_components; i++) { + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + odither = NULL; /* search for matching prior component */ + for (j = 0; j < i; j++) { + if (nci == cquantize->Ncolors[j]) { + odither = cquantize->odither[j]; + break; + } + } + if (odither == NULL) /* need a new table? */ + odither = make_odither_array(cinfo, nci); + cquantize->odither[i] = odither; + } +} + + +/* + * Map some rows of pixels to the output colormapped representation. + */ + +METHODDEF(void) +color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPARRAY colorindex = cquantize->colorindex; + register int pixcode, ci; + register JSAMPROW ptrin, ptrout; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + register int nc = cinfo->out_color_components; + + for (row = 0; row < num_rows; row++) { + ptrin = input_buf[row]; + ptrout = output_buf[row]; + for (col = width; col > 0; col--) { + pixcode = 0; + for (ci = 0; ci < nc; ci++) { + pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); + } + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + + +METHODDEF(void) +color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW ptrin, ptrout; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + ptrin = input_buf[row]; + ptrout = output_buf[row]; + for (col = width; col > 0; col--) { + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + + +METHODDEF(void) +quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, with ordered dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex_ci; + int * dither; /* points to active row of dither matrix */ + int row_index, col_index; /* current indexes into dither matrix */ + int nc = cinfo->out_color_components; + int ci; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + /* Initialize output values to 0 so can process components separately */ + jzero_far((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); + row_index = cquantize->row_index; + for (ci = 0; ci < nc; ci++) { + input_ptr = input_buf[row] + ci; + output_ptr = output_buf[row]; + colorindex_ci = cquantize->colorindex[ci]; + dither = cquantize->odither[ci][row_index]; + col_index = 0; + + for (col = width; col > 0; col--) { + /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE, + * select output value, accumulate into output code for this pixel. + * Range-limiting need not be done explicitly, as we have extended + * the colorindex table to produce the right answers for out-of-range + * inputs. The maximum dither is +- MAXJSAMPLE; this sets the + * required amount of padding. + */ + *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; + input_ptr += nc; + output_ptr++; + col_index = (col_index + 1) & ODITHER_MASK; + } + } + /* Advance row index for next row */ + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + + +METHODDEF(void) +quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, with ordered dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int * dither0; /* points to active row of dither matrix */ + int * dither1; + int * dither2; + int row_index, col_index; /* current indexes into dither matrix */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + row_index = cquantize->row_index; + input_ptr = input_buf[row]; + output_ptr = output_buf[row]; + dither0 = cquantize->odither[0][row_index]; + dither1 = cquantize->odither[1][row_index]; + dither2 = cquantize->odither[2][row_index]; + col_index = 0; + + for (col = width; col > 0; col--) { + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + + dither0[col_index]]); + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + dither1[col_index]]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + + dither2[col_index]]); + *output_ptr++ = (JSAMPLE) pixcode; + col_index = (col_index + 1) & ODITHER_MASK; + } + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + + +METHODDEF(void) +quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, with Floyd-Steinberg dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register LOCFSERROR cur; /* current error or pixel value */ + LOCFSERROR belowerr; /* error for pixel below cur */ + LOCFSERROR bpreverr; /* error for below/prev col */ + LOCFSERROR bnexterr; /* error for below/next col */ + LOCFSERROR delta; + register FSERRPTR errorptr; /* => fserrors[] at column before current */ + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex_ci; + JSAMPROW colormap_ci; + int pixcode; + int nc = cinfo->out_color_components; + int dir; /* 1 for left-to-right, -1 for right-to-left */ + int dirnc; /* dir * nc */ + int ci; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + JSAMPLE *range_limit = cinfo->sample_range_limit; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + /* Initialize output values to 0 so can process components separately */ + jzero_far((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); + for (ci = 0; ci < nc; ci++) { + input_ptr = input_buf[row] + ci; + output_ptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + input_ptr += (width-1) * nc; /* so point to rightmost pixel */ + output_ptr += width-1; + dir = -1; + dirnc = -nc; + errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ + } else { + /* work left to right in this row */ + dir = 1; + dirnc = nc; + errorptr = cquantize->fserrors[ci]; /* => entry before first column */ + } + colorindex_ci = cquantize->colorindex[ci]; + colormap_ci = cquantize->sv_colormap[ci]; + /* Preset error values: no error propagated to first pixel from left */ + cur = 0; + /* and no error propagated to row below yet */ + belowerr = bpreverr = 0; + + for (col = width; col > 0; col--) { + /* cur holds the error propagated from the previous pixel on the + * current line. Add the error propagated from the previous line + * to form the complete error correction term for this pixel, and + * round the error term (which is expressed * 16) to an integer. + * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct + * for either sign of the error value. + * Note: errorptr points to *previous* column's array entry. + */ + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. + * The maximum error is +- MAXJSAMPLE; this sets the required size + * of the range_limit array. + */ + cur += GETJSAMPLE(*input_ptr); + cur = GETJSAMPLE(range_limit[cur]); + /* Select output value, accumulate into output code for this pixel */ + pixcode = GETJSAMPLE(colorindex_ci[cur]); + *output_ptr += (JSAMPLE) pixcode; + /* Compute actual representation error at this pixel */ + /* Note: we can do this even though we don't have the final */ + /* pixel code, because the colormap is orthogonal. */ + cur -= GETJSAMPLE(colormap_ci[pixcode]); + /* Compute error fractions to be propagated to adjacent pixels. + * Add these into the running sums, and simultaneously shift the + * next-line error sums left by 1 column. + */ + bnexterr = cur; + delta = cur * 2; + cur += delta; /* form error * 3 */ + errorptr[0] = (FSERROR) (bpreverr + cur); + cur += delta; /* form error * 5 */ + bpreverr = belowerr + cur; + belowerr = bnexterr; + cur += delta; /* form error * 7 */ + /* At this point cur contains the 7/16 error value to be propagated + * to the next pixel on the current line, and all the errors for the + * next line have been shifted over. We are therefore ready to move on. + */ + input_ptr += dirnc; /* advance input ptr to next column */ + output_ptr += dir; /* advance output ptr to next column */ + errorptr += dir; /* advance errorptr to current column */ + } + /* Post-loop cleanup: we must unload the final error value into the + * final fserrors[] entry. Note we need not unload belowerr because + * it is for the dummy column before or after the actual array. + */ + errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ + } + cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); + } +} + + +/* + * Allocate workspace for Floyd-Steinberg errors. + */ + +LOCAL(void) +alloc_fs_workspace (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + for (i = 0; i < cinfo->out_color_components; i++) { + cquantize->fserrors[i] = (FSERRPTR) + (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + } +} + + +/* + * Initialize for one-pass color quantization. + */ + +METHODDEF(void) +start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + /* Install my colormap. */ + cinfo->colormap = cquantize->sv_colormap; + cinfo->actual_number_of_colors = cquantize->sv_actual; + + /* Initialize for desired dithering mode. */ + switch (cinfo->dither_mode) { + case JDITHER_NONE: + if (cinfo->out_color_components == 3) + cquantize->pub.color_quantize = color_quantize3; + else + cquantize->pub.color_quantize = color_quantize; + break; + case JDITHER_ORDERED: + if (cinfo->out_color_components == 3) + cquantize->pub.color_quantize = quantize3_ord_dither; + else + cquantize->pub.color_quantize = quantize_ord_dither; + cquantize->row_index = 0; /* initialize state for ordered dither */ + /* If user changed to ordered dither from another mode, + * we must recreate the color index table with padding. + * This will cost extra space, but probably isn't very likely. + */ + if (! cquantize->is_padded) + create_colorindex(cinfo); + /* Create ordered-dither tables if we didn't already. */ + if (cquantize->odither[0] == NULL) + create_odither_tables(cinfo); + break; + case JDITHER_FS: + cquantize->pub.color_quantize = quantize_fs_dither; + cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */ + /* Allocate Floyd-Steinberg workspace if didn't already. */ + if (cquantize->fserrors[0] == NULL) + alloc_fs_workspace(cinfo); + /* Initialize the propagated errors to zero. */ + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + for (i = 0; i < cinfo->out_color_components; i++) + jzero_far((void FAR *) cquantize->fserrors[i], arraysize); + break; + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } +} + + +/* + * Finish up at the end of the pass. + */ + +METHODDEF(void) +finish_pass_1_quant (j_decompress_ptr cinfo) +{ + /* no work in 1-pass case */ +} + + +/* + * Switch to a new external colormap between output passes. + * Shouldn't get to this module! + */ + +METHODDEF(void) +new_color_map_1_quant (j_decompress_ptr cinfo) +{ + ERREXIT(cinfo, JERR_MODE_CHANGE); +} + + +/* + * Module initialization routine for 1-pass color quantization. + */ + +GLOBAL(void) +jinit_1pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_1_quant; + cquantize->pub.finish_pass = finish_pass_1_quant; + cquantize->pub.new_color_map = new_color_map_1_quant; + cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */ + cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */ + + /* Make sure my internal arrays won't overflow */ + if (cinfo->out_color_components > MAX_Q_COMPS) + ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS); + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1)) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1); + + /* Create the colormap and color index table. */ + create_colormap(cinfo); + create_colorindex(cinfo); + + /* Allocate Floyd-Steinberg workspace now if requested. + * We do this now since it is FAR storage and may affect the memory + * manager's space calculations. If the user changes to FS dither + * mode in a later pass, we will allocate the space then, and will + * possibly overrun the max_memory_to_use setting. + */ + if (cinfo->dither_mode == JDITHER_FS) + alloc_fs_workspace(cinfo); +} + +#endif /* QUANT_1PASS_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jquant2.c b/3rdparty/openctm/tools/jpeg/jquant2.c new file mode 100644 index 000000000..87a3920b0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jquant2.c @@ -0,0 +1,1310 @@ +/* + * jquant2.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains 2-pass color quantization (color mapping) routines. + * These routines provide selection of a custom color map for an image, + * followed by mapping of the image to that color map, with optional + * Floyd-Steinberg dithering. + * It is also possible to use just the second pass to map to an arbitrary + * externally-given color map. + * + * Note: ordered dithering is not supported, since there isn't any fast + * way to compute intercolor distances; it's unclear that ordered dither's + * fundamental assumptions even hold with an irregularly spaced color map. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef QUANT_2PASS_SUPPORTED + + +/* + * This module implements the well-known Heckbert paradigm for color + * quantization. Most of the ideas used here can be traced back to + * Heckbert's seminal paper + * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display", + * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304. + * + * In the first pass over the image, we accumulate a histogram showing the + * usage count of each possible color. To keep the histogram to a reasonable + * size, we reduce the precision of the input; typical practice is to retain + * 5 or 6 bits per color, so that 8 or 4 different input values are counted + * in the same histogram cell. + * + * Next, the color-selection step begins with a box representing the whole + * color space, and repeatedly splits the "largest" remaining box until we + * have as many boxes as desired colors. Then the mean color in each + * remaining box becomes one of the possible output colors. + * + * The second pass over the image maps each input pixel to the closest output + * color (optionally after applying a Floyd-Steinberg dithering correction). + * This mapping is logically trivial, but making it go fast enough requires + * considerable care. + * + * Heckbert-style quantizers vary a good deal in their policies for choosing + * the "largest" box and deciding where to cut it. The particular policies + * used here have proved out well in experimental comparisons, but better ones + * may yet be found. + * + * In earlier versions of the IJG code, this module quantized in YCbCr color + * space, processing the raw upsampled data without a color conversion step. + * This allowed the color conversion math to be done only once per colormap + * entry, not once per pixel. However, that optimization precluded other + * useful optimizations (such as merging color conversion with upsampling) + * and it also interfered with desired capabilities such as quantizing to an + * externally-supplied colormap. We have therefore abandoned that approach. + * The present code works in the post-conversion color space, typically RGB. + * + * To improve the visual quality of the results, we actually work in scaled + * RGB space, giving G distances more weight than R, and R in turn more than + * B. To do everything in integer math, we must use integer scale factors. + * The 2/3/1 scale factors used here correspond loosely to the relative + * weights of the colors in the NTSC grayscale equation. + * If you want to use this code to quantize a non-RGB color space, you'll + * probably need to change these scale factors. + */ + +#define R_SCALE 2 /* scale R distances by this much */ +#define G_SCALE 3 /* scale G distances by this much */ +#define B_SCALE 1 /* and B by this much */ + +/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined + * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B + * and B,G,R orders. If you define some other weird order in jmorecfg.h, + * you'll get compile errors until you extend this logic. In that case + * you'll probably want to tweak the histogram sizes too. + */ + +#if RGB_RED == 0 +#define C0_SCALE R_SCALE +#endif +#if RGB_BLUE == 0 +#define C0_SCALE B_SCALE +#endif +#if RGB_GREEN == 1 +#define C1_SCALE G_SCALE +#endif +#if RGB_RED == 2 +#define C2_SCALE R_SCALE +#endif +#if RGB_BLUE == 2 +#define C2_SCALE B_SCALE +#endif + + +/* + * First we have the histogram data structure and routines for creating it. + * + * The number of bits of precision can be adjusted by changing these symbols. + * We recommend keeping 6 bits for G and 5 each for R and B. + * If you have plenty of memory and cycles, 6 bits all around gives marginally + * better results; if you are short of memory, 5 bits all around will save + * some space but degrade the results. + * To maintain a fully accurate histogram, we'd need to allocate a "long" + * (preferably unsigned long) for each cell. In practice this is overkill; + * we can get by with 16 bits per cell. Few of the cell counts will overflow, + * and clamping those that do overflow to the maximum value will give close- + * enough results. This reduces the recommended histogram size from 256Kb + * to 128Kb, which is a useful savings on PC-class machines. + * (In the second pass the histogram space is re-used for pixel mapping data; + * in that capacity, each cell must be able to store zero to the number of + * desired colors. 16 bits/cell is plenty for that too.) + * Since the JPEG code is intended to run in small memory model on 80x86 + * machines, we can't just allocate the histogram in one chunk. Instead + * of a true 3-D array, we use a row of pointers to 2-D arrays. Each + * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and + * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that + * on 80x86 machines, the pointer row is in near memory but the actual + * arrays are in far memory (same arrangement as we use for image arrays). + */ + +#define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */ + +/* These will do the right thing for either R,G,B or B,G,R color order, + * but you may not like the results for other color orders. + */ +#define HIST_C0_BITS 5 /* bits of precision in R/B histogram */ +#define HIST_C1_BITS 6 /* bits of precision in G histogram */ +#define HIST_C2_BITS 5 /* bits of precision in B/R histogram */ + +/* Number of elements along histogram axes. */ +#define HIST_C0_ELEMS (1<cquantize; + register JSAMPROW ptr; + register histptr histp; + register hist3d histogram = cquantize->histogram; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + ptr = input_buf[row]; + for (col = width; col > 0; col--) { + /* get pixel value and index into the histogram */ + histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; + /* increment, check for overflow and undo increment if so. */ + if (++(*histp) <= 0) + (*histp)--; + ptr += 3; + } + } +} + + +/* + * Next we have the really interesting routines: selection of a colormap + * given the completed histogram. + * These routines work with a list of "boxes", each representing a rectangular + * subset of the input color space (to histogram precision). + */ + +typedef struct { + /* The bounds of the box (inclusive); expressed as histogram indexes */ + int c0min, c0max; + int c1min, c1max; + int c2min, c2max; + /* The volume (actually 2-norm) of the box */ + INT32 volume; + /* The number of nonzero histogram cells within this box */ + long colorcount; +} box; + +typedef box * boxptr; + + +LOCAL(boxptr) +find_biggest_color_pop (boxptr boxlist, int numboxes) +/* Find the splittable box with the largest color population */ +/* Returns NULL if no splittable boxes remain */ +{ + register boxptr boxp; + register int i; + register long maxc = 0; + boxptr which = NULL; + + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + if (boxp->colorcount > maxc && boxp->volume > 0) { + which = boxp; + maxc = boxp->colorcount; + } + } + return which; +} + + +LOCAL(boxptr) +find_biggest_volume (boxptr boxlist, int numboxes) +/* Find the splittable box with the largest (scaled) volume */ +/* Returns NULL if no splittable boxes remain */ +{ + register boxptr boxp; + register int i; + register INT32 maxv = 0; + boxptr which = NULL; + + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + if (boxp->volume > maxv) { + which = boxp; + maxv = boxp->volume; + } + } + return which; +} + + +LOCAL(void) +update_box (j_decompress_ptr cinfo, boxptr boxp) +/* Shrink the min/max bounds of a box to enclose only nonzero elements, */ +/* and recompute its volume and population */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + histptr histp; + int c0,c1,c2; + int c0min,c0max,c1min,c1max,c2min,c2max; + INT32 dist0,dist1,dist2; + long ccount; + + c0min = boxp->c0min; c0max = boxp->c0max; + c1min = boxp->c1min; c1max = boxp->c1max; + c2min = boxp->c2min; c2max = boxp->c2max; + + if (c0max > c0min) + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c0min = c0min = c0; + goto have_c0min; + } + } + have_c0min: + if (c0max > c0min) + for (c0 = c0max; c0 >= c0min; c0--) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c0max = c0max = c0; + goto have_c0max; + } + } + have_c0max: + if (c1max > c1min) + for (c1 = c1min; c1 <= c1max; c1++) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c1min = c1min = c1; + goto have_c1min; + } + } + have_c1min: + if (c1max > c1min) + for (c1 = c1max; c1 >= c1min; c1--) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c1max = c1max = c1; + goto have_c1max; + } + } + have_c1max: + if (c2max > c2min) + for (c2 = c2min; c2 <= c2max; c2++) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1min][c2]; + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + if (*histp != 0) { + boxp->c2min = c2min = c2; + goto have_c2min; + } + } + have_c2min: + if (c2max > c2min) + for (c2 = c2max; c2 >= c2min; c2--) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1min][c2]; + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + if (*histp != 0) { + boxp->c2max = c2max = c2; + goto have_c2max; + } + } + have_c2max: + + /* Update box volume. + * We use 2-norm rather than real volume here; this biases the method + * against making long narrow boxes, and it has the side benefit that + * a box is splittable iff norm > 0. + * Since the differences are expressed in histogram-cell units, + * we have to shift back to JSAMPLE units to get consistent distances; + * after which, we scale according to the selected distance scale factors. + */ + dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; + dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; + dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; + boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; + + /* Now scan remaining volume of box and compute population */ + ccount = 0; + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++, histp++) + if (*histp != 0) { + ccount++; + } + } + boxp->colorcount = ccount; +} + + +LOCAL(int) +median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes, + int desired_colors) +/* Repeatedly select and split the largest box until we have enough boxes */ +{ + int n,lb; + int c0,c1,c2,cmax; + register boxptr b1,b2; + + while (numboxes < desired_colors) { + /* Select box to split. + * Current algorithm: by population for first half, then by volume. + */ + if (numboxes*2 <= desired_colors) { + b1 = find_biggest_color_pop(boxlist, numboxes); + } else { + b1 = find_biggest_volume(boxlist, numboxes); + } + if (b1 == NULL) /* no splittable boxes left! */ + break; + b2 = &boxlist[numboxes]; /* where new box will go */ + /* Copy the color bounds to the new box. */ + b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max; + b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min; + /* Choose which axis to split the box on. + * Current algorithm: longest scaled axis. + * See notes in update_box about scaling distances. + */ + c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; + c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; + c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; + /* We want to break any ties in favor of green, then red, blue last. + * This code does the right thing for R,G,B or B,G,R color orders only. + */ +#if RGB_RED == 0 + cmax = c1; n = 1; + if (c0 > cmax) { cmax = c0; n = 0; } + if (c2 > cmax) { n = 2; } +#else + cmax = c1; n = 1; + if (c2 > cmax) { cmax = c2; n = 2; } + if (c0 > cmax) { n = 0; } +#endif + /* Choose split point along selected axis, and update box bounds. + * Current algorithm: split at halfway point. + * (Since the box has been shrunk to minimum volume, + * any split will produce two nonempty subboxes.) + * Note that lb value is max for lower box, so must be < old max. + */ + switch (n) { + case 0: + lb = (b1->c0max + b1->c0min) / 2; + b1->c0max = lb; + b2->c0min = lb+1; + break; + case 1: + lb = (b1->c1max + b1->c1min) / 2; + b1->c1max = lb; + b2->c1min = lb+1; + break; + case 2: + lb = (b1->c2max + b1->c2min) / 2; + b1->c2max = lb; + b2->c2min = lb+1; + break; + } + /* Update stats for boxes */ + update_box(cinfo, b1); + update_box(cinfo, b2); + numboxes++; + } + return numboxes; +} + + +LOCAL(void) +compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor) +/* Compute representative color for a box, put it in colormap[icolor] */ +{ + /* Current algorithm: mean weighted by pixels (not colors) */ + /* Note it is important to get the rounding correct! */ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + histptr histp; + int c0,c1,c2; + int c0min,c0max,c1min,c1max,c2min,c2max; + long count; + long total = 0; + long c0total = 0; + long c1total = 0; + long c2total = 0; + + c0min = boxp->c0min; c0max = boxp->c0max; + c1min = boxp->c1min; c1max = boxp->c1max; + c2min = boxp->c2min; c2max = boxp->c2max; + + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) { + if ((count = *histp++) != 0) { + total += count; + c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; + c1total += ((c1 << C1_SHIFT) + ((1<>1)) * count; + c2total += ((c2 << C2_SHIFT) + ((1<>1)) * count; + } + } + } + + cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); + cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); + cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); +} + + +LOCAL(void) +select_colors (j_decompress_ptr cinfo, int desired_colors) +/* Master routine for color selection */ +{ + boxptr boxlist; + int numboxes; + int i; + + /* Allocate workspace for box list */ + boxlist = (boxptr) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box)); + /* Initialize one box containing whole space */ + numboxes = 1; + boxlist[0].c0min = 0; + boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; + boxlist[0].c1min = 0; + boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT; + boxlist[0].c2min = 0; + boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT; + /* Shrink it to actually-used volume and set its statistics */ + update_box(cinfo, & boxlist[0]); + /* Perform median-cut to produce final box list */ + numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors); + /* Compute the representative color for each box, fill colormap */ + for (i = 0; i < numboxes; i++) + compute_color(cinfo, & boxlist[i], i); + cinfo->actual_number_of_colors = numboxes; + TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); +} + + +/* + * These routines are concerned with the time-critical task of mapping input + * colors to the nearest color in the selected colormap. + * + * We re-use the histogram space as an "inverse color map", essentially a + * cache for the results of nearest-color searches. All colors within a + * histogram cell will be mapped to the same colormap entry, namely the one + * closest to the cell's center. This may not be quite the closest entry to + * the actual input color, but it's almost as good. A zero in the cache + * indicates we haven't found the nearest color for that cell yet; the array + * is cleared to zeroes before starting the mapping pass. When we find the + * nearest color for a cell, its colormap index plus one is recorded in the + * cache for future use. The pass2 scanning routines call fill_inverse_cmap + * when they need to use an unfilled entry in the cache. + * + * Our method of efficiently finding nearest colors is based on the "locally + * sorted search" idea described by Heckbert and on the incremental distance + * calculation described by Spencer W. Thomas in chapter III.1 of Graphics + * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that + * the distances from a given colormap entry to each cell of the histogram can + * be computed quickly using an incremental method: the differences between + * distances to adjacent cells themselves differ by a constant. This allows a + * fairly fast implementation of the "brute force" approach of computing the + * distance from every colormap entry to every histogram cell. Unfortunately, + * it needs a work array to hold the best-distance-so-far for each histogram + * cell (because the inner loop has to be over cells, not colormap entries). + * The work array elements have to be INT32s, so the work array would need + * 256Kb at our recommended precision. This is not feasible in DOS machines. + * + * To get around these problems, we apply Thomas' method to compute the + * nearest colors for only the cells within a small subbox of the histogram. + * The work array need be only as big as the subbox, so the memory usage + * problem is solved. Furthermore, we need not fill subboxes that are never + * referenced in pass2; many images use only part of the color gamut, so a + * fair amount of work is saved. An additional advantage of this + * approach is that we can apply Heckbert's locality criterion to quickly + * eliminate colormap entries that are far away from the subbox; typically + * three-fourths of the colormap entries are rejected by Heckbert's criterion, + * and we need not compute their distances to individual cells in the subbox. + * The speed of this approach is heavily influenced by the subbox size: too + * small means too much overhead, too big loses because Heckbert's criterion + * can't eliminate as many colormap entries. Empirically the best subbox + * size seems to be about 1/512th of the histogram (1/8th in each direction). + * + * Thomas' article also describes a refined method which is asymptotically + * faster than the brute-force method, but it is also far more complex and + * cannot efficiently be applied to small subboxes. It is therefore not + * useful for programs intended to be portable to DOS machines. On machines + * with plenty of memory, filling the whole histogram in one shot with Thomas' + * refined method might be faster than the present code --- but then again, + * it might not be any faster, and it's certainly more complicated. + */ + + +/* log2(histogram cells in update box) for each axis; this can be adjusted */ +#define BOX_C0_LOG (HIST_C0_BITS-3) +#define BOX_C1_LOG (HIST_C1_BITS-3) +#define BOX_C2_LOG (HIST_C2_BITS-3) + +#define BOX_C0_ELEMS (1<actual_number_of_colors; + int maxc0, maxc1, maxc2; + int centerc0, centerc1, centerc2; + int i, x, ncolors; + INT32 minmaxdist, min_dist, max_dist, tdist; + INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */ + + /* Compute true coordinates of update box's upper corner and center. + * Actually we compute the coordinates of the center of the upper-corner + * histogram cell, which are the upper bounds of the volume we care about. + * Note that since ">>" rounds down, the "center" values may be closer to + * min than to max; hence comparisons to them must be "<=", not "<". + */ + maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT)); + centerc0 = (minc0 + maxc0) >> 1; + maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT)); + centerc1 = (minc1 + maxc1) >> 1; + maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT)); + centerc2 = (minc2 + maxc2) >> 1; + + /* For each color in colormap, find: + * 1. its minimum squared-distance to any point in the update box + * (zero if color is within update box); + * 2. its maximum squared-distance to any point in the update box. + * Both of these can be found by considering only the corners of the box. + * We save the minimum distance for each color in mindist[]; + * only the smallest maximum distance is of interest. + */ + minmaxdist = 0x7FFFFFFFL; + + for (i = 0; i < numcolors; i++) { + /* We compute the squared-c0-distance term, then add in the other two. */ + x = GETJSAMPLE(cinfo->colormap[0][i]); + if (x < minc0) { + tdist = (x - minc0) * C0_SCALE; + min_dist = tdist*tdist; + tdist = (x - maxc0) * C0_SCALE; + max_dist = tdist*tdist; + } else if (x > maxc0) { + tdist = (x - maxc0) * C0_SCALE; + min_dist = tdist*tdist; + tdist = (x - minc0) * C0_SCALE; + max_dist = tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + min_dist = 0; + if (x <= centerc0) { + tdist = (x - maxc0) * C0_SCALE; + max_dist = tdist*tdist; + } else { + tdist = (x - minc0) * C0_SCALE; + max_dist = tdist*tdist; + } + } + + x = GETJSAMPLE(cinfo->colormap[1][i]); + if (x < minc1) { + tdist = (x - minc1) * C1_SCALE; + min_dist += tdist*tdist; + tdist = (x - maxc1) * C1_SCALE; + max_dist += tdist*tdist; + } else if (x > maxc1) { + tdist = (x - maxc1) * C1_SCALE; + min_dist += tdist*tdist; + tdist = (x - minc1) * C1_SCALE; + max_dist += tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + if (x <= centerc1) { + tdist = (x - maxc1) * C1_SCALE; + max_dist += tdist*tdist; + } else { + tdist = (x - minc1) * C1_SCALE; + max_dist += tdist*tdist; + } + } + + x = GETJSAMPLE(cinfo->colormap[2][i]); + if (x < minc2) { + tdist = (x - minc2) * C2_SCALE; + min_dist += tdist*tdist; + tdist = (x - maxc2) * C2_SCALE; + max_dist += tdist*tdist; + } else if (x > maxc2) { + tdist = (x - maxc2) * C2_SCALE; + min_dist += tdist*tdist; + tdist = (x - minc2) * C2_SCALE; + max_dist += tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + if (x <= centerc2) { + tdist = (x - maxc2) * C2_SCALE; + max_dist += tdist*tdist; + } else { + tdist = (x - minc2) * C2_SCALE; + max_dist += tdist*tdist; + } + } + + mindist[i] = min_dist; /* save away the results */ + if (max_dist < minmaxdist) + minmaxdist = max_dist; + } + + /* Now we know that no cell in the update box is more than minmaxdist + * away from some colormap entry. Therefore, only colors that are + * within minmaxdist of some part of the box need be considered. + */ + ncolors = 0; + for (i = 0; i < numcolors; i++) { + if (mindist[i] <= minmaxdist) + colorlist[ncolors++] = (JSAMPLE) i; + } + return ncolors; +} + + +LOCAL(void) +find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2, + int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[]) +/* Find the closest colormap entry for each cell in the update box, + * given the list of candidate colors prepared by find_nearby_colors. + * Return the indexes of the closest entries in the bestcolor[] array. + * This routine uses Thomas' incremental distance calculation method to + * find the distance from a colormap entry to successive cells in the box. + */ +{ + int ic0, ic1, ic2; + int i, icolor; + register INT32 * bptr; /* pointer into bestdist[] array */ + JSAMPLE * cptr; /* pointer into bestcolor[] array */ + INT32 dist0, dist1; /* initial distance values */ + register INT32 dist2; /* current distance in inner loop */ + INT32 xx0, xx1; /* distance increments */ + register INT32 xx2; + INT32 inc0, inc1, inc2; /* initial values for increments */ + /* This array holds the distance to the nearest-so-far color for each cell */ + INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Initialize best-distance for each cell of the update box */ + bptr = bestdist; + for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) + *bptr++ = 0x7FFFFFFFL; + + /* For each color selected by find_nearby_colors, + * compute its distance to the center of each cell in the box. + * If that's less than best-so-far, update best distance and color number. + */ + + /* Nominal steps between cell centers ("x" in Thomas article) */ +#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE) +#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE) +#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE) + + for (i = 0; i < numcolors; i++) { + icolor = GETJSAMPLE(colorlist[i]); + /* Compute (square of) distance from minc0/c1/c2 to this color */ + inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; + dist0 = inc0*inc0; + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + dist0 += inc1*inc1; + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + dist0 += inc2*inc2; + /* Form the initial difference increments */ + inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; + inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1; + inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; + /* Now loop over all cells in box, updating distance per Thomas method */ + bptr = bestdist; + cptr = bestcolor; + xx0 = inc0; + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + dist1 = dist0; + xx1 = inc1; + for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) { + dist2 = dist1; + xx2 = inc2; + for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { + if (dist2 < *bptr) { + *bptr = dist2; + *cptr = (JSAMPLE) icolor; + } + dist2 += xx2; + xx2 += 2 * STEP_C2 * STEP_C2; + bptr++; + cptr++; + } + dist1 += xx1; + xx1 += 2 * STEP_C1 * STEP_C1; + } + dist0 += xx0; + xx0 += 2 * STEP_C0 * STEP_C0; + } + } +} + + +LOCAL(void) +fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2) +/* Fill the inverse-colormap entries in the update box that contains */ +/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */ +/* we can fill as many others as we wish.) */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + int minc0, minc1, minc2; /* lower left corner of update box */ + int ic0, ic1, ic2; + register JSAMPLE * cptr; /* pointer into bestcolor[] array */ + register histptr cachep; /* pointer into main cache array */ + /* This array lists the candidate colormap indexes. */ + JSAMPLE colorlist[MAXNUMCOLORS]; + int numcolors; /* number of candidate colors */ + /* This array holds the actually closest colormap index for each cell. */ + JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Convert cell coordinates to update box ID */ + c0 >>= BOX_C0_LOG; + c1 >>= BOX_C1_LOG; + c2 >>= BOX_C2_LOG; + + /* Compute true coordinates of update box's origin corner. + * Actually we compute the coordinates of the center of the corner + * histogram cell, which are the lower bounds of the volume we care about. + */ + minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); + minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); + minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); + + /* Determine which colormap entries are close enough to be candidates + * for the nearest entry to some cell in the update box. + */ + numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist); + + /* Determine the actually nearest colors. */ + find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist, + bestcolor); + + /* Save the best color numbers (plus 1) in the main cache array */ + c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ + c1 <<= BOX_C1_LOG; + c2 <<= BOX_C2_LOG; + cptr = bestcolor; + for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + cachep = & histogram[c0+ic0][c1+ic1][c2]; + for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { + *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); + } + } + } +} + + +/* + * Map some rows of pixels to the output colormapped representation. + */ + +METHODDEF(void) +pass2_no_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + register JSAMPROW inptr, outptr; + register histptr cachep; + register int c0, c1, c2; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + inptr = input_buf[row]; + outptr = output_buf[row]; + for (col = width; col > 0; col--) { + /* get pixel value and index into the cache */ + c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; + c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; + c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; + cachep = & histogram[c0][c1][c2]; + /* If we have not seen this color before, find nearest colormap entry */ + /* and update the cache */ + if (*cachep == 0) + fill_inverse_cmap(cinfo, c0,c1,c2); + /* Now emit the colormap index for this cell */ + *outptr++ = (JSAMPLE) (*cachep - 1); + } + } +} + + +METHODDEF(void) +pass2_fs_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs Floyd-Steinberg dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */ + LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */ + LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */ + register FSERRPTR errorptr; /* => fserrors[] at column before current */ + JSAMPROW inptr; /* => current input pixel */ + JSAMPROW outptr; /* => current output pixel */ + histptr cachep; + int dir; /* +1 or -1 depending on direction */ + int dir3; /* 3*dir, for advancing inptr & errorptr */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + JSAMPLE *range_limit = cinfo->sample_range_limit; + int *error_limit = cquantize->error_limiter; + JSAMPROW colormap0 = cinfo->colormap[0]; + JSAMPROW colormap1 = cinfo->colormap[1]; + JSAMPROW colormap2 = cinfo->colormap[2]; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + inptr = input_buf[row]; + outptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + inptr += (width-1) * 3; /* so point to rightmost pixel */ + outptr += width-1; + dir = -1; + dir3 = -3; + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + cquantize->on_odd_row = FALSE; /* flip for next time */ + } else { + /* work left to right in this row */ + dir = 1; + dir3 = 3; + errorptr = cquantize->fserrors; /* => entry before first real column */ + cquantize->on_odd_row = TRUE; /* flip for next time */ + } + /* Preset error values: no error propagated to first pixel from left */ + cur0 = cur1 = cur2 = 0; + /* and no error propagated to row below yet */ + belowerr0 = belowerr1 = belowerr2 = 0; + bpreverr0 = bpreverr1 = bpreverr2 = 0; + + for (col = width; col > 0; col--) { + /* curN holds the error propagated from the previous pixel on the + * current line. Add the error propagated from the previous line + * to form the complete error correction term for this pixel, and + * round the error term (which is expressed * 16) to an integer. + * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct + * for either sign of the error value. + * Note: errorptr points to *previous* column's array entry. + */ + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + /* Limit the error using transfer function set by init_error_limit. + * See comments with init_error_limit for rationale. + */ + cur0 = error_limit[cur0]; + cur1 = error_limit[cur1]; + cur2 = error_limit[cur2]; + /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. + * The maximum error is +- MAXJSAMPLE (or less with error limiting); + * this sets the required size of the range_limit array. + */ + cur0 += GETJSAMPLE(inptr[0]); + cur1 += GETJSAMPLE(inptr[1]); + cur2 += GETJSAMPLE(inptr[2]); + cur0 = GETJSAMPLE(range_limit[cur0]); + cur1 = GETJSAMPLE(range_limit[cur1]); + cur2 = GETJSAMPLE(range_limit[cur2]); + /* Index into the cache with adjusted pixel value */ + cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; + /* If we have not seen this color before, find nearest colormap */ + /* entry and update the cache */ + if (*cachep == 0) + fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT); + /* Now emit the colormap index for this cell */ + { register int pixcode = *cachep - 1; + *outptr = (JSAMPLE) pixcode; + /* Compute representation error for this pixel */ + cur0 -= GETJSAMPLE(colormap0[pixcode]); + cur1 -= GETJSAMPLE(colormap1[pixcode]); + cur2 -= GETJSAMPLE(colormap2[pixcode]); + } + /* Compute error fractions to be propagated to adjacent pixels. + * Add these into the running sums, and simultaneously shift the + * next-line error sums left by 1 column. + */ + { register LOCFSERROR bnexterr, delta; + + bnexterr = cur0; /* Process component 0 */ + delta = cur0 * 2; + cur0 += delta; /* form error * 3 */ + errorptr[0] = (FSERROR) (bpreverr0 + cur0); + cur0 += delta; /* form error * 5 */ + bpreverr0 = belowerr0 + cur0; + belowerr0 = bnexterr; + cur0 += delta; /* form error * 7 */ + bnexterr = cur1; /* Process component 1 */ + delta = cur1 * 2; + cur1 += delta; /* form error * 3 */ + errorptr[1] = (FSERROR) (bpreverr1 + cur1); + cur1 += delta; /* form error * 5 */ + bpreverr1 = belowerr1 + cur1; + belowerr1 = bnexterr; + cur1 += delta; /* form error * 7 */ + bnexterr = cur2; /* Process component 2 */ + delta = cur2 * 2; + cur2 += delta; /* form error * 3 */ + errorptr[2] = (FSERROR) (bpreverr2 + cur2); + cur2 += delta; /* form error * 5 */ + bpreverr2 = belowerr2 + cur2; + belowerr2 = bnexterr; + cur2 += delta; /* form error * 7 */ + } + /* At this point curN contains the 7/16 error value to be propagated + * to the next pixel on the current line, and all the errors for the + * next line have been shifted over. We are therefore ready to move on. + */ + inptr += dir3; /* Advance pixel pointers to next column */ + outptr += dir; + errorptr += dir3; /* advance errorptr to current column */ + } + /* Post-loop cleanup: we must unload the final error values into the + * final fserrors[] entry. Note we need not unload belowerrN because + * it is for the dummy column before or after the actual array. + */ + errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ + errorptr[1] = (FSERROR) bpreverr1; + errorptr[2] = (FSERROR) bpreverr2; + } +} + + +/* + * Initialize the error-limiting transfer function (lookup table). + * The raw F-S error computation can potentially compute error values of up to + * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be + * much less, otherwise obviously wrong pixels will be created. (Typical + * effects include weird fringes at color-area boundaries, isolated bright + * pixels in a dark area, etc.) The standard advice for avoiding this problem + * is to ensure that the "corners" of the color cube are allocated as output + * colors; then repeated errors in the same direction cannot cause cascading + * error buildup. However, that only prevents the error from getting + * completely out of hand; Aaron Giles reports that error limiting improves + * the results even with corner colors allocated. + * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty + * well, but the smoother transfer function used below is even better. Thanks + * to Aaron Giles for this idea. + */ + +LOCAL(void) +init_error_limit (j_decompress_ptr cinfo) +/* Allocate and fill in the error_limiter table */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + int * table; + int in, out; + + table = (int *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int)); + table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */ + cquantize->error_limiter = table; + +#define STEPSIZE ((MAXJSAMPLE+1)/16) + /* Map errors 1:1 up to +- MAXJSAMPLE/16 */ + out = 0; + for (in = 0; in < STEPSIZE; in++, out++) { + table[in] = out; table[-in] = -out; + } + /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */ + for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { + table[in] = out; table[-in] = -out; + } + /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */ + for (; in <= MAXJSAMPLE; in++) { + table[in] = out; table[-in] = -out; + } +#undef STEPSIZE +} + + +/* + * Finish up at the end of each pass. + */ + +METHODDEF(void) +finish_pass1 (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Select the representative colors and fill in cinfo->colormap */ + cinfo->colormap = cquantize->sv_colormap; + select_colors(cinfo, cquantize->desired); + /* Force next pass to zero the color index table */ + cquantize->needs_zeroed = TRUE; +} + + +METHODDEF(void) +finish_pass2 (j_decompress_ptr cinfo) +{ + /* no work */ +} + + +/* + * Initialize for each processing pass. + */ + +METHODDEF(void) +start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + int i; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + cinfo->dither_mode = JDITHER_FS; + + if (is_pre_scan) { + /* Set up method pointers */ + cquantize->pub.color_quantize = prescan_quantize; + cquantize->pub.finish_pass = finish_pass1; + cquantize->needs_zeroed = TRUE; /* Always zero histogram */ + } else { + /* Set up method pointers */ + if (cinfo->dither_mode == JDITHER_FS) + cquantize->pub.color_quantize = pass2_fs_dither; + else + cquantize->pub.color_quantize = pass2_no_dither; + cquantize->pub.finish_pass = finish_pass2; + + /* Make sure color count is acceptable */ + i = cinfo->actual_number_of_colors; + if (i < 1) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1); + if (i > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + + if (cinfo->dither_mode == JDITHER_FS) { + size_t arraysize = (size_t) ((cinfo->output_width + 2) * + (3 * SIZEOF(FSERROR))); + /* Allocate Floyd-Steinberg workspace if we didn't already. */ + if (cquantize->fserrors == NULL) + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + /* Initialize the propagated errors to zero. */ + jzero_far((void FAR *) cquantize->fserrors, arraysize); + /* Make the error-limit table if we didn't already. */ + if (cquantize->error_limiter == NULL) + init_error_limit(cinfo); + cquantize->on_odd_row = FALSE; + } + + } + /* Zero the histogram or inverse color map, if necessary */ + if (cquantize->needs_zeroed) { + for (i = 0; i < HIST_C0_ELEMS; i++) { + jzero_far((void FAR *) histogram[i], + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = FALSE; + } +} + + +/* + * Switch to a new external colormap between output passes. + */ + +METHODDEF(void) +new_color_map_2_quant (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Reset the inverse color map */ + cquantize->needs_zeroed = TRUE; +} + + +/* + * Module initialization routine for 2-pass color quantization. + */ + +GLOBAL(void) +jinit_2pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + int i; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_2_quant; + cquantize->pub.new_color_map = new_color_map_2_quant; + cquantize->fserrors = NULL; /* flag optional arrays not allocated */ + cquantize->error_limiter = NULL; + + /* Make sure jdmaster didn't give me a case I can't handle */ + if (cinfo->out_color_components != 3) + ERREXIT(cinfo, JERR_NOTIMPL); + + /* Allocate the histogram/inverse colormap storage */ + cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d)); + for (i = 0; i < HIST_C0_ELEMS; i++) { + cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = TRUE; /* histogram is garbage now */ + + /* Allocate storage for the completed colormap, if required. + * We do this now since it is FAR storage and may affect + * the memory manager's space calculations. + */ + if (cinfo->enable_2pass_quant) { + /* Make sure color count is acceptable */ + int desired = cinfo->desired_number_of_colors; + /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */ + if (desired < 8) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8); + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (desired > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + cquantize->sv_colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3); + cquantize->desired = desired; + } else + cquantize->sv_colormap = NULL; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + cinfo->dither_mode = JDITHER_FS; + + /* Allocate Floyd-Steinberg workspace if necessary. + * This isn't really needed until pass 2, but again it is FAR storage. + * Although we will cope with a later change in dither_mode, + * we do not promise to honor max_memory_to_use if dither_mode changes. + */ + if (cinfo->dither_mode == JDITHER_FS) { + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR)))); + /* Might as well create the error-limiting table too. */ + init_error_limit(cinfo); + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/jutils.c b/3rdparty/openctm/tools/jpeg/jutils.c new file mode 100644 index 000000000..286cda207 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jutils.c @@ -0,0 +1,179 @@ +/* + * jutils.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains tables and miscellaneous utility routines needed + * for both compression and decompression. + * Note we prefix all global names with "j" to minimize conflicts with + * a surrounding application. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element + * of a DCT block read in natural order (left to right, top to bottom). + */ + +#if 0 /* This table is not actually needed in v6a */ + +const int jpeg_zigzag_order[DCTSIZE2] = { + 0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63 +}; + +#endif + +/* + * jpeg_natural_order[i] is the natural-order position of the i'th element + * of zigzag order. + * + * When reading corrupted data, the Huffman decoders could attempt + * to reference an entry beyond the end of this array (if the decoded + * zero run length reaches past the end of the block). To prevent + * wild stores without adding an inner-loop test, we put some extra + * "63"s after the real entries. This will cause the extra coefficient + * to be stored in location 63 of the block, not somewhere random. + * The worst case would be a run-length of 15, which means we need 16 + * fake entries. + */ + +const int jpeg_natural_order[DCTSIZE2+16] = { + 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, + 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */ + 63, 63, 63, 63, 63, 63, 63, 63 +}; + + +/* + * Arithmetic utilities + */ + +GLOBAL(long) +jdiv_round_up (long a, long b) +/* Compute a/b rounded up to next integer, ie, ceil(a/b) */ +/* Assumes a >= 0, b > 0 */ +{ + return (a + b - 1L) / b; +} + + +GLOBAL(long) +jround_up (long a, long b) +/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ +/* Assumes a >= 0, b > 0 */ +{ + a += b - 1L; + return a - (a % b); +} + + +/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays + * and coefficient-block arrays. This won't work on 80x86 because the arrays + * are FAR and we're assuming a small-pointer memory model. However, some + * DOS compilers provide far-pointer versions of memcpy() and memset() even + * in the small-model libraries. These will be used if USE_FMEM is defined. + * Otherwise, the routines below do it the hard way. (The performance cost + * is not all that great, because these routines aren't very heavily used.) + */ + +#ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ +#define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) +#define FMEMZERO(target,size) MEMZERO(target,size) +#else /* 80x86 case, define if we can */ +#ifdef USE_FMEM +#define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) +#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) +#endif +#endif + + +GLOBAL(void) +jcopy_sample_rows (JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, JDIMENSION num_cols) +/* Copy some rows of samples from one place to another. + * num_rows rows are copied from input_array[source_row++] + * to output_array[dest_row++]; these areas may overlap for duplication. + * The source and destination arrays must be at least as wide as num_cols. + */ +{ + register JSAMPROW inptr, outptr; +#ifdef FMEMCOPY + register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE)); +#else + register JDIMENSION count; +#endif + register int row; + + input_array += source_row; + output_array += dest_row; + + for (row = num_rows; row > 0; row--) { + inptr = *input_array++; + outptr = *output_array++; +#ifdef FMEMCOPY + FMEMCOPY(outptr, inptr, count); +#else + for (count = num_cols; count > 0; count--) + *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ +#endif + } +} + + +GLOBAL(void) +jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks) +/* Copy a row of coefficient blocks from one place to another. */ +{ +#ifdef FMEMCOPY + FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); +#else + register JCOEFPTR inptr, outptr; + register long count; + + inptr = (JCOEFPTR) input_row; + outptr = (JCOEFPTR) output_row; + for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) { + *outptr++ = *inptr++; + } +#endif +} + + +GLOBAL(void) +jzero_far (void FAR * target, size_t bytestozero) +/* Zero out a chunk of FAR memory. */ +/* This might be sample-array data, block-array data, or alloc_large data. */ +{ +#ifdef FMEMZERO + FMEMZERO(target, bytestozero); +#else + register char FAR * ptr = (char FAR *) target; + register size_t count; + + for (count = bytestozero; count > 0; count--) { + *ptr++ = 0; + } +#endif +} diff --git a/3rdparty/openctm/tools/jpeg/jversion.h b/3rdparty/openctm/tools/jpeg/jversion.h new file mode 100644 index 000000000..3a7789f2d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/jversion.h @@ -0,0 +1,14 @@ +/* + * jversion.h + * + * Copyright (C) 1991-2009, Thomas G. Lane, Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains software version identification. + */ + + +#define JVERSION "7 27-Jun-2009" + +#define JCOPYRIGHT "Copyright (C) 2009, Thomas G. Lane, Guido Vollbeding" diff --git a/3rdparty/openctm/tools/jpeg/libjpeg.map b/3rdparty/openctm/tools/jpeg/libjpeg.map new file mode 100644 index 000000000..4c17a0609 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/libjpeg.map @@ -0,0 +1,4 @@ +LIBJPEG_7.0 { + global: + *; +}; diff --git a/3rdparty/openctm/tools/jpeg/libjpeg.txt b/3rdparty/openctm/tools/jpeg/libjpeg.txt new file mode 100644 index 000000000..e9059c405 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/libjpeg.txt @@ -0,0 +1,3067 @@ +USING THE IJG JPEG LIBRARY + +Copyright (C) 1994-2009, Thomas G. Lane, Guido Vollbeding. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +This file describes how to use the IJG JPEG library within an application +program. Read it if you want to write a program that uses the library. + +The file example.c provides heavily commented skeleton code for calling the +JPEG library. Also see jpeglib.h (the include file to be used by application +programs) for full details about data structures and function parameter lists. +The library source code, of course, is the ultimate reference. + +Note that there have been *major* changes from the application interface +presented by IJG version 4 and earlier versions. The old design had several +inherent limitations, and it had accumulated a lot of cruft as we added +features while trying to minimize application-interface changes. We have +sacrificed backward compatibility in the version 5 rewrite, but we think the +improvements justify this. + + +TABLE OF CONTENTS +----------------- + +Overview: + Functions provided by the library + Outline of typical usage +Basic library usage: + Data formats + Compression details + Decompression details + Mechanics of usage: include files, linking, etc +Advanced features: + Compression parameter selection + Decompression parameter selection + Special color spaces + Error handling + Compressed data handling (source and destination managers) + I/O suspension + Progressive JPEG support + Buffered-image mode + Abbreviated datastreams and multiple images + Special markers + Raw (downsampled) image data + Really raw data: DCT coefficients + Progress monitoring + Memory management + Memory usage + Library compile-time options + Portability considerations + Notes for MS-DOS implementors + +You should read at least the overview and basic usage sections before trying +to program with the library. The sections on advanced features can be read +if and when you need them. + + +OVERVIEW +======== + +Functions provided by the library +--------------------------------- + +The IJG JPEG library provides C code to read and write JPEG-compressed image +files. The surrounding application program receives or supplies image data a +scanline at a time, using a straightforward uncompressed image format. All +details of color conversion and other preprocessing/postprocessing can be +handled by the library. + +The library includes a substantial amount of code that is not covered by the +JPEG standard but is necessary for typical applications of JPEG. These +functions preprocess the image before JPEG compression or postprocess it after +decompression. They include colorspace conversion, downsampling/upsampling, +and color quantization. The application indirectly selects use of this code +by specifying the format in which it wishes to supply or receive image data. +For example, if colormapped output is requested, then the decompression +library automatically invokes color quantization. + +A wide range of quality vs. speed tradeoffs are possible in JPEG processing, +and even more so in decompression postprocessing. The decompression library +provides multiple implementations that cover most of the useful tradeoffs, +ranging from very-high-quality down to fast-preview operation. On the +compression side we have generally not provided low-quality choices, since +compression is normally less time-critical. It should be understood that the +low-quality modes may not meet the JPEG standard's accuracy requirements; +nonetheless, they are useful for viewers. + +A word about functions *not* provided by the library. We handle a subset of +the ISO JPEG standard; most baseline, extended-sequential, and progressive +JPEG processes are supported. (Our subset includes all features now in common +use.) Unsupported ISO options include: + * Hierarchical storage + * Lossless JPEG + * DNL marker + * Nonintegral subsampling ratios +We support both 8- and 12-bit data precision, but this is a compile-time +choice rather than a run-time choice; hence it is difficult to use both +precisions in a single application. + +By itself, the library handles only interchange JPEG datastreams --- in +particular the widely used JFIF file format. The library can be used by +surrounding code to process interchange or abbreviated JPEG datastreams that +are embedded in more complex file formats. (For example, this library is +used by the free LIBTIFF library to support JPEG compression in TIFF.) + + +Outline of typical usage +------------------------ + +The rough outline of a JPEG compression operation is: + + Allocate and initialize a JPEG compression object + Specify the destination for the compressed data (eg, a file) + Set parameters for compression, including image size & colorspace + jpeg_start_compress(...); + while (scan lines remain to be written) + jpeg_write_scanlines(...); + jpeg_finish_compress(...); + Release the JPEG compression object + +A JPEG compression object holds parameters and working state for the JPEG +library. We make creation/destruction of the object separate from starting +or finishing compression of an image; the same object can be re-used for a +series of image compression operations. This makes it easy to re-use the +same parameter settings for a sequence of images. Re-use of a JPEG object +also has important implications for processing abbreviated JPEG datastreams, +as discussed later. + +The image data to be compressed is supplied to jpeg_write_scanlines() from +in-memory buffers. If the application is doing file-to-file compression, +reading image data from the source file is the application's responsibility. +The library emits compressed data by calling a "data destination manager", +which typically will write the data into a file; but the application can +provide its own destination manager to do something else. + +Similarly, the rough outline of a JPEG decompression operation is: + + Allocate and initialize a JPEG decompression object + Specify the source of the compressed data (eg, a file) + Call jpeg_read_header() to obtain image info + Set parameters for decompression + jpeg_start_decompress(...); + while (scan lines remain to be read) + jpeg_read_scanlines(...); + jpeg_finish_decompress(...); + Release the JPEG decompression object + +This is comparable to the compression outline except that reading the +datastream header is a separate step. This is helpful because information +about the image's size, colorspace, etc is available when the application +selects decompression parameters. For example, the application can choose an +output scaling ratio that will fit the image into the available screen size. + +The decompression library obtains compressed data by calling a data source +manager, which typically will read the data from a file; but other behaviors +can be obtained with a custom source manager. Decompressed data is delivered +into in-memory buffers passed to jpeg_read_scanlines(). + +It is possible to abort an incomplete compression or decompression operation +by calling jpeg_abort(); or, if you do not need to retain the JPEG object, +simply release it by calling jpeg_destroy(). + +JPEG compression and decompression objects are two separate struct types. +However, they share some common fields, and certain routines such as +jpeg_destroy() can work on either type of object. + +The JPEG library has no static variables: all state is in the compression +or decompression object. Therefore it is possible to process multiple +compression and decompression operations concurrently, using multiple JPEG +objects. + +Both compression and decompression can be done in an incremental memory-to- +memory fashion, if suitable source/destination managers are used. See the +section on "I/O suspension" for more details. + + +BASIC LIBRARY USAGE +=================== + +Data formats +------------ + +Before diving into procedural details, it is helpful to understand the +image data format that the JPEG library expects or returns. + +The standard input image format is a rectangular array of pixels, with each +pixel having the same number of "component" or "sample" values (color +channels). You must specify how many components there are and the colorspace +interpretation of the components. Most applications will use RGB data +(three components per pixel) or grayscale data (one component per pixel). +PLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE. +A remarkable number of people manage to miss this, only to find that their +programs don't work with grayscale JPEG files. + +There is no provision for colormapped input. JPEG files are always full-color +or full grayscale (or sometimes another colorspace such as CMYK). You can +feed in a colormapped image by expanding it to full-color format. However +JPEG often doesn't work very well with source data that has been colormapped, +because of dithering noise. This is discussed in more detail in the JPEG FAQ +and the other references mentioned in the README file. + +Pixels are stored by scanlines, with each scanline running from left to +right. The component values for each pixel are adjacent in the row; for +example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color. Each scanline is an +array of data type JSAMPLE --- which is typically "unsigned char", unless +you've changed jmorecfg.h. (You can also change the RGB pixel layout, say +to B,G,R order, by modifying jmorecfg.h. But see the restrictions listed in +that file before doing so.) + +A 2-D array of pixels is formed by making a list of pointers to the starts of +scanlines; so the scanlines need not be physically adjacent in memory. Even +if you process just one scanline at a time, you must make a one-element +pointer array to conform to this structure. Pointers to JSAMPLE rows are of +type JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY. + +The library accepts or supplies one or more complete scanlines per call. +It is not possible to process part of a row at a time. Scanlines are always +processed top-to-bottom. You can process an entire image in one call if you +have it all in memory, but usually it's simplest to process one scanline at +a time. + +For best results, source data values should have the precision specified by +BITS_IN_JSAMPLE (normally 8 bits). For instance, if you choose to compress +data that's only 6 bits/channel, you should left-justify each value in a +byte before passing it to the compressor. If you need to compress data +that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12. +(See "Library compile-time options", later.) + + +The data format returned by the decompressor is the same in all details, +except that colormapped output is supported. (Again, a JPEG file is never +colormapped. But you can ask the decompressor to perform on-the-fly color +quantization to deliver colormapped output.) If you request colormapped +output then the returned data array contains a single JSAMPLE per pixel; +its value is an index into a color map. The color map is represented as +a 2-D JSAMPARRAY in which each row holds the values of one color component, +that is, colormap[i][j] is the value of the i'th color component for pixel +value (map index) j. Note that since the colormap indexes are stored in +JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE +(ie, at most 256 colors for an 8-bit JPEG library). + + +Compression details +------------------- + +Here we revisit the JPEG compression outline given in the overview. + +1. Allocate and initialize a JPEG compression object. + +A JPEG compression object is a "struct jpeg_compress_struct". (It also has +a bunch of subsidiary structures which are allocated via malloc(), but the +application doesn't control those directly.) This struct can be just a local +variable in the calling routine, if a single routine is going to execute the +whole JPEG compression sequence. Otherwise it can be static or allocated +from malloc(). + +You will also need a structure representing a JPEG error handler. The part +of this that the library cares about is a "struct jpeg_error_mgr". If you +are providing your own error handler, you'll typically want to embed the +jpeg_error_mgr struct in a larger structure; this is discussed later under +"Error handling". For now we'll assume you are just using the default error +handler. The default error handler will print JPEG error/warning messages +on stderr, and it will call exit() if a fatal error occurs. + +You must initialize the error handler structure, store a pointer to it into +the JPEG object's "err" field, and then call jpeg_create_compress() to +initialize the rest of the JPEG object. + +Typical code for this step, if you are using the default error handler, is + + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + ... + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + +jpeg_create_compress allocates a small amount of memory, so it could fail +if you are out of memory. In that case it will exit via the error handler; +that's why the error handler must be initialized first. + + +2. Specify the destination for the compressed data (eg, a file). + +As previously mentioned, the JPEG library delivers compressed data to a +"data destination" module. The library includes one data destination +module which knows how to write to a stdio stream. You can use your own +destination module if you want to do something else, as discussed later. + +If you use the standard destination module, you must open the target stdio +stream beforehand. Typical code for this step looks like: + + FILE * outfile; + ... + if ((outfile = fopen(filename, "wb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + exit(1); + } + jpeg_stdio_dest(&cinfo, outfile); + +where the last line invokes the standard destination module. + +WARNING: it is critical that the binary compressed data be delivered to the +output file unchanged. On non-Unix systems the stdio library may perform +newline translation or otherwise corrupt binary data. To suppress this +behavior, you may need to use a "b" option to fopen (as shown above), or use +setmode() or another routine to put the stdio stream in binary mode. See +cjpeg.c and djpeg.c for code that has been found to work on many systems. + +You can select the data destination after setting other parameters (step 3), +if that's more convenient. You may not change the destination between +calling jpeg_start_compress() and jpeg_finish_compress(). + + +3. Set parameters for compression, including image size & colorspace. + +You must supply information about the source image by setting the following +fields in the JPEG object (cinfo structure): + + image_width Width of image, in pixels + image_height Height of image, in pixels + input_components Number of color channels (samples per pixel) + in_color_space Color space of source image + +The image dimensions are, hopefully, obvious. JPEG supports image dimensions +of 1 to 64K pixels in either direction. The input color space is typically +RGB or grayscale, and input_components is 3 or 1 accordingly. (See "Special +color spaces", later, for more info.) The in_color_space field must be +assigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or +JCS_GRAYSCALE. + +JPEG has a large number of compression parameters that determine how the +image is encoded. Most applications don't need or want to know about all +these parameters. You can set all the parameters to reasonable defaults by +calling jpeg_set_defaults(); then, if there are particular values you want +to change, you can do so after that. The "Compression parameter selection" +section tells about all the parameters. + +You must set in_color_space correctly before calling jpeg_set_defaults(), +because the defaults depend on the source image colorspace. However the +other three source image parameters need not be valid until you call +jpeg_start_compress(). There's no harm in calling jpeg_set_defaults() more +than once, if that happens to be convenient. + +Typical code for a 24-bit RGB source image is + + cinfo.image_width = Width; /* image width and height, in pixels */ + cinfo.image_height = Height; + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ + + jpeg_set_defaults(&cinfo); + /* Make optional parameter settings here */ + + +4. jpeg_start_compress(...); + +After you have established the data destination and set all the necessary +source image info and other parameters, call jpeg_start_compress() to begin +a compression cycle. This will initialize internal state, allocate working +storage, and emit the first few bytes of the JPEG datastream header. + +Typical code: + + jpeg_start_compress(&cinfo, TRUE); + +The "TRUE" parameter ensures that a complete JPEG interchange datastream +will be written. This is appropriate in most cases. If you think you might +want to use an abbreviated datastream, read the section on abbreviated +datastreams, below. + +Once you have called jpeg_start_compress(), you may not alter any JPEG +parameters or other fields of the JPEG object until you have completed +the compression cycle. + + +5. while (scan lines remain to be written) + jpeg_write_scanlines(...); + +Now write all the required image data by calling jpeg_write_scanlines() +one or more times. You can pass one or more scanlines in each call, up +to the total image height. In most applications it is convenient to pass +just one or a few scanlines at a time. The expected format for the passed +data is discussed under "Data formats", above. + +Image data should be written in top-to-bottom scanline order. The JPEG spec +contains some weasel wording about how top and bottom are application-defined +terms (a curious interpretation of the English language...) but if you want +your files to be compatible with everyone else's, you WILL use top-to-bottom +order. If the source data must be read in bottom-to-top order, you can use +the JPEG library's virtual array mechanism to invert the data efficiently. +Examples of this can be found in the sample application cjpeg. + +The library maintains a count of the number of scanlines written so far +in the next_scanline field of the JPEG object. Usually you can just use +this variable as the loop counter, so that the loop test looks like +"while (cinfo.next_scanline < cinfo.image_height)". + +Code for this step depends heavily on the way that you store the source data. +example.c shows the following code for the case of a full-size 2-D source +array containing 3-byte RGB pixels: + + JSAMPROW row_pointer[1]; /* pointer to a single row */ + int row_stride; /* physical row width in buffer */ + + row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ + + while (cinfo.next_scanline < cinfo.image_height) { + row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; + jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + +jpeg_write_scanlines() returns the number of scanlines actually written. +This will normally be equal to the number passed in, so you can usually +ignore the return value. It is different in just two cases: + * If you try to write more scanlines than the declared image height, + the additional scanlines are ignored. + * If you use a suspending data destination manager, output buffer overrun + will cause the compressor to return before accepting all the passed lines. + This feature is discussed under "I/O suspension", below. The normal + stdio destination manager will NOT cause this to happen. +In any case, the return value is the same as the change in the value of +next_scanline. + + +6. jpeg_finish_compress(...); + +After all the image data has been written, call jpeg_finish_compress() to +complete the compression cycle. This step is ESSENTIAL to ensure that the +last bufferload of data is written to the data destination. +jpeg_finish_compress() also releases working memory associated with the JPEG +object. + +Typical code: + + jpeg_finish_compress(&cinfo); + +If using the stdio destination manager, don't forget to close the output +stdio stream (if necessary) afterwards. + +If you have requested a multi-pass operating mode, such as Huffman code +optimization, jpeg_finish_compress() will perform the additional passes using +data buffered by the first pass. In this case jpeg_finish_compress() may take +quite a while to complete. With the default compression parameters, this will +not happen. + +It is an error to call jpeg_finish_compress() before writing the necessary +total number of scanlines. If you wish to abort compression, call +jpeg_abort() as discussed below. + +After completing a compression cycle, you may dispose of the JPEG object +as discussed next, or you may use it to compress another image. In that case +return to step 2, 3, or 4 as appropriate. If you do not change the +destination manager, the new datastream will be written to the same target. +If you do not change any JPEG parameters, the new datastream will be written +with the same parameters as before. Note that you can change the input image +dimensions freely between cycles, but if you change the input colorspace, you +should call jpeg_set_defaults() to adjust for the new colorspace; and then +you'll need to repeat all of step 3. + + +7. Release the JPEG compression object. + +When you are done with a JPEG compression object, destroy it by calling +jpeg_destroy_compress(). This will free all subsidiary memory (regardless of +the previous state of the object). Or you can call jpeg_destroy(), which +works for either compression or decompression objects --- this may be more +convenient if you are sharing code between compression and decompression +cases. (Actually, these routines are equivalent except for the declared type +of the passed pointer. To avoid gripes from ANSI C compilers, jpeg_destroy() +should be passed a j_common_ptr.) + +If you allocated the jpeg_compress_struct structure from malloc(), freeing +it is your responsibility --- jpeg_destroy() won't. Ditto for the error +handler structure. + +Typical code: + + jpeg_destroy_compress(&cinfo); + + +8. Aborting. + +If you decide to abort a compression cycle before finishing, you can clean up +in either of two ways: + +* If you don't need the JPEG object any more, just call + jpeg_destroy_compress() or jpeg_destroy() to release memory. This is + legitimate at any point after calling jpeg_create_compress() --- in fact, + it's safe even if jpeg_create_compress() fails. + +* If you want to re-use the JPEG object, call jpeg_abort_compress(), or call + jpeg_abort() which works on both compression and decompression objects. + This will return the object to an idle state, releasing any working memory. + jpeg_abort() is allowed at any time after successful object creation. + +Note that cleaning up the data destination, if required, is your +responsibility; neither of these routines will call term_destination(). +(See "Compressed data handling", below, for more about that.) + +jpeg_destroy() and jpeg_abort() are the only safe calls to make on a JPEG +object that has reported an error by calling error_exit (see "Error handling" +for more info). The internal state of such an object is likely to be out of +whack. Either of these two routines will return the object to a known state. + + +Decompression details +--------------------- + +Here we revisit the JPEG decompression outline given in the overview. + +1. Allocate and initialize a JPEG decompression object. + +This is just like initialization for compression, as discussed above, +except that the object is a "struct jpeg_decompress_struct" and you +call jpeg_create_decompress(). Error handling is exactly the same. + +Typical code: + + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + ... + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_decompress(&cinfo); + +(Both here and in the IJG code, we usually use variable name "cinfo" for +both compression and decompression objects.) + + +2. Specify the source of the compressed data (eg, a file). + +As previously mentioned, the JPEG library reads compressed data from a "data +source" module. The library includes one data source module which knows how +to read from a stdio stream. You can use your own source module if you want +to do something else, as discussed later. + +If you use the standard source module, you must open the source stdio stream +beforehand. Typical code for this step looks like: + + FILE * infile; + ... + if ((infile = fopen(filename, "rb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + exit(1); + } + jpeg_stdio_src(&cinfo, infile); + +where the last line invokes the standard source module. + +WARNING: it is critical that the binary compressed data be read unchanged. +On non-Unix systems the stdio library may perform newline translation or +otherwise corrupt binary data. To suppress this behavior, you may need to use +a "b" option to fopen (as shown above), or use setmode() or another routine to +put the stdio stream in binary mode. See cjpeg.c and djpeg.c for code that +has been found to work on many systems. + +You may not change the data source between calling jpeg_read_header() and +jpeg_finish_decompress(). If you wish to read a series of JPEG images from +a single source file, you should repeat the jpeg_read_header() to +jpeg_finish_decompress() sequence without reinitializing either the JPEG +object or the data source module; this prevents buffered input data from +being discarded. + + +3. Call jpeg_read_header() to obtain image info. + +Typical code for this step is just + + jpeg_read_header(&cinfo, TRUE); + +This will read the source datastream header markers, up to the beginning +of the compressed data proper. On return, the image dimensions and other +info have been stored in the JPEG object. The application may wish to +consult this information before selecting decompression parameters. + +More complex code is necessary if + * A suspending data source is used --- in that case jpeg_read_header() + may return before it has read all the header data. See "I/O suspension", + below. The normal stdio source manager will NOT cause this to happen. + * Abbreviated JPEG files are to be processed --- see the section on + abbreviated datastreams. Standard applications that deal only in + interchange JPEG files need not be concerned with this case either. + +It is permissible to stop at this point if you just wanted to find out the +image dimensions and other header info for a JPEG file. In that case, +call jpeg_destroy() when you are done with the JPEG object, or call +jpeg_abort() to return it to an idle state before selecting a new data +source and reading another header. + + +4. Set parameters for decompression. + +jpeg_read_header() sets appropriate default decompression parameters based on +the properties of the image (in particular, its colorspace). However, you +may well want to alter these defaults before beginning the decompression. +For example, the default is to produce full color output from a color file. +If you want colormapped output you must ask for it. Other options allow the +returned image to be scaled and allow various speed/quality tradeoffs to be +selected. "Decompression parameter selection", below, gives details. + +If the defaults are appropriate, nothing need be done at this step. + +Note that all default values are set by each call to jpeg_read_header(). +If you reuse a decompression object, you cannot expect your parameter +settings to be preserved across cycles, as you can for compression. +You must set desired parameter values each time. + + +5. jpeg_start_decompress(...); + +Once the parameter values are satisfactory, call jpeg_start_decompress() to +begin decompression. This will initialize internal state, allocate working +memory, and prepare for returning data. + +Typical code is just + + jpeg_start_decompress(&cinfo); + +If you have requested a multi-pass operating mode, such as 2-pass color +quantization, jpeg_start_decompress() will do everything needed before data +output can begin. In this case jpeg_start_decompress() may take quite a while +to complete. With a single-scan (non progressive) JPEG file and default +decompression parameters, this will not happen; jpeg_start_decompress() will +return quickly. + +After this call, the final output image dimensions, including any requested +scaling, are available in the JPEG object; so is the selected colormap, if +colormapped output has been requested. Useful fields include + + output_width image width and height, as scaled + output_height + out_color_components # of color components in out_color_space + output_components # of color components returned per pixel + colormap the selected colormap, if any + actual_number_of_colors number of entries in colormap + +output_components is 1 (a colormap index) when quantizing colors; otherwise it +equals out_color_components. It is the number of JSAMPLE values that will be +emitted per pixel in the output arrays. + +Typically you will need to allocate data buffers to hold the incoming image. +You will need output_width * output_components JSAMPLEs per scanline in your +output buffer, and a total of output_height scanlines will be returned. + +Note: if you are using the JPEG library's internal memory manager to allocate +data buffers (as djpeg does), then the manager's protocol requires that you +request large buffers *before* calling jpeg_start_decompress(). This is a +little tricky since the output_XXX fields are not normally valid then. You +can make them valid by calling jpeg_calc_output_dimensions() after setting the +relevant parameters (scaling, output color space, and quantization flag). + + +6. while (scan lines remain to be read) + jpeg_read_scanlines(...); + +Now you can read the decompressed image data by calling jpeg_read_scanlines() +one or more times. At each call, you pass in the maximum number of scanlines +to be read (ie, the height of your working buffer); jpeg_read_scanlines() +will return up to that many lines. The return value is the number of lines +actually read. The format of the returned data is discussed under "Data +formats", above. Don't forget that grayscale and color JPEGs will return +different data formats! + +Image data is returned in top-to-bottom scanline order. If you must write +out the image in bottom-to-top order, you can use the JPEG library's virtual +array mechanism to invert the data efficiently. Examples of this can be +found in the sample application djpeg. + +The library maintains a count of the number of scanlines returned so far +in the output_scanline field of the JPEG object. Usually you can just use +this variable as the loop counter, so that the loop test looks like +"while (cinfo.output_scanline < cinfo.output_height)". (Note that the test +should NOT be against image_height, unless you never use scaling. The +image_height field is the height of the original unscaled image.) +The return value always equals the change in the value of output_scanline. + +If you don't use a suspending data source, it is safe to assume that +jpeg_read_scanlines() reads at least one scanline per call, until the +bottom of the image has been reached. + +If you use a buffer larger than one scanline, it is NOT safe to assume that +jpeg_read_scanlines() fills it. (The current implementation returns only a +few scanlines per call, no matter how large a buffer you pass.) So you must +always provide a loop that calls jpeg_read_scanlines() repeatedly until the +whole image has been read. + + +7. jpeg_finish_decompress(...); + +After all the image data has been read, call jpeg_finish_decompress() to +complete the decompression cycle. This causes working memory associated +with the JPEG object to be released. + +Typical code: + + jpeg_finish_decompress(&cinfo); + +If using the stdio source manager, don't forget to close the source stdio +stream if necessary. + +It is an error to call jpeg_finish_decompress() before reading the correct +total number of scanlines. If you wish to abort decompression, call +jpeg_abort() as discussed below. + +After completing a decompression cycle, you may dispose of the JPEG object as +discussed next, or you may use it to decompress another image. In that case +return to step 2 or 3 as appropriate. If you do not change the source +manager, the next image will be read from the same source. + + +8. Release the JPEG decompression object. + +When you are done with a JPEG decompression object, destroy it by calling +jpeg_destroy_decompress() or jpeg_destroy(). The previous discussion of +destroying compression objects applies here too. + +Typical code: + + jpeg_destroy_decompress(&cinfo); + + +9. Aborting. + +You can abort a decompression cycle by calling jpeg_destroy_decompress() or +jpeg_destroy() if you don't need the JPEG object any more, or +jpeg_abort_decompress() or jpeg_abort() if you want to reuse the object. +The previous discussion of aborting compression cycles applies here too. + + +Mechanics of usage: include files, linking, etc +----------------------------------------------- + +Applications using the JPEG library should include the header file jpeglib.h +to obtain declarations of data types and routines. Before including +jpeglib.h, include system headers that define at least the typedefs FILE and +size_t. On ANSI-conforming systems, including is sufficient; on +older Unix systems, you may need to define size_t. + +If the application needs to refer to individual JPEG library error codes, also +include jerror.h to define those symbols. + +jpeglib.h indirectly includes the files jconfig.h and jmorecfg.h. If you are +installing the JPEG header files in a system directory, you will want to +install all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h. + +The most convenient way to include the JPEG code into your executable program +is to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix +machines) and reference it at your link step. If you use only half of the +library (only compression or only decompression), only that much code will be +included from the library, unless your linker is hopelessly brain-damaged. +The supplied makefiles build libjpeg.a automatically (see install.txt). + +While you can build the JPEG library as a shared library if the whim strikes +you, we don't really recommend it. The trouble with shared libraries is that +at some point you'll probably try to substitute a new version of the library +without recompiling the calling applications. That generally doesn't work +because the parameter struct declarations usually change with each new +version. In other words, the library's API is *not* guaranteed binary +compatible across versions; we only try to ensure source-code compatibility. +(In hindsight, it might have been smarter to hide the parameter structs from +applications and introduce a ton of access functions instead. Too late now, +however.) + +On some systems your application may need to set up a signal handler to ensure +that temporary files are deleted if the program is interrupted. This is most +critical if you are on MS-DOS and use the jmemdos.c memory manager back end; +it will try to grab extended memory for temp files, and that space will NOT be +freed automatically. See cjpeg.c or djpeg.c for an example signal handler. + +It may be worth pointing out that the core JPEG library does not actually +require the stdio library: only the default source/destination managers and +error handler need it. You can use the library in a stdio-less environment +if you replace those modules and use jmemnobs.c (or another memory manager of +your own devising). More info about the minimum system library requirements +may be found in jinclude.h. + + +ADVANCED FEATURES +================= + +Compression parameter selection +------------------------------- + +This section describes all the optional parameters you can set for JPEG +compression, as well as the "helper" routines provided to assist in this +task. Proper setting of some parameters requires detailed understanding +of the JPEG standard; if you don't know what a parameter is for, it's best +not to mess with it! See REFERENCES in the README file for pointers to +more info about JPEG. + +It's a good idea to call jpeg_set_defaults() first, even if you plan to set +all the parameters; that way your code is more likely to work with future JPEG +libraries that have additional parameters. For the same reason, we recommend +you use a helper routine where one is provided, in preference to twiddling +cinfo fields directly. + +The helper routines are: + +jpeg_set_defaults (j_compress_ptr cinfo) + This routine sets all JPEG parameters to reasonable defaults, using + only the input image's color space (field in_color_space, which must + already be set in cinfo). Many applications will only need to use + this routine and perhaps jpeg_set_quality(). + +jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) + Sets the JPEG file's colorspace (field jpeg_color_space) as specified, + and sets other color-space-dependent parameters appropriately. See + "Special color spaces", below, before using this. A large number of + parameters, including all per-component parameters, are set by this + routine; if you want to twiddle individual parameters you should call + jpeg_set_colorspace() before rather than after. + +jpeg_default_colorspace (j_compress_ptr cinfo) + Selects an appropriate JPEG colorspace based on cinfo->in_color_space, + and calls jpeg_set_colorspace(). This is actually a subroutine of + jpeg_set_defaults(). It's broken out in case you want to change + just the colorspace-dependent JPEG parameters. + +jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) + Constructs JPEG quantization tables appropriate for the indicated + quality setting. The quality value is expressed on the 0..100 scale + recommended by IJG (cjpeg's "-quality" switch uses this routine). + Note that the exact mapping from quality values to tables may change + in future IJG releases as more is learned about DCT quantization. + If the force_baseline parameter is TRUE, then the quantization table + entries are constrained to the range 1..255 for full JPEG baseline + compatibility. In the current implementation, this only makes a + difference for quality settings below 25, and it effectively prevents + very small/low quality files from being generated. The IJG decoder + is capable of reading the non-baseline files generated at low quality + settings when force_baseline is FALSE, but other decoders may not be. + +jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, + boolean force_baseline) + Same as jpeg_set_quality() except that the generated tables are the + sample tables given in the JPEC spec section K.1, multiplied by the + specified scale factor (which is expressed as a percentage; thus + scale_factor = 100 reproduces the spec's tables). Note that larger + scale factors give lower quality. This entry point is useful for + conforming to the Adobe PostScript DCT conventions, but we do not + recommend linear scaling as a user-visible quality scale otherwise. + force_baseline again constrains the computed table entries to 1..255. + +int jpeg_quality_scaling (int quality) + Converts a value on the IJG-recommended quality scale to a linear + scaling percentage. Note that this routine may change or go away + in future releases --- IJG may choose to adopt a scaling method that + can't be expressed as a simple scalar multiplier, in which case the + premise of this routine collapses. Caveat user. + +jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline) + Set default quantization tables with linear q_scale_factor[] values + (see below). + +jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, boolean force_baseline) + Allows an arbitrary quantization table to be created. which_tbl + indicates which table slot to fill. basic_table points to an array + of 64 unsigned ints given in normal array order. These values are + multiplied by scale_factor/100 and then clamped to the range 1..65535 + (or to 1..255 if force_baseline is TRUE). + CAUTION: prior to library version 6a, jpeg_add_quant_table expected + the basic table to be given in JPEG zigzag order. If you need to + write code that works with either older or newer versions of this + routine, you must check the library version number. Something like + "#if JPEG_LIB_VERSION >= 61" is the right test. + +jpeg_simple_progression (j_compress_ptr cinfo) + Generates a default scan script for writing a progressive-JPEG file. + This is the recommended method of creating a progressive file, + unless you want to make a custom scan sequence. You must ensure that + the JPEG color space is set correctly before calling this routine. + + +Compression parameters (cinfo fields) include: + +J_DCT_METHOD dct_method + Selects the algorithm used for the DCT step. Choices are: + JDCT_ISLOW: slow but accurate integer algorithm + JDCT_IFAST: faster, less accurate integer method + JDCT_FLOAT: floating-point method + JDCT_DEFAULT: default method (normally JDCT_ISLOW) + JDCT_FASTEST: fastest method (normally JDCT_IFAST) + The FLOAT method is very slightly more accurate than the ISLOW method, + but may give different results on different machines due to varying + roundoff behavior. The integer methods should give the same results + on all machines. On machines with sufficiently fast FP hardware, the + floating-point method may also be the fastest. The IFAST method is + considerably less accurate than the other two; its use is not + recommended if high quality is a concern. JDCT_DEFAULT and + JDCT_FASTEST are macros configurable by each installation. + +unsigned int scale_num, scale_denom + Scale the image by the fraction scale_num/scale_denom. Default is + 1/1, or no scaling. Currently, the supported scaling ratios are + 8/N with all N from 1 to 16. (The library design allows for arbitrary + scaling ratios but this is not likely to be implemented any time soon.) + +J_COLOR_SPACE jpeg_color_space +int num_components + The JPEG color space and corresponding number of components; see + "Special color spaces", below, for more info. We recommend using + jpeg_set_color_space() if you want to change these. + +boolean optimize_coding + TRUE causes the compressor to compute optimal Huffman coding tables + for the image. This requires an extra pass over the data and + therefore costs a good deal of space and time. The default is + FALSE, which tells the compressor to use the supplied or default + Huffman tables. In most cases optimal tables save only a few percent + of file size compared to the default tables. Note that when this is + TRUE, you need not supply Huffman tables at all, and any you do + supply will be overwritten. + +unsigned int restart_interval +int restart_in_rows + To emit restart markers in the JPEG file, set one of these nonzero. + Set restart_interval to specify the exact interval in MCU blocks. + Set restart_in_rows to specify the interval in MCU rows. (If + restart_in_rows is not 0, then restart_interval is set after the + image width in MCUs is computed.) Defaults are zero (no restarts). + One restart marker per MCU row is often a good choice. + NOTE: the overhead of restart markers is higher in grayscale JPEG + files than in color files, and MUCH higher in progressive JPEGs. + If you use restarts, you may want to use larger intervals in those + cases. + +const jpeg_scan_info * scan_info +int num_scans + By default, scan_info is NULL; this causes the compressor to write a + single-scan sequential JPEG file. If not NULL, scan_info points to + an array of scan definition records of length num_scans. The + compressor will then write a JPEG file having one scan for each scan + definition record. This is used to generate noninterleaved or + progressive JPEG files. The library checks that the scan array + defines a valid JPEG scan sequence. (jpeg_simple_progression creates + a suitable scan definition array for progressive JPEG.) This is + discussed further under "Progressive JPEG support". + +boolean do_fancy_downsampling + If TRUE, use direct DCT scaling with DCT size > 8 for downsampling + of chroma components. + If FALSE, use only DCT size <= 8 and simple separate downsampling. + Default is TRUE. + For better image stability in multiple generation compression cycles + it is preferable that this value matches the corresponding + do_fancy_upsampling value in decompression. + +int smoothing_factor + If non-zero, the input image is smoothed; the value should be 1 for + minimal smoothing to 100 for maximum smoothing. Consult jcsample.c + for details of the smoothing algorithm. The default is zero. + +boolean write_JFIF_header + If TRUE, a JFIF APP0 marker is emitted. jpeg_set_defaults() and + jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space + (ie, YCbCr or grayscale) is selected, otherwise FALSE. + +UINT8 JFIF_major_version +UINT8 JFIF_minor_version + The version number to be written into the JFIF marker. + jpeg_set_defaults() initializes the version to 1.01 (major=minor=1). + You should set it to 1.02 (major=1, minor=2) if you plan to write + any JFIF 1.02 extension markers. + +UINT8 density_unit +UINT16 X_density +UINT16 Y_density + The resolution information to be written into the JFIF marker; + not used otherwise. density_unit may be 0 for unknown, + 1 for dots/inch, or 2 for dots/cm. The default values are 0,1,1 + indicating square pixels of unknown size. + +boolean write_Adobe_marker + If TRUE, an Adobe APP14 marker is emitted. jpeg_set_defaults() and + jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK, + or YCCK is selected, otherwise FALSE. It is generally a bad idea + to set both write_JFIF_header and write_Adobe_marker. In fact, + you probably shouldn't change the default settings at all --- the + default behavior ensures that the JPEG file's color space can be + recognized by the decoder. + +JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS] + Pointers to coefficient quantization tables, one per table slot, + or NULL if no table is defined for a slot. Usually these should + be set via one of the above helper routines; jpeg_add_quant_table() + is general enough to define any quantization table. The other + routines will set up table slot 0 for luminance quality and table + slot 1 for chrominance. + +int q_scale_factor[NUM_QUANT_TBLS] + Linear quantization scaling factors (percentage, initialized 100) + for use with jpeg_default_qtables(). + See rdswitch.c and cjpeg.c for an example of usage. + Note that the q_scale_factor[] fields are the "linear" scales, so you + have to convert from user-defined ratings via jpeg_quality_scaling(). + Here is an example code which corresponds to cjpeg -quality 90,70: + + jpeg_set_defaults(cinfo); + + /* Set luminance quality 90. */ + cinfo->q_scale_factor[0] = jpeg_quality_scaling(90); + /* Set chrominance quality 70. */ + cinfo->q_scale_factor[1] = jpeg_quality_scaling(70); + + jpeg_default_qtables(cinfo, force_baseline); + + CAUTION: You must also set 1x1 subsampling for efficient separate + color quality selection, since the default value used by library + is 2x2: + + cinfo->comp_info[0].v_samp_factor = 1; + cinfo->comp_info[0].h_samp_factor = 1; + +JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS] +JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS] + Pointers to Huffman coding tables, one per table slot, or NULL if + no table is defined for a slot. Slots 0 and 1 are filled with the + JPEG sample tables by jpeg_set_defaults(). If you need to allocate + more table structures, jpeg_alloc_huff_table() may be used. + Note that optimal Huffman tables can be computed for an image + by setting optimize_coding, as discussed above; there's seldom + any need to mess with providing your own Huffman tables. + + +The actual dimensions of the JPEG image that will be written to the file are +given by the following fields. These are computed from the input image +dimensions and the compression parameters by jpeg_start_compress(). You can +also call jpeg_calc_jpeg_dimensions() to obtain the values that will result +from the current parameter settings. This can be useful if you are trying +to pick a scaling ratio that will get close to a desired target size. + +JDIMENSION jpeg_width Actual dimensions of output image. +JDIMENSION jpeg_height + + +Per-component parameters are stored in the struct cinfo.comp_info[i] for +component number i. Note that components here refer to components of the +JPEG color space, *not* the source image color space. A suitably large +comp_info[] array is allocated by jpeg_set_defaults(); if you choose not +to use that routine, it's up to you to allocate the array. + +int component_id + The one-byte identifier code to be recorded in the JPEG file for + this component. For the standard color spaces, we recommend you + leave the default values alone. + +int h_samp_factor +int v_samp_factor + Horizontal and vertical sampling factors for the component; must + be 1..4 according to the JPEG standard. Note that larger sampling + factors indicate a higher-resolution component; many people find + this behavior quite unintuitive. The default values are 2,2 for + luminance components and 1,1 for chrominance components, except + for grayscale where 1,1 is used. + +int quant_tbl_no + Quantization table number for component. The default value is + 0 for luminance components and 1 for chrominance components. + +int dc_tbl_no +int ac_tbl_no + DC and AC entropy coding table numbers. The default values are + 0 for luminance components and 1 for chrominance components. + +int component_index + Must equal the component's index in comp_info[]. (Beginning in + release v6, the compressor library will fill this in automatically; + you don't have to.) + + +Decompression parameter selection +--------------------------------- + +Decompression parameter selection is somewhat simpler than compression +parameter selection, since all of the JPEG internal parameters are +recorded in the source file and need not be supplied by the application. +(Unless you are working with abbreviated files, in which case see +"Abbreviated datastreams", below.) Decompression parameters control +the postprocessing done on the image to deliver it in a format suitable +for the application's use. Many of the parameters control speed/quality +tradeoffs, in which faster decompression may be obtained at the price of +a poorer-quality image. The defaults select the highest quality (slowest) +processing. + +The following fields in the JPEG object are set by jpeg_read_header() and +may be useful to the application in choosing decompression parameters: + +JDIMENSION image_width Width and height of image +JDIMENSION image_height +int num_components Number of color components +J_COLOR_SPACE jpeg_color_space Colorspace of image +boolean saw_JFIF_marker TRUE if a JFIF APP0 marker was seen + UINT8 JFIF_major_version Version information from JFIF marker + UINT8 JFIF_minor_version + UINT8 density_unit Resolution data from JFIF marker + UINT16 X_density + UINT16 Y_density +boolean saw_Adobe_marker TRUE if an Adobe APP14 marker was seen + UINT8 Adobe_transform Color transform code from Adobe marker + +The JPEG color space, unfortunately, is something of a guess since the JPEG +standard proper does not provide a way to record it. In practice most files +adhere to the JFIF or Adobe conventions, and the decoder will recognize these +correctly. See "Special color spaces", below, for more info. + + +The decompression parameters that determine the basic properties of the +returned image are: + +J_COLOR_SPACE out_color_space + Output color space. jpeg_read_header() sets an appropriate default + based on jpeg_color_space; typically it will be RGB or grayscale. + The application can change this field to request output in a different + colorspace. For example, set it to JCS_GRAYSCALE to get grayscale + output from a color file. (This is useful for previewing: grayscale + output is faster than full color since the color components need not + be processed.) Note that not all possible color space transforms are + currently implemented; you may need to extend jdcolor.c if you want an + unusual conversion. + +unsigned int scale_num, scale_denom + Scale the image by the fraction scale_num/scale_denom. Currently, + the supported scaling ratios are N/8 with all N from 1 to 16. (The + library design allows for arbitrary scaling ratios but this is not + likely to be implemented any time soon.) The values are initialized + by jpeg_read_header() with the source DCT size, which is currently + 8/8. If you change only the scale_num value while leaving the other + unchanged, then this specifies the DCT scaled size to be applied on + the given input, which is currently equivalent to N/8 scaling, since + the source DCT size is currently always 8. Smaller scaling ratios + permit significantly faster decoding since fewer pixels need be + processed and a simpler IDCT method can be used. + +boolean quantize_colors + If set TRUE, colormapped output will be delivered. Default is FALSE, + meaning that full-color output will be delivered. + +The next three parameters are relevant only if quantize_colors is TRUE. + +int desired_number_of_colors + Maximum number of colors to use in generating a library-supplied color + map (the actual number of colors is returned in a different field). + Default 256. Ignored when the application supplies its own color map. + +boolean two_pass_quantize + If TRUE, an extra pass over the image is made to select a custom color + map for the image. This usually looks a lot better than the one-size- + fits-all colormap that is used otherwise. Default is TRUE. Ignored + when the application supplies its own color map. + +J_DITHER_MODE dither_mode + Selects color dithering method. Supported values are: + JDITHER_NONE no dithering: fast, very low quality + JDITHER_ORDERED ordered dither: moderate speed and quality + JDITHER_FS Floyd-Steinberg dither: slow, high quality + Default is JDITHER_FS. (At present, ordered dither is implemented + only in the single-pass, standard-colormap case. If you ask for + ordered dither when two_pass_quantize is TRUE or when you supply + an external color map, you'll get F-S dithering.) + +When quantize_colors is TRUE, the target color map is described by the next +two fields. colormap is set to NULL by jpeg_read_header(). The application +can supply a color map by setting colormap non-NULL and setting +actual_number_of_colors to the map size. Otherwise, jpeg_start_decompress() +selects a suitable color map and sets these two fields itself. +[Implementation restriction: at present, an externally supplied colormap is +only accepted for 3-component output color spaces.] + +JSAMPARRAY colormap + The color map, represented as a 2-D pixel array of out_color_components + rows and actual_number_of_colors columns. Ignored if not quantizing. + CAUTION: if the JPEG library creates its own colormap, the storage + pointed to by this field is released by jpeg_finish_decompress(). + Copy the colormap somewhere else first, if you want to save it. + +int actual_number_of_colors + The number of colors in the color map. + +Additional decompression parameters that the application may set include: + +J_DCT_METHOD dct_method + Selects the algorithm used for the DCT step. Choices are the same + as described above for compression. + +boolean do_fancy_upsampling + If TRUE, use direct DCT scaling with DCT size > 8 for upsampling + of chroma components. + If FALSE, use only DCT size <= 8 and simple separate upsampling. + Default is TRUE. + For better image stability in multiple generation compression cycles + it is preferable that this value matches the corresponding + do_fancy_downsampling value in compression. + +boolean do_block_smoothing + If TRUE, interblock smoothing is applied in early stages of decoding + progressive JPEG files; if FALSE, not. Default is TRUE. Early + progression stages look "fuzzy" with smoothing, "blocky" without. + In any case, block smoothing ceases to be applied after the first few + AC coefficients are known to full accuracy, so it is relevant only + when using buffered-image mode for progressive images. + +boolean enable_1pass_quant +boolean enable_external_quant +boolean enable_2pass_quant + These are significant only in buffered-image mode, which is + described in its own section below. + + +The output image dimensions are given by the following fields. These are +computed from the source image dimensions and the decompression parameters +by jpeg_start_decompress(). You can also call jpeg_calc_output_dimensions() +to obtain the values that will result from the current parameter settings. +This can be useful if you are trying to pick a scaling ratio that will get +close to a desired target size. It's also important if you are using the +JPEG library's memory manager to allocate output buffer space, because you +are supposed to request such buffers *before* jpeg_start_decompress(). + +JDIMENSION output_width Actual dimensions of output image. +JDIMENSION output_height +int out_color_components Number of color components in out_color_space. +int output_components Number of color components returned. +int rec_outbuf_height Recommended height of scanline buffer. + +When quantizing colors, output_components is 1, indicating a single color map +index per pixel. Otherwise it equals out_color_components. The output arrays +are required to be output_width * output_components JSAMPLEs wide. + +rec_outbuf_height is the recommended minimum height (in scanlines) of the +buffer passed to jpeg_read_scanlines(). If the buffer is smaller, the +library will still work, but time will be wasted due to unnecessary data +copying. In high-quality modes, rec_outbuf_height is always 1, but some +faster, lower-quality modes set it to larger values (typically 2 to 4). +If you are going to ask for a high-speed processing mode, you may as well +go to the trouble of honoring rec_outbuf_height so as to avoid data copying. +(An output buffer larger than rec_outbuf_height lines is OK, but won't +provide any material speed improvement over that height.) + + +Special color spaces +-------------------- + +The JPEG standard itself is "color blind" and doesn't specify any particular +color space. It is customary to convert color data to a luminance/chrominance +color space before compressing, since this permits greater compression. The +existing de-facto JPEG file format standards specify YCbCr or grayscale data +(JFIF), or grayscale, RGB, YCbCr, CMYK, or YCCK (Adobe). For special +applications such as multispectral images, other color spaces can be used, +but it must be understood that such files will be unportable. + +The JPEG library can handle the most common colorspace conversions (namely +RGB <=> YCbCr and CMYK <=> YCCK). It can also deal with data of an unknown +color space, passing it through without conversion. If you deal extensively +with an unusual color space, you can easily extend the library to understand +additional color spaces and perform appropriate conversions. + +For compression, the source data's color space is specified by field +in_color_space. This is transformed to the JPEG file's color space given +by jpeg_color_space. jpeg_set_defaults() chooses a reasonable JPEG color +space depending on in_color_space, but you can override this by calling +jpeg_set_colorspace(). Of course you must select a supported transformation. +jccolor.c currently supports the following transformations: + RGB => YCbCr + RGB => GRAYSCALE + YCbCr => GRAYSCALE + CMYK => YCCK +plus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB, +YCbCr => YCbCr, CMYK => CMYK, YCCK => YCCK, and UNKNOWN => UNKNOWN. + +The de-facto file format standards (JFIF and Adobe) specify APPn markers that +indicate the color space of the JPEG file. It is important to ensure that +these are written correctly, or omitted if the JPEG file's color space is not +one of the ones supported by the de-facto standards. jpeg_set_colorspace() +will set the compression parameters to include or omit the APPn markers +properly, so long as it is told the truth about the JPEG color space. +For example, if you are writing some random 3-component color space without +conversion, don't try to fake out the library by setting in_color_space and +jpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN. You may want to write an +APPn marker of your own devising to identify the colorspace --- see "Special +markers", below. + +When told that the color space is UNKNOWN, the library will default to using +luminance-quality compression parameters for all color components. You may +well want to change these parameters. See the source code for +jpeg_set_colorspace(), in jcparam.c, for details. + +For decompression, the JPEG file's color space is given in jpeg_color_space, +and this is transformed to the output color space out_color_space. +jpeg_read_header's setting of jpeg_color_space can be relied on if the file +conforms to JFIF or Adobe conventions, but otherwise it is no better than a +guess. If you know the JPEG file's color space for certain, you can override +jpeg_read_header's guess by setting jpeg_color_space. jpeg_read_header also +selects a default output color space based on (its guess of) jpeg_color_space; +set out_color_space to override this. Again, you must select a supported +transformation. jdcolor.c currently supports + YCbCr => GRAYSCALE + YCbCr => RGB + GRAYSCALE => RGB + YCCK => CMYK +as well as the null transforms. (Since GRAYSCALE=>RGB is provided, an +application can force grayscale JPEGs to look like color JPEGs if it only +wants to handle one case.) + +The two-pass color quantizer, jquant2.c, is specialized to handle RGB data +(it weights distances appropriately for RGB colors). You'll need to modify +the code if you want to use it for non-RGB output color spaces. Note that +jquant2.c is used to map to an application-supplied colormap as well as for +the normal two-pass colormap selection process. + +CAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG +files: 0 represents 100% ink coverage, rather than 0% ink as you'd expect. +This is arguably a bug in Photoshop, but if you need to work with Photoshop +CMYK files, you will have to deal with it in your application. We cannot +"fix" this in the library by inverting the data during the CMYK<=>YCCK +transform, because that would break other applications, notably Ghostscript. +Photoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK +data in the same inverted-YCCK representation used in bare JPEG files, but +the surrounding PostScript code performs an inversion using the PS image +operator. I am told that Photoshop 3.0 will write uninverted YCCK in +EPS/JPEG files, and will omit the PS-level inversion. (But the data +polarity used in bare JPEG files will not change in 3.0.) In either case, +the JPEG library must not invert the data itself, or else Ghostscript would +read these EPS files incorrectly. + + +Error handling +-------------- + +When the default error handler is used, any error detected inside the JPEG +routines will cause a message to be printed on stderr, followed by exit(). +You can supply your own error handling routines to override this behavior +and to control the treatment of nonfatal warnings and trace/debug messages. +The file example.c illustrates the most common case, which is to have the +application regain control after an error rather than exiting. + +The JPEG library never writes any message directly; it always goes through +the error handling routines. Three classes of messages are recognized: + * Fatal errors: the library cannot continue. + * Warnings: the library can continue, but the data is corrupt, and a + damaged output image is likely to result. + * Trace/informational messages. These come with a trace level indicating + the importance of the message; you can control the verbosity of the + program by adjusting the maximum trace level that will be displayed. + +You may, if you wish, simply replace the entire JPEG error handling module +(jerror.c) with your own code. However, you can avoid code duplication by +only replacing some of the routines depending on the behavior you need. +This is accomplished by calling jpeg_std_error() as usual, but then overriding +some of the method pointers in the jpeg_error_mgr struct, as illustrated by +example.c. + +All of the error handling routines will receive a pointer to the JPEG object +(a j_common_ptr which points to either a jpeg_compress_struct or a +jpeg_decompress_struct; if you need to tell which, test the is_decompressor +field). This struct includes a pointer to the error manager struct in its +"err" field. Frequently, custom error handler routines will need to access +additional data which is not known to the JPEG library or the standard error +handler. The most convenient way to do this is to embed either the JPEG +object or the jpeg_error_mgr struct in a larger structure that contains +additional fields; then casting the passed pointer provides access to the +additional fields. Again, see example.c for one way to do it. (Beginning +with IJG version 6b, there is also a void pointer "client_data" in each +JPEG object, which the application can also use to find related data. +The library does not touch client_data at all.) + +The individual methods that you might wish to override are: + +error_exit (j_common_ptr cinfo) + Receives control for a fatal error. Information sufficient to + generate the error message has been stored in cinfo->err; call + output_message to display it. Control must NOT return to the caller; + generally this routine will exit() or longjmp() somewhere. + Typically you would override this routine to get rid of the exit() + default behavior. Note that if you continue processing, you should + clean up the JPEG object with jpeg_abort() or jpeg_destroy(). + +output_message (j_common_ptr cinfo) + Actual output of any JPEG message. Override this to send messages + somewhere other than stderr. Note that this method does not know + how to generate a message, only where to send it. + +format_message (j_common_ptr cinfo, char * buffer) + Constructs a readable error message string based on the error info + stored in cinfo->err. This method is called by output_message. Few + applications should need to override this method. One possible + reason for doing so is to implement dynamic switching of error message + language. + +emit_message (j_common_ptr cinfo, int msg_level) + Decide whether or not to emit a warning or trace message; if so, + calls output_message. The main reason for overriding this method + would be to abort on warnings. msg_level is -1 for warnings, + 0 and up for trace messages. + +Only error_exit() and emit_message() are called from the rest of the JPEG +library; the other two are internal to the error handler. + +The actual message texts are stored in an array of strings which is pointed to +by the field err->jpeg_message_table. The messages are numbered from 0 to +err->last_jpeg_message, and it is these code numbers that are used in the +JPEG library code. You could replace the message texts (for instance, with +messages in French or German) by changing the message table pointer. See +jerror.h for the default texts. CAUTION: this table will almost certainly +change or grow from one library version to the next. + +It may be useful for an application to add its own message texts that are +handled by the same mechanism. The error handler supports a second "add-on" +message table for this purpose. To define an addon table, set the pointer +err->addon_message_table and the message numbers err->first_addon_message and +err->last_addon_message. If you number the addon messages beginning at 1000 +or so, you won't have to worry about conflicts with the library's built-in +messages. See the sample applications cjpeg/djpeg for an example of using +addon messages (the addon messages are defined in cderror.h). + +Actual invocation of the error handler is done via macros defined in jerror.h: + ERREXITn(...) for fatal errors + WARNMSn(...) for corrupt-data warnings + TRACEMSn(...) for trace and informational messages. +These macros store the message code and any additional parameters into the +error handler struct, then invoke the error_exit() or emit_message() method. +The variants of each macro are for varying numbers of additional parameters. +The additional parameters are inserted into the generated message using +standard printf() format codes. + +See jerror.h and jerror.c for further details. + + +Compressed data handling (source and destination managers) +---------------------------------------------------------- + +The JPEG compression library sends its compressed data to a "destination +manager" module. The default destination manager just writes the data to a +stdio stream, but you can provide your own manager to do something else. +Similarly, the decompression library calls a "source manager" to obtain the +compressed data; you can provide your own source manager if you want the data +to come from somewhere other than a stdio stream. + +In both cases, compressed data is processed a bufferload at a time: the +destination or source manager provides a work buffer, and the library invokes +the manager only when the buffer is filled or emptied. (You could define a +one-character buffer to force the manager to be invoked for each byte, but +that would be rather inefficient.) The buffer's size and location are +controlled by the manager, not by the library. For example, if you desired to +decompress a JPEG datastream that was all in memory, you could just make the +buffer pointer and length point to the original data in memory. Then the +buffer-reload procedure would be invoked only if the decompressor ran off the +end of the datastream, which would indicate an erroneous datastream. + +The work buffer is defined as an array of datatype JOCTET, which is generally +"char" or "unsigned char". On a machine where char is not exactly 8 bits +wide, you must define JOCTET as a wider data type and then modify the data +source and destination modules to transcribe the work arrays into 8-bit units +on external storage. + +A data destination manager struct contains a pointer and count defining the +next byte to write in the work buffer and the remaining free space: + + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + +The library increments the pointer and decrements the count until the buffer +is filled. The manager's empty_output_buffer method must reset the pointer +and count. The manager is expected to remember the buffer's starting address +and total size in private fields not visible to the library. + +A data destination manager provides three methods: + +init_destination (j_compress_ptr cinfo) + Initialize destination. This is called by jpeg_start_compress() + before any data is actually written. It must initialize + next_output_byte and free_in_buffer. free_in_buffer must be + initialized to a positive value. + +empty_output_buffer (j_compress_ptr cinfo) + This is called whenever the buffer has filled (free_in_buffer + reaches zero). In typical applications, it should write out the + *entire* buffer (use the saved start address and buffer length; + ignore the current state of next_output_byte and free_in_buffer). + Then reset the pointer & count to the start of the buffer, and + return TRUE indicating that the buffer has been dumped. + free_in_buffer must be set to a positive value when TRUE is + returned. A FALSE return should only be used when I/O suspension is + desired (this operating mode is discussed in the next section). + +term_destination (j_compress_ptr cinfo) + Terminate destination --- called by jpeg_finish_compress() after all + data has been written. In most applications, this must flush any + data remaining in the buffer. Use either next_output_byte or + free_in_buffer to determine how much data is in the buffer. + +term_destination() is NOT called by jpeg_abort() or jpeg_destroy(). If you +want the destination manager to be cleaned up during an abort, you must do it +yourself. + +You will also need code to create a jpeg_destination_mgr struct, fill in its +method pointers, and insert a pointer to the struct into the "dest" field of +the JPEG compression object. This can be done in-line in your setup code if +you like, but it's probably cleaner to provide a separate routine similar to +the jpeg_stdio_dest() routine of the supplied destination manager. + +Decompression source managers follow a parallel design, but with some +additional frammishes. The source manager struct contains a pointer and count +defining the next byte to read from the work buffer and the number of bytes +remaining: + + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + +The library increments the pointer and decrements the count until the buffer +is emptied. The manager's fill_input_buffer method must reset the pointer and +count. In most applications, the manager must remember the buffer's starting +address and total size in private fields not visible to the library. + +A data source manager provides five methods: + +init_source (j_decompress_ptr cinfo) + Initialize source. This is called by jpeg_read_header() before any + data is actually read. Unlike init_destination(), it may leave + bytes_in_buffer set to 0 (in which case a fill_input_buffer() call + will occur immediately). + +fill_input_buffer (j_decompress_ptr cinfo) + This is called whenever bytes_in_buffer has reached zero and more + data is wanted. In typical applications, it should read fresh data + into the buffer (ignoring the current state of next_input_byte and + bytes_in_buffer), reset the pointer & count to the start of the + buffer, and return TRUE indicating that the buffer has been reloaded. + It is not necessary to fill the buffer entirely, only to obtain at + least one more byte. bytes_in_buffer MUST be set to a positive value + if TRUE is returned. A FALSE return should only be used when I/O + suspension is desired (this mode is discussed in the next section). + +skip_input_data (j_decompress_ptr cinfo, long num_bytes) + Skip num_bytes worth of data. The buffer pointer and count should + be advanced over num_bytes input bytes, refilling the buffer as + needed. This is used to skip over a potentially large amount of + uninteresting data (such as an APPn marker). In some applications + it may be possible to optimize away the reading of the skipped data, + but it's not clear that being smart is worth much trouble; large + skips are uncommon. bytes_in_buffer may be zero on return. + A zero or negative skip count should be treated as a no-op. + +resync_to_restart (j_decompress_ptr cinfo, int desired) + This routine is called only when the decompressor has failed to find + a restart (RSTn) marker where one is expected. Its mission is to + find a suitable point for resuming decompression. For most + applications, we recommend that you just use the default resync + procedure, jpeg_resync_to_restart(). However, if you are able to back + up in the input data stream, or if you have a-priori knowledge about + the likely location of restart markers, you may be able to do better. + Read the read_restart_marker() and jpeg_resync_to_restart() routines + in jdmarker.c if you think you'd like to implement your own resync + procedure. + +term_source (j_decompress_ptr cinfo) + Terminate source --- called by jpeg_finish_decompress() after all + data has been read. Often a no-op. + +For both fill_input_buffer() and skip_input_data(), there is no such thing +as an EOF return. If the end of the file has been reached, the routine has +a choice of exiting via ERREXIT() or inserting fake data into the buffer. +In most cases, generating a warning message and inserting a fake EOI marker +is the best course of action --- this will allow the decompressor to output +however much of the image is there. In pathological cases, the decompressor +may swallow the EOI and again demand data ... just keep feeding it fake EOIs. +jdatasrc.c illustrates the recommended error recovery behavior. + +term_source() is NOT called by jpeg_abort() or jpeg_destroy(). If you want +the source manager to be cleaned up during an abort, you must do it yourself. + +You will also need code to create a jpeg_source_mgr struct, fill in its method +pointers, and insert a pointer to the struct into the "src" field of the JPEG +decompression object. This can be done in-line in your setup code if you +like, but it's probably cleaner to provide a separate routine similar to the +jpeg_stdio_src() routine of the supplied source manager. + +For more information, consult the stdio source and destination managers +in jdatasrc.c and jdatadst.c. + + +I/O suspension +-------------- + +Some applications need to use the JPEG library as an incremental memory-to- +memory filter: when the compressed data buffer is filled or emptied, they want +control to return to the outer loop, rather than expecting that the buffer can +be emptied or reloaded within the data source/destination manager subroutine. +The library supports this need by providing an "I/O suspension" mode, which we +describe in this section. + +The I/O suspension mode is not a panacea: nothing is guaranteed about the +maximum amount of time spent in any one call to the library, so it will not +eliminate response-time problems in single-threaded applications. If you +need guaranteed response time, we suggest you "bite the bullet" and implement +a real multi-tasking capability. + +To use I/O suspension, cooperation is needed between the calling application +and the data source or destination manager; you will always need a custom +source/destination manager. (Please read the previous section if you haven't +already.) The basic idea is that the empty_output_buffer() or +fill_input_buffer() routine is a no-op, merely returning FALSE to indicate +that it has done nothing. Upon seeing this, the JPEG library suspends +operation and returns to its caller. The surrounding application is +responsible for emptying or refilling the work buffer before calling the +JPEG library again. + +Compression suspension: + +For compression suspension, use an empty_output_buffer() routine that returns +FALSE; typically it will not do anything else. This will cause the +compressor to return to the caller of jpeg_write_scanlines(), with the return +value indicating that not all the supplied scanlines have been accepted. +The application must make more room in the output buffer, adjust the output +buffer pointer/count appropriately, and then call jpeg_write_scanlines() +again, pointing to the first unconsumed scanline. + +When forced to suspend, the compressor will backtrack to a convenient stopping +point (usually the start of the current MCU); it will regenerate some output +data when restarted. Therefore, although empty_output_buffer() is only +called when the buffer is filled, you should NOT write out the entire buffer +after a suspension. Write only the data up to the current position of +next_output_byte/free_in_buffer. The data beyond that point will be +regenerated after resumption. + +Because of the backtracking behavior, a good-size output buffer is essential +for efficiency; you don't want the compressor to suspend often. (In fact, an +overly small buffer could lead to infinite looping, if a single MCU required +more data than would fit in the buffer.) We recommend a buffer of at least +several Kbytes. You may want to insert explicit code to ensure that you don't +call jpeg_write_scanlines() unless there is a reasonable amount of space in +the output buffer; in other words, flush the buffer before trying to compress +more data. + +The compressor does not allow suspension while it is trying to write JPEG +markers at the beginning and end of the file. This means that: + * At the beginning of a compression operation, there must be enough free + space in the output buffer to hold the header markers (typically 600 or + so bytes). The recommended buffer size is bigger than this anyway, so + this is not a problem as long as you start with an empty buffer. However, + this restriction might catch you if you insert large special markers, such + as a JFIF thumbnail image, without flushing the buffer afterwards. + * When you call jpeg_finish_compress(), there must be enough space in the + output buffer to emit any buffered data and the final EOI marker. In the + current implementation, half a dozen bytes should suffice for this, but + for safety's sake we recommend ensuring that at least 100 bytes are free + before calling jpeg_finish_compress(). + +A more significant restriction is that jpeg_finish_compress() cannot suspend. +This means you cannot use suspension with multi-pass operating modes, namely +Huffman code optimization and multiple-scan output. Those modes write the +whole file during jpeg_finish_compress(), which will certainly result in +buffer overrun. (Note that this restriction applies only to compression, +not decompression. The decompressor supports input suspension in all of its +operating modes.) + +Decompression suspension: + +For decompression suspension, use a fill_input_buffer() routine that simply +returns FALSE (except perhaps during error recovery, as discussed below). +This will cause the decompressor to return to its caller with an indication +that suspension has occurred. This can happen at four places: + * jpeg_read_header(): will return JPEG_SUSPENDED. + * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE. + * jpeg_read_scanlines(): will return the number of scanlines already + completed (possibly 0). + * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE. +The surrounding application must recognize these cases, load more data into +the input buffer, and repeat the call. In the case of jpeg_read_scanlines(), +increment the passed pointers past any scanlines successfully read. + +Just as with compression, the decompressor will typically backtrack to a +convenient restart point before suspending. When fill_input_buffer() is +called, next_input_byte/bytes_in_buffer point to the current restart point, +which is where the decompressor will backtrack to if FALSE is returned. +The data beyond that position must NOT be discarded if you suspend; it needs +to be re-read upon resumption. In most implementations, you'll need to shift +this data down to the start of your work buffer and then load more data after +it. Again, this behavior means that a several-Kbyte work buffer is essential +for decent performance; furthermore, you should load a reasonable amount of +new data before resuming decompression. (If you loaded, say, only one new +byte each time around, you could waste a LOT of cycles.) + +The skip_input_data() source manager routine requires special care in a +suspension scenario. This routine is NOT granted the ability to suspend the +decompressor; it can decrement bytes_in_buffer to zero, but no more. If the +requested skip distance exceeds the amount of data currently in the input +buffer, then skip_input_data() must set bytes_in_buffer to zero and record the +additional skip distance somewhere else. The decompressor will immediately +call fill_input_buffer(), which should return FALSE, which will cause a +suspension return. The surrounding application must then arrange to discard +the recorded number of bytes before it resumes loading the input buffer. +(Yes, this design is rather baroque, but it avoids complexity in the far more +common case where a non-suspending source manager is used.) + +If the input data has been exhausted, we recommend that you emit a warning +and insert dummy EOI markers just as a non-suspending data source manager +would do. This can be handled either in the surrounding application logic or +within fill_input_buffer(); the latter is probably more efficient. If +fill_input_buffer() knows that no more data is available, it can set the +pointer/count to point to a dummy EOI marker and then return TRUE just as +though it had read more data in a non-suspending situation. + +The decompressor does not attempt to suspend within standard JPEG markers; +instead it will backtrack to the start of the marker and reprocess the whole +marker next time. Hence the input buffer must be large enough to hold the +longest standard marker in the file. Standard JPEG markers should normally +not exceed a few hundred bytes each (DHT tables are typically the longest). +We recommend at least a 2K buffer for performance reasons, which is much +larger than any correct marker is likely to be. For robustness against +damaged marker length counts, you may wish to insert a test in your +application for the case that the input buffer is completely full and yet +the decoder has suspended without consuming any data --- otherwise, if this +situation did occur, it would lead to an endless loop. (The library can't +provide this test since it has no idea whether "the buffer is full", or +even whether there is a fixed-size input buffer.) + +The input buffer would need to be 64K to allow for arbitrary COM or APPn +markers, but these are handled specially: they are either saved into allocated +memory, or skipped over by calling skip_input_data(). In the former case, +suspension is handled correctly, and in the latter case, the problem of +buffer overrun is placed on skip_input_data's shoulders, as explained above. +Note that if you provide your own marker handling routine for large markers, +you should consider how to deal with buffer overflow. + +Multiple-buffer management: + +In some applications it is desirable to store the compressed data in a linked +list of buffer areas, so as to avoid data copying. This can be handled by +having empty_output_buffer() or fill_input_buffer() set the pointer and count +to reference the next available buffer; FALSE is returned only if no more +buffers are available. Although seemingly straightforward, there is a +pitfall in this approach: the backtrack that occurs when FALSE is returned +could back up into an earlier buffer. For example, when fill_input_buffer() +is called, the current pointer & count indicate the backtrack restart point. +Since fill_input_buffer() will set the pointer and count to refer to a new +buffer, the restart position must be saved somewhere else. Suppose a second +call to fill_input_buffer() occurs in the same library call, and no +additional input data is available, so fill_input_buffer must return FALSE. +If the JPEG library has not moved the pointer/count forward in the current +buffer, then *the correct restart point is the saved position in the prior +buffer*. Prior buffers may be discarded only after the library establishes +a restart point within a later buffer. Similar remarks apply for output into +a chain of buffers. + +The library will never attempt to backtrack over a skip_input_data() call, +so any skipped data can be permanently discarded. You still have to deal +with the case of skipping not-yet-received data, however. + +It's much simpler to use only a single buffer; when fill_input_buffer() is +called, move any unconsumed data (beyond the current pointer/count) down to +the beginning of this buffer and then load new data into the remaining buffer +space. This approach requires a little more data copying but is far easier +to get right. + + +Progressive JPEG support +------------------------ + +Progressive JPEG rearranges the stored data into a series of scans of +increasing quality. In situations where a JPEG file is transmitted across a +slow communications link, a decoder can generate a low-quality image very +quickly from the first scan, then gradually improve the displayed quality as +more scans are received. The final image after all scans are complete is +identical to that of a regular (sequential) JPEG file of the same quality +setting. Progressive JPEG files are often slightly smaller than equivalent +sequential JPEG files, but the possibility of incremental display is the main +reason for using progressive JPEG. + +The IJG encoder library generates progressive JPEG files when given a +suitable "scan script" defining how to divide the data into scans. +Creation of progressive JPEG files is otherwise transparent to the encoder. +Progressive JPEG files can also be read transparently by the decoder library. +If the decoding application simply uses the library as defined above, it +will receive a final decoded image without any indication that the file was +progressive. Of course, this approach does not allow incremental display. +To perform incremental display, an application needs to use the decoder +library's "buffered-image" mode, in which it receives a decoded image +multiple times. + +Each displayed scan requires about as much work to decode as a full JPEG +image of the same size, so the decoder must be fairly fast in relation to the +data transmission rate in order to make incremental display useful. However, +it is possible to skip displaying the image and simply add the incoming bits +to the decoder's coefficient buffer. This is fast because only Huffman +decoding need be done, not IDCT, upsampling, colorspace conversion, etc. +The IJG decoder library allows the application to switch dynamically between +displaying the image and simply absorbing the incoming bits. A properly +coded application can automatically adapt the number of display passes to +suit the time available as the image is received. Also, a final +higher-quality display cycle can be performed from the buffered data after +the end of the file is reached. + +Progressive compression: + +To create a progressive JPEG file (or a multiple-scan sequential JPEG file), +set the scan_info cinfo field to point to an array of scan descriptors, and +perform compression as usual. Instead of constructing your own scan list, +you can call the jpeg_simple_progression() helper routine to create a +recommended progression sequence; this method should be used by all +applications that don't want to get involved in the nitty-gritty of +progressive scan sequence design. (If you want to provide user control of +scan sequences, you may wish to borrow the scan script reading code found +in rdswitch.c, so that you can read scan script files just like cjpeg's.) +When scan_info is not NULL, the compression library will store DCT'd data +into a buffer array as jpeg_write_scanlines() is called, and will emit all +the requested scans during jpeg_finish_compress(). This implies that +multiple-scan output cannot be created with a suspending data destination +manager, since jpeg_finish_compress() does not support suspension. We +should also note that the compressor currently forces Huffman optimization +mode when creating a progressive JPEG file, because the default Huffman +tables are unsuitable for progressive files. + +Progressive decompression: + +When buffered-image mode is not used, the decoder library will read all of +a multi-scan file during jpeg_start_decompress(), so that it can provide a +final decoded image. (Here "multi-scan" means either progressive or +multi-scan sequential.) This makes multi-scan files transparent to the +decoding application. However, existing applications that used suspending +input with version 5 of the IJG library will need to be modified to check +for a suspension return from jpeg_start_decompress(). + +To perform incremental display, an application must use the library's +buffered-image mode. This is described in the next section. + + +Buffered-image mode +------------------- + +In buffered-image mode, the library stores the partially decoded image in a +coefficient buffer, from which it can be read out as many times as desired. +This mode is typically used for incremental display of progressive JPEG files, +but it can be used with any JPEG file. Each scan of a progressive JPEG file +adds more data (more detail) to the buffered image. The application can +display in lockstep with the source file (one display pass per input scan), +or it can allow input processing to outrun display processing. By making +input and display processing run independently, it is possible for the +application to adapt progressive display to a wide range of data transmission +rates. + +The basic control flow for buffered-image decoding is + + jpeg_create_decompress() + set data source + jpeg_read_header() + set overall decompression parameters + cinfo.buffered_image = TRUE; /* select buffered-image mode */ + jpeg_start_decompress() + for (each output pass) { + adjust output decompression parameters if required + jpeg_start_output() /* start a new output pass */ + for (all scanlines in image) { + jpeg_read_scanlines() + display scanlines + } + jpeg_finish_output() /* terminate output pass */ + } + jpeg_finish_decompress() + jpeg_destroy_decompress() + +This differs from ordinary unbuffered decoding in that there is an additional +level of looping. The application can choose how many output passes to make +and how to display each pass. + +The simplest approach to displaying progressive images is to do one display +pass for each scan appearing in the input file. In this case the outer loop +condition is typically + while (! jpeg_input_complete(&cinfo)) +and the start-output call should read + jpeg_start_output(&cinfo, cinfo.input_scan_number); +The second parameter to jpeg_start_output() indicates which scan of the input +file is to be displayed; the scans are numbered starting at 1 for this +purpose. (You can use a loop counter starting at 1 if you like, but using +the library's input scan counter is easier.) The library automatically reads +data as necessary to complete each requested scan, and jpeg_finish_output() +advances to the next scan or end-of-image marker (hence input_scan_number +will be incremented by the time control arrives back at jpeg_start_output()). +With this technique, data is read from the input file only as needed, and +input and output processing run in lockstep. + +After reading the final scan and reaching the end of the input file, the +buffered image remains available; it can be read additional times by +repeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output() +sequence. For example, a useful technique is to use fast one-pass color +quantization for display passes made while the image is arriving, followed by +a final display pass using two-pass quantization for highest quality. This +is done by changing the library parameters before the final output pass. +Changing parameters between passes is discussed in detail below. + +In general the last scan of a progressive file cannot be recognized as such +until after it is read, so a post-input display pass is the best approach if +you want special processing in the final pass. + +When done with the image, be sure to call jpeg_finish_decompress() to release +the buffered image (or just use jpeg_destroy_decompress()). + +If input data arrives faster than it can be displayed, the application can +cause the library to decode input data in advance of what's needed to produce +output. This is done by calling the routine jpeg_consume_input(). +The return value is one of the following: + JPEG_REACHED_SOS: reached an SOS marker (the start of a new scan) + JPEG_REACHED_EOI: reached the EOI marker (end of image) + JPEG_ROW_COMPLETED: completed reading one MCU row of compressed data + JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan + JPEG_SUSPENDED: suspended before completing any of the above +(JPEG_SUSPENDED can occur only if a suspending data source is used.) This +routine can be called at any time after initializing the JPEG object. It +reads some additional data and returns when one of the indicated significant +events occurs. (If called after the EOI marker is reached, it will +immediately return JPEG_REACHED_EOI without attempting to read more data.) + +The library's output processing will automatically call jpeg_consume_input() +whenever the output processing overtakes the input; thus, simple lockstep +display requires no direct calls to jpeg_consume_input(). But by adding +calls to jpeg_consume_input(), you can absorb data in advance of what is +being displayed. This has two benefits: + * You can limit buildup of unprocessed data in your input buffer. + * You can eliminate extra display passes by paying attention to the + state of the library's input processing. + +The first of these benefits only requires interspersing calls to +jpeg_consume_input() with your display operations and any other processing +you may be doing. To avoid wasting cycles due to backtracking, it's best to +call jpeg_consume_input() only after a hundred or so new bytes have arrived. +This is discussed further under "I/O suspension", above. (Note: the JPEG +library currently is not thread-safe. You must not call jpeg_consume_input() +from one thread of control if a different library routine is working on the +same JPEG object in another thread.) + +When input arrives fast enough that more than one new scan is available +before you start a new output pass, you may as well skip the output pass +corresponding to the completed scan. This occurs for free if you pass +cinfo.input_scan_number as the target scan number to jpeg_start_output(). +The input_scan_number field is simply the index of the scan currently being +consumed by the input processor. You can ensure that this is up-to-date by +emptying the input buffer just before calling jpeg_start_output(): call +jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or +JPEG_REACHED_EOI. + +The target scan number passed to jpeg_start_output() is saved in the +cinfo.output_scan_number field. The library's output processing calls +jpeg_consume_input() whenever the current input scan number and row within +that scan is less than or equal to the current output scan number and row. +Thus, input processing can "get ahead" of the output processing but is not +allowed to "fall behind". You can achieve several different effects by +manipulating this interlock rule. For example, if you pass a target scan +number greater than the current input scan number, the output processor will +wait until that scan starts to arrive before producing any output. (To avoid +an infinite loop, the target scan number is automatically reset to the last +scan number when the end of image is reached. Thus, if you specify a large +target scan number, the library will just absorb the entire input file and +then perform an output pass. This is effectively the same as what +jpeg_start_decompress() does when you don't select buffered-image mode.) +When you pass a target scan number equal to the current input scan number, +the image is displayed no faster than the current input scan arrives. The +final possibility is to pass a target scan number less than the current input +scan number; this disables the input/output interlock and causes the output +processor to simply display whatever it finds in the image buffer, without +waiting for input. (However, the library will not accept a target scan +number less than one, so you can't avoid waiting for the first scan.) + +When data is arriving faster than the output display processing can advance +through the image, jpeg_consume_input() will store data into the buffered +image beyond the point at which the output processing is reading data out +again. If the input arrives fast enough, it may "wrap around" the buffer to +the point where the input is more than one whole scan ahead of the output. +If the output processing simply proceeds through its display pass without +paying attention to the input, the effect seen on-screen is that the lower +part of the image is one or more scans better in quality than the upper part. +Then, when the next output scan is started, you have a choice of what target +scan number to use. The recommended choice is to use the current input scan +number at that time, which implies that you've skipped the output scans +corresponding to the input scans that were completed while you processed the +previous output scan. In this way, the decoder automatically adapts its +speed to the arriving data, by skipping output scans as necessary to keep up +with the arriving data. + +When using this strategy, you'll want to be sure that you perform a final +output pass after receiving all the data; otherwise your last display may not +be full quality across the whole screen. So the right outer loop logic is +something like this: + do { + absorb any waiting input by calling jpeg_consume_input() + final_pass = jpeg_input_complete(&cinfo); + adjust output decompression parameters if required + jpeg_start_output(&cinfo, cinfo.input_scan_number); + ... + jpeg_finish_output() + } while (! final_pass); +rather than quitting as soon as jpeg_input_complete() returns TRUE. This +arrangement makes it simple to use higher-quality decoding parameters +for the final pass. But if you don't want to use special parameters for +the final pass, the right loop logic is like this: + for (;;) { + absorb any waiting input by calling jpeg_consume_input() + jpeg_start_output(&cinfo, cinfo.input_scan_number); + ... + jpeg_finish_output() + if (jpeg_input_complete(&cinfo) && + cinfo.input_scan_number == cinfo.output_scan_number) + break; + } +In this case you don't need to know in advance whether an output pass is to +be the last one, so it's not necessary to have reached EOF before starting +the final output pass; rather, what you want to test is whether the output +pass was performed in sync with the final input scan. This form of the loop +will avoid an extra output pass whenever the decoder is able (or nearly able) +to keep up with the incoming data. + +When the data transmission speed is high, you might begin a display pass, +then find that much or all of the file has arrived before you can complete +the pass. (You can detect this by noting the JPEG_REACHED_EOI return code +from jpeg_consume_input(), or equivalently by testing jpeg_input_complete().) +In this situation you may wish to abort the current display pass and start a +new one using the newly arrived information. To do so, just call +jpeg_finish_output() and then start a new pass with jpeg_start_output(). + +A variant strategy is to abort and restart display if more than one complete +scan arrives during an output pass; this can be detected by noting +JPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number. This +idea should be employed with caution, however, since the display process +might never get to the bottom of the image before being aborted, resulting +in the lower part of the screen being several passes worse than the upper. +In most cases it's probably best to abort an output pass only if the whole +file has arrived and you want to begin the final output pass immediately. + +When receiving data across a communication link, we recommend always using +the current input scan number for the output target scan number; if a +higher-quality final pass is to be done, it should be started (aborting any +incomplete output pass) as soon as the end of file is received. However, +many other strategies are possible. For example, the application can examine +the parameters of the current input scan and decide whether to display it or +not. If the scan contains only chroma data, one might choose not to use it +as the target scan, expecting that the scan will be small and will arrive +quickly. To skip to the next scan, call jpeg_consume_input() until it +returns JPEG_REACHED_SOS or JPEG_REACHED_EOI. Or just use the next higher +number as the target scan for jpeg_start_output(); but that method doesn't +let you inspect the next scan's parameters before deciding to display it. + + +In buffered-image mode, jpeg_start_decompress() never performs input and +thus never suspends. An application that uses input suspension with +buffered-image mode must be prepared for suspension returns from these +routines: +* jpeg_start_output() performs input only if you request 2-pass quantization + and the target scan isn't fully read yet. (This is discussed below.) +* jpeg_read_scanlines(), as always, returns the number of scanlines that it + was able to produce before suspending. +* jpeg_finish_output() will read any markers following the target scan, + up to the end of the file or the SOS marker that begins another scan. + (But it reads no input if jpeg_consume_input() has already reached the + end of the file or a SOS marker beyond the target output scan.) +* jpeg_finish_decompress() will read until the end of file, and thus can + suspend if the end hasn't already been reached (as can be tested by + calling jpeg_input_complete()). +jpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress() +all return TRUE if they completed their tasks, FALSE if they had to suspend. +In the event of a FALSE return, the application must load more input data +and repeat the call. Applications that use non-suspending data sources need +not check the return values of these three routines. + + +It is possible to change decoding parameters between output passes in the +buffered-image mode. The decoder library currently supports only very +limited changes of parameters. ONLY THE FOLLOWING parameter changes are +allowed after jpeg_start_decompress() is called: +* dct_method can be changed before each call to jpeg_start_output(). + For example, one could use a fast DCT method for early scans, changing + to a higher quality method for the final scan. +* dither_mode can be changed before each call to jpeg_start_output(); + of course this has no impact if not using color quantization. Typically + one would use ordered dither for initial passes, then switch to + Floyd-Steinberg dither for the final pass. Caution: changing dither mode + can cause more memory to be allocated by the library. Although the amount + of memory involved is not large (a scanline or so), it may cause the + initial max_memory_to_use specification to be exceeded, which in the worst + case would result in an out-of-memory failure. +* do_block_smoothing can be changed before each call to jpeg_start_output(). + This setting is relevant only when decoding a progressive JPEG image. + During the first DC-only scan, block smoothing provides a very "fuzzy" look + instead of the very "blocky" look seen without it; which is better seems a + matter of personal taste. But block smoothing is nearly always a win + during later stages, especially when decoding a successive-approximation + image: smoothing helps to hide the slight blockiness that otherwise shows + up on smooth gradients until the lowest coefficient bits are sent. +* Color quantization mode can be changed under the rules described below. + You *cannot* change between full-color and quantized output (because that + would alter the required I/O buffer sizes), but you can change which + quantization method is used. + +When generating color-quantized output, changing quantization method is a +very useful way of switching between high-speed and high-quality display. +The library allows you to change among its three quantization methods: +1. Single-pass quantization to a fixed color cube. + Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL. +2. Single-pass quantization to an application-supplied colormap. + Selected by setting cinfo.colormap to point to the colormap (the value of + two_pass_quantize is ignored); also set cinfo.actual_number_of_colors. +3. Two-pass quantization to a colormap chosen specifically for the image. + Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL. + (This is the default setting selected by jpeg_read_header, but it is + probably NOT what you want for the first pass of progressive display!) +These methods offer successively better quality and lesser speed. However, +only the first method is available for quantizing in non-RGB color spaces. + +IMPORTANT: because the different quantizer methods have very different +working-storage requirements, the library requires you to indicate which +one(s) you intend to use before you call jpeg_start_decompress(). (If we did +not require this, the max_memory_to_use setting would be a complete fiction.) +You do this by setting one or more of these three cinfo fields to TRUE: + enable_1pass_quant Fixed color cube colormap + enable_external_quant Externally-supplied colormap + enable_2pass_quant Two-pass custom colormap +All three are initialized FALSE by jpeg_read_header(). But +jpeg_start_decompress() automatically sets TRUE the one selected by the +current two_pass_quantize and colormap settings, so you only need to set the +enable flags for any other quantization methods you plan to change to later. + +After setting the enable flags correctly at jpeg_start_decompress() time, you +can change to any enabled quantization method by setting two_pass_quantize +and colormap properly just before calling jpeg_start_output(). The following +special rules apply: +1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass + or 2-pass mode from a different mode, or when you want the 2-pass + quantizer to be re-run to generate a new colormap. +2. To switch to an external colormap, or to change to a different external + colormap than was used on the prior pass, you must call + jpeg_new_colormap() after setting cinfo.colormap. +NOTE: if you want to use the same colormap as was used in the prior pass, +you should not do either of these things. This will save some nontrivial +switchover costs. +(These requirements exist because cinfo.colormap will always be non-NULL +after completing a prior output pass, since both the 1-pass and 2-pass +quantizers set it to point to their output colormaps. Thus you have to +do one of these two things to notify the library that something has changed. +Yup, it's a bit klugy, but it's necessary to do it this way for backwards +compatibility.) + +Note that in buffered-image mode, the library generates any requested colormap +during jpeg_start_output(), not during jpeg_start_decompress(). + +When using two-pass quantization, jpeg_start_output() makes a pass over the +buffered image to determine the optimum color map; it therefore may take a +significant amount of time, whereas ordinarily it does little work. The +progress monitor hook is called during this pass, if defined. It is also +important to realize that if the specified target scan number is greater than +or equal to the current input scan number, jpeg_start_output() will attempt +to consume input as it makes this pass. If you use a suspending data source, +you need to check for a FALSE return from jpeg_start_output() under these +conditions. The combination of 2-pass quantization and a not-yet-fully-read +target scan is the only case in which jpeg_start_output() will consume input. + + +Application authors who support buffered-image mode may be tempted to use it +for all JPEG images, even single-scan ones. This will work, but it is +inefficient: there is no need to create an image-sized coefficient buffer for +single-scan images. Requesting buffered-image mode for such an image wastes +memory. Worse, it can cost time on large images, since the buffered data has +to be swapped out or written to a temporary file. If you are concerned about +maximum performance on baseline JPEG files, you should use buffered-image +mode only when the incoming file actually has multiple scans. This can be +tested by calling jpeg_has_multiple_scans(), which will return a correct +result at any time after jpeg_read_header() completes. + +It is also worth noting that when you use jpeg_consume_input() to let input +processing get ahead of output processing, the resulting pattern of access to +the coefficient buffer is quite nonsequential. It's best to use the memory +manager jmemnobs.c if you can (ie, if you have enough real or virtual main +memory). If not, at least make sure that max_memory_to_use is set as high as +possible. If the JPEG memory manager has to use a temporary file, you will +probably see a lot of disk traffic and poor performance. (This could be +improved with additional work on the memory manager, but we haven't gotten +around to it yet.) + +In some applications it may be convenient to use jpeg_consume_input() for all +input processing, including reading the initial markers; that is, you may +wish to call jpeg_consume_input() instead of jpeg_read_header() during +startup. This works, but note that you must check for JPEG_REACHED_SOS and +JPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes. +Once the first SOS marker has been reached, you must call +jpeg_start_decompress() before jpeg_consume_input() will consume more input; +it'll just keep returning JPEG_REACHED_SOS until you do. If you read a +tables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI +without ever returning JPEG_REACHED_SOS; be sure to check for this case. +If this happens, the decompressor will not read any more input until you call +jpeg_abort() to reset it. It is OK to call jpeg_consume_input() even when not +using buffered-image mode, but in that case it's basically a no-op after the +initial markers have been read: it will just return JPEG_SUSPENDED. + + +Abbreviated datastreams and multiple images +------------------------------------------- + +A JPEG compression or decompression object can be reused to process multiple +images. This saves a small amount of time per image by eliminating the +"create" and "destroy" operations, but that isn't the real purpose of the +feature. Rather, reuse of an object provides support for abbreviated JPEG +datastreams. Object reuse can also simplify processing a series of images in +a single input or output file. This section explains these features. + +A JPEG file normally contains several hundred bytes worth of quantization +and Huffman tables. In a situation where many images will be stored or +transmitted with identical tables, this may represent an annoying overhead. +The JPEG standard therefore permits tables to be omitted. The standard +defines three classes of JPEG datastreams: + * "Interchange" datastreams contain an image and all tables needed to decode + the image. These are the usual kind of JPEG file. + * "Abbreviated image" datastreams contain an image, but are missing some or + all of the tables needed to decode that image. + * "Abbreviated table specification" (henceforth "tables-only") datastreams + contain only table specifications. +To decode an abbreviated image, it is necessary to load the missing table(s) +into the decoder beforehand. This can be accomplished by reading a separate +tables-only file. A variant scheme uses a series of images in which the first +image is an interchange (complete) datastream, while subsequent ones are +abbreviated and rely on the tables loaded by the first image. It is assumed +that once the decoder has read a table, it will remember that table until a +new definition for the same table number is encountered. + +It is the application designer's responsibility to figure out how to associate +the correct tables with an abbreviated image. While abbreviated datastreams +can be useful in a closed environment, their use is strongly discouraged in +any situation where data exchange with other applications might be needed. +Caveat designer. + +The JPEG library provides support for reading and writing any combination of +tables-only datastreams and abbreviated images. In both compression and +decompression objects, a quantization or Huffman table will be retained for +the lifetime of the object, unless it is overwritten by a new table definition. + + +To create abbreviated image datastreams, it is only necessary to tell the +compressor not to emit some or all of the tables it is using. Each +quantization and Huffman table struct contains a boolean field "sent_table", +which normally is initialized to FALSE. For each table used by the image, the +header-writing process emits the table and sets sent_table = TRUE unless it is +already TRUE. (In normal usage, this prevents outputting the same table +definition multiple times, as would otherwise occur because the chroma +components typically share tables.) Thus, setting this field to TRUE before +calling jpeg_start_compress() will prevent the table from being written at +all. + +If you want to create a "pure" abbreviated image file containing no tables, +just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the +tables. If you want to emit some but not all tables, you'll need to set the +individual sent_table fields directly. + +To create an abbreviated image, you must also call jpeg_start_compress() +with a second parameter of FALSE, not TRUE. Otherwise jpeg_start_compress() +will force all the sent_table fields to FALSE. (This is a safety feature to +prevent abbreviated images from being created accidentally.) + +To create a tables-only file, perform the same parameter setup that you +normally would, but instead of calling jpeg_start_compress() and so on, call +jpeg_write_tables(&cinfo). This will write an abbreviated datastream +containing only SOI, DQT and/or DHT markers, and EOI. All the quantization +and Huffman tables that are currently defined in the compression object will +be emitted unless their sent_tables flag is already TRUE, and then all the +sent_tables flags will be set TRUE. + +A sure-fire way to create matching tables-only and abbreviated image files +is to proceed as follows: + + create JPEG compression object + set JPEG parameters + set destination to tables-only file + jpeg_write_tables(&cinfo); + set destination to image file + jpeg_start_compress(&cinfo, FALSE); + write data... + jpeg_finish_compress(&cinfo); + +Since the JPEG parameters are not altered between writing the table file and +the abbreviated image file, the same tables are sure to be used. Of course, +you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence +many times to produce many abbreviated image files matching the table file. + +You cannot suppress output of the computed Huffman tables when Huffman +optimization is selected. (If you could, there'd be no way to decode the +image...) Generally, you don't want to set optimize_coding = TRUE when +you are trying to produce abbreviated files. + +In some cases you might want to compress an image using tables which are +not stored in the application, but are defined in an interchange or +tables-only file readable by the application. This can be done by setting up +a JPEG decompression object to read the specification file, then copying the +tables into your compression object. See jpeg_copy_critical_parameters() +for an example of copying quantization tables. + + +To read abbreviated image files, you simply need to load the proper tables +into the decompression object before trying to read the abbreviated image. +If the proper tables are stored in the application program, you can just +allocate the table structs and fill in their contents directly. For example, +to load a fixed quantization table into table slot "n": + + if (cinfo.quant_tbl_ptrs[n] == NULL) + cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo); + quant_ptr = cinfo.quant_tbl_ptrs[n]; /* quant_ptr is JQUANT_TBL* */ + for (i = 0; i < 64; i++) { + /* Qtable[] is desired quantization table, in natural array order */ + quant_ptr->quantval[i] = Qtable[i]; + } + +Code to load a fixed Huffman table is typically (for AC table "n"): + + if (cinfo.ac_huff_tbl_ptrs[n] == NULL) + cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo); + huff_ptr = cinfo.ac_huff_tbl_ptrs[n]; /* huff_ptr is JHUFF_TBL* */ + for (i = 1; i <= 16; i++) { + /* counts[i] is number of Huffman codes of length i bits, i=1..16 */ + huff_ptr->bits[i] = counts[i]; + } + for (i = 0; i < 256; i++) { + /* symbols[] is the list of Huffman symbols, in code-length order */ + huff_ptr->huffval[i] = symbols[i]; + } + +(Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a +constant JQUANT_TBL object is not safe. If the incoming file happened to +contain a quantization table definition, your master table would get +overwritten! Instead allocate a working table copy and copy the master table +into it, as illustrated above. Ditto for Huffman tables, of course.) + +You might want to read the tables from a tables-only file, rather than +hard-wiring them into your application. The jpeg_read_header() call is +sufficient to read a tables-only file. You must pass a second parameter of +FALSE to indicate that you do not require an image to be present. Thus, the +typical scenario is + + create JPEG decompression object + set source to tables-only file + jpeg_read_header(&cinfo, FALSE); + set source to abbreviated image file + jpeg_read_header(&cinfo, TRUE); + set decompression parameters + jpeg_start_decompress(&cinfo); + read data... + jpeg_finish_decompress(&cinfo); + +In some cases, you may want to read a file without knowing whether it contains +an image or just tables. In that case, pass FALSE and check the return value +from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found, +JPEG_HEADER_TABLES_ONLY if only tables were found. (A third return value, +JPEG_SUSPENDED, is possible when using a suspending data source manager.) +Note that jpeg_read_header() will not complain if you read an abbreviated +image for which you haven't loaded the missing tables; the missing-table check +occurs later, in jpeg_start_decompress(). + + +It is possible to read a series of images from a single source file by +repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence, +without releasing/recreating the JPEG object or the data source module. +(If you did reinitialize, any partial bufferload left in the data source +buffer at the end of one image would be discarded, causing you to lose the +start of the next image.) When you use this method, stored tables are +automatically carried forward, so some of the images can be abbreviated images +that depend on tables from earlier images. + +If you intend to write a series of images into a single destination file, +you might want to make a specialized data destination module that doesn't +flush the output buffer at term_destination() time. This would speed things +up by some trifling amount. Of course, you'd need to remember to flush the +buffer after the last image. You can make the later images be abbreviated +ones by passing FALSE to jpeg_start_compress(). + + +Special markers +--------------- + +Some applications may need to insert or extract special data in the JPEG +datastream. The JPEG standard provides marker types "COM" (comment) and +"APP0" through "APP15" (application) to hold application-specific data. +Unfortunately, the use of these markers is not specified by the standard. +COM markers are fairly widely used to hold user-supplied text. The JFIF file +format spec uses APP0 markers with specified initial strings to hold certain +data. Adobe applications use APP14 markers beginning with the string "Adobe" +for miscellaneous data. Other APPn markers are rarely seen, but might +contain almost anything. + +If you wish to store user-supplied text, we recommend you use COM markers +and place readable 7-bit ASCII text in them. Newline conventions are not +standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR +(Mac style). A robust COM reader should be able to cope with random binary +garbage, including nulls, since some applications generate COM markers +containing non-ASCII junk. (But yours should not be one of them.) + +For program-supplied data, use an APPn marker, and be sure to begin it with an +identifying string so that you can tell whether the marker is actually yours. +It's probably best to avoid using APP0 or APP14 for any private markers. +(NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you +not use APP8 markers for any private purposes, either.) + +Keep in mind that at most 65533 bytes can be put into one marker, but you +can have as many markers as you like. + +By default, the IJG compression library will write a JFIF APP0 marker if the +selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if +the selected colorspace is RGB, CMYK, or YCCK. You can disable this, but +we don't recommend it. The decompression library will recognize JFIF and +Adobe markers and will set the JPEG colorspace properly when one is found. + + +You can write special markers immediately following the datastream header by +calling jpeg_write_marker() after jpeg_start_compress() and before the first +call to jpeg_write_scanlines(). When you do this, the markers appear after +the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before +all else. Specify the marker type parameter as "JPEG_COM" for COM or +"JPEG_APP0 + n" for APPn. (Actually, jpeg_write_marker will let you write +any marker type, but we don't recommend writing any other kinds of marker.) +For example, to write a user comment string pointed to by comment_text: + jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text)); + +If it's not convenient to store all the marker data in memory at once, +you can instead call jpeg_write_m_header() followed by multiple calls to +jpeg_write_m_byte(). If you do it this way, it's your responsibility to +call jpeg_write_m_byte() exactly the number of times given in the length +parameter to jpeg_write_m_header(). (This method lets you empty the +output buffer partway through a marker, which might be important when +using a suspending data destination module. In any case, if you are using +a suspending destination, you should flush its buffer after inserting +any special markers. See "I/O suspension".) + +Or, if you prefer to synthesize the marker byte sequence yourself, +you can just cram it straight into the data destination module. + +If you are writing JFIF 1.02 extension markers (thumbnail images), don't +forget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the +correct JFIF version number in the JFIF header marker. The library's default +is to write version 1.01, but that's wrong if you insert any 1.02 extension +markers. (We could probably get away with just defaulting to 1.02, but there +used to be broken decoders that would complain about unknown minor version +numbers. To reduce compatibility risks it's safest not to write 1.02 unless +you are actually using 1.02 extensions.) + + +When reading, two methods of handling special markers are available: +1. You can ask the library to save the contents of COM and/or APPn markers +into memory, and then examine them at your leisure afterwards. +2. You can supply your own routine to process COM and/or APPn markers +on-the-fly as they are read. +The first method is simpler to use, especially if you are using a suspending +data source; writing a marker processor that copes with input suspension is +not easy (consider what happens if the marker is longer than your available +input buffer). However, the second method conserves memory since the marker +data need not be kept around after it's been processed. + +For either method, you'd normally set up marker handling after creating a +decompression object and before calling jpeg_read_header(), because the +markers of interest will typically be near the head of the file and so will +be scanned by jpeg_read_header. Once you've established a marker handling +method, it will be used for the life of that decompression object +(potentially many datastreams), unless you change it. Marker handling is +determined separately for COM markers and for each APPn marker code. + + +To save the contents of special markers in memory, call + jpeg_save_markers(cinfo, marker_code, length_limit) +where marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n. +(To arrange to save all the special marker types, you need to call this +routine 17 times, for COM and APP0-APP15.) If the incoming marker is longer +than length_limit data bytes, only length_limit bytes will be saved; this +parameter allows you to avoid chewing up memory when you only need to see the +first few bytes of a potentially large marker. If you want to save all the +data, set length_limit to 0xFFFF; that is enough since marker lengths are only +16 bits. As a special case, setting length_limit to 0 prevents that marker +type from being saved at all. (That is the default behavior, in fact.) + +After jpeg_read_header() completes, you can examine the special markers by +following the cinfo->marker_list pointer chain. All the special markers in +the file appear in this list, in order of their occurrence in the file (but +omitting any markers of types you didn't ask for). Both the original data +length and the saved data length are recorded for each list entry; the latter +will not exceed length_limit for the particular marker type. Note that these +lengths exclude the marker length word, whereas the stored representation +within the JPEG file includes it. (Hence the maximum data length is really +only 65533.) + +It is possible that additional special markers appear in the file beyond the +SOS marker at which jpeg_read_header stops; if so, the marker list will be +extended during reading of the rest of the file. This is not expected to be +common, however. If you are short on memory you may want to reset the length +limit to zero for all marker types after finishing jpeg_read_header, to +ensure that the max_memory_to_use setting cannot be exceeded due to addition +of later markers. + +The marker list remains stored until you call jpeg_finish_decompress or +jpeg_abort, at which point the memory is freed and the list is set to empty. +(jpeg_destroy also releases the storage, of course.) + +Note that the library is internally interested in APP0 and APP14 markers; +if you try to set a small nonzero length limit on these types, the library +will silently force the length up to the minimum it wants. (But you can set +a zero length limit to prevent them from being saved at all.) Also, in a +16-bit environment, the maximum length limit may be constrained to less than +65533 by malloc() limitations. It is therefore best not to assume that the +effective length limit is exactly what you set it to be. + + +If you want to supply your own marker-reading routine, you do it by calling +jpeg_set_marker_processor(). A marker processor routine must have the +signature + boolean jpeg_marker_parser_method (j_decompress_ptr cinfo) +Although the marker code is not explicitly passed, the routine can find it +in cinfo->unread_marker. At the time of call, the marker proper has been +read from the data source module. The processor routine is responsible for +reading the marker length word and the remaining parameter bytes, if any. +Return TRUE to indicate success. (FALSE should be returned only if you are +using a suspending data source and it tells you to suspend. See the standard +marker processors in jdmarker.c for appropriate coding methods if you need to +use a suspending data source.) + +If you override the default APP0 or APP14 processors, it is up to you to +recognize JFIF and Adobe markers if you want colorspace recognition to occur +properly. We recommend copying and extending the default processors if you +want to do that. (A better idea is to save these marker types for later +examination by calling jpeg_save_markers(); that method doesn't interfere +with the library's own processing of these markers.) + +jpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive +--- if you call one it overrides any previous call to the other, for the +particular marker type specified. + +A simple example of an external COM processor can be found in djpeg.c. +Also, see jpegtran.c for an example of using jpeg_save_markers. + + +Raw (downsampled) image data +---------------------------- + +Some applications need to supply already-downsampled image data to the JPEG +compressor, or to receive raw downsampled data from the decompressor. The +library supports this requirement by allowing the application to write or +read raw data, bypassing the normal preprocessing or postprocessing steps. +The interface is different from the standard one and is somewhat harder to +use. If your interest is merely in bypassing color conversion, we recommend +that you use the standard interface and simply set jpeg_color_space = +in_color_space (or jpeg_color_space = out_color_space for decompression). +The mechanism described in this section is necessary only to supply or +receive downsampled image data, in which not all components have the same +dimensions. + + +To compress raw data, you must supply the data in the colorspace to be used +in the JPEG file (please read the earlier section on Special color spaces) +and downsampled to the sampling factors specified in the JPEG parameters. +You must supply the data in the format used internally by the JPEG library, +namely a JSAMPIMAGE array. This is an array of pointers to two-dimensional +arrays, each of type JSAMPARRAY. Each 2-D array holds the values for one +color component. This structure is necessary since the components are of +different sizes. If the image dimensions are not a multiple of the MCU size, +you must also pad the data correctly (usually, this is done by replicating +the last column and/or row). The data must be padded to a multiple of a DCT +block in each component: that is, each downsampled row must contain a +multiple of 8 valid samples, and there must be a multiple of 8 sample rows +for each component. (For applications such as conversion of digital TV +images, the standard image size is usually a multiple of the DCT block size, +so that no padding need actually be done.) + +The procedure for compression of raw data is basically the same as normal +compression, except that you call jpeg_write_raw_data() in place of +jpeg_write_scanlines(). Before calling jpeg_start_compress(), you must do +the following: + * Set cinfo->raw_data_in to TRUE. (It is set FALSE by jpeg_set_defaults().) + This notifies the library that you will be supplying raw data. + Furthermore, set cinfo->do_fancy_downsampling to FALSE if you want to use + real downsampled data. (It is set TRUE by jpeg_set_defaults().) + * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace() + call is a good idea. Note that since color conversion is bypassed, + in_color_space is ignored, except that jpeg_set_defaults() uses it to + choose the default jpeg_color_space setting. + * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and + cinfo->comp_info[i].v_samp_factor, are correct. Since these indicate the + dimensions of the data you are supplying, it's wise to set them + explicitly, rather than assuming the library's defaults are what you want. + +To pass raw data to the library, call jpeg_write_raw_data() in place of +jpeg_write_scanlines(). The two routines work similarly except that +jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY. +The scanlines count passed to and returned from jpeg_write_raw_data is +measured in terms of the component with the largest v_samp_factor. + +jpeg_write_raw_data() processes one MCU row per call, which is to say +v_samp_factor*DCTSIZE sample rows of each component. The passed num_lines +value must be at least max_v_samp_factor*DCTSIZE, and the return value will +be exactly that amount (or possibly some multiple of that amount, in future +library versions). This is true even on the last call at the bottom of the +image; don't forget to pad your data as necessary. + +The required dimensions of the supplied data can be computed for each +component as + cinfo->comp_info[i].width_in_blocks*DCTSIZE samples per row + cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image +after jpeg_start_compress() has initialized those fields. If the valid data +is smaller than this, it must be padded appropriately. For some sampling +factors and image sizes, additional dummy DCT blocks are inserted to make +the image a multiple of the MCU dimensions. The library creates such dummy +blocks itself; it does not read them from your supplied data. Therefore you +need never pad by more than DCTSIZE samples. An example may help here. +Assume 2h2v downsampling of YCbCr data, that is + cinfo->comp_info[0].h_samp_factor = 2 for Y + cinfo->comp_info[0].v_samp_factor = 2 + cinfo->comp_info[1].h_samp_factor = 1 for Cb + cinfo->comp_info[1].v_samp_factor = 1 + cinfo->comp_info[2].h_samp_factor = 1 for Cr + cinfo->comp_info[2].v_samp_factor = 1 +and suppose that the nominal image dimensions (cinfo->image_width and +cinfo->image_height) are 101x101 pixels. Then jpeg_start_compress() will +compute downsampled_width = 101 and width_in_blocks = 13 for Y, +downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same +for the height fields). You must pad the Y data to at least 13*8 = 104 +columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows. The +MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16 +scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual +sample rows of Y and 8 each of Cb and Cr. A total of 7 MCU rows are needed, +so you must pass a total of 7*16 = 112 "scanlines". The last DCT block row +of Y data is dummy, so it doesn't matter what you pass for it in the data +arrays, but the scanlines count must total up to 112 so that all of the Cb +and Cr data gets passed. + +Output suspension is supported with raw-data compression: if the data +destination module suspends, jpeg_write_raw_data() will return 0. +In this case the same data rows must be passed again on the next call. + + +Decompression with raw data output implies bypassing all postprocessing. +You must deal with the color space and sampling factors present in the +incoming file. If your application only handles, say, 2h1v YCbCr data, +you must check for and fail on other color spaces or other sampling factors. +The library will not convert to a different color space for you. + +To obtain raw data output, set cinfo->raw_data_out = TRUE before +jpeg_start_decompress() (it is set FALSE by jpeg_read_header()). Be sure to +verify that the color space and sampling factors are ones you can handle. +Furthermore, set cinfo->do_fancy_upsampling = FALSE if you want to get real +downsampled data (it is set TRUE by jpeg_read_header()). +Then call jpeg_read_raw_data() in place of jpeg_read_scanlines(). The +decompression process is otherwise the same as usual. + +jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a +buffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is +the same as for raw-data compression). The buffer you pass must be large +enough to hold the actual data plus padding to DCT-block boundaries. As with +compression, any entirely dummy DCT blocks are not processed so you need not +allocate space for them, but the total scanline count includes them. The +above example of computing buffer dimensions for raw-data compression is +equally valid for decompression. + +Input suspension is supported with raw-data decompression: if the data source +module suspends, jpeg_read_raw_data() will return 0. You can also use +buffered-image mode to read raw data in multiple passes. + + +Really raw data: DCT coefficients +--------------------------------- + +It is possible to read or write the contents of a JPEG file as raw DCT +coefficients. This facility is mainly intended for use in lossless +transcoding between different JPEG file formats. Other possible applications +include lossless cropping of a JPEG image, lossless reassembly of a +multi-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc. + +To read the contents of a JPEG file as DCT coefficients, open the file and do +jpeg_read_header() as usual. But instead of calling jpeg_start_decompress() +and jpeg_read_scanlines(), call jpeg_read_coefficients(). This will read the +entire image into a set of virtual coefficient-block arrays, one array per +component. The return value is a pointer to an array of virtual-array +descriptors. Each virtual array can be accessed directly using the JPEG +memory manager's access_virt_barray method (see Memory management, below, +and also read structure.txt's discussion of virtual array handling). Or, +for simple transcoding to a different JPEG file format, the array list can +just be handed directly to jpeg_write_coefficients(). + +Each block in the block arrays contains quantized coefficient values in +normal array order (not JPEG zigzag order). The block arrays contain only +DCT blocks containing real data; any entirely-dummy blocks added to fill out +interleaved MCUs at the right or bottom edges of the image are discarded +during reading and are not stored in the block arrays. (The size of each +block array can be determined from the width_in_blocks and height_in_blocks +fields of the component's comp_info entry.) This is also the data format +expected by jpeg_write_coefficients(). + +When you are done using the virtual arrays, call jpeg_finish_decompress() +to release the array storage and return the decompression object to an idle +state; or just call jpeg_destroy() if you don't need to reuse the object. + +If you use a suspending data source, jpeg_read_coefficients() will return +NULL if it is forced to suspend; a non-NULL return value indicates successful +completion. You need not test for a NULL return value when using a +non-suspending data source. + +It is also possible to call jpeg_read_coefficients() to obtain access to the +decoder's coefficient arrays during a normal decode cycle in buffered-image +mode. This frammish might be useful for progressively displaying an incoming +image and then re-encoding it without loss. To do this, decode in buffered- +image mode as discussed previously, then call jpeg_read_coefficients() after +the last jpeg_finish_output() call. The arrays will be available for your use +until you call jpeg_finish_decompress(). + + +To write the contents of a JPEG file as DCT coefficients, you must provide +the DCT coefficients stored in virtual block arrays. You can either pass +block arrays read from an input JPEG file by jpeg_read_coefficients(), or +allocate virtual arrays from the JPEG compression object and fill them +yourself. In either case, jpeg_write_coefficients() is substituted for +jpeg_start_compress() and jpeg_write_scanlines(). Thus the sequence is + * Create compression object + * Set all compression parameters as necessary + * Request virtual arrays if needed + * jpeg_write_coefficients() + * jpeg_finish_compress() + * Destroy or re-use compression object +jpeg_write_coefficients() is passed a pointer to an array of virtual block +array descriptors; the number of arrays is equal to cinfo.num_components. + +The virtual arrays need only have been requested, not realized, before +jpeg_write_coefficients() is called. A side-effect of +jpeg_write_coefficients() is to realize any virtual arrays that have been +requested from the compression object's memory manager. Thus, when obtaining +the virtual arrays from the compression object, you should fill the arrays +after calling jpeg_write_coefficients(). The data is actually written out +when you call jpeg_finish_compress(); jpeg_write_coefficients() only writes +the file header. + +When writing raw DCT coefficients, it is crucial that the JPEG quantization +tables and sampling factors match the way the data was encoded, or the +resulting file will be invalid. For transcoding from an existing JPEG file, +we recommend using jpeg_copy_critical_parameters(). This routine initializes +all the compression parameters to default values (like jpeg_set_defaults()), +then copies the critical information from a source decompression object. +The decompression object should have just been used to read the entire +JPEG input file --- that is, it should be awaiting jpeg_finish_decompress(). + +jpeg_write_coefficients() marks all tables stored in the compression object +as needing to be written to the output file (thus, it acts like +jpeg_start_compress(cinfo, TRUE)). This is for safety's sake, to avoid +emitting abbreviated JPEG files by accident. If you really want to emit an +abbreviated JPEG file, call jpeg_suppress_tables(), or set the tables' +individual sent_table flags, between calling jpeg_write_coefficients() and +jpeg_finish_compress(). + + +Progress monitoring +------------------- + +Some applications may need to regain control from the JPEG library every so +often. The typical use of this feature is to produce a percent-done bar or +other progress display. (For a simple example, see cjpeg.c or djpeg.c.) +Although you do get control back frequently during the data-transferring pass +(the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes +will occur inside jpeg_finish_compress or jpeg_start_decompress; those +routines may take a long time to execute, and you don't get control back +until they are done. + +You can define a progress-monitor routine which will be called periodically +by the library. No guarantees are made about how often this call will occur, +so we don't recommend you use it for mouse tracking or anything like that. +At present, a call will occur once per MCU row, scanline, or sample row +group, whichever unit is convenient for the current processing mode; so the +wider the image, the longer the time between calls. During the data +transferring pass, only one call occurs per call of jpeg_read_scanlines or +jpeg_write_scanlines, so don't pass a large number of scanlines at once if +you want fine resolution in the progress count. (If you really need to use +the callback mechanism for time-critical tasks like mouse tracking, you could +insert additional calls inside some of the library's inner loops.) + +To establish a progress-monitor callback, create a struct jpeg_progress_mgr, +fill in its progress_monitor field with a pointer to your callback routine, +and set cinfo->progress to point to the struct. The callback will be called +whenever cinfo->progress is non-NULL. (This pointer is set to NULL by +jpeg_create_compress or jpeg_create_decompress; the library will not change +it thereafter. So if you allocate dynamic storage for the progress struct, +make sure it will live as long as the JPEG object does. Allocating from the +JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.) You +can use the same callback routine for both compression and decompression. + +The jpeg_progress_mgr struct contains four fields which are set by the library: + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +During any one pass, pass_counter increases from 0 up to (not including) +pass_limit; the step size is usually but not necessarily 1. The pass_limit +value may change from one pass to another. The expected total number of +passes is in total_passes, and the number of passes already completed is in +completed_passes. Thus the fraction of work completed may be estimated as + completed_passes + (pass_counter/pass_limit) + -------------------------------------------- + total_passes +ignoring the fact that the passes may not be equal amounts of work. + +When decompressing, pass_limit can even change within a pass, because it +depends on the number of scans in the JPEG file, which isn't always known in +advance. The computed fraction-of-work-done may jump suddenly (if the library +discovers it has overestimated the number of scans) or even decrease (in the +opposite case). It is not wise to put great faith in the work estimate. + +When using the decompressor's buffered-image mode, the progress monitor work +estimate is likely to be completely unhelpful, because the library has no way +to know how many output passes will be demanded of it. Currently, the library +sets total_passes based on the assumption that there will be one more output +pass if the input file end hasn't yet been read (jpeg_input_complete() isn't +TRUE), but no more output passes if the file end has been reached when the +output pass is started. This means that total_passes will rise as additional +output passes are requested. If you have a way of determining the input file +size, estimating progress based on the fraction of the file that's been read +will probably be more useful than using the library's value. + + +Memory management +----------------- + +This section covers some key facts about the JPEG library's built-in memory +manager. For more info, please read structure.txt's section about the memory +manager, and consult the source code if necessary. + +All memory and temporary file allocation within the library is done via the +memory manager. If necessary, you can replace the "back end" of the memory +manager to control allocation yourself (for example, if you don't want the +library to use malloc() and free() for some reason). + +Some data is allocated "permanently" and will not be freed until the JPEG +object is destroyed. Most data is allocated "per image" and is freed by +jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort. You can call the +memory manager yourself to allocate structures that will automatically be +freed at these times. Typical code for this is + ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size); +Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object. +Use alloc_large instead of alloc_small for anything bigger than a few Kbytes. +There are also alloc_sarray and alloc_barray routines that automatically +build 2-D sample or block arrays. + +The library's minimum space requirements to process an image depend on the +image's width, but not on its height, because the library ordinarily works +with "strip" buffers that are as wide as the image but just a few rows high. +Some operating modes (eg, two-pass color quantization) require full-image +buffers. Such buffers are treated as "virtual arrays": only the current strip +need be in memory, and the rest can be swapped out to a temporary file. + +If you use the simplest memory manager back end (jmemnobs.c), then no +temporary files are used; virtual arrays are simply malloc()'d. Images bigger +than memory can be processed only if your system supports virtual memory. +The other memory manager back ends support temporary files of various flavors +and thus work in machines without virtual memory. They may also be useful on +Unix machines if you need to process images that exceed available swap space. + +When using temporary files, the library will make the in-memory buffers for +its virtual arrays just big enough to stay within a "maximum memory" setting. +Your application can set this limit by setting cinfo->mem->max_memory_to_use +after creating the JPEG object. (Of course, there is still a minimum size for +the buffers, so the max-memory setting is effective only if it is bigger than +the minimum space needed.) If you allocate any large structures yourself, you +must allocate them before jpeg_start_compress() or jpeg_start_decompress() in +order to have them counted against the max memory limit. Also keep in mind +that space allocated with alloc_small() is ignored, on the assumption that +it's too small to be worth worrying about; so a reasonable safety margin +should be left when setting max_memory_to_use. + +If you use the jmemname.c or jmemdos.c memory manager back end, it is +important to clean up the JPEG object properly to ensure that the temporary +files get deleted. (This is especially crucial with jmemdos.c, where the +"temporary files" may be extended-memory segments; if they are not freed, +DOS will require a reboot to recover the memory.) Thus, with these memory +managers, it's a good idea to provide a signal handler that will trap any +early exit from your program. The handler should call either jpeg_abort() +or jpeg_destroy() for any active JPEG objects. A handler is not needed with +jmemnobs.c, and shouldn't be necessary with jmemansi.c or jmemmac.c either, +since the C library is supposed to take care of deleting files made with +tmpfile(). + + +Memory usage +------------ + +Working memory requirements while performing compression or decompression +depend on image dimensions, image characteristics (such as colorspace and +JPEG process), and operating mode (application-selected options). + +As of v6b, the decompressor requires: + 1. About 24K in more-or-less-fixed-size data. This varies a bit depending + on operating mode and image characteristics (particularly color vs. + grayscale), but it doesn't depend on image dimensions. + 2. Strip buffers (of size proportional to the image width) for IDCT and + upsampling results. The worst case for commonly used sampling factors + is about 34 bytes * width in pixels for a color image. A grayscale image + only needs about 8 bytes per pixel column. + 3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG + file (including progressive JPEGs), or whenever you select buffered-image + mode. This takes 2 bytes/coefficient. At typical 2x2 sampling, that's + 3 bytes per pixel for a color image. Worst case (1x1 sampling) requires + 6 bytes/pixel. For grayscale, figure 2 bytes/pixel. + 4. To perform 2-pass color quantization, the decompressor also needs a + 128K color lookup table and a full-image pixel buffer (3 bytes/pixel). +This does not count any memory allocated by the application, such as a +buffer to hold the final output image. + +The above figures are valid for 8-bit JPEG data precision and a machine with +32-bit ints. For 12-bit JPEG data, double the size of the strip buffers and +quantization pixel buffer. The "fixed-size" data will be somewhat smaller +with 16-bit ints, larger with 64-bit ints. Also, CMYK or other unusual +color spaces will require different amounts of space. + +The full-image coefficient and pixel buffers, if needed at all, do not +have to be fully RAM resident; you can have the library use temporary +files instead when the total memory usage would exceed a limit you set. +(But if your OS supports virtual memory, it's probably better to just use +jmemnobs and let the OS do the swapping.) + +The compressor's memory requirements are similar, except that it has no need +for color quantization. Also, it needs a full-image DCT coefficient buffer +if Huffman-table optimization is asked for, even if progressive mode is not +requested. + +If you need more detailed information about memory usage in a particular +situation, you can enable the MEM_STATS code in jmemmgr.c. + + +Library compile-time options +---------------------------- + +A number of compile-time options are available by modifying jmorecfg.h. + +The JPEG standard provides for both the baseline 8-bit DCT process and +a 12-bit DCT process. The IJG code supports 12-bit lossy JPEG if you define +BITS_IN_JSAMPLE as 12 rather than 8. Note that this causes JSAMPLE to be +larger than a char, so it affects the surrounding application's image data. +The sample applications cjpeg and djpeg can support 12-bit mode only for PPM +and GIF file formats; you must disable the other file formats to compile a +12-bit cjpeg or djpeg. (install.txt has more information about that.) +At present, a 12-bit library can handle *only* 12-bit images, not both +precisions. (If you need to include both 8- and 12-bit libraries in a single +application, you could probably do it by defining NEED_SHORT_EXTERNAL_NAMES +for just one of the copies. You'd have to access the 8-bit and 12-bit copies +from separate application source files. This is untested ... if you try it, +we'd like to hear whether it works!) + +Note that a 12-bit library always compresses in Huffman optimization mode, +in order to generate valid Huffman tables. This is necessary because our +default Huffman tables only cover 8-bit data. If you need to output 12-bit +files in one pass, you'll have to supply suitable default Huffman tables. +You may also want to supply your own DCT quantization tables; the existing +quality-scaling code has been developed for 8-bit use, and probably doesn't +generate especially good tables for 12-bit. + +The maximum number of components (color channels) in the image is determined +by MAX_COMPONENTS. The JPEG standard allows up to 255 components, but we +expect that few applications will need more than four or so. + +On machines with unusual data type sizes, you may be able to improve +performance or reduce memory space by tweaking the various typedefs in +jmorecfg.h. In particular, on some RISC CPUs, access to arrays of "short"s +is quite slow; consider trading memory for speed by making JCOEF, INT16, and +UINT16 be "int" or "unsigned int". UINT8 is also a candidate to become int. +You probably don't want to make JSAMPLE be int unless you have lots of memory +to burn. + +You can reduce the size of the library by compiling out various optional +functions. To do this, undefine xxx_SUPPORTED symbols as necessary. + +You can also save a few K by not having text error messages in the library; +the standard error message table occupies about 5Kb. This is particularly +reasonable for embedded applications where there's no good way to display +a message anyway. To do this, remove the creation of the message table +(jpeg_std_message_table[]) from jerror.c, and alter format_message to do +something reasonable without it. You could output the numeric value of the +message code number, for example. If you do this, you can also save a couple +more K by modifying the TRACEMSn() macros in jerror.h to expand to nothing; +you don't need trace capability anyway, right? + + +Portability considerations +-------------------------- + +The JPEG library has been written to be extremely portable; the sample +applications cjpeg and djpeg are slightly less so. This section summarizes +the design goals in this area. (If you encounter any bugs that cause the +library to be less portable than is claimed here, we'd appreciate hearing +about them.) + +The code works fine on ANSI C, C++, and pre-ANSI C compilers, using any of +the popular system include file setups, and some not-so-popular ones too. +See install.txt for configuration procedures. + +The code is not dependent on the exact sizes of the C data types. As +distributed, we make the assumptions that + char is at least 8 bits wide + short is at least 16 bits wide + int is at least 16 bits wide + long is at least 32 bits wide +(These are the minimum requirements of the ANSI C standard.) Wider types will +work fine, although memory may be used inefficiently if char is much larger +than 8 bits or short is much bigger than 16 bits. The code should work +equally well with 16- or 32-bit ints. + +In a system where these assumptions are not met, you may be able to make the +code work by modifying the typedefs in jmorecfg.h. However, you will probably +have difficulty if int is less than 16 bits wide, since references to plain +int abound in the code. + +char can be either signed or unsigned, although the code runs faster if an +unsigned char type is available. If char is wider than 8 bits, you will need +to redefine JOCTET and/or provide custom data source/destination managers so +that JOCTET represents exactly 8 bits of data on external storage. + +The JPEG library proper does not assume ASCII representation of characters. +But some of the image file I/O modules in cjpeg/djpeg do have ASCII +dependencies in file-header manipulation; so does cjpeg's select_file_type() +routine. + +The JPEG library does not rely heavily on the C library. In particular, C +stdio is used only by the data source/destination modules and the error +handler, all of which are application-replaceable. (cjpeg/djpeg are more +heavily dependent on stdio.) malloc and free are called only from the memory +manager "back end" module, so you can use a different memory allocator by +replacing that one file. + +The code generally assumes that C names must be unique in the first 15 +characters. However, global function names can be made unique in the +first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES. + +More info about porting the code may be gleaned by reading jconfig.txt, +jmorecfg.h, and jinclude.h. + + +Notes for MS-DOS implementors +----------------------------- + +The IJG code is designed to work efficiently in 80x86 "small" or "medium" +memory models (i.e., data pointers are 16 bits unless explicitly declared +"far"; code pointers can be either size). You may be able to use small +model to compile cjpeg or djpeg by itself, but you will probably have to use +medium model for any larger application. This won't make much difference in +performance. You *will* take a noticeable performance hit if you use a +large-data memory model (perhaps 10%-25%), and you should avoid "huge" model +if at all possible. + +The JPEG library typically needs 2Kb-3Kb of stack space. It will also +malloc about 20K-30K of near heap space while executing (and lots of far +heap, but that doesn't count in this calculation). This figure will vary +depending on selected operating mode, and to a lesser extent on image size. +There is also about 5Kb-6Kb of constant data which will be allocated in the +near data segment (about 4Kb of this is the error message table). +Thus you have perhaps 20K available for other modules' static data and near +heap space before you need to go to a larger memory model. The C library's +static data will account for several K of this, but that still leaves a good +deal for your needs. (If you are tight on space, you could reduce the sizes +of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to +1K. Another possibility is to move the error message table to far memory; +this should be doable with only localized hacking on jerror.c.) + +About 2K of the near heap space is "permanent" memory that will not be +released until you destroy the JPEG object. This is only an issue if you +save a JPEG object between compression or decompression operations. + +Far data space may also be a tight resource when you are dealing with large +images. The most memory-intensive case is decompression with two-pass color +quantization, or single-pass quantization to an externally supplied color +map. This requires a 128Kb color lookup table plus strip buffers amounting +to about 40 bytes per column for typical sampling ratios (eg, about 25600 +bytes for a 640-pixel-wide image). You may not be able to process wide +images if you have large data structures of your own. + +Of course, all of these concerns vanish if you use a 32-bit flat-memory-model +compiler, such as DJGPP or Watcom C. We highly recommend flat model if you +can use it; the JPEG library is significantly faster in flat model. diff --git a/3rdparty/openctm/tools/jpeg/ltmain.sh b/3rdparty/openctm/tools/jpeg/ltmain.sh new file mode 100644 index 000000000..ff57f28c6 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/ltmain.sh @@ -0,0 +1,8406 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6 +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/opt/local/bin/gsed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + + +EOF +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/3rdparty/openctm/tools/jpeg/makcjpeg.st b/3rdparty/openctm/tools/jpeg/makcjpeg.st new file mode 100644 index 000000000..3cbad5ed6 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makcjpeg.st @@ -0,0 +1,36 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle, B. Setzepfandt, and Guido Vollbeding. +; +; To use this file, rename it to cjpeg.prj. +; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +cjpeg.ttp +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost += +; * * * * List of modules * * * * +pcstart.o +cjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) +cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdswitch.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +libjpeg.lib ; built by libjpeg.prj +pcfltlib.lib ; floating point library +; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED +pcstdlib.lib ; standard library +pcextlib.lib ; extended library diff --git a/3rdparty/openctm/tools/jpeg/makdjpeg.st b/3rdparty/openctm/tools/jpeg/makdjpeg.st new file mode 100644 index 000000000..52179e3e6 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makdjpeg.st @@ -0,0 +1,36 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle, B. Setzepfandt, and Guido Vollbeding. +; +; To use this file, rename it to djpeg.prj. +; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +djpeg.ttp +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost += +; * * * * List of modules * * * * +pcstart.o +djpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) +cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdcolmap.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +libjpeg.lib ; built by libjpeg.prj +pcfltlib.lib ; floating point library +; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED +pcstdlib.lib ; standard library +pcextlib.lib ; extended library diff --git a/3rdparty/openctm/tools/jpeg/makeadsw.vc6 b/3rdparty/openctm/tools/jpeg/makeadsw.vc6 new file mode 100644 index 000000000..9af6a1994 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makeadsw.vc6 @@ -0,0 +1,77 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "cjpeg"=".\cjpeg.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "djpeg"=".\djpeg.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpegtran"=".\jpegtran.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "rdjpgcom"=".\rdjpgcom.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "wrjpgcom"=".\wrjpgcom.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/3rdparty/openctm/tools/jpeg/makeasln.vc9 b/3rdparty/openctm/tools/jpeg/makeasln.vc9 new file mode 100644 index 000000000..49ed24885 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makeasln.vc9 @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cjpeg", "cjpeg.vcproj", "{B4F61778-C45D-45C6-9E87-06F03F50519F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "djpeg", "djpeg.vcproj", "{9B7E57AE-31CD-405E-8070-26A8303B9DC9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpegtran", "jpegtran.vcproj", "{813C33AF-9031-49D2-BA19-93D600CDD404}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rdjpgcom", "rdjpgcom.vcproj", "{EB107F86-A8CC-4507-8115-88D31DDE4CDF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wrjpgcom", "wrjpgcom.vcproj", "{178670D7-FA7F-44A8-96C7-11B1CA14269C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B4F61778-C45D-45C6-9E87-06F03F50519F}.Release|Win32.ActiveCfg = Release|Win32 + {B4F61778-C45D-45C6-9E87-06F03F50519F}.Release|Win32.Build.0 = Release|Win32 + {9B7E57AE-31CD-405E-8070-26A8303B9DC9}.Release|Win32.ActiveCfg = Release|Win32 + {9B7E57AE-31CD-405E-8070-26A8303B9DC9}.Release|Win32.Build.0 = Release|Win32 + {813C33AF-9031-49D2-BA19-93D600CDD404}.Release|Win32.ActiveCfg = Release|Win32 + {813C33AF-9031-49D2-BA19-93D600CDD404}.Release|Win32.Build.0 = Release|Win32 + {EB107F86-A8CC-4507-8115-88D31DDE4CDF}.Release|Win32.ActiveCfg = Release|Win32 + {EB107F86-A8CC-4507-8115-88D31DDE4CDF}.Release|Win32.Build.0 = Release|Win32 + {178670D7-FA7F-44A8-96C7-11B1CA14269C}.Release|Win32.ActiveCfg = Release|Win32 + {178670D7-FA7F-44A8-96C7-11B1CA14269C}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/3rdparty/openctm/tools/jpeg/makecdep.vc6 b/3rdparty/openctm/tools/jpeg/makecdep.vc6 new file mode 100644 index 000000000..5436a5967 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makecdep.vc6 @@ -0,0 +1,82 @@ +# Microsoft Developer Studio erstellte Abhängigkeitsdatei, einbezogen von cjpeg.mak + +.\cdjpeg.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\cjpeg.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + ".\jversion.h"\ + + +.\rdbmp.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\rdgif.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\rdppm.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\rdrle.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\rdswitch.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\rdtarga.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + diff --git a/3rdparty/openctm/tools/jpeg/makecdsp.vc6 b/3rdparty/openctm/tools/jpeg/makecdsp.vc6 new file mode 100644 index 000000000..c9d3d4a82 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makecdsp.vc6 @@ -0,0 +1,130 @@ +# Microsoft Developer Studio Project File - Name="cjpeg" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=cjpeg - Win32 +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "cjpeg.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "cjpeg.mak" CFG="cjpeg - Win32" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "cjpeg - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\cjpeg\Release" +# PROP BASE Intermediate_Dir ".\cjpeg\Release" +# PROP BASE Target_Dir ".\cjpeg" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\cjpeg\Release" +# PROP Intermediate_Dir ".\cjpeg\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir ".\cjpeg" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# Begin Target + +# Name "cjpeg - Win32" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cdjpeg.c +# End Source File +# Begin Source File + +SOURCE=.\cjpeg.c +# End Source File +# Begin Source File + +SOURCE=.\rdbmp.c +# End Source File +# Begin Source File + +SOURCE=.\rdgif.c +# End Source File +# Begin Source File + +SOURCE=.\rdppm.c +# End Source File +# Begin Source File + +SOURCE=.\rdrle.c +# End Source File +# Begin Source File + +SOURCE=.\rdswitch.c +# End Source File +# Begin Source File + +SOURCE=.\rdtarga.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\cderror.h +# End Source File +# Begin Source File + +SOURCE=.\cdjpeg.h +# End Source File +# Begin Source File + +SOURCE=.\jconfig.h +# End Source File +# Begin Source File + +SOURCE=.\jerror.h +# End Source File +# Begin Source File + +SOURCE=.\jinclude.h +# End Source File +# Begin Source File + +SOURCE=.\jmorecfg.h +# End Source File +# Begin Source File + +SOURCE=.\jpeglib.h +# End Source File +# Begin Source File + +SOURCE=.\jversion.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/3rdparty/openctm/tools/jpeg/makecmak.vc6 b/3rdparty/openctm/tools/jpeg/makecmak.vc6 new file mode 100644 index 000000000..53235add5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makecmak.vc6 @@ -0,0 +1,159 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on cjpeg.dsp +!IF "$(CFG)" == "" +CFG=cjpeg - Win32 +!MESSAGE Keine Konfiguration angegeben. cjpeg - Win32 wird als Standard verwendet. +!ENDIF + +!IF "$(CFG)" != "cjpeg - Win32" +!MESSAGE Ungltige Konfiguration "$(CFG)" angegeben. +!MESSAGE Sie k”nnen beim Ausfhren von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "cjpeg.mak" CFG="cjpeg - Win32" +!MESSAGE +!MESSAGE Fr die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "cjpeg - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE +!ERROR Eine ungltige Konfiguration wurde angegeben. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe +OUTDIR=.\cjpeg\Release +INTDIR=.\cjpeg\Release +# Begin Custom Macros +OutDir=.\cjpeg\Release +# End Custom Macros + +ALL : "$(OUTDIR)\cjpeg.exe" + + +CLEAN : + -@erase "$(INTDIR)\cdjpeg.obj" + -@erase "$(INTDIR)\cjpeg.obj" + -@erase "$(INTDIR)\rdbmp.obj" + -@erase "$(INTDIR)\rdgif.obj" + -@erase "$(INTDIR)\rdppm.obj" + -@erase "$(INTDIR)\rdrle.obj" + -@erase "$(INTDIR)\rdswitch.obj" + -@erase "$(INTDIR)\rdtarga.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(OUTDIR)\cjpeg.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\cjpeg.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\cjpeg.pdb" /machine:I386 /out:"$(OUTDIR)\cjpeg.exe" +LINK32_OBJS= \ + "$(INTDIR)\cdjpeg.obj" \ + "$(INTDIR)\cjpeg.obj" \ + "$(INTDIR)\rdbmp.obj" \ + "$(INTDIR)\rdgif.obj" \ + "$(INTDIR)\rdppm.obj" \ + "$(INTDIR)\rdrle.obj" \ + "$(INTDIR)\rdswitch.obj" \ + "$(INTDIR)\rdtarga.obj" + +"$(OUTDIR)\cjpeg.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +CPP_PROJ=/nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fp"$(INTDIR)\cjpeg.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("cjpeg.dep") +!INCLUDE "cjpeg.dep" +!ELSE +!MESSAGE Warning: cannot find "cjpeg.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "cjpeg - Win32" +SOURCE=.\cdjpeg.c + +"$(INTDIR)\cdjpeg.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\cjpeg.c + +"$(INTDIR)\cjpeg.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdbmp.c + +"$(INTDIR)\rdbmp.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdgif.c + +"$(INTDIR)\rdgif.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdppm.c + +"$(INTDIR)\rdppm.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdrle.c + +"$(INTDIR)\rdrle.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdswitch.c + +"$(INTDIR)\rdswitch.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdtarga.c + +"$(INTDIR)\rdtarga.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/3rdparty/openctm/tools/jpeg/makecvcp.vc9 b/3rdparty/openctm/tools/jpeg/makecvcp.vc9 new file mode 100644 index 000000000..95fefc112 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makecvcp.vc9 @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/jpeg/makeddep.vc6 b/3rdparty/openctm/tools/jpeg/makeddep.vc6 new file mode 100644 index 000000000..79a44a1c0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makeddep.vc6 @@ -0,0 +1,82 @@ +# Microsoft Developer Studio erstellte Abhängigkeitsdatei, einbezogen von djpeg.mak + +.\cdjpeg.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\djpeg.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + ".\jversion.h"\ + + +.\rdcolmap.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\wrbmp.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\wrgif.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\wrppm.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\wrrle.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\wrtarga.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + diff --git a/3rdparty/openctm/tools/jpeg/makeddsp.vc6 b/3rdparty/openctm/tools/jpeg/makeddsp.vc6 new file mode 100644 index 000000000..fdb5e5a48 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makeddsp.vc6 @@ -0,0 +1,130 @@ +# Microsoft Developer Studio Project File - Name="djpeg" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=djpeg - Win32 +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "djpeg.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "djpeg.mak" CFG="djpeg - Win32" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "djpeg - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\djpeg\Release" +# PROP BASE Intermediate_Dir ".\djpeg\Release" +# PROP BASE Target_Dir ".\djpeg" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\djpeg\Release" +# PROP Intermediate_Dir ".\djpeg\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir ".\djpeg" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# Begin Target + +# Name "djpeg - Win32" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cdjpeg.c +# End Source File +# Begin Source File + +SOURCE=.\djpeg.c +# End Source File +# Begin Source File + +SOURCE=.\rdcolmap.c +# End Source File +# Begin Source File + +SOURCE=.\wrbmp.c +# End Source File +# Begin Source File + +SOURCE=.\wrgif.c +# End Source File +# Begin Source File + +SOURCE=.\wrppm.c +# End Source File +# Begin Source File + +SOURCE=.\wrrle.c +# End Source File +# Begin Source File + +SOURCE=.\wrtarga.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\cderror.h +# End Source File +# Begin Source File + +SOURCE=.\cdjpeg.h +# End Source File +# Begin Source File + +SOURCE=.\jconfig.h +# End Source File +# Begin Source File + +SOURCE=.\jerror.h +# End Source File +# Begin Source File + +SOURCE=.\jinclude.h +# End Source File +# Begin Source File + +SOURCE=.\jmorecfg.h +# End Source File +# Begin Source File + +SOURCE=.\jpeglib.h +# End Source File +# Begin Source File + +SOURCE=.\jversion.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/3rdparty/openctm/tools/jpeg/makedmak.vc6 b/3rdparty/openctm/tools/jpeg/makedmak.vc6 new file mode 100644 index 000000000..fd89563f5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makedmak.vc6 @@ -0,0 +1,159 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on djpeg.dsp +!IF "$(CFG)" == "" +CFG=djpeg - Win32 +!MESSAGE Keine Konfiguration angegeben. djpeg - Win32 wird als Standard verwendet. +!ENDIF + +!IF "$(CFG)" != "djpeg - Win32" +!MESSAGE Ungltige Konfiguration "$(CFG)" angegeben. +!MESSAGE Sie k”nnen beim Ausfhren von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "djpeg.mak" CFG="djpeg - Win32" +!MESSAGE +!MESSAGE Fr die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "djpeg - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE +!ERROR Eine ungltige Konfiguration wurde angegeben. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe +OUTDIR=.\djpeg\Release +INTDIR=.\djpeg\Release +# Begin Custom Macros +OutDir=.\djpeg\Release +# End Custom Macros + +ALL : "$(OUTDIR)\djpeg.exe" + + +CLEAN : + -@erase "$(INTDIR)\cdjpeg.obj" + -@erase "$(INTDIR)\djpeg.obj" + -@erase "$(INTDIR)\rdcolmap.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\wrbmp.obj" + -@erase "$(INTDIR)\wrgif.obj" + -@erase "$(INTDIR)\wrppm.obj" + -@erase "$(INTDIR)\wrrle.obj" + -@erase "$(INTDIR)\wrtarga.obj" + -@erase "$(OUTDIR)\djpeg.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\djpeg.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\djpeg.pdb" /machine:I386 /out:"$(OUTDIR)\djpeg.exe" +LINK32_OBJS= \ + "$(INTDIR)\cdjpeg.obj" \ + "$(INTDIR)\djpeg.obj" \ + "$(INTDIR)\rdcolmap.obj" \ + "$(INTDIR)\wrbmp.obj" \ + "$(INTDIR)\wrgif.obj" \ + "$(INTDIR)\wrppm.obj" \ + "$(INTDIR)\wrrle.obj" \ + "$(INTDIR)\wrtarga.obj" + +"$(OUTDIR)\djpeg.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +CPP_PROJ=/nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fp"$(INTDIR)\djpeg.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("djpeg.dep") +!INCLUDE "djpeg.dep" +!ELSE +!MESSAGE Warning: cannot find "djpeg.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "djpeg - Win32" +SOURCE=.\cdjpeg.c + +"$(INTDIR)\cdjpeg.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\djpeg.c + +"$(INTDIR)\djpeg.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdcolmap.c + +"$(INTDIR)\rdcolmap.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\wrbmp.c + +"$(INTDIR)\wrbmp.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\wrgif.c + +"$(INTDIR)\wrgif.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\wrppm.c + +"$(INTDIR)\wrppm.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\wrrle.c + +"$(INTDIR)\wrrle.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\wrtarga.c + +"$(INTDIR)\wrtarga.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/3rdparty/openctm/tools/jpeg/makedvcp.vc9 b/3rdparty/openctm/tools/jpeg/makedvcp.vc9 new file mode 100644 index 000000000..60a9f77d2 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makedvcp.vc9 @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/jpeg/makefile.ansi b/3rdparty/openctm/tools/jpeg/makefile.ansi new file mode 100644 index 000000000..aaf9ea16d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.ansi @@ -0,0 +1,220 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Unix-like systems with ANSI-capable compilers. +# If you have a non-ANSI compiler, makefile.unix is a better starting point. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= cc + +# You may need to adjust these cc options: +CFLAGS= -O +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= rm -f +# library (.a) file creation command +AR= ar rc +# second step in .a creation (use "touch" if not needed) +AR2= ranlib + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + $(AR2) libjpeg.a + +cjpeg: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) + +wrjpgcom: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.txt + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.txt. + exit 1 + +clean: + $(RM) *.o cjpeg djpeg jpegtran libjpeg.a rdjpgcom wrjpgcom + $(RM) core testout* + +test: cjpeg djpeg jpegtran + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + ./cjpeg -dct int -outfile testout.jpg testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + ./jpegtran -outfile testoutt.jpg testprog.jpg + cmp testimg.ppm testout.ppm + cmp testimg.bmp testout.bmp + cmp testimg.jpg testout.jpg + cmp testimg.ppm testoutp.ppm + cmp testimgp.jpg testoutp.jpg + cmp testorig.jpg testoutt.jpg + + +jaricom.o: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.o: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.o: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.bcc b/3rdparty/openctm/tools/jpeg/makefile.bcc new file mode 100644 index 000000000..c6c996159 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.bcc @@ -0,0 +1,291 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Borland C on MS-DOS or OS/2. +# It works with Borland C++ for DOS, revision 3.0 or later, +# and has been tested with Borland C++ for OS/2. +# Watch out for optimization bugs in the OS/2 compilers --- see notes below! +# Thanks to Tom Wright and Ge' Weijers (original DOS) and +# Ken Porter (OS/2) for this file. + +# Read installation instructions before saying "make" !! + +# Are we under DOS or OS/2? +!if !$d(DOS) && !$d(OS2) +!if $d(__OS2__) +OS2=1 +!else +DOS=1 +!endif +!endif + +# The name of your C compiler: +CC= bcc + +# You may need to adjust these cc options: +!if $d(DOS) +CFLAGS= -O2 -mm -w-par -w-stu -w-ccc -w-rch +!else +CFLAGS= -O1 -w-par -w-stu -w-ccc -w-rch +!endif +# -O2 enables full code optimization (for pre-3.0 Borland C++, use -O -G -Z). +# -O2 is buggy in Borland OS/2 C++ revision 2.0, so use -O1 there for now. +# If you have Borland OS/2 C++ revision 1.0, use -O or no optimization at all. +# -mm selects medium memory model (near data, far code pointers; DOS only!) +# -w-par suppresses warnings about unused function parameters +# -w-stu suppresses warnings about incomplete structures +# -w-ccc suppresses warnings about compile-time-constant conditions +# -w-rch suppresses warnings about unreachable code +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +!if $d(DOS) +LDFLAGS= -mm +# memory model option here must match CFLAGS! +!else +LDFLAGS= +# -lai full-screen app +# -lc case-significant link +!endif + +# Put here the object file name for the correct system-dependent memory +# manager file. +# For DOS, we recommend jmemdos.c and jmemdosa.asm. +# For OS/2, we recommend jmemnobs.c (flat memory!) +# SYSDEPMEMLIB must list the same files with "+" signs for the librarian. +!if $d(DOS) +SYSDEPMEM= jmemdos.obj jmemdosa.obj +SYSDEPMEMLIB= +jmemdos.obj +jmemdosa.obj +!else +SYSDEPMEM= jmemnobs.obj +SYSDEPMEMLIB= +jmemnobs.obj +!endif + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.obj jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jcarith.obj jctrans.obj jcparam.obj \ + jdatadst.obj jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj \ + jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj jchuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdarith.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdmainct.obj \ + jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ + jidctint.obj jdsample.obj jdcolor.obj jquant1.obj jquant2.obj \ + jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) + - del libjpeg.lib + tlib libjpeg.lib /E /C @&&| ++jcapimin.obj +jcapistd.obj +jcarith.obj +jctrans.obj +jcparam.obj & ++jdatadst.obj +jcinit.obj +jcmaster.obj +jcmarker.obj +jcmainct.obj & ++jcprepct.obj +jccoefct.obj +jccolor.obj +jcsample.obj +jchuff.obj & ++jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj +jfdctint.obj +jdapimin.obj & ++jdapistd.obj +jdarith.obj +jdtrans.obj +jdatasrc.obj +jdmaster.obj & ++jdinput.obj +jdmarker.obj +jdhuff.obj +jdmainct.obj +jdcoefct.obj & ++jdpostct.obj +jddctmgr.obj +jidctfst.obj +jidctflt.obj +jidctint.obj & ++jdsample.obj +jdcolor.obj +jquant1.obj +jquant2.obj +jdmerge.obj & ++jaricom.obj +jcomapi.obj +jutils.obj +jerror.obj +jmemmgr.obj & +$(SYSDEPMEMLIB) +| + +cjpeg.exe: $(COBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) -ecjpeg.exe $(COBJECTS) libjpeg.lib + +djpeg.exe: $(DOBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) -edjpeg.exe $(DOBJECTS) libjpeg.lib + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) -ejpegtran.exe $(TROBJECTS) libjpeg.lib + +rdjpgcom.exe: rdjpgcom.c +!if $d(DOS) + $(CC) -ms -O rdjpgcom.c +!else + $(CC) $(CFLAGS) rdjpgcom.c +!endif + +# On DOS, wrjpgcom needs large model so it can malloc a 64K chunk +wrjpgcom.exe: wrjpgcom.c +!if $d(DOS) + $(CC) -ml -O wrjpgcom.c +!else + $(CC) $(CFLAGS) wrjpgcom.c +!endif + +# This "{}" syntax allows Borland Make to "batch" source files. +# In this way, each run of the compiler can build many modules. +.c.obj: + $(CC) $(CFLAGS) -c{ $<} + +jconfig.h: jconfig.txt + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.txt. + exit 1 + +clean: + - del *.obj + - del libjpeg.lib + - del cjpeg.exe + - del djpeg.exe + - del jpegtran.exe + - del rdjpgcom.exe + - del wrjpgcom.exe + - del testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + - del testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg +!if $d(DOS) + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg +!else + echo n > n.tmp + comp testimg.ppm testout.ppm < n.tmp + comp testimg.bmp testout.bmp < n.tmp + comp testimg.jpg testout.jpg < n.tmp + comp testimg.ppm testoutp.ppm < n.tmp + comp testimgp.jpg testoutp.jpg < n.tmp + comp testorig.jpg testoutt.jpg < n.tmp + del n.tmp +!endif + + +jaricom.obj: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.obj: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.obj: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +jmemdosa.obj: jmemdosa.asm + tasm /mx jmemdosa.asm diff --git a/3rdparty/openctm/tools/jpeg/makefile.dj b/3rdparty/openctm/tools/jpeg/makefile.dj new file mode 100644 index 000000000..0dcbb02ae --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.dj @@ -0,0 +1,226 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for DJGPP (Delorie's GNU C port on MS-DOS), v2.0 or later. +# Thanks to Frank J. Donahoe for this version. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= gcc + +# You may need to adjust these cc options: +CFLAGS= -O2 -Wall -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= -s + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For DJGPP this is usually jmemnobs.o, but you could +# use jmemname.o if you want to use named temp files instead of swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= del +# library (.a) file creation command +AR= ar rc +# second step in .a creation (use "touch" if not needed) +AR2= ranlib + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + $(AR2) libjpeg.a + +cjpeg.exe: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg.exe $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg.exe: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg.exe $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran.exe: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran.exe $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom.exe: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom.exe rdjpgcom.o $(LDLIBS) + +wrjpgcom.exe: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom.exe wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.txt + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.txt. + exit 1 + +clean: + $(RM) *.o + $(RM) cjpeg.exe + $(RM) djpeg.exe + $(RM) jpegtran.exe + $(RM) rdjpgcom.exe + $(RM) wrjpgcom.exe + $(RM) libjpeg.a + $(RM) testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + $(RM) testout*.* + ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + ./cjpeg -dct int -outfile testout.jpg testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + ./jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jaricom.o: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.o: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.o: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.linux b/3rdparty/openctm/tools/jpeg/makefile.linux new file mode 100644 index 000000000..895b3f589 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.linux @@ -0,0 +1,221 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Linux. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= gcc + +# You may need to adjust these cc options: +CFLAGS= -O2 -Wall -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= rm -f +# file rename command +MV= mv +# library (.a) file creation command +AR= ar rcs +# copy +CP= cp -f + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +.c.o: + $(CC) $(CFLAGS) -c $*.c + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + +cjpeg: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) + +wrjpgcom: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.linux + $(CP) jconfig.linux jconfig.h + +clean: + $(RM) *.o cjpeg djpeg jpegtran libjpeg.a rdjpgcom wrjpgcom + $(RM) core testout* + +test: cjpeg djpeg jpegtran + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + ./cjpeg -dct int -outfile testout.jpg testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + ./jpegtran -outfile testoutt.jpg testprog.jpg + cmp testimg.ppm testout.ppm + cmp testimg.bmp testout.bmp + cmp testimg.jpg testout.jpg + cmp testimg.ppm testoutp.ppm + cmp testimgp.jpg testoutp.jpg + cmp testorig.jpg testoutt.jpg + + +jaricom.o: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.o: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.o: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.macosx b/3rdparty/openctm/tools/jpeg/makefile.macosx new file mode 100644 index 000000000..9785bc86c --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.macosx @@ -0,0 +1,221 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Mac OS X. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= gcc + +# You may need to adjust these cc options: +CFLAGS= -O2 -Wall -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= rm -f +# file rename command +MV= mv +# library (.a) file creation command +AR= ar rcs +# copy +CP= cp -f + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +.c.o: + $(CC) $(CFLAGS) -c $*.c + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + +cjpeg: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) + +wrjpgcom: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.macosx + $(CP) jconfig.macosx jconfig.h + +clean: + $(RM) *.o cjpeg djpeg jpegtran libjpeg.a rdjpgcom wrjpgcom + $(RM) core testout* + +test: cjpeg djpeg jpegtran + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + ./cjpeg -dct int -outfile testout.jpg testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + ./jpegtran -outfile testoutt.jpg testprog.jpg + cmp testimg.ppm testout.ppm + cmp testimg.bmp testout.bmp + cmp testimg.jpg testout.jpg + cmp testimg.ppm testoutp.ppm + cmp testimgp.jpg testoutp.jpg + cmp testorig.jpg testoutt.jpg + + +jaricom.o: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.o: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.o: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.manx b/3rdparty/openctm/tools/jpeg/makefile.manx new file mode 100644 index 000000000..be40ad13c --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.manx @@ -0,0 +1,220 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for Amiga systems using Manx Aztec C ver 5.x. +# Thanks to D.J. James (djjames@cup.portal.com) for this version. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= cc + +# You may need to adjust these cc options: +# Uncomment for generic 68000 code (will work on any Amiga) +ARCHFLAGS= -sn + +# Uncomment for 68020/68030 code (faster, but won't run on 68000 CPU) +#ARCHFLAGS= -c2 + +CFLAGS= -MC -MD $(ARCHFLAGS) -spfam -r4 + +# Link-time cc options: +LDFLAGS= -g + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= -lml -lcl + +# Put here the object file name for the correct system-dependent memory +# manager file. For Amiga we recommend jmemname.o. +SYSDEPMEM= jmemname.o + +# miscellaneous OS-dependent stuff +# linker +LN= ln +# file deletion command +RM= delete quiet +# library (.lib) file creation command +AR= lb + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.lib cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +libjpeg.lib: $(LIBOBJECTS) + -$(RM) libjpeg.lib + $(AR) libjpeg.lib $(LIBOBJECTS) + +cjpeg: $(COBJECTS) libjpeg.lib + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.lib $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.lib + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.lib $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.lib + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.lib $(LDLIBS) + +rdjpgcom: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) + +wrjpgcom: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.txt + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.txt. + exit 1 + +clean: + -$(RM) *.o cjpeg djpeg jpegtran libjpeg.lib rdjpgcom wrjpgcom + -$(RM) core testout*.* + +test: cjpeg djpeg jpegtran + -$(RM) testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg + cmp testimg.ppm testout.ppm + cmp testimg.bmp testout.bmp + cmp testimg.jpg testout.jpg + cmp testimg.ppm testoutp.ppm + cmp testimgp.jpg testoutp.jpg + cmp testorig.jpg testoutt.jpg + + +jaricom.o: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.o: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.o: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.mc6 b/3rdparty/openctm/tools/jpeg/makefile.mc6 new file mode 100644 index 000000000..65274eeee --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.mc6 @@ -0,0 +1,255 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for Microsoft C for MS-DOS, version 6.00A and up. +# Use NMAKE, not Microsoft's brain-damaged MAKE. +# Thanks to Alan Wright and Chris Turner of Olivetti Research Ltd. + +# Read installation instructions before saying "nmake" !! + +# You may need to adjust these compiler options: +CFLAGS = -AM -Oecigt -Gs -W3 +# -AM medium memory model (or use -AS for small model, if you remove features) +# -Oecigt -Gs maximum safe optimisation (-Ol has bugs in MSC 6.00A) +# -W3 warning level 3 +# You might also want to add -G2 if you have an 80286, etc. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Jan-Herman Buining suggests the following switches for MS C 8.0 and a 486: +# CFLAGS = /AM /f- /FPi87 /G3 /Gs /Gy /Ob1 /Oc /Oe /Og /Oi /Ol /On /Oo /Ot \ +# /OV4 /W3 +# except for jquant1.c, which must be compiled with /Oo- to avoid a compiler +# crash. + +# Ingar Steinsland suggests the following switches when building +# a 16-bit Windows DLL: +# CFLAGS = -ALw -Gsw -Zpe -W3 -O2 -Zi -Zd + +# Put here the object file name for the correct system-dependent memory +# manager file. For DOS, we recommend jmemdos.c and jmemdosa.asm. +# (But not for Windows; see install.txt if you use this makefile for Windows.) +SYSDEPMEM= jmemdos.obj jmemdosa.obj +# SYSDEPMEMLIB must list the same files with "+" signs for the librarian. +SYSDEPMEMLIB= +jmemdos.obj +jmemdosa.obj + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.obj jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jcarith.obj jctrans.obj jcparam.obj \ + jdatadst.obj jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj \ + jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj jchuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdarith.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdmainct.obj \ + jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ + jidctint.obj jdsample.obj jdcolor.obj jquant1.obj jquant2.obj \ + jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + +# need linker response file because file list > 128 chars +RFILE = libjpeg.ans + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) $(RFILE) + del libjpeg.lib + lib @$(RFILE) + +# linker response file for building libjpeg.lib +$(RFILE) : makefile + del $(RFILE) + echo libjpeg.lib >$(RFILE) +# silly want-to-create-it prompt: + echo y >>$(RFILE) + echo +jcapimin.obj +jcapistd.obj +jcarith.obj +jctrans.obj & >>$(RFILE) + echo +jcparam.obj +jdatadst.obj +jcinit.obj +jcmaster.obj & >>$(RFILE) + echo +jcmarker.obj +jcmainct.obj +jcprepct.obj & >>$(RFILE) + echo +jccoefct.obj +jccolor.obj +jcsample.obj +jchuff.obj & >>$(RFILE) + echo +jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj & >>$(RFILE) + echo +jfdctint.obj +jdapimin.obj +jdapistd.obj & >>$(RFILE) + echo +jdarith.obj +jdtrans.obj +jdatasrc.obj +jdmaster.obj & >>$(RFILE) + echo +jdinput.obj +jdmarker.obj +jdhuff.obj +jdmainct.obj & >>$(RFILE) + echo +jdcoefct.obj +jdpostct.obj +jddctmgr.obj & >>$(RFILE) + echo +jidctfst.obj +jidctflt.obj +jidctint.obj & >>$(RFILE) + echo +jdsample.obj +jdcolor.obj +jquant1.obj & >>$(RFILE) + echo +jquant2.obj +jdmerge.obj +jaricom.obj +jcomapi.obj & >>$(RFILE) + echo +jutils.obj +jerror.obj +jmemmgr.obj & >>$(RFILE) + echo $(SYSDEPMEMLIB) ; >>$(RFILE) + +cjpeg.exe: $(COBJECTS) libjpeg.lib + echo $(COBJECTS) >cjpeg.lst + link /STACK:4096 /EXEPACK @cjpeg.lst, cjpeg.exe, , libjpeg.lib, ; + del cjpeg.lst + +djpeg.exe: $(DOBJECTS) libjpeg.lib + echo $(DOBJECTS) >djpeg.lst + link /STACK:4096 /EXEPACK @djpeg.lst, djpeg.exe, , libjpeg.lib, ; + del djpeg.lst + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + link /STACK:4096 /EXEPACK $(TROBJECTS), jpegtran.exe, , libjpeg.lib, ; + +rdjpgcom.exe: rdjpgcom.c + $(CC) -AS -O -W3 rdjpgcom.c + +# wrjpgcom needs large model so it can malloc a 64K chunk +wrjpgcom.exe: wrjpgcom.c + $(CC) -AL -O -W3 wrjpgcom.c + +jconfig.h: jconfig.txt + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.txt. + exit 1 + +clean: + del *.obj + del libjpeg.lib + del cjpeg.exe + del djpeg.exe + del jpegtran.exe + del rdjpgcom.exe + del wrjpgcom.exe + del testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + del testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jaricom.obj: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.obj: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.obj: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +jmemdosa.obj : jmemdosa.asm + masm /mx $*; diff --git a/3rdparty/openctm/tools/jpeg/makefile.mms b/3rdparty/openctm/tools/jpeg/makefile.mms new file mode 100644 index 000000000..aa1a35751 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.mms @@ -0,0 +1,224 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for use with MMS on Digital VMS systems. +# Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) +# and Tim Bell (tbell@netcom.com) for their help. + +# Read installation instructions before saying "MMS" !! + +# You may need to adjust these cc options: +CFLAGS= $(CFLAGS) /NoDebug /Optimize +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via /Define switches here. +.ifdef ALPHA +OPT= +.else +OPT= ,Sys$Disk:[]MAKVMS.OPT/Option +.endif + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= jmemnobs.obj + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.obj jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jcarith.obj jctrans.obj jcparam.obj \ + jdatadst.obj jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj \ + jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj jchuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdarith.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdmainct.obj \ + jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ + jidctint.obj jdsample.obj jdcolor.obj jquant1.obj jquant2.obj \ + jdmerge.obj +# These objectfiles are included in libjpeg.olb +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj +# objectfile lists with commas --- what a crock +COBJLIST= cjpeg.obj,rdppm.obj,rdgif.obj,rdtarga.obj,rdrle.obj,rdbmp.obj,\ + rdswitch.obj,cdjpeg.obj +DOBJLIST= djpeg.obj,wrppm.obj,wrgif.obj,wrtarga.obj,wrrle.obj,wrbmp.obj,\ + rdcolmap.obj,cdjpeg.obj +TROBJLIST= jpegtran.obj,rdswitch.obj,cdjpeg.obj,transupp.obj +LIBOBJLIST= jaricom.obj,jcapimin.obj,jcapistd.obj,jcarith.obj,jctrans.obj,\ + jcparam.obj,jdatadst.obj,jcinit.obj,jcmaster.obj,jcmarker.obj,\ + jcmainct.obj,jcprepct.obj,jccoefct.obj,jccolor.obj,jcsample.obj,\ + jchuff.obj,jcdctmgr.obj,jfdctfst.obj,jfdctflt.obj,jfdctint.obj,\ + jdapimin.obj,jdapistd.obj,jdarith.obj,jdtrans.obj,jdatasrc.obj,\ + jdmaster.obj,jdinput.obj,jdmarker.obj,jdhuff.obj,jdmainct.obj,\ + jdcoefct.obj,jdpostct.obj,jddctmgr.obj,jidctfst.obj,jidctflt.obj,\ + jidctint.obj,jdsample.obj,jdcolor.obj,jquant1.obj,jquant2.obj,\ + jdmerge.obj,jcomapi.obj,jutils.obj,jerror.obj,jmemmgr.obj,$(SYSDEPMEM) + + +.first + @- Define /NoLog Sys Sys$Library + +ALL : libjpeg.olb cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + @ Continue + +libjpeg.olb : $(LIBOBJECTS) + Library /Create libjpeg.olb $(LIBOBJLIST) + +cjpeg.exe : $(COBJECTS) libjpeg.olb + $(LINK) $(LFLAGS) /Executable = cjpeg.exe $(COBJLIST),libjpeg.olb/Library$(OPT) + +djpeg.exe : $(DOBJECTS) libjpeg.olb + $(LINK) $(LFLAGS) /Executable = djpeg.exe $(DOBJLIST),libjpeg.olb/Library$(OPT) + +jpegtran.exe : $(TROBJECTS) libjpeg.olb + $(LINK) $(LFLAGS) /Executable = jpegtran.exe $(TROBJLIST),libjpeg.olb/Library$(OPT) + +rdjpgcom.exe : rdjpgcom.obj + $(LINK) $(LFLAGS) /Executable = rdjpgcom.exe rdjpgcom.obj$(OPT) + +wrjpgcom.exe : wrjpgcom.obj + $(LINK) $(LFLAGS) /Executable = wrjpgcom.exe wrjpgcom.obj$(OPT) + +jconfig.h : jconfig.vms + @- Copy jconfig.vms jconfig.h + +clean : + @- Set Protection = Owner:RWED *.*;-1 + @- Set Protection = Owner:RWED *.OBJ + - Purge /NoLog /NoConfirm *.* + - Delete /NoLog /NoConfirm *.OBJ; + +test : cjpeg.exe djpeg.exe jpegtran.exe + mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + mcr sys$disk:[]djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm + mcr sys$disk:[]djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + mcr sys$disk:[]cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + mcr sys$disk:[]jpegtran -outfile testoutt.jpg testprog.jpg + - Backup /Compare/Log testimg.ppm testout.ppm + - Backup /Compare/Log testimg.bmp testout.bmp + - Backup /Compare/Log testimg.jpg testout.jpg + - Backup /Compare/Log testimg.ppm testoutp.ppm + - Backup /Compare/Log testimgp.jpg testoutp.jpg + - Backup /Compare/Log testorig.jpg testoutt.jpg + + +jaricom.obj : jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.obj : jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj : jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.obj : jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.obj : jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.obj : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj : jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj : jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj : jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.obj : jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.obj : jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.obj : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj : jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj : jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj : jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj : rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj : wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj : cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj : rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj : transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.sas b/3rdparty/openctm/tools/jpeg/makefile.sas new file mode 100644 index 000000000..a3bae64e5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.sas @@ -0,0 +1,258 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for Amiga systems using SAS C 6.0 and up. +# Thanks to Ed Hanway, Mark Rinfret, and Jim Zepeda. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= sc + +# You may need to adjust these cc options: +# Uncomment the following lines for generic 680x0 version +ARCHFLAGS= cpu=any +SUFFIX= + +# Uncomment the following lines for 68030-only version +#ARCHFLAGS= cpu=68030 +#SUFFIX=.030 + +CFLAGS= nostackcheck data=near parms=register optimize $(ARCHFLAGS) \ + ignore=104 ignore=304 ignore=306 +# ignore=104 disables warnings for mismatched const qualifiers +# ignore=304 disables warnings for variables being optimized out +# ignore=306 disables warnings for the inlining of functions +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via define switches here. + +# Link-time cc options: +LDFLAGS= SC SD ND BATCH + +# To link any special libraries, add the necessary commands here. +LDLIBS= LIB:scm.lib LIB:sc.lib + +# Put here the object file name for the correct system-dependent memory +# manager file. For Amiga we recommend jmemname.o. +SYSDEPMEM= jmemname.o + +# miscellaneous OS-dependent stuff +# linker +LN= slink +# file deletion command +RM= delete quiet +# library (.lib) file creation command +AR= oml + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.o jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jcarith.o jctrans.o jcparam.o \ + jdatadst.o jcinit.o jcmaster.o jcmarker.o jcmainct.o jcprepct.o \ + jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o jfdctfst.o \ + jfdctflt.o jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdarith.o jdtrans.o jdatasrc.o \ + jdmaster.o jdinput.o jdmarker.o jdhuff.o jdmainct.o \ + jdcoefct.o jdpostct.o jddctmgr.o jidctfst.o jidctflt.o \ + jidctint.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.lib cjpeg$(SUFFIX) djpeg$(SUFFIX) jpegtran$(SUFFIX) rdjpgcom$(SUFFIX) wrjpgcom$(SUFFIX) + +# note: do several AR steps to avoid command line length limitations + +libjpeg.lib: $(LIBOBJECTS) + -$(RM) libjpeg.lib + $(AR) libjpeg.lib r $(CLIBOBJECTS) + $(AR) libjpeg.lib r $(DLIBOBJECTS) + $(AR) libjpeg.lib r $(COMOBJECTS) + +cjpeg$(SUFFIX): $(COBJECTS) libjpeg.lib + $(LN) + +# You may want to adjust these compiler options: +CFLAGS= $(cflags) $(cdebug) $(cvars) -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time options: +LDFLAGS= $(ldebug) $(conlflags) + +# To link any special libraries, add the necessary commands here. +LDLIBS= $(conlibs) + +# Put here the object file name for the correct system-dependent memory +# manager file. For NT we suggest jmemnobs.obj, which expects the OS to +# provide adequate virtual memory. +SYSDEPMEM= jmemnobs.obj + +# miscellaneous OS-dependent stuff +# file deletion command +RM= del + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt \ + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 \ + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 \ + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 \ + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 \ + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 \ + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 \ + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st \ + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms \ + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm \ + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.obj jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jcarith.obj jctrans.obj jcparam.obj \ + jdatadst.obj jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj \ + jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj jchuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdarith.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdmainct.obj \ + jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ + jidctint.obj jdsample.obj jdcolor.obj jquant1.obj jquant2.obj \ + jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + +# Template command for compiling .c to .obj +.c.obj: + $(cc) $(CFLAGS) $*.c + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) + $(RM) libjpeg.lib + lib -out:libjpeg.lib $(LIBOBJECTS) + +cjpeg.exe: $(COBJECTS) libjpeg.lib + $(link) $(LDFLAGS) -out:cjpeg.exe $(COBJECTS) libjpeg.lib $(LDLIBS) + +djpeg.exe: $(DOBJECTS) libjpeg.lib + $(link) $(LDFLAGS) -out:djpeg.exe $(DOBJECTS) libjpeg.lib $(LDLIBS) + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + $(link) $(LDFLAGS) -out:jpegtran.exe $(TROBJECTS) libjpeg.lib $(LDLIBS) + +rdjpgcom.exe: rdjpgcom.obj + $(link) $(LDFLAGS) -out:rdjpgcom.exe rdjpgcom.obj $(LDLIBS) + +wrjpgcom.exe: wrjpgcom.obj + $(link) $(LDFLAGS) -out:wrjpgcom.exe wrjpgcom.obj $(LDLIBS) + + +clean: + $(RM) *.obj *.exe libjpeg.lib + $(RM) testout* + +cleanlib: + $(RM) $(LIBOBJECTS) libjpeg.lib + +test: cjpeg.exe djpeg.exe jpegtran.exe + $(RM) testout* + .\djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + .\djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + .\cjpeg -dct int -outfile testout.jpg testimg.ppm + .\djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + .\cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + .\jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jaricom.obj: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.obj: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.obj: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makefile.vms b/3rdparty/openctm/tools/jpeg/makefile.vms new file mode 100644 index 000000000..5d89ff28e --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.vms @@ -0,0 +1,142 @@ +$! Makefile for Independent JPEG Group's software +$! +$! This is a command procedure for Digital VMS systems that do not have MMS. +$! It builds the JPEG software by brute force, recompiling everything whether +$! or not it is necessary. It then runs the basic self-test. +$! Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) +$! and Tim Bell (tbell@netcom.com) for their help. +$! +$! Read installation instructions before running this!! +$! +$ If F$Mode () .eqs. "INTERACTIVE" +$ Then +$ VERIFY = F$Verify (0) +$ Else +$ VERIFY = F$Verify (1) +$ EndIf +$ On Control_Y Then GoTo End +$ On Error Then GoTo End +$ +$ If F$GetSyi ("HW_MODEL") .gt. 1023 +$ Then +$ OPT = "" +$ Else +$ OPT = ",Sys$Disk:[]makvms.opt/Option" +$ EndIf +$ +$ DoCompile := CC /NoDebug /Optimize /NoList +$! +$ DoCompile jaricom.c +$ DoCompile jcapimin.c +$ DoCompile jcapistd.c +$ DoCompile jcarith.c +$ DoCompile jctrans.c +$ DoCompile jcparam.c +$ DoCompile jdatadst.c +$ DoCompile jcinit.c +$ DoCompile jcmaster.c +$ DoCompile jcmarker.c +$ DoCompile jcmainct.c +$ DoCompile jcprepct.c +$ DoCompile jccoefct.c +$ DoCompile jccolor.c +$ DoCompile jcsample.c +$ DoCompile jchuff.c +$ DoCompile jcdctmgr.c +$ DoCompile jfdctfst.c +$ DoCompile jfdctflt.c +$ DoCompile jfdctint.c +$ DoCompile jdapimin.c +$ DoCompile jdapistd.c +$ DoCompile jdarith.c +$ DoCompile jdtrans.c +$ DoCompile jdatasrc.c +$ DoCompile jdmaster.c +$ DoCompile jdinput.c +$ DoCompile jdmarker.c +$ DoCompile jdhuff.c +$ DoCompile jdmainct.c +$ DoCompile jdcoefct.c +$ DoCompile jdpostct.c +$ DoCompile jddctmgr.c +$ DoCompile jidctfst.c +$ DoCompile jidctflt.c +$ DoCompile jidctint.c +$ DoCompile jdsample.c +$ DoCompile jdcolor.c +$ DoCompile jquant1.c +$ DoCompile jquant2.c +$ DoCompile jdmerge.c +$ DoCompile jcomapi.c +$ DoCompile jutils.c +$ DoCompile jerror.c +$ DoCompile jmemmgr.c +$ DoCompile jmemnobs.c +$! +$ Library /Create libjpeg.olb jaricom.obj,jcapimin.obj,jcapistd.obj, - + jcarith.obj,jctrans.obj,jcparam.obj,jdatadst.obj,jcinit.obj, - + jcmaster.obj,jcmarker.obj,jcmainct.obj,jcprepct.obj,jccoefct.obj, - + jccolor.obj,jcsample.obj,jchuff.obj,jcdctmgr.obj,jfdctfst.obj, - + jfdctflt.obj,jfdctint.obj,jdapimin.obj,jdapistd.obj,jdarith.obj, - + jdtrans.obj,jdatasrc.obj,jdmaster.obj,jdinput.obj,jdmarker.obj, - + jdhuff.obj,jdmainct.obj,jdcoefct.obj,jdpostct.obj,jddctmgr.obj, - + jidctfst.obj,jidctflt.obj,jidctint.obj,jdsample.obj,jdcolor.obj, - + jquant1.obj,jquant2.obj,jdmerge.obj,jcomapi.obj,jutils.obj, - + jerror.obj,jmemmgr.obj,jmemnobs.obj +$! +$ DoCompile cjpeg.c +$ DoCompile rdppm.c +$ DoCompile rdgif.c +$ DoCompile rdtarga.c +$ DoCompile rdrle.c +$ DoCompile rdbmp.c +$ DoCompile rdswitch.c +$ DoCompile cdjpeg.c +$! +$ Link /NoMap /Executable = cjpeg.exe cjpeg.obj,rdppm.obj,rdgif.obj, - + rdtarga.obj,rdrle.obj,rdbmp.obj,rdswitch.obj,cdjpeg.obj,libjpeg.olb/Library'OPT' +$! +$ DoCompile djpeg.c +$ DoCompile wrppm.c +$ DoCompile wrgif.c +$ DoCompile wrtarga.c +$ DoCompile wrrle.c +$ DoCompile wrbmp.c +$ DoCompile rdcolmap.c +$ DoCompile cdjpeg.c +$! +$ Link /NoMap /Executable = djpeg.exe djpeg.obj,wrppm.obj,wrgif.obj, - + wrtarga.obj,wrrle.obj,wrbmp.obj,rdcolmap.obj,cdjpeg.obj,libjpeg.olb/Library'OPT' +$! +$ DoCompile jpegtran.c +$ DoCompile rdswitch.c +$ DoCompile cdjpeg.c +$ DoCompile transupp.c +$! +$ Link /NoMap /Executable = jpegtran.exe jpegtran.obj,rdswitch.obj, - + cdjpeg.obj,transupp.obj,libjpeg.olb/Library'OPT' +$! +$ DoCompile rdjpgcom.c +$ Link /NoMap /Executable = rdjpgcom.exe rdjpgcom.obj'OPT' +$! +$ DoCompile wrjpgcom.c +$ Link /NoMap /Executable = wrjpgcom.exe wrjpgcom.obj'OPT' +$! +$! Run the self-test +$! +$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg +$ mcr sys$disk:[]djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg +$ mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm +$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg +$ mcr sys$disk:[]cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm +$ mcr sys$disk:[]jpegtran -outfile testoutt.jpg testprog.jpg +$ Backup /Compare/Log testimg.ppm testout.ppm +$ Backup /Compare/Log testimg.bmp testout.bmp +$ Backup /Compare/Log testimg.jpg testout.jpg +$ Backup /Compare/Log testimg.ppm testoutp.ppm +$ Backup /Compare/Log testimgp.jpg testoutp.jpg +$ Backup /Compare/Log testorig.jpg testoutt.jpg +$! +$End: +$ If Verify Then Set Verify +$ Exit diff --git a/3rdparty/openctm/tools/jpeg/makefile.wat b/3rdparty/openctm/tools/jpeg/makefile.wat new file mode 100644 index 000000000..0bcd50c7d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makefile.wat @@ -0,0 +1,239 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Watcom C/C++ 10.0 on MS-DOS (using +# dos4g extender), OS/2, and Windows NT console mode. +# Thanks to Janos Haide, jhaide@btrvtech.com. + +# Read installation instructions before saying "wmake" !! + +# Uncomment line for desired system +SYSTEM=DOS +#SYSTEM=OS2 +#SYSTEM=NT + +# The name of your C compiler: +CC= wcl386 + +# You may need to adjust these cc options: +CFLAGS= -4r -ort -wx -zq -bt=$(SYSTEM) +# Caution: avoid -ol or -ox; these generate bad code with 10.0 or 10.0a. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +!ifeq SYSTEM DOS +LDFLAGS= -zq -l=dos4g +!else ifeq SYSTEM OS2 +LDFLAGS= -zq -l=os2v2 +!else ifeq SYSTEM NT +LDFLAGS= -zq -l=nt +!endif + +# Put here the object file name for the correct system-dependent memory +# manager file. jmemnobs should work fine for dos4g or OS/2 environment. +SYSDEPMEM= jmemnobs.obj + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c & + jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c & + jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c & + jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c & + jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c & + jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c & + jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c & + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c & + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c & + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h & + jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.txt usage.txt cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 & + wrjpgcom.1 wizard.txt example.c libjpeg.txt structure.txt & + coderules.txt filelist.txt change.log +MKFILES= configure Makefile.in makefile.ansi makefile.unix makefile.bcc & + makefile.mc6 makefile.dj makefile.wat makefile.vc makejdsw.vc6 & + makeadsw.vc6 makejdep.vc6 makejdsp.vc6 makejmak.vc6 makecdep.vc6 & + makecdsp.vc6 makecmak.vc6 makeddep.vc6 makeddsp.vc6 makedmak.vc6 & + maketdep.vc6 maketdsp.vc6 maketmak.vc6 makerdep.vc6 makerdsp.vc6 & + makermak.vc6 makewdep.vc6 makewdsp.vc6 makewmak.vc6 makejsln.vc9 & + makeasln.vc9 makejvcp.vc9 makecvcp.vc9 makedvcp.vc9 maketvcp.vc9 & + makervcp.vc9 makewvcp.vc9 makeproj.mac makcjpeg.st makdjpeg.st & + makljpeg.st maktjpeg.st makefile.manx makefile.sas makefile.mms & + makefile.vms makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat & + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas & + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltmain.sh depcomp missing +OTHERFILES= jconfig.txt ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm & + libjpeg.map +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg & + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) & + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jaricom.obj jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jcarith.obj jctrans.obj jcparam.obj & + jdatadst.obj jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj & + jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj jchuff.obj & + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdarith.obj jdtrans.obj jdatasrc.obj & + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdmainct.obj & + jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj & + jidctint.obj jdsample.obj jdcolor.obj jquant1.obj jquant2.obj & + jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj & + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj & + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) + - del libjpeg.lib + * wlib -n libjpeg.lib $(LIBOBJECTS) + +cjpeg.exe: $(COBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) $(COBJECTS) libjpeg.lib + +djpeg.exe: $(DOBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) $(DOBJECTS) libjpeg.lib + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) $(TROBJECTS) libjpeg.lib + +rdjpgcom.exe: rdjpgcom.c + $(CC) $(CFLAGS) $(LDFLAGS) rdjpgcom.c + +wrjpgcom.exe: wrjpgcom.c + $(CC) $(CFLAGS) $(LDFLAGS) wrjpgcom.c + +.c.obj: + $(CC) $(CFLAGS) -c $< + +jconfig.h: jconfig.txt + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.txt. + exit 1 + +clean: .SYMBOLIC + - del *.obj + - del libjpeg.lib + - del cjpeg.exe + - del djpeg.exe + - del jpegtran.exe + - del rdjpgcom.exe + - del wrjpgcom.exe + - del testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe .SYMBOLIC + - del testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg +!ifeq SYSTEM DOS + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg +!else + echo n > n.tmp + comp testimg.ppm testout.ppm < n.tmp + comp testimg.bmp testout.bmp < n.tmp + comp testimg.jpg testout.jpg < n.tmp + comp testimg.ppm testoutp.ppm < n.tmp + comp testimgp.jpg testoutp.jpg < n.tmp + comp testorig.jpg testoutt.jpg < n.tmp + del n.tmp +!endif + + +jaricom.obj: jaricom.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcarith.obj: jcarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdarith.obj: jdarith.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/3rdparty/openctm/tools/jpeg/makejdep.vc6 b/3rdparty/openctm/tools/jpeg/makejdep.vc6 new file mode 100644 index 000000000..d1e3c5f90 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makejdep.vc6 @@ -0,0 +1,423 @@ +# Microsoft Developer Studio erstellte Abhängigkeitsdatei, einbezogen von jpeg.mak + +.\jaricom.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcapimin.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcapistd.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcarith.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jccoefct.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jccolor.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcdctmgr.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jchuff.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcinit.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcmainct.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcmarker.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcmaster.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcomapi.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcparam.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcprepct.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jcsample.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jctrans.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdapimin.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdapistd.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdarith.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdatadst.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\jdatasrc.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\jdcoefct.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdcolor.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jddctmgr.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdhuff.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdinput.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdmainct.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdmarker.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdmaster.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdmerge.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdpostct.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdsample.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jdtrans.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jerror.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + ".\jversion.h"\ + + +.\jfdctflt.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jfdctfst.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jfdctint.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jidctflt.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jidctfst.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jidctint.c : \ + ".\jconfig.h"\ + ".\jdct.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jmemmgr.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmemsys.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jmemnobs.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmemsys.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jquant1.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jquant2.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + + +.\jutils.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + diff --git a/3rdparty/openctm/tools/jpeg/makejdsp.vc6 b/3rdparty/openctm/tools/jpeg/makejdsp.vc6 new file mode 100644 index 000000000..ba87738a2 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makejdsp.vc6 @@ -0,0 +1,285 @@ +# Microsoft Developer Studio Project File - Name="jpeg" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=jpeg - Win32 +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "jpeg.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "jpeg.mak" CFG="jpeg - Win32" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "jpeg - Win32" (basierend auf "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# 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 "_WINDOWS" /YX /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x407 +# ADD RSC /l 0x407 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +# Begin Target + +# Name "jpeg - Win32" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\jaricom.c +# End Source File +# Begin Source File + +SOURCE=.\jcapimin.c +# End Source File +# Begin Source File + +SOURCE=.\jcapistd.c +# End Source File +# Begin Source File + +SOURCE=.\jcarith.c +# End Source File +# Begin Source File + +SOURCE=.\jccoefct.c +# End Source File +# Begin Source File + +SOURCE=.\jccolor.c +# End Source File +# Begin Source File + +SOURCE=.\jcdctmgr.c +# End Source File +# Begin Source File + +SOURCE=.\jchuff.c +# End Source File +# Begin Source File + +SOURCE=.\jcinit.c +# End Source File +# Begin Source File + +SOURCE=.\jcmainct.c +# End Source File +# Begin Source File + +SOURCE=.\jcmarker.c +# End Source File +# Begin Source File + +SOURCE=.\jcmaster.c +# End Source File +# Begin Source File + +SOURCE=.\jcomapi.c +# End Source File +# Begin Source File + +SOURCE=.\jcparam.c +# End Source File +# Begin Source File + +SOURCE=.\jcprepct.c +# End Source File +# Begin Source File + +SOURCE=.\jcsample.c +# End Source File +# Begin Source File + +SOURCE=.\jctrans.c +# End Source File +# Begin Source File + +SOURCE=.\jdapimin.c +# End Source File +# Begin Source File + +SOURCE=.\jdapistd.c +# End Source File +# Begin Source File + +SOURCE=.\jdarith.c +# End Source File +# Begin Source File + +SOURCE=.\jdatadst.c +# End Source File +# Begin Source File + +SOURCE=.\jdatasrc.c +# End Source File +# Begin Source File + +SOURCE=.\jdcoefct.c +# End Source File +# Begin Source File + +SOURCE=.\jdcolor.c +# End Source File +# Begin Source File + +SOURCE=.\jddctmgr.c +# End Source File +# Begin Source File + +SOURCE=.\jdhuff.c +# End Source File +# Begin Source File + +SOURCE=.\jdinput.c +# End Source File +# Begin Source File + +SOURCE=.\jdmainct.c +# End Source File +# Begin Source File + +SOURCE=.\jdmarker.c +# End Source File +# Begin Source File + +SOURCE=.\jdmaster.c +# End Source File +# Begin Source File + +SOURCE=.\jdmerge.c +# End Source File +# Begin Source File + +SOURCE=.\jdpostct.c +# End Source File +# Begin Source File + +SOURCE=.\jdsample.c +# End Source File +# Begin Source File + +SOURCE=.\jdtrans.c +# End Source File +# Begin Source File + +SOURCE=.\jerror.c +# End Source File +# Begin Source File + +SOURCE=.\jfdctflt.c +# End Source File +# Begin Source File + +SOURCE=.\jfdctfst.c +# End Source File +# Begin Source File + +SOURCE=.\jfdctint.c +# End Source File +# Begin Source File + +SOURCE=.\jidctflt.c +# End Source File +# Begin Source File + +SOURCE=.\jidctfst.c +# End Source File +# Begin Source File + +SOURCE=.\jidctint.c +# End Source File +# Begin Source File + +SOURCE=.\jmemmgr.c +# End Source File +# Begin Source File + +SOURCE=.\jmemnobs.c +# End Source File +# Begin Source File + +SOURCE=.\jquant1.c +# End Source File +# Begin Source File + +SOURCE=.\jquant2.c +# End Source File +# Begin Source File + +SOURCE=.\jutils.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\jconfig.h +# End Source File +# Begin Source File + +SOURCE=.\jdct.h +# End Source File +# Begin Source File + +SOURCE=.\jerror.h +# End Source File +# Begin Source File + +SOURCE=.\jinclude.h +# End Source File +# Begin Source File + +SOURCE=.\jmemsys.h +# End Source File +# Begin Source File + +SOURCE=.\jmorecfg.h +# End Source File +# Begin Source File + +SOURCE=.\jpegint.h +# End Source File +# Begin Source File + +SOURCE=.\jpeglib.h +# End Source File +# Begin Source File + +SOURCE=.\jversion.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/3rdparty/openctm/tools/jpeg/makejdsw.vc6 b/3rdparty/openctm/tools/jpeg/makejdsw.vc6 new file mode 100644 index 000000000..86c8fe5b4 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makejdsw.vc6 @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "jpeg"=".\jpeg.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/3rdparty/openctm/tools/jpeg/makejmak.vc6 b/3rdparty/openctm/tools/jpeg/makejmak.vc6 new file mode 100644 index 000000000..eff0c72c0 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makejmak.vc6 @@ -0,0 +1,425 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on jpeg.dsp +!IF "$(CFG)" == "" +CFG=jpeg - Win32 +!MESSAGE Keine Konfiguration angegeben. jpeg - Win32 wird als Standard verwendet. +!ENDIF + +!IF "$(CFG)" != "jpeg - Win32" +!MESSAGE Ungltige Konfiguration "$(CFG)" angegeben. +!MESSAGE Sie k”nnen beim Ausfhren von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "jpeg.mak" CFG="jpeg - Win32" +!MESSAGE +!MESSAGE Fr die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "jpeg - Win32" (basierend auf "Win32 (x86) Static Library") +!MESSAGE +!ERROR Eine ungltige Konfiguration wurde angegeben. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +ALL : "$(OUTDIR)\jpeg.lib" + + +CLEAN : + -@erase "$(INTDIR)\jaricom.obj" + -@erase "$(INTDIR)\jcapimin.obj" + -@erase "$(INTDIR)\jcapistd.obj" + -@erase "$(INTDIR)\jcarith.obj" + -@erase "$(INTDIR)\jccoefct.obj" + -@erase "$(INTDIR)\jccolor.obj" + -@erase "$(INTDIR)\jcdctmgr.obj" + -@erase "$(INTDIR)\jchuff.obj" + -@erase "$(INTDIR)\jcinit.obj" + -@erase "$(INTDIR)\jcmainct.obj" + -@erase "$(INTDIR)\jcmarker.obj" + -@erase "$(INTDIR)\jcmaster.obj" + -@erase "$(INTDIR)\jcomapi.obj" + -@erase "$(INTDIR)\jcparam.obj" + -@erase "$(INTDIR)\jcprepct.obj" + -@erase "$(INTDIR)\jcsample.obj" + -@erase "$(INTDIR)\jctrans.obj" + -@erase "$(INTDIR)\jdapimin.obj" + -@erase "$(INTDIR)\jdapistd.obj" + -@erase "$(INTDIR)\jdarith.obj" + -@erase "$(INTDIR)\jdatadst.obj" + -@erase "$(INTDIR)\jdatasrc.obj" + -@erase "$(INTDIR)\jdcoefct.obj" + -@erase "$(INTDIR)\jdcolor.obj" + -@erase "$(INTDIR)\jddctmgr.obj" + -@erase "$(INTDIR)\jdhuff.obj" + -@erase "$(INTDIR)\jdinput.obj" + -@erase "$(INTDIR)\jdmainct.obj" + -@erase "$(INTDIR)\jdmarker.obj" + -@erase "$(INTDIR)\jdmaster.obj" + -@erase "$(INTDIR)\jdmerge.obj" + -@erase "$(INTDIR)\jdpostct.obj" + -@erase "$(INTDIR)\jdsample.obj" + -@erase "$(INTDIR)\jdtrans.obj" + -@erase "$(INTDIR)\jerror.obj" + -@erase "$(INTDIR)\jfdctflt.obj" + -@erase "$(INTDIR)\jfdctfst.obj" + -@erase "$(INTDIR)\jfdctint.obj" + -@erase "$(INTDIR)\jidctflt.obj" + -@erase "$(INTDIR)\jidctfst.obj" + -@erase "$(INTDIR)\jidctint.obj" + -@erase "$(INTDIR)\jmemmgr.obj" + -@erase "$(INTDIR)\jmemnobs.obj" + -@erase "$(INTDIR)\jquant1.obj" + -@erase "$(INTDIR)\jquant2.obj" + -@erase "$(INTDIR)\jutils.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(OUTDIR)\jpeg.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)\jpeg.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +RSC=rc.exe +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\jpeg.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\jpeg.lib" +LIB32_OBJS= \ + "$(INTDIR)\jaricom.obj" \ + "$(INTDIR)\jcapimin.obj" \ + "$(INTDIR)\jcapistd.obj" \ + "$(INTDIR)\jcarith.obj" \ + "$(INTDIR)\jccoefct.obj" \ + "$(INTDIR)\jccolor.obj" \ + "$(INTDIR)\jcdctmgr.obj" \ + "$(INTDIR)\jchuff.obj" \ + "$(INTDIR)\jcinit.obj" \ + "$(INTDIR)\jcmainct.obj" \ + "$(INTDIR)\jcmarker.obj" \ + "$(INTDIR)\jcmaster.obj" \ + "$(INTDIR)\jcomapi.obj" \ + "$(INTDIR)\jcparam.obj" \ + "$(INTDIR)\jcprepct.obj" \ + "$(INTDIR)\jcsample.obj" \ + "$(INTDIR)\jctrans.obj" \ + "$(INTDIR)\jdapimin.obj" \ + "$(INTDIR)\jdapistd.obj" \ + "$(INTDIR)\jdarith.obj" \ + "$(INTDIR)\jdatadst.obj" \ + "$(INTDIR)\jdatasrc.obj" \ + "$(INTDIR)\jdcoefct.obj" \ + "$(INTDIR)\jdcolor.obj" \ + "$(INTDIR)\jddctmgr.obj" \ + "$(INTDIR)\jdhuff.obj" \ + "$(INTDIR)\jdinput.obj" \ + "$(INTDIR)\jdmainct.obj" \ + "$(INTDIR)\jdmarker.obj" \ + "$(INTDIR)\jdmaster.obj" \ + "$(INTDIR)\jdmerge.obj" \ + "$(INTDIR)\jdpostct.obj" \ + "$(INTDIR)\jdsample.obj" \ + "$(INTDIR)\jdtrans.obj" \ + "$(INTDIR)\jerror.obj" \ + "$(INTDIR)\jfdctflt.obj" \ + "$(INTDIR)\jfdctfst.obj" \ + "$(INTDIR)\jfdctint.obj" \ + "$(INTDIR)\jidctflt.obj" \ + "$(INTDIR)\jidctfst.obj" \ + "$(INTDIR)\jidctint.obj" \ + "$(INTDIR)\jmemmgr.obj" \ + "$(INTDIR)\jmemnobs.obj" \ + "$(INTDIR)\jquant1.obj" \ + "$(INTDIR)\jquant2.obj" \ + "$(INTDIR)\jutils.obj" + +"$(OUTDIR)\jpeg.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("jpeg.dep") +!INCLUDE "jpeg.dep" +!ELSE +!MESSAGE Warning: cannot find "jpeg.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "jpeg - Win32" +SOURCE=.\jaricom.c + +"$(INTDIR)\jaricom.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcapimin.c + +"$(INTDIR)\jcapimin.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcapistd.c + +"$(INTDIR)\jcapistd.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcarith.c + +"$(INTDIR)\jcarith.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jccoefct.c + +"$(INTDIR)\jccoefct.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jccolor.c + +"$(INTDIR)\jccolor.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcdctmgr.c + +"$(INTDIR)\jcdctmgr.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jchuff.c + +"$(INTDIR)\jchuff.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcinit.c + +"$(INTDIR)\jcinit.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcmainct.c + +"$(INTDIR)\jcmainct.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcmarker.c + +"$(INTDIR)\jcmarker.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcmaster.c + +"$(INTDIR)\jcmaster.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcomapi.c + +"$(INTDIR)\jcomapi.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcparam.c + +"$(INTDIR)\jcparam.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcprepct.c + +"$(INTDIR)\jcprepct.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jcsample.c + +"$(INTDIR)\jcsample.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jctrans.c + +"$(INTDIR)\jctrans.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdapimin.c + +"$(INTDIR)\jdapimin.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdapistd.c + +"$(INTDIR)\jdapistd.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdarith.c + +"$(INTDIR)\jdarith.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdatadst.c + +"$(INTDIR)\jdatadst.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdatasrc.c + +"$(INTDIR)\jdatasrc.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdcoefct.c + +"$(INTDIR)\jdcoefct.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdcolor.c + +"$(INTDIR)\jdcolor.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jddctmgr.c + +"$(INTDIR)\jddctmgr.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdhuff.c + +"$(INTDIR)\jdhuff.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdinput.c + +"$(INTDIR)\jdinput.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdmainct.c + +"$(INTDIR)\jdmainct.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdmarker.c + +"$(INTDIR)\jdmarker.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdmaster.c + +"$(INTDIR)\jdmaster.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdmerge.c + +"$(INTDIR)\jdmerge.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdpostct.c + +"$(INTDIR)\jdpostct.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdsample.c + +"$(INTDIR)\jdsample.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jdtrans.c + +"$(INTDIR)\jdtrans.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jerror.c + +"$(INTDIR)\jerror.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jfdctflt.c + +"$(INTDIR)\jfdctflt.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jfdctfst.c + +"$(INTDIR)\jfdctfst.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jfdctint.c + +"$(INTDIR)\jfdctint.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jidctflt.c + +"$(INTDIR)\jidctflt.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jidctfst.c + +"$(INTDIR)\jidctfst.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jidctint.c + +"$(INTDIR)\jidctint.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jmemmgr.c + +"$(INTDIR)\jmemmgr.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jmemnobs.c + +"$(INTDIR)\jmemnobs.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jquant1.c + +"$(INTDIR)\jquant1.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jquant2.c + +"$(INTDIR)\jquant2.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jutils.c + +"$(INTDIR)\jutils.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/3rdparty/openctm/tools/jpeg/makejsln.vc9 b/3rdparty/openctm/tools/jpeg/makejsln.vc9 new file mode 100644 index 000000000..093e68644 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makejsln.vc9 @@ -0,0 +1,17 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg", "jpeg.vcproj", "{E61592E1-28F4-4AFC-9EE1-9BE833A061C1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E61592E1-28F4-4AFC-9EE1-9BE833A061C1}.Release|Win32.ActiveCfg = Release|Win32 + {E61592E1-28F4-4AFC-9EE1-9BE833A061C1}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/3rdparty/openctm/tools/jpeg/makejvcp.vc9 b/3rdparty/openctm/tools/jpeg/makejvcp.vc9 new file mode 100644 index 000000000..df35717c2 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makejvcp.vc9 @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/jpeg/makeproj.mac b/3rdparty/openctm/tools/jpeg/makeproj.mac new file mode 100644 index 000000000..4c01e15ba --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makeproj.mac @@ -0,0 +1,213 @@ +-- +-- makeproj.mac +-- +-- This AppleScript builds Code Warrior PRO Release 2 project files for the +-- libjpeg library as well as the test programs 'cjpeg', 'djpeg', 'jpegtran'. +-- (We'd distribute real project files, except they're not text +-- and would create maintenance headaches.) +-- +-- The script then compiles and links the library and the test programs. +-- NOTE: if you haven't already created a 'jconfig.h' file, the script +-- automatically copies 'jconfig.mac' to 'jconfig.h'. +-- +-- To use this script, you must have AppleScript 1.1 or later installed +-- and a suitable AppleScript editor like Script Editor or Script Debugger +-- (http://www.latenightsw.com). Open this file with your AppleScript +-- editor and execute the "run" command to build the projects. +-- +-- Thanks to Dan Sears and Don Agro for this script. +-- Questions about this script can be addressed to dogpark@interlog.com +-- + +on run + + choose folder with prompt ">>> Select IJG source folder <<<" + set ijg_folder to result + + choose folder with prompt ">>> Select MetroWerks folder <<<" + set cw_folder to result + + -- if jconfig.h doesn't already exist, copy jconfig.mac + + tell application "Finder" + if not (exists file "jconfig.h" of ijg_folder) then + duplicate {file "jconfig.mac" of folder ijg_folder} + select file "jconfig.mac copy" of folder ijg_folder + set name of selection to "jconfig.h" + end if + end tell + + tell application "CodeWarrior IDE 2.1" + with timeout of 10000 seconds + + -- create libjpeg project + + activate + Create Project (ijg_folder as string) & "libjpeg.proj" + Set Preferences of panel "Target Settings" to {Target Name:"libjpeg"} + Set Preferences of panel "PPC Project" to {File Name:"libjpeg"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "PPC Project" to {Project Type:library} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "jaricom.c" To Segment 1 + Add Files (ijg_folder as string) & "jcapimin.c" To Segment 1 + Add Files (ijg_folder as string) & "jcapistd.c" To Segment 1 + Add Files (ijg_folder as string) & "jcarith.c" To Segment 1 + Add Files (ijg_folder as string) & "jctrans.c" To Segment 1 + Add Files (ijg_folder as string) & "jcparam.c" To Segment 1 + Add Files (ijg_folder as string) & "jdatadst.c" To Segment 1 + Add Files (ijg_folder as string) & "jcinit.c" To Segment 1 + Add Files (ijg_folder as string) & "jcmaster.c" To Segment 1 + Add Files (ijg_folder as string) & "jcmarker.c" To Segment 1 + Add Files (ijg_folder as string) & "jcmainct.c" To Segment 1 + Add Files (ijg_folder as string) & "jcprepct.c" To Segment 1 + Add Files (ijg_folder as string) & "jccoefct.c" To Segment 1 + Add Files (ijg_folder as string) & "jccolor.c" To Segment 1 + Add Files (ijg_folder as string) & "jcsample.c" To Segment 1 + Add Files (ijg_folder as string) & "jchuff.c" To Segment 1 + Add Files (ijg_folder as string) & "jcdctmgr.c" To Segment 1 + Add Files (ijg_folder as string) & "jfdctfst.c" To Segment 1 + Add Files (ijg_folder as string) & "jfdctflt.c" To Segment 1 + Add Files (ijg_folder as string) & "jfdctint.c" To Segment 1 + Add Files (ijg_folder as string) & "jdapimin.c" To Segment 1 + Add Files (ijg_folder as string) & "jdapistd.c" To Segment 1 + Add Files (ijg_folder as string) & "jdarith.c" To Segment 1 + Add Files (ijg_folder as string) & "jdtrans.c" To Segment 1 + Add Files (ijg_folder as string) & "jdatasrc.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmaster.c" To Segment 1 + Add Files (ijg_folder as string) & "jdinput.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmarker.c" To Segment 1 + Add Files (ijg_folder as string) & "jdhuff.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmainct.c" To Segment 1 + Add Files (ijg_folder as string) & "jdcoefct.c" To Segment 1 + Add Files (ijg_folder as string) & "jdpostct.c" To Segment 1 + Add Files (ijg_folder as string) & "jddctmgr.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctfst.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctflt.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctint.c" To Segment 1 + Add Files (ijg_folder as string) & "jdsample.c" To Segment 1 + Add Files (ijg_folder as string) & "jdcolor.c" To Segment 1 + Add Files (ijg_folder as string) & "jquant1.c" To Segment 1 + Add Files (ijg_folder as string) & "jquant2.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmerge.c" To Segment 1 + Add Files (ijg_folder as string) & "jcomapi.c" To Segment 1 + Add Files (ijg_folder as string) & "jutils.c" To Segment 1 + Add Files (ijg_folder as string) & "jerror.c" To Segment 1 + Add Files (ijg_folder as string) & "jmemmgr.c" To Segment 1 + Add Files (ijg_folder as string) & "jmemmac.c" To Segment 1 + + -- compile and link the library + + Make Project + Close Project + + -- create cjpeg project + + activate + Create Project (ijg_folder as string) & "cjpeg.proj" + Set Preferences of panel "Target Settings" to {Target Name:"cjpeg"} + Set Preferences of panel "PPC Project" to {File Name:"cjpeg"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "cjpeg.c" To Segment 1 + Add Files (ijg_folder as string) & "rdppm.c" To Segment 1 + Add Files (ijg_folder as string) & "rdgif.c" To Segment 1 + Add Files (ijg_folder as string) & "rdtarga.c" To Segment 1 + Add Files (ijg_folder as string) & "rdrle.c" To Segment 1 + Add Files (ijg_folder as string) & "rdbmp.c" To Segment 1 + Add Files (ijg_folder as string) & "rdswitch.c" To Segment 1 + Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 + + Add Files (ijg_folder as string) & "libjpeg" To Segment 2 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 + + -- compile and link cjpeg + + Make Project + Close Project + + -- create djpeg project + + activate + Create Project (ijg_folder as string) & "djpeg.proj" + Set Preferences of panel "Target Settings" to {Target Name:"djpeg"} + Set Preferences of panel "PPC Project" to {File Name:"djpeg"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "djpeg.c" To Segment 1 + Add Files (ijg_folder as string) & "wrppm.c" To Segment 1 + Add Files (ijg_folder as string) & "wrgif.c" To Segment 1 + Add Files (ijg_folder as string) & "wrtarga.c" To Segment 1 + Add Files (ijg_folder as string) & "wrrle.c" To Segment 1 + Add Files (ijg_folder as string) & "wrbmp.c" To Segment 1 + Add Files (ijg_folder as string) & "rdcolmap.c" To Segment 1 + Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 + + Add Files (ijg_folder as string) & "libjpeg" To Segment 2 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 + + -- compile and link djpeg + + Make Project + Close Project + + -- create jpegtran project + + activate + Create Project (ijg_folder as string) & "jpegtran.proj" + Set Preferences of panel "Target Settings" to {Target Name:"jpegtran"} + Set Preferences of panel "PPC Project" to {File Name:"jpegtran"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "jpegtran.c" To Segment 1 + Add Files (ijg_folder as string) & "rdswitch.c" To Segment 1 + Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 + Add Files (ijg_folder as string) & "transupp.c" To Segment 1 + + Add Files (ijg_folder as string) & "libjpeg" To Segment 2 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 + + -- compile and link jpegtran + + Make Project + Close Project + + quit + + end timeout + end tell +end run diff --git a/3rdparty/openctm/tools/jpeg/makerdep.vc6 b/3rdparty/openctm/tools/jpeg/makerdep.vc6 new file mode 100644 index 000000000..27052b049 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makerdep.vc6 @@ -0,0 +1,6 @@ +# Microsoft Developer Studio erstellte Abhängigkeitsdatei, einbezogen von rdjpgcom.mak + +.\rdjpgcom.c : \ + ".\jconfig.h"\ + ".\jinclude.h"\ + diff --git a/3rdparty/openctm/tools/jpeg/makerdsp.vc6 b/3rdparty/openctm/tools/jpeg/makerdsp.vc6 new file mode 100644 index 000000000..f62700ecf --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makerdsp.vc6 @@ -0,0 +1,78 @@ +# Microsoft Developer Studio Project File - Name="rdjpgcom" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=rdjpgcom - Win32 +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "rdjpgcom.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "rdjpgcom.mak" CFG="rdjpgcom - Win32" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "rdjpgcom - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\rdjpgcom\Release" +# PROP BASE Intermediate_Dir ".\rdjpgcom\Release" +# PROP BASE Target_Dir ".\rdjpgcom" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\rdjpgcom\Release" +# PROP Intermediate_Dir ".\rdjpgcom\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir ".\rdjpgcom" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# Begin Target + +# Name "rdjpgcom - Win32" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\rdjpgcom.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\jconfig.h +# End Source File +# Begin Source File + +SOURCE=.\jinclude.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/3rdparty/openctm/tools/jpeg/makermak.vc6 b/3rdparty/openctm/tools/jpeg/makermak.vc6 new file mode 100644 index 000000000..ac76914c6 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makermak.vc6 @@ -0,0 +1,110 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on rdjpgcom.dsp +!IF "$(CFG)" == "" +CFG=rdjpgcom - Win32 +!MESSAGE Keine Konfiguration angegeben. rdjpgcom - Win32 wird als Standard verwendet. +!ENDIF + +!IF "$(CFG)" != "rdjpgcom - Win32" +!MESSAGE Ungltige Konfiguration "$(CFG)" angegeben. +!MESSAGE Sie k”nnen beim Ausfhren von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "rdjpgcom.mak" CFG="rdjpgcom - Win32" +!MESSAGE +!MESSAGE Fr die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "rdjpgcom - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE +!ERROR Eine ungltige Konfiguration wurde angegeben. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe +OUTDIR=.\rdjpgcom\Release +INTDIR=.\rdjpgcom\Release +# Begin Custom Macros +OutDir=.\rdjpgcom\Release +# End Custom Macros + +ALL : "$(OUTDIR)\rdjpgcom.exe" + + +CLEAN : + -@erase "$(INTDIR)\rdjpgcom.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(OUTDIR)\rdjpgcom.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\rdjpgcom.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\rdjpgcom.pdb" /machine:I386 /out:"$(OUTDIR)\rdjpgcom.exe" +LINK32_OBJS= \ + "$(INTDIR)\rdjpgcom.obj" + +"$(OUTDIR)\rdjpgcom.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +CPP_PROJ=/nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fp"$(INTDIR)\rdjpgcom.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("rdjpgcom.dep") +!INCLUDE "rdjpgcom.dep" +!ELSE +!MESSAGE Warning: cannot find "rdjpgcom.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "rdjpgcom - Win32" +SOURCE=.\rdjpgcom.c + +"$(INTDIR)\rdjpgcom.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/3rdparty/openctm/tools/jpeg/makervcp.vc9 b/3rdparty/openctm/tools/jpeg/makervcp.vc9 new file mode 100644 index 000000000..a99648125 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makervcp.vc9 @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/jpeg/maketdep.vc6 b/3rdparty/openctm/tools/jpeg/maketdep.vc6 new file mode 100644 index 000000000..ee26cf177 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/maketdep.vc6 @@ -0,0 +1,43 @@ +# Microsoft Developer Studio erstellte Abhängigkeitsdatei, einbezogen von jpegtran.mak + +.\cdjpeg.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\jpegtran.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + ".\jversion.h"\ + ".\transupp.h"\ + + +.\rdswitch.c : \ + ".\cderror.h"\ + ".\cdjpeg.h"\ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpeglib.h"\ + + +.\transupp.c : \ + ".\jconfig.h"\ + ".\jerror.h"\ + ".\jinclude.h"\ + ".\jmorecfg.h"\ + ".\jpegint.h"\ + ".\jpeglib.h"\ + ".\transupp.h"\ + diff --git a/3rdparty/openctm/tools/jpeg/maketdsp.vc6 b/3rdparty/openctm/tools/jpeg/maketdsp.vc6 new file mode 100644 index 000000000..4df6026fb --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/maketdsp.vc6 @@ -0,0 +1,122 @@ +# Microsoft Developer Studio Project File - Name="jpegtran" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=jpegtran - Win32 +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "jpegtran.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "jpegtran.mak" CFG="jpegtran - Win32" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "jpegtran - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\jpegtran\Release" +# PROP BASE Intermediate_Dir ".\jpegtran\Release" +# PROP BASE Target_Dir ".\jpegtran" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\jpegtran\Release" +# PROP Intermediate_Dir ".\jpegtran\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir ".\jpegtran" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# Begin Target + +# Name "jpegtran - Win32" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cdjpeg.c +# End Source File +# Begin Source File + +SOURCE=.\jpegtran.c +# End Source File +# Begin Source File + +SOURCE=.\rdswitch.c +# End Source File +# Begin Source File + +SOURCE=.\transupp.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\cderror.h +# End Source File +# Begin Source File + +SOURCE=.\cdjpeg.h +# End Source File +# Begin Source File + +SOURCE=.\jconfig.h +# End Source File +# Begin Source File + +SOURCE=.\jerror.h +# End Source File +# Begin Source File + +SOURCE=.\jinclude.h +# End Source File +# Begin Source File + +SOURCE=.\jmorecfg.h +# End Source File +# Begin Source File + +SOURCE=.\jpegint.h +# End Source File +# Begin Source File + +SOURCE=.\jpeglib.h +# End Source File +# Begin Source File + +SOURCE=.\jversion.h +# End Source File +# Begin Source File + +SOURCE=.\transupp.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/3rdparty/openctm/tools/jpeg/maketmak.vc6 b/3rdparty/openctm/tools/jpeg/maketmak.vc6 new file mode 100644 index 000000000..3f35c2814 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/maketmak.vc6 @@ -0,0 +1,131 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on jpegtran.dsp +!IF "$(CFG)" == "" +CFG=jpegtran - Win32 +!MESSAGE Keine Konfiguration angegeben. jpegtran - Win32 wird als Standard verwendet. +!ENDIF + +!IF "$(CFG)" != "jpegtran - Win32" +!MESSAGE Ungltige Konfiguration "$(CFG)" angegeben. +!MESSAGE Sie k”nnen beim Ausfhren von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "jpegtran.mak" CFG="jpegtran - Win32" +!MESSAGE +!MESSAGE Fr die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "jpegtran - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE +!ERROR Eine ungltige Konfiguration wurde angegeben. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe +OUTDIR=.\jpegtran\Release +INTDIR=.\jpegtran\Release +# Begin Custom Macros +OutDir=.\jpegtran\Release +# End Custom Macros + +ALL : "$(OUTDIR)\jpegtran.exe" + + +CLEAN : + -@erase "$(INTDIR)\cdjpeg.obj" + -@erase "$(INTDIR)\jpegtran.obj" + -@erase "$(INTDIR)\rdswitch.obj" + -@erase "$(INTDIR)\transupp.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(OUTDIR)\jpegtran.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\jpegtran.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\jpegtran.pdb" /machine:I386 /out:"$(OUTDIR)\jpegtran.exe" +LINK32_OBJS= \ + "$(INTDIR)\cdjpeg.obj" \ + "$(INTDIR)\jpegtran.obj" \ + "$(INTDIR)\rdswitch.obj" \ + "$(INTDIR)\transupp.obj" + +"$(OUTDIR)\jpegtran.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +CPP_PROJ=/nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fp"$(INTDIR)\jpegtran.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("jpegtran.dep") +!INCLUDE "jpegtran.dep" +!ELSE +!MESSAGE Warning: cannot find "jpegtran.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "jpegtran - Win32" +SOURCE=.\cdjpeg.c + +"$(INTDIR)\cdjpeg.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\jpegtran.c + +"$(INTDIR)\jpegtran.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\rdswitch.c + +"$(INTDIR)\rdswitch.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\transupp.c + +"$(INTDIR)\transupp.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/3rdparty/openctm/tools/jpeg/maketvcp.vc9 b/3rdparty/openctm/tools/jpeg/maketvcp.vc9 new file mode 100644 index 000000000..6fd2271b9 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/maketvcp.vc9 @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/jpeg/makewdep.vc6 b/3rdparty/openctm/tools/jpeg/makewdep.vc6 new file mode 100644 index 000000000..7dd081fd2 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makewdep.vc6 @@ -0,0 +1,6 @@ +# Microsoft Developer Studio erstellte Abhängigkeitsdatei, einbezogen von wrjpgcom.mak + +.\wrjpgcom.c : \ + ".\jconfig.h"\ + ".\jinclude.h"\ + diff --git a/3rdparty/openctm/tools/jpeg/makewdsp.vc6 b/3rdparty/openctm/tools/jpeg/makewdsp.vc6 new file mode 100644 index 000000000..f625aecaf --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makewdsp.vc6 @@ -0,0 +1,78 @@ +# Microsoft Developer Studio Project File - Name="wrjpgcom" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=wrjpgcom - Win32 +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "wrjpgcom.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "wrjpgcom.mak" CFG="wrjpgcom - Win32" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "wrjpgcom - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\wrjpgcom\Release" +# PROP BASE Intermediate_Dir ".\wrjpgcom\Release" +# PROP BASE Target_Dir ".\wrjpgcom" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\wrjpgcom\Release" +# PROP Intermediate_Dir ".\wrjpgcom\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir ".\wrjpgcom" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# Begin Target + +# Name "wrjpgcom - Win32" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\wrjpgcom.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\jconfig.h +# End Source File +# Begin Source File + +SOURCE=.\jinclude.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/3rdparty/openctm/tools/jpeg/makewmak.vc6 b/3rdparty/openctm/tools/jpeg/makewmak.vc6 new file mode 100644 index 000000000..89ed55544 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makewmak.vc6 @@ -0,0 +1,110 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on wrjpgcom.dsp +!IF "$(CFG)" == "" +CFG=wrjpgcom - Win32 +!MESSAGE Keine Konfiguration angegeben. wrjpgcom - Win32 wird als Standard verwendet. +!ENDIF + +!IF "$(CFG)" != "wrjpgcom - Win32" +!MESSAGE Ungltige Konfiguration "$(CFG)" angegeben. +!MESSAGE Sie k”nnen beim Ausfhren von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "wrjpgcom.mak" CFG="wrjpgcom - Win32" +!MESSAGE +!MESSAGE Fr die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "wrjpgcom - Win32" (basierend auf "Win32 (x86) Console Application") +!MESSAGE +!ERROR Eine ungltige Konfiguration wurde angegeben. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe +OUTDIR=.\wrjpgcom\Release +INTDIR=.\wrjpgcom\Release +# Begin Custom Macros +OutDir=.\wrjpgcom\Release +# End Custom Macros + +ALL : "$(OUTDIR)\wrjpgcom.exe" + + +CLEAN : + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\wrjpgcom.obj" + -@erase "$(OUTDIR)\wrjpgcom.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\wrjpgcom.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\wrjpgcom.pdb" /machine:I386 /out:"$(OUTDIR)\wrjpgcom.exe" +LINK32_OBJS= \ + "$(INTDIR)\wrjpgcom.obj" + +"$(OUTDIR)\wrjpgcom.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +CPP_PROJ=/nologo /G6 /MT /W3 /GX /Ox /Oa /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fp"$(INTDIR)\wrjpgcom.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("wrjpgcom.dep") +!INCLUDE "wrjpgcom.dep" +!ELSE +!MESSAGE Warning: cannot find "wrjpgcom.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "wrjpgcom - Win32" +SOURCE=.\wrjpgcom.c + +"$(INTDIR)\wrjpgcom.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/3rdparty/openctm/tools/jpeg/makewvcp.vc9 b/3rdparty/openctm/tools/jpeg/makewvcp.vc9 new file mode 100644 index 000000000..50a72a06b --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makewvcp.vc9 @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3rdparty/openctm/tools/jpeg/makljpeg.st b/3rdparty/openctm/tools/jpeg/makljpeg.st new file mode 100644 index 000000000..0720fb553 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makljpeg.st @@ -0,0 +1,68 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle, B. Setzepfandt, and Guido Vollbeding. +; +; To use this file, rename it to libjpeg.prj. +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +libjpeg.lib +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost +.L[-J] ; link new Obj-format (so we get a library) += +; * * * * List of modules * * * * +jaricom.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcapimin.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcapistd.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcarith.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jccoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jccolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcdctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jchuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcinit.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcomapi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcparam.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcprepct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jctrans.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdapimin.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdapistd.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdarith.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdatadst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) +jdatasrc.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) +jdcoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdcolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jddctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jdhuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdinput.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmerge.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdpostct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdtrans.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jerror.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jversion.h,jerror.h) +jfdctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jfdctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jfdctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jquant1.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jquant2.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jutils.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jmemmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) +jmemansi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) diff --git a/3rdparty/openctm/tools/jpeg/maktjpeg.st b/3rdparty/openctm/tools/jpeg/maktjpeg.st new file mode 100644 index 000000000..25ce9266d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/maktjpeg.st @@ -0,0 +1,30 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle, B. Setzepfandt, and Guido Vollbeding. +; +; To use this file, rename it to jpegtran.prj. +; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +jpegtran.ttp +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost += +; * * * * List of modules * * * * +pcstart.o +jpegtran.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,transupp.h,jversion.h) +cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdswitch.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +transupp.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,transupp.h) +libjpeg.lib ; built by libjpeg.prj +pcstdlib.lib ; standard library +pcextlib.lib ; extended library diff --git a/3rdparty/openctm/tools/jpeg/makvms.opt b/3rdparty/openctm/tools/jpeg/makvms.opt new file mode 100644 index 000000000..26db71422 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/makvms.opt @@ -0,0 +1,4 @@ +! A pointer to the VAX/VMS C Run-Time Shareable Library. +! This file is needed by makefile.mms and makefile.vms, +! but only for the older VAX C compiler. DEC C does not need it. +Sys$Library:VAXCRTL.EXE /Share diff --git a/3rdparty/openctm/tools/jpeg/missing b/3rdparty/openctm/tools/jpeg/missing new file mode 100644 index 000000000..23c9d2e0a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/3rdparty/openctm/tools/jpeg/rdbmp.c b/3rdparty/openctm/tools/jpeg/rdbmp.c new file mode 100644 index 000000000..4f61bcf73 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdbmp.c @@ -0,0 +1,439 @@ +/* + * rdbmp.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in Microsoft "BMP" + * format (MS Windows 3.x, OS/2 1.x, and OS/2 2.x flavors). + * Currently, only 8-bit and 24-bit images are supported, not 1-bit or + * 4-bit (feeding such low-depth images into JPEG would be silly anyway). + * Also, we don't support RLE-compressed files. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed BMP format). + * + * This code contributed by James Arthur Boucher. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef BMP_SUPPORTED + + +/* Macros to deal with unsigned chars as efficiently as compiler allows */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char U_CHAR; +#define UCH(x) ((int) (x)) +#else /* !HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char U_CHAR; +#define UCH(x) ((int) (x)) +#else +typedef char U_CHAR; +#define UCH(x) ((int) (x) & 0xFF) +#endif +#endif /* HAVE_UNSIGNED_CHAR */ + + +#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) + + +/* Private version of data source object */ + +typedef struct _bmp_source_struct * bmp_source_ptr; + +typedef struct _bmp_source_struct { + struct cjpeg_source_struct pub; /* public fields */ + + j_compress_ptr cinfo; /* back link saves passing separate parm */ + + JSAMPARRAY colormap; /* BMP colormap (converted to my format) */ + + jvirt_sarray_ptr whole_image; /* Needed to reverse row order */ + JDIMENSION source_row; /* Current source row number */ + JDIMENSION row_width; /* Physical width of scanlines in file */ + + int bits_per_pixel; /* remembers 8- or 24-bit format */ +} bmp_source_struct; + + +LOCAL(int) +read_byte (bmp_source_ptr sinfo) +/* Read next byte from BMP file */ +{ + register FILE *infile = sinfo->pub.input_file; + register int c; + + if ((c = getc(infile)) == EOF) + ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); + return c; +} + + +LOCAL(void) +read_colormap (bmp_source_ptr sinfo, int cmaplen, int mapentrysize) +/* Read the colormap from a BMP file */ +{ + int i; + + switch (mapentrysize) { + case 3: + /* BGR format (occurs in OS/2 files) */ + for (i = 0; i < cmaplen; i++) { + sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); + } + break; + case 4: + /* BGR0 format (occurs in MS Windows files) */ + for (i = 0; i < cmaplen; i++) { + sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); + (void) read_byte(sinfo); + } + break; + default: + ERREXIT(sinfo->cinfo, JERR_BMP_BADCMAP); + break; + } +} + + +/* + * Read one row of pixels. + * The image has been read into the whole_image array, but is otherwise + * unprocessed. We must read it out in top-to-bottom row order, and if + * it is an 8-bit image, we must expand colormapped pixels to 24bit format. + */ + +METHODDEF(JDIMENSION) +get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 8-bit colormap indexes */ +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + register JSAMPARRAY colormap = source->colormap; + JSAMPARRAY image_ptr; + register int t; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + + /* Fetch next row from virtual array */ + source->source_row--; + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + source->source_row, (JDIMENSION) 1, FALSE); + + /* Expand the colormap indexes to real data */ + inptr = image_ptr[0]; + outptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + t = GETJSAMPLE(*inptr++); + *outptr++ = colormap[0][t]; /* can omit GETJSAMPLE() safely */ + *outptr++ = colormap[1][t]; + *outptr++ = colormap[2][t]; + } + + return 1; +} + + +METHODDEF(JDIMENSION) +get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 24-bit pixels */ +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + JSAMPARRAY image_ptr; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + + /* Fetch next row from virtual array */ + source->source_row--; + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + source->source_row, (JDIMENSION) 1, FALSE); + + /* Transfer data. Note source values are in BGR order + * (even though Microsoft's own documents say the opposite). + */ + inptr = image_ptr[0]; + outptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ + outptr[1] = *inptr++; + outptr[0] = *inptr++; + outptr += 3; + } + + return 1; +} + + +/* + * This method loads the image into whole_image during the first call on + * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call + * get_8bit_row or get_24bit_row on subsequent calls. + */ + +METHODDEF(JDIMENSION) +preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + register FILE *infile = source->pub.input_file; + register int c; + register JSAMPROW out_ptr; + JSAMPARRAY image_ptr; + JDIMENSION row, col; + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + + /* Read the data into a virtual array in input-file row order. */ + for (row = 0; row < cinfo->image_height; row++) { + if (progress != NULL) { + progress->pub.pass_counter = (long) row; + progress->pub.pass_limit = (long) cinfo->image_height; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + row, (JDIMENSION) 1, TRUE); + out_ptr = image_ptr[0]; + for (col = source->row_width; col > 0; col--) { + /* inline copy of read_byte() for speed */ + if ((c = getc(infile)) == EOF) + ERREXIT(cinfo, JERR_INPUT_EOF); + *out_ptr++ = (JSAMPLE) c; + } + } + if (progress != NULL) + progress->completed_extra_passes++; + + /* Set up to read from the virtual array in top-to-bottom order */ + switch (source->bits_per_pixel) { + case 8: + source->pub.get_pixel_rows = get_8bit_row; + break; + case 24: + source->pub.get_pixel_rows = get_24bit_row; + break; + default: + ERREXIT(cinfo, JERR_BMP_BADDEPTH); + } + source->source_row = cinfo->image_height; + + /* And read the first row */ + return (*source->pub.get_pixel_rows) (cinfo, sinfo); +} + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + U_CHAR bmpfileheader[14]; + U_CHAR bmpinfoheader[64]; +#define GET_2B(array,offset) ((unsigned int) UCH(array[offset]) + \ + (((unsigned int) UCH(array[offset+1])) << 8)) +#define GET_4B(array,offset) ((INT32) UCH(array[offset]) + \ + (((INT32) UCH(array[offset+1])) << 8) + \ + (((INT32) UCH(array[offset+2])) << 16) + \ + (((INT32) UCH(array[offset+3])) << 24)) + INT32 bfOffBits; + INT32 headerSize; + INT32 biWidth = 0; /* initialize to avoid compiler warning */ + INT32 biHeight = 0; + unsigned int biPlanes; + INT32 biCompression; + INT32 biXPelsPerMeter,biYPelsPerMeter; + INT32 biClrUsed = 0; + int mapentrysize = 0; /* 0 indicates no colormap */ + INT32 bPad; + JDIMENSION row_width; + + /* Read and verify the bitmap file header */ + if (! ReadOK(source->pub.input_file, bmpfileheader, 14)) + ERREXIT(cinfo, JERR_INPUT_EOF); + if (GET_2B(bmpfileheader,0) != 0x4D42) /* 'BM' */ + ERREXIT(cinfo, JERR_BMP_NOT); + bfOffBits = (INT32) GET_4B(bmpfileheader,10); + /* We ignore the remaining fileheader fields */ + + /* The infoheader might be 12 bytes (OS/2 1.x), 40 bytes (Windows), + * or 64 bytes (OS/2 2.x). Check the first 4 bytes to find out which. + */ + if (! ReadOK(source->pub.input_file, bmpinfoheader, 4)) + ERREXIT(cinfo, JERR_INPUT_EOF); + headerSize = (INT32) GET_4B(bmpinfoheader,0); + if (headerSize < 12 || headerSize > 64) + ERREXIT(cinfo, JERR_BMP_BADHEADER); + if (! ReadOK(source->pub.input_file, bmpinfoheader+4, headerSize-4)) + ERREXIT(cinfo, JERR_INPUT_EOF); + + switch ((int) headerSize) { + case 12: + /* Decode OS/2 1.x header (Microsoft calls this a BITMAPCOREHEADER) */ + biWidth = (INT32) GET_2B(bmpinfoheader,4); + biHeight = (INT32) GET_2B(bmpinfoheader,6); + biPlanes = GET_2B(bmpinfoheader,8); + source->bits_per_pixel = (int) GET_2B(bmpinfoheader,10); + + switch (source->bits_per_pixel) { + case 8: /* colormapped image */ + mapentrysize = 3; /* OS/2 uses RGBTRIPLE colormap */ + TRACEMS2(cinfo, 1, JTRC_BMP_OS2_MAPPED, (int) biWidth, (int) biHeight); + break; + case 24: /* RGB image */ + TRACEMS2(cinfo, 1, JTRC_BMP_OS2, (int) biWidth, (int) biHeight); + break; + default: + ERREXIT(cinfo, JERR_BMP_BADDEPTH); + break; + } + if (biPlanes != 1) + ERREXIT(cinfo, JERR_BMP_BADPLANES); + break; + case 40: + case 64: + /* Decode Windows 3.x header (Microsoft calls this a BITMAPINFOHEADER) */ + /* or OS/2 2.x header, which has additional fields that we ignore */ + biWidth = GET_4B(bmpinfoheader,4); + biHeight = GET_4B(bmpinfoheader,8); + biPlanes = GET_2B(bmpinfoheader,12); + source->bits_per_pixel = (int) GET_2B(bmpinfoheader,14); + biCompression = GET_4B(bmpinfoheader,16); + biXPelsPerMeter = GET_4B(bmpinfoheader,24); + biYPelsPerMeter = GET_4B(bmpinfoheader,28); + biClrUsed = GET_4B(bmpinfoheader,32); + /* biSizeImage, biClrImportant fields are ignored */ + + switch (source->bits_per_pixel) { + case 8: /* colormapped image */ + mapentrysize = 4; /* Windows uses RGBQUAD colormap */ + TRACEMS2(cinfo, 1, JTRC_BMP_MAPPED, (int) biWidth, (int) biHeight); + break; + case 24: /* RGB image */ + TRACEMS2(cinfo, 1, JTRC_BMP, (int) biWidth, (int) biHeight); + break; + default: + ERREXIT(cinfo, JERR_BMP_BADDEPTH); + break; + } + if (biPlanes != 1) + ERREXIT(cinfo, JERR_BMP_BADPLANES); + if (biCompression != 0) + ERREXIT(cinfo, JERR_BMP_COMPRESSED); + + if (biXPelsPerMeter > 0 && biYPelsPerMeter > 0) { + /* Set JFIF density parameters from the BMP data */ + cinfo->X_density = (UINT16) (biXPelsPerMeter/100); /* 100 cm per meter */ + cinfo->Y_density = (UINT16) (biYPelsPerMeter/100); + cinfo->density_unit = 2; /* dots/cm */ + } + break; + default: + ERREXIT(cinfo, JERR_BMP_BADHEADER); + break; + } + + /* Compute distance to bitmap data --- will adjust for colormap below */ + bPad = bfOffBits - (headerSize + 14); + + /* Read the colormap, if any */ + if (mapentrysize > 0) { + if (biClrUsed <= 0) + biClrUsed = 256; /* assume it's 256 */ + else if (biClrUsed > 256) + ERREXIT(cinfo, JERR_BMP_BADCMAP); + /* Allocate space to store the colormap */ + source->colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) biClrUsed, (JDIMENSION) 3); + /* and read it from the file */ + read_colormap(source, (int) biClrUsed, mapentrysize); + /* account for size of colormap */ + bPad -= biClrUsed * mapentrysize; + } + + /* Skip any remaining pad bytes */ + if (bPad < 0) /* incorrect bfOffBits value? */ + ERREXIT(cinfo, JERR_BMP_BADHEADER); + while (--bPad >= 0) { + (void) read_byte(source); + } + + /* Compute row width in file, including padding to 4-byte boundary */ + if (source->bits_per_pixel == 24) + row_width = (JDIMENSION) (biWidth * 3); + else + row_width = (JDIMENSION) biWidth; + while ((row_width & 3) != 0) row_width++; + source->row_width = row_width; + + /* Allocate space for inversion array, prepare for preload pass */ + source->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + row_width, (JDIMENSION) biHeight, (JDIMENSION) 1); + source->pub.get_pixel_rows = preload_image; + if (cinfo->progress != NULL) { + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + progress->total_extra_passes++; /* count file input as separate pass */ + } + + /* Allocate one-row buffer for returned data */ + source->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (biWidth * 3), (JDIMENSION) 1); + source->pub.buffer_height = 1; + + cinfo->in_color_space = JCS_RGB; + cinfo->input_components = 3; + cinfo->data_precision = 8; + cinfo->image_width = (JDIMENSION) biWidth; + cinfo->image_height = (JDIMENSION) biHeight; +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for BMP format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_bmp (j_compress_ptr cinfo) +{ + bmp_source_ptr source; + + /* Create module interface object */ + source = (bmp_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(bmp_source_struct)); + source->cinfo = cinfo; /* make back link for subroutines */ + /* Fill in method ptrs, except get_pixel_rows which start_input sets */ + source->pub.start_input = start_input_bmp; + source->pub.finish_input = finish_input_bmp; + + return (cjpeg_source_ptr) source; +} + +#endif /* BMP_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/rdcolmap.c b/3rdparty/openctm/tools/jpeg/rdcolmap.c new file mode 100644 index 000000000..eebf8346c --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdcolmap.c @@ -0,0 +1,253 @@ +/* + * rdcolmap.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file implements djpeg's "-map file" switch. It reads a source image + * and constructs a colormap to be supplied to the JPEG decompressor. + * + * Currently, these file formats are supported for the map file: + * GIF: the contents of the GIF's global colormap are used. + * PPM (either text or raw flavor): the entire file is read and + * each unique pixel value is entered in the map. + * Note that reading a large PPM file will be horrendously slow. + * Typically, a PPM-format map file should contain just one pixel + * of each desired color. Such a file can be extracted from an + * ordinary image PPM file with ppmtomap(1). + * + * Rescaling a PPM that has a maxval unequal to MAXJSAMPLE is not + * currently implemented. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ + +/* Portions of this code are based on the PBMPLUS library, which is: +** +** Copyright (C) 1988 by Jef Poskanzer. +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, provided +** that the above copyright notice appear in all copies and that both that +** copyright notice and this permission notice appear in supporting +** documentation. This software is provided "as is" without express or +** implied warranty. +*/ + + +/* + * Add a (potentially) new color to the color map. + */ + +LOCAL(void) +add_map_entry (j_decompress_ptr cinfo, int R, int G, int B) +{ + JSAMPROW colormap0 = cinfo->colormap[0]; + JSAMPROW colormap1 = cinfo->colormap[1]; + JSAMPROW colormap2 = cinfo->colormap[2]; + int ncolors = cinfo->actual_number_of_colors; + int index; + + /* Check for duplicate color. */ + for (index = 0; index < ncolors; index++) { + if (GETJSAMPLE(colormap0[index]) == R && + GETJSAMPLE(colormap1[index]) == G && + GETJSAMPLE(colormap2[index]) == B) + return; /* color is already in map */ + } + + /* Check for map overflow. */ + if (ncolors >= (MAXJSAMPLE+1)) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, (MAXJSAMPLE+1)); + + /* OK, add color to map. */ + colormap0[ncolors] = (JSAMPLE) R; + colormap1[ncolors] = (JSAMPLE) G; + colormap2[ncolors] = (JSAMPLE) B; + cinfo->actual_number_of_colors++; +} + + +/* + * Extract color map from a GIF file. + */ + +LOCAL(void) +read_gif_map (j_decompress_ptr cinfo, FILE * infile) +{ + int header[13]; + int i, colormaplen; + int R, G, B; + + /* Initial 'G' has already been read by read_color_map */ + /* Read the rest of the GIF header and logical screen descriptor */ + for (i = 1; i < 13; i++) { + if ((header[i] = getc(infile)) == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + } + + /* Verify GIF Header */ + if (header[1] != 'I' || header[2] != 'F') + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + /* There must be a global color map. */ + if ((header[10] & 0x80) == 0) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + /* OK, fetch it. */ + colormaplen = 2 << (header[10] & 0x07); + + for (i = 0; i < colormaplen; i++) { + R = getc(infile); + G = getc(infile); + B = getc(infile); + if (R == EOF || G == EOF || B == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + add_map_entry(cinfo, + R << (BITS_IN_JSAMPLE-8), + G << (BITS_IN_JSAMPLE-8), + B << (BITS_IN_JSAMPLE-8)); + } +} + + +/* Support routines for reading PPM */ + + +LOCAL(int) +pbm_getc (FILE * infile) +/* Read next char, skipping over any comments */ +/* A comment/newline sequence is returned as a newline */ +{ + register int ch; + + ch = getc(infile); + if (ch == '#') { + do { + ch = getc(infile); + } while (ch != '\n' && ch != EOF); + } + return ch; +} + + +LOCAL(unsigned int) +read_pbm_integer (j_decompress_ptr cinfo, FILE * infile) +/* Read an unsigned decimal integer from the PPM file */ +/* Swallows one trailing character after the integer */ +/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ +/* This should not be a problem in practice. */ +{ + register int ch; + register unsigned int val; + + /* Skip any leading whitespace */ + do { + ch = pbm_getc(infile); + if (ch == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); + + if (ch < '0' || ch > '9') + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + val = ch - '0'; + while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { + val *= 10; + val += ch - '0'; + } + return val; +} + + +/* + * Extract color map from a PPM file. + */ + +LOCAL(void) +read_ppm_map (j_decompress_ptr cinfo, FILE * infile) +{ + int c; + unsigned int w, h, maxval, row, col; + int R, G, B; + + /* Initial 'P' has already been read by read_color_map */ + c = getc(infile); /* save format discriminator for a sec */ + + /* while we fetch the remaining header info */ + w = read_pbm_integer(cinfo, infile); + h = read_pbm_integer(cinfo, infile); + maxval = read_pbm_integer(cinfo, infile); + + if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + /* For now, we don't support rescaling from an unusual maxval. */ + if (maxval != (unsigned int) MAXJSAMPLE) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + switch (c) { + case '3': /* it's a text-format PPM file */ + for (row = 0; row < h; row++) { + for (col = 0; col < w; col++) { + R = read_pbm_integer(cinfo, infile); + G = read_pbm_integer(cinfo, infile); + B = read_pbm_integer(cinfo, infile); + add_map_entry(cinfo, R, G, B); + } + } + break; + + case '6': /* it's a raw-format PPM file */ + for (row = 0; row < h; row++) { + for (col = 0; col < w; col++) { + R = getc(infile); + G = getc(infile); + B = getc(infile); + if (R == EOF || G == EOF || B == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + add_map_entry(cinfo, R, G, B); + } + } + break; + + default: + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + break; + } +} + + +/* + * Main entry point from djpeg.c. + * Input: opened input file (from file name argument on command line). + * Output: colormap and actual_number_of_colors fields are set in cinfo. + */ + +GLOBAL(void) +read_color_map (j_decompress_ptr cinfo, FILE * infile) +{ + /* Allocate space for a color map of maximum supported size. */ + cinfo->colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (MAXJSAMPLE+1), (JDIMENSION) 3); + cinfo->actual_number_of_colors = 0; /* initialize map to empty */ + + /* Read first byte to determine file format */ + switch (getc(infile)) { + case 'G': + read_gif_map(cinfo, infile); + break; + case 'P': + read_ppm_map(cinfo, infile); + break; + default: + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + break; + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/rdgif.c b/3rdparty/openctm/tools/jpeg/rdgif.c new file mode 100644 index 000000000..b0757e718 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdgif.c @@ -0,0 +1,38 @@ +/* + * rdgif.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in GIF format. + * + ***************************************************************************** + * NOTE: to avoid entanglements with Unisys' patent on LZW compression, * + * the ability to read GIF files has been removed from the IJG distribution. * + * Sorry about that. * + ***************************************************************************** + * + * We are required to state that + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef GIF_SUPPORTED + +/* + * The module selection routine for GIF format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_gif (j_compress_ptr cinfo) +{ + fprintf(stderr, "GIF input is unsupported for legal reasons. Sorry.\n"); + exit(EXIT_FAILURE); + return NULL; /* keep compiler happy */ +} + +#endif /* GIF_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/rdjpgcom.1 b/3rdparty/openctm/tools/jpeg/rdjpgcom.1 new file mode 100644 index 000000000..2ddea6b01 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdjpgcom.1 @@ -0,0 +1,63 @@ +.TH RDJPGCOM 1 "02 April 2009" +.SH NAME +rdjpgcom \- display text comments from a JPEG file +.SH SYNOPSIS +.B rdjpgcom +[ +.B \-raw +] +[ +.B \-verbose +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B rdjpgcom +reads the named JPEG/JFIF file, or the standard input if no file is named, +and prints any text comments found in the file on the standard output. +.PP +The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. +Although the standard doesn't actually define what COM blocks are for, they +are widely used to hold user-supplied text strings. This lets you add +annotations, titles, index terms, etc to your JPEG files, and later retrieve +them as text. COM blocks do not interfere with the image stored in the JPEG +file. The maximum size of a COM block is 64K, but you can have as many of +them as you like in one JPEG file. +.SH OPTIONS +.TP +.B \-raw +Normally +.B rdjpgcom +escapes non-printable characters in comments, for security reasons. +This option avoids that. +.PP +.B \-verbose +Causes +.B rdjpgcom +to also display the JPEG image dimensions. +.PP +Switch names may be abbreviated, and are not case sensitive. +.SH HINTS +.B rdjpgcom +does not depend on the IJG JPEG library. Its source code is intended as an +illustration of the minimum amount of code required to parse a JPEG file +header correctly. +.PP +In +.B \-verbose +mode, +.B rdjpgcom +will also attempt to print the contents of any "APP12" markers as text. +Some digital cameras produce APP12 markers containing useful textual +information. If you like, you can modify the source code to print +other APPn marker types as well. +.SH SEE ALSO +.BR cjpeg (1), +.BR djpeg (1), +.BR jpegtran (1), +.BR wrjpgcom (1) +.SH AUTHOR +Independent JPEG Group diff --git a/3rdparty/openctm/tools/jpeg/rdjpgcom.c b/3rdparty/openctm/tools/jpeg/rdjpgcom.c new file mode 100644 index 000000000..ab09b443f --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdjpgcom.c @@ -0,0 +1,515 @@ +/* + * rdjpgcom.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * Modified 2009 by Bill Allombert, Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a very simple stand-alone application that displays + * the text in COM (comment) markers in a JFIF file. + * This may be useful as an example of the minimum logic needed to parse + * JPEG markers. + */ + +#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ +#include "jinclude.h" /* get auto-config symbols, */ + +#ifdef HAVE_LOCALE_H +#include /* Bill Allombert: use locale for isprint */ +#endif +#include /* to declare isupper(), tolower() */ +#ifdef USE_SETMODE +#include /* to declare setmode()'s parameter macros */ +/* If you have setmode() but not , just delete this line: */ +#include /* to declare setmode() */ +#endif + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#endif +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif +#ifndef EXIT_SUCCESS +#ifdef VMS +#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ +#else +#define EXIT_SUCCESS 0 +#endif +#endif + + +/* + * These macros are used to read the input file. + * To reuse this code in another application, you might need to change these. + */ + +static FILE * infile; /* input JPEG file */ + +/* Return next input byte, or EOF if no more */ +#define NEXTBYTE() getc(infile) + + +/* Error exit handler */ +#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) + + +/* Read one byte, testing for EOF */ +static int +read_1_byte (void) +{ + int c; + + c = NEXTBYTE(); + if (c == EOF) + ERREXIT("Premature EOF in JPEG file"); + return c; +} + +/* Read 2 bytes, convert to unsigned int */ +/* All 2-byte quantities in JPEG markers are MSB first */ +static unsigned int +read_2_bytes (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + if (c1 == EOF) + ERREXIT("Premature EOF in JPEG file"); + c2 = NEXTBYTE(); + if (c2 == EOF) + ERREXIT("Premature EOF in JPEG file"); + return (((unsigned int) c1) << 8) + ((unsigned int) c2); +} + + +/* + * JPEG markers consist of one or more 0xFF bytes, followed by a marker + * code byte (which is not an FF). Here are the marker codes of interest + * in this program. (See jdmarker.c for a more complete list.) + */ + +#define M_SOF0 0xC0 /* Start Of Frame N */ +#define M_SOF1 0xC1 /* N indicates which compression process */ +#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ +#define M_SOF3 0xC3 +#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ +#define M_SOF6 0xC6 +#define M_SOF7 0xC7 +#define M_SOF9 0xC9 +#define M_SOF10 0xCA +#define M_SOF11 0xCB +#define M_SOF13 0xCD +#define M_SOF14 0xCE +#define M_SOF15 0xCF +#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ +#define M_EOI 0xD9 /* End Of Image (end of datastream) */ +#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ +#define M_APP0 0xE0 /* Application-specific marker, type N */ +#define M_APP12 0xEC /* (we don't bother to list all 16 APPn's) */ +#define M_COM 0xFE /* COMment */ + + +/* + * Find the next JPEG marker and return its marker code. + * We expect at least one FF byte, possibly more if the compressor used FFs + * to pad the file. + * There could also be non-FF garbage between markers. The treatment of such + * garbage is unspecified; we choose to skip over it but emit a warning msg. + * NB: this routine must not be used after seeing SOS marker, since it will + * not deal correctly with FF/00 sequences in the compressed image data... + */ + +static int +next_marker (void) +{ + int c; + int discarded_bytes = 0; + + /* Find 0xFF byte; count and skip any non-FFs. */ + c = read_1_byte(); + while (c != 0xFF) { + discarded_bytes++; + c = read_1_byte(); + } + /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs + * are legal as pad bytes, so don't count them in discarded_bytes. + */ + do { + c = read_1_byte(); + } while (c == 0xFF); + + if (discarded_bytes != 0) { + fprintf(stderr, "Warning: garbage data found in JPEG file\n"); + } + + return c; +} + + +/* + * Read the initial marker, which should be SOI. + * For a JFIF file, the first two bytes of the file should be literally + * 0xFF M_SOI. To be more general, we could use next_marker, but if the + * input file weren't actually JPEG at all, next_marker might read the whole + * file and then return a misleading error message... + */ + +static int +first_marker (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + c2 = NEXTBYTE(); + if (c1 != 0xFF || c2 != M_SOI) + ERREXIT("Not a JPEG file"); + return c2; +} + + +/* + * Most types of marker are followed by a variable-length parameter segment. + * This routine skips over the parameters for any marker we don't otherwise + * want to process. + * Note that we MUST skip the parameter segment explicitly in order not to + * be fooled by 0xFF bytes that might appear within the parameter segment; + * such bytes do NOT introduce new markers. + */ + +static void +skip_variable (void) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + unsigned int length; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + /* Skip over the remaining bytes */ + while (length > 0) { + (void) read_1_byte(); + length--; + } +} + + +/* + * Process a COM marker. + * We want to print out the marker contents as legible text; + * we must guard against non-text junk and varying newline representations. + */ + +static void +process_COM (int raw) +{ + unsigned int length; + int ch; + int lastch = 0; + + /* Bill Allombert: set locale properly for isprint */ +#ifdef HAVE_LOCALE_H + setlocale(LC_CTYPE, ""); +#endif + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + + while (length > 0) { + ch = read_1_byte(); + if (raw) { + putc(ch, stdout); + /* Emit the character in a readable form. + * Nonprintables are converted to \nnn form, + * while \ is converted to \\. + * Newlines in CR, CR/LF, or LF form will be printed as one newline. + */ + } else if (ch == '\r') { + printf("\n"); + } else if (ch == '\n') { + if (lastch != '\r') + printf("\n"); + } else if (ch == '\\') { + printf("\\\\"); + } else if (isprint(ch)) { + putc(ch, stdout); + } else { + printf("\\%03o", ch); + } + lastch = ch; + length--; + } + printf("\n"); + + /* Bill Allombert: revert to C locale */ +#ifdef HAVE_LOCALE_H + setlocale(LC_CTYPE, "C"); +#endif +} + + +/* + * Process a SOFn marker. + * This code is only needed if you want to know the image dimensions... + */ + +static void +process_SOFn (int marker) +{ + unsigned int length; + unsigned int image_height, image_width; + int data_precision, num_components; + const char * process; + int ci; + + length = read_2_bytes(); /* usual parameter length count */ + + data_precision = read_1_byte(); + image_height = read_2_bytes(); + image_width = read_2_bytes(); + num_components = read_1_byte(); + + switch (marker) { + case M_SOF0: process = "Baseline"; break; + case M_SOF1: process = "Extended sequential"; break; + case M_SOF2: process = "Progressive"; break; + case M_SOF3: process = "Lossless"; break; + case M_SOF5: process = "Differential sequential"; break; + case M_SOF6: process = "Differential progressive"; break; + case M_SOF7: process = "Differential lossless"; break; + case M_SOF9: process = "Extended sequential, arithmetic coding"; break; + case M_SOF10: process = "Progressive, arithmetic coding"; break; + case M_SOF11: process = "Lossless, arithmetic coding"; break; + case M_SOF13: process = "Differential sequential, arithmetic coding"; break; + case M_SOF14: process = "Differential progressive, arithmetic coding"; break; + case M_SOF15: process = "Differential lossless, arithmetic coding"; break; + default: process = "Unknown"; break; + } + + printf("JPEG image is %uw * %uh, %d color components, %d bits per sample\n", + image_width, image_height, num_components, data_precision); + printf("JPEG process: %s\n", process); + + if (length != (unsigned int) (8 + num_components * 3)) + ERREXIT("Bogus SOF marker length"); + + for (ci = 0; ci < num_components; ci++) { + (void) read_1_byte(); /* Component ID code */ + (void) read_1_byte(); /* H, V sampling factors */ + (void) read_1_byte(); /* Quantization table number */ + } +} + + +/* + * Parse the marker stream until SOS or EOI is seen; + * display any COM markers. + * While the companion program wrjpgcom will always insert COM markers before + * SOFn, other implementations might not, so we scan to SOS before stopping. + * If we were only interested in the image dimensions, we would stop at SOFn. + * (Conversely, if we only cared about COM markers, there would be no need + * for special code to handle SOFn; we could treat it like other markers.) + */ + +static int +scan_JPEG_header (int verbose, int raw) +{ + int marker; + + /* Expect SOI at start of file */ + if (first_marker() != M_SOI) + ERREXIT("Expected SOI marker first"); + + /* Scan miscellaneous markers until we reach SOS. */ + for (;;) { + marker = next_marker(); + switch (marker) { + /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be, + * treated as SOFn. C4 in particular is actually DHT. + */ + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + case M_SOF2: /* Progressive, Huffman */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_SOF9: /* Extended sequential, arithmetic */ + case M_SOF10: /* Progressive, arithmetic */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + if (verbose) + process_SOFn(marker); + else + skip_variable(); + break; + + case M_SOS: /* stop before hitting compressed data */ + return marker; + + case M_EOI: /* in case it's a tables-only JPEG stream */ + return marker; + + case M_COM: + process_COM(raw); + break; + + case M_APP12: + /* Some digital camera makers put useful textual information into + * APP12 markers, so we print those out too when in -verbose mode. + */ + if (verbose) { + printf("APP12 contains:\n"); + process_COM(raw); + } else + skip_variable(); + break; + + default: /* Anything else just gets skipped */ + skip_variable(); /* we assume it has a parameter count... */ + break; + } + } /* end loop */ +} + + +/* Command line parsing code */ + +static const char * progname; /* program name for error messages */ + + +static void +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "rdjpgcom displays any textual comments in a JPEG file.\n"); + + fprintf(stderr, "Usage: %s [switches] [inputfile]\n", progname); + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -raw Display non-printable characters in comments (unsafe)\n"); + fprintf(stderr, " -verbose Also display dimensions of JPEG image\n"); + + exit(EXIT_FAILURE); +} + + +static int +keymatch (char * arg, const char * keyword, int minchars) +/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ +/* keyword is the constant keyword (must be lower case already), */ +/* minchars is length of minimum legal abbreviation. */ +{ + register int ca, ck; + register int nmatched = 0; + + while ((ca = *arg++) != '\0') { + if ((ck = *keyword++) == '\0') + return 0; /* arg longer than keyword, no good */ + if (isupper(ca)) /* force arg to lcase (assume ck is already) */ + ca = tolower(ca); + if (ca != ck) + return 0; /* no good */ + nmatched++; /* count matched characters */ + } + /* reached end of argument; fail if it's too short for unique abbrev */ + if (nmatched < minchars) + return 0; + return 1; /* A-OK */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + int argn; + char * arg; + int verbose = 0, raw = 0; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "rdjpgcom"; /* in case C library doesn't provide it */ + + /* Parse switches, if any */ + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (arg[0] != '-') + break; /* not switch, must be file name */ + arg++; /* advance over '-' */ + if (keymatch(arg, "verbose", 1)) { + verbose++; + } else if (keymatch(arg, "raw", 1)) { + raw = 1; + } else + usage(); + } + + /* Open the input file. */ + /* Unix style: expect zero or one file name */ + if (argn < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } + if (argn < argc) { + if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdin), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open stdin\n", progname); + exit(EXIT_FAILURE); + } +#else + infile = stdin; +#endif + } + + /* Scan the JPEG headers. */ + (void) scan_JPEG_header(verbose, raw); + + /* All done. */ + exit(EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/3rdparty/openctm/tools/jpeg/rdppm.c b/3rdparty/openctm/tools/jpeg/rdppm.c new file mode 100644 index 000000000..9dcd2dc21 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdppm.c @@ -0,0 +1,459 @@ +/* + * rdppm.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2009 by Bill Allombert, Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in PPM/PGM format. + * The extended 2-byte-per-sample raw PPM/PGM formats are supported. + * The PBMPLUS library is NOT required to compile this software + * (but it is highly useful as a set of PPM image manipulation programs). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed PPM format). + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef PPM_SUPPORTED + + +/* Portions of this code are based on the PBMPLUS library, which is: +** +** Copyright (C) 1988 by Jef Poskanzer. +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, provided +** that the above copyright notice appear in all copies and that both that +** copyright notice and this permission notice appear in supporting +** documentation. This software is provided "as is" without express or +** implied warranty. +*/ + + +/* Macros to deal with unsigned chars as efficiently as compiler allows */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char U_CHAR; +#define UCH(x) ((int) (x)) +#else /* !HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char U_CHAR; +#define UCH(x) ((int) (x)) +#else +typedef char U_CHAR; +#define UCH(x) ((int) (x) & 0xFF) +#endif +#endif /* HAVE_UNSIGNED_CHAR */ + + +#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) + + +/* + * On most systems, reading individual bytes with getc() is drastically less + * efficient than buffering a row at a time with fread(). On PCs, we must + * allocate the buffer in near data space, because we are assuming small-data + * memory model, wherein fread() can't reach far memory. If you need to + * process very wide images on a PC, you might have to compile in large-memory + * model, or else replace fread() with a getc() loop --- which will be much + * slower. + */ + + +/* Private version of data source object */ + +typedef struct { + struct cjpeg_source_struct pub; /* public fields */ + + U_CHAR *iobuffer; /* non-FAR pointer to I/O buffer */ + JSAMPROW pixrow; /* FAR pointer to same */ + size_t buffer_width; /* width of I/O buffer */ + JSAMPLE *rescale; /* => maxval-remapping array, or NULL */ +} ppm_source_struct; + +typedef ppm_source_struct * ppm_source_ptr; + + +LOCAL(int) +pbm_getc (FILE * infile) +/* Read next char, skipping over any comments */ +/* A comment/newline sequence is returned as a newline */ +{ + register int ch; + + ch = getc(infile); + if (ch == '#') { + do { + ch = getc(infile); + } while (ch != '\n' && ch != EOF); + } + return ch; +} + + +LOCAL(unsigned int) +read_pbm_integer (j_compress_ptr cinfo, FILE * infile) +/* Read an unsigned decimal integer from the PPM file */ +/* Swallows one trailing character after the integer */ +/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ +/* This should not be a problem in practice. */ +{ + register int ch; + register unsigned int val; + + /* Skip any leading whitespace */ + do { + ch = pbm_getc(infile); + if (ch == EOF) + ERREXIT(cinfo, JERR_INPUT_EOF); + } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); + + if (ch < '0' || ch > '9') + ERREXIT(cinfo, JERR_PPM_NONNUMERIC); + + val = ch - '0'; + while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { + val *= 10; + val += ch - '0'; + } + return val; +} + + +/* + * Read one row of pixels. + * + * We provide several different versions depending on input file format. + * In all cases, input is scaled to the size of JSAMPLE. + * + * A really fast path is provided for reading byte/sample raw files with + * maxval = MAXJSAMPLE, which is the normal case for 8-bit data. + */ + + +METHODDEF(JDIMENSION) +get_text_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading text-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + FILE * infile = source->pub.input_file; + register JSAMPROW ptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading text-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + FILE * infile = source->pub.input_file; + register JSAMPROW ptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-byte-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[UCH(*bufferptr++)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-byte-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[UCH(*bufferptr++)]; + *ptr++ = rescale[UCH(*bufferptr++)]; + *ptr++ = rescale[UCH(*bufferptr++)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-byte-format files with maxval = MAXJSAMPLE. + * In this case we just read right into the JSAMPLE buffer! + * Note that same code works for PPM and PGM files. + */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + return 1; +} + + +METHODDEF(JDIMENSION) +get_word_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-word-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + register int temp; + temp = UCH(*bufferptr++) << 8; + temp |= UCH(*bufferptr++); + *ptr++ = rescale[temp]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_word_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-word-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + register int temp; + temp = UCH(*bufferptr++) << 8; + temp |= UCH(*bufferptr++); + *ptr++ = rescale[temp]; + temp = UCH(*bufferptr++) << 8; + temp |= UCH(*bufferptr++); + *ptr++ = rescale[temp]; + temp = UCH(*bufferptr++) << 8; + temp |= UCH(*bufferptr++); + *ptr++ = rescale[temp]; + } + return 1; +} + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + int c; + unsigned int w, h, maxval; + boolean need_iobuffer, use_raw_buffer, need_rescale; + + if (getc(source->pub.input_file) != 'P') + ERREXIT(cinfo, JERR_PPM_NOT); + + c = getc(source->pub.input_file); /* subformat discriminator character */ + + /* detect unsupported variants (ie, PBM) before trying to read header */ + switch (c) { + case '2': /* it's a text-format PGM file */ + case '3': /* it's a text-format PPM file */ + case '5': /* it's a raw-format PGM file */ + case '6': /* it's a raw-format PPM file */ + break; + default: + ERREXIT(cinfo, JERR_PPM_NOT); + break; + } + + /* fetch the remaining header info */ + w = read_pbm_integer(cinfo, source->pub.input_file); + h = read_pbm_integer(cinfo, source->pub.input_file); + maxval = read_pbm_integer(cinfo, source->pub.input_file); + + if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ + ERREXIT(cinfo, JERR_PPM_NOT); + + cinfo->data_precision = BITS_IN_JSAMPLE; /* we always rescale data to this */ + cinfo->image_width = (JDIMENSION) w; + cinfo->image_height = (JDIMENSION) h; + + /* initialize flags to most common settings */ + need_iobuffer = TRUE; /* do we need an I/O buffer? */ + use_raw_buffer = FALSE; /* do we map input buffer onto I/O buffer? */ + need_rescale = TRUE; /* do we need a rescale array? */ + + switch (c) { + case '2': /* it's a text-format PGM file */ + cinfo->input_components = 1; + cinfo->in_color_space = JCS_GRAYSCALE; + TRACEMS2(cinfo, 1, JTRC_PGM_TEXT, w, h); + source->pub.get_pixel_rows = get_text_gray_row; + need_iobuffer = FALSE; + break; + + case '3': /* it's a text-format PPM file */ + cinfo->input_components = 3; + cinfo->in_color_space = JCS_RGB; + TRACEMS2(cinfo, 1, JTRC_PPM_TEXT, w, h); + source->pub.get_pixel_rows = get_text_rgb_row; + need_iobuffer = FALSE; + break; + + case '5': /* it's a raw-format PGM file */ + cinfo->input_components = 1; + cinfo->in_color_space = JCS_GRAYSCALE; + TRACEMS2(cinfo, 1, JTRC_PGM, w, h); + if (maxval > 255) { + source->pub.get_pixel_rows = get_word_gray_row; + } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { + source->pub.get_pixel_rows = get_raw_row; + use_raw_buffer = TRUE; + need_rescale = FALSE; + } else { + source->pub.get_pixel_rows = get_scaled_gray_row; + } + break; + + case '6': /* it's a raw-format PPM file */ + cinfo->input_components = 3; + cinfo->in_color_space = JCS_RGB; + TRACEMS2(cinfo, 1, JTRC_PPM, w, h); + if (maxval > 255) { + source->pub.get_pixel_rows = get_word_rgb_row; + } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { + source->pub.get_pixel_rows = get_raw_row; + use_raw_buffer = TRUE; + need_rescale = FALSE; + } else { + source->pub.get_pixel_rows = get_scaled_rgb_row; + } + break; + } + + /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */ + if (need_iobuffer) { + source->buffer_width = (size_t) w * cinfo->input_components * + ((maxval<=255) ? SIZEOF(U_CHAR) : (2*SIZEOF(U_CHAR))); + source->iobuffer = (U_CHAR *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + source->buffer_width); + } + + /* Create compressor input buffer. */ + if (use_raw_buffer) { + /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ + /* Synthesize a JSAMPARRAY pointer structure */ + /* Cast here implies near->far pointer conversion on PCs */ + source->pixrow = (JSAMPROW) source->iobuffer; + source->pub.buffer = & source->pixrow; + source->pub.buffer_height = 1; + } else { + /* Need to translate anyway, so make a separate sample buffer. */ + source->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) w * cinfo->input_components, (JDIMENSION) 1); + source->pub.buffer_height = 1; + } + + /* Compute the rescaling array if required. */ + if (need_rescale) { + INT32 val, half_maxval; + + /* On 16-bit-int machines we have to be careful of maxval = 65535 */ + source->rescale = (JSAMPLE *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (((long) maxval + 1L) * SIZEOF(JSAMPLE))); + half_maxval = maxval / 2; + for (val = 0; val <= (INT32) maxval; val++) { + /* The multiplication here must be done in 32 bits to avoid overflow */ + source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval); + } + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for PPM format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_ppm (j_compress_ptr cinfo) +{ + ppm_source_ptr source; + + /* Create module interface object */ + source = (ppm_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ppm_source_struct)); + /* Fill in method ptrs, except get_pixel_rows which start_input sets */ + source->pub.start_input = start_input_ppm; + source->pub.finish_input = finish_input_ppm; + + return (cjpeg_source_ptr) source; +} + +#endif /* PPM_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/rdrle.c b/3rdparty/openctm/tools/jpeg/rdrle.c new file mode 100644 index 000000000..df871e00a --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdrle.c @@ -0,0 +1,387 @@ +/* + * rdrle.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in Utah RLE format. + * The Utah Raster Toolkit library is required (version 3.1 or later). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed RLE format). + * + * Based on code contributed by Mike Lijewski, + * with updates from Robert Hutchinson. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef RLE_SUPPORTED + +/* rle.h is provided by the Utah Raster Toolkit. */ + +#include + +/* + * We assume that JSAMPLE has the same representation as rle_pixel, + * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + +/* + * We support the following types of RLE files: + * + * GRAYSCALE - 8 bits, no colormap + * MAPPEDGRAY - 8 bits, 1 channel colomap + * PSEUDOCOLOR - 8 bits, 3 channel colormap + * TRUECOLOR - 24 bits, 3 channel colormap + * DIRECTCOLOR - 24 bits, no colormap + * + * For now, we ignore any alpha channel in the image. + */ + +typedef enum + { GRAYSCALE, MAPPEDGRAY, PSEUDOCOLOR, TRUECOLOR, DIRECTCOLOR } rle_kind; + + +/* + * Since RLE stores scanlines bottom-to-top, we have to invert the image + * to conform to JPEG's top-to-bottom order. To do this, we read the + * incoming image into a virtual array on the first get_pixel_rows call, + * then fetch the required row from the virtual array on subsequent calls. + */ + +typedef struct _rle_source_struct * rle_source_ptr; + +typedef struct _rle_source_struct { + struct cjpeg_source_struct pub; /* public fields */ + + rle_kind visual; /* actual type of input file */ + jvirt_sarray_ptr image; /* virtual array to hold the image */ + JDIMENSION row; /* current row # in the virtual array */ + rle_hdr header; /* Input file information */ + rle_pixel** rle_row; /* holds a row returned by rle_getrow() */ + +} rle_source_struct; + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + JDIMENSION width, height; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + /* Use RLE library routine to get the header info */ + source->header = *rle_hdr_init(NULL); + source->header.rle_file = source->pub.input_file; + switch (rle_get_setup(&(source->header))) { + case RLE_SUCCESS: + /* A-OK */ + break; + case RLE_NOT_RLE: + ERREXIT(cinfo, JERR_RLE_NOT); + break; + case RLE_NO_SPACE: + ERREXIT(cinfo, JERR_RLE_MEM); + break; + case RLE_EMPTY: + ERREXIT(cinfo, JERR_RLE_EMPTY); + break; + case RLE_EOF: + ERREXIT(cinfo, JERR_RLE_EOF); + break; + default: + ERREXIT(cinfo, JERR_RLE_BADERROR); + break; + } + + /* Figure out what we have, set private vars and return values accordingly */ + + width = source->header.xmax - source->header.xmin + 1; + height = source->header.ymax - source->header.ymin + 1; + source->header.xmin = 0; /* realign horizontally */ + source->header.xmax = width-1; + + cinfo->image_width = width; + cinfo->image_height = height; + cinfo->data_precision = 8; /* we can only handle 8 bit data */ + + if (source->header.ncolors == 1 && source->header.ncmap == 0) { + source->visual = GRAYSCALE; + TRACEMS2(cinfo, 1, JTRC_RLE_GRAY, width, height); + } else if (source->header.ncolors == 1 && source->header.ncmap == 1) { + source->visual = MAPPEDGRAY; + TRACEMS3(cinfo, 1, JTRC_RLE_MAPGRAY, width, height, + 1 << source->header.cmaplen); + } else if (source->header.ncolors == 1 && source->header.ncmap == 3) { + source->visual = PSEUDOCOLOR; + TRACEMS3(cinfo, 1, JTRC_RLE_MAPPED, width, height, + 1 << source->header.cmaplen); + } else if (source->header.ncolors == 3 && source->header.ncmap == 3) { + source->visual = TRUECOLOR; + TRACEMS3(cinfo, 1, JTRC_RLE_FULLMAP, width, height, + 1 << source->header.cmaplen); + } else if (source->header.ncolors == 3 && source->header.ncmap == 0) { + source->visual = DIRECTCOLOR; + TRACEMS2(cinfo, 1, JTRC_RLE, width, height); + } else + ERREXIT(cinfo, JERR_RLE_UNSUPPORTED); + + if (source->visual == GRAYSCALE || source->visual == MAPPEDGRAY) { + cinfo->in_color_space = JCS_GRAYSCALE; + cinfo->input_components = 1; + } else { + cinfo->in_color_space = JCS_RGB; + cinfo->input_components = 3; + } + + /* + * A place to hold each scanline while it's converted. + * (GRAYSCALE scanlines don't need converting) + */ + if (source->visual != GRAYSCALE) { + source->rle_row = (rle_pixel**) (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) width, (JDIMENSION) cinfo->input_components); + } + + /* request a virtual array to hold the image */ + source->image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) (width * source->header.ncolors), + (JDIMENSION) height, (JDIMENSION) 1); + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + /* count file input as separate pass */ + progress->total_extra_passes++; + } +#endif + + source->pub.buffer_height = 1; +} + + +/* + * Read one row of pixels. + * Called only after load_image has read the image into the virtual array. + * Used for GRAYSCALE, MAPPEDGRAY, TRUECOLOR, and DIRECTCOLOR images. + */ + +METHODDEF(JDIMENSION) +get_rle_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + + source->row--; + source->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, source->row, (JDIMENSION) 1, FALSE); + + return 1; +} + +/* + * Read one row of pixels. + * Called only after load_image has read the image into the virtual array. + * Used for PSEUDOCOLOR images. + */ + +METHODDEF(JDIMENSION) +get_pseudocolor_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + JSAMPROW src_row, dest_row; + JDIMENSION col; + rle_map *colormap; + int val; + + colormap = source->header.cmap; + dest_row = source->pub.buffer[0]; + source->row--; + src_row = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, source->row, (JDIMENSION) 1, FALSE); + + for (col = cinfo->image_width; col > 0; col--) { + val = GETJSAMPLE(*src_row++); + *dest_row++ = (JSAMPLE) (colormap[val ] >> 8); + *dest_row++ = (JSAMPLE) (colormap[val + 256] >> 8); + *dest_row++ = (JSAMPLE) (colormap[val + 512] >> 8); + } + + return 1; +} + + +/* + * Load the image into a virtual array. We have to do this because RLE + * files start at the lower left while the JPEG standard has them starting + * in the upper left. This is called the first time we want to get a row + * of input. What we do is load the RLE data into the array and then call + * the appropriate routine to read one row from the array. Before returning, + * we set source->pub.get_pixel_rows so that subsequent calls go straight to + * the appropriate row-reading routine. + */ + +METHODDEF(JDIMENSION) +load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + JDIMENSION row, col; + JSAMPROW scanline, red_ptr, green_ptr, blue_ptr; + rle_pixel **rle_row; + rle_map *colormap; + char channel; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + colormap = source->header.cmap; + rle_row = source->rle_row; + + /* Read the RLE data into our virtual array. + * We assume here that (a) rle_pixel is represented the same as JSAMPLE, + * and (b) we are not on a machine where FAR pointers differ from regular. + */ + RLE_CLR_BIT(source->header, RLE_ALPHA); /* don't read the alpha channel */ + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_limit = cinfo->image_height; + progress->pub.pass_counter = 0; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + + switch (source->visual) { + + case GRAYSCALE: + case PSEUDOCOLOR: + for (row = 0; row < cinfo->image_height; row++) { + rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); + rle_getrow(&source->header, rle_row); +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + break; + + case MAPPEDGRAY: + case TRUECOLOR: + for (row = 0; row < cinfo->image_height; row++) { + scanline = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); + rle_row = source->rle_row; + rle_getrow(&source->header, rle_row); + + for (col = 0; col < cinfo->image_width; col++) { + for (channel = 0; channel < source->header.ncolors; channel++) { + *scanline++ = (JSAMPLE) + (colormap[GETJSAMPLE(rle_row[channel][col]) + 256 * channel] >> 8); + } + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + break; + + case DIRECTCOLOR: + for (row = 0; row < cinfo->image_height; row++) { + scanline = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); + rle_getrow(&source->header, rle_row); + + red_ptr = rle_row[0]; + green_ptr = rle_row[1]; + blue_ptr = rle_row[2]; + + for (col = cinfo->image_width; col > 0; col--) { + *scanline++ = *red_ptr++; + *scanline++ = *green_ptr++; + *scanline++ = *blue_ptr++; + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) + progress->completed_extra_passes++; +#endif + + /* Set up to call proper row-extraction routine in future */ + if (source->visual == PSEUDOCOLOR) { + source->pub.buffer = source->rle_row; + source->pub.get_pixel_rows = get_pseudocolor_row; + } else { + source->pub.get_pixel_rows = get_rle_row; + } + source->row = cinfo->image_height; + + /* And fetch the topmost (bottommost) row */ + return (*source->pub.get_pixel_rows) (cinfo, sinfo); +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for RLE format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_rle (j_compress_ptr cinfo) +{ + rle_source_ptr source; + + /* Create module interface object */ + source = (rle_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(rle_source_struct)); + /* Fill in method ptrs */ + source->pub.start_input = start_input_rle; + source->pub.finish_input = finish_input_rle; + source->pub.get_pixel_rows = load_image; + + return (cjpeg_source_ptr) source; +} + +#endif /* RLE_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/rdswitch.c b/3rdparty/openctm/tools/jpeg/rdswitch.c new file mode 100644 index 000000000..5eebcc1e5 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdswitch.c @@ -0,0 +1,365 @@ +/* + * rdswitch.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to process some of cjpeg's more complicated + * command-line switches. Switches processed here are: + * -qtables file Read quantization tables from text file + * -scans file Read scan script from text file + * -quality N[,N,...] Set quality ratings + * -qslots N[,N,...] Set component quantization table selectors + * -sample HxV[,HxV,...] Set component sampling factors + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include /* to declare isdigit(), isspace() */ + + +LOCAL(int) +text_getc (FILE * file) +/* Read next char, skipping over any comments (# to end of line) */ +/* A comment/newline sequence is returned as a newline */ +{ + register int ch; + + ch = getc(file); + if (ch == '#') { + do { + ch = getc(file); + } while (ch != '\n' && ch != EOF); + } + return ch; +} + + +LOCAL(boolean) +read_text_integer (FILE * file, long * result, int * termchar) +/* Read an unsigned decimal integer from a file, store it in result */ +/* Reads one trailing character after the integer; returns it in termchar */ +{ + register int ch; + register long val; + + /* Skip any leading whitespace, detect EOF */ + do { + ch = text_getc(file); + if (ch == EOF) { + *termchar = ch; + return FALSE; + } + } while (isspace(ch)); + + if (! isdigit(ch)) { + *termchar = ch; + return FALSE; + } + + val = ch - '0'; + while ((ch = text_getc(file)) != EOF) { + if (! isdigit(ch)) + break; + val *= 10; + val += ch - '0'; + } + *result = val; + *termchar = ch; + return TRUE; +} + + +GLOBAL(boolean) +read_quant_tables (j_compress_ptr cinfo, char * filename, boolean force_baseline) +/* Read a set of quantization tables from the specified file. + * The file is plain ASCII text: decimal numbers with whitespace between. + * Comments preceded by '#' may be included in the file. + * There may be one to NUM_QUANT_TBLS tables in the file, each of 64 values. + * The tables are implicitly numbered 0,1,etc. + * NOTE: does not affect the qslots mapping, which will default to selecting + * table 0 for luminance (or primary) components, 1 for chrominance components. + * You must use -qslots if you want a different component->table mapping. + */ +{ + FILE * fp; + int tblno, i, termchar; + long val; + unsigned int table[DCTSIZE2]; + + if ((fp = fopen(filename, "r")) == NULL) { + fprintf(stderr, "Can't open table file %s\n", filename); + return FALSE; + } + tblno = 0; + + while (read_text_integer(fp, &val, &termchar)) { /* read 1st element of table */ + if (tblno >= NUM_QUANT_TBLS) { + fprintf(stderr, "Too many tables in file %s\n", filename); + fclose(fp); + return FALSE; + } + table[0] = (unsigned int) val; + for (i = 1; i < DCTSIZE2; i++) { + if (! read_text_integer(fp, &val, &termchar)) { + fprintf(stderr, "Invalid table data in file %s\n", filename); + fclose(fp); + return FALSE; + } + table[i] = (unsigned int) val; + } + jpeg_add_quant_table(cinfo, tblno, table, cinfo->q_scale_factor[tblno], + force_baseline); + tblno++; + } + + if (termchar != EOF) { + fprintf(stderr, "Non-numeric data in file %s\n", filename); + fclose(fp); + return FALSE; + } + + fclose(fp); + return TRUE; +} + + +#ifdef C_MULTISCAN_FILES_SUPPORTED + +LOCAL(boolean) +read_scan_integer (FILE * file, long * result, int * termchar) +/* Variant of read_text_integer that always looks for a non-space termchar; + * this simplifies parsing of punctuation in scan scripts. + */ +{ + register int ch; + + if (! read_text_integer(file, result, termchar)) + return FALSE; + ch = *termchar; + while (ch != EOF && isspace(ch)) + ch = text_getc(file); + if (isdigit(ch)) { /* oops, put it back */ + if (ungetc(ch, file) == EOF) + return FALSE; + ch = ' '; + } else { + /* Any separators other than ';' and ':' are ignored; + * this allows user to insert commas, etc, if desired. + */ + if (ch != EOF && ch != ';' && ch != ':') + ch = ' '; + } + *termchar = ch; + return TRUE; +} + + +GLOBAL(boolean) +read_scan_script (j_compress_ptr cinfo, char * filename) +/* Read a scan script from the specified text file. + * Each entry in the file defines one scan to be emitted. + * Entries are separated by semicolons ';'. + * An entry contains one to four component indexes, + * optionally followed by a colon ':' and four progressive-JPEG parameters. + * The component indexes denote which component(s) are to be transmitted + * in the current scan. The first component has index 0. + * Sequential JPEG is used if the progressive-JPEG parameters are omitted. + * The file is free format text: any whitespace may appear between numbers + * and the ':' and ';' punctuation marks. Also, other punctuation (such + * as commas or dashes) can be placed between numbers if desired. + * Comments preceded by '#' may be included in the file. + * Note: we do very little validity checking here; + * jcmaster.c will validate the script parameters. + */ +{ + FILE * fp; + int scanno, ncomps, termchar; + long val; + jpeg_scan_info * scanptr; +#define MAX_SCANS 100 /* quite arbitrary limit */ + jpeg_scan_info scans[MAX_SCANS]; + + if ((fp = fopen(filename, "r")) == NULL) { + fprintf(stderr, "Can't open scan definition file %s\n", filename); + return FALSE; + } + scanptr = scans; + scanno = 0; + + while (read_scan_integer(fp, &val, &termchar)) { + if (scanno >= MAX_SCANS) { + fprintf(stderr, "Too many scans defined in file %s\n", filename); + fclose(fp); + return FALSE; + } + scanptr->component_index[0] = (int) val; + ncomps = 1; + while (termchar == ' ') { + if (ncomps >= MAX_COMPS_IN_SCAN) { + fprintf(stderr, "Too many components in one scan in file %s\n", + filename); + fclose(fp); + return FALSE; + } + if (! read_scan_integer(fp, &val, &termchar)) + goto bogus; + scanptr->component_index[ncomps] = (int) val; + ncomps++; + } + scanptr->comps_in_scan = ncomps; + if (termchar == ':') { + if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') + goto bogus; + scanptr->Ss = (int) val; + if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') + goto bogus; + scanptr->Se = (int) val; + if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') + goto bogus; + scanptr->Ah = (int) val; + if (! read_scan_integer(fp, &val, &termchar)) + goto bogus; + scanptr->Al = (int) val; + } else { + /* set non-progressive parameters */ + scanptr->Ss = 0; + scanptr->Se = DCTSIZE2-1; + scanptr->Ah = 0; + scanptr->Al = 0; + } + if (termchar != ';' && termchar != EOF) { +bogus: + fprintf(stderr, "Invalid scan entry format in file %s\n", filename); + fclose(fp); + return FALSE; + } + scanptr++, scanno++; + } + + if (termchar != EOF) { + fprintf(stderr, "Non-numeric data in file %s\n", filename); + fclose(fp); + return FALSE; + } + + if (scanno > 0) { + /* Stash completed scan list in cinfo structure. + * NOTE: for cjpeg's use, JPOOL_IMAGE is the right lifetime for this data, + * but if you want to compress multiple images you'd want JPOOL_PERMANENT. + */ + scanptr = (jpeg_scan_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + scanno * SIZEOF(jpeg_scan_info)); + MEMCOPY(scanptr, scans, scanno * SIZEOF(jpeg_scan_info)); + cinfo->scan_info = scanptr; + cinfo->num_scans = scanno; + } + + fclose(fp); + return TRUE; +} + +#endif /* C_MULTISCAN_FILES_SUPPORTED */ + + +GLOBAL(boolean) +set_quality_ratings (j_compress_ptr cinfo, char *arg, boolean force_baseline) +/* Process a quality-ratings parameter string, of the form + * N[,N,...] + * If there are more q-table slots than parameters, the last value is replicated. + */ +{ + int val = 75; /* default value */ + int tblno; + char ch; + + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { + if (*arg) { + ch = ','; /* if not set by sscanf, will be ',' */ + if (sscanf(arg, "%d%c", &val, &ch) < 1) + return FALSE; + if (ch != ',') /* syntax check */ + return FALSE; + /* Convert user 0-100 rating to percentage scaling */ + cinfo->q_scale_factor[tblno] = jpeg_quality_scaling(val); + while (*arg && *arg++ != ',') /* advance to next segment of arg string */ + ; + } else { + /* reached end of parameter, set remaining factors to last value */ + cinfo->q_scale_factor[tblno] = jpeg_quality_scaling(val); + } + } + jpeg_default_qtables(cinfo, force_baseline); + return TRUE; +} + + +GLOBAL(boolean) +set_quant_slots (j_compress_ptr cinfo, char *arg) +/* Process a quantization-table-selectors parameter string, of the form + * N[,N,...] + * If there are more components than parameters, the last value is replicated. + */ +{ + int val = 0; /* default table # */ + int ci; + char ch; + + for (ci = 0; ci < MAX_COMPONENTS; ci++) { + if (*arg) { + ch = ','; /* if not set by sscanf, will be ',' */ + if (sscanf(arg, "%d%c", &val, &ch) < 1) + return FALSE; + if (ch != ',') /* syntax check */ + return FALSE; + if (val < 0 || val >= NUM_QUANT_TBLS) { + fprintf(stderr, "JPEG quantization tables are numbered 0..%d\n", + NUM_QUANT_TBLS-1); + return FALSE; + } + cinfo->comp_info[ci].quant_tbl_no = val; + while (*arg && *arg++ != ',') /* advance to next segment of arg string */ + ; + } else { + /* reached end of parameter, set remaining components to last table */ + cinfo->comp_info[ci].quant_tbl_no = val; + } + } + return TRUE; +} + + +GLOBAL(boolean) +set_sample_factors (j_compress_ptr cinfo, char *arg) +/* Process a sample-factors parameter string, of the form + * HxV[,HxV,...] + * If there are more components than parameters, "1x1" is assumed for the rest. + */ +{ + int ci, val1, val2; + char ch1, ch2; + + for (ci = 0; ci < MAX_COMPONENTS; ci++) { + if (*arg) { + ch2 = ','; /* if not set by sscanf, will be ',' */ + if (sscanf(arg, "%d%c%d%c", &val1, &ch1, &val2, &ch2) < 3) + return FALSE; + if ((ch1 != 'x' && ch1 != 'X') || ch2 != ',') /* syntax check */ + return FALSE; + if (val1 <= 0 || val1 > 4 || val2 <= 0 || val2 > 4) { + fprintf(stderr, "JPEG sampling factors must be 1..4\n"); + return FALSE; + } + cinfo->comp_info[ci].h_samp_factor = val1; + cinfo->comp_info[ci].v_samp_factor = val2; + while (*arg && *arg++ != ',') /* advance to next segment of arg string */ + ; + } else { + /* reached end of parameter, set remaining components to 1x1 sampling */ + cinfo->comp_info[ci].h_samp_factor = 1; + cinfo->comp_info[ci].v_samp_factor = 1; + } + } + return TRUE; +} diff --git a/3rdparty/openctm/tools/jpeg/rdtarga.c b/3rdparty/openctm/tools/jpeg/rdtarga.c new file mode 100644 index 000000000..d7ffc33eb --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/rdtarga.c @@ -0,0 +1,500 @@ +/* + * rdtarga.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in Targa format. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed Targa format). + * + * Based on code contributed by Lee Daniel Crocker. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef TARGA_SUPPORTED + + +/* Macros to deal with unsigned chars as efficiently as compiler allows */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char U_CHAR; +#define UCH(x) ((int) (x)) +#else /* !HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char U_CHAR; +#define UCH(x) ((int) (x)) +#else +typedef char U_CHAR; +#define UCH(x) ((int) (x) & 0xFF) +#endif +#endif /* HAVE_UNSIGNED_CHAR */ + + +#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) + + +/* Private version of data source object */ + +typedef struct _tga_source_struct * tga_source_ptr; + +typedef struct _tga_source_struct { + struct cjpeg_source_struct pub; /* public fields */ + + j_compress_ptr cinfo; /* back link saves passing separate parm */ + + JSAMPARRAY colormap; /* Targa colormap (converted to my format) */ + + jvirt_sarray_ptr whole_image; /* Needed if funny input row order */ + JDIMENSION current_row; /* Current logical row number to read */ + + /* Pointer to routine to extract next Targa pixel from input file */ + JMETHOD(void, read_pixel, (tga_source_ptr sinfo)); + + /* Result of read_pixel is delivered here: */ + U_CHAR tga_pixel[4]; + + int pixel_size; /* Bytes per Targa pixel (1 to 4) */ + + /* State info for reading RLE-coded pixels; both counts must be init to 0 */ + int block_count; /* # of pixels remaining in RLE block */ + int dup_pixel_count; /* # of times to duplicate previous pixel */ + + /* This saves the correct pixel-row-expansion method for preload_image */ + JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); +} tga_source_struct; + + +/* For expanding 5-bit pixel values to 8-bit with best rounding */ + +static const UINT8 c5to8bits[32] = { + 0, 8, 16, 25, 33, 41, 49, 58, + 66, 74, 82, 90, 99, 107, 115, 123, + 132, 140, 148, 156, 165, 173, 181, 189, + 197, 206, 214, 222, 230, 239, 247, 255 +}; + + + +LOCAL(int) +read_byte (tga_source_ptr sinfo) +/* Read next byte from Targa file */ +{ + register FILE *infile = sinfo->pub.input_file; + register int c; + + if ((c = getc(infile)) == EOF) + ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); + return c; +} + + +LOCAL(void) +read_colormap (tga_source_ptr sinfo, int cmaplen, int mapentrysize) +/* Read the colormap from a Targa file */ +{ + int i; + + /* Presently only handles 24-bit BGR format */ + if (mapentrysize != 24) + ERREXIT(sinfo->cinfo, JERR_TGA_BADCMAP); + + for (i = 0; i < cmaplen; i++) { + sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); + } +} + + +/* + * read_pixel methods: get a single pixel from Targa file into tga_pixel[] + */ + +METHODDEF(void) +read_non_rle_pixel (tga_source_ptr sinfo) +/* Read one Targa pixel from the input file; no RLE expansion */ +{ + register FILE *infile = sinfo->pub.input_file; + register int i; + + for (i = 0; i < sinfo->pixel_size; i++) { + sinfo->tga_pixel[i] = (U_CHAR) getc(infile); + } +} + + +METHODDEF(void) +read_rle_pixel (tga_source_ptr sinfo) +/* Read one Targa pixel from the input file, expanding RLE data as needed */ +{ + register FILE *infile = sinfo->pub.input_file; + register int i; + + /* Duplicate previously read pixel? */ + if (sinfo->dup_pixel_count > 0) { + sinfo->dup_pixel_count--; + return; + } + + /* Time to read RLE block header? */ + if (--sinfo->block_count < 0) { /* decrement pixels remaining in block */ + i = read_byte(sinfo); + if (i & 0x80) { /* Start of duplicate-pixel block? */ + sinfo->dup_pixel_count = i & 0x7F; /* number of dups after this one */ + sinfo->block_count = 0; /* then read new block header */ + } else { + sinfo->block_count = i & 0x7F; /* number of pixels after this one */ + } + } + + /* Read next pixel */ + for (i = 0; i < sinfo->pixel_size; i++) { + sinfo->tga_pixel[i] = (U_CHAR) getc(infile); + } +} + + +/* + * Read one row of pixels. + * + * We provide several different versions depending on input file format. + */ + + +METHODDEF(JDIMENSION) +get_8bit_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 8-bit grayscale pixels */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); + } + return 1; +} + +METHODDEF(JDIMENSION) +get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 8-bit colormap indexes */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register int t; + register JSAMPROW ptr; + register JDIMENSION col; + register JSAMPARRAY colormap = source->colormap; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + t = UCH(source->tga_pixel[0]); + *ptr++ = colormap[0][t]; + *ptr++ = colormap[1][t]; + *ptr++ = colormap[2][t]; + } + return 1; +} + +METHODDEF(JDIMENSION) +get_16bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 16-bit pixels */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register int t; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + t = UCH(source->tga_pixel[0]); + t += UCH(source->tga_pixel[1]) << 8; + /* We expand 5 bit data to 8 bit sample width. + * The format of the 16-bit (LSB first) input word is + * xRRRRRGGGGGBBBBB + */ + ptr[2] = (JSAMPLE) c5to8bits[t & 0x1F]; + t >>= 5; + ptr[1] = (JSAMPLE) c5to8bits[t & 0x1F]; + t >>= 5; + ptr[0] = (JSAMPLE) c5to8bits[t & 0x1F]; + ptr += 3; + } + return 1; +} + +METHODDEF(JDIMENSION) +get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 24-bit pixels */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[2]); /* change BGR to RGB order */ + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[1]); + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); + } + return 1; +} + +/* + * Targa also defines a 32-bit pixel format with order B,G,R,A. + * We presently ignore the attribute byte, so the code for reading + * these pixels is identical to the 24-bit routine above. + * This works because the actual pixel length is only known to read_pixel. + */ + +#define get_32bit_row get_24bit_row + + +/* + * This method is for re-reading the input data in standard top-down + * row order. The entire image has already been read into whole_image + * with proper conversion of pixel format, but it's in a funny row order. + */ + +METHODDEF(JDIMENSION) +get_memory_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + JDIMENSION source_row; + + /* Compute row of source that maps to current_row of normal order */ + /* For now, assume image is bottom-up and not interlaced. */ + /* NEEDS WORK to support interlaced images! */ + source_row = cinfo->image_height - source->current_row - 1; + + /* Fetch that row from virtual array */ + source->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + source_row, (JDIMENSION) 1, FALSE); + + source->current_row++; + return 1; +} + + +/* + * This method loads the image into whole_image during the first call on + * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call + * get_memory_row on subsequent calls. + */ + +METHODDEF(JDIMENSION) +preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + JDIMENSION row; + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + + /* Read the data into a virtual array in input-file row order. */ + for (row = 0; row < cinfo->image_height; row++) { + if (progress != NULL) { + progress->pub.pass_counter = (long) row; + progress->pub.pass_limit = (long) cinfo->image_height; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } + source->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, row, (JDIMENSION) 1, TRUE); + (*source->get_pixel_rows) (cinfo, sinfo); + } + if (progress != NULL) + progress->completed_extra_passes++; + + /* Set up to read from the virtual array in unscrambled order */ + source->pub.get_pixel_rows = get_memory_row; + source->current_row = 0; + /* And read the first row */ + return get_memory_row(cinfo, sinfo); +} + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + U_CHAR targaheader[18]; + int idlen, cmaptype, subtype, flags, interlace_type, components; + unsigned int width, height, maplen; + boolean is_bottom_up; + +#define GET_2B(offset) ((unsigned int) UCH(targaheader[offset]) + \ + (((unsigned int) UCH(targaheader[offset+1])) << 8)) + + if (! ReadOK(source->pub.input_file, targaheader, 18)) + ERREXIT(cinfo, JERR_INPUT_EOF); + + /* Pretend "15-bit" pixels are 16-bit --- we ignore attribute bit anyway */ + if (targaheader[16] == 15) + targaheader[16] = 16; + + idlen = UCH(targaheader[0]); + cmaptype = UCH(targaheader[1]); + subtype = UCH(targaheader[2]); + maplen = GET_2B(5); + width = GET_2B(12); + height = GET_2B(14); + source->pixel_size = UCH(targaheader[16]) >> 3; + flags = UCH(targaheader[17]); /* Image Descriptor byte */ + + is_bottom_up = ((flags & 0x20) == 0); /* bit 5 set => top-down */ + interlace_type = flags >> 6; /* bits 6/7 are interlace code */ + + if (cmaptype > 1 || /* cmaptype must be 0 or 1 */ + source->pixel_size < 1 || source->pixel_size > 4 || + (UCH(targaheader[16]) & 7) != 0 || /* bits/pixel must be multiple of 8 */ + interlace_type != 0) /* currently don't allow interlaced image */ + ERREXIT(cinfo, JERR_TGA_BADPARMS); + + if (subtype > 8) { + /* It's an RLE-coded file */ + source->read_pixel = read_rle_pixel; + source->block_count = source->dup_pixel_count = 0; + subtype -= 8; + } else { + /* Non-RLE file */ + source->read_pixel = read_non_rle_pixel; + } + + /* Now should have subtype 1, 2, or 3 */ + components = 3; /* until proven different */ + cinfo->in_color_space = JCS_RGB; + + switch (subtype) { + case 1: /* Colormapped image */ + if (source->pixel_size == 1 && cmaptype == 1) + source->get_pixel_rows = get_8bit_row; + else + ERREXIT(cinfo, JERR_TGA_BADPARMS); + TRACEMS2(cinfo, 1, JTRC_TGA_MAPPED, width, height); + break; + case 2: /* RGB image */ + switch (source->pixel_size) { + case 2: + source->get_pixel_rows = get_16bit_row; + break; + case 3: + source->get_pixel_rows = get_24bit_row; + break; + case 4: + source->get_pixel_rows = get_32bit_row; + break; + default: + ERREXIT(cinfo, JERR_TGA_BADPARMS); + break; + } + TRACEMS2(cinfo, 1, JTRC_TGA, width, height); + break; + case 3: /* Grayscale image */ + components = 1; + cinfo->in_color_space = JCS_GRAYSCALE; + if (source->pixel_size == 1) + source->get_pixel_rows = get_8bit_gray_row; + else + ERREXIT(cinfo, JERR_TGA_BADPARMS); + TRACEMS2(cinfo, 1, JTRC_TGA_GRAY, width, height); + break; + default: + ERREXIT(cinfo, JERR_TGA_BADPARMS); + break; + } + + if (is_bottom_up) { + /* Create a virtual array to buffer the upside-down image. */ + source->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) width * components, (JDIMENSION) height, (JDIMENSION) 1); + if (cinfo->progress != NULL) { + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + progress->total_extra_passes++; /* count file input as separate pass */ + } + /* source->pub.buffer will point to the virtual array. */ + source->pub.buffer_height = 1; /* in case anyone looks at it */ + source->pub.get_pixel_rows = preload_image; + } else { + /* Don't need a virtual array, but do need a one-row input buffer. */ + source->whole_image = NULL; + source->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) width * components, (JDIMENSION) 1); + source->pub.buffer_height = 1; + source->pub.get_pixel_rows = source->get_pixel_rows; + } + + while (idlen--) /* Throw away ID field */ + (void) read_byte(source); + + if (maplen > 0) { + if (maplen > 256 || GET_2B(3) != 0) + ERREXIT(cinfo, JERR_TGA_BADCMAP); + /* Allocate space to store the colormap */ + source->colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) maplen, (JDIMENSION) 3); + /* and read it from the file */ + read_colormap(source, (int) maplen, UCH(targaheader[7])); + } else { + if (cmaptype) /* but you promised a cmap! */ + ERREXIT(cinfo, JERR_TGA_BADPARMS); + source->colormap = NULL; + } + + cinfo->input_components = components; + cinfo->data_precision = 8; + cinfo->image_width = width; + cinfo->image_height = height; +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for Targa format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_targa (j_compress_ptr cinfo) +{ + tga_source_ptr source; + + /* Create module interface object */ + source = (tga_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(tga_source_struct)); + source->cinfo = cinfo; /* make back link for subroutines */ + /* Fill in method ptrs, except get_pixel_rows which start_input sets */ + source->pub.start_input = start_input_tga; + source->pub.finish_input = finish_input_tga; + + return (cjpeg_source_ptr) source; +} + +#endif /* TARGA_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/readme.dos b/3rdparty/openctm/tools/jpeg/readme.dos new file mode 100644 index 000000000..4d10d2d70 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/readme.dos @@ -0,0 +1,15 @@ +This archive contains a DOS-friendly version of the Independent JPEG Group's +source code. It differs from the normal distribution in that: + +1. The archive format is zip rather than tar+gzip. You should be able to +unpack it with PKUNZIP (2.04g or later) or Info-Zip's unzip or 7-Zip. + +2. Newlines have been converted from Unix (LF) to DOS (CR/LF) style in all +text files, but not in the binary files (test*.*). + +3. Object files have been included for jmemdosa.asm. See jdosaobj.txt. + +Please see the main README file for the primary documentation. + +If you'd rather have a non-DOSified archive, see the ARCHIVE LOCATIONS section +of README. diff --git a/3rdparty/openctm/tools/jpeg/structure.txt b/3rdparty/openctm/tools/jpeg/structure.txt new file mode 100644 index 000000000..bbed6d6d2 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/structure.txt @@ -0,0 +1,945 @@ +IJG JPEG LIBRARY: SYSTEM ARCHITECTURE + +Copyright (C) 1991-2009, Thomas G. Lane, Guido Vollbeding. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +This file provides an overview of the architecture of the IJG JPEG software; +that is, the functions of the various modules in the system and the interfaces +between modules. For more precise details about any data structure or calling +convention, see the include files and comments in the source code. + +We assume that the reader is already somewhat familiar with the JPEG standard. +The README file includes references for learning about JPEG. The file +libjpeg.txt describes the library from the viewpoint of an application +programmer using the library; it's best to read that file before this one. +Also, the file coderules.txt describes the coding style conventions we use. + +In this document, JPEG-specific terminology follows the JPEG standard: + A "component" means a color channel, e.g., Red or Luminance. + A "sample" is a single component value (i.e., one number in the image data). + A "coefficient" is a frequency coefficient (a DCT transform output number). + A "block" is an 8x8 group of samples or coefficients. + An "MCU" (minimum coded unit) is an interleaved set of blocks of size + determined by the sampling factors, or a single block in a + noninterleaved scan. +We do not use the terms "pixel" and "sample" interchangeably. When we say +pixel, we mean an element of the full-size image, while a sample is an element +of the downsampled image. Thus the number of samples may vary across +components while the number of pixels does not. (This terminology is not used +rigorously throughout the code, but it is used in places where confusion would +otherwise result.) + + +*** System features *** + +The IJG distribution contains two parts: + * A subroutine library for JPEG compression and decompression. + * cjpeg/djpeg, two sample applications that use the library to transform + JFIF JPEG files to and from several other image formats. +cjpeg/djpeg are of no great intellectual complexity: they merely add a simple +command-line user interface and I/O routines for several uncompressed image +formats. This document concentrates on the library itself. + +We desire the library to be capable of supporting all JPEG baseline, extended +sequential, and progressive DCT processes. Hierarchical processes are not +supported. + +The library does not support the lossless (spatial) JPEG process. Lossless +JPEG shares little or no code with lossy JPEG, and would normally be used +without the extensive pre- and post-processing provided by this library. +We feel that lossless JPEG is better handled by a separate library. + +Within these limits, any set of compression parameters allowed by the JPEG +spec should be readable for decompression. (We can be more restrictive about +what formats we can generate.) Although the system design allows for all +parameter values, some uncommon settings are not yet implemented and may +never be; nonintegral sampling ratios are the prime example. Furthermore, +we treat 8-bit vs. 12-bit data precision as a compile-time switch, not a +run-time option, because most machines can store 8-bit pixels much more +compactly than 12-bit. + +By itself, the library handles only interchange JPEG datastreams --- in +particular the widely used JFIF file format. The library can be used by +surrounding code to process interchange or abbreviated JPEG datastreams that +are embedded in more complex file formats. (For example, libtiff uses this +library to implement JPEG compression within the TIFF file format.) + +The library includes a substantial amount of code that is not covered by the +JPEG standard but is necessary for typical applications of JPEG. These +functions preprocess the image before JPEG compression or postprocess it after +decompression. They include colorspace conversion, downsampling/upsampling, +and color quantization. This code can be omitted if not needed. + +A wide range of quality vs. speed tradeoffs are possible in JPEG processing, +and even more so in decompression postprocessing. The decompression library +provides multiple implementations that cover most of the useful tradeoffs, +ranging from very-high-quality down to fast-preview operation. On the +compression side we have generally not provided low-quality choices, since +compression is normally less time-critical. It should be understood that the +low-quality modes may not meet the JPEG standard's accuracy requirements; +nonetheless, they are useful for viewers. + + +*** Portability issues *** + +Portability is an essential requirement for the library. The key portability +issues that show up at the level of system architecture are: + +1. Memory usage. We want the code to be able to run on PC-class machines +with limited memory. Images should therefore be processed sequentially (in +strips), to avoid holding the whole image in memory at once. Where a +full-image buffer is necessary, we should be able to use either virtual memory +or temporary files. + +2. Near/far pointer distinction. To run efficiently on 80x86 machines, the +code should distinguish "small" objects (kept in near data space) from +"large" ones (kept in far data space). This is an annoying restriction, but +fortunately it does not impact code quality for less brain-damaged machines, +and the source code clutter turns out to be minimal with sufficient use of +pointer typedefs. + +3. Data precision. We assume that "char" is at least 8 bits, "short" and +"int" at least 16, "long" at least 32. The code will work fine with larger +data sizes, although memory may be used inefficiently in some cases. However, +the JPEG compressed datastream must ultimately appear on external storage as a +sequence of 8-bit bytes if it is to conform to the standard. This may pose a +problem on machines where char is wider than 8 bits. The library represents +compressed data as an array of values of typedef JOCTET. If no data type +exactly 8 bits wide is available, custom data source and data destination +modules must be written to unpack and pack the chosen JOCTET datatype into +8-bit external representation. + + +*** System overview *** + +The compressor and decompressor are each divided into two main sections: +the JPEG compressor or decompressor proper, and the preprocessing or +postprocessing functions. The interface between these two sections is the +image data that the official JPEG spec regards as its input or output: this +data is in the colorspace to be used for compression, and it is downsampled +to the sampling factors to be used. The preprocessing and postprocessing +steps are responsible for converting a normal image representation to or from +this form. (Those few applications that want to deal with YCbCr downsampled +data can skip the preprocessing or postprocessing step.) + +Looking more closely, the compressor library contains the following main +elements: + + Preprocessing: + * Color space conversion (e.g., RGB to YCbCr). + * Edge expansion and downsampling. Optionally, this step can do simple + smoothing --- this is often helpful for low-quality source data. + JPEG proper: + * MCU assembly, DCT, quantization. + * Entropy coding (sequential or progressive, Huffman or arithmetic). + +In addition to these modules we need overall control, marker generation, +and support code (memory management & error handling). There is also a +module responsible for physically writing the output data --- typically +this is just an interface to fwrite(), but some applications may need to +do something else with the data. + +The decompressor library contains the following main elements: + + JPEG proper: + * Entropy decoding (sequential or progressive, Huffman or arithmetic). + * Dequantization, inverse DCT, MCU disassembly. + Postprocessing: + * Upsampling. Optionally, this step may be able to do more general + rescaling of the image. + * Color space conversion (e.g., YCbCr to RGB). This step may also + provide gamma adjustment [ currently it does not ]. + * Optional color quantization (e.g., reduction to 256 colors). + * Optional color precision reduction (e.g., 24-bit to 15-bit color). + [This feature is not currently implemented.] + +We also need overall control, marker parsing, and a data source module. +The support code (memory management & error handling) can be shared with +the compression half of the library. + +There may be several implementations of each of these elements, particularly +in the decompressor, where a wide range of speed/quality tradeoffs is very +useful. It must be understood that some of the best speedups involve +merging adjacent steps in the pipeline. For example, upsampling, color space +conversion, and color quantization might all be done at once when using a +low-quality ordered-dither technique. The system architecture is designed to +allow such merging where appropriate. + + +Note: it is convenient to regard edge expansion (padding to block boundaries) +as a preprocessing/postprocessing function, even though the JPEG spec includes +it in compression/decompression. We do this because downsampling/upsampling +can be simplified a little if they work on padded data: it's not necessary to +have special cases at the right and bottom edges. Therefore the interface +buffer is always an integral number of blocks wide and high, and we expect +compression preprocessing to pad the source data properly. Padding will occur +only to the next block (8-sample) boundary. In an interleaved-scan situation, +additional dummy blocks may be used to fill out MCUs, but the MCU assembly and +disassembly logic will create or discard these blocks internally. (This is +advantageous for speed reasons, since we avoid DCTing the dummy blocks. +It also permits a small reduction in file size, because the compressor can +choose dummy block contents so as to minimize their size in compressed form. +Finally, it makes the interface buffer specification independent of whether +the file is actually interleaved or not.) Applications that wish to deal +directly with the downsampled data must provide similar buffering and padding +for odd-sized images. + + +*** Poor man's object-oriented programming *** + +It should be clear by now that we have a lot of quasi-independent processing +steps, many of which have several possible behaviors. To avoid cluttering the +code with lots of switch statements, we use a simple form of object-style +programming to separate out the different possibilities. + +For example, two different color quantization algorithms could be implemented +as two separate modules that present the same external interface; at runtime, +the calling code will access the proper module indirectly through an "object". + +We can get the limited features we need while staying within portable C. +The basic tool is a function pointer. An "object" is just a struct +containing one or more function pointer fields, each of which corresponds to +a method name in real object-oriented languages. During initialization we +fill in the function pointers with references to whichever module we have +determined we need to use in this run. Then invocation of the module is done +by indirecting through a function pointer; on most machines this is no more +expensive than a switch statement, which would be the only other way of +making the required run-time choice. The really significant benefit, of +course, is keeping the source code clean and well structured. + +We can also arrange to have private storage that varies between different +implementations of the same kind of object. We do this by making all the +module-specific object structs be separately allocated entities, which will +be accessed via pointers in the master compression or decompression struct. +The "public" fields or methods for a given kind of object are specified by +a commonly known struct. But a module's initialization code can allocate +a larger struct that contains the common struct as its first member, plus +additional private fields. With appropriate pointer casting, the module's +internal functions can access these private fields. (For a simple example, +see jdatadst.c, which implements the external interface specified by struct +jpeg_destination_mgr, but adds extra fields.) + +(Of course this would all be a lot easier if we were using C++, but we are +not yet prepared to assume that everyone has a C++ compiler.) + +An important benefit of this scheme is that it is easy to provide multiple +versions of any method, each tuned to a particular case. While a lot of +precalculation might be done to select an optimal implementation of a method, +the cost per invocation is constant. For example, the upsampling step might +have a "generic" method, plus one or more "hardwired" methods for the most +popular sampling factors; the hardwired methods would be faster because they'd +use straight-line code instead of for-loops. The cost to determine which +method to use is paid only once, at startup, and the selection criteria are +hidden from the callers of the method. + +This plan differs a little bit from usual object-oriented structures, in that +only one instance of each object class will exist during execution. The +reason for having the class structure is that on different runs we may create +different instances (choose to execute different modules). You can think of +the term "method" as denoting the common interface presented by a particular +set of interchangeable functions, and "object" as denoting a group of related +methods, or the total shared interface behavior of a group of modules. + + +*** Overall control structure *** + +We previously mentioned the need for overall control logic in the compression +and decompression libraries. In IJG implementations prior to v5, overall +control was mostly provided by "pipeline control" modules, which proved to be +large, unwieldy, and hard to understand. To improve the situation, the +control logic has been subdivided into multiple modules. The control modules +consist of: + +1. Master control for module selection and initialization. This has two +responsibilities: + + 1A. Startup initialization at the beginning of image processing. + The individual processing modules to be used in this run are selected + and given initialization calls. + + 1B. Per-pass control. This determines how many passes will be performed + and calls each active processing module to configure itself + appropriately at the beginning of each pass. End-of-pass processing, + where necessary, is also invoked from the master control module. + + Method selection is partially distributed, in that a particular processing + module may contain several possible implementations of a particular method, + which it will select among when given its initialization call. The master + control code need only be concerned with decisions that affect more than + one module. + +2. Data buffering control. A separate control module exists for each + inter-processing-step data buffer. This module is responsible for + invoking the processing steps that write or read that data buffer. + +Each buffer controller sees the world as follows: + +input data => processing step A => buffer => processing step B => output data + | | | + ------------------ controller ------------------ + +The controller knows the dataflow requirements of steps A and B: how much data +they want to accept in one chunk and how much they output in one chunk. Its +function is to manage its buffer and call A and B at the proper times. + +A data buffer control module may itself be viewed as a processing step by a +higher-level control module; thus the control modules form a binary tree with +elementary processing steps at the leaves of the tree. + +The control modules are objects. A considerable amount of flexibility can +be had by replacing implementations of a control module. For example: +* Merging of adjacent steps in the pipeline is done by replacing a control + module and its pair of processing-step modules with a single processing- + step module. (Hence the possible merges are determined by the tree of + control modules.) +* In some processing modes, a given interstep buffer need only be a "strip" + buffer large enough to accommodate the desired data chunk sizes. In other + modes, a full-image buffer is needed and several passes are required. + The control module determines which kind of buffer is used and manipulates + virtual array buffers as needed. One or both processing steps may be + unaware of the multi-pass behavior. + +In theory, we might be able to make all of the data buffer controllers +interchangeable and provide just one set of implementations for all. In +practice, each one contains considerable special-case processing for its +particular job. The buffer controller concept should be regarded as an +overall system structuring principle, not as a complete description of the +task performed by any one controller. + + +*** Compression object structure *** + +Here is a sketch of the logical structure of the JPEG compression library: + + |-- Colorspace conversion + |-- Preprocessing controller --| + | |-- Downsampling +Main controller --| + | |-- Forward DCT, quantize + |-- Coefficient controller --| + |-- Entropy encoding + +This sketch also describes the flow of control (subroutine calls) during +typical image data processing. Each of the components shown in the diagram is +an "object" which may have several different implementations available. One +or more source code files contain the actual implementation(s) of each object. + +The objects shown above are: + +* Main controller: buffer controller for the subsampled-data buffer, which + holds the preprocessed input data. This controller invokes preprocessing to + fill the subsampled-data buffer, and JPEG compression to empty it. There is + usually no need for a full-image buffer here; a strip buffer is adequate. + +* Preprocessing controller: buffer controller for the downsampling input data + buffer, which lies between colorspace conversion and downsampling. Note + that a unified conversion/downsampling module would probably replace this + controller entirely. + +* Colorspace conversion: converts application image data into the desired + JPEG color space; also changes the data from pixel-interleaved layout to + separate component planes. Processes one pixel row at a time. + +* Downsampling: performs reduction of chroma components as required. + Optionally may perform pixel-level smoothing as well. Processes a "row + group" at a time, where a row group is defined as Vmax pixel rows of each + component before downsampling, and Vk sample rows afterwards (remember Vk + differs across components). Some downsampling or smoothing algorithms may + require context rows above and below the current row group; the + preprocessing controller is responsible for supplying these rows via proper + buffering. The downsampler is responsible for edge expansion at the right + edge (i.e., extending each sample row to a multiple of 8 samples); but the + preprocessing controller is responsible for vertical edge expansion (i.e., + duplicating the bottom sample row as needed to make a multiple of 8 rows). + +* Coefficient controller: buffer controller for the DCT-coefficient data. + This controller handles MCU assembly, including insertion of dummy DCT + blocks when needed at the right or bottom edge. When performing + Huffman-code optimization or emitting a multiscan JPEG file, this + controller is responsible for buffering the full image. The equivalent of + one fully interleaved MCU row of subsampled data is processed per call, + even when the JPEG file is noninterleaved. + +* Forward DCT and quantization: Perform DCT, quantize, and emit coefficients. + Works on one or more DCT blocks at a time. (Note: the coefficients are now + emitted in normal array order, which the entropy encoder is expected to + convert to zigzag order as necessary. Prior versions of the IJG code did + the conversion to zigzag order within the quantization step.) + +* Entropy encoding: Perform Huffman or arithmetic entropy coding and emit the + coded data to the data destination module. Works on one MCU per call. + For progressive JPEG, the same DCT blocks are fed to the entropy coder + during each pass, and the coder must emit the appropriate subset of + coefficients. + +In addition to the above objects, the compression library includes these +objects: + +* Master control: determines the number of passes required, controls overall + and per-pass initialization of the other modules. + +* Marker writing: generates JPEG markers (except for RSTn, which is emitted + by the entropy encoder when needed). + +* Data destination manager: writes the output JPEG datastream to its final + destination (e.g., a file). The destination manager supplied with the + library knows how to write to a stdio stream; for other behaviors, the + surrounding application may provide its own destination manager. + +* Memory manager: allocates and releases memory, controls virtual arrays + (with backing store management, where required). + +* Error handler: performs formatting and output of error and trace messages; + determines handling of nonfatal errors. The surrounding application may + override some or all of this object's methods to change error handling. + +* Progress monitor: supports output of "percent-done" progress reports. + This object represents an optional callback to the surrounding application: + if wanted, it must be supplied by the application. + +The error handler, destination manager, and progress monitor objects are +defined as separate objects in order to simplify application-specific +customization of the JPEG library. A surrounding application may override +individual methods or supply its own all-new implementation of one of these +objects. The object interfaces for these objects are therefore treated as +part of the application interface of the library, whereas the other objects +are internal to the library. + +The error handler and memory manager are shared by JPEG compression and +decompression; the progress monitor, if used, may be shared as well. + + +*** Decompression object structure *** + +Here is a sketch of the logical structure of the JPEG decompression library: + + |-- Entropy decoding + |-- Coefficient controller --| + | |-- Dequantize, Inverse DCT +Main controller --| + | |-- Upsampling + |-- Postprocessing controller --| |-- Colorspace conversion + |-- Color quantization + |-- Color precision reduction + +As before, this diagram also represents typical control flow. The objects +shown are: + +* Main controller: buffer controller for the subsampled-data buffer, which + holds the output of JPEG decompression proper. This controller's primary + task is to feed the postprocessing procedure. Some upsampling algorithms + may require context rows above and below the current row group; when this + is true, the main controller is responsible for managing its buffer so as + to make context rows available. In the current design, the main buffer is + always a strip buffer; a full-image buffer is never required. + +* Coefficient controller: buffer controller for the DCT-coefficient data. + This controller handles MCU disassembly, including deletion of any dummy + DCT blocks at the right or bottom edge. When reading a multiscan JPEG + file, this controller is responsible for buffering the full image. + (Buffering DCT coefficients, rather than samples, is necessary to support + progressive JPEG.) The equivalent of one fully interleaved MCU row of + subsampled data is processed per call, even when the source JPEG file is + noninterleaved. + +* Entropy decoding: Read coded data from the data source module and perform + Huffman or arithmetic entropy decoding. Works on one MCU per call. + For progressive JPEG decoding, the coefficient controller supplies the prior + coefficients of each MCU (initially all zeroes), which the entropy decoder + modifies in each scan. + +* Dequantization and inverse DCT: like it says. Note that the coefficients + buffered by the coefficient controller have NOT been dequantized; we + merge dequantization and inverse DCT into a single step for speed reasons. + When scaled-down output is asked for, simplified DCT algorithms may be used + that need fewer coefficients and emit fewer samples per DCT block, not the + full 8x8. Works on one DCT block at a time. + +* Postprocessing controller: buffer controller for the color quantization + input buffer, when quantization is in use. (Without quantization, this + controller just calls the upsampler.) For two-pass quantization, this + controller is responsible for buffering the full-image data. + +* Upsampling: restores chroma components to full size. (May support more + general output rescaling, too. Note that if undersized DCT outputs have + been emitted by the DCT module, this module must adjust so that properly + sized outputs are created.) Works on one row group at a time. This module + also calls the color conversion module, so its top level is effectively a + buffer controller for the upsampling->color conversion buffer. However, in + all but the highest-quality operating modes, upsampling and color + conversion are likely to be merged into a single step. + +* Colorspace conversion: convert from JPEG color space to output color space, + and change data layout from separate component planes to pixel-interleaved. + Works on one pixel row at a time. + +* Color quantization: reduce the data to colormapped form, using either an + externally specified colormap or an internally generated one. This module + is not used for full-color output. Works on one pixel row at a time; may + require two passes to generate a color map. Note that the output will + always be a single component representing colormap indexes. In the current + design, the output values are JSAMPLEs, so an 8-bit compilation cannot + quantize to more than 256 colors. This is unlikely to be a problem in + practice. + +* Color reduction: this module handles color precision reduction, e.g., + generating 15-bit color (5 bits/primary) from JPEG's 24-bit output. + Not quite clear yet how this should be handled... should we merge it with + colorspace conversion??? + +Note that some high-speed operating modes might condense the entire +postprocessing sequence to a single module (upsample, color convert, and +quantize in one step). + +In addition to the above objects, the decompression library includes these +objects: + +* Master control: determines the number of passes required, controls overall + and per-pass initialization of the other modules. This is subdivided into + input and output control: jdinput.c controls only input-side processing, + while jdmaster.c handles overall initialization and output-side control. + +* Marker reading: decodes JPEG markers (except for RSTn). + +* Data source manager: supplies the input JPEG datastream. The source + manager supplied with the library knows how to read from a stdio stream; + for other behaviors, the surrounding application may provide its own source + manager. + +* Memory manager: same as for compression library. + +* Error handler: same as for compression library. + +* Progress monitor: same as for compression library. + +As with compression, the data source manager, error handler, and progress +monitor are candidates for replacement by a surrounding application. + + +*** Decompression input and output separation *** + +To support efficient incremental display of progressive JPEG files, the +decompressor is divided into two sections that can run independently: + +1. Data input includes marker parsing, entropy decoding, and input into the + coefficient controller's DCT coefficient buffer. Note that this + processing is relatively cheap and fast. + +2. Data output reads from the DCT coefficient buffer and performs the IDCT + and all postprocessing steps. + +For a progressive JPEG file, the data input processing is allowed to get +arbitrarily far ahead of the data output processing. (This occurs only +if the application calls jpeg_consume_input(); otherwise input and output +run in lockstep, since the input section is called only when the output +section needs more data.) In this way the application can avoid making +extra display passes when data is arriving faster than the display pass +can run. Furthermore, it is possible to abort an output pass without +losing anything, since the coefficient buffer is read-only as far as the +output section is concerned. See libjpeg.txt for more detail. + +A full-image coefficient array is only created if the JPEG file has multiple +scans (or if the application specifies buffered-image mode anyway). When +reading a single-scan file, the coefficient controller normally creates only +a one-MCU buffer, so input and output processing must run in lockstep in this +case. jpeg_consume_input() is effectively a no-op in this situation. + +The main impact of dividing the decompressor in this fashion is that we must +be very careful with shared variables in the cinfo data structure. Each +variable that can change during the course of decompression must be +classified as belonging to data input or data output, and each section must +look only at its own variables. For example, the data output section may not +depend on any of the variables that describe the current scan in the JPEG +file, because these may change as the data input section advances into a new +scan. + +The progress monitor is (somewhat arbitrarily) defined to treat input of the +file as one pass when buffered-image mode is not used, and to ignore data +input work completely when buffered-image mode is used. Note that the +library has no reliable way to predict the number of passes when dealing +with a progressive JPEG file, nor can it predict the number of output passes +in buffered-image mode. So the work estimate is inherently bogus anyway. + +No comparable division is currently made in the compression library, because +there isn't any real need for it. + + +*** Data formats *** + +Arrays of pixel sample values use the following data structure: + + typedef something JSAMPLE; a pixel component value, 0..MAXJSAMPLE + typedef JSAMPLE *JSAMPROW; ptr to a row of samples + typedef JSAMPROW *JSAMPARRAY; ptr to a list of rows + typedef JSAMPARRAY *JSAMPIMAGE; ptr to a list of color-component arrays + +The basic element type JSAMPLE will typically be one of unsigned char, +(signed) char, or short. Short will be used if samples wider than 8 bits are +to be supported (this is a compile-time option). Otherwise, unsigned char is +used if possible. If the compiler only supports signed chars, then it is +necessary to mask off the value when reading. Thus, all reads of JSAMPLE +values must be coded as "GETJSAMPLE(value)", where the macro will be defined +as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere. + +With these conventions, JSAMPLE values can be assumed to be >= 0. This helps +simplify correct rounding during downsampling, etc. The JPEG standard's +specification that sample values run from -128..127 is accommodated by +subtracting 128 from the sample value in the DCT step. Similarly, during +decompression the output of the IDCT step will be immediately shifted back to +0..255. (NB: different values are required when 12-bit samples are in use. +The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be +defined as 255 and 128 respectively in an 8-bit implementation, and as 4095 +and 2048 in a 12-bit implementation.) + +We use a pointer per row, rather than a two-dimensional JSAMPLE array. This +choice costs only a small amount of memory and has several benefits: +* Code using the data structure doesn't need to know the allocated width of + the rows. This simplifies edge expansion/compression, since we can work + in an array that's wider than the logical picture width. +* Indexing doesn't require multiplication; this is a performance win on many + machines. +* Arrays with more than 64K total elements can be supported even on machines + where malloc() cannot allocate chunks larger than 64K. +* The rows forming a component array may be allocated at different times + without extra copying. This trick allows some speedups in smoothing steps + that need access to the previous and next rows. + +Note that each color component is stored in a separate array; we don't use the +traditional layout in which the components of a pixel are stored together. +This simplifies coding of modules that work on each component independently, +because they don't need to know how many components there are. Furthermore, +we can read or write each component to a temporary file independently, which +is helpful when dealing with noninterleaved JPEG files. + +In general, a specific sample value is accessed by code such as + GETJSAMPLE(image[colorcomponent][row][col]) +where col is measured from the image left edge, but row is measured from the +first sample row currently in memory. Either of the first two indexings can +be precomputed by copying the relevant pointer. + + +Since most image-processing applications prefer to work on images in which +the components of a pixel are stored together, the data passed to or from the +surrounding application uses the traditional convention: a single pixel is +represented by N consecutive JSAMPLE values, and an image row is an array of +(# of color components)*(image width) JSAMPLEs. One or more rows of data can +be represented by a pointer of type JSAMPARRAY in this scheme. This scheme is +converted to component-wise storage inside the JPEG library. (Applications +that want to skip JPEG preprocessing or postprocessing will have to contend +with component-wise storage.) + + +Arrays of DCT-coefficient values use the following data structure: + + typedef short JCOEF; a 16-bit signed integer + typedef JCOEF JBLOCK[DCTSIZE2]; an 8x8 block of coefficients + typedef JBLOCK *JBLOCKROW; ptr to one horizontal row of 8x8 blocks + typedef JBLOCKROW *JBLOCKARRAY; ptr to a list of such rows + typedef JBLOCKARRAY *JBLOCKIMAGE; ptr to a list of color component arrays + +The underlying type is at least a 16-bit signed integer; while "short" is big +enough on all machines of interest, on some machines it is preferable to use +"int" for speed reasons, despite the storage cost. Coefficients are grouped +into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than +"8" and "64"). + +The contents of a coefficient block may be in either "natural" or zigzagged +order, and may be true values or divided by the quantization coefficients, +depending on where the block is in the processing pipeline. In the current +library, coefficient blocks are kept in natural order everywhere; the entropy +codecs zigzag or dezigzag the data as it is written or read. The blocks +contain quantized coefficients everywhere outside the DCT/IDCT subsystems. +(This latter decision may need to be revisited to support variable +quantization a la JPEG Part 3.) + +Notice that the allocation unit is now a row of 8x8 blocks, corresponding to +eight rows of samples. Otherwise the structure is much the same as for +samples, and for the same reasons. + +On machines where malloc() can't handle a request bigger than 64Kb, this data +structure limits us to rows of less than 512 JBLOCKs, or a picture width of +4000+ pixels. This seems an acceptable restriction. + + +On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW) +must be declared as "far" pointers, but the upper levels can be "near" +(implying that the pointer lists are allocated in the DS segment). +We use a #define symbol FAR, which expands to the "far" keyword when +compiling on 80x86 machines and to nothing elsewhere. + + +*** Suspendable processing *** + +In some applications it is desirable to use the JPEG library as an +incremental, memory-to-memory filter. In this situation the data source or +destination may be a limited-size buffer, and we can't rely on being able to +empty or refill the buffer at arbitrary times. Instead the application would +like to have control return from the library at buffer overflow/underrun, and +then resume compression or decompression at a later time. + +This scenario is supported for simple cases. (For anything more complex, we +recommend that the application "bite the bullet" and develop real multitasking +capability.) The libjpeg.txt file goes into more detail about the usage and +limitations of this capability; here we address the implications for library +structure. + +The essence of the problem is that the entropy codec (coder or decoder) must +be prepared to stop at arbitrary times. In turn, the controllers that call +the entropy codec must be able to stop before having produced or consumed all +the data that they normally would handle in one call. That part is reasonably +straightforward: we make the controller call interfaces include "progress +counters" which indicate the number of data chunks successfully processed, and +we require callers to test the counter rather than just assume all of the data +was processed. + +Rather than trying to restart at an arbitrary point, the current Huffman +codecs are designed to restart at the beginning of the current MCU after a +suspension due to buffer overflow/underrun. At the start of each call, the +codec's internal state is loaded from permanent storage (in the JPEG object +structures) into local variables. On successful completion of the MCU, the +permanent state is updated. (This copying is not very expensive, and may even +lead to *improved* performance if the local variables can be registerized.) +If a suspension occurs, the codec simply returns without updating the state, +thus effectively reverting to the start of the MCU. Note that this implies +leaving some data unprocessed in the source/destination buffer (ie, the +compressed partial MCU). The data source/destination module interfaces are +specified so as to make this possible. This also implies that the data buffer +must be large enough to hold a worst-case compressed MCU; a couple thousand +bytes should be enough. + +In a successive-approximation AC refinement scan, the progressive Huffman +decoder has to be able to undo assignments of newly nonzero coefficients if it +suspends before the MCU is complete, since decoding requires distinguishing +previously-zero and previously-nonzero coefficients. This is a bit tedious +but probably won't have much effect on performance. Other variants of Huffman +decoding need not worry about this, since they will just store the same values +again if forced to repeat the MCU. + +This approach would probably not work for an arithmetic codec, since its +modifiable state is quite large and couldn't be copied cheaply. Instead it +would have to suspend and resume exactly at the point of the buffer end. + +The JPEG marker reader is designed to cope with suspension at an arbitrary +point. It does so by backing up to the start of the marker parameter segment, +so the data buffer must be big enough to hold the largest marker of interest. +Again, a couple KB should be adequate. (A special "skip" convention is used +to bypass COM and APPn markers, so these can be larger than the buffer size +without causing problems; otherwise a 64K buffer would be needed in the worst +case.) + +The JPEG marker writer currently does *not* cope with suspension. +We feel that this is not necessary; it is much easier simply to require +the application to ensure there is enough buffer space before starting. (An +empty 2K buffer is more than sufficient for the header markers; and ensuring +there are a dozen or two bytes available before calling jpeg_finish_compress() +will suffice for the trailer.) This would not work for writing multi-scan +JPEG files, but we simply do not intend to support that capability with +suspension. + + +*** Memory manager services *** + +The JPEG library's memory manager controls allocation and deallocation of +memory, and it manages large "virtual" data arrays on machines where the +operating system does not provide virtual memory. Note that the same +memory manager serves both compression and decompression operations. + +In all cases, allocated objects are tied to a particular compression or +decompression master record, and they will be released when that master +record is destroyed. + +The memory manager does not provide explicit deallocation of objects. +Instead, objects are created in "pools" of free storage, and a whole pool +can be freed at once. This approach helps prevent storage-leak bugs, and +it speeds up operations whenever malloc/free are slow (as they often are). +The pools can be regarded as lifetime identifiers for objects. Two +pools/lifetimes are defined: + * JPOOL_PERMANENT lasts until master record is destroyed + * JPOOL_IMAGE lasts until done with image (JPEG datastream) +Permanent lifetime is used for parameters and tables that should be carried +across from one datastream to another; this includes all application-visible +parameters. Image lifetime is used for everything else. (A third lifetime, +JPOOL_PASS = one processing pass, was originally planned. However it was +dropped as not being worthwhile. The actual usage patterns are such that the +peak memory usage would be about the same anyway; and having per-pass storage +substantially complicates the virtual memory allocation rules --- see below.) + +The memory manager deals with three kinds of object: +1. "Small" objects. Typically these require no more than 10K-20K total. +2. "Large" objects. These may require tens to hundreds of K depending on + image size. Semantically they behave the same as small objects, but we + distinguish them for two reasons: + * On MS-DOS machines, large objects are referenced by FAR pointers, + small objects by NEAR pointers. + * Pool allocation heuristics may differ for large and small objects. + Note that individual "large" objects cannot exceed the size allowed by + type size_t, which may be 64K or less on some machines. +3. "Virtual" objects. These are large 2-D arrays of JSAMPLEs or JBLOCKs + (typically large enough for the entire image being processed). The + memory manager provides stripwise access to these arrays. On machines + without virtual memory, the rest of the array may be swapped out to a + temporary file. + +(Note: JSAMPARRAY and JBLOCKARRAY data structures are a combination of large +objects for the data proper and small objects for the row pointers. For +convenience and speed, the memory manager provides single routines to create +these structures. Similarly, virtual arrays include a small control block +and a JSAMPARRAY or JBLOCKARRAY working buffer, all created with one call.) + +In the present implementation, virtual arrays are only permitted to have image +lifespan. (Permanent lifespan would not be reasonable, and pass lifespan is +not very useful since a virtual array's raison d'etre is to store data for +multiple passes through the image.) We also expect that only "small" objects +will be given permanent lifespan, though this restriction is not required by +the memory manager. + +In a non-virtual-memory machine, some performance benefit can be gained by +making the in-memory buffers for virtual arrays be as large as possible. +(For small images, the buffers might fit entirely in memory, so blind +swapping would be very wasteful.) The memory manager will adjust the height +of the buffers to fit within a prespecified maximum memory usage. In order +to do this in a reasonably optimal fashion, the manager needs to allocate all +of the virtual arrays at once. Therefore, there isn't a one-step allocation +routine for virtual arrays; instead, there is a "request" routine that simply +allocates the control block, and a "realize" routine (called just once) that +determines space allocation and creates all of the actual buffers. The +realize routine must allow for space occupied by non-virtual large objects. +(We don't bother to factor in the space needed for small objects, on the +grounds that it isn't worth the trouble.) + +To support all this, we establish the following protocol for doing business +with the memory manager: + 1. Modules must request virtual arrays (which may have only image lifespan) + during the initial setup phase, i.e., in their jinit_xxx routines. + 2. All "large" objects (including JSAMPARRAYs and JBLOCKARRAYs) must also be + allocated during initial setup. + 3. realize_virt_arrays will be called at the completion of initial setup. + The above conventions ensure that sufficient information is available + for it to choose a good size for virtual array buffers. +Small objects of any lifespan may be allocated at any time. We expect that +the total space used for small objects will be small enough to be negligible +in the realize_virt_arrays computation. + +In a virtual-memory machine, we simply pretend that the available space is +infinite, thus causing realize_virt_arrays to decide that it can allocate all +the virtual arrays as full-size in-memory buffers. The overhead of the +virtual-array access protocol is very small when no swapping occurs. + +A virtual array can be specified to be "pre-zeroed"; when this flag is set, +never-yet-written sections of the array are set to zero before being made +available to the caller. If this flag is not set, never-written sections +of the array contain garbage. (This feature exists primarily because the +equivalent logic would otherwise be needed in jdcoefct.c for progressive +JPEG mode; we may as well make it available for possible other uses.) + +The first write pass on a virtual array is required to occur in top-to-bottom +order; read passes, as well as any write passes after the first one, may +access the array in any order. This restriction exists partly to simplify +the virtual array control logic, and partly because some file systems may not +support seeking beyond the current end-of-file in a temporary file. The main +implication of this restriction is that rearrangement of rows (such as +converting top-to-bottom data order to bottom-to-top) must be handled while +reading data out of the virtual array, not while putting it in. + + +*** Memory manager internal structure *** + +To isolate system dependencies as much as possible, we have broken the +memory manager into two parts. There is a reasonably system-independent +"front end" (jmemmgr.c) and a "back end" that contains only the code +likely to change across systems. All of the memory management methods +outlined above are implemented by the front end. The back end provides +the following routines for use by the front end (none of these routines +are known to the rest of the JPEG code): + +jpeg_mem_init, jpeg_mem_term system-dependent initialization/shutdown + +jpeg_get_small, jpeg_free_small interface to malloc and free library routines + (or their equivalents) + +jpeg_get_large, jpeg_free_large interface to FAR malloc/free in MSDOS machines; + else usually the same as + jpeg_get_small/jpeg_free_small + +jpeg_mem_available estimate available memory + +jpeg_open_backing_store create a backing-store object + +read_backing_store, manipulate a backing-store object +write_backing_store, +close_backing_store + +On some systems there will be more than one type of backing-store object +(specifically, in MS-DOS a backing store file might be an area of extended +memory as well as a disk file). jpeg_open_backing_store is responsible for +choosing how to implement a given object. The read/write/close routines +are method pointers in the structure that describes a given object; this +lets them be different for different object types. + +It may be necessary to ensure that backing store objects are explicitly +released upon abnormal program termination. For example, MS-DOS won't free +extended memory by itself. To support this, we will expect the main program +or surrounding application to arrange to call self_destruct (typically via +jpeg_destroy) upon abnormal termination. This may require a SIGINT signal +handler or equivalent. We don't want to have the back end module install its +own signal handler, because that would pre-empt the surrounding application's +ability to control signal handling. + +The IJG distribution includes several memory manager back end implementations. +Usually the same back end should be suitable for all applications on a given +system, but it is possible for an application to supply its own back end at +need. + + +*** Implications of DNL marker *** + +Some JPEG files may use a DNL marker to postpone definition of the image +height (this would be useful for a fax-like scanner's output, for instance). +In these files the SOF marker claims the image height is 0, and you only +find out the true image height at the end of the first scan. + +We could read these files as follows: +1. Upon seeing zero image height, replace it by 65535 (the maximum allowed). +2. When the DNL is found, update the image height in the global image + descriptor. +This implies that control modules must avoid making copies of the image +height, and must re-test for termination after each MCU row. This would +be easy enough to do. + +In cases where image-size data structures are allocated, this approach will +result in very inefficient use of virtual memory or much-larger-than-necessary +temporary files. This seems acceptable for something that probably won't be a +mainstream usage. People might have to forgo use of memory-hogging options +(such as two-pass color quantization or noninterleaved JPEG files) if they +want efficient conversion of such files. (One could improve efficiency by +demanding a user-supplied upper bound for the height, less than 65536; in most +cases it could be much less.) + +The standard also permits the SOF marker to overestimate the image height, +with a DNL to give the true, smaller height at the end of the first scan. +This would solve the space problems if the overestimate wasn't too great. +However, it implies that you don't even know whether DNL will be used. + +This leads to a couple of very serious objections: +1. Testing for a DNL marker must occur in the inner loop of the decompressor's + Huffman decoder; this implies a speed penalty whether the feature is used + or not. +2. There is no way to hide the last-minute change in image height from an + application using the decoder. Thus *every* application using the IJG + library would suffer a complexity penalty whether it cared about DNL or + not. +We currently do not support DNL because of these problems. + +A different approach is to insist that DNL-using files be preprocessed by a +separate program that reads ahead to the DNL, then goes back and fixes the SOF +marker. This is a much simpler solution and is probably far more efficient. +Even if one wants piped input, buffering the first scan of the JPEG file needs +a lot smaller temp file than is implied by the maximum-height method. For +this approach we'd simply treat DNL as a no-op in the decompressor (at most, +check that it matches the SOF image height). + +We will not worry about making the compressor capable of outputting DNL. +Something similar to the first scheme above could be applied if anyone ever +wants to make that work. diff --git a/3rdparty/openctm/tools/jpeg/testimg.bmp b/3rdparty/openctm/tools/jpeg/testimg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..012223eb67e30448ecb29b2c8ce501f98c0d464c GIT binary patch literal 35050 zcmb824?tGs+5b<&x0o0aGZGwFC^|`ICXh;x8Im#+2U;>ff^33G{z1!$3Ye`{ZzWc) z$P#5*ZtRcfT4siO%fZOaNL~5rD-yVB%*+zmB!m4v-|L(Qt!=;e_q)%-c@7VckLPo~ z*LB_3{pZ|Ia@t=XajYcvahz{)bb_BB^K*$4Xs>^1cZvJkh}aQM>JxW6vDZ~PH)cTIug$eB26t`i%Z>&*MrYG=fa?>Jlk@QyQM z>0GDyz9#4T@nf8(kKcB#AN`p#=l)7((UXrjOJ+7XFYNe@6E}X76Q6vSlYL9FvwrDp zXKMCC&g7-va}K_Jz_~B$XHIR+TIYtFQ=N>l?>KiYUF~Gwe%6_gzT26Vc;4Bv?IUMN z^`p*6U!8ML=45BnvU2B!2@g42{&LD`uBdSCeR7_&AaAa7=-0n?%4(l;#wNexjLn(u zEL!|GXA9@?`_ffT^T!>|b>F(pnZNX2=g8qR&e*hR&f?pm*Ve(2<;oO5oy`E@6M zcBhkjcb$_m?P2GUJa2dC%NaH7@6Plm7dnqW^_cU$v}7kWXQp%JlfOG@4;DHP zu5NOks@v`?e*PY3YhjLab7F@xKDovD&af_LdVZ1f!(aZ$@!gW-+&-h#`Sy+XI;juj zIIkbCbAE8gZ=D}**x_ur|8?j0jsN9z{QM`*3)LSwPjCK%^T$1}IzOuTgR|)SZ#%F3 z_PA63lV3W&TejG_XKuFhm+m%a(OqviOIAPU{AP8fv;DXGoL@ZtoU`-zC(bYGUT|hi zKIkkhsCJ&8{{v^y1G}C7%$VUczR}>s#_w@9ZrS0Cy=S5`GCtLL<>fD&dD+>{eNUD+ z6;GUZw*TZO&d`MCoSz-q?(F*0>rTSdBAXMw&$Jl`#*Pn z{_D4#th;~a{AlUx&U^p!zO#7Ka_5D)uRAd#YMjIg#ZLA8i=CUNEpnEw{;88bxz!mv zd5`n$aSu3;?yJI|TAjNmPIHzqZm zo_89ad={Prr}X|(XX?D~Ig?ZOIQi2uoWuLxbY9(a*10+1HRq0*mCm~BBLefGC($WgjW~Na_X_wZ~k+gfu9oPQt`-|7!vUcp) zoqNxp|NXlA53XDH%1wI~FTUmfrHtJ(_Fug5nJ}L(-Ivb8m*DeCfG?pY!IzK_6csjn z^ysN!c^&Q_^d_IL$QNA{T3Q-f8d}2>KcO|H{904$ZTd}rt_j#QF>2zbO*Nr+-(6D^ z(9yA}rsnRu?}o9XBcvjvAOu1cLmib?k(O2wlC<#JM~xB4or1h#-GKMjtsC^wO^g4Z zDEBlUkIQy??yLit>d&Yj{HGbWjC$; z>)<8WbwI@;&f3#a&!(G^)flFJ2R2|+)T&ickWm5>&~Z`C-7pq+K$#X&fx-H%)Qq(v zEh#FgFQ&TFgBg3vA!)g8-Nu7J{wsn031{)xe}3E8TlQkB64LDO0%=Wjh7Zhy^n{5) zLF~2h0K6zVT3m)`GJox^!s>$%%Dv*?l6)TLcz_r?t zw2GwN($RnFW5*skw0HV>%=O^oAN}*m```AzKJR_XELBEodTCda;lr#litM#${8C%7 z5Tkve(E@Nc7f#1+F@wcOu}HSi(2R^tn=(vBASsgZZbxJtL>U~=D=X4gn8k)9MSXL2 zudUjtANt1hSAM^4-T6UB{#So=E&QK>58d+2jPz(z0Isnhc2&0CZ4V8jwN7 zKA*9e3-)pfNiTbHiVn4UOQ=4?EyO2Yc2=OD3&)c^Mx~8XcnwKQ3fbNFSz^wG6CJzr z+X(sl^Zy?*Ui7bTxn=AvV-M|l<k=W_l>`O{~|@!9@@Eg`W5E~{eLj_UZAmu zURn3xQ!{5qu84@Jj);!1;w%s0#E2IL-JVfE|o%G1(dF( zHH$#w-_>xyyLglNBOd5VsV5L;TGR;%NlLooOFCLDIsKLCM?N}28nF0cie9(x#i977J;xTvf7B~Xf(`-j`mGV3kn(1;S0T6r~BoCR>t=g5$)H|Qm`;k zAqEr|2b7k|k{vhB_=S{=D+=VI*lJqRZuw(x<#Ef{wPO#h{q~`~J3rd{(H?T0|BH~l zw1;kfH8QzRpFVMubK{KgMDq#o+)^H4q%LJddUSPlC}9Q}sUbUtBq5~BsMsPyyukMr zLf0wrRq`L#P!ozfDyTYKMs&m@d8oL?>Q#{FxbUTiF2tP0w~U37xN~UlM<1EF_LBU& zgRzI6KU`l}SXke1A};QPi3r~b4^dC$$Z3X46oPS_>XC#MK~#|;d1;v1MQ9i4cL7l^ zQrO8CVbs6Ks7bi4IIZJ4RUMA%4!8`hB8}`^zfyUmrOiyjg3sLX#zithXXVhLBYOwE zLTvr_LXyUVJ@%PzT{RTK!n2bpaUixp^(DgQ6Q9dFh3Ts4OAiXNBqt~&X?OA6ii~>L z=HeKT3FPg>rw4c@JLbBGguJ7o*mQJUe*}+*u_`B6q4o!rN7C*)Zn&s=T)cDVk)1n{ z5g}jMd;Z8x|JEg4#9MBCwNK&Dwzjiv4UL}}&e)OEQ5+y0on9S{&_L5h;gK@jq%%z~J$k`Z z-NpxyswK~#Kd*G>-?g#?IrfpO4i^??$7i=?pSxH`;aQQ1x*|f^&$JY!mmmbC4QU!; zGD;%b*!?r5{$vmNtb&b_xZ;40im0TH04fd&4Gc?l+`WGB2-8A_BsINpQNBuzCsSQ} zh{Sa|t*ik9);%=+B2)f~Pd@WVa((^Kp|SC8XU~Oi#ZqOfUQtMOJy9B3iIBNQvolQM zY*0{0Q&@2?oCk8jJTE@tU9N~!{fiPHEKcZ%N{Xtu4r9Hbqid-Cy_XLpq2u4Ywv`Bo zI6KD@chK?o1Ez*8oVxL~hmQE$B^M!*zm5I-^L_f%4vlS#XNxs&G(>hMWT+=B*7yPS z9AQ$55yxyvZw?AdYkDdKWe~{#y(dpe`^`8xq7ZL{xhP;$z{G$A8q2hbX-RrIQa>t< zGc{FL0=UBZ147cy^gT$PbJ5w4wNP>kIu4kT7m^hA#sJdui~jCEy!A)9g>B(&`T1=i z4h;{V+z^-BOk|~q4@}!GW)!6!>~K}-ICIFtrlMZ`dJ!+SSN^I?K!p)nLzPcYfHjRb zB?NRtg+x_&#%ht&cJe_&568;qC^WK~7Rp*LBmpp})jM|Y6$8RTiqm#4ymrH&e-?7_ z-=A+7+BOscrQ^`HdI)8!LM*o*D5o@k-aO?3B>pIuRB0Avb4&WnAz@8EiDXK8I2Sba z(@RD9VR3N)hzXn6Xhu$q0aQ4YGnbx~OK;L~Ro%cEGrb4jnn9Bvf^wAGdn6%EM@9 zQil{I%~7u7)dpsZw2+>8{N_uCtSGKHvwP!fswh270LLD>^~!o`jI(Fsg_#{+8J`_H zd8?{N?9`+LZ;BbLNWWA(O6p2VL_}_KZnIl^c$hqyre>e6y6WJe+#MRwu{){*{RGG^ z%F4t5F|JUz91==JjuqR33+(x#H#-X~n+c;)2-&27RfXJoK&G z4;KzCY{L-^GCn@O?Ogcetsn|8u3URe6=3b%3_xyJtp_{Fs-4mw8Yrmf7ZNCAb>Te3 z&YS2_d_eMA6Y9Kz1O8tO8oK2ilp2xT340CnJd4$aZi^+8!5Vbc4>Jz3T>q zrTKgTivrF}T}NJrw64T^zB8-7u(mC>@+<=C!R~B!_~dZ#{5m2doXsxk1s&aZOC`}Hf&jZAH!U(UpmU}m|doIzWc9KnaHP!qD?=%kNPE(#&#j3H5iBrk_iy&bYw z|C6VpU&}L74}LkBp>yu{Akv_PFrvD1#hDogWvzR@H7h&5tc+NScqQ>YNC}^(qvwyV zGkQXn_bS;dpZ@?l9ufVjn{&5CwxkzDOF$K1dhJ#+n$^On{^PtYlNQjuYJjLH9r4IT zHI}b}hg*`YdLHRg5_eRUAmoN4JFOidm!nbt%KZ=K;fyqBqpPDs2Nrd{J>$JwZ~E4K zv+~PYd*UlwTjNUxm-NK@t&J*z4^hWpp2r7q9WRR)upA;)#-2l*SG%j%2~Cottly$t;ko>8f<`K z1T?lDMhGt|{>Umq&n+(|1P~!9%?-I-xhqx#`7|0}l!~ENgLsWa5M{xkzKKi1CLyHE zRCG(0ASA}RDF8+l&scR}4(XEWH#{<_Y3gf(ES;g_`_{*Ao-w4@S7d_>(bWXD#_ICi zS-02b=LZJD2ww>W8!d?sjE@f#V_Vx+S46k|@H?a-o57a5oECvjC+Dlh6rOug6TL3Mw#iVRZCV`F-F``L_FD%3v8ga8^s^rZhGk; zV;np8962)R@duwO2=d8F?85Tt(dD_TpUls%3~X(M2*TFNl1ebG;xK=V4VSIb)zK^D z6lFOUd)#CIEYD*7gkElkj(xhY))hf?wz@IYQ<2Ia^QEuf^;AEjgcKZzMoE<^9WA{v z1urBz_A5Ke+X}7=U)s3g{JIVA4Vc=5D{>9Z;Y({6ZE0>Utj#BciVn0^)3HPv>Oowk z-4X8hMKG1m`HM?vxV=)klBvK~GUM={@j?|vw7cM_l#l?bi&=&L(c+ewCH%4RUBD=1Eb|apMlZq|mamY}KnC z6<;rg^JMf}tmyoRQqycTvY}5ypFS|s>zbe(6iPSTF!qYIs&>ps2+4D0y!>*5ykylS zA77%#8r2(fOf(ZtkZFwnDaY~j6=YCxI?=l*x+WtcxAxp^Jw37K&Q93XewN_b#*Y;o z&|;4$sVSFHS(cQXt2!4RPF&qeyz$G3rq)Ene0jKk;cqVe6w)9s2vK=TM#5@tS66Q2 zwxF7tgbuWvn6N1$gHbpTsiBnuB}|M$Mwb$ogiwzKlGLxGziPCY1Dr|dhqPxHHNOJJ z=(xhRb5+^df$bk8wwLAm0hO9sJe5DTrT{5K*bPxV0e)B1L9+{lj5>(hYMT-T%9ImR z%BQILjE?xD%oQ2C`gF|nWMY7nbW@*3qAJ;{7gi@xe|V4>>jILUDB`NeXIMx# zimF1YYG+51Q!;8ekkPV?h={ntpb3(evU?n0tD@$N=5zD<4fyCfMF20YDT@77@k;yZIRxoKGAu41E=E|u= zyK%J?Q>AuXFloUg3$32DdJgI8X!VEdbRep@z#zK61+5Sw&5Vp9DyHc2?vZJ4)4JlIsMOk^4m{T9e zsiI?COEa>;DZ#=|Y(>74Cu2{>#`0v8?q3blQXm;C|2Q{NQKwH=^2}F>1~-$@9=t72ng-*%!Nyk22g~>>{AdeYJp&0>5zdSILi8k=k8U zcND|aVT^_-J0-pbrI9I8Ez;6Zj;I+=2pM$yg!UNuTW}Q;vgu*FSY>XMld)CtfhlD~ z*!Xj?;q~;CtG|P?HBJU<<>bjKnScV5Wqc=3Vy|2PH~hNQ$`qLZsZO7+K7EqAB9jw> zCZ=h$KcKjyn1S`sMgopi9g3=cW3|Aez>2N9jJ<~HSJR$_#})*-E2FOzOcK>1UvWh4 ztX}w6t$n%Di+63tr7ZEit$XLWQ0$)O>FTJ^;Hn24_Gc!K+q%lI6i6EJXiEojf3Q_o(RFWw@ z@xfK+j>Vpfl|5Pk5-Y8$Lc)}i{w0}g5;HqCmf@eR1X=*y=u|%C1eTiHC%I2#a#u3O zn&3k1ZkizbplV%?z#^96b2ku__lb99+8wDg853 z`uE4`rDgo!*ulUn!m9sAg<2#IGbLS32C^%;t0RF4E>>vRQJ3M3Jn%<1=D7aoGUAdH zY*pG7L$aA4ff}MqtQXSwyVZ=~`Dnm(Vz-f3&B_n#5n^mxJzBYxMi|d)c9OB^h}pup zY+2^Ao@KnfC$lFw7)HEPaa4aqzW&Rg#3VSDy~bx}gYSpjI^_iIuG~V^96&}UCnqn- z%PUsHSdA)d))D~oM^{IyA-&-0R+Fn%IYB|G7-MQsanNQR3H71^W^sC__4=Q>L!b?hRmI`TSQ1!ff8qT5FOyc8B?>$zc@u(_NJPNxFJ9<@vLrs3IE>#~ za#wz0>txz-4TWR?l&+8kqX*nSdeTI4Iyb&bPyCVAqZ@IcG+XuiB>u=OQm^<7RkBh) zjv7@^@OHt9QOMW{f2WI&yma~Gc4^SYDhFv~h`nMO0}9JhOGxWf!DI?26Qf*KQlg6k zB&JFr;E~ZC`p(hAmyp!?YUGca z`stgf-W-DJC2D;vfYS3xwU{0M+)87WIZCZj1#iFo_L(z+gtr(c<$VV87c*-HwgH=Vm;SKSwFM2ZST9pu-_!WtGkz^?;F(tQERWa@(EqT3US&8eI2x(eMNX1^`j0>MK;oY*B*2=Sm z$uoxpWK>tTgiQL6c|hjnJm{JryE_#>Kwe*-9n?8L)zI{oLW(E97GCAj+wJ#&i?&Cj`#xSRCQtrUnG#ZeTD|& zW;#KMA!`LSlXJt{&@=~Z`JGD$Bo_lEWtMfBDXs4&<^<~fo|JqDeA;v$C?T&cCM6?TyHYW|(R?i1P*v&+A}%_QWN?xjHU!?GgCFy=p5R5@BxrZl|A&OVr>LasG*$uW@ z6^f#$X;g#MHbe^#AJD=iB4_+3Kk==GngK7ov37#sd5d> zd4XImr_1b#p;)ZdRU+5pMcFEXlHFqCdZ<)k@KrJ6vxW^DcDlQ#If5kh?#AkI5kYyQ z=iNC^^+*&wR;$FQ4AlgMQSRxwrOPPDQcM-Z%?HGYj`GL-YY06M?tgm!{u}2|nXK3h zo?D4T!dS*>QbFh>jRM!i$*@$;EWQkjqj?!?>AL-yH>RXm!qY#qN2W^?RJewy@QS69 z5Mix+h+I;iBgdqYl8`D5Cn9M0M}OF_IwEbs=s*AY&O1l1T%gf7FW4BQ=ajNuDiJYi zjIyybv}lpZ_`+rTUUnhzM?Kg{N4)ZjB!pCor}jwhVa8Nr=(G}pT2(x7Fd*fQT>7%W zI${S|tvzUFaUsM=S*}bS<&>(TniVOTVvzPuLGno=tzsrqFhaUYW|uSO**LDcUv$RA zNu%$&>(0?61TZoZVA4s*1rk&7$AmP-#>Pf!5MSr!QI}O*M%lN<)6ejPC?%gJ^c0NB zZ6WM*kO(B#)|Pdb5g-%eOR7{ovZ<9-M|G(4icb-}Ucb;2!r9Z*TDENdawV_I#+8y2 zgJ_bt5y@U4h;iNYkNE_NNeC+$KmPQvVataN>%OL6=)h7&cN;S@LWbXe*Ij?UbND1W zi=`tYItn%Bn)s!3L`gBC;y@Tb^lh%#eBiRpFQDWaqZHez3sTOR)3m-IH#ZfZ>o_5|=(K{#ZcIS2+W~DSPCc_uRLlEAIiJUTe!&GjYjqPo1)bi4 zt!oPo&dD($hn+qfS6!-U0cug@J^1Il?z-#p;Vz>HMWwK_#Db4031eevBf~W6!q{AJ zpy0p@l*@kb@*3>bTv4EK;*~$1Gw00uuG~>U9UaAyxwZLaIqmIF8v3UCTn23}C^%lQ@3PBYxJ;1dj3Y;$`c$Nftf!uyGh+R=ZRF_1L6Kdx z`4e*5KX^-sFe=i>LWL+6x42#kWNa|wKG-jRKqO4m=$32Gu>~Ntzmy4Bb4!5nywhLw zfvxW%q{W@9KZg-h4XuujPFOO0Dvc0E#^sRWG$({H#2|UqQN>tfw|Et&)1b06oUn7? zWjDBv9Qo-dpME;>)2By%`svd@-alf*wo#*~J6a+OXXWR&qvDG%f|x`96CCnNF&d&B zc$pj`O31+YHi9fo5P|XY-S5u-?(*-NPm;e8kVt2h@2JS={e*g^hMJ4Do)%?ycE4%~ z8I1)-C**|z!IFr#TNxcN8&>aYiB8sdDNtIAguzvl^`wkpH$RC(PZvSNacKv+% z#3%QB`st@P&MBY?lDZ-?xA5?++6f!5KO0!q&HxZf%T~YZK}yE?^D$DhOjRhB z{>tXvdecS3NBMV&CM1bKcj36kP;!=NI_-h%kXb@T*uhX$cZe=Z)~fjrjxuqnsD^$z zE#UQMMjSuBX5YRaDD3Q?Hf`D)Z`||}O07m)F>fi(P4@my;wwP|;&%-FJcB52Ao=+t&53em81h18+x zCQINCUg5(^s^%t+@2*s69acHHAIUj4FZrlI5|jYAjEbmYWeC9Lu7r>sggDW5+bkUb zAZkb3@%Zr_YhYB^898#=!#BM1=sSb{wqe5tFz@+sQ_`8VnQuqV?3#7uz3;xu&=rW8 zfiX&KP>lM5Rs%|!>8UUAWNdsOe;XWM);&HaCSO5^kx2$hl;$9)80z|G))^wl$_(&G z%Wb(By+!UFgOFtytAs3p6;BW*{Q5Wc0v96uv?jK|Vv<;h6591o!$I71ub_?nlY zM97hEzInqte;YJt`jP3coPYeigEJPM8Itz)kmTgsam7RtqGE7-nN^Sqo53kLIm%$o z=5WYkpjQTG2M=x~@5_myrJRyQmODPPE|@$H1d?>fxF%+sbkNBsu}nTgGU_c{2nC(0 z!HGah$J4EkzeESQO8U78+AAF$Bg|RsH>!WyPQsuxe$bD1XCH<$#K*DRf2Z11N^a`ziG3RaMP> zmybA2WX-y|FfKiaN}UNE9ZT}WCuekr1B{nGN1Lk4EJ*sS+@hXGadxJrTHx8S=4Bw) ztQk4-%^Nlh+WT!4C~qD;BkZZGl4o7{;s-H|h%X~W5n}Agp%W4VtGN1gF*yv_p@9ll zpNJdZnu3Ti<8$UF#tcRjf=reSAcnStKwQgpn=hVQ`gJr@*3NW1<}zZfJ>9EwBN7lX z+Il(MS`pCem9kp@oF)ROBut#>DBRd4RMRq*YV!D;<8$Pc#2p|XJ-^o=_wK#oiUAKk z_5Q1UX6;JMVFDm#MZI1{2Y=gy_IARm{4k}2mSP=US!RI@dB8$sYKW38|#%xKt`x*V0xtRSkxs>PHUzD*b6ByQg_5`EkHRUYt7W%<&y_#*A6BMit1ZPp-Y;wewfJ@(MCu@yPRq_kGY72%T+B3ca16;1NX(Il$%0~jU6v4Y3{o8gWUD~xpYd0U z{ZoI{Axc6{?6KJV-`uMUBgWI+apSPnV&-#fS+IZ^$Y!Npw<=Hc$1PaEEElBo>jB#w} z(B%^o%=zPCt-*tD8?2@6)r4n@lE2)B7(UI9Mw4gG{@rb+2VrYYT2Jh+^kB)7$0N#~H zTI-{-p~ujue?4ofq!|OqbYS7W>h#1%vY{gS*Gqi>LAMl$p}b) zQcz!wFyTo@E*xEu`EU6d@yOGy-BZea6IW4ZZ1F?NXpg#(m(Lr$a`@3LyScgiBF5e& zGz6#-$@J6~w$xGUkIPm+{p0WMbJMrhEFd#82Xk7+Xx*uXXpkv%I#!Xhk$9CxLQd?S5M-}YY(RceF|M?%V^ydkq07pujf>vIIEUFOXh$JL zNzYK{t-O5YpJvbQTd`R>YK4W1D0#(hU{_8+l!bBq@xFcg{`gn-{gvJ+5*G3sCNW@d zbY*CshB|9JGsS`-AVVcL*BNH@0)Bn@*Xx#lef)A&i7})?1Y}KB;u6uRu6&Q_^}zA^ zv17;R)N4gZGgJ=}9b+em(MeNk^j1<-^hJ=+VouQ|(mdU4HrK(Rbc;*BcAx zILgUw-4nlhT2;boOR@o_2Uu$XO_48t2O`kybNnN7vIjzJ9Wfr$dTbL z?iEqYF*}z#(%!B*+pfCfUWA-GzPmMR*s`qp^iAXdVPRpzhp&Wd5}3n>yM*&V9I)>E z74N*UP-EqyV&lM{po`aXR~S=MQx6;;ac0E(_r3M*+^m%4%Z4$j2u4NEN*OC>#PGfX zX=Y|1qfrpLkk;Cz`;GEldN*`1>~xkwe@seUYfs&6$KWCIa8(!r(vCEO=}8*F46L*& zR$T`2MzuP4U!dNtB&ZdsM0U$vAX4AyiS;4XlQ!Y_%=FUEWCL0pr|m zIpolwP4ofeF;6heHPzvlOHT?i4oAmVK6>bhm;5@qLVk(QC`EYSz{?{>+<4FLe(~48 zb`K_|mN7rx5Mg8zi^d3J+giy@=ntU7h6baA1QIy*79EwLn~=*gG1u_~Ew@*dtbi70 z3=@0dqku<&o#0%jd|g)vQ{_|J+7o4{f`rj@tX)C#FoZF4@;U630_41v4B5?_w{rMY zRxo({hBsgomzk;CTK+1gAoq>9am>?y{NwL_@sEG3hD#I3OH!7l$Y^0SNL}@kk}~xN zaDwjn+GwMKk#g6%`E@inzWd!}b^U3CEbCEcIYH^`)T${AL{eoaG^4C~@+f72IHy;O zC_*vsx&4E8l>%JEm_L)j9C|wPmgMbTaQ)Gv_#)91zIm!0M{hj1?!ALA;g1xT64Z;$ zlF)RX%0^$I$dYv6Srqgj&iJs4-mR?QRTmK1gufs)Y~;+Ut$JU!>e8-IP{ zufIoi$b?J{v7uy2YmW&T&V<|&%L!y^Iz>0?n57BEE5_J=KKUw^ixCn}xCUxe)09R? zEE_5Hk7LCs_2{;(!hreQ{11!~8Q&$HpBqEWdF;~Rq^pG0u&@QYKVBj!B_oh`j{ejA zubn^tIFuXRJjbGrbc2LPwnq3yfhTdBlz1YnYs!&5%Bjgq)Nf-M^7d z7EoEGLAf@P5hGMhN1jq=JyL!^TF27y>vV!ZCP$;tKUqeiPB#fjEiZe18Jp9t4`UvT zHUjs_*a?Xrfaew*QlnTCE}eaJ_=4dxMo%3*oJI!5dQ^6LC*^(+Kl%{Mf<4w_#gtQqVk7 zlyXINC3=vIZisO{EczpJS*TqYAdqwv0t~4wm&&A6ce9ErCe74|oq#*eh45aQ$%*e$ zRiopsjVp&w3JV*3{}t1x|LmuKe)dl*|0KjeQ}_S=XM6V^xe3U1@5xq$WE%^Fd588I z-RAp7*u;)gr)Xa7*s+hUoS+9So6(&Z@+!b)yBwO9AtIF$TKTrPof4g=%yqw%8@v0L4qel z5^@WhnI&G*!uuqh?sb(~Vhm2HOQBtf!u*g960kLgNfTaq1PXDNgiNG=Pda90oqlV^ z^&e9?4tT~^Cs@07=QsZF)1UwJr$2q*fxSBqv0UFxdvChwnU7!u3HdVzyl9V{{x8J9e(JhoAw;qGuDkc3Z_7^6)~Qy*{X=Sxd0VM zZr?s~`?NQwJ#3Vpe8NcNUw-(Ht9u69U1PeZDmcEf?OdDs*OaB3keHv%nd6*OBn!`W z%0jn(byqhDX0C~(q&0M}*QLZDQ%qT=xRnmL8uHKD;*GJry|sPrE;%H5Wmfl#vsZ2E zm^fs>GybJESfSw?l$~p}@Wj|X&m1}gz2>iKda5*Jyj&~RN>VACT5wzL%CbUxJO*{VKKQzt$Svz;FU623As!=9FVit{HxoJ z(G}vw80%zKKeJhJd{r4aFs)_o@!Hca;SR(QE3?lw!woGGFBO&{y>q>nR04hP)CyJQM=%- z^40j;=wPLnpv+p5yjRiL#niqHKw5U__wKHo?wmwwNm`M=nY}bBAz{eW$1g0E+KUL> zSPWK-CYf{;p+SmKuXgU+acbJdjIXPR@!BVT_hh9QdrAT|OObjpP+5VsDcjsILd~rS z4%XKyuOu%OwO4pS(TE_csB3?&Dr*l8tZEG`!)$pYkg7P`AN&!wMt@21{0d@g2$PsK^^RIqUgORL#1SMy9?XThAl(-05oUjOau4@*Lc zX^#2n(_dV(`Yf3JX|c1?5jR*7bkqZ)+gWwf!)@k>)Pm}4BZG0_G}9(nadw%;^mu!n zaZ2YZ=6hBKBO`=TPCY0tVs>C#TV=bVO%B@4-F4+#-}#Ola@UJLdE~*40N;uqKYr6q zF3!b!i?zlm(TtIs#G@OFqDwV9K!cJ+sRcVenKtd=hkyIqhqZwxpPV-B)TzFG=ZyH` zxocKeGN?mGE0oHiJ%hCKlM-+tkTlX}kSHWZ{*h`E{+^PengvuUi=499_`%%$<7sH0 zqg`7dcgR-ait6N;i#zUm>pOp)K;YT+;*TDAKWb6&ic247scjeUf@9*2?n`4Gj}R;6 zju$2`l|~bLh(PH+`6GyeR1qXWhgo!Mj_=zyYTLGL4Xg75D~I)@^i&QWJeb>Ya4Ld> z76+nvseVL*Q`8GS?DywE6=Mm&-njxe}Fu-E=w6&59X+8b}Q!;FY^R zn05H7w1}WDHp1v<^FNP0@{#Hd0?$s(d9W!UHaiPUAX%>17eShHe1~hQ@BH?iciutA zH@A-*Gv;LwH@`4&;J|7qbCaL@2j#J=QL?9%lT&{pMVXwYj!8hj#n#>Oq8C`*;8KK#V?Q)6CUe<1a;7g9eQSjsvb+zwf^=(-<#bH|(; zpZ?1=*VNW>$Ew|F1f-_ba^gz5*@&RRq@?7~$>Y@+7HTxvRpzOps?n_!5i&bIzbwBk zn;V?zM&~h}D&H?6M|AGdEfkZJ^<47v-@5gt-WY02!m^&|O=RPHtae;`#ECBLRZ%*^ z2qBM7(i|pr_yf-CZ*D&|XZ=3r3#PvC;lOHL8Qt!=NRZ$B=9x3wwsmzCHfVyon`0WI z8+4eqDJ^;A_$ef#16`qoz>4v33yl8$D$YrpU47D6*q&6ecMnRKODAs?m_az1%e6~~*z(@#G6 zwD0kP%Qkm*EI%7d&z_r(>`~BJyz~3q7ofsqYv$=vdk|x-tCe}z1#>p|OkC!q`jb>8OdUWO7W{EtvD;Po@!QPR$uJf*GHkoib6qUH6WP(Mkj}g1Hxw zDWZ+kCX;2X6lU`)@(@mFaFDyQkYy&ff9|B2gfrIsU<)3Ze1VMjVz4? zp&&6zT2cUdm~>uZtqkxySvc!Ie{zwGy{v*{iSZ*lk4*m?_dYc0hbeZNWk;3+B2kBC zN5z@GeLp?LT*vhXMs@zOvxrbCK21HZc7@bB)D&C)jU}J@otS*?9ASrBIITb5AlVtC zO*KPVwKJ5gDzK{NV89hb&B$Vqg9fu2VG2CzMpiq7OiCik^#C+`H9=cjyMObO-{h7* z_sHM(h|D!oPfU5_;v<93KlHQnKYQpk=QHknFiVx8Y7(S1AeG>8*VUXkJD5UFRWY!7 z;6UXF+Dt}INSi;xrC}C(balVar<^jqJhycXihep47HIZkSOG}T4eztk&EjtqKqe!s z zB&E!jLc}>g;H8BsVZ|z&4+*65IdCvV(jf!`$ZkWkSGD95{#f0Q zOAxAcwnJ;$+h9^Xi4BjSlEk|ymxR6G;XV8X6Us~9dw7ZEp4@}H< zWh9Lgql^_$>)44XVuGlrmoR0iycLe@6Qo<*n zoP08zrLC14(9pzK)g7sBR$`8Y9VlblZoj=x@~jV-W0;bu+gPiDQyA(RhK@FaT+=y0 z)J8x(J&fFS?yg-Q{P*Fm$fjQ%T({wGe|zX}e;f4uBi}bQwL9|BhK;j#?`Bz#kPt_J z*dFdw3gSR0O-oI{b{o#dC_Wbw6nUg5aYw@}=Qq7UnL+84hT80^x^qVjn6dncFJ<* zCSG|>TzPZL%%&L|2OKYCK}DOO5^Q8gl0L`H7KX6Ar~yp~aI&~sBl zcTRAoIzeXLuCJgfY#2-3Smdjd^QnSZg9XU`f+5Oii8_LURAf=~W#j0>G zO`U!1#y4KtcyPn{^MgKO+wkbYsZ8pK>L@NQw)-Ec@Jb1t(F1X^3&kKr2$95N>)jcp z>F8bpS4hRIe&uJovwAXbJI1~5;n_WP_1WR52P4L+x;?v+^&Wc4%G!qJ=a&ucS#CPU z&g#<=$=8=0zVZVN7BS^OlMa^A9WM>(^mn7G8LMg8{g2wXe*L0ZW{$6=$$M%xvuYQz zTR3~_Yp=cb`|}Sy^xDBcE!@Hi<(tIl%INwcl&+S>Dr5*OakFPZV%eUKf}^PZD3Uu; zbP1ySomkzP6;sLjBjIiFJ(=>!*mL#7RHHnZeU9yHZEf7vDO=CBYPE>W;Oq&7kwG&< zX3k80^?62L8R!=l)9RRV%oGAE;#1I3veP~HvDzu+{j`>6Mg(^=FpRuqOW2k?cEe{+ zedAAW96UJSjXTU#L6nZv8X#K5VOnCd&?%VOX%kR&>H-v@5cM!9FVTUJ-({-wBlIhe zTfO?~CnvK|W8u)iN5ggb&g#ZU8705^>L&|7M@7tw0jPu^zE}Xh1zUD+Spe(s*|V>m zdhNBd7jD_TDyd@=6OGW(C`qo__#!ER0bFgEZjB)XF^bUL3EI`sqK?H?glkSkXhCU5o7WOH;rci5m+aet9_gertCBFS^{#%7{kuAkqqfh2~ zWtk=h($k;#)?4@e=kw2Bdg=Q!nBd*iG$gqtx4D^>E?vNJ)#JvE>&Fyvbj(|_`(u<` zI%&)GleQeap1~|3N=G^vE#{b#s3?D;$y}so+o)5%THKV?ubIh-qHm;mJkWqt-Dy5OwP=?rPnWIuyxB) z{RhS^=JFjMmUE?MM;ddwW zCFU7@uEqua#hqa2F3Ka-bQMl{i_S>Jobn5JtoGg=X!iXnZK4!LU zG2fIluJN7u5m+Thf^-CvBT6z>lc3ZCB!d2N+6y2zM19i>-c}}P6 zbW!=tE!H>zPuZ;%Q_?V%5J2RbG#w|^{l;NUcIo&m7`0HItw^rrtXj15maLMPQ%*D# zhL`8&HuJSfT1bxjPKFF=nlWSc(W5I@0@)PS1mPB@p|a+CbmKUk4qpL4o~=EgjZ~5y zX)xlB*DnALN(m`zUDZ*Hjad$$7OpnJ%9r>W`5Z&kzR_)G`dea+g0g6O5ujcJi!x3t zr|XF2xLLNzmZ(w~vZAHeY+WwdD~mbt{RnXiQ7SAUH)M#W6d57s%BgPI{qb(T4S<#3 zKC|<2={!gXqKiY4n4-f>YvA;A`BAP8|1fFdrlL?gZ&w>2EpVa|JXky?q3guQYSXWc zpNUW#A8e3NTBRWo-IutlU5GI923lLJIPRLNi|5~Kc|geJlPv0}#r1Rra#`THD|tv0 zkrBj|E2#jMF8!GDO;*L%_f@*rob$25UH=IBnG@=x_F&#TbnfIp897(yIIwaVtYDk2nKo8`R?Umm)p8O{Rht%3XYES3w9KL5)!UQs z>`Nf@Bu1_OnA;#78@isms>x)$b~a^;5ViQ`b+#C?%Vt;Iqip2l8d9wl5oK0ND1&na2#nS=mF%#||PbUeCpwzkTw}UY|rHE`rhcdWAGI?Zq<43p@BsOv#9tc0ojCq^Kw*%@GyI zWU_n>hj6qIPFy%ETe9loNn3LaAQjw_?}0#S_O3e`V;*xg0K9hg(WOhTXT-mwqm$KE zEHZFvW?t?u2KrfJC|Q6Ju4G}IJMT0z=PD7XDiRje6mizFYV6Wj4dMdSSC1g%CA$PN zUEI?xo-;~DtA(g_h&`$sp+Gz^C(~4(%=*^htYeAYx=$P^CBQYyO+U_@Ki^1qo*ympUV1Nm$tI*~4egW8%usfBqlyRx&Y=f4^ln zBd{6KVpKs-P$B&)*2TZ`k@{el(jY+;m$!EXwR*@1S&@>Okt(qsDQSR&Lkh80OtIw_%A{&eB8KkG9Ap$H$a=*gD!>_(SW4457Qk|i-*O8HP6eSm0c*0fe|8ybcdKKJU3so0((W3lQ*zU;v+st6VA zfV9v6CXl|0yoGn%aYx@fu6_2|XaDpph}W)UUKvp*iDmy1kOnewx*GnwaAV-!HL&;c z-{@+Zj;_6$rJ9D)(b5~lnk)&KaNZWrsJorpAtHz&l}!2h!2k!P@D4Kj{nPwRc>5$LzjG7p`3Sr)y{5v4skfwiU|x zADFjLTug7T*9?YhASAmO+GDRgxjN#I0Fv~$8{ZtKFUFCnie|E=*U-1faE3bQdW!^w zl!t89WJJh5^$lmw!icqo(Wl1Rwu?+gbhAp%t>|=&lzPBeq%M6;cI&&NZ{OV`l6LRd zvha>;WveoSAQ9SiVb@D&M`oHrq3~f|9OK!K$}9dt``I{wRN+ewK`hrYqlD6M`T*!F z)m;P#*^8;b1EpM2no3KUiBAm;XS0VE&U*E!r}B~rsp=S%sY0b>TNaJhBw=7&plFJfgK`tT~s^3N83MZi?sYxr*OhESyYS`$p+l>5=WZR&4GvvAOp#Amc24!t}@s-79vGRvsrm+Zax2?jlP1zR}C3bP#i$p z$gU(%`W_3f=)ZRYX5Tgi3^dp`@3j z(u-!dR7(OjJ{hPR&n{@l87R?F*Rm1vZ36nvIKJNi#>w^Sud*5T{poO1)aj+PAS)@A z1G$-jl;jQko9v;p4kxcjuUVw#8hMi*;-dIbO<8p0+NO@W@yDn3uUYf*3%~s3I57?^ zU36V>afMbEk*xwLLX@&RT*j$G(-0Xw-_zeXboDa@*{Q8!UCP#a^bEC#aY?>TRt;c) z>f6p%BBOfQQn+V=-g0bL{mCi-vH_+aFI&Kv>2c-@6I}=Lty%Mf7k>F6i_T;vsHEEpdt@$XZJ})S4H}7G>^slN}0JF4_+^!QDUs5JW5^JiI&=iD9i|JTVZaC z8tj(y+kYlRqx29t3A0psRJOf6LN^v;sX%Jfm(i)t0N-^!Ek!Cq-s?9#!?K+|m8<0G zXjja3y?CNDAu%T4+zoeR_%fnJ>yWbuYg@xm`!Wcr$iwckM?*H(Xk8hV*BPk}s6h!* zn#Vr4&_(2SNbn!_BASv?p|Kw(!ii(Ofbv$y1qYM)# z`*Pu*UMNQCMjbViRqTH=7r|7lFHX@^-pKffzKguM*h)cedcDg zp1BH9F%~5uBob?=62?Bw&DQ7X1|9oRItf@3o@FBV8n4DhfCX9XMSqU&Y$fqj@Xz z3~QD>Gt78Z5A~a)rO4RGdK7fr-w9M2#se~!fq1n}dy87>t}}Y4MBcBjN$Gm-i!XNU z-?8t7PMK=whntfYE^J!ZG^8TPw>fpQMAS9$my15oUb4^PiYeUKX7ShiCqx{K$q0R# z0zsFu9xygg^T)=X#pqfok`W;pcjJB(h9wz|G)n4957N^S-pM$ml7_ZyzEQE6cS?hHMJ8RdmYS=`PF9+&V!V3 z_g)qJQ8L;X39~#jUm_x!Rj5jiU3;ZrexT!yVOlnJ7?z4+%xAsGk@+}PG2qpu9+AZ8vuYn008)B050bM zdH|X$SE#R0(NI%U)6&w=F|aW*(9<(;vanudH_NTmw)5K_CiB5ET_A<)7@xKl=bmW-1mz z*;`jwVRxy80@>uEGs|d%bsM|E*5d~v@~%NoY3bOnb8vEriro;GfG8*`DXXZe>D|^h zFf=kYv9Yy-+dCkTZtfnQUfw<^^n>7#(6I1`nAm4=@d=4ZS=l+cdHDs;3tyF2U@EJs zvA8!)%`L5M?fADJdwL0d{R4wT#0k>m)R*a**`?(b^6J|9#^%=H(ecUY*|+aM&i`=% z0ib`g{;dCo{SO!O9~T8BC5V#x9~Y1!^v?t_Q&I`aUSYWfqrMx+DkK+8!={^A*4Rxe zEN^`Pb`2V*V;50a5l8+P z&|Jd&xqhlewzE;Ptp$mALApmGS*is~KNEX0PtwOZelDm7JCBX)ZDlT*ZTz9Hc;(XhfPQY}(U+!{BFx+N8LaMk}uNC4xz=i^*sB-F(Wbp|-LBoXNLwfk&e@cgV~q zHXHeL_6omt;H1IT?>4S);)HnTMm2Nl0q5t$^?0=Z&V`<@Ilpz;#2)(;w9-sZLeNnw zSCYO+ypA%o9S!0W5$03@q?ImNBjzMr-K}x)Yg)gb;^fVpRtR^uY;f2Kdwi(*uL0+2 z5NV3^K|>SzqR@z(0ex+yawiN78B;L4XWh=ZAm)1hq zI#-{=d+^x%<)gi*E&;N}VlyA6`qDJ%l4e;VnSy&17f%Y?MvjiTCCIRrcTl3(_&phA znHf9I=xz&|Z{X3d-q+#si~VbcrFr_C)Z3d#T$Pv%v?gu}*&w8S6=})1JTJEtNbHz< zIJKBU=Bg?C9*(BdI(5ixzZMQC$}`?ls}^6T#-f54=!( z4DBh6PqH)_(aMF+3l-1Y6TaXj6NU$_GzObXLq7+^C~lCtx-Zl?ap~BVXoLmFwaBfz z#J8iSJ@Q3AyqVOvJ~fX&!UORxx@WxGBfYRQ%dZi<4iR?H;k>Mlo4?1@Q!4y=NOX-} zD8fiq8C`rCuX!+WUJv|!zy;Q)inEvXTf79&tbB;>|ld8HsMdPt*P|vX&wXG3-=Z$dm0B7#XEL} zSn$vLQSa{c)31drmLe+-3+AzlN%_0{cw6C&AV~Hex^hX{ud>4BtyjCEh6$4+zoJzf zS>X}$RLe+MqH|zYfbXlE+Tgyoc`*P8reh`MZ>>piufS&Z>zrRr5d|v(yIlfBr4e`@ zv+*{{SWcBKA0!dsmRW8-$}vcJ1l&ies&51>dzjd+a;00eYI1*+qFPI2hIDjw_t!m; zpfJ1;K5CHse!pf|wD+ubhK~H3v%%pvUnI2t#iLd&z8a@5aU*f=DfJEv_7b?T2r2kF z*-GcE9>2^YETI{OYrUz!=ibj>T*T-I5CIz;a8u{mfXwbKR}}iXJR>UA5XTm=Ih1 zvJ?|^Za0x9KwgBe_R`$vvZ9rIrwN@dk&}IzQ*ieH-C&c&oiXn#=d3eSz}+qa_Zy2y z6}t8WRuD6$i9J$r7^E)zfjeDCKAOU&J(1M?JBeG~L;osP;ttYE;BnUa)~ghQq@^y%=PHmQkCuuONSr z($pp3lr%oTEX*C$c~Nn?t`QM+inZ05QqB2&_<}qe4l2921Yq=K#eb?$sj$`EH?z$S z&BiN^OdY2VrE^E>MLo00Mc#mPt#2Bo-O+i6NP{eNu{sUxsjX0yzL0HeAyO$sR(N58 zr#>C)q*bts@SJTrb=>09f;Ip0Eju7RH7aDCL=&92?j;h7Z}@OA_kOf;R}~DhkS+cA z(lk+|WKTg`zSl0w@}MT4+C5x@)oGWo)FPvn*`dOp>en19-%Bv1wfnH@Wp}VeROhwu z!h2BR`H?3ticx)&7GAnvpL|K284iW`+4t=&H|Y5dpe5@^_fRW#1b!+=s=n}qz@dnx zV4qU9J(&c845TQ1YfwtM{}SM9X<8WWynKAKByJu+SwdmCs-UQ}$7l=!25pb~Hk=rTNHVeQrRfIH4TqzKZ z9rc<}U7#qrn>C?-`%Vcr)kuRp?PSyEkld;SZWWQjxiD#KrOf+xjJn7&e|5pXCVKh! zMPs_PPBGP}kPOGR{5AnwH+NFxGZp7hg&w$YMD~_6ytI$aFS)yKJ4hwoB&8NwvP4W$HC+KF62J5cF&?qk(2|Jd%qf#m-I&Wd~ zp$((PZjeE%WhYFTHt(8cmpqg_jQ+r{wo+DYv8w$svMH(9M*XgM-;t!b=OLaxU+)_? z|HCT&I$2miQC3m~c+72V^T$cm?BDM?y`2qCwIzht{yM1pt2ysY=JNtPCsmq} zVy$bNfj_f^)W}?NO>zcq{9^P1qJD0D32@;oXABfJ_`WCuJFUFUf&i};-KV}GLY{0P zk(G8Z0Sj!O3m4KbG@k}hHjZIZEVA-VBgNN%F=J@hFdtoWfv50G1+9r;cl^47%iiEx z*$^40(W=|S@HoKbNvKo_sf$n{8BvHX%{VsWVYU%_APN>8s#TdPeKyaC^d5U45>?vQ zWbQl;G&gaK{#bFFbua7^z=exqPE*ntbofHr({f9DXfIJ?#_-wEi&OpY^C;vjzQ|Zm zWXVvZ)MRDf{rYwDkoq7?ev8TZ%$0TUyEHJ&arj8xmwk?6@qo&KWlz%=Wb*#_zV3P^ z5;nZ=L>!;~t_qbmckffhis8eSrP$s(y4CxNIc9ZAxqszOuAFsudEb{KGa9Imx)mVv zb!mDlKD(sZ7G!C$SO{&}W|&%IZ24kVxG;gSCZwa*rY1>bc=7YF?XY&N*r((UhYj#r zN9nLt2;GL{#Lj>^SO2)5uzgQ-;dDoPYCv~;!{cX2zfw6*bM?GYaxqX5ezqCQh{tuH zuGNN9dN%IMAQyB0>Tqf=x-G~pH7dwHl=kNWHGRv77#eWSt_V{ce%0FCsTKe8CiGhY zA7BHzzHM5gIge4b3v5k4P&(a|Djbal`Z)rq_T(=CQ}sT#sD-Ms3^IrD!+e$H;2sI* zQZsDOjFO2!s7pSm zvJS8wlzKgctWnvAemkeby!yOnH>s`q~%EOR7uU)(>I+(3(rYTeYd?qsONO zM+@}yP zoYgL7l{=HXzP*`S%HuuvdOud>Y4@VYw-fZyw&uw7Z1p`t06nwS&L@<+#qQTCBicZM z{!Ze%guI!MH1RqaDML>FVz9Ds!Sdsg_c^Oi=t}azn|uY6R7|(Jt2*DP?Meq4h!fOX zUb$EmSEM#&=`(+oIkdyOGR49*4mqZYe+M~F^_^BUnzmEZ3wAkus|XvhFuw3rHZ@?S zkI8B*ivG2>1FcGBIU5@Z(a#MFES7j9O8Zux#~AE@=0IR$Yr+IpM$rnDuL}1 zFs%2(UIwc9{^9fbIceZdSWUpdt+^*d3kd^Qe#PP>!OW;3R~fX)mu*UrT7>Rp+ir^cV@1lQ=6Ff8^~-(ij152i9nqTP z*9IhQ8(a6Rav#;|!Fe6tZ9C9lU1H9{OdV$EP+wT0J7ae&2(rch*C(uQN5DI<0i?T7 z#bzX@_+`pUoiAGu3A?v-qPM4^=TSbZpr+sc(=`37*+MGXUinLCl6%RY2D|9A4zatt zH#8vdQ-gl&hU95}ctBQGrntkz6Dm7J@Eg*PQ{Rj^<@4K7Fz3^^Aiq+R# z%JHlvCE5Slj`XfiX6hA6LPD!g{Mef50ytlKBtvQU*RORwOFY|jHu{bZ)JzD!#x7i4 zcL|6OL?+y#&EGTHzmsG{|B)O4ucwtV`>{7x5Nxh)b8s;R;$#t;St-LoYn^Y0PxmYY zUes(vv4%bVV%wNKlE9}4?Fx1V?*?zgIA5 zb_sxV3PV)?d@H!S#%Cq%vju#N$R(5GzP~}OB->FJ`0P4==y#r<=a0c)@!-T=mt*%j zu1i4pDknjq1of$^YQe|e+&`S&P+%v5dFyJRZBxJE(D+_ovu6Xl&HMD!m2~8ormyuu zx(qe8wsjk+d#2IpYJ&Mp^pRksj7EwCwhF3LNJ^yiPN41FZpb3A!uL!{VYjH_0Ov5q z&h(q=7Lx*vCu}>WnVsz*F`N_XW>1FQU%bHe!cQHfS+fd+?PkeZ)9^ZWu#Qc=h$HFZ z_fCk+`|1hRWBC}n;*iz+G8{R^+E4)G`vA9U>Xv>#n!_t;UqMx4PG97JDu5|YY5qe< zhm_co)B^$X#f}O%H|$u77JHCiU;k(`fqL~0)y)sXNuOAcOOdaMy9szrD)dpo^jOJX ze`{-Q)Y7M#y@>Cx15fNAoKm*DU!qOnA%Hq_78*}dneqF*2)Ij~Id`!IFl7~2ekkO* zla40dld9b*KXTJCA!k4cq%}z@PDQ>P%spXBx1`7=dd~YF>&qLVuDLrqXKCe6^#k)t z=zNP|`_6;&QFNPb?LY1Mb4I_mEk)neVQ-4{-3lTT$W+gZi*Rn&Y}U7`8>WcIb{SI2+lxgCIV z#LoI!)vCcwAY=rGm#PNLCYN(l{{fmkq>*7_=!y3${CEIYB-E`ZwawbFOVpALhSXcu z#WwD-qnWG9-HPC1*y_<^@h)ERS4kad6dUIerZPoGvTmcn^q=X(YvMmT^;@&*v&mU8 zq3!lU{nLGOImt{XFcU{6^}L7Hvdc;0r5}6SG%Q!>R(h4(G$KpSzZ92TSAaRC2c0u+ z6O0+(4vG(M1?sbX?ej-hc77IUAzo~d{pC5O(%w&w&^okE47^IRnxy0%5KBd8$l7_o zYD?>u4IEW9RDjv))Zz>w5L1qF-2F@2IA4JB5KC6KD4MD5MD5MD3NB2OC3OC3PD4QE5T>1Y?2b@4nB5}E6ŒG8šG9¥E7²F9ºF9¿E8ÆF;ÉF>ËF?ÌG@ÌG@íCNíCLíCLíDKíDIïBFñ>Bõ@â?@×?<Ñ=;µ@.µ@.µ@.´?-´?-³@-²?-°?-­@,ªA.¦A-¢B,A*›A)˜@*—A*’?/’?/’?/‘>,‘>,’<+’<+’<+”?+”?+”=*”=*”=*•>+–?+—@,”?:•>7—=4Ÿ?1©B3³D3¼D3¿D4º?/¶@2­E8žH;‡H9mB2T8*D3#:659549547326216005//50-72/72/72/61-61-50,50,50,.0-.0-.0-//-//-0/-2.-3--5,-4+,4*+4(*7(+=.1E69LUPdUPdUPd0/-0/-10.10.40-51.62/72.83/83/83/:3-:3-:3-:3-:3-91.91.80-80-80-80-91.91.80-80-80-80-80-80-80-80-6.+6.+5-*5-*5-*4,)4,)4,)5-*5-*5-*5-*5-*5-*5-*5-*/,%0-&0-&1.'2/(30)41*41*63,63,74-74-85.96/:70:70@:.A;/C=1E?3H@3IA4JB5JC3LC4LC4KB3MA1MA1NB2OC3PD4P>0U?1^A3jC4xD6†D4“D5žB3¨B3°@2¶@4¼B7ÂC:ÄE<ÆF=ÇG>èAKèAIèCIêDHíDGïBDó@D÷>Cø;Aø9@ö9?ð.‘>.‘>,=+’<+’<+”>-“>*“>*”=*”=*•>+–?,—@-“@8•>5˜>3Ÿ?1«A3µD4½D3ÁC4¼A2¸B6­E8œI;…G:kA3S9*D4$<66;55:4493382271161.61.72/72/72/61-61-50,50,50,.0-.0-.0-//-//-0/-2.-2.-3--5,-4*+4(*5)+<-0C47I:=h<;vDC†JI’LJST§`h¨k{rŽ‘{¢„°|†»y†½lv«[\ŒQHsQBkOFaOFaNI_RN_[Yfnotƒ‡ˆ”™•™ž—š ”™‘ƒ~ojk[]\JVUCXQaXQaXQa/.,/.,0/-10.40-40-51.51.72.72.72.92,92,92,92,92,91.80-7/,7/,7/,7/,80-91.80-80-80-80-80-80-80-80-6.+5-*5-*5-*4,)4,)4,)4,)5-*5-*5-*5-*5-*5-*5-*5-*1.'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:70?9-@:.B<0D>2G?4H@3H@3H@3I@1I@1I@1K?1K?/L@0MA1NB2MA1QA2YB2dC2qC3|C2‰A2“@0™<+ :+©;,¯>0¶@4¼C8¿F=ÀG>à?Eá@FãBGæCFêDFðCEõADù?Dú;@û:?÷:@ñ=@è@@ÜA=Ñ@;É>7³@-³@-³@-²?,²?,²?-¯>,®?,ª?-©@-¥@,¡A+A,˜@*—A*–@)’?/‘>.‘>.‘>.=+=+=+’<+“=,“=,’<+’=)“>*“>*”?+•@,”B7–?5š>3£>2­A4¹C5¿D5ÂC4ÂD6ºF9¯I=›I=‚F;gA4P:,B6&=77=77<66:4493383072/72/62/62/62/52-52-41,41,41,,1-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24C79_83l?:|E@ˆIB’NK›Z^œft”n‡Œwž€~¯zƒºs¹dm¤UU‰NEtO?lMBbPEcQHcMH^NK\[[estx…‰ˆ‡Œ†Š†…†Š|xzlghXZ[KVTEZT`ZT`ZT`.-+/.,/.,0/-10.40-40-40-51.61-61-61-81+81+81+81+50-50-4/,4/,4/,4/,50-50-61.61.61.61.61.61.61.61.3.+3.+3.+2-*2-*2-*1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,30+30+30+41,41,52-52-52-52-52-63.74/850850961961>8,?9-@:.B<0E=2E=2F>1F>1G=1G>/F=.I=/I=/J>0L@0L@0JD4NE4TD4^D3hE2sB1~A/‡>-Œ9'”9'9)£<-¬@3³E8·I<ºJ>Ù@CÚACÝCEâDEçCDîACô@Cø>Aü;@û:?÷:>ð=@åA?ÚB=ËA7Ã>5°@,°@,°@,°?-¯>,¯>,®?,¬>-ª?-¦?,£@-Ÿ@,œ@+˜@*–@)”@(‘>.‘>.‘>.=-=-=-<*<*=+=+<*<*=+“=,”>-”>-”B6–?5›?2¦@2²B4½C6ÂB5ÄB5ÄF:½H>­K@˜J@|F:aA4K;.?9+@86@86?75>64:5294183073062/62/62/32.32-21,21,21,-2.-2.-2./1./1.00.00.10.5106005//5,-4+,6,-:01>45W6-b<3qA7}D9„H@ŒRQŽ_i‹iƒs˜|z¬u~·myµ^g¢RQŠMDyM?rN@dPEgQFfLC^GBVNLZ^^fjnquzvx}vz€vwzokoa`bUWYKTUG]V^]V^]V^.-+.-+.-+/.,0/-10.3/,40-3/,4/+4/+4/+4/+6/)6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/850961961<5+=6,?8.@9/B:/C;0C;0C;.D:.D:.D:.G;-H<.I=/J>0K?1GH6KH7PG6XG5aF3jD1uB/|?,‚;)‹:'’;(š=,£B2«G7±K<´M>ÒDBÔDCØDBÝEBâC@ê@@ð>>÷:>û:=ú9<õ;>í?>áB>ÓC:ÅA5º?0¯@-®?,®?,®?,­>+­>+¬>-ª?-¨?,¤?-¢?,ž?+š?*–?+”?*“>)?.?.>->->-Ž=,Ž=,Ž=,Ž=,Ž=,Ž=,Ž=,<,=-‘>.‘>.”B4—A4@1ª@3¶B5ÁC7ÆA8Å@7ÁB;¸G?©KCJ@uE;Y>3C9-78*@86@86?75>64=53:5294173062/43/43/32.23.12-12,12,,2.-2.-2.-2./1./1.00.00.3205105104..2,,4+,7./901P5*Y9,e>/n@1tB7|KGƒYcƒg~p—xx¬s{¹js¶]e¦TT”OG‚LAyPAjPAhMAeJA`GBYHEXKKWMPU^bc`fbcha`f\Z`TWZOUYKWYL`WZ`WZ`WZ,,,,,,---.-+/.,0/-10.3/,2.+2.+3.*3.*3.*3.*3.*3.*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/850850850;4*<5+=6,>7-@7.A8/A9.A9.C9/C9-C9-F:.G;/H<.J>0K?1FI8GH6MH5TG6[F3dC0lA.t?-{<*‚;)Š;*“=,šA1£F5ªJ:­M=ÉE@ËFAÑFAÖE@ÞC?å@>í==ó9<ø:<÷9;ó;=ë?=ÝB=ÌD8¼A2±>,«@,«@,¬?+¬>-¬>-©>,©>,¨>.¥>-¢?, ?,›>,—?+•>*“>)‘?)>->->->-Ž=,Ž=,Ž=,<+Ž=,<+‹<+‹<+‹<+Œ=.>/Ž?0’C2—A2 @2­A5»B9ÃC:Ç@:Å@9»@9³H@¥NGNEoG=R@4?;039-A75A75@64>63<4194083/74/63.43.34/23.13.02-02-02--3/-3/-3/.3/.3/02/02/11/11/32032040/2.-1-,4..5//H4)M5)X8+a<,f>2nGBzYb‚lƒ€uŸ{|´u|Àmu¾bi±[[¡SLLBQAnN?jI=cH>`HB^FCX@BO2K?3DG6EF6KE5PD4VC2^C2e@.m>,v=,|;)ƒ:)Š;*“=.›B2¢F7¦I:¿D<ÂF>ÇG>ÏF>ØE>âC?ì@>ó<>õ9:ó9:ï;<å@<×B;ÆD6´A/¨=)©@-©@-©@-¨?,¨?,¨>.§=-¥>-£>, ?.ž?-š?,—>,“>*‘?*>)>->->-Œ=,Œ=,Œ=,‹<-‹<-‹<-‹<-‰<,‰<,Š=-‹=0‹=0Œ>1‘D2–C1¡A3®B6¼C:ÅA<ÇB=ÃB=»EA³PJ¥XPŽZOqSIVI@BD97A6A83@72?61=60<4194083/63.43.43.34.13.13.02-.3-.3--3/-3/-3/.3/.3/.3/02/02/00.11/22021/0/-/.,2.-3/.?0)C1'K3'T8,Z<2dGCw]hƒsˆ­„„À|ƒËszÈkq¿ed°VSšJC‡N>kK5.>5.>5.>5,B8/B8/C9/E8/G:1I<3J=4K?3EC6FB6IC5NB4TA3\@2b>0h=-q<.w9*}8)…7*Œ:,•=/›B2 D5µE9¸F;ÀG<ÈH=ÒH>ßF@èC?ð@@î:9î:9é=;àA;ÑD:¾E4¬A-¢?(¦A-¦A-¥@.¥@.¦?.¥>-¤?-¤>/¢>.Ÿ@.œ?.˜?-•>+‘?*>)>+>->->-Œ=,Œ=.Š=-Š=-Š=-Š1‹?2‘D2–C1¢B4®B6¼C;ÄC>ÄC>¾D?»PJ²[T¥e\‘f]s_TYUJFNC>KA@70@72>71=6094.83-63,63.43.34.34.13.13..3-.3-.3--3/-3/-3/.3/.3/.3/.3/02/.0-00.22022000.0/-0/-10.8,,;,)B1*K7.S<4^IHtbn‡z–Џ‹Ê‚ˆÒy€ÐrwÈik¸XV¡GD‹I^C@[ABV>DP>EMGQSKWUQ^WU`XS_UR^TT^SV`UaZHaZHaZH,-/,-/------------.-+.-+/.,/.,1-*0,)0,)0,)/+(0+'/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/73081+92,:3-;4.=4/>5.>5.>5.?4.?5,@6-C6.D7.F90G:1H;2F?5H@5J@6N@5R>3W<1\:0a7+k9.t8-|8+…9,;/“=0˜?1›?2¨@3¬B5´D8¾E:ÊG=ÕF>ßD?çB>ë?=íA?çD?ÜE>ÉC8¶C1§B.¡B,¢A.¡@-¢?,¢?,¡=-¡=-¢>. ?.œ<,š=,˜=+•>-“=,=+Ž=*Œ>*‹<+‹<+‹<+‰<,‰<,‰<,‡;-‡;-‰=/†½F@¾C>¾DA»KG·XR¯f]£qfth|rfik^S_SCSHQJBLE=D=5<8/95,74-63,33+43.34.23-13.02--2,,1+,1+-2.-2.-2.-2.-2.-2./1./1.02/02/11/11/11/11/11/11/5*2;/3A32C4/J;6]OOymy‹…Ÿ’‘½”–Ӕ݂‰×tzÈjn¸_b©YZPHmHBdA>]>>X?AVBHVLU^U`bbqnn}xv†|p€ulyoguh_k_T`Ta[Eb\Fc]G,-/,-/,-/,-/---------.-+/.,.-+.-+0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,)0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80-91.:2/;30=4/>50>50=4-?4.?4.?4.B5-C6.E80G:2H;3H>5J=5L=6O>6Q=4V;2Z90_7/h8.p7.y6-‚8-‰9.’;1–<1š>1¢@3¦A5ªB5³E8¾E:ÉF<ÔE=ÜC=âC?ãD@ßF@ÕF>ÄF8±C2£B/›C-ŸB0 A/Ÿ@.ž?-ž?-Ÿ>-ž>.ž>.š=,™=.–=-“=,=+>-Œ=,‹>,Š=+Š=+‰<,‰<,‰<,‡;-‡;-…<-†4†@6‡A7ˆB8‘H7•F7£G:±I@¹HB¹FAºJFµTM²dZªreŸ~op~|mlteYgZJZOPLAKI=EC7@>2=:1:7.44*11)23+23-12,/1,/1,.0+.0+.0-/1./1./1./1./1./1./1./1.02/11/11/11/11/11/11/11/5*:9-9<15?53H?:^VTxszŠˆž‘“º”—Εׄ‹ÓxÆpyºkt¯en¥__yXZsSUjRWjU]j\gmguvr‚v‡€‘‡ƒ•‰}v†yp€sfteXfW_YA`ZBb\D,-/,-/,-/,-/,-/---------.-+.-+.-+-,*/+(.*'.*'.*'.*+.*+.*+.*+-)*-)*-)*-)*/+,/+,/+,/+,/+,/+,/+,/+,.*+.*+/+,/+,/+,0,-0,-0,-0,-0,-0,-1-.1-.1-.1-.1-.0,+0,+1-,2.-2.-2.-2.-1-,1-,1-,1-,1-,2.-3/.40/51080-91.:2/;30=31=31=4/=4/?40?4.?4.A4.C60D7/F91G:2H;5J;6K<7N=6P;6S:5V72[60c60k6.t5,}7/‡9/Ž:0”<0˜<1œ@3ž@4¢@3§A3±C6¼C8ÇD:ÎC<ÖF>ÚG@×HBÍH?¾E:­C3ŸB0™B.B/œA.›@-›>-›>-›>-›>-œ?0˜<-–=-”=,“=.>-Œ=,Š=+Š=+‰<*‰<,‰<,‡;+‡;+…<-„;,ƒ;-„<0‚<0‚<2‚>3ƒ?4…A8†C:‡D;“K<–H; H>­JDµIF´KG´SM¯_V®rg¥qœz{Šwr€ocqbVdWPQCMN@HI;DD8@@4::055+/0(01)01+/0*/0+./*./*//-//-//-//-//-//-//-//-//-//-00.00.00.00.00.00.00.00.6*>6+;8.6;63HE>_^Yyz|Šœ“²’–ÃŽ•Ë„Æ}ˆ¾{‰¸|‹´|Œ°ˆ—yƒq~‡o|‚n}€o‚€yއƒ™‹¡”‘¨˜¦”ˆŠƒ–ƒ|{j{iXiW\V<^X>`Z@-.0-.0-.0-.0-.0-.0......---.-+-,*-,*,+).*'.*'.*',*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<42=31=31=31=31>3/>3/>3/@3-A4.C60D71E82G83H94I:5L:6M:6N94Q83T50^72e60o6/x8/ƒ90Š:/’;1•=1™?4™?4›?2@1¥A2­C5¸D7ÀD:ÉF<ÌG>ÌIAÄH>¶F:©C4B0—B.˜A.˜A.˜?-—>,™>,™=.™=.™=.•<,”<.“=.=-Ž<.Š=-Š=-ˆ<,ˆ;)ˆ;+‡;+‡;+„;,„;,ƒ;-‚:,;/€<1€<1>5ƒ@7ƒC:…E<†F=’M>•I<œH>¨IC¯LG¯PL¯\Tªj^§€o y˜š‚Žœƒ„–€z‹ym{lam_UYHQUDKO@EI:@D6;=057,13(01)/0*/.).-).-).-+/.,0/-/.,/.,/.,/.,/.,/.,/.,/.,0/-0/-0/-0/-0/-0/-0/-0/-8*A6):3-1961HJ=bfX{€y‰‘“Œ“£–²Œ”¸ƒ³±…™²¤¶ªµ•§§¤£Œ ž‡ž–‚™}˜‰œ‹ˆ£”°š–²›”­—‹£‹…›†’~k|iUfSXT7ZV9^Z=+/2+/2-.0-.0-.0-.0-.0...------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/91/:20;31<42=32=32<20<20=20=2.=2.?1.@2/A4.B5/C60D63C84D95G96G96H94K84N51V72_60h70r7/}:1†<1=2>2˜?7—?5—?5—?3šA3£C5ªD6³E8ºE;¿F=ÀG>»F=°D8¤B5™@0–@/–A-–A-–?,•>+•<,•<,–=-–=/”<.’<-=-Ž<.‹<-‰<,ˆ<,ˆ<,‡;+†:*†:*†:*ƒ:+‚:+‚:,€:.;0€<1€=4?6‚B9ƒD;†G@‡HALA’H?˜HA¤KGªOLªWQªf]¥wh¡Œw˜›€’¥‰Š¤‡„ž…|’}t‚qlte\eRV_LMVCEL0-?1.@2/A30A30?61@72@93A96A96B94E74G51O61W6/a6/j8/u9.€0•>7•>5“?5’@4•B4™C4ŸC4¥D4ªB5²C8´E:±E;©C7 @4˜?1•?2“A,’?-“=,“=,“<+“<+”<.”<.“;-’E5:@29<134,22*1.)/+(/*'0**3*+4+,1++1++1++1++1++1++1++0,+1-,1-,1-,1-,1-,1-,1-,/.,;(;5(23+(56$CL-\hDt„`…”wŽ›‰’ž”Ÿšž–¥—•µ¡Æ¤¦Ð¨¥É¯¦Ê°§Ë¯¢Éª—¿‹³ˆ°‹³ŽŽ²Ž²¬Š„¢€€™{wŽrdx]MaHQQ5QQ5RR6,03,03,03,03./1./1./1./1/////////0/-/.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/<1/=/,>0->0-?1.@2/;60;62;83<94=:5=:5?82A60F5.O4-W5+b6+n8,x:-<,„<.’:6‘<5=5Ž@4A4‘B3•B2™@0Ÿ?1¦@4ªB7ªB9¥@6?5—=2•?2‘@-’?-‘>,’<+‘;*‘;,“;-“;-‘;,<.;-‹<-‰;.‡;-„;,„;,…9)…9)…9)‚9*‚9*9+~8,}9,=1€=4€@7B9„E>…HCˆKFŠMHŒIAŽGA˜JF¢SOª\X«h`©{n£Žy—Ž©ˆ…¯‹«ˆ~£„€˜€‹w{nixacr[ZhQP]IIUACL;>D60-?1.?1.96/:729839839:4:94;83>71A2+I2*S2)^4(j6)s8*|:*~;+84:5=4Œ@3‹B3A1@/”>-˜<-Ÿ=0¥@4¦A7¢@7œ>4—=4•=3‘@-?,=+<*‘;*‘;,‘;,’<-‘;.<.;-Š;,ˆ:-‡;-„;,„;,…9)…9)‚9(‚9*9*€8*~8,}9,€>2?5€@7‚C<ƒG?†IDˆMGŠOIŒICHD˜MJ¥UT¬a^­ng«s¤•€–¡ƒŠ¬‰‚°‹|«‡|£„™y‚ql{dgv__nWXeQP\HIRAAG9=@579.66.41,1,)1)'2()3)*4*+2)*2)*2)*2)*2)*2)*2)*0**1++1++1++0,+0,+0,+0,+0,+:&27(+4."47=HRb1l~J€’b‰™rŽ|Ÿ‚ŠŸ~Ч{·€˜Æ…œÎ…œÉ¢šÉŸ™Èž”׉¸Š®€‚°‹¶ˆ‚¬~ˆ¯ƒ‡ª€~œvuml„dZnRG[?IL/GJ-DG*/0*/0*/0*01+01+01+21,21,32-63.63.63.52-50,4/+4/+8.,7/,6.+5-+4,*2-*1++0,-0,-.,/--/-,1,+0*+/)*.()./(0/(//(//(//(//)-.)-.*+/+,-,*-,(.-).-)-.(./)./)--/--/---.../-.0/-2.+3.+2-)4,)5.(7.)8/(;0*;1(<2)<5+=4+>5.>5.>5.=4-<3.<1-=2.<1-<1/;0.=/.>0/>0/?11H-&C1';5)2:++=-(=.-;.45-?-+H()R%(X((Z.+Z8.[A2\G6wC-{B.„C1A3’?1•;0–:/”8+“;-‘>.‘B1‘D0‘D0B.?,<*Ÿ63›83”:2Œ<1…@1B0|A/|A/‚C2„A1ˆ>1‰=0‰;/ˆ:.‡9-‡9-v:/|@5u=0n9)s@/s@/t<+{@0{<-ƒ?4ˆD9‹H?ˆLA„NBQC€RC—HK•TRd]…ue{…lw’sz|€£ƒ‰¦ˆŽ¥‰’¤Œ‘¥Œ‡¤ˆy¢‚kŸ{awhŽea†]\zV[sS]mR[cLVTEPH=J;6G53B,/=&,:#+:#-9#/8".#/-#-,$-,&*+))+-(.1'/2'/4'06&14'14'13'32(32(30(3.)-0,-0,)//'=>0WZErx\‹gœs‹žpŒ¢qŒ§r‹¨r‰ªs³{›¾†£¿Ž ¾Œ›¹‡’²€‹­{†ªz„ª{…ª~„§}…¥€€ž|z“vr‰oi{e[jWLZIKO@CG8>B3/0*01+01+01+12,12,21,32-43.63.74/74/63.61-50,50,7/,7/,6.+6.,5-+2-*1++0,+0,-/-./-0--/-,1+*/)*.()-/(//(//(//(//)-/)-.*+.*+/+*-,*.-).-)/.*./)./)./)..0....../-./.,/.,1-*3.+3.*5.(6/)8/(90);0*<2)=3*>5,>5,>5.>5.>5.=4-<3,=2.=2.<1-;0.;0.;0.=/.>0/?10F/'D0)A3*=4+96-85.83-<1-?-+D*)K)(P*'U.)[4-_:1c?3s@+xA-€A0‰?2‘?4”;3”:1“;19.‹<-Š>.ŠA0‹B1B/ŽA/@/š93—:3’;2‹=1„?0‚@0@/?/„A1†>0‰=0‰;/‡;.„:-‚:,‚:,w9.x<1s9-n9)r?.s>.q9*u:,}=1„@5‰E:‹H?‰K@†MB„PCQC›DJ›QR–d]vfƒ‡p}”w~ ƒ¦…ˆ§ˆŽ§Š’¦‹“¥Œ£‰‚Ÿƒwœ}o˜xa•g\`VƒZU}XWyXWpSPbJKVECI;@A998340-0,+/+,.)--(,*,+)+***,+),-(,/)-2(03(03(02(02(10)1/*1-*1,+3,+32-12./0,)--%9:,TWBox[€‹i‡–o†™l†žnˆ£p†¤p„¥pŠ­w“¶€›¹‡˜¶„“³Œ®{†«xƒ§w‚¨yƒ¨|ƒ¦|„¤{x’uqˆnh{eYjWL[HGK<@D5:>/12,12,12,12,23-23-43.43.54/74/85085085083/72.61-80-80-7/,6.,6.,3.+2,,1-,1-./-.0.1..0--/,+0+*/*).1'//(//(//)-/)-/)-.*+.*+0,+0,+/.*/.*/.*0/*/0*/0*/////////0./0/-1-,1-*2-)4/+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@70?6/>5.=4->3/=2.<1-;0.;0.;0.;0.<1/=20C2*E0+H/+L,-N+/M*.J*/E+.A-,@.*@/(C/(M/'Y0*d1-j30i;+o;-w;0=4‰<4Ž;5Ž94:4‹;2‡=2†>2…@1†A2‰A3ŒB5C6‘=2=1Œ>1Š>0†>/…=.…=.†=.ˆ<.‰;.ˆ:-‡9,„;,€;+~=+z=*}=3z<1v:/u;-x@1x@1v<.v;-?3„B6ŠF=‹H?ŠJA‡KA‡NC†PDDHQQšc^’ug‰„n‘t~}€¥ƒ„©‡ˆª‰©Œ“§Œ‘£‰‹ƒ„˜€”{a›k[•eXaV‰`W…`W]QtVMiPC[E=RA6F9/<2*5-&1+%.)$-(1&*1&*1&*1&*1&*1(-2).1+//*0-+0,+0+,0),1(-1&.1&.14.24.0.*'**"66*PUAmv[~‰i€k~“h™jƒŸn€ n~ m€¥q‡¬xŽ®|‹­zˆªw„©v§t€¦u¦w€¥y¤y€¢}}›yw’sp‡mh{eYkUL[HEG:=?28:-23-23-34.34.34.45/54/54/650961961:72:72:51940940:2/91.91.80-7/-4/,4/,3/.3/.3/01/01/00.1..0--/,,.2).2).2).0*.0*,0*,0*,/+*1-,1-*0/+0/+10+10+10+10+11111100010.10.2.+2.+3.*91.92,;2+<3,>4+@6-@6-A7.A8/A8/B90A8/A81@70>5.?4.=2.=2.<1-;0.;0.<1/=20=20?5,E2.O-.W(0]#/\"0W#/L'.C/.:3-55);5)E1(U.'c+*l*+e;/j;1s=3}<6…;8‰;9Š;7ˆ:6‰>9†?9…B9ƒC9…B9†B9‡A9‰@7†B/†B/‡@.‡@.‡>-ˆ<,‰:+‹9+‹8*‹8*ˆ9*…9)€<)z=(w?(t@(ƒ=3{7,x8,z3/>3/=2.=2.=20=20>31>31>7/C41O/2Y*2_%3`#2Y%1N+1B3077-39+68*?5)N1)]-)e+)c;3h<3r=7z=:‚<<†<=‡;;…;:‚;9>8€A:C;‚C<ƒB<…@9„?8E/D/C.ƒ@-†=,‰<,‹9+Œ9+Œ6)Š7)†9)‚;)~=)w?(sA(qB(…6/|/'8/ƒ?4w5)s5*}A6}C7E9G<ƒI>„J?…K@‡LDŠOGŒSJycL~hSoYu]}bˆi„•u‚ |¥~|©€~¬…­†€ª„¥€|ž}{˜yn}ŽlyŒlwŒkwŒmt‰joƒgl~dbqZ[hTSZHIK=B@4=6,8/&5+":&(8%'6&'2&&0(&-)(++)).*'+*&,*&,*'+*'+,)*,**,**,-#$2*(50,85,BC5UZFfpWn}^tˆcqŠbt‘ex˜iw›ks™hs›iwŸmz¢mx lwŸkv¡ly£q{¥u{¥w|£wxžuzœww–tqŽom†hd{_WkPJ^CFB9>:195,560560671671782782872872983<94=:5>;6>;6?:6>95>95?74?74>63=52;62:5294194184184195484373243132021/6-.6-.6-.6-.6-.4..4/,4/,40-40-40-52-32-32-43.43.431431542540841850940:5/=60?6/@7.B8/C9/F90G:1H;2F<3F<3F<3F<3E;2C90B71A60@5/@51>50=4/=4/>42?53?53=82A64I35Q16V.6U-5R/5J22A62::08<.9;-?9)H6*P4)U3)]2+c4.k62t76}77‚89ƒ7978}75{:6|=8{?7@9ƒ@:…@;†?;|E0}D0€C0‚A/…=.‡;-‰:-ˆ9,‡8+…9+‚:+<+{>+x?+uA+tB+‹2,‹2,¡LE§XQŠA8|90‚F;€J>yH:zJ<{M@|NA~NB‚PE‡UJYN_uNgwRtzX€{^Š|b“i›s›—|™zˆ |ƒ¨¬ƒ|¬‚x¨~t£yq vŠpˆo†nƒŽp€p}px‹ms‡kk~bgu\_iQWZGPM0%:,+7,*5+)1,(-,'+.').((/().(+-*,,*/+*3)*6',7&,9&,2)$<3,E>4JF:QR@]bLgqVizXmƒ]j…\j‰]p‘bq•eo•do—eršhu krhq›itžlx¢rz¤vy¢vyŸvvštw™tu”rokj…fc|^UlOJ^BHA9@91;4,671782782782893893983:94:94=:5>;6?<7?<7@;7@;7@;7B:7B:7A96@85=84=84<73<73<74<74<74;74:6395284173080.80.80.80.80.80.61.61.61-52-52-52-63.63.54/54/540540651952:72=84=82@93?80A8/C90D:0E;1H;2I=1I=1H>4H>4H>4G=4F<3D:1B8/A60B71@70@72?61?61@72@72A83=84@85B86D97E:8G96G96E:4C90B90B:/B:-D;,F:*H;*H;*].&b0)n3/x73ƒ98‰;;Š<<‰>;‹A>†A<?6}=4~;3‚;5ˆ=8Œ>:~C3€B3€A2ƒ?2ƒ=1„<0ƒ;/;/;.|=.{=.|>/|>/|>/}>/}>/—.*£;8ÎkfÙ~y­ZTŒC<ˆLAN@tJ:qM=pQ?qR@tSB{VD‚[J‰_OUOe€Uz~[‘y_¥ra³of»rk»xo¶…vªz ›~•£€Œ¦ƒ¦~}¢yyŸvŒr‹rˆ‘r„“r€•t|–sv”ps’pl‹ig„eby\\lQU_GMP;ED0A<)>3-<3,92*41(01).1(+1'+0)/0*2/*6,*:*+@'+D%+G$+H#+A7+LC4WP@[XE`bLgmQiwVj{Wl‚[g‚Wf†WjŽ^n”an”an–bršfržko›hnšiqœnw¡sy¢vxžuu›ts—su—ts’pn‹li„cb{[TmMH`@MD=E<5@707827828938938939:4:94:94;:5>;6?<7@=8@=8A<8A<8A<8A<8A<8A<8@;7?:6>95>95=84>95>95>95>95=84<73:51940:0.:0.:0.91.91.91.91.72.61-61-63.63.63.74/74/74/540651961;83<94?:4@;5B;3A8/B90C9/E;1H<0I=1J>2K=2K>5K>5J=4J=4F<3E;2C90B8/B92B92A81@72@72@93A:4A:4?74>95=<7>?7?@8@@6D@5J=4J70N5.Q6-Q6+O8*M:+I<)H=)l3(r6,~;3‰@:•DA›HDŸJGŸLH QJ—MDD;„;2‚8-…7-Œ91;4…?7…?7†=6…<5ƒ=5€=4|>3y?3vA3uA3uA3y?3}=3ƒ:3‡83Š73Ÿ%$´<;í{zþ•’Åhc–G@‰K@wI:mNfW@jX@r\E}aL„eQj{O{{U™w\´l`Ì^_ÚR\áM[àO^êmuÜxxÎ…~¿€²–€§—}ž•x˜“u•Žr”r‘‘u”u‡–u—s{–sx–rq‘lp‹hiadtW]gLVX@LJ3GB.L40H3.D3,?2*:1(70&40'40'81):/+?-+C++H(+M%-O$-Q#-PE1[P:d^FgfJilOnuTm{Wl~Vk„Zg„Vg‡Vm]p•ap—br™dvhrœlo™km—ip™mwtyŸxw›wt–us•tu”tsqoŠki„cb{[TmMGa>SJCKB;F=69:49:49:49:49:4:;5=<7=<7=<7?<7@=8@=8A>9C>:D?;D?;E@8C>8D=7B;5B;5B;5B;5B;5B;5A:4A:4A83A83A83@72@72>71>71>71<71<71;60:5/85085074/74/761961961:72<71=82A:2B;1C:1E;1F<2J>2K?3L@2N@3N@3M@7M@7L?6K>5I<3F<2E;2E;2B90A81A81?80?80?82@93@93<5/LE?IB:E<5OB:K:2J3+\>6Z5-`5.`4+^/'\0%b8,g@1gB2‹I;G;–I?žLAŸF>›>7š=6žD;¥ND£QE¨VH«YK£PBš@5˜:0ž=4’9;9:Œ67†54„96ƒ@:{@8o?3oC6lB4m?2u:274Œ35’-3–(1ÏEEèbaÅEDÍWUáyv«VO†F<‚WGlS=f\CedFgfHgbEm_DyeL†nVŽdK­p]ÍphÞW]å8Kð(Dü&Hþ+Lþd02b22\31L)'D'#I2,J70F5.E2,E0+H0.I-,I)*O+-V24VK/`W:f_BgdEkoLu}Xu„]oWj„WlˆXnŽ]q“`s•bu˜bušdv›eq–ks˜ms˜oq•os•rw™xz™zy–zx•yqŽrm‡jj„ghƒdazZTnKIc@TKBSJAPG>9:49:49:49:4:;5;<6>=8?>9>=8@=8A>9A>9B?:D?;D?;D?;FA;E@:E@:E@:D?9D?9E>8E>8E>8E>6E>6D=5C<4D;4D;4C:3B92B92B92B92A81A81@91@93>71<71;60;60:5/85.74-74-96196/96/;60<8/>:1A:0C:1C;0E;1G=1J>0L@2M?2NA1NA1N@5N@5M?6J=4I<3H;2E;1E;2C:1B90A81@91@91@91?;2?;2C:3G81I0,V..j68u99{;;†ECƒD?„H@…I?†G>ŽJA›NH£PL¥MK’E3”C2šB4 B6 >36-7+¡<0£C5›@.™@. E3¦F6©E5¯H9¸N@´KR¯GN¥@F™9=‘8:Š?<€A:r@5k?2uK=€NC@:‚,-“(0µ8FÒK\àJIáMMÌ>=Ã>?Ò_\µXQ„@5€UDvbJa]@Z_?ekIonOshJ{fK†kPÌ]VÚ][êSZó7SD=]P.dY9ga?ifCnrMz‚[z‰bt†^r‰]oŠ]oŒ^qŽ^u’bw•cw•cw•cr’mw—rz˜vy–w~˜}ƒ„…‡ƒ›…™ƒz’|q‰ql„jhc`yYTnKJdAWQEVPDUOC8938938939:4;<6<=7?>9@?:@?:B?:C@;C@;C@;D?;D?;D?;FA;FA;FA;E@:E@:G@:G@8F?7IB:HA9H?8G>5F=4E<3E<3D;2D:1D:1D:1C:1D;2D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/96/;7.<8/@9/A:0C;0E;1F<0I=/K?1M@0M@0NA1M@0N@5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:2?;2@<3@<3A=4SE–I?•MA›OB¬RJÃSRÏNSÒENœE2B0 @0¥?1¦:-¥7*¦8+§=/¬E4¡>+˜7$:%¥>+®@/³B2¹C5§/8±9B¹DL¾KR¸NRªLL“B>}:1u;/q9,s5*2-›47º8@?:A@;BA4G=3F<2E;1D:0D:0E;1E;1D;2E<3E<3E<3@91?80?80<71;60:5/:5/:5/96/96-;7.;7.=9.@9/C;0D<1F<0F=.J>0L?/M@0M@0O?/O?/O>4O>4N=3K=2J<1G:1G:1D:0D;2D;2B;1B;1@<3A=4A>5A>5Q9/X+&‰:?ÅP`ãOeñOfíPcÐGO¢20”:/Ž?.–C3®F=ËFGÞ>Hã2B§H6§F5©B3®@3°?1²>1³B4´D6²G5«B/£<)¤;&©<(­:(¯5&®3$¸7<»8>½7>½6=¿9@?:BA4G=1H<0G;/E;/E;/E;/E;1E;1D<1D;2D;2@9/@91@91?82<71;60;60:5/;7.;7.;7.<8-?8.A;/C;0D4N=3N=3J<1I;0G;/F90D:0D<1D;2B;1@<1A=2A>5B?6C@7_4-t42¯KSâYiðH_ð:Qá2C½#+¬/)š9(;&•=)¬@3ÈA=Ý:?ä0;¨D4¨B3«?2®>2´?5¹C7½G;»J<¬>/ª?-¨=+¨:)ª9'²:*¹;-¼ÃLDËTLÑTNÙKJÝ>Cã3>è.<Ù5+Û7.Ò0+Ò94Á82µ@9µ[P”UDxO9~dI„lPbF]F®eTÍqdÛsjübÿ?eÿAiÿBkÿBmÿAmÿ@oÿ@oÿ@qÿAqÿBnÿ=hÿEmÿJpöGhíMièZrÛbs½YcŒ@D]($M-"PC2PR=CO76H.WH1eYCujT€{gŽy˜œ‹”Œ‡”ƒ~‰—ˆŽœŒ™ˆ‡’‚Š“‚—žŽ¤¨—²¶§¸¼®¿Á¶ÀÁ¹ÂþÅÅÃÃÃþ¾¾²´³¢©¢—Žy‡vh{e\sWTmONiHTYBUZCW\E560560671782893:;5=<7>=8@?:B?:C@;DAGB>GD=GD=HC=ID>IE0I=/G>/G>/F<0F<0E;/E;1D<1C:1B90A:2@91@91?82<71;60;60;7.;7.;7,<8-?8.A;/D0K?/M@0NA0P@0O?/O@-P>2N>1M<2L;1I;0H:/F90C9/C;0B<0B;1@<1A=2A?3B@4C@7t50–FEÆY_ßUbã@Qä5FÚ0;À*+¯1%Ÿ9#•;!”: ¡=&·=.Æ90Ê2- :,¢:-¥9-¨6,°91¸A9»E;·E:­?2«@0§<,¤6'ª6)·=0ÄD9ÊG=¾9*Î@4áD=ïA@öDâ<@×?>ÎC>ÍJB×RMåZWéPRìELï;Gõ6F÷2Dø/Bû1Gÿ6Lø:Tø:Tø:Tû:Wþ=\ÿ?aÿBeÿDiûhú?júAm÷@nõ?oò>mï=mÿFnÿ:aÿ>dÿInÿJløMmòSoæXnëp‚Å_j˜ILt:6\6-O9+OD2SN:`PArdWˆ|p”Ž‚Ÿœ“¦§¡¡¦ ”˜”Ÿ›¨¤¦¯¬¦¬ª¤¦¥§§¥µ´°ÄÀ½ÍÉÀÒÍÇÕÐÌ×ÏÍÖÍÐ×ÎÓÑÊÑËÆÌ¿½À°²±˜Ÿ˜€Œ€m~k^u[VoQSlNU_DV`EWaF560560560560671893:94;:5=<7@=8A>9C@;DAHC?HC?GD=HE>ID>ID>JF=LE=MF2G=1F<0D<1D<1C:1B;1A:2@91?82?82<71<71<8/<8-<8->7-@:.B:/D2B@4@@4+)¨JKÁSV¾=BÀ/6Ç.3Ä./»0)ª1 £9!›=!–=˜= ¡=#¥;#¦6"6- 8/¢5.¦3,®71·@:¹B<²@6±B7­A5¨7È`UÑq¤eSŽWC‡N:¡XGÊe[ãa_ëPTëBIùDKí@DÞ@?ÑB<ÅB8ÁB9ÌIAßPLìKPô@Kù9Hý7Hþ5Hø3Eö7G÷=K÷9R÷9Rø7Rú7Uý7Xÿ9]ÿHC?ID@HE>HE>ID>JE?JF=MF>MF2G=1E=2D<1C:1C:1A:2A:2@93?82<71<71<8-<8-<8-?8.@:.B:/D2??3@@4”67Á]_ÈZ[¯78®,,µ/,±,#°0#¯8$®B(©G* G'šF$šF$–C!”? Ÿ81£;2¦92¨50°:6¹B>¹D=±>7«<3¨<2¦»72»:Ê<$á:*ñ.(ÿ$&ÿ'ÿ'ÿ%ÿ%(ù,)ñ2*ë5*è3(è2'ê/&ì-%Ü=(Ñ2Þ>0Ñ5)Ê7/Â?7¯C9Çqd²m]–YF™VE¿i\ÝlfãSSë@Hù?Lï4¹6,½4.Î44ïBHø8Gÿ2Fÿ3Hÿ5Iú7GöYÿ=Xÿ:Wÿ6Wÿ5Yÿ5\ÿ6_ÿ7eÿ;kÿ:mÿ;oÿtû>vôEbýNkÿTqúIfð?\ÿRqÿfƒÿf€ô^wêbváky×s{Ärvªfe”ZV‰TN’€~¨™–¾°°Ä»¼ÆÁÅÈÇÍÅÈÑÀÄÏÆÌØÈËÚËÍÜÓÐáÚÖåäÜëêßïîáòòäãõççöçêóâèñàêïßêìÜéå×äÓÉÒþά©—y‡vi|f`w[\uWbqRapQ`oP201312423653875984984983;:5<<4==5??5AA7CC9EE9EE9HH@HH>HH3B90E<5C:5@85?74@86?67>56:44F85E76B87@78>:;<:=<<>==????A@,§B0©D2©D0©B/¨?,«>*­<*µ=-¾C4ÅF7À>0·3&Í6+Ì8,Ì:-Ì=/Ï=.Ô(Þ9%Ô4Ï4 Î9%Å8&¾6&Æ@4ÕQEÒIAÜMIïUUüVXýJPø9Aü4?ÿ9DäCHßCFÓAAÆ?;¹=3®=/ª?/ª@0¿Q@ÉQCÑLCØC=å??÷@Eÿ>Gÿ8CúGMúENûEQþESüARú=Sü>XÿCbÿGiÿBhùHH7H?8F=6C:5C<6A:4?74?74@85>95=84;63>3/=4/>42<74=98<;9=<:>=;@?;C@9G@6J@4L@0O@-P?+P>(=B,?A,E=0H92K63J46F35A57>=;8=69?5?A4C=-J9)^B4sRC¼K=¬;- 2#¡6&£:'8$ž9%£?(¡;%¦=(­@,³@-¶=,·9*¸6(¹5(¦;+¤:*£9)¥;+¦?.©B/«B/«@.­?.«:(±<+¿E6ÆH9Á?1¼8+½7+Ï5+Ï7,Î:.Ï;/Ó=/×;/ß8/ç4/ð0-õ--÷-+ò/+ê4)ß8(Ö;'Ï=&á:'Ù7"×8%Ô=*Ì;*Á5&Ã;/ÍG<ÐG?ÙJFèPOóPQôGKò;@÷:Aÿ?GàDGÜDCÓB?Å>8·;1¬;-ª<-©>.µF5ÅM?ÓNEÜGCã?@ñ>Bý>Fÿ>H÷DJ÷CLúDPÿFTýBSú=Sü>XÿBaÿFhÿCiü?iù@lùBpûGvüJzþL|ÿIxÿHtõKpðRsò]zö`{ùXwýMqÿCkÿAlóCjÝJgÉ^p®pugNI†‚v´”‡Ì²¥äÔÇëäÜèéäéêîéçòíáõöâûýàüÿâýÿçþÿìÿÿòþÿ÷üþúûþûöýúõü÷ôúôôøïðôëîñèëïæëäÞâÜÖØÊÆÅ²²°ž ›Ž“Œˆ…ˆ…–†‰€†}/.,0/-10.21/43/540762761:94::2<<4>>4@@6BB8CC9DD8IF=IG;JH;KJ8MJ7NL7NL7OL9KI:NKBTSQ_^dihxmm…lkŠihˆcYd[QZQGPJ@IH>FG>CC=A@::1>:1=90:3-94.;60=82=:3>;4?<5?<3C?4F@4I?3L@2O?0P?-Q>-P>*3@&7?'<=+A;-B8/A62>42;31=85B:7H94O2.[+)o-.Š:= EJª9+¢2$Ÿ1"¤9'¥<)ž7$8$¢<&¤;&¨=)±A-¶A/¹>.»<-¾:-À:.®>0¬<.©9+¨:+ª<+¬>-­>-¬=,²?-®9(¸>/ÊL=ÊH:¼6*º2&Å;0Ó5*Ô6+Ò8,Ô:.×;/Û9.â7/é2,ñ/-õ.+õ.+ñ0)ç2'Ý6&Ó8$Ì:#à7$Ü5#Û8'Û>-Ó=.Æ7)Å8.ËA7Ç<5Ì?8ÙEAåKIìIJëCCí?Að@CÜDC×C?ÏB;Â=4¶:.­9*ª;*«<+ª9)¿E8ÔNEÝIEâ?@ëXÿ@_ÿDfÿCiþDmÿFpÿIwÿK{ÿL|ýK{ÿCvÿGwÿJtúNtþZ|ÿa€ýUvòCdüHkÿRvÞ=\ÎH`Úz†µ}~\F;„r³‹Õ³§óÛÑúíåøóðøøú÷ôýôëüüêÿÿéÿÿëÿÿíÿÿòÿÿ÷ÿÿûÿÿýþÿþúÿýùÿûøÿøöþõöýòöûðôúïóðçêåßáÓÏξ½¹­®¨¢¥œ£™£—¤ªœŸ¥—œ¢”/.,/.,0/-10,21-32.54/650872991;;3==3??5AA7BB8CC9IE<0?=1@<0?<-A;+F?/H?.K?/M@/O?/P?/Q>/P=.<@)=?*?>,?<-?;0=:3;:5:94<94D95N43[*-o&--8¨3C¶7H§7)¥7&§9(ª?-¨?, 9&Ÿ9#¤;&¥:&«<)³>,¹@/½>/Â<0Å=/Ç=0¹@5¶=2²:,®8*¯9+°:,²:,²:*¶;,¹;-ÄB4ËE9Ç?3¾1'À2(Ê:1Ú3+Ø4*Ù7,Ú8-Ü8.ß7,æ3,ì1,ó0,õ.+õ.)ï0(æ1&Ú4$Ñ6 Ê8Ü/Ú0Ú4$Ý;,ØVßetû §Í‘]=2aP@©wlÑ¥œöÔËþêãÿôòÿþÿÿüÿùóÿüïÿÿïÿÿðÿÿòÿÿôÿÿ÷þÿûýÿüûÿýùÿüøÿúøÿù÷ÿö÷ÿôøÿôøþó÷öëïìãäÚÔÔÉź¹´³´¬±´©²µª¶¾³°¸­¬´©10,10,0/+0/+10,21,43.54/77/880991;;1==3??5AA7BB8KD:LF:OG:QJ:RK9SL9RM:QK=OKBVTUfdowx††¨»“ÃŽ‘ÆŠÀ‡‚¸{w©rlœid_[~UPnNJaJGXEBM?=B;7696196-86*86)581692891;;/><-?<+C<)D<'I>*J?+L?,M@/M@0M?2M?4L>3M?4K?3F<2B90=909:25<44>57<5>:1H3.\0/{48œ;D¯9E²2Aª<+ª<+«@.¬A/©@-¥<'¥<'©>*§8%­:'µ<+¼=.Á;/Å;.Ê<0Ì<1ÁA6¾>3º:/·7,·7,¸8+¸8+º8+»7+ÇA5ÍC8Å8.Á1&Æ3)Ë7-Í6-à2+ß3)á5+â6,ã5,ç4-ê2*ð/*ö/,ø.*ô/)ì0'ã1#Ù4!Î6É7Ú/Ù/Ù2"Ù5)Ù9-Ô:0Ö?6ØE=ÕF>Í@9Ç<5Ë@9ÖKDÙNGÐF<Å;1Å=1Ä<0ÀCí>EóBJûJTÿJYýFXúCYýB]ù@_ûBdþFjÿJsÿOxÿOzÿLyýIxÿGwÿRÿQ}ÿIqûImÿStÿVtøNiëD^äF]èYkÿ—¢ÿ¶¼î žˆKFd2)©jcÍ–ôÇÁÿãÞÿòðÿüýÿýÿú÷ÿý÷ÿÿöÿÿöÿÿøÿÿùÿÿüÿÿýýÿýúÿüøÿûøÿúøÿø÷ÿ÷øÿõ÷ÿôøÿôøýñóóéêäÜÚÖÑÍÍÊÃÉÉ¿É˾ËÍÀÇÑȾȿ·Á¸84163.52-30+30+41,52-63,85.96/:70<90>;2@=4B?6B?6KC8ME:PF:SJ9TK:UL;SL<=;:6;8396/267465672880<:-A<)D>(G?(I?&J?)IA,JA0IA4IA6HA9G@:R9?ž46§<*¨=+ª?-ª?-©>,©>*¬?+¯@-«8%²9(¹:+¿:+Ã9,É9.Î:0Ò;2É>7Æ;4Ã81Â8.Â8.Ã9/Â8.Ã6,Ä7-ÑC9Ò?5Ä0&Ã,#Ð7/Ö<4Î4,æ1*æ1*ç2)è3*ê3+í2+ð/*ó.(ø.*÷-)ò/)ì2&ã3$Ø5"Ï7 Ì7Ü5#Ù3#Ø2$Ö2&Õ5)Õ7,Õ;3Ö?8ìYRáRJÓHAÊD;ÉF<ÊJ?ÅG;½?3¼;(¼;(º;*¹:)·:(¸:+¼>0¿A3ÁA6Á<5Å<6ÏA?×EEÝGIãJMèMQëADì?EðCIúJTþN[üJZüF\üF]øA]ùBaýEiÿJpÿNwÿOzÿMxÿKxÿR{ÿR{þOvýOtÿVwÿ]{ÿSoîD^øUjîQd÷dtÿ’žÿ‹“òƒ‰Ç`c­KL²keÏŽˆñ¼¶ÿÞÙÿðìÿúúÿüþýûÿüûÿþûÿÿûÿÿûÿÿüÿÿûýÿûûÿûøÿûøÿüùÿûùÿûúÿøúÿöøÿòõÿðóûìïòææçÝÛߨÒÛ×ÎÝÛÏàÞÑàáÓÚãÞÏØÓÅÎÉ<94;8385052-41*41*52+63,74-85.96/;8/=:1?<3A>5B?6KA7MC7RF8UI9WK;WK;UL=SJASJK[Xcnl‚‚‚¨‘”Çš Þž§ì¡©ò¡¤óž í™›æ•˜ß”•Ö̈‰¿‚ƒ±zz rq‘fd|XWiPN\IGRFCJDBG=?K==G;:?;:8<92A;-D=*F@*F@(GA)GB.ED2CC7BC=AC@>BAG9HH,©>,ª?+­@,¯@-°?-°=*±8'¶8)½9*Ã9,È8-Ì8.Ò91Õ;3Î;4Í:3Ë81Ë81Ì92Í:2Ì70Ë6/Ó<3Õ>5Ò91Ì2*Ð3*Ù;2Ú<3Ó5,è0(é1)ì1*î1+ñ0+ò/)ô-(ö,(÷-)õ.)ñ0)ê2(â5%Ù6#Ò7!Í8 Õ8%Õ8%Õ5%Ñ4%Ò4(Ô6+Ô7.Ð7/ãNGèXPçZQØRIËH>ÃE9¼B5·?1¹<&¹<&¹<(¸;'¸9(º;*À>0Ä@4ÉD;Æ?9É@:ÑFCÕIHÖHG×IHÛJMìCFêADíDIöKSüQZýN]ûL]üJ`öD^÷DaùFfýIlÿNuÿOxÿOxÿNyðYzðWvóVuüYxÿ]{ÿZuûQkòI`ýWköUgêN\ö^kâKZçSaçSaåQ_¸jfÉ‚~窧ÿÓÑÿëèÿôòÿøùÿÿÿùýÿùüÿûüÿüüþüúûýùøüøõü÷ôÿú÷ÿûøÿüúÿûúÿøøÿòõýîñúëîðââëÝÝäÙÕâÙÒæßÕëçÛñîßóñâêóðÜåâÏØÕ@=6=:3:7074-52+52+52+63,74-74-96/;8/=:1?<3@=4A>5M@7OC7RF8WJ:XK:YL-C@-CB.BC3AE7>E=€UE’YFL7A+“A+«@,®A-®A-®A-°A.²A/²=+°7&µ7(¼8)Â8+È8-Í6-Ñ7/Õ8/Ù;2Ò73Ñ61Ñ61Ò72Ô94Ô94Õ81Ó6/ÞA:Ö8/Ñ3*Ø7/Þ=5Þ=5Û8/Ù6-ë0'ì0'ï0(ò/)õ.)ø-)ø+(ø+(ø-)ô/)ð1)é4)á5'Ù8&Ó8$Ï8#Í8$Î9%Î7$Ï6&Ð7)Ô8,Ó7+Î4*Ì3+ãNGôd\ë`YÔOFÂB9¸<2´:/·?&¸>&·=&¸;%º9&½9*Á;/Ä>3ÌC9ÊA9ÎE?ÕKHÓLIÎGDÌFEÐJIéFGæCDéDHòMSùRZùR\ùN^úOaõG^õGbøGdûIiÿNrÿRvÿRyÿRyå[uë\xõ`}ü_|øUpõMgùPgÿYnÿ[mÿbsóL]úSdøM_ÿRgüI_ýE]³d`¾tqÚš˜ûÈÅÿåãÿîëÿõôÿÿÿûÿÿùÿÿùÿÿúÿÿüþýýüúýùöýøõÿøõÿùöÿúøÿúùÿööþððøêêõåæìÜÝèÚÙæØÕèÞÕðèÝùóåþûêÿþíòûúâëêÔÝÜA>5@=4?<3=:1;8/96-74+63*52)52)63*74-:70=:3@=6B?8J@6OC7RF8VI9WJ9XK;ZL?[NHTIMXR`gd|}©’Ì—Ÿçž©ù¤°ÿª³ÿª³ÿ¬³ÿ«³þª±ùª®õ¨«î§«êŸ¡Ü™šÒÁ±ur¡he’]Z…XR~YP{YQxVOpOG_E?M?:@?;8@@6>>2@B5@F:>E=:C>9CB*®?,±@.³@.´?-¶=,¹;,º6'¿5(Ä6*Ë7-Ñ7-Ö8/Ú91Û81×84Ø95Ù:6Ú85Ø61Ø61Û83Ý:3æC<à=6Ú70ã@7þ[Rÿlcÿ]Tã@7é1'î2)ò1*ô/)õ*&÷'%ø(&ú*(ø-)ó0*í2)ã1%Ú0#Ó1"Ò5$Õ:(É=&É=&Ë=)Ï<*Ñ;,Ò9+Ô8,Ó6-Ú@8Ð71ÜGAôc^ãXQÉB<Å@9·3.´<#¶<$¹<&º<&½:(¿:)Ä<.Ç=2È>4ÌC;ÙPJßXTÓOJÁ@;¿@:ÊKEäFEäFEèJKïPTòQWïNVïKVñL\ùRdøOf÷Ke÷JfüMnÿRsÿRvÿPtê[wêZuðZuú[wÿ]xÿZsÿWnÿViÿctþVgÿ\mÿYlõDXùBXÿMeÿIb·nh­hcËŽ‹èµ²ùÑÏÿêéýïîúù÷øþüøÿÿøÿÿøÿþúþýþþüÿûøþöôþùõÿû÷ÿùöÿöôÿööÿõõöèèçרäÔÔÞÐÍãÖÐñçÝüôçÿøèÿüéÿÿí÷ÿÿèñðØáàC?4B>3A=2?;0=90;7.:6-95,73*73*73*83-:5/=82@;5B=7I?5LB6QE7UH8VI8YI9YK>ZMEUKLXP_ebyz¦‰É”œäš§ö ¯ÿ«´ÿ¬µÿ­·ÿ¯·ÿ¯·ÿ¯¶ü¯³ú¯²÷§ªí¢£ä˜˜ØŒŠÉ€~½uq®ie¢b^›cVŽbU‹]TƒWOtNHdFCTBAIAAA;=8@C9ß<7ß<7â=9æA=èC=éB<èA;ç@:èA9ä@7Ü8/Õ1'Ø6+ëI>þ\Qô?4î6,ê+#î)#ù,)ÿ./þ,-ø((ú0.õ4/ï7/ç6,Ü4)Ö2&Ó3%Ò5&Å='Ç<'É<(Ì;(Í:(Ï7)Ï6(Ð4(Õ8/Ï5-Õ<6åPJçSOÛLHÏA?º/,¹=%º>&»='½<'¾9(À8(Ã9,Ä:/È>4ËB:ÕOFÜWPÒQKÃD=¿B<ÆKDáIFáIFåMLëSRíTVëPVéNVìOZ÷VføUhùSiúRküRmÿSqÿStÿRsïNoøTvÿ\|ÿ^{ÿ[vÿUoýQgûReüUføQbÿZhÿZjôM^úRcÿWiôI\§ha™\W·€{Ù©¥ïÇÅýáÞùêçýøõøýùøÿÿ÷ÿÿöÿýùÿýÿÿýÿûûÿö÷üùòþùõþùõþöóÿ÷õÿõõøêéêÜÛäÖÓÝÐÊáÔÌïåÙüõåÿùçÿýéÿÿì÷ÿýèñîÙâßEA5EA6C?4A=2?;0=9.<8-;7.84+84+73*83-:5/=82?:4A<6G>5JB7ND8RF6TG6WG7YI:YKBWKKXP[b^wsuž…ŠÂ™Þ—¤ó¬ÿª´û¬¶ý®¸ÿ±¹ÿ²ºÿ´»ÿ³ºÿµ¹ÿ¯²ùª­ô££ë™—àŽŒÕ‚€Éxt¾qm·l`¢i]dY“^V‡VQyNKhEDV@@J76;?=>HBBKABN?BYFJmX_}fnt¤}¬§‚®¬}§´w ¾p—Âc…ÃRpÅE^ÔI\×EPÊ9<¾3,»7(¸;%³; ¯<*¯<*°;)³;*·<,»<-À<-Ä<.Ä6*Ë8.Ô<1Û>5á@8á>7à<3á:2Ü73Ù40Ø3/à93èA;ìE?êA<å<5ã<4Û4,Ø4*Û7-Ô2'Ì, Ö6*èH<÷I>ò@6ï4-ð-)÷+*ý+,ý+,ø*,ñ))ì/+è3,â5.Ü4+Ö2(Ô2'Ô2'Ç:&È;'Ê<(Î;)Ñ;*Ò:,Ô8+Ô8,Ñ4+Ø;4Õ:5Õ<7çONîXYÙEEÅ02¾=(¿<(¿<(¿:'Á9)À8*Á7*Á7,Æ>2ÇA6ÏJAØUKÑRIÄH>¿E:ÃH@ÚIDÙHCÝLGäSPåSSâPQâMQåNWòXdöZhý[pþZrýUoûQlýPnÿRpÿFmÿOvÿZ}ÿ[{ÿVqÿSkÿVkÿ[mûYhúYhü`mö`kî\fñenífmÚT[’cY}ND™lfØ’ß¹¶ñÓÑôàßþöôøú÷÷ÿý÷ÿÿöÿýùÿýÿþÿÿýÿÿ÷ûúúòüùôüùôýøôÿùöÿøöùîìñãâçÙÖÝÐÈÜÒÈîäØýöäÿûèÿýçÿÿè÷ýùêðìÝãßIE9HD8FB6D@4B>2@<1?;0>:/:6-95,95,94.:5/<71>93@;5E>6HA7LD7QE5RE4UF3WG7WIC_@EmDJ€OU•]f¦jrÇe˜ÍkœÏl›Ïf‘Í]…ÎTyÌFgË8UÌ0Hß>PäBMÔ:<Æ7/Ã@.ºB*®/Û?0Ü@3Ü@3Ò6*èKBåJEÎ50àFFóZ\áHKØ?BÆ=-Ä;+Ã:*Ã:*Ã:*Ã9,Á9+À8,Â<0Â>2ÈF9ÏOBÎPDÄH<¿C7¾D7ÑF?ÑF?ÕJCÛPKÝROÙMLÚKMÜKPëX`ó[hüaqÿauûWoõOgõMgúPkÿJuÿOyÿSwÿRqÿSmþ[pÿcuÿixÿguüaoôbmìelàglÔjjÉjh¼c_dVeH:_Tª‡Í«©åÇÇïÚÙÿóóùøöøþü÷ÿÿ÷ÿÿûÿÿÿþÿÿüÿÿ÷þûüôúûóûúõþûöÿýùÿûøþôòøíéêßÙÞÔËÝÓÇíæÖÿøåÿþèÿÿæÿÿçõúóêïèáæßLI:KH9JG8HD8FB6D@4B>3A=2=9.<8/;7.;60;60<71>93?:4B?8EA8JD8NE4PE1TE0VG4XH9ZMEVMR[Whkl‹~‚²‰“Ð’Ÿå™§ò§­÷©¯ù«±û­³ý°´þ°´þ°´þ¯³ý«®û¨«ø¥§ô ¢ïšœé“•⊌ل†Ó…É{u½mj­dd _a”X[†QQsNHbUFY_CRlBLEO˜LV¬U]¼[dÅ]fçJuéNxæPuàLn×FcÒ?YÍ5JÊ+?Ú5EçAMéFKÙ><Í>6ÊH8¿J6°B)·>-¸=-º<-½>/Ã?2ÊB4ÐD7ÕE:ÙE9ÚB7Û>5Û:2Ù6-Ù5,Ú3+Ù2*Ô1*×4-Û60Ý90ß80Þ7/Ý6.Ü5,Ö/&Ù5+Ø6)Ï2#Í1"Ò9)Õ>-Ó<+Ö=-æD7÷KAÿD?û56÷)-÷)-ù.2ø67í55â30Ú1,×/,×/,Ù0-Û/-ã80â:1â:1â<0à<0ß=0Ü?0Ú>1Ñ7+ïWLù`XÓ;6Ó;:èOQÞEHèOTÍ=2Ê:/Æ8,Æ8,Æ:-Å;.Ã;-À:.¾:-¾<.ÁB3ÇH9ÇI:ÂD6¾@2¼>0ÊE<ÊE<ÎI@ÕPI×RMÔNKÓKK×LOçZ`ð^hüfrÿhxü]qóOgóMeùQjÿPzÿQxÿQpûSmø\qûhxûjw÷epüfró_kí_kêkrÝsu¿lh¦f\¡l^ujXVI8kXJ–{t¾ŸœßÁÁïÕØþîïûõõúüûúÿÿùÿÿýþÿÿýÿÿûÿÿ÷ÿýÿ÷ûþõûüöÿþùÿÿúÿþúÿûõÿ÷òñèáäÜÑáÙÌðé×ÿúæÿÿæÿÿãÿÿäöùðíðççêáQK=PJ3Õ;1Ö8/Õ4*Ö3*Ø4+Û4,Ü5-Ú9/Ý<2à=4ß<3Ý90Ü5-Ü5,Ý6-Ò.$Ý;.Ü<.Í1"Å.Í8$Ð=)Ì;&Ë:'Ò9+á:1ó=9ÿ@@ÿ;?ÿ27ô+1ê,.ß+,×+)Ó+(×/.Þ44ä88è:;ó55ò64î73é6/ã7-Ý5*×5(Ñ5&Í5'çPEÿmcÛHAÈ42×CCÓ>BêUYÙB;Ô=6Ì70Æ6-Ç9/Æ<1Ã=1Á=.»9)»<+½@.¿B0¿B0¾?.¼=,»<+ÃC8ÄD9ÈH=ÏPGÒSLÐOIÐOJÔOPç_cîaiûitÿm|ÿdu÷UjõRgýWoÿSxÿUtûWpð_pñoyôy~êmsÞXaïamò`mïaoðs{숊ɂ|¥wjšyhhpYMO:^WGƒqg±•’Ý¿¿ñÔØýéëþôõýûþûÿÿúþÿýþÿÿýÿÿûÿÿöÿüÿøùÿõúýôÿÿúÿÿúÿÿúÿý÷ÿþöùðçíåÚéâÒôïÜÿûåÿþåÿÿãÿÿâøúíòôçîðãSM=RL4D=5B;3A:4@93A:4A96B:7@A;CC;IE:NG7QF2RF.UF/WH5XJ=RHFXR\jh€}§‹’Æ’žÚ–¤å¥¦ù¦§ú©ªý«¬þ¬­ÿ­®þ¬­ý«®û¨¬ö¦ªó¤¨ñ£§î¡¨î §ë¤è›¢æ™žâ’šÛŠ”Ò…Ê‚ŽÂ‚‰·‚©‡yšŽmˆšczªWi¾P]ÓKWäGPí?Hñ9Aî;6é<5âB6ÙH7ÎJ5ÅG1ÂD.Å@/ãUGàG?Ú;7Ø64Ø88Ö:;Ï98Ê66¼=.¾<.¿;.À;,Â8+Ä6*Æ3)È1&Í5*Ð3*Ñ3(Õ2)×3*Ù5,Ý6.Þ7/Ü>3Ý<2Ü;1Û8/Û7.Ú6,Ø4*×3)Õ3&Ó3%Ñ4%Ï6&Ò=)Ñ>*Ê9$À2Æ;(È5%Ó3'ç60ü;<ÿ=@ÿ7=ù27ê-1à..×--Õ0.Ü44ã9:é;=ë;>ý.4ú/3ö01î1/æ1*Þ2(Õ1%Ï3$È2#Ð>/új_ãTLÈ95Ð@@Ë:=ãRUçJEÝB=Ò93Ê5.Æ8.Å;0Â<0¿=-¹<*¼?-½@.¼?-º;(º;(½<)¾=*º>2º>2ÀD8ÈLBÌPFÊNFÌMGÐNLçbcêbføhqÿo{ÿhxøYm÷Ujþ[pÿXsü\tìbqãktç€í‰‡ãyyØ_dñhrÿl|öcsíkwø‘•餟À–Š¥‹z\pWFRRLÿ4:èB*âD)ÙH)ÎN+ÃO(¹L%¶H%»D&ÛWBÚF8Ú;5æ>>íBHé>Fß5>×08ÈF8ÇE7ÈD7ÉA3Ç=0Æ8,Æ3)Ç0%Ê0&Î1(Ó2(Ö3*Ù5,Ù5,Û4,Û4,áC8Û=2Ø7-Ø7-Ü:/Ý9/Ù5+Õ1'Ù7*Ð0"Ì0!Ð9&Ì9%Æ5 Ç9#ÑE.Á:&É:)Õ7+â3.í//÷05þ5;ÿ;BÿIMúGJîDDæ@@ä>>ã9:ã28á.4þ'/û(/ø*.ó-.ë0+ã2*Û5)Ô7(Æ0!¾/óeYê]TÌA<ÓEDÊ;=ÝNRïPMäFCÕ:6Ê5/Æ8.Ä:/À,¼A/½B0º=)·8%º9&¾;)Á>,²8+²8+¸>1ÁG<ÅK@ÄIAÆICÊJGå`aæ^bñdlÿlxÿix÷ZköTiýZoú^tòcuãgqØqrÝ…é”ꋇåruùq{ÿxˆõ`sßXgóŠ‘ý¶´Ö«¢¬•…TnSAS;PTCkaWž†‚Ý¿ÁõÖÛøßåÿóùÿûÿÿþÿüýÿýüÿÿüÿÿúÿÿôÿùÿø÷ÿôöüòüÿøýþøüüôÿýöÿÿöÿþôûõç÷ñáüúåÿþåþýáýþßÿÿãÿÿñýþîüýíXO@XO@WN?VM>TKñ8>æ=@ÙD@ÑHBå;Dà;BÞCGÉ99ÌB@ËD@½/-ÞHIëHKîAGï;Dì8Aé:?â<>Ú<;Ô<9ÏA=É>9ÊC=ÑLCËK@¼>2³7+¹;-¹9,¾8-Å7-Ê3,Ï0,Ô/-Ý11á34çA1à9)Ü1 á1"é8(ê;*ã6%×2Ñ2Ì4Ê5Ç4 É3"Ì3%Ñ3(Ô3)Í.(Ï2+Î6+Ì8*Ë8(Í7&Ð7%Ø6'ß3'é2,ð31ò01ð+2í*2í+4ï-6ú+1÷*/ñ+,î.-ë4.ä8,Ú7(Ð5#Ã.Ä3 çXHèZLÊ<2ÞOGÄ5/ÚIFÝQRÚLKÒDBË<8È80Ç7,È9+Ê;+È;)Å:'À9%½:&»<)º=+¸=+¶=,³9.µ;.¹=1½?1½?1¿@1Â@2ÅA4ïk_õqeêd[ômiùroécbðjiútuÿk|ûivñdmï_hòaføgjõnkîqk÷|wÿ}ƒþYjÿ[wîZpû¬±«°œaŸz]sMIZ6LR6snX£–†Ë·®íÕÓÿîðÿõ÷ÿ÷ûþøüüüþþÿÿþÿÿþÿÿýþÿæÿòàÿëâýêìÿð÷ÿôûÿôþÿóÿþñÿýïÿûîÿùèÿùæÿøãÿùãÿùáþúáýÿþþÿÿþÿÿYPAXO@XO@VM>UL=TKDë:Bè7?ä7;Ü89Õ:8Ð;7ÓF?Ç<5Å<4ÌG>ÌLAÁC7¶;,·9+¹7*½7+Å7-Ë4-Ñ2.Ø3/á53æ66á?0ß<-Þ6)à4&á6%á6%Û4"Ó4Ð:"Ê:"Æ:#Æ;&É<*Í;,Ì8,Ì5*Ö3.Ö5-Ñ7-Î8*É6&Ç4"Ë4!Ð3"Ø2$ß1(å/+ç.,è,-æ,1æ-3ç.4î*,î,-í0.é2.á3*Û5'×7'Ò9'Ó@,»*ÔE5Î?1ÙF>êWPØC?ØBAåWVâRRÛKJÔC>Í=5É9.È9+Ç8(È;)Ä;(Á:'¾;'½>+º?-¹@/¶>-²9.µ;0·=0¹=1º?0½?1ÁB3ÅC6ëi\òmdçb[ðkfõolèbañklûuvÿp€ÿo|öirë^fêY^òadøqnù|vöyuÿx~ùRdÿUríXnö¥«¥¨“X”n[tLN_;QZ;us\ª×úøàÜÿôóÿúûÿúûÿûüüüþúþÿûÿÿúþÿûüþçÿñáÿêáýçéÿìóÿòøÿóýÿòÿÿóÿýïÿýíÿúëÿöåûóàúòÝûõßý÷ßúúøüüúÿÿýZQBYPAYPAWN?VM>UL=TKCß>Câ;CØ7=Õ?AÏA@ÉD?Â=8Ã96ëWWàBCæ=Bé:Aæ7<Þ58Ö66Ñ96Ì;6ÕHAÅ:3¾5+ÅA5ËK>ÆH:»=/¶8)¹7)¿7+Æ8,Î7.Õ60Þ63æ87ë;;Ó5)Ö6*Ú6*Ü6*Ý5(Ý7)Ú:*Ö?,Ã5¼5¸6 ¸7"»9)¼8+¼4(º0&é=;å>8Þ=5Ô*ÓB/Â1 æTEÐ<0ÚA;ÞC?èJIòTSèVVçSSãOMÝIEÖC;Ï<2Ê8+Å6&Ä7&À7%¼7$»:'¹<*·>-µ=,²=,°:.±;/²<.µ=/·=.º?0ÀB4ÃE7Ü\Oêg]äaYñlgöpoçabìfgòkoäP`ï^kôhqòemñ`eödgûqqúzwövsÿnuõJ]ÿMjïUmñœ¡ŸžŠPˆcVoEOd=Va?ww]¯¤’âÐÄÿíæÿ÷óÿûøÿýûÿþüûÿüûÿýûÿýùÿû÷ýùãÿëÜþãÚøÞàúáèûåïüèöýëýþîýúëÿúêÿ÷èúñàòê×ðèÕôìÙùñÜýùöÿûøÿþû\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8RF8JF=KGÓ>@ÐFCÅA<¸71Å>:ê[WÝABä?Cç=@ã:=Û89Ó97Î=8ÌA:ÏE;Ã9/»2(À/¸9(¼8)Â8+É:,Ò:/Ù80á83è;7ì=:Ô3+Ö3,Ù5,Ý4-Þ6-Þ7.Ú:.Ô>/Æ9(Á<)½>-¹>.»=/½=2Á>6Ã>7ó?>î?<æ?7Ù=1Í:*Æ9%Æ;$È<%Ï<(Ï8'Ï2#Ñ1%Ó2(Õ4,Ñ2,Ï0*Ñ3*Ó5*Ñ7+Ï7)Ê7'É8%Ê<(Ì>*Ê<(Î=,ô^PàF<Ò3/Ò.-è?BþUXÿvuÿroÿjgö^YçPIÕA7Ç5(½.Ä8'À9&»8&¹:)¶=,µ=-±>,°<-­<.­<.®=/°<-±;-¶>0¼B3ÁE9ÉMAß`Wâa[ôpløtrå`aä]aå^dÙFVçYeógpôgo÷dlýjpÿstúxvõssûenóCXÿEbðRkë’˜œ—ƒN‚\Ql?Ri?ZhDy|_°ª”èÛËÿôêÿùðÿúóÿýöýÿùûÿúùÿúöÿøòüóîøïÔüÚÎóÒÊëÌÏìÎ×îÒàïØéòÝóöãöõãûõåüõãõìÛíáÑéÝÍíáÑóç×úõïü÷ñþùó\PB\PB[OA[OAZN@YM?YM?YM?WK=VJcî7Uí8IçAEßFAØIAØIAÞFCæAGð;Jõ9JãDI×>AÐ@?ÏJE¾?8²3,ÇD<âTPÜDCáACä>@â>?Ü>=Ô@<ÏE;ÌH<Ç=2Á7,½5'½9*¿=-¿=-»<+½<)À;*Ç;,Î<-Õ;/Û8/à70ç83ë95ã:7â64â22å31æ42ä50Û2+Ò1)É2'Ç9-Ä<0¿90¼5/¿52È<;ÒDCó57î66å61Ø5,Ë5&Ã6"Á9#Ã;#É>'Ê9&Ë5$Í5'Ñ9,Ó;0Ò:/Ï8-Í?1É;-Ä8'Ã7&Ã:'Å<)Å='Æ;&Í>-Í:*Ø>2ãB:Ö.+æ::á14å26Ò73Ö;7ÞC>åJEêQIêSHèTHäUGË?0Æ>.¾<,º<-¶>.³@.°?/®?.«=0«=.¬<.¬<.­<,±=.·A3¼D6ÆLAÞbZâc]ðnlôrrå`cå`eæ`gúixûozõltí`hñ^fÿkqÿw{ÿ{|öpqø^hö@Wý>]óOh懠•ƒX†aXuE\vIgwP‚ˆfµ±–éáÌÿùéÿüíÿýñþÿóûÿôøÿöôÿóíûìäòãÝëÜÁëŻ㾺޺¿Þ¼ÆáÀÍâÃØæÌãëÓìîÙôñÞøñßóêÛìàÒèÚÍìÜÏñáÔòçáòçáóèâ[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJPI?QI>SK>UL;XM9YM7YM7XM;WK=ULGYSWc_nmkƒtt–|~§ƒ†³†‰²‡Š·ŠŒ¿‹ÈŽÏŽŽÔÕÓ”Ó‹Ê‚‰¿{‚¶u|²ov­gp«ck©€n~ey­ZvÏMoê?cú2Vÿ0Lû6Gð@CâGBÙLB×MCÝIGèCJõÍID¸<4¯5*ÉI@ÕLF×CAÜ>=Ý:;Û;;Ù?=ÔE=ÌH<ÇI;Á7*Á7*À8(¾9(¼9'º9&½:(À;(Ä;)Ê=,Ò<-×;.Ü8.á6.ä6/è5.ê24è.1ê+0ð/2ö37÷69î45æ21Ø/,×31Ô63Ï42Î/3Ð/5Û5?ä=Gõ,2ñ.2è2/Ü3,Ñ5(É8'Æ;&Æ>(Ä9$Æ8$Ë8&Ò:,Ø?1ÛA5ÚB5ÙA6ÎI8ÇB1¿<*½:&Á<)Ã?*Å<)Ä9&Ì;*Î6)Î0'çB<Ý1/ñ>Aå.2à'-Ò3-Ó4.Ö71Ö92Ò8.Í5*Æ2&À1#ÎE5ÆA2¼=.µ:+±9)®:+ª:,ª:,ª/«=.«<+¬=,°?/µA4ÉSGàg^ßd_èkiînoæchðjqõoxüp}ýt~õmwîcj÷dlÿqzÿw|ûsuökpöXfûAYÿ:[õKfâ}…©˜†l”ojŠXo‰ZxŠ`—r¶·˜âÜÂúôÞüúåÿÿïûÿïõÿïîÿëçúäÜïÙÐãÍÉÛū٫¨Ó¦¨Ñ¥¯Ô©¶Ô®¼Ö±ÇÚºÒßÁàæÌêéÔòíÚòéÚïáÖìÛÑëØÑíÚÓèÛÒæÙÐåØÏZN>ZN>ZN>ZN>YM=YM=YM=YM=XL@çE@ÝJBÚKCÞHGéBLó8ÏE;ÆF9¿E6Á8(Ã:*Â:*¿:'½8%½:&¿:'Á:&Ä9&Ë:)Ò;*Ù9+Ý7+á5+ä3+ç4-í)-ò)/ù,3ÿ.4ÿ07ÿ18ÿ28ý58ú7;õ8<ò9?ò9Aô9D÷6Gû6Hü5Jø)1õ,2î02ã4/Ø7-Ï9*Í<+Ì=,È7&Ï9*Ø2á?4â>4â?6â?6ÑN<ÍH7ÇB1Â=,¿:'Á:'Å9(È9)Ç3%Ó9/á@8ëD>Þ0/á-.ì38í38×4-×6.Ù80Ø:1Õ;1Ó;0Î:.Ê:/ÖL?ÌF:¿?2´9*¯7)«7*©8*¨8*ª<-¬>/­?0­=/«<+«<+­<,¯>0ÀKAÚc[Ýc^èkiðosëhnõrzüvïer÷oyør{öjsÿlvÿvÿu}öioõfl÷RbÿA[ÿ6YôFaÝt{²›‰€¤~z›f{—f€–h‘u­±ŽÌË­áàÄéëÓî÷ÜåóÙÙíÑÎçÉÅÞÀ¼Õ·´Ë®®Å¨•Ã’”‘˜Ä“¡È™§Ë¬Ë¡µÎ§ÁÒ®ÎÙ»ÙÝÄåãÎìåÕïáÖëÚÒçÒÍäÏÊÞÐÇÚÌÃÕǾ[N>ZM=ZM=ZM=ZM=ZM=YLXL>YNø<=íA=äE?àGBãDHèAKï=Mô:OÒBAÑGDÅA<ÂH=¯;.°5É83È.,Ç)&É.*Í:3ÌC9ÂD6¸@0Ã:(Ã<)Ã<)Á:'À;(Á=(Â;'Ã8%Ä6"Ê7%Ô8)Ù7*Ý5(á3(å3)è3*û03ÿ58ÿ7<ÿ38ÿ,2ÿ&-ÿ'-ÿ)1ÿ,3ù'0ô%/ú'6ÿ+=ÿ(Aÿ:ú2ö".ô&0î+1æ0/Ú1,Ò4+Ï5)Ð6*Ô6+Ü90æ>5ì>7ë:4é61è50é61ØL?×K<ÒF7Ê>/Ä6(Â3%È6)Í9-Í5*Ô6-æC<à74à21Ò ì89ê35Ó2(Ô3)Ò4)Ñ5)Ï5+Ì5*È5+Å7+ãYNØRFÊH;¾@4¶=ê@AéBIêCMëANê>NÌA<Å@9¾?6µ?3®=/±=0¿E8ÒMDÇ61Ô;6Ï1.Í2.ÖC<Ç?3´6'·?.½6#Á:'Ã<)Â;'À9%Á:&Ã:'Ç:&Ë:'Ð9(Ô7(Ö3$Ú."à/%ì7.ô=5ø72ù30ú.-û)(ý%&ÿ#%ÿ"'ÿ"'ÿ$*ù )ú!,ÿ%7ÿ'<ÿ;ÿ4ÿ3ý)7ð".ç"+ä*-Ý--Ó+(Ò-)Ü41â62é54ï64ó55ó12ñ-.ï+,í++Õ<4Ò91Ñ:1ëTK»"Ä+#ßF>È.&Ì/(Þ<7èE@â:7Ø/,Û.*ã41é:7Ý?3×;.Ï5)Ë3&Ì5*Î:.Ë;0Æ8.ìbWàZOÈD8¹6,º:/·9-¯3)²6,¯1%°2&®2&®4'¯7'²:,²<.³=/°:.ºC;Ö\Wìppñsvøv~ûyƒõq|ÿ{„ûx€øu}üs{ÿr~ÿq}ÿlxûisøbmôI\ÿ=\ÿ8[ñ:VÖek²–‡¦}~¡i|šd}•c‡—j”ŸuŸ¥ ¨ƒœ¨„’£Š£|€Ÿvx›qw›o|r t„£w¯uƒ³y‰¹½„“¾†—¾‡œ¾‹¢½§¼“¯½š¾Â§Ï̹ßÓÇãÒËÜÇÄÖ¾¾Ê»´Á²«¹ª£ZM1ÐB6Ü?6è?8ôA=ö=;ø:<÷:@ô7½=4¶<1°õ6;ú3:û06ú-2û.3ý14þ36×4/Ü:5Ù72æDAæDAÎ/+Ñ2.Á"Ö41á?<èE@à=8Ø3-Ù2,Ý60à91Ò<-Ï9*É5'È4&Ê8+Ë;0Ê<2Æ9/ícYáXNÉ@8¼3+À:1Á;2½7.À:1Á4+¾4*½4*»5*¸6(´6(²7(°6)´;0»B9ÓYTèllïqtöw~þ|†øv€ÿ|„ûyøv~þuÿsÿo}ÿiwùeqùanöI]ÿ<\ÿ9\ô=YÕdh«y€œsu˜`t’\w]cŠ•k—p‹•p…”mp†_lˆ_fŠ\g^j_q•ey›i}l€­r„²tЏz»}½‘½‚–½„›»‰›µ†¡³­¶—¾½¨ÏÆ·ØÇ¿ÖÁ¾ÒººÅ·¶º¬«²¤£\L<\L<\L<\L<\L<\L<\L<\L/ÇE5ÐG7ÚC8ä?9ó=<ú9>ü9Aú:Eò>GæAH×@EÏ@B¿<4¸90±8-«:*¨9(«:*»?3ÏF<ÙD>Ø96Ú65Ü:7ÜC=ÝOEÍI<²4%À9&Á:'Ã<)Æ=+Ç>,È=*É:)Ì9)Ï8'Ï2#Ó/#ß4*î=3ô?6ñ91í2+Ú7&Ý6&à3#å/"é-"î+%ñ,&ò+(ó++ð(+ò'-ú(5þ%8ÿ5þ2ÿ3ð(5ô.;ô4?ò8Cï;Dðå+6ñ1<ô/9ù-8ù+5ù,3ø-1ö.1ö01Ù1.ä<9Û64à;9ÿljæBAÒ.-Ð.,Û97á?<àA=Û<6Õ7.Ô6+Ô6+Ó5*Å8&Ã6%Ã6%Ä8)Ç;.Æ<1Æ<2Å;1ëaWáTMÉ<3¿0(Ë;3Ï?6Î;3Ñ>6Ú=8×<7Ô=4Ï<2É;/Â:.»7*¶6)·;/»@8ÏTMãgeíorøz~ÿˆý{…ý{ƒùzúx€ÿwÿsÿl}ÿftøbnø]kõG^ÿ:Zÿ9\÷AZÐ_c›gkŠ^e†Oh…Ol„Rt…X{ˆ\}ˆ^x„\q‚X`yO_P`†UeYm•`uœg{ j€£m­p…±tˆ¶v‹¹y‹¹yŒºz‘º~”º‘±•¬€›©†©­’ºµ¢Ç¹°Ë¸²Ì´²¶­®ª¡¢ —˜[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<`P@^Q@]P@\NC\NE[NF\OI]PJ`NdcSmfX{g^‰ohœzu¯„|¸†{µ™…º¥…´¯€ªºy¡ÈxŸÓušÍc‹¾OyêAFà@@ÕA=ÌF;ÈJ;ÉJ;ÐF9ÜB:î@?ø;Aþ:Dü7õ>8ð50è-&×:)Ú8)Ý5(à2'æ/'é.'é,(é,*ç+*å(,è)1ï+7õ';ö";ú=ÿ"A÷8Gä(6ç/;ÿP\ÿ`lÿP\ò^N>^N?^N?_OB`PC`OEbM\cPdcUodZle‘vr¤~w«‚v¦“~©¬†«Â‰©ÐžÛw“âk‡ÝXuÓFfÿ=MüDPðJNÞJHÌG>ÇG<ÍG<ÙD>èBBó>Cù>Gø@HðCIÞDDÍB=À?9½A5µ=/®:+ª;*©:)­9*º<.Ì?6áFBä<;ïABíAAÞ:8ãJBæXLÔL>È@0À8(»3#Á8(È<-É:*Ë7)Ð8+Î0%×3)à8/é;4ï:3î50ë0+è+'Û4,ß4-ä2.ë31ð43õ45ö58õ6;é/4ç.6ê0=î2Cò.Fõ*Gý,Lÿ1TðPî3Dî2Aî3>ê5<æ89Ü73Ð3*Ç/$Ì2*È-(Ñ61óXT÷\ZóXVÜ@AâHHÜB@Õ<7Î70Í6-Ï8-Í9+Ê7'Æ3!³:%²9$´;(¸=-¹;-¶6)»8.Ä>5ÛNGÙEAÎ50Ð1-á>9è?:ã81ä71ð/0ï11ì42é73â92Ø:/Ð9.È:.¾6*º7-ÈIBÜ_Yënlû}€ÿ…‰ýƒõv}õx~ùzÿx‚ÿsÿj{ÿdtö_nðUeôF]ÿ6Vÿ7ZúF_ÀTRvaBJoRÿ-Hÿ:QþCTéDKÒ@AËA>ÎDAÖEBãEFêAFï@EïBFçDEÚEAÉC:¿?4º@3±;-©8(¨9(©:)®9(º:-Ë;3èIEë??î;>æ68Û2/ÞA:îZPõg[ÙQCÉA3¾4'À6)Ç9+Ê8+Í6+Ò8,Ñ0&Ü5-æ;4ë:4ê40è/,ê-+í-,ó4;õ3;ø3<þ2=ÿ1>þ0=ý0?ù0@ô1Añ2Dò5Kó5Oó0Põ-Qþ1Xÿ:dá7B÷O\ÿanÿ`nþXfùQbòEXé8Jó@Sê:GÝ2;Ò/2È3-Á9-º=+µ>(Æ9/¿2(ÙJBúkcÝLGáPMÍ<9Ï;9àLJÔ@<Ê7/Ê7-Î(«;%­=)²?-±9)®4'º:1ÊC=ÕHAØC?Ô72×2.ç;7ì:6è2.ë2-÷)+÷+,ô.-ð3/é61â:1Ú<1Ò>2Â6)º4)ÅB:×XRçjhú|}ÿ†‰þ€„õv}öyú{‚ÿx„ÿqÿh{ýbtõ^oîSe÷I`ÿ9Xÿ9[ûI_ºQNmZ:Em8ZvCa|InSv†Y|‡]Šbg‚—lœl{ m|¤o}¨p~ªo‚ªnƒ©l…©lˆ«qˆ®qˆ°r†³r„³oƒµn„¸p‡¹t‹µv‰¬tŒ¦wš¨„°´™ÈïØÌ¾àÏŽÃÓ«±Á›¡±ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:\M:`J<`J<^K<_L=^M;_N<_N<^O<^O<_P;_P;aPHÿ$Hÿ0Qÿ;UñÇA6¾>1·?1¯9+¨7'¨:)¬=*²=,À>1Ñ>7ß=:ç79æ/3ã/0á32Û94åNEülaïj[ÙQCÆÍD>Á61É;7ãUQÕF@É91È8-É:,È9(È:&É;%ªB)¦<&¦<&¬=*©8(¬3(¼=4ÒMFÕGCÝEBÛ96Ü30é73í41ì/+ó2-ÿ)/ÿ*/ý--ö0/ï4/è7/ß;1Ø>2É:,¼4(À;2ÏNHßb^÷yzÿˆŠÿ„†ùzú}ƒü}„ÿx„ÿn~ÿdwù^pò[léN`öHaÿ8Wÿ7YøH]²JGcS1Al6ZtDf~NuˆZŽc…f‡’jˆ—n‰žs‡¤t‚§t§r}¨p}©n©mƒ©l…©k†§n‡ªp†¬o…¯o°l³k‚¶n…·p‡´s‡­rŒ¨wœ¬…²¹šÈƱ×οÞÐÅ·¿Ò¤¬¿’š­ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:\M:`J<`J<^K<_L=^M=_N<_N<^O<`Q>aR=bQ=bQ=bR;bP:aO9`N8jNMgNRbQ[cWkjfuv’}}™y‘’{¯ŒËƒ‡ã{|ùqsÿgjÿTXÿAGÿ#Mÿ.Tÿ7Wù9Pé>NàEM×EHÑ?B×BDÚACÜ@AÛA?ØC?ÏB9Å?4¿=0·?1¯9+©8(«=,°A.·B1ÇC7×D=Ú64å57ã,0ç02è88Ó0+Ï5-éUKÿznæ^RÎD7É=0Ê<0É6,Í6+Ö90Ú70ß82ä71ç40é1/í10ò53ø87ÿ=ÿ>ÿ>ÿ>ÿ=ÿ=ÿ<ü=ò:ï@ð$Ið&Nï$Qó%Uÿ0eÿ=sÿgrþalôXeîR_ïQ`îM]â?RÖ1Bß:JÑ4?¿-0±-(¦5'ž>&–C%E"¯7&²9(ÒWHº<0ÁA8º7/º3/ÍC@ãXSÕHAÈ91Ä6*Å6&Ä5$Ä6"Ç9#¦B*¢<%£:%§<*¦7&©3'½A7ØSLØIEáGEÞ:8ß2.ê41î1-ï.)ù4.ÿ'-ÿ',ÿ)+ö*)í-(ä1*Ü5,Õ9-Ð>1½3(¼7.ÉHBÙ\Xôwuÿ‰‰ÿ‡‰ý~…ý€†þ†ÿx„ÿl|ý`sõZlïXiãHZóE^û4Sÿ3RóCX«E@\L*?j4Uo?d|LwŠ\†“h‹–l˜pŽtŽ£xŽ«{†«x©t|¨mz¦i}¥g¥h‚¦h…¤k…¦m„ªm‚¬l®j}±i€´lƒ·oˆ·sˆ°tެxœ®„²¹šÄ«ÐǶÖÈ»²½Óž©¿‹–¬]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^L8\J>]K?]M@\L=ZM=ZO=\Q?^SA_T@_R?^Q@aQAcRBdQCdNAcM@pKEjKIfOUgZknl„v|ž}†¯ƒŠ´Š…®Ÿ‰­¸Š¦Ìƒ”Þ{~îumøl]ûfRðN[æDQä>LéANïCQí>Ké:Gê4Á;/¼8+ :$¬C0¬=,®6(Â?5ÑD=Ð;5Ó61Û83Ü71Ý6-Ý7)Ü9(Ý='Ù;"Õ7à74õPLõXOÛD9Ç8(Ì?.ÒC3Ñ;-Ò4+ðGDâ.1ï4;ö4?ï+9ÿ@Qí(9þ&+ÿ*-ÿ*-÷"û#$ÿ()þ((òð"ú+1ì )î&1ò.<ç$5ÿYnë+@ÿ`jÿ^iÿYcûT[öPTìHIÛ@;Ê:1ÅA2½F2®D.Ÿ;$”5–7#˜;)œ=+§81«83ÁEC¿;9¾23Æ45È44×CAÜKFÚKEÑD;È:0Ä4+È4*Ì3+Ì2*·?1³9,®.#­'¶,"Æ7/ÓC:ÚG=äPFßE;Ù80Ü1*ç/-ô01ý/3ÿ.4ò14ó12ô01ó/0ó0.î1+é4+à8-Ö=/¾2#¾?0·>3Õ`Wçtqÿù…†ôŠŒþ…Œÿwˆÿe}ÿ[wÿXuÿSoûJgûDcö7Y÷9]ç>[Ú]k„C=PI/F`;Xw^N?^N?[N>ZO=\Q?^SA_TB]QA]P@_OB`NBbPFcOFcOFkLGjMOgS\h_rnoŽw~ª~ˆ»…ŠÁ›–Ì¢Œ»«£»wŽÕx‚í|x÷uhöjYüZgóN\ìFRòHUöJVõERï?Jë;Eä9Aà:>Ú::Õ=:Î?7Ç>4À+ª?-¨9(²:,ÁA6Å<4Ç7/Õ<7Ó40×4-Ø4*Ø4(Ú7&Û:&Û;%Ù;"Þ52æA;ëMDàI>Ð>/Ç8(Ê8)Ó;.Ý<2öJFæ/1ò5<ø6Aò.<ÿ?Pì'8ö$'÷%(û),ý+,ü*+ù'(ø((ø*,ð$'í%(ê%,þ:DÚ'ð4CüATÞ#6ÿluÿblþZcüW]õOSæBCÙ;8Ñ>6¾8,¾E4¹H6¨?,–1)Ž()ž-'°:6ÑTRÎHGÃ54Æ45Ò<=ëWUØGBÖGAÏB9Ç9/Ä4+Ê6,Ð7/Ò5.Â?5À:1À5.Â3+É4.Ð83Ø?9ÞE=ãJBÞA8Ù6/Ü1*æ0-ó11ü03ÿ.3ò14ó12ô01õ/0ó0.î1+é4+à8-×>0¿3$¼=.¶=2Ó^Uévsÿù…†õ‡Šþ‚Šÿu…ÿe|ÿ[vÿWtÿQoþIhúAaö8Zö=_æF`ÅQ\{?7NH.Ga>Yx=e‡Ks•Yx›awbz¢f|¥i}¦j|¥i|¥i|¤h{£e{¡d}¡c}¡c¡d{¤l}¦n}©l}ªi}ªe}­c¯c‚±cƒ±f‡²k‡¯pˆ«u‹«|¬„©‰‹¤†z…‡doqR]_]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8^K<_N>aP@`P@]P?[O?[O?[RC[QE[QE\OF\OG_PKcQOfTRhTUiTQiVXi]kmi„sv¡zƒ¼ŠÍ‰Ö—‘ÙŸ‹Êª‚¶º}ŸÒ‘烅ð~tïveÿ`k÷S\íGQðFQöHR÷EQô@Kî=Gå6=à7:Ù99Ô<7Í@7ÅA4½?0¸=-©@-¨=+ª;*¸B4ÅI?À;2»0)Ì92Í6/Ò5.Õ7,Ù7*Ù7(Ú7$Ü:%Þ<'ß3/Û4.âA9éOCÜH:Ç6%Æ3#Ù@2á>5õHDé13ó4;ú6@ø4@ÿES÷3Añ),í"&î#&û03÷--ï''í%%÷12ì(*ø7:è+1â)1ë3?ÿR^ï=KÿYiúafñV\îOTðMRêEIÞ:;Õ74Ô?9À6,¿?2»C5²>1ª8-¥3)Ÿ,%œ' ˜% §0*ÆFCÂ::¼,,È44×ABô^]Ò>:ÒC;ÐA9Ë=3Ì9/Ô=4Ú@8Ý@9ÙA>×=;Ü>=ãA?ã?>à;9ã?=ëIDàA;Û=4Ø5,Û2+å2-ð31÷12ú/2ó04ô02ö01õ/0õ/.ð0+é4+à8-Ø?1À4%¸9*´;0Ð[Rízwÿ’’û‡ˆøƒ‹ü~‰ÿr‚ÿcyÿZtÿTqÿMmÿFgü=_ø:^ôBbåQg§?Fn<1OK2KcA[z?h‡Lr“Zu˜^tš_wŸc{£gz£gy¢fy¢fy¡cx byŸb{Ÿa| b}Ÿby¢j{¤j{§h{¨e{©azª^|­^®`…³hеnвs‰¬t†¦w‚žvy“pn‡gVb`COM4@>^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^L6`N:aP<`Q>]P?ZN>YPAXPEXOH[RM_UTcWYeX_iYcl\fm]hlbclemolrtšx¶~†Ï„ŒßŠŽç‹‡ÞŠÙ¬‰É³­½y’Í{ßyê†vÿnrÿbgùU\öLUöFPöBMó>Gð;Dæ5;á7:Û97Ò=7ËA6ÄB4»B1·?.©;,­=/¯>0»G:ËRGÇH?¹6.º1)È91Í81Ó;0Ú<0Û;-Ù6%Ü6&à9'á40Û2-à=4ëOCãK=Ñ;,Ð8*àB6Þ7.ð>:é/0ò16÷4<ü8BÿNZÿKWý>Cò38â$&í/1ê,,ð22ç+*é0.ò::Ñæ37Ü-2ç9BïENÿYcôLYÔ?AÚADßCFá>CÞ9=Ü89Ø88Ó:5É83Â91½:2ÀA:ÍNHÖVSÐNNÆAB¯82µ:5ÏKGØNLãQRïYZêRQñYXÉ51Î>6ÑC9Ð@7Ó?5ÚA9àC<àA;íCñ:?é58í=?øLJà93Ú70Ø4+Ü3,ã5.ì30ò21ô01ô04ô02ö01ö.0õ/.ñ0+ê3+à8-Ù@2Â6'µ6'²9.ÉWMî}yÿ“’û‰‰þ€‹ý{‡üoücwÿXqÿNmÿFhÿ?cþ8\ù=`íIdÙYhˆ25d<0SQ8TgG`}Ej‰Ps’Yt•\u˜^wby¡ey¢fw dv awŸavž`xŸ`zž`{Ÿa| by¢hz£g|¦fz§bz¨_z¨]|«]~­_†²eеmŒ³rŠ­s†¦u€œstŽii_RaZDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;_K2_M5aO9_P;\O>ZN@XPEXQKYQO^X\g`hnfsshysg{sg}tfnnzor…rw•v|¬y‚Ã~†×ƒŠåˆ‹ì’뛌ߞƒÆžt¢¡kƒ®mq¾vjÈ{iþllÿklÿfiÿ]`üQWöEMð;Bí5=è59ã68Ý98Õ>7ÎA7ÅC5¼C0¶A-¬8+´@3¯;.°;1ÇRHÓ]SÈNCº;2¾90Á7,Ì9/Ö>1Ý=1Ú6*Ü4'á7(á2-ã60ä=5åE9âF9ÜC3ÝA2á?2Û0&ì62ì0/ð-1ò-4ú7?ÿOYÿZdÿ[_ÿOSá.1ã03ß--÷EEè66Ü,,Û-.ë>@Û25Ù37ÿchÞ=CÊ*2Ê-4¾()Ô;=àAEÚ7:Ù37á8;Ü89Î..Ì43Í<9ÓHEÝSSì`c÷hnõdkî[e¿B<ÆE@å^[÷igÿopÿjjåKK×=;É4.Ñ>7ÕE<ÖC;Ó?5Ö<4Ø93Ø7/ö0=ò,9ó+6õ-8ò*5î+3õ8<þJKà3/Û4.Ø4+Ü4+â5.ê40ï4/ð3/ö/4ö/2÷/1ø-0ö..ñ0+ê3+â7-Û?2Å9*²3$±8-ÃNEî}yÿ’‘üŠŠÿ}‹ÿw…ùl|öatùUmÿHgÿ>bÿ8_þ4\õ@aâMcÂWap/+\A0XX>]lMbIl‰St’\u–_v™_xžcy¡ex buŸ`uŸ`u_vž_wž_zž`{Ÿa| by£d{¥f|¦dz¨`y§^y¨Z{ªZ}¬\€¬_…¯g‡®m‡ªp…¥sƒ t{•nrŠffvi[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<`L1aM2`N6^O:[N>YOE[RMZTT_ZahbprmzuŒ{t“yr“zp“yo”ov’pyšt}¨w€·zƒÈ~…Õƒ‰á‹‹å”ã—ŠÒ™„¼¡ƒ§ª„“«~yŸl[ŽX>ÈH?ÕPIäVRìVUòRRôJMî=Cè38ì7<ç9;à;9Ø=8ÑA8ÈC4¿B0¹@-³9.ºA6«5+£.$¼J?Øh\×eZÊVI·=2¸6)¾4)Î:0Ù;0Ü5,ß3)ä6+á/+å61ã;2Ü:/Ü?0ãF7ãC3ß9+ß1&ê3-ð31ï-.î*.ô17ÿEJÿS[ÿ_dÿ\aâ9<â9<Õ+.ôJKâ89×//Û55Ì()Ë(+÷YZÛ?BÔ9=Ð7:· %Ã))Û=>åBEÝ49Ù,2Þ17Ú/5Í(,Ò37äKNöaeûhnùcl÷_kû_mý_nÒNIÔOJè]ZêVTçMMãGHÑ32Î31ÙA<àKDãPHßKAØA8×:3×50Õ2+ÿ,;þ+:ü(7ø%4÷'4û/:ÿ=CÿILà1.Ü3,Û4,Ü5,á4-ç4-ì5/ï4/ö/4÷/2ù.1ù-0ø..ò/+ë3+â7-Ù=0É;-³1#°7,¹D;ìyvÿþŠ‹ÿyŠþqõhxó`söTlüCcÿ7^ÿ3_ÿ3\óDcÒM^ JMb6+TE0W[@^kMc~Kk‡Tt‘[w•_x™`{ždz cvž`s›]s›\s›\tœ]v^wž_{Ÿa| by¡bz¤b|§b{¦_x¦[x§Yz©Y{ªZ~ª]ƒ­e…¬i†ªm‰§s‰¥u„s|•mv‡unmfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<^OÏcWÔh[ÔfYÁPB¹?2¹5)Ç7,Ô:0Ù5,ß2+ç6.ã0,ã4/â7/Ü8.à>1åC4â?0Þ4'æ4*é1)ò2/ð..ï-.ò14ô68ü?CðOTúY^éFKõRW×47ëFJÝ8<åBEÚ7:Î.0Ð15ãIKÑ8;Î8:¸#%Ñ<>Ü89ä;>ê=Aç6<â-4Þ)2â19çÿ/>ý)7ÿ-:ÿ9CÿAHûABã1/ß4-Ü5,Ý5,á4-æ3,ì5/ð50÷.4ù.2ú.1ù-0ø..ò/+ë3+ã7-Ø:.Ì>0´2$±7,±<3çtqþŠŠþŠ‹ÿr†ýj}ñbtð]pôRjûBbÿ6`ÿ5aÿ8_ïKfÁN[z;6Y?.LH/TZ@]cIbzJj„TrŽ[v”^yšc{ždxžas›\p˜Yp˜Yq™Zq™Zt›\uœ]y_zž`x¡_y¢^z¥^y¤\x¤Wv¥Uw¦V{§X~ª]‚¬d„«h†¨l‡¥o†¢r€šmx‘gr„lk}ecu]_O?_O?_O?_O?_O?_O?_O?_O?^N>^N>^N>^N>^N>^N>^N>^N>eQ6cR8aP<]P@ZPG\TR_Zab^otrŠyx˜€¨ƒ°~~²yx±wv°xw³t}Âw€Ã}…Æ‚ˆÆ…ŠÂÀ—–¾ ¼¬§»¶¬´¾³¯È¸©Ð¿¥Õ¡ϼ”Dz‡·kS®\F¤G5©=0ÂH=áVQðVTòNOì?Aë=?è<<ä<;ß=:×=5Ï;1Ë8.¿82Á<5¹:3·>5ÀPDÅYMÅ]PÎgXÐdWÁM@º:-Å8.Ò91Ø3-ß2,è50æ40á2-à5-ã<3çC7æC4â:-à3%ê5*è-&ð0+ð.,ò21ò44ç.,è00áEIõY]öW\ÿpuåDJéHNÞ=Cü[aÿouÝ>Cÿ~‚ÿmqêQTÔ>@Å02Ñ<>øEIî9>ð7=ø=Fô6@è-8ö>Jÿ\hÿmwÿitÿdl÷]gú^kÿapÿ]nüWhî_YãOKâJGÕ74Ò0.Ù54Ó/.Ø95ßD?ãJDáJAÙ@8Ó6/Ö5-Ü71â94ð$0ý/<ÿ1=ø*6û/:ÿ>Eÿ>Cì44â3.Þ5.Ý6-Ý5,á3*è3,ï4/ò5/÷.4ù.2ú.1ù-0ø..ô.+í2+ä6-×9-Ï@2µ1$²6,°7/èpoþˆˆÿŠŒÿkƒücxð]pïZnôPiýAdÿ7aÿ8dý=bæPi°QW^2'RG3DH/PV`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`P@eS;aP<_O?^QH[QOZSZeapsq‰xxšz|¥~€±€¹}¼xy¹rs¶no²qwÏv{̓̋Ȗ—䤾²±¹½¸²ÌŲÓÍ­ÙЩÛУÛÑ ÝÑ¡ØÌšÒÆ”Õ¦Š·gŸ_FËzgØte¾G?ØQMøbaìILç>Aä79æ9;ã99Ü75Ù61Û94È95À50ÇB;¹=5¾I?ÄXK·PAËeVÎdVÊYKÃG;Ä:/Í6-Ù6/â5/å3/á/-ß2,â70ä=4à<0Û8)Ý5(å8*å/$ê/(î.)ð0-ï20ë40è51æ40Ó8<åJNõY]ëOS×7?×6>ùX`ÿ~†ÿ~†ÿowÿgoÿipÿfjõ\_ïY[ô^`ÿRYÿCKü8Bü7A÷1>ï+9î/>ñ=IÿS_ÿ`kÿgpÿepþboÿbpÿ`oÿ[lìTOßFA×85×31Ù10×/.Ú21Ü86áD=ÜB:Ø?7Ö<4×90Û81á83ä84ô5=ó4;õ3;÷4<ø5;ó49ë33ã1/Þ3,Ý6-Þ7.à5+ä3+é2,ñ1,õ2.ø/5ø03ú/2ú.1ù//õ/,î3,å7.à@4Ë9,½7+®/&·<5ÒXWÿ˜šù~ÿhÿe|ö]rîRhòHeÿAeÿ9bÿ5`üJlÕRd‰==K. >>&?I.IO5]]EWlAcxMqˆZx’by–`t•\r–Xq˜Wl•Sm–Rn—So˜Vr™Xt›\uœ]uœ]tœVtWv Xw¡Wv¢Uv¢Uu¡Tt S{¥[{£\zŸ\u—Zn‹Uc}MXrCSj>AW1?U/`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVF_QD\OF_TRcZ_f`nmkƒwv˜wy¢{}°}¸x|»qt·lo¶ln¸oq»suÙ|}Ù‰ˆÔ˜—Ш§Æ¹¶½ÉƵÓÏ©Ý×£âÜžçßžæÞäÜžâÙ ÙÒœÑʖѼ¸€¦~dÄ‹wÉ}m¶VJÓ`Y÷qnîZZêJLä>@é<>ì>@è:;ã56á34Õ=:Ë73Ê?8¹6.·>3¼L@³I;Å^OÛp`ÒaSÄH<½5)Ä0&Ö5-Ý4-Ü/)â43å95å<7à<3Ü8.Ù5)Ý5(ã5*í6.ï4-î1+ë0+ç0,ã2,á4.Þ5.Ò9;×>AäIMóW[ü\dü\dþ]eÿ`kôR]ïMXñQ[ÿ_gÿjqÿflô[`ëRU÷07ó+5ô+5ù-9ó&5è/ç'6í7DüP\ÿ[dÿclÿemÿepÿdoý[hõP^åFBÞ<9Û64ß63á53Þ20Û2/Û62à>9Û>7Ö<2×:1Ú91ß82å95è96é9;ê7:ë7:î79î79ì57å31Þ3,Û4,Û7-Þ7.á6,å2+ì1*ó0,ø1.÷05÷03ú/2ù.1ù//õ/,î3,ç6.ß=2Ò>2Â8-µ2*·82ØZ[ÿ“õw{ÿa{ÿ^v÷WqöOkøFfý=bÿ:cú=cëLhºJVw<8F5#7=#9C(DH/UP`rJnƒXw_v“]t“Zp”Vn•Tk’Ok”Pl•Qm–Ro˜Vr™Zsš[sš[tœVuWuŸWuŸUtžTržQqPq›Qn˜Pl”NhŒLbFXu?Nh8F]/@W+@W-@W-AX.YL<[N>^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^QAbUM^QK[QPcYakesqm„vu•y{¤y{®y~¶w}»ns·ei°bf°jn¸rvÀ}zᇃᖔߩ§Ù¼¸ÏÍÊÃÝØ¸çá­êå¡ïéŸðêžíæžéá¢âÛ¤×Ï ËĘ´°“¦œ˜„k§„p¥p`œRG»]UÞmi÷usð^_çHLæ@Dí@Dí=@ë7:ç36Ü>;Ô;6ÔA:Â70·7.µ?3­=/µG8Új\Þj[×\MÊB6Å2(Ñ4+Ú6-Ú1*Þ44éA>ìGCà=6Õ2)Õ1'Ú2'Þ0%è3*é1)ç.)æ/)ã2,â7/á=4âA7Ã-,Ê43ÜCEðVXú^bùYaóS]òP[èFQêHSðNYü\fÿmvÿmtôY_ÜAGó*2õ,4ý1<ÿ1>÷*9ï&6ö6EÿJX÷ISõOY÷W_ü_fÿdkÿai÷Q[éBJÞ95Þ63ã75é<8ë<9ç85â51Ý60Ý:3Ù;2Ö90×90Û81á83ç:6ì:8à;9â:9ã99ç98è88å84à40Ú3+Ú6,Ú8-Ü8,á6,å3)ì/)õ/,ú0.ô15õ13ø02ù.1÷//ó0,î3,ç6.Ý9/ÛD9Æ9/»4.´0,â`bÿƒˆônuÿ_zþWsúPmþLlýDfø8_ö9_ðGf×ReDJi=4K@,7@%8@(ED/LE2N^9YkEg|Qr‰[tZqUmRkMi‘Kh‘Ki’Lk”Pm–To–Up—Xq—ZuWuWtœUrœTpšRm—Mk•Kj”LdGaˆE\~AUt;Li3E_/AX*>U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB]P@YNR[PVbXcjcsqm†vu•xz£z|­w|´sy·mr¶bi±]c­ag±lr¾v|È‹‡æ”‘褡淴áÇÄ×ÕÒËáÞ¿èå²ëç¨ïê¦îé¥éã¥ãܨÛÒ§Ëß¾µ–Ÿ§˜š…‰v—‚q—se™cW³i`Ïrmû‹‰õutë[[çKNéCGî?Dî;?í8=ß:8Ý;8ßD?ÓC;Ã:0¹;/¯7)¦2#¾J;ÚbRék]ÛSGÉ9.Í3)Ö5+Ø4+Ù33ñMLý[XíKFÙ80Ö3*Û4+Þ2(à-&á,%á,%ß,'Ý0)Ú6-Ø<0×?2À0(Ä4,Î:6ÙCBßFHàEKäGPìLVñQ]öVbøXdû[gÿgpÿmuôY_Ø=Cñ.2ò-4ô-4ò*4í%2ì(6ûô@?ð<;ç85à72Ü92Ø:1×90Ù80Ü71ã73ê86ì87Þ<9ß;9â:7ä;8æ:8ä84Þ5.Ø4+Ù7,Ú8-Ü8,á7*å3)ì/)ô/)ù/+ó25ô23õ12÷/1÷//ó0,î3,ç6.Ü8.ßG<É90¾3.´-*îfjÿy€ójrÿ`{ýTqþKkÿFjÿ=cö3[î<^äPhÄXe…DBbE7WP=DH1@D-JH3JB/IW4Sc?btLmƒUp‹XoŒRkŽNiŽKgIg‘Ih‘Kj“Mk”Pm–To–Wp–YtœVs›Uq™Sn—Qj”Lg‘IeŽHdG`‡D]AWy=Rq8Mi6Lf6Ne7Pe:Lf6Oi9Sm=UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB_RBTLY`Xgnf{tp‰xt•xw¡xz«y{´sy·jqµ`g¯\b¬`f°kq»v|Æ~„Ε”äžžè­­é½¼æËÉßÕÓÔÝÜÊãàÁåâ¹çã¶æß³àØ³ÚÑ´ÐůÀ´¤¯¥™”œ‰ˆ†y‰}qwk›sk§ngºoi扄î~ósróedòVYòLNðCEî>Aå95â:7äB=ÞE?Ì<3Æ=3ÂB5­1%¬1"ÇI;ÛYKÖN@Ì=/Î8*Ò6*Ñ3'Ö34õUUÿkhú]XâE>Ü;3ß;2ã80â4-ä1,â1+Ý0)Ö/'Ì0$Æ/$Â0#Ã9,À4'Á3)Ë:5×CAÛEGÛBGÛ@HàDOìOZóVaòVaú^iÿgoóYaÝDIð88í55ï26ð18ò3;÷9CÿHSÿVaä6?Ý4;Ý7;êAFøKOüIMô;@ê05å61ë95ñ;8ó;9ó;9ð:7é73â70ß;2Ü;1Ù;2Û:2ß82ä73è64ì65á<8ã;8ä;8è:9è;7æ95á6/Û4,Ú8-Û9,Ý9-á7*å3)ë0'ò/)÷0+ð45ñ33ô22ô01ö0/ò1,î3,ç6.Þ7.ÞD:Ê7/¿1-¾21÷jpÿrzøhrû]vúPmÿCfÿ_L;_ZFQP;KI4PI6MB0DR1M[8[kFf|Nm…SmŠPlŒMhHfŽGgHg‘Ii’Lj“Ol•Sn•Vo•Xt™Vq˜Un–Pj’LfIcŒFaŠF_ˆDZ@X|?St;Pn8Pj:Tk=XmB[pEUp=Vq>Wr?RE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEdWG]Ulje|yu}yœzy£wyªvx±sw¶lqµcj²[c¬]e®hp¹w}LjІՙܡ¦à¯²å»¿åÆÇãÍÏÞÔÓØ×ÖÑÙ×ËÙÕÉ×ÑÅÒÉÂÌÂÀŹ»´§®¥˜¡‡Œ†xzuwvqulg~mfŒoib[œa[¾sm×zuï{ü|yÿrpýccöSTîHHñB=ê>:ã<6àA;Ñ:1ÒD:ÝTJÂ>2¸6)¼:,Â=.È?/ÏA3×C5×?1Ñ8*Ð23èLMú_]ñXSßD?Ø;4Û81à70æ92ç92ç92â92Ú9/Ñ9.È9+Ä8)®)¸3"È@2ÓI>ÒE>Ë;:Ì7;Ð9@Ï8AâHTïUaðYbõ^g÷`iêU[ØCIè?:ë?;ñAAúGJÿMRÿQYÿT]ÿV^á4:Ú/5Ú03ç7:ô=Aù:?ø48÷/2é61ï95ð95í41í1/ê20ç40á4.ã<4à=4Þ=3Þ;2à93ä73è43ë33æ:8ç98ê88ì89ì87é75ã4/Ü4+Û7-Û9,Ý9-ß7*ã2(è0&ï0(õ0*î45ð43ó32ó11ô1/ò1,î3,è5.à90Ù<3Ì70Á0-ÑAAÿnuýku÷coïSkóIfÿ;cÿ1`ÿ3bÿRJ7QF4MB0AL.GU4Sc>`rHgMj‡MjŠKh‹GeFfŽGfHgJi’Nk”Rl”Um“Vq–So”Qj‘NgŽKcŒH`‰E_ˆF_†G\‚E[~DWxAVr?Uo?YpB]rG_tKYtAYtAXs@NB2QE5UI9WK;XL\P@^RBaUEbVFbVFaUE_SCaUEfZJj^Nkg‚up|x›{y¡wx¨vw­pt±jo±ah®^f¯_g°em¶pxÁ~…͉ؖܙ¡Ï ¨Öª±Û´¹ßº¿ß¾ÂßÂÄÝÅÆÛÆÃÖÅÁÒÁºÌ¼³Æ»¯Å´¨¾¦˜±—‰¢†‡‰qqstpqogevhe†nj`Y”e_š[T·g`×tnî{vÿ{wÿwsÿhfù[ZÿQKöGBè=6èC=Ø;4ÛG=ê\RÅ;0Ä<0½7+¾6(Ç>.ÑD3ÔC2ÔA1×A0Ò8:Ø>@ÜDCÛC@Ö=8Ó91Ø7/Þ7/å:3æ93å:3â;3Û>5ÕA5ÑE6ÌG8¬.¼;%ÌK8ÑL=Æ=3»0+¿10Ë8>ÕBJáKVëU`ðZeð]eìYaßLRÐ?DÑ4+Ö8/ß<7ê@@ñDFôEJñBIî?Fâ5;ß26ã36ï8<õ79ù14þ-2ÿ.4ë40ð95ò64ì0.è,*è/,è2.á2-ä=5à=4ß>4ß<3ã:5ç85ì65í55ì57ì57í57ï56ï56ì42å2.Þ1*Þ7.Ü:-Ý:+Þ8*á3(ç1&í1(ò1*í55î53ñ42ó11ó1/ò1,î3,è5.ã;2Ò4+Ò;4Æ20çUVÿpxùcnñ[gãKbóEfÿ7bÿ+]ÿ1bÿ@hÞKe­RYd8/ZI7SN:UN;[P>VI8M@0MA1=H*CN.K[6Xj@ayGf‚HhˆIgŠFeŠDc‹BcEeŽHgLh‘Oi‘Rj’Tn“Pl‘NhLd‹Jb‰H_ˆF_‡H`‡H_…H_‚H]~I]yH]wH`wKcxOdyP[vA[vAZu@MA1PD4SG7VJ:WK;YM=[O?]QAcWGdXHdXHbVFaUEcWGj^NpdTvq‘yu˜xvtsŸrr¤su®lp¯bg«Za©^f¯em¸lt½u}ƈДڕœâš¤ÈŸ©Í¦°Ô¬´Ù°µÛ±µÚ²´ÚµµÛ³±Ö²®Ñ®¦Ë«¡ÄªžÂ¦˜»™‹®‹{Ÿ|y€dbgidhbY\g[[xeauXRe]ˆOHŸVO»aY×jcóvpÿ}zÿwuÿljÿZUÿPJñD>ôMGàB9ßF>êWOº,"¼2'½5'Ç=0ÑE6Ë>-Á2!É8%ÙF4ÞDFÒ9;Ë32Ë62Ó;6×<7Û<6á<6æ;4å82à5.Ø4+Ï5+Ê8+Ä<.Â>/ÑU;ÅI/»='½;+Ã=2Ä;5Â65Â37ÜKRÞLVâOYåS]éWaæU\ÝLSÒCGÉ5)Ð8-Õ81Ú64Ý55ß58á4:ß28å8<å6;ì9=ö8É53øceÿpyô\hêR_ÞHaõGhÿ:eÿ*]ÿ/aÿ@hÓE]–AFQ-!UJ8PN9OH5\O>YH8L<-NB2:D)?J*GU2Rd:]sBcEf†GeˆDcˆBa‰@a‹CcŒFeŽJfMgPhRlPkOfLcŠIaˆG_‡H_‡H`†I\‚G]€H]~I`|Ka{Ld{Of{Rg|S]xC^yD_zEAC8CE:IF=OH@RGAWI@]M>`O=aQ:aS9`T>_VGaZTfaeljwro€wožzt¢~wªzu«ro¨hf¥a`¢^^¦ba­hg·qoÃ|xÏ…€Ú‰ã—í–ó¢žÙ£ŸÚ¥¡Ü¦¢Ý§¡Ý¦¡Û¥ Ú¦žÙ¥Ö£œÒ¢™Ð¡˜Íž–É—ÁŒ‚´ƒy«mrvghlc_`e[ZlYUtUP€ULVK–RG¨ZN²ZP½\SÔmdç|tò…~üˆðxyõyyæabÜPQ×EEñYVÎ61È1(Ç5(Ä7&Â6%Ã8%Æ9'Ì:+Ð<.Õ?1Ô8+Ö=/Ø?1Ó;-Í5'Í4&Ø:.ã?5à90á90Þ7.×7+Ï7)È;)Ä@+ÁC,Ä;3È?7ÍD<ÏF>ÌC;Å<4»2*µ,$Ä>5ÍG>×QHÞXOá[RßYPÖPGËE<Ìÿ)<ö*6í.6ç48å;;Ü94Ü:5Ý<4à;5ã:5æ93é73é62ì25ì44ë54è64ä71ß7.Ú6,Ø6)Û9*Û:(Û:&Ü9&ß8%á8%â7#â7#í41ï4/ñ4.ó3.ó4,ï5)ê6(å8*à:.Ø7/×96Ý>BÿlyÿasþRlöGdÿIjû5Yÿ5]ÿ;eú=cãPj©LVT)":1 9<)EF4RL>PH;BC39E15K4FGHJ#MQ,U\:\jGcuOf}QeNc…Hb‡BaŠ>cŒ@eDjIl‘Nm‘Qj’IiFgŒFf‹Ff‹Hf‰Ic…Ic‚GdƒJdIc~Gc~Gd€FfFe~Dc|BX}8[€;^ƒ>[K>^M;`O;`Q:^S?^WGa\Vhcinlyrqƒtnšvpžtp¢pm¢gfŸaaŸ]^Ÿ\\¤ed°kjºtrÅ}{φ‚ÙŽˆà”Žè˜’ì›—Òœ˜Ó™Öžš×™Ö—Õœ–Ò•Ñž–Ñœ”Íœ“Ê›’Ç™‘Ä“‰»ˆ®€w¦tmtkdkf]`e[YiZSoWMzVJŠVI›UK°\RºYRÁXRÓf_Þqjãvoêwý‡…ÿˆ‡÷uuðfdäTSíYUÇ2+Â/%Æ7)Ã7&À7%Á8%Ä9&É:*Ï;-Ó=/Ö8,Õ9,Ó:,Ò:,Ñ9+Ñ9+Ô8+Ø8,ß;1à90Ü8.Ø8,Ð8*Ç:(¿;&¼;%¿4-Á80Æ=5É@8ÊA9È?7Å<4Â91¾5-Ç>6ÑH@ØOGÚQI×NFÌC;À7/Ê8Ñ9"Û8)å4,ï./ö*3û(7ÿ(:ÿ+Bÿ*Bÿ)Aÿ&Aÿ$@ÿ >ÿ=ÿ<ÿ8ÿ9ÿ$;ÿ);÷-9ï29ê7;å;;Ü94Ü:5Ý;6à;5ã:5æ93é73é62ì25í36ë54è64ä71ß7.Ü5,Ø6)Û9*Û:(Û:&Ü9&Þ9%á8%â7#â7#é4-ê3-ì4,ì4*ì4*ë5(æ6)á7*ÞcŒ@eDiŽHkMlPl’IjGhGf‹Ff‹Hf‰Id†JdƒHe„KdIc€HdHeGeGfEd}C\<_„?b‡B69.:<1??7E@:KB=OE/Ô>/Î6(Ë/"Ú:.Û7-Ù7,Ö8,Ñ9+É:)Â9&¼8#¾4*À6,Â8.Ä:0Ç=3Ê@6ËA7ÌB8Å;1Ê@6ÏE;ÐF<ÒH>ÑG=Ê@6Â8.Í6!Ô7&ß7,é3/ñ03ø,5ý*9ÿ*<ü'=ü'=û%=ù#;û!:ü8ü7þ7ÿ6ÿ6ÿ#8ý*;ù1<ñ6=é9;ã;:Ü86Ü:5Þ;6à;5ã:5ç85é73é62ï26î47í55ê65å61ß6/Ü5,×5(Ù9)Ù9)Ú9'Û8%Ý8%Þ7$à7$à7$â4+â4)å4*å5(ã6(â7&Þ7'Û8)Ý=1Ï2+×98ÿltÿ]nþPið=[ÿJlÿ5\ÿ=eü4[ô<`êTq«?Oa#(H1+79+-8'18&:;)B=*A<(@>)@B*?GY`4s~T€Œfw‡bi~Ub|MaI`ƒC`…?aŠ>cŒ@hŽEjJkMlPn”Kk‘HhGgŒGgŒIh‹KfˆKf…Je„Ke‚Jc€HeGf‚Hf‚GeFcDb‡BeŠEhH06*58-;<4A>9G@:KB;RE.Ð?.Ë8(Ç/!Ò6)Ó5)Ô4(Ò6)Ñ9+Í<+È=*Ä;(Æ9/Æ9/Æ9/Æ9/Ç:0È;1É<2Ê=3ÒE;ÒE;ÐB8Ë=3Ë=3ÏA7ÏA7Ë=3Ñ4#Ø6)â5.ë31ò/5÷+6û(7ü)<ù&9÷&;÷&;ø'<û&<ý%<ÿ$:ÿ#:ÿ!7ÿ"7ü%7ù-9÷5>ñ:?ç9:à87Ü86Ü:5Þ;6à;5å95ç85ê65ë54ñ27ð37î66ê65æ72á6/Ü5,×5(Ø8*Ø8(Ø9&Ù8&Ú7$Ü7$Ý6#Ý6#Ù6'Ú7(Û8'Ü9(Ü9(Û:(×:'Ö:+Õ;/Î3.éIKÿo{ÿVjøDaö=_ÿCiÿ/[ÿ7`û=cëLlÆOe€0=G >3--3'+8'2=,=B.B@+C;$G="MA'R_*q}MŸp—¨|ƒ˜mj„W_{J]~E_ƒCa†@b‹?fCk‘Hl‘Lm‘Qm‘So•Ll’IiŽHhHhJiŒLhŠMiˆMf…LdƒJdGe‚Hf„Hh„If‚EeDf‹FiŽIl‘L-3'17-7:3<;6B=9G?UOCZUQa_dhgukkƒllˆjg’baXV‡PP†QQXYš`cªfj´orÁuxÉ|Ѓ„Ö†‡×‰ˆØŠ‰×Œ‰ØŒŒÌ‹‹ËŠ‰Í‰‡Ð‰…ш„ÑŠƒÓ‰‚ÐŒ„Ï‹„È…Á†º†²‡¥}x–vpŠ“ScƒQ\qUT`^RVcOTbH_]DvUB’LB¼RRÖPWàPYé\dèejâljâwqâvláphõ~vÿ‚{ÿ‡~ôkaÉ?2À8(À;(¿='¾='¿='Â;'Å:'Ç8(Ê8)Ü8/Ú7.Ô8,Ï9+Ê;+È;*Ç:)É7(Ï9+Ñ7+Ô8,Ó7+Ï7*Ì8*Ë<,Ë>-É=0Ê<0Ê<0É;/È:.Æ8,Å7+Å5*Ð@5Ð@5Í=2Ë8.Ë8.Î;1Í:0É6,Ò.$Ù0)ä2.î23ô/8ù-9û+;ü+>ü-?û.?ú0@ü/@þ/Aÿ.?ÿ-?ÿ->ÿ)9ý)8ø*7õ0:ó6=ì9=ã77Ú53Ü86Ü:5Þ;6â:7å95ç85ê65ë54ò38ñ48ï56í76æ74á6/Ú6,×5*Ö9*Ö9*Ö9(Ø9&Ø9&Ù8&Ú7$Ú7$Ô9%Õ:&Ô<'Õ=(Ô=(Ô=(Ó>*Ó=.Ð8-Ù;8ÿ^eÿaqÿPi÷;\ÿAiû6aÿ/]ÿ.WøIjÛYq•>NX'-?+,730*1)-9-5@/:B+<<"B;VG(iV6v‡P£lª¾‹¨¾Ž¥wo‹[aK^F`…BcˆBeŽBj“Go•Lp•Po“So“Uo•Ll‘KiŽHgŒGiŒJiŒLi‹NhŠNf…Je„IdƒHfƒIg…Ih†Hg…Gf„FgIi‘Kl”N*2%.4*470894<;7B=:HA;KD(À>(Á=(Ä;(È;)Ì9)Î8*Ú3+Ù6-Ö:.Î:,Ç:)Â9'Ä;)É=,Í>.Ö@2ÙA4×=1Ï7*Ê4&Ê8)Ë<,È:,È:,É;-Ê;-Ê;-È9+È6)Ç5(Ê6*Ï;/Ò>2Õ>3Ö?4Õ>3Î7,Å.#Õ)%Ü-*ç02ñ29ø0;ü/>þ/?ý0Aú0@÷1@ö2@ö0=÷/:ù-9ú,8ü*7ý/<ù/;õ0:ñ2:í6;æ68ß55Ù42Ü86Ý:5ß:6â:7æ87é77ê67ë54õ49ó49ð69í76æ74ß6/Ú6-Ö6*Õ7+Ô8)Ô8)Ô9'Õ8'Õ8%×8%×8%Ï:$Î<%Î>&Í?'ÍA(ÍA*Î@,Ï=.Ð71éIKÿgrÿOdÿHfû7]ÿAmý/_ÿ1^ø1XåOj¹Wfh39@*,?994443524925>-2<#29ECl`8Ž}R™±u©Á‡µÎ—­È•’®}v”be†Q_ƒF`…Bc‰@gDo•Jr˜Or—Rq•Up”Vo•Ll‘KhGf‹Fh‹IiŒLi‹Ni‹Og†Kf…Je„If…IhˆIjˆJi‡Gg…EhJk“Mn–P(0#*2'/4-350664<87@<9C>8IEû3>ú0>ú0@ø/?ò.<ï/<í/9í07í.5ï,2ò+2ò)/õ1;õ3<ò5;ì59ç47á55Þ65Û75Ü86Ý97ß:6ã:7æ87é77ê67ë46ö5:ô5:ñ7:î87æ74à72Ù6-Ô6+Ñ8*Ð8*Ð9(Ð9(Ð9(Ñ8&Ñ8&Ó8&È:"Ç;"È>$Ç?%ÇA(Ç@*Ê>-Î;1Õ:6üU\ÿ_oÿGcÿ>bÿ8cÿ6gÿ0cÿ4\òCbÈMa…BIL44:97<<>948>58<7379+3="8DS[,ƒPª£o«Èˆ¯ËŽ¯Ì’¦Ã‘¯}{™ggˆQ^‚E^ƒ@c‰@iDo•Js™Ps˜Sq•Uo“Un“MkJgŒGeŠEgŠHh‹Ki‹Ni‹NfˆLd†Id†Ig‡Hi‰JjŠIi‰FhˆEi“Kl–No™Q&.!(0%-2+130333756:97>;6GD=DD*½<'»8$¾5#ÑB2ãOAäN@ØB4Í7)Ë7)Ð>/Ê;+É:*Ç8(È6'È6'Ê6(Î8*Ð8+Ó;.Õ;/Õ9-Ó5*Õ7,Ü;1Ý<2Ú9/ë7:ñ8=÷:Aü8Bü4A÷.>ò,;ï,:í/;é19è38é58í57ñ48ô36ö45î49ï6;í9<é69â45Ý33Ý86ß;9Ü86Þ97á98å99æ89é69ê67ë46ö5:ô5:ñ7:î79ç85ß82Ø7/Ó7+Ð8+Í9+Í:*Ì;*Í:*Í:*Í:(Ï9(Ä: Â: Ã=$Á?%Â@(Ä@+É=.Í81ßhŽCo•Jr˜Or—Rp”Tn’To“MkIgŠFeˆFf‰Gh‹Ki‹Ni‹NfˆKe‡Jd‡GeˆHgŠHh‹Gh‹GfŠDj”Lm—OpšR(0!'/"(-&+-*.0/333775:94==5?@8DE?JLKQQYVWiZ\s]^|YW†[Y‹^]–ee¥nn¸wxÊ€Ú„„䊌ðŠŒðŠŠì†‡ä‚‚Ü€Ô‚€Óƒ‚Ò€„ĄǃƒÉ„„ΆƒÒˆƒÕ‹ƒÖŒƒÒŠ€ÇŠ€½‰±…~ €xwpxkeec^XpZMm[Mi\Kf^Kd_IcaHfbGl`FlR;„UA£^O¿aYÑYXßPTñQ[ÿXbôkcæYRÔD<Î70Ñ7/×;/Ø/Å@/Á@-¾=*¼9'Â9)¾0"êVJáJ?Å.#Ñ=1Î2Ü<0Ù7,Û7-â>4éE;øAFó8?ð3:ö4?ö2>ñ-;ï,:í2=ì7@æ5;ã68å78é99ð:9ñ86ò65ï==î<<ê:<æ89á77ß76Ü75Ü75Þ97á98ã99æ::é9;ì9<í9<ï8<÷6;ô5:ñ7:í9:è:9à;5×90Ï7,Ë7+È9)Ç:)Ç:)Ç:)Ç:)È;*È;)Á9!Ä>%½;#µ5»:$ÈE3Í@6Ê0.ÿ^eÿVgÿHcÿ;\ú0Xø/[ý5cÿc‡?iDn”Im•Ll”Nk’Qj‘RjŽHfŠDc†Bc†Df‰Gh‹Kg‰LdˆJg‹MhŒNg‹Kf‹HeŠEf‹EjIm“Jp›SrUtŸW*0")/#).'+-(-/.222553782;<4>@5BC;HJGOPTSUaXYm[[s\Z‚^]‰da–kj¦us¼}Ї‡á‹‹íŒòŒ‹ñ‰‰í…„ ڀ~Ò€σ€Ï…†Æ†‡È‡ˆË‰ˆÎ‹‡ÑŒ†Ð…ÎŽ„ÉŠ€½‰³†{£‚x‘{s€tknkd^e\SbaLb`Ke^Kh]Ii\Ij^Hk_Gm_EraG{]CŽ[Fª[LÆWPàQS÷PXÿS`ìWQãKFÛ>9×50Ú5/Ý90Ü8,Ø8*Ó8&Ñ8&Ñ8&Ô8)×7)Ü5,à3,ã2,Ë1'Ë4)È9+Æ=-ÄA/Á@-¾=*¾9(Â9)Ë<.åQEÜH<È4(Ì:-È:,Á5&Ê=+Ê=+Ê;*Ì;*Ë:)Î8)Ï7)Ï6(Ó7*Ö8,Ù7,×3)Õ1'Ø1(ß7.å=4ûBHò7>í07ï/:ò0;î.;ì1<ê6?ã6<Ü36×32ß:8îEB÷JFøEAõ?<è:9æ:8å97â96á85à85á98á98à87â88å99ç9:é9;ì9<í8=ì7<ô5:ò59î68ê88æ:8Ý:5Ó91Ë7-Æ8*Ã:*Â:*À;*À;*Á<+Á<+Á<+½9"Á?)¹;$²5¸;'À>];2@>/3A05?4E=:X;?T-0X51ZI7bjEu[бpšÄ|žÈ|š¹}š¹€™·ƒ©yr`YuESq?\{B_>b†>iCm“Fl”Kk“Mh‘MhQhŒFeˆDc†Bc†DgŠHiŒLhŒNg‹MiOiMiŽKgŒGgŒGfŽGj’Im•LnœQoRr U-1"-1#,/&,.).0-11/34/45-9;0<>1@B5EH?KMLQRWUTbXWi\Yx^]fcŽpm¢zx¹…‚ÏŠáíŽñŽŒïŠˆé‡ƒá~Õ|Í}È}Ç…‡ÄˆˆÆŠŠÊŒŠËŒŠËŒ‡ÇŒ„À‹‚¹‰€¯†|¡€v‘{p€ujpod`i_Ue\MXeK]bKa_Jh[HmZIp[Hq\Go]EtcItZ?‚V= WDÅYMäTSûNTÿIUß@<Þ<9Ý84ß61á6/á6.Þ6+Ú7(Ö6&Ó8&Ó8&Õ8'Ø6)Ý5,á3,ä1,Ç5(Å6(Â9)Á<+Á@-Á@-À=+À8(Ã5'ÜJ=ÜE:ÕA5Îë7@ê=CÜ7;áAAìNK÷ZUüZUùRLïB>è62à72à74à74ß74à85á96ã;8ä::á77ä88æ89è8;é9<ë8<ì7<ì7<ò38î47ì57ç77â:7Ù:4Ï8/Ç7,Â8+¿:+½;+»<+»<+»<+»<+»<+º9$¾@*³9$°7$¶;+´2%Ã40îOTÿZiÿH`ù8Uó6Vó>]ñFfçHfÞEat?9e?6QA2@C04?.29)>5,O61K*#W:,j\Bˆ_«t”½{“ÃyÃv•²|œ¸…™µ…€šm\uKHa7Nh9[xB_}?c„?hŒBl’Ej“Gh’JgLeMe‰Cd‡Cc†BeˆFh‹IjŽNkOjŽNkOkOiMhJgHi‘Hl•Ip™Ms¡Vt¢Wv¤Y25$13&02'01+12-23.34.46+9;-;>-?B1DF9IJBNNNRQWTR]XVd\Zoda~nl”zw®„ÄŒ‰Ø‘Žå”‘ì“펋扅ڂÎ{Å|¿‚}¿ƒƒ¿……Á‰ˆÂŠÃ‹ˆ¿‹„¸‡®…}¦…{€vŽzm~sfmoa`k^Vi[NgZJVdJZbJa_JjZJpYIsYJtZIs]FqY?tU9†T;§ZFÌ\PæRNóEGù:AØ3/Ü41á51ä50ã5.â4+à6)Û8)Ö7$Ó8$Ñ8&Ô9'Ø6)Ý5*à3,ã2,Â8+¿7)»7(¼:*¿=-Â>/Ã;-Ä8+Æ3)ëTKÔ;3Ì8.ÑA6¾4'À<-½>-Ã7&Ä8'Æ9(Ç:)Ê8)Ë7)Ì6(Í3'Ó5*Ô3)Ö2)Û4,ã:3é>7ì?9ë>8è47ì59ï6;î5;ê2:æ39ä7=á<@óUVûc`ÿnjÿidóVQäA<ß61à3/Þ71Þ71Þ71ß82á85â96å97æ::å78æ89è8;é9<ë8<ë8<ë8<ë8<ñ48î68ê67æ87à;7Ö<4Ì9/Å8.½9,º;,¶;+µ<+´<+´<+³;*³;*³:'·@,­8&¬9'±;-«+"Ã54ÿ_gÿSdýE]ó;Uí1B2SE*okHŠ“f•¬t´t‹¹q‹½t¡¹‰¡¸Š§}l‚\K_:BV1Lc7Yq?_{@dƒ@i‹Ak‘Di’Fg‘IdJbLc†Bc†Bd‡CgŠHjMkOm‘Qn’Rj‘Pj‘Nj’Li‘Jg‘Gi“Gm—KqœMu¥Yv¦Zx¨\78(78*66,56056156167/68+;>-=@+@C.DG4IK=NNFQPNSQTVUSYY[a_lkius›€}´ˆ…ÈŒ‰Ö•’ã”äÞ‹‡Ó„Æ}º|µ€{±~¸‚º‡„»‰…¸Š„²†¨z›€xs‡znzrfjm_\j[Tk[NjZKjYI^bK_aKe^Kk[KpZLtZKw\Kz[G{WAƒS=—U?³XFÍSFÝF?å76ê01Û2-ß3/â5/å4.ã2*à2'ß5(Ü9(Ô7$Ð9$Ï:$Ñ:'Ô8)Ù7*Ý5,à3,½>-¹:)µ6%·8'½;+Â=.Ç;.É6,Ñ80ö\T×=5Ë4+ÏA5¸3$·:(¹@-Â9)Ã:*Æ:+È:,Ê;-Ì:-Ï8-Ñ7-Ñ3*Ò1)Ö1+Þ71ç;7ë>:è;7æ74é77ï;<ðê7=ê7=ð69î79ê7:ä::ß=:Ö=7Ë;2Ã;/¸9*´;*±<*¯<)­=)¬<(¬<(¬<(«:(¬=*¤9'¥:*©9-«0)ËAAÿgr÷L^÷E[ðBYèF[ÛN^ÈT]´VW§SQSU@LN9JG4JE1FD-AA'>C#@G%MU.^g,?=.==1==5=<7;<6;=2;=/?B-@D+CG,GI1KM8NOASPITQLYXDZ[M_^Zgepqo‡{y¡ƒ€·‡…ƌӋՊъ…ǃ€¹~z­zw¤{u¡zw°|y°€|®~©‚~£y•|t‰zrvkqrffm`Zl[QlZNl[KmZKmZIg^Mi]Mi]Mj]Mn]Ms^My^M€[I“`OšWG§N@¹I=Æ@5Ð6.Ù0)á0*á51â5/ã4/â4-à2)ß3'Ü6&Ú;(Ð9$Í;$Ì<$Í<'Ñ:)Õ9*Ù7,Ü5,ºA.´;(¯6#°5#¹:)Â=.É;/Í6-Û>7ùZTåHAÐ90Ì@3¸6&«4 ±>)¿7'¿7'À7'Ã7(Å7)É7*Î7,Ð8-Ù<3Û:2Þ93å<7ê>:ê=9ç85ã41è96ë<9ê::è8:ì>@øORÿccÿqpùheàUPÈ=8¿2+È5.Ö;7à<:â:9à<3á:2á:4á83ã73ä65å55æ68é69é69ê7;ë8<ë8>è7=è7=ç6<ð8:ì8;è8:ã;:Ý>:Ó>7É<2À+>467>O#Jh4gTt•\„›c‹™dŽ›f‘¢l•¬t•²x„”pn}\Q`C=J09F,BO3O_;Xi=czDgBkŠDk‘Dh’Fe‘F`G`Gf†Ci‰FjKlMlOkOm‘Ql“Rm”Qm”Qm–Pl–Lk—Jm™JržOu¢Qy¬]y¬]x«\CB0DB3DB6EB9CC;CC;BB8AD3CG0EH-GJ-JM0OO7RQ?TREURI[\:\\@\]Kaa_ihvrq{z¦~µ†‚¿ˆƒÃˆ„Á„¸{­ysŸtp•qmŽol£rn¡tq wršwrtoƒskxrilmb^l_Vj\OlZLn[Lo\Kq\Kq\KrZNq[Nn\Nl_Ol`PqaQy_N†[KŸ_S¦OE°A8½:2È5-Ï1(Ø1(Ý5*â70á6/á4-á3*à4(ß5(Ù6%Ô9#Í;"Ê<$È>$Ê>'Í<'Ò;*Õ9,Ø8,·D/±<(¬5!­4!¸9(Ä<.Ì9/Ï5-Ú83ñNIòSMÙB9ÌB5½@.¥2¬?(À;,Á9+À8*À6)Å7+É9.Ï;1Ô;3áD=ãA<ä?;ç>;é=;é;:è88ç77æ93æ95å84é;:ôJJÿ\[ÿdc÷caË=9¿82»4.Ã81ÓB=ÞE@ß=;Ù42â;3â;3â92ä84å84æ66é77é77ê69ë6;ë6;ë8<ë8>è7=è7=ç6<í68ê69æ89à;9Û>9Ñ>6Æ<1¾<.²8)®;)ª;(¦;'¤;&¡;%¡:' 9&ž?-”7%š=,—:)˜3'ÂQKíkmï\fïN^ìI\àHWÎJU·SS¡]RŒfQ‚jP=Sg{Fh‚Cl‹Ek‘Di“Gc‘Fa‘G^Gi‰FlŒImNn‘OlOjŽNkOk’Qp—Tp™SpšRo›Po›NqNv£Rw¦Uz­^z­^y¬]GD3HE6HF9HE±61Á3/Î5/Ö5+Ù7*Û8)ß6/ß4-à3,à4*â6*Þ7'Ø7%Ï7 Ì<"È>"Æ>$Ç?'Ê>'Ï<*Ó:,Õ9,µE/­='¨3¬3 ·8'Å;.Ì9/Ò5.Ò/*ä?;ûYTàI@ÎD7ÆI7¥5®D,ËF7ÉD5ÉA3É?2Í?3ÒB7ÚF<àG?ßB;à>9à;7à74â64ä65ç77é99é>7ç:4ä73è<:ñIHñMLØ=;¹(%¸-(¼5/Å@9ÌC=ÐA;Ö=8Ý>;ã?>á:2á:2â92ä84æ95è96ë99í9:ë7:ë6;ì7<ë8<ë8>è7=ç6<æ7<ì59è58å78ß:8Ù<7Ï<4Ä<0º:-°8(«:(¨;'¤;&¡:'Ÿ:&Ÿ:&ž9%š?,4"—>,“:*“1&Ì\X÷y|æT_ðTbèI[ØDRÃGO®SPšbS†lS{rSC[C?H3B7%O6"_K0prJ€£iˆÇ€yÃt{¾qu¢]oƒHy}J‡†Xy|O\d5:D)3=$4>&WN?XO@YPAZQB\SD]TE]TEcZKbYJbXNcXRg\Zmacsfmwjs|n{~p}s€s€~p}wjtobli\fcb]a`[a^W_\U_[R^ZOa[ObZMe\Kg\Ji\Ii]Gk\El]Fm]Dm]D_gOkiTqZH{M@•RI©WL®TI³WH¦N:¢G2¢?*ª;(¾:.Ò72à23å,1Þ7.Þ7.Þ7.Ü8.Ü8.Û7-Ø6+Ø6+×7+Õ7+Õ7+Õ7+Ô8+Ô8+Ô8+Ô8+¸=.·=.°8(§2!ª2!´;*½>/Â:,Æ6+Í6-Ô:2ÜB8àI>ÖG9Ç;,¹1!ßOGÙIAÔE=ÓE;ØH?ÜG@àC>á<:ã54ê67ï8:í9:ç77à72Ý:3Ü>5ÎKAÈE;½=0µ7)°5&³8)¹>.ÀA2Á;/Ê<2Õ>5ß=8ç;9î79ò67ô68æ7>æ7>æ7<å8:å99å97ã:5ã:3Þ5.ß6/ã81ä84å97ç98ç9:ç9:ë;>ç9;á99Ü<<ÖA=ÌC;ÀB6´@3¦;+¢=+>,™<*–;(•:'”9&“8%‡F2‡>/†/%”-(ÀIKèkoçlqÊWZ¶OP©TQŸVO˜YP•[P–]R™^Vœ`XMb!:O3JOf x’I˜²h¡½r »t™²pƒ›akN\lEWdHS\GHN@=C9;<,AB4=?2:=2,¯:)½9,Ì70Ø42Þ22Ý6-Þ7.Ü8.Ü8.Û7-Ú8-Ù7,×7+×7+Õ7+Õ7+Ô8+Ô8+Ô8+Ô8+Ò9+¸>/·=.®9(¥2 ¦3 ²:)»=.¿;,Æ:-È4*Ì3+Ó;0ÜE:ßPBÞRCÚQAÝE@Ø@;Ñ<6Ð;5Õ>7Ø=8Û96Ý33é69í68ï79í68é77å97â=9á?:ÆC9¿?2¸:,±6'¯5&²8)¸=-¿@1ÅA4ÍA4×@7ß=8å97ê67ï56ô68ç6<ç6<ç7:æ89æ87å97å95ã:3â92ã:3ã:3ä;6æ:8æ:8å99å99æ9;ä:=à<=Ú?=Ñ@;Å?6¸<2¬;-¥;+ <,œ=+—<)–;(’:&‘8&7%z;)€8)‰5*ž;5ÁQPÚceÔ]a¹MM­NL¤SOYP˜\R—^S—^U˜_V™^VSg*Sg(^r3zO—°l¥¾z™²nˆ¡`j‚Fau@Sf9IY5FP7?H59?358/;<,AB4=?2:=2;A5:C2@M3Rc?]uCgƒHqLp”Jm“Hk“Jk“Lh‘Km‘Tn’To“Sm”Qk“Lj”Hl—Hm˜HpJnžJp Ls£Ou¦Tx©Xx©Xx©Zm–\b‹QY‚H]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXIe]He]Jd[Jd[Le[Qf[Uh]Yh\\i]]j^`k_ak__i]]f[YbWU`USYVMWTKTQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`Jk`J^cOmhUy_PˆXN¤[T³VQ´HE¸E>¹@7¸>3·<-·9*¼8+Ã9.Ê:/Ï;1Û7-Û7-Û7-Ü8.Ú8-Ù7,Ø8,×7+Õ7+Õ7+Õ7+Ô8+Ô8+Ô8+Ò9+Ò9+º@1¶>.®9(£2 ¢3ª:&µ=,»=.Ä?0Å7+Æ2(Ê3(Ð<0ØF9ÛM?ÝQBÜ87Ø43Ô20Ô52Ù:7à>;å=<é;<ï8<ï5:ì27ê24é56å97á<8à=8¹;-·9+±6'®4%­5%°8(µ<+»=.ÈD7ÏC6ÖB8Ü=7â96è64í55ò67ê5:é6:é69ç79ç77æ95å:3å:3ã:3ä;4ã<6ã<6ã;8â:9á99à88Ý9:Þ;<Û@>ÕA=É>7º:1­7+¥7(¡;,œ=+˜=*”<(’;(9&8%Ž7$u8%y6%ˆ9,¢E=ºROÂVT¹OO¬HH¤LHœSL˜ZO—^S–bU—aW˜_V˜]UgxB{ŒU“¦n¥¸€«À‡ž³zz‘YYp:?R$AS)AQ-?L0:C.6<.690581:;+@A3=?29<1;A59B1@M3Qb>_wEi…Js’Nr–Lo•Jm•Lm•Nk”Np”Vq•Uo–Sn–Pl”Kk•Il—HmšIpJpJp Lu¤Sx©Xyª[u¦Wq¡U_ˆNVEOx>aXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Le]Ff^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh^Uh^Ug]Se[QdZNdZN]YNZVKVRFRNBPL@PM>RO@UO?WQAYTA[VC^WDaZGd]Jf`JgaKadSleUt]O‹[Q«b\»YXºDD¾9:Æ;8É:6Ç80Â8-½8)¼:*½@.¾C1Ù7*Ù7*Ú8+Ú8+Ú8+Ø8*Ø8*Õ8)Õ8)Õ8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)»A2¶>.¬9'¡4 2¢8"¬=)µ@.¼>/Á9+Ä6*Ç4*Ë7+Í;.Î0å26á14Ý02Ý34à88å;<ë=?î;?ï6<í38ì/5é05ç47ã77Û64Õ30±7(°6'®6&¬7&¬7&®9'²:)µ:*ÃA3ËA4ÔA7Ü?8â:7ç85í76ð67í6:í6:í68ë76ê86è94ç:4æ;4â92á:2ß:4à;7Þ:8Ý98Û97Û89Ö<:Õ@<ÓB?ÊA;»;2¯6+¥5'ž7(œ;*—<)“<)‘<(:&8$Œ7#Œ6%z@,v5#6'™E;¬OH¬MI©LG¨PLPH–VL“ZO“_R“bT•aV—aW™`W~‹]™©z­½Ž¦·Š¡ts†YN`8/A->3B%:F.=F3;A3:=2;<4<=79:*?@2<>19<1:@49B1?L2Pa=`xFj†Kt“Os—Mq—Lo—No—Pm–Pp—Tq˜Up˜Ro—Pm•Ll–Jn™JoœKqžMrŸNt£Sy¨X|«]w§[mSd”J[„LS|DNw?cZKcZKcZKcZKcZKcZKcZKcZKcZKcZKd[Ld[Le\Mf]Nf]Nf]Nf_Eg`Fh`IiaLiaNi`Oh_Ng^OjaRi`Qi`Qh_Nh`Mh`Mh`KiaLb_P^[LYVGTQBPM>NKTQ>VS@YVC\YF^[H^]I`aSf^QmWJ†[R­hcÁb`ÄLMÌ@CÔ:<×79Ö74Î70Á9+·>)²D+°H-×7)×7)Ø8*Ù9+Ù9+Ö9*Ö9*Õ8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Ò9)¼A2¶>.«:( 7"™5š7 ¢>&¯B-±<*º;*Â:,È8-Ë8.Î:.Ð<0Ò>2ò5<î3:é27ã36â46â46â46ä15ì5:ì39ê38ê5:æ8:Ü66Ñ2/Ç,(®9(­:(­:(«:(«:(«:(¬9&¯7&¸:+Á<-Í?3Ø?7à=8æ:6ê86ì87ï56î66î66í74ë84ê93ç:3æ;3á:2ß;2Þ=5Ü=9Û=:Ù><Ø=;×==ÌA<ËB<ÆA:»<3­7-£5(ž7(š;)–;)“<)=(Œ;(Š9&‰8%ˆ7$‡6#}C/s4"y4$“G:¤RG¡NFžNE¡WN˜UL’XL[NŒ\NŽ^R”`U—aW›bYƒŽd˜¤|©ƒ€Žj]kJDS42@&$2-:&0;*5=.9?36:;3::29:*>?1;=08;09?38A0>K1Pa=ayGk‡Lu”Pt˜Nr˜Mq™Pq™Ro˜RršSršSršQp˜Om—Km˜Ip›LržOt Qv¢Sx§Y{©^z¨_qŸVd’JY‡?]†NVGQzBe\Me\Me\Me\Me\Me\Me\Me\Me\Mf]Nf]Nf]Ng^Og^Oh_Ph_Pg`Fh`IiaJjbMjbMjbOjbOjbOjbOiaNh`Kh`Ih`IhaGibHjcGe`Mb]J^XHXRBSM=MJ9KH7IH6KJ8LK9LM;NO=PQ?QTASVESVEYYM]WKcQEzXN¡ha¸eaÇUUÛORÞ=Cã8>à67Õ62È:.¹@+­E*¦I*Ô7(Ô7(Õ8)Ö9*Ö9*Õ9*Õ9*Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Ò9)Ò9)Ñ:)¼@4µ=/«<+ :$—7’6š<#¦B*°C.¹@/¿;,Ã7*Å2(Ë4+Ó:2Ù@8ó1<ð2<î5=ë8>ç:>å;>ä:=ã9<á48ä5:å8<ä;>Þ;<Ò86Å1-¼-'«<+«=,«>*©>*¨=)©<(©:'«8%¯6%¹7)Å;.Ñ=3Ù<5à;7ä;8è;7ð75ï75ï75î84ì94é;4è;4å=4â>5à?7ÞA:ÚA;ÙA>ÕA?Ñ??Ñ??¾B:»@8µ<3ª8-¡5(›5'˜8(•<*‘;*<)Š<(‡:&†9'„7%ƒ6$‚5#y<)r3!}:*—OA£YLœRG•OE–VJ”ZN[MŒ[M‹[OŽ\Q”^T™`Yœa[s}Xyƒ`r|ZU`B9F,/;'0;+1;03=44;35<4:?8?B9?A6<<277+89)>?1:27@/=J0O`HO?HO?PPDVRGYOChREYM˜UL³RLØXWàGJçï:Aì?CæBCáACÞ@AÚ>?Ï12Ñ56Ô::Ò<;Ê;7¾73µ4.¯3+¥>+¥>+¥>+¦?,¥>+¤>(¥<'¨;'ª7$²7'¼8+Å8.Ì8.Ö92Þ<7ä?;î85î85î84ì94ë:4è;4å=4â>4âA7ÝC9ÚC<ÕB;ÐA=Ê?<Ç=;Ã<9®>3©:/¢8+œ6(˜7'”8)‘:)Œ;(‹=)ˆ=*…<)ƒ:'‚9&€7&6%~5$v4$x5%…B2˜UEœXK“QCPD•ZL’ZM[NŽ]OŽ\Q’\R•\U˜[V™\W`hCX_=JS4>G,6?*2=-4>35?74=88>:=B/;9*78(=>0:26?.=J0N_;`xFk‡Lu”Pu™Os™NršQršSp™SqœMrNqœMp›LošKrNu¡Ry¥X«`~©az¥]qœUf‘L_‰G[ˆE\‰Hb‰RY€ISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmcWlbVjaRi`Qh_Pg^Og^Mh_NiaNiaLiaLiaJh`IhaGhaGhaGh`Kg_Je_Ib[H\WCUR?PM:ML:EF4DG6DH7BI9BI9BJ;BJ;BJ;JJ@QQERPAUNÄYSÛQOãCEå8:ß55×:3Ê>/¸>)¬<$Ï8'Ï8'Ð9(Ò;*Ò;*Ò;*Ò;*Ò;*Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)½=2¶:.­<,¥>+˜9#Œ59ž@' :$¯<)¾?0È;1Ì8.Ñ7/Ù<5àA;ð;Bï>FëBGãCEÖ@?Ê;7À50»1.·0,¼51¾:5»<6³:2©9.£9,¡9,Ÿ>+Ÿ>+ ?,¡@-¡@-¡A+£>*¤=*©<(­:(²7(¹5)Á4*Ë80Ö?8ÝD>é:5é:5è;4è;4ç<4ä=4á?4Þ@5ÝC9ØD:ÒC;ÊA9Ä?:¼;6¸85´73ž9-™7*•5'’6'‘:)<*‰:)„9&†=*„=+=*€<)~:'|7'{6&{6&y1#€8*ŒG8–RE’PB‹K?ŽSE™_SXKZN’\R–]T—\V˜[V˜YT—XSV^7EM(6@8A&>G27@E>GJ?GI;BC1?>);;#78(=>09;.69.8>26?.E5>F7?G8=H8AE4HK6YS;_F0€K9Àj]Ýf`åSSçDEè@@ã?=Ö=5É=0Â>/É3$Ë5&Ì6'Í7(Í7(Î8)Ñ;,Ó=.Ò<-Ò<-Ò<-Ò<-Ñ;,Ñ;,Ñ;,Ñ;,¸3,·7.±;-¦;)˜8"‘7’8š:"«B-±<+¹7)Á4*Í6/×<7âC?êHCëBGéDHÝCCÉ:6»61´80®8.§5+ª:/¨9.¤8. 8-›9,–:+’<+>-˜=*˜=*™>+š?,›@-œA.žB-¡@-¡<*¥:(«7(°6)¶6+¾8-Å;1Ê=4ß:4á<6â?6ã@7âA7ßA6Ú@4×@5ÚG=ÒE;ÇA6»;2±6.ª3-¤1,¢1+”;-’:,:+:*‰:)ˆ;)…<+„=+~:'|9(|9({:({:(z9'x6&w4$z, A4˜NC“MAŽL>RE‘VHŽRG˜\R˜\R‘UMTL™ZU—XS–WR `^R[0IQ(AK&BK,>H/7@-2=-4>34;3HPEX^RW[LLO?1;=0:=29?34=,;H.Pa=bzHlˆMu”Ps—Mq—Lp˜OršSqšTpJqžKrŸLrŸNsŸPv¢U{§\ªb‚­fx£^i”O_‰G]‡G`ŠJfŽOhRd‰U[€LTyEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj^^j_]j_]j_[j_Yj`Wj`Vj`Vj`TjaRjaRjaRjaRjaRjaRjaRj_Kh`Kg_Jg_Jd]J^YEUR?ONE5?E7>F7>F7=E6BF8>E5=F1DN5HK0PB'yS<¹ubÉdXà_YíUTêFGä>>â@=Û>9Ñ82Ì:+Î<-Ï=.Ð<.Ï;-Î:,Í9+Í9+Î:,Î:,Î:,Ð:,Ð:,Ð:,Ð:,Ð:,È?9ÆA:½A7®=/6#•2•2™3¦5#²7(Á;0ÑA8ÞE?æIDéJFìJGÞBCÛEDÎC@¼;5®9/¨>1¢A1œ?.œ@1™@0–>0’?/Œ?-ˆ?.„A.ƒB.‘;*‘;*’<+“=,”?+”?+–?,™>+Ÿ@.¡=-¤:,§9*¬8+±8-¶:0¹:1Ð90Ò;2Õ>5ÕA7×C7ÖD7ÔD9ÑE8ÊB6ÃA4¹=1°:0¨8-¢5.5,œ5.Ž=,Œ=,Š;,ˆ;+†:*„;*<,€=,~;*|;)y:)y:)x9(w8'u6't5&„1)‘C9˜NC‘K?ŒJ>PD’TIRG“SJšWQ˜UO™UR\X”WTŽSO—\XT]0Zc8_j@[eBIT66C)4@*0:-;H.Pa=c{IlˆMu”Pt˜Nq—Lq™PršSqšTq¡Kp LpJqžMt Qx¤W|§_ªc{¦aošUcŒJ]…Fa‰JeNeNc‹Ld‰U[€LTyEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj^`j^`j^^j_]j_[j_Yj`Wj`Vj`Vj`Tj`Tj`Tj`Tj`Vj`Vj`VlaMk`LiaLiaNf_La\I[VCTQ@ML:HI9DG6AE6AE6?E7>D6=C5=F57@-?H3EM5AA%QA']E³u`³WHÙbZðebîRSéEFìFHèBDÝ79È9+É:,É:,É:,É:,Ê8+È6)È6)Ê8+Ë7+Ë7+Ë7+Ë7+Ì8,Ì8,Î7,Â3/¾5/¸5-¬3( 0"›0Ÿ1 ¥4$»A2ÇC7ÖG?ãKFçLGéJFåFBâC?ÕCCÏDAÁ@:°;1£=/žC1™F4•G3’E3E2ŒC2‰B0ƒB0B/{B.xD.Š8*‹9+‰:)Š;*‹<+<+Ž=,<*–?.–=-›;+9* 8+¥9-©:/«;/¼7.¾90Á;0Ä>3Å?3Æ@4Ä@3ÁA4¸:,²:,ª9+£7+7+™7,–8.–91‰=-ˆ<,…<+„;,‚:+€;+<+<,};+z;*z;,w9*v8)u7(t6's5&Œ91”F<—MBŽJ?ˆHMKB3;I27C-EJ3IG0K<%mN9—dO§`NŸA5ÆSLçc_ð^^îRUíJMêDHç>CÉ;/Ç9-Å7+Å7+Ç9-Ê:/Ë;0Ë;0Ñ>4Ñ>4Ñ>4Ò>4Ó?5Ó?5Ó?5Ó?5Ó?=ÑB>ÍD>ÆF=ÁG<ÂI>ÆN@ÎPDÙSJÞOGäLGäIEåFCâC?àA=ß@<ÔFDÊC?º?7«<1ž>.—D2“H3‘J6‹G4ŠF3‡D3„C1B0zA.wC.uB/†8+…9+…9+†:,†:,‡;-‡;+ˆ;+‰:+‹:)Ž8)8*•9,™<-=/ž>0«9/­8.®9/°:.°:.²:,¯9+®8*¨7)¥7*ž7(›6*•7+’8-9/;0†=.…<-ƒ;,9*:+~9*}:*};-|:,z;,y;,w9,s8*q6(q7)q7)B8”G=‘K?ŠH<‡I<‹OD“UJ—TL—PLSP˜QO–RO—\X_Xh^žzn™k…’fu‚VYh=CR)?O(P`B'=A&;>#78(:;-79,9<1;A57@/MKH/JH1Q?+e>-”ZL¬`S›>6œ4+µ@9ØXUóigödeëRUèINìKQ×J@ÓF<Í@6Ë>4Í@6ÒD:ÕG=×G>ÚJAÚJAÝJBÝJBÞKCßJCàKDàKDëRTéSTãTPÜSMØSLØSLÛTNàUNàLHâHFäEBäB@äB@äB@ãEBãEBØJHËD@¹>7ª>2žA2–C1F3I6‰F3‡D3†C3ƒ@0@1}?0y@/x@1ƒ9.ƒ9.‚:.‚:.ƒ;/ƒ;-ƒ;-ƒ;-9*‚9*…9+‡9,‰:+;-<.=/›;/œ:/ž9- :.¡9,¢8*¢8*¢8*Ÿ8)œ8)˜8(”8)9*Œ:,ˆ:-‡;-ƒ;-‚:,9+~9*}8)}7+|8+{9+z8*y9-x:-t9+q5*o5)q7+r:-G;ŽH<‰I=„I;…K=ŒRF“WMšWO˜QMžTQ™RP•VQ’`YˆbW‚h[ŠwhivKZi>JY.AR&IZ0Wi?dvLj|TXjDL\8?M,:D)C-=@-:=*89):;-68+8;0H-NC-b=-„D:¯VP¶MJ¡++´:9º=;ÑTPòpnýwvñehêY^ò]cáVOÚOHÒG@ÎC<ÑD=ÔG@ÖGAÖGAÙHCÚIDÚIDÝIEÞJFÞJFàKGàKGãGJáGIÝGHÙGG×HD×HDØGDÝEBàBAåABé@CêBBèBBäB@ßA>ÜA=ÚJIÌB@»<6®>3¢@3—A2B0D3‰A2ˆ@2ˆ>1…=1‚<2€<1=1}=1ƒ:3;3;1;1€<1€<1=/=/=/€.™9)•9*“:*Ž;+Š;,‡;+ƒ;,€;+‚:,9+7)~6*{5){5)z6)z6+x6*x8,w9.s7,o5)o5)r:-u=0ŽL>‰K>„J<‚M=…QC‹VH’XM—WN”MIœRQšTR•[We\y_PcXFb]IBP,?M)?O(K\2_qGk~QcyKVk@M_7@R,6E&7D*=F1=D4:=27:19:*:;-68+8;0G*SA+{E9¦NL¸EH»5<¾19Ë@EÄ?@ÊJIÞb`îrpïopçbeáZ^ÛRJÕLDÏD=ÍB;ÏD=ÒE>ÐC<Î?9ÒC=ÓB=ÔC>×C?×C?ØD@ÙEAÚEAà?Dß@DÞDFßFHßIHàJIãIIæFHçACëADîAEîACéAAâ@>Ù>:Ö=8ÛEGË=<»73°;4¦@4˜?1>0ŽA1‰=/Š<0‰;1‰92‡81†93…:4„;4:4:4€<3€<3<3}=3}=3|<0{=0{=0{=.{<-z;,y:+z8*z8*€:0‚:.„:-ˆ:.Œ:.‘;.”<.–=-’9)‘:):*Š;*‡;+ƒ;,<+}<*€8,€8,~6*}5)|4(z4(z4*y5*u3'v6,v8-r6+n4(n5*s:/v@4‹PB†N?N=R@…VF‰XIŽUJ‘RI“NI™RP”SO‘\VŠfZl\LML7BL3@O.KZ9WgC`rJezOdzLVl=G]/AV+7I#0A!5C*=F5QJ:MG7IC3GA13M*>G*[B.PGºVVº7?»'3ÜBNÐ:CÄ9>»;:ÂHGÓ][ßgf×[]ÇILÓJDÏF@ÌC=ÎC>ÒGBÒGBÐB>Ë=9ÒC?ÓB?ÔC@ÕDAØDBÙECÙECÚFDá>Cà?DÞBEßEGáGGàFFàBCâ=AëADí>Cì;Aê<>æ>>ãA?ßD@ßFAÙ@CÉ78¹30±:4§?4š>1=/Ž?2Š;.‹9.‹80‹61Š71Š73‰84‰:5:3:3:3~;3|<3|<2{=2{=2u9.v;-w<.w<.x=-x=-y;,y;,{;1};/~8,7*„6)‡5'‰6(‹5&7(‹8(‹:)ˆ;)…<+<,~=+{<*€8,7+~6*|4(|4({2)y3)y5*t1(u5+v8-r6+n4)n5*t;0xB6ŒTE„Q@P>‚UB„YHˆYI‰SGNG˜SN˜RPPKˆVO‚bUeZHFK4;K0IX;[jKgxVewQYnCSi;Me5I`28M"-B*;2@):E7;B;8<;7;<<=-<=/79,9<1=C77@/6C)DU1Rj8_{@mŒHp”Jq—LršQtœUr›Uq¢Qt¥Vu¥Ys£Ym›Sd‘N\‰HZ„DdŒNa‰J`‡HcŠIfJiŽIeŠDa‡>`‚PWyGPr@i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTo\Nq_QtdUrdWnbTj`Th`ShbTgaSebQa^K[VBVQ;TN6NH.GA'RD)N=#cI2iV²zm·ng³[W¸PQ¶BEÁ@EÉ@GÑBFÖDGÚEIÜGIÝGIÔBEÔBE×BDÙEEØDBÒC;ÎD:ÌH;ÄF7ÃH9ÆH:ÊG?ÐEB×BDÜ?FÞ=EâBDâBDâBDâDEâDEãEDãEDãEDâDAâC@áB?â@>ã?=ã?=ã?=å@>ÎE?Ä?8¶:2©80Ÿ:0•>4Œ@3ƒ?2A4|@5}?4<3ƒ:3‡83Š73Œ72…<-…<-…<-„;,ƒ;-‚:,‚:,‚:,9-9-9-~:/~:/~:/~:/~:/~80~80}90}90}90}90|90|90|90|90z:0y9/y9/x8.w9.w9.w8/w8/v7.t8.s7-r6,q5+p6+l2'q7,m4)l3(o6+m4)q8-H=ULƒTL†QK‹PJNJ•NL˜NM—PL”SM‹UK†\NdOkaFTW8JX5N_;gT`zMWpFTkARg@O`0CA4B@4@<12:/2:/4:.5;-9=.A,>D*T^4ÉE9ÈF9ÊG=ÍG>ÒGDØCEÜAEß?GáCDáCDáCDâDEâDEáFDáFDáFDàEAáC@àB?ßA>àA=àA=â@=ãA>ÑFAÉB<¼=6¬:0 90“;/‰=0=0A4|@5}?4<3ƒ:3†91Š71Œ72…<-…<-„;,„;,ƒ;-‚:,‚:,‚:,9-9-9-~:/~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/x:/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H<‚SK„TJˆQJ‹PJ‘PL•OM–PN–RO‹OG…SH€[K{ePsiPhkLdrOgxT\uKXoEPf?Ka:K_:K\:GV7CP42><03;03;05;/6<09=/A,>D*Q[9^mDmPpŒRr’Sq™RsSsŸRxža|¢exžak‘T`†I]ƒF]ƒF\‚E`†Ia‡Jc‰Le‹NdŠMbˆK`†I^„G]MRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTtbTo_Pm]Pm_ToeYog\keYhbVfbVpl`{xi~{jzgzuapiVf`JPVÔG@ÖGCÚFFÛEFÝDGáCDßCDßCDßCDàDEßECßECßECÞDBÞE@ÝD?ÜC>ÜC=ÜC=ÝB=ÝB=ÕF@ÎE=ÃC:³>5¢:/’8-ˆ9,<-€A2~@3}?2=1ƒ:1†91ˆ81‹80…<-„;,„;,„;,‚:,‚:,‚:,€:.9-9-9-~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*k1&o6+m4)k2'n5*i3'm7+}G;†QI‡PIŠQJŽQL‘RM“RN•TP’UPVO‡[P^OtbNoiQnrWjwYfwWPf@K_:EY6BV3EV6GV7FU8ER8?I1*7;*:<.<>0<=/:;-5<45<46<26<09=/<>0=@-=C)MV7Zi@h|KlˆNpOq™RuŸSt Sz cw`n”Wc‰L\‚E\‚E\‚EZ€C_…Ha‡JbˆKdŠMc‰La‡J_…H]ƒF[}KPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTtdWqaTm_Rk_SkaWlcZle[jf]jf]wuiˆ„y‘•’Œ|‰‚r€ygZfNLV>AI2CF1ED0D?,I=-TD5M:+O8*R6*T7)X8+];/a?3eA5‹KAœSL­UQ¶NK½EDÇABÓCCÛEF×?>Ø@=×B>ØD@ÙEAÚFDÛEDÛEDßCDßCDÞDDÞDDÞDDÝEDÝEBÜGCÛFBÚE?ØE>ØE>×D=×D=ØE=ØE=ÖC<ÔE?ÊE>»@8§;/–8,‹9+…;.‚@2@1~?0=/;/„:/‡9/‰90„;,„;,ƒ;-‚:,‚:,‚:,9+9-9-9-~:/~:/~:/~:/~:/~:/}90|90|90{8/{8/{8/y9/x8.{;1y;0y;0y;0x:/x:/v:/v:/s7-s7-s7-r6,p6+o5*o5*n4)j1&o6+l3(h2&k5)h2&l6*|F:ŠOGŒPHQIRMSN’UPWPŽYQ‰]R…aUy_PiZGd_IciOZgKN]@EU8AQ4=M0G2:A/7>,9=,9=.8<-7;,6=66=66;46<29<1;=/dxGj†LpOs›Tw¡Uw£T{¡dr˜[e‹N\‚EZ€C\‚E\‚EZ€C_…H`†Ia‡JbˆKa‡J`†I^„G]ƒFY{INp>Ef7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTseXugZsg[mcYjaXle]snhzwp~w† –©¥œ«§œª£™£‘œ”‰v~i`hSLSADK9AJ7>G4>G4BI7GNBÛ?@ÛAAÛC@ÚEAÚEAÚEAÚEAÞDFÞDFÞDFÞDDÝEDÝEDÛEDÙEAÚFB×FAÕF>ÔE=ÓF=ÓF=ÓF=ÔG>×@9ÕB;ÏD=ÁB9®>3œ:-‘;.‰=/„?0?/~?0=/<-„:-†:-ˆ:.ƒ;-ƒ;-‚:,‚:,‚:,9+9-9-9-~:/~:/~:/~:/}:1}:1}:1|90|90|90{8/y9/x8.x8.v8-y;0y;0x:/v:/v:/u9.u9.u9.s7/r6.q6.p5-o4,n3+m4+m4+j1(o6-j4*h2(j4*g1'k5+zF;MGNH‘PJ’SLUOŽWPŠZP…ZQ{YMv\OkZJ]UBYXDY^HOYA>L3;G18D.5A+5A+8D.=I3AM7EN;BK8?H5.5<,4;+5;75<56;56;48;2:-;@)GP1Ra:buGi…Kq‘PuVy£Wx¤Uzcn‘W`ƒIZ}C[~D^G^G]€F`ƒIa„Jb…Kb…Ka„J`ƒI_‚H^GW{KLp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTmaUndXpf\lcZkd\rmg„|‘‹¥¤ ³²®ÄÁ¼ÉÆÁÉľÅÀºÀ¹±¹²ª¤œˆ‚tfcTPQAEI8=F38E18G45F35F44E36D58D6;E:?G<@H=<6(L0–=/Œ=.†>/‚?/€>.=-<-ƒ;,„;,‡;-‚:,‚:,‚:,‚:,9+9-9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.v7.u9/u9/u9/s9.s9.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*l3*h2(l6,i3)f2'h4)e1&i5*xD9’KE’MF“PJTLVO‡XNYO|\Os\Nk[L_XFUTBPS@JQ?@I64@,3<+2;*09(09(2;*5>-9B1-;@*CL/O^7_rDi„Mr’SwŸXy£Wv¢Us–\f‰OZ}CX{A\E]€F]€F^G`ƒI`ƒI`ƒI`ƒI`ƒI_‚H^G]€FVzLJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTiaVjbWkdZmf^upjˆ…€Ÿžš°°®ÂÂÀÓÒÐâáßéåäçãàãÞÚÞÖÓ×ÏÌÒº°º¤™˜†zym__YIKL:>F19E1>2J91`94ˆHH²\_È_dÍVZÐOSÕMOÚLKÜJJàHEáFBãDAåA?ÞDFÞDFÞDFÝCEÝCEÜBBÛCBÛCBÚDCØD@ÔE?ÓF?ÐF<ÏF<ÐG=ÎH=Ý>8Ú?:ÒB9ÉC:¼C8«A4™<-Œ9)‡>-ƒ>.>-€=,€=,<,ƒ;,…<-‚:,‚:,‚:,9+9-9-~8,}9.~:/~:/~:/}:1}:1}:1}:1}:1y:1y:1x90x90w8/t8.s7-s7-s9.s9.r8-r8-q8-p7,p7,p7,p5-o6-n5,n5,m4+l3*i3)i3)g1'k7,h4)e1&h4)d0%f4)uC8•JE“LH“PJTL‰WNYOx[Mp]Nj^N]WGPQAKN=CJ:9B12:+08)36-17-06,/5+/5)17+2:-4<-9D4;F6=H7*0640641622716929;0:<.:?)?H+KY5]pChƒLs“TwŸYw¡WržQiŒT^IUx@WzB[~F[~F[~F]€H_‚J_‚J_‚J_‚J^I^I]€H]€HUvKJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcToh^ng_lh_tqj…„¡ ž¼¼ºÏÏÏÎÏÑààâòòòúøùû÷öøòòñìéêåâïÍÃàÀµÅ©¥€sbaZGML7CH2AI4AH6BF7BD7C@9D<9C98C772?5;@9@93H/+c76QR³giÇmmÂ[\ÉYWÑUS×QNÝKKåGFèBBê@AÞCGÞDFÞDFÞBEÞBEÝADÜBBÜBBÜDCÙCB×C?ÔC>ÒE>ÐE>ÏF<ÐG=â@;Ý@9Õ@9ÌC9ÀD:°B5›;-‹5&Š=-…=.>-€=,€=,<,ƒ<*„=+‚:,‚:,€:.9-9-~8,}9.}9.~:/~:/}:1}:1}:1}:1}:1{;2w;1w;1v:0u9/t8.s9.r8-q7,r8-q8-p7,p7,n8,m7+m7+m7+o6-o6-n5,m4+j4*j4*i3)h4)f2'k7,h4)c1&e3(b0%e3(uC8”JG“NIQJ‹TM„XOzZMq[Mh\LXUDHK:=D4=E69A208+/7*5=056157257247005.06,08-19,6A3:E5=J9>K9;J77F12A,0?*.42.420511605818:/:<.:?+WzB[~FY|DY|D\G_‚J_‚J^I^I^I]€H]€H]€HSsJHh?>^5icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUfc\gd]vsn“’ޝ¯­ÄÆÅÚÛÝìíïóôöö÷ùüüþÿÿÿÿþÿÿûúüööùôñÿÞÏöÖÇãÈ·É´Ÿ­ž‡ŠƒicbFGG-EG/DF0GD3IC5H;3F42G34M797@;;@:@;8G85cGF‘kjŔ譩ҋ‡ÇtnÀ]XÆSNÖNNâIKëEIðCGÜFHáHKÜCFÕ:>Ø>@âFIàDGÖ:;Ú@@Ú@@ÙA@ÖB>ÔC>ÑB<ÏB;ÏB;ãA<Ý@9Ô?8ËA7¾B8°@4;.8*‹>.†>/‚?.>-€=,<+=*=*9-9-9-~8,~8,|8-|8-|8-}9.|90|90|90z:1z:1z:1z:1x=5w<4v;3u:2t91r7/p7.p7.o6-m7-m7-m7-m7-l8-l8-l8-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)^,#`0&_/%b2(p@6’LJOKŠQJ‚QJ}YMv_QfYIRO>CF5=F58C35@02=/3;04:04:077577566446135016/05..6+.9+2=/6C29H5:I68G42D./A+,20,2.-2..3-36/780:&DR1YkCh‚Ru”[wž_r›Wj•N\}HXyDTu@Tu@WxCZ{F[|GZ{F^JbƒNbƒN^J\}H_€K`L^JTrNFd@:X4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUed_onj…†¤¤¢ÁÃÂÖÚÛêîï÷ûþ÷ûþøüÿüýÿþþþÿþÿÿýüÿüùÿûøÿïÚüêÒîÞÅØÍ±À»¤£„‚ƒcgkJMP1II/EC,HA/J>2L93M85Q99;;9BA?MHE\RQyjg¢‹Ì³®åÇ¿ÿÙÏ괪̃|Àc\ÌVTÛPSãFMâ=DÕEEÕEEÙGHÞIKÛEGÖ<>Ö<>Ü@CÚ>?Ù??Ú@@ÙA@ÖB>ÓB=ÒA<ÐA;ß@:Û@;Ô?8ÌA:¿C9±A6 ;/‘9+Œ=.‡>/ƒ>.>-€=,<+€=,<,9-9-9-~8,}9.|8-|8-|8-|90|90|90z:1z:1{;2{;2{;2v=4u<3t;2s:1r90p7.m7-m7-m7-l8-l8-l8-l8-j8-j8-j8-l5.n70n91n91l7/i4,g2*e3*c1(e3*_/%^.$b2(^.$`0&n?5„IEˆQLˆWRWOrVKdRDQJ:>?/:A16A14A02>02<14<15;17:388677577557446116005./7,.8-1<.4A07E49H58G44E22D.062.40.3--2,14-45-8:-9=,7?'DQ3YkEh‚Sv”`wbp˜YfNZzHWwETtBTtBVvDYyGYyGYyG[{I_M_M\|J[{I^~L^~L\|JTmOF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVneVddby{x—™˜²¶µÍÑÒäéìôùüúÿÿûÿÿûÿÿûÿÿýÿþþþüÿÿûÿÿúÿÿúÿüßúùÛïðÐáåÄÒØ´¼Äž©‡’j`hCRW7DG,EC.KD4MC9N?8L=8C:;SJKi`a€xv›“¼µ¯×ÐÈçÝÓúêÝÿôéÿåÛ画Äec¸ACËBIáNVÚVRÒLIËDAÎBAÔFE×EFÙCDÛBD×=?Ø>>Ù??Ø@?×A@ÕA=ÓB=ÒA<Ü?:Ù@:ÔA:ÍD<ÀD<²B7¡<2“9.Œ=0‡=0ƒ>/>.€=-<+€=,€=,9-9-9-}9.}9.|8-|8-{8/}:1}:1{;2{;2{;2{;2{;2{;2t;2s:1p:0o9/n8.m7-k7,k7,l8-l8-j8-j8-j8-j8-i9-i9-n91m80m80m80m80i7.f4+c1(c3)a1']-#_0&c4*\-#_0&sD:OK‚UPXQqSK^J?OC7?<-37(2:+/<+0<.2=/4<15;17:37:388688668557257227016/08-.8-0;-2?.6C27E48G48G48G46=53:2/4-,1*.1(13(57*6:)6>'DQ5[lHk„Zy–fwœfl”X^‡KWwEUuCRr@Rr@TtBVvDWwEWwEXxF[{I]}K[{I[{I]}K\|JXxFPfOAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVofWgklƒ‡ˆ£§¨¹¾ÁÐÕØåíðóûþõýÿùÿÿûÿÿüÿÿüþûýþùþýøÿþ÷ÿÿöóÿâñÿÞëùÖäòÎÛêÃÌÛ²³Â™ ¬„}‰cdnKLS4EI0HJ5KI:GE9D@7QEEk__‹€¤š™µ°­ÊÇÂÜÜÔççÝ÷óèÿýñÿøíÿÝÕú·±èŽŽÌbd±>CÃPIÉTMÉOJÃF@ÊFBÔMJØJIÑ??Ò>>Ô>?Õ?>Ö@?ÕA?ÓB?ÓB?ÒC?×>8×?:ÒC=ÌE?ÀE>±B9¢=5•;2Œ<1‡=0ƒ=1=0=-~<,€=-€=-~:/~:/~:/}9.}9.|8-{8/{8/~;2|<3|<3{;2{;2z;4z;4z;4p:0o9/o9/m9.l8-k7,j6+h6+i7,i7,h8,h8,h8,h8,h8,h8,o:4j81h6/i70j81j81e4-a0)e4-b1*].&a2*b3+Y*"_3*zNE~]XvWRiNGWC:J<3@:.:;-8<.08)/:,1<.2=/5=25;169078079468368349338138119.19..9+/:,1<.2?.5B18E4:I6;J7;C87?428.-3)-0%/1&24'48)4<'ER8_pPr‹d}šnwœifXT}EUrBTqASp@Sp@TqAUrBVsCVsCWtD[xH]zJ\yI^{K_|L\yIVsCK\JD8f\Z†|z«¡ŸÁ·µËÃÁÕÐÍãâÞîïé÷øðùöíüòèÿóéÿóíÿäß즤´if«K=³QDÁYNÇ[QÆQH¿D=ÂA<ËD@Ë@=Ï?>Ð@?ÑB>ÒC?ÒC?ÑC?ÑC?Ö>9Ô@<ÒD@ÉE@½D<¯@9 >5•<4Œ<3‡=2ƒ=1=0=/~<.=/€Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGQn>ESF6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXpgXinrz‚…“š «´¹ÄÍÒÜåêì÷ùôþÿôþýöÿüúÿúûÿ÷ûþóøúìõöæòóãòþêôýèôüåóøáòöÛëëÏØ×¹ÅÄ¥±°’ŽregOMP;EL:EM>EODGSG~zqŸ›’ƽ¸ÙÎÌáÓÒçÛÛôêéü÷ôðïëûüöÿÿöÿþôÿúñÿôêÿçÞÿÚÒß‘}·fS¢K:²UF½WKµF;·@8ÈKEÇC>ÊC?ÌB?ÎC@ÎC>ÍD>ÍD>ÌC=Ô@<ÒC=ÎE?ÅD?¸A;ª=8ž;5•<4Œ<3‡=4ƒ=3=2=1~<0=1=/~:/~:/~:/}9.|90{8/{8/{8/|<3{;2{;2y:3y:3x92w81w81m80l7/j8/j8/i7.i7.g7-g7-g7-g7-f7-f7-f7-f7-f7-d8-i70h6/g5.f5.g6/h70g6/e6.a2*e6.^2)\0'`4+a5,i=4|PGQJBE>6:6-85,99/8:/47,36+4:.5;/5;/69.69.68-57,46+19,19,19,19,19,19,19,19,08+.9+.9+/:*0;+3>.6A17B2gw]umv‘nf‰_RwKAh;Mj:Nk;Pm=Pm=Nk;Nk;OlVsCZwG]zJ^{K_|L_|LVsCLi9=H@/:2#.&gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXqhYqhYcjpmtz„’£¬±¾ÉÍÓÞâåðòðüüòüûõþùøÿ÷úÿôüÿòúýìøùçöøãööìù÷ëúöêýöæÿôâøëØçØÁÖÆ¯À±šŸ“}vn[ZWFOQCQWKYcZbme–˜‹²²¦ÕÎÆêÜÙõããüéëÿñôÿ÷ùÿýýýþùøûôõûñúýòÿÿóÿÿóÿÿñÿãÊ¹q[¨WD¬SCµQB¹MA¿JAÂG@ÆE?ÉE@ÊE@ÊE>ÉD=ÈC<ÈC<ÒC?ÒD@ÌEAÂC=³=9¦;5œ;5•<6Œ<5‡<6ƒ=5=4<3~<0=1€<1~:/~:/~:/}9.|90{8/{8/y90{;2{;2z:1x92w81v70v70u6/k90j8/j8/j8/j8/h8.h8.h8.g7-f7-f7-f7-d8-d8-d8-d8-h6/h70i81i81h70i81j;3l=5g80k<4b6-a5,oC:xLCtI@uJA:=647036/7:18;247.14+25,58-58-57,46+46+46+46+46)/7(08)08)08)08)08)08+08+19,08+08+/7*08+19,3;.4e9Jg9Li;Nk=Nk=Li;Li;Mj
    UrDYvH[xJ]zL^{M\yKQn@Eb47@;+4/!*%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVofWpgXpgXqhYriZhowmt|‚‹’¥®µÂÍÑÔßãäïñòþþóýüôÿùöÿ÷úÿôüÿñýÿíýÿêýÿêÿöñÿøóÿ÷ïÿ÷íÿöëÿïáöÜÍäʹƯ§”ƒ€sce]P[YM_bYovo|…€¦­¾À³ÚÖÍñãàÿìíÿñôÿñ÷ÿñ÷ÿ÷ûûúøøÿøøÿúôÿõîÿïòÿï÷ÿóÿñÖÿðÖÿȰÅ}g¢O=®Q@¸RD³C8ÀIAÄH@ÇF@ÇF@ÈE=ÇD<ÆC;ÆC;ÓD@ÐE@ÊE@¾A=±;7£74š93•<6Œ<5‡<6ƒ=5=4<3~;2<3=1~:/~:/~:/}9.|90{8/{8/y90z:1z:1y90w81v70u6/u6/t5.k90k90j8/j8/j8/i9/i9/h8.f7-f7-f7-d8-d8-d8-d8-d8-f5.i81l;4k:3j92j92m>6qB:n?7pD;g;2g;2SJŒaXTKpE<6=52913:27<5492/5+25,9<345-35*24)13(13(35(46)57*,7',7'-8(-8(-8(-8(-8(/7(19*08)08+/7*/7*/7*08+08+7@+9B-=D2=D2=A29;-35'/3$3:*JVBcr[f}a\wVLnICgA=c:He7Kh:Nk=Nk=Kh:Jg9Li;Nk=TqCWtFZwI[xJ]zLZwINk=A^05;9*0.!'%heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheVhdYkd\kd\md]meZmfVg`MjeOnlWnl]ff^eeeqqy‡‘“–ž¡«³¶ÃÈËÙÝàìíï÷÷÷ûùúþýûÿþúÿÿûýþøûüöùüóúýôùÿõùúõùúôøúïúûëûýèöùÞäçÈÒÖµ¶¼š”›ymvW\fK`lTq~lƒ‘€žŽ··µËËÉââàïïíôôòøøöúúøùù÷þþüþþüþþüþþüþþüþþüþþüþþüæÿÿðÿÿûÿÿýïîЪ§ a\™D=¸MEÄKBÈC:ÊA7ÎD:ÑH>ÏJAÉI>ÆG>ÁJ2¿K4¹L5¯K4 H2”F2ŒE3‡E5‚D5C6€@4‚>3…;2‡9/Š7/6-~:1~:1}90|8/{7.z7.y6-x5,w7-w7-x8.x8.v8-u7,s5*q3(h91h91h91g80h70g6/g6/g6/f5.h6/i70j81i70h6/f4-g2,k1-k4/n70m80k9.j:.i>.iB1dC2gJ8aJ8raOyn\ƒ|j…‚qOL;4:04:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4./4..3-.3-/4./4.05/0;32=55A77C98D86B64@22?.3@.DQ=WeN\jSSaHHV=DR8FT:Ic>Ke@Ke@Ke>JeOjAUpGYtK\vO]wR]wTWpPHaC8Q3).2&+/$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheVhdYkd\kd\md]meZmfVjcPlgQmkVlj[gg_lll~~†’ž§±³¹ÁÄÏ×Úâçêðô÷ûüþÿÿÿÿþÿþýûÿþúÿÿûþÿùûüôøûòøûò÷ýóøùóøùñøúíøùéùûåòõÚáâÃÌЯ´¸—‘–vkrSYaI_kUtoŒ˜Š›©œÀÀ¾ÓÓÑççåóóñ÷÷õûûùüüúûûùþþüþþüþþüþþüþþüþþüþþüþþüîÿÿôÿÿüÿÿÿüúÿíêñ¿¸Ã}u¢J@³K@»J<ÅK>ÈJ>ÄD9½=2¿?6ÃD;ÂH3ÃJ7½M9³J7¦G5™C4D6‹F7ƒC7C8A7>5‚<4„:1†91‡81}:2}:2|91z:1y90x8/w7.v7.u6-v7.t8.t8.t8.r6,p4*o3)i81i81i81h70h70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71m80l:1k;/l>1j@0iD2hG6kP=gR?ufSvd‹†s†ƒrML:4:039/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4.05/-80/:21=34@66B66B66B45B16C1CPAO6BP7FT:Ic@Jd?Ke@Ke>Ic3L/).2',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheVhdYkd\kd\md]meZmfVmhTmhRmkVjk[jkcvxw‘‘™¨ª¶¾ÈÊÓÛÞêòõ÷üÿüÿÿþÿÿÿÿÿÿþÿþýûÿþúÿÿúýþøúûóõøïóöëñ÷ëô÷îöøíöøêö÷åõ÷áîîÔÛÛ¿ÉÊ«°±’“–yuy^kpZt{iˆ§œ¬¶­ÎÎÌÞÞÜïïíøøöûûùþþüþþüýýûþþüþþüþþüþþüþþüþþüþþüþþü÷ÿÿùÿÿþÿÿÿüúÿúôÿöíÿÑÄÙž•L=§Q@¬K;ª>1¸G9ÑXMÐTJ¾?6ÆD6ÇH9ÄJ=¹I=ªB7?5•A7’E=‡A9„A9@:>8~>5<4<4€;4x<2x<2w;1w;1v:0u9/t:/t:/s9.r9.r9.r9.q8-n8,l6*k5)j81j81j81j81i70i70i70h6/g5.g5.g5.g6/h70i81k:3k:3l;4k:3i:0j;1k?2lB4iD2fE2fI7lVAjYEviV†l‘Ž{€mEF439/28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4./4.*5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3ES:H`>Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8,C)).2',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheVjcYkd\kd\md]meZmfVniUljSlkVlm]pqi€‚ž¡¨º¼ÈÃÍÏÜäçóûþûÿÿúþÿüýÿýýýüûùÿþüÿÿûÿþùûüôõöîîñæëîãçíáíñãðôåñôãòôßðòÜêêÐÙØ¼ÈÇ«²±•¡¡‡‘“}‘’€œžª­¢¶»´ÀÅ¿ÜÜÚééçööôûûùýýûÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüüúÿÿþÿÿþÿöòïûôîÿýóÿûíÿõäêı·ƒn”Q>¡P=¸XH¸L?¸D7ÀG<Ç>4ÉD;ÈH?¿F>°?9¢;6š=8–A>?;‡@<@<}@;z?9y@9x?8v?8v=4v=4v=4u<3s=3r<2r<2q;1o;0o;0o;0l:/k9.j8-j8-i7,n72n72m61l71l71k60i70i70l:3j92h70g6/f7/f7/h91h91j?6f>4e=1f>2hC3iE5gF3cG2cJ6hV@k\GskV‡‚nŽzor_9>*28.28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3-.3-)4,)4,*6,+7-.:01=14@25A36C2:G5Æ=7ÈA;ÈD?ÀC?´<;©98 9:›==‘==Š>>„@?|A=xA6s>6s>6r=5p>5p>5p>5n>4n>4m=3l<2j;1j;1i:0i:0i:0p62p62p62o51m61m61k60i70l;4k:3h91e90e90e90e:1f;2dB6cA5cC4dD5fG5eH6cH3_I2^L6eV?jbKrmW„ƒn„‡r[`L3;&28.28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,-2,,6.+5-*4,*4++5,.8-0:/2=/2=-5@06A05A-1=)1=)5A+9E/=O5AS9FY=I\@J]?J]=K^>L_?TgG\oQcvZbtZYkSK]G6G4$5"&+.$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheVjcYkd\lc\md]meZlfVlgSljSlnXorasvm…„Ÿ¤ª¸¿ÉÖßäîöùùÿÿûÿÿùýÿþÿÿÿÿÿþýûÿÿûÿÿúüüôóõêëíâãçÙßãÕÜãÓäéÒçìÕéíÖêìÔëëÓèæÏßÚÄÔθÔÍºÍÆ¶ËøÐÉÁÙÒÌàÛØëååòîïòòðùù÷ýýûýýûýýûÿÿýþþüüüúþþüþþüþþüþþüþþüþþüþþüþþüÿøüÿöùÿýýþÿý÷ÿýïÿøëÿõòÿøëúçÿÿíÿïÛ̧”£lX£ZG­VCªM;ÁA8ÃB<ÃD>¿D?·?>­;;£99œ:;–<<Ž>?…?=}@=wB7o>7n?7o@8n?7m>6i=4h<3h<3h<3i=4r73q62q62p62o51m61l71j81h70g80e90e:1d<2f>4f@5gA6]C4aG8cL:dM;cM8`K6]K3]M4]Q9`Y?miPss[€„mt|eFO:2>(39/28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+-2,,6.,6.*4,*4+*4++5*-7,.9+-8*0;+4?/5@/4?.3>-3?+4@,7F/;J3@P6DT:GWºH=ºH>ºG@·F@°C@¦=:97—<;‘=;ˆ>;€A5i=4j>5j>5k?6s63r73q62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5bB5VG4^OmmSsw^z‚jcmU2>(5C,4:039/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1+,1++5-+5-*4,*4,+5,+5,,6+-7,,7)/:,2=/6A17B27B25@/4?.2?+5B.:G3>L5AO6ES:JX?M[BTbI]kTcqZ_lXUbPERA2>0#/#(..&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdTjdVjcYkd\lc\md]lfZlfVomXmmUimVgkZembr{xŽ—œ¨±ºÊÓØäëñöþÿ÷üÿøüÿþÿÿÿÿÿúù÷ÿÿúýýõøøîðòåéëÝåéÚåéØåìÚæíÎèïÐéîÐæéÎèæÏèãÏáÚÈÙÏÃÚÍÄßÒÌìÞÛúììÿôöÿõùÿõûÿøþýýûÿÿýÿÿýþþüþþüÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüÿüúÿýúÿûøùýüøÿÿôÿÿðÿÿêþüðÿûùÿûÿÿôÿöæÿôßÿãÍ×­”¢sY°SA®Q?®N>°O?±OB¯J@¥C:š<4—<7‘>8‰?6ƒ@7{B7tD6qE8nG8s>:s>:s>:q>:q>:q>:q>:p?:sB=rA8l=7l=7m>8n?9r73r73q73n72m82j81i81f:1f;2d>3d@4bB5`C5]A3\@2[?1QI4[S>f^Gg_H`Y?ZS9ZS7\W:ZV;WW;knSrx^u}eUaI%37E.4:04:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1+)3+)3+*4,+5-+5,,6--7.-7,,6+.8-2=/6A39D69D67B46A1/<*2?-5B09F2:u@:s@9o>9o>9n72n72n93m;4l;4j;3g<3d<2c?3^>1dG9cG9T=-O8(M8'D/TR;PN7KI0MK2]Y>ieJeaDVU7XX<]`CosXz€fcmT=I1,:#1?(5;15;14:04:04:039/39/39/39/39/39/28.17-17-17-06,16016005/05//4./4./4./4.,1+,1+,1+,1+,1+,1++0*+0*.5.-4--4-,3,-4--4-.5-.5-+2*-4,08-5=29A6=E:?G7B25@03>-1<+2>*9E/BN8IU?O[EVbN]hWYdTLWIF5F4‰D4…D2}B0yB.s@-o?+v?:t=8u>9v?:t?9q<6r=7sA:q?8q?8q?8o>7o>7n=6n=6n=6l;4m<5m>6k?6j?6h@6eA5cA5dG9[A2^G7\I8N=+F7$G8%A4!IM4GK2DG,BE*MM1[[?abC`aBYY=dgJsw\sy_X`H8D,/;%6D-7=36<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2+,3,.5--4,.5-07/4;39@8?F>BIA:G69F56C13@.2?+5B.;I2?M6KXDR_KXeSVcRKWI8p;5q<6vA;sA:p>7r@9xG@n=6n=6n=6m>6l=5l=5l=5l=5g?5h@6gA6gC7eC7cC6`C5^D5aL;UB1ZI7`S@RG3C;&E=(GA+>G,BH.@F*<@%?B%LO2_`AijKaaEnqTvz_gmSHP84<%4=(=F18>48>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*(/((/((/((/((/()0)*1*+2+070.5.+2++2+.5.5<5K:4-9/-3/-3/,2.gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWleUldWlcZmd]md]mf^mg[khWmlWimThpXht`hthm|wˆ—𥴻ÀÉÐÔÛáéðööûÿúþÿýþÿÿÿýÿþúþþöýýñúûí÷úéô÷âîóÝçìÕàèÐÜà¿×Ú»ÖÖ¼Ù×ÂÝ×ÉßÖÍåÛÙìàâøìðüïöÿõûÿùþÿúýÿûûÿûûÿýúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüöÿþ÷ÿþúÿþþþÿÿüÿÿùÿÿøÿÿ÷þÿøÿÿøüÿùùÿýúÿÿøþÿøúÿõöÿóÿþìÿýéÿòßÿñÛÿðÚñÒ½³zyS3i?3i?3i?3f>2f>2f>2f>2aA4`C5`C5_C5^D5[D4ZE4VE3XI6OB/\T?oiSc^HMK4IG0LJ3;E*?H->G*48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0,+0,*/+*/++0,,1--2.-2.051.3/+0,+0,-2.2738=9'4.:0.5..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWleUldWlcZmd]md]mf^mg[khWkmWjnUiqYgs_drejyt…”—¡²¹¾ÇÎÓÚâèïõôùýùýÿýþÿÿÿýÿÿúÿÿøÿÿóþÿñûþë÷úåðõÞèîÔàéÎÛܽÕÕ¹ÑÑ·ÔѾÚÔÈáØÓêàßôéíþóùÿöþÿûÿÿýÿÿþÿÿþúÿþúþÿùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüøÿÿøÿÿûÿÿþþþÿýþÿûüÿûúÿúúÿùùÿù÷ÿù÷ÿüùÿÿûþÿûûÿüùÿûùôîÿÿöÿþôÿýóÿüîÿ÷çùçÓéӾϴŸ¶š„•u`yVBlI5mH6rM;uP>mF7iB3gB2jE5nI9oJ:pK;oK;eA1eA1cB1cB1cB1cB1cB1bC1\G6\G6\G6ZG6YH6WH5TG4RG3PH3MH2fdM~~fprZVX@IM4HL3;E*A.;>+9?59?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.21043376598:H7=L9@O<@O:8F91?2,9/.5.-4-,3,fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWleUldWlcZmd]md]mf^mg[khWkmWioUiqYgs_bpcgxr‚”– ³¹ÁÊÑÕÜäéðöõúþùýÿýÿþÿÿýÿÿúÿÿöÿÿôÿÿñÿÿïúýèò÷àéïÕàéÎÙÚ»ÑѵÍË´Î˺ÖÏÅßÕÓìâãøíóÿöþÿùÿÿüÿÿýÿÿÿýþÿúýÿ÷þÿøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýÿýþÿýþÿýÿþþþüþÿùþÿ÷ÿÿõýýóýýõþýøþýùÿþüÿýÿÿýÿÿþÿþùÿÿüÿÿúþúöõýøôÿþöÿþñÿþïÿûéÿóàöåÓåÓ¿Ò»©¹ŸŸƒuŽrd|]I}^JrVAaE0W;&Y=(Z?*X=(`E0`E0_F0_F0`G1`G1^H1^H1[L9ZM:ZM:XM9XM9UM8RL6QL6NL5QQ9ikS|€glrXSY?DM2>G,:G+48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+/.,0/-10.21/32/32/32.210A.5F3;M7>P:=O7:L47I/6H.3E-6H0:L6MJ9EB1;A7;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+0,+/.,0/,0/-10.21.21.23-12,01):'/@-6H2;M5=O7?I.9F*?L0=J.AN2DN3HQ4LR6IN0JM0ZY;miLhdIc]C_YA_ZD`[GZUBQN=LI8=C9=C9=C989>89>8;@:;@:;@:;@::?9:?9:?9:?99>:8=95:6384162/40.3/.21.21.21-10-12,01,01-12-12$5"*<&3E/9K3XW9UT6SR3KE/JD.FA-D?,A>/@>1??3>@5<=5;>59?59A67B48C57C57D3:B79A69A68@58@59A69A6:B7:B7:B79A6:B7;C8F;7B:7C97A66A16?.4<-39-270.5./51-7/-9+-<%.B3J7O7Z 8Y$8W+:U2:R8;P==O?>O=:L6@R8EX:EZ;DY:>U93J0(>'.5-,3++2*ZgM[hN\hP_iQakSckTglXhkXghVihVifWifWkeWmeXmeZnf[khWkhYkg[kg^jf]jf]hfZgeVgjWglVfoZerajwnzЉ𫲷ÉÓÑØÞáéìò÷úøþþùþúúÿøûþóúüï÷úé÷øæõôâíìØéæÓåâÏÜ×ÄÑ̹˾­Á´¤º¬Ÿ¼¯§Á¶²ÌÀÀÛÐÖèÞæûóþý÷ÿþûÿÿþÿþýÿüýÿüýÿüýÿþþþþþþþþþþþþþþþþþþÿþüÿþüÿþüÿýúÿýúÿüùÿüùÿýùÿýùÿþúÿþýÿýüÿüûÿýþÿþÿÿþÿÿýþýûüÿþÿÿýýÿüùÿøóøíçòåÝöèßÿïçÿûÿÿýÿÿýþÿÿýÿÿûýÿüýÿþüýÿýþÿþýÿÿýÿÿýþÿý÷ÿþîÿÿæÿÿâ÷÷ßýûââàÇ‹‡lRM0TM0QK+SJ+WN/UO/UN1TO1SO2QP4QP4PP6QM2PO3PN5PP6MO7KO6HM6EM5HQ6EN3BK.AH)BI(GM+JP,KQ-NR/PT1VZ9^aBaaE[[?VVVV>XV=YW>XW;XW9WV8VU7QK5OI3LG3ID1DA2B@3??3>@5<=5;>59?59A67B48C57C57D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C8F;76<83=51=/3B+9M*BY-Ia1Nq7Mn9Ji=Fa>AY?:L<:K9=O9DV5:@69A67B47B47C57D3:B7:B79A69A69A69A6:B7:B7:B7:B7:B7:B7;C8F;>F;>IA>J@?I>>I9?H7>F7>D8=B;>E>;A=6@85A39H1BV3Pg;ZrB]€F\}HVuIMhEBZ@9N;5G74E3XR6F;?G<>H=>I9?H7>F7>D8=B;=D=;A=6@85A39H1DX5Ri=]uEY|BXyDRqEIdA,6H2@R8L_AQfGShIMdH@W=4J329107/-4,YgMZhN\hP^jRblTemVgoZjo[lo\lm[mk\mj[nhZnhZoi]ph]liXkhYjfZie\ie\ie\ig[igXfiVchRajUerao|s{‹ŠŽŸ¦Ÿ±»ÂËÒÕÜäéðöòúüôúøñöðíðçéëÞáãÕÚÛËÒÑ¿ÌɶÉıþ«¾¹¦»´¢Ë¾®ÓŸÝÏÄæÙÑíâà÷ëíÿôúÿøÿÿ÷ÿÿúÿÿüÿþýÿýüÿûüþüþýþÿÿþþþþþþþþþþþþþþþþþþÿþüÿþüþýûÿüùÿýúÿýúÿýúÿû÷ÿúöþùõÿýüÿûúýùøüúûþüýÿýþÿþÿÿýþÿüýÿüüÿüùÿøó÷ìæòåÝøêáÿóëÿûÿÿýÿÿýþÿÿûÿÿûýÿúýÿüüýÿüýÿþýÿÿþÿÿþýÿþõÿüìÿüãÿúÝþýèÿÿëåãÌŒˆoRL2UN2TM0WN1VM.UO/WP3VQ3UQ4QP2ON2MM1PL1NM1NL3MM3LN6LP7KP9JR:LU:IR7JS6QX9SZ9U[9]c?gmI€”a’¦sŸ±š«’¡xˆ”pr|Z\bFLP7KM7LK6KI4NI5PK7TM:VP:WQ;VP:SN:QL9LI:IG:EE9CE:=>6F;?G<=G<=H8>G6=E6=C7=B;:A:9?;5?75A39H1BV3Ne9Wo?Svs0wTR6gx;izGyxImRRob5s(|!frH3ND3P@La?*u90Rhsms zfHVQI@WK7=ePg`$@2zvj`Lo8@=_ zh=_>@Nr;JwNl8h_Ak-8Pa&ia*oazQO3nLpV3nMc#;-(-Mf}Nj(nVDOhhhG?l!C=_9 zBxNPgGJ+x)^z|Y@Qc_X~IfR~qf*y@zMxy`UaoG!ikpR*FYXm@c00;&ofB`T20Zae@ zhyZx~yZ;7=000CN5)oe|8GwNQodW=`vS7l?IRJzJ2mnC|pjTxcebh(Y#-%cSiuP`Z z7b`Q!_1pR|!@MD+rWkf?O7Nt`_)Y3DK@Cl_v%Yj?L-vln|NiU3GC56>#vZR;xYSeT zzg9kxeIg;}v+4}fZp;=CO!}ZOV@xve^I5TJbI0hjAJ29qt6|?Nv4=Hu-mw|)#wXw7 zrcGE_dOyyXc0TkN2-jK)#Nx$mo+$o{+odnb=di`vu#X z0hWn{KHwsY`Ry8))Y4mKBNLT;*biz`*ENJNc0eX}YWBjWpDQ%(B80Ven_7l9xEi~tOUBakRUDt5Gp0yT%QA`M3Aihd+lj0F;c{*Y$?%c}+1 zSjf?diK@&mkC(v1x_RQw@(HUrMiIjWP3uifn+WCC@j{EsXsY7DGGU#Z67@7*gAZ3P zvAy((pHsi)^MZp<`?h_926LXs4_kbhiT#V;%p77~@jjc63I^oqtAvF(Mi2LWX68OT zKr=IXt+v|b6<3sNb0zdS(i5qS6j`xR@ytg@wUL_1cFV5z5aH!r?%s=d#hB@_#>axF zZzC;2Z<;D>YN28yqAh8{s(&zS1%7=X=|wTu2Aq%Pc#lnwFylB7 z_G@u0)FINhs{8dYO&uL$WrnfFHhTY9bi z#fWZGPH*(8e@^bnESq*Hc)Wsv*(Z(HEv*UXc>7QdT^YDb`LR~ILGdw%qF8}&rL>Gi zML<^AVOaJyJM2DP(y@A)Y^^Pj3Ewj69=6aCR*QUKzvt#(^WHs>>atUA_K(CFI z$sLm{G>AJlrKBDf#>L;!< z@_;D?XeQYqO>2}g?H-*?q)BW|OxQNI=8#q^+Q4Ke{{DBr{M!s9&TV$v>9@`A_>ftD zpqnX231B0m@e+`8#dmJlKYag}?pIO@B7i~RNH79Lg;pS>rqN|rbo-m^S1K$I+$+Sp z`Y!cj(H0Im^VKOMZB6#A&s+ygM?C9w0|OQC;~^UrkCri#SLGjAicOv&T4XW5as;tVP-Uhd~r{vOC87^{^cYVlR*~xvEGCPutdd3y-8IJT~;QQDk&BQ5)$#7PARJ4-% zJ&=m}{ejv3`&$}ZxwOfLrI_bw^V~k19*>+^qOdM4aOjCy)bp+@u#neaT^kkPA8oh> z>k2CZ1PZA@rKtNiN}y|$c9aWsRbUqG1KfkVsVU+<^@9hSu>z#oq}dc=PgT~!xrB|F|s>0EK}NNVqVHT|w81;5J&s+6^0=^pC<3 z$%B4Er|H<7$?{5hcfCYi#*O$evm1BP(t8}k&mY2NDk5WR>)FD&Yy`3?eSd<*4qDR* zKe;V0*wkZM=9rK^4ZHB(d(p7e^(jA|pO zXG6)4&DBrpYrC2-m;y=zt<4&(SMMBSy9~bVH=c3pL61)ej#>lft@0neE}sc1i|_Iq zn!ht}?;*B0m2GbGw>kBh^FwK@{@{zczR~P_{&Ku{$L@Y6$uzX;s5BufJ*%Ik%9&J= z;H%EuQ+Tnb?v`~?E7ZRA$##XuPQ{%OO?gR6V$csJ5wXak^I61}&5bLt*r8W@{ohUh zw>tsCkSORCP6)T)q=LGCZ9pEWSt8U!A_)I!U9eo_uS@K~#z&dp5aPy-O|kZOp*H0j z%K)m5a`J^jWh3iTafQ11iea)UQ!;U#JUz5rWL9%evijJdo<6t^#+@YNx^Z2#IBnbD z(C4wJ7q{3U3I!zoyoD`l52k)mAJMpctZ%ynKvDwLZq4-y!UU2jCP0Ih?duNmy+^4_ zp@%C(PLodM;gCevi%cbwa$6+`toqPQgvlxlGhe-~9*5Dqw;dr6e>zqw8efo1)j7^< z`;#unU$4+SWKa`Giq0WbMKzH!N)fykkB7$coO91p8}l!~SsCKGg3CPRhLflT?j0t) zn2x2OfH-YClN#E8&YWDH{Pp?H8=KV^5yN$iaZkLI{`6`06;DRR)l0!0Jtcd2zP&4PkBj! zQ@5XrrEs^C&HKb#m30K zxC`FSFB&ejpJoV|Oe%PTs$3%7Bi&XMpG=+A))kz`&~!O_EH~^dP2ql`p4#V~payJ~ za;e*6(IhZKChDTvJGOD}LdyhtJ~ZO1-iWHF&G8%@c)TVO?f?sKiABG%0a-e#^ZDzm zgvdX392PkpNj%?WO@G{hDAh4ENCTPD0hujr8+R zo6RO{5hU#%s8^MW)$^;XaWx^A06i=FuN2OasNDX_2*Jf?N_K&}7LP+$UL)!XwGYcX zsTI^(6$7*`0fsMXUp+p{;M)sM#Vwa)Z`WEQ&>2W9@}dsoNt@1fvtg@!I{#dQ_D zKW@g{XC@p zFuDuJMUX$?>iOCz9`@o@WW%FO)wWZ_BlAew7rO_Fs$cc67Tu*w!`8}A%^9^;(7q4r zqBX*UCUF@Ni0!bFg9Z?&t$HZW>6DheIe(n?A%hSpF zRgU68+|whT9v7U-*3e59^0I;xzs++&pDVOjVAo^c6&P3FfBJ0z42neQDp>uu>A1F2 zs0M$%-5#GcV~3{npyasc`1D>kN-E{(&q3*c%Wy}hB9rxEElQp?ckwpLu>s|R3z${^ zTzpb1;X=lq<7s5{am3Ec&igyA?tOjiV;RZEb3+c#JIG1Bgnbo#-<5RJ-4Qr#LeP3q zq|0`xPSyVEc2=OgZ`E-=c9_^b;oVH6`RmuguCItuxzV0CY zE)@v4a*`_}fnFQQR9z2Z<>2st>;!ruJvx93f~gP3O5jy=Di$y{+vyBiaolB^H*Hl6 zGr^|HKyGxeQKg;hd3$kHd7NX0aHu=z)=G$8AN>uK`5}N;@&ba6u^hl7v!d#b;kw`9 z+YX3Z(5RTN*tpSNfL^Z%yK;rS+M=&M{EQzL(Sy=IPk#m5iQyd#dBFe0OwqENrJRu16pnnObI4Tc_RYBoq zGMuCL_%1@CCi_+BNETm=$A_0n95S{FcXTfe_d35I!&b>GMUm#}QGx_Itxc3m+j88$ z@OD>34*SISMNS(D!){|lZW0kqHD{MpqYG{>yYoJX!T;s+IL?%nVYgr3WejZ0HLrVA zvWq#_wq=b>`+a9he_dZ8?RkE@0l|7Hy6WbqOeVy#)?k`JBOX!k=FO;Utje&=*gDxS z)1xnp35Pu9{bkvf^x3Qi=e-#P@jSK zbGtGm@tCM_qu+U?mYLOm=pk$kYWh4DS@!KB`XjU2M!i0u;{!aM_AIP)FRDSpFnUnm zA1`ytF1{64P9Xezi_hkUc}!G3Ll|pK)I+^08R*E{9>$ua@}z3F-3qXo9MU?3C@D78 zB`+ag2~i?3pj?s{+sB5hl&NBJ-8wugzY#>~n?XiQG}KNxUCcAVUy&aXp##FsN8L2B z0pAgj|CX6)v`XMy{X1}>I|nSdP}o4blHJV0|F#(sY7D7Oe*ItuF(@xw&9~{)&9S0l z49w7x67+*vf8p~Tw5>pgulQ>&4jJHP#|CDM`0DTd;+%oh8N}W46`PxtjPee76~J9DA9UwyblfpauCtd`VG6>MZS>B`7X*YpNHR4OX-;qF!- zj=efy>O)l)k#RwN7Kt>+gnS*k1uuLj*T!(=nV(5!sSk_ly0crL8_R%Daa6SCYu)^u zUqxl`IHNNe9W^=|%?=ig@QQ7kx!*Ja;=3n##rTw47aoZlIrEhE zfOsDUla}df*ntft1Gtuye%+{+69vQ+Ju=F0d=j-;gZaY|)Z=ssh(actso;A|y;%lM zjH6Dt&qi*)F{WUlbf@3Y#839NYoM1o^JT!E+TMA3ggxLcQOOv3!!J7I2}O#PL?xOv zu=@9B0lw#9L9RQ}tap9zs+6;h)?uoq$~u0xwW?^QgoNJv*LBWY#{rfT0W{6EO49qr zZnG^z}sz1pX-r(?BWjMKI_t3Rhy-xk}eCA^fTg<2f}>~Eb$6S UV9?7uwJ&e$(diH-;xA|a1JT3r4gdfE literal 0 HcmV?d00001 diff --git a/3rdparty/openctm/tools/jpeg/testorig.jpg b/3rdparty/openctm/tools/jpeg/testorig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9816a0c6231a7c5eaafd445368a9eeb1cffc63df GIT binary patch literal 5770 zcmbW(S5y;DmjLjD7OF@IQiAkel%{kP4J8sV5JE?av`~c5K@n7n^ePbPA&}6K-V}sT z6$Ap(MS2lLiZsRb|9yLQ&)KKly>n(BX70IXelrg!N z0e1kjG&CR@YFZEoL`O$U&&bZi$iTqJ#mdIa&dberm6sa=;TM(_;}?_`f|9_4@od6bEKn7r$5-13uU;$FH z0RQv=`2Oyb8u+gO{AU0uD5v}?P-#-n?}3J#cObo3loIJvk*M8(7l0; zqpPP6GeMf7%*-t;9UnS5ySTccef|6c0)v7>p1+8UijH|1o0^uM@hUSb8(V}c#+Q^5 zh-Gi;>KhuHnp;}mclVHb`}zk4$HvJMlb@%iXTB~iudJ@EZ)|S;*grTt`gweEdiIYC z2%!8o>+kq)*#B^`{B==KQBhKX{&4{*0{?bO7Ak51IU3g62#~!Go1lCIExUF~VQm+k zkb?0Z*a0(2&mpY%RpiG%w13I|cd%#wFWG;={@XPJV59{8y*x@5fEHkX6&-NqEJ3S? z<#s$i(D{LY#413eeOAVPAa+U0kWstlJphrN%u^#VXy|6n@KTl<_J$Q*uxOI8hlbqK zDP}!=!sKQ-&!OyG_4ppirXlO<(FiKvWV~|;@?o?ctY?&aGu)#B9wM@=mIcwLXC zX;3_2+-1L{U}YJV%VV+Ar(9mj9P+K3FD_oZ%sn9Zc?1GGNv^OIRS#2&?}_TF>e&s- zeEWVW!?2H0;x#eQl%iEN_sV_eY$03yrAB{J)^xZIVCD18ug0ZFoB38Vyi9z^i#SNJ zC+SgSIV@BD^;N;TjOtGZ3D){kqoHeKjVHA@lbgPpi(M(j8Vvd{F;j}SE=gr^WJ}BCLveC z3P&@zLLUF_Gv(C!3XdJ+j0t?C_|v$Va(nw;9`DC@bw8LY6`#POjhd~@tFq-7iz7YG zkTtU2MfEHTUq3JgCC5Kpq)>etsqf-}f0+U+8~IGVZ{9T=pKTVLS1P%n`nRoZ zt8pD|uMng_I{zEq4-VK}p%+1EpmlsZNsD?1{taw00G6d&dICme;5rQtLSl#_r&SYd6hX$**^2 zH*IEu^m?-&r^PP)(sh`8Q*Y<(R^}zSW;=|S$O~A5?{sZLJ%1-@m|!JaQpSUFKFvkb zRP-E4Hy+vC$C)lH*A_e%QX1Q^q_RwCap4keiOC9=YTSFgLWB6k{RPB1SXnHI)!7&( zt8@8qIRb@4xYr&jwzcWg53p2YELbv=nH;vT)@B7?Y1~JN5zkNj6ioR{`Y7JyT<1S0 zcjNuBnNcn(`=20wO1W-Drx;31XXH1v&)G4!Z~5(qsx^mYW|=Y~0rtQ10=e|&qX}S# z;fc6x5p6KDwkmcT-y9|NB)Jn8?~AN*nD4q^83u7x!6t}!wAXrd)S#4vuW4iMP4PE% zwE+(1IjLy9Px9eV6$ggnFO(Z-Q*j)v!mj&>$Fb{ZTO0p=Y+4guzb0}D)W)}ILL+`@ zvG}*DvB(EPPkBmSfuCkiVDX9Hi5jnx`tm0Ar6`dSSe zTe^G1UF=1*cY7FW6PU^g%DQt6Y5!?Ly9}3VG*(G%;>pb+0~tzw+B)4;9_^TlMg&f$ zi})%ePJ~P+Uiq-orP-jrEZ1Vv1->?;g(2wjub7I>t;642&%^b){6@UdLFqTF_>}HP zttdWbnQZtF^wP#B)!V%&y~4k@_0@BqdJbNnuJ8Hi*rm&U15*ZJvmFLL$pMR(4UIai z_2Pu=SPAkz-W!88Ji4 z=6=P}UY+>du6_5RSTz{+o+iAX=X?%1h|&pB^v0aP*fY`#`W4N5lwJ=gXsTi*&Pz}( z9}Iv51Ac6#B7N^VJW9~c4ElAur_q6PG0j{%ub9}s)POUa9?8nq-s&svCKA_G2wwiA z7r6!bc+8pU_$&UEMbv5!tta<=I_VA#si{19xo7EF_Itk7CaFBhbMEpsw+6F#nuSqb zBOwX)m+f$JpuA9%74O~NVhg(N z!);TRtT_sKZ}b+Fy~;rv7)I#__*ucjs{(_;!Is*CgSu2Jp(aJ9oMKqv$i8F(7=3C2a8fAqv3w@#8 z?@?>5Ldmi^T@gokWB}JN$Yb*P<_{>^*5Pi)E#ByN9WFzvIQD*Njpo9xO2fbbj@6G3 zg?4pjzFf3oRVaiVz0C5{^V-*wj4m1^W4Qa|^A{8zzc%9c)5KnX~U+JgGovhEM9a0rk{v4j7YErx-q^+CRPLrTSK6+U<}KWDn(Iep0~W4hy`HM$wM=!75?hj?5S zdAXw8JBB{QhC5lXL@gYxjl$~zOm3ULMpEsz&TI=Y$h83b=)Crd9m97X?QH$WMeSQ_ zZmet2gJ{rL?9NZ$n`;rPuU$zj&32M@FLHnbRaQLK3CL6cWHQInAb~Sbc?6v|NOGXC zsBNp#kkST1e zn^y$BOY;a%KnEmSHDxyOBOM=-pF}F#1S)o$W~iLsJyIXG;Lm!O%oAuF-z->%H>qE1 z*gfLJxBvYsi|zv;dFh+=Csm`Rb$0#1vvX!~#yPl_pXTb1<-Auz6fTWX-pq;(Xa+nB z;X~8hmh6lIQE_ASL?U0_sZD3~9Zz(tgEdLNDf@=G-mT8IV?Owimz_);$@r$6FE27@ zX!5QJuSt`Dr+AP-+a=V*Su$7~j0pA$Twb^KQ=*$IJuzzZF)4HL5aC>azN}cdDS+7s zTXy{Jw|rDmrc~iU!aP0p|TJ@wA3maZdy!cX&i z>)2Pwn*- zOT^H3>#@E5|B#QLEH;nTHEJaV0Yk?cVmLU;F3-Mc?-M zx!#$gDd8JJr^l;N8_+9TsWnl`roMS9|qwB^RiK`nman zsimw9eYql-%DMLYHOs|}2W{5PId=tkWIhUT3?}|PLk;)BF+43eeMk6GRLiO{+`6&l z{JPX})>XiU)cW?la*a8>im6Xy(%y}uO&RRR2%wi0fO=Qq4`8y&?KViTG*u^MsAcGC z2@c#XVUuq_#7y51@RDc#bY_xkg|6M0rzM!avCxnt4Q4IHK}trSX`Efuo9Bg=oUyp9 z&V<=-pr0!Bh_L52Z|0!^6@5I0VHv6dCa=^J!?^>UwCS}4dBbb^Ce!2p09bxe8$oP+ zQ^y3wSF?u!_*5(V^ahmAg4y>&@I7eZTzOeQEdMz!&j<~Isfgvdbw}L8IEktF%B3>O z=(ZN8|BA*IJCW`s45N?Ig)Ny=CL0R)oNExjFu6O2-?T<59i{|Y-|F?vZ~X!6CN@<1 z$T~TzH`#AmAtH09FZXn3kO_x6H)9^fqux2kU+mjHn0|V86kTF5hrS{=^PbLGE1YO> zg*)R9Ad|kmPGvp*!hiN8td|$aJY(Rn%;jX8C&WQ8s{!3>{nJiex+-J9~LKZ zmIl-t(6iO2G-C9M)JPYSP13hN#rEY1@o-!1-fNv&sDC992>AL?nIZ2miRw9}|3`!wct9?Gw??;jC^l4)Mo9asnXP;%90t*kP?|3D(S59YV_ZJfxdCU`*DVy1U zP~@MwK9yWub!i&$Rho6`)JOt*anY)Ib6M4LfrU2r`ftl?f(j@~^_E{ejvFDaOw`-M za>%(qh14>oce;+033>j=Ia8=qF&GdS`b8|Zfg#0;@7rv=gM}>VI4#XgAj2A< zteKH4Y`>7xL~ZyqK2>fY1f z6F@r?y@ifXMS6-UajC^ncAyJ_m1^Z*w<*=P*oqfBDa-S=>_TnsY@beun|WO+B9P1# zbm@ar)9P7r{3{(2Ei*LcZDXGF#dy?*>O|``@wxe&54^6eLa&|e{xC=z{9t5~*HEs} z(J^g7#peO}yq^Qv{U$YX!BtZ!9H>cKLrUF9TQW6fzmq=I4O-?{5nX_nmuAW4skXORozZcF{OUWbLROcn97_yI zm!L%NB|^;Cm_DE(mZHP>vKJi%?^>z*DM9_?2uW(3 zp;cNLPnee;G0$whk`GRy?866LDlh7&B8pVN9)MOWSmD#SAP33u6X7wLDch<764En` zOCo>O?1huAVA~_gAZ|5i?EXV02}s&ZEBt9Esx_6Xe!sEF{QO<#`j_!N0`X3Tkvr(M zi0kL`5z%3Z;saCzT=lzto4flIw}h_ar=6@TP4402N05-o;BCvy z7r{XqaHl5Au`9K!%dDodQEB>muEO-ALJ75WBmsK^XVKT#axRtFkNP|g$g@~l>Fc1e z7|)g9h?xK)by7j8gLT4cCzq1(G9n7{tn6fiS$)!fp=8WSaIn_DFUPcg1#-bO)1}Fn6j7fX51NCTRr;^`PxmHw!KtSeua$3zrJ_lWSZ( zZ#r(9f7azW1%>yP6X|s|tZt&uBT=f$qvW7YDL~Gbz(EGL@~ppxY?dq6T4Hx$C6r zd|~6eh=)dBHMp1w8s+`J;EQoP)HAL(=gsp{fd^veoliA0c91O1mvt=%D@C+S%9-Mb zx6i8$`#xmyr-OJ^Cw&v$7mh}vEm6d`R@PHKknir(w7GH{YcUR@W6&NOO-MF~dJckQu)LnE}U_{r;`I})_ z#TiaR$#`!ylhS8w4-?12_G(W-cm=K{!A9yAkxYrqFtUa5_}!M|h?dU|zm32t9{UxY zi#1;KXA>O{u0gy>9}xRbJ~H^e@^@17T~{1O(T5s)fEv8)P#;Bi(E~9^Pv8y`kebr9 zVoGXD?v2%4`dP75QJOCGYMml}U6*fkQ*K3GyRRmOZ@Ppsc6}|B>{ktPV9O|EqX#ng9Q(i%9Qn47NBI1q+ zKt&jNMeVq+VK9Cl6e5n7iA`KhB*%NV6vdi^ZHssX<@bX7Vx&)(zx{p1+rRDoonK3> zyH+rI;A7n7@n%pyBnJUycD&g#ZW|QFV59Ic5p^J!I<>uH-JJ2VYXt#?-}EOC8;|+1 zN?SCN)iCj@m~Sd^iEe``MX^QH{?-_3eMfdrKT3X~u~^Dsuv;8( e^;Dd4QS7i5y@D0wT$xcv%Tm0kNlEL^^nU=~nbB7O literal 0 HcmV?d00001 diff --git a/3rdparty/openctm/tools/jpeg/testprog.jpg b/3rdparty/openctm/tools/jpeg/testprog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..920fee2e32b5a8ab0af796e010ee8a1add3eee63 GIT binary patch literal 5655 zcmb7{cQjmU+s0=`?^D!47`-!$(TOfvln|nKi8@;JPDG8P6J&IW9yPk?L{IeSHIir% zk>KN;^S$&#ty6@|`>s0_)UFDt%00;yCfHxQ5dJ&)qAjHQf zz{evbARr(jA|xiIBqJpuA*F-DC@2}>Om`UJ3=GU{0-Ve&e5?!%Tw>gOLP!(}#l$Hg zBQ7j0Ac7LUeF>0=h=`Pgl$MN)Rv5v65dMGHbq@eS2uK5L-~d?wAP5i#0=(`8&;tM< z9N_Ke{QoB^V#GdhuimXn;{b) zxA>^!0F~>|#=Atb8uQ%#4<8Ve*CP{t`&F6yws-GrC25R0RtHy(444airxDB*!+$yQ zs8Lcfuwya)&$wq?aiG(Wx5u+&x&G|)iW(T*!Is$@T%v3uQ7QV zSY6Q+{W7ml-j~yTEszX*G543_ z3pU59D;JtKdx2UzU8l3Z+NFHP#m)1K?r6Vro}89gY*lj;$+0~O5Lb;X8f9)zmYny5 zxXzRTd4;$oJlNoQ1AX_z>|_On(|XG4OW6or^s3rS2UqWcPwIRNW-Rt*E_2o4>$pX6IvCi#4zi)NLHf8f5&oNjCP44XnNE;8nZlJZj8y zIIj%9zhWWgr*=h8qL{|3ipB_H>7)kgPUQG^U)b)+NHtOk?g6heDISj_W>=2I`1s&> zXU?lYhVLxmjymIiUIE+4+~u$o0we1H6tEoy7jioPz#7oI@Mv4&c$`O|YH0$u8>{hv z0iYY>;o#ujIPC8Nf&dU4TriXwfy9Hc2#d%ounJL9p>DiKcw<)}9_T7A16Womz{E%* zoRp-(kbAO%JE)s4)+|@Go(UH*TGF)M*0hOMs!9-CUKNHF^_L3iyew8v<1zera}zj9 zod&q{Y6f8s=f2s!?>AiVMtt1i%}N^RRQ7(&Q&zs?%7P0D(xrw948Dw)S?ft+!a;PG zy7HFzU9oE^V5HIXmR-UETJ(hHS=vjQ%5&;_-+*Tb z)dlPlZJ(x0qxmZNpXahKvBGFuBT<&Id*7?IIpSqSbmW%cTV2yuJ0U zo*DXlL>;@lt9wDkP_jbfUDFLRLKfICysWy{9)0%tSd=Ai{ zHQtsC*ycgNv~7?iDGXg?i&-~ZvU9Pg2TSXbzFs*aaGGPB$BIC(^g5Xaxp{&!omvXM zJzA#_!t%JmU&ZQqbHbqs+ooF*J+9_GM&Q@=KFu8u_uk#HI+=(uy#`cSXJIy{^Zg=K zf3mx7RQM&lAo}+Coa~Kg=KbI#Z4!O`Qq%Gb3Wj%#gvR-ITR2Qzo)@0)6T8%zua3iD zm~M~X==+fsy1o@7Q6d7RO6RQJ4?4vC1w2sjZAGICq03PV#dETu z(5jbLxp90$dlJ1LA~dx{o<2P>Sg8awr|C;>dAUM#6;U@hGWuSrjmTd;NyMa=@7#qZ2(gnHuh7OKvDkU|(H&NT;>V z9>jK%1rDoaO=zRwIy~myZ0PGNhn@`BD0{Vx5WX(^$XI0J$J`==`twr2!{IETja)!h zgZfFvxrDpn6=@|y?B@DU%FmTXteI^@#Y6jOb)p<0Odd(Pc3l9^{BPP;sHC=Cge&QD z+m)uUwziZ!+6tp(*0Rozd24%lV=41PeHS^BDPq2L{fFCe{6slKIb>)j<&7v#!J=lGwIQ+~ zPVsAisW~;v2ZCBUNdc3^E54err3^0*hc*CjB1mAlA7la z^3*{S8$CSOp4WEN%acv9FW6ZpsBol1y2j zkOosgsF}h~nEoN$KYRla{2R4E02l&dMnHv-Eb_WmICoivtuY>9$^Q}#Uk>yeJVnFg zN}ON9bKoQD_Q9AJHNT~rmfr0g_3I&2y8KyOO&wDdrwxA&x&Lom^x?a7ygAJ3l1&|| zWq}^y`<4g0$EcB>vpuNeJkFnIT90bfP%6wR)r^W3O#h2`&6`%i&$uR`g0qAdQ>}p}4E`b*lFL~mVa1576iglnHr77n~22f>~ zoi_q3^QRfep4YsoQD#it_YsDd0lb}uLt>}lE)^_m(79e|U)baea}N~LnxDE`_xWK2 zdKW#T5UtuAM2d}kAdHPB{B&NGl~B_IclmV8t^()aJXNIb|7|x7@1GbV@|>^83f@{3 zEmodk8wy2G>xXgmqp_^2cfI?M3LtiJc=XnB$~obR?~xgYsBfk7P?o6jE94Yh*9wc( z3kEMiYbM)8u-({SZHZ1yl#yuVm>C<5I;JzY4DiT=IG<{>->ul|DE!cxCvSj1A(>tVq$Uy>U7nhtnY7Ej6Nus<^>{BMlP##&q`)vY zy!Q(lT%e((bR5L$m#};9W5e#mvAs`l`YhS6_<`Ts()tJjz3>V$HO?U<7Z0`-^!|X` z^-b3-t)o7h?iq)oOd)UAsXW8=)f+!7LfA(%ds1&!);fz1li+l!dR8z}ddTNKe)YZf4*yfsHGm2297AF(7tHtJz7@gFO4K!gnV>5$RPF{BtdQGT z*uD2V2!I?rCP ztBYn{#&Ff^hJ*-dt&a~i6`x8pCr0a%>cIk7vioXws#3k<+^2%V>yDmxW^&>%kGp$U z87Dwqyngo9HcO@TjM>)w8TE^ULj{#DdL9;CB`bs0N>1i*tuV zO`Hj{S5r^&=C2$3A{FbkbklV5EMvt54za2LK0!AQp<*oi{JZ>Wutif03@RipZ z-mWRtFY&?q!_?OYp3ht?4>2_7Y3dLwUZF}2>C1cj}>>(sPdmRFjM=GrOR}xOxAsp zlx)v6dN&Yu07EbFZ|Gy&&)`3vs4bNREa?K*mVZSAIBy}AK=~0oThjK zk#&nr1Xmjc8K!rR_wf$}xoo@=)`PI|zxbuvFkgK!H+$s--#P;X#J%k!{+TWSH(7EM zCE(jAnXK(*UOPPcZ=irrrH1=5Lm}#eapI%OI^|0!o85Fet$40dO*T7aqbyugB_Nk@ zkMSD^_w%-*in4g;450{55XV}$-g{aKr1=qmN8*B1IM%Xn6pQzRIZ7-TAwzRiFCrMM+5CtuF(A$UM1HR@ywx&-|gs9wG zP3tNtfttk|7?yUkPCX?)0qi?S63#lj^2CF5QR{2Y>yWcL6-E;qgpM`|^!wpbY&+{; zBxbbn5OiX`SW&rvoPJQIYMc8bih=Pp>bi^3rlsHHOD>d3K&bV+d-ptq_<}Cd56to8 z)d_-G7ro1rghrcQ@|RAdO#{)jN;7-UQ*d=uM@6~k%_0?z-f7jsC>Lt(-t#)l;Fhl5 zCuUWIP@1y(D5BBSnH#-Nc6)x}gs>9N#1@Dd`E`O}e47loCV{<+N+qq)kAFZcAH3g` zR<)`^W(c-4kaRPP2Y1nnzbiLl7N+q@q9Wrha}l6IdQVCJW0_ z#cqY@o*GC{f$c0DSq(yeamT+QLUX7Lio-C)29?M?V)UnZZHQwFK~`XxMO?JUKD_FP z@lJ1nlqGFcT5?UfQN?mUT(G_7sm6dV3nS)?rF||#XjuV>O#eGrM}I)aEY6KLr2*#{n4BAcvp+nOGQ2pnRSxj z2qpvLP`m~4k(AM91$N_@8T2Hzt{LOq*WF{j;W67n?DYc&P^*<64hUs zn_IokL(L3#0tX&KHo&Gqafs6I7td!I)VAs#0NOu7)2V+(mVA9~-)xlL{~&Nw`iw(p{8zlb#hs9CFYq;vGqJ%{<(K=O z^@464$F=e@WU1>VuE0{kTk5r(7F%AEC9r%YzR|shJo{i9rcA@M6Z9(Nu%Hq!QpQLl z6I1I=)ovp^lcjLj!Qr~`M$>s~eV;FFp7RPitYY*=1tvr9;u5Qj(mR;WNp`_}?S0*NZ!0O17jS5$qW4qOgdqc(E}HrWIl;#kEx#ljhbX~C zsF5pQ1Ii$E;zqw^G$J0cwP$(_Pm4b}xl>l{n=!JQ?H~xAq1vSpBXbRji@5qGIxCp; zTLGcJ8iU;&IZ@!sS}N*QA1sz<9}bJGA;PHO8k-c@8%b@6d17(T%qj7qUYsZ0?6z56+I?~sasnVb9`n?ZjVtZ3B7%oF~GNLhe#LwZ#q;};^oZisv30;4}CYxss%Jin` zJ}ZSZkL0KdZN}0x5OJ4Su%;$1BJvgNy`Pe@RVcB;2Gwk@0U%wNCx0E^V&GL8LmRKu z-sSM6qzFZ{UIIDm+n#|kOp)bT#;B*P(fM$jQr|k)hk>_=uK0@ZWl@L*4 zD2uZ*`|z;_)RsDT;*`4^IDXN**v3#jGDu;n$2hu2e_hm9F0NmR5z)R^LnX>9WdC4L U9#E?5!l?r;*e8trGk!h)KW4JmQUCw| literal 0 HcmV?d00001 diff --git a/3rdparty/openctm/tools/jpeg/transupp.c b/3rdparty/openctm/tools/jpeg/transupp.c new file mode 100644 index 000000000..bc13b06f3 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/transupp.c @@ -0,0 +1,1533 @@ +/* + * transupp.c + * + * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains image transformation routines and other utility code + * used by the jpegtran sample application. These are NOT part of the core + * JPEG library. But we keep these routines separate from jpegtran.c to + * ease the task of maintaining jpegtran-like programs that have other user + * interfaces. + */ + +/* Although this file really shouldn't have access to the library internals, + * it's helpful to let it call jround_up() and jcopy_block_row(). + */ +#define JPEG_INTERNALS + +#include "jinclude.h" +#include "jpeglib.h" +#include "transupp.h" /* My own external interface */ +#include /* to declare isdigit() */ + + +#if TRANSFORMS_SUPPORTED + +/* + * Lossless image transformation routines. These routines work on DCT + * coefficient arrays and thus do not require any lossy decompression + * or recompression of the image. + * Thanks to Guido Vollbeding for the initial design and code of this feature, + * and to Ben Jackson for introducing the cropping feature. + * + * Horizontal flipping is done in-place, using a single top-to-bottom + * pass through the virtual source array. It will thus be much the + * fastest option for images larger than main memory. + * + * The other routines require a set of destination virtual arrays, so they + * need twice as much memory as jpegtran normally does. The destination + * arrays are always written in normal scan order (top to bottom) because + * the virtual array manager expects this. The source arrays will be scanned + * in the corresponding order, which means multiple passes through the source + * arrays for most of the transforms. That could result in much thrashing + * if the image is larger than main memory. + * + * If cropping or trimming is involved, the destination arrays may be smaller + * than the source arrays. Note it is not possible to do horizontal flip + * in-place when a nonzero Y crop offset is specified, since we'd have to move + * data from one block row to another but the virtual array manager doesn't + * guarantee we can touch more than one row at a time. So in that case, + * we have to use a separate destination array. + * + * Some notes about the operating environment of the individual transform + * routines: + * 1. Both the source and destination virtual arrays are allocated from the + * source JPEG object, and therefore should be manipulated by calling the + * source's memory manager. + * 2. The destination's component count should be used. It may be smaller + * than the source's when forcing to grayscale. + * 3. Likewise the destination's sampling factors should be used. When + * forcing to grayscale the destination's sampling factors will be all 1, + * and we may as well take that as the effective iMCU size. + * 4. When "trim" is in effect, the destination's dimensions will be the + * trimmed values but the source's will be untrimmed. + * 5. When "crop" is in effect, the destination's dimensions will be the + * cropped values but the source's will be uncropped. Each transform + * routine is responsible for picking up source data starting at the + * correct X and Y offset for the crop region. (The X and Y offsets + * passed to the transform routines are measured in iMCU blocks of the + * destination.) + * 6. All the routines assume that the source and destination buffers are + * padded out to a full iMCU boundary. This is true, although for the + * source buffer it is an undocumented property of jdcoefct.c. + */ + + +LOCAL(void) +do_crop (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Crop. This is only used when no rotate/flip is requested with the crop. */ +{ + JDIMENSION dst_blk_y, x_crop_blocks, y_crop_blocks; + int ci, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + jpeg_component_info *compptr; + + /* We simply have to copy the right amount of data (the destination's + * image size) starting at the given X and Y offsets in the source. + */ + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_y + y_crop_blocks, + (JDIMENSION) compptr->v_samp_factor, FALSE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + jcopy_block_row(src_buffer[offset_y] + x_crop_blocks, + dst_buffer[offset_y], + compptr->width_in_blocks); + } + } + } +} + + +LOCAL(void) +do_flip_h_no_crop (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, + jvirt_barray_ptr *src_coef_arrays) +/* Horizontal flip; done in-place, so no separate dest array is required. + * NB: this only works when y_crop_offset is zero. + */ +{ + JDIMENSION MCU_cols, comp_width, blk_x, blk_y, x_crop_blocks; + int ci, k, offset_y; + JBLOCKARRAY buffer; + JCOEFPTR ptr1, ptr2; + JCOEF temp1, temp2; + jpeg_component_info *compptr; + + /* Horizontal mirroring of DCT blocks is accomplished by swapping + * pairs of blocks in-place. Within a DCT block, we perform horizontal + * mirroring by changing the signs of odd-numbered columns. + * Partial iMCUs at the right edge are left untouched. + */ + MCU_cols = srcinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + for (blk_y = 0; blk_y < compptr->height_in_blocks; + blk_y += compptr->v_samp_factor) { + buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + /* Do the mirroring */ + for (blk_x = 0; blk_x * 2 < comp_width; blk_x++) { + ptr1 = buffer[offset_y][blk_x]; + ptr2 = buffer[offset_y][comp_width - blk_x - 1]; + /* this unrolled loop doesn't need to know which row it's on... */ + for (k = 0; k < DCTSIZE2; k += 2) { + temp1 = *ptr1; /* swap even column */ + temp2 = *ptr2; + *ptr1++ = temp2; + *ptr2++ = temp1; + temp1 = *ptr1; /* swap odd column with sign change */ + temp2 = *ptr2; + *ptr1++ = -temp2; + *ptr2++ = -temp1; + } + } + if (x_crop_blocks > 0) { + /* Now left-justify the portion of the data to be kept. + * We can't use a single jcopy_block_row() call because that routine + * depends on memcpy(), whose behavior is unspecified for overlapping + * source and destination areas. Sigh. + */ + for (blk_x = 0; blk_x < compptr->width_in_blocks; blk_x++) { + jcopy_block_row(buffer[offset_y] + blk_x + x_crop_blocks, + buffer[offset_y] + blk_x, + (JDIMENSION) 1); + } + } + } + } + } +} + + +LOCAL(void) +do_flip_h (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Horizontal flip in general cropping case */ +{ + JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y; + JDIMENSION x_crop_blocks, y_crop_blocks; + int ci, k, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JBLOCKROW src_row_ptr, dst_row_ptr; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Here we must output into a separate array because we can't touch + * different rows of a single virtual array simultaneously. Otherwise, + * this is essentially the same as the routine above. + */ + MCU_cols = srcinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_y + y_crop_blocks, + (JDIMENSION) compptr->v_samp_factor, FALSE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + dst_row_ptr = dst_buffer[offset_y]; + src_row_ptr = src_buffer[offset_y]; + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Do the mirrorable blocks */ + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[comp_width - x_crop_blocks - dst_blk_x - 1]; + /* this unrolled loop doesn't need to know which row it's on... */ + for (k = 0; k < DCTSIZE2; k += 2) { + *dst_ptr++ = *src_ptr++; /* copy even column */ + *dst_ptr++ = - *src_ptr++; /* copy odd column with sign change */ + } + } else { + /* Copy last partial block(s) verbatim */ + jcopy_block_row(src_row_ptr + dst_blk_x + x_crop_blocks, + dst_row_ptr + dst_blk_x, + (JDIMENSION) 1); + } + } + } + } + } +} + + +LOCAL(void) +do_flip_v (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Vertical flip */ +{ + JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y; + JDIMENSION x_crop_blocks, y_crop_blocks; + int ci, i, j, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JBLOCKROW src_row_ptr, dst_row_ptr; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* We output into a separate array because we can't touch different + * rows of the source virtual array simultaneously. Otherwise, this + * is a pretty straightforward analog of horizontal flip. + * Within a DCT block, vertical mirroring is done by changing the signs + * of odd-numbered rows. + * Partial iMCUs at the bottom edge are copied verbatim. + */ + MCU_rows = srcinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_height = MCU_rows * compptr->v_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + if (y_crop_blocks + dst_blk_y < comp_height) { + /* Row is within the mirrorable area. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + comp_height - y_crop_blocks - dst_blk_y - + (JDIMENSION) compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } else { + /* Bottom-edge blocks will be copied verbatim. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_y + y_crop_blocks, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + if (y_crop_blocks + dst_blk_y < comp_height) { + /* Row is within the mirrorable area. */ + dst_row_ptr = dst_buffer[offset_y]; + src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1]; + src_row_ptr += x_crop_blocks; + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[dst_blk_x]; + for (i = 0; i < DCTSIZE; i += 2) { + /* copy even row */ + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = *src_ptr++; + /* copy odd row with sign change */ + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = - *src_ptr++; + } + } + } else { + /* Just copy row verbatim. */ + jcopy_block_row(src_buffer[offset_y] + x_crop_blocks, + dst_buffer[offset_y], + compptr->width_in_blocks); + } + } + } + } +} + + +LOCAL(void) +do_transpose (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Transpose source into destination */ +{ + JDIMENSION dst_blk_x, dst_blk_y, x_crop_blocks, y_crop_blocks; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Transposing pixels within a block just requires transposing the + * DCT coefficients. + * Partial iMCUs at the edges require no special treatment; we simply + * process all the available DCT blocks for every component. + */ + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_x + x_crop_blocks, + (JDIMENSION) compptr->h_samp_factor, FALSE); + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + src_ptr = src_buffer[offset_x][dst_blk_y + offset_y + y_crop_blocks]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } +} + + +LOCAL(void) +do_rot_90 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* 90 degree rotation is equivalent to + * 1. Transposing the image; + * 2. Horizontal mirroring. + * These two steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y; + JDIMENSION x_crop_blocks, y_crop_blocks; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Because of the horizontal mirror step, we can't process partial iMCUs + * at the (output) right edge properly. They just get transposed and + * not mirrored. + */ + MCU_cols = srcinfo->image_height / (dstinfo->max_h_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Block is within the mirrorable area. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + comp_width - x_crop_blocks - dst_blk_x - + (JDIMENSION) compptr->h_samp_factor, + (JDIMENSION) compptr->h_samp_factor, FALSE); + } else { + /* Edge blocks are transposed but not mirrored. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_x + x_crop_blocks, + (JDIMENSION) compptr->h_samp_factor, FALSE); + } + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Block is within the mirrorable area. */ + src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1] + [dst_blk_y + offset_y + y_crop_blocks]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + i++; + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } else { + /* Edge blocks are transposed but not mirrored. */ + src_ptr = src_buffer[offset_x] + [dst_blk_y + offset_y + y_crop_blocks]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } + } +} + + +LOCAL(void) +do_rot_270 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* 270 degree rotation is equivalent to + * 1. Horizontal mirroring; + * 2. Transposing the image. + * These two steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y; + JDIMENSION x_crop_blocks, y_crop_blocks; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Because of the horizontal mirror step, we can't process partial iMCUs + * at the (output) bottom edge properly. They just get transposed and + * not mirrored. + */ + MCU_rows = srcinfo->image_width / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_height = MCU_rows * compptr->v_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_x + x_crop_blocks, + (JDIMENSION) compptr->h_samp_factor, FALSE); + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + if (y_crop_blocks + dst_blk_y < comp_height) { + /* Block is within the mirrorable area. */ + src_ptr = src_buffer[offset_x] + [comp_height - y_crop_blocks - dst_blk_y - offset_y - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } + } else { + /* Edge blocks are transposed but not mirrored. */ + src_ptr = src_buffer[offset_x] + [dst_blk_y + offset_y + y_crop_blocks]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } + } +} + + +LOCAL(void) +do_rot_180 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* 180 degree rotation is equivalent to + * 1. Vertical mirroring; + * 2. Horizontal mirroring. + * These two steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y; + JDIMENSION x_crop_blocks, y_crop_blocks; + int ci, i, j, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JBLOCKROW src_row_ptr, dst_row_ptr; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + MCU_cols = srcinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + MCU_rows = srcinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + comp_height = MCU_rows * compptr->v_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + if (y_crop_blocks + dst_blk_y < comp_height) { + /* Row is within the vertically mirrorable area. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + comp_height - y_crop_blocks - dst_blk_y - + (JDIMENSION) compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } else { + /* Bottom-edge rows are only mirrored horizontally. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_y + y_crop_blocks, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + dst_row_ptr = dst_buffer[offset_y]; + if (y_crop_blocks + dst_blk_y < comp_height) { + /* Row is within the mirrorable area. */ + src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1]; + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Process the blocks that can be mirrored both ways. */ + src_ptr = src_row_ptr[comp_width - x_crop_blocks - dst_blk_x - 1]; + for (i = 0; i < DCTSIZE; i += 2) { + /* For even row, negate every odd column. */ + for (j = 0; j < DCTSIZE; j += 2) { + *dst_ptr++ = *src_ptr++; + *dst_ptr++ = - *src_ptr++; + } + /* For odd row, negate every even column. */ + for (j = 0; j < DCTSIZE; j += 2) { + *dst_ptr++ = - *src_ptr++; + *dst_ptr++ = *src_ptr++; + } + } + } else { + /* Any remaining right-edge blocks are only mirrored vertically. */ + src_ptr = src_row_ptr[x_crop_blocks + dst_blk_x]; + for (i = 0; i < DCTSIZE; i += 2) { + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = *src_ptr++; + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = - *src_ptr++; + } + } + } + } else { + /* Remaining rows are just mirrored horizontally. */ + src_row_ptr = src_buffer[offset_y]; + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Process the blocks that can be mirrored. */ + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[comp_width - x_crop_blocks - dst_blk_x - 1]; + for (i = 0; i < DCTSIZE2; i += 2) { + *dst_ptr++ = *src_ptr++; + *dst_ptr++ = - *src_ptr++; + } + } else { + /* Any remaining right-edge blocks are only copied. */ + jcopy_block_row(src_row_ptr + dst_blk_x + x_crop_blocks, + dst_row_ptr + dst_blk_x, + (JDIMENSION) 1); + } + } + } + } + } + } +} + + +LOCAL(void) +do_transverse (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Transverse transpose is equivalent to + * 1. 180 degree rotation; + * 2. Transposition; + * or + * 1. Horizontal mirroring; + * 2. Transposition; + * 3. Horizontal mirroring. + * These steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y; + JDIMENSION x_crop_blocks, y_crop_blocks; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + MCU_cols = srcinfo->image_height / (dstinfo->max_h_samp_factor * DCTSIZE); + MCU_rows = srcinfo->image_width / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + comp_height = MCU_rows * compptr->v_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Block is within the mirrorable area. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + comp_width - x_crop_blocks - dst_blk_x - + (JDIMENSION) compptr->h_samp_factor, + (JDIMENSION) compptr->h_samp_factor, FALSE); + } else { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_x + x_crop_blocks, + (JDIMENSION) compptr->h_samp_factor, FALSE); + } + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + if (y_crop_blocks + dst_blk_y < comp_height) { + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Block is within the mirrorable area. */ + src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1] + [comp_height - y_crop_blocks - dst_blk_y - offset_y - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + i++; + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } else { + /* Right-edge blocks are mirrored in y only */ + src_ptr = src_buffer[offset_x] + [comp_height - y_crop_blocks - dst_blk_y - offset_y - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } + } + } else { + if (x_crop_blocks + dst_blk_x < comp_width) { + /* Bottom-edge blocks are mirrored in x only */ + src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1] + [dst_blk_y + offset_y + y_crop_blocks]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + i++; + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } else { + /* At lower right corner, just transpose, no mirroring */ + src_ptr = src_buffer[offset_x] + [dst_blk_y + offset_y + y_crop_blocks]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } + } + } +} + + +/* Parse an unsigned integer: subroutine for jtransform_parse_crop_spec. + * Returns TRUE if valid integer found, FALSE if not. + * *strptr is advanced over the digit string, and *result is set to its value. + */ + +LOCAL(boolean) +jt_read_integer (const char ** strptr, JDIMENSION * result) +{ + const char * ptr = *strptr; + JDIMENSION val = 0; + + for (; isdigit(*ptr); ptr++) { + val = val * 10 + (JDIMENSION) (*ptr - '0'); + } + *result = val; + if (ptr == *strptr) + return FALSE; /* oops, no digits */ + *strptr = ptr; + return TRUE; +} + + +/* Parse a crop specification (written in X11 geometry style). + * The routine returns TRUE if the spec string is valid, FALSE if not. + * + * The crop spec string should have the format + * x{+-}{+-} + * where width, height, xoffset, and yoffset are unsigned integers. + * Each of the elements can be omitted to indicate a default value. + * (A weakness of this style is that it is not possible to omit xoffset + * while specifying yoffset, since they look alike.) + * + * This code is loosely based on XParseGeometry from the X11 distribution. + */ + +GLOBAL(boolean) +jtransform_parse_crop_spec (jpeg_transform_info *info, const char *spec) +{ + info->crop = FALSE; + info->crop_width_set = JCROP_UNSET; + info->crop_height_set = JCROP_UNSET; + info->crop_xoffset_set = JCROP_UNSET; + info->crop_yoffset_set = JCROP_UNSET; + + if (isdigit(*spec)) { + /* fetch width */ + if (! jt_read_integer(&spec, &info->crop_width)) + return FALSE; + info->crop_width_set = JCROP_POS; + } + if (*spec == 'x' || *spec == 'X') { + /* fetch height */ + spec++; + if (! jt_read_integer(&spec, &info->crop_height)) + return FALSE; + info->crop_height_set = JCROP_POS; + } + if (*spec == '+' || *spec == '-') { + /* fetch xoffset */ + info->crop_xoffset_set = (*spec == '-') ? JCROP_NEG : JCROP_POS; + spec++; + if (! jt_read_integer(&spec, &info->crop_xoffset)) + return FALSE; + } + if (*spec == '+' || *spec == '-') { + /* fetch yoffset */ + info->crop_yoffset_set = (*spec == '-') ? JCROP_NEG : JCROP_POS; + spec++; + if (! jt_read_integer(&spec, &info->crop_yoffset)) + return FALSE; + } + /* We had better have gotten to the end of the string. */ + if (*spec != '\0') + return FALSE; + info->crop = TRUE; + return TRUE; +} + + +/* Trim off any partial iMCUs on the indicated destination edge */ + +LOCAL(void) +trim_right_edge (jpeg_transform_info *info, JDIMENSION full_width) +{ + JDIMENSION MCU_cols; + + MCU_cols = info->output_width / (info->max_h_samp_factor * DCTSIZE); + if (MCU_cols > 0 && info->x_crop_offset + MCU_cols == + full_width / (info->max_h_samp_factor * DCTSIZE)) + info->output_width = MCU_cols * (info->max_h_samp_factor * DCTSIZE); +} + +LOCAL(void) +trim_bottom_edge (jpeg_transform_info *info, JDIMENSION full_height) +{ + JDIMENSION MCU_rows; + + MCU_rows = info->output_height / (info->max_v_samp_factor * DCTSIZE); + if (MCU_rows > 0 && info->y_crop_offset + MCU_rows == + full_height / (info->max_v_samp_factor * DCTSIZE)) + info->output_height = MCU_rows * (info->max_v_samp_factor * DCTSIZE); +} + + +/* Request any required workspace. + * + * This routine figures out the size that the output image will be + * (which implies that all the transform parameters must be set before + * it is called). + * + * We allocate the workspace virtual arrays from the source decompression + * object, so that all the arrays (both the original data and the workspace) + * will be taken into account while making memory management decisions. + * Hence, this routine must be called after jpeg_read_header (which reads + * the image dimensions) and before jpeg_read_coefficients (which realizes + * the source's virtual arrays). + */ + +GLOBAL(void) +jtransform_request_workspace (j_decompress_ptr srcinfo, + jpeg_transform_info *info) +{ + jvirt_barray_ptr *coef_arrays = NULL; + boolean need_workspace, transpose_it; + jpeg_component_info *compptr; + JDIMENSION xoffset, yoffset, width_in_iMCUs, height_in_iMCUs; + JDIMENSION width_in_blocks, height_in_blocks; + int ci, h_samp_factor, v_samp_factor; + + /* Determine number of components in output image */ + if (info->force_grayscale && + srcinfo->jpeg_color_space == JCS_YCbCr && + srcinfo->num_components == 3) { + /* We'll only process the first component */ + info->num_components = 1; + } else { + /* Process all the components */ + info->num_components = srcinfo->num_components; + } + /* If there is only one output component, force the iMCU size to be 1; + * else use the source iMCU size. (This allows us to do the right thing + * when reducing color to grayscale, and also provides a handy way of + * cleaning up "funny" grayscale images whose sampling factors are not 1x1.) + */ + + switch (info->transform) { + case JXFORM_TRANSPOSE: + case JXFORM_TRANSVERSE: + case JXFORM_ROT_90: + case JXFORM_ROT_270: + info->output_width = srcinfo->image_height; + info->output_height = srcinfo->image_width; + if (info->num_components == 1) { + info->max_h_samp_factor = 1; + info->max_v_samp_factor = 1; + } else { + info->max_h_samp_factor = srcinfo->max_v_samp_factor; + info->max_v_samp_factor = srcinfo->max_h_samp_factor; + } + break; + default: + info->output_width = srcinfo->image_width; + info->output_height = srcinfo->image_height; + if (info->num_components == 1) { + info->max_h_samp_factor = 1; + info->max_v_samp_factor = 1; + } else { + info->max_h_samp_factor = srcinfo->max_h_samp_factor; + info->max_v_samp_factor = srcinfo->max_v_samp_factor; + } + break; + } + + /* If cropping has been requested, compute the crop area's position and + * dimensions, ensuring that its upper left corner falls at an iMCU boundary. + */ + if (info->crop) { + /* Insert default values for unset crop parameters */ + if (info->crop_xoffset_set == JCROP_UNSET) + info->crop_xoffset = 0; /* default to +0 */ + if (info->crop_yoffset_set == JCROP_UNSET) + info->crop_yoffset = 0; /* default to +0 */ + if (info->crop_xoffset >= info->output_width || + info->crop_yoffset >= info->output_height) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + if (info->crop_width_set == JCROP_UNSET) + info->crop_width = info->output_width - info->crop_xoffset; + if (info->crop_height_set == JCROP_UNSET) + info->crop_height = info->output_height - info->crop_yoffset; + /* Ensure parameters are valid */ + if (info->crop_width <= 0 || info->crop_width > info->output_width || + info->crop_height <= 0 || info->crop_height > info->output_height || + info->crop_xoffset > info->output_width - info->crop_width || + info->crop_yoffset > info->output_height - info->crop_height) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + /* Convert negative crop offsets into regular offsets */ + if (info->crop_xoffset_set == JCROP_NEG) + xoffset = info->output_width - info->crop_width - info->crop_xoffset; + else + xoffset = info->crop_xoffset; + if (info->crop_yoffset_set == JCROP_NEG) + yoffset = info->output_height - info->crop_height - info->crop_yoffset; + else + yoffset = info->crop_yoffset; + /* Now adjust so that upper left corner falls at an iMCU boundary */ + info->output_width = + info->crop_width + (xoffset % (info->max_h_samp_factor * DCTSIZE)); + info->output_height = + info->crop_height + (yoffset % (info->max_v_samp_factor * DCTSIZE)); + /* Save x/y offsets measured in iMCUs */ + info->x_crop_offset = xoffset / (info->max_h_samp_factor * DCTSIZE); + info->y_crop_offset = yoffset / (info->max_v_samp_factor * DCTSIZE); + } else { + info->x_crop_offset = 0; + info->y_crop_offset = 0; + } + + /* Figure out whether we need workspace arrays, + * and if so whether they are transposed relative to the source. + */ + need_workspace = FALSE; + transpose_it = FALSE; + switch (info->transform) { + case JXFORM_NONE: + if (info->x_crop_offset != 0 || info->y_crop_offset != 0) + need_workspace = TRUE; + /* No workspace needed if neither cropping nor transforming */ + break; + case JXFORM_FLIP_H: + if (info->trim) + trim_right_edge(info, srcinfo->image_width); + if (info->y_crop_offset != 0) + need_workspace = TRUE; + /* do_flip_h_no_crop doesn't need a workspace array */ + break; + case JXFORM_FLIP_V: + if (info->trim) + trim_bottom_edge(info, srcinfo->image_height); + /* Need workspace arrays having same dimensions as source image. */ + need_workspace = TRUE; + break; + case JXFORM_TRANSPOSE: + /* transpose does NOT have to trim anything */ + /* Need workspace arrays having transposed dimensions. */ + need_workspace = TRUE; + transpose_it = TRUE; + break; + case JXFORM_TRANSVERSE: + if (info->trim) { + trim_right_edge(info, srcinfo->image_height); + trim_bottom_edge(info, srcinfo->image_width); + } + /* Need workspace arrays having transposed dimensions. */ + need_workspace = TRUE; + transpose_it = TRUE; + break; + case JXFORM_ROT_90: + if (info->trim) + trim_right_edge(info, srcinfo->image_height); + /* Need workspace arrays having transposed dimensions. */ + need_workspace = TRUE; + transpose_it = TRUE; + break; + case JXFORM_ROT_180: + if (info->trim) { + trim_right_edge(info, srcinfo->image_width); + trim_bottom_edge(info, srcinfo->image_height); + } + /* Need workspace arrays having same dimensions as source image. */ + need_workspace = TRUE; + break; + case JXFORM_ROT_270: + if (info->trim) + trim_bottom_edge(info, srcinfo->image_width); + /* Need workspace arrays having transposed dimensions. */ + need_workspace = TRUE; + transpose_it = TRUE; + break; + } + + /* Allocate workspace if needed. + * Note that we allocate arrays padded out to the next iMCU boundary, + * so that transform routines need not worry about missing edge blocks. + */ + if (need_workspace) { + coef_arrays = (jvirt_barray_ptr *) + (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, + SIZEOF(jvirt_barray_ptr) * info->num_components); + width_in_iMCUs = (JDIMENSION) + jdiv_round_up((long) info->output_width, + (long) (info->max_h_samp_factor * DCTSIZE)); + height_in_iMCUs = (JDIMENSION) + jdiv_round_up((long) info->output_height, + (long) (info->max_v_samp_factor * DCTSIZE)); + for (ci = 0; ci < info->num_components; ci++) { + compptr = srcinfo->comp_info + ci; + if (info->num_components == 1) { + /* we're going to force samp factors to 1x1 in this case */ + h_samp_factor = v_samp_factor = 1; + } else if (transpose_it) { + h_samp_factor = compptr->v_samp_factor; + v_samp_factor = compptr->h_samp_factor; + } else { + h_samp_factor = compptr->h_samp_factor; + v_samp_factor = compptr->v_samp_factor; + } + width_in_blocks = width_in_iMCUs * h_samp_factor; + height_in_blocks = height_in_iMCUs * v_samp_factor; + coef_arrays[ci] = (*srcinfo->mem->request_virt_barray) + ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE, + width_in_blocks, height_in_blocks, (JDIMENSION) v_samp_factor); + } + } + + info->workspace_coef_arrays = coef_arrays; +} + + +/* Transpose destination image parameters */ + +LOCAL(void) +transpose_critical_parameters (j_compress_ptr dstinfo) +{ + int tblno, i, j, ci, itemp; + jpeg_component_info *compptr; + JQUANT_TBL *qtblptr; + UINT16 qtemp; + + /* Transpose sampling factors */ + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + itemp = compptr->h_samp_factor; + compptr->h_samp_factor = compptr->v_samp_factor; + compptr->v_samp_factor = itemp; + } + + /* Transpose quantization tables */ + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { + qtblptr = dstinfo->quant_tbl_ptrs[tblno]; + if (qtblptr != NULL) { + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < i; j++) { + qtemp = qtblptr->quantval[i*DCTSIZE+j]; + qtblptr->quantval[i*DCTSIZE+j] = qtblptr->quantval[j*DCTSIZE+i]; + qtblptr->quantval[j*DCTSIZE+i] = qtemp; + } + } + } + } +} + + +/* Adjust Exif image parameters. + * + * We try to adjust the Tags ExifImageWidth and ExifImageHeight if possible. + */ + +LOCAL(void) +adjust_exif_parameters (JOCTET FAR * data, unsigned int length, + JDIMENSION new_width, JDIMENSION new_height) +{ + boolean is_motorola; /* Flag for byte order */ + unsigned int number_of_tags, tagnum; + unsigned int firstoffset, offset; + JDIMENSION new_value; + + if (length < 12) return; /* Length of an IFD entry */ + + /* Discover byte order */ + if (GETJOCTET(data[0]) == 0x49 && GETJOCTET(data[1]) == 0x49) + is_motorola = FALSE; + else if (GETJOCTET(data[0]) == 0x4D && GETJOCTET(data[1]) == 0x4D) + is_motorola = TRUE; + else + return; + + /* Check Tag Mark */ + if (is_motorola) { + if (GETJOCTET(data[2]) != 0) return; + if (GETJOCTET(data[3]) != 0x2A) return; + } else { + if (GETJOCTET(data[3]) != 0) return; + if (GETJOCTET(data[2]) != 0x2A) return; + } + + /* Get first IFD offset (offset to IFD0) */ + if (is_motorola) { + if (GETJOCTET(data[4]) != 0) return; + if (GETJOCTET(data[5]) != 0) return; + firstoffset = GETJOCTET(data[6]); + firstoffset <<= 8; + firstoffset += GETJOCTET(data[7]); + } else { + if (GETJOCTET(data[7]) != 0) return; + if (GETJOCTET(data[6]) != 0) return; + firstoffset = GETJOCTET(data[5]); + firstoffset <<= 8; + firstoffset += GETJOCTET(data[4]); + } + if (firstoffset > length - 2) return; /* check end of data segment */ + + /* Get the number of directory entries contained in this IFD */ + if (is_motorola) { + number_of_tags = GETJOCTET(data[firstoffset]); + number_of_tags <<= 8; + number_of_tags += GETJOCTET(data[firstoffset+1]); + } else { + number_of_tags = GETJOCTET(data[firstoffset+1]); + number_of_tags <<= 8; + number_of_tags += GETJOCTET(data[firstoffset]); + } + if (number_of_tags == 0) return; + firstoffset += 2; + + /* Search for ExifSubIFD offset Tag in IFD0 */ + for (;;) { + if (firstoffset > length - 12) return; /* check end of data segment */ + /* Get Tag number */ + if (is_motorola) { + tagnum = GETJOCTET(data[firstoffset]); + tagnum <<= 8; + tagnum += GETJOCTET(data[firstoffset+1]); + } else { + tagnum = GETJOCTET(data[firstoffset+1]); + tagnum <<= 8; + tagnum += GETJOCTET(data[firstoffset]); + } + if (tagnum == 0x8769) break; /* found ExifSubIFD offset Tag */ + if (--number_of_tags == 0) return; + firstoffset += 12; + } + + /* Get the ExifSubIFD offset */ + if (is_motorola) { + if (GETJOCTET(data[firstoffset+8]) != 0) return; + if (GETJOCTET(data[firstoffset+9]) != 0) return; + offset = GETJOCTET(data[firstoffset+10]); + offset <<= 8; + offset += GETJOCTET(data[firstoffset+11]); + } else { + if (GETJOCTET(data[firstoffset+11]) != 0) return; + if (GETJOCTET(data[firstoffset+10]) != 0) return; + offset = GETJOCTET(data[firstoffset+9]); + offset <<= 8; + offset += GETJOCTET(data[firstoffset+8]); + } + if (offset > length - 2) return; /* check end of data segment */ + + /* Get the number of directory entries contained in this SubIFD */ + if (is_motorola) { + number_of_tags = GETJOCTET(data[offset]); + number_of_tags <<= 8; + number_of_tags += GETJOCTET(data[offset+1]); + } else { + number_of_tags = GETJOCTET(data[offset+1]); + number_of_tags <<= 8; + number_of_tags += GETJOCTET(data[offset]); + } + if (number_of_tags < 2) return; + offset += 2; + + /* Search for ExifImageWidth and ExifImageHeight Tags in this SubIFD */ + do { + if (offset > length - 12) return; /* check end of data segment */ + /* Get Tag number */ + if (is_motorola) { + tagnum = GETJOCTET(data[offset]); + tagnum <<= 8; + tagnum += GETJOCTET(data[offset+1]); + } else { + tagnum = GETJOCTET(data[offset+1]); + tagnum <<= 8; + tagnum += GETJOCTET(data[offset]); + } + if (tagnum == 0xA002 || tagnum == 0xA003) { + if (tagnum == 0xA002) + new_value = new_width; /* ExifImageWidth Tag */ + else + new_value = new_height; /* ExifImageHeight Tag */ + if (is_motorola) { + data[offset+2] = 0; /* Format = unsigned long (4 octets) */ + data[offset+3] = 4; + data[offset+4] = 0; /* Number Of Components = 1 */ + data[offset+5] = 0; + data[offset+6] = 0; + data[offset+7] = 1; + data[offset+8] = 0; + data[offset+9] = 0; + data[offset+10] = (JOCTET)((new_value >> 8) & 0xFF); + data[offset+11] = (JOCTET)(new_value & 0xFF); + } else { + data[offset+2] = 4; /* Format = unsigned long (4 octets) */ + data[offset+3] = 0; + data[offset+4] = 1; /* Number Of Components = 1 */ + data[offset+5] = 0; + data[offset+6] = 0; + data[offset+7] = 0; + data[offset+8] = (JOCTET)(new_value & 0xFF); + data[offset+9] = (JOCTET)((new_value >> 8) & 0xFF); + data[offset+10] = 0; + data[offset+11] = 0; + } + } + offset += 12; + } while (--number_of_tags); +} + + +/* Adjust output image parameters as needed. + * + * This must be called after jpeg_copy_critical_parameters() + * and before jpeg_write_coefficients(). + * + * The return value is the set of virtual coefficient arrays to be written + * (either the ones allocated by jtransform_request_workspace, or the + * original source data arrays). The caller will need to pass this value + * to jpeg_write_coefficients(). + */ + +GLOBAL(jvirt_barray_ptr *) +jtransform_adjust_parameters (j_decompress_ptr srcinfo, + j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info) +{ + /* If force-to-grayscale is requested, adjust destination parameters */ + if (info->force_grayscale) { + /* First, ensure we have YCbCr or grayscale data, and that the source's + * Y channel is full resolution. (No reasonable person would make Y + * be less than full resolution, so actually coping with that case + * isn't worth extra code space. But we check it to avoid crashing.) + */ + if (((dstinfo->jpeg_color_space == JCS_YCbCr && + dstinfo->num_components == 3) || + (dstinfo->jpeg_color_space == JCS_GRAYSCALE && + dstinfo->num_components == 1)) && + srcinfo->comp_info[0].h_samp_factor == srcinfo->max_h_samp_factor && + srcinfo->comp_info[0].v_samp_factor == srcinfo->max_v_samp_factor) { + /* We use jpeg_set_colorspace to make sure subsidiary settings get fixed + * properly. Among other things, it sets the target h_samp_factor & + * v_samp_factor to 1, which typically won't match the source. + * We have to preserve the source's quantization table number, however. + */ + int sv_quant_tbl_no = dstinfo->comp_info[0].quant_tbl_no; + jpeg_set_colorspace(dstinfo, JCS_GRAYSCALE); + dstinfo->comp_info[0].quant_tbl_no = sv_quant_tbl_no; + } else { + /* Sorry, can't do it */ + ERREXIT(dstinfo, JERR_CONVERSION_NOTIMPL); + } + } else if (info->num_components == 1) { + /* For a single-component source, we force the destination sampling factors + * to 1x1, with or without force_grayscale. This is useful because some + * decoders choke on grayscale images with other sampling factors. + */ + dstinfo->comp_info[0].h_samp_factor = 1; + dstinfo->comp_info[0].v_samp_factor = 1; + } + + /* Correct the destination's image dimensions as necessary + * for crop and rotate/flip operations. + */ + dstinfo->image_width = info->output_width; + dstinfo->image_height = info->output_height; + + /* Transpose destination image parameters */ + switch (info->transform) { + case JXFORM_TRANSPOSE: + case JXFORM_TRANSVERSE: + case JXFORM_ROT_90: + case JXFORM_ROT_270: + transpose_critical_parameters(dstinfo); + break; + default: + break; + } + + /* Adjust Exif properties */ + if (srcinfo->marker_list != NULL && + srcinfo->marker_list->marker == JPEG_APP0+1 && + srcinfo->marker_list->data_length >= 6 && + GETJOCTET(srcinfo->marker_list->data[0]) == 0x45 && + GETJOCTET(srcinfo->marker_list->data[1]) == 0x78 && + GETJOCTET(srcinfo->marker_list->data[2]) == 0x69 && + GETJOCTET(srcinfo->marker_list->data[3]) == 0x66 && + GETJOCTET(srcinfo->marker_list->data[4]) == 0 && + GETJOCTET(srcinfo->marker_list->data[5]) == 0) { + /* Suppress output of JFIF marker */ + dstinfo->write_JFIF_header = FALSE; + /* Adjust Exif image parameters */ + if (dstinfo->image_width != srcinfo->image_width || + dstinfo->image_height != srcinfo->image_height) + /* Align data segment to start of TIFF structure for parsing */ + adjust_exif_parameters(srcinfo->marker_list->data + 6, + srcinfo->marker_list->data_length - 6, + dstinfo->image_width, dstinfo->image_height); + } + + /* Return the appropriate output data set */ + if (info->workspace_coef_arrays != NULL) + return info->workspace_coef_arrays; + return src_coef_arrays; +} + + +/* Execute the actual transformation, if any. + * + * This must be called *after* jpeg_write_coefficients, because it depends + * on jpeg_write_coefficients to have computed subsidiary values such as + * the per-component width and height fields in the destination object. + * + * Note that some transformations will modify the source data arrays! + */ + +GLOBAL(void) +jtransform_execute_transform (j_decompress_ptr srcinfo, + j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info) +{ + jvirt_barray_ptr *dst_coef_arrays = info->workspace_coef_arrays; + + /* Note: conditions tested here should match those in switch statement + * in jtransform_request_workspace() + */ + switch (info->transform) { + case JXFORM_NONE: + if (info->x_crop_offset != 0 || info->y_crop_offset != 0) + do_crop(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_FLIP_H: + if (info->y_crop_offset != 0) + do_flip_h(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + else + do_flip_h_no_crop(srcinfo, dstinfo, info->x_crop_offset, + src_coef_arrays); + break; + case JXFORM_FLIP_V: + do_flip_v(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_TRANSPOSE: + do_transpose(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_TRANSVERSE: + do_transverse(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_ROT_90: + do_rot_90(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_ROT_180: + do_rot_180(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_ROT_270: + do_rot_270(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + break; + } +} + +/* jtransform_perfect_transform + * + * Determine whether lossless transformation is perfectly + * possible for a specified image and transformation. + * + * Inputs: + * image_width, image_height: source image dimensions. + * MCU_width, MCU_height: pixel dimensions of MCU. + * transform: transformation identifier. + * Parameter sources from initialized jpeg_struct + * (after reading source header): + * image_width = cinfo.image_width + * image_height = cinfo.image_height + * MCU_width = cinfo.max_h_samp_factor * DCTSIZE + * MCU_height = cinfo.max_v_samp_factor * DCTSIZE + * Result: + * TRUE = perfect transformation possible + * FALSE = perfect transformation not possible + * (may use custom action then) + */ + +GLOBAL(boolean) +jtransform_perfect_transform(JDIMENSION image_width, JDIMENSION image_height, + int MCU_width, int MCU_height, + JXFORM_CODE transform) +{ + boolean result = TRUE; /* initialize TRUE */ + + switch (transform) { + case JXFORM_FLIP_H: + case JXFORM_ROT_270: + if (image_width % (JDIMENSION) MCU_width) + result = FALSE; + break; + case JXFORM_FLIP_V: + case JXFORM_ROT_90: + if (image_height % (JDIMENSION) MCU_height) + result = FALSE; + break; + case JXFORM_TRANSVERSE: + case JXFORM_ROT_180: + if (image_width % (JDIMENSION) MCU_width) + result = FALSE; + if (image_height % (JDIMENSION) MCU_height) + result = FALSE; + break; + default: + break; + } + + return result; +} + +#endif /* TRANSFORMS_SUPPORTED */ + + +/* Setup decompression object to save desired markers in memory. + * This must be called before jpeg_read_header() to have the desired effect. + */ + +GLOBAL(void) +jcopy_markers_setup (j_decompress_ptr srcinfo, JCOPY_OPTION option) +{ +#ifdef SAVE_MARKERS_SUPPORTED + int m; + + /* Save comments except under NONE option */ + if (option != JCOPYOPT_NONE) { + jpeg_save_markers(srcinfo, JPEG_COM, 0xFFFF); + } + /* Save all types of APPn markers iff ALL option */ + if (option == JCOPYOPT_ALL) { + for (m = 0; m < 16; m++) + jpeg_save_markers(srcinfo, JPEG_APP0 + m, 0xFFFF); + } +#endif /* SAVE_MARKERS_SUPPORTED */ +} + +/* Copy markers saved in the given source object to the destination object. + * This should be called just after jpeg_start_compress() or + * jpeg_write_coefficients(). + * Note that those routines will have written the SOI, and also the + * JFIF APP0 or Adobe APP14 markers if selected. + */ + +GLOBAL(void) +jcopy_markers_execute (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JCOPY_OPTION option) +{ + jpeg_saved_marker_ptr marker; + + /* In the current implementation, we don't actually need to examine the + * option flag here; we just copy everything that got saved. + * But to avoid confusion, we do not output JFIF and Adobe APP14 markers + * if the encoder library already wrote one. + */ + for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) { + if (dstinfo->write_JFIF_header && + marker->marker == JPEG_APP0 && + marker->data_length >= 5 && + GETJOCTET(marker->data[0]) == 0x4A && + GETJOCTET(marker->data[1]) == 0x46 && + GETJOCTET(marker->data[2]) == 0x49 && + GETJOCTET(marker->data[3]) == 0x46 && + GETJOCTET(marker->data[4]) == 0) + continue; /* reject duplicate JFIF */ + if (dstinfo->write_Adobe_marker && + marker->marker == JPEG_APP0+14 && + marker->data_length >= 5 && + GETJOCTET(marker->data[0]) == 0x41 && + GETJOCTET(marker->data[1]) == 0x64 && + GETJOCTET(marker->data[2]) == 0x6F && + GETJOCTET(marker->data[3]) == 0x62 && + GETJOCTET(marker->data[4]) == 0x65) + continue; /* reject duplicate Adobe */ +#ifdef NEED_FAR_POINTERS + /* We could use jpeg_write_marker if the data weren't FAR... */ + { + unsigned int i; + jpeg_write_m_header(dstinfo, marker->marker, marker->data_length); + for (i = 0; i < marker->data_length; i++) + jpeg_write_m_byte(dstinfo, marker->data[i]); + } +#else + jpeg_write_marker(dstinfo, marker->marker, + marker->data, marker->data_length); +#endif + } +} diff --git a/3rdparty/openctm/tools/jpeg/transupp.h b/3rdparty/openctm/tools/jpeg/transupp.h new file mode 100644 index 000000000..858e2f48e --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/transupp.h @@ -0,0 +1,205 @@ +/* + * transupp.h + * + * Copyright (C) 1997-2001, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains declarations for image transformation routines and + * other utility code used by the jpegtran sample application. These are + * NOT part of the core JPEG library. But we keep these routines separate + * from jpegtran.c to ease the task of maintaining jpegtran-like programs + * that have other user interfaces. + * + * NOTE: all the routines declared here have very specific requirements + * about when they are to be executed during the reading and writing of the + * source and destination files. See the comments in transupp.c, or see + * jpegtran.c for an example of correct usage. + */ + +/* If you happen not to want the image transform support, disable it here */ +#ifndef TRANSFORMS_SUPPORTED +#define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */ +#endif + +/* + * Although rotating and flipping data expressed as DCT coefficients is not + * hard, there is an asymmetry in the JPEG format specification for images + * whose dimensions aren't multiples of the iMCU size. The right and bottom + * image edges are padded out to the next iMCU boundary with junk data; but + * no padding is possible at the top and left edges. If we were to flip + * the whole image including the pad data, then pad garbage would become + * visible at the top and/or left, and real pixels would disappear into the + * pad margins --- perhaps permanently, since encoders & decoders may not + * bother to preserve DCT blocks that appear to be completely outside the + * nominal image area. So, we have to exclude any partial iMCUs from the + * basic transformation. + * + * Transpose is the only transformation that can handle partial iMCUs at the + * right and bottom edges completely cleanly. flip_h can flip partial iMCUs + * at the bottom, but leaves any partial iMCUs at the right edge untouched. + * Similarly flip_v leaves any partial iMCUs at the bottom edge untouched. + * The other transforms are defined as combinations of these basic transforms + * and process edge blocks in a way that preserves the equivalence. + * + * The "trim" option causes untransformable partial iMCUs to be dropped; + * this is not strictly lossless, but it usually gives the best-looking + * result for odd-size images. Note that when this option is active, + * the expected mathematical equivalences between the transforms may not hold. + * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim + * followed by -rot 180 -trim trims both edges.) + * + * We also offer a lossless-crop option, which discards data outside a given + * image region but losslessly preserves what is inside. Like the rotate and + * flip transforms, lossless crop is restricted by the JPEG format: the upper + * left corner of the selected region must fall on an iMCU boundary. If this + * does not hold for the given crop parameters, we silently move the upper left + * corner up and/or left to make it so, simultaneously increasing the region + * dimensions to keep the lower right crop corner unchanged. (Thus, the + * output image covers at least the requested region, but may cover more.) + * + * If both crop and a rotate/flip transform are requested, the crop is applied + * last --- that is, the crop region is specified in terms of the destination + * image. + * + * We also offer a "force to grayscale" option, which simply discards the + * chrominance channels of a YCbCr image. This is lossless in the sense that + * the luminance channel is preserved exactly. It's not the same kind of + * thing as the rotate/flip transformations, but it's convenient to handle it + * as part of this package, mainly because the transformation routines have to + * be aware of the option to know how many components to work on. + */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jtransform_parse_crop_spec jTrParCrop +#define jtransform_request_workspace jTrRequest +#define jtransform_adjust_parameters jTrAdjust +#define jtransform_execute_transform jTrExec +#define jtransform_perfect_transform jTrPerfect +#define jcopy_markers_setup jCMrkSetup +#define jcopy_markers_execute jCMrkExec +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* + * Codes for supported types of image transformations. + */ + +typedef enum { + JXFORM_NONE, /* no transformation */ + JXFORM_FLIP_H, /* horizontal flip */ + JXFORM_FLIP_V, /* vertical flip */ + JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */ + JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */ + JXFORM_ROT_90, /* 90-degree clockwise rotation */ + JXFORM_ROT_180, /* 180-degree rotation */ + JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */ +} JXFORM_CODE; + +/* + * Codes for crop parameters, which can individually be unspecified, + * positive, or negative. (Negative width or height makes no sense, though.) + */ + +typedef enum { + JCROP_UNSET, + JCROP_POS, + JCROP_NEG +} JCROP_CODE; + +/* + * Transform parameters struct. + * NB: application must not change any elements of this struct after + * calling jtransform_request_workspace. + */ + +typedef struct { + /* Options: set by caller */ + JXFORM_CODE transform; /* image transform operator */ + boolean perfect; /* if TRUE, fail if partial MCUs are requested */ + boolean trim; /* if TRUE, trim partial MCUs as needed */ + boolean force_grayscale; /* if TRUE, convert color image to grayscale */ + boolean crop; /* if TRUE, crop source image */ + + /* Crop parameters: application need not set these unless crop is TRUE. + * These can be filled in by jtransform_parse_crop_spec(). + */ + JDIMENSION crop_width; /* Width of selected region */ + JCROP_CODE crop_width_set; + JDIMENSION crop_height; /* Height of selected region */ + JCROP_CODE crop_height_set; + JDIMENSION crop_xoffset; /* X offset of selected region */ + JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */ + JDIMENSION crop_yoffset; /* Y offset of selected region */ + JCROP_CODE crop_yoffset_set; /* (negative measures from bottom edge) */ + + /* Internal workspace: caller should not touch these */ + int num_components; /* # of components in workspace */ + jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */ + JDIMENSION output_width; /* cropped destination dimensions */ + JDIMENSION output_height; + JDIMENSION x_crop_offset; /* destination crop offsets measured in iMCUs */ + JDIMENSION y_crop_offset; + int max_h_samp_factor; /* destination iMCU size */ + int max_v_samp_factor; +} jpeg_transform_info; + + +#if TRANSFORMS_SUPPORTED + +/* Parse a crop specification (written in X11 geometry style) */ +EXTERN(boolean) jtransform_parse_crop_spec + JPP((jpeg_transform_info *info, const char *spec)); +/* Request any required workspace */ +EXTERN(void) jtransform_request_workspace + JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info)); +/* Adjust output image parameters */ +EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters + JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info)); +/* Execute the actual transformation, if any */ +EXTERN(void) jtransform_execute_transform + JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info)); +/* Determine whether lossless transformation is perfectly + * possible for a specified image and transformation. + */ +EXTERN(boolean) jtransform_perfect_transform + JPP((JDIMENSION image_width, JDIMENSION image_height, + int MCU_width, int MCU_height, + JXFORM_CODE transform)); + +/* jtransform_execute_transform used to be called + * jtransform_execute_transformation, but some compilers complain about + * routine names that long. This macro is here to avoid breaking any + * old source code that uses the original name... + */ +#define jtransform_execute_transformation jtransform_execute_transform + +#endif /* TRANSFORMS_SUPPORTED */ + + +/* + * Support for copying optional markers from source to destination file. + */ + +typedef enum { + JCOPYOPT_NONE, /* copy no optional markers */ + JCOPYOPT_COMMENTS, /* copy only comment (COM) markers */ + JCOPYOPT_ALL /* copy all optional markers */ +} JCOPY_OPTION; + +#define JCOPYOPT_DEFAULT JCOPYOPT_COMMENTS /* recommended default */ + +/* Setup decompression object to save desired markers in memory */ +EXTERN(void) jcopy_markers_setup + JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option)); +/* Copy markers saved in the given source object to the destination object */ +EXTERN(void) jcopy_markers_execute + JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JCOPY_OPTION option)); diff --git a/3rdparty/openctm/tools/jpeg/usage.txt b/3rdparty/openctm/tools/jpeg/usage.txt new file mode 100644 index 000000000..e3465cf19 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/usage.txt @@ -0,0 +1,605 @@ +USAGE instructions for the Independent JPEG Group's JPEG software +================================================================= + +This file describes usage of the JPEG conversion programs cjpeg and djpeg, +as well as the utility programs jpegtran, rdjpgcom and wrjpgcom. (See +the other documentation files if you wish to use the JPEG library within +your own programs.) + +If you are on a Unix machine you may prefer to read the Unix-style manual +pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1. + + +INTRODUCTION + +These programs implement JPEG image encoding, decoding, and transcoding. +JPEG (pronounced "jay-peg") is a standardized compression method for +full-color and gray-scale images. + + +GENERAL USAGE + +We provide two programs, cjpeg to compress an image file into JPEG format, +and djpeg to decompress a JPEG file back into a conventional image format. + +On Unix-like systems, you say: + cjpeg [switches] [imagefile] >jpegfile +or + djpeg [switches] [jpegfile] >imagefile +The programs read the specified input file, or standard input if none is +named. They always write to standard output (with trace/error messages to +standard error). These conventions are handy for piping images between +programs. + +On most non-Unix systems, you say: + cjpeg [switches] imagefile jpegfile +or + djpeg [switches] jpegfile imagefile +i.e., both the input and output files are named on the command line. This +style is a little more foolproof, and it loses no functionality if you don't +have pipes. (You can get this style on Unix too, if you prefer, by defining +TWO_FILE_COMMANDLINE when you compile the programs; see install.txt.) + +You can also say: + cjpeg [switches] -outfile jpegfile imagefile +or + djpeg [switches] -outfile imagefile jpegfile +This syntax works on all systems, so it is useful for scripts. + +The currently supported image file formats are: PPM (PBMPLUS color format), +PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster Toolkit +format). (RLE is supported only if the URT library is available.) +cjpeg recognizes the input image format automatically, with the exception +of some Targa-format files. You have to tell djpeg which format to generate. + +JPEG files are in the defacto standard JFIF file format. There are other, +less widely used JPEG-based file formats, but we don't support them. + +All switch names may be abbreviated; for example, -grayscale may be written +-gray or -gr. Most of the "basic" switches can be abbreviated to as little as +one letter. Upper and lower case are equivalent (-BMP is the same as -bmp). +British spellings are also accepted (e.g., -greyscale), though for brevity +these are not mentioned below. + + +CJPEG DETAILS + +The basic command line switches for cjpeg are: + + -quality N[,...] Scale quantization tables to adjust image quality. + Quality is 0 (worst) to 100 (best); default is 75. + (See below for more info.) + + -grayscale Create monochrome JPEG file from color input. + Be sure to use this switch when compressing a grayscale + BMP file, because cjpeg isn't bright enough to notice + whether a BMP file uses only shades of gray. By + saying -grayscale, you'll get a smaller JPEG file that + takes less time to process. + + -optimize Perform optimization of entropy encoding parameters. + Without this, default encoding parameters are used. + -optimize usually makes the JPEG file a little smaller, + but cjpeg runs somewhat slower and needs much more + memory. Image quality and speed of decompression are + unaffected by -optimize. + + -progressive Create progressive JPEG file (see below). + + -scale M/N Scale the output image by a factor M/N. Currently + supported scale factors are 8/N with all N from 1 to + 16. + + -targa Input file is Targa format. Targa files that contain + an "identification" field will not be automatically + recognized by cjpeg; for such files you must specify + -targa to make cjpeg treat the input as Targa format. + For most Targa files, you won't need this switch. + +The -quality switch lets you trade off compressed file size against quality of +the reconstructed image: the higher the quality setting, the larger the JPEG +file, and the closer the output image will be to the original input. Normally +you want to use the lowest quality setting (smallest file) that decompresses +into something visually indistinguishable from the original image. For this +purpose the quality setting should be between 50 and 95; the default of 75 is +often about right. If you see defects at -quality 75, then go up 5 or 10 +counts at a time until you are happy with the output image. (The optimal +setting will vary from one image to another.) + +-quality 100 will generate a quantization table of all 1's, minimizing loss +in the quantization step (but there is still information loss in subsampling, +as well as roundoff error). This setting is mainly of interest for +experimental purposes. Quality values above about 95 are NOT recommended for +normal use; the compressed file size goes up dramatically for hardly any gain +in output image quality. + +In the other direction, quality values below 50 will produce very small files +of low image quality. Settings around 5 to 10 might be useful in preparing an +index of a large image library, for example. Try -quality 2 (or so) for some +amusing Cubist effects. (Note: quality values below about 25 generate 2-byte +quantization tables, which are considered optional in the JPEG standard. +cjpeg emits a warning message when you give such a quality value, because some +other JPEG programs may be unable to decode the resulting file. Use -baseline +if you need to ensure compatibility at low quality values.) + +The -quality option has been extended in IJG version 7 for support of separate +quality settings for luminance and chrominance (or in general, for every +provided quantization table slot). This feature is useful for high-quality +applications which cannot accept the damage of color data by coarse +subsampling settings. You can now easily reduce the color data amount more +smoothly with finer control without separate subsampling. The resulting file +is fully compliant with standard JPEG decoders. +Note that the -quality ratings refer to the quantization table slots, and that +the last value is replicated if there are more q-table slots than parameters. +The default q-table slots are 0 for luminance and 1 for chrominance with +default tables as given in the JPEG standard. This is compatible with the old +behaviour in case that only one parameter is given, which is then used for +both luminance and chrominance (slots 0 and 1). More or custom quantization +tables can be set with -qtables and assigned to components with -qslots +parameter (see the "wizard" switches below). +CAUTION: You must explicitely add -sample 1x1 for efficient separate color +quality selection, since the default value used by library is 2x2! + +The -progressive switch creates a "progressive JPEG" file. In this type of +JPEG file, the data is stored in multiple scans of increasing quality. If the +file is being transmitted over a slow communications link, the decoder can use +the first scan to display a low-quality image very quickly, and can then +improve the display with each subsequent scan. The final image is exactly +equivalent to a standard JPEG file of the same quality setting, and the total +file size is about the same --- often a little smaller. + +Switches for advanced users: + + -dct int Use integer DCT method (default). + -dct fast Use fast integer DCT (less accurate). + -dct float Use floating-point DCT method. + The float method is very slightly more accurate than + the int method, but is much slower unless your machine + has very fast floating-point hardware. Also note that + results of the floating-point method may vary slightly + across machines, while the integer methods should give + the same results everywhere. The fast integer method + is much less accurate than the other two. + + -nosmooth Don't use high-quality downsampling. + + -restart N Emit a JPEG restart marker every N MCU rows, or every + N MCU blocks if "B" is attached to the number. + -restart 0 (the default) means no restart markers. + + -smooth N Smooth the input image to eliminate dithering noise. + N, ranging from 1 to 100, indicates the strength of + smoothing. 0 (the default) means no smoothing. + + -maxmemory N Set limit for amount of memory to use in processing + large images. Value is in thousands of bytes, or + millions of bytes if "M" is attached to the number. + For example, -max 4m selects 4000000 bytes. If more + space is needed, temporary files will be used. + + -verbose Enable debug printout. More -v's give more printout. + or -debug Also, version information is printed at startup. + +The -restart option inserts extra markers that allow a JPEG decoder to +resynchronize after a transmission error. Without restart markers, any damage +to a compressed file will usually ruin the image from the point of the error +to the end of the image; with restart markers, the damage is usually confined +to the portion of the image up to the next restart marker. Of course, the +restart markers occupy extra space. We recommend -restart 1 for images that +will be transmitted across unreliable networks such as Usenet. + +The -smooth option filters the input to eliminate fine-scale noise. This is +often useful when converting dithered images to JPEG: a moderate smoothing +factor of 10 to 50 gets rid of dithering patterns in the input file, resulting +in a smaller JPEG file and a better-looking image. Too large a smoothing +factor will visibly blur the image, however. + +Switches for wizards: + + -arithmetic Use arithmetic coding. CAUTION: arithmetic coded JPEG + is not yet widely implemented, so many decoders will + be unable to view an arithmetic coded JPEG file at + all. + + -baseline Force baseline-compatible quantization tables to be + generated. This clamps quantization values to 8 bits + even at low quality settings. (This switch is poorly + named, since it does not ensure that the output is + actually baseline JPEG. For example, you can use + -baseline and -progressive together.) + + -qtables file Use the quantization tables given in the specified + text file. + + -qslots N[,...] Select which quantization table to use for each color + component. + + -sample HxV[,...] Set JPEG sampling factors for each color component. + + -scans file Use the scan script given in the specified text file. + +The "wizard" switches are intended for experimentation with JPEG. If you +don't know what you are doing, DON'T USE THEM. These switches are documented +further in the file wizard.txt. + + +DJPEG DETAILS + +The basic command line switches for djpeg are: + + -colors N Reduce image to at most N colors. This reduces the + or -quantize N number of colors used in the output image, so that it + can be displayed on a colormapped display or stored in + a colormapped file format. For example, if you have + an 8-bit display, you'd need to reduce to 256 or fewer + colors. (-colors is the recommended name, -quantize + is provided only for backwards compatibility.) + + -fast Select recommended processing options for fast, low + quality output. (The default options are chosen for + highest quality output.) Currently, this is equivalent + to "-dct fast -nosmooth -onepass -dither ordered". + + -grayscale Force gray-scale output even if JPEG file is color. + Useful for viewing on monochrome displays; also, + djpeg runs noticeably faster in this mode. + + -scale M/N Scale the output image by a factor M/N. Currently + supported scale factors are M/8 with all M from 1 to + 16. If the /N part is omitted, then M specifies the + DCT scaled size to be applied on the given input, + which is currently equivalent to M/8 scaling, since + the source DCT size is currently always 8. + Scaling is handy if the image is larger than your + screen; also, djpeg runs much faster when scaling + down the output. + + -bmp Select BMP output format (Windows flavor). 8-bit + colormapped format is emitted if -colors or -grayscale + is specified, or if the JPEG file is gray-scale; + otherwise, 24-bit full-color format is emitted. + + -gif Select GIF output format. Since GIF does not support + more than 256 colors, -colors 256 is assumed (unless + you specify a smaller number of colors). If you + specify -fast, the default number of colors is 216. + + -os2 Select BMP output format (OS/2 1.x flavor). 8-bit + colormapped format is emitted if -colors or -grayscale + is specified, or if the JPEG file is gray-scale; + otherwise, 24-bit full-color format is emitted. + + -pnm Select PBMPLUS (PPM/PGM) output format (this is the + default format). PGM is emitted if the JPEG file is + gray-scale or if -grayscale is specified; otherwise + PPM is emitted. + + -rle Select RLE output format. (Requires URT library.) + + -targa Select Targa output format. Gray-scale format is + emitted if the JPEG file is gray-scale or if + -grayscale is specified; otherwise, colormapped format + is emitted if -colors is specified; otherwise, 24-bit + full-color format is emitted. + +Switches for advanced users: + + -dct int Use integer DCT method (default). + -dct fast Use fast integer DCT (less accurate). + -dct float Use floating-point DCT method. + The float method is very slightly more accurate than + the int method, but is much slower unless your machine + has very fast floating-point hardware. Also note that + results of the floating-point method may vary slightly + across machines, while the integer methods should give + the same results everywhere. The fast integer method + is much less accurate than the other two. + + -dither fs Use Floyd-Steinberg dithering in color quantization. + -dither ordered Use ordered dithering in color quantization. + -dither none Do not use dithering in color quantization. + By default, Floyd-Steinberg dithering is applied when + quantizing colors; this is slow but usually produces + the best results. Ordered dither is a compromise + between speed and quality; no dithering is fast but + usually looks awful. Note that these switches have + no effect unless color quantization is being done. + Ordered dither is only available in -onepass mode. + + -map FILE Quantize to the colors used in the specified image + file. This is useful for producing multiple files + with identical color maps, or for forcing a predefined + set of colors to be used. The FILE must be a GIF + or PPM file. This option overrides -colors and + -onepass. + + -nosmooth Don't use high-quality upsampling. + + -onepass Use one-pass instead of two-pass color quantization. + The one-pass method is faster and needs less memory, + but it produces a lower-quality image. -onepass is + ignored unless you also say -colors N. Also, + the one-pass method is always used for gray-scale + output (the two-pass method is no improvement then). + + -maxmemory N Set limit for amount of memory to use in processing + large images. Value is in thousands of bytes, or + millions of bytes if "M" is attached to the number. + For example, -max 4m selects 4000000 bytes. If more + space is needed, temporary files will be used. + + -verbose Enable debug printout. More -v's give more printout. + or -debug Also, version information is printed at startup. + + +HINTS FOR CJPEG + +Color GIF files are not the ideal input for JPEG; JPEG is really intended for +compressing full-color (24-bit) images. In particular, don't try to convert +cartoons, line drawings, and other images that have only a few distinct +colors. GIF works great on these, JPEG does not. If you want to convert a +GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options +to get a satisfactory conversion. -smooth 10 or so is often helpful. + +Avoid running an image through a series of JPEG compression/decompression +cycles. Image quality loss will accumulate; after ten or so cycles the image +may be noticeably worse than it was after one cycle. It's best to use a +lossless format while manipulating an image, then convert to JPEG format when +you are ready to file the image away. + +The -optimize option to cjpeg is worth using when you are making a "final" +version for posting or archiving. It's also a win when you are using low +quality settings to make very small JPEG files; the percentage improvement +is often a lot more than it is on larger files. (At present, -optimize +mode is always selected when generating progressive JPEG files.) + +GIF input files are no longer supported, to avoid the Unisys LZW patent. +(Conversion of GIF files to JPEG is usually a bad idea anyway.) + + +HINTS FOR DJPEG + +To get a quick preview of an image, use the -grayscale and/or -scale switches. +"-grayscale -scale 1/8" is the fastest case. + +Several options are available that trade off image quality to gain speed. +"-fast" turns on the recommended settings. + +"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality. +When producing a color-quantized image, "-onepass -dither ordered" is fast but +much lower quality than the default behavior. "-dither none" may give +acceptable results in two-pass mode, but is seldom tolerable in one-pass mode. + +If you are fortunate enough to have very fast floating point hardware, +"-dct float" may be even faster than "-dct fast". But on most machines +"-dct float" is slower than "-dct int"; in this case it is not worth using, +because its theoretical accuracy advantage is too small to be significant +in practice. + +Two-pass color quantization requires a good deal of memory; on MS-DOS machines +it may run out of memory even with -maxmemory 0. In that case you can still +decompress, with some loss of image quality, by specifying -onepass for +one-pass quantization. + +To avoid the Unisys LZW patent, djpeg produces uncompressed GIF files. These +are larger than they should be, but are readable by standard GIF decoders. + + +HINTS FOR BOTH PROGRAMS + +If more space is needed than will fit in the available main memory (as +determined by -maxmemory), temporary files will be used. (MS-DOS versions +will try to get extended or expanded memory first.) The temporary files are +often rather large: in typical cases they occupy three bytes per pixel, for +example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough +free disk space, leave out -progressive and -optimize (for cjpeg) or specify +-onepass (for djpeg). + +On MS-DOS, the temporary files are created in the directory named by the TMP +or TEMP environment variable, or in the current directory if neither of those +exist. Amiga implementations put the temp files in the directory named by +JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free +space. + +The default memory usage limit (-maxmemory) is set when the software is +compiled. If you get an "insufficient memory" error, try specifying a smaller +-maxmemory value, even -maxmemory 0 to use the absolute minimum space. You +may want to recompile with a smaller default value if this happens often. + +On machines that have "environment" variables, you can define the environment +variable JPEGMEM to set the default memory limit. The value is specified as +described for the -maxmemory switch. JPEGMEM overrides the default value +specified when the program was compiled, and itself is overridden by an +explicit -maxmemory switch. + +On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to +use. (Extended or expanded memory is also used if available.) Most +DOS-specific versions of this software do their own memory space estimation +and do not need you to specify -maxmemory. + + +JPEGTRAN + +jpegtran performs various useful transformations of JPEG files. +It can translate the coded representation from one variant of JPEG to another, +for example from baseline JPEG to progressive JPEG or vice versa. It can also +perform some rearrangements of the image data, for example turning an image +from landscape to portrait format by rotation. + +jpegtran works by rearranging the compressed data (DCT coefficients), without +ever fully decoding the image. Therefore, its transformations are lossless: +there is no image degradation at all, which would not be true if you used +djpeg followed by cjpeg to accomplish the same conversion. But by the same +token, jpegtran cannot perform lossy operations such as changing the image +quality. + +jpegtran uses a command line syntax similar to cjpeg or djpeg. +On Unix-like systems, you say: + jpegtran [switches] [inputfile] >outputfile +On most non-Unix systems, you say: + jpegtran [switches] inputfile outputfile +where both the input and output files are JPEG files. + +To specify the coded JPEG representation used in the output file, +jpegtran accepts a subset of the switches recognized by cjpeg: + -optimize Perform optimization of entropy encoding parameters. + -progressive Create progressive JPEG file. + -restart N Emit a JPEG restart marker every N MCU rows, or every + N MCU blocks if "B" is attached to the number. + -arithmetic Use arithmetic coding. + -scans file Use the scan script given in the specified text file. +See the previous discussion of cjpeg for more details about these switches. +If you specify none of these switches, you get a plain baseline-JPEG output +file. The quality setting and so forth are determined by the input file. + +The image can be losslessly transformed by giving one of these switches: + -flip horizontal Mirror image horizontally (left-right). + -flip vertical Mirror image vertically (top-bottom). + -rotate 90 Rotate image 90 degrees clockwise. + -rotate 180 Rotate image 180 degrees. + -rotate 270 Rotate image 270 degrees clockwise (or 90 ccw). + -transpose Transpose image (across UL-to-LR axis). + -transverse Transverse transpose (across UR-to-LL axis). + +The transpose transformation has no restrictions regarding image dimensions. +The other transformations operate rather oddly if the image dimensions are not +a multiple of the iMCU size (usually 8 or 16 pixels), because they can only +transform complete blocks of DCT coefficient data in the desired way. + +jpegtran's default behavior when transforming an odd-size image is designed +to preserve exact reversibility and mathematical consistency of the +transformation set. As stated, transpose is able to flip the entire image +area. Horizontal mirroring leaves any partial iMCU column at the right edge +untouched, but is able to flip all rows of the image. Similarly, vertical +mirroring leaves any partial iMCU row at the bottom edge untouched, but is +able to flip all columns. The other transforms can be built up as sequences +of transpose and flip operations; for consistency, their actions on edge +pixels are defined to be the same as the end result of the corresponding +transpose-and-flip sequence. + +For practical use, you may prefer to discard any untransformable edge pixels +rather than having a strange-looking strip along the right and/or bottom edges +of a transformed image. To do this, add the -trim switch: + -trim Drop non-transformable edge blocks. +Obviously, a transformation with -trim is not reversible, so strictly speaking +jpegtran with this switch is not lossless. Also, the expected mathematical +equivalences between the transformations no longer hold. For example, +"-rot 270 -trim" trims only the bottom edge, but "-rot 90 -trim" followed by +"-rot 180 -trim" trims both edges. + +If you are only interested in perfect transformation, add the -perfect switch: + -perfect Fails with an error if the transformation is not + perfect. +For example you may want to do + jpegtran -rot 90 -perfect foo.jpg || djpeg foo.jpg | pnmflip -r90 | cjpeg +to do a perfect rotation if available or an approximated one if not. + +We also offer a lossless-crop option, which discards data outside a given +image region but losslessly preserves what is inside. Like the rotate and +flip transforms, lossless crop is restricted by the current JPEG format: the +upper left corner of the selected region must fall on an iMCU boundary. If +this does not hold for the given crop parameters, we silently move the upper +left corner up and/or left to make it so, simultaneously increasing the region +dimensions to keep the lower right crop corner unchanged. (Thus, the output +image covers at least the requested region, but may cover more.) + +The image can be losslessly cropped by giving the switch: + -crop WxH+X+Y Crop to a rectangular subarea of width W, height H + starting at point X,Y. + +Another not-strictly-lossless transformation switch is: + -grayscale Force grayscale output. +This option discards the chrominance channels if the input image is YCbCr +(ie, a standard color JPEG), resulting in a grayscale JPEG file. The +luminance channel is preserved exactly, so this is a better method of reducing +to grayscale than decompression, conversion, and recompression. This switch +is particularly handy for fixing a monochrome picture that was mistakenly +encoded as a color JPEG. (In such a case, the space savings from getting rid +of the near-empty chroma channels won't be large; but the decoding time for +a grayscale JPEG is substantially less than that for a color JPEG.) + +jpegtran also recognizes these switches that control what to do with "extra" +markers, such as comment blocks: + -copy none Copy no extra markers from source file. This setting + suppresses all comments and other excess baggage + present in the source file. + -copy comments Copy only comment markers. This setting copies + comments from the source file, but discards + any other inessential (for image display) data. + -copy all Copy all extra markers. This setting preserves + miscellaneous markers found in the source file, such + as JFIF thumbnails, Exif data, and Photoshop settings. + In some files these extra markers can be sizable. +The default behavior is -copy comments. (Note: in IJG releases v6 and v6a, +jpegtran always did the equivalent of -copy none.) + +Additional switches recognized by jpegtran are: + -outfile filename + -maxmemory N + -verbose + -debug +These work the same as in cjpeg or djpeg. + + +THE COMMENT UTILITIES + +The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. +Although the standard doesn't actually define what COM blocks are for, they +are widely used to hold user-supplied text strings. This lets you add +annotations, titles, index terms, etc to your JPEG files, and later retrieve +them as text. COM blocks do not interfere with the image stored in the JPEG +file. The maximum size of a COM block is 64K, but you can have as many of +them as you like in one JPEG file. + +We provide two utility programs to display COM block contents and add COM +blocks to a JPEG file. + +rdjpgcom searches a JPEG file and prints the contents of any COM blocks on +standard output. The command line syntax is + rdjpgcom [-raw] [-verbose] [inputfilename] +The switch "-raw" (or just "-r") causes rdjpgcom to also output non-printable +characters in comments, which are normally escaped for security reasons. +The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG +image dimensions. If you omit the input file name from the command line, +the JPEG file is read from standard input. (This may not work on some +operating systems, if binary data can't be read from stdin.) + +wrjpgcom adds a COM block, containing text you provide, to a JPEG file. +Ordinarily, the COM block is added after any existing COM blocks, but you +can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG +file; it does not modify the input file. DO NOT try to overwrite the input +file by directing wrjpgcom's output back into it; on most systems this will +just destroy your file. + +The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like +systems, it is + wrjpgcom [switches] [inputfilename] +The output file is written to standard output. The input file comes from +the named file, or from standard input if no input file is named. + +On most non-Unix systems, the syntax is + wrjpgcom [switches] inputfilename outputfilename +where both input and output file names must be given explicitly. + +wrjpgcom understands three switches: + -replace Delete any existing COM blocks from the file. + -comment "Comment text" Supply new COM text on command line. + -cfile name Read text for new COM block from named file. +(Switch names can be abbreviated.) If you have only one line of comment text +to add, you can provide it on the command line with -comment. The comment +text must be surrounded with quotes so that it is treated as a single +argument. Longer comments can be read from a text file. + +If you give neither -comment nor -cfile, then wrjpgcom will read the comment +text from standard input. (In this case an input image file name MUST be +supplied, so that the source JPEG file comes from somewhere else.) You can +enter multiple lines, up to 64KB worth. Type an end-of-file indicator +(usually control-D or control-Z) to terminate the comment text entry. + +wrjpgcom will not add a COM block if the provided comment string is empty. +Therefore -replace -comment "" can be used to delete all COM blocks from a +file. + +These utility programs do not depend on the IJG JPEG library. In +particular, the source code for rdjpgcom is intended as an illustration of +the minimum amount of code required to parse a JPEG file header correctly. diff --git a/3rdparty/openctm/tools/jpeg/wizard.txt b/3rdparty/openctm/tools/jpeg/wizard.txt new file mode 100644 index 000000000..02418ba2b --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wizard.txt @@ -0,0 +1,211 @@ +Advanced usage instructions for the Independent JPEG Group's JPEG software +========================================================================== + +This file describes cjpeg's "switches for wizards". + +The "wizard" switches are intended for experimentation with JPEG by persons +who are reasonably knowledgeable about the JPEG standard. If you don't know +what you are doing, DON'T USE THESE SWITCHES. You'll likely produce files +with worse image quality and/or poorer compression than you'd get from the +default settings. Furthermore, these switches must be used with caution +when making files intended for general use, because not all JPEG decoders +will support unusual JPEG parameter settings. + + +Quantization Table Adjustment +----------------------------- + +Ordinarily, cjpeg starts with a default set of tables (the same ones given +as examples in the JPEG standard) and scales them up or down according to +the -quality setting. The details of the scaling algorithm can be found in +jcparam.c. At very low quality settings, some quantization table entries +can get scaled up to values exceeding 255. Although 2-byte quantization +values are supported by the IJG software, this feature is not in baseline +JPEG and is not supported by all implementations. If you need to ensure +wide compatibility of low-quality files, you can constrain the scaled +quantization values to no more than 255 by giving the -baseline switch. +Note that use of -baseline will result in poorer quality for the same file +size, since more bits than necessary are expended on higher AC coefficients. + +You can substitute a different set of quantization values by using the +-qtables switch: + + -qtables file Use the quantization tables given in the named file. + +The specified file should be a text file containing decimal quantization +values. The file should contain one to four tables, each of 64 elements. +The tables are implicitly numbered 0,1,etc. in order of appearance. Table +entries appear in normal array order (NOT in the zigzag order in which they +will be stored in the JPEG file). + +Quantization table files are free format, in that arbitrary whitespace can +appear between numbers. Also, comments can be included: a comment starts +with '#' and extends to the end of the line. Here is an example file that +duplicates the default quantization tables: + + # Quantization tables given in JPEG spec, section K.1 + + # This is table 0 (the luminance table): + 16 11 10 16 24 40 51 61 + 12 12 14 19 26 58 60 55 + 14 13 16 24 40 57 69 56 + 14 17 22 29 51 87 80 62 + 18 22 37 56 68 109 103 77 + 24 35 55 64 81 104 113 92 + 49 64 78 87 103 121 120 101 + 72 92 95 98 112 100 103 99 + + # This is table 1 (the chrominance table): + 17 18 24 47 99 99 99 99 + 18 21 26 66 99 99 99 99 + 24 26 56 99 99 99 99 99 + 47 66 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + +If the -qtables switch is used without -quality, then the specified tables +are used exactly as-is. If both -qtables and -quality are used, then the +tables taken from the file are scaled in the same fashion that the default +tables would be scaled for that quality setting. If -baseline appears, then +the quantization values are constrained to the range 1-255. + +By default, cjpeg will use quantization table 0 for luminance components and +table 1 for chrominance components. To override this choice, use the -qslots +switch: + + -qslots N[,...] Select which quantization table to use for + each color component. + +The -qslots switch specifies a quantization table number for each color +component, in the order in which the components appear in the JPEG SOF marker. +For example, to create a separate table for each of Y,Cb,Cr, you could +provide a -qtables file that defines three quantization tables and say +"-qslots 0,1,2". If -qslots gives fewer table numbers than there are color +components, then the last table number is repeated as necessary. + + +Sampling Factor Adjustment +-------------------------- + +By default, cjpeg uses 2:1 horizontal and vertical downsampling when +compressing YCbCr data, and no downsampling for all other color spaces. +You can override this default with the -sample switch: + + -sample HxV[,...] Set JPEG sampling factors for each color + component. + +The -sample switch specifies the JPEG sampling factors for each color +component, in the order in which they appear in the JPEG SOF marker. +If you specify fewer HxV pairs than there are components, the remaining +components are set to 1x1 sampling. For example, the default YCbCr setting +is equivalent to "-sample 2x2,1x1,1x1", which can be abbreviated to +"-sample 2x2". + +There are still some JPEG decoders in existence that support only 2x1 +sampling (also called 4:2:2 sampling). Compatibility with such decoders can +be achieved by specifying "-sample 2x1". This is not recommended unless +really necessary, since it increases file size and encoding/decoding time +with very little quality gain. + + +Multiple Scan / Progression Control +----------------------------------- + +By default, cjpeg emits a single-scan sequential JPEG file. The +-progressive switch generates a progressive JPEG file using a default series +of progression parameters. You can create multiple-scan sequential JPEG +files or progressive JPEG files with custom progression parameters by using +the -scans switch: + + -scans file Use the scan sequence given in the named file. + +The specified file should be a text file containing a "scan script". +The script specifies the contents and ordering of the scans to be emitted. +Each entry in the script defines one scan. A scan definition specifies +the components to be included in the scan, and for progressive JPEG it also +specifies the progression parameters Ss,Se,Ah,Al for the scan. Scan +definitions are separated by semicolons (';'). A semicolon after the last +scan definition is optional. + +Each scan definition contains one to four component indexes, optionally +followed by a colon (':') and the four progressive-JPEG parameters. The +component indexes denote which color component(s) are to be transmitted in +the scan. Components are numbered in the order in which they appear in the +JPEG SOF marker, with the first component being numbered 0. (Note that these +indexes are not the "component ID" codes assigned to the components, just +positional indexes.) + +The progression parameters for each scan are: + Ss Zigzag index of first coefficient included in scan + Se Zigzag index of last coefficient included in scan + Ah Zero for first scan of a coefficient, else Al of prior scan + Al Successive approximation low bit position for scan +If the progression parameters are omitted, the values 0,63,0,0 are used, +producing a sequential JPEG file. cjpeg automatically determines whether +the script represents a progressive or sequential file, by observing whether +Ss and Se values other than 0 and 63 appear. (The -progressive switch is +not needed to specify this; in fact, it is ignored when -scans appears.) +The scan script must meet the JPEG restrictions on progression sequences. +(cjpeg checks that the spec's requirements are obeyed.) + +Scan script files are free format, in that arbitrary whitespace can appear +between numbers and around punctuation. Also, comments can be included: a +comment starts with '#' and extends to the end of the line. For additional +legibility, commas or dashes can be placed between values. (Actually, any +single punctuation character other than ':' or ';' can be inserted.) For +example, the following two scan definitions are equivalent: + 0 1 2: 0 63 0 0; + 0,1,2 : 0-63, 0,0 ; + +Here is an example of a scan script that generates a partially interleaved +sequential JPEG file: + + 0; # Y only in first scan + 1 2; # Cb and Cr in second scan + +Here is an example of a progressive scan script using only spectral selection +(no successive approximation): + + # Interleaved DC scan for Y,Cb,Cr: + 0,1,2: 0-0, 0, 0 ; + # AC scans: + 0: 1-2, 0, 0 ; # First two Y AC coefficients + 0: 3-5, 0, 0 ; # Three more + 1: 1-63, 0, 0 ; # All AC coefficients for Cb + 2: 1-63, 0, 0 ; # All AC coefficients for Cr + 0: 6-9, 0, 0 ; # More Y coefficients + 0: 10-63, 0, 0 ; # Remaining Y coefficients + +Here is an example of a successive-approximation script. This is equivalent +to the default script used by "cjpeg -progressive" for YCbCr images: + + # Initial DC scan for Y,Cb,Cr (lowest bit not sent) + 0,1,2: 0-0, 0, 1 ; + # First AC scan: send first 5 Y AC coefficients, minus 2 lowest bits: + 0: 1-5, 0, 2 ; + # Send all Cr,Cb AC coefficients, minus lowest bit: + # (chroma data is usually too small to be worth subdividing further; + # but note we send Cr first since eye is least sensitive to Cb) + 2: 1-63, 0, 1 ; + 1: 1-63, 0, 1 ; + # Send remaining Y AC coefficients, minus 2 lowest bits: + 0: 6-63, 0, 2 ; + # Send next-to-lowest bit of all Y AC coefficients: + 0: 1-63, 2, 1 ; + # At this point we've sent all but the lowest bit of all coefficients. + # Send lowest bit of DC coefficients + 0,1,2: 0-0, 1, 0 ; + # Send lowest bit of AC coefficients + 2: 1-63, 1, 0 ; + 1: 1-63, 1, 0 ; + # Y AC lowest bit scan is last; it's usually the largest scan + 0: 1-63, 1, 0 ; + +It may be worth pointing out that this script is tuned for quality settings +of around 50 to 75. For lower quality settings, you'd probably want to use +a script with fewer stages of successive approximation (otherwise the +initial scans will be really bad). For higher quality settings, you might +want to use more stages of successive approximation (so that the initial +scans are not too large). diff --git a/3rdparty/openctm/tools/jpeg/wrbmp.c b/3rdparty/openctm/tools/jpeg/wrbmp.c new file mode 100644 index 000000000..2b8146e2c --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrbmp.c @@ -0,0 +1,442 @@ +/* + * wrbmp.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in Microsoft "BMP" + * format (MS Windows 3.x and OS/2 1.x flavors). + * Either 8-bit colormapped or 24-bit full-color format can be written. + * No compression is supported. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + * + * This code contributed by James Arthur Boucher. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef BMP_SUPPORTED + + +/* + * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. + * This is not yet implemented. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + +/* + * Since BMP stores scanlines bottom-to-top, we have to invert the image + * from JPEG's top-to-bottom order. To do this, we save the outgoing data + * in a virtual array during put_pixel_row calls, then actually emit the + * BMP file during finish_output. The virtual array contains one JSAMPLE per + * pixel if the output is grayscale or colormapped, three if it is full color. + */ + +/* Private version of data destination object */ + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + boolean is_os2; /* saves the OS2 format request flag */ + + jvirt_sarray_ptr whole_image; /* needed to reverse row order */ + JDIMENSION data_width; /* JSAMPLEs per row */ + JDIMENSION row_width; /* physical width of one row in the BMP file */ + int pad_bytes; /* number of padding bytes needed per row */ + JDIMENSION cur_output_row; /* next row# to write to virtual array */ +} bmp_dest_struct; + +typedef bmp_dest_struct * bmp_dest_ptr; + + +/* Forward declarations */ +LOCAL(void) write_colormap + JPP((j_decompress_ptr cinfo, bmp_dest_ptr dest, + int map_colors, int map_entry_size)); + + +/* + * Write some pixel data. + * In this module rows_supplied will always be 1. + */ + +METHODDEF(void) +put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* This version is for writing 24-bit pixels */ +{ + bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; + JSAMPARRAY image_ptr; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + int pad; + + /* Access next row in virtual array */ + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->whole_image, + dest->cur_output_row, (JDIMENSION) 1, TRUE); + dest->cur_output_row++; + + /* Transfer data. Note destination values must be in BGR order + * (even though Microsoft's own documents say the opposite). + */ + inptr = dest->pub.buffer[0]; + outptr = image_ptr[0]; + for (col = cinfo->output_width; col > 0; col--) { + outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ + outptr[1] = *inptr++; + outptr[0] = *inptr++; + outptr += 3; + } + + /* Zero out the pad bytes. */ + pad = dest->pad_bytes; + while (--pad >= 0) + *outptr++ = 0; +} + +METHODDEF(void) +put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* This version is for grayscale OR quantized color output */ +{ + bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; + JSAMPARRAY image_ptr; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + int pad; + + /* Access next row in virtual array */ + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->whole_image, + dest->cur_output_row, (JDIMENSION) 1, TRUE); + dest->cur_output_row++; + + /* Transfer data. */ + inptr = dest->pub.buffer[0]; + outptr = image_ptr[0]; + for (col = cinfo->output_width; col > 0; col--) { + *outptr++ = *inptr++; /* can omit GETJSAMPLE() safely */ + } + + /* Zero out the pad bytes. */ + pad = dest->pad_bytes; + while (--pad >= 0) + *outptr++ = 0; +} + + +/* + * Startup: normally writes the file header. + * In this module we may as well postpone everything until finish_output. + */ + +METHODDEF(void) +start_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + /* no work here */ +} + + +/* + * Finish up at the end of the file. + * + * Here is where we really output the BMP file. + * + * First, routines to write the Windows and OS/2 variants of the file header. + */ + +LOCAL(void) +write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) +/* Write a Windows-style BMP file header, including colormap if needed */ +{ + char bmpfileheader[14]; + char bmpinfoheader[40]; +#define PUT_2B(array,offset,value) \ + (array[offset] = (char) ((value) & 0xFF), \ + array[offset+1] = (char) (((value) >> 8) & 0xFF)) +#define PUT_4B(array,offset,value) \ + (array[offset] = (char) ((value) & 0xFF), \ + array[offset+1] = (char) (((value) >> 8) & 0xFF), \ + array[offset+2] = (char) (((value) >> 16) & 0xFF), \ + array[offset+3] = (char) (((value) >> 24) & 0xFF)) + INT32 headersize, bfSize; + int bits_per_pixel, cmap_entries; + + /* Compute colormap size and total file size */ + if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) { + /* Colormapped RGB */ + bits_per_pixel = 8; + cmap_entries = 256; + } else { + /* Unquantized, full color RGB */ + bits_per_pixel = 24; + cmap_entries = 0; + } + } else { + /* Grayscale output. We need to fake a 256-entry colormap. */ + bits_per_pixel = 8; + cmap_entries = 256; + } + /* File size */ + headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */ + bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; + + /* Set unused fields of header to 0 */ + MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); + MEMZERO(bmpinfoheader, SIZEOF(bmpinfoheader)); + + /* Fill the file header */ + bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ + bmpfileheader[1] = 0x4D; + PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ + /* we leave bfReserved1 & bfReserved2 = 0 */ + PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ + + /* Fill the info header (Microsoft calls this a BITMAPINFOHEADER) */ + PUT_2B(bmpinfoheader, 0, 40); /* biSize */ + PUT_4B(bmpinfoheader, 4, cinfo->output_width); /* biWidth */ + PUT_4B(bmpinfoheader, 8, cinfo->output_height); /* biHeight */ + PUT_2B(bmpinfoheader, 12, 1); /* biPlanes - must be 1 */ + PUT_2B(bmpinfoheader, 14, bits_per_pixel); /* biBitCount */ + /* we leave biCompression = 0, for none */ + /* we leave biSizeImage = 0; this is correct for uncompressed data */ + if (cinfo->density_unit == 2) { /* if have density in dots/cm, then */ + PUT_4B(bmpinfoheader, 24, (INT32) (cinfo->X_density*100)); /* XPels/M */ + PUT_4B(bmpinfoheader, 28, (INT32) (cinfo->Y_density*100)); /* XPels/M */ + } + PUT_2B(bmpinfoheader, 32, cmap_entries); /* biClrUsed */ + /* we leave biClrImportant = 0 */ + + if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) + ERREXIT(cinfo, JERR_FILE_WRITE); + if (JFWRITE(dest->pub.output_file, bmpinfoheader, 40) != (size_t) 40) + ERREXIT(cinfo, JERR_FILE_WRITE); + + if (cmap_entries > 0) + write_colormap(cinfo, dest, cmap_entries, 4); +} + + +LOCAL(void) +write_os2_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) +/* Write an OS2-style BMP file header, including colormap if needed */ +{ + char bmpfileheader[14]; + char bmpcoreheader[12]; + INT32 headersize, bfSize; + int bits_per_pixel, cmap_entries; + + /* Compute colormap size and total file size */ + if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) { + /* Colormapped RGB */ + bits_per_pixel = 8; + cmap_entries = 256; + } else { + /* Unquantized, full color RGB */ + bits_per_pixel = 24; + cmap_entries = 0; + } + } else { + /* Grayscale output. We need to fake a 256-entry colormap. */ + bits_per_pixel = 8; + cmap_entries = 256; + } + /* File size */ + headersize = 14 + 12 + cmap_entries * 3; /* Header and colormap */ + bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; + + /* Set unused fields of header to 0 */ + MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); + MEMZERO(bmpcoreheader, SIZEOF(bmpcoreheader)); + + /* Fill the file header */ + bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ + bmpfileheader[1] = 0x4D; + PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ + /* we leave bfReserved1 & bfReserved2 = 0 */ + PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ + + /* Fill the info header (Microsoft calls this a BITMAPCOREHEADER) */ + PUT_2B(bmpcoreheader, 0, 12); /* bcSize */ + PUT_2B(bmpcoreheader, 4, cinfo->output_width); /* bcWidth */ + PUT_2B(bmpcoreheader, 6, cinfo->output_height); /* bcHeight */ + PUT_2B(bmpcoreheader, 8, 1); /* bcPlanes - must be 1 */ + PUT_2B(bmpcoreheader, 10, bits_per_pixel); /* bcBitCount */ + + if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) + ERREXIT(cinfo, JERR_FILE_WRITE); + if (JFWRITE(dest->pub.output_file, bmpcoreheader, 12) != (size_t) 12) + ERREXIT(cinfo, JERR_FILE_WRITE); + + if (cmap_entries > 0) + write_colormap(cinfo, dest, cmap_entries, 3); +} + + +/* + * Write the colormap. + * Windows uses BGR0 map entries; OS/2 uses BGR entries. + */ + +LOCAL(void) +write_colormap (j_decompress_ptr cinfo, bmp_dest_ptr dest, + int map_colors, int map_entry_size) +{ + JSAMPARRAY colormap = cinfo->colormap; + int num_colors = cinfo->actual_number_of_colors; + FILE * outfile = dest->pub.output_file; + int i; + + if (colormap != NULL) { + if (cinfo->out_color_components == 3) { + /* Normal case with RGB colormap */ + for (i = 0; i < num_colors; i++) { + putc(GETJSAMPLE(colormap[2][i]), outfile); + putc(GETJSAMPLE(colormap[1][i]), outfile); + putc(GETJSAMPLE(colormap[0][i]), outfile); + if (map_entry_size == 4) + putc(0, outfile); + } + } else { + /* Grayscale colormap (only happens with grayscale quantization) */ + for (i = 0; i < num_colors; i++) { + putc(GETJSAMPLE(colormap[0][i]), outfile); + putc(GETJSAMPLE(colormap[0][i]), outfile); + putc(GETJSAMPLE(colormap[0][i]), outfile); + if (map_entry_size == 4) + putc(0, outfile); + } + } + } else { + /* If no colormap, must be grayscale data. Generate a linear "map". */ + for (i = 0; i < 256; i++) { + putc(i, outfile); + putc(i, outfile); + putc(i, outfile); + if (map_entry_size == 4) + putc(0, outfile); + } + } + /* Pad colormap with zeros to ensure specified number of colormap entries */ + if (i > map_colors) + ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, i); + for (; i < map_colors; i++) { + putc(0, outfile); + putc(0, outfile); + putc(0, outfile); + if (map_entry_size == 4) + putc(0, outfile); + } +} + + +METHODDEF(void) +finish_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; + register FILE * outfile = dest->pub.output_file; + JSAMPARRAY image_ptr; + register JSAMPROW data_ptr; + JDIMENSION row; + register JDIMENSION col; + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + + /* Write the header and colormap */ + if (dest->is_os2) + write_os2_header(cinfo, dest); + else + write_bmp_header(cinfo, dest); + + /* Write the file body from our virtual array */ + for (row = cinfo->output_height; row > 0; row--) { + if (progress != NULL) { + progress->pub.pass_counter = (long) (cinfo->output_height - row); + progress->pub.pass_limit = (long) cinfo->output_height; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->whole_image, row-1, (JDIMENSION) 1, FALSE); + data_ptr = image_ptr[0]; + for (col = dest->row_width; col > 0; col--) { + putc(GETJSAMPLE(*data_ptr), outfile); + data_ptr++; + } + } + if (progress != NULL) + progress->completed_extra_passes++; + + /* Make sure we wrote the output file OK */ + fflush(outfile); + if (ferror(outfile)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for BMP format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_bmp (j_decompress_ptr cinfo, boolean is_os2) +{ + bmp_dest_ptr dest; + JDIMENSION row_width; + + /* Create module interface object, fill in method pointers */ + dest = (bmp_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(bmp_dest_struct)); + dest->pub.start_output = start_output_bmp; + dest->pub.finish_output = finish_output_bmp; + dest->is_os2 = is_os2; + + if (cinfo->out_color_space == JCS_GRAYSCALE) { + dest->pub.put_pixel_rows = put_gray_rows; + } else if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) + dest->pub.put_pixel_rows = put_gray_rows; + else + dest->pub.put_pixel_rows = put_pixel_rows; + } else { + ERREXIT(cinfo, JERR_BMP_COLORSPACE); + } + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Determine width of rows in the BMP file (padded to 4-byte boundary). */ + row_width = cinfo->output_width * cinfo->output_components; + dest->data_width = row_width; + while ((row_width & 3) != 0) row_width++; + dest->row_width = row_width; + dest->pad_bytes = (int) (row_width - dest->data_width); + + /* Allocate space for inversion array, prepare for write pass */ + dest->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + row_width, cinfo->output_height, (JDIMENSION) 1); + dest->cur_output_row = 0; + if (cinfo->progress != NULL) { + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + progress->total_extra_passes++; /* count file input as separate pass */ + } + + /* Create decompressor output buffer. */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, row_width, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + + return (djpeg_dest_ptr) dest; +} + +#endif /* BMP_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/wrgif.c b/3rdparty/openctm/tools/jpeg/wrgif.c new file mode 100644 index 000000000..13f953b56 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrgif.c @@ -0,0 +1,399 @@ +/* + * wrgif.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in GIF format. + * + ************************************************************************** + * NOTE: to avoid entanglements with Unisys' patent on LZW compression, * + * this code has been modified to output "uncompressed GIF" files. * + * There is no trace of the LZW algorithm in this file. * + ************************************************************************** + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + */ + +/* + * This code is loosely based on ppmtogif from the PBMPLUS distribution + * of Feb. 1991. That file contains the following copyright notice: + * Based on GIFENCODE by David Rowley . + * Lempel-Ziv compression based on "compress" by Spencer W. Thomas et al. + * Copyright (C) 1989 by Jef Poskanzer. + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without express or + * implied warranty. + * + * We are also required to state that + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef GIF_SUPPORTED + + +/* Private version of data destination object */ + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + j_decompress_ptr cinfo; /* back link saves passing separate parm */ + + /* State for packing variable-width codes into a bitstream */ + int n_bits; /* current number of bits/code */ + int maxcode; /* maximum code, given n_bits */ + INT32 cur_accum; /* holds bits not yet output */ + int cur_bits; /* # of bits in cur_accum */ + + /* State for GIF code assignment */ + int ClearCode; /* clear code (doesn't change) */ + int EOFCode; /* EOF code (ditto) */ + int code_counter; /* counts output symbols */ + + /* GIF data packet construction buffer */ + int bytesinpkt; /* # of bytes in current packet */ + char packetbuf[256]; /* workspace for accumulating packet */ + +} gif_dest_struct; + +typedef gif_dest_struct * gif_dest_ptr; + +/* Largest value that will fit in N bits */ +#define MAXCODE(n_bits) ((1 << (n_bits)) - 1) + + +/* + * Routines to package finished data bytes into GIF data blocks. + * A data block consists of a count byte (1..255) and that many data bytes. + */ + +LOCAL(void) +flush_packet (gif_dest_ptr dinfo) +/* flush any accumulated data */ +{ + if (dinfo->bytesinpkt > 0) { /* never write zero-length packet */ + dinfo->packetbuf[0] = (char) dinfo->bytesinpkt++; + if (JFWRITE(dinfo->pub.output_file, dinfo->packetbuf, dinfo->bytesinpkt) + != (size_t) dinfo->bytesinpkt) + ERREXIT(dinfo->cinfo, JERR_FILE_WRITE); + dinfo->bytesinpkt = 0; + } +} + + +/* Add a character to current packet; flush to disk if necessary */ +#define CHAR_OUT(dinfo,c) \ + { (dinfo)->packetbuf[++(dinfo)->bytesinpkt] = (char) (c); \ + if ((dinfo)->bytesinpkt >= 255) \ + flush_packet(dinfo); \ + } + + +/* Routine to convert variable-width codes into a byte stream */ + +LOCAL(void) +output (gif_dest_ptr dinfo, int code) +/* Emit a code of n_bits bits */ +/* Uses cur_accum and cur_bits to reblock into 8-bit bytes */ +{ + dinfo->cur_accum |= ((INT32) code) << dinfo->cur_bits; + dinfo->cur_bits += dinfo->n_bits; + + while (dinfo->cur_bits >= 8) { + CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); + dinfo->cur_accum >>= 8; + dinfo->cur_bits -= 8; + } +} + + +/* The pseudo-compression algorithm. + * + * In this module we simply output each pixel value as a separate symbol; + * thus, no compression occurs. In fact, there is expansion of one bit per + * pixel, because we use a symbol width one bit wider than the pixel width. + * + * GIF ordinarily uses variable-width symbols, and the decoder will expect + * to ratchet up the symbol width after a fixed number of symbols. + * To simplify the logic and keep the expansion penalty down, we emit a + * GIF Clear code to reset the decoder just before the width would ratchet up. + * Thus, all the symbols in the output file will have the same bit width. + * Note that emitting the Clear codes at the right times is a mere matter of + * counting output symbols and is in no way dependent on the LZW patent. + * + * With a small basic pixel width (low color count), Clear codes will be + * needed very frequently, causing the file to expand even more. So this + * simplistic approach wouldn't work too well on bilevel images, for example. + * But for output of JPEG conversions the pixel width will usually be 8 bits + * (129 to 256 colors), so the overhead added by Clear symbols is only about + * one symbol in every 256. + */ + +LOCAL(void) +compress_init (gif_dest_ptr dinfo, int i_bits) +/* Initialize pseudo-compressor */ +{ + /* init all the state variables */ + dinfo->n_bits = i_bits; + dinfo->maxcode = MAXCODE(dinfo->n_bits); + dinfo->ClearCode = (1 << (i_bits - 1)); + dinfo->EOFCode = dinfo->ClearCode + 1; + dinfo->code_counter = dinfo->ClearCode + 2; + /* init output buffering vars */ + dinfo->bytesinpkt = 0; + dinfo->cur_accum = 0; + dinfo->cur_bits = 0; + /* GIF specifies an initial Clear code */ + output(dinfo, dinfo->ClearCode); +} + + +LOCAL(void) +compress_pixel (gif_dest_ptr dinfo, int c) +/* Accept and "compress" one pixel value. + * The given value must be less than n_bits wide. + */ +{ + /* Output the given pixel value as a symbol. */ + output(dinfo, c); + /* Issue Clear codes often enough to keep the reader from ratcheting up + * its symbol size. + */ + if (dinfo->code_counter < dinfo->maxcode) { + dinfo->code_counter++; + } else { + output(dinfo, dinfo->ClearCode); + dinfo->code_counter = dinfo->ClearCode + 2; /* reset the counter */ + } +} + + +LOCAL(void) +compress_term (gif_dest_ptr dinfo) +/* Clean up at end */ +{ + /* Send an EOF code */ + output(dinfo, dinfo->EOFCode); + /* Flush the bit-packing buffer */ + if (dinfo->cur_bits > 0) { + CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); + } + /* Flush the packet buffer */ + flush_packet(dinfo); +} + + +/* GIF header construction */ + + +LOCAL(void) +put_word (gif_dest_ptr dinfo, unsigned int w) +/* Emit a 16-bit word, LSB first */ +{ + putc(w & 0xFF, dinfo->pub.output_file); + putc((w >> 8) & 0xFF, dinfo->pub.output_file); +} + + +LOCAL(void) +put_3bytes (gif_dest_ptr dinfo, int val) +/* Emit 3 copies of same byte value --- handy subr for colormap construction */ +{ + putc(val, dinfo->pub.output_file); + putc(val, dinfo->pub.output_file); + putc(val, dinfo->pub.output_file); +} + + +LOCAL(void) +emit_header (gif_dest_ptr dinfo, int num_colors, JSAMPARRAY colormap) +/* Output the GIF file header, including color map */ +/* If colormap==NULL, synthesize a gray-scale colormap */ +{ + int BitsPerPixel, ColorMapSize, InitCodeSize, FlagByte; + int cshift = dinfo->cinfo->data_precision - 8; + int i; + + if (num_colors > 256) + ERREXIT1(dinfo->cinfo, JERR_TOO_MANY_COLORS, num_colors); + /* Compute bits/pixel and related values */ + BitsPerPixel = 1; + while (num_colors > (1 << BitsPerPixel)) + BitsPerPixel++; + ColorMapSize = 1 << BitsPerPixel; + if (BitsPerPixel <= 1) + InitCodeSize = 2; + else + InitCodeSize = BitsPerPixel; + /* + * Write the GIF header. + * Note that we generate a plain GIF87 header for maximum compatibility. + */ + putc('G', dinfo->pub.output_file); + putc('I', dinfo->pub.output_file); + putc('F', dinfo->pub.output_file); + putc('8', dinfo->pub.output_file); + putc('7', dinfo->pub.output_file); + putc('a', dinfo->pub.output_file); + /* Write the Logical Screen Descriptor */ + put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); + put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); + FlagByte = 0x80; /* Yes, there is a global color table */ + FlagByte |= (BitsPerPixel-1) << 4; /* color resolution */ + FlagByte |= (BitsPerPixel-1); /* size of global color table */ + putc(FlagByte, dinfo->pub.output_file); + putc(0, dinfo->pub.output_file); /* Background color index */ + putc(0, dinfo->pub.output_file); /* Reserved (aspect ratio in GIF89) */ + /* Write the Global Color Map */ + /* If the color map is more than 8 bits precision, */ + /* we reduce it to 8 bits by shifting */ + for (i=0; i < ColorMapSize; i++) { + if (i < num_colors) { + if (colormap != NULL) { + if (dinfo->cinfo->out_color_space == JCS_RGB) { + /* Normal case: RGB color map */ + putc(GETJSAMPLE(colormap[0][i]) >> cshift, dinfo->pub.output_file); + putc(GETJSAMPLE(colormap[1][i]) >> cshift, dinfo->pub.output_file); + putc(GETJSAMPLE(colormap[2][i]) >> cshift, dinfo->pub.output_file); + } else { + /* Grayscale "color map": possible if quantizing grayscale image */ + put_3bytes(dinfo, GETJSAMPLE(colormap[0][i]) >> cshift); + } + } else { + /* Create a gray-scale map of num_colors values, range 0..255 */ + put_3bytes(dinfo, (i * 255 + (num_colors-1)/2) / (num_colors-1)); + } + } else { + /* fill out the map to a power of 2 */ + put_3bytes(dinfo, 0); + } + } + /* Write image separator and Image Descriptor */ + putc(',', dinfo->pub.output_file); /* separator */ + put_word(dinfo, 0); /* left/top offset */ + put_word(dinfo, 0); + put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); /* image size */ + put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); + /* flag byte: not interlaced, no local color map */ + putc(0x00, dinfo->pub.output_file); + /* Write Initial Code Size byte */ + putc(InitCodeSize, dinfo->pub.output_file); + + /* Initialize for "compression" of image data */ + compress_init(dinfo, InitCodeSize+1); +} + + +/* + * Startup: write the file header. + */ + +METHODDEF(void) +start_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + gif_dest_ptr dest = (gif_dest_ptr) dinfo; + + if (cinfo->quantize_colors) + emit_header(dest, cinfo->actual_number_of_colors, cinfo->colormap); + else + emit_header(dest, 256, (JSAMPARRAY) NULL); +} + + +/* + * Write some pixel data. + * In this module rows_supplied will always be 1. + */ + +METHODDEF(void) +put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + gif_dest_ptr dest = (gif_dest_ptr) dinfo; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + for (col = cinfo->output_width; col > 0; col--) { + compress_pixel(dest, GETJSAMPLE(*ptr++)); + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + gif_dest_ptr dest = (gif_dest_ptr) dinfo; + + /* Flush "compression" mechanism */ + compress_term(dest); + /* Write a zero-length data block to end the series */ + putc(0, dest->pub.output_file); + /* Write the GIF terminator mark */ + putc(';', dest->pub.output_file); + /* Make sure we wrote the output file OK */ + fflush(dest->pub.output_file); + if (ferror(dest->pub.output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for GIF format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_gif (j_decompress_ptr cinfo) +{ + gif_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (gif_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(gif_dest_struct)); + dest->cinfo = cinfo; /* make back link for subroutines */ + dest->pub.start_output = start_output_gif; + dest->pub.put_pixel_rows = put_pixel_rows; + dest->pub.finish_output = finish_output_gif; + + if (cinfo->out_color_space != JCS_GRAYSCALE && + cinfo->out_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_GIF_COLORSPACE); + + /* Force quantization if color or if > 8 bits input */ + if (cinfo->out_color_space != JCS_GRAYSCALE || cinfo->data_precision > 8) { + /* Force quantization to at most 256 colors */ + cinfo->quantize_colors = TRUE; + if (cinfo->desired_number_of_colors > 256) + cinfo->desired_number_of_colors = 256; + } + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + if (cinfo->output_components != 1) /* safety check: just one component? */ + ERREXIT(cinfo, JERR_GIF_BUG); + + /* Create decompressor output buffer. */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->output_width, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + + return (djpeg_dest_ptr) dest; +} + +#endif /* GIF_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/wrjpgcom.1 b/3rdparty/openctm/tools/jpeg/wrjpgcom.1 new file mode 100644 index 000000000..44dad355d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrjpgcom.1 @@ -0,0 +1,103 @@ +.TH WRJPGCOM 1 "15 June 1995" +.SH NAME +wrjpgcom \- insert text comments into a JPEG file +.SH SYNOPSIS +.B wrjpgcom +[ +.B \-replace +] +[ +.BI \-comment " text" +] +[ +.BI \-cfile " name" +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B wrjpgcom +reads the named JPEG/JFIF file, or the standard input if no file is named, +and generates a new JPEG/JFIF file on standard output. A comment block is +added to the file. +.PP +The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. +Although the standard doesn't actually define what COM blocks are for, they +are widely used to hold user-supplied text strings. This lets you add +annotations, titles, index terms, etc to your JPEG files, and later retrieve +them as text. COM blocks do not interfere with the image stored in the JPEG +file. The maximum size of a COM block is 64K, but you can have as many of +them as you like in one JPEG file. +.PP +.B wrjpgcom +adds a COM block, containing text you provide, to a JPEG file. +Ordinarily, the COM block is added after any existing COM blocks; but you +can delete the old COM blocks if you wish. +.SH OPTIONS +Switch names may be abbreviated, and are not case sensitive. +.TP +.B \-replace +Delete any existing COM blocks from the file. +.TP +.BI \-comment " text" +Supply text for new COM block on command line. +.TP +.BI \-cfile " name" +Read text for new COM block from named file. +.PP +If you have only one line of comment text to add, you can provide it on the +command line with +.BR \-comment . +The comment text must be surrounded with quotes so that it is treated as a +single argument. Longer comments can be read from a text file. +.PP +If you give neither +.B \-comment +nor +.BR \-cfile , +then +.B wrjpgcom +will read the comment text from standard input. (In this case an input image +file name MUST be supplied, so that the source JPEG file comes from somewhere +else.) You can enter multiple lines, up to 64KB worth. Type an end-of-file +indicator (usually control-D) to terminate the comment text entry. +.PP +.B wrjpgcom +will not add a COM block if the provided comment string is empty. Therefore +\fB\-replace \-comment ""\fR can be used to delete all COM blocks from a file. +.SH EXAMPLES +.LP +Add a short comment to in.jpg, producing out.jpg: +.IP +.B wrjpgcom \-c +\fI"View of my back yard" in.jpg +.B > +.I out.jpg +.PP +Attach a long comment previously stored in comment.txt: +.IP +.B wrjpgcom +.I in.jpg +.B < +.I comment.txt +.B > +.I out.jpg +.PP +or equivalently +.IP +.B wrjpgcom +.B -cfile +.I comment.txt +.B < +.I in.jpg +.B > +.I out.jpg +.SH SEE ALSO +.BR cjpeg (1), +.BR djpeg (1), +.BR jpegtran (1), +.BR rdjpgcom (1) +.SH AUTHOR +Independent JPEG Group diff --git a/3rdparty/openctm/tools/jpeg/wrjpgcom.c b/3rdparty/openctm/tools/jpeg/wrjpgcom.c new file mode 100644 index 000000000..7d10ee66e --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrjpgcom.c @@ -0,0 +1,583 @@ +/* + * wrjpgcom.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a very simple stand-alone application that inserts + * user-supplied text as a COM (comment) marker in a JFIF file. + * This may be useful as an example of the minimum logic needed to parse + * JPEG markers. + */ + +#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ +#include "jinclude.h" /* get auto-config symbols, */ + +#ifndef HAVE_STDLIB_H /* should declare malloc() */ +extern void * malloc (); +#endif +#include /* to declare isupper(), tolower() */ +#ifdef USE_SETMODE +#include /* to declare setmode()'s parameter macros */ +/* If you have setmode() but not , just delete this line: */ +#include /* to declare setmode() */ +#endif + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#define WRITE_BINARY "w" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#define WRITE_BINARY "wb", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#define WRITE_BINARY "wb" +#endif +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif +#ifndef EXIT_SUCCESS +#ifdef VMS +#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ +#else +#define EXIT_SUCCESS 0 +#endif +#endif + +/* Reduce this value if your malloc() can't allocate blocks up to 64K. + * On DOS, compiling in large model is usually a better solution. + */ + +#ifndef MAX_COM_LENGTH +#define MAX_COM_LENGTH 65000L /* must be <= 65533 in any case */ +#endif + + +/* + * These macros are used to read the input file and write the output file. + * To reuse this code in another application, you might need to change these. + */ + +static FILE * infile; /* input JPEG file */ + +/* Return next input byte, or EOF if no more */ +#define NEXTBYTE() getc(infile) + +static FILE * outfile; /* output JPEG file */ + +/* Emit an output byte */ +#define PUTBYTE(x) putc((x), outfile) + + +/* Error exit handler */ +#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) + + +/* Read one byte, testing for EOF */ +static int +read_1_byte (void) +{ + int c; + + c = NEXTBYTE(); + if (c == EOF) + ERREXIT("Premature EOF in JPEG file"); + return c; +} + +/* Read 2 bytes, convert to unsigned int */ +/* All 2-byte quantities in JPEG markers are MSB first */ +static unsigned int +read_2_bytes (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + if (c1 == EOF) + ERREXIT("Premature EOF in JPEG file"); + c2 = NEXTBYTE(); + if (c2 == EOF) + ERREXIT("Premature EOF in JPEG file"); + return (((unsigned int) c1) << 8) + ((unsigned int) c2); +} + + +/* Routines to write data to output file */ + +static void +write_1_byte (int c) +{ + PUTBYTE(c); +} + +static void +write_2_bytes (unsigned int val) +{ + PUTBYTE((val >> 8) & 0xFF); + PUTBYTE(val & 0xFF); +} + +static void +write_marker (int marker) +{ + PUTBYTE(0xFF); + PUTBYTE(marker); +} + +static void +copy_rest_of_file (void) +{ + int c; + + while ((c = NEXTBYTE()) != EOF) + PUTBYTE(c); +} + + +/* + * JPEG markers consist of one or more 0xFF bytes, followed by a marker + * code byte (which is not an FF). Here are the marker codes of interest + * in this program. (See jdmarker.c for a more complete list.) + */ + +#define M_SOF0 0xC0 /* Start Of Frame N */ +#define M_SOF1 0xC1 /* N indicates which compression process */ +#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ +#define M_SOF3 0xC3 +#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ +#define M_SOF6 0xC6 +#define M_SOF7 0xC7 +#define M_SOF9 0xC9 +#define M_SOF10 0xCA +#define M_SOF11 0xCB +#define M_SOF13 0xCD +#define M_SOF14 0xCE +#define M_SOF15 0xCF +#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ +#define M_EOI 0xD9 /* End Of Image (end of datastream) */ +#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ +#define M_COM 0xFE /* COMment */ + + +/* + * Find the next JPEG marker and return its marker code. + * We expect at least one FF byte, possibly more if the compressor used FFs + * to pad the file. (Padding FFs will NOT be replicated in the output file.) + * There could also be non-FF garbage between markers. The treatment of such + * garbage is unspecified; we choose to skip over it but emit a warning msg. + * NB: this routine must not be used after seeing SOS marker, since it will + * not deal correctly with FF/00 sequences in the compressed image data... + */ + +static int +next_marker (void) +{ + int c; + int discarded_bytes = 0; + + /* Find 0xFF byte; count and skip any non-FFs. */ + c = read_1_byte(); + while (c != 0xFF) { + discarded_bytes++; + c = read_1_byte(); + } + /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs + * are legal as pad bytes, so don't count them in discarded_bytes. + */ + do { + c = read_1_byte(); + } while (c == 0xFF); + + if (discarded_bytes != 0) { + fprintf(stderr, "Warning: garbage data found in JPEG file\n"); + } + + return c; +} + + +/* + * Read the initial marker, which should be SOI. + * For a JFIF file, the first two bytes of the file should be literally + * 0xFF M_SOI. To be more general, we could use next_marker, but if the + * input file weren't actually JPEG at all, next_marker might read the whole + * file and then return a misleading error message... + */ + +static int +first_marker (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + c2 = NEXTBYTE(); + if (c1 != 0xFF || c2 != M_SOI) + ERREXIT("Not a JPEG file"); + return c2; +} + + +/* + * Most types of marker are followed by a variable-length parameter segment. + * This routine skips over the parameters for any marker we don't otherwise + * want to process. + * Note that we MUST skip the parameter segment explicitly in order not to + * be fooled by 0xFF bytes that might appear within the parameter segment; + * such bytes do NOT introduce new markers. + */ + +static void +copy_variable (void) +/* Copy an unknown or uninteresting variable-length marker */ +{ + unsigned int length; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + write_2_bytes(length); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + /* Skip over the remaining bytes */ + while (length > 0) { + write_1_byte(read_1_byte()); + length--; + } +} + +static void +skip_variable (void) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + unsigned int length; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + /* Skip over the remaining bytes */ + while (length > 0) { + (void) read_1_byte(); + length--; + } +} + + +/* + * Parse the marker stream until SOFn or EOI is seen; + * copy data to output, but discard COM markers unless keep_COM is true. + */ + +static int +scan_JPEG_header (int keep_COM) +{ + int marker; + + /* Expect SOI at start of file */ + if (first_marker() != M_SOI) + ERREXIT("Expected SOI marker first"); + write_marker(M_SOI); + + /* Scan miscellaneous markers until we reach SOFn. */ + for (;;) { + marker = next_marker(); + switch (marker) { + /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be, + * treated as SOFn. C4 in particular is actually DHT. + */ + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + case M_SOF2: /* Progressive, Huffman */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_SOF9: /* Extended sequential, arithmetic */ + case M_SOF10: /* Progressive, arithmetic */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + return marker; + + case M_SOS: /* should not see compressed data before SOF */ + ERREXIT("SOS without prior SOFn"); + break; + + case M_EOI: /* in case it's a tables-only JPEG stream */ + return marker; + + case M_COM: /* Existing COM: conditionally discard */ + if (keep_COM) { + write_marker(marker); + copy_variable(); + } else { + skip_variable(); + } + break; + + default: /* Anything else just gets copied */ + write_marker(marker); + copy_variable(); /* we assume it has a parameter count... */ + break; + } + } /* end loop */ +} + + +/* Command line parsing code */ + +static const char * progname; /* program name for error messages */ + + +static void +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "wrjpgcom inserts a textual comment in a JPEG file.\n"); + fprintf(stderr, "You can add to or replace any existing comment(s).\n"); + + fprintf(stderr, "Usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -replace Delete any existing comments\n"); + fprintf(stderr, " -comment \"text\" Insert comment with given text\n"); + fprintf(stderr, " -cfile name Read comment from named file\n"); + fprintf(stderr, "Notice that you must put quotes around the comment text\n"); + fprintf(stderr, "when you use -comment.\n"); + fprintf(stderr, "If you do not give either -comment or -cfile on the command line,\n"); + fprintf(stderr, "then the comment text is read from standard input.\n"); + fprintf(stderr, "It can be multiple lines, up to %u characters total.\n", + (unsigned int) MAX_COM_LENGTH); +#ifndef TWO_FILE_COMMANDLINE + fprintf(stderr, "You must specify an input JPEG file name when supplying\n"); + fprintf(stderr, "comment text from standard input.\n"); +#endif + + exit(EXIT_FAILURE); +} + + +static int +keymatch (char * arg, const char * keyword, int minchars) +/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ +/* keyword is the constant keyword (must be lower case already), */ +/* minchars is length of minimum legal abbreviation. */ +{ + register int ca, ck; + register int nmatched = 0; + + while ((ca = *arg++) != '\0') { + if ((ck = *keyword++) == '\0') + return 0; /* arg longer than keyword, no good */ + if (isupper(ca)) /* force arg to lcase (assume ck is already) */ + ca = tolower(ca); + if (ca != ck) + return 0; /* no good */ + nmatched++; /* count matched characters */ + } + /* reached end of argument; fail if it's too short for unique abbrev */ + if (nmatched < minchars) + return 0; + return 1; /* A-OK */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + int argn; + char * arg; + int keep_COM = 1; + char * comment_arg = NULL; + FILE * comment_file = NULL; + unsigned int comment_length = 0; + int marker; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "wrjpgcom"; /* in case C library doesn't provide it */ + + /* Parse switches, if any */ + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (arg[0] != '-') + break; /* not switch, must be file name */ + arg++; /* advance over '-' */ + if (keymatch(arg, "replace", 1)) { + keep_COM = 0; + } else if (keymatch(arg, "cfile", 2)) { + if (++argn >= argc) usage(); + if ((comment_file = fopen(argv[argn], "r")) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + } else if (keymatch(arg, "comment", 1)) { + if (++argn >= argc) usage(); + comment_arg = argv[argn]; + /* If the comment text starts with '"', then we are probably running + * under MS-DOG and must parse out the quoted string ourselves. Sigh. + */ + if (comment_arg[0] == '"') { + comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); + if (comment_arg == NULL) + ERREXIT("Insufficient memory"); + strcpy(comment_arg, argv[argn]+1); + for (;;) { + comment_length = (unsigned int) strlen(comment_arg); + if (comment_length > 0 && comment_arg[comment_length-1] == '"') { + comment_arg[comment_length-1] = '\0'; /* zap terminating quote */ + break; + } + if (++argn >= argc) + ERREXIT("Missing ending quote mark"); + strcat(comment_arg, " "); + strcat(comment_arg, argv[argn]); + } + } + comment_length = (unsigned int) strlen(comment_arg); + } else + usage(); + } + + /* Cannot use both -comment and -cfile. */ + if (comment_arg != NULL && comment_file != NULL) + usage(); + /* If there is neither -comment nor -cfile, we will read the comment text + * from stdin; in this case there MUST be an input JPEG file name. + */ + if (comment_arg == NULL && comment_file == NULL && argn >= argc) + usage(); + + /* Open the input file. */ + if (argn < argc) { + if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdin), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open stdin\n", progname); + exit(EXIT_FAILURE); + } +#else + infile = stdin; +#endif + } + + /* Open the output file. */ +#ifdef TWO_FILE_COMMANDLINE + /* Must have explicit output file name */ + if (argn != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + if ((outfile = fopen(argv[argn+1], WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn+1]); + exit(EXIT_FAILURE); + } +#else + /* Unix style: expect zero or one file name */ + if (argn < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } + /* default output file is stdout */ +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdout), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((outfile = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open stdout\n", progname); + exit(EXIT_FAILURE); + } +#else + outfile = stdout; +#endif +#endif /* TWO_FILE_COMMANDLINE */ + + /* Collect comment text from comment_file or stdin, if necessary */ + if (comment_arg == NULL) { + FILE * src_file; + int c; + + comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); + if (comment_arg == NULL) + ERREXIT("Insufficient memory"); + comment_length = 0; + src_file = (comment_file != NULL ? comment_file : stdin); + while ((c = getc(src_file)) != EOF) { + if (comment_length >= (unsigned int) MAX_COM_LENGTH) { + fprintf(stderr, "Comment text may not exceed %u bytes\n", + (unsigned int) MAX_COM_LENGTH); + exit(EXIT_FAILURE); + } + comment_arg[comment_length++] = (char) c; + } + if (comment_file != NULL) + fclose(comment_file); + } + + /* Copy JPEG headers until SOFn marker; + * we will insert the new comment marker just before SOFn. + * This (a) causes the new comment to appear after, rather than before, + * existing comments; and (b) ensures that comments come after any JFIF + * or JFXX markers, as required by the JFIF specification. + */ + marker = scan_JPEG_header(keep_COM); + /* Insert the new COM marker, but only if nonempty text has been supplied */ + if (comment_length > 0) { + write_marker(M_COM); + write_2_bytes(comment_length + 2); + while (comment_length > 0) { + write_1_byte(*comment_arg++); + comment_length--; + } + } + /* Duplicate the remainder of the source file. + * Note that any COM markers occuring after SOF will not be touched. + */ + write_marker(marker); + copy_rest_of_file(); + + /* All done. */ + exit(EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/3rdparty/openctm/tools/jpeg/wrppm.c b/3rdparty/openctm/tools/jpeg/wrppm.c new file mode 100644 index 000000000..1e56d9c50 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrppm.c @@ -0,0 +1,269 @@ +/* + * wrppm.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * Modified 2009 by Guido Vollbeding. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in PPM/PGM format. + * The extended 2-byte-per-sample raw PPM/PGM formats are supported. + * The PBMPLUS library is NOT required to compile this software + * (but it is highly useful as a set of PPM image manipulation programs). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef PPM_SUPPORTED + + +/* + * For 12-bit JPEG data, we either downscale the values to 8 bits + * (to write standard byte-per-sample PPM/PGM files), or output + * nonstandard word-per-sample PPM/PGM files. Downscaling is done + * if PPM_NORAWWORD is defined (this can be done in the Makefile + * or in jconfig.h). + * (When the core library supports data precision reduction, a cleaner + * implementation will be to ask for that instead.) + */ + +#if BITS_IN_JSAMPLE == 8 +#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) (v) +#define BYTESPERSAMPLE 1 +#define PPM_MAXVAL 255 +#else +#ifdef PPM_NORAWWORD +#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) ((v) >> (BITS_IN_JSAMPLE-8)) +#define BYTESPERSAMPLE 1 +#define PPM_MAXVAL 255 +#else +/* The word-per-sample format always puts the MSB first. */ +#define PUTPPMSAMPLE(ptr,v) \ + { register int val_ = v; \ + *ptr++ = (char) ((val_ >> 8) & 0xFF); \ + *ptr++ = (char) (val_ & 0xFF); \ + } +#define BYTESPERSAMPLE 2 +#define PPM_MAXVAL ((1<pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * This code is used when we have to copy the data and apply a pixel + * format translation. Typically this only happens in 12-bit mode. + */ + +METHODDEF(void) +copy_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + register char * bufferptr; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + bufferptr = dest->iobuffer; + for (col = dest->samples_per_row; col > 0; col--) { + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(*ptr++)); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Write some pixel data when color quantization is in effect. + * We have to demap the color index values to straight data. + */ + +METHODDEF(void) +put_demapped_rgb (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + register char * bufferptr; + register int pixval; + register JSAMPROW ptr; + register JSAMPROW color_map0 = cinfo->colormap[0]; + register JSAMPROW color_map1 = cinfo->colormap[1]; + register JSAMPROW color_map2 = cinfo->colormap[2]; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + bufferptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + pixval = GETJSAMPLE(*ptr++); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map0[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map1[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map2[pixval])); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +METHODDEF(void) +put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + register char * bufferptr; + register JSAMPROW ptr; + register JSAMPROW color_map = cinfo->colormap[0]; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + bufferptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)])); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Startup: write the file header. + */ + +METHODDEF(void) +start_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + + /* Emit file header */ + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + /* emit header for raw PGM format */ + fprintf(dest->pub.output_file, "P5\n%ld %ld\n%d\n", + (long) cinfo->output_width, (long) cinfo->output_height, + PPM_MAXVAL); + break; + case JCS_RGB: + /* emit header for raw PPM format */ + fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", + (long) cinfo->output_width, (long) cinfo->output_height, + PPM_MAXVAL); + break; + default: + ERREXIT(cinfo, JERR_PPM_COLORSPACE); + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + /* Make sure we wrote the output file OK */ + fflush(dinfo->output_file); + if (ferror(dinfo->output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for PPM format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_ppm (j_decompress_ptr cinfo) +{ + ppm_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (ppm_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ppm_dest_struct)); + dest->pub.start_output = start_output_ppm; + dest->pub.finish_output = finish_output_ppm; + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Create physical I/O buffer. Note we make this near on a PC. */ + dest->samples_per_row = cinfo->output_width * cinfo->out_color_components; + dest->buffer_width = dest->samples_per_row * (BYTESPERSAMPLE * SIZEOF(char)); + dest->iobuffer = (char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width); + + if (cinfo->quantize_colors || BITS_IN_JSAMPLE != 8 || + SIZEOF(JSAMPLE) != SIZEOF(char)) { + /* When quantizing, we need an output buffer for colormap indexes + * that's separate from the physical I/O buffer. We also need a + * separate buffer if pixel format translation must take place. + */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width * cinfo->output_components, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + if (! cinfo->quantize_colors) + dest->pub.put_pixel_rows = copy_pixel_rows; + else if (cinfo->out_color_space == JCS_GRAYSCALE) + dest->pub.put_pixel_rows = put_demapped_gray; + else + dest->pub.put_pixel_rows = put_demapped_rgb; + } else { + /* We will fwrite() directly from decompressor output buffer. */ + /* Synthesize a JSAMPARRAY pointer structure */ + /* Cast here implies near->far pointer conversion on PCs */ + dest->pixrow = (JSAMPROW) dest->iobuffer; + dest->pub.buffer = & dest->pixrow; + dest->pub.buffer_height = 1; + dest->pub.put_pixel_rows = put_pixel_rows; + } + + return (djpeg_dest_ptr) dest; +} + +#endif /* PPM_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/wrrle.c b/3rdparty/openctm/tools/jpeg/wrrle.c new file mode 100644 index 000000000..7a00c0dd1 --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrrle.c @@ -0,0 +1,305 @@ +/* + * wrrle.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in RLE format. + * The Utah Raster Toolkit library is required (version 3.1 or later). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + * + * Based on code contributed by Mike Lijewski, + * with updates from Robert Hutchinson. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef RLE_SUPPORTED + +/* rle.h is provided by the Utah Raster Toolkit. */ + +#include + +/* + * We assume that JSAMPLE has the same representation as rle_pixel, + * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + + +/* + * Since RLE stores scanlines bottom-to-top, we have to invert the image + * from JPEG's top-to-bottom order. To do this, we save the outgoing data + * in a virtual array during put_pixel_row calls, then actually emit the + * RLE file during finish_output. + */ + + +/* + * For now, if we emit an RLE color map then it is always 256 entries long, + * though not all of the entries need be used. + */ + +#define CMAPBITS 8 +#define CMAPLENGTH (1<<(CMAPBITS)) + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + jvirt_sarray_ptr image; /* virtual array to store the output image */ + rle_map *colormap; /* RLE-style color map, or NULL if none */ + rle_pixel **rle_row; /* To pass rows to rle_putrow() */ + +} rle_dest_struct; + +typedef rle_dest_struct * rle_dest_ptr; + +/* Forward declarations */ +METHODDEF(void) rle_put_pixel_rows + JPP((j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied)); + + +/* + * Write the file header. + * + * In this module it's easier to wait till finish_output to write anything. + */ + +METHODDEF(void) +start_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + rle_dest_ptr dest = (rle_dest_ptr) dinfo; + size_t cmapsize; + int i, ci; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + /* + * Make sure the image can be stored in RLE format. + * + * - RLE stores image dimensions as *signed* 16 bit integers. JPEG + * uses unsigned, so we have to check the width. + * + * - Colorspace is expected to be grayscale or RGB. + * + * - The number of channels (components) is expected to be 1 (grayscale/ + * pseudocolor) or 3 (truecolor/directcolor). + * (could be 2 or 4 if using an alpha channel, but we aren't) + */ + + if (cinfo->output_width > 32767 || cinfo->output_height > 32767) + ERREXIT2(cinfo, JERR_RLE_DIMENSIONS, cinfo->output_width, + cinfo->output_height); + + if (cinfo->out_color_space != JCS_GRAYSCALE && + cinfo->out_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_RLE_COLORSPACE); + + if (cinfo->output_components != 1 && cinfo->output_components != 3) + ERREXIT1(cinfo, JERR_RLE_TOOMANYCHANNELS, cinfo->num_components); + + /* Convert colormap, if any, to RLE format. */ + + dest->colormap = NULL; + + if (cinfo->quantize_colors) { + /* Allocate storage for RLE-style cmap, zero any extra entries */ + cmapsize = cinfo->out_color_components * CMAPLENGTH * SIZEOF(rle_map); + dest->colormap = (rle_map *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, cmapsize); + MEMZERO(dest->colormap, cmapsize); + + /* Save away data in RLE format --- note 8-bit left shift! */ + /* Shifting would need adjustment for JSAMPLEs wider than 8 bits. */ + for (ci = 0; ci < cinfo->out_color_components; ci++) { + for (i = 0; i < cinfo->actual_number_of_colors; i++) { + dest->colormap[ci * CMAPLENGTH + i] = + GETJSAMPLE(cinfo->colormap[ci][i]) << 8; + } + } + } + + /* Set the output buffer to the first row */ + dest->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, (JDIMENSION) 0, (JDIMENSION) 1, TRUE); + dest->pub.buffer_height = 1; + + dest->pub.put_pixel_rows = rle_put_pixel_rows; + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->total_extra_passes++; /* count file writing as separate pass */ + } +#endif +} + + +/* + * Write some pixel data. + * + * This routine just saves the data away in a virtual array. + */ + +METHODDEF(void) +rle_put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + rle_dest_ptr dest = (rle_dest_ptr) dinfo; + + if (cinfo->output_scanline < cinfo->output_height) { + dest->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, + cinfo->output_scanline, (JDIMENSION) 1, TRUE); + } +} + +/* + * Finish up at the end of the file. + * + * Here is where we really output the RLE file. + */ + +METHODDEF(void) +finish_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + rle_dest_ptr dest = (rle_dest_ptr) dinfo; + rle_hdr header; /* Output file information */ + rle_pixel **rle_row, *red, *green, *blue; + JSAMPROW output_row; + char cmapcomment[80]; + int row, col; + int ci; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + /* Initialize the header info */ + header = *rle_hdr_init(NULL); + header.rle_file = dest->pub.output_file; + header.xmin = 0; + header.xmax = cinfo->output_width - 1; + header.ymin = 0; + header.ymax = cinfo->output_height - 1; + header.alpha = 0; + header.ncolors = cinfo->output_components; + for (ci = 0; ci < cinfo->output_components; ci++) { + RLE_SET_BIT(header, ci); + } + if (cinfo->quantize_colors) { + header.ncmap = cinfo->out_color_components; + header.cmaplen = CMAPBITS; + header.cmap = dest->colormap; + /* Add a comment to the output image with the true colormap length. */ + sprintf(cmapcomment, "color_map_length=%d", cinfo->actual_number_of_colors); + rle_putcom(cmapcomment, &header); + } + + /* Emit the RLE header and color map (if any) */ + rle_put_setup(&header); + + /* Now output the RLE data from our virtual array. + * We assume here that (a) rle_pixel is represented the same as JSAMPLE, + * and (b) we are not on a machine where FAR pointers differ from regular. + */ + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_limit = cinfo->output_height; + progress->pub.pass_counter = 0; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + + if (cinfo->output_components == 1) { + for (row = cinfo->output_height-1; row >= 0; row--) { + rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, + (JDIMENSION) row, (JDIMENSION) 1, FALSE); + rle_putrow(rle_row, (int) cinfo->output_width, &header); +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + } else { + for (row = cinfo->output_height-1; row >= 0; row--) { + rle_row = (rle_pixel **) dest->rle_row; + output_row = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, + (JDIMENSION) row, (JDIMENSION) 1, FALSE); + red = rle_row[0]; + green = rle_row[1]; + blue = rle_row[2]; + for (col = cinfo->output_width; col > 0; col--) { + *red++ = GETJSAMPLE(*output_row++); + *green++ = GETJSAMPLE(*output_row++); + *blue++ = GETJSAMPLE(*output_row++); + } + rle_putrow(rle_row, (int) cinfo->output_width, &header); +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) + progress->completed_extra_passes++; +#endif + + /* Emit file trailer */ + rle_puteof(&header); + fflush(dest->pub.output_file); + if (ferror(dest->pub.output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for RLE format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_rle (j_decompress_ptr cinfo) +{ + rle_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (rle_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(rle_dest_struct)); + dest->pub.start_output = start_output_rle; + dest->pub.finish_output = finish_output_rle; + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Allocate a work array for output to the RLE library. */ + dest->rle_row = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width, (JDIMENSION) cinfo->output_components); + + /* Allocate a virtual array to hold the image. */ + dest->image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) (cinfo->output_width * cinfo->output_components), + cinfo->output_height, (JDIMENSION) 1); + + return (djpeg_dest_ptr) dest; +} + +#endif /* RLE_SUPPORTED */ diff --git a/3rdparty/openctm/tools/jpeg/wrtarga.c b/3rdparty/openctm/tools/jpeg/wrtarga.c new file mode 100644 index 000000000..65662738d --- /dev/null +++ b/3rdparty/openctm/tools/jpeg/wrtarga.c @@ -0,0 +1,253 @@ +/* + * wrtarga.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in Targa format. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + * + * Based on code contributed by Lee Daniel Crocker. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef TARGA_SUPPORTED + + +/* + * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. + * This is not yet implemented. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + +/* + * The output buffer needs to be writable by fwrite(). On PCs, we must + * allocate the buffer in near data space, because we are assuming small-data + * memory model, wherein fwrite() can't reach far memory. If you need to + * process very wide images on a PC, you might have to compile in large-memory + * model, or else replace fwrite() with a putc() loop --- which will be much + * slower. + */ + + +/* Private version of data destination object */ + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + char *iobuffer; /* physical I/O buffer */ + JDIMENSION buffer_width; /* width of one row */ +} tga_dest_struct; + +typedef tga_dest_struct * tga_dest_ptr; + + +LOCAL(void) +write_header (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, int num_colors) +/* Create and write a Targa header */ +{ + char targaheader[18]; + + /* Set unused fields of header to 0 */ + MEMZERO(targaheader, SIZEOF(targaheader)); + + if (num_colors > 0) { + targaheader[1] = 1; /* color map type 1 */ + targaheader[5] = (char) (num_colors & 0xFF); + targaheader[6] = (char) (num_colors >> 8); + targaheader[7] = 24; /* 24 bits per cmap entry */ + } + + targaheader[12] = (char) (cinfo->output_width & 0xFF); + targaheader[13] = (char) (cinfo->output_width >> 8); + targaheader[14] = (char) (cinfo->output_height & 0xFF); + targaheader[15] = (char) (cinfo->output_height >> 8); + targaheader[17] = 0x20; /* Top-down, non-interlaced */ + + if (cinfo->out_color_space == JCS_GRAYSCALE) { + targaheader[2] = 3; /* image type = uncompressed gray-scale */ + targaheader[16] = 8; /* bits per pixel */ + } else { /* must be RGB */ + if (num_colors > 0) { + targaheader[2] = 1; /* image type = colormapped RGB */ + targaheader[16] = 8; + } else { + targaheader[2] = 2; /* image type = uncompressed RGB */ + targaheader[16] = 24; + } + } + + if (JFWRITE(dinfo->output_file, targaheader, 18) != (size_t) 18) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * Write some pixel data. + * In this module rows_supplied will always be 1. + */ + +METHODDEF(void) +put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* used for unquantized full-color output */ +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + register JSAMPROW inptr; + register char * outptr; + register JDIMENSION col; + + inptr = dest->pub.buffer[0]; + outptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + outptr[0] = (char) GETJSAMPLE(inptr[2]); /* RGB to BGR order */ + outptr[1] = (char) GETJSAMPLE(inptr[1]); + outptr[2] = (char) GETJSAMPLE(inptr[0]); + inptr += 3, outptr += 3; + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + +METHODDEF(void) +put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* used for grayscale OR quantized color output */ +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + register JSAMPROW inptr; + register char * outptr; + register JDIMENSION col; + + inptr = dest->pub.buffer[0]; + outptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + *outptr++ = (char) GETJSAMPLE(*inptr++); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Write some demapped pixel data when color quantization is in effect. + * For Targa, this is only applied to grayscale data. + */ + +METHODDEF(void) +put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + register JSAMPROW inptr; + register char * outptr; + register JSAMPROW color_map0 = cinfo->colormap[0]; + register JDIMENSION col; + + inptr = dest->pub.buffer[0]; + outptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + *outptr++ = (char) GETJSAMPLE(color_map0[GETJSAMPLE(*inptr++)]); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Startup: write the file header. + */ + +METHODDEF(void) +start_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + int num_colors, i; + FILE *outfile; + + if (cinfo->out_color_space == JCS_GRAYSCALE) { + /* Targa doesn't have a mapped grayscale format, so we will */ + /* demap quantized gray output. Never emit a colormap. */ + write_header(cinfo, dinfo, 0); + if (cinfo->quantize_colors) + dest->pub.put_pixel_rows = put_demapped_gray; + else + dest->pub.put_pixel_rows = put_gray_rows; + } else if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) { + /* We only support 8-bit colormap indexes, so only 256 colors */ + num_colors = cinfo->actual_number_of_colors; + if (num_colors > 256) + ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, num_colors); + write_header(cinfo, dinfo, num_colors); + /* Write the colormap. Note Targa uses BGR byte order */ + outfile = dest->pub.output_file; + for (i = 0; i < num_colors; i++) { + putc(GETJSAMPLE(cinfo->colormap[2][i]), outfile); + putc(GETJSAMPLE(cinfo->colormap[1][i]), outfile); + putc(GETJSAMPLE(cinfo->colormap[0][i]), outfile); + } + dest->pub.put_pixel_rows = put_gray_rows; + } else { + write_header(cinfo, dinfo, 0); + dest->pub.put_pixel_rows = put_pixel_rows; + } + } else { + ERREXIT(cinfo, JERR_TGA_COLORSPACE); + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + /* Make sure we wrote the output file OK */ + fflush(dinfo->output_file); + if (ferror(dinfo->output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for Targa format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_targa (j_decompress_ptr cinfo) +{ + tga_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (tga_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(tga_dest_struct)); + dest->pub.start_output = start_output_tga; + dest->pub.finish_output = finish_output_tga; + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Create I/O buffer. Note we make this near on a PC. */ + dest->buffer_width = cinfo->output_width * cinfo->output_components; + dest->iobuffer = (char *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (dest->buffer_width * SIZEOF(char))); + + /* Create decompressor output buffer. */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + + return (djpeg_dest_ptr) dest; +} + +#endif /* TARGA_SUPPORTED */ diff --git a/3rdparty/openctm/tools/lwo.cpp b/3rdparty/openctm/tools/lwo.cpp new file mode 100644 index 000000000..b61d06bc5 --- /dev/null +++ b/3rdparty/openctm/tools/lwo.cpp @@ -0,0 +1,636 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: lwo.cpp +// Description: Implementation of the LWO file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include "lwo.h" + +#ifdef _MSC_VER + typedef unsigned int uint32; +#else + #include + typedef uint32_t uint32; +#endif + +using namespace std; + + +//------------------------------------------------------------------------------ +// Helper functions for reading +//------------------------------------------------------------------------------ + +/// Read a 16-bit integer, endian independent. +static uint32 ReadU2(istream &aStream) +{ + unsigned char buf[2]; + aStream.read((char *) buf, 2); + return (((uint32) buf[0]) << 8) | + ((uint32) buf[1]); +} + +/// Read a 32-bit integer, endian independent. +static uint32 ReadU4(istream &aStream) +{ + unsigned char buf[4]; + aStream.read((char *) buf, 4); + return (((uint32) buf[0]) << 24) | + (((uint32) buf[1]) << 16) | + (((uint32) buf[2]) << 8) | + ((uint32) buf[3]); +} + +/// Read a 32-bit floating point scalar, endian independent. +static float ReadF4(istream &aStream) +{ + unsigned char buf[4]; + aStream.read((char *) buf, 4); + union { + uint32 i; + float f; + } val; + val.i = (((uint32) buf[0]) << 24) | + (((uint32) buf[1]) << 16) | + (((uint32) buf[2]) << 8) | + ((uint32) buf[3]); + return val.f; +} + +/// Read a 3 x 32-bit floating point vector, endian independent. +/// Note: We flip the Y & Z axes, to go from our right handed to LightWaves +/// left handed coordinate system. +static Vector3 ReadVEC12(istream &aStream) +{ + unsigned char buf[12]; + Vector3 result; + aStream.read((char *) buf, 12); + union { + uint32 i; + float f; + } val; + val.i = (((uint32) buf[0]) << 24) | + (((uint32) buf[1]) << 16) | + (((uint32) buf[2]) << 8) | + ((uint32) buf[3]); + result.x = val.f; + val.i = (((uint32) buf[4]) << 24) | + (((uint32) buf[5]) << 16) | + (((uint32) buf[6]) << 8) | + ((uint32) buf[7]); + result.z = val.f; + val.i = (((uint32) buf[8]) << 24) | + (((uint32) buf[9]) << 16) | + (((uint32) buf[10]) << 8) | + ((uint32) buf[11]); + result.y = val.f; + return result; +} + +/// Read a non-terminated string from the stream (e.g. a chunk ID string). +static string ReadString(istream &aStream, int aCount) +{ + string result; + result.resize(aCount); + aStream.read((char *) &result[0], aCount); + return result; +} + +/// Read a zero terminated string from a stream. +static string ReadStringZ(istream &aStream) +{ + string str; + getline(aStream, str, '\0'); + if((str.size() & 1) == 0) + aStream.get(); + return str; +} + +/// Read a vertex index (variable size) from a stream. +static uint32 ReadVX(istream &aStream, int * aBytesLeft) +{ + uint32 result = ReadU2(aStream); + if(result >= 0x0000ff00) + { + result = ((result & 255) << 16) | ReadU2(aStream); + *aBytesLeft -= 4; + } + else + *aBytesLeft -= 2; + return result; +} + + +//------------------------------------------------------------------------------ +// Helper functions for writing +//------------------------------------------------------------------------------ + +/// Write a 16-bit integer, endian independent. +static void WriteU2(ostream &aStream, uint32 aValue) +{ + unsigned char buf[2]; + buf[0] = (aValue >> 8) & 255; + buf[1] = aValue & 255; + aStream.write((char *) buf, 2); +} + +/// Write a 32-bit integer, endian independent. +static void WriteU4(ostream &aStream, uint32 aValue) +{ + unsigned char buf[4]; + buf[0] = (aValue >> 24) & 255; + buf[1] = (aValue >> 16) & 255; + buf[2] = (aValue >> 8) & 255; + buf[3] = aValue & 255; + aStream.write((char *) buf, 4); +} + +/// Write a 32-bit floating point scalar, endian independent. +static void WriteF4(ostream &aStream, float aValue) +{ + unsigned char buf[4]; + union { + uint32 i; + float f; + } val; + val.f = aValue; + buf[0] = (val.i >> 24) & 255; + buf[1] = (val.i >> 16) & 255; + buf[2] = (val.i >> 8) & 255; + buf[3] = val.i & 255; + aStream.write((char *) buf, 4); +} + +/// Write a 3 x 32-bit floating point vector, endian independent. +/// Note: We flip the Y & Z axes, to go from our right handed to LightWaves +/// left handed coordinate system. +static void WriteVEC12(ostream &aStream, Vector3 aValue) +{ + unsigned char buf[12]; + union { + uint32 i; + float f; + } val; + val.f = aValue.x; + buf[0] = (val.i >> 24) & 255; + buf[1] = (val.i >> 16) & 255; + buf[2] = (val.i >> 8) & 255; + buf[3] = val.i & 255; + val.f = aValue.z; + buf[4] = (val.i >> 24) & 255; + buf[5] = (val.i >> 16) & 255; + buf[6] = (val.i >> 8) & 255; + buf[7] = val.i & 255; + val.f = aValue.y; + buf[8] = (val.i >> 24) & 255; + buf[9] = (val.i >> 16) & 255; + buf[10] = (val.i >> 8) & 255; + buf[11] = val.i & 255; + aStream.write((char *) buf, 12); +} + +/// Write a string to a stream (no zero termination). +static void WriteString(ostream &aStream, const char * aString) +{ + int len = strlen(aString); + aStream.write(aString, len); +} + +/// Write a zero terminated string to a stream. +static void WriteStringZ(ostream &aStream, const char * aString) +{ + int len = strlen(aString) + 1; + aStream.write(aString, len); + if(len & 1) + { + char zero = 0; + aStream.write(&zero, 1); + } +} + +/// Write a vertex index (variable size) to a stream. +static void WriteVX(ostream &aStream, uint32 aIndex) +{ + if(aIndex < 0x0000ff00) + WriteU2(aStream, aIndex); + else + WriteU4(aStream, aIndex + 0xff000000); +} + +/// Calculate the size of a POLS chunk - take variable size indices into +/// account... +static uint32 CalcPOLSSize(Mesh * aMesh) +{ + uint32 triCount = (uint32) (aMesh->mIndices.size() / 3); + uint32 size = 4 + triCount * 2; + for(unsigned int i = 0; i < aMesh->mIndices.size(); ++ i) + { + uint32 idx = aMesh->mIndices[i]; + if(idx < 0x0000ff00) + size += 2; + else + size += 4; + } + return size; +} + +/// Calculate the size of a VMAP chunk - take variable size indices into +/// account, but exclude the name string (at least two bytes)... +static uint32 CalcVMAPSize(Mesh * aMesh, uint32 aDimension) +{ + uint32 size = 6 + aMesh->mVertices.size() * (2 + 4 * aDimension); + uint32 maxIdx = aMesh->mVertices.size() - 1; + if(maxIdx >= 0x0000ff00) + size += (maxIdx - 0x0000feff) * 2; + return size; +} + + +//------------------------------------------------------------------------------ +// Public functions +//------------------------------------------------------------------------------ + +/// Import a mesh from an LWO file. +void Import_LWO(const char * aFileName, Mesh * aMesh) +{ + // Open the input file + ifstream f(aFileName, ios::in | ios::binary); + if(f.fail()) + throw runtime_error("Could not open input file."); + + // File header + if(ReadString(f, 4) != string("FORM")) + throw runtime_error("Not a valid LWO file (missing FORM chunk)."); + uint32 fileSize = ReadU4(f); + if(ReadString(f, 4) != string("LWO2")) + throw runtime_error("Not a valid LWO file (not LWO2 format)."); + + // Start with an empty mesh + aMesh->Clear(); + uint32 pointCount = 0; + uint32 triangleCount = 0; + uint32 indexBias = 0; + bool havePoints = false; + + // Current pivot point (based on current layer) + Vector3 pivot(0.0f, 0.0f, 0.0f); + + // Iterate all chunks + while(!f.eof() && ( (uint32)f.tellg() < fileSize)) + { + // Get chunk ID & size (round size to next nearest even size - all chunks + // are word aligned) + string chunkID = ReadString(f, 4); + uint32 chunkSize = (ReadU4(f) + 1) & 0xfffffffe; + + // Get file position of the chunk start + size_t chunkStart = f.tellg(); + + // Was this a supported chunk? + if(chunkID == string("TEXT")) + { + // Read file comment + aMesh->mComment = string(ReadStringZ(f)); + } + else if(chunkID == string("LAYR")) + { + // Read layer information + ReadU2(f); // number + ReadU2(f); // flags + pivot = ReadVEC12(f); // pivot + ReadStringZ(f); // name + + size_t pos = f.tellg(); + if((pos - chunkStart) < chunkSize) + ReadU2(f); // parent (optional) + } + else if(chunkID == string("PNTS")) + { + // Check point count + uint32 newPoints = chunkSize / 12; + if((newPoints * 12) != chunkSize) + throw runtime_error("Not a valid LWO file (invalid PNTS chunk)."); + + // Read points (relative to current pivot point) + aMesh->mVertices.resize(pointCount + newPoints); + for(uint32 i = pointCount; i < (uint32) aMesh->mVertices.size(); ++ i) + aMesh->mVertices[i] = ReadVEC12(f) + pivot; + indexBias = pointCount; + pointCount += newPoints; + havePoints = true; + } + else if(chunkID == string("POLS")) + { + // POLS before PNTS? + if(!havePoints) + throw runtime_error("Not a valid LWO file (POLS chunk before PNTS chunk)."); + + // Check that we have a FACE or PTCH descriptor. + string type = ReadString(f, 4); + if((type == string("FACE")) || (type == string("PTCH"))) + { + // Perpare for worst case triangle count (a single poly with only + // 16-bit indices) + uint32 maxTriCount = (chunkSize - 10) / 2; + vector indices; + indices.resize(maxTriCount * 3); + + // Read polygons + uint32 newTris = 0; + int bytesLeft = (int) chunkSize - 4; + while(bytesLeft > 0) + { + int polyNodes = (int) ReadU2(f) & 1023; + bytesLeft -= 2; + if(polyNodes >= 3) + { + polyNodes -= 3; + uint32 idx[3]; + idx[0] = ReadVX(f, &bytesLeft); + idx[1] = ReadVX(f, &bytesLeft); + idx[2] = ReadVX(f, &bytesLeft); + while((polyNodes >= 0) && (bytesLeft >= 0)) + { + indices[newTris * 3] = idx[0]; + indices[newTris * 3 + 1] = idx[1]; + indices[newTris * 3 + 2] = idx[2]; + ++ newTris; + if(polyNodes > 0) + { + idx[1] = idx[2]; + idx[2] = ReadVX(f, &bytesLeft); + } + -- polyNodes; + } + } + else + { + // Skip polygons with less than 3 nodes + for(int i = 0; i < polyNodes; ++ i) + ReadVX(f, &bytesLeft); + } + } + + // Copy all the read indices to the mesh + aMesh->mIndices.resize((triangleCount + newTris) * 3); + for(uint32 i = 0; i < newTris; ++ i) + { + aMesh->mIndices[(i + triangleCount) * 3] = indices[i * 3] + indexBias; + aMesh->mIndices[(i + triangleCount) * 3 + 1] = indices[i * 3 + 1] + indexBias; + aMesh->mIndices[(i + triangleCount) * 3 + 2] = indices[i * 3 + 2] + indexBias; + } + triangleCount += newTris; + } + else + { + // We only support FACE/PTCH type polygons - skip this chunk + f.seekg(chunkSize - 4, ios::cur); + } + } + else if((chunkID == string("VMAP")) || (chunkID == string("VMAD"))) + { + bool dynamic = (chunkID == string("VMAD")); + string type = ReadString(f, 4); + uint32 dimension = ReadU2(f); + ReadStringZ(f); // Ignore the name + + // How many bytes are currently left to read in this chunk? + int bytesLeft = (int) chunkSize - ((int) f.tellg() - (int) chunkStart); + + if((type == string("RGB ")) || (type == string("RGBA"))) + { + // Resize the mesh colors array + uint32 oldSize = aMesh->mColors.size(); + aMesh->mColors.resize(pointCount); + for(uint32 i = oldSize; i < pointCount; ++ i) + aMesh->mColors[i] = Vector4(1.0f, 1.0f, 1.0f, 1.0f); + + // Read all the colors + while(bytesLeft > 0) + { + uint32 idx = ReadVX(f, &bytesLeft) + indexBias; + if(dynamic) + ReadVX(f, &bytesLeft); // ignore the face index for VMAD... + Vector4 col; + col.x = ReadF4(f); + col.y = ReadF4(f); + col.z = ReadF4(f); + if(dimension == 4) + { + col.w = ReadF4(f); + bytesLeft -= 16; + } + else + { + col.w = 1.0f; + bytesLeft -= 12; + } + if(idx < aMesh->mColors.size()) + aMesh->mColors[idx] = col; + } + } + else if((type == string("TXUV"))) + { + // Resize the mesh UV array + uint32 oldSize = aMesh->mTexCoords.size(); + aMesh->mTexCoords.resize(pointCount); + for(uint32 i = oldSize; i < pointCount; ++ i) + aMesh->mTexCoords[i] = Vector2(0.0f, 0.0f); + + // Read all the texture coordinates + while(bytesLeft > 0) + { + uint32 idx = ReadVX(f, &bytesLeft) + indexBias; + if(dynamic) + ReadVX(f, &bytesLeft); // ignore the face index for VMAD... + Vector2 texCoord; + texCoord.u = ReadF4(f); + texCoord.v = ReadF4(f); + bytesLeft -= 8; + if(idx < aMesh->mTexCoords.size()) + aMesh->mTexCoords[idx] = texCoord; + } + } + else + { + // We only support RGB/RGBA & TXUV type VMAPs - skip this chunk + f.seekg(bytesLeft, ios::cur); + } + } + else + { + // Just skip this chunk + f.seekg(chunkSize, ios::cur); + } + } + + // Post-adjustment: color array (if any) + if((aMesh->mColors.size() > 0) && (aMesh->mColors.size() < pointCount)) + { + uint32 oldSize = aMesh->mColors.size(); + aMesh->mColors.resize(pointCount); + for(uint32 i = oldSize; i < pointCount; ++ i) + aMesh->mColors[i] = Vector4(1.0f, 1.0f, 1.0f, 1.0f); + } + + // Post-adjustment: texture coordinate array (if any) + if((aMesh->mTexCoords.size() > 0) && (aMesh->mTexCoords.size() < pointCount)) + { + uint32 oldSize = aMesh->mTexCoords.size(); + aMesh->mTexCoords.resize(pointCount); + for(uint32 i = oldSize; i < pointCount; ++ i) + aMesh->mTexCoords[i] = Vector2(0.0f, 0.0f); + } + + // Close the input file + f.close(); +} + +/// Export a mesh to an LWO file. +void Export_LWO(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Check if we can support this mesh (too many vertices?) + if(aMesh->mVertices.size() > 0x00ffffff) + throw runtime_error("Too large mesh (not supported by the LWO file format)."); + + // What should we export? + bool exportComment = (aMesh->mComment.size() > 0); + bool exportTexCoords = aMesh->HasTexCoords() && !aOptions.mNoTexCoords; + bool exportColors = aMesh->HasColors() && !aOptions.mNoColors; + + // Calculate the sizes of the individual chunks + uint32 textSize = aMesh->mComment.size() + 1; + if(textSize & 1) ++ textSize; + uint32 tagsSize = 8; + uint32 layrSize = 24; + uint32 pntsSize = (uint32) (aMesh->mVertices.size() * 12); + uint32 txuvSize = CalcVMAPSize(aMesh, 2) + 20; + uint32 rgbaSize = CalcVMAPSize(aMesh, 4) + 14; + uint32 polsSize = CalcPOLSSize(aMesh); + + // Calculate output file size + uint32 fileSize = 4 + + 8 + tagsSize + + 8 + layrSize + + 8 + pntsSize + + 8 + polsSize; + if(exportComment) + fileSize += 8 + textSize; + if(exportTexCoords) + fileSize += 8 + txuvSize; + if(exportColors) + fileSize += 8 + rgbaSize; + + // Open the output file + ofstream f(aFileName, ios::out | ios::binary); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // File header + WriteString(f, "FORM"); + WriteU4(f, fileSize); // File size (excluding FORM chunk header) + WriteString(f, "LWO2"); + + // TEXT chunk + if(exportComment) + { + WriteString(f, "TEXT"); + WriteU4(f, textSize); + WriteStringZ(f, aMesh->mComment.c_str()); + } + + // TAGS chunk + WriteString(f, "TAGS"); + WriteU4(f, tagsSize); + WriteStringZ(f, "Default"); + + // LAYR chunk + WriteString(f, "LAYR"); + WriteU4(f, layrSize); + WriteU2(f, 0); // number + WriteU2(f, 0); // flags + WriteVEC12(f, Vector3(0.0f, 0.0f, 0.0f)); // pivot + WriteStringZ(f, "Layer 1"); // name + + // PNTS chunk + WriteString(f, "PNTS"); + WriteU4(f, pntsSize); + for(uint32 i = 0; i < (uint32) aMesh->mVertices.size(); ++ i) + WriteVEC12(f, aMesh->mVertices[i]); + + // VMAP:TXUV chunk (optional) + if(exportTexCoords) + { + WriteString(f, "VMAP"); + WriteU4(f, txuvSize); + WriteString(f, "TXUV"); // type + WriteU2(f, 2); // dimension + WriteStringZ(f, "Texture coordaintes"); // name + for(uint32 i = 0; i < (uint32) aMesh->mTexCoords.size(); ++ i) + { + WriteVX(f, i); + WriteF4(f, aMesh->mTexCoords[i].u); + WriteF4(f, aMesh->mTexCoords[i].v); + } + } + + // VMAP:RGBA chunk (optional) + if(exportColors) + { + WriteString(f, "VMAP"); + WriteU4(f, rgbaSize); + WriteString(f, "RGBA"); // type + WriteU2(f, 4); // dimension + WriteStringZ(f, "Vertex colors"); // name + for(uint32 i = 0; i < (uint32) aMesh->mColors.size(); ++ i) + { + WriteVX(f, i); + WriteF4(f, aMesh->mColors[i].x); + WriteF4(f, aMesh->mColors[i].y); + WriteF4(f, aMesh->mColors[i].z); + WriteF4(f, aMesh->mColors[i].w); + } + } + + // POLS chunk + WriteString(f, "POLS"); + WriteU4(f, polsSize); + WriteString(f, "FACE"); + uint32 triCount = (uint32) (aMesh->mIndices.size() / 3); + for(uint32 i = 0; i < triCount; ++ i) + { + // Polygon node count (always 3) + WriteU2(f, 3); + + // Write polygon node indices + for(int j = 0; j < 3; ++ j) + WriteVX(f, aMesh->mIndices[i * 3 + j]); + } + + // Close the output file + f.close(); +} diff --git a/3rdparty/openctm/tools/lwo.h b/3rdparty/openctm/tools/lwo.h new file mode 100644 index 000000000..c1cea4f9a --- /dev/null +++ b/3rdparty/openctm/tools/lwo.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: lwo.h +// Description: Interface for the LWO file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __LWO_H_ +#define __LWO_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a mesh from an LWO file. +void Import_LWO(const char * aFileName, Mesh * aMesh); + +/// Export a mesh to an LWO file. +void Export_LWO(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __LWO_H_ diff --git a/3rdparty/openctm/tools/mesh.cpp b/3rdparty/openctm/tools/mesh.cpp new file mode 100644 index 000000000..623b99125 --- /dev/null +++ b/3rdparty/openctm/tools/mesh.cpp @@ -0,0 +1,214 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: mesh.cpp +// Description: Implementation of the 3D triangle mesh class. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include "mesh.h" +#include "convoptions.h" + + +using namespace std; + + +/// Compute the cross product of two vectors +Vector3 Cross(Vector3 &v1, Vector3 &v2) +{ + return Vector3( + v1.y * v2.z - v1.z * v2.y, + v1.z * v2.x - v1.x * v2.z, + v1.x * v2.y - v1.y * v2.x + ); +} + +/// Normalize a vector +Vector3 Normalize(Vector3 v) +{ + float len = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); + if(len > 1e-20f) + len = 1.0f / len; + else + len = 1.0f; + return Vector3(v.x * len, v.y * len, v.z * len); +} + + +/// Clear the mesh +void Mesh::Clear() +{ + mComment = string(""); + mTexFileName = string(""); + mIndices.clear(); + mVertices.clear(); + mNormals.clear(); + mColors.clear(); + mTexCoords.clear(); + mOriginalNormals = true; +} + +/// Automatic detection of the optimal normal calculation method +Mesh::NormalCalcAlgo Mesh::DetectNormalCalculationMethod() +{ + unsigned int triCount = mIndices.size() / 3; + unsigned int vertexCount = mVertices.size(); + + // Calculate the mean edge length + double meanEdgeLen = 0; + for(unsigned int i = 0; i < triCount; ++ i) + { + meanEdgeLen += (mVertices[mIndices[i * 3 + 1]] - mVertices[mIndices[i * 3]]).Abs(); + meanEdgeLen += (mVertices[mIndices[i * 3 + 2]] - mVertices[mIndices[i * 3 + 1]]).Abs(); + meanEdgeLen += (mVertices[mIndices[i * 3]] - mVertices[mIndices[i * 3 + 2]]).Abs(); + } + if(triCount > 0) + meanEdgeLen = meanEdgeLen / (3 * triCount); + + // Calculate the standard deviation of the edge length + double stdDevEdgeLen = 0; + for(unsigned int i = 0; i < triCount; ++ i) + { + double len = (mVertices[mIndices[i * 3 + 1]] - mVertices[mIndices[i * 3]]).Abs(); + stdDevEdgeLen += (len - meanEdgeLen) * (len - meanEdgeLen); + len = (mVertices[mIndices[i * 3 + 2]] - mVertices[mIndices[i * 3 + 1]]).Abs(); + stdDevEdgeLen += (len - meanEdgeLen) * (len - meanEdgeLen); + len = (mVertices[mIndices[i * 3]] - mVertices[mIndices[i * 3 + 2]]).Abs(); + stdDevEdgeLen += (len - meanEdgeLen) * (len - meanEdgeLen); + } + if(triCount > 0) + stdDevEdgeLen = sqrt(stdDevEdgeLen / (3 * triCount)); + + // Calculate the number of triangles that connect to each vertex + vector connectCount; + connectCount.resize(vertexCount); + for(unsigned int i = 0; i < vertexCount; ++ i) + connectCount[i] = 0; + for(unsigned int i = 0; i < mIndices.size(); ++ i) + { + unsigned int idx = mIndices[i]; + if(idx < vertexCount) + ++ connectCount[idx]; + } + + // First analysis: how much variation is there in the triangle edge lengths? + double edgeVariation = 0.0; + if(meanEdgeLen > 0.0) + edgeVariation = stdDevEdgeLen / meanEdgeLen; + + // Calculate the mean number of triangle connections + double meanConnectCount = 0; + for(unsigned int i = 0; i < vertexCount; ++ i) + meanConnectCount += connectCount[i]; + if(vertexCount > 0) + meanConnectCount = meanConnectCount / vertexCount; + + // Calculate the standard deviation of the number of triangle connections + double stdDevConnectCount = 0; + for(unsigned int i = 0; i < vertexCount; ++ i) + stdDevConnectCount += (connectCount[i] - meanConnectCount) * (connectCount[i] - meanConnectCount); + if(vertexCount > 0) + stdDevConnectCount = sqrt(stdDevConnectCount / vertexCount); + + // Second analysis: how much variation is there in the number of connections + // per vertex? + double connectVariation = 0.0; + if(meanConnectCount > 0.0) + connectVariation = stdDevConnectCount / meanConnectCount; + + // Normalize the different measures to their respective threshold values + edgeVariation /= 0.7; + connectVariation /= 0.3; + + // Is this a CAD-like object or a organic-like object? + NormalCalcAlgo algo = ncaOrganic; + if(edgeVariation * connectVariation > 1.0) + algo = ncaCAD; + + return algo; +} + +/// Calculate smooth per-vertex normals +void Mesh::CalculateNormals(NormalCalcAlgo aAlgo) +{ + // Determine which normal calculation algorithm to use + NormalCalcAlgo algo; + if(aAlgo == ncaAuto) + algo = DetectNormalCalculationMethod(); + else + algo = aAlgo; + + // The original normals are no longer preserved + mOriginalNormals = false; + + // Clear the smooth normals + mNormals.resize(mVertices.size()); + for(unsigned int i = 0; i < mNormals.size(); ++ i) + mNormals[i] = Vector3(0.0f, 0.0f, 0.0f); + + // Calculate sum of the flat normals of the neighbouring triangles + unsigned int triCount = mIndices.size() / 3; + for(unsigned int i = 0; i < triCount; ++ i) + { + // Calculate the weighted flat normal for this triangle + Vector3 v1 = mVertices[mIndices[i * 3 + 1]] - mVertices[mIndices[i * 3]]; + Vector3 v2 = mVertices[mIndices[i * 3 + 2]] - mVertices[mIndices[i * 3]]; + Vector3 flatNormal = Cross(v1, v2); + if(algo == ncaOrganic) + flatNormal = Normalize(flatNormal); + + // ...and add it to all three triangle vertices' smooth normals + for(unsigned int j = 0; j < 3; ++ j) + mNormals[mIndices[i * 3 + j]] += flatNormal; + } + + // Normalize all the smooth normals + for(unsigned int i = 0; i < mNormals.size(); ++ i) + mNormals[i] = Normalize(mNormals[i]); +} + +/// Calculate the bounding box for the mesh +void Mesh::BoundingBox(Vector3 &aMin, Vector3 &aMax) +{ + if(mVertices.size() < 1) + aMin = aMax = Vector3(0.0f, 0.0f, 0.0f); + else + aMin = aMax = mVertices[0]; + for(unsigned int i = 1; i < mVertices.size(); ++ i) + { + if(mVertices[i].x < aMin.x) + aMin.x = mVertices[i].x; + else if(mVertices[i].x > aMax.x) + aMax.x = mVertices[i].x; + if(mVertices[i].y < aMin.y) + aMin.y = mVertices[i].y; + else if(mVertices[i].y > aMax.y) + aMax.y = mVertices[i].y; + if(mVertices[i].z < aMin.z) + aMin.z = mVertices[i].z; + else if(mVertices[i].z > aMax.z) + aMax.z = mVertices[i].z; + } +} diff --git a/3rdparty/openctm/tools/mesh.h b/3rdparty/openctm/tools/mesh.h new file mode 100644 index 000000000..466d599c7 --- /dev/null +++ b/3rdparty/openctm/tools/mesh.h @@ -0,0 +1,195 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: mesh.h +// Description: Interface for the 3D triangle mesh class. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __MESH_H_ +#define __MESH_H_ + +#include +#include +#include + +class Vector2 { + public: + Vector2() + { + u = 0.0f; v = 0.0f; + } + + Vector2(float a, float b) + { + u = a; v = b; + } + + Vector2(const Vector2 &a) + { + u = a.u; v = a.v; + } + + float u, v; +}; + +class Vector3 { + public: + Vector3() + { + x = 0.0f; y = 0.0f; z = 0.0f; + } + + Vector3(float a, float b, float c) + { + x = a; y = b; z = c; + } + + Vector3(const Vector3 &a) + { + x = a.x; y = a.y; z = a.z; + } + + inline Vector3 operator+(const Vector3 &v) const + { + return Vector3(x + v.x, y + v.y, z + v.z); + } + + inline Vector3 operator-(const Vector3 &v) const + { + return Vector3(x - v.x, y - v.y, z - v.z); + } + + inline Vector3 operator*(const float &aScale) const + { + return Vector3(aScale * x, aScale * y, aScale * z); + } + + inline void operator+=(const Vector3 &v) + { + x += v.x; + y += v.y; + z += v.z; + } + + float Abs() + { + return sqrtf(x * x + y * y + z * z); + } + + float x, y, z; +}; + +class Vector4 { + public: + Vector4() + { + x = 0.0f; y = 0.0f; z = 0.0f; w = 0.0f; + } + + Vector4(float a, float b, float c, float d) + { + x = a; y = b; z = c; w = d; + } + + Vector4(const Vector4 &a) + { + x = a.x; y = a.y; z = a.z; w = a.w; + } + + Vector4(const Vector3 &a) + { + x = a.x; y = a.y; z = a.z; w = 1.0; + } + + float x, y, z, w; +}; + +class Options; + +class Mesh { + public: + /// Normal calculation algorithm + enum NormalCalcAlgo { + ncaAuto, ///< Auto detect optimal algorithm + ncaOrganic, ///< Optimized for "organic" models (e.g. scanned objects) + ncaCAD ///< Optimized for CAD models (varying triangle sizes etc) + }; + + /// Constructor + Mesh() + { + mOriginalNormals = true; + } + + /// Clear the mesh + void Clear(); + + /// Calculate smooth per-vertex normals + void CalculateNormals(NormalCalcAlgo aAlgo = ncaAuto); + + /// Calculate the bounding box for the mesh + void BoundingBox(Vector3 &aMin, Vector3 &aMax); + + /// Set to true if the mesh contains the original normals from the imported + /// file. This flag is set to false by the CalculateNormals() method. + bool mOriginalNormals; + + /// Check if the mesh has normals + bool HasNormals() + { + return (mNormals.size() > 0) && (mNormals.size() == mVertices.size()); + } + + /// Check if the mesh has colors + bool HasColors() + { + return (mColors.size() > 0) && (mColors.size() == mVertices.size()); + } + + /// Check if the mesh has texture coordinates + bool HasTexCoords() + { + return (mTexCoords.size() > 0) && (mTexCoords.size() == mVertices.size()); + } + + std::string mComment; + std::string mTexFileName; + std::vector mIndices; + std::vector mVertices; + std::vector mNormals; + std::vector mColors; + std::vector mTexCoords; + + private: + /// Automatic detection of the optimal normal calculation method + NormalCalcAlgo DetectNormalCalculationMethod(); +}; + + +/// Compute the cross product of two vectors +Vector3 Cross(Vector3 &v1, Vector3 &v2); + +/// Normalize a vector +Vector3 Normalize(Vector3 v); + +#endif // __MESH_H_ diff --git a/3rdparty/openctm/tools/meshio.cpp b/3rdparty/openctm/tools/meshio.cpp new file mode 100644 index 000000000..52e84412f --- /dev/null +++ b/3rdparty/openctm/tools/meshio.cpp @@ -0,0 +1,112 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: meshio.cpp +// Description: Mesh I/O using different file format loaders/savers. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include "mesh.h" +#include "meshio.h" +#include "convoptions.h" +#include "ctm.h" +#include "ply.h" +#include "stl.h" +#include "3ds.h" +#include "dae.h" +#include "obj.h" +#include "lwo.h" +#include "off.h" +#include "wrl.h" +#include "common.h" + +using namespace std; + + +/// Import a mesh from a file. +void ImportMesh(const char * aFileName, Mesh * aMesh) +{ + string fileExt = UpperCase(ExtractFileExt(string(aFileName))); + if(fileExt == string(".CTM")) + Import_CTM(aFileName, aMesh); + else if(fileExt == string(".PLY")) + Import_PLY(aFileName, aMesh); + else if(fileExt == string(".STL")) + Import_STL(aFileName, aMesh); + else if(fileExt == string(".3DS")) + Import_3DS(aFileName, aMesh); + else if(fileExt == string(".DAE")) + Import_DAE(aFileName, aMesh); + else if(fileExt == string(".OBJ")) + Import_OBJ(aFileName, aMesh); + else if(fileExt == string(".LWO")) + Import_LWO(aFileName, aMesh); + else if(fileExt == string(".OFF")) + Import_OFF(aFileName, aMesh); + else if(fileExt == string(".WRL")) + Import_WRL(aFileName, aMesh); + else + throw runtime_error("Unknown input file extension."); +} + +/// Export a mesh to a file. +void ExportMesh(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + string fileExt = UpperCase(ExtractFileExt(string(aFileName))); + if(fileExt == string(".CTM")) + Export_CTM(aFileName, aMesh, aOptions); + else if(fileExt == string(".PLY")) + Export_PLY(aFileName, aMesh, aOptions); + else if(fileExt == string(".STL")) + Export_STL(aFileName, aMesh, aOptions); + else if(fileExt == string(".3DS")) + Export_3DS(aFileName, aMesh, aOptions); + else if(fileExt == string(".DAE")) + Export_DAE(aFileName, aMesh, aOptions); + else if(fileExt == string(".OBJ")) + Export_OBJ(aFileName, aMesh, aOptions); + else if(fileExt == string(".LWO")) + Export_LWO(aFileName, aMesh, aOptions); + else if(fileExt == string(".OFF")) + Export_OFF(aFileName, aMesh, aOptions); + else if(fileExt == string(".WRL")) + Export_WRL(aFileName, aMesh, aOptions); + else + throw runtime_error("Unknown output file extension."); +} + +/// Return a list of supported formats. +void SupportedFormats(list &aList) +{ + aList.push_back(string("OpenCTM (.ctm)")); + aList.push_back(string("Stanford triangle format (.ply)")); + aList.push_back(string("Stereolithography (.stl)")); + aList.push_back(string("3D Studio (.3ds)")); + aList.push_back(string("COLLADA 1.4/1.5 (.dae)")); + aList.push_back(string("Wavefront geometry file (.obj)")); + aList.push_back(string("LightWave object (.lwo)")); + aList.push_back(string("Geomview object file format (.off)")); + aList.push_back(string("VRML 2.0 (.wrl) - export only")); +} diff --git a/3rdparty/openctm/tools/meshio.h b/3rdparty/openctm/tools/meshio.h new file mode 100644 index 000000000..255e3c46c --- /dev/null +++ b/3rdparty/openctm/tools/meshio.h @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: meshio.h +// Description: Interface for the mesh I/O functions. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __MESHIO_H_ +#define __MESHIO_H_ + +#include +#include "mesh.h" +#include "convoptions.h" + + +/// Import a mesh from a file. +void ImportMesh(const char * aFileName, Mesh * aMesh); + +/// Export a mesh to a file. +void ExportMesh(const char * aFileName, Mesh * aMesh, Options &aOptions); + +/// Return a list of supported formats. +void SupportedFormats(std::list &aList); + + +#endif // __MESHIO_H_ diff --git a/3rdparty/openctm/tools/obj.cpp b/3rdparty/openctm/tools/obj.cpp new file mode 100644 index 000000000..5ed49aa53 --- /dev/null +++ b/3rdparty/openctm/tools/obj.cpp @@ -0,0 +1,347 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: obj.cpp +// Description: Implementation of the OBJ file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include "obj.h" +#include "common.h" + +using namespace std; + +class OBJFaceNode { + public: + OBJFaceNode() + { + v = vt = vn = 0; + } + + void Set(int aIndex, int aValue) + { + if(aIndex == 0) + v = aValue; + else if(aIndex == 1) + vt = aValue; + else + vn = aValue; + } + + int v, vt, vn; +}; + +// OBJ file face description class (three triangle corners, with one vertex, +// texcoord and normal index each). +class OBJFace { + public: + OBJFace() + { + } + + // Contruct a face (one triangle) from an OBJ face description string + OBJFace(const string aStr) + { + // Start by finding the first and last non-whitespace char (trim) + size_t l = aStr.size(); + size_t pos = 0, strEnd = l - 1; + while((pos < strEnd) && ((aStr[pos] == ' ') || (aStr[pos] == '\t'))) + ++ pos; + while((strEnd > pos) && ((aStr[strEnd] == ' ') || (aStr[strEnd] == '\t'))) + -- strEnd; + + // Extract three face corners (one triangle) + while((pos <= strEnd) && (aStr[pos] != ' ') && (aStr[pos] != '\t')) + { + // Extract three /-separated strings (v/vt/vn) + string v_s[3]; + int j = 0; + while((pos <= strEnd) && (aStr[pos] != ' ') && (aStr[pos] != '\t') && (j < 3)) + { + if(aStr[pos] != '/') + v_s[j] += aStr[pos]; + else + ++ j; + ++ pos; + } + + // Skip whitespaces + while((pos <= strEnd) && ((aStr[pos] == ' ') || (aStr[pos] == '\t'))) + ++ pos; + + // Convert the strings to integers + mNodes.push_back(OBJFaceNode()); + OBJFaceNode &n = mNodes.back(); + for(int j = 0; j < 3; ++ j) + { + int value = 0; + if(v_s[j].size() > 0) + { + istringstream ss(v_s[j]); + ss >> value; + if(value > 0) + value --; + else if(value < 0) + throw runtime_error("Negative vertex references in OBJ files are not supported."); + else + throw runtime_error("Invalid index (zero) in OBJ file."); + } + n.Set(j, value); + } + } + } + + list mNodes; +}; + +// Parse a 2 x float string as a Vector2 +static Vector2 ParseVector2(const string aString) +{ + Vector2 result; + istringstream sstr(aString); + sstr >> result.u; + sstr >> result.v; + return result; +} + +// Parse a 3 x float string as a Vector3 +static Vector3 ParseVector3(const string aString) +{ + Vector3 result; + istringstream sstr(aString); + sstr >> result.x; + sstr >> result.y; + sstr >> result.z; + return result; +} + +/// Import a mesh from an OBJ file. +void Import_OBJ(const char * aFileName, Mesh * aMesh) +{ + // Clear the mesh + aMesh->Clear(); + + // Open the input file + ifstream inFile(aFileName, ios::in); + if(inFile.fail()) + throw runtime_error("Could not open input file."); + + // Mesh description - parsed from the OBJ file + list vertices; + list texCoords; + list normals; + list faces; + + // Parse the file + while(!inFile.eof()) + { + // Read one line from the file (concatenate lines that end with "\") + string line; + getline(inFile, line); + while((line.size() > 0) && (line[line.size() - 1] == '\\') && !inFile.eof()) + { + string nextLine; + getline(inFile, nextLine); + line = line.substr(0, line.size() - 1) + string(" ") + nextLine; + } + + // Parse the line, if it is non-empty + if(line.size() >= 1) + { + if(line.substr(0, 2) == string("v ")) + vertices.push_back(ParseVector3(line.substr(2))); + else if(line.substr(0, 3) == string("vt ")) + texCoords.push_back(ParseVector2(line.substr(3))); + else if(line.substr(0, 3) == string("vn ")) + normals.push_back(ParseVector3(line.substr(3))); + else if(line.substr(0, 2) == string("f ")) + faces.push_back(OBJFace(line.substr(2))); + } + } + + // Convert lists to vectors (for random element access) + vector verticesArray(vertices.begin(), vertices.end()); + vector texCoordsArray(texCoords.begin(), texCoords.end()); + vector normalsArray(normals.begin(), normals.end()); + + // Prepare vertices + aMesh->mVertices.resize(verticesArray.size()); + if(texCoordsArray.size() > 0) + aMesh->mTexCoords.resize(verticesArray.size()); + if(normalsArray.size() > 0) + aMesh->mNormals.resize(verticesArray.size()); + + // Prepare indices + int triCount = 0; + for(list::iterator i = faces.begin(); i != faces.end(); ++ i) + { + int nodeCount = (*i).mNodes.size(); + if(nodeCount >= 3) + triCount += (nodeCount - 2); + } + aMesh->mIndices.resize(triCount * 3); + + // Iterate faces and extract vertex data + unsigned int idx = 0; + for(list::iterator i = faces.begin(); i != faces.end(); ++ i) + { + OBJFace &f = (*i); + int nodes[3][3]; + int nodeCount = 0; + for(list::iterator n = f.mNodes.begin(); n != f.mNodes.end(); ++ n) + { + // Collect polygon nodes for this face, turning it into triangles + if(nodeCount < 3) + { + nodes[nodeCount][0] = (*n).v; + nodes[nodeCount][1] = (*n).vt; + nodes[nodeCount][2] = (*n).vn; + } + else + { + nodes[1][0] = nodes[2][0]; + nodes[1][1] = nodes[2][1]; + nodes[1][2] = nodes[2][2]; + nodes[2][0] = (*n).v; + nodes[2][1] = (*n).vt; + nodes[2][2] = (*n).vn; + } + ++ nodeCount; + + // Emit one triangle? + if(nodeCount >= 3) + { + aMesh->mIndices[idx ++] = nodes[0][0]; + aMesh->mIndices[idx ++] = nodes[1][0]; + aMesh->mIndices[idx ++] = nodes[2][0]; + aMesh->mVertices[nodes[0][0]] = verticesArray[nodes[0][0]]; + aMesh->mVertices[nodes[1][0]] = verticesArray[nodes[1][0]]; + aMesh->mVertices[nodes[2][0]] = verticesArray[nodes[2][0]]; + if(texCoordsArray.size() > 0) + { + aMesh->mTexCoords[nodes[0][0]] = texCoordsArray[nodes[0][1]]; + aMesh->mTexCoords[nodes[1][0]] = texCoordsArray[nodes[1][1]]; + aMesh->mTexCoords[nodes[2][0]] = texCoordsArray[nodes[2][1]]; + } + if(normalsArray.size() > 0) + { + aMesh->mNormals[nodes[0][0]] = normalsArray[nodes[0][2]]; + aMesh->mNormals[nodes[1][0]] = normalsArray[nodes[1][2]]; + aMesh->mNormals[nodes[2][0]] = normalsArray[nodes[2][2]]; + } + } + } + } + + // Close the input file + inFile.close(); +} + +/// Export a mesh to an OBJ file. +void Export_OBJ(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Open the output file + ofstream f(aFileName, ios::out); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // What should we export? + bool exportTexCoords = aMesh->HasTexCoords() && !aOptions.mNoTexCoords; + bool exportNormals = aMesh->HasNormals() && !aOptions.mNoNormals; + + // Set floating point precision + f << setprecision(8); + + // Write comment + if(aMesh->mComment.size() > 0) + { + stringstream sstr(aMesh->mComment); + sstr.seekg(0); + while(!sstr.eof()) + { + string line; + getline(sstr, line); + line = TrimString(line); + if(line.size() > 0) + f << "# " << line << endl; + } + } + + // Write vertices + for(unsigned int i = 0; i < aMesh->mVertices.size(); ++ i) + f << "v " << aMesh->mVertices[i].x << " " << aMesh->mVertices[i].y << " " << aMesh->mVertices[i].z << endl; + + // Write UV coordinates + if(exportTexCoords) + { + for(unsigned int i = 0; i < aMesh->mTexCoords.size(); ++ i) + f << "vt " << aMesh->mTexCoords[i].u << " " << aMesh->mTexCoords[i].v << endl; + } + + // Write normals + if(exportNormals) + { + for(unsigned int i = 0; i < aMesh->mNormals.size(); ++ i) + f << "vn " << aMesh->mNormals[i].x << " " << aMesh->mNormals[i].y << " " << aMesh->mNormals[i].z << endl; + } + + // Write faces + unsigned int triCount = aMesh->mIndices.size() / 3; + f << "s 1" << endl; // Put all faces in the same smoothing group + for(unsigned int i = 0; i < triCount; ++ i) + { + unsigned int idx = aMesh->mIndices[i * 3] + 1; + f << "f " << idx << "/"; + if(exportTexCoords) + f << idx; + f << "/"; + if(exportNormals) + f << idx; + + idx = aMesh->mIndices[i * 3 + 1] + 1; + f << " " << idx << "/"; + if(exportTexCoords) + f << idx; + f << "/"; + if(exportNormals) + f << idx; + + idx = aMesh->mIndices[i * 3 + 2] + 1; + f << " " << idx << "/"; + if(exportTexCoords) + f << idx; + f << "/"; + if(exportNormals) + f << idx; + f << endl; + } + + // Close the output file + f.close(); +} diff --git a/3rdparty/openctm/tools/obj.h b/3rdparty/openctm/tools/obj.h new file mode 100644 index 000000000..79b387323 --- /dev/null +++ b/3rdparty/openctm/tools/obj.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: obj.h +// Description: Interface for the OBJ file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __OBJ_H_ +#define __OBJ_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a mesh from an OBJ file. +void Import_OBJ(const char * aFileName, Mesh * aMesh); + +/// Export a mesh to an OBJ file. +void Export_OBJ(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __OBJ_H_ diff --git a/3rdparty/openctm/tools/off.cpp b/3rdparty/openctm/tools/off.cpp new file mode 100644 index 000000000..6a40934da --- /dev/null +++ b/3rdparty/openctm/tools/off.cpp @@ -0,0 +1,253 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: off.cpp +// Description: Implementation of the OFF file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// The "Object File Format" (OFF) is, among other things, used by the Princeton +// Shape Benchmark data set (http://shape.cs.princeton.edu/benchmark). The file +// format specification can be found here: +// http://people.sc.fsu.edu/~burkardt/data/off/off.html +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include "off.h" +#include "common.h" + +using namespace std; + +// Read the next line in a file (skip comments and empty lines) +static void ReadNextLine(ifstream &aStream, string &aResult, string &aComment) +{ + while(true) + { + // Read another line from the file + string line; + getline(aStream, line); + + // Check for comment + size_t commentPos = line.find('#'); + if(commentPos != string::npos) + { + string lineComment = TrimString(line.substr(commentPos + 1)); + if(lineComment.size() > 0) + { + if(aComment.size() > 0) + aComment = aComment + string(" ") + lineComment; + else + aComment = lineComment; + } + line = line.substr(0, commentPos); + } + + // Trim the string + aResult = TrimString(line); + + // Non-empty line? + if((aResult.size() > 0) || aStream.eof()) + return; + } +} + +// Parse a 7 x float string as a Vector3 and a Vector4 element +static void ParseVeretex(const string aString, Vector3 * aCoord, Vector4 * aColor) +{ + istringstream sstr(aString); + sstr >> aCoord->x; + sstr >> aCoord->y; + sstr >> aCoord->z; + sstr >> aColor->x; + sstr >> aColor->y; + sstr >> aColor->z; + sstr >> aColor->w; +} + +/// Import a mesh from an OFF file. +void Import_OFF(const char * aFileName, Mesh * aMesh) +{ + // Clear the mesh + aMesh->Clear(); + + // Open the input file + ifstream f(aFileName, ios::in); + if(f.fail()) + throw runtime_error("Could not open input file."); + + // Some state variables that we need... + unsigned int numVertices; + unsigned int numFaces; + string line, comment; + istringstream sstr; + + // Read header + ReadNextLine(f, line, comment); + if(line != string("OFF")) + throw runtime_error("Not a valid OFF format file (missing OFF signature)."); + ReadNextLine(f, line, comment); + sstr.clear(); + sstr.str(line); + sstr >> numVertices; + sstr >> numFaces; + if(numVertices < 1) + throw runtime_error("Not a valid OFF format file (bad vertex count)."); + if(numFaces < 1) + throw runtime_error("Not a valid OFF format file (bad face count)."); + + // Read vertices + aMesh->mVertices.resize(numVertices); + aMesh->mColors.resize(numVertices); + for(unsigned int i = 0; i < numVertices; ++ i) + { + ReadNextLine(f, line, comment); + ParseVeretex(line, &aMesh->mVertices[i], &aMesh->mColors[i]); + } + + // Check if there were vertex colors + bool hasVertexColors = false; + Vector4 firstColor = aMesh->mColors[0]; + for(unsigned int i = 1; i < numVertices; ++ i) + { + if((aMesh->mColors[i].x != firstColor.x) || (aMesh->mColors[i].y != firstColor.y) || + (aMesh->mColors[i].z != firstColor.z) || (aMesh->mColors[i].w != firstColor.w)) + { + hasVertexColors = true; + break; + } + } + if(!hasVertexColors) + aMesh->mColors.clear(); + + // Read faces + list indices; + unsigned int idx[3]; + for(unsigned int i = 0; i < numFaces; ++ i) + { + ReadNextLine(f, line, comment); + sstr.clear(); + sstr.str(line); + int nodeCount; + sstr >> nodeCount; + if(nodeCount >= 3) + { + sstr >> idx[0]; + sstr >> idx[1]; + sstr >> idx[2]; + nodeCount -= 3; + while(nodeCount >= 0) + { + indices.push_back(idx[0]); + indices.push_back(idx[1]); + indices.push_back(idx[2]); + if(nodeCount > 0) + { + idx[1] = idx[2]; + sstr >> idx[2]; + } + -- nodeCount; + } + } + } + + // Copy triangle indices from the read index list to the mesh index vector + aMesh->mIndices.resize(indices.size()); + unsigned int j = 0; + for(list::iterator i = indices.begin(); i != indices.end(); ++ i) + { + aMesh->mIndices[j] = (*i); + ++ j; + } + + // Close the input file + f.close(); + + // Did we get a comment? + if(comment.size() > 0) + aMesh->mComment = comment; +} + +/// Export a mesh to an OFF file. +void Export_OFF(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Open the output file + ofstream f(aFileName, ios::out); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // Mesh information + unsigned int numVertices = (unsigned int) aMesh->mVertices.size(); + unsigned int numFaces = (unsigned int) aMesh->mIndices.size() / 3; + + // Set floating point precision + f << setprecision(8); + + // Write OFF file header ID + f << "OFF" << endl; + + // Write comment + if(aMesh->mComment.size() > 0) + { + stringstream sstr(aMesh->mComment); + sstr.seekg(0); + while(!sstr.eof()) + { + string line; + getline(sstr, line); + line = TrimString(line); + if(line.size() > 0) + f << "# " << line << endl; + } + } + f << endl; + + // Write mesh information + f << numVertices << " " << numFaces << " 0" << endl; + + // Write vertices + bool exportVertexColors = !aOptions.mNoColors && aMesh->HasColors(); + for(unsigned int i = 0; i < numVertices; ++ i) + { + f << aMesh->mVertices[i].x << " " << aMesh->mVertices[i].y << " " << aMesh->mVertices[i].z; + if(exportVertexColors) + f << " " << aMesh->mColors[i].x << " " << aMesh->mColors[i].y << " " << aMesh->mColors[i].z << " " << aMesh->mColors[i].w; + f << endl; + } + + // Write faces + for(unsigned int i = 0; i < numFaces; ++ i) + { + f << "3 " << aMesh->mIndices[i * 3] << " " << + aMesh->mIndices[i * 3 + 1] << " " << + aMesh->mIndices[i * 3 + 2] << endl; + } + + // Close the output file + f.close(); +} diff --git a/3rdparty/openctm/tools/off.h b/3rdparty/openctm/tools/off.h new file mode 100644 index 000000000..3ebdd148c --- /dev/null +++ b/3rdparty/openctm/tools/off.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: off.h +// Description: Interface for the OFF file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __OFF_H_ +#define __OFF_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a mesh from an OFF file. +void Import_OFF(const char * aFileName, Mesh * aMesh); + +/// Export a mesh to an OFF file. +void Export_OFF(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __OFF_H_ diff --git a/3rdparty/openctm/tools/phong.frag b/3rdparty/openctm/tools/phong.frag new file mode 100644 index 000000000..e2e989656 --- /dev/null +++ b/3rdparty/openctm/tools/phong.frag @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: phong.frag +// Description: GLSL per-pixel phong shader - fragment shader +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +uniform bool uUseTexture; +uniform sampler2D uTex; + +varying vec3 vNormal; +varying vec3 vPos; +varying vec4 vColor; + +void main() +{ + vec3 n = normalize(vNormal); + + // Calculate vertex color (vertex color * texture color) + vec4 color = vColor; + if(uUseTexture) + color *= texture2D(uTex, gl_TexCoord[0].st); + + // Ambient term +// vec4 ambient = color * gl_LightSource[0].ambient; + vec4 ambient = color * gl_LightModel.ambient; + + // Diffuse term + vec3 lightDir = normalize(gl_LightSource[0].position.xyz - vPos); + float NdotL = abs(dot(n, lightDir)); + vec4 diffuse = color * gl_LightSource[0].diffuse * NdotL; + + // Specular term + vec3 rVector = normalize(2.0 * n * dot(n, lightDir) - lightDir); + vec3 viewVector = normalize(-vPos); + float RdotV = dot(rVector, viewVector); + vec4 specular = vec4(0.0); + if(RdotV > 0.0) + specular = vec4(0.4, 0.4, 0.4, 1.0) * gl_LightSource[0].specular * pow(RdotV, 20.0); + + gl_FragColor = ambient + diffuse + specular; +} diff --git a/3rdparty/openctm/tools/phong.vert b/3rdparty/openctm/tools/phong.vert new file mode 100644 index 000000000..cd374a16e --- /dev/null +++ b/3rdparty/openctm/tools/phong.vert @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: phong.vert +// Description: GLSL per-pixel phong shader - vertex shader +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +varying vec3 vNormal; +varying vec3 vPos; +varying vec4 vColor; + +void main() +{ + // Vertex normal + vNormal = normalize(gl_NormalMatrix * gl_Normal); + + // Vertex position in eye coordinates + vPos = vec3(gl_ModelViewMatrix * gl_Vertex); + + // Vertex color (used for the ambient and diffuse terms) + vColor = gl_Color; + + // Texture coordinate + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + // Vertex position in screen coordinates + gl_Position = ftransform(); +} diff --git a/3rdparty/openctm/tools/ply.cpp b/3rdparty/openctm/tools/ply.cpp new file mode 100644 index 000000000..2bacaae4e --- /dev/null +++ b/3rdparty/openctm/tools/ply.cpp @@ -0,0 +1,320 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ply.cpp +// Description: Implementation of the PLY file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ply.h" +#include "common.h" + +using namespace std; + +typedef struct { + Mesh * mMesh; + long mFaceIdx; + long mVertexIdx; + long mNormalIdx; + long mTexCoordIdx; + long mColorIdx; +} PLYReaderState; + + +static int PLYFaceCallback(p_ply_argument argument) +{ + PLYReaderState * state; + long dummy, length, valueIndex; + ply_get_argument_user_data(argument, (void **) &state, &dummy); + double value = ply_get_argument_value(argument); + ply_get_argument_property(argument, NULL, &length, &valueIndex); + if((valueIndex >= 0) && (valueIndex <= 2)) + state->mMesh->mIndices[state->mFaceIdx * 3 + valueIndex] = int(value); + if(valueIndex == 2) + ++ state->mFaceIdx; + return 1; +} + +static int PLYVertexCallback(p_ply_argument argument) +{ + PLYReaderState * state; + long index; + ply_get_argument_user_data(argument, (void **) &state, &index); + double value = ply_get_argument_value(argument); + switch(index) + { + case 0: + state->mMesh->mVertices[state->mVertexIdx].x = float(value); + break; + case 1: + state->mMesh->mVertices[state->mVertexIdx].y = float(value); + break; + case 2: + state->mMesh->mVertices[state->mVertexIdx].z = float(value); + ++ state->mVertexIdx; + break; + } + return 1; +} + +static int PLYNormalCallback(p_ply_argument argument) +{ + PLYReaderState * state; + long index; + ply_get_argument_user_data(argument, (void **) &state, &index); + double value = ply_get_argument_value(argument); + switch(index) + { + case 0: + state->mMesh->mNormals[state->mNormalIdx].x = float(value); + break; + case 1: + state->mMesh->mNormals[state->mNormalIdx].y = float(value); + break; + case 2: + state->mMesh->mNormals[state->mNormalIdx].z = float(value); + ++ state->mNormalIdx; + break; + } + return 1; +} + +static int PLYTexCoordCallback(p_ply_argument argument) +{ + PLYReaderState * state; + long index; + ply_get_argument_user_data(argument, (void **) &state, &index); + double value = ply_get_argument_value(argument); + switch(index) + { + case 0: + state->mMesh->mTexCoords[state->mTexCoordIdx].u = float(value); + break; + case 1: + state->mMesh->mTexCoords[state->mTexCoordIdx].v = float(value); + ++ state->mTexCoordIdx; + break; + } + return 1; +} + +static int PLYColorCallback(p_ply_argument argument) +{ + PLYReaderState * state; + long index; + ply_get_argument_user_data(argument, (void **) &state, &index); + double value = ply_get_argument_value(argument); + switch(index) + { + case 0: + state->mMesh->mColors[state->mColorIdx].x = float(value) / 255.0f; + break; + case 1: + state->mMesh->mColors[state->mColorIdx].y = float(value) / 255.0f; + break; + case 2: + state->mMesh->mColors[state->mColorIdx].z = float(value) / 255.0f; + ++ state->mColorIdx; + break; + } + return 1; +} + +/// Import a PLY file from a file. +void Import_PLY(const char * aFileName, Mesh * aMesh) +{ + // Start by ensuring that we use proper locale settings for the file format + setlocale(LC_NUMERIC, "C"); + + // Clear the mesh + aMesh->Clear(); + + // Initialize the state + PLYReaderState state; + state.mMesh = aMesh; + state.mFaceIdx = 0; + state.mVertexIdx = 0; + state.mNormalIdx = 0; + state.mTexCoordIdx = 0; + state.mColorIdx = 0; + + // Open the PLY file + p_ply ply = ply_open(aFileName, NULL); + if(!ply) + throw runtime_error("Unable to open PLY file."); + if(!ply_read_header(ply)) + throw runtime_error("Invalid PLY file."); + + // Get the file comment (if any) + bool firstComment = true; + const char * comment = ply_get_next_comment(ply, NULL); + while(comment) + { + if(firstComment) + aMesh->mComment = string(comment); + else + aMesh->mComment += string(" ") + string(comment); + firstComment = false; + comment = ply_get_next_comment(ply, comment); + } + + // Set face callback + long faceCount = ply_set_read_cb(ply, "face", "vertex_indices", PLYFaceCallback, &state, 0); + if(faceCount == 0) + faceCount = ply_set_read_cb(ply, "face", "vertex_index", PLYFaceCallback, &state, 0); + + // Set vertex callback + long vertexCount = ply_set_read_cb(ply, "vertex", "x", PLYVertexCallback, &state, 0); + ply_set_read_cb(ply, "vertex", "y", PLYVertexCallback, &state, 1); + ply_set_read_cb(ply, "vertex", "z", PLYVertexCallback, &state, 2); + + // Set normal callback + long normalCount = ply_set_read_cb(ply, "vertex", "nx", PLYNormalCallback, &state, 0); + ply_set_read_cb(ply, "vertex", "ny", PLYNormalCallback, &state, 1); + ply_set_read_cb(ply, "vertex", "nz", PLYNormalCallback, &state, 2); + + // Set tex coord callback + long texCoordCount = ply_set_read_cb(ply, "vertex", "s", PLYTexCoordCallback, &state, 0); + ply_set_read_cb(ply, "vertex", "t", PLYTexCoordCallback, &state, 1); + + // Set color callback + long colorCount = ply_set_read_cb(ply, "vertex", "red", PLYColorCallback, &state, 0); + ply_set_read_cb(ply, "vertex", "green", PLYColorCallback, &state, 1); + ply_set_read_cb(ply, "vertex", "blue", PLYColorCallback, &state, 2); + + // Sanity check + if((faceCount < 1) || (vertexCount < 1)) + throw runtime_error("Empty PLY mesh - invalid file format?"); + + // Prepare the mesh + aMesh->mIndices.resize(faceCount * 3); + aMesh->mVertices.resize(vertexCount); + aMesh->mNormals.resize(normalCount); + aMesh->mTexCoords.resize(texCoordCount); + aMesh->mColors.resize(colorCount); + + // Read the PLY file + if(!ply_read(ply)) + throw runtime_error("Unable to load PLY file."); + + // Close the PLY file + ply_close(ply); +} + +/// Export a PLY file to a file. +void Export_PLY(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Start by ensuring that we use proper locale settings for the file format + setlocale(LC_NUMERIC, "C"); + + // What should we export? + bool exportTexCoords = aMesh->HasTexCoords() && !aOptions.mNoTexCoords; + bool exportNormals = aMesh->HasNormals() && !aOptions.mNoNormals; + bool exportColors = aMesh->HasColors() && !aOptions.mNoColors; + + // Open the output file + ofstream f(aFileName, ios::out | ios::binary); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // Set floating point precision + f << setprecision(8); + + // Write header + f << "ply" << endl; + f << "format ascii 1.0" << endl; + if(aMesh->mComment.size() > 0) + { + stringstream sstr(aMesh->mComment); + sstr.seekg(0); + while(!sstr.eof()) + { + string line; + getline(sstr, line); + line = TrimString(line); + if(line.size() > 0) + f << "comment " << line << endl; + } + } + f << "element vertex " << aMesh->mVertices.size() << endl; + f << "property float x" << endl; + f << "property float y" << endl; + f << "property float z" << endl; + if(exportTexCoords) + { + f << "property float s" << endl; + f << "property float t" << endl; + } + if(exportNormals) + { + f << "property float nx" << endl; + f << "property float ny" << endl; + f << "property float nz" << endl; + } + if(exportColors) + { + f << "property uchar red" << endl; + f << "property uchar green" << endl; + f << "property uchar blue" << endl; + } + f << "element face " << aMesh->mIndices.size() / 3 << endl; + f << "property list uchar int vertex_indices" << endl; + f << "end_header" << endl; + + // Write vertices + for(unsigned int i = 0; i < aMesh->mVertices.size(); ++ i) + { + f << aMesh->mVertices[i].x << " " << + aMesh->mVertices[i].y << " " << + aMesh->mVertices[i].z; + if(exportTexCoords) + f << " " << aMesh->mTexCoords[i].u << " " << + aMesh->mTexCoords[i].v; + if(exportNormals) + f << " " << aMesh->mNormals[i].x << " " << + aMesh->mNormals[i].y << " " << + aMesh->mNormals[i].z; + if(exportColors) + f << " " << int(floorf(255.0f * aMesh->mColors[i].x + 0.5f)) << " " << + int(floorf(255.0f * aMesh->mColors[i].y + 0.5f)) << " " << + int(floorf(255.0f * aMesh->mColors[i].z + 0.5f)); + f << endl; + } + + // Write faces + for(unsigned int i = 0; i < aMesh->mIndices.size() / 3; ++ i) + f << "3 " << aMesh->mIndices[i * 3] << " " << + aMesh->mIndices[i * 3 + 1] << " " << + aMesh->mIndices[i * 3 + 2] << endl; + + // Close the output file + f.close(); +} diff --git a/3rdparty/openctm/tools/ply.h b/3rdparty/openctm/tools/ply.h new file mode 100644 index 000000000..1544f5576 --- /dev/null +++ b/3rdparty/openctm/tools/ply.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: ply.h +// Description: Interface for the PLY file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __PLY_H_ +#define __PLY_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a PLY file from a file. +void Import_PLY(const char * aFileName, Mesh * aMesh); + +/// Export a PLY file to a file. +void Export_PLY(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __PLY_H_ diff --git a/3rdparty/openctm/tools/pnglite/pnglite.c b/3rdparty/openctm/tools/pnglite/pnglite.c new file mode 100644 index 000000000..f1af9e479 --- /dev/null +++ b/3rdparty/openctm/tools/pnglite/pnglite.c @@ -0,0 +1,877 @@ +/* pnglite.c - pnglite library + For conditions of distribution and use, see copyright notice in pnglite.h +*/ +#define DO_CRC_CHECKS 1 +#define USE_ZLIB 1 + +#if USE_ZLIB +#include "../zlib/zlib.h" +#else +#include "zlite.h" +#endif + +#include +#include +#include +#include "pnglite.h" + + + +static png_alloc_t png_alloc; +static png_free_t png_free; + +static size_t file_read(png_t* png, void* out, size_t size, size_t numel) +{ + size_t result; + if(png->read_fun) + { + result = png->read_fun(out, size, numel, png->user_pointer); + } + else + { + if(!out) + { + result = fseek(png->user_pointer, (long)(size*numel), SEEK_CUR); + } + else + { + result = fread(out, size, numel, png->user_pointer); + } + } + + return result; +} + +static size_t file_write(png_t* png, void* p, size_t size, size_t numel) +{ + size_t result; + + if(png->write_fun) + { + result = png->write_fun(p, size, numel, png->user_pointer); + } + else + { + result = fwrite(p, size, numel, png->user_pointer); + } + + return result; +} + +static int file_read_ul(png_t* png, unsigned *out) +{ + unsigned char buf[4]; + + if(file_read(png, buf, 1, 4) != 4) + return PNG_FILE_ERROR; + + *out = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; + + return PNG_NO_ERROR; +} + +static int file_write_ul(png_t* png, unsigned in) +{ + unsigned char buf[4]; + + buf[0] = (in>>24) & 0xff; + buf[1] = (in>>16) & 0xff; + buf[2] = (in>>8) & 0xff; + buf[3] = (in) & 0xff; + + if(file_write(png, buf, 1, 4) != 4) + return PNG_FILE_ERROR; + + return PNG_NO_ERROR; +} + + +static unsigned get_ul(unsigned char* buf) +{ + unsigned result; + unsigned char foo[4]; + + memcpy(foo, buf, 4); + + result = (foo[0]<<24) | (foo[1]<<16) | (foo[2]<<8) | foo[3]; + + return result; +} + +static unsigned set_ul(unsigned char* buf, unsigned in) +{ + buf[0] = (in>>24) & 0xff; + buf[1] = (in>>16) & 0xff; + buf[2] = (in>>8) & 0xff; + buf[3] = (in) & 0xff; + + return PNG_NO_ERROR; +} + +int png_init(png_alloc_t pngalloc, png_free_t pngfree) +{ + if(pngalloc) + png_alloc = pngalloc; + else + png_alloc = &malloc; + + if(pngfree) + png_free = pngfree; + else + png_free = &free; + + return PNG_NO_ERROR; +} + +static int png_get_bpp(png_t* png) +{ + int bpp; + + switch(png->color_type) + { + case PNG_GREYSCALE: + bpp = 1; break; + case PNG_TRUECOLOR: + bpp = 3; break; + case PNG_INDEXED: + bpp = 1; break; + case PNG_GREYSCALE_ALPHA: + bpp = 2; break; + case PNG_TRUECOLOR_ALPHA: + bpp = 4; break; + default: + return PNG_FILE_ERROR; + } + + bpp *= png->depth/8; + + return bpp; +} + +static int png_read_ihdr(png_t* png) +{ + unsigned length; +#if DO_CRC_CHECKS + unsigned orig_crc; + unsigned calc_crc; +#endif + unsigned char ihdr[13+4]; /* length should be 13, make room for type (IHDR) */ + + file_read_ul(png, &length); + + if(length != 13) + { + printf("%d\n", length); + return PNG_CRC_ERROR; + } + + if(file_read(png, ihdr, 1, 13+4) != 13+4) + return PNG_EOF_ERROR; +#if DO_CRC_CHECKS + file_read_ul(png, &orig_crc); + + calc_crc = crc32(0L, 0, 0); + calc_crc = crc32(calc_crc, ihdr, 13+4); + + if(orig_crc != calc_crc) + return PNG_CRC_ERROR; +#else + file_read_ul(png); +#endif + + png->width = get_ul(ihdr+4); + png->height = get_ul(ihdr+8); + png->depth = ihdr[12]; + png->color_type = ihdr[13]; + png->compression_method = ihdr[14]; + png->filter_method = ihdr[15]; + png->interlace_method = ihdr[16]; + + if(png->color_type == PNG_INDEXED) + return PNG_NOT_SUPPORTED; + + if(png->depth != 8 && png->depth != 16) + return PNG_NOT_SUPPORTED; + + if(png->interlace_method) + return PNG_NOT_SUPPORTED; + + return PNG_NO_ERROR; +} + +static int png_write_ihdr(png_t* png) +{ + unsigned char ihdr[13+4]; + unsigned char *p = ihdr; + unsigned crc; + + file_write(png, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 1, 8); + + file_write_ul(png, 13); + + *p = 'I'; p++; + *p = 'H'; p++; + *p = 'D'; p++; + *p = 'R'; p++; + set_ul(p, png->width); p+=4; + set_ul(p, png->height); p+=4; + *p = png->depth; p++; + *p = png->color_type; p++; + *p = 0; p++; + *p = 0; p++; + *p = 0; p++; + + file_write(png, ihdr, 1, 13+4); + + crc = crc32(0L, 0, 0); + crc = crc32(crc, ihdr, 13+4); + + file_write_ul(png, crc); + + return PNG_NO_ERROR; +} + +void png_print_info(png_t* png) +{ + printf("PNG INFO:\n"); + printf("\twidth:\t\t%d\n", png->width); + printf("\theight:\t\t%d\n", png->height); + printf("\tdepth:\t\t%d\n", png->depth); + printf("\tcolor:\t\t"); + + switch(png->color_type) + { + case PNG_GREYSCALE: printf("greyscale\n"); break; + case PNG_TRUECOLOR: printf("truecolor\n"); break; + case PNG_INDEXED: printf("palette\n"); break; + case PNG_GREYSCALE_ALPHA: printf("greyscale with alpha\n"); break; + case PNG_TRUECOLOR_ALPHA: printf("truecolor with alpha\n"); break; + default: printf("unknown, this is not good\n"); break; + } + + printf("\tcompression:\t%s\n", png->compression_method?"unknown, this is not good":"inflate/deflate"); + printf("\tfilter:\t\t%s\n", png->filter_method?"unknown, this is not good":"adaptive"); + printf("\tinterlace:\t%s\n", png->interlace_method?"interlace":"no interlace"); +} + +int png_open_read(png_t* png, png_read_callback_t read_fun, void* user_pointer) +{ + char header[8]; + int result; + + png->read_fun = read_fun; + png->write_fun = 0; + png->user_pointer = user_pointer; + + if(!read_fun && !user_pointer) + return PNG_WRONG_ARGUMENTS; + + if(file_read(png, header, 1, 8) != 8) + return PNG_EOF_ERROR; + + if(memcmp(header, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8) != 0) + return PNG_HEADER_ERROR; + + result = png_read_ihdr(png); + + png->bpp = (unsigned char)png_get_bpp(png); + + return result; +} + +int png_open_write(png_t* png, png_write_callback_t write_fun, void* user_pointer) +{ + png->write_fun = write_fun; + png->read_fun = 0; + png->user_pointer = user_pointer; + + if(!write_fun && !user_pointer) + return PNG_WRONG_ARGUMENTS; + + return PNG_NO_ERROR; +} + +int png_open(png_t* png, png_read_callback_t read_fun, void* user_pointer) +{ + return png_open_read(png, read_fun, user_pointer); +} + +int png_open_file_read(png_t *png, const char* filename) +{ + FILE* fp = fopen(filename, "rb"); + + if(!fp) + return PNG_FILE_ERROR; + + return png_open_read(png, 0, fp); +} + +int png_open_file_write(png_t *png, const char* filename) +{ + FILE* fp = fopen(filename, "wb"); + + if(!fp) + return PNG_FILE_ERROR; + + return png_open_write(png, 0, fp); +} + +int png_open_file(png_t *png, const char* filename) +{ + return png_open_file_read(png, filename); +} + +int png_close_file(png_t* png) +{ + fclose(png->user_pointer); + + return PNG_NO_ERROR; +} + +static int png_init_deflate(png_t* png, unsigned char* data, int datalen) +{ + z_stream *stream; + png->zs = png_alloc(sizeof(z_stream)); + + stream = png->zs; + + if(!stream) + return PNG_MEMORY_ERROR; + + memset(stream, 0, sizeof(z_stream)); + + if(deflateInit(stream, Z_DEFAULT_COMPRESSION) != Z_OK) + return PNG_ZLIB_ERROR; + + stream->next_in = data; + stream->avail_in = datalen; + + return PNG_NO_ERROR; +} + +static int png_init_inflate(png_t* png) +{ +#if USE_ZLIB + z_stream *stream; + png->zs = png_alloc(sizeof(z_stream)); +#else + zl_stream *stream; + png->zs = png_alloc(sizeof(zl_stream)); +#endif + + stream = png->zs; + + if(!stream) + return PNG_MEMORY_ERROR; + + + +#if USE_ZLIB + memset(stream, 0, sizeof(z_stream)); + if(inflateInit(stream) != Z_OK) + return PNG_ZLIB_ERROR; +#else + memset(stream, 0, sizeof(zl_stream)); + if(z_inflateInit(stream) != Z_OK) + return PNG_ZLIB_ERROR; +#endif + + stream->next_out = png->png_data; + stream->avail_out = png->png_datalen; + + return PNG_NO_ERROR; +} + +static int png_end_deflate(png_t* png) +{ + z_stream *stream = png->zs; + + if(!stream) + return PNG_MEMORY_ERROR; + + deflateEnd(stream); + + png_free(png->zs); + + return PNG_NO_ERROR; +} + +static int png_end_inflate(png_t* png) +{ +#if USE_ZLIB + z_stream *stream = png->zs; +#else + zl_stream *stream = png->zs; +#endif + + if(!stream) + return PNG_MEMORY_ERROR; + +#if USE_ZLIB + if(inflateEnd(stream) != Z_OK) +#else + if(z_inflateEnd(stream) != Z_OK) +#endif + { + printf("ZLIB says: %s\n", stream->msg); + return PNG_ZLIB_ERROR; + } + + png_free(png->zs); + + return PNG_NO_ERROR; +} + +static int png_inflate(png_t* png, char* data, int len) +{ + int result; +#if USE_ZLIB + z_stream *stream = png->zs; +#else + zl_stream *stream = png->zs; +#endif + + if(!stream) + return PNG_MEMORY_ERROR; + + stream->next_in = (unsigned char*)data; + stream->avail_in = len; + +#if USE_ZLIB + result = inflate(stream, Z_SYNC_FLUSH); +#else + result = z_inflate(stream); +#endif + + if(result != Z_STREAM_END && result != Z_OK) + { + printf("%s\n", stream->msg); + return PNG_ZLIB_ERROR; + } + + if(stream->avail_in != 0) + return PNG_ZLIB_ERROR; + + return PNG_NO_ERROR; +} + +static int png_deflate(png_t* png, char* outdata, int outlen, int *outwritten) +{ + int result; + + z_stream *stream = png->zs; + + + if(!stream) + return PNG_MEMORY_ERROR; + + stream->next_out = (unsigned char*)outdata; + stream->avail_out = outlen; + + result = deflate(stream, Z_SYNC_FLUSH); + + *outwritten = outlen - stream->avail_out; + + if(result != Z_STREAM_END && result != Z_OK) + { + printf("%s\n", stream->msg); + return PNG_ZLIB_ERROR; + } + + return result; +} + +static int png_write_idats(png_t* png, unsigned char* data) +{ + unsigned char *chunk; + unsigned long written; + unsigned long crc; + unsigned size = png->width * png->height * png->bpp + png->height; + + (void)png_init_deflate; + (void)png_end_deflate; + (void)png_deflate; + + chunk = png_alloc(size); + memcpy(chunk, "IDAT", 4); + + written = size; + compress(chunk+4, &written, data, size); + + crc = crc32(0L, Z_NULL, 0); + crc = crc32(crc, chunk, written+4); + set_ul(chunk+written+4, crc); + file_write_ul(png, written); + file_write(png, chunk, 1, written+8); + png_free(chunk); + + file_write_ul(png, 0); + file_write(png, "IEND", 1, 4); + crc = crc32(0L, (const unsigned char *)"IEND", 4); + file_write_ul(png, crc); + + return PNG_NO_ERROR; +} + +static int png_read_idat(png_t* png, unsigned firstlen) +{ + unsigned type = 0; + char *chunk; + int result; + unsigned length = firstlen; + unsigned old_len = length; + +#if DO_CRC_CHECKS + unsigned orig_crc; + unsigned calc_crc; +#endif + + chunk = png_alloc(firstlen); + + result = png_init_inflate(png); + + if(result != PNG_NO_ERROR) + { + png_end_inflate(png); + png_free(chunk); + return result; + } + + do + { + if(file_read(png, chunk, 1, length) != length) + { + png_end_inflate(png); + png_free(chunk); + return PNG_FILE_ERROR; + } + +#if DO_CRC_CHECKS + calc_crc = crc32(0L, Z_NULL, 0); + calc_crc = crc32(calc_crc, (unsigned char*)"IDAT", 4); + calc_crc = crc32(calc_crc, (unsigned char*)chunk, length); + + file_read_ul(png, &orig_crc); + + if(orig_crc != calc_crc) + { + result = PNG_CRC_ERROR; + break; + } +#else + file_read_ul(png); +#endif + + result = png_inflate(png, chunk, length); + + if(result != PNG_NO_ERROR) break; + + file_read_ul(png, &length); + + if(length > old_len) + { + png_free(chunk); + chunk = png_alloc(length); + old_len = length; + } + + if(file_read(png, &type, 1, 4) != 4) + { + result = PNG_FILE_ERROR; + break; + } + + }while(type == *(unsigned int*)"IDAT"); + + if(type == *(unsigned int*)"IEND") + result = PNG_DONE; + + png_free(chunk); + png_end_inflate(png); + + return result; +} + +static int png_process_chunk(png_t* png) +{ + int result = PNG_NO_ERROR; + unsigned type; + unsigned length; + + file_read_ul(png, &length); + + if(file_read(png, &type, 1, 4) != 4) + return PNG_FILE_ERROR; + + if(type == *(unsigned int*)"IDAT") /* if we found an idat, all other idats should be followed with no other chunks in between */ + { + png->png_datalen = png->width * png->height * png->bpp + png->height; + png->png_data = png_alloc(png->png_datalen); + + if(!png->png_data) + return PNG_MEMORY_ERROR; + + return png_read_idat(png, length); + } + else if(type == *(unsigned int*)"IEND") + { + return PNG_DONE; + } + else + { + file_read(png, 0, 1, length + 4); /* unknown chunk */ + } + + return result; +} + +static void png_filter_sub(int stride, unsigned char* in, unsigned char* out, int len) +{ + int i; + unsigned char a = 0; + + for(i = 0; i < len; i++) + { + if(i >= stride) + a = out[i - stride]; + + out[i] = in[i] + a; + } +} + +static void png_filter_up(int stride, unsigned char* in, unsigned char* out, unsigned char* prev_line, int len) +{ + int i; + + if(prev_line) + { + for(i = 0; i < len; i++) + out[i] = in[i] + prev_line[i]; + } + else + memcpy(out, in, len); +} + +static void png_filter_average(int stride, unsigned char* in, unsigned char* out, unsigned char* prev_line, int len) +{ + int i; + unsigned char a = 0; + unsigned char b = 0; + unsigned int sum = 0; + + for(i = 0; i < len; i++) + { + if(prev_line) + b = prev_line[i]; + + if(i >= stride) + a = out[i - stride]; + + sum = a; + sum += b; + + out[i] = (char)(in[i] + sum/2); + } +} + +static unsigned char png_paeth(unsigned char a, unsigned char b, unsigned char c) +{ + int p = (int)a + b - c; + int pa = abs(p - a); + int pb = abs(p - b); + int pc = abs(p - c); + + int pr; + + if(pa <= pb && pa <= pc) + pr = a; + else if(pb <= pc) + pr = b; + else + pr = c; + + return (char)pr; +} + +static void png_filter_paeth(int stride, unsigned char* in, unsigned char* out, unsigned char* prev_line, int len) +{ + int i; + unsigned char a; + unsigned char b; + unsigned char c; + + for(i = 0; i < len; i++) + { + if(prev_line && i >= stride) + { + a = out[i - stride]; + b = prev_line[i]; + c = prev_line[i - stride]; + } + else + { + if(prev_line) + b = prev_line[i]; + else + b = 0; + + if(i >= stride) + a = out[i - stride]; + else + a = 0; + + c = 0; + } + + out[i] = in[i] + png_paeth(a, b, c); + } +} + +static int png_filter(png_t* png, unsigned char* data) +{ + + + return PNG_NO_ERROR; +} + +static int png_unfilter(png_t* png, unsigned char* data) +{ + unsigned i; + unsigned pos = 0; + unsigned outpos = 0; + unsigned char *filtered = png->png_data; + + int stride = png->bpp; + + while(pos < png->png_datalen) + { + unsigned char filter = filtered[pos]; + + pos++; + + if(png->depth == 16) + { + for(i = 0; i < png->width * stride; i+=2) + { + *(short*)(filtered+pos+i) = (filtered[pos+i] << 8) | filtered[pos+i+1]; + } + } + + switch(filter) + { + case 0: /* none */ + memcpy(data+outpos, filtered+pos, png->width * stride); + break; + case 1: /* sub */ + png_filter_sub(stride, filtered+pos, data+outpos, png->width * stride); + break; + case 2: /* up */ + if(outpos) + png_filter_up(stride, filtered+pos, data+outpos, data + outpos - (png->width*stride), png->width*stride); + else + png_filter_up(stride, filtered+pos, data+outpos, 0, png->width*stride); + break; + case 3: /* average */ + if(outpos) + png_filter_average(stride, filtered+pos, data+outpos, data + outpos - (png->width*stride), png->width*stride); + else + png_filter_average(stride, filtered+pos, data+outpos, 0, png->width*stride); + break; + case 4: /* paeth */ + if(outpos) + png_filter_paeth(stride, filtered+pos, data+outpos, data + outpos - (png->width*stride), png->width*stride); + else + png_filter_paeth(stride, filtered+pos, data+outpos, 0, png->width*stride); + break; + default: + return PNG_UNKNOWN_FILTER; + } + + outpos += png->width * stride; + pos += png->width * stride; + } + + return PNG_NO_ERROR; +} + +int png_get_data(png_t* png, unsigned char* data) +{ + int result = PNG_NO_ERROR; + + while(result == PNG_NO_ERROR) + { + result = png_process_chunk(png); + } + + if(result != PNG_DONE) + { + png_free(png->png_data); + return result; + } + + result = png_unfilter(png, data); + + png_free(png->png_data); + + return result; +} + +int png_set_data(png_t* png, unsigned width, unsigned height, char depth, int color, unsigned char* data) +{ + int i; + unsigned char *filtered; + png->width = width; + png->height = height; + png->depth = depth; + png->color_type = color; + png->bpp = png_get_bpp(png); + + filtered = png_alloc(width * height * png->bpp + height); + + for(i = 0; i < png->height; i++) + { + filtered[i*png->width*png->bpp+i] = 0; + memcpy(&filtered[i*png->width*png->bpp+i+1], data + i * png->width*png->bpp, png->width*png->bpp); + } + + png_filter(png, filtered); + png_write_ihdr(png); + png_write_idats(png, filtered); + + png_free(filtered); + return PNG_NO_ERROR; +} + + +char* png_error_string(int error) +{ + switch(error) + { + case PNG_NO_ERROR: + return "No error"; + case PNG_FILE_ERROR: + return "Unknown file error."; + case PNG_HEADER_ERROR: + return "No PNG header found. Are you sure this is a PNG?"; + case PNG_IO_ERROR: + return "Failure while reading file."; + case PNG_EOF_ERROR: + return "Reached end of file."; + case PNG_CRC_ERROR: + return "CRC or chunk length error."; + case PNG_MEMORY_ERROR: + return "Could not allocate memory."; + case PNG_ZLIB_ERROR: + return "zlib reported an error."; + case PNG_UNKNOWN_FILTER: + return "Unknown filter method used in scanline."; + case PNG_DONE: + return "PNG done"; + case PNG_NOT_SUPPORTED: + return "The PNG is unsupported by pnglite, too bad for you!"; + case PNG_WRONG_ARGUMENTS: + return "Wrong combination of arguments passed to png_open. You must use either a read_function or supply a file pointer to use."; + default: + return "Unknown error."; + }; +} diff --git a/3rdparty/openctm/tools/pnglite/pnglite.h b/3rdparty/openctm/tools/pnglite/pnglite.h new file mode 100644 index 000000000..f464c46be --- /dev/null +++ b/3rdparty/openctm/tools/pnglite/pnglite.h @@ -0,0 +1,227 @@ +/* pnglite.h - Interface for pnglite library + Copyright (c) 2007 Daniel Karling + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + + Daniel Karling + daniel.karling@gmail.com + */ + + +#ifndef _PNGLITE_H_ +#define _PNGLITE_H_ + +#ifdef __cplusplus +extern "C"{ +#endif + +/* + Enumerations for pnglite. + Negative numbers are error codes and 0 and up are okay responses. +*/ + +enum +{ + PNG_DONE = 1, + PNG_NO_ERROR = 0, + PNG_FILE_ERROR = -1, + PNG_HEADER_ERROR = -2, + PNG_IO_ERROR = -3, + PNG_EOF_ERROR = -4, + PNG_CRC_ERROR = -5, + PNG_MEMORY_ERROR = -6, + PNG_ZLIB_ERROR = -7, + PNG_UNKNOWN_FILTER = -8, + PNG_NOT_SUPPORTED = -9, + PNG_WRONG_ARGUMENTS = -10 +}; + +/* + The five different kinds of color storage in PNG files. +*/ + +enum +{ + PNG_GREYSCALE = 0, + PNG_TRUECOLOR = 2, + PNG_INDEXED = 3, + PNG_GREYSCALE_ALPHA = 4, + PNG_TRUECOLOR_ALPHA = 6 +}; + +/* + Typedefs for callbacks. +*/ + +typedef unsigned (*png_write_callback_t)(void* input, size_t size, size_t numel, void* user_pointer); +typedef unsigned (*png_read_callback_t)(void* output, size_t size, size_t numel, void* user_pointer); +typedef void (*png_free_t)(void* p); +typedef void * (*png_alloc_t)(size_t s); + +typedef struct +{ + void* zs; /* pointer to z_stream */ + png_read_callback_t read_fun; + png_write_callback_t write_fun; + void* user_pointer; + + unsigned char* png_data; + unsigned png_datalen; + + unsigned width; + unsigned height; + unsigned char depth; + unsigned char color_type; + unsigned char compression_method; + unsigned char filter_method; + unsigned char interlace_method; + unsigned char bpp; +}png_t; + +/* + Function: png_init + + This function initializes pnglite. The parameters can be used to set your own memory allocation routines following these formats: + + > void* (*custom_alloc)(size_t s) + > void (*custom_free)(void* p) + Parameters: + pngalloc - Pointer to custom allocation routine. If 0 is passed, malloc from libc will be used. + pngfree - Pointer to custom free routine. If 0 is passed, free from libc will be used. + + Returns: + Always returns PNG_NO_ERROR. +*/ + +int png_init(png_alloc_t pngalloc, png_free_t pngfree); + +/* + Function: png_open_file + + This function is used to open a png file with the internal file IO system. This function should be used instead of + png_open if no custom read function is used. + + Parameters: + png - Empty png_t struct. + filename - Filename of the file to be opened. + + Returns: + PNG_NO_ERROR on success, otherwise an error code. +*/ + +int png_open_file(png_t *png, const char* filename); + +int png_open_file_read(png_t *png, const char* filename); +int png_open_file_write(png_t *png, const char* filename); + +/* + Function: png_open + + This function reads or writes a png from/to the specified callback. The callbacks should be of the format: + + > size_t (*png_write_callback_t)(void* input, size_t size, size_t numel, void* user_pointer); + > size_t (*png_read_callback_t)(void* output, size_t size, size_t numel, void* user_pointer). + + Only one callback has to be specified. The read callback in case of PNG reading, otherwise the write callback. + + Writing: + The callback will be called like fwrite. + + Reading: + The callback will be called each time pnglite needs more data. The callback should read as much data as requested, + or return 0. This should always be possible if the PNG is sane. If the output-buffer is a null-pointer the callback + should only skip ahead the specified number of elements. If the callback is a null-pointer the user_pointer will be + treated as a file pointer (use png_open_file instead). + + Parameters: + png - png_t struct + read_fun - Callback function for reading. + user_pointer - User pointer to be passed to read_fun. + + Returns: + PNG_NO_ERROR on success, otherwise an error code. +*/ + +int png_open(png_t* png, png_read_callback_t read_fun, void* user_pointer); + +int png_open_read(png_t* png, png_read_callback_t read_fun, void* user_pointer); +int png_open_write(png_t* png, png_write_callback_t write_fun, void* user_pointer); + +/* + Function: png_print_info + + This function prints some info about the opened png file to stdout. + + Parameters: + png - png struct to get info from. +*/ + +void png_print_info(png_t* png); + +/* + Function: png_error_string + + This function translates an error code to a human readable string. + + Parameters: + error - Error code. + + Returns: + Pointer to string. +*/ + +char* png_error_string(int error); + +/* + Function: png_get_data + + This function decodes the opened png file and stores the result in data. data should be big enough to hold the decoded png. Required size will be: + + > width*height*(bytes per pixel) + + Parameters: + data - Where to store result. + + Returns: + PNG_NO_ERROR on success, otherwise an error code. +*/ + +int png_get_data(png_t* png, unsigned char* data); + +int png_set_data(png_t* png, unsigned width, unsigned height, char depth, int color, unsigned char* data); + +/* + Function: png_close_file + + Closes an open png file pointer. Should only be used when the png has been opened with png_open_file. + + Parameters: + png - png to close. + + Returns: + PNG_NO_ERROR +*/ + +int png_close_file(png_t* png); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/3rdparty/openctm/tools/rply/LICENSE b/3rdparty/openctm/tools/rply/LICENSE new file mode 100644 index 000000000..02e7c5f38 --- /dev/null +++ b/3rdparty/openctm/tools/rply/LICENSE @@ -0,0 +1,20 @@ +RPly 1.01 license +Copyright © 2003-2005 Diego Nehab. + +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. diff --git a/3rdparty/openctm/tools/rply/rply.c b/3rdparty/openctm/tools/rply/rply.c new file mode 100644 index 000000000..369c23525 --- /dev/null +++ b/3rdparty/openctm/tools/rply/rply.c @@ -0,0 +1,1497 @@ +/* ---------------------------------------------------------------------- + * RPly library, read/write PLY files + * Diego Nehab, Princeton University + * http://www.cs.princeton.edu/~diego/professional/rply + * + * This library is distributed under the MIT License. See notice + * at the end of this file. + * ---------------------------------------------------------------------- */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "rply.h" + +/* ---------------------------------------------------------------------- + * Constants + * ---------------------------------------------------------------------- */ +#define WORDSIZE 256 +#define LINESIZE 1024 +#define BUFFERSIZE (8*1024) + +typedef enum e_ply_io_mode_ { + PLY_READ, + PLY_WRITE +} e_ply_io_mode; + +static const char *const ply_storage_mode_list[] = { + "binary_big_endian", "binary_little_endian", "ascii", NULL +}; /* order matches e_ply_storage_mode enum */ + +static const char *const ply_type_list[] = { + "int8", "uint8", "int16", "uint16", + "int32", "uint32", "float32", "float64", + "char", "uchar", "short", "ushort", + "int", "uint", "float", "double", + "list", NULL +}; /* order matches e_ply_type enum */ + +/* ---------------------------------------------------------------------- + * Property reading callback argument + * + * element: name of element being processed + * property: name of property being processed + * nelements: number of elements of this kind in file + * instance_index: index current element of this kind being processed + * length: number of values in current list (or 1 for scalars) + * value_index: index of current value int this list (or 0 for scalars) + * value: value of property + * pdata/idata: user data defined with ply_set_cb + * + * Returns handle to ply file if succesful, NULL otherwise. + * ---------------------------------------------------------------------- */ +typedef struct t_ply_argument_ { + p_ply_element element; + long instance_index; + p_ply_property property; + long length, value_index; + double value; + void *pdata; + long idata; +} t_ply_argument; + +/* ---------------------------------------------------------------------- + * Property information + * + * name: name of this property + * type: type of this property (list or type of scalar value) + * length_type, value_type: type of list property count and values + * read_cb: function to be called when this property is called + * + * Returns 1 if should continue processing file, 0 if should abort. + * ---------------------------------------------------------------------- */ +typedef struct t_ply_property_ { + char name[WORDSIZE]; + e_ply_type type, value_type, length_type; + p_ply_read_cb read_cb; + void *pdata; + long idata; +} t_ply_property; + +/* ---------------------------------------------------------------------- + * Element information + * + * name: name of this property + * ninstances: number of elements of this type in file + * property: property descriptions for this element + * nproperty: number of properties in this element + * + * Returns 1 if should continue processing file, 0 if should abort. + * ---------------------------------------------------------------------- */ +typedef struct t_ply_element_ { + char name[WORDSIZE]; + long ninstances; + p_ply_property property; + long nproperties; +} t_ply_element; + +/* ---------------------------------------------------------------------- + * Input/output driver + * + * Depending on file mode, different functions are used to read/write + * property fields. The drivers make it transparent to read/write in ascii, + * big endian or little endian cases. + * ---------------------------------------------------------------------- */ +typedef int (*p_ply_ihandler)(p_ply ply, double *value); +typedef int (*p_ply_ichunk)(p_ply ply, void *anydata, size_t size); +typedef struct t_ply_idriver_ { + p_ply_ihandler ihandler[16]; + p_ply_ichunk ichunk; + const char *name; +} t_ply_idriver; +typedef t_ply_idriver *p_ply_idriver; + +typedef int (*p_ply_ohandler)(p_ply ply, double value); +typedef int (*p_ply_ochunk)(p_ply ply, void *anydata, size_t size); +typedef struct t_ply_odriver_ { + p_ply_ohandler ohandler[16]; + p_ply_ochunk ochunk; + const char *name; +} t_ply_odriver; +typedef t_ply_odriver *p_ply_odriver; + +/* ---------------------------------------------------------------------- + * Ply file handle. + * + * io_mode: read or write (from e_ply_io_mode) + * storage_mode: mode of file associated with handle (from e_ply_storage_mode) + * element: elements description for this file + * nelement: number of different elements in file + * comment: comments for this file + * ncomments: number of comments in file + * obj_info: obj_info items for this file + * nobj_infos: number of obj_info items in file + * fp: file pointer associated with ply file + * c: last character read from ply file + * buffer: last word/chunck of data read from ply file + * buffer_first, buffer_last: interval of untouched good data in buffer + * buffer_token: start of parsed token (line or word) in buffer + * idriver, odriver: input driver used to get property fields from file + * argument: storage space for callback arguments + * welement, wproperty: element/property type being written + * winstance_index: index of instance of current element being written + * wvalue_index: index of list property value being written + * wlength: number of values in list property being written + * error_cb: callback for error messages + * ---------------------------------------------------------------------- */ +typedef struct t_ply_ { + e_ply_io_mode io_mode; + e_ply_storage_mode storage_mode; + p_ply_element element; + long nelements; + char *comment; + long ncomments; + char *obj_info; + long nobj_infos; + FILE *fp; + int c; + char buffer[BUFFERSIZE]; + size_t buffer_first, buffer_token, buffer_last; + p_ply_idriver idriver; + p_ply_odriver odriver; + t_ply_argument argument; + long welement, wproperty; + long winstance_index, wvalue_index, wlength; + p_ply_error_cb error_cb; +} t_ply; + +/* ---------------------------------------------------------------------- + * I/O functions and drivers + * ---------------------------------------------------------------------- */ +static t_ply_idriver ply_idriver_ascii; +static t_ply_idriver ply_idriver_binary; +static t_ply_idriver ply_idriver_binary_reverse; +static t_ply_odriver ply_odriver_ascii; +static t_ply_odriver ply_odriver_binary; +static t_ply_odriver ply_odriver_binary_reverse; + +static int ply_read_word(p_ply ply); +static int ply_check_word(p_ply ply); +static int ply_read_line(p_ply ply); +static int ply_check_line(p_ply ply); +static int ply_read_chunk(p_ply ply, void *anybuffer, size_t size); +static int ply_read_chunk_reverse(p_ply ply, void *anybuffer, size_t size); +static int ply_write_chunk(p_ply ply, void *anybuffer, size_t size); +static int ply_write_chunk_reverse(p_ply ply, void *anybuffer, size_t size); +static void ply_reverse(void *anydata, size_t size); + +/* ---------------------------------------------------------------------- + * String functions + * ---------------------------------------------------------------------- */ +static int ply_find_string(const char *item, const char* const list[]); +static p_ply_element ply_find_element(p_ply ply, const char *name); +static p_ply_property ply_find_property(p_ply_element element, + const char *name); + +/* ---------------------------------------------------------------------- + * Header parsing + * ---------------------------------------------------------------------- */ +static int ply_read_header_format(p_ply ply); +static int ply_read_header_comment(p_ply ply); +static int ply_read_header_obj_info(p_ply ply); +static int ply_read_header_property(p_ply ply); +static int ply_read_header_element(p_ply ply); + +/* ---------------------------------------------------------------------- + * Error handling + * ---------------------------------------------------------------------- */ +static void ply_error_cb(const char *message); +static void ply_error(p_ply ply, const char *fmt, ...); + +/* ---------------------------------------------------------------------- + * Memory allocation and initialization + * ---------------------------------------------------------------------- */ +static void ply_init(p_ply ply); +static void ply_element_init(p_ply_element element); +static void ply_property_init(p_ply_property property); +static p_ply ply_alloc(void); +static p_ply_element ply_grow_element(p_ply ply); +static p_ply_property ply_grow_property(p_ply ply, p_ply_element element); +static void *ply_grow_array(p_ply ply, void **pointer, long *nmemb, long size); + +/* ---------------------------------------------------------------------- + * Special functions + * ---------------------------------------------------------------------- */ +static e_ply_storage_mode ply_arch_endian(void); +static int ply_type_check(void); + +/* ---------------------------------------------------------------------- + * Auxiliary read functions + * ---------------------------------------------------------------------- */ +static int ply_read_element(p_ply ply, p_ply_element element, + p_ply_argument argument); +static int ply_read_property(p_ply ply, p_ply_element element, + p_ply_property property, p_ply_argument argument); +static int ply_read_list_property(p_ply ply, p_ply_element element, + p_ply_property property, p_ply_argument argument); +static int ply_read_scalar_property(p_ply ply, p_ply_element element, + p_ply_property property, p_ply_argument argument); + + +/* ---------------------------------------------------------------------- + * Buffer support functions + * ---------------------------------------------------------------------- */ +/* pointers to tokenized word and line in buffer */ +#define BWORD(p) (p->buffer + p->buffer_token) +#define BLINE(p) (p->buffer + p->buffer_token) + +/* pointer to start of untouched bytes in buffer */ +#define BFIRST(p) (p->buffer + p->buffer_first) + +/* number of bytes untouched in buffer */ +#define BSIZE(p) (p->buffer_last - p->buffer_first) + +/* consumes data from buffer */ +#define BSKIP(p, s) (p->buffer_first += s) + +/* refills the buffer */ +static int BREFILL(p_ply ply) { + /* move untouched data to beginning of buffer */ + size_t size = BSIZE(ply); + memmove(ply->buffer, BFIRST(ply), size); + ply->buffer_last = size; + ply->buffer_first = ply->buffer_token = 0; + /* fill remaining with new data */ + size = fread(ply->buffer+size, 1, BUFFERSIZE-size-1, ply->fp); + /* place sentinel so we can use str* functions with buffer */ + ply->buffer[BUFFERSIZE-1] = '\0'; + /* check if read failed */ + if (size <= 0) return 0; + /* increase size to account for new data */ + ply->buffer_last += size; + return 1; +} + +/* ---------------------------------------------------------------------- + * Exported functions + * ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + * Read support functions + * ---------------------------------------------------------------------- */ +p_ply ply_open(const char *name, p_ply_error_cb error_cb) { + char magic[5] = " "; + FILE *fp = NULL; + p_ply ply = NULL; + if (error_cb == NULL) error_cb = ply_error_cb; + if (!ply_type_check()) { + error_cb("Incompatible type system"); + return NULL; + } + assert(name); + fp = fopen(name, "rb"); + if (!fp) { + error_cb("Unable to open file"); + return NULL; + } + if (fread(magic, 1, 4, fp) < 4) { + error_cb("Error reading from file"); + fclose(fp); + return NULL; + } + if (strcmp(magic, "ply\n")) { + fclose(fp); + error_cb("Not a PLY file. Expected magic number 'ply\\n'"); + return NULL; + } + ply = ply_alloc(); + if (!ply) { + error_cb("Out of memory"); + fclose(fp); + return NULL; + } + ply->fp = fp; + ply->io_mode = PLY_READ; + ply->error_cb = error_cb; + return ply; +} + +int ply_read_header(p_ply ply) { + assert(ply && ply->fp && ply->io_mode == PLY_READ); + if (!ply_read_word(ply)) return 0; + /* parse file format */ + if (!ply_read_header_format(ply)) { + ply_error(ply, "Invalid file format"); + return 0; + } + /* parse elements, comments or obj_infos until the end of header */ + while (strcmp(BWORD(ply), "end_header")) { + if (!ply_read_header_comment(ply) && + !ply_read_header_element(ply) && + !ply_read_header_obj_info(ply)) { + ply_error(ply, "Unexpected token '%s'", BWORD(ply)); + return 0; + } + } + return 1; +} + +long ply_set_read_cb(p_ply ply, const char *element_name, + const char* property_name, p_ply_read_cb read_cb, + void *pdata, long idata) { + p_ply_element element = NULL; + p_ply_property property = NULL; + assert(ply && element_name && property_name); + element = ply_find_element(ply, element_name); + if (!element) return 0; + property = ply_find_property(element, property_name); + if (!property) return 0; + property->read_cb = read_cb; + property->pdata = pdata; + property->idata = idata; + return (int) element->ninstances; +} + +int ply_read(p_ply ply) { + long i; + p_ply_argument argument; + assert(ply && ply->fp && ply->io_mode == PLY_READ); + argument = &ply->argument; + /* for each element type */ + for (i = 0; i < ply->nelements; i++) { + p_ply_element element = &ply->element[i]; + argument->element = element; + if (!ply_read_element(ply, element, argument)) + return 0; + } + return 1; +} + +/* ---------------------------------------------------------------------- + * Write support functions + * ---------------------------------------------------------------------- */ +p_ply ply_create(const char *name, e_ply_storage_mode storage_mode, + p_ply_error_cb error_cb) { + FILE *fp = NULL; + p_ply ply = NULL; + if (error_cb == NULL) error_cb = ply_error_cb; + if (!ply_type_check()) { + error_cb("Incompatible type system"); + return NULL; + } + assert(name && storage_mode <= PLY_DEFAULT); + fp = fopen(name, "wb"); + if (!fp) { + error_cb("Unable to create file"); + return NULL; + } + ply = ply_alloc(); + if (!ply) { + fclose(fp); + error_cb("Out of memory"); + return NULL; + } + ply->io_mode = PLY_WRITE; + if (storage_mode == PLY_DEFAULT) storage_mode = ply_arch_endian(); + if (storage_mode == PLY_ASCII) ply->odriver = &ply_odriver_ascii; + else if (storage_mode == ply_arch_endian()) + ply->odriver = &ply_odriver_binary; + else ply->odriver = &ply_odriver_binary_reverse; + ply->storage_mode = storage_mode; + ply->fp = fp; + ply->error_cb = error_cb; + return ply; +} + +int ply_add_element(p_ply ply, const char *name, long ninstances) { + p_ply_element element = NULL; + assert(ply && ply->fp && ply->io_mode == PLY_WRITE); + assert(name && strlen(name) < WORDSIZE && ninstances >= 0); + if (strlen(name) >= WORDSIZE || ninstances < 0) { + ply_error(ply, "Invalid arguments"); + return 0; + } + element = ply_grow_element(ply); + if (!element) return 0; + strcpy(element->name, name); + element->ninstances = ninstances; + return 1; +} + +int ply_add_scalar_property(p_ply ply, const char *name, e_ply_type type) { + p_ply_element element = NULL; + p_ply_property property = NULL; + assert(ply && ply->fp && ply->io_mode == PLY_WRITE); + assert(name && strlen(name) < WORDSIZE); + assert(type < PLY_LIST); + if (strlen(name) >= WORDSIZE || type >= PLY_LIST) { + ply_error(ply, "Invalid arguments"); + return 0; + } + element = &ply->element[ply->nelements-1]; + property = ply_grow_property(ply, element); + if (!property) return 0; + strcpy(property->name, name); + property->type = type; + return 1; +} + +int ply_add_list_property(p_ply ply, const char *name, + e_ply_type length_type, e_ply_type value_type) { + p_ply_element element = NULL; + p_ply_property property = NULL; + assert(ply && ply->fp && ply->io_mode == PLY_WRITE); + assert(name && strlen(name) < WORDSIZE); + if (strlen(name) >= WORDSIZE) { + ply_error(ply, "Invalid arguments"); + return 0; + } + assert(length_type < PLY_LIST); + assert(value_type < PLY_LIST); + if (length_type >= PLY_LIST || value_type >= PLY_LIST) { + ply_error(ply, "Invalid arguments"); + return 0; + } + element = &ply->element[ply->nelements-1]; + property = ply_grow_property(ply, element); + if (!property) return 0; + strcpy(property->name, name); + property->type = PLY_LIST; + property->length_type = length_type; + property->value_type = value_type; + return 1; +} + +int ply_add_property(p_ply ply, const char *name, e_ply_type type, + e_ply_type length_type, e_ply_type value_type) { + if (type == PLY_LIST) + return ply_add_list_property(ply, name, length_type, value_type); + else + return ply_add_scalar_property(ply, name, type); +} + +int ply_add_comment(p_ply ply, const char *comment) { + char *new_comment = NULL; + assert(ply && comment && strlen(comment) < LINESIZE); + if (!comment || strlen(comment) >= LINESIZE) { + ply_error(ply, "Invalid arguments"); + return 0; + } + new_comment = (char *) ply_grow_array(ply, (void **) &ply->comment, + &ply->ncomments, LINESIZE); + if (!new_comment) return 0; + strcpy(new_comment, comment); + return 1; +} + +int ply_add_obj_info(p_ply ply, const char *obj_info) { + char *new_obj_info = NULL; + assert(ply && obj_info && strlen(obj_info) < LINESIZE); + if (!obj_info || strlen(obj_info) >= LINESIZE) { + ply_error(ply, "Invalid arguments"); + return 0; + } + new_obj_info = (char *) ply_grow_array(ply, (void **) &ply->obj_info, + &ply->nobj_infos, LINESIZE); + if (!new_obj_info) return 0; + strcpy(new_obj_info, obj_info); + return 1; +} + +int ply_write_header(p_ply ply) { + long i, j; + assert(ply && ply->fp && ply->io_mode == PLY_WRITE); + assert(ply->element || ply->nelements == 0); + assert(!ply->element || ply->nelements > 0); + if (fprintf(ply->fp, "ply\nformat %s 1.0\n", + ply_storage_mode_list[ply->storage_mode]) <= 0) goto error; + for (i = 0; i < ply->ncomments; i++) + if (fprintf(ply->fp, "comment %s\n", ply->comment + LINESIZE*i) <= 0) + goto error; + for (i = 0; i < ply->nobj_infos; i++) + if (fprintf(ply->fp, "obj_info %s\n", ply->obj_info + LINESIZE*i) <= 0) + goto error; + for (i = 0; i < ply->nelements; i++) { + p_ply_element element = &ply->element[i]; + assert(element->property || element->nproperties == 0); + assert(!element->property || element->nproperties > 0); + if (fprintf(ply->fp, "element %s %ld\n", element->name, + element->ninstances) <= 0) goto error; + for (j = 0; j < element->nproperties; j++) { + p_ply_property property = &element->property[j]; + if (property->type == PLY_LIST) { + if (fprintf(ply->fp, "property list %s %s %s\n", + ply_type_list[property->length_type], + ply_type_list[property->value_type], + property->name) <= 0) goto error; + } else { + if (fprintf(ply->fp, "property %s %s\n", + ply_type_list[property->type], + property->name) <= 0) goto error; + } + } + } + return fprintf(ply->fp, "end_header\n") > 0; +error: + ply_error(ply, "Error writing to file"); + return 0; +} + +int ply_write(p_ply ply, double value) { + p_ply_element element = NULL; + p_ply_property property = NULL; + int type = -1; + int breakafter = 0; + if (ply->welement > ply->nelements) return 0; + element = &ply->element[ply->welement]; + if (ply->wproperty > element->nproperties) return 0; + property = &element->property[ply->wproperty]; + if (property->type == PLY_LIST) { + if (ply->wvalue_index == 0) { + type = property->length_type; + ply->wlength = (long) value; + } else type = property->value_type; + } else { + type = property->type; + ply->wlength = 0; + } + if (!ply->odriver->ohandler[type](ply, value)) { + ply_error(ply, "Failed writing %s of %s %d (%s: %s)", + property->name, element->name, + ply->winstance_index, + ply->odriver->name, ply_type_list[type]); + return 0; + } + ply->wvalue_index++; + if (ply->wvalue_index > ply->wlength) { + ply->wvalue_index = 0; + ply->wproperty++; + } + if (ply->wproperty >= element->nproperties) { + ply->wproperty = 0; + ply->winstance_index++; + if (ply->storage_mode == PLY_ASCII) breakafter = 1; + } + if (ply->winstance_index >= element->ninstances) { + ply->winstance_index = 0; + ply->welement++; + } + return !breakafter || putc('\n', ply->fp) > 0; +} + +int ply_close(p_ply ply) { + long i; + assert(ply && ply->fp); + assert(ply->element || ply->nelements == 0); + assert(!ply->element || ply->nelements > 0); + /* write last chunk to file */ + if (ply->io_mode == PLY_WRITE && + fwrite(ply->buffer, 1, ply->buffer_last, ply->fp) < ply->buffer_last) { + ply_error(ply, "Error closing up"); + return 0; + } + fclose(ply->fp); + /* free all memory used by handle */ + if (ply->element) { + for (i = 0; i < ply->nelements; i++) { + p_ply_element element = &ply->element[i]; + if (element->property) free(element->property); + } + free(ply->element); + } + if (ply->obj_info) free(ply->obj_info); + if (ply->comment) free(ply->comment); + free(ply); + return 1; +} + +/* ---------------------------------------------------------------------- + * Query support functions + * ---------------------------------------------------------------------- */ +p_ply_element ply_get_next_element(p_ply ply, + p_ply_element last) { + assert(ply); + if (!last) return ply->element; + last++; + if (last < ply->element + ply->nelements) return last; + else return NULL; +} + +int ply_get_element_info(p_ply_element element, const char** name, + long *ninstances) { + assert(element); + if (name) *name = element->name; + if (ninstances) *ninstances = (long) element->ninstances; + return 1; +} + +p_ply_property ply_get_next_property(p_ply_element element, + p_ply_property last) { + assert(element); + if (!last) return element->property; + last++; + if (last < element->property + element->nproperties) return last; + else return NULL; +} + +int ply_get_property_info(p_ply_property property, const char** name, + e_ply_type *type, e_ply_type *length_type, e_ply_type *value_type) { + assert(property); + if (name) *name = property->name; + if (type) *type = property->type; + if (length_type) *length_type = property->length_type; + if (value_type) *value_type = property->value_type; + return 1; + +} + +const char *ply_get_next_comment(p_ply ply, const char *last) { + assert(ply); + if (!last) return ply->comment; + last += LINESIZE; + if (last < ply->comment + LINESIZE*ply->ncomments) return last; + else return NULL; +} + +const char *ply_get_next_obj_info(p_ply ply, const char *last) { + assert(ply); + if (!last) return ply->obj_info; + last += LINESIZE; + if (last < ply->obj_info + LINESIZE*ply->nobj_infos) return last; + else return NULL; +} + +/* ---------------------------------------------------------------------- + * Callback argument support functions + * ---------------------------------------------------------------------- */ +int ply_get_argument_element(p_ply_argument argument, + p_ply_element *element, long *instance_index) { + assert(argument); + if (!argument) return 0; + if (element) *element = argument->element; + if (instance_index) *instance_index = argument->instance_index; + return 1; +} + +int ply_get_argument_property(p_ply_argument argument, + p_ply_property *property, long *length, long *value_index) { + assert(argument); + if (!argument) return 0; + if (property) *property = argument->property; + if (length) *length = argument->length; + if (value_index) *value_index = argument->value_index; + return 1; +} + +int ply_get_argument_user_data(p_ply_argument argument, void **pdata, + long *idata) { + assert(argument); + if (!argument) return 0; + if (pdata) *pdata = argument->pdata; + if (idata) *idata = argument->idata; + return 1; +} + +double ply_get_argument_value(p_ply_argument argument) { + assert(argument); + if (!argument) return 0.0; + return argument->value; +} + +/* ---------------------------------------------------------------------- + * Internal functions + * ---------------------------------------------------------------------- */ +static int ply_read_list_property(p_ply ply, p_ply_element element, + p_ply_property property, p_ply_argument argument) { + int l; + p_ply_read_cb read_cb = property->read_cb; + p_ply_ihandler *driver = ply->idriver->ihandler; + /* get list length */ + p_ply_ihandler handler = driver[property->length_type]; + double length; + if (!handler(ply, &length)) { + ply_error(ply, "Error reading '%s' of '%s' number %d", + property->name, element->name, argument->instance_index); + return 0; + } + /* invoke callback to pass length in value field */ + argument->length = (long) length; + argument->value_index = -1; + argument->value = length; + if (read_cb && !read_cb(argument)) { + ply_error(ply, "Aborted by user"); + return 0; + } + /* read list values */ + handler = driver[property->value_type]; + /* for each value in list */ + for (l = 0; l < (long) length; l++) { + /* read value from file */ + argument->value_index = l; + if (!handler(ply, &argument->value)) { + ply_error(ply, "Error reading value number %d of '%s' of " + "'%s' number %d", l+1, property->name, + element->name, argument->instance_index); + return 0; + } + /* invoke callback to pass value */ + if (read_cb && !read_cb(argument)) { + ply_error(ply, "Aborted by user"); + return 0; + } + } + return 1; +} + +static int ply_read_scalar_property(p_ply ply, p_ply_element element, + p_ply_property property, p_ply_argument argument) { + p_ply_read_cb read_cb = property->read_cb; + p_ply_ihandler *driver = ply->idriver->ihandler; + p_ply_ihandler handler = driver[property->type]; + argument->length = 1; + argument->value_index = 0; + if (!handler(ply, &argument->value)) { + ply_error(ply, "Error reading '%s' of '%s' number %d", + property->name, element->name, argument->instance_index); + return 0; + } + if (read_cb && !read_cb(argument)) { + ply_error(ply, "Aborted by user"); + return 0; + } + return 1; +} + +static int ply_read_property(p_ply ply, p_ply_element element, + p_ply_property property, p_ply_argument argument) { + if (property->type == PLY_LIST) + return ply_read_list_property(ply, element, property, argument); + else + return ply_read_scalar_property(ply, element, property, argument); +} + +static int ply_read_element(p_ply ply, p_ply_element element, + p_ply_argument argument) { + long j, k; + /* for each element of this type */ + for (j = 0; j < element->ninstances; j++) { + argument->instance_index = j; + /* for each property */ + for (k = 0; k < element->nproperties; k++) { + p_ply_property property = &element->property[k]; + argument->property = property; + argument->pdata = property->pdata; + argument->idata = property->idata; + if (!ply_read_property(ply, element, property, argument)) + return 0; + } + } + return 1; +} + +static int ply_find_string(const char *item, const char* const list[]) { + int i; + assert(item && list); + for (i = 0; list[i]; i++) + if (!strcmp(list[i], item)) return i; + return -1; +} + +static p_ply_element ply_find_element(p_ply ply, const char *name) { + p_ply_element element; + int i, nelements; + assert(ply && name); + element = ply->element; + nelements = ply->nelements; + assert(element || nelements == 0); + assert(!element || nelements > 0); + for (i = 0; i < nelements; i++) + if (!strcmp(element[i].name, name)) return &element[i]; + return NULL; +} + +static p_ply_property ply_find_property(p_ply_element element, + const char *name) { + p_ply_property property; + int i, nproperties; + assert(element && name); + property = element->property; + nproperties = element->nproperties; + assert(property || nproperties == 0); + assert(!property || nproperties > 0); + for (i = 0; i < nproperties; i++) + if (!strcmp(property[i].name, name)) return &property[i]; + return NULL; +} + +static int ply_check_word(p_ply ply) { + if (strlen(BLINE(ply)) >= WORDSIZE) { + ply_error(ply, "Word too long"); + return 0; + } + return 1; +} + +static int ply_read_word(p_ply ply) { + size_t t = 0; + assert(ply && ply->fp && ply->io_mode == PLY_READ); + /* skip leading blanks */ + while (1) { + t = strspn(BFIRST(ply), " \n\r\t"); + /* check if all buffer was made of blanks */ + if (t >= BSIZE(ply)) { + if (!BREFILL(ply)) { + ply_error(ply, "Unexpected end of file"); + return 0; + } + } else break; + } + BSKIP(ply, t); + /* look for a space after the current word */ + t = strcspn(BFIRST(ply), " \n\r\t"); + /* if we didn't reach the end of the buffer, we are done */ + if (t < BSIZE(ply)) { + ply->buffer_token = ply->buffer_first; + BSKIP(ply, t); + *BFIRST(ply) = '\0'; + BSKIP(ply, 1); + return ply_check_word(ply); + } + /* otherwise, try to refill buffer */ + if (!BREFILL(ply)) { + ply_error(ply, "Unexpected end of file"); + return 0; + } + /* keep looking from where we left */ + t += strcspn(BFIRST(ply) + t, " \n\r\t"); + /* check if the token is too large for our buffer */ + if (t >= BSIZE(ply)) { + ply_error(ply, "Token too large"); + return 0; + } + /* we are done */ + ply->buffer_token = ply->buffer_first; + BSKIP(ply, t); + *BFIRST(ply) = '\0'; + BSKIP(ply, 1); + return ply_check_word(ply); +} + +static int ply_check_line(p_ply ply) { + if (strlen(BLINE(ply)) >= LINESIZE) { + ply_error(ply, "Line too long"); + return 0; + } + return 1; +} + +static int ply_read_line(p_ply ply) { + const char *end = NULL; + assert(ply && ply->fp && ply->io_mode == PLY_READ); + /* look for a end of line */ + end = strchr(BFIRST(ply), '\n'); + /* if we didn't reach the end of the buffer, we are done */ + if (end) { + ply->buffer_token = ply->buffer_first; + BSKIP(ply, end - BFIRST(ply)); + *BFIRST(ply) = '\0'; + BSKIP(ply, 1); + return ply_check_line(ply); + } else { + end = ply->buffer + BSIZE(ply); + /* otherwise, try to refill buffer */ + if (!BREFILL(ply)) { + ply_error(ply, "Unexpected end of file"); + return 0; + } + } + /* keep looking from where we left */ + end = strchr(end, '\n'); + /* check if the token is too large for our buffer */ + if (!end) { + ply_error(ply, "Token too large"); + return 0; + } + /* we are done */ + ply->buffer_token = ply->buffer_first; + BSKIP(ply, end - BFIRST(ply)); + *BFIRST(ply) = '\0'; + BSKIP(ply, 1); + return ply_check_line(ply); +} + +static int ply_read_chunk(p_ply ply, void *anybuffer, size_t size) { + char *buffer = (char *) anybuffer; + size_t i = 0; + assert(ply && ply->fp && ply->io_mode == PLY_READ); + assert(ply->buffer_first <= ply->buffer_last); + while (i < size) { + if (ply->buffer_first < ply->buffer_last) { + buffer[i] = ply->buffer[ply->buffer_first]; + ply->buffer_first++; + i++; + } else { + ply->buffer_first = 0; + ply->buffer_last = fread(ply->buffer, 1, BUFFERSIZE, ply->fp); + if (ply->buffer_last <= 0) return 0; + } + } + return 1; +} + +static int ply_write_chunk(p_ply ply, void *anybuffer, size_t size) { + char *buffer = (char *) anybuffer; + size_t i = 0; + assert(ply && ply->fp && ply->io_mode == PLY_WRITE); + assert(ply->buffer_last <= BUFFERSIZE); + while (i < size) { + if (ply->buffer_last < BUFFERSIZE) { + ply->buffer[ply->buffer_last] = buffer[i]; + ply->buffer_last++; + i++; + } else { + ply->buffer_last = 0; + if (fwrite(ply->buffer, 1, BUFFERSIZE, ply->fp) < BUFFERSIZE) + return 0; + } + } + return 1; +} + +static int ply_write_chunk_reverse(p_ply ply, void *anybuffer, size_t size) { + int ret = 0; + ply_reverse(anybuffer, size); + ret = ply_write_chunk(ply, anybuffer, size); + ply_reverse(anybuffer, size); + return ret; +} + +static int ply_read_chunk_reverse(p_ply ply, void *anybuffer, size_t size) { + if (!ply_read_chunk(ply, anybuffer, size)) return 0; + ply_reverse(anybuffer, size); + return 1; +} + +static void ply_reverse(void *anydata, size_t size) { + char *data = (char *) anydata; + char temp; + size_t i; + for (i = 0; i < size/2; i++) { + temp = data[i]; + data[i] = data[size-i-1]; + data[size-i-1] = temp; + } +} + +static void ply_init(p_ply ply) { + ply->c = ' '; + ply->element = NULL; + ply->nelements = 0; + ply->comment = NULL; + ply->ncomments = 0; + ply->obj_info = NULL; + ply->nobj_infos = 0; + ply->idriver = NULL; + ply->odriver = NULL; + ply->buffer[0] = '\0'; + ply->buffer_first = ply->buffer_last = ply->buffer_token = 0; + ply->welement = 0; + ply->wproperty = 0; + ply->winstance_index = 0; + ply->wlength = 0; + ply->wvalue_index = 0; +} + +static void ply_element_init(p_ply_element element) { + element->name[0] = '\0'; + element->ninstances = 0; + element->property = NULL; + element->nproperties = 0; +} + +static void ply_property_init(p_ply_property property) { + property->name[0] = '\0'; + property->type = -1; + property->length_type = -1; + property->value_type = -1; + property->read_cb = (p_ply_read_cb) NULL; + property->pdata = NULL; + property->idata = 0; +} + +static p_ply ply_alloc(void) { + p_ply ply = (p_ply) malloc(sizeof(t_ply)); + if (!ply) return NULL; + ply_init(ply); + return ply; +} + +static void *ply_grow_array(p_ply ply, void **pointer, + long *nmemb, long size) { + void *temp = *pointer; + long count = *nmemb + 1; + if (!temp) temp = malloc(count*size); + else temp = realloc(temp, count*size); + if (!temp) { + ply_error(ply, "Out of memory"); + return NULL; + } + *pointer = temp; + *nmemb = count; + return (char *) temp + (count-1) * size; +} + +static p_ply_element ply_grow_element(p_ply ply) { + p_ply_element element = NULL; + assert(ply); + assert(ply->element || ply->nelements == 0); + assert(!ply->element || ply->nelements > 0); + element = (p_ply_element) ply_grow_array(ply, (void **) &ply->element, + &ply->nelements, sizeof(t_ply_element)); + if (!element) return NULL; + ply_element_init(element); + return element; +} + +static p_ply_property ply_grow_property(p_ply ply, p_ply_element element) { + p_ply_property property = NULL; + assert(ply); + assert(element); + assert(element->property || element->nproperties == 0); + assert(!element->property || element->nproperties > 0); + property = (p_ply_property) ply_grow_array(ply, + (void **) &element->property, + &element->nproperties, sizeof(t_ply_property)); + if (!property) return NULL; + ply_property_init(property); + return property; +} + +static int ply_read_header_format(p_ply ply) { + assert(ply && ply->fp && ply->io_mode == PLY_READ); + if (strcmp(BWORD(ply), "format")) return 0; + if (!ply_read_word(ply)) return 0; + ply->storage_mode = ply_find_string(BWORD(ply), ply_storage_mode_list); + if (ply->storage_mode == (e_ply_storage_mode) (-1)) return 0; + if (ply->storage_mode == PLY_ASCII) ply->idriver = &ply_idriver_ascii; + else if (ply->storage_mode == ply_arch_endian()) + ply->idriver = &ply_idriver_binary; + else ply->idriver = &ply_idriver_binary_reverse; + if (!ply_read_word(ply)) return 0; + if (strcmp(BWORD(ply), "1.0")) return 0; + if (!ply_read_word(ply)) return 0; + return 1; +} + +static int ply_read_header_comment(p_ply ply) { + assert(ply && ply->fp && ply->io_mode == PLY_READ); + if (strcmp(BWORD(ply), "comment")) return 0; + if (!ply_read_line(ply)) return 0; + if (!ply_add_comment(ply, BLINE(ply))) return 0; + if (!ply_read_word(ply)) return 0; + return 1; +} + +static int ply_read_header_obj_info(p_ply ply) { + assert(ply && ply->fp && ply->io_mode == PLY_READ); + if (strcmp(BWORD(ply), "obj_info")) return 0; + if (!ply_read_line(ply)) return 0; + if (!ply_add_obj_info(ply, BLINE(ply))) return 0; + if (!ply_read_word(ply)) return 0; + return 1; +} + +static int ply_read_header_property(p_ply ply) { + p_ply_element element = NULL; + p_ply_property property = NULL; + /* make sure it is a property */ + if (strcmp(BWORD(ply), "property")) return 0; + element = &ply->element[ply->nelements-1]; + property = ply_grow_property(ply, element); + if (!property) return 0; + /* get property type */ + if (!ply_read_word(ply)) return 0; + property->type = ply_find_string(BWORD(ply), ply_type_list); + if (property->type == (e_ply_type) (-1)) return 0; + if (property->type == PLY_LIST) { + /* if it's a list, we need the base types */ + if (!ply_read_word(ply)) return 0; + property->length_type = ply_find_string(BWORD(ply), ply_type_list); + if (property->length_type == (e_ply_type) (-1)) return 0; + if (!ply_read_word(ply)) return 0; + property->value_type = ply_find_string(BWORD(ply), ply_type_list); + if (property->value_type == (e_ply_type) (-1)) return 0; + } + /* get property name */ + if (!ply_read_word(ply)) return 0; + strcpy(property->name, BWORD(ply)); + if (!ply_read_word(ply)) return 0; + return 1; +} + +static int ply_read_header_element(p_ply ply) { + p_ply_element element = NULL; + long dummy; + assert(ply && ply->fp && ply->io_mode == PLY_READ); + if (strcmp(BWORD(ply), "element")) return 0; + /* allocate room for new element */ + element = ply_grow_element(ply); + if (!element) return 0; + /* get element name */ + if (!ply_read_word(ply)) return 0; + strcpy(element->name, BWORD(ply)); + /* get number of elements of this type */ + if (!ply_read_word(ply)) return 0; + if (sscanf(BWORD(ply), "%ld", &dummy) != 1) { + ply_error(ply, "Expected number got '%s'", BWORD(ply)); + return 0; + } + element->ninstances = dummy; + /* get all properties for this element */ + if (!ply_read_word(ply)) return 0; + while (ply_read_header_property(ply) || + ply_read_header_comment(ply) || ply_read_header_obj_info(ply)) + /* do nothing */; + return 1; +} + +static void ply_error_cb(const char *message) { + fprintf(stderr, "RPly: %s\n", message); +} + +static void ply_error(p_ply ply, const char *fmt, ...) { + char buffer[1024]; + va_list ap; + va_start(ap, fmt); + vsprintf(buffer, fmt, ap); + va_end(ap); + ply->error_cb(buffer); +} + +static e_ply_storage_mode ply_arch_endian(void) { + unsigned long i = 1; + unsigned char *s = (unsigned char *) &i; + if (*s == 1) return PLY_LITTLE_ENDIAN; + else return PLY_BIG_ENDIAN; +} + +static int ply_type_check(void) { + assert(sizeof(char) == 1); + assert(sizeof(unsigned char) == 1); + assert(sizeof(short) == 2); + assert(sizeof(unsigned short) == 2); + assert(sizeof(int) == 4); + assert(sizeof(unsigned int) == 4); + assert(sizeof(float) == 4); + assert(sizeof(double) == 8); + if (sizeof(char) != 1) return 0; + if (sizeof(unsigned char) != 1) return 0; + if (sizeof(short) != 2) return 0; + if (sizeof(unsigned short) != 2) return 0; + if (sizeof(int) != 4) return 0; + if (sizeof(unsigned int) != 4) return 0; + if (sizeof(float) != 4) return 0; + if (sizeof(double) != 8) return 0; + return 1; +} + +/* ---------------------------------------------------------------------- + * Output handlers + * ---------------------------------------------------------------------- */ +static int oascii_int8(p_ply ply, double value) { + if (value > CHAR_MAX || value < CHAR_MIN) return 0; + return fprintf(ply->fp, "%d ", (char) value) > 0; +} + +static int oascii_uint8(p_ply ply, double value) { + if (value > UCHAR_MAX || value < 0) return 0; + return fprintf(ply->fp, "%d ", (unsigned char) value) > 0; +} + +static int oascii_int16(p_ply ply, double value) { + if (value > SHRT_MAX || value < SHRT_MIN) return 0; + return fprintf(ply->fp, "%d ", (short) value) > 0; +} + +static int oascii_uint16(p_ply ply, double value) { + if (value > USHRT_MAX || value < 0) return 0; + return fprintf(ply->fp, "%d ", (unsigned short) value) > 0; +} + +static int oascii_int32(p_ply ply, double value) { + if (value > INT_MAX || value < INT_MIN) return 0; + return fprintf(ply->fp, "%d ", (int) value) > 0; +} + +static int oascii_uint32(p_ply ply, double value) { + if (value > UINT_MAX || value < 0) return 0; + return fprintf(ply->fp, "%d ", (unsigned int) value) > 0; +} + +static int oascii_float32(p_ply ply, double value) { + if (value < -FLT_MAX || value > FLT_MAX) return 0; + return fprintf(ply->fp, "%g ", (float) value) > 0; +} + +static int oascii_float64(p_ply ply, double value) { + if (value < -DBL_MAX || value > DBL_MAX) return 0; + return fprintf(ply->fp, "%g ", value) > 0; +} + +static int obinary_int8(p_ply ply, double value) { + char int8 = (char) value; + if (value > CHAR_MAX || value < CHAR_MIN) return 0; + return ply->odriver->ochunk(ply, &int8, sizeof(int8)); +} + +static int obinary_uint8(p_ply ply, double value) { + unsigned char uint8 = (unsigned char) value; + if (value > UCHAR_MAX || value < 0) return 0; + return ply->odriver->ochunk(ply, &uint8, sizeof(uint8)); +} + +static int obinary_int16(p_ply ply, double value) { + short int16 = (short) value; + if (value > SHRT_MAX || value < SHRT_MIN) return 0; + return ply->odriver->ochunk(ply, &int16, sizeof(int16)); +} + +static int obinary_uint16(p_ply ply, double value) { + unsigned short uint16 = (unsigned short) value; + if (value > USHRT_MAX || value < 0) return 0; + return ply->odriver->ochunk(ply, &uint16, sizeof(uint16)); +} + +static int obinary_int32(p_ply ply, double value) { + int int32 = (int) value; + if (value > INT_MAX || value < INT_MIN) return 0; + return ply->odriver->ochunk(ply, &int32, sizeof(int32)); +} + +static int obinary_uint32(p_ply ply, double value) { + unsigned int uint32 = (unsigned int) value; + if (value > UINT_MAX || value < 0) return 0; + return ply->odriver->ochunk(ply, &uint32, sizeof(uint32)); +} + +static int obinary_float32(p_ply ply, double value) { + float float32 = (float) value; + if (value > FLT_MAX || value < -FLT_MAX) return 0; + return ply->odriver->ochunk(ply, &float32, sizeof(float32)); +} + +static int obinary_float64(p_ply ply, double value) { + return ply->odriver->ochunk(ply, &value, sizeof(value)); +} + +/* ---------------------------------------------------------------------- + * Input handlers + * ---------------------------------------------------------------------- */ +static int iascii_int8(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtol(BWORD(ply), &end, 10); + if (*end || *value > CHAR_MAX || *value < CHAR_MIN) return 0; + return 1; +} + +static int iascii_uint8(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtol(BWORD(ply), &end, 10); + if (*end || *value > UCHAR_MAX || *value < 0) return 0; + return 1; +} + +static int iascii_int16(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtol(BWORD(ply), &end, 10); + if (*end || *value > SHRT_MAX || *value < SHRT_MIN) return 0; + return 1; +} + +static int iascii_uint16(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtol(BWORD(ply), &end, 10); + if (*end || *value > USHRT_MAX || *value < 0) return 0; + return 1; +} + +static int iascii_int32(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtol(BWORD(ply), &end, 10); + if (*end || *value > INT_MAX || *value < INT_MIN) return 0; + return 1; +} + +static int iascii_uint32(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtol(BWORD(ply), &end, 10); + if (*end || *value < 0) return 0; + return 1; +} + +static int iascii_float32(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtod(BWORD(ply), &end); + if (*end || *value < -FLT_MAX || *value > FLT_MAX) return 0; + return 1; +} + +static int iascii_float64(p_ply ply, double *value) { + char *end; + if (!ply_read_word(ply)) return 0; + *value = strtod(BWORD(ply), &end); + if (*end || *value < -DBL_MAX || *value > DBL_MAX) return 0; + return 1; +} + +static int ibinary_int8(p_ply ply, double *value) { + char int8; + if (!ply->idriver->ichunk(ply, &int8, 1)) return 0; + *value = int8; + return 1; +} + +static int ibinary_uint8(p_ply ply, double *value) { + unsigned char uint8; + if (!ply->idriver->ichunk(ply, &uint8, 1)) return 0; + *value = uint8; + return 1; +} + +static int ibinary_int16(p_ply ply, double *value) { + short int16; + if (!ply->idriver->ichunk(ply, &int16, sizeof(int16))) return 0; + *value = int16; + return 1; +} + +static int ibinary_uint16(p_ply ply, double *value) { + unsigned short uint16; + if (!ply->idriver->ichunk(ply, &uint16, sizeof(uint16))) return 0; + *value = uint16; + return 1; +} + +static int ibinary_int32(p_ply ply, double *value) { + int int32; + if (!ply->idriver->ichunk(ply, &int32, sizeof(int32))) return 0; + *value = int32; + return 1; +} + +static int ibinary_uint32(p_ply ply, double *value) { + unsigned int uint32; + if (!ply->idriver->ichunk(ply, &uint32, sizeof(uint32))) return 0; + *value = uint32; + return 1; +} + +static int ibinary_float32(p_ply ply, double *value) { + float float32; + if (!ply->idriver->ichunk(ply, &float32, sizeof(float32))) return 0; + *value = float32; + ply_reverse(&float32, sizeof(float32)); + return 1; +} + +static int ibinary_float64(p_ply ply, double *value) { + return ply->idriver->ichunk(ply, value, sizeof(double)); +} + +/* ---------------------------------------------------------------------- + * Constants + * ---------------------------------------------------------------------- */ +static t_ply_idriver ply_idriver_ascii = { + { iascii_int8, iascii_uint8, iascii_int16, iascii_uint16, + iascii_int32, iascii_uint32, iascii_float32, iascii_float64, + iascii_int8, iascii_uint8, iascii_int16, iascii_uint16, + iascii_int32, iascii_uint32, iascii_float32, iascii_float64 + }, /* order matches e_ply_type enum */ + NULL, + "ascii input" +}; + +static t_ply_idriver ply_idriver_binary = { + { ibinary_int8, ibinary_uint8, ibinary_int16, ibinary_uint16, + ibinary_int32, ibinary_uint32, ibinary_float32, ibinary_float64, + ibinary_int8, ibinary_uint8, ibinary_int16, ibinary_uint16, + ibinary_int32, ibinary_uint32, ibinary_float32, ibinary_float64 + }, /* order matches e_ply_type enum */ + ply_read_chunk, + "binary input" +}; + +static t_ply_idriver ply_idriver_binary_reverse = { + { ibinary_int8, ibinary_uint8, ibinary_int16, ibinary_uint16, + ibinary_int32, ibinary_uint32, ibinary_float32, ibinary_float64, + ibinary_int8, ibinary_uint8, ibinary_int16, ibinary_uint16, + ibinary_int32, ibinary_uint32, ibinary_float32, ibinary_float64 + }, /* order matches e_ply_type enum */ + ply_read_chunk_reverse, + "reverse binary input" +}; + +static t_ply_odriver ply_odriver_ascii = { + { oascii_int8, oascii_uint8, oascii_int16, oascii_uint16, + oascii_int32, oascii_uint32, oascii_float32, oascii_float64, + oascii_int8, oascii_uint8, oascii_int16, oascii_uint16, + oascii_int32, oascii_uint32, oascii_float32, oascii_float64 + }, /* order matches e_ply_type enum */ + NULL, + "ascii output" +}; + +static t_ply_odriver ply_odriver_binary = { + { obinary_int8, obinary_uint8, obinary_int16, obinary_uint16, + obinary_int32, obinary_uint32, obinary_float32, obinary_float64, + obinary_int8, obinary_uint8, obinary_int16, obinary_uint16, + obinary_int32, obinary_uint32, obinary_float32, obinary_float64 + }, /* order matches e_ply_type enum */ + ply_write_chunk, + "binary output" +}; + +static t_ply_odriver ply_odriver_binary_reverse = { + { obinary_int8, obinary_uint8, obinary_int16, obinary_uint16, + obinary_int32, obinary_uint32, obinary_float32, obinary_float64, + obinary_int8, obinary_uint8, obinary_int16, obinary_uint16, + obinary_int32, obinary_uint32, obinary_float32, obinary_float64 + }, /* order matches e_ply_type enum */ + ply_write_chunk_reverse, + "reverse binary output" +}; + +/* ---------------------------------------------------------------------- + * Copyright (C) 2003 Diego Nehab. 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 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. + * ---------------------------------------------------------------------- */ diff --git a/3rdparty/openctm/tools/rply/rply.h b/3rdparty/openctm/tools/rply/rply.h new file mode 100644 index 000000000..049fe1868 --- /dev/null +++ b/3rdparty/openctm/tools/rply/rply.h @@ -0,0 +1,365 @@ +#ifndef PLY_H +#define PLY_H +/* ---------------------------------------------------------------------- + * RPly library, read/write PLY files + * Diego Nehab, Princeton University + * http://www.cs.princeton.edu/~diego/professional/rply + * + * This library is distributed under the MIT License. See notice + * at the end of this file. + * ---------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define RPLY_VERSION "RPly 1.01" +#define RPLY_COPYRIGHT "Copyright (C) 2003-2005 Diego Nehab" +#define RPLY_AUTHORS "Diego Nehab" + +/* ---------------------------------------------------------------------- + * Types + * ---------------------------------------------------------------------- */ +/* structures are opaque */ +typedef struct t_ply_ *p_ply; +typedef struct t_ply_element_ *p_ply_element; +typedef struct t_ply_property_ *p_ply_property; +typedef struct t_ply_argument_ *p_ply_argument; + +/* ply format mode type */ +typedef enum e_ply_storage_mode_ { + PLY_BIG_ENDIAN, + PLY_LITTLE_ENDIAN, + PLY_ASCII, + PLY_DEFAULT /* has to be the last in enum */ +} e_ply_storage_mode; /* order matches ply_storage_mode_list */ + +/* ply data type */ +typedef enum e_ply_type { + PLY_INT8, PLY_UINT8, PLY_INT16, PLY_UINT16, + PLY_INT32, PLY_UIN32, PLY_FLOAT32, PLY_FLOAT64, + PLY_CHAR, PLY_UCHAR, PLY_SHORT, PLY_USHORT, + PLY_INT, PLY_UINT, PLY_FLOAT, PLY_DOUBLE, + PLY_LIST /* has to be the last in enum */ +} e_ply_type; /* order matches ply_type_list */ + +/* ---------------------------------------------------------------------- + * Property reading callback prototype + * + * message: error message + * ---------------------------------------------------------------------- */ +typedef void (*p_ply_error_cb)(const char *message); + +/* ---------------------------------------------------------------------- + * Opens a ply file for reading (fails if file is not a ply file) + * + * error_cb: error callback function + * name: file name + * + * Returns 1 if successful, 0 otherwise + * ---------------------------------------------------------------------- */ +p_ply ply_open(const char *name, p_ply_error_cb error_cb); + +/* ---------------------------------------------------------------------- + * Reads and parses the header of a ply file returned by ply_open + * + * ply: handle returned by ply_open + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_read_header(p_ply ply); + +/* ---------------------------------------------------------------------- + * Property reading callback prototype + * + * argument: parameters for property being processed when callback is called + * + * Returns 1 if should continue processing file, 0 if should abort. + * ---------------------------------------------------------------------- */ +typedef int (*p_ply_read_cb)(p_ply_argument argument); + +/* ---------------------------------------------------------------------- + * Sets up callbacks for property reading after header was parsed + * + * ply: handle returned by ply_open + * element_name: element where property is + * property_name: property to associate element with + * read_cb: function to be called for each property value + * pdata/idata: user data that will be passed to callback + * + * Returns 0 if no element or no property in element, returns the + * number of element instances otherwise. + * ---------------------------------------------------------------------- */ +long ply_set_read_cb(p_ply ply, const char *element_name, + const char *property_name, p_ply_read_cb read_cb, + void *pdata, long idata); + +/* ---------------------------------------------------------------------- + * Returns information about the element originating a callback + * + * argument: handle to argument + * element: receives a the element handle (if non-null) + * instance_index: receives the index of the current element instance + * (if non-null) + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_get_argument_element(p_ply_argument argument, + p_ply_element *element, long *instance_index); + +/* ---------------------------------------------------------------------- + * Returns information about the property originating a callback + * + * argument: handle to argument + * property: receives the property handle (if non-null) + * length: receives the number of values in this property (if non-null) + * value_index: receives the index of current property value (if non-null) + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_get_argument_property(p_ply_argument argument, + p_ply_property *property, long *length, long *value_index); + +/* ---------------------------------------------------------------------- + * Returns user data associated with callback + * + * pdata: receives a copy of user custom data pointer (if non-null) + * idata: receives a copy of user custom data integer (if non-null) + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_get_argument_user_data(p_ply_argument argument, void **pdata, + long *idata); + +/* ---------------------------------------------------------------------- + * Returns the value associated with a callback + * + * argument: handle to argument + * + * Returns the current data item + * ---------------------------------------------------------------------- */ +double ply_get_argument_value(p_ply_argument argument); + +/* ---------------------------------------------------------------------- + * Reads all elements and properties calling the callbacks defined with + * calls to ply_set_read_cb + * + * ply: handle returned by ply_open + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_read(p_ply ply); + +/* ---------------------------------------------------------------------- + * Iterates over all elements by returning the next element. + * Call with NULL to return handle to first element. + * + * ply: handle returned by ply_open + * last: handle of last element returned (NULL for first element) + * + * Returns element if successfull or NULL if no more elements + * ---------------------------------------------------------------------- */ +p_ply_element ply_get_next_element(p_ply ply, p_ply_element last); + +/* ---------------------------------------------------------------------- + * Iterates over all comments by returning the next comment. + * Call with NULL to return pointer to first comment. + * + * ply: handle returned by ply_open + * last: pointer to last comment returned (NULL for first comment) + * + * Returns comment if successfull or NULL if no more comments + * ---------------------------------------------------------------------- */ +const char *ply_get_next_comment(p_ply ply, const char *last); + +/* ---------------------------------------------------------------------- + * Iterates over all obj_infos by returning the next obj_info. + * Call with NULL to return pointer to first obj_info. + * + * ply: handle returned by ply_open + * last: pointer to last obj_info returned (NULL for first obj_info) + * + * Returns obj_info if successfull or NULL if no more obj_infos + * ---------------------------------------------------------------------- */ +const char *ply_get_next_obj_info(p_ply ply, const char *last); + +/* ---------------------------------------------------------------------- + * Returns information about an element + * + * element: element of interest + * name: receives a pointer to internal copy of element name (if non-null) + * ninstances: receives the number of instances of this element (if non-null) + * + * Returns 1 if successfull or 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_get_element_info(p_ply_element element, const char** name, + long *ninstances); + +/* ---------------------------------------------------------------------- + * Iterates over all properties by returning the next property. + * Call with NULL to return handle to first property. + * + * element: handle of element with the properties of interest + * last: handle of last property returned (NULL for first property) + * + * Returns element if successfull or NULL if no more properties + * ---------------------------------------------------------------------- */ +p_ply_property ply_get_next_property(p_ply_element element, + p_ply_property last); + +/* ---------------------------------------------------------------------- + * Returns information about a property + * + * property: handle to property of interest + * name: receives a pointer to internal copy of property name (if non-null) + * type: receives the property type (if non-null) + * length_type: for list properties, receives the scalar type of + * the length field (if non-null) + * value_type: for list properties, receives the scalar type of the value + * fields (if non-null) + * + * Returns 1 if successfull or 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_get_property_info(p_ply_property property, const char** name, + e_ply_type *type, e_ply_type *length_type, e_ply_type *value_type); + +/* ---------------------------------------------------------------------- + * Creates new ply file + * + * name: file name + * storage_mode: file format mode + * + * Returns handle to ply file if successfull, NULL otherwise + * ---------------------------------------------------------------------- */ +p_ply ply_create(const char *name, e_ply_storage_mode storage_mode, + p_ply_error_cb error_cb); + +/* ---------------------------------------------------------------------- + * Adds a new element to the ply file created by ply_create + * + * ply: handle returned by ply_create + * name: name of new element + * ninstances: number of element of this time in file + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_add_element(p_ply ply, const char *name, long ninstances); + +/* ---------------------------------------------------------------------- + * Adds a new property to the last element added by ply_add_element + * + * ply: handle returned by ply_create + * name: name of new property + * type: property type + * length_type: scalar type of length field of a list property + * value_type: scalar type of value fields of a list property + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_add_property(p_ply ply, const char *name, e_ply_type type, + e_ply_type length_type, e_ply_type value_type); + +/* ---------------------------------------------------------------------- + * Adds a new list property to the last element added by ply_add_element + * + * ply: handle returned by ply_create + * name: name of new property + * length_type: scalar type of length field of a list property + * value_type: scalar type of value fields of a list property + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_add_list_property(p_ply ply, const char *name, + e_ply_type length_type, e_ply_type value_type); + +/* ---------------------------------------------------------------------- + * Adds a new property to the last element added by ply_add_element + * + * ply: handle returned by ply_create + * name: name of new property + * type: property type + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_add_scalar_property(p_ply ply, const char *name, e_ply_type type); + +/* ---------------------------------------------------------------------- + * Adds a new comment item + * + * ply: handle returned by ply_create + * comment: pointer to string with comment text + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_add_comment(p_ply ply, const char *comment); + +/* ---------------------------------------------------------------------- + * Adds a new obj_info item + * + * ply: handle returned by ply_create + * comment: pointer to string with obj_info data + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_add_obj_info(p_ply ply, const char *obj_info); + +/* ---------------------------------------------------------------------- + * Writes the ply file header after all element and properties have been + * defined by calls to ply_add_element and ply_add_property + * + * ply: handle returned by ply_create + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_write_header(p_ply ply); + +/* ---------------------------------------------------------------------- + * Writes one property value, in the order they should be written to the + * file. For each element type, write all elements of that type in order. + * For each element, write all its properties in order. For scalar + * properties, just write the value. For list properties, write the length + * and then each of the values. + * + * ply: handle returned by ply_create + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_write(p_ply ply, double value); + +/* ---------------------------------------------------------------------- + * Closes a ply file handle. Releases all memory used by handle + * + * ply: handle to be closed. + * + * Returns 1 if successfull, 0 otherwise + * ---------------------------------------------------------------------- */ +int ply_close(p_ply ply); + +#ifdef __cplusplus +} +#endif + +#endif /* RPLY_H */ + +/* ---------------------------------------------------------------------- + * Copyright (C) 2003-2005 Diego Nehab. 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 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. + * ---------------------------------------------------------------------- */ diff --git a/3rdparty/openctm/tools/stl.cpp b/3rdparty/openctm/tools/stl.cpp new file mode 100644 index 000000000..70a6a720a --- /dev/null +++ b/3rdparty/openctm/tools/stl.cpp @@ -0,0 +1,238 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: stl.cpp +// Description: Implementation of the STL file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include "stl.h" + +#ifdef _MSC_VER +typedef unsigned int uint32; +#else +#include +typedef uint32_t uint32; +#endif + +using namespace std; + + +/// Read a 32-bit integer, endian independent. +static uint32 ReadInt32(istream &aStream) +{ + unsigned char buf[4]; + aStream.read((char *) buf, 4); + return ((uint32) buf[0]) | (((uint32) buf[1]) << 8) | + (((uint32) buf[2]) << 16) | (((uint32) buf[3]) << 24); +} + +/// Write a 32-bit integer, endian independent. +static void WriteInt32(ostream &aStream, uint32 aValue) +{ + unsigned char buf[4]; + buf[0] = aValue & 255; + buf[1] = (aValue >> 8) & 255; + buf[2] = (aValue >> 16) & 255; + buf[3] = (aValue >> 24) & 255; + aStream.write((char *) buf, 4); +} + +/// Read a Vector3, endian independent. +static Vector3 ReadVector3(istream &aStream) +{ + union { + uint32 i; + float f; + } val; + Vector3 result; + val.i = ReadInt32(aStream); + result.x = val.f; + val.i = ReadInt32(aStream); + result.y = val.f; + val.i = ReadInt32(aStream); + result.z = val.f; + return result; +} + +/// Write a Vector3, endian independent. +static void WriteVector3(ostream &aStream, Vector3 aValue) +{ + union { + uint32 i; + float f; + } val; + val.f = aValue.x; + WriteInt32(aStream, val.i); + val.f = aValue.y; + WriteInt32(aStream, val.i); + val.f = aValue.z; + WriteInt32(aStream, val.i); +} + +/// Vertex class used when reading and joining the triangle vertices. +class SortVertex { + public: + float x, y, z; + uint32 mOldIndex; + + bool operator<(const SortVertex &v) const + { + return (x < v.x) || ((x == v.x) && ((y < v.y) || ((y == v.y) && (z < v.z)))); + } +}; + +/// Import an STL file from a file. +void Import_STL(const char * aFileName, Mesh * aMesh) +{ + // Clear the mesh + aMesh->Clear(); + + // Open the input file + ifstream f(aFileName, ios::in | ios::binary); + if(f.fail()) + throw runtime_error("Could not open input file."); + + // Get the file size + f.seekg(0, ios::end); + uint32 fileSize = (uint32) f.tellg(); + f.seekg(0, ios::beg); + if(fileSize < 84) + throw runtime_error("Invalid format - not a valid STL file."); + + // Read header (80 character comment + triangle count) + char comment[81]; + f.read(comment, 80); + comment[80] = 0; + aMesh->mComment = string(comment); + uint32 triangleCount = ReadInt32(f); + if(fileSize != (84 + triangleCount * 50)) + throw runtime_error("Invalid format - not a valid STL file."); + + if(triangleCount > 0) + { + // Read all the triangle data + vector vertices; + vertices.resize(triangleCount * 3); + for(uint32 i = 0; i < triangleCount; ++ i) + { + // Skip the flat normal + f.seekg(12, ios::cur); + + // Read the three triangle vertices + for(uint32 j = 0; j < 3; ++ j) + { + Vector3 v = ReadVector3(f); + uint32 index = i * 3 + j; + vertices[index].x = v.x; + vertices[index].y = v.y; + vertices[index].z = v.z; + vertices[index].mOldIndex = index; + } + + // Ignore the two fill bytes + f.seekg(2, ios::cur); + } + + // Make sure that no redundant copies of vertices exist (STL files are full + // of vertex duplicates, so remove the redundancy), and store the data in + // the mesh object + sort(vertices.begin(), vertices.end()); + aMesh->mVertices.resize(vertices.size()); + aMesh->mIndices.resize(vertices.size()); + SortVertex * firstEqual = &vertices[0]; + int vertIdx = -1; + for(uint32 i = 0; i < vertices.size(); ++ i) + { + if((i == 0) || + (vertices[i].z != firstEqual->z) || + (vertices[i].y != firstEqual->y) || + (vertices[i].x != firstEqual->x)) + { + firstEqual = &vertices[i]; + ++ vertIdx; + aMesh->mVertices[vertIdx] = Vector3(firstEqual->x, firstEqual->y, firstEqual->z); + } + aMesh->mIndices[vertices[i].mOldIndex] = vertIdx; + } + aMesh->mVertices.resize(vertIdx + 1); + } + + // Close the input file + f.close(); +} + +/// Export an STL file to a file. +void Export_STL(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Open the output file + ofstream f(aFileName, ios::out | ios::binary); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // Write header (80-character comment + triangle count) + char comment[80]; + for(uint32 i = 0; i < 80; ++ i) + { + if(i < aMesh->mComment.size()) + comment[i] = aMesh->mComment[i]; + else + comment[i] = 0; + } + f.write(comment, 80); + uint32 triangleCount = aMesh->mIndices.size() / 3; + WriteInt32(f, triangleCount); + + // Write the triangle data + for(uint32 i = 0; i < triangleCount; ++ i) + { + // Get the triangle vertices + Vector3 v1 = aMesh->mVertices[aMesh->mIndices[i * 3]]; + Vector3 v2 = aMesh->mVertices[aMesh->mIndices[i * 3 + 1]]; + Vector3 v3 = aMesh->mVertices[aMesh->mIndices[i * 3 + 2]]; + + // Calculate the triangle normal + Vector3 n1 = v2 - v1; + Vector3 n2 = v3 - v1; + Vector3 n = Normalize(Cross(n1, n2)); + + // Write the triangle normal + WriteVector3(f, n); + + // Coordinates + WriteVector3(f, v1); + WriteVector3(f, v2); + WriteVector3(f, v3); + + // Set the two fill bytes to zero + f.put(0); + f.put(0); + } + + // Close the output file + f.close(); +} diff --git a/3rdparty/openctm/tools/stl.h b/3rdparty/openctm/tools/stl.h new file mode 100644 index 000000000..fb7c8325c --- /dev/null +++ b/3rdparty/openctm/tools/stl.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: stl.h +// Description: Interface for the STL file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __STL_H_ +#define __STL_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import an STL file from a file. +void Import_STL(const char * aFileName, Mesh * aMesh); + +/// Export an STL file to a file. +void Export_STL(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __STL_H_ diff --git a/3rdparty/openctm/tools/sysdialog.h b/3rdparty/openctm/tools/sysdialog.h new file mode 100644 index 000000000..2e3820442 --- /dev/null +++ b/3rdparty/openctm/tools/sysdialog.h @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: sysdialog.h +// Description: Interface for system GUI dialog routines. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __SYSDIALOG_H_ +#define __SYSDIALOG_H_ + +#include +#include + +/// Message box class. +class SysMessageBox { + public: + /// Message box type + enum MessageType { + mtInformation, + mtWarning, + mtError + }; + + /// Constructor + SysMessageBox(); + + /// Show the dialog. + bool Show(); + + /// What type of message + MessageType mMessageType; + + /// Dialog caption + std::string mCaption; + + /// Dialog text + std::string mText; +}; + +/// Open dialog class. +class SysOpenDialog { + public: + /// Constructor + SysOpenDialog(); + + /// Show the dialog. + bool Show(); + + /// Dialog caption + std::string mCaption; + + /// Filters (e.g. "OpenCTM|*.ctm") + std::list mFilters; + + /// File name (result) + std::string mFileName; +}; + +/// Save dialog class. +class SysSaveDialog { + public: + /// Constructor + SysSaveDialog(); + + /// Show the dialog. + bool Show(); + + /// Dialog caption + std::string mCaption; + + /// Filters (e.g. "OpenCTM|*.ctm") + std::list mFilters; + + /// File name (result) + std::string mFileName; +}; + +#endif // __SYSDIALOG_H_ diff --git a/3rdparty/openctm/tools/sysdialog_gtk.cpp b/3rdparty/openctm/tools/sysdialog_gtk.cpp new file mode 100644 index 000000000..d1a887fb9 --- /dev/null +++ b/3rdparty/openctm/tools/sysdialog_gtk.cpp @@ -0,0 +1,217 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: sysdialog_gtk.cpp +// Description: Implementation of system GUI dialog routines for GTK+. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include "sysdialog.h" + +using namespace std; + + +/// Constructor. +SysMessageBox::SysMessageBox() +{ + mMessageType = mtInformation; +} + +/// Show the dialog. +bool SysMessageBox::Show() +{ + // Init GTK+ + if(!gtk_init_check(0, NULL)) + return false; + + // Select message type + GtkMessageType messageType; + switch(mMessageType) + { + default: + case mtInformation: + messageType = GTK_MESSAGE_INFO; + break; + case mtWarning: + messageType = GTK_MESSAGE_WARNING; + break; + case mtError: + messageType = GTK_MESSAGE_ERROR; + break; + } + + // Create dialog widget + GtkWidget * dialog = gtk_message_dialog_new( + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + messageType, + GTK_BUTTONS_OK, + mText.c_str(), "title"); + gtk_window_set_title(GTK_WINDOW(dialog), mCaption.c_str()); + + // Show the dialog + gint dlgResult = gtk_dialog_run(GTK_DIALOG(dialog)); + + // Free the dialog widget (we're done with it) + gtk_widget_destroy(dialog); + while(gtk_events_pending()) gtk_main_iteration(); + + // Evaluate dialog result + return (dlgResult == GTK_RESPONSE_ACCEPT); +} + + +/// Constructor +SysOpenDialog::SysOpenDialog() +{ + mCaption = "Open File"; +} + +/// Show the dialog. +bool SysOpenDialog::Show() +{ + // Init GTK+ + if(!gtk_init_check(0, NULL)) + return true; + + // Create dialog widget + GtkWidget * dialog = gtk_file_chooser_dialog_new( + mCaption.c_str(), + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + + // Add filters + for(list::iterator i = mFilters.begin(); i != mFilters.end(); ++ i) + { + size_t splitPos = (*i).find("|"); + if(splitPos != string::npos) + { + string name = (*i).substr(0, splitPos); + string pattern = (*i).substr(splitPos + 1); + GtkFileFilter * filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, name.c_str()); + size_t pos1 = 0; + while(pos1 != string::npos) + { + size_t pos2 = pattern.find(";", pos1); + gtk_file_filter_add_pattern(filter, (pattern.substr(pos1, pos2 - pos1)).c_str()); + if(pos2 != string::npos) + pos1 = pos2 + 1; + else + pos1 = pos2; + } + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); + } + } + + // Show the dialog + gint dlgResult = gtk_dialog_run(GTK_DIALOG(dialog)); + + // Extract the resulting file name + if(dlgResult == GTK_RESPONSE_ACCEPT) + { + char * fileName = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + mFileName = string(fileName); + g_free(fileName); + } + + // Free the dialog widget (we're done with it) + gtk_widget_destroy(dialog); + while(gtk_events_pending()) gtk_main_iteration(); + + // Evaluate dialog result + return (dlgResult == GTK_RESPONSE_ACCEPT); +} + + +/// Constructor +SysSaveDialog::SysSaveDialog() +{ + mCaption = "Save File"; +} + +/// Show the dialog. +bool SysSaveDialog::Show() +{ + // Init GTK+ + if(!gtk_init_check(0, NULL)) + return true; + + // Create dialog widget + GtkWidget * dialog = gtk_file_chooser_dialog_new( + mCaption.c_str(), + NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); + + // Configure the dialog + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), mFileName.c_str()); + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); + + // Add filters + for(list::iterator i = mFilters.begin(); i != mFilters.end(); ++ i) + { + size_t splitPos = (*i).find("|"); + if(splitPos != string::npos) + { + string name = (*i).substr(0, splitPos); + string pattern = (*i).substr(splitPos + 1); + GtkFileFilter * filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, name.c_str()); + size_t pos1 = 0; + while(pos1 != string::npos) + { + size_t pos2 = pattern.find(";", pos1); + gtk_file_filter_add_pattern(filter, (pattern.substr(pos1, pos2 - pos1)).c_str()); + if(pos2 != string::npos) + pos1 = pos2 + 1; + else + pos1 = pos2; + } + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); + } + } + + // Show the dialog + gint dlgResult = gtk_dialog_run(GTK_DIALOG(dialog)); + + // Extract the resulting file name + if(dlgResult == GTK_RESPONSE_ACCEPT) + { + char * fileName = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + mFileName = string(fileName); + g_free(fileName); + } + + // Free the dialog widget (we're done with it) + gtk_widget_destroy(dialog); + while(gtk_events_pending()) gtk_main_iteration(); + + // Evaluate dialog result + return (dlgResult == GTK_RESPONSE_ACCEPT); +} diff --git a/3rdparty/openctm/tools/sysdialog_mac.mm b/3rdparty/openctm/tools/sysdialog_mac.mm new file mode 100644 index 000000000..0e81d7310 --- /dev/null +++ b/3rdparty/openctm/tools/sysdialog_mac.mm @@ -0,0 +1,149 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: sysdialog_mac.mm +// Description: Implementation of system GUI dialog routines for Mac OS X, +// using the Objective-C based COCOA API. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#import +#include "sysdialog.h" + +using namespace std; + + +/// Constructor. +SysMessageBox::SysMessageBox() +{ + mMessageType = mtInformation; +} + +/// Show the dialog. +bool SysMessageBox::Show() +{ + // Intialize Cocoa environment + [NSApplication sharedApplication]; + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + // Create the alert object + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"OK"]; + [alert setMessageText:[NSString stringWithCString:mCaption.c_str() length:mCaption.size()]]; + [alert setInformativeText:[NSString stringWithCString:mText.c_str() length:mText.size()]]; + switch(mMessageType) + { + case mtInformation: + default: + [alert setAlertStyle:NSInformationalAlertStyle]; + break; + case mtWarning: + [alert setAlertStyle:NSWarningAlertStyle]; + break; + case mtError: + [alert setAlertStyle:NSCriticalAlertStyle]; + break; + } + + // Show the dialog + NSInteger clickedButton = [alert runModal]; + bool result = (clickedButton == NSAlertFirstButtonReturn); + + // Cleanup + [alert release]; + [pool drain]; + + return result; +} + + +/// Constructor +SysOpenDialog::SysOpenDialog() +{ + mCaption = "Open File"; +} + +/// Show the dialog. +bool SysOpenDialog::Show() +{ + // Intialize Cocoa environment + [NSApplication sharedApplication]; + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + // Create the file open panel object + NSOpenPanel * oPanel = [NSOpenPanel openPanel]; + [oPanel setCanChooseDirectories:NO]; + [oPanel setCanChooseFiles:YES]; + [oPanel setCanCreateDirectories:NO]; + [oPanel setAllowsMultipleSelection:NO]; + [oPanel setTitle:[NSString stringWithCString:mCaption.c_str() length:mCaption.size()]]; + + // Define filters - FIXME! + // [oPanel setAllowedFileTypes:[NSArray arrayWithObjects:@"ctm", @"3ds", @"stl", @"dae", @"obj", nil]]; + + // Display the dialog + int dlgResult = [oPanel runModal]; + + // Extract the resulting file name + if(dlgResult == NSOKButton) + mFileName = string([[oPanel filename] UTF8String]); + + // Cleanup + [pool drain]; + + return (dlgResult == NSOKButton); +} + + +/// Constructor +SysSaveDialog::SysSaveDialog() +{ + mCaption = "Save File"; +} + +/// Show the dialog. +bool SysSaveDialog::Show() +{ + // Intialize Cocoa environment + [NSApplication sharedApplication]; + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + // Create the file save panel object + NSSavePanel * sPanel = [NSSavePanel savePanel]; + [sPanel setCanCreateDirectories:YES]; + [sPanel setTitle:[NSString stringWithCString:mCaption.c_str() length:mCaption.size()]]; + + // Define filters - FIXME! + // [oPanel setAllowedFileTypes:[NSArray arrayWithObjects:@"ctm", @"3ds", @"stl", @"dae", @"obj", nil]]; + + // Display the dialog + int dlgResult = [sPanel runModal]; + + // Extract the resulting file name + if(dlgResult == NSOKButton) + mFileName = string([[sPanel filename] UTF8String]); + + // Cleanup + [pool drain]; + + return (dlgResult == NSOKButton); +} diff --git a/3rdparty/openctm/tools/sysdialog_win.cpp b/3rdparty/openctm/tools/sysdialog_win.cpp new file mode 100644 index 000000000..a4395ef3b --- /dev/null +++ b/3rdparty/openctm/tools/sysdialog_win.cpp @@ -0,0 +1,203 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: sysdialog_win.cpp +// Description: Implementation of system GUI dialog routines for Windows. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include +#include +#include "sysdialog.h" + +using namespace std; + + +static BOOL CALLBACK WindowEnumFun(HWND hwnd, LPARAM lParam) +{ + *((HWND *)lParam) = hwnd; + return FALSE; +} + +// Get the window handle of the main window for this application +static HWND GetMainWindow() +{ + HWND result = 0; + EnumThreadWindows(GetCurrentThreadId(), WindowEnumFun, (LPARAM) &result); + return result; +} + + +/// Constructor. +SysMessageBox::SysMessageBox() +{ + mMessageType = mtInformation; +} + +/// Show the dialog. +bool SysMessageBox::Show() +{ + // Select message type + DWORD messageType; + switch(mMessageType) + { + default: + case mtInformation: + messageType = MB_ICONINFORMATION; + break; + case mtWarning: + messageType = MB_ICONWARNING; + break; + case mtError: + messageType = MB_ICONERROR; + break; + } + + // Show the message box + MessageBoxA(GetMainWindow(), mText.c_str(), mCaption.c_str(), + MB_OK | messageType); + + return true; +} + + +/// Constructor +SysOpenDialog::SysOpenDialog() +{ + mCaption = "Open File"; +} + +/// Show the dialog. +bool SysOpenDialog::Show() +{ + OPENFILENAME ofn; + char fileNameBuf[1000]; + + // Initialize the file dialog structure + memset(&ofn, 0, sizeof(OPENFILENAME)); + ofn.lStructSize = sizeof(OPENFILENAME); + memset(&fileNameBuf, 0, sizeof(fileNameBuf)); + ofn.lpstrFile = fileNameBuf; + ofn.nMaxFile = sizeof(fileNameBuf); + ofn.lpstrTitle = mCaption.c_str(); + ofn.hwndOwner = GetMainWindow(); + ofn.Flags = 0; + + // Add filters + int filterBufSize = 3; + for(list::iterator i = mFilters.begin(); i != mFilters.end(); ++ i) + filterBufSize += (*i).size() + 1; + char * filterBuf = new char[filterBufSize]; + memset(filterBuf, 0, filterBufSize); + int pos = 0; + for(list::iterator i = mFilters.begin(); i != mFilters.end(); ++ i) + { + size_t splitPos = (*i).find("|"); + if(splitPos != string::npos) + { + string name = (*i).substr(0, splitPos); + string pattern = (*i).substr(splitPos + 1); + memcpy(&filterBuf[pos], name.c_str(), name.size()); + pos += name.size() + 1; + memcpy(&filterBuf[pos], pattern.c_str(), pattern.size()); + pos += pattern.size() + 1; + } + } + ofn.lpstrFilter = filterBuf; + ofn.nFilterIndex = 1; + + // Show the dialog + bool result = GetOpenFileNameA(&ofn); + + // Extract the resulting file name + if(result) + mFileName = string(fileNameBuf); + else + mFileName = string(""); + + // Clean up + delete [] filterBuf; + + return result; +} + + +/// Constructor +SysSaveDialog::SysSaveDialog() +{ + mCaption = "Save File"; +} + +/// Show the dialog. +bool SysSaveDialog::Show() +{ + OPENFILENAME ofn; + char fileNameBuf[1000]; + + // Initialize the file dialog structure + memset(&ofn, 0, sizeof(OPENFILENAME)); + ofn.lStructSize = sizeof(OPENFILENAME); + memset(&fileNameBuf, 0, sizeof(fileNameBuf)); + mFileName.copy(fileNameBuf, mFileName.size()); + ofn.lpstrFile = fileNameBuf; + ofn.nMaxFile = sizeof(fileNameBuf); + ofn.lpstrTitle = mCaption.c_str(); + ofn.hwndOwner = GetMainWindow(); + ofn.Flags = OFN_OVERWRITEPROMPT; + + // Add filters + int filterBufSize = 3; + for(list::iterator i = mFilters.begin(); i != mFilters.end(); ++ i) + filterBufSize += (*i).size() + 1; + char * filterBuf = new char[filterBufSize]; + memset(filterBuf, 0, filterBufSize); + int pos = 0; + for(list::iterator i = mFilters.begin(); i != mFilters.end(); ++ i) + { + size_t splitPos = (*i).find("|"); + if(splitPos != string::npos) + { + string name = (*i).substr(0, splitPos); + string pattern = (*i).substr(splitPos + 1); + memcpy(&filterBuf[pos], name.c_str(), name.size()); + pos += name.size() + 1; + memcpy(&filterBuf[pos], pattern.c_str(), pattern.size()); + pos += pattern.size() + 1; + } + } + ofn.lpstrFilter = filterBuf; + ofn.nFilterIndex = 1; + + // Show the dialog + bool result = GetSaveFileNameA(&ofn); + + // Extract the resulting file name + if(result) + mFileName = string(fileNameBuf); + else + mFileName = string(""); + + // Clean up + delete [] filterBuf; + + return result; +} diff --git a/3rdparty/openctm/tools/systimer.cpp b/3rdparty/openctm/tools/systimer.cpp new file mode 100644 index 000000000..fbccef18c --- /dev/null +++ b/3rdparty/openctm/tools/systimer.cpp @@ -0,0 +1,75 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: systimer.cpp +// Description: Implementation of the system timer routines. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#include "systimer.h" + +using namespace std; + + +/// Constructor +SysTimer::SysTimer() +{ +#ifdef WIN32 + if(QueryPerformanceFrequency((LARGE_INTEGER *)&mTimeFreq)) + QueryPerformanceCounter((LARGE_INTEGER *)&mTimeStart); + else + mTimeFreq = 0; +#else + struct timeval tv; + gettimeofday(&tv, 0); + mTimeStart = (long long) tv.tv_sec * (long long) 1000000 + (long long) tv.tv_usec; +#endif +} + +/// Get current time. +double SysTimer::GetTime() +{ +#ifdef WIN32 + __int64 t; + QueryPerformanceCounter((LARGE_INTEGER *)&t); + return double(t - mTimeStart) / double(mTimeFreq); +#else + struct timeval tv; + gettimeofday(&tv, 0); + long long t = (long long) tv.tv_sec * (long long) 1000000 + (long long) tv.tv_usec; + return (1e-6) * double(t - mTimeStart); +#endif +} + +/// Push current time (start measuring). +void SysTimer::Push() +{ + mStack.push_back(GetTime()); +} + +/// Pop delta time since last push. +double SysTimer::PopDelta() +{ + double delta = GetTime() - mStack.back(); + mStack.pop_back(); + return delta; +} diff --git a/3rdparty/openctm/tools/systimer.h b/3rdparty/openctm/tools/systimer.h new file mode 100644 index 000000000..e0a0e2220 --- /dev/null +++ b/3rdparty/openctm/tools/systimer.h @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: systimer.h +// Description: Interface for the system timer routines. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __SYSIMER_H_ +#define __SYSIMER_H_ + +#if !defined(WIN32) && defined(_WIN32) +#define WIN32 +#endif + +#ifdef WIN32 +#include +#else +#include +#endif +#include + +class SysTimer { + private: + std::list mStack; +#ifdef WIN32 + __int64 mTimeFreq; + __int64 mTimeStart; +#else + long long mTimeStart; +#endif + + public: + /// Constructor + SysTimer(); + + /// Get current time. + double GetTime(); + + /// Push current time (start measuring). + void Push(); + + /// Pop delta time since last push. + double PopDelta(); +}; + +#endif // __SYSIMER_H_ diff --git a/3rdparty/openctm/tools/tinyxml/Makefile.linux b/3rdparty/openctm/tools/tinyxml/Makefile.linux new file mode 100644 index 000000000..6b5ec24cb --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/Makefile.linux @@ -0,0 +1,35 @@ +#**************************************************************************** +# Makefile for TinyXml for Linux +#**************************************************************************** + +# Compiler configuration +CPP = g++ +AR = ar rcs +CPPFLAGS = -Wall -Wno-unknown-pragmas -Wno-format -O3 + +# Target files +STATICLIB = libtinyxml.a + +all: $(STATICLIB) + +# Object files +OBJS = tinyxml.o \ + tinyxmlparser.o \ + tinyxmlerror.o \ + tinystr.o + +# Rule for static library +$(STATICLIB): $(OBJS) + $(AR) $@ $(OBJS) + +# Compile rules +%.o : %.cpp + $(CPP) -c $(CPPFLAGS) $< -o $@ + +clean: + rm -f $(OBJS) $(STATICLIB) + +tinyxml.o: tinyxml.cpp tinyxml.h tinystr.h +tinyxmlparser.o: tinyxmlparser.cpp tinyxml.h tinystr.h +tinyxmlerror.o: tinyxmlerror.cpp tinyxml.h tinystr.h +tinystr.o: tinystr.cpp tinystr.h diff --git a/3rdparty/openctm/tools/tinyxml/Makefile.macosx b/3rdparty/openctm/tools/tinyxml/Makefile.macosx new file mode 100644 index 000000000..6c458f19f --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/Makefile.macosx @@ -0,0 +1,35 @@ +#**************************************************************************** +# Makefile for TinyXml for Mac OS X +#**************************************************************************** + +# Compiler configuration +CPP = g++ +AR = ar rcs +CPPFLAGS = -Wall -Wno-unknown-pragmas -Wno-format -O3 + +# Target files +STATICLIB = libtinyxml.a + +all: $(STATICLIB) + +# Object files +OBJS = tinyxml.o \ + tinyxmlparser.o \ + tinyxmlerror.o \ + tinystr.o + +# Rule for static library +$(STATICLIB): $(OBJS) + $(AR) $@ $(OBJS) + +# Compile rules +%.o : %.cpp + $(CPP) -c $(CPPFLAGS) $< -o $@ + +clean: + rm -f $(OBJS) $(STATICLIB) + +tinyxml.o: tinyxml.cpp tinyxml.h tinystr.h +tinyxmlparser.o: tinyxmlparser.cpp tinyxml.h tinystr.h +tinyxmlerror.o: tinyxmlerror.cpp tinyxml.h tinystr.h +tinystr.o: tinystr.cpp tinystr.h diff --git a/3rdparty/openctm/tools/tinyxml/Makefile.mingw b/3rdparty/openctm/tools/tinyxml/Makefile.mingw new file mode 100644 index 000000000..3db2b0622 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/Makefile.mingw @@ -0,0 +1,35 @@ +#**************************************************************************** +# Makefile for TinyXml for Windows / MinGW32 +#**************************************************************************** + +# Compiler configuration +CPP = g++ +AR = ar rcs +CPPFLAGS = -Wall -Wno-unknown-pragmas -Wno-format -O3 + +# Target files +STATICLIB = libtinyxml.a + +all: $(STATICLIB) + +# Object files +OBJS = tinyxml.o \ + tinyxmlparser.o \ + tinyxmlerror.o \ + tinystr.o + +# Rule for static library +$(STATICLIB): $(OBJS) + $(AR) $@ $(OBJS) + +# Compile rules +%.o : %.cpp + $(CPP) -c $(CPPFLAGS) $< -o $@ + +clean: + del /Q $(OBJS) $(STATICLIB) + +tinyxml.o: tinyxml.cpp tinyxml.h tinystr.h +tinyxmlparser.o: tinyxmlparser.cpp tinyxml.h tinystr.h +tinyxmlerror.o: tinyxmlerror.cpp tinyxml.h tinystr.h +tinystr.o: tinystr.cpp tinystr.h diff --git a/3rdparty/openctm/tools/tinyxml/Makefile.msvc b/3rdparty/openctm/tools/tinyxml/Makefile.msvc new file mode 100644 index 000000000..fbc9a6011 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/Makefile.msvc @@ -0,0 +1,35 @@ +#**************************************************************************** +# Makefile for TinyXml for Microsoft Visual C++ / nmake +#**************************************************************************** + +# Compiler configuration +CPP = cl +AR = lib /nologo +CPPFLAGS = /nologo /O2 /Gs /W3 /EHsc /D_CRT_SECURE_NO_WARNINGS + +# Target files +STATICLIB = tinyxml.lib + +all: $(STATICLIB) + +# Object files +OBJS = tinyxml.obj \ + tinyxmlparser.obj \ + tinyxmlerror.obj \ + tinystr.obj + +# Rule for static library +$(STATICLIB): $(OBJS) + $(AR) /OUT:$@ $(OBJS) + +# Compile rules +.cpp.obj: + $(CPP) /c $(CPPFLAGS) /Fo$@ $< + +clean: + del /Q $(OBJS) $(STATICLIB) + +tinyxml.obj: tinyxml.cpp tinyxml.h tinystr.h +tinyxmlparser.obj: tinyxmlparser.cpp tinyxml.h tinystr.h +tinyxmlerror.obj: tinyxmlerror.cpp tinyxml.h tinystr.h +tinystr.obj: tinystr.cpp tinystr.h diff --git a/3rdparty/openctm/tools/tinyxml/changes.txt b/3rdparty/openctm/tools/tinyxml/changes.txt new file mode 100644 index 000000000..4075fd620 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/changes.txt @@ -0,0 +1,269 @@ +Changes in version 1.0.1: +- Fixed comment tags which were outputing as ' include. Thanks + to Steve Lhomme for that. + +Changes in version 2.0.0 BETA +- Made the ToXXX() casts safe if 'this' is null. + When "LoadFile" is called with a filename, the value will correctly get set. + Thanks to Brian Yoder. +- Fixed bug where isalpha() and isalnum() would get called with a negative value for + high ascii numbers. Thanks to Alesky Aksenov. +- Fixed some errors codes that were not getting set. +- Made methods "const" that were not. +- Added a switch to enable or disable the ignoring of white space. ( TiXmlDocument::SetIgnoreWhiteSpace() ) +- Greater standardization and code re-use in the parser. +- Added a stream out operator. +- Added a stream in operator. +- Entity support, of predefined entites. &#x entities are untouched by input or output. +- Improved text out formatting. +- Fixed ReplaceChild bug, thanks to Tao Chen. + +Changes in version 2.0.1 +- Fixed hanging on loading a 0 length file. Thanks to Jeff Scozzafava. +- Fixed crashing on InsertBeforeChild and InsertAfterChild. Also possibility of bad links being + created by same function. Thanks to Frank De prins. +- Added missing licence text. Thanks to Lars Willemsens. +- Added include, at the suggestion of Steve Walters. + +Changes in version 2.1.0 +- Yves Berquin brings us the STL switch. The forum on SourceForge, and various emails to + me, have long debated all out STL vs. no STL at all. And now you can have it both ways. + TinyXml will compile either way. + +Changes in version 2.1.1 +- Compilation warnings. + +Changes in version 2.1.2 +- Uneeded code is not compiled in the STL case. +- Changed headers so that STL can be turned on or off in tinyxml.h + +Changes in version 2.1.3 +- Fixed non-const reference in API; now uses a pointer. +- Copy constructor of TiXmlString not checking for assignment to self. +- Nimrod Cohen found a truly evil bug in the STL implementation that occurs + when a string is converted to a c_str and then assigned to self. Search for + STL_STRING_BUG for a full description. I'm asserting this is a Microsoft STL + bug, since &string and string.c_str() should never be the same. Nevertheless, + the code works around it. +- Urivan Saaib pointed out a compiler conflict, where the C headers define + the isblank macro, which was wiping out the TiXmlString::isblank() method. + The method was unused and has been removed. + +Changes in version 2.1.4 +- Reworked the entity code. Entities were not correctly surving round trip input and output. + Will now automatically create entities for high ascii in output. + +Changes in version 2.1.5 +- Bug fix by kylotan : infinite loop on some input (tinyxmlparser.cpp rev 1.27) +- Contributed by Ivica Aracic (bytelord) : 1 new VC++ project to compile versions as static libraries (tinyxml_lib.dsp), + and an example usage in xmltest.dsp + (Patch request ID 678605) +- A suggestion by Ronald Fenner Jr (dormlock) to add #include and for Apple's Project Builder + (Patch request ID 697642) +- A patch from ohommes that allows to parse correctly dots in element names and attribute names + (Patch request 602600 and kylotan 701728) +- A patch from hermitgeek ( James ) and wasteland for improper error reporting +- Reviewed by Lee, with the following changes: + - Got sick of fighting the STL/non-STL thing in the windows build. Broke + them out as seperate projects. + - I have too long not included the dsw. Added. + - TinyXmlText had a protected Print. Odd. + - Made LinkEndChild public, with docs and appropriate warnings. + - Updated the docs. + +2.2.0 +- Fixed an uninitialized pointer in the TiXmlAttributes +- Fixed STL compilation problem in MinGW (and gcc 3?) - thanks Brian Yoder for finding this one +- Fixed a syntax error in TiXmlDeclaration - thanks Brian Yoder +- Fletcher Dunn proposed and submitted new error handling that tracked the row and column. Lee + modified it to not have performance impact. +- General cleanup suggestions from Fletcher Dunn. +- In error handling, general errors will no longer clear the error state of specific ones. +- Fix error in documentation : comments starting with ">) has now + been fixed. + +2.5.2 +- Lieven, and others, pointed out a missing const-cast that upset the Open Watcom compiler. + Should now be fixed. +- ErrorRow and ErrorCol should have been const, and weren't. Fixed thanks to Dmitry Polutov. + +2.5.3 +- zloe_zlo identified a missing string specialization for QueryValueAttribute() [ 1695429 ]. Worked + on this bug, but not sure how to fix it in a safe, cross-compiler way. +- increased warning level to 4 and turned on detect 64 bit portability issues for VC2005. + May address [ 1677737 ] VS2005: /Wp64 warnings +- grosheck identified several problems with the Document copy. Many thanks for [ 1660367 ] +- Nice catch, and suggested fix, be Gilad Novik on the Printer dropping entities. + "[ 1600650 ] Bug when printing xml text" is now fixed. +- A subtle fix from Nicos Gollan in the tinystring initializer: + [ 1581449 ] Fix initialiser of TiXmlString::nullrep_ +- Great catch, although there isn't a submitter for the bug. [ 1475201 ] TinyXML parses entities in comments. + Comments should not, in fact, parse entities. Fixed the code path and added tests. +- We were not catching all the returns from ftell. Thanks to Bernard for catching that. + diff --git a/3rdparty/openctm/tools/tinyxml/readme.txt b/3rdparty/openctm/tools/tinyxml/readme.txt new file mode 100644 index 000000000..14ec3d2e0 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/readme.txt @@ -0,0 +1,530 @@ +/** @mainpage + +

    TinyXML

    + +TinyXML is a simple, small, C++ XML parser that can be easily +integrated into other programs. + +

    What it does.

    + +In brief, TinyXML parses an XML document, and builds from that a +Document Object Model (DOM) that can be read, modified, and saved. + +XML stands for "eXtensible Markup Language." It allows you to create +your own document markups. Where HTML does a very good job of marking +documents for browsers, XML allows you to define any kind of document +markup, for example a document that describes a "to do" list for an +organizer application. XML is a very structured and convenient format. +All those random file formats created to store application data can +all be replaced with XML. One parser for everything. + +The best place for the complete, correct, and quite frankly hard to +read spec is at +http://www.w3.org/TR/2004/REC-xml-20040204/. An intro to XML +(that I really like) can be found at +http://skew.org/xml/tutorial. + +There are different ways to access and interact with XML data. +TinyXML uses a Document Object Model (DOM), meaning the XML data is parsed +into a C++ objects that can be browsed and manipulated, and then +written to disk or another output stream. You can also construct an XML document +from scratch with C++ objects and write this to disk or another output +stream. + +TinyXML is designed to be easy and fast to learn. It is two headers +and four cpp files. Simply add these to your project and off you go. +There is an example file - xmltest.cpp - to get you started. + +TinyXML is released under the ZLib license, +so you can use it in open source or commercial code. The details +of the license are at the top of every source file. + +TinyXML attempts to be a flexible parser, but with truly correct and +compliant XML output. TinyXML should compile on any reasonably C++ +compliant system. It does not rely on exceptions or RTTI. It can be +compiled with or without STL support. TinyXML fully supports +the UTF-8 encoding, and the first 64k character entities. + + +

    What it doesn't do.

    + +TinyXML doesn't parse or use DTDs (Document Type Definitions) or XSLs +(eXtensible Stylesheet Language.) There are other parsers out there +(check out www.sourceforge.org, search for XML) that are much more fully +featured. But they are also much bigger, take longer to set up in +your project, have a higher learning curve, and often have a more +restrictive license. If you are working with browsers or have more +complete XML needs, TinyXML is not the parser for you. + +The following DTD syntax will not parse at this time in TinyXML: + +@verbatim + + ]> +@endverbatim + +because TinyXML sees this as a !DOCTYPE node with an illegally +embedded !ELEMENT node. This may be addressed in the future. + +

    Tutorials.

    + +For the impatient, here is a tutorial to get you going. A great way to get started, +but it is worth your time to read this (very short) manual completely. + +- @subpage tutorial0 + +

    Code Status.

    + +TinyXML is mature, tested code. It is very stable. If you find +bugs, please file a bug report on the sourceforge web site +(www.sourceforge.net/projects/tinyxml). We'll get them straightened +out as soon as possible. + +There are some areas of improvement; please check sourceforge if you are +interested in working on TinyXML. + +

    Related Projects

    + +TinyXML projects you may find useful! (Descriptions provided by the projects.) + +
      +
    • TinyXPath (http://tinyxpath.sourceforge.net). TinyXPath is a small footprint + XPath syntax decoder, written in C++.
    • +
    • TinyXML++ (http://code.google.com/p/ticpp/). TinyXML++ is a completely new + interface to TinyXML that uses MANY of the C++ strengths. Templates, + exceptions, and much better error handling.
    • +
    + +

    Features

    + +

    Using STL

    + +TinyXML can be compiled to use or not use STL. When using STL, TinyXML +uses the std::string class, and fully supports std::istream, std::ostream, +operator<<, and operator>>. Many API methods have both 'const char*' and +'const std::string&' forms. + +When STL support is compiled out, no STL files are included whatsoever. All +the string classes are implemented by TinyXML itself. API methods +all use the 'const char*' form for input. + +Use the compile time #define: + + TIXML_USE_STL + +to compile one version or the other. This can be passed by the compiler, +or set as the first line of "tinyxml.h". + +Note: If compiling the test code in Linux, setting the environment +variable TINYXML_USE_STL=YES/NO will control STL compilation. In the +Windows project file, STL and non STL targets are provided. In your project, +It's probably easiest to add the line "#define TIXML_USE_STL" as the first +line of tinyxml.h. + +

    UTF-8

    + +TinyXML supports UTF-8 allowing to manipulate XML files in any language. TinyXML +also supports "legacy mode" - the encoding used before UTF-8 support and +probably best described as "extended ascii". + +Normally, TinyXML will try to detect the correct encoding and use it. However, +by setting the value of TIXML_DEFAULT_ENCODING in the header file, TinyXML +can be forced to always use one encoding. + +TinyXML will assume Legacy Mode until one of the following occurs: +
      +
    1. If the non-standard but common "UTF-8 lead bytes" (0xef 0xbb 0xbf) + begin the file or data stream, TinyXML will read it as UTF-8.
    2. +
    3. If the declaration tag is read, and it has an encoding="UTF-8", then + TinyXML will read it as UTF-8.
    4. +
    5. If the declaration tag is read, and it has no encoding specified, then TinyXML will + read it as UTF-8.
    6. +
    7. If the declaration tag is read, and it has an encoding="something else", then TinyXML + will read it as Legacy Mode. In legacy mode, TinyXML will work as it did before. It's + not clear what that mode does exactly, but old content should keep working.
    8. +
    9. Until one of the above criteria is met, TinyXML runs in Legacy Mode.
    10. +
    + +What happens if the encoding is incorrectly set or detected? TinyXML will try +to read and pass through text seen as improperly encoded. You may get some strange results or +mangled characters. You may want to force TinyXML to the correct mode. + +You may force TinyXML to Legacy Mode by using LoadFile( TIXML_ENCODING_LEGACY ) or +LoadFile( filename, TIXML_ENCODING_LEGACY ). You may force it to use legacy mode all +the time by setting TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Likewise, you may +force it to TIXML_ENCODING_UTF8 with the same technique. + +For English users, using English XML, UTF-8 is the same as low-ASCII. You +don't need to be aware of UTF-8 or change your code in any way. You can think +of UTF-8 as a "superset" of ASCII. + +UTF-8 is not a double byte format - but it is a standard encoding of Unicode! +TinyXML does not use or directly support wchar, TCHAR, or Microsoft's _UNICODE at this time. +It is common to see the term "Unicode" improperly refer to UTF-16, a wide byte encoding +of unicode. This is a source of confusion. + +For "high-ascii" languages - everything not English, pretty much - TinyXML can +handle all languages, at the same time, as long as the XML is encoded +in UTF-8. That can be a little tricky, older programs and operating systems +tend to use the "default" or "traditional" code page. Many apps (and almost all +modern ones) can output UTF-8, but older or stubborn (or just broken) ones +still output text in the default code page. + +For example, Japanese systems traditionally use SHIFT-JIS encoding. +Text encoded as SHIFT-JIS can not be read by TinyXML. +A good text editor can import SHIFT-JIS and then save as UTF-8. + +The Skew.org link does a great +job covering the encoding issue. + +The test file "utf8test.xml" is an XML containing English, Spanish, Russian, +and Simplified Chinese. (Hopefully they are translated correctly). The file +"utf8test.gif" is a screen capture of the XML file, rendered in IE. Note that +if you don't have the correct fonts (Simplified Chinese or Russian) on your +system, you won't see output that matches the GIF file even if you can parse +it correctly. Also note that (at least on my Windows machine) console output +is in a Western code page, so that Print() or printf() cannot correctly display +the file. This is not a bug in TinyXML - just an OS issue. No data is lost or +destroyed by TinyXML. The console just doesn't render UTF-8. + + +

    Entities

    +TinyXML recognizes the pre-defined "character entities", meaning special +characters. Namely: + +@verbatim + & & + < < + > > + " " + ' ' +@endverbatim + +These are recognized when the XML document is read, and translated to there +UTF-8 equivalents. For instance, text with the XML of: + +@verbatim + Far & Away +@endverbatim + +will have the Value() of "Far & Away" when queried from the TiXmlText object, +and will be written back to the XML stream/file as an ampersand. Older versions +of TinyXML "preserved" character entities, but the newer versions will translate +them into characters. + +Additionally, any character can be specified by its Unicode code point: +The syntax " " or " " are both to the non-breaking space characher. + +

    Printing

    +TinyXML can print output in several different ways that all have strengths and limitations. + +- Print( FILE* ). Output to a std-C stream, which includes all C files as well as stdout. + - "Pretty prints", but you don't have control over printing options. + - The output is streamed directly to the FILE object, so there is no memory overhead + in the TinyXML code. + - used by Print() and SaveFile() + +- operator<<. Output to a c++ stream. + - Integrates with standart C++ iostreams. + - Outputs in "network printing" mode without line breaks. Good for network transmission + and moving XML between C++ objects, but hard for a human to read. + +- TiXmlPrinter. Output to a std::string or memory buffer. + - API is less concise + - Future printing options will be put here. + - Printing may change slightly in future versions as it is refined and expanded. + +

    Streams

    +With TIXML_USE_STL on TinyXML supports C++ streams (operator <<,>>) streams as well +as C (FILE*) streams. There are some differences that you may need to be aware of. + +C style output: + - based on FILE* + - the Print() and SaveFile() methods + + Generates formatted output, with plenty of white space, intended to be as + human-readable as possible. They are very fast, and tolerant of ill formed + XML documents. For example, an XML document that contains 2 root elements + and 2 declarations, will still print. + +C style input: + - based on FILE* + - the Parse() and LoadFile() methods + + A fast, tolerant read. Use whenever you don't need the C++ streams. + +C++ style output: + - based on std::ostream + - operator<< + + Generates condensed output, intended for network transmission rather than + readability. Depending on your system's implementation of the ostream class, + these may be somewhat slower. (Or may not.) Not tolerant of ill formed XML: + a document should contain the correct one root element. Additional root level + elements will not be streamed out. + +C++ style input: + - based on std::istream + - operator>> + + Reads XML from a stream, making it useful for network transmission. The tricky + part is knowing when the XML document is complete, since there will almost + certainly be other data in the stream. TinyXML will assume the XML data is + complete after it reads the root element. Put another way, documents that + are ill-constructed with more than one root element will not read correctly. + Also note that operator>> is somewhat slower than Parse, due to both + implementation of the STL and limitations of TinyXML. + +

    White space

    +The world simply does not agree on whether white space should be kept, or condensed. +For example, pretend the '_' is a space, and look at "Hello____world". HTML, and +at least some XML parsers, will interpret this as "Hello_world". They condense white +space. Some XML parsers do not, and will leave it as "Hello____world". (Remember +to keep pretending the _ is a space.) Others suggest that __Hello___world__ should become +Hello___world. + +It's an issue that hasn't been resolved to my satisfaction. TinyXML supports the +first 2 approaches. Call TiXmlBase::SetCondenseWhiteSpace( bool ) to set the desired behavior. +The default is to condense white space. + +If you change the default, you should call TiXmlBase::SetCondenseWhiteSpace( bool ) +before making any calls to Parse XML data, and I don't recommend changing it after +it has been set. + + +

    Handles

    + +Where browsing an XML document in a robust way, it is important to check +for null returns from method calls. An error safe implementation can +generate a lot of code like: + +@verbatim +TiXmlElement* root = document.FirstChildElement( "Document" ); +if ( root ) +{ + TiXmlElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + TiXmlElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + TiXmlElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. +@endverbatim + +Handles have been introduced to clean this up. Using the TiXmlHandle class, +the previous code reduces to: + +@verbatim +TiXmlHandle docHandle( &document ); +TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); +if ( child2 ) +{ + // do something useful +@endverbatim + +Which is much easier to deal with. See TiXmlHandle for more information. + + +

    Row and Column tracking

    +Being able to track nodes and attributes back to their origin location +in source files can be very important for some applications. Additionally, +knowing where parsing errors occured in the original source can be very +time saving. + +TinyXML can tracks the row and column origin of all nodes and attributes +in a text file. The TiXmlBase::Row() and TiXmlBase::Column() methods return +the origin of the node in the source text. The correct tabs can be +configured in TiXmlDocument::SetTabSize(). + + +

    Using and Installing

    + +To Compile and Run xmltest: + +A Linux Makefile and a Windows Visual C++ .dsw file is provided. +Simply compile and run. It will write the file demotest.xml to your +disk and generate output on the screen. It also tests walking the +DOM by printing out the number of nodes found using different +techniques. + +The Linux makefile is very generic and runs on many systems - it +is currently tested on mingw and +MacOSX. You do not need to run 'make depend'. The dependecies have been +hard coded. + +

    Windows project file for VC6

    +
      +
    • tinyxml: tinyxml library, non-STL
    • +
    • tinyxmlSTL: tinyxml library, STL
    • +
    • tinyXmlTest: test app, non-STL
    • +
    • tinyXmlTestSTL: test app, STL
    • +
    + +

    Makefile

    +At the top of the makefile you can set: + +PROFILE, DEBUG, and TINYXML_USE_STL. Details (such that they are) are in +the makefile. + +In the tinyxml directory, type "make clean" then "make". The executable +file 'xmltest' will be created. + + + +

    To Use in an Application:

    + +Add tinyxml.cpp, tinyxml.h, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, and tinystr.h to your +project or make file. That's it! It should compile on any reasonably +compliant C++ system. You do not need to enable exceptions or +RTTI for TinyXML. + + +

    How TinyXML works.

    + +An example is probably the best way to go. Take: +@verbatim + + + + Go to the Toy store! + Do bills + +@endverbatim + +Its not much of a To Do list, but it will do. To read this file +(say "demo.xml") you would create a document, and parse it in: +@verbatim + TiXmlDocument doc( "demo.xml" ); + doc.LoadFile(); +@endverbatim + +And its ready to go. Now lets look at some lines and how they +relate to the DOM. + +@verbatim + +@endverbatim + + The first line is a declaration, and gets turned into the + TiXmlDeclaration class. It will be the first child of the + document node. + + This is the only directive/special tag parsed by by TinyXML. + Generally directive tags are stored in TiXmlUnknown so the + commands wont be lost when it is saved back to disk. + +@verbatim + +@endverbatim + + A comment. Will become a TiXmlComment object. + +@verbatim + +@endverbatim + + The "ToDo" tag defines a TiXmlElement object. This one does not have + any attributes, but does contain 2 other elements. + +@verbatim + +@endverbatim + + Creates another TiXmlElement which is a child of the "ToDo" element. + This element has 1 attribute, with the name "priority" and the value + "1". + +@verbatim +Go to the +@endverbatim + + A TiXmlText. This is a leaf node and cannot contain other nodes. + It is a child of the "Item" TiXmlElement. + +@verbatim + +@endverbatim + + + Another TiXmlElement, this one a child of the "Item" element. + +Etc. + +Looking at the entire object tree, you end up with: +@verbatim +TiXmlDocument "demo.xml" + TiXmlDeclaration "version='1.0'" "standalone=no" + TiXmlComment " Our to do list data" + TiXmlElement "ToDo" + TiXmlElement "Item" Attribtutes: priority = 1 + TiXmlText "Go to the " + TiXmlElement "bold" + TiXmlText "Toy store!" + TiXmlElement "Item" Attributes: priority=2 + TiXmlText "Do bills" +@endverbatim + +

    Documentation

    + +The documentation is build with Doxygen, using the 'dox' +configuration file. + +

    License

    + +TinyXML is released under the zlib license: + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +

    References

    + +The World Wide Web Consortium is the definitive standard body for +XML, and there web pages contain huge amounts of information. + +The definitive spec: +http://www.w3.org/TR/2004/REC-xml-20040204/ + +I also recommend "XML Pocket Reference" by Robert Eckstein and published by +OReilly...the book that got the whole thing started. + +

    Contributors, Contacts, and a Brief History

    + +Thanks very much to everyone who sends suggestions, bugs, ideas, and +encouragement. It all helps, and makes this project fun. A special thanks +to the contributors on the web pages that keep it lively. + +So many people have sent in bugs and ideas, that rather than list here +we try to give credit due in the "changes.txt" file. + +TinyXML was originally written by Lee Thomason. (Often the "I" still +in the documentation.) Lee reviews changes and releases new versions, +with the help of Yves Berquin, Andrew Ellerton, and the tinyXml community. + +We appreciate your suggestions, and would love to know if you +use TinyXML. Hopefully you will enjoy it and find it useful. +Please post questions, comments, file bugs, or contact us at: + +www.sourceforge.net/projects/tinyxml + +Lee Thomason, Yves Berquin, Andrew Ellerton +*/ diff --git a/3rdparty/openctm/tools/tinyxml/tinystr.cpp b/3rdparty/openctm/tools/tinyxml/tinystr.cpp new file mode 100644 index 000000000..681250714 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/tinystr.cpp @@ -0,0 +1,116 @@ +/* +www.sourceforge.net/projects/tinyxml +Original file by Yves Berquin. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +/* + * THIS FILE WAS ALTERED BY Tyge Løvset, 7. April 2005. + */ + + +#ifndef TIXML_USE_STL + +#include "tinystr.h" + +// Error value for find primitive +const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); + + +// Null rep. +TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; + + +void TiXmlString::reserve (size_type cap) +{ + if (cap > capacity()) + { + TiXmlString tmp; + tmp.init(length(), cap); + memcpy(tmp.start(), data(), length()); + swap(tmp); + } +} + + +TiXmlString& TiXmlString::assign(const char* str, size_type len) +{ + size_type cap = capacity(); + if (len > cap || cap > 3*(len + 8)) + { + TiXmlString tmp; + tmp.init(len); + memcpy(tmp.start(), str, len); + swap(tmp); + } + else + { + memmove(start(), str, len); + set_size(len); + } + return *this; +} + + +TiXmlString& TiXmlString::append(const char* str, size_type len) +{ + size_type newsize = length() + len; + if (newsize > capacity()) + { + reserve (newsize + capacity()); + } + memmove(finish(), str, len); + set_size(newsize); + return *this; +} + + +TiXmlString operator + (const TiXmlString & a, const TiXmlString & b) +{ + TiXmlString tmp; + tmp.reserve(a.length() + b.length()); + tmp += a; + tmp += b; + return tmp; +} + +TiXmlString operator + (const TiXmlString & a, const char* b) +{ + TiXmlString tmp; + TiXmlString::size_type b_len = static_cast( strlen(b) ); + tmp.reserve(a.length() + b_len); + tmp += a; + tmp.append(b, b_len); + return tmp; +} + +TiXmlString operator + (const char* a, const TiXmlString & b) +{ + TiXmlString tmp; + TiXmlString::size_type a_len = static_cast( strlen(a) ); + tmp.reserve(a_len + b.length()); + tmp.append(a, a_len); + tmp += b; + return tmp; +} + + +#endif // TIXML_USE_STL diff --git a/3rdparty/openctm/tools/tinyxml/tinystr.h b/3rdparty/openctm/tools/tinyxml/tinystr.h new file mode 100644 index 000000000..3c2aa9d54 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/tinystr.h @@ -0,0 +1,319 @@ +/* +www.sourceforge.net/projects/tinyxml +Original file by Yves Berquin. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +/* + * THIS FILE WAS ALTERED BY Tyge Lovset, 7. April 2005. + * + * - completely rewritten. compact, clean, and fast implementation. + * - sizeof(TiXmlString) = pointer size (4 bytes on 32-bit systems) + * - fixed reserve() to work as per specification. + * - fixed buggy compares operator==(), operator<(), and operator>() + * - fixed operator+=() to take a const ref argument, following spec. + * - added "copy" constructor with length, and most compare operators. + * - added swap(), clear(), size(), capacity(), operator+(). + */ + +#ifndef TIXML_USE_STL + +#ifndef TIXML_STRING_INCLUDED +#define TIXML_STRING_INCLUDED + +#include +#include + +/* The support for explicit isn't that universal, and it isn't really + required - it is used to check that the TiXmlString class isn't incorrectly + used. Be nice to old compilers and macro it here: +*/ +#if defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + #define TIXML_EXPLICIT explicit +#elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + #define TIXML_EXPLICIT explicit +#else + #define TIXML_EXPLICIT +#endif + + +/* + TiXmlString is an emulation of a subset of the std::string template. + Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. + Only the member functions relevant to the TinyXML project have been implemented. + The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase + a string and there's no more room, we allocate a buffer twice as big as we need. +*/ +class TiXmlString +{ + public : + // The size type used + typedef size_t size_type; + + // Error value for find primitive + static const size_type npos; // = -1; + + + // TiXmlString empty constructor + TiXmlString () : rep_(&nullrep_) + { + } + + // TiXmlString copy constructor + TiXmlString ( const TiXmlString & copy) : rep_(0) + { + init(copy.length()); + memcpy(start(), copy.data(), length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) + { + init( static_cast( strlen(copy) )); + memcpy(start(), copy, length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) + { + init(len); + memcpy(start(), str, len); + } + + // TiXmlString destructor + ~TiXmlString () + { + quit(); + } + + // = operator + TiXmlString& operator = (const char * copy) + { + return assign( copy, (size_type)strlen(copy)); + } + + // = operator + TiXmlString& operator = (const TiXmlString & copy) + { + return assign(copy.start(), copy.length()); + } + + + // += operator. Maps to append + TiXmlString& operator += (const char * suffix) + { + return append(suffix, static_cast( strlen(suffix) )); + } + + // += operator. Maps to append + TiXmlString& operator += (char single) + { + return append(&single, 1); + } + + // += operator. Maps to append + TiXmlString& operator += (const TiXmlString & suffix) + { + return append(suffix.data(), suffix.length()); + } + + + // Convert a TiXmlString into a null-terminated char * + const char * c_str () const { return rep_->str; } + + // Convert a TiXmlString into a char * (need not be null terminated). + const char * data () const { return rep_->str; } + + // Return the length of a TiXmlString + size_type length () const { return rep_->size; } + + // Alias for length() + size_type size () const { return rep_->size; } + + // Checks if a TiXmlString is empty + bool empty () const { return rep_->size == 0; } + + // Return capacity of string + size_type capacity () const { return rep_->capacity; } + + + // single char extraction + const char& at (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // [] operator + char& operator [] (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // find a char in a string. Return TiXmlString::npos if not found + size_type find (char lookup) const + { + return find(lookup, 0); + } + + // find a char in a string from an offset. Return TiXmlString::npos if not found + size_type find (char tofind, size_type offset) const + { + if (offset >= length()) return npos; + + for (const char* p = c_str() + offset; *p != '\0'; ++p) + { + if (*p == tofind) return static_cast< size_type >( p - c_str() ); + } + return npos; + } + + void clear () + { + //Lee: + //The original was just too strange, though correct: + // TiXmlString().swap(*this); + //Instead use the quit & re-init: + quit(); + init(0,0); + } + + /* Function to reserve a big amount of data when we know we'll need it. Be aware that this + function DOES NOT clear the content of the TiXmlString if any exists. + */ + void reserve (size_type cap); + + TiXmlString& assign (const char* str, size_type len); + + TiXmlString& append (const char* str, size_type len); + + void swap (TiXmlString& other) + { + Rep* r = rep_; + rep_ = other.rep_; + other.rep_ = r; + } + + private: + + void init(size_type sz) { init(sz, sz); } + void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } + char* start() const { return rep_->str; } + char* finish() const { return rep_->str + rep_->size; } + + struct Rep + { + size_type size, capacity; + char str[1]; + }; + + void init(size_type sz, size_type cap) + { + if (cap) + { + // Lee: the original form: + // rep_ = static_cast(operator new(sizeof(Rep) + cap)); + // doesn't work in some cases of new being overloaded. Switching + // to the normal allocation, although use an 'int' for systems + // that are overly picky about structure alignment. + const size_type bytesNeeded = sizeof(Rep) + cap; + const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); + rep_ = reinterpret_cast( new int[ intsNeeded ] ); + + rep_->str[ rep_->size = sz ] = '\0'; + rep_->capacity = cap; + } + else + { + rep_ = &nullrep_; + } + } + + void quit() + { + if (rep_ != &nullrep_) + { + // The rep_ is really an array of ints. (see the allocator, above). + // Cast it back before delete, so the compiler won't incorrectly call destructors. + delete [] ( reinterpret_cast( rep_ ) ); + } + } + + Rep * rep_; + static Rep nullrep_; + +} ; + + +inline bool operator == (const TiXmlString & a, const TiXmlString & b) +{ + return ( a.length() == b.length() ) // optimization on some platforms + && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare +} +inline bool operator < (const TiXmlString & a, const TiXmlString & b) +{ + return strcmp(a.c_str(), b.c_str()) < 0; +} + +inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } +inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } +inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } +inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } + +inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } +inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } +inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } +inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } + +TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); +TiXmlString operator + (const TiXmlString & a, const char* b); +TiXmlString operator + (const char* a, const TiXmlString & b); + + +/* + TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. + Only the operators that we need for TinyXML have been developped. +*/ +class TiXmlOutStream : public TiXmlString +{ +public : + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const TiXmlString & in) + { + *this += in; + return *this; + } + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const char * in) + { + *this += in; + return *this; + } + +} ; + +#endif // TIXML_STRING_INCLUDED +#endif // TIXML_USE_STL diff --git a/3rdparty/openctm/tools/tinyxml/tinyxml.cpp b/3rdparty/openctm/tools/tinyxml/tinyxml.cpp new file mode 100644 index 000000000..5de21f6de --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/tinyxml.cpp @@ -0,0 +1,1888 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#include + +#ifdef TIXML_USE_STL +#include +#include +#endif + +#include "tinyxml.h" + + +bool TiXmlBase::condenseWhiteSpace = true; + +// Microsoft compiler security +FILE* TiXmlFOpen( const char* filename, const char* mode ) +{ + #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) + FILE* fp = 0; + errno_t err = fopen_s( &fp, filename, mode ); + if ( !err && fp ) + return fp; + return 0; + #else + return fopen( filename, mode ); + #endif +} + +void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) +{ + int i=0; + + while( i<(int)str.length() ) + { + unsigned char c = (unsigned char) str[i]; + + if ( c == '&' + && i < ( (int)str.length() - 2 ) + && str[i+1] == '#' + && str[i+2] == 'x' ) + { + // Hexadecimal character reference. + // Pass through unchanged. + // © -- copyright symbol, for example. + // + // The -1 is a bug fix from Rob Laveaux. It keeps + // an overflow from happening if there is no ';'. + // There are actually 2 ways to exit this loop - + // while fails (error case) and break (semicolon found). + // However, there is no mechanism (currently) for + // this function to return an error. + while ( i<(int)str.length()-1 ) + { + outString->append( str.c_str() + i, 1 ); + ++i; + if ( str[i] == ';' ) + break; + } + } + else if ( c == '&' ) + { + outString->append( entity[0].str, entity[0].strLength ); + ++i; + } + else if ( c == '<' ) + { + outString->append( entity[1].str, entity[1].strLength ); + ++i; + } + else if ( c == '>' ) + { + outString->append( entity[2].str, entity[2].strLength ); + ++i; + } + else if ( c == '\"' ) + { + outString->append( entity[3].str, entity[3].strLength ); + ++i; + } + else if ( c == '\'' ) + { + outString->append( entity[4].str, entity[4].strLength ); + ++i; + } + else if ( c < 32 ) + { + // Easy pass at non-alpha/numeric/symbol + // Below 32 is symbolic. + char buf[ 32 ]; + + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); + #else + sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); + #endif + + //*ME: warning C4267: convert 'size_t' to 'int' + //*ME: Int-Cast to make compiler happy ... + outString->append( buf, (int)strlen( buf ) ); + ++i; + } + else + { + //char realc = (char) c; + //outString->append( &realc, 1 ); + *outString += (char) c; // somewhat more efficient function call. + ++i; + } + } +} + + +TiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase() +{ + parent = 0; + type = _type; + firstChild = 0; + lastChild = 0; + prev = 0; + next = 0; +} + + +TiXmlNode::~TiXmlNode() +{ + TiXmlNode* node = firstChild; + TiXmlNode* temp = 0; + + while ( node ) + { + temp = node; + node = node->next; + delete temp; + } +} + + +void TiXmlNode::CopyTo( TiXmlNode* target ) const +{ + target->SetValue (value.c_str() ); + target->userData = userData; +} + + +void TiXmlNode::Clear() +{ + TiXmlNode* node = firstChild; + TiXmlNode* temp = 0; + + while ( node ) + { + temp = node; + node = node->next; + delete temp; + } + + firstChild = 0; + lastChild = 0; +} + + +TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) +{ + assert( node->parent == 0 || node->parent == this ); + assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() ); + + if ( node->Type() == TiXmlNode::DOCUMENT ) + { + delete node; + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + node->parent = this; + + node->prev = lastChild; + node->next = 0; + + if ( lastChild ) + lastChild->next = node; + else + firstChild = node; // it was an empty list. + + lastChild = node; + return node; +} + + +TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) +{ + if ( addThis.Type() == TiXmlNode::DOCUMENT ) + { + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + TiXmlNode* node = addThis.Clone(); + if ( !node ) + return 0; + + return LinkEndChild( node ); +} + + +TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) +{ + if ( !beforeThis || beforeThis->parent != this ) { + return 0; + } + if ( addThis.Type() == TiXmlNode::DOCUMENT ) + { + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + TiXmlNode* node = addThis.Clone(); + if ( !node ) + return 0; + node->parent = this; + + node->next = beforeThis; + node->prev = beforeThis->prev; + if ( beforeThis->prev ) + { + beforeThis->prev->next = node; + } + else + { + assert( firstChild == beforeThis ); + firstChild = node; + } + beforeThis->prev = node; + return node; +} + + +TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) +{ + if ( !afterThis || afterThis->parent != this ) { + return 0; + } + if ( addThis.Type() == TiXmlNode::DOCUMENT ) + { + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + TiXmlNode* node = addThis.Clone(); + if ( !node ) + return 0; + node->parent = this; + + node->prev = afterThis; + node->next = afterThis->next; + if ( afterThis->next ) + { + afterThis->next->prev = node; + } + else + { + assert( lastChild == afterThis ); + lastChild = node; + } + afterThis->next = node; + return node; +} + + +TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) +{ + if ( replaceThis->parent != this ) + return 0; + + TiXmlNode* node = withThis.Clone(); + if ( !node ) + return 0; + + node->next = replaceThis->next; + node->prev = replaceThis->prev; + + if ( replaceThis->next ) + replaceThis->next->prev = node; + else + lastChild = node; + + if ( replaceThis->prev ) + replaceThis->prev->next = node; + else + firstChild = node; + + delete replaceThis; + node->parent = this; + return node; +} + + +bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) +{ + if ( removeThis->parent != this ) + { + assert( 0 ); + return false; + } + + if ( removeThis->next ) + removeThis->next->prev = removeThis->prev; + else + lastChild = removeThis->prev; + + if ( removeThis->prev ) + removeThis->prev->next = removeThis->next; + else + firstChild = removeThis->next; + + delete removeThis; + return true; +} + +const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = firstChild; node; node = node->next ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +const TiXmlNode* TiXmlNode::LastChild( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = lastChild; node; node = node->prev ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +const TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const +{ + if ( !previous ) + { + return FirstChild(); + } + else + { + assert( previous->parent == this ); + return previous->NextSibling(); + } +} + + +const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const +{ + if ( !previous ) + { + return FirstChild( val ); + } + else + { + assert( previous->parent == this ); + return previous->NextSibling( val ); + } +} + + +const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = next; node; node = node->next ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +const TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = prev; node; node = node->prev ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +void TiXmlElement::RemoveAttribute( const char * name ) +{ + #ifdef TIXML_USE_STL + TIXML_STRING str( name ); + TiXmlAttribute* node = attributeSet.Find( str ); + #else + TiXmlAttribute* node = attributeSet.Find( name ); + #endif + if ( node ) + { + attributeSet.Remove( node ); + delete node; + } +} + +const TiXmlElement* TiXmlNode::FirstChildElement() const +{ + const TiXmlNode* node; + + for ( node = FirstChild(); + node; + node = node->NextSibling() ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const +{ + const TiXmlNode* node; + + for ( node = FirstChild( _value ); + node; + node = node->NextSibling( _value ) ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlElement* TiXmlNode::NextSiblingElement() const +{ + const TiXmlNode* node; + + for ( node = NextSibling(); + node; + node = node->NextSibling() ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const +{ + const TiXmlNode* node; + + for ( node = NextSibling( _value ); + node; + node = node->NextSibling( _value ) ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlDocument* TiXmlNode::GetDocument() const +{ + const TiXmlNode* node; + + for( node = this; node; node = node->parent ) + { + if ( node->ToDocument() ) + return node->ToDocument(); + } + return 0; +} + + +TiXmlElement::TiXmlElement (const char * _value) + : TiXmlNode( TiXmlNode::ELEMENT ) +{ + firstChild = lastChild = 0; + value = _value; +} + + +#ifdef TIXML_USE_STL +TiXmlElement::TiXmlElement( const std::string& _value ) + : TiXmlNode( TiXmlNode::ELEMENT ) +{ + firstChild = lastChild = 0; + value = _value; +} +#endif + + +TiXmlElement::TiXmlElement( const TiXmlElement& copy) + : TiXmlNode( TiXmlNode::ELEMENT ) +{ + firstChild = lastChild = 0; + copy.CopyTo( this ); +} + + +void TiXmlElement::operator=( const TiXmlElement& base ) +{ + ClearThis(); + base.CopyTo( this ); +} + + +TiXmlElement::~TiXmlElement() +{ + ClearThis(); +} + + +void TiXmlElement::ClearThis() +{ + Clear(); + while( attributeSet.First() ) + { + TiXmlAttribute* node = attributeSet.First(); + attributeSet.Remove( node ); + delete node; + } +} + + +const char* TiXmlElement::Attribute( const char* name ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( node ) + return node->Value(); + return 0; +} + + +#ifdef TIXML_USE_STL +const std::string* TiXmlElement::Attribute( const std::string& name ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( node ) + return &node->ValueStr(); + return 0; +} +#endif + + +const char* TiXmlElement::Attribute( const char* name, int* i ) const +{ + const char* s = Attribute( name ); + if ( i ) + { + if ( s ) { + *i = atoi( s ); + } + else { + *i = 0; + } + } + return s; +} + + +#ifdef TIXML_USE_STL +const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const +{ + const std::string* s = Attribute( name ); + if ( i ) + { + if ( s ) { + *i = atoi( s->c_str() ); + } + else { + *i = 0; + } + } + return s; +} +#endif + + +const char* TiXmlElement::Attribute( const char* name, double* d ) const +{ + const char* s = Attribute( name ); + if ( d ) + { + if ( s ) { + *d = atof( s ); + } + else { + *d = 0; + } + } + return s; +} + + +#ifdef TIXML_USE_STL +const std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const +{ + const std::string* s = Attribute( name ); + if ( d ) + { + if ( s ) { + *d = atof( s->c_str() ); + } + else { + *d = 0; + } + } + return s; +} +#endif + + +int TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + return node->QueryIntValue( ival ); +} + + +#ifdef TIXML_USE_STL +int TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + return node->QueryIntValue( ival ); +} +#endif + + +int TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + return node->QueryDoubleValue( dval ); +} + + +#ifdef TIXML_USE_STL +int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + return node->QueryDoubleValue( dval ); +} +#endif + + +void TiXmlElement::SetAttribute( const char * name, int val ) +{ + char buf[64]; + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF( buf, sizeof(buf), "%d", val ); + #else + sprintf( buf, "%d", val ); + #endif + SetAttribute( name, buf ); +} + + +#ifdef TIXML_USE_STL +void TiXmlElement::SetAttribute( const std::string& name, int val ) +{ + std::ostringstream oss; + oss << val; + SetAttribute( name, oss.str() ); +} +#endif + + +void TiXmlElement::SetDoubleAttribute( const char * name, double val ) +{ + char buf[256]; + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF( buf, sizeof(buf), "%f", val ); + #else + sprintf( buf, "%f", val ); + #endif + SetAttribute( name, buf ); +} + + +void TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) +{ + #ifdef TIXML_USE_STL + TIXML_STRING _name( cname ); + TIXML_STRING _value( cvalue ); + #else + const char* _name = cname; + const char* _value = cvalue; + #endif + + TiXmlAttribute* node = attributeSet.Find( _name ); + if ( node ) + { + node->SetValue( _value ); + return; + } + + TiXmlAttribute* attrib = new TiXmlAttribute( cname, cvalue ); + if ( attrib ) + { + attributeSet.Add( attrib ); + } + else + { + TiXmlDocument* document = GetDocument(); + if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN ); + } +} + + +#ifdef TIXML_USE_STL +void TiXmlElement::SetAttribute( const std::string& name, const std::string& _value ) +{ + TiXmlAttribute* node = attributeSet.Find( name ); + if ( node ) + { + node->SetValue( _value ); + return; + } + + TiXmlAttribute* attrib = new TiXmlAttribute( name, _value ); + if ( attrib ) + { + attributeSet.Add( attrib ); + } + else + { + TiXmlDocument* document = GetDocument(); + if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN ); + } +} +#endif + + +void TiXmlElement::Print( FILE* cfile, int depth ) const +{ + int i; + assert( cfile ); + for ( i=0; iNext() ) + { + fprintf( cfile, " " ); + attrib->Print( cfile, depth ); + } + + // There are 3 different formatting approaches: + // 1) An element without children is printed as a node + // 2) An element with only a text child is printed as text + // 3) An element with children is printed on multiple lines. + TiXmlNode* node; + if ( !firstChild ) + { + fprintf( cfile, " />" ); + } + else if ( firstChild == lastChild && firstChild->ToText() ) + { + fprintf( cfile, ">" ); + firstChild->Print( cfile, depth + 1 ); + fprintf( cfile, "", value.c_str() ); + } + else + { + fprintf( cfile, ">" ); + + for ( node = firstChild; node; node=node->NextSibling() ) + { + if ( !node->ToText() ) + { + fprintf( cfile, "\n" ); + } + node->Print( cfile, depth+1 ); + } + fprintf( cfile, "\n" ); + for( i=0; i", value.c_str() ); + } +} + + +void TiXmlElement::CopyTo( TiXmlElement* target ) const +{ + // superclass: + TiXmlNode::CopyTo( target ); + + // Element class: + // Clone the attributes, then clone the children. + const TiXmlAttribute* attribute = 0; + for( attribute = attributeSet.First(); + attribute; + attribute = attribute->Next() ) + { + target->SetAttribute( attribute->Name(), attribute->Value() ); + } + + TiXmlNode* node = 0; + for ( node = firstChild; node; node = node->NextSibling() ) + { + target->LinkEndChild( node->Clone() ); + } +} + +bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const +{ + if ( visitor->VisitEnter( *this, attributeSet.First() ) ) + { + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + if ( !node->Accept( visitor ) ) + break; + } + } + return visitor->VisitExit( *this ); +} + + +TiXmlNode* TiXmlElement::Clone() const +{ + TiXmlElement* clone = new TiXmlElement( Value() ); + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +const char* TiXmlElement::GetText() const +{ + const TiXmlNode* child = this->FirstChild(); + if ( child ) { + const TiXmlText* childText = child->ToText(); + if ( childText ) { + return childText->Value(); + } + } + return 0; +} + + +TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT ) +{ + tabsize = 4; + useMicrosoftBOM = false; + ClearError(); +} + +TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) +{ + tabsize = 4; + useMicrosoftBOM = false; + value = documentName; + ClearError(); +} + + +#ifdef TIXML_USE_STL +TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) +{ + tabsize = 4; + useMicrosoftBOM = false; + value = documentName; + ClearError(); +} +#endif + + +TiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::DOCUMENT ) +{ + copy.CopyTo( this ); +} + + +void TiXmlDocument::operator=( const TiXmlDocument& copy ) +{ + Clear(); + copy.CopyTo( this ); +} + + +bool TiXmlDocument::LoadFile( TiXmlEncoding encoding ) +{ + // See STL_STRING_BUG below. + //StringToBuffer buf( value ); + + return LoadFile( Value(), encoding ); +} + + +bool TiXmlDocument::SaveFile() const +{ + // See STL_STRING_BUG below. +// StringToBuffer buf( value ); +// +// if ( buf.buffer && SaveFile( buf.buffer ) ) +// return true; +// +// return false; + return SaveFile( Value() ); +} + +bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) +{ + // There was a really terrifying little bug here. The code: + // value = filename + // in the STL case, cause the assignment method of the std::string to + // be called. What is strange, is that the std::string had the same + // address as it's c_str() method, and so bad things happen. Looks + // like a bug in the Microsoft STL implementation. + // Add an extra string to avoid the crash. + TIXML_STRING filename( _filename ); + value = filename; + + // reading in binary mode so that tinyxml can normalize the EOL + FILE* file = TiXmlFOpen( value.c_str (), "rb" ); + + if ( file ) + { + bool result = LoadFile( file, encoding ); + fclose( file ); + return result; + } + else + { + SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } +} + +bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) +{ + if ( !file ) + { + SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Delete the existing data: + Clear(); + location.Clear(); + + // Get the file size, so we can pre-allocate the string. HUGE speed impact. + long length = 0; + fseek( file, 0, SEEK_END ); + length = ftell( file ); + fseek( file, 0, SEEK_SET ); + + // Strange case, but good to handle up front. + if ( length <= 0 ) + { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // If we have a file, assume it is all one big XML file, and read it in. + // The document parser may decide the document ends sooner than the entire file, however. + TIXML_STRING data; + data.reserve( length ); + + // Subtle bug here. TinyXml did use fgets. But from the XML spec: + // 2.11 End-of-Line Handling + // + // + // ...the XML processor MUST behave as if it normalized all line breaks in external + // parsed entities (including the document entity) on input, before parsing, by translating + // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to + // a single #xA character. + // + // + // It is not clear fgets does that, and certainly isn't clear it works cross platform. + // Generally, you expect fgets to translate from the convention of the OS to the c/unix + // convention, and not work generally. + + /* + while( fgets( buf, sizeof(buf), file ) ) + { + data += buf; + } + */ + + char* buf = new char[ length+1 ]; + buf[0] = 0; + + if ( fread( buf, length, 1, file ) != 1 ) { + delete [] buf; + SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + const char* lastPos = buf; + const char* p = buf; + + buf[length] = 0; + while( *p ) { + assert( p < (buf+length) ); + if ( *p == 0xa ) { + // Newline character. No special rules for this. Append all the characters + // since the last string, and include the newline. + data.append( lastPos, (p-lastPos+1) ); // append, include the newline + ++p; // move past the newline + lastPos = p; // and point to the new buffer (may be 0) + assert( p <= (buf+length) ); + } + else if ( *p == 0xd ) { + // Carriage return. Append what we have so far, then + // handle moving forward in the buffer. + if ( (p-lastPos) > 0 ) { + data.append( lastPos, p-lastPos ); // do not add the CR + } + data += (char)0xa; // a proper newline + + if ( *(p+1) == 0xa ) { + // Carriage return - new line sequence + p += 2; + lastPos = p; + assert( p <= (buf+length) ); + } + else { + // it was followed by something else...that is presumably characters again. + ++p; + lastPos = p; + assert( p <= (buf+length) ); + } + } + else { + ++p; + } + } + // Handle any left over characters. + if ( p-lastPos ) { + data.append( lastPos, p-lastPos ); + } + delete [] buf; + buf = 0; + + Parse( data.c_str(), 0, encoding ); + + if ( Error() ) + return false; + else + return true; +} + + +bool TiXmlDocument::SaveFile( const char * filename ) const +{ + // The old c stuff lives on... + FILE* fp = TiXmlFOpen( filename, "w" ); + if ( fp ) + { + bool result = SaveFile( fp ); + fclose( fp ); + return result; + } + return false; +} + + +bool TiXmlDocument::SaveFile( FILE* fp ) const +{ + if ( useMicrosoftBOM ) + { + const unsigned char TIXML_UTF_LEAD_0 = 0xefU; + const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; + const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + + fputc( TIXML_UTF_LEAD_0, fp ); + fputc( TIXML_UTF_LEAD_1, fp ); + fputc( TIXML_UTF_LEAD_2, fp ); + } + Print( fp, 0 ); + return (ferror(fp) == 0); +} + + +void TiXmlDocument::CopyTo( TiXmlDocument* target ) const +{ + TiXmlNode::CopyTo( target ); + + target->error = error; + target->errorId = errorId; + target->errorDesc = errorDesc; + target->tabsize = tabsize; + target->errorLocation = errorLocation; + target->useMicrosoftBOM = useMicrosoftBOM; + + TiXmlNode* node = 0; + for ( node = firstChild; node; node = node->NextSibling() ) + { + target->LinkEndChild( node->Clone() ); + } +} + + +TiXmlNode* TiXmlDocument::Clone() const +{ + TiXmlDocument* clone = new TiXmlDocument(); + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +void TiXmlDocument::Print( FILE* cfile, int depth ) const +{ + assert( cfile ); + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + node->Print( cfile, depth ); + fprintf( cfile, "\n" ); + } +} + + +bool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const +{ + if ( visitor->VisitEnter( *this ) ) + { + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + if ( !node->Accept( visitor ) ) + break; + } + } + return visitor->VisitExit( *this ); +} + + +const TiXmlAttribute* TiXmlAttribute::Next() const +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( next->value.empty() && next->name.empty() ) + return 0; + return next; +} + +/* +TiXmlAttribute* TiXmlAttribute::Next() +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( next->value.empty() && next->name.empty() ) + return 0; + return next; +} +*/ + +const TiXmlAttribute* TiXmlAttribute::Previous() const +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( prev->value.empty() && prev->name.empty() ) + return 0; + return prev; +} + +/* +TiXmlAttribute* TiXmlAttribute::Previous() +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( prev->value.empty() && prev->name.empty() ) + return 0; + return prev; +} +*/ + +void TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const +{ + TIXML_STRING n, v; + + EncodeString( name, &n ); + EncodeString( value, &v ); + + if (value.find ('\"') == TIXML_STRING::npos) { + if ( cfile ) { + fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() ); + } + if ( str ) { + (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; + } + } + else { + if ( cfile ) { + fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() ); + } + if ( str ) { + (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; + } + } +} + + +int TiXmlAttribute::QueryIntValue( int* ival ) const +{ + if ( TIXML_SSCANF( value.c_str(), "%d", ival ) == 1 ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; +} + +int TiXmlAttribute::QueryDoubleValue( double* dval ) const +{ + if ( TIXML_SSCANF( value.c_str(), "%lf", dval ) == 1 ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; +} + +void TiXmlAttribute::SetIntValue( int _value ) +{ + char buf [64]; + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); + #else + sprintf (buf, "%d", _value); + #endif + SetValue (buf); +} + +void TiXmlAttribute::SetDoubleValue( double _value ) +{ + char buf [256]; + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF( buf, sizeof(buf), "%lf", _value); + #else + sprintf (buf, "%lf", _value); + #endif + SetValue (buf); +} + +int TiXmlAttribute::IntValue() const +{ + return atoi (value.c_str ()); +} + +double TiXmlAttribute::DoubleValue() const +{ + return atof (value.c_str ()); +} + + +TiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::COMMENT ) +{ + copy.CopyTo( this ); +} + + +void TiXmlComment::operator=( const TiXmlComment& base ) +{ + Clear(); + base.CopyTo( this ); +} + + +void TiXmlComment::Print( FILE* cfile, int depth ) const +{ + assert( cfile ); + for ( int i=0; i", value.c_str() ); +} + + +void TiXmlComment::CopyTo( TiXmlComment* target ) const +{ + TiXmlNode::CopyTo( target ); +} + + +bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlComment::Clone() const +{ + TiXmlComment* clone = new TiXmlComment(); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +void TiXmlText::Print( FILE* cfile, int depth ) const +{ + assert( cfile ); + if ( cdata ) + { + int i; + fprintf( cfile, "\n" ); + for ( i=0; i\n", value.c_str() ); // unformatted output + } + else + { + TIXML_STRING buffer; + EncodeString( value, &buffer ); + fprintf( cfile, "%s", buffer.c_str() ); + } +} + + +void TiXmlText::CopyTo( TiXmlText* target ) const +{ + TiXmlNode::CopyTo( target ); + target->cdata = cdata; +} + + +bool TiXmlText::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlText::Clone() const +{ + TiXmlText* clone = 0; + clone = new TiXmlText( "" ); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +TiXmlDeclaration::TiXmlDeclaration( const char * _version, + const char * _encoding, + const char * _standalone ) + : TiXmlNode( TiXmlNode::DECLARATION ) +{ + version = _version; + encoding = _encoding; + standalone = _standalone; +} + + +#ifdef TIXML_USE_STL +TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, + const std::string& _encoding, + const std::string& _standalone ) + : TiXmlNode( TiXmlNode::DECLARATION ) +{ + version = _version; + encoding = _encoding; + standalone = _standalone; +} +#endif + + +TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) + : TiXmlNode( TiXmlNode::DECLARATION ) +{ + copy.CopyTo( this ); +} + + +void TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) +{ + Clear(); + copy.CopyTo( this ); +} + + +void TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const +{ + if ( cfile ) fprintf( cfile, "" ); + if ( str ) (*str) += "?>"; +} + + +void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const +{ + TiXmlNode::CopyTo( target ); + + target->version = version; + target->encoding = encoding; + target->standalone = standalone; +} + + +bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlDeclaration::Clone() const +{ + TiXmlDeclaration* clone = new TiXmlDeclaration(); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +void TiXmlUnknown::Print( FILE* cfile, int depth ) const +{ + for ( int i=0; i", value.c_str() ); +} + + +void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const +{ + TiXmlNode::CopyTo( target ); +} + + +bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlUnknown::Clone() const +{ + TiXmlUnknown* clone = new TiXmlUnknown(); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +TiXmlAttributeSet::TiXmlAttributeSet() +{ + sentinel.next = &sentinel; + sentinel.prev = &sentinel; +} + + +TiXmlAttributeSet::~TiXmlAttributeSet() +{ + assert( sentinel.next == &sentinel ); + assert( sentinel.prev == &sentinel ); +} + + +void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) +{ + #ifdef TIXML_USE_STL + assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. + #else + assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. + #endif + + addMe->next = &sentinel; + addMe->prev = sentinel.prev; + + sentinel.prev->next = addMe; + sentinel.prev = addMe; +} + +void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) +{ + TiXmlAttribute* node; + + for( node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( node == removeMe ) + { + node->prev->next = node->next; + node->next->prev = node->prev; + node->next = 0; + node->prev = 0; + return; + } + } + assert( 0 ); // we tried to remove a non-linked attribute. +} + + +#ifdef TIXML_USE_STL +const TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const +{ + for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( node->name == name ) + return node; + } + return 0; +} + +/* +TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) +{ + for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( node->name == name ) + return node; + } + return 0; +} +*/ +#endif + + +const TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const +{ + for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( strcmp( node->name.c_str(), name ) == 0 ) + return node; + } + return 0; +} + +/* +TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) +{ + for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( strcmp( node->name.c_str(), name ) == 0 ) + return node; + } + return 0; +} +*/ + +#ifdef TIXML_USE_STL +std::istream& operator>> (std::istream & in, TiXmlNode & base) +{ + TIXML_STRING tag; + tag.reserve( 8 * 1000 ); + base.StreamIn( &in, &tag ); + + base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); + return in; +} +#endif + + +#ifdef TIXML_USE_STL +std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) +{ + TiXmlPrinter printer; + printer.SetStreamPrinting(); + base.Accept( &printer ); + out << printer.Str(); + + return out; +} + + +std::string& operator<< (std::string& out, const TiXmlNode& base ) +{ + TiXmlPrinter printer; + printer.SetStreamPrinting(); + base.Accept( &printer ); + out.append( printer.Str() ); + + return out; +} +#endif + + +TiXmlHandle TiXmlHandle::FirstChild() const +{ + if ( node ) + { + TiXmlNode* child = node->FirstChild(); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const +{ + if ( node ) + { + TiXmlNode* child = node->FirstChild( value ); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::FirstChildElement() const +{ + if ( node ) + { + TiXmlElement* child = node->FirstChildElement(); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const +{ + if ( node ) + { + TiXmlElement* child = node->FirstChildElement( value ); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::Child( int count ) const +{ + if ( node ) + { + int i; + TiXmlNode* child = node->FirstChild(); + for ( i=0; + child && iNextSibling(), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const +{ + if ( node ) + { + int i; + TiXmlNode* child = node->FirstChild( value ); + for ( i=0; + child && iNextSibling( value ), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::ChildElement( int count ) const +{ + if ( node ) + { + int i; + TiXmlElement* child = node->FirstChildElement(); + for ( i=0; + child && iNextSiblingElement(), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const +{ + if ( node ) + { + int i; + TiXmlElement* child = node->FirstChildElement( value ); + for ( i=0; + child && iNextSiblingElement( value ), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +bool TiXmlPrinter::VisitEnter( const TiXmlDocument& ) +{ + return true; +} + +bool TiXmlPrinter::VisitExit( const TiXmlDocument& ) +{ + return true; +} + +bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) +{ + DoIndent(); + buffer += "<"; + buffer += element.Value(); + + for( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() ) + { + buffer += " "; + attrib->Print( 0, 0, &buffer ); + } + + if ( !element.FirstChild() ) + { + buffer += " />"; + DoLineBreak(); + } + else + { + buffer += ">"; + if ( element.FirstChild()->ToText() + && element.LastChild() == element.FirstChild() + && element.FirstChild()->ToText()->CDATA() == false ) + { + simpleTextPrint = true; + // no DoLineBreak()! + } + else + { + DoLineBreak(); + } + } + ++depth; + return true; +} + + +bool TiXmlPrinter::VisitExit( const TiXmlElement& element ) +{ + --depth; + if ( !element.FirstChild() ) + { + // nothing. + } + else + { + if ( simpleTextPrint ) + { + simpleTextPrint = false; + } + else + { + DoIndent(); + } + buffer += ""; + DoLineBreak(); + } + return true; +} + + +bool TiXmlPrinter::Visit( const TiXmlText& text ) +{ + if ( text.CDATA() ) + { + DoIndent(); + buffer += ""; + DoLineBreak(); + } + else if ( simpleTextPrint ) + { + TIXML_STRING str; + TiXmlBase::EncodeString( text.ValueTStr(), &str ); + buffer += str; + } + else + { + DoIndent(); + TIXML_STRING str; + TiXmlBase::EncodeString( text.ValueTStr(), &str ); + buffer += str; + DoLineBreak(); + } + return true; +} + + +bool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration ) +{ + DoIndent(); + declaration.Print( 0, 0, &buffer ); + DoLineBreak(); + return true; +} + + +bool TiXmlPrinter::Visit( const TiXmlComment& comment ) +{ + DoIndent(); + buffer += ""; + DoLineBreak(); + return true; +} + + +bool TiXmlPrinter::Visit( const TiXmlUnknown& unknown ) +{ + DoIndent(); + buffer += "<"; + buffer += unknown.Value(); + buffer += ">"; + DoLineBreak(); + return true; +} + diff --git a/3rdparty/openctm/tools/tinyxml/tinyxml.h b/3rdparty/openctm/tools/tinyxml/tinyxml.h new file mode 100644 index 000000000..c6f40cc27 --- /dev/null +++ b/3rdparty/openctm/tools/tinyxml/tinyxml.h @@ -0,0 +1,1802 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TINYXML_INCLUDED +#define TINYXML_INCLUDED + +#ifdef _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4530 ) +#pragma warning( disable : 4786 ) +#endif + +#include +#include +#include +#include +#include + +// Help out windows: +#if defined( _DEBUG ) && !defined( DEBUG ) +#define DEBUG +#endif + +#ifdef TIXML_USE_STL + #include + #include + #include + #define TIXML_STRING std::string +#else + #include "tinystr.h" + #define TIXML_STRING TiXmlString +#endif + +// Deprecated library function hell. Compilers want to use the +// new safe versions. This probably doesn't fully address the problem, +// but it gets closer. There are too many compilers for me to fully +// test. If you get compilation troubles, undefine TIXML_SAFE +#define TIXML_SAFE + +#ifdef TIXML_SAFE + #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) + // Microsoft visual studio, version 2005 and higher. + #define TIXML_SNPRINTF _snprintf_s + #define TIXML_SNSCANF _snscanf_s + #define TIXML_SSCANF sscanf_s + #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + //#pragma message( "Using _sn* functions." ) + #define TIXML_SNPRINTF _snprintf + #define TIXML_SNSCANF _snscanf + #define TIXML_SSCANF sscanf + #elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + //#warning( "Using sn* functions." ) + #define TIXML_SNPRINTF snprintf + #define TIXML_SNSCANF snscanf + #define TIXML_SSCANF sscanf + #else + #define TIXML_SSCANF sscanf + #endif +#endif + +class TiXmlDocument; +class TiXmlElement; +class TiXmlComment; +class TiXmlUnknown; +class TiXmlAttribute; +class TiXmlText; +class TiXmlDeclaration; +class TiXmlParsingData; + +const int TIXML_MAJOR_VERSION = 2; +const int TIXML_MINOR_VERSION = 5; +const int TIXML_PATCH_VERSION = 3; + +/* Internal structure for tracking location of items + in the XML file. +*/ +struct TiXmlCursor +{ + TiXmlCursor() { Clear(); } + void Clear() { row = col = -1; } + + int row; // 0 based. + int col; // 0 based. +}; + + +/** + If you call the Accept() method, it requires being passed a TiXmlVisitor + class to handle callbacks. For nodes that contain other nodes (Document, Element) + you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves + are simple called with Visit(). + + If you return 'true' from a Visit method, recursive parsing will continue. If you return + false, no children of this node or its sibilings will be Visited. + + All flavors of Visit methods have a default implementation that returns 'true' (continue + visiting). You need to only override methods that are interesting to you. + + Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. + + You should never change the document from a callback. + + @sa TiXmlNode::Accept() +*/ +class TiXmlVisitor +{ +public: + virtual ~TiXmlVisitor() {} + + /// Visit a document. + virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } + /// Visit a document. + virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } + + /// Visit an element. + virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } + /// Visit an element. + virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } + + /// Visit a declaration + virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } + /// Visit a text node + virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } + /// Visit a comment node + virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } + /// Visit an unknow node + virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } +}; + +// Only used by Attribute::Query functions +enum +{ + TIXML_SUCCESS, + TIXML_NO_ATTRIBUTE, + TIXML_WRONG_TYPE +}; + + +// Used by the parsing routines. +enum TiXmlEncoding +{ + TIXML_ENCODING_UNKNOWN, + TIXML_ENCODING_UTF8, + TIXML_ENCODING_LEGACY +}; + +const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; + +/** TiXmlBase is a base class for every class in TinyXml. + It does little except to establish that TinyXml classes + can be printed and provide some utility functions. + + In XML, the document and elements can contain + other elements and other types of nodes. + + @verbatim + A Document can contain: Element (container or leaf) + Comment (leaf) + Unknown (leaf) + Declaration( leaf ) + + An Element can contain: Element (container or leaf) + Text (leaf) + Attributes (not on tree) + Comment (leaf) + Unknown (leaf) + + A Decleration contains: Attributes (not on tree) + @endverbatim +*/ +class TiXmlBase +{ + friend class TiXmlNode; + friend class TiXmlElement; + friend class TiXmlDocument; + +public: + TiXmlBase() : userData(0) {} + virtual ~TiXmlBase() {} + + /** All TinyXml classes can print themselves to a filestream + or the string class (TiXmlString in non-STL mode, std::string + in STL mode.) Either or both cfile and str can be null. + + This is a formatted print, and will insert + tabs and newlines. + + (For an unformatted stream, use the << operator.) + */ + virtual void Print( FILE* cfile, int depth ) const = 0; + + /** The world does not agree on whether white space should be kept or + not. In order to make everyone happy, these global, static functions + are provided to set whether or not TinyXml will condense all white space + into a single space or not. The default is to condense. Note changing this + value is not thread safe. + */ + static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } + + /// Return the current white space setting. + static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } + + /** Return the position, in the original source file, of this node or attribute. + The row and column are 1-based. (That is the first row and first column is + 1,1). If the returns values are 0 or less, then the parser does not have + a row and column value. + + Generally, the row and column value will be set when the TiXmlDocument::Load(), + TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set + when the DOM was created from operator>>. + + The values reflect the initial load. Once the DOM is modified programmatically + (by adding or changing nodes and attributes) the new values will NOT update to + reflect changes in the document. + + There is a minor performance cost to computing the row and column. Computation + can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. + + @sa TiXmlDocument::SetTabSize() + */ + int Row() const { return location.row + 1; } + int Column() const { return location.col + 1; } ///< See Row() + + void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. + void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. + const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. + + // Table that returs, for a given lead byte, the total number of bytes + // in the UTF-8 sequence. + static const int utf8ByteTable[256]; + + virtual const char* Parse( const char* p, + TiXmlParsingData* data, + TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; + + /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, + or they will be transformed into entities! + */ + static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); + + enum + { + TIXML_NO_ERROR = 0, + TIXML_ERROR, + TIXML_ERROR_OPENING_FILE, + TIXML_ERROR_OUT_OF_MEMORY, + TIXML_ERROR_PARSING_ELEMENT, + TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, + TIXML_ERROR_READING_ELEMENT_VALUE, + TIXML_ERROR_READING_ATTRIBUTES, + TIXML_ERROR_PARSING_EMPTY, + TIXML_ERROR_READING_END_TAG, + TIXML_ERROR_PARSING_UNKNOWN, + TIXML_ERROR_PARSING_COMMENT, + TIXML_ERROR_PARSING_DECLARATION, + TIXML_ERROR_DOCUMENT_EMPTY, + TIXML_ERROR_EMBEDDED_NULL, + TIXML_ERROR_PARSING_CDATA, + TIXML_ERROR_DOCUMENT_TOP_ONLY, + + TIXML_ERROR_STRING_COUNT + }; + +protected: + + static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); + inline static bool IsWhiteSpace( char c ) + { + return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); + } + inline static bool IsWhiteSpace( int c ) + { + if ( c < 256 ) + return IsWhiteSpace( (char) c ); + return false; // Again, only truly correct for English/Latin...but usually works. + } + + #ifdef TIXML_USE_STL + static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); + static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); + #endif + + /* Reads an XML name into the string provided. Returns + a pointer just past the last character of the name, + or 0 if the function has an error. + */ + static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); + + /* Reads text. Returns a pointer past the given end tag. + Wickedly complex options, but it keeps the (sensitive) code in one place. + */ + static const char* ReadText( const char* in, // where to start + TIXML_STRING* text, // the string read + bool ignoreWhiteSpace, // whether to keep the white space + const char* endTag, // what ends this text + bool ignoreCase, // whether to ignore case in the end tag + TiXmlEncoding encoding ); // the current encoding + + // If an entity has been found, transform it into a character. + static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); + + // Get a character, while interpreting entities. + // The length can be from 0 to 4 bytes. + inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) + { + assert( p ); + if ( encoding == TIXML_ENCODING_UTF8 ) + { + *length = utf8ByteTable[ *((const unsigned char*)p) ]; + assert( *length >= 0 && *length < 5 ); + } + else + { + *length = 1; + } + + if ( *length == 1 ) + { + if ( *p == '&' ) + return GetEntity( p, _value, length, encoding ); + *_value = *p; + return p+1; + } + else if ( *length ) + { + //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), + // and the null terminator isn't needed + for( int i=0; p[i] && i<*length; ++i ) { + _value[i] = p[i]; + } + return p + (*length); + } + else + { + // Not valid text. + return 0; + } + } + + // Return true if the next characters in the stream are any of the endTag sequences. + // Ignore case only works for english, and should only be relied on when comparing + // to English words: StringEqual( p, "version", true ) is fine. + static bool StringEqual( const char* p, + const char* endTag, + bool ignoreCase, + TiXmlEncoding encoding ); + + static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; + + TiXmlCursor location; + + /// Field containing a generic user pointer + void* userData; + + // None of these methods are reliable for any language except English. + // Good for approximation, not great for accuracy. + static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); + static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); + inline static int ToLower( int v, TiXmlEncoding encoding ) + { + if ( encoding == TIXML_ENCODING_UTF8 ) + { + if ( v < 128 ) return tolower( v ); + return v; + } + else + { + return tolower( v ); + } + } + static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); + +private: + TiXmlBase( const TiXmlBase& ); // not implemented. + void operator=( const TiXmlBase& base ); // not allowed. + + struct Entity + { + const char* str; + unsigned int strLength; + char chr; + }; + enum + { + NUM_ENTITY = 5, + MAX_ENTITY_LENGTH = 6 + + }; + static Entity entity[ NUM_ENTITY ]; + static bool condenseWhiteSpace; +}; + + +/** The parent class for everything in the Document Object Model. + (Except for attributes). + Nodes have siblings, a parent, and children. A node can be + in a document, or stand on its own. The type of a TiXmlNode + can be queried, and it can be cast to its more defined type. +*/ +class TiXmlNode : public TiXmlBase +{ + friend class TiXmlDocument; + friend class TiXmlElement; + +public: + #ifdef TIXML_USE_STL + + /** An input stream operator, for every class. Tolerant of newlines and + formatting, but doesn't expect them. + */ + friend std::istream& operator >> (std::istream& in, TiXmlNode& base); + + /** An output stream operator, for every class. Note that this outputs + without any newlines or formatting, as opposed to Print(), which + includes tabs and new lines. + + The operator<< and operator>> are not completely symmetric. Writing + a node to a stream is very well defined. You'll get a nice stream + of output, without any extra whitespace or newlines. + + But reading is not as well defined. (As it always is.) If you create + a TiXmlElement (for example) and read that from an input stream, + the text needs to define an element or junk will result. This is + true of all input streams, but it's worth keeping in mind. + + A TiXmlDocument will read nodes until it reads a root element, and + all the children of that root element. + */ + friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); + + /// Appends the XML node or attribute to a std::string. + friend std::string& operator<< (std::string& out, const TiXmlNode& base ); + + #endif + + /** The types of XML nodes supported by TinyXml. (All the + unsupported types are picked up by UNKNOWN.) + */ + enum NodeType + { + DOCUMENT, + ELEMENT, + COMMENT, + UNKNOWN, + TEXT, + DECLARATION, + TYPECOUNT + }; + + virtual ~TiXmlNode(); + + /** The meaning of 'value' changes for the specific type of + TiXmlNode. + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + + The subclasses will wrap this function. + */ + const char *Value() const { return value.c_str (); } + + #ifdef TIXML_USE_STL + /** Return Value() as a std::string. If you only use STL, + this is more efficient than calling Value(). + Only available in STL mode. + */ + const std::string& ValueStr() const { return value; } + #endif + + const TIXML_STRING& ValueTStr() const { return value; } + + /** Changes the value of the node. Defined as: + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + */ + void SetValue(const char * _value) { value = _value;} + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Delete all the children of this node. Does not affect 'this'. + void Clear(); + + /// One step up the DOM. + TiXmlNode* Parent() { return parent; } + const TiXmlNode* Parent() const { return parent; } + + const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. + TiXmlNode* FirstChild() { return firstChild; } + const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. + /// The first child of this node with the matching 'value'. Will be null if none found. + TiXmlNode* FirstChild( const char * _value ) { + // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) + // call the method, cast the return back to non-const. + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); + } + const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. + TiXmlNode* LastChild() { return lastChild; } + + const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. + TiXmlNode* LastChild( const char * _value ) { + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. + #endif + + /** An alternate way to walk the children of a node. + One way to iterate over nodes is: + @verbatim + for( child = parent->FirstChild(); child; child = child->NextSibling() ) + @endverbatim + + IterateChildren does the same thing with the syntax: + @verbatim + child = 0; + while( child = parent->IterateChildren( child ) ) + @endverbatim + + IterateChildren takes the previous child as input and finds + the next one. If the previous child is null, it returns the + first. IterateChildren will return null when done. + */ + const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); + } + + /// This flavor of IterateChildren searches for children with a particular 'value' + const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + #endif + + /** Add a new node related to this. Adds a child past the LastChild. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); + + + /** Add a new node related to this. Adds a child past the LastChild. + + NOTE: the node to be added is passed by pointer, and will be + henceforth owned (and deleted) by tinyXml. This method is efficient + and avoids an extra copy, but should be used with care as it + uses a different memory model than the other insert functions. + + @sa InsertEndChild + */ + TiXmlNode* LinkEndChild( TiXmlNode* addThis ); + + /** Add a new node related to this. Adds a child before the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); + + /** Add a new node related to this. Adds a child after the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); + + /** Replace a child of this node. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); + + /// Delete a child of this node. + bool RemoveChild( TiXmlNode* removeThis ); + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling() const { return prev; } + TiXmlNode* PreviousSibling() { return prev; } + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling( const char * ) const; + TiXmlNode* PreviousSibling( const char *_prev ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Navigate to a sibling node. + const TiXmlNode* NextSibling() const { return next; } + TiXmlNode* NextSibling() { return next; } + + /// Navigate to a sibling node with the given 'value'. + const TiXmlNode* NextSibling( const char * ) const; + TiXmlNode* NextSibling( const char* _next ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement() const; + TiXmlElement* NextSiblingElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement( const char * ) const; + TiXmlElement* NextSiblingElement( const char *_next ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement() const; + TiXmlElement* FirstChildElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); + } + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement( const char * _value ) const; + TiXmlElement* FirstChildElement( const char * _value ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /** Query the type (as an enumerated value, above) of this node. + The possible types are: DOCUMENT, ELEMENT, COMMENT, + UNKNOWN, TEXT, and DECLARATION. + */ + int Type() const { return type; } + + /** Return a pointer to the Document this node lives in. + Returns null if not in a document. + */ + const TiXmlDocument* GetDocument() const; + TiXmlDocument* GetDocument() { + return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); + } + + /// Returns true if this node has no children. + bool NoChildren() const { return !firstChild; } + + virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + /** Create an exact duplicate of this node and return it. The memory must be deleted + by the caller. + */ + virtual TiXmlNode* Clone() const = 0; + + /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the + XML tree will be conditionally visited and the host will be called back + via the TiXmlVisitor interface. + + This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse + the XML for the callbacks, so the performance of TinyXML is unchanged by using this + interface versus any other.) + + The interface has been based on ideas from: + + - http://www.saxproject.org/ + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + + Which are both good references for "visiting". + + An example of using Accept(): + @verbatim + TiXmlPrinter printer; + tinyxmlDoc.Accept( &printer ); + const char* xmlcstr = printer.CStr(); + @endverbatim + */ + virtual bool Accept( TiXmlVisitor* visitor ) const = 0; + +protected: + TiXmlNode( NodeType _type ); + + // Copy to the allocated object. Shared functionality between Clone, Copy constructor, + // and the assignment operator. + void CopyTo( TiXmlNode* target ) const; + + #ifdef TIXML_USE_STL + // The real work of the input operator. + virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; + #endif + + // Figure out what is at *p, and parse it. Returns null if it is not an xml node. + TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); + + TiXmlNode* parent; + NodeType type; + + TiXmlNode* firstChild; + TiXmlNode* lastChild; + + TIXML_STRING value; + + TiXmlNode* prev; + TiXmlNode* next; + +private: + TiXmlNode( const TiXmlNode& ); // not implemented. + void operator=( const TiXmlNode& base ); // not allowed. +}; + + +/** An attribute is a name-value pair. Elements have an arbitrary + number of attributes, each with a unique name. + + @note The attributes are not TiXmlNodes, since they are not + part of the tinyXML document object model. There are other + suggested ways to look at this problem. +*/ +class TiXmlAttribute : public TiXmlBase +{ + friend class TiXmlAttributeSet; + +public: + /// Construct an empty attribute. + TiXmlAttribute() : TiXmlBase() + { + document = 0; + prev = next = 0; + } + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlAttribute( const std::string& _name, const std::string& _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + #endif + + /// Construct an attribute with a name and value. + TiXmlAttribute( const char * _name, const char * _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + + const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. + const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. + #ifdef TIXML_USE_STL + const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. + #endif + int IntValue() const; ///< Return the value of this attribute, converted to an integer. + double DoubleValue() const; ///< Return the value of this attribute, converted to a double. + + // Get the tinyxml string representation + const TIXML_STRING& NameTStr() const { return name; } + + /** QueryIntValue examines the value string. It is an alternative to the + IntValue() method with richer error checking. + If the value is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. + + A specialized but useful call. Note that for success it returns 0, + which is the opposite of almost all other TinyXml calls. + */ + int QueryIntValue( int* _value ) const; + /// QueryDoubleValue examines the value string. See QueryIntValue(). + int QueryDoubleValue( double* _value ) const; + + void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. + void SetValue( const char* _value ) { value = _value; } ///< Set the value. + + void SetIntValue( int _value ); ///< Set the value from an integer. + void SetDoubleValue( double _value ); ///< Set the value from a double. + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetName( const std::string& _name ) { name = _name; } + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Get the next sibling attribute in the DOM. Returns null at end. + const TiXmlAttribute* Next() const; + TiXmlAttribute* Next() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); + } + + /// Get the previous sibling attribute in the DOM. Returns null at beginning. + const TiXmlAttribute* Previous() const; + TiXmlAttribute* Previous() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); + } + + bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } + bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } + bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } + + /* Attribute parsing starts: first letter of the name + returns: the next char after the value end quote + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + // Prints this Attribute to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const { + Print( cfile, depth, 0 ); + } + void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; + + // [internal use] + // Set the document pointer so the attribute can report errors. + void SetDocument( TiXmlDocument* doc ) { document = doc; } + +private: + TiXmlAttribute( const TiXmlAttribute& ); // not implemented. + void operator=( const TiXmlAttribute& base ); // not allowed. + + TiXmlDocument* document; // A pointer back to a document, for error reporting. + TIXML_STRING name; + TIXML_STRING value; + TiXmlAttribute* prev; + TiXmlAttribute* next; +}; + + +/* A class used to manage a group of attributes. + It is only used internally, both by the ELEMENT and the DECLARATION. + + The set can be changed transparent to the Element and Declaration + classes that use it, but NOT transparent to the Attribute + which has to implement a next() and previous() method. Which makes + it a bit problematic and prevents the use of STL. + + This version is implemented with circular lists because: + - I like circular lists + - it demonstrates some independence from the (typical) doubly linked list. +*/ +class TiXmlAttributeSet +{ +public: + TiXmlAttributeSet(); + ~TiXmlAttributeSet(); + + void Add( TiXmlAttribute* attribute ); + void Remove( TiXmlAttribute* attribute ); + + const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + + const TiXmlAttribute* Find( const char* _name ) const; + TiXmlAttribute* Find( const char* _name ) { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); + } + #ifdef TIXML_USE_STL + const TiXmlAttribute* Find( const std::string& _name ) const; + TiXmlAttribute* Find( const std::string& _name ) { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); + } + + #endif + +private: + //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), + //*ME: this class must be also use a hidden/disabled copy-constructor !!! + TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed + void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) + + TiXmlAttribute sentinel; +}; + + +/** The element is a container class. It has a value, the element name, + and can contain other elements, text, comments, and unknowns. + Elements also contain an arbitrary number of attributes. +*/ +class TiXmlElement : public TiXmlNode +{ +public: + /// Construct an element. + TiXmlElement (const char * in_value); + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlElement( const std::string& _value ); + #endif + + TiXmlElement( const TiXmlElement& ); + + void operator=( const TiXmlElement& base ); + + virtual ~TiXmlElement(); + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + */ + const char* Attribute( const char* name ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an integer, + the integer value will be put in the return 'i', if 'i' + is non-null. + */ + const char* Attribute( const char* name, int* i ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an double, + the double value will be put in the return 'd', if 'd' + is non-null. + */ + const char* Attribute( const char* name, double* d ) const; + + /** QueryIntAttribute examines the attribute - it is an alternative to the + Attribute() method with richer error checking. + If the attribute is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. If the attribute + does not exist, then TIXML_NO_ATTRIBUTE is returned. + */ + int QueryIntAttribute( const char* name, int* _value ) const; + /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). + int QueryDoubleAttribute( const char* name, double* _value ) const; + /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). + int QueryFloatAttribute( const char* name, float* _value ) const { + double d; + int result = QueryDoubleAttribute( name, &d ); + if ( result == TIXML_SUCCESS ) { + *_value = (float)d; + } + return result; + } + + #ifdef TIXML_USE_STL + /** Template form of the attribute query which will try to read the + attribute into the specified type. Very easy, very powerful, but + be careful to make sure to call this with the correct type. + + NOTE: This method doesn't work correctly for 'string' types. + + @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE + */ + template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + + std::stringstream sstream( node->ValueStr() ); + sstream >> *outValue; + if ( !sstream.fail() ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; + } + /* + This is - in theory - a bug fix for "QueryValueAtribute returns truncated std::string" + but template specialization is hard to get working cross-compiler. Leaving the bug for now. + + // The above will fail for std::string because the space character is used as a seperator. + // Specialize for strings. Bug [ 1695429 ] QueryValueAtribute returns truncated std::string + template<> int QueryValueAttribute( const std::string& name, std::string* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + *outValue = node->ValueStr(); + return TIXML_SUCCESS; + } + */ + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char* name, const char * _value ); + + #ifdef TIXML_USE_STL + const std::string* Attribute( const std::string& name ) const; + const std::string* Attribute( const std::string& name, int* i ) const; + const std::string* Attribute( const std::string& name, double* d ) const; + int QueryIntAttribute( const std::string& name, int* _value ) const; + int QueryDoubleAttribute( const std::string& name, double* _value ) const; + + /// STL std::string form. + void SetAttribute( const std::string& name, const std::string& _value ); + ///< STL std::string form. + void SetAttribute( const std::string& name, int _value ); + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char * name, int value ); + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetDoubleAttribute( const char * name, double value ); + + /** Deletes an attribute with the given name. + */ + void RemoveAttribute( const char * name ); + #ifdef TIXML_USE_STL + void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. + #endif + + const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. + TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } + const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. + TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, GetText() is limited compared to getting the TiXmlText child + and accessing it directly. + + If the first child of 'this' is a TiXmlText, the GetText() + returns the character string of the Text node, else null is returned. + + This is a convenient method for getting the text of simple contained text: + @verbatim + This is text + const char* str = fooElement->GetText(); + @endverbatim + + 'str' will be a pointer to "This is text". + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then the value of str would be null. The first child node isn't a text node, it is + another element. From this XML: + @verbatim + This is text + @endverbatim + GetText() will return "This is ". + + WARNING: GetText() accesses a child node - don't become confused with the + similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are + safe type casts on the referenced node. + */ + const char* GetText() const; + + /// Creates a new Element and returns it - the returned element is a copy. + virtual TiXmlNode* Clone() const; + // Print the Element to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /* Attribtue parsing starts: next char past '<' + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + + void CopyTo( TiXmlElement* target ) const; + void ClearThis(); // like clear, but initializes 'this' object as well + + // Used to be public [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + /* [internal use] + Reads the "value" of the element -- another element, or text. + This should terminate with the current end tag. + */ + const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + +private: + + TiXmlAttributeSet attributeSet; +}; + + +/** An XML comment. +*/ +class TiXmlComment : public TiXmlNode +{ +public: + /// Constructs an empty comment. + TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {} + /// Construct a comment from text. + TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::COMMENT ) { + SetValue( _value ); + } + TiXmlComment( const TiXmlComment& ); + void operator=( const TiXmlComment& base ); + + virtual ~TiXmlComment() {} + + /// Returns a copy of this Comment. + virtual TiXmlNode* Clone() const; + // Write this Comment to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /* Attribtue parsing starts: at the ! of the !-- + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlComment* target ) const; + + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif +// virtual void StreamOut( TIXML_OSTREAM * out ) const; + +private: + +}; + + +/** XML text. A text node can have 2 ways to output the next. "normal" output + and CDATA. It will default to the mode it was parsed from the XML file and + you generally want to leave it alone, but you can change the output mode with + SetCDATA() and query it with CDATA(). +*/ +class TiXmlText : public TiXmlNode +{ + friend class TiXmlElement; +public: + /** Constructor for text element. By default, it is treated as + normal, encoded text. If you want it be output as a CDATA text + element, set the parameter _cdata to 'true' + */ + TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TEXT) + { + SetValue( initValue ); + cdata = false; + } + virtual ~TiXmlText() {} + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT) + { + SetValue( initValue ); + cdata = false; + } + #endif + + TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TEXT ) { copy.CopyTo( this ); } + void operator=( const TiXmlText& base ) { base.CopyTo( this ); } + + // Write this text object to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /// Queries whether this represents text using a CDATA section. + bool CDATA() const { return cdata; } + /// Turns on or off a CDATA representation of text. + void SetCDATA( bool _cdata ) { cdata = _cdata; } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + /// [internal use] Creates a new Element and returns it. + virtual TiXmlNode* Clone() const; + void CopyTo( TiXmlText* target ) const; + + bool Blank() const; // returns true if all white space and new lines + // [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + bool cdata; // true if this should be input and output as a CDATA style text element +}; + + +/** In correct XML the declaration is the first entry in the file. + @verbatim + + @endverbatim + + TinyXml will happily read or write files without a declaration, + however. There are 3 possible attributes to the declaration: + version, encoding, and standalone. + + Note: In this version of the code, the attributes are + handled as special cases, not generic attributes, simply + because there can only be at most 3 and they are always the same. +*/ +class TiXmlDeclaration : public TiXmlNode +{ +public: + /// Construct an empty declaration. + TiXmlDeclaration() : TiXmlNode( TiXmlNode::DECLARATION ) {} + +#ifdef TIXML_USE_STL + /// Constructor. + TiXmlDeclaration( const std::string& _version, + const std::string& _encoding, + const std::string& _standalone ); +#endif + + /// Construct. + TiXmlDeclaration( const char* _version, + const char* _encoding, + const char* _standalone ); + + TiXmlDeclaration( const TiXmlDeclaration& copy ); + void operator=( const TiXmlDeclaration& copy ); + + virtual ~TiXmlDeclaration() {} + + /// Version. Will return an empty string if none was found. + const char *Version() const { return version.c_str (); } + /// Encoding. Will return an empty string if none was found. + const char *Encoding() const { return encoding.c_str (); } + /// Is this a standalone document? + const char *Standalone() const { return standalone.c_str (); } + + /// Creates a copy of this Declaration and returns it. + virtual TiXmlNode* Clone() const; + // Print this declaration to a FILE stream. + virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; + virtual void Print( FILE* cfile, int depth ) const { + Print( cfile, depth, 0 ); + } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlDeclaration* target ) const; + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + + TIXML_STRING version; + TIXML_STRING encoding; + TIXML_STRING standalone; +}; + + +/** Any tag that tinyXml doesn't recognize is saved as an + unknown. It is a tag of text, but should not be modified. + It will be written back to the XML, unchanged, when the file + is saved. + + DTD tags get thrown into TiXmlUnknowns. +*/ +class TiXmlUnknown : public TiXmlNode +{ +public: + TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {} + virtual ~TiXmlUnknown() {} + + TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::UNKNOWN ) { copy.CopyTo( this ); } + void operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); } + + /// Creates a copy of this Unknown and returns it. + virtual TiXmlNode* Clone() const; + // Print this Unknown to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected: + void CopyTo( TiXmlUnknown* target ) const; + + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + +}; + + +/** Always the top level node. A document binds together all the + XML pieces. It can be saved, loaded, and printed to the screen. + The 'value' of a document node is the xml file name. +*/ +class TiXmlDocument : public TiXmlNode +{ +public: + /// Create an empty document, that has no name. + TiXmlDocument(); + /// Create a document with a name. The name of the document is also the filename of the xml. + TiXmlDocument( const char * documentName ); + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlDocument( const std::string& documentName ); + #endif + + TiXmlDocument( const TiXmlDocument& copy ); + void operator=( const TiXmlDocument& copy ); + + virtual ~TiXmlDocument() {} + + /** Load a file using the current document value. + Returns true if successful. Will delete any existing + document data before loading. + */ + bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the current document value. Returns true if successful. + bool SaveFile() const; + /// Load a file using the given filename. Returns true if successful. + bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given filename. Returns true if successful. + bool SaveFile( const char * filename ) const; + /** Load a file using the given FILE*. Returns true if successful. Note that this method + doesn't stream - the entire object pointed at by the FILE* + will be interpreted as an XML file. TinyXML doesn't stream in XML from the current + file location. Streaming may be added in the future. + */ + bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given FILE*. Returns true if successful. + bool SaveFile( FILE* ) const; + + #ifdef TIXML_USE_STL + bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. + { +// StringToBuffer f( filename ); +// return ( f.buffer && LoadFile( f.buffer, encoding )); + return LoadFile( filename.c_str(), encoding ); + } + bool SaveFile( const std::string& filename ) const ///< STL std::string version. + { +// StringToBuffer f( filename ); +// return ( f.buffer && SaveFile( f.buffer )); + return SaveFile( filename.c_str() ); + } + #endif + + /** Parse the given null terminated block of xml data. Passing in an encoding to this + method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml + to use that encoding, regardless of what TinyXml might otherwise try to detect. + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + + /** Get the root element -- the only top level element -- of the document. + In well formed XML, there should only be one. TinyXml is tolerant of + multiple elements at the document level. + */ + const TiXmlElement* RootElement() const { return FirstChildElement(); } + TiXmlElement* RootElement() { return FirstChildElement(); } + + /** If an error occurs, Error will be set to true. Also, + - The ErrorId() will contain the integer identifier of the error (not generally useful) + - The ErrorDesc() method will return the name of the error. (very useful) + - The ErrorRow() and ErrorCol() will return the location of the error (if known) + */ + bool Error() const { return error; } + + /// Contains a textual (english) description of the error if one occurs. + const char * ErrorDesc() const { return errorDesc.c_str (); } + + /** Generally, you probably want the error string ( ErrorDesc() ). But if you + prefer the ErrorId, this function will fetch it. + */ + int ErrorId() const { return errorId; } + + /** Returns the location (if known) of the error. The first column is column 1, + and the first row is row 1. A value of 0 means the row and column wasn't applicable + (memory errors, for example, have no row/column) or the parser lost the error. (An + error in the error reporting, in that case.) + + @sa SetTabSize, Row, Column + */ + int ErrorRow() const { return errorLocation.row+1; } + int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() + + /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) + to report the correct values for row and column. It does not change the output + or input in any way. + + By calling this method, with a tab size + greater than 0, the row and column of each node and attribute is stored + when the file is loaded. Very useful for tracking the DOM back in to + the source file. + + The tab size is required for calculating the location of nodes. If not + set, the default of 4 is used. The tabsize is set per document. Setting + the tabsize to 0 disables row/column tracking. + + Note that row and column tracking is not supported when using operator>>. + + The tab size needs to be enabled before the parse or load. Correct usage: + @verbatim + TiXmlDocument doc; + doc.SetTabSize( 8 ); + doc.Load( "myfile.xml" ); + @endverbatim + + @sa Row, Column + */ + void SetTabSize( int _tabsize ) { tabsize = _tabsize; } + + int TabSize() const { return tabsize; } + + /** If you have handled the error, it can be reset with this call. The error + state is automatically cleared if you Parse a new XML block. + */ + void ClearError() { error = false; + errorId = 0; + errorDesc = ""; + errorLocation.row = errorLocation.col = 0; + //errorLocation.last = 0; + } + + /** Write the document to standard out using formatted printing ("pretty print"). */ + void Print() const { Print( stdout, 0 ); } + + /* Write the document to a string using formatted printing ("pretty print"). This + will allocate a character array (new char[]) and return it as a pointer. The + calling code pust call delete[] on the return char* to avoid a memory leak. + */ + //char* PrintToMemory() const; + + /// Print this Document to a FILE stream. + virtual void Print( FILE* cfile, int depth = 0 ) const; + // [internal use] + void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + + virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + // [internal use] + virtual TiXmlNode* Clone() const; + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + void CopyTo( TiXmlDocument* target ) const; + + bool error; + int errorId; + TIXML_STRING errorDesc; + int tabsize; + TiXmlCursor errorLocation; + bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. +}; + + +/** + A TiXmlHandle is a class that wraps a node pointer with null checks; this is + an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml + DOM structure. It is a separate utility class. + + Take an example: + @verbatim + + + + + + + @endverbatim + + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + easy to write a *lot* of code that looks like: + + @verbatim + TiXmlElement* root = document.FirstChildElement( "Document" ); + if ( root ) + { + TiXmlElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + TiXmlElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + TiXmlElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. + @endverbatim + + And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity + of such code. A TiXmlHandle checks for null pointers so it is perfectly safe + and correct to use: + + @verbatim + TiXmlHandle docHandle( &document ); + TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); + if ( child2 ) + { + // do something useful + @endverbatim + + Which is MUCH more concise and useful. + + It is also safe to copy handles - internally they are nothing more than node pointers. + @verbatim + TiXmlHandle handleCopy = handle; + @endverbatim + + What they should not be used for is iteration: + + @verbatim + int i=0; + while ( true ) + { + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); + if ( !child ) + break; + // do something + ++i; + } + @endverbatim + + It seems reasonable, but it is in fact two embedded while loops. The Child method is + a linear walk to find the element, so this code would iterate much more than it needs + to. Instead, prefer: + + @verbatim + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); + + for( child; child; child=child->NextSiblingElement() ) + { + // do something + } + @endverbatim +*/ +class TiXmlHandle +{ +public: + /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. + TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } + /// Copy constructor + TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } + TiXmlHandle operator=( const TiXmlHandle& ref ) { this->node = ref.node; return *this; } + + /// Return a handle to the first child node. + TiXmlHandle FirstChild() const; + /// Return a handle to the first child node with the given name. + TiXmlHandle FirstChild( const char * value ) const; + /// Return a handle to the first child element. + TiXmlHandle FirstChildElement() const; + /// Return a handle to the first child element with the given name. + TiXmlHandle FirstChildElement( const char * value ) const; + + /** Return a handle to the "index" child with the given name. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( const char* value, int index ) const; + /** Return a handle to the "index" child. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( int index ) const; + /** Return a handle to the "index" child element with the given name. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( const char* value, int index ) const; + /** Return a handle to the "index" child element. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( int index ) const; + + #ifdef TIXML_USE_STL + TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } + TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } + + TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } + TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } + #endif + + /** Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* ToNode() const { return node; } + /** Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } + /** Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } + /** Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } + + /** @deprecated use ToNode. + Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* Node() const { return ToNode(); } + /** @deprecated use ToElement. + Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* Element() const { return ToElement(); } + /** @deprecated use ToText() + Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* Text() const { return ToText(); } + /** @deprecated use ToUnknown() + Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* Unknown() const { return ToUnknown(); } + +private: + TiXmlNode* node; +}; + + +/** Print to memory functionality. The TiXmlPrinter is useful when you need to: + + -# Print to memory (especially in non-STL mode) + -# Control formatting (line endings, etc.) + + When constructed, the TiXmlPrinter is in its default "pretty printing" mode. + Before calling Accept() you can call methods to control the printing + of the XML document. After TiXmlNode::Accept() is called, the printed document can + be accessed via the CStr(), Str(), and Size() methods. + + TiXmlPrinter uses the Visitor API. + @verbatim + TiXmlPrinter printer; + printer.SetIndent( "\t" ); + + doc.Accept( &printer ); + fprintf( stdout, "%s", printer.CStr() ); + @endverbatim +*/ +class TiXmlPrinter : public TiXmlVisitor +{ +public: + TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), + buffer(), indent( " " ), lineBreak( "\n" ) {} + + virtual bool VisitEnter( const TiXmlDocument& doc ); + virtual bool VisitExit( const TiXmlDocument& doc ); + + virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); + virtual bool VisitExit( const TiXmlElement& element ); + + virtual bool Visit( const TiXmlDeclaration& declaration ); + virtual bool Visit( const TiXmlText& text ); + virtual bool Visit( const TiXmlComment& comment ); + virtual bool Visit( const TiXmlUnknown& unknown ); + + /** Set the indent characters for printing. By default 4 spaces + but tab (\t) is also useful, or null/empty string for no indentation. + */ + void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } + /// Query the indention string. + const char* Indent() { return indent.c_str(); } + /** Set the line breaking string. By default set to newline (\n). + Some operating systems prefer other characters, or can be + set to the null/empty string for no indenation. + */ + void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } + /// Query the current line breaking string. + const char* LineBreak() { return lineBreak.c_str(); } + + /** Switch over to "stream printing" which is the most dense formatting without + linebreaks. Common when the XML is needed for network transmission. + */ + void SetStreamPrinting() { indent = ""; + lineBreak = ""; + } + /// Return the result. + const char* CStr() { return buffer.c_str(); } + /// Return the length of the result string. + size_t Size() { return buffer.size(); } + + #ifdef TIXML_USE_STL + /// Return the result. + const std::string& Str() { return buffer; } + #endif + +private: + void DoIndent() { + for( int i=0; i +#include + +#include "tinyxml.h" + +//#define DEBUG_PARSER +#if defined( DEBUG_PARSER ) +# if defined( DEBUG ) && defined( _MSC_VER ) +# include +# define TIXML_LOG OutputDebugString +# else +# define TIXML_LOG printf +# endif +#endif + +// Note tha "PutString" hardcodes the same list. This +// is less flexible than it appears. Changing the entries +// or order will break putstring. +TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = +{ + { "&", 5, '&' }, + { "<", 4, '<' }, + { ">", 4, '>' }, + { """, 6, '\"' }, + { "'", 6, '\'' } +}; + +// Bunch of unicode info at: +// http://www.unicode.org/faq/utf_bom.html +// Including the basic of this table, which determines the #bytes in the +// sequence from the lead byte. 1 placed for invalid sequences -- +// although the result will be junk, pass it through as much as possible. +// Beware of the non-characters in UTF-8: +// ef bb bf (Microsoft "lead bytes") +// ef bf be +// ef bf bf + +const unsigned char TIXML_UTF_LEAD_0 = 0xefU; +const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; +const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + +const int TiXmlBase::utf8ByteTable[256] = +{ + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte + 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid +}; + + +void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) +{ + const unsigned long BYTE_MASK = 0xBF; + const unsigned long BYTE_MARK = 0x80; + const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + + if (input < 0x80) + *length = 1; + else if ( input < 0x800 ) + *length = 2; + else if ( input < 0x10000 ) + *length = 3; + else if ( input < 0x200000 ) + *length = 4; + else + { *length = 0; return; } // This code won't covert this correctly anyway. + + output += *length; + + // Scary scary fall throughs. + switch (*length) + { + case 4: + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + case 3: + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + case 2: + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + case 1: + --output; + *output = (char)(input | FIRST_BYTE_MARK[*length]); + } +} + + +/*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) +{ + // This will only work for low-ascii, everything else is assumed to be a valid + // letter. I'm not sure this is the best approach, but it is quite tricky trying + // to figure out alhabetical vs. not across encoding. So take a very + // conservative approach. + +// if ( encoding == TIXML_ENCODING_UTF8 ) +// { + if ( anyByte < 127 ) + return isalpha( anyByte ); + else + return 1; // What else to do? The unicode set is huge...get the english ones right. +// } +// else +// { +// return isalpha( anyByte ); +// } +} + + +/*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) +{ + // This will only work for low-ascii, everything else is assumed to be a valid + // letter. I'm not sure this is the best approach, but it is quite tricky trying + // to figure out alhabetical vs. not across encoding. So take a very + // conservative approach. + +// if ( encoding == TIXML_ENCODING_UTF8 ) +// { + if ( anyByte < 127 ) + return isalnum( anyByte ); + else + return 1; // What else to do? The unicode set is huge...get the english ones right. +// } +// else +// { +// return isalnum( anyByte ); +// } +} + + +class TiXmlParsingData +{ + friend class TiXmlDocument; + public: + void Stamp( const char* now, TiXmlEncoding encoding ); + + const TiXmlCursor& Cursor() { return cursor; } + + private: + // Only used by the document! + TiXmlParsingData( const char* start, int _tabsize, int row, int col ) + { + assert( start ); + stamp = start; + tabsize = _tabsize; + cursor.row = row; + cursor.col = col; + } + + TiXmlCursor cursor; + const char* stamp; + int tabsize; +}; + + +void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) +{ + assert( now ); + + // Do nothing if the tabsize is 0. + if ( tabsize < 1 ) + { + return; + } + + // Get the current row, column. + int row = cursor.row; + int col = cursor.col; + const char* p = stamp; + assert( p ); + + while ( p < now ) + { + // Treat p as unsigned, so we have a happy compiler. + const unsigned char* pU = (const unsigned char*)p; + + // Code contributed by Fletcher Dunn: (modified by lee) + switch (*pU) { + case 0: + // We *should* never get here, but in case we do, don't + // advance past the terminating null character, ever + return; + + case '\r': + // bump down to the next line + ++row; + col = 0; + // Eat the character + ++p; + + // Check for \r\n sequence, and treat this as a single character + if (*p == '\n') { + ++p; + } + break; + + case '\n': + // bump down to the next line + ++row; + col = 0; + + // Eat the character + ++p; + + // Check for \n\r sequence, and treat this as a single + // character. (Yes, this bizarre thing does occur still + // on some arcane platforms...) + if (*p == '\r') { + ++p; + } + break; + + case '\t': + // Eat the character + ++p; + + // Skip to next tab stop + col = (col / tabsize + 1) * tabsize; + break; + + case TIXML_UTF_LEAD_0: + if ( encoding == TIXML_ENCODING_UTF8 ) + { + if ( *(p+1) && *(p+2) ) + { + // In these cases, don't advance the column. These are + // 0-width spaces. + if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) + p += 3; + else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) + p += 3; + else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) + p += 3; + else + { p +=3; ++col; } // A normal character. + } + } + else + { + ++p; + ++col; + } + break; + + default: + if ( encoding == TIXML_ENCODING_UTF8 ) + { + // Eat the 1 to 4 byte utf8 character. + int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)]; + if ( step == 0 ) + step = 1; // Error case from bad encoding, but handle gracefully. + p += step; + + // Just advance one column, of course. + ++col; + } + else + { + ++p; + ++col; + } + break; + } + } + cursor.row = row; + cursor.col = col; + assert( cursor.row >= -1 ); + assert( cursor.col >= -1 ); + stamp = p; + assert( stamp ); +} + + +const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) +{ + if ( !p || !*p ) + { + return 0; + } + if ( encoding == TIXML_ENCODING_UTF8 ) + { + while ( *p ) + { + const unsigned char* pU = (const unsigned char*)p; + + // Skip the stupid Microsoft UTF-8 Byte order marks + if ( *(pU+0)==TIXML_UTF_LEAD_0 + && *(pU+1)==TIXML_UTF_LEAD_1 + && *(pU+2)==TIXML_UTF_LEAD_2 ) + { + p += 3; + continue; + } + else if(*(pU+0)==TIXML_UTF_LEAD_0 + && *(pU+1)==0xbfU + && *(pU+2)==0xbeU ) + { + p += 3; + continue; + } + else if(*(pU+0)==TIXML_UTF_LEAD_0 + && *(pU+1)==0xbfU + && *(pU+2)==0xbfU ) + { + p += 3; + continue; + } + + if ( IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' ) // Still using old rules for white space. + ++p; + else + break; + } + } + else + { + while ( *p && (IsWhiteSpace( *p ) || *p == '\n' || *p =='\r') ) + ++p; + } + + return p; +} + +#ifdef TIXML_USE_STL +/*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ) +{ + for( ;; ) + { + if ( !in->good() ) return false; + + int c = in->peek(); + // At this scope, we can't get to a document. So fail silently. + if ( !IsWhiteSpace( c ) || c <= 0 ) + return true; + + *tag += (char) in->get(); + } +} + +/*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ) +{ + //assert( character > 0 && character < 128 ); // else it won't work in utf-8 + while ( in->good() ) + { + int c = in->peek(); + if ( c == character ) + return true; + if ( c <= 0 ) // Silent failure: can't get document at this scope + return false; + + in->get(); + *tag += (char) c; + } + return false; +} +#endif + +// One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The +// "assign" optimization removes over 10% of the execution time. +// +const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ) +{ + // Oddly, not supported on some comilers, + //name->clear(); + // So use this: + *name = ""; + assert( p ); + + // Names start with letters or underscores. + // Of course, in unicode, tinyxml has no idea what a letter *is*. The + // algorithm is generous. + // + // After that, they can be letters, underscores, numbers, + // hyphens, or colons. (Colons are valid ony for namespaces, + // but tinyxml can't tell namespaces from names.) + if ( p && *p + && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) + { + const char* start = p; + while( p && *p + && ( IsAlphaNum( (unsigned char ) *p, encoding ) + || *p == '_' + || *p == '-' + || *p == '.' + || *p == ':' ) ) + { + //(*name) += *p; // expensive + ++p; + } + if ( p-start > 0 ) { + name->assign( start, p-start ); + } + return p; + } + return 0; +} + +const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ) +{ + // Presume an entity, and pull it out. + TIXML_STRING ent; + int i; + *length = 0; + + if ( *(p+1) && *(p+1) == '#' && *(p+2) ) + { + unsigned long ucs = 0; + ptrdiff_t delta = 0; + unsigned mult = 1; + + if ( *(p+2) == 'x' ) + { + // Hexadecimal. + if ( !*(p+3) ) return 0; + + const char* q = p+3; + q = strchr( q, ';' ); + + if ( !q || !*q ) return 0; + + delta = q-p; + --q; + + while ( *q != 'x' ) + { + if ( *q >= '0' && *q <= '9' ) + ucs += mult * (*q - '0'); + else if ( *q >= 'a' && *q <= 'f' ) + ucs += mult * (*q - 'a' + 10); + else if ( *q >= 'A' && *q <= 'F' ) + ucs += mult * (*q - 'A' + 10 ); + else + return 0; + mult *= 16; + --q; + } + } + else + { + // Decimal. + if ( !*(p+2) ) return 0; + + const char* q = p+2; + q = strchr( q, ';' ); + + if ( !q || !*q ) return 0; + + delta = q-p; + --q; + + while ( *q != '#' ) + { + if ( *q >= '0' && *q <= '9' ) + ucs += mult * (*q - '0'); + else + return 0; + mult *= 10; + --q; + } + } + if ( encoding == TIXML_ENCODING_UTF8 ) + { + // convert the UCS to UTF-8 + ConvertUTF32ToUTF8( ucs, value, length ); + } + else + { + *value = (char)ucs; + *length = 1; + } + return p + delta + 1; + } + + // Now try to match it. + for( i=0; iappend( cArr, len ); + } + } + else + { + bool whitespace = false; + + // Remove leading white space: + p = SkipWhiteSpace( p, encoding ); + while ( p && *p + && !StringEqual( p, endTag, caseInsensitive, encoding ) ) + { + if ( *p == '\r' || *p == '\n' ) + { + whitespace = true; + ++p; + } + else if ( IsWhiteSpace( *p ) ) + { + whitespace = true; + ++p; + } + else + { + // If we've found whitespace, add it before the + // new character. Any whitespace just becomes a space. + if ( whitespace ) + { + (*text) += ' '; + whitespace = false; + } + int len; + char cArr[4] = { 0, 0, 0, 0 }; + p = GetChar( p, cArr, &len, encoding ); + if ( len == 1 ) + (*text) += cArr[0]; // more efficient + else + text->append( cArr, len ); + } + } + } + if ( p ) + p += strlen( endTag ); + return p; +} + +#ifdef TIXML_USE_STL + +void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) +{ + // The basic issue with a document is that we don't know what we're + // streaming. Read something presumed to be a tag (and hope), then + // identify it, and call the appropriate stream method on the tag. + // + // This "pre-streaming" will never read the closing ">" so the + // sub-tag can orient itself. + + if ( !StreamTo( in, '<', tag ) ) + { + SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + + while ( in->good() ) + { + int tagIndex = (int) tag->length(); + while ( in->good() && in->peek() != '>' ) + { + int c = in->get(); + if ( c <= 0 ) + { + SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); + break; + } + (*tag) += (char) c; + } + + if ( in->good() ) + { + // We now have something we presume to be a node of + // some sort. Identify it, and call the node to + // continue streaming. + TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); + + if ( node ) + { + node->StreamIn( in, tag ); + bool isElement = node->ToElement() != 0; + delete node; + node = 0; + + // If this is the root element, we're done. Parsing will be + // done by the >> operator. + if ( isElement ) + { + return; + } + } + else + { + SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + } + } + // We should have returned sooner. + SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); +} + +#endif + +const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding ) +{ + ClearError(); + + // Parse away, at the document level. Since a document + // contains nothing but other tags, most of what happens + // here is skipping white space. + if ( !p || !*p ) + { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + // Note that, for a document, this needs to come + // before the while space skip, so that parsing + // starts from the pointer we are given. + location.Clear(); + if ( prevData ) + { + location.row = prevData->cursor.row; + location.col = prevData->cursor.col; + } + else + { + location.row = 0; + location.col = 0; + } + TiXmlParsingData data( p, TabSize(), location.row, location.col ); + location = data.Cursor(); + + if ( encoding == TIXML_ENCODING_UNKNOWN ) + { + // Check for the Microsoft UTF-8 lead bytes. + const unsigned char* pU = (const unsigned char*)p; + if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0 + && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1 + && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) + { + encoding = TIXML_ENCODING_UTF8; + useMicrosoftBOM = true; + } + } + + p = SkipWhiteSpace( p, encoding ); + if ( !p ) + { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + while ( p && *p ) + { + TiXmlNode* node = Identify( p, encoding ); + if ( node ) + { + p = node->Parse( p, &data, encoding ); + LinkEndChild( node ); + } + else + { + break; + } + + // Did we get encoding info? + if ( encoding == TIXML_ENCODING_UNKNOWN + && node->ToDeclaration() ) + { + TiXmlDeclaration* dec = node->ToDeclaration(); + const char* enc = dec->Encoding(); + assert( enc ); + + if ( *enc == 0 ) + encoding = TIXML_ENCODING_UTF8; + else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) ) + encoding = TIXML_ENCODING_UTF8; + else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) + encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice + else + encoding = TIXML_ENCODING_LEGACY; + } + + p = SkipWhiteSpace( p, encoding ); + } + + // Was this empty? + if ( !firstChild ) { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding ); + return 0; + } + + // All is well. + return p; +} + +void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) +{ + // The first error in a chain is more accurate - don't set again! + if ( error ) + return; + + assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); + error = true; + errorId = err; + errorDesc = errorString[ errorId ]; + + errorLocation.Clear(); + if ( pError && data ) + { + data->Stamp( pError, encoding ); + errorLocation = data->Cursor(); + } +} + + +TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) +{ + TiXmlNode* returnNode = 0; + + p = SkipWhiteSpace( p, encoding ); + if( !p || !*p || *p != '<' ) + { + return 0; + } + + TiXmlDocument* doc = GetDocument(); + p = SkipWhiteSpace( p, encoding ); + + if ( !p || !*p ) + { + return 0; + } + + // What is this thing? + // - Elements start with a letter or underscore, but xml is reserved. + // - Comments: "; + + if ( !StringEqual( p, startTag, false, encoding ) ) + { + document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding ); + return 0; + } + p += strlen( startTag ); + + // [ 1475201 ] TinyXML parses entities in comments + // Oops - ReadText doesn't work, because we don't want to parse the entities. + // p = ReadText( p, &value, false, endTag, false, encoding ); + // + // from the XML spec: + /* + [Definition: Comments may appear anywhere in a document outside other markup; in addition, + they may appear within the document type declaration at places allowed by the grammar. + They are not part of the document's character data; an XML processor MAY, but need not, + make it possible for an application to retrieve the text of comments. For compatibility, + the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity + references MUST NOT be recognized within comments. + + An example of a comment: + + + */ + + value = ""; + // Keep all the white space. + while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) + { + value.append( p, 1 ); + ++p; + } + if ( p ) + p += strlen( endTag ); + + return p; +} + + +const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) +{ + p = SkipWhiteSpace( p, encoding ); + if ( !p || !*p ) return 0; + +// int tabsize = 4; +// if ( document ) +// tabsize = document->TabSize(); + + if ( data ) + { + data->Stamp( p, encoding ); + location = data->Cursor(); + } + // Read the name, the '=' and the value. + const char* pErr = p; + p = ReadName( p, &name, encoding ); + if ( !p || !*p ) + { + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding ); + return 0; + } + p = SkipWhiteSpace( p, encoding ); + if ( !p || !*p || *p != '=' ) + { + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); + return 0; + } + + ++p; // skip '=' + p = SkipWhiteSpace( p, encoding ); + if ( !p || !*p ) + { + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); + return 0; + } + + const char* end; + const char SINGLE_QUOTE = '\''; + const char DOUBLE_QUOTE = '\"'; + + if ( *p == SINGLE_QUOTE ) + { + ++p; + end = "\'"; // single quote in string + p = ReadText( p, &value, false, end, false, encoding ); + } + else if ( *p == DOUBLE_QUOTE ) + { + ++p; + end = "\""; // double quote in string + p = ReadText( p, &value, false, end, false, encoding ); + } + else + { + // All attribute values should be in single or double quotes. + // But this is such a common error that the parser will try + // its best, even without them. + value = ""; + while ( p && *p // existence + && !IsWhiteSpace( *p ) && *p != '\n' && *p != '\r' // whitespace + && *p != '/' && *p != '>' ) // tag end + { + if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) { + // [ 1451649 ] Attribute values with trailing quotes not handled correctly + // We did not have an opening quote but seem to have a + // closing one. Give up and throw an error. + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); + return 0; + } + value += *p; + ++p; + } + } + return p; +} + +#ifdef TIXML_USE_STL +void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag ) +{ + while ( in->good() ) + { + int c = in->peek(); + if ( !cdata && (c == '<' ) ) + { + return; + } + if ( c <= 0 ) + { + TiXmlDocument* document = GetDocument(); + if ( document ) + document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + + (*tag) += (char) c; + in->get(); // "commits" the peek made above + + if ( cdata && c == '>' && tag->size() >= 3 ) { + size_t len = tag->size(); + if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) { + // terminator of cdata. + return; + } + } + } +} +#endif + +const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) +{ + value = ""; + TiXmlDocument* document = GetDocument(); + + if ( data ) + { + data->Stamp( p, encoding ); + location = data->Cursor(); + } + + const char* const startTag = ""; + + if ( cdata || StringEqual( p, startTag, false, encoding ) ) + { + cdata = true; + + if ( !StringEqual( p, startTag, false, encoding ) ) + { + document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); + return 0; + } + p += strlen( startTag ); + + // Keep all the white space, ignore the encoding, etc. + while ( p && *p + && !StringEqual( p, endTag, false, encoding ) + ) + { + value += *p; + ++p; + } + + TIXML_STRING dummy; + p = ReadText( p, &dummy, false, endTag, false, encoding ); + return p; + } + else + { + bool ignoreWhite = true; + + const char* end = "<"; + p = ReadText( p, &value, ignoreWhite, end, false, encoding ); + if ( p ) + return p-1; // don't truncate the '<' + return 0; + } +} + +#ifdef TIXML_USE_STL +void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag ) +{ + while ( in->good() ) + { + int c = in->get(); + if ( c <= 0 ) + { + TiXmlDocument* document = GetDocument(); + if ( document ) + document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + (*tag) += (char) c; + + if ( c == '>' ) + { + // All is well. + return; + } + } +} +#endif + +const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding ) +{ + p = SkipWhiteSpace( p, _encoding ); + // Find the beginning, find the end, and look for + // the stuff in-between. + TiXmlDocument* document = GetDocument(); + if ( !p || !*p || !StringEqual( p, "SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding ); + return 0; + } + if ( data ) + { + data->Stamp( p, _encoding ); + location = data->Cursor(); + } + p += 5; + + version = ""; + encoding = ""; + standalone = ""; + + while ( p && *p ) + { + if ( *p == '>' ) + { + ++p; + return p; + } + + p = SkipWhiteSpace( p, _encoding ); + if ( StringEqual( p, "version", true, _encoding ) ) + { + TiXmlAttribute attrib; + p = attrib.Parse( p, data, _encoding ); + version = attrib.Value(); + } + else if ( StringEqual( p, "encoding", true, _encoding ) ) + { + TiXmlAttribute attrib; + p = attrib.Parse( p, data, _encoding ); + encoding = attrib.Value(); + } + else if ( StringEqual( p, "standalone", true, _encoding ) ) + { + TiXmlAttribute attrib; + p = attrib.Parse( p, data, _encoding ); + standalone = attrib.Value(); + } + else + { + // Read over whatever it is. + while( p && *p && *p != '>' && !IsWhiteSpace( *p ) ) + ++p; + } + } + return 0; +} + +bool TiXmlText::Blank() const +{ + for ( unsigned i=0; i +#include +#include +#include +#include +#include +#include +#include "wrl.h" +#include "common.h" + +using namespace std; + + +/// VRML reader class +class VRMLReader { + private: + /// Read buffer + char * mBuffer; + int mBufSize; + int mBufActual; + int mBufPos; + bool mEndOfFile; + + /// File comment(s) + string mComment; + + /// Read one character from the file stream - via the read buffer + char GetNextChar() + { + if(!mStream) + throw runtime_error("VRML input stream undefined."); + if(mBufPos >= mBufActual) + { + mBufPos = 0; + if(!mStream->eof()) + { + mStream->read(mBuffer, mBufSize); + mBufActual = mStream->gcount(); + } + else + mBufActual = 0; + mEndOfFile = (mBufActual < 1); + } + if(!mEndOfFile) + { + char c = mBuffer[mBufPos]; + ++ mBufPos; + return c; + } + else + return ' '; + } + + /// Read the next line from file + string GetNextLine() + { + // Read the token (until the next new line) + stringstream sstr; + char c = GetNextChar(); + while((!mEndOfFile) && (!IsEOL(c))) + { + sstr << c; + c = GetNextChar(); + } + return sstr.str(); + } + + /// Read a line comment from the stream, and append it to the global + /// comment string + void ReadComment() + { + // Extract the line comment + string newComment = TrimString(GetNextLine()); + + // Append the line comment to the global comment string + if(newComment.size() > 0) + { + if(mComment.size() > 0) + mComment = mComment + string(" "); + mComment = mComment + newComment; + } + } + + /// Read the next token from file (skip comments and whitespaces) + string GetNextToken() + { + char c = ' '; + + // Iterate until we find the first character of a token + while(!mEndOfFile) + { + while(!mEndOfFile) + { + c = GetNextChar(); + if(!IsWhiteSpace(c)) + break; + } + + // End of file? + if(mEndOfFile) + return string(""); + + // Was this a comment? + if(c == '#') + ReadComment(); + else + break; + } + + // Read the token (until the next white space) + stringstream sstr; + while((!mEndOfFile) && (!IsWhiteSpace(c))) + { + sstr << c; + c = GetNextChar(); + } + return sstr.str(); + } + + public: + /// Constructor + VRMLReader() + { + // Init read buffer + mBufSize = 1024; + mBuffer = new char[mBufSize]; + mBufActual = 0; + mBufPos = 0; + mEndOfFile = false; + + // Clear state + mStream = 0; + mComment = string(""); + } + + /// Destructor + ~VRMLReader() + { + delete [] mBuffer; + } + + /// Read the mesh from a file + void ReadMesh(Mesh * aMesh) + { + // Read the header + string header = GetNextLine(); + if(header.substr(0, 10) != string("#VRML V2.0")) + throw runtime_error("Not a valid VRML 2.0 file."); + + // Read the rest of the file + while(!mEndOfFile) + { + string token = GetNextToken(); + if(token == string("geometry")) + { + token = GetNextToken(); + if(token == string("IndexedFaceSet")) + { + // ...FIXME + } + } + } + + // Set mesh comment (if any) + aMesh->mComment = mComment; + } + + /// Input file stream + ifstream * mStream; +}; + + +/// Import a mesh from a VRML 2.0 file. +void Import_WRL(const char * aFileName, Mesh * aMesh) +{ + // FIXME: The import functionality has not yet been fully implemented + throw runtime_error("VRML import is not yet supported."); + + // Clear the mesh + aMesh->Clear(); + + // Open the input file + ifstream f(aFileName, ios::in); + if(f.fail()) + throw runtime_error("Could not open input file."); + + // Initialize the reader object + VRMLReader reader; + reader.mStream = &f; + + // Read the entire file... + reader.ReadMesh(aMesh); + + // Close the input file + f.close(); +} + +/// Export a mesh to a VRML 2.0 file. +void Export_WRL(const char * aFileName, Mesh * aMesh, Options &aOptions) +{ + // Open the output file + ofstream f(aFileName, ios::out); + if(f.fail()) + throw runtime_error("Could not open output file."); + + // Set floating point precision + f << setprecision(8); + + // Write VRML file header ID + f << "#VRML V2.0 utf8" << endl; + + // Write comment + if(aMesh->mComment.size() > 0) + { + stringstream sstr(aMesh->mComment); + sstr.seekg(0); + while(!sstr.eof()) + { + string line; + getline(sstr, line); + line = TrimString(line); + if(line.size() > 0) + f << "# " << line << endl; + } + } + f << endl; + + // Write shape header + f << "Group {" << endl; + f << "\tchildren [" << endl; + f << "\t\tShape {" << endl; + f << "\t\t\tappearance Appearance {" << endl; + f << "\t\t\t\tmaterial Material {" << endl; + f << "\t\t\t\t\tdiffuseColor 1.0 1.0 1.0" << endl; + f << "\t\t\t\t\tambientIntensity 0.2" << endl; + f << "\t\t\t\t\tspecularColor 0.8 0.8 0.8" << endl; + f << "\t\t\t\t\tshininess 0.4" << endl; + f << "\t\t\t\t\ttransparency 0" << endl; + f << "\t\t\t\t}" << endl; + f << "\t\t\t}" << endl; + f << "\t\t\tgeometry IndexedFaceSet {" << endl; + f << "\t\t\t\tccw TRUE" << endl; + f << "\t\t\t\tsolid FALSE" << endl; + + // Write vertices + f << "\t\t\t\tcoord DEF co Coordinate {" << endl; + f << "\t\t\t\t\tpoint [" << endl; + for(unsigned int i = 0; i < aMesh->mVertices.size(); ++ i) + { + f << "\t\t\t\t\t\t" << + aMesh->mVertices[i].x << " " << + aMesh->mVertices[i].y << " " << + aMesh->mVertices[i].z << "," << endl; + } + f << "\t\t\t\t\t]" << endl; + f << "\t\t\t\t}" << endl; + + // Write faces + f << "\t\t\t\tcoordIndex [" << endl; + unsigned int triCount = aMesh->mIndices.size() / 3; + for(unsigned int i = 0; i < triCount; ++ i) + { + f << "\t\t\t\t\t" << + aMesh->mIndices[i * 3] << ", " << + aMesh->mIndices[i * 3 + 1] << ", " << + aMesh->mIndices[i * 3 + 2] << ", -1," << endl; + } + f << "\t\t\t\t]" << endl; + + // Write shape footer + f << "\t\t\t}" << endl; + f << "\t\t}" << endl; + f << "\t]" << endl; + f << "}" << endl; + + // Close the output file + f.close(); +} diff --git a/3rdparty/openctm/tools/wrl.h b/3rdparty/openctm/tools/wrl.h new file mode 100644 index 000000000..8b6facdfb --- /dev/null +++ b/3rdparty/openctm/tools/wrl.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Product: OpenCTM tools +// File: wrl.h +// Description: Interface for the VRML 2.0 file format importer/exporter. +//----------------------------------------------------------------------------- +// Copyright (c) 2009-2010 Marcus Geelnard +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +//----------------------------------------------------------------------------- + +#ifndef __WRL_H_ +#define __WRL_H_ + +#include "mesh.h" +#include "convoptions.h" + +/// Import a mesh from a VRML 2.0 file. +void Import_WRL(const char * aFileName, Mesh * aMesh); + +/// Export a mesh to a VRML 2.0 file. +void Export_WRL(const char * aFileName, Mesh * aMesh, Options &aOptions); + +#endif // __WRL_H_ diff --git a/3rdparty/openctm/tools/zlib/Makefile.linux b/3rdparty/openctm/tools/zlib/Makefile.linux new file mode 100644 index 000000000..295b57fda --- /dev/null +++ b/3rdparty/openctm/tools/zlib/Makefile.linux @@ -0,0 +1,39 @@ +# Makefile for zlib - for Linux +# Copyright (C) 1995-2005 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +CC=gcc +CFLAGS=-c -O3 -W + +AR=ar rcs +RM=rm -f + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infback.o inftrees.o inffast.o + + +all: libz.a + +libz.a: $(OBJS) + $(AR) $@ $(OBJS) + +clean: + $(RM) *.o libz.a + +%.o: %.c + $(CC) $(CFLAGS) $< + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/3rdparty/openctm/tools/zlib/Makefile.macosx b/3rdparty/openctm/tools/zlib/Makefile.macosx new file mode 100644 index 000000000..8df2c006c --- /dev/null +++ b/3rdparty/openctm/tools/zlib/Makefile.macosx @@ -0,0 +1,39 @@ +# Makefile for zlib - for Mac OS X +# Copyright (C) 1995-2005 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +CC=gcc +CFLAGS=-c -O3 -W + +AR=ar rcs +RM=rm -f + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infback.o inftrees.o inffast.o + + +all: libz.a + +libz.a: $(OBJS) + $(AR) $@ $(OBJS) + +clean: + $(RM) *.o libz.a + +%.o: %.c + $(CC) $(CFLAGS) $< + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/3rdparty/openctm/tools/zlib/Makefile.mingw b/3rdparty/openctm/tools/zlib/Makefile.mingw new file mode 100644 index 000000000..42305a3f4 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/Makefile.mingw @@ -0,0 +1,39 @@ +# Makefile for zlib - for MinGW for Windows +# Copyright (C) 1995-2005 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +CC=gcc +CFLAGS=-c -O3 -W + +AR=ar rcs +RM=del /Q + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infback.o inftrees.o inffast.o + + +all: libz.a + +libz.a: $(OBJS) + $(AR) $@ $(OBJS) + +clean: + $(RM) *.o libz.a + +%.o: %.c + $(CC) $(CFLAGS) $< + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/3rdparty/openctm/tools/zlib/Makefile.msvc b/3rdparty/openctm/tools/zlib/Makefile.msvc new file mode 100644 index 000000000..3c4e070fa --- /dev/null +++ b/3rdparty/openctm/tools/zlib/Makefile.msvc @@ -0,0 +1,39 @@ +# Makefile for zlib - for MS Visual Studio for Windows +# Copyright (C) 1995-2005 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +CC = cl +CFLAGS = $(LOC) /nologo /c /O2 /Gs /W3 /I. /D_CRT_SECURE_NO_WARNINGS + +AR=lib /nologo +RM=del /Q + +OBJS = adler32.obj compress.obj crc32.obj gzio.obj uncompr.obj deflate.obj trees.obj \ + zutil.obj inflate.obj infback.obj inftrees.obj inffast.obj + + +all: libz.lib + +libz.lib: $(OBJS) + $(AR) /OUT:$@ $(OBJS) + +clean: + $(RM) *.obj libz.lib + +.c.obj: + $(CC) $(CFLAGS) /Fo$@ $< + +adler32.obj: zlib.h zconf.h +compress.obj: zlib.h zconf.h +crc32.obj: crc32.h zlib.h zconf.h +deflate.obj: deflate.h zutil.h zlib.h zconf.h +example.obj: zlib.h zconf.h +gzio.obj: zutil.h zlib.h zconf.h +inffast.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.obj: zutil.h zlib.h zconf.h inftrees.h +minigzip.obj: zlib.h zconf.h +trees.obj: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.obj: zlib.h zconf.h +zutil.obj: zutil.h zlib.h zconf.h diff --git a/3rdparty/openctm/tools/zlib/README b/3rdparty/openctm/tools/zlib/README new file mode 100644 index 000000000..758cc5002 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/README @@ -0,0 +1,125 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.3 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). These documents are also available in other +formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file example.c which also tests that the library +is working correctly. Another example is given in the file minigzip.c. The +compression library itself is composed of all source files except example.c and +minigzip.c. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile. In short "make test; make install" should work for most +machines. For Unix: "./configure; make test; make install". For MSDOS, use one +of the special makefiles such as Makefile.msc. For VMS, use make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, +please check this site to verify that you have the latest version of zlib; +otherwise get the latest version and check whether the problem still exists or +not. + +PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking +for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available in +http://dogma.net/markn/articles/zlibtool/zlibtool.htm + +The changes made in version 1.2.3 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory "contrib". + +A Java implementation of zlib is available in the Java Development Kit +http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html +See the zlib home page http://www.zlib.org for details. + +A Perl interface to zlib written by Paul Marquess is in the +CPAN (Comprehensive Perl Archive Network) sites +http://www.cpan.org/modules/by-module/Compress/ + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://www.python.org/doc/lib/module-zlib.html + +A zlib binding for TCL written by Andreas Kupries is +availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + +- When building a shared, i.e. dynamic library on Mac OS X, the library must be + installed before testing (do "make install" before "make test"), since the + library location is specified in the library. + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. Please +read the FAQ for more information on the distribution of modified source +versions. diff --git a/3rdparty/openctm/tools/zlib/adler32.c b/3rdparty/openctm/tools/zlib/adler32.c new file mode 100644 index 000000000..007ba2627 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/adler32.c @@ -0,0 +1,149 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +#define BASE 65521UL /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* use NO_DIVIDE if your processor does not do division in hardware */ +#ifdef NO_DIVIDE +# define MOD(a) \ + do { \ + if (a >= (BASE << 16)) a -= (BASE << 16); \ + if (a >= (BASE << 15)) a -= (BASE << 15); \ + if (a >= (BASE << 14)) a -= (BASE << 14); \ + if (a >= (BASE << 13)) a -= (BASE << 13); \ + if (a >= (BASE << 12)) a -= (BASE << 12); \ + if (a >= (BASE << 11)) a -= (BASE << 11); \ + if (a >= (BASE << 10)) a -= (BASE << 10); \ + if (a >= (BASE << 9)) a -= (BASE << 9); \ + if (a >= (BASE << 8)) a -= (BASE << 8); \ + if (a >= (BASE << 7)) a -= (BASE << 7); \ + if (a >= (BASE << 6)) a -= (BASE << 6); \ + if (a >= (BASE << 5)) a -= (BASE << 5); \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +# define MOD4(a) \ + do { \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +#else +# define MOD(a) a %= BASE +# define MOD4(a) a %= BASE +#endif + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD4(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off_t len2; +{ + unsigned long sum1; + unsigned long sum2; + unsigned rem; + + /* the derivation of this formula is left as an exercise for the reader */ + rem = (unsigned)(len2 % BASE); + sum1 = adler1 & 0xffff; + sum2 = rem * sum1; + MOD(sum2); + sum1 += (adler2 & 0xffff) + BASE - 1; + sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; + if (sum1 > BASE) sum1 -= BASE; + if (sum1 > BASE) sum1 -= BASE; + if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); + if (sum2 > BASE) sum2 -= BASE; + return sum1 | (sum2 << 16); +} diff --git a/3rdparty/openctm/tools/zlib/compress.c b/3rdparty/openctm/tools/zlib/compress.c new file mode 100644 index 000000000..df04f0148 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/compress.c @@ -0,0 +1,79 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; + int level; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; +#ifdef MAXSEG_64K + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +#endif + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + err = deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + deflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = deflateEnd(&stream); + return err; +} + +/* =========================================================================== + */ +int ZEXPORT compress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} + +/* =========================================================================== + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +uLong ZEXPORT compressBound (sourceLen) + uLong sourceLen; +{ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; +} diff --git a/3rdparty/openctm/tools/zlib/crc32.c b/3rdparty/openctm/tools/zlib/crc32.c new file mode 100644 index 000000000..f658a9ef5 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/crc32.c @@ -0,0 +1,423 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Thanks to Rodney Brown for his contribution of faster + * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing + * tables for updating the shift register in one step with three exclusive-ors + * instead of four steps with four exclusive-ors. This results in about a + * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + */ + +/* @(#) $Id$ */ + +/* + Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore + protection on the static variables used to control the first-use generation + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + first call get_crc_table() to initialize the tables before allowing more than + one thread to use crc32(). + */ + +#ifdef MAKECRCH +# include +# ifndef DYNAMIC_CRC_TABLE +# define DYNAMIC_CRC_TABLE +# endif /* !DYNAMIC_CRC_TABLE */ +#endif /* MAKECRCH */ + +#include "zutil.h" /* for STDC and FAR definitions */ + +#define local static + +/* Find a four-byte integer type for crc32_little() and crc32_big(). */ +#ifndef NOBYFOUR +# ifdef STDC /* need ANSI C limits.h to determine sizes */ +# include +# define BYFOUR +# if (UINT_MAX == 0xffffffffUL) + typedef unsigned int u4; +# else +# if (ULONG_MAX == 0xffffffffUL) + typedef unsigned long u4; +# else +# if (USHRT_MAX == 0xffffffffUL) + typedef unsigned short u4; +# else +# undef BYFOUR /* can't find a four-byte integer type! */ +# endif +# endif +# endif +# endif /* STDC */ +#endif /* !NOBYFOUR */ + +/* Definitions for doing the crc four data bytes at a time. */ +#ifdef BYFOUR +# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ + (((w)&0xff00)<<8)+(((w)&0xff)<<24)) + local unsigned long crc32_little OF((unsigned long, + const unsigned char FAR *, unsigned)); + local unsigned long crc32_big OF((unsigned long, + const unsigned char FAR *, unsigned)); +# define TBLS 8 +#else +# define TBLS 1 +#endif /* BYFOUR */ + +/* Local functions for crc concatenation */ +local unsigned long gf2_matrix_times OF((unsigned long *mat, + unsigned long vec)); +local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); + +#ifdef DYNAMIC_CRC_TABLE + +local volatile int crc_table_empty = 1; +local unsigned long FAR crc_table[TBLS][256]; +local void make_crc_table OF((void)); +#ifdef MAKECRCH + local void write_table OF((FILE *, const unsigned long FAR *)); +#endif /* MAKECRCH */ +/* + Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The first table is simply the CRC of all possible eight bit values. This is + all the information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. The remaining tables + allow for word-at-a-time CRC calculation for both big-endian and little- + endian machines, where a word is four bytes. +*/ +local void make_crc_table() +{ + unsigned long c; + int n, k; + unsigned long poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static volatile int first = 1; /* flag to limit concurrent making */ + static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* See if another task is already doing this (not thread-safe, but better + than nothing -- significantly reduces duration of vulnerability in + case the advice about DYNAMIC_CRC_TABLE is ignored) */ + if (first) { + first = 0; + + /* make exclusive-or pattern from polynomial (0xedb88320UL) */ + poly = 0UL; + for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) + poly |= 1UL << (31 - p[n]); + + /* generate a crc for every 8-bit value */ + for (n = 0; n < 256; n++) { + c = (unsigned long)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[0][n] = c; + } + +#ifdef BYFOUR + /* generate crc for each value followed by one, two, and three zeros, + and then the byte reversal of those as well as the first table */ + for (n = 0; n < 256; n++) { + c = crc_table[0][n]; + crc_table[4][n] = REV(c); + for (k = 1; k < 4; k++) { + c = crc_table[0][c & 0xff] ^ (c >> 8); + crc_table[k][n] = c; + crc_table[k + 4][n] = REV(c); + } + } +#endif /* BYFOUR */ + + crc_table_empty = 0; + } + else { /* not first */ + /* wait for the other guy to finish (not efficient, but rare) */ + while (crc_table_empty) + ; + } + +#ifdef MAKECRCH + /* write out CRC tables to crc32.h */ + { + FILE *out; + + out = fopen("crc32.h", "w"); + if (out == NULL) return; + fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); + fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); + fprintf(out, "local const unsigned long FAR "); + fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); + write_table(out, crc_table[0]); +# ifdef BYFOUR + fprintf(out, "#ifdef BYFOUR\n"); + for (k = 1; k < 8; k++) { + fprintf(out, " },\n {\n"); + write_table(out, crc_table[k]); + } + fprintf(out, "#endif\n"); +# endif /* BYFOUR */ + fprintf(out, " }\n};\n"); + fclose(out); + } +#endif /* MAKECRCH */ +} + +#ifdef MAKECRCH +local void write_table(out, table) + FILE *out; + const unsigned long FAR *table; +{ + int n; + + for (n = 0; n < 256; n++) + fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], + n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); +} +#endif /* MAKECRCH */ + +#else /* !DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + */ +#include "crc32.h" +#endif /* DYNAMIC_CRC_TABLE */ + +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const unsigned long FAR * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + return (const unsigned long FAR *)crc_table; +} + +/* ========================================================================= */ +#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) +#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 + +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + if (buf == Z_NULL) return 0UL; + +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + +#ifdef BYFOUR + if (sizeof(void *) == sizeof(ptrdiff_t)) { + u4 endian; + + endian = 1; + if (*((unsigned char *)(&endian))) + return crc32_little(crc, buf, len); + else + return crc32_big(crc, buf, len); + } +#endif /* BYFOUR */ + crc = crc ^ 0xffffffffUL; + while (len >= 8) { + DO8; + len -= 8; + } + if (len) do { + DO1; + } while (--len); + return crc ^ 0xffffffffUL; +} + +#ifdef BYFOUR + +/* ========================================================================= */ +#define DOLIT4 c ^= *buf4++; \ + c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ + crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] +#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 + +/* ========================================================================= */ +local unsigned long crc32_little(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = (u4)crc; + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + while (len >= 32) { + DOLIT32; + len -= 32; + } + while (len >= 4) { + DOLIT4; + len -= 4; + } + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + } while (--len); + c = ~c; + return (unsigned long)c; +} + +/* ========================================================================= */ +#define DOBIG4 c ^= *++buf4; \ + c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ + crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] +#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 + +/* ========================================================================= */ +local unsigned long crc32_big(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = REV((u4)crc); + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + buf4--; + while (len >= 32) { + DOBIG32; + len -= 32; + } + while (len >= 4) { + DOBIG4; + len -= 4; + } + buf4++; + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + } while (--len); + c = ~c; + return (unsigned long)(REV(c)); +} + +#endif /* BYFOUR */ + +#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ + +/* ========================================================================= */ +local unsigned long gf2_matrix_times(mat, vec) + unsigned long *mat; + unsigned long vec; +{ + unsigned long sum; + + sum = 0; + while (vec) { + if (vec & 1) + sum ^= *mat; + vec >>= 1; + mat++; + } + return sum; +} + +/* ========================================================================= */ +local void gf2_matrix_square(square, mat) + unsigned long *square; + unsigned long *mat; +{ + int n; + + for (n = 0; n < GF2_DIM; n++) + square[n] = gf2_matrix_times(mat, mat[n]); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off_t len2; +{ + int n; + unsigned long row; + unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ + unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ + + /* degenerate case */ + if (len2 == 0) + return crc1; + + /* put operator for one zero bit in odd */ + odd[0] = 0xedb88320L; /* CRC-32 polynomial */ + row = 1; + for (n = 1; n < GF2_DIM; n++) { + odd[n] = row; + row <<= 1; + } + + /* put operator for two zero bits in even */ + gf2_matrix_square(even, odd); + + /* put operator for four zero bits in odd */ + gf2_matrix_square(odd, even); + + /* apply len2 zeros to crc1 (first square will put the operator for one + zero byte, eight zero bits, in even) */ + do { + /* apply zeros operator for this bit of len2 */ + gf2_matrix_square(even, odd); + if (len2 & 1) + crc1 = gf2_matrix_times(even, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + if (len2 == 0) + break; + + /* another iteration of the loop with odd and even swapped */ + gf2_matrix_square(odd, even); + if (len2 & 1) + crc1 = gf2_matrix_times(odd, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + } while (len2 != 0); + + /* return combined crc */ + crc1 ^= crc2; + return crc1; +} diff --git a/3rdparty/openctm/tools/zlib/crc32.h b/3rdparty/openctm/tools/zlib/crc32.h new file mode 100644 index 000000000..8053b6117 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/crc32.h @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const unsigned long FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff --git a/3rdparty/openctm/tools/zlib/deflate.c b/3rdparty/openctm/tools/zlib/deflate.c new file mode 100644 index 000000000..29ce1f64a --- /dev/null +++ b/3rdparty/openctm/tools/zlib/deflate.c @@ -0,0 +1,1736 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://www.ietf.org/rfc/rfc1951.txt + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +#ifndef FASTEST +local block_state deflate_slow OF((deflate_state *s, int flush)); +#endif +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifndef FASTEST +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif +#endif +local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +#ifndef NO_DUMMY_DECL +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ +#endif + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(strm, level, version, stream_size) + z_streamp strm; + int level; + const char *version; + int stream_size; +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + version, stream_size) + z_streamp strm; + int level; + int method; + int windowBits; + int memLevel; + int strategy; + const char *version; + int stream_size; +{ + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + z_streamp strm; + const Bytef *dictionary; + uInt dictLength; +{ + deflate_state *s; + uInt length = dictLength; + uInt n; + IPos hash_head = 0; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || + strm->state->wrap == 2 || + (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) + return Z_STREAM_ERROR; + + s = strm->state; + if (s->wrap) + strm->adler = adler32(strm->adler, dictionary, dictLength); + + if (length < MIN_MATCH) return Z_OK; + if (length > MAX_DIST(s)) { + length = MAX_DIST(s); + dictionary += dictLength - length; /* use the tail of the dictionary */ + } + zmemcpy(s->window, dictionary, length); + s->strstart = length; + s->block_start = (long)length; + + /* Insert all strings in the hash table (except for the last two bytes). + * s->lookahead stays null, so s->ins_h will be recomputed at the next + * call of fill_window. + */ + s->ins_h = s->window[0]; + UPDATE_HASH(s, s->ins_h, s->window[1]); + for (n = 0; n <= length - MIN_MATCH; n++) { + INSERT_STRING(s, n, hash_head); + } + if (hash_head) hash_head = 0; /* to make compiler happy */ + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + lm_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetHeader (strm, head) + z_streamp strm; + gz_headerp head; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (strm->state->wrap != 2) return Z_STREAM_ERROR; + strm->state->gzhead = head; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime (strm, bits, value) + z_streamp strm; + int bits; + int value; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + strm->state->bi_valid = bits; + strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(strm, level, strategy) + z_streamp strm; + int level; + int strategy; +{ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if (func != configuration_table[level].func && strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_PARTIAL_FLUSH); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= */ +int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) + z_streamp strm; + int good_length; + int max_lazy; + int nice_length; + int max_chain; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + s->good_match = good_length; + s->max_lazy_match = max_lazy; + s->nice_match = nice_length; + s->max_chain_length = max_chain; + return Z_OK; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns + * a close to exact, as well as small, upper bound on the compressed size. + * They are coded as constants here for a reason--if the #define's are + * changed, then this function needs to be changed as well. The return + * value for 15 and 8 only works for those exact settings. + * + * For any setting other than those defaults for windowBits and memLevel, + * the value returned is a conservative worst case for the maximum expansion + * resulting from using fixed blocks instead of stored blocks, which deflate + * can emit on compressed data for some combinations of the parameters. + * + * This function could be more sophisticated to provide closer upper bounds + * for every combination of windowBits and memLevel, as well as wrap. + * But even the conservative upper bound of about 14% expansion does not + * seem onerous for output buffer allocation. + */ +uLong ZEXPORT deflateBound(strm, sourceLen) + z_streamp strm; + uLong sourceLen; +{ + deflate_state *s; + uLong destLen; + + /* conservative upper bound */ + destLen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + + /* if can't get parameters, return conservative bound */ + if (strm == Z_NULL || strm->state == Z_NULL) + return destLen; + + /* if not default parameters, return conservative bound */ + s = strm->state; + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return destLen; + + /* default settings: return tight bound for that case */ + return compressBound(sourceLen); +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (s, b) + deflate_state *s; + uInt b; +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(strm) + z_streamp strm; +{ + unsigned len = strm->state->pending; + + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, strm->state->pending_out, len); + strm->next_out += len; + strm->state->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + strm->state->pending -= len; + if (strm->state->pending == 0) { + strm->state->pending_out = strm->state->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (strm, flush) + z_streamp strm; + int flush; +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the header */ + if (s->status == INIT_STATE) { +#ifdef GZIP + if (s->wrap == 2) { + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + else +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + } + } +#ifdef GZIP + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + + while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) + break; + } + put_byte(s, s->gzhead->extra[s->gzindex]); + s->gzindex++; + } + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (s->gzindex == s->gzhead->extra_len) { + s->gzindex = 0; + s->status = NAME_STATE; + } + } + else + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) { + s->gzindex = 0; + s->status = COMMENT_STATE; + } + } + else + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) + s->status = HCRC_STATE; + } + else + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) + flush_pending(strm); + if (s->pending + 2 <= s->pending_buf_size) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + } + } + else + s->status = BUSY_STATE; + } +#endif + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && flush <= old_flush && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (strm) + z_streamp strm; +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && + status != EXTRA_STATE && + status != NAME_STATE && + status != COMMENT_STATE && + status != HCRC_STATE && + status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (dest, source) + z_streamp dest; + z_streamp source; +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + zmemcpy(dest, source, sizeof(z_stream)); + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + zmemcpy(ds, ss, sizeof(deflate_state)); + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(strm, buf, size) + z_streamp strm; + Bytef *buf; + unsigned size; +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, strm->next_in, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, strm->next_in, len); + } +#endif + zmemcpy(buf, strm->next_in, len); + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (s) + deflate_state *s; +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifndef FASTEST +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +#endif +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} +#endif /* ASMV */ +#endif /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for level == 1 or strategy == Z_RLE only + */ +local uInt longest_match_fast(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* DEBUG */ + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + /* %%% avoid this when Z_RLE */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) return; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead >= MIN_MATCH) { + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, eof) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (eof)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, eof) { \ + FLUSH_BLOCK_ONLY(s, eof); \ + if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ +#ifdef FASTEST + if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || + (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { + s->match_length = longest_match_fast (s, hash_head); + } +#else + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } +#endif + /* longest_match() or longest_match_fast() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } + /* longest_match() or longest_match_fast() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif /* FASTEST */ + +#if 0 +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +local block_state deflate_rle(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + uInt run; /* length of run */ + uInt max; /* maximum length of run */ + uInt prev; /* byte at distance one to match */ + Bytef *scan; /* scan for end of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest encodable run. + */ + if (s->lookahead < MAX_MATCH) { + fill_window(s); + if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + run = 0; + if (s->strstart > 0) { /* if there is a previous byte, that is */ + max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH; + scan = s->window + s->strstart - 1; + prev = *scan++; + do { + if (*scan++ != prev) + break; + } while (++run < max); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (run >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, run); + _tr_tally_dist(s, 1, run - MIN_MATCH, bflush); + s->lookahead -= run; + s->strstart += run; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif diff --git a/3rdparty/openctm/tools/zlib/deflate.h b/3rdparty/openctm/tools/zlib/deflate.h new file mode 100644 index 000000000..05a5ab3a2 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/deflate.h @@ -0,0 +1,331 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2004 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define INIT_STATE 42 +#define EXTRA_STATE 69 +#define NAME_STATE 73 +#define COMMENT_STATE 91 +#define HCRC_STATE 103 +#define BUSY_STATE 113 +#define FINISH_STATE 666 +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + uInt pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + uInt gzindex; /* where in extra, name, or comment */ + Byte method; /* STORED (for zip only) or DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to supress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + int last_eob_len; /* bit length of EOB code for last block */ + +#ifdef DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + + /* in trees.c */ +void _tr_init OF((deflate_state *s)); +int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); +void _tr_align OF((deflate_state *s)); +void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch _length_code[]; + extern uch _dist_code[]; +#else + extern const uch _length_code[]; + extern const uch _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff --git a/3rdparty/openctm/tools/zlib/gzio.c b/3rdparty/openctm/tools/zlib/gzio.c new file mode 100644 index 000000000..7e90f4928 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/gzio.c @@ -0,0 +1,1026 @@ +/* gzio.c -- IO on .gz files + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Compile this file with -DNO_GZCOMPRESS to avoid the compression code. + */ + +/* @(#) $Id$ */ + +#include + +#include "zutil.h" + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +#ifndef Z_BUFSIZE +# ifdef MAXSEG_64K +# define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ +# else +# define Z_BUFSIZE 16384 +# endif +#endif +#ifndef Z_PRINTF_BUFSIZE +# define Z_PRINTF_BUFSIZE 4096 +#endif + +#ifdef __MVS__ +# pragma map (fdopen , "\174\174FDOPEN") + FILE *fdopen(int, const char *); +#endif + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern void free OF((voidpf ptr)); +#endif + +#define ALLOC(size) malloc(size) +#define TRYFREE(p) {if (p) free(p);} + +static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ + +/* gzip flag byte */ +#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ +#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ +#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ +#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define COMMENT 0x10 /* bit 4 set: file comment present */ +#define RESERVED 0xE0 /* bits 5..7: reserved */ + +typedef struct gz_stream { + z_stream stream; + int z_err; /* error code for last stream operation */ + int z_eof; /* set if end of input file */ + FILE *file; /* .gz file */ + Byte *inbuf; /* input buffer */ + Byte *outbuf; /* output buffer */ + uLong crc; /* crc32 of uncompressed data */ + char *msg; /* error message */ + char *path; /* path name for debugging only */ + int transparent; /* 1 if input file is not a .gz file */ + char mode; /* 'w' or 'r' */ + z_off_t start; /* start of compressed data in file (header skipped) */ + z_off_t in; /* bytes into deflate or inflate */ + z_off_t out; /* bytes out of deflate or inflate */ + int back; /* one character push-back */ + int last; /* true if push-back is last character */ +} gz_stream; + + +local gzFile gz_open OF((const char *path, const char *mode, int fd)); +local int do_flush OF((gzFile file, int flush)); +local int get_byte OF((gz_stream *s)); +local void check_header OF((gz_stream *s)); +local int destroy OF((gz_stream *s)); +local void putLong OF((FILE *file, uLong x)); +local uLong getLong OF((gz_stream *s)); + +/* =========================================================================== + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb"). The file is given either by file descriptor + or path name (if fd == -1). + gz_open returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). +*/ +local gzFile gz_open (path, mode, fd) + const char *path; + const char *mode; + int fd; +{ + int err; + int level = Z_DEFAULT_COMPRESSION; /* compression level */ + int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */ + char *p = (char*)mode; + gz_stream *s; + char fmode[80]; /* copy of mode, without the compression level */ + char *m = fmode; + + if (!path || !mode) return Z_NULL; + + s = (gz_stream *)ALLOC(sizeof(gz_stream)); + if (!s) return Z_NULL; + + s->stream.zalloc = (alloc_func)0; + s->stream.zfree = (free_func)0; + s->stream.opaque = (voidpf)0; + s->stream.next_in = s->inbuf = Z_NULL; + s->stream.next_out = s->outbuf = Z_NULL; + s->stream.avail_in = s->stream.avail_out = 0; + s->file = NULL; + s->z_err = Z_OK; + s->z_eof = 0; + s->in = 0; + s->out = 0; + s->back = EOF; + s->crc = crc32(0L, Z_NULL, 0); + s->msg = NULL; + s->transparent = 0; + + s->path = (char*)ALLOC(strlen(path)+1); + if (s->path == NULL) { + return destroy(s), (gzFile)Z_NULL; + } + strcpy(s->path, path); /* do this early for debugging */ + + s->mode = '\0'; + do { + if (*p == 'r') s->mode = 'r'; + if (*p == 'w' || *p == 'a') s->mode = 'w'; + if (*p >= '0' && *p <= '9') { + level = *p - '0'; + } else if (*p == 'f') { + strategy = Z_FILTERED; + } else if (*p == 'h') { + strategy = Z_HUFFMAN_ONLY; + } else if (*p == 'R') { + strategy = Z_RLE; + } else { + *m++ = *p; /* copy the mode */ + } + } while (*p++ && m != fmode + sizeof(fmode)); + if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; + + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + err = Z_STREAM_ERROR; +#else + err = deflateInit2(&(s->stream), level, + Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy); + /* windowBits is passed < 0 to suppress zlib header */ + + s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); +#endif + if (err != Z_OK || s->outbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } + } else { + s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); + + err = inflateInit2(&(s->stream), -MAX_WBITS); + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are + * present after the compressed stream. + */ + if (err != Z_OK || s->inbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } + } + s->stream.avail_out = Z_BUFSIZE; + + errno = 0; + s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); + + if (s->file == NULL) { + return destroy(s), (gzFile)Z_NULL; + } + if (s->mode == 'w') { + /* Write a very simple .gz header: + */ + fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], + Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); + s->start = 10L; + /* We use 10L instead of ftell(s->file) to because ftell causes an + * fflush on some systems. This version of the library doesn't use + * start anyway in write mode, so this initialization is not + * necessary. + */ + } else { + check_header(s); /* skip the .gz header */ + s->start = ftell(s->file) - s->stream.avail_in; + } + + return (gzFile)s; +} + +/* =========================================================================== + Opens a gzip (.gz) file for reading or writing. +*/ +gzFile ZEXPORT gzopen (path, mode) + const char *path; + const char *mode; +{ + return gz_open (path, mode, -1); +} + +/* =========================================================================== + Associate a gzFile with the file descriptor fd. fd is not dup'ed here + to mimic the behavio(u)r of fdopen. +*/ +gzFile ZEXPORT gzdopen (fd, mode) + int fd; + const char *mode; +{ + char name[46]; /* allow for up to 128-bit integers */ + + if (fd < 0) return (gzFile)Z_NULL; + sprintf(name, "", fd); /* for debugging */ + + return gz_open (name, mode, fd); +} + +/* =========================================================================== + * Update the compression level and strategy + */ +int ZEXPORT gzsetparams (file, level, strategy) + gzFile file; + int level; + int strategy; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + /* Make room to allow flushing */ + if (s->stream.avail_out == 0) { + + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + } + s->stream.avail_out = Z_BUFSIZE; + } + + return deflateParams (&(s->stream), level, strategy); +} + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ +local int get_byte(s) + gz_stream *s; +{ + if (s->z_eof) return EOF; + if (s->stream.avail_in == 0) { + errno = 0; + s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + if (ferror(s->file)) s->z_err = Z_ERRNO; + return EOF; + } + s->stream.next_in = s->inbuf; + } + s->stream.avail_in--; + return *(s->stream.next_in)++; +} + +/* =========================================================================== + Check the gzip header of a gz_stream opened for reading. Set the stream + mode to transparent if the gzip magic header is not present; set s->err + to Z_DATA_ERROR if the magic header is present but the rest of the header + is incorrect. + IN assertion: the stream s has already been created sucessfully; + s->stream.avail_in is zero for the first time, but may be non-zero + for concatenated .gz files. +*/ +local void check_header(s) + gz_stream *s; +{ + int method; /* method byte */ + int flags; /* flags byte */ + uInt len; + int c; + + /* Assure two bytes in the buffer so we can peek ahead -- handle case + where first byte of header is at the end of the buffer after the last + gzip segment */ + len = s->stream.avail_in; + if (len < 2) { + if (len) s->inbuf[0] = s->stream.next_in[0]; + errno = 0; + len = (uInt)fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file); + if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO; + s->stream.avail_in += len; + s->stream.next_in = s->inbuf; + if (s->stream.avail_in < 2) { + s->transparent = s->stream.avail_in; + return; + } + } + + /* Peek ahead to check the gzip magic header */ + if (s->stream.next_in[0] != gz_magic[0] || + s->stream.next_in[1] != gz_magic[1]) { + s->transparent = 1; + return; + } + s->stream.avail_in -= 2; + s->stream.next_in += 2; + + /* Check the rest of the gzip header */ + method = get_byte(s); + flags = get_byte(s); + if (method != Z_DEFLATED || (flags & RESERVED) != 0) { + s->z_err = Z_DATA_ERROR; + return; + } + + /* Discard time, xflags and OS code: */ + for (len = 0; len < 6; len++) (void)get_byte(s); + + if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ + len = (uInt)get_byte(s); + len += ((uInt)get_byte(s))<<8; + /* len is garbage if EOF but the loop below will quit anyway */ + while (len-- != 0 && get_byte(s) != EOF) ; + } + if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ + while ((c = get_byte(s)) != 0 && c != EOF) ; + } + if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ + while ((c = get_byte(s)) != 0 && c != EOF) ; + } + if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ + for (len = 0; len < 2; len++) (void)get_byte(s); + } + s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; +} + + /* =========================================================================== + * Cleanup then free the given gz_stream. Return a zlib error code. + Try freeing in the reverse order of allocations. + */ +local int destroy (s) + gz_stream *s; +{ + int err = Z_OK; + + if (!s) return Z_STREAM_ERROR; + + TRYFREE(s->msg); + + if (s->stream.state != NULL) { + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + err = Z_STREAM_ERROR; +#else + err = deflateEnd(&(s->stream)); +#endif + } else if (s->mode == 'r') { + err = inflateEnd(&(s->stream)); + } + } + if (s->file != NULL && fclose(s->file)) { +#ifdef ESPIPE + if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ +#endif + err = Z_ERRNO; + } + if (s->z_err < 0) err = s->z_err; + + TRYFREE(s->inbuf); + TRYFREE(s->outbuf); + TRYFREE(s->path); + TRYFREE(s); + return err; +} + +/* =========================================================================== + Reads the given number of uncompressed bytes from the compressed file. + gzread returns the number of bytes actually read (0 for end of file). +*/ +int ZEXPORT gzread (file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + gz_stream *s = (gz_stream*)file; + Bytef *start = (Bytef*)buf; /* starting point for crc computation */ + Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ + + if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; + + if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1; + if (s->z_err == Z_STREAM_END) return 0; /* EOF */ + + next_out = (Byte*)buf; + s->stream.next_out = (Bytef*)buf; + s->stream.avail_out = len; + + if (s->stream.avail_out && s->back != EOF) { + *next_out++ = s->back; + s->stream.next_out++; + s->stream.avail_out--; + s->back = EOF; + s->out++; + start++; + if (s->last) { + s->z_err = Z_STREAM_END; + return 1; + } + } + + while (s->stream.avail_out != 0) { + + if (s->transparent) { + /* Copy first the lookahead bytes: */ + uInt n = s->stream.avail_in; + if (n > s->stream.avail_out) n = s->stream.avail_out; + if (n > 0) { + zmemcpy(s->stream.next_out, s->stream.next_in, n); + next_out += n; + s->stream.next_out = next_out; + s->stream.next_in += n; + s->stream.avail_out -= n; + s->stream.avail_in -= n; + } + if (s->stream.avail_out > 0) { + s->stream.avail_out -= + (uInt)fread(next_out, 1, s->stream.avail_out, s->file); + } + len -= s->stream.avail_out; + s->in += len; + s->out += len; + if (len == 0) s->z_eof = 1; + return (int)len; + } + if (s->stream.avail_in == 0 && !s->z_eof) { + + errno = 0; + s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + if (ferror(s->file)) { + s->z_err = Z_ERRNO; + break; + } + } + s->stream.next_in = s->inbuf; + } + s->in += s->stream.avail_in; + s->out += s->stream.avail_out; + s->z_err = inflate(&(s->stream), Z_NO_FLUSH); + s->in -= s->stream.avail_in; + s->out -= s->stream.avail_out; + + if (s->z_err == Z_STREAM_END) { + /* Check CRC and original size */ + s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); + start = s->stream.next_out; + + if (getLong(s) != s->crc) { + s->z_err = Z_DATA_ERROR; + } else { + (void)getLong(s); + /* The uncompressed length returned by above getlong() may be + * different from s->out in case of concatenated .gz files. + * Check for such files: + */ + check_header(s); + if (s->z_err == Z_OK) { + inflateReset(&(s->stream)); + s->crc = crc32(0L, Z_NULL, 0); + } + } + } + if (s->z_err != Z_OK || s->z_eof) break; + } + s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); + + if (len == s->stream.avail_out && + (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO)) + return -1; + return (int)(len - s->stream.avail_out); +} + + +/* =========================================================================== + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ +int ZEXPORT gzgetc(file) + gzFile file; +{ + unsigned char c; + + return gzread(file, &c, 1) == 1 ? c : -1; +} + + +/* =========================================================================== + Push one byte back onto the stream. +*/ +int ZEXPORT gzungetc(c, file) + int c; + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF; + s->back = c; + s->out--; + s->last = (s->z_err == Z_STREAM_END); + if (s->last) s->z_err = Z_OK; + s->z_eof = 0; + return c; +} + + +/* =========================================================================== + Reads bytes from the compressed file until len-1 characters are + read, or a newline character is read and transferred to buf, or an + end-of-file condition is encountered. The string is then terminated + with a null character. + gzgets returns buf, or Z_NULL in case of error. + + The current implementation is not optimized at all. +*/ +char * ZEXPORT gzgets(file, buf, len) + gzFile file; + char *buf; + int len; +{ + char *b = buf; + if (buf == Z_NULL || len <= 0) return Z_NULL; + + while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ; + *buf = '\0'; + return b == buf && len > 0 ? Z_NULL : b; +} + + +#ifndef NO_GZCOMPRESS +/* =========================================================================== + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of bytes actually written (0 in case of error). +*/ +int ZEXPORT gzwrite (file, buf, len) + gzFile file; + voidpc buf; + unsigned len; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + s->stream.next_in = (Bytef*)buf; + s->stream.avail_in = len; + + while (s->stream.avail_in != 0) { + + if (s->stream.avail_out == 0) { + + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + break; + } + s->stream.avail_out = Z_BUFSIZE; + } + s->in += s->stream.avail_in; + s->out += s->stream.avail_out; + s->z_err = deflate(&(s->stream), Z_NO_FLUSH); + s->in -= s->stream.avail_in; + s->out -= s->stream.avail_out; + if (s->z_err != Z_OK) break; + } + s->crc = crc32(s->crc, (const Bytef *)buf, len); + + return (int)(len - s->stream.avail_in); +} + + +/* =========================================================================== + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). +*/ +#ifdef STDC +#include + +int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) +{ + char buf[Z_PRINTF_BUFSIZE]; + va_list va; + int len; + + buf[sizeof(buf) - 1] = 0; + va_start(va, format); +#ifdef NO_vsnprintf +# ifdef HAS_vsprintf_void + (void)vsprintf(buf, format, va); + va_end(va); + for (len = 0; len < sizeof(buf); len++) + if (buf[len] == 0) break; +# else + len = vsprintf(buf, format, va); + va_end(va); +# endif +#else +# ifdef HAS_vsnprintf_void + (void)vsnprintf(buf, sizeof(buf), format, va); + va_end(va); + len = strlen(buf); +# else + len = vsnprintf(buf, sizeof(buf), format, va); + va_end(va); +# endif +#endif + if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) + return 0; + return gzwrite(file, buf, (unsigned)len); +} +#else /* not ANSI C */ + +int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + gzFile file; + const char *format; + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +{ + char buf[Z_PRINTF_BUFSIZE]; + int len; + + buf[sizeof(buf) - 1] = 0; +#ifdef NO_snprintf +# ifdef HAS_sprintf_void + sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + for (len = 0; len < sizeof(buf); len++) + if (buf[len] == 0) break; +# else + len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#else +# ifdef HAS_snprintf_void + snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(buf); +# else + len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#endif + if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) + return 0; + return gzwrite(file, buf, len); +} +#endif + +/* =========================================================================== + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ +int ZEXPORT gzputc(file, c) + gzFile file; + int c; +{ + unsigned char cc = (unsigned char) c; /* required for big endian systems */ + + return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1; +} + + +/* =========================================================================== + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ +int ZEXPORT gzputs(file, s) + gzFile file; + const char *s; +{ + return gzwrite(file, (char*)s, (unsigned)strlen(s)); +} + + +/* =========================================================================== + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. +*/ +local int do_flush (file, flush) + gzFile file; + int flush; +{ + uInt len; + int done = 0; + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + s->stream.avail_in = 0; /* should be zero already anyway */ + + for (;;) { + len = Z_BUFSIZE - s->stream.avail_out; + + if (len != 0) { + if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) { + s->z_err = Z_ERRNO; + return Z_ERRNO; + } + s->stream.next_out = s->outbuf; + s->stream.avail_out = Z_BUFSIZE; + } + if (done) break; + s->out += s->stream.avail_out; + s->z_err = deflate(&(s->stream), flush); + s->out -= s->stream.avail_out; + + /* Ignore the second of two consecutive flushes: */ + if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; + + /* deflate has finished flushing only when it hasn't used up + * all the available space in the output buffer: + */ + done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); + + if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; + } + return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; +} + +int ZEXPORT gzflush (file, flush) + gzFile file; + int flush; +{ + gz_stream *s = (gz_stream*)file; + int err = do_flush (file, flush); + + if (err) return err; + fflush(s->file); + return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; +} +#endif /* NO_GZCOMPRESS */ + +/* =========================================================================== + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error. + SEEK_END is not implemented, returns error. + In this version of the library, gzseek can be extremely slow. +*/ +z_off_t ZEXPORT gzseek (file, offset, whence) + gzFile file; + z_off_t offset; + int whence; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || whence == SEEK_END || + s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) { + return -1L; + } + + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + return -1L; +#else + if (whence == SEEK_SET) { + offset -= s->in; + } + if (offset < 0) return -1L; + + /* At this point, offset is the number of zero bytes to write. */ + if (s->inbuf == Z_NULL) { + s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */ + if (s->inbuf == Z_NULL) return -1L; + zmemzero(s->inbuf, Z_BUFSIZE); + } + while (offset > 0) { + uInt size = Z_BUFSIZE; + if (offset < Z_BUFSIZE) size = (uInt)offset; + + size = gzwrite(file, s->inbuf, size); + if (size == 0) return -1L; + + offset -= size; + } + return s->in; +#endif + } + /* Rest of function is for reading only */ + + /* compute absolute position */ + if (whence == SEEK_CUR) { + offset += s->out; + } + if (offset < 0) return -1L; + + if (s->transparent) { + /* map to fseek */ + s->back = EOF; + s->stream.avail_in = 0; + s->stream.next_in = s->inbuf; + if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; + + s->in = s->out = offset; + return offset; + } + + /* For a negative seek, rewind and use positive seek */ + if (offset >= s->out) { + offset -= s->out; + } else if (gzrewind(file) < 0) { + return -1L; + } + /* offset is now the number of bytes to skip. */ + + if (offset != 0 && s->outbuf == Z_NULL) { + s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); + if (s->outbuf == Z_NULL) return -1L; + } + if (offset && s->back != EOF) { + s->back = EOF; + s->out++; + offset--; + if (s->last) s->z_err = Z_STREAM_END; + } + while (offset > 0) { + int size = Z_BUFSIZE; + if (offset < Z_BUFSIZE) size = (int)offset; + + size = gzread(file, s->outbuf, (uInt)size); + if (size <= 0) return -1L; + offset -= size; + } + return s->out; +} + +/* =========================================================================== + Rewinds input file. +*/ +int ZEXPORT gzrewind (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r') return -1; + + s->z_err = Z_OK; + s->z_eof = 0; + s->back = EOF; + s->stream.avail_in = 0; + s->stream.next_in = s->inbuf; + s->crc = crc32(0L, Z_NULL, 0); + if (!s->transparent) (void)inflateReset(&s->stream); + s->in = 0; + s->out = 0; + return fseek(s->file, s->start, SEEK_SET); +} + +/* =========================================================================== + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. +*/ +z_off_t ZEXPORT gztell (file) + gzFile file; +{ + return gzseek(file, 0L, SEEK_CUR); +} + +/* =========================================================================== + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ +int ZEXPORT gzeof (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + /* With concatenated compressed files that can have embedded + * crc trailers, z_eof is no longer the only/best indicator of EOF + * on a gz_stream. Handle end-of-stream error explicitly here. + */ + if (s == NULL || s->mode != 'r') return 0; + if (s->z_eof) return 1; + return s->z_err == Z_STREAM_END; +} + +/* =========================================================================== + Returns 1 if reading and doing so transparently, otherwise zero. +*/ +int ZEXPORT gzdirect (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r') return 0; + return s->transparent; +} + +/* =========================================================================== + Outputs a long in LSB order to the given file +*/ +local void putLong (file, x) + FILE *file; + uLong x; +{ + int n; + for (n = 0; n < 4; n++) { + fputc((int)(x & 0xff), file); + x >>= 8; + } +} + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets z_err in case + of error. +*/ +local uLong getLong (s) + gz_stream *s; +{ + uLong x = (uLong)get_byte(s); + int c; + + x += ((uLong)get_byte(s))<<8; + x += ((uLong)get_byte(s))<<16; + c = get_byte(s); + if (c == EOF) s->z_err = Z_DATA_ERROR; + x += ((uLong)c)<<24; + return x; +} + +/* =========================================================================== + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. +*/ +int ZEXPORT gzclose (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL) return Z_STREAM_ERROR; + + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + return Z_STREAM_ERROR; +#else + if (do_flush (file, Z_FINISH) != Z_OK) + return destroy((gz_stream*)file); + + putLong (s->file, s->crc); + putLong (s->file, (uLong)(s->in & 0xffffffff)); +#endif + } + return destroy((gz_stream*)file); +} + +#ifdef STDC +# define zstrerror(errnum) strerror(errnum) +#else +# define zstrerror(errnum) "" +#endif + +/* =========================================================================== + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ +const char * ZEXPORT gzerror (file, errnum) + gzFile file; + int *errnum; +{ + char *m; + gz_stream *s = (gz_stream*)file; + + if (s == NULL) { + *errnum = Z_STREAM_ERROR; + return (const char*)ERR_MSG(Z_STREAM_ERROR); + } + *errnum = s->z_err; + if (*errnum == Z_OK) return (const char*)""; + + m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg); + + if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err); + + TRYFREE(s->msg); + s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3); + if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR); + strcpy(s->msg, s->path); + strcat(s->msg, ": "); + strcat(s->msg, m); + return (const char*)s->msg; +} + +/* =========================================================================== + Clear the error and end-of-file flags, and do the same for the real file. +*/ +void ZEXPORT gzclearerr (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL) return; + if (s->z_err != Z_STREAM_END) s->z_err = Z_OK; + s->z_eof = 0; + clearerr(s->file); +} diff --git a/3rdparty/openctm/tools/zlib/infback.c b/3rdparty/openctm/tools/zlib/infback.c new file mode 100644 index 000000000..455dbc9ee --- /dev/null +++ b/3rdparty/openctm/tools/zlib/infback.c @@ -0,0 +1,623 @@ +/* infback.c -- inflate using a call-back interface + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + This code is largely copied from inflate.c. Normally either infback.o or + inflate.o would be linked into an application--not both. The interface + with inffast.c is retained so that optimized assembler-coded versions of + inflate_fast() can be used with either inflate.c or infback.c. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); + +/* + strm provides memory allocation functions in zalloc and zfree, or + Z_NULL to use the library memory allocation functions. + + windowBits is in the range 8..15, and window is a user-supplied + window and output buffer that is 2**windowBits bytes. + */ +int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) +z_streamp strm; +int windowBits; +unsigned char FAR *window; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL || window == Z_NULL || + windowBits < 8 || windowBits > 15) + return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *)ZALLOC(strm, 1, + sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->dmax = 32768U; + state->wbits = windowBits; + state->wsize = 1U << windowBits; + state->window = window; + state->write = 0; + state->whave = 0; + return Z_OK; +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +/* Macros for inflateBack(): */ + +/* Load returned state from inflate_fast() */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Set state from registers for inflate_fast() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Assure that some input is available. If input is requested, but denied, + then return a Z_BUF_ERROR from inflateBack(). */ +#define PULL() \ + do { \ + if (have == 0) { \ + have = in(in_desc, &next); \ + if (have == 0) { \ + next = Z_NULL; \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflateBack() + with an error if there is no input available. */ +#define PULLBYTE() \ + do { \ + PULL(); \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflateBack() with + an error. */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Assure that some output space is available, by writing out the window + if it's full. If the write fails, return from inflateBack() with a + Z_BUF_ERROR. */ +#define ROOM() \ + do { \ + if (left == 0) { \ + put = state->window; \ + left = state->wsize; \ + state->whave = left; \ + if (out(out_desc, put, left)) { \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* + strm provides the memory allocation functions and window buffer on input, + and provides information on the unused input on return. For Z_DATA_ERROR + returns, strm will also provide an error message. + + in() and out() are the call-back input and output functions. When + inflateBack() needs more input, it calls in(). When inflateBack() has + filled the window with output, or when it completes with data in the + window, it calls out() to write out the data. The application must not + change the provided input until in() is called again or inflateBack() + returns. The application must not change the window/output buffer until + inflateBack() returns. + + in() and out() are called with a descriptor parameter provided in the + inflateBack() call. This parameter can be a structure that provides the + information required to do the read or write, as well as accumulated + information on the input and output such as totals and check values. + + in() should return zero on failure. out() should return non-zero on + failure. If either in() or out() fails, than inflateBack() returns a + Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it + was in() or out() that caused in the error. Otherwise, inflateBack() + returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format + error, or Z_MEM_ERROR if it could not allocate memory for the state. + inflateBack() can also return Z_STREAM_ERROR if the input parameters + are not correct, i.e. strm is Z_NULL or the state was not initialized. + */ +int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) +z_streamp strm; +in_func in; +void FAR *in_desc; +out_func out; +void FAR *out_desc; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code this; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + /* Check that the strm exists and that the state was initialized */ + if (strm == Z_NULL || strm->state == Z_NULL) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* Reset the state */ + strm->msg = Z_NULL; + state->mode = TYPE; + state->last = 0; + state->whave = 0; + next = strm->next_in; + have = next != Z_NULL ? strm->avail_in : 0; + hold = 0; + bits = 0; + put = state->window; + left = state->wsize; + + /* Inflate until end of block marked as last */ + for (;;) + switch (state->mode) { + case TYPE: + /* determine and dispatch block type */ + if (state->last) { + BYTEBITS(); + state->mode = DONE; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + + case STORED: + /* get and verify stored block length */ + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + + /* copy stored block from input to output */ + while (state->length != 0) { + copy = state->length; + PULL(); + ROOM(); + if (copy > have) copy = have; + if (copy > left) copy = left; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + + case TABLE: + /* get dynamic table entries descriptor */ + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + + /* get code length code lengths (not a typo) */ + state->have = 0; + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + + /* get length and distance code code lengths */ + state->have = 0; + while (state->have < state->nlen + state->ndist) { + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.val < 16) { + NEEDBITS(this.bits); + DROPBITS(this.bits); + state->lens[state->have++] = this.val; + } + else { + if (this.val == 16) { + NEEDBITS(this.bits + 2); + DROPBITS(this.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = (unsigned)(state->lens[state->have - 1]); + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (this.val == 17) { + NEEDBITS(this.bits + 3); + DROPBITS(this.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(this.bits + 7); + DROPBITS(this.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* build code tables */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + + case LEN: + /* use inflate_fast() if we have enough input and output */ + if (have >= 6 && left >= 258) { + RESTORE(); + if (state->whave < state->wsize) + state->whave = state->wsize - left; + inflate_fast(strm, state->wsize); + LOAD(); + break; + } + + /* get a literal, length, or end-of-block code */ + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.op && (this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + state->length = (unsigned)this.val; + + /* process literal */ + if (this.op == 0) { + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + ROOM(); + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + } + + /* process end of block */ + if (this.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + + /* invalid code */ + if (this.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + + /* length code -- get extra bits, if any */ + state->extra = (unsigned)(this.op) & 15; + if (state->extra != 0) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + + /* get distance code */ + for (;;) { + this = state->distcode[BITS(state->distbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if ((this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + if (this.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)this.val; + + /* get distance extra bits, if any */ + state->extra = (unsigned)(this.op) & 15; + if (state->extra != 0) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } + if (state->offset > state->wsize - (state->whave < state->wsize ? + left : 0)) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + + /* copy match from window to output */ + do { + ROOM(); + copy = state->wsize - state->offset; + if (copy < left) { + from = put + copy; + copy = left - copy; + } + else { + from = put - state->offset; + copy = left; + } + if (copy > state->length) copy = state->length; + state->length -= copy; + left -= copy; + do { + *put++ = *from++; + } while (--copy); + } while (state->length != 0); + break; + + case DONE: + /* inflate stream terminated properly -- write leftover output */ + ret = Z_STREAM_END; + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left)) + ret = Z_BUF_ERROR; + } + goto inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + + default: /* can't happen, but makes compilers happy */ + ret = Z_STREAM_ERROR; + goto inf_leave; + } + + /* Return unused input */ + inf_leave: + strm->next_in = next; + strm->avail_in = have; + return ret; +} + +int ZEXPORT inflateBackEnd(strm) +z_streamp strm; +{ + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff --git a/3rdparty/openctm/tools/zlib/inffast.c b/3rdparty/openctm/tools/zlib/inffast.c new file mode 100644 index 000000000..bbee92ed1 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inffast.c @@ -0,0 +1,318 @@ +/* inffast.c -- fast decoding + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifndef ASMINF + +/* Allow machine dependent optimization for post-increment or pre-increment. + Based on testing to date, + Pre-increment preferred for: + - PowerPC G3 (Adler) + - MIPS R5000 (Randers-Pehrson) + Post-increment preferred for: + - none + No measurable difference: + - Pentium III (Anderson) + - M68060 (Nikl) + */ +#ifdef POSTINC +# define OFF 0 +# define PUP(a) *(a)++ +#else +# define OFF 1 +# define PUP(a) *++(a) +#endif + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + unsigned char FAR *in; /* local strm->next_in */ + unsigned char FAR *last; /* while in < last, enough input available */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code this; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in - OFF; + last = in + (strm->avail_in - 5); + out = strm->next_out - OFF; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + write = state->write; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = lcode[hold & lmask]; + dolen: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op == 0) { /* literal */ + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + PUP(out) = (unsigned char)(this.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = dcode[hold & dmask]; + dodist: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + from = window - OFF; + if (write == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (write < op) { /* wrap around window */ + from += wsize + write - op; + op -= write; + if (op < len) { /* some from end of window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = window - OFF; + if (write < len) { /* some from start of window */ + op = write; + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += write - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } while (len > 2); + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + this = dcode[this.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + this = lcode[this.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in + OFF; + strm->next_out = out + OFF; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +/* + inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): + - Using bit fields for code structure + - Different op definition to avoid & for extra bits (do & for table bits) + - Three separate decoding do-loops for direct, window, and write == 0 + - Special case for distance > 1 copies to do overlapped load and store copy + - Explicit branch predictions (based on measured branch probabilities) + - Deferring match copy and interspersed it with decoding subsequent codes + - Swapping literal/length else + - Swapping window/direct else + - Larger unrolled copy loops (three is about right) + - Moving len -= 3 statement into middle of loop + */ + +#endif /* !ASMINF */ diff --git a/3rdparty/openctm/tools/zlib/inffast.h b/3rdparty/openctm/tools/zlib/inffast.h new file mode 100644 index 000000000..1e88d2d97 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inffast.h @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/3rdparty/openctm/tools/zlib/inffixed.h b/3rdparty/openctm/tools/zlib/inffixed.h new file mode 100644 index 000000000..75ed4b597 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. It + is part of the implementation of the compression library and + is subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/3rdparty/openctm/tools/zlib/inflate.c b/3rdparty/openctm/tools/zlib/inflate.c new file mode 100644 index 000000000..792fdee8e --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inflate.c @@ -0,0 +1,1368 @@ +/* inflate.c -- zlib decompression + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * Change history: + * + * 1.2.beta0 24 Nov 2002 + * - First version -- complete rewrite of inflate to simplify code, avoid + * creation of window when not needed, minimize use of window when it is + * needed, make inffast.c even faster, implement gzip decoding, and to + * improve code readability and style over the previous zlib inflate code + * + * 1.2.beta1 25 Nov 2002 + * - Use pointers for available input and output checking in inffast.c + * - Remove input and output counters in inffast.c + * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 + * - Remove unnecessary second byte pull from length extra in inffast.c + * - Unroll direct copy to three copies per loop in inffast.c + * + * 1.2.beta2 4 Dec 2002 + * - Change external routine names to reduce potential conflicts + * - Correct filename to inffixed.h for fixed tables in inflate.c + * - Make hbuf[] unsigned char to match parameter type in inflate.c + * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) + * to avoid negation problem on Alphas (64 bit) in inflate.c + * + * 1.2.beta3 22 Dec 2002 + * - Add comments on state->bits assertion in inffast.c + * - Add comments on op field in inftrees.h + * - Fix bug in reuse of allocated window after inflateReset() + * - Remove bit fields--back to byte structure for speed + * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths + * - Change post-increments to pre-increments in inflate_fast(), PPC biased? + * - Add compile time option, POSTINC, to use post-increments instead (Intel?) + * - Make MATCH copy in inflate() much faster for when inflate_fast() not used + * - Use local copies of stream next and avail values, as well as local bit + * buffer and bit count in inflate()--for speed when inflate_fast() not used + * + * 1.2.beta4 1 Jan 2003 + * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings + * - Move a comment on output buffer sizes from inffast.c to inflate.c + * - Add comments in inffast.c to introduce the inflate_fast() routine + * - Rearrange window copies in inflate_fast() for speed and simplification + * - Unroll last copy for window match in inflate_fast() + * - Use local copies of window variables in inflate_fast() for speed + * - Pull out common write == 0 case for speed in inflate_fast() + * - Make op and len in inflate_fast() unsigned for consistency + * - Add FAR to lcode and dcode declarations in inflate_fast() + * - Simplified bad distance check in inflate_fast() + * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new + * source file infback.c to provide a call-back interface to inflate for + * programs like gzip and unzip -- uses window as output buffer to avoid + * window copying + * + * 1.2.beta5 1 Jan 2003 + * - Improved inflateBack() interface to allow the caller to provide initial + * input in strm. + * - Fixed stored blocks bug in inflateBack() + * + * 1.2.beta6 4 Jan 2003 + * - Added comments in inffast.c on effectiveness of POSTINC + * - Typecasting all around to reduce compiler warnings + * - Changed loops from while (1) or do {} while (1) to for (;;), again to + * make compilers happy + * - Changed type of window in inflateBackInit() to unsigned char * + * + * 1.2.beta7 27 Jan 2003 + * - Changed many types to unsigned or unsigned short to avoid warnings + * - Added inflateCopy() function + * + * 1.2.0 9 Mar 2003 + * - Changed inflateBack() interface to provide separate opaque descriptors + * for the in() and out() functions + * - Changed inflateBack() argument and in_func typedef to swap the length + * and buffer address return values for the input function + * - Check next_in and next_out for Z_NULL on entry to inflate() + * + * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); +local int updatewindow OF((z_streamp strm, unsigned out)); +#ifdef BUILDFIXED + void makefixed OF((void)); +#endif +local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, + unsigned len)); + +int ZEXPORT inflateReset(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + strm->adler = 1; /* to support ill-conceived Java test suite */ + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->dmax = 32768U; + state->head = Z_NULL; + state->wsize = 0; + state->whave = 0; + state->write = 0; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +int ZEXPORT inflatePrime(strm, bits, value) +z_streamp strm; +int bits; +int value; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += value << state->bits; + state->bits += bits; + return Z_OK; +} + +int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) +z_streamp strm; +int windowBits; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL) return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + if (windowBits < 0) { + state->wrap = 0; + windowBits = -windowBits; + } + else { + state->wrap = (windowBits >> 4) + 1; +#ifdef GUNZIP + if (windowBits < 48) windowBits &= 15; +#endif + } + if (windowBits < 8 || windowBits > 15) { + ZFREE(strm, state); + strm->state = Z_NULL; + return Z_STREAM_ERROR; + } + state->wbits = (unsigned)windowBits; + state->window = Z_NULL; + return inflateReset(strm); +} + +int ZEXPORT inflateInit_(strm, version, stream_size) +z_streamp strm; +const char *version; +int stream_size; +{ + return inflateInit2_(strm, DEF_WBITS, version, stream_size); +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also + defines BUILDFIXED, so the tables are built on the fly. makefixed() writes + those tables to stdout, which would be piped to inffixed.h. A small program + can simply call makefixed to do this: + + void makefixed(void); + + int main(void) + { + makefixed(); + return 0; + } + + Then that can be linked with zlib built with MAKEFIXED defined and run: + + a.out > inffixed.h + */ +void makefixed() +{ + unsigned low, size; + struct inflate_state state; + + fixedtables(&state); + puts(" /* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits, + state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +local int updatewindow(strm, out) +z_streamp strm; +unsigned out; +{ + struct inflate_state FAR *state; + unsigned copy, dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->write = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + copy = out - strm->avail_out; + if (copy >= state->wsize) { + zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); + state->write = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->write; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->write, strm->next_out - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, strm->next_out - copy, copy); + state->write = copy; + state->whave = state->wsize; + } + else { + state->write += dist; + if (state->write == state->wsize) state->write = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Reverse the bytes in a 32-bit value */ +#define REVERSE(q) \ + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int ZEXPORT inflate(strm, flush) +z_streamp strm; +int flush; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code this; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (len > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if (state->flags & 0x0200) CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if (hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = REVERSE(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.val < 16) { + NEEDBITS(this.bits); + DROPBITS(this.bits); + state->lens[state->have++] = this.val; + } + else { + if (this.val == 16) { + NEEDBITS(this.bits + 2); + DROPBITS(this.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (this.val == 17) { + NEEDBITS(this.bits + 3); + DROPBITS(this.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(this.bits + 7); + DROPBITS(this.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* build code tables */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + break; + } + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.op && (this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + state->length = (unsigned)this.val; + if ((int)(this.op) == 0) { + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + state->mode = LIT; + break; + } + if (this.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + if (this.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(this.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->mode = DIST; + case DIST: + for (;;) { + this = state->distcode[BITS(state->distbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if ((this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + if (this.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)this.val; + state->extra = (unsigned)(this.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + if (state->offset > state->whave + out - left) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->write) { + copy -= state->write; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->write - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if (out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if (( +#ifdef GUNZIP + state->flags ? hold : +#endif + REVERSE(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) + if (updatewindow(strm, out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if (state->wrap && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int ZEXPORT inflateEnd(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + +int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) +z_streamp strm; +const Bytef *dictionary; +uInt dictLength; +{ + struct inflate_state FAR *state; + unsigned long id; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->wrap != 0 && state->mode != DICT) + return Z_STREAM_ERROR; + + /* check for correct dictionary id */ + if (state->mode == DICT) { + id = adler32(0L, Z_NULL, 0); + id = adler32(id, dictionary, dictLength); + if (id != state->check) + return Z_DATA_ERROR; + } + + /* copy dictionary to window */ + if (updatewindow(strm, strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + if (dictLength > state->wsize) { + zmemcpy(state->window, dictionary + dictLength - state->wsize, + state->wsize); + state->whave = state->wsize; + } + else { + zmemcpy(state->window + state->wsize - dictLength, dictionary, + dictLength); + state->whave = dictLength; + } + state->havedict = 1; + Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +int ZEXPORT inflateGetHeader(strm, head) +z_streamp strm; +gz_headerp head; +{ + struct inflate_state FAR *state; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; + + /* save header structure */ + state->head = head; + head->done = 0; + return Z_OK; +} + +/* + Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found + or when out of input. When called, *have is the number of pattern bytes + found in order so far, in 0..3. On return *have is updated to the new + state. If on return *have equals four, then the pattern was found and the + return value is how many bytes were read including the last byte of the + pattern. If *have is less than four, then the pattern has not been found + yet and the return value is len. In the latter case, syncsearch() can be + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +local unsigned syncsearch(have, buf, len) +unsigned FAR *have; +unsigned char FAR *buf; +unsigned len; +{ + unsigned got; + unsigned next; + + got = *have; + next = 0; + while (next < len && got < 4) { + if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + got++; + else if (buf[next]) + got = 0; + else + got = 4 - got; + next++; + } + *have = got; + return next; +} + +int ZEXPORT inflateSync(strm) +z_streamp strm; +{ + unsigned len; /* number of bytes to look at or looked at */ + unsigned long in, out; /* temporary to save total_in and total_out */ + unsigned char buf[4]; /* to restore bit buffer to byte string */ + struct inflate_state FAR *state; + + /* check parameters */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; + state->hold <<= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { + buf[len++] = (unsigned char)(state->hold); + state->hold >>= 8; + state->bits -= 8; + } + state->have = 0; + syncsearch(&(state->have), buf, len); + } + + /* search available input */ + len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + strm->avail_in -= len; + strm->next_in += len; + strm->total_in += len; + + /* return no joy or set up to restart inflate() on a new block */ + if (state->have != 4) return Z_DATA_ERROR; + in = strm->total_in; out = strm->total_out; + inflateReset(strm); + strm->total_in = in; strm->total_out = out; + state->mode = TYPE; + return Z_OK; +} + +/* + Returns true if inflate is currently at the end of a block generated by + Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + implementation to provide an additional safety check. PPP uses + Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; +} + +int ZEXPORT inflateCopy(dest, source) +z_streamp dest; +z_streamp source; +{ + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; + unsigned wsize; + + /* check input */ + if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || + source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)source->state; + + /* allocate space */ + copy = (struct inflate_state FAR *) + ZALLOC(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) + ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { + ZFREE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + zmemcpy(dest, source, sizeof(z_stream)); + zmemcpy(copy, state, sizeof(struct inflate_state)); + if (state->lencode >= state->codes && + state->lencode <= state->codes + ENOUGH - 1) { + copy->lencode = copy->codes + (state->lencode - state->codes); + copy->distcode = copy->codes + (state->distcode - state->codes); + } + copy->next = copy->codes + (state->next - state->codes); + if (window != Z_NULL) { + wsize = 1U << state->wbits; + zmemcpy(window, state->window, wsize); + } + copy->window = window; + dest->state = (struct internal_state FAR *)copy; + return Z_OK; +} diff --git a/3rdparty/openctm/tools/zlib/inflate.h b/3rdparty/openctm/tools/zlib/inflate.h new file mode 100644 index 000000000..07bd3e78a --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inflate.h @@ -0,0 +1,115 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN, /* i: waiting for length/lit code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to the BAD or MEM mode -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME + NAME -> COMMENT -> HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + Read deflate blocks: + TYPE -> STORED or TABLE or LEN or CHECK + STORED -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN + Read deflate codes: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* state maintained between inflate() calls. Approximately 7K bytes. */ +struct inflate_state { + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ +}; diff --git a/3rdparty/openctm/tools/zlib/inftrees.c b/3rdparty/openctm/tools/zlib/inftrees.c new file mode 100644 index 000000000..8a9c13ff0 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inftrees.c @@ -0,0 +1,329 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#define MAXBITS 15 + +const char inflate_copyright[] = + " inflate 1.2.3 Copyright 1995-2005 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int inflate_table(type, lens, codes, table, bits, work) +codetype type; +unsigned short FAR *lens; +unsigned codes; +code FAR * FAR *table; +unsigned FAR *bits; +unsigned short FAR *work; +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code this; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 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 const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 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 const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)1; + this.val = (unsigned short)0; + *(*table)++ = this; /* make a table to force an error */ + *(*table)++ = this; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min <= MAXBITS; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked when a LENS table is being made + against the space in *table, ENOUGH, minus the maximum space needed by + the worst case distance code, MAXD. This should never happen, but the + sufficiency of ENOUGH has not been proven exhaustively, hence the check. + This assumes that when type == LENS, bits == 9. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + this.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + this.op = (unsigned char)0; + this.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + this.op = (unsigned char)(extra[work[sym]]); + this.val = base[work[sym]]; + } + else { + this.op = (unsigned char)(32 + 64); /* end of block */ + this.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = this; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* + Fill in rest of table for incomplete codes. This loop is similar to the + loop above in incrementing huff for table indices. It is assumed that + len is equal to curr + drop, so there is no loop needed to increment + through high index bits. When the current sub-table is filled, the loop + drops back to the root table to fill in any remaining entries there. + */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)(len - drop); + this.val = (unsigned short)0; + while (huff != 0) { + /* when done with sub-table, drop back to root table */ + if (drop != 0 && (huff & mask) != low) { + drop = 0; + len = root; + next = *table; + this.bits = (unsigned char)len; + } + + /* put invalid code marker in table */ + next[huff >> drop] = this; + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/3rdparty/openctm/tools/zlib/inftrees.h b/3rdparty/openctm/tools/zlib/inftrees.h new file mode 100644 index 000000000..b1104c87e --- /dev/null +++ b/3rdparty/openctm/tools/zlib/inftrees.h @@ -0,0 +1,55 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of dynamic tree. The maximum found in a long but non- + exhaustive search was 1444 code structures (852 for length/literals + and 592 for distances, the latter actually the result of an + exhaustive search). The true maximum is not known, but the value + below is more than safe. */ +#define ENOUGH 2048 +#define MAXD 592 + +/* Type of code to build for inftable() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +extern int inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/3rdparty/openctm/tools/zlib/minigzip.c b/3rdparty/openctm/tools/zlib/minigzip.c new file mode 100644 index 000000000..4524b96a1 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/minigzip.c @@ -0,0 +1,322 @@ +/* minigzip.c -- simulate gzip using the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * minigzip is a minimal implementation of the gzip utility. This is + * only an example of using zlib and isn't meant to replace the + * full-featured gzip. No attempt is made to deal with file systems + * limiting names to 14 or 8+3 characters, etc... Error checking is + * very limited. So use minigzip only for testing; use gzip for the + * real thing. On MSDOS, use only on file names without extension + * or in pipe mode. + */ + +/* @(#) $Id$ */ + +#include +#include "zlib.h" + +#ifdef STDC +# include +# include +#endif + +#ifdef USE_MMAP +# include +# include +# include +#endif + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#ifdef VMS +# define unlink delete +# define GZ_SUFFIX "-gz" +#endif +#ifdef RISCOS +# define unlink remove +# define GZ_SUFFIX "-gz" +# define fileno(file) file->__file +#endif +#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fileno */ +#endif + +#ifndef WIN32 /* unlink already in stdio.h for WIN32 */ + extern int unlink OF((const char *)); +#endif + +#ifndef GZ_SUFFIX +# define GZ_SUFFIX ".gz" +#endif +#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) + +#define BUFLEN 16384 +#define MAX_NAME_LEN 1024 + +#ifdef MAXSEG_64K +# define local static + /* Needed for systems with limitation on stack size. */ +#else +# define local +#endif + +char *prog; + +void error OF((const char *msg)); +void gz_compress OF((FILE *in, gzFile out)); +#ifdef USE_MMAP +int gz_compress_mmap OF((FILE *in, gzFile out)); +#endif +void gz_uncompress OF((gzFile in, FILE *out)); +void file_compress OF((char *file, char *mode)); +void file_uncompress OF((char *file)); +int main OF((int argc, char *argv[])); + +/* =========================================================================== + * Display error message and exit + */ +void error(msg) + const char *msg; +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + +/* =========================================================================== + * Compress input to output then close both files. + */ + +void gz_compress(in, out) + FILE *in; + gzFile out; +{ + local char buf[BUFLEN]; + int len; + int err; + +#ifdef USE_MMAP + /* Try first compressing with mmap. If mmap fails (minigzip used in a + * pipe), use the normal fread loop. + */ + if (gz_compress_mmap(in, out) == Z_OK) return; +#endif + for (;;) { + len = (int)fread(buf, 1, sizeof(buf), in); + if (ferror(in)) { + perror("fread"); + exit(1); + } + if (len == 0) break; + + if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); + } + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); +} + +#ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ + +/* Try compressing the input file at once using mmap. Return Z_OK if + * if success, Z_ERRNO otherwise. + */ +int gz_compress_mmap(in, out) + FILE *in; + gzFile out; +{ + int len; + int err; + int ifd = fileno(in); + caddr_t buf; /* mmap'ed buffer for the entire input file */ + off_t buf_len; /* length of the input file */ + struct stat sb; + + /* Determine the size of the file, needed for mmap: */ + if (fstat(ifd, &sb) < 0) return Z_ERRNO; + buf_len = sb.st_size; + if (buf_len <= 0) return Z_ERRNO; + + /* Now do the actual mmap: */ + buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0); + if (buf == (caddr_t)(-1)) return Z_ERRNO; + + /* Compress the whole file at once: */ + len = gzwrite(out, (char *)buf, (unsigned)buf_len); + + if (len != (int)buf_len) error(gzerror(out, &err)); + + munmap(buf, buf_len); + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); + return Z_OK; +} +#endif /* USE_MMAP */ + +/* =========================================================================== + * Uncompress input to output then close both files. + */ +void gz_uncompress(in, out) + gzFile in; + FILE *out; +{ + local char buf[BUFLEN]; + int len; + int err; + + for (;;) { + len = gzread(in, buf, sizeof(buf)); + if (len < 0) error (gzerror(in, &err)); + if (len == 0) break; + + if ((int)fwrite(buf, 1, (unsigned)len, out) != len) { + error("failed fwrite"); + } + } + if (fclose(out)) error("failed fclose"); + + if (gzclose(in) != Z_OK) error("failed gzclose"); +} + + +/* =========================================================================== + * Compress the given file: create a corresponding .gz file and remove the + * original. + */ +void file_compress(file, mode) + char *file; + char *mode; +{ + local char outfile[MAX_NAME_LEN]; + FILE *in; + gzFile out; + + strcpy(outfile, file); + strcat(outfile, GZ_SUFFIX); + + in = fopen(file, "rb"); + if (in == NULL) { + perror(file); + exit(1); + } + out = gzopen(outfile, mode); + if (out == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, outfile); + exit(1); + } + gz_compress(in, out); + + unlink(file); +} + + +/* =========================================================================== + * Uncompress the given file and remove the original. + */ +void file_uncompress(file) + char *file; +{ + local char buf[MAX_NAME_LEN]; + char *infile, *outfile; + FILE *out; + gzFile in; + uInt len = (uInt)strlen(file); + + strcpy(buf, file); + + if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) { + infile = file; + outfile = buf; + outfile[len-3] = '\0'; + } else { + outfile = file; + infile = buf; + strcat(infile, GZ_SUFFIX); + } + in = gzopen(infile, "rb"); + if (in == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, infile); + exit(1); + } + out = fopen(outfile, "wb"); + if (out == NULL) { + perror(file); + exit(1); + } + + gz_uncompress(in, out); + + unlink(infile); +} + + +/* =========================================================================== + * Usage: minigzip [-d] [-f] [-h] [-r] [-1 to -9] [files...] + * -d : decompress + * -f : compress with Z_FILTERED + * -h : compress with Z_HUFFMAN_ONLY + * -r : compress with Z_RLE + * -1 to -9 : compression level + */ + +int main(argc, argv) + int argc; + char *argv[]; +{ + int uncompr = 0; + gzFile file; + char outmode[20]; + + strcpy(outmode, "wb6 "); + + prog = argv[0]; + argc--, argv++; + + while (argc > 0) { + if (strcmp(*argv, "-d") == 0) + uncompr = 1; + else if (strcmp(*argv, "-f") == 0) + outmode[3] = 'f'; + else if (strcmp(*argv, "-h") == 0) + outmode[3] = 'h'; + else if (strcmp(*argv, "-r") == 0) + outmode[3] = 'R'; + else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' && + (*argv)[2] == 0) + outmode[2] = (*argv)[1]; + else + break; + argc--, argv++; + } + if (outmode[3] == ' ') + outmode[3] = 0; + if (argc == 0) { + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + if (uncompr) { + file = gzdopen(fileno(stdin), "rb"); + if (file == NULL) error("can't gzdopen stdin"); + gz_uncompress(file, stdout); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + gz_compress(stdin, file); + } + } else { + do { + if (uncompr) { + file_uncompress(*argv); + } else { + file_compress(*argv, outmode); + } + } while (argv++, --argc); + } + return 0; +} diff --git a/3rdparty/openctm/tools/zlib/trees.c b/3rdparty/openctm/tools/zlib/trees.c new file mode 100644 index 000000000..395e4e168 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/trees.c @@ -0,0 +1,1219 @@ +/* trees.c -- output deflated data using Huffman coding + * Copyright (C) 1995-2005 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process uses several Huffman trees. The more + * common source values are represented by shorter bit sequences. + * + * Each code tree is stored in a compressed form which is itself + * a Huffman encoding of the lengths of all the code strings (in + * ascending order by source values). The actual code strings are + * reconstructed from the lengths in the inflate process, as described + * in the deflate specification. + * + * REFERENCES + * + * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". + * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc + * + * Storer, James A. + * Data Compression: Methods and Theory, pp. 49-50. + * Computer Science Press, 1988. ISBN 0-7167-8156-5. + * + * Sedgewick, R. + * Algorithms, p290. + * Addison-Wesley, 1983. ISBN 0-201-06672-6. + */ + +/* @(#) $Id$ */ + +/* #define GEN_TREES_H */ + +#include "deflate.h" + +#ifdef DEBUG +# include +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {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}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {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}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +#define Buf_size (8 * 2*sizeof(char)) +/* Number of bits used within bi_buf. (bi_buf might be implemented on + * more than 16 bits on some systems.) + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +local static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Local (static) routines in this file. + */ + +local void tr_static_init OF((void)); +local void init_block OF((deflate_state *s)); +local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +local void build_tree OF((deflate_state *s, tree_desc *desc)); +local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local int build_bl_tree OF((deflate_state *s)); +local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + int blcodes)); +local void compress_block OF((deflate_state *s, ct_data *ltree, + ct_data *dtree)); +local void set_data_type OF((deflate_state *s)); +local unsigned bi_reverse OF((unsigned value, int length)); +local void bi_windup OF((deflate_state *s)); +local void bi_flush OF((deflate_state *s)); +local void copy_block OF((deflate_state *s, charf *buf, unsigned len, + int header)); + +#ifdef GEN_TREES_H +local void gen_trees_header OF((void)); +#endif + +#ifndef DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef DEBUG +local void send_bits OF((deflate_state *s, int value, int length)); + +local void send_bits(s, value, length) + deflate_state *s; + int value; /* value to send */ + int length; /* number of bits */ +{ + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (value << s->bi_valid); + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = value;\ + s->bi_buf |= (val << s->bi_valid);\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* DEBUG */ + + +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init() +{ +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Genererate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width)-1 ? ",\n" : ", ")) + +void gen_trees_header() +{ + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void _tr_init(s) + deflate_state *s; +{ + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; + s->last_eob_len = 8; /* enough lookahead for inflate */ +#ifdef DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(s) + deflate_state *s; +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(s, tree, k) + deflate_state *s; + ct_data *tree; /* the tree to restore */ + int k; /* node to move down */ +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(s, desc) + deflate_state *s; + tree_desc *desc; /* the tree descriptor */ +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (bits + xbits); + if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + } + if (overflow == 0) return; + + Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((long)bits - (long)tree[m].Len) + *(long)tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes (tree, max_code, bl_count) + ct_data *tree; /* the tree to decorate */ + int max_code; /* largest code with non zero frequency */ + ushf *bl_count; /* number of codes at each bit length */ +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits-1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(s) + deflate_state *s; +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*(max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(s, lcodes, dcodes, blcodes) + deflate_state *s; + int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void _tr_stored_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ +#ifdef DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; +#endif + copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + * The current inflate code requires 9 bits of lookahead. If the + * last two codes for the previous block (real code plus EOB) were coded + * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + * the last real code. In this case we send two empty static blocks instead + * of one. (There are no problems if the previous block is stored or fixed.) + * To simplify the code, we assume the worst case of last real code encoded + * on one bit only. + */ +void _tr_align(s) + deflate_state *s; +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); + /* Of the 10 bits for the empty block, we have already sent + * (10 - bi_valid) bits. The lookahead for the last real code (before + * the EOB of the previous block) was thus at least one plus the length + * of the EOB plus what we have just sent of the empty static block. + */ + if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; +#endif + bi_flush(s); + } + s->last_eob_len = 7; +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +void _tr_flush_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (stored_len > 0 && s->strm->data_type == Z_UNKNOWN) + set_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, eof); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+eof, 3); + compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+eof, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (eof) { + bi_windup(s); +#ifdef DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*eof)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int _tr_tally (s, dist, lc) + deflate_state *s; + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + s->d_buf[s->last_lit] = (ush)dist; + s->l_buf[s->last_lit++] = (uch)lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + +#ifdef TRUNCATE_BLOCK + /* Try to guess if it is profitable to stop the current block here */ + if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { + /* Compute an upper bound for the compressed length */ + ulg out_length = (ulg)s->last_lit*8L; + ulg in_length = (ulg)((long)s->strstart - s->block_start); + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (ulg)s->dyn_dtree[dcode].Freq * + (5L+extra_dbits[dcode]); + } + out_length >>= 3; + Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + s->last_lit, in_length, out_length, + 100L - out_length*100L/in_length)); + if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; + } +#endif + return (s->last_lit == s->lit_bufsize-1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(s, ltree, dtree) + deflate_state *s; + ct_data *ltree; /* literal tree */ + ct_data *dtree; /* distance tree */ +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); + s->last_eob_len = ltree[END_BLOCK].Len; +} + +/* =========================================================================== + * Set the data type to BINARY or TEXT, using a crude approximation: + * set it to Z_TEXT if all symbols are either printable characters (33 to 255) + * or white spaces (9 to 13, or 32); or set it to Z_BINARY otherwise. + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local void set_data_type(s) + deflate_state *s; +{ + int n; + + for (n = 0; n < 9; n++) + if (s->dyn_ltree[n].Freq != 0) + break; + if (n == 9) + for (n = 14; n < 32; n++) + if (s->dyn_ltree[n].Freq != 0) + break; + s->strm->data_type = (n == 32) ? Z_TEXT : Z_BINARY; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(s) + deflate_state *s; +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(s) + deflate_state *s; +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +local void copy_block(s, buf, len, header) + deflate_state *s; + charf *buf; /* the input data */ + unsigned len; /* its length */ + int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + s->last_eob_len = 8; /* enough lookahead for inflate */ + + if (header) { + put_short(s, (ush)len); + put_short(s, (ush)~len); +#ifdef DEBUG + s->bits_sent += 2*16; +#endif + } +#ifdef DEBUG + s->bits_sent += (ulg)len<<3; +#endif + while (len--) { + put_byte(s, *buf++); + } +} diff --git a/3rdparty/openctm/tools/zlib/trees.h b/3rdparty/openctm/tools/zlib/trees.h new file mode 100644 index 000000000..72facf900 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/3rdparty/openctm/tools/zlib/uncompr.c b/3rdparty/openctm/tools/zlib/uncompr.c new file mode 100644 index 000000000..b59e3d0de --- /dev/null +++ b/3rdparty/openctm/tools/zlib/uncompr.c @@ -0,0 +1,61 @@ +/* uncompr.c -- decompress a memory buffer + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted. +*/ +int ZEXPORT uncompress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; + + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + + err = inflateInit(&stream); + if (err != Z_OK) return err; + + err = inflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + inflateEnd(&stream); + if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) + return Z_DATA_ERROR; + return err; + } + *destLen = stream.total_out; + + err = inflateEnd(&stream); + return err; +} diff --git a/3rdparty/openctm/tools/zlib/zconf.h b/3rdparty/openctm/tools/zlib/zconf.h new file mode 100644 index 000000000..03a9431c8 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/zconf.h @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/3rdparty/openctm/tools/zlib/zlib.h b/3rdparty/openctm/tools/zlib/zlib.h new file mode 100644 index 000000000..022817927 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/3rdparty/openctm/tools/zlib/zutil.c b/3rdparty/openctm/tools/zlib/zutil.c new file mode 100644 index 000000000..d55f5948a --- /dev/null +++ b/3rdparty/openctm/tools/zlib/zutil.c @@ -0,0 +1,318 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +const char * const z_errmsg[10] = { +"need dictionary", /* Z_NEED_DICT 2 */ +"stream end", /* Z_STREAM_END 1 */ +"", /* Z_OK 0 */ +"file error", /* Z_ERRNO (-1) */ +"stream error", /* Z_STREAM_ERROR (-2) */ +"data error", /* Z_DATA_ERROR (-3) */ +"insufficient memory", /* Z_MEM_ERROR (-4) */ +"buffer error", /* Z_BUF_ERROR (-5) */ +"incompatible version",/* Z_VERSION_ERROR (-6) */ +""}; + + +const char * ZEXPORT zlibVersion() +{ + return ZLIB_VERSION; +} + +uLong ZEXPORT zlibCompileFlags() +{ + uLong flags; + + flags = 0; + switch (sizeof(uInt)) { + case 2: break; + case 4: flags += 1; break; + case 8: flags += 2; break; + default: flags += 3; + } + switch (sizeof(uLong)) { + case 2: break; + case 4: flags += 1 << 2; break; + case 8: flags += 2 << 2; break; + default: flags += 3 << 2; + } + switch (sizeof(voidpf)) { + case 2: break; + case 4: flags += 1 << 4; break; + case 8: flags += 2 << 4; break; + default: flags += 3 << 4; + } + switch (sizeof(z_off_t)) { + case 2: break; + case 4: flags += 1 << 6; break; + case 8: flags += 2 << 6; break; + default: flags += 3 << 6; + } +#ifdef DEBUG + flags += 1 << 8; +#endif +#if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; +#endif +#ifdef ZLIB_WINAPI + flags += 1 << 10; +#endif +#ifdef BUILDFIXED + flags += 1 << 12; +#endif +#ifdef DYNAMIC_CRC_TABLE + flags += 1 << 13; +#endif +#ifdef NO_GZCOMPRESS + flags += 1L << 16; +#endif +#ifdef NO_GZIP + flags += 1L << 17; +#endif +#ifdef PKZIP_BUG_WORKAROUND + flags += 1L << 20; +#endif +#ifdef FASTEST + flags += 1L << 21; +#endif +#ifdef STDC +# ifdef NO_vsnprintf + flags += 1L << 25; +# ifdef HAS_vsprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1L << 26; +# endif +# endif +#else + flags += 1L << 24; +# ifdef NO_snprintf + flags += 1L << 25; +# ifdef HAS_sprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1L << 26; +# endif +# endif +#endif + return flags; +} + +#ifdef DEBUG + +# ifndef verbose +# define verbose 0 +# endif +int z_verbose = verbose; + +void z_error (m) + char *m; +{ + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(err) + int err; +{ + return ERR_MSG(err); +} + +#if defined(_WIN32_WCE) + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. + */ + int errno = 0; +#endif + +#ifndef HAVE_MEMCPY + +void zmemcpy(dest, source, len) + Bytef* dest; + const Bytef* source; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int zmemcmp(s1, s2, len) + const Bytef* s1; + const Bytef* s2; + uInt len; +{ + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void zmemzero(dest, len) + Bytef* dest; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + + +#ifdef SYS16BIT + +#ifdef __TURBOC__ +/* Turbo C in 16-bit mode */ + +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + voidpf buf = opaque; /* just to make some compilers happy */ + ulg bsize = (ulg)items*size; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + int n; + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + ptr = opaque; /* just to make some compilers happy */ + Assert(0, "zcfree: ptr not found"); +} + +#endif /* __TURBOC__ */ + + +#ifdef M_I86 +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + return _halloc((long)items, size); +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + _hfree(ptr); +} + +#endif /* M_I86 */ + +#endif /* SYS16BIT */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern voidp calloc OF((uInt items, uInt size)); +extern void free OF((voidpf ptr)); +#endif + +voidpf zcalloc (opaque, items, size) + voidpf opaque; + unsigned items; + unsigned size; +{ + if (opaque) items += size - size; /* make compiler happy */ + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); +} + +void zcfree (opaque, ptr) + voidpf opaque; + voidpf ptr; +{ + free(ptr); + if (opaque) return; /* make compiler happy */ +} + +#endif /* MY_ZCALLOC */ diff --git a/3rdparty/openctm/tools/zlib/zutil.h b/3rdparty/openctm/tools/zlib/zutil.h new file mode 100644 index 000000000..b7d5eff81 --- /dev/null +++ b/3rdparty/openctm/tools/zlib/zutil.h @@ -0,0 +1,269 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#define ZLIB_INTERNAL +#include "zlib.h" + +#ifdef STDC +# ifndef _WIN32_WCE +# include +# endif +# include +# include +#endif +#ifdef NO_ERRNO_H +# ifdef _WIN32_WCE + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. We rename it to + * avoid conflict with other libraries that use the same workaround. + */ +# define errno z_errno +# endif + extern int errno; +#else +# ifndef _WIN32_WCE +# include +# endif +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +# ifdef M_I86 + #include +# endif +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#ifdef WIN32 +# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ +# define OS_CODE 0x0b +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0f +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS + /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 + /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# define vsnprintf _vsnprintf +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +#endif +#ifdef VMS +# define NO_vsnprintf +#endif + +#if defined(pyr) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + extern void zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int z_verbose; + extern void z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + + +voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); +void zcfree OF((voidpf opaque, voidpf ptr)); + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* ZUTIL_H */ diff --git a/3rdparty/openctm/win-installer.iss b/3rdparty/openctm/win-installer.iss new file mode 100644 index 000000000..d599c08c3 --- /dev/null +++ b/3rdparty/openctm/win-installer.iss @@ -0,0 +1,249 @@ +; ---------------------------------------------------------------------------- +; Inno Setup 5.x setup script for Windows +; This script will create an installer for the binary Windows distribution +; ---------------------------------------------------------------------------- + +[Setup] +AppName=OpenCTM +AppVerName=OpenCTM 1.0.3 +VersionInfoVersion=1.0.3.0 +AppPublisher=Marcus Geelnard +AppPublisherURL=http://openctm.sourceforge.net/ +AppSupportURL=http://openctm.sourceforge.net/ +AppUpdatesURL=http://openctm.sourceforge.net/ +DefaultDirName={pf}\OpenCTM 1.0.3 +DefaultGroupName=OpenCTM 1.0.3 +LicenseFile=LICENSE.txt +OutputDir=. +OutputBaseFilename=OpenCTM-1.0.3-setup +Compression=lzma +SolidCompression=yes +ChangesAssociations=yes +ChangesEnvironment=yes + + +[Tasks] +Name: associatectm; Description: "&Associate OpenCTM (.ctm) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associatestl; Description: "&Associate Stereolithography (.stl) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associateply; Description: "&Associate Stanford PLY (.ply) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associate3ds; Description: "&Associate 3DStudio (.3ds) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associatedae; Description: "&Associate COLLADA (.dae) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associateobj; Description: "&Associate Wavefront (.obj) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associatelwo; Description: "&Associate LightWave (.lwo) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: associateoff; Description: "&Associate Geomview OFF (.off) files with the OpenCTM viewer"; GroupDescription: "Associate files:" +Name: modifypath; Description: "&Add application directory to your system path"; GroupDescription: "Modify system paths:" + +[Files] +Source: "lib\openctm.dll"; DestDir: "{app}\bin" +Source: "tools\freeglut.dll"; DestDir: "{app}\bin" +Source: "tools\ctmconv.exe"; DestDir: "{app}\bin" +Source: "tools\ctmviewer.exe"; DestDir: "{app}\bin" +Source: "doc\APIReference\*"; DestDir: "{app}\Documentation\APIReference" +Source: "doc\DevelopersManual.pdf"; DestDir: "{app}\Documentation" +Source: "doc\FormatSpecification.pdf"; DestDir: "{app}\Documentation" +Source: "doc\ctmconv.html"; DestDir: "{app}\Documentation" +Source: "doc\ctmviewer.html"; DestDir: "{app}\Documentation" +Source: "README.txt"; DestDir: "{app}\Documentation"; Flags: isreadme +Source: "LICENSE.txt"; DestDir: "{app}\Documentation" +Source: "lib\openctm.h"; DestDir: "{app}\Developer files" +Source: "lib\openctmpp.h"; DestDir: "{app}\Developer files" +Source: "lib\openctm.lib"; DestDir: "{app}\Developer files" +Source: "bindings\delphi\OpenCTM.pas"; DestDir: "{app}\Developer files" +Source: "bindings\python\openctm.py"; DestDir: "{app}\Developer files" +Source: "bindings\python\ctminfo.py"; DestDir: "{app}\Developer files" +Source: "plugins\blender\*"; DestDir: "{app}\Plugins\Blender" +Source: "plugins\maya\*"; DestDir: "{app}\Plugins\Maya" + +[Icons] +Name: "{group}\3D Viewer"; Filename: "{app}\bin\ctmviewer.exe"; WorkingDir: "{app}\bin" +Name: "{group}\Browse the OpenCTM folder"; Filename: "{app}" +Name: "{group}\Documentation\Developers Manual"; Filename: "{app}\Documentation\DevelopersManual.pdf" +Name: "{group}\Documentation\API Reference"; Filename: "{app}\Documentation\APIReference\index.html" +Name: "{group}\Documentation\Format Specification"; Filename: "{app}\Documentation\FormatSpecification.pdf" +Name: "{group}\Documentation\3D Viewer Manual (ctmviewer)"; Filename: "{app}\Documentation\ctmviewer.html" +Name: "{group}\Documentation\File Converter Manual (ctmconv)"; Filename: "{app}\Documentation\ctmconv.html" +Name: "{group}\Documentation\License"; Filename: "{app}\Documentation\LICENSE.txt" +Name: "{group}\Documentation\README"; Filename: "{app}\Documentation\README.txt" +Name: "{group}\{cm:UninstallProgram,OpenCTM}"; Filename: "{uninstallexe}" + +[Registry] +Root: HKCR; Subkey: ".ctm"; ValueType: string; ValueName: ""; ValueData: "OpenCTM_file"; Flags: uninsdeletevalue; Tasks: associatectm +Root: HKCR; Subkey: "OpenCTM_file"; ValueType: string; ValueName: ""; ValueData: "OpenCTM 3D mesh file"; Flags: uninsdeletekey; Tasks: associatectm +Root: HKCR; Subkey: "OpenCTM_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associatectm +Root: HKCR; Subkey: "OpenCTM_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associatectm + +Root: HKCR; Subkey: ".ply"; ValueType: string; ValueName: ""; ValueData: "PLY_file"; Flags: uninsdeletevalue; Tasks: associateply +Root: HKCR; Subkey: "PLY_file"; ValueType: string; ValueName: ""; ValueData: "Stanford PLY file"; Flags: uninsdeletekey; Tasks: associateply +Root: HKCR; Subkey: "PLY_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associateply +Root: HKCR; Subkey: "PLY_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associateply + +Root: HKCR; Subkey: ".stl"; ValueType: string; ValueName: ""; ValueData: "STL_file"; Flags: uninsdeletevalue; Tasks: associatestl +Root: HKCR; Subkey: "STL_file"; ValueType: string; ValueName: ""; ValueData: "Stereolithography 3D mesh file"; Flags: uninsdeletekey; Tasks: associatestl +Root: HKCR; Subkey: "STL_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associatestl +Root: HKCR; Subkey: "STL_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associatestl + +Root: HKCR; Subkey: ".3ds"; ValueType: string; ValueName: ""; ValueData: "3DS_file"; Flags: uninsdeletevalue; Tasks: associate3ds +Root: HKCR; Subkey: "3DS_file"; ValueType: string; ValueName: ""; ValueData: "3DStudio file"; Flags: uninsdeletekey; Tasks: associate3ds +Root: HKCR; Subkey: "3DS_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associate3ds +Root: HKCR; Subkey: "3DS_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associate3ds + +Root: HKCR; Subkey: ".dae"; ValueType: string; ValueName: ""; ValueData: "DAE_file"; Flags: uninsdeletevalue; Tasks: associatedae +Root: HKCR; Subkey: "DAE_file"; ValueType: string; ValueName: ""; ValueData: "COLLADA file"; Flags: uninsdeletekey; Tasks: associatedae +Root: HKCR; Subkey: "DAE_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associatedae +Root: HKCR; Subkey: "DAE_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associatedae + +Root: HKCR; Subkey: ".obj"; ValueType: string; ValueName: ""; ValueData: "OBJ_file"; Flags: uninsdeletevalue; Tasks: associateobj +Root: HKCR; Subkey: "OBJ_file"; ValueType: string; ValueName: ""; ValueData: "Wavefront OBJ file"; Flags: uninsdeletekey; Tasks: associateobj +Root: HKCR; Subkey: "OBJ_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associateobj +Root: HKCR; Subkey: "OBJ_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associateobj + +Root: HKCR; Subkey: ".lwo"; ValueType: string; ValueName: ""; ValueData: "LWO_file"; Flags: uninsdeletevalue; Tasks: associatelwo +Root: HKCR; Subkey: "LWO_file"; ValueType: string; ValueName: ""; ValueData: "LightWave object file"; Flags: uninsdeletekey; Tasks: associatelwo +Root: HKCR; Subkey: "LWO_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associatelwo +Root: HKCR; Subkey: "LWO_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associatelwo + +Root: HKCR; Subkey: ".off"; ValueType: string; ValueName: ""; ValueData: "OFF_file"; Flags: uninsdeletevalue; Tasks: associateoff +Root: HKCR; Subkey: "OFF_file"; ValueType: string; ValueName: ""; ValueData: "Geomview object file"; Flags: uninsdeletekey; Tasks: associateoff +Root: HKCR; Subkey: "OFF_file\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ctmviewer.exe,0"; Tasks: associateoff +Root: HKCR; Subkey: "OFF_file\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ctmviewer.exe"" ""%1"""; Tasks: associateoff + +[Code] + +// ---------------------------------------------------------------------------- +// ModPath script, by Jared Breland +// Homepage: http://www.legroom.net/software +// ---------------------------------------------------------------------------- + +function ModPathDir(): TArrayOfString; +var + Dir: TArrayOfString; +begin + setArrayLength(Dir, 1) + Dir[0] := ExpandConstant('{app}\bin'); + Result := Dir; +end; + +procedure ModPath(); +var + oldpath: String; + newpath: String; + pathArr: TArrayOfString; + aExecFile: String; + aExecArr: TArrayOfString; + i, d: Integer; + pathdir: TArrayOfString; +begin + + // Get array of new directories and act on each individually + pathdir := ModPathDir(); + for d := 0 to GetArrayLength(pathdir)-1 do begin + + // Modify WinNT path + if UsingWinNT() = true then begin + + // Get current path, split into an array + RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', oldpath); + oldpath := oldpath + ';'; + i := 0; + while (Pos(';', oldpath) > 0) do begin + SetArrayLength(pathArr, i+1); + pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1); + oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath)); + i := i + 1; + + // Check if current directory matches app dir + if pathdir[d] = pathArr[i-1] then begin + // if uninstalling, remove dir from path + if IsUninstaller() = true then begin + continue; + // if installing, abort because dir was already in path + end else begin + abort; + end; + end; + + // Add current directory to new path + if i = 1 then begin + newpath := pathArr[i-1]; + end else begin + newpath := newpath + ';' + pathArr[i-1]; + end; + end; + + // Append app dir to path if not already included + if IsUninstaller() = false then + newpath := newpath + ';' + pathdir[d]; + + // Write new path + RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', newpath); + + // Modify Win9x path + end else begin + + // Convert to shortened dirname + pathdir[d] := GetShortName(pathdir[d]); + + // If autoexec.bat exists, check if app dir already exists in path + aExecFile := 'C:\AUTOEXEC.BAT'; + if FileExists(aExecFile) then begin + LoadStringsFromFile(aExecFile, aExecArr); + for i := 0 to GetArrayLength(aExecArr)-1 do begin + if IsUninstaller() = false then begin + // If app dir already exists while installing, abort add + if (Pos(pathdir[d], aExecArr[i]) > 0) then + abort; + end else begin + // If app dir exists and = what we originally set, then delete at uninstall + if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then + aExecArr[i] := ''; + end; + end; + end; + + // If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path + if IsUninstaller() = false then begin + SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True); + + // If uninstalling, write the full autoexec out + end else begin + SaveStringsToFile(aExecFile, aExecArr, False); + end; + end; + + // Write file to flag modifypath was selected + // Workaround since IsTaskSelected() cannot be called at uninstall and AppName and AppId cannot be "read" in Code section + if IsUninstaller() = false then + SaveStringToFile(ExpandConstant('{app}') + '\uninsTasks.txt', WizardSelectedTasks(False), False); + end; +end; + +procedure CurStepChanged(CurStep: TSetupStep); +begin + if CurStep = ssPostInstall then + if IsTaskSelected('modifypath') then + ModPath(); +end; + +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +var + appdir: String; + selectedTasks: String; +begin + appdir := ExpandConstant('{app}') + if CurUninstallStep = usUninstall then begin + if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then + if Pos('modifypath', selectedTasks) > 0 then + ModPath(); + DeleteFile(appdir + '\uninsTasks.txt') + end; +end; + +function NeedRestart(): Boolean; +begin + if IsTaskSelected('modifypath') and not UsingWinNT() then begin + Result := True; + end else begin + Result := False; + end; +end; + diff --git a/examples/00-helloworld/helloworld.cpp b/examples/00-helloworld/helloworld.cpp index 5f68f9248..c78feec6b 100644 --- a/examples/00-helloworld/helloworld.cpp +++ b/examples/00-helloworld/helloworld.cpp @@ -34,7 +34,7 @@ int _main_(int _argc, char** _argv) while (true) { // This dummy draw call is here to make sure that view 0 is cleared - // if not other draw calls are submitted to view 0. + // if no other draw calls are submitted to view 0. bgfx::submit(0); // Use debug font to print information about this example. diff --git a/examples/01-cubes/cubes.cpp b/examples/01-cubes/cubes.cpp index bd41f75a1..e1c27db50 100644 --- a/examples/01-cubes/cubes.cpp +++ b/examples/01-cubes/cubes.cpp @@ -25,6 +25,8 @@ struct PosColorVertex uint32_t m_abgr; }; +static bgfx::VertexDecl s_PosColorDecl; + static PosColorVertex s_cubeVertices[8] = { {-1.0f, 1.0f, 1.0f, 0xff000000 }, @@ -137,7 +139,6 @@ int _main_(int _argc, char** _argv) } // Create vertex stream declaration. - bgfx::VertexDecl s_PosColorDecl; s_PosColorDecl.begin(); s_PosColorDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); s_PosColorDecl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true); @@ -174,13 +175,21 @@ int _main_(int _argc, char** _argv) while (true) { // This dummy draw call is here to make sure that view 0 is cleared - // if not other draw calls are submitted to view 0. + // if no other draw calls are submitted to view 0. bgfx::submit(0); + int64_t now = bx::getHPCounter(); + static int64_t last = now; + const int64_t frameTime = now - last; + last = now; + const double freq = double(bx::getHPFrequency() ); + const double toMs = 1000.0/freq; + // Use debug font to print information about this example. bgfx::dbgTextClear(); bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/01-cube"); bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Rendering simple static mesh."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); float at[3] = { 0.0f, 0.0f, 0.0f }; float eye[3] = { 0.0f, 0.0f, -35.0f }; diff --git a/examples/01-cubes/fs_cubes.sc b/examples/01-cubes/fs_cubes.sc index 13bc3b09c..c74f14952 100644 --- a/examples/01-cubes/fs_cubes.sc +++ b/examples/01-cubes/fs_cubes.sc @@ -5,6 +5,8 @@ $input v_color0 * License: http://www.opensource.org/licenses/BSD-2-Clause */ +#include "../common/common.sh" + void main() { gl_FragColor = v_color0; diff --git a/examples/01-cubes/makefile b/examples/01-cubes/makefile index ab137879c..900aad91e 100644 --- a/examples/01-cubes/makefile +++ b/examples/01-cubes/makefile @@ -3,96 +3,7 @@ # License: http://www.opensource.org/licenses/BSD-2-Clause # -ifndef TARGET -.PHONY: all -all:;@echo Usage: make TARGET=# [clean] - @echo TARGET=0 (dx9) - @echo TARGET=2 (dx11) - @echo TARGET=3 (nacl) - @echo TARGET=4 (android) - @echo TARGET=5 (linux) -else -SHADERC="../../../../tools/bin/shaderc" +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime -EXT=sc - -ifeq ($(TARGET), 0) -VS_FLAGS=--platform windows -p vs_2_0 -O 3 -FS_FLAGS=--platform windows -p ps_2_a -O 3 -SHADER_PATH=shaders/dx9 -else -ifeq ($(TARGET), 1) -VS_FLAGS=--platform windows -p vs_4_0 -O 3 -FS_FLAGS=--platform windows -p ps_4_0 -O 3 -SHADER_PATH=shaders/dx11 -else -ifeq ($(TARGET), 2) -VS_FLAGS=--platform nacl -FS_FLAGS=--platform nacl -SHADER_PATH=shaders/gles -else -ifeq ($(TARGET), 3) -VS_FLAGS=--platform android -FS_FLAGS=--platform android -SHADER_PATH=shaders/gles -else -ifeq ($(TARGET), 4) -VS_FLAGS=--platform linux -p 140 -FS_FLAGS=--platform linux -p 140 -SHADER_PATH=shaders/glsl -endif -endif -endif -endif -endif - -BUILD_OUTPUT_DIR=$(addprefix ./, $(SHADER_PATH)) -BUILD_INTERMEDIATE_DIR=$(addprefix ../../.build/, $(SHADER_PATH)) - -VS_SOURCES=$(wildcard vs_*.$(EXT)) -VS_DEPS=$(addprefix $(BUILD_INTERMEDIATE_DIR)/,$(addsuffix .bin.d, $(basename $(VS_SOURCES)))) - -FS_SOURCES=$(wildcard fs_*.$(EXT)) -FS_DEPS=$(addprefix $(BUILD_INTERMEDIATE_DIR)/,$(addsuffix .bin.d, $(basename $(FS_SOURCES)))) - -CMD_MKDIR=cmd /C "if not exist "$(subst /,\,$(1))" mkdir "$(subst /,\,$(1))"" -CMD_RMDIR=cmd /C "if exist "$(subst /,\,$(1))" rmdir /S /Q "$(subst /,\,$(1))"" - -VS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(VS_SOURCES)))) -FS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(FS_SOURCES)))) - -BIN = $(VS_BIN) $(FS_BIN) -ASM = $(VS_ASM) $(FS_ASM) - -$(BUILD_INTERMEDIATE_DIR)/vs_%.bin : vs_%.$(EXT) - @echo [$(<)] - @$(SHADERC) $(VS_FLAGS) --type vertex --depends -o $(@) -f $(<) - @cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) - -$(BUILD_INTERMEDIATE_DIR)/fs_%.bin : fs_%.$(EXT) - @echo [$(<)] - @$(SHADERC) $(FS_FLAGS) --type fragment --depends -o $(@) -f $(<) - @cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) - -.PHONY: all -all: dirs $(BIN) - @echo Target $(SHADER_PATH) - -.PHONY: clean -clean: - @echo Cleaning... - @-rm -vf $(BIN) - @-$(call CMD_RMDIR,$(BUILD_INTERMEDIATE_DIR)) - -.PHONY: dirs -dirs: - @-$(call CMD_MKDIR,$(BUILD_INTERMEDIATE_DIR)) - @-$(call CMD_MKDIR,$(BUILD_OUTPUT_DIR)) - -.PHONY: rebuild -rebuild: clean all - -endif # TARGET - --include $(VS_DEPS) --include $(FS_DEPS) +include $(BGFX_DIR)/premake/shader.mk diff --git a/examples/01-cubes/shaders/dx9/fs_cubes.bin b/examples/01-cubes/shaders/dx9/fs_cubes.bin deleted file mode 100644 index adcf00102f19f4937c1eca9f83825ad8580c851a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmZQzs9|7a`v3pme=!E<5Jx8&1_lOYAO?v6DF|p}U;v316vrFICo=eECKu%w=ckn@ zXas30c=!bSC2(dX}a}dd7x^h79ry3`{`n4GawY6Bt2k M4t^l}$po+s0OB+rS^xk5 diff --git a/examples/01-cubes/shaders/dx9/vs_cubes.bin b/examples/01-cubes/shaders/dx9/vs_cubes.bin deleted file mode 100644 index d82abbcec8e62596d52c2423fe65957558eae77f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmZQ%;4h8O%}+_q3Cm0^4=Bpd;$&oCU}0ckWMKOD|KERQ2Imk*Cm99?hHxMTi2%{(H_lxhlU#CysspqpxxAOb3 z;++u1@Gbza06{DOjR=uxRBIj9Lb1hs)phBOi222MFq=M3@8;^Bxvw@_R!g-;*SEu& zs!#79#uJcIHebq?iuvquE|(+6ahg`WJwa_0NC47<=V6T_4fFxlI9O*Mj}r}92!eHt zN@)~W-K&nUns!sP$*%TvAxwjG(Gn&(0-lG+;~wm(0y4s$=wWMSy=r4nt6`Wa6qJ#u z12+mqXNuzWV7>rnZ_E>2s0tX-2;;B^zTz2vB5E1GM!pUFa(T8M&E;&&S7cUnmvbY T65u^K`2XQrmLc_}@L%K)C8I>J diff --git a/examples/02-metaballs/shaders/dx9/fs_metaballs.bin b/examples/02-metaballs/shaders/dx9/fs_metaballs.bin deleted file mode 100644 index 32005c6a0e5b6eb943efc0bc1ece71f0bfb4851b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmXv}I}U6ido rL4&9!vFv-*L&_OxDW@w@@n4;h7C2OWfXpP^l!}vmwAbi3(f#rZ>>Dy< diff --git a/examples/02-metaballs/shaders/dx9/vs_metaballs.bin b/examples/02-metaballs/shaders/dx9/vs_metaballs.bin deleted file mode 100644 index 22f00d28371c1b8dade511a62c536df60b0c0faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmZ8cJ5Iwu6r5cftkC!ZNVo(F3mZ|mgiufzDI$al$%m8(KMy*bBs zC(cbc51sk*GEQ=5s@AV*Mi97u;071Id+vE2j(W=yuq%zZPbmg`KrD&(px3n7v#11` zn)~tUx~TzF%;m_*j{EL7{zcFI=y!vBuVYbvLCsOe;%rm%Uw=9R)^@++dL6z|%HB}B IYFj$~0^J5s`Tzg` diff --git a/examples/02-metaballs/shaders/gles/fs_metaballs.bin b/examples/02-metaballs/shaders/gles/fs_metaballs.bin deleted file mode 100644 index 75281d442686c1e8138cc3404e0d0a72c2af5b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmYk0%MOAt5Jg@0D{kVZRa6Y_h%2LR-1z~dfdZ32ODe%v{C5WtM!7YsHusl}v+c&cO_)bQ0SnN0;-k`?V epsilon) + { + tt += dist; + } + } + + return tt < _maxd ? tt : 0.0; +} + +vec2 blinn(vec3 _lightDir, vec3 _normal, vec3 _viewDir) +{ + float ndotl = dot(_normal, _lightDir); + vec3 reflected = _lightDir - 2.0*ndotl*_normal; // reflect(_lightDir, _normal); + float rdotv = dot(reflected, _viewDir); + return vec2(ndotl, rdotv); +} + +float fresnel(float _ndotl, float _bias, float _pow) +{ + float facing = (1.0 - _ndotl); + return max(_bias + (1.0 - _bias) * pow(facing, _pow), 0.0); +} + +vec4 lit(float _ndotl, float _rdotv, float _m) +{ + float diff = max(0.0, _ndotl); + float spec = step(0.0, _ndotl) * max(0.0, _rdotv * _m); + return vec4(1.0, diff, spec, 1.0); +} + +void main() +{ + vec4 tmp; + tmp = mul(u_mtx, vec4(v_texcoord0.x, v_texcoord0.y, 0.0, 1.0) ); + vec3 eye = tmp.xyz/tmp.w; + + tmp = mul(u_mtx, vec4(v_texcoord0.x, v_texcoord0.y, 1.0, 1.0) ); + vec3 at = tmp.xyz/tmp.w; + + float maxd = length(at - eye); + vec3 dir = normalize(at - eye); + + float dist = trace(eye, dir, maxd); + + if (dist > 0.5) + { + vec3 pos = eye + dir*dist; + vec3 normal = calcNormal(pos); + + vec2 bln = blinn(u_lightDir, normal, dir); + vec4 lc = lit(bln.x, bln.y, 1.0); + float fres = fresnel(bln.x, 0.2, 5.0); + + float val = 0.9*lc.y + pow(lc.z, 128.0)*fres; + val *= calcAmbOcc(pos, normal); + val = pow(val, 1.0/2.2); + + gl_FragColor = vec4(val, val, val, 1.0); + gl_FragDepth = dist/maxd; + } + else + { + gl_FragColor = v_color0; + gl_FragDepth = 1.0; + } +} diff --git a/examples/03-raymarch/iq_sdf.sh b/examples/03-raymarch/iq_sdf.sh new file mode 100644 index 000000000..84a5a2ab5 --- /dev/null +++ b/examples/03-raymarch/iq_sdf.sh @@ -0,0 +1,82 @@ +// +// References: +// Modeling with distance functions +// http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm +// + +// primitives + +float sdSphere(vec3 _pos, float _radius) +{ + return length(_pos) - _radius; +} + +float udBox(vec3 _pos, vec3 _extents) +{ + return length(max(abs(_pos) - _extents, 0.0) ); +} + +float udRoundBox(vec3 _pos, vec3 _extents, float r) +{ + return length(max(abs(_pos) - _extents, 0.0) ) - r; +} + +float sdBox(vec3 _pos, vec3 _extents) +{ + vec3 d = abs(_pos) - _extents; + return min(max(d.x, max(d.y, d.z) ), 0.0) + + length(max(d, 0.0) ); +} + +float sdTorus(vec3 _pos, vec2 t) +{ + vec2 q = vec2(length(_pos.xz) - t.x, _pos.y); + return length(q) - t.y; +} + +float sdCylinder(vec3 _pos, vec3 c) +{ + return length(_pos.xz - c.xy) - c.z; +} + +float sdCone(vec3 _pos, vec2 c) +{ + // c must be normalized + float q = length(_pos.xy); + return dot(c, vec2(q, _pos.z) ); +} + +float sdPlane(vec3 _pos, vec4 n) +{ + // n must be normalized + return dot(_pos, n.xyz) + n.w; +} + +float sdHexPrism(vec3 _pos, vec2 h) +{ + vec3 q = abs(_pos); + return max(q.z - h.y, max(q.x + q.y * 0.57735, q.y * 1.1547) - h.x); +} + +float sdTriPrism(vec3 _pos, vec2 h) +{ + vec3 q = abs(_pos); + return max(q.z - h.y, max(q.x * 0.866025 + _pos.y * 0.5, -_pos.y) - h.x * 0.5); +} + +// domain operations + +float opUnion(float d1, float d2) +{ + return min(d1, d2); +} + +float opSubtract(float d1, float d2) +{ + return max(-d1, d2); +} + +float opIntersect(float d1, float d2) +{ + return max(d1, d2); +} diff --git a/examples/03-raymarch/makefile b/examples/03-raymarch/makefile new file mode 100644 index 000000000..900aad91e --- /dev/null +++ b/examples/03-raymarch/makefile @@ -0,0 +1,9 @@ +# +# Copyright 2011-2012 Branimir Karadzic. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime + +include $(BGFX_DIR)/premake/shader.mk diff --git a/examples/03-raymarch/raymarch.cpp b/examples/03-raymarch/raymarch.cpp new file mode 100644 index 000000000..03ae90d7b --- /dev/null +++ b/examples/03-raymarch/raymarch.cpp @@ -0,0 +1,323 @@ +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include +#include +#include +#include "../common/dbg.h" +#include "../common/math.h" + +#include +#include + +void fatalCb(bgfx::Fatal::Enum _code, const char* _str) +{ + DBG("%x: %s", _code, _str); +} + +struct PosColorTexCoord0Vertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_abgr; + float m_u; + float m_v; +}; + +static bgfx::VertexDecl s_PosColorTexCoord0Decl; + +static const char* s_shaderPath = NULL; +static bool s_flipV = false; + +static void shaderFilePath(char* _out, const char* _name) +{ + strcpy(_out, s_shaderPath); + strcat(_out, _name); + strcat(_out, ".bin"); +} + +long int fsize(FILE* _file) +{ + long int pos = ftell(_file); + fseek(_file, 0L, SEEK_END); + long int size = ftell(_file); + fseek(_file, pos, SEEK_SET); + return size; +} + +static const bgfx::Memory* load(const char* _filePath) +{ + FILE* file = fopen(_filePath, "rb"); + if (NULL != file) + { + uint32_t size = (uint32_t)fsize(file); + const bgfx::Memory* mem = bgfx::alloc(size+1); + fread(mem->data, 1, size, file); + fclose(file); + mem->data[mem->size-1] = '\0'; + return mem; + } + + return NULL; +} + +static const bgfx::Memory* loadShader(const char* _name, const char* _default = NULL) +{ + char filePath[512]; + shaderFilePath(filePath, _name); + BX_UNUSED(_default); + return load(filePath); +} + +static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName) +{ + const bgfx::Memory* mem; + + // Load vertex shader. + mem = loadShader(_vsName); + bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem); + + // Load fragment shader. + mem = loadShader(_fsName); + bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem); + + // Create program from shaders. + bgfx::ProgramHandle program = bgfx::createProgram(vsh, fsh); + + // We can destroy vertex and fragment shader here since + // their reference is kept inside bgfx after calling createProgram. + // Vertex and fragment shader will be destroyed once program is + // destroyed. + bgfx::destroyVertexShader(vsh); + bgfx::destroyFragmentShader(fsh); + + return program; +} + +bool allocTransientBuffers(const bgfx::TransientVertexBuffer*& _vb, const bgfx::VertexDecl& _decl, uint16_t _numVertices, const bgfx::TransientIndexBuffer*& _ib, uint16_t _numIndices) +{ + if (bgfx::checkAvailTransientVertexBuffer(_numVertices, _decl) + && bgfx::checkAvailTransientIndexBuffer(_numIndices) ) + { + _vb = bgfx::allocTransientVertexBuffer(_numVertices, _decl); + _ib = bgfx::allocTransientIndexBuffer(_numIndices); + return true; + } + + return false; +} + +void renderScreenSpaceQuad(uint32_t _view, bgfx::ProgramHandle _program, float _x, float _y, float _width, float _height) +{ + const bgfx::TransientVertexBuffer* vb; + const bgfx::TransientIndexBuffer* ib; + + if (allocTransientBuffers(vb, s_PosColorTexCoord0Decl, 4, ib, 6) ) + { + PosColorTexCoord0Vertex* vertex = (PosColorTexCoord0Vertex*)vb->data; + + float zz = 0.0f; + + const float minx = _x; + const float maxx = _x + _width; + const float miny = _y; + const float maxy = _y + _height; + + float minu = -1.0f; + float minv = -1.0f; + float maxu = 1.0f; + float maxv = 1.0f; + + vertex[0].m_x = minx; + vertex[0].m_y = miny; + vertex[0].m_z = zz; + vertex[0].m_abgr = 0xff0000ff; + vertex[0].m_u = minu; + vertex[0].m_v = minv; + + vertex[1].m_x = maxx; + vertex[1].m_y = miny; + vertex[1].m_z = zz; + vertex[1].m_abgr = 0xff00ff00; + vertex[1].m_u = maxu; + vertex[1].m_v = minv; + + vertex[2].m_x = maxx; + vertex[2].m_y = maxy; + vertex[2].m_z = zz; + vertex[2].m_abgr = 0xffff0000; + vertex[2].m_u = maxu; + vertex[2].m_v = maxv; + + vertex[3].m_x = minx; + vertex[3].m_y = maxy; + vertex[3].m_z = zz; + vertex[3].m_abgr = 0xffffffff; + vertex[3].m_u = minu; + vertex[3].m_v = maxv; + + uint16_t* indices = (uint16_t*)ib->data; + + indices[0] = 0; + indices[1] = 1; + indices[2] = 2; + indices[3] = 0; + indices[4] = 2; + indices[5] = 3; + + bgfx::setProgram(_program); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE|BGFX_STATE_DEPTH_TEST_LESS|BGFX_STATE_DEPTH_WRITE); + bgfx::setIndexBuffer(ib); + bgfx::setVertexBuffer(vb); + bgfx::submit(_view); + } +} + +int _main_(int _argc, char** _argv) +{ + bgfx::init(BX_PLATFORM_WINDOWS, fatalCb); + bgfx::reset(1280, 720); + + // Enable debug text. + bgfx::setDebug(BGFX_DEBUG_TEXT); + + // Set view 0 default viewport. + bgfx::setViewRect(0, 0, 0, 1280, 720); + + // Set view 1 default viewport. + bgfx::setViewRect(1, 0, 0, 1280, 720); + + // Set view 0 clear state. + bgfx::setViewClear(0 + , BGFX_CLEAR_COLOR_BIT|BGFX_CLEAR_DEPTH_BIT + , 0x303030ff + , 1.0f + , 0 + ); + + // Setup root path for binary shaders. Shader binaries are different + // for each renderer. + switch (bgfx::getRendererType() ) + { + case bgfx::RendererType::Null: + case bgfx::RendererType::Direct3D9: + s_shaderPath = "shaders/dx9/"; + break; + + case bgfx::RendererType::Direct3D11: + s_shaderPath = "shaders/dx11/"; + break; + + case bgfx::RendererType::OpenGL: + s_shaderPath = "shaders/glsl/"; + s_flipV = true; + break; + + case bgfx::RendererType::OpenGLES2: + s_shaderPath = "shaders/gles/"; + s_flipV = true; + break; + } + + // Create vertex stream declaration. + s_PosColorTexCoord0Decl.begin(); + s_PosColorTexCoord0Decl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + s_PosColorTexCoord0Decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true); + s_PosColorTexCoord0Decl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float); + s_PosColorTexCoord0Decl.end(); + + bgfx::UniformHandle u_time = bgfx::createUniform("u_time", bgfx::ConstantType::Uniform1f); + bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::ConstantType::Uniform4x4fv); + bgfx::UniformHandle u_lightDir = bgfx::createUniform("u_lightDir", bgfx::ConstantType::Uniform3fv); + + bgfx::ProgramHandle raymarching = loadProgram("vs_raymarching", "fs_raymarching"); + + while (true) + { + // This dummy draw call is here to make sure that view 0 is cleared + // if no other draw calls are submitted to viewZ 0. + bgfx::submit(0); + + int64_t now = bx::getHPCounter(); + static int64_t last = now; + const int64_t frameTime = now - last; + last = now; + const double freq = double(bx::getHPFrequency() ); + const double toMs = 1000.0/freq; + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/03-raymarch"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Updating uniforms."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + float at[3] = { 0.0f, 0.0f, 0.0f }; + float eye[3] = { 0.0f, 0.0f, -15.0f }; + + float view[16]; + float proj[16]; + mtxLookAt(view, eye, at); + mtxProj(proj, 60.0f, 16.0f/9.0f, 0.1f, 100.0f); + + // Set view and projection matrix for view 1. + bgfx::setViewTransform(0, view, proj); + + float ortho[16]; + mtxOrtho(ortho, 0.0f, 1280.0f, 720.0f, 0.0f, 0.0f, 100.0f); + + // Set view and projection matrix for view 0. + bgfx::setViewTransform(1, NULL, ortho); + + float time = (float)(bx::getHPCounter()/double(bx::getHPFrequency() ) ); + + float vp[16]; + mtxMul(vp, view, proj); + + float mtx[16]; + mtxRotateXY(mtx + , time + , time*0.37f + ); + + { + float mtxInv[16]; + mtxInverse(mtxInv, mtx); + float lightDirModel[4] = { -0.4f, -0.5f, -1.0f, 0.0f }; + float lightDirModelN[4]; + vec3Norm(lightDirModelN, lightDirModel); + float lightDir[4]; + vec4MulMtx(lightDir, lightDirModelN, mtxInv); + bgfx::setUniform(u_lightDir, lightDir); + } + + float mvp[16]; + mtxMul(mvp, mtx, vp); + + float invMvp[16]; + mtxInverse(invMvp, mvp); + bgfx::setUniform(u_mtx, invMvp); + + bgfx::setUniform(u_time, &time); + + renderScreenSpaceQuad(1, raymarching, 0.0f, 0.0f, 1280.0f, 720.0f); + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + } + + // Cleanup. + bgfx::destroyProgram(raymarching); + + bgfx::destroyUniform(u_time); + bgfx::destroyUniform(u_mtx); + bgfx::destroyUniform(u_lightDir); + + // Shutdown bgfx. + bgfx::shutdown(); + + return 0; +} diff --git a/examples/03-raymarch/varying.def.sc b/examples/03-raymarch/varying.def.sc new file mode 100644 index 000000000..803835f85 --- /dev/null +++ b/examples/03-raymarch/varying.def.sc @@ -0,0 +1,6 @@ +vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); +vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); + +vec3 a_position : POSITION; +vec4 a_color : COLOR0; +vec2 a_texcoord0 : TEXCOORD0; diff --git a/examples/03-raymarch/vs_raymarching.sc b/examples/03-raymarch/vs_raymarching.sc new file mode 100644 index 000000000..a832c83e1 --- /dev/null +++ b/examples/03-raymarch/vs_raymarching.sc @@ -0,0 +1,16 @@ +$input a_position, a_color, a_texcoord0 +$output v_color0, v_texcoord0 + +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_color0 = a_color; + v_texcoord0 = a_texcoord0; +} diff --git a/examples/04-mesh/bun_zipper.ply b/examples/04-mesh/bun_zipper.ply new file mode 100644 index 000000000..928b54107 --- /dev/null +++ b/examples/04-mesh/bun_zipper.ply @@ -0,0 +1,105410 @@ +ply +format ascii 1.0 +comment zipper output +element vertex 35947 +property float x +property float y +property float z +property float confidence +property float intensity +element face 69451 +property list uchar int vertex_indices +end_header +-0.0378297 0.12794 0.00447467 0.850855 0.5 +-0.0447794 0.128887 0.00190497 0.900159 0.5 +-0.0680095 0.151244 0.0371953 0.398443 0.5 +-0.00228741 0.13015 0.0232201 0.85268 0.5 +-0.0226054 0.126675 0.00715587 0.675938 0.5 +-0.0251078 0.125921 0.00624226 0.711533 0.5 +-0.0371209 0.127449 0.0017956 0.888639 0.5 +0.033213 0.112692 0.0276861 0.652757 0.5 +0.0380425 0.109755 0.0161689 0.708171 0.5 +-0.0255083 0.112568 0.0366767 0.454541 0.437538 +-0.0245306 0.112636 0.0373469 0.448754 0.455187 +0.0274031 0.12156 0.0212208 0.533079 0.5 +-0.0628961 0.158419 -0.0175871 0.404517 0.5 +0.0400813 0.104202 0.0221684 0.535542 0.5 +0.0451532 0.0931968 0.0111604 0.579563 0.425995 +-0.0324965 0.174231 -0.00238999 0.365607 0.5 +-0.0804587 0.135827 0.0500319 0.499575 0.5 +-0.0724944 0.126022 0.052902 0.564827 0.5 +-0.0804375 0.137229 0.0490949 0.406774 0.422055 +0.00799809 0.131294 0.0169006 0.748371 0.5 +0.0400265 0.10701 0.00816505 0.680399 0.5 +0.0371657 0.0997172 -0.00981258 0.600054 0.5 +-0.0905968 0.140629 0.0221693 0.824561 0.5 +-0.0843417 0.109004 0.0243603 0.690889 0.5 +-0.0688709 0.156258 0.0147705 0.807492 0.5 +-0.0844782 0.152284 0.0269844 0.248168 0.41865 +0.00536718 0.125777 0.0317922 0.555044 0.354559 +0.00893209 0.124393 0.0330753 0.653433 0.5 +-0.0315414 0.125778 0.00387502 0.898771 0.5 +-0.049674 0.141672 0.0123895 0.691477 0.5 +-0.0784825 0.135851 0.0506454 0.566256 0.5 +-0.00425882 0.128035 0.0283342 0.271491 0.462815 +-0.0454789 0.123431 0.0251209 0.539149 0.5 +-0.0235385 0.11268 0.0379979 0.464537 0.5 +-0.0790203 0.0935614 -0.0105962 0.710999 0.5 +0.0235742 0.124212 0.0226421 0.530957 0.5 +-0.0902127 0.122664 0.0052855 0.635593 0.5 +0.0403742 0.101353 -0.00282827 0.574857 0.5 +0.041224 0.101389 -0.000814438 0.49265 0.490797 +-0.0859766 0.117044 0.000228439 0.487167 0.430737 +-0.0499053 0.141681 0.0133989 0.685665 0.5 +-0.0325018 0.177105 -0.00443384 0.269231 0.447035 +-0.0774954 0.147028 0.0416906 0.414139 0.5 +0.0240312 0.1242 0.0213823 0.524222 0.5 +-0.0225205 0.112681 0.0384786 0.482541 0.5 +-0.0202018 0.177138 -0.0227808 0.341071 0.440034 +-0.0381912 0.168168 -0.0127822 0.396317 0.473039 +-0.0214993 0.112665 0.0388138 0.514245 0.5 +-0.0322365 0.126297 0.00653811 0.896274 0.5 +-0.0303734 0.125779 0.00722581 0.874471 0.5 +0.0104221 0.127848 0.0278469 0.350014 0.41288 +-0.0463671 0.133058 0.0160254 0.599596 0.5 +-0.0263079 0.125672 0.00579971 0.73687 0.5 +-0.0238556 0.126292 0.00669874 0.675023 0.5 +0.0174667 0.122816 0.0304302 0.625269 0.5 +0.0184111 0.122524 0.0307587 0.611204 0.34486 +0.0166382 0.123302 0.0301317 0.647156 0.5 +0.0337656 0.111689 0.027893 0.664884 0.5 +0.0320484 0.11465 0.0272407 0.635343 0.5 +-0.0405044 0.166738 0.00354035 0.413994 0.469929 +-0.0891386 0.129503 0.00423129 0.625486 0.5 +-0.0537547 0.143134 0.0264016 0.696873 0.5 +0.0429765 0.0987175 0.0181666 0.665192 0.5 +0.042638 0.101488 0.0111603 0.691828 0.5 +0.040945 0.0957511 0.0281635 0.671611 0.5 +-0.055076 0.154226 0.0167194 0.394763 0.437313 +-0.0246921 0.156571 -0.00408158 0.136389 0.380194 +-0.0685096 0.147001 0.0412847 0.751812 0.5 +-0.0715343 0.141411 0.0464325 0.627973 0.5 +-0.0700345 0.0631474 0.0200567 0.413051 0.5 +-0.0904383 0.119966 0.00529664 0.442613 0.376719 +-0.0754938 0.127441 0.0530403 0.629117 0.5 +-0.0395371 0.165252 0.00310729 0.710449 0.5 +-0.0405211 0.16525 0.00379284 0.525639 0.48044 +-0.0644897 0.161538 -0.0184978 0.449093 0.5 +-0.0343115 0.126654 0.00282732 0.884528 0.5 +-0.0460392 0.132757 0.0146796 0.568661 0.5 +-0.0682754 0.155222 0.00480981 0.855717 0.5 +-0.0921421 0.116123 0.0383102 0.673877 0.5 +0.00630024 0.125509 0.0321214 0.446946 0.5 +0.00717458 0.125139 0.032446 0.470989 0.335749 +0.00805559 0.124767 0.0327601 0.646519 0.5 +-0.0324333 0.126109 0.00355422 0.886231 0.5 +-0.0633574 0.155908 0.0123853 0.798496 0.5 +0.0314417 0.115539 0.0270138 0.635485 0.5 +0.0308488 0.116432 0.0267923 0.619616 0.5 +-0.0295173 0.175738 -0.0052542 0.533048 0.5 +0.0396492 0.0970274 -0.00677557 0.585857 0.459742 +-0.0715237 0.165101 -0.0167379 0.548789 0.5 +-0.0725643 0.165173 -0.0170441 0.320651 0.421495 +-0.00749309 0.122405 0.0352331 0.602316 0.374044 +-0.008499 0.12243 0.035017 0.55503 0.370512 +0.0289099 0.0929198 0.0437028 0.649753 0.5 +-0.0135013 0.163627 -0.011822 0.338176 0.5 +-0.0434958 0.166715 0.00391556 0.449091 0.5 +-0.0302474 0.125253 0.00290344 0.886165 0.5 +-0.0427308 0.169809 0.000879537 0.44784 0.5 +-0.0205091 0.112696 0.0389743 0.544401 0.5 +-0.0905331 0.135117 0.0212107 0.8537 0.5 +-0.0765896 0.172837 -0.038783 0.256591 0.4298 +-0.0764984 0.127442 0.0532158 0.64269 0.5 +-0.0194912 0.112675 0.0392933 0.58523 0.5 +-0.0864902 0.103559 0.00540359 0.523819 0.297125 +-0.0500639 0.141673 0.0143962 0.701537 0.5 +0.0370668 0.109719 0.0231776 0.52623 0.448558 +0.0322675 0.102123 0.0362847 0.733041 0.5 +-0.0344941 0.171246 -0.000779029 0.483961 0.464804 +-0.0764811 0.141399 0.0471717 0.586335 0.5 +-0.0764751 0.146968 0.0421376 0.424358 0.5 +-0.0394762 0.17111 0.000601324 0.452893 0.5 +0.0391769 0.106978 0.0201683 0.695921 0.5 +-0.085121 0.108927 0.00536277 0.436727 0.419097 +0.0452897 0.0861791 0.0201631 0.487783 0.481728 +0.0172248 0.12732 0.0217261 0.481793 0.5 +-0.000517251 0.0386237 0.0468325 0.280725 0.5 +0.00049898 0.0385943 0.0466363 0.331809 0.5 +0.00148534 0.0385845 0.0464325 0.326482 0.5 +0.00248248 0.0385592 0.0461627 0.29533 0.5 +-0.0157632 0.12799 0.00385748 0.693854 0.5 +-0.0725199 0.141421 0.0466976 0.6287 0.5 +-0.0504991 0.156412 0.0101915 0.561042 0.5 +-0.0907438 0.135107 0.0202099 0.861739 0.5 +-0.0754962 0.141423 0.0471972 0.622335 0.5 +-0.0355139 0.176726 -0.00796363 0.212789 0.5 +0.0406665 0.105637 0.00516291 0.522321 0.489889 +-0.0920359 0.126943 0.0332532 0.848517 0.5 +0.037492 0.0983062 -0.0097724 0.721144 0.5 +0.0404914 0.098527 -0.00482713 0.553326 0.5 +0.0418428 0.0986036 -0.00180869 0.577837 0.48103 +0.0306552 0.102095 0.0374778 0.713605 0.5 +0.0457525 0.0862068 0.0131643 0.575503 0.5 +-0.0305333 0.178655 -0.00565353 0.25965 0.435901 +-0.028415 0.178753 -0.00594863 0.258799 0.457369 +-0.0714932 0.121802 0.0535223 0.588503 0.5 +-0.0725041 0.146981 0.0423864 0.549207 0.5 +-0.0610006 0.129721 0.0398956 0.658867 0.444043 +0.0426086 0.0930422 0.0261716 0.622686 0.5 +-0.00885946 0.13031 0.0150517 0.633691 0.5 +-0.0173344 0.128368 0.0119773 0.547632 0.5 +-0.0313084 0.126018 0.00688499 0.887275 0.5 +-0.0700706 0.155642 0.00707306 0.739059 0.5 +0.012157 0.123544 0.032833 0.477619 0.481075 +-0.0093317 0.127279 0.0279745 0.375412 0.377874 +-0.0657234 0.153927 0.0319321 0.855321 0.5 +-0.0717789 0.154685 0.0298089 0.444959 0.455263 +0.0193029 0.12103 0.032512 0.519282 0.5 +-0.0425159 0.17187 -0.00332083 0.274377 0.177706 +-0.0442176 0.170815 -0.00391429 0.245926 0.5 +-0.0574617 0.0399955 0.0466824 0.417977 0.459314 +-0.0564911 0.0400264 0.0468768 0.454934 0.5 +-0.0554873 0.0400326 0.0469712 0.454776 0.456044 +-0.0544992 0.0400332 0.0469658 0.389055 0.477691 +-0.018505 0.112714 0.0394706 0.595032 0.5 +-0.0504965 0.157865 0.00943584 0.524633 0.5 +-0.0754858 0.146995 0.0422823 0.535866 0.5 +-0.0137239 0.16215 -0.0118322 0.238043 0.5 +-0.0735613 0.16372 -0.0149978 0.267801 0.372187 +-0.0714997 0.16363 -0.0138384 0.403228 0.45768 +0.0386678 0.106943 0.0231645 0.646528 0.5 +0.0390362 0.108381 0.0141662 0.713602 0.5 +0.0421962 0.0929549 -0.00479827 0.490139 0.464008 +-0.0454996 0.163749 0.00555272 0.432857 0.486946 +-0.0435232 0.163746 0.00524284 0.447592 0.5 +-0.0424866 0.0396651 0.043393 0.509262 0.5 +-0.0415057 0.0396254 0.0430594 0.532611 0.5 +-0.0703661 0.16678 -0.0206717 0.332592 0.447054 +-0.025416 0.0905129 0.0490114 0.608282 0.5 +-0.0352058 0.126987 0.0025067 0.900167 0.5 +-0.0872747 0.139127 0.00719289 0.549009 0.5 +-0.0147356 0.124887 0.0290085 0.420759 0.5 +-0.0360017 0.17408 -0.0118959 0.409753 0.289042 +-0.089164 0.0928946 0.0114433 0.753697 0.5 +-0.033385 0.126374 0.00317306 0.877013 0.5 +0.0192795 0.122165 0.0310901 0.603903 0.5 +-0.0646073 0.15754 -0.0113176 0.595216 0.5 +-0.0641033 0.156361 -0.011127 0.453029 0.5 +-0.0635915 0.15525 -0.0109401 0.366881 0.5 +-0.0631289 0.15403 -0.0107687 0.340522 0.399141 +-0.0709666 0.138448 -0.00754922 0.446131 0.5 +-0.0705473 0.1414 0.0460484 0.622822 0.472924 +-0.0755718 0.165165 -0.0201548 0.263106 0.5 +-0.0767116 0.165247 -0.022942 0.32887 0.453908 +0.0296197 0.117006 0.0277632 0.614421 0.5 +0.0302544 0.115002 0.0294335 0.642356 0.5 +0.0405971 0.101404 0.0241737 0.51725 0.5 +0.0380609 0.108343 0.0221716 0.669466 0.5 +0.0404422 0.105635 0.0151656 0.69659 0.5 +-0.0174953 0.112701 0.0395679 0.605597 0.5 +-0.073496 0.147014 0.0424214 0.548554 0.5 +-0.0734653 0.11597 0.0519419 0.585543 0.5 +0.0134925 0.114016 0.0379994 0.669811 0.5 +0.0124885 0.114028 0.0382457 0.678748 0.405433 +-0.0826299 0.110259 0.0284001 0.480115 0.5 +0.0417216 0.100008 -0.000812454 0.499934 0.485059 +-0.077491 0.135849 0.0507593 0.615109 0.5 +-0.0164902 0.112704 0.0398029 0.574624 0.463256 +-0.0154996 0.112736 0.0400881 0.562483 0.466106 +-0.0354998 0.17123 0.000174393 0.438578 0.5 +-0.0364553 0.171237 0.000642707 0.3609 0.453206 +-0.0375058 0.171208 0.000818011 0.405342 0.5 +-0.0384996 0.171162 0.000767348 0.386672 0.5 +-0.0619095 0.118087 -0.0102757 0.569796 0.5 +-0.070971 0.166609 -0.0480118 0.381568 0.451091 +-0.091466 0.14613 0.0241501 0.648478 0.5 +-0.0144894 0.112737 0.0404341 0.565572 0.465454 +-0.0134864 0.112741 0.0406725 0.582932 0.462597 +-0.012499 0.112778 0.04085 0.609944 0.5 +0.00148487 0.0399885 0.0464307 0.447157 0.5 +0.00248698 0.0399628 0.0461692 0.408006 0.5 +0.00347876 0.039945 0.0459765 0.428449 0.5 +-0.0215095 0.114043 0.0376946 0.504636 0.5 +-0.0903131 0.126767 0.00528424 0.623704 0.5 +0.0104915 0.114065 0.0387753 0.549283 0.408623 +-0.0766944 0.171427 -0.0358927 0.241573 0.413559 +0.0276403 0.118218 0.0284429 0.592842 0.5 +0.0309816 0.102484 -0.0145328 0.732658 0.5 +0.0424909 0.101472 0.00517268 0.547756 0.5 +0.000497836 0.114196 0.0414191 0.592572 0.5 +-0.0675175 0.146991 0.0409028 0.62562 0.5 +0.0424058 0.101483 0.00416631 0.537588 0.5 +0.0405495 0.0999198 -0.00379356 0.561091 0.5 +-0.0724896 0.12743 0.0524304 0.563116 0.5 +-0.0415986 0.169934 0.00129157 0.383746 0.5 +-0.0145885 0.128899 0.00863716 0.682121 0.5 +0.0043237 0.131753 0.0112849 0.795238 0.5 +-0.0635102 0.151152 0.0361873 0.463512 0.5 +0.034591 0.113857 0.0224952 0.620597 0.5 +0.0213151 0.0393899 0.0411211 0.259499 0.426724 +0.0175297 0.092684 0.048312 0.654705 0.5 +0.00701986 0.131464 0.0165435 0.748167 0.5 +-0.0114796 0.112753 0.0411508 0.615633 0.5 +0.0381875 0.10978 0.0131678 0.715814 0.5 +-0.0793995 0.0962934 -0.0095136 0.508477 0.5 +0.0412927 0.101424 0.0211601 0.662312 0.5 +0.0419266 0.101462 0.0171593 0.569693 0.490777 +-0.0787984 0.113337 -0.0032043 0.505277 0.5 +-0.0779682 0.135412 -0.00525448 0.466714 0.5 +0.00613123 0.105885 -0.0208912 0.792948 0.5 +0.00913637 0.105871 -0.0204027 0.581086 0.481535 +0.0111199 0.129735 0.0223368 0.465873 0.5 +0.00437534 0.131145 0.0198749 0.592486 0.5 +-0.00201716 0.131125 0.0175388 0.587804 0.5 +-0.0363521 0.126723 0.0183002 0.438744 0.464814 +-0.0160775 0.128732 0.0124337 0.588033 0.5 +-0.0331235 0.126633 0.00621772 0.899288 0.5 +0.00953758 0.128186 0.0275085 0.349878 0.5 +-0.0221316 0.122996 0.0264112 0.445477 0.415699 +-0.0709341 0.162789 -0.0122264 0.463758 0.368162 +-0.0620602 0.155611 0.00849054 0.611624 0.331941 +-0.0468392 0.132859 0.0202702 0.674928 0.5 +-0.0410267 0.172571 -0.00282243 0.287825 0.5 +-0.0385594 0.173184 -0.00190958 0.404578 0.436515 +-0.0141081 0.128922 0.00736661 0.686692 0.5 +-0.0574689 0.0413481 0.0461934 0.460353 0.5 +-0.0564742 0.041367 0.0464242 0.413263 0.5 +-0.0554898 0.041398 0.0465154 0.417403 0.440199 +-0.0544756 0.0413314 0.0465715 0.443352 0.45246 +-0.0534963 0.0413918 0.0463882 0.543733 0.5 +-0.0526044 0.041455 0.0460966 0.571083 0.412186 +-0.0415348 0.163761 0.00444738 0.465626 0.5 +-0.00473635 0.13076 0.00793547 0.738924 0.5 +-0.0898767 0.135147 0.0252168 0.80362 0.5 +-0.00862433 0.122038 -0.0113292 0.767738 0.284429 +-0.0475127 0.0411749 0.0444313 0.654962 0.5 +-0.0464937 0.0411703 0.0442462 0.682757 0.5 +-0.0454852 0.0411575 0.0440424 0.698389 0.5 +-0.0444852 0.0411138 0.0436529 0.696126 0.5 +-0.0434929 0.0410777 0.0433607 0.66402 0.5 +-0.0424856 0.0410553 0.0431368 0.644332 0.5 +-0.0414945 0.041025 0.0428519 0.637792 0.5 +-0.0620472 0.176838 -0.0608311 0.245129 0.411885 +-0.0650951 0.162442 -0.0187197 0.602921 0.370414 +-0.0336466 0.125738 0.0192922 0.32811 0.5 +-0.0806268 0.150792 0.0343829 0.331963 0.314683 +-0.0650964 0.155112 0.00596226 0.733116 0.5 +-0.00214115 0.127727 0.0291435 0.353234 0.447391 +-0.0897483 0.0929448 0.0154361 0.603378 0.5 +0.0208676 0.121124 0.0316774 0.669742 0.5 +0.0201038 0.121698 0.0313961 0.649828 0.387148 +-0.0652623 0.158339 -0.0115587 0.445876 0.5 +-0.0319348 0.125225 0.000800634 0.910494 0.5 +-0.0328435 0.125555 0.000439943 0.913283 0.5 +-0.0337259 0.125903 0.000119567 0.920724 0.5 +-0.0346506 0.126197 -0.000232823 0.63839 0.5 +-0.0355882 0.126454 -0.000576513 0.630547 0.482626 +-0.0838755 0.106118 0.000396239 0.338681 0.43162 +-0.0164965 0.114086 0.0389356 0.585858 0.5 +0.0422361 0.101506 0.0151693 0.700951 0.5 +0.0394332 0.101324 0.027167 0.651687 0.5 +0.0402348 0.101386 0.0251818 0.521 0.482308 +0.0395793 0.107012 0.0171684 0.7064 0.5 +-0.0524989 0.157892 0.00946562 0.425035 0.5 +-0.0494896 0.157875 0.00921755 0.470367 0.484595 +-0.0485004 0.157854 0.0090451 0.519328 0.5 +-0.0104878 0.112778 0.0413082 0.596551 0.5 +-0.0374903 0.172653 -0.000576721 0.367272 0.5 +0.0417828 0.101446 0.0181564 0.700087 0.5 +0.0448261 0.0875458 0.0221634 0.587804 0.5 +-0.0300853 0.179019 -0.00589649 0.247028 0.359013 +-0.0235755 0.157761 -0.0033973 0.196275 0.5 +-0.0226294 0.157855 -0.00422736 0.168936 0.266977 +0.0234635 0.12256 0.0268857 0.477255 0.5 +-0.00779065 0.130523 0.0125627 0.678364 0.5 +0.04086 0.101423 0.0231764 0.628267 0.5 +0.0382413 0.108427 0.0210592 0.687176 0.5 +-0.0275027 0.115261 0.0337596 0.543293 0.5 +-0.0255204 0.115294 0.0339151 0.435792 0.5 +-0.021518 0.115416 0.036565 0.468887 0.429556 +-0.0205005 0.115412 0.03703 0.534732 0.411301 +-0.0754994 0.115715 0.0515239 0.490413 0.5 +-0.000524008 0.041433 0.0467891 0.576734 0.5 +0.000487446 0.041412 0.0465786 0.465964 0.5 +0.00148054 0.0413996 0.0463959 0.471059 0.5 +0.00248318 0.0413744 0.0461608 0.459172 0.427194 +0.00348805 0.0413645 0.0460201 0.446673 0.5 +0.00450182 0.0413372 0.0458645 0.474555 0.5 +0.00549603 0.0413259 0.0457036 0.4746 0.5 +0.00648432 0.0413231 0.0455852 0.476347 0.38769 +0.00748602 0.041302 0.0454759 0.498672 0.40219 +0.00849456 0.0412846 0.0453159 0.486765 0.5 +-0.0504978 0.159322 0.00851944 0.476667 0.5 +-0.0484837 0.159357 0.00832828 0.495992 0.483766 +-0.0464924 0.159333 0.00779524 0.528671 0.5 +-0.0094881 0.112787 0.0415502 0.595459 0.5 +-0.00849378 0.112803 0.0415796 0.624315 0.5 +-0.0755022 0.131669 0.0524935 0.568988 0.5 +0.0269735 0.121605 0.0224835 0.654362 0.5 +-0.0609269 0.155849 0.0219449 0.677314 0.5 +-0.0175043 0.114096 0.0387143 0.583586 0.5 +0.0303038 0.118886 0.0223059 0.579556 0.5 +0.038029 0.105425 -0.00179734 0.588286 0.5 +-0.0824071 0.136209 -0.001703 0.641736 0.5 +0.0380176 0.101228 -0.00786632 0.596105 0.5 +-0.00749383 0.112788 0.0415528 0.627986 0.5 +-0.0365049 0.169731 0.000981263 0.473031 0.5 +-0.0754975 0.123189 0.0531282 0.65366 0.5 +0.0354525 0.106753 -0.0069512 0.534403 0.5 +-0.0714939 0.126019 0.0527835 0.563814 0.5 +0.0377471 0.104052 -0.00484079 0.570151 0.446284 +0.0414464 0.101443 0.020163 0.677413 0.5 +0.0459345 0.0862193 0.0101703 0.586292 0.439394 +-0.0708515 0.0937008 -0.0159297 0.511499 0.5 +-0.0698326 0.0937229 -0.0162704 0.694987 0.5 +-0.0738109 0.0935956 -0.0146814 0.429902 0.5 +-0.071815 0.0936645 -0.0155813 0.472825 0.5 +-0.072824 0.0936306 -0.0150907 0.44866 0.5 +-0.0274399 0.180304 -0.00715734 0.249925 0.433402 +-0.025431 0.180214 -0.00870569 0.433686 0.5 +0.0102401 0.13009 0.0220074 0.603593 0.5 +-0.0554437 0.158541 0.0079523 0.308119 0.5 +-0.059742 0.156334 0.00641085 0.31374 0.5 +-0.0624591 0.155071 0.0054624 0.478676 0.5 +-0.0686509 0.155409 0.00612964 0.844054 0.5 +-0.0354711 0.126342 0.0186171 0.402648 0.5 +-0.023563 0.126621 0.00971624 0.623756 0.5 +-0.0340011 0.127005 0.00589371 0.890142 0.5 +-0.072851 0.148958 0.0401319 0.500951 0.364518 +-0.0719375 0.16298 -0.0125698 0.360888 0.273209 +-0.0469091 0.134066 0.0158053 0.641168 0.5 +-0.0697412 0.154452 0.0305168 0.841551 0.5 +-0.0772099 0.0954309 0.0368548 0.678588 0.5 +-0.0397448 0.172952 -0.00234724 0.355793 0.5 +-0.058497 0.0426323 0.0447374 0.520655 0.5 +-0.0574975 0.0426993 0.0453715 0.491988 0.5 +-0.0564882 0.042714 0.0457133 0.430304 0.474128 +-0.0554949 0.0427291 0.0458455 0.444299 0.481086 +-0.0544973 0.0427375 0.0458563 0.540474 0.5 +-0.0534987 0.0427392 0.045857 0.565446 0.5 +-0.0525195 0.0426931 0.0456595 0.584439 0.442995 +-0.0372497 0.126436 -0.00264816 0.906897 0.5 +0.0390771 0.099844 -0.00681802 0.565183 0.5 +-0.0875792 0.134961 0.00324767 0.517441 0.5 +-0.0484986 0.0425777 0.0442245 0.683295 0.5 +-0.0475009 0.0425468 0.0439593 0.712662 0.5 +-0.0465061 0.0425232 0.0438042 0.752307 0.5 +-0.0454992 0.0425256 0.0437126 0.770258 0.5 +-0.0445079 0.0424992 0.043443 0.788341 0.392875 +-0.0435004 0.0424369 0.0431009 0.617426 0.4623 +-0.0424905 0.0424327 0.0427417 0.707545 0.5 +-0.0414965 0.0424145 0.0425934 0.688217 0.5 +-0.040483 0.0423569 0.0419938 0.669165 0.320516 +-0.0394907 0.0422995 0.0416287 0.624009 0.5 +-0.0384762 0.0423266 0.0418914 0.528344 0.5 +-0.0702433 0.163232 -0.0134117 0.451195 0.5 +-0.0693658 0.16286 -0.0130912 0.452951 0.423894 +-0.0685971 0.162283 -0.0128033 0.451134 0.5 +-0.0678768 0.1616 -0.0125361 0.364487 0.5 +-0.0672213 0.1608 -0.0122924 0.335302 0.5 +-0.0665531 0.160013 -0.0120422 0.553899 0.5 +-0.0659186 0.159142 -0.0118027 0.595231 0.5 +-0.0310902 0.124844 0.00108587 0.901027 0.5 +-0.030417 0.0360576 0.0517185 0.553401 0.5 +-0.0285156 0.0433359 0.0513164 0.501112 0.5 +-0.0274517 0.043312 0.0519115 0.444258 0.412775 +-0.0263289 0.0434924 0.0526862 0.473744 0.406416 +-0.0254805 0.0434932 0.0531599 0.487956 0.5 +-0.0245014 0.043543 0.0534366 0.557003 0.474964 +-0.023487 0.0435372 0.0536017 0.709553 0.5 +-0.0224934 0.0435545 0.0535652 0.538684 0.48177 +-0.0215102 0.0435311 0.0534788 0.544518 0.5 +0.00943169 0.130854 0.0188531 0.678388 0.5 +-0.0435085 0.165227 0.00470373 0.51105 0.5 +-0.0445007 0.165214 0.00483168 0.467154 0.5 +0.0219297 0.123716 0.0263137 0.534141 0.5 +-0.0237608 0.156715 -0.0053038 0.158292 0.110553 +-0.00664529 0.1307 0.0129838 0.669976 0.5 +-0.0145323 0.043279 0.0510718 0.575852 0.5 +-0.0135206 0.0432479 0.0507363 0.576144 0.470349 +-0.012539 0.0432081 0.0504383 0.448727 0.478567 +-0.011518 0.0431769 0.0500228 0.448927 0.393067 +-0.0105379 0.0431327 0.0497176 0.512374 0.475983 +-0.0095237 0.0431051 0.0494016 0.414418 0.403751 +-0.00853122 0.0430617 0.0490142 0.639175 0.5 +-0.0075399 0.0430305 0.0487452 0.63253 0.5 +-0.00654714 0.043 0.0484741 0.596913 0.5 +-0.00554666 0.0429634 0.0481135 0.598081 0.5 +-0.0045458 0.042944 0.0478735 0.397613 0.5 +-0.00354236 0.0429091 0.0474905 0.473885 0.5 +-0.00253313 0.0428829 0.047136 0.480573 0.5 +-0.00151689 0.0428507 0.0468014 0.414958 0.456422 +-0.000523566 0.0428273 0.0465064 0.577992 0.5 +0.000556364 0.0427979 0.0462128 0.456298 0.458882 +0.00148401 0.0427923 0.0460657 0.464527 0.44659 +0.00249537 0.0427747 0.0458993 0.45889 0.438584 +0.00349523 0.0427434 0.0456833 0.443442 0.5 +0.00450037 0.0427385 0.0456181 0.48812 0.352062 +0.0055205 0.0427186 0.0455303 0.492534 0.351666 +0.00649466 0.0427198 0.0454361 0.481813 0.5 +0.00748686 0.0427091 0.0452774 0.502422 0.5 +0.00848754 0.0426921 0.0451471 0.52148 0.5 +0.00949394 0.0426698 0.0450285 0.519814 0.433928 +-0.0312712 0.125373 0.00251041 0.881765 0.5 +0.0185111 0.114004 0.0370685 0.681163 0.5 +-0.0166719 0.128014 0.0194984 0.293349 0.5 +-0.00948977 0.114167 0.0408028 0.616926 0.448066 +-0.0114786 0.114128 0.0403922 0.616017 0.5 +-0.0134888 0.11412 0.0398002 0.570863 0.5 +-0.0255274 0.113962 0.0353265 0.431045 0.5 +-0.0530543 0.14469 0.0223994 0.639643 0.5 +-0.0623396 0.172509 -0.0536126 0.549906 0.5 +-0.0381364 0.171203 -0.0118442 0.436075 0.5 +-0.0538885 0.131144 0.0343613 0.727547 0.5 +-0.065797 0.132562 0.0435297 0.724494 0.5 +0.0425599 0.101502 0.0121632 0.700448 0.5 +0.0269244 0.118903 0.0281816 0.594201 0.5 +-0.0384984 0.169734 0.00180247 0.419452 0.5 +-0.0355002 0.174151 -0.00180627 0.34771 0.5 +-0.0938575 0.120136 0.0242923 0.794672 0.5 +0.0455621 0.0889987 0.00417598 0.507794 0.5 +-0.00649004 0.112763 0.0415025 0.626781 0.5 +-0.00548831 0.112771 0.0416249 0.635396 0.5 +-0.0768441 0.113421 -0.00459179 0.435244 0.44599 +-0.0461647 0.162128 -0.00806097 0.424682 0.5 +-0.0411461 0.162173 -0.0113613 0.411895 0.405943 +-0.0506704 0.0680761 0.0375114 0.682177 0.456916 +-0.0358262 0.0929298 -0.0238031 0.72469 0.5 +-0.0368263 0.0929138 -0.0236695 0.716574 0.5 +-0.00449355 0.112805 0.041803 0.637129 0.5 +0.0398162 0.107019 0.0141667 0.7096 0.5 +-0.0715276 0.14003 0.0472238 0.61723 0.5 +-0.0845757 0.151155 0.0298105 0.29708 0.5 +-0.00349089 0.112806 0.0419152 0.643881 0.5 +0.00931098 0.130351 0.0216675 0.620134 0.375978 +-0.0611888 0.155469 0.00589931 0.320383 0.5 +-0.0686715 0.165205 -0.0529941 0.518552 0.5 +-0.0657827 0.158229 -0.0103034 0.576317 0.397537 +-0.0646035 0.156332 -0.00986181 0.543974 0.5 +-0.00112962 0.125371 0.0323555 0.444043 0.5 +-0.0248162 0.126254 0.00926143 0.653441 0.5 +-0.0388176 0.128112 0.00411022 0.864483 0.5 +-0.0747959 0.149331 0.0394056 0.432149 0.5 +0.0112941 0.127457 0.0281604 0.471276 0.5 +-0.0707468 0.161979 -0.010709 0.464361 0.5 +0.0184391 0.121423 0.0322194 0.497301 0.5 +-0.0677549 0.154168 0.0312275 0.475281 0.457511 +-0.064733 0.15377 0.0322824 0.855275 0.5 +-0.0584936 0.0439589 0.0439647 0.437887 0.447715 +-0.0574962 0.0440189 0.0444763 0.402121 0.5 +-0.0564899 0.0440403 0.0448345 0.353388 0.5 +-0.0554809 0.0440191 0.0450323 0.441993 0.5 +-0.0544952 0.0440117 0.0450302 0.453665 0.418275 +-0.0535025 0.0440354 0.0449405 0.431955 0.5 +-0.0525152 0.0439969 0.0448982 0.443075 0.5 +-0.0515259 0.0439564 0.0445165 0.419507 0.5 +-0.0505573 0.0439128 0.0441317 0.443831 0.401265 +-0.0495011 0.0439447 0.0438293 0.578607 0.5 +-0.0485184 0.0438796 0.0435224 0.603752 0.440048 +-0.0475121 0.0438565 0.0432608 0.627778 0.5 +-0.0465128 0.0438401 0.043121 0.670741 0.5 +-0.0455024 0.0438631 0.0430524 0.692912 0.5 +-0.0445045 0.0438483 0.042919 0.710879 0.5 +-0.0435038 0.0438236 0.0424673 0.738646 0.379127 +-0.0425002 0.0437706 0.0420539 0.719937 0.5 +-0.0414888 0.0437926 0.0421195 0.730733 0.5 +-0.0404988 0.043751 0.0418177 0.700143 0.5 +-0.039497 0.0436994 0.0413132 0.505854 0.327 +-0.0384894 0.0436513 0.0409963 0.818051 0.5 +-0.0143198 0.128437 0.0203415 0.427313 0.5 +-0.0229389 0.126187 0.00412352 0.710427 0.5 +-0.0241862 0.125789 0.00366503 0.703021 0.5 +-0.0255023 0.125351 0.00317915 0.728192 0.5 +-0.0266954 0.125077 0.00273937 0.76612 0.5 +-0.0278953 0.124828 0.00229374 0.823897 0.5 +-0.028881 0.124884 0.00195054 0.84196 0.5 +-0.0300707 0.124739 0.00148409 0.844261 0.5 +-0.0294793 0.0446083 0.0503994 0.511042 0.5 +-0.0284587 0.0446173 0.0507119 0.546568 0.5 +-0.0274798 0.0446461 0.0507675 0.521414 0.476195 +-0.0264922 0.0447022 0.0511549 0.471406 0.469403 +-0.0254758 0.0447668 0.0519525 0.450796 0.400981 +-0.0244827 0.044849 0.0526821 0.506788 0.5 +-0.0234833 0.0448815 0.0530288 0.563115 0.5 +-0.0224929 0.0448955 0.0530527 0.679128 0.5 +-0.0215028 0.0448835 0.0530162 0.682895 0.5 +-0.0205217 0.0448565 0.0528623 0.687704 0.5 +-0.0195138 0.0448322 0.0525308 0.535833 0.472325 +-0.0664988 0.146992 0.0401715 0.646294 0.5 +-0.0174883 0.044685 0.0517611 0.525083 0.5 +-0.0165095 0.0446732 0.0513338 0.502772 0.5 +-0.0155403 0.0446621 0.0510487 0.467745 0.475695 +-0.0145231 0.0446315 0.0506096 0.473882 0.5 +-0.0135516 0.0445689 0.0502862 0.620194 0.436087 +-0.0125497 0.0445369 0.0499253 0.622482 0.5 +-0.0115453 0.0445033 0.0495732 0.647659 0.5 +-0.0105391 0.0444694 0.0492224 0.62392 0.5 +-0.0095351 0.0444416 0.0488648 0.608997 0.5 +-0.00853579 0.044404 0.0484956 0.613173 0.5 +-0.00752629 0.0443832 0.0481509 0.640516 0.5 +-0.00652958 0.0443624 0.0478753 0.61046 0.5 +-0.0055195 0.0443362 0.047543 0.617575 0.5 +-0.00452146 0.0443187 0.0472734 0.628665 0.5 +-0.00351628 0.0442826 0.04692 0.648434 0.5 +-0.00251639 0.0442645 0.0466529 0.67224 0.5 +-0.00150749 0.0442279 0.0463824 0.578592 0.464517 +-0.000506085 0.0442149 0.046198 0.524352 0.464064 +0.000494981 0.0442085 0.0460563 0.464978 0.5 +0.00150093 0.0441835 0.0459725 0.48956 0.5 +0.00250242 0.0441898 0.0459568 0.481694 0.5 +0.00350312 0.0441648 0.0458711 0.474228 0.5 +0.00450017 0.0441843 0.0459802 0.550942 0.5 +0.00550628 0.0441375 0.0457857 0.614058 0.5 +0.00650269 0.044152 0.0457422 0.622114 0.5 +0.00751849 0.0440876 0.0454461 0.516694 0.5 +0.00849016 0.0441134 0.0451901 0.532587 0.5 +0.00949781 0.0440631 0.0448456 0.72381 0.5 +0.0194908 0.113962 0.0368661 0.543398 0.48059 +-0.000436317 0.122463 0.0356275 0.606203 0.420431 +0.00748358 0.11412 0.0398951 0.531072 0.5 +-0.010493 0.114167 0.0405696 0.618466 0.448503 +-0.0124865 0.114128 0.0400495 0.588678 0.5 +-0.023546 0.114036 0.0366055 0.523621 0.5 +-0.0245515 0.114015 0.0358596 0.515012 0.5 +-0.0195083 0.11546 0.0373373 0.557477 0.408277 +-0.0805239 0.148418 0.0381727 0.47939 0.5 +-0.0795053 0.148405 0.0389114 0.458429 0.464546 +-0.0784976 0.148406 0.0395361 0.465879 0.5 +-0.0775017 0.148428 0.039927 0.39118 0.478719 +-0.0444613 0.12936 0.0182577 0.438518 0.5 +-0.0804668 0.131637 0.0521945 0.54405 0.5 +-0.0514917 0.154976 0.0111 0.53832 0.47749 +-0.0395009 0.16971 0.00189803 0.415321 0.5 +-0.0414861 0.169687 0.00162271 0.384299 0.5 +0.0385319 0.0997972 -0.00779458 0.581641 0.5 +0.0379028 0.0997575 -0.00879746 0.607254 0.465993 +0.0451983 0.0889806 0.0171667 0.521547 0.5 +0.000137104 0.104495 -0.0221519 0.733954 0.5 +-0.0738111 0.0907253 -0.0150698 0.397424 0.5 +-0.0728162 0.0907583 -0.0154663 0.420617 0.5 +-0.0718188 0.0907915 -0.0158595 0.436745 0.469601 +-0.070799 0.0908224 -0.0163205 0.499444 0.407676 +-0.0688127 0.0908552 -0.0166124 0.716411 0.5 +-0.0698172 0.0908437 -0.0164973 0.691972 0.5 +-0.033107 0.125984 0.00180258 0.904588 0.5 +0.0255618 0.120425 0.027665 0.547703 0.5 +-0.039513 0.166742 0.00312951 0.509862 0.5 +-0.0384463 0.166779 0.00239389 0.493833 0.5 +-0.00482205 0.130969 0.0150835 0.650381 0.5 +-0.0735195 0.135848 0.0500526 0.628388 0.5 +0.00828872 0.130472 0.0213052 0.586346 0.396701 +-0.015947 0.124632 0.0285893 0.429788 0.5 +-0.0661935 0.155092 0.00556387 0.832947 0.5 +-0.0651326 0.157423 -0.0100634 0.549807 0.5 +-0.0671177 0.159814 -0.0107973 0.42216 0.440727 +-0.0222267 0.0906414 0.0528718 0.546444 0.5 +-0.0349319 0.127285 0.00554823 0.891809 0.5 +-0.0398081 0.128271 0.00374611 0.860622 0.5 +-0.0920085 0.116136 0.0393096 0.646363 0.5 +-0.00402267 0.0975528 0.0526596 0.455087 0.5 +-0.0669805 0.1589 -0.00929727 0.396982 0.5 +-0.0127755 0.126776 0.0267341 0.348721 0.5 +-0.0139293 0.126622 0.0263262 0.347801 0.371858 +0.047185 0.0692848 0.0242283 0.33948 0.5 +-0.0574743 0.0452883 0.0435332 0.264409 0.5 +-0.0564615 0.0452367 0.0437224 0.306375 0.5 +-0.0554801 0.0452738 0.0437595 0.32622 0.5 +-0.054487 0.0452173 0.0438312 0.329123 0.5 +-0.0535114 0.0452153 0.0437642 0.294185 0.404382 +-0.052516 0.0452355 0.0436109 0.279548 0.5 +-0.0515128 0.0452783 0.043411 0.368276 0.458414 +-0.0505103 0.0452467 0.0429196 0.393801 0.462138 +-0.0495176 0.0451863 0.0426306 0.43714 0.5 +-0.0485029 0.0452121 0.0424266 0.495506 0.5 +-0.047499 0.0451812 0.0421654 0.550536 0.5 +-0.0464981 0.0451704 0.0419279 0.572863 0.5 +-0.0454982 0.045182 0.0420491 0.635941 0.5 +-0.044496 0.0451943 0.0419603 0.652968 0.5 +-0.0434918 0.0451945 0.0416496 0.699461 0.5 +-0.0424936 0.045133 0.0413379 0.711239 0.5 +-0.0414975 0.045132 0.0414403 0.721914 0.5 +-0.0404955 0.0451407 0.0414639 0.657568 0.5 +-0.0395021 0.0450562 0.0411081 0.532288 0.311328 +-0.038496 0.0450464 0.0406484 0.620035 0.5 +-0.0375125 0.045091 0.0407522 0.801759 0.5 +-0.069527 0.156219 -3.70248e-05 0.629099 0.5 +-0.088156 0.151596 0.0228856 0.276354 0.5 +-0.0725884 0.155473 0.0265843 0.47565 0.441038 +-0.0758153 0.155373 0.0254598 0.799832 0.5 +-0.00601771 0.0990415 0.0504631 0.327523 0.438474 +0.0296092 0.114943 -0.00583865 0.66246 0.5 +-0.0918829 0.116106 0.0333156 0.476916 0.5 +-0.0294372 0.045874 0.0494957 0.432059 0.466683 +-0.02847 0.045966 0.0500228 0.428999 0.5 +-0.0274618 0.045988 0.0503593 0.616836 0.5 +-0.0264467 0.0459901 0.0505652 0.616881 0.5 +-0.025466 0.0460651 0.0509844 0.563027 0.396248 +-0.0244855 0.0461464 0.0516096 0.454706 0.407068 +-0.0234881 0.0462034 0.0522022 0.438423 0.5 +-0.0224893 0.0462052 0.0523041 0.557416 0.5 +-0.0214969 0.0461967 0.0522939 0.540731 0.5 +-0.0205102 0.0461853 0.0521703 0.565034 0.5 +-0.0195364 0.0461211 0.0518679 0.569967 0.459648 +-0.0185448 0.0460852 0.0515079 0.447008 0.5 +-0.0175443 0.0460366 0.0510389 0.544281 0.5 +-0.0165385 0.0459978 0.0505746 0.509702 0.5 +-0.0155349 0.0459646 0.0502157 0.485165 0.5 +-0.0145321 0.0459268 0.0498594 0.463789 0.44849 +-0.0135288 0.0458914 0.0493586 0.469555 0.5 +-0.012533 0.0458468 0.048979 0.511849 0.42028 +-0.0115387 0.0458293 0.048671 0.551458 0.5 +-0.0105333 0.0457993 0.0483516 0.581683 0.396212 +-0.0095211 0.045789 0.0480158 0.556595 0.5 +-0.00850771 0.0457646 0.047699 0.616722 0.5 +-0.00750575 0.0457415 0.0474579 0.640683 0.5 +-0.00649796 0.0457161 0.0472731 0.671927 0.5 +-0.00549495 0.0456998 0.0471564 0.611505 0.5 +-0.00449363 0.0456798 0.0470573 0.581333 0.5 +-0.00349731 0.0456721 0.0469862 0.46766 0.454238 +-0.00248901 0.0456504 0.0469622 0.477238 0.5 +-0.00149685 0.0456811 0.047029 0.522546 0.5 +-0.000499367 0.0456802 0.0470389 0.497193 0.429154 +0.000501495 0.0457296 0.0472541 0.425279 0.459567 +0.00150908 0.0458287 0.0477014 0.528532 0.5 +0.00251634 0.0459065 0.0480561 0.56846 0.5 +0.00351191 0.0459363 0.0483003 0.550182 0.5 +0.00450167 0.0459455 0.0484199 0.573739 0.5 +0.00549045 0.0459551 0.048539 0.453336 0.5 +0.00647697 0.0459611 0.0484012 0.56068 0.5 +0.00747158 0.0458651 0.0478111 0.572906 0.5 +0.00845531 0.04577 0.0469205 0.620266 0.5 +0.00953188 0.0455622 0.0461832 0.626827 0.5 +-0.0354984 0.115235 0.0327878 0.683562 0.5 +-0.033517 0.115303 0.0329858 0.643519 0.5 +-0.034501 0.115223 0.0328885 0.675316 0.5 +-0.0484911 0.115278 0.0334198 0.515399 0.5 +-0.00248977 0.112799 0.0419964 0.661564 0.455977 +0.0429479 0.0845778 -0.00579145 0.568535 0.5 +-0.00749309 0.114174 0.0409291 0.643883 0.5 +-0.00648723 0.114138 0.040862 0.645616 0.5 +-0.0343726 0.127227 0.0072164 0.890292 0.5 +-0.0675131 0.145595 0.0418048 0.617258 0.5 +-0.0685186 0.1456 0.0424246 0.503733 0.5 +-0.076485 0.148385 0.0403892 0.46656 0.5 +-0.0715061 0.148353 0.0408514 0.53355 0.438723 +-0.0393744 0.174134 -0.00504658 0.250755 0.5 +0.0410678 0.10142 0.0221661 0.638113 0.5 +-0.0514931 0.156432 0.0104716 0.535638 0.5 +0.0202898 0.124676 0.0257091 0.513676 0.5 +-0.0151278 0.128803 0.00988702 0.67945 0.5 +-0.00149333 0.112805 0.0421166 0.662393 0.468388 +-0.0228105 0.123961 0.023212 0.374818 0.437592 +0.0405574 0.104219 0.0191648 0.561751 0.5 +0.0315129 0.0439606 0.0299133 0.650152 0.5 +0.0325099 0.0439072 0.0294151 0.770367 0.5 +-0.0490964 0.156122 -0.00621407 0.386286 0.5 +-0.0271937 0.174158 -0.0183459 0.379432 0.418735 +0.0272121 0.088765 -0.0222319 0.715629 0.5 +-0.0307256 0.0915724 -0.0247467 0.474586 0.431409 +-0.0318346 0.0915622 -0.0244444 0.643906 0.5 +-0.0298676 0.0916468 -0.0252289 0.34034 0.5 +-0.0494924 0.160775 0.00747898 0.515745 0.5 +-0.0322408 0.125589 0.00213325 0.898503 0.5 +-0.0888501 0.151809 0.0151852 0.257143 0.5 +0.0343092 0.113032 0.0252402 0.612766 0.5 +0.0375985 0.10834 0.0241868 0.534482 0.490368 +-0.0254275 0.181837 -0.00892324 0.236115 0.43737 +0.028089 0.0929174 0.0442737 0.642207 0.5 +-0.000498881 0.112805 0.0421187 0.625603 0.5 +0.00328959 0.131137 0.0194851 0.597335 0.5 +-0.00316996 0.131012 0.0171239 0.593251 0.5 +0.00680734 0.129132 0.0265205 0.374593 0.448613 +0.00773558 0.128847 0.0268569 0.39179 0.5 +-0.0445078 0.128204 0.0197407 0.463673 0.5 +-0.0288355 0.125617 0.00924976 0.816818 0.5 +-0.0407972 0.128426 0.00338476 0.855031 0.5 +-0.088826 0.122625 0.00229599 0.498057 0.5 +-0.00326172 0.0994383 0.0499516 0.273204 0.415905 +-0.0426789 0.168728 0.0023488 0.333917 0.5 +-0.0657091 0.157202 -0.00882727 0.538634 0.5 +-0.0645952 0.155196 -0.0084031 0.562426 0.370229 +-0.0635463 0.153079 -0.00800928 0.50597 0.5 +-0.0236453 0.0906062 0.0514725 0.701203 0.5 +-0.0564936 0.0465915 0.0420515 0.155364 0.331947 +-0.0554996 0.0466308 0.0421953 0.174013 0.386104 +-0.054494 0.0465534 0.0422647 0.204041 0.5 +-0.053498 0.0465766 0.0420409 0.196715 0.5 +-0.0525012 0.046573 0.0420391 0.224388 0.5 +-0.0515001 0.0465582 0.0417907 0.325701 0.5 +-0.0504972 0.0465484 0.0414292 0.392275 0.5 +-0.0495014 0.0464837 0.0411417 0.465213 0.5 +-0.048497 0.0464891 0.040915 0.435536 0.5 +-0.0474979 0.0464882 0.040801 0.517842 0.5 +-0.0464961 0.0464761 0.0407845 0.564414 0.5 +-0.0454996 0.0464888 0.0408011 0.625964 0.5 +-0.0444986 0.0465011 0.0409291 0.659381 0.5 +-0.0435026 0.0465062 0.0407289 0.739843 0.5 +-0.0424955 0.0464529 0.0406301 0.772548 0.5 +-0.0414956 0.0464933 0.0408152 0.747413 0.5 +-0.0404958 0.0464911 0.0408136 0.648237 0.5 +-0.0394936 0.046476 0.0404962 0.650046 0.5 +-0.0384944 0.0464446 0.0402202 0.650395 0.5 +-0.0375004 0.0464372 0.040096 0.614167 0.5 +-0.036507 0.0464425 0.0402005 0.769891 0.5 +-0.0255118 0.0936195 -0.0293755 0.294426 0.332222 +-0.0297999 0.12434 0.000117203 0.866874 0.5 +-0.0308235 0.12443 -0.00028071 0.89886 0.5 +-0.0317456 0.124703 -0.000629789 0.90558 0.5 +-0.0326323 0.125019 -0.000941466 0.92032 0.5 +-0.0335104 0.125389 -0.00127044 0.638757 0.5 +-0.0344386 0.125663 -0.00162003 0.643798 0.476155 +-0.0284556 0.0472262 0.0488083 0.381268 0.5 +-0.0274608 0.0473022 0.0495228 0.326031 0.5 +-0.0264774 0.0473675 0.0499125 0.398738 0.5 +-0.0254423 0.0473682 0.0503166 0.372414 0.46559 +-0.0244616 0.0474336 0.050725 0.35697 0.413926 +-0.0234912 0.0474961 0.0510145 0.339507 0.5 +-0.0224848 0.0474635 0.0510926 0.42123 0.5 +-0.0214953 0.0474568 0.0509792 0.398311 0.5 +-0.0205082 0.0474421 0.0508554 0.522247 0.5 +-0.0195149 0.0474114 0.0506124 0.52524 0.5 +-0.0185134 0.0473863 0.05026 0.546784 0.5 +-0.0175351 0.0472943 0.0498404 0.576068 0.5 +-0.0165233 0.0472885 0.0494939 0.526685 0.5 +-0.0155034 0.0472755 0.0490261 0.387348 0.5 +-0.0144968 0.0472352 0.0484474 0.414984 0.428712 +-0.0134961 0.0472092 0.0480936 0.502337 0.5 +-0.0124976 0.0472007 0.0479814 0.573371 0.5 +-0.0114987 0.0471911 0.0478612 0.625363 0.5 +-0.010495 0.0471724 0.0477907 0.597977 0.5 +-0.00949656 0.0471698 0.047803 0.569713 0.5 +-0.00851871 0.0471234 0.047663 0.565586 0.316117 +-0.00750517 0.0471136 0.0478292 0.553926 0.314627 +-0.00650105 0.0472142 0.0482843 0.437426 0.44831 +-0.00549562 0.0472961 0.0485942 0.446744 0.431743 +-0.0044937 0.0473352 0.0489501 0.556866 0.5 +-0.0034922 0.0473569 0.0490622 0.557965 0.5 +-0.00249349 0.0474079 0.0491587 0.448484 0.460756 +-0.00147854 0.0474532 0.049375 0.486688 0.446217 +-0.000486036 0.047441 0.049521 0.509834 0.439423 +0.000507196 0.0474213 0.049671 0.495901 0.44823 +0.00150975 0.0474485 0.049901 0.591917 0.5 +0.00250708 0.0474439 0.0499052 0.499299 0.5 +0.00350193 0.0474397 0.0500395 0.505375 0.5 +0.00449953 0.0474774 0.0501288 0.505968 0.5 +0.00549435 0.0474709 0.0500045 0.508281 0.5 +0.00648582 0.047441 0.0497645 0.494952 0.5 +0.00747686 0.0474111 0.0493962 0.504357 0.5 +0.00849245 0.0473031 0.0488481 0.429122 0.458323 +0.00946392 0.0472926 0.0483305 0.530082 0.45981 +0.0104364 0.0472441 0.0475563 0.520876 0.5 +-0.0764988 0.13725 0.0499203 0.608254 0.5 +-0.0774908 0.137247 0.0499166 0.59291 0.5 +-0.0325172 0.115309 0.0332233 0.593262 0.5 +-0.0586564 0.152453 0.0326111 0.470966 0.5 +0.0348698 0.112104 0.0254475 0.620406 0.474458 +-0.00549593 0.114185 0.0409403 0.649936 0.437916 +-0.0755046 0.137255 0.0498073 0.624942 0.5 +-0.0745038 0.137269 0.049596 0.614235 0.394881 +-0.0735087 0.137262 0.0493527 0.625357 0.5 +-0.0715111 0.145604 0.0434169 0.588713 0.456363 +-0.0725069 0.145589 0.0436497 0.59144 0.5 +-0.0705109 0.148356 0.0407257 0.528951 0.5 +-0.0675145 0.148386 0.0398761 0.462984 0.5 +-0.0663959 0.148276 0.0393784 0.511409 0.450962 +-0.0810243 0.0936828 -0.00856919 0.685573 0.5 +0.0432798 0.100122 0.00916351 0.574016 0.5 +-0.0475138 0.156385 0.00914965 0.626298 0.5 +0.0402856 0.10561 0.017163 0.704161 0.5 +-0.0774854 0.142838 0.0458543 0.518864 0.5 +-0.0749127 0.151363 0.0363064 0.353251 0.459253 +-0.0284773 0.177212 -0.00607735 0.446338 0.5 +0.0325091 0.0454335 0.0302933 0.787274 0.5 +0.0335076 0.0453895 0.0300756 0.814738 0.5 +0.0345025 0.0454126 0.0301845 0.810974 0.5 +0.035496 0.0454077 0.0303438 0.807573 0.5 +0.0364941 0.0454217 0.0304675 0.622717 0.5 +0.0375013 0.045461 0.0306904 0.62344 0.5 +0.0385027 0.0454964 0.0307784 0.599664 0.5 +-0.0154988 0.114109 0.0392017 0.566077 0.5 +-0.0475053 0.16079 0.00736091 0.478146 0.5 +-0.0434424 0.160833 0.00573037 0.584039 0.5 +-0.0127683 0.163589 -0.0126806 0.289791 0.5 +0.0323217 0.116577 0.0230638 0.748262 0.5 +-0.0414995 0.168206 0.00296291 0.422685 0.5 +0.0393714 0.104176 0.025187 0.518452 0.458836 +0.0299608 0.102103 0.0382304 0.70041 0.5 +-0.0255896 0.182763 -0.0105092 0.245054 0.5 +-0.0245507 0.183147 -0.010424 0.234 0.5 +-0.0234711 0.183379 -0.010712 0.246322 0.458572 +-0.0100076 0.130157 0.0146359 0.580144 0.5 +-0.0185901 0.128007 0.0115203 0.561423 0.5 +0.000382137 0.128869 0.0270967 0.347796 0.441746 +0.00961512 0.122501 0.0348066 0.599451 0.5 +-0.0689992 0.150311 0.0384044 0.435317 0.281638 +-0.0742776 0.161639 -0.0118948 0.294222 0.5 +-0.0699149 0.161541 -0.0103834 0.496545 0.382959 +-0.0437665 0.168716 0.00196199 0.333813 0.428845 +-0.00338001 0.130095 0.0228247 0.835857 0.5 +-0.0637552 0.15245 -0.00517189 0.691705 0.5 +-0.067462 0.157723 -0.00658264 0.409289 0.444444 +-0.0696084 0.159782 -0.00738408 0.493602 0.396952 +-0.0564952 0.047766 0.0395183 0.0883466 0.213805 +-0.0554939 0.0477978 0.0398952 0.0899238 0.223778 +-0.0544725 0.0478754 0.0402183 0.0936448 0.372444 +-0.0534956 0.0478266 0.0400304 0.159535 0.5 +-0.0524983 0.0477783 0.0397646 0.155558 0.429639 +-0.0514997 0.047729 0.0396118 0.247029 0.5 +-0.0504949 0.0477308 0.0397221 0.307418 0.5 +-0.0494981 0.0477699 0.0395132 0.394846 0.5 +-0.0484934 0.047761 0.0395051 0.439768 0.5 +-0.0474969 0.0477925 0.0396528 0.497979 0.5 +-0.0464984 0.047794 0.0396541 0.596063 0.5 +-0.045503 0.0478046 0.0396725 0.671048 0.5 +-0.044502 0.0478297 0.0399289 0.738675 0.5 +-0.0435018 0.0478421 0.040059 0.78748 0.5 +-0.0425045 0.0478596 0.0401075 0.82803 0.5 +-0.0414999 0.0478558 0.040117 0.775761 0.5 +-0.0404958 0.0478428 0.0400733 0.730289 0.5 +-0.0394895 0.0478295 0.0398724 0.719405 0.5 +-0.0384924 0.0478181 0.0398313 0.704038 0.5 +-0.0374932 0.0478153 0.0397186 0.656538 0.5 +-0.0365036 0.0478079 0.0395886 0.809528 0.5 +-0.0355275 0.04785 0.0396404 0.737409 0.5 +-0.0697425 0.164473 -0.0161193 0.358587 0.445312 +-0.0689178 0.164003 -0.0158096 0.349886 0.384981 +-0.0681413 0.163425 -0.0155251 0.35769 0.449279 +-0.0673944 0.162815 -0.015253 0.349438 0.460572 +-0.0666931 0.162075 -0.0149837 0.400441 0.5 +-0.0660878 0.161167 -0.014759 0.393223 0.422636 +-0.0654948 0.160255 -0.0145439 0.549279 0.5 +-0.0274537 0.0485303 0.0479606 0.219221 0.5 +-0.0264744 0.0486202 0.0485825 0.245873 0.5 +-0.0254941 0.0486931 0.0489695 0.241748 0.39204 +-0.0244788 0.0486839 0.0492934 0.282983 0.5 +-0.0234883 0.0487024 0.0493089 0.373489 0.5 +-0.0224914 0.04868 0.0491885 0.367946 0.5 +-0.0214981 0.0486638 0.0490621 0.381852 0.5 +-0.0205025 0.0486482 0.0489372 0.373069 0.5 +-0.0194857 0.0486564 0.0485018 0.303163 0.444285 +-0.0184963 0.0486167 0.0482304 0.33741 0.44631 +-0.017497 0.0485942 0.047882 0.409156 0.5 +-0.0164973 0.0485745 0.0476342 0.420528 0.5 +-0.0154987 0.0485755 0.0476399 0.490508 0.5 +-0.0144966 0.0485988 0.0478804 0.500347 0.5 +-0.013506 0.0486161 0.0481837 0.527089 0.5 +-0.0125023 0.0486789 0.0487656 0.496618 0.5 +-0.0114995 0.0486859 0.0490069 0.453954 0.355746 +-0.010491 0.0487865 0.0492904 0.439773 0.333963 +-0.00948608 0.0488348 0.0496357 0.478728 0.5 +-0.0084766 0.0489124 0.0500846 0.61481 0.5 +-0.00748372 0.0488969 0.0502433 0.596772 0.5 +-0.00649633 0.0488329 0.050181 0.617627 0.5 +-0.00549072 0.0488848 0.0502608 0.53012 0.5 +-0.00449485 0.0488681 0.0504112 0.55229 0.5 +-0.00348603 0.0489394 0.050606 0.545374 0.5 +-0.00249719 0.0488761 0.0505372 0.527248 0.5 +-0.00148646 0.0489421 0.0507365 0.547703 0.455802 +-0.000497779 0.0489051 0.0509033 0.561112 0.5 +0.000506827 0.0489752 0.0512269 0.560812 0.423049 +0.0015066 0.0490028 0.0513272 0.53515 0.5 +0.00250363 0.0489881 0.0513443 0.545766 0.5 +0.00350274 0.0489558 0.0513808 0.545727 0.5 +0.00450171 0.04895 0.0512539 0.538384 0.5 +0.00549546 0.0489597 0.051102 0.545653 0.5 +0.0064937 0.048929 0.05087 0.558244 0.5 +0.00748827 0.048894 0.0505047 0.552985 0.5 +0.0084996 0.0488213 0.0500608 0.562009 0.5 +0.00949238 0.0487693 0.0494463 0.564871 0.5 +0.0104455 0.0488162 0.0487077 0.577213 0.378391 +-0.0724967 0.123205 0.0535111 0.500853 0.5 +-0.00949475 0.122405 0.0348735 0.515152 0.5 +0.0449966 0.0931749 0.00418165 0.582116 0.455816 +-0.0893649 0.111932 0.017326 0.604102 0.5 +0.000497507 0.112823 0.0420607 0.773647 0.5 +-0.0744965 0.123196 0.0533572 0.663729 0.5 +-0.0576724 0.155657 0.012957 0.57019 0.5 +0.00599322 0.131555 0.0161709 0.748023 0.5 +-0.0725241 0.13724 0.0489632 0.621356 0.5 +-0.0764972 0.123179 0.0527664 0.567268 0.5 +-0.0735012 0.145587 0.0437725 0.590859 0.354482 +-0.074493 0.145596 0.0437863 0.580156 0.391421 +-0.0754893 0.145614 0.0436847 0.557271 0.5 +-0.0764843 0.145607 0.0435529 0.548446 0.5 +-0.0654644 0.148292 0.0388168 0.516432 0.5 +-0.0645196 0.148285 0.0383203 0.505246 0.481751 +-0.063566 0.148289 0.0378536 0.506024 0.469958 +-0.0624682 0.148372 0.0373168 0.491494 0.5 +-0.061629 0.148291 0.0370712 0.495113 0.5 +-0.000397233 0.131333 0.0167016 0.611031 0.5 +-0.00149054 0.131258 0.0163007 0.630676 0.326365 +0.0325208 0.0469245 0.0310812 0.735147 0.5 +0.0335068 0.0468989 0.0306812 0.819134 0.5 +0.0345037 0.0468848 0.0307194 0.819865 0.5 +0.0354988 0.0469226 0.030944 0.64587 0.5 +0.0364837 0.0469104 0.0311466 0.66983 0.5 +0.0374899 0.0469458 0.0313688 0.668179 0.5 +0.0384949 0.0469555 0.0314897 0.697464 0.5 +0.0395014 0.0469731 0.0315971 0.685596 0.5 +0.0405026 0.0469928 0.0315524 0.610453 0.5 +-0.0893231 0.14203 0.0321578 0.623335 0.5 +0.00149473 0.112812 0.0419217 0.591813 0.5 +-0.0774962 0.131676 0.0527303 0.613646 0.5 +-0.00266999 0.131274 0.0130017 0.734441 0.5 +-0.0625219 0.151129 0.0359075 0.465095 0.452331 +0.0444235 0.0917457 0.0211574 0.493368 0.454688 +0.00249002 0.112797 0.0416669 0.614079 0.5 +0.0432951 0.0987146 0.0161577 0.668233 0.5 +-0.0354636 0.172718 -0.000342918 0.338322 0.453736 +-0.02246 0.183226 -0.0115124 0.300187 0.5 +0.0430875 0.0930739 0.0251589 0.612628 0.471241 +-0.0260776 0.125932 0.00880255 0.730099 0.5 +-0.0358232 0.127618 0.00522677 0.875884 0.5 +-0.0417874 0.128546 0.00302224 0.854553 0.5 +-0.0728566 0.162156 -0.0114327 0.290448 0.5 +-0.069106 0.161031 -0.0101008 0.388478 0.416746 +-0.0683786 0.160357 -0.00982452 0.382925 0.468866 +-0.0619637 0.147832 -0.00431835 0.335344 0.5 +-0.0643494 0.153359 -0.00540282 0.715743 0.5 +-0.0681652 0.158429 -0.00684039 0.359365 0.5 +-0.0704807 0.1602 -0.00768602 0.494572 0.5 +-0.0725078 0.160609 -0.0083559 0.289181 0.5 +-0.0555 0.0488797 0.0362241 0 0 +0.00348618 0.11278 0.041408 0.634788 0.5 +-0.0534691 0.0491595 0.0373719 0.0893996 0.5 +-0.05252 0.0490121 0.0379722 0.105546 0.367057 +-0.0515081 0.0490357 0.0376444 0.156125 0.394583 +-0.0505546 0.0490872 0.0373101 0.235892 0.440149 +-0.0495075 0.0490436 0.0377607 0.338157 0.379608 +-0.0485055 0.0490796 0.0381424 0.412251 0.5 +-0.0475135 0.0491287 0.0385522 0.52319 0.5 +-0.0465112 0.0491437 0.0387964 0.625886 0.5 +-0.0454932 0.0491469 0.0390026 0.735566 0.5 +-0.0445073 0.0491885 0.039305 0.62148 0.5 +-0.0435045 0.0492094 0.0395536 0.814004 0.5 +-0.0425019 0.049221 0.0396798 0.831296 0.5 +-0.0415014 0.0492193 0.0396812 0.819986 0.5 +-0.0404973 0.0492165 0.0395965 0.811804 0.5 +-0.0394944 0.0492076 0.0395541 0.792379 0.5 +-0.0384865 0.0492045 0.0394845 0.762134 0.5 +-0.0374859 0.0491992 0.0393813 0.693926 0.5 +-0.0364777 0.0491722 0.0391199 0.634483 0.337292 +-0.0354984 0.0491504 0.038916 0.795083 0.5 +-0.0345051 0.0491976 0.0390013 0.676102 0.5 +-0.00403191 0.0987119 0.0511654 0.36294 0.5 +-0.0358096 0.12684 0.0170169 0.612182 0.5 +-0.00679601 0.100851 0.0456503 0.338462 0.5 +-0.0432963 0.128843 0.0142751 0.417331 0.5 +-0.0581623 0.155642 0.0142378 0.649033 0.5 +-0.0730465 0.158091 -0.00419381 0.246338 0.5 +-0.0274922 0.0497667 0.0454723 0.182016 0.5 +-0.0265027 0.0498541 0.0461184 0.138028 0.423664 +-0.0254896 0.049863 0.0466034 0.183933 0.396889 +-0.0244999 0.049902 0.0466266 0.179675 0.387382 +-0.0234974 0.0498976 0.0468652 0.195646 0.404388 +-0.0224974 0.0498852 0.046496 0.223469 0.413874 +-0.0214969 0.0498836 0.0466158 0.340887 0.5 +-0.0205078 0.049871 0.046386 0.361152 0.5 +-0.0194942 0.0498847 0.046612 0.417663 0.5 +-0.0185111 0.0499058 0.0467842 0.475376 0.5 +-0.0175003 0.0499225 0.0470061 0.520032 0.5 +-0.0165027 0.0499584 0.0473896 0.518655 0.5 +-0.0154803 0.0500282 0.047966 0.367462 0.5 +-0.0144943 0.0500942 0.0487331 0.451613 0.5 +-0.0134983 0.0501789 0.0495792 0.471863 0.5 +-0.0125327 0.0502379 0.050201 0.442906 0.461725 +-0.0114878 0.0502762 0.0503958 0.563179 0.5 +-0.0104937 0.0502816 0.0505289 0.565703 0.5 +-0.00949487 0.0503088 0.0507661 0.61046 0.5 +-0.0084955 0.0503277 0.0510127 0.616442 0.5 +-0.00749319 0.0503553 0.0512463 0.605487 0.5 +-0.00648958 0.0503786 0.0513549 0.629861 0.5 +-0.00549746 0.0503818 0.0516227 0.637441 0.5 +-0.00449958 0.0504123 0.0519892 0.619263 0.5 +-0.00349567 0.0504603 0.052334 0.723747 0.5 +-0.00249426 0.0505094 0.0526827 0.675644 0.5 +-0.00149572 0.0505531 0.0529099 0.517623 0.467984 +-0.000498029 0.0505184 0.0529377 0.502968 0.5 +0.000511374 0.0503823 0.0524384 0.541197 0.470804 +0.00150167 0.0504398 0.0522275 0.572525 0.5 +0.00250222 0.0504849 0.0522926 0.577891 0.5 +0.00349864 0.0505127 0.0525247 0.60557 0.5 +0.00450189 0.050474 0.0524519 0.589517 0.5 +0.00551166 0.0504095 0.0521406 0.571142 0.5 +0.00650609 0.0503877 0.0517539 0.499955 0.451736 +0.00749105 0.050377 0.0513506 0.497899 0.453305 +0.00847112 0.0503629 0.0509458 0.517311 0.47728 +0.00951901 0.0504027 0.0504431 0.595216 0.5 +-0.0625516 0.147537 -0.0115723 0.363787 0.461156 +-0.0908043 0.122683 0.00627651 0.587249 0.5 +-0.0626008 0.160001 -0.0205855 0.524863 0.5 +-0.0266054 0.0916781 -0.031606 0.294527 0.5 +-0.0703512 0.170836 -0.0520339 0.460427 0.5 +-0.0744896 0.128852 0.0526631 0.58178 0.469371 +-0.0617312 0.142927 -0.00565867 0.48145 0.5 +-0.0945717 0.122812 0.0182725 0.570519 0.5 +0.0327608 0.11383 -0.00261931 0.532211 0.5 +-0.00947595 0.130265 0.0133884 0.641078 0.313821 +-0.0528475 0.140082 0.0254195 0.72719 0.5 +-0.00648998 0.122405 0.0354776 0.614897 0.5 +-0.013019 0.129549 0.0120959 0.635915 0.5 +-0.0617146 0.155302 -0.0255819 0.690546 0.5 +-0.0853384 0.107683 0.0213404 0.519516 0.5 +-0.0774937 0.145636 0.0432119 0.423974 0.5 +-0.078513 0.145668 0.0427459 0.399127 0.466636 +0.00323629 0.131729 0.0108817 0.774375 0.5 +-0.0896348 0.140659 0.0301806 0.685876 0.5 +-0.0267629 0.124714 0.018819 0.428255 0.5 +-0.0293056 0.125075 0.00323421 0.876488 0.5 +-0.0464927 0.165223 0.0045927 0.435281 0.345503 +0.0324954 0.0484967 0.0321634 0.609925 0.5 +0.0335365 0.0483507 0.0312493 0.751192 0.5 +0.0345069 0.0483661 0.0310725 0.823693 0.5 +0.0354985 0.0483762 0.03122 0.810059 0.5 +0.0364932 0.0484054 0.0314672 0.628112 0.5 +0.0374917 0.0484328 0.0317174 0.638199 0.5 +0.038489 0.0484512 0.0319961 0.669803 0.5 +0.039494 0.0484532 0.0321483 0.669936 0.5 +0.0405023 0.0484755 0.0322215 0.678682 0.5 +0.0415181 0.0484385 0.0321463 0.655209 0.5 +-0.0394865 0.115305 0.0335817 0.657986 0.5 +-0.0881399 0.122604 0.000302573 0.499082 0.5 +-0.0641133 0.155183 -0.0406054 0.523327 0.5 +0.0396737 0.107002 0.0161655 0.705639 0.5 +0.0398576 0.101362 0.0261824 0.526023 0.487748 +-0.0744916 0.146991 0.0423999 0.552387 0.5 +-0.0424971 0.165251 0.00449932 0.423131 0.417913 +-0.0704743 0.121802 0.053345 0.580985 0.5 +0.0267515 0.102116 0.0406018 0.689793 0.5 +-0.0878008 0.119885 0.00028492 0.365047 0.462462 +-0.089797 0.129515 0.00524651 0.576313 0.5 +-0.0269413 0.181454 -0.0140289 0.314049 0.5 +-0.0307494 0.125973 0.00854668 0.879561 0.5 +-0.0747157 0.155426 0.0258403 0.815423 0.5 +-0.0448976 0.168579 0.00154181 0.341222 0.5 +-0.0624118 0.148891 -0.00459657 0.336809 0.5 +-0.0640913 0.154089 -0.00821335 0.573973 0.5 +-0.0630663 0.151874 -0.00782908 0.282357 0.362595 +-0.075878 0.0954761 0.0383509 0.647987 0.457049 +0.0169167 0.127898 0.0201801 0.412341 0.5 +-0.00552471 0.130134 0.0220582 0.484766 0.5 +-0.0148858 0.0985034 0.047376 0.271215 0.427554 +-0.0088618 0.129865 0.0208462 0.438679 0.430152 +-0.0384222 0.125448 0.0219859 0.477385 0.440541 +-0.0513808 0.0500433 0.0347314 0.192432 0.5 +-0.0504584 0.0502644 0.0363006 0.229078 0.5 +-0.0495137 0.0503617 0.0366255 0.311543 0.5 +-0.0485081 0.0504118 0.037253 0.348657 0.446953 +-0.0475093 0.0504634 0.0377677 0.448188 0.5 +-0.0465214 0.0505047 0.038174 0.530008 0.5 +-0.0455152 0.0505363 0.0385492 0.586491 0.5 +-0.0445141 0.050571 0.038927 0.619105 0.5 +-0.0435279 0.0506014 0.0392212 0.629588 0.477809 +-0.0425018 0.0506116 0.0394181 0.643914 0.5 +-0.0415011 0.0506114 0.0394281 0.656785 0.5 +-0.0404972 0.0506061 0.0393715 0.655189 0.5 +-0.0394902 0.0506047 0.0393469 0.670506 0.5 +-0.0384895 0.050603 0.0393394 0.658053 0.5 +-0.0374901 0.0505918 0.0391881 0.728451 0.5 +-0.036484 0.0505609 0.038833 0.654762 0.5 +-0.0354915 0.050532 0.0385401 0.593052 0.5 +-0.0344903 0.0505305 0.0383369 0.691623 0.5 +-0.0334893 0.050539 0.0382432 0.593249 0.5 +-0.032509 0.0506603 0.0384213 0.451433 0.5 +0.0299711 0.119398 0.020753 0.594362 0.5 +0.0306772 0.118704 0.0210209 0.593679 0.5 +0.0313679 0.117954 0.0212794 0.593086 0.5 +0.0320331 0.117177 0.0215305 0.590358 0.5 +0.0326927 0.116394 0.0217802 0.608973 0.5 +-0.0264808 0.0509031 0.0429156 0.155274 0.5 +-0.0254692 0.0509386 0.0434079 0.16159 0.5 +-0.0244966 0.0509689 0.0431921 0.401781 0.5 +-0.0234839 0.0509996 0.0435588 0.358278 0.5 +-0.0224071 0.0510134 0.0440995 0.361366 0.5 +-0.02141 0.0511007 0.0448554 0.42442 0.5 +-0.0205114 0.0512056 0.0456176 0.402008 0.5 +-0.0195075 0.0512747 0.046374 0.410968 0.451007 +-0.0184955 0.0513594 0.0472431 0.457402 0.5 +-0.0174765 0.0514437 0.047967 0.473179 0.5 +-0.0164815 0.0515035 0.0485835 0.476891 0.5 +-0.015494 0.0515277 0.0489706 0.364897 0.5 +-0.0144633 0.051615 0.0495133 0.398285 0.5 +-0.0134374 0.0516868 0.0502089 0.487072 0.432696 +-0.0124795 0.0517352 0.0508543 0.622758 0.5 +-0.0115065 0.0517326 0.051159 0.649165 0.5 +-0.010498 0.0517545 0.0512545 0.676962 0.5 +-0.00949945 0.0517772 0.0514996 0.713344 0.5 +-0.00849798 0.051815 0.0518583 0.719934 0.5 +-0.0074916 0.0518487 0.0520774 0.710682 0.5 +-0.0065051 0.0518538 0.05236 0.705017 0.448548 +-0.00548466 0.051944 0.0528973 0.58205 0.5 +-0.00451507 0.0519264 0.0531932 0.568403 0.478519 +-0.0034931 0.0519852 0.0535284 0.625813 0.5 +-0.00249774 0.0520145 0.0539036 0.594613 0.5 +-0.00150003 0.0520299 0.0541649 0.558823 0.5 +-0.000496894 0.0520342 0.0541515 0.504065 0.5 +0.000500504 0.0519731 0.0534094 0.672591 0.5 +0.00149895 0.0519342 0.0529111 0.767982 0.5 +0.00250445 0.0519435 0.0530423 0.626241 0.470992 +0.00349695 0.0519735 0.0532512 0.63804 0.5 +0.00449781 0.0519669 0.0532713 0.640811 0.5 +0.00550647 0.0519309 0.0530702 0.60892 0.5 +0.00652038 0.0518639 0.0525018 0.523055 0.449685 +0.00750786 0.0518308 0.0519822 0.558997 0.451517 +0.00848446 0.0518256 0.0516867 0.680592 0.5 +0.00950265 0.0517655 0.0513753 0.51429 0.482771 +-0.0734977 0.128836 0.0522844 0.565207 0.5 +-0.0725184 0.128806 0.0519752 0.543532 0.5 +0.042865 0.0958458 -0.000810373 0.576953 0.480183 +0.0445611 0.0931651 0.0181595 0.529697 0.467417 +0.0444356 0.0931566 0.0191609 0.522961 0.5 +-0.0754919 0.128859 0.0530266 0.498365 0.5 +0.00647696 0.11413 0.0402504 0.514579 0.417286 +-0.0765071 0.126009 0.0528667 0.685814 0.5 +-0.0764996 0.128859 0.0532215 0.618076 0.5 +-0.0849208 0.114388 0.046865 0.438131 0.5 +-0.0918951 0.117319 0.00831437 0.325678 0.5 +-0.0735209 0.134443 0.0506533 0.5919 0.470629 +-0.0745084 0.134461 0.0510337 0.603833 0.5 +-0.0754981 0.13448 0.0513067 0.591228 0.5 +-0.0764995 0.134472 0.0515165 0.595096 0.5 +0.0335187 0.113275 -0.00203325 0.534651 0.5 +-0.0922478 0.11733 0.00930597 0.340466 0.445747 +0.0044777 0.112767 0.0412512 0.531313 0.456953 +-0.00448954 0.122402 0.0358368 0.591545 0.5 +-0.00442605 0.128738 0.0268092 0.472631 0.5 +0.0161585 0.128774 0.0170439 0.840212 0.5 +0.0427229 0.10007 0.00318201 0.538519 0.5 +0.0156241 0.128368 0.0211329 0.396949 0.405133 +0.0335218 0.0499029 0.0322045 0.67356 0.5 +0.0345233 0.0498189 0.0314944 0.804771 0.5 +0.0355057 0.0498307 0.031489 0.818671 0.5 +0.0364957 0.049851 0.0316154 0.760729 0.5 +0.0374928 0.0498822 0.031843 0.590014 0.5 +0.0384903 0.0499056 0.0320993 0.61253 0.5 +0.0394879 0.0499122 0.0322705 0.643013 0.5 +0.0404983 0.0499404 0.0324741 0.666211 0.5 +0.0415062 0.0499285 0.0325086 0.665052 0.5 +0.0425051 0.049941 0.0324381 0.6368 0.5 +-0.0704857 0.116111 0.0520944 0.537694 0.5 +0.0232634 0.124781 0.0210949 0.398117 0.452037 +0.0208043 0.12624 0.020186 0.489671 0.43554 +-0.00332845 0.128773 0.0271941 0.353348 0.382641 +0.040053 0.107027 0.0101639 0.709071 0.5 +-0.0794099 0.141428 0.0463829 0.386868 0.449839 +0.0220922 0.12286 0.0278182 0.481654 0.441814 +-0.015772 0.160715 -0.00958045 0.202865 0.5 +-0.0150623 0.160937 -0.0114195 0.216337 0.5 +-0.0775565 0.148654 -0.00488618 0.403345 0.5 +-0.0875531 0.12123 -0.000692815 0.677311 0.5 +-0.025877 0.125557 0.00449924 0.734154 0.5 +0.0220166 0.125337 0.0220596 0.508966 0.324815 +-0.06497 0.154244 -0.00563561 0.682004 0.5 +0.012166 0.127075 0.0284779 0.479299 0.429147 +-0.0151406 0.126373 0.0259068 0.35115 0.350977 +-0.0805255 0.14991 0.0359696 0.394581 0.5 +-0.0405676 0.171048 0.000226569 0.430746 0.5 +-0.0417025 0.170926 -0.000183345 0.357528 0.465271 +-0.0719231 0.155792 0.0253493 0.477426 0.437615 +-0.0410851 0.123071 0.0255089 0.514489 0.5 +-0.0704025 0.156596 -0.000355665 0.550101 0.5 +0.0158791 0.123986 0.0298499 0.52054 0.455285 +-0.0494029 0.0516267 0.0356191 0.421285 0.5 +-0.0484712 0.0517504 0.0365675 0.540535 0.5 +-0.0474808 0.0518309 0.037336 0.508239 0.5 +-0.0465141 0.0518831 0.0377757 0.565654 0.449518 +-0.045508 0.0519257 0.0382686 0.589633 0.5 +-0.0444939 0.0519693 0.038747 0.505691 0.5 +-0.0435203 0.0519967 0.0390799 0.524311 0.5 +-0.0425091 0.0520201 0.0393163 0.630519 0.5 +-0.0415114 0.0520187 0.0393909 0.65372 0.5 +-0.0404977 0.0520197 0.0394004 0.684014 0.5 +-0.0394885 0.0520168 0.0393574 0.684715 0.5 +-0.0384859 0.0520062 0.0392089 0.657625 0.46098 +-0.0374857 0.0519831 0.0389557 0.566216 0.473414 +-0.0364795 0.0519621 0.0386972 0.625383 0.5 +-0.035474 0.0519266 0.0383228 0.604076 0.370262 +-0.0344826 0.0519106 0.0380623 0.547854 0.5 +-0.0334582 0.0518969 0.0377238 0.485449 0.320443 +-0.0324964 0.0518418 0.0373712 0.490483 0.5 +-0.031463 0.0519033 0.0373773 0.387832 0.5 +-0.0643667 0.159406 -0.0155654 0.468372 0.5 +-0.0637704 0.158563 -0.0153492 0.421695 0.396619 +-0.0362227 0.121033 0.0288309 0.510424 0.470651 +-0.0353536 0.12061 0.029103 0.555767 0.5 +-0.0345743 0.120058 0.0294165 0.568849 0.348087 +-0.0254497 0.052221 0.0403383 0.348943 0.5 +-0.0244489 0.052187 0.0413714 0.290294 0.5 +-0.0234293 0.0522884 0.0423691 0.372844 0.5 +-0.0224569 0.0524128 0.0435307 0.482278 0.5 +-0.0214965 0.0525299 0.044709 0.554588 0.5 +-0.0204809 0.0526524 0.0459576 0.54592 0.5 +-0.0194396 0.0527865 0.0471813 0.553615 0.5 +-0.0184644 0.0528818 0.0482087 0.540625 0.5 +-0.0174692 0.0529782 0.0491698 0.462001 0.5 +-0.0164825 0.0530314 0.0497852 0.498664 0.5 +-0.0154865 0.0530505 0.0500296 0.553324 0.5 +-0.0144826 0.0530653 0.0501401 0.608074 0.5 +-0.0134843 0.053101 0.0504987 0.652655 0.5 +-0.0124761 0.0531764 0.0512005 0.574862 0.5 +-0.0114906 0.0532044 0.051601 0.595599 0.482594 +-0.01051 0.0531978 0.0517663 0.750543 0.5 +-0.00949468 0.0532459 0.0520833 0.758501 0.5 +-0.00849647 0.0532799 0.0524507 0.760264 0.5 +-0.00749418 0.0533074 0.0526841 0.748532 0.5 +-0.00650042 0.0533369 0.0530605 0.610099 0.5 +-0.0054947 0.0533903 0.0535249 0.604602 0.5 +-0.00451061 0.0534011 0.0538125 0.582524 0.485665 +-0.00349166 0.0534503 0.0541192 0.570547 0.48477 +-0.00249263 0.0534855 0.0544759 0.544189 0.5 +-0.00149823 0.0535022 0.0547476 0.614107 0.5 +-0.000498287 0.0535066 0.0547347 0.558103 0.5 +0.000497149 0.0534577 0.0541163 0.58184 0.32162 +0.00150153 0.0534013 0.0535077 0.651531 0.456257 +0.00251869 0.05336 0.0534808 0.678995 0.5 +0.00350403 0.0533854 0.0535456 0.672773 0.5 +0.00450086 0.0533884 0.0535142 0.682456 0.5 +0.00550371 0.0533623 0.0533002 0.65769 0.5 +0.0065027 0.0533154 0.0528127 0.653877 0.440846 +0.00750328 0.0532576 0.0522142 0.691184 0.436713 +0.008486 0.0532759 0.0521458 0.70637 0.5 +0.00951284 0.0532319 0.0521285 0.619862 0.5 +0.0105195 0.053345 0.0519069 0.551383 0.5 +-0.0124978 0.122374 0.0339942 0.446842 0.5 +0.0366798 0.105376 -0.00582172 0.471972 0.45594 +-0.0745126 0.131657 0.0521168 0.561065 0.458423 +-0.0621605 0.170953 -0.0526019 0.511023 0.5 +-0.0564439 0.115317 0.036137 0.634635 0.5 +0.00548112 0.11414 0.0405028 0.51909 0.483992 +0.00448236 0.11415 0.0407558 0.636936 0.398543 +-0.0435006 0.115257 0.0335166 0.600577 0.5 +-0.0785029 0.128864 0.0532728 0.667357 0.5 +-0.079504 0.128859 0.053141 0.6358 0.5 +0.0366571 0.0968397 -0.0108144 0.731575 0.5 +-0.0262668 0.179961 -0.0169689 0.450584 0.5 +-0.0225205 0.114038 0.037332 0.442893 0.473315 +-0.0636978 0.164648 -0.0286005 0.685413 0.5 +-0.0774938 0.134462 0.0515018 0.599327 0.451108 +-0.0784776 0.134439 0.0514602 0.594375 0.46101 +-0.0794917 0.134473 0.0511764 0.454691 0.5 +-0.0804551 0.134426 0.050865 0.537965 0.5 +-9.29522e-05 0.131467 0.0096514 0.759095 0.5 +-0.0809318 0.142082 0.0447817 0.392929 0.5 +0.0288769 0.120252 0.0217702 0.574998 0.5 +-0.0298175 0.125729 0.00888885 0.864514 0.5 +0.0398988 0.106999 0.0131638 0.708381 0.5 +0.0345014 0.0513521 0.0321623 0.70238 0.5 +0.0355423 0.0512597 0.0315836 0.806353 0.386778 +0.0365033 0.0512847 0.031619 0.741222 0.5 +0.037495 0.0513025 0.031739 0.544479 0.5 +0.0384886 0.0513309 0.0319844 0.545433 0.442196 +0.0394872 0.0513548 0.03224 0.560009 0.444583 +0.0404949 0.0513767 0.0324659 0.611752 0.450303 +0.0414995 0.0513848 0.032599 0.631695 0.5 +0.0425053 0.0513815 0.0326154 0.652464 0.5 +0.0435142 0.0513638 0.0325031 0.645491 0.5 +-0.0265155 0.115287 0.0336658 0.48442 0.5 +-0.0586545 0.152137 0.0330321 0.416823 0.5 +-0.0834511 0.149763 0.0335021 0.359365 0.5 +-0.0655672 0.149686 0.0379738 0.531875 0.463401 +-0.0644942 0.149793 0.0375095 0.534265 0.5 +-0.0634854 0.149796 0.0371525 0.536946 0.5 +0.0284626 0.102127 0.0395666 0.691947 0.5 +0.0350916 0.102085 0.0333486 0.716199 0.5 +0.0314548 0.113206 0.0298812 0.689434 0.5 +0.0308728 0.114122 0.0296728 0.662303 0.434003 +0.0426395 0.101487 0.00716583 0.570141 0.5 +-0.0318889 0.124978 0.0199371 0.428244 0.5 +0.0398408 0.105612 0.0201716 0.67746 0.5 +-0.0688748 0.159133 -0.00709894 0.484239 0.5 +0.01303 0.126665 0.0287751 0.50727 0.351505 +-0.0294715 0.117536 0.0312989 0.525408 0.5 +-0.0448162 0.12956 0.0195798 0.459431 0.45803 +0.0138368 0.126165 0.029064 0.541828 0.5 +0.0138704 0.12508 0.0305218 0.618389 0.5 +-0.0729271 0.151083 0.037025 0.357602 0.5 +-0.0614531 0.154118 0.0305097 0.93076 0.5 +-0.0733037 0.155556 0.00591793 0.638257 0.5 +-0.0710688 0.156192 0.0139947 0.771742 0.5 +-0.048428 0.0531039 0.036022 0.58186 0.5 +-0.0475344 0.05323 0.0369443 0.572487 0.5 +-0.0464945 0.0532702 0.037612 0.571784 0.5 +-0.0455151 0.0533187 0.0381544 0.587625 0.5 +-0.0445186 0.0533636 0.0386768 0.501437 0.5 +-0.0435006 0.0534118 0.0391466 0.511744 0.5 +-0.042519 0.0534194 0.039352 0.62845 0.5 +-0.0415063 0.0534301 0.0394734 0.673582 0.5 +-0.0404974 0.0534278 0.0394751 0.70876 0.5 +-0.0394917 0.0534182 0.0393765 0.706069 0.449129 +-0.0384745 0.0533908 0.0391471 0.657134 0.5 +-0.03749 0.0533987 0.0390423 0.588582 0.5 +-0.036476 0.0533606 0.0387027 0.531033 0.5 +-0.0354965 0.0533413 0.0383699 0.664956 0.386379 +-0.034498 0.0533048 0.037996 0.639796 0.5 +-0.0334673 0.0532523 0.0375728 0.586737 0.372404 +-0.0324736 0.0532348 0.0372028 0.500342 0.5 +-0.0314741 0.053189 0.0369367 0.423307 0.284677 +-0.0304869 0.0532061 0.0367531 0.421981 0.5 +-0.0600274 0.155812 0.00342033 0.133166 0.5 +-0.0649586 0.160381 -0.0157887 0.563606 0.384724 +-0.0632603 0.157387 -0.0151607 0.422396 0.5 +-0.0883817 0.123968 0.00128346 0.488592 0.357377 +-0.0676833 0.155656 0.026832 0.885987 0.5 +-0.0245117 0.0536384 0.0409132 0.373816 0.5 +-0.0234219 0.0537493 0.0424994 0.458334 0.5 +-0.0224181 0.05387 0.0440179 0.570735 0.5 +-0.021445 0.0539977 0.0453008 0.660553 0.5 +-0.020414 0.0541289 0.0465389 0.666046 0.5 +-0.0194474 0.054231 0.0477027 0.556691 0.5 +-0.0184804 0.0543192 0.0487134 0.539764 0.5 +-0.0174561 0.0544373 0.0497557 0.481338 0.5 +-0.0164926 0.0544756 0.0504072 0.506591 0.5 +-0.0154767 0.0545272 0.0507241 0.629858 0.5 +-0.0145052 0.0544906 0.0506759 0.695609 0.5 +-0.0134767 0.0545379 0.0508338 0.718739 0.5 +-0.0124579 0.0545987 0.0514221 0.734293 0.432237 +-0.0114754 0.0546403 0.0519269 0.620033 0.481998 +-0.0105014 0.0546468 0.0522278 0.635563 0.5 +-0.00949649 0.0546877 0.0525704 0.79198 0.5 +-0.00849625 0.0547108 0.0528122 0.784046 0.5 +-0.00749363 0.0547355 0.05304 0.775641 0.5 +-0.00650329 0.0547609 0.0534371 0.619296 0.5 +-0.00550412 0.0547964 0.0538028 0.748019 0.5 +-0.00449379 0.0548276 0.0540049 0.724866 0.5 +-0.00348783 0.0548509 0.0542207 0.715069 0.5 +-0.00248496 0.0548872 0.0545581 0.707158 0.5 +-0.00149759 0.0549023 0.0548542 0.564589 0.395425 +-0.000496498 0.0549075 0.0548747 0.623051 0.5 +0.000535895 0.0548656 0.0545076 0.537046 0.31889 +0.00151752 0.0547965 0.0538164 0.656408 0.446148 +0.00250208 0.0547919 0.0536548 0.701208 0.5 +0.00350625 0.0547769 0.0535608 0.683289 0.5 +0.00450584 0.0547654 0.053433 0.687704 0.5 +0.0054972 0.0547598 0.0532635 0.665049 0.5 +0.00650352 0.0547197 0.0529464 0.684234 0.346429 +0.00749482 0.0546914 0.0525351 0.715527 0.5 +0.00850697 0.0546686 0.0524774 0.694703 0.5 +0.00950273 0.0546854 0.0525766 0.636588 0.5 +0.0105088 0.0546576 0.0523588 0.557168 0.5 +-0.0805181 0.12599 0.0525745 0.665202 0.5 +-0.0795103 0.126002 0.0528073 0.668617 0.5 +-0.0785092 0.126003 0.0529555 0.670821 0.5 +-0.0775133 0.126 0.0528602 0.675486 0.5 +-0.0494959 0.115246 0.0337414 0.643409 0.5 +-0.0574796 0.115365 0.0367006 0.652233 0.5 +0.00348793 0.114165 0.0408953 0.649034 0.445413 +-0.0445033 0.11527 0.0334071 0.568902 0.5 +-0.0425002 0.115266 0.0336474 0.635578 0.5 +-0.0335104 0.175675 -0.00315318 0.316869 0.5 +-0.0805024 0.128853 0.052889 0.518259 0.5 +-0.0814773 0.128835 0.0524787 0.497298 0.5 +0.0351546 0.112861 0.0227039 0.633037 0.5 +-0.0366664 0.175138 -0.00407486 0.287054 0.464834 +-0.0620073 0.155313 -0.0175819 0.532648 0.5 +-0.00957953 0.177197 -0.0268263 0.400699 0.458536 +0.037597 0.0883595 -0.0147642 0.702331 0.5 +0.0442559 0.0973532 0.00916034 0.575949 0.5 +0.0386307 0.106935 0.00116239 0.536822 0.5 +-0.0776201 0.171284 -0.03689 0.270922 0.5 +-0.0304741 0.177281 -0.004356 0.32717 0.5 +-0.089623 0.0983355 0.0134109 0.574286 0.477791 +0.0014962 0.114186 0.0411808 0.602374 0.390506 +-0.0745038 0.141441 0.0470955 0.651766 0.5 +0.0355309 0.0527205 0.03199 0.682683 0.5 +0.0365187 0.0526805 0.0315096 0.753833 0.5 +0.0375018 0.0527008 0.0316063 0.677187 0.5 +0.038497 0.0527286 0.031838 0.606334 0.5 +0.0394926 0.052754 0.032086 0.534796 0.5 +0.0404835 0.052774 0.0322642 0.586296 0.5 +0.041497 0.0527902 0.0324777 0.585734 0.5 +0.0424986 0.0527982 0.0326152 0.632258 0.5 +0.0435095 0.0527832 0.0325495 0.640346 0.5 +0.0444807 0.0526489 0.0324592 0.629309 0.5 +0.0175085 0.114012 0.0373101 0.551706 0.5 +0.0254796 0.122858 0.0219249 0.498278 0.5 +0.0243371 0.123621 0.0229269 0.534461 0.5 +-0.0282153 0.125116 0.00364014 0.810878 0.5 +-0.00263978 0.131127 0.015882 0.647167 0.5 +-0.0624811 0.149792 0.0367836 0.534358 0.5 +-0.0614742 0.149784 0.0364078 0.44616 0.5 +-0.087948 0.102288 0.00840013 0.477822 0.5 +-0.0454844 0.1652 0.00481603 0.464346 0.36111 +0.018594 0.125548 0.0250901 0.705354 0.5 +-0.0745647 0.162191 -0.0132518 0.275427 0.5 +-0.0200308 0.127492 0.00809368 0.648632 0.5 +-0.0719688 0.147362 0.0419058 0.548603 0.5 +-0.0713898 0.160567 -0.00801414 0.352134 0.455975 +-0.0663516 0.155012 0.0287678 0.864791 0.5 +-0.0684694 0.153743 0.0324784 0.509026 0.5 +0.0145581 0.125506 0.0293407 0.489036 0.5 +-0.00661995 0.130084 0.0216557 0.484707 0.416975 +-0.062494 0.155703 0.00979223 0.69444 0.5 +-0.0653695 0.151233 0.0366147 0.434522 0.5 +-0.0745121 0.155307 0.0054919 0.57436 0.5 +-0.0224768 0.123487 0.0248086 0.391267 0.350387 +-0.0711203 0.163576 -0.0137477 0.441709 0.453408 +-0.0153636 0.128543 0.00690549 0.692939 0.5 +-0.0574953 0.153709 0.0290191 0.402162 0.5 +-0.0238083 0.125586 0.00234805 0.713488 0.5 +-0.0445292 0.0547767 0.038815 0.482763 0.468025 +-0.0435028 0.0548283 0.0392794 0.620176 0.5 +-0.0425065 0.0548487 0.0395533 0.64507 0.5 +-0.0415045 0.0548576 0.0396938 0.700561 0.5 +-0.0404982 0.0548597 0.0396645 0.73249 0.5 +-0.0394936 0.0548399 0.0395943 0.727157 0.5 +-0.0384864 0.0548303 0.0394681 0.680224 0.5 +-0.03748 0.0548048 0.0392179 0.627349 0.5 +-0.0364861 0.0547872 0.0389196 0.577882 0.5 +-0.0354687 0.054727 0.0384538 0.550401 0.412456 +-0.0344916 0.0547205 0.0381399 0.680766 0.5 +-0.0334777 0.0546734 0.0376709 0.640434 0.5 +-0.0324718 0.0546382 0.0373194 0.558436 0.5 +-0.0314811 0.0546225 0.0370229 0.498235 0.369306 +-0.0304966 0.0545819 0.0366047 0.495087 0.5 +-0.029505 0.0545565 0.0362962 0.476404 0.5 +-0.0285043 0.0545632 0.0363758 0.733665 0.5 +-0.0107039 0.129221 0.0216334 0.750122 0.5 +-0.00955325 0.129382 0.0220461 0.734012 0.5 +-0.027617 0.125471 0.0155889 0.393422 0.5 +-0.0725432 0.15415 0.0310449 0.456773 0.444707 +-0.0786632 0.155487 0.0200952 0.505065 0.5 +-0.079327 0.169353 -0.0390258 0.405226 0.426366 +-0.0768438 0.0975378 -0.0115852 0.528684 0.5 +-0.012834 0.128656 0.00349339 0.705329 0.5 +-0.00196689 0.131088 0.00752604 0.758967 0.5 +0.00256341 0.131601 0.00920655 0.772846 0.5 +0.0134351 0.129972 0.01319 0.608127 0.5 +-0.016529 0.0558872 0.0508401 0.556055 0.5 +-0.0154895 0.0559453 0.0511175 0.652683 0.5 +-0.0144925 0.0559441 0.0511232 0.727766 0.5 +-0.0134794 0.0559661 0.0512091 0.750068 0.5 +-0.0124902 0.0560062 0.0517339 0.766998 0.423013 +-0.0114896 0.0560578 0.0523304 0.781548 0.413019 +-0.0105297 0.0560622 0.0527517 0.656659 0.482714 +-0.00947974 0.0561444 0.0530127 0.796126 0.5 +-0.00850551 0.0561268 0.0532043 0.785517 0.5 +-0.00750736 0.0561433 0.0534652 0.775281 0.5 +-0.00650086 0.0561902 0.0537938 0.793154 0.5 +-0.00550353 0.0561986 0.0539335 0.774384 0.5 +-0.00450247 0.056202 0.0539356 0.758683 0.5 +-0.00349598 0.0562185 0.05401 0.743066 0.5 +-0.00250456 0.0562401 0.0542942 0.716993 0.5 +-0.00149512 0.0562755 0.0546084 0.658183 0.5 +-0.000496913 0.056284 0.0547664 0.689717 0.5 +0.000502788 0.056275 0.0546165 0.704357 0.5 +0.00150976 0.0562224 0.0541662 0.680534 0.5 +0.00252507 0.0561606 0.0537161 0.69423 0.434389 +0.00351715 0.0561463 0.0534882 0.68469 0.5 +0.00451269 0.0561377 0.0533474 0.690583 0.5 +0.00550694 0.0561304 0.0532033 0.689737 0.5 +0.00651257 0.056103 0.0529931 0.692645 0.5 +0.00750493 0.0561002 0.0528313 0.68609 0.5 +0.00850148 0.0561026 0.0528172 0.66553 0.5 +0.00951185 0.0560842 0.0527429 0.637791 0.5 +0.0104958 0.0560929 0.0526786 0.581387 0.5 +0.0045023 0.122399 0.0348631 0.629757 0.5 +0.00349789 0.122445 0.0347995 0.619211 0.365734 +0.0023439 0.122378 0.0350184 0.598492 0.437187 +0.0407559 0.0844033 -0.0107694 0.500391 0.430286 +0.0103725 0.130878 0.016344 0.791062 0.308926 +-0.0753594 0.113961 -0.00568407 0.493181 0.5 +-0.0335039 0.113859 0.0341437 0.617794 0.5 +0.00248459 0.114158 0.0410016 0.630752 0.5 +-0.037487 0.115255 0.0329307 0.672078 0.5 +-0.0815194 0.125984 0.0522053 0.553742 0.5 +-0.0037337 0.131051 0.015481 0.666985 0.5 +0.0452295 0.0931909 0.0101587 0.585026 0.425907 +0.00547548 0.112757 0.0410095 0.517897 0.408012 +0.0064659 0.11274 0.0407332 0.533473 0.5 +0.0228866 0.122341 0.0280976 0.49736 0.5 +0.0316544 0.117354 0.0228159 0.741485 0.5 +-0.0547075 0.153861 0.0184094 0.397554 0.5 +-0.0208042 0.125974 0.0209606 0.285434 0.5 +0.00417447 0.127894 0.028461 0.346178 0.47219 +-0.00381736 0.131135 0.0125816 0.727362 0.5 +0.0084546 0.131034 0.0184964 0.704965 0.332308 +-0.0290201 0.125445 0.00626167 0.827153 0.5 +-0.0205709 0.127392 0.00935219 0.617458 0.5 +-0.0275449 0.178709 -0.00674077 0.314225 0.461048 +-0.0784667 0.141403 0.0468168 0.48625 0.441708 +0.0365178 0.0541167 0.0317039 0.681281 0.5 +0.0375206 0.0540908 0.0314327 0.693806 0.438302 +0.0384994 0.0541178 0.0316123 0.612032 0.4505 +0.0394926 0.0541437 0.0318453 0.501502 0.46071 +0.0404914 0.0541681 0.032094 0.527461 0.464284 +0.0414903 0.0541829 0.0322405 0.572459 0.464975 +0.0424932 0.0541962 0.0323753 0.591094 0.450071 +0.0435018 0.0542009 0.0324922 0.63047 0.447523 +0.0445103 0.0541956 0.0324876 0.599745 0.5 +0.0455381 0.0540654 0.0323771 0.580328 0.456654 +-0.0764978 0.13864 0.0490601 0.588653 0.42756 +-0.0273424 0.0931435 -0.0275899 0.254473 0.5 +-0.0316129 0.119551 -0.0104429 0.656019 0.5 +-0.0474174 0.157905 0.00867917 0.534769 0.463306 +-0.0204551 0.0879984 0.0554627 0.449983 0.473992 +0.0197435 0.125962 0.0226458 0.361212 0.411531 +-0.0835371 0.151134 0.0310567 0.318494 0.5 +0.0391698 0.101249 -0.00580082 0.541467 0.5 +-0.0775506 0.172738 -0.0395384 0.237113 0.5 +0.0314823 0.114431 0.0284596 0.656356 0.5 +0.0289756 0.116666 0.0289439 0.643003 0.5 +-0.0609581 0.142927 -0.00458074 0.523823 0.5 +-0.0737585 0.160179 -0.00884095 0.281303 0.5 +-0.0175794 0.128153 0.00899134 0.649094 0.5 +-0.066041 0.156288 0.0201296 0.687157 0.5 +-0.0758021 0.154133 0.0299324 0.323875 0.45561 +-0.00771604 0.130016 0.0212618 0.484344 0.5 +-0.0613933 0.155777 0.0101812 0.630937 0.339611 +-0.0090472 0.129209 0.0236827 0.735708 0.5 +0.0270825 0.114018 -0.00875387 0.567922 0.385391 +-0.0365963 0.127614 0.0137714 0.718983 0.5 +-0.0165553 0.128252 0.0064647 0.682564 0.5 +0.00136992 0.128685 0.0274437 0.380861 0.413183 +-0.0213082 0.126358 0.00326486 0.71456 0.5 +-0.0706171 0.164859 -0.0164358 0.348996 0.5 +-0.044501 0.0562098 0.0390177 0.511245 0.5 +-0.0435207 0.0562403 0.0394546 0.540369 0.5 +-0.042508 0.0562794 0.0398023 0.558096 0.481996 +-0.041504 0.0562873 0.0399374 0.723266 0.5 +-0.0405006 0.0562797 0.0399754 0.744016 0.5 +-0.0394955 0.0562825 0.0399491 0.730856 0.5 +-0.0384935 0.0562767 0.0397971 0.687954 0.5 +-0.0374897 0.0562507 0.0395531 0.646744 0.5 +-0.0364959 0.0562316 0.0392716 0.617797 0.5 +-0.0354821 0.0561791 0.038801 0.578049 0.5 +-0.0344763 0.0561322 0.0383021 0.541394 0.437959 +-0.0334848 0.0561021 0.0379001 0.641295 0.5 +-0.0324882 0.0560654 0.0375153 0.644867 0.5 +-0.0314956 0.0560344 0.0371147 0.571263 0.5 +-0.0304896 0.0559845 0.0366491 0.526756 0.5 +-0.0294988 0.0559628 0.0364214 0.548273 0.5 +-0.0285134 0.0559644 0.0364164 0.800426 0.5 +-0.0275116 0.0560234 0.0370088 0.803963 0.5 +-0.0247631 0.123128 0.0239793 0.379391 0.5 +0.0149217 0.127634 0.0251635 0.455703 0.5 +-0.0818191 0.154205 0.0234297 0.385494 0.444119 +-0.0942641 0.126921 0.0212556 0.588569 0.481269 +-0.0777677 0.0975799 -0.010556 0.497944 0.5 +-0.0115095 0.129073 0.00398865 0.702319 0.5 +-0.00311195 0.130927 0.00709886 0.743411 0.5 +0.00365619 0.131646 0.00960837 0.788217 0.5 +0.012555 0.130318 0.0128667 0.860518 0.5 +0.0195332 0.12729 0.0154357 0.624434 0.5 +-0.0165413 0.0573347 0.0511714 0.582531 0.465558 +-0.0154965 0.0573571 0.0513792 0.694345 0.5 +-0.0144744 0.0573903 0.0514423 0.734525 0.5 +-0.0135016 0.0573891 0.0517499 0.75174 0.43176 +-0.0363729 0.176071 -0.00683571 0.199648 0.251821 +-0.0115063 0.0575113 0.0530742 0.644883 0.5 +-0.0104794 0.0575747 0.0533869 0.65926 0.480612 +-0.00951316 0.0575536 0.0537045 0.789302 0.405177 +-0.00849376 0.0576353 0.0542501 0.77325 0.5 +-0.00749701 0.0576432 0.054379 0.768932 0.5 +-0.00649525 0.0576581 0.0543368 0.77423 0.5 +-0.0054972 0.0576157 0.054162 0.760765 0.5 +-0.00449169 0.0575673 0.0538908 0.767052 0.388508 +-0.00349897 0.0575855 0.053786 0.776635 0.5 +-0.0025152 0.0575969 0.0540026 0.784409 0.406468 +-0.00151732 0.0576213 0.0542293 0.74703 0.402276 +-0.000508059 0.0576316 0.0544767 0.753299 0.404396 +0.000501319 0.0576739 0.0545888 0.773554 0.5 +0.00150103 0.0576486 0.0543674 0.727662 0.5 +0.00250286 0.0576093 0.0540213 0.686212 0.5 +0.00351232 0.0575709 0.0538233 0.688393 0.5 +0.00450187 0.0575756 0.0536585 0.667952 0.5 +0.00550441 0.0575487 0.0534334 0.661786 0.5 +0.00650779 0.0575337 0.0533257 0.636038 0.5 +0.00751117 0.0575089 0.0530994 0.623949 0.5 +0.00850874 0.0575011 0.0529664 0.600507 0.5 +0.00952232 0.057476 0.0527668 0.583695 0.5 +0.0105117 0.057471 0.0526043 0.5591 0.5 +-0.0315128 0.115295 0.0334421 0.603313 0.5 +-0.0184879 0.122208 0.0309285 0.55532 0.5 +-0.0174938 0.122238 0.0311921 0.583946 0.5 +-0.0164768 0.122235 0.0319313 0.584175 0.5 +-0.0682947 0.162375 -0.0539731 0.38665 0.5 +-0.0241621 0.125878 0.0168174 0.29842 0.431342 +-0.0345055 0.113874 0.0339275 0.650428 0.5 +-0.0354987 0.113848 0.0338946 0.662164 0.5 +-0.0305056 0.115271 0.0335326 0.603031 0.5 +0.00550466 0.122397 0.0349805 0.6164 0.5 +0.0339681 0.114736 0.0222644 0.605488 0.5 +-0.0343294 0.175491 -0.0032043 0.286755 0.5 +-0.0642372 0.158555 -0.0140759 0.505978 0.5 +-0.0648774 0.159303 -0.0143091 0.485095 0.5 +-0.0194915 0.120861 0.0324568 0.426861 0.5 +-0.0915531 0.115336 0.039285 0.63351 0.5 +-0.0638143 0.15519 -0.0396115 0.519983 0.5 +0.040097 0.105566 0.00218117 0.530524 0.483164 +-0.0518485 0.147799 0.0174109 0.716684 0.5 +0.0259145 0.102099 0.0411479 0.693569 0.5 +-0.0374501 0.127748 0.0031441 0.880551 0.5 +-0.0174933 0.120917 0.0332266 0.470635 0.336572 +-0.0615165 0.15114 0.0355512 0.463154 0.5 +0.040798 0.105646 0.00916422 0.691405 0.5 +-0.0924012 0.125564 0.030262 0.63493 0.5 +-0.0785035 0.127443 0.053282 0.686091 0.5 +0.0375436 0.055493 0.03143 0.656253 0.5 +0.0385307 0.0554981 0.0313684 0.628847 0.5 +0.0395 0.055533 0.0316092 0.793205 0.5 +0.0404941 0.0555582 0.0318463 0.594277 0.5 +0.041496 0.0555737 0.0320634 0.513362 0.5 +0.0424902 0.0555855 0.0321183 0.548707 0.5 +0.0434964 0.0555926 0.0322399 0.577847 0.5 +0.0445032 0.0555996 0.0323503 0.576429 0.5 +0.0455086 0.055594 0.0323303 0.578635 0.5 +0.0465727 0.0554592 0.0320923 0.673717 0.46891 +-0.0774982 0.133088 0.0521596 0.602948 0.5 +-0.0784904 0.133065 0.0521095 0.590653 0.5 +-0.0794975 0.133078 0.0519067 0.465659 0.5 +-0.0775459 0.0688051 0.0117853 0.703257 0.5 +-0.0756208 0.166729 -0.0233779 0.247329 0.293283 +-0.0383911 0.127983 0.00280515 0.877117 0.5 +0.0188647 0.126347 0.0223312 0.455245 0.407026 +0.00946799 0.112678 0.0395888 0.635041 0.5 +0.0424151 0.101486 0.0141591 0.706519 0.5 +-0.00945917 0.175708 -0.0257473 0.379771 0.5 +0.0381693 0.109765 0.0141664 0.716145 0.5 +-0.0225647 0.184728 -0.0122995 0.186313 0.403961 +-0.0750934 0.159541 -0.00936327 0.326151 0.5 +-0.0429479 0.170625 -0.000616016 0.324546 0.45085 +-0.00717727 0.0999816 0.0485274 0.395736 0.5 +-0.074389 0.0874223 0.0399149 0.650646 0.5 +-0.0535827 0.0550746 0.0114399 0.270787 0.5 +-0.00712049 0.126279 0.0302479 0.359142 0.5 +-0.0665222 0.156255 0.0214077 0.672998 0.5 +-0.00239285 0.100006 0.0487279 0.292669 0.5 +-0.060198 0.152175 0.0339452 0.402892 0.472309 +-0.0178682 0.127784 0.00598386 0.698832 0.5 +0.00609443 0.127443 0.0291456 0.346862 0.399528 +-0.0198477 0.126879 0.00378288 0.705203 0.5 +-0.0215304 0.127346 0.0119061 0.534695 0.5 +-0.0805747 0.154604 0.0238516 0.292051 0.4047 +-0.0435068 0.0576714 0.0396679 0.558157 0.5 +-0.0425042 0.0577064 0.0400486 0.588924 0.5 +-0.0415058 0.0577139 0.0401965 0.739606 0.5 +-0.040496 0.0577326 0.0402811 0.755837 0.5 +-0.0394971 0.057712 0.040203 0.733162 0.5 +-0.0384946 0.0577019 0.0400515 0.679472 0.5 +-0.0374871 0.0576725 0.0398228 0.644348 0.5 +-0.0364968 0.0576627 0.0395237 0.623271 0.5 +-0.0354902 0.0576195 0.0391492 0.586272 0.448514 +-0.0344815 0.0575696 0.0386716 0.552154 0.5 +-0.0334964 0.0575473 0.0382542 0.539729 0.5 +-0.0325132 0.0575193 0.0378292 0.656249 0.449594 +-0.0314915 0.057461 0.0373842 0.601315 0.5 +-0.0304883 0.0574252 0.0370157 0.577268 0.5 +-0.0294978 0.0574079 0.0367222 0.573617 0.5 +-0.0285008 0.0573948 0.0366096 0.859861 0.5 +-0.0275166 0.057436 0.037149 0.900038 0.5 +-0.0231678 0.124994 -0.000333927 0.782181 0.5 +-0.0242322 0.124794 -0.000701199 0.727949 0.5 +-0.0308709 0.178515 -0.0130008 0.371348 0.5 +-0.0786212 0.0976351 -0.0095679 0.506544 0.5 +-0.0102634 0.129467 0.00444971 0.722585 0.5 +-0.00431736 0.130694 0.00665461 0.744875 0.5 +0.0047441 0.131688 0.0100125 0.805054 0.5 +0.0116725 0.130674 0.0125466 0.862683 0.5 +0.0203982 0.126887 0.0157559 0.465741 0.450318 +-0.0174739 0.0587291 0.0509898 0.59576 0.471696 +-0.0164996 0.0587643 0.0515064 0.597947 0.5 +-0.0154906 0.0587868 0.0517337 0.609312 0.479377 +-0.0145087 0.0587885 0.0518852 0.743754 0.5 +-0.013551 0.0588296 0.0525443 0.623538 0.428768 +-0.0125152 0.0589286 0.0534547 0.644773 0.5 +-0.0114781 0.0589986 0.0537512 0.692324 0.467739 +-0.0105137 0.0589924 0.0541839 0.673497 0.410953 +-0.00950572 0.0590791 0.0548422 0.645069 0.478357 +-0.0084928 0.0591086 0.0550857 0.778631 0.5 +-0.00750142 0.0590729 0.0550185 0.786634 0.5 +-0.00649422 0.0590504 0.0549316 0.779679 0.5 +-0.00549453 0.0590678 0.0548923 0.736729 0.5 +-0.00449702 0.0590031 0.0543234 0.793812 0.5 +-0.0035043 0.0589584 0.0540181 0.794334 0.5 +-0.00249479 0.0590139 0.0541301 0.776353 0.5 +-0.00150748 0.059016 0.0544507 0.768563 0.5 +-0.000499764 0.0590718 0.0548831 0.759016 0.5 +0.000501847 0.0590908 0.0549783 0.768603 0.5 +0.00150053 0.0591133 0.0550768 0.74677 0.5 +0.00250252 0.0590979 0.0551087 0.643912 0.5 +0.00350505 0.0590839 0.0549927 0.605694 0.5 +0.00449835 0.0590783 0.0547231 0.592566 0.5 +0.00548498 0.0590856 0.0545593 0.698716 0.5 +0.00649387 0.0590149 0.0539921 0.739002 0.5 +0.00749975 0.0589567 0.0535286 0.567602 0.481595 +0.0085002 0.0589241 0.0531764 0.463323 0.5 +0.00964614 0.0589005 0.0527021 0.547321 0.477909 +0.0106562 0.0589179 0.0524466 0.536229 0.446134 +-0.0124881 0.120998 0.0354929 0.450936 0.5 +-0.0134923 0.120989 0.0351213 0.436127 0.5 +-0.0144851 0.120961 0.0347298 0.40788 0.5 +-0.0155011 0.120965 0.0341268 0.522467 0.5 +-0.0165005 0.120964 0.0336371 0.558479 0.312743 +-0.0694864 0.116115 0.0518347 0.459388 0.5 +-0.0364913 0.113889 0.0338295 0.652364 0.5 +-0.0374809 0.113893 0.0340704 0.667428 0.417365 +-0.0524335 0.115217 0.0341034 0.677092 0.438456 +-0.0194949 0.122198 0.0303074 0.469418 0.5 +0.00650251 0.122426 0.0350167 0.579098 0.5 +0.00749947 0.122404 0.035106 0.590276 0.5 +0.00849573 0.122392 0.0350922 0.607246 0.5 +-0.014506 0.114132 0.0394731 0.569175 0.5 +0.0335837 0.114911 0.0235455 0.765492 0.5 +-0.0353742 0.125928 -0.00196324 0.629252 0.48251 +-0.0400541 0.128036 0.0139949 0.599272 0.391835 +-0.0661021 0.155727 0.025928 0.920722 0.5 +-0.00158005 0.131357 0.0134024 0.712773 0.5 +0.00547063 0.131454 0.017409 0.692956 0.5 +-0.026736 0.125755 0.00710307 0.732482 0.5 +-0.0106209 0.130105 0.0129711 0.631874 0.5 +-0.0118194 0.129824 0.0125318 0.633161 0.5 +0.0395657 0.0998694 -0.00580754 0.552621 0.444663 +0.0103588 0.130588 0.0191927 0.514037 0.5 +-0.0354216 0.17545 -0.00362892 0.335701 0.5 +-0.0374813 0.169748 0.00157136 0.376782 0.5 +0.038562 0.0568882 0.0311978 0.49391 0.5 +0.0395203 0.0569025 0.0311403 0.859939 0.5 +0.040497 0.0569389 0.0314027 0.770121 0.5 +0.0414852 0.0569681 0.0316528 0.783059 0.5 +0.0424943 0.0569701 0.0318321 0.502329 0.467916 +0.0434926 0.056984 0.0319757 0.529079 0.467481 +0.0444988 0.0569914 0.0320977 0.558274 0.467151 +0.0455074 0.0569933 0.0321208 0.560564 0.5 +0.0465619 0.0568462 0.0320779 0.537442 0.5 +0.0475192 0.0568404 0.0316921 0.379978 0.477232 +0.0443161 0.095966 0.0141619 0.554026 0.5 +0.0444938 0.0959562 0.00517859 0.567858 0.45203 +-0.0804891 0.133061 0.0515278 0.547391 0.5 +-0.0814521 0.13302 0.0511119 0.534093 0.5 +-0.0795217 0.123111 0.0512585 0.678884 0.5 +-0.0860777 0.110355 0.00735249 0.304511 0.3924 +0.0394644 0.107011 0.0181712 0.710106 0.5 +-0.0726003 0.145757 -0.0168539 0.130446 0.5 +-0.0620057 0.153738 -0.0265835 0.797276 0.5 +-0.0744939 0.127436 0.052791 0.598326 0.5 +-0.0214511 0.184864 -0.013038 0.269383 0.417486 +0.0145889 0.124413 0.0307966 0.544768 0.413456 +-0.00442413 0.130145 0.0224484 0.835842 0.5 +-0.0795255 0.0953936 0.0349279 0.629357 0.5 +-0.0768234 0.0927696 0.0379671 0.697967 0.5 +-0.0284025 0.119846 0.0286714 0.345323 0.386314 +-0.00815712 0.126302 0.0298556 0.348364 0.5 +-0.0545817 0.152467 0.0257328 0.49489 0.5 +-0.0712761 0.153449 0.0330143 0.357988 0.438467 +-0.0610187 0.152669 0.0336579 0.343708 0.473835 +-0.0190623 0.127503 0.00554509 0.703137 0.5 +-0.0701097 0.156012 0.00122102 0.60267 0.39516 +-0.0225598 0.125982 0.00280455 0.723605 0.5 +0.0122871 0.124953 0.0313975 0.487471 0.467055 +-0.0769692 0.155214 0.0250641 0.769944 0.5 +-0.0435242 0.0590876 0.0398271 0.555182 0.472295 +-0.0425056 0.0591222 0.0401769 0.726093 0.5 +-0.041507 0.0591281 0.0403212 0.749345 0.5 +-0.0404996 0.0591463 0.0404229 0.750122 0.5 +-0.0394972 0.0591632 0.0405173 0.751111 0.5 +-0.0384905 0.0591295 0.0404813 0.708003 0.5 +-0.0374964 0.0591338 0.0402834 0.65483 0.452095 +-0.0364983 0.059104 0.0398977 0.608463 0.5 +-0.0354822 0.0590569 0.0395591 0.572275 0.5 +-0.034478 0.0590226 0.0391844 0.558375 0.5 +-0.0334706 0.0589721 0.0386927 0.553456 0.468973 +-0.0325011 0.058955 0.0382451 0.536103 0.5 +-0.0315398 0.0589058 0.0377684 0.488759 0.458633 +-0.030503 0.0588732 0.0373493 0.552163 0.424945 +-0.0294983 0.0588236 0.0368769 0.51949 0.5 +-0.0285046 0.0588067 0.036767 0.783481 0.5 +-0.0275164 0.0588544 0.0372755 0.618007 0.5 +-0.0266186 0.0589226 0.0382515 0.804045 0.5 +-0.014074 0.128231 0.00303832 0.697783 0.5 +-0.0795696 0.0976882 -0.00856087 0.499264 0.5 +-0.00906667 0.129748 0.004892 0.731358 0.5 +-0.00546011 0.130518 0.00622904 0.729782 0.5 +0.00577065 0.131636 0.0103849 0.81638 0.5 +0.0107439 0.130936 0.0122066 0.856865 0.5 +0.0212208 0.126407 0.0160623 0.466853 0.477405 +0.0288964 0.120556 0.0189249 0.612603 0.5 +-0.0174573 0.0601724 0.0514531 0.598628 0.5 +-0.0164899 0.0602176 0.0520938 0.608098 0.5 +-0.0154981 0.060248 0.0524646 0.599172 0.5 +-0.0144773 0.0603048 0.0528052 0.620283 0.411922 +-0.0134723 0.0603845 0.0536243 0.63903 0.443373 +-0.0124985 0.0603974 0.0541523 0.646771 0.464613 +-0.0114926 0.0604332 0.0544994 0.650202 0.46547 +-0.0104903 0.0604984 0.0550813 0.633479 0.5 +-0.00950118 0.06052 0.0554819 0.783202 0.5 +-0.00851812 0.0604987 0.0555487 0.798193 0.5 +-0.00749367 0.0605601 0.0556586 0.800826 0.5 +-0.00649644 0.0605343 0.0557379 0.77304 0.5 +-0.00549595 0.0605287 0.0555985 0.751621 0.5 +-0.00449819 0.0604864 0.0551163 0.767927 0.5 +-0.00349094 0.060529 0.0547186 0.785372 0.5 +-0.00244861 0.0605864 0.0553645 0.783698 0.402186 +-0.00148294 0.0606073 0.0558577 0.757588 0.5 +-0.000492298 0.0605899 0.0560413 0.73432 0.5 +0.000506781 0.0605965 0.0560209 0.746636 0.5 +0.00150254 0.0605844 0.0560506 0.683842 0.5 +0.002504 0.0605716 0.0560843 0.617437 0.5 +0.00349883 0.0605728 0.0559342 0.599244 0.439223 +0.0044963 0.0605551 0.0556784 0.48502 0.483312 +0.00553119 0.0603997 0.0554086 0.52471 0.5 +0.0104936 0.11823 0.0368787 0.562107 0.5 +-0.015609 0.128774 0.0111587 0.635772 0.285136 +-0.0155019 0.119619 0.0357771 0.452338 0.5 +0.000493498 0.119652 0.0380928 0.649494 0.5 +-0.0942207 0.120117 0.0202902 0.664933 0.5 +-0.0254563 0.120601 0.0288472 0.425603 0.5 +-0.0244888 0.120706 0.0294035 0.413973 0.5 +-0.0234909 0.120747 0.0300444 0.426071 0.5 +-0.0224887 0.120777 0.0306794 0.472307 0.5 +-0.0214979 0.120818 0.0311972 0.50776 0.5 +-0.0455015 0.115241 0.0333765 0.547189 0.5 +-0.0474934 0.115292 0.0331905 0.521053 0.5 +-0.0384898 0.113893 0.0344296 0.667726 0.5 +-0.0394837 0.113931 0.0345962 0.685591 0.5 +-0.0514754 0.115278 0.0338114 0.63268 0.5 +-0.0204678 0.122105 0.0297617 0.470906 0.5 +-0.0214771 0.122102 0.0291424 0.467006 0.5 +-0.0224613 0.12203 0.0284859 0.4404 0.5 +-0.0234883 0.122057 0.0276339 0.429725 0.5 +-0.0745006 0.142795 0.0461595 0.628145 0.5 +-0.0536299 0.144677 0.0243972 0.75025 0.5 +0.0216673 0.125834 0.0205048 0.403092 0.5 +-0.0816886 0.154881 0.0175845 0.500539 0.5 +0.0126438 0.130236 0.0157508 0.855852 0.5 +0.0373352 0.108319 0.0251875 0.529532 0.5 +-0.0620106 0.15528 -0.0315878 0.814083 0.5 +-0.0455612 0.125305 -0.00846085 0.590842 0.5 +0.0416081 0.101418 0.000182195 0.472042 0.439829 +0.0426769 0.101505 0.0101616 0.693234 0.5 +-0.0699808 0.136988 -0.00795948 0.543007 0.466572 +-0.084368 0.114299 0.000284663 0.445557 0.5 +-0.0235296 0.159196 -0.00227474 0.309766 0.47069 +0.0385114 0.0583288 0.0314228 0.577651 0.5 +0.0395682 0.0582726 0.0307001 0.643451 0.5 +0.0405223 0.0582848 0.0307512 0.568603 0.5 +0.0414985 0.058326 0.0311197 0.733842 0.5 +0.0424926 0.0583469 0.0313486 0.527122 0.5 +0.0434891 0.0583702 0.0316051 0.468866 0.5 +0.0444976 0.0583814 0.0318302 0.657685 0.5 +0.0455013 0.0583861 0.0319381 0.715427 0.5 +0.0465079 0.0583728 0.0318256 0.699595 0.5 +0.0475195 0.0583521 0.0315949 0.548877 0.5 +0.0484836 0.0582148 0.031165 0.463927 0.46751 +-0.0859867 0.140484 0.00417932 0.470029 0.5 +0.0442088 0.0931449 0.0211603 0.493192 0.5 +-0.0632381 0.170981 -0.0495819 0.613718 0.5 +-0.0737003 0.156269 0.0145144 0.717415 0.5 +-0.0765015 0.121776 0.0527715 0.559358 0.5 +-0.0823392 0.111551 0.0443764 0.573141 0.431344 +-0.0444887 0.166716 0.00379579 0.432842 0.342484 +-0.0896061 0.126751 0.00429509 0.668477 0.5 +-0.0623544 0.152149 -0.0255836 0.690046 0.5 +-0.0735334 0.165176 -0.017728 0.254223 0.376154 +-0.0924363 0.118744 0.0263157 0.815533 0.5 +0.0105014 0.112682 0.0391847 0.660816 0.5 +0.0114979 0.112659 0.03891 0.670599 0.5 +-0.0575 0.0588269 0.0212602 0.079935 0 +0.0124968 0.112648 0.0387734 0.687865 0.5 +0.0134971 0.112635 0.0387508 0.657701 0.429898 +-0.035368 0.122868 0.0260927 0.514037 0.5 +-0.0710693 0.155098 0.0285743 0.86313 0.5 +-0.0100751 0.129607 0.0204184 0.462694 0.5 +-0.0541438 0.151337 0.0259237 0.429515 0.468852 +0.0215791 0.120444 0.0319368 0.571352 0.5 +-0.0801398 0.154387 0.00935749 0.601617 0.5 +-0.0203743 0.127028 0.00506457 0.692997 0.5 +-0.00823225 0.127328 0.0283641 0.313066 0.338258 +-0.0251238 0.125152 0.00185767 0.736391 0.5 +-0.076884 0.155644 0.0221655 0.46949 0.5 +-0.0502879 0.133796 0.0278403 0.650903 0.5 +-0.0435044 0.0605182 0.0400424 0.557234 0.5 +-0.0425016 0.0605517 0.0404213 0.608014 0.5 +-0.0415072 0.0605699 0.0406995 0.613801 0.48453 +-0.0405058 0.060576 0.0408455 0.600241 0.5 +-0.039497 0.060614 0.0410267 0.734593 0.5 +-0.0384926 0.0605846 0.0409778 0.705704 0.5 +-0.037493 0.0605801 0.0408152 0.655323 0.5 +-0.0364972 0.0605644 0.0405385 0.622127 0.5 +-0.0354996 0.0605317 0.0401535 0.745235 0.5 +-0.0344836 0.0604651 0.0395531 0.708236 0.5 +-0.0334912 0.0604137 0.038899 0.544415 0.481734 +-0.0325027 0.0603855 0.0384943 0.543254 0.5 +-0.0314976 0.0603384 0.0380002 0.485646 0.464123 +-0.0304988 0.0603029 0.0376116 0.536668 0.5 +-0.0294972 0.0602632 0.0372614 0.423394 0.5 +-0.028493 0.0602587 0.0370952 0.538044 0.5 +-0.0274915 0.0602914 0.037483 0.600191 0.5 +-0.0265857 0.0603669 0.0385952 0.569277 0.5 +-0.00786498 0.13001 0.00533674 0.730507 0.5 +-0.0066641 0.130277 0.00578337 0.728624 0.5 +-0.000819486 0.131234 0.00795191 0.74977 0.268126 +0.00782583 0.131487 0.0111342 0.834131 0.5 +0.0169782 0.128539 0.0144983 0.626962 0.5 +0.0220436 0.125932 0.0163676 0.495179 0.5 +0.0281636 0.121218 0.0186511 0.589169 0.5 +0.032372 0.116958 0.0202394 0.619565 0.5 +-0.00645905 0.128953 0.0260767 0.320502 0.5 +-0.0164629 0.0616668 0.0525376 0.607095 0.478501 +-0.0154642 0.0617228 0.0531313 0.608033 0.445048 +-0.0144795 0.0617481 0.0535104 0.630395 0.5 +-0.0135115 0.0617879 0.0541775 0.635568 0.5 +-0.012492 0.061843 0.0546212 0.634839 0.469435 +-0.0114833 0.0618754 0.0549615 0.650491 0.470895 +-0.0104902 0.0619157 0.0554492 0.644525 0.5 +-0.0094927 0.0619497 0.0558121 0.642854 0.486242 +-0.00850445 0.0619527 0.0559735 0.643791 0.5 +-0.00750248 0.0619634 0.0561006 0.782508 0.5 +-0.00649716 0.0619561 0.0561245 0.770599 0.5 +-0.0054968 0.061946 0.0559894 0.762387 0.5 +-0.00449481 0.0619627 0.0557718 0.787854 0.5 +-0.00349601 0.0619414 0.0556852 0.806374 0.5 +-0.00249339 0.0619776 0.0560364 0.809931 0.5 +-0.00149436 0.0620061 0.056412 0.776964 0.5 +-0.000496937 0.0620135 0.0565388 0.773294 0.5 +0.000501079 0.0620074 0.0565701 0.748671 0.5 +0.00150309 0.0619973 0.0566118 0.679398 0.5 +0.00250176 0.0620246 0.0566613 0.632265 0.5 +0.00350624 0.0619975 0.0564502 0.592048 0.5 +0.00451197 0.0619711 0.0562284 0.577325 0.5 +0.00552678 0.0619607 0.0559576 0.474229 0.468369 +0.00660499 0.0617786 0.0553203 0.488299 0.46872 +0.0114719 0.1182 0.0365719 0.549455 0.435041 +0.0337482 0.102096 0.0349353 0.721289 0.5 +-0.0144951 0.119623 0.0361429 0.441459 0.5 +-0.000499702 0.119705 0.0381547 0.65526 0.5 +-0.00149547 0.119691 0.0381347 0.662053 0.5 +-0.00249391 0.119678 0.0379989 0.649997 0.5 +-0.00349428 0.119696 0.0379021 0.652911 0.5 +-0.00449084 0.119679 0.0378771 0.659008 0.5 +-0.00548321 0.119649 0.0378412 0.660868 0.5 +-0.0064872 0.119657 0.0377321 0.681198 0.5 +-0.00749647 0.119689 0.0375376 0.653724 0.5 +-0.0659203 0.122383 -0.00896938 0.797322 0.5 +-0.0408255 0.0914222 -0.0231618 0.53277 0.5 +-0.0943455 0.121485 0.0232874 0.718584 0.5 +-0.0114919 0.121016 0.0357517 0.483027 0.5 +-0.0104801 0.120983 0.0360777 0.51483 0.5 +-0.00949197 0.121025 0.0361236 0.562294 0.401275 +-0.00848516 0.121007 0.0363393 0.613899 0.5 +-0.0941076 0.120125 0.0222927 0.709616 0.5 +-0.0942113 0.120123 0.0212925 0.687694 0.5 +-0.0529166 0.0566407 0.0191372 0.106703 0 +-0.0625812 0.150647 -0.00957658 0.278467 0.5 +-0.0628107 0.150584 -0.0245802 0.609564 0.5 +0.0439346 0.0959403 0.0181595 0.520877 0.453052 +-0.0784743 0.140032 0.0478552 0.537882 0.5 +0.0368905 0.10997 0.023344 0.51887 0.5 +-0.0883977 0.0983242 0.022387 0.535268 0.5 +0.0370893 0.106835 -0.00283087 0.54654 0.5 +-0.0348521 0.0972102 -0.0229902 0.620611 0.5 +0.0419445 0.0972272 0.0251571 0.522316 0.5 +0.0414472 0.0971985 0.0261597 0.646328 0.5 +0.0409571 0.0971716 0.0271682 0.659957 0.5 +0.0395317 0.0596774 0.0306966 0.48752 0.477098 +0.0405486 0.0596459 0.0301455 0.467746 0.467985 +0.0415111 0.0596706 0.0303495 0.744481 0.5 +0.0424994 0.0597124 0.0306347 0.490935 0.464071 +0.0434928 0.0597185 0.030951 0.421123 0.418951 +0.0444883 0.05975 0.0312137 0.481007 0.462733 +0.0455002 0.059749 0.0314265 0.533753 0.5 +0.0465043 0.0597504 0.0314309 0.679077 0.5 +0.0475108 0.0597433 0.0313293 0.562761 0.5 +0.0485157 0.0597129 0.0310438 0.415372 0.426236 +0.0495183 0.0596792 0.0306871 0.406227 0.483913 +0.0503974 0.0595708 0.0303584 0.405493 0.41666 +0.0407085 0.0956949 -0.00580768 0.618948 0.5 +0.0296013 0.119582 0.02204 0.579465 0.5 +0.0281452 0.12091 0.0214948 0.558575 0.455906 +0.0411647 0.0886413 -0.00977915 0.635782 0.5 +0.0112861 0.130316 0.0195341 0.490788 0.469141 +-0.024907 0.0916549 -0.0335476 0.373758 0.5 +0.0407967 0.105643 0.0101649 0.704041 0.5 +0.0115111 0.114076 0.0384616 0.574655 0.5 +0.042138 0.101461 0.00217211 0.445161 0.5 +0.0144928 0.11263 0.0387455 0.661797 0.5 +0.0155048 0.112635 0.0385412 0.55419 0.485359 +-0.0760639 0.155862 0.0136886 0.720668 0.5 +0.0152697 0.128852 0.0195703 0.425587 0.469491 +-0.0628269 0.1502 -0.00476792 0.45276 0.5 +-0.0655762 0.155146 -0.00586759 0.623706 0.363703 +-0.0585553 0.060477 0.023496 0.335404 0.429844 +-0.0574179 0.0608499 0.024689 0.448705 0.5 +0.0164932 0.112605 0.0382483 0.550588 0.486924 +0.017486 0.112589 0.0378808 0.54787 0.425276 +-0.0544716 0.0607811 0.0269495 0.136202 0.5 +-0.0533559 0.0609747 0.0280244 0.20843 0.5 +0.0152572 0.124805 0.0295869 0.510897 0.5 +-0.0327176 0.125444 0.0196276 0.359289 0.447792 +0.0137336 0.122464 0.0333928 0.607142 0.5 +-0.0216874 0.126575 0.00458035 0.700459 0.5 +-0.048101 0.135891 0.0168055 0.740469 0.5 +-0.0263156 0.124827 0.00142734 0.773209 0.5 +0.000667625 0.0985049 0.0513232 0.395048 0.366076 +0.0158763 0.121559 0.0327664 0.696033 0.374342 +0.0263229 0.122689 0.0193841 0.550515 0.379774 +-0.0434938 0.0619471 0.0402773 0.587502 0.5 +-0.0424946 0.0619914 0.040787 0.597864 0.5 +-0.0415061 0.0620057 0.0410722 0.59853 0.485814 +-0.0404923 0.0620428 0.0412639 0.715885 0.5 +-0.0394989 0.0620307 0.0413298 0.722344 0.5 +-0.0384965 0.0620329 0.0413169 0.709329 0.5 +-0.0374934 0.0620193 0.0412021 0.681563 0.5 +-0.036486 0.0619956 0.0409573 0.650585 0.5 +-0.0354995 0.0619703 0.0405316 0.775243 0.5 +-0.0345243 0.0619374 0.0399691 0.707148 0.5 +-0.0334995 0.0618586 0.0392638 0.69182 0.43434 +-0.0325014 0.0618008 0.0386259 0.638347 0.5 +-0.031495 0.061765 0.0382603 0.572156 0.5 +-0.0305049 0.0617476 0.0379767 0.407147 0.5 +-0.0294951 0.0617035 0.0376524 0.405711 0.434391 +-0.0285033 0.0616825 0.0373869 0.529014 0.5 +-0.0274823 0.0617236 0.037721 0.592675 0.5 +-0.0265671 0.0617846 0.0387137 0.617817 0.5 +0.00147793 0.131501 0.00880182 0.765149 0.5 +0.000326986 0.131385 0.00837406 0.756918 0.5 +0.00679991 0.131589 0.0107583 0.816641 0.5 +0.0160657 0.128852 0.0141586 0.626754 0.5 +0.0228597 0.125444 0.016672 0.485191 0.43871 +0.0274329 0.121878 0.0183804 0.567877 0.5 +0.0330284 0.116174 0.0204895 0.630343 0.5 +0.00617007 0.126444 0.0306412 0.493308 0.391016 +-0.0604932 0.155795 0.0206537 0.763824 0.31952 +-0.0164541 0.0630817 0.0527623 0.586174 0.5 +-0.0155135 0.0631057 0.0533345 0.593961 0.5 +-0.0145015 0.0631456 0.0536787 0.596473 0.472256 +-0.037924 0.175153 -0.00739726 0.194484 0.5 +-0.0124743 0.0632507 0.0548154 0.59119 0.5 +-0.0114871 0.063283 0.055206 0.621008 0.5 +-0.0105123 0.0633015 0.0555068 0.638224 0.5 +-0.00949444 0.063336 0.0558203 0.631342 0.484898 +-0.00850113 0.0633575 0.0560799 0.634451 0.5 +-0.00750585 0.0633646 0.0562436 0.772077 0.5 +-0.00650337 0.0633626 0.0562557 0.768336 0.5 +-0.00549722 0.0633676 0.0561862 0.779276 0.5 +-0.00449554 0.0633716 0.0561592 0.792627 0.5 +-0.00349688 0.0633763 0.0563118 0.803014 0.5 +-0.00250336 0.0633801 0.0564795 0.790951 0.5 +-0.00149888 0.0634085 0.0566876 0.785645 0.5 +-0.000501715 0.0634055 0.0567322 0.747375 0.5 +0.000499004 0.0634057 0.0567297 0.711431 0.5 +0.00150192 0.0634213 0.0567922 0.693637 0.5 +0.00250861 0.0634123 0.0567384 0.645679 0.5 +0.00351519 0.0634007 0.0566286 0.76692 0.5 +0.00451348 0.0633892 0.056472 0.586773 0.5 +0.00552401 0.0633596 0.0561453 0.566684 0.479813 +0.00652265 0.0633208 0.0557678 0.55314 0.477505 +0.00753471 0.0632773 0.055432 0.467608 0.469581 +0.012487 0.118181 0.036207 0.558035 0.486602 +-0.0867528 0.121192 -0.00171893 0.678506 0.5 +-0.0135041 0.11966 0.0364252 0.444733 0.5 +-0.0124895 0.119639 0.0367572 0.45816 0.5 +-0.0114857 0.119632 0.0369891 0.518047 0.452131 +-0.0104925 0.119661 0.037142 0.567773 0.5 +-0.0094889 0.119647 0.0372435 0.599836 0.5 +-0.0875722 0.151019 0.0254764 0.265855 0.5 +-0.0705258 0.142815 0.0451961 0.619012 0.5 +-0.0755017 0.140041 0.0481 0.631832 0.5 +-0.0164574 0.11955 0.0353527 0.471714 0.42603 +0.001497 0.119685 0.0377723 0.646485 0.5 +0.0441509 0.0959467 0.0161545 0.538158 0.486991 +-0.0617076 0.156842 -0.0315932 0.516935 0.473269 +-0.0628413 0.144409 -0.0076345 0.668887 0.5 +0.0429803 0.0916104 -0.003806 0.471195 0.462248 +0.0426083 0.0915862 -0.00481093 0.463345 0.461836 +-0.0075036 0.12108 0.0363047 0.62373 0.5 +-0.00649673 0.121064 0.0364033 0.651446 0.5 +-0.00548988 0.121033 0.0366102 0.656255 0.5 +-0.00449347 0.121049 0.0367461 0.666065 0.5 +-0.00348704 0.121028 0.0369539 0.665679 0.383273 +-0.00149798 0.121047 0.037107 0.652268 0.5 +0.000500084 0.12107 0.0367737 0.623932 0.5 +-0.079441 0.139988 0.0475582 0.412428 0.5 +-0.0355723 0.127236 0.00383072 0.866827 0.5 +-0.0144799 0.123658 0.0314246 0.524597 0.5 +-0.0154726 0.123613 0.0307813 0.515149 0.5 +-0.00850001 0.125156 0.0314578 0.405973 0.394643 +-0.00749813 0.125151 0.0317009 0.41678 0.399997 +0.0435925 0.0958855 0.00119521 0.478662 0.489932 +0.0432433 0.0958712 0.000187851 0.486341 0.5 +0.0405445 0.0610221 0.0298369 0.644997 0.5 +0.0415387 0.0610238 0.0295203 0.578152 0.5 +0.0425062 0.0610428 0.0297234 0.700168 0.5 +0.043495 0.0610671 0.0301862 0.481914 0.5 +0.0444927 0.0610909 0.0304355 0.430024 0.5 +0.0454967 0.0611109 0.0306935 0.480851 0.5 +0.046501 0.0611194 0.0308227 0.513672 0.5 +0.0475064 0.0611159 0.0308231 0.549298 0.470059 +0.0485116 0.0611011 0.0306918 0.481944 0.5 +0.0495286 0.0610841 0.0304744 0.504734 0.474515 +0.0505141 0.0610459 0.0301699 0.41911 0.4848 +0.0515419 0.0610093 0.0297195 0.417836 0.45457 +-0.00301536 0.127034 0.030217 0.335862 0.5 +0.0184989 0.11258 0.037522 0.563485 0.479802 +0.0165164 0.126586 0.0257514 0.533651 0.364132 +-0.0334673 0.174268 -0.00177832 0.340256 0.5 +0.0360643 0.108191 -0.003826 0.461807 0.466834 +0.0389991 0.108356 0.0151637 0.71034 0.5 +0.0194959 0.11257 0.0373879 0.575178 0.47545 +-0.0294775 0.17726 -0.00505881 0.354828 0.5 +-0.0206189 0.186125 -0.0151754 0.215116 0.5 +0.0205916 0.112587 0.0371117 0.554683 0.5 +-0.0271582 0.125819 0.00840694 0.738593 0.5 +-0.0368019 0.127806 0.00485952 0.858539 0.5 +-0.0428232 0.12861 0.00263817 0.867778 0.5 +-0.067466 0.154933 0.00219081 0.87304 0.5 +-0.000406928 0.0996624 0.04942 0.321894 0.443496 +0.0144323 0.129298 0.0192627 0.434752 0.433797 +-0.0661878 0.156038 -0.00610123 0.577648 0.5 +-0.0381245 0.162196 -0.0129852 0.499753 0.5 +-0.043053 0.153237 -0.00732462 0.733715 0.5 +-0.0574847 0.0623327 0.0283417 0.440932 0.5 +-0.0564752 0.0624455 0.0290854 0.294348 0.5 +-0.0555013 0.0623754 0.0293782 0.259304 0.5 +-0.0544738 0.0624824 0.0299832 0.277414 0.5 +-0.053455 0.0625326 0.0304805 0.254393 0.5 +-0.0523859 0.0626167 0.0314055 0.376362 0.5 +-0.0514165 0.0627417 0.0327301 0.410021 0.5 +-0.050463 0.0627793 0.0338697 0.55581 0.5 +-0.0692317 0.155651 0.00154206 0.696929 0.5 +-0.0274601 0.124651 0.00100866 0.781512 0.5 +0.00601824 0.128477 0.0276707 0.380813 0.5 +0.000773445 0.126081 0.0315854 0.413132 0.5 +0.0270658 0.12207 0.0196667 0.547679 0.5 +-0.0183396 0.126605 0.021835 0.442036 0.5 +-0.043478 0.0633766 0.0405033 0.582038 0.5 +-0.0424707 0.0634258 0.0409808 0.602862 0.5 +-0.0414812 0.0634467 0.0412468 0.738037 0.5 +-0.0404969 0.0634536 0.0414219 0.743837 0.5 +-0.039496 0.0634667 0.0415276 0.74085 0.5 +-0.0384984 0.0634699 0.041507 0.722617 0.5 +-0.037501 0.0634549 0.0414009 0.689467 0.5 +-0.0364902 0.0634253 0.0412069 0.655591 0.5 +-0.0354974 0.0634085 0.0409173 0.611013 0.5 +-0.0345208 0.0633716 0.0403553 0.720692 0.5 +-0.033478 0.0632761 0.0395519 0.701016 0.429013 +-0.0325077 0.0632413 0.0389915 0.654137 0.5 +-0.0315047 0.0631978 0.0384961 0.596135 0.5 +-0.0304985 0.0631621 0.0381216 0.424835 0.5 +-0.029494 0.0631194 0.0377814 0.416495 0.5 +-0.0284985 0.0631152 0.0376198 0.561231 0.5 +-0.0274987 0.0631476 0.0380009 0.634962 0.5 +-0.0265303 0.0632322 0.0390504 0.68021 0.5 +0.00977817 0.131153 0.0118468 0.848684 0.5 +0.00880568 0.131337 0.0114907 0.836177 0.5 +0.0178265 0.128119 0.0148069 0.609441 0.472706 +0.0244543 0.124393 0.0172632 0.506732 0.5 +0.0267042 0.122545 0.0181085 0.583129 0.5 +0.0343104 0.114465 0.0209626 0.630321 0.5 +0.00803725 0.125889 0.0313 0.436846 0.375892 +-0.0461368 0.13275 0.0116924 0.493237 0.5 +0.0108694 0.130662 0.0179509 0.745943 0.5 +-0.0164763 0.064491 0.0530345 0.586151 0.5 +-0.0154803 0.0645289 0.0535158 0.74166 0.5 +-0.0144784 0.0645279 0.0535035 0.741207 0.5 +-0.0134598 0.0645734 0.0539775 0.700608 0.418084 +-0.0124605 0.0646213 0.0545516 0.573247 0.424427 +-0.0114811 0.0646532 0.0550744 0.594615 0.385264 +-0.0105091 0.0646847 0.0553841 0.618928 0.417008 +-0.00951396 0.0647096 0.055646 0.632681 0.393193 +-0.00851461 0.0647289 0.0558918 0.629525 0.396722 +-0.00749994 0.0647419 0.0560829 0.625036 0.415146 +-0.0064961 0.0647536 0.0562043 0.763018 0.416706 +-0.00550336 0.0647558 0.0562438 0.768812 0.5 +-0.00450514 0.0647631 0.0563697 0.772915 0.5 +-0.00349826 0.0647878 0.0565544 0.776921 0.5 +-0.00250198 0.0647948 0.0567081 0.774375 0.5 +-0.00150357 0.0647954 0.0567431 0.750771 0.5 +-0.000498244 0.0647983 0.0567029 0.722297 0.5 +0.000503407 0.0647904 0.0566018 0.688217 0.5 +0.00150101 0.0647986 0.0566673 0.665502 0.5 +0.00251112 0.0647983 0.0566425 0.514157 0.484218 +0.00350781 0.064793 0.0565955 0.76751 0.5 +0.00451245 0.064772 0.0563635 0.581601 0.5 +0.00550696 0.0647473 0.0560963 0.566414 0.5 +0.00651279 0.0647152 0.0557475 0.551561 0.5 +0.00750963 0.0646928 0.0554932 0.402513 0.429742 +0.00852849 0.0646614 0.0551736 0.397823 0.5 +0.0135044 0.118213 0.0361594 0.539802 0.485694 +-0.0767143 0.154218 -0.0048969 0.708579 0.5 +-0.0737112 0.155478 -0.0269075 0.645327 0.5 +-0.0843615 0.0993477 -0.00259153 0.490806 0.397415 +0.0424402 0.100042 0.00119598 0.535954 0.5 +-0.0754947 0.142836 0.0460912 0.603224 0.389029 +-0.0695102 0.148387 0.0405048 0.532625 0.5 +-0.077508 0.174998 -0.0490226 0.259897 0.5 +0.000190276 0.131527 0.0154789 0.634271 0.5 +-0.0175015 0.119559 0.0348485 0.501925 0.391936 +0.00249824 0.119676 0.0375233 0.636512 0.5 +0.00349102 0.11963 0.0373483 0.642762 0.5 +0.0044907 0.119648 0.0370088 0.641669 0.419334 +0.00549953 0.119637 0.0367537 0.653599 0.5 +0.006499 0.119638 0.036869 0.66824 0.5 +0.00749696 0.119642 0.0368719 0.678708 0.5 +-0.0205115 0.114066 0.0379617 0.540353 0.5 +-0.0181282 0.187252 -0.018852 0.237973 0.106197 +0.0416377 0.084481 -0.00877138 0.48917 0.447538 +-0.0464848 0.12067 0.0277891 0.752764 0.5 +-0.0454987 0.120637 0.0275066 0.663586 0.5 +-0.00249278 0.121064 0.0370013 0.658686 0.382951 +-0.000500925 0.121055 0.0369996 0.629943 0.5 +-0.0745094 0.140045 0.0479791 0.621967 0.393756 +-0.0922148 0.11614 0.0373108 0.656791 0.5 +-0.0134871 0.123689 0.0319378 0.492325 0.32918 +-0.0104881 0.125079 0.0309157 0.393586 0.390846 +-0.00950667 0.125161 0.0310898 0.397648 0.394028 +-0.0509699 0.122064 -0.0109984 0.538005 0.5 +0.0199669 0.107838 -0.0162613 0.576137 0.468722 +-0.0940806 0.122789 0.0152778 0.737559 0.5 +0.0405961 0.0624185 0.0297312 0.617794 0.5 +0.0415243 0.0623608 0.0290336 0.668268 0.5 +0.0425314 0.0623712 0.0287546 0.560431 0.445738 +0.0434691 0.0624283 0.0290897 0.484351 0.309426 +0.0444853 0.062436 0.0294527 0.486488 0.5 +0.0454875 0.0624627 0.0298224 0.531179 0.5 +0.0464905 0.0624784 0.0299685 0.481589 0.5 +0.0475024 0.06248 0.0300852 0.526572 0.5 +0.0485082 0.0624718 0.0300814 0.568509 0.5 +0.0495191 0.0624602 0.0299628 0.595289 0.5 +0.0505407 0.062451 0.0297568 0.501229 0.5 +0.0515344 0.0624078 0.0294591 0.506257 0.469252 +0.0365694 0.109049 0.0260841 0.532292 0.5 +-0.00603107 0.130744 0.0146461 0.649902 0.5 +-0.0424989 0.16674 0.00381643 0.457258 0.5 +-0.0475653 0.166962 -0.00492463 0.371444 0.5 +-0.0471313 0.132491 0.00541336 0.503701 0.482121 +-0.0926871 0.118696 0.0103064 0.58524 0.5 +-0.0870053 0.0954387 0.00242783 0.494536 0.346642 +-0.0784995 0.162482 -0.0259435 0.476378 0.5 +-0.078491 0.121738 0.0515581 0.575447 0.5 +0.00224686 0.131192 0.0191047 0.609266 0.5 +-0.00426313 0.130924 0.016725 0.616377 0.338713 +-0.011153 0.129981 0.0142184 0.574107 0.5 +-0.0197896 0.127727 0.0110836 0.559469 0.5 +-0.0283564 0.125587 0.00796681 0.77586 0.5 +-0.0410879 0.12806 0.000341883 0.861706 0.5 +-0.0421309 0.128083 -3.62159e-05 0.853498 0.5 +-0.00713141 0.127357 0.0287426 0.315467 0.348002 +-0.00124361 0.130098 0.0236021 0.839043 0.5 +-0.0252829 0.0751884 0.0479421 0.693464 0.5 +-0.063251 0.15135 -0.00497603 0.578172 0.5 +-0.0668589 0.156842 -0.00635476 0.399753 0.460744 +-0.0608875 0.104029 -0.0182853 0.484023 0.5 +-0.0598828 0.104039 -0.0184233 0.65474 0.5 +-0.0739165 0.113504 -0.00683708 0.44421 0.5 +-0.0628061 0.0896011 -0.0190246 0.676741 0.5 +-0.0308936 0.0901442 -0.0248987 0.370176 0.330832 +-0.0535159 0.0640852 0.0330775 0.456708 0.5 +-0.052462 0.0642313 0.0336351 0.529612 0.5 +-0.051438 0.0643214 0.0343604 0.679218 0.5 +-0.0503626 0.0642656 0.0349674 0.737724 0.5 +-0.0494719 0.0643044 0.0356628 0.765604 0.5 +-0.0228512 0.126901 0.0114323 0.543299 0.5 +-0.021597 0.124211 0.0236359 0.375546 0.425091 +0.0277966 0.12141 0.0199376 0.568193 0.362101 +-0.00541562 0.128879 0.0264449 0.291638 0.467429 +-0.0661547 0.1622 -0.0162285 0.407424 0.450462 +-0.0434723 0.0647942 0.0406198 0.595812 0.5 +-0.0424858 0.064826 0.0410217 0.608876 0.5 +-0.0414966 0.064844 0.0412967 0.753864 0.391923 +-0.0404921 0.0648693 0.0415314 0.762128 0.395104 +-0.0394972 0.0648803 0.0416583 0.740462 0.5 +-0.0384977 0.0648621 0.0416261 0.704044 0.5 +-0.0375049 0.0648832 0.0416292 0.674847 0.5 +-0.0364897 0.0648519 0.0414613 0.638885 0.5 +-0.035492 0.0648204 0.0410644 0.620204 0.410011 +-0.0345021 0.0647803 0.0405279 0.761882 0.408763 +-0.0335094 0.0647262 0.0398847 0.696046 0.5 +-0.0325205 0.0646875 0.0393461 0.632222 0.5 +-0.0314872 0.0646167 0.0387865 0.565229 0.5 +-0.0304944 0.064586 0.038393 0.41999 0.456178 +-0.0294959 0.0645466 0.0380401 0.517109 0.5 +-0.0285046 0.0645461 0.0380462 0.642794 0.5 +-0.027486 0.0646029 0.0384895 0.719015 0.5 +-0.026557 0.0646504 0.0393284 0.712861 0.5 +0.0143125 0.129601 0.0135477 0.468204 0.474841 +0.0151955 0.129241 0.0138359 0.613337 0.5 +0.0236525 0.124901 0.0169603 0.609556 0.5 +0.0259555 0.123153 0.0178233 0.564956 0.5 +0.0349362 0.113582 0.0211925 0.643093 0.5 +-0.00900002 0.1303 0.0121232 0.675478 0.5 +-0.0467325 0.133652 0.0114554 0.516435 0.5 +0.046038 0.0679968 0.0252834 0.500109 0.390105 +0.0472026 0.0681414 0.0256953 0.394426 0.5 +-0.0164672 0.0659336 0.0534892 0.713079 0.5 +-0.0154968 0.0659374 0.0537935 0.735049 0.5 +-0.014508 0.0659228 0.0537042 0.744854 0.5 +-0.0134952 0.0659366 0.0537869 0.744166 0.5 +-0.0124852 0.0659775 0.0542376 0.729188 0.5 +-0.0114925 0.06602 0.0547394 0.720231 0.5 +-0.0104895 0.0660607 0.0552117 0.61411 0.5 +-0.00950506 0.0660833 0.0554985 0.624978 0.5 +-0.00849416 0.0661021 0.0557034 0.767122 0.5 +-0.00750518 0.0661146 0.0558703 0.767791 0.5 +-0.00650089 0.0661332 0.0560881 0.772061 0.5 +-0.00550273 0.0661441 0.0562254 0.773359 0.5 +-0.00450592 0.0661541 0.056364 0.773854 0.5 +-0.0034975 0.0661744 0.0565538 0.776553 0.5 +-0.00249995 0.0661849 0.0567093 0.766296 0.5 +-0.00149822 0.0661867 0.0567241 0.728489 0.5 +-0.000497657 0.066177 0.0565989 0.716155 0.5 +0.000499624 0.0661631 0.0564081 0.697748 0.452414 +0.0015045 0.0661578 0.0563313 0.660329 0.466845 +0.00251128 0.0661582 0.0562906 0.630138 0.5 +0.00351414 0.0661565 0.0562774 0.752306 0.5 +0.0045204 0.0661365 0.0560558 0.741005 0.5 +0.00551724 0.0661119 0.0558057 0.731659 0.5 +0.00651157 0.066084 0.0555109 0.725503 0.436932 +0.00750533 0.0660627 0.0552439 0.568635 0.5 +0.00851416 0.06604 0.0550264 0.566521 0.5 +0.00951738 0.0660057 0.0546772 0.477793 0.458716 +0.0144977 0.11819 0.0360011 0.522873 0.484655 +0.0154982 0.118174 0.0357451 0.611549 0.5 +0.0165026 0.118175 0.0355154 0.617343 0.5 +0.0175115 0.118187 0.0352964 0.62813 0.5 +0.0185027 0.118159 0.035136 0.613114 0.5 +-0.0387263 0.127561 -0.000266265 0.885937 0.5 +-0.0245336 0.118082 0.0325274 0.408284 0.5 +0.00949782 0.11825 0.0371477 0.565597 0.403149 +0.00284904 0.131659 0.0150261 0.741053 0.5 +-0.0185008 0.119534 0.0344711 0.517712 0.368239 +-0.0195067 0.119545 0.0340058 0.470689 0.393644 +-0.0204952 0.119495 0.0334766 0.437568 0.5 +-0.0225483 0.119525 0.0321637 0.405224 0.5 +-0.0215106 0.119492 0.0328652 0.402519 0.5 +0.00849911 0.119651 0.036768 0.561316 0.5 +0.00950115 0.119644 0.0365249 0.549398 0.5 +-0.0367939 0.127143 0.000444502 0.905229 0.5 +0.0115015 0.119616 0.0358941 0.647063 0.5 +0.012488 0.119576 0.0355898 0.643976 0.5 +-0.0474373 0.120726 0.0283448 0.71085 0.5 +0.0121624 0.129948 0.0198557 0.488161 0.5 +0.0164452 0.127885 0.0214354 0.397866 0.438331 +-0.0725345 0.140015 0.0475615 0.629604 0.5 +0.0147905 0.128825 0.0208219 0.498267 0.370723 +-0.0124935 0.123722 0.0323282 0.420781 0.335242 +-0.0114821 0.125053 0.0306553 0.381088 0.5 +-0.0946145 0.122826 0.0212791 0.643261 0.5 +-0.0498404 0.122243 -0.0112035 0.52125 0.473649 +0.0431391 0.098698 0.00317491 0.544182 0.465461 +0.0442623 0.0959503 0.0151546 0.551349 0.482572 +0.0406613 0.0638232 0.0297482 0.553232 0.5 +0.0416181 0.0637615 0.0286411 0.694551 0.5 +0.0425502 0.0637218 0.0280932 0.700294 0.5 +0.0435205 0.0637429 0.0281056 0.553618 0.5 +0.0444941 0.0637658 0.0284543 0.502525 0.423341 +0.0454797 0.0637982 0.0288243 0.51548 0.413138 +0.0464934 0.0638096 0.0291729 0.573387 0.409437 +0.0474969 0.0638142 0.0292952 0.497772 0.5 +0.0485032 0.0638048 0.0293893 0.546999 0.5 +0.0495086 0.0638139 0.0293036 0.582108 0.5 +0.0505111 0.0637895 0.0291551 0.61038 0.414637 +0.0515137 0.0637653 0.0289012 0.507184 0.5 +-0.0687402 0.156349 0.0177202 0.768676 0.5 +0.0161 0.12839 0.0198796 0.430451 0.5 +-0.0211124 0.182965 -0.0210132 0.438505 0.359518 +0.030263 0.116206 0.0279976 0.630072 0.5 +0.0379602 0.108292 0.00117706 0.454731 0.5 +0.0387554 0.108357 0.00416438 0.52235 0.5 +-0.0613991 0.0718897 0.0389316 0.673529 0.5 +-0.0270737 0.125279 0.00405866 0.765799 0.5 +-0.061476 0.158429 -0.028587 0.366343 0.5 +0.0137449 0.12859 0.0232984 0.510024 0.394876 +0.00735972 0.130718 0.020957 0.593926 0.392236 +0.00115082 0.131147 0.0187057 0.599532 0.5 +-0.00541266 0.130784 0.0163058 0.615219 0.5 +-0.0123571 0.12972 0.0137799 0.583478 0.5 +-0.0210495 0.127369 0.0106273 0.587303 0.311357 +-0.029395 0.125597 0.00758806 0.841605 0.5 +-0.0380634 0.127686 0.00145512 0.887978 0.5 +-0.0438011 0.128754 0.0022734 0.887676 0.5 +-0.0610057 0.155949 0.0190169 0.797163 0.5 +-0.0676703 0.159658 -0.00956407 0.35053 0.435517 +-0.0663702 0.157999 -0.00906779 0.550398 0.411161 +-0.065143 0.156205 -0.00860924 0.569263 0.378522 +-0.0658189 0.0895406 -0.0182783 0.497226 0.407058 +-0.0638201 0.089594 -0.0189434 0.530506 0.5 +-0.0709153 0.113624 -0.0087498 0.530989 0.5 +-0.061811 0.0896079 -0.0190442 0.624474 0.5 +-0.0317955 0.0901023 -0.0248195 0.44913 0.45963 +-0.0361548 0.166687 -0.0142688 0.452499 0.429459 +-0.0450711 0.153185 -0.00674331 0.695144 0.5 +-0.0548148 0.0883935 -0.0220325 0.619673 0.5 +-0.0418064 0.0884466 -0.0220226 0.693083 0.5 +-0.0505296 0.0657745 0.0361047 0.648205 0.476253 +-0.0493845 0.0657885 0.0368321 0.829801 0.5 +-0.045035 0.131096 0.00921538 0.468825 0.450152 +0.0285362 0.120755 0.0202147 0.577459 0.5 +0.00424945 0.126892 0.0299609 0.419275 0.5 +-0.0454889 0.0660999 0.0395126 0.577612 0.472131 +-0.0444857 0.0661533 0.0401374 0.604317 0.5 +-0.0434963 0.0661943 0.0406667 0.606914 0.5 +-0.0425031 0.0662262 0.0410651 0.614234 0.482955 +-0.0414917 0.0662628 0.0414077 0.759445 0.5 +-0.0404937 0.0662835 0.0416604 0.780785 0.5 +-0.0394965 0.0662956 0.0417788 0.748794 0.5 +-0.0384968 0.066293 0.0418062 0.712884 0.5 +-0.0374975 0.0662835 0.0416878 0.685083 0.5 +-0.0364911 0.0662596 0.041455 0.663146 0.454764 +-0.0355073 0.0662414 0.0411418 0.640183 0.5 +-0.0344904 0.0661905 0.0406967 0.609392 0.475138 +-0.0335022 0.0661629 0.0402747 0.741914 0.5 +-0.0324978 0.0661054 0.0396515 0.663374 0.5 +-0.0314917 0.0660582 0.0391556 0.594285 0.5 +-0.0305014 0.066031 0.0387492 0.547638 0.5 +-0.0294956 0.0660091 0.0384906 0.542424 0.5 +-0.0284876 0.0660147 0.0384689 0.662493 0.5 +-0.0275277 0.0660102 0.0388181 0.747185 0.5 +-0.026605 0.06607 0.0397555 0.715684 0.5 +0.0186908 0.127724 0.0151265 0.620339 0.5 +0.0252163 0.1238 0.0175509 0.523329 0.5 +0.0296171 0.11988 0.0191943 0.626643 0.5 +0.0361181 0.111694 0.0216233 0.65716 0.5 +0.0378254 0.108706 0.0222481 0.666582 0.5 +-0.0741599 0.155538 0.00126713 0.265821 0.5 +0.0452046 0.0684536 0.0248447 0.59426 0.5 +0.0248702 0.121138 0.0274186 0.523768 0.5 +-0.0801768 0.155046 0.0137223 0.64695 0.5 +-0.0164761 0.0673645 0.0539812 0.617647 0.5 +-0.015485 0.0673895 0.0543529 0.744271 0.5 +-0.0144888 0.0673806 0.0542261 0.742124 0.388241 +-0.013511 0.0673225 0.0538556 0.779661 0.5 +-0.0125029 0.0673483 0.0540527 0.787126 0.5 +-0.011518 0.0673875 0.054571 0.771038 0.5 +-0.010503 0.0674297 0.0550101 0.754975 0.5 +-0.00948933 0.0674612 0.0553354 0.782977 0.5 +-0.00849422 0.0674811 0.0555845 0.791197 0.5 +-0.00749086 0.0675042 0.0558082 0.796854 0.5 +-0.00650569 0.0675101 0.0559953 0.782596 0.5 +-0.00549741 0.0675328 0.0561955 0.778957 0.5 +-0.00450121 0.0675415 0.056336 0.782942 0.5 +-0.00350144 0.0675505 0.0564719 0.787248 0.5 +-0.0025007 0.0675576 0.0566246 0.783426 0.5 +-0.00149557 0.0675596 0.0566557 0.753246 0.416416 +-0.000496537 0.0675633 0.0565514 0.726137 0.5 +0.000505152 0.0675448 0.0563482 0.683491 0.5 +0.00150869 0.0675259 0.0561223 0.664096 0.5 +0.00251277 0.0675114 0.055914 0.651274 0.46739 +0.00351108 0.067509 0.0559028 0.620277 0.475474 +0.00451102 0.0674972 0.0557889 0.613904 0.5 +0.0055201 0.0674746 0.0556049 0.794409 0.5 +0.00651867 0.0674599 0.0552944 0.620754 0.469527 +0.00750596 0.0674413 0.055134 0.621064 0.5 +0.00850767 0.067431 0.0550095 0.610195 0.5 +0.00951997 0.0673959 0.0546877 0.499246 0.5 +0.0105122 0.0673666 0.0542979 0.51838 0.464908 +-0.0484803 0.117974 0.0310954 0.649888 0.5 +-0.049455 0.118007 0.0316443 0.655371 0.5 +0.0215785 0.11262 0.0367657 0.518981 0.471269 +-0.0774971 0.128861 0.0533302 0.659535 0.5 +-0.0915343 0.140602 0.0181819 0.515231 0.5 +0.035616 0.10962 -0.00284805 0.440664 0.483938 +-0.09116 0.146144 0.0251605 0.504684 0.469425 +0.00849857 0.118254 0.0373924 0.567843 0.480013 +-0.0729498 0.156259 0.0191473 0.546802 0.5 +-0.0555057 0.153886 0.023914 0.396539 0.5 +0.00508264 0.128731 0.0273249 0.383982 0.412998 +-0.0776837 0.154812 0.0263001 0.414342 0.453814 +-0.0235467 0.119499 0.0316537 0.384996 0.5 +-0.0245147 0.119422 0.0312229 0.367137 0.5 +-0.0255089 0.119394 0.0308336 0.394949 0.5 +-0.0344987 0.119335 0.0301753 0.572536 0.5 +-0.0354943 0.119369 0.0303337 0.580609 0.5 +0.0135067 0.1196 0.0353985 0.630136 0.5 +-0.0504161 0.144734 0.0123765 0.524362 0.5 +-0.0694673 0.0635361 0.0216095 0.415275 0.458036 +-0.050108 0.144746 0.0113816 0.636632 0.45621 +-0.0778042 0.156927 -0.0169128 0.519503 0.5 +-0.073319 0.153662 0.0322986 0.347443 0.5 +-0.0114851 0.123708 0.0326887 0.470343 0.360943 +0.0437731 0.0973301 0.016155 0.663093 0.5 +0.0438296 0.0973504 0.015162 0.55414 0.5 +-0.0875349 0.110472 0.0163392 0.571254 0.5 +-0.0879612 0.103656 0.0103875 0.731519 0.5 +0.0277412 0.121021 0.0227689 0.666448 0.5 +-0.0700794 0.154941 0.0289273 0.851668 0.5 +0.0259209 0.122835 0.0206655 0.508925 0.390966 +0.042563 0.0650705 0.0275619 0.759914 0.5 +0.0435313 0.065065 0.0273105 0.642968 0.5 +0.0445042 0.0650854 0.0275412 0.543918 0.5 +0.0454924 0.0651146 0.027904 0.512572 0.5 +0.0464851 0.0651547 0.0281822 0.548767 0.5 +0.0474936 0.0651497 0.0284001 0.470587 0.5 +0.0485013 0.0651587 0.0285278 0.522557 0.404016 +0.0495045 0.0651553 0.0285253 0.547457 0.5 +0.0505096 0.0651476 0.0284061 0.591386 0.5 +0.0515215 0.0651377 0.0281771 0.627518 0.5 +0.0525369 0.0651172 0.0279377 0.517388 0.5 +0.053572 0.0650953 0.0274823 0.540879 0.467047 +-0.0414982 0.166749 0.00369508 0.479695 0.5 +0.0421258 0.100042 0.000179811 0.555161 0.47819 +-0.08755 0.12805 0.000278104 0.477986 0.300221 +0.0444341 0.0861163 0.024155 0.599608 0.5 +0.0447845 0.0903596 0.0201575 0.500917 0.5 +0.0135274 0.12988 0.0160733 0.613208 0.5 +-0.0775002 0.156948 -0.0139048 0.815716 0.5 +0.0170314 0.126681 0.0245104 0.385057 0.457565 +0.0128678 0.128966 0.0229731 0.489336 0.330664 +0.00637271 0.130879 0.0205945 0.614947 0.368204 +0.000169576 0.131258 0.0183392 0.584517 0.366064 +-0.00656125 0.130634 0.0158888 0.614776 0.5 +-0.0136265 0.129395 0.0133241 0.599704 0.5 +-0.0223056 0.126998 0.0101726 0.592237 0.5 +-0.0400438 0.127998 0.000725921 0.871863 0.5 +-0.0390536 0.127857 0.00108873 0.87454 0.5 +0.0175177 0.121695 0.0318921 0.516998 0.359928 +-0.071744 0.162192 -0.0110365 0.344027 0.407261 +-0.0772789 0.154395 0.0279022 0.743197 0.5 +-0.0809037 0.153834 0.0267225 0.315749 0.5 +-0.0799402 0.132433 -0.00455304 0.386393 0.5 +-0.0408646 0.104225 -0.0205494 0.79815 0.5 +-0.0608155 0.0896295 -0.0193008 0.712691 0.5 +-0.0598094 0.0896854 -0.0200419 0.607044 0.5 +-0.0328294 0.0901297 -0.0245803 0.637091 0.5 +-0.0828365 0.116201 -0.00217327 0.540306 0.5 +-0.00983206 0.0896484 -0.0366649 0.564234 0.5 +-0.00682874 0.0896331 -0.0361816 0.755212 0.5 +-0.0719085 0.064649 0.0201308 0.495946 0.5 +-0.0609289 0.112535 -0.0147528 0.463258 0.5 +0.0131317 0.10725 -0.0189993 0.554632 0.5 +-0.0038734 0.104505 -0.022849 0.740261 0.5 +0.0292558 0.120076 0.0204837 0.600311 0.5 +-0.037003 0.126393 0.0195465 0.312739 0.44047 +-0.0464696 0.0675313 0.0396048 0.696269 0.5 +-0.0454731 0.0675709 0.040115 0.71631 0.5 +-0.0445183 0.0675631 0.0404632 0.606878 0.5 +-0.0434945 0.0676224 0.0409141 0.620488 0.5 +-0.042494 0.0676556 0.0412962 0.643197 0.5 +-0.0415011 0.0676725 0.0415782 0.795206 0.5 +-0.04049 0.0677003 0.0417506 0.793089 0.5 +-0.0394947 0.0676998 0.0417669 0.770446 0.5 +-0.0384975 0.0676842 0.0417259 0.734916 0.5 +-0.0374964 0.0676867 0.0416821 0.706864 0.5 +-0.0365005 0.0676756 0.0415398 0.681839 0.5 +-0.0355091 0.0676694 0.0413832 0.66157 0.5 +-0.0345105 0.0676457 0.041143 0.636016 0.5 +-0.0335093 0.0676035 0.0406399 0.69228 0.5 +-0.0325025 0.0675467 0.0400218 0.614951 0.381479 +-0.031508 0.0675059 0.0394967 0.550799 0.5 +-0.0305 0.0674574 0.0390127 0.724645 0.5 +-0.0294982 0.0674485 0.03887 0.606763 0.5 +-0.0284943 0.0674472 0.03888 0.695141 0.5 +-0.027568 0.0674298 0.0392602 0.733303 0.5 +-0.0264702 0.0676761 0.0408217 0.726443 0.5 +0.0310274 0.118497 0.0197321 0.622182 0.5 +0.0303372 0.119206 0.0194646 0.6192 0.5 +0.0355348 0.112677 0.0214127 0.650991 0.5 +-0.0158225 0.127346 0.0227279 0.305628 0.5 +0.000543528 0.123331 0.0344653 0.565165 0.5 +-0.0190668 0.12797 0.0127969 0.519435 0.5 +-0.0663982 0.164105 -0.0192035 0.448278 0.459858 +-0.0677428 0.164471 -0.018256 0.351763 0.474901 +-0.0174894 0.0687336 0.053904 0.595577 0.5 +-0.0164665 0.068805 0.0544258 0.731018 0.5 +-0.0154888 0.0688106 0.054717 0.757489 0.5 +-0.0144966 0.0687907 0.0546395 0.759805 0.5 +-0.0135013 0.0687469 0.0541774 0.788006 0.5 +-0.0125103 0.0687513 0.0543288 0.80691 0.5 +-0.0115046 0.0688083 0.054897 0.785998 0.5 +-0.0104818 0.0688481 0.0551963 0.806506 0.5 +-0.00952254 0.0688375 0.0554289 0.794691 0.5 +-0.00850916 0.0688709 0.0557558 0.786582 0.5 +-0.00750084 0.0688979 0.0559719 0.790614 0.5 +-0.00652053 0.0688834 0.0561767 0.784967 0.5 +-0.00550834 0.0689154 0.0563731 0.779773 0.5 +-0.00450651 0.0689184 0.0565193 0.784133 0.5 +-0.00350265 0.0689326 0.0566398 0.766954 0.5 +-0.00249623 0.0689511 0.056733 0.75014 0.5 +-0.00149713 0.0689596 0.0566805 0.742228 0.5 +-0.000486159 0.0689333 0.056515 0.712574 0.5 +0.000510392 0.0689287 0.0563645 0.675861 0.5 +0.00152278 0.0688979 0.0560686 0.65528 0.414139 +0.0025057 0.0688921 0.0558596 0.639859 0.5 +0.00350877 0.068881 0.0557692 0.663106 0.5 +0.00450508 0.0688823 0.055725 0.686977 0.5 +0.00550935 0.0688576 0.0555484 0.692376 0.5 +0.00650425 0.06886 0.0554952 0.671976 0.5 +0.00751041 0.0688465 0.0554032 0.660614 0.5 +0.00850711 0.0688384 0.055257 0.644447 0.5 +0.00950065 0.0688226 0.0549942 0.525573 0.5 +0.0105243 0.0687767 0.0545753 0.522974 0.478773 +0.0369605 0.105409 -0.00483089 0.55728 0.5 +0.0390081 0.105539 0.000161276 0.569483 0.457946 +0.00181081 0.131692 0.0146438 0.687086 0.5 +0.00444274 0.131539 0.0170385 0.680124 0.5 +-0.0605228 0.155495 0.0235493 0.656802 0.367943 +0.0199666 0.126684 0.0198751 0.4794 0.440057 +0.0415962 0.101461 0.0191676 0.689756 0.5 +-0.047469 0.117985 0.0306301 0.618011 0.5 +0.00750189 0.118272 0.0376599 0.685975 0.300515 +0.00648846 0.118239 0.0378444 0.681747 0.5 +0.00548892 0.118228 0.0378342 0.677311 0.5 +0.00449629 0.118272 0.0381357 0.728599 0.5 +-0.0639127 0.160548 -0.0182872 0.475506 0.5 +-0.0340875 0.177472 -0.00744261 0.221645 0.389391 +-0.0825971 0.103328 -0.00360734 0.376479 0.478977 +-0.0933098 0.126856 0.0132534 0.691628 0.5 +-0.0364979 0.119358 0.0304421 0.567332 0.5 +-0.01578 0.128598 0.00819831 0.683168 0.5 +-0.0636791 0.157483 -0.0138656 0.50389 0.5 +-0.0815281 0.1484 0.0374104 0.462539 0.5 +-0.0297912 0.154227 -0.00467156 0.209483 0.5 +0.03476 0.113033 0.0239837 0.628449 0.5 +-0.0743937 0.157452 -0.00470821 0.237695 0.5 +-0.0104724 0.123683 0.0330383 0.471245 0.5 +0.0436028 0.0973418 0.0171655 0.652671 0.5 +0.0439353 0.0973509 0.0141605 0.558295 0.483482 +-0.0918243 0.128307 0.0322434 0.862085 0.5 +-0.069479 0.123198 0.0530616 0.477361 0.5 +0.0211923 0.12581 0.0217553 0.391156 0.5 +0.0416849 0.100037 0.02216 0.653533 0.5 +0.0428754 0.100088 0.00417324 0.546932 0.5 +0.0425933 0.066459 0.0273252 0.712836 0.5 +0.0435266 0.0664036 0.0265247 0.747201 0.392155 +0.0445305 0.0664178 0.0264316 0.605423 0.5 +0.0454709 0.0664599 0.0266758 0.507971 0.361866 +0.0464907 0.0664648 0.0271426 0.465677 0.5 +0.0474899 0.0664975 0.0274045 0.523211 0.5 +0.0484981 0.0664872 0.0276228 0.466361 0.5 +0.0495021 0.0664943 0.0276338 0.509981 0.5 +0.0505119 0.0665023 0.0275359 0.535711 0.5 +0.0515169 0.0664883 0.0274059 0.601387 0.444801 +0.052528 0.0664738 0.0271694 0.508911 0.5 +0.0535157 0.0664189 0.0268642 0.529666 0.5 +0.0363255 0.10537 -0.00683316 0.46667 0.5 +0.0400335 0.107013 0.011165 0.705069 0.5 +-0.0900384 0.135039 0.0102136 0.628062 0.5 +0.0447245 0.0861403 0.0231669 0.761769 0.5 +-0.0783399 0.174997 -0.0480125 0.257015 0.5 +0.0440584 0.0860884 0.0251529 0.603121 0.478265 +-0.00096127 0.131397 0.0150615 0.648932 0.5 +0.0154483 0.127759 0.0239281 0.467984 0.352842 +0.016279 0.127286 0.0242335 0.466184 0.454393 +0.00535242 0.130989 0.0202309 0.587801 0.5 +-0.000925431 0.131188 0.0179397 0.576372 0.5 +-0.00771141 0.130468 0.0154714 0.613155 0.5 +-0.00211759 0.125578 0.0320366 0.4427 0.5 +0.00866181 0.128565 0.0271896 0.399551 0.443972 +-0.0692325 0.161954 -0.0115912 0.472708 0.5 +-0.0700564 0.162427 -0.0118963 0.47392 0.427192 +-0.0105331 0.127013 0.0275477 0.359688 0.401125 +-0.0116319 0.126956 0.0271535 0.363461 0.408989 +-0.0590284 0.155612 0.0197248 0.763388 0.5 +-0.0599273 0.122373 -0.00867944 0.700525 0.5 +-0.0218698 0.104438 -0.0229686 0.723165 0.5 +-0.033827 0.0901076 -0.0243377 0.690598 0.5 +-0.0348266 0.0900917 -0.0242073 0.693653 0.5 +-0.0358241 0.0900699 -0.0240653 0.629507 0.5 +-0.082826 0.11472 -0.00162443 0.508624 0.426711 +-0.0360677 0.156277 -0.0104898 0.748063 0.5 +-0.0606822 0.0362429 0.0450162 0.415246 0.5 +-0.00381375 0.0896299 -0.0357356 0.782073 0.5 +-0.00582898 0.0896214 -0.0360418 0.748597 0.5 +0.0121355 0.107265 -0.0192728 0.565638 0.474826 +-0.00486881 0.104509 -0.0228932 0.720229 0.5 +0.00913312 0.10443 -0.020596 0.54652 0.5 +-0.0708677 0.158014 -0.00345716 0.560664 0.5 +-0.0655537 0.161293 -0.0160037 0.391714 0.377805 +-0.0465015 0.0689677 0.0402969 0.710023 0.5 +-0.0454899 0.0690197 0.0407796 0.599051 0.5 +-0.0444898 0.0690526 0.0411578 0.61645 0.5 +-0.0434783 0.0690982 0.041489 0.778279 0.5 +-0.042493 0.0690949 0.0416622 0.798299 0.5 +-0.0414999 0.0690877 0.0417125 0.798188 0.5 +-0.0405007 0.0690879 0.0417151 0.788723 0.5 +-0.0394983 0.0690894 0.041721 0.764572 0.5 +-0.0384987 0.0691035 0.0417776 0.741533 0.5 +-0.0374998 0.0691046 0.0417769 0.714229 0.5 +-0.0365043 0.0691064 0.0417512 0.682836 0.5 +-0.0354963 0.0690808 0.0415601 0.661182 0.5 +-0.0345036 0.0690703 0.0414109 0.624308 0.5 +-0.0334941 0.0690232 0.0409338 0.68893 0.5 +-0.0324875 0.068969 0.0402984 0.614323 0.390042 +-0.0315055 0.0689302 0.0397623 0.557979 0.5 +-0.0305029 0.0689001 0.0393777 0.549241 0.5 +-0.0295002 0.0688631 0.0391758 0.635452 0.5 +-0.0284901 0.0688983 0.0393825 0.715523 0.5 +-0.0275554 0.0689002 0.0398598 0.737244 0.5 +-0.0264962 0.0690788 0.0415599 0.709994 0.5 +0.0317014 0.117733 0.0199863 0.621015 0.5 +0.0336732 0.115326 0.0207292 0.638417 0.5 +-0.0288448 0.124881 0.0180835 0.385817 0.458749 +-0.0793976 0.151048 0.0347829 0.347296 0.5 +-0.056711 0.153132 0.0293166 0.389791 0.455071 +-0.0217893 0.122494 0.0280004 0.466657 0.5 +-0.0685258 0.165031 -0.0185494 0.459499 0.5 +-0.0669714 0.163891 -0.0179699 0.429758 0.405584 +-0.0174958 0.0701523 0.0542792 0.62216 0.5 +-0.0164967 0.0701922 0.0547571 0.634825 0.5 +-0.0154911 0.0702181 0.054969 0.763105 0.5 +-0.0144955 0.0701698 0.0547379 0.809713 0.405276 +-0.013497 0.0701643 0.0543951 0.795091 0.5 +-0.0124826 0.0701993 0.05486 0.801492 0.404158 +-0.0115098 0.0702302 0.0553956 0.79512 0.5 +-0.0104698 0.070299 0.0557764 0.77938 0.5 +-0.00948303 0.0703233 0.0561585 0.783072 0.5 +-0.00849613 0.0703395 0.0565554 0.635767 0.4839 +-0.00751 0.070341 0.0568254 0.629938 0.485149 +-0.00649809 0.0703887 0.0571625 0.760214 0.5 +-0.00549985 0.0703921 0.057296 0.767165 0.5 +-0.00450341 0.0703715 0.0573471 0.758565 0.5 +-0.0034971 0.0703995 0.0574239 0.714512 0.5 +-0.00248857 0.0703789 0.0573235 0.561713 0.485262 +-0.00148992 0.070365 0.0570874 0.677466 0.5 +-0.000484486 0.0703477 0.056848 0.664277 0.5 +0.000516139 0.0703294 0.0566091 0.655975 0.5 +0.00151372 0.070315 0.0563646 0.622398 0.5 +0.00251449 0.0702821 0.0560425 0.649736 0.5 +0.00350637 0.0702767 0.0558823 0.668607 0.5 +0.00450679 0.0702611 0.0557926 0.703076 0.5 +0.00550295 0.0702783 0.0558582 0.722281 0.5 +0.00650677 0.0702743 0.0558788 0.698123 0.5 +0.0075074 0.0702645 0.0557506 0.678634 0.5 +0.00852018 0.0702413 0.0555324 0.533095 0.481528 +0.00952067 0.0702149 0.0551678 0.532204 0.442156 +0.0185916 0.116689 0.0359263 0.628075 0.5 +0.0174963 0.116768 0.0361173 0.635361 0.5 +0.0155004 0.116786 0.0363781 0.634824 0.398333 +0.0144965 0.116791 0.0366152 0.655465 0.5 +0.0165016 0.116787 0.0362663 0.642478 0.5 +0.0135086 0.116829 0.0366875 0.566548 0.486541 +0.0124993 0.116805 0.0367613 0.573098 0.479607 +0.00449367 0.115547 0.0400425 0.629168 0.5 +-0.0781375 0.103077 -0.00856917 0.520423 0.5 +-0.0464892 0.117969 0.0304809 0.597182 0.5 +-0.0455006 0.117978 0.0306048 0.58427 0.5 +-0.0445001 0.117958 0.0308281 0.494956 0.5 +-0.0435009 0.117967 0.030956 0.508853 0.5 +0.00349251 0.118288 0.0385113 0.662502 0.5 +-0.00649912 0.118331 0.038456 0.678575 0.403013 +-0.00548585 0.118301 0.0387556 0.652188 0.412134 +-0.0889838 0.099691 0.0193911 0.642739 0.5 +-0.0374964 0.119384 0.0304732 0.573759 0.5 +-0.0899954 0.135014 0.00922069 0.622462 0.5 +-0.0133248 0.129244 0.00909724 0.679139 0.5 +-0.0144945 0.115487 0.0386767 0.559065 0.5 +-0.0534472 0.146228 0.0234079 0.725948 0.5 +-0.0633264 0.159631 -0.0180726 0.455971 0.390754 +-0.00847869 0.123725 0.0338017 0.500448 0.5 +-0.00947834 0.12371 0.0334225 0.467121 0.5 +-0.0886398 0.102364 0.0173768 0.583522 0.485107 +-0.0894314 0.137929 0.0371779 0.651389 0.5 +0.0401119 0.105635 0.0181717 0.699617 0.5 +-0.0704758 0.123201 0.0533571 0.49286 0.470832 +-0.0689448 0.129685 -0.00899835 0.737784 0.5 +-0.0745188 0.135846 0.0503978 0.613636 0.448793 +-0.0764868 0.144228 0.0448323 0.556218 0.5 +0.0425336 0.0678584 0.0273676 0.54196 0.5 +0.0435793 0.0677809 0.0261624 0.756557 0.5 +0.0445696 0.0677675 0.0254424 0.681665 0.5 +0.0455301 0.0677752 0.0254231 0.520832 0.5 +0.0464982 0.0677769 0.0257597 0.442998 0.5 +0.0474976 0.06778 0.0262203 0.42117 0.5 +0.0484971 0.0678077 0.0264809 0.512602 0.5 +0.0494979 0.0678406 0.0265165 0.460865 0.5 +0.0505072 0.0678423 0.0265215 0.514129 0.5 +0.0515085 0.0678015 0.0264788 0.561274 0.5 +0.0525355 0.0678367 0.0261828 0.479935 0.455535 +0.0535161 0.0677623 0.0259787 0.516245 0.478277 +-0.0878641 0.137757 0.00720039 0.555209 0.5 +0.0314293 0.102107 0.036834 0.732194 0.5 +0.044978 0.086159 0.0221711 0.579345 0.5 +-0.0574243 0.0613459 0.0260206 0.251786 0.445935 +-0.0920426 0.126958 0.0362532 0.806636 0.5 +-0.0895466 0.0969995 0.0164128 0.660577 0.5 +0.0408293 0.101363 -0.00180736 0.580134 0.464962 +0.0425261 0.101486 0.00616657 0.564296 0.5 +0.0146203 0.128223 0.0236197 0.487288 0.424656 +0.0120392 0.129427 0.0226627 0.481077 0.44263 +-0.0581897 0.157381 0.00697939 0.193967 0.5 +-0.00127622 0.127442 0.029403 0.366621 0.408864 +0.0166245 0.122097 0.0315907 0.668067 0.5 +-0.0677948 0.160582 -0.0110564 0.349519 0.5 +-0.0684622 0.16137 -0.0113077 0.360572 0.398507 +-0.0477253 0.135673 0.0140062 0.697814 0.5 +-0.0861176 0.152173 0.0250218 0.244488 0.355816 +-0.0760712 0.152304 0.0343668 0.377153 0.5 +-0.0657288 0.163321 -0.0189522 0.437528 0.469812 +-0.0398664 0.104215 -0.0203975 0.821245 0.5 +-0.0679463 0.128236 -0.00906158 0.801453 0.5 +-0.0570341 0.144219 -0.00185162 0.587671 0.481029 +-0.0788514 0.116332 -0.0048797 0.51473 0.5 +-0.0208698 0.104444 -0.0228641 0.700356 0.5 +-0.0728795 0.116451 -0.00740226 0.381625 0.5 +-0.0361905 0.168183 -0.0140562 0.474058 0.5 +-0.0719091 0.107919 -0.010771 0.499561 0.5 +-0.0427983 0.0884442 -0.0218161 0.58604 0.5 +-0.00482566 0.0896201 -0.0359284 0.758717 0.5 +-0.00882418 0.0896578 -0.0365764 0.74466 0.5 +-0.00782909 0.0896438 -0.0364286 0.757802 0.5 +-0.00586693 0.104511 -0.0229142 0.709958 0.5 +-0.0651412 0.159482 -0.0565006 0.41682 0.5 +-0.00281596 0.0896133 -0.0355773 0.779738 0.5 +-0.0679602 0.132601 -0.00851511 0.718843 0.5 +-0.0464909 0.0704463 0.0410366 0.602623 0.5 +-0.0454832 0.0704956 0.0415155 0.61955 0.485333 +-0.0444864 0.070528 0.0418968 0.788741 0.5 +-0.0434937 0.0705308 0.0420517 0.788816 0.5 +-0.0425054 0.0705013 0.0420152 0.783356 0.5 +-0.0414959 0.0705202 0.0419075 0.773624 0.5 +-0.040497 0.0705056 0.0418211 0.774351 0.5 +-0.0394974 0.0705046 0.0418138 0.784754 0.5 +-0.0384971 0.0705176 0.0419076 0.760401 0.5 +-0.0374974 0.0705158 0.0419336 0.727697 0.5 +-0.0364989 0.0705154 0.0419282 0.7021 0.5 +-0.0355056 0.0705073 0.0417804 0.668412 0.5 +-0.0345058 0.0704863 0.0415356 0.622824 0.5 +-0.0334992 0.0704401 0.0410454 0.555291 0.382779 +-0.0325179 0.0704032 0.0404934 0.615998 0.5 +-0.0315001 0.070354 0.040029 0.573017 0.5 +-0.0304972 0.0703216 0.0396594 0.571387 0.5 +-0.0295 0.0703058 0.0395502 0.661082 0.5 +-0.0284992 0.0703316 0.0397848 0.748619 0.5 +-0.0275703 0.070462 0.0404211 0.747032 0.5 +0.0372544 0.109701 0.0220387 0.652653 0.5 +0.036686 0.110763 0.0218417 0.650569 0.5 +-0.0145604 0.127706 0.0231688 0.414552 0.395991 +-0.0581309 0.155502 0.017154 0.713054 0.5 +0.0441694 0.0706598 0.0245614 0.461473 0.448797 +-0.00523434 0.128086 0.0279795 0.278562 0.5 +-0.0710479 0.166372 -0.0194754 0.52891 0.5 +-0.0662562 0.163203 -0.0177078 0.433711 0.5 +-0.055712 0.155088 0.0136896 0.602795 0.402362 +-0.0174765 0.0715932 0.0547125 0.617853 0.5 +-0.01652 0.0715906 0.0550352 0.619628 0.477767 +-0.0155013 0.0716083 0.0551341 0.75365 0.5 +-0.0144862 0.0715775 0.0549247 0.807523 0.390152 +-0.0135947 0.071631 0.0548042 0.794669 0.378574 +-0.0124587 0.0716774 0.0554083 0.820915 0.401293 +-0.0115057 0.0716604 0.0558672 0.787723 0.5 +-0.010497 0.0717087 0.0563199 0.758028 0.5 +-0.00947284 0.0717726 0.0568611 0.648717 0.5 +-0.00848477 0.0718045 0.0573713 0.658796 0.5 +-0.0075062 0.071811 0.0576623 0.646329 0.482129 +-0.00649113 0.0718493 0.0579775 0.743756 0.5 +-0.00549985 0.07185 0.0581365 0.743046 0.5 +-0.00450192 0.0718383 0.058171 0.722295 0.5 +-0.00349422 0.0718336 0.0581766 0.662917 0.5 +-0.00249095 0.0718247 0.0580407 0.637723 0.439477 +-0.00148178 0.0718081 0.0578063 0.497408 0.48313 +-0.000460653 0.0717499 0.0573883 0.489842 0.460653 +0.000514565 0.0717586 0.0570729 0.598881 0.5 +0.00152573 0.0717149 0.0566366 0.592853 0.5 +0.00252738 0.0716721 0.0561852 0.637821 0.437154 +0.00350574 0.071674 0.0559901 0.648785 0.5 +0.00450108 0.0716864 0.0560951 0.694163 0.5 +0.00550383 0.0716948 0.0562222 0.705134 0.5 +0.00650555 0.0716952 0.056225 0.672987 0.5 +0.00750117 0.0716903 0.0560753 0.65837 0.5 +0.0085198 0.0716538 0.0557746 0.518356 0.5 +0.0095201 0.0716259 0.0554078 0.505573 0.470122 +0.010477 0.116818 0.0374755 0.574402 0.330731 +-0.0620027 0.172528 -0.0545971 0.430712 0.5 +-0.0734876 0.127439 0.0525898 0.470614 0.481626 +-0.00449008 0.116939 0.0397737 0.668393 0.5 +-0.00348806 0.11693 0.0398821 0.669654 0.410583 +-0.00249086 0.116945 0.0398999 0.648105 0.5 +-0.00149467 0.116953 0.0400314 0.673638 0.5 +0.0094903 0.116849 0.0377607 0.554289 0.480625 +-0.0519903 0.161388 0.00628165 0.384532 0.45986 +-0.0474929 0.163748 0.00542805 0.487308 0.5 +-0.0885619 0.129493 0.00323888 0.490801 0.5 +-0.0423634 0.121318 -0.0123099 0.602235 0.5 +-0.0735068 0.118971 0.0531919 0.701731 0.5 +-0.0425043 0.117982 0.0312159 0.541055 0.393421 +-0.0405007 0.118003 0.0314814 0.590205 0.5 +-0.00749979 0.118315 0.0383098 0.641625 0.412576 +-0.0725001 0.120391 0.0535845 0.640083 0.5 +-0.0385014 0.119389 0.0303589 0.549452 0.359185 +0.0368255 0.109713 0.0241821 0.529185 0.5 +-0.0532846 0.152692 0.0160461 0.554957 0.5 +-0.0124987 0.115524 0.0391996 0.587566 0.5 +-0.0538929 0.14622 0.0244012 0.738851 0.5 +0.0333375 0.115599 0.0220283 0.622766 0.5 +0.0250594 0.122946 0.0231962 0.578862 0.5 +0.0406194 0.104193 0.00117617 0.464278 0.486967 +0.0381439 0.103967 -0.00387277 0.582411 0.5 +-0.0846334 0.108922 0.00436756 0.446226 0.5 +-0.0278908 0.0903405 -0.0316075 0.33771 0.5 +-0.00240135 0.128537 0.0275513 0.312439 0.366578 +0.042474 0.101514 0.0131646 0.711714 0.5 +-0.0744952 0.144184 0.0450216 0.592685 0.363291 +-0.0754912 0.144221 0.0449451 0.593512 0.5 +-0.0924811 0.125593 0.0372603 0.824129 0.5 +0.0435692 0.0691645 0.0259965 0.702869 0.5 +0.0445518 0.069148 0.0246508 0.6616 0.5 +-0.00944135 0.168135 -0.0197365 0.359593 0.5 +0.0421339 0.102871 0.00816377 0.570298 0.5 +-0.0627003 0.150649 -0.00857321 0.303576 0.5 +0.0484958 0.0691068 0.025078 0.421856 0.5 +0.0495003 0.0691238 0.025332 0.468718 0.5 +-0.0934989 0.122762 0.0122811 0.629644 0.5 +0.0515114 0.0691441 0.0252354 0.444066 0.5 +0.0525192 0.0691267 0.0251103 0.44032 0.478772 +-0.0449903 0.16693 -0.00785376 0.413138 0.327414 +-0.0513967 0.161204 -0.00381805 0.292939 0.5 +-0.0693719 0.180628 -0.057909 0.253404 0.5 +-0.0725404 0.162229 -0.0113532 0.304254 0.5 +-0.0239518 0.123773 0.0227902 0.369603 0.376859 +-0.0204536 0.184888 -0.0139868 0.277604 0.5 +0.0417869 0.088692 -0.00877741 0.616051 0.5 +-0.0634206 0.167809 -0.0425955 0.676128 0.5 +0.0275962 0.102142 0.0400686 0.685256 0.5 +0.0262381 0.119658 0.0279158 0.567574 0.5 +0.0241906 0.121901 0.0271611 0.500088 0.5 +0.0178192 0.126124 0.0248053 0.484003 0.5 +0.00583381 0.129313 0.0261699 0.47914 0.446478 +-0.0543547 0.158623 0.00837339 0.305558 0.344831 +-0.0635975 0.15411 -0.00948093 0.44314 0.360751 +-0.0640946 0.155219 -0.00966954 0.547586 0.372708 +-0.0664541 0.159015 -0.0105538 0.564501 0.410402 +-0.0899696 0.15095 0.0147905 0.20256 0.5 +-0.0325959 0.124521 0.0211556 0.458891 0.5 +-0.0103882 0.129888 0.00873113 0.703889 0.5 +-0.0116527 0.129557 0.00826831 0.692767 0.5 +-0.0128512 0.129269 0.0078276 0.690287 0.5 +-0.0388642 0.104209 -0.02036 0.820815 0.5 +0.00518099 0.090879 -0.0329112 0.75972 0.5 +-0.0192289 0.178619 -0.0235673 0.442383 0.5 +-0.0281256 0.165243 -0.0164075 0.847505 0.5 +-0.0510936 0.156101 -0.00485677 0.37123 0.419006 +-0.0749441 0.129634 -0.00796551 0.42394 0.44361 +-0.0767139 0.070678 0.0244626 0.757943 0.5 +-0.0564238 0.0718073 0.0399857 0.663356 0.5 +-0.0438038 0.0884337 -0.0219011 0.693801 0.5 +-0.00986994 0.104508 -0.0232523 0.71177 0.5 +0.0101263 0.107276 -0.0197522 0.580614 0.5 +-0.0530851 0.151641 -0.00314317 0.483301 0.5 +-0.0709552 0.134052 -0.00817596 0.554761 0.474038 +-0.00687105 0.104506 -0.0230032 0.698599 0.5 +-0.00186382 0.104504 -0.0225214 0.747293 0.5 +-0.0484917 0.0718083 0.0405326 0.738542 0.5 +-0.0474992 0.0718408 0.0410603 0.768226 0.5 +-0.0464862 0.0718998 0.0415251 0.76752 0.5 +-0.0454912 0.0719252 0.0419203 0.668851 0.5 +-0.0444999 0.0719382 0.0422118 0.79805 0.5 +-0.0434973 0.0719505 0.0423325 0.788132 0.5 +-0.0425015 0.0719333 0.0422422 0.771072 0.5 +-0.0414982 0.0719267 0.042103 0.763323 0.5 +-0.0404967 0.071918 0.0419528 0.765102 0.5 +-0.0394983 0.0719214 0.0419294 0.783253 0.5 +-0.0384957 0.0719179 0.0419735 0.786048 0.5 +-0.0374981 0.0719295 0.0420686 0.755852 0.5 +-0.0365004 0.0719314 0.0420432 0.73392 0.5 +-0.0354914 0.0719062 0.0418497 0.681038 0.5 +-0.0344943 0.0718865 0.0415833 0.610145 0.412435 +-0.0334964 0.0718545 0.0411869 0.520649 0.454264 +-0.0324962 0.0718107 0.0406773 0.473427 0.5 +-0.0315034 0.0717826 0.0402663 0.442065 0.5 +-0.0304968 0.071744 0.0399232 0.594766 0.5 +-0.0294931 0.0717523 0.039896 0.685932 0.5 +-0.0285258 0.0717501 0.0402231 0.770087 0.5 +-0.027646 0.071755 0.0409574 0.739914 0.5 +-0.00912413 0.125328 0.0309758 0.400751 0.5 +-0.0265911 0.123944 0.0203778 0.306352 0.448135 +-0.0203273 0.127615 0.0123404 0.520596 0.347885 +-0.0175218 0.187118 -0.0194148 0.271878 0.5 +-0.047302 0.16443 0.00497116 0.467124 0.5 +-0.0693087 0.165593 -0.0188405 0.352017 0.424734 +-0.06502 0.161419 -0.0172527 0.438814 0.5 +-0.0667865 0.156181 0.0155153 0.802614 0.5 +-0.0184625 0.0729785 0.0545802 0.601639 0.5 +-0.0174793 0.0730127 0.0550809 0.603951 0.5 +-0.0164865 0.0730277 0.0553332 0.741369 0.5 +-0.0154933 0.0730227 0.0553537 0.776922 0.5 +-0.0145068 0.0730096 0.0554058 0.789118 0.5 +-0.0134817 0.073078 0.0557755 0.796921 0.5 +-0.0125037 0.0730609 0.0559849 0.775638 0.5 +-0.0115028 0.0730832 0.0562182 0.781622 0.5 +-0.0104955 0.0731168 0.0565579 0.783607 0.5 +-0.00949277 0.073156 0.0570282 0.750122 0.5 +-0.00849692 0.0731924 0.0575239 0.615641 0.5 +-0.00751646 0.0732149 0.0579299 0.625872 0.485649 +-0.00648913 0.0732625 0.0583326 0.612544 0.5 +-0.00551998 0.0732424 0.0584734 0.721158 0.5 +-0.00449908 0.0732747 0.0586205 0.691016 0.5 +-0.0034971 0.0732704 0.0586485 0.64682 0.5 +-0.0024916 0.073257 0.0585379 0.598257 0.5 +-0.00148369 0.0732377 0.0582942 0.57358 0.5 +-0.000474921 0.0732072 0.0579427 0.448503 0.5 +0.000540453 0.0731645 0.0574875 0.450706 0.5 +0.00152589 0.0731231 0.0568629 0.468576 0.410279 +0.00252027 0.0730778 0.0562797 0.592691 0.447904 +0.00350083 0.0730867 0.0562031 0.604071 0.5 +0.00450223 0.0730917 0.0563795 0.656501 0.5 +0.00550411 0.0731036 0.0564845 0.677307 0.5 +0.00650695 0.0731027 0.0564796 0.648428 0.5 +0.00752021 0.073081 0.0562837 0.637036 0.5 +0.00851959 0.0730626 0.056014 0.501383 0.433438 +-0.0205044 0.11679 0.0360351 0.503749 0.5 +-0.0135132 0.116917 0.0382221 0.683003 0.5 +-0.0174998 0.115454 0.0379182 0.554038 0.439799 +-0.0134922 0.122339 0.0335983 0.436268 0.5 +-0.0711473 0.17507 -0.0540267 0.35996 0.429737 +-0.0155327 0.116851 0.0372458 0.562506 0.46135 +-0.0145147 0.116898 0.0378441 0.690745 0.5 +-0.0124867 0.11689 0.0385307 0.56846 0.5 +0.00249078 0.115545 0.0403845 0.632116 0.449459 +-0.0180519 0.128104 0.0102643 0.604541 0.5 +-0.0805084 0.121673 0.0499202 0.662828 0.5 +-0.0724981 0.121807 0.0536688 0.62499 0.5 +0.014393 0.129494 0.0163965 0.610323 0.471824 +-0.0685095 0.148391 0.0402581 0.457406 0.475041 +-0.0745085 0.118967 0.0529255 0.591285 0.485886 +-0.0414996 0.117985 0.0314618 0.576108 0.5 +-0.00850406 0.11834 0.0382239 0.645007 0.5 +-0.0714938 0.120397 0.053531 0.61526 0.5 +-0.0395052 0.119385 0.0302298 0.550825 0.5 +-0.0929753 0.11876 0.0253083 0.826013 0.5 +-0.0255852 0.0930492 -0.0306058 0.260626 0.5 +-0.0134985 0.11551 0.0389419 0.577769 0.5 +-0.0887482 0.102363 0.0163794 0.837743 0.5 +-0.0815485 0.124491 0.0516101 0.653566 0.5 +0.0425401 0.0986672 0.000167984 0.554012 0.5 +0.0402375 0.104169 0.000177419 0.562541 0.474295 +-0.0626979 0.149033 -0.0165859 0.415531 0.480025 +0.0415042 0.104246 0.00816492 0.560779 0.5 +-0.0814657 0.130234 0.0522094 0.467962 0.5 +-0.0755086 0.133058 0.0519758 0.57584 0.5 +0.0447855 0.0917675 0.0181585 0.528504 0.5 +-0.0774688 0.144183 0.0446652 0.524981 0.5 +-0.0838169 0.107636 0.0253505 0.515033 0.5 +0.0416553 0.0900846 -0.00877196 0.520186 0.465622 +0.0435838 0.0705579 0.0258591 0.50799 0.5 +-0.011119 0.163582 -0.018751 0.17813 0.5 +-0.0588172 0.123244 -0.00816875 0.705753 0.5 +-0.052917 0.144693 0.0213981 0.786631 0.5 +-0.0944514 0.122808 0.0172688 0.796399 0.311902 +0.0428559 0.0972978 0.0221679 0.638316 0.5 +0.0430852 0.0973049 0.0211625 0.64265 0.5 +0.0441966 0.0973694 0.0101636 0.574255 0.5 +-0.000867993 0.104495 -0.0223762 0.584725 0.5 +0.0450144 0.0945871 0.00816469 0.580834 0.5 +0.0448957 0.0945828 0.0101613 0.581145 0.459388 +0.0448731 0.0945767 0.0111579 0.578815 0.5 +-0.0735479 0.162209 -0.012171 0.291398 0.5 +-0.0393811 0.128131 0.00244283 0.863234 0.5 +0.0337238 0.11401 0.0250189 0.60704 0.476285 +-0.019434 0.184905 -0.0153275 0.279577 0.5 +-0.0945025 0.125547 0.0202583 0.585568 0.5 +0.00443138 0.126024 0.0314422 0.457047 0.34546 +-0.0454976 0.13168 0.014882 0.421128 0.5 +-0.0334278 0.124984 0.0208436 0.444321 0.5 +-0.000536732 0.10034 0.0474846 0.307462 0.5 +0.0308738 0.115323 0.0282321 0.63537 0.5 +0.0320582 0.11345 0.0286813 0.668829 0.5 +0.0326073 0.112448 0.0288842 0.684635 0.5 +-0.0439578 0.12961 0.0140149 0.513251 0.5 +-0.0631406 0.152896 -0.00931447 0.319189 0.5 +-0.0732189 0.155097 0.0278276 0.83238 0.5 +-0.0102548 0.179004 -0.0295955 0.26918 0.5 +-0.0718118 0.14996 0.0389054 0.430392 0.5 +-0.00805064 0.130356 0.00959263 0.711291 0.5 +-0.0091854 0.130144 0.00917512 0.713524 0.5 +-0.0543656 0.153368 0.0199938 0.435783 0.5 +-0.0654224 0.156324 0.0217941 0.651221 0.5 +0.00418461 0.0908826 -0.0329329 0.72343 0.5 +0.00317447 0.0908801 -0.0331491 0.724217 0.5 +-0.0619388 0.0647772 0.0309092 0.49936 0.45677 +-0.0538047 0.0884108 -0.022116 0.697464 0.5 +-0.0528013 0.0884055 -0.0219839 0.75515 0.5 +-0.051798 0.0884029 -0.0218862 0.777048 0.5 +-0.0585008 0.0732388 0.0410714 0.699327 0.5 +-0.0574944 0.0732758 0.0411576 0.690379 0.5 +-0.0564978 0.0732565 0.0410435 0.679393 0.5 +-0.0553906 0.073233 0.0409139 0.725496 0.5 +-0.0544961 0.0732542 0.0409056 0.742057 0.5 +-0.0534972 0.0732542 0.0410474 0.757807 0.5 +-0.0523543 0.073291 0.0414729 0.727079 0.5 +-0.0513529 0.0733082 0.0416893 0.708247 0.5 +-0.0504955 0.0733248 0.0417999 0.680321 0.5 +-0.0495043 0.073253 0.0416255 0.696934 0.5 +-0.0485008 0.0732772 0.0415918 0.733427 0.5 +-0.0475077 0.0732702 0.0416223 0.738332 0.5 +-0.0464944 0.0733156 0.0418074 0.761929 0.5 +-0.0454969 0.0733342 0.042072 0.769629 0.5 +-0.0444884 0.0733739 0.0424053 0.766153 0.5 +-0.0434944 0.0733818 0.0425428 0.789821 0.5 +-0.0424965 0.0733822 0.0425454 0.779205 0.5 +-0.0415001 0.0733705 0.042415 0.758539 0.5 +-0.0404948 0.0733395 0.0422389 0.763649 0.5 +-0.0395018 0.0733502 0.0421461 0.758596 0.5 +-0.0384993 0.0733372 0.0420402 0.777838 0.5 +-0.0374936 0.0733328 0.0420467 0.770797 0.410856 +-0.0364993 0.0733348 0.0420574 0.75601 0.5 +-0.0354954 0.0733233 0.0419636 0.709258 0.5 +-0.0344935 0.0733008 0.0417052 0.632025 0.5 +-0.0335401 0.0732865 0.0413362 0.56097 0.344933 +-0.0325067 0.0732308 0.0407775 0.508377 0.5 +-0.0315215 0.0732244 0.0404306 0.494713 0.5 +-0.030493 0.0731979 0.0402297 0.663608 0.5 +-0.0294789 0.0732089 0.0403736 0.753299 0.5 +-0.02858 0.0731702 0.040795 0.775591 0.5 +-0.0274573 0.0734015 0.0426855 0.722085 0.5 +-0.0177178 0.125534 0.0250034 0.371711 0.411475 +-0.0650198 0.154365 0.0307072 0.881158 0.5 +0.0117574 0.130329 0.0182774 0.748344 0.5 +-0.0460993 0.132381 0.0175967 0.602683 0.5 +-0.0701684 0.165994 -0.0191552 0.341766 0.443754 +-0.0644192 0.16051 -0.0170316 0.468331 0.395887 +0.00440154 0.12483 0.0329119 0.512333 0.5 +-0.0887181 0.123977 0.00228597 0.486045 0.355731 +-0.0184891 0.0743773 0.0548673 0.607912 0.5 +-0.0174978 0.0744121 0.0553624 0.616605 0.5 +-0.0164935 0.0744329 0.0555937 0.645883 0.475075 +-0.0154906 0.0744572 0.0558178 0.648699 0.479458 +-0.0144845 0.0744882 0.056153 0.647341 0.5 +-0.0134963 0.0744967 0.0564394 0.788306 0.5 +-0.0124992 0.0745024 0.0565746 0.786907 0.5 +-0.0114929 0.0745162 0.0566704 0.791265 0.5 +-0.0105044 0.0745085 0.0567054 0.78605 0.5 +-0.00951606 0.0745243 0.0569833 0.774863 0.5 +-0.00849476 0.0745791 0.0575173 0.723977 0.5 +-0.00751948 0.0746046 0.0579524 0.713982 0.5 +-0.00651495 0.0746355 0.058305 0.589412 0.438386 +-0.00551889 0.0746529 0.0585785 0.678647 0.450838 +-0.00450103 0.0746726 0.0587526 0.654754 0.448793 +-0.00349992 0.0746709 0.0587938 0.619114 0.5 +-0.00249354 0.0746702 0.0587588 0.579146 0.5 +-0.00149257 0.0746611 0.0586297 0.55978 0.5 +-0.000472995 0.0746288 0.0583091 0.533549 0.5 +0.000529964 0.0745913 0.0578265 0.523043 0.5 +0.00152786 0.0745369 0.0570999 0.511934 0.460145 +0.00251466 0.0744821 0.0563666 0.691255 0.5 +0.00350858 0.074484 0.056374 0.559826 0.5 +0.00450201 0.0745047 0.0565768 0.603411 0.5 +0.00550174 0.0745058 0.0566062 0.600123 0.5 +0.00650523 0.0745046 0.0565842 0.612782 0.5 +0.00750123 0.074495 0.0564449 0.610387 0.5 +0.00849936 0.0744764 0.056192 0.586512 0.5 +-0.0285061 0.116641 0.0323888 0.575232 0.5 +-0.0195037 0.11681 0.0364149 0.544917 0.5 +0.00549638 0.115538 0.0397987 0.625637 0.5 +-0.01852 0.115493 0.0376203 0.546467 0.422572 +-0.0164901 0.115444 0.0380258 0.566245 0.5 +-0.0185046 0.116829 0.0366774 0.587168 0.5 +-0.0175094 0.116845 0.0368185 0.568664 0.5 +-0.0165066 0.11684 0.0369313 0.550762 0.5 +0.00149278 0.115548 0.0405079 0.640736 0.5 +0.000499429 0.115573 0.0406664 0.633442 0.5 +0.00237701 0.131635 0.0162813 0.684083 0.5 +0.00049871 0.116947 0.0399069 0.685174 0.5 +0.00149552 0.116934 0.0397718 0.661936 0.5 +-0.0663081 0.150341 0.0377708 0.484034 0.446592 +-0.0755221 0.11896 0.0528247 0.601767 0.5 +-0.031497 0.117989 0.0308563 0.569633 0.5 +-0.00949582 0.118295 0.0381649 0.627884 0.5 +-0.0704838 0.120388 0.0533274 0.596026 0.449542 +-0.0404957 0.119327 0.0301663 0.535454 0.5 +-0.061806 0.172532 -0.0555873 0.422031 0.469043 +-0.0414124 0.128336 0.00169512 0.854554 0.5 +-0.0276791 0.155231 -0.00339809 0.139755 0.329034 +-0.0610765 0.167736 -0.0598039 0.358909 0.45373 +-0.0805286 0.124537 0.0519983 0.659772 0.5 +0.00750154 0.123796 0.0339733 0.542916 0.5 +-0.0870357 0.141902 0.00919077 0.583528 0.5 +-0.093713 0.126863 0.0152623 0.762794 0.5 +0.0309797 0.118122 0.0225615 0.579705 0.5 +-0.0379623 0.174733 -0.00453553 0.257223 0.223032 +-0.0764978 0.13308 0.0521415 0.586426 0.45083 +-0.0735123 0.142806 0.0460464 0.63179 0.5 +-0.0784392 0.144133 0.0443751 0.410039 0.477601 +0.0420841 0.090131 -0.00780186 0.429461 0.5 +0.0251411 0.10209 0.0417928 0.702675 0.5 +0.0137177 0.0926941 0.0515916 0.523615 0.474148 +-0.0628077 0.166262 -0.0415912 0.668963 0.5 +-0.0633942 0.159878 -0.0495887 0.70746 0.5 +0.0435886 0.091694 0.0241609 0.60696 0.5 +0.0371007 0.10968 0.00116733 0.516602 0.481774 +-0.0897565 0.140652 0.029182 0.696245 0.5 +-0.0263202 0.0930635 -0.029586 0.271139 0.5 +-0.0744578 0.144386 -0.00789461 0.417075 0.5 +0.0440694 0.0973609 0.0121636 0.562386 0.5 +0.0440256 0.0973461 0.0131583 0.558007 0.5 +0.0441637 0.0973591 0.0111613 0.565941 0.5 +0.0366972 0.106807 -0.00382741 0.470315 0.5 +-0.00549411 0.130838 0.0134037 0.694089 0.5 +-0.0724136 0.156792 -0.00114359 0.283738 0.344761 +-0.0235762 0.184403 -0.0123621 0.166659 0.5 +-0.0940215 0.120122 0.0233001 0.747966 0.5 +-0.0672387 0.155112 0.00519073 0.843631 0.5 +-0.075576 0.155851 0.0124034 0.741047 0.267716 +-0.0550812 0.153793 0.0226168 0.511987 0.5 +0.0282931 0.118599 0.0272385 0.587714 0.347558 +-0.0395373 0.172163 -0.000837254 0.420821 0.5 +-0.0579073 0.152669 0.031812 0.391488 0.5 +-0.0752191 0.155599 0.0242023 0.807369 0.5 +0.00976243 0.126251 0.030462 0.431093 0.480926 +-0.0453894 0.130637 0.0193744 0.541467 0.5 +-0.00449056 0.130995 0.0108991 0.721088 0.5 +-0.00563766 0.13083 0.0104776 0.719137 0.5 +-0.00684325 0.130599 0.0100344 0.716614 0.5 +-0.0353577 0.174409 -0.00212011 0.350165 0.43602 +-0.00926648 0.100073 0.0477845 0.295763 0.5 +-0.0174382 0.127681 0.00469302 0.708401 0.5 +-0.0186888 0.127303 0.00423263 0.70046 0.5 +-0.0799097 0.0706493 0.0132254 0.5669 0.5 +-0.0910478 0.113254 0.017639 0.672702 0.381749 +-0.062494 0.0746373 0.0407954 0.610448 0.476331 +-0.061487 0.0746791 0.0411579 0.615356 0.474952 +-0.0604756 0.0747304 0.0414998 0.634349 0.5 +-0.0594953 0.0747194 0.0418121 0.647273 0.5 +-0.058489 0.0747585 0.0420339 0.765686 0.5 +-0.0574953 0.0747475 0.0420563 0.752774 0.5 +-0.056498 0.07472 0.0419593 0.736126 0.5 +-0.0554996 0.0746996 0.0418498 0.748664 0.5 +-0.0544977 0.0747139 0.0418232 0.754001 0.5 +-0.0534934 0.0747559 0.0420439 0.772919 0.5 +-0.0524951 0.0747684 0.0423102 0.774603 0.5 +-0.0514866 0.0748352 0.0426181 0.744714 0.5 +-0.050496 0.074792 0.0427038 0.711667 0.5 +-0.049499 0.0747526 0.0426395 0.674446 0.5 +-0.0484939 0.0747239 0.0424157 0.686338 0.444172 +-0.0474977 0.0747299 0.0422594 0.699625 0.5 +-0.0464974 0.074738 0.042075 0.715238 0.5 +-0.0454927 0.0747515 0.0421648 0.730762 0.5 +-0.0444968 0.0747696 0.0424527 0.722661 0.5 +-0.0434927 0.0747943 0.0426652 0.752035 0.5 +-0.0424937 0.0748068 0.0427898 0.784319 0.5 +-0.0414978 0.0748079 0.0427759 0.778035 0.5 +-0.0404951 0.0747761 0.0426102 0.72256 0.5 +-0.0394923 0.074754 0.042367 0.730587 0.5 +-0.038499 0.0747376 0.0420783 0.739629 0.5 +-0.0374985 0.0747273 0.041938 0.748994 0.5 +-0.0364949 0.0747255 0.0419725 0.742634 0.5 +-0.0354986 0.0747267 0.0419454 0.689177 0.5 +-0.0345032 0.0747169 0.0417978 0.606964 0.5 +-0.0335027 0.074683 0.04142 0.541615 0.5 +-0.032492 0.0746402 0.0409516 0.493903 0.5 +-0.0314973 0.0746234 0.0406619 0.657701 0.5 +-0.0304795 0.0746468 0.0405648 0.76041 0.5 +-0.0295455 0.0745738 0.040676 0.838149 0.5 +-0.0287306 0.074519 0.0412207 0.724412 0.5 +-0.0690929 0.156328 0.0219534 0.622551 0.5 +-0.0569847 0.153801 0.0277423 0.984723 0 +-0.0388249 0.122181 0.0278208 0.375296 0.5 +-0.0894432 0.151569 0.0164701 0.213661 0.405957 +-0.0631219 0.156103 0.0153645 0.820998 0.5 +-0.0166094 0.128602 0.0136868 0.533064 0.5 +-0.0678285 0.156225 0.0151421 0.813141 0.5 +-0.0154583 0.128246 0.0199229 0.321522 0.434317 +-0.0194809 0.0757644 0.0547346 0.596344 0.5 +-0.0185025 0.0757876 0.0552584 0.598211 0.5 +-0.0175019 0.0758159 0.0556202 0.609649 0.5 +-0.0164937 0.0758406 0.0558352 0.636318 0.48371 +-0.0154881 0.0758696 0.0561745 0.652279 0.5 +-0.0144819 0.0759021 0.0565083 0.657843 0.5 +-0.0134956 0.0759117 0.0568004 0.662839 0.5 +-0.0125098 0.0759113 0.0569785 0.78747 0.5 +-0.0114916 0.0759418 0.0571389 0.791119 0.5 +-0.010501 0.0759377 0.0571751 0.798823 0.5 +-0.00950387 0.075936 0.0571919 0.765285 0.5 +-0.00851553 0.0759427 0.057359 0.739929 0.5 +-0.00751182 0.075985 0.0578234 0.714098 0.5 +-0.00651273 0.0760152 0.058184 0.687302 0.5 +-0.00550346 0.076042 0.0585145 0.652534 0.5 +-0.00451238 0.0760575 0.0586977 0.625362 0.5 +-0.00350074 0.0760658 0.0587997 0.595749 0.5 +-0.00249266 0.0760635 0.0587913 0.580431 0.5 +-0.00148881 0.0760516 0.0586512 0.580998 0.5 +-0.000477761 0.0760312 0.0584165 0.556304 0.483315 +0.000516136 0.0760027 0.0580883 0.454091 0.433456 +0.00152343 0.0759482 0.0573355 0.420709 0.5 +0.00252933 0.0758769 0.0564116 0.530955 0.477277 +0.00350533 0.0758855 0.0563752 0.533874 0.477787 +0.00450914 0.0758818 0.0564153 0.546564 0.5 +0.00550249 0.0758881 0.0564988 0.57235 0.447419 +0.00650569 0.075888 0.056486 0.592374 0.5 +0.00750673 0.0758763 0.0563548 0.490111 0.486455 +0.00851655 0.0758606 0.0561295 0.572996 0.5 +0.00950453 0.0758273 0.0557308 0.465094 0.477391 +-0.00149487 0.115594 0.0408235 0.654863 0.5 +-0.00348845 0.115565 0.0406522 0.637838 0.5 +-0.0264982 0.113889 0.035131 0.480727 0.5 +-0.00549555 0.115561 0.0401898 0.653037 0.5 +-0.0295006 0.116619 0.032366 0.584644 0.5 +-0.0305006 0.116618 0.0322439 0.594307 0.5 +-0.0325031 0.116645 0.0321616 0.621597 0.5 +-0.0335001 0.116617 0.0321346 0.65774 0.387951 +0.0064767 0.115498 0.0396093 0.642406 0.5 +-0.0114976 0.116917 0.038689 0.599405 0.447521 +-0.00947746 0.116894 0.0392479 0.620585 0.427756 +-0.000499113 0.11695 0.0400287 0.679951 0.5 +-0.0866178 0.151117 0.0269024 0.297002 0.406371 +-0.0895137 0.135181 0.0391853 0.647861 0.466045 +-0.0304982 0.117934 0.0308066 0.551981 0.5 +-0.0135115 0.118298 0.0374588 0.622068 0.5 +-0.0694862 0.120387 0.0531587 0.557514 0.5 +-0.041505 0.119362 0.0299569 0.493403 0.5 +-0.016864 0.128415 0.0107007 0.593624 0.5 +-0.0635616 0.174109 -0.0525858 0.521868 0.467642 +0.0127826 0.0926962 0.0520031 0.526047 0.470869 +-0.0635173 0.159862 -0.0515858 0.691143 0.5 +-0.0795325 0.124539 0.0521412 0.658609 0.5 +0.00650419 0.123782 0.0339598 0.550636 0.5 +0.0393973 0.0899152 -0.0117774 0.676152 0.5 +-0.0708312 0.0951391 -0.0158707 0.504359 0.5 +-0.0251882 0.121015 0.0283088 0.413515 0.319607 +-0.00359581 0.130946 0.00835725 0.739156 0.5 +-0.0745085 0.13306 0.0516401 0.555357 0.5 +-0.0725374 0.138625 0.0483183 0.621565 0.471286 +-0.0170948 0.127006 0.022289 0.308724 0.5 +-0.0623314 0.0357831 0.0433788 0.532543 0.5 +0.0409333 0.0900371 -0.0097907 0.53675 0.5 +-0.0556334 0.121157 -0.00996616 0.523608 0.5 +-0.0424949 0.168218 0.00285877 0.400386 0.5 +-0.0934681 0.120116 0.0253121 0.834011 0.5 +0.0414143 0.104258 0.0111621 0.697391 0.5 +-0.0888835 0.0983415 0.0204012 0.694496 0.5 +-0.0855696 0.139064 0.00222203 0.491944 0.5 +-0.0617185 0.155298 -0.026582 0.721546 0.5 +-0.0748917 0.16378 -0.0359985 0.458525 0.324439 +-0.0939853 0.126886 0.0172543 0.774183 0.5 +-0.049095 0.140149 0.0113941 0.657159 0.5 +-0.048723 0.166988 -0.000980568 0.322064 0.5 +-0.0484929 0.162245 0.00645185 0.493549 0.5 +-0.0195101 0.114089 0.03835 0.551557 0.5 +0.0405338 0.105622 0.0141627 0.697034 0.5 +-0.0713739 0.162409 -0.0439557 0.365011 0.420984 +-0.0636484 0.15559 0.00937973 0.767035 0.5 +-0.0172476 0.12413 0.0281151 0.53666 0.5 +0.0261502 0.120654 0.0264581 0.524179 0.5 +-0.0384621 0.172216 -0.000421117 0.313502 0.478032 +-0.0162799 0.127645 0.0211086 0.294292 0.44608 +-0.0267774 0.122204 0.0247423 0.41915 0.5 +-0.0757916 0.155001 0.00503825 0.318509 0.5 +-0.00219357 0.131295 0.0117423 0.743237 0.5 +-0.00334167 0.13115 0.0113211 0.729835 0.5 +-0.0388302 0.173903 -0.00342781 0.347584 0.5 +-0.0375897 0.174214 -0.00298303 0.37566 0.5 +-0.0364509 0.174337 -0.00256774 0.338622 0.5 +-0.014877 0.12853 0.00563728 0.695305 0.5 +-0.016194 0.128088 0.0051496 0.680776 0.5 +-0.000691629 0.100255 0.0478272 0.312259 0.5 +-0.0746238 0.166812 -0.0222329 0.256887 0.338578 +-0.0628076 0.0881622 -0.0190458 0.649547 0.5 +-0.0634812 0.0760895 0.041143 0.617101 0.5 +-0.0624979 0.0760891 0.0414437 0.640686 0.5 +-0.0614823 0.0761372 0.0417782 0.648764 0.487507 +-0.0604976 0.0761414 0.0420756 0.646746 0.5 +-0.0594928 0.0761776 0.0424443 0.78655 0.5 +-0.0584967 0.0761953 0.0427061 0.778459 0.5 +-0.057498 0.0762057 0.0428357 0.778207 0.5 +-0.0564973 0.0762116 0.0428205 0.761591 0.5 +-0.055499 0.0761852 0.0427309 0.741243 0.5 +-0.054499 0.0761691 0.0426143 0.761168 0.5 +-0.0534988 0.0761753 0.0426023 0.779203 0.5 +-0.0524919 0.0762203 0.042799 0.800386 0.5 +-0.0514919 0.076238 0.0430598 0.762472 0.5 +-0.0505002 0.0762293 0.0432414 0.725091 0.5 +-0.0494979 0.0762481 0.043343 0.694304 0.5 +-0.0484988 0.0762375 0.0432182 0.654069 0.5 +-0.0474967 0.0761987 0.0428659 0.649935 0.463432 +-0.0464963 0.076159 0.0423522 0.659541 0.5 +-0.0454972 0.0761548 0.042184 0.676337 0.5 +-0.0444942 0.0761733 0.0424299 0.66632 0.5 +-0.0434831 0.0762058 0.0427502 0.69239 0.5 +-0.042485 0.0762268 0.0429934 0.751965 0.5 +-0.0414957 0.0762285 0.0430404 0.7743 0.5 +-0.0405031 0.0762353 0.0429954 0.731059 0.5 +-0.0394998 0.076195 0.0426907 0.698842 0.5 +-0.0385157 0.0761871 0.0423388 0.70162 0.5 +-0.0375015 0.0761535 0.0421853 0.697975 0.5 +-0.0365028 0.0761422 0.0420368 0.671789 0.5 +-0.0355049 0.076131 0.0419036 0.619644 0.404776 +-0.0345095 0.0761212 0.0417709 0.567137 0.5 +-0.0335058 0.0760991 0.0415371 0.502514 0.5 +-0.0325056 0.0760815 0.0412743 0.605096 0.5 +-0.0314965 0.0760483 0.040909 0.698725 0.5 +-0.0305089 0.0760274 0.0408429 0.823995 0.5 +-0.0296253 0.0759773 0.0411397 0.854451 0.5 +-0.0720629 0.166594 -0.0198059 0.38633 0.416991 +-0.0730865 0.16659 -0.0202232 0.284645 0.408701 +-0.0743971 0.166132 -0.0206985 0.23448 0.398558 +-0.0080847 0.125292 0.0313586 0.409267 0.5 +-0.0178664 0.12824 0.013233 0.521421 0.5 +-0.0638466 0.159519 -0.0168205 0.519334 0.5 +-0.0335771 0.177292 -0.00581839 0.333028 0.5 +-0.0810787 0.154935 0.0192662 0.458827 0.5 +-0.0204558 0.0772045 0.0549311 0.595703 0.4544 +-0.0194892 0.0771957 0.0553527 0.722227 0.5 +-0.018487 0.0772258 0.0557066 0.749534 0.5 +-0.0174998 0.0772311 0.0559767 0.738034 0.5 +-0.0165098 0.0772307 0.0561424 0.758826 0.5 +-0.0154942 0.0772732 0.0564359 0.763383 0.5 +-0.0144972 0.0772805 0.0565653 0.775864 0.5 +-0.0134941 0.0773082 0.0569169 0.771401 0.5 +-0.0125077 0.0773203 0.0572074 0.636961 0.5 +-0.0115193 0.0773584 0.0574493 0.646314 0.47999 +-0.0105025 0.0773598 0.0576687 0.757392 0.5 +-0.00950395 0.0773592 0.0576807 0.731882 0.5 +-0.00849865 0.0773628 0.0576515 0.70632 0.5 +-0.00749863 0.0773617 0.0576592 0.721617 0.5 +-0.00650962 0.0773868 0.0579538 0.694588 0.449721 +-0.00550708 0.0774167 0.0583085 0.528008 0.46652 +-0.0045144 0.0774415 0.0584948 0.502489 0.469214 +-0.00350236 0.0774419 0.0585703 0.584514 0.46618 +-0.00249513 0.0774404 0.0585569 0.718503 0.5 +-0.00149233 0.077429 0.0585147 0.69926 0.5 +-0.000475449 0.077417 0.0583222 0.532687 0.5 +0.000533962 0.0773889 0.0579724 0.532574 0.5 +0.00152141 0.0773467 0.0574533 0.670931 0.5 +0.00250507 0.0772798 0.0565792 0.908425 0.5 +0.00352032 0.0772514 0.0561756 0.670652 0.5 +0.00450615 0.0772491 0.0561317 0.574418 0.5 +0.00550075 0.0772523 0.0562045 0.489858 0.5 +0.0065091 0.0772612 0.0561769 0.494801 0.481635 +0.00750831 0.0772509 0.056126 0.61244 0.5 +0.00850648 0.0772375 0.0559821 0.481948 0.5 +0.00950521 0.0772084 0.0556135 0.472575 0.453673 +-0.0394943 0.116662 0.0325452 0.637307 0.5 +-0.00248723 0.115552 0.0407434 0.656947 0.5 +-0.0275013 0.113896 0.0350206 0.542904 0.5 +-0.0285016 0.113902 0.0349068 0.57611 0.5 +-0.00449865 0.115591 0.0404715 0.64048 0.5 +-0.0384792 0.116679 0.0322191 0.655225 0.416617 +-0.0374929 0.116616 0.0320198 0.672488 0.5 +-0.0364958 0.116629 0.0319219 0.671198 0.5 +-0.0314993 0.116609 0.0322344 0.608179 0.5 +-0.0255237 0.116678 0.0329121 0.47602 0.5 +-0.0104786 0.116885 0.0389916 0.622674 0.428257 +0.00249558 0.116934 0.0396534 0.652829 0.5 +0.0425837 0.100055 0.002186 0.535082 0.5 +-0.0255703 0.121939 -0.00698176 0.52669 0.5 +0.0378536 0.10688 -0.000832307 0.550839 0.5 +-0.0145239 0.118305 0.0371093 0.634903 0.5 +-0.0684871 0.120374 0.0527878 0.679757 0.5 +-0.0434968 0.119301 0.0295385 0.455703 0.5 +0.00128405 0.131584 0.0158806 0.633778 0.336168 +-0.0615895 0.155312 -0.0215829 0.443336 0.5 +0.0394741 0.102755 0.0261825 0.630131 0.5 +-0.0839185 0.112898 0.00127069 0.442779 0.447255 +-0.0785283 0.124553 0.0522615 0.687629 0.5 +0.00550365 0.123767 0.0339438 0.576231 0.5 +-0.08472 0.111015 0.033569 0.745977 0.5 +-0.0944357 0.121484 0.0222838 0.68769 0.5 +-0.0804698 0.130248 0.0526854 0.414549 0.5 +0.0227948 0.124775 0.0223512 0.405864 0.5 +-0.0755038 0.138646 0.0489499 0.592622 0.5 +-0.0735163 0.138649 0.0485985 0.623012 0.5 +0.0152822 0.129138 0.0167187 0.608255 0.5 +-0.0696939 0.158144 -0.0499358 0.360984 0.5 +-0.0708234 0.155869 0.0257344 0.508414 0.5 +-0.0861178 0.0953813 0.000442214 0.479894 0.5 +-0.0365035 0.168234 0.000585726 0.485881 0.5 +-0.061968 0.159998 -0.0366167 0.427869 0.464762 +-0.0380638 0.174118 -0.00995608 0.348298 0.5 +0.0319925 0.114417 -0.00326976 0.643727 0.467426 +0.0364319 0.108205 -0.00282023 0.450213 0.464638 +0.0368294 0.108237 -0.00182731 0.525992 0.5 +-0.0855607 0.111744 0.0263451 0.595923 0.5 +-0.00398687 0.126095 0.0313534 0.40356 0.427605 +-0.00305215 0.125834 0.0316944 0.416036 0.372714 +-0.0185368 0.123815 0.0276913 0.467387 0.328327 +0.0247646 0.122114 0.0259409 0.493996 0.5 +0.0105257 0.123354 0.0336723 0.554298 0.5 +-0.0591073 0.155657 0.0168017 0.723016 0.330994 +0.00543597 0.131652 0.0145423 0.78822 0.5 +0.00440907 0.131695 0.0141669 0.78761 0.5 +-0.0417745 0.172541 -0.00446528 0.193335 0.5 +-0.0401847 0.173392 -0.00391542 0.254527 0.210398 +-0.0111714 0.129564 0.00700207 0.699612 0.5 +-0.012432 0.12921 0.00653602 0.698953 0.5 +-0.0136228 0.128915 0.00609854 0.697792 0.5 +-0.0723372 0.156305 0.0208189 0.495317 0.413864 +-0.0630381 0.154049 0.0314099 0.894299 0.5 +-0.046713 0.131987 0.00556897 0.500322 0.477863 +-0.0121811 0.0984293 0.0498089 0.251688 0.406801 +-0.0645013 0.0774777 0.0413253 0.758028 0.5 +-0.0634962 0.0775171 0.0416907 0.783635 0.5 +-0.0624928 0.0775409 0.0419345 0.799024 0.5 +-0.0614832 0.0775692 0.0421583 0.801201 0.5 +-0.06047 0.0776106 0.0424994 0.788803 0.5 +-0.059475 0.0776368 0.0428908 0.652547 0.5 +-0.0584858 0.0776493 0.0431837 0.797171 0.5 +-0.0574976 0.0776487 0.0433498 0.786196 0.5 +-0.0564979 0.0776594 0.043476 0.77665 0.5 +-0.0554974 0.0776601 0.0434775 0.753471 0.5 +-0.054499 0.0776179 0.0432703 0.741459 0.5 +-0.0534984 0.0776159 0.0431279 0.772418 0.5 +-0.0524939 0.0776533 0.0431774 0.776474 0.5 +-0.051497 0.0776631 0.0434639 0.759382 0.5 +-0.0504985 0.0776737 0.0437561 0.703405 0.5 +-0.0494972 0.0776899 0.0438666 0.676478 0.5 +-0.0484929 0.0776741 0.0437591 0.641818 0.5 +-0.0474977 0.0776489 0.0433419 0.780538 0.5 +-0.0465092 0.0776139 0.042786 0.595352 0.477918 +-0.0454968 0.0775542 0.0422104 0.642995 0.5 +-0.0444848 0.0775765 0.0423436 0.617588 0.385936 +-0.0434863 0.0776041 0.0427475 0.653782 0.5 +-0.0424851 0.0776249 0.0430145 0.688779 0.5 +-0.0414935 0.0776367 0.0431734 0.735643 0.5 +-0.0404979 0.0776396 0.043177 0.719384 0.5 +-0.0395047 0.0776369 0.0429957 0.712711 0.5 +-0.0385096 0.0776202 0.0427509 0.69216 0.5 +-0.0375072 0.0775843 0.0424046 0.684198 0.5 +-0.0365126 0.077567 0.0421306 0.62458 0.5 +-0.0355104 0.0775398 0.0419002 0.575057 0.5 +-0.0345086 0.0775176 0.0416541 0.520296 0.5 +-0.0335034 0.0774945 0.0414157 0.473737 0.5 +-0.0324932 0.0774699 0.0412179 0.633247 0.374981 +-0.0314795 0.0774889 0.0410863 0.731202 0.5 +-0.030561 0.0774145 0.0410957 0.843262 0.5 +-0.0296666 0.0774462 0.0418826 0.771067 0.5 +-0.0714969 0.156283 0.0152923 0.70256 0.5 +-0.0688653 0.0860793 0.0429202 0.59211 0.5 +-0.066692 0.1555 0.0271809 0.902663 0.5 +-0.0797525 0.15498 0.0124103 0.695105 0.5 +-0.0656284 0.162324 -0.0174746 0.401554 0.5 +-0.0322885 0.177691 -0.00536129 0.284689 0.273501 +-0.0929984 0.129612 0.0152364 0.781723 0.5 +-0.0913439 0.11607 0.03131 0.438266 0.5 +-0.0204762 0.0786229 0.0556935 0.579571 0.477226 +-0.0194871 0.0786419 0.0560662 0.574054 0.5 +-0.018505 0.0786406 0.056357 0.712433 0.5 +-0.0174935 0.0786826 0.056671 0.680868 0.5 +-0.0164906 0.0786958 0.056769 0.726636 0.5 +-0.0155011 0.0786732 0.0567092 0.739894 0.5 +-0.0144971 0.0786767 0.0566892 0.749847 0.5 +-0.0134995 0.0786948 0.0569449 0.754471 0.418999 +-0.012498 0.078722 0.0572931 0.73794 0.5 +-0.011501 0.0787467 0.0576654 0.741287 0.5 +-0.0105236 0.0787711 0.0579243 0.628385 0.47517 +-0.00949762 0.078776 0.0580091 0.708402 0.5 +-0.00849993 0.0787667 0.0579153 0.677711 0.5 +-0.00750217 0.0787518 0.0577101 0.689347 0.5 +-0.00650833 0.0787624 0.0577507 0.676661 0.5 +-0.00550703 0.0787847 0.0579843 0.63849 0.5 +-0.00451076 0.0788064 0.0581316 0.585043 0.484066 +-0.00350137 0.0788045 0.0582113 0.471245 0.5 +-0.00249775 0.0787967 0.0582683 0.54812 0.5 +-0.00149388 0.0787876 0.0581499 0.528661 0.5 +-0.000483407 0.0787781 0.0579546 0.526961 0.5 +0.000523827 0.0787529 0.057707 0.664555 0.469546 +0.00153616 0.078717 0.0572683 0.703976 0.5 +0.00252455 0.078679 0.0567626 0.67163 0.5 +0.00352005 0.0786345 0.0561775 0.950529 0.5 +0.00451349 0.0786214 0.0559314 0.57749 0.5 +0.00550646 0.078617 0.0558754 0.604722 0.451878 +0.00651017 0.0786147 0.0558016 0.613889 0.453483 +0.0075079 0.0786108 0.055765 0.494807 0.5 +0.00850767 0.0786 0.0556334 0.593864 0.5 +0.00950687 0.0785812 0.0553914 0.493585 0.5 +0.0175012 0.11539 0.036772 0.655821 0.5 +0.0135076 0.115425 0.0371825 0.690621 0.5 +-0.0295052 0.113904 0.0347936 0.598652 0.5 +-0.0325124 0.113906 0.0343195 0.605726 0.5 +0.00348766 0.115539 0.0402625 0.638231 0.5 +-0.00749303 0.115552 0.0402888 0.644296 0.5 +-0.0435047 0.116629 0.0323741 0.56331 0.5 +-0.0354976 0.116636 0.0319301 0.678147 0.5 +-0.0344972 0.116614 0.0320154 0.661506 0.389988 +-0.0245528 0.116739 0.0335827 0.433929 0.439233 +-0.00548676 0.116904 0.0394711 0.67131 0.412777 +0.00349012 0.116915 0.0395094 0.6144 0.5 +0.0376424 0.109732 0.0031582 0.629935 0.5 +-0.0853981 0.109039 0.0213496 0.698028 0.5 +-0.0255191 0.118043 0.0319974 0.458716 0.420546 +-0.0124889 0.118271 0.037774 0.513222 0.5 +-0.0764848 0.142819 0.0460732 0.56473 0.363675 +-0.0444963 0.119293 0.0294103 0.581998 0.5 +0.00495998 0.131626 0.0157979 0.756854 0.298541 +-0.0773727 0.156953 -0.0129034 0.890926 0.5 +0.038604 0.108395 0.0191762 0.71573 0.5 +-0.0455019 0.122005 0.0261109 0.629569 0.5 +-0.0775213 0.124569 0.0523637 0.694733 0.5 +0.00450339 0.123789 0.033846 0.569896 0.5 +-0.0497701 0.140145 0.0153991 0.761861 0.5 +-0.0884159 0.102321 0.0103913 0.748126 0.5 +-0.079509 0.130274 0.0528999 0.441941 0.480342 +0.00747725 0.131195 0.0181386 0.701441 0.332834 +-0.0745142 0.138634 0.0488155 0.611273 0.444598 +0.00214512 0.131665 0.0104804 0.757257 0.5 +-0.0171987 0.127433 0.00332106 0.688399 0.5 +-0.07951 0.149797 0.0367578 0.411444 0.5 +-0.0336421 0.175583 -0.0129563 0.384317 0.5 +-0.0514963 0.157854 0.00954267 0.51331 0.5 +-0.0723264 0.176481 -0.0540086 0.327611 0.5 +-0.0810179 0.0964125 -0.00756981 0.514152 0.5 +0.0283215 0.117455 0.0287048 0.628656 0.5 +-0.0265539 0.180361 -0.00771033 0.259863 0.423491 +-0.0679859 0.155562 0.00782161 0.830788 0.5 +-0.0676126 0.155322 0.00651001 0.840042 0.5 +0.0232877 0.123385 0.0253956 0.454562 0.5 +-0.0645148 0.15586 0.0250316 0.573779 0.401656 +-0.0865509 0.152927 0.0144746 0.267781 0.5 +0.00646546 0.131591 0.014917 0.766584 0.5 +-0.0781312 0.100777 0.0347873 0.697079 0.5 +-0.0434907 0.171345 -0.00503558 0.264771 0.5 +-0.00877042 0.130092 0.00788453 0.713449 0.5 +-0.00997021 0.129828 0.00744342 0.706474 0.5 +-0.079214 0.155524 0.0184351 0.529124 0.5 +-0.0768992 0.155831 0.0192356 0.569451 0.359708 +-0.0757456 0.155966 0.0196325 0.544518 0.5 +-0.0934962 0.117401 0.0173034 0.667612 0.5 +-0.0550659 0.154073 0.0197239 0.405523 0.5 +-0.0814436 0.153873 0.00890807 0.493946 0.5 +-0.0258145 0.0894344 -0.0348302 0.442635 0.5 +-0.0644951 0.0789605 0.0422031 0.75214 0.5 +-0.0634884 0.0789934 0.0424288 0.778387 0.5 +-0.0624977 0.0789785 0.042462 0.788612 0.5 +-0.0615068 0.0789665 0.042503 0.799165 0.5 +-0.0604863 0.0790224 0.042794 0.795366 0.5 +-0.0594798 0.0790546 0.0431577 0.796184 0.5 +-0.0585036 0.0790577 0.0434985 0.651158 0.5 +-0.0574727 0.0791252 0.0438951 0.650308 0.5 +-0.0564853 0.0791423 0.0441771 0.786817 0.5 +-0.0554963 0.0791301 0.0442202 0.769208 0.5 +-0.0544966 0.0791235 0.0440855 0.74183 0.5 +-0.0534968 0.0790911 0.0438637 0.737492 0.5 +-0.0524965 0.0790864 0.0437156 0.759622 0.5 +-0.0514974 0.0791051 0.0438079 0.765213 0.5 +-0.0504985 0.079101 0.0439987 0.718805 0.5 +-0.0494996 0.0791204 0.0440794 0.670492 0.5 +-0.0484873 0.0790818 0.0439275 0.658752 0.5 +-0.0475187 0.0790945 0.0436556 0.790409 0.5 +-0.0465355 0.0790498 0.0431447 0.743602 0.40376 +-0.0454873 0.0789625 0.0423892 0.621648 0.472285 +-0.0444976 0.0789577 0.0421738 0.635631 0.5 +-0.0434926 0.0789866 0.0425224 0.633637 0.5 +-0.0424937 0.0790081 0.0428161 0.615072 0.5 +-0.0414913 0.0790271 0.0430475 0.687944 0.5 +-0.0404902 0.0790417 0.0431478 0.730225 0.5 +-0.0395279 0.079033 0.0429651 0.736186 0.398918 +-0.0384976 0.0790115 0.0428361 0.719025 0.5 +-0.0375089 0.0790164 0.0426336 0.665428 0.5 +-0.0364996 0.0789928 0.0425809 0.597358 0.5 +-0.0355107 0.0789772 0.0422885 0.519695 0.5 +-0.0344916 0.0789231 0.04184 0.461279 0.453515 +-0.0335041 0.0789099 0.0415331 0.544764 0.5 +-0.0324984 0.0788891 0.0412743 0.610876 0.5 +-0.0315145 0.0788556 0.0411289 0.727739 0.5 +-0.0305755 0.0788685 0.0415824 0.787293 0.5 +-0.0295938 0.0789709 0.0427962 0.738628 0.5 +-0.075369 0.155134 0.0270903 0.43067 0.5 +-0.0595891 0.155231 0.0238846 0.621599 0.5 +-0.0348698 0.176878 -0.00628812 0.294769 0.5 +-0.031161 0.177923 -0.0048433 0.241938 0.385577 +-0.0230309 0.0906523 0.0522978 0.542701 0.463452 +-0.00834781 0.129635 0.0224773 0.423525 0.5 +-0.0847627 0.109032 0.02334 0.694681 0.5 +-0.0886162 0.100967 0.00940891 0.526789 0.5 +-0.0204853 0.0800483 0.0563065 0.557699 0.5 +-0.0195125 0.0800523 0.0567242 0.565489 0.475271 +-0.0184886 0.0801089 0.0571361 0.66078 0.5 +-0.0174884 0.0801344 0.0573382 0.665194 0.5 +-0.0165008 0.0800909 0.0572191 0.681591 0.5 +-0.0155018 0.080076 0.0569734 0.710915 0.5 +-0.0144892 0.0800879 0.0568709 0.722134 0.5 +-0.0135001 0.0800899 0.0570677 0.711469 0.5 +-0.0124916 0.0801274 0.0575032 0.696208 0.5 +-0.0115071 0.0801438 0.0578104 0.71377 0.5 +-0.0104953 0.0801622 0.0580036 0.709275 0.5 +-0.00950254 0.0801627 0.0580817 0.696984 0.5 +-0.00849807 0.0801615 0.0580203 0.664165 0.5 +-0.0074977 0.0801462 0.0578122 0.649073 0.5 +-0.00649785 0.0801379 0.0576218 0.653337 0.5 +-0.00550326 0.0801395 0.0576107 0.668024 0.472979 +-0.0045041 0.0801506 0.0577231 0.776348 0.5 +-0.00350013 0.0801522 0.057807 0.580384 0.479006 +-0.00249685 0.08015 0.0577289 0.711164 0.5 +-0.00149437 0.0801423 0.0576885 0.687721 0.5 +-0.000488424 0.0801341 0.0575904 0.682063 0.5 +0.000521824 0.0801146 0.0573693 0.69456 0.5 +0.00150698 0.0801002 0.0571866 0.543175 0.5 +0.00252706 0.0800582 0.0567791 0.528086 0.5 +0.00351619 0.0800296 0.056385 0.544474 0.466229 +0.00451933 0.0800063 0.0560543 0.571115 0.5 +0.00551566 0.0799926 0.0558154 0.605313 0.5 +0.00652044 0.0799801 0.0556018 0.615627 0.5 +0.00751862 0.0799738 0.0554444 0.609108 0.5 +0.00851174 0.0799624 0.0552814 0.604488 0.478232 +0.00951792 0.0799496 0.0550675 0.424956 0.485927 +0.0154945 0.115387 0.0371086 0.671575 0.5 +0.0145027 0.115416 0.0371643 0.688607 0.5 +-0.0305099 0.113915 0.0346878 0.621273 0.421109 +-0.0315077 0.113893 0.0345441 0.616765 0.5 +-0.00648871 0.115533 0.0401374 0.651039 0.5 +-0.0104895 0.115533 0.0397944 0.622458 0.5 +-0.0115041 0.115551 0.0394745 0.597914 0.5 +-0.0415032 0.116675 0.0325492 0.625623 0.5 +-0.0265128 0.116639 0.0325108 0.523517 0.5 +-0.0235521 0.116765 0.0343279 0.522009 0.5 +-0.00649106 0.116924 0.0392844 0.652516 0.5 +0.00648697 0.11688 0.0387497 0.658542 0.5 +0.0391019 0.106936 0.00217583 0.453609 0.468076 +-0.0326284 0.178159 -0.00692862 0.335431 0.5 +-0.0265289 0.11806 0.03154 0.518535 0.394277 +-0.0114929 0.118282 0.0379089 0.561696 0.5 +-0.0415089 0.165252 0.00421093 0.436043 0.5 +-0.0425085 0.119367 0.0297171 0.463858 0.5 +-0.07744 0.155698 0.0205089 0.502914 0.5 +-0.0735116 0.140055 0.0477493 0.641496 0.5 +-0.0225807 0.159177 -0.00302445 0.332095 0.5 +-0.0464641 0.122081 0.0270508 0.734094 0.5 +-0.076502 0.12459 0.0526576 0.716445 0.5 +0.00350232 0.123774 0.0338316 0.590139 0.5 +-0.0859344 0.107632 0.00736881 0.491408 0.455375 +-0.0424487 0.125177 -0.00834623 0.60318 0.5 +-0.0784998 0.130283 0.0530344 0.531121 0.452311 +-0.0715049 0.147007 0.0421623 0.578259 0.455606 +-0.0295052 0.11528 0.03366 0.599488 0.5 +-0.0927384 0.122733 0.00927055 0.309094 0.468872 +0.0117209 0.130528 0.015412 0.85487 0.5 +-0.0804968 0.149757 0.0362335 0.40514 0.5 +0.0449223 0.0903552 0.00117592 0.502087 0.5 +0.0227019 0.123147 0.0266031 0.460566 0.5 +-0.0825008 0.107588 0.0273509 0.486678 0.5 +-0.0270163 0.155641 -0.00359794 0.18334 0.5 +-0.0263139 0.182659 -0.010558 0.194534 0.372621 +0.0159015 0.122788 0.0313235 0.659989 0.5 +-0.0739197 0.151223 0.0366634 0.364727 0.5 +-0.0436117 0.125739 0.0201433 0.472028 0.413108 +0.0200436 0.125383 0.0241901 0.660965 0.356309 +0.0225187 0.123964 0.0251042 0.438285 0.274046 +-0.0417803 0.126317 0.0192991 0.463695 0.430449 +-0.003188 0.127967 0.0287063 0.292768 0.468886 +0.00846774 0.13132 0.015646 0.777021 0.5 +-0.0296012 0.120713 0.0267425 0.423455 0.441927 +0.00161401 0.13159 0.0117114 0.754136 0.278378 +0.000580692 0.131584 0.0113306 0.762038 0.5 +-0.0312754 0.118165 0.0306394 0.565094 0.368187 +-0.080479 0.155159 0.0180021 0.516751 0.5 +-0.0833163 0.106091 -0.000625527 0.341089 0.347157 +-0.0818376 0.116236 -0.00283916 0.556162 0.5 +-0.0920057 0.11611 0.0343124 0.506489 0.5 +0.0248331 0.123944 0.0188283 0.509438 0.5 +0.0255922 0.123349 0.0191129 0.536365 0.5 +-0.0665386 0.0804536 0.042224 0.632223 0.5 +-0.0655112 0.0803784 0.0426229 0.630692 0.5 +-0.0644842 0.0804582 0.0430441 0.778832 0.5 +-0.0634956 0.0804499 0.0432131 0.778914 0.5 +-0.0624905 0.0804598 0.0431805 0.774427 0.5 +-0.0615036 0.0804118 0.0430159 0.770991 0.5 +-0.0604943 0.0804378 0.0430854 0.786074 0.5 +-0.0594862 0.0804633 0.0433033 0.79517 0.5 +-0.0584823 0.080492 0.0436889 0.791155 0.5 +-0.0574874 0.0805202 0.0440851 0.796257 0.5 +-0.0564979 0.0805451 0.0445004 0.789948 0.5 +-0.0554837 0.0805968 0.0447827 0.782751 0.5 +-0.0544975 0.080589 0.0448325 0.74444 0.5 +-0.0535039 0.0805657 0.0446207 0.721855 0.408714 +-0.052501 0.0805516 0.0443114 0.730549 0.5 +-0.0514921 0.0804912 0.0440592 0.746753 0.5 +-0.0505067 0.0805184 0.044061 0.752391 0.397412 +-0.0494929 0.0804959 0.044039 0.699516 0.399968 +-0.0484976 0.0805051 0.0439961 0.672309 0.5 +-0.0474927 0.0804818 0.0437565 0.645218 0.5 +-0.0465231 0.0804789 0.0433941 0.6275 0.5 +-0.0454994 0.0804154 0.0426755 0.621165 0.447965 +-0.044489 0.0803636 0.042222 0.65139 0.457048 +-0.0434981 0.0803632 0.0422528 0.617938 0.5 +-0.042501 0.0803745 0.0423542 0.638673 0.398693 +-0.0415029 0.0803953 0.042616 0.663183 0.393861 +-0.0405081 0.080404 0.0427771 0.712874 0.5 +-0.0394882 0.0804267 0.0429074 0.738298 0.5 +-0.038495 0.0804525 0.0431634 0.730242 0.5 +-0.0375019 0.0804666 0.0432825 0.675696 0.5 +-0.0365138 0.0804626 0.0431357 0.593037 0.5 +-0.0355149 0.0804148 0.0426568 0.634132 0.5 +-0.0344927 0.0803488 0.0420944 0.529763 0.5 +-0.0334943 0.0803079 0.0415842 0.522266 0.5 +-0.0324906 0.080327 0.0414535 0.594713 0.5 +-0.0315243 0.0802674 0.0412906 0.715592 0.5 +-0.0305987 0.0803029 0.0419758 0.724984 0.5 +-0.0295471 0.0804664 0.0436378 0.636068 0.5 +-0.0600179 0.155783 0.0193707 0.770818 0.5 +-0.0872247 0.152479 0.0216964 0.262532 0.5 +-0.0857877 0.152992 0.0221351 0.250247 0.416029 +-0.0119089 0.128954 0.021205 0.717335 0.5 +-0.0265193 0.12549 0.0159805 0.490579 0.5 +-0.0850483 0.109026 0.0223524 0.693865 0.5 +-0.0287178 0.121983 -0.00700749 0.492681 0.5 +-0.0228073 0.184465 -0.0170667 0.222019 0.304164 +-0.0204789 0.081458 0.0566556 0.531283 0.5 +-0.0194927 0.0814879 0.0571676 0.542382 0.5 +-0.0184902 0.0815159 0.0575038 0.676825 0.5 +-0.0174947 0.0815257 0.0576296 0.681637 0.5 +-0.0164962 0.0815146 0.0575151 0.67633 0.5 +-0.0154864 0.0814755 0.0571167 0.688356 0.381085 +-0.0144969 0.0814706 0.0569355 0.691621 0.5 +-0.0134986 0.081495 0.0573009 0.689554 0.5 +-0.0125091 0.0815143 0.0575917 0.683232 0.5 +-0.0115085 0.0815323 0.0578355 0.684858 0.5 +-0.0104972 0.0815462 0.0580111 0.568922 0.5 +-0.00949805 0.0815484 0.0580308 0.67432 0.5 +-0.00849679 0.081545 0.0579523 0.647912 0.5 +-0.00749897 0.0815283 0.0577578 0.831686 0.5 +-0.00649844 0.0814993 0.0573243 0.829112 0.5 +-0.00550026 0.0815011 0.0573318 0.665947 0.5 +-0.00450509 0.0815118 0.0573962 0.823408 0.5 +-0.00350098 0.0815126 0.05747 0.604912 0.5 +-0.00249882 0.081515 0.0574957 0.584771 0.5 +-0.00149717 0.0815096 0.0574492 0.589624 0.5 +-0.000491404 0.0814979 0.0573536 0.595199 0.5 +0.000511137 0.0814953 0.0573473 0.588281 0.5 +0.00151312 0.081484 0.0572224 0.596375 0.5 +0.00251501 0.0814623 0.0569927 0.476572 0.5 +0.00351281 0.081445 0.056735 0.475224 0.485001 +0.00451331 0.0814276 0.0565046 0.489605 0.486121 +0.00552563 0.0813962 0.0561869 0.61289 0.5 +0.00650836 0.0813916 0.0558754 0.615861 0.5 +0.00752119 0.0813632 0.0555605 0.493542 0.484102 +0.00853139 0.0813381 0.0552215 0.497107 0.5 +0.0341932 0.113962 0.0237708 0.60806 0.476072 +-0.0534714 0.115278 0.0343029 0.928439 0.5 +-0.0225355 0.115413 0.0360839 0.535101 0.446682 +-0.0235661 0.115415 0.0353667 0.518805 0.471584 +-0.00949145 0.115547 0.0400498 0.615454 0.5 +0.00748061 0.115492 0.0392535 0.645503 0.422917 +-0.0245658 0.115393 0.0346209 0.742102 0.5 +-0.00349196 0.114194 0.0413026 0.652547 0.438873 +-0.0364943 0.115224 0.0327734 0.670054 0.5 +-0.0275167 0.116662 0.0324113 0.555699 0.5 +-0.022546 0.116788 0.03495 0.424803 0.5 +-0.00748374 0.116886 0.0393445 0.630755 0.5 +0.0084768 0.116844 0.0380952 0.545674 0.427419 +-0.0781478 0.107183 -0.00659237 0.582204 0.5 +-0.0765193 0.119025 0.0524244 0.586551 0.5 +0.0420636 0.0915328 -0.00679501 0.454284 0.478416 +-0.0104844 0.118266 0.038122 0.605874 0.5 +-0.0144999 0.162187 -0.0103051 0.256611 0.361651 +-0.0454948 0.119311 0.0290591 0.578752 0.5 +-0.0123701 0.125297 0.0298351 0.421119 0.5 +-0.0725153 0.142823 0.0458217 0.624958 0.5 +0.000998881 0.131517 0.0100563 0.766422 0.5 +0.0251748 0.123444 0.0203849 0.466234 0.451404 +-0.0754942 0.124603 0.052984 0.573159 0.5 +0.00247406 0.123881 0.0337357 0.60015 0.5 +-0.0838969 0.104764 -0.000610535 0.415954 0.5 +-0.0880434 0.125329 0.00027907 0.477893 0.5 +-0.0774969 0.130279 0.0531227 0.616205 0.476355 +-0.0932568 0.121548 0.0382795 0.612387 0.469507 +-0.0794946 0.12171 0.0507273 0.554544 0.485333 +-0.0895151 0.151559 0.0181181 0.242146 0.5 +-0.0815042 0.149744 0.0353513 0.39285 0.5 +-0.0766567 0.112144 0.0469767 0.498936 0.5 +-0.0774993 0.127442 0.0532862 0.672151 0.5 +0.0144985 0.11402 0.0378951 0.674071 0.5 +-0.037534 0.168232 0.00175297 0.507416 0.464036 +-0.0766831 0.148629 -0.00786722 0.604451 0.5 +-0.0669196 0.157864 -0.00782765 0.399217 0.5 +-0.0738652 0.150214 0.0382196 0.405576 0.311322 +-0.0765172 0.154938 0.0266851 0.752251 0.5 +0.0175138 0.12671 0.0232635 0.407366 0.452989 +-0.0623911 0.154382 0.0301734 0.917936 0.5 +-0.0723713 0.156038 0.0237254 0.84682 0.5 +-0.0135439 0.125168 0.0294386 0.412999 0.357914 +0.00944321 0.131132 0.0160037 0.784602 0.5 +-0.067283 0.161835 -0.0137578 0.334465 0.454235 +0.00276097 0.131717 0.0121378 0.756994 0.5 +-0.0857334 0.153425 0.016223 0.304497 0.411735 +-0.0843259 0.153929 0.0166903 0.459227 0.5 +-0.0360471 0.125746 -0.0036679 0.92573 0.5 +-0.0742502 0.161028 -0.0329547 0.39691 0.5 +0.0224569 0.125562 0.0179459 0.478284 0.420996 +0.0232801 0.125085 0.0182493 0.473726 0.443986 +0.0240885 0.124582 0.018553 0.486661 0.5 +-0.0278605 0.124718 0.0184442 0.339345 0.5 +-0.0256554 0.124701 0.019279 0.348749 0.419477 +-0.0665019 0.0818141 0.0428543 0.653573 0.5 +-0.0654928 0.0818627 0.0433416 0.656287 0.5 +-0.0645056 0.0818668 0.0436415 0.658977 0.5 +-0.063492 0.0819119 0.043822 0.792993 0.5 +-0.0624997 0.0818785 0.0437679 0.762202 0.5 +-0.0615004 0.0818818 0.0435978 0.760211 0.401453 +-0.0604913 0.0818799 0.0434166 0.766631 0.5 +-0.0594903 0.081873 0.0434438 0.797222 0.5 +-0.0584923 0.0818911 0.043717 0.789495 0.5 +-0.0574741 0.0819362 0.0441691 0.757735 0.5 +-0.0564798 0.081975 0.044689 0.75146 0.5 +-0.0554773 0.0820103 0.045038 0.776556 0.394299 +-0.0544906 0.0820201 0.0451936 0.734857 0.5 +-0.0534999 0.0820142 0.0450601 0.716218 0.5 +-0.0525108 0.0819776 0.0447141 0.709657 0.409316 +-0.0514947 0.0819216 0.0442721 0.725227 0.5 +-0.0504965 0.0819144 0.0441383 0.716977 0.5 +-0.0494951 0.0819134 0.044146 0.710112 0.5 +-0.0484982 0.0819185 0.0441136 0.671692 0.5 +-0.0474843 0.0818872 0.0439119 0.659202 0.5 +-0.0464991 0.0818806 0.0436011 0.647507 0.5 +-0.0454963 0.0818291 0.0431013 0.592992 0.469112 +-0.0444953 0.0817848 0.0424707 0.764755 0.5 +-0.0434949 0.0817618 0.042266 0.787342 0.5 +-0.0424979 0.0817557 0.0420871 0.639209 0.5 +-0.0414824 0.0817867 0.0423837 0.675771 0.5 +-0.0404837 0.0818282 0.0429123 0.676849 0.5 +-0.0394764 0.081876 0.0433844 0.747887 0.5 +-0.0384853 0.0819001 0.0436414 0.719704 0.5 +-0.0374987 0.0819015 0.0436538 0.690103 0.5 +-0.0365029 0.0818729 0.0434567 0.609904 0.5 +-0.0355255 0.0818589 0.0431427 0.632775 0.5 +-0.0345218 0.0818067 0.0425242 0.532442 0.5 +-0.0334936 0.0817447 0.0419617 0.696242 0.329731 +-0.0324907 0.0817336 0.0416408 0.776511 0.5 +-0.0315082 0.0817114 0.0416031 0.666625 0.5 +-0.0306612 0.0816984 0.0420491 0.658811 0.5 +-0.0295465 0.0819132 0.0441437 0.636794 0.5 +-0.086324 0.106283 0.0073644 0.49554 0.464548 +-0.0861009 0.106274 0.00635995 0.490688 0.464806 +-0.0907151 0.116093 0.0293225 0.468471 0.453888 +-0.0857477 0.109049 0.020349 0.703704 0.5 +-0.0865136 0.106289 0.0083757 0.736427 0.5 +-0.0858632 0.106258 0.00536057 0.49824 0.5 +-0.0863919 0.099468 0.00241821 0.65379 0.5 +0.000747713 0.131321 0.00709666 0.757545 0.5 +-0.0204805 0.0828473 0.0567838 0.502536 0.5 +-0.0194987 0.0828823 0.05729 0.518211 0.475588 +-0.0184875 0.0829081 0.0576141 0.662814 0.5 +-0.0175006 0.0829087 0.0576844 0.675835 0.5 +-0.0164977 0.0828905 0.0574138 0.850459 0.5 +-0.0154785 0.0828416 0.0569929 0.673688 0.474251 +-0.014497 0.082865 0.0570346 0.653235 0.5 +-0.0135008 0.082884 0.0573146 0.689965 0.5 +-0.012496 0.0828987 0.0575341 0.664332 0.5 +-0.0115038 0.082913 0.0576973 0.664853 0.5 +-0.0105023 0.0829243 0.0578427 0.560045 0.464907 +-0.00949546 0.0829261 0.0578441 0.665143 0.470474 +-0.00849594 0.0829198 0.0577964 0.814354 0.5 +-0.00750778 0.0828941 0.0575015 0.821611 0.379912 +-0.00644119 0.0828529 0.0570838 0.701692 0.455939 +-0.00549842 0.0828666 0.0570203 0.720478 0.467536 +-0.00450662 0.0828853 0.0572758 0.690024 0.463532 +-0.00350072 0.0828956 0.0574459 0.643292 0.5 +-0.00249881 0.0829011 0.0575494 0.626947 0.5 +-0.00149801 0.0828985 0.0574954 0.626844 0.5 +-0.000496629 0.0828922 0.0574621 0.647988 0.5 +0.000507304 0.0828912 0.0574668 0.640098 0.5 +0.00151221 0.0828796 0.0573767 0.620738 0.5 +0.00251304 0.0828672 0.0572444 0.61234 0.5 +0.00351301 0.0828608 0.0571024 0.614611 0.5 +0.0045246 0.0828376 0.0569094 0.500928 0.5 +0.00551778 0.0828244 0.0566316 0.490619 0.482709 +0.00651309 0.0828012 0.0562471 0.502681 0.448647 +-0.0682487 0.153053 0.0340661 0.386508 0.357169 +0.0125018 0.115423 0.0374065 0.680028 0.5 +-0.0874475 0.125307 -0.000719081 0.67828 0.5 +-0.00320104 0.131164 0.014241 0.715848 0.5 +-0.0805311 0.123088 0.0509172 0.544221 0.5 +-0.00849662 0.115566 0.0401952 0.612606 0.5 +0.0414749 0.104231 0.00716597 0.544355 0.5 +0.0165049 0.115408 0.0369209 0.660228 0.5 +-0.00149662 0.114206 0.0415504 0.641872 0.5 +-0.002483 0.114172 0.0414823 0.678077 0.430776 +-0.0404977 0.116683 0.0325662 0.641117 0.37769 +0.0184751 0.082463 0.0515958 0.491924 0.475524 +-0.0215064 0.116765 0.0355266 0.454237 0.5 +-0.00849374 0.116931 0.0393004 0.606328 0.5 +0.00748556 0.116867 0.0384917 0.684359 0.5 +-0.0494919 0.154959 0.0103413 0.616456 0.5 +-0.0247385 0.124904 0.000549003 0.758017 0.5 +-0.0285052 0.11799 0.0309781 0.484557 0.5 +-0.0174811 0.118153 0.0357243 0.546417 0.5 +-0.0464975 0.163768 0.00545168 0.486552 0.5 +-0.046469 0.119345 0.0289808 0.642232 0.5 +-0.0808289 0.138985 -0.00281163 0.711956 0.5 +-0.0715222 0.142818 0.0455702 0.618803 0.5 +-0.0810735 0.143155 -0.000828212 0.641961 0.5 +-0.00877695 0.169647 -0.023748 0.268894 0.430011 +-0.074497 0.124608 0.0532356 0.65413 0.5 +0.0411799 0.0844321 -0.00979241 0.428388 0.489037 +0.00919687 0.124582 -0.00824181 0.555015 0.5 +0.0446243 0.0959671 0.00617079 0.573464 0.448778 +-0.0764966 0.130271 0.0529935 0.736123 0.5 +-0.070517 0.146976 0.0420031 0.582857 0.5 +-0.073507 0.121801 0.0535653 0.64749 0.5 +0.0395669 0.101281 -0.00480928 0.549544 0.5 +0.0441819 0.0945484 0.0191589 0.514543 0.463579 +-0.042499 0.113906 0.034677 0.672617 0.5 +0.041327 0.0986069 0.0251647 0.527231 0.479525 +0.0389203 0.10838 0.0161659 0.708561 0.5 +-0.0384878 0.168246 0.00236894 0.475155 0.5 +0.0423363 0.101455 0.00317956 0.528099 0.5 +-0.0336328 0.126783 0.00457249 0.889936 0.5 +-0.0682521 0.15944 -0.00832765 0.371 0.465113 +-0.067572 0.158668 -0.00806913 0.407808 0.443548 +-0.0629092 0.156144 0.021238 0.709192 0.5 +0.0151438 0.128336 0.0223847 0.389117 0.5 +-0.0643705 0.154697 0.0294695 0.906009 0.5 +-0.0381244 0.127641 0.0146907 0.591635 0.394887 +-0.0611505 0.153585 0.0321143 0.399892 0.5 +0.0131047 0.129972 0.0173477 0.565086 0.5 +-0.0679623 0.16261 -0.0140168 0.334118 0.5 +0.00385238 0.131766 0.0125385 0.780741 0.5 +-0.0871129 0.152836 0.0157593 0.236237 0.5 +-0.0665146 0.16661 -0.0580261 0.470191 0.5 +-0.0295306 0.123946 -0.00125424 0.855663 0.5 +0.0208388 0.126564 0.0173475 0.564362 0.5 +0.0216627 0.126095 0.0176515 0.473735 0.363249 +-0.072593 0.155911 0.00171291 0.401288 0.366685 +-0.0716902 0.155937 0.00211062 0.526163 0.406537 +-0.00405506 0.101077 0.0451334 0.175096 0 +-0.0675595 0.163657 -0.0167503 0.342091 0.5 +-0.0668255 0.162993 -0.016474 0.418587 0.5 +-0.0664798 0.0832826 0.043443 0.643886 0.5 +-0.0655003 0.083298 0.0438708 0.637701 0.5 +-0.0644896 0.0833289 0.0440861 0.77477 0.5 +-0.0634907 0.0833477 0.0441845 0.788146 0.5 +-0.0624968 0.0833205 0.0441176 0.772305 0.5 +-0.0614985 0.0833224 0.0439406 0.752282 0.5 +-0.0604975 0.0832903 0.0437356 0.754077 0.5 +-0.0594934 0.0832968 0.0436941 0.790063 0.5 +-0.0584862 0.0833066 0.0438144 0.790334 0.5 +-0.0574832 0.0833327 0.0441985 0.770536 0.5 +-0.0564789 0.0833746 0.0446901 0.728998 0.5 +-0.0554857 0.0834027 0.0450839 0.729551 0.5 +-0.0544934 0.0834141 0.0452404 0.744842 0.5 +-0.0534986 0.0833862 0.0450488 0.732671 0.5 +-0.0524965 0.0833785 0.044899 0.717199 0.5 +-0.0514954 0.0833657 0.0447762 0.696453 0.5 +-0.0504972 0.083371 0.044762 0.6988 0.5 +-0.0494922 0.0833478 0.0446801 0.676223 0.5 +-0.0484907 0.0833394 0.0445457 0.672025 0.5 +-0.0474984 0.0833402 0.0443799 0.659336 0.5 +-0.0464961 0.0833304 0.0442498 0.608114 0.5 +-0.045504 0.0832988 0.0437099 0.553067 0.473153 +-0.0445094 0.0832466 0.0430632 0.73027 0.5 +-0.0435029 0.0832144 0.0426759 0.758857 0.5 +-0.0424907 0.0831788 0.0422885 0.63516 0.467317 +-0.041491 0.0832013 0.0425516 0.635108 0.371838 +-0.0404793 0.0832528 0.0431634 0.669283 0.5 +-0.0394783 0.0832832 0.0435432 0.73375 0.5 +-0.0384845 0.0833049 0.0437838 0.719317 0.5 +-0.0374978 0.0833038 0.0438252 0.692028 0.5 +-0.0365053 0.0832925 0.043701 0.610625 0.5 +-0.0355281 0.0832646 0.0432735 0.62467 0.395472 +-0.0345081 0.0832025 0.0425625 0.530563 0.370802 +-0.0334971 0.0831472 0.0419572 0.665394 0.5 +-0.0324967 0.0831278 0.0417023 0.799033 0.5 +-0.0315191 0.0831203 0.0417649 0.659167 0.5 +-0.0306281 0.0831438 0.0423752 0.623398 0.5 +-0.029443 0.0834063 0.0447309 0.649944 0.5 +-0.0683767 0.176522 -0.0580176 0.563817 0.5 +-0.0879726 0.100935 0.0073995 0.490254 0.5 +-0.0883814 0.100948 0.00841627 0.509717 0.457728 +-0.0855607 0.103501 0.00239284 0.464259 0.464861 +-0.0855438 0.106245 0.00446783 0.476452 0.423764 +-0.0891956 0.099693 0.0183885 0.632507 0.5 +-0.0893171 0.0996957 0.0173941 0.61225 0.5 +-0.000398209 0.131157 0.00667235 0.766825 0.5 +-0.020484 0.0842242 0.0566713 0.494561 0.5 +-0.019494 0.0842608 0.0571688 0.506002 0.5 +-0.0184932 0.0842766 0.0574008 0.804692 0.5 +-0.017501 0.0842912 0.0575736 0.853867 0.5 +-0.0164643 0.0842755 0.0572298 0.843982 0.374174 +-0.0155024 0.084237 0.0568519 0.833743 0.5 +-0.0145005 0.0842486 0.056982 0.631413 0.5 +-0.0135056 0.0842656 0.0572305 0.691656 0.5 +-0.0124981 0.0842783 0.057419 0.840676 0.5 +-0.0114962 0.0842854 0.0575311 0.83815 0.5 +-0.0104999 0.0842933 0.0575891 0.543956 0.5 +-0.00949578 0.084298 0.0576062 0.540872 0.5 +-0.00849356 0.0842936 0.0575382 0.819024 0.5 +-0.0074932 0.0842694 0.0572981 0.844699 0.37318 +-0.00649976 0.0842428 0.0569087 0.852714 0.5 +-0.00549946 0.0842482 0.0569765 0.728986 0.5 +-0.00450764 0.0842735 0.0572857 0.70333 0.5 +-0.00350236 0.0842813 0.0574606 0.679664 0.5 +-0.00250438 0.0842991 0.0575402 0.546182 0.483814 +-0.00150012 0.0842876 0.0575029 0.653744 0.5 +-0.000497806 0.0842866 0.0575088 0.655277 0.5 +0.000504451 0.0842848 0.0575158 0.653484 0.5 +0.00150378 0.0842858 0.0575429 0.641646 0.5 +0.00250545 0.0842781 0.0574483 0.632004 0.5 +0.00350924 0.0842701 0.0573364 0.631416 0.5 +0.0045205 0.0842507 0.0571459 0.43939 0.5 +0.00551873 0.0842341 0.0568816 0.496832 0.483673 +0.00651709 0.084208 0.0565081 0.493883 0.478474 +0.00649755 0.131366 0.0177838 0.698997 0.5 +-0.0850976 0.106195 0.00337687 0.453348 0.412907 +0.0388945 0.108364 0.0171641 0.70778 0.5 +0.0391583 0.108387 0.0121653 0.711532 0.5 +-0.0694944 0.11756 0.0525327 0.540913 0.5 +-0.0745039 0.117561 0.0526615 0.707381 0.5 +-0.0879688 0.113092 0.00628888 0.398501 0.5 +-0.0494799 0.116621 0.0323892 0.627876 0.5 +0.0281531 0.119463 0.0257844 0.554084 0.5 +0.0400371 0.107017 0.0091647 0.696684 0.5 +0.0174945 0.0838575 0.0514031 0.480476 0.5 +0.0184941 0.0838333 0.0510457 0.510037 0.5 +0.0194763 0.0837958 0.0507486 0.5274 0.482558 +0.011475 0.115421 0.0379758 0.592272 0.426409 +0.00549376 0.116905 0.0389072 0.652772 0.5 +0.0363189 0.106784 -0.00482843 0.470386 0.48771 +0.00487825 0.131703 0.0129125 0.793896 0.5 +-0.0275139 0.118013 0.031246 0.508733 0.36356 +-0.0165021 0.118207 0.0361456 0.554506 0.450085 +-0.0195983 0.126231 0.0213862 0.417001 0.379498 +-0.0474528 0.119349 0.0293599 0.643394 0.5 +0.0108333 0.130856 0.0150885 0.847913 0.5 +-0.0314011 0.178523 -0.00645128 0.32966 0.5 +-0.062763 0.149042 -0.0175788 0.627716 0.5 +0.0427221 0.101476 0.00816485 0.571204 0.48584 +-0.0734977 0.124615 0.0532793 0.624438 0.5 +-0.0609083 0.169363 -0.0596932 0.362515 0.5 +-0.0887091 0.0983318 0.0213821 0.680156 0.5 +0.0446543 0.0959754 0.00716634 0.568911 0.5 +-0.0754874 0.130275 0.0528009 0.565348 0.5 +-0.0617277 0.159994 -0.0345941 0.499509 0.5 +-0.0707023 0.155807 0.00247134 0.580026 0.5 +-0.00149907 0.122451 0.0357652 0.600634 0.5 +0.0440561 0.0945388 0.0201582 0.506569 0.5 +0.0374772 0.106859 -0.00183322 0.546207 0.421305 +-0.00348977 0.122389 0.0359468 0.622318 0.5 +-0.0394747 0.168236 0.00277528 0.363666 0.385848 +-0.0404999 0.16823 0.00286674 0.432126 0.5 +-0.0746181 0.165272 -0.019163 0.257147 0.356661 +-0.0697818 0.16064 -0.00887941 0.511945 0.420604 +-0.0690003 0.160066 -0.00858817 0.497834 0.5 +-0.0578658 0.154169 0.0274197 0.977826 0.5 +0.0125251 0.129483 0.0214195 0.48866 0.5 +-0.0653079 0.154958 0.0291369 0.893296 0.5 +-0.0390631 0.127858 0.0143467 0.588234 0.393013 +0.013984 0.129601 0.0176686 0.459914 0.461754 +-0.0704303 0.164039 -0.0149268 0.43763 0.42762 +0.00698354 0.131641 0.013682 0.795824 0.284077 +-0.07134 0.156839 -0.0007386 0.364309 0.391949 +-0.0833393 0.0979244 -0.00460929 0.445883 0.332004 +0.0191428 0.127427 0.0167214 0.463526 0.5 +0.0199768 0.126969 0.0170274 0.447398 0.451058 +-0.00407632 0.124795 0.032822 0.472671 0.421808 +-0.081069 0.152209 0.0312004 0.295115 0.454522 +-0.0698551 0.16523 -0.017589 0.350702 0.380471 +-0.0691061 0.164802 -0.0173282 0.443491 0.434602 +-0.0682887 0.164315 -0.0170259 0.452432 0.5 +-0.0230436 0.0879523 0.0537722 0.451742 0.48072 +-0.0790398 0.119048 0.050662 0.673699 0.5 +-0.0666072 0.0846933 0.0437683 0.597311 0.476766 +-0.065484 0.0847424 0.0442074 0.739505 0.5 +-0.0644959 0.084745 0.0443622 0.743767 0.5 +-0.0634981 0.0847405 0.0443851 0.770791 0.5 +-0.062498 0.0847471 0.0443617 0.784454 0.5 +-0.0614977 0.0847334 0.0442553 0.761755 0.5 +-0.0604976 0.0847283 0.0441029 0.759003 0.5 +-0.0594997 0.0846925 0.0439263 0.76968 0.5 +-0.0584939 0.0847167 0.0439692 0.781561 0.5 +-0.0574904 0.0847348 0.0442092 0.768341 0.5 +-0.0564709 0.0847764 0.0446514 0.724926 0.5 +-0.0554797 0.0848037 0.0450617 0.719726 0.5 +-0.0544959 0.0848124 0.0452537 0.737447 0.5 +-0.0534928 0.0848236 0.0453456 0.713546 0.5 +-0.0524963 0.0848256 0.0453696 0.692501 0.5 +-0.0514982 0.0848246 0.0453901 0.66907 0.5 +-0.050497 0.0848226 0.0453947 0.64486 0.5 +-0.0495055 0.0848369 0.0453213 0.654568 0.5 +-0.048499 0.0848032 0.0451307 0.63618 0.5 +-0.0475005 0.084795 0.044997 0.614162 0.5 +-0.0465015 0.0847604 0.0446321 0.596046 0.442897 +-0.0454595 0.0846983 0.0440929 0.471185 0.409187 +-0.0444845 0.0846726 0.04342 0.48144 0.476997 +-0.0435133 0.0846552 0.0431729 0.579862 0.5 +-0.0424883 0.0846004 0.0426298 0.60796 0.449805 +-0.0414996 0.0846033 0.0426094 0.591182 0.5 +-0.0404862 0.0846544 0.0431896 0.647736 0.5 +-0.0394892 0.0846821 0.0435801 0.727981 0.5 +-0.0384861 0.0847024 0.0437961 0.717768 0.5 +-0.0374992 0.0847101 0.0439351 0.675233 0.5 +-0.0365135 0.084703 0.0437856 0.600625 0.5 +-0.0355277 0.0846755 0.0433772 0.49782 0.5 +-0.0345226 0.0846315 0.0427551 0.538204 0.5 +-0.0334979 0.0845774 0.0421828 0.514457 0.457667 +-0.0324923 0.0845615 0.0419149 0.614323 0.5 +-0.0314894 0.0845774 0.0421902 0.679706 0.5 +-0.0305568 0.0845973 0.042796 0.655378 0.5 +-0.0294567 0.0847909 0.044594 0.653442 0.5 +-0.011143 0.128894 0.00267925 0.721443 0.5 +-0.00989368 0.129282 0.00314288 0.730645 0.5 +-0.065333 0.177827 -0.0606985 0.285125 0.450981 +-0.0867252 0.0994863 0.00342747 0.645103 0.5 +-0.0929503 0.128215 0.0122521 0.675699 0.5 +-0.0258359 0.0945143 -0.0266147 0.363816 0.5 +-0.00268932 0.130846 0.00581897 0.742188 0.5 +-0.00148382 0.131063 0.00627096 0.760032 0.5 +-0.020497 0.0855906 0.0563403 0.581739 0.5 +-0.0194885 0.0856172 0.056795 0.587627 0.5 +-0.0184879 0.0856371 0.0571362 0.612345 0.5 +-0.0174889 0.0856455 0.0572522 0.818561 0.5 +-0.0164998 0.0856439 0.0570811 0.827932 0.5 +-0.015502 0.0856307 0.0568812 0.840245 0.5 +-0.014497 0.0856418 0.0570702 0.661055 0.5 +-0.0134997 0.0856507 0.057198 0.682105 0.5 +-0.012503 0.0856552 0.057236 0.837088 0.5 +-0.0114987 0.0856547 0.0572923 0.818958 0.5 +-0.0104973 0.0856567 0.0572952 0.665274 0.465588 +-0.00949755 0.0856659 0.0574293 0.681853 0.468126 +-0.00849886 0.0856701 0.0574538 0.660951 0.479507 +-0.00748541 0.0856517 0.0572176 0.844388 0.374247 +-0.00649656 0.0856337 0.0569558 0.667615 0.5 +-0.00549934 0.085642 0.0570911 0.695384 0.5 +-0.00450177 0.0856564 0.0572774 0.705114 0.5 +-0.00350029 0.0856691 0.0572933 0.560387 0.48339 +-0.00250061 0.0856648 0.0572816 0.552893 0.473162 +-0.0014976 0.0856652 0.0573264 0.532337 0.461407 +-0.00049716 0.0856626 0.0573342 0.813996 0.5 +0.000503516 0.0856702 0.0573793 0.81087 0.5 +0.00150486 0.0856703 0.0573817 0.642477 0.5 +0.00250408 0.0856622 0.0573274 0.822022 0.5 +0.00351036 0.0856577 0.0572413 0.640816 0.5 +0.00451386 0.0856474 0.057126 0.528908 0.473277 +0.00551307 0.0856288 0.0568655 0.60562 0.47225 +0.00650612 0.0856084 0.0565927 0.577038 0.479545 +0.00752051 0.0855871 0.0562726 0.405078 0.483987 +-0.0255949 0.125933 0.00752005 0.721655 0.5 +-0.00645978 0.0918654 -0.0354548 0.678465 0.5 +0.0307365 0.117405 0.0253192 0.597807 0.5 +-0.0253625 0.126177 0.010523 0.637133 0.5 +-0.0764966 0.117544 0.0520468 0.581476 0.5 +0.0453383 0.0861836 0.0191712 0.502324 0.474178 +-0.0474944 0.116586 0.0319739 0.646549 0.5 +-0.0445005 0.116602 0.0322264 0.531421 0.5 +-0.0425028 0.11664 0.0325093 0.598295 0.5 +0.0174851 0.0852069 0.0507856 0.570623 0.5 +0.0184726 0.0851741 0.0505075 0.583156 0.5 +0.0194745 0.0851519 0.050256 0.612144 0.411108 +0.0204736 0.0851385 0.0500118 0.627505 0.5 +0.00449641 0.11692 0.039168 0.630034 0.409815 +-0.0434904 0.12843 0.000929671 0.86466 0.5 +-0.0754318 0.155396 0.00808247 0.68566 0.5 +0.0396392 0.106988 0.00416547 0.636404 0.5 +-0.0155184 0.118264 0.0365807 0.537013 0.392137 +0.0450422 0.0931924 0.0131619 0.559142 0.5 +0.0278259 0.115624 -0.00659973 0.54747 0.36626 +-0.0734033 0.167233 -0.0217479 0.264476 0.36442 +-0.00249512 0.122376 0.0359373 0.615141 0.5 +-0.038486 0.115285 0.0333239 0.661734 0.5 +-0.0154972 0.122303 0.0324651 0.562162 0.366889 +-0.0724827 0.124619 0.0532114 0.513731 0.442517 +0.0404255 0.0914089 -0.00978781 0.555519 0.460231 +0.0423355 0.0972587 0.0241615 0.520911 0.456178 +0.0446156 0.0959646 0.00916087 0.580058 0.461121 +-0.0744956 0.13026 0.0524093 0.563452 0.457686 +0.0460213 0.0862262 0.00917159 0.58451 0.436983 +-0.0279306 0.125506 0.00666413 0.774242 0.5 +-0.0815948 0.123081 0.0504133 0.554788 0.442899 +0.0418343 0.0943991 0.0271656 0.646542 0.5 +-0.0921228 0.126953 0.0372491 0.810956 0.5 +0.0155 0.11402 0.0377783 0.683719 0.402609 +-0.0764979 0.135856 0.0507679 0.621809 0.5 +-0.0244452 0.181836 -0.00961144 0.287742 0.5 +-0.0785284 0.123123 0.0516319 0.714423 0.5 +-0.0706182 0.161097 -0.00919138 0.488429 0.371412 +-0.071556 0.161392 -0.00951947 0.362948 0.369952 +0.00886384 0.130684 0.0200808 0.625655 0.5 +-0.0572292 0.155416 0.0145778 0.618768 0.5 +0.0331644 0.1138 0.0262385 0.618593 0.5 +0.0148515 0.129255 0.0180171 0.456863 0.438487 +-0.0713104 0.164383 -0.0152637 0.424407 0.384167 +0.00796175 0.131494 0.0140347 0.827885 0.5 +-0.0240415 0.126597 0.0109996 0.577137 0.5 +-0.0234875 0.125296 0.0010065 0.732091 0.5 +0.0183131 0.127887 0.0164149 0.583064 0.5 +-0.0164676 0.125926 0.0254562 0.352926 0.5 +-0.069998 0.157611 -0.0031485 0.341469 0.5 +-0.0717391 0.165925 -0.0182956 0.366906 0.413097 +-0.0707386 0.165621 -0.0179174 0.351297 0.374024 +-0.0357386 0.176065 -0.00515676 0.311271 0.436512 +-0.0370933 0.175555 -0.00565624 0.247176 0.5 +-0.0386183 0.174771 -0.00621679 0.201128 0.164763 +-0.0883767 0.125344 0.00127971 0.49092 0.357539 +-0.0674749 0.0861001 0.0436947 0.571041 0.416669 +-0.0664905 0.0861274 0.0441111 0.562283 0.5 +-0.0654783 0.0861634 0.0444498 0.69894 0.5 +-0.0644943 0.0861671 0.0446171 0.729584 0.5 +-0.0634905 0.0861851 0.0447067 0.763797 0.5 +-0.0624956 0.0861834 0.0447184 0.784968 0.5 +-0.0614983 0.0861808 0.0447299 0.778337 0.5 +-0.0604964 0.0861621 0.0446513 0.765244 0.5 +-0.059497 0.0861573 0.0445009 0.740935 0.5 +-0.0584956 0.0861498 0.0443498 0.759869 0.5 +-0.0574852 0.0861616 0.0444185 0.756488 0.5 +-0.0564932 0.0861648 0.0446121 0.744561 0.5 +-0.0554832 0.0861944 0.0449632 0.696869 0.45083 +-0.0544905 0.0862124 0.0452239 0.711523 0.5 +-0.0534886 0.0862338 0.0454573 0.69708 0.453393 +-0.0524982 0.0862336 0.045539 0.653078 0.5 +-0.0514974 0.086244 0.0456131 0.640932 0.5 +-0.0504958 0.0862332 0.0455716 0.62738 0.5 +-0.0495023 0.0862453 0.0455995 0.605881 0.5 +-0.0484952 0.0862244 0.0454118 0.593535 0.5 +-0.0474965 0.0862056 0.045143 0.557257 0.482384 +-0.0464764 0.0861628 0.0446798 0.480057 0.473674 +-0.0454819 0.0861255 0.0441555 0.466724 0.441764 +-0.044493 0.0860963 0.0437549 0.459122 0.444259 +-0.0435015 0.086056 0.04322 0.556958 0.5 +-0.0424904 0.0860159 0.0426903 0.569788 0.392407 +-0.0414976 0.0860064 0.0425981 0.554579 0.5 +-0.0405007 0.0860467 0.0431081 0.634118 0.411349 +-0.0394712 0.08608 0.0435352 0.716975 0.403577 +-0.0384869 0.0860997 0.0437907 0.712854 0.5 +-0.0374976 0.0861098 0.0439188 0.668172 0.5 +-0.0365117 0.0860935 0.0436284 0.59875 0.5 +-0.0354635 0.0860418 0.0431394 0.564761 0.33722 +-0.0344994 0.0860255 0.0426749 0.525763 0.384024 +-0.0334973 0.0859864 0.0423406 0.52536 0.5 +-0.0324974 0.0859857 0.0423469 0.689894 0.5 +-0.0315044 0.0860003 0.0426216 0.725911 0.5 +-0.0304745 0.0860755 0.0433189 0.687054 0.5 +-0.0294246 0.0861745 0.0444819 0.699915 0.5 +-0.00503592 0.13043 0.00494647 0.744908 0.5 +-0.00624295 0.130196 0.00449841 0.733242 0.5 +-0.00743574 0.129906 0.00405669 0.729218 0.5 +-0.00869681 0.129559 0.00358698 0.733611 0.5 +0.00298644 0.131511 0.0079308 0.785354 0.5 +0.0018938 0.131459 0.00752669 0.770111 0.5 +-0.00383551 0.130671 0.00539431 0.745645 0.5 +0.00407718 0.131556 0.00833758 0.799661 0.5 +-0.0204778 0.086949 0.0559493 0.462739 0.474426 +-0.0194848 0.0869694 0.0563134 0.558331 0.5 +-0.0184974 0.0869962 0.0565805 0.737974 0.5 +-0.017504 0.0870094 0.0567302 0.786895 0.5 +-0.0164852 0.0870004 0.0567616 0.837902 0.5 +-0.0154952 0.087016 0.0568367 0.689488 0.464351 +-0.0145001 0.0870236 0.0569643 0.688976 0.462284 +-0.0135045 0.0870342 0.0571061 0.666792 0.476518 +-0.0124944 0.0870249 0.0570339 0.842564 0.5 +-0.0114972 0.0870124 0.0568248 0.82092 0.5 +-0.0105011 0.0870252 0.0569814 0.676812 0.5 +-0.00950131 0.0870429 0.0572309 0.689627 0.5 +-0.00850241 0.0870443 0.0572609 0.684134 0.5 +-0.00748945 0.0870384 0.0571349 0.67944 0.377612 +-0.00649655 0.0870315 0.0570873 0.690438 0.5 +-0.00550074 0.0870334 0.0571343 0.677642 0.462414 +-0.00449814 0.0870358 0.0571267 0.673557 0.463885 +-0.00349748 0.0870382 0.0570453 0.55187 0.5 +-0.00249822 0.0870283 0.0569791 0.543574 0.5 +-0.00149439 0.0870302 0.0569025 0.536281 0.5 +-0.000495324 0.0870356 0.0569136 0.647233 0.5 +0.000502823 0.0870298 0.0569751 0.621739 0.47873 +0.00150556 0.0870476 0.0569313 0.635452 0.464747 +0.00250481 0.0870342 0.0569864 0.637809 0.5 +0.00350598 0.0870278 0.056972 0.638967 0.5 +0.00450466 0.087016 0.0568401 0.614088 0.5 +0.00551011 0.0870055 0.0566199 0.599859 0.5 +0.00651921 0.0869957 0.0564058 0.595047 0.5 +0.00751373 0.0869673 0.0561316 0.577298 0.465483 +0.0084946 0.0869435 0.0558386 0.560695 0.5 +-0.0294813 0.179959 -0.00726258 0.240456 0.5 +0.03984 0.106962 0.00517391 0.651272 0.5 +0.0300894 0.118197 0.0250757 0.589454 0.5 +-0.0755066 0.11755 0.0524265 0.585673 0.5 +-0.0928081 0.120209 0.0412843 0.590203 0.466635 +-0.048476 0.116631 0.0320328 0.651631 0.5 +-0.0464951 0.116619 0.0318843 0.639746 0.5 +-0.0455014 0.116621 0.0320048 0.50648 0.5 +0.0174813 0.0865744 0.0503122 0.702815 0.5 +0.0184933 0.0865452 0.0498488 0.678548 0.5 +0.0194608 0.0865014 0.0497298 0.550699 0.5 +0.0204938 0.0865196 0.0494812 0.566971 0.461409 +0.0214869 0.0865002 0.0492244 0.500673 0.432562 +-0.0143481 0.129147 0.0116153 0.628995 0.5 +-0.0847398 0.106178 0.00238203 0.459638 0.423744 +-0.0703245 0.0805604 0.0403227 0.628092 0.5 +-0.0184922 0.11816 0.035496 0.563196 0.5 +0.0292295 0.102131 0.038919 0.700374 0.5 +-0.0279294 0.0931359 -0.0265478 0.231587 0.5 +-0.00983007 0.124748 -0.00821099 0.556906 0.5 +0.0185123 0.115397 0.0365584 0.639431 0.5 +-0.0404922 0.11531 0.0337051 0.658508 0.5 +0.0288607 0.118772 0.0260462 0.589487 0.5 +-0.0714922 0.124606 0.0531293 0.579975 0.469455 +-0.0293662 0.0904135 -0.0285737 0.317989 0.390463 +0.0426741 0.0972641 0.0231497 0.442446 0.5 +0.0446411 0.0959729 0.00816419 0.583083 0.5 +-0.0327551 0.126411 0.00489661 0.898256 0.5 +0.0363342 0.109637 -0.000829727 0.522844 0.5 +-0.0775985 0.123137 0.0521223 0.583621 0.5 +-0.0314688 0.175764 -0.00340966 0.323548 0.5 +0.0423623 0.0944394 0.0261744 0.63655 0.5 +0.0393896 0.106975 0.00316583 0.445226 0.5 +0.0386755 0.101225 -0.00680717 0.558398 0.5 +-0.0714676 0.155482 0.0269686 0.839143 0.5 +-0.023441 0.181825 -0.0105699 0.264741 0.5 +0.00494704 0.131338 0.0186496 0.628111 0.5 +-0.0795926 0.100727 0.0334268 0.683272 0.5 +-0.0645248 0.154173 -0.00692339 0.627629 0.348086 +0.00793492 0.130935 0.0197362 0.64521 0.5 +-0.0858805 0.0926571 0.00145452 0.684142 0.5 +0.0325609 0.114759 0.0260072 0.621911 0.5 +0.0157394 0.128861 0.0183169 0.442545 0.477811 +0.0242996 0.120934 0.0286395 0.545288 0.5 +0.0089357 0.131311 0.0143899 0.837328 0.5 +-0.0851808 0.153525 0.0149377 0.298467 0.450525 +-0.0896361 0.0969931 0.0144152 0.617224 0.5 +0.0102886 0.13098 0.0134608 0.85008 0.5 +-0.0692559 0.157013 -0.00287665 0.359258 0.447051 +-0.0741239 0.165568 -0.0191297 0.253721 0.5 +-0.0728415 0.165906 -0.0186805 0.313775 0.397284 +-0.0333033 0.176609 -0.00426163 0.267257 0.5 +-0.0344415 0.176449 -0.00471515 0.404816 0.255614 +-0.0940387 0.126929 0.0232615 0.62518 0.472282 +-0.0660116 0.154522 0.0303582 0.852399 0.5 +-0.0873616 0.110481 0.0113565 0.418809 0.5 +-0.0776353 0.15693 -0.0189052 0.612769 0.5 +-0.0675187 0.0874976 0.0437834 0.567784 0.5 +-0.0664749 0.0875478 0.0443297 0.555948 0.5 +-0.0654933 0.0875673 0.0446215 0.580008 0.5 +-0.0644915 0.087588 0.0448694 0.724859 0.5 +-0.0634827 0.0876134 0.0450541 0.620183 0.5 +-0.0624974 0.0876076 0.0451456 0.753403 0.5 +-0.0614967 0.0876222 0.0452319 0.755217 0.5 +-0.0604957 0.0876028 0.045161 0.739093 0.5 +-0.0595027 0.0876292 0.04502 0.716546 0.5 +-0.0584973 0.0875674 0.0446281 0.728659 0.401759 +-0.0574934 0.0875623 0.0444505 0.752511 0.5 +-0.0564919 0.0875695 0.0445907 0.748284 0.5 +-0.0554895 0.087587 0.0448409 0.712527 0.5 +-0.0544918 0.0876045 0.0451014 0.678885 0.5 +-0.0534974 0.0876167 0.045276 0.664481 0.5 +-0.0524964 0.0876231 0.0453765 0.642243 0.5 +-0.0514957 0.0876341 0.0455102 0.619849 0.5 +-0.0504965 0.087636 0.0455301 0.603415 0.5 +-0.0495004 0.0876335 0.045502 0.489782 0.5 +-0.0485039 0.0876217 0.0453743 0.568061 0.463723 +-0.0475132 0.0875996 0.0450977 0.531876 0.467683 +-0.0464914 0.08757 0.0446532 0.439432 0.475888 +-0.0454819 0.0875316 0.0441596 0.447271 0.481729 +-0.0444795 0.0874935 0.0436599 0.690491 0.5 +-0.0435318 0.087421 0.0430041 0.705144 0.436198 +-0.042497 0.0874008 0.0424798 0.552011 0.5 +-0.0414986 0.0874028 0.042497 0.570375 0.5 +-0.0404897 0.0874362 0.0429424 0.599383 0.5 +-0.0394897 0.0874644 0.0433271 0.693961 0.5 +-0.0384918 0.0874952 0.0437107 0.692665 0.5 +-0.037505 0.0874848 0.0436782 0.691423 0.43174 +-0.0365003 0.087456 0.0430956 0.666641 0.407863 +-0.0354707 0.0874527 0.0429689 0.653089 0.388344 +-0.034503 0.0874637 0.0428605 0.629176 0.5 +-0.0334955 0.0874648 0.043047 0.627905 0.5 +-0.0324895 0.0874934 0.0434306 0.608342 0.5 +-0.0314842 0.0875139 0.0436743 0.615773 0.468163 +-0.0304696 0.0875178 0.0438182 0.75189 0.5 +-0.0293842 0.08757 0.0444817 0.680727 0.5 +0.00721829 0.131495 0.00948452 0.827562 0.5 +0.0082433 0.13138 0.00986533 0.84127 0.5 +0.00922467 0.131237 0.0102208 0.85526 0.5 +0.0101976 0.131045 0.010577 0.86472 0.5 +0.0120566 0.130535 0.0112565 0.595962 0.5 +0.0111186 0.130773 0.0109156 0.866542 0.5 +0.00516264 0.131576 0.00874185 0.807845 0.5 +0.00619086 0.131536 0.009113 0.827737 0.5 +0.0147323 0.129513 0.0122405 0.605429 0.474764 +-0.0194871 0.0883195 0.0557235 0.563161 0.5 +-0.0185099 0.0883573 0.0560195 0.577803 0.477362 +-0.0174841 0.088353 0.056296 0.604476 0.482906 +-0.0164973 0.088378 0.056467 0.828381 0.5 +-0.0154917 0.0883884 0.056678 0.567459 0.5 +-0.0144987 0.0884006 0.0568363 0.568191 0.5 +-0.0134994 0.0884096 0.056966 0.648846 0.5 +-0.0125093 0.0883992 0.0567932 0.853585 0.365947 +-0.0114976 0.0883765 0.0564607 0.858476 0.5 +-0.0105064 0.0884021 0.0567868 0.686246 0.471731 +-0.00950098 0.0884225 0.0571104 0.678655 0.5 +-0.00849876 0.0884233 0.057199 0.667815 0.474186 +-0.00749863 0.0884246 0.0571361 0.668382 0.5 +-0.00649589 0.0884166 0.05709 0.674703 0.5 +-0.00549337 0.088417 0.0570387 0.674926 0.5 +-0.00449408 0.088412 0.0569078 0.545889 0.5 +-0.00348929 0.0884115 0.0568027 0.546827 0.449024 +-0.00249621 0.0883993 0.0567366 0.53647 0.476253 +-0.00149343 0.0883979 0.0566431 0.636397 0.5 +-0.000496915 0.0883839 0.0565827 0.515294 0.484791 +0.000506539 0.0883906 0.0565122 0.63633 0.471524 +0.00150878 0.0883997 0.0564367 0.642304 0.5 +0.00250691 0.0883899 0.0564027 0.638454 0.5 +0.00350363 0.0883757 0.0563643 0.638523 0.443246 +0.00450432 0.0883672 0.0562441 0.620567 0.5 +0.00550113 0.0883518 0.0561015 0.609541 0.5 +0.00650421 0.0883449 0.0558788 0.592244 0.446546 +0.00751322 0.0883379 0.0556646 0.59235 0.5 +0.00850451 0.0883096 0.055394 0.583895 0.5 +0.00950876 0.0882899 0.055046 0.46622 0.5 +0.0105044 0.115477 0.0381888 0.57365 0.461319 +-0.0445017 0.163753 0.00542301 0.421758 0.407548 +0.00590682 0.131658 0.0132863 0.792746 0.5 +-0.0445084 0.162276 0.00597583 0.454147 0.5 +-0.043533 0.162269 0.00566221 0.585226 0.5 +-0.0504899 0.115263 0.0337703 0.638017 0.5 +-0.0884987 0.102354 0.0183681 0.590533 0.483883 +-0.0721793 0.15961 -0.0389315 0.482103 0.5 +0.0184901 0.0879016 0.0492476 0.679393 0.5 +0.0194777 0.0878818 0.0491927 0.630095 0.5 +0.0204946 0.0878829 0.0490965 0.53553 0.456491 +0.0214723 0.0878669 0.0490265 0.588983 0.5 +0.0224603 0.0878572 0.0487762 0.497432 0.442354 +-0.0636035 0.156128 0.0166435 0.813154 0.5 +-0.0755036 0.121787 0.0531411 0.672827 0.5 +-0.0205212 0.118181 0.0347958 0.478834 0.5 +0.0379456 0.10977 0.0171703 0.710747 0.5 +0.0413546 0.0999884 -0.00181466 0.503914 0.5 +-0.0875459 0.110452 0.0143395 0.49758 0.5 +-0.058473 0.115363 0.0369711 0.663307 0.5 +0.0396909 0.105526 0.00119339 0.549511 0.460747 +-0.0285122 0.180211 -0.00692909 0.264085 0.5 +-0.0213522 0.127058 0.00761225 0.661499 0.5 +-0.0924819 0.125444 0.00927262 0.430854 0.451518 +0.0432211 0.097315 0.0201647 0.521941 0.5 +0.0388579 0.0970015 -0.00784 0.578686 0.5 +0.0404579 0.0971405 0.0281735 0.670076 0.5 +-0.00946358 0.169654 -0.0207426 0.375439 0.5 +-0.00548333 0.122374 0.0356916 0.623464 0.5 +-0.0185076 0.120924 0.0327413 0.460104 0.340989 +-0.0618553 0.153745 -0.0235803 0.72417 0.5 +0.039909 0.107011 0.00616363 0.659433 0.454709 +0.0399676 0.101315 -0.00381805 0.558695 0.5 +-0.0639459 0.153257 -0.00670123 0.657986 0.5 +-0.0869174 0.117103 0.00125292 0.464762 0.5 +-0.0665983 0.155819 0.0112334 0.818624 0.5 +0.00173262 0.13137 0.0174841 0.619535 0.5 +0.00597565 0.131268 0.0190237 0.632033 0.5 +-0.0408127 0.127672 -0.0010356 0.608381 0.5 +0.0319596 0.11565 0.0257836 0.626062 0.5 +0.0166077 0.128469 0.0186355 0.531927 0.5 +-0.00795135 0.129264 0.0240771 0.768869 0.5 +0.00986741 0.131059 0.0147331 0.840187 0.5 +-0.0218317 0.124906 0.0220793 0.319066 0.371321 +-0.0896263 0.0969991 0.0154111 0.636546 0.5 +0.00935699 0.131232 0.0131197 0.843456 0.5 +-0.068516 0.156454 -0.00263594 0.470698 0.434261 +-0.0297919 0.108873 -0.0192723 0.809584 0.5 +-0.0726537 0.15621 0.0148854 0.723888 0.5 +-0.0555193 0.152453 0.0283051 0.412797 0.5 +-0.0827604 0.106087 -0.00164696 0.34987 0.466263 +-0.0922703 0.125567 0.0322584 0.858174 0.5 +-0.0715136 0.0887445 0.0416191 0.604622 0.463567 +-0.0705043 0.0887655 0.0418556 0.599002 0.468787 +-0.0293383 0.123554 -0.00265044 0.864718 0.5 +-0.0302932 0.123607 -0.00301843 0.618229 0.481057 +-0.0674926 0.0889102 0.043735 0.525748 0.472205 +-0.066502 0.0889512 0.0442634 0.542167 0.5 +-0.0654905 0.0889779 0.0446185 0.55592 0.5 +-0.0645002 0.0889975 0.0448988 0.581681 0.484656 +-0.0634835 0.0890243 0.0452141 0.599728 0.5 +-0.0624954 0.0890364 0.0453804 0.728531 0.5 +-0.0614914 0.089051 0.0454546 0.73029 0.5 +-0.0604958 0.0890419 0.0453253 0.722274 0.5 +-0.059508 0.0890036 0.0450344 0.72336 0.428745 +-0.0584837 0.088969 0.0446761 0.714998 0.391964 +-0.057499 0.0889744 0.0446686 0.717384 0.5 +-0.0564995 0.0889847 0.0448198 0.735216 0.5 +-0.0554979 0.0889982 0.0448936 0.698202 0.5 +-0.054497 0.0889964 0.0448823 0.67368 0.5 +-0.0534965 0.0890047 0.0449968 0.65028 0.481989 +-0.0524956 0.0890116 0.0451123 0.81672 0.5 +-0.051497 0.0890197 0.045238 0.778022 0.5 +-0.050498 0.0890212 0.0452499 0.581283 0.5 +-0.0494955 0.0890237 0.0451636 0.563316 0.473533 +-0.0484982 0.0890084 0.0450201 0.571331 0.5 +-0.0474966 0.088987 0.0447599 0.533502 0.5 +-0.0465077 0.088954 0.0443573 0.510177 0.5 +-0.0455158 0.0889126 0.0438293 0.887692 0.5 +-0.0444708 0.0888726 0.0431834 0.890703 0.5 +-0.0434704 0.0888362 0.0427012 0.959715 0.5 +-0.0425006 0.0888114 0.0424593 0.541741 0.5 +-0.041501 0.0888244 0.0425932 0.569013 0.457157 +-0.040488 0.088839 0.0428058 0.605246 0.5 +-0.039493 0.0888698 0.0432118 0.697466 0.5 +-0.0385075 0.0888951 0.0435504 0.729814 0.5 +-0.0374976 0.0888821 0.0433743 0.744459 0.5 +-0.0364935 0.0888766 0.0431732 0.709521 0.5 +-0.0354913 0.0889091 0.0432238 0.731306 0.5 +-0.0344955 0.0889014 0.0434521 0.711364 0.5 +-0.0334891 0.0889549 0.0439078 0.668916 0.5 +-0.0324957 0.0889348 0.0439847 0.64397 0.5 +-0.0314817 0.0889488 0.0439042 0.636481 0.5 +-0.0305059 0.0889327 0.0438397 0.629464 0.461567 +-0.0294944 0.0889496 0.044252 0.736237 0.5 +-0.0284884 0.0890334 0.0453918 0.56869 0.5 +0.0190967 0.127602 0.0138576 0.643391 0.5 +0.0182337 0.128007 0.0135344 0.637857 0.452773 +0.01736 0.128384 0.0132094 0.637776 0.5 +0.0164873 0.128764 0.0128859 0.632413 0.5 +0.0156501 0.129207 0.0125793 0.610895 0.469477 +0.0138565 0.129875 0.0119166 0.611135 0.5 +0.0129712 0.130228 0.0115965 0.59497 0.48167 +0.0199328 0.127154 0.0141603 0.642882 0.5 +-0.0722295 0.16736 -0.0213426 0.34534 0.426295 +-0.0184842 0.0897075 0.0555921 0.479259 0.479275 +-0.0174992 0.0897364 0.0558751 0.507012 0.44699 +-0.0164918 0.0897515 0.056205 0.536924 0.5 +-0.015502 0.0897786 0.0564851 0.556856 0.5 +-0.0144938 0.0897854 0.0566872 0.551112 0.5 +-0.013497 0.089796 0.0568243 0.631556 0.5 +-0.0125102 0.0897843 0.0566766 0.678456 0.340873 +-0.0114926 0.0897634 0.0564161 0.692476 0.5 +-0.0104962 0.0897854 0.05669 0.703224 0.5 +-0.00949856 0.0898059 0.0569552 0.662622 0.5 +-0.00849727 0.0898107 0.0570624 0.8274 0.5 +-0.00749789 0.0898138 0.0570783 0.531777 0.5 +-0.00649647 0.0898144 0.056995 0.664185 0.5 +-0.00549358 0.0898053 0.0568842 0.656881 0.475903 +-0.00448657 0.0898027 0.0567005 0.647587 0.5 +-0.00349611 0.0897823 0.0565938 0.643383 0.5 +-0.00248752 0.0897873 0.0564419 0.525736 0.5 +-0.00150237 0.089761 0.0564112 0.631123 0.5 +-0.000494586 0.0897644 0.0562541 0.620528 0.5 +0.000507606 0.089764 0.0561546 0.621338 0.5 +0.00150774 0.0897546 0.056027 0.517434 0.5 +0.00250097 0.0897336 0.0558646 0.63102 0.464433 +0.00350969 0.0897377 0.0556751 0.641845 0.5 +0.00451011 0.08973 0.0555486 0.66056 0.5 +0.00550651 0.0897139 0.0554063 0.633714 0.431655 +0.00651372 0.089712 0.0551929 0.50594 0.487761 +0.00749975 0.089676 0.055015 0.503641 0.5 +0.00850666 0.0896726 0.0548038 0.502433 0.488861 +0.00950257 0.0896505 0.0545501 0.495401 0.489122 +0.0104979 0.0896334 0.054299 0.487193 0.43 +0.0114903 0.0896115 0.0540357 0.408123 0.478488 +0.00119043 0.0895238 -0.0341779 0.619958 0.48079 +-0.0465027 0.162256 0.00645028 0.435166 0.477953 +0.0378425 0.10835 0.0231802 0.659472 0.5 +-0.01005 0.166619 -0.017705 0.277485 0.5 +0.00695321 0.13108 0.0193768 0.637758 0.5 +-0.0774743 0.140015 0.0480697 0.556552 0.5 +0.0184997 0.0892768 0.0486726 0.669841 0.5 +0.0194826 0.0892535 0.0485994 0.636242 0.5 +0.0205013 0.0892461 0.0486645 0.49115 0.463807 +0.0214874 0.0892516 0.0486681 0.443629 0.482518 +0.0224815 0.0892515 0.0484736 0.572018 0.5 +-0.0704211 0.15543 0.027334 0.860441 0.5 +-0.076491 0.140037 0.0480957 0.604651 0.5 +-0.0195033 0.118175 0.0352728 0.526899 0.5 +-0.0695125 0.145609 0.0428052 0.503357 0.481486 +0.0359611 0.109622 -0.00183337 0.508855 0.5 +-0.0779551 0.163899 -0.0249456 0.369891 0.442177 +-0.0104908 0.12238 0.0346088 0.488702 0.5 +-0.0464991 0.115243 0.033257 0.538323 0.5 +-0.0309822 0.125744 0.00553845 0.883749 0.5 +-0.0704978 0.124601 0.053003 0.557218 0.5 +-0.00349533 0.123738 0.0342998 0.558982 0.42104 +0.0433406 0.0973216 0.0191637 0.523374 0.5 +0.0438908 0.0973298 0.0041758 0.55091 0.5 +-0.089531 0.0983552 0.0174009 0.642967 0.5 +0.0424523 0.0958497 0.0251568 0.635888 0.5 +0.0353317 0.112044 0.0241962 0.514327 0.5 +-0.076026 0.151346 0.0359505 0.343749 0.462155 +0.0260142 0.118212 -0.00538239 0.615055 0.5 +-0.0921303 0.11612 0.0363104 0.620965 0.5 +-0.0915175 0.140609 0.0191776 0.607715 0.5 +0.0393065 0.105567 0.023165 0.638743 0.5 +-0.0678122 0.0908837 -0.0169858 0.630872 0.5 +-0.0811465 0.155009 0.0163089 0.572796 0.5 +0.0223132 0.124739 0.023599 0.491112 0.5 +-0.0397671 0.127634 -0.000654541 0.869564 0.5 +0.0313581 0.116535 0.0255569 0.614244 0.5 +0.0182602 0.127523 0.0192457 0.392289 0.5 +-0.0618581 0.153131 0.03333 0.436571 0.335809 +0.0220807 0.125732 0.0192313 0.425407 0.5 +-0.00627368 0.128136 0.0276028 0.288504 0.5 +-0.0132005 0.128825 0.00480743 0.695909 0.5 +0.00637955 0.131641 0.0120332 0.816446 0.5 +0.00735987 0.131518 0.0123881 0.816165 0.5 +-0.0677271 0.155796 -0.00229118 0.653725 0.5 +-0.0748544 0.15611 0.0141114 0.704388 0.5 +-0.00575467 0.1008 0.0460186 0.351717 0.5 +-0.0822477 0.106043 -0.00262262 0.373878 0.469865 +-0.0866496 0.106304 0.00937201 0.739233 0.5 +-0.0725291 0.0901409 0.0413911 0.560484 0.448827 +-0.0715046 0.0901731 0.0417302 0.579879 0.466998 +-0.0705035 0.0901829 0.0418541 0.592955 0.471206 +-0.0694946 0.0902043 0.0422251 0.567379 0.348894 +-0.0684915 0.0902546 0.0428415 0.52006 0.5 +-0.087261 0.137734 0.00520439 0.386013 0.5 +-0.0665084 0.0903473 0.0440273 0.616376 0.5 +-0.0655009 0.0903733 0.0443899 0.523341 0.5 +-0.0644925 0.0903995 0.0447493 0.550154 0.438229 +-0.0634853 0.0904216 0.0451002 0.575741 0.444625 +-0.0624955 0.0904382 0.0452713 0.703596 0.443749 +-0.0614974 0.0904473 0.0454009 0.689243 0.5 +-0.0604973 0.0904382 0.0452731 0.713034 0.5 +-0.0594976 0.0904384 0.0451853 0.717061 0.5 +-0.058497 0.0904388 0.0452323 0.691431 0.5 +-0.0574961 0.0904385 0.0452768 0.694724 0.5 +-0.0564976 0.0904367 0.0452654 0.695441 0.5 +-0.0554962 0.0904299 0.0451691 0.673197 0.5 +-0.0545067 0.0904158 0.0449797 0.823824 0.383755 +-0.0534973 0.0903982 0.0447559 0.823063 0.5 +-0.0524994 0.0903873 0.0447034 0.805317 0.5 +-0.0514988 0.090386 0.0447021 0.766185 0.5 +-0.050497 0.0903958 0.0446608 0.749393 0.5 +-0.0494977 0.0903933 0.0446494 0.721187 0.5 +-0.0484951 0.0903851 0.0445307 0.693281 0.5 +-0.047508 0.0903548 0.0442194 0.527666 0.5 +-0.046474 0.0903329 0.04369 0.645294 0.462104 +-0.0454559 0.0902978 0.0432333 0.674813 0.5 +-0.0444607 0.0902688 0.0428496 0.689616 0.5 +-0.0434818 0.0902492 0.04268 0.700987 0.5 +-0.0424925 0.0902452 0.0426486 0.546802 0.5 +-0.0414961 0.0902351 0.0425692 0.58532 0.5 +-0.0405063 0.0902417 0.0426463 0.614331 0.5 +-0.0394974 0.0902763 0.0431118 0.689905 0.5 +-0.0384918 0.0903063 0.0434643 0.765924 0.5 +-0.0374817 0.0903202 0.0435434 0.78378 0.5 +-0.036497 0.0903135 0.0436162 0.806614 0.5 +-0.0354869 0.0903478 0.043788 0.768492 0.5 +-0.0344924 0.09037 0.0442186 0.740904 0.5 +-0.033491 0.0904012 0.0444067 0.68196 0.5 +-0.0324935 0.0903869 0.0442776 0.650986 0.5 +-0.0314952 0.0903684 0.0441958 0.619368 0.5 +-0.0304819 0.0903593 0.0440392 0.587672 0.5 +-0.0294925 0.0903536 0.0441109 0.762499 0.5 +-0.0284453 0.0903864 0.0448476 0.639236 0.5 +0.0207654 0.126697 0.0144664 0.520578 0.414678 +0.0215945 0.126233 0.0147739 0.520073 0.479098 +0.022422 0.125761 0.0150782 0.534019 0.5 +0.0232288 0.125257 0.0153837 0.537011 0.5 +0.0240159 0.124704 0.0156714 0.558032 0.5 +0.0248097 0.124191 0.0159771 0.552725 0.396166 +0.0255848 0.123614 0.0162626 0.54548 0.447459 +0.027072 0.122359 0.0168201 0.593248 0.434231 +0.0263253 0.122966 0.0165355 0.56543 0.5 +-0.0184847 0.091067 0.0550019 0.4489 0.5 +-0.0174841 0.0910963 0.0554741 0.469786 0.5 +-0.0164849 0.0911174 0.0558291 0.592729 0.5 +-0.0154951 0.0911415 0.0560918 0.594143 0.477803 +-0.0144839 0.0911543 0.0563071 0.505796 0.474517 +-0.0134986 0.0911752 0.0564813 0.596208 0.5 +-0.0124858 0.0911558 0.0565265 0.537959 0.465022 +-0.0114919 0.0911558 0.0564108 0.679406 0.5 +-0.0104995 0.091174 0.0564817 0.682057 0.5 +-0.00949777 0.091187 0.0566315 0.643028 0.470481 +-0.00849948 0.0911907 0.056727 0.639163 0.5 +-0.00749562 0.091199 0.0567536 0.535331 0.456927 +-0.00649604 0.0912014 0.0567618 0.524121 0.466434 +-0.00549585 0.0911858 0.0567127 0.629773 0.484283 +-0.00449141 0.0911839 0.0565229 0.52621 0.47559 +-0.00349433 0.0911707 0.0563818 0.518382 0.485484 +-0.00249248 0.0911617 0.056251 0.525501 0.481257 +-0.00149595 0.0911539 0.0561263 0.812878 0.5 +-0.000494259 0.0911454 0.0560111 0.804581 0.5 +0.000504835 0.0911354 0.0558722 0.613926 0.48733 +0.00150816 0.0911296 0.0556681 0.517109 0.48805 +0.00251114 0.0911189 0.0554408 0.524132 0.484692 +0.0034971 0.091096 0.055256 0.519011 0.480053 +0.00450871 0.0910904 0.0550512 0.628616 0.440976 +0.00550789 0.0910775 0.054811 0.515774 0.5 +0.00650044 0.0910463 0.0545358 0.518031 0.5 +0.00749229 0.091015 0.0542708 0.616772 0.5 +0.00849738 0.0910108 0.0540495 0.630249 0.5 +0.00950436 0.0910078 0.0538342 0.64499 0.389592 +0.010498 0.0909888 0.0536897 0.632169 0.5 +0.011503 0.0909852 0.0534706 0.613156 0.5 +0.0124994 0.0909598 0.0531045 0.505684 0.5 +-0.000429299 0.131494 0.0138246 0.69251 0.5 +-0.0704928 0.117562 0.0527864 0.60212 0.5 +-0.0714928 0.117552 0.0529474 0.640706 0.5 +-0.072499 0.117558 0.0529308 0.684811 0.5 +-0.0735009 0.117559 0.0527975 0.702159 0.5 +0.0184912 0.0906471 0.0481735 0.670372 0.5 +0.0194927 0.0906432 0.0481529 0.884933 0.5 +0.020489 0.0906324 0.0482147 0.621688 0.5 +0.0214919 0.0906421 0.0482356 0.525806 0.5 +0.0224894 0.0906371 0.0481279 0.558146 0.462895 +-0.0414977 0.115265 0.0337662 0.662964 0.386172 +-0.0022788 0.119988 -0.0131916 0.826286 0.5 +-0.0235351 0.118111 0.0331575 0.415504 0.458249 +-0.0705096 0.145613 0.0431794 0.492812 0.484876 +-0.060041 0.155524 0.0222725 0.673323 0.5 +-0.0665787 0.163768 -0.0579853 0.572647 0.5 +0.0360094 0.105316 -0.00780471 0.539312 0.5 +0.0420818 0.101483 0.016165 0.571367 0.490861 +-0.0144941 0.122325 0.033097 0.418658 0.5 +-0.0694908 0.124597 0.0526574 0.469868 0.46819 +-0.00449218 0.123763 0.0343217 0.548473 0.404963 +0.0435215 0.0973118 0.0181533 0.646339 0.5 +0.0442692 0.0973579 0.00816486 0.562618 0.5 +-0.00925832 0.177251 -0.027731 0.308043 0.391935 +-0.0114975 0.12239 0.0342495 0.463506 0.5 +-0.0484946 0.156406 0.00957752 0.623618 0.465773 +-0.0705331 0.144185 0.0442754 0.60571 0.467732 +-0.0105509 0.165091 -0.0177492 0.280751 0.5 +-0.0909825 0.11607 0.0303184 0.447552 0.461926 +-0.0478629 0.125952 -0.00709772 0.554896 0.399931 +0.0164903 0.113991 0.0376096 0.671914 0.5 +0.0381316 0.109734 0.0151646 0.713561 0.5 +-0.0321679 0.120788 0.027294 0.48735 0.360382 +0.0214921 0.125223 0.0232941 0.641301 0.382524 +-0.0097273 0.130072 0.0104159 0.712731 0.5 +0.0294149 0.118962 0.0248216 0.581141 0.5 +0.0174027 0.127944 0.018931 0.413995 0.5 +-0.0594646 0.151494 0.0342364 0.444407 0.5 +0.023685 0.124697 0.0198268 0.438695 0.5 +-0.0707512 0.156365 0.0199172 0.64464 0.5 +-0.0144465 0.128429 0.00434765 0.696791 0.5 +-0.0119452 0.129197 0.00527137 0.706367 0.5 +0.00534877 0.131711 0.0116581 0.809608 0.5 +-0.0647933 0.15319 -0.00116291 0.891579 0.5 +-0.0670185 0.155095 -0.00202392 0.716616 0.5 +-0.0370064 0.121579 0.0285082 0.463326 0.5 +-0.0591933 0.155725 0.01387 0.649841 0.5 +-0.0798437 0.119249 -0.00499812 0.527876 0.386419 +-0.0934071 0.117385 0.0163015 0.654768 0.5 +-0.0725279 0.091561 0.0413901 0.544171 0.444972 +-0.0715197 0.0915892 0.0417662 0.551294 0.5 +-0.0705315 0.0915903 0.0419348 0.555543 0.481678 +-0.0695005 0.091616 0.0421021 0.685465 0.5 +-0.0685195 0.0916417 0.0424016 0.651621 0.5 +-0.0675863 0.0915604 0.0429945 0.597795 0.395518 +-0.0664939 0.0917254 0.0436166 0.576209 0.5 +-0.0654918 0.0917539 0.043991 0.603857 0.471515 +-0.0644855 0.0917771 0.0443552 0.532044 0.5 +-0.0635024 0.0918143 0.0447779 0.541659 0.5 +-0.0624998 0.091833 0.0450322 0.554967 0.5 +-0.0614888 0.0918402 0.045217 0.678752 0.5 +-0.0604969 0.0918487 0.0452694 0.685578 0.5 +-0.0594957 0.0918578 0.0453847 0.687443 0.5 +-0.0584972 0.0918588 0.045399 0.673783 0.5 +-0.0574984 0.0918591 0.045399 0.685739 0.5 +-0.0564984 0.0918565 0.0453856 0.676263 0.5 +-0.055503 0.0918468 0.0452512 0.634435 0.477778 +-0.0545043 0.0918174 0.0448821 0.629246 0.402554 +-0.0535025 0.0917839 0.0444757 0.629197 0.472153 +-0.0524976 0.0917711 0.0441581 0.801039 0.5 +-0.0514977 0.0917694 0.0441515 0.831324 0.5 +-0.0504992 0.0917781 0.0442368 0.799354 0.5 +-0.049492 0.0917757 0.044207 0.768398 0.5 +-0.0484736 0.0917654 0.0440291 0.714507 0.5 +-0.0474794 0.0917467 0.0438194 0.729279 0.5 +-0.0464789 0.0917181 0.0434263 0.724107 0.5 +-0.0454732 0.0917007 0.0431865 0.730408 0.5 +-0.0444858 0.091688 0.0430295 0.729465 0.5 +-0.0434801 0.0917165 0.0428888 0.490492 0.46307 +-0.0424942 0.0916602 0.0426604 0.595361 0.5 +-0.0414975 0.0916447 0.0424797 0.605577 0.5 +-0.0404969 0.0916505 0.0425962 0.620752 0.5 +-0.0394992 0.0916803 0.0429883 0.699492 0.5 +-0.0384759 0.091717 0.0434324 0.752323 0.5 +-0.0374903 0.0917378 0.0437278 0.758028 0.5 +-0.0364756 0.0917702 0.0440382 0.747176 0.5 +-0.0354929 0.0917868 0.0443508 0.723538 0.5 +-0.0344884 0.0918084 0.0445658 0.716287 0.5 +-0.0334891 0.091814 0.044517 0.700487 0.5 +-0.032497 0.0917926 0.0443017 0.637429 0.5 +-0.0314963 0.0917789 0.0442247 0.596224 0.5 +-0.0304965 0.0917653 0.0441169 0.620324 0.5 +-0.0294909 0.0917678 0.0440939 0.621671 0.5 +-0.0284904 0.0917855 0.0443788 0.726628 0.423557 +-0.0275307 0.0918372 0.0449329 0.663547 0.434651 +0.0333782 0.11597 0.0192002 0.652474 0.5 +0.0327251 0.116757 0.0189485 0.642656 0.5 +0.0320656 0.117538 0.0186978 0.649358 0.5 +0.0313831 0.11825 0.0184294 0.645428 0.5 +0.0306925 0.119003 0.0181751 0.634769 0.5 +0.029259 0.120361 0.0176317 0.617984 0.5 +0.0278048 0.121695 0.017093 0.598878 0.5 +0.0285346 0.121033 0.017364 0.602997 0.5 +0.0299804 0.119686 0.0179058 0.639577 0.5 +-0.0174771 0.0924389 0.0547456 0.503825 0.5 +-0.0164537 0.0924837 0.0552632 0.443202 0.477658 +-0.0154945 0.0925097 0.0555061 0.453496 0.471613 +-0.0144952 0.092498 0.0556089 0.455865 0.474735 +-0.0134957 0.0925258 0.0558596 0.456177 0.5 +-0.0124951 0.0925417 0.056096 0.578062 0.5 +-0.0115004 0.0925527 0.0561224 0.624841 0.5 +-0.0104988 0.09255 0.056119 0.61751 0.5 +-0.00950093 0.0925586 0.0561384 0.624848 0.5 +-0.00849427 0.0925522 0.0562249 0.637128 0.462759 +-0.00749931 0.0925693 0.0562701 0.51683 0.5 +-0.00649896 0.092559 0.0563419 0.517374 0.5 +-0.00549615 0.0925657 0.0562617 0.624082 0.5 +-0.00449521 0.0925603 0.0561444 0.618464 0.474845 +-0.00349386 0.0925503 0.0560196 0.624633 0.5 +-0.00249367 0.0925505 0.0559214 0.615346 0.5 +-0.00150095 0.0925253 0.0558525 0.607706 0.47805 +-0.000492618 0.0925258 0.0556594 0.600115 0.5 +0.000505603 0.092515 0.0555251 0.492015 0.5 +0.00150906 0.0925101 0.0553138 0.511452 0.46616 +0.00250661 0.0924946 0.055168 0.434514 0.487635 +0.00351496 0.0924905 0.0549546 0.508462 0.5 +0.00450283 0.0924607 0.0546761 0.582574 0.5 +0.00549857 0.09243 0.054294 0.55694 0.5 +0.00649864 0.0924086 0.053834 0.597357 0.452723 +0.00749052 0.0923616 0.0534281 0.609493 0.5 +0.00849261 0.092349 0.0531984 0.63663 0.5 +0.009491 0.0923319 0.053062 0.648033 0.5 +0.0104929 0.0923225 0.0529394 0.64912 0.377069 +0.0114966 0.0923286 0.0527326 0.629731 0.5 +0.0124978 0.092313 0.0523832 0.519322 0.5 +0.000663768 0.131541 0.0142252 0.689628 0.5 +0.0337889 0.112917 0.0264745 0.63405 0.5 +-0.0180637 0.122407 0.0308158 0.574338 0.337907 +-0.0896888 0.137919 0.0321971 0.586347 0.461419 +-0.0697061 0.156309 0.0202886 0.681591 0.5 +0.0184844 0.092024 0.0477707 0.671835 0.5 +0.0194957 0.0920261 0.0477827 0.89206 0.5 +0.0204977 0.0920241 0.0479175 0.539269 0.46243 +0.0214843 0.092023 0.0479434 0.549538 0.5 +0.0224766 0.0920198 0.0478397 0.685145 0.5 +0.0190905 0.127062 0.0195525 0.50134 0.5 +-0.0755097 0.135846 0.0506323 0.603993 0.5 +-0.0225344 0.118142 0.03379 0.415116 0.5 +-0.0664528 0.145477 0.0410093 0.620117 0.5 +-0.0732183 0.172207 -0.0490431 0.43732 0.455145 +-0.000499443 0.114191 0.0415203 0.621781 0.5 +0.0166529 0.120978 0.0330533 0.703959 0.5 +-0.0784807 0.13724 0.0497912 0.55829 0.453344 +-0.0493916 0.144765 0.00938332 0.652465 0.5 +-0.0362968 0.126232 -0.00232089 0.921464 0.5 +-0.00748204 0.123738 0.0339317 0.543363 0.5 +0.0433826 0.0987102 0.00417641 0.555757 0.5 +0.0442649 0.0973538 0.00716867 0.553753 0.5 +-0.053518 0.1534 0.0145047 0.528925 0.5 +-0.0073165 0.13056 0.0112981 0.706736 0.5 +-0.0774871 0.138654 0.0489668 0.596044 0.5 +-0.0735032 0.144216 0.0449341 0.605367 0.5 +0.022476 0.125337 0.020807 0.396681 0.362349 +-0.0311279 0.168264 -0.00654632 0.59106 0.5 +-0.0377436 0.127354 0.000111554 0.899954 0.5 +-0.054309 0.153692 0.0171048 0.493532 0.5 +-0.0531482 0.161241 0.00587596 0.343566 0.5 +-0.0675655 0.156308 0.0210392 0.702651 0.5 +0.0206619 0.125677 0.022985 0.381715 0.475734 +-0.00852427 0.130326 0.0108566 0.706435 0.5 +-0.0891577 0.092949 0.0214162 0.539357 0.478012 +0.0360267 0.110062 0.0258818 0.523467 0.5 +-0.0852903 0.152844 0.0238067 0.277528 0.381002 +0.0244484 0.124114 0.020115 0.44565 0.40673 +0.008888 0.126629 0.0301427 0.412858 0.374221 +0.0370248 0.10907 0.0248298 0.525618 0.490546 +-0.0106876 0.129553 0.00573838 0.710437 0.5 +0.0357348 0.111877 0.0229152 0.632721 0.5 +-0.0868795 0.0927253 0.00342064 0.461785 0.310254 +-0.0924737 0.125588 0.0362608 0.812671 0.5 +-0.0701892 0.156285 0.021569 0.642536 0.5 +-0.0761724 0.154401 0.00198863 0.17823 0.203391 +-0.0182317 0.187056 -0.0182936 0.253429 0.5 +-0.0916556 0.116096 0.0323166 0.443392 0.5 +-0.0724942 0.0928706 0.0413391 0.55568 0.43183 +-0.071511 0.0930107 0.0417462 0.537557 0.47293 +-0.0705133 0.0930254 0.0420143 0.540765 0.5 +-0.0694907 0.0930374 0.0422024 0.680962 0.5 +-0.0685147 0.0930476 0.0422841 0.574642 0.488722 +-0.0674962 0.0930678 0.0426016 0.527605 0.487663 +-0.0665114 0.0931036 0.0430214 0.574093 0.376533 +-0.0655017 0.0931357 0.0435076 0.574069 0.5 +-0.0644838 0.0931562 0.0439721 0.496815 0.5 +-0.0635003 0.0931972 0.0443921 0.507451 0.477071 +-0.0624726 0.093208 0.0448109 0.534018 0.452286 +-0.0614885 0.0932285 0.0449784 0.537753 0.457253 +-0.0604952 0.0932426 0.0451145 0.659884 0.466892 +-0.0594987 0.0932573 0.0451741 0.662125 0.462435 +-0.0584964 0.0932599 0.0452695 0.657793 0.5 +-0.0574951 0.093265 0.0451928 0.667292 0.465296 +-0.0564987 0.0932477 0.0451284 0.527137 0.5 +-0.0554929 0.0932384 0.0449182 0.601179 0.5 +-0.054495 0.0932121 0.0445367 0.618373 0.395692 +-0.0534962 0.0931826 0.0441514 0.792626 0.5 +-0.0524976 0.0931679 0.0439324 0.836016 0.5 +-0.0514985 0.0931716 0.0440238 0.692006 0.5 +-0.0504998 0.0931897 0.044287 0.680849 0.5 +-0.0494967 0.0932039 0.0445022 0.630269 0.5 +-0.0484872 0.0931824 0.0442201 0.604984 0.410178 +-0.0474847 0.0931518 0.0438057 0.765284 0.5 +-0.0464855 0.0931347 0.0435353 0.770251 0.5 +-0.0454849 0.0931252 0.0434035 0.610876 0.5 +-0.0445007 0.0931064 0.043109 0.609839 0.417827 +-0.0434939 0.0930777 0.0427388 0.596658 0.475748 +-0.042508 0.0930307 0.0424902 0.52177 0.439233 +-0.0415 0.0930514 0.0423592 0.62934 0.461117 +-0.0404998 0.0930589 0.0424923 0.671879 0.5 +-0.0395093 0.0930879 0.0428865 0.674107 0.436406 +-0.0384668 0.0931237 0.0434147 0.705866 0.397738 +-0.0374862 0.0931566 0.0438456 0.720331 0.5 +-0.0364811 0.0931828 0.0441998 0.709757 0.5 +-0.0354775 0.0932002 0.0444179 0.720388 0.5 +-0.0344784 0.0932112 0.0445123 0.722766 0.5 +-0.0334907 0.0932064 0.044455 0.686904 0.5 +-0.0324927 0.0932098 0.0444316 0.636127 0.5 +-0.0314925 0.0932138 0.0444288 0.642486 0.5 +-0.030492 0.093206 0.0443051 0.614534 0.5 +-0.0294928 0.0931993 0.044345 0.608184 0.5 +-0.0284906 0.0932063 0.0444855 0.595205 0.5 +-0.0274983 0.0932247 0.0447643 0.581759 0.5 +-0.0266282 0.0932643 0.045173 0.646286 0.427692 +-0.0141549 0.129252 0.0145753 0.564574 0.318647 +0.0340287 0.115127 0.0194375 0.657194 0.5 +0.0346578 0.114254 0.0196698 0.64464 0.5 +0.0352633 0.113355 0.0198926 0.662863 0.5 +0.0364601 0.111481 0.0203251 0.676533 0.5 +0.0376363 0.109584 0.0207569 0.678516 0.5 +-0.0154115 0.128891 0.0141212 0.522428 0.5 +0.0370519 0.110502 0.0205344 0.668254 0.5 +0.0358716 0.112393 0.0201061 0.678056 0.5 +-0.0164997 0.0938314 0.054193 0.383617 0.5 +-0.015483 0.0938222 0.0546278 0.404176 0.5 +-0.0144923 0.093841 0.0546527 0.433568 0.483132 +-0.0135421 0.093873 0.0547462 0.516367 0.342031 +-0.0124997 0.0938947 0.0551641 0.515108 0.5 +-0.0114927 0.0938853 0.0554733 0.566519 0.434659 +-0.0104958 0.0939039 0.0555039 0.545713 0.5 +-0.00949586 0.0938956 0.0554931 0.576035 0.5 +-0.00849618 0.0939016 0.0554996 0.59899 0.5 +-0.00749757 0.0939067 0.0556187 0.610333 0.5 +-0.00649817 0.0939276 0.0556503 0.601668 0.450562 +-0.00549893 0.0939194 0.0556385 0.613541 0.5 +-0.00449744 0.0939058 0.0556112 0.627263 0.5 +-0.00349838 0.0938964 0.0554871 0.598483 0.5 +-0.00249784 0.0939038 0.0553992 0.599754 0.437826 +-0.0014996 0.0938866 0.0553603 0.575447 0.5 +-0.000502218 0.0938722 0.0552243 0.593606 0.5 +0.000498438 0.0938703 0.0551155 0.480344 0.457704 +0.00150188 0.0938741 0.0550191 0.571779 0.5 +0.00249981 0.0938632 0.054785 0.475085 0.487504 +0.00351431 0.0938625 0.0544725 0.468806 0.5 +0.00450074 0.0938217 0.0540732 0.479771 0.465143 +0.00549734 0.0937843 0.053579 0.489961 0.5 +0.00650022 0.0937602 0.0531051 0.507288 0.5 +0.00748123 0.0937253 0.0527164 0.518581 0.477016 +0.00848126 0.0936832 0.0524446 0.625449 0.5 +0.00949153 0.0936876 0.0522363 0.618469 0.5 +0.0104883 0.0936688 0.0521003 0.612462 0.5 +0.0114833 0.0936471 0.0518498 0.626354 0.5 +0.0124869 0.0936385 0.0515089 0.51522 0.5 +0.0134712 0.0936014 0.0511282 0.516295 0.482976 +0.0384483 0.10837 0.0201721 0.703146 0.5 +0.0406661 0.105634 0.0121644 0.697808 0.5 +-0.0504953 0.154968 0.0107183 0.610131 0.475405 +0.0174748 0.0934539 0.0481542 0.670498 0.5 +0.0184724 0.0934238 0.0476306 0.672311 0.473034 +0.0194892 0.0934174 0.0476186 0.904696 0.5 +0.0204871 0.0934146 0.0476927 0.535551 0.5 +0.0214864 0.0934187 0.0477129 0.689604 0.5 +0.022475 0.0933993 0.047467 0.675798 0.5 +-0.072501 0.11898 0.053434 0.66138 0.5 +-0.0324964 0.117987 0.0309791 0.596684 0.5 +-0.021523 0.118151 0.0342827 0.445128 0.445171 +-0.0735089 0.120392 0.0535609 0.647393 0.5 +-0.061813 0.175696 -0.0586065 0.353011 0.447085 +-0.00916969 0.168123 -0.0207225 0.221481 0.369387 +0.0051585 0.127708 0.0288034 0.424961 0.411149 +-0.0794167 0.137236 0.0495785 0.51997 0.456814 +-0.0304675 0.175749 -0.00423829 0.363298 0.5 +-0.0697175 0.155623 0.0028257 0.687058 0.5 +-0.0064883 0.123768 0.0340789 0.51268 0.388097 +0.043549 0.0987325 0.00516762 0.560166 0.5 +0.044036 0.0973464 0.00517085 0.558713 0.5 +-0.0245806 0.124862 0.0196194 0.337489 0.41587 +-0.0734899 0.123206 0.0535424 0.521311 0.483839 +-0.0784635 0.138605 0.0489019 0.556908 0.5 +-0.0725121 0.144203 0.0447958 0.614358 0.447167 +-0.0329445 0.121338 0.0269922 0.653174 0.370386 +-0.0586802 0.148237 0.034554 0.550628 0.436284 +-0.0814624 0.13163 0.0517276 0.537846 0.454568 +-0.0804996 0.127434 0.052885 0.551941 0.5 +-0.0732356 0.176411 -0.0530886 0.376496 0.5 +-0.0685481 0.156429 0.0206858 0.68524 0.321295 +0.0230836 0.12416 0.0238853 0.55377 0.444425 +-0.0108662 0.129871 0.00999779 0.699404 0.5 +-0.0384602 0.127124 -0.00162988 0.894322 0.5 +0.035443 0.111045 0.0256623 0.616368 0.5 +-0.069185 0.156032 0.0248455 0.531176 0.417911 +0.0228724 0.125195 0.0195238 0.42909 0.437087 +0.0212529 0.1262 0.0189269 0.430922 0.5 +0.0364765 0.110061 0.0246179 0.525392 0.485375 +-0.00949201 0.129843 0.00617837 0.719441 0.5 +0.0363164 0.11089 0.0231265 0.630416 0.5 +-0.0662723 0.154476 -0.00173975 0.784866 0.5 +-0.0655548 0.153788 -0.00146085 0.842506 0.5 +0.0106021 0.12463 0.0322012 0.517198 0.478408 +-0.0837218 0.154141 0.0154269 0.506582 0.5 +-0.00991923 0.0986226 0.0505787 0.362421 0.5 +0.0113328 0.124014 0.0325236 0.564376 0.5 +-0.0458806 0.10564 -0.0201801 0.683228 0.5 +-0.0715263 0.0944187 0.0416527 0.513056 0.5 +-0.0704921 0.0944433 0.0420805 0.518563 0.470645 +-0.0694824 0.0944579 0.0422945 0.672604 0.455387 +-0.0684942 0.0944611 0.0423345 0.685825 0.46007 +-0.067492 0.0944588 0.0423306 0.672396 0.5 +-0.0665096 0.0944832 0.0425185 0.6261 0.5 +-0.0654853 0.0944999 0.0429585 0.589231 0.5 +-0.064515 0.0945534 0.0434117 0.489697 0.479862 +-0.0635019 0.0945759 0.0438874 0.479062 0.5 +-0.0624814 0.094591 0.0443423 0.598111 0.5 +-0.0614849 0.0946016 0.0445824 0.602942 0.479644 +-0.0604857 0.094604 0.0446906 0.616966 0.5 +-0.0594974 0.0946317 0.0447571 0.51263 0.5 +-0.0584963 0.0946188 0.0448266 0.610175 0.477421 +-0.0574955 0.0946379 0.0447737 0.620681 0.5 +-0.0565021 0.0946206 0.04473 0.630879 0.5 +-0.0555057 0.0946 0.044463 0.610248 0.5 +-0.0544999 0.0945829 0.0441089 0.776814 0.5 +-0.053497 0.0945663 0.0438533 0.821889 0.5 +-0.0524967 0.0945727 0.0438723 0.663268 0.5 +-0.0514961 0.0945888 0.044111 0.661496 0.5 +-0.0504886 0.0946205 0.0445363 0.694559 0.454725 +-0.0494969 0.0946343 0.044743 0.666718 0.5 +-0.048501 0.0946267 0.0446158 0.664191 0.5 +-0.0474749 0.0945717 0.0440635 0.521803 0.356315 +-0.0464518 0.0945568 0.0436355 0.513848 0.5 +-0.0454954 0.0945383 0.0433792 0.512737 0.481592 +-0.0444648 0.0945053 0.0429498 0.631284 0.376642 +-0.0434854 0.0944868 0.0426487 0.617673 0.47353 +-0.0424855 0.09447 0.0423231 0.64866 0.5 +-0.0414998 0.0944525 0.0421484 0.668264 0.5 +-0.0405043 0.0944618 0.0422679 0.679214 0.5 +-0.0394914 0.0944889 0.0427101 0.663606 0.5 +-0.038479 0.0945169 0.0431902 0.658886 0.394778 +-0.0374622 0.0945463 0.043653 0.655463 0.5 +-0.0364793 0.0945677 0.0439429 0.676726 0.446015 +-0.0354827 0.0945899 0.0441989 0.816301 0.5 +-0.0344963 0.094609 0.0443801 0.6905 0.458851 +-0.0334933 0.0946149 0.0444857 0.694461 0.5 +-0.0324852 0.0946249 0.0445277 0.67509 0.5 +-0.0314938 0.0946271 0.0446065 0.633074 0.5 +-0.0304948 0.094646 0.0448519 0.622211 0.5 +-0.0294901 0.0946648 0.0450535 0.603361 0.5 +-0.0284962 0.0946634 0.0451029 0.56484 0.5 +-0.0274872 0.094655 0.0450969 0.67853 0.5 +-0.0265055 0.0946665 0.044662 0.6122 0.249606 +-0.0254987 0.0945485 0.0446378 0.672319 0.5 +-0.0665323 0.154667 0.00252946 0.893868 0.5 +-0.0455234 0.131922 0.0119481 0.462069 0.5 +-0.0315791 0.125791 0.0170798 0.445893 0.463327 +-0.0297787 0.125132 0.0177406 0.408696 0.5 +-0.0133594 0.127978 0.0236019 0.399424 0.5 +0.000512384 0.127929 0.028588 0.338057 0.454471 +0.00710349 0.126169 0.0309735 0.423369 0.5 +0.00523694 0.126704 0.0302977 0.39106 0.472658 +0.00144942 0.127679 0.0289378 0.430036 0.414441 +-0.0155009 0.0951913 0.0533641 0.323594 0.5 +-0.0144859 0.0951551 0.0535558 0.436317 0.5 +-0.0134899 0.0951663 0.0534531 0.482131 0.5 +-0.0125183 0.095238 0.0536312 0.453876 0.26908 +-0.0114897 0.0951792 0.0542781 0.446732 0.426556 +-0.0104933 0.0952299 0.0545267 0.455283 0.5 +-0.00948994 0.0952069 0.0546127 0.537313 0.421532 +-0.00849797 0.0952525 0.0545557 0.523072 0.5 +-0.00749453 0.0952341 0.0547544 0.542079 0.5 +-0.0064991 0.0952675 0.0547927 0.5561 0.5 +-0.00549683 0.095262 0.0547887 0.579525 0.5 +-0.0044982 0.0952431 0.0547633 0.613114 0.401248 +-0.00349883 0.095211 0.054715 0.593879 0.5 +-0.00249757 0.0952299 0.0546317 0.555935 0.5 +-0.00149834 0.095227 0.054625 0.544807 0.5 +-0.000500036 0.0952296 0.0545194 0.554008 0.5 +0.00049039 0.0952019 0.0544773 0.549265 0.5 +0.00148048 0.0952613 0.0542408 0.462121 0.46625 +0.00249575 0.0952068 0.0540463 0.443612 0.5 +0.00347944 0.095162 0.0537659 0.471629 0.465315 +0.00448177 0.0951431 0.0532987 0.485797 0.5 +0.00549498 0.0951378 0.0528545 0.500847 0.5 +0.00648653 0.0951017 0.0524749 0.494403 0.5 +0.00749418 0.095088 0.0520151 0.488013 0.5 +0.00848559 0.0950467 0.0516302 0.477185 0.5 +0.00948509 0.0950229 0.0512669 0.468503 0.5 +0.0104769 0.0949778 0.0509942 0.484291 0.45986 +0.0114695 0.0949418 0.0507264 0.483304 0.5 +0.0124807 0.0949598 0.0504131 0.596135 0.5 +0.01346 0.094917 0.0501359 0.485914 0.479285 +-0.057716 0.154704 0.0245626 0.568318 0.5 +0.0247834 0.123596 0.021665 0.557786 0.5 +0.0257715 0.122252 0.0234619 0.614147 0.5 +0.0174632 0.0948293 0.047857 0.687032 0.5 +0.0184887 0.0948214 0.0475148 0.947542 0.5 +0.0194938 0.0948135 0.0473832 0.694002 0.5 +0.0204841 0.0948066 0.0474378 0.552111 0.480708 +0.0214853 0.0948038 0.0473574 0.68672 0.5 +0.0224755 0.0947811 0.0470955 0.444578 0.465898 +-0.0334943 0.11802 0.0311453 0.599774 0.5 +-0.00448593 0.118295 0.0389891 0.643993 0.5 +-0.074497 0.120396 0.0533632 0.675309 0.5 +-0.0872512 0.106353 0.0133638 0.774556 0.5 +-0.0681737 0.074979 0.0383298 0.596573 0.5 +-0.032468 0.175717 -0.00291757 0.285206 0.449512 +0.00949693 0.121023 0.0358683 0.538088 0.5 +0.0383178 0.106879 0.000185785 0.557368 0.5 +-0.0229947 0.122243 0.0275866 0.436207 0.315306 +-0.00548754 0.123746 0.0343085 0.519143 0.393855 +0.0422406 0.0986762 0.0221715 0.651774 0.5 +0.0357616 0.0967769 -0.0118087 0.738943 0.5 +-0.0673436 0.155169 0.0284164 0.893254 0.5 +-0.0714952 0.123214 0.0534125 0.572458 0.476155 +-0.0794627 0.138625 0.0485832 0.512716 0.5 +-0.0715324 0.144165 0.0446205 0.605695 0.5 +0.00897367 0.131122 0.0172577 0.747635 0.5 +0.0363477 0.102053 0.0316389 0.720944 0.5 +-0.0794885 0.131664 0.0524764 0.582896 0.467752 +0.0373196 0.105416 -0.00382358 0.572263 0.5 +0.0374508 0.109679 0.00217662 0.520231 0.463847 +-0.00495697 0.0978375 0.052341 0.422404 0.431413 +0.0238446 0.123573 0.0241681 0.587498 0.5 +-0.0121305 0.129539 0.00953518 0.68427 0.5 +-0.037475 0.126933 -0.001254 0.904963 0.5 +0.0324864 0.115764 0.0245556 0.609476 0.5 +-0.025634 0.122393 0.025161 0.442263 0.5 +-0.0771699 0.154422 0.00455736 0.356309 0.420497 +0.0195548 0.127052 0.0182976 0.434474 0.446231 +0.0359077 0.111056 0.0244077 0.512747 0.5 +-0.00828798 0.130102 0.00662088 0.729842 0.5 +0.0112135 0.130703 0.0137986 0.851446 0.5 +0.0121385 0.130422 0.0141392 0.860172 0.5 +0.0130152 0.130057 0.0144613 0.858964 0.5 +0.0139278 0.129741 0.0148027 0.618873 0.5 +0.014767 0.129313 0.0151085 0.86632 0.5 +-0.037685 0.127343 0.0163262 0.597941 0.5 +-0.0525315 0.149847 0.0192949 0.696139 0.5 +-0.0868422 0.134936 0.00226938 0.578353 0.5 +-0.0715256 0.0958228 0.0413941 0.501422 0.5 +-0.0705026 0.0958452 0.0418601 0.581749 0.5 +-0.0694956 0.0958583 0.0420894 0.622397 0.5 +-0.0684956 0.0958684 0.0422138 0.670615 0.5 +-0.0674874 0.0958602 0.0421807 0.688572 0.5 +-0.066499 0.0958724 0.0422345 0.653051 0.5 +-0.0655014 0.0958911 0.0424957 0.626988 0.5 +-0.0644795 0.0959078 0.0429389 0.6064 0.5 +-0.0635036 0.095949 0.0432601 0.744304 0.5 +-0.0624759 0.0959475 0.043683 0.476666 0.484168 +-0.0614938 0.0959769 0.0438595 0.579508 0.478415 +-0.0604906 0.0959808 0.043977 0.587371 0.476647 +-0.0594946 0.0959853 0.0440949 0.591361 0.5 +-0.0584978 0.0959813 0.0440843 0.728858 0.5 +-0.0574984 0.0959784 0.0439666 0.721096 0.5 +-0.0564976 0.0959787 0.0438593 0.717939 0.5 +-0.0554959 0.0959795 0.0436611 0.610281 0.5 +-0.0544972 0.0959632 0.0436086 0.631584 0.476449 +-0.0534962 0.0959644 0.0436141 0.648636 0.5 +-0.0524868 0.0959601 0.0436811 0.660645 0.5 +-0.0514936 0.0959907 0.0439844 0.68094 0.5 +-0.0504951 0.0960175 0.0443724 0.653426 0.5 +-0.0494978 0.0960237 0.0444817 0.846649 0.5 +-0.0484883 0.0960313 0.0444485 0.535792 0.5 +-0.0474662 0.0960033 0.0439936 0.618274 0.5 +-0.0464486 0.0959731 0.0434949 0.520026 0.409904 +-0.0454824 0.0959409 0.0431744 0.516671 0.484183 +-0.0444676 0.0959215 0.0428438 0.651277 0.5 +-0.0434867 0.0959016 0.0426578 0.640881 0.5 +-0.0424793 0.0958739 0.0423242 0.639992 0.395624 +-0.0414969 0.095865 0.0421344 0.645753 0.5 +-0.0404927 0.0958661 0.0421915 0.663113 0.473982 +-0.0394877 0.095879 0.0424449 0.654206 0.459827 +-0.0384829 0.0959056 0.0428235 0.655545 0.452344 +-0.0374873 0.0959326 0.0432114 0.60535 0.5 +-0.0364738 0.0959436 0.0435424 0.535788 0.45299 +-0.0354714 0.0959602 0.0437897 0.649521 0.452898 +-0.0344873 0.0959942 0.0440904 0.658685 0.5 +-0.0334914 0.0960174 0.044365 0.691465 0.5 +-0.032494 0.096035 0.0446186 0.660035 0.5 +-0.0314905 0.0960436 0.0448087 0.80552 0.5 +-0.0304938 0.0960556 0.0449536 0.622199 0.473923 +-0.0294958 0.0960659 0.0449891 0.492988 0.473999 +-0.0285 0.0960446 0.0448096 0.680371 0.5 +-0.0274981 0.0960112 0.0443229 0.595207 0.324183 +-0.0264981 0.0959784 0.0437675 0.666104 0.5 +-0.0254875 0.0959781 0.0438332 0.679462 0.5 +-0.0245032 0.0960169 0.0442753 0.594736 0.5 +0.0114621 0.125412 0.0310862 0.483024 0.5 +-0.0144911 0.124164 0.030554 0.513821 0.373341 +-0.030372 0.124909 0.019004 0.32948 0.395256 +0.00388987 0.0987683 0.0495103 0.443441 0.478547 +-0.0894993 0.135155 0.0302067 0.816274 0.5 +-0.000225629 0.097747 0.0525183 0.511796 0.5 +0.00694939 0.128215 0.0280149 0.324012 0.5 +-0.0164554 0.0963571 0.0512639 0.329325 0.473307 +-0.0153678 0.09644 0.0517723 0.273845 0.433274 +-0.0144732 0.096429 0.0522087 0.328126 0.5 +-0.0134683 0.0964232 0.0523159 0.387734 0.5 +-0.0124889 0.0964872 0.0522501 0.407893 0.5 +-0.0114785 0.0965129 0.0526113 0.408222 0.426985 +-0.010476 0.0965182 0.0531854 0.380141 0.420987 +-0.00948854 0.0965445 0.0534324 0.417806 0.5 +-0.00849451 0.0965679 0.0534544 0.433026 0.5 +-0.00749239 0.096543 0.0535421 0.440218 0.5 +-0.00649214 0.0965537 0.0536631 0.465848 0.396855 +-0.00549542 0.0965711 0.0536823 0.485009 0.5 +-0.00449535 0.0965559 0.0536663 0.498558 0.5 +-0.0034976 0.0965806 0.0535793 0.509802 0.5 +-0.00249868 0.0965524 0.0536599 0.475181 0.5 +-0.00149973 0.0965741 0.0536819 0.453452 0.5 +-0.000502572 0.0965565 0.053664 0.47867 0.5 +0.000488577 0.0965409 0.0535304 0.393157 0.354699 +0.00149843 0.0965502 0.0531993 0.400613 0.467426 +0.00247314 0.0964836 0.053027 0.407936 0.5 +0.00347668 0.0964809 0.0526894 0.41136 0.478181 +0.00448513 0.0964789 0.0523472 0.511633 0.5 +0.005469 0.0964333 0.0520715 0.464971 0.483923 +0.00646924 0.0964123 0.0516046 0.52694 0.5 +0.00748545 0.0964088 0.0510363 0.509415 0.5 +0.00847616 0.0963576 0.0505263 0.493397 0.5 +0.00948792 0.0963424 0.0500581 0.508603 0.5 +0.0104732 0.0962984 0.0498872 0.531274 0.5 +0.0114882 0.0963254 0.0495798 0.573211 0.5 +0.0124693 0.0962821 0.0494059 0.498886 0.5 +0.0134626 0.0962698 0.0490469 0.494993 0.475893 +0.0144666 0.0962642 0.0485999 0.482453 0.463953 +0.015473 0.0962531 0.0481291 0.475068 0.5 +0.0164935 0.0962515 0.0477962 0.549347 0.5 +0.0174929 0.0962345 0.0475335 0.53252 0.5 +0.0184956 0.0962193 0.0472822 0.711068 0.5 +0.0194833 0.0961991 0.0471957 0.727042 0.5 +0.0204867 0.0961927 0.0470968 0.568529 0.5 +0.021477 0.0961774 0.0469631 0.550671 0.5 +0.0224877 0.0961643 0.0466342 0.460645 0.474108 +-0.0344954 0.118007 0.0312549 0.616783 0.5 +-0.00349112 0.118315 0.0390164 0.651992 0.5 +-0.0755176 0.120378 0.0530566 0.681596 0.5 +-0.0334971 0.119329 0.0299275 0.569719 0.5 +-0.0744868 0.14835 0.0408614 0.508 0.5 +-0.0444953 0.12065 0.0276432 0.500567 0.5 +0.00850062 0.121038 0.0360118 0.641211 0.5 +-0.0893812 0.113196 0.0217139 0.707281 0.356369 +0.00393808 0.131671 0.0154244 0.755999 0.5 +0.0272653 0.121002 0.0240179 0.663831 0.5 +-0.0414264 0.125093 -0.00826982 0.586796 0.5 +-0.073439 0.148627 -0.0298053 0.224341 0.389051 +-0.00496439 0.130958 0.0121612 0.705251 0.5 +-0.0663732 0.0796127 0.0418746 0.614914 0.477851 +-0.0804568 0.138622 0.0481167 0.396637 0.465328 +0.0367704 0.109675 0.000243105 0.529921 0.5 +-0.00429403 0.131101 0.0138416 0.706275 0.5 +0.0414017 0.104253 0.00516521 0.521255 0.488337 +-0.078485 0.131655 0.0526796 0.600013 0.475532 +-0.0921247 0.116117 0.0353113 0.525773 0.5 +-0.0275092 0.181505 -0.00874152 0.220784 0.5 +-0.0458334 0.0927472 -0.0217986 0.709831 0.5 +-0.069928 0.113662 -0.00916203 0.5565 0.5 +-0.0672153 0.156284 0.0168104 0.798225 0.5 +0.0245725 0.122909 0.0244414 0.477482 0.5 +-0.0183558 0.127798 0.00725695 0.670821 0.5 +-0.0365184 0.126747 -0.000928274 0.910993 0.5 +0.0318733 0.11664 0.0243218 0.60284 0.5 +-0.0418108 0.128972 0.0103834 0.81345 0.5 +0.02042 0.126659 0.0186188 0.42021 0.400847 +-0.0203015 0.124709 0.0241059 0.381356 0.5 +-0.00714757 0.130278 0.00704353 0.71994 0.5 +-0.00588102 0.130577 0.00751387 0.733861 0.5 +-0.03056 0.124009 -0.00164624 0.894133 0.5 +-0.0315292 0.124197 -0.00202254 0.917943 0.5 +-0.0932956 0.12823 0.014251 0.737962 0.5 +-0.0884031 0.101017 0.0203758 0.483641 0.5 +0.0156548 0.128965 0.0154331 0.606637 0.5 +-0.0253871 0.124202 0.0208009 0.330151 0.437578 +-0.0686442 0.156175 0.0235781 0.583132 0.5 +-0.0715189 0.0972122 0.0409969 0.481571 0.5 +-0.0705311 0.0972485 0.0414142 0.465931 0.48168 +-0.069435 0.0972593 0.0417284 0.49974 0.444653 +-0.0685036 0.0972643 0.0418698 0.517294 0.471679 +-0.0674995 0.0972695 0.0419768 0.670525 0.470095 +-0.0665061 0.0972756 0.0420058 0.674435 0.5 +-0.0655106 0.0972881 0.0421527 0.6747 0.5 +-0.0644877 0.0972949 0.0424471 0.639459 0.5 +-0.0634992 0.0973124 0.0426152 0.791726 0.5 +-0.0625026 0.0973365 0.0428841 0.590934 0.5 +-0.0614955 0.0973435 0.04311 0.779482 0.5 +-0.0604951 0.097348 0.0432235 0.774716 0.5 +-0.0594946 0.0973472 0.0432255 0.773973 0.5 +-0.0585016 0.0973698 0.0431908 0.783343 0.5 +-0.0574972 0.0973516 0.04313 0.794666 0.5 +-0.0564981 0.0973554 0.0431547 0.819901 0.5 +-0.0554983 0.0973521 0.0432389 0.836255 0.5 +-0.0544984 0.0973596 0.0432594 0.8341 0.5 +-0.0534968 0.0973516 0.0432358 0.798819 0.5 +-0.0524899 0.0973506 0.0433264 0.641446 0.5 +-0.051494 0.097382 0.0437255 0.645994 0.474359 +-0.050495 0.0974075 0.0440057 0.64429 0.465859 +-0.0494963 0.0974185 0.0440407 0.637806 0.5 +-0.0484974 0.0974063 0.0440017 0.636324 0.465885 +-0.0475033 0.0973719 0.0436212 0.636465 0.395803 +-0.0464922 0.097353 0.0431423 0.639666 0.5 +-0.0455017 0.0973341 0.0429686 0.635528 0.5 +-0.044481 0.0973337 0.0428134 0.674261 0.5 +-0.0435092 0.0973014 0.0425845 0.648927 0.395789 +-0.0424946 0.0972875 0.0422451 0.621783 0.5 +-0.0415001 0.0972709 0.0420669 0.829633 0.5 +-0.0404973 0.0972715 0.0419896 0.660837 0.5 +-0.0395059 0.0972892 0.042147 0.657347 0.5 +-0.0385113 0.0973107 0.0424108 0.632412 0.5 +-0.0374891 0.0973119 0.0427062 0.652032 0.5 +-0.0364752 0.09732 0.0430461 0.635436 0.5 +-0.0354688 0.0973337 0.0432864 0.509845 0.5 +-0.0344737 0.0973629 0.0436701 0.621146 0.5 +-0.0335185 0.0974234 0.0440535 0.641243 0.468472 +-0.0324865 0.0974182 0.0443398 0.646005 0.477895 +-0.0314936 0.097435 0.044487 0.824329 0.5 +-0.0304964 0.0974331 0.0445755 0.606432 0.5 +-0.0295025 0.0974144 0.0445077 0.557338 0.5 +-0.0285002 0.097396 0.0440561 0.737424 0.5 +-0.0274965 0.0973724 0.0435854 0.733952 0.5 +-0.0264937 0.0973851 0.0437224 0.745543 0.5 +-0.0254927 0.0974122 0.0441083 0.687834 0.5 +-0.0244818 0.0974513 0.0444604 0.512294 0.4578 +-0.0234815 0.0974495 0.044821 0.576924 0.5 +-0.0286176 0.124173 0.0196508 0.409142 0.5 +0.0447715 0.070791 0.0233171 0.530586 0.5 +-0.0282629 0.122524 0.022734 0.470006 0.402936 +0.0453129 0.0698237 0.023466 0.547312 0.5 +-0.0546525 0.154186 0.0155249 0.453215 0.445889 +0.0511802 0.0687267 0.0256724 0.479052 0.5 +0.0461067 0.069238 0.0238359 0.471788 0.5 +-0.0154978 0.0977476 0.0489325 0.378273 0.292319 +0.0423933 0.0901635 -0.00682346 0.495184 0.485518 +-0.0931816 0.121543 0.0372829 0.602492 0.46496 +-0.0944613 0.121476 0.0212834 0.660571 0.5 +-0.0493499 0.141685 0.00939558 0.551416 0.5 +-0.0678507 0.166619 -0.0550103 0.518991 0.5 +-0.00948278 0.0978353 0.051868 0.325673 0.361653 +-0.00848562 0.0978428 0.0521021 0.364476 0.5 +-0.00748928 0.0978336 0.0520944 0.395687 0.420746 +-0.00649249 0.0978569 0.0522238 0.392997 0.413885 +-0.00549246 0.097843 0.0523265 0.399128 0.5 +-0.0623164 0.153672 -0.0306063 0.504191 0.5 +-0.0623115 0.16311 -0.0435951 0.426292 0.444079 +-0.00249736 0.0978288 0.0524276 0.420203 0.5 +-0.00150184 0.0978367 0.052434 0.3929 0.5 +-0.00051118 0.0978394 0.0524335 0.397454 0.5 +0.000474346 0.0977989 0.0522897 0.520914 0.5 +0.00145793 0.0977369 0.0519067 0.428962 0.5 +0.00247063 0.0977635 0.0514765 0.437052 0.481802 +0.00346471 0.0977538 0.051238 0.467651 0.483566 +0.00446502 0.0977292 0.050995 0.618393 0.5 +0.00544999 0.097676 0.0507202 0.579638 0.5 +0.0064803 0.0977098 0.0499318 0.46146 0.5 +0.0074848 0.0976824 0.0494394 0.581596 0.5 +0.00848893 0.0976878 0.0492062 0.582164 0.5 +0.00948927 0.0976692 0.0490505 0.470012 0.5 +0.0104935 0.0976882 0.0488434 0.528168 0.5 +0.0114806 0.097647 0.0487825 0.574347 0.434701 +0.012476 0.0976634 0.0485624 0.600016 0.5 +0.0134806 0.0976663 0.0482444 0.521017 0.5 +0.0144699 0.0976455 0.0479677 0.50391 0.5 +0.0154693 0.0976312 0.0477084 0.492525 0.5 +0.0164701 0.0976264 0.0474551 0.58891 0.442339 +0.0174829 0.0976104 0.0472234 0.564062 0.5 +0.0184875 0.0976002 0.0470854 0.595024 0.46889 +0.0194801 0.0975854 0.0469408 0.571908 0.481026 +0.0204758 0.0975716 0.0468126 0.550142 0.484915 +0.0214666 0.0975514 0.0465681 0.547106 0.5 +0.0224678 0.0975265 0.046211 0.453705 0.5 +-0.0354946 0.118017 0.0312708 0.641551 0.376889 +-0.00249301 0.118317 0.039019 0.665688 0.5 +-0.076603 0.120411 0.0526033 0.564622 0.5 +-0.0324956 0.119317 0.0295507 0.552806 0.5 +-0.0754818 0.148362 0.0406222 0.484082 0.5 +-0.0433806 0.120699 0.0278302 0.474265 0.5 +0.00749727 0.121002 0.0360768 0.628329 0.5 +-0.0717062 0.159603 -0.040933 0.519944 0.5 +0.00341369 0.131576 0.0166618 0.695719 0.5 +0.0280038 0.120349 0.024295 0.528915 0.5 +-0.0649944 0.132589 -0.00831046 0.790869 0.5 +-0.0525045 0.159361 0.00819169 0.351846 0.5 +0.0130462 0.129592 0.0201813 0.493186 0.5 +0.0370837 0.103994 -0.00683208 0.490915 0.5 +-0.00244654 0.131114 0.00878185 0.743601 0.5 +-0.0774749 0.141413 0.0470689 0.540092 0.418579 +-0.0424553 0.128377 0.00131486 0.857725 0.5 +0.0369538 0.108295 0.0261877 0.53385 0.470822 +-0.0764958 0.131682 0.0526442 0.596061 0.5 +-0.0746833 0.155701 -0.000366346 0.2148 0.322194 +-0.0264503 0.181668 -0.00853376 0.237537 0.420714 +-0.0728912 0.11354 -0.00756484 0.448681 0.5 +0.00286804 0.129802 0.0250965 0.35508 0.40535 +0.0252887 0.122228 0.0247087 0.496718 0.5 +-0.019615 0.127443 0.00679651 0.689854 0.5 +0.0185712 0.126949 0.0207922 0.475592 0.415401 +0.0312116 0.11742 0.0240751 0.59127 0.5 +-0.0464485 0.132668 0.0189406 0.671835 0.5 +0.0187225 0.127515 0.0179893 0.449095 0.470283 +-0.0189668 0.125144 0.0245507 0.383916 0.5 +-0.0641214 0.155412 0.0266328 0.923827 0.5 +-0.0243712 0.122748 0.0255975 0.515248 0.5 +-0.0785581 0.153669 0.00407716 0.314891 0.5 +-0.0435601 0.129686 0.00973169 0.598048 0.5 +-0.0459009 0.131661 0.0191601 0.619259 0.5 +-0.0781924 0.155673 0.0158655 0.641479 0.5 +-0.0741715 0.151271 -0.0318825 0.406089 0.5 +0.0165672 0.128654 0.015768 0.86732 0.5 +-0.024293 0.124271 0.0211991 0.359441 0.5 +-0.0712372 0.167165 -0.0209901 0.29398 0.413161 +-0.0705221 0.098629 0.0408842 0.471443 0.460307 +-0.0694918 0.0986232 0.041191 0.593817 0.469427 +-0.0684985 0.0986495 0.0414678 0.513557 0.5 +-0.0674898 0.0986608 0.0416951 0.533245 0.483082 +-0.0665138 0.0986787 0.0417758 0.673276 0.5 +-0.0655092 0.0986926 0.0420188 0.564936 0.5 +-0.0644854 0.0986987 0.0423063 0.535206 0.5 +-0.0635094 0.0987058 0.0422669 0.644875 0.487413 +-0.0624966 0.0987153 0.0424769 0.630898 0.5 +-0.0614969 0.0987359 0.0427353 0.82794 0.5 +-0.0604873 0.0987275 0.0428004 0.822836 0.5 +-0.0595022 0.0987448 0.042776 0.82696 0.5 +-0.0585002 0.0987496 0.0428962 0.830086 0.5 +-0.0574975 0.0987515 0.0429871 0.842071 0.5 +-0.0564971 0.0987696 0.0431638 0.683055 0.5 +-0.0555018 0.0987713 0.0432834 0.678208 0.471968 +-0.0544751 0.0987674 0.042954 0.839333 0.370201 +-0.0534996 0.0987387 0.0427565 0.794248 0.5 +-0.0524927 0.0987339 0.0429361 0.618248 0.5 +-0.0514869 0.0987554 0.0433116 0.777374 0.5 +-0.050497 0.0987878 0.0435099 0.511322 0.482806 +-0.0494959 0.0988033 0.0435442 0.628489 0.47629 +-0.0484961 0.0987927 0.0435149 0.625789 0.5 +-0.0474987 0.0987688 0.0431343 0.623362 0.399136 +-0.0464941 0.0987388 0.0427545 0.64099 0.5 +-0.0454908 0.0987379 0.0426533 0.649837 0.5 +-0.044494 0.0987314 0.042632 0.656595 0.469949 +-0.043484 0.0987241 0.0424341 0.61962 0.5 +-0.0425023 0.0986936 0.0421906 0.790861 0.5 +-0.0414965 0.0986758 0.0418571 0.612018 0.5 +-0.0404977 0.0986657 0.0417206 0.510875 0.463015 +-0.0395091 0.0986823 0.0417741 0.514712 0.470091 +-0.0385061 0.0986889 0.0419871 0.595933 0.468843 +-0.0375032 0.0987213 0.042382 0.645813 0.5 +-0.0364954 0.0987325 0.0427313 0.634237 0.5 +-0.0354848 0.0987251 0.0428224 0.617222 0.5 +-0.0344901 0.0987486 0.043091 0.595321 0.5 +-0.0334818 0.0987718 0.0435747 0.495739 0.5 +-0.0325019 0.0988116 0.0438807 0.500012 0.465583 +-0.0314884 0.0988001 0.0440684 0.616515 0.5 +-0.030496 0.0988081 0.0439786 0.599997 0.478744 +-0.0295082 0.0987895 0.0437091 0.620593 0.371038 +-0.028491 0.0987621 0.0434122 0.793095 0.5 +-0.0275028 0.0988006 0.0435593 0.810681 0.5 +-0.0264937 0.098817 0.0439871 0.585357 0.5 +-0.025483 0.0988427 0.0444451 0.587385 0.5 +-0.0244818 0.0988555 0.0446892 0.552427 0.5 +-0.0234982 0.0988724 0.0447778 0.53796 0.5 +-0.0224928 0.0988548 0.044702 0.38899 0.5 +-0.021497 0.0988475 0.0444941 0.43192 0.5 +-0.0204963 0.0988407 0.0444811 0.371728 0.471478 +-0.0470246 0.133586 0.0187098 0.696064 0.5 +-0.0844521 0.153452 0.0225801 0.282648 0.411004 +0.00787676 0.127927 0.0283381 0.34839 0.401249 +-0.0655006 0.155906 0.0116223 0.815151 0.5 +0.0503042 0.0691243 0.0253774 0.515247 0.5 +-0.0409656 0.122163 0.0270528 0.324563 0.5 +-0.0134628 0.0989564 0.047529 0.264786 0.263292 +-0.0853725 0.111782 0.0273822 0.590334 0.5 +-0.0875766 0.122583 -0.000713178 0.495444 0.463001 +-0.0934477 0.121479 0.0262963 0.802537 0.5 +0.0441667 0.0973563 0.00616912 0.555121 0.5 +-0.0642915 0.169488 -0.0607786 0.362406 0.5 +-0.0875779 0.102333 0.0213648 0.606129 0.5 +-0.0781864 0.161095 -0.0229348 0.465605 0.5 +-0.0794888 0.111206 0.0453002 0.53634 0.5 +-0.0748963 0.0690517 0.0244939 0.72263 0.5 +-0.0106577 0.165418 -0.0198106 0.247644 0.5 +-0.063271 0.158522 -0.0165888 0.464075 0.5 +-0.062316 0.158431 -0.019584 0.462082 0.5 +-0.00921165 0.172686 -0.0275682 0.287704 0.5 +0.0448613 0.0903726 0.0191701 0.505104 0.46734 +-0.0513173 0.146268 0.0144074 0.546074 0.5 +-0.0896848 0.0929338 0.0144339 0.827007 0.5 +0.0034577 0.0989815 0.0493164 0.41717 0.477634 +0.00448398 0.0989824 0.0487111 0.576635 0.5 +0.00550054 0.0990386 0.0482677 0.650605 0.5 +0.00650478 0.0989998 0.0481043 0.642851 0.5 +0.00750734 0.0990008 0.0480837 0.494404 0.5 +0.00850898 0.0990197 0.0481875 0.500728 0.5 +0.00950564 0.0990636 0.0482467 0.648225 0.5 +0.0105224 0.0990052 0.0483243 0.567022 0.464613 +0.0114933 0.0990667 0.0482243 0.588275 0.5 +0.012486 0.0990688 0.0481132 0.631125 0.5 +0.0134754 0.0990564 0.0479483 0.521615 0.444721 +0.0144891 0.0990552 0.047648 0.51523 0.5 +0.0154871 0.0990335 0.0473819 0.624299 0.5 +0.0164968 0.0990289 0.0471605 0.621038 0.5 +0.0174821 0.0990004 0.0469682 0.614695 0.5 +0.018473 0.0989902 0.0468145 0.593986 0.448967 +0.0194854 0.0989751 0.0466096 0.558101 0.5 +0.020477 0.0989516 0.0463466 0.531084 0.5 +0.0214637 0.0989203 0.04607 0.435356 0.5 +-0.0364985 0.117968 0.0313259 0.6304 0.5 +-0.00149237 0.118319 0.0391398 0.673378 0.392335 +0.00842909 0.131472 0.01278 0.830368 0.5 +-0.0861949 0.139089 0.00320204 0.36304 0.5 +-0.000497737 0.11557 0.0407823 0.654218 0.421861 +-0.0423644 0.120691 0.0280931 0.483704 0.5 +0.00650273 0.121045 0.0359095 0.625722 0.388012 +0.0400623 0.0956447 -0.00679711 0.613362 0.436619 +-0.019377 0.127678 0.00978651 0.586122 0.5 +0.0414332 0.100023 0.0231582 0.517992 0.5 +-0.0717668 0.172238 -0.0510285 0.462311 0.5 +-0.0515046 0.159378 0.00834015 0.436904 0.5 +-0.0345217 0.127119 0.00425139 0.874547 0.5 +-0.0725117 0.163674 -0.014076 0.353527 0.40159 +-0.0722654 0.153589 0.032663 0.291091 0.449707 +-0.079478 0.142827 0.0451049 0.39284 0.465854 +0.0451235 0.093189 0.0121575 0.573151 0.5 +-0.0563767 0.0650155 0.0336358 0.494963 0.328305 +-0.0619803 0.153737 -0.02558 0.778331 0.5 +-0.0745149 0.121791 0.0533186 0.676119 0.5 +0.0382636 0.109749 0.0121659 0.710008 0.5 +-0.0498185 0.0927102 -0.0215416 0.807094 0.5 +-0.04783 0.0927226 -0.0216222 0.818245 0.5 +-0.0468295 0.0927337 -0.0216687 0.793921 0.5 +0.00188261 0.129936 0.0247306 0.389205 0.432719 +0.0260062 0.121547 0.0249766 0.527495 0.5 +-0.0208041 0.127131 0.0063587 0.68262 0.5 +0.0193916 0.12656 0.0211758 0.432116 0.374783 +0.0305485 0.118199 0.0238252 0.747089 0.5 +-0.0695537 0.163673 -0.0146023 0.443515 0.419347 +0.0170321 0.128388 0.0173658 0.582793 0.5 +0.0178664 0.127935 0.017674 0.444644 0.5 +-0.000572916 0.131478 0.0109076 0.744417 0.5 +-0.00171604 0.131316 0.0104838 0.751939 0.5 +-0.00281159 0.131227 0.0100802 0.741774 0.275893 +-0.00395268 0.131078 0.00966125 0.724744 0.5 +-0.00521852 0.130779 0.0091953 0.727419 0.5 +-0.00636015 0.130593 0.00877385 0.73768 0.5 +-0.0113055 0.0991708 0.0485876 0.37012 0.386667 +-0.0351946 0.125334 -0.00338173 0.917572 0.5 +0.0174435 0.128281 0.0160914 0.863209 0.5 +-0.0231537 0.124452 0.0216177 0.356456 0.5 +-0.0704983 0.0999903 0.0403231 0.581087 0.5 +-0.0694874 0.100005 0.0406788 0.609123 0.5 +-0.0685089 0.100042 0.0409867 0.509991 0.5 +-0.067492 0.10005 0.0413205 0.516798 0.5 +-0.0665225 0.10009 0.04154 0.547797 0.469919 +-0.0654981 0.100096 0.041968 0.569779 0.471252 +-0.0644984 0.100116 0.0422372 0.549695 0.479742 +-0.0635064 0.100118 0.0422551 0.552989 0.483577 +-0.0624922 0.100117 0.0423224 0.655576 0.5 +-0.061495 0.100138 0.0425963 0.529374 0.5 +-0.0604937 0.100137 0.0425915 0.643774 0.5 +-0.0594966 0.100149 0.0427407 0.657731 0.5 +-0.0584986 0.100161 0.0428821 0.653466 0.5 +-0.0574972 0.100168 0.0430053 0.837833 0.5 +-0.0564969 0.100177 0.0431307 0.847272 0.5 +-0.0554937 0.100184 0.0430705 0.647378 0.5 +-0.0544965 0.100156 0.0427594 0.654156 0.5 +-0.0534975 0.100135 0.0423919 0.63231 0.5 +-0.0524987 0.100127 0.0423619 0.791107 0.5 +-0.0515005 0.100157 0.0426446 0.747848 0.5 +-0.0505003 0.100168 0.042883 0.606698 0.458963 +-0.0494962 0.100168 0.0429965 0.608323 0.5 +-0.0484978 0.100158 0.0428666 0.620833 0.5 +-0.0474967 0.100136 0.0424923 0.626898 0.5 +-0.0464942 0.100125 0.0422537 0.82333 0.5 +-0.0454881 0.10014 0.0423159 0.65741 0.5 +-0.0444966 0.100126 0.0423688 0.63212 0.5 +-0.0434795 0.10013 0.0422114 0.609525 0.5 +-0.0424925 0.100104 0.042001 0.744217 0.5 +-0.0414824 0.100082 0.0415393 0.584601 0.424311 +-0.0404973 0.10005 0.041322 0.484307 0.5 +-0.0395001 0.100068 0.0413695 0.566007 0.5 +-0.0384976 0.100064 0.0415702 0.564773 0.482405 +-0.0374845 0.100078 0.0419234 0.751982 0.5 +-0.0364875 0.100095 0.0421869 0.614748 0.5 +-0.0355126 0.10012 0.0421792 0.608167 0.468688 +-0.0344858 0.100109 0.0424402 0.589318 0.5 +-0.0334786 0.100129 0.0429194 0.560551 0.483649 +-0.0324893 0.100164 0.0432113 0.595072 0.472122 +-0.0315045 0.100214 0.0434156 0.623044 0.463998 +-0.0305006 0.100206 0.0434038 0.618877 0.5 +-0.0294996 0.100187 0.0432585 0.804809 0.5 +-0.0284889 0.100156 0.0431683 0.818822 0.5 +-0.0274963 0.100194 0.0434874 0.829746 0.5 +-0.0264896 0.100224 0.0439794 0.611347 0.5 +-0.0254848 0.100235 0.0442056 0.505148 0.5 +-0.0244887 0.100244 0.0443393 0.612015 0.5 +-0.0234958 0.100256 0.0443804 0.558205 0.5 +-0.0224965 0.100254 0.0443771 0.705211 0.5 +-0.0214986 0.100246 0.0444424 0.61853 0.5 +-0.0204991 0.100239 0.044421 0.456426 0.5 +-0.0194981 0.10024 0.044034 0.564457 0.5 +-0.0184988 0.100234 0.0438197 0.516058 0.5 +-0.0175006 0.10024 0.0438179 0.532827 0.5 +-0.0165065 0.100263 0.0439632 0.546899 0.5 +-0.0155017 0.100285 0.044225 0.408951 0.464699 +-0.0145298 0.100345 0.0444168 0.429446 0.5 +-0.0629867 0.155807 0.0241223 0.594217 0.5 +-0.0125718 0.100502 0.0445971 0.277864 0.5 +-0.0115592 0.100495 0.0448823 0.252115 0.38883 +-0.0105339 0.100499 0.0452584 0.201344 0.319873 +-0.00945074 0.100225 0.0471086 0.229099 0.5 +-0.00845767 0.100229 0.0476033 0.278386 0.5 +-0.0700395 0.077854 0.0390736 0.599047 0.5 +-0.0902184 0.117255 0.00530427 0.425147 0.5 +-0.0896451 0.11724 0.00430849 0.622458 0.5 +-0.0515285 0.144709 0.0153879 0.721036 0.5 +0.0376089 0.108292 0.000165208 0.452174 0.466383 +-0.0882673 0.102346 0.019362 0.590519 0.5 +0.0456785 0.0862046 0.0141695 0.560339 0.443261 +-0.0334865 0.126881 0.00753677 0.892347 0.5 +0.0420248 0.0845075 -0.00777453 0.488371 0.485211 +0.00149286 0.100277 0.0469858 0.395489 0.5 +0.00250457 0.100333 0.0462614 0.441214 0.5 +0.00351386 0.100332 0.0462561 0.553351 0.5 +0.00451352 0.10035 0.0463879 0.580371 0.5 +0.00553763 0.100304 0.04669 0.538036 0.5 +0.0065365 0.100373 0.0469448 0.44378 0.362508 +0.00754987 0.100371 0.0472771 0.435076 0.395659 +0.00853944 0.100396 0.0475311 0.460698 0.424942 +0.00951942 0.100425 0.0477045 0.446693 0.461719 +0.0105108 0.100431 0.0479236 0.724677 0.5 +0.0115006 0.100446 0.0479384 0.601858 0.5 +0.0124861 0.100431 0.0478938 0.609807 0.5 +0.0134789 0.100443 0.0476777 0.610531 0.373827 +0.014479 0.100435 0.047468 0.509858 0.5 +0.0154605 0.100515 0.0471558 0.506369 0.450262 +0.0164934 0.100411 0.0468922 0.621552 0.5 +0.0174821 0.10039 0.0467276 0.608379 0.5 +0.0184753 0.100361 0.0464541 0.571331 0.5 +0.0194756 0.100345 0.0462123 0.451923 0.5 +-0.0714963 0.118989 0.0533881 0.642933 0.5 +-0.0374964 0.118015 0.0312717 0.645247 0.5 +-0.000498349 0.118323 0.0391474 0.668687 0.5 +-0.0259323 0.124597 0.000115117 0.7317 0.5 +0.0423459 0.0915624 -0.00580854 0.449995 0.5 +0.0349174 0.110993 0.0268865 0.640135 0.5 +-0.0414986 0.120686 0.028403 0.423604 0.5 +0.00550248 0.121034 0.0357708 0.633243 0.5 +-0.0802651 0.0963563 -0.00854135 0.515273 0.5 +-0.00717802 0.130589 0.0142265 0.634827 0.5 +-0.0761869 0.149999 -0.0118749 0.730394 0.5 +0.0396966 0.105593 0.0211678 0.665291 0.5 +-0.0494961 0.159354 0.00844009 0.560602 0.5 +-0.0300028 0.125562 0.00590559 0.866095 0.5 +-0.0679568 0.13115 -0.00879393 0.715827 0.5 +0.0266539 0.122169 0.0209401 0.504236 0.5 +0.040054 0.0998936 -0.00479776 0.554894 0.5 +-0.0783661 0.108548 -0.00557568 0.540251 0.381971 +-0.025156 0.16972 -0.0189618 0.757996 0.5 +-0.044533 0.160785 0.0064482 0.609356 0.5 +-0.083008 0.154405 0.0171359 0.468625 0.5 +-0.0188353 0.12777 0.00853266 0.637105 0.5 +-0.0738828 0.103582 -0.0116089 0.582333 0.5 +-0.0704775 0.114632 0.0510417 0.429195 0.5 +-0.0713665 0.156324 0.018248 0.623638 0.5 +-0.0746893 0.154119 0.0302893 0.779979 0.5 +0.0267259 0.120866 0.0252428 0.532639 0.5 +-0.0221189 0.12668 0.005878 0.680483 0.5 +0.0203176 0.126182 0.0214303 0.448613 0.442595 +0.0298839 0.118971 0.0235707 0.739245 0.5 +-0.068723 0.163208 -0.0142948 0.354549 0.5 +-0.0666208 0.161046 -0.0135117 0.381465 0.453999 +-0.0660228 0.160133 -0.0132914 0.563205 0.5 +-0.0653912 0.159256 -0.0130566 0.633671 0.5 +-0.0647237 0.158466 -0.0128094 0.474274 0.5 +-0.0641628 0.157463 -0.0125984 0.481826 0.5 +-0.0636347 0.156368 -0.0124044 0.41659 0.5 +-0.079254 0.149169 0.0379325 0.438698 0.363742 +-0.0636022 0.151642 0.0357576 0.435746 0.5 +-0.00750341 0.130405 0.00835201 0.714135 0.5 +-0.0735439 0.101276 0.0379813 0.551123 0.5 +-0.0725318 0.101313 0.038599 0.5403 0.5 +-0.0714995 0.101334 0.0391804 0.543994 0.5 +-0.0704991 0.101365 0.0396906 0.565434 0.5 +-0.0694928 0.101384 0.0400561 0.59913 0.5 +-0.0685022 0.101419 0.0404594 0.504115 0.48663 +-0.0674677 0.10143 0.0408399 0.5143 0.437014 +-0.0664999 0.101466 0.0412188 0.536907 0.5 +-0.0654857 0.101487 0.0416824 0.621687 0.5 +-0.0644855 0.101502 0.0419335 0.791507 0.5 +-0.0634892 0.101502 0.0420523 0.527064 0.476428 +-0.0624918 0.101519 0.0421076 0.643566 0.47816 +-0.0614982 0.101529 0.0422258 0.619753 0.5 +-0.0604928 0.101522 0.0423039 0.520379 0.484817 +-0.0594971 0.101543 0.0424741 0.641718 0.5 +-0.058497 0.101559 0.0426268 0.63624 0.5 +-0.0574971 0.10156 0.0427298 0.81118 0.5 +-0.0564976 0.101562 0.0427397 0.639204 0.5 +-0.0554957 0.10156 0.042627 0.626125 0.461576 +-0.0544907 0.101557 0.0424048 0.636051 0.5 +-0.0534909 0.101517 0.0419949 0.641273 0.393815 +-0.0524991 0.101502 0.0417298 0.627781 0.5 +-0.0514967 0.101534 0.0419051 0.59474 0.5 +-0.0504989 0.101536 0.0421291 0.57713 0.5 +-0.0494967 0.101524 0.042218 0.573592 0.5 +-0.0484979 0.101507 0.0419588 0.602532 0.5 +-0.0474968 0.101477 0.0417865 0.773916 0.5 +-0.0464984 0.101529 0.041912 0.852179 0.5 +-0.045498 0.101529 0.0420301 0.625567 0.482715 +-0.0444896 0.101534 0.0420576 0.610484 0.473845 +-0.0434907 0.101526 0.0420227 0.57309 0.5 +-0.0424766 0.101515 0.0416909 0.539581 0.5 +-0.0414689 0.101488 0.0411988 0.558687 0.452208 +-0.0404908 0.101464 0.0408992 0.556573 0.5 +-0.0395435 0.101505 0.0409276 0.555343 0.458842 +-0.0384966 0.101445 0.0410637 0.707074 0.5 +-0.037499 0.101465 0.0412127 0.709836 0.5 +-0.0365021 0.101484 0.0413625 0.579148 0.5 +-0.0354939 0.101471 0.0414493 0.616289 0.5 +-0.0345053 0.101515 0.0417518 0.604176 0.5 +-0.0335134 0.101547 0.0420338 0.571313 0.5 +-0.032501 0.101545 0.0423652 0.576325 0.5 +-0.0315011 0.101567 0.0426346 0.61101 0.5 +-0.0304972 0.101559 0.0427282 0.619362 0.5 +-0.0294883 0.101537 0.0426799 0.620868 0.5 +-0.0284917 0.101554 0.0428228 0.82343 0.5 +-0.0274913 0.101587 0.0432231 0.792722 0.5 +-0.0264818 0.101588 0.0434387 0.769246 0.5 +-0.0254901 0.101602 0.0435889 0.615888 0.475504 +-0.0244911 0.101622 0.043846 0.515494 0.5 +-0.0234977 0.101642 0.0439992 0.627825 0.484853 +-0.0224957 0.101642 0.0440993 0.638035 0.480812 +-0.0214966 0.101664 0.0441706 0.682276 0.5 +-0.0204813 0.10165 0.0438784 0.674537 0.349032 +-0.0194973 0.101611 0.0435898 0.678709 0.5 +-0.0184976 0.101625 0.0435583 0.651592 0.5 +-0.0174971 0.101623 0.0437353 0.67142 0.5 +-0.0164921 0.101629 0.0439544 0.665019 0.5 +-0.0154952 0.101637 0.0439764 0.604107 0.5 +-0.0144882 0.101623 0.0437286 0.51213 0.270056 +-0.0639777 0.155958 0.0237716 0.608214 0.5 +-0.0375331 0.127856 0.0134298 0.671981 0.5 +-0.0114996 0.101652 0.0440245 0.300048 0.5 +-0.0104849 0.101611 0.0440429 0.314006 0.5 +-0.00949559 0.10164 0.0439977 0.271895 0.5 +-0.00850157 0.101663 0.0440465 0.234735 0.5 +-0.00749507 0.10164 0.0441128 0.193489 0.5 +-0.0243325 0.126263 0.00798048 0.673958 0.5 +-0.0337476 0.119587 0.029726 0.569471 0.470789 +-0.0879259 0.102339 0.0203636 0.601168 0.5 +-0.0314789 0.174225 -0.0034609 0.38027 0.5 +-0.00248889 0.101618 0.0440339 0.221141 0.5 +-0.00149572 0.101631 0.0441885 0.211115 0.5 +-0.00049849 0.101653 0.0443576 0.21437 0.5 +0.000516492 0.101662 0.0444028 0.320844 0.337511 +0.00150087 0.101618 0.0443156 0.381005 0.5 +0.00250961 0.101617 0.0444387 0.4424 0.5 +0.00352724 0.10161 0.0446753 0.444101 0.5 +0.00459507 0.101613 0.0450146 0.378048 0.459648 +0.00557978 0.101599 0.0456072 0.432745 0.5 +0.00656148 0.101677 0.0461619 0.45829 0.5 +0.00755739 0.101711 0.046537 0.448705 0.5 +0.00854504 0.101743 0.0468013 0.450341 0.473744 +0.00953649 0.101759 0.0470503 0.450232 0.5 +0.0105239 0.101777 0.0472989 0.55442 0.5 +0.0115087 0.101793 0.0474223 0.595029 0.5 +0.0124903 0.101789 0.047403 0.550178 0.479106 +0.0134882 0.101805 0.0472084 0.553955 0.5 +0.0144842 0.101799 0.0469727 0.478025 0.5 +0.0154718 0.101771 0.0468044 0.482781 0.488483 +0.0164832 0.101772 0.0464774 0.490796 0.48903 +0.0174757 0.101745 0.0462033 0.496034 0.5 +0.0184783 0.101734 0.0458501 0.485541 0.480994 +-0.070489 0.118975 0.0531649 0.60889 0.5 +-0.0384962 0.11803 0.0312871 0.646265 0.5 +0.000494108 0.118289 0.0391022 0.681517 0.5 +-0.0558701 0.154311 0.0223113 0.52791 0.315709 +-0.0615062 0.158429 -0.0265894 0.372213 0.377763 +0.0174985 0.119533 0.0343583 0.589459 0.5 +-0.0395098 0.12077 0.029092 0.468591 0.5 +-0.040502 0.120714 0.028794 0.460088 0.440359 +0.0045004 0.121001 0.0358516 0.638465 0.5 +0.0438124 0.093116 0.0231537 0.58935 0.5 +-0.00832508 0.130422 0.0138058 0.666054 0.5 +-0.0906044 0.135075 0.015212 0.495279 0.5 +0.0376787 0.105425 -0.00281358 0.581986 0.453133 +-0.0475108 0.159316 0.00812402 0.514658 0.472539 +-0.0230844 0.126658 0.00843513 0.658661 0.5 +-0.0735166 0.141431 0.0469479 0.642504 0.379641 +-0.0581679 0.154986 0.022946 0.621137 0.5 +0.0399446 0.107028 0.0121641 0.710517 0.5 +-0.074502 0.11613 0.052068 0.594859 0.5 +-0.0694805 0.121794 0.053195 0.469008 0.474592 +-0.0454954 0.160804 0.00677344 0.498806 0.5 +-0.0404194 0.128239 0.00205017 0.866751 0.5 +-0.0246067 0.157782 -0.00250374 0.312358 0.5 +0.0415141 0.104253 0.009162 0.696015 0.5 +0.00484292 0.129473 0.025811 0.362469 0.5 +0.0274448 0.120188 0.0255104 0.533627 0.5 +-0.0233682 0.126286 0.00541909 0.690338 0.5 +0.028716 0.119662 0.0245591 0.556516 0.5 +0.0284808 0.120403 0.0230436 0.550896 0.5 +0.0292004 0.119729 0.0233163 0.701762 0.5 +0.0122214 0.13032 0.0170232 0.833198 0.296578 +0.0112951 0.130595 0.0166808 0.785788 0.309005 +0.00749212 0.131495 0.0152913 0.769801 0.5 +0.00337546 0.131746 0.0137901 0.769601 0.282752 +0.00228726 0.131702 0.0133903 0.736124 0.5 +0.00113903 0.131571 0.0129682 0.729194 0.5 +-1.32571e-05 0.13145 0.0125463 0.74187 0.5 +-0.00110521 0.131378 0.0121444 0.747484 0.5 +-0.0745585 0.102629 0.0369846 0.509303 0.5 +-0.0735157 0.102656 0.0375574 0.469697 0.5 +-0.0725057 0.102685 0.0380563 0.461604 0.397421 +-0.0715304 0.102729 0.03849 0.531505 0.5 +-0.0705068 0.102745 0.0389474 0.546023 0.470784 +-0.069508 0.102769 0.0393316 0.557262 0.5 +-0.0684959 0.10279 0.039811 0.557325 0.5 +-0.0674901 0.102816 0.040307 0.589725 0.5 +-0.0664983 0.102849 0.0407048 0.590422 0.471455 +-0.0654906 0.102864 0.0410679 0.491441 0.5 +-0.0644897 0.102874 0.0413067 0.597356 0.5 +-0.0634945 0.102894 0.0414572 0.602082 0.47968 +-0.0624968 0.102902 0.0415908 0.60549 0.481742 +-0.0614963 0.102908 0.0417081 0.774064 0.5 +-0.0604933 0.102915 0.04183 0.609775 0.5 +-0.0594982 0.10293 0.0419773 0.610456 0.5 +-0.0584972 0.102936 0.0420973 0.612132 0.5 +-0.0574928 0.102919 0.0421703 0.609632 0.5 +-0.0564947 0.102955 0.042036 0.620544 0.5 +-0.0554949 0.102938 0.0419937 0.62784 0.5 +-0.0545067 0.102902 0.0418134 0.619085 0.402446 +-0.0534903 0.102908 0.0413848 0.615536 0.5 +-0.0524988 0.102874 0.0411998 0.623405 0.5 +-0.0514978 0.10289 0.0412322 0.607385 0.473728 +-0.050498 0.10288 0.0412159 0.555818 0.5 +-0.0494983 0.102885 0.0411106 0.563246 0.5 +-0.0485018 0.102883 0.0409949 0.749465 0.5 +-0.0474986 0.102884 0.0412273 0.801185 0.5 +-0.0464961 0.102903 0.0415914 0.602435 0.5 +-0.0454999 0.102932 0.0417867 0.587226 0.5 +-0.0444956 0.102933 0.0417949 0.729396 0.5 +-0.0434867 0.102921 0.0416521 0.692242 0.5 +-0.0424989 0.102887 0.0413486 0.528468 0.466168 +-0.0414756 0.102877 0.0407886 0.531853 0.5 +-0.0404787 0.102851 0.0403978 0.560987 0.439851 +-0.0394926 0.102848 0.0402648 0.548312 0.5 +-0.0384978 0.102835 0.0403416 0.536397 0.5 +-0.0375028 0.102851 0.0403695 0.527356 0.5 +-0.036497 0.102841 0.0405772 0.551811 0.5 +-0.0355052 0.102861 0.0407303 0.603286 0.462055 +-0.0345002 0.10287 0.040969 0.736479 0.5 +-0.0334924 0.102881 0.0413291 0.588112 0.462994 +-0.0325014 0.102916 0.0416129 0.581706 0.476452 +-0.0314971 0.102929 0.041974 0.749408 0.5 +-0.0304987 0.10293 0.0419798 0.643286 0.5 +-0.0294922 0.102919 0.0420695 0.615089 0.5 +-0.0284862 0.102933 0.0423265 0.602119 0.476745 +-0.0274957 0.102963 0.0425886 0.58994 0.471484 +-0.0264895 0.102963 0.0427118 0.581736 0.5 +-0.0255027 0.103002 0.0430099 0.615795 0.474461 +-0.0244921 0.103004 0.0433541 0.601541 0.485749 +-0.0234913 0.103006 0.0434545 0.797197 0.5 +-0.0224982 0.103036 0.0436276 0.790435 0.5 +-0.021496 0.103017 0.0435858 0.607485 0.5 +-0.0204954 0.103009 0.0433484 0.792846 0.5 +-0.0194977 0.103001 0.0433214 0.8178 0.5 +-0.0184974 0.103009 0.0434402 0.80293 0.5 +-0.0174974 0.103031 0.0436129 0.780555 0.5 +-0.0164922 0.103019 0.043564 0.749061 0.5 +-0.0155006 0.103015 0.0432792 0.65643 0.5 +-0.0144997 0.103011 0.0432504 0.655721 0.5 +-0.0777065 0.155692 0.0145746 0.697463 0.5 +-0.0124954 0.103038 0.0437348 0.557847 0.5 +-0.0114889 0.103024 0.0436761 0.510194 0.5 +-0.0105008 0.103039 0.0436514 0.473685 0.5 +-0.00949715 0.103034 0.0436292 0.453812 0.5 +-0.00849121 0.103027 0.0437022 0.397828 0.5 +-0.00849418 0.114178 0.0409373 0.617283 0.457259 +-0.00649959 0.103045 0.0436802 0.384565 0.5 +-0.005498 0.103045 0.0437796 0.384284 0.5 +-0.0908456 0.137855 0.0191944 0.6109 0.5 +-0.0034944 0.103046 0.0439357 0.38557 0.5 +-0.0024963 0.10305 0.0439671 0.380299 0.5 +-0.00150011 0.103045 0.0440564 0.356218 0.5 +-0.000403311 0.102922 0.0441774 0.311014 0.417227 +0.000496502 0.103028 0.0440499 0.332307 0.5 +0.00149085 0.103013 0.043912 0.414215 0.424108 +0.00251006 0.102973 0.0437486 0.487369 0.435784 +0.00350742 0.103001 0.0436938 0.50746 0.5 +0.0045298 0.102977 0.0440255 0.487225 0.5 +0.00555478 0.102979 0.0445124 0.470226 0.5 +0.00659654 0.102942 0.0449664 0.447625 0.444642 +0.00755707 0.10303 0.0452955 0.426494 0.481068 +0.00853656 0.103079 0.0455737 0.427473 0.5 +0.00953694 0.103082 0.0459273 0.435482 0.5 +0.0105328 0.103079 0.0462759 0.526726 0.5 +0.011514 0.10312 0.0464311 0.528984 0.5 +0.0125017 0.103142 0.0463418 0.548532 0.5 +0.0134949 0.103141 0.0462202 0.547631 0.5 +0.0144787 0.103102 0.0461637 0.552239 0.5 +0.015477 0.103104 0.045929 0.562912 0.5 +0.0164745 0.103092 0.0456772 0.562961 0.5 +0.0174805 0.103096 0.0453391 0.576978 0.5 +-0.0694829 0.118967 0.0529378 0.570656 0.5 +-0.039498 0.118035 0.0314 0.607305 0.36798 +0.00149573 0.118307 0.0388892 0.67891 0.5 +-0.0196334 0.0906851 0.0545345 0.550264 0.5 +0.0456174 0.0890068 0.0121612 0.570199 0.5 +0.0164933 0.119532 0.0345952 0.590044 0.5 +-0.0385 0.120755 0.0293207 0.480026 0.5 +0.00248882 0.121002 0.0363406 0.622212 0.431902 +0.00349445 0.12099 0.0360851 0.619091 0.423396 +0.0440466 0.0931306 0.0221521 0.593029 0.481307 +0.0350891 0.111006 -0.00183676 0.628316 0.5 +-0.0646486 0.156189 0.0162701 0.807746 0.280581 +0.0390432 0.106963 0.0211652 0.67681 0.5 +-0.0455037 0.159315 0.00726546 0.620979 0.5 +-0.0684954 0.121776 0.0527683 0.557262 0.5 +0.0366967 0.103968 -0.00783268 0.49396 0.5 +0.0330999 0.114889 0.024788 0.616089 0.5 +-0.0425011 0.163766 0.00491011 0.446352 0.5 +-0.0524893 0.156469 0.0106374 0.590669 0.5 +-0.0246171 0.125897 0.00496292 0.705761 0.5 +-0.0465076 0.160794 0.0071118 0.490157 0.468966 +-0.0846404 0.107661 0.0233457 0.659755 0.5 +0.0426813 0.101508 0.00916223 0.571597 0.5 +-0.0770892 0.107143 -0.00760422 0.603099 0.5 +-0.0624902 0.155293 -0.0145941 0.402141 0.5 +-0.0626337 0.149615 -0.00617193 0.262491 0.5 +0.000752728 0.131478 0.01712 0.609114 0.5 +-0.0340325 0.126267 0.001455 0.91064 0.5 +0.0343769 0.112004 0.0266888 0.634825 0.5 +0.00352334 0.12519 0.0325857 0.492905 0.5 +-0.0371379 0.127502 0.0150528 0.691418 0.5 +-0.0687869 0.155336 0.00316719 0.794438 0.5 +-0.0541815 0.15229 0.0244282 0.46446 0.5 +-0.0700918 0.147968 0.0410511 0.543545 0.5 +-0.00159432 0.129182 0.0263815 0.462044 0.5 +-0.0263102 0.123352 0.021955 0.404832 0.428513 +-0.025212 0.123605 0.0223303 0.326982 0.411308 +-0.080116 0.153024 0.0299773 0.416824 0.386697 +-0.0262234 0.119963 0.0294562 0.379842 0.393429 +-0.0745356 0.104026 0.0368301 0.430274 0.367589 +-0.073517 0.104058 0.0373151 0.402417 0.5 +-0.072512 0.104082 0.0376881 0.470371 0.5 +-0.0715096 0.1041 0.0379435 0.607829 0.5 +-0.0704953 0.104114 0.0382884 0.661856 0.5 +-0.069489 0.104131 0.0386578 0.505407 0.385441 +-0.0684894 0.104161 0.0391613 0.522871 0.5 +-0.0675079 0.104205 0.0395869 0.558067 0.398761 +-0.0665048 0.104229 0.0399675 0.558102 0.5 +-0.0654948 0.104238 0.0403184 0.56148 0.5 +-0.064492 0.104249 0.0405622 0.477675 0.480485 +-0.0634932 0.104261 0.0408123 0.481523 0.5 +-0.0624989 0.104282 0.0409609 0.59169 0.5 +-0.0614955 0.104283 0.0410789 0.594554 0.5 +-0.0604949 0.104288 0.0411949 0.590041 0.5 +-0.0594968 0.104294 0.0413247 0.593557 0.466605 +-0.0584961 0.104303 0.041452 0.598964 0.464385 +-0.0574974 0.104327 0.0414929 0.602587 0.5 +-0.0564955 0.104323 0.0414899 0.621336 0.5 +-0.0554936 0.104327 0.041387 0.62893 0.5 +-0.0544985 0.104295 0.0412117 0.622812 0.5 +-0.053491 0.104292 0.0408761 0.644542 0.398207 +-0.0525009 0.104252 0.0406803 0.64513 0.463673 +-0.05149 0.104281 0.0405196 0.604881 0.5 +-0.0504976 0.104261 0.040368 0.749 0.5 +-0.0494985 0.104247 0.040228 0.759883 0.5 +-0.0485021 0.104259 0.0404773 0.786634 0.5 +-0.0474986 0.104275 0.0408376 0.763952 0.5 +-0.0464999 0.104301 0.0412272 0.557757 0.5 +-0.0455034 0.104326 0.041412 0.528528 0.478065 +-0.0444951 0.104328 0.0415155 0.666232 0.5 +-0.0434909 0.104315 0.0413728 0.519724 0.5 +-0.0424777 0.104302 0.0409096 0.653599 0.5 +-0.0414667 0.104283 0.0404247 0.679649 0.5 +-0.0404701 0.104257 0.0399236 0.7058 0.5 +-0.0394918 0.104211 0.0396007 0.553959 0.5 +-0.0384968 0.104212 0.0394832 0.528462 0.44939 +-0.0375024 0.104216 0.0394845 0.532024 0.5 +-0.0365049 0.10423 0.0397359 0.558239 0.5 +-0.035507 0.104243 0.0399833 0.576748 0.5 +-0.0345088 0.104256 0.0402356 0.577166 0.5 +-0.033511 0.104273 0.0404948 0.585255 0.5 +-0.032502 0.104286 0.0408563 0.591222 0.5 +-0.0314961 0.10429 0.0412052 0.596771 0.5 +-0.0304932 0.104292 0.0413193 0.636496 0.5 +-0.0294961 0.104302 0.0413374 0.628184 0.445901 +-0.0284959 0.10431 0.0415782 0.587266 0.463309 +-0.0275054 0.104339 0.0416271 0.574943 0.5 +-0.0264983 0.10435 0.041876 0.493345 0.452686 +-0.0255119 0.104394 0.0424048 0.491107 0.481338 +-0.024481 0.104364 0.0426891 0.503947 0.478954 +-0.0234882 0.104381 0.0428298 0.500033 0.5 +-0.0225002 0.104414 0.0430095 0.771364 0.5 +-0.0214963 0.104399 0.0429755 0.606935 0.5 +-0.0204972 0.104391 0.0429524 0.630794 0.483251 +-0.0194977 0.104404 0.0429832 0.844212 0.5 +-0.0184963 0.10441 0.0431068 0.832278 0.5 +-0.0174973 0.104415 0.0431217 0.80214 0.5 +-0.0165146 0.104417 0.0427511 0.807634 0.5 +-0.015495 0.104397 0.0428489 0.760875 0.5 +-0.0144964 0.104421 0.0432413 0.730154 0.5 +-0.0134852 0.104433 0.0435318 0.709107 0.5 +-0.0124899 0.104431 0.0434394 0.669003 0.5 +-0.0114934 0.104435 0.0434539 0.651714 0.5 +-0.0104909 0.104437 0.0435533 0.619705 0.5 +-0.00949024 0.104446 0.0436658 0.566163 0.5 +-0.00849151 0.104452 0.0437135 0.57746 0.5 +-0.0074894 0.104457 0.0437929 0.552616 0.5 +-0.00649181 0.104468 0.0439265 0.541393 0.5 +-0.00549064 0.104476 0.0440202 0.559873 0.5 +-0.00449341 0.104477 0.0440393 0.57108 0.5 +-0.00349833 0.104479 0.0440938 0.558073 0.5 +-0.00250245 0.104479 0.0441797 0.550857 0.5 +-0.00151332 0.104469 0.0441334 0.521932 0.5 +-0.000520242 0.104454 0.0440018 0.496994 0.5 +0.000480507 0.104429 0.0436509 0.543857 0.5 +0.00148921 0.104407 0.0433078 0.479335 0.5 +0.00248615 0.104372 0.0430232 0.522677 0.414856 +0.00350126 0.104382 0.0428343 0.57722 0.5 +0.0045048 0.104341 0.0428855 0.566269 0.447364 +0.00551162 0.104351 0.0429177 0.518826 0.5 +0.00652621 0.104352 0.0432895 0.476702 0.5 +0.00753436 0.104363 0.0436686 0.490464 0.5 +0.00854197 0.104373 0.044167 0.533695 0.5 +0.00953036 0.10442 0.0445691 0.552542 0.5 +0.0105211 0.104445 0.0448284 0.560125 0.5 +0.0115122 0.104463 0.0449641 0.535904 0.5 +0.0125066 0.10443 0.0450477 0.552667 0.5 +0.0134975 0.104436 0.0449316 0.544777 0.5 +0.0144923 0.104443 0.0448169 0.539981 0.5 +0.0154936 0.104462 0.0445958 0.564472 0.5 +0.0164747 0.104398 0.044527 0.566308 0.5 +0.0174704 0.1044 0.0442882 0.578353 0.5 +0.0184737 0.104403 0.0439338 0.486674 0.480281 +0.00248872 0.118285 0.0387448 0.65504 0.5 +-0.0371914 0.175481 -0.00856986 0.288938 0.5 +-0.0895362 0.119938 0.00329723 0.483257 0.5 +0.0155029 0.119565 0.0348769 0.596206 0.5 +-0.0374965 0.120729 0.0294163 0.501475 0.5 +0.00148883 0.121012 0.0365952 0.639272 0.431763 +0.0440384 0.0959414 0.0171588 0.527861 0.5 +0.0443256 0.0931523 0.0201621 0.5082 0.5 +-0.0494861 0.156424 0.00985611 0.591282 0.47271 +-0.0185094 0.114097 0.0385959 0.566924 0.5 +0.039324 0.106993 0.0191699 0.71129 0.5 +0.0381223 0.106958 0.0251953 0.634461 0.5 +-0.00617289 0.130741 0.0117189 0.704682 0.5 +0.032957 0.115724 0.0233075 0.608739 0.5 +-0.0843669 0.106153 0.00138874 0.443589 0.401588 +-0.074494 0.126019 0.0529923 0.51998 0.457699 +-0.0749499 0.112554 -0.00662315 0.484808 0.5 +-0.0414976 0.113906 0.0346806 0.681455 0.5 +-0.0484985 0.160789 0.00748776 0.562378 0.5 +0.0296208 0.115866 0.0291818 0.640567 0.5 +-0.0404915 0.113924 0.0347061 0.688197 0.5 +-0.0795038 0.127439 0.0531413 0.673868 0.5 +-0.0510947 0.138549 0.00140254 0.569746 0.5 +-0.0629502 0.151043 -0.0063137 0.351802 0.5 +0.00282967 0.131401 0.0178813 0.630081 0.340486 +-0.0349236 0.126603 0.0011375 0.905615 0.5 +-0.0276983 0.125752 0.00966815 0.725208 0.5 +-0.0264982 0.125984 0.010106 0.701292 0.5 +-0.0780329 0.155476 0.0217657 0.456959 0.421673 +-0.0771836 0.152278 0.0340017 0.363481 0.5 +-0.0708829 0.156323 0.0169624 0.676483 0.5 +0.0112412 0.122679 0.0339481 0.496224 0.460173 +-0.0407158 0.171931 -0.00126808 0.356809 0.220278 +-0.0420324 0.171559 -0.00171063 0.288413 0.5 +0.0177023 0.127344 0.0204737 0.47857 0.40404 +-0.0678163 0.0866062 -0.0177767 0.460133 0.5 +-0.0668006 0.086643 -0.0182518 0.470617 0.5 +-0.0735555 0.105459 0.0371635 0.402342 0.5 +-0.0725172 0.105485 0.0374705 0.427898 0.5 +-0.071509 0.105494 0.0375699 0.396422 0.5 +-0.0705079 0.105505 0.0376955 0.432507 0.5 +-0.0694905 0.10551 0.0380162 0.407374 0.5 +-0.0685061 0.105552 0.0384458 0.44021 0.5 +-0.067493 0.105571 0.0389191 0.44375 0.5 +-0.0665077 0.105605 0.0392145 0.509496 0.5 +-0.0654957 0.105611 0.0395613 0.424731 0.476304 +-0.0644931 0.105621 0.039804 0.435134 0.482466 +-0.0634873 0.105626 0.040045 0.537191 0.458893 +-0.062496 0.105649 0.040196 0.561398 0.457079 +-0.0614957 0.105649 0.0403113 0.578707 0.458362 +-0.0604981 0.105663 0.0403307 0.565396 0.5 +-0.0595 0.105675 0.0404663 0.557302 0.5 +-0.0584982 0.105689 0.0406051 0.564008 0.5 +-0.0574991 0.105703 0.0407441 0.594514 0.5 +-0.0564975 0.105681 0.0408231 0.60386 0.451871 +-0.0554974 0.10569 0.0407246 0.624805 0.5 +-0.054497 0.10568 0.0405938 0.636269 0.5 +-0.0534945 0.105667 0.0403502 0.652016 0.451976 +-0.0524893 0.105673 0.0402508 0.667795 0.452314 +-0.0515091 0.105631 0.0400498 0.643398 0.38365 +-0.0504991 0.105636 0.0396146 0.763272 0.5 +-0.0494981 0.105619 0.0396922 0.782258 0.5 +-0.0484999 0.105649 0.0400819 0.80996 0.5 +-0.0474972 0.105664 0.0404447 0.761173 0.5 +-0.046496 0.105677 0.0407002 0.696076 0.5 +-0.045498 0.105695 0.0408472 0.660388 0.5 +-0.0444942 0.105717 0.0408954 0.502934 0.5 +-0.043493 0.105703 0.0408668 0.517953 0.454687 +-0.0424838 0.105689 0.0405023 0.659459 0.5 +-0.0414785 0.105663 0.0400022 0.666724 0.5 +-0.0404538 0.105662 0.0393313 0.697517 0.5 +-0.0394792 0.105608 0.0388858 0.546458 0.469605 +-0.0384934 0.105604 0.0386511 0.538966 0.5 +-0.0375014 0.105589 0.0387333 0.533443 0.5 +-0.0365034 0.105591 0.0389607 0.540307 0.466861 +-0.0355104 0.105608 0.0391036 0.561462 0.5 +-0.0345174 0.105629 0.0392495 0.584835 0.5 +-0.0335079 0.105635 0.0395993 0.592086 0.469481 +-0.032514 0.105674 0.0400124 0.610141 0.45364 +-0.0315104 0.105689 0.0403731 0.59687 0.456953 +-0.0305029 0.105682 0.0404793 0.610071 0.5 +-0.0294965 0.105676 0.0405837 0.628451 0.5 +-0.0284952 0.105677 0.0407009 0.60269 0.5 +-0.0274838 0.105666 0.0409158 0.59605 0.5 +-0.0264832 0.105687 0.0411729 0.761493 0.5 +-0.0254743 0.105723 0.0415881 0.595527 0.465711 +-0.0244963 0.105758 0.0419767 0.575713 0.5 +-0.0235023 0.105779 0.0421282 0.502204 0.469838 +-0.0224969 0.105778 0.0423492 0.595042 0.480048 +-0.021494 0.10578 0.0424616 0.621315 0.476772 +-0.0204959 0.105781 0.0424626 0.638759 0.5 +-0.0194999 0.105809 0.042534 0.631651 0.5 +-0.0184969 0.10579 0.0426906 0.804394 0.5 +-0.0174898 0.105786 0.0424611 0.811897 0.35871 +-0.0164955 0.105778 0.0423459 0.830703 0.5 +-0.0155087 0.105817 0.0426846 0.821846 0.5 +-0.0144833 0.105825 0.0431811 0.822661 0.5 +-0.0134788 0.105828 0.0432751 0.804788 0.5 +-0.0124919 0.105832 0.0432095 0.813442 0.5 +-0.0114956 0.105842 0.0433599 0.808055 0.5 +-0.0104877 0.105844 0.0434252 0.781913 0.5 +-0.00949915 0.105857 0.0435217 0.723078 0.5 +-0.00849673 0.105867 0.0437425 0.731517 0.5 +-0.00748502 0.105882 0.0440003 0.7214 0.5 +-0.00649361 0.105887 0.04408 0.721456 0.5 +-0.00549096 0.105886 0.0440438 0.72889 0.5 +-0.00449526 0.10588 0.044033 0.732037 0.5 +-0.00350655 0.105885 0.0441283 0.726079 0.5 +-0.00251293 0.105882 0.0441369 0.683681 0.5 +-0.00152849 0.105863 0.0439958 0.528132 0.406229 +-0.000508444 0.105851 0.0435843 0.516401 0.5 +0.000467241 0.105823 0.0432483 0.559895 0.422695 +0.00148321 0.105804 0.0429258 0.551469 0.5 +0.00248489 0.105788 0.0426651 0.577344 0.406559 +0.00348965 0.105764 0.0424132 0.612479 0.5 +0.00449494 0.105757 0.0421851 0.773193 0.386522 +0.00550009 0.105744 0.0419393 0.60043 0.474897 +0.00650458 0.105723 0.0419107 0.593019 0.5 +0.00750546 0.105745 0.0420743 0.549813 0.5 +0.00851027 0.105753 0.0425683 0.522778 0.393325 +0.00952731 0.105746 0.0431674 0.535914 0.5 +0.0105403 0.105742 0.0436489 0.572265 0.369686 +0.0115151 0.105777 0.0436811 0.562081 0.5 +0.0125104 0.105746 0.0436503 0.569621 0.5 +0.0135006 0.105771 0.0435499 0.569343 0.5 +0.0144947 0.105783 0.0434399 0.572978 0.5 +0.0154943 0.105779 0.0433144 0.585192 0.5 +0.0164877 0.105762 0.0431793 0.571717 0.5 +0.0174871 0.10577 0.0429453 0.558682 0.5 +0.0184831 0.105752 0.0426872 0.467096 0.486007 +0.0194835 0.105739 0.0423148 0.574862 0.5 +-0.0264962 0.119343 0.030427 0.412132 0.5 +0.0144954 0.119572 0.0352389 0.499895 0.5 +-0.0364985 0.120712 0.0292752 0.522423 0.5 +0.023574 0.105697 0.0395934 0.650339 0.5 +0.0245243 0.105615 0.0392344 0.559368 0.5 +-0.088803 0.151599 0.0211964 0.276194 0.5 +-0.0405267 0.169768 0.0017705 0.35789 0.5 +-0.0348887 0.174114 -0.0129217 0.396903 0.5 +-0.0745611 0.163685 -0.0159572 0.258992 0.5 +0.0429772 0.0902337 -0.00478341 0.506353 0.478726 +-0.0012394 0.131315 0.00922853 0.746439 0.5 +-0.0895594 0.135155 0.0312102 0.596555 0.5 +-0.00448652 0.114189 0.0411781 0.647982 0.438293 +-0.0171038 0.128182 0.00771491 0.665746 0.5 +-0.0901456 0.140633 0.0231701 0.753049 0.5 +0.0438044 0.0987496 0.00916312 0.581579 0.479718 +-0.0596132 0.113903 0.0363038 0.87726 0.5 +-0.0504997 0.160817 0.00728082 0.428656 0.5 +-0.0944618 0.125537 0.019259 0.805492 0.5 +0.0262359 0.122255 0.0222063 0.639549 0.5 +-0.058487 0.113928 0.0361856 0.686436 0.5 +-0.0650869 0.155169 -0.00713868 0.594076 0.5 +0.00386952 0.131337 0.0182591 0.62382 0.345619 +0.00983853 0.130485 0.0204326 0.477254 0.454259 +-0.0358563 0.126885 0.000788129 0.903193 0.5 +-0.0370273 0.174099 -0.0109221 0.357039 0.5 +-0.0386753 0.127489 0.0159666 0.543847 0.5 +0.0209176 0.124997 0.0245115 0.457246 0.5 +0.0240424 0.122784 0.0256717 0.479931 0.46743 +0.0254683 0.121415 0.0262007 0.50125 0.468941 +0.0268493 0.119915 0.0267269 0.542744 0.410959 +0.027565 0.119234 0.026993 0.556764 0.5 +-0.0849159 0.123546 -0.00333555 0.509372 0.5 +-0.0652193 0.1682 -0.0598394 0.627398 0.5 +-0.0438717 0.105649 -0.0205239 0.705809 0.5 +-0.0728992 0.107873 -0.010241 0.488684 0.364526 +-0.072524 0.106883 0.0374001 0.338622 0.5 +-0.0715157 0.106884 0.0372861 0.367092 0.5 +-0.0706578 0.10688 0.0373417 0.360411 0.418323 +-0.0695053 0.106913 0.0375568 0.375169 0.421019 +-0.0684996 0.106934 0.0379267 0.342142 0.456068 +-0.0674921 0.106947 0.0382762 0.336874 0.5 +-0.0665046 0.10698 0.0385746 0.518487 0.5 +-0.0655034 0.106997 0.0388261 0.60136 0.5 +-0.0644934 0.106993 0.039043 0.490127 0.5 +-0.0634902 0.106988 0.0392647 0.497007 0.5 +-0.0624896 0.106999 0.0393995 0.53558 0.5 +-0.061496 0.107016 0.0394252 0.532893 0.5 +-0.060493 0.107007 0.0395303 0.536222 0.5 +-0.0594923 0.107014 0.0396564 0.535152 0.449668 +-0.0584999 0.107052 0.0397144 0.545318 0.5 +-0.0574989 0.107052 0.0398301 0.572166 0.5 +-0.0564997 0.107064 0.0398466 0.583923 0.5 +-0.0554984 0.107053 0.0399469 0.591988 0.5 +-0.0544948 0.107078 0.0398767 0.624523 0.431538 +-0.0534959 0.107052 0.0398334 0.63822 0.5 +-0.0524918 0.107066 0.0397432 0.621096 0.5 +-0.051492 0.107057 0.0393982 0.600678 0.5 +-0.0505016 0.107064 0.0390734 0.772396 0.5 +-0.0495065 0.107045 0.0392662 0.795573 0.5 +-0.0484951 0.107035 0.0396855 0.794391 0.5 +-0.0474989 0.107059 0.0399589 0.754819 0.5 +-0.0464971 0.107057 0.0400682 0.560027 0.5 +-0.0454995 0.107082 0.0401134 0.543169 0.458334 +-0.0444939 0.107088 0.0401229 0.510566 0.462848 +-0.0434936 0.107078 0.040105 0.508585 0.5 +-0.0424861 0.107068 0.0398635 0.522139 0.5 +-0.0414578 0.107073 0.0393054 0.680493 0.5 +-0.0404413 0.10705 0.0387043 0.725061 0.406442 +-0.0394722 0.107013 0.0383007 0.737608 0.5 +-0.0384808 0.106985 0.038039 0.555375 0.4296 +-0.0375014 0.106979 0.038117 0.552581 0.439407 +-0.036507 0.106984 0.0382357 0.540312 0.5 +-0.0355172 0.106999 0.038376 0.708963 0.5 +-0.0345047 0.106995 0.0387065 0.757612 0.5 +-0.0335137 0.107031 0.0389932 0.585605 0.5 +-0.0325038 0.107028 0.0393329 0.592399 0.5 +-0.0314981 0.107032 0.0395669 0.614598 0.5 +-0.0305128 0.10708 0.0396423 0.634144 0.5 +-0.0294962 0.107041 0.0398129 0.618906 0.439505 +-0.028506 0.107069 0.0398546 0.621688 0.5 +-0.0275094 0.107088 0.0401149 0.593768 0.5 +-0.0265277 0.10717 0.0404632 0.603352 0.464585 +-0.0254977 0.107106 0.0408331 0.745905 0.5 +-0.0244817 0.107102 0.0411704 0.73268 0.5 +-0.0234912 0.107132 0.0414501 0.584043 0.5 +-0.0225064 0.10717 0.041634 0.593274 0.5 +-0.0214945 0.10716 0.0418366 0.613271 0.5 +-0.0204903 0.107154 0.041938 0.634429 0.5 +-0.0194954 0.107168 0.0420699 0.617529 0.47768 +-0.0184884 0.107161 0.042158 0.78946 0.5 +-0.0174825 0.107148 0.0420092 0.633836 0.5 +-0.0164994 0.107189 0.0421238 0.842719 0.5 +-0.0155015 0.10721 0.0425067 0.819686 0.5 +-0.0144859 0.107222 0.0429439 0.797421 0.5 +-0.0134922 0.107228 0.0429665 0.822902 0.5 +-0.012488 0.107228 0.0430572 0.843149 0.5 +-0.0114886 0.10724 0.0431864 0.831858 0.5 +-0.0104875 0.10724 0.0431922 0.823251 0.5 +-0.00949027 0.107257 0.0434611 0.840729 0.5 +-0.00847955 0.107265 0.0437628 0.83219 0.5 +-0.00748812 0.10728 0.0439222 0.832888 0.5 +-0.00648988 0.10728 0.0440126 0.828318 0.5 +-0.00549531 0.10728 0.0439307 0.649953 0.5 +-0.00449959 0.107273 0.0439086 0.646493 0.483347 +-0.00350244 0.107276 0.0438161 0.804864 0.5 +-0.00251199 0.107268 0.0437857 0.605489 0.5 +-0.00151223 0.107257 0.0435513 0.599713 0.47984 +-0.000512 0.107246 0.0433248 0.610498 0.5 +0.000481761 0.10723 0.0430499 0.791752 0.5 +0.00148166 0.107215 0.0427825 0.794071 0.5 +0.00249985 0.107203 0.0424791 0.811268 0.5 +0.0034868 0.107186 0.0422902 0.79888 0.5 +0.0045077 0.107168 0.0418669 0.80216 0.394235 +0.00550135 0.107149 0.041587 0.813423 0.5 +0.00649798 0.107134 0.0414437 0.820786 0.5 +0.00749621 0.107111 0.0412811 0.629727 0.466736 +0.00850109 0.107119 0.0411949 0.594407 0.452294 +0.00950548 0.107102 0.041296 0.570251 0.5 +0.0105065 0.107115 0.0414414 0.55473 0.5 +0.0115191 0.107071 0.0419973 0.574506 0.5 +0.0125119 0.107097 0.0421465 0.598409 0.5 +0.0135054 0.10711 0.0421551 0.596527 0.5 +0.0144985 0.107111 0.0421568 0.593125 0.5 +0.0154947 0.107116 0.0420405 0.585223 0.5 +0.0164927 0.107123 0.0418084 0.577007 0.5 +0.0174897 0.107108 0.0415537 0.563464 0.5 +0.0184707 0.107054 0.0413783 0.561561 0.479574 +0.0194806 0.107063 0.040905 0.464722 0.483276 +0.0204972 0.107072 0.0404393 0.583632 0.5 +0.0215063 0.107058 0.0398344 0.506378 0.480205 +0.0224909 0.107012 0.0395338 0.534405 0.473847 +0.0235192 0.107033 0.0392433 0.570878 0.39124 +0.0244991 0.106997 0.0390493 0.543332 0.5 +-0.0355201 0.16973 -0.000114667 0.478764 0.5 +-0.0734967 0.126028 0.0530224 0.487366 0.47517 +0.0414447 0.0957847 0.0271584 0.666979 0.5 +0.0432806 0.100121 0.0101615 0.575359 0.5 +0.0359235 0.106756 -0.00582268 0.469855 0.5 +-0.0574825 0.113918 0.0359516 0.69019 0.5 +-0.0564807 0.113914 0.0357075 0.67466 0.5 +0.01801 0.126774 0.0220214 0.483449 0.5 +0.0410386 0.099944 -0.00278716 0.568019 0.5 +-0.031677 0.126244 0.00820251 0.890791 0.5 +-0.0554982 0.113948 0.0354054 0.952589 0.5 +-0.0515065 0.160835 0.00704803 0.335723 0.5 +-0.0724038 0.116078 0.0519992 0.591864 0.5 +-0.078478 0.142827 0.0455967 0.480272 0.5 +-0.0545055 0.113958 0.0351234 0.6549 0.5 +-0.0656106 0.156261 -0.00734027 0.576391 0.5 +0.0107636 0.130209 0.0207729 0.465901 0.462501 +0.0134356 0.129163 0.0217505 0.48876 0.445675 +0.0159352 0.127804 0.0226817 0.393607 0.433953 +0.0183414 0.126234 0.023568 0.48266 0.5 +0.0191744 0.125775 0.0238749 0.670283 0.5 +-0.0665162 0.155345 0.00690315 0.82869 0.5 +-0.0197213 0.123533 0.0272668 0.446568 0.332735 +-0.0635768 0.155628 0.0253794 0.564164 0.5 +-0.0567915 0.158113 0.00751453 0.231729 0.5 +-0.0580787 0.133988 -0.00600022 0.673026 0.5 +-0.0468361 0.0970763 -0.0219471 0.825942 0.5 +-0.016261 0.181575 -0.0262548 0.40888 0.5 +-0.0410386 0.153314 -0.00775366 0.729423 0.5 +0.0151427 0.107227 -0.0182666 0.564672 0.468958 +-0.0715005 0.108276 0.0374406 0.342515 0.5 +-0.0705038 0.108294 0.0372772 0.311966 0.5 +-0.0695161 0.108303 0.0373324 0.287253 0.5 +-0.0685163 0.108328 0.0375372 0.296072 0.5 +-0.0675133 0.108346 0.0377589 0.291494 0.5 +-0.0664975 0.108359 0.0380432 0.421067 0.5 +-0.0655034 0.108381 0.0382088 0.498228 0.5 +-0.0644937 0.108375 0.0384047 0.530101 0.5 +-0.0634989 0.108392 0.0384413 0.561341 0.5 +-0.0624964 0.108382 0.0385383 0.618004 0.5 +-0.0614977 0.108395 0.0385563 0.48988 0.5 +-0.0604943 0.108372 0.0386396 0.501655 0.5 +-0.0594963 0.1084 0.0386802 0.49104 0.5 +-0.0584982 0.108398 0.0387966 0.517855 0.5 +-0.0574962 0.108397 0.0389105 0.527228 0.437304 +-0.0564983 0.108415 0.0389345 0.552716 0.5 +-0.0554997 0.108443 0.0389722 0.568599 0.5 +-0.0544968 0.108447 0.0390956 0.593755 0.5 +-0.0534959 0.108443 0.038977 0.584844 0.5 +-0.052497 0.108432 0.038849 0.571075 0.5 +-0.0514982 0.108428 0.0386132 0.594374 0.5 +-0.0504996 0.108397 0.0385655 0.59884 0.5 +-0.0495001 0.108413 0.0388185 0.784063 0.5 +-0.0485053 0.108444 0.0391022 0.599026 0.5 +-0.047499 0.10845 0.0392246 0.595228 0.458611 +-0.0464966 0.108432 0.0393098 0.572521 0.5 +-0.0454977 0.108441 0.0393231 0.54336 0.5 +-0.0444934 0.108473 0.0392485 0.534157 0.5 +-0.0434804 0.108484 0.0391565 0.509867 0.431104 +-0.0424683 0.108486 0.0389261 0.541456 0.5 +-0.0414563 0.108465 0.0385585 0.718439 0.5 +-0.0404738 0.108409 0.038128 0.574833 0.5 +-0.0394659 0.108422 0.0377073 0.599619 0.5 +-0.0384876 0.108386 0.0375357 0.607054 0.5 +-0.0374989 0.108379 0.0375203 0.592375 0.5 +-0.0365092 0.108385 0.0376381 0.590415 0.5 +-0.0355048 0.108366 0.0378272 0.584249 0.473784 +-0.0345349 0.108408 0.0380462 0.603112 0.466841 +-0.0335154 0.108413 0.0382413 0.733953 0.5 +-0.032507 0.108409 0.0384637 0.571282 0.472843 +-0.0315115 0.108439 0.0386203 0.593045 0.5 +-0.0305016 0.108423 0.0388291 0.614058 0.5 +-0.0295118 0.108456 0.0388793 0.633145 0.5 +-0.028498 0.108421 0.0390601 0.629353 0.5 +-0.0274904 0.108416 0.0392888 0.585338 0.5 +-0.0265027 0.10847 0.0397156 0.563014 0.382552 +-0.0255159 0.108511 0.0401259 0.563009 0.5 +-0.0245088 0.108515 0.0403619 0.590105 0.5 +-0.0235066 0.108523 0.0406075 0.584632 0.5 +-0.0225051 0.10854 0.0408657 0.593144 0.461873 +-0.0215031 0.108553 0.041118 0.598134 0.460305 +-0.0204902 0.108532 0.041306 0.622776 0.46046 +-0.0195055 0.108574 0.0413935 0.622885 0.5 +-0.018498 0.108568 0.0416031 0.614266 0.5 +-0.0174912 0.108558 0.0415716 0.81941 0.5 +-0.0165087 0.10859 0.0417725 0.812629 0.5 +-0.0154871 0.10859 0.0421893 0.613823 0.5 +-0.0144984 0.108621 0.0424908 0.601148 0.483301 +-0.0134808 0.108609 0.0426611 0.523908 0.5 +-0.0124833 0.108618 0.0427908 0.82099 0.5 +-0.0114905 0.108632 0.0428314 0.813235 0.5 +-0.0104845 0.10863 0.0429333 0.828823 0.5 +-0.00947876 0.108641 0.0432746 0.823817 0.5 +-0.00848834 0.10866 0.0434392 0.803496 0.5 +-0.0074892 0.108662 0.0435531 0.799271 0.5 +-0.0064934 0.10867 0.043581 0.628889 0.5 +-0.00549695 0.108658 0.0435455 0.63191 0.5 +-0.00449913 0.108643 0.0435023 0.635348 0.5 +-0.00350345 0.108655 0.04343 0.635137 0.5 +-0.0025035 0.108652 0.0433127 0.618767 0.482041 +-0.00151033 0.108645 0.043169 0.619868 0.5 +-0.000516741 0.108636 0.04302 0.80118 0.5 +0.000488727 0.108629 0.0427903 0.824805 0.5 +0.00148661 0.108625 0.0426664 0.829397 0.5 +0.00249754 0.108619 0.0424686 0.81341 0.5 +0.00348525 0.108604 0.0422849 0.812042 0.5 +0.00449209 0.108585 0.0419458 0.610701 0.402704 +0.00548706 0.108567 0.0416722 0.612031 0.485804 +0.00649868 0.108551 0.0413323 0.614657 0.404194 +0.00749695 0.108523 0.0409368 0.619409 0.475819 +0.00849221 0.108496 0.0406568 0.615323 0.5 +0.00950305 0.108494 0.0403312 0.619272 0.5 +0.0104998 0.108437 0.040345 0.614849 0.5 +0.011503 0.108488 0.0403225 0.629945 0.5 +0.0125106 0.108449 0.040622 0.629596 0.5 +0.0135046 0.108467 0.0407674 0.641107 0.5 +0.0145003 0.108488 0.0407955 0.633331 0.5 +0.0154998 0.108504 0.0406925 0.6386 0.5 +0.0164872 0.108442 0.0405002 0.626473 0.5 +0.0174969 0.108466 0.0401752 0.590778 0.5 +0.0185107 0.108486 0.0398481 0.59196 0.5 +0.019505 0.108463 0.0397034 0.608035 0.5 +0.0205013 0.108449 0.0395681 0.631535 0.5 +0.0215013 0.108432 0.0393095 0.520368 0.5 +0.0225 0.108418 0.039052 0.522874 0.371047 +0.0235041 0.108407 0.0388101 0.515902 0.483723 +0.0245051 0.108393 0.0385583 0.509616 0.5 +0.0405703 0.105644 0.0131657 0.698819 0.5 +0.0445999 0.0931357 0.00219092 0.561055 0.5 +-0.029469 0.17882 -0.00554327 0.253622 0.5 +0.0456444 0.086201 0.0151659 0.556777 0.442978 +-0.053491 0.113891 0.0350292 0.624354 0.5 +-0.0524908 0.113899 0.0349209 0.625943 0.5 +-0.0514924 0.113914 0.0348157 0.482944 0.5 +-0.00211002 0.131247 0.0146415 0.687293 0.5 +0.0289767 0.117846 0.0275093 0.604897 0.5 +-0.0908979 0.126784 0.00627265 0.435656 0.5 +-0.0902562 0.135043 0.0112131 0.63282 0.5 +0.0419523 0.101425 0.00119033 0.452113 0.485527 +0.0397783 0.106996 0.0151622 0.710439 0.5 +-0.0504737 0.113932 0.0347324 0.527462 0.402256 +-0.0739383 0.160975 -0.0103701 0.290166 0.5 +-0.0726687 0.161352 -0.00991102 0.355109 0.345704 +-0.000499767 0.100727 0.0463954 0.334019 0.339834 +-0.0721189 0.15515 0.0282101 0.816586 0.5 +-0.00263717 0.12924 0.026005 0.458517 0.5 +-0.0668913 0.155545 0.00822429 0.82581 0.5 +-0.00387787 0.10737 -0.022403 0.78837 0.5 +-0.066989 0.136993 -0.00809827 0.633194 0.5 +-0.0341359 0.168185 -0.0152479 0.527374 0.428366 +-0.0639936 0.132595 -0.00811291 0.636003 0.490329 +-0.0669331 0.125307 -0.0088761 0.813046 0.5 +0.0121361 0.105839 -0.0196306 0.54602 0.5 +-0.00789542 0.108803 -0.0224197 0.636507 0.5 +-0.0494961 0.113894 0.0347794 0.559885 0.5 +-0.0340904 0.160759 -0.0135462 0.852313 0.5 +-0.065894 0.118002 -0.00906639 0.624547 0.5 +-0.0704588 0.109521 0.0380634 0.353622 0.364353 +-0.0694892 0.109539 0.0380952 0.32749 0.385432 +-0.0685053 0.109678 0.0379594 0.255969 0.5 +-0.0675029 0.109729 0.0377486 0.34696 0.5 +-0.0664965 0.109745 0.0377695 0.378522 0.5 +-0.0714911 0.116102 0.0521112 0.592915 0.5 +-0.0646169 0.109762 0.0377795 0.541559 0.4263 +-0.0455052 0.162274 0.00622301 0.463123 0.467175 +-0.0624965 0.109755 0.0377659 0.554564 0.5 +-0.0614975 0.10975 0.0377559 0.588374 0.5 +-0.0604978 0.109778 0.0376942 0.570359 0.5 +-0.0594984 0.109765 0.0377884 0.452432 0.5 +-0.0584973 0.109766 0.0377913 0.475161 0.5 +-0.0575003 0.109781 0.0378101 0.474949 0.5 +-0.0564977 0.109762 0.0379025 0.488491 0.5 +-0.0554977 0.109766 0.0379077 0.513233 0.408461 +-0.0544964 0.10974 0.0378742 0.55103 0.5 +-0.0534989 0.109802 0.0378386 0.566555 0.5 +-0.0524991 0.109798 0.0378325 0.579754 0.5 +-0.0514986 0.109783 0.0378241 0.589558 0.428138 +-0.0505005 0.109789 0.0379415 0.579319 0.447905 +-0.0495024 0.109811 0.0380885 0.569336 0.5 +-0.048501 0.109818 0.0382143 0.697337 0.5 +-0.0475 0.109814 0.0383224 0.568635 0.5 +-0.0464997 0.109825 0.0383354 0.561449 0.5 +-0.0454967 0.109818 0.0383281 0.548391 0.431886 +-0.0444932 0.109842 0.0382343 0.541056 0.5 +-0.043485 0.109867 0.0381531 0.553647 0.5 +-0.0424884 0.109818 0.0380938 0.566079 0.5 +-0.0414757 0.109827 0.0377618 0.570542 0.5 +-0.0404708 0.109814 0.0374017 0.605828 0.5 +-0.03948 0.109789 0.0371385 0.622289 0.5 +-0.0384844 0.109782 0.036904 0.646133 0.5 +-0.0374937 0.109757 0.0368609 0.619686 0.408417 +-0.0365032 0.109752 0.0369592 0.615727 0.425375 +-0.0355033 0.109745 0.0370663 0.587718 0.5 +-0.0345099 0.109779 0.0372255 0.565129 0.5 +-0.0335046 0.109774 0.0374515 0.695035 0.5 +-0.0325036 0.10978 0.0375732 0.557744 0.5 +-0.0315055 0.109789 0.0377033 0.58109 0.5 +-0.0305081 0.109824 0.0377476 0.601771 0.424155 +-0.0295069 0.109802 0.0378356 0.630789 0.5 +-0.0285044 0.109801 0.0380702 0.625347 0.5 +-0.0275197 0.109846 0.0382427 0.580343 0.5 +-0.026518 0.10985 0.0386071 0.520235 0.5 +-0.0255231 0.109882 0.0391184 0.510521 0.40191 +-0.024509 0.109889 0.0396002 0.532745 0.5 +-0.0235014 0.109891 0.0398372 0.566552 0.5 +-0.0225096 0.10992 0.040117 0.560936 0.5 +-0.0215043 0.109928 0.0403615 0.574468 0.5 +-0.0204956 0.109916 0.0405701 0.59484 0.5 +-0.019502 0.109944 0.0407387 0.629097 0.5 +-0.0184962 0.109943 0.0409607 0.624273 0.454871 +-0.0175125 0.109971 0.0410978 0.522665 0.446201 +-0.0164951 0.109966 0.0413377 0.615634 0.5 +-0.0154805 0.109966 0.0416657 0.59627 0.5 +-0.0144886 0.109993 0.0419529 0.500105 0.470624 +-0.0134826 0.109991 0.0421694 0.50223 0.479017 +-0.0124866 0.11001 0.0423152 0.52124 0.481695 +-0.011487 0.110004 0.0424075 0.511313 0.483376 +-0.010477 0.110005 0.0426237 0.812643 0.5 +-0.00949217 0.110042 0.0428369 0.790331 0.5 +-0.00849166 0.110041 0.0429425 0.617568 0.5 +-0.00746424 0.110009 0.0430329 0.606481 0.477802 +-0.00649249 0.110023 0.0430195 0.598883 0.5 +-0.00549779 0.110034 0.0429298 0.621679 0.5 +-0.00449743 0.110031 0.0429169 0.626173 0.5 +-0.00350028 0.110017 0.0429859 0.622287 0.478931 +-0.00250067 0.110029 0.0428965 0.622814 0.5 +-0.0015019 0.110031 0.0427805 0.806475 0.5 +-0.000505415 0.110024 0.0426421 0.831399 0.5 +0.000487515 0.110024 0.0426254 0.840966 0.5 +0.00149673 0.110036 0.0425823 0.837191 0.5 +0.00247871 0.110023 0.0425049 0.820045 0.5 +0.00348633 0.110018 0.042298 0.803592 0.5 +0.00447281 0.110003 0.0420134 0.610647 0.407098 +0.0054852 0.109984 0.0416767 0.605167 0.480177 +-0.0823269 0.108767 -0.000607289 0.514896 0.5 +-0.00849082 0.119665 0.0373867 0.65442 0.5 +0.00844159 0.109753 0.0403226 0.612331 0.5 +0.00949393 0.109876 0.0399119 0.637391 0.5 +0.0104934 0.109851 0.0397458 0.653721 0.5 +0.0115037 0.109883 0.0397133 0.665356 0.444574 +0.0125027 0.109886 0.0398286 0.658788 0.434179 +0.0135065 0.109861 0.0400106 0.692716 0.407232 +0.0144999 0.10985 0.0401157 0.695299 0.5 +0.015502 0.109895 0.0399577 0.669291 0.5 +0.0164894 0.10985 0.0397676 0.650954 0.390663 +0.0174948 0.109841 0.0394103 0.641883 0.5 +0.0185004 0.109841 0.0391791 0.653782 0.5 +0.019508 0.109842 0.0390589 0.532641 0.481658 +0.0204806 0.109788 0.0388648 0.520083 0.448518 +0.021502 0.109802 0.0384228 0.633202 0.5 +0.0224953 0.109772 0.0381484 0.639886 0.5 +0.0235417 0.109895 0.0378397 0.631257 0.5 +-0.0842876 0.108899 0.00336188 0.453559 0.5 +-0.069531 0.14702 0.0417131 0.584508 0.466057 +0.026502 0.121591 0.0237374 0.650624 0.5 +0.0410592 0.0985428 -0.00379645 0.558991 0.5 +0.0330202 0.102118 0.0356213 0.729764 0.5 +-0.0484961 0.113915 0.0346796 0.546974 0.5 +-0.0409099 0.173193 -0.0056112 0.212 0.5 +-0.0439793 0.169659 0.00035763 0.324558 0.5 +-0.0622824 0.159968 -0.0396048 0.42534 0.429338 +-0.036496 0.17271 -0.000384966 0.366222 0.334313 +-0.0551627 0.0709645 0.0393255 0.673757 0.350131 +0.0259399 0.098006 -0.0197455 0.684181 0.5 +-0.0155155 0.115507 0.0382335 0.55687 0.5 +0.0377143 0.106919 0.0261871 0.524615 0.47692 +-0.0752567 0.160324 -0.0108988 0.36097 0.5 +0.000838494 0.130009 0.0243594 0.491884 0.5 +0.0152242 0.123558 0.0310525 0.551975 0.5 +-0.0442894 0.126542 0.0198398 0.48544 0.5 +-0.0690298 0.155601 0.00744971 0.827015 0.5 +-0.0500333 0.148713 -0.00320857 0.526526 0.5 +-0.0288487 0.0944704 -0.0247187 0.463035 0.5 +-0.00688661 0.108791 -0.0226031 0.686379 0.5 +-0.07081 0.110507 0.0424798 0.746569 0.5 +-0.038884 0.108506 -0.019659 0.666882 0.5 +-0.0438179 0.0928034 -0.0224841 0.57748 0.5 +-0.0490488 0.150196 -0.0040443 0.521986 0.5 +-0.0540561 0.150161 -0.00256907 0.519119 0.5 +-0.0699384 0.129684 -0.00901632 0.683259 0.5 +-0.0668535 0.0938084 -0.0173106 0.582853 0.5 +0.0382387 0.108322 0.00216703 0.452957 0.5 +-0.0800761 0.0936246 -0.00957758 0.694512 0.5 +-0.0475033 0.113884 0.0346438 0.534232 0.430238 +-0.0464973 0.113852 0.0344899 0.562831 0.5 +-0.0344513 0.172765 -0.000813008 0.429439 0.5 +-0.0325359 0.172727 -0.00270207 0.555624 0.5 +0.013918 0.129208 0.0205036 0.50512 0.325214 +-0.031866 0.126076 0.00521848 0.898835 0.5 +-0.042544 0.16227 0.00511409 0.560058 0.5 +-0.0855641 0.121149 -0.00272592 0.482481 0.5 +-0.0615714 0.111062 0.0370307 0.797626 0.5 +-0.0605024 0.111127 0.0368734 0.823549 0.5 +-0.0594975 0.111137 0.0367915 0.799404 0.5 +-0.0584972 0.111135 0.0367864 0.789759 0.5 +-0.0574963 0.111121 0.0367615 0.5624 0.5 +-0.0564969 0.111123 0.0367634 0.446632 0.5 +-0.0554964 0.111163 0.0367062 0.474051 0.5 +-0.054498 0.111159 0.0367038 0.5212 0.415004 +-0.0535009 0.111177 0.0367213 0.54496 0.5 +-0.0524975 0.111152 0.036921 0.58064 0.5 +-0.0515006 0.111173 0.0369493 0.594972 0.5 +-0.0504992 0.111154 0.0370407 0.569348 0.5 +-0.0494996 0.111168 0.0370596 0.54755 0.5 +-0.0485004 0.111187 0.0370789 0.510067 0.5 +-0.0474976 0.111158 0.0371638 0.510435 0.5 +-0.0465008 0.111213 0.0371008 0.553495 0.5 +-0.0454975 0.111194 0.0370842 0.580589 0.5 +-0.0444957 0.111173 0.0370595 0.575776 0.5 +-0.0434945 0.111176 0.0370674 0.567527 0.5 +-0.042488 0.1112 0.0368617 0.569354 0.5 +-0.0414792 0.111213 0.0366505 0.602997 0.5 +-0.0404833 0.111172 0.036485 0.631513 0.5 +-0.0394866 0.111153 0.0363447 0.647414 0.5 +-0.0384921 0.111131 0.0361977 0.646341 0.5 +-0.0374903 0.111156 0.0359971 0.652002 0.5 +-0.0364976 0.111093 0.0360234 0.632764 0.5 +-0.0355002 0.111108 0.0360398 0.616536 0.413172 +-0.0345116 0.111154 0.0360997 0.584009 0.5 +-0.0335083 0.11115 0.0363293 0.54974 0.5 +-0.0325075 0.11115 0.0364446 0.550917 0.5 +-0.0314959 0.111117 0.0366419 0.557535 0.5 +-0.0305063 0.111166 0.0367005 0.601277 0.5 +-0.0294974 0.111128 0.0367729 0.633914 0.5 +-0.0285131 0.111188 0.0369648 0.601364 0.409963 +-0.0275135 0.111195 0.0372083 0.550681 0.419236 +-0.0265179 0.111211 0.0374625 0.513211 0.5 +-0.02552 0.111233 0.0379672 0.488097 0.5 +-0.0245152 0.111258 0.0385919 0.497393 0.447299 +-0.0235304 0.111308 0.039012 0.523548 0.445075 +-0.0225065 0.111294 0.03935 0.540329 0.445338 +-0.0215077 0.111305 0.0395987 0.54627 0.44355 +-0.0204995 0.111306 0.0398343 0.571818 0.437614 +-0.0194926 0.111309 0.040066 0.603479 0.446321 +-0.0184975 0.111326 0.0402128 0.619211 0.44982 +-0.0174928 0.111329 0.0404434 0.593336 0.5 +-0.0164929 0.11134 0.0406952 0.573117 0.5 +-0.0154754 0.111334 0.0410203 0.728592 0.5 +-0.0144984 0.11138 0.0412273 0.578911 0.5 +-0.01349 0.11138 0.0414506 0.595346 0.5 +-0.0124847 0.111379 0.041672 0.609288 0.5 +-0.0114747 0.111375 0.0418865 0.508881 0.5 +-0.0104567 0.111397 0.0420636 0.493883 0.481606 +-0.00949487 0.11143 0.0422271 0.600142 0.4772 +-0.00849115 0.111421 0.0423213 0.601803 0.471828 +-0.00748755 0.111393 0.0423782 0.600044 0.5 +-0.00649552 0.111418 0.0421995 0.609507 0.5 +-0.0054932 0.111405 0.0422861 0.61406 0.460263 +-0.00446924 0.111373 0.0424038 0.628628 0.471565 +-0.00349512 0.111424 0.0424267 0.634347 0.5 +-0.00249465 0.111426 0.042426 0.635771 0.5 +-0.00149842 0.111423 0.0424113 0.832195 0.5 +-0.000499736 0.11143 0.0424297 0.847643 0.5 +0.000490707 0.111422 0.0424934 0.827571 0.5 +0.00149281 0.111426 0.0424095 0.805792 0.5 +0.00248558 0.111415 0.0422707 0.622832 0.5 +0.00348136 0.111402 0.0420175 0.504091 0.5 +0.00448658 0.111391 0.0416751 0.509624 0.5 +0.00548074 0.111376 0.0414038 0.518148 0.5 +0.00647808 0.111357 0.041027 0.511524 0.5 +-0.0204991 0.12085 0.0318342 0.50057 0.5 +0.00846909 0.111301 0.0401143 0.628585 0.461948 +0.00950248 0.111292 0.0396928 0.645428 0.408491 +0.010493 0.111264 0.0393941 0.65755 0.5 +0.0115009 0.111256 0.0392728 0.790912 0.5 +0.0124992 0.111251 0.0392691 0.672533 0.5 +0.0135008 0.111258 0.0394003 0.667219 0.5 +0.0145005 0.11127 0.0394252 0.684229 0.5 +0.0154995 0.111258 0.0392925 0.664961 0.5 +0.0165102 0.111269 0.0389693 0.536538 0.5 +0.0174899 0.111215 0.038757 0.537274 0.482401 +0.0184693 0.111176 0.038468 0.552667 0.433608 +0.0194916 0.111179 0.0380087 0.562018 0.478297 +0.0205156 0.111203 0.0377036 0.542412 0.482377 +0.0215009 0.111167 0.037529 0.662125 0.5 +0.0224909 0.111137 0.037371 0.640625 0.5 +-0.0285085 0.115306 0.0336868 0.569533 0.5 +-0.0218282 0.127027 0.00889322 0.643953 0.278931 +-0.0777263 0.156926 -0.0159116 0.544792 0.5 +0.0414602 0.0985756 -0.00280597 0.489207 0.5 +-0.036508 0.127508 0.00348399 0.882076 0.5 +-0.0455004 0.113892 0.0345333 0.566165 0.5 +-0.0895401 0.135156 0.0272131 0.773217 0.5 +-0.0794788 0.13585 0.0504167 0.444383 0.5 +0.038384 0.106978 0.0241932 0.635515 0.5 +-0.0344434 0.174206 -0.0015497 0.305194 0.446126 +0.0412949 0.104257 0.00416372 0.513708 0.5 +-0.0858985 0.111778 0.0253403 0.623186 0.5 +-0.0314085 0.177247 -0.00418119 0.241676 0.440361 +-0.0245124 0.180278 -0.0098524 0.421328 0.5 +-0.0445 0.113887 0.0346508 0.601594 0.5 +0.00385761 0.129628 0.0254511 0.350747 0.442124 +-0.0634388 0.152153 -0.00650488 0.537826 0.5 +-0.0662966 0.156977 -0.00759157 0.55956 0.5 +0.0116443 0.129846 0.0210966 0.480949 0.5 +0.0142764 0.128727 0.0220636 0.485478 0.5 +0.0167493 0.127305 0.0229819 0.40034 0.5 +-0.0694997 0.166373 -0.0203616 0.345309 0.443726 +0.0217467 0.124535 0.0248197 0.401473 0.5 +-0.0298412 0.0944347 -0.0243277 0.742 0.5 +-0.0718881 0.109321 -0.0102252 0.50069 0.5 +-0.0428329 0.0928281 -0.0227901 0.449666 0.5 +-0.0418435 0.0928469 -0.022966 0.450732 0.5 +-0.0448317 0.0927682 -0.0220335 0.629799 0.5 +0.00512317 0.107303 -0.0203142 0.784595 0.5 +-0.0500528 0.150184 -0.0037815 0.560405 0.5 +-0.0321069 0.162239 -0.0144989 0.610607 0.465947 +-0.0488244 0.0927169 -0.0215945 0.799964 0.5 +-0.0289503 0.0931616 -0.025199 0.34293 0.5 +-0.0474982 0.162268 0.00647513 0.547409 0.5 +-0.0933703 0.118789 0.0242915 0.81363 0.5 +0.0388231 0.106965 0.0221712 0.663326 0.5 +-0.033489 0.172734 -0.00156283 0.408988 0.459977 +-0.0755108 0.126011 0.0529241 0.661937 0.45566 +-0.0704919 0.126012 0.052539 0.539433 0.5 +-0.0435018 0.113907 0.034675 0.644337 0.5 +-0.0815026 0.127419 0.0524098 0.512095 0.449463 +-0.0714888 0.127424 0.0521873 0.531023 0.5 +-0.0614851 0.112533 0.0365644 0.857371 0.5 +-0.0604912 0.112522 0.03629 0.938367 0.5 +-0.0594926 0.112518 0.0361699 0.917744 0.5 +-0.0584874 0.112515 0.0360801 0.90868 0.5 +-0.057494 0.112512 0.0360215 0.906294 0.5 +-0.0564952 0.112508 0.0359017 0.890409 0.5 +-0.0554943 0.112513 0.0359102 0.607062 0.5 +-0.0544937 0.112536 0.0358256 0.611781 0.5 +-0.0534948 0.11254 0.0358256 0.515854 0.5 +-0.0525052 0.112524 0.0359139 0.541663 0.402994 +-0.0514991 0.112527 0.0359192 0.540869 0.5 +-0.0504982 0.112495 0.0358796 0.548404 0.5 +-0.049499 0.112564 0.0357174 0.556038 0.5 +-0.0485029 0.112572 0.035725 0.528911 0.406071 +-0.0474983 0.11254 0.0358059 0.510971 0.5 +-0.0465003 0.112564 0.0357108 0.551076 0.5 +-0.0454992 0.112558 0.0357052 0.571546 0.5 +-0.0444981 0.112567 0.0357183 0.615036 0.376359 +-0.0434985 0.112577 0.0357301 0.637035 0.5 +-0.0424957 0.11253 0.0356818 0.642031 0.5 +-0.0414935 0.112526 0.0356807 0.64497 0.5 +-0.0404873 0.112547 0.0355988 0.663819 0.382309 +-0.039483 0.112566 0.0355031 0.670877 0.5 +-0.0384866 0.112537 0.0353486 0.660601 0.5 +-0.0374892 0.112529 0.0350998 0.656999 0.5 +-0.0364947 0.112507 0.0349484 0.656764 0.5 +-0.0355007 0.112502 0.0349387 0.645514 0.5 +-0.0345112 0.112532 0.034973 0.62213 0.5 +-0.0335129 0.112536 0.0351002 0.587731 0.432697 +-0.0325146 0.112544 0.0353443 0.580417 0.5 +-0.0315135 0.112545 0.0354646 0.587482 0.5 +-0.0305078 0.112529 0.0355647 0.613359 0.5 +-0.0295045 0.112518 0.0356692 0.626005 0.5 +-0.0285136 0.112565 0.0358423 0.596571 0.5 +-0.0275083 0.112548 0.0360564 0.5383 0.5 +-0.0264982 0.112519 0.0362632 0.490898 0.428409 +-0.0458368 0.0956376 -0.0219211 0.808312 0.5 +-0.0448304 0.0956436 -0.0219722 0.716389 0.5 +-0.0478322 0.0956344 -0.0220665 0.823632 0.5 +-0.0508332 0.0956285 -0.0221275 0.813144 0.5 +-0.051836 0.0956238 -0.0221428 0.789137 0.5 +-0.052836 0.095613 -0.0220115 0.727546 0.5 +-0.053845 0.0955972 -0.0217935 0.703326 0.5 +0.0262469 0.11849 0.0293617 0.621915 0.5 +0.0255714 0.119263 0.0291067 0.602384 0.5 +-0.00987882 0.105925 -0.0227673 0.713211 0.5 +-0.0799934 0.136838 -0.00393652 0.511004 0.5 +-0.0408461 0.0957242 -0.0225993 0.670745 0.5 +-0.0418419 0.09571 -0.0225712 0.673096 0.5 +-0.0200723 0.0361973 0.0530852 0.447203 0.5 +-0.0192376 0.0362049 0.0528295 0.291685 0.457265 +0.0111444 0.104428 -0.02004 0.888976 0.5 +-0.0600127 0.131125 -0.00733582 0.660449 0.476894 +-0.0779451 0.128117 -0.00684087 0.524375 0.5 +-0.0418712 0.105657 -0.0205306 0.740048 0.5 +-0.0748055 0.0863518 -0.0148055 0.389502 0.5 +-0.0737831 0.0864021 -0.0154104 0.423956 0.5 +-0.0688114 0.086573 -0.0173858 0.476888 0.5 +0.0061481 0.104478 -0.0212191 0.787111 0.5 +0.0111302 0.107269 -0.019511 0.565673 0.5 +0.00520355 0.0894816 -0.0332282 0.797928 0.5 +-0.0558128 0.0869147 -0.0214989 0.59525 0.5 +-0.0221249 0.165275 -0.017299 0.809186 0.5 +-0.0360717 0.157766 -0.0114869 0.828945 0.5 +-0.00517846 0.0367339 0.04845 0.222029 0.41081 +-0.00415334 0.0367895 0.0481682 0.210573 0.5 +-0.0497962 0.0869626 -0.02172 0.706197 0.5 +-0.0697905 0.0865423 -0.0170841 0.460401 0.440915 +-0.0617992 0.0867358 -0.0192812 0.522019 0.5 +-0.0709683 0.136976 -0.00769814 0.522664 0.5 +-0.0613421 0.118288 0.041013 0.444958 0.430802 +0.029005 0.115546 0.0303821 0.660225 0.5 +-0.0474654 0.135069 0.0155888 0.69063 0.5 +-0.0310887 0.159271 -0.0130615 0.839361 0.5 +-0.030845 0.0944191 -0.0240931 0.775398 0.5 +-0.0818927 0.122139 -0.0045131 0.513795 0.5 +-0.0311396 0.166714 -0.0162904 0.551269 0.5 +-0.0161793 0.169751 -0.0220442 0.669958 0.5 +-0.0560506 0.150155 -0.00188433 0.562881 0.5 +-0.0687285 0.155709 0.0264626 0.867297 0.5 +-0.0687195 0.165823 -0.0200644 0.440462 0.424246 +0.0126876 0.0376693 0.0445214 0.266796 0.5 +0.0137867 0.0377633 0.0443361 0.266173 0.249709 +0.0148847 0.0378033 0.0441286 0.250991 0.5 +-0.0628015 0.0867155 -0.0190743 0.624832 0.356436 +-0.0497623 0.0665865 0.0371903 0.669296 0.5 +0.0177451 0.0379283 0.0429098 0.281781 0.5 +0.0185494 0.0379494 0.0423026 0.267856 0.5 +-0.00587725 0.105934 -0.0226578 0.779635 0.5 +0.0201031 0.0379621 0.0410367 0.199495 0.339656 +-0.087831 0.103641 0.0093887 0.703594 0.5 +-0.050904 0.119772 0.0333476 0.590483 0.5 +0.0357112 0.102065 0.0324889 0.717221 0.5 +0.0443987 0.0959613 0.0131589 0.562531 0.5 +0.0279524 0.103456 0.0388242 0.70871 0.5 +0.0302883 0.103408 0.0369471 0.721815 0.5 +-0.0729716 0.175028 -0.0520538 0.425159 0.5 +-0.0668407 0.0952437 -0.0171577 0.575799 0.5 +-0.0428426 0.0956907 -0.0224311 0.651853 0.5 +-0.0298463 0.0958488 -0.0239617 0.823587 0.5 +-0.0659991 0.136994 -0.00799651 0.676933 0.5 +-0.00587956 0.107379 -0.0226761 0.75573 0.5 +-0.0619636 0.125289 -0.00856668 0.835181 0.5 +-0.000859642 0.105926 -0.0219248 0.755337 0.5 +-0.0659124 0.113781 -0.0114133 0.592211 0.5 +-0.00487539 0.105927 -0.0225105 0.769209 0.5 +-0.0498232 0.0349806 0.0446412 0.341981 0.5 +-0.0487731 0.0349958 0.0444688 0.284027 0.5 +0.0296386 0.114736 0.0306143 0.668133 0.5 +0.0283559 0.116347 0.030146 0.648879 0.5 +0.0269409 0.117743 0.0296345 0.618639 0.5 +-0.0285902 0.125327 0.00496117 0.821372 0.5 +-0.027448 0.125478 0.0053817 0.770885 0.5 +-0.024201 0.0373653 0.0542269 0.366246 0.5 +-0.0230319 0.0374462 0.0541561 0.337961 0.5 +-0.0759547 0.129619 -0.00760722 0.398929 0.445851 +-0.0208903 0.0376209 0.05361 0.269612 0.410074 +-0.0199192 0.0375867 0.0533971 0.306373 0.5 +-0.0189411 0.0376177 0.0530488 0.280519 0.399928 +-0.0527937 0.0869491 -0.0216809 0.743292 0.5 +-0.0507933 0.0869468 -0.0215939 0.720265 0.5 +-0.0161865 0.0377383 0.0516902 0.312679 0.5 +-0.0152064 0.0377587 0.0513804 0.325683 0.5 +-0.0141822 0.0378114 0.0510973 0.325333 0.5 +-0.0131926 0.0378477 0.0507876 0.33382 0.371247 +-0.0122192 0.0378665 0.050479 0.29035 0.386168 +-0.0112578 0.037897 0.0501369 0.302651 0.5 +-0.0102585 0.0379591 0.0497745 0.264734 0.5 +-0.0568079 0.0869026 -0.0213473 0.565009 0.5 +-0.00826521 0.0380456 0.0491273 0.272519 0.364683 +-0.00723161 0.0381024 0.0489495 0.286459 0.334516 +-0.006265 0.0381462 0.0486516 0.265854 0.366689 +-0.00523048 0.0381888 0.0482681 0.26396 0.30057 +-0.00423381 0.0382248 0.0479393 0.253225 0.5 +-0.00324005 0.038276 0.0477168 0.223909 0.216609 +-0.00223658 0.0383059 0.0473338 0.227248 0.5 +-0.00125765 0.0383424 0.0470318 0.287352 0.343577 +-0.0640284 0.119984 0.047923 0.559641 0.5 +-0.0582446 0.13534 0.0351018 0.554568 0.5 +0.0402871 0.104196 0.0211608 0.540134 0.5 +0.00291054 0.0385481 0.0460492 0.315626 0.5 +0.00400584 0.0386131 0.0458842 0.349831 0.5 +0.00510611 0.0386758 0.0457599 0.335781 0.5 +0.00620362 0.0387395 0.045605 0.334822 0.5 +0.00735643 0.038818 0.0454516 0.339738 0.5 +0.00513733 0.104474 -0.0214038 0.768958 0.5 +0.00954728 0.0389439 0.0451085 0.321648 0.5 +0.0106398 0.0390088 0.044914 0.310928 0.5 +0.0117341 0.0390743 0.0447312 0.307464 0.5 +0.0128315 0.0391361 0.0445812 0.316733 0.5 +0.013929 0.0392001 0.0444158 0.313664 0.5 +0.0150246 0.0392642 0.0442415 0.304222 0.5 +0.0161036 0.0393372 0.0440174 0.296977 0.5 +0.0170352 0.0393356 0.0436644 0.270879 0.452664 +0.0179771 0.0393777 0.0432522 0.270107 0.5 +0.0188124 0.0393785 0.042705 0.273856 0.5 +0.0196959 0.0394038 0.04222 0.276769 0.5 +0.0205957 0.0394417 0.0417168 0.271803 0.429831 +0.045275 0.0917907 0.0041773 0.55874 0.5 +-0.0192339 0.166857 -0.012207 0.485996 0.465348 +-0.051547 0.125478 0.0342157 0.581555 0.5 +-0.0182573 0.181629 -0.0177335 0.594618 0.5 +-0.0226202 0.181624 -0.0117104 0.462915 0.5 +0.0318118 0.100781 0.0373962 0.724384 0.5 +0.0311382 0.100809 0.0381724 0.714345 0.5 +-0.062789 0.152113 -0.0295989 0.505808 0.5 +0.0297469 0.0929269 0.0431563 0.637373 0.5 +-0.0438412 0.0942345 -0.0223045 0.610587 0.5 +-0.045835 0.0941966 -0.0219229 0.757896 0.5 +-0.0528311 0.0941603 -0.0218064 0.804197 0.5 +-0.0538405 0.0941624 -0.0218364 0.762344 0.5 +-0.0587837 0.0940397 -0.0203993 0.515245 0.340914 +-0.0597431 0.093988 -0.019461 0.707389 0.296857 +-0.0608063 0.0939347 -0.0190005 0.617735 0.5 +-0.0492809 0.152135 0.0110836 0.611316 0.5 +0.00183737 0.0373069 0.04638 0.261253 0.345588 +-0.0857257 0.0994313 0.000394941 0.452339 0.5 +-0.0600649 0.129705 0.039485 0.65271 0.448834 +-0.0789513 0.128091 -0.00607242 0.505916 0.432032 +-0.0783317 0.109572 0.0415234 0.916894 0.5 +-0.0548507 0.0955893 -0.0216695 0.689462 0.5 +-0.0668934 0.119448 -0.00885989 0.713497 0.5 +-0.056884 0.0955743 -0.0213395 0.463839 0.5 +-0.0485257 0.121087 0.0297472 0.568609 0.5 +-0.0608088 0.148246 0.0367611 0.492864 0.459908 +-0.0155858 0.183111 -0.0209193 0.56112 0.401469 +-0.0484797 0.126826 0.0298997 0.52341 0.5 +-0.0550359 0.12552 0.0379729 0.64506 0.5 +-0.000203909 0.130048 0.0239772 0.857132 0.5 +-0.0112103 0.129394 0.0199977 0.746464 0.5 +0.0302544 0.113856 0.0308506 0.676909 0.5 +-0.0341012 0.162237 -0.0142117 0.602767 0.4632 +-0.0534745 0.0360014 0.0464895 0.354064 0.5 +-0.0523124 0.0360662 0.0464431 0.35513 0.5 +-0.0512659 0.0360808 0.0462964 0.28622 0.5 +-0.0501651 0.0361307 0.0461721 0.326434 0.5 +-0.0491119 0.0361611 0.0459929 0.257756 0.5 +-0.0480938 0.0362157 0.0456887 0.230037 0.418671 +-0.0470685 0.0362699 0.0454096 0.184596 0.5 +-0.0460476 0.0363198 0.0451262 0.178124 0.384759 +-0.0450739 0.0363473 0.0448052 0.164859 0.5 +-0.0440686 0.0364096 0.0444754 0.180277 0.378427 +-0.0431936 0.0363833 0.0440447 0.193197 0.5 +-0.0430994 0.12944 0.0113807 0.566023 0.5 +-0.00439411 0.0968663 -0.0305974 0.71511 0.325502 +-0.0654707 0.155271 0.00728456 0.823562 0.5 +0.0276788 0.117119 0.0298812 0.626751 0.423862 +-0.0398245 0.0942915 -0.0229995 0.609324 0.5 +-0.0306102 0.125527 0.00421635 0.900666 0.5 +-0.02963 0.125357 0.0045818 0.86219 0.5 +0.0295472 0.11806 0.0262972 0.595163 0.5 +-0.0671663 0.164687 -0.0194859 0.358609 0.5 +-0.0242177 0.0387671 0.0542484 0.40886 0.5 +-0.0230546 0.0388523 0.0540611 0.339187 0.5 +-0.0220141 0.0388944 0.0538623 0.370486 0.5 +-0.0209812 0.0389557 0.0535988 0.346025 0.416744 +-0.0200013 0.0389743 0.053287 0.277599 0.5 +-0.0189776 0.0390241 0.0529956 0.284421 0.5 +-0.018017 0.0390618 0.0526069 0.311389 0.431966 +-0.0171133 0.0390763 0.0521827 0.333509 0.5 +-0.0161521 0.03911 0.0518105 0.399671 0.418013 +-0.0151896 0.0391404 0.0514631 0.405194 0.5 +-0.0141713 0.0391912 0.0511685 0.424617 0.406972 +-0.0131867 0.0392232 0.050872 0.311144 0.5 +-0.0122347 0.0392642 0.0504717 0.28412 0.400902 +-0.0112757 0.0392934 0.0501019 0.283521 0.422704 +-0.0103201 0.0393296 0.0497389 0.3654 0.5 +-0.00928822 0.0393788 0.0494849 0.279643 0.5 +-0.00827202 0.0394277 0.049182 0.306569 0.5 +-0.00730388 0.0394625 0.048838 0.279229 0.475709 +-0.00627779 0.0395112 0.048561 0.276466 0.5 +-0.00524162 0.0395598 0.0483202 0.370184 0.5 +-0.00422658 0.0396088 0.0480089 0.359275 0.5 +-0.00325216 0.0396403 0.0476826 0.278257 0.360257 +-0.00222977 0.0396912 0.0474006 0.298252 0.5 +-0.00126307 0.039726 0.0470556 0.344786 0.5 +-0.000241537 0.0397743 0.0467748 0.355009 0.5 +0.000791005 0.0398223 0.046536 0.39652 0.5 +0.00187492 0.0398874 0.0463369 0.423363 0.5 +0.00289976 0.039936 0.0460731 0.416953 0.5 +0.00399334 0.0399971 0.0458959 0.440282 0.5 +0.00514365 0.0400743 0.045751 0.44547 0.5 +0.00624486 0.0401371 0.0456279 0.443744 0.5 +0.00740252 0.0402134 0.0455033 0.439389 0.395564 +0.00849848 0.0402756 0.0453316 0.422024 0.5 +0.00959837 0.0403395 0.0451906 0.409731 0.5 +0.0107555 0.0404168 0.045078 0.393356 0.5 +0.0118541 0.0404814 0.0449158 0.38688 0.5 +0.0129483 0.0405423 0.0447572 0.391286 0.5 +0.0140441 0.0406072 0.0445814 0.392485 0.5 +0.015086 0.0406501 0.0443863 0.379922 0.5 +0.0161688 0.0407187 0.0441528 0.317569 0.5 +0.017193 0.0407686 0.0438767 0.303497 0.4662 +0.0181431 0.0408036 0.0434958 0.35401 0.5 +0.0189976 0.0408013 0.0429893 0.365784 0.5 +0.0198342 0.0408002 0.0424386 0.324434 0.461619 +0.0207007 0.040829 0.0419301 0.351718 0.5 +0.0215433 0.04083 0.0414017 0.334632 0.467609 +0.0221795 0.040783 0.0405434 0.441767 0.5 +0.0228822 0.0407495 0.0397886 0.410778 0.5 +0.0235133 0.0407023 0.0389233 0.317727 0.5 +0.0229651 0.0928857 0.047441 0.532574 0.5 +-0.0146742 0.180146 -0.0213737 0.731902 0.5 +0.0306462 0.0968954 0.0409575 0.736834 0.5 +0.0181832 0.102054 0.0457705 0.493408 0.5 +-0.0876274 0.137747 0.00620032 0.561876 0.5 +0.0261935 0.0402752 0.032238 0.294647 0.339561 +0.0267785 0.0402768 0.0313512 0.279931 0.5 +-0.060805 0.0867676 -0.0196616 0.452379 0.5 +-0.0758951 0.123764 -0.00763971 0.533692 0.441699 +-0.0408247 0.092859 -0.0231395 0.555849 0.5 +-0.0638117 0.0867138 -0.0190744 0.666946 0.5 +-0.061937 0.111099 -0.0150221 0.608847 0.5 +0.0449899 0.0861501 0.00118902 0.569538 0.411652 +-0.0301636 0.153871 -0.00371356 0.174064 0.5 +-0.0895642 0.139283 0.0271809 0.644099 0.5 +-0.0540878 0.128312 0.0358453 0.730429 0.5 +-0.0558676 0.0941545 -0.0217392 0.637471 0.5 +-0.0548497 0.0941617 -0.0218342 0.703995 0.5 +-0.0568623 0.0941345 -0.0215512 0.559663 0.5 +-0.0578481 0.0940916 -0.0211113 0.40937 0.366591 +-0.0632023 0.166731 -0.0605917 0.298703 0.454422 +0.00013405 0.105909 -0.0216496 0.76254 0.5 +-0.0470477 0.150201 -0.00445632 0.507596 0.479182 +-0.0388402 0.0957243 -0.0226737 0.655277 0.5 +-0.0468309 0.0956366 -0.0220125 0.82138 0.5 +-0.0488321 0.0956358 -0.0221459 0.797944 0.5 +0.0289271 0.110086 0.0349831 0.692282 0.5 +-0.0762945 0.152787 -0.0118902 0.715962 0.5 +-0.0549619 0.14242 0.0292765 0.540983 0.464711 +-0.0576661 0.143885 0.0324483 0.761767 0.5 +-0.0808584 0.15153 0.0328055 0.310776 0.5 +-0.067513 0.132633 0.0463034 0.737119 0.5 +-0.0361357 0.127268 0.00216052 0.891264 0.5 +-0.0556091 0.0372359 0.0469697 0.316254 0.5 +-0.054442 0.0373135 0.0469328 0.276749 0.5 +-0.0532705 0.0373829 0.0469289 0.278862 0.5 +-0.0522198 0.0374253 0.0467614 0.268284 0.5 +-0.05111 0.0375368 0.0465746 0.231927 0.42716 +-0.0501186 0.0375352 0.0462556 0.335075 0.403303 +-0.0491606 0.0375682 0.0458781 0.281532 0.5 +-0.0481382 0.0376145 0.0455768 0.278825 0.5 +-0.0470957 0.0376632 0.0453493 0.287924 0.5 +-0.0460199 0.0377083 0.0451098 0.293234 0.367831 +-0.0451209 0.0377458 0.0446873 0.303924 0.5 +-0.0440293 0.0378087 0.0445145 0.302323 0.5 +-0.0431166 0.0378307 0.0441123 0.305964 0.5 +-0.0833395 0.103378 -0.00262342 0.345654 0.463501 +-0.089178 0.137924 0.0381661 0.509317 0.442339 +-0.0512299 0.133896 0.029412 0.675406 0.5 +-0.0518432 0.133909 0.0302884 0.691749 0.5 +-0.0855599 0.112052 0.0307632 0.452139 0.5 +0.0281295 0.110111 0.0355841 0.659722 0.5 +0.0302092 0.117283 0.0265434 0.60052 0.5 +-0.0826135 0.153724 0.024657 0.320488 0.426945 +-0.0254725 0.0400777 0.0541415 0.489962 0.5 +-0.0242347 0.0401682 0.0541848 0.458559 0.5 +-0.0230647 0.0402418 0.0541248 0.423392 0.5 +-0.0219645 0.0403079 0.0539432 0.38826 0.476256 +-0.0209874 0.04034 0.0536055 0.390911 0.378269 +-0.0200226 0.0403705 0.0532551 0.36893 0.5 +-0.0190478 0.0404047 0.0529202 0.352151 0.44779 +-0.0180327 0.0404537 0.0526147 0.389942 0.466386 +-0.0170629 0.040485 0.0522671 0.421288 0.461667 +-0.0161498 0.040504 0.0518582 0.436089 0.418033 +-0.0151483 0.0405525 0.0515137 0.432514 0.5 +-0.0141847 0.0405865 0.0511605 0.41235 0.404942 +-0.0132153 0.0406258 0.0508237 0.407959 0.467866 +-0.012241 0.0406566 0.0504983 0.373137 0.5 +-0.0112354 0.0407042 0.0501624 0.369551 0.5 +-0.0102599 0.0407381 0.0498453 0.370328 0.46651 +-0.00924245 0.0407867 0.049553 0.362405 0.5 +-0.00827698 0.0408222 0.049207 0.361163 0.5 +-0.00725841 0.0408714 0.048906 0.440778 0.5 +-0.00628355 0.0409075 0.0485853 0.431672 0.5 +-0.00525979 0.0409541 0.0483014 0.432497 0.5 +-0.00424346 0.0409986 0.0479883 0.461714 0.5 +-0.00327736 0.0410332 0.0476549 0.440392 0.380541 +-0.00224884 0.0410819 0.0473849 0.373645 0.474893 +-0.0012817 0.0411143 0.047028 0.44882 0.375504 +-0.000216315 0.0411702 0.046762 0.573088 0.5 +0.000821596 0.0412233 0.0465397 0.466649 0.5 +-0.050793 0.124044 0.0335488 0.536649 0.5 +-0.0157908 0.169796 -0.0160148 0.61604 0.5 +-0.0243798 0.168291 -0.0108587 0.642638 0.5 +-0.0561131 0.145329 0.0311927 0.579075 0.5 +0.0247594 0.0929114 0.046503 0.466111 0.5 +0.0197097 0.119321 0.0339587 0.592029 0.47756 +0.0374187 0.0855245 -0.0157145 0.746215 0.5 +0.00958152 0.0417197 0.0451866 0.481915 0.5 +0.0107427 0.041795 0.045086 0.464432 0.5 +0.0118435 0.0418607 0.0449613 0.449251 0.5 +0.0130004 0.0419341 0.0448362 0.475782 0.5 +0.014095 0.041997 0.0446638 0.489952 0.5 +0.0151979 0.0420601 0.0445385 0.487785 0.5 +0.0162788 0.0421207 0.0443108 0.461373 0.5 +0.0173062 0.0421724 0.0440438 0.381351 0.457984 +0.0182702 0.0422045 0.0436952 0.362689 0.463942 +0.0191204 0.042209 0.0431814 0.438421 0.5 +0.0199833 0.0422265 0.0426566 0.459081 0.5 +0.0207709 0.0422154 0.0420468 0.479281 0.5 +0.0216142 0.042218 0.0415059 0.415845 0.472482 +0.0224333 0.0422246 0.0409441 0.470207 0.47169 +0.0231834 0.0422122 0.040252 0.593263 0.5 +0.0238752 0.0421864 0.0394869 0.444171 0.5 +0.0245089 0.042142 0.038636 0.525025 0.5 +0.0250546 0.0420912 0.0376641 0.495375 0.5 +0.0265767 0.0994658 0.0420977 0.722826 0.5 +0.0371767 0.095465 0.0345819 0.718127 0.5 +0.0403868 0.0966272 0.0286723 0.682147 0.5 +0.0269196 0.0418157 0.0333163 0.335561 0.431941 +0.0274612 0.0417732 0.0323464 0.336863 0.5 +0.0280618 0.0416802 0.0314173 0.355006 0.386371 +0.0287437 0.0416628 0.0306503 0.36114 0.5 +0.0294554 0.0416168 0.02991 0.420412 0.5 +-0.0648009 0.0867059 -0.0190299 0.522392 0.5 +-0.0195264 0.159643 -0.00556617 0.264777 0.5 +-0.0127812 0.17424 -0.0204206 0.730436 0.5 +0.0207857 0.0994851 0.0460447 0.437394 0.5 +-0.0548201 0.128324 0.0365339 0.719291 0.5 +-0.0661452 0.115702 0.0482687 0.307185 0.5 +-0.0378274 0.0929022 -0.0235348 0.492704 0.5 +-0.038823 0.0928858 -0.0233898 0.524406 0.5 +-0.0528198 0.0927332 -0.0219739 0.810406 0.5 +-0.0518166 0.09273 -0.0219218 0.835079 0.5 +-0.0638596 0.0939187 -0.018635 0.659442 0.5 +-0.0688255 0.0937312 -0.0163709 0.726304 0.5 +-0.0678527 0.0937535 -0.0166708 0.652815 0.369048 +-0.0628349 0.0939281 -0.0188357 0.67354 0.5 +-0.0618299 0.0939366 -0.0189413 0.661773 0.5 +-0.0498262 0.0941747 -0.0218116 0.786747 0.5 +-0.0488263 0.0941792 -0.0218889 0.782425 0.5 +-0.0368374 0.0957548 -0.023046 0.592178 0.5 +-0.0301525 0.168207 -0.0169318 0.490285 0.456672 +-0.0561001 0.14389 0.0312058 0.552601 0.5 +-0.0568299 0.143897 0.0319274 0.572192 0.479561 +-0.0647932 0.143933 0.0397518 0.621016 0.5 +0.0242791 0.118022 0.0317589 0.657563 0.5 +-0.0278275 0.158128 -8.54892e-06 0.393352 0.5 +-0.0414226 0.150668 0.00483874 0.491474 0.5 +0.0326457 0.113685 0.0274718 0.640522 0.5 +-0.0555634 0.0386377 0.0471443 0.405924 0.5 +-0.0543178 0.0387289 0.0471882 0.354888 0.5 +-0.0532086 0.0387959 0.0470712 0.360055 0.5 +-0.0522301 0.0388364 0.0467813 0.36506 0.395487 +-0.0512629 0.0388692 0.0464256 0.301517 0.5 +-0.0503176 0.0388958 0.046006 0.339707 0.5 +-0.0493581 0.0389276 0.0456407 0.486408 0.5 +-0.0483957 0.0389613 0.0452757 0.432317 0.5 +-0.0473098 0.0390167 0.04506 0.446057 0.5 +-0.0462757 0.0390662 0.0448146 0.459414 0.5 +-0.0452605 0.0391077 0.0445023 0.480061 0.5 +-0.0442953 0.0391467 0.0441537 0.458633 0.5 +-0.0433217 0.0391871 0.0438385 0.458277 0.5 +-0.0423664 0.0392174 0.0434612 0.462937 0.5 +-0.070932 0.129672 -0.00889239 0.636711 0.5 +-0.0257849 0.174205 -0.0110873 0.620534 0.5 +-0.0219159 0.175693 -0.0142737 0.653794 0.5 +-0.0155071 0.175699 -0.0190868 0.721427 0.5 +-0.0323725 0.16532 -0.00484492 0.582142 0.5 +-0.0364476 0.166788 -0.00019754 0.635867 0.5 +0.00123889 0.0998292 0.0485145 0.443808 0.405048 +-0.0255484 0.0414464 0.0539815 0.549241 0.46712 +-0.0243246 0.0415463 0.0540712 0.547516 0.465661 +-0.0230864 0.0416339 0.0540702 0.527394 0.5 +-0.0220331 0.041681 0.0538782 0.448358 0.47609 +-0.0210104 0.0417331 0.053591 0.473183 0.5 +-0.0200406 0.0417644 0.0532372 0.454214 0.473858 +-0.019019 0.0418114 0.0529435 0.439192 0.46811 +-0.0180479 0.0418467 0.0526068 0.437362 0.468885 +-0.0170777 0.0418831 0.0522589 0.434369 0.5 +-0.0161113 0.0419173 0.0519008 0.459203 0.414266 +-0.0151514 0.041952 0.0515406 0.476437 0.5 +-0.0141936 0.0419832 0.0511586 0.485699 0.419183 +-0.0132404 0.0420117 0.0507817 0.47312 0.471583 +-0.0122664 0.0420539 0.0504523 0.443906 0.5 +-0.0113055 0.0420913 0.0500945 0.436909 0.476536 +-0.0102821 0.0421361 0.0498123 0.443678 0.482638 +-0.00925999 0.0421824 0.0495336 0.442892 0.5 +-0.00828946 0.0422134 0.0491908 0.527598 0.478727 +-0.00727442 0.0422617 0.0488857 0.492225 0.5 +-0.00631217 0.0422986 0.0485312 0.624487 0.5 +-0.00534534 0.0423344 0.0481709 0.623555 0.380209 +-0.00432524 0.0423738 0.047881 0.493012 0.5 +-0.00335674 0.0424141 0.0475525 0.495472 0.360211 +-0.0023893 0.0424447 0.047211 0.501882 0.5 +-0.00138527 0.0424799 0.0468649 0.500596 0.5 +-0.0616099 0.158421 -0.0325909 0.507133 0.5 +-0.0555716 0.122697 0.0389476 0.70004 0.5 +-0.0541027 0.122637 0.0375656 0.45108 0.465416 +-0.0395679 0.152136 0.0040279 0.561375 0.5 +-0.0353519 0.169773 -0.000327923 0.47963 0.5 +-0.0563034 0.124125 0.0396482 0.606758 0.5 +-0.0527116 0.12267 0.0360612 0.500811 0.470495 +-0.0289779 0.174216 -0.00689295 0.678441 0.5 +-0.0638003 0.110914 0.037425 0.723987 0.5 +0.0296359 0.112746 0.0324848 0.718795 0.5 +0.0105917 0.043143 0.0448676 0.5345 0.450472 +0.0117525 0.0432202 0.0447834 0.529076 0.474955 +0.0128496 0.0432822 0.0446281 0.666306 0.5 +0.0140069 0.0433574 0.0445182 0.659564 0.5 +0.0151117 0.0434234 0.0444141 0.657747 0.5 +0.0162591 0.0434903 0.0442636 0.521354 0.5 +0.017284 0.0435398 0.0440147 0.444907 0.466086 +0.0182033 0.0435661 0.0436183 0.438252 0.469314 +0.0191474 0.0435971 0.0432171 0.546051 0.461336 +0.019989 0.0436019 0.0426848 0.466095 0.441594 +0.020822 0.043607 0.0421342 0.47524 0.5 +0.0216558 0.0436146 0.0415846 0.481802 0.418042 +0.0224871 0.0436168 0.0410219 0.589763 0.5 +0.0233312 0.0436331 0.0404882 0.52388 0.5 +0.0240686 0.0436305 0.0398361 0.500281 0.441605 +0.0247589 0.0435818 0.039017 0.562091 0.5 +0.025334 0.0435501 0.0381106 0.53939 0.5 +0.0259166 0.0434925 0.0371741 0.490473 0.5 +0.0264406 0.0434552 0.0361928 0.536887 0.5 +0.027039 0.0433782 0.0352623 0.413274 0.426626 +0.0275719 0.0433403 0.0342886 0.399985 0.5 +0.0280869 0.0432543 0.0332457 0.396083 0.406867 +0.0286707 0.0432432 0.0323583 0.394806 0.5 +0.0292762 0.0431552 0.0314362 0.401045 0.38244 +0.029915 0.0430998 0.0305942 0.522018 0.5 +0.0306407 0.0431175 0.0298982 0.624337 0.5 +-0.0577458 0.131139 0.0375772 0.65617 0.5 +-0.0651404 0.112408 0.0390225 0.310392 0.5 +-0.0777857 0.156925 -0.0179137 0.501695 0.5 +-0.0681644 0.132655 0.0471068 0.732904 0.5 +0.0453685 0.090397 0.014157 0.548098 0.5 +-0.0638988 0.109582 -0.0144399 0.626305 0.5 +-0.0728744 0.10362 -0.0122376 0.472443 0.5 +-0.0679136 0.113718 -0.0102762 0.576282 0.5 +-0.033131 0.166707 -0.0157536 0.555188 0.5 +-0.0328324 0.0929676 -0.0240794 0.750458 0.5 +-0.0318386 0.0929851 -0.0242124 0.715415 0.5 +-0.0338313 0.0929547 -0.0239607 0.811451 0.5 +-0.034827 0.0929417 -0.0239227 0.784122 0.5 +-0.0508195 0.0927229 -0.0217389 0.846189 0.5 +-0.0538265 0.0927341 -0.0220469 0.753489 0.5 +-0.0548298 0.0927311 -0.0220321 0.697363 0.5 +-0.0478299 0.094184 -0.0219241 0.795828 0.5 +-0.0518271 0.094161 -0.0217872 0.824021 0.5 +-0.0902689 0.112791 0.0182006 0.680632 0.5 +-0.0578782 0.0955404 -0.0210377 0.421074 0.453074 +-0.041838 0.0942787 -0.0228038 0.610877 0.5 +0.0402513 0.0940026 0.0302416 0.688862 0.5 +-0.0654625 0.143948 0.0405383 0.630114 0.5 +-0.0474034 0.126784 0.0277907 0.559024 0.5 +-0.0546077 0.131128 0.0350935 0.711292 0.5 +-0.0218748 0.174208 -0.0142339 0.671473 0.5 +-0.0226834 0.174208 -0.0136486 0.661553 0.5 +-0.0194066 0.174211 -0.0159442 0.708061 0.5 +-0.0514201 0.121192 0.0343754 0.475083 0.462035 +0.0119421 0.123166 0.0332435 0.502366 0.472712 +-0.0575802 0.14965 0.0326026 0.475139 0.5 +-0.0534339 0.040168 0.0467985 0.46764 0.459623 +-0.0523414 0.0402098 0.0465679 0.463427 0.5 +-0.0513639 0.0402537 0.0462611 0.465916 0.5 +-0.050462 0.0402796 0.0458238 0.471395 0.5 +-0.0495628 0.0402984 0.0453668 0.572266 0.39083 +-0.0486202 0.0403225 0.04496 0.571845 0.390217 +-0.0475948 0.0403553 0.044655 0.577673 0.5 +-0.0465484 0.0404249 0.0444582 0.602922 0.5 +-0.0454716 0.0404727 0.0442216 0.62231 0.378582 +-0.0445641 0.0405033 0.0438121 0.621142 0.5 +-0.0435452 0.0405422 0.0435069 0.59893 0.5 +0.0445378 0.0959706 0.0101622 0.572224 0.5 +0.0434078 0.0958974 0.0221477 0.436266 0.5 +-0.0287922 0.165339 -0.00670006 0.595671 0.5 +-0.0211402 0.175693 -0.0149194 0.661636 0.450952 +-0.0146968 0.175692 -0.019662 0.719141 0.5 +-0.0340447 0.1653 -0.00374721 0.573802 0.5 +-0.0432329 0.156565 0.00586077 0.670804 0.5 +-0.0522319 0.125489 0.0349878 0.609547 0.5 +-0.0489018 0.129654 0.0292632 0.623828 0.5 +-0.024542 0.0428919 0.0537128 0.565435 0.5 +-0.0233033 0.0429927 0.0537933 0.553327 0.480761 +-0.0221423 0.0430524 0.0536615 0.554767 0.476786 +-0.021105 0.0431099 0.0534593 0.549104 0.469282 +-0.020119 0.0431531 0.0531418 0.453953 0.482339 +-0.0191016 0.0431933 0.0528315 0.437269 0.47782 +-0.0181329 0.0432293 0.0524811 0.4388 0.5 +-0.0171714 0.0432613 0.0521182 0.531008 0.5 +-0.0161975 0.0432999 0.0517769 0.449535 0.384562 +-0.0152962 0.0433291 0.0513434 0.573297 0.5 +-0.0473623 0.129578 0.0262098 0.527993 0.5 +-0.0465019 0.129507 0.0239285 0.466874 0.5 +0.0388648 0.0842467 -0.0137667 0.644934 0.5 +-0.0868887 0.102318 0.0233696 0.499023 0.5 +-0.0482032 0.131003 0.0267578 0.577809 0.443009 +-0.0486855 0.131027 0.0278379 0.610907 0.5 +-0.0562637 0.142432 0.0309288 0.538141 0.477997 +-0.0521483 0.153554 0.0122178 0.562834 0.5 +0.0393676 0.0927337 0.0325144 0.69581 0.5 +-0.0664004 0.120055 0.0514481 0.561311 0.5 +-0.0158705 0.161111 -0.00904539 0.277324 0.5 +-0.0239226 0.16684 -0.0101968 0.508747 0.5 +0.024391 0.115338 0.0336864 0.67038 0.5 +0.026456 0.0929171 0.0454329 0.614167 0.5 +-0.0516682 0.152149 0.0128837 0.544321 0.5 +-0.0264155 0.169752 -0.0102811 0.627161 0.5 +-0.0317772 0.169741 -0.00573949 0.698879 0.5 +-0.0335104 0.169764 -0.00293532 0.656074 0.5 +-0.0187772 0.186086 -0.0166294 0.258835 0.45789 +0.0238707 0.0929061 0.0469915 0.452807 0.5 +-0.0932424 0.12021 0.0392849 0.678476 0.5 +-0.0271731 0.174192 -0.00959576 0.745997 0.5 +-0.0273345 0.172717 -0.009826 0.798756 0.5 +-0.0166904 0.169787 -0.0155577 0.5154 0.5 +0.0104651 0.0444795 0.0447526 0.679355 0.5 +0.011492 0.0445292 0.0444785 0.676156 0.5 +0.0125747 0.0445985 0.0442752 0.670298 0.5 +0.0136703 0.0446634 0.0441067 0.657949 0.5 +0.0148253 0.0447411 0.0439981 0.661618 0.5 +0.0159735 0.0448127 0.0438765 0.667382 0.5 +0.0170625 0.0448711 0.043693 0.672454 0.5 +0.0180456 0.044911 0.0433906 0.51348 0.476371 +0.0189949 0.0449386 0.0430002 0.51603 0.5 +0.0198821 0.0449543 0.0425235 0.451818 0.453264 +0.0207685 0.0449736 0.0420523 0.574407 0.5 +0.0215827 0.0449804 0.0414892 0.57126 0.5 +0.0223863 0.0449715 0.0408911 0.498465 0.47676 +0.0232083 0.0449556 0.0403488 0.516532 0.475328 +0.0240034 0.0449703 0.0396985 0.633011 0.5 +0.0247856 0.0449735 0.0390757 0.628999 0.5 +0.0255017 0.0449453 0.0383425 0.576215 0.5 +0.0261947 0.0449183 0.0375802 0.551729 0.5 +0.0268698 0.0448976 0.0368034 0.680392 0.5 +0.0275411 0.044881 0.0360262 0.498167 0.5 +0.0281364 0.0448054 0.035097 0.459068 0.475571 +0.0287018 0.0447465 0.0341399 0.444157 0.457378 +0.0292606 0.0447502 0.0332372 0.429968 0.383082 +0.0297787 0.0446629 0.032196 0.426433 0.5 +0.0304194 0.0446109 0.0313507 0.582708 0.5 +0.0311169 0.0445787 0.030603 0.673059 0.5 +-0.0528036 0.129718 0.0341858 0.733074 0.5 +-0.052373 0.126911 0.0347775 0.675325 0.5 +-0.0668418 0.138273 0.0438208 0.72515 0.5 +-0.06623 0.13826 0.0429445 0.708816 0.5 +-0.0326084 0.171239 -0.00339173 0.661621 0.5 +0.0274866 0.0994982 0.0416519 0.593669 0.4205 +-0.0638846 0.103946 -0.0172176 0.566501 0.5 +-0.0351127 0.162221 -0.0139882 0.592307 0.5 +0.0413154 0.0451948 0.0296022 0.466284 0.5 +-0.0708102 0.086505 -0.0166182 0.446214 0.423847 +-0.0728007 0.0864364 -0.0158265 0.432629 0.430117 +-0.058796 0.0868581 -0.0207882 0.373354 0.5 +-0.0833705 0.0767799 0.0142875 0.67606 0.5 +-0.0629734 0.126755 -0.00855487 0.837337 0.5 +-0.0517979 0.0869425 -0.0216307 0.745641 0.5 +-0.071904 0.103673 -0.0126696 0.490238 0.480651 +-0.0308424 0.0930072 -0.0244625 0.686942 0.5 +-0.0298299 0.09304 -0.0247313 0.432254 0.434804 +-0.0508247 0.0941547 -0.0216781 0.818948 0.5 +-0.0468308 0.0941893 -0.021914 0.798817 0.5 +-0.0428369 0.0942645 -0.0226678 0.612308 0.5 +-0.0658054 0.0924099 -0.017991 0.458532 0.3905 +0.03375 0.0929319 0.0401542 0.669828 0.5 +0.0187381 0.119283 0.0342968 0.596003 0.5 +-0.051308 0.153569 0.0116824 0.575255 0.454579 +-0.0656926 0.125639 0.0489587 0.718404 0.5 +-0.0671096 0.125666 0.0504247 0.646954 0.5 +-0.02106 0.174206 -0.0148174 0.681443 0.434975 +-0.018574 0.174216 -0.0164984 0.7127 0.5 +-0.0370531 0.166795 0.000693639 0.625494 0.5 +-0.0462814 0.155049 0.00841735 0.588866 0.5 +-0.011981 0.180127 -0.0244833 0.650029 0.5 +-0.00120988 0.105335 0.044053 0.487533 0.459001 +-0.0197585 0.171251 -0.0147167 0.658549 0.5 +-0.0516597 0.0416063 0.0458402 0.562679 0.445188 +-0.0506214 0.0416531 0.0455899 0.55709 0.5 +-0.0497297 0.0416675 0.0451167 0.543725 0.5 +-0.0488285 0.0416917 0.0446681 0.696417 0.409158 +-0.0573508 0.121267 0.0398601 0.57533 0.5 +-0.062689 0.110949 0.0372761 0.817732 0.5 +-0.0554658 0.14959 0.0286413 0.566072 0.370232 +-0.0559672 0.149602 0.0296453 0.5382 0.428709 +-0.0436971 0.0419128 0.0432773 0.608165 0.5 +-0.0559297 0.13815 0.0313829 0.689792 0.417756 +-0.0945397 0.121475 0.0202819 0.640225 0.5 +-0.0297036 0.165315 -0.00626903 0.582616 0.474077 +-0.0203588 0.175699 -0.0155519 0.681071 0.5 +-0.0711733 0.128436 0.0516087 0.544901 0.5 +-0.0138948 0.17568 -0.0202542 0.729279 0.5 +-0.0362329 0.165306 -0.00162934 0.672901 0.5 +-0.0417786 0.156522 0.00614116 0.466436 0.5 +-0.0396922 0.156587 0.00568688 0.438555 0.402124 +0.0451024 0.091769 0.003186 0.553085 0.5 +-0.0433646 0.153626 0.00736711 0.705683 0.5 +-0.0484634 0.122511 0.0297787 0.584482 0.407125 +-0.0213253 0.0444675 0.0531428 0.702606 0.5 +-0.020287 0.0445184 0.0528933 0.702886 0.5 +-0.0193027 0.0445534 0.0525624 0.540672 0.466228 +-0.0183468 0.0445922 0.0521871 0.54742 0.5 +0.0390662 0.103279 0.0267541 0.638994 0.5 +-0.0653253 0.142516 0.0407395 0.654578 0.5 +-0.0930555 0.120208 0.0402916 0.564245 0.5 +-0.0523769 0.119775 0.034728 0.58342 0.5 +0.0456627 0.0890114 0.0111648 0.57067 0.5 +-0.0896003 0.111903 0.0133388 0.458791 0.5 +-0.0597218 0.118329 0.0399103 0.487392 0.473117 +-0.0424973 0.155091 0.0068798 0.652796 0.5 +0.0434376 0.0874432 0.0261531 0.625698 0.5 +-0.0578054 0.142438 0.0322424 0.733286 0.5 +0.0409317 0.0971197 -0.00479362 0.582408 0.5 +0.022067 0.0981797 0.0461337 0.44439 0.5 +-0.0129037 0.181603 -0.0240442 0.572694 0.424896 +0.0387224 0.1084 0.018173 0.709918 0.5 +-0.0538472 0.144686 0.025416 0.725929 0.5 +-0.0501252 0.138572 0.00341268 0.441585 0.5 +-0.0522249 0.152155 0.0138449 0.61518 0.5 +-0.0220745 0.169763 -0.0127977 0.643886 0.5 +-0.0162469 0.184587 -0.0200786 0.449889 0.5 +-0.0863798 0.100827 0.00341316 0.704215 0.5 +-0.0543637 0.116891 0.0353365 0.457649 0.5 +-0.0181983 0.18599 -0.0174024 0.320674 0.5 +-0.0332203 0.171246 -0.00251328 0.577372 0.5 +-0.0699145 0.135483 0.0481625 0.66752 0.5 +-0.059392 0.149673 0.0353015 0.520156 0.5 +-0.0548348 0.124111 0.0382711 0.598256 0.5 +0.0103735 0.0460953 0.0463477 0.586316 0.320426 +0.0109544 0.0459934 0.0454216 0.485304 0.5 +0.0116939 0.0459283 0.0447695 0.517517 0.5 +0.0125996 0.0459414 0.0443461 0.660009 0.5 +0.0136057 0.0460076 0.0440344 0.654355 0.5 +0.0146321 0.0460649 0.043757 0.934082 0.5 +0.0157166 0.0461353 0.0435597 0.935669 0.5 +0.0167377 0.0461846 0.0432665 0.664226 0.5 +0.0177513 0.0462342 0.0429632 0.514318 0.476719 +0.0187045 0.0462587 0.0425837 0.511328 0.5 +0.0196022 0.0462781 0.0421275 0.524784 0.5 +0.0205709 0.0463131 0.0417824 0.534176 0.5 +0.0214143 0.0463213 0.0412437 0.698876 0.5 +0.0222429 0.0463236 0.0406841 0.730493 0.5 +0.0230588 0.0463265 0.0401038 0.757708 0.5 +0.0238729 0.0463312 0.0395213 0.790188 0.5 +0.0247031 0.0463341 0.0389677 0.630986 0.5 +0.0255511 0.0463382 0.0384325 0.59227 0.5 +0.026348 0.0463448 0.037827 0.758652 0.5 +0.0271142 0.0463333 0.0371793 0.581676 0.5 +0.0278587 0.0463325 0.0365003 0.550259 0.47915 +0.0285634 0.0463012 0.0357516 0.504498 0.5 +0.0291872 0.0462618 0.034893 0.469212 0.370287 +0.0297504 0.0462054 0.0339396 0.438241 0.5 +0.0302609 0.0461225 0.032895 0.420331 0.349631 +0.0308648 0.0460986 0.0320207 0.577522 0.402023 +0.031559 0.0460718 0.0312637 0.668803 0.5 +0.0323835 0.0460752 0.0307026 0.757837 0.5 +-0.0557637 0.121264 0.0386516 0.540283 0.5 +-0.0590987 0.135299 0.0356206 0.682472 0.5 +-0.0599957 0.135288 0.0360766 0.652966 0.5 +-0.0606335 0.122654 0.0421622 0.581878 0.5 +0.0202304 0.105998 0.0417108 0.587589 0.5 +0.0401046 0.0466866 0.0313873 0.616267 0.5 +0.0412042 0.046738 0.0312341 0.567442 0.5 +0.0421124 0.0467315 0.0307997 0.537517 0.5 +0.0429421 0.0467386 0.030224 0.507304 0.5 +0.043756 0.0467626 0.0296361 0.476873 0.5 +0.0445157 0.0467554 0.0289718 0.471094 0.5 +0.0452769 0.0467388 0.0283148 0.472332 0.5 +0.0460481 0.046714 0.0276632 0.455967 0.5 +0.0468601 0.0467385 0.0270828 0.446496 0.5 +0.0476236 0.0467222 0.0264254 0.394148 0.5 +0.048317 0.0466984 0.0256626 0.383333 0.5 +0.0489576 0.0466396 0.0248167 0.392111 0.5 +0.0495971 0.0465817 0.0239661 0.372306 0.401409 +0.0503991 0.0466746 0.0233055 0.342211 0.398387 +0.0508787 0.0465582 0.0223162 0.312894 0.5 +0.05138 0.0464792 0.0212617 0.29989 0.456334 +0.0518495 0.0464359 0.0201911 0.300828 0.5 +-0.0353516 0.166776 -0.00214363 0.636458 0.5 +-0.0849284 0.107666 0.0223625 0.657603 0.466781 +-0.00751389 0.102333 0.0437439 0.283161 0.5 +-0.0543105 0.149562 0.0267072 0.500407 0.5 +-0.0686541 0.12565 0.0517171 0.571893 0.5 +-0.0151953 0.168341 -0.0151527 0.483809 0.458656 +-0.0177411 0.17422 -0.017052 0.716289 0.5 +0.0210633 0.106016 0.0411627 0.592408 0.5 +-0.011641 0.172783 -0.0205328 0.69267 0.5 +-0.0455099 0.155064 0.0077969 0.582114 0.460528 +-0.0198225 0.168315 -0.0130587 0.502037 0.482956 +-0.0629684 0.139576 0.0370615 0.684331 0.5 +0.0217664 0.106013 0.0404033 0.611061 0.364477 +-0.0520295 0.0429585 0.0453289 0.55605 0.437524 +-0.0510681 0.0429687 0.0449412 0.526246 0.5 +-0.0501084 0.0429877 0.0445637 0.519736 0.5 +-0.0491293 0.0430398 0.0442413 0.64301 0.5 +0.0225195 0.106011 0.0397482 0.638213 0.5 +-0.0225871 0.168294 -0.0117855 0.627222 0.5 +-0.0554928 0.148133 0.0286364 0.613848 0.5 +-0.0589342 0.12267 0.0410891 0.594615 0.5 +-0.0439305 0.0432632 0.0429545 0.747528 0.393714 +0.0245524 0.106048 0.0391612 0.55561 0.406804 +-0.0634859 0.146784 0.0381458 0.484853 0.484693 +-0.0471905 0.156504 0.00887867 0.624756 0.5 +-0.0306082 0.165302 -0.00581873 0.578382 0.5 +-0.0171047 0.17569 -0.0178772 0.727918 0.5 +-0.0110217 0.175722 -0.0231509 0.688657 0.5 +-0.0116954 0.175688 -0.0223293 0.702277 0.5 +-0.0483961 0.150684 0.0105827 0.607588 0.47378 +-0.0620233 0.159983 -0.0376027 0.4251 0.468719 +-0.0283728 0.156641 -0.000811787 0.357399 0.365603 +0.0281029 0.0968693 0.0425418 0.703509 0.419891 +-0.0633963 0.145356 0.0382744 0.587451 0.464515 +0.0255102 0.106068 0.0387825 0.557866 0.401891 +0.0264539 0.106068 0.0383874 0.544736 0.5 +0.0273536 0.106086 0.0379553 0.559205 0.414163 +-0.018702 0.0459339 0.0516744 0.470585 0.5 +0.0282036 0.106111 0.0374341 0.675601 0.5 +0.0290261 0.106116 0.036871 0.713535 0.5 +-0.0633716 0.143922 0.0382956 0.592506 0.5 +-0.0606527 0.151084 0.0352378 0.458713 0.46522 +-0.0553782 0.151032 0.0287496 0.456156 0.5 +-0.0858054 0.102155 0.00239755 0.467244 0.471866 +-0.0476365 0.150675 0.00992423 0.605341 0.5 +-0.0468871 0.150669 0.00925072 0.730514 0.5 +-0.0273383 0.17123 -0.0098418 0.649032 0.5 +-0.0119937 0.164096 -0.013967 0.273969 0.405877 +0.0413723 0.0971667 -0.00382246 0.503773 0.5 +-0.033844 0.171255 -0.00164046 0.468942 0.5 +-0.0570356 0.142438 0.0315884 0.719491 0.5 +-0.0181795 0.183113 -0.0176247 0.464403 0.5 +-0.014344 0.183095 -0.0226028 0.515173 0.5 +-0.0130965 0.169821 -0.0173751 0.479448 0.47824 +-0.0175848 0.169785 -0.0150947 0.520424 0.5 +-0.0198636 0.184564 -0.0147357 0.296334 0.5 +-0.0156627 0.184575 -0.0209705 0.452509 0.5 +-0.013113 0.184484 -0.0260544 0.309641 0.5 +-0.0341025 0.169759 -0.00204136 0.648452 0.5 +-0.0232213 0.183101 -0.0108227 0.31077 0.5 +0.0375934 0.102015 0.0299178 0.699987 0.5 +0.0298444 0.106115 0.0363002 0.72383 0.5 +0.0305908 0.106106 0.0356297 0.72648 0.5 +0.0313444 0.106098 0.0349666 0.733788 0.5 +0.0109534 0.0475021 0.0472035 0.540633 0.5 +0.011631 0.0474937 0.0464252 0.507166 0.5 +0.0125029 0.0475354 0.045933 0.515449 0.5 +0.0133395 0.0475307 0.0453837 0.508396 0.457086 +0.0141656 0.0475343 0.0448184 0.497119 0.5 +0.0149498 0.0475024 0.0442108 0.507381 0.46967 +0.0158441 0.0475203 0.043749 0.523303 0.469685 +0.0166876 0.0475243 0.0432195 0.514561 0.5 +0.0175786 0.0475536 0.0427473 0.661865 0.458586 +0.0184606 0.0475775 0.0422564 0.67792 0.5 +0.0193551 0.0475975 0.0417872 0.536541 0.481019 +0.0203005 0.047637 0.041402 0.542841 0.447348 +0.0212154 0.0476501 0.0409677 0.716804 0.5 +0.0220994 0.0476682 0.0404859 0.73533 0.5 +0.0229251 0.0476731 0.039919 0.594924 0.483893 +0.0237846 0.0476926 0.0394013 0.619299 0.5 +0.0246905 0.0477085 0.0389599 0.629938 0.5 +0.0255945 0.0477251 0.0385093 0.516124 0.5 +0.0264669 0.0477487 0.0380114 0.620511 0.5 +0.0272987 0.047751 0.0374572 0.634667 0.5 +0.0281109 0.0477624 0.0368744 0.615006 0.5 +0.0288766 0.0477511 0.0362254 0.562827 0.5 +0.0295798 0.047722 0.0354768 0.518344 0.5 +0.0301953 0.0476864 0.0346108 0.47429 0.448934 +0.0307633 0.0476275 0.0336614 0.41718 0.447932 +0.0313304 0.0475675 0.0327114 0.539714 0.5 +0.0319703 0.0475137 0.0318758 0.624992 0.5 +0.0327662 0.0475454 0.0312717 0.711629 0.5 +0.0320567 0.106099 0.0342281 0.726663 0.5 +-0.0640141 0.128346 0.0443555 0.712215 0.420475 +-0.0634251 0.128316 0.0434644 0.707808 0.5 +-0.062835 0.128322 0.0425151 0.721931 0.5 +0.0326969 0.10609 0.0333845 0.720228 0.5 +0.033372 0.106071 0.0326127 0.712642 0.5 +0.0418096 0.0482673 0.0320498 0.635342 0.5 +0.0427154 0.0482477 0.0316879 0.507401 0.474145 +0.0435987 0.0482711 0.0311843 0.561832 0.5 +0.0444321 0.0482656 0.0306384 0.554948 0.5 +0.0452145 0.0482364 0.0300085 0.541226 0.5 +0.0460187 0.0482649 0.029417 0.521603 0.5 +0.0467715 0.0482711 0.0287479 0.502514 0.5 +0.0475389 0.0482604 0.0280949 0.506209 0.5 +0.0482658 0.0482112 0.0273759 0.498596 0.5 +0.0490097 0.0482239 0.0267018 0.495426 0.5 +0.0497106 0.0482066 0.0259506 0.48379 0.5 +0.050389 0.0482108 0.0251806 0.416499 0.5 +0.0510319 0.0481609 0.0243415 0.431681 0.383346 +0.0517118 0.048146 0.0235716 0.398765 0.5 +0.0522449 0.0480372 0.0225432 0.376 0.453234 +0.0528302 0.048039 0.0216552 0.333334 0.5 +0.0395831 0.0953666 0.0310696 0.702818 0.5 +-0.0527869 0.124083 0.0359567 0.557303 0.5 +-0.0571323 0.14819 0.0314465 0.602709 0.5 +-0.0188778 0.168283 -0.0134663 0.496373 0.5 +0.0176998 0.103348 0.0450658 0.583624 0.5 +0.0271211 0.103444 0.039376 0.703224 0.5 +0.00749812 0.109597 0.0408218 0.606956 0.474505 +-0.0265586 0.171236 -0.0104749 0.631851 0.5 +-0.0169066 0.174228 -0.0176024 0.719256 0.5 +-0.0419337 0.160883 0.00416203 0.486055 0.5 +-0.0434567 0.155083 0.00724724 0.51722 0.5 +-0.0444935 0.155066 0.00750552 0.54859 0.470048 +0.0154861 0.0927165 0.0506449 0.614154 0.5 +0.0340178 0.106064 0.0317678 0.711304 0.5 +-0.0524783 0.0442541 0.0446515 0.395186 0.5 +0.0346837 0.106039 0.030986 0.731897 0.5 +0.0353616 0.106017 0.0302164 0.718782 0.5 +0.0360105 0.106014 0.0293761 0.688053 0.5 +0.0223261 0.116663 0.0342169 0.536392 0.5 +-0.0553627 0.139574 0.0304759 0.622521 0.5 +-0.0621593 0.13389 0.0382274 0.603354 0.5 +-0.0592645 0.138135 0.0336221 0.570477 0.5 +0.0366723 0.106016 0.0285439 0.672162 0.5 +0.0373363 0.105992 0.0277645 0.657922 0.5 +-0.0563111 0.122698 0.0396267 0.564901 0.5 +-0.0464295 0.156494 0.00819518 0.592602 0.420153 +-0.0314988 0.165308 -0.00534483 0.574072 0.5 +-0.0332166 0.165305 -0.0043102 0.581722 0.5 +-0.013157 0.175712 -0.0209577 0.737216 0.5 +0.0422452 0.0986357 -0.000817871 0.57613 0.5 +-0.0724396 0.129821 0.051541 0.537093 0.5 +0.037882 0.105959 0.026802 0.637669 0.5 +-0.0147714 0.163994 -0.0109737 0.351911 0.5 +-0.0275574 0.156658 -0.00139783 0.355665 0.5 +-0.0498016 0.128288 0.0314623 0.668899 0.5 +-0.06715 0.145376 0.0416405 0.613131 0.5 +-0.0328596 0.153633 -0.000344229 0.250685 0.443663 +-0.0293172 0.172724 -0.00740528 0.710403 0.5 +-0.0660181 0.127026 0.048508 0.718207 0.5 +0.0405341 0.105626 0.00416435 0.637174 0.5 +-0.0543933 0.14384 0.0284354 0.663837 0.5 +-0.0389566 0.155104 0.00497717 0.649157 0.5 +-0.0685902 0.112767 0.0465657 0.276218 0.438641 +-0.0185636 0.161122 -0.00592394 0.350317 0.5 +-0.0193913 0.161115 -0.00536021 0.357424 0.5 +-0.0201769 0.16108 -0.00474531 0.414618 0.5 +-0.0461015 0.150679 0.0086365 0.716172 0.5 +-0.0427476 0.159417 0.00474491 0.650196 0.5 +-0.0201931 0.18164 -0.0152257 0.455842 0.5 +-0.0162281 0.181624 -0.0200739 0.671733 0.5 +-0.0123081 0.181626 -0.0249909 0.450315 0.485897 +-0.0675811 0.143978 0.0427672 0.63967 0.5 +-0.0176301 0.183064 -0.0184359 0.48931 0.438208 +0.0296649 0.110072 0.0343033 0.705067 0.5 +-0.0139903 0.169817 -0.0169155 0.501006 0.5 +-0.0184806 0.169783 -0.0146335 0.518901 0.485232 +-0.0229677 0.169763 -0.0123298 0.651594 0.5 +-0.0272508 0.169746 -0.00972716 0.635587 0.5 +-0.0323986 0.169744 -0.00487272 0.67195 0.5 +-0.0387576 0.152152 0.00343994 0.51948 0.5 +-0.0379926 0.15214 0.00278328 0.436739 0.5 +-0.021763 0.159801 -0.0034487 0.28859 0.383045 +0.0407791 0.105635 0.00716484 0.657531 0.5 +0.00990869 0.048971 0.0492516 0.579365 0.5 +0.0106756 0.0489592 0.0485841 0.586443 0.5 +0.0114179 0.0489704 0.047894 0.590338 0.5 +0.0122811 0.0490196 0.0473922 0.589102 0.5 +0.0130474 0.0490028 0.046739 0.572969 0.5 +0.0138699 0.049008 0.0461763 0.554112 0.5 +0.0147035 0.0490065 0.0456198 0.530683 0.5 +0.0155215 0.0490175 0.0450471 0.512857 0.5 +0.0163088 0.048977 0.0444188 0.504873 0.324337 +0.0171685 0.0490344 0.0439112 0.487928 0.5 +0.0179624 0.0489942 0.0433049 0.490574 0.445256 +0.0187298 0.0489829 0.0426596 0.499195 0.5 +0.0194996 0.0489742 0.0420155 0.517201 0.5 +0.0203907 0.0490438 0.0415331 0.529763 0.5 +0.0212843 0.0490624 0.0410711 0.559296 0.5 +0.0221626 0.0490425 0.0405889 0.708076 0.5 +0.0230336 0.049071 0.0400904 0.566338 0.5 +0.0238579 0.0490757 0.0395236 0.60819 0.5 +0.0247439 0.0490967 0.0390469 0.639548 0.5 +0.0256959 0.0491338 0.0386649 0.528008 0.402812 +0.0265887 0.0491527 0.0382012 0.513091 0.5 +0.0274263 0.0491525 0.0376576 0.520904 0.444497 +0.028309 0.049176 0.0371723 0.524524 0.456529 +0.0291455 0.0491758 0.0366259 0.62394 0.397504 +0.0299119 0.0491593 0.0359714 0.57466 0.448492 +0.030569 0.0491561 0.035175 0.517736 0.5 +0.0311853 0.0491232 0.0343139 0.471507 0.357945 +0.0317849 0.0490447 0.0333888 0.445093 0.5 +0.0324736 0.0490215 0.0326282 0.604326 0.5 +0.0386899 0.0941002 0.0332667 0.714211 0.5 +-0.0598164 0.122657 0.0415831 0.482468 0.482473 +-0.0610259 0.126912 0.0416133 0.698375 0.5 +-0.0601974 0.126918 0.041055 0.672267 0.5 +-0.0593157 0.126918 0.0405689 0.666294 0.5 +-0.0654105 0.124234 0.0493774 0.703443 0.5 +0.0256389 0.0929167 0.0460121 0.592528 0.5 +0.00655625 0.109588 0.0412446 0.601312 0.41325 +0.0430843 0.0496743 0.0322331 0.625487 0.5 +0.0440424 0.0496996 0.0318585 0.500531 0.5 +0.0449219 0.0497223 0.0313654 0.593248 0.5 +0.0457541 0.0497206 0.0308161 0.581952 0.5 +0.0465277 0.0497043 0.0301725 0.557314 0.5 +0.0473251 0.0497353 0.0295737 0.571782 0.5 +0.048051 0.0496945 0.0288529 0.572451 0.5 +0.048793 0.049707 0.0281736 0.572583 0.5 +0.0495003 0.0496818 0.0274333 0.567266 0.5 +0.0502478 0.0496891 0.0267596 0.530478 0.403826 +0.0509184 0.0496314 0.0259504 0.510483 0.5 +0.0515991 0.0496316 0.0251833 0.494086 0.5 +0.0522529 0.049588 0.0243549 0.485051 0.420697 +0.052927 0.0495927 0.0235839 0.480122 0.5 +0.0535299 0.049514 0.0226619 0.418448 0.5 +0.0541744 0.0495318 0.0218692 0.396424 0.5 +-0.019247 0.158526 -0.00845424 0.231424 0.5 +0.00949301 0.118213 -0.015379 0.54369 0.457314 +-0.0205565 0.183109 -0.0139659 0.422183 0.5 +0.0272037 0.100805 0.0412523 0.697984 0.5 +0.0262764 0.100811 0.0416679 0.715624 0.412564 +0.0452514 0.0931962 0.00916141 0.59003 0.5 +-0.0163316 0.166866 -0.0132843 0.551261 0.5 +-0.056116 0.131133 0.036427 0.662684 0.5 +-0.0143864 0.174216 -0.0192271 0.72146 0.5 +-0.0168438 0.180138 -0.0192059 0.715668 0.5 +0.0409886 0.104212 0.016155 0.698301 0.5 +0.0305338 0.0929359 0.042541 0.641244 0.5 +0.0273486 0.110085 0.0362063 0.62792 0.5 +-0.0532837 0.0454354 0.0434394 0.25393 0.5 +0.0437374 0.0902563 -0.00280325 0.56552 0.5 +0.0369901 0.111103 0.00416682 0.635779 0.477827 +0.0208841 0.115302 0.0356376 0.522501 0.5 +0.0199488 0.115322 0.0360728 0.518624 0.5 +-0.0505409 0.146308 0.012527 0.531392 0.5 +-0.0546722 0.139567 0.0297056 0.607089 0.5 +-0.054069 0.139552 0.0288194 0.587991 0.5 +-0.0655581 0.135384 0.0421104 0.68071 0.5 +-0.0578223 0.12834 0.0392194 0.693295 0.5 +-0.0670308 0.141141 0.0435296 0.686065 0.5 +-0.0625718 0.1468 0.0377209 0.485923 0.447506 +-0.0457713 0.156483 0.00739285 0.576911 0.5 +-0.0450603 0.156487 0.00667449 0.717169 0.407104 +-0.0348542 0.165303 -0.00316457 0.552101 0.5 +-0.0104302 0.175693 -0.0238578 0.621392 0.5 +0.0432299 0.0944972 0.0241641 0.51006 0.477899 +-0.0935142 0.126862 0.0142561 0.728676 0.5 +-0.0213985 0.181639 -0.0134576 0.512537 0.5 +-0.0262045 0.163884 -0.00647025 0.546076 0.486591 +-0.0370175 0.163827 -0.00102436 0.680811 0.5 +-0.0350102 0.158094 0.00367693 0.445666 0.44081 +-0.0340535 0.158097 0.00328753 0.44202 0.463031 +-0.0163209 0.175704 -0.0185048 0.721969 0.5 +-0.0252429 0.163867 -0.00684922 0.718938 0.5 +-0.0420636 0.159404 0.00394669 0.663986 0.432374 +-0.037536 0.159586 0.00182669 0.440144 0.5 +-0.0276413 0.159598 0.000270855 0.431301 0.5 +-0.0488679 0.135513 0.00441971 0.424845 0.5 +-0.0739006 0.162422 -0.0359639 0.460628 0.5 +-0.0113677 0.180126 -0.0253581 0.44526 0.485074 +-0.0372275 0.160948 0.000450465 0.637357 0.5 +-0.0425799 0.160887 0.00499665 0.513274 0.5 +-0.0239275 0.1816 -0.0100979 0.295166 0.5 +-0.0195581 0.181635 -0.0160858 0.503714 0.469175 +-0.0155327 0.181625 -0.0208343 0.656852 0.5 +0.044722 0.0945895 0.0131657 0.5599 0.397696 +-0.0218128 0.183092 -0.0122978 0.339988 0.5 +-0.0169176 0.183111 -0.0193016 0.54602 0.5 +-0.0497324 0.138579 0.00441928 0.415021 0.462793 +-0.0289938 0.16114 -0.00164375 0.537982 0.323001 +-0.0232543 0.181611 -0.01087 0.344815 0.5 +-0.0467665 0.152145 0.00944802 0.577316 0.478915 +-0.0451779 0.152141 0.00822921 0.729075 0.5 +-0.0419573 0.15213 0.00584722 0.622913 0.5 +-0.0581231 0.149655 0.0336366 0.489649 0.5 +-0.0586918 0.149676 0.0345486 0.521004 0.5 +0.0318584 0.0981802 0.0392129 0.7295 0.5 +-0.0323351 0.172733 -0.00297212 0.570759 0.5 +0.0103976 0.0505032 0.04997 0.599245 0.5 +0.0112751 0.0505364 0.0494832 0.599216 0.5 +0.0120506 0.0505153 0.0488388 0.600033 0.5 +0.0128141 0.0504969 0.0481838 0.604135 0.5 +0.0135718 0.0504901 0.0475195 0.592153 0.5 +0.0143367 0.0504741 0.0468665 0.583449 0.5 +0.0151599 0.050478 0.0463014 0.566751 0.5 +0.0160439 0.0505074 0.0458237 0.705183 0.5 +0.0168973 0.0504721 0.0453108 0.679926 0.5 +0.0178346 0.0505132 0.0449253 0.647628 0.324331 +0.0187703 0.0504962 0.0444745 0.494891 0.293881 +0.0196134 0.0505877 0.0439573 0.455471 0.5 +0.0203519 0.0506032 0.0432764 0.446413 0.423296 +0.0209931 0.0505428 0.042434 0.507052 0.5 +0.0217583 0.0505253 0.0417779 0.536967 0.5 +0.0226208 0.0505695 0.0412719 0.563568 0.5 +0.0234524 0.0505688 0.0407158 0.599734 0.5 +0.0241621 0.0505303 0.0399762 0.635463 0.446542 +0.024912 0.0505255 0.0392969 0.634142 0.5 +0.0258633 0.0505634 0.0389033 0.651658 0.398991 +0.0268091 0.0506065 0.038521 0.651178 0.5 +0.027653 0.0506012 0.0379885 0.648583 0.5 +0.028537 0.0506236 0.0375191 0.668191 0.405917 +0.0294478 0.0506302 0.0370841 0.671735 0.5 +0.0302802 0.0506319 0.0365295 0.635971 0.5 +0.0309795 0.0506032 0.0357766 0.587296 0.5 +0.0315994 0.0505647 0.0349136 0.524989 0.425869 +0.0322304 0.0505255 0.0340589 0.485762 0.5 +0.032875 0.0504741 0.0332188 0.584822 0.5 +0.0336067 0.0504819 0.0325279 0.639672 0.5 +-0.0619704 0.118373 0.041992 0.537311 0.5 +0.0239371 0.103424 0.0418106 0.654526 0.5 +-0.0642323 0.124186 0.0475964 0.680772 0.5 +-0.0647985 0.124215 0.0485 0.694819 0.5 +-0.0630437 0.12273 0.0457647 0.628625 0.5 +-0.0940023 0.125512 0.016258 0.545418 0.5 +-0.0429798 0.150656 0.00610371 0.558267 0.5 +0.0226682 0.115322 0.0347114 0.659324 0.5 +0.0443268 0.0511334 0.0322609 0.627671 0.5 +0.0452831 0.0511563 0.0319003 0.493026 0.5 +0.0461177 0.0511569 0.0313544 0.569755 0.5 +0.0469336 0.0511672 0.030779 0.574277 0.5 +0.0477122 0.0511499 0.0301456 0.589048 0.5 +0.0484686 0.0511467 0.0294828 0.609407 0.416901 +0.0492058 0.0511603 0.0287949 0.610381 0.5 +0.0499493 0.051169 0.0281186 0.605146 0.5 +0.0506886 0.0511228 0.0274131 0.572454 0.5 +0.0514024 0.0510939 0.0266785 0.555568 0.5 +0.0521064 0.0510719 0.0259326 0.529769 0.422251 +0.0527588 0.0510331 0.0250995 0.507251 0.5 +0.0534457 0.0510274 0.0243391 0.517717 0.5 +0.0541184 0.0510309 0.0235647 0.486213 0.446085 +0.0547677 0.0509942 0.0227339 0.474964 0.5 +0.055409 0.0509629 0.0218922 0.429553 0.5 +-0.0658844 0.114191 0.045149 0.212624 0.5 +0.0420568 0.0986443 0.0231563 0.635271 0.5 +-0.0151083 0.184586 -0.0219884 0.370699 0.457183 +-0.0124071 0.172769 -0.0198823 0.716034 0.5 +0.0400088 0.107038 0.00721094 0.664671 0.5 +-0.0791963 0.108632 0.0349508 0.434701 0.448225 +-0.0945263 0.121474 0.0192827 0.616111 0.5 +-0.0600908 0.115373 0.0375616 0.564268 0.5 +-0.049306 0.147765 0.0110054 0.699712 0.5 +-0.0113059 0.174226 -0.0217772 0.685602 0.5 +-0.0652787 0.173897 -0.0604957 0.347203 0.407042 +-0.0175993 0.15966 -0.00802789 0.205513 0.5 +-0.0304269 0.169744 -0.0072967 0.759913 0.5 +-0.0864283 0.0954013 0.00141653 0.498028 0.365039 +-0.0557216 0.125528 0.0387388 0.674305 0.5 +-0.0685912 0.131247 0.0482807 0.710428 0.5 +0.0246691 0.103387 0.0411037 0.663769 0.5 +-0.0632488 0.167828 -0.0435907 0.739922 0.5 +-0.0314998 0.155167 -8.72409e-05 0.381623 0.5 +0.0343966 0.0968432 0.0376227 0.730364 0.5 +0.0336609 0.0968599 0.0382997 0.73031 0.5 +0.0319556 0.0942571 0.0410831 0.686626 0.5 +-0.0201447 0.166816 -0.0117812 0.491964 0.5 +-0.0740333 0.13404 0.0510058 0.583153 0.5 +-0.0677529 0.141137 0.0442717 0.675637 0.5 +-0.0643328 0.146767 0.0386771 0.606181 0.5 +-0.0651408 0.146773 0.0392721 0.631716 0.5 +-0.0441588 0.156514 0.00623469 0.697286 0.5 +-0.0368214 0.16531 -0.000729186 0.661101 0.5 +-0.0875442 0.11045 0.0133403 0.461011 0.5 +0.0435656 0.0945094 0.0231538 0.426685 0.5 +-0.0678748 0.125664 0.0510849 0.608198 0.5 +-0.0233818 0.177171 -0.0128784 0.609703 0.481476 +-0.0113718 0.177173 -0.0236196 0.695093 0.5 +-0.0188175 0.159674 -0.00630165 0.205895 0.383224 +-0.0673807 0.115762 0.049991 0.347938 0.5 +-0.0223477 0.16248 -0.006155 0.581597 0.5 +-0.0291964 0.162421 -0.00376774 0.505948 0.5 +-0.0376923 0.162356 -0.000243841 0.524576 0.5 +-0.0674627 0.138295 0.0446438 0.717512 0.5 +-0.0368205 0.162344 -0.00074381 0.530298 0.5 +-0.0151964 0.178666 -0.0203777 0.730386 0.5 +-0.0161182 0.180144 -0.0199393 0.729454 0.5 +-0.0108703 0.180136 -0.0264173 0.385718 0.402539 +-0.0381375 0.160902 0.00087141 0.655523 0.5 +-0.0399375 0.150681 0.00347523 0.424628 0.5 +-0.0214383 0.162534 -0.00657802 0.562199 0.5 +-0.0397849 0.155107 0.00553982 0.680696 0.5 +-0.0163529 0.16023 -0.0109161 0.279911 0.5 +0.0436616 0.0987354 0.0121603 0.571878 0.484439 +-0.0211614 0.183089 -0.0130948 0.407946 0.5 +-0.0355502 0.175589 -0.0109785 0.285278 0.462769 +-0.089612 0.139257 0.0251846 0.677836 0.5 +-0.0491927 0.149222 0.0111539 0.58413 0.5 +-0.0345694 0.163827 -0.00275159 0.543585 0.5 +0.0152366 0.121915 0.0327966 0.59086 0.455802 +0.0156704 0.0936059 -0.0251021 0.546403 0.5 +0.0431201 0.0959054 0.0231686 0.520155 0.480826 +0.0452857 0.0889846 0.0161633 0.534567 0.5 +0.00963825 0.115048 0.0386641 0.6485 0.41121 +-0.0716516 0.139715 0.0474384 0.617131 0.5 +0.0100829 0.0519948 0.0512903 0.484661 0.466119 +0.01097 0.0520216 0.0508135 0.543245 0.5 +0.0117499 0.0519912 0.0501875 0.551033 0.5 +0.0125099 0.0519837 0.0495237 0.554545 0.5 +0.0132667 0.0519749 0.0488584 0.567122 0.5 +0.0140142 0.0519753 0.0481823 0.559222 0.5 +0.0147704 0.0519654 0.0475176 0.563019 0.5 +0.0156112 0.0519525 0.0469795 0.72867 0.5 +0.0165747 0.0519808 0.0466207 0.761818 0.5 +0.0176026 0.0520233 0.0463575 0.769478 0.5 +0.0186389 0.0520546 0.0461071 0.5775 0.5 +0.0196453 0.0521206 0.045827 0.548493 0.46876 +0.020413 0.0521197 0.0451417 0.512416 0.5 +0.0210892 0.0521114 0.044364 0.483061 0.5 +0.0217093 0.0520814 0.0434982 0.511359 0.5 +0.0224682 0.0520683 0.0428376 0.55089 0.5 +0.0231695 0.0520348 0.0420858 0.567283 0.5 +0.0239006 0.0520481 0.0413924 0.632486 0.418358 +0.0245199 0.0520168 0.0405174 0.630812 0.5 +0.0253529 0.0520143 0.0399629 0.668738 0.5 +0.0262829 0.0520004 0.03955 0.699597 0.386753 +0.0271955 0.0520724 0.0391174 0.698711 0.404471 +0.0279356 0.0520839 0.0384098 0.695929 0.5 +0.0288613 0.0520696 0.0379853 0.700093 0.397704 +0.0298168 0.052105 0.0376191 0.668452 0.395185 +0.0306541 0.0520995 0.0370911 0.614895 0.5 +0.0313568 0.052068 0.0363454 0.588324 0.444224 +0.0319954 0.0520213 0.0354999 0.533471 0.5 +0.0326336 0.0519746 0.0346532 0.495947 0.5 +0.0333394 0.0519958 0.0339463 0.487759 0.425981 +0.0339979 0.0519394 0.0331121 0.596191 0.5 +0.0346832 0.0519191 0.0323364 0.686246 0.5 +0.0322341 0.112712 0.0291688 0.690065 0.5 +-0.0645764 0.139638 0.0400104 0.63836 0.5 +-0.0640931 0.122778 0.0478095 0.660896 0.406546 +-0.063571 0.122754 0.0468224 0.62634 0.5 +-0.089161 0.137877 0.0251937 0.656487 0.5 +-0.0552077 0.119827 0.0376818 0.502204 0.44785 +-0.0532978 0.147774 0.0234078 0.555982 0.483572 +-0.0833424 0.104748 -0.00163012 0.335286 0.385343 +0.0454513 0.052559 0.0321398 0.579408 0.5 +0.0464062 0.0525822 0.0317783 0.470433 0.5 +0.047238 0.0525837 0.0312359 0.558389 0.5 +0.0480167 0.0525694 0.0306027 0.575549 0.5 +0.048778 0.0525636 0.0299433 0.600147 0.429808 +0.0495572 0.0525985 0.0293193 0.61622 0.5 +0.0503401 0.0525815 0.0286903 0.62117 0.5 +0.0511643 0.0525875 0.0281258 0.603041 0.5 +0.0519418 0.0525693 0.0274887 0.564783 0.5 +0.0526979 0.0525681 0.0268245 0.541741 0.5 +0.053394 0.0525543 0.0260735 0.542972 0.5 +0.0540378 0.0525213 0.0252382 0.521068 0.5 +0.0546919 0.0524816 0.0244106 0.498829 0.5 +0.0553581 0.0524903 0.0236336 0.493666 0.382632 +0.0559546 0.0524347 0.0227151 0.476598 0.5 +0.0565327 0.0523952 0.0217798 0.45455 0.5 +0.0375235 0.0968947 -0.00979522 0.723601 0.5 +-0.0535442 0.129727 0.0348674 0.73091 0.5 +-0.0162539 0.171251 -0.016682 0.533973 0.48423 +-0.0542914 0.129735 0.0355428 0.720059 0.5 +0.0353682 0.103387 0.0319873 0.722366 0.5 +-0.0663764 0.12565 0.049733 0.678235 0.5 +-0.0492044 0.143127 0.00539863 0.376445 0.5 +-0.00703497 0.101085 0.0445106 0.167427 0.5 +-0.0521465 0.121207 0.0350569 0.585208 0.5 +-0.092911 0.118706 0.0113064 0.429194 0.5 +-0.00908512 0.169637 -0.0217386 0.29601 0.455078 +-0.043282 0.147753 0.00390043 0.245798 0.5 +-0.0235527 0.156826 -0.00518035 0.152235 0.402088 +-0.0850289 0.111596 0.00326083 0.419618 0.5 +-0.0467733 0.12389 0.0269319 0.596081 0.359262 +-0.0516467 0.0481272 0.0388737 0.167219 0.5 +-0.0288706 0.171229 -0.00855169 0.808941 0.5 +-0.0306651 0.155159 -0.000638202 0.384701 0.5 +-0.0299153 0.155169 -0.001314 0.268521 0.5 +-0.0867205 0.102198 0.00542391 0.472611 0.322379 +-0.0659345 0.109414 0.0377967 0.445378 0.448116 +-0.0731223 0.134062 0.0505767 0.571046 0.474461 +-0.0722303 0.134063 0.0500963 0.484212 0.5 +0.0146525 0.0927004 0.0511905 0.505253 0.5 +0.0230909 0.103393 0.0423419 0.645952 0.5 +-0.0687416 0.11428 0.0497375 0.35874 0.5 +-0.0406606 0.156554 0.00601794 0.433452 0.5 +-0.0492183 0.150688 0.0111503 0.577398 0.458704 +0.0439268 0.0945301 0.0211547 0.496745 0.46093 +-0.0291346 0.177171 -0.00534178 0.371295 0.5 +-0.0226614 0.177177 -0.0135831 0.63506 0.474355 +-0.0134729 0.17718 -0.0214028 0.736069 0.5 +0.03817 0.0983612 -0.0088053 0.711521 0.5 +-0.0278003 0.174225 -0.00868668 0.714313 0.5 +-0.0225444 0.178667 -0.0133919 0.580947 0.5 +-0.0144529 0.178665 -0.0210547 0.728523 0.5 +0.0357067 0.0981492 -0.0118335 0.61591 0.5 +-0.0384539 0.162349 0.000413916 0.629249 0.5 +-0.0241436 0.180147 -0.0104229 0.445709 0.5 +-0.0196754 0.180147 -0.0162801 0.614204 0.5 +-0.0153829 0.18014 -0.0206255 0.730905 0.5 +-0.0219245 0.161037 -0.00376903 0.496117 0.5 +-0.0139638 0.180133 -0.0220777 0.732074 0.5 +-0.0453102 0.150665 0.00801555 0.709601 0.5 +-0.0377749 0.150712 0.00133662 0.293977 0.5 +-0.0255881 0.169753 -0.0108444 0.629758 0.5 +-0.0124184 0.175705 -0.0216387 0.729205 0.5 +-0.0680504 0.12005 0.0525411 0.680294 0.5 +-0.0169241 0.181626 -0.0193127 0.664501 0.5 +-0.0182252 0.159192 -0.00975232 0.261372 0.5 +-0.0477527 0.149202 0.00972608 0.567714 0.484645 +-0.0618749 0.161566 -0.0365945 0.463165 0.5 +-0.0523357 0.136679 0.027812 0.647485 0.5 +0.0387891 0.096727 0.0316453 0.712318 0.5 +-0.0894234 0.0956355 0.01542 0.634183 0.5 +-0.045027 0.168395 -0.00690925 0.367333 0.368704 +-0.0475977 0.15214 0.0100027 0.612343 0.468997 +0.0457823 0.0862054 0.00618349 0.55862 0.4172 +-0.0281399 0.0917982 -0.0286003 0.288673 0.5 +0.0384784 0.105492 -0.00082855 0.59312 0.5 +0.0113635 0.0534706 0.0514016 0.530428 0.5 +0.012127 0.0534588 0.0507501 0.532724 0.5 +0.0128784 0.0534523 0.0500797 0.547414 0.5 +0.0136405 0.0534411 0.0494225 0.538455 0.5 +0.014348 0.0534071 0.0486823 0.536669 0.5 +0.0151695 0.0534137 0.0481113 0.6723 0.5 +0.0161135 0.0534638 0.0477167 0.712266 0.5 +0.0171483 0.0535046 0.047456 0.579809 0.5 +0.0181885 0.053509 0.04724 0.610035 0.5 +0.0193075 0.0536075 0.0470681 0.625681 0.5 +0.0201633 0.0535759 0.04656 0.581784 0.472802 +0.0209419 0.0535563 0.0459234 0.547965 0.5 +0.021663 0.053586 0.0452157 0.563921 0.396178 +0.0223265 0.0535979 0.0444334 0.553657 0.5 +0.0229945 0.0535474 0.0436214 0.581774 0.5 +0.0236683 0.0535376 0.0428398 0.631488 0.418344 +0.0243441 0.0535282 0.0420575 0.620802 0.5 +0.0250466 0.0534973 0.0413033 0.644198 0.5 +0.0259096 0.0534724 0.0407837 0.685187 0.395476 +0.0267966 0.0534918 0.0403155 0.700565 0.5 +0.0276118 0.053509 0.0397341 0.709705 0.5 +0.028423 0.0535254 0.0391477 0.695708 0.5 +0.0293325 0.0535401 0.0386956 0.660628 0.402085 +0.0302182 0.0535528 0.0382346 0.63041 0.5 +0.031043 0.0535582 0.0376713 0.602872 0.5 +0.0317499 0.0535218 0.0369319 0.601117 0.5 +0.03243 0.0535036 0.0361605 0.53606 0.5 +0.0330783 0.0534528 0.0353209 0.497433 0.5 +0.0337476 0.0534432 0.0345417 0.483242 0.5 +0.0343862 0.0533953 0.033694 0.469377 0.5 +0.0350254 0.0533499 0.0328505 0.588986 0.5 +0.035717 0.0533288 0.0320909 0.664264 0.420185 +0.0206219 0.119357 0.0335278 0.500768 0.5 +0.0238242 0.0981836 0.0451545 0.466296 0.5 +0.0432493 0.100107 0.00716752 0.569288 0.425701 +0.0433138 0.0902166 -0.00378785 0.533012 0.5 +-0.0567046 0.11983 0.0390246 0.557754 0.5 +-0.0553953 0.118382 0.0373919 0.613384 0.431927 +0.0454971 0.0861837 0.00419421 0.509812 0.45198 +-0.0541716 0.144673 0.0274046 0.693272 0.5 +0.0465231 0.0539629 0.0319545 0.539251 0.475034 +0.047415 0.0539813 0.0314992 0.5445 0.5 +0.0482509 0.0539799 0.0309574 0.562516 0.450918 +0.0490482 0.0539975 0.0303486 0.588723 0.5 +0.0498583 0.0540108 0.0297623 0.613102 0.5 +0.0507066 0.0540083 0.0292331 0.612958 0.5 +0.0515475 0.0540038 0.0286923 0.600023 0.5 +0.0523683 0.0540101 0.0281247 0.595358 0.5 +0.0531089 0.0539671 0.0274209 0.586304 0.465701 +0.0538412 0.0539826 0.0267309 0.56907 0.5 +0.0544797 0.0539552 0.0258897 0.545646 0.5 +0.0551094 0.0539301 0.0250409 0.528337 0.474803 +0.0557633 0.0538969 0.024211 0.519577 0.5 +0.056383 0.0538774 0.0233551 0.64305 0.5 +0.0569799 0.0538694 0.0224893 0.612237 0.5 +0.0575606 0.0537805 0.0213286 0.456039 0.5 +-0.032324 0.161031 -0.00122654 0.617067 0.5 +-0.0390311 0.160893 0.00133569 0.632935 0.5 +-0.0611099 0.11531 0.0378549 0.514814 0.5 +-0.0692562 0.143958 0.0438704 0.512137 0.5 +0.0226049 0.0994887 0.0451477 0.458318 0.5 +-0.0565093 0.148178 0.0306333 0.629881 0.5 +0.0210399 0.118016 0.0341276 0.514342 0.5 +-0.0918252 0.118761 0.028299 0.704257 0.5 +0.0445209 0.095967 0.011159 0.568006 0.5 +-0.054126 0.0491389 0.0369634 0.070265 0.5 +0.0249862 0.118037 0.0310154 0.652099 0.5 +-0.0550635 0.116914 0.036091 0.596881 0.5 +-0.0128833 0.165453 -0.0135102 0.380942 0.5 +-0.0145881 0.165422 -0.0124907 0.433931 0.5 +-0.0421778 0.150669 0.00550662 0.535763 0.5 +0.0121111 0.116449 0.0370148 0.569772 0.423984 +-0.0597544 0.151092 0.0347772 0.383627 0.5 +-0.0341053 0.162392 -0.00207929 0.536568 0.5 +-0.0896332 0.0983435 0.0144056 0.837926 0.5 +0.0408155 0.0939721 0.0292858 0.674 0.5 +-0.010288 0.172711 -0.0218803 0.562567 0.5 +-0.0707401 0.13973 0.0469958 0.51169 0.5 +-0.0387324 0.156611 0.00532643 0.537431 0.464944 +-0.0313565 0.161046 -0.00157639 0.617981 0.5 +-0.00759782 0.103673 0.0436498 0.478677 0.5 +-0.0219158 0.177176 -0.0142605 0.649852 0.5 +-0.0683486 0.124257 0.0521552 0.486131 0.5 +-0.0718527 0.158151 -0.00382487 0.427879 0.5 +-0.0148262 0.181632 -0.021586 0.676361 0.5 +0.0391693 0.108394 0.0111647 0.706042 0.5 +-0.0460118 0.126697 0.0245216 0.485586 0.459616 +-0.0640701 0.113939 0.0406208 0.299455 0.5 +-0.0545922 0.126915 0.0368606 0.693947 0.5 +-0.023502 0.180157 -0.0112302 0.454179 0.5 +0.0344381 0.102088 0.0341795 0.717688 0.5 +-0.0210968 0.161053 -0.00432438 0.393279 0.5 +-0.054345 0.151005 0.0266856 0.458113 0.5 +0.0344933 0.0929192 0.0394802 0.709725 0.5 +-0.053876 0.126919 0.0361236 0.682808 0.5 +-0.048793 0.155022 0.0100543 0.616049 0.5 +-0.0292466 0.166794 -0.00735295 0.582282 0.5 +-0.0180211 0.168338 -0.0139614 0.500502 0.5 +-0.00485752 0.103786 0.0439754 0.47348 0.5 +-0.0114184 0.169868 -0.0184586 0.503517 0.5 +0.00705483 0.113673 0.0402142 0.529372 0.5 +-0.043267 0.149185 0.00566881 0.410208 0.5 +-0.0648688 0.0938916 -0.0183701 0.499738 0.470267 +-0.0473301 0.134807 0.0120125 0.549036 0.5 +-0.0906686 0.139207 0.0161786 0.372117 0.5 +-0.0168713 0.184583 -0.0192109 0.435956 0.5 +0.0382486 0.104643 0.0273123 0.651141 0.5 +-0.0311183 0.172722 -0.00474304 0.630265 0.5 +-0.0678588 0.128454 0.0493479 0.670212 0.5 +-0.0548518 0.122696 0.0382478 0.687949 0.5 +0.0107799 0.0548821 0.052327 0.547965 0.5 +0.0116668 0.0548951 0.0518589 0.519382 0.465103 +0.0124372 0.0548875 0.0512192 0.511479 0.5 +0.0131577 0.0548631 0.0504935 0.516902 0.474742 +0.013902 0.054865 0.0498147 0.514048 0.5 +0.0146633 0.0548535 0.0491553 0.509026 0.5 +0.0154848 0.0548588 0.0485877 0.663956 0.5 +0.0164447 0.0548852 0.0482217 0.708033 0.5 +0.0175889 0.0549386 0.0481228 0.745465 0.5 +0.018728 0.0549999 0.0480114 0.59242 0.5 +0.0196905 0.0550135 0.047657 0.733485 0.5 +0.0205756 0.0550317 0.0471809 0.553006 0.5 +0.0212994 0.0550028 0.0464604 0.543945 0.433334 +0.0220311 0.0550166 0.0457656 0.56405 0.430749 +0.022681 0.0549804 0.0449373 0.573627 0.5 +0.0233417 0.0549864 0.0441504 0.63963 0.420132 +0.0239959 0.0549509 0.0433236 0.686976 0.410874 +0.0247244 0.0549721 0.0426251 0.649951 0.5 +0.0255474 0.054922 0.0420386 0.664615 0.5 +0.0264254 0.054947 0.041554 0.681331 0.5 +0.027252 0.0549488 0.0409918 0.678384 0.5 +0.0280387 0.0549866 0.0403705 0.685917 0.5 +0.028889 0.0549767 0.0398373 0.66341 0.400542 +0.0297724 0.0549903 0.0393628 0.633826 0.5 +0.0306109 0.0549842 0.038821 0.605446 0.5 +0.0313895 0.0549645 0.0381834 0.596232 0.5 +0.0321354 0.0549697 0.0375085 0.594206 0.5 +0.0328247 0.054955 0.0367483 0.547254 0.470613 +0.0335055 0.0549395 0.0359782 0.502587 0.5 +0.0341544 0.0548861 0.0351403 0.481773 0.5 +0.0347756 0.0548514 0.0342768 0.462004 0.5 +0.0354002 0.054813 0.0334165 0.434777 0.454769 +0.0360371 0.0547702 0.0325687 0.572388 0.439056 +0.0367132 0.0547551 0.0317845 0.662886 0.5 +0.0303449 0.112749 0.0317399 0.707931 0.5 +-0.0559485 0.119826 0.0383628 0.544527 0.5 +0.0454245 0.0904044 0.0131633 0.558324 0.5 +-0.0575438 0.119835 0.0395668 0.569221 0.5 +-0.0585001 0.119809 0.0399342 0.552114 0.456913 +0.0455462 0.0861954 0.016167 0.543709 0.5 +0.0288925 0.112764 0.0331675 0.716694 0.5 +-0.0678289 0.135464 0.0458614 0.725986 0.5 +0.0475648 0.0553802 0.031711 0.536778 0.5 +0.0484031 0.0553841 0.03118 0.455606 0.5 +0.049194 0.055373 0.030576 0.57646 0.5 +0.0500544 0.0553974 0.0300563 0.600815 0.5 +0.0509435 0.0554131 0.029582 0.513414 0.429911 +0.0518058 0.0553999 0.0290848 0.597363 0.5 +0.0526679 0.0554283 0.0285725 0.589963 0.5 +0.0534095 0.0553934 0.0278769 0.588124 0.5 +0.0541315 0.0553714 0.0271399 0.499698 0.488672 +0.0547917 0.0553704 0.0263503 0.579203 0.484923 +0.0554005 0.0553511 0.0254886 0.710821 0.5 +0.0560337 0.0553031 0.0245952 0.549998 0.477428 +0.0566718 0.0553009 0.0238011 0.540766 0.5 +0.0572674 0.0552579 0.0228777 0.50985 0.5 +0.0578262 0.0552267 0.0219335 0.406996 0.5 +0.0398757 0.096658 0.0297176 0.698921 0.5 +0.0393482 0.0966985 0.0306886 0.708353 0.5 +-0.0369427 0.15804 0.00437449 0.41253 0.5 +0.0136046 0.121889 0.0339065 0.610244 0.5 +0.0190336 0.11528 0.0364777 0.527532 0.5 +-0.0937861 0.128264 0.0182441 0.78287 0.5 +-0.0207276 0.168298 -0.0126147 0.506647 0.5 +-0.0141433 0.181604 -0.0223083 0.670935 0.5 +0.0455391 0.0875946 0.0141649 0.569152 0.441002 +0.0438165 0.0959355 0.0191615 0.51051 0.481245 +-0.0747362 0.0663817 0.0145125 0.594594 0.5 +-0.0155441 0.165408 -0.0121335 0.434575 0.5 +-0.0306212 0.159741 -0.0134031 0.821666 0.5 +-0.0127734 0.171309 -0.0186592 0.649631 0.5 +0.0329828 0.110047 0.0302661 0.725289 0.5 +-0.055098 0.146723 0.029184 0.591138 0.468903 +0.0111265 0.120476 0.0355761 0.627049 0.5 +-0.0384682 0.15361 0.00387723 0.593671 0.5 +-0.0627416 0.148221 0.0374769 0.499587 0.5 +-0.0378831 0.156583 0.00477982 0.663541 0.461274 +-0.0507328 0.121196 0.0335979 0.607486 0.5 +-0.0157015 0.164 -0.0105798 0.400773 0.5 +-0.0272214 0.163934 -0.00616346 0.55955 0.5 +-0.0376877 0.163829 -0.000238726 0.66112 0.5 +-0.0493593 0.121175 0.032055 0.541958 0.5 +-0.0570388 0.149629 0.0316784 0.486985 0.5 +-0.0218743 0.178667 -0.0141782 0.621117 0.5 +-0.0130273 0.178658 -0.0225027 0.72108 0.5 +0.0436954 0.0959268 0.0201595 0.511611 0.5 +-0.0228869 0.180156 -0.0121058 0.539409 0.5 +-0.0529232 0.125495 0.0357533 0.626378 0.5 +-0.0258342 0.159627 -0.000620301 0.42294 0.5 +0.0277648 0.098182 0.0420578 0.704968 0.5 +0.0321792 0.0929416 0.0413986 0.525107 0.5 +-0.0656041 0.136814 0.0420793 0.689571 0.5 +-0.0640626 0.136748 0.0389546 0.605997 0.399424 +-0.0341251 0.166782 -0.00385534 0.716037 0.5 +-0.0326251 0.166779 -0.00520273 0.574087 0.5 +-0.046455 0.126722 0.0256927 0.53347 0.5 +-0.0751879 0.179229 -0.0530087 0.216638 0.5 +0.0235113 0.118015 0.0324132 0.651242 0.5 +-0.0483573 0.129635 0.0282843 0.595715 0.5 +-0.0513902 0.122634 0.0344378 0.603759 0.5 +-0.0478246 0.129609 0.027299 0.549514 0.5 +-0.0590695 0.143884 0.0338908 0.606064 0.366665 +-0.0232564 0.171248 -0.0127378 0.668821 0.5 +-0.0625254 0.138119 0.0359126 0.670062 0.5 +-0.0509363 0.126898 0.0333376 0.631022 0.5 +-0.0495769 0.126877 0.0317874 0.611539 0.5 +-0.0489995 0.126854 0.0308899 0.578048 0.5 +-0.0469166 0.129554 0.0250362 0.510142 0.5 +0.010951 0.0562864 0.05258 0.470737 0.439928 +0.0118426 0.0562933 0.0521284 0.387785 0.5 +0.012618 0.0562866 0.0514947 0.521522 0.5 +0.013378 0.056283 0.0508299 0.528394 0.477748 +0.0141304 0.056278 0.0501629 0.529829 0.5 +0.0148603 0.0562539 0.0494599 0.511651 0.475196 +0.0157351 0.0562704 0.0489701 0.667829 0.5 +0.0167477 0.0563074 0.0486799 0.727767 0.5 +0.0178908 0.0563588 0.0485803 0.596242 0.5 +0.0189816 0.0563976 0.0484166 0.597824 0.5 +0.0199591 0.0564127 0.0480725 0.468785 0.471199 +0.0208153 0.0564412 0.0475406 0.537678 0.5 +0.0215752 0.056436 0.0468827 0.54668 0.453319 +0.0222885 0.0564166 0.0461469 0.562659 0.5 +0.0229642 0.0564103 0.0453711 0.586254 0.5 +0.0236359 0.056409 0.0445932 0.660497 0.436593 +0.0243198 0.0564051 0.0438207 0.663038 0.5 +0.0251418 0.056415 0.0432482 0.672302 0.5 +0.0260147 0.0563895 0.0427437 0.660098 0.5 +0.0268173 0.0563551 0.0421393 0.645639 0.5 +0.0275656 0.0563642 0.0414619 0.658452 0.5 +0.0283669 0.0563832 0.0408635 0.658564 0.5 +0.0292092 0.0563773 0.0403225 0.641919 0.5 +0.0300864 0.0564003 0.0398351 0.630786 0.5 +0.030957 0.0564285 0.0393343 0.61908 0.5 +0.0317881 0.0564278 0.038783 0.608207 0.5 +0.0325669 0.0564098 0.0381516 0.589507 0.5 +0.0332799 0.0564373 0.0374441 0.576764 0.5 +0.0339261 0.0564017 0.0366181 0.670806 0.5 +0.034582 0.0563647 0.0357928 0.634295 0.5 +0.0351768 0.0563002 0.0348659 0.591179 0.5 +0.0357585 0.0562848 0.0339755 0.427001 0.480598 +0.0363518 0.0562159 0.0330449 0.507239 0.5 +0.0369848 0.0561762 0.0322 0.56142 0.5 +0.0377227 0.0561747 0.0314909 0.632131 0.465247 +0.0396169 0.0843072 -0.0127653 0.615566 0.5 +-0.0622396 0.155257 -0.0325976 0.82266 0.5 +-0.017538 0.18639 -0.0186026 0.311678 0.5 +0.0362687 0.0941823 0.0368117 0.726421 0.5 +-0.0182673 0.180142 -0.0177524 0.6736 0.5 +-0.086697 0.114875 0.0460769 0.444358 0.5 +-0.00109314 0.103948 0.0441727 0.450233 0.5 +-0.0483251 0.123967 0.0299918 0.615119 0.5 +0.0484167 0.0567471 0.0312254 0.443571 0.466184 +0.0492859 0.0567642 0.0307116 0.563519 0.5 +0.0501668 0.0567787 0.0302284 0.4839 0.5 +0.0510761 0.0567889 0.0297952 0.500295 0.5 +0.0519851 0.0567984 0.0293579 0.587408 0.5 +0.0528545 0.0568172 0.0288563 0.572844 0.5 +0.0536301 0.0568087 0.0282148 0.469895 0.5 +0.0543448 0.0567886 0.0274783 0.597239 0.5 +0.0549908 0.0567623 0.0266396 0.603709 0.476713 +0.0555936 0.0567472 0.0257684 0.57284 0.5 +0.0561988 0.0567015 0.0248562 0.569301 0.5 +0.0568205 0.0566796 0.0240006 0.557264 0.5 +0.0574465 0.0566575 0.0231489 0.528627 0.5 +0.0580765 0.0566038 0.0222343 0.637933 0.5 +0.029871 0.0968887 0.0415927 0.717458 0.5 +-0.0253214 0.158135 -0.00165461 0.286621 0.392045 +-0.0484639 0.149215 0.0104667 0.580488 0.5 +-0.00505247 0.102417 0.0438081 0.30709 0.5 +-0.0625921 0.1213 0.0447428 0.591552 0.5 +-0.0144519 0.166922 -0.0140569 0.475637 0.5 +-0.0621631 0.164652 -0.0535815 0.419466 0.5 +-0.0667756 0.124253 0.0509201 0.623382 0.5 +-0.0309567 0.166794 -0.00630909 0.588401 0.5 +-0.0582639 0.12123 0.0402958 0.555122 0.5 +-0.0286955 0.175698 -0.00647862 0.548139 0.5 +-0.018438 0.165372 -0.011068 0.688671 0.5 +-0.0469298 0.126751 0.026776 0.559064 0.444058 +-0.042206 0.147853 0.000366775 0.318988 0.5 +-0.05562 0.146743 0.0301728 0.588908 0.5 +-0.0368355 0.153629 0.00272174 0.543881 0.5 +-0.0504943 0.147794 0.0128405 0.533192 0.5 +-0.0592485 0.148248 0.0355123 0.579419 0.5 +-0.0267733 0.15662 -0.0020223 0.197014 0.362686 +-0.0259693 0.156664 -0.00260696 0.208498 0.341288 +-0.0252695 0.156633 -0.00336931 0.181008 0.367031 +-0.0179511 0.175707 -0.0173471 0.722596 0.5 +-0.045698 0.157938 0.00750606 0.585776 0.421879 +-0.0132407 0.164048 -0.012311 0.359104 0.5 +0.0099296 0.113714 0.0390911 0.653177 0.5 +-0.0406031 0.160882 0.00257136 0.503468 0.5 +-0.0137397 0.178677 -0.0217984 0.736588 0.5 +-0.0497211 0.131062 0.0298847 0.667486 0.5 +-0.0222707 0.180155 -0.0129798 0.596419 0.5 +-0.0625429 0.143922 0.0377415 0.76703 0.3964 +-0.026729 0.159626 -0.000161004 0.427507 0.460563 +0.0400949 0.095337 0.0300286 0.691883 0.427093 +-0.0645444 0.136771 0.0400377 0.637599 0.438047 +-0.065068 0.136793 0.0410949 0.658885 0.5 +-0.063562 0.136724 0.0379539 0.562828 0.5 +-0.0606205 0.136712 0.0351771 0.470858 0.5 +-0.0596849 0.136693 0.0347693 0.492171 0.5 +-0.0571389 0.136712 0.0331888 0.61068 0.5 +-0.056363 0.13673 0.0325483 0.650833 0.5 +-0.0556122 0.136727 0.0318764 0.688078 0.5 +-0.0517083 0.131123 0.0322407 0.73389 0.5 +-0.0338617 0.168258 -0.00349456 0.674611 0.5 +0.021919 0.118008 0.0336347 0.633587 0.5 +0.0392277 0.108354 0.00916622 0.700457 0.5 +-0.0509894 0.131098 0.0315417 0.740462 0.5 +-0.0502302 0.126885 0.0326315 0.612826 0.5 +-0.0194278 0.169807 -0.0142312 0.634023 0.5 +-0.0166929 0.178668 -0.0190282 0.714815 0.5 +-0.058632 0.131139 0.0380532 0.642886 0.5 +-0.0595215 0.131137 0.0385262 0.645336 0.459131 +0.0108689 0.0576426 0.0524778 0.538085 0.5 +0.0118091 0.0576645 0.0520801 0.927639 0.5 +0.0126063 0.0576596 0.0514859 0.668108 0.5 +0.013386 0.0576661 0.0508541 0.689153 0.5 +0.0141618 0.0576523 0.0502255 0.558854 0.470555 +0.0150017 0.0576648 0.0496654 0.673204 0.5 +0.0158981 0.0576764 0.0492073 0.549681 0.5 +0.016916 0.0577101 0.0489225 0.599214 0.5 +0.0180643 0.0577618 0.0488361 0.5992 0.5 +0.0191559 0.0577995 0.0486799 0.577179 0.5 +0.020119 0.0578214 0.0483165 0.677882 0.5 +0.0209984 0.0578395 0.0478214 0.520552 0.5 +0.0217645 0.057833 0.0471676 0.431042 0.5 +0.0224822 0.0578106 0.0464363 0.444558 0.5 +0.0231825 0.0577956 0.0456852 0.572079 0.5 +0.023852 0.057789 0.0449027 0.631597 0.45502 +0.0245929 0.0577938 0.0442192 0.65461 0.5 +0.0254863 0.0578069 0.043747 0.649047 0.396012 +0.0263587 0.0577877 0.0432503 0.618039 0.5 +0.0271615 0.0578042 0.0426556 0.619779 0.5 +0.027906 0.0578072 0.0419759 0.629318 0.5 +0.0286533 0.0578113 0.0412965 0.628063 0.455719 +0.0295012 0.0578054 0.0407589 0.635209 0.39526 +0.0303768 0.0578247 0.0402716 0.635975 0.5 +0.0312208 0.0578184 0.0397344 0.62881 0.5 +0.0320683 0.0578123 0.0392046 0.603332 0.5 +0.0328914 0.0578172 0.038629 0.593167 0.5 +0.0336441 0.0578174 0.0379601 0.588776 0.5 +0.0343069 0.0578226 0.0371782 0.737246 0.5 +0.0349695 0.0577828 0.0363582 0.67864 0.5 +0.0356049 0.0577583 0.0355158 0.616523 0.5 +0.0361089 0.0577094 0.0344737 0.559681 0.353861 +0.0366578 0.0576635 0.0335112 0.521658 0.5 +0.0372748 0.0576283 0.0326444 0.722216 0.5 +0.0379248 0.0575872 0.0318029 0.564621 0.480028 +-0.0679473 0.136882 0.0457212 0.704919 0.5 +-0.0673163 0.13687 0.0448543 0.720461 0.5 +-0.0646221 0.122809 0.0487379 0.67303 0.5 +-0.0652467 0.122825 0.0496059 0.688383 0.5 +-0.0658758 0.122838 0.0504663 0.647681 0.5 +-0.0665656 0.122847 0.0512252 0.622711 0.5 +-0.0667166 0.136853 0.0439657 0.713563 0.5 +-0.0661523 0.136835 0.0429956 0.703879 0.5 +-0.0364708 0.152123 0.0014574 0.403521 0.5 +0.049326 0.0581361 0.0307698 0.468683 0.5 +0.0502404 0.0581527 0.030355 0.474413 0.442415 +0.0511798 0.0581784 0.029952 0.473294 0.5 +0.0520769 0.0581909 0.0294992 0.46956 0.447996 +0.0529297 0.0581906 0.02898 0.407469 0.444977 +0.0537368 0.0581963 0.0283843 0.482732 0.481019 +0.0544596 0.058178 0.0276568 0.610974 0.5 +0.0551355 0.0581678 0.0268835 0.629607 0.5 +0.0557201 0.0581302 0.0259556 0.604201 0.5 +0.0563147 0.0580894 0.0250386 0.589437 0.468933 +0.0569296 0.058069 0.024171 0.577771 0.468047 +0.0576125 0.0580597 0.0234109 0.553979 0.5 +0.058244 0.0580344 0.0225642 0.439882 0.5 +0.0587559 0.0579922 0.0215357 0.48465 0.48028 +0.0366057 0.0954909 0.0355184 0.717745 0.5 +0.0327331 0.0942636 0.0404449 0.69301 0.5 +-0.0498856 0.149233 0.0119087 0.563476 0.5 +-0.0630097 0.121328 0.0458592 0.590657 0.413039 +-0.0189873 0.180146 -0.0170482 0.656989 0.5 +-0.0125655 0.164041 -0.0130929 0.302408 0.5 +-0.0351753 0.160922 -0.000113952 0.610078 0.5 +-0.0280768 0.169745 -0.00916431 0.622479 0.5 +0.0444376 0.0959725 0.0121619 0.56241 0.393307 +-0.0274521 0.175685 -0.00821886 0.677454 0.5 +-0.0194597 0.165415 -0.0107679 0.548772 0.5 +-0.0203751 0.165368 -0.0103486 0.580263 0.5 +-0.0614696 0.136692 0.0357094 0.592141 0.5 +-0.0562712 0.146757 0.030967 0.62583 0.5 +-0.0472527 0.147738 0.00869118 0.656387 0.5 +0.0325643 0.0981766 0.0384761 0.724217 0.5 +-0.0527627 0.115451 0.034109 0.652137 0.466948 +0.0378702 0.100686 0.0303226 0.707952 0.5 +-0.0714891 0.129823 0.0511416 0.467193 0.473137 +-0.0662836 0.114247 0.046332 0.230851 0.429752 +-0.0568394 0.145329 0.0319256 0.601853 0.5 +-0.0449507 0.157934 0.00683281 0.701522 0.413899 +-0.0245154 0.158144 -0.00224812 0.357173 0.5 +-0.0535056 0.136701 0.0296589 0.66949 0.5 +0.0243457 0.102123 0.0424029 0.680186 0.5 +-0.0123464 0.178658 -0.023274 0.704155 0.5 +0.00551455 0.110936 0.0415028 0.510118 0.473656 +-0.0827158 0.108829 0.000295564 0.392916 0.465755 +-0.0403921 0.162356 0.00287494 0.621163 0.5 +-0.0324319 0.159505 0.00208324 0.44862 0.5 +-0.0667178 0.127063 0.0492263 0.685345 0.5 +-0.0626162 0.142488 0.0376248 0.767183 0.5 +-0.0601666 0.138122 0.0340792 0.526861 0.5 +-0.0636379 0.131123 0.0413473 0.731705 0.5 +-0.0642658 0.131126 0.0422113 0.713125 0.5 +-0.0648724 0.131147 0.0430922 0.71188 0.5 +0.0267262 0.114038 0.0335472 0.560748 0.5 +-0.0693376 0.131255 0.0489674 0.676212 0.5 +-0.0700881 0.131265 0.0496481 0.626038 0.5 +-0.0708777 0.131245 0.0502751 0.487172 0.5 +-0.0520723 0.122646 0.0352105 0.484935 0.5 +-0.0468135 0.1536 0.00939603 0.599476 0.5 +-0.0686311 0.136892 0.0464956 0.67924 0.5 +0.024552 0.110059 0.0374287 0.510921 0.461419 +-0.0939473 0.122782 0.0142819 0.491567 0.5 +-0.044345 0.152142 0.00768226 0.730272 0.5 +-0.0489146 0.121146 0.0309679 0.549008 0.33577 +0.00882114 0.0589209 0.053036 0.552546 0.5 +-0.0357383 0.152143 0.000762654 0.285094 0.5 +-0.0548531 0.149577 0.0276913 0.528404 0.5 +0.0117081 0.0589891 0.0519593 0.68258 0.5 +0.0124938 0.0589954 0.0513278 0.685362 0.5 +0.0132853 0.0589897 0.0507165 0.697288 0.5 +0.0141254 0.0589894 0.0501816 0.702251 0.5 +0.0150592 0.0590177 0.0497649 0.534316 0.5 +0.0160048 0.0590435 0.0493667 0.554101 0.5 +0.0170299 0.0590745 0.0491032 0.579722 0.5 +0.0181085 0.0591163 0.0489014 0.584266 0.5 +0.0192013 0.0591556 0.0487522 0.552803 0.5 +0.0202169 0.0591906 0.0484605 0.530215 0.469826 +0.021114 0.0592021 0.0480036 0.436215 0.5 +0.021851 0.0591836 0.0473037 0.428018 0.5 +0.0226226 0.0591926 0.0466634 0.447132 0.476504 +0.0233319 0.059176 0.0459237 0.470053 0.5 +0.0240318 0.0591603 0.0451764 0.608902 0.471236 +0.024788 0.0591582 0.0445118 0.615319 0.5 +0.0257137 0.0591918 0.0440938 0.632353 0.5 +0.0266247 0.0591987 0.0436528 0.62646 0.5 +0.0274474 0.0591653 0.0430806 0.599193 0.5 +0.0281313 0.0591962 0.0423168 0.624872 0.477444 +0.0288434 0.0591735 0.0415864 0.618363 0.5 +0.0296673 0.0591775 0.0410177 0.626044 0.5 +0.0305372 0.0592022 0.0405121 0.624862 0.462708 +0.0314319 0.059214 0.0400505 0.624296 0.5 +0.0323433 0.0592178 0.0396143 0.613032 0.5 +0.033177 0.0592197 0.0390624 0.600317 0.473468 +0.0338995 0.0591949 0.0383404 0.597205 0.5 +0.0346034 0.0592134 0.0376264 0.595078 0.486311 +0.035265 0.0591791 0.0368077 0.728961 0.5 +0.0358939 0.0591552 0.0359628 0.665401 0.5 +0.0364442 0.0590953 0.0349595 0.582899 0.5 +0.03698 0.0590759 0.0339965 0.559645 0.5 +0.0375229 0.0590309 0.0330268 0.548475 0.5 +0.0380982 0.0589726 0.0320786 0.734253 0.5 +0.0387801 0.058953 0.031306 0.587282 0.5 +-0.0551272 0.0478339 0.0400497 0.10477 0.285222 +-0.00144558 0.106667 0.0437112 0.579491 0.407487 +-0.0636907 0.124164 0.0466174 0.672083 0.5 +-0.0631629 0.124137 0.0456282 0.673291 0.5 +-0.0625935 0.12412 0.0446596 0.660954 0.5 +-0.0620012 0.1241 0.0437622 0.646414 0.5 +-0.0486707 0.147744 0.0101492 0.674408 0.5 +0.0455115 0.0861913 0.0171661 0.531503 0.5 +-0.0929641 0.121523 0.0342815 0.570703 0.474906 +-0.0721389 0.12842 0.0519775 0.552025 0.5 +0.0512217 0.0595245 0.030012 0.404078 0.5 +0.0521127 0.0595383 0.0295528 0.404427 0.423811 +0.0529677 0.0595446 0.0290441 0.406219 0.481382 +0.0538026 0.0595499 0.0284925 0.489389 0.485101 +0.0545625 0.0595427 0.0278248 0.617222 0.5 +0.0552547 0.0595292 0.0270628 0.644832 0.5 +0.0558536 0.0594884 0.0261475 0.608811 0.466267 +0.0564645 0.0594668 0.0252844 0.58073 0.466529 +0.0571049 0.0594437 0.0244408 0.563566 0.5 +0.0577316 0.0594186 0.0235899 0.562391 0.464437 +0.0583601 0.0593964 0.0227402 0.529934 0.468321 +0.0589085 0.0593684 0.0217913 0.505955 0.458291 +0.0317135 0.0955631 0.0407455 0.726065 0.5 +-0.0572856 0.125533 0.0399888 0.653634 0.404245 +-0.0299241 0.172727 -0.00652243 0.663489 0.5 +0.0397718 0.0940445 0.031303 0.703257 0.5 +-0.0548894 0.136747 0.0311423 0.703997 0.5 +-0.0733475 0.129801 0.0519745 0.556841 0.5 +-0.040383 0.152127 0.00460721 0.548964 0.369679 +0.0395925 0.0979794 0.0293107 0.676534 0.5 +0.0377275 0.0928421 0.0353087 0.708135 0.5 +0.00646432 0.110948 0.0411124 0.511431 0.5 +-0.0268549 0.175688 -0.00910606 0.672767 0.5 +-0.0213358 0.165379 -0.00997448 0.581057 0.5 +0.0319133 0.103439 0.0357737 0.721334 0.5 +-0.0569748 0.146758 0.0317266 0.637694 0.5 +-0.0476647 0.15359 0.00991943 0.626912 0.5 +-0.011137 0.171308 -0.0197957 0.599684 0.5 +-0.0593537 0.140997 0.0335026 0.597508 0.5 +-0.0701665 0.143936 0.0443089 0.611743 0.472095 +0.022957 0.0981907 0.0456622 0.456007 0.474724 +-0.0550692 0.121281 0.0379498 0.511476 0.467684 +0.0454926 0.0875897 0.015162 0.551848 0.5 +0.0270163 0.115378 0.0322111 0.666101 0.5 +-0.0679334 0.145349 0.0422649 0.615758 0.5 +-0.0355718 0.165308 -0.0024565 0.673585 0.5 +-0.0567507 0.13816 0.0319811 0.653526 0.429628 +-0.011686 0.178646 -0.0240587 0.681497 0.5 +-0.0876501 0.0954829 0.0054069 0.533977 0.338939 +-0.0397906 0.162354 0.00198884 0.602894 0.5 +-0.034444 0.159452 0.00265373 0.43068 0.5 +0.0458295 0.0890233 0.00817039 0.583652 0.43445 +-0.0640539 0.142491 0.0390245 0.623953 0.5 +-0.0650134 0.13537 0.0410634 0.686383 0.412963 +-0.0925078 0.121485 0.0292837 0.683395 0.5 +0.0449523 0.0945963 0.00616781 0.564139 0.5 +-0.0735699 0.131215 0.0516643 0.467495 0.5 +0.0284451 0.114053 0.0325229 0.695531 0.5 +0.0275851 0.114088 0.0330397 0.681151 0.5 +0.0403422 0.10564 0.0161674 0.702292 0.5 +0.0448755 0.0917539 0.00218552 0.540266 0.462277 +0.0364251 0.0840505 -0.0167267 0.728772 0.5 +-0.0731261 0.154051 -0.0329012 0.713518 0.5 +-0.0681029 0.138305 0.0455026 0.680757 0.5 +-0.00787685 0.105931 -0.0227718 0.729831 0.5 +-0.0344162 0.168264 -0.00253059 0.649493 0.5 +0.00638417 0.060281 0.0547831 0.709429 0.5 +0.00728906 0.0602827 0.0543511 0.469518 0.448633 +0.00824317 0.0602927 0.0539848 0.461759 0.483229 +0.0090211 0.0602846 0.0533569 0.549572 0.5 +0.00985328 0.0602892 0.0527986 0.546281 0.5 +0.0107752 0.0603237 0.0523688 0.568294 0.5 +0.0116378 0.0603198 0.0518663 0.725236 0.5 +0.0123855 0.0603174 0.0511841 0.732728 0.5 +0.0132697 0.0603324 0.0507028 0.721205 0.431697 +0.014169 0.0603418 0.050255 0.532098 0.5 +0.0151319 0.0603601 0.0498992 0.442127 0.470303 +0.0161292 0.0604031 0.0495734 0.445124 0.5 +0.017085 0.0604224 0.0492086 0.558984 0.463121 +0.0180964 0.0604579 0.0488964 0.557606 0.472811 +0.0191745 0.060499 0.0487078 0.709617 0.5 +0.0201512 0.0605237 0.0483852 0.557608 0.5 +0.0211099 0.0605491 0.0480139 0.46167 0.5 +0.0219313 0.0605513 0.0474343 0.538954 0.5 +0.0226823 0.0605452 0.0467602 0.557542 0.5 +0.023391 0.0605296 0.0460187 0.575516 0.5 +0.0241246 0.0605253 0.0453245 0.49306 0.469147 +0.0249679 0.0605263 0.0447882 0.611772 0.399184 +0.0258836 0.0605349 0.0443599 0.618283 0.5 +0.0268259 0.0605622 0.0439609 0.609488 0.5 +0.0276605 0.0605608 0.0434107 0.604148 0.5 +0.0283556 0.0605487 0.0426528 0.775571 0.5 +0.0290367 0.060539 0.0418753 0.785897 0.5 +0.029813 0.0605585 0.0412449 0.49286 0.5 +0.0306718 0.0605569 0.0407187 0.505858 0.392564 +0.0315748 0.0605586 0.0402762 0.622923 0.410062 +0.0325363 0.0605817 0.0399114 0.625136 0.5 +0.0333786 0.06058 0.0393695 0.615401 0.5 +0.0341142 0.0605859 0.0386759 0.790494 0.5 +0.0348151 0.0605689 0.0379285 0.595501 0.488263 +0.0355013 0.0605581 0.0371681 0.588283 0.489031 +0.0361371 0.0605355 0.0363255 0.449094 0.5 +0.0367672 0.0605146 0.0354804 0.641207 0.5 +0.0373089 0.0604869 0.0345236 0.613355 0.5 +0.0378012 0.0604211 0.0334272 0.546817 0.5 +0.0383551 0.0603737 0.0324667 0.521361 0.5 +0.0388894 0.060327 0.0314833 0.746431 0.5 +0.0395752 0.0602985 0.0307005 0.591519 0.478074 +0.0403564 0.0602895 0.0300713 0.643084 0.5 +-0.0444606 0.147723 0.0056898 0.371445 0.5 +-0.0617795 0.126914 0.0422805 0.720104 0.5 +-0.0624532 0.126929 0.0430601 0.711037 0.5 +-0.0630295 0.126909 0.044075 0.714062 0.417254 +-0.063605 0.126943 0.0449774 0.718918 0.5 +-0.0641619 0.126957 0.0459503 0.728528 0.5 +-0.0591241 0.1154 0.0371963 0.626604 0.5 +-0.0490056 0.122549 0.0307687 0.563658 0.351556 +0.0511508 0.0608575 0.0299274 0.418013 0.483015 +0.0520606 0.0608742 0.0294954 0.482401 0.450308 +0.0529468 0.0608894 0.0290245 0.419149 0.466434 +0.0537838 0.0608937 0.0284739 0.49358 0.5 +0.0545857 0.0608947 0.0278753 0.634598 0.5 +0.0553162 0.0608807 0.0271604 0.654941 0.5 +0.0560044 0.0608622 0.0263962 0.62083 0.458577 +0.0566532 0.0608369 0.0255651 0.592509 0.458269 +0.0572801 0.0608152 0.0247108 0.5904 0.5 +0.0578867 0.0607943 0.0238444 0.568625 0.5 +0.0584586 0.0607609 0.022909 0.537248 0.5 +0.0589875 0.0607291 0.021951 0.503215 0.469287 +0.0390425 0.0953983 0.0320312 0.713851 0.5 +-0.0629848 0.136718 0.0370028 0.514293 0.5 +0.0350602 0.0968439 0.0368099 0.73095 0.5 +0.0316669 0.110076 0.0318865 0.727807 0.5 +-0.026115 0.158145 -0.00104516 0.296448 0.476127 +-0.0535658 0.132546 0.0330634 0.732356 0.5 +-0.0288774 0.169748 -0.00856256 0.617199 0.5 +-0.0690092 0.122845 0.052951 0.46446 0.5 +0.0393029 0.10195 0.0270711 0.64599 0.5 +0.0387947 0.101959 0.0281808 0.660554 0.5 +-0.0249373 0.175681 -0.0116247 0.775388 0.5 +-0.0223022 0.165377 -0.00961273 0.586078 0.5 +-0.0659739 0.131145 -0.00872206 0.786026 0.5 +-0.0577187 0.146758 0.0323537 0.639232 0.5 +-0.0711231 0.141136 0.0464522 0.630186 0.5 +0.0417112 0.0986332 0.0241669 0.625221 0.4766 +-0.0701785 0.136914 0.0477863 0.643655 0.5 +-0.065551 0.112475 0.040245 0.291739 0.281563 +-0.0831639 0.108847 0.00132792 0.590266 0.353245 +-0.0473203 0.122487 0.0279328 0.632324 0.5 +-0.0507263 0.122615 0.0336033 0.624934 0.5 +0.00801932 0.113693 0.0398597 0.524679 0.5 +-0.0630414 0.149018 -0.0195802 0.618447 0.5 +0.0454314 0.088986 0.0031764 0.491455 0.454678 +-0.0478947 0.122501 0.0288841 0.599605 0.24939 +-0.011074 0.178648 -0.0249266 0.62707 0.5 +-0.0942962 0.120123 0.0192891 0.645048 0.5 +-0.0391691 0.162354 0.00112683 0.625789 0.5 +-0.0358778 0.159506 0.00240863 0.40914 0.5 +0.0406232 0.0953057 0.0289912 0.682355 0.5 +-0.0646755 0.142507 0.0398915 0.638532 0.5 +-0.0695564 0.114278 0.0502908 0.412841 0.5 +0.0377103 0.0955073 -0.00984226 0.610616 0.5 +-0.053938 0.138144 0.0289679 0.622138 0.5 +-0.0882785 0.102304 0.00940329 0.727425 0.5 +-0.0611441 0.169381 -0.0576009 0.479063 0.5 +-0.0615988 0.156867 -0.0225865 0.36048 0.44015 +-0.0552402 0.138165 0.0306253 0.666321 0.5 +-0.043783 0.147719 0.00491206 0.243377 0.5 +-0.0718355 0.0757492 0.0369191 0.607129 0.5 +-0.0688238 0.1383 0.0462399 0.662593 0.5 +-0.0530781 0.119794 0.0354828 0.594363 0.448595 +-0.0587859 0.118384 0.0394982 0.519355 0.5 +0.0456793 0.0890097 0.00617442 0.551233 0.5 +-0.0516452 0.119776 0.0340339 0.584884 0.5 +0.00766079 0.0616753 0.0549139 0.477692 0.450274 +0.00860516 0.061703 0.0545256 0.579934 0.444177 +0.00946449 0.0616923 0.0540126 0.574558 0.5 +0.0102284 0.0616887 0.0533551 0.562374 0.5 +0.0109283 0.0616839 0.0526314 0.594928 0.453119 +0.0116633 0.0616767 0.0519085 0.568514 0.468298 +0.0125203 0.0616669 0.0514026 0.55376 0.5 +0.0134639 0.0616949 0.0510096 0.537718 0.5 +0.0144567 0.0617415 0.0506755 0.54061 0.5 +0.0153695 0.0617406 0.0502582 0.554385 0.463079 +0.016314 0.061771 0.0498607 0.537433 0.5 +0.0172046 0.061784 0.0493931 0.533539 0.5 +0.0181009 0.0617863 0.0489038 0.414803 0.412252 +0.0190254 0.061825 0.0484929 0.447339 0.474807 +0.0200527 0.0618555 0.0482337 0.460716 0.5 +0.0210051 0.0618768 0.0478546 0.466932 0.5 +0.0218954 0.061892 0.0473866 0.471454 0.5 +0.0226817 0.0618915 0.0467691 0.586064 0.5 +0.0234288 0.0618809 0.0460892 0.601319 0.5 +0.0241305 0.0618675 0.0453428 0.611901 0.5 +0.0250243 0.0618819 0.0448807 0.61277 0.401595 +0.0259713 0.0619044 0.0444933 0.501385 0.5 +0.026913 0.0619271 0.0440949 0.618237 0.475652 +0.0277553 0.0619298 0.0435605 0.503008 0.5 +0.0285114 0.0619268 0.0428923 0.602769 0.5 +0.0292021 0.0619142 0.0421314 0.610539 0.5 +0.0299135 0.0618945 0.0413957 0.600683 0.487653 +0.0307935 0.0619124 0.0409121 0.500385 0.490901 +0.0317346 0.0619381 0.0405155 0.639008 0.400542 +0.0326592 0.0619445 0.0401066 0.623868 0.46889 +0.033494 0.0619462 0.0395497 0.629886 0.5 +0.0342924 0.0619556 0.0389482 0.797088 0.5 +0.0349985 0.0619413 0.0382049 0.776269 0.5 +0.0356753 0.0619319 0.0374332 0.593561 0.5 +0.0363022 0.0619082 0.0365841 0.574033 0.483998 +0.0369413 0.0618853 0.0357448 0.559574 0.5 +0.0375704 0.0618629 0.0348997 0.515051 0.5 +0.0380924 0.0618152 0.0338774 0.593984 0.358377 +0.0386074 0.0617702 0.0328492 0.553272 0.5 +0.0391514 0.0617239 0.0318804 0.537993 0.343032 +0.0396969 0.0616754 0.0309066 0.744867 0.5 +0.0403147 0.061632 0.0300225 0.609737 0.5 +0.0458685 0.0862133 0.0111669 0.576783 0.5 +0.0290304 0.0968725 0.0421292 0.705778 0.5 +-0.0621699 0.128298 0.0417254 0.733748 0.5 +-0.0613599 0.128292 0.04114 0.721629 0.5 +-0.0605051 0.128314 0.040613 0.694097 0.430585 +-0.059558 0.128315 0.0402204 0.688471 0.5 +-0.0586682 0.128313 0.0397417 0.686117 0.431036 +-0.066886 0.129814 0.0472408 0.730931 0.5 +-0.04812 0.128214 0.028687 0.55638 0.430309 +0.0519577 0.0621966 0.0293389 0.501683 0.5 +0.0528574 0.0622185 0.0288955 0.500242 0.5 +0.0537262 0.0622241 0.0283948 0.509831 0.479432 +0.0545285 0.0622324 0.0277996 0.525799 0.5 +0.0553211 0.0622297 0.0271921 0.642718 0.5 +0.0560342 0.0622175 0.0264602 0.639437 0.5 +0.0567172 0.0621967 0.0256596 0.637795 0.5 +0.0573764 0.0621793 0.0248727 0.631221 0.5 +0.0579498 0.0621469 0.0239372 0.589483 0.5 +0.0585035 0.0621132 0.0229868 0.550839 0.448044 +0.0589788 0.062133 0.0220601 0.544546 0.403597 +-0.0541694 0.136721 0.0304424 0.695288 0.5 +-0.0630463 0.113863 0.0385547 0.370676 0.5 +-0.0447414 0.149173 0.00704529 0.581796 0.5 +-0.028552 0.159576 0.000695282 0.416986 0.46586 +0.0245994 0.0981921 0.0445203 0.607935 0.5 +-0.0165839 0.159908 -0.00982549 0.178552 0.300845 +-0.0649816 0.114139 0.0429675 0.225874 0.5 +0.035697 0.096801 0.0360155 0.731699 0.5 +-0.0645154 0.121409 0.0489254 0.645911 0.5 +-0.0693724 0.136902 0.0471868 0.667219 0.5 +-0.024223 0.17569 -0.0123366 0.621728 0.5 +-0.023212 0.165344 -0.00918469 0.478609 0.5 +0.00863383 0.115058 0.0390007 0.538692 0.5 +-0.0583932 0.146765 0.0331817 0.558027 0.5 +-0.0702082 0.141157 0.0460159 0.520227 0.477391 +0.0417109 0.0957641 -0.00380547 0.52914 0.459038 +-0.0650996 0.115729 0.046366 0.312569 0.442867 +0.0101968 0.116422 0.0377394 0.572227 0.4767 +-0.013346 0.168342 -0.0159797 0.409804 0.5 +-0.0281377 0.171231 -0.00924208 0.641422 0.5 +0.034067 0.0981569 0.0371457 0.723506 0.5 +-0.0153586 0.171251 -0.0171482 0.539088 0.5 +-0.0533672 0.143136 0.0253913 0.560388 0.5 +-0.053656 0.116868 0.0345992 0.627301 0.5 +-0.0150865 0.162585 -0.00969001 0.335351 0.5 +-0.010533 0.178644 -0.025906 0.51308 0.5 +-0.0269131 0.180109 -0.00739997 0.286497 0.5 +-0.0302254 0.162455 -0.00347789 0.554724 0.5 +-0.033406 0.159477 0.0024166 0.455496 0.5 +0.0333858 0.103442 0.0343819 0.723752 0.5 +-0.0633642 0.142485 0.0383017 0.77472 0.5 +-0.0688326 0.13265 0.047942 0.701702 0.5 +0.0395325 0.105566 0.0221621 0.65553 0.5 +-0.0545656 0.13815 0.0298405 0.644366 0.5 +-0.0680338 0.142566 0.0438693 0.666011 0.5 +-0.0704322 0.13832 0.0474328 0.628302 0.5 +-0.0606083 0.118309 0.0403758 0.437663 0.46425 +0.00564306 0.109569 0.0416563 0.605457 0.483676 +-0.0392773 0.153597 0.0044688 0.633392 0.5 +-0.0696099 0.138316 0.0468524 0.643769 0.5 +-0.0916942 0.124053 0.00727726 0.396773 0.5 +-0.0162544 0.183109 -0.0200888 0.559 0.5 +-0.0635183 0.159851 -0.052592 0.608013 0.5 +-0.00135222 0.101336 0.0444015 0.169779 0.5 +0.00692319 0.0630369 0.0555875 0.466418 0.470062 +0.0079329 0.0630739 0.055296 0.469293 0.467084 +0.00890036 0.0630937 0.0549611 0.408179 0.5 +0.00979876 0.0631089 0.0545118 0.477767 0.427529 +0.010569 0.0630758 0.0538717 0.584625 0.429571 +0.0111874 0.0630268 0.0529412 0.572225 0.434579 +0.0119148 0.0630446 0.0522963 0.556115 0.454723 +0.0129339 0.063079 0.0520141 0.559387 0.456023 +0.0138934 0.0631004 0.0516475 0.543124 0.5 +0.0147818 0.0631153 0.0511723 0.562253 0.45841 +0.0156625 0.0631375 0.0506866 0.567669 0.5 +0.0165486 0.0631544 0.0502063 0.570363 0.5 +0.0173793 0.0631583 0.049653 0.558926 0.5 +0.0182222 0.0631608 0.0491228 0.554626 0.5 +0.0189895 0.0631559 0.0484766 0.544249 0.5 +0.0198889 0.0631747 0.0480195 0.69284 0.5 +0.0208176 0.0631975 0.0476002 0.541809 0.451491 +0.0217176 0.0632088 0.0471364 0.549541 0.458962 +0.0225815 0.0632207 0.0466294 0.57761 0.5 +0.02338 0.0632213 0.0460213 0.611275 0.5 +0.0241356 0.0632152 0.0453534 0.621691 0.5 +0.0250125 0.0632249 0.0448766 0.612634 0.412944 +0.0259569 0.0632491 0.0444844 0.500479 0.486198 +0.0268989 0.0632714 0.044083 0.433943 0.480816 +0.0277812 0.063284 0.0436054 0.620386 0.5 +0.0285711 0.0632767 0.0429905 0.630942 0.47795 +0.0293196 0.0632732 0.0423131 0.631395 0.481215 +0.0300578 0.0632721 0.0416198 0.615215 0.5 +0.0308902 0.0632769 0.0410591 0.508172 0.5 +0.0317544 0.0632771 0.0405733 0.524468 0.398751 +0.0327193 0.0632979 0.0402054 0.533554 0.5 +0.0335961 0.0633113 0.0397473 0.449954 0.464298 +0.0344101 0.0633165 0.0391255 0.50566 0.486234 +0.0351494 0.0633173 0.038442 0.604655 0.5 +0.0358388 0.063303 0.0376893 0.602627 0.483004 +0.0364696 0.0632797 0.0368445 0.604874 0.5 +0.0370985 0.0632585 0.0359995 0.58428 0.5 +0.0377191 0.0632143 0.0350986 0.550646 0.480251 +0.0383109 0.0632029 0.0342252 0.517845 0.5 +0.038908 0.0631632 0.033303 0.488518 0.5 +0.0394641 0.063132 0.032359 0.552553 0.5 +0.03989 0.0630598 0.0312004 0.415734 0.338908 +0.0403936 0.0629925 0.0301493 0.541886 0.453016 +0.0356702 0.108162 -0.00482135 0.545127 0.46681 +0.0372258 0.108268 -0.000834485 0.457557 0.488583 +-0.0119403 0.171322 -0.0192115 0.653479 0.5 +-0.0609535 0.135292 0.0364528 0.647918 0.5 +-0.0618596 0.135275 0.0369058 0.513538 0.5 +-0.0626699 0.13529 0.0374908 0.554074 0.5 +-0.0633856 0.13531 0.0381918 0.594629 0.5 +-0.0639806 0.135327 0.039077 0.633047 0.5 +0.0194941 0.107309 0.0406484 0.57022 0.5 +0.0516914 0.0635003 0.0289607 0.514649 0.457414 +0.0526393 0.0635217 0.0285801 0.511934 0.5 +0.0535357 0.0635428 0.028124 0.519876 0.5 +0.0544233 0.0635568 0.0276516 0.540756 0.477991 +0.0552187 0.0635647 0.027041 0.554479 0.5 +0.0559752 0.0635544 0.0263749 0.693486 0.5 +0.0566888 0.0635446 0.0256358 0.697841 0.5 +0.0573405 0.0635192 0.0248021 0.674984 0.5 +0.0579353 0.0634887 0.0239229 0.633551 0.5 +0.0584978 0.0634546 0.0229811 0.604903 0.5 +-0.0645108 0.135348 0.0400634 0.680171 0.5 +-0.068364 0.143961 0.043402 0.643957 0.5 +0.0387628 0.10462 0.0262683 0.529025 0.5 +-0.0528151 0.132539 0.0323863 0.736341 0.5 +-0.0440117 0.149183 0.00634807 0.529982 0.5 +-0.0111277 0.166928 -0.0162357 0.360187 0.5 +-0.0290239 0.0918566 -0.0266024 0.289431 0.5 +-0.0171613 0.159788 -0.00903074 0.197682 0.291426 +-0.0157849 0.172748 -0.017746 0.557598 0.5 +-0.00234233 0.10113 0.044176 0.170908 0.287241 +-0.0583717 0.138143 0.0331568 0.58447 0.5 +-0.0234602 0.17569 -0.0129988 0.641194 0.5 +-0.0241715 0.165363 -0.00880477 0.482747 0.460885 +0.00772266 0.115023 0.0394097 0.519565 0.5 +-0.0588318 0.146817 0.0344225 0.542616 0.368462 +-0.0693319 0.141141 0.045512 0.528158 0.5 +-0.0683563 0.134056 0.04686 0.724072 0.5 +-0.0642262 0.115635 0.0441038 0.282357 0.445776 +0.00922858 0.116392 0.0380826 0.547483 0.431844 +-0.0142459 0.168321 -0.0155387 0.558339 0.5 +-0.0451757 0.14769 0.00639824 0.424721 0.5 +-0.0886066 0.113065 0.00725433 0.319766 0.5 +0.0168316 0.0926978 0.0490711 0.548428 0.5 +-0.0688215 0.145351 0.0427408 0.510233 0.476477 +-0.0538049 0.0486373 0.0382673 0.0821545 0 +-0.0143444 0.162546 -0.0104323 0.251472 0.452253 +0.0311691 0.0942449 0.0417029 0.688123 0.5 +0.0211901 0.113994 0.0360983 0.518718 0.5 +-0.0331365 0.162399 -0.0024379 0.548915 0.48617 +-0.0314011 0.159502 0.00180977 0.519724 0.5 +0.0395378 0.100622 0.0273876 0.657883 0.5 +-0.0609595 0.142497 0.0365005 0.60829 0.5 +-0.069561 0.132665 0.0486469 0.669919 0.5 +0.0390778 0.105565 0.0241719 0.630913 0.5 +-0.0458268 0.125298 0.0247658 0.52665 0.5 +0.0354218 0.100763 0.0338403 0.72271 0.5 +-0.0558569 0.135328 0.0332838 0.659624 0.5 +-0.0171147 0.161213 -0.00734926 0.320116 0.412498 +-0.0506513 0.150706 0.0125676 0.540097 0.5 +0.0390714 0.108406 0.0131668 0.710542 0.5 +-0.081854 0.0937329 -0.00756112 0.634654 0.5 +-0.0510104 0.149266 0.0138316 0.559368 0.5 +-0.080771 0.105947 -0.00458985 0.522329 0.5 +-0.0147199 0.184604 -0.0232088 0.32685 0.5 +0.0209137 0.102084 0.0444516 0.626774 0.5 +0.0189959 0.104672 0.0434338 0.495552 0.481206 +0.0111403 0.105858 -0.0199086 0.539044 0.5 +0.00894636 0.0644445 0.055029 0.458847 0.5 +0.0098313 0.0644618 0.0545535 0.477495 0.405811 +0.0106165 0.0644536 0.0539383 0.595089 0.438854 +0.0113423 0.0644371 0.0532354 0.595058 0.413839 +0.0122384 0.0644368 0.0527864 0.568989 0.474081 +0.0132903 0.0644915 0.0525417 0.575513 0.5 +0.0142425 0.0645148 0.0521595 0.725606 0.5 +0.0151151 0.0645034 0.0516546 0.475413 0.481983 +0.0158912 0.0644868 0.0510299 0.487321 0.5 +0.0166896 0.0645037 0.050425 0.596063 0.5 +0.0175453 0.0645325 0.0499023 0.58941 0.5 +0.0183954 0.0645286 0.0493775 0.578512 0.5 +0.0191746 0.064523 0.0487473 0.563313 0.474412 +0.0199305 0.0645206 0.0480779 0.559702 0.5 +0.0207575 0.0645289 0.0475184 0.72748 0.5 +0.0215982 0.0645366 0.046975 0.716886 0.5 +0.0224361 0.0645464 0.046427 0.570703 0.5 +0.0232549 0.0645506 0.0458531 0.595311 0.5 +0.0240878 0.0645552 0.0452968 0.628239 0.5 +0.0249807 0.0645674 0.0448324 0.51629 0.458461 +0.0258782 0.0645831 0.0443789 0.436043 0.467062 +0.02686 0.0646091 0.0440244 0.440416 0.5 +0.0277273 0.0646184 0.0435417 0.630346 0.5 +0.0285947 0.0646316 0.0430307 0.64246 0.5 +0.0293752 0.0646271 0.0424024 0.652603 0.5 +0.0301266 0.0646197 0.0417292 0.635334 0.5 +0.0309421 0.0646254 0.0411415 0.50668 0.463651 +0.0317796 0.0647744 0.0406274 0.509164 0.390412 +0.0327247 0.0646521 0.0402099 0.455579 0.5 +0.0336503 0.0646637 0.0398008 0.451645 0.5 +0.0344933 0.0646793 0.0392567 0.625162 0.5 +0.0352313 0.064664 0.0385641 0.618522 0.481917 +0.0359549 0.0646627 0.0378653 0.624184 0.5 +0.0366123 0.064635 0.0370437 0.618694 0.472542 +0.0372523 0.0646113 0.0362056 0.621347 0.5 +0.0378584 0.0645918 0.0353403 0.5727 0.5 +0.0384287 0.064558 0.0344028 0.566398 0.477091 +0.0390555 0.064539 0.0335561 0.52791 0.479355 +0.0396386 0.064502 0.0326274 0.482775 0.5 +0.0400501 0.0644468 0.0314841 0.449079 0.36475 +0.0404558 0.0643575 0.0302495 0.458272 0.5 +0.0409886 0.0643095 0.0292691 0.606685 0.5 +0.0416741 0.0642804 0.0284921 0.699938 0.5 +0.0424682 0.0642865 0.0278791 0.734582 0.5 +0.0253647 0.107408 0.0385761 0.53017 0.462618 +-0.0656743 0.138242 0.0419702 0.679753 0.5 +-0.0651151 0.138224 0.0409979 0.646809 0.5 +-0.0645614 0.138204 0.0400205 0.623113 0.5 +-0.0640566 0.138182 0.0390191 0.583891 0.400116 +-0.0635813 0.138158 0.0379352 0.532353 0.5 +0.0263222 0.107421 0.038207 0.538938 0.5 +0.0523558 0.0647992 0.0281407 0.516585 0.458981 +0.053298 0.0648217 0.0277585 0.536787 0.5 +0.0541591 0.0648613 0.0272743 0.548165 0.5 +0.0550352 0.064867 0.0267865 0.679674 0.5 +0.0558147 0.064873 0.0261542 0.708676 0.5 +0.056541 0.064854 0.0254614 0.714498 0.5 +0.0572159 0.0648465 0.024658 0.695209 0.5 +0.0578503 0.0648244 0.0238145 0.667634 0.5 +0.0584157 0.0647883 0.022872 0.639259 0.5 +0.0589424 0.064749 0.0219118 0.610071 0.5 +0.059454 0.0647075 0.0208869 0.587831 0.5 +-0.0228186 0.161021 -0.00330981 0.476342 0.5 +0.0384382 0.0954258 0.0328906 0.72934 0.5 +-0.0455156 0.14919 0.00769333 0.67521 0.5 +-0.0489525 0.123989 0.0308621 0.606108 0.5 +-0.0765303 0.0961207 -0.0124976 0.54536 0.5 +-0.0526525 0.152155 0.0150192 0.578815 0.5 +-0.00382186 0.102465 0.0438439 0.315362 0.5 +0.0435599 0.0987371 0.0131605 0.565136 0.484504 +-0.01542 0.16691 -0.0137031 0.536585 0.5 +-0.0227031 0.175691 -0.0136597 0.647705 0.5 +-0.0251232 0.165382 -0.00841584 0.487747 0.5 +0.0272256 0.10745 0.0377741 0.650486 0.44631 +-0.0592557 0.146819 0.0355066 0.591479 0.5 +-0.0685122 0.141137 0.0449382 0.661357 0.5 +-0.0690362 0.134069 0.0476421 0.689425 0.5 +-0.063822 0.115596 0.0429106 0.276156 0.302171 +0.00821862 0.116409 0.0384227 0.665567 0.5 +0.0280941 0.107442 0.0372758 0.66119 0.5 +0.0289072 0.10744 0.0367037 0.687127 0.5 +0.0364086 0.0854455 -0.0167057 0.763195 0.5 +-0.0504088 0.153575 0.0112235 0.590882 0.5 +-0.0222119 0.158173 -0.00418672 0.207108 0.420372 +0.0296356 0.107455 0.0360045 0.710494 0.5 +-0.0211595 0.178661 -0.0149212 0.634352 0.5 +0.0202943 0.113982 0.0365633 0.517918 0.5 +-0.0321751 0.162395 -0.00280539 0.579474 0.5 +-0.0405048 0.15944 0.00272423 0.627253 0.5 +-0.0413443 0.159411 0.00325579 0.670845 0.5 +-0.0487462 0.118344 0.031163 0.653906 0.5 +-0.0602206 0.142504 0.0358229 0.598748 0.474706 +-0.0719982 0.132651 0.0504199 0.580116 0.5 +0.0388075 0.10554 0.0251669 0.524183 0.5 +-0.0463216 0.125305 0.0258345 0.50917 0.5 +0.0372771 0.100696 0.0312566 0.71868 0.5 +-0.0550975 0.13533 0.0326236 0.684823 0.5 +0.0303546 0.107428 0.0353018 0.734997 0.5 +0.0310626 0.107429 0.0345663 0.731713 0.5 +-0.0199842 0.183117 -0.0149159 0.377679 0.468152 +-0.037643 0.153612 0.00331291 0.540201 0.5 +-0.0342528 0.161016 -0.000502552 0.609058 0.5 +0.0317406 0.107408 0.0337947 0.724296 0.5 +-0.0658919 0.11864 0.0504465 0.625416 0.5 +0.0375072 0.103901 -0.00584413 0.573123 0.393929 +-0.015926 0.178652 -0.0196554 0.724646 0.5 +0.0323761 0.107397 0.032947 0.717944 0.5 +0.0330114 0.107386 0.0320976 0.717834 0.5 +0.00980894 0.0658051 0.0545289 0.473712 0.458155 +0.0106377 0.0658124 0.0539651 0.49249 0.477881 +0.0114981 0.0658063 0.0534716 0.498805 0.447296 +0.0125705 0.0658518 0.0532694 0.601289 0.5 +0.0135851 0.0658847 0.0529797 0.604506 0.5 +0.0144807 0.0658974 0.0525165 0.577132 0.473808 +0.0152433 0.0658912 0.0518711 0.487502 0.430578 +0.0160126 0.0658829 0.0512178 0.593372 0.434385 +0.0168274 0.0658911 0.0506364 0.596714 0.439774 +0.0176716 0.0658898 0.0500991 0.599504 0.5 +0.0185331 0.065881 0.0495848 0.603282 0.5 +0.0194077 0.0659 0.0490938 0.596221 0.5 +0.0201466 0.0658754 0.0483972 0.578155 0.5 +0.0209269 0.0658956 0.0477693 0.5624 0.5 +0.0216497 0.065881 0.0470485 0.748456 0.5 +0.0223728 0.0658814 0.0463438 0.754701 0.5 +0.0231843 0.0658868 0.0457612 0.597499 0.5 +0.0240158 0.0658883 0.0452055 0.505543 0.5 +0.0249025 0.0659023 0.0447242 0.511412 0.415958 +0.0258384 0.0659192 0.0443144 0.628942 0.5 +0.0267481 0.0659374 0.0438828 0.527557 0.400956 +0.0276466 0.0659543 0.0434322 0.447537 0.5 +0.0285253 0.065965 0.0429423 0.648941 0.5 +0.0293518 0.0659692 0.0423806 0.661967 0.5 +0.0301634 0.0659717 0.0417895 0.645753 0.5 +0.0309495 0.065969 0.041175 0.519585 0.5 +0.0318042 0.0661523 0.0406683 0.51335 0.397598 +0.0327067 0.0659933 0.0401778 0.449943 0.477912 +0.033595 0.0660055 0.039722 0.523576 0.403339 +0.0344601 0.0660136 0.0392214 0.638421 0.5 +0.035272 0.0660164 0.0386352 0.642226 0.5 +0.0359859 0.0660034 0.0379002 0.653141 0.5 +0.0366758 0.0659888 0.0371374 0.643893 0.5 +0.0373151 0.0659642 0.0362985 0.642211 0.5 +0.0379519 0.0659398 0.0354557 0.635273 0.462322 +0.038582 0.0659177 0.034606 0.591229 0.5 +0.0391807 0.0658814 0.0336832 0.552731 0.5 +0.0397392 0.0658643 0.0327972 0.522701 0.5 +0.0401246 0.0657991 0.0315825 0.475951 0.38016 +0.0405117 0.0657145 0.0303349 0.459235 0.5 +0.0410401 0.0656705 0.029359 0.48049 0.5 +0.0416085 0.0656213 0.0284032 0.66857 0.5 +0.0422961 0.0655994 0.0276352 0.73308 0.5 +0.0336777 0.107392 0.0312726 0.726369 0.5 +-0.0680503 0.114246 0.0489904 0.305329 0.5 +0.0404169 0.104204 0.0201615 0.551338 0.5 +-0.0945117 0.124183 0.0222757 0.652984 0.5 +-0.0918785 0.141976 0.0181723 0.510798 0.5 +0.00739775 0.110951 0.0406753 0.513366 0.394533 +-0.0220459 0.166878 -0.0109827 0.494113 0.476102 +0.0343886 0.107359 0.0305696 0.717189 0.5 +0.0350466 0.107363 0.0297386 0.695974 0.5 +0.0538716 0.0661448 0.0268494 0.534057 0.5 +0.0547452 0.0661481 0.0263648 0.54415 0.485133 +0.0555832 0.0661715 0.0258304 0.67885 0.5 +0.0562967 0.0661688 0.0251012 0.713784 0.5 +0.0569921 0.0661536 0.0243514 0.699599 0.5 +0.0576451 0.0661396 0.0235216 0.695403 0.5 +0.0582502 0.0661055 0.0226582 0.681279 0.5 +0.0588141 0.0660698 0.0217199 0.647527 0.5 +0.0593498 0.066038 0.0207029 0.518292 0.485754 +-0.0193156 0.162502 -0.00702982 0.516542 0.5 +-0.0183092 0.162495 -0.00732366 0.497054 0.5 +-0.0896326 0.092928 0.0134378 0.786374 0.5 +-0.0286777 0.158132 0.000508817 0.402765 0.431383 +-0.0411616 0.152146 0.00524032 0.602558 0.5 +0.0234256 0.0994865 0.0445818 0.586465 0.441957 +0.0145806 0.0953173 0.0493246 0.473201 0.5 +-0.0250378 0.174204 -0.0117666 0.638721 0.5 +-0.0310269 0.122601 -0.0056394 0.546895 0.5 +0.00826283 0.110977 0.0402103 0.518692 0.5 +-0.0262483 0.175689 -0.00998917 0.699467 0.5 +-0.0278862 0.165359 -0.00713919 0.605976 0.5 +0.0356733 0.107346 0.028881 0.674237 0.5 +-0.0616087 0.146812 0.0373554 0.484967 0.5 +0.02687 0.0981666 0.0425225 0.70151 0.5 +-0.0713393 0.134067 0.0496215 0.616921 0.5 +-0.0634008 0.115527 0.0417242 0.336253 0.5 +-0.0619683 0.12268 0.0437909 0.585088 0.5 +0.00727028 0.11232 0.040519 0.512328 0.481525 +0.00823253 0.112336 0.0401545 0.517205 0.5 +0.026785 0.0955535 0.0441601 0.671773 0.5 +-0.0642124 0.145356 0.038849 0.606047 0.450352 +0.0363312 0.107346 0.0280412 0.659634 0.5 +0.0369412 0.107321 0.0271722 0.642857 0.5 +-0.0204109 0.178661 -0.0155986 0.651653 0.5 +0.0435098 0.098719 0.0141568 0.559852 0.416964 +-0.0312005 0.162424 -0.00314295 0.572768 0.5 +0.0375 0.107296 0.0262149 0.524026 0.5 +-0.0501563 0.11976 0.0326732 0.82147 0.5 +-0.0697019 0.142554 0.0449861 0.526849 0.5 +-0.0618022 0.142496 0.0370478 0.767508 0.5 +-0.0728584 0.132623 0.0509226 0.465801 0.483687 +0.0455125 0.0918121 0.0101608 0.580574 0.443672 +-0.0468272 0.125328 0.0268353 0.557609 0.5 +0.0452718 0.0917995 0.0131601 0.563024 0.43752 +0.0451896 0.0875706 0.0191665 0.500158 0.5 +-0.0188178 0.158773 -0.00942574 0.275435 0.101077 +0.0199962 0.120682 0.0326204 0.550146 0.5 +0.0190263 0.120653 0.0329746 0.551416 0.5 +-0.0164884 0.161116 -0.0081783 0.258762 0.5 +-0.0512269 0.150712 0.0135153 0.524713 0.5 +0.0272712 0.0929162 0.0448522 0.639428 0.5 +-0.0665361 0.11864 0.0512424 0.526685 0.5 +0.0413993 0.0942972 -0.00577735 0.602541 0.5 +-0.0583279 0.116979 0.0383609 0.70259 0.5 +-0.0676248 0.117206 0.0513943 0.493263 0.5 +-0.0626788 0.119898 0.0446407 0.544333 0.5 +-0.0543257 0.121248 0.0372193 0.518648 0.5 +0.0107631 0.0671702 0.0541647 0.518732 0.5 +0.0117494 0.0671858 0.0538619 0.52863 0.5 +0.0127465 0.0672208 0.05354 0.508794 0.477102 +0.0136958 0.0672461 0.0531523 0.600943 0.5 +0.0145592 0.0672414 0.0526521 0.621926 0.421102 +0.0153602 0.0672491 0.0520407 0.626918 0.421284 +0.0161339 0.0672434 0.0514025 0.616442 0.5 +0.0170086 0.0672594 0.0509139 0.616964 0.5 +0.0178682 0.0672532 0.0504022 0.623063 0.5 +0.0187375 0.0672729 0.0498973 0.619677 0.5 +0.0195403 0.0672509 0.0492981 0.63402 0.5 +0.0203517 0.0672611 0.0487139 0.607034 0.5 +0.0211493 0.0672779 0.0481082 0.56964 0.5 +0.0218458 0.0672628 0.0473581 0.555952 0.474328 +0.0224908 0.0672402 0.0465227 0.57899 0.5 +0.0232051 0.0672264 0.0457926 0.61117 0.5 +0.0239769 0.0672243 0.0451455 0.526766 0.457832 +0.0248126 0.0672364 0.0446067 0.527882 0.5 +0.0257216 0.0672521 0.0441644 0.529769 0.5 +0.0266626 0.0672707 0.0437593 0.63368 0.406809 +0.0275533 0.0672844 0.0433037 0.63042 0.5 +0.0283911 0.0672932 0.0427559 0.618743 0.408002 +0.0292682 0.0673021 0.0422638 0.527681 0.481734 +0.0301602 0.0673157 0.0417954 0.526578 0.386965 +0.0309974 0.0673207 0.0412553 0.531045 0.464207 +0.0318595 0.0673315 0.0407335 0.521176 0.5 +0.0326609 0.0673309 0.0401471 0.528099 0.5 +0.0335232 0.0673414 0.0396281 0.652719 0.5 +0.0343622 0.0673468 0.0390872 0.656507 0.5 +0.0351918 0.0673501 0.0385292 0.667295 0.5 +0.0359531 0.0673443 0.0378699 0.677102 0.5 +0.0366467 0.0673305 0.0371158 0.668479 0.5 +0.0373115 0.0673123 0.0362946 0.661392 0.448869 +0.0379734 0.0672941 0.0355158 0.654057 0.5 +0.0386277 0.0672715 0.0346845 0.637523 0.5 +0.0392491 0.0672477 0.0338308 0.605916 0.5 +0.0397983 0.0672171 0.0328832 0.558616 0.5 +0.0401742 0.0671588 0.0316675 0.531696 0.399429 +0.0405833 0.0670896 0.0305002 0.477264 0.5 +0.0410895 0.0670315 0.0294468 0.494742 0.5 +0.0416371 0.0669849 0.0284796 0.506431 0.5 +0.042292 0.0669509 0.0276386 0.666045 0.5 +0.0380905 0.0941294 0.0341306 0.719037 0.5 +0.0374948 0.0941477 0.0350502 0.716219 0.5 +-0.0533723 0.122605 0.0368904 0.453635 0.459199 +-0.0636947 0.167813 -0.0415938 0.676665 0.5 +-0.0499699 0.150693 0.011804 0.563853 0.5 +0.0289699 0.100814 0.0402993 0.699713 0.5 +0.0270691 0.0942437 0.0445649 0.655616 0.5 +-0.0173046 0.166847 -0.0129407 0.571175 0.485287 +-0.0660514 0.11246 0.0412419 0.234473 0.5 +0.012627 0.12184 0.0342326 0.518073 0.468674 +0.0543584 0.0674371 0.0258007 0.524996 0.477246 +0.0551973 0.0674594 0.0252672 0.658829 0.5 +0.055991 0.067441 0.024671 0.667642 0.5 +0.0566945 0.0674374 0.0239376 0.648033 0.5 +0.0573469 0.0674291 0.0231143 0.65906 0.5 +0.057983 0.0674087 0.022273 0.638889 0.5 +0.0585628 0.0673807 0.0213416 0.654851 0.5 +0.0591195 0.067343 0.0203999 0.531504 0.5 +-0.0108819 0.168382 -0.0176467 0.41844 0.5 +-0.0871678 0.11039 0.0183619 0.695558 0.5 +0.0262873 0.0942382 0.0451936 0.615457 0.5 +0.0254813 0.0942452 0.0457882 0.58855 0.5 +0.0425948 0.0873487 -0.0068057 0.476941 0.480438 +0.0242439 0.0994852 0.044008 0.623394 0.5 +0.0222133 0.103397 0.0428172 0.522655 0.440485 +0.0382182 0.0855917 -0.0147556 0.716591 0.5 +0.0227131 0.118044 0.0330191 0.646712 0.5 +-0.0645332 0.120008 0.0489179 0.570466 0.5 +-0.0256005 0.175695 -0.0107936 0.745944 0.5 +-0.0269915 0.165366 -0.00760144 0.487334 0.5 +0.0311369 0.0982118 0.0399163 0.736773 0.5 +-0.060703 0.146825 0.0369155 0.499921 0.405658 +0.0346875 0.0955379 0.0380285 0.726675 0.5 +-0.0704989 0.134077 0.0490714 0.653153 0.5 +0.0402562 0.0857576 -0.0117696 0.626692 0.5 +-0.08903 0.119932 0.00232561 0.489189 0.46842 +0.0278524 0.115393 0.0316598 0.661807 0.5 +0.00914326 0.112364 0.0397506 0.639377 0.5 +0.0199447 0.104671 0.0430468 0.608918 0.5 +0.0261701 0.115347 0.0327443 0.543538 0.5 +-0.0313524 0.158102 0.00192058 0.465175 0.468323 +-0.0716025 0.135501 0.0492566 0.514513 0.5 +0.0208423 0.104696 0.0425993 0.607309 0.5 +-0.0665376 0.142546 0.0425061 0.631983 0.5 +-0.0243462 0.1625 -0.00551798 0.602812 0.5 +-0.0564715 0.132545 0.0359114 0.644132 0.5 +-0.0287301 0.172704 -0.00834509 0.744458 0.5 +-0.0626161 0.12969 0.0410793 0.709268 0.5 +-0.0703202 0.132668 0.0493213 0.643955 0.5 +-0.0737927 0.132633 0.0513524 0.552661 0.470035 +-0.0521163 0.12407 0.0351298 0.552853 0.5 +-0.061834 0.155291 -0.0275862 0.75179 0.5 +-0.0472614 0.125357 0.0280089 0.557551 0.5 +0.0360361 0.100737 0.0329764 0.71908 0.5 +-0.071322 0.138326 0.0479203 0.509094 0.5 +-0.0556635 0.140996 0.0299986 0.696827 0.5 +0.0179914 0.120614 0.0332262 0.546047 0.471468 +-0.0571296 0.124118 0.0402058 0.602284 0.5 +0.0141724 0.0940368 0.0505038 0.494686 0.5 +-0.0691196 0.118603 0.052746 0.544288 0.5 +-0.0681757 0.118633 0.0523539 0.525895 0.5 +-0.0673284 0.11863 0.0518333 0.437548 0.483064 +-0.0181358 0.159669 -0.00704365 0.200267 0.431458 +-0.0593768 0.116855 0.0386274 0.677584 0.5 +-0.066902 0.117219 0.0507079 0.466432 0.5 +-0.0850563 0.112998 0.00231897 0.468972 0.5 +-0.0349979 0.152158 8.20736e-05 0.217633 0.5 +0.0109305 0.0685438 0.0544088 0.521236 0.5 +0.0118954 0.0685639 0.0540604 0.52613 0.5 +0.0127964 0.0685744 0.0536204 0.522685 0.460878 +0.0136873 0.0685864 0.0531495 0.524217 0.42208 +0.0145324 0.0686382 0.0526166 0.55114 0.472671 +0.0154246 0.0685991 0.0521564 0.644486 0.5 +0.0163171 0.0686116 0.0516854 0.641422 0.5 +0.0172066 0.068625 0.0512164 0.627692 0.5 +0.0180859 0.068641 0.0507282 0.634288 0.435356 +0.0189031 0.068639 0.0501604 0.641485 0.426302 +0.0196742 0.0686359 0.0495084 0.610895 0.437487 +0.0205204 0.0686316 0.0489712 0.607491 0.5 +0.0213879 0.0686569 0.0484685 0.571849 0.5 +0.0220783 0.0686046 0.0476717 0.547256 0.315596 +0.0227469 0.0686119 0.0468992 0.559099 0.5 +0.0234128 0.0685823 0.0460905 0.595039 0.5 +0.0240933 0.0685753 0.045325 0.622852 0.474797 +0.0248522 0.0685926 0.0446792 0.637127 0.5 +0.0256802 0.0685786 0.0440967 0.526623 0.459428 +0.0265401 0.0686018 0.0436052 0.636912 0.390105 +0.0274255 0.0686124 0.0431235 0.621572 0.473706 +0.02824 0.0686155 0.0425458 0.615322 0.5 +0.0291321 0.0686302 0.0420784 0.61093 0.475056 +0.0300864 0.0686462 0.0416997 0.612279 0.409693 +0.0309993 0.0686673 0.04128 0.45164 0.472023 +0.0318792 0.0686784 0.0407831 0.530233 0.5 +0.0327041 0.0686805 0.0402125 0.526173 0.454035 +0.0335035 0.0686838 0.0396083 0.647537 0.463149 +0.0342696 0.0686799 0.038964 0.654142 0.5 +0.0350895 0.0686836 0.0383949 0.660078 0.5 +0.0358581 0.0686798 0.0377462 0.662199 0.5 +0.0365837 0.0686678 0.0370221 0.666144 0.5 +0.0372641 0.0686531 0.0362559 0.665309 0.5 +0.0379445 0.0686366 0.0354907 0.659756 0.5 +0.0386091 0.0686148 0.0346703 0.656566 0.5 +0.0392359 0.0685928 0.0338195 0.64157 0.5 +0.0397534 0.0685495 0.0327941 0.622305 0.5 +0.0402167 0.0685122 0.0317439 0.561402 0.401001 +0.0407099 0.0684593 0.0306869 0.525142 0.5 +0.0412086 0.0684033 0.0296357 0.501655 0.38748 +0.0417276 0.0683416 0.0285931 0.531655 0.427593 +0.0423379 0.0683118 0.0277209 0.531296 0.5 +0.0429413 0.0682748 0.0268013 0.687016 0.5 +-0.0451437 0.162134 -0.00879907 0.407968 0.463942 +0.0385464 0.0954957 -0.00890109 0.604944 0.459455 +-0.0907403 0.135093 0.0162106 0.511035 0.476829 +-0.0889612 0.111861 0.0183359 0.64879 0.361483 +0.0348249 0.110986 -0.0028353 0.531763 0.5 +-0.0577114 0.148197 0.0324041 0.584956 0.431355 +-0.0317958 0.166782 -0.0057687 0.577859 0.5 +0.0101281 0.105858 -0.0202342 0.555463 0.483996 +-0.0410438 0.162368 0.00371458 0.501741 0.5 +-0.0210995 0.166843 -0.0113898 0.486474 0.5 +0.0547648 0.068691 0.024634 0.454449 0.5 +0.0555795 0.068697 0.0240751 0.612284 0.5 +0.0563251 0.0686891 0.0234174 0.6125 0.5 +0.0569791 0.0686933 0.0226042 0.603878 0.5 +0.0576172 0.0686777 0.0217698 0.602207 0.5 +0.0582269 0.0686747 0.0208601 0.509919 0.5 +0.0587791 0.0686289 0.0199155 0.576185 0.470628 +0.030839 0.0995119 0.0394948 0.728183 0.5 +0.0300963 0.0995295 0.0401727 0.720012 0.5 +0.0293195 0.0995163 0.0407971 0.702609 0.5 +0.0257555 0.0994695 0.0426751 0.717115 0.5 +0.025022 0.0994981 0.0433749 0.666101 0.5 +-0.0332792 0.168261 -0.00439757 0.672715 0.5 +-0.063261 0.129725 0.0418859 0.732681 0.5 +-0.0118724 0.166916 -0.0155725 0.357309 0.5 +-0.0561549 0.118392 0.0380484 0.641897 0.5 +0.0457594 0.0890174 0.0101642 0.577073 0.5 +-0.0511271 0.116882 0.0329705 0.907043 0.5 +0.0234999 0.0955508 0.0464417 0.458828 0.5 +-0.0299391 0.175699 -0.00474628 0.462354 0.5 +-0.0280713 0.175691 -0.00734553 0.584109 0.5 +-0.0260362 0.165356 -0.00798775 0.486992 0.480924 +-0.0628457 0.158366 -0.0406006 0.825817 0.5 +-0.0598823 0.146825 0.0363335 0.595777 0.5 +-0.0623153 0.13671 0.0362243 0.607214 0.5 +-0.0697355 0.134074 0.048407 0.674051 0.5 +0.0444906 0.0861036 -0.00180248 0.460512 0.38869 +-0.025842 0.091626 -0.0326108 0.318475 0.5 +-0.0636699 0.112355 0.0376208 0.47227 0.5 +0.021724 0.104691 0.0421173 0.612004 0.5 +0.00897502 0.113705 0.0394792 0.51545 0.5 +-0.0576238 0.145329 0.032529 0.633307 0.5 +-0.0322455 0.15809 0.00238998 0.605697 0.5 +-0.0389196 0.163835 0.00150184 0.585349 0.5 +-0.0269539 0.17866 -0.00745161 0.351994 0.469507 +-0.0196772 0.178663 -0.0162873 0.661569 0.5 +-0.0233093 0.162498 -0.00577898 0.554903 0.5 +-0.0127527 0.177163 -0.0221029 0.731023 0.5 +-0.0336234 0.153659 0.000337049 0.413408 0.5 +-0.0691412 0.109612 0.0381472 0.310297 0.5 +-0.0711513 0.132664 0.0498849 0.60916 0.460723 +-0.0501055 0.129693 0.0310292 0.695152 0.5 +-0.0494838 0.129682 0.0301574 0.659103 0.5 +-0.0477839 0.125387 0.0290716 0.56412 0.5 +-0.0631388 0.0620641 0.0242 0.425507 0.418571 +-0.0722375 0.138308 0.048356 0.616238 0.475432 +0.0225321 0.104677 0.0415312 0.633917 0.5 +0.0169102 0.120624 0.0334304 0.553635 0.477422 +0.0385227 0.108358 0.00315989 0.447005 0.481155 +-0.0651299 0.139658 0.0409855 0.658454 0.5 +0.0394117 0.0870933 -0.0127933 0.670586 0.5 +-0.0170638 0.168326 -0.0143421 0.495958 0.485107 +-0.0308588 0.171231 -0.00613945 0.686245 0.5 +0.0108601 0.117776 0.0369396 0.568646 0.402135 +-0.0603515 0.116839 0.0389782 0.584661 0.5 +-0.0662568 0.117183 0.0498756 0.429462 0.358709 +-0.0636469 0.11387 0.0394431 0.428062 0.5 +0.0396279 0.0857065 -0.0127726 0.633155 0.5 +0.0100468 0.0698695 0.0549195 0.523545 0.5 +0.0109957 0.0698921 0.0545336 0.520281 0.465115 +0.0118973 0.0699023 0.0540919 0.545085 0.463944 +0.0127846 0.0699169 0.0536174 0.552973 0.392796 +0.0137184 0.0699424 0.0531931 0.556582 0.5 +0.0146499 0.0699433 0.0528108 0.533909 0.455295 +0.0155988 0.0699697 0.0524229 0.508389 0.482945 +0.0164839 0.0699861 0.0519409 0.609426 0.5 +0.0173223 0.0699836 0.0514025 0.615488 0.5 +0.018149 0.0699846 0.0508404 0.622089 0.5 +0.0189748 0.0699869 0.0502663 0.624556 0.417564 +0.0198393 0.0700116 0.0497622 0.615212 0.455546 +0.0207672 0.0700064 0.0493524 0.489853 0.5 +0.0216229 0.0700379 0.048827 0.574345 0.5 +0.022407 0.0700249 0.0481925 0.550559 0.5 +0.0230994 0.0700125 0.0474321 0.540463 0.5 +0.0237226 0.0699627 0.0465409 0.556883 0.471716 +0.0243671 0.0699418 0.0457082 0.593532 0.5 +0.0250153 0.0699448 0.0449142 0.613685 0.5 +0.0257185 0.0699313 0.0441746 0.623085 0.47825 +0.0265464 0.0699406 0.043619 0.630192 0.374929 +0.0273636 0.0699427 0.0430425 0.798944 0.5 +0.0281616 0.0699505 0.0424355 0.791952 0.5 +0.029005 0.0699505 0.0419019 0.786505 0.394386 +0.0299489 0.069977 0.0415097 0.783182 0.5 +0.0309459 0.0700081 0.0411857 0.504887 0.479723 +0.0319241 0.0700307 0.0408624 0.461033 0.5 +0.032766 0.0700345 0.0403232 0.523997 0.5 +0.0335736 0.0700381 0.039723 0.520063 0.5 +0.0342867 0.0700233 0.0389954 0.631772 0.5 +0.0350254 0.0700182 0.0383083 0.632795 0.5 +0.0357777 0.070014 0.0376374 0.634277 0.5 +0.0365023 0.0700019 0.0369139 0.638259 0.5 +0.037196 0.0699864 0.036159 0.649877 0.5 +0.0378948 0.0699732 0.0354084 0.65393 0.5 +0.0385734 0.0699568 0.0346425 0.657978 0.5 +0.039204 0.0699354 0.0337973 0.666755 0.5 +0.0397845 0.0699028 0.0328672 0.634715 0.5 +0.0402901 0.0698645 0.0318359 0.619487 0.437647 +0.0407992 0.0698146 0.0307925 0.550071 0.442242 +0.0413281 0.0697537 0.029756 0.559058 0.5 +0.041872 0.069712 0.028792 0.539829 0.5 +0.0424296 0.0696684 0.0278335 0.555314 0.5 +0.0429689 0.0696277 0.0268653 0.539825 0.5 +0.0435566 0.0695959 0.0259839 0.545905 0.457047 +-0.0609918 0.138116 0.0346365 0.650821 0.5 +-0.0472353 0.12392 0.0280317 0.645777 0.330396 +-0.0564929 0.14962 0.0306387 0.531166 0.5 +-0.089555 0.092956 0.0194329 0.888923 0.5 +-0.0856221 0.107687 0.0203552 0.522147 0.5 +-0.0132244 0.172771 -0.0193112 0.702627 0.5 +0.025387 0.103408 0.0403826 0.65353 0.5 +-0.012493 0.16839 -0.0164935 0.387522 0.5 +0.0196457 0.116633 0.0356159 0.527334 0.464925 +-0.0465526 0.147719 0.00793526 0.608184 0.5 +-0.0923088 0.114683 0.0143254 0.530043 0.5 +0.0424576 0.0845381 -0.00679736 0.588922 0.5 +0.035312 0.0840703 -0.0177861 0.760295 0.5 +-0.087117 0.119846 -0.000719646 0.455279 0.5 +-0.0295401 0.0904607 -0.0275932 0.320828 0.5 +-0.0869304 0.137738 0.00419643 0.523633 0.5 +-0.0591124 0.121234 0.0408265 0.560027 0.5 +-0.0166266 0.172732 -0.0172138 0.691154 0.5 +-0.0126907 0.166905 -0.0150111 0.537053 0.5 +-0.0534544 0.124093 0.0367404 0.576577 0.5 +-0.0496436 0.132456 0.0281905 0.64907 0.5 +-0.00359831 0.101107 0.0440537 0.167895 0.5 +-0.018333 0.172741 -0.0161594 0.693897 0.5 +-0.0276246 0.160982 -0.00149388 0.523221 0.5 +0.0239184 0.116674 0.0330029 0.675658 0.5 +-0.0292161 0.178518 -0.014988 0.410612 0.5 +-0.0717812 0.166615 -0.0459981 0.461397 0.5 +-0.021174 0.184521 -0.0131308 0.279829 0.5 +-0.0180884 0.184586 -0.0174536 0.387636 0.5 +-0.0518449 0.146252 0.0164181 0.764123 0.368688 +-0.0121699 0.165481 -0.0142428 0.370041 0.5 +-0.0293004 0.175699 -0.00559167 0.562984 0.5 +-0.0175288 0.165418 -0.0114925 0.675539 0.5 +-0.0672114 0.120049 0.0520179 0.548312 0.5 +-0.042525 0.149193 0.00498605 0.368234 0.5 +0.0377895 0.0954381 0.0337234 0.725496 0.5 +-0.0676947 0.134039 0.046063 0.738464 0.5 +0.0232916 0.104676 0.0408599 0.625746 0.5 +0.0454321 0.0861887 0.0181684 0.51319 0.5 +-0.0625128 0.145366 0.0377954 0.583206 0.425668 +-0.0627767 0.112367 0.0371562 0.752748 0.5 +0.0415013 0.104244 0.010161 0.698399 0.5 +-0.0282274 0.162443 -0.0041123 0.510213 0.5 +-0.0331542 0.158077 0.00281987 0.493673 0.5 +-0.0383322 0.163825 0.00056966 0.610793 0.5 +0.0214629 0.119376 0.0329783 0.622625 0.5 +-0.018937 0.178659 -0.0169738 0.674287 0.5 +-0.0165785 0.162548 -0.00831661 0.315446 0.5 +-0.0246821 0.177174 -0.0112336 0.695392 0.5 +-0.0697849 0.145343 0.0431021 0.506731 0.5 +-0.0520915 0.129726 0.0334448 0.714169 0.5 +-0.065267 0.132559 0.042478 0.721728 0.5 +-0.0507289 0.129704 0.0318965 0.712353 0.5 +-0.0483005 0.12541 0.0300666 0.628073 0.5 +-0.0495314 0.12548 0.031876 0.541561 0.440877 +0.0451823 0.091796 0.014161 0.551352 0.5 +-0.0601994 0.14968 0.0358889 0.438983 0.5 +-0.0174189 0.178658 -0.0183022 0.695317 0.5 +0.0141007 0.120583 0.0346592 0.509822 0.47749 +-0.0187779 0.183117 -0.0166827 0.438297 0.5 +-0.0644392 0.112372 0.0382632 0.401383 0.5 +-0.00881786 0.169637 -0.0227487 0.280072 0.5 +0.0367516 0.111162 0.00316661 0.512405 0.5 +-0.0594982 0.143919 0.0350801 0.618764 0.5 +-0.0618021 0.116863 0.0404147 0.40334 0.5 +-0.061134 0.11687 0.0396165 0.480917 0.5 +-0.0656399 0.11715 0.0490043 0.391457 0.5 +-0.064559 0.11407 0.0417666 0.226957 0.344441 +-0.0588484 0.13671 0.0342246 0.529076 0.5 +-0.0256856 0.161028 -0.00218154 0.553724 0.5 +0.0101515 0.071231 0.055077 0.508661 0.5 +0.0110379 0.0712445 0.0546046 0.533198 0.406627 +0.0119051 0.0711889 0.0540767 0.543143 0.399975 +0.0128317 0.0712714 0.0536973 0.551547 0.456115 +0.0138055 0.0712841 0.0533593 0.542904 0.5 +0.014817 0.0713159 0.0530708 0.527096 0.479054 +0.0156656 0.0713152 0.0525386 0.630846 0.5 +0.0164758 0.0713296 0.0519403 0.622355 0.411602 +0.0172645 0.0713208 0.051333 0.599917 0.41259 +0.01814 0.0713245 0.0508426 0.603323 0.5 +0.0190831 0.0713469 0.0504539 0.605162 0.477301 +0.0200754 0.0713524 0.0501382 0.489503 0.5 +0.0210136 0.0713836 0.0497227 0.548091 0.5 +0.0218587 0.0714183 0.0491823 0.547129 0.456798 +0.0226382 0.0714084 0.0485432 0.551844 0.5 +0.0233607 0.0713858 0.0478141 0.543289 0.5 +0.0240483 0.0713748 0.0470522 0.54162 0.5 +0.0246484 0.0713321 0.0461382 0.740969 0.5 +0.0252483 0.0713214 0.0452679 0.77396 0.5 +0.0259161 0.0713197 0.0444841 0.608867 0.482043 +0.0266728 0.0713177 0.0438181 0.618793 0.5 +0.0275195 0.0713136 0.0432798 0.61548 0.5 +0.0283147 0.0712973 0.0426773 0.627412 0.5 +0.0291103 0.0713139 0.0420683 0.612886 0.5 +0.0299408 0.0713176 0.0415086 0.606777 0.5 +0.0308676 0.0713453 0.0410867 0.6202 0.5 +0.0318279 0.0713659 0.0407221 0.524933 0.405217 +0.0327952 0.0713854 0.0403707 0.46481 0.481423 +0.0336335 0.0713894 0.0398251 0.521761 0.5 +0.0344259 0.0713949 0.0392126 0.508518 0.482772 +0.0351443 0.071382 0.0384881 0.496004 0.474369 +0.0358497 0.0713653 0.0377445 0.599003 0.5 +0.0365208 0.0713424 0.036933 0.778467 0.5 +0.03717 0.0713299 0.0361376 0.629331 0.5 +0.0378679 0.0713179 0.0353865 0.644425 0.5 +0.0385608 0.0713011 0.0346329 0.659308 0.5 +0.0391956 0.0712805 0.0337887 0.668099 0.5 +0.0398005 0.0712586 0.0329247 0.663825 0.5 +0.040355 0.0712163 0.0319238 0.637702 0.5 +0.0409071 0.0711839 0.0309718 0.625301 0.5 +0.041469 0.0711384 0.0300167 0.587232 0.5 +0.0420248 0.0710795 0.0289899 0.578663 0.419261 +0.0425358 0.0710418 0.0280089 0.556526 0.409326 +0.0430366 0.0709859 0.0269587 0.530472 0.39971 +0.0435542 0.0709351 0.0259153 0.512215 0.5 +-0.0175786 0.180143 -0.0185198 0.689547 0.5 +0.0238985 0.104719 0.0399907 0.641658 0.5 +-0.0550412 0.129739 0.0362139 0.708833 0.5 +-0.0412659 0.160879 0.0033623 0.489506 0.5 +0.0247695 0.1047 0.0394768 0.679519 0.446721 +0.0294623 0.103445 0.0374919 0.716186 0.5 +0.0287346 0.10342 0.0381993 0.718504 0.5 +0.016206 0.0927227 0.0499244 0.588199 0.5 +-0.0102112 0.168384 -0.01842 0.418676 0.5 +0.0234983 0.102092 0.0429315 0.546507 0.5 +0.044803 0.0945847 0.0121616 0.568933 0.5 +0.0449279 0.0945923 0.00916323 0.583351 0.458071 +0.0404227 0.0885874 -0.0107894 0.65183 0.5 +-0.0635581 0.170962 -0.0485923 0.633288 0.5 +0.0424628 0.0943961 -0.00280162 0.62764 0.5 +0.0437182 0.0944809 0.000197915 0.500488 0.465994 +-0.0629007 0.115475 0.040648 0.270971 0.384624 +-0.0549375 0.140991 0.0293007 0.692792 0.5 +-0.0296475 0.169744 -0.0079151 0.602187 0.477333 +-0.00469334 0.101051 0.0441761 0.156474 0.5 +-0.00579523 0.10109 0.0444886 0.157516 0.5 +-0.0618436 0.129703 0.0404325 0.680191 0.5 +0.0257469 0.104744 0.0391433 0.68617 0.5 +-0.0148223 0.129108 0.012888 0.583399 0.5 +0.0428473 0.0944698 0.0251639 0.624562 0.5 +-0.0617056 0.1325 0.0388812 0.652222 0.5 +-0.055795 0.129741 0.0368819 0.699847 0.5 +-0.0146178 0.161254 -0.0115208 0.205382 0.362692 +-0.0105189 0.165484 -0.0170149 0.315109 0.5 +-0.010869 0.165486 -0.0158779 0.282043 0.5 +-0.0114637 0.165492 -0.0149909 0.367289 0.5 +-0.013694 0.165443 -0.0129401 0.492965 0.5 +-0.0165631 0.165424 -0.0118502 0.671314 0.5 +-0.0265381 0.155425 -0.00506198 0.178093 0 +-0.049617 0.115589 0.0334474 0.638704 0.5 +-0.0492065 0.128269 0.0305743 0.616005 0.5 +-0.0671166 0.134015 0.0451603 0.715464 0.5 +-0.0151683 0.160834 -0.010917 0.187224 0.5 +-0.0811951 0.147316 0.000164965 0.385889 0.468811 +0.040955 0.104188 0.00218636 0.447266 0.486809 +-0.0662654 0.129803 0.0463681 0.721028 0.5 +-0.0930208 0.116049 0.0173125 0.731976 0.5 +0.0230988 0.111339 0.037076 0.50846 0.485543 +0.0368789 0.0941727 0.035906 0.717372 0.5 +-0.043544 0.157959 0.00535766 0.686401 0.5 +-0.0300578 0.163895 -0.00500569 0.746097 0.5 +-0.0621481 0.159972 -0.0385982 0.416988 0.458325 +-0.0181797 0.178658 -0.0176382 0.684499 0.5 +-0.0158151 0.162561 -0.00896512 0.338073 0.5 +-0.0479563 0.0699321 0.0400053 0.715871 0.451422 +0.0260945 0.0981604 0.0431638 0.688628 0.5 +0.0329891 0.092935 0.0408139 0.642956 0.5 +-0.0480021 0.126873 0.0289133 0.500797 0.432799 +-0.051366 0.129708 0.032749 0.715462 0.5 +-0.0489136 0.125469 0.0310273 0.51556 0.453584 +-0.0825795 0.0937805 -0.00656944 0.601778 0.5 +-0.0938694 0.121489 0.0252875 0.78803 0.5 +-0.0354553 0.163829 -0.00227816 0.554226 0.449162 +0.0150413 0.120568 0.0342385 0.601063 0.467933 +-0.0145095 0.171282 -0.0176637 0.539439 0.5 +0.029169 0.114081 0.0318014 0.696767 0.5 +-0.0664147 0.112558 0.0425241 0.231408 0.5 +-0.0580383 0.122682 0.0406302 0.587422 0.5 +-0.0894336 0.0956291 0.0144221 0.620818 0.5 +-0.0139772 0.164028 -0.0115888 0.367106 0.5 +-0.0645869 0.117148 0.0471018 0.510162 0.5 +-0.0650728 0.117149 0.0481049 0.491618 0.5 +-0.0692254 0.124258 0.0526584 0.479475 0.468188 +0.0293141 0.095566 0.0425395 0.701781 0.5 +-0.0523232 0.13528 0.029621 0.676612 0.5 +0.00931572 0.0725689 0.0556419 0.492703 0.466531 +0.0102149 0.0725802 0.055192 0.488112 0.5 +0.0110403 0.0725847 0.0546235 0.510936 0.409117 +0.0119312 0.0725978 0.0541603 0.518053 0.5 +0.0129485 0.0726239 0.0538836 0.529645 0.463 +0.0140119 0.072675 0.0536492 0.51411 0.459202 +0.0148576 0.0726711 0.0531263 0.626757 0.5 +0.0156666 0.0726831 0.0525311 0.628313 0.41712 +0.0164183 0.0726599 0.0518741 0.617847 0.411641 +0.0173125 0.0726566 0.0514253 0.767044 0.5 +0.0183688 0.0727072 0.0511848 0.58223 0.5 +0.0194047 0.0727279 0.0509389 0.567191 0.5 +0.0203473 0.0727595 0.0505294 0.69767 0.5 +0.021227 0.0727783 0.05004 0.538031 0.5 +0.0220024 0.0727679 0.0493999 0.461232 0.460344 +0.0227593 0.0727654 0.0487302 0.467674 0.466859 +0.0235224 0.0727618 0.0480692 0.554454 0.476409 +0.024237 0.0727429 0.0473317 0.552612 0.482584 +0.0248868 0.0727438 0.0465386 0.738486 0.5 +0.0254616 0.0727112 0.0456024 0.777136 0.5 +0.0260763 0.0726986 0.044735 0.8021 0.5 +0.0269054 0.0726895 0.0441444 0.769142 0.377995 +0.0277999 0.0727164 0.0436883 0.621102 0.391455 +0.0286828 0.072686 0.0432253 0.609466 0.5 +0.0295237 0.0727272 0.042682 0.606223 0.5 +0.0302378 0.0727042 0.0419554 0.610148 0.5 +0.0310541 0.0727142 0.0413756 0.614248 0.5 +0.0318915 0.0727133 0.0408308 0.635904 0.5 +0.0327797 0.0727287 0.040356 0.653108 0.5 +0.03367 0.072742 0.0398859 0.531922 0.5 +0.0345395 0.0727588 0.0393885 0.515157 0.478087 +0.0352999 0.0727523 0.0387329 0.617034 0.481667 +0.0360152 0.072737 0.038003 0.601795 0.5 +0.0366581 0.0727136 0.0371657 0.599706 0.483489 +0.0371829 0.0726727 0.036151 0.610452 0.5 +0.0378457 0.0726607 0.0353699 0.628424 0.5 +0.038544 0.0726461 0.034619 0.657711 0.5 +0.0391967 0.0726247 0.033788 0.661089 0.5 +0.0398166 0.0726016 0.0329349 0.671178 0.5 +0.0404333 0.0725805 0.0320798 0.667486 0.5 +0.0409764 0.0725373 0.0310711 0.650389 0.432718 +0.0415492 0.0724945 0.03012 0.639516 0.5 +0.0421092 0.0724515 0.0291612 0.60126 0.408098 +0.0426104 0.0723991 0.0281081 0.560211 0.5 +0.0431148 0.0723568 0.0271232 0.528302 0.421673 +0.0435836 0.0722927 0.0259867 0.495151 0.5 +0.0440515 0.0722274 0.0248494 0.497047 0.43533 +0.0445188 0.0721805 0.0237826 0.440154 0.5 +-0.0904705 0.135055 0.0132171 0.701874 0.5 +-0.0761608 0.175035 -0.0499961 0.340571 0.5 +0.0101664 0.120462 0.0359466 0.536208 0.448729 +-0.00747581 0.101243 0.0443796 0.184133 0.310306 +-0.067061 0.0617728 0.0200983 0.414933 0.425841 +0.0430185 0.100102 0.00517011 0.55649 0.5 +0.0429574 0.0859786 -0.00579554 0.497324 0.5 +-0.0865396 0.139093 0.00420465 0.386321 0.5 +-0.0500004 0.121197 0.0329094 0.58059 0.5 +-0.0855325 0.107606 0.0053458 0.464205 0.5 +-0.0639176 0.153606 -0.0366205 0.513916 0.5 +-0.0286016 0.109083 -0.0194963 0.783101 0.5 +-0.0274751 0.109286 -0.019717 0.775813 0.5 +0.0360023 0.103374 0.0311349 0.713933 0.5 +-0.062221 0.119852 0.0434664 0.507793 0.39251 +-0.0623968 0.162983 -0.056654 0.606427 0.5 +0.0398312 0.0992984 0.027798 0.65587 0.5 +-0.084276 0.107651 0.0243439 0.534864 0.5 +0.0452717 0.0903987 0.0151606 0.540939 0.343946 +-0.0106344 0.174261 -0.0225996 0.601327 0.5 +-0.0360191 0.153642 0.00214438 0.519418 0.5 +-0.0821184 0.0782385 0.0256306 0.756683 0.5 +0.0437433 0.0945326 0.0221692 0.499969 0.48302 +-0.0781679 0.14865 -0.00288263 0.50053 0.439545 +-0.041856 0.149196 0.00419837 0.331183 0.5 +-0.0462327 0.128102 0.0242709 0.476533 0.461895 +-0.0340138 0.155107 0.00155033 0.512233 0.386127 +-0.0331866 0.15511 0.000984746 0.486465 0.5 +-0.0323163 0.155148 0.000487548 0.397109 0.5 +-0.0291189 0.15522 -0.00190906 0.227884 0.5 +-0.0484259 0.152144 0.0105657 0.638512 0.5 +0.0112135 0.116429 0.0374582 0.574775 0.428903 +0.0417012 0.085878 -0.00880084 0.495429 0.448715 +-0.0665318 0.134006 0.0442059 0.690916 0.5 +0.0440002 0.0888695 -0.00280666 0.524119 0.5 +-0.0515897 0.146262 0.0154112 0.695642 0.5 +-0.0584949 0.143878 0.0330085 0.783337 0.5 +0.04114 0.104231 0.00317036 0.442506 0.471806 +0.0240569 0.111353 0.0367066 0.509922 0.5 +-0.0238626 0.169762 -0.0118641 0.651294 0.5 +-0.0247145 0.161052 -0.00252569 0.480271 0.5 +0.0257313 0.0968616 0.0444005 0.638025 0.5 +-0.044247 0.157947 0.00609665 0.67251 0.5 +-0.0290382 0.16386 -0.00530596 0.570171 0.5 +-0.0234782 0.174205 -0.0130294 0.658749 0.5 +-0.0263171 0.178663 -0.00829314 0.453559 0.5 +-0.0628558 0.170957 -0.0505963 0.598982 0.458178 +-0.0203373 0.158355 -0.00674555 0.149356 0.5 +0.0266877 0.104744 0.0387392 0.563667 0.5 +-0.0459915 0.152139 0.00880917 0.723747 0.5 +-0.0646654 0.132541 0.0415985 0.736179 0.5 +-0.0573808 0.129734 0.0381066 0.676206 0.5 +0.044441 0.093115 0.00120191 0.553332 0.5 +-0.088546 0.102334 0.0113879 0.774556 0.5 +-0.053626 0.1255 0.0365054 0.61957 0.5 +-0.0243375 0.1639 -0.00728245 0.546799 0.487866 +0.0159567 0.120613 0.0338084 0.746649 0.5 +0.0305387 0.114047 0.0302625 0.662898 0.5 +0.0298704 0.114081 0.0310466 0.682279 0.5 +-0.0225303 0.159751 -0.00283877 0.336875 0.413352 +0.0458052 0.08902 0.00916777 0.585553 0.5 +-0.0859996 0.118394 -0.000793117 0.480329 0.5 +0.0454023 0.0875829 0.0161653 0.531894 0.5 +0.0366462 0.100736 0.0320541 0.717591 0.5 +0.0438672 0.0916755 -0.00180444 0.564241 0.5 +-0.0607941 0.143953 0.0367655 0.61235 0.483877 +0.0355444 0.109985 0.0269213 0.64078 0.5 +0.0181166 0.118416 -0.011621 0.549 0.5 +0.0093902 0.0739182 0.0557875 0.402355 0.487636 +0.0102664 0.0739304 0.0552835 0.47178 0.454089 +0.0111129 0.0739356 0.0547693 0.481026 0.423166 +0.0120599 0.0739551 0.0543847 0.48671 0.476705 +0.013184 0.0740073 0.0542309 0.491589 0.5 +0.0141451 0.0740257 0.0538731 0.575483 0.5 +0.0149724 0.0740286 0.0533099 0.599909 0.5 +0.0157288 0.0740195 0.0526622 0.583786 0.461423 +0.0166416 0.0740317 0.0522091 0.741222 0.5 +0.0176795 0.0740469 0.0519763 0.575091 0.5 +0.0187407 0.0740964 0.0517477 0.542076 0.473768 +0.0196906 0.074125 0.0513576 0.663147 0.5 +0.0205417 0.0741225 0.0508294 0.442288 0.5 +0.0213439 0.0741385 0.0502206 0.463851 0.466417 +0.0220764 0.0741142 0.049509 0.474246 0.461764 +0.0228611 0.0741302 0.0488936 0.578179 0.5 +0.0236414 0.0741206 0.0482553 0.572664 0.5 +0.0244049 0.0741131 0.0475942 0.577777 0.5 +0.0250862 0.0741055 0.0468243 0.581229 0.5 +0.025639 0.0740461 0.0458389 0.786409 0.5 +0.0262357 0.0740751 0.0449841 0.772643 0.5 +0.0271512 0.0740976 0.0445232 0.592817 0.392389 +0.0280502 0.0740858 0.0440821 0.625439 0.5 +0.0290027 0.0741128 0.0436952 0.636029 0.399986 +0.0298673 0.0740916 0.0431977 0.630563 0.5 +0.0305998 0.0741029 0.0424942 0.628283 0.444231 +0.0313861 0.0740897 0.0418701 0.621771 0.5 +0.0321478 0.0740867 0.0412125 0.595605 0.456848 +0.0328708 0.0740673 0.0404957 0.635398 0.5 +0.0337034 0.0740969 0.0399489 0.537891 0.468332 +0.0345611 0.0740948 0.0394254 0.535142 0.482543 +0.0353716 0.0741014 0.0388421 0.518267 0.483832 +0.0361319 0.074097 0.0381795 0.505468 0.5 +0.0367705 0.074074 0.0373409 0.606314 0.5 +0.0373383 0.0740435 0.0363986 0.591767 0.471091 +0.0379386 0.07401 0.0354837 0.619956 0.461403 +0.0385799 0.0739884 0.0346445 0.645662 0.5 +0.0392087 0.0739776 0.0338431 0.662825 0.5 +0.0398305 0.0739567 0.0329917 0.661454 0.5 +0.0404449 0.0739232 0.0320846 0.677465 0.5 +0.0410157 0.0739041 0.031202 0.672978 0.5 +0.0415736 0.0738523 0.0301911 0.673034 0.5 +0.0421423 0.0738117 0.0292393 0.624347 0.5 +0.042672 0.0737568 0.0282004 0.601101 0.408015 +0.0431795 0.0737197 0.0272167 0.540031 0.330569 +0.0436314 0.0736519 0.026072 0.515337 0.395203 +0.0440963 0.0735854 0.0249308 0.49212 0.448589 +0.0445131 0.0735224 0.0237705 0.448278 0.5 +0.0449394 0.0734628 0.0226146 0.403008 0.458355 +-0.0888952 0.137894 0.0271916 0.609378 0.5 +0.0407626 0.105627 0.00616707 0.529479 0.5 +0.038419 0.105512 0.0261645 0.526159 0.5 +0.0404448 0.0985503 0.0271661 0.65335 0.5 +-0.0492036 0.131059 0.0288275 0.650033 0.435551 +-0.0503264 0.131112 0.0307063 0.708731 0.5 +0.0353256 0.109535 -0.00390394 0.531297 0.5 +-0.0524183 0.131115 0.0329855 0.731687 0.5 +-0.0531501 0.13113 0.0336749 0.731312 0.5 +-0.0629366 0.147438 -0.0146052 0.450995 0.481686 +0.0405945 0.102819 0.0221712 0.647543 0.5 +0.0401875 0.102783 0.0241636 0.615986 0.5 +0.0250182 0.11137 0.036342 0.512323 0.473302 +-0.0161012 0.16832 -0.0147108 0.493558 0.5 +-0.0528526 0.147782 0.0214111 0.573964 0.387499 +-0.0160443 0.174209 -0.0181164 0.716724 0.5 +-0.0135602 0.174221 -0.0197865 0.729624 0.5 +-0.021529 0.17126 -0.0137526 0.664954 0.5 +-0.0526201 0.14007 0.0244025 0.755922 0.5 +0.040243 0.0970923 -0.00582991 0.592199 0.5 +0.0275361 0.10477 0.0382193 0.691312 0.5 +-0.0365356 0.155076 0.00317988 0.620018 0.5 +-0.0356646 0.155102 0.0026804 0.527869 0.5 +-0.0348371 0.155104 0.00211833 0.51516 0.5 +-0.0495888 0.146296 0.0105853 0.668078 0.5 +-0.0500812 0.146304 0.0115954 0.524872 0.417266 +0.0329112 0.096871 0.0389677 0.722665 0.5 +-0.0252811 0.168282 -0.0104061 0.637028 0.453766 +-0.0495972 0.118308 0.0316941 0.652391 0.463429 +-0.053795 0.115431 0.0343764 0.930472 0.5 +-0.0660018 0.133981 0.0432166 0.706202 0.415749 +-0.0929299 0.122874 0.0352771 0.812549 0.5 +-0.029909 0.0904807 -0.0265953 0.403597 0.5 +-0.0928176 0.120043 0.0102955 0.542575 0.5 +-0.0600502 0.143934 0.0360579 0.602605 0.5 +0.0258671 0.111418 0.0358303 0.509397 0.475741 +-0.0549717 0.132532 0.0345672 0.68201 0.5 +-0.0571091 0.140994 0.0314586 0.582376 0.462647 +0.0272041 0.0968528 0.0430049 0.698704 0.5 +-0.0195403 0.1757 -0.0161256 0.691534 0.5 +-0.0281276 0.163902 -0.00573037 0.569313 0.5 +-0.0107378 0.177152 -0.0244143 0.645105 0.5 +-0.0256504 0.178665 -0.00908499 0.550699 0.5 +-0.0943565 0.12553 0.0182582 0.545406 0.478394 +-0.0209099 0.158178 -0.00579641 0.203046 0.364333 +-0.0656393 0.145367 0.0403005 0.63059 0.5 +0.0371269 0.09285 0.0362758 0.71879 0.5 +-0.0640313 0.13251 0.040793 0.718015 0.5 +-0.0582589 0.129739 0.0385905 0.663514 0.5 +0.0441644 0.0931187 0.000177172 0.558745 0.480058 +-0.0897267 0.135137 0.0262095 0.77999 0.5 +-0.0566171 0.135321 0.0339425 0.635009 0.5 +-0.0613494 0.131082 0.0393909 0.648309 0.5 +0.0208911 0.120687 0.0321527 0.711547 0.5 +-0.0287063 0.168278 -0.00832187 0.605774 0.5 +0.0275463 0.095549 0.0435012 0.690612 0.5 +-0.0673565 0.112647 0.0446949 0.295607 0.5 +-0.0599288 0.145383 0.0362513 0.596175 0.471971 +-0.062214 0.131105 0.0398962 0.677602 0.429466 +-0.0444555 0.121377 -0.0123561 0.833781 0.5 +-0.044143 0.159411 0.00624881 0.561794 0.441249 +0.0456488 0.0861985 0.00518381 0.536933 0.380432 +-0.0570307 0.151068 0.0316808 0.472057 0.5 +0.0400386 0.0871415 -0.0117889 0.652698 0.5 +-0.0636327 0.155181 -0.0386163 0.577882 0.48288 +-0.0629696 0.131105 0.0405653 0.703241 0.5 +0.00942317 0.0752723 0.0558271 0.463351 0.5 +0.0102648 0.0752773 0.0552991 0.452903 0.450346 +0.0111453 0.0752893 0.0548169 0.549909 0.47635 +0.012216 0.0753282 0.0545969 0.57141 0.5 +0.0133103 0.0753629 0.0544488 0.567703 0.5 +0.0143121 0.0753991 0.0540935 0.566216 0.412988 +0.0151412 0.0754034 0.0535569 0.559442 0.5 +0.0160506 0.0754058 0.0531341 0.712295 0.5 +0.0170529 0.075444 0.0528157 0.543396 0.5 +0.0180116 0.0754634 0.0524537 0.529225 0.5 +0.0189467 0.0754919 0.0520404 0.666662 0.5 +0.0197898 0.0754906 0.0515075 0.534178 0.473728 +0.0205837 0.0754832 0.0508919 0.46299 0.473088 +0.0213851 0.0754916 0.050294 0.571232 0.5 +0.0221612 0.0754835 0.0496518 0.487719 0.450783 +0.0229768 0.0754886 0.0490742 0.598357 0.5 +0.0238113 0.0754906 0.0485213 0.598392 0.5 +0.0246103 0.075474 0.0479027 0.609546 0.5 +0.0253565 0.075473 0.0472224 0.60678 0.5 +0.0259518 0.075434 0.0462884 0.617698 0.347129 +0.0265757 0.0754454 0.0454823 0.604478 0.5 +0.0274663 0.0754645 0.0450048 0.621894 0.381867 +0.0283128 0.0754542 0.0444772 0.608633 0.5 +0.0291938 0.0754716 0.043989 0.627842 0.398738 +0.0300773 0.0754873 0.0435133 0.644155 0.5 +0.0309112 0.0754873 0.0429619 0.624863 0.5 +0.0316901 0.0754766 0.0423249 0.606423 0.5 +0.0324423 0.0754774 0.0416539 0.607743 0.5 +0.0331199 0.0754691 0.0408773 0.596736 0.5 +0.0337836 0.0754424 0.0400679 0.628553 0.5 +0.0346025 0.0754478 0.0394941 0.530612 0.5 +0.035425 0.0754528 0.0389267 0.532525 0.5 +0.0361622 0.075448 0.0382492 0.526665 0.459675 +0.0368364 0.0754262 0.037436 0.622034 0.5 +0.0374605 0.0754022 0.0365814 0.611031 0.5 +0.0380379 0.075373 0.0356471 0.619691 0.5 +0.0386345 0.0753534 0.0347776 0.638101 0.5 +0.0392221 0.075321 0.0338531 0.662178 0.439159 +0.0398535 0.0752995 0.0330037 0.675196 0.5 +0.0404723 0.0752779 0.0321515 0.675988 0.5 +0.0410346 0.0752467 0.03121 0.677202 0.5 +0.0415613 0.0751972 0.0301802 0.675014 0.5 +0.0421217 0.0751567 0.0292241 0.67807 0.5 +0.042675 0.0751161 0.0282624 0.62453 0.5 +0.0432386 0.0750761 0.0273062 0.591648 0.5 +0.043716 0.0750115 0.0261739 0.56418 0.5 +0.0441351 0.0749462 0.0250125 0.512998 0.449433 +0.044544 0.0748845 0.0238506 0.488502 0.5 +0.044971 0.0748214 0.0226935 0.458504 0.467907 +0.0454055 0.0747572 0.0215389 0.378418 0.5 +0.0457818 0.0746903 0.0202853 0.419967 0.5 +-0.0521847 0.140082 0.0224024 0.606401 0.481088 +0.0425362 0.0972508 -0.000830625 0.688244 0.5 +0.0436438 0.0973161 0.0031761 0.548608 0.5 +-0.00269975 0.109146 -0.0216168 0.551699 0.482404 +-0.0711713 0.176467 -0.0550529 0.31957 0.5 +-0.087232 0.102325 0.0223672 0.621937 0.5 +-0.066899 0.132617 0.0454244 0.721394 0.5 +-0.00121407 0.102594 0.0440764 0.308611 0.5 +-0.0303556 0.168269 -0.0071929 0.583148 0.5 +0.0186534 0.103359 0.0446898 0.488101 0.5 +0.0267956 0.111385 0.0354031 0.524811 0.5 +0.0276406 0.111416 0.0348725 0.54321 0.5 +-0.0242749 0.174204 -0.0124276 0.650067 0.5 +-0.0202598 0.174222 -0.0154191 0.701906 0.5 +-0.0385004 0.150676 0.00203305 0.292154 0.5 +-0.0362032 0.160944 0.000172036 0.613949 0.5 +-0.0415192 0.155101 0.00654483 0.680141 0.5 +-0.0406156 0.155109 0.0060988 0.681428 0.5 +-0.0381352 0.155099 0.00439417 0.616343 0.5 +-0.037361 0.155079 0.00374727 0.61561 0.5 +-0.0476849 0.146264 0.00805502 0.59165 0.5 +-0.048358 0.146267 0.00883601 0.619032 0.5 +-0.0490107 0.146266 0.00962371 0.641923 0.5 +-0.0568261 0.139571 0.0318926 0.639945 0.5 +-0.0560722 0.13957 0.0312222 0.631953 0.5 +-0.0535426 0.139527 0.0278286 0.556211 0.5 +-0.0530817 0.139518 0.0266624 0.551331 0.476773 +0.0353489 0.0955322 0.0372114 0.725505 0.5 +-0.0654784 0.133956 0.0422213 0.700501 0.5 +-0.0666269 0.131204 0.0458398 0.726313 0.5 +-0.0775093 0.0961888 -0.0115304 0.525386 0.5 +-0.0672658 0.131206 0.0466969 0.732992 0.5 +-0.0712276 0.159591 -0.0429327 0.505636 0.460038 +0.0408833 0.10285 0.0201769 0.667439 0.5 +-0.0501719 0.132485 0.029178 0.683964 0.5 +-0.0507215 0.132501 0.0301542 0.704205 0.5 +-0.0578499 0.140998 0.0321632 0.726567 0.5 +-0.0332327 0.160967 -0.000804209 0.568759 0.5 +-0.071875 0.136886 0.0488574 0.523649 0.5 +-0.017618 0.163994 -0.00984759 0.393789 0.47893 +-0.0101902 0.177186 -0.0254506 0.445232 0.5 +0.0220735 0.113988 0.0356074 0.526012 0.481411 +0.0366353 0.0982561 -0.0107953 0.731051 0.5 +-0.0215772 0.158162 -0.00503193 0.192277 0.367545 +-0.0649431 0.145366 0.0395451 0.615591 0.5 +-0.0352015 0.153653 0.00157065 0.431891 0.5 +-0.0633147 0.132484 0.0400888 0.690563 0.5 +-0.0591545 0.129731 0.0390508 0.655474 0.5 +0.0419587 0.0958192 0.0261617 0.654321 0.5 +0.0435587 0.0959151 0.0211557 0.513106 0.5 +-0.0574217 0.135337 0.0345321 0.590823 0.5 +-0.0472578 0.121113 0.0280085 0.709339 0.5 +0.0217235 0.120687 0.0315848 0.56598 0.5 +0.0311284 0.103423 0.0364018 0.727345 0.5 +-0.0660205 0.131186 0.0449542 0.72666 0.5 +0.0453303 0.0875809 0.0171699 0.520989 0.459985 +-0.0728312 0.136891 0.0492499 0.627599 0.5 +0.0200283 0.102079 0.0449293 0.60706 0.5 +-0.050269 0.11691 0.032477 0.652478 0.5 +-0.0710158 0.13691 0.0483444 0.52611 0.5 +0.0429561 0.100122 0.0141624 0.694229 0.5 +-0.0265893 0.161003 -0.00174275 0.55395 0.5 +-0.0626188 0.166275 -0.0435849 0.517528 0.405853 +-0.0706254 0.129856 0.0506426 0.588182 0.5 +-0.0627171 0.147502 -0.0125815 0.398932 0.5 +-0.0616146 0.158432 -0.0255892 0.383639 0.433059 +0.010276 0.076623 0.0552854 0.466489 0.447924 +0.0111753 0.0766426 0.0548499 0.558838 0.424035 +0.0122509 0.0766796 0.0546284 0.587184 0.5 +0.0134061 0.0767276 0.0545687 0.481224 0.5 +0.0143682 0.0767494 0.0542274 0.578033 0.454286 +0.0153262 0.0767707 0.0538598 0.455255 0.5 +0.0163312 0.0767998 0.0535416 0.450123 0.479295 +0.0172403 0.0768113 0.0531129 0.526465 0.5 +0.0181983 0.0768373 0.0527356 0.437738 0.475146 +0.0190348 0.0768352 0.0521916 0.545336 0.5 +0.0198002 0.0768324 0.0515324 0.569059 0.5 +0.020602 0.0768409 0.0509288 0.476038 0.5 +0.0214316 0.0768422 0.0503677 0.486439 0.474084 +0.0222613 0.0768462 0.049813 0.498203 0.479955 +0.0231426 0.0768603 0.0493195 0.519748 0.47332 +0.0239979 0.0768543 0.0488301 0.52662 0.473377 +0.024828 0.0768588 0.0482443 0.610475 0.5 +0.0255432 0.0768418 0.0475089 0.603824 0.5 +0.0261579 0.0768253 0.0466356 0.603577 0.483269 +0.0268748 0.0768062 0.0459093 0.604771 0.5 +0.0276842 0.0768145 0.0453329 0.61426 0.5 +0.0284966 0.0768217 0.0447581 0.61815 0.478766 +0.0293522 0.0768437 0.0442363 0.623702 0.5 +0.0301995 0.0768447 0.0437008 0.624343 0.5 +0.0310665 0.0768618 0.0431993 0.506137 0.5 +0.0318624 0.0768516 0.0425881 0.51115 0.5 +0.0326237 0.0768475 0.0419257 0.503742 0.464246 +0.0333079 0.0768384 0.0411622 0.612603 0.475916 +0.0339687 0.0768049 0.0403387 0.600714 0.476945 +0.0347021 0.0768104 0.0396564 0.621224 0.5 +0.0354665 0.0768048 0.0390018 0.629399 0.5 +0.0361753 0.0767902 0.0382584 0.639626 0.5 +0.0368491 0.0767795 0.0374896 0.650918 0.5 +0.0374841 0.076757 0.0366434 0.657631 0.5 +0.0381071 0.0767371 0.0357901 0.643833 0.5 +0.0386883 0.0767039 0.0348633 0.650558 0.5 +0.0392901 0.0766734 0.0339466 0.662373 0.5 +0.0398861 0.0766416 0.0330246 0.686027 0.5 +0.0405001 0.076619 0.0321646 0.68057 0.42369 +0.0410646 0.07659 0.0312229 0.672463 0.411535 +0.0415736 0.0765545 0.0302447 0.664677 0.5 +0.0420847 0.0764929 0.0291356 0.670862 0.420283 +0.0426389 0.0764517 0.0281735 0.671782 0.5 +0.0431893 0.0764104 0.0272109 0.6451 0.5 +0.0436976 0.0763605 0.0261605 0.583979 0.5 +0.0441778 0.076309 0.025099 0.561024 0.396183 +0.044615 0.0762444 0.0239446 0.523837 0.399525 +0.0450661 0.0761937 0.0228711 0.47185 0.353971 +0.0454669 0.0761165 0.0216249 0.451795 0.380969 +0.045843 0.0760483 0.0203743 0.522101 0.35382 +0.0461172 0.0759623 0.0190037 0.413202 0.328816 +0.043113 0.0972735 0.00118522 0.547381 0.5 +0.0433792 0.0972945 0.00218055 0.463933 0.5 +0.0428516 0.0972538 0.000192155 0.671391 0.5 +0.0422051 0.0972089 -0.00180239 0.488247 0.487225 +-0.0635357 0.119961 0.0469254 0.563491 0.5 +-0.0467235 0.128128 0.0253508 0.452801 0.5 +-0.00995662 0.169734 -0.0198047 0.447889 0.5 +-0.0135581 0.166929 -0.0145181 0.418994 0.479538 +0.019545 0.103378 0.0442321 0.503792 0.481083 +0.0373005 0.103362 0.0294506 0.677896 0.5 +0.0284806 0.111435 0.0343318 0.675787 0.5 +-0.026505 0.174198 -0.0103819 0.78055 0.5 +-0.0358918 0.166781 -0.00116722 0.62364 0.5 +-0.0376796 0.16681 0.00156763 0.518114 0.5 +-0.0478768 0.15504 0.00962757 0.639675 0.5 +-0.0470469 0.155045 0.00906939 0.633461 0.5 +-0.0451864 0.146266 0.00463419 0.195425 0.432502 +-0.0458225 0.146281 0.00549558 0.252585 0.5 +0.0412879 0.0914659 -0.00877665 0.528794 0.5 +-0.0470607 0.146242 0.00718592 0.482557 0.5 +-0.059344 0.139552 0.0335155 0.612099 0.456606 +-0.0584486 0.139576 0.0330542 0.6289 0.5 +-0.0576346 0.139576 0.0324737 0.638111 0.5 +-0.0612769 0.133878 0.0377403 0.587214 0.471285 +-0.0629724 0.133897 0.038809 0.636155 0.5 +-0.0637361 0.133925 0.0394224 0.666346 0.5 +-0.0643911 0.133918 0.0402655 0.68109 0.5 +-0.0649507 0.13395 0.041174 0.714405 0.5 +0.0364682 0.111067 0.00216795 0.619783 0.488841 +-0.0160192 0.104518 -0.0227486 0.672132 0.5 +-0.0624265 0.163056 -0.0535855 0.674431 0.5 +0.0452819 0.0932028 0.00617084 0.573889 0.41408 +0.0393368 0.0984458 -0.00682083 0.562137 0.5 +0.0410804 0.10284 0.0191681 0.683836 0.420632 +-0.0893883 0.0956403 0.0164184 0.625207 0.5 +-0.0586032 0.141 0.0328315 0.742667 0.5 +-0.0543206 0.140979 0.0284164 0.552068 0.5 +-0.00956353 0.172645 -0.0227849 0.467742 0.5 +-0.0165661 0.163924 -0.0100865 0.382067 0.5 +-0.0211568 0.177178 -0.0149257 0.656738 0.5 +0.0415318 0.09261 0.0284783 0.664858 0.5 +-0.0401471 0.163848 0.00326215 0.681563 0.5 +-0.0419021 0.157999 0.00424081 0.666722 0.5 +-0.0593675 0.145365 0.0352791 0.593606 0.467495 +-0.0634881 0.121359 0.0469409 0.601186 0.5 +-0.0599006 0.132533 0.037981 0.622536 0.5 +-0.0650557 0.129761 0.0446036 0.718483 0.5 +0.0283827 0.10475 0.0376855 0.700427 0.5 +-0.078373 0.161039 -0.0249642 0.38686 0.464014 +0.00906582 0.123154 0.0343752 0.566278 0.339292 +-0.0528207 0.121242 0.0358805 0.581584 0.5 +-0.0479877 0.121051 0.028756 0.630513 0.5 +0.022493 0.120697 0.0309281 0.57162 0.5 +0.023086 0.119339 0.0317977 0.617203 0.5 +-0.0462852 0.149202 0.00834502 0.691693 0.5 +0.0452979 0.0875774 0.0181674 0.504361 0.5 +-0.0202678 0.159643 -0.00488449 0.3582 0.5 +0.0280693 0.112767 0.0337398 0.682192 0.5 +0.0358259 0.0928903 0.0378885 0.726982 0.5 +-0.0679264 0.131258 0.0474463 0.732758 0.5 +-0.0494476 0.122586 0.0319364 0.566753 0.5 +0.0449595 0.0889486 0.000172046 0.467634 0.5 +-0.0555411 0.128344 0.0372391 0.729473 0.5 +-0.0707237 0.135491 0.0487549 0.64712 0.452777 +-0.0542782 0.132533 0.0338047 0.709699 0.5 +0.044262 0.0945325 0.00218274 0.564641 0.5 +0.0102029 0.0779579 0.0551886 0.494267 0.5 +0.011103 0.0779768 0.0547588 0.500584 0.427704 +0.0121741 0.0780107 0.0545179 0.487613 0.477638 +0.013384 0.078066 0.0545225 0.501289 0.476862 +0.0144021 0.0780973 0.054252 0.572865 0.444642 +0.0154243 0.0781303 0.053988 0.393018 0.5 +0.0163345 0.0781449 0.0535802 0.45356 0.450387 +0.0173388 0.0781757 0.0532571 0.446866 0.481381 +0.0181919 0.0781799 0.0527467 0.55726 0.5 +0.0190515 0.0781917 0.0522129 0.589273 0.5 +0.0197913 0.0781802 0.0515303 0.609137 0.5 +0.0206498 0.0781917 0.0510092 0.614807 0.463988 +0.0214935 0.0781932 0.0504764 0.504545 0.485101 +0.0223647 0.0782061 0.0499784 0.520017 0.5 +0.0232091 0.0782074 0.0494446 0.457886 0.5 +0.0241031 0.0782197 0.0489777 0.459392 0.5 +0.0249209 0.0782259 0.0483953 0.516705 0.5 +0.0256558 0.0782254 0.0477034 0.623691 0.476156 +0.0263146 0.0782009 0.0468843 0.61526 0.5 +0.0270307 0.0781852 0.0461538 0.616309 0.5 +0.0278367 0.0781921 0.0455692 0.6278 0.5 +0.0286115 0.078186 0.0449305 0.617467 0.5 +0.0294369 0.0781918 0.0443709 0.623326 0.475613 +0.0302902 0.078207 0.0438447 0.510173 0.464453 +0.0311358 0.0782102 0.04331 0.51289 0.482608 +0.0319454 0.0782138 0.0427262 0.517482 0.5 +0.0326986 0.0781958 0.0420379 0.520189 0.5 +0.0334291 0.0781951 0.0413414 0.508773 0.47972 +0.0341204 0.0781827 0.0405841 0.592897 0.5 +0.0348071 0.0781711 0.0398247 0.785507 0.5 +0.0355131 0.0781566 0.0390786 0.629661 0.5 +0.0361586 0.0781359 0.0382445 0.639936 0.5 +0.0368134 0.0781201 0.03746 0.650354 0.5 +0.0374548 0.0781001 0.0366194 0.664722 0.5 +0.0381002 0.078079 0.0357853 0.667868 0.5 +0.0387571 0.0780554 0.0349576 0.67096 0.5 +0.0393814 0.0780345 0.0341058 0.678739 0.5 +0.0399371 0.077993 0.0331058 0.673181 0.5 +0.0405297 0.0779725 0.0322363 0.669363 0.5 +0.0410972 0.0779427 0.031296 0.659305 0.414553 +0.0415851 0.0779004 0.0302476 0.661566 0.5 +0.0420852 0.077848 0.0291974 0.660985 0.42238 +0.0425828 0.0778099 0.0282065 0.66063 0.5 +0.0432025 0.0777701 0.0272794 0.644209 0.5 +0.0436886 0.0777182 0.0262206 0.623735 0.5 +0.0441945 0.077668 0.0251701 0.604731 0.5 +0.0446992 0.0776181 0.0241159 0.532741 0.5 +0.0451425 0.0775553 0.0229667 0.522499 0.465154 +0.0455444 0.0774866 0.0217209 0.516489 0.5 +0.0458807 0.0774123 0.0204549 0.504135 0.477232 +0.0461466 0.0773319 0.0190905 0.576196 0.5 +0.0373574 0.0841251 -0.0157743 0.706374 0.5 +0.0456324 0.0875991 0.0131626 0.57239 0.5 +0.0464327 0.0769932 0.014129 0.455861 0.5 +-0.083856 0.108875 0.00233606 0.437015 0.5 +-0.0295018 0.159581 0.00108834 0.503868 0.5 +0.0407616 0.105622 0.0111617 0.702245 0.5 +-0.0138894 0.183111 -0.0237643 0.461726 0.436324 +0.038441 0.100665 0.0293761 0.699142 0.5 +0.0390213 0.100628 0.0284944 0.683264 0.5 +0.0366464 0.103365 0.0302885 0.696526 0.5 +0.0292794 0.111414 0.0337321 0.702 0.5 +-0.0283944 0.174224 -0.00779385 0.678066 0.5 +-0.0347686 0.16678 -0.00304399 0.685372 0.5 +0.0291715 0.104768 0.0370747 0.729766 0.5 +0.0413201 0.104267 0.012164 0.69897 0.5 +0.0299951 0.111426 0.0329993 0.723247 0.5 +-0.0447681 0.146394 0.00358641 0.177724 0.5 +-0.0623578 0.139562 0.0361839 0.63811 0.5 +-0.0616452 0.139553 0.0354433 0.646306 0.5 +-0.0609826 0.13955 0.0346529 0.681478 0.5 +-0.0602761 0.139548 0.0339321 0.706583 0.5 +-0.0585604 0.133937 0.0364008 0.769804 0.5 +-0.0594536 0.133932 0.0368692 0.762546 0.5 +-0.0603715 0.133894 0.0372893 0.580817 0.5 +-0.0623186 0.155306 -0.0155862 0.359098 0.5 +-0.0933662 0.126937 0.0262691 0.505713 0.5 +-0.0278391 0.168266 -0.00883037 0.608542 0.5 +0.0457806 0.0890199 0.00717609 0.572575 0.410984 +-0.0850765 0.107567 0.00438106 0.468958 0.412497 +-0.0516941 0.147804 0.0164166 0.701983 0.5 +0.0441233 0.0959295 0.00318315 0.472723 0.5 +0.00457646 0.108164 0.0418882 0.61321 0.401606 +0.0399617 0.0984844 -0.00581339 0.563967 0.5 +-0.0750322 0.144421 -0.00688246 0.522249 0.5 +0.0420989 0.0930078 0.0271705 0.646685 0.451076 +-0.0640239 0.14106 0.0390925 0.630246 0.5 +-0.0250309 0.172718 -0.0117738 0.653425 0.5 +-0.0335527 0.156609 0.00223348 0.589415 0.5 +-0.0120489 0.177175 -0.0228491 0.7122 0.5 +-0.0278278 0.177181 -0.00696301 0.491073 0.5 +0.0204347 0.103384 0.043762 0.514112 0.485433 +-0.0394934 0.163848 0.00245451 0.610083 0.5 +-0.0427881 0.157985 0.00470835 0.677278 0.5 +-0.0589607 0.145338 0.0340833 0.586048 0.333287 +0.0398803 0.0927067 0.0314285 0.697962 0.5 +-0.0590047 0.132542 0.0375172 0.622474 0.5 +-0.0656415 0.129793 0.0454963 0.727402 0.5 +0.0451851 0.0861731 0.0211635 0.482289 0.47938 +-0.0817276 0.0964548 -0.00656413 0.503365 0.5 +0.0100844 0.123139 0.0340691 0.588752 0.467364 +-0.0535677 0.121244 0.0365515 0.604017 0.5 +0.0437257 0.0902921 0.0241674 0.610839 0.5 +0.0428831 0.0902351 0.0261862 0.635084 0.5 +0.04335 0.0902653 0.0251673 0.620265 0.5 +0.0300054 0.104778 0.0365239 0.725822 0.5 +-0.072674 0.131225 0.051196 0.477407 0.478289 +-0.0641358 0.117113 0.0460384 0.512905 0.318479 +0.0378723 0.109729 0.00416584 0.630075 0.5 +-0.0618671 0.112377 0.0367302 0.829342 0.5 +-0.0241791 0.159685 -0.00173809 0.369082 0.433859 +-0.0385777 0.1595 0.00203018 0.587268 0.5 +-0.0500289 0.122604 0.03284 0.603413 0.5 +-0.0624131 0.11535 0.0394932 0.369148 0.415744 +-0.0625354 0.122703 0.0447625 0.628065 0.5 +-0.0689 0.115705 0.0512836 0.47714 0.5 +-0.0516419 0.126901 0.0340875 0.648868 0.5 +-0.0618586 0.161576 -0.034591 0.428676 0.5 +0.0100662 0.0792875 0.0550109 0.613154 0.5 +0.0110253 0.0793101 0.0546505 0.614107 0.424155 +0.0120332 0.0793354 0.0543348 0.59829 0.5 +0.0131787 0.0793804 0.0542326 0.587854 0.464709 +0.0142616 0.0794232 0.0540604 0.47959 0.472289 +0.0152869 0.0794603 0.0538116 0.48359 0.5 +0.016253 0.0794879 0.0534651 0.470716 0.460052 +0.017256 0.079507 0.0531399 0.468948 0.5 +0.0181719 0.0795251 0.0527143 0.579154 0.40543 +0.0190476 0.0795376 0.0522219 0.598519 0.5 +0.0198481 0.0795335 0.0516115 0.632111 0.5 +0.0206734 0.0795401 0.0510479 0.620086 0.5 +0.0215152 0.0795452 0.0505127 0.613508 0.5 +0.0223647 0.0795488 0.0499944 0.515664 0.5 +0.0232695 0.0795597 0.0495474 0.44694 0.475133 +0.0241683 0.0795725 0.0490812 0.61663 0.478488 +0.024983 0.0795787 0.048494 0.63186 0.5 +0.0257124 0.0795754 0.0477924 0.634122 0.5 +0.0263535 0.0795425 0.0469281 0.631324 0.5 +0.0270604 0.0795391 0.0462139 0.63827 0.5 +0.0278273 0.0795375 0.0455649 0.630435 0.5 +0.0286155 0.0795328 0.044942 0.608643 0.5 +0.0294578 0.079544 0.0444105 0.606335 0.5 +0.0302795 0.0795477 0.0438394 0.611382 0.5 +0.0311277 0.0795524 0.0433085 0.61244 0.5 +0.0319539 0.0795563 0.0427459 0.617987 0.461288 +0.0327302 0.0795508 0.0421017 0.613309 0.465282 +0.0335012 0.0795469 0.0414506 0.495733 0.5 +0.0342103 0.0795441 0.0407378 0.596697 0.5 +0.0348653 0.0795228 0.0399156 0.614768 0.5 +0.0355134 0.0795005 0.0390801 0.639864 0.5 +0.0361188 0.0794771 0.0382118 0.642585 0.5 +0.0367263 0.0794489 0.0373046 0.654271 0.5 +0.037431 0.0794424 0.0366005 0.669219 0.5 +0.0381363 0.0794306 0.0358549 0.671892 0.5 +0.0388132 0.0794166 0.0350891 0.681529 0.5 +0.0394095 0.0793879 0.0341721 0.686574 0.5 +0.0399868 0.0793585 0.0332409 0.667708 0.5 +0.0405765 0.0793262 0.0323176 0.658808 0.5 +0.0411288 0.0792971 0.0313687 0.644828 0.416412 +0.0416337 0.0792551 0.0303335 0.640338 0.411441 +0.042117 0.0792074 0.0292753 0.645945 0.342885 +0.0425933 0.0791563 0.0282081 0.646363 0.5 +0.0431809 0.0791159 0.0272636 0.62226 0.5 +0.0437324 0.0790794 0.0263023 0.6139 0.5 +0.0441999 0.0790177 0.0251667 0.605112 0.5 +0.04471 0.0789677 0.024116 0.589123 0.5 +0.0451596 0.0789195 0.0230398 0.571938 0.478239 +0.0455563 0.078849 0.0217954 0.721345 0.5 +0.0458875 0.0787805 0.0205292 0.545578 0.48224 +0.0461192 0.0786876 0.0190773 0.511779 0.5 +0.0461881 0.0785676 0.017326 0.480451 0.466177 +0.0462455 0.0784487 0.0155769 0.497361 0.5 +-0.0494399 0.119744 0.0319359 0.801971 0.5 +0.0144595 0.121944 0.0333941 0.615834 0.5 +-0.0602298 0.119796 0.0409592 0.496419 0.5 +-0.0350082 0.162373 -0.00163299 0.670958 0.5 +-0.056511 0.121265 0.0393235 0.570951 0.5 +-0.0884166 0.13498 0.0042424 0.342144 0.5 +0.0347714 0.100763 0.034674 0.724215 0.5 +0.0379635 0.103337 0.0286718 0.665597 0.5 +0.030718 0.111397 0.0323042 0.722937 0.5 +-0.0308563 0.174216 -0.00433975 0.544603 0.5 +-0.0334339 0.166782 -0.00461644 0.576763 0.5 +-0.0062818 0.102371 0.0437669 0.287424 0.5 +-0.0234208 0.172725 -0.0129655 0.672015 0.5 +-0.0242433 0.172722 -0.0123976 0.664036 0.5 +-0.0640511 0.139618 0.0390194 0.605371 0.39659 +-0.0635247 0.139599 0.0380296 0.571317 0.477696 +-0.055443 0.13396 0.033868 0.667602 0.5 +-0.0561584 0.13394 0.0346041 0.64758 0.5 +-0.056914 0.133942 0.035273 0.628251 0.5 +-0.0576807 0.133928 0.0359191 0.617404 0.5 +0.0313753 0.111403 0.0314731 0.721918 0.5 +-0.0425303 0.153621 0.00682011 0.685242 0.443029 +-0.0853172 0.110382 0.0233555 0.712829 0.5 +0.0354061 0.0981387 0.0355669 0.723509 0.5 +-0.0319114 0.16826 -0.00591385 0.586613 0.5 +-0.0891175 0.0983455 0.0194044 0.684574 0.5 +0.0264007 0.116693 0.0313169 0.656404 0.5 +0.0246987 0.1167 0.0323736 0.66952 0.5 +-0.0571826 0.122684 0.0401181 0.582023 0.5 +0.0442909 0.0959534 0.0041727 0.575375 0.5 +-0.0829532 0.112769 0.000219247 0.462538 0.228517 +0.0387126 0.0984064 -0.00782785 0.578304 0.418501 +-0.0803464 0.147298 -0.000827063 0.484293 0.5 +0.0393128 0.0955964 -0.00780286 0.586301 0.5 +-0.064598 0.141073 0.0399979 0.642718 0.5 +0.0406981 0.104234 0.0181671 0.569978 0.488966 +-0.0344217 0.156595 0.00275895 0.585562 0.5 +-0.0203438 0.180146 -0.0154935 0.587458 0.477797 +-0.0271652 0.177189 -0.00775302 0.431565 0.5 +-0.0203988 0.177179 -0.0155929 0.665442 0.5 +-0.0309707 0.163858 -0.00458082 0.746454 0.5 +-0.0548214 0.143869 0.0295389 0.515193 0.5 +-0.0584473 0.145323 0.0330944 0.608695 0.474781 +-0.0464525 0.146291 0.00643191 0.365291 0.5 +-0.0581184 0.132538 0.0370402 0.62806 0.5 +-0.0538087 0.119788 0.0361741 0.587991 0.454409 +-0.0578787 0.118384 0.0390612 0.548823 0.5 +0.023524 0.11536 0.0341991 0.659925 0.5 +0.0109848 0.123169 0.033628 0.489045 0.46593 +-0.0599597 0.121237 0.0413621 0.55003 0.5 +0.0455164 0.0904085 0.0121603 0.57191 0.5 +-0.0470106 0.149195 0.00904699 0.554942 0.5 +-0.0789343 0.0700266 0.0104198 0.704234 0.277826 +-0.0686207 0.128453 0.0500102 0.61802 0.5 +0.0387661 0.0870401 -0.0137857 0.717554 0.5 +0.0201914 0.117982 0.0346477 0.510364 0.474373 +-0.0636966 0.117092 0.044917 0.494483 0.309209 +-0.0633087 0.117017 0.0436447 0.496869 0.435239 +-0.0618119 0.115344 0.0386033 0.453426 0.5 +0.040969 0.0926354 0.0294955 0.674164 0.426563 +0.0335081 0.0942386 0.0398247 0.706665 0.5 +-0.0684451 0.117201 0.0519481 0.495632 0.461504 +-0.0693915 0.117164 0.0523368 0.520159 0.5 +-0.0528554 0.116872 0.0339893 0.633297 0.5 +0.0253964 0.0981715 0.0439168 0.651787 0.5 +-0.0608025 0.132515 0.0384279 0.631049 0.5 +0.00992987 0.0806149 0.0548353 0.479978 0.5 +0.010878 0.0806434 0.0544608 0.479604 0.476982 +0.0118445 0.0806629 0.0540991 0.571484 0.4453 +0.0129121 0.0806948 0.0538726 0.560614 0.455083 +0.0139994 0.0807368 0.0537041 0.570742 0.5 +0.0150227 0.080777 0.0534508 0.464167 0.5 +0.0160357 0.0807986 0.0531419 0.471415 0.5 +0.0170456 0.0808203 0.0528345 0.482952 0.474079 +0.0180138 0.0808533 0.0524986 0.475896 0.5 +0.0189066 0.0808659 0.0520326 0.589127 0.5 +0.0197271 0.0808668 0.051456 0.614514 0.5 +0.0205921 0.0807207 0.0509473 0.664207 0.404966 +0.0214733 0.0808843 0.0504673 0.442816 0.413385 +0.0224079 0.0809035 0.0500644 0.449203 0.457898 +0.0233172 0.0809188 0.0496338 0.513096 0.429255 +0.0241695 0.0809229 0.0490966 0.523043 0.5 +0.0249548 0.0809223 0.0484627 0.663482 0.5 +0.0256741 0.0809122 0.047736 0.662109 0.5 +0.0263623 0.0808978 0.0469671 0.653165 0.5 +0.0270479 0.080882 0.0462053 0.654839 0.5 +0.02777 0.0808734 0.0454779 0.63781 0.5 +0.028524 0.0808687 0.0448153 0.629458 0.5 +0.0293569 0.0808765 0.0442663 0.604394 0.5 +0.0302023 0.0808798 0.0437374 0.60773 0.436475 +0.0310862 0.0808926 0.0432566 0.605777 0.5 +0.0319146 0.0808971 0.042698 0.607446 0.5 +0.0327323 0.0809002 0.0421262 0.602612 0.5 +0.0334855 0.0808915 0.0414362 0.602535 0.5 +0.0342014 0.0808856 0.0407312 0.624131 0.5 +0.0348585 0.0808647 0.0399076 0.644545 0.5 +0.0354622 0.0808406 0.0390375 0.647427 0.5 +0.03603 0.0808066 0.0380541 0.657101 0.390722 +0.0366921 0.0807912 0.0372758 0.677252 0.5 +0.0374146 0.0807844 0.0365828 0.681889 0.5 +0.0381262 0.080772 0.035847 0.687037 0.5 +0.0388076 0.0807597 0.0350812 0.686672 0.5 +0.0394316 0.0807401 0.0342345 0.6891 0.5 +0.0399613 0.0806226 0.0334139 0.6765 0.423351 +0.0406295 0.0806796 0.0323988 0.661217 0.5 +0.0411698 0.0806497 0.0314486 0.655941 0.424218 +0.0416487 0.0806113 0.0304012 0.63553 0.5 +0.0421516 0.0805501 0.0292856 0.61829 0.5 +0.0426825 0.0805137 0.0283126 0.614524 0.5 +0.0432388 0.0804742 0.027354 0.612187 0.413072 +0.0437773 0.0804492 0.0262342 0.608473 0.409617 +0.0442212 0.0804374 0.0252067 0.605408 0.5 +0.044682 0.0804275 0.0241291 0.604256 0.5 +0.0451439 0.0802684 0.0230283 0.601475 0.480065 +0.0455148 0.0801982 0.0216904 0.58644 0.477931 +0.0458285 0.0801218 0.0204223 0.564141 0.478062 +0.0460177 0.0800284 0.0189631 0.46528 0.5 +0.00612795 0.107304 -0.0203065 0.792235 0.5 +-0.0314363 0.171254 -0.00518552 0.644065 0.5 +0.0359645 0.0981106 0.0346243 0.730219 0.5 +0.0365334 0.0980835 0.033685 0.72896 0.5 +0.0372061 0.0980869 0.0328651 0.734378 0.5 +0.0378754 0.0980648 0.0320906 0.727293 0.5 +-0.0262192 0.162456 -0.00472466 0.628388 0.5 +0.0315208 0.0994913 0.038731 0.719643 0.5 +0.0340782 0.100772 0.035418 0.7279 0.5 +0.0385436 0.103322 0.0277283 0.64253 0.5 +0.0320171 0.111398 0.0306261 0.717295 0.5 +-0.0302069 0.174221 -0.00514504 0.552416 0.5 +-0.0301141 0.166809 -0.00684471 0.581271 0.5 +-0.023191 0.178657 -0.0125853 0.677828 0.5 +-0.00992934 0.166943 -0.0180552 0.272667 0.5 +-0.06629 0.139698 0.0427919 0.704946 0.5 +-0.0669079 0.139705 0.0437201 0.71467 0.5 +-0.05391 0.13392 0.032587 0.723328 0.5 +-0.0546568 0.133929 0.033262 0.698637 0.5 +-0.0623017 0.163119 -0.0425932 0.414599 0.5 +0.0326456 0.111384 0.0297678 0.705164 0.5 +0.0332874 0.111381 0.0289227 0.688973 0.5 +0.033894 0.111352 0.0280456 0.667738 0.5 +0.0213206 0.103387 0.0432887 0.521223 0.5 +-0.0553875 0.143884 0.0305002 0.525485 0.5 +0.032332 0.110047 0.0311032 0.722806 0.5 +-0.027189 0.162441 -0.00437298 0.628916 0.5 +-0.0667548 0.115724 0.0491405 0.321444 0.5 +-0.0624218 0.113827 0.0376933 0.449853 0.5 +-0.0668542 0.114225 0.0472279 0.231538 0.5 +0.0255211 0.116701 0.0317994 0.663213 0.5 +-0.0655655 0.115703 0.0473772 0.296503 0.440194 +-0.0359664 0.162375 -0.00125909 0.537364 0.5 +-0.0623926 0.155248 -0.0336012 0.833452 0.5 +0.0448999 0.0861351 0.000186186 0.567183 0.5 +0.0413096 0.0957202 -0.00478826 0.535815 0.482768 +-0.0657925 0.14111 0.0417765 0.667259 0.5 +0.0408211 0.10424 0.0171662 0.700193 0.5 +-0.0369817 0.156591 0.00432745 0.672238 0.5 +-0.0177948 0.161129 -0.00657359 0.341863 0.5 +-0.0932761 0.122751 0.0112823 0.610425 0.5 +-0.0196064 0.177176 -0.0161969 0.675008 0.5 +-0.019553 0.163976 -0.00913576 0.496969 0.5 +0.02054 0.116646 0.0351499 0.535801 0.5 +0.0419877 0.102851 0.0121565 0.700235 0.5 +-0.0537032 0.140954 0.0276054 0.540156 0.5 +-0.0513643 0.132495 0.031006 0.731486 0.5 +-0.057003 0.128342 0.0386502 0.705626 0.5 +0.0414492 0.10286 0.0161642 0.711129 0.5 +-0.0347085 0.169768 -0.00115359 0.644912 0.5 +0.043448 0.0916342 -0.00278755 0.563819 0.427244 +-0.0607789 0.121227 0.0419471 0.531493 0.48275 +-0.0806197 0.114932 0.047462 0.66926 0.5 +-0.048265 0.136372 0.0159973 0.746463 0.5 +-0.050492 0.149246 0.012837 0.544675 0.5 +-0.0480399 0.136313 0.0145941 0.744219 0.5 +-0.0693797 0.128452 0.0506772 0.595543 0.5 +-0.0509981 0.147813 0.0138388 0.543255 0.5 +-0.0409256 0.153594 0.00561766 0.625701 0.423588 +0.026251 0.103389 0.0398709 0.686306 0.5 +-0.062851 0.116991 0.0425454 0.484293 0.5 +-0.0624013 0.116928 0.041368 0.435154 0.5 +-0.00990791 0.168128 -0.0187599 0.392282 0.5 +-0.0574019 0.116942 0.0379675 0.697941 0.5 +-0.0565657 0.11693 0.0374284 0.651981 0.5 +-0.064655 0.115706 0.0452756 0.302933 0.5 +0.00698645 0.0818884 0.0558396 0.508744 0.479758 +0.00799401 0.0819204 0.0555296 0.507207 0.474147 +0.00894357 0.0819404 0.0551438 0.49568 0.5 +0.00990951 0.0819581 0.0548044 0.48911 0.46438 +0.0108109 0.0819726 0.0543646 0.473726 0.5 +0.0116998 0.0819851 0.0538895 0.390669 0.468325 +0.0126468 0.0820043 0.0535026 0.539095 0.468801 +0.0136708 0.0820393 0.0532361 0.544845 0.5 +0.0146913 0.0820798 0.0529703 0.567008 0.43068 +0.0157074 0.0821031 0.0526782 0.575924 0.5 +0.0167269 0.0821369 0.052401 0.481442 0.5 +0.0177377 0.0821568 0.0520978 0.490493 0.47673 +0.0186318 0.0821747 0.0516425 0.491382 0.47673 +0.0195225 0.0821843 0.0511684 0.50475 0.5 +0.020479 0.0822082 0.0508036 0.52131 0.392394 +0.0214495 0.0822346 0.0504578 0.453985 0.5 +0.0223756 0.0822421 0.0500191 0.517769 0.5 +0.0232238 0.0822541 0.0494986 0.516401 0.48476 +0.0240603 0.0822578 0.0489414 0.65065 0.5 +0.0248435 0.0822524 0.0483141 0.678339 0.5 +0.025553 0.0822419 0.0475803 0.668043 0.5 +0.026308 0.0822369 0.0469135 0.666392 0.5 +0.0270529 0.0822264 0.0462092 0.646804 0.5 +0.0277791 0.0822205 0.0455159 0.634689 0.447129 +0.0284244 0.0822003 0.0446831 0.618595 0.5 +0.0291993 0.0821983 0.0440432 0.584939 0.5 +0.0300675 0.0822073 0.0435477 0.569908 0.5 +0.0309512 0.0822193 0.0430727 0.567422 0.5 +0.0318377 0.0822312 0.0425933 0.576801 0.5 +0.03264 0.0822319 0.0419892 0.577938 0.5 +0.033406 0.0822268 0.04133 0.576818 0.5 +0.03413 0.0822192 0.0406334 0.600967 0.5 +0.0347852 0.0821986 0.0398055 0.636584 0.5 +0.0353694 0.082169 0.0388786 0.659264 0.5 +0.0359801 0.0821479 0.0380155 0.673176 0.387579 +0.0366613 0.0821332 0.0372523 0.687414 0.5 +0.0373859 0.082128 0.0365587 0.691417 0.429141 +0.0380671 0.0821074 0.0357563 0.702253 0.5 +0.0387814 0.0821002 0.0350599 0.70292 0.5 +0.0394621 0.0820907 0.0342997 0.703528 0.420327 +0.0400834 0.082061 0.0334038 0.689855 0.5 +0.0406549 0.0820323 0.0324674 0.674556 0.5 +0.041166 0.0819934 0.0314416 0.656814 0.424398 +0.0416732 0.0819555 0.0304093 0.641164 0.5 +0.042201 0.0819186 0.0294354 0.633508 0.5 +0.0427673 0.0818692 0.0284169 0.615731 0.5 +0.0433132 0.0818321 0.0274518 0.60347 0.5 +0.0438502 0.081834 0.0262681 0.591239 0.5 +0.0237088 0.0942271 0.0467477 0.449799 0.5 +0.0413648 0.0939401 0.0283252 0.663131 0.5 +-0.0752504 0.177839 -0.0529463 0.277447 0.5 +0.0153592 0.0953434 0.0487033 0.445146 0.477058 +-0.0520342 0.116871 0.0334143 0.925778 0.5 +-0.0900898 0.119956 0.00430245 0.444282 0.463286 +0.030344 0.1101 0.0335023 0.715522 0.5 +-0.0398973 0.160894 0.00183362 0.87467 0.5 +-0.0654403 0.114174 0.0440564 0.245533 0.5 +-0.031704 0.172718 -0.00384226 0.573213 0.5 +0.0336533 0.110026 0.0294894 0.708561 0.5 +-0.0466991 0.122484 0.0270727 0.693162 0.5 +0.023814 0.119372 0.031074 0.624162 0.5 +0.0321818 0.0994934 0.0379171 0.727866 0.5 +0.033357 0.100796 0.0361067 0.730717 0.5 +0.0420206 0.092566 0.0274869 0.652549 0.447836 +0.0345089 0.111329 0.0271807 0.647529 0.5 +0.022982 0.114019 0.0351746 0.635687 0.5 +-0.0275254 0.1668 -0.00838328 0.604338 0.5 +-0.0444883 0.150664 0.00744383 0.701519 0.5 +-0.0681226 0.115765 0.0506532 0.393841 0.5 +-0.0675712 0.139722 0.0445155 0.696033 0.5 +-0.0532046 0.133931 0.0318349 0.725929 0.5 +0.0369028 0.0954111 -0.0108822 0.729473 0.5 +0.0425779 0.0929869 -0.00379718 0.584831 0.5 +0.0459145 0.0862168 0.00717824 0.573673 0.42524 +0.0356112 0.0942094 0.0375896 0.72858 0.5 +0.0349485 0.0942163 0.0384062 0.731873 0.5 +-0.0451092 0.153606 0.00834539 0.539451 0.5 +0.0214 0.116687 0.0346491 0.531558 0.5 +-0.0832913 0.0938266 -0.00556456 0.592061 0.5 +-0.0237994 0.178657 -0.0117033 0.589029 0.5 +-0.0417663 0.162365 0.00442786 0.530068 0.474603 +-0.0607717 0.113836 0.03657 0.775308 0.5 +-0.0616758 0.113831 0.0370124 0.511122 0.5 +-0.0674289 0.114212 0.0481237 0.285894 0.5 +0.0217345 0.0994968 0.0456553 0.437629 0.5 +-0.0326318 0.168236 -0.00522072 0.566488 0.47088 +0.0231488 0.116662 0.0336476 0.663825 0.5 +-0.0624191 0.163107 -0.0445959 0.418716 0.454475 +-0.0901544 0.148798 0.0121684 0.379128 0.5 +-0.0582078 0.148218 0.0334722 0.546116 0.450401 +-0.0663625 0.141125 0.0427387 0.667157 0.5 +-0.0659446 0.146784 0.0398667 0.6398 0.5 +-0.0360977 0.156596 0.00383263 0.661845 0.5 +-0.03739 0.165304 0.000185179 0.623799 0.5 +-0.0629277 0.161435 -0.0535909 0.593627 0.5 +-0.0188551 0.177186 -0.0168879 0.688689 0.5 +-0.0185844 0.16399 -0.00948536 0.414527 0.5 +0.0308134 0.104771 0.0359398 0.71711 0.5 +-0.0233106 0.15969 -0.00223977 0.352549 0.431957 +0.025787 0.114054 0.0339562 0.543363 0.5 +0.0239825 0.114006 0.0348506 0.525024 0.484544 +-0.0630684 0.138136 0.036884 0.666262 0.5 +0.0419002 0.102864 0.0131587 0.704943 0.5 +-0.0311093 0.169745 -0.00652433 0.733795 0.5 +0.0445386 0.0917351 0.000179816 0.526746 0.478284 +-0.0615042 0.121243 0.0426924 0.525076 0.476028 +0.0456475 0.0890064 0.00517807 0.526482 0.42183 +0.0250825 0.10872 0.0381638 0.512562 0.46895 +-0.0584166 0.126929 0.0401124 0.663315 0.419655 +-0.0575286 0.126935 0.0396404 0.674496 0.418435 +-0.0566945 0.126945 0.0390945 0.690453 0.5 +-0.0559448 0.126938 0.0384169 0.711531 0.5 +-0.0278327 0.179989 -0.0150111 0.381754 0.5 +0.0226208 0.102094 0.0434114 0.525977 0.5 +-0.0140602 0.172758 -0.0187663 0.55982 0.5 +-0.0631576 0.119928 0.0457283 0.552522 0.416863 +-0.0197554 0.158352 -0.00754965 0.190398 0.5 +-0.0148886 0.169807 -0.0164639 0.515974 0.447348 +0.0259904 0.108758 0.0377477 0.526182 0.475582 +0.00620145 0.0832401 0.0564613 0.500943 0.446278 +0.00716038 0.0832586 0.0561062 0.505749 0.5 +0.00817319 0.0832888 0.0558122 0.499306 0.465899 +0.00912223 0.0833108 0.0554277 0.481447 0.5 +0.0100166 0.0833203 0.0549696 0.482574 0.5 +0.0109129 0.0833325 0.0545132 0.468361 0.5 +0.0117318 0.0833298 0.0539432 0.393016 0.45547 +0.0125192 0.0833344 0.053329 0.457745 0.485017 +0.0134353 0.0833572 0.0528968 0.549006 0.468046 +0.014411 0.0833733 0.0525453 0.704092 0.5 +0.0154254 0.0834009 0.0522607 0.726507 0.5 +0.0163998 0.0834424 0.0519345 0.57353 0.5 +0.0174045 0.0834609 0.0516215 0.482257 0.5 +0.0269837 0.108749 0.0374141 0.626351 0.5 +0.0193158 0.0835035 0.0508805 0.519402 0.44685 +0.0203307 0.08353 0.050588 0.527003 0.390818 +0.0213023 0.0835644 0.0502546 0.434009 0.484236 +0.022246 0.0835763 0.0498509 0.609508 0.5 +0.0231289 0.0835821 0.0493611 0.633128 0.5 +0.0239145 0.0835849 0.0487444 0.638843 0.5 +0.0246944 0.0835826 0.0481083 0.653968 0.5 +0.0254329 0.0835701 0.0474102 0.681329 0.5 +0.0262875 0.0835737 0.0468767 0.665452 0.340429 +0.0271048 0.0835778 0.0462962 0.618959 0.449147 +0.0277963 0.0835666 0.045536 0.598221 0.5 +0.0284181 0.0835438 0.0446794 0.569912 0.5 +0.0289959 0.083514 0.0437755 0.5608 0.5 +0.0298569 0.0835122 0.0432289 0.560619 0.447588 +0.030827 0.0835413 0.0428747 0.539604 0.437013 +0.0317594 0.0835691 0.0424885 0.515985 0.476202 +0.032603 0.0835706 0.0419526 0.658933 0.5 +0.0333657 0.0835669 0.0412915 0.662724 0.5 +0.0340507 0.0835544 0.0405264 0.557299 0.5 +0.0347443 0.08354 0.0397721 0.589513 0.5 +0.0353453 0.0835128 0.0388598 0.621253 0.5 +0.0359903 0.0834983 0.0380665 0.66048 0.5 +0.0366379 0.08347 0.0371909 0.683522 0.5 +0.0373474 0.083464 0.036489 0.701704 0.5 +0.0380556 0.0834519 0.0357476 0.703151 0.5 +0.0387649 0.0834441 0.0350467 0.707612 0.5 +0.0394335 0.0834241 0.0342316 0.713689 0.5 +0.0400441 0.0834026 0.0333734 0.708341 0.5 +0.0406313 0.0833746 0.032449 0.681285 0.411637 +0.0411666 0.0833385 0.031438 0.654552 0.412922 +0.0416569 0.0832977 0.0303966 0.646886 0.5 +0.0421796 0.0832522 0.0293553 0.645574 0.5 +0.0427502 0.0832247 0.0284671 0.637609 0.5 +0.0433147 0.0831895 0.0275132 0.61702 0.5 +0.0438316 0.0832073 0.0263179 0.485573 0.459118 +0.0227584 0.0942129 0.0471436 0.447559 0.465231 +0.0418909 0.0939077 0.0272858 0.643018 0.454215 +0.046015 0.0862238 0.00817489 0.5879 0.5 +0.0162383 0.0953367 0.0482094 0.677333 0.5 +0.0376746 0.104662 0.0282621 0.665064 0.5 +-0.0533361 0.138123 0.0280776 0.610488 0.5 +0.0310154 0.110075 0.0327245 0.725188 0.5 +0.0232354 0.0968772 0.0460698 0.464601 0.5 +0.0241216 0.0968854 0.045587 0.473436 0.5 +0.0249428 0.0968855 0.0450153 0.600572 0.5 +0.038172 0.0967289 0.0325586 0.727677 0.5 +0.0313864 0.0929268 0.0420114 0.636661 0.5 +-0.05283 0.138085 0.0270749 0.585967 0.5 +0.032953 0.0994589 0.0373001 0.725079 0.5 +0.032601 0.100801 0.0367685 0.734393 0.5 +-0.0788405 0.11444 0.0481937 0.683568 0.5 +0.0396829 0.102719 -0.00275708 0.597104 0.424203 +0.0246022 0.0942401 0.0462765 0.564426 0.5 +-0.02118 0.169768 -0.013264 0.636854 0.457983 +-0.0257335 0.166803 -0.00931015 0.625713 0.464131 +-0.0938957 0.124187 0.0252761 0.552665 0.5 +0.0316126 0.104759 0.0353509 0.72734 0.5 +-0.0683005 0.139737 0.0452157 0.665543 0.5 +-0.0525174 0.133925 0.0310668 0.718166 0.5 +-0.0626054 0.158425 -0.0185846 0.403611 0.409971 +-0.0257594 0.171231 -0.0110774 0.628279 0.5 +-0.0562403 0.128346 0.0379943 0.717267 0.5 +-0.0462534 0.123907 0.0259058 0.566856 0.5 +-0.0456346 0.123874 0.0250844 0.526589 0.5 +0.0447631 0.0931576 0.00318223 0.572114 0.5 +0.0278197 0.108769 0.0368873 0.652192 0.5 +0.0285939 0.108783 0.0362583 0.676091 0.5 +0.0323738 0.104756 0.0346971 0.722331 0.5 +-0.0210306 0.180146 -0.0147237 0.546827 0.482954 +-0.0651094 0.121429 0.0498115 0.652049 0.5 +-0.0707473 0.127025 0.0521985 0.671467 0.5 +0.0293349 0.108769 0.0355782 0.693208 0.5 +-0.0669203 0.110822 0.0381745 0.334525 0.5 +-0.0221399 0.16826 -0.0191908 0.821267 0.5 +-0.0763629 0.108471 -0.00759882 0.603103 0.5 +-0.0613807 0.122656 0.0428396 0.5704 0.5 +-0.0624931 0.153672 -0.0316068 0.506765 0.483425 +0.040773 0.0858024 -0.0107788 0.638327 0.448309 +-0.0485787 0.153602 0.0103738 0.617293 0.5 +-0.0651932 0.141087 0.0409428 0.65645 0.5 +0.0300323 0.108764 0.0348296 0.719072 0.5 +-0.0352518 0.156597 0.00331287 0.623337 0.5 +-0.037944 0.165312 0.00115508 0.618198 0.5 +-0.0122139 0.169818 -0.0178463 0.428628 0.5 +-0.0180623 0.177182 -0.017491 0.708503 0.5 +-0.024023 0.17718 -0.0120308 0.723476 0.5 +0.0307322 0.108762 0.0340805 0.716537 0.5 +0.02524 0.115374 0.03316 0.670873 0.428562 +0.0313941 0.108732 0.0332945 0.71451 0.5 +0.0248886 0.114037 0.0344109 0.536853 0.446482 +-0.0529076 0.136719 0.0287121 0.651125 0.5 +0.0319993 0.108737 0.0323781 0.724482 0.5 +-0.0186551 0.184576 -0.0164922 0.375398 0.5 +-0.019368 0.183116 -0.0157888 0.379414 0.5 +-0.0620569 0.121268 0.0436785 0.548618 0.384431 +-0.0220003 0.181634 -0.0125756 0.46103 0.5 +-0.0298186 0.154044 -0.00457012 0.21502 0.5 +0.0326521 0.108705 0.0315863 0.726857 0.5 +0.0333249 0.108715 0.0307644 0.723664 0.5 +-0.0176367 0.181628 -0.0186063 0.619313 0.5 +-0.0552688 0.126926 0.0376418 0.703294 0.5 +-0.0647364 0.118589 0.0486106 0.5988 0.5 +-0.0652697 0.118619 0.0495916 0.490273 0.478387 +-0.0642519 0.118577 0.0476092 0.594558 0.407809 +-0.0637803 0.118542 0.0465326 0.624077 0.5 +-0.0634166 0.118511 0.0453283 0.62093 0.425901 +-0.0625131 0.11843 0.0430565 0.568509 0.5 +0.0340202 0.108707 0.0300072 0.710435 0.5 +0.0346979 0.108688 0.0292348 0.69426 0.5 +0.00731658 0.0846292 0.0563131 0.486655 0.5 +0.00828982 0.0846467 0.0559983 0.489456 0.5 +0.00924009 0.0846665 0.0556174 0.40492 0.476995 +0.0101261 0.0846794 0.0551401 0.415775 0.446741 +0.0110129 0.0846936 0.0546683 0.410867 0.423219 +0.011809 0.0846857 0.0540696 0.465598 0.5 +0.0126182 0.0846922 0.0534757 0.465455 0.475443 +0.0134328 0.0846923 0.0528905 0.452015 0.465228 +0.0142478 0.0846938 0.0523116 0.46371 0.5 +0.0151781 0.0847217 0.0519158 0.58032 0.473439 +0.0161405 0.0847501 0.0515574 0.736562 0.5 +0.0170772 0.0847646 0.051153 0.47667 0.5 +0.0353212 0.108669 0.0283742 0.675913 0.5 +0.0359735 0.108741 0.0274101 0.652705 0.5 +0.0200653 0.084847 0.0502217 0.628587 0.5 +0.0210858 0.0848756 0.0499424 0.634723 0.5 +0.0220421 0.0848959 0.0495666 0.524944 0.5 +0.0228849 0.0849076 0.049031 0.526063 0.48156 +0.02366 0.0848996 0.0483924 0.643976 0.5 +0.0245051 0.0849065 0.0478503 0.661082 0.5 +0.02539 0.0849287 0.0474039 0.552508 0.433078 +0.026315 0.0849274 0.0469361 0.661416 0.5 +0.0271246 0.0849281 0.0463473 0.630453 0.5 +0.0277845 0.0849076 0.045525 0.58874 0.5 +0.0283981 0.0848865 0.0446615 0.54498 0.5 +0.0289709 0.0848578 0.043728 0.523382 0.5 +0.0298088 0.0848631 0.0431899 0.932124 0.5 +0.0307617 0.0848812 0.0428147 0.682251 0.5 +0.0317605 0.08491 0.0425067 0.68557 0.5 +0.0326379 0.0849202 0.042017 0.516226 0.5 +0.0334132 0.0849144 0.041374 0.505306 0.5 +0.0340796 0.0848941 0.0405554 0.532722 0.5 +0.0347392 0.0848817 0.0397697 0.572721 0.5 +0.0354037 0.0848596 0.0389463 0.605951 0.5 +0.0360179 0.0848402 0.038086 0.656287 0.388992 +0.0366496 0.0848209 0.0372394 0.67182 0.5 +0.0373294 0.0848074 0.0364738 0.697064 0.5 +0.0380257 0.084795 0.0357219 0.705482 0.383114 +0.0387003 0.0847793 0.034951 0.707382 0.5 +0.0393533 0.0847596 0.0341247 0.711031 0.5 +0.039991 0.0847392 0.0332858 0.71122 0.412147 +0.0405942 0.0847142 0.0324234 0.685936 0.5 +0.0411571 0.0846831 0.0314273 0.671233 0.5 +0.0416527 0.0846461 0.030449 0.656572 0.5 +0.0421362 0.0845969 0.0293292 0.64271 0.5 +0.0427332 0.084569 0.0284544 0.639966 0.5 +0.043295 0.084533 0.027498 0.623393 0.399361 +0.0437747 0.084485 0.0264379 0.496295 0.487691 +-0.0174159 0.162512 -0.00777918 0.401115 0.5 +-0.0666503 0.135429 0.0440071 0.696794 0.5 +0.0387218 0.0993392 0.0297824 0.681931 0.5 +0.0452912 0.0903849 0.0031762 0.524883 0.5 +-0.0776599 0.103464 0.0342449 0.649334 0.5 +-0.0893403 0.0983511 0.0184032 0.661403 0.5 +-0.0503963 0.1183 0.0322871 0.898999 0.5 +-0.0616651 0.119834 0.0424717 0.629552 0.5 +-0.0634966 0.109514 0.0378318 0.507157 0.5 +-0.0379377 0.157973 0.00463177 0.5021 0.5 +0.0367923 0.0967547 0.0340658 0.721327 0.5 +-0.00287196 0.105931 -0.0223953 0.780362 0.5 +-0.0541404 0.124102 0.0375109 0.573201 0.5 +0.0336937 0.0994802 0.0365924 0.728235 0.5 +0.024692 0.100819 0.0429025 0.679254 0.5 +0.0254608 0.100767 0.0422505 0.731198 0.5 +0.0333218 0.0981688 0.0378146 0.731226 0.5 +0.0451301 0.0903696 0.00218472 0.518344 0.459555 +0.0278762 0.0942373 0.043974 0.658764 0.5 +0.0365536 0.108655 0.0265769 0.535133 0.473313 +-0.0247835 0.166781 -0.00970724 0.5118 0.5 +-0.0888827 0.140531 0.0122011 0.445522 0.380153 +0.0330435 0.104766 0.033885 0.719009 0.5 +-0.069034 0.139725 0.045939 0.644373 0.5 +0.045282 0.0889737 0.0021781 0.48804 0.5 +-0.061193 0.167783 -0.0585846 0.470637 0.316526 +-0.024103 0.171237 -0.0122056 0.659743 0.5 +-0.0501776 0.124028 0.032677 0.627443 0.5 +-0.0495852 0.124005 0.0317323 0.594922 0.401211 +-0.0284035 0.166813 -0.0078902 0.599476 0.5 +-0.0569157 0.131148 0.0370227 0.662986 0.5 +-0.0225729 0.172715 -0.0135004 0.668195 0.5 +-0.0740765 0.0662649 0.0182774 0.706894 0.5 +0.0337121 0.104741 0.0331059 0.718463 0.5 +-0.0664425 0.121454 0.0513831 0.612058 0.5 +-0.0657333 0.121445 0.0506733 0.626963 0.5 +-0.0116602 0.168404 -0.0170453 0.462839 0.5 +0.0442558 0.0917077 -0.00080891 0.543482 0.5 +-0.0266384 0.166791 -0.00886205 0.623233 0.5 +-0.0673634 0.110954 0.0392365 0.30234 0.5 +0.00812544 0.105869 -0.0206053 0.600523 0.5 +-0.0304968 0.172715 -0.00561384 0.657708 0.5 +0.0284295 0.0955564 0.0430179 0.701918 0.5 +-0.0659181 0.10388 -0.0158661 0.578422 0.5 +0.0442177 0.0860807 -0.00279659 0.465235 0.5 +-0.0261346 0.168251 -0.00989215 0.626617 0.5 +-0.0634479 0.141036 0.0381413 0.590961 0.5 +-0.0514307 0.12406 0.0344067 0.544696 0.5 +-0.0327087 0.156604 0.00170747 0.487623 0.5 +-0.0385753 0.165326 0.00202421 0.63731 0.5 +-0.020486 0.18455 -0.0138786 0.290258 0.5 +-0.0172908 0.177187 -0.018141 0.717874 0.5 +-0.0205931 0.163965 -0.00888333 0.505293 0.5 +-0.0691207 0.112747 0.0474107 0.396421 0.5 +0.0321816 0.0968615 0.0396789 0.729209 0.5 +0.0447686 0.0889311 -0.000811854 0.586038 0.457181 +0.0411659 0.0952708 0.0280268 0.664941 0.5 +-0.0660809 0.135405 0.0431027 0.690197 0.411127 +-0.0502228 0.125461 0.0326401 0.563116 0.417045 +-0.0329481 0.169751 -0.00390259 0.662116 0.5 +0.0392898 0.0993144 0.028831 0.662356 0.5 +-0.0135146 0.181607 -0.0231689 0.581343 0.5 +-0.0407211 0.150643 0.00408479 0.433316 0.5 +-0.0152136 0.174214 -0.0186712 0.712815 0.5 +0.0381951 0.102007 0.0289909 0.688393 0.5 +-0.0434333 0.15941 0.00551467 0.520652 0.443011 +-0.0320296 0.171249 -0.00429305 0.659211 0.5 +-0.0610188 0.119808 0.0416066 0.624355 0.5 +-0.056455 0.12554 0.0394323 0.65704 0.5 +-0.0265916 0.172718 -0.0105089 0.635862 0.5 +-0.0269838 0.158131 -0.000540227 0.363224 0.400604 +-0.0359122 0.158048 0.00410154 0.434919 0.5 +-0.0464636 0.157957 0.00818306 0.512632 0.479676 +0.0383322 0.0928141 0.0344469 0.71253 0.5 +0.038476 0.104075 -0.00282883 0.597619 0.456894 +-0.025021 0.178659 -0.00994683 0.55564 0.5 +0.0326792 0.103442 0.0351236 0.728216 0.5 +0.00828387 0.0859903 0.0560092 0.402055 0.482328 +0.00922789 0.0860105 0.0556146 0.400814 0.477179 +0.0101565 0.0860282 0.0551829 0.402884 0.462939 +0.0110199 0.0860342 0.0546992 0.40957 0.451767 +0.0119151 0.0860485 0.0542349 0.479039 0.478239 +0.0127323 0.0860509 0.0536553 0.461559 0.477881 +0.0135127 0.0860479 0.0530247 0.468456 0.5 +0.0142472 0.0860448 0.0523279 0.471886 0.48132 +0.0151023 0.0860518 0.0518047 0.478157 0.39126 +0.0159863 0.0860656 0.0513294 0.489699 0.5 +0.016819 0.0860765 0.050782 0.593803 0.425482 +0.0431463 0.100109 0.00616795 0.563588 0.470444 +0.0255132 0.110081 0.0370706 0.511307 0.482387 +-0.0639988 0.121381 0.0479339 0.62216 0.5 +0.0208066 0.08618 0.0495337 0.587841 0.5 +0.0217652 0.0862022 0.0491664 0.499709 0.5 +0.022652 0.0862116 0.0486888 0.51626 0.468061 +0.0235632 0.0862591 0.0483322 0.539865 0.389736 +0.0245364 0.0862451 0.0478999 0.539434 0.36766 +0.0254315 0.0862638 0.0474376 0.539883 0.5 +0.026296 0.0862676 0.0469202 0.636264 0.5 +0.0270421 0.0862601 0.0462384 0.643021 0.5 +0.0276821 0.0862408 0.0453967 0.58425 0.5 +0.0282773 0.0862159 0.0445154 0.540345 0.5 +0.02895 0.086199 0.0437135 0.64532 0.5 +0.0298019 0.0862025 0.0431971 0.948814 0.5 +0.0308141 0.0862286 0.0429136 0.680712 0.5 +0.0318663 0.0862689 0.0426688 0.702316 0.5 +0.0327708 0.0862789 0.0422215 0.638338 0.5 +0.0335588 0.0862851 0.0416032 0.641226 0.5 +0.0342152 0.0862629 0.0407864 0.521676 0.5 +0.034843 0.0862437 0.0399362 0.557759 0.464133 +0.0354707 0.0862229 0.039086 0.593383 0.5 +0.0360644 0.0861926 0.0381664 0.643327 0.5 +0.0366768 0.0861722 0.0373065 0.66607 0.5 +0.0373244 0.0861524 0.0364715 0.689667 0.5 +0.037986 0.0861315 0.0356473 0.705249 0.5 +0.0386471 0.086118 0.0348681 0.711283 0.5 +0.0392931 0.086096 0.0340337 0.709148 0.5 +0.0399369 0.0860773 0.0331939 0.706756 0.5 +0.040546 0.0860518 0.0323351 0.704914 0.5 +0.0410852 0.0860175 0.0313838 0.689169 0.421383 +0.0415957 0.0859827 0.0303559 0.667656 0.5 +0.0420715 0.0859357 0.0292923 0.655655 0.438108 +0.0426426 0.0858997 0.0283401 0.639294 0.5 +0.0432125 0.0858656 0.0273897 0.624743 0.456371 +0.0436775 0.0859385 0.0262014 0.612064 0.5 +-0.0252491 0.162472 -0.00507229 0.589825 0.5 +-0.0517798 0.115481 0.0337859 0.638379 0.5 +0.0280677 0.100848 0.0407486 0.683542 0.5 +0.00462528 0.109546 0.0419595 0.613315 0.40326 +-0.0572883 0.132547 0.0364836 0.632581 0.5 +-0.0545051 0.119806 0.0369329 0.580671 0.5 +-0.0569887 0.118401 0.0385929 0.541111 0.5 +0.022545 0.0955327 0.0468247 0.452926 0.472945 +0.0359993 0.0955223 0.036379 0.725446 0.5 +0.0447287 0.0917385 0.00119217 0.529007 0.5 +0.0374765 0.0967619 0.0332563 0.740945 0.5 +-0.0788357 0.148682 -0.00186858 0.742569 0.5 +-0.0690033 0.127063 0.0512206 0.566523 0.5 +0.0344187 0.0994578 0.0359067 0.735487 0.5 +0.0363106 0.0994119 0.033375 0.732078 0.5 +0.0238643 0.100811 0.0434608 0.639045 0.5 +-0.0395514 0.159448 0.00235113 0.604052 0.5 +-0.0682257 0.127075 0.0505767 0.587459 0.5 +-0.0391909 0.150688 0.00279786 0.387417 0.5 +-0.0109096 0.172768 -0.0212178 0.613306 0.5 +-0.022958 0.166842 -0.0105567 0.505567 0.5 +0.0296006 0.0982071 0.041203 0.714831 0.5 +0.0343704 0.104711 0.0323207 0.719961 0.5 +-0.0698527 0.139727 0.0465118 0.633172 0.5 +0.0450967 0.0889619 0.00117113 0.470736 0.5 +-0.0511173 0.128308 0.0330935 0.680957 0.5 +-0.0684868 0.135467 0.0467048 0.706902 0.5 +-0.0589296 0.1241 0.041105 0.504077 0.411633 +-0.0355709 0.168274 -0.000671324 0.626455 0.5 +-0.0372423 0.152141 0.00211029 0.428839 0.5 +-0.0580097 0.136726 0.0336791 0.571465 0.5 +0.0303852 0.098223 0.0405823 0.729182 0.5 +-0.0680972 0.121444 0.0525081 0.573607 0.5 +-0.0672887 0.121448 0.0519139 0.591258 0.5 +-0.0234801 0.168298 -0.011313 0.636847 0.5 +0.026474 0.110098 0.0367031 0.502413 0.5 +0.0369819 0.102039 0.0307859 0.716911 0.5 +-0.051716 0.150726 0.0145842 0.61842 0.5 +-0.0302445 0.16108 -0.00171322 0.579795 0.5 +-0.0663379 0.132604 0.0444522 0.71379 0.5 +0.0253164 0.112728 0.0350367 0.530495 0.432049 +0.0271768 0.112761 0.0342135 0.552181 0.418855 +-0.0659605 0.110851 0.0377691 0.429344 0.5 +-0.0437406 0.150663 0.00676805 0.646596 0.5 +-0.0896534 0.0983503 0.0154045 0.611665 0.463333 +0.0446953 0.0861142 -0.000824781 0.545284 0.5 +-0.0188762 0.171241 -0.0152046 0.65863 0.446977 +-0.0627733 0.141026 0.037362 0.719373 0.5 +0.0217763 0.115313 0.0351727 0.64213 0.5 +-0.0318141 0.156607 0.00124178 0.470236 0.423192 +-0.0392482 0.165334 0.00281642 0.695949 0.5 +-0.0174749 0.184587 -0.0183292 0.415587 0.5 +-0.0165017 0.177176 -0.0187481 0.723863 0.5 +-0.0215027 0.163915 -0.00845889 0.527327 0.484351 +-0.0253167 0.177183 -0.0103739 0.689317 0.5 +0.0314182 0.0968966 0.040312 0.732268 0.5 +0.0192377 0.117984 0.0350388 0.607608 0.5 +-0.0520794 0.132523 0.0317044 0.737116 0.5 +-0.0742583 0.12978 0.0523998 0.575998 0.450725 +-0.0509023 0.125469 0.0333647 0.589573 0.5 +-0.0591308 0.125513 0.0408421 0.63487 0.41306 +0.0360463 0.0953891 -0.0118379 0.728136 0.5 +0.0287151 0.0982016 0.0416756 0.703006 0.422367 +-0.0427202 0.152139 0.00651185 0.655906 0.5 +-0.0435275 0.152141 0.00710463 0.664081 0.5 +-0.0557053 0.132552 0.0352577 0.661006 0.5 +-0.0295434 0.168268 -0.00777595 0.594055 0.5 +-0.0529585 0.135327 0.0304274 0.703009 0.5 +0.044663 0.094574 0.0141596 0.5534 0.431942 +-0.053643 0.135335 0.0311995 0.719217 0.5 +-0.0543474 0.135324 0.0319505 0.706218 0.5 +-0.0607049 0.145387 0.0368926 0.591969 0.407938 +-0.0657248 0.120041 0.0506761 0.559952 0.5 +-0.0671254 0.128435 0.0486555 0.707462 0.5 +-0.0664402 0.128427 0.0478848 0.714566 0.5 +-0.064581 0.128354 0.0453237 0.714789 0.5 +0.0388816 0.0927717 0.0335536 0.714931 0.5 +-0.0209835 0.159643 -0.00415092 0.377721 0.5 +0.0350121 0.104701 0.0314746 0.719612 0.5 +0.00913683 0.0873343 0.0554698 0.452985 0.5 +0.0100793 0.0873522 0.0550703 0.46366 0.5 +0.0110023 0.0872551 0.0546654 0.43891 0.396491 +0.0119513 0.0873992 0.0542929 0.47372 0.5 +0.0127955 0.0874066 0.0537621 0.477905 0.5 +0.0135801 0.0874029 0.0531363 0.599118 0.5 +0.0142802 0.0873929 0.0523851 0.579646 0.5 +0.0150914 0.0873948 0.0517971 0.598165 0.438363 +0.0159587 0.0874032 0.0512942 0.496143 0.5 +0.0167493 0.0874098 0.0506847 0.573229 0.5 +0.0174898 0.0874014 0.0499964 0.69316 0.5 +0.0183745 0.0874107 0.0495162 0.685664 0.5 +-0.0580888 0.115436 0.0369297 0.653439 0.5 +-0.0668807 0.112599 0.0436137 0.249774 0.5 +0.0216294 0.0875507 0.0490393 0.491626 0.446835 +0.0226438 0.0875613 0.0487078 0.505851 0.441793 +0.0235949 0.0875751 0.0483132 0.520197 0.5 +0.0245253 0.0875975 0.0479106 0.532558 0.478984 +0.0253549 0.0875981 0.0473346 0.648178 0.5 +0.026147 0.0875952 0.0467145 0.635588 0.5 +0.0268834 0.0875842 0.0460207 0.618949 0.5 +0.0275571 0.0875682 0.0452466 0.577216 0.5 +0.0282213 0.0875505 0.0444323 0.537785 0.5 +0.0290078 0.087549 0.0438096 0.669051 0.5 +0.029848 0.0875415 0.0432926 0.677221 0.462896 +0.030847 0.0875798 0.0429743 0.547821 0.5 +0.0319159 0.0876168 0.0427503 0.687407 0.5 +0.0328487 0.0876389 0.0423414 0.678869 0.5 +0.0336134 0.0876336 0.0416906 0.533055 0.5 +0.0342709 0.0876121 0.0408726 0.552368 0.5 +0.0349072 0.0875927 0.04003 0.584764 0.5 +0.0355341 0.0875716 0.0391778 0.616083 0.455732 +0.0361469 0.0875521 0.038321 0.64406 0.443109 +0.0367284 0.0875226 0.0373878 0.65807 0.5 +0.0373285 0.0874946 0.0364747 0.687241 0.5 +0.0379656 0.0874795 0.0356781 0.705931 0.5 +0.0386176 0.0874608 0.0348475 0.706919 0.5 +0.0392263 0.0874331 0.033936 0.714086 0.5 +0.0398379 0.0874103 0.0331324 0.710406 0.5 +0.0404106 0.0873775 0.0321991 0.699973 0.5 +0.0409408 0.0873455 0.0311847 0.685123 0.5 +0.0414488 0.0873044 0.0301508 0.672612 0.390114 +0.0419641 0.0872658 0.0291034 0.668686 0.5 +0.0425127 0.0872289 0.028142 0.657513 0.5 +0.0430592 0.0871926 0.0271788 0.642 0.454587 +0.00211138 0.110155 -0.0201605 0.766242 0.5 +0.0403539 0.105584 0.00317596 0.446417 0.5 +0.0388792 0.085648 -0.0137779 0.675035 0.5 +-0.0233757 0.163881 -0.00766181 0.703916 0.5 +-0.0302503 0.17123 -0.00702025 0.73801 0.5 +0.0370031 0.104683 0.029035 0.68556 0.5 +-0.0480529 0.15019 -0.0042011 0.525704 0.5 +-0.0881957 0.146062 0.0092207 0.636247 0.5 +-0.0249764 0.159657 -0.0011434 0.417482 0.394496 +0.0339652 0.0955609 0.0387182 0.725324 0.5 +-0.0507271 0.115538 0.0335799 0.638595 0.5 +0.0362345 0.0967824 0.0350211 0.726199 0.412076 +-0.0224128 0.163867 -0.00803238 0.710658 0.5 +-0.0442602 0.153622 0.00782588 0.554273 0.423156 +0.0350885 0.099465 0.0350983 0.729276 0.5 +0.0357221 0.0994501 0.0342567 0.733689 0.5 +0.0230237 0.100791 0.0439995 0.493686 0.48395 +-0.0499113 0.147776 0.0118822 0.53476 0.5 +-0.0548599 0.145302 0.0295141 0.540594 0.5 +0.034236 0.094243 0.0391072 0.712019 0.5 +-0.0217726 0.172729 -0.0141007 0.668714 0.5 +-0.0182699 0.166848 -0.0125771 0.479155 0.485725 +-0.0558038 0.116914 0.0367748 0.617124 0.5 +0.0356609 0.104701 0.030636 0.725222 0.5 +0.0392521 0.0940728 0.0323259 0.710179 0.5 +0.0417053 0.0943445 -0.00480688 0.615258 0.454551 +-0.0525731 0.128311 0.0345149 0.72237 0.5 +-0.0692028 0.135485 0.0474165 0.692589 0.5 +-0.0606582 0.12408 0.0421371 0.632787 0.5 +0.0136813 0.0952834 0.0497668 0.472332 0.5 +-0.0903261 0.135124 0.0222174 0.843394 0.5 +0.0191348 0.102061 0.0453843 0.494895 0.5 +-0.0417008 0.153622 0.00625938 0.638591 0.5 +-0.0362035 0.16829 0.000195359 0.640341 0.5 +-0.0149394 0.183104 -0.021718 0.550928 0.5 +-0.0136101 0.17129 -0.0181213 0.539559 0.5 +0.0407885 0.10564 0.00816522 0.675953 0.5 +-0.0698407 0.127049 0.051763 0.684376 0.5 +-0.0668335 0.143964 0.0420823 0.614394 0.5 +-0.0660765 0.124251 0.0501642 0.666455 0.5 +-0.0582272 0.151065 0.033498 0.433636 0.5 +0.0262713 0.112733 0.0346521 0.535701 0.5 +-0.0204064 0.162527 -0.00684616 0.388206 0.5 +-0.0744171 0.1312 0.052182 0.577201 0.448699 +-0.0649089 0.110873 0.0375872 0.498089 0.5 +-0.0126137 0.180121 -0.0236267 0.667921 0.5 +-0.00531922 0.0961442 -0.0318294 0.757864 0.5 +-0.0725346 0.145512 -0.0179133 0.136819 0.239158 +0.0340795 0.103399 0.0336714 0.718973 0.5 +-0.0620302 0.141028 0.0366839 0.704644 0.5 +-0.0740753 0.174982 -0.0510829 0.405973 0.5 +-0.0309282 0.156627 0.000764301 0.370162 0.5 +-0.0247742 0.180145 -0.00956802 0.433756 0.5 +0.0392299 0.108358 0.0101653 0.708478 0.5 +-0.0265438 0.177186 -0.00862049 0.546176 0.5 +-0.0157146 0.17719 -0.0193767 0.722963 0.5 +-0.0319662 0.163855 -0.00423083 0.5828 0.46469 +-0.0362769 0.163827 -0.00170672 0.553354 0.5 +0.0264379 0.0968548 0.0436578 0.677963 0.5 +0.00975279 0.123922 0.0333795 0.557294 0.5 +-0.0471693 0.128157 0.0265222 0.471073 0.447175 +-0.0644638 0.129733 0.0437115 0.711431 0.5 +-0.063853 0.129717 0.0428324 0.712304 0.5 +-0.059976 0.125502 0.0413668 0.647477 0.5 +-0.0607974 0.125499 0.0419374 0.674498 0.5 +-0.0615433 0.125505 0.042614 0.689152 0.5 +-0.0621766 0.125515 0.0434733 0.670374 0.5 +-0.0611133 0.149657 0.036321 0.448533 0.467632 +0.0412886 0.0858436 -0.00978207 0.50876 0.484037 +-0.024717 0.169741 -0.0113487 0.641518 0.5 +-0.0202842 0.16977 -0.0137262 0.634164 0.5 +-0.0482395 0.144672 0.00644062 0.384529 0.450179 +0.04371 0.0987542 0.0111628 0.576972 0.5 +-0.0555526 0.124119 0.0389742 0.613684 0.5 +-0.0175612 0.186044 -0.0184493 0.335802 0.5 +-0.0657008 0.139678 0.041893 0.682234 0.5 +-0.052057 0.15088 0.0153954 0.641994 0.5 +-0.0187348 0.175696 -0.0167204 0.706061 0.5 +-0.0651714 0.128382 0.0462127 0.721478 0.5 +0.0363374 0.104678 0.0298648 0.705404 0.5 +-0.0575363 0.138153 0.0326058 0.614763 0.5 +0.0399806 0.105624 0.0191716 0.56627 0.5 +0.00988218 0.0886651 0.0547874 0.473524 0.5 +0.0108129 0.0887938 0.0544498 0.495429 0.411549 +0.0118566 0.0887261 0.0541581 0.478042 0.5 +0.0127518 0.0887452 0.0537008 0.584127 0.453991 +0.0135799 0.0887495 0.0531421 0.625418 0.5 +0.0142545 0.0887312 0.0523539 0.624285 0.5 +0.0151093 0.0887421 0.0518346 0.630784 0.426818 +0.0159612 0.0887478 0.0513106 0.610117 0.432088 +0.0167127 0.0887461 0.050636 0.600442 0.5 +0.0173624 0.088714 0.0498122 0.55808 0.5 +0.018083 0.0887399 0.0491141 0.678536 0.5 +-0.0672273 0.135447 0.0449702 0.710436 0.5 +-0.0562382 0.115455 0.0360976 0.631186 0.5 +-0.0477168 0.123954 0.0291105 0.584087 0.5 +0.0225511 0.0888829 0.0485585 0.575991 0.5 +0.0234643 0.0889079 0.0481435 0.480961 0.5 +0.0243668 0.0889213 0.0476805 0.596805 0.5 +0.0252321 0.0889244 0.0471615 0.61908 0.5 +0.0259941 0.0889184 0.046498 0.616105 0.5 +0.0267348 0.0889072 0.0458132 0.61651 0.5 +0.0274461 0.0888981 0.0450769 0.598511 0.5 +0.0281857 0.0888902 0.0443935 0.553013 0.5 +0.0289502 0.0888845 0.043761 0.700087 0.442157 +0.0298766 0.0889056 0.0433386 0.941494 0.5 +0.0309103 0.088937 0.0430941 0.476001 0.5 +0.0319575 0.0889685 0.042819 0.68766 0.5 +0.0327921 0.0889736 0.0422708 0.544258 0.5 +0.0335486 0.0889696 0.0416029 0.565036 0.5 +0.0342459 0.0889575 0.0408509 0.594897 0.5 +0.0348898 0.0889372 0.0400127 0.623815 0.5 +0.0355637 0.0889227 0.0392444 0.650906 0.5 +0.0361767 0.0888967 0.0383392 0.655972 0.5 +0.0367682 0.0888721 0.037463 0.669648 0.5 +0.037341 0.0888457 0.0365275 0.69261 0.5 +0.0379525 0.0888235 0.0356698 0.69954 0.5 +0.0385774 0.0888011 0.0348199 0.711599 0.5 +0.0391468 0.0887707 0.0338836 0.706244 0.5 +0.0397094 0.0887389 0.0329441 0.689801 0.5 +0.0402616 0.088708 0.0319407 0.694004 0.5 +0.0407891 0.0886694 0.0309807 0.691317 0.5 +0.0412883 0.0886287 0.0299331 0.680373 0.5 +0.041807 0.0885902 0.0288907 0.678689 0.5 +0.0423208 0.0885482 0.027912 0.668906 0.5 +0.0428517 0.0885116 0.026874 0.639864 0.5 +-0.054132 0.143048 0.0274248 0.568814 0.449151 +-0.0449077 0.159414 0.00690868 0.583955 0.5 +0.0453002 0.0932088 0.00816687 0.598655 0.441142 +-0.078005 0.151454 -0.00188508 0.896031 0.5 +-0.0674332 0.127053 0.0499702 0.64024 0.5 +-0.0223649 0.171249 -0.0132085 0.676149 0.433489 +0.0287102 0.0942447 0.0434182 0.668866 0.5 +0.0390362 0.0980073 0.030266 0.70139 0.5 +-0.058955 0.151077 0.0341866 0.46817 0.5 +0.0324749 0.095557 0.0400886 0.726133 0.5 +-0.0244241 0.178665 -0.0108375 0.550858 0.5 +-0.0216847 0.180158 -0.0138785 0.664982 0.5 +0.0417114 0.091515 -0.00780409 0.448955 0.473572 +0.0420736 0.0957824 -0.00279849 0.601992 0.5 +0.0369413 0.0993952 0.0325229 0.727071 0.5 +0.0221931 0.100779 0.0445472 0.580816 0.5 +0.0213321 0.100802 0.0450693 0.571923 0.5 +-0.0617898 0.16156 -0.0335933 0.431428 0.466969 +-0.0645123 0.172574 -0.0485643 0.555723 0.5 +-0.0767176 0.159013 -0.0120318 0.76056 0.5 +-0.0209165 0.172715 -0.0146234 0.685707 0.5 +-0.0104869 0.166942 -0.0170857 0.380942 0.5 +-0.0766704 0.154203 -0.00290271 0.552617 0.5 +-0.0599778 0.148254 0.0362061 0.606367 0.5 +-0.0237266 0.161004 -0.00287357 0.469801 0.5 +0.0404099 0.0926692 0.0304567 0.694983 0.5 +0.0424555 0.0902012 0.0271644 0.644574 0.5 +-0.0533336 0.128311 0.0351755 0.730652 0.5 +-0.0930693 0.120128 0.0262942 0.835142 0.5 +-0.0614001 0.124084 0.0428232 0.638249 0.5 +-0.0350091 0.168257 -0.00164334 0.663088 0.5 +-0.0108886 0.108738 -0.0217426 0.812321 0.5 +-0.0479777 0.147732 0.00938552 0.667444 0.5 +-0.0533452 0.118341 0.0350731 0.579274 0.5 +-0.0547216 0.118372 0.0366122 0.587104 0.5 +0.043578 0.0888313 -0.0037919 0.516703 0.5 +-0.0400971 0.153595 0.0050429 0.640087 0.5 +0.0115292 0.119123 0.0361473 0.659278 0.437896 +0.010522 0.119127 0.036469 0.534711 0.5 +-0.0651106 0.120024 0.049809 0.585105 0.5 +-0.0615581 0.145382 0.0374116 0.583197 0.5 +-0.00188013 0.105918 -0.0222309 0.778164 0.5 +0.045363 0.0932019 0.00717004 0.591877 0.5 +0.0222809 0.11936 0.0323905 0.617562 0.5 +-0.0871972 0.102223 0.00642609 0.476696 0.362011 +-0.0749615 0.135451 -0.00681495 0.459033 0.397283 +-0.0581881 0.125521 0.0404357 0.629311 0.5 +-0.0929926 0.121477 0.0272936 0.777432 0.5 +-0.09232 0.126938 0.0302595 0.634019 0.5 +-0.025101 0.114847 -0.0155729 0.856895 0.5 +-0.0777217 0.159728 -0.0179219 0.524492 0.5 +-0.0612458 0.141043 0.0360828 0.689334 0.5 +-0.0280624 0.17271 -0.00913079 0.776112 0.5 +-0.0300912 0.15662 0.000215848 0.351144 0.481163 +-0.0625405 0.132491 0.039434 0.670358 0.5 +-0.0259631 0.177171 -0.00957335 0.657868 0.5 +-0.067274 0.142559 0.0431983 0.670289 0.5 +-0.0328373 0.163842 -0.00376818 0.56777 0.5 +-0.0408691 0.158042 0.00401656 0.602409 0.5 +-0.0132844 0.180127 -0.0228495 0.703185 0.5 +-0.0192412 0.184576 -0.0155995 0.304208 0.5 +-0.0495036 0.153584 0.0107879 0.6265 0.449974 +-0.0216854 0.168305 -0.0122385 0.626192 0.467734 +-0.093152 0.121537 0.0362834 0.584216 0.5 +-0.0172565 0.181572 -0.0253576 0.433302 0.5 +-0.00687638 0.105938 -0.022783 0.740962 0.5 +-0.0553588 0.131132 0.0357618 0.684725 0.5 +-0.0627776 0.125519 0.0444184 0.688731 0.5 +-0.0633155 0.125546 0.0454063 0.706897 0.5 +-0.0644512 0.125591 0.047275 0.723432 0.5 +0.0451564 0.0931924 0.00517592 0.582494 0.5 +-0.06188 0.164622 -0.0566003 0.563622 0.5 +-0.0495247 0.141678 0.0113921 0.671776 0.5 +-0.0612252 0.0618413 0.0248018 0.585468 0.418259 +-0.00885889 0.172674 -0.0247544 0.283557 0.5 +-0.0639713 0.0651159 0.0301523 0.713806 0.348039 +-0.0493943 0.14168 0.0103932 0.619295 0.5 +0.0450677 0.0917906 0.015163 0.553666 0.5 +0.0454465 0.0903989 0.00417224 0.529235 0.5 +-0.0733825 0.135448 0.0501828 0.618067 0.393849 +-0.0657901 0.128396 0.0470862 0.723113 0.5 +-0.0483279 0.119696 0.0300033 0.60103 0.5 +-0.0629727 0.118457 0.044154 0.609863 0.5 +-0.0531086 0.126902 0.0355005 0.688765 0.5 +0.021747 0.102101 0.0439088 0.635692 0.5 +0.0116453 0.090034 0.0538428 0.485387 0.479826 +0.0125532 0.0900642 0.0534187 0.494413 0.5 +0.0133955 0.0900754 0.0528858 0.512961 0.480236 +0.0141807 0.0900592 0.0522594 0.555914 0.47865 +0.0150763 0.0900809 0.0517899 0.549718 0.428513 +0.0159395 0.0900955 0.0512828 0.635882 0.5 +0.0166698 0.0900802 0.0505874 0.594035 0.5 +0.0172909 0.0900542 0.0497289 0.542688 0.5 +0.0179261 0.0900567 0.048881 0.649124 0.5 +-0.0458573 0.147704 0.00717141 0.524847 0.5 +-0.0554619 0.115432 0.0354757 0.647721 0.5 +-0.0571198 0.115445 0.0365816 0.642818 0.5 +-0.0623338 0.163141 -0.0335899 0.494006 0.5 +0.0233132 0.0902311 0.0479207 0.473948 0.5 +0.0242228 0.0902502 0.0474811 0.487297 0.438825 +0.0251056 0.0902557 0.0469821 0.608489 0.5 +0.0259015 0.0902483 0.0463733 0.611712 0.5 +0.0266281 0.0902434 0.0456585 0.623299 0.5 +0.027396 0.0902329 0.0450202 0.612878 0.5 +0.0281375 0.0902298 0.0443276 0.579022 0.5 +0.0289857 0.090239 0.0438092 0.561728 0.431286 +0.0299243 0.0902598 0.0434097 0.575684 0.5 +0.0308776 0.0902792 0.0430757 0.473026 0.47039 +0.0318258 0.090298 0.0426417 0.471521 0.5 +0.0326751 0.0902947 0.0421046 0.562676 0.5 +0.0334236 0.0903004 0.0414245 0.567716 0.5 +0.0341402 0.0902832 0.0407178 0.601592 0.5 +0.0348067 0.0902706 0.0399059 0.651964 0.5 +0.0355137 0.0902592 0.0391607 0.693679 0.5 +0.0361389 0.0902387 0.0383091 0.686059 0.5 +0.0367367 0.0902141 0.03744 0.710419 0.5 +0.0373216 0.0901862 0.036514 0.703473 0.5 +0.037936 0.0901639 0.0356574 0.703057 0.5 +0.0385285 0.0901386 0.0347352 0.705687 0.5 +0.0390766 0.0901064 0.0338413 0.699633 0.414578 +0.0396241 0.0900718 0.0328369 0.689257 0.5 +0.0401191 0.0900359 0.0318057 0.687975 0.421986 +0.0406221 0.0899944 0.0307666 0.689611 0.5 +0.0411691 0.0899632 0.029736 0.677547 0.422673 +0.0416966 0.0899224 0.0287651 0.672994 0.5 +0.0422067 0.0898824 0.0277847 0.656517 0.438145 +0.0343005 0.110021 0.028645 0.683958 0.5 +-0.0760236 0.150016 -0.00789124 0.601146 0.5 +-0.0304354 0.159526 0.00145329 0.431366 0.5 +0.0173575 0.0940342 0.0480767 0.670913 0.5 +0.016571 0.0940211 0.0486896 0.550604 0.5 +0.0158596 0.0940217 0.0494261 0.55984 0.5 +0.0150912 0.0940152 0.0500689 0.464311 0.482301 +0.0295409 0.0942529 0.0428642 0.679868 0.5 +-0.0120306 0.174239 -0.0210892 0.716 0.5 +-0.0344414 0.153644 0.000910386 0.406331 0.5 +0.0332346 0.0955533 0.0394336 0.724263 0.5 +-0.0459743 0.153608 0.00885524 0.557235 0.5 +0.034944 0.10998 0.0278542 0.66615 0.5 +-0.0189243 0.181629 -0.0169471 0.565246 0.5 +-0.047649 0.128193 0.0275289 0.501873 0.5 +0.0375784 0.099381 0.0316743 0.718377 0.5 +0.0304753 0.100799 0.0389817 0.706946 0.5 +-0.0860589 0.113009 0.00328149 0.344807 0.5 +-0.0724692 0.135469 0.0497506 0.511149 0.478661 +-0.0659296 0.14253 0.0416232 0.642342 0.5 +-0.0200653 0.172726 -0.0151523 0.690595 0.5 +-0.0868685 0.11045 0.00936714 0.383561 0.5 +-0.0937998 0.118753 0.0153042 0.568101 0.430796 +-0.0549188 0.148123 0.0275408 0.58359 0.360816 +0.0351689 0.0928995 0.0387113 0.725942 0.5 +-0.068257 0.129831 0.0487832 0.693645 0.5 +-0.0270041 0.168274 -0.00938266 0.622573 0.5 +-0.0518479 0.128319 0.033784 0.694061 0.5 +-0.0647288 0.126998 0.0468559 0.73149 0.5 +-0.0598342 0.124083 0.0415696 0.614936 0.463311 +-0.0673703 0.122848 0.0518073 0.597215 0.5 +-0.0479423 0.118344 0.0305757 0.625771 0.5 +-0.016957 0.186039 -0.0193264 0.344984 0.5 +-0.0540718 0.118333 0.0357708 0.586268 0.5 +-0.0295615 0.171229 -0.00778742 0.770335 0.5 +0.0284454 0.0995183 0.0412905 0.574285 0.5 +-0.0736511 0.180693 -0.0540178 0.156296 0.236956 +0.0316414 0.11271 0.0301021 0.697703 0.5 +-0.0564793 0.151056 0.0307055 0.47621 0.5 +-0.055953 0.151039 0.0297159 0.458151 0.5 +-0.0249427 0.17123 -0.0116584 0.643471 0.5 +-0.0675492 0.129835 0.0480321 0.711408 0.5 +0.0244048 0.112688 0.0354614 0.524673 0.5 +-0.0695324 0.125657 0.0522171 0.547788 0.5 +-0.0709342 0.128224 -0.00904999 0.667884 0.5 +-0.069935 0.128232 -0.00913858 0.736061 0.5 +-0.0171387 0.171259 -0.0162017 0.536557 0.5 +-0.0565891 0.129759 0.0374849 0.689253 0.5 +-0.0859023 0.122521 -0.0027014 0.725558 0.5 +-0.0052769 0.0941788 -0.0338289 0.867482 0.5 +-0.0930778 0.121531 0.0352811 0.57381 0.5 +-0.0605388 0.141029 0.0353291 0.658279 0.5 +-0.0465912 0.145038 0.00283923 0.272241 0.5 +-0.0292113 0.156649 -0.000270817 0.297356 0.5 +0.0354333 0.111001 -0.000827134 0.802698 0.5 +-0.0554323 0.145321 0.0304155 0.55505 0.5 +-0.0149484 0.177196 -0.0200335 0.726803 0.5 +-0.0208004 0.181643 -0.0143459 0.540429 0.5 +-0.0408994 0.163853 0.00394115 0.705987 0.5 +-0.0391241 0.157933 0.00465789 0.466715 0.5 +-0.014903 0.172738 -0.0182312 0.681922 0.5 +0.0428444 0.0958802 0.0241636 0.525878 0.5 +-0.0688527 0.142579 0.0444582 0.53175 0.483269 +-0.0596514 0.142474 0.0348633 0.694236 0.5 +0.0382386 0.084194 -0.0147697 0.668923 0.5 +-0.0624789 0.152144 -0.0275875 0.499903 0.476645 +-0.0472716 0.130968 0.0245047 0.575873 0.459449 +-0.089704 0.111925 0.0143387 0.483241 0.5 +-0.0142596 0.175663 -0.0267921 0.439072 0.5 +-0.0741408 0.105214 0.0369385 0.3611 0.5 +-0.0650593 0.125632 0.048098 0.737436 0.5 +-0.0638617 0.125566 0.0463833 0.714151 0.5 +0.0310181 0.112726 0.0309619 0.699475 0.5 +-0.0895155 0.0983259 0.0124123 0.802958 0.5 +0.0347485 0.0981702 0.0363481 0.730281 0.5 +0.044554 0.0917551 0.0201604 0.501039 0.469743 +0.042165 0.0859172 -0.00778247 0.591748 0.5 +0.0457915 0.0862101 0.0121678 0.577695 0.5 +0.0444767 0.0889055 -0.00179899 0.619799 0.44792 +-0.0697618 0.112838 0.0482345 0.333355 0.5 +0.0364996 0.0928818 0.0370772 0.734349 0.5 +-0.0702674 0.128451 0.0511564 0.464393 0.5 +-0.0488446 0.119728 0.0310062 0.583052 0.5 +-0.0476849 0.119711 0.0291692 0.672445 0.5 +-0.0258283 0.172717 -0.011167 0.643829 0.5 +0.0131268 0.120538 0.0349816 0.526692 0.479009 +0.012093 0.120504 0.0352323 0.633595 0.455484 +0.0131192 0.0913894 0.0524895 0.51356 0.478187 +0.0140028 0.091392 0.0520062 0.540479 0.5 +0.0149304 0.0913967 0.05159 0.654995 0.5 +0.015783 0.0914175 0.0510677 0.638212 0.5 +0.016507 0.0913965 0.0503683 0.581784 0.5 +0.017105 0.0913787 0.0494605 0.512835 0.5 +0.017703 0.0913635 0.0485583 0.63502 0.5 +0.0184671 0.0913654 0.0479185 0.676642 0.5 +-0.0894038 0.140678 0.0331776 0.605713 0.5 +-0.0546448 0.115434 0.0349037 0.505711 0.474977 +-0.0106393 0.169838 -0.0190633 0.516114 0.5 +0.0231687 0.0915577 0.0477207 0.466908 0.5 +0.0240747 0.0915746 0.0472686 0.472308 0.477612 +0.0249549 0.0915796 0.0467751 0.490617 0.5 +0.0257721 0.0915784 0.0461947 0.613053 0.5 +0.0265834 0.0915781 0.0456097 0.630571 0.5 +0.0273368 0.091573 0.0449418 0.632636 0.452168 +0.0281352 0.0915776 0.0443357 0.625876 0.462245 +0.028994 0.0915879 0.0438177 0.605593 0.408759 +0.0298506 0.0915959 0.0433109 0.505088 0.5 +0.0307316 0.091606 0.0428217 0.491622 0.5 +0.0316149 0.0916151 0.0423373 0.487578 0.5 +0.0324504 0.0916248 0.0417895 0.499551 0.5 +0.0332536 0.0916169 0.0411931 0.609468 0.5 +0.0339646 0.0916099 0.0404552 0.630941 0.5 +0.0346714 0.0916012 0.0397133 0.674568 0.5 +0.0353713 0.0915869 0.0389643 0.699002 0.5 +0.0359972 0.0915666 0.0381116 0.716513 0.5 +0.0366443 0.0915417 0.0373244 0.721997 0.5 +0.0372616 0.0915229 0.0364203 0.719171 0.5 +0.0378596 0.0914955 0.035553 0.701167 0.5 +0.0384501 0.0914717 0.0346309 0.700519 0.401901 +0.0390056 0.0914413 0.0336848 0.704975 0.419218 +0.039504 0.0914002 0.0327084 0.687994 0.5 +0.0400022 0.0913669 0.0315547 0.689268 0.418743 +0.0405319 0.0913292 0.030651 0.689719 0.5 +0.041088 0.0912985 0.0296287 0.676099 0.422418 +0.0416262 0.0912615 0.0286616 0.665418 0.5 +0.0421377 0.0912242 0.0276147 0.655485 0.43915 +-0.0501537 0.152144 0.0115744 0.579341 0.5 +0.0195435 0.100771 0.0459866 0.556222 0.5 +-0.0486523 0.128248 0.029602 0.590111 0.5 +-0.0641167 0.143926 0.0389732 0.602566 0.5 +-0.0631641 0.149054 -0.0215452 0.652358 0.5 +-0.0563562 0.140993 0.0307629 0.56146 0.462117 +-0.0717344 0.131221 0.0507858 0.481042 0.476202 +0.0303543 0.0942493 0.0422823 0.689592 0.5 +-0.0174665 0.17272 -0.016673 0.687347 0.5 +0.0434109 0.0987186 0.0151565 0.682601 0.5 +0.0442448 0.0902943 -0.00180307 0.647918 0.5 +-0.0261456 0.180134 -0.00803266 0.360237 0.5 +-0.0519213 0.118323 0.0336042 0.595551 0.469946 +-0.0509634 0.152153 0.0121451 0.563758 0.5 +-0.055962 0.148162 0.0296522 0.616639 0.5 +0.0381679 0.0993665 0.0307411 0.698666 0.5 +0.0297368 0.100819 0.0396604 0.703728 0.5 +0.0347431 0.103404 0.0328426 0.719393 0.5 +-0.053281 0.144674 0.0233765 0.626483 0.5 +-0.0512091 0.118302 0.0328718 0.892341 0.5 +-0.0191804 0.172724 -0.0156293 0.693633 0.5 +-0.0675391 0.124252 0.0515729 0.61171 0.5 +0.0400863 0.0899903 -0.0108207 0.66494 0.5 +-0.054346 0.125513 0.0372066 0.625318 0.5 +0.0401192 0.0979552 0.0282751 0.660657 0.5 +-0.0460528 0.122513 0.026245 0.654913 0.5 +-0.0180254 0.171268 -0.0157212 0.660943 0.5 +-0.0504448 0.128295 0.0323161 0.668507 0.5 +-0.0653439 0.127011 0.0477296 0.736066 0.5 +-0.0580291 0.124109 0.0406616 0.501034 0.5 +-0.0681363 0.122845 0.0524474 0.565623 0.5 +-0.0875576 0.0954908 0.0044419 0.444617 0.471276 +-0.0593417 0.119814 0.0404797 0.523595 0.5 +-0.0526579 0.118327 0.034303 0.580209 0.5 +-0.0576046 0.151067 0.0326375 0.431138 0.5 +-0.0776496 0.163935 -0.0239336 0.438153 0.5 +-0.0555708 0.142434 0.0301615 0.658738 0.5 +0.0301352 0.0955658 0.0419698 0.721178 0.5 +-0.066143 0.143958 0.0413147 0.622133 0.5 +0.0204354 0.100784 0.0455262 0.563631 0.5 +-0.0690116 0.129833 0.0494501 0.648809 0.5 +-0.0697675 0.129835 0.0501143 0.620425 0.5 +0.0234401 0.112665 0.0358138 0.518225 0.5 +0.0224949 0.112674 0.0362232 0.517991 0.468791 +-0.054418 0.142404 0.0282888 0.546136 0.5 +-0.0206459 0.171255 -0.0142383 0.65985 0.5 +0.0383001 0.0969495 -0.00880451 0.717152 0.5 +0.0397873 0.104095 -0.000789682 0.572911 0.5 +-0.0926495 0.129588 0.0122381 0.466091 0.5 +-0.0295799 0.174217 -0.00600797 0.640144 0.5 +-0.0348452 0.0957896 -0.0233484 0.854701 0.5 +-0.0599745 0.14101 0.03437 0.690644 0.345407 +-0.0468321 0.144886 0.00412892 0.1976 0.5 +-0.0233975 0.156883 -0.00572928 0.214897 0.5 +-0.0227366 0.157094 -0.00651614 0.254248 0.5 +-0.0114995 0.164138 -0.0150087 0.228563 0.367524 +-0.0141839 0.177168 -0.0206609 0.734943 0.5 +0.0243862 0.0955601 0.0459654 0.575163 0.5 +-0.0615996 0.159996 -0.0335919 0.384557 0.5 +-0.0295604 0.158116 0.000994125 0.410213 0.463884 +-0.030456 0.158107 0.0014598 0.482268 0.5 +0.038478 0.0980354 0.0312187 0.71954 0.5 +-0.0104381 0.171321 -0.0205524 0.558318 0.5 +-0.0617686 0.159987 -0.035592 0.517021 0.5 +-0.0592101 0.142401 0.0336275 0.58054 0.350685 +-0.0585904 0.142433 0.0328417 0.771157 0.5 +0.0309161 0.0955754 0.0413413 0.720662 0.5 +-0.0477554 0.130992 0.0255865 0.571698 0.5 +-0.060435 0.131107 0.0389542 0.654455 0.459058 +-0.0654573 0.131176 0.0439868 0.72103 0.5 +-0.0617882 0.138121 0.0352393 0.65371 0.5 +-0.0614468 0.141404 -0.00570472 0.505833 0.5 +-0.0284893 0.0903534 -0.0305816 0.318091 0.5 +0.0408906 0.0942563 -0.00676992 0.587295 0.5 +-0.0758557 0.103473 -0.0101675 0.573662 0.5 +-0.08595 0.110378 0.0213654 0.721227 0.5 +0.0252254 0.095572 0.0454222 0.59859 0.5 +0.0260206 0.095556 0.0448127 0.635723 0.5 +-0.0337241 0.163848 -0.00328844 0.559451 0.5 +-0.0658407 0.0938498 -0.0179236 0.468882 0.5 +0.010651 0.121836 0.0349107 0.513956 0.45741 +0.0434619 0.0930961 0.0241585 0.598287 0.5 +-0.0678583 0.112732 0.0457592 0.340763 0.5 +0.0116064 0.121838 0.0345253 0.5138 0.473996 +0.00969178 0.121836 0.0352946 0.511396 0.5 +-0.0616678 0.143939 0.037247 0.768771 0.5 +-0.0398464 0.0957237 -0.0225845 0.68521 0.5 +-0.0718123 0.0950995 -0.0154446 0.474576 0.5 +-0.069852 0.0951674 -0.0161643 0.530035 0.475894 +-0.0925798 0.11747 0.0343056 0.569435 0.5 +-0.0761089 0.149998 -0.0108814 0.709297 0.5 +-0.0090863 0.16966 -0.0247514 0.42189 0.5 +-0.0615051 0.159991 -0.0325895 0.393715 0.439304 +-0.0738138 0.0950345 -0.0145557 0.41645 0.5 +-0.0758939 0.107753 -0.00831552 0.622649 0.5 +-0.0649061 0.108122 -0.0141961 0.620657 0.5 +-0.076873 0.114866 -0.00505023 0.392229 0.482902 +-0.043838 0.0956679 -0.0221641 0.663955 0.5 +-0.0630974 0.160042 -0.0195595 0.530366 0.5 +-0.0154766 0.160714 -0.011803 0.258534 0.5 +-0.0834254 0.141805 0.00220396 0.494272 0.5 +-0.0626773 0.153684 -0.0325991 0.515545 0.483746 +0.0210547 0.0358177 -0.00168489 0 0 +0.021052 0.0358187 -0.0026817 0.192006 0.5 +0.0205436 0.0357642 -0.00368285 0.167357 0.5 +0.0201601 0.0357218 -0.00467829 0.16207 0.5 +0.0196495 0.0356664 -0.00567711 0.165468 0.5 +0.0191388 0.0356129 -0.00667825 0.174536 0.5 +0.0191352 0.0356125 -0.00767677 0.183388 0.5 +0.0188777 0.03558 -0.00867348 0.179857 0.5 +0.0186225 0.0355557 -0.00967449 0.174801 0.5 +0.0183649 0.0355244 -0.0106716 0.167554 0.5 +0.0182349 0.0355117 -0.0116753 0.171573 0.5 +0.0179783 0.035483 -0.0126728 0.173751 0.5 +0.0181014 0.0354956 -0.0136744 0.174384 0.5 +0.017351 0.0351839 -0.014686 0.144529 0.253209 +0.0166715 0.0353808 -0.0156588 0.19397 0.5 +0.0165095 0.0354073 -0.0166384 0.231376 0.5 +-0.0688351 0.0951745 -0.0162656 0.683919 0.5 +0.0200734 0.0372985 0.0402199 0.202727 0.5 +0.0207024 0.0373647 0.039246 0.188467 0.5 +0.0213046 0.0374522 0.0382518 0.17655 0.5 +0.0216857 0.0374896 0.0372608 0.174996 0.5 +0.0220645 0.0375334 0.0362702 0.17342 0.5 +0.0224472 0.0375897 0.0352799 0.156956 0.287305 +0.0226059 0.0375679 0.034289 0.162062 0.265245 +0.0229958 0.0375848 0.0332895 0.227328 0.5 +-0.0728269 0.0950692 -0.0149677 0.443705 0.438894 +-0.0448348 0.0942101 -0.0220316 0.669283 0.5 +-0.0766843 0.15421 -0.00390102 0.63049 0.5 +-0.0887111 0.101017 0.0193703 0.473932 0.5 +-0.0629568 0.15367 -0.0336031 0.513593 0.5 +-0.0725091 0.147853 -0.0287195 0.3464 0.313239 +0.0450284 0.0875565 0.0211548 0.48489 0.5 +-0.0635972 0.164728 -0.0295802 0.695362 0.5 +-0.0617504 0.158434 -0.0225881 0.383737 0.5 +-0.0611789 0.172541 -0.0596341 0.297289 0.404008 +-0.0618817 0.161578 -0.0325898 0.443556 0.5 +-0.0674791 0.0622216 0.0214031 0.458443 0.439328 +-0.0748306 0.094995 -0.0139518 0.406141 0.393563 +-0.00487882 0.107372 -0.0225382 0.764544 0.5 +-0.00688399 0.107372 -0.022762 0.747137 0.5 +-0.0261438 0.168232 -0.0181898 0.551171 0.5 +-0.060805 0.0953608 -0.018741 0.564732 0.460386 +-0.0308539 0.0958394 -0.0237431 0.846617 0.5 +0.0415131 0.0394077 0.00724875 0.245023 0.5 +0.0413586 0.0394374 0.00625535 0.264637 0.5 +0.0410852 0.0394499 0.00526393 0.276002 0.5 +0.0410047 0.0395957 0.0043142 0.328293 0.5 +0.039816 0.0393083 0.00327619 0.317456 0.5 +0.0393762 0.0393721 0.0023232 0.323835 0.5 +0.0381042 0.0392738 0.00134927 0.464949 0.5 +-0.0093342 0.174192 -0.0247468 0.379734 0.484519 +0.0213045 0.0372836 -0.00268556 0 0 +0.0218798 0.0374214 -0.00364164 0.173629 0.5 +0.0209941 0.0373175 -0.00464913 0.189617 0.5 +0.0204112 0.0371925 -0.00568428 0.301402 0.5 +0.0200283 0.0371524 -0.00668325 0.314111 0.5 +0.0197685 0.0371215 -0.00768223 0.334427 0.5 +0.0195119 0.0370935 -0.00868114 0.338098 0.5 +0.0193623 0.0370952 -0.00967348 0.257995 0.5 +0.0193556 0.0370965 -0.0106758 0.281838 0.5 +0.0191276 0.0370481 -0.0116797 0.280891 0.5 +0.0188962 0.0370007 -0.0126843 0.29679 0.5 +0.0187472 0.0369987 -0.01368 0.315571 0.5 +0.0185047 0.0369619 -0.0146835 0.324763 0.5 +0.0182327 0.0369462 -0.015679 0.336518 0.5 +0.0177475 0.036867 -0.0166881 0.413036 0.5 +0.017237 0.0368135 -0.0176915 0.367832 0.5 +0.0165569 0.0367823 -0.018664 0.371939 0.5 +0.0157741 0.036715 -0.0196413 0.392319 0.5 +0.0148967 0.0366228 -0.0205744 0.267785 0.426505 +0.00946556 0.123094 -0.0106511 0.692898 0.5 +0.0230906 0.0973761 -0.0211755 0.648293 0.46589 +-0.0494359 0.138587 0.00541192 0.403653 0.5 +-0.0615935 0.160001 -0.0315914 0.412907 0.433652 +0.0207467 0.0387687 0.0412277 0.21932 0.41408 +0.0214831 0.0388585 0.0402401 0.223145 0.421064 +0.0219406 0.0388423 0.0393076 0.208277 0.40788 +0.0225876 0.0388978 0.0383164 0.228816 0.5 +0.0230618 0.0389706 0.0372995 0.211221 0.5 +0.0234516 0.0389975 0.0363054 0.211716 0.5 +0.023933 0.0390696 0.0352942 0.219719 0.5 +0.0242087 0.039076 0.0343007 0.228441 0.391643 +0.0244991 0.0390622 0.0333159 0.211295 0.5 +0.0249135 0.0390596 0.0323329 0.26878 0.5 +-0.0608313 0.092512 -0.0191943 0.821032 0.5 +-0.0476623 0.135572 0.0124001 0.537981 0.5 +-0.0398248 0.0928735 -0.0232663 0.570973 0.5 +-0.0887511 0.102351 0.0133854 0.81128 0.5 +-0.00927598 0.177254 -0.0287785 0.252787 0.344692 +-0.0798195 0.105901 -0.00558882 0.545881 0.5 +-0.0101655 0.178729 -0.0267529 0.420949 0.449119 +0.0414097 0.104256 0.00616512 0.653604 0.5 +-0.0622546 0.152185 -0.0195775 0.705662 0.5 +-0.0861558 0.100815 0.00240792 0.673104 0.5 +-0.0358424 0.095771 -0.0231986 0.604327 0.5 +-0.0631329 0.17411 -0.0535854 0.499099 0.5 +-0.0923754 0.118793 0.0312942 0.551426 0.5 +-0.0788893 0.125151 -0.00625598 0.45417 0.403149 +-0.0677451 0.0629578 0.0224748 0.514095 0.5 +-0.0689415 0.128234 -0.0091158 0.778554 0.5 +-0.0679015 0.120916 -0.00896008 0.787633 0.5 +-0.0338357 0.095789 -0.0234311 0.869552 0.5 +0.0458991 0.0414061 0.011234 0.208963 0.5 +0.0454513 0.0412382 0.0102351 0.248672 0.5 +0.0456517 0.0413562 0.00923967 0.270198 0.5 +0.0453867 0.0413474 0.00824507 0.303294 0.5 +0.0449984 0.0413097 0.00725015 0.317848 0.5 +0.044508 0.0412168 0.00624902 0.350625 0.5 +0.0440036 0.0411539 0.00525252 0.357471 0.452104 +0.0436072 0.041137 0.00426675 0.503875 0.5 +0.0430768 0.0411155 0.00329204 0.524353 0.5 +0.0420833 0.0409609 0.00227771 0.55786 0.5 +0.0410408 0.0408917 0.00130956 0.565383 0.5 +0.0402098 0.04091 0.000378677 0.524665 0.5 +0.0390858 0.0407779 -0.000614316 0.514406 0.5 +0.0369643 0.0405549 -0.00158789 0.409401 0.412106 +-0.0479764 0.135553 0.00940627 0.482359 0.5 +0.0233356 0.0389315 -0.00470356 0.249794 0.5 +0.0220423 0.0388246 -0.00567731 0.194438 0.5 +0.0215585 0.0387445 -0.00669407 0.311593 0.5 +0.0210632 0.038679 -0.00769573 0.335273 0.5 +0.0209039 0.0386887 -0.00868617 0.341645 0.5 +0.0204663 0.0385832 -0.00969847 0.392165 0.5 +0.0202287 0.0385462 -0.010699 0.463116 0.5 +0.0200483 0.0385661 -0.0116898 0.481127 0.5 +0.0198232 0.0385183 -0.0126921 0.473825 0.5 +0.0196875 0.0385058 -0.013693 0.495144 0.5 +0.019441 0.0384709 -0.0146972 0.509623 0.5 +0.0190777 0.0384168 -0.0157069 0.53206 0.5 +0.0187727 0.038419 -0.0166964 0.552974 0.5 +0.0183006 0.0383341 -0.0177245 0.414351 0.5 +0.0176298 0.0382941 -0.0187111 0.443192 0.5 +0.016644 0.0381609 -0.019755 0.436093 0.5 +0.0154864 0.0380581 -0.0207587 0.364096 0.459325 +0.0140504 0.0379362 -0.0217239 0.433497 0.5 +-0.0105538 0.0962042 -0.0319333 0.601496 0.5 +-0.0908359 0.114163 0.0368153 0.488806 0.5 +-0.0505374 0.138563 0.00240881 0.482734 0.5 +-0.0623035 0.158393 -0.0375989 0.437411 0.450686 +-0.0288792 0.104408 -0.0227314 0.617481 0.5 +-0.0938956 0.118755 0.0202995 0.699312 0.5 +0.0222077 0.0403059 0.0403109 0.30736 0.461486 +0.0231358 0.0404562 0.0392455 0.296507 0.5 +0.0238248 0.0404881 0.03829 0.289331 0.455829 +0.0244407 0.0405616 0.0372831 0.447652 0.5 +0.0247254 0.0405634 0.0363023 0.448933 0.5 +0.0249948 0.0405751 0.0353079 0.308149 0.459766 +0.0254946 0.0406248 0.0343049 0.243146 0.391919 +0.0259201 0.0406241 0.0333279 0.25685 0.408642 +-0.0888783 0.111909 0.0103621 0.564833 0.5 +-0.0884724 0.111842 0.0093465 0.388501 0.5 +-0.0945826 0.122834 0.0222802 0.660642 0.5 +-0.0726588 0.143932 -0.0130219 0.169484 0.5 +-0.0487919 0.135536 0.0203921 0.60215 0.488353 +-0.0631344 0.177233 -0.0567528 0.566591 0.5 +-0.0621666 0.152205 -0.0155784 0.608788 0.5 +0.0380593 0.0869714 -0.0147288 0.731421 0.5 +-0.00979568 0.178776 -0.0277733 0.354405 0.447778 +-0.0615069 0.172523 -0.0575905 0.414141 0.375674 +-0.062151 0.152195 -0.0205783 0.72258 0.5 +-0.062395 0.163038 -0.0545883 0.583089 0.5 +-0.00887643 0.105922 -0.0227472 0.721559 0.5 +-0.0639011 0.119458 -0.00893676 0.67846 0.5 +-0.0829976 0.133839 -0.00205551 0.58311 0.5 +-0.0408343 0.0942887 -0.0229156 0.596979 0.5 +0.0483264 0.0430255 0.0152188 0.265572 0.5 +0.0484584 0.0430177 0.0142199 0.251006 0.5 +0.0485976 0.0429932 0.0132228 0.23799 0.5 +0.0487043 0.0430197 0.0122221 0.219429 0.5 +0.0488884 0.0431235 0.0112233 0.199267 0.5 +0.0487537 0.043125 0.0102298 0.217359 0.5 +0.048521 0.043083 0.00923259 0.259008 0.5 +0.0484774 0.0431365 0.00824398 0.412258 0.5 +0.0481112 0.0431114 0.00725444 0.494855 0.5 +0.0475429 0.0429463 0.00623912 0.367663 0.45234 +0.0472196 0.0430325 0.00527833 0.566688 0.5 +0.0464852 0.0429053 0.00427528 0.557401 0.5 +0.0458597 0.0428246 0.0032848 0.576963 0.5 +0.0450739 0.0427888 0.00232236 0.420042 0.5 +0.0433938 0.0426486 0.00136855 0.394694 0.5 +0.0417308 0.0422749 0.000248643 0.425161 0.5 +0.0410305 0.0422896 -0.000687891 0.456167 0.5 +0.0400064 0.0422019 -0.00166327 0.447878 0.5 +0.0289287 0.100617 -0.0165368 0.728425 0.5 +-0.0876244 0.129442 0.00130199 0.486801 0.5 +0.0245092 0.0406191 -0.00557292 0.464947 0.5 +0.0231366 0.0404268 -0.00664294 0.317852 0.5 +0.0223219 0.0402539 -0.00770693 0.337615 0.448653 +0.021964 0.0402022 -0.00870612 0.55798 0.5 +0.0215717 0.0401714 -0.00970048 0.559374 0.5 +0.0212145 0.0401172 -0.0107008 0.627185 0.5 +0.020848 0.0400652 -0.0117024 0.661682 0.5 +0.0206869 0.0400703 -0.0126929 0.654663 0.5 +0.0204668 0.0400207 -0.013702 0.665342 0.5 +0.0203254 0.040014 -0.0146997 0.677992 0.5 +0.0200755 0.0399795 -0.0157069 0.695157 0.5 +0.0197994 0.0399634 -0.0167042 0.713392 0.5 +0.0194281 0.0399108 -0.0177171 0.666141 0.5 +0.0187974 0.0398349 -0.0187285 0.501042 0.5 +0.0181073 0.0398088 -0.0196993 0.522948 0.5 +0.0170867 0.039703 -0.0206999 0.568503 0.5 +0.0160515 0.039741 -0.0214719 0.53757 0.5 +0.0084074 0.123136 -0.0106652 0.679234 0.5 +-0.0891628 0.0942977 0.0214104 0.529283 0.5 +-0.0106525 0.165176 -0.016643 0.251283 0.418644 +-0.0919111 0.120015 0.00829626 0.404189 0.5 +-0.0908772 0.119982 0.00630567 0.421552 0.5 +-0.047972 0.135544 0.0173874 0.717441 0.5 +-0.0630191 0.169374 -0.0476038 0.645866 0.5 +-0.0623807 0.147545 -0.00857398 0.416569 0.5 +-0.0530423 0.14778 0.0224018 0.578902 0.377689 +-0.051966 0.138521 0.000416067 0.620782 0.5 +-0.0622266 0.158391 -0.0366041 0.44143 0.459729 +-0.0586861 0.0603162 0.0231261 0.36851 0.392915 +-0.00922314 0.174168 -0.0285672 0.308726 0.5 +-0.0635063 0.156747 -0.0406118 0.828271 0.5 +-0.0619528 0.15527 -0.030594 0.543122 0.480751 +0.0246952 0.0420222 0.0382704 0.500768 0.5 +0.0252284 0.0420597 0.0372934 0.48086 0.5 +0.0256473 0.0420743 0.0363142 0.450838 0.5 +0.0260496 0.0420955 0.0353242 0.321673 0.445084 +0.0266603 0.0421651 0.0343135 0.345398 0.5 +-0.0491177 0.138604 0.00740359 0.344692 0.5 +-0.0613242 0.174126 -0.0596453 0.259873 0.443289 +-0.0620463 0.158428 -0.0205873 0.46297 0.421161 +-0.0616259 0.175734 -0.0596865 0.26226 0.5 +-0.0683202 0.166619 -0.0540065 0.513058 0.429382 +-0.0628199 0.164682 -0.0345962 0.559625 0.5 +-0.0736181 0.0688668 0.0266732 0.683954 0.5 +-0.0626761 0.177191 -0.057627 0.408881 0.5 +-0.0621531 0.152198 -0.0185797 0.669579 0.5 +-0.0490828 0.13552 0.0213898 0.776672 0.5 +-0.00957846 0.178815 -0.0287373 0.266316 0.404862 +0.0402454 0.0843611 -0.0117637 0.612965 0.5 +-0.0512049 0.147808 0.0143958 0.538089 0.5 +-0.0792715 0.107765 0.0320009 0.420249 0.5 +-0.0668226 0.0923514 -0.017257 0.575633 0.5 +0.0502518 0.0446339 0.0182039 0.23724 0.5 +0.0503986 0.0446075 0.0172106 0.286197 0.5 +0.0505278 0.0445977 0.0162148 0.322074 0.5 +0.0507656 0.0446256 0.0152142 0.301558 0.5 +0.0507854 0.0445928 0.0142166 0.269258 0.5 +0.0509994 0.044648 0.0132154 0.246619 0.5 +0.0509663 0.0446851 0.0122122 0.22662 0.5 +0.0508473 0.0446622 0.0112162 0.330319 0.5 +0.0508224 0.0446928 0.0102182 0.369918 0.5 +0.0506847 0.044695 0.00922239 0.436893 0.5 +0.0504194 0.0446982 0.00822878 0.52017 0.5 +0.0501729 0.0446765 0.00723117 0.585203 0.5 +0.0500217 0.0446984 0.00624267 0.579775 0.5 +0.049468 0.0445737 0.00523787 0.57721 0.5 +0.0492065 0.0445737 0.00425603 0.654526 0.5 +0.0483875 0.0444574 0.00325794 0.646985 0.5 +0.0476241 0.0444058 0.00228058 0.606825 0.5 +0.0469197 0.0444607 0.00136465 0.554636 0.5 +0.0454962 0.0443878 0.000424365 0.417407 0.404493 +0.0322546 0.0987343 -0.0145759 0.761441 0.5 +-0.0345641 0.11594 -0.0146748 0.811815 0.5 +0.0297667 0.100164 -0.016062 0.756316 0.5 +0.0376515 0.0947835 -0.010301 0.623757 0.5 +0.0253381 0.0418727 -0.00588506 0.533119 0.5 +0.0241599 0.0418198 -0.00678118 0.425216 0.5 +0.0234089 0.0418644 -0.00766906 0.449472 0.5 +0.0226563 0.0416586 -0.00875234 0.620622 0.5 +0.0222403 0.0416489 -0.00972259 0.728132 0.5 +0.0218834 0.0415901 -0.0107198 0.690477 0.5 +0.0216799 0.0415358 -0.0117265 0.64815 0.5 +0.021665 0.0416371 -0.0126942 0.643476 0.5 +0.0214529 0.0415824 -0.013701 0.632809 0.5 +0.0213104 0.0415776 -0.0147 0.642753 0.5 +0.0210681 0.0415437 -0.0156999 0.641668 0.5 +0.0208178 0.0415166 -0.0167046 0.7363 0.5 +0.0205519 0.0414936 -0.0177079 0.7492 0.5 +0.0201473 0.0414664 -0.0187017 0.535645 0.469391 +0.0195943 0.041435 -0.0196763 0.553747 0.5 +0.0185142 0.0412688 -0.0207398 0.584691 0.5 +0.0173166 0.0411975 -0.0216758 0.497655 0.5 +0.0401375 0.0953636 -0.00688813 0.621261 0.5 +-0.0148841 0.0959887 -0.031739 0.520871 0.5 +-0.0810076 0.10869 -0.00259876 0.474335 0.5 +-0.0626256 0.150596 -0.021578 0.481703 0.482354 +-0.092388 0.120024 0.00928585 0.385863 0.5 +-0.0914335 0.120003 0.00730918 0.411018 0.467634 +-0.0625559 0.150623 -0.0205762 0.68908 0.5 +-0.0090473 0.168146 -0.0217175 0.219838 0.3992 +-0.0630651 0.167844 -0.0445874 0.720803 0.5 +-0.0702901 0.063891 0.0211244 0.450008 0.5 +-0.0631168 0.15992 -0.0455978 0.558017 0.5 +-0.0631574 0.159924 -0.0465929 0.809045 0.5 +-0.0623577 0.147557 -0.00658086 0.252169 0.412612 +-0.0633873 0.169402 -0.0465883 0.663914 0.422635 +-0.0632263 0.153648 -0.0346156 0.395005 0.462112 +-0.0135829 0.03702 0.0510108 0.341497 0.5 +-0.0724375 0.0643068 0.0185598 0.596547 0.5 +-0.054457 0.14621 0.0274041 0.709134 0.5 +-0.053792 0.141582 0.0273817 0.537872 0.5 +-0.0874242 0.111776 0.00733879 0.392054 0.5 +-0.0709606 0.172226 -0.0520527 0.466691 0.456957 +-0.0908268 0.137853 0.0181986 0.5388 0.460593 +-0.0409396 0.168342 -0.0108401 0.48116 0.5 +-0.0801811 0.108648 -0.00360377 0.503267 0.5 +-0.0866142 0.111799 0.023338 0.726085 0.5 +-0.0839818 0.115583 0.0478751 0.636861 0.5 +-0.0620328 0.156862 -0.0185851 0.37894 0.442184 +-0.00888297 0.175714 -0.027834 0.245715 0.5 +-0.0614858 0.175719 -0.0606762 0.258736 0.336518 +-0.0881465 0.111869 0.0203319 0.713042 0.352013 +-0.0626214 0.149057 -0.0155813 0.465926 0.5 +-0.0720239 0.158203 -0.0389152 0.511983 0.468875 +-0.0624566 0.177245 -0.0586155 0.389693 0.5 +-0.0483087 0.135537 0.00740851 0.43217 0.477318 +-0.0627796 0.16313 -0.0285907 0.691873 0.5 +-0.0339969 0.152567 -0.000573454 0.241971 0.406486 +-0.0618223 0.170491 -0.0617288 0.389285 0.5 +-0.0627671 0.15529 -0.013592 0.440853 0.5 +0.0422094 0.0873179 -0.00779978 0.586888 0.5 +0.0518591 0.0461434 0.019211 0.289854 0.5 +0.0522184 0.0461787 0.0182078 0.262687 0.5 +0.0525507 0.0462401 0.0172033 0.243948 0.334591 +0.0525746 0.0462075 0.0162071 0.28081 0.5 +0.0527001 0.0462105 0.0152086 0.261101 0.5 +0.0529037 0.0462692 0.0142047 0.259734 0.5 +0.0530102 0.0462982 0.0132036 0.289152 0.5 +0.0529009 0.0462649 0.0122044 0.315925 0.5 +0.0527843 0.0462443 0.0112063 0.325222 0.5 +0.0526315 0.0462656 0.0102089 0.523205 0.5 +0.0522688 0.0462249 0.00921199 0.557691 0.5 +0.0519248 0.0461654 0.00821164 0.606715 0.5 +0.0517879 0.0461689 0.0072143 0.660279 0.5 +0.0515378 0.0461489 0.00621743 0.680138 0.5 +0.0514697 0.0462224 0.00523719 0.676367 0.5 +0.0510178 0.0461394 0.00424124 0.687946 0.5 +0.0505086 0.0461176 0.0032623 0.750917 0.5 +0.0499018 0.0460625 0.00228276 0.687572 0.5 +0.0491492 0.0460297 0.00132033 0.648303 0.5 +0.0482587 0.0460086 0.000382582 0.445148 0.5 +0.0470243 0.0458757 -0.000608958 0.412576 0.5 +0.0305902 0.0996469 -0.0155371 0.754953 0.5 +0.0314256 0.0991914 -0.015062 0.747597 0.5 +0.0254079 0.10205 -0.0180571 0.65538 0.5 +-0.000173892 0.120963 -0.0122496 0.773976 0.5 +-0.0629554 0.156782 -0.0386059 0.446604 0.483537 +0.0262206 0.0435744 -0.00668237 0.589969 0.5 +0.0255358 0.0435625 -0.00763706 0.582263 0.5 +0.0246717 0.0434401 -0.00867806 0.606405 0.5 +0.0239407 0.0433254 -0.00969837 0.651864 0.5 +0.0231261 0.0431609 -0.0107258 0.656841 0.5 +0.0226739 0.0430625 -0.011732 0.600539 0.5 +0.0224202 0.0430392 -0.0127301 0.546003 0.5 +0.022253 0.0430673 -0.0137151 0.548118 0.5 +0.0220365 0.0430228 -0.0147268 0.5675 0.5 +0.0218787 0.0430332 -0.0157248 0.568311 0.5 +0.0216235 0.0430155 -0.0167288 0.65615 0.5 +0.0213756 0.0429924 -0.0177346 0.476548 0.5 +0.0210931 0.0429808 -0.0187308 0.487802 0.5 +0.0206459 0.0429683 -0.0197059 0.784083 0.5 +0.0200866 0.0429332 -0.0206714 0.563114 0.5 +0.0190867 0.0428243 -0.0216805 0.451424 0.5 +0.0169695 0.107204 -0.0175448 0.542075 0.5 +-0.0345377 0.0353482 -0.0311793 0.16856 0.5 +-0.0682478 0.066271 0.0282875 0.590849 0.43032 +0.0418115 0.0872841 -0.00879032 0.595696 0.5 +-0.0748894 0.152721 -0.0218881 0.5851 0.5 +-0.0832173 0.13898 0.000315163 0.580039 0.5 +-0.0926193 0.122848 0.0312739 0.601059 0.472079 +-0.00912597 0.168128 -0.0227626 0.297541 0.5 +-0.0628784 0.16149 -0.0515871 0.68874 0.5 +-0.0619039 0.16157 -0.0305885 0.452539 0.5 +-0.0132739 0.162396 -0.014817 0.266099 0.5 +-0.0632815 0.159908 -0.0475928 0.793952 0.5 +-0.0628145 0.169399 -0.0485883 0.603998 0.444163 +-0.00951883 0.17115 -0.0217635 0.462208 0.5 +-0.0101059 0.171125 -0.0207965 0.506211 0.5 +0.0418505 0.0929433 -0.00581175 0.492217 0.5 +-0.0616576 0.170967 -0.0555865 0.372297 0.443928 +-0.0520495 0.147795 0.0183962 0.723962 0.5 +-0.0853298 0.111023 0.0405559 0.503335 0.458998 +-0.0745076 0.115686 0.0517763 0.582027 0.5 +-0.0547119 0.146209 0.0284156 0.560204 0.5 +0.0412738 0.0872408 -0.00977382 0.625307 0.5 +-0.0486667 0.134012 0.00340208 0.34881 0.434303 +-0.0482843 0.133992 0.00441773 0.347182 0.453168 +0.042476 0.0986857 0.0211679 0.657692 0.5 +-0.0485461 0.135607 0.0194861 0.602971 0.488446 +-0.051883 0.143128 0.0183637 0.828127 0.5 +-0.0884532 0.112251 0.0353052 0.459984 0.5 +-0.0616227 0.156855 -0.0295846 0.674979 0.5 +-0.0481741 0.135565 0.0182752 0.765802 0.5 +-0.00920453 0.175559 -0.0287981 0.275493 0.5 +0.0406445 0.0871881 -0.0107716 0.635944 0.448855 +-0.0850528 0.0993835 -0.000573805 0.459223 0.5 +-0.0656034 0.0619186 0.0220381 0.346007 0.429447 +-0.0187325 0.0374026 0.0529482 0.277021 0.404831 +-0.00980958 0.166665 -0.0207735 0.379084 0.5 +0.0429603 0.0873797 -0.00580114 0.419655 0.466147 +-0.0629079 0.15056 -0.0255866 0.617845 0.5 +-0.063101 0.150495 -0.0266018 0.647164 0.5 +0.0437475 0.087439 -0.00380588 0.498482 0.5 +0.0526083 0.0475984 0.0212218 0.296458 0.5 +0.0532979 0.0476993 0.0202039 0.274937 0.5 +0.0537831 0.0477401 0.0192041 0.320896 0.5 +0.0541381 0.0477755 0.0182012 0.303757 0.5 +0.0541559 0.0477549 0.017206 0.295573 0.5 +0.0543739 0.0477987 0.0161989 0.331798 0.422862 +0.0545899 0.0478435 0.0151974 0.287675 0.5 +0.0546992 0.0478618 0.0141962 0.310162 0.5 +0.0546976 0.0478581 0.0131951 0.323926 0.5 +0.0546048 0.0478149 0.0122009 0.32351 0.422887 +0.0545544 0.0478595 0.011201 0.625634 0.5 +0.0544139 0.0478718 0.0102055 0.673927 0.5 +0.0542552 0.0478973 0.00920996 0.695482 0.5 +0.0539053 0.0478505 0.00821457 0.706825 0.5 +0.0535575 0.0477942 0.0072134 0.698329 0.5 +0.0531328 0.0476715 0.00620176 0.706203 0.5 +0.0528827 0.0476533 0.00520477 0.747065 0.5 +0.0526059 0.0476644 0.00422036 0.765583 0.5 +0.0522007 0.0476683 0.00324556 0.774998 0.5 +0.0515873 0.047616 0.00226708 0.774982 0.5 +0.0506418 0.0475027 0.0012667 0.522794 0.5 +0.0498828 0.0474685 0.000307011 0.498109 0.5 +0.0488619 0.047436 -0.000620948 0.468335 0.5 +0.0476809 0.0472678 -0.00164326 0.473614 0.5 +0.0464132 0.0472054 -0.00271728 0.498599 0.5 +0.038459 0.094268 -0.00974763 0.611822 0.5 +0.0221547 0.0979182 -0.0216266 0.588387 0.5 +0.0445162 0.087501 -0.00181141 0.5855 0.5 +-0.00222052 0.117102 -0.0161156 0.771346 0.5 +0.0272261 0.0451183 -0.00768323 0.907184 0.5 +0.0267163 0.0450608 -0.00869474 0.557039 0.5 +0.0264125 0.0450979 -0.0096842 0.598401 0.5 +0.0260285 0.0450625 -0.0106845 0.635188 0.5 +0.0256365 0.0450396 -0.0116814 0.56665 0.5 +0.0250139 0.0449606 -0.012685 0.515417 0.5 +0.0242611 0.0448626 -0.0136813 0.472073 0.5 +0.0228667 0.0444458 -0.0147763 0.505631 0.5 +0.0225489 0.0444802 -0.0157666 0.484152 0.451586 +0.0221671 0.0444704 -0.016762 0.578055 0.5 +0.0217692 0.0444645 -0.0177596 0.604952 0.5 +0.0214237 0.0444841 -0.0187153 0.597178 0.5 +0.021025 0.0444507 -0.0197096 0.396657 0.5 +0.0204505 0.044377 -0.0207645 0.441335 0.5 +0.0197334 0.044328 -0.0216983 0.490234 0.5 +0.0184196 0.0442138 -0.0226321 0.524318 0.5 +0.0301337 0.0958138 -0.0174156 0.699679 0.5 +0.050676 0.0693821 0.00244948 0.629664 0.372945 +-0.0628659 0.161473 -0.0525859 0.683519 0.5 +0.0555907 0.0604655 -0.000426808 0.592036 0.5 +-0.022965 0.108799 -0.0212234 0.600371 0.5 +-0.0896074 0.135171 0.0322127 0.583304 0.473825 +-0.0926054 0.122844 0.0302746 0.626105 0.5 +-0.0926446 0.122835 0.02928 0.664624 0.5 +-0.00962948 0.168316 -0.023669 0.31516 0.5 +-0.0625045 0.160053 -0.0215634 0.573281 0.5 +-0.0619246 0.161563 -0.0295917 0.45951 0.5 +-0.0135011 0.162185 -0.0138332 0.217413 0.5 +-0.013526 0.162053 -0.0127433 0.271473 0.5 +-0.0625469 0.169393 -0.0495927 0.57748 0.5 +-0.00886294 0.171168 -0.0237423 0.312147 0.463827 +-0.0091676 0.171172 -0.0227371 0.382741 0.454798 +-0.0613803 0.17096 -0.0575947 0.360963 0.416097 +-0.0615083 0.170965 -0.0565878 0.368037 0.5 +-0.0580149 0.0675718 0.0363481 0.503626 0.472266 +-0.0523396 0.147791 0.0193952 0.719536 0.5 +-0.0639979 0.158311 -0.048587 0.708429 0.5 +-0.0633822 0.164679 -0.0305938 0.692548 0.5 +-0.0537237 0.147766 0.0244131 0.567355 0.398363 +-0.0533301 0.1416 0.0264013 0.559887 0.5 +-0.0489909 0.133982 0.00241474 0.355836 0.438333 +-0.0468429 0.132502 0.00641278 0.543552 0.478081 +-0.0493716 0.143224 0.00839291 0.573428 0.5 +-0.0690863 0.0666121 0.0278101 0.57361 0.284512 +-0.062693 0.156802 -0.0376031 0.579352 0.5 +-0.0297799 0.106834 -0.0211406 0.810434 0.5 +-0.0835905 0.112379 0.0452164 0.387124 0.446792 +-0.0644851 0.0755505 0.0404189 0.611933 0.440096 +-0.053883 0.150856 0.0253998 0.443664 0.5 +-0.0631402 0.158352 -0.0425984 0.820472 0.5 +-0.0361903 0.151017 -0.000604378 0.204281 0.5 +-0.0624362 0.150651 -0.0105777 0.35914 0.5 +-0.0624126 0.150651 -0.0115734 0.424711 0.5 +-0.0622911 0.150653 -0.0125749 0.424088 0.46748 +-0.0615844 0.155311 -0.0225818 0.452352 0.5 +-0.0332242 0.152554 -0.00262082 0.231668 0.5 +-0.062838 0.153641 -0.0115615 0.329153 0.43889 +0.0542673 0.0491964 0.0212031 0.342019 0.5 +0.0548799 0.0492406 0.0202107 0.314601 0.5 +0.0553645 0.0492819 0.0192078 0.334344 0.5 +0.0556876 0.0493473 0.0181935 0.337173 0.459152 +0.0558148 0.0493476 0.0171957 0.327753 0.457458 +0.0558223 0.0493444 0.0161931 0.331407 0.423432 +0.056025 0.0493916 0.0151904 0.351624 0.5 +0.0561422 0.049398 0.0141897 0.367168 0.464358 +0.0561478 0.0493933 0.0131905 0.371874 0.5 +0.0561271 0.0494063 0.0121912 0.486315 0.458271 +0.0561175 0.0494119 0.0111925 0.511629 0.5 +0.0559734 0.0494153 0.0101945 0.545197 0.462817 +0.0558337 0.0494217 0.00919997 0.532408 0.5 +0.0556221 0.0493651 0.00819776 0.746443 0.5 +0.0553932 0.0493283 0.0071983 0.756606 0.5 +0.0552084 0.0493743 0.00621284 0.763437 0.5 +0.0547499 0.0492946 0.00521444 0.768402 0.5 +0.0543559 0.049285 0.0042337 0.79186 0.5 +0.0537671 0.0492093 0.00323447 0.80362 0.5 +0.0531496 0.0491587 0.00225551 0.816731 0.5 +0.0524062 0.0491022 0.00128138 0.583342 0.452953 +0.0514482 0.0490026 0.000289284 0.539824 0.5 +0.0504722 0.048918 -0.000684915 0.534755 0.5 +0.0495034 0.0488243 -0.00166079 0.521839 0.5 +0.0484396 0.0486951 -0.00266239 0.554484 0.5 +0.0470726 0.048551 -0.0036464 0.434179 0.5 +0.0408807 0.0948081 -0.00628698 0.610365 0.5 +-0.0828517 0.110648 0.028886 0.474107 0.5 +0.0311264 0.0469699 -0.00653546 0.557462 0.465257 +0.0289827 0.0467369 -0.00766304 0.530179 0.5 +0.0283692 0.0466516 -0.00870467 0.568944 0.5 +0.0280707 0.046664 -0.00969251 0.620752 0.5 +0.0277468 0.0465681 -0.0107176 0.682006 0.5 +0.0275877 0.0465825 -0.0117097 0.688884 0.5 +0.0272051 0.0465425 -0.0127095 0.610527 0.5 +0.0268226 0.046511 -0.0137061 0.542566 0.5 +0.0265924 0.0466157 -0.0146569 0.48702 0.5 +0.0260064 0.0465031 -0.0156607 0.488271 0.5 +0.0252085 0.0464911 -0.0166174 0.507676 0.5 +0.0226111 0.0458717 -0.017849 0.394431 0.5 +0.0217639 0.0458254 -0.0188683 0.586036 0.400824 +0.0211703 0.0458979 -0.0197309 0.493777 0.5 +0.0203688 0.0459169 -0.020834 0.440701 0.5 +0.0196258 0.0457587 -0.0217227 0.486443 0.5 +0.018445 0.0456517 -0.0226728 0.549146 0.5 +0.00442197 0.11861 -0.0157775 0.570337 0.473222 +-0.01565 0.10151 -0.0235687 0.771507 0.5 +0.0212923 0.0982999 -0.0220426 0.593293 0.5 +-0.000266462 0.0936214 -0.0332218 0.522775 0.483113 +-0.0241067 0.108647 -0.0210644 0.593628 0.477124 +-0.0915859 0.128175 0.00825933 0.419559 0.425301 +-0.0926373 0.122856 0.0322729 0.58159 0.5 +-0.0778403 0.10982 0.0432074 0.541422 0.5 +-0.0620402 0.161574 -0.0285866 0.583796 0.5 +-0.0136711 0.162609 -0.0156561 0.269977 0.5 +-0.0625942 0.153749 -0.0125838 0.386886 0.440899 +-0.0623698 0.169401 -0.0505859 0.538383 0.466596 +-0.0625301 0.147537 -0.0105732 0.42053 0.463323 +-0.00864981 0.171144 -0.0247734 0.229766 0.466167 +0.0453844 0.091806 0.0121583 0.572383 0.436861 +-0.0894331 0.150114 0.0121902 0.32027 0.5 +-0.0700516 0.177913 -0.0570165 0.362118 0.5 +-0.0525858 0.147787 0.0204037 0.733184 0.5 +-0.0636646 0.15831 -0.045603 0.807179 0.5 +-0.0622523 0.152181 -0.0215758 0.742898 0.5 +-0.0620187 0.175667 -0.057604 0.451826 0.5 +-0.0523892 0.141597 0.0213852 0.800757 0.5 +-0.0869096 0.111745 0.0223587 0.686931 0.5 +-0.0849795 0.0952966 -0.00257745 0.396049 0.446557 +-0.0495225 0.143222 0.00950726 0.649579 0.434146 +-0.0656099 0.0655077 0.0295065 0.532749 0.5 +-0.0647534 0.156678 -0.0475943 0.713526 0.5 +-0.0785045 0.111148 0.0455755 0.391209 0.5 +-0.094215 0.120106 0.0172864 0.614889 0.443372 +-0.0621937 0.156854 -0.0175927 0.377145 0.5 +-0.0541984 0.150844 0.02639 0.461425 0.5 +-0.0517714 0.14934 0.0163945 0.774806 0.5 +-0.0522155 0.149331 0.0183918 0.729713 0.5 +-0.0542038 0.149302 0.0263885 0.509992 0.5 +-0.0284871 0.0932302 -0.0255941 0.304702 0.5 +-0.0631749 0.149 -0.0205832 0.622394 0.5 +-0.0517809 0.138537 0.023394 0.615998 0.5 +-0.0512844 0.138511 0.0223666 0.623281 0.5 +-0.0612049 0.174131 -0.0607222 0.298951 0.5 +0.055706 0.0507437 0.0211984 0.33558 0.5 +0.0562825 0.0508178 0.0201866 0.326843 0.463162 +0.0565626 0.0508082 0.0192018 0.318199 0.462356 +0.0567976 0.0508328 0.0181941 0.378129 0.466394 +0.0569923 0.0508892 0.0171854 0.506337 0.5 +0.0570161 0.0508675 0.0161892 0.530301 0.5 +0.0571307 0.0508797 0.0151878 0.535962 0.5 +0.0572481 0.0508905 0.0141872 0.534928 0.5 +0.0572432 0.0508915 0.0131865 0.548889 0.5 +0.0572429 0.0508905 0.0121849 0.57269 0.5 +0.0572117 0.0509068 0.011186 0.571974 0.5 +0.0570851 0.0508934 0.0101876 0.574471 0.460746 +0.0569539 0.0508846 0.00918952 0.576196 0.5 +0.0567195 0.0508531 0.00818949 0.573268 0.5 +0.0565843 0.0508466 0.00719292 0.583621 0.466717 +0.0563061 0.0508424 0.00620646 0.584509 0.5 +0.0559507 0.0508031 0.00520531 0.824166 0.5 +0.055466 0.0507517 0.00421414 0.836827 0.5 +0.0549036 0.0506667 0.00319831 0.471108 0.5 +0.0542609 0.050631 0.00222604 0.483198 0.5 +0.0535386 0.0505579 0.00123438 0.613201 0.45539 +0.0527925 0.0505032 0.000257908 0.490529 0.5 +0.0516179 0.0503639 -0.000756444 0.58688 0.5 +0.05074 0.0503045 -0.00171178 0.608182 0.5 +0.0496613 0.0501912 -0.00270335 0.497532 0.5 +0.0482309 0.0500295 -0.00369862 0.505342 0.5 +-0.0297834 0.121969 -0.0069874 0.463916 0.5 +0.0115331 0.101889 -0.0218781 0.835549 0.5 +0.0293799 0.0892796 -0.0205263 0.754187 0.5 +0.0303629 0.0483136 -0.00765132 0.591066 0.5 +0.0296733 0.0481683 -0.00874324 0.581117 0.5 +0.0293044 0.0481199 -0.00974071 0.639697 0.5 +0.0290556 0.0480892 -0.0107335 0.702465 0.5 +0.0287818 0.0480764 -0.0117305 0.785891 0.5 +0.0285217 0.0480557 -0.0127278 0.716614 0.5 +0.0282711 0.0480264 -0.0137299 0.636449 0.5 +0.0279061 0.0479696 -0.0147397 0.574224 0.5 +0.0276827 0.0480336 -0.0156964 0.574531 0.5 +0.0271939 0.0479684 -0.0167032 0.597107 0.5 +0.0262642 0.0479348 -0.017662 0.421586 0.5 +0.0252198 0.0478964 -0.0186081 0.415428 0.421447 +0.0233928 0.0475951 -0.0196868 0.435132 0.5 +0.0346496 0.0972102 -0.0129196 0.742864 0.5 +0.0517359 0.0693876 0.00244776 0.645437 0.5 +-0.0106759 0.119083 -0.0141801 0.827086 0.5 +-0.0118269 0.118985 -0.0140536 0.559736 0.5 +-0.00628506 0.0952929 -0.0329709 0.790199 0.5 +0.0401137 0.0933035 -0.00871241 0.566774 0.5 +-0.0753578 0.0671035 0.0137678 0.564954 0.5 +-0.0626481 0.167836 -0.0465871 0.618191 0.5 +-0.0627949 0.167828 -0.0455908 0.530269 0.476282 +-0.042812 0.14778 0.00347562 0.187808 0.5 +0.0416778 0.102863 0.015161 0.706991 0.5 +-0.0622212 0.169401 -0.0515858 0.380575 0.5 +-0.0268485 0.0931277 -0.028596 0.248883 0.5 +0.0453179 0.0861686 0.00320477 0.483239 0.5 +-0.0681775 0.0762505 0.039044 0.601995 0.5 +-0.062107 0.163118 -0.0365927 0.50336 0.5 +-0.0334767 0.152548 -0.00159465 0.213771 0.5 +-0.0638193 0.158306 -0.0465978 0.804379 0.5 +-0.0686144 0.0632303 0.0220506 0.393713 0.5 +-0.0711187 0.0642492 0.0206358 0.468547 0.5 +-0.0483068 0.13712 0.0113971 0.700824 0.5 +-0.0520122 0.14159 0.0203687 0.645062 0.464329 +-0.0478122 0.134031 0.00640478 0.491526 0.5 +-0.0614986 0.158424 -0.0305881 0.634778 0.5 +-0.0496377 0.143234 0.0104059 0.48917 0.476574 +-0.0885037 0.114225 0.0283481 0.473553 0.461475 +-0.0646289 0.156694 -0.0465976 0.712195 0.5 +-0.0424386 0.147805 0.00141712 0.25826 0.5 +-0.0604782 0.144516 -0.00363507 0.466074 0.5 +-0.0616053 0.156855 -0.0285887 0.469065 0.5 +-0.0536146 0.150855 0.0243962 0.621278 0.5 +-0.0520364 0.14934 0.0173988 0.768017 0.5 +-0.0484861 0.137101 0.00939484 0.479296 0.395056 +-0.0486795 0.137079 0.00840446 0.395908 0.5 +-0.0465876 0.132486 0.00741919 0.539467 0.5 +-0.0521631 0.138551 0.0244099 0.615441 0.5 +-0.0499851 0.135487 0.00142097 0.527467 0.5 +-0.0495672 0.135498 0.00241956 0.409185 0.4716 +-0.0661815 0.0615106 0.0205126 0.578639 0.5 +0.0567694 0.0522665 0.0211855 0.547845 0.5 +0.0572369 0.0523165 0.0201815 0.419344 0.473768 +0.0575871 0.0523587 0.0191771 0.536016 0.5 +0.057752 0.0523416 0.0181873 0.565345 0.5 +0.0578529 0.0523616 0.0171842 0.591115 0.5 +0.057949 0.0523838 0.0161799 0.603918 0.5 +0.0580719 0.0523893 0.015182 0.621989 0.5 +0.0580945 0.0523756 0.014183 0.636128 0.5 +0.0581139 0.0523629 0.0131822 0.631509 0.5 +0.0581028 0.0523658 0.0121806 0.610183 0.5 +0.0580527 0.0523859 0.0111812 0.620004 0.5 +0.0579126 0.0523842 0.0101848 0.610764 0.5 +0.0577131 0.0523367 0.00917793 0.615834 0.445516 +0.0575508 0.0523393 0.00818574 0.606346 0.5 +0.0573171 0.0523102 0.00718519 0.605023 0.5 +0.0570523 0.0522954 0.00619533 0.475812 0.47053 +0.0567142 0.0522491 0.00518691 0.471375 0.5 +0.0562413 0.0521934 0.00418603 0.485189 0.5 +0.055733 0.052157 0.00319809 0.503163 0.46858 +0.0551015 0.0521065 0.00221795 0.519124 0.5 +0.0544062 0.0520207 0.00120422 0.518323 0.5 +0.0537506 0.0519895 0.000247391 0.524069 0.5 +0.0527009 0.0518645 -0.000768796 0.533411 0.473974 +0.0518069 0.0518147 -0.00170668 0.678395 0.5 +0.0506383 0.0516722 -0.00273463 0.53976 0.46091 +0.0493524 0.0516707 -0.00371978 0.518903 0.5 +0.0241275 0.120631 -0.00401437 0.617393 0.5 +-0.0913489 0.117296 0.00730629 0.321658 0.360447 +-0.0384872 0.0337149 -0.0296051 0.0979878 0.5 +0.0315596 0.0497964 -0.00774264 0.616452 0.5 +0.0309277 0.0497348 -0.00874 0.593726 0.5 +0.030443 0.0496674 -0.00974777 0.647285 0.5 +0.030267 0.0496887 -0.0107252 0.732949 0.5 +0.0300872 0.0497043 -0.0117138 0.797131 0.5 +0.029585 0.0495591 -0.0127459 0.792999 0.5 +0.0293305 0.049536 -0.0137505 0.745962 0.5 +0.0291366 0.0495584 -0.0147305 0.668164 0.5 +0.028771 0.0495105 -0.0157345 0.675217 0.5 +0.0282746 0.0494546 -0.0167442 0.693834 0.5 +0.0276856 0.0494518 -0.0176966 0.457013 0.449097 +0.0269239 0.0493817 -0.018692 0.484189 0.5 +0.0260218 0.0493062 -0.0196675 0.495677 0.5 +0.0354105 0.0965418 -0.0122281 0.741905 0.5 +0.0322641 0.11194 -0.00663069 0.536101 0.5 +-0.0218558 0.120004 -0.0110164 0.732965 0.5 +-0.0197872 0.118912 -0.0118682 0.767014 0.5 +0.0260624 0.113339 -0.0101501 0.570072 0.5 +-0.00844255 0.0358982 -0.0250895 0.274297 0.5 +-0.0534525 0.116245 -0.0149003 0.442719 0.484227 +0.0220864 0.122759 -0.00230579 0.59012 0.5 +-0.0610973 0.169393 -0.058599 0.418694 0.35836 +-0.062524 0.167829 -0.0475902 0.572548 0.5 +-0.0484771 0.135525 0.0064169 0.432784 0.464636 +0.0418026 0.102869 0.0141608 0.707999 0.5 +-0.0616117 0.16 -0.0305904 0.402146 0.5 +-0.062649 0.164698 -0.0365908 0.700156 0.5 +-0.049274 0.1386 0.00640083 0.343442 0.443497 +-0.0086601 0.174145 -0.0268323 0.270478 0.418876 +-0.0611161 0.170955 -0.0586033 0.329145 0.463457 +-0.0627435 0.14749 -0.0135844 0.417592 0.5 +-0.0639569 0.158297 -0.0475943 0.808419 0.5 +-0.0901834 0.114057 0.0406088 0.525601 0.5 +-0.0493281 0.143211 0.0074004 0.537412 0.5 +-0.0528479 0.141625 0.0244146 0.736656 0.5 +-0.0474407 0.134003 0.00841493 0.513652 0.5 +0.0425653 0.0859482 -0.00679004 0.487732 0.483543 +-0.0519291 0.13698 0.0263868 0.616208 0.5 +-0.0497918 0.143216 0.0113941 0.508239 0.5 +-0.0692156 0.0343564 -0.00463486 0.135623 0.5 +-0.0644875 0.156696 -0.0456027 0.721398 0.5 +-0.0424144 0.147803 0.00244515 0.199017 0.5 +-0.0674148 0.142782 -0.0112266 0.771662 0.5 +-0.0615924 0.156857 -0.0275883 0.477669 0.473396 +-0.0534094 0.150878 0.0234093 0.619666 0.5 +-0.062506 0.149124 -0.0145611 0.448791 0.457145 +-0.0487556 0.137056 0.00741027 0.393863 0.464028 +-0.0489579 0.137072 0.00640402 0.392103 0.5 +-0.0720422 0.15541 -0.0389078 0.727738 0.5 +-0.050582 0.13546 0.000440434 0.577058 0.412573 +-0.0852004 0.111887 0.0434561 0.437868 0.5 +-0.054786 0.147744 0.027387 0.589828 0.478246 +-0.0871174 0.110466 0.0103621 0.412575 0.430589 +-0.0614723 0.15843 -0.0295877 0.365972 0.5 +0.0579592 0.0537863 0.0201793 0.5879 0.5 +0.058207 0.0538058 0.0191798 0.625219 0.5 +0.0583564 0.0538008 0.0181861 0.63041 0.5 +0.0584743 0.0538121 0.0171841 0.634368 0.398124 +0.0585617 0.0538351 0.0161785 0.639406 0.5 +0.0585888 0.0538213 0.0151823 0.660411 0.5 +0.0587007 0.0538335 0.0141792 0.674603 0.5 +0.0587274 0.0538199 0.013179 0.649567 0.5 +0.0587826 0.0538552 0.0121765 0.642744 0.5 +0.0586626 0.0538435 0.0111779 0.632652 0.5 +0.0584482 0.0538047 0.0101717 0.487557 0.443445 +0.0582887 0.0538074 0.00917936 0.616395 0.5 +0.0581415 0.0538012 0.00818348 0.480156 0.5 +0.0578211 0.0537494 0.00717652 0.478464 0.472151 +0.0575548 0.053733 0.00618309 0.485083 0.47833 +0.0571986 0.0536922 0.00517882 0.401992 0.5 +0.0567259 0.0536428 0.00417778 0.508604 0.465156 +0.0562076 0.0536042 0.00319408 0.527881 0.5 +0.055585 0.0535517 0.00220948 0.556083 0.5 +0.0549839 0.0534895 0.00121219 0.556061 0.5 +0.0543638 0.0534389 0.000229046 0.566232 0.5 +0.0535495 0.0533436 -0.000784809 0.56678 0.460734 +0.0528846 0.0533107 -0.0017243 0.573928 0.5 +0.0514754 0.0531199 -0.00283685 0.553213 0.5 +-0.00559979 0.114688 -0.0175182 0.826111 0.5 +-0.00457753 0.11466 -0.0174869 0.837656 0.5 +-0.0907853 0.117276 0.00630342 0.329076 0.467466 +-0.0924969 0.121493 0.0302824 0.635611 0.5 +0.0329977 0.0514306 -0.00763543 0.669414 0.5 +0.0321413 0.0513188 -0.0087021 0.457637 0.5 +0.0316471 0.05126 -0.00972402 0.66497 0.5 +0.0312336 0.051167 -0.0107736 0.530484 0.470736 +0.0309109 0.0511672 -0.0117352 0.855775 0.5 +0.030542 0.0511254 -0.0127382 0.572913 0.5 +0.0301658 0.0510827 -0.0137422 0.587111 0.478707 +0.0297926 0.0510441 -0.0147439 0.539799 0.470301 +0.0294314 0.0509988 -0.0157519 0.431473 0.5 +0.0290438 0.0509642 -0.0167532 0.436572 0.5 +0.0285441 0.0509095 -0.0177614 0.412387 0.455219 +0.0279176 0.0508447 -0.0187774 0.426345 0.472529 +0.0271973 0.0508207 -0.0197147 0.570543 0.407647 +0.0261922 0.0507168 -0.0207207 0.465102 0.5 +-0.0096155 0.119132 -0.0142361 0.598271 0.474115 +-0.0154402 0.120098 -0.0111735 0.653192 0.5 +0.0330707 0.110451 -0.00703014 0.539439 0.5 +0.0275945 0.106191 -0.0144774 0.603346 0.5 +0.049575 0.0693171 0.00251779 0.590477 0.5 +-0.00531173 0.100039 -0.0239686 0.77298 0.5 +-0.0579079 0.121934 -0.00872095 0.879836 0.5 +-0.0288953 0.122588 -0.00566495 0.723465 0.5 +-0.0614844 0.158425 -0.031588 0.38522 0.5 +-0.0623783 0.167824 -0.0485899 0.421383 0.473616 +-0.0486962 0.13553 0.00541025 0.4249 0.5 +-0.062967 0.159919 -0.044604 0.558971 0.486106 +-0.0623736 0.164689 -0.0415928 0.451726 0.46736 +-0.0624754 0.163097 -0.0475912 0.487776 0.5 +-0.0869607 0.111738 0.00633151 0.392516 0.5 +0.0454345 0.0918112 0.0111626 0.583144 0.5 +-0.0609822 0.170956 -0.0597011 0.298431 0.5 +-0.0544369 0.147753 0.0264091 0.744221 0.39674 +-0.0595895 0.0659394 0.0339087 0.525966 0.5 +-0.0483417 0.137106 0.010396 0.639278 0.5 +-0.0530161 0.141613 0.0254095 0.742021 0.5 +-0.0475913 0.133999 0.00741747 0.50345 0.5 +-0.0391911 0.149452 0.000405422 0.22412 0.5 +0.0450277 0.0945898 0.0071675 0.57059 0.5 +-0.0515948 0.137023 0.025408 0.603093 0.47308 +-0.0499986 0.143197 0.012378 0.514726 0.480133 +-0.0786649 0.0764169 0.0296559 0.651011 0.5 +-0.0643301 0.156694 -0.0446094 0.721961 0.5 +-0.0086058 0.172644 -0.0268228 0.225727 0.5 +-0.0309118 0.10664 -0.0209245 0.770377 0.5 +-0.0614753 0.15686 -0.0265876 0.468932 0.5 +-0.0532839 0.150877 0.0224035 0.622382 0.5 +-0.0622926 0.149098 -0.0115749 0.392728 0.5 +-0.0491197 0.137061 0.00540677 0.394191 0.5 +-0.0493167 0.137038 0.00442458 0.338787 0.466697 +-0.0530679 0.140053 0.026392 0.554856 0.482226 +-0.0629975 0.158364 -0.0415982 0.824637 0.5 +0.042 0.102859 0.00616839 0.661426 0.5 +0.0399168 0.0999289 0.0271558 0.653894 0.5 +-0.053548 0.149321 0.0244145 0.622729 0.5 +0.058143 0.0551653 0.0211996 0.392529 0.47278 +0.0584714 0.0552095 0.0201836 0.592292 0.5 +0.0586943 0.0552354 0.0191792 0.613996 0.5 +0.0588331 0.0552392 0.0181818 0.624329 0.5 +0.0589666 0.0552427 0.017183 0.637779 0.5 +0.0590653 0.0552605 0.0161784 0.645686 0.5 +0.0591616 0.0552765 0.0151753 0.673424 0.5 +0.0591992 0.0552614 0.014176 0.682943 0.5 +0.0592863 0.0552837 0.0131736 0.678143 0.5 +0.0592051 0.0552531 0.0121703 0.662742 0.5 +0.0591522 0.0552732 0.011174 0.650231 0.5 +0.0590094 0.0552651 0.0101755 0.630673 0.5 +0.0587961 0.055231 0.00916964 0.480406 0.486964 +0.0585485 0.0552063 0.00817117 0.485552 0.455852 +0.0583177 0.0551766 0.00716644 0.395639 0.476618 +0.0579783 0.0551346 0.00616127 0.484573 0.476211 +0.0576745 0.0551294 0.00518333 0.419621 0.444241 +0.0572102 0.0550739 0.00417234 0.419299 0.5 +0.0566953 0.0550372 0.00319006 0.543996 0.5 +0.0560084 0.0549549 0.0021707 0.577167 0.5 +0.0554664 0.0549257 0.00120797 0.585571 0.446377 +0.0547864 0.0548406 0.00018303 0.586578 0.5 +0.0541546 0.0547912 -0.000791322 0.613085 0.5 +0.0534041 0.0547278 -0.00176167 0.577277 0.5 +0.0523694 0.0545712 -0.00274385 0.601167 0.5 +-0.0146702 0.122522 -0.00773793 0.689207 0.5 +-0.0119972 0.115638 -0.0165051 0.634104 0.5 +-0.0942867 0.122796 0.0162787 0.776281 0.5 +-0.0916761 0.122705 0.00729331 0.544903 0.5 +0.0343906 0.0529675 -0.00763383 0.545794 0.5 +0.0333333 0.0528011 -0.00875184 0.484359 0.5 +0.032607 0.0527076 -0.00976892 0.411213 0.451629 +0.0320794 0.0526694 -0.0107538 0.423072 0.5 +0.0315143 0.0525771 -0.0117816 0.586917 0.5 +0.0312129 0.0525777 -0.012761 0.597085 0.5 +0.0308153 0.0525508 -0.0137522 0.60889 0.5 +0.0303873 0.0525299 -0.0147333 0.606603 0.47341 +0.0299175 0.0524736 -0.0157475 0.486166 0.465799 +0.0295344 0.0524338 -0.0167463 0.498899 0.428968 +0.0290611 0.0523826 -0.0177704 0.465291 0.5 +0.0285377 0.0523356 -0.0187697 0.496895 0.5 +0.0278721 0.0522836 -0.0197543 0.515529 0.5 +0.0267286 0.0521731 -0.0207566 0.550213 0.5 +-0.0276563 0.12199 -0.007026 0.518687 0.5 +-0.0129236 0.118879 -0.0139348 0.769673 0.5 +-0.0140717 0.118746 -0.0137718 0.749928 0.5 +-0.0151271 0.118705 -0.0137294 0.724599 0.5 +-0.0297618 0.107877 -0.0202294 0.783066 0.5 +0.0111597 0.124256 -0.00791398 0.71863 0.5 +0.00739517 0.116252 -0.017256 0.533398 0.5 +-0.0133966 0.121962 -0.00916065 0.641269 0.5 +0.0456129 0.0904097 0.00518194 0.531174 0.428444 +0.0456518 0.0904151 0.00617296 0.550896 0.42208 +-0.062208 0.167823 -0.0505845 0.384454 0.5 +-0.0622359 0.167822 -0.0495929 0.407741 0.5 +-0.0620392 0.152203 -0.0175795 0.654188 0.5 +-0.0629538 0.164686 -0.0335942 0.753947 0.5 +-0.0636396 0.163113 -0.0245909 0.632536 0.5 +-0.0946899 0.124172 0.0202666 0.610389 0.464725 +-0.008712 0.171156 -0.0257232 0.258565 0.359784 +-0.0638693 0.170945 -0.0476012 0.577834 0.5 +-0.0632339 0.164684 -0.0315914 0.747287 0.5 +-0.06359 0.153594 -0.035633 0.397975 0.469455 +-0.0532397 0.146242 0.0224016 0.58506 0.390876 +0.0426847 0.0986805 0.020158 0.671027 0.5 +-0.0480746 0.134034 0.00539884 0.47819 0.5 +-0.0482356 0.137094 0.0133979 0.756012 0.5 +-0.0640892 0.172567 -0.049571 0.550316 0.5 +0.0444762 0.0945372 0.00319063 0.574206 0.468607 +-0.0511988 0.137011 0.0243968 0.616793 0.5 +-0.0502712 0.143189 0.0133798 0.662973 0.5 +-0.0759578 0.071995 0.0287387 0.629326 0.5 +-0.0640597 0.156709 -0.043612 0.723161 0.5 +-0.0813623 0.104616 -0.00457868 0.515597 0.433066 +0.0455252 0.0918117 0.00617298 0.577167 0.5 +-0.0614699 0.156861 -0.0255852 0.465096 0.5 +-0.0531741 0.150869 0.0213978 0.62099 0.5 +-0.0623894 0.149097 -0.0105741 0.378009 0.444587 +-0.0624074 0.1491 -0.0095736 0.323403 0.364631 +-0.0930586 0.122743 0.0102788 0.398156 0.5 +-0.0623027 0.152202 -0.0135791 0.335248 0.5 +-0.0863384 0.102179 0.00442425 0.673799 0.5 +0.044965 0.0903773 0.0181662 0.519481 0.5 +-0.0144336 0.120974 -0.0101151 0.637206 0.5 +-0.0538689 0.152421 0.0214004 0.533045 0.5 +0.0585317 0.0565811 0.0212119 0.479104 0.5 +0.0589396 0.0566475 0.0201757 0.598074 0.5 +0.0590873 0.0566489 0.0191831 0.606556 0.5 +0.0592992 0.0566775 0.0181738 0.609183 0.434584 +0.0595077 0.0567056 0.0171693 0.628506 0.5 +0.0595665 0.0566863 0.0161765 0.647969 0.5 +0.0596848 0.0566967 0.0151763 0.65096 0.5 +0.0597604 0.0567164 0.0141707 0.675199 0.5 +0.0597918 0.0567046 0.013171 0.685016 0.5 +0.0597837 0.0567045 0.0121686 0.660302 0.5 +0.0597511 0.0567143 0.0111681 0.643241 0.5 +0.0595997 0.0567108 0.0101713 0.63431 0.438929 +0.0593671 0.0566851 0.00917266 0.476854 0.449768 +0.0591195 0.05666 0.00817454 0.472225 0.5 +0.0588535 0.0566417 0.00718098 0.603068 0.5 +0.058528 0.0565928 0.00617045 0.459459 0.47426 +0.0581659 0.056561 0.00517446 0.39683 0.5 +0.0577561 0.0565381 0.00419435 0.499319 0.466295 +0.0572046 0.0564633 0.00317356 0.526344 0.452579 +0.0565751 0.0564133 0.00219071 0.565967 0.5 +0.0559661 0.0563559 0.00119345 0.589158 0.5 +0.0553414 0.0563023 0.000211666 0.604168 0.5 +0.054626 0.0562289 -0.00078591 0.603038 0.5 +0.053783 0.0561466 -0.00178141 0.627685 0.5 +0.0528986 0.056075 -0.00272531 0.593811 0.5 +-0.0346229 0.116833 -0.0136016 0.818609 0.5 +-0.0887889 0.117194 0.003272 0.640246 0.5 +-0.0944779 0.122838 0.0232837 0.698739 0.5 +0.0196586 0.112307 -0.0150514 0.636933 0.5 +0.0355326 0.0544702 -0.00765701 0.601593 0.5 +0.0347163 0.0544411 -0.00865089 0.531594 0.5 +0.033772 0.0543003 -0.00971113 0.517615 0.5 +0.0329392 0.0541774 -0.0107445 0.555557 0.5 +0.0324154 0.0541402 -0.0117355 0.581367 0.5 +0.0318353 0.0540522 -0.0127622 0.594047 0.476908 +0.0314991 0.054058 -0.0137198 0.484 0.474603 +0.0309191 0.0539829 -0.0147501 0.498271 0.5 +0.0302987 0.0539206 -0.0157566 0.510917 0.5 +0.0297243 0.0538559 -0.0167895 0.542109 0.452215 +0.0292997 0.0538256 -0.0177694 0.571346 0.5 +0.0287562 0.053781 -0.0187512 0.603411 0.5 +0.0278843 0.0536982 -0.0197695 0.611619 0.5 +0.0265706 0.0535806 -0.0207269 0.634746 0.5 +-0.0294891 0.119549 -0.0104626 0.650835 0.5 +-0.0248096 0.123255 -0.00440954 0.533802 0.5 +-0.0225266 0.123574 -0.00478676 0.467051 0.5 +0.00646008 0.118492 -0.0156628 0.487233 0.5 +0.0258363 0.0844839 -0.0235493 0.759593 0.5 +-0.0375944 0.116238 -0.0149818 0.845616 0.5 +-0.00874782 0.125791 -0.00734235 0.409323 0.5 +-0.0919625 0.126955 0.0342506 0.835585 0.5 +-0.0928438 0.126838 0.0112559 0.469236 0.5 +0.0456884 0.0904192 0.00716979 0.574292 0.5 +0.0425976 0.0887597 -0.00680771 0.483458 0.5 +-0.0621056 0.167818 -0.0515918 0.473419 0.5 +-0.0623557 0.152158 -0.0235797 0.69667 0.5 +-0.0621803 0.161575 -0.027587 0.585144 0.5 +-0.0627141 0.159943 -0.0425974 0.761199 0.5 +-0.0616059 0.160004 -0.0295877 0.391734 0.5 +-0.0788477 0.0773102 0.0306071 0.649939 0.5 +-0.083926 0.0775674 0.0187821 0.76776 0.5 +0.0428837 0.0887839 -0.00581701 0.479194 0.466663 +-0.0618767 0.15376 -0.0175826 0.581724 0.5 +-0.0530392 0.146248 0.021397 0.575877 0.371662 +0.0457562 0.0904226 0.00816981 0.585373 0.5 +-0.0492939 0.133961 0.00142725 0.400685 0.436724 +-0.0635915 0.172518 -0.0506017 0.550201 0.5 +-0.0882052 0.0955366 0.00643448 0.408188 0.414687 +-0.0759561 0.112612 -0.00567952 0.521611 0.5 +-0.062341 0.164692 -0.0435908 0.46332 0.5 +-0.0508742 0.137048 0.0234112 0.610902 0.5 +-0.050513 0.143196 0.0143929 0.692909 0.5 +-0.0301736 0.0353405 0.0506988 0.973334 0.5 +-0.0638349 0.156748 -0.0426051 0.81144 0.5 +-0.0820994 0.104661 -0.00359906 0.493573 0.440598 +0.0449566 0.0931917 0.0141646 0.553726 0.5 +-0.0625738 0.156865 -0.0165766 0.39713 0.443201 +-0.0530342 0.15087 0.0203968 0.619837 0.5 +-0.0867701 0.113047 0.00428618 0.326821 0.462312 +-0.0624427 0.149095 -0.00857615 0.299172 0.4296 +-0.0937199 0.12277 0.0132819 0.476023 0.5 +-0.0631468 0.156791 -0.0395997 0.574709 0.5 +0.0432229 0.0888059 -0.00480108 0.592423 0.5 +-0.0627916 0.150662 -0.00757045 0.297477 0.5 +-0.076903 0.112654 -0.00467049 0.561696 0.5 +0.038369 0.0884214 -0.0137726 0.709315 0.5 +0.0589255 0.0580383 0.0211692 0.487605 0.461406 +0.0592303 0.0580467 0.0201933 0.481931 0.5 +0.0595629 0.058084 0.0191786 0.604806 0.5 +0.0597169 0.0580863 0.0181825 0.484545 0.4804 +0.0599261 0.0581121 0.0171753 0.489468 0.5 +0.0600492 0.0581198 0.0161748 0.636218 0.5 +0.0601522 0.0581329 0.0151721 0.648031 0.5 +0.0602482 0.0581464 0.0141691 0.666442 0.5 +0.060278 0.0581371 0.013168 0.51779 0.483501 +0.0603506 0.0581587 0.0121666 0.650229 0.5 +0.060267 0.0581373 0.011162 0.633968 0.5 +0.0601313 0.0581272 0.0101639 0.618894 0.5 +0.0598737 0.0581052 0.00916393 0.472667 0.5 +0.0596228 0.0581166 0.00817617 0.454339 0.466523 +0.0593748 0.0580631 0.00716733 0.599856 0.5 +0.059111 0.0580409 0.00617531 0.849438 0.5 +0.0587584 0.0580034 0.00517536 0.597005 0.480152 +0.0582707 0.0579579 0.00417743 0.494672 0.5 +0.0577493 0.0579199 0.00320063 0.51124 0.5 +0.0570719 0.0578424 0.00217676 0.556605 0.5 +0.0564669 0.0577845 0.00118215 0.59796 0.5 +0.0557398 0.0577143 0.000186064 0.623998 0.5 +0.0550864 0.0576626 -0.000774412 0.620727 0.5 +0.0542703 0.0575789 -0.00178727 0.60797 0.5 +-0.0289695 0.0380956 -0.0297496 0.537642 0.5 +-0.0641179 0.115013 -0.0114251 0.578257 0.5 +-0.087862 0.117151 0.00226309 0.455901 0.5 +-0.0942376 0.122836 0.024283 0.561145 0.5 +-0.0456556 0.126096 -0.00729728 0.56251 0.412434 +0.0363562 0.0559126 -0.00774494 0.537798 0.5 +0.035799 0.0558975 -0.00871505 0.595815 0.5 +0.0351777 0.0559301 -0.00964394 0.596731 0.5 +0.0340769 0.0556934 -0.0107486 0.577302 0.5 +0.0336268 0.0557054 -0.0117007 0.630399 0.5 +0.0328851 0.0556122 -0.0127142 0.60439 0.5 +0.0319954 0.0554568 -0.0137989 0.496217 0.5 +0.0313289 0.0554154 -0.0147753 0.519279 0.5 +0.0305588 0.055351 -0.0157687 0.552033 0.5 +0.029856 0.0552774 -0.0168073 0.580104 0.5 +0.0292061 0.055224 -0.0177993 0.622818 0.5 +0.0285713 0.0551672 -0.0188053 0.623582 0.5 +0.0275533 0.0550749 -0.019815 0.695499 0.5 +0.0263921 0.0549677 -0.020802 0.70578 0.5 +0.025364 0.0547555 -0.0216571 0.659083 0.5 +0.0247051 0.054807 -0.022754 0.580597 0.453538 +0.0240844 0.0547426 -0.0237664 0.56032 0.5 +-0.0201946 0.0918367 -0.0355405 0.485557 0.5 +0.00748229 0.118415 -0.0155852 0.625074 0.5 +-0.0198084 0.119865 -0.0108751 0.743421 0.5 +0.0127783 0.105278 -0.0195273 0.910659 0.5 +-0.0814183 0.138999 -0.00180871 0.699893 0.300897 +-0.0855476 0.136296 0.00125685 0.642134 0.5 +-0.0932173 0.122834 0.0272862 0.73511 0.5 +-0.0149026 0.105901 -0.0222117 0.61183 0.5 +-0.0179932 0.0940702 -0.0337993 0.601117 0.5 +-0.0647036 0.0653044 0.0298737 0.526618 0.351859 +-0.0878362 0.112676 0.0422322 0.448078 0.427651 +0.0456774 0.0904203 0.00916591 0.582129 0.5 +-0.062275 0.152174 -0.0245791 0.697154 0.5 +0.0390548 0.0884875 -0.0128108 0.687922 0.5 +-0.0627318 0.159944 -0.0435973 0.565858 0.5 +-0.0619877 0.169385 -0.052596 0.46269 0.5 +-0.091122 0.115466 0.0410527 0.535398 0.5 +-0.0522361 0.15086 0.0163848 0.674849 0.5 +-0.0620309 0.153757 -0.0155846 0.555438 0.5 +-0.0523224 0.146252 0.0184018 0.731359 0.389119 +-0.08743 0.111796 0.0214228 0.70966 0.352708 +-0.0856264 0.110331 0.00634317 0.317836 0.5 +-0.049383 0.140141 0.0133936 0.55038 0.5 +-0.0886543 0.102345 0.0123871 0.793205 0.5 +-0.0762229 0.149992 -0.0128764 0.732483 0.5 +-0.0278526 0.181478 -0.0120494 0.215821 0.5 +-0.0623326 0.164687 -0.0445921 0.45291 0.5 +-0.050474 0.137043 0.0223997 0.611696 0.5 +-0.050774 0.143198 0.0153986 0.739005 0.5 +-0.0292631 0.0351386 0.0510616 0.96808 0.5 +-0.0636754 0.156752 -0.0416076 0.832758 0.5 +-0.0825014 0.0978733 -0.00561152 0.68296 0.5 +0.0449079 0.0931824 0.0151569 0.544365 0.468067 +-0.0627692 0.156841 -0.0155919 0.378285 0.5 +-0.0631555 0.156855 -0.014582 0.441682 0.5 +-0.0757616 0.109947 0.0435791 0.495771 0.5 +-0.0625369 0.149102 -0.00757295 0.255911 0.5 +-0.067993 0.0619274 0.01978 0.404779 0.439493 +-0.0773226 0.108517 -0.00660544 0.562272 0.5 +-0.0817139 0.108721 -0.00159489 0.492148 0.5 +-0.0625159 0.163122 -0.0305925 0.533076 0.5 +0.0403239 0.0999619 0.0261672 0.532075 0.5 +0.0386236 0.0898511 -0.0127692 0.698424 0.5 +0.0591828 0.0594427 0.0211715 0.498377 0.5 +0.0595491 0.0594739 0.0201736 0.402399 0.5 +0.0597447 0.0594744 0.0191904 0.405181 0.453978 +0.0600207 0.0595165 0.0181686 0.409138 0.458937 +0.0601893 0.0595178 0.0171788 0.510904 0.439593 +0.0603913 0.0595429 0.0161691 0.492731 0.5 +0.0604945 0.0595549 0.015166 0.647518 0.412753 +0.0605521 0.0595441 0.0141714 0.511761 0.5 +0.0606526 0.0595573 0.0131644 0.513437 0.473552 +0.0607493 0.059571 0.0121639 0.502215 0.5 +0.0606492 0.0595518 0.0111602 0.61801 0.5 +0.0605105 0.0595417 0.010156 0.475273 0.481213 +0.0603447 0.0595379 0.00916361 0.471356 0.468845 +0.0600963 0.059514 0.00816569 0.464206 0.456925 +0.059772 0.0594746 0.00715469 0.46047 0.5 +0.0594886 0.0594575 0.00616841 0.465298 0.5 +0.0591439 0.0594194 0.00516163 0.392546 0.482592 +0.0587589 0.059387 0.00417226 0.506332 0.467745 +0.0582234 0.0593447 0.00320204 0.53774 0.5 +0.0575358 0.0592738 0.00218909 0.570191 0.5 +0.0568425 0.0592039 0.0011688 0.623483 0.5 +0.0560899 0.059136 0.000193317 0.666976 0.5 +0.0553821 0.0590684 -0.000816519 0.651579 0.5 +0.0545445 0.0589886 -0.00181806 0.645676 0.5 +-0.0518774 0.104165 -0.0200373 0.649024 0.5 +-0.0659757 0.132606 -0.00839654 0.779069 0.5 +-0.092065 0.118755 0.0273051 0.759301 0.5 +0.0381226 0.0574698 -0.00591549 0.617029 0.5 +0.037704 0.0574555 -0.00668675 0.507519 0.407815 +0.0372794 0.0574491 -0.00767997 0.474009 0.5 +0.0366139 0.0573407 -0.00875458 0.423555 0.406295 +0.0360298 0.0573371 -0.00970954 0.644927 0.5 +0.0354668 0.0573224 -0.0106723 0.643159 0.394677 +0.0345459 0.0571781 -0.011728 0.668033 0.415515 +0.0338991 0.057119 -0.0127141 0.666013 0.5 +0.0331357 0.0570437 -0.0137102 0.516197 0.5 +0.0319374 0.0568888 -0.0147656 0.661742 0.5 +0.0308479 0.0567691 -0.0158074 0.545116 0.5 +0.030053 0.0567138 -0.0167759 0.587739 0.5 +0.0292004 0.0566287 -0.0178044 0.622435 0.5 +0.0284708 0.0565571 -0.0188308 0.651395 0.5 +0.0276189 0.0564968 -0.0197599 0.686925 0.5 +0.0266313 0.0563972 -0.0207832 0.688204 0.5 +0.0258436 0.0563286 -0.0217568 0.64374 0.5 +0.0251101 0.0562501 -0.0227775 0.624078 0.5 +0.0245832 0.0562081 -0.0237654 0.624609 0.5 +0.0239341 0.0561524 -0.0247597 0.589739 0.5 +0.0112198 0.0932651 -0.0287439 0.504262 0.457756 +0.0237606 0.105983 -0.0162548 0.712413 0.5 +-0.018823 0.121694 -0.0088173 0.498583 0.5 +-0.0774116 0.159696 -0.0249188 0.398538 0.5 +0.00312416 0.107287 -0.0203844 0.798566 0.5 +-0.0928746 0.122834 0.0282828 0.700755 0.5 +0.0456485 0.0904179 0.0101632 0.583225 0.436528 +-0.034174 0.107559 -0.0198979 0.714786 0.5 +-0.0253936 0.106122 -0.0223873 0.651504 0.5 +-0.0623817 0.147548 -0.00757469 0.283742 0.447137 +-0.0668021 0.0909191 -0.0174744 0.566525 0.5 +0.0455601 0.0904134 0.011166 0.573408 0.440521 +-0.0839267 0.145982 0.00417548 0.630633 0.5 +0.0441984 0.0917353 0.0221589 0.586087 0.5 +-0.0620707 0.163126 -0.0385937 0.460723 0.460588 +-0.0618524 0.169383 -0.0535961 0.450618 0.460057 +-0.0860649 0.0994533 0.00140442 0.625117 0.5 +-0.0853556 0.095327 -0.00158429 0.420789 0.436678 +-0.0623027 0.153756 -0.0145815 0.330517 0.476166 +-0.0693902 0.0672718 0.0289371 0.612889 0.5 +0.00821621 0.124741 -0.00840458 0.561943 0.485915 +-0.0510928 0.12386 -0.00885828 0.66819 0.5 +-0.0629712 0.145905 -0.0115915 0.540363 0.5 +-0.0815177 0.106 -0.00361682 0.502265 0.5 +-0.0927009 0.117475 0.0353038 0.59155 0.5 +-0.0896998 0.137926 0.0341919 0.631996 0.5 +-0.0623408 0.164683 -0.0455908 0.434025 0.5 +-0.0500704 0.137041 0.0213927 0.61396 0.5 +-0.0509887 0.143164 0.0163768 0.791816 0.5 +-0.0283135 0.0350192 0.0513697 0.926702 0.5 +-0.0625323 0.1568 -0.0366082 0.590445 0.469467 +-0.0623412 0.156794 -0.0356173 0.592111 0.465685 +0.040909 0.0985658 0.0261474 0.52647 0.5 +-0.0622512 0.175627 -0.0566298 0.659276 0.5 +-0.0893296 0.0956153 0.0124232 0.579529 0.5 +-0.0492132 0.138613 0.0153977 0.60067 0.489696 +-0.0231675 0.184436 -0.0160624 0.201666 0.271116 +-0.0875073 0.0954698 0.00341799 0.518192 0.5 +-0.0621215 0.15372 -0.0285871 0.787853 0.5 +-0.0918084 0.11461 0.0202058 0.759207 0.5 +-0.0524198 0.0648658 0.0346087 0.638319 0.205582 +0.041209 0.10285 0.0181659 0.692422 0.5 +-0.0907178 0.142015 0.0241681 0.692137 0.5 +0.059297 0.0608379 0.0211666 0.51271 0.5 +0.0595932 0.0608555 0.0201843 0.502107 0.5 +0.0598453 0.0608733 0.0191849 0.500059 0.47228 +0.0600903 0.0608951 0.0181821 0.515105 0.5 +0.0603494 0.0609121 0.0171857 0.518109 0.446278 +0.0605626 0.0609358 0.0161739 0.50427 0.5 +0.060666 0.0609482 0.0151682 0.514519 0.466829 +0.0607571 0.0609589 0.0141669 0.515814 0.5 +0.0608603 0.0609709 0.0131614 0.517727 0.5 +0.0609039 0.0609671 0.0121585 0.498069 0.5 +0.060906 0.0609648 0.0111554 0.402126 0.470636 +0.0608524 0.0609661 0.0101561 0.482051 0.467159 +0.0606167 0.0609422 0.00915424 0.479182 0.5 +0.0603694 0.0609168 0.00815448 0.470282 0.462951 +0.0601048 0.0608967 0.00715985 0.483342 0.5 +0.0597675 0.0609389 0.00613027 0.435499 0.425849 +0.0594014 0.060828 0.00515272 0.437065 0.5 +0.0589179 0.0607855 0.00414854 0.458659 0.467173 +0.0583839 0.0607371 0.00317993 0.570535 0.5 +0.0576507 0.0606695 0.00219201 0.607473 0.5 +0.0567415 0.0605855 0.00115011 0.668278 0.5 +0.0559458 0.0605187 0.000117677 0.603753 0.5 +0.0553011 0.0604636 -0.000842819 0.590909 0.474017 +-0.0809167 0.107332 -0.00361395 0.506042 0.5 +-0.0910269 0.129538 0.0072515 0.558083 0.5 +-0.0939252 0.118758 0.016301 0.619326 0.5 +0.039239 0.0589589 -0.00512401 0.425865 0.437223 +0.0387477 0.0589461 -0.0057234 0.480415 0.5 +0.0383205 0.0589284 -0.00670105 0.449055 0.5 +0.0379552 0.0588939 -0.00773658 0.509772 0.451282 +0.0375503 0.0588742 -0.00872526 0.513159 0.44736 +0.0368613 0.0587703 -0.00975684 0.458513 0.5 +0.0361211 0.0586877 -0.0107678 0.684034 0.423327 +0.0355639 0.058664 -0.0117324 0.701563 0.5 +0.0348936 0.0586201 -0.0127038 0.713159 0.5 +0.0340234 0.0585319 -0.0137143 0.724897 0.5 +0.0331444 0.0584441 -0.0147212 0.562567 0.5 +0.0320792 0.05838 -0.0156698 0.701553 0.5 +0.0306755 0.0581744 -0.0167704 0.566063 0.476743 +0.0295964 0.0580473 -0.0178274 0.608291 0.460655 +0.0289187 0.0580129 -0.0187889 0.64862 0.5 +0.0282135 0.0579727 -0.0197309 0.671921 0.428729 +0.0273731 0.0578707 -0.0207586 0.66677 0.424843 +0.026592 0.0578126 -0.0217526 0.652647 0.5 +0.0258208 0.0577421 -0.0227411 0.655027 0.43165 +0.0249849 0.0576546 -0.0237943 0.614322 0.5 +0.0242735 0.0576737 -0.0247443 0.622422 0.5 +0.0312874 0.108108 -0.0105276 0.568763 0.5 +0.0270498 0.0919981 -0.0213752 0.662934 0.5 +-0.0264967 0.121204 -0.00819998 0.496809 0.5 +-0.093142 0.118716 0.0123041 0.464992 0.5 +-0.0933659 0.118725 0.0133024 0.49837 0.5 +-0.0835287 0.11032 0.027366 0.497492 0.5 +0.0451698 0.0903876 0.0161628 0.545468 0.451497 +0.0450682 0.090383 0.0171641 0.536137 0.5 +-0.0895496 0.13918 0.0132126 0.445163 0.40099 +-0.0765465 0.107865 0.0361429 0.445363 0.5 +-0.0680331 0.17369 -0.0570223 0.695141 0.5 +-0.0887169 0.125354 0.00227396 0.679341 0.348132 +-0.0619851 0.167813 -0.0525933 0.462032 0.5 +-0.0158316 0.18484 -0.0207268 0.41846 0.5 +-0.0888712 0.101031 0.0183836 0.605021 0.5 +-0.0616877 0.169385 -0.0545934 0.460098 0.5 +-0.0320486 0.122707 -0.00572396 0.589206 0.5 +-0.0616079 0.160003 -0.0285892 0.381557 0.431936 +-0.0620171 0.153759 -0.016582 0.566906 0.5 +-0.0623508 0.146001 -0.00658982 0.369724 0.5 +0.0125423 0.120941 -0.012332 0.45799 0.403894 +-0.063934 0.169417 -0.04458 0.654827 0.5 +-0.0624894 0.163088 -0.0505885 0.724955 0.5 +-0.0938592 0.11877 0.0212975 0.72685 0.5 +0.026048 0.117275 -0.00637096 0.514202 0.5 +-0.0518659 0.144686 0.0163701 0.767369 0.5 +-0.0624255 0.16468 -0.0465913 0.410184 0.442583 +-0.0496962 0.137023 0.0203775 0.615261 0.5 +-0.0513993 0.14316 0.0173798 0.640566 0.5 +-0.0272788 0.0350567 0.0515587 0.884671 0.5 +-0.0734823 0.0649094 0.0160661 0.575058 0.5 +-0.0621097 0.156825 -0.0345957 0.565053 0.471494 +-0.0889438 0.137894 0.0261932 0.644772 0.453376 +-0.061679 0.175513 -0.061381 0.28676 0.5 +-0.0849712 0.111906 0.0292041 0.592144 0.5 +-0.0707786 0.0690222 0.0306409 0.529959 0.5 +-0.0486882 0.138613 0.0123943 0.727647 0.5 +-0.048671 0.138621 0.0113976 0.699095 0.5 +-0.052801 0.144689 0.0203903 0.749023 0.5 +-0.049226 0.14015 0.0123965 0.683971 0.5 +-0.0938276 0.126933 0.0242666 0.630932 0.5 +-0.0788576 0.105851 -0.00657974 0.569429 0.5 +-0.028606 0.0356961 0.0524615 0.59067 0.5 +0.0593092 0.0622231 0.0211664 0.531206 0.448468 +0.0596824 0.0622541 0.020173 0.435137 0.443652 +0.0599778 0.0622697 0.0191849 0.430307 0.429362 +0.0602047 0.0622908 0.0181797 0.426429 0.437042 +0.0604641 0.0623144 0.017179 0.434757 0.451533 +0.0606845 0.0623337 0.0161711 0.512649 0.5 +0.060795 0.0623425 0.0151668 0.516387 0.5 +0.0608733 0.0623548 0.014161 0.526971 0.5 +0.0609114 0.0623534 0.0131596 0.439634 0.5 +0.0610023 0.062364 0.012157 0.435291 0.469988 +0.0610091 0.0623122 0.0111052 0.443146 0.456896 +0.0609087 0.0623561 0.0101482 0.371532 0.5 +0.0607459 0.0623413 0.0091502 0.37895 0.442745 +0.0604856 0.0623173 0.00815473 0.3859 0.5 +0.0601642 0.0622865 0.0071402 0.38653 0.5 +0.0598096 0.0622539 0.00613597 0.394681 0.447895 +0.0593665 0.0622129 0.00511321 0.413274 0.5 +0.0589161 0.0621713 0.00415053 0.508049 0.469633 +0.0583787 0.0621209 0.00318289 0.633745 0.5 +0.0575354 0.0620414 0.00218896 0.663039 0.5 +0.0562981 0.0619429 0.0011209 0.708055 0.5 +-0.0776736 0.10169 -0.00957801 0.503785 0.5 +-0.0794787 0.104524 -0.00660043 0.553637 0.5 +-0.0817304 0.107364 -0.00260486 0.481474 0.5 +-0.067835 0.0951999 -0.016639 0.618731 0.389116 +-0.0580744 0.136937 -0.00566118 0.659682 0.5 +0.0398205 0.0604422 -0.00479028 0.321975 0.5 +0.0393181 0.0603877 -0.00577734 0.439995 0.453278 +0.0389134 0.0603588 -0.00677348 0.686687 0.5 +0.0386112 0.0603508 -0.0077511 0.485716 0.5 +0.0382147 0.0603208 -0.00873991 0.44577 0.5 +0.0377251 0.0602627 -0.00973714 0.463498 0.454514 +0.0368862 0.0601656 -0.0107732 0.516281 0.5 +0.0363318 0.0601344 -0.0117401 0.540572 0.5 +0.0353685 0.0600237 -0.0127796 0.581486 0.5 +0.0346003 0.059954 -0.013776 0.623923 0.5 +0.0339055 0.0599168 -0.014725 0.617756 0.5 +0.0330579 0.0598189 -0.0157593 0.598783 0.5 +0.0322222 0.0597861 -0.0166881 0.754582 0.5 +0.0313723 0.0597573 -0.0175925 0.742459 0.5 +0.0295583 0.0594698 -0.0188239 0.617611 0.449874 +0.0288023 0.0594063 -0.0198054 0.658552 0.5 +0.0281353 0.0593598 -0.0207767 0.66994 0.5 +0.0273613 0.0592959 -0.0217662 0.688115 0.5 +0.0264018 0.0591975 -0.0228202 0.700746 0.5 +0.0253341 0.0591059 -0.0237971 0.67321 0.5 +0.0179185 0.121996 -0.0074786 0.61441 0.349043 +-0.0494965 0.11266 -0.0171746 0.70381 0.5 +-0.0859627 0.109007 0.009354 0.687282 0.5 +0.0206432 0.121117 -0.00652883 0.589591 0.462402 +-0.0935937 0.118737 0.0143019 0.519623 0.5 +0.0147782 0.0929392 -0.0263979 0.529844 0.440138 +-0.0939345 0.122834 0.0252963 0.733465 0.5 +-0.0925995 0.118805 0.0322947 0.532677 0.5 +0.0455409 0.0918154 0.00916522 0.584363 0.5 +-0.0619689 0.153737 -0.0245819 0.758897 0.5 +-0.0628795 0.15219 -0.00958093 0.302804 0.379925 +-0.0854234 0.100771 0.000422318 0.457821 0.37761 +-0.0628433 0.16149 -0.0495873 0.792351 0.5 +-0.011814 0.163592 -0.0157611 0.270819 0.5 +-0.0618453 0.155287 -0.0285878 0.741266 0.5 +-0.0615314 0.169388 -0.0555899 0.453087 0.5 +-0.0286194 0.180015 -0.014033 0.334238 0.5 +-0.0617587 0.160001 -0.0265888 0.404379 0.5 +-0.0618601 0.153758 -0.0185818 0.597977 0.5 +-0.0620348 0.146024 -0.00560988 0.273338 0.5 +-0.0617126 0.170956 -0.0545977 0.375323 0.476926 +0.0428658 0.0623821 -0.00251673 0.572144 0.5 +-0.0896222 0.111892 0.015334 0.537165 0.5 +-0.0921157 0.118792 0.0303066 0.575147 0.274328 +-0.058698 0.0349789 0.0448461 0.767369 0.5 +-0.0890965 0.111935 0.0113594 0.419454 0.5 +-0.0761401 0.0728821 0.0296904 0.656357 0.5 +-0.0494036 0.13704 0.0193807 0.619246 0.5 +-0.0523714 0.143148 0.0193902 0.798325 0.5 +-0.0526124 0.143167 0.0204083 0.782928 0.347147 +-0.0728419 0.0642516 0.016748 0.587415 0.5 +-0.0615795 0.156866 -0.0245858 0.370593 0.5 +-0.0614886 0.156862 -0.0235899 0.44398 0.5 +-0.0271327 0.0917299 -0.030613 0.268186 0.338914 +-0.0946719 0.122818 0.0192736 0.603707 0.457923 +-0.0665119 0.0621274 0.0216726 0.357363 0.371289 +-0.0800885 0.0739226 0.0209531 0.780963 0.5 +-0.0524448 0.149335 0.0194038 0.713835 0.5 +-0.0870404 0.113136 0.0295379 0.508082 0.5 +-0.0190143 0.123258 -0.00649836 0.488696 0.432273 +-0.0512927 0.135429 -0.000552487 0.593683 0.5 +-0.0619747 0.170963 -0.0535908 0.478753 0.5 +0.0589314 0.0635744 0.022157 0.588022 0.452474 +0.0593532 0.0636103 0.0211835 0.569859 0.5 +0.0597267 0.0636404 0.0201833 0.455362 0.452165 +0.060067 0.0636708 0.0191758 0.454249 0.474979 +0.0603322 0.0636924 0.0181801 0.445435 0.5 +0.0605691 0.0637105 0.0171755 0.529909 0.466441 +0.060777 0.0637293 0.0161648 0.518411 0.435097 +0.0608734 0.0637391 0.0151617 0.423145 0.5 +0.0608914 0.0637395 0.0141606 0.442389 0.5 +0.0609254 0.0637423 0.0131584 0.453719 0.480682 +0.0610039 0.0637491 0.0121545 0.448999 0.475178 +0.0609826 0.0637492 0.0111528 0.453067 0.5 +0.0607975 0.0637336 0.0101416 0.380389 0.485682 +0.0606094 0.0637127 0.00915317 0.405306 0.438652 +0.0602932 0.0636878 0.00814035 0.416179 0.5 +0.0600133 0.0636587 0.00714888 0.422605 0.470528 +0.0595925 0.0636093 0.00613697 0.427777 0.488755 +0.0592296 0.0635939 0.00512091 0.440985 0.5 +0.0587422 0.0635506 0.00411936 0.539166 0.404475 +0.0582061 0.0634965 0.00313887 0.680389 0.5 +0.0573538 0.0634191 0.00214341 0.743078 0.5 +0.0562979 0.0633024 0.00123284 0.735628 0.5 +-0.0798641 0.145899 -0.00181913 0.535212 0.5 +-0.0867821 0.10632 0.010369 0.700997 0.5 +-0.0822334 0.107404 -0.00162196 0.380279 0.5 +-0.0904479 0.129526 0.00625875 0.558728 0.5 +-0.0879901 0.0928029 0.00642738 0.676827 0.5 +0.0402464 0.0618954 -0.00472398 0.363401 0.5 +0.039774 0.0618507 -0.00575724 0.360428 0.447336 +0.0394097 0.0618135 -0.00677045 0.384344 0.5 +0.0390675 0.0617702 -0.00778266 0.554797 0.462018 +0.0387541 0.0617571 -0.00875906 0.444794 0.469573 +0.0382522 0.0617095 -0.0097618 0.511661 0.5 +0.0376047 0.0616532 -0.0107499 0.538778 0.5 +0.0367516 0.061565 -0.0117718 0.562398 0.5 +0.0357612 0.0614637 -0.0127934 0.609268 0.5 +0.0348978 0.0613787 -0.0138096 0.643022 0.5 +0.034267 0.0613198 -0.014809 0.640147 0.5 +0.0335661 0.0612752 -0.015761 0.623727 0.5 +0.0328256 0.0611992 -0.0167775 0.619096 0.5 +0.0320447 0.061134 -0.0177676 0.617945 0.5 +0.0305387 0.0609912 -0.0187852 0.640408 0.5 +0.0292827 0.060879 -0.0197951 0.675718 0.5 +0.0284552 0.0607955 -0.0208488 0.706957 0.5 +0.0276877 0.0607373 -0.0218456 0.749572 0.5 +0.0267364 0.0606633 -0.022785 0.765619 0.5 +0.0253513 0.0605347 -0.0238887 0.724599 0.5 +0.0506397 0.0652197 -0.00133714 0.518067 0.5 +-0.0836964 0.106272 0.0263573 0.664023 0.5 +-0.0860408 0.109124 0.0103593 0.500399 0.443883 +0.0197584 0.121448 -0.00690816 0.589165 0.5 +-0.0743851 0.163815 -0.0369793 0.498117 0.5 +-0.0935895 0.122834 0.0262964 0.753403 0.5 +-0.0928043 0.11882 0.0332998 0.540303 0.5 +-0.0911853 0.113324 0.0173235 0.668386 0.5 +-0.0682589 0.154325 -0.0506473 0.206571 0.0818868 +0.0432138 0.091668 0.0251628 0.619695 0.461412 +-0.0561456 0.0642166 0.0326189 0.607231 0.5 +-0.0623548 0.166257 -0.0465894 0.443543 0.453907 +-0.0624916 0.166267 -0.0445898 0.501406 0.5 +0.0447757 0.0875223 -0.000814326 0.456617 0.5 +-0.0628947 0.161497 -0.0505862 0.790998 0.5 +-0.0627087 0.161508 -0.0465953 0.536452 0.5 +-0.0675666 0.163787 -0.0559757 0.4204 0.294178 +-0.0626379 0.152126 -0.0285986 0.503212 0.478245 +-0.0613674 0.169388 -0.0565896 0.423503 0.5 +-0.0486888 0.138617 0.0104009 0.63839 0.5 +-0.0618725 0.160013 -0.0255862 0.427528 0.471582 +-0.0618529 0.153757 -0.0195806 0.62669 0.5 +-0.0616292 0.146031 -0.00460349 0.322387 0.5 +-0.0769756 0.068555 0.0156381 0.762204 0.292567 +-0.0931885 0.121553 0.0392843 0.640697 0.5 +-0.086179 0.107645 0.0083646 0.723959 0.5 +-0.048947 0.138616 0.00839947 0.541576 0.5 +-0.00919366 0.172678 -0.0237455 0.368455 0.44524 +-0.0782342 0.0694181 0.011104 0.701786 0.5 +-0.0893331 0.111939 0.012355 0.451447 0.45692 +-0.0491945 0.137084 0.0184007 0.613921 0.5 +-0.0489315 0.137078 0.0173942 0.593306 0.486414 +-0.052837 0.143168 0.022419 0.770862 0.5 +-0.0616908 0.156845 -0.0305919 0.490928 0.5 +-0.0617331 0.156868 -0.0205842 0.370867 0.5 +-0.06337 0.156813 -0.0136043 0.475928 0.5 +0.041276 0.104245 0.0131611 0.698114 0.5 +-0.0624555 0.163099 -0.0465902 0.404884 0.459604 +-0.094679 0.122825 0.0202733 0.624215 0.5 +-0.0793623 0.0739499 0.024599 0.809934 0.5 +-0.0359512 0.151053 -0.00163407 0.225483 0.5 +0.0417584 0.0971928 -0.00282344 0.499275 0.474504 +-0.0839655 0.111209 0.0317911 0.758126 0.5 +-0.0628372 0.172536 -0.0525874 0.578677 0.466157 +-0.0491537 0.135503 0.0034228 0.390718 0.46773 +-0.0631703 0.172516 -0.0516045 0.53271 0.5 +-0.0526002 0.146245 0.0194042 0.727744 0.39119 +0.0597099 0.0650292 0.0201784 0.578958 0.5 +0.0600686 0.0650603 0.0191749 0.571871 0.472983 +0.0603421 0.0650847 0.0181826 0.468146 0.5 +0.0605804 0.0651016 0.017176 0.563386 0.47147 +0.0607736 0.0651167 0.0161629 0.45584 0.5 +0.0608111 0.0651191 0.0151635 0.454404 0.473191 +0.0608755 0.0651235 0.0141559 0.447357 0.478762 +0.0609018 0.0651278 0.0131549 0.454813 0.5 +0.0608929 0.0651253 0.0121512 0.45254 0.5 +0.060768 0.0651161 0.0111484 0.463583 0.443964 +0.0605435 0.0650981 0.0101416 0.451507 0.5 +0.0603039 0.0650788 0.0091381 0.471801 0.5 +0.0600369 0.0650499 0.00814341 0.419353 0.47958 +0.0597512 0.0650182 0.00715554 0.502335 0.5 +0.0593281 0.0649895 0.00613553 0.435876 0.488524 +0.0589446 0.0649523 0.0051412 0.437231 0.445735 +0.0585127 0.0649229 0.00410871 0.436993 0.5 +0.0580762 0.0648724 0.00314588 0.65077 0.5 +0.0574118 0.0647963 0.00219725 0.650267 0.5 +-0.085954 0.146023 0.00719275 0.583295 0.5 +-0.0850056 0.146006 0.00617966 0.578063 0.5 +-0.0870127 0.10633 0.011369 0.71696 0.5 +-0.0865455 0.109036 0.0123603 0.700129 0.345107 +-0.093028 0.117371 0.013308 0.524093 0.5 +-0.089472 0.092961 0.0204149 0.518169 0.5 +0.0407504 0.0633497 -0.00473671 0.332419 0.5 +0.0402874 0.063301 -0.00576463 0.391244 0.5 +0.0399096 0.0632641 -0.00677014 0.511651 0.5 +0.0395267 0.0632302 -0.00776648 0.468182 0.412828 +0.0391263 0.0631992 -0.00875738 0.522048 0.5 +0.0385298 0.0631329 -0.0097765 0.5525 0.5 +0.037815 0.0630498 -0.0108066 0.605203 0.5 +0.0371109 0.0630101 -0.0117592 0.611435 0.5 +0.0360211 0.0628935 -0.0127986 0.656433 0.5 +0.0350456 0.0627954 -0.0138277 0.663586 0.5 +0.0344395 0.062733 -0.0148459 0.657016 0.5 +0.0338754 0.0626989 -0.015804 0.646731 0.5 +0.0330982 0.0626311 -0.0167961 0.640741 0.5 +0.032428 0.0625798 -0.0177725 0.657872 0.5 +0.0314312 0.0625198 -0.0186445 0.672704 0.5 +0.0294467 0.0623083 -0.0198501 0.710796 0.5 +0.0285202 0.0622348 -0.0207982 0.752591 0.5 +0.0275233 0.0621538 -0.0218174 0.767102 0.5 +-0.092876 0.129604 0.0142376 0.771729 0.5 +-0.0818638 0.147313 0.00119815 0.418967 0.5 +-0.0903736 0.13787 0.0221843 0.709239 0.5 +-0.0897153 0.135171 0.0332079 0.588332 0.473105 +-0.0864494 0.107673 0.0113573 0.69369 0.5 +-0.0938278 0.128299 0.0222532 0.588911 0.5 +-0.0935248 0.128245 0.016248 0.768163 0.5 +0.044641 0.0945606 0.00417916 0.57455 0.5 +-0.092918 0.118828 0.0342968 0.582513 0.5 +-0.0913132 0.113305 0.0163255 0.64194 0.5 +-0.0913588 0.113353 0.0143394 0.545389 0.5 +-0.081976 0.138997 -0.000769762 0.652578 0.5 +0.0203578 0.0985304 -0.0223097 0.600381 0.5 +-0.0935435 0.118764 0.0233045 0.789502 0.5 +-0.0624498 0.166273 -0.0455815 0.481258 0.414324 +-0.0942308 0.126903 0.0192529 0.800757 0.5 +-0.010049 0.165099 -0.0207588 0.191875 0.5 +-0.0627531 0.161513 -0.0475897 0.752712 0.5 +-0.0626588 0.161511 -0.0455953 0.421235 0.451761 +-0.0552881 0.147721 0.0283494 0.613541 0.5 +-0.0625817 0.159955 -0.0415973 0.734254 0.5 +-0.0617319 0.160008 -0.0275856 0.383457 0.424927 +-0.0619701 0.160031 -0.0245798 0.434639 0.5 +-0.0621336 0.16002 -0.0235787 0.567161 0.5 +-0.0618471 0.153751 -0.0215773 0.664209 0.5 +-0.0607772 0.146055 -0.00361746 0.39443 0.5 +-0.0771466 0.113816 0.049094 0.491224 0.453976 +-0.0897739 0.137922 0.033196 0.608909 0.5 +0.0447988 0.0903457 0.000177034 0.504544 0.5 +0.0319929 0.088146 -0.0193446 0.740422 0.5 +-0.0918355 0.118761 0.0292947 0.643012 0.5 +-0.0758074 0.0766216 0.033593 0.744646 0.5 +0.0399293 0.104183 0.0231644 0.520942 0.490847 +-0.0721186 0.0637108 0.0173676 0.579692 0.5 +-0.0486891 0.137066 0.0163891 0.595154 0.489054 +-0.052704 0.143169 0.0214165 0.765243 0.5 +-0.0624967 0.149081 -0.013576 0.41432 0.467721 +-0.061875 0.156868 -0.0195857 0.454904 0.5 +0.0449905 0.0917771 0.0161555 0.543265 0.5 +0.0430064 0.0930319 -0.00281527 0.600393 0.405817 +-0.0828359 0.104706 -0.00261356 0.354692 0.5 +-0.0478194 0.135564 0.0104014 0.510898 0.5 +-0.0616144 0.155309 -0.0245851 0.675435 0.5 +-0.0757064 0.112028 0.0472849 0.35358 0.453897 +-0.0622893 0.15065 -0.0135783 0.444536 0.465134 +-0.0409029 0.149467 0.00342301 0.253205 0.5 +-0.0763652 0.1528 -0.0108857 0.732168 0.5 +-0.050851 0.138527 0.021367 0.634628 0.5 +-0.0504949 0.138575 0.0203939 0.632903 0.5 +0.0441946 0.0874765 -0.00278813 0.493411 0.5 +0.0594927 0.066407 0.020186 0.518106 0.482139 +0.0598501 0.0664357 0.0191799 0.506167 0.479964 +0.0601731 0.0664558 0.0181654 0.497426 0.467689 +0.060413 0.0664733 0.017165 0.427486 0.478306 +0.0605561 0.0664891 0.0161665 0.481809 0.477239 +0.0606816 0.0664976 0.015162 0.460514 0.475142 +0.0607002 0.0665033 0.01416 0.456193 0.5 +0.0607552 0.0664989 0.0131533 0.463838 0.5 +0.0606695 0.0664968 0.0121468 0.464666 0.5 +0.0605358 0.0664822 0.0111446 0.462128 0.5 +0.060304 0.0664655 0.0101406 0.46929 0.5 +0.0600635 0.0664445 0.00913698 0.480542 0.5 +0.05973 0.0664208 0.00812497 0.496014 0.478544 +0.0594367 0.0663847 0.00713811 0.492351 0.5 +0.0590795 0.0663557 0.00613696 0.501313 0.5 +0.0587114 0.0663183 0.00513779 0.422503 0.453223 +0.0583506 0.0662943 0.00413175 0.393897 0.5 +0.0578361 0.0662412 0.00314493 0.483262 0.5 +-0.0787914 0.14589 -0.00282549 0.452269 0.5 +-0.0902934 0.147439 0.0121579 0.412818 0.441986 +-0.0871517 0.106348 0.0123653 0.738551 0.5 +-0.0862013 0.10903 0.0113533 0.640104 0.5 +-0.0904236 0.116034 0.0273085 0.663059 0.5 +-0.0903526 0.116014 0.0283099 0.522719 0.5 +-0.0717098 0.161007 -0.0419418 0.496723 0.5 +0.0410795 0.0647663 -0.00478377 0.507469 0.5 +0.0406946 0.0647331 -0.00578164 0.493657 0.5 +0.0404164 0.0647148 -0.00677085 0.586655 0.5 +0.0400167 0.0646852 -0.00776271 0.471015 0.5 +0.0395163 0.0646366 -0.0087647 0.549114 0.5 +0.0388727 0.0645792 -0.00975725 0.582326 0.5 +0.0381646 0.0644978 -0.0107883 0.597968 0.5 +0.0374992 0.0644481 -0.0117672 0.621644 0.5 +0.0364959 0.064355 -0.0127735 0.669302 0.5 +0.0354946 0.0642547 -0.0137843 0.669427 0.418864 +0.0347681 0.0641816 -0.0148052 0.65821 0.39016 +0.0341358 0.0641297 -0.0158137 0.657435 0.5 +0.0333657 0.0640658 -0.0168115 0.654648 0.5 +0.032684 0.0640121 -0.0177767 0.677332 0.5 +0.0317217 0.0639399 -0.0186866 0.708156 0.5 +0.0292435 0.0637114 -0.0199317 0.743712 0.5 +0.0282585 0.063629 -0.0207965 0.764085 0.5 +-0.0816965 0.144555 0.000152955 0.624526 0.5 +-0.0728966 0.155445 -0.0329107 0.7321 0.5 +-0.0823675 0.147331 0.00217458 0.456016 0.5 +-0.0404457 0.119913 -0.0128413 0.670847 0.5 +-0.0900211 0.137875 0.0231818 0.694911 0.5 +-0.088578 0.151544 0.0220955 0.281214 0.5 +-0.0862104 0.107661 0.0103578 0.724414 0.5 +-0.0789879 0.13894 -0.00474105 0.651244 0.5 +-0.0719092 0.180772 -0.055937 0.217889 0.39694 +-0.0899881 0.118599 0.00429898 0.34384 0.467835 +-0.093011 0.118839 0.0352993 0.604356 0.439413 +-0.091323 0.113292 0.0153266 0.576788 0.5 +0.0138426 0.11139 -0.0180298 0.539267 0.5 +-0.00436077 0.12603 -0.00766771 0.516883 0.5 +-0.0197383 0.108898 -0.0213322 0.624279 0.5 +-0.0868944 0.122556 -0.00173403 0.501688 0.473151 +-0.0623619 0.166253 -0.047591 0.411049 0.5 +0.0450177 0.0875447 0.000184881 0.540075 0.5 +-0.0624633 0.170945 -0.051605 0.555973 0.5 +-0.0628376 0.161493 -0.0485893 0.775807 0.5 +-0.0618303 0.167813 -0.0535931 0.448941 0.5 +-0.0350329 0.037518 0.0477355 0.546061 0.5 +-0.0786005 0.174957 -0.0470491 0.260646 0.383695 +-0.0870246 0.129415 0.000309032 0.645738 0.5 +-0.0843481 0.145997 0.00513587 0.608851 0.5 +-0.0618485 0.153752 -0.0205795 0.651483 0.5 +-0.0618449 0.153748 -0.0225793 0.690103 0.5 +-0.02429 0.121354 -0.00839434 0.436622 0.5 +-0.0596536 0.0350995 0.0445384 0.785006 0.5 +-0.0861323 0.103534 0.00440203 0.518003 0.5 +-0.0863242 0.111849 0.0243217 0.670457 0.360378 +-0.0897135 0.12265 0.00431103 0.469948 0.5 +0.0215374 0.086463 -0.0256391 0.735721 0.5 +-0.091127 0.143391 0.0261688 0.705022 0.5 +-0.0896974 0.137929 0.0351902 0.633144 0.5 +-0.0713436 0.0632651 0.0179295 0.525034 0.394459 +-0.048519 0.137086 0.0153953 0.784327 0.5 +-0.0497252 0.137033 0.00342407 0.444681 0.470316 +-0.0625403 0.149101 -0.00657536 0.274275 0.5 +-0.0625222 0.149113 -0.00558111 0.283098 0.426219 +-0.0524843 0.150872 0.017395 0.678119 0.5 +-0.0616338 0.0739295 0.0406212 0.583884 0.5 +-0.060807 0.170968 -0.0607383 0.330327 0.41059 +-0.089989 0.142041 0.0291697 0.571759 0.478102 +0.0454091 0.0918015 0.00517469 0.558681 0.5 +-0.0507589 0.144713 0.0133585 0.536093 0.5 +-0.00964827 0.166616 -0.0197629 0.287972 0.5 +-0.0622964 0.150648 -0.0145762 0.456238 0.5 +-0.0624206 0.150641 -0.0155752 0.669544 0.5 +-0.0681397 0.0738079 0.0376094 0.585674 0.5 +-0.0762076 0.0680671 0.0162505 0.564026 0.5 +-0.0619782 0.15683 -0.0335967 0.543339 0.5 +0.059075 0.0677442 0.0201625 0.512356 0.5 +0.0594437 0.0677773 0.0191638 0.628414 0.5 +0.0597202 0.067814 0.0181758 0.621287 0.5 +0.0599615 0.0678313 0.0171716 0.608535 0.5 +0.0602499 0.0678328 0.0161531 0.513118 0.5 +0.060415 0.0678562 0.0151973 0.439667 0.449428 +0.0604451 0.0678689 0.0141533 0.494491 0.389428 +0.0604235 0.0678625 0.0131519 0.481165 0.5 +0.0603302 0.0678632 0.0121432 0.486713 0.5 +0.0601999 0.0678503 0.0111396 0.483528 0.5 +0.060054 0.0678303 0.0101401 0.428491 0.475357 +0.0597965 0.0678036 0.00914167 0.431722 0.480811 +0.0594691 0.0677866 0.0081304 0.43122 0.5 +0.0591059 0.0677548 0.00712748 0.502365 0.5 +0.0588047 0.0677091 0.00614939 0.388595 0.458211 +0.0583737 0.0676977 0.00512132 0.385578 0.5 +0.0579573 0.0676391 0.00414749 0.442401 0.5 +-0.069363 0.163799 -0.0509746 0.507172 0.425574 +-0.0737025 0.144377 -0.00986626 0.219727 0.5 +-0.09225 0.125605 0.0402535 0.608695 0.5 +-0.0886572 0.111878 0.019323 0.70484 0.35637 +-0.0378805 0.108506 -0.019759 0.689547 0.5 +-0.0907184 0.115992 0.0263684 0.712117 0.5 +0.0421932 0.0662609 -0.00283376 0.400123 0.5 +0.0417187 0.066227 -0.00378154 0.367386 0.446541 +0.0413114 0.0661977 -0.00477755 0.539648 0.5 +0.0411176 0.0661976 -0.00575682 0.622611 0.410323 +0.0407967 0.0661529 -0.00677209 0.611125 0.41748 +0.0404048 0.0661215 -0.00776758 0.661851 0.5 +0.0398123 0.066053 -0.00878746 0.556325 0.5 +0.0392908 0.0660103 -0.00977956 0.57749 0.5 +0.0387498 0.0659721 -0.0107606 0.59767 0.415788 +0.0381172 0.0659142 -0.0117557 0.608024 0.5 +0.0372578 0.0658262 -0.0127785 0.645736 0.5 +0.0362974 0.0657667 -0.0137187 0.694388 0.5 +0.0352496 0.0656442 -0.0147977 0.674553 0.5 +0.0344134 0.0655586 -0.0158419 0.686126 0.5 +0.0337176 0.0655129 -0.0167917 0.684285 0.5 +0.0328144 0.0654355 -0.0177831 0.712253 0.5 +0.031763 0.0653471 -0.018741 0.722277 0.5 +0.0289004 0.0650837 -0.0199869 0.779164 0.5 +0.0278158 0.0649933 -0.0208789 0.758366 0.5 +0.0270423 0.0648893 -0.0216756 0.751519 0.5 +0.0255963 0.0648009 -0.0228004 0.723219 0.5 +-0.0331172 0.123673 -0.00477506 0.647429 0.5 +-0.062769 0.175495 -0.0615699 0.43069 0.5 +-0.0357951 0.124657 -0.0058294 0.57014 0.467813 +-0.0707687 0.155356 -0.0469258 0.29179 0.457421 +-0.0861823 0.107654 0.00936346 0.742276 0.5 +-0.0921162 0.126957 0.038246 0.81737 0.5 +-0.0931674 0.126844 0.0122586 0.672962 0.5 +-0.0905225 0.118622 0.0053153 0.440399 0.383356 +-0.0930341 0.118841 0.0362969 0.63877 0.5 +-0.0924063 0.129578 0.0112381 0.432982 0.472725 +-0.0283024 0.0362399 -0.0299084 0.410891 0.5 +-0.093138 0.120057 0.0112982 0.411389 0.463667 +0.0376148 0.100847 -0.00874384 0.599048 0.5 +-0.0685057 0.159542 -0.0539539 0.347424 0.36773 +-0.0622192 0.166249 -0.0495907 0.388309 0.466968 +-0.0623474 0.166249 -0.0485903 0.388427 0.456733 +-0.0627193 0.152197 -0.01058 0.333982 0.5 +0.0445653 0.094573 0.0151616 0.544411 0.5 +-0.0616692 0.167812 -0.0545903 0.453023 0.5 +-0.0625367 0.161521 -0.0446005 0.410425 0.443322 +-0.0895837 0.137934 0.0361877 0.634664 0.5 +-0.0447475 0.146272 0.00240034 0.246837 0.5 +-0.0506725 0.0667938 0.036819 0.834861 0.5 +-0.0716693 0.147461 -0.0281971 0.325269 0.407135 +-0.0733924 0.0656461 0.018954 0.681537 0.5 +-0.0178004 0.121647 -0.00876548 0.746484 0.5 +-0.0244946 0.0357757 0.0532784 0.554328 0.5 +-0.0329051 0.0359381 0.0496011 0.466377 0.5 +-0.0521695 0.144678 0.0173655 0.785935 0.5 +-0.0623389 0.163139 -0.0325913 0.647433 0.5 +0.0410596 0.104249 0.0151631 0.700347 0.5 +-0.00158589 0.110252 -0.0207823 0.68768 0.5 +0.0452758 0.0875665 0.00218329 0.468856 0.5 +-0.00876131 0.174216 -0.0276966 0.2662 0.352104 +-0.0752039 0.0696978 0.0256249 0.721843 0.361863 +-0.0501179 0.137029 0.00241503 0.413799 0.5 +-0.0506864 0.137014 0.00141591 0.566994 0.5 +-0.00977222 0.11683 -0.0157853 0.62651 0.5 +-0.0756514 0.0743685 0.0320217 0.707013 0.5 +-0.0688541 0.147497 -0.029579 0.322588 0.195946 +-0.0892328 0.114145 0.0245988 0.702106 0.5 +-0.0499497 0.0724883 0.0409516 0.697327 0.364039 +-0.0625466 0.16468 -0.0375945 0.531364 0.5 +-0.0498374 0.138571 0.0183794 0.621492 0.481876 +-0.0621883 0.177235 -0.0596222 0.331893 0.5 +-0.0325574 0.126601 0.00788172 0.891704 0.5 +-0.0623836 0.163119 -0.0315939 0.664571 0.5 +-0.0727909 0.0685075 0.0271607 0.656727 0.5 +-0.0311459 0.0354418 0.0504241 0.589301 0.420393 +-0.065976 0.0624665 0.0232686 0.34605 0.458942 +-0.0778526 0.159695 -0.0239243 0.409648 0.462102 +0.0588289 0.0691072 0.0191593 0.543474 0.5 +0.0590657 0.0691634 0.0182335 0.554241 0.5 +0.0593699 0.0691831 0.0171767 0.605691 0.5 +0.0596647 0.0691741 0.016158 0.521225 0.445513 +0.0599111 0.0692057 0.0151972 0.452353 0.47042 +0.0599479 0.0692188 0.0141571 0.527037 0.5 +0.0599383 0.0692126 0.0131498 0.516521 0.474553 +0.0598509 0.0692231 0.0121425 0.510733 0.5 +0.059734 0.0692161 0.0111359 0.476002 0.463443 +0.0595736 0.0691817 0.0101411 0.490236 0.5 +0.0593141 0.0691549 0.00914325 0.413909 0.481162 +0.058968 0.0691324 0.00813536 0.479832 0.479512 +0.0586666 0.0690768 0.00715872 0.396109 0.5 +0.0582293 0.0690671 0.00613614 0.430972 0.5 +-0.0847301 0.0966436 -0.00257686 0.402976 0.5 +-0.0890756 0.0982905 0.00941744 0.541381 0.477315 +-0.000674255 0.10997 -0.0204918 0.747029 0.5 +-0.0750751 0.149943 -0.025867 0.331486 0.5 +-0.0616586 0.172539 -0.056588 0.496739 0.5 +-0.0838768 0.108986 0.0253683 0.526004 0.5 +-0.0846088 0.10754 0.00337493 0.464458 0.388819 +0.0428284 0.0676747 -0.00179274 0.390428 0.45538 +0.0423783 0.0676875 -0.00279832 0.532814 0.5 +0.0420557 0.0676716 -0.00377172 0.55545 0.5 +0.0417415 0.0676611 -0.00475281 0.62665 0.397669 +0.0414338 0.0676164 -0.00577635 0.633997 0.397692 +0.041165 0.0675922 -0.00677134 0.701656 0.5 +0.0407755 0.0675587 -0.00776366 0.554897 0.5 +0.0401757 0.067497 -0.00878165 0.577152 0.5 +0.0396853 0.0674479 -0.00978879 0.587581 0.454153 +0.0391881 0.0673984 -0.0107969 0.602199 0.5 +0.0386173 0.0673644 -0.0117551 0.630475 0.5 +0.0377774 0.0672774 -0.012792 0.677362 0.5 +0.0368588 0.0672041 -0.0137655 0.718518 0.5 +0.0357587 0.067099 -0.014806 0.727409 0.5 +0.0347467 0.0670098 -0.0158076 0.731043 0.5 +0.0339284 0.0669478 -0.0167571 0.7275 0.5 +0.0329063 0.0668566 -0.0177475 0.761108 0.5 +0.0317419 0.0667553 -0.0187125 0.756776 0.5 +0.0289846 0.0664902 -0.0199255 0.738276 0.5 +0.0282217 0.0664463 -0.0207545 0.732228 0.5 +0.02743 0.0663837 -0.0217206 0.715454 0.5 +0.0264606 0.0663192 -0.0226274 0.705727 0.5 +-0.0564227 0.125779 -0.00685719 0.695681 0.5 +0.0198172 0.102563 -0.0205962 0.610227 0.5 +-0.0415646 0.125825 -0.00703356 0.525469 0.444948 +-0.0302927 0.117007 -0.0138211 0.807374 0.5 +0.0256941 0.120543 -0.00190068 0.791441 0.5 +-0.0858928 0.108988 0.00834067 0.460157 0.5 +-0.0909761 0.118636 0.00631645 0.426339 0.5 +-0.0930791 0.118839 0.037294 0.637755 0.5 +-0.0915391 0.118654 0.00731945 0.416554 0.444085 +-0.0920088 0.118668 0.00830639 0.425196 0.5 +-0.0924079 0.114699 0.0153245 0.590792 0.5 +-0.0934649 0.120072 0.0123034 0.443931 0.463271 +0.0389827 0.104151 0.026189 0.524791 0.5 +-0.0889514 0.121274 0.00229944 0.482507 0.5 +-0.048864 0.162635 -0.0057974 0.352072 0.5 +-0.0750897 0.149941 -0.0248696 0.340828 0.5 +-0.0624226 0.152205 -0.0125757 0.33511 0.5 +-0.0624554 0.1522 -0.0115838 0.357057 0.428092 +0.0438051 0.0987511 0.0101628 0.580242 0.5 +-0.0623435 0.161536 -0.0425937 0.392534 0.5 +-0.073147 0.0648981 0.0178865 0.644903 0.5 +-0.0624944 0.145991 -0.00758108 0.45743 0.466287 +-0.0450098 0.146255 0.00342574 0.197508 0.5 +-0.0508226 0.162642 -0.00385759 0.312044 0.5 +-0.0726712 0.0651053 0.0195713 0.51486 0.477339 +-0.0490908 0.140152 0.0103957 0.609668 0.5 +-0.0491744 0.14016 0.00939463 0.557684 0.5 +-0.0771179 0.165222 -0.035974 0.377407 0.330769 +-0.0828817 0.143196 0.00216401 0.585492 0.5 +-0.0617323 0.155315 -0.018581 0.398967 0.5 +-0.0939826 0.118759 0.0192971 0.676339 0.5 +-0.0544221 0.144671 0.0284168 0.672922 0.5 +0.0427418 0.0916392 0.0261768 0.638045 0.5 +-0.0892569 0.122633 0.00330914 0.471385 0.454295 +-0.0530923 0.143138 0.0243879 0.594582 0.5 +-0.052454 0.13854 0.0254099 0.590675 0.477949 +-0.0482154 0.137103 0.0123981 0.746224 0.5 +-0.0512856 0.136981 0.000438627 0.619399 0.5 +-0.0527854 0.146248 0.0203946 0.579294 0.378614 +-0.0489654 0.138607 0.014392 0.582395 0.489284 +-0.0488087 0.138617 0.0133952 0.748612 0.5 +-0.0620479 0.155306 -0.016587 0.400908 0.5 +-0.0733982 0.114573 0.051125 0.488882 0.5 +-0.0723621 0.114661 0.051285 0.475864 0.5 +-0.0605969 0.06056 0.0225173 0.572584 0.42449 +-0.0622192 0.17721 -0.0606003 0.260745 0.5 +0.0454193 0.0875784 0.00318139 0.486308 0.448975 +-0.00894653 0.174179 -0.0257648 0.320038 0.466549 +-0.0638458 0.0366675 0.0422565 0.470407 0.5 +-0.0162218 0.186444 -0.0207352 0.286472 0.462627 +-0.0336555 0.0363317 0.0490618 0.441419 0.5 +-0.0699437 0.0669048 0.0273786 0.594771 0.5 +-0.0624573 0.163073 -0.0525854 0.77028 0.5 +0.0433566 0.094461 -0.000803958 0.502854 0.5 +0.0429729 0.0944315 -0.00180352 0.614342 0.5 +0.0588348 0.0704992 0.0161593 0.446611 0.5 +0.0591083 0.0705376 0.015147 0.462222 0.480193 +0.0591153 0.0705615 0.014025 0.5822 0.5 +0.059153 0.0704954 0.0131546 0.598191 0.5 +-0.0909699 0.113313 0.018324 0.688215 0.5 +0.0410937 0.100015 0.0241739 0.519174 0.458106 +0.0418577 0.100066 0.0211691 0.665084 0.441876 +0.042064 0.10006 0.0201605 0.67088 0.5 +0.0581094 0.0704417 0.00814168 0.473522 0.458997 +0.0577041 0.0703778 0.00716237 0.573867 0.5 +0.0416143 0.102832 0.00217563 0.519662 0.5 +0.0419622 0.102841 0.00417469 0.634785 0.5 +-0.0347028 0.122731 -0.00776716 0.432969 0.5 +-0.0793237 0.108591 -0.00458021 0.528357 0.5 +-0.0825172 0.108952 0.0273498 0.457019 0.5 +-0.0832597 0.10897 0.0263609 0.463339 0.5 +-0.0859599 0.106341 0.0203569 0.61331 0.5 +0.0433932 0.0691823 -0.000799598 0.391185 0.5 +0.0429858 0.0691484 -0.00178958 0.415628 0.467472 +0.0426227 0.0691122 -0.00279622 0.534223 0.5 +0.0423451 0.0690926 -0.00378897 0.624993 0.5 +0.0421 0.0690665 -0.00478535 0.633303 0.404159 +0.0418422 0.0690449 -0.00578965 0.693043 0.5 +0.0415397 0.0690275 -0.00677 0.706551 0.5 +0.0410434 0.0689808 -0.00777311 0.574568 0.5 +0.0404535 0.0689201 -0.00879299 0.591291 0.5 +0.0399488 0.0688733 -0.0097971 0.612759 0.5 +0.0394368 0.0688303 -0.0107955 0.630659 0.5 +0.0388034 0.0687739 -0.0117998 0.683601 0.5 +0.0380126 0.0687088 -0.0127776 0.722628 0.5 +0.0369946 0.0686204 -0.0137746 0.755137 0.5 +0.0359934 0.0685324 -0.0147875 0.74699 0.5 +0.0349752 0.0684447 -0.0157877 0.753196 0.5 +0.0339501 0.0683557 -0.0167775 0.755681 0.5 +0.0328041 0.0682575 -0.0177764 0.752105 0.5 +0.03144 0.0681325 -0.0188162 0.761897 0.5 +0.0296786 0.0679688 -0.0198342 0.724151 0.5 +0.0289606 0.0679277 -0.0207366 0.701199 0.5 +0.0280724 0.0678498 -0.0217391 0.688134 0.5 +0.0271486 0.0677873 -0.0226945 0.709453 0.5 +-0.0259227 0.123138 -0.0042558 0.553287 0.475726 +-0.006336 0.10011 -0.0240468 0.731824 0.5 +0.02297 0.122414 -0.00191144 0.601616 0.408534 +-0.0425873 0.125894 -0.0070983 0.537056 0.440026 +-0.0897848 0.135174 0.0342114 0.600964 0.5 +-0.0855435 0.108961 0.00733555 0.448525 0.463414 +0.0215589 0.120837 -0.00625561 0.592049 0.5 +-0.0930613 0.118852 0.0392987 0.703412 0.5 +-0.0887132 0.118572 0.00232339 0.658716 0.5 +-0.0756134 0.163772 -0.0350068 0.403252 0.5 +-0.0936604 0.128255 0.0172452 0.773313 0.5 +-0.0936226 0.120076 0.0132919 0.483415 0.452354 +-0.00952557 0.169814 -0.0256004 0.383097 0.5 +-0.088594 0.121257 0.00130017 0.487085 0.344778 +-0.0881544 0.121251 0.000301062 0.67682 0.5 +-0.0634329 0.159891 -0.0505847 0.695055 0.5 +-0.0623581 0.164692 -0.0425931 0.455188 0.5 +-0.0621574 0.152203 -0.016578 0.621985 0.5 +-0.0393802 0.149525 0.00137589 0.234325 0.5 +-0.0624348 0.161527 -0.0435948 0.412586 0.5 +0.0446233 0.0903218 -0.000806954 0.621939 0.5 +-0.0774975 0.111156 0.045792 0.472053 0.5 +-0.092535 0.126933 0.0292581 0.649788 0.5 +-0.0627683 0.164709 -0.0355885 0.542876 0.483334 +-0.0617814 0.16156 -0.0355923 0.444328 0.5 +-0.0696054 0.110911 0.0424293 0.698935 0.5 +-0.0492135 0.140151 0.00839688 0.521842 0.5 +-0.0633454 0.159973 -0.0185957 0.463693 0.5 +-0.0308705 0.0385373 -0.0301935 0.413461 0.5 +-0.0913214 0.114759 0.0373166 0.550993 0.5 +-0.0617079 0.155317 -0.0205813 0.351739 0.461364 +-0.0625714 0.164724 -0.0395894 0.510704 0.477114 +-0.0483594 0.137097 0.0143972 0.769969 0.5 +-0.0792849 0.109686 0.041215 0.915541 0.5 +-0.0625363 0.158377 -0.0386027 0.431015 0.459236 +-0.0922682 0.12272 0.00827864 0.544613 0.5 +-0.0391114 0.149509 -0.00165293 0.297332 0.5 +-0.0626545 0.150596 -0.0225786 0.710188 0.5 +-0.0630601 0.155204 -0.0366146 0.574527 0.5 +-0.0654107 0.0782591 0.0414837 0.601135 0.5 +-0.0526872 0.144684 0.0193835 0.74481 0.5 +-0.0493817 0.138599 0.0163919 0.603108 0.5 +-0.049646 0.138599 0.0173958 0.607319 0.486 +-0.0797776 0.115912 0.0485816 0.816634 0.5 +-0.0466625 0.12523 -0.00836412 0.572451 0.5 +-0.0825526 0.110518 0.0415894 0.931001 0.5 +-0.00975768 0.167025 -0.0223761 0.277121 0.174049 +0.0415402 0.0928967 -0.0067838 0.482714 0.5 +-0.0511539 0.144707 0.0143676 0.542188 0.5 +-0.0100477 0.178214 -0.0295899 0.294416 0.5 +-0.0889738 0.137888 0.0281941 0.821981 0.5 +-0.0804035 0.0745659 0.0220984 0.764743 0.5 +-0.0620154 0.164635 -0.0555847 0.641225 0.5 +-0.0100488 0.177211 -0.0257537 0.428605 0.421867 +-0.0627985 0.161541 -0.0235962 0.625127 0.5 +-0.0873725 0.140519 0.00919988 0.542642 0.5 +-0.0745653 0.158254 -0.0269305 0.329741 0.407876 +-0.0622081 0.163133 -0.0355907 0.482829 0.389815 +-0.048186 0.135579 0.00839494 0.515806 0.5 +-0.0540131 0.144678 0.0264098 0.714762 0.5 +0.0407264 0.0999947 0.0251764 0.63345 0.5 +-0.0872126 0.146051 0.00824907 0.618896 0.5 +0.0373688 0.102607 -0.00785264 0.600114 0.5 +0.0383356 0.10264 -0.0058258 0.491231 0.5 +0.0401633 0.102703 -0.00178896 0.57396 0.5 +0.0409984 0.102803 0.000176721 0.554381 0.480479 +-0.0895701 0.151478 0.0161361 0.209794 0.5 +-0.0888501 0.102361 0.0153809 0.827851 0.5 +-0.0865431 0.106355 0.0183534 0.61327 0.5 +-0.0861037 0.109061 0.0193453 0.55707 0.5 +-0.0871093 0.106357 0.0153576 0.811932 0.5 +-0.0869351 0.106366 0.0163624 0.827022 0.5 +-0.0894763 0.140666 0.0321759 0.624264 0.46301 +0.0435889 0.0706095 -0.000776861 0.413455 0.5 +0.043249 0.0705728 -0.00179391 0.539429 0.5 +0.0430009 0.0705508 -0.00279727 0.617938 0.5 +0.042717 0.0705281 -0.00378792 0.622379 0.5 +0.0423965 0.0704871 -0.00480867 0.701227 0.5 +0.0421291 0.070468 -0.00580336 0.711287 0.5 +0.0417289 0.0704356 -0.00679567 0.580878 0.5 +0.0412244 0.0703917 -0.00779979 0.60594 0.5 +0.04069 0.0703475 -0.0087868 0.616034 0.453423 +0.0400896 0.0702922 -0.00980716 0.644052 0.5 +0.0395569 0.0702481 -0.0107925 0.676737 0.5 +0.0387854 0.0701818 -0.0117862 0.701485 0.5 +0.0378045 0.0701003 -0.0128173 0.72909 0.5 +0.0367682 0.0700097 -0.0138015 0.746403 0.5 +0.0357939 0.0699287 -0.0148404 0.738975 0.5 +0.0349018 0.0698502 -0.0158378 0.761638 0.5 +0.0339669 0.0697663 -0.0167955 0.767412 0.5 +0.0328915 0.0696754 -0.0177356 0.756836 0.5 +0.0314095 0.0695437 -0.0187779 0.748217 0.5 +0.0302998 0.0694384 -0.019812 0.727235 0.5 +0.0296062 0.0693912 -0.0207509 0.688578 0.5 +0.028746 0.0693043 -0.0217828 0.697208 0.5 +0.0277802 0.0692504 -0.0226951 0.71908 0.5 +0.0134367 0.121611 -0.0110511 0.479991 0.484444 +-0.0291541 0.123106 -0.00418201 0.823295 0.5 +-0.0301817 0.12316 -0.0042413 0.553721 0.475017 +-0.0855936 0.143251 0.00719107 0.553067 0.5 +-0.0933214 0.129622 0.0172404 0.749019 0.5 +-0.0863354 0.129395 -0.000699295 0.639314 0.5 +-0.0853889 0.108959 0.00634578 0.433872 0.448175 +-0.084898 0.11701 -0.000772283 0.530131 0.5 +-0.0931447 0.118854 0.0382959 0.654567 0.5 +-0.0894143 0.118584 0.00330542 0.655938 0.5 +-0.0940603 0.120098 0.0152926 0.54962 0.5 +-0.0939163 0.120093 0.0142993 0.500646 0.5 +-0.0624367 0.153758 -0.0135798 0.439436 0.461626 +-0.0898534 0.121302 0.00430136 0.462334 0.5 +-0.0894985 0.121276 0.00330358 0.476824 0.369967 +-0.0620333 0.153738 -0.0275809 0.794501 0.5 +-0.0621975 0.166246 -0.0505873 0.371333 0.480655 +-0.0759482 0.152671 -0.0129066 0.498424 0.264557 +-0.0690953 0.0751628 0.0379926 0.603699 0.5 +-0.062327 0.161572 -0.0265871 0.620031 0.5 +-0.0630898 0.161515 -0.0224551 0.617509 0.5 +-0.0109396 0.165104 -0.0156606 0.265949 0.5 +-0.0276364 0.0917699 -0.0296042 0.303012 0.5 +-0.0321324 0.154142 -0.000565596 0.339204 0.392907 +-0.0786622 0.0733343 0.0252726 0.804825 0.5 +-0.0493972 0.140141 0.00739907 0.391888 0.5 +-0.0492762 0.143079 0.00435473 0.351545 0.5 +-0.0310964 0.160762 -0.0139612 0.848087 0.5 +-0.0927165 0.117489 0.0383035 0.667547 0.5 +-0.0384168 0.120732 -0.0116964 0.617357 0.5 +-0.089592 0.111931 0.0163329 0.56493 0.5 +-0.0749354 0.108383 0.0378851 0.769887 0.5 +-0.0700187 0.074071 0.0369567 0.572904 0.455027 +0.0425651 0.10009 0.017161 0.566551 0.5 +-0.0543014 0.146215 0.0264084 0.710439 0.5 +-0.0390844 0.149487 -0.000628748 0.250769 0.5 +-0.00995367 0.16681 -0.0217203 0.297613 0.5 +-0.0733601 0.156855 -0.0299134 0.640327 0.5 +-0.0570854 0.136926 -0.00500822 0.666916 0.5 +-0.0488259 0.138613 0.00940263 0.590087 0.5 +-0.0625358 0.155244 -0.0346054 0.583172 0.476863 +-0.0501104 0.138566 0.0193811 0.622568 0.5 +0.0451716 0.0889782 0.0181643 0.514864 0.5 +-0.0487458 0.123267 -0.0102852 0.695982 0.318826 +-0.0624159 0.15064 -0.016574 0.590292 0.5 +-0.00972794 0.166651 -0.0186764 0.230555 0.3888 +0.0451372 0.0875619 0.0011816 0.453991 0.412719 +0.0450662 0.0889731 0.0191643 0.499106 0.470652 +-0.089639 0.0983559 0.0164014 0.628386 0.5 +0.0453684 0.0889907 0.0151607 0.547114 0.452306 +-0.0514727 0.147804 0.0154008 0.694691 0.5 +-0.0496185 0.140151 0.0144011 0.745672 0.5 +0.0454221 0.0889974 0.0141646 0.564891 0.445656 +0.0445771 0.0875296 0.0231612 0.771506 0.5 +-0.0155474 0.160527 -0.0107791 0.198744 0.201892 +0.0404265 0.102791 0.0231613 0.631468 0.5 +0.0407433 0.102836 0.021176 0.660301 0.5 +-0.0841107 0.0938743 -0.00455389 0.389538 0.471952 +-0.0364114 0.175555 -0.00996795 0.326979 0.5 +-0.0894818 0.137913 0.0311948 0.565341 0.470605 +-0.0765583 0.148625 -0.00886956 0.652316 0.5 +-0.0915885 0.128321 0.0362439 0.820619 0.5 +-0.0777504 0.112676 -0.00382147 0.52193 0.470256 +0.0397669 0.0885289 -0.0117744 0.662593 0.5 +-0.0930152 0.116045 0.0163142 0.672685 0.5 +-0.0887855 0.102363 0.0143842 0.814521 0.5 +-0.0895811 0.137877 0.0241855 0.694291 0.5 +-0.0922724 0.125575 0.0332589 0.839517 0.5 +-0.0868724 0.106357 0.0173489 0.59655 0.481061 +-0.087237 0.106355 0.0143591 0.80992 0.5 +0.0446574 0.0720977 0.0012022 0.443298 0.5 +0.0441531 0.0720542 0.000197496 0.42465 0.5 +0.0437393 0.0720229 -0.000789276 0.548039 0.5 +0.0434944 0.0719976 -0.00179535 0.615673 0.390656 +0.0432611 0.071972 -0.00279979 0.487686 0.398138 +0.0429791 0.071952 -0.00379352 0.453655 0.460689 +0.0426284 0.0719164 -0.00480026 0.550156 0.481807 +0.0423416 0.0718943 -0.00578991 0.494988 0.5 +0.0418633 0.0718502 -0.00680416 0.511529 0.473919 +0.0413467 0.0718054 -0.00779903 0.638042 0.5 +0.0407806 0.0717592 -0.0087638 0.546244 0.484603 +0.0401652 0.0717052 -0.00977551 0.670547 0.5 +0.0394261 0.0716433 -0.0107927 0.695803 0.5 +0.0386477 0.0715748 -0.0117783 0.737215 0.5 +0.0375264 0.0714822 -0.0127977 0.740883 0.5 +0.0363865 0.0713868 -0.0138007 0.735173 0.5 +0.0355169 0.0713149 -0.0148173 0.743292 0.5 +0.0347214 0.0712416 -0.0157876 0.743622 0.5 +0.0338477 0.0711662 -0.016803 0.745694 0.5 +0.0329357 0.0710876 -0.0177809 0.767789 0.5 +0.0318609 0.0710037 -0.0187224 0.737287 0.395604 +0.0306903 0.0708797 -0.0198199 0.703167 0.5 +0.0300166 0.0708304 -0.0207823 0.708223 0.5 +0.0291436 0.0707502 -0.0218013 0.723381 0.5 +0.0282076 0.0706829 -0.0227535 0.751865 0.5 +0.012958 0.0904818 -0.0298536 0.595959 0.5 +0.0143759 0.121374 -0.0108038 0.504175 0.481981 +-0.0251636 0.119759 -0.0107128 0.64598 0.5 +-0.0701499 0.0695315 0.0320822 0.542519 0.5 +-0.0714649 0.159596 -0.0419316 0.517153 0.5 +-0.0797747 0.106127 0.0313842 0.507426 0.5 +-0.0866591 0.107689 0.0123597 0.751105 0.5 +-0.0737739 0.0878479 -0.0153893 0.415589 0.5 +-0.0928802 0.118867 0.0402859 0.750298 0.5 +-0.087769 0.118492 0.00124641 0.451463 0.5 +-0.0846424 0.139002 0.00130344 0.515842 0.5 +-0.0922485 0.120133 0.0292903 0.68161 0.5 +-0.0923422 0.120143 0.0302906 0.619217 0.5 +-0.0907748 0.12133 0.00629364 0.614616 0.5 +-0.0902987 0.121315 0.00530766 0.628997 0.5 +-0.016347 0.159993 -0.0102438 0.181323 0.145548 +-0.0620847 0.166243 -0.0515916 0.367329 0.5 +-0.0121936 0.163667 -0.0136225 0.249432 0.415687 +-0.0733885 0.111282 0.0466166 0.501686 0.5 +-0.0885594 0.112819 0.0222051 0.700317 0.5 +-0.0621482 0.16155 -0.0395978 0.430985 0.5 +-0.024832 0.0930098 -0.0316179 0.307491 0.5 +0.0429565 0.0986678 0.00218951 0.538213 0.5 +-0.0870553 0.118453 0.000244653 0.460586 0.295243 +-0.0310386 0.154131 -0.00157547 0.259552 0.377452 +-0.057289 0.0707546 0.0390509 0.660411 0.5 +-0.0495471 0.140136 0.00640196 0.48755 0.420475 +-0.0616651 0.174109 -0.0575903 0.601711 0.5 +-0.03015 0.171175 -0.0170282 0.458612 0.427251 +0.0449549 0.0889654 0.0201657 0.492118 0.476339 +-0.0857094 0.107615 0.00636703 0.473093 0.454362 +-0.0616196 0.156864 -0.0215888 0.37228 0.457497 +0.0423754 0.100105 0.0181719 0.699024 0.5 +0.0422118 0.100079 0.0191646 0.690241 0.5 +0.0427075 0.100107 0.0161639 0.692908 0.5 +-0.062465 0.163086 -0.0495893 0.50833 0.5 +-0.0946116 0.124177 0.0212718 0.6283 0.5 +0.045537 0.0890033 0.0131643 0.574681 0.441235 +-0.0898664 0.135182 0.0372006 0.633972 0.457764 +-0.0628566 0.145948 -0.0105775 0.41685 0.47052 +-0.0901978 0.11358 0.0212183 0.736194 0.5 +-0.0863431 0.112514 0.0302243 0.458966 0.397594 +-0.0643983 0.155173 -0.0416037 0.512668 0.5 +-0.0525878 0.149334 0.020403 0.698925 0.5 +-0.0528261 0.149337 0.0214103 0.711971 0.5 +-0.0624127 0.150637 -0.0175763 0.431028 0.479574 +-0.0625194 0.150622 -0.0185752 0.455006 0.481261 +-0.062529 0.150617 -0.0195776 0.472709 0.5 +-0.0622273 0.163125 -0.0345932 0.480226 0.475502 +0.0448141 0.0889533 0.0211601 0.486996 0.5 +-0.0528028 0.0666303 0.0365007 0.614129 0.5 +-0.0541353 0.147754 0.0254132 0.570304 0.384404 +0.0428254 0.0986969 0.0191637 0.672947 0.5 +-0.0107925 0.18028 -0.0267448 0.365899 0.469404 +-0.0103146 0.180354 -0.0288775 0.284655 0.5 +0.0446015 0.0889424 0.0221651 0.593236 0.5 +0.0433237 0.0846089 -0.00479162 0.724222 0.5 +0.0442902 0.0875035 0.0241471 0.600972 0.5 +0.0450904 0.0875663 0.0201674 0.492323 0.5 +-0.0630692 0.153725 -0.0105955 0.336818 0.5 +0.0456643 0.0876028 0.0121678 0.576554 0.438094 +0.0433553 0.0860087 -0.00480358 0.490744 0.5 +0.0438288 0.0860483 -0.00379124 0.479389 0.5 +-0.0883846 0.119913 0.00130167 0.648117 0.313207 +-0.0679376 0.162368 -0.0549778 0.38296 0.5 +-0.0627029 0.150609 -0.0235776 0.615702 0.5 +-0.0908751 0.135104 0.0182068 0.784742 0.5 +-0.0264587 0.0902029 -0.033595 0.362615 0.5 +0.0461265 0.0736153 0.00421619 0.323813 0.5 +0.0457702 0.0735931 0.00320764 0.329532 0.453459 +0.0453728 0.0735622 0.00221503 0.389326 0.5 +0.0448472 0.0735234 0.00122364 0.391961 0.5 +0.0444193 0.0734774 0.000193217 0.620701 0.5 +0.0440337 0.0734407 -0.000804833 0.618134 0.394179 +0.0437981 0.0734503 -0.00176783 0.641648 0.393334 +0.0434836 0.0734019 -0.00279222 0.700199 0.5 +0.0431065 0.0733659 -0.00379081 0.558889 0.5 +0.042732 0.0733313 -0.00479409 0.49216 0.472826 +0.0423481 0.0732982 -0.00579253 0.513293 0.5 +0.041918 0.0732584 -0.00676718 0.52718 0.479585 +0.0413134 0.0732089 -0.00778125 0.55075 0.5 +0.0406726 0.0731516 -0.00877611 0.572693 0.475465 +0.0399619 0.0730961 -0.00981181 0.69526 0.5 +0.0392199 0.073038 -0.0108301 0.724919 0.5 +0.0384815 0.0729589 -0.0117402 0.744572 0.5 +0.0371376 0.0728556 -0.0127896 0.727138 0.5 +0.0359341 0.0727624 -0.0138488 0.701026 0.5 +0.0352424 0.0726953 -0.0147969 0.721066 0.5 +0.0344602 0.0726275 -0.0157808 0.724994 0.5 +0.0336358 0.0725575 -0.0168317 0.726067 0.5 +0.0329366 0.0724958 -0.0177814 0.749423 0.5 +0.0321511 0.0724311 -0.0187615 0.735041 0.5 +0.0311541 0.072342 -0.0197804 0.706449 0.5 +0.0302861 0.0722616 -0.0207987 0.725607 0.5 +0.0293781 0.0721886 -0.0217847 0.7429 0.5 +0.0284436 0.0721192 -0.0227379 0.760035 0.5 +0.0147132 0.0897404 -0.0290836 0.634731 0.5 +-0.0892011 0.0983026 0.0104143 0.785425 0.5 +-0.0928057 0.124227 0.0372672 0.824789 0.5 +-0.0897017 0.151503 0.0171224 0.248933 0.5 +-0.089716 0.139255 0.0241831 0.699854 0.5 +-0.0123225 0.124091 -0.00743567 0.40515 0.5 +-0.0866911 0.107697 0.0133542 0.818417 0.5 +-0.0688005 0.087996 -0.0171065 0.513227 0.460599 +-0.0921507 0.129567 0.0102504 0.428921 0.408066 +-0.0511894 0.0558131 0.0154354 0.168077 0.5 +-0.0403541 0.121097 -0.0120881 0.599451 0.451266 +-0.0923082 0.120116 0.0282975 0.729632 0.5 +-0.0926124 0.120126 0.0272917 0.758033 0.5 +-0.0920663 0.121362 0.00826874 0.531365 0.5 +-0.0914924 0.12135 0.00727423 0.556938 0.5 +-0.0926366 0.121498 0.0312794 0.61014 0.5 +0.0431642 0.0987038 0.0171581 0.671093 0.5 +-0.062446 0.163101 -0.0455941 0.417381 0.5 +-0.0620712 0.16624 -0.0525885 0.358824 0.5 +0.0443232 0.0889197 0.0231574 0.602829 0.5 +-0.0295473 0.0358282 0.0521362 0.51222 0.5 +-0.0624126 0.161536 -0.0416011 0.389941 0.420218 +-0.0622845 0.161545 -0.0405978 0.406378 0.5 +-0.0116746 0.164119 -0.0176003 0.24547 0.226127 +-0.0907804 0.150219 0.0191245 0.518866 0.5 +0.044671 0.0931702 0.0171607 0.540264 0.448982 +-0.0308113 0.153953 -0.00248259 0.156451 0.412172 +-0.084288 0.111698 0.0438155 0.42027 0.5 +-0.04997 0.140123 0.00440621 0.459555 0.5 +0.0455985 0.0918132 0.00816712 0.590302 0.428387 +-0.0858246 0.111645 0.00429163 0.380276 0.5 +-0.0874416 0.113109 0.00532366 0.40791 0.5 +0.0438525 0.0874765 0.0251696 0.619204 0.5 +-0.0860233 0.102167 0.0034068 0.693786 0.5 +-0.0624082 0.147544 -0.00957064 0.425721 0.5 +-0.0521665 0.136903 -0.000627156 0.652126 0.5 +-0.0784816 0.0755217 0.0287043 0.652159 0.466782 +-0.0181419 0.159077 -0.00932452 0.198544 0.207771 +-0.0618853 0.158437 -0.0215849 0.503054 0.5 +0.0411669 0.104244 0.0141607 0.69815 0.5 +-0.0621627 0.163132 -0.0395927 0.45361 0.5 +-0.0629233 0.149038 -0.01858 0.62724 0.5 +-0.063685 0.169395 -0.0455915 0.632523 0.5 +-0.0633941 0.159891 -0.0485891 0.802018 0.5 +-0.0823617 0.110377 0.0328225 0.81269 0.5 +-0.0614661 0.174127 -0.0585981 0.327165 0.5 +-0.0530084 0.149326 0.0224058 0.720512 0.5 +-0.0400434 0.149481 0.00241998 0.244509 0.414429 +0.0433285 0.0874073 -0.00479371 0.494658 0.5 +-0.0632202 0.150553 -0.0275915 0.648356 0.5 +-0.0688901 0.0621533 0.0194032 0.434953 0.432141 +-0.0697195 0.0625059 0.018914 0.443889 0.446316 +-0.0107227 0.165105 -0.0188107 0.337882 0.391145 +-0.061825 0.164563 -0.0576805 0.532317 0.5 +-0.0620511 0.164652 -0.0545872 0.612074 0.5 +-0.0621992 0.16466 -0.0525894 0.4724 0.481143 +-0.0622205 0.164668 -0.0515889 0.463682 0.480279 +-0.0620827 0.174072 -0.0556227 0.549611 0.478922 +0.0455542 0.0875891 0.00417683 0.501916 0.421268 +-0.0621725 0.160005 -0.022587 0.524529 0.5 +-0.0907002 0.137837 0.017198 0.491797 0.333837 +-0.0630515 0.152177 -0.00858675 0.353459 0.5 +-0.0747588 0.0669346 0.0175421 0.670903 0.5 +-0.0730559 0.14548 -0.015959 0.181386 0.330059 +-0.0618555 0.155289 -0.0295874 0.747481 0.5 +-0.0539285 0.152376 0.0223916 0.445382 0.5 +0.0465387 0.0750529 0.00819241 0.334003 0.5 +0.0464517 0.0750534 0.00718936 0.332734 0.5 +0.0463863 0.075041 0.00619921 0.379797 0.5 +0.0461994 0.0750316 0.00518987 0.32293 0.5 +0.0460119 0.0750141 0.00420589 0.341471 0.482192 +0.0457402 0.0749932 0.00321166 0.349848 0.459401 +0.0453833 0.074968 0.00220665 0.369655 0.475025 +0.0450172 0.0749324 0.00120229 0.486393 0.5 +0.0447259 0.0749152 0.000215102 0.504813 0.483848 +0.0443985 0.0748779 -0.000803542 0.541016 0.5 +0.0441279 0.0748554 -0.00179683 0.704453 0.5 +0.0436422 0.0748109 -0.00280304 0.722191 0.5 +0.0432399 0.0747788 -0.00379578 0.577844 0.5 +0.0427329 0.0747306 -0.00479562 0.499038 0.448374 +0.0422621 0.0746939 -0.00581448 0.614987 0.5 +0.0417928 0.0746499 -0.00676608 0.540094 0.5 +0.0411805 0.0745986 -0.0077775 0.555316 0.5 +0.0404486 0.0745397 -0.00879543 0.565494 0.481109 +0.0396972 0.0744788 -0.00980523 0.593996 0.5 +0.0390327 0.0744186 -0.0107818 0.603186 0.482847 +0.0381305 0.0743398 -0.0117665 0.716695 0.5 +0.0368421 0.0742334 -0.0127504 0.676158 0.5 +0.0357477 0.074144 -0.0137952 0.681405 0.5 +0.0351077 0.0740897 -0.0147891 0.687304 0.5 +0.0343469 0.0740244 -0.0157906 0.716123 0.5 +0.033587 0.0739599 -0.0167921 0.718503 0.5 +0.0328626 0.0738919 -0.0178203 0.722365 0.5 +0.0323759 0.0738626 -0.0187418 0.724039 0.5 +0.031592 0.0738009 -0.0197207 0.711937 0.5 +0.0306214 0.073711 -0.0207585 0.729644 0.5 +0.029581 0.0736246 -0.0217333 0.759026 0.5 +0.0285394 0.0735396 -0.0227021 0.755605 0.5 +-0.0356976 0.121856 -0.0088333 0.453074 0.5 +-0.0893331 0.0983151 0.0114073 0.552748 0.5 +-0.0880973 0.137764 0.00820327 0.553577 0.5 +-0.0726673 0.155437 -0.0339106 0.755725 0.5 +-0.0816033 0.101897 -0.00556882 0.510692 0.5 +-0.0179573 0.123303 -0.00653742 0.518345 0.5 +-0.0867595 0.107707 0.0143554 0.848208 0.5 +-0.0471272 0.159118 -0.00765489 0.395988 0.5 +-0.0909349 0.113307 0.0123445 0.473459 0.5 +-0.0911602 0.113316 0.0133388 0.499886 0.5 +0.0286778 0.116188 -0.00517917 0.532106 0.5 +-0.0610597 0.172553 -0.0606091 0.327302 0.203933 +-0.0925801 0.120153 0.0312943 0.574444 0.427367 +-0.0929281 0.121393 0.0102886 0.387467 0.5 +-0.0926147 0.121379 0.00928006 0.375564 0.5 +-0.0928035 0.121507 0.0322842 0.588189 0.5 +0.0445099 0.0945603 0.0161557 0.541432 0.5 +0.044397 0.0945546 0.0171571 0.531419 0.476359 +-0.0619824 0.166238 -0.0535924 0.636825 0.5 +-0.0619967 0.14761 -0.00462246 0.311444 0.5 +-0.0631947 0.163133 -0.0265887 0.681265 0.5 +0.0437965 0.0987467 0.00816432 0.568849 0.5 +-0.0615047 0.167821 -0.0555677 0.383243 0.441421 +-0.0118859 0.163867 -0.0168515 0.276692 0.5 +-0.0590026 0.0609591 0.0242669 0.333645 0.456028 +-0.0630837 0.164691 -0.0325918 0.753046 0.5 +-0.0621779 0.061949 0.0245023 0.428652 0.41697 +-0.0497158 0.140127 0.00540861 0.437953 0.5 +-0.0809179 0.0761444 0.0241516 0.812511 0.5 +-0.0880049 0.11182 0.00834875 0.380637 0.5 +-0.0864043 0.111678 0.00530063 0.377844 0.5 +-0.0512476 0.149342 0.0143776 0.561239 0.5 +-0.051601 0.149349 0.0154046 0.742541 0.5 +-0.0897198 0.135201 0.0382086 0.649494 0.457801 +-0.062219 0.164671 -0.0505894 0.373821 0.376364 +-0.0623583 0.164673 -0.0485921 0.377244 0.5 +-0.0640462 0.0622661 0.0238361 0.402075 0.442542 +-0.0624763 0.163084 -0.0515885 0.753466 0.5 +-0.0623836 0.163016 -0.0556039 0.595727 0.5 +0.0421385 0.102872 0.00916356 0.695992 0.5 +0.0419441 0.102888 0.00516309 0.636681 0.5 +-0.0103631 0.180289 -0.0277342 0.287018 0.405997 +-0.0104184 0.179993 -0.0295246 0.28444 0.412241 +-0.093475 0.1283 0.0242551 0.60579 0.479334 +-0.0524497 0.140085 0.0234103 0.771891 0.5 +-0.0682817 0.156606 -0.0532672 0.28748 0.5 +-0.0918049 0.126804 0.00826817 0.423486 0.5 +-0.066871 0.0626922 0.0228964 0.383293 0.5 +-0.0366167 0.15106 0.000396988 0.220734 0.5 +0.0432765 0.10012 0.00816425 0.581741 0.5 +-0.0742229 0.109724 0.0423296 0.804353 0.5 +-0.0705529 0.0628294 0.0184736 0.499559 0.5 +-0.0654801 0.0675388 0.0330326 0.518098 0.396839 +-0.0868755 0.112781 0.0262639 0.613829 0.5 +0.0446756 0.091763 0.0191604 0.520315 0.5 +-0.0588392 0.0371017 0.0463605 0.365071 0.5 +-0.0623369 0.16467 -0.04959 0.37844 0.5 +-0.0623602 0.164675 -0.0475927 0.382738 0.5 +-0.0520173 0.146257 0.0174096 0.854379 0.5 +-0.0516778 0.140064 0.0213757 0.626242 0.468008 +0.0456484 0.0875951 0.00518134 0.533236 0.5 +0.0439647 0.0888964 0.0241631 0.607838 0.478857 +0.0465562 0.0764652 0.0121829 0.408507 0.5 +0.0465334 0.07646 0.0111853 0.465391 0.5 +0.0464507 0.0764566 0.0101865 0.461502 0.38739 +0.046481 0.0764536 0.00918999 0.395816 0.5 +0.0464212 0.0764513 0.00819032 0.402835 0.5 +0.0463722 0.0764454 0.00719365 0.396276 0.38558 +0.0462734 0.0764388 0.00619417 0.385484 0.5 +0.0461397 0.0764263 0.0052018 0.36186 0.429337 +0.0458945 0.0764062 0.00420006 0.366906 0.486482 +0.045657 0.07639 0.00319799 0.395217 0.466775 +0.045415 0.0763654 0.00219579 0.468254 0.5 +0.0452304 0.0763569 0.00121116 0.554525 0.5 +0.0449154 0.0763231 0.00019353 0.560112 0.376026 +0.0446565 0.076299 -0.00080692 0.724267 0.5 +0.0443433 0.0762807 -0.00178421 0.736442 0.5 +0.0438483 0.076237 -0.00278527 0.594131 0.472325 +0.0433489 0.0761902 -0.00378764 0.607224 0.5 +0.0428335 0.076148 -0.00478426 0.624901 0.5 +0.0422446 0.0760949 -0.00580476 0.646194 0.5 +0.0417455 0.0760505 -0.00673474 0.547731 0.424569 +0.0410535 0.0759945 -0.00777525 0.660674 0.5 +0.0401892 0.0759203 -0.00879733 0.557588 0.477021 +0.0394635 0.075864 -0.00982057 0.679552 0.5 +0.0386856 0.0757975 -0.0108084 0.685506 0.5 +0.0377573 0.0757194 -0.0117756 0.65443 0.5 +0.0365014 0.0756142 -0.0127863 0.648221 0.5 +0.0358746 0.0755562 -0.0137901 0.664289 0.383371 +0.0352588 0.0755049 -0.0148105 0.669899 0.5 +0.0345167 0.0754586 -0.0157294 0.694304 0.5 +0.0336664 0.0753805 -0.0167583 0.689801 0.5 +0.0329576 0.0753133 -0.0177979 0.689813 0.5 +0.0324248 0.0752705 -0.0187807 0.711459 0.5 +0.0317565 0.0752189 -0.019756 0.716949 0.5 +0.0308475 0.0751439 -0.0207339 0.741641 0.5 +0.0295244 0.0750328 -0.0218147 0.753227 0.5 +-0.0466697 0.166955 -0.00590454 0.334021 0.369298 +-0.0824868 0.0965084 -0.00559576 0.459106 0.5 +-0.0236465 0.18441 -0.0150532 0.198054 0.351425 +0.0425177 0.0660617 -0.00221978 0.38708 0.5 +-0.0678094 0.180556 -0.0587896 0.265913 0.5 +-0.0824261 0.101938 -0.00456304 0.495195 0.432092 +-0.0875967 0.100907 0.00640641 0.463277 0.5 +-0.086583 0.1077 0.0153543 0.852791 0.5 +-0.0864626 0.107749 0.0163884 0.634107 0.455557 +-0.0865442 0.107736 0.017365 0.662828 0.447504 +-0.0907186 0.113289 0.0113419 0.625277 0.5 +-0.00322809 0.0999661 -0.0238789 0.762285 0.5 +-0.0930264 0.120177 0.0342925 0.598463 0.5 +-0.0927311 0.120157 0.0322864 0.57318 0.434921 +-0.0934924 0.121416 0.0122906 0.451478 0.460102 +-0.0932554 0.121405 0.0112928 0.428627 0.5 +-0.0928405 0.121514 0.033281 0.58579 0.463447 +-0.0855548 0.125248 -0.00272359 0.627625 0.5 +0.0438711 0.0959127 0.00218342 0.47152 0.490586 +-0.0616803 0.166235 -0.0555923 0.559595 0.5 +-0.0618365 0.166237 -0.0545929 0.642106 0.5 +0.0437289 0.0987183 0.00617361 0.561411 0.442922 +0.0437866 0.098742 0.00716534 0.56862 0.5 +-0.0615198 0.167807 -0.0565879 0.515773 0.5 +-0.0368558 0.0971787 -0.022608 0.633523 0.5 +-0.0498057 0.144755 0.010389 0.648397 0.5 +-0.0909094 0.114612 0.0400043 0.574463 0.5 +-0.0499442 0.140127 0.0163925 0.765148 0.5 +0.0435982 0.0888699 0.0251665 0.621316 0.5 +0.0431163 0.0888383 0.0261767 0.636578 0.5 +-0.0532082 0.149319 0.0233918 0.721307 0.5 +-0.0538672 0.149311 0.025406 0.495655 0.5 +0.0448665 0.0945715 0.00517989 0.575299 0.398528 +0.0422255 0.0887323 -0.00780894 0.59862 0.472747 +-0.0913745 0.142001 0.0211607 0.74667 0.5 +-0.0705862 0.166615 -0.0490027 0.376624 0.419102 +-0.0942425 0.120105 0.0182851 0.625257 0.5 +-0.0906385 0.147509 0.0131579 0.41145 0.461507 +0.0443454 0.0903358 0.0221636 0.412968 0.5 +-0.0912936 0.114724 0.0218532 0.760937 0.356727 +0.0420895 0.102851 0.00717012 0.559505 0.423344 +0.0413547 0.102812 0.0011821 0.452467 0.5 +0.0388283 0.102661 -0.00481845 0.560909 0.5 +0.0440882 0.090317 0.0231627 0.594136 0.482525 +-0.078089 0.159705 -0.0229182 0.622693 0.5 +-0.0732448 0.144163 -0.0109449 0.168371 0.356523 +-0.0618131 0.161554 -0.0315928 0.464908 0.5 +-0.048904 0.144756 0.0084067 0.60724 0.5 +-0.0527647 0.138519 0.0263974 0.564931 0.5 +0.042729 0.0901813 -0.0058099 0.42223 0.485477 +-0.0476612 0.135572 0.0133995 0.681949 0.5 +0.044574 0.0903504 0.0211613 0.493278 0.481862 +0.0448529 0.0917799 0.0171662 0.537156 0.5 +-0.0621573 0.163143 -0.0375929 0.473727 0.463138 +-0.0136298 0.0943834 -0.0340901 0.690837 0.5 +0.0439472 0.0917185 0.0231564 0.591828 0.480968 +-0.0261555 0.155801 -0.00568703 0.220885 0.5 +-0.0723294 0.177884 -0.0550149 0.271648 0.5 +0.0216437 0.120011 -0.00733339 0.592839 0.5 +-0.0870689 0.0968011 0.00243877 0.458522 0.5 +-0.072526 0.149972 -0.0424686 0.143598 0.5 +0.0463963 0.0778578 0.0141787 0.463426 0.5 +0.0464379 0.0778615 0.0131806 0.384497 0.47712 +0.0464938 0.0778639 0.0121785 0.394088 0.422262 +0.0465019 0.0778624 0.0111839 0.450431 0.413432 +0.0464355 0.0778581 0.0101835 0.454059 0.5 +0.0464068 0.0778555 0.00918735 0.46112 0.5 +0.04631 0.0778469 0.00818385 0.459072 0.414467 +0.0462675 0.0778418 0.00718957 0.453378 0.5 +0.0461841 0.0778325 0.00618859 0.384495 0.5 +0.0460436 0.0778241 0.00519064 0.489657 0.411197 +0.0458885 0.0778077 0.00419775 0.49415 0.5 +0.045728 0.077798 0.00320493 0.49313 0.456002 +0.0455105 0.0777762 0.00219892 0.472941 0.470866 +0.0452801 0.0777562 0.00119407 0.476094 0.5 +0.0451032 0.0777437 0.000209071 0.470805 0.5 +0.0447742 0.0777119 -0.00080388 0.574042 0.5 +0.0444401 0.0776895 -0.00177282 0.480285 0.5 +0.0439709 0.0776452 -0.00278508 0.586151 0.5 +0.043463 0.077603 -0.00378219 0.613362 0.5 +0.0429126 0.0775596 -0.00475805 0.638824 0.5 +0.042296 0.0775058 -0.00576261 0.644413 0.5 +0.0416044 0.0774454 -0.0068035 0.669905 0.5 +0.0409145 0.07739 -0.0077683 0.672795 0.5 +0.0400692 0.0773178 -0.00879643 0.662665 0.5 +0.0394034 0.0772645 -0.00977482 0.636589 0.5 +0.0386441 0.0772022 -0.0107761 0.626718 0.5 +0.0377538 0.0771288 -0.0117747 0.61891 0.5 +0.0369017 0.0770479 -0.0128074 0.61826 0.5 +0.0362901 0.0769906 -0.0138255 0.621218 0.5 +0.0356786 0.076967 -0.014745 0.66032 0.5 +0.0347555 0.0768972 -0.0157225 0.673613 0.5 +0.0338293 0.0767952 -0.0167877 0.671454 0.5 +0.0333063 0.076755 -0.0177777 0.683078 0.5 +0.03267 0.0767015 -0.0187757 0.709463 0.5 +0.0319543 0.0766492 -0.0197037 0.73695 0.5 +0.030786 0.0765476 -0.0208061 0.761281 0.5 +-0.0927289 0.125458 0.0102641 0.438665 0.5 +-0.0890273 0.0956446 0.021399 0.67282 0.5 +-0.0834239 0.0965619 -0.00458039 0.610158 0.5 +-0.0707759 0.162402 -0.0459559 0.371169 0.452872 +-0.0883368 0.137775 0.00920322 0.554388 0.5 +-0.0252945 0.179999 -0.0179968 0.466421 0.5 +-0.0831709 0.101988 -0.00359129 0.447093 0.5 +-0.0852211 0.103481 0.00138673 0.429656 0.5 +-0.0922901 0.125582 0.0342578 0.818125 0.5 +-0.0817516 0.140386 -0.000790241 0.681494 0.5 +-0.0862889 0.10771 0.0183439 0.665166 0.5 +-0.0903031 0.113239 0.0103302 0.614527 0.5 +0.0326595 0.114633 -0.00147403 0.541823 0.5 +-0.0626019 0.174089 -0.0546038 0.54309 0.5 +-0.0929242 0.120168 0.0332909 0.566999 0.446398 +-0.0939567 0.121435 0.0142863 0.696046 0.5 +-0.0937263 0.121427 0.0132848 0.66272 0.5 +-0.011946 0.163588 -0.0146751 0.234271 0.433679 +-0.0894255 0.0956236 0.0134235 0.598261 0.5 +-0.0888328 0.0942898 0.0224093 0.559807 0.5 +-0.0614834 0.166203 -0.0576271 0.534598 0.5 +-0.0616183 0.16622 -0.0565931 0.483585 0.5 +0.00417139 0.0894659 -0.0333631 0.764624 0.5 +0.0427594 0.0986702 0.00117933 0.542184 0.5 +-0.062488 0.161561 -0.0255895 0.657561 0.5 +0.0434133 0.0930689 -0.00182579 0.586013 0.5 +-0.072234 0.147352 -0.0242316 0.182014 0.5 +-0.0507025 0.140081 0.0193694 0.626505 0.478068 +-0.0615859 0.155307 -0.0235819 0.458281 0.5 +-0.0471129 0.13404 0.0104021 0.496266 0.5 +0.0424823 0.0958192 -0.00180898 0.591717 0.5 +-0.0511023 0.141628 0.018382 0.627732 0.5 +-0.0506782 0.141637 0.0173818 0.623335 0.5 +-0.0504724 0.141671 0.0164028 0.763351 0.5 +-0.0502115 0.141667 0.015397 0.71001 0.5 +-0.0494839 0.141682 0.00839735 0.509374 0.5 +-0.0495274 0.14168 0.00739502 0.50338 0.5 +0.0438612 0.0930832 -0.000804157 0.48505 0.5 +-0.0859116 0.107692 0.0193681 0.514555 0.480441 +0.0371254 0.0869172 -0.0157926 0.749043 0.5 +-0.0622887 0.152203 -0.0145776 0.588104 0.5 +0.0429025 0.100097 0.0151567 0.690216 0.5 +0.0430409 0.10011 0.0131585 0.568162 0.5 +0.0406669 0.102735 -0.000789188 0.574516 0.5 +0.0418243 0.102828 0.00318021 0.515112 0.479351 +-0.0388448 0.0971399 -0.0223049 0.69477 0.5 +0.00561249 0.0927088 -0.0322048 0.697748 0.5 +-0.0897234 0.125377 0.0042981 0.662983 0.5 +-0.0480228 0.144604 0.00545108 0.29324 0.5 +-0.0618544 0.174099 -0.0565963 0.530347 0.479509 +-0.0500088 0.124901 -0.00796654 0.615946 0.5 +-0.0779001 0.105799 -0.00757653 0.564888 0.5 +-0.0848075 0.100731 -0.000569426 0.484635 0.38711 +0.0397017 0.104178 0.024171 0.505785 0.5 +-0.0719446 0.159605 -0.0399328 0.50036 0.5 +0.0457169 0.0792126 0.021174 0.577396 0.5 +-0.0755817 0.14859 -0.0148673 0.463763 0.5 +-0.0884887 0.122612 0.00129126 0.499674 0.312965 +0.0410638 0.0928718 -0.0077952 0.552595 0.404687 +0.0461634 0.0792418 0.0171768 0.429121 0.5 +0.0461889 0.0792428 0.016179 0.441445 0.5 +0.0462561 0.0792459 0.0151754 0.452433 0.5 +0.0463019 0.07925 0.0141776 0.464071 0.444993 +0.0463796 0.0792543 0.0131749 0.460371 0.447135 +0.0464006 0.0792571 0.0121793 0.467331 0.5 +0.0464344 0.0792618 0.0111808 0.521361 0.403497 +0.0464307 0.0792576 0.0101822 0.530319 0.5 +0.0463488 0.0792498 0.00918224 0.533891 0.430919 +0.0463679 0.0792556 0.0081871 0.529535 0.414623 +0.0462936 0.0792458 0.00718673 0.523433 0.5 +0.0462048 0.0792353 0.00618416 0.518375 0.422723 +0.0461381 0.0792322 0.00519228 0.513206 0.5 +0.0459393 0.0792136 0.00418579 0.50235 0.5 +0.0457654 0.0791979 0.00319646 0.498678 0.456066 +0.045527 0.0791773 0.00219591 0.491709 0.453545 +0.0453464 0.0791637 0.00120688 0.489316 0.377305 +0.0451001 0.0791381 0.000209359 0.420748 0.5 +0.044826 0.0791184 -0.000782084 0.483975 0.370476 +0.0444691 0.0790854 -0.00178456 0.487009 0.5 +0.0439772 0.079046 -0.00278888 0.505581 0.5 +0.0434554 0.0790039 -0.00377815 0.615361 0.5 +0.0428337 0.0789534 -0.0047828 0.637589 0.5 +0.0422984 0.0789118 -0.00576754 0.645286 0.5 +0.0417534 0.0788713 -0.00674491 0.667221 0.431494 +0.041033 0.0788113 -0.0077656 0.674055 0.5 +0.0402499 0.0787503 -0.00875238 0.623675 0.5 +0.0397193 0.0787183 -0.00974279 0.609109 0.404303 +0.0391307 0.0786589 -0.0107679 0.598649 0.463725 +0.0384699 0.0786144 -0.011749 0.589284 0.5 +0.037525 0.0785071 -0.0127982 0.741914 0.5 +0.0369479 0.0784891 -0.0137448 0.59116 0.5 +0.0360857 0.0784054 -0.0147648 0.628186 0.5 +0.0351663 0.0783387 -0.0157415 0.656211 0.5 +0.0342862 0.0782566 -0.0167489 0.647283 0.5 +0.033576 0.0781814 -0.0177928 0.693487 0.5 +0.0328071 0.0781213 -0.0187889 0.733689 0.5 +0.0319638 0.0780558 -0.0197042 0.770452 0.5 +0.0306136 0.0779431 -0.0207534 0.750733 0.5 +-0.0927402 0.125562 0.0292626 0.665884 0.5 +-0.0890914 0.0956431 0.0204208 0.658876 0.449477 +-0.0840733 0.0966087 -0.0036103 0.408539 0.454649 +-0.0711139 0.162407 -0.0449498 0.375631 0.441112 +-0.0906919 0.142015 0.0231619 0.743514 0.5 +-0.0743245 0.179234 -0.0539852 0.294903 0.5 +-0.0839359 0.102045 -0.00261805 0.335081 0.5 +-0.0842531 0.102059 -0.0016008 0.458097 0.416008 +-0.0851088 0.102115 0.000391121 0.420019 0.403283 +-0.0892862 0.137904 0.0301929 0.794997 0.5 +-0.0881528 0.129472 0.0022725 0.513442 0.466781 +-0.0899231 0.113261 0.00935255 0.561254 0.5 +0.00304719 0.123088 -0.0105402 0.631346 0.5 +-0.0477406 0.135604 0.0113959 0.527345 0.5 +-0.091934 0.128302 0.0312437 0.879305 0.5 +-0.092242 0.128315 0.0292604 0.628204 0.5 +-0.094099 0.121442 0.0152795 0.534972 0.466992 +-0.00990982 0.175697 -0.0247542 0.566081 0.5 +-0.0638648 0.166212 -0.0336016 0.692397 0.5 +-0.0784525 0.0962411 -0.0105211 0.505653 0.5 +-0.0585981 0.0658974 0.0341563 0.504454 0.5 +-0.0160918 0.0359549 0.0514785 0.339145 0.5 +-0.0288776 0.0903901 -0.0295833 0.350156 0.5 +-0.0620219 0.161552 -0.0385959 0.421393 0.433705 +-0.0627541 0.166279 -0.0425846 0.652692 0.5 +-0.0664863 0.0657678 0.0290911 0.439392 0.461668 +-0.0501985 0.140132 0.0173988 0.785866 0.5 +-0.0503915 0.140104 0.0183826 0.618652 0.5 +-0.0502406 0.140114 0.00340131 0.348402 0.5 +-0.0473457 0.134062 0.00939848 0.48577 0.430822 +-0.0515486 0.141607 0.0193759 0.617374 0.5 +0.0423147 0.091604 0.0271557 0.65217 0.5 +-0.0631272 0.0656833 0.0316274 0.521706 0.5 +-0.0738123 0.0655371 0.0172042 0.683448 0.5 +-0.0500909 0.0358963 0.0459805 0.316461 0.5 +-0.051271 0.0356477 0.0458842 0.528412 0.5 +-0.0495589 0.141679 0.00640064 0.451775 0.5 +-0.051136 0.140067 0.0203692 0.633806 0.5 +-0.0626407 0.163129 -0.0295903 0.69312 0.5 +-0.0320536 0.0356449 0.0500425 0.599374 0.5 +-0.0905235 0.137837 0.0161933 0.359359 0.5 +0.0431395 0.100108 0.0121576 0.573354 0.485311 +0.0432452 0.100105 0.0111579 0.57777 0.5 +0.0420581 0.102887 0.0101643 0.697482 0.5 +-0.0732213 0.156852 -0.0309091 0.480308 0.5 +-0.0831442 0.107611 0.0263767 0.478581 0.5 +-0.0508809 0.104197 -0.0202021 0.68938 0.5 +-0.072488 0.172225 -0.0500329 0.467246 0.5 +-0.0628742 0.175671 -0.0555946 0.688144 0.5 +-0.0941295 0.121483 0.024294 0.765806 0.5 +0.045739 0.0876044 0.00618298 0.553501 0.430086 +0.0458506 0.0876137 0.00718075 0.572248 0.42642 +0.0459022 0.0876188 0.00817319 0.580045 0.5 +0.0450698 0.0805625 0.0231647 0.600688 0.479403 +0.0453551 0.0805854 0.0221747 0.485027 0.485398 +0.0456498 0.0806034 0.02116 0.592511 0.474855 +0.0458248 0.0806172 0.0201703 0.484708 0.5 +0.0459498 0.0806271 0.0191734 0.488839 0.5 +0.0459653 0.0806289 0.018177 0.488745 0.5 +0.046037 0.0806318 0.0171753 0.494123 0.463874 +0.0461219 0.0806353 0.0161697 0.500954 0.344915 +0.0461484 0.0806375 0.015174 0.506764 0.5 +0.046183 0.0806404 0.0141758 0.521559 0.5 +0.0462743 0.0806463 0.0131736 0.531842 0.5 +0.0463015 0.0806481 0.0121762 0.541562 0.442792 +0.0463861 0.080656 0.0111753 0.540283 0.443947 +0.0464078 0.0806576 0.0101793 0.556392 0.435336 +0.0463872 0.0806547 0.00917972 0.558731 0.5 +0.0463101 0.0806468 0.00818141 0.557371 0.5 +0.046272 0.0806446 0.00718674 0.552766 0.425386 +0.0461867 0.0806341 0.00618373 0.527274 0.5 +0.0461298 0.0806288 0.00519237 0.520808 0.5 +0.0459242 0.0806108 0.00418728 0.515082 0.413516 +0.0457502 0.0805926 0.00319942 0.51153 0.464703 +0.045522 0.0805737 0.00219452 0.50861 0.5 +0.0453408 0.0805541 0.00120995 0.496255 0.478285 +0.0450117 0.0805305 0.000199058 0.421729 0.5 +0.0446984 0.0804984 -0.000780025 0.49326 0.481641 +0.0442521 0.0804694 -0.00179963 0.509134 0.5 +0.0438423 0.0804362 -0.00278861 0.528131 0.469683 +0.0433385 0.080395 -0.00378638 0.624643 0.5 +0.0428587 0.0803554 -0.00479839 0.526731 0.5 +0.0424477 0.0803262 -0.00578172 0.634725 0.5 +0.0419394 0.0802864 -0.00678235 0.660353 0.5 +0.0412418 0.0802411 -0.00774788 0.625311 0.5 +0.0406749 0.0801882 -0.00878559 0.592138 0.360064 +0.0401736 0.0801429 -0.00978947 0.592365 0.5 +0.0397235 0.080129 -0.010751 0.577307 0.5 +0.0391332 0.0800655 -0.0117735 0.583514 0.5 +0.0385368 0.0800568 -0.0127167 0.573639 0.48263 +0.0377117 0.0799594 -0.0137509 0.751071 0.5 +0.0369068 0.0799159 -0.0147176 0.590975 0.476781 +0.0359194 0.0798211 -0.0157295 0.631686 0.453364 +0.0350128 0.0797448 -0.0167143 0.644159 0.5 +0.0339767 0.0796167 -0.0178174 0.700575 0.5 +0.0331161 0.0795687 -0.0187107 0.756146 0.5 +0.0317521 0.0794454 -0.0197442 0.758237 0.5 +-0.0894168 0.0942943 0.0184246 0.847309 0.5 +-0.0692347 0.176505 -0.0570351 0.381998 0.5 +-0.0892037 0.0956419 0.0194144 0.61951 0.464997 +-0.0834882 0.14321 0.00316117 0.542385 0.389976 +-0.070351 0.158156 -0.0469171 0.558766 0.5 +-0.0764024 0.150045 -0.00692327 0.562478 0.400055 +-0.0697083 0.1638 -0.0499695 0.500267 0.5 +-0.0776846 0.16386 -0.0329461 0.358434 0.5 +-0.0723232 0.163826 -0.0419605 0.441043 0.5 +-0.0845391 0.102087 -0.000621587 0.446167 0.413667 +-0.0890326 0.125361 0.00330134 0.667901 0.5 +-0.0898903 0.135179 0.0352087 0.613336 0.5 +-0.0788429 0.112725 -0.00283498 0.700312 0.5 +-0.080097 0.11274 -0.00201289 0.505102 0.168733 +-0.0941834 0.120103 0.0162919 0.597716 0.5 +-0.061863 0.0953699 -0.0186332 0.65016 0.5 +-0.0275751 0.181449 -0.0130337 0.216251 0.5 +-0.0943085 0.12145 0.0162821 0.562398 0.5 +-0.0621913 0.163125 -0.0405922 0.429989 0.5 +-0.0635554 0.166233 -0.0355972 0.701077 0.5 +-0.0637097 0.166224 -0.0345967 0.691789 0.5 +-0.0633588 0.166271 -0.0375898 0.704371 0.5 +-0.0896333 0.0929554 0.018431 0.861805 0.5 +-0.0509182 0.146274 0.0133981 0.530779 0.5 +-0.0619148 0.161553 -0.037594 0.434947 0.41419 +-0.0633409 0.155276 -0.011594 0.362932 0.5 +-0.0596786 0.0738084 0.0412039 0.610517 0.421171 +-0.07448 0.0662148 0.0164657 0.633936 0.5 +-0.0729302 0.110914 0.0452396 0.866142 0.5 +-0.0767072 0.0724697 0.0281768 0.644171 0.5 +-0.0865855 0.100865 0.00437928 0.671127 0.345587 +-0.0527141 0.141625 0.0234145 0.755915 0.5 +-0.0622517 0.147555 -0.00557481 0.273911 0.5 +0.045113 0.0861573 0.00219478 0.470978 0.428059 +-0.0622605 0.152178 -0.0225796 0.779167 0.5 +-0.0623945 0.164686 -0.0405941 0.475793 0.5 +-0.0632966 0.144361 -0.00960502 0.581452 0.5 +-0.0497252 0.141657 0.00538484 0.386593 0.5 +-0.052457 0.144675 0.0183665 0.77962 0.5 +-0.0617229 0.155313 -0.01958 0.339909 0.5 +-0.062948 0.163113 -0.0275941 0.642513 0.5 +-0.0665305 0.155586 -0.0523326 0.341054 0.310256 +-0.0623918 0.152158 -0.026581 0.702155 0.5 +0.0420203 0.102869 0.0111608 0.695303 0.5 +-0.0627936 0.15522 -0.0356106 0.582423 0.5 +0.0447325 0.0931835 0.0161662 0.534948 0.450608 +-0.0693701 0.141497 -0.00893397 0.440829 0.5 +-0.0702669 0.176516 -0.0559875 0.386304 0.5 +0.0378591 0.102628 -0.00683982 0.481204 0.5 +0.0413233 0.102851 0.0171643 0.698892 0.5 +-0.0768403 0.0682209 0.0124564 0.735346 0.287837 +0.0459041 0.087617 0.00917007 0.584075 0.5 +0.044284 0.0819099 0.0251484 0.744899 0.5 +0.044563 0.0819287 0.0241608 0.5961 0.5 +0.0449291 0.081953 0.02316 0.596953 0.5 +0.045212 0.0819736 0.0221688 0.592075 0.478069 +0.0454654 0.0819915 0.0211715 0.487264 0.5 +0.0456344 0.0820067 0.0201819 0.490227 0.366619 +0.0457999 0.0820138 0.0191697 0.495059 0.463042 +0.0458177 0.0820138 0.0181729 0.499036 0.464731 +0.0458863 0.0820184 0.0171704 0.510212 0.5 +0.045976 0.0820209 0.01617 0.524069 0.454898 +0.0460317 0.0820288 0.0151733 0.535351 0.5 +0.0460542 0.0820303 0.0141751 0.535773 0.457803 +0.0461391 0.0820336 0.0131698 0.547787 0.451317 +0.0461918 0.0820393 0.0121748 0.557345 0.390456 +0.0462789 0.0820452 0.011174 0.564814 0.5 +0.0463102 0.0820482 0.0101764 0.572636 0.5 +0.0463117 0.0820487 0.00917902 0.585911 0.5 +0.0462948 0.0820457 0.00817944 0.584742 0.431784 +0.046259 0.0820395 0.0071847 0.56958 0.5 +0.0461456 0.0820314 0.0061875 0.546894 0.5 +0.0460131 0.0820178 0.0051921 0.536395 0.5 +0.04586 0.0820013 0.00419826 0.529417 0.5 +0.0456361 0.0819814 0.00319705 0.522854 0.468485 +0.0454568 0.0819591 0.00221362 0.520881 0.5 +0.0450752 0.0819431 0.00117926 0.435094 0.5 +0.0447595 0.0819096 0.000199099 0.444542 0.469709 +0.0443742 0.0818795 -0.000800454 0.441408 0.5 +0.0440001 0.081852 -0.00180195 0.429979 0.5 +0.0436968 0.0818627 -0.00278544 0.434511 0.425173 +0.0433462 0.0818009 -0.00379375 0.475421 0.5 +0.04296 0.0817702 -0.00479044 0.489727 0.5 +0.04256 0.0817421 -0.00578018 0.594186 0.5 +0.0420458 0.0817019 -0.00677657 0.59314 0.5 +0.0415325 0.0816649 -0.00777347 0.594716 0.450098 +0.0411083 0.0816433 -0.00876203 0.580633 0.427156 +0.0406639 0.0815903 -0.00978474 0.562326 0.5 +0.0402398 0.0815675 -0.0107641 0.575618 0.4498 +0.0396568 0.0815034 -0.0117853 0.579137 0.5 +0.0390954 0.0814754 -0.0127535 0.600154 0.5 +0.0384545 0.081427 -0.0137424 0.590541 0.5 +0.0377831 0.0813859 -0.0147095 0.60906 0.5 +0.0367009 0.0812747 -0.0157528 0.629985 0.5 +0.0358807 0.0812282 -0.0166923 0.654508 0.5 +0.0347498 0.081125 -0.0176886 0.687481 0.5 +0.0333985 0.0809938 -0.0187374 0.752526 0.5 +-0.0893861 0.0943037 0.0204146 0.644623 0.5 +-0.0894416 0.0943032 0.0194238 0.608406 0.5 +-0.0371011 0.0461641 -0.0234326 0.371561 0.5 +-0.0892997 0.0956389 0.0174174 0.628011 0.5 +-0.086732 0.125284 -0.00171301 0.696281 0.5 +-0.0694684 0.158126 -0.0509379 0.300802 0.443128 +-0.0823003 0.143183 0.00115625 0.616704 0.5 +-0.079388 0.147286 -0.00182539 0.468869 0.5 +-0.0776167 0.145877 -0.00384676 0.461877 0.5 +-0.0774489 0.163906 -0.0229523 0.466594 0.5 +-0.0876033 0.102265 0.00739801 0.476612 0.456626 +-0.0891434 0.137902 0.0291936 0.808022 0.5 +-0.0898981 0.135185 0.0362087 0.625703 0.458054 +-0.0819819 0.112797 -0.000848269 0.475796 0.5 +0.00198723 0.123051 -0.0105036 0.617872 0.5 +-0.0930714 0.12018 0.0352857 0.600874 0.5 +-0.0931568 0.120191 0.0362904 0.602882 0.458445 +-0.0864106 0.136323 0.00223079 0.57152 0.5 +-0.0944184 0.12146 0.0172829 0.582042 0.5 +-0.0634822 0.166302 -0.0366942 0.706734 0.5 +-0.0632393 0.166259 -0.0385929 0.762644 0.5 +-0.0626731 0.158367 -0.0396045 0.572804 0.480911 +-0.063425 0.163107 -0.0254606 0.680146 0.5 +-0.0622179 0.153696 -0.0295936 0.557714 0.5 +-0.0627129 0.161593 -0.024579 0.623352 0.5 +-0.0616004 0.15843 -0.0275855 0.448532 0.5 +-0.0484658 0.144752 0.00741107 0.710393 0.5 +-0.0627516 0.145959 -0.00957815 0.578894 0.5 +-0.0652725 0.0613084 0.02088 0.571358 0.5 +-0.050675 0.140101 0.0024044 0.468682 0.5 +-0.0526204 0.141613 0.022402 0.771127 0.5 +-0.0492665 0.143175 0.00640774 0.441234 0.5 +-0.0480218 0.144366 0.00442748 0.261208 0.363546 +-0.0620033 0.158406 -0.0355965 0.549831 0.5 +-0.0618685 0.158412 -0.0345942 0.527216 0.5 +0.0442849 0.0945485 0.0181566 0.523605 0.5 +-0.0631137 0.14437 -0.00863045 0.578952 0.5 +-0.0498122 0.141672 0.00439987 0.419909 0.441676 +-0.0501485 0.141642 0.00337658 0.459492 0.461176 +-0.0614458 0.0606683 0.0222701 0.419109 0.422905 +-0.0616357 0.158429 -0.0245888 0.382433 0.440496 +0.0456048 0.0918125 0.0071715 0.585718 0.5 +0.0398543 0.102779 0.025179 0.61165 0.480715 +-0.00909377 0.175718 -0.0267745 0.308736 0.5 +-0.0616418 0.158426 -0.0235923 0.383288 0.5 +0.0420573 0.0943632 -0.00379153 0.626074 0.453629 +-0.0277533 0.155598 -0.00253083 0.192759 0.278274 +-0.0630387 0.15529 -0.0125891 0.392031 0.5 +-0.0613597 0.172535 -0.0585911 0.32563 0.5 +0.043481 0.0832455 0.0271768 0.608586 0.5 +0.0458421 0.0876102 0.0101629 0.582089 0.439959 +0.0442188 0.0833029 0.0251703 0.474633 0.5 +0.0445886 0.0833307 0.0241696 0.743144 0.5 +0.0448639 0.0833492 0.023175 0.570355 0.485633 +0.0451476 0.0833704 0.0221542 0.575524 0.5 +0.0453289 0.0833826 0.0211694 0.48142 0.462052 +0.0455396 0.083395 0.0201668 0.491083 0.5 +0.0455932 0.0834007 0.019176 0.492674 0.378522 +0.0456648 0.0834028 0.0181693 0.511377 0.5 +0.0457459 0.0834058 0.0171675 0.527773 0.453059 +0.0458044 0.0834139 0.0161713 0.543296 0.454578 +0.0458872 0.0834155 0.0151706 0.546534 0.457323 +0.0459174 0.0834201 0.0141703 0.554653 0.5 +0.0460037 0.0834239 0.0131685 0.56346 0.5 +0.046059 0.0834308 0.0121726 0.563735 0.5 +0.0461434 0.0834347 0.0111711 0.578169 0.442246 +0.0461779 0.083439 0.010174 0.583892 0.437861 +0.0462595 0.0834414 0.00917612 0.589741 0.5 +0.0461952 0.0834391 0.00817714 0.589475 0.5 +0.0461375 0.0834298 0.00718398 0.576077 0.5 +0.0460228 0.0834207 0.0061859 0.553785 0.5 +0.0458454 0.0834099 0.00517797 0.535229 0.45109 +0.0456753 0.0833922 0.00418733 0.537127 0.5 +0.0453927 0.0833662 0.00319518 0.524916 0.467673 +0.045085 0.0833373 0.00221176 0.440438 0.472755 +0.044722 0.0833037 0.0012072 0.436474 0.484235 +0.044368 0.0832642 0.000211132 0.492409 0.468793 +0.0441357 0.083266 -0.000805736 0.565603 0.467814 +0.0439403 0.083251 -0.00181959 0.477872 0.380604 +0.0437634 0.0832354 -0.00281017 0.565816 0.399199 +0.0434814 0.0832239 -0.00379707 0.559676 0.397693 +0.043167 0.0831963 -0.0047762 0.55883 0.5 +0.0427074 0.0831548 -0.00579292 0.574142 0.475467 +0.0422807 0.0831292 -0.00677447 0.586588 0.5 +0.0418253 0.0830818 -0.00779351 0.479773 0.446447 +0.0413986 0.0830578 -0.00877387 0.480006 0.5 +0.0409937 0.0830284 -0.00976566 0.584615 0.5 +0.0405174 0.0829825 -0.0107762 0.585521 0.5 +0.0400149 0.0829397 -0.0117765 0.600459 0.5 +0.0393871 0.0828883 -0.0127786 0.615615 0.5 +0.0387467 0.0828368 -0.0137708 0.610104 0.391692 +0.0381247 0.0827831 -0.0147803 0.633484 0.5 +0.0372267 0.0827114 -0.0157704 0.668962 0.5 +0.0362923 0.0826461 -0.0167222 0.689422 0.5 +0.0352621 0.0826509 -0.01774 0.71902 0.5 +-0.0556554 0.124247 -0.00722427 0.914493 0.5 +-0.0286351 0.0918211 -0.0275955 0.261699 0.5 +-0.0930784 0.128223 0.0132485 0.712542 0.5 +-0.0858053 0.0953564 -0.000572964 0.437153 0.5 +-0.0892157 0.0956404 0.0184193 0.632767 0.457977 +-0.092315 0.125571 0.0312621 0.877459 0.5 +-0.0904683 0.135081 0.0142287 0.498593 0.471461 +-0.0776003 0.156937 -0.0149108 0.556865 0.5 +-0.0458977 0.166944 -0.00688513 0.373825 0.5 +-0.074091 0.144362 -0.00888576 0.320423 0.5 +-0.0887923 0.1378 0.0112057 0.415715 0.448876 +-0.0855021 0.102147 0.00137916 0.431177 0.5 +-0.0689616 0.177928 -0.0580053 0.3173 0.45351 +-0.0597956 0.0925385 -0.0196216 0.695804 0.5 +-0.0893947 0.113204 0.00833335 0.36724 0.5 +-0.0859796 0.119771 -0.00178632 0.465609 0.5 +-0.0932449 0.120197 0.0372886 0.603641 0.5 +-0.0932655 0.120203 0.038289 0.630949 0.5 +-0.0015963 0.0981039 -0.0279083 0.691539 0.5 +-0.0944412 0.121464 0.0182801 0.596859 0.463806 +-0.0938873 0.12827 0.0192438 0.798515 0.5 +-0.0625286 0.164689 -0.038593 0.53425 0.473743 +-0.0630274 0.166296 -0.040584 0.725857 0.5 +-0.0631905 0.166285 -0.0395881 0.754649 0.5 +0.0457389 0.0876049 0.0111625 0.574419 0.443435 +-0.0926608 0.121474 0.0282925 0.738067 0.5 +-0.0622044 0.163118 -0.0415929 0.409933 0.5 +-0.0612579 0.167808 -0.0576007 0.538309 0.5 +-0.0631521 0.0360725 0.0429133 0.489032 0.5 +-0.0624284 0.159959 -0.0405984 0.405463 0.5 +-0.0301924 0.153974 -0.00357072 0.145174 0.5 +-0.0626184 0.145978 -0.00858061 0.571081 0.5 +-0.0578274 0.0666818 0.0354001 0.577385 0.401539 +-0.0540772 0.146211 0.0253916 0.731489 0.5 +-0.0454802 0.123445 -0.0105099 0.730668 0.5 +-0.0634397 0.158343 -0.0445972 0.813572 0.5 +-0.0632778 0.158345 -0.0436013 0.816232 0.5 +-0.00869718 0.172706 -0.0257786 0.296749 0.47539 +-0.0617261 0.158412 -0.0335949 0.50701 0.448255 +-0.0198811 0.121697 -0.00881459 0.471365 0.398145 +-0.0625195 0.144437 -0.00658249 0.372217 0.5 +-0.0517406 0.0704199 0.0388209 0.683391 0.5 +-0.0633419 0.155193 -0.0376165 0.43884 0.486348 +-0.00977705 0.174183 -0.0237537 0.55119 0.5 +-0.0528816 0.143158 0.0234068 0.613011 0.480063 +-0.0623881 0.149093 -0.0125752 0.404846 0.5 +-0.0618567 0.156837 -0.0325918 0.544183 0.5 +0.0440209 0.0945174 0.0011806 0.478628 0.483069 +-0.0451105 0.146112 0.00345863 0.179052 0.380177 +-0.0624744 0.163093 -0.0485882 0.491134 0.5 +-0.0596322 0.0604401 0.0228281 0.469959 0.413682 +-0.046701 0.144949 0.00345496 0.231389 0.5 +-0.0103855 0.174149 -0.0227989 0.582614 0.5 +0.0438486 0.0846749 0.0261721 0.495532 0.487855 +0.0441954 0.0847004 0.0251589 0.482103 0.48136 +0.0445575 0.0847276 0.0241575 0.484939 0.483108 +0.0448392 0.0847511 0.0231667 0.577665 0.482225 +0.0450874 0.0847681 0.0221666 0.575236 0.5 +0.0452751 0.0847797 0.0211588 0.579922 0.472696 +0.0453494 0.0847845 0.0201731 0.483675 0.5 +0.045458 0.0847917 0.019171 0.49716 0.5 +0.0455463 0.0847945 0.0181695 0.51715 0.460718 +0.0455822 0.0848004 0.0171734 0.535181 0.455861 +0.0456643 0.0848033 0.01617 0.54776 0.5 +0.0457714 0.0848094 0.0151676 0.561313 0.436956 +0.0458128 0.0848143 0.0141708 0.568546 0.5 +0.0458803 0.0848141 0.013166 0.570955 0.5 +0.0459251 0.0848195 0.0121712 0.572077 0.44268 +0.0460105 0.0848241 0.0111686 0.571181 0.444122 +0.0460422 0.0848268 0.0101717 0.582311 0.5 +0.046121 0.0848311 0.00917504 0.590647 0.5 +0.0460721 0.0848306 0.00817735 0.588062 0.429655 +0.0460203 0.0848226 0.00718276 0.577098 0.5 +0.0458812 0.084809 0.00618736 0.564159 0.5 +0.0457266 0.0847913 0.00519644 0.545956 0.352295 +0.0455191 0.0847794 0.00419259 0.535528 0.5 +0.0452185 0.0847535 0.00320441 0.453701 0.5 +0.0449519 0.0847263 0.00223902 0.434455 0.405526 +0.0447673 0.0847221 0.00118921 0.585515 0.404109 +0.0445553 0.0846952 0.000180444 0.583455 0.402685 +0.0443888 0.0846966 -0.000809941 0.57344 0.402303 +0.0442166 0.0846846 -0.00180459 0.469107 0.400629 +0.0440071 0.0846602 -0.00280808 0.556735 0.5 +0.0437196 0.0846401 -0.00379782 0.71159 0.5 +-0.0682581 0.156305 0.0164417 0.805627 0.5 +-0.0388918 0.123217 0.0263098 0.349179 0.459617 +-0.0353048 0.127501 0.00687019 0.881365 0.5 +-0.0703978 0.156305 0.0156818 0.730686 0.5 +-0.0362408 0.12776 0.00652715 0.880514 0.5 +-0.0928216 0.122866 0.0342742 0.809201 0.5 +-0.0766606 0.163806 -0.0339802 0.369038 0.5 +-0.040399 0.128703 0.00942739 0.809191 0.292109 +-0.0846396 0.153647 0.0136585 0.354191 0.421183 +-0.0768476 0.148423 0.040238 0.393059 0.467375 +-0.0687371 0.155896 0.0104629 0.7987 0.5 +-0.0371778 0.128019 0.00618657 0.870609 0.5 +-0.0381186 0.128235 0.00584498 0.847128 0.5 +-0.06275 0.178179 -0.0598124 0.346151 0.413157 +-0.0634376 0.179008 -0.0598746 0.31566 0.411658 +-0.0736795 0.145791 -0.0128538 0.298566 0.5 +-0.0920989 0.117453 0.031314 0.517528 0.5 +-0.0693572 0.156301 0.0160519 0.792482 0.5 +-0.0317184 0.124145 0.0214762 0.497618 0.5 +-0.0742841 0.155582 0.00848891 0.702432 0.28635 +-0.0391935 0.128299 0.00543562 0.839662 0.270846 +-0.0401838 0.128459 0.00507702 0.844901 0.5 +-0.0625742 0.17727 -0.0581696 0.388367 0.5 +-0.0631142 0.178334 -0.0583576 0.368571 0.5 +-0.0637186 0.179242 -0.0585917 0.324126 0.5 +-0.0644378 0.17995 -0.0588828 0.299231 0.5 +-0.0653109 0.180421 -0.0593142 0.370216 0.5 +-0.0929915 0.122891 0.0372721 0.585858 0.471552 +-0.0928924 0.122885 0.0362699 0.570645 0.5 +-0.0458599 0.129594 0.0221735 0.458391 0.5 +-0.053407 0.152198 0.0189083 0.587407 0.5 +-0.0752073 0.156095 0.0183637 0.564977 0.5 +-0.048723 0.134043 0.0239744 0.604372 0.5 +-0.0411724 0.128614 0.0047134 0.852899 0.5 +-0.0421609 0.128746 0.00435225 0.86392 0.5 +0.0131716 0.128382 0.0245166 0.472285 0.5 +-0.0635922 0.178326 -0.0570781 0.317369 0.454355 +-0.0641915 0.179229 -0.0572988 0.269106 0.5 +-0.0649027 0.179945 -0.0575726 0.263809 0.5 +-0.065725 0.180452 -0.0578644 0.48666 0.5 +-0.0665966 0.180807 -0.0581921 0.380845 0.5 +-0.0674529 0.180926 -0.0583799 0.339056 0.5 +-0.0413837 0.128875 0.00906534 0.837261 0.5 +-0.0371359 0.123595 0.025439 0.446939 0.5 +-0.0741019 0.156119 0.0187476 0.569233 0.367015 +-0.0493266 0.134948 0.0237381 0.77652 0.5 +-0.0431381 0.128903 0.00398376 0.880366 0.5 +-0.0441053 0.129054 0.00361434 0.905742 0.5 +-0.0631195 0.176032 -0.0554618 0.68382 0.5 +-0.0636281 0.177112 -0.0556446 0.645778 0.5 +-0.0641686 0.178174 -0.0558405 0.367841 0.5 +-0.0647832 0.179003 -0.0560548 0.312946 0.459935 +-0.0654729 0.17978 -0.0563035 0.262334 0.447365 +-0.066211 0.180426 -0.0565833 0.376939 0.5 +-0.067036 0.180898 -0.0568882 0.432563 0.5 +-0.0679616 0.181138 -0.0572245 0.389091 0.5 +-0.085796 0.123875 -0.00272102 0.70302 0.5 +-0.04503 0.129294 0.00327025 0.917042 0.5 +-0.0458838 0.129671 0.00293555 0.816305 0.5 +-0.0380707 0.123893 0.0251235 0.346767 0.363798 +-0.0499421 0.135837 0.0234945 0.772437 0.5 +-0.091814 0.116108 0.0403567 0.550425 0.5 +-0.0631955 0.174736 -0.0540401 0.712176 0.5 +-0.0636657 0.175908 -0.0542108 0.679802 0.5 +-0.064203 0.176904 -0.0544031 0.65138 0.5 +-0.0647828 0.177875 -0.0546137 0.456268 0.5 +-0.06539 0.178765 -0.0548301 0.448249 0.5 +-0.0660593 0.179544 -0.0550745 0.375363 0.5 +-0.0667582 0.180263 -0.0553199 0.264956 0.5 +-0.0675701 0.180805 -0.0555973 0.258332 0.426824 +-0.0683506 0.181259 -0.055895 0.254352 0.409793 +-0.0694847 0.181423 -0.0563964 0.273204 0.41273 +-0.0703591 0.181312 -0.0565189 0.21134 0.5 +-0.0124153 0.129138 0.0195683 0.417736 0.5 +-0.045061 0.130334 0.0180279 0.491029 0.5 +-0.0859874 0.153017 0.0132012 0.320623 0.405168 +-0.0505553 0.136728 0.0232523 0.606671 0.5 +-0.0655471 0.154522 0.00288522 0.8759 0.5 +-0.0605191 0.153857 0.0308432 0.919253 0.5 +-0.0637266 0.174609 -0.0527846 0.504297 0.5 +-0.0642224 0.175708 -0.0529566 0.640585 0.5 +-0.0647922 0.176686 -0.0531637 0.444677 0.5 +-0.0654028 0.177571 -0.0533847 0.428527 0.5 +-0.0660877 0.178333 -0.0536421 0.357343 0.5 +-0.0667075 0.179209 -0.0538653 0.367804 0.5 +-0.0674047 0.179923 -0.0541082 0.419369 0.5 +-0.0681573 0.180556 -0.0543707 0.330383 0.5 +-0.0689729 0.181022 -0.0546459 0.32396 0.29959 +-0.0698279 0.181394 -0.0549266 0.226054 0.275737 +-0.0710553 0.181198 -0.0554882 0.229658 0.413533 +-0.071802 0.181053 -0.0556554 0.193492 0.5 +-0.0571934 0.155255 0.0174937 0.684257 0.5 +-0.0345272 0.121283 0.0279162 0.518052 0.5 +-0.0586534 0.154964 0.024223 0.596178 0.5 +-0.0332546 0.12417 0.0223928 0.479525 0.430861 +-0.0679898 0.154859 0.0296647 0.485573 0.5 +-0.013621 0.128874 0.0191382 0.419458 0.425425 +-0.0637279 0.173384 -0.0513558 0.489894 0.5 +-0.0642728 0.174473 -0.0515364 0.347736 0.474123 +-0.0648153 0.175482 -0.051724 0.443833 0.5 +-0.0654135 0.17638 -0.0519366 0.442109 0.43105 +-0.0660268 0.177263 -0.0521591 0.438709 0.5 +-0.0667255 0.178008 -0.0524224 0.389692 0.363144 +-0.0674015 0.178779 -0.0526749 0.403547 0.5 +-0.0681005 0.179488 -0.0529195 0.493625 0.5 +-0.0688202 0.180176 -0.0531787 0.396749 0.5 +-0.0695824 0.180796 -0.0534457 0.317561 0.5 +-0.0704697 0.181218 -0.0537747 0.338533 0.5 +-0.0715585 0.181081 -0.0541999 0.245358 0.5 +-0.0726553 0.180933 -0.0546755 0.160081 0.341219 +0.00122739 0.121444 0.0362285 0.624618 0.5 +-0.0539364 0.153495 0.0157968 0.514091 0.5 +-0.0567267 0.15478 0.0220083 0.493226 0.389706 +-0.0103619 0.179472 -0.0295714 0.269223 0.5 +-0.0927086 0.12286 0.0332776 0.81904 0.5 +-0.0771576 0.158311 -0.0229061 0.378385 0.5 +-0.0640837 0.156142 0.0179222 0.773108 0.5 +-0.0539979 0.153168 0.0186815 0.514233 0.5 +-0.0148242 0.128616 0.018702 0.460431 0.5 +-0.0503006 0.134918 0.0263293 0.621646 0.5 +-0.0793646 0.150083 0.036366 0.384323 0.5 +-0.0360726 0.1261 0.0198793 0.32049 0.458715 +-0.00589664 0.0980966 0.0519993 0.375401 0.5 +-0.0642587 0.173261 -0.0500973 0.509282 0.45545 +-0.064798 0.174285 -0.0502768 0.637629 0.5 +-0.0654084 0.175187 -0.050486 0.426823 0.5 +-0.0660124 0.176151 -0.0507054 0.43721 0.5 +-0.0667029 0.176899 -0.0509708 0.376719 0.5 +-0.067363 0.177688 -0.0512074 0.495059 0.5 +-0.068057 0.178404 -0.0514469 0.499406 0.5 +-0.0687469 0.179151 -0.0517127 0.490831 0.5 +-0.069513 0.17974 -0.0519891 0.479401 0.401986 +-0.0702797 0.180333 -0.0522624 0.399077 0.403019 +-0.0711528 0.180791 -0.0525602 0.288727 0.5 +-0.0720139 0.180999 -0.0528377 0.234859 0.359374 +-0.073516 0.18065 -0.0535934 0.199833 0.344768 +-0.0741326 0.180484 -0.0536706 0.158879 0.417619 +-0.0644326 0.152123 0.0354487 0.371756 0.5 +-0.0159686 0.128428 0.0182857 0.460924 0.5 +-0.0421812 0.123012 0.0251172 0.540104 0.5 +-0.0541813 0.154195 0.0142529 0.494206 0.416794 +-0.073145 0.152886 0.0338966 0.302978 0.374608 +-0.0628279 0.151059 0.0360546 0.469638 0.5 +-0.0692361 0.153199 0.0337122 0.363433 0.380078 +-0.0754673 0.153642 0.0315487 0.336269 0.434961 +-0.0826893 0.152358 0.0291683 0.2779 0.421455 +-0.0423133 0.129133 0.00872164 0.880408 0.5 +-0.0431979 0.129461 0.00840104 0.881323 0.5 +-0.0500776 0.136736 0.0219567 0.605075 0.484241 +-0.0440446 0.129866 0.0080667 0.877582 0.5 +-0.025918 0.122982 0.0235755 0.461779 0.5 +-0.0814119 0.152728 0.0295837 0.287597 0.5 +-0.04491 0.13036 0.00775303 0.517176 0.419649 +-0.0851819 0.152725 0.0105454 0.225537 0.5 +-0.0455312 0.131052 0.00748081 0.537457 0.5 +-0.0461849 0.131841 0.0072241 0.54872 0.5 +-0.0172313 0.12808 0.0178394 0.430492 0.5 +-0.0438029 0.167379 0.00334272 0.426893 0.5 +-0.0769058 0.154074 0.0295482 0.311171 0.5 +-0.0612216 0.155927 0.0131437 0.690335 0.5 +-0.0693757 0.155378 0.0277002 0.845188 0.5 +-0.068331 0.155325 0.0280685 0.875841 0.5 +-0.0449049 0.167415 0.00301648 0.346908 0.32712 +-0.0459794 0.167363 0.00259136 0.360546 0.5 +-0.0106905 0.18126 -0.0286694 0.314405 0.5 +-0.0113643 0.182132 -0.0288209 0.375298 0.5 +-0.0870347 0.13912 0.00619253 0.562824 0.5 +-0.0619885 0.156033 0.0186659 0.79954 0.293125 +-0.0552256 0.153277 0.0254807 0.439072 0.5 +-0.0525761 0.136549 0.0284096 0.649592 0.5 +-0.0718333 0.156164 0.022455 0.500407 0.5 +-0.0373694 0.173381 -0.00150317 0.381711 0.203512 +0.0135568 0.129672 0.01894 0.432438 0.46035 +-0.016322 0.128515 0.00945034 0.650839 0.5 +-0.0647783 0.173212 -0.0488362 0.528878 0.5 +-0.0653605 0.174136 -0.0490346 0.474627 0.5 +-0.0660235 0.174935 -0.0492702 0.461517 0.5 +-0.0666867 0.175728 -0.049503 0.445707 0.5 +-0.067333 0.1766 -0.0497355 0.385197 0.356044 +-0.0680148 0.177312 -0.0499759 0.503983 0.5 +-0.0687325 0.178002 -0.0502345 0.526637 0.379385 +-0.0694694 0.178653 -0.050518 0.496709 0.5 +-0.070203 0.179305 -0.0507979 0.489129 0.5 +-0.0710157 0.179813 -0.0510815 0.416672 0.384198 +-0.0718351 0.180364 -0.0513557 0.315551 0.5 +-0.0727421 0.180568 -0.051639 0.318915 0.384595 +-0.0739945 0.1802 -0.0521965 0.188967 0.5 +0.0071329 0.104451 -0.0211019 0.784708 0.5 +-0.0559476 0.153959 0.0252069 0.44484 0.424185 +-0.0657027 0.155342 0.0275329 0.900845 0.5 +-0.0705018 0.155741 0.00837641 0.797893 0.5 +0.0196499 0.124334 0.0268969 0.527928 0.466191 +-0.073564 0.156227 0.0174776 0.625463 0.5 +0.0241258 0.0914782 -0.0228484 0.63383 0.5 +-0.0558317 0.154614 0.0193814 0.387129 0.431381 +-0.0337803 0.122942 0.0251825 0.564453 0.5 +-0.0528711 0.15259 0.0147483 0.568951 0.5 +-0.0711048 0.153963 -0.0459144 0.285976 0.5 +-0.0731746 0.154066 -0.0319096 0.712265 0.5 +0.00409629 0.128905 0.0269756 0.41024 0.429791 +-0.0639512 0.156212 0.0208686 0.680348 0.5 +-0.0555168 0.154658 0.0152234 0.371754 0.439375 +-0.0717922 0.153989 -0.0428988 0.428515 0.5 +-0.0635386 0.151731 -0.00361755 0.646517 0.5 +-0.0549293 0.154823 0.0139773 0.448634 0.5 +-0.0641121 0.152654 -0.0038572 0.754158 0.5 +-0.00415565 0.0996194 0.0496007 0.265557 0.411173 +-0.00216392 0.0992947 0.0503069 0.300073 0.451779 +-0.00116978 0.0991573 0.0506694 0.323139 0.5 +-0.0478366 0.133877 0.0213554 0.550611 0.5 +-0.0466801 0.130916 0.0233152 0.516498 0.5 +-0.0841478 0.15365 0.0123539 0.33514 0.5 +-0.0260706 0.125207 0.0176138 0.345734 0.5 +-0.0728404 0.156111 0.0119063 0.780375 0.5 +-0.0166425 0.0970062 0.0498004 0.322217 0.408247 +-0.0647804 0.153444 -0.00410741 0.751137 0.5 +-0.0654456 0.154232 -0.00436037 0.705412 0.5 +-0.0663598 0.15609 0.0142173 0.802487 0.274417 +-0.0673252 0.149334 0.0390086 0.510943 0.5 +-0.0661191 0.156294 0.0171964 0.80752 0.5 +-0.063845 0.150027 0.0371387 0.537665 0.5 +-0.0671323 0.152011 0.0359968 0.374268 0.5 +-0.0721929 0.152802 0.0342528 0.306947 0.43634 +-0.0786185 0.152695 0.0319953 0.327827 0.5 +-0.0616544 0.15599 0.0144357 0.742733 0.305382 +0.00300687 0.0991424 0.049182 0.501654 0.5 +-0.0837769 0.153466 0.0110188 0.326484 0.449701 +-0.0823192 0.154091 0.0115231 0.577835 0.5 +-0.0810086 0.154578 0.0119766 0.669833 0.5 +-0.0784832 0.155333 0.0128492 0.691841 0.5 +-0.077278 0.155614 0.0132673 0.718486 0.5 +-0.0660333 0.155202 -0.00458552 0.643006 0.5 +-0.0667119 0.155932 -0.00484005 0.605603 0.390873 +-0.0498903 0.161248 0.00701432 0.465895 0.5 +-0.0673893 0.156703 -0.00509746 0.412166 0.5 +-0.0781465 0.155117 0.0246877 0.417254 0.452095 +-0.0736149 0.155479 0.0262237 0.839139 0.5 +-0.0514267 0.135712 0.0273837 0.635986 0.463315 +-0.0520176 0.136681 0.0271356 0.639422 0.5 +-0.06805 0.157495 -0.00534926 0.353792 0.5 +-0.0105893 0.180273 -0.0272114 0.33455 0.5 +-0.0109825 0.18157 -0.0273657 0.302002 0.5 +-0.0114267 0.182822 -0.0276369 0.244698 0.41987 +-0.00540678 0.121074 -0.0123374 0.627917 0.5 +-0.0695221 0.143851 -0.0150076 0.381911 0.5 +-0.0486527 0.162759 0.00599863 0.460349 0.5 +-0.0174802 0.127364 0.0206736 0.280698 0.5 +-0.0519904 0.135575 0.0286552 0.655037 0.5 +-0.083614 0.154208 0.0184012 0.31444 0.5 +-0.0687471 0.158212 -0.0056007 0.462111 0.419225 +-0.0636092 0.170093 -0.0469941 0.635682 0.5 +-0.0641407 0.171114 -0.0471776 0.572323 0.5 +-0.0647018 0.172123 -0.0473675 0.528895 0.432303 +-0.0653246 0.173014 -0.0475844 0.47816 0.5 +-0.0659606 0.17389 -0.0478108 0.373373 0.5 +-0.0666146 0.174697 -0.0480375 0.368362 0.5 +-0.0672645 0.175508 -0.0482636 0.461898 0.5 +-0.0679574 0.176267 -0.0485208 0.408914 0.450243 +-0.0686886 0.176906 -0.0487674 0.433572 0.5 +-0.0694051 0.177621 -0.0490523 0.417943 0.476971 +-0.0701614 0.178224 -0.0493215 0.54702 0.5 +-0.0709327 0.178806 -0.0496057 0.498199 0.393806 +-0.0717036 0.179379 -0.0498901 0.407137 0.5 +-0.0725702 0.17984 -0.0501722 0.362064 0.5 +-0.0734779 0.180121 -0.0504836 0.212048 0.411612 +-0.074698 0.179765 -0.0510072 0.163272 0.394738 +-0.0759162 0.179384 -0.0516058 0.162542 0.381623 +-0.0821777 0.153468 0.0263012 0.33123 0.324375 +-0.0878006 0.151251 0.0245374 0.322152 0.5 +0.0122982 0.128768 0.0241985 0.438377 0.5 +-0.069473 0.158882 -0.00587612 0.48781 0.5 +-0.0930739 0.122895 0.0382751 0.598996 0.471626 +-0.0780471 0.153854 0.029137 0.734248 0.5 +-0.0496912 0.162854 0.00564102 0.351382 0.5 +-0.0708693 0.149702 0.0392474 0.46436 0.5 +-0.0699464 0.151677 0.0365135 0.320405 0.357124 +-0.0241449 0.0905492 0.0505682 0.682833 0.5 +-0.0131682 0.0974746 0.0509922 0.29677 0.5 +-0.0484504 0.134772 0.0211152 0.56902 0.5 +-0.0689521 0.151509 0.0368557 0.356433 0.431539 +-0.0697859 0.156365 0.01735 0.738885 0.5 +0.0097783 0.1251 0.0319006 0.643395 0.5 +-0.0285717 0.12063 0.0270994 0.28254 0.463094 +-0.0274771 0.120676 0.0274866 0.356614 0.5 +-0.0703503 0.159267 -0.00619145 0.480156 0.422649 +-0.0712367 0.159654 -0.00650092 0.343913 0.338288 +-0.079558 0.151858 0.0332132 0.298436 0.312479 +-0.0679369 0.165269 -0.0197719 0.433581 0.458546 +-0.0764224 0.152995 0.0327283 0.347756 0.357178 +-0.00822607 0.100046 0.0481626 0.316372 0.5 +-0.00613038 0.0999315 0.0488982 0.412702 0.5 +-0.0615955 0.15529 0.0260796 0.564364 0.5 +-0.0625329 0.155555 0.0257427 0.56408 0.5 +0.001434 0.0980064 0.0516014 0.422905 0.453925 +-0.045692 0.126639 0.0237789 0.449286 0.5 +-0.0788838 0.153282 0.0303949 0.311202 0.374713 +-0.0824105 0.154634 0.0158747 0.519038 0.5 +-0.0563344 0.154371 0.0236088 0.375111 0.421928 +0.00990352 0.130871 0.0175976 0.745952 0.5 +-0.0358396 0.125396 0.0214464 0.339 0.405986 +-0.0728779 0.117943 -0.00788041 0.536416 0.5 +-0.0878637 0.152463 0.0169978 0.223809 0.398725 +-0.0849416 0.153745 0.0179582 0.320769 0.5 +-0.0798758 0.155212 0.019678 0.488112 0.383939 +-0.0751298 0.155996 0.0213056 0.508596 0.400481 +-0.0740322 0.156054 0.0216877 0.504528 0.5 +-0.0718747 0.151003 0.0373736 0.366745 0.5 +-0.0711064 0.152637 0.0345827 0.335669 0.5 +-0.0773991 0.152954 0.0323974 0.346772 0.424592 +-0.072308 0.159721 -0.00687103 0.322371 0.416786 +-0.0821317 0.15265 0.0057634 0.232763 0.438624 +-0.0469681 0.134154 0.0128397 0.527353 0.5 +-0.0141538 0.0965092 0.052175 0.330231 0.5 +-0.0101432 0.130124 0.0117041 0.683198 0.5 +-0.0697747 0.155761 0.0260978 0.867216 0.5 +-0.0738026 0.1492 0.0397758 0.448891 0.5 +0.0130981 0.124462 0.0316831 0.663223 0.383009 +-0.0735836 0.159386 -0.00731186 0.252485 0.5 +-0.0747481 0.158885 -0.00783629 0.298578 0.5 +0.0188202 0.124811 0.0265908 0.542267 0.5 +0.0157558 0.127182 0.025475 0.473012 0.5 +-0.0310964 0.125815 0.0157855 0.667047 0.5 +-0.0291841 0.125368 0.0164845 0.388882 0.5 +0.00258681 0.125467 0.0322572 0.472861 0.5 +-0.0830349 0.153941 0.0230111 0.378242 0.5 +-0.0428158 0.126503 0.0190139 0.507762 0.418747 +0.0483298 0.0694277 0.0246416 0.378342 0.5 +-0.0508461 0.134795 0.0276114 0.639653 0.5 +-0.0276791 0.1239 0.019992 0.458311 0.438125 +-0.0136795 0.0987823 0.0477955 0.23248 0.5 +-0.0110867 0.180248 -0.025982 0.407538 0.472618 +-0.0115119 0.181449 -0.0261319 0.383249 0.5 +-0.0119274 0.182669 -0.0262872 0.339175 0.442039 +-0.0123491 0.183911 -0.0264322 0.276975 0.410866 +-0.0184858 0.127732 0.0173962 0.406879 0.436913 +-0.0196877 0.127428 0.0169554 0.387979 0.434104 +-0.059432 0.152725 0.0327387 0.443878 0.5 +-0.055495 0.154378 0.0181054 0.408903 0.380362 +-0.0514117 0.134659 0.0288827 0.656253 0.5 +-0.0818934 0.154016 0.0102104 0.40318 0.5 +-0.0412575 0.123881 0.0239565 0.494594 0.5 +-0.00700363 0.0992954 0.0501023 0.2958 0.466487 +-0.0640598 0.170094 -0.0457055 0.607478 0.5 +-0.0645973 0.171184 -0.0458828 0.567315 0.406292 +-0.0651886 0.172101 -0.0460875 0.539895 0.5 +-0.065854 0.172894 -0.0463248 0.394163 0.5 +-0.0665218 0.173689 -0.0465659 0.366587 0.399869 +-0.067172 0.174543 -0.0467986 0.364063 0.5 +-0.0679286 0.17514 -0.0470724 0.319218 0.5 +-0.0686329 0.175846 -0.0473222 0.47296 0.5 +-0.0693592 0.176521 -0.047588 0.495339 0.402275 +-0.0701023 0.177167 -0.0478719 0.387839 0.5 +-0.0708559 0.177779 -0.0481346 0.503537 0.5 +-0.0716137 0.178389 -0.0484 0.478254 0.42879 +-0.0724407 0.178857 -0.0487083 0.458848 0.40178 +-0.0732669 0.179344 -0.0490063 0.347039 0.5 +-0.0742533 0.17954 -0.0493425 0.301522 0.370519 +-0.0754312 0.179188 -0.0498593 0.200482 0.341482 +-0.076524 0.178854 -0.050295 0.174372 0.5 +-0.0728771 0.154609 0.0294193 0.808751 0.5 +-0.0784442 0.154274 0.027518 0.411481 0.451547 +-0.0834391 0.153089 0.025871 0.325457 0.400483 +-0.00309453 0.0984522 0.0515066 0.372124 0.384996 +-0.0182235 0.123174 0.0292543 0.528715 0.5 +-0.0209427 0.127053 0.0165011 0.66913 0.5 +-0.0841262 0.110345 0.0263651 0.596458 0.5 +-0.09304 0.122895 0.0392709 0.622059 0.5 +-0.0928565 0.129591 0.0132418 0.71753 0.5 +-0.04739 0.113671 -0.0162364 0.744283 0.5 +-0.0869305 0.151358 0.010227 0.260452 0.5 +-0.087958 0.12395 0.000268768 0.490983 0.5 +-0.0635624 0.152855 0.034229 0.43093 0.5 +-0.0792347 0.153789 0.0287725 0.245169 0.5 +-0.0918136 0.129556 0.00925121 0.417069 0.5 +-0.077566 0.155252 0.0102497 0.71127 0.5 +-0.0784019 0.152013 0.0336008 0.368686 0.39272 +-0.00476401 0.100643 0.0463697 0.346331 0.5 +-0.080576 0.154494 0.0106641 0.668914 0.5 +-0.0763654 0.155962 0.0179624 0.580978 0.5 +-0.0624813 0.156041 0.0199412 0.731335 0.5 +-0.0796429 0.148681 -0.00084361 0.450413 0.5 +-0.0567286 0.155485 0.0133042 0.968602 0.5 +-0.0370133 0.1227 0.0269929 0.410848 0.355167 +-0.0861865 0.0926674 0.00242789 0.644279 0.354684 +-0.0714965 0.154091 0.0314059 0.446487 0.456163 +-0.0794589 0.155317 0.0154304 0.578788 0.5 +-0.0671228 0.150867 0.0375155 0.460684 0.450494 +-0.0222638 0.126605 0.016039 0.299115 0.5 +-0.0104152 0.0998773 0.0473736 0.198671 0.5 +-0.0587411 0.154535 0.0270999 0.958862 0.5 +-0.0597326 0.154693 0.0267485 0.944355 0.5 +-0.053757 0.152473 0.0202331 0.534412 0.5 +-0.0655517 0.155937 0.0246661 0.574725 0.392978 +-0.0665534 0.156088 0.0243177 0.587375 0.5 +-0.0746595 0.15617 0.0170913 0.633239 0.5 +-0.0650382 0.153613 0.000196596 0.922073 0.5 +-0.0788442 0.154658 0.0259054 0.411415 0.445829 +-0.0700593 0.152584 0.0349486 0.286538 0.5 +-0.0735905 0.154201 0.0306806 0.441454 0.5 +-0.0307813 0.122738 0.0233033 0.492259 0.385063 +-0.0427276 0.129253 0.0100405 0.856375 0.5 +-0.0365497 0.124951 0.0226726 0.420418 0.5 +-0.0356597 0.12459 0.0229985 0.437973 0.418466 +-0.0374342 0.125294 0.0223398 0.371757 0.447487 +-0.0212542 0.126244 0.0193308 0.378787 0.428214 +-0.0191314 0.122285 0.0303949 0.490047 0.311113 +-0.0492373 0.132883 0.0267635 0.617441 0.5 +-0.0806754 0.155074 0.0150117 0.435364 0.5 +-0.0797904 0.152563 0.0316147 0.28102 0.5 +-0.0339024 0.123839 0.0236394 0.506462 0.5 +0.0114258 0.129163 0.0238841 0.337575 0.444821 +-0.0434528 0.12491 0.0216806 0.44103 0.5 +-0.0603044 0.155837 0.0105687 0.557907 0.5 +-0.0234669 0.126337 0.0156088 0.311437 0.460484 +-0.0399791 0.126816 0.018458 0.488585 0.5 +-0.0780191 0.149419 0.0383262 0.437839 0.31537 +0.0138472 0.123867 0.0319554 0.554783 0.5 +-0.0200061 0.124102 0.0256765 0.418189 0.425224 +-0.0922854 0.116039 0.0223382 0.782626 0.5 +-0.0448181 0.0898814 -0.0220536 0.705827 0.5 +-0.0923638 0.118682 0.00930083 0.426522 0.44231 +-0.0939805 0.118754 0.0182968 0.666265 0.5 +-0.0301654 0.12556 0.01613 0.626309 0.5 +-0.0692244 0.15634 0.0190049 0.729089 0.5 +-0.0675989 0.156142 0.0239498 0.559045 0.5 +-0.0759039 0.154928 -0.00089291 0.226745 0.5 +-0.0643687 0.155314 0.00767719 0.778353 0.5 +0.0206378 0.123881 0.0271063 0.554809 0.332438 +-0.0466417 0.133657 0.014443 0.604799 0.5 +-0.0337588 0.121858 0.0267132 0.631378 0.5 +-0.0651138 0.155569 0.0262833 0.90973 0.5 +-0.0692155 0.155426 0.0044718 0.769 0.5 +-0.0581012 0.158247 0.00415445 0.188342 0.5 +-0.0701997 0.155611 0.00411308 0.670567 0.347524 +-0.0712424 0.155684 0.00373917 0.601701 0.5 +-0.0723361 0.155599 0.00334302 0.530656 0.5 +-0.0125908 0.182249 -0.0250896 0.417557 0.5 +-0.0130686 0.183424 -0.0252779 0.346102 0.436333 +-0.0135796 0.18457 -0.0255034 0.320978 0.5 +-0.0142757 0.185348 -0.0257883 0.269917 0.400778 +0.0324897 0.100233 -0.014155 0.741263 0.5 +-0.065886 0.15405 -0.00011759 0.895368 0.5 +-0.0708783 0.150832 0.0377201 0.392256 0.434005 +-0.0508607 0.133588 0.0291236 0.67257 0.5 +-0.0889341 0.0928773 0.0104474 0.776027 0.5 +-0.0782439 0.151233 0.0351897 0.334169 0.5 +-0.0734703 0.155395 0.00293075 0.383022 0.5 +-0.063913 0.169258 -0.0441943 0.674357 0.5 +-0.064466 0.170264 -0.0443864 0.617437 0.5 +-0.0650859 0.171096 -0.0446086 0.571287 0.5 +-0.0657123 0.171986 -0.0448274 0.529573 0.399195 +-0.0663498 0.172859 -0.0450539 0.473194 0.5 +-0.0670839 0.173532 -0.0453192 0.358368 0.455742 +-0.0678048 0.17421 -0.0455841 0.4145 0.5 +-0.0685375 0.17487 -0.0458569 0.384893 0.448339 +-0.0692551 0.175557 -0.0461164 0.383851 0.5 +-0.0700117 0.176166 -0.0463861 0.398643 0.473981 +-0.0707693 0.176767 -0.0466577 0.410999 0.5 +-0.0715386 0.177351 -0.0469381 0.390786 0.358066 +-0.0723674 0.177806 -0.0472523 0.371971 0.399195 +-0.0731839 0.178324 -0.0475338 0.435725 0.5 +-0.0740639 0.178692 -0.0478641 0.272812 0.5 +-0.075154 0.17882 -0.048244 0.204731 0.419254 +-0.076236 0.178558 -0.0487103 0.189415 0.403274 +-0.0747491 0.155081 0.00248708 0.220203 0.5 +-0.0666868 0.15458 -0.000433214 0.846996 0.5 +-0.0750347 0.154671 0.0286993 0.313868 0.413601 +-0.0739196 0.15466 0.0290556 0.808852 0.5 +-0.0796085 0.154132 0.0271276 0.40649 0.5 +-0.0847891 0.15265 0.0254465 0.287244 0.5 +0.00795856 0.126912 0.0298215 0.387778 0.5 +-0.0348246 0.12664 0.0173665 0.580833 0.5 +-0.0247298 0.125997 0.0151584 0.448833 0.5 +0.0105508 0.12954 0.0235608 0.418359 0.5 +-0.0846054 0.11036 0.02536 0.657102 0.5 +-0.0242296 0.0941248 -0.0298734 0.302876 0.453207 +0.0252231 0.117755 -0.00691168 0.505281 0.5 +0.0441357 0.0659575 -7.19207e-05 0.541429 0.5 +-0.0674507 0.155183 -0.000720573 0.780353 0.5 +-0.0641648 0.15616 0.0149932 0.809436 0.5 +-0.065493 0.153273 0.0335324 0.352862 0.444268 +-0.0645039 0.15312 0.03389 0.386888 0.36142 +-0.0805113 0.153427 0.0283513 0.306193 0.397376 +-0.0682182 0.15577 -0.00101225 0.694409 0.5 +-0.0720961 0.156364 0.000513559 0.281993 0.5 +-0.00782261 0.0985178 0.051315 0.344758 0.401467 +-0.0804072 0.155064 0.0209566 0.44587 0.5 +-0.0820606 0.151973 0.00432386 0.258574 0.302957 +-0.0258738 0.125824 0.0147443 0.498319 0.5 +-0.027315 0.119916 0.0290701 0.352091 0.357105 +-0.0561651 0.153258 0.0280528 0.381029 0.5 +-0.0674005 0.156127 0.0138467 0.821138 0.5 +-0.0811445 0.153633 0.00754624 0.328916 0.5 +-0.0825551 0.152911 0.00706582 0.220089 0.5 +-0.0626717 0.152516 0.0345768 0.350582 0.5 +-0.0614607 0.155749 0.0232098 0.616235 0.378027 +-0.0587357 0.153161 0.0315118 0.45605 0.344583 +-0.0763164 0.155546 0.0238171 0.80251 0.5 +-0.0270194 0.12568 0.0143315 0.540272 0.375924 +-0.058599 0.155538 0.0184341 0.767749 0.5 +0.0283214 0.115107 0.0315696 0.67894 0.5 +-0.0532571 0.151368 0.0204421 0.58152 0.5 +0.027659 0.115893 0.031317 0.646481 0.5 +0.026954 0.116596 0.0310646 0.645431 0.5 +-0.0477088 0.132967 0.0228963 0.56096 0.478683 +-0.0463447 0.129406 0.0234768 0.524225 0.454305 +-0.0442161 0.123225 0.0243959 0.45759 0.5 +-0.0432285 0.12305 0.0247373 0.381434 0.453587 +-0.0751884 0.153035 0.033144 0.348955 0.422488 +0.0262273 0.117277 0.0307934 0.649075 0.5 +0.0255359 0.118038 0.0305151 0.620035 0.5 +0.0249311 0.118938 0.0303034 0.62139 0.5 +0.0243137 0.119818 0.0300741 0.598185 0.5 +-0.0894613 0.148789 0.0111841 0.389625 0.5 +0.0236959 0.120687 0.0298434 0.551951 0.5 +0.0229897 0.121378 0.0295865 0.520167 0.5 +-0.0497286 0.133927 0.0265636 0.628151 0.5 +0.0222732 0.12205 0.0293193 0.502202 0.5 +-0.0452756 0.131436 0.0105618 0.445235 0.5 +0.0214986 0.122612 0.0290301 0.482105 0.313607 +-0.0874426 0.110454 0.0173412 0.616668 0.5 +-0.00127486 0.120883 -0.0121504 0.570686 0.477905 +-0.0211708 0.123144 -0.00636628 0.464551 0.461206 +-0.0891077 0.101031 0.0163881 0.849547 0.5 +0.0207235 0.123161 0.0287274 0.569223 0.443379 +0.0198592 0.123572 0.0284223 0.55317 0.5 +0.0189962 0.123953 0.0281041 0.556545 0.334959 +0.0181521 0.124421 0.0277923 0.585191 0.5 +-0.0867734 0.103584 0.00638913 0.478693 0.46219 +-0.068761 0.17368 -0.0560297 0.67139 0.5 +-0.0471993 0.162132 -0.00733312 0.393245 0.445005 +-0.0718999 0.113582 -0.00821597 0.492024 0.5 +-0.00529252 0.125273 -0.00885488 0.533246 0.5 +-0.0759079 0.150006 -0.00888842 0.659731 0.5 +-0.0760686 0.150008 -0.00987485 0.734289 0.5 +0.0173744 0.124995 0.027504 0.470839 0.5 +-0.0778099 0.148638 -0.00388521 0.541877 0.444387 +0.0166594 0.125691 0.027245 0.457036 0.460414 +-0.0689895 0.156345 -0.00130196 0.617683 0.5 +-0.0408822 0.128708 0.0107294 0.734262 0.5 +-0.0571357 0.158766 0.00595884 0.223732 0.311272 +0.015933 0.126357 0.0269718 0.541836 0.5 +0.0151645 0.126939 0.0266898 0.501243 0.5 +-0.077651 0.154407 0.00585132 0.369739 0.455328 +-0.079025 0.153836 0.00536375 0.359527 0.5 +-0.0769628 0.150462 0.0371334 0.379516 0.384787 +-0.050909 0.135812 0.0260882 0.614199 0.5 +0.0143052 0.127349 0.0263844 0.45688 0.5 +-0.0132255 0.182074 -0.023933 0.548246 0.5 +-0.0137231 0.183161 -0.0241068 0.383834 0.5 +-0.014166 0.184338 -0.0242563 0.32807 0.431458 +-0.0146296 0.185817 -0.0244743 0.248249 0.5 +-0.0153476 0.186173 -0.0245951 0.276676 0.367128 +-0.087002 0.140499 0.00821758 0.373697 0.443001 +-0.0602648 0.153206 0.0324327 0.403612 0.5 +-0.063441 0.156071 0.0225051 0.620803 0.366391 +0.0134717 0.127798 0.0260714 0.59224 0.408422 +-0.0237797 0.125538 0.0184413 0.306217 0.5 +0.0126008 0.128196 0.0257553 0.472702 0.339571 +-0.0637423 0.168365 -0.0426884 0.662365 0.5 +-0.0643109 0.169365 -0.0428818 0.635788 0.5 +-0.0649225 0.170267 -0.0430968 0.626363 0.5 +-0.0655596 0.171143 -0.0433207 0.575505 0.5 +-0.0662148 0.171945 -0.0435535 0.528281 0.5 +-0.066881 0.172737 -0.0437921 0.500122 0.395333 +-0.06762 0.17339 -0.0440641 0.385173 0.394471 +-0.0684218 0.173931 -0.0443685 0.32556 0.5 +-0.0691226 0.174646 -0.044619 0.375806 0.456951 +-0.0698489 0.175309 -0.0448893 0.377981 0.5 +-0.0706135 0.175903 -0.0451833 0.402479 0.34786 +-0.071418 0.176406 -0.0454588 0.40572 0.403952 +-0.0721908 0.176974 -0.0457483 0.38054 0.471774 +-0.0730605 0.177343 -0.046073 0.352853 0.471419 +-0.0739332 0.177709 -0.0464055 0.400969 0.5 +-0.0749384 0.177982 -0.0467773 0.278161 0.43787 +-0.0759405 0.177963 -0.0471435 0.225088 0.291796 +-0.0771053 0.177652 -0.0476237 0.209157 0.5 +-0.0757231 0.155771 0.0225635 0.797224 0.5 +-0.0627957 0.153425 0.0330074 0.403736 0.5 +-0.066713 0.154086 0.0315791 0.840931 0.5 +-0.0686943 0.154419 0.0308917 0.472006 0.453711 +-0.0707318 0.154624 0.0301689 0.462599 0.5 +-0.0761439 0.154623 0.0283179 0.318901 0.398088 +-0.0573804 0.151726 0.0319973 0.431658 0.5 +0.0116873 0.128578 0.0254498 0.347269 0.407975 +0.0108543 0.128955 0.0251156 0.344823 0.391206 +0.00997537 0.129323 0.0247881 0.426368 0.369992 +-0.0849555 0.110375 0.0243559 0.678838 0.5 +-0.084184 0.106292 0.0253661 0.65118 0.5 +-0.0866976 0.109058 0.0133472 0.739051 0.5 +-0.0866673 0.109085 0.0143521 0.578631 0.451663 +-0.0865776 0.109066 0.0163469 0.629867 0.5 +-0.0875333 0.0927687 0.0054156 0.679674 0.5 +-0.038368 0.0457007 -0.0229731 0.426285 0.5 +-0.0928971 0.117368 0.0123132 0.491931 0.5 +0.00904657 0.129598 0.024451 0.41019 0.426873 +-0.0321846 0.121876 0.025771 0.579432 0.5 +-0.0656879 0.156227 0.015899 0.79061 0.5 +-0.0664848 0.153437 0.0331838 0.354306 0.5 +-0.0674788 0.153589 0.0328337 0.344578 0.5 +-0.0817249 0.153192 0.027965 0.28371 0.282531 +-0.0592802 0.154415 0.0283608 0.951004 0.5 +0.00811587 0.129858 0.0241077 0.543404 0.414814 +-0.0876017 0.152029 0.0126504 0.269854 0.298128 +-0.0819436 0.154696 0.0145801 0.435313 0.449778 +-0.0740319 0.152138 0.0351116 0.402806 0.419416 +-0.0494828 0.135763 0.0221907 0.769818 0.5 +-0.069971 0.156225 0.0143836 0.776006 0.5 +-0.0713089 0.156055 0.0109968 0.807733 0.5 +-0.0796959 0.154266 0.00805358 0.596019 0.5 +0.00713749 0.130032 0.0237524 0.548164 0.410851 +-0.0341212 0.124555 0.022076 0.455627 0.412619 +-0.0858293 0.151702 0.00893089 0.214811 0.360321 +-0.0792484 0.154932 0.0111245 0.68714 0.5 +-0.0605353 0.155832 0.0177371 0.826796 0.5 +-0.0595443 0.155728 0.018094 0.76787 0.5 +-0.0556924 0.159448 0.00648476 0.273937 0.5 +-0.0854294 0.151325 0.0282936 0.297634 0.5 +0.00616007 0.130231 0.0233995 0.528446 0.42562 +-0.0439068 0.129921 0.011069 0.565651 0.5 +-0.0413654 0.128702 0.0120304 0.707292 0.5 +-0.0385209 0.128019 0.0130694 0.653876 0.5 +-0.0271627 0.125166 0.0172175 0.504011 0.408947 +-0.0652464 0.154114 0.00157024 0.908085 0.5 +-0.069822 0.156776 -0.00162593 0.545917 0.5 +-0.0724089 0.155986 0.0106072 0.789045 0.5 +0.00517895 0.130408 0.0230466 0.551604 0.406902 +-0.0896787 0.135012 0.00721892 0.550183 0.5 +0.0042017 0.130577 0.0226921 0.553759 0.5 +-0.067594 0.162379 -0.0559888 0.353644 0.31296 +-0.0887371 0.0955614 0.00743378 0.506013 0.5 +-0.0935783 0.124186 0.0262856 0.713437 0.5 +-0.094388 0.124185 0.0232804 0.668279 0.5 +0.00962203 0.129808 0.0232185 0.567041 0.5 +0.00321463 0.130705 0.0223233 0.517365 0.5 +0.00211859 0.130671 0.0219319 0.537616 0.5 +0.00107791 0.130709 0.0215491 0.553365 0.5 +-1.59767e-05 0.130672 0.0211571 0.481567 0.430123 +-0.087234 0.0981695 0.00341761 0.4296 0.5 +-0.0853843 0.0980412 -0.000554198 0.453316 0.5 +-0.0849311 0.0980032 -0.00158096 0.452736 0.390978 +-0.0764395 0.0988661 -0.011539 0.529633 0.5 +-0.0891047 0.101026 0.0153901 0.826645 0.5 +-0.0792032 0.10313 -0.00756064 0.528048 0.5 +-0.0890821 0.101017 0.0143926 0.806966 0.5 +-0.0800798 0.103192 -0.0065999 0.540449 0.5 +-0.0404379 0.124957 -0.00812413 0.574129 0.5 +-0.0394569 0.124785 -0.00795634 0.456648 0.5 +-0.0842393 0.107513 0.00238784 0.452446 0.5 +-0.0837744 0.107497 0.00138169 0.351934 0.445781 +-0.0719363 0.129668 -0.0086833 0.4298 0.5 +-0.00287353 0.108795 -0.0218002 0.568867 0.482811 +-0.0638254 0.0924713 -0.0188016 0.657758 0.5 +-0.0922608 0.117447 0.0323019 0.518303 0.5 +-0.0917594 0.117442 0.030311 0.52777 0.5 +-0.0914492 0.117418 0.0293041 0.57693 0.5 +-0.0731283 0.155734 0.00889607 0.736951 0.5 +-0.0390704 0.124042 0.0247581 0.311966 0.388839 +-0.0389634 0.128304 0.0114309 0.704612 0.5 +0.00874316 0.130156 0.0228898 0.56284 0.5 +0.00776642 0.130336 0.022539 0.562826 0.5 +-0.072697 0.155649 0.00759319 0.715062 0.5 +-0.076212 0.155059 0.00635026 0.397599 0.5 +-0.0705953 0.157132 -0.0018785 0.339722 0.430122 +-0.0836837 0.151385 0.0303528 0.287845 0.5 +-0.0716243 0.157487 -0.00225608 0.326515 0.5 +-0.0672661 0.155709 0.00954294 0.822186 0.5 +-0.00111302 0.130629 0.0207594 0.512372 0.5 +-0.00209707 0.130745 0.0203917 0.533385 0.5 +-0.00324635 0.130613 0.0199814 0.539749 0.5 +-0.0150259 0.185694 -0.0231645 0.318764 0.466605 +-0.0156461 0.186781 -0.0233704 0.318204 0.5 +-0.0937433 0.118772 0.0222988 0.751549 0.5 +0.0180016 0.125305 0.0262968 0.450789 0.5 +-0.0800697 0.154441 0.0255089 0.292083 0.393115 +-0.0817292 0.154617 0.0205129 0.443873 0.406407 +-0.054422 0.152991 0.0228754 0.432782 0.451174 +-0.00434542 0.130565 0.019581 0.579239 0.5 +-0.0635933 0.167459 -0.0411888 0.706226 0.5 +-0.0641553 0.168532 -0.0413683 0.642428 0.5 +-0.0647592 0.169439 -0.0415812 0.622087 0.5 +-0.0653795 0.17033 -0.0418012 0.611243 0.5 +-0.0660426 0.171124 -0.0420386 0.571196 0.5 +-0.0667171 0.171901 -0.0422833 0.533067 0.5 +-0.0674328 0.172594 -0.0425404 0.661149 0.5 +-0.0681661 0.173216 -0.0428508 0.377002 0.42015 +-0.0689362 0.173831 -0.0430963 0.467354 0.423496 +-0.069711 0.1744 -0.043385 0.372832 0.351185 +-0.0704834 0.174975 -0.0436743 0.385924 0.457959 +-0.0712521 0.17555 -0.0439596 0.38356 0.5 +-0.0720698 0.176015 -0.0442709 0.379128 0.5 +-0.0728954 0.176495 -0.0445729 0.346949 0.440128 +-0.0736872 0.176894 -0.0449171 0.383964 0.456191 +-0.074679 0.177203 -0.0452121 0.390405 0.418022 +-0.0757023 0.177226 -0.0456228 0.242758 0.5 +-0.0768893 0.176966 -0.046083 0.227579 0.377145 +-0.0661966 0.15171 0.0363078 0.379611 0.5 +-0.0637376 0.15365 0.0326508 0.496388 0.5 +-0.0621042 0.153787 0.0317461 0.906238 0.5 +-0.0813458 0.154098 0.0250842 0.311039 0.5 +-0.0724662 0.156284 0.0178613 0.597807 0.5 +-0.0472567 0.132959 0.0215876 0.695814 0.5 +-0.0927119 0.117479 0.0363033 0.64398 0.5 +0.0067865 0.130497 0.0221788 0.57972 0.5 +0.00580886 0.130668 0.0218239 0.58451 0.5 +-0.0888763 0.0982745 0.00841224 0.545621 0.464297 +-0.0923737 0.128196 0.0102559 0.430661 0.5 +-0.0817922 0.143171 0.000171875 0.470692 0.5 +-0.0616525 0.116813 -0.0113459 0.569925 0.5 +-0.0846182 0.106299 0.024344 0.647284 0.5 +-0.0848969 0.106313 0.0233612 0.643467 0.458224 +-0.0865489 0.109072 0.0153468 0.61611 0.5 +-0.093041 0.12831 0.0262642 0.483191 0.458764 +-0.0908913 0.139194 0.0171389 0.390055 0.447193 +-0.0931626 0.117374 0.0143043 0.566059 0.5 +-0.00538241 0.130597 0.0192035 0.576033 0.360149 +-0.0727258 0.157431 -0.00265266 0.268239 0.5 +-0.0740278 0.157006 -0.00316778 0.231234 0.234848 +-0.0314035 0.121359 0.0260922 0.418294 0.5 +-0.0670917 0.155954 0.0255845 0.53503 0.5 +-0.0612038 0.154834 0.027675 0.939001 0.5 +-0.0602698 0.154572 0.0280125 0.937019 0.5 +-0.0681398 0.156014 0.0252192 0.533101 0.5 +-0.0820398 0.150272 0.03397 0.333661 0.5 +-0.0896372 0.0929496 0.0174335 0.591835 0.5 +-0.0750251 0.152273 0.0347437 0.385508 0.5 +-0.0689807 0.155012 0.0293114 0.455896 0.5 +-0.0702091 0.156071 0.0113882 0.792094 0.5 +-0.0157027 0.123907 0.0301351 0.458799 0.5 +-0.0924704 0.117461 0.033305 0.528836 0.5 +-0.0924453 0.114684 0.0163206 0.67708 0.5 +-0.0065332 0.130449 0.0187888 0.564311 0.5 +-0.0245954 0.122675 -0.00581505 0.49459 0.5 +-0.00443014 0.100204 0.0479984 0.298848 0.5 +-0.0709364 0.151841 0.036169 0.306998 0.404127 +0.00477967 0.130785 0.0214562 0.590139 0.5 +-0.0572144 0.154757 0.0232881 0.367409 0.469179 +-0.0622625 0.155951 0.0127725 0.751952 0.5 +-0.0620032 0.154899 0.00420466 0.365568 0.5 +0.0038008 0.130941 0.0210967 0.587176 0.5 +-0.0771272 0.155133 0.00894547 0.706861 0.5 +-0.0290767 0.121891 0.0239314 0.547778 0.5 +-0.0525571 0.150877 0.0178 0.675547 0.5 +-0.00768551 0.130297 0.0183702 0.521186 0.5 +-0.00883076 0.130134 0.0179537 0.52589 0.5 +-0.00998113 0.12997 0.0175362 0.527405 0.5 +-0.0862421 0.14327 0.00816028 0.576547 0.5 +-0.091117 0.143373 0.0231646 0.694145 0.5 +-0.0809488 0.144539 -0.000825536 0.639063 0.5 +-0.0737149 0.158251 -0.0299203 0.421822 0.5 +-0.0754296 0.152593 -0.0138871 0.723501 0.319982 +-0.0889571 0.0955775 0.00843273 0.558558 0.5 +-0.0890892 0.0955882 0.00942496 0.593084 0.5 +-0.0891519 0.0956005 0.0104313 0.590274 0.5 +-0.0892111 0.0956026 0.0114219 0.581238 0.5 +-0.093596 0.126936 0.0252692 0.49385 0.5 +-0.0912918 0.11477 0.0353243 0.474485 0.5 +-0.0911122 0.11473 0.0343167 0.449128 0.5 +-0.0875561 0.0968363 0.00343541 0.50381 0.5 +-0.0878452 0.096803 0.00445868 0.443299 0.440522 +-0.0879813 0.0968653 0.0054141 0.441076 0.46831 +-0.0859359 0.0980836 0.000413824 0.471518 0.5 +-0.0782927 0.098997 -0.00960155 0.721533 0.5 +-0.0890673 0.101028 0.0173829 0.597195 0.483376 +-0.0889728 0.101008 0.0133925 0.812355 0.5 +-0.0888771 0.100994 0.011394 0.800892 0.5 +-0.0809107 0.103235 -0.00559799 0.521545 0.5 +-0.0818428 0.103274 -0.0045788 0.514674 0.5 +-0.0385101 0.124563 -0.00772445 0.466649 0.456518 +-0.0477678 0.125154 -0.0082648 0.575843 0.5 +-0.0831283 0.107448 0.000408412 0.367767 0.405704 +-0.0825753 0.107428 -0.000626511 0.380508 0.332089 +-0.0821717 0.11152 0.00033013 0.711982 0.5 +-0.0920931 0.126941 0.031257 0.617847 0.5 +-0.0800935 0.138964 -0.00379173 0.717935 0.5 +-0.0686053 0.155434 -0.0518073 0.241952 0.5 +-0.0926576 0.117463 0.0373027 0.659396 0.5 +-0.0719733 0.155857 0.00930845 0.79415 0.5 +-0.0111299 0.129809 0.0171219 0.497013 0.5 +-0.00516147 0.100957 0.0442706 0.126305 0 +-0.0316114 0.123192 0.0229888 0.490955 0.5 +-0.0442513 0.120873 0.0273959 0.474362 0.5 +-0.0447319 0.125394 0.0226968 0.45165 0.5 +-0.0456062 0.127883 0.0223049 0.451954 0.5 +-0.0442317 0.12547 0.021384 0.457352 0.446565 +0.0249541 0.12014 0.0288767 0.581423 0.5 +-0.0707351 0.156208 0.0228366 0.570101 0.376426 +-0.0690676 0.152436 0.0353067 0.318928 0.45254 +-0.0662219 0.155662 0.00991681 0.829496 0.5 +-0.0651233 0.155698 0.0103085 0.811994 0.5 +-0.0683614 0.15578 0.00913576 0.811142 0.5 +-0.0122771 0.129643 0.0167063 0.508535 0.5 +-0.0154824 0.185702 -0.0219175 0.335086 0.5 +-0.0159771 0.186924 -0.0221541 0.278008 0.45228 +-0.0859011 0.134922 0.00126737 0.646063 0.5 +-0.0893171 0.151601 0.0194969 0.267221 0.5 +-0.0354864 0.12379 0.0245568 0.480334 0.5 +-0.0847135 0.152577 0.00925173 0.231958 0.5 +-0.013542 0.129298 0.0162538 0.500219 0.5 +-0.0147406 0.129011 0.0158201 0.51722 0.5 +-0.0634115 0.166723 -0.0396505 0.75688 0.5 +-0.0639453 0.167747 -0.0398404 0.702692 0.5 +-0.0645483 0.168715 -0.0400434 0.683488 0.5 +-0.0651763 0.16954 -0.0402745 0.630943 0.357183 +-0.0658394 0.170333 -0.0405107 0.59557 0.5 +-0.0665181 0.171112 -0.0407548 0.587367 0.5 +-0.0672076 0.171872 -0.0410051 0.563003 0.5 +-0.067993 0.172429 -0.0412978 0.510583 0.5 +-0.0687437 0.173038 -0.0415702 0.502667 0.5 +-0.0695038 0.173637 -0.0418473 0.499477 0.5 +-0.0702811 0.17421 -0.0421289 0.461191 0.410858 +-0.0710541 0.174778 -0.0424234 0.448779 0.5 +-0.0718647 0.175275 -0.0427173 0.57048 0.5 +-0.0726957 0.175719 -0.0430358 0.397547 0.38373 +-0.0735436 0.175947 -0.0433626 0.330307 0.364925 +-0.0744971 0.176396 -0.0436946 0.36777 0.448135 +-0.0756137 0.176488 -0.0441876 0.300818 0.303156 +-0.0767078 0.176155 -0.0445645 0.245453 0.5 +-0.077704 0.175863 -0.0450747 0.272903 0.38336 +0.0172444 0.125917 0.0260258 0.442006 0.5 +-0.0762839 0.155844 0.0209052 0.50868 0.5 +-0.0160023 0.128658 0.015367 0.478986 0.5 +-0.0670539 0.154574 0.0299913 0.867925 0.5 +-0.0734894 0.156164 0.020416 0.514284 0.5 +-0.0745879 0.156108 0.0200327 0.537019 0.5 +-0.0780015 0.155773 0.018849 0.548924 0.5 +-0.0172605 0.128293 0.0149127 0.498327 0.5 +-0.0851868 0.0966727 -0.00156833 0.425513 0.5 +0.0569661 0.0701435 0.00568959 0.538818 0.5 +-0.0856518 0.096702 -0.000561949 0.447658 0.5 +-0.088653 0.0982606 0.00741366 0.410829 0.5 +-0.0885378 0.137788 0.0102157 0.405396 0.464778 +-0.0770983 0.150031 -0.00589737 0.544206 0.409235 +-0.0902136 0.13513 0.0232187 0.839283 0.5 +-0.0299989 0.178534 -0.0140055 0.383289 0.5 +-0.0851762 0.106326 0.0223754 0.63021 0.463991 +-0.0866227 0.109058 0.0173532 0.67866 0.5 +-0.0914252 0.114627 0.0103302 0.335405 0.476851 +-0.0719895 0.163815 -0.0429694 0.368978 0.449848 +-0.0911855 0.114622 0.00933636 0.315989 0.471837 +0.00310867 0.129093 0.0266332 0.40008 0.438033 +-0.0482461 0.131793 0.0256765 0.596518 0.5 +-0.0786725 0.15564 0.0171569 0.585628 0.323096 +-0.0734724 0.155984 0.0233451 0.841512 0.5 +-0.0183995 0.128105 0.0144964 0.510537 0.5 +-0.062196 0.154993 0.0273195 0.928039 0.5 +-0.0461819 0.130936 0.0220239 0.509255 0.473382 +-0.0770801 0.15139 0.0355785 0.417686 0.5 +-0.064488 0.156133 0.0221359 0.641473 0.5 +-0.0538607 0.152062 0.0231076 0.479066 0.5 +-0.00904759 0.0994069 0.0493883 0.24962 0.5 +-0.0691125 0.156051 0.011784 0.796511 0.5 +-0.0171117 0.123425 0.0297114 0.49596 0.5 +-0.0196618 0.127752 0.0140421 0.453831 0.5 +-0.0766305 0.155099 0.0076657 0.632936 0.5 +-0.00691412 0.124317 0.0332409 0.479514 0.362999 +-0.00592646 0.12418 0.0336126 0.497508 0.5 +-0.00213372 0.123188 0.0349488 0.558662 0.36019 +-0.00125147 0.122854 0.0353 0.584082 0.5 +-0.078386 0.154762 0.00850622 0.691541 0.5 +0.0493697 0.0693787 0.0250272 0.436482 0.5 +-0.00570768 0.129479 0.0248833 0.817042 0.5 +-0.0710465 0.156278 0.000878407 0.506061 0.441607 +-0.00501253 0.125042 0.0324689 0.46715 0.5 +-0.00605897 0.125119 0.0321155 0.435354 0.406408 +-0.00710449 0.125174 0.0317411 0.417766 0.401112 +-0.0209254 0.127401 0.0135903 0.460998 0.5 +-0.0221215 0.127119 0.0131583 0.474264 0.5 +0.0349031 0.111324 -0.00180439 0.632949 0.5 +0.0342895 0.112223 -0.00202032 0.524053 0.5 +0.0336372 0.112962 -0.00230707 0.521245 0.486938 +-0.0781607 0.0935055 -0.0115755 0.49968 0.476752 +-0.0772165 0.0934484 -0.0125951 0.514197 0.5 +-0.073438 0.145781 -0.0138542 0.280488 0.5 +-0.091649 0.146116 0.0221478 0.652735 0.446108 +-0.09096 0.148814 0.0141536 0.4138 0.420318 +-0.0743025 0.151276 -0.0308835 0.422032 0.5 +-0.0893667 0.135016 0.00621309 0.499728 0.5 +-0.0890002 0.134996 0.00522535 0.347697 0.444767 +-0.0715687 0.153984 -0.0439053 0.407605 0.5 +-0.0941104 0.126894 0.0182531 0.782943 0.5 +-0.0772795 0.155549 -0.0169029 0.436834 0.5 +-0.0924522 0.125595 0.0392516 0.846712 0.5 +0.031866 0.115189 -0.00211013 0.524001 0.485056 +-0.0762012 0.149986 -0.0138757 0.730145 0.5 +-0.0905185 0.148805 0.0131551 0.397923 0.445313 +-0.0883434 0.0968836 0.00640652 0.409124 0.43057 +-0.086306 0.0981081 0.00140707 0.463708 0.326802 +-0.0773163 0.098935 -0.0105842 0.508921 0.464986 +-0.0791658 0.0990564 -0.00863296 0.699878 0.5 +-0.0801842 0.0990978 -0.00757647 0.501881 0.5 +-0.0888256 0.100978 0.0104077 0.779812 0.5 +-0.0889531 0.100999 0.0124002 0.812831 0.5 +-0.0805618 0.101855 -0.00659893 0.512962 0.5 +-0.079699 0.101798 -0.00757602 0.515005 0.5 +-0.0488684 0.125064 -0.00815774 0.620121 0.5 +-0.0785113 0.10447 -0.00758869 0.549638 0.5 +-0.0861826 0.104908 0.00538017 0.507837 0.5 +-0.0798316 0.111318 -0.00180655 0.530621 0.431561 +-0.0746935 0.111142 -0.00760178 0.546761 0.5 +0.0250885 0.119458 -0.00473925 0.634797 0.5 +-0.0618301 0.0924936 -0.0189652 0.644902 0.5 +-0.0931712 0.117411 0.0223074 0.791033 0.5 +-0.0708769 0.155921 0.00969704 0.812121 0.5 +-0.0233794 0.126748 0.0127038 0.357905 0.5 +-0.076573 0.153595 0.0311713 0.353992 0.423281 +-0.0769778 0.155918 0.0162848 0.630854 0.5 +-0.0504069 0.135839 0.0247969 0.607599 0.5 +-0.0441024 0.124581 0.0229348 0.421357 0.5 +-0.0299566 0.122268 0.0236125 0.45741 0.441643 +-0.0451337 0.127804 0.0210049 0.493331 0.437367 +-0.0618314 0.155872 0.0114752 0.700853 0.5 +-0.0640267 0.155773 0.0106957 0.807755 0.5 +-0.000378579 0.101174 0.0451223 0.290335 0.5 +-0.00338536 0.100168 0.0483773 0.304116 0.5 +-0.0807714 0.153393 0.00628177 0.32777 0.464672 +-0.0793953 0.154018 0.0066962 0.411032 0.5 +-0.0246455 0.126418 0.012252 0.538261 0.5 +-0.0160151 0.185636 -0.0207096 0.356062 0.444944 +-0.0163792 0.186908 -0.0208435 0.331362 0.417911 +-0.017221 0.187225 -0.0211553 0.257454 0.322465 +-0.0892823 0.141954 0.0132429 0.571623 0.5 +-0.0293794 0.119962 0.0282913 0.350148 0.381345 +-0.0640268 0.154208 0.0310565 0.880254 0.5 +-0.0434655 0.127159 0.0186744 0.428147 0.5 +-0.0259005 0.126064 0.0117956 0.607316 0.5 +-0.0270407 0.125883 0.0113821 0.647596 0.5 +-0.063712 0.167032 -0.0383216 0.714303 0.5 +-0.0642974 0.167953 -0.0385345 0.694339 0.5 +-0.0649318 0.168832 -0.0387572 0.693126 0.5 +-0.0655972 0.169628 -0.0389928 0.641154 0.5 +-0.0662716 0.170413 -0.0392349 0.628568 0.348433 +-0.0669901 0.171097 -0.0394962 0.579449 0.5 +-0.0677151 0.171772 -0.0397619 0.573191 0.441525 +-0.0684896 0.172346 -0.0400602 0.420947 0.459255 +-0.0692316 0.172989 -0.0403442 0.484946 0.452002 +-0.070025 0.173518 -0.0406121 0.419102 0.38893 +-0.0708508 0.173984 -0.0409178 0.334596 0.434996 +-0.071633 0.174549 -0.0412084 0.399149 0.456555 +-0.0724955 0.174948 -0.0415233 0.527189 0.5 +-0.073438 0.175304 -0.0418354 0.367327 0.455799 +-0.0742949 0.17555 -0.0422185 0.307078 0.5 +-0.0752747 0.175704 -0.0425921 0.299412 0.5 +-0.0764469 0.175411 -0.0430646 0.266272 0.5 +-0.0776263 0.175005 -0.043567 0.272244 0.421096 +0.0236097 0.121674 0.028372 0.507015 0.5 +-0.0110238 0.098585 0.0502027 0.348508 0.5 +-0.074262 0.155148 0.0274653 0.816714 0.5 +-0.071237 0.156366 0.0212013 0.569686 0.5 +-0.0281815 0.125725 0.0109634 0.709208 0.5 +-0.0292627 0.125707 0.0105611 0.768059 0.5 +-0.0301947 0.125922 0.0102205 0.856351 0.5 +-0.0311244 0.126183 0.00987945 0.879401 0.5 +0.0577347 0.0705061 0.0074689 0.571292 0.5 +0.0569193 0.0710092 0.00714855 0.593224 0.413983 +0.0560223 0.0713695 0.00682475 0.543846 0.5 +-0.0860277 0.0967286 0.000430639 0.485286 0.5 +-0.0883068 0.098239 0.00641854 0.50839 0.459329 +-0.092972 0.125468 0.0112596 0.614765 0.388524 +-0.090971 0.141997 0.0221703 0.786315 0.5 +-0.0849952 0.141833 0.00418636 0.431966 0.5 +-0.0759663 0.179251 -0.0520449 0.195519 0.5 +-0.085611 0.106332 0.02136 0.627503 0.5 +-0.0865394 0.109089 0.0183378 0.722139 0.5 +-0.0538048 0.159768 -0.00183632 0.233189 0.5 +-0.0614351 0.156032 0.020314 0.711882 0.5 +-0.0320503 0.12646 0.00953655 0.88404 0.5 +-0.0842181 0.153993 0.0196689 0.295353 0.5 +-0.0792564 0.155246 0.0213567 0.464925 0.5 +-0.0452904 0.125307 0.0239255 0.407945 0.448549 +0.00396412 0.0977772 0.0510597 0.476891 0.5 +-0.0584012 0.154047 0.0286827 0.969766 0.5 +-0.0488788 0.134867 0.0224297 0.58517 0.488238 +-0.0740662 0.155757 0.0246008 0.811509 0.5 +-0.0329323 0.126815 0.00921204 0.886564 0.5 +-0.0467117 0.131872 0.0218067 0.660528 0.5 +-0.0680156 0.156066 0.0121787 0.812693 0.270919 +-0.0253546 0.121816 0.0267508 0.344512 0.5 +-0.0728072 0.15012 0.0385587 0.414505 0.423068 +-0.0706375 0.156126 0.0126907 0.789315 0.5 +-0.0338201 0.127158 0.00888963 0.886443 0.5 +-0.000391601 0.123621 0.0341495 0.561761 0.428984 +-0.00127097 0.123959 0.0338052 0.536326 0.425495 +-0.00226088 0.124171 0.0334893 0.508731 0.5 +-0.00308571 0.124589 0.0331408 0.508853 0.361139 +-0.0683525 0.155277 0.00186884 0.792517 0.5 +-0.00680045 0.129424 0.0244883 0.753365 0.5 +-0.003677 0.129286 0.0256231 0.444866 0.5 +-0.00466385 0.129429 0.0252614 0.483819 0.5 +-0.0428508 0.127424 0.0174253 0.422102 0.5 +-0.0419902 0.127061 0.0177443 0.321737 0.5 +0.00275904 0.130985 0.0207146 0.579553 0.368468 +0.0361312 0.11046 8.71157e-05 0.649645 0.5 +0.0354824 0.111268 -0.000157004 0.644266 0.472682 +0.0348501 0.112087 -0.000408122 0.511466 0.5 +0.0342272 0.113045 -0.000582475 0.441365 0.5 +0.0335193 0.114014 -0.000843968 0.538676 0.479924 +0.032895 0.11463 -0.00105927 0.533304 0.5 +-0.0761849 0.0933719 -0.0135017 0.391022 0.480012 +0.0120538 0.0907862 -0.0301745 0.595477 0.5 +-0.0568073 0.122 -0.00880521 0.839764 0.5 +-0.0761998 0.14998 -0.0148766 0.746251 0.5 +0.0291243 0.117712 -0.00241857 0.620821 0.5 +0.0283176 0.118208 -0.00273298 0.629458 0.5 +0.0275012 0.1187 -0.00304813 0.617849 0.477325 +-0.0893959 0.0942918 0.0174254 0.857367 0.5 +-0.0894235 0.0942851 0.0164251 0.612997 0.475308 +-0.0895241 0.094286 0.0154262 0.613488 0.463078 +-0.0895098 0.0942825 0.014433 0.580877 0.470295 +-0.0865451 0.110395 0.00835385 0.303627 0.467143 +0.0419459 0.0625408 -0.0027477 0.506554 0.5 +-0.0757755 0.0948358 -0.0134771 0.508124 0.5 +-0.0765794 0.15423 -0.00189723 0.405539 0.5 +-0.0889751 0.0969295 0.00842099 0.763033 0.5 +-0.0867747 0.0981404 0.0024092 0.437565 0.5 +-0.0844928 0.0979861 -0.00258986 0.455025 0.380976 +-0.0839499 0.0979633 -0.0036111 0.431274 0.4574 +-0.0813824 0.099165 -0.00657823 0.518749 0.5 +-0.0824727 0.0992304 -0.00559052 0.504267 0.5 +-0.0264473 0.181471 -0.0150302 0.289378 0.5 +-0.0892091 0.137796 0.0122163 0.450345 0.5 +-0.0787438 0.101744 -0.00857364 0.492921 0.5 +-0.0941682 0.126929 0.0222624 0.6043 0.5 +-0.0791962 0.16801 -0.0379842 0.363322 0.5 +-0.0864925 0.10492 0.00639597 0.527031 0.458857 +-0.0866603 0.10494 0.00737931 0.502442 0.5 +-0.0869937 0.104951 0.00838372 0.697354 0.5 +-0.0758029 0.111217 -0.00664466 0.529197 0.5 +-0.0628273 0.0924874 -0.0189476 0.67065 0.5 +-0.0933085 0.117399 0.0213072 0.762803 0.5 +-0.0347476 0.127441 0.00854521 0.879863 0.5 +-0.0110799 0.0973863 0.0517395 0.289085 0.5 +-0.0457101 0.131722 0.0089192 0.504786 0.5 +-0.0497977 0.134944 0.0250398 0.616906 0.5 +-0.0492123 0.134029 0.0252722 0.632182 0.476995 +-0.0451868 0.126658 0.0224837 0.607832 0.5 +-0.0735593 0.15583 0.0102013 0.758917 0.5 +-0.0696323 0.156261 0.0232204 0.586233 0.5 +0.00141943 0.122927 0.0347542 0.594577 0.5 +-0.0607897 0.155834 0.0118473 0.639342 0.5 +-0.0560741 0.15232 0.0295584 0.421948 0.5 +-0.0829803 0.153189 0.00837374 0.286705 0.394114 +-0.0621334 0.15599 0.0157191 0.80919 0.5 +-0.0404347 0.128451 0.0123721 0.684717 0.5 +-0.0618449 0.152018 0.0348716 0.412705 0.5 +-0.0356852 0.127701 0.00820492 0.870191 0.5 +-0.0169683 0.186741 -0.0196674 0.314917 0.434589 +-0.0888224 0.0929368 0.0224135 0.572652 0.5 +-0.0366248 0.127943 0.00786237 0.870326 0.5 +-0.0375614 0.128197 0.00751871 0.858472 0.5 +-0.0780713 0.150403 0.0367551 0.465333 0.364546 +-0.0170499 0.122405 0.0312344 0.562302 0.326375 +-0.054091 0.152763 0.0215579 0.416485 0.5 +-0.038546 0.128369 0.00715642 0.850948 0.5 +0.00166319 0.130955 0.0203219 0.580019 0.5 +-0.0640415 0.167322 -0.0369994 0.681504 0.5 +-0.0646509 0.168222 -0.0372156 0.639746 0.5 +-0.0653015 0.169027 -0.0374543 0.617202 0.5 +-0.0659809 0.169803 -0.037696 0.611242 0.5 +-0.066705 0.170483 -0.0379595 0.597027 0.5 +-0.0674348 0.171149 -0.0382253 0.569809 0.5 +-0.0682097 0.171724 -0.0385204 0.554233 0.295884 +-0.0689777 0.172299 -0.0388012 0.518614 0.5 +-0.0697889 0.172796 -0.0390999 0.664164 0.5 +-0.0706155 0.173275 -0.0394062 0.351992 0.459473 +-0.0714268 0.173765 -0.0397048 0.330984 0.5 +-0.0722468 0.174258 -0.0400013 0.933114 0.5 +-0.0731244 0.174613 -0.0403365 0.504287 0.5 +-0.0741081 0.174769 -0.0407073 0.48322 0.5 +-0.0750852 0.174913 -0.0410877 0.301035 0.426627 +-0.0763281 0.174543 -0.0415648 0.25666 0.5 +-0.0773785 0.174262 -0.0420678 0.264953 0.396147 +-0.0395331 0.128532 0.0067941 0.838447 0.5 +-0.0601798 0.155861 0.0135147 0.682932 0.5 +-0.0405229 0.128682 0.00643622 0.833622 0.5 +-0.0680504 0.156343 0.0223236 0.643302 0.5 +-0.0378902 0.121927 0.0281694 0.425349 0.5 +-0.0680579 0.149988 0.0386907 0.449151 0.5 +-0.0416003 0.12872 0.00602836 0.838158 0.5 +0.0590343 0.06983 0.00945078 0.485341 0.471756 +0.0583904 0.0706508 0.00920486 0.473852 0.5 +0.0575984 0.0711737 0.0088801 0.453642 0.5 +0.056791 0.0717301 0.0086079 0.531905 0.5 +0.0559073 0.0721087 0.0082759 0.530002 0.5 +0.0549279 0.0723085 0.00788581 0.504643 0.5 +-0.0865012 0.0967606 0.00143514 0.46002 0.318457 +-0.087994 0.0981671 0.00544953 0.422078 0.461974 +0.0165994 0.0933382 -0.024824 0.586675 0.480206 +-0.0717164 0.163822 -0.0439567 0.366231 0.5 +-0.0781422 0.141688 -0.0047364 0.505391 0.5 +-0.0270715 0.179993 -0.0160072 0.400853 0.5 +-0.0862825 0.106347 0.0193454 0.608489 0.470663 +-0.0425281 0.128954 0.00568377 0.877699 0.5 +-0.0434823 0.12913 0.00531313 0.8936 0.5 +-0.0662581 0.15274 0.0347724 0.304419 0.446227 +-0.0150057 0.127967 0.0215456 0.413313 0.415771 +-0.0471876 0.131943 0.0231102 0.537537 0.5 +-0.0567623 0.154944 0.0190948 0.399621 0.5 +-0.0064056 0.10047 0.0472751 0.51179 0.5 +-0.00745251 0.100521 0.0469096 0.493808 0.5 +-0.0443833 0.12939 0.00495951 0.909178 0.5 +-0.0452915 0.1298 0.0046882 0.674802 0.448194 +-0.0748503 0.150353 0.0378605 0.392821 0.382443 +-0.0669712 0.156006 0.0125516 0.823586 0.5 +-0.0266127 0.121438 0.026306 0.332775 0.5 +-0.0631289 0.155254 0.0269868 0.926458 0.5 +-0.0537253 0.151161 0.0246275 0.47991 0.5 +-0.0695415 0.15615 0.0130838 0.78998 0.5 +-0.045982 0.130505 0.00444274 0.46527 0.485491 +-0.04802 0.136068 0.0153684 0.722608 0.5 +-0.0446861 0.130064 0.0166863 0.47313 0.5 +-0.0441239 0.129077 0.0169132 0.474521 0.5 +-0.0435257 0.128183 0.0171556 0.472404 0.5 +-0.0249745 0.12528 0.0180213 0.260849 0.433199 +0.0151622 0.122267 0.032438 0.579184 0.5 +-0.081815 0.108922 0.02836 0.434628 0.5 +-0.0281138 0.125637 0.0139342 0.597144 0.5 +-0.0893948 0.09291 0.012442 0.753459 0.5 +-0.0346758 0.127158 0.0144691 0.650625 0.5 +-0.0595569 0.153648 0.0312116 0.398146 0.5 +0.0360791 0.111295 0.00152105 0.514854 0.489543 +0.0354301 0.112103 0.00127449 0.517745 0.5 +0.0348029 0.113058 0.00110003 0.521582 0.5 +0.0342026 0.113899 0.000840527 0.530286 0.5 +0.0335656 0.114779 0.000629741 0.523246 0.5 +0.0328625 0.115479 0.000361714 0.520578 0.475861 +0.0321211 0.116144 0.000111339 0.512637 0.481334 +0.0313677 0.11674 -0.000181085 0.804585 0.5 +0.0305901 0.117314 -0.000462026 0.621752 0.487395 +0.0299199 0.11779 -0.000781916 0.62416 0.485073 +0.0289937 0.118368 -0.00105099 0.798122 0.5 +0.0282135 0.118937 -0.00132982 0.617565 0.481947 +0.02739 0.119413 -0.00163712 0.612037 0.5 +0.026559 0.119879 -0.0019388 0.792542 0.378791 +0.0257432 0.120365 -0.00224906 0.7876 0.5 +-0.0272334 0.0902723 -0.0326005 0.380028 0.5 +-0.0847199 0.0939171 -0.00356265 0.388478 0.5 +-0.0892956 0.0942653 0.013432 0.784471 0.5 +-0.0888371 0.0942243 0.00943852 0.807945 0.5 +-0.088725 0.0942104 0.00844208 0.778007 0.5 +-0.0770466 0.0947961 -0.0125384 0.514294 0.5 +-0.0547576 0.161266 0.00105716 0.176407 0.35978 +-0.0887521 0.0969152 0.00742291 0.402265 0.478117 +-0.0892038 0.0969467 0.00941895 0.567963 0.5 +-0.0893298 0.0969555 0.0104169 0.58255 0.5 +-0.0925344 0.124191 0.0302708 0.892813 0.5 +-0.0932444 0.124186 0.027283 0.710455 0.5 +-0.083332 0.0992842 -0.00460735 0.457086 0.5 +-0.0842752 0.141807 0.00320102 0.440338 0.38803 +-0.0896062 0.137812 0.0131974 0.440166 0.41967 +-0.0900489 0.137821 0.0141988 0.451615 0.5 +-0.0902839 0.137831 0.0151959 0.450154 0.360862 +-0.0254349 0.121225 -0.00822483 0.47977 0.5 +-0.0938789 0.125503 0.0152603 0.523492 0.5 +-0.0900893 0.135135 0.0242145 0.821708 0.5 +-0.0858238 0.104979 0.0223569 0.606742 0.456847 +-0.0800669 0.107282 -0.00460113 0.539142 0.5 +-0.0388328 0.0943088 -0.0230504 0.585604 0.5 +-0.0914405 0.117414 0.0273008 0.721941 0.5 +-0.0913339 0.117411 0.0283055 0.642357 0.5 +-0.0729322 0.156105 0.0220745 0.836572 0.5 +-0.00992376 0.097544 0.0521376 0.320087 0.5 +-0.0324184 0.123701 0.0227019 0.491513 0.417253 +-0.0872732 0.151714 0.0113029 0.244128 0.5 +-0.0510269 0.136724 0.0245519 0.61388 0.5 +-0.0423586 0.123855 0.0235885 0.524134 0.348232 +-0.0433492 0.123979 0.0232099 0.409548 0.397532 +-0.0544133 0.159808 0.00694146 0.308485 0.5 +0.0130767 0.125591 0.0302496 0.57762 0.5 +-0.0717396 0.156144 0.0122972 0.802125 0.5 +-0.0629292 0.155832 0.0110869 0.761137 0.5 +-0.085741 0.151793 0.0266482 0.237541 0.301465 +-0.0843142 0.152356 0.00793113 0.195934 0.43134 +-0.0684446 0.156174 0.0134711 0.80838 0.5 +-0.00485582 0.0989472 0.0508482 0.348622 0.437933 +-0.00023307 0.0988811 0.0510016 0.427575 0.5 +-0.0644558 0.155894 0.01199 0.814412 0.5 +0.000625364 0.130997 0.01994 0.536341 0.5 +0.0122548 0.126063 0.0299441 0.540276 0.5 +-0.0457478 0.130844 0.0207105 0.595079 0.5 +-0.0649985 0.156251 0.0205012 0.693675 0.329449 +-0.0759088 0.150426 0.0375079 0.378932 0.386226 +-0.0345319 0.122423 0.0264163 0.595838 0.5 +-0.0547132 0.153591 0.0213081 0.424 0.5 +-0.029145 0.125694 0.0135548 0.656718 0.5 +-0.0638002 0.166551 -0.0354938 0.679086 0.5 +-0.0644057 0.16752 -0.0356951 0.677041 0.5 +-0.0650469 0.168333 -0.0359323 0.648538 0.5 +-0.0656974 0.169193 -0.0361564 0.620042 0.5 +-0.0664072 0.169883 -0.0364165 0.595739 0.5 +-0.0671575 0.17049 -0.0366968 0.594029 0.5 +-0.0679053 0.171131 -0.036968 0.78863 0.5 +-0.0687158 0.171626 -0.0372714 0.729096 0.5 +-0.069532 0.172114 -0.0375728 0.689551 0.5 +-0.070349 0.172644 -0.037875 0.474398 0.343034 +-0.0711885 0.173044 -0.0381946 0.449181 0.40044 +-0.0720651 0.173384 -0.0385311 0.332522 0.437162 +-0.072956 0.173805 -0.0388399 0.313989 0.457293 +-0.0738593 0.174047 -0.0391959 0.305377 0.5 +-0.0748301 0.174171 -0.0395847 0.296072 0.5 +-0.0760781 0.173825 -0.0400503 0.288582 0.5 +-0.0772285 0.173502 -0.0405421 0.250669 0.404406 +0.011387 0.126452 0.0296316 0.418348 0.360708 +-0.0767842 0.155599 0.0119802 0.724441 0.5 +-0.0814342 0.154656 0.0132857 0.644445 0.5 +-0.0670064 0.156281 0.0226936 0.645234 0.5 +-0.0399374 0.122179 0.0274746 0.359191 0.5 +-0.0619687 0.155933 0.0215789 0.679513 0.5 +-0.0672538 0.152901 0.0344187 0.373353 0.363798 +0.0595186 0.0696512 0.0111197 0.475032 0.462191 +0.058913 0.070492 0.0108657 0.478279 0.474314 +0.0581844 0.0711857 0.0106064 0.562266 0.5 +0.0574073 0.0717824 0.0103168 0.438446 0.5 +0.0565518 0.0722252 0.0100192 0.665892 0.459809 +0.0556563 0.0725898 0.00964459 0.655237 0.5 +0.0547011 0.0728313 0.00929699 0.623099 0.482703 +0.0536465 0.0728799 0.00890065 0.864936 0.5 +0.0525444 0.0728335 0.00848027 0.834929 0.5 +0.051394 0.0726569 0.00804397 0.571129 0.469854 +-0.0876687 0.0981895 0.00443327 0.488984 0.455424 +-0.0944953 0.125552 0.0212653 0.615938 0.5 +-0.0908622 0.135106 0.0192089 0.850446 0.5 +0.0199544 0.117871 -0.0110405 0.479116 0.341794 +-0.000472072 0.130948 0.0195451 0.526346 0.5 +0.0105543 0.126889 0.0293082 0.401179 0.5 +-0.00204808 0.0983649 0.051847 0.362869 0.5 +-0.0386541 0.126132 0.0204051 0.868889 0.5 +-0.00603192 0.127393 0.0291246 0.325337 0.338283 +0.00702297 0.127188 0.0294846 0.354279 0.381332 +0.0023065 0.128418 0.0277808 0.428861 0.5 +-0.0301237 0.12585 0.013192 0.725304 0.5 +-0.0310488 0.126128 0.0128475 0.779221 0.5 +0.000648366 0.101032 0.0453587 0.355907 0.240144 +-0.0659293 0.156005 0.0129201 0.807771 0.5 +-0.0277551 0.121254 0.0258902 0.308967 0.450365 +-0.0321019 0.119786 0.0288381 0.528616 0.478852 +-0.0524014 0.152599 0.0134601 0.509335 0.5 +-0.0175484 0.124749 0.0265509 0.412065 0.5 +-0.0188136 0.124392 0.0261122 0.417643 0.5 +-0.0292509 0.122699 0.0223824 0.532919 0.5 +-0.0300755 0.123175 0.0220771 0.461742 0.5 +-0.0308933 0.12367 0.0217821 0.486191 0.5 +-0.0460219 0.166062 0.00401182 0.409327 0.345754 +-0.0823623 0.154598 0.0188308 0.349811 0.340276 +0.0145196 0.123096 0.0322223 0.607056 0.5 +-0.0471696 0.16597 0.00363215 0.351807 0.5 +0.0391529 0.107674 0.00402907 0.521891 0.5 +-0.0362833 0.17342 -0.00108904 0.354093 0.255688 +0.012678 0.130036 0.0186174 0.528004 0.5 +-0.013866 0.129156 0.0103484 0.675748 0.5 +-0.00156343 0.13088 0.0191419 0.554133 0.5 +0.0359834 0.11203 0.00292702 0.513807 0.5 +0.0353283 0.112832 0.00268414 0.509452 0.49033 +0.0347186 0.113797 0.00249877 0.634139 0.5 +0.0340849 0.114614 0.00225198 0.636187 0.5 +0.0334188 0.115464 0.00204907 0.627558 0.5 +0.0327231 0.116168 0.00178038 0.811273 0.5 +0.0319954 0.11684 0.00152318 0.7977 0.5 +0.0312312 0.117425 0.00123717 0.801133 0.5 +0.0304509 0.117992 0.000957505 0.800124 0.5 +0.0296461 0.118491 0.000643936 0.799455 0.5 +0.0288553 0.119043 0.000370228 0.798323 0.5 +0.0280536 0.119554 5.13011e-05 0.795193 0.5 +0.0272253 0.120021 -0.000250724 0.795521 0.5 +0.0264078 0.120534 -0.000510633 0.789689 0.5 +0.0256059 0.12104 -0.000826914 0.784149 0.5 +0.0247922 0.121532 -0.00113746 0.798864 0.5 +0.0239009 0.12202 -0.0014718 0.610755 0.477832 +-0.0851109 0.0939488 -0.00257672 0.413351 0.5 +-0.0855876 0.0939777 -0.00157288 0.417531 0.5 +-0.0857862 0.0939971 -0.00056361 0.647305 0.5 +-0.0888687 0.0942285 0.0104297 0.819614 0.5 +-0.0788763 0.0949177 -0.010577 0.507019 0.5 +-0.0141262 0.119616 -0.0126879 0.702838 0.5 +-0.091546 0.146121 0.023146 0.65099 0.5 +-0.0731992 0.145774 -0.0148545 0.264158 0.5 +-0.0894422 0.0969694 0.0114146 0.577624 0.5 +-0.0896201 0.0969823 0.0124196 0.582644 0.466882 +-0.0941673 0.124186 0.0242853 0.534225 0.481584 +-0.0929791 0.124188 0.0282747 0.68381 0.5 +-0.0794636 0.141716 -0.00376694 0.594899 0.5 +-0.0908687 0.135097 0.0172074 0.531951 0.5 +-0.0881381 0.0996585 0.0223676 0.516739 0.470299 +0.0236032 0.116718 -0.00979024 0.503788 0.368472 +-0.0713317 0.151217 -0.0439201 0.162625 0.220555 +-0.029962 0.122606 -0.0056563 0.484505 0.5 +-0.0713206 0.156784 -0.042915 0.706675 0.5 +-0.085549 0.104961 0.0233427 0.61382 0.5 +-0.077037 0.111295 -0.0046823 0.529609 0.5 +-0.09118 0.143373 0.022161 0.737005 0.5 +-0.0913152 0.114759 0.0363194 0.550918 0.5 +-0.0921325 0.117269 0.0252198 0.820095 0.5 +-0.0926082 0.117405 0.0243082 0.805252 0.5 +-0.0596936 0.155857 0.0122367 0.637807 0.353086 +-0.0121165 0.0973987 0.0513433 0.308099 0.480639 +-0.0738542 0.15551 0.00718209 0.661605 0.5 +-0.0113442 0.129847 0.0112634 0.680498 0.5 +-0.0661823 0.154393 0.00121795 0.912221 0.5 +-0.0356104 0.127425 0.0141251 0.707908 0.5 +-0.0588103 0.157344 0.00530008 0.177895 0.5 +-0.0126044 0.12951 0.0108053 0.671975 0.5 +-0.0651287 0.156206 0.0175513 0.797527 0.5 +-0.0379003 0.123041 0.0266516 0.380997 0.5 +-0.0866438 0.152376 0.0233632 0.255471 0.5 +-0.0729629 0.155811 0.0249814 0.84805 0.5 +-0.00162661 0.100486 0.0474782 0.529902 0.5 +-0.0699807 0.149351 0.039589 0.500426 0.5 +-0.0590542 0.155341 0.0226214 0.664682 0.5 +-0.00371721 0.100591 0.046739 0.340793 0.5 +0.0140569 0.12802 0.0248446 0.457709 0.401207 +-0.00260812 0.130913 0.0187596 0.547843 0.373224 +-0.0558399 0.0666 0.0358943 0.57834 0.280066 +-0.0884108 0.0928321 0.00744302 0.521573 0.5 +-0.0215138 0.185205 -0.0184453 0.213273 0.311911 +-0.00514301 0.0997589 0.0492461 0.302043 0.432171 +-0.0890662 0.123985 0.0032876 0.670226 0.5 +-0.0600611 0.155861 0.0164593 0.754227 0.311914 +-0.0554731 0.154191 0.0210182 0.533648 0.5 +-0.0781956 0.163891 -0.0259488 0.379383 0.461854 +-0.0923861 0.125586 0.0352607 0.808152 0.5 +-0.0641565 0.166823 -0.0341745 0.661565 0.5 +-0.0647866 0.167644 -0.0344082 0.661396 0.5 +-0.065431 0.168513 -0.0346313 0.641772 0.5 +-0.0661031 0.169296 -0.0348743 0.614473 0.5 +-0.0668287 0.169972 -0.0351376 0.576278 0.447298 +-0.0675927 0.17056 -0.0354212 0.578408 0.5 +-0.068398 0.171087 -0.0357069 0.5422 0.47343 +-0.0691914 0.171601 -0.0360136 0.726726 0.5 +-0.0700192 0.172057 -0.036324 0.68089 0.5 +-0.0708823 0.172457 -0.0366471 0.637043 0.5 +-0.0717609 0.172825 -0.0369735 0.60249 0.5 +-0.072708 0.173064 -0.0373345 0.394287 0.452908 +-0.073631 0.173473 -0.03767 0.356492 0.40398 +-0.0745832 0.173457 -0.038075 0.28878 0.410475 +-0.0758319 0.173116 -0.0385323 0.232241 0.5 +-0.0638047 0.152122 -0.00224548 0.743681 0.5 +-0.0644858 0.152894 -0.00250698 0.814848 0.5 +-0.0775236 0.155819 0.0175602 0.611153 0.5 +-0.0789069 0.155396 0.0141592 0.643919 0.5 +-0.0660163 0.156182 0.0230465 0.621927 0.5 +-0.0421185 0.122004 0.0266511 0.399963 0.452562 +-0.0821317 0.151156 0.0323844 0.315334 0.5 +-0.00375638 0.13079 0.0183493 0.571655 0.5 +-0.0651889 0.153592 -0.00278678 0.791522 0.5 +0.0593202 0.0701868 0.012517 0.616481 0.5 +0.0586637 0.0709935 0.0122726 0.600516 0.5 +0.0579415 0.0716454 0.0119821 0.560017 0.5 +0.0571336 0.0721807 0.0116675 0.677671 0.5 +0.0562687 0.0726263 0.0113628 0.663868 0.5 +0.0553639 0.0729653 0.0110394 0.881359 0.5 +0.0543768 0.0731861 0.0106539 0.602107 0.5 +0.0533686 0.0732758 0.0102917 0.860251 0.5 +0.0522643 0.0732287 0.00987093 0.81315 0.5 +0.0510603 0.0729911 0.0094016 0.782671 0.5 +0.049877 0.0727457 0.00893584 0.779683 0.5 +0.0487458 0.0724992 0.00846572 0.78647 0.5 +-0.0877192 0.101 0.0223776 0.495117 0.5 +-0.0881296 0.100997 0.0213597 0.492117 0.447722 +-0.0885895 0.126718 0.00227148 0.708667 0.331673 +-0.06586 0.154377 -0.00304604 0.72727 0.5 +-0.0690967 0.148938 0.0398784 0.516598 0.5 +-0.0303567 0.119073 0.029499 0.443291 0.5 +-0.0312846 0.119331 0.0291556 0.497492 0.5 +-0.0558806 0.154815 0.016521 0.404693 0.5 +-0.0568165 0.155074 0.0161832 0.647681 0.5 +-0.0577063 0.155408 0.0158579 0.660894 0.5 +-0.058643 0.155634 0.0155202 0.678181 0.5 +-0.0648306 0.156078 0.013307 0.795758 0.5 +-0.0287913 0.121291 0.025511 0.511998 0.411101 +-0.0329258 0.120263 0.0285346 0.53859 0.5 +-0.0530069 0.153493 0.0132253 0.48389 0.5 +-0.0162922 0.125122 0.0270033 0.40247 0.32515 +-0.0586226 0.156199 0.00971481 0.7717 0.5 +-0.0574718 0.156359 0.0101234 0.748186 0.5 +-0.056364 0.156406 0.0105108 0.361095 0.456132 +-0.0544491 0.156028 0.0112408 0.440802 0.5 +-0.0535748 0.155622 0.0115317 0.495039 0.5 +-0.0553853 0.15628 0.0108911 0.397611 0.5 +-0.0870329 0.152942 0.0187545 0.209834 0.326284 +-0.0665414 0.155108 -0.00331096 0.679045 0.5 +0.039601 0.107391 0.00564087 0.660457 0.5 +0.0389649 0.108275 0.00542368 0.648354 0.5 +0.0383485 0.10917 0.00520513 0.64801 0.5 +0.0377445 0.110141 0.00501649 0.636556 0.5 +0.0371318 0.111041 0.00479819 0.641123 0.5 +0.0364907 0.111851 0.00455337 0.640643 0.5 +0.0358297 0.112651 0.00431137 0.640507 0.470921 +0.0351839 0.113522 0.00409669 0.634903 0.5 +0.0345596 0.114411 0.00388032 0.635329 0.5 +0.0339044 0.115273 0.00366751 0.637441 0.475722 +0.0332241 0.115988 0.0034015 0.637946 0.5 +0.0325339 0.116751 0.00316678 0.628343 0.5 +0.0317883 0.117354 0.00287906 0.806847 0.5 +0.0310215 0.117934 0.00259488 0.800088 0.5 +0.0302372 0.118499 0.00231637 0.800199 0.5 +0.029447 0.119051 0.00204245 0.792174 0.5 +0.0286891 0.119649 0.00175522 0.796718 0.5 +0.0278788 0.120142 0.00144262 0.798937 0.5 +0.0270636 0.120631 0.00113345 0.79444 0.5 +0.0262334 0.121101 0.000829633 0.804299 0.5 +0.0254417 0.121647 0.000551492 0.792119 0.5 +0.0246516 0.122175 0.000230276 0.799131 0.5 +0.0238372 0.12269 -3.58731e-05 0.617042 0.5 +0.0229975 0.123119 -0.000380287 0.60476 0.478174 +0.0221671 0.123584 -0.0006811 0.579216 0.5 +-0.0842794 0.115636 -0.000747849 0.513404 0.5 +-0.0859939 0.0940196 0.000445293 0.676923 0.5 +-0.0889746 0.0942393 0.0114303 0.801364 0.5 +-0.0781065 0.0948585 -0.0115273 0.51798 0.5 +-0.079893 0.0949635 -0.0095262 0.496775 0.5 +-0.0807586 0.0950245 -0.00854945 0.494869 0.467138 +-0.08951 0.140665 0.0311774 0.652175 0.5 +-0.0897915 0.135018 0.00821888 0.589114 0.5 +-0.0896385 0.0969877 0.0134181 0.6152 0.5 +-0.0894927 0.14204 0.0311659 0.662102 0.5 +-0.0927326 0.12419 0.0292678 0.653018 0.5 +-0.0921132 0.115989 0.0103178 0.419626 0.5 +-0.0913388 0.115949 0.00831473 0.322049 0.5 +-0.0884258 0.0996766 0.0213895 0.508997 0.5 +-0.0890962 0.0996533 0.0114017 0.553057 0.5 +-0.0890383 0.09964 0.0104144 0.793157 0.5 +-0.0201151 0.123178 -0.00639815 0.467437 0.461942 +-0.0804527 0.143139 -0.00181198 0.612591 0.5 +-0.0851998 0.104954 0.024348 0.636843 0.439368 +-0.0763933 0.111249 -0.00565203 0.522301 0.2479 +-0.0780101 0.11134 -0.00369811 0.498784 0.458615 +-0.0876555 0.144675 0.00917716 0.600227 0.5 +-0.0691184 0.165207 -0.0519806 0.514179 0.5 +-0.0934884 0.117419 0.0203018 0.740331 0.5 +-0.0587089 0.155741 0.0125904 0.587707 0.5 +-0.0153478 0.0972963 0.0501876 0.43388 0.402594 +-0.0671961 0.15591 -0.00355939 0.614419 0.5 +-0.0545541 0.160714 0.00540511 0.355655 0.364339 +-0.0314643 0.126198 0.0141678 0.745369 0.333188 +-0.0282035 0.125211 0.0168448 0.37351 0.466185 +-0.0531754 0.160014 0.00733632 0.3204 0.463594 +-0.0508814 0.161419 0.0066624 0.343986 0.5 +-0.0346038 0.123422 0.0248791 0.511581 0.38125 +-0.0312974 0.120401 0.0276066 0.453062 0.5 +-0.0679476 0.156599 -0.00385029 0.436328 0.361788 +-0.00887703 0.0985896 0.0509585 0.316333 0.5 +-0.0280888 0.121741 0.0242898 0.436518 0.5 +-0.0698349 0.155896 0.010068 0.807179 0.5 +-0.0686037 0.157344 -0.00409918 0.377093 0.444595 +-0.0838788 0.153353 0.0242347 0.292708 0.349076 +-0.0515277 0.136697 0.0258426 0.618928 0.5 +-0.0693964 0.157876 -0.00437702 0.481025 0.413391 +-0.0195891 0.186548 -0.0163318 0.301536 0.5 +-0.0203431 0.186558 -0.0166005 0.222314 0.357983 +-0.022279 0.185099 -0.0171819 0.168886 0.5 +-0.00479304 0.130806 0.0179661 0.596497 0.5 +-0.0567073 0.152073 0.0307854 0.440273 0.5 +-0.0702694 0.156361 0.0186365 0.690809 0.5 +-0.0563002 0.154681 0.0207165 0.532907 0.5 +-0.0701845 0.158483 -0.00465374 0.363104 0.379061 +-0.0633619 0.165109 -0.0324564 0.727984 0.5 +-0.0639501 0.166025 -0.0326719 0.709839 0.5 +-0.06455 0.166996 -0.0328772 0.679073 0.5 +-0.0651676 0.167884 -0.0330971 0.651076 0.5 +-0.0658513 0.168603 -0.0333515 0.620748 0.5 +-0.0665486 0.169315 -0.0336077 0.604398 0.5 +-0.0672777 0.169987 -0.0338702 0.584713 0.435346 +-0.0680553 0.17056 -0.0341587 0.535557 0.5 +-0.0688509 0.171089 -0.0344529 0.712016 0.5 +-0.0696712 0.171569 -0.0347594 0.724127 0.5 +-0.070543 0.17193 -0.0350862 0.619045 0.5 +-0.0714609 0.172223 -0.0354286 0.618513 0.379493 +-0.0723893 0.172498 -0.0357772 0.561971 0.406911 +-0.0733228 0.17276 -0.036126 0.486535 0.443741 +-0.0743656 0.172848 -0.0365047 0.355159 0.5 +-0.0756171 0.172473 -0.0369846 0.24749 0.342361 +-0.0710496 0.158811 -0.00499394 0.401158 0.5 +-0.031974 0.126184 0.0154629 0.467287 0.475836 +-0.00515103 0.127241 0.0295045 0.341036 0.332534 +-0.0562907 0.154938 0.0178178 0.401003 0.5 +-0.0764922 0.155931 0.0149956 0.696083 0.5 +-0.06497 0.156112 0.0234152 0.618047 0.5 +-0.0721129 0.15894 -0.00533295 0.343848 0.5 +-0.0670825 0.156321 0.0197603 0.706117 0.5 +-0.0733382 0.158682 -0.00576511 0.246857 0.397695 +-0.0746759 0.158036 -0.00628607 0.256295 0.5 +-0.00594439 0.13066 0.0175514 0.60219 0.5 +0.058376 0.0713467 0.0136326 0.568464 0.47154 +0.0576189 0.0719687 0.0133447 0.526526 0.5 +0.0567814 0.0724634 0.0130365 0.506473 0.5 +0.0558934 0.0728505 0.0127047 0.478943 0.483133 +0.0549936 0.0732019 0.0123756 0.468908 0.45355 +0.0540437 0.0734433 0.0120297 0.570003 0.473434 +0.052991 0.0735097 0.0116286 0.794795 0.5 +0.051883 0.0734548 0.0112114 0.775424 0.5 +0.050682 0.0731977 0.010749 0.702463 0.5 +0.0496058 0.0730794 0.0103455 0.740678 0.5 +0.0484731 0.0728694 0.00986875 0.854164 0.5 +0.0476495 0.073201 0.00955169 0.809845 0.5 +0.0469057 0.0738955 0.00933063 0.524465 0.5 +0.0465562 0.0753029 0.0092212 0.42545 0.328776 +0.021311 0.123415 0.0275211 0.564193 0.5 +-0.0293809 0.118905 0.0298455 0.419563 0.5 +-0.0405119 0.125571 0.0212459 0.428915 0.5 +-0.0394107 0.125604 0.021627 0.462568 0.5 +-0.0347822 0.124221 0.0233214 0.484913 0.419107 +-0.0322922 0.122832 0.0242564 0.501626 0.5 +-0.0314769 0.122323 0.024544 0.494991 0.5 +-0.0305995 0.121953 0.0248664 0.47679 0.5 +-0.029726 0.121561 0.0251755 0.427523 0.5 +-0.0353528 0.121762 0.0276148 0.473018 0.483492 +-0.0536545 0.154299 0.0129697 0.44924 0.455398 +-0.0149752 0.125602 0.0274605 0.375349 0.409981 +-0.0597327 0.156046 0.0093301 0.463603 0.421351 +-0.0443682 0.129764 0.015339 0.470486 0.5 +-0.0449132 0.130768 0.0151196 0.486007 0.5 +-0.0547922 0.153188 0.0241866 0.427057 0.5 +-0.00114981 0.12653 0.03091 0.408046 0.439515 +-0.000215874 0.126274 0.0312521 0.435976 0.337722 +-0.00202406 0.126832 0.0305449 0.363662 0.439287 +-0.0319273 0.126498 0.0125244 0.801921 0.5 +-0.00709045 0.130506 0.0171336 0.569789 0.34887 +0.0393898 0.107905 0.00701069 0.67513 0.5 +0.0387588 0.108855 0.00681782 0.665634 0.5 +0.0381409 0.109688 0.00657231 0.658486 0.5 +0.0375161 0.110639 0.00638069 0.656156 0.5 +0.0368852 0.111459 0.00613554 0.654443 0.5 +0.0362459 0.112339 0.00591924 0.654915 0.5 +0.0356067 0.113152 0.00567562 0.65849 0.5 +0.0349753 0.114037 0.00545779 0.650907 0.5 +0.0343452 0.114918 0.0052408 0.647632 0.5 +0.0336909 0.115719 0.00499933 0.647531 0.5 +0.0330035 0.116489 0.00476188 0.638981 0.5 +0.0322912 0.117174 0.00450048 0.812918 0.5 +0.0315716 0.117859 0.00423829 0.802972 0.5 +0.030827 0.118499 0.003976 0.809428 0.5 +0.0300401 0.11902 0.00366373 0.812256 0.5 +0.0292509 0.119574 0.0033793 0.801261 0.5 +0.02849 0.120167 0.00308975 0.790291 0.5 +0.0277057 0.120723 0.00280565 0.800827 0.5 +0.026879 0.121193 0.00250168 0.801052 0.5 +0.026052 0.121668 0.00219807 0.802799 0.5 +0.025254 0.122206 0.00192061 0.796998 0.5 +0.0245032 0.122816 0.00162459 0.798893 0.5 +0.0236993 0.12332 0.00130956 0.802375 0.5 +0.0228685 0.123786 0.00100726 0.76886 0.5 +0.022042 0.12426 0.000701449 0.768258 0.5 +0.0211914 0.124678 0.000362022 0.578577 0.479441 +0.0203379 0.125091 8.19329e-05 0.563379 0.5 +-0.0862312 0.0940245 0.00140199 0.48566 0.32949 +-0.0891671 0.0942549 0.0124334 0.790257 0.5 +-0.0884983 0.0941957 0.00744581 0.504514 0.5 +-0.0880011 0.0941555 0.00641769 0.668701 0.5 +-0.0815808 0.0950721 -0.00753639 0.4544 0.5 +-0.0822784 0.0951136 -0.0065238 0.46476 0.469894 +-0.0887346 0.0956375 0.0224045 0.55379 0.5 +-0.0408808 0.115001 -0.0156637 0.636935 0.5 +-0.0908254 0.142021 0.0251655 0.686408 0.5 +-0.0826224 0.141799 0.00118353 0.573051 0.5 +-0.0784181 0.163881 -0.0269512 0.376801 0.459409 +-0.0251041 0.0945178 -0.0276305 0.38243 0.5 +-0.0860481 0.114371 0.00228673 0.37751 0.411026 +-0.088271 0.126713 0.00126975 0.492226 0.351489 +-0.0891975 0.0996627 0.0124046 0.799557 0.5 +-0.0769111 0.100434 -0.0105662 0.528857 0.5 +-0.0728877 0.143976 -0.0119757 0.174341 0.191769 +-0.0874489 0.105009 0.0173545 0.562664 0.48257 +-0.0876028 0.105024 0.0163629 0.806813 0.5 +-0.0788672 0.111379 -0.00271807 0.683061 0.5 +-0.0366237 0.123115 -0.00817194 0.448052 0.460243 +-0.0752855 0.176467 -0.0519633 0.2814 0.5 +-0.0933646 0.117392 0.0153085 0.604917 0.5 +-0.0917148 0.117385 0.0263102 0.785869 0.5 +-0.0681277 0.152206 0.0356633 0.347909 0.45278 +-0.0142604 0.0974009 0.0506069 0.30955 0.471778 +0.0130051 0.123122 0.0330958 0.489294 0.471374 +-0.0395016 0.128216 0.0127148 0.664779 0.5 +-0.0306093 0.125854 0.0144859 0.741784 0.329716 +-0.0296756 0.125596 0.0148252 0.649405 0.359651 +-0.0465353 0.133196 0.0100953 0.493551 0.5 +-0.0123976 0.0991026 0.0482068 0.333828 0.305911 +-0.0528865 0.15117 0.0191272 0.633153 0.5 +-0.0610791 0.151413 0.0351388 0.425795 0.5 +-0.071543 0.155755 0.00800576 0.762309 0.5 +-0.041821 0.0914074 -0.0230213 0.760357 0.5 +-0.0653187 0.152492 0.0351215 0.336529 0.5 +-0.0824094 0.151775 0.0307901 0.276221 0.271137 +-0.0480086 0.134685 0.0198054 0.579216 0.488505 +0.00183354 0.10009 0.0472603 0.455175 0.5 +-0.0629926 0.156114 0.0183129 0.792449 0.5 +0.000301963 0.100099 0.0481787 0.436533 0.5 +-0.0201986 0.186115 -0.0151371 0.240536 0.443342 +-0.0212084 0.186026 -0.0155815 0.208609 0.328427 +-0.0226586 0.185005 -0.0161016 0.155711 0.42001 +-0.0563569 0.155043 0.0148967 0.595409 0.5 +-0.057302 0.152908 0.030569 0.391177 0.376789 +-0.0666126 0.148623 0.0392621 0.487753 0.5 +-0.0552085 0.151192 0.0284379 0.436924 0.5 +-0.0101504 0.0993437 0.0489973 0.270894 0.5 +-0.0637125 0.165316 -0.0311513 0.705011 0.5 +-0.0643222 0.166215 -0.0313693 0.695458 0.5 +-0.0649388 0.16711 -0.0315896 0.663302 0.5 +-0.0655814 0.167928 -0.031824 0.639288 0.5 +-0.0662787 0.168684 -0.0320741 0.628394 0.400429 +-0.0669945 0.169371 -0.0323347 0.581858 0.5 +-0.0677578 0.16996 -0.0326164 0.54586 0.449739 +-0.0685451 0.170527 -0.0328985 0.413356 0.473226 +-0.0693669 0.17099 -0.0332104 0.688829 0.5 +-0.0701909 0.171451 -0.0335218 0.672561 0.5 +-0.071113 0.171733 -0.033865 0.613017 0.5 +-0.0720408 0.171996 -0.0342175 0.578077 0.5 +-0.0730299 0.172199 -0.0345665 0.374774 0.45598 +-0.0740734 0.172255 -0.0349568 0.439107 0.422901 +-0.0752743 0.171989 -0.0354168 0.214132 0.453107 +-0.0764914 0.171559 -0.0359139 0.235256 0.418732 +-0.0729862 0.15207 0.0354642 0.336035 0.431839 +-0.0328507 0.126562 0.0151396 0.458899 0.5 +-0.0750027 0.155319 0.00677634 0.625125 0.31371 +-0.0328107 0.126843 0.0122027 0.803046 0.5 +-0.0741825 0.156237 0.0158024 0.660851 0.5 +-0.0601235 0.15512 0.0251504 0.586453 0.5 +-0.057663 0.155278 0.0187721 0.73974 0.5 +-0.040335 0.124745 0.0227896 0.456447 0.5 +-0.0343047 0.125361 0.0205265 0.411569 0.451012 +-0.0744234 0.156022 0.0128056 0.753525 0.5 +0.0587398 0.0709245 0.0152557 0.529147 0.5 +0.0580311 0.0716366 0.0149943 0.507706 0.469148 +0.0572674 0.0722428 0.0147076 0.620643 0.5 +0.0564285 0.0727253 0.0143999 0.652394 0.5 +0.0555021 0.0730293 0.0140468 0.572896 0.5 +0.0546053 0.0733755 0.0137165 0.558719 0.452852 +0.0536189 0.0735747 0.0133449 0.537096 0.325851 +0.0526044 0.0736805 0.0129696 0.719934 0.5 +0.0514504 0.0735674 0.0125302 0.698647 0.5 +0.0503561 0.073461 0.0121181 0.637214 0.5 +0.0491953 0.0732159 0.0116573 0.675976 0.5 +0.0481666 0.0731681 0.01124 0.784409 0.5 +0.047365 0.0735855 0.0109418 0.826505 0.5 +0.0468003 0.0745424 0.0107517 0.447881 0.5 +0.04653 0.0760573 0.0105389 0.495448 0.347175 +-0.0426342 0.12559 0.0204963 0.37042 0.5 +-0.0416036 0.125525 0.0208631 0.470572 0.5 +-0.0407505 0.126266 0.0196745 0.438066 0.447137 +-0.0487311 0.13178 0.0269763 0.58587 0.449911 +-0.0827498 0.154172 0.0128373 0.550796 0.5 +-0.0447621 0.126552 0.0211574 0.629082 0.5 +-0.0777335 0.153443 0.0307864 0.330093 0.416851 +-0.0396931 0.126183 0.0200311 0.811744 0.5 +-0.0399361 0.123254 0.0259269 0.38596 0.5 +-0.0543527 0.155034 0.0127444 0.47793 0.5 +-0.0136948 0.125921 0.0278767 0.366254 0.5 +-0.0696447 0.155522 0.00577511 0.755776 0.5 +-0.0437463 0.128889 0.0155826 0.499714 0.5 +-0.0745678 0.155931 0.022959 0.814662 0.5 +-0.0271883 0.118982 0.0306038 0.451539 0.5 +-0.060661 0.155018 0.0264156 0.57108 0.5 +-0.0460193 0.128067 0.0236255 0.468802 0.468899 +-0.0477867 0.135371 0.0169352 0.708138 0.5 +0.00621882 0.12419 0.0335647 0.544335 0.5 +-0.0283423 0.118847 0.030216 0.434037 0.5 +-0.0536498 0.152894 0.0173581 0.554812 0.5 +0.0391497 0.108397 0.00837586 0.687181 0.5 +0.0385195 0.109282 0.00815775 0.677907 0.5 +0.0378869 0.110163 0.00793964 0.673359 0.5 +0.0372544 0.111046 0.00772111 0.680932 0.5 +0.0366228 0.111865 0.00747742 0.675599 0.5 +0.0359746 0.112738 0.007259 0.674533 0.5 +0.0353395 0.113619 0.00703904 0.676175 0.5 +0.0347176 0.114447 0.00679736 0.660143 0.5 +0.0340797 0.115381 0.00660331 0.646061 0.5 +0.0334294 0.116181 0.00636312 0.640431 0.5 +0.0327554 0.116907 0.00609585 0.636817 0.5 +0.0320708 0.117667 0.00585111 0.634665 0.5 +0.0313378 0.118325 0.00558524 0.625098 0.5 +0.0305837 0.118921 0.00529549 0.814139 0.5 +0.0298218 0.119509 0.00500708 0.806711 0.5 +0.0290675 0.120111 0.00471365 0.805164 0.5 +0.0282794 0.120663 0.00443205 0.791961 0.5 +0.0275059 0.121239 0.00414409 0.797075 0.5 +0.0266708 0.121701 0.00384182 0.797474 0.5 +0.0258883 0.12226 0.00355652 0.799054 0.5 +0.0251009 0.122815 0.00327552 0.801498 0.5 +0.0243085 0.123343 0.00295625 0.798858 0.5 +0.0235199 0.123889 0.00267512 0.793557 0.5 +0.0227041 0.124378 0.0023667 0.600526 0.487961 +0.0218833 0.124858 0.00205716 0.568358 0.5 +0.0210505 0.125312 0.00175976 0.720705 0.5 +0.0201693 0.125674 0.00144037 0.72701 0.5 +0.0192952 0.126057 0.00111502 0.549619 0.478422 +0.018385 0.126365 0.000765748 0.53867 0.5 +0.0174979 0.126711 0.000451693 0.679655 0.445027 +0.0165768 0.126998 0.000104849 0.52653 0.459269 +-0.0873547 0.094105 0.00537923 0.764025 0.318417 +-0.087209 0.0941073 0.00444199 0.826194 0.5 +-0.0912331 0.114706 0.0382141 0.582382 0.5 +-0.0721007 0.175064 -0.0530188 0.345431 0.47427 +-0.0912374 0.140583 0.0161703 0.344959 0.5 +-0.0893696 0.140675 0.0341739 0.602153 0.5 +-0.0722528 0.156819 -0.0369077 0.527069 0.471618 +-0.0742948 0.147166 -0.0148659 0.299412 0.5 +-0.0915139 0.140599 0.0171878 0.461452 0.5 +-0.0884357 0.140552 0.0112052 0.426609 0.5 +-0.0942744 0.126919 0.0202522 0.570718 0.5 +-0.089435 0.0996945 0.016394 0.857025 0.5 +-0.0780733 0.100357 -0.00962255 0.706292 0.5 +-0.0741071 0.154101 -0.0239055 0.625285 0.5 +-0.0809353 0.145916 -0.000819165 0.55942 0.5 +-0.08784 0.105023 0.0143674 0.799174 0.5 +-0.0878453 0.10502 0.0133698 0.772699 0.5 +-0.0872189 0.103599 0.00739967 0.467686 0.5 +-0.0314483 0.177007 -0.0139273 0.413967 0.5 +0.022698 0.118017 -0.00920048 0.589444 0.5 +-0.0926722 0.117507 0.0393006 0.697337 0.5 +-0.0704499 0.154022 0.0317661 0.4505 0.460634 +-0.0530502 0.151987 0.0175947 0.600789 0.5 +0.00308348 0.0981539 0.0507387 0.420813 0.419856 +-0.00116162 0.0980337 0.0521962 0.384333 0.5 +-0.0331127 0.123309 0.0239558 0.509663 0.389253 +-0.0323169 0.126646 0.013854 0.747717 0.5 +-0.0199983 0.126616 0.0197793 0.372671 0.5 +-0.04591 0.132311 0.0103278 0.472582 0.5 +-0.0242082 0.121982 0.0271598 0.387964 0.5 +-0.0799451 0.15529 0.0167266 0.541044 0.5 +-0.0263812 0.120789 0.0279195 0.382019 0.36244 +-0.0886232 0.152074 0.0182297 0.164219 0.308129 +-0.0610919 0.155915 0.0160896 0.782362 0.5 +-0.0741431 0.153026 0.0335308 0.292127 0.372421 +-0.0625615 0.156051 0.017016 0.801509 0.5 +0.00277101 0.099815 0.0475918 0.508844 0.374974 +-0.045336 0.129618 0.020889 0.420497 0.5 +-0.0474148 0.133778 0.0200381 0.707374 0.5 +-0.0208999 0.185581 -0.0139755 0.224803 0.465445 +-0.021995 0.185609 -0.0143485 0.166977 0.166783 +-0.0234016 0.184697 -0.0149423 0.16843 0.379562 +0.0022525 0.0986072 0.0504164 0.526562 0.5 +-0.00688511 0.0982482 0.0516445 0.372577 0.5 +-0.0580426 0.153536 0.0303048 0.35682 0.5 +-0.0349607 0.125018 0.0217662 0.437259 0.5 +-0.0572069 0.155002 0.0203881 0.693727 0.5 +-0.0361331 0.122312 0.027301 0.570112 0.5 +0.00967962 0.127274 0.0289934 0.386344 0.385032 +-0.0640888 0.165507 -0.029848 0.684667 0.5 +-0.0646908 0.166411 -0.0300665 0.639064 0.5 +-0.0653365 0.167223 -0.0303028 0.610456 0.5 +-0.0660205 0.167997 -0.0305503 0.565309 0.350811 +-0.0667396 0.168684 -0.03081 0.553412 0.429672 +-0.0674741 0.169344 -0.0310786 0.4225 0.5 +-0.0682563 0.169911 -0.0313673 0.408006 0.430391 +-0.0690262 0.170476 -0.0316587 0.397583 0.454433 +-0.0698895 0.170875 -0.0319754 0.621829 0.392573 +-0.0707666 0.171245 -0.0323024 0.602902 0.393955 +-0.071689 0.171513 -0.0326505 0.560907 0.407578 +-0.0726695 0.171671 -0.0330178 0.519913 0.5 +-0.073715 0.17176 -0.0333959 0.276933 0.5 +-0.0748644 0.171601 -0.033829 0.29446 0.5 +-0.0760947 0.171183 -0.0343205 0.224607 0.5 +-0.0212669 0.123736 0.0252343 0.42627 0.323383 +-0.0632135 0.155458 0.00808821 0.693818 0.5 +-0.0472373 0.134368 0.0171539 0.672794 0.5 +-0.073138 0.156184 0.0161734 0.654004 0.5 +-0.0582075 0.154657 0.0258383 0.967152 0.5 +-0.0472066 0.134653 0.0142236 0.524758 0.5 +-0.0424671 0.124776 0.022048 0.395847 0.455431 +-0.0832568 0.154212 0.0141255 0.366105 0.5 +-0.0337468 0.127104 0.0118588 0.800576 0.5 +0.0589083 0.0700926 0.0167877 0.472584 0.422622 +0.0582857 0.0709436 0.0165587 0.418318 0.5 +0.0576036 0.0717386 0.0163116 0.471135 0.5 +0.0568364 0.0723477 0.016027 0.583103 0.5 +0.0560042 0.0728404 0.0157211 0.573928 0.5 +0.0551137 0.0732038 0.0153863 0.532984 0.456057 +0.0541727 0.0734662 0.0150335 0.474569 0.463479 +0.0531674 0.0736169 0.0146631 0.639256 0.5 +0.0521155 0.073659 0.0142686 0.63257 0.5 +0.0510202 0.0736047 0.0138558 0.633898 0.5 +0.0498767 0.0734333 0.0134213 0.589891 0.5 +0.0488271 0.0733963 0.0130056 0.63817 0.5 +0.0478387 0.0734572 0.0126134 0.733295 0.5 +0.0470624 0.0740285 0.0123586 0.517817 0.5 +0.0466692 0.0754291 0.0122452 0.377269 0.5 +0.00881068 0.127643 0.0286728 0.376606 0.46896 +-0.0585706 0.155353 0.0213449 0.699619 0.343723 +-0.0346775 0.127387 0.0115177 0.817262 0.5 +-0.065794 0.155512 0.00862557 0.826331 0.5 +-0.064746 0.155508 0.00899366 0.817395 0.5 +-0.0581695 0.15592 0.011334 0.861034 0.5 +-0.0571277 0.155869 0.0117051 0.877316 0.5 +-0.0592055 0.155872 0.0109493 0.575998 0.5 +-0.0560848 0.155673 0.012015 0.388925 0.38319 +-0.0552142 0.155428 0.0123927 0.425088 0.412924 +-0.0124888 0.126191 0.0283067 0.375874 0.5 +-0.0706835 0.155594 0.0053992 0.670605 0.5 +-0.0430221 0.128224 0.015861 0.469733 0.419948 +-0.0702279 0.156078 0.0244771 0.541152 0.5 +-0.062838 0.15526 0.00677387 0.550406 0.5 +-0.0639905 0.155091 0.00636862 0.673216 0.5 +-0.0406463 0.127804 0.0152535 0.593616 0.5 +-0.0397156 0.127552 0.0155957 0.568851 0.5 +-0.0415794 0.128056 0.0149128 0.429919 0.5 +-0.0424853 0.128365 0.0145816 0.384548 0.5 +0.00890997 0.125517 0.0316176 0.585238 0.5 +-0.0733029 0.15632 0.000130521 0.247513 0.5 +0.03891 0.10882 0.00971935 0.698296 0.5 +0.0382789 0.10977 0.00952257 0.694474 0.5 +0.0376477 0.110588 0.00928033 0.690681 0.5 +0.0370023 0.11146 0.00905905 0.688963 0.5 +0.0363552 0.112269 0.0088181 0.69033 0.5 +0.0357248 0.113154 0.00859849 0.682669 0.5 +0.0350985 0.114043 0.00837763 0.667637 0.5 +0.0344662 0.114921 0.00815778 0.666721 0.5 +0.0338144 0.115724 0.00791606 0.664444 0.5 +0.0331853 0.116604 0.00769666 0.651512 0.5 +0.0325029 0.117364 0.00744623 0.639369 0.5 +0.0318002 0.118052 0.00717688 0.62908 0.47784 +0.0310854 0.118732 0.00690653 0.628328 0.5 +0.0303386 0.119339 0.00661655 0.625206 0.48168 +0.0295902 0.119982 0.0063504 0.801562 0.5 +0.0288283 0.120572 0.00606361 0.798143 0.5 +0.0280639 0.121158 0.0057742 0.793243 0.5 +0.0272829 0.121723 0.00548626 0.79397 0.5 +0.0264872 0.122262 0.00520712 0.792851 0.5 +0.0256839 0.122773 0.00490001 0.794126 0.377314 +0.0248936 0.12332 0.00461274 0.799522 0.5 +0.0240783 0.123806 0.00430528 0.791709 0.5 +0.0233024 0.124378 0.00401489 0.602786 0.488076 +0.0224793 0.124852 0.00370943 0.599074 0.5 +0.0216273 0.125269 0.00337714 0.775042 0.5 +0.0207994 0.125738 0.00307388 0.739055 0.5 +0.0199608 0.126186 0.00277612 0.716337 0.5 +0.019082 0.126548 0.00245443 0.704241 0.5 +0.0182356 0.126981 0.00216332 0.676299 0.452519 +0.0173214 0.127268 0.00181685 0.668432 0.5 +0.0164152 0.127597 0.00146207 0.509079 0.481469 +0.015525 0.127932 0.00115163 0.508707 0.47144 +0.014566 0.128157 0.000776346 0.632038 0.474565 +0.0135945 0.128354 0.000408423 0.503675 0.5 +0.012653 0.128571 8.59956e-05 0.646447 0.5 +0.0251837 0.112665 -0.0114294 0.573353 0.5 +-0.0658954 0.166616 -0.0590008 0.424299 0.457759 +-0.0885678 0.139164 0.0111992 0.432359 0.428823 +-0.0818959 0.141783 0.000186922 0.640808 0.5 +-0.0917891 0.141969 0.0171701 0.445774 0.5 +-0.089717 0.142036 0.0301646 0.701387 0.5 +-0.0903646 0.135051 0.0122148 0.685064 0.5 +-0.0805557 0.0977534 -0.00758611 0.531208 0.5 +-0.089402 0.0996815 0.0144017 0.810366 0.5 +-0.0790004 0.100402 -0.00859092 0.493744 0.471799 +-0.0799546 0.100457 -0.00758867 0.517612 0.454511 +-0.0906275 0.137865 0.0211926 0.706216 0.5 +-0.0858362 0.103636 0.0243714 0.514874 0.431291 +-0.0877186 0.105023 0.0153645 0.803863 0.5 +-0.0875094 0.103632 0.00838188 0.682333 0.5 +-0.0883137 0.103697 0.0153744 0.811269 0.5 +0.0310879 0.115727 -0.00269046 0.62623 0.47894 +-0.092697 0.117351 0.0113077 0.467768 0.5 +-0.0925871 0.117342 0.0103086 0.356382 0.5 +-0.00134544 0.0999407 0.0490888 0.290753 0.5 +-0.0678931 0.0900993 0.043242 0.507183 0.5 +-0.0855527 0.153551 0.0192298 0.223741 0.404861 +-0.00794001 0.0994214 0.049751 0.244453 0.439437 +-0.0568081 0.154369 0.0248865 0.434103 0.456068 +-0.0443004 0.130334 0.00946299 0.565156 0.5 +-0.0379773 0.128134 0.0117903 0.731312 0.324497 +-0.0337351 0.126905 0.0148106 0.653919 0.5 +-0.0233454 0.122752 0.0259903 0.404348 0.445674 +-0.0778434 0.153328 0.00140062 0.249187 0.286449 +-0.0655551 0.156269 0.0188465 0.767934 0.5 +-0.0743637 0.153685 0.0319267 0.336977 0.438758 +-0.0339393 0.126307 0.017694 0.41877 0.43514 +-0.0356146 0.127659 0.0111781 0.846532 0.5 +-0.0615214 0.155998 0.0173864 0.817716 0.5 +-0.0863368 0.153207 0.0174967 0.206056 0.38754 +-0.0330041 0.122377 0.0254817 0.578071 0.5 +-0.0312857 0.125233 0.0186818 0.357942 0.468279 +-0.0445794 0.130477 0.0137726 0.505594 0.5 +-0.022585 0.185119 -0.0131839 0.174685 0.270884 +-0.0243398 0.183957 -0.0138554 0.150701 0.5 +-0.0133826 0.1039 0.0435877 0.675337 0.5 +-0.0208657 0.123339 0.0268408 0.452709 0.5 +-0.0589919 0.15382 0.0299308 0.958443 0.5 +-0.0422429 0.129048 0.0117038 0.767622 0.5 +-0.0751026 0.155922 -0.00200459 0.267795 0.5 +-0.0365494 0.127902 0.0108341 0.818936 0.5 +-0.0638477 0.164736 -0.0283363 0.665887 0.5 +-0.0644726 0.165628 -0.0285568 0.646291 0.5 +-0.06512 0.166493 -0.0287867 0.612369 0.5 +-0.0657843 0.167288 -0.0290298 0.594112 0.5 +-0.0664918 0.167987 -0.0292876 0.536219 0.5 +-0.0672139 0.168667 -0.0295504 0.512346 0.5 +-0.067959 0.169303 -0.0298283 0.50326 0.367415 +-0.0687786 0.16979 -0.0301319 0.488239 0.457833 +-0.0695516 0.170347 -0.0304219 0.480544 0.5 +-0.0704174 0.170744 -0.0307374 0.589767 0.5 +-0.0713401 0.171022 -0.0310853 0.575191 0.5 +-0.0723219 0.171178 -0.0314543 0.512251 0.5 +-0.0733702 0.171289 -0.0318245 0.334478 0.44831 +-0.0745177 0.171112 -0.0322615 0.36707 0.5 +-0.075709 0.170829 -0.032719 0.290897 0.3057 +-0.0770198 0.170132 -0.03325 0.259817 0.452429 +-0.0375363 0.128085 0.0104763 0.794124 0.5 +-0.0384762 0.128323 0.0101316 0.804075 0.5 +-0.0466776 0.13337 0.0173732 0.636474 0.5 +-0.0719809 0.156292 0.0165776 0.662364 0.5 +-0.0573264 0.15429 0.0261567 0.984385 0.5 +-0.0394154 0.128541 0.00978788 0.80386 0.5 +-0.00141239 0.101018 0.0444401 0.166781 0.5 +-0.0709721 0.148372 0.0407622 0.532848 0.5 +-0.00823999 0.130343 0.0167173 0.571849 0.5 +0.0584567 0.0701808 0.018095 0.414104 0.5 +0.0578227 0.0710073 0.0178627 0.394699 0.437015 +0.0571135 0.071717 0.0176058 0.438534 0.443907 +0.0563556 0.0723446 0.0173318 0.42779 0.5 +0.0555265 0.0728462 0.0170262 0.51843 0.5 +0.0546767 0.0732977 0.0167178 0.410682 0.447422 +0.0537258 0.0735615 0.0163564 0.456297 0.5 +0.0527245 0.0736707 0.0159788 0.58909 0.5 +0.0516271 0.0736236 0.0155669 0.581976 0.5 +0.0505254 0.0735568 0.0151501 0.569573 0.364481 +0.0494051 0.0734301 0.0147277 0.519146 0.5 +0.0483695 0.0734096 0.0143189 0.612077 0.5 +0.0474981 0.0737139 0.0139878 0.54308 0.455907 +0.0467993 0.0745196 0.0137565 0.496274 0.5 +0.0465284 0.0761532 0.0136843 0.400304 0.5 +0.0231755 0.0916964 -0.0230758 0.630702 0.48336 +-0.0722094 0.155629 0.00630789 0.688536 0.313454 +-0.0711154 0.155676 0.00670049 0.685214 0.5 +0.000685965 0.124734 0.0330095 0.511534 0.5 +-0.00019365 0.125094 0.0326823 0.486706 0.5 +-0.00497421 0.126254 0.0309961 0.382626 0.5 +-0.00601913 0.126314 0.0306279 0.363189 0.5 +-0.00926128 0.126278 0.029483 0.344637 0.5 +-0.0102986 0.126308 0.029096 0.341049 0.5 +-0.0113988 0.126257 0.0287047 0.333748 0.5 +-0.0717279 0.155642 0.00502354 0.620052 0.5 +-0.0422272 0.127744 0.0161624 0.325231 0.408813 +-0.0576415 0.155076 0.0216791 0.648528 0.378957 +-0.0616261 0.155549 0.00719382 0.449426 0.5 +0.00251222 0.126485 0.0307749 0.400673 0.36595 +0.00349921 0.126284 0.0311054 0.454043 0.346887 +0.00163159 0.126824 0.0304308 0.387702 0.5 +0.000643571 0.127035 0.0301068 0.354127 0.407891 +-0.0330104 0.126012 0.0180287 0.411484 0.457069 +-0.0321664 0.125608 0.018357 0.369299 0.5 +-0.00938967 0.130192 0.0162996 0.57726 0.5 +0.0223101 0.120965 0.030775 0.55278 0.5 +0.0386236 0.109277 0.0110826 0.699833 0.5 +0.0380115 0.110174 0.0108643 0.706486 0.5 +0.0373643 0.110979 0.0106211 0.705383 0.5 +0.036728 0.111857 0.010401 0.703011 0.5 +0.0360996 0.112682 0.0101589 0.696281 0.5 +0.0354634 0.113562 0.00993821 0.689917 0.5 +0.0348186 0.114435 0.00971518 0.685713 0.5 +0.0341993 0.115326 0.00949444 0.679565 0.5 +0.0335642 0.11614 0.00925074 0.660301 0.5 +0.0329127 0.116986 0.00902312 0.652837 0.5 +0.0322191 0.117688 0.00875184 0.649909 0.5 +0.0315171 0.118424 0.0085036 0.633479 0.5 +0.030795 0.119096 0.00823469 0.627278 0.5 +0.030074 0.119769 0.00796635 0.622147 0.5 +0.0293267 0.120376 0.00767428 0.812892 0.5 +0.0285657 0.120967 0.00738594 0.803075 0.5 +0.0278403 0.121636 0.00711658 0.784102 0.5 +0.0270583 0.122199 0.00683201 0.793216 0.5 +0.0262422 0.122687 0.00652555 0.790073 0.376228 +0.0254642 0.12325 0.0062381 0.786184 0.5 +0.0246632 0.123785 0.00595837 0.791451 0.5 +0.0238425 0.124265 0.00565298 0.792764 0.380146 +0.0230359 0.124766 0.00534006 0.781806 0.5 +0.0222104 0.125239 0.00503339 0.757597 0.5 +0.0213842 0.125707 0.00472943 0.759147 0.5 +0.0205271 0.126116 0.00440152 0.729775 0.5 +0.0196844 0.126554 0.00410284 0.709506 0.425889 +0.0188215 0.126955 0.00377584 0.714756 0.420114 +0.0179495 0.127337 0.00345096 0.704628 0.5 +0.017067 0.127696 0.00312982 0.681549 0.5 +0.0161864 0.128058 0.00281004 0.662564 0.457911 +0.0153058 0.128412 0.00248962 0.654988 0.5 +0.0143833 0.128699 0.00214848 0.629269 0.5 +0.0134519 0.128957 0.00181284 0.890454 0.5 +0.0124469 0.129111 0.00141235 0.64324 0.5 +0.0115041 0.129313 0.00109395 0.641161 0.5 +-0.0911953 0.143381 0.0241598 0.671702 0.5 +-0.0866345 0.094046 0.00237751 0.467399 0.360717 +-0.0765518 0.15421 -0.000899711 0.337163 0.5 +-0.0843726 0.0952582 -0.00357113 0.316306 0.47591 +-0.0837476 0.0952109 -0.00455405 0.413601 0.475295 +-0.0840799 0.143223 0.00416483 0.504382 0.5 +-0.0886136 0.0969805 0.0223931 0.70309 0.5 +-0.0814376 0.0978185 -0.00662583 0.529372 0.5 +-0.0892922 0.0996701 0.0134013 0.798552 0.5 +-0.0894247 0.0996886 0.0153976 0.83119 0.5 +-0.0889169 0.126733 0.0032966 0.68946 0.5 +-0.0810222 0.100509 -0.00657927 0.510177 0.5 +-0.0866185 0.103641 0.022352 0.606067 0.5 +-0.0847322 0.10481 0.00139005 0.424393 0.5 +-0.0842709 0.104792 0.000381661 0.414869 0.419359 +-0.0882804 0.103688 0.0163664 0.825287 0.5 +-0.0298717 0.104385 -0.0225787 0.464924 0.5 +-0.00583539 0.0910195 -0.0356702 0.698048 0.5 +-0.00221102 0.0959857 -0.0316631 0.801072 0.5 +-0.0693598 0.153979 -0.049866 0.200908 0.5 +-0.00541506 0.100313 0.0476265 0.528489 0.5 +0.0215976 0.121636 0.0305088 0.512306 0.5 +0.0175304 0.120577 0.0333463 0.546896 0.470299 +-0.0779359 0.154614 0.00720975 0.645459 0.5 +-0.0463338 0.132474 0.00863126 0.517376 0.463309 +0.000144172 0.129559 0.0255502 0.835622 0.5 +-0.0360974 0.127648 0.0124754 0.802116 0.298482 +0.0208653 0.122279 0.030221 0.608036 0.5 +-0.0769031 0.149462 0.0386995 0.451132 0.358081 +-0.0758819 0.156006 0.016671 0.638343 0.316461 +-0.0676976 0.156296 0.0180917 0.757403 0.5 +0.0200484 0.122759 0.029923 0.569244 0.334104 +0.0191819 0.123133 0.0296014 0.581558 0.412938 +-0.00314149 0.0972112 0.0530078 0.473335 0.5 +0.0182946 0.123502 0.0292701 0.60046 0.5 +-0.078629 0.155228 0.0230232 0.7387 0.5 +-0.0857072 0.152777 0.0118249 0.220778 0.5 +0.0174279 0.12392 0.0289777 0.623828 0.5 +-0.0234596 0.184384 -0.0119315 0.180403 0.389368 +-0.0249388 0.183594 -0.0126758 0.175519 0.140328 +-0.0268796 0.181867 -0.0133655 0.197024 0.5 +0.00217615 0.12934 0.0262849 0.373359 0.5 +-0.065258 0.156162 0.0146042 0.788011 0.5 +-0.0598711 0.154188 0.0296083 0.930989 0.5 +-0.0645149 0.156191 0.0192193 0.758817 0.5 +-0.0687032 0.155739 0.000270534 0.710861 0.5 +0.0166765 0.12456 0.0286792 0.621545 0.5 +-0.0636848 0.163906 -0.0268361 0.66877 0.5 +-0.0642806 0.164881 -0.0270495 0.621514 0.362111 +-0.0649084 0.165706 -0.0272764 0.590771 0.5 +-0.0655518 0.166572 -0.0275081 0.546865 0.5 +-0.0662458 0.167287 -0.027765 0.518366 0.5 +-0.0669695 0.167967 -0.0280306 0.49046 0.5 +-0.0677123 0.168615 -0.0283035 0.397051 0.5 +-0.0684803 0.169194 -0.0285889 0.483696 0.5 +-0.0692573 0.169753 -0.0288779 0.476639 0.453414 +-0.0701178 0.170154 -0.0291958 0.467332 0.5 +-0.0709934 0.170517 -0.0295248 0.566905 0.409383 +-0.0719831 0.170733 -0.0298702 0.36942 0.400019 +-0.0729725 0.170894 -0.0302341 0.461028 0.43506 +-0.0741328 0.170753 -0.0306566 0.262317 0.338803 +-0.0753758 0.170369 -0.0311391 0.242234 0.5 +-0.076628 0.169808 -0.0316679 0.253224 0.5 +0.0159604 0.125249 0.0284184 0.474444 0.5 +-0.0596259 0.155781 0.0151651 0.690572 0.5 +0.0152596 0.125955 0.0281714 0.458416 0.5 +-0.0719917 0.151909 0.0358108 0.326325 0.348234 +-0.0591899 0.154851 0.0254882 0.546038 0.5 +-0.048193 0.133027 0.0241926 0.592659 0.5 +-0.0413787 0.124797 0.0224172 0.455221 0.5 +0.0145253 0.126603 0.0278836 0.424185 0.335717 +0.0585617 0.0692487 0.0195963 0.448912 0.5 +0.0579437 0.0700837 0.0193768 0.408316 0.5 +0.0573103 0.0709688 0.0191461 0.400477 0.5 +0.0565883 0.0716209 0.0188851 0.434738 0.450224 +0.0558431 0.0722822 0.0186151 0.349876 0.431389 +0.0550045 0.0727719 0.0183019 0.376584 0.419367 +0.0541155 0.0731329 0.017974 0.43954 0.402106 +0.0531688 0.0733724 0.0176223 0.567634 0.40267 +0.0521231 0.0734583 0.0172399 0.393422 0.357864 +0.0510305 0.0733741 0.0168194 0.509825 0.5 +0.0499455 0.0733656 0.0164225 0.484166 0.5 +0.0486963 0.0730972 0.0159514 0.498192 0.41462 +0.047871 0.0733255 0.0156276 0.600938 0.412595 +0.0471599 0.07398 0.0153485 0.473266 0.5 +0.0465947 0.0750442 0.0151558 0.448674 0.5 +0.0463511 0.0764838 0.0150474 0.401542 0.430962 +0.013717 0.127103 0.0275992 0.389547 0.456684 +0.00156461 0.124373 0.0333352 0.557415 0.5 +-0.0105374 0.130025 0.0158825 0.522941 0.372491 +-0.0376712 0.125956 0.0207679 0.290028 0.417071 +-0.0277867 0.0904111 0.0457123 0.547302 0.442134 +-0.0781974 0.153502 0.00273811 0.25927 0.5 +-0.0766672 0.154399 0.00327135 0.268649 0.394545 +-0.0753023 0.155004 0.00375308 0.248873 0.5 +-0.0740753 0.155198 0.0041876 0.445703 0.5 +-0.0728197 0.155564 0.00463235 0.554997 0.5 +-0.0412993 0.127471 0.0164976 0.52138 0.428992 +-0.0759244 0.155422 0.00936737 0.727378 0.5 +-0.0603383 0.155998 0.00765284 0.339822 0.39974 +-0.000345107 0.127203 0.0297544 0.356488 0.41495 +-0.0112759 0.125368 0.030237 0.375029 0.5 +-0.0694586 0.153877 0.0321166 0.460494 0.5 +-0.0712698 0.156094 0.0241098 0.52413 0.5 +-0.0830831 0.152763 0.0275295 0.311125 0.5 +-0.049763 0.132774 0.0280532 0.651556 0.5 +-0.0624495 0.15591 0.022857 0.630706 0.373099 +-0.000605671 0.129033 0.0267429 0.363009 0.5 +0.0128917 0.127573 0.0272919 0.442438 0.5 +0.0118921 0.127946 0.0270512 0.458746 0.378305 +0.0377238 0.110496 0.0121805 0.707291 0.5 +0.0371019 0.111384 0.0119604 0.706983 0.5 +0.03646 0.112262 0.0117392 0.707581 0.5 +0.0358352 0.11315 0.0115155 0.706481 0.5 +0.0352114 0.113974 0.0112756 0.695134 0.5 +0.0345652 0.114846 0.0110543 0.672224 0.5 +0.0339253 0.115718 0.0108315 0.667408 0.5 +0.0332816 0.116574 0.0106008 0.667715 0.442574 +0.0326144 0.117295 0.0103313 0.665737 0.5 +0.0319294 0.118052 0.0100791 0.653196 0.5 +0.0312326 0.118751 0.0098088 0.6376 0.5 +0.0305158 0.11943 0.00953878 0.630343 0.470869 +0.0297856 0.120093 0.00926746 0.628456 0.5 +0.0290523 0.120756 0.00899975 0.636401 0.474275 +0.0283038 0.121367 0.00870899 0.628729 0.370591 +0.0275645 0.122014 0.00844231 0.622095 0.477618 +0.026783 0.122575 0.00815739 0.607334 0.5 +0.0259953 0.123127 0.0078705 0.785715 0.5 +0.0251982 0.123641 0.0075622 0.782797 0.5 +0.0243858 0.124139 0.00725423 0.784048 0.379372 +0.0235922 0.124679 0.00697037 0.787116 0.5 +0.0227625 0.125142 0.00666699 0.763786 0.5 +0.0219416 0.125622 0.00635903 0.76302 0.5 +0.0211162 0.126093 0.00605375 0.736058 0.5 +0.0202619 0.12651 0.00572713 0.713751 0.5 +0.0193849 0.126884 0.00540105 0.724358 0.417943 +0.0185443 0.12732 0.00510228 0.700417 0.5 +0.017675 0.127712 0.00477874 0.67499 0.5 +0.0167938 0.128074 0.00445644 0.684004 0.442175 +0.0159137 0.128436 0.00413586 0.662165 0.5 +0.0150002 0.128745 0.00378903 0.657108 0.5 +0.0141143 0.129082 0.00347211 0.657206 0.5 +0.0131837 0.129339 0.0031365 0.628213 0.476179 +0.0122169 0.129551 0.00276868 0.889561 0.5 +0.0112459 0.129755 0.00240428 0.895866 0.5 +0.0102649 0.129908 0.00205228 0.88378 0.5 +0.00923557 0.129984 0.00166977 0.880979 0.5 +0.00819795 0.130005 0.00128654 0.8694 0.5 +0.00716146 0.130043 0.000903466 0.866825 0.5 +-0.0872227 0.0941086 0.00335062 0.501936 0.448908 +-0.0830177 0.0951656 -0.00554205 0.437663 0.5 +-0.091214 0.143385 0.025163 0.678671 0.5 +-0.0889655 0.0969901 0.0204055 0.689304 0.5 +-0.0759458 0.0974591 -0.0125133 0.503102 0.5 +-0.0942177 0.125518 0.0172578 0.550781 0.470507 +-0.0888522 0.0996312 0.00941041 0.77307 0.5 +-0.0887264 0.0996152 0.00841821 0.525387 0.5 +-0.0820951 0.100566 -0.0055776 0.496859 0.5 +-0.0869674 0.103645 0.0213508 0.600508 0.460345 +-0.0862725 0.103636 0.0233541 0.617774 0.5 +-0.0851069 0.104842 0.00238218 0.438592 0.5 +-0.0831779 0.111548 0.00129095 0.712398 0.5 +-0.0841632 0.11158 0.00227497 0.651833 0.5 +-0.045814 0.0898818 -0.0220292 0.724569 0.5 +-0.0906194 0.139243 0.0211829 0.730586 0.5 +-0.092935 0.117416 0.0233037 0.808936 0.5 +-0.0935755 0.117419 0.0183042 0.706012 0.5 +-0.0935183 0.117402 0.0193034 0.732947 0.5 +-0.0924729 0.117499 0.0403021 0.772175 0.5 +-0.0499383 0.162625 -0.0047964 0.305141 0.292119 +-0.042083 0.168351 -0.00985967 0.419475 0.310053 +-0.0676415 0.155906 0.0108585 0.818741 0.5 +0.011146 0.128332 0.0266558 0.412455 0.45446 +0.0102651 0.128706 0.0263309 0.409074 0.438713 +-0.0469792 0.133264 0.00837709 0.554679 0.457336 +-0.00193982 0.12966 0.0247961 0.83315 0.5 +-0.00084278 0.129714 0.0251926 0.834449 0.5 +-0.0341879 0.127198 0.0131711 0.741856 0.32739 +-0.0452276 0.131073 0.0164666 0.493773 0.5 +-0.0457467 0.132003 0.0161756 0.449507 0.437328 +-0.0440271 0.128143 0.0184429 0.59216 0.5 +-0.0606115 0.155938 0.0148123 0.714515 0.5 +-0.0336965 0.120802 0.028215 0.682287 0.350506 +0.00934693 0.129002 0.0260013 0.38821 0.446949 +-0.0666005 0.156329 0.0184798 0.740105 0.5 +-0.0370341 0.127886 0.0121304 0.75587 0.320396 +-0.0774721 0.155387 0.0234212 0.785357 0.5 +-0.081048 0.154699 0.0221975 0.713198 0.5 +0.00841723 0.129272 0.0256623 0.528073 0.426794 +-0.0243904 0.183518 -0.0110527 0.300894 0.347292 +-0.0257723 0.182903 -0.0115399 0.170775 0.409328 +-0.02728 0.181917 -0.0121056 0.200351 0.5 +-0.0859779 0.0910726 0.0273961 0.752441 0.5 +-0.0205861 0.122762 0.0284276 0.477664 0.406875 +-0.0367225 0.125751 0.02112 0.319572 0.463481 +-0.0608634 0.154346 0.0292597 0.929588 0.5 +-0.0304238 0.12007 0.0279522 0.408137 0.360947 +-0.0580932 0.155356 0.0200663 0.752298 0.5 +0.00743904 0.129465 0.0253135 0.381812 0.5 +-0.0117444 0.129778 0.0154481 0.537858 0.5 +-0.0640717 0.164086 -0.0255357 0.646139 0.5 +-0.0647247 0.16489 -0.0257757 0.630311 0.5 +-0.0653475 0.165775 -0.0260007 0.583512 0.5 +-0.0660244 0.166553 -0.0262486 0.418694 0.5 +-0.066735 0.167252 -0.0265095 0.488727 0.5 +-0.0675078 0.167827 -0.0267933 0.460264 0.5 +-0.0682325 0.168499 -0.0270627 0.469602 0.5 +-0.0690431 0.169001 -0.0273587 0.485604 0.5 +-0.0698247 0.169548 -0.0276555 0.45113 0.448937 +-0.0706968 0.169922 -0.0279808 0.425906 0.462063 +-0.0716236 0.170198 -0.0283222 0.533783 0.5 +-0.0726143 0.1704 -0.0286759 0.462443 0.5 +-0.0737877 0.170302 -0.0290826 0.292877 0.5 +-0.0750304 0.169881 -0.0295693 0.273148 0.5 +-0.0762918 0.169333 -0.0300921 0.260117 0.5 +0.0065117 0.129736 0.0249737 0.516671 0.5 +0.0055446 0.129937 0.0246284 0.502155 0.440756 +0.0045023 0.13009 0.02428 0.368132 0.465167 +-0.059554 0.155543 0.0209921 0.733956 0.322435 +-0.0610591 0.155387 0.024814 0.585114 0.5 +-0.0477004 0.131837 0.0244001 0.595005 0.5 +-0.0392376 0.124806 0.0231803 0.349864 0.440701 +0.00356053 0.130245 0.0239041 0.370518 0.425703 +0.0579995 0.0690441 0.020859 0.486203 0.482712 +0.0573849 0.0699459 0.0206376 0.536844 0.5 +0.0567453 0.0707667 0.0204115 0.393719 0.463847 +0.0560276 0.0714782 0.0201554 0.354605 0.5 +0.0552517 0.0720728 0.0198735 0.341504 0.5 +0.0544186 0.0725633 0.0195702 0.30858 0.455879 +0.0534733 0.0728245 0.019221 0.339631 0.424879 +0.0525281 0.0730706 0.0188626 0.306029 0.5 +0.0514753 0.0731205 0.0184716 0.379808 0.455936 +0.0504441 0.0731136 0.0180651 0.441446 0.441461 +0.0492456 0.0728121 0.0176064 0.70948 0.5 +0.0480441 0.0725423 0.0171549 0.923601 0.5 +0.0472882 0.0731371 0.0168777 0.397832 0.5 +0.0467254 0.0741323 0.0166809 0.390263 0.428379 +0.0464078 0.0756596 0.0165703 0.354253 0.5 +0.0462743 0.0775122 0.0165366 0.423401 0.455098 +-0.0940189 0.11877 0.0172997 0.650926 0.5 +-0.00267498 0.100539 0.0471075 0.510266 0.5 +-0.0823243 0.154364 0.0217732 0.415087 0.5 +-0.0293211 0.123712 0.0208659 0.399576 0.5 +-0.030188 0.124116 0.0205603 0.442988 0.5 +-0.0345343 0.126083 0.0189612 0.414878 0.435628 +-0.0372934 0.126961 0.0179492 0.593384 0.5 +-0.0383432 0.127011 0.0175779 0.541898 0.40483 +-0.0393291 0.127134 0.01721 0.509721 0.4366 +-0.0403111 0.127303 0.0168527 0.517416 0.431399 +-0.0133496 0.124356 0.0309811 0.498424 0.36623 +-0.0590718 0.156479 0.0080978 0.521847 0.5 +-0.00731691 0.128182 0.0272242 0.341438 0.5 +-0.0380005 0.12652 0.0191796 0.523752 0.5 +-0.0658186 0.154852 0.00425231 0.847314 0.5 +-0.0678494 0.155094 0.00351036 0.863089 0.5 +-0.0532977 0.158553 0.00873827 0.301109 0.464994 +0.0025214 0.130289 0.0235241 0.354902 0.441389 +-0.0762512 0.156264 -0.00677505 0.612145 0.5 +-0.0482692 0.133969 0.0226705 0.568414 0.479509 +-0.0134047 0.0981882 0.0494032 0.272873 0.401973 +0.00153258 0.130437 0.0231622 0.361979 0.432392 +0.038042 0.109981 0.0137429 0.714271 0.5 +0.0374202 0.110869 0.0135214 0.706272 0.5 +0.0367927 0.111755 0.0132988 0.707144 0.5 +0.0361533 0.112569 0.0130564 0.708057 0.5 +0.0355447 0.11347 0.012835 0.709586 0.5 +0.0349132 0.114353 0.0126105 0.700041 0.5 +0.0342731 0.115225 0.0123899 0.694886 0.5 +0.0336304 0.116029 0.0121428 0.681565 0.5 +0.0329715 0.116865 0.0119087 0.667322 0.5 +0.0323242 0.117657 0.0116569 0.660004 0.5 +0.0316363 0.118365 0.0113851 0.65778 0.5 +0.0309373 0.119109 0.0111337 0.64963 0.5 +0.0302201 0.119789 0.0108648 0.639758 0.5 +0.0294982 0.120461 0.0105965 0.641083 0.462236 +0.0287604 0.121079 0.0103057 0.632497 0.5 +0.0280264 0.121739 0.0100361 0.621179 0.5 +0.0272688 0.122366 0.00977001 0.617291 0.480092 +0.0264769 0.122884 0.00946172 0.620598 0.479552 +0.0256965 0.123446 0.00917645 0.611414 0.480979 +0.024909 0.124002 0.00889289 0.596654 0.382111 +0.0241035 0.1245 0.0085821 0.773823 0.5 +0.0233146 0.125046 0.00829766 0.773248 0.5 +0.0224712 0.125479 0.00796738 0.74514 0.399562 +0.02167 0.125998 0.00768374 0.747149 0.5 +0.0208082 0.1264 0.00735797 0.729499 0.5 +0.0199501 0.126815 0.00703133 0.697043 0.427188 +0.0191098 0.127253 0.00673134 0.70546 0.5 +0.0182351 0.12763 0.00640475 0.676417 0.5 +0.0173606 0.128011 0.00608341 0.66115 0.450967 +0.0164869 0.128389 0.00575868 0.67476 0.5 +0.0156145 0.128768 0.00543431 0.65468 0.5 +0.0147262 0.129115 0.00511474 0.636807 0.5 +0.0138044 0.129402 0.00474998 0.629764 0.47952 +0.0129127 0.129715 0.00445998 0.642331 0.5 +0.0119495 0.129938 0.00409466 0.618767 0.479309 +0.0110134 0.130158 0.00376449 0.890645 0.5 +0.0100369 0.130324 0.00340984 0.876344 0.5 +0.0089719 0.130372 0.00300057 0.87423 0.5 +0.00798329 0.130466 0.00265255 0.863422 0.5 +0.00689753 0.13043 0.00224143 0.85903 0.5 +0.00586085 0.130491 0.00185259 0.849802 0.5 +-0.0758095 0.0920857 -0.0139153 0.490973 0.5 +0.00214563 0.119376 -0.0145717 0.777408 0.5 +-0.07574 0.144451 -0.00587632 0.521497 0.5 +-0.0890685 0.0969888 0.0194042 0.669566 0.5 +-0.0887705 0.0969872 0.0214096 0.692756 0.5 +-0.0914674 0.129551 0.00825277 0.415583 0.372169 +-0.0847653 0.103459 0.000382003 0.406227 0.5 +-0.0876012 0.0995367 0.00546504 0.465197 0.362356 +-0.082938 0.100617 -0.00458659 0.461899 0.5 +-0.0837054 0.10067 -0.00361944 0.34216 0.458884 +-0.0874054 0.110457 0.012344 0.434026 0.407616 +-0.085482 0.104867 0.00337403 0.460135 0.325936 +-0.085947 0.104892 0.00437979 0.477447 0.5 +-0.0791181 0.10724 -0.00560787 0.56292 0.5 +-0.0810695 0.111472 -0.000645954 0.681229 0.5 +-0.0925573 0.125589 0.0382552 0.834818 0.5 +-0.0856634 0.1104 0.0223511 0.720834 0.5 +-0.0919525 0.126983 0.0392569 0.584468 0.476724 +-0.0922566 0.126816 0.00926569 0.42338 0.5 +-0.0943935 0.125559 0.0222675 0.628989 0.5 +-0.0315382 0.178553 -0.0120253 0.267614 0.5 +-0.092775 0.128304 0.0272531 0.500605 0.470974 +-0.0896629 0.124003 0.00427429 0.657292 0.5 +-0.0902327 0.124018 0.00527185 0.62398 0.5 +-0.091005 0.124034 0.00628346 0.572478 0.5 +-0.0732714 0.156195 0.0132096 0.756541 0.5 +-0.0878262 0.152428 0.0199936 0.219414 0.5 +-0.082872 0.154403 0.0201091 0.461873 0.5 +-0.0114115 0.128814 0.0228458 0.403555 0.5 +-0.0229547 0.12614 0.0172488 0.389036 0.439043 +-0.00402179 0.129762 0.0240423 0.842685 0.5 +-0.00292868 0.129815 0.0244395 0.831347 0.5 +-0.0332433 0.126938 0.0135159 0.748333 0.5 +-0.0739928 0.155924 0.011504 0.761094 0.5 +-0.0362517 0.123246 0.0257763 0.511794 0.39959 +-0.0462848 0.131856 0.0204922 0.65581 0.5 +-0.062692 0.155999 0.0140721 0.807055 0.5 +0.000436968 0.130385 0.0227651 0.495292 0.5 +-0.0702292 0.153353 0.0333614 0.338663 0.449898 +-0.0193672 0.122992 0.0288371 0.497718 0.392807 +-0.0225076 0.125867 0.0188793 0.397297 0.5 +-0.0799294 0.154987 0.0226092 0.327843 0.5 +-0.000605347 0.130433 0.0223861 0.845215 0.5 +-0.00170163 0.130406 0.0219933 0.505355 0.5 +-0.00273996 0.130454 0.0216129 0.517613 0.5 +-0.0281162 0.181397 -0.0109687 0.159018 0.429735 +-0.0298496 0.180049 -0.0116061 0.239145 0.5 +-0.0260252 0.0904818 0.0482145 0.589766 0.5 +0.002127 0.0994865 0.0488443 0.46312 0.332932 +-0.0617979 0.154608 0.0289232 0.928053 0.5 +-0.00378356 0.130498 0.0212315 0.532704 0.5 +-0.00487894 0.130442 0.0208375 0.519186 0.5 +-0.0632795 0.162306 -0.0238202 0.664947 0.5 +-0.0638695 0.16329 -0.0240265 0.616532 0.5 +-0.064489 0.16418 -0.0242498 0.616831 0.5 +-0.065154 0.164972 -0.0244937 0.564589 0.5 +-0.0658178 0.165764 -0.0247368 0.532075 0.5 +-0.066536 0.166455 -0.0250024 0.490996 0.376708 +-0.067269 0.167119 -0.0252721 0.317836 0.478089 +-0.0679962 0.167786 -0.0255431 0.374348 0.5 +-0.0687634 0.168362 -0.025835 0.459181 0.420666 +-0.0695817 0.168848 -0.0261289 0.424522 0.5 +-0.0704486 0.16924 -0.0264473 0.538062 0.5 +-0.0713267 0.169665 -0.0267525 0.380093 0.44026 +-0.0723216 0.169832 -0.0271166 0.34589 0.5 +-0.0734182 0.169757 -0.0275332 0.357987 0.5 +-0.0746874 0.169403 -0.0279937 0.236755 0.330811 +-0.0759846 0.168851 -0.0284951 0.218721 0.5 +-0.00597277 0.130385 0.0204408 0.523433 0.5 +-0.0236176 0.123316 0.0244011 0.519894 0.35286 +-0.0634727 0.156127 0.0195874 0.758364 0.5 +-0.00306441 0.100922 0.0454807 0.351859 0.5 +-0.0620497 0.155563 0.0244621 0.589637 0.5 +-0.00712692 0.130239 0.0200248 0.524966 0.5 +-0.0381943 0.124735 0.0235454 0.384209 0.437915 +-0.076294 0.155585 0.0106948 0.728384 0.5 +0.0573543 0.0687146 0.022093 0.59656 0.5 +0.056742 0.0696177 0.0218717 0.539175 0.5 +0.0560814 0.0704234 0.0216351 0.498749 0.5 +0.0553692 0.0711293 0.0213817 0.450851 0.5 +0.0545912 0.0717149 0.021096 0.383485 0.5 +0.0538065 0.0721186 0.0208488 0.320561 0.439406 +0.0527625 0.0723674 0.0204268 0.325708 0.396146 +0.0518225 0.072596 0.0200635 0.393581 0.4601 +0.0508347 0.0727393 0.0196905 0.339858 0.5 +0.049638 0.0724241 0.0192263 0.399564 0.5 +0.0485095 0.0723104 0.0188157 0.401354 0.5 +0.047344 0.0721054 0.0183678 0.93426 0.5 +0.0467055 0.0730498 0.0181295 0.40551 0.5 +0.0463322 0.0743214 0.0180018 0.329646 0.465902 +0.0462175 0.0761811 0.0179689 0.353924 0.5 +-0.008275 0.130081 0.0196055 0.478771 0.412081 +-0.0310065 0.124592 0.0202545 0.354073 0.388318 +-0.0283907 0.123379 0.0211752 0.397189 0.5 +-0.0274038 0.123285 0.0215594 0.344065 0.458123 +-0.00942316 0.129915 0.019193 0.493669 0.5 +-0.0728479 0.14776 0.0416103 0.542106 0.340749 +-0.00312412 0.123427 0.0346626 0.563222 0.39044 +-0.00400483 0.123769 0.0343163 0.5584 0.417412 +-0.00493749 0.124022 0.0339675 0.537419 0.5 +-0.0105693 0.129741 0.0187791 0.489392 0.5 +-0.0122465 0.124398 0.0313659 0.420996 0.333286 +-0.0577252 0.156918 0.00853143 0.261184 0.315698 +-0.00841973 0.128157 0.0268439 0.344265 0.5 +-0.0410118 0.126885 0.0180931 0.352536 0.5 +-0.0668607 0.154942 0.00387089 0.852414 0.5 +-0.0117177 0.129576 0.0183624 0.463975 0.406638 +-0.0717955 0.156396 0.0195489 0.560958 0.5 +-0.0427601 0.128938 0.0129983 0.552723 0.339365 +-0.0435244 0.129538 0.0127129 0.434942 0.46975 +-0.04424 0.130203 0.0124253 0.539851 0.5 +-0.0448961 0.131042 0.0121815 0.529442 0.5 +-0.0645986 0.15064 0.0368964 0.494856 0.5 +-0.0129215 0.129318 0.0179306 0.434555 0.5 +0.0377424 0.110293 0.0150624 0.710167 0.5 +0.0371116 0.111176 0.0148387 0.706309 0.5 +0.0364911 0.112064 0.0146153 0.706768 0.5 +0.0358655 0.112954 0.0143927 0.708993 0.5 +0.0352594 0.113795 0.0141522 0.710491 0.5 +0.0346263 0.114673 0.0139267 0.702107 0.5 +0.033977 0.115595 0.0137221 0.693341 0.5 +0.0333357 0.116389 0.013468 0.693309 0.5 +0.0326756 0.117173 0.0132168 0.686439 0.5 +0.0320122 0.117952 0.0129635 0.673137 0.5 +0.0313294 0.118714 0.0127065 0.672237 0.365119 +0.030619 0.119354 0.0124235 0.664001 0.44677 +0.029911 0.120086 0.0121698 0.643274 0.5 +0.0291881 0.120758 0.0119009 0.632664 0.5 +0.0284544 0.121423 0.0116324 0.630191 0.370092 +0.0277062 0.122023 0.0113437 0.627488 0.5 +0.0269552 0.122658 0.0110745 0.624225 0.5 +0.0261865 0.123233 0.0107875 0.616621 0.5 +0.0254031 0.123772 0.0104796 0.6096 0.5 +0.024638 0.124378 0.010214 0.7839 0.5 +0.0238189 0.124864 0.00990899 0.770067 0.5 +0.0230068 0.125355 0.00960117 0.739195 0.397926 +0.0221833 0.125827 0.00929485 0.746009 0.5 +0.0213306 0.126248 0.00896939 0.717165 0.5 +0.0204936 0.1267 0.00866396 0.703486 0.423689 +0.0196258 0.127091 0.0083394 0.710245 0.5 +0.0187844 0.127527 0.00803838 0.677837 0.5 +0.0179084 0.127905 0.00771503 0.662188 0.449192 +0.0170749 0.128355 0.00741174 0.670386 0.442547 +0.0161732 0.12869 0.00706423 0.65214 0.5 +0.0152965 0.129062 0.00674245 0.640203 0.5 +0.0144027 0.129384 0.00642559 0.644004 0.463482 +0.0134856 0.129689 0.00607818 0.618468 0.478382 +0.0125568 0.129953 0.0057397 0.628002 0.5 +0.0116228 0.130194 0.0054038 0.888074 0.5 +0.0106503 0.130383 0.00504386 0.883512 0.5 +0.00967799 0.130572 0.00468392 0.875792 0.5 +0.0086501 0.130656 0.00430717 0.865857 0.5 +0.00766772 0.130773 0.00395877 0.866254 0.5 +0.00658391 0.130753 0.00354793 0.837244 0.5 +0.00549414 0.130728 0.00313392 0.849898 0.5 +0.00445432 0.130749 0.00275136 0.831703 0.5 +0.00336694 0.130688 0.00234495 0.825184 0.5 +0.00222051 0.130562 0.00190808 0.819976 0.5 +0.00113463 0.130461 0.00151005 0.804559 0.5 +-6.48961e-05 0.130222 0.00105503 0.79111 0.5 +-0.089275 0.0969971 0.0184044 0.668262 0.5 +-0.0894207 0.0969969 0.0174102 0.666718 0.5 +-0.0286428 0.107004 -0.0213195 0.442464 0.5 +-0.0870966 0.0995146 0.0044219 0.605824 0.5 +-0.088041 0.0995721 0.00642464 0.506304 0.5 +0.0495953 0.0662964 -0.000416722 0.502502 0.43381 +-0.073544 0.177863 -0.0540307 0.317257 0.5 +-0.0712429 0.177886 -0.0560058 0.265084 0.460455 +-0.0804236 0.104574 -0.00559216 0.540161 0.41414 +-0.0871543 0.105024 0.0183639 0.569233 0.5 +-0.0648162 0.092445 -0.0185198 0.622643 0.5 +-0.0927931 0.126937 0.0282668 0.655693 0.5 +-0.0863235 0.110381 0.0203696 0.710228 0.5 +-0.067463 0.166618 -0.0559977 0.51561 0.298165 +-0.0764027 0.109871 -0.00664525 0.543658 0.5 +-0.0755266 0.109807 -0.00760163 0.576162 0.5 +-0.0930011 0.116069 0.0193086 0.778647 0.5 +-0.0928105 0.116053 0.0203106 0.788112 0.5 +-0.0925679 0.116061 0.0213084 0.780454 0.5 +-0.0881185 0.151555 0.0230923 0.281544 0.5 +-0.0874625 0.123933 -0.000723767 0.498709 0.333038 +-0.0867734 0.123909 -0.00174219 0.494636 0.5 +-0.0399008 0.128531 0.0110866 0.716258 0.5 +-0.0609078 0.155801 0.00889681 0.529494 0.5 +-0.0141843 0.128965 0.0174774 0.461551 0.5 +-0.0126066 0.128516 0.0224096 0.712635 0.5 +0.00323976 0.128177 0.0281353 0.421486 0.5 +0.0211117 0.124199 0.0260136 0.536609 0.457943 +-0.00610552 0.129863 0.0232869 0.817835 0.5 +-0.00506384 0.129812 0.0236663 0.852199 0.5 +-0.0351154 0.127437 0.0128308 0.752667 0.31964 +-0.0455491 0.131451 0.0178282 0.566158 0.5 +0.00141552 0.0990584 0.0500955 0.452638 0.5 +0.0022443 0.0974458 0.0519249 0.3851 0.473885 +0.0194228 0.125079 0.025397 0.739307 0.323369 +-0.0840303 0.151908 0.0287412 0.266127 0.265628 +-0.0153828 0.128676 0.0170423 0.486182 0.5 +0.000951329 0.10045 0.046938 0.49772 0.5 +-0.0528926 0.154865 0.0118243 0.470093 0.5 +-0.0779922 0.155321 0.011561 0.705245 0.5 +-0.0165872 0.128419 0.0166112 0.458365 0.5 +-0.0273746 0.181651 -0.00921581 0.269098 0.5 +-0.0288938 0.180785 -0.00982491 0.243604 0.20583 +-0.0304041 0.179805 -0.0103906 0.230583 0.41631 +-0.0321103 0.178539 -0.0110044 0.296306 0.5 +-0.0248787 0.0796614 0.0530244 0.764034 0.5 +-0.0864154 0.152983 0.0204471 0.258747 0.389817 +-0.0627886 0.154765 0.0285735 0.92804 0.5 +-0.0271151 0.122681 0.0231414 0.670911 0.5 +-0.0178474 0.12806 0.016159 0.470802 0.5 +-0.0128908 0.129601 0.0150315 0.549708 0.5 +-0.0636773 0.162484 -0.0225185 0.582314 0.5 +-0.0642828 0.163385 -0.0227384 0.578693 0.5 +-0.0649478 0.164181 -0.0229827 0.561191 0.5 +-0.0656191 0.164967 -0.0232289 0.534987 0.5 +-0.0662913 0.165749 -0.0234747 0.500249 0.5 +-0.0670519 0.166375 -0.0237602 0.473463 0.5 +-0.0678037 0.166983 -0.024036 0.371552 0.5 +-0.068567 0.167578 -0.0243154 0.365768 0.404876 +-0.0693375 0.168152 -0.0246084 0.326047 0.394601 +-0.07021 0.168534 -0.0249229 0.391975 0.453404 +-0.0710857 0.168903 -0.0252489 0.382826 0.454448 +-0.0720162 0.169175 -0.0255925 0.474872 0.446582 +-0.0730867 0.169281 -0.0259539 0.236044 0.37718 +-0.0743457 0.168929 -0.0264214 0.244179 0.5 +-0.0756189 0.168382 -0.0269354 0.211839 0.5 +-0.0189924 0.127884 0.0157415 0.451097 0.5 +-0.0304832 0.12104 0.0263992 0.48285 0.5 +-0.00201946 0.100869 0.0458524 0.353279 0.5 +-0.055031 0.152471 0.0270238 0.396773 0.5 +-0.0564476 0.153922 0.0264803 0.99449 0.5 +-0.0203106 0.127423 0.0152774 0.392083 0.5 +-0.0372574 0.124492 0.0238955 0.408953 0.5 +-0.0751451 0.15577 0.0110973 0.757648 0.5 +-0.0215612 0.127036 0.0148264 0.419792 0.418438 +0.0560761 0.0692634 0.0230866 0.5928 0.5 +0.0553826 0.0699889 0.0228528 0.5217 0.5 +0.0546575 0.0706779 0.0225865 0.373051 0.5 +0.0538492 0.0711959 0.0223128 0.288147 0.472327 +0.0529955 0.0716182 0.0219676 0.368683 0.5 +0.052054 0.0718585 0.0216053 0.421352 0.5 +0.0510679 0.0720267 0.021243 0.364339 0.5 +0.0499773 0.0719552 0.0208312 0.408674 0.5 +0.0488349 0.0718069 0.020409 0.406572 0.5 +0.0476579 0.0715472 0.019969 0.459214 0.5 +0.0467013 0.0718392 0.0195936 0.553088 0.5 +0.0462172 0.0729792 0.0194263 0.364467 0.5 +0.0460054 0.0746307 0.0193568 0.339361 0.466656 +-0.0227666 0.126779 0.0143916 0.452845 0.5 +0.0105902 0.125785 0.0307704 0.456899 0.5 +-0.0102366 0.125327 0.0306172 0.394819 0.5 +-0.0787564 0.154933 0.00983696 0.688959 0.5 +-0.0187344 0.126979 0.0202236 0.402368 0.5 +-0.0804177 0.153092 0.00488677 0.321879 0.39417 +-0.0145507 0.0980154 0.0489953 0.3937 0.300415 +-0.0239683 0.126504 0.0139537 0.48508 0.5 +-0.0534319 0.15708 0.0101259 0.400168 0.392503 +-0.0543644 0.15733 0.00977334 0.338592 0.5 +-0.0554704 0.157309 0.00940753 0.313992 0.5 +-0.0566266 0.157159 0.00899778 0.213598 0.399532 +-0.00950205 0.12806 0.0264334 0.327514 0.416993 +-0.0840242 0.151932 0.0065796 0.219001 0.5 +-0.0755392 0.154957 0.000803149 0.22064 0.244815 +-0.0252277 0.12616 0.0135052 0.365732 0.469655 +-0.0419839 0.128576 0.0133734 0.504756 0.317663 +-0.0409763 0.128303 0.0136557 0.455946 0.347522 +-0.0361503 0.127316 0.0154104 0.693177 0.5 +-0.0352134 0.127051 0.0157486 0.657748 0.5 +-0.0342826 0.126777 0.01609 0.611255 0.5 +-0.0333921 0.126443 0.0164188 0.435615 0.5 +-0.0264363 0.125919 0.0130719 0.562434 0.5 +0.0380432 0.109702 0.0166041 0.708848 0.5 +0.0374516 0.110677 0.0163977 0.706629 0.5 +0.0368364 0.111573 0.0161776 0.71557 0.414299 +0.0362036 0.112389 0.0159326 0.708267 0.5 +0.0355806 0.113279 0.0157103 0.707128 0.5 +0.0349482 0.114159 0.0154869 0.700287 0.5 +0.0343153 0.115038 0.0152609 0.698186 0.5 +0.0336755 0.115893 0.0150272 0.706423 0.5 +0.0330296 0.116688 0.0147767 0.706147 0.5 +0.0323797 0.117481 0.0145242 0.698294 0.5 +0.0316988 0.118246 0.0142694 0.691884 0.428219 +0.0310013 0.118944 0.0140014 0.675824 0.5 +0.0302928 0.119677 0.0137476 0.654896 0.444797 +0.0295862 0.120365 0.0134787 0.656533 0.5 +0.0288719 0.121048 0.0132077 0.647783 0.5 +0.0281325 0.121698 0.0129367 0.643953 0.5 +0.027377 0.122298 0.0126488 0.630896 0.464129 +0.0266099 0.122879 0.0123678 0.620014 0.375301 +0.0258358 0.123453 0.0120756 0.606163 0.478849 +0.0250704 0.12404 0.011788 0.602292 0.5 +0.0242948 0.124607 0.0114976 0.606014 0.5 +0.0235082 0.12516 0.0112114 0.605759 0.5 +0.0226846 0.125635 0.0109073 0.734185 0.5 +0.0218584 0.126105 0.0106 0.723274 0.5 +0.0210026 0.126515 0.0102791 0.712274 0.5 +0.0202061 0.126966 0.0100746 0.680123 0.433635 +0.0193044 0.127372 0.00964815 0.696884 0.5 +0.0184567 0.127794 0.00934393 0.684108 0.5 +0.0175902 0.128186 0.00902123 0.651383 0.452123 +0.0167178 0.128574 0.00869666 0.657537 0.5 +0.0158474 0.128954 0.00837281 0.634823 0.5 +0.0149745 0.129329 0.00806984 0.614504 0.480204 +0.0140849 0.129676 0.00773008 0.896681 0.5 +0.0131559 0.129936 0.00738875 0.619441 0.5 +0.0122318 0.130219 0.0070475 0.874658 0.5 +0.0112608 0.130411 0.00668952 0.882705 0.5 +0.0103285 0.130654 0.00635323 0.879889 0.5 +0.00935197 0.130836 0.00599246 0.860761 0.5 +0.00832653 0.130915 0.00561741 0.858173 0.5 +0.00730102 0.131 0.00524198 0.853447 0.5 +0.00626682 0.131047 0.00486423 0.836059 0.5 +0.00517866 0.131021 0.00445011 0.831493 0.5 +0.00414266 0.131018 0.00407154 0.838706 0.5 +0.0030519 0.130996 0.00365966 0.819804 0.5 +0.00190257 0.130874 0.00322319 0.801327 0.5 +0.000818555 0.130756 0.00282721 0.796689 0.5 +-0.000384494 0.130522 0.00237337 0.778372 0.5 +-0.00154364 0.130277 0.00186507 0.783743 0.5 +-0.00272576 0.130091 0.00149765 0.787313 0.5 +-0.00392373 0.129832 0.00104637 0.766903 0.5 +-0.0935168 0.125484 0.0132627 0.682073 0.5 +-0.0932985 0.125478 0.0122618 0.632058 0.5 +-0.08839 0.0995952 0.00742201 0.499025 0.454314 +0.0224588 0.120521 -0.00588511 0.596436 0.5 +-0.0936513 0.125496 0.0142597 0.721422 0.5 +0.022728 0.117081 -0.0101857 0.492045 0.466977 +0.0244317 0.116294 -0.00934411 0.481283 0.5 +-0.0868829 0.105004 0.0193534 0.585765 0.471006 +-0.0865558 0.105007 0.0203641 0.587519 0.5 +-0.0861938 0.104994 0.0213645 0.601751 0.5 +-0.0874631 0.104981 0.0103802 0.707129 0.5 +-0.0872319 0.104968 0.0093836 0.691966 0.5 +-0.0876178 0.105003 0.0113725 0.715276 0.5 +-0.0338028 0.122413 -0.00742547 0.461272 0.479483 +-0.0867708 0.110409 0.0193573 0.732353 0.5 +-0.0749724 0.149924 -0.0268701 0.351899 0.5 +-0.0931113 0.126933 0.0272608 0.659191 0.5 +-0.0767885 0.154209 -0.0148974 0.559109 0.343551 +-0.0710782 0.156778 -0.0439119 0.571316 0.5 +-0.0920212 0.128183 0.00926455 0.418764 0.5 +-0.0939221 0.128285 0.0202478 0.816755 0.5 +-0.029229 0.179986 -0.0130226 0.396663 0.5 +-0.0482262 0.166987 -0.00394405 0.440446 0.421916 +-0.0780215 0.158305 -0.0199209 0.479838 0.5 +-0.0275761 0.125766 0.0126577 0.611978 0.5 +-0.0721725 0.156265 0.0135984 0.782577 0.5 +-0.0138112 0.128252 0.0219818 0.406167 0.5 +-0.0605798 0.155686 0.00466574 0.197955 0.5 +0.00533718 0.124533 0.0332195 0.504444 0.5 +-0.00726729 0.129761 0.0228793 0.45405 0.433143 +-0.0131083 0.128689 0.020774 0.717392 0.5 +-0.0179056 0.127636 0.0191062 0.2921 0.378895 +-0.0286491 0.125506 0.0152069 0.604751 0.5 +0.00041272 0.0994106 0.0497851 0.422373 0.41862 +-0.0286647 0.125711 0.0122564 0.680491 0.5 +-0.0866427 0.151554 0.0100877 0.218066 0.421976 +-0.0881735 0.15196 0.0139234 0.233928 0.314184 +-0.0522853 0.153955 0.0120432 0.535854 0.5 +-0.029644 0.125848 0.0118936 0.72255 0.5 +-0.0446029 0.130656 0.0108143 0.544263 0.5 +-0.0633808 0.154539 0.0298218 0.90469 0.5 +-0.0306217 0.126038 0.0115365 0.789002 0.5 +-0.0282267 0.181005 -0.00798034 0.256092 0.149363 +-0.0296632 0.180174 -0.00867233 0.301779 0.5 +-0.0310875 0.179405 -0.00921261 0.215319 0.3343 +-0.0328103 0.178226 -0.00982944 0.293554 0.5 +-0.022273 0.0879769 0.0544159 0.532464 0.5 +-0.0247884 0.0905387 0.0498003 0.637268 0.5 +-0.0849422 0.153595 0.0209155 0.233913 0.372561 +-0.0637251 0.155028 0.0282356 0.916745 0.5 +-0.0314985 0.12639 0.0112101 0.849139 0.5 +-0.0324286 0.126663 0.0108668 0.851051 0.5 +-0.0629676 0.160574 -0.0208244 0.58473 0.5 +-0.0635342 0.161573 -0.0210278 0.578888 0.5 +-0.0641199 0.162494 -0.0212451 0.560674 0.5 +-0.0647533 0.163375 -0.0214725 0.53187 0.5 +-0.0654189 0.16417 -0.0217177 0.524831 0.5 +-0.0661071 0.164936 -0.0219713 0.673257 0.5 +-0.0668221 0.16563 -0.0222317 0.670388 0.5 +-0.0675702 0.166262 -0.0225175 0.365463 0.401306 +-0.0683511 0.16683 -0.0228013 0.372629 0.432074 +-0.0691531 0.167331 -0.0231015 0.361529 0.473019 +-0.0699656 0.167828 -0.0233999 0.405556 0.5 +-0.0707971 0.168292 -0.02371 0.528049 0.443401 +-0.0717205 0.168577 -0.0240459 0.863212 0.5 +-0.0727774 0.16869 -0.0244081 0.278214 0.44599 +-0.0740576 0.168348 -0.0248615 0.234625 0.5 +-0.0752762 0.167899 -0.0253615 0.222046 0.5 +-0.0333161 0.126997 0.0105451 0.842874 0.5 +-0.0487319 0.132909 0.0254731 0.612919 0.5 +-0.000953404 0.100702 0.0462281 0.376949 0.5 +-0.0546261 0.151324 0.0271982 0.459363 0.5 +-0.0450959 0.122461 0.0255697 0.550107 0.5 +-0.044261 0.122001 0.0258917 0.457362 0.5 +-0.0363751 0.12414 0.0242241 0.43021 0.420236 +-0.0718597 0.148728 0.0404251 0.503157 0.405436 +-0.0342458 0.127284 0.0102001 0.862469 0.5 +-0.0351305 0.127632 0.00987733 0.85796 0.5 +0.0546169 0.0694261 0.0240301 0.422218 0.5 +0.053852 0.0700236 0.0237561 0.36288 0.474896 +0.053058 0.0705565 0.0234346 0.421699 0.5 +0.0521834 0.0709362 0.0231159 0.491839 0.5 +0.0511996 0.0711486 0.0227866 0.434206 0.5 +0.0502632 0.0713497 0.022405 0.348384 0.5 +0.0491174 0.0712134 0.0219878 0.455902 0.5 +0.047975 0.0710438 0.0215578 0.426555 0.5 +0.0468209 0.0708789 0.021127 0.524481 0.409915 +0.0460186 0.0714912 0.0208033 0.436717 0.5 +0.0456581 0.0729488 0.0206934 0.359503 0.5 +-0.0361152 0.127822 0.0095198 0.847202 0.5 +-0.0894746 0.139279 0.0281819 0.635227 0.5 +-0.038992 0.126654 0.0188148 0.507038 0.5 +-0.0451957 0.131364 0.0135329 0.437146 0.5 +-0.0457684 0.132352 0.0133121 0.46011 0.5 +-0.0526926 0.151783 0.016281 0.625664 0.5 +-0.0192069 0.125855 0.0229991 0.333061 0.5 +-0.0166197 0.126668 0.0238945 0.337287 0.5 +-0.0154922 0.126886 0.0243264 0.321936 0.445083 +-0.0142291 0.127243 0.024765 0.310917 0.5 +-0.0130122 0.127478 0.0251829 0.311872 0.5 +-0.011856 0.127622 0.0255897 0.335624 0.5 +-0.0107155 0.127812 0.0260097 0.337365 0.411707 +-0.0370524 0.128064 0.00917633 0.838385 0.5 +-0.0771865 0.153815 0.000183792 0.248147 0.5 +-0.037992 0.128312 0.00883318 0.840554 0.5 +-0.032464 0.126152 0.0167563 0.4561 0.451771 +-0.0221316 0.125526 0.0205056 0.301899 0.5 +-0.0234471 0.125053 0.0200484 0.32886 0.439444 +-0.00870995 0.128748 0.0252759 0.31935 0.5 +-0.00985903 0.128582 0.0248602 0.320595 0.5 +-0.0110072 0.128401 0.0244439 0.318306 0.427611 +-0.0389761 0.128486 0.00847309 0.835825 0.5 +0.0383138 0.109087 0.0181423 0.723601 0.5 +0.0377405 0.110012 0.0179226 0.714867 0.5 +0.0371511 0.110987 0.0177157 0.709147 0.5 +0.0365396 0.111887 0.0174946 0.715418 0.5 +0.0359211 0.112779 0.0172688 0.702403 0.5 +0.035299 0.113666 0.0170439 0.686544 0.5 +0.034658 0.114539 0.0168181 0.701054 0.5 +0.0340242 0.115407 0.0165889 0.695729 0.5 +0.0333802 0.116202 0.0163348 0.692407 0.5 +0.032725 0.116988 0.0160848 0.684508 0.5 +0.0320676 0.117774 0.0158308 0.692731 0.5 +0.0313718 0.118521 0.0155758 0.679962 0.5 +0.0306614 0.119205 0.0153072 0.686295 0.5 +0.0299589 0.119939 0.0150519 0.680812 0.5 +0.0292359 0.120576 0.0147663 0.657381 0.5 +0.0285085 0.121244 0.0144975 0.627268 0.5 +0.0277802 0.121908 0.0142262 0.631757 0.5 +0.0270265 0.12251 0.0139387 0.625488 0.5 +0.0262802 0.123151 0.0136687 0.615674 0.5 +0.0255167 0.123738 0.0133816 0.59978 0.5 +0.0247433 0.124313 0.0130924 0.584885 0.5 +0.0239403 0.124821 0.0127882 0.579975 0.479483 +0.0231582 0.125381 0.0124998 0.570224 0.402907 +0.0223353 0.12586 0.0121947 0.566161 0.5 +0.021507 0.126326 0.01189 0.552958 0.477602 +0.0206753 0.126786 0.0115854 0.531694 0.428218 +0.0198178 0.127196 0.0112616 0.676894 0.5 +0.0189844 0.127654 0.0109555 0.671078 0.5 +0.0181043 0.128017 0.0106305 0.661261 0.447813 +0.0172673 0.128465 0.0103258 0.650636 0.5 +0.0163938 0.128844 0.0100049 0.636954 0.5 +0.0155185 0.129225 0.0096832 0.621581 0.470295 +0.0146407 0.129582 0.00935921 0.629656 0.464108 +0.0137231 0.129888 0.00901711 0.623956 0.5 +0.0127896 0.130142 0.00867876 0.881303 0.5 +0.0118641 0.130407 0.00833975 0.872395 0.5 +0.0108925 0.130607 0.00797847 0.873412 0.5 +0.00996165 0.130854 0.00764162 0.871525 0.5 +0.00898388 0.131012 0.0072855 0.859817 0.5 +0.00796203 0.131149 0.00690102 0.859673 0.5 +0.00697892 0.131225 0.0065571 0.846998 0.5 +0.00595359 0.131311 0.0061803 0.834341 0.5 +0.00486454 0.131282 0.0057704 0.809633 0.5 +0.00377395 0.13125 0.00536065 0.818495 0.5 +0.00267954 0.131212 0.00494959 0.808315 0.5 +0.00159304 0.131118 0.00454966 0.792894 0.5 +0.000449556 0.130948 0.00412356 0.781178 0.5 +-0.000755212 0.130746 0.00366553 0.771655 0.5 +-0.00189958 0.130575 0.00323807 0.769978 0.5 +-0.00310182 0.130332 0.00278812 0.76568 0.5 +-0.00430156 0.130062 0.00233767 0.755983 0.5 +-0.00549778 0.129792 0.00189197 0.762518 0.5 +-0.00669164 0.129496 0.00145082 0.756788 0.5 +-0.0897559 0.114544 0.00631807 0.339614 0.5 +-0.0899879 0.140645 0.0281829 0.69371 0.5 +-0.0903203 0.146073 0.0131505 0.394146 0.454632 +-0.0877279 0.139146 0.00920485 0.378698 0.453897 +0.0147936 0.104084 -0.0202238 0.842015 0.5 +-0.0907516 0.137857 0.0201957 0.687669 0.5 +-0.0876027 0.103683 0.0193632 0.576993 0.475483 +-0.0879266 0.10368 0.0183585 0.557788 0.5 +-0.0873262 0.103661 0.0203534 0.590378 0.5 +-0.0842046 0.10344 -0.000635192 0.422447 0.35349 +-0.0838507 0.103422 -0.00164978 0.336592 0.467372 +-0.0878144 0.105004 0.012374 0.743067 0.5 +-0.087069 0.100891 0.00537711 0.604985 0.5 +-0.084606 0.0993653 -0.00159598 0.4781 0.322508 +-0.0840147 0.0993167 -0.00358504 0.445689 0.448217 +-0.036915 0.175546 -0.00898243 0.287486 0.5 +-0.0734873 0.156859 -0.0289164 0.603938 0.5 +-0.0920442 0.126938 0.0322524 0.60412 0.5 +-0.0800951 0.15261 0.00324045 0.247792 0.439305 +-0.0925962 0.126825 0.0102659 0.451022 0.456851 +-0.0706828 0.180611 -0.0569213 0.219456 0.5 +-0.067142 0.163768 -0.057034 0.339173 0.457326 +-0.0812769 0.136213 -0.00276757 0.660724 0.5 +-0.076979 0.148604 -0.00699397 0.578296 0.407984 +-0.0867924 0.139107 0.00519652 0.565791 0.5 +-0.0367472 0.127095 0.0166739 0.618441 0.5 +-0.0448982 0.123992 0.0241166 0.506889 0.5 +-0.0399647 0.128635 0.00811119 0.836354 0.5 +0.000402662 0.121936 0.0359399 0.606013 0.5 +-0.0678831 0.155252 0.000581516 0.781344 0.5 +-0.0670639 0.154762 0.000889218 0.878305 0.5 +-0.0205009 0.126788 0.0181341 0.398549 0.5 +-0.0191826 0.127252 0.0185952 0.654448 0.5 +-0.0216926 0.126501 0.0176944 0.403931 0.413622 +-0.0253679 0.125634 0.0163937 0.44632 0.423225 +-0.0471724 0.133935 0.00981498 0.500567 0.5 +-0.0699384 0.150598 0.0380766 0.42132 0.5 +-0.0694599 0.155751 0.00874428 0.793713 0.5 +-4.09913e-05 0.10064 0.0465907 0.378211 0.354166 +-0.0793777 0.154922 0.0242883 0.312003 0.440151 +0.0011864 0.12951 0.0259323 0.34647 0.5 +-0.0351879 0.125718 0.0201989 0.395662 0.445464 +-0.0409513 0.128783 0.00774742 0.850236 0.5 +-0.0418918 0.129001 0.00740866 0.848382 0.5 +-0.0305611 0.179398 -0.00755573 0.263572 0.204025 +-0.0319282 0.178722 -0.00808101 0.256716 0.5 +-0.0335046 0.177862 -0.00863199 0.225945 0.251435 +-0.0349807 0.177 -0.00919022 0.267137 0.5 +-0.0745642 0.0928269 0.03994 0.534865 0.401527 +-0.083524 0.154076 0.0213615 0.383917 0.423743 +-0.0647128 0.155185 0.0278857 0.914738 0.5 +-0.0736292 0.156748 -0.0014693 0.250403 0.5 +-0.0429251 0.129071 0.00699388 0.867727 0.5 +-0.0634399 0.160562 -0.0195565 0.547678 0.5 +-0.0640006 0.161566 -0.01976 0.527503 0.5 +-0.0645991 0.162478 -0.0199783 0.508595 0.5 +-0.0652487 0.163342 -0.0202167 0.643327 0.5 +-0.0658838 0.16421 -0.0204509 0.454648 0.5 +-0.0666041 0.164889 -0.0207192 0.46488 0.5 +-0.0673665 0.165482 -0.0209987 0.372995 0.429824 +-0.0681352 0.166058 -0.0212868 0.470021 0.5 +-0.0689565 0.166538 -0.0215879 0.440223 0.5 +-0.0697357 0.167099 -0.0218834 0.340212 0.399236 +-0.0705485 0.167591 -0.022181 0.401866 0.443959 +-0.0714792 0.167875 -0.0225174 0.475541 0.5 +-0.0724891 0.168081 -0.0228518 0.299419 0.39043 +-0.0736982 0.167846 -0.0232955 0.209005 0.5 +-0.0749362 0.167415 -0.0237916 0.212264 0.342499 +-0.0437757 0.12944 0.0066621 0.899223 0.5 +-0.0401622 0.123949 0.0243503 0.485013 0.361674 +-0.0753414 0.15612 0.015399 0.662142 0.5 +-0.0556539 0.153362 0.0267778 0.373798 0.469362 +-0.0432186 0.121963 0.0262727 0.406919 0.5 +-0.0681261 0.15638 0.0193912 0.719766 0.5 +-0.0475933 0.134581 0.0184866 0.740963 0.5 +-0.0447211 0.129823 0.00637961 0.514964 0.453003 +0.0544559 0.0679536 0.0254119 0.507473 0.5 +0.0537553 0.0686728 0.0251859 0.457314 0.5 +0.0529842 0.0692584 0.0249064 0.432472 0.478491 +0.0521945 0.0697716 0.0245573 0.490097 0.5 +0.0512708 0.0700979 0.0242688 0.494258 0.5 +0.0503362 0.0703636 0.0239238 0.415357 0.5 +0.0492902 0.0704301 0.0235452 0.368911 0.5 +0.0482025 0.0703533 0.0231278 0.460111 0.5 +0.0470668 0.0701831 0.0226957 0.482326 0.5 +0.0461205 0.0704224 0.0223322 0.446943 0.5 +0.0453449 0.0710055 0.0220458 0.496262 0.5 +0.0451266 0.0727442 0.0219703 0.343144 0.5 +-0.0454304 0.130382 0.00608349 0.428804 0.5 +-0.075849 0.149415 0.0390624 0.443111 0.389081 +-0.0102534 0.128943 0.0232512 0.731762 0.5 +-0.0463734 0.133247 0.0130756 0.500268 0.5 +-0.0294956 0.124519 0.0193203 0.558096 0.414791 +-0.0205283 0.125395 0.0225414 0.323606 0.439413 +-0.0179487 0.126229 0.0234428 0.331259 0.5 +-0.0833215 0.153324 0.00972396 0.299029 0.45534 +-0.0747094 0.155646 0.00979649 0.750044 0.5 +-0.0637348 0.156074 0.0136991 0.806436 0.5 +0.00170794 0.1258 0.0319097 0.438365 0.5 +0.00714931 0.123902 0.0338795 0.536818 0.5 +-0.0040053 0.127195 0.0298616 0.321591 0.403383 +-0.0737971 0.148055 0.0412991 0.519438 0.5 +-0.0473115 0.134637 0.0112388 0.521373 0.5 +-0.0306537 0.125522 0.0174226 0.350674 0.5 +-0.0122087 0.128137 0.0240139 0.414362 0.5 +-0.000418527 0.128183 0.0282442 0.323033 0.5 +0.00238035 0.127411 0.0292755 0.46676 0.5 +-0.00140945 0.12836 0.0278943 0.30337 0.5 +0.00326552 0.127077 0.029619 0.38168 0.388524 +-0.00761606 0.128811 0.0256727 0.43234 0.5 +-0.0460575 0.131197 0.00582383 0.539504 0.483596 +0.037993 0.109314 0.0194453 0.706593 0.5 +0.0374138 0.110303 0.0192381 0.687523 0.5 +0.0368248 0.11128 0.0190303 0.687648 0.5 +0.0362122 0.112176 0.0188059 0.696179 0.5 +0.0355908 0.113068 0.0185826 0.677286 0.5 +0.0349766 0.11396 0.0183585 0.663445 0.5 +0.0343502 0.114842 0.0181324 0.676369 0.5 +0.0337096 0.115696 0.0178949 0.674011 0.5 +0.0330592 0.116487 0.0176444 0.663886 0.5 +0.0323926 0.117262 0.0173907 0.659549 0.5 +0.0317192 0.118031 0.0171382 0.66476 0.5 +0.0310327 0.118783 0.0168832 0.660188 0.5 +0.0303225 0.119467 0.0166127 0.676884 0.5 +0.0296088 0.12015 0.0163431 0.647759 0.5 +0.0288986 0.120838 0.016073 0.6231 0.5 +0.0281659 0.121502 0.0158045 0.60512 0.365182 +0.0274179 0.122108 0.0155174 0.610373 0.5 +0.0266795 0.122765 0.0152477 0.61947 0.373034 +0.0259255 0.123359 0.0149571 0.61127 0.5 +0.0251524 0.123931 0.0146708 0.580911 0.5 +0.0243777 0.124503 0.0143821 0.585236 0.5 +0.0235925 0.125057 0.0140956 0.567914 0.470173 +0.022807 0.125614 0.0138049 0.566529 0.412973 +0.0219644 0.126042 0.013483 0.540739 0.5 +0.0211328 0.126504 0.0131782 0.533206 0.477822 +0.0203015 0.126964 0.0128708 0.677135 0.430852 +0.0194715 0.127423 0.0125674 0.668135 0.5 +0.0186124 0.127837 0.0122439 0.652076 0.5 +0.0177398 0.128218 0.01192 0.648849 0.451512 +0.0168951 0.128644 0.0116162 0.650329 0.5 +0.0159855 0.12897 0.0112743 0.631919 0.5 +0.0151527 0.129419 0.0109697 0.626944 0.46242 +0.0142349 0.129723 0.0106274 0.618344 0.5 +0.0133552 0.13008 0.0103074 0.869352 0.5 +0.0124259 0.130345 0.00996559 0.875837 0.5 +0.0114915 0.130592 0.00962923 0.870875 0.5 +0.0105198 0.130786 0.00926843 0.869083 0.5 +0.00959045 0.131031 0.00893055 0.875575 0.5 +0.00861625 0.13122 0.00857267 0.853649 0.5 +0.00759173 0.131318 0.00819364 0.846617 0.5 +0.00661243 0.131425 0.00784474 0.839499 0.5 +0.00553205 0.131427 0.00744951 0.819447 0.5 +0.00449684 0.131467 0.00706378 0.802623 0.5 +0.00335212 0.131364 0.00663122 0.790787 0.5 +0.00226062 0.131309 0.0062251 0.788595 0.5 +0.00116916 0.131228 0.00582139 0.789725 0.5 +7.90085e-05 0.131159 0.00541676 0.782615 0.5 +-0.00106292 0.130975 0.00499363 0.750873 0.5 +-0.00226925 0.130756 0.00454173 0.751281 0.5 +-0.0034723 0.130516 0.00409153 0.750168 0.5 +-0.00460956 0.130321 0.00366937 0.749305 0.5 +-0.00587295 0.130011 0.00319127 0.750524 0.5 +-0.00707285 0.12974 0.0027455 0.737319 0.5 +-0.00832405 0.129364 0.00227931 0.72795 0.5 +-0.00957697 0.128995 0.00181181 0.727006 0.5 +-0.0727498 0.180616 -0.0549771 0.195417 0.5 +-0.088744 0.0996845 0.0203875 0.649474 0.5 +-0.0188763 0.105884 -0.0226282 0.716765 0.5 +-0.0679091 0.108046 -0.0128123 0.633802 0.5 +-0.0809703 0.132422 -0.00393108 0.376869 0.402152 +-0.0679169 0.115123 -0.00939662 0.561677 0.5 +-0.0208752 0.105853 -0.0224653 0.697848 0.5 +-0.0640364 0.138454 -0.00746704 0.516965 0.5 +-0.0468796 0.105628 -0.0200508 0.708993 0.5 +-0.0649244 0.113824 -0.0119395 0.600442 0.407502 +-0.0797391 0.110092 0.0425713 0.952857 0.5 +-0.0698832 0.115052 -0.00855978 0.441978 0.5 +-0.0759472 0.132533 -0.00707033 0.442089 0.5 +-0.0488748 0.105594 -0.0196597 0.727952 0.5 +-0.042206 0.166657 -0.0103803 0.466491 0.5 +-0.0251326 0.166747 -0.01768 0.818172 0.5 +0.0201875 0.0974057 -0.022456 0.626265 0.5 +-0.0178752 0.105871 -0.0225888 0.741162 0.5 +-0.0520867 0.151648 -0.00355308 0.494225 0.5 +-0.0142717 0.17714 -0.027303 0.44038 0.419516 +-0.0191507 0.168261 -0.0198644 0.775632 0.5 +-0.0271419 0.168228 -0.0179326 0.543807 0.5 +-0.0548013 0.086928 -0.0216118 0.645141 0.5 +-0.0636783 0.0344406 0.016873 0.352362 0.5 +-0.0630458 0.0345815 0.0177326 0.616295 0.5 +-0.0647368 0.0350417 0.0261211 0.161121 0.384305 +-0.0661617 0.0353568 0.0288449 0.206373 0.5 +-0.0669938 0.0358141 0.0313063 0.167045 0.5 +-0.0669849 0.0359436 0.0326963 0.220087 0.5 +-0.0668209 0.036036 0.0339126 0.320001 0.5 +-0.066685 0.0361231 0.0351414 0.29157 0.5 +-0.0665769 0.0362823 0.0365183 0.349097 0.5 +-0.0662971 0.0363734 0.0376513 0.406085 0.5 +-0.0659364 0.0364202 0.0386491 0.470263 0.5 +-0.0597919 0.0868174 -0.0202685 0.444705 0.432797 +-0.064973 0.0365283 0.0405192 0.448914 0.5 +-0.0643928 0.0366139 0.0414145 0.346561 0.5 +-0.0820284 0.13533 -0.00235647 0.624769 0.5 +-0.063129 0.0366622 0.0429743 0.463049 0.5 +-0.0623699 0.0366895 0.0436353 0.442362 0.5 +-0.0615835 0.0366556 0.0444374 0.421251 0.5 +-0.0608837 0.0367165 0.0449842 0.401579 0.5 +-0.0600876 0.0367271 0.0456071 0.292276 0.5 +-0.059243 0.0367531 0.0461369 0.323396 0.5 +-0.0580048 0.0366442 0.0464062 0.376938 0.5 +-0.0569251 0.0366412 0.0466659 0.383117 0.5 +-0.0556277 0.0365615 0.0468082 0.347422 0.5 +-0.0120884 0.101067 0.0439606 0.288573 0.450353 +-0.078421 0.120421 0.0514142 0.57489 0.5 +-0.0866419 0.0923952 0.0266005 0.722262 0.5 +-0.0348191 0.0886631 -0.024431 0.633869 0.5 +-0.0470363 0.0359078 0.0451061 0.199777 0.5 +-0.0447375 0.0357143 0.0441717 0.187242 0.5 +-0.0779478 0.107702 0.034147 0.424699 0.5 +-0.0789759 0.136856 -0.00458832 0.519184 0.5 +0.0211784 0.0973838 -0.0221644 0.619848 0.477595 +-0.0182946 0.181579 -0.0243778 0.353261 0.479937 +-0.0391315 0.160685 -0.012118 0.49081 0.5 +0.0191832 0.0974256 -0.0227258 0.799435 0.5 +-0.0258638 0.0987461 -0.0241399 0.527518 0.47737 +-0.00788756 0.107371 -0.0226705 0.706546 0.5 +-0.0769711 0.133968 -0.00621304 0.404853 0.338754 +-0.074953 0.131092 -0.00759533 0.421642 0.5 +-0.0498819 0.105595 -0.0195612 0.756457 0.5 +0.0181761 0.0974249 -0.0228373 0.776479 0.5 +-0.064968 0.128232 -0.00872903 0.833856 0.5 +-0.0478723 0.105599 -0.0198923 0.727015 0.395194 +0.0221884 0.0973608 -0.0216774 0.60132 0.5 +-0.0570131 0.128126 -0.00643112 0.621521 0.470086 +-0.037115 0.160706 -0.0129903 0.562979 0.5 +-0.0241861 0.0351713 0.0521271 0.911567 0.5 +-0.085893 0.115781 0.0473131 0.519131 0.5 +-0.0679519 0.129695 -0.00900682 0.746874 0.5 +-0.0128757 0.105895 -0.0226089 0.608317 0.5 +-0.0723733 0.0352474 0.00704331 0.228898 0.5 +-0.072066 0.0353469 0.00817017 0.30841 0.5 +-0.0715958 0.035386 0.00909438 0.351949 0.5 +-0.0709835 0.0353942 0.00988845 0.300195 0.5 +-0.0703389 0.0353326 0.0107638 0.361748 0.5 +-0.0696814 0.0354769 0.0114289 0.282163 0.5 +-0.069135 0.0354547 0.0122501 0.509091 0.5 +-0.0684642 0.035536 0.0130279 0.347733 0.5 +-0.0677955 0.0355805 0.0137906 0.354017 0.5 +-0.0671319 0.0355924 0.0145398 0.382111 0.5 +-0.0663805 0.0356243 0.0152158 0.448 0.5 +-0.0656741 0.0356447 0.0159226 0.384729 0.5 +-0.0650165 0.0356472 0.0166692 0.374966 0.5 +-0.0642775 0.0356785 0.0173446 0.335714 0.5 +-0.0637593 0.0357681 0.0182478 0.341494 0.5 +-0.0631194 0.0357147 0.0189543 0.239572 0.5 +-0.0624231 0.0357528 0.0196573 0.197795 0.5 +-0.0588165 0.0667309 0.0351477 0.533718 0.408357 +-0.0649174 0.0364897 0.025021 0.0866334 0.5 +-0.0658345 0.0367656 0.0273328 0.166425 0.5 +-0.0664962 0.0370022 0.0293944 0.198632 0.5 +-0.0668989 0.0372019 0.0312012 0.262241 0.5 +-0.0670049 0.0372923 0.032499 0.210758 0.5 +-0.0667337 0.0374088 0.0337222 0.204609 0.5 +-0.066706 0.0375681 0.0351923 0.296219 0.385864 +-0.0664522 0.0376478 0.0363332 0.242042 0.5 +-0.066213 0.0377522 0.0375383 0.285379 0.450236 +-0.0657729 0.0378142 0.038507 0.299273 0.5 +-0.0652746 0.0378654 0.0394026 0.33058 0.5 +-0.0647467 0.0379255 0.0402853 0.341158 0.351811 +-0.0642758 0.0379734 0.0412454 0.337304 0.5 +-0.0637308 0.0380192 0.0421186 0.376721 0.5 +-0.0631004 0.038056 0.0429096 0.391154 0.5 +-0.0623246 0.0380624 0.0435494 0.316639 0.5 +-0.0615813 0.0380878 0.0442214 0.312318 0.463918 +-0.0608849 0.0381036 0.0449409 0.291602 0.5 +-0.0601123 0.0381131 0.0455939 0.282562 0.5 +-0.0592916 0.0381211 0.04617 0.320519 0.445662 +-0.0582688 0.0380855 0.0465946 0.351019 0.5 +-0.0572001 0.0380562 0.0469117 0.38523 0.5 +-0.0559057 0.0379831 0.047068 0.368461 0.5 +-0.0816795 0.117485 0.0486704 0.632498 0.5 +-0.0781026 0.0818813 0.0353359 0.774608 0.5 +-0.080536 0.135397 0.0502642 0.50798 0.5 +-0.0761145 0.157637 -0.00836344 0.620293 0.5 +-0.0769362 0.0914256 0.0381174 0.718276 0.5 +-0.0649024 0.119454 -0.00881631 0.696983 0.5 +-0.0428468 0.0368545 0.044028 0.21174 0.5 +-0.0401934 0.0365351 0.0429119 0.226568 0.5 +-0.0388776 0.0364147 0.043017 0.456713 0.5 +-0.0382309 0.0365042 0.0436563 0.470218 0.5 +-0.0376065 0.0365426 0.0444186 0.521209 0.5 +-0.0369296 0.036554 0.0451414 0.556962 0.5 +-0.0362701 0.0365605 0.0458807 0.5834 0.5 +-0.0719356 0.110274 0.042413 0.789414 0.5 +0.000164408 0.0895345 -0.0346177 0.634897 0.5 +0.00318323 0.0894801 -0.0335291 0.779295 0.5 +-0.0338206 0.0367327 0.0490996 0.426721 0.5 +-0.0332147 0.036763 0.0499127 0.444736 0.5 +0.00112807 0.104475 -0.0219821 0.734361 0.5 +-0.0316383 0.0367739 0.0511824 0.356504 0.5 +-0.0308026 0.0367564 0.0517774 0.48657 0.5 +-0.0300389 0.036799 0.0524219 0.496512 0.5 +-0.0292503 0.036802 0.0530596 0.493379 0.5 +-0.0283411 0.0368095 0.0535577 0.513563 0.5 +-0.0272685 0.0368017 0.0538626 0.38623 0.5 +-0.026052 0.036748 0.0540507 0.39199 0.5 +-0.0913706 0.116528 0.0258009 0.768159 0.5 +-0.0761803 0.0914451 0.0387697 0.708748 0.5 +-0.0805022 0.0831735 0.0334637 0.767831 0.5 +-0.0770317 0.088754 0.0382806 0.634886 0.485977 +-0.0780422 0.0846436 0.0366002 0.649328 0.483234 +-0.0760841 0.164579 -0.0198769 0.261378 0.5 +-0.0749519 0.164602 -0.018207 0.26703 0.295324 +-0.0725589 0.0360747 0.00146649 0.155719 0.237906 +-0.0724467 0.0361675 0.00255211 0.170034 0.5 +-0.0723608 0.0363259 0.00395733 0.130514 0.5 +-0.0726014 0.0365856 0.00586956 0.140048 0.5 +-0.0725775 0.0367142 0.00725292 0.348123 0.5 +-0.0722633 0.0367738 0.0082856 0.293836 0.5 +-0.0716377 0.0368114 0.00909586 0.306413 0.5 +-0.0708619 0.0368523 0.00979504 0.27057 0.362419 +-0.0701989 0.0368637 0.0105096 0.264704 0.5 +-0.0694879 0.0368888 0.0112092 0.246828 0.5 +-0.0688721 0.0369953 0.0119906 0.225485 0.27892 +-0.0684496 0.0369814 0.0129839 0.241306 0.5 +-0.0677747 0.0370061 0.0137537 0.229496 0.368048 +-0.0671438 0.037039 0.0145094 0.316784 0.5 +-0.0663574 0.0370366 0.0151548 0.307478 0.5 +-0.0655788 0.037063 0.0157921 0.380165 0.5 +-0.0648003 0.0370671 0.0164284 0.387743 0.5 +-0.0639993 0.0370815 0.0170442 0.336647 0.5 +-0.0633486 0.0371336 0.0178291 0.231831 0.39732 +-0.0626129 0.0371673 0.0184653 0.275116 0.331206 +-0.0619624 0.0371632 0.0192279 0.222761 0.5 +-0.0614566 0.0372076 0.0201515 0 0 +-0.0646788 0.0378404 0.0247428 0 0 +-0.0652548 0.0380623 0.0267185 0.159873 0.5 +-0.0661715 0.0383371 0.0290301 0.296614 0.5 +-0.0664042 0.0385079 0.0306689 0.379158 0.5 +-0.0662143 0.0386042 0.0318887 0.408667 0.5 +-0.0661919 0.0387353 0.0332699 0.374854 0.5 +-0.0663865 0.0388997 0.0348294 0.256055 0.409732 +-0.0662201 0.0390045 0.0360529 0.28012 0.5 +-0.0659208 0.0390922 0.037189 0.315582 0.437945 +-0.0654261 0.0391693 0.0381077 0.313307 0.422383 +-0.0649149 0.0392337 0.0390271 0.337365 0.420111 +-0.0643722 0.0392301 0.0399397 0.343541 0.5 +-0.0638844 0.0392942 0.0408356 0.347423 0.407669 +-0.0634342 0.039353 0.0417984 0.370104 0.5 +-0.0628785 0.0393963 0.0426563 0.401705 0.5 +-0.0622047 0.0394245 0.0433885 0.355375 0.5 +-0.0613646 0.0394268 0.0439671 0.388361 0.5 +-0.0606247 0.0394421 0.0446315 0.376858 0.450337 +-0.0599208 0.0394628 0.0453423 0.378939 0.5 +-0.0591403 0.039472 0.0459797 0.454627 0.5 +-0.0582195 0.03947 0.0465299 0.33904 0.5 +-0.0571511 0.0394305 0.0468685 0.408396 0.5 +-0.0827169 0.105982 0.0279083 0.547617 0.5 +-0.0753098 0.0805155 0.0368289 0.772848 0.5 +-0.0679826 0.0819454 0.0421862 0.644896 0.5 +-0.03681 0.0886191 -0.0239226 0.394541 0.441531 +-0.0889045 0.133745 0.0416542 0.527185 0.462191 +-0.0835459 0.133987 0.0490485 0.546232 0.467433 +-0.0832136 0.0770175 0.0194025 0.761598 0.339118 +-0.0168713 0.104463 -0.0227606 0.675705 0.5 +-0.0401042 0.037954 0.0427598 0.265641 0.444323 +-0.038893 0.0378836 0.042947 0.334698 0.5 +-0.0383306 0.0379343 0.0437226 0.463205 0.5 +-0.0376745 0.0379475 0.0444361 0.526299 0.5 +-0.0370447 0.0379826 0.045213 0.436753 0.5 +-0.0363535 0.0380033 0.0459253 0.430088 0.5 +-0.0357437 0.0380351 0.0467216 0.509002 0.5 +-0.035201 0.0380831 0.0475916 0.519297 0.5 +-0.0346044 0.0381371 0.0484275 0.448158 0.5 +-0.0340062 0.0381682 0.049242 0.468142 0.5 +-0.0334338 0.0382234 0.0500909 0.448197 0.5 +-0.0326689 0.0382268 0.0507498 0.365247 0.5 +-0.0317095 0.0382098 0.0512104 0.310492 0.42719 +-0.0308589 0.0382072 0.0517831 0.336011 0.448112 +-0.0301563 0.0382285 0.0524978 0.357801 0.442391 +-0.0294534 0.0382504 0.0532249 0.330262 0.5 +-0.0285615 0.0382432 0.0537594 0.342307 0.5 +-0.0274456 0.0382197 0.0539829 0.306101 0.463744 +-0.0261619 0.0381432 0.054147 0.30929 0.5 +-0.0249438 0.0380891 0.0543244 0.414537 0.5 +-0.0702982 0.0846763 0.0415948 0.651161 0.5 +-0.0849325 0.0938555 0.0290926 0.754258 0.5 +-0.0388049 0.0885478 -0.0231132 0.537568 0.5 +-0.0210747 0.0753924 0.0536136 0.606505 0.5 +-0.0794364 0.144805 0.0432098 0.382972 0.420138 +-0.0834291 0.14469 0.0401339 0.407126 0.5 +-0.0756035 0.0846721 0.0383975 0.657094 0.471099 +-0.0558611 0.0955845 -0.021564 0.642481 0.5 +0.00713327 0.105885 -0.0207766 0.806203 0.5 +-0.0588398 0.0954803 -0.0203334 0.427407 0.3124 +-0.0597928 0.095429 -0.0195264 0.397976 0.283111 +-0.0797918 0.11331 -0.00252121 0.498571 0.5 +-0.0849635 0.115612 0.0476218 0.520199 0.477517 +-0.0633961 0.0610267 0.0215327 0.971521 0.5 +-0.0566835 0.124286 -0.00724626 0.675089 0.5 +-0.0271239 0.117991 -0.0128729 0.755106 0.5 +-0.0720001 0.0374977 0.00101403 0.14125 0.5 +-0.0718937 0.0376106 0.00231258 0.277457 0.5 +-0.0719585 0.0377493 0.00378419 0.253532 0.5 +-0.0725333 0.0379686 0.00575754 0.223137 0.5 +-0.0723402 0.0380689 0.00697334 0.333222 0.5 +-0.0719602 0.0381531 0.00797803 0.342317 0.5 +-0.0712669 0.0381904 0.00872646 0.309614 0.413905 +-0.0705682 0.0382102 0.00943236 0.298064 0.5 +-0.0697739 0.0382195 0.0100596 0.382127 0.5 +-0.0690425 0.0382325 0.0107396 0.372033 0.5 +-0.0683549 0.0382578 0.0114352 0.281862 0.446169 +-0.0679678 0.0383221 0.0123903 0.271535 0.306541 +-0.0674828 0.0383816 0.0133921 0.258252 0.450399 +-0.06674 0.0383979 0.0141071 0.336355 0.419994 +-0.0660641 0.0384249 0.0148213 0.356533 0.5 +-0.0652396 0.0384193 0.0154218 0.422523 0.5 +-0.0644302 0.0384213 0.0160253 0.398842 0.5 +-0.0635208 0.0384034 0.0165311 0.720972 0.5 +-0.0629014 0.0384346 0.017326 0.536987 0.5 +-0.0621446 0.0384632 0.0179813 0.315168 0.5 +-0.0614924 0.0384787 0.0187446 0.51937 0.5 +-0.0608714 0.0385134 0.0195368 0.335726 0.5 +-0.0598385 0.0385019 0.0199857 0.183096 0 +-0.0641545 0.0391804 0.0263583 0.13774 0.5 +-0.0652279 0.0397522 0.0288372 0.243318 0.188568 +-0.0655356 0.0398001 0.0300899 0.349456 0.277594 +-0.0654856 0.0398574 0.0313799 0.430195 0.5 +-0.065424 0.0399796 0.0326661 0.36522 0.5 +-0.0658806 0.040185 0.0344505 0.3012 0.5 +-0.0657805 0.04031 0.0356744 0.294414 0.458677 +-0.0654577 0.0403952 0.0367257 0.352543 0.469359 +-0.0650934 0.040468 0.0377689 0.376968 0.5 +-0.0646669 0.0405364 0.0387423 0.41109 0.5 +-0.0641268 0.0405801 0.0396199 0.433764 0.453044 +-0.063603 0.0406323 0.0405017 0.416322 0.5 +-0.0631801 0.0406886 0.0415101 0.436805 0.5 +-0.0626778 0.0407451 0.0424121 0.487384 0.5 +-0.0620034 0.040777 0.0431481 0.508205 0.5 +-0.0612252 0.0407891 0.0437895 0.429002 0.5 +-0.0603522 0.0407823 0.0443369 0.400779 0.477435 +-0.0595653 0.0407951 0.0449735 0.46708 0.478015 +-0.0588282 0.0408079 0.0456406 0.575523 0.5 +-0.0579692 0.0408152 0.0462221 0.378637 0.5 +-0.073142 0.0762988 0.0362199 0.769623 0.5 +-0.0810472 0.147398 0.0390836 0.459468 0.5 +-0.0876158 0.137864 0.0416648 0.520567 0.5 +-0.0699648 0.0791315 0.0398469 0.60765 0.5 +-0.0862734 0.13657 0.044609 0.699332 0.5 +-0.0826044 0.1367 0.0480323 0.493713 0.47195 +-0.0283222 0.0749245 0.042497 0.858231 0.5 +-0.0801569 0.0817921 0.0331577 0.742194 0.5 +-0.0738585 0.0762694 0.0355202 0.775194 0.5 +-0.0393467 0.0392853 0.042122 0.570175 0.5 +-0.0387789 0.0392857 0.0427431 0.41919 0.436719 +-0.0382613 0.0393263 0.043596 0.417969 0.5 +-0.0376144 0.0393494 0.044329 0.431971 0.5 +-0.0370734 0.0393951 0.0451959 0.47062 0.5 +-0.0364055 0.0394201 0.0459276 0.512957 0.5 +-0.0356589 0.0394362 0.046602 0.435966 0.5 +-0.0351956 0.0394954 0.0475468 0.412935 0.421919 +-0.0346615 0.0395406 0.0484261 0.384759 0.448627 +-0.0341216 0.0395911 0.0493113 0.407886 0.5 +-0.0334658 0.0396217 0.0500837 0.415051 0.5 +-0.032718 0.0396362 0.0507617 0.435104 0.5 +-0.0317919 0.0396266 0.0512352 0.396878 0.409459 +-0.0308456 0.0396262 0.0517145 0.359709 0.455008 +-0.0301161 0.0396403 0.0523893 0.340844 0.449843 +-0.0293764 0.039648 0.0531021 0.315097 0.5 +-0.0284888 0.0396421 0.053637 0.321311 0.5 +-0.027407 0.0396009 0.0539527 0.459292 0.5 +-0.0261771 0.0395393 0.0541115 0.460725 0.5 +0.0252205 0.0888413 -0.0232794 0.685017 0.5 +-0.0885651 0.0963045 0.0227197 0.562267 0.5 +-0.0275932 0.0779206 0.0459339 0.612483 0.5 +-0.0543463 0.160987 0.00512087 0.357069 0.5 +-0.0732341 0.100848 0.0383652 0.542883 0.452711 +-0.0159859 0.0984773 0.0464357 0.298408 0.39808 +-0.0929393 0.122846 0.0403052 0.498277 0.44986 +-0.0842229 0.144678 0.0395137 0.404845 0.5 +-0.088166 0.0963498 0.023753 0.588239 0.472253 +-0.0877012 0.0963902 0.0247068 0.604852 0.5 +-0.087169 0.0964235 0.0255876 0.608941 0.451893 +-0.0866623 0.0964635 0.0264805 0.63542 0.5 +-0.0262134 0.0765572 0.0473962 0.646885 0.5 +-0.053794 0.086942 -0.0216962 0.70419 0.5 +-0.0788399 0.114858 -0.00418456 0.502686 0.351065 +-0.0288441 0.0958675 -0.0242091 0.817537 0.5 +-0.0498332 0.0956322 -0.0221283 0.788869 0.5 +-0.056635 0.0350546 0.0452244 0.92946 0.5 +-0.0642706 0.166732 -0.060237 0.327536 0.418281 +-0.0669165 0.12238 -0.00897156 0.800164 0.5 +-0.0658939 0.119442 -0.00885604 0.690679 0.5 +0.0107652 0.110575 -0.0191667 0.821439 0.5 +0.048512 0.0692789 0.0025489 0.572719 0.5 +-0.0714148 0.0386609 0.00057855 0.128336 0.5 +-0.0711225 0.0388168 0.00193457 0.23142 0.5 +-0.0714603 0.0390724 0.00325296 0.462065 0.5 +-0.0710154 0.0391332 0.00421404 0.334766 0.5 +-0.0719291 0.0394019 0.00652921 0.403932 0.5 +-0.0716229 0.0395313 0.00756641 0.363419 0.5 +-0.070992 0.0395652 0.00837515 0.385667 0.5 +-0.0701875 0.0395708 0.00901355 0.39155 0.5 +-0.0694289 0.039567 0.00968578 0.323965 0.470356 +-0.0686495 0.0395764 0.0103048 0.409112 0.5 +-0.0679113 0.0395796 0.0109828 0.29852 0.5 +-0.0673994 0.0396352 0.0118227 0.284869 0.377428 +-0.0669027 0.0396709 0.012801 0.351734 0.5 +-0.0662162 0.0396687 0.0135434 0.462903 0.5 +-0.0655484 0.039711 0.0142785 0.453174 0.5 +-0.0647638 0.0397203 0.0149016 0.517171 0.5 +-0.06389 0.0397139 0.0154457 0.51407 0.5 +-0.0631059 0.039729 0.0160762 0.440588 0.5 +-0.0623108 0.039732 0.0166963 0.415119 0.5 +-0.0616465 0.0397266 0.0174413 0.430255 0.5 +-0.0607804 0.0397294 0.0180031 0.359841 0.5 +-0.0601415 0.0397484 0.0187938 0.284283 0.5 +-0.0594207 0.0398239 0.0196241 0.302006 0.5 +-0.0743429 0.0955133 0.0396401 0.500123 0.5 +-0.00386806 0.105937 -0.0224388 0.770401 0.5 +-0.0651015 0.0410328 0.0295625 0.402713 0.5 +-0.0650109 0.041163 0.0307556 0.462078 0.5 +-0.0648164 0.0412793 0.0318749 0.46326 0.5 +-0.0654475 0.0414866 0.0340095 0.481259 0.5 +-0.0653369 0.0416124 0.0352199 0.553829 0.5 +-0.0650871 0.0417056 0.03635 0.326881 0.5 +-0.0647267 0.0417808 0.0373932 0.385219 0.478023 +-0.0642565 0.0418897 0.0384072 0.41989 0.461076 +-0.0637796 0.0419038 0.0392448 0.43927 0.5 +-0.0632658 0.0419596 0.040132 0.445705 0.5 +-0.0628106 0.0420167 0.0410925 0.444194 0.5 +-0.0623617 0.0420762 0.0420515 0.455153 0.47063 +-0.0617437 0.0421117 0.0428503 0.495908 0.5 +-0.0609886 0.0421383 0.0435161 0.462796 0.5 +-0.0600859 0.0421217 0.0440266 0.456526 0.5 +-0.0592125 0.042121 0.0445708 0.520953 0.458593 +-0.0584087 0.0421172 0.0451764 0.48997 0.5 +-0.0575439 0.0421232 0.0457366 0.48653 0.5 +-0.0860991 0.0964962 0.0273389 0.654036 0.5 +-0.0854938 0.096523 0.0281673 0.692039 0.5 +-0.088151 0.137836 0.0407884 0.524225 0.445655 +-0.0279821 0.0821961 0.0475971 0.567888 0.410057 +-0.0415254 0.172553 -0.00373349 0.249969 0.5 +-0.0638039 0.0881523 -0.0190251 0.687011 0.5 +-0.0807853 0.0817556 0.0323751 0.733631 0.5 +-0.052342 0.035529 0.0457534 0.722945 0.5 +-0.0848984 0.0965537 0.0289739 0.721607 0.5 +-0.0391365 0.0406682 0.0418102 0.736576 0.5 +-0.0386117 0.0406767 0.0425487 0.521086 0.5 +-0.0380583 0.0406922 0.0433465 0.482729 0.434335 +-0.0375091 0.0407357 0.0441865 0.490952 0.5 +-0.0369077 0.0407733 0.0449918 0.51593 0.5 +-0.0363013 0.0408102 0.0457892 0.559419 0.5 +-0.0355385 0.040818 0.0464546 0.493471 0.5 +-0.0350351 0.0408695 0.0473482 0.453194 0.395019 +-0.0345546 0.0409268 0.0482929 0.428087 0.5 +-0.0340021 0.0409714 0.0491624 0.469106 0.5 +-0.0333397 0.0410057 0.0499212 0.485202 0.5 +-0.0325696 0.0410226 0.0505793 0.485281 0.5 +-0.0316389 0.0409999 0.051064 0.463245 0.468294 +-0.0306755 0.0409906 0.0514223 0.449352 0.361985 +-0.0297834 0.0409697 0.0520218 0.438983 0.5 +-0.0290961 0.0410008 0.0527549 0.438745 0.430509 +-0.0282466 0.0410133 0.0533665 0.361995 0.46776 +-0.0272596 0.0409813 0.0537728 0.481818 0.5 +-0.0261092 0.0409213 0.0540071 0.551758 0.5 +-0.0842996 0.0965857 0.0297797 0.734284 0.5 +-0.0836562 0.0966099 0.0305537 0.734043 0.5 +-0.0268179 0.0735627 0.0438663 0.739817 0.5 +-0.0789197 0.104773 0.0326412 0.596304 0.5 +-0.0921408 0.125525 0.040859 0.489107 0.5 +-0.0286126 0.0778208 0.0441079 0.709626 0.5 +-0.0222639 0.0783263 0.0546841 0.567484 0.5 +-0.0907738 0.125596 0.0437739 0.674925 0.5 +-0.0891497 0.139122 0.0375101 0.501771 0.473123 +-0.0290472 0.0777737 0.0431405 0.728643 0.388767 +-0.0706849 0.0819434 0.0406373 0.655987 0.5 +-0.0715523 0.0819441 0.0400873 0.661089 0.5 +-0.0829912 0.0966357 0.0312921 0.735071 0.5 +-0.0823518 0.0966615 0.0320686 0.728159 0.5 +-0.081672 0.0966878 0.0327979 0.730555 0.5 +-0.080968 0.0967089 0.0335048 0.726975 0.5 +-0.0802571 0.096729 0.0342047 0.601604 0.5 +-0.0795268 0.096746 0.0348816 0.606522 0.485461 +-0.027122 0.166756 -0.0173778 0.831319 0.5 +-0.0570614 0.151623 -0.00120922 0.550503 0.451945 +-0.071965 0.136965 -0.0074383 0.525891 0.5 +-0.0378406 0.0957387 -0.0228102 0.603364 0.5 +0.0171658 0.0974165 -0.0229214 0.749486 0.5 +-0.0820934 0.0898659 0.0320222 0.750019 0.5 +-0.0847663 0.132585 0.0488829 0.555689 0.5 +-0.0706305 0.0401508 0.00122659 0.22204 0.425033 +-0.0708913 0.0403263 0.00282802 0.355183 0.5 +-0.0705376 0.04043 0.00377428 0.36996 0.5 +-0.0710533 0.04057 0.0057746 0.339984 0.5 +-0.071022 0.0408196 0.00705143 0.39463 0.406037 +-0.0704746 0.040884 0.00781861 0.433074 0.5 +-0.0697772 0.0409122 0.00855159 0.405807 0.5 +-0.069028 0.0409064 0.00923732 0.416269 0.5 +-0.0682663 0.0409329 0.00988698 0.424744 0.5 +-0.0675171 0.0409229 0.0105489 0.516366 0.5 +-0.0668634 0.040937 0.011312 0.466544 0.5 +-0.0663455 0.040996 0.0121932 0.441809 0.449887 +-0.0657759 0.0410192 0.0130518 0.572976 0.5 +-0.064997 0.0410349 0.013689 0.538199 0.5 +-0.0642011 0.0410429 0.0143098 0.520935 0.5 +-0.0633398 0.0410523 0.0148679 0.530586 0.5 +-0.0625417 0.0410514 0.0154849 0.518962 0.5 +-0.0616719 0.0410515 0.0160296 0.505491 0.5 +-0.06094 0.0410414 0.0167056 0.42813 0.5 +-0.0601407 0.0410386 0.0173224 0.364938 0.5 +-0.0593549 0.0410534 0.0179552 0.287974 0.5 +-0.0767379 0.10491 0.0348158 0.55246 0.5 +-0.0751139 0.0954949 0.0389973 0.515184 0.5 +-0.0735502 0.095526 0.040254 0.500254 0.469612 +-0.0861456 0.140625 0.0415389 0.50914 0.5 +-0.0644352 0.0424097 0.0302481 0.437404 0.5 +-0.0643033 0.0426016 0.0312522 0.510746 0.5 +-0.0905601 0.144393 0.0275534 0.554096 0.5 +-0.064813 0.0428917 0.034688 0.525699 0.5 +-0.0645963 0.0430073 0.0358234 0.406746 0.5 +-0.0642327 0.0431706 0.0367918 0.465186 0.5 +-0.0638345 0.0431637 0.0378429 0.384998 0.428518 +-0.0633722 0.04322 0.0387983 0.402888 0.5 +-0.0628563 0.0432731 0.0396846 0.441866 0.480201 +-0.0623716 0.0433162 0.04063 0.56451 0.5 +-0.0618993 0.0433992 0.0415482 0.411204 0.5 +-0.0613445 0.0434338 0.042412 0.557458 0.5 +-0.0606463 0.0434636 0.0431332 0.472464 0.5 +-0.0597745 0.0434652 0.0436848 0.423741 0.5 +-0.0587368 0.0434475 0.0440841 0.487642 0.44366 +-0.0787218 0.0967552 0.0354897 0.613508 0.5 +-0.0778727 0.096767 0.0360596 0.598176 0.5 +-0.08997 0.132328 0.0399309 0.630828 0.468806 +-0.0760018 0.163203 -0.0170986 0.304903 0.5 +-0.0262003 0.0750789 0.0460261 0.64741 0.5 +-0.0799154 0.12806 -0.00573177 0.376136 0.464207 +-0.0711318 0.0777267 0.0384114 0.611409 0.5 +-0.0826468 0.144713 0.0407672 0.467885 0.447046 +-0.0555164 0.0482866 0.0387265 0.0780099 0.5 +-0.0250124 0.0782139 0.0518051 0.749884 0.423516 +-0.0770975 0.0967852 0.0367 0.561005 0.487498 +-0.038969 0.042042 0.0415955 0.556807 0.5 +-0.0383992 0.0420226 0.0422608 0.528559 0.5 +-0.0377624 0.0420706 0.0430123 0.492581 0.5 +-0.0372876 0.0421099 0.0439093 0.479254 0.452832 +-0.0366764 0.0421455 0.0447176 0.502652 0.5 +-0.0359879 0.0421738 0.0454409 0.537111 0.5 +-0.0353032 0.042242 0.0460623 0.523373 0.442328 +-0.0346582 0.0422066 0.0469558 0.494028 0.5 +-0.034222 0.0422724 0.0479221 0.430249 0.377026 +-0.0336612 0.0423072 0.0487868 0.60366 0.5 +-0.032982 0.0423452 0.0495212 0.630797 0.5 +-0.0322196 0.0423712 0.0501883 0.483275 0.5 +-0.0314067 0.0423682 0.0507901 0.450842 0.5 +-0.0303184 0.0423041 0.0510935 0.436184 0.432907 +-0.0293723 0.0422984 0.0515712 0.498158 0.33524 +-0.0285781 0.0423048 0.0521933 0.520467 0.5 +-0.0277389 0.0423333 0.0528015 0.44152 0.5 +-0.0268469 0.0423164 0.0533212 0.464198 0.5 +-0.0257999 0.0422849 0.0537317 0.417091 0.471222 +-0.0246606 0.0422329 0.0539554 0.466185 0.484845 +-0.0763961 0.0968047 0.0374195 0.64971 0.5 +-0.0872439 0.132483 0.0457019 0.559256 0.421054 +-0.0756638 0.0968147 0.0380937 0.627717 0.5 +-0.0843649 0.125772 0.0501053 0.568261 0.5 +-0.0858603 0.137915 0.0441653 0.698413 0.5 +-0.0786856 0.174223 -0.045863 0.265382 0.434105 +-0.0708946 0.1037 -0.0131771 0.484556 0.378662 +-0.024511 0.0782394 0.0527049 0.736311 0.5 +-0.0281096 0.0778495 0.0450018 0.723919 0.5 +-0.0848653 0.0855483 0.0264341 0.671149 0.464325 +-0.0861005 0.10314 0.0243088 0.517399 0.431619 +-0.0724387 0.0819305 0.0395669 0.658446 0.471056 +-0.0775302 0.161724 -0.0197184 0.72249 0.5 +-0.0698398 0.0922797 -0.0162924 0.704443 0.5 +-0.0917403 0.12555 0.0418871 0.636756 0.5 +-0.0748949 0.0968349 0.0387401 0.499593 0.5 +-0.0814422 0.106028 0.0294684 0.497263 0.5 +-0.0741702 0.0968478 0.0394202 0.483861 0.476176 +-0.073336 0.0968702 0.0400088 0.476972 0.476252 +-0.072467 0.0968801 0.0405541 0.479452 0.5 +-0.0715781 0.0968766 0.0410625 0.48415 0.5 +-0.0541455 0.0482522 0.0392578 0.0767352 0.218043 +-0.0555782 0.159581 0.0063787 0.276478 0.5 +-0.0898235 0.126994 0.0441831 0.690408 0.5 +-0.0859703 0.127103 0.0488324 0.688678 0.5 +-0.0874127 0.118983 0.0477049 0.600043 0.5 +-0.0700699 0.0415411 0.00206928 0.372436 0.5 +-0.069909 0.0416997 0.00317022 0.368005 0.5 +-0.0695527 0.04187 0.00402445 0.40485 0.5 +-0.0700913 0.0419644 0.00613646 0.277083 0.5 +-0.0699291 0.0421822 0.0072491 0.425421 0.5 +-0.0692421 0.0422187 0.00798097 0.477618 0.5 +-0.0685956 0.0422314 0.00876662 0.519612 0.5 +-0.0678614 0.042287 0.00944731 0.433985 0.5 +-0.0671246 0.042281 0.0101216 0.562755 0.5 +-0.0663652 0.0422587 0.0107808 0.498045 0.5 +-0.0657552 0.0422954 0.0115704 0.470018 0.440896 +-0.065046 0.0423247 0.012291 0.557573 0.5 +-0.0642469 0.0423257 0.0129047 0.520064 0.348086 +-0.0634522 0.0423282 0.0135276 0.512602 0.355956 +-0.0626599 0.0423324 0.0141491 0.510053 0.5 +-0.0617811 0.042326 0.0146867 0.49586 0.5 +-0.0609073 0.0423237 0.0152297 0.493924 0.5 +-0.060108 0.0423138 0.0158374 0.423565 0.5 +-0.0593718 0.0422854 0.0165091 0.353114 0.5 +-0.0585081 0.0422988 0.0170665 0.357844 0.5 +-0.0761105 0.167387 -0.0256061 0.242378 0.5 +-0.0720681 0.0805547 0.0392361 0.641793 0.5 +-0.072687 0.0955359 0.0408041 0.485268 0.458194 +-0.0718108 0.0955414 0.0413269 0.507063 0.5 +-0.0863431 0.0896619 0.0263909 0.738721 0.5 +-0.0876135 0.100396 0.0230423 0.514036 0.5 +-0.0617195 0.0669875 0.0343055 0.466592 0.5 +-0.0239757 0.0768012 0.0522149 0.745626 0.5 +-0.076892 0.165957 -0.0247772 0.410222 0.450661 +-0.0870672 0.0882048 0.024333 0.677487 0.5 +-0.0632884 0.0444363 0.0372932 0.379365 0.5 +-0.0628692 0.0445185 0.0382675 0.395263 0.5 +-0.0623929 0.0445563 0.039213 0.427808 0.5 +-0.0618871 0.044625 0.0401036 0.406909 0.5 +-0.0613708 0.044683 0.0409908 0.404271 0.5 +-0.0607701 0.0447346 0.0418038 0.383802 0.5 +-0.0601235 0.0447437 0.0425684 0.434742 0.5 +-0.0593254 0.0447426 0.0431798 0.354796 0.5 +-0.0583019 0.0447396 0.0435847 0.360922 0.462086 +-0.0817178 0.0953366 0.0328835 0.754335 0.5 +-0.0832306 0.0871025 0.0304136 0.739259 0.5 +-0.0820828 0.0871799 0.032118 0.754104 0.5 +-0.084857 0.0924919 0.0290512 0.765451 0.5 +-0.0735016 0.14861 -0.0288774 0.360563 0.5 +-0.0732751 0.148715 -0.0303812 0.256986 0.5 +-0.0358177 0.0886369 -0.024178 0.582441 0.5 +-0.0784918 0.144814 0.0436628 0.399272 0.371642 +-0.0749067 0.100837 0.0372176 0.494912 0.5 +-0.0138747 0.104484 -0.023001 0.625905 0.456265 +-0.0837086 0.0952625 0.0306499 0.755027 0.5 +-0.0883053 0.149858 0.0265188 0.359531 0.461558 +-0.0379669 0.0433397 0.0417712 0.744672 0.5 +-0.0373842 0.0433946 0.0425967 0.466058 0.473236 +-0.036876 0.0434502 0.0434666 0.460424 0.470649 +-0.03626 0.0434916 0.0442696 0.690201 0.5 +-0.0356854 0.0435567 0.045098 0.561539 0.5 +-0.0348879 0.043516 0.0457289 0.436343 0.477414 +-0.0341948 0.0435484 0.0464376 0.538735 0.345797 +-0.0336992 0.0435791 0.0473765 0.551922 0.5 +-0.0331162 0.0436399 0.0481995 0.605529 0.5 +-0.0324803 0.0436623 0.0489836 0.608418 0.5 +-0.0317074 0.0436869 0.0496355 0.480864 0.5 +-0.0309036 0.0436875 0.0502489 0.489586 0.5 +-0.0298946 0.0436977 0.0506861 0.514853 0.5 +-0.0288146 0.0436325 0.0510094 0.535756 0.455609 +-0.0835554 0.0925405 0.0305699 0.771532 0.5 +-0.0801184 0.0845811 0.0344552 0.778295 0.5 +-0.0865668 0.118992 0.0483015 0.598644 0.5 +-0.0214315 0.0906458 0.0534872 0.538033 0.453533 +-0.0408044 0.0884947 -0.0224789 0.618631 0.5 +-0.0270974 0.0794315 0.0481933 0.624659 0.421553 +-0.0504071 0.163936 0.00393123 0.399576 0.5 +-0.0835882 0.125784 0.0507488 0.580528 0.5 +-0.0851404 0.125756 0.0494653 0.551262 0.5 +-0.0858587 0.125737 0.0487678 0.570253 0.5 +-0.0238161 0.078256 0.0534268 0.734308 0.5 +-0.0815418 0.0912589 0.0328461 0.760322 0.5 +-0.0432016 0.171084 -0.00202068 0.317557 0.5 +-0.0211382 0.0985478 0.044502 0.395758 0.5 +-0.0745556 0.104899 0.0367465 0.38606 0.455036 +-0.0726288 0.07489 0.035733 0.722186 0.5 +-0.0875176 0.123015 0.0477063 0.553329 0.469715 +-0.0819791 0.08171 0.030761 0.721047 0.439187 +-0.0153943 0.099814 0.0443638 0.457134 0.438276 +-0.0819069 0.0844754 0.0320139 0.740231 0.5 +-0.0839019 0.105911 0.0262878 0.682076 0.5 +-0.0857179 0.124363 0.0486993 0.581637 0.5 +-0.0670133 0.0791411 0.0413099 0.596526 0.5 +-0.0884363 0.140505 0.0381916 0.619198 0.5 +-0.075975 0.156283 -0.00563956 0.568289 0.5 +-0.0817302 0.142079 0.0441697 0.402668 0.451808 +-0.0649016 0.118019 -0.00923352 0.628363 0.5 +-0.0767292 0.0860417 0.0380634 0.650479 0.5 +-0.0750529 0.0860661 0.0392001 0.655526 0.5 +-0.0903934 0.12698 0.0433203 0.665541 0.5 +-0.0287184 0.0806953 0.0455388 0.683355 0.5 +-0.0186581 0.0985081 0.0446525 0.329409 0.416724 +-0.0261763 0.0931476 0.0454624 0.762726 0.5 +-0.0891984 0.129697 0.0434765 0.531379 0.477045 +-0.0686122 0.0432054 0.00454593 0.397935 0.5 +-0.0689469 0.0433261 0.00632212 0.313246 0.5 +-0.0685283 0.0434892 0.00727271 0.401917 0.440353 +-0.0678925 0.0435809 0.00801004 0.419264 0.5 +-0.0672997 0.0435653 0.00884843 0.428196 0.5 +-0.0665225 0.0435914 0.00948645 0.438074 0.5 +-0.0657382 0.0436129 0.0101245 0.422201 0.5 +-0.0650018 0.0435996 0.0108034 0.395662 0.5 +-0.0641503 0.0436305 0.0113748 0.409636 0.5 +-0.0633352 0.0436031 0.0119653 0.510694 0.5 +-0.0625279 0.0435825 0.012569 0.497379 0.336302 +-0.0617292 0.0435742 0.0131822 0.491021 0.332874 +-0.0608612 0.0435863 0.0137318 0.486107 0.331941 +-0.0599836 0.043576 0.0142711 0.486595 0.5 +-0.0591064 0.0435686 0.0148077 0.423572 0.5 +-0.0582351 0.043574 0.0153571 0.429335 0.5 +-0.0575075 0.0435504 0.0160321 0.373632 0.5 +-0.056782 0.043535 0.0167171 0.36891 0.5 +0.0262296 0.0888085 -0.0227773 0.71165 0.5 +-0.0190294 0.0739916 0.05444 0.608015 0.464248 +-0.0899083 0.121615 0.0458595 0.661029 0.5 +-0.0144184 0.0997913 0.0448499 0.369931 0.5 +-0.0769184 0.0832691 0.0369336 0.648895 0.5 +-0.0328048 0.0886955 -0.0250147 0.367966 0.443725 +-0.078775 0.170042 -0.0371202 0.54696 0.5 +-0.0898343 0.122953 0.0457467 0.635152 0.5 +-0.0891532 0.121635 0.0465292 0.681872 0.5 +-0.068963 0.0874301 0.0429809 0.585421 0.426303 +-0.0908157 0.116185 0.0427025 0.610805 0.453037 +-0.0616474 0.0458147 0.0384356 0.386211 0.5 +-0.0611522 0.045903 0.0393286 0.262835 0.5 +-0.0606157 0.0459479 0.0402046 0.255518 0.5 +-0.0599936 0.0459773 0.0409964 0.260947 0.5 +-0.0592898 0.045994 0.0417021 0.252398 0.31034 +-0.0584156 0.0459799 0.0422363 0.2629 0.295573 +-0.0574587 0.045976 0.042703 0.218362 0.197374 +-0.0832785 0.12444 0.0504652 0.592824 0.459857 +-0.0831241 0.100626 0.0298981 0.668895 0.5 +-0.0251305 0.0810774 0.0532367 0.738165 0.5 +-0.0826184 0.0802381 0.0286257 0.660348 0.5 +-0.0794816 0.0846149 0.0352279 0.778664 0.5 +-0.0728228 0.148718 -0.0323717 0.232715 0.5 +-0.0397982 0.0885212 -0.0227204 0.576423 0.5 +-0.0824235 0.124446 0.0510342 0.568436 0.452695 +-0.0778707 0.177255 -0.0480374 0.296925 0.405083 +-0.0885025 0.144515 0.032494 0.608331 0.5 +-0.0510859 0.154625 -0.00472421 0.395974 0.5 +-0.0829949 0.0843947 0.0302754 0.702425 0.5 +-0.0373858 0.0446552 0.0411638 0.752004 0.5 +-0.036773 0.0446897 0.0419462 0.612739 0.5 +-0.0362696 0.0447516 0.0428152 0.60741 0.333225 +-0.035816 0.0448118 0.0437923 0.63532 0.5 +-0.0351912 0.0448435 0.0445858 0.545158 0.5 +-0.034376 0.0448305 0.0451875 0.569033 0.5 +-0.033578 0.0448331 0.0458046 0.540501 0.5 +-0.0329778 0.0448862 0.0466174 0.543009 0.5 +-0.032486 0.0449059 0.0475402 0.578775 0.368005 +-0.0317593 0.0449779 0.048226 0.558628 0.5 +-0.0310521 0.0450006 0.0489427 0.58941 0.5 +-0.030326 0.045 0.0496314 0.482954 0.5 +-0.0217284 0.0919768 0.0523353 0.479975 0.5 +-0.0871843 0.135176 0.0441499 0.535886 0.5 +-0.0693828 0.0805427 0.0408087 0.625077 0.452132 +-0.0823897 0.104663 0.0290404 0.474772 0.5 +-0.0288805 0.079237 0.0443379 0.711613 0.5 +-0.0900318 0.128311 0.0429434 0.658332 0.44097 +-0.0844768 0.0856095 0.0274708 0.675896 0.5 +-0.0836962 0.138005 0.0462469 0.503267 0.5 +-0.0905223 0.128294 0.0420009 0.626213 0.5 +-0.0628998 0.1209 -0.00884208 0.694692 0.5 +-0.090924 0.128274 0.0409748 0.614573 0.467328 +-0.0275566 0.0890776 0.0469337 0.446726 0.5 +-0.0872471 0.125707 0.0473263 0.667953 0.5 +-0.0273351 0.0750142 0.0443436 0.739146 0.5 +-0.0837001 0.104608 0.0275279 0.5713 0.5 +-0.0809833 0.080323 0.0311985 0.696843 0.5 +-0.083931 0.103265 0.0277985 0.598698 0.5 +-0.086661 0.123026 0.0482846 0.56777 0.5 +-0.019761 0.0984382 0.0445534 0.374189 0.455777 +-0.0200463 0.0893341 0.0549931 0.395697 0.451897 +-0.07603 0.0941366 0.0385416 0.550124 0.5 +-0.0136098 0.0997657 0.0454373 0.311604 0.374445 +-0.0793587 0.143462 0.044583 0.384069 0.473916 +-0.0849411 0.14333 0.0402714 0.502223 0.5 +-0.0856354 0.143297 0.0395519 0.486766 0.469754 +-0.0778945 0.102117 0.0345146 0.690044 0.5 +-0.0879353 0.140547 0.0390784 0.627454 0.5 +-0.0873971 0.140576 0.0399568 0.631486 0.5 +-0.0825276 0.142074 0.0435561 0.396977 0.5 +-0.0245149 0.0811097 0.0540325 0.722667 0.5 +-0.0754652 0.163196 -0.0162299 0.275384 0.427625 +-0.0845393 0.103233 0.0269979 0.59669 0.5 +-0.0249633 0.0931679 0.047071 0.465715 0.5 +-0.0237883 0.0932085 0.0487292 0.378656 0.5 +-0.0762259 0.0790445 0.0349679 0.755951 0.5 +-0.0673146 0.0446682 0.00602001 0.333494 0.5 +-0.0669072 0.0448192 0.00702222 0.262716 0.403145 +-0.0662928 0.044787 0.00771957 0.33706 0.5 +-0.065503 0.044849 0.00843715 0.307265 0.5 +-0.0647841 0.0448471 0.00913709 0.299261 0.5 +-0.063925 0.0448804 0.0097039 0.355523 0.5 +-0.0632063 0.0448721 0.0103941 0.366036 0.5 +-0.0623204 0.0448503 0.0109236 0.400769 0.5 +-0.0615188 0.0448284 0.0115308 0.460736 0.319245 +-0.0606371 0.0448145 0.012064 0.447931 0.5 +-0.0597659 0.0448149 0.0126042 0.470817 0.317386 +-0.0589723 0.0448133 0.0132235 0.482204 0.5 +-0.0580951 0.0448084 0.0137644 0.489265 0.5 +-0.0572927 0.0447946 0.0143752 0.429911 0.5 +-0.0563559 0.0448266 0.0148606 0.430273 0.5 +-0.0555501 0.0448059 0.0154665 0.381525 0.5 +-0.0877284 0.0950339 0.0247524 0.638244 0.5 +-0.088473 0.0908539 0.022804 0.624947 0.5 +-0.0845844 0.121705 0.0490448 0.726218 0.5 +0.0141421 0.107244 -0.018655 0.572129 0.5 +-0.0132802 0.102485 0.0435875 0.589711 0.5 +-0.084936 0.144668 0.0388142 0.479275 0.5 +-0.0261116 0.0809919 0.0513952 0.728679 0.5 +-0.0497662 0.165331 0.00186024 0.369742 0.391777 +-0.0882731 0.143189 0.0351319 0.584661 0.5 +-0.0889127 0.145822 0.0300758 0.642452 0.5 +-0.020719 0.0739658 0.0533053 0.610784 0.5 +-0.0604 0.0470132 0.0371523 0.152377 0.410418 +-0.05996 0.047085 0.0381143 0.152736 0.5 +-0.0593516 0.0471429 0.038917 0.146686 0.359465 +-0.0586519 0.047167 0.0396282 0.141779 0.325187 +-0.0577811 0.0472143 0.0403119 0.117502 0.25869 +-0.0569108 0.0471914 0.0407265 0.116343 0.18326 +-0.0797368 0.119028 0.049952 0.824456 0.5 +-0.0707047 0.079127 0.0393559 0.613137 0.5 +-0.082233 0.0925905 0.0320729 0.776782 0.5 +-0.0217816 0.0797281 0.0555871 0.554322 0.5 +-0.026741 0.0877745 0.0490115 0.517761 0.5 +-0.0818378 0.131303 0.0516681 0.455622 0.449057 +-0.0746801 0.157704 -0.00556618 0.251678 0.313812 +-0.0812551 0.138069 0.0480599 0.486309 0.5 +-0.0235246 0.079724 0.0545007 0.587006 0.5 +-0.080224 0.0913049 0.0343483 0.749866 0.5 +-0.0688943 0.103764 -0.0141878 0.487763 0.394315 +-0.0378236 0.0914714 -0.0236656 0.465153 0.5 +-0.0769529 0.128149 -0.00749249 0.548887 0.5 +-0.0367892 0.0459324 0.0404864 0.763782 0.5 +-0.0361107 0.0459963 0.0412564 0.647497 0.5 +-0.0356524 0.0460406 0.0421919 0.569612 0.5 +-0.0351155 0.0460859 0.0430647 0.443805 0.5 +-0.0345091 0.0461323 0.043875 0.508892 0.5 +-0.033807 0.0461583 0.044586 0.546708 0.5 +-0.0329093 0.0461288 0.0451027 0.539267 0.5 +-0.0321732 0.0461161 0.0457813 0.491272 0.358016 +-0.0315694 0.0461612 0.0465874 0.46925 0.355219 +-0.0309109 0.0462432 0.0473418 0.418974 0.5 +-0.0303409 0.0462461 0.0481864 0.468093 0.5 +-0.0295864 0.0462965 0.0488628 0.462445 0.408327 +-0.0883724 0.121658 0.047175 0.565182 0.5 +-0.0853661 0.0910995 0.0281927 0.766447 0.5 +-0.0287719 0.0876257 0.045371 0.614931 0.5 +-0.0889908 0.13778 0.0388031 0.509285 0.44047 +-0.0870569 0.137884 0.0425258 0.681728 0.5 +-0.0864551 0.137921 0.0433346 0.6778 0.5 +-0.0851812 0.137956 0.0449006 0.701964 0.5 +-0.0843022 0.0938821 0.0298739 0.758689 0.5 +-0.0736592 0.0887741 0.0405778 0.618597 0.5 +-0.0869535 0.131154 0.0468504 0.590317 0.5 +-0.0809296 0.0885877 0.0337432 0.749156 0.5 +-0.028101 0.0890412 0.0460663 0.539534 0.5 +-0.0880158 0.125695 0.0466833 0.634272 0.44169 +-0.0772906 0.165906 -0.0257637 0.443638 0.5 +-0.0762092 0.103511 0.0356214 0.535167 0.484051 +-0.0761461 0.154973 -0.00265921 0.446649 0.5 +-0.0700245 0.0833021 0.0413654 0.664628 0.449075 +-0.08561 0.123026 0.0486561 0.68807 0.5 +-0.0909607 0.144377 0.0265412 0.552953 0.5 +-0.0278525 0.0807805 0.0474761 0.589895 0.417453 +-0.0836745 0.0939124 0.0306595 0.761073 0.5 +-0.0837871 0.0829476 0.0282971 0.665336 0.5 +-0.069719 0.0887582 0.0422978 0.561468 0.429115 +-0.0875561 0.121673 0.0477803 0.573512 0.478712 +-0.0772797 0.157576 -0.0127941 0.899918 0.5 +-0.0840048 0.140674 0.0436515 0.414224 0.5 +-0.0811078 0.0831466 0.0326628 0.747143 0.5 +-0.0833667 0.142023 0.0429747 0.401302 0.5 +-0.0855834 0.141979 0.0409477 0.501705 0.471081 +-0.0917743 0.120197 0.0434965 0.654226 0.5 +-0.0766191 0.168746 -0.0293719 0.312208 0.5 +-0.0218765 0.0933131 0.0510401 0.458898 0.5 +-0.0794782 0.106106 0.0317497 0.515435 0.5 +-0.0845781 0.148672 0.0341151 0.39749 0.5 +-0.071812 0.0879125 -0.0161091 0.43783 0.5 +-0.0256593 0.0810401 0.0523557 0.735066 0.5 +-0.0867316 0.100467 0.0250232 0.564042 0.5 +-0.0829153 0.0925695 0.0313446 0.770128 0.5 +-0.0627188 0.046051 0.00845692 0.254355 0.5 +-0.0618482 0.0460583 0.00900481 0.28938 0.5 +-0.0610521 0.0460525 0.00962048 0.316151 0.5 +-0.0601827 0.0460596 0.0101722 0.314687 0.308894 +-0.0593004 0.0460479 0.0107053 0.461907 0.293044 +-0.058583 0.0460291 0.0113967 0.46369 0.309527 +-0.0577944 0.0460393 0.0120187 0.501334 0.289968 +-0.0569361 0.046073 0.0125834 0.513872 0.5 +-0.0561408 0.0460708 0.0131999 0.533263 0.5 +-0.0553504 0.0460785 0.0138247 0.492337 0.5 +-0.054558 0.0460859 0.0144477 0.499778 0.5 +-0.0537709 0.0460941 0.0150722 0.450242 0.5 +-0.0529962 0.0461208 0.0157076 0.484058 0.5 +-0.0224637 0.0768447 0.053535 0.597863 0.5 +-0.0837712 0.127162 0.0508887 0.559458 0.5 +-0.0771842 0.102138 0.0352151 0.568542 0.5 +-0.0167795 0.0984818 0.0458118 0.298185 0.386165 +-0.0455975 0.169625 -0.00241942 0.291628 0.5 +-0.0206549 0.0768238 0.0545752 0.599802 0.457311 +-0.0872718 0.144583 0.0355002 0.588157 0.5 +-0.0754593 0.159053 -0.00907047 0.331067 0.5 +-0.0885031 0.148521 0.0281728 0.600999 0.5 +-0.0577583 0.0479183 0.03595 0.108376 0.5 +-0.0572715 0.0482006 0.0365817 0.0648895 0.5 +-0.0566239 0.0482507 0.0375737 0 0 +-0.0549519 0.160962 0.00433648 0.359336 0.5 +-0.0551243 0.0482803 0.0389113 0.0786908 0.5 +-0.0267061 0.0765373 0.0464972 0.620672 0.5 +-0.0855601 0.095177 0.0282718 0.734607 0.5 +-0.0785455 0.146115 0.0422588 0.409694 0.5 +-0.026667 0.0823364 0.0504973 0.674474 0.5 +-0.0871856 0.0923586 0.0257303 0.704628 0.435156 +-0.0809274 0.12805 -0.00535084 0.406041 0.5 +-0.0718433 0.0833097 0.0403454 0.668534 0.5 +-0.0776757 0.0873848 0.0375611 0.644029 0.483032 +-0.0809192 0.0899278 0.0336764 0.745226 0.5 +-0.0142597 0.180104 -0.0279187 0.272111 0.445002 +-0.0265532 0.080945 0.0504296 0.707072 0.5 +-0.0849859 0.149949 0.0316738 0.366068 0.5 +-0.0886736 0.132413 0.0428724 0.532781 0.5 +-0.0208164 0.0797246 0.0560382 0.556347 0.5 +-0.0354292 0.0472715 0.0405203 0.669215 0.289071 +-0.0348248 0.0473223 0.0413292 0.518428 0.5 +-0.0342911 0.0473692 0.0421968 0.408428 0.374032 +-0.0336818 0.0474202 0.0430149 0.440381 0.5 +-0.0330184 0.0474571 0.0438647 0.427307 0.443792 +-0.0321779 0.0474216 0.0442941 0.414453 0.441934 +-0.0311974 0.0474073 0.0447828 0.431856 0.410582 +-0.0305219 0.0474445 0.0454913 0.378337 0.359479 +-0.0298888 0.0474725 0.0462905 0.313109 0.5 +-0.0293538 0.0475081 0.0471486 0.334379 0.34255 +-0.0287365 0.0475545 0.0479663 0.341947 0.5 +-0.0757024 0.160453 -0.0116926 0.328298 0.5 +-0.0221614 0.0825281 0.0558751 0.523514 0.450329 +-0.0773495 0.081875 0.035997 0.773803 0.5 +-0.0898842 0.145774 0.0282412 0.529488 0.5 +-0.0911968 0.145718 0.0253129 0.516174 0.5 +-0.0921823 0.117455 0.0412015 0.644159 0.477428 +-0.0857415 0.120359 0.048887 0.579271 0.475203 +-0.0834209 0.0911774 0.0304851 0.771071 0.5 +-0.076548 0.0954614 0.0376104 0.66424 0.5 +-0.0777899 0.164478 -0.0251991 0.373875 0.478153 +-0.0891389 0.120288 0.0465529 0.7239 0.5 +-0.0511762 0.163872 0.00329038 0.398422 0.5 +-0.089509 0.125659 0.045333 0.467746 0.5 +-0.0225206 0.0919822 0.0517607 0.464316 0.46234 +-0.0201048 0.0920391 0.0535514 0.515324 0.5 +-0.0750002 0.0776536 0.0352037 0.768111 0.5 +-0.026159 0.0918036 0.0468933 0.41415 0.480432 +-0.027467 0.0793682 0.0471485 0.587754 0.5 +-0.0844811 0.123027 0.0489478 0.62457 0.478512 +-0.0912584 0.116106 0.0417079 0.583475 0.5 +-0.0780066 0.0940671 0.0362827 0.700656 0.5 +-0.0845462 0.119028 0.0490922 0.721111 0.5 +-0.0782718 0.165861 -0.029036 0.471693 0.5 +-0.0819087 0.121685 0.0492514 0.68572 0.5 +-0.0272221 0.0904382 0.0465675 0.403965 0.5 +-0.0466082 0.166842 0.00289141 0.374072 0.5 +-0.0803828 0.11899 0.049226 0.869465 0.5 +-0.0841614 0.142011 0.042356 0.511178 0.5 +-0.0848818 0.142006 0.0416598 0.411545 0.467966 +-0.0709378 0.0995366 0.0403447 0.568816 0.5 +-0.0770729 0.168746 -0.0303374 0.317408 0.428058 +-0.077497 0.168713 -0.0313178 0.26009 0.5 +-0.0225677 0.0932815 0.0503229 0.38541 0.5 +-0.0230795 0.0932192 0.0494322 0.515871 0.5 +-0.047409 0.166836 0.00227952 0.366074 0.5 +-0.0271292 0.0850573 0.0494379 0.599971 0.5 +-0.0818597 0.146076 0.0399402 0.467733 0.5 +-0.0267099 0.0794912 0.0492298 0.664689 0.5 +-0.0238639 0.0825121 0.0547585 0.641437 0.5 +-0.087202 0.10043 0.0240701 0.541802 0.5 +-0.080258 0.0859229 0.0345477 0.762291 0.5 +-0.0601559 0.0472008 0.00728305 0.30028 0.5 +-0.0593991 0.0472653 0.0079341 0.381229 0.5 +-0.0586915 0.0472669 0.00864036 0.396733 0.5 +-0.0580451 0.047259 0.00941407 0.427842 0.5 +-0.0573375 0.0472769 0.0101218 0.487079 0.5 +-0.0566658 0.0473318 0.0108617 0.507184 0.5 +-0.0559525 0.0473442 0.0115659 0.492497 0.5 +-0.0552963 0.0473377 0.0123212 0.63078 0.5 +-0.0545075 0.047347 0.012948 0.64659 0.5 +-0.0537303 0.0473713 0.0135851 0.584253 0.5 +-0.053021 0.0473885 0.0142865 0.606548 0.5 +-0.0523202 0.0474101 0.0149978 0.636286 0.5 +-0.051625 0.0474378 0.0157122 0.654005 0.5 +-0.0773599 0.0940895 0.0370488 0.671317 0.5 +-0.0249679 0.0851951 0.0529639 0.638665 0.5 +-0.077268 0.161738 -0.0185704 0.697463 0.5 +-0.027609 0.0850124 0.048532 0.558005 0.5 +-0.0911524 0.122908 0.0442317 0.586912 0.5 +-0.0765838 0.178662 -0.0494737 0.21911 0.310731 +-0.0856485 0.103181 0.0252723 0.689826 0.5 +-0.0675365 0.0805511 0.0417814 0.622386 0.465827 +-0.0931203 0.121503 0.0403997 0.520202 0.5 +-0.0866978 0.12169 0.0483599 0.57195 0.5 +-0.0917675 0.126924 0.040336 0.614445 0.5 +-0.0238697 0.104438 -0.0232028 0.702573 0.5 +-0.08387 0.148679 0.0348187 0.405297 0.5 +-0.0886426 0.129716 0.0443401 0.556949 0.5 +-0.077144 0.164539 -0.0230622 0.463109 0.5 +-0.0266136 0.0837142 0.0504396 0.650766 0.5 +-0.0824187 0.100645 0.0306028 0.682581 0.425889 +-0.0887758 0.149859 0.0255696 0.358727 0.5 +-0.079848 0.116269 0.0487575 0.838272 0.5 +-0.0861982 0.144641 0.0372484 0.460203 0.5 +-0.0725037 0.079155 0.0383043 0.626662 0.5 +-0.0834639 0.0815548 0.0279962 0.662247 0.5 +-0.067181 0.156627 -0.0534662 0.38533 0.5 +-0.0262017 0.0878115 0.0498853 0.576484 0.5 +-0.0877683 0.149882 0.0273982 0.351136 0.460579 +-0.0855482 0.149965 0.0308161 0.367072 0.452379 +-0.0788525 0.107465 0.0324362 0.446249 0.5 +-0.0805487 0.0789662 0.0306236 0.65318 0.5 +-0.0345924 0.0485568 0.0396695 0.631506 0.5 +-0.0339683 0.0485791 0.0404406 0.487632 0.366882 +-0.0334269 0.0486094 0.0413091 0.36923 0.391322 +-0.0328931 0.0486572 0.0421875 0.368279 0.5 +-0.0321962 0.0487152 0.0429222 0.330168 0.454747 +-0.0313311 0.0487062 0.0434625 0.335046 0.5 +-0.0303696 0.0486908 0.0439216 0.401043 0.438075 +-0.0296434 0.0486725 0.0446006 0.335864 0.5 +-0.0289488 0.0487095 0.0453204 0.282402 0.5 +-0.0284243 0.0487716 0.0462084 0.227343 0.5 +-0.0278604 0.0487672 0.0470543 0.222765 0.5 +-0.0249111 0.0958255 0.0441185 0.623767 0.453809 +-0.0871853 0.145927 0.0339699 0.595515 0.5 +-0.0880483 0.145895 0.0319999 0.618899 0.457747 +-0.0759222 0.159085 -0.0100036 0.340743 0.44632 +-0.0895075 0.148492 0.0263454 0.596811 0.5 +-0.0679477 0.0860672 0.0434473 0.572212 0.5 +-0.0752605 0.157705 -0.0064221 0.315473 0.5 +-0.0826266 0.146034 0.0392943 0.478792 0.425441 +-0.0745303 0.0887706 0.0400356 0.610721 0.472788 +-0.0824089 0.107319 0.0275588 0.493269 0.5 +-0.0270125 0.0891105 0.0478066 0.464436 0.5 +-0.0865771 0.124349 0.048115 0.573905 0.381076 +-0.0901249 0.125637 0.04453 0.703149 0.5 +-0.0261702 0.0823861 0.0514348 0.68195 0.5 +-0.0767393 0.157602 -0.0105393 0.797311 0.5 +-0.0915748 0.124221 0.0431828 0.530095 0.466602 +-0.0287388 0.076371 0.0428795 0.718715 0.5 +-0.0791947 0.116328 0.04948 0.653806 0.5 +-0.0821235 0.0802564 0.0295192 0.678389 0.5 +-0.0835031 0.123045 0.0493423 0.618131 0.5 +-0.0795112 0.081834 0.0339273 0.759743 0.5 +-0.0258992 0.0891655 0.049535 0.687013 0.5 +-0.0802229 0.143442 0.044034 0.377223 0.5 +-0.086226 0.143316 0.0387173 0.470422 0.5 +-0.00287417 0.10736 -0.0221559 0.611997 0.5 +-0.0239591 0.0958294 0.044594 0.717845 0.5 +-0.0857815 0.0897033 0.0272482 0.755259 0.5 +-0.0256832 0.0878506 0.050771 0.596504 0.5 +-0.0781568 0.167257 -0.0305864 0.3785 0.5 +-0.0802983 0.0953773 0.0342868 0.75775 0.5 +-0.0282394 0.087664 0.0462444 0.555346 0.5 +-0.0856054 0.119006 0.0487694 0.596839 0.5 +-0.0897192 0.129664 0.0425949 0.646363 0.5 +-0.023162 0.0958328 0.0451924 0.622864 0.5 +-0.0211646 0.0933284 0.0517404 0.320261 0.470262 +-0.087746 0.09368 0.0248353 0.66102 0.5 +-0.0220478 0.0811409 0.0558034 0.546458 0.451917 +-0.0552893 0.160933 0.00328411 0.27808 0.5 +-0.0875676 0.129767 0.0460862 0.602465 0.5 +-0.0794062 0.147442 0.0402641 0.472782 0.5 +-0.0768211 0.0804727 0.0355147 0.769628 0.5 +-0.0729344 0.0901459 0.0411907 0.56644 0.5 +-0.0815038 0.0885533 0.0328994 0.747904 0.5 +-0.0582272 0.048399 0.00675942 0.467786 0.5 +-0.0577664 0.0485104 0.00767417 0.54815 0.5 +-0.057208 0.048538 0.00854022 0.583504 0.5 +-0.0566778 0.0485827 0.00942267 0.614422 0.5 +-0.0560757 0.0486306 0.0102324 0.617742 0.5 +-0.0553809 0.0486564 0.0109541 0.597219 0.5 +-0.0546819 0.0486825 0.0116705 0.578642 0.5 +-0.0539465 0.0486826 0.012352 0.753411 0.5 +-0.0531749 0.0487012 0.0129919 0.753406 0.5 +-0.0524373 0.0487028 0.0136696 0.759028 0.5 +-0.0517432 0.0487299 0.0143843 0.798074 0.5 +-0.051128 0.0487627 0.0151791 0.81493 0.5 +-0.0480905 0.156132 -0.00685995 0.396962 0.458936 +-0.0568093 0.0883611 -0.0215879 0.517672 0.5 +-0.0736443 0.148637 -0.0247496 0.318243 0.5 +-0.0273471 0.0735222 0.0429845 0.722441 0.5 +-0.0241255 0.089259 0.0519927 0.573327 0.5 +-0.0849611 0.0883696 0.0278927 0.747365 0.5 +-0.0808978 0.121685 0.0496566 0.858605 0.5 +-0.0580398 0.0608775 0.0245548 0.579014 0.5 +-0.0212083 0.0825271 0.0563448 0.522699 0.453132 +-0.0802772 0.089954 0.0344521 0.741352 0.5 +-0.047089 0.156143 -0.00736831 0.403191 0.467645 +-0.0519433 0.0503866 0.0326949 0.224658 0.5 +-0.0514926 0.0503999 0.033682 0.219243 0.426647 +-0.050991 0.0504175 0.03464 0.231175 0.5 +-0.050433 0.0505709 0.0355945 0.265883 0.5 +-0.0223808 0.0958588 0.045836 0.363444 0.5 +-0.0810826 0.144759 0.0420272 0.472802 0.5 +-0.0243507 0.0852386 0.0537426 0.618224 0.5 +-0.0485449 0.165375 0.00344343 0.35264 0.5 +-0.0338218 0.0886934 -0.0246941 0.6401 0.5 +-0.0873724 0.124348 0.0475064 0.538455 0.5 +-0.0609926 0.128204 -0.00783795 0.660597 0.482678 +-0.082117 0.127195 0.0520765 0.528723 0.5 +-0.0273112 0.0917698 0.0451953 0.637767 0.435066 +-0.0683312 0.0833327 0.042485 0.643221 0.5 +-0.0875821 0.0909427 0.0247332 0.696043 0.5 +-0.0736943 0.094184 0.0404336 0.523495 0.5 +-0.0575 0.0589785 0.0215704 0 0 +-0.0338319 0.0498039 0.0388148 0.622319 0.5 +-0.0331161 0.0498057 0.0395103 0.452176 0.5 +-0.0324996 0.0498708 0.0403614 0.406338 0.392212 +-0.0318101 0.0499111 0.0410759 0.283004 0.5 +-0.0311873 0.0499402 0.0418672 0.294565 0.5 +-0.0304078 0.0499703 0.0425042 0.418631 0.5 +-0.0296061 0.0499557 0.0431146 0.399838 0.5 +-0.0288967 0.0499669 0.0438168 0.318234 0.5 +-0.028183 0.0499752 0.0445203 0.23068 0.5 +-0.0273899 0.0499801 0.045145 0.17854 0.5 +-0.0577034 0.0591273 0.0216745 0 0 +-0.0740248 0.149858 -0.0328754 0.241965 0.5 +-0.0866528 0.145956 0.0348405 0.604403 0.5 +-0.0747436 0.0846695 0.0389578 0.663418 0.5 +-0.0868827 0.0896245 0.0255163 0.709803 0.5 +-0.0814751 0.118981 0.0489466 0.793473 0.5 +-0.0721093 0.0846859 0.0405598 0.675423 0.5 +-0.084567 0.0897523 0.028848 0.761211 0.5 +-0.0833313 0.0829966 0.0292517 0.686837 0.5 +-0.0452548 0.169651 -0.00135352 0.313821 0.5 +-0.0843581 0.0883713 0.0286614 0.753337 0.5 +-0.0253323 0.089221 0.0503626 0.708495 0.5 +-0.0865291 0.125714 0.0480303 0.583009 0.486428 +-0.0887934 0.125677 0.0460403 0.589605 0.5 +-0.0886031 0.143176 0.0340326 0.590851 0.5 +-0.089865 0.120262 0.0458544 0.714564 0.5 +-0.0260624 0.0837492 0.0512652 0.653112 0.5 +-0.0217907 0.0957944 0.0466571 0.355199 0.414647 +-0.0784161 0.116342 0.0501163 0.658648 0.5 +-0.0800863 0.148726 0.0380799 0.456352 0.5 +-0.0826166 0.123078 0.0498508 0.589851 0.459109 +-0.0788159 0.0818529 0.0346403 0.77099 0.5 +-0.027107 0.082291 0.0495314 0.649028 0.5 +-0.0810659 0.143393 0.0434586 0.39217 0.5 +-0.086895 0.143263 0.0379805 0.5896 0.5 +-0.0888985 0.128369 0.0446279 0.557682 0.5 +-0.0853621 0.135278 0.0465646 0.721235 0.5 +-0.0911594 0.120221 0.0443019 0.657025 0.5 +-0.086688 0.0937529 0.026595 0.714623 0.5 +-0.0777926 0.167262 -0.0295303 0.381987 0.457758 +-0.0214041 0.0879871 0.0549671 0.52454 0.5 +-0.0244219 0.0752703 0.0498831 0.721908 0.5 +-0.0210295 0.0958616 0.0473023 0.357576 0.5 +-0.0774755 0.170095 -0.0341987 0.278032 0.5 +-0.0860758 0.0924352 0.0274562 0.744589 0.5 +-0.0870669 0.0909973 0.0256595 0.713302 0.5 +-0.0769239 0.160393 -0.0146649 0.495647 0.480329 +-0.0791963 0.120405 0.0507691 0.673039 0.5 +-0.0847946 0.140657 0.0430258 0.52877 0.477973 +-0.0266475 0.0904555 0.0474235 0.432983 0.480021 +-0.0737533 0.0901294 0.040627 0.55501 0.5 +-0.074576 0.0901236 0.0400162 0.573629 0.482779 +-0.0425095 0.171123 -0.00130836 0.370079 0.5 +-0.0275965 0.0836272 0.048557 0.575687 0.5 +-0.0572172 0.0498044 0.00711465 0.637658 0.5 +-0.0567938 0.0498747 0.00808849 0.679991 0.5 +-0.0562843 0.049932 0.00898241 0.690031 0.5 +-0.0556769 0.0499718 0.00979142 0.684815 0.5 +-0.0549752 0.0499938 0.0105067 0.64878 0.5 +-0.0543247 0.0500125 0.0112758 0.63382 0.5 +-0.053617 0.0500325 0.0119809 0.598586 0.5 +-0.0528487 0.0500508 0.0126245 0.806709 0.5 +-0.0521211 0.0500618 0.0133132 0.826442 0.5 +-0.0514248 0.0500855 0.0140283 0.855497 0.5 +-0.0508177 0.0501221 0.014822 0.859166 0.5 +-0.075338 0.161792 -0.0134783 0.270689 0.5 +-0.0886456 0.0935942 0.0229142 0.589299 0.5 +-0.0894525 0.128349 0.0437622 0.524772 0.5 +-0.0810165 0.134048 0.0507919 0.537638 0.5 +-0.0881693 0.0922771 0.0238938 0.647256 0.45435 +-0.014868 0.104453 -0.022832 0.637743 0.5 +-0.0865727 0.08823 0.0252282 0.691479 0.5 +-0.0860797 0.0882889 0.0261675 0.706931 0.447483 +-0.0732571 0.0860546 0.040246 0.666811 0.456094 +-0.072371 0.0860632 0.0407672 0.674263 0.5 +-0.0517698 0.0516016 0.0312301 0.403221 0.455571 +-0.0513689 0.0516822 0.0322144 0.39577 0.5 +-0.0509112 0.0517382 0.0331779 0.415142 0.5 +-0.05033 0.0517928 0.0340061 0.419986 0.5 +-0.0497796 0.0518319 0.0348836 0.436448 0.5 +-0.0205289 0.0958269 0.048234 0.316835 0.454403 +-0.0199274 0.0958752 0.0490354 0.313557 0.5 +-0.0192371 0.0959207 0.0497533 0.300099 0.5 +-0.0184702 0.0959697 0.0503933 0.304626 0.5 +-0.0177679 0.0959988 0.0511065 0.306727 0.5 +-0.0815821 0.0803018 0.0303913 0.696893 0.5 +-0.0668801 0.103821 -0.0153002 0.60115 0.5 +-0.0810791 0.117571 0.0486733 0.80438 0.5 +-0.0802626 0.147413 0.0397079 0.46117 0.5 +-0.0926613 0.122825 0.0414622 0.522669 0.5 +-0.0922534 0.122854 0.0424865 0.539991 0.5 +-0.0744952 0.0941746 0.0398302 0.511926 0.453521 +-0.0168224 0.0960286 0.0515795 0.331352 0.5 +-0.0160134 0.0959893 0.0521651 0.352324 0.5 +-0.0318715 0.0510682 0.0382665 0.336177 0.428208 +-0.0312407 0.0510927 0.0390643 0.241571 0.375743 +-0.0306139 0.051126 0.0398517 0.276064 0.44569 +-0.0298413 0.0511486 0.0404908 0.434945 0.5 +-0.029049 0.0511502 0.0411139 0.250059 0.5 +-0.0280876 0.0511424 0.0415727 0.313694 0.5 +-0.0269495 0.0511315 0.0418642 0.133382 0.370504 +-0.0782251 0.104799 0.0333593 0.582673 0.5 +-0.0495337 0.163976 0.00447865 0.314061 0.5 +-0.0802651 0.0940224 0.034298 0.766423 0.5 +-0.0848442 0.146005 0.0372765 0.458708 0.5 +-0.0876525 0.145908 0.0330215 0.595709 0.5 +-0.0884617 0.14585 0.0310303 0.496684 0.5 +-0.0903673 0.145762 0.0273033 0.52499 0.5 +-0.0856388 0.100529 0.0267624 0.595113 0.5 +-0.0248685 0.10443 -0.0231858 0.689975 0.5 +-0.0288186 0.0862428 0.0454609 0.607924 0.5 +-0.0828513 0.138047 0.046826 0.410662 0.478854 +-0.0820555 0.138062 0.0474469 0.411588 0.458561 +-0.077013 0.157587 -0.0116646 0.841749 0.5 +-0.0234514 0.0892984 0.0527307 0.736549 0.5 +-0.0837947 0.100615 0.0291484 0.663461 0.5 +-0.0865918 0.127084 0.0480364 0.716932 0.5 +-0.0912006 0.121567 0.0443209 0.618441 0.5 +-0.0783855 0.0873596 0.0368663 0.630719 0.5 +-0.0830674 0.136771 -0.000769185 0.646476 0.5 +-0.0853072 0.129862 0.0494994 0.621428 0.5 +-0.0236685 0.0919017 0.0500491 0.598554 0.5 +-0.0738077 0.102191 0.0374953 0.478884 0.5 +-0.0797481 0.0789376 0.0314228 0.665628 0.5 +-0.0737584 0.0914853 0.0405847 0.5468 0.5 +-0.0812985 0.084505 0.0328118 0.758993 0.5 +-0.0818632 0.143391 0.0428465 0.483564 0.5 +-0.0802896 0.144766 0.0426469 0.469909 0.5 +-0.0727381 0.151148 -0.0398146 0.298977 0.5 +-0.0902062 0.143054 0.0286714 0.575492 0.466662 +-0.0809888 0.100705 0.031995 0.681843 0.5 +-0.0862834 0.141953 0.0402325 0.482235 0.5 +-0.0773948 0.167309 -0.02854 0.398885 0.5 +-0.0472223 0.168222 -0.000777409 0.296158 0.5 +-0.0753424 0.0928083 0.039305 0.553842 0.5 +-0.0746115 0.103538 0.0368408 0.457244 0.5 +-0.0746007 0.0914774 0.0400082 0.570581 0.477119 +-0.0889887 0.147168 0.0287003 0.653192 0.5 +-0.0872644 0.139206 0.0412952 0.657954 0.5 +-0.0896207 0.132365 0.0409732 0.511427 0.5 +-0.0785671 0.172906 -0.0416992 0.415527 0.5 +-0.0771653 0.156191 -0.0114635 0.899577 0.5 +-0.0871097 0.129792 0.0470428 0.624861 0.401785 +-0.0825182 0.0816676 0.0298907 0.699145 0.5 +-0.0241038 0.0865955 0.0534593 0.607699 0.471231 +-0.0226623 0.0866242 0.0548392 0.550514 0.5 +-0.0361034 0.165201 -0.01444 0.492932 0.5 +-0.0798966 0.083235 0.0342815 0.77888 0.5 +-0.0814721 0.135361 0.0497671 0.510526 0.450897 +-0.088108 0.129743 0.0452172 0.577318 0.5 +-0.0565129 0.051223 0.00779351 0.66831 0.450021 +-0.0560291 0.051292 0.00869383 0.709987 0.5 +-0.0554104 0.0513256 0.00948897 0.6343 0.5 +-0.0547684 0.0513541 0.0102674 0.583142 0.5 +-0.0540202 0.0513732 0.0109294 0.547991 0.5 +-0.0533816 0.0513995 0.0117052 0.702674 0.5 +-0.0526765 0.0514226 0.0124143 0.693951 0.5 +-0.0519687 0.0514416 0.0131188 0.696667 0.5 +-0.0513196 0.0514695 0.0138904 0.7108 0.5 +-0.0506409 0.0514954 0.0146147 0.721341 0.5 +-0.050104 0.0515366 0.0156131 0.734703 0.5 +-0.0820819 0.150001 0.0344048 0.355923 0.5 +-0.019145 0.0893155 0.0554734 0.472797 0.5 +-0.0867977 0.144597 0.036443 0.596584 0.432583 +-0.080296 0.0886098 0.0345053 0.75131 0.5 +-0.0402074 0.168164 -0.0113973 0.47109 0.5 +-0.0883046 0.122998 0.0470686 0.544744 0.391231 +-0.0677324 0.0847093 0.0432514 0.610831 0.5 +-0.0686258 0.0846974 0.0427491 0.62058 0.5 +-0.0694924 0.0846972 0.0421957 0.642954 0.434258 +-0.0514912 0.0529568 0.0308804 0.512416 0.5 +-0.051108 0.0530218 0.0319282 0.542186 0.5 +-0.0506321 0.0530807 0.0328365 0.572966 0.5 +-0.0500875 0.0531258 0.0337221 0.606178 0.5 +-0.049486 0.0531643 0.034537 0.596501 0.5 +-0.0489043 0.0531988 0.0353928 0.568318 0.5 +-0.0482545 0.05323 0.0361705 0.607651 0.5 +-0.0877434 0.135138 0.0431967 0.534495 0.467229 +-0.027194 0.0764697 0.0455544 0.598535 0.5 +-0.0458049 0.0532278 0.0379952 0.585107 0.442889 +-0.0866727 0.139248 0.0421058 0.685044 0.5 +-0.0822864 0.135367 0.0491747 0.512153 0.5 +-0.0368227 0.0914861 -0.023804 0.683187 0.5 +-0.0890009 0.118943 0.0464523 0.608622 0.5 +-0.0897172 0.118919 0.0457459 0.740109 0.5 +-0.0920915 0.118829 0.0424602 0.656431 0.5 +-0.09254 0.118824 0.0413658 0.61864 0.5 +-0.0808743 0.136754 0.0491531 0.48828 0.5 +-0.0823735 0.148711 0.0361489 0.406162 0.392873 +-0.0308715 0.0522855 0.0371048 0.376195 0.5 +-0.0296361 0.0522471 0.0373693 0.379198 0.5 +-0.0285281 0.0522637 0.0377683 0.363149 0.5 +-0.0276636 0.0522618 0.0383069 0.385665 0.5 +-0.0267998 0.0522633 0.0388472 0.415415 0.5 +-0.0260899 0.0522789 0.0395517 0.387169 0.5 +-0.0782715 0.168666 -0.0333616 0.390307 0.5 +-0.0729482 0.0914984 0.0411605 0.550317 0.5 +-0.0766837 0.0941158 0.0377884 0.684496 0.5 +-0.0209524 0.0920017 0.0529687 0.495081 0.5 +-0.0847679 0.10454 0.0257763 0.683023 0.5 +-0.082659 0.0871422 0.0312687 0.747502 0.5 +-0.0277494 0.0764615 0.044728 0.748198 0.5 +-0.0883766 0.141855 0.0366703 0.590013 0.5 +-0.0905557 0.120241 0.0451196 0.696309 0.5 +-0.0270064 0.0808968 0.0494715 0.673812 0.5 +-0.0818245 0.107456 0.0283887 0.473736 0.5 +-0.014359 0.102532 0.0433738 0.594053 0.5 +-0.0254372 0.0796492 0.0521904 0.753754 0.5 +-0.0819254 0.12582 0.0519232 0.557938 0.5 +-0.0827882 0.125806 0.051363 0.563487 0.468283 +-0.0716366 0.0874136 0.0414306 0.63409 0.5 +-0.0790974 0.103427 0.0328545 0.674507 0.413096 +-0.0805064 0.103384 0.0314383 0.656802 0.5 +-0.0790371 0.0873264 0.0361062 0.763967 0.5 +-0.0473947 0.0359569 0.0452833 0.182713 0.5 +-0.0910251 0.124245 0.0440568 0.547502 0.5 +-0.0689412 0.079144 0.0404114 0.603617 0.5 +-0.0912832 0.125583 0.0428488 0.64579 0.5 +-0.0892074 0.127019 0.0449806 0.567117 0.480403 +-0.091259 0.117481 0.0430647 0.696501 0.5 +-0.0659073 0.110934 -0.0126703 0.490045 0.5 +0.0101829 0.0893384 -0.0312282 0.627702 0.5 +-0.0873895 0.143261 0.0370491 0.580819 0.5 +-0.0776054 0.0804635 0.0348861 0.763185 0.5 +-0.0786774 0.168631 -0.0343418 0.56298 0.5 +-0.0906238 0.143032 0.0276653 0.572838 0.5 +-0.0251464 0.0824617 0.0532115 0.705826 0.5 +-0.0267799 0.0893467 -0.0340353 0.395338 0.5 +-0.0467828 0.168244 0.000200438 0.333114 0.5 +-0.0779669 0.165862 -0.0278956 0.39202 0.5 +-0.0800641 0.107437 0.0308747 0.483506 0.5 +-0.0907644 0.142021 0.0271708 0.72795 0.5 +-0.0808858 0.0872378 0.0337267 0.754934 0.5 +-0.0900228 0.148451 0.0254546 0.593752 0.443016 +-0.0843383 0.133967 0.0484219 0.555412 0.5 +-0.0761205 0.0927947 0.038671 0.694211 0.426514 +-0.0284346 0.0849121 0.0465284 0.472017 0.5 +-0.0779458 0.175786 -0.0452228 0.272542 0.5 +-0.0272404 0.0877435 0.0480762 0.486525 0.5 +-0.0144506 0.103914 0.0432646 0.716939 0.5 +-0.0247603 0.0865587 0.0527086 0.617709 0.5 +-0.0280294 0.0835807 0.0475884 0.541092 0.401126 +-0.0788492 0.100759 0.0340965 0.689071 0.5 +-0.0879532 0.117604 0.0468721 0.573197 0.5 +-0.081698 0.0939818 0.0329068 0.767804 0.5 +-0.0852266 0.0854944 0.0253873 0.664079 0.469307 +-0.0830725 0.139367 0.045586 0.400971 0.476362 +-0.0558236 0.0526652 0.00846948 0.609842 0.5 +-0.0552284 0.0527023 0.00927604 0.585124 0.5 +-0.0546238 0.0527377 0.0100793 0.470454 0.5 +-0.0539349 0.0527611 0.0108042 0.434881 0.5 +-0.0532861 0.0527919 0.0115704 0.548411 0.5 +-0.0525855 0.0528134 0.0122839 0.53752 0.5 +-0.051888 0.0528335 0.0130005 0.540137 0.5 +-0.0512535 0.0528689 0.0137817 0.542139 0.5 +-0.0505797 0.0528906 0.0145102 0.543391 0.5 +-0.0500211 0.0529295 0.0155558 0.542904 0.5 +-0.0874477 0.148578 0.0299355 0.44849 0.473111 +-0.0786972 0.0940445 0.0355566 0.732516 0.5 +-0.0832791 0.0884633 0.0304387 0.755817 0.5 +-0.0775111 0.0860271 0.0374369 0.650715 0.482006 +-0.0768401 0.178514 -0.0509284 0.309932 0.08919 +-0.0871595 0.128427 0.0471391 0.672228 0.5 +-0.0774115 0.160346 -0.0169397 0.535329 0.5 +-0.0864194 0.133874 0.0462429 0.702359 0.5 +-0.0728513 0.077742 0.0372898 0.769095 0.5 +-0.0756877 0.15767 -0.00739081 0.54061 0.5 +-0.0509412 0.0543847 0.0317288 0.66814 0.45257 +-0.050518 0.054445 0.0327051 0.698843 0.5 +-0.0499825 0.0544896 0.033589 0.729736 0.5 +-0.0494012 0.054529 0.0344155 0.734221 0.5 +-0.0487872 0.0545643 0.0352206 0.72274 0.5 +-0.0481437 0.0545922 0.0360102 0.736302 0.5 +-0.0474886 0.05462 0.0367747 0.757824 0.5 +-0.0467288 0.054632 0.0374442 0.562109 0.5 +-0.0459023 0.0546326 0.0380387 0.485362 0.440372 +-0.0450103 0.054631 0.0385549 0.477789 0.462352 +-0.0781434 0.0927222 0.0364655 0.695217 0.421645 +-0.0759273 0.08606 0.0386654 0.652126 0.5 +-0.0903951 0.118903 0.0450094 0.727275 0.5 +-0.0480871 0.166778 0.00155196 0.343985 0.396183 +-0.0831336 0.135327 0.0485953 0.51936 0.5 +-0.0860496 0.128472 0.048867 0.668427 0.5 +-0.0819634 0.103331 0.0300688 0.628218 0.5 +-0.0794921 0.146102 0.0417961 0.391098 0.5 +-0.0238593 0.0838986 0.0547079 0.623086 0.5 +-0.028646 0.0535523 0.0364431 0.583932 0.5 +-0.0278445 0.0535534 0.0370258 0.628718 0.5 +-0.0270646 0.053566 0.0376661 0.620973 0.5 +-0.0264336 0.0535943 0.0384453 0.618664 0.5 +-0.02575 0.0536249 0.0391706 0.619297 0.5 +-0.0251991 0.0536651 0.0400375 0.541998 0.5 +-0.0247513 0.0944605 0.0453863 0.564245 0.5 +-0.0240199 0.0537379 0.0416895 0.433194 0.5 +-0.0241215 0.0944713 0.0461972 0.290213 0.449493 +-0.015259 0.0984512 0.0471298 0.271403 0.401363 +-0.0774944 0.092744 0.0372295 0.695738 0.5 +-0.0744413 0.0833098 0.038687 0.657281 0.473269 +-0.0782747 0.174383 -0.0433933 0.285458 0.427884 +-0.0767419 0.164619 -0.0220172 0.450417 0.447369 +-0.0752579 0.0874199 0.0393733 0.636169 0.5 +-0.0492522 0.165358 0.00274428 0.330624 0.5 +-0.0258761 0.0796032 0.0512286 0.740813 0.430554 +-0.0776167 0.0914005 0.037394 0.711087 0.5 +-0.0517065 0.163863 0.00241874 0.363639 0.5 +-0.0680469 0.0887699 0.043444 0.532502 0.5 +-0.0679768 0.0791427 0.0408622 0.608491 0.5 +-0.0838753 0.135332 0.0479212 0.528254 0.477973 +-0.0798409 0.103395 0.0321858 0.670749 0.5 +-0.0515592 0.162515 0.00512403 0.30846 0.468077 +-0.0873717 0.0895698 0.0245766 0.692699 0.5 +-0.0678178 0.0923118 -0.0167386 0.65061 0.5 +-0.0796939 0.0873057 0.0353613 0.756711 0.5 +-0.0438294 0.0913555 -0.0224139 0.591637 0.5 +-0.0782363 0.119072 0.0512696 0.577604 0.5 +-0.0842997 0.131249 0.0498733 0.56734 0.5 +-0.0816839 0.0830971 0.0318157 0.738022 0.5 +-0.0814225 0.0858535 0.0328878 0.759606 0.5 +-0.0803036 0.100707 0.0327244 0.685187 0.5 +-0.089811 0.143072 0.0296513 0.550626 0.5 +-0.0909792 0.143017 0.0266346 0.710846 0.5 +-0.0886495 0.113065 0.0417436 0.381474 0.5 +-0.0908165 0.145736 0.0263481 0.531962 0.5 +-0.0893654 0.145802 0.0291185 0.533567 0.474337 +-0.0791015 0.170034 -0.0382691 0.505978 0.5 +-0.0786209 0.174303 -0.0444916 0.396308 0.5 +-0.0801387 0.142096 0.0454029 0.393256 0.464149 +-0.0874177 0.131128 0.0459004 0.592209 0.5 +-0.0281854 0.174153 -0.0178233 0.48513 0.5 +-0.0791017 0.171279 -0.0410322 0.40225 0.421826 +-0.0752954 0.15636 -0.00353298 0.335506 0.5 +-0.0725865 0.0874189 0.0409577 0.647638 0.5 +-0.073587 0.148629 -0.0261691 0.279746 0.5 +-0.0814849 0.0872077 0.0329213 0.756273 0.5 +-0.0858041 0.131212 0.0485351 0.603478 0.5 +-0.0789661 0.0859916 0.0360799 0.782629 0.5 +-0.0228892 0.0739252 0.0512281 0.761958 0.5 +-0.0233826 0.0866124 0.0541509 0.571572 0.5 +-0.0284893 0.0835322 0.0466293 0.514586 0.5 +-0.0923571 0.121517 0.0426088 0.590665 0.5 +-0.0748611 0.163212 -0.0154286 0.265593 0.5 +-0.077476 0.164468 -0.0240677 0.424559 0.455853 +-0.0723659 0.100858 0.0389128 0.537945 0.5 +-0.0795725 0.091329 0.0351135 0.734743 0.5 +0.00712427 0.107292 -0.0202517 0.808693 0.5 +-0.0551395 0.054088 0.00915623 0.475035 0.5 +-0.0546003 0.0541349 0.0100271 0.353423 0.5 +-0.0539359 0.0541543 0.0107637 0.320666 0.5 +-0.0533105 0.0541891 0.0115512 0.368927 0.5 +-0.052616 0.0542078 0.012269 0.36862 0.5 +-0.0519452 0.0542248 0.0130044 0.368447 0.5 +-0.0513326 0.0542594 0.0137993 0.365362 0.5 +-0.0507132 0.054338 0.0146004 0.343364 0.5 +-0.0503289 0.0543622 0.0156654 0.32042 0.5 +-0.0505672 0.0545537 0.0173366 0.2659 0.5 +-0.0509946 0.0547172 0.0191515 0.262945 0.5 +-0.0514204 0.0548853 0.0209522 0.417061 0.5 +-0.0518764 0.0550741 0.0228473 0.470855 0.5 +-0.0520805 0.0552272 0.0244826 0.695325 0.5 +-0.0521218 0.0553341 0.025863 0.747772 0.5 +-0.0774203 0.177255 -0.0472003 0.206191 0.279993 +-0.0860007 0.147303 0.0341634 0.444548 0.5 +-0.0861837 0.0868588 0.0248974 0.671888 0.5 +-0.0512935 0.0556822 0.0305914 0.663652 0.5 +-0.0509119 0.055753 0.0316394 0.693525 0.444691 +-0.0504539 0.0558071 0.0326022 0.708872 0.5 +-0.0499219 0.0558508 0.0334877 0.742166 0.5 +-0.0493842 0.0558982 0.0343669 0.768296 0.5 +-0.0487687 0.0559317 0.0351683 0.801044 0.5 +-0.0481052 0.0559539 0.0359192 0.800191 0.5 +-0.0474593 0.0559824 0.0367034 0.761503 0.5 +-0.0467634 0.0560036 0.0374321 0.74153 0.5 +-0.0459594 0.0560107 0.0380589 0.595137 0.5 +-0.0451321 0.0560164 0.0386443 0.50531 0.469739 +-0.0840259 0.124392 0.0498267 0.613753 0.5 +-0.0883316 0.128385 0.0454834 0.599358 0.5 +-0.0909787 0.118866 0.0441649 0.685094 0.5 +-0.0775185 0.147451 0.0411778 0.40275 0.47537 +-0.0841715 0.0870272 0.0285556 0.725999 0.432755 +-0.0902093 0.131023 0.0402096 0.490606 0.478348 +-0.0293156 0.0820403 0.0446588 0.66352 0.5 +-0.0895091 0.147137 0.0278175 0.652439 0.5 +-0.0698033 0.087974 -0.016854 0.50509 0.45244 +-0.073748 0.0805288 0.0380979 0.638095 0.5 +-0.027701 0.0549269 0.0368456 0.757221 0.5 +-0.0269873 0.0549465 0.0375414 0.727067 0.5 +-0.0263571 0.0549776 0.0383278 0.692126 0.5 +-0.0258056 0.0550238 0.0391969 0.667478 0.5 +-0.0252161 0.0550594 0.0400126 0.582228 0.5 +-0.0246982 0.0551057 0.0409028 0.602148 0.5 +-0.0240922 0.0551393 0.0417051 0.482081 0.5 +-0.0235187 0.0551838 0.0425567 0.541713 0.5 +-0.0229321 0.055215 0.043371 0.592486 0.5 +-0.0224297 0.0552774 0.0442986 0.710455 0.5 +-0.0218343 0.0553077 0.0451067 0.719649 0.5 +-0.0212331 0.0553385 0.0459146 0.60734 0.5 +-0.0206125 0.0553712 0.0467047 0.624217 0.5 +-0.0199502 0.0553853 0.0474489 0.640723 0.5 +-0.0192766 0.0554309 0.0481999 0.638037 0.5 +-0.0185768 0.055451 0.0489119 0.639182 0.5 +-0.0178669 0.0554748 0.0496143 0.646007 0.5 +-0.0170933 0.0554767 0.0502631 0.645432 0.5 +-0.0839307 0.125043 -0.00388859 0.431317 0.5 +-0.0743429 0.0777095 0.0359578 0.776958 0.5 +-0.0737727 0.0928414 0.040556 0.549706 0.5 +-0.0775055 0.120428 0.0519362 0.577165 0.474198 +-0.022007 0.0754165 0.0531212 0.727741 0.5 +-0.0688111 0.0922897 -0.0164711 0.739073 0.5 +-0.0715501 0.0763344 0.0374538 0.623168 0.480517 +-0.0878291 0.0895228 0.0236162 0.677786 0.5 +-0.0783775 0.103446 0.0335489 0.670285 0.5 +-0.0858505 0.116285 0.047652 0.539772 0.5 +-0.0810823 0.146103 0.0405774 0.471449 0.5 +-0.0890856 0.122978 0.0464209 0.526399 0.5 +-0.0723648 0.0763024 0.0368597 0.618217 0.5 +-0.0803572 0.0803552 0.0319871 0.701676 0.5 +-0.0887798 0.140493 0.0370948 0.469374 0.5 +-0.086772 0.140601 0.0407491 0.641279 0.5 +-0.0854765 0.145991 0.0364919 0.451945 0.469105 +-0.0860963 0.145967 0.0357039 0.461958 0.5 +-0.0899184 0.131005 0.0413145 0.514455 0.5 +-0.0235739 0.0944939 0.0470656 0.289555 0.5 +-0.0201887 0.0754016 0.0541402 0.601028 0.471465 +-0.0558134 0.0883826 -0.0218608 0.567534 0.5 +-0.0802965 0.0872747 0.0345612 0.758527 0.5 +-0.0839857 0.132609 0.0495198 0.546833 0.474263 +-0.0884601 0.0976543 0.0226015 0.54475 0.5 +-0.0680529 0.0874243 0.0435129 0.566162 0.5 +-0.0779467 0.170107 -0.0351609 0.284219 0.442821 +-0.0817242 0.148679 0.0369003 0.43841 0.5 +-0.083623 0.0857135 0.0294569 0.697648 0.5 +-0.0884317 0.131079 0.0440854 0.560368 0.5 +-0.0827096 0.131285 0.0511192 0.462644 0.467708 +-0.0818286 0.147374 0.0384552 0.472471 0.5 +-0.0917791 0.117463 0.0421754 0.674844 0.5 +-0.0208533 0.0866413 0.055877 0.551349 0.5 +-0.0217999 0.0866355 0.0553929 0.543431 0.5 +-0.0227215 0.0797443 0.0551012 0.565257 0.5 +-0.0827616 0.091206 0.0312465 0.765032 0.5 +-0.0851811 0.0897279 0.0280525 0.765522 0.5 +-0.037803 0.0885803 -0.0235006 0.891961 0.5 +-0.075255 0.0832856 0.0380964 0.651166 0.5 +-0.0843505 0.0842533 0.0274024 0.647719 0.5 +-0.0506733 0.162525 0.00564316 0.33037 0.5 +-0.0880436 0.0977019 0.0235765 0.562895 0.5 +-0.0875711 0.0977385 0.0245274 0.58634 0.5 +-0.0535232 0.0556038 0.0117195 0.205295 0.5 +-0.0528896 0.0556157 0.0124842 0.183534 0.5 +-0.0522878 0.055669 0.0133058 0.188372 0.5 +-0.0770086 0.090082 0.0382275 0.742914 0.5 +-0.0512969 0.0556828 0.0150377 0.187644 0.5 +-0.0515288 0.0559219 0.0167726 0 0 +-0.052022 0.0561083 0.0186673 0.103062 0.5 +-0.0519257 0.0563169 0.0201359 0.248817 0.5 +-0.0520277 0.0563658 0.0215194 0.368673 0.5 +-0.0521809 0.0564969 0.0230721 0.494326 0.5 +-0.0522524 0.0566167 0.0245415 0.54582 0.5 +-0.0522528 0.0567257 0.0259279 0.596004 0.5 +-0.0521438 0.0568294 0.0272279 0.661158 0.5 +-0.0519669 0.0569186 0.0284516 0.529445 0.466181 +-0.0516556 0.0569841 0.0295138 0.605759 0.46267 +-0.0513349 0.057067 0.0306313 0.629895 0.5 +-0.0509259 0.0571242 0.0316152 0.70216 0.44211 +-0.050471 0.0571806 0.032579 0.713968 0.5 +-0.0499657 0.0572278 0.0334797 0.745792 0.5 +-0.0493712 0.0572598 0.0342952 0.766982 0.5 +-0.0487856 0.0573034 0.0351442 0.794666 0.5 +-0.0481285 0.0573264 0.0358964 0.801508 0.5 +-0.0474866 0.0573572 0.0366835 0.797418 0.5 +-0.0467953 0.0573798 0.0374139 0.626623 0.5 +-0.0460532 0.057401 0.0380948 0.606549 0.5 +-0.0452512 0.0574076 0.0387158 0.513587 0.5 +-0.044324 0.0573856 0.0392571 0.538564 0.5 +-0.0870447 0.0977755 0.0254107 0.591308 0.5 +-0.0915894 0.118845 0.0433559 0.663284 0.5 +-0.0812562 0.103354 0.0307723 0.646795 0.421005 +-0.0852113 0.0869359 0.026743 0.702827 0.5 +-0.0278047 0.074956 0.0433932 0.745508 0.5 +-0.024687 0.0892375 0.0511394 0.715793 0.5 +-0.0229394 0.0985982 0.0448104 0.489317 0.5 +-0.090122 0.144414 0.0285066 0.555527 0.449756 +-0.0689571 0.134062 -0.00839151 0.645761 0.5 +-0.0865647 0.0978132 0.0263535 0.604102 0.5 +-0.0270215 0.0563432 0.0375362 0.794348 0.5 +-0.0263916 0.0563779 0.0383176 0.750117 0.5 +-0.0258019 0.0564099 0.0391373 0.717197 0.5 +-0.0252694 0.0564528 0.0400125 0.719465 0.5 +-0.0247271 0.0564997 0.0408849 0.760297 0.5 +-0.0241328 0.0565311 0.0416958 0.768223 0.5 +-0.0235633 0.0565791 0.042552 0.615079 0.5 +-0.0229828 0.0566251 0.0433992 0.657148 0.5 +-0.0223745 0.0566587 0.0441983 0.713722 0.5 +-0.0218427 0.0567021 0.0450804 0.61101 0.5 +-0.0213048 0.0567472 0.0459531 0.629327 0.5 +-0.0207237 0.0567772 0.0467736 0.675231 0.5 +-0.0201321 0.0568083 0.0475876 0.689706 0.5 +-0.0194917 0.0568426 0.0483686 0.676396 0.5 +-0.0188005 0.0568615 0.0490899 0.677583 0.5 +-0.0180891 0.0568831 0.0497969 0.670005 0.5 +-0.017374 0.0569064 0.0504968 0.675615 0.5 +-0.0165708 0.056922 0.0510974 0.561318 0.5 +-0.0859938 0.0978404 0.0272064 0.62728 0.429982 +-0.0853874 0.0978708 0.0280062 0.663746 0.5 +-0.0129906 0.0568055 0.0517595 0.770506 0.426742 +-0.0121151 0.0568039 0.0522997 0.761492 0.422087 +-0.0847868 0.0979024 0.0288114 0.693589 0.421892 +-0.0218601 0.0893132 0.0539604 0.542347 0.47125 +-0.0784828 0.175619 -0.0475153 0.29853 0.405019 +-0.0905785 0.121592 0.0451008 0.651513 0.5 +-0.0867319 0.116264 0.0471164 0.529218 0.471509 +-0.0769289 0.125211 -0.00745968 0.440604 0.5 +-0.0861214 0.132549 0.0473951 0.561193 0.485317 +-0.0203263 0.0825295 0.0568715 0.510377 0.5 +-0.0846517 0.135301 0.0472783 0.701363 0.5 +-0.0869182 0.148604 0.0308154 0.563017 0.419037 +-0.078467 0.147461 0.0407301 0.400942 0.476461 +-0.0841353 0.146019 0.0379782 0.39613 0.5 +-0.0834012 0.146003 0.0386574 0.487131 0.5 +-0.0826957 0.0898386 0.0312187 0.762829 0.5 +-0.093479 0.129659 0.0212406 0.819679 0.5 +-0.0769167 0.0873975 0.0382106 0.64532 0.483845 +-0.0841699 0.0979316 0.0296062 0.707873 0.5 +-0.0889602 0.131049 0.0432066 0.535668 0.5 +-0.0835274 0.0979539 0.0303801 0.713912 0.5 +-0.0727351 0.0832969 0.03983 0.663529 0.5 +-0.0775221 0.104823 0.0340694 0.575984 0.5 +-0.0828557 0.0979824 0.0311146 0.709828 0.5 +-0.0808373 0.0858965 0.0337281 0.758609 0.5 +-0.085378 0.128494 0.0496125 0.536918 0.5 +-0.026277 0.0795343 0.0501986 0.712112 0.5 +-0.085608 0.144617 0.0380805 0.482672 0.46949 +-0.0821992 0.0980013 0.0318751 0.69539 0.5 +-0.0789005 0.172846 -0.0440952 0.356752 0.459868 +-0.0918049 0.121541 0.0434848 0.611833 0.5 +-0.0825925 0.0857998 0.0312629 0.742044 0.5 +-0.0783551 0.090033 0.0367591 0.737126 0.5 +-0.0815235 0.0899003 0.0328752 0.74538 0.5 +-0.0833347 0.0898073 0.030438 0.768701 0.5 +-0.0831943 0.132626 0.0501472 0.53473 0.5 +-0.0872251 0.0950749 0.0256867 0.655502 0.440942 +-0.0843417 0.0952366 0.029868 0.752957 0.5 +-0.0823976 0.095314 0.0321564 0.75885 0.5 +-0.0787271 0.0954037 0.0355432 0.753183 0.5 +-0.0855353 0.0938173 0.0282665 0.748009 0.5 +-0.0696779 0.086056 0.0423345 0.613783 0.429099 +-0.0256024 0.0918183 0.0477571 0.43465 0.5 +-0.0740754 0.0791322 0.0370556 0.776904 0.5 +-0.0801896 0.0926573 0.034266 0.761633 0.5 +-0.0788782 0.172865 -0.0427748 0.447818 0.5 +-0.0815066 0.0980245 0.032594 0.697179 0.5 +-0.0550494 0.0577849 0.0202145 0.0988005 0.5 +-0.0542607 0.057796 0.0208407 0.214291 0.5 +-0.0535372 0.0578641 0.0215172 0.181085 0.340167 +-0.0527991 0.0578707 0.0222512 0.309869 0.5 +-0.0526679 0.0579784 0.0235498 0.346776 0.5 +-0.0526119 0.0580506 0.0248562 0.402702 0.5 +-0.0525203 0.0581461 0.0261597 0.482304 0.5 +-0.0523515 0.0582314 0.0273813 0.472132 0.5 +-0.0521074 0.0583062 0.0285239 0.463183 0.5 +-0.0517937 0.0583908 0.0296448 0.496832 0.5 +-0.0513866 0.0584422 0.0306256 0.513045 0.5 +-0.0509402 0.0584984 0.0315938 0.646748 0.438258 +-0.050486 0.0585567 0.0325562 0.655701 0.5 +-0.0499829 0.0586014 0.0334591 0.686672 0.5 +-0.0494324 0.0586474 0.0343285 0.740694 0.5 +-0.0488192 0.0586801 0.0351334 0.783831 0.5 +-0.0481968 0.058714 0.0359259 0.638171 0.5 +-0.0475224 0.0587349 0.0366732 0.648056 0.5 +-0.0468723 0.0587675 0.0374438 0.643096 0.5 +-0.0461509 0.05879 0.0381434 0.626526 0.5 +-0.0453044 0.0587827 0.038737 0.511244 0.5 +-0.0444225 0.0587761 0.0392912 0.537554 0.467495 +-0.0807821 0.0980376 0.0332837 0.707916 0.414225 +-0.083014 0.0816043 0.0289568 0.681454 0.5 +-0.0536029 0.162357 0.00297376 0.31879 0.5 +-0.0823499 0.132665 0.0507367 0.434302 0.5 +-0.073889 0.119392 -0.00790358 0.568703 0.5 +-0.0832566 0.147367 0.0370632 0.460661 0.5 +-0.0870878 0.147265 0.0324302 0.601407 0.5 +-0.0888345 0.136443 0.0400961 0.522808 0.5 +-0.0753611 0.0724331 0.0302407 0.646336 0.5 +-0.0800787 0.0980611 0.0339873 0.691155 0.5 +-0.0271594 0.0577744 0.0376032 0.867457 0.5 +-0.0264004 0.0577755 0.0382862 0.801298 0.5 +-0.0258758 0.0578187 0.0391737 0.765401 0.5 +-0.0252734 0.05785 0.0399799 0.558281 0.5 +-0.0247501 0.0578943 0.0408638 0.766568 0.5 +-0.0241838 0.0579409 0.0417219 0.574654 0.5 +-0.023566 0.0579721 0.0425175 0.512141 0.5 +-0.0230106 0.0580182 0.0433839 0.540914 0.5 +-0.0224495 0.0580629 0.0442448 0.556089 0.5 +-0.0219078 0.0581082 0.0451165 0.610774 0.5 +-0.0213288 0.0581411 0.0459349 0.661948 0.5 +-0.0207807 0.0581858 0.0468036 0.685204 0.5 +-0.0202474 0.0582316 0.0476806 0.70832 0.5 +-0.0196496 0.0582641 0.0484904 0.695129 0.5 +-0.0190471 0.0582949 0.0492947 0.686693 0.5 +-0.018422 0.0583296 0.0500808 0.690006 0.5 +-0.0176504 0.0583335 0.0507279 0.589037 0.5 +-0.0793348 0.0980896 0.0346601 0.698709 0.5 +-0.0785905 0.0980977 0.0353146 0.580006 0.417494 +-0.0778197 0.0981202 0.035968 0.588365 0.5 +-0.0134137 0.0581871 0.0521911 0.758012 0.427915 +-0.0126763 0.05824 0.052838 0.633891 0.430708 +-0.0117789 0.0582633 0.0533407 0.654143 0.5 +-0.0770206 0.0981288 0.0365817 0.579324 0.476564 +-0.0762222 0.0981393 0.0371985 0.530476 0.5 +-0.0784369 0.170061 -0.0360578 0.28133 0.5 +-0.0882956 0.116235 0.0458325 0.659946 0.5 +-0.0812513 0.108802 0.0293202 0.471742 0.5 +-0.086716 0.132512 0.0465811 0.714387 0.5 +-0.0839725 0.0897798 0.0296574 0.767456 0.5 +-0.0746849 0.14995 -0.0294029 0.226545 0.463226 +-0.0826845 0.0884898 0.0312484 0.756725 0.5 +-0.0754309 0.0981509 0.0378194 0.503603 0.476013 +-0.0245078 0.0767611 0.0513331 0.754543 0.5 +-0.0869041 0.141929 0.0394374 0.60064 0.5 +-0.0720231 0.149543 -0.0391183 0.155863 0.0715468 +-0.0746646 0.0981736 0.0384691 0.491277 0.483122 +-0.0799271 0.140795 0.0466609 0.396964 0.5 +-0.0739256 0.098177 0.0391323 0.467606 0.477362 +-0.073083 0.0981963 0.0397086 0.462723 0.5 +-0.072166 0.0982206 0.0402281 0.474156 0.477381 +-0.0788582 0.171448 -0.0399026 0.363751 0.5 +-0.078132 0.172939 -0.0407193 0.245593 0.5 +-0.0205797 0.0906821 0.0540574 0.548761 0.419537 +-0.0608162 0.0881975 -0.019441 0.468808 0.5 +-0.0802909 0.104732 0.0311813 0.59899 0.5 +-0.0709488 0.0833216 0.0408543 0.666184 0.433767 +-0.0777311 0.0887218 0.0375819 0.625099 0.5 +-0.0762231 0.16043 -0.0125715 0.341472 0.5 +-0.0164738 0.10119 0.0439603 0.653853 0.5 +-0.0861948 0.1005 0.0258994 0.56541 0.5 +-0.0753955 0.0901087 0.0394375 0.586103 0.5 +-0.0828121 0.0830332 0.030132 0.702986 0.5 +-0.0755506 0.0791122 0.0357048 0.763952 0.5 +-0.0618089 0.0881716 -0.0191682 0.572033 0.5 +0.00911841 0.110151 -0.0195223 0.851956 0.5 +-0.0311414 0.168206 -0.0166543 0.484785 0.5 +-0.0681193 0.15804 -0.05439 0.297862 0.399879 +-0.0661323 0.162373 -0.0581655 0.432601 0.358762 +-0.0228778 0.10587 -0.0225138 0.696186 0.5 +-0.0441607 0.162142 -0.00945516 0.403201 0.39234 +-0.0248813 0.105869 -0.0225199 0.660863 0.5 +-0.0338474 0.0972112 -0.023083 0.867256 0.5 +-0.0690618 0.110676 0.0409548 0.540207 0.5 +-0.0534556 0.0353304 0.0456783 0.715811 0.5 +-0.0171444 0.168289 -0.0207283 0.726197 0.5 +-0.0582662 0.0597287 0.0219286 0.231341 0.5 +-0.0572939 0.0597447 0.0223608 0.195745 0.5 +-0.0559881 0.0594067 0.0225062 0 0 +-0.055281 0.0594285 0.0232183 0.104739 0.5 +-0.0544894 0.0594391 0.0238452 0.224479 0.5 +-0.0537039 0.0594504 0.0244709 0.275135 0.5 +-0.053144 0.0595659 0.0253997 0.245958 0.5 +-0.052965 0.0595916 0.0265588 0.311615 0.5 +-0.0526285 0.0596472 0.0276152 0.397883 0.5 +-0.0523454 0.059725 0.0287459 0.360377 0.5 +-0.0519381 0.0597689 0.0297286 0.380841 0.438479 +-0.0515122 0.0598238 0.030703 0.454806 0.5 +-0.0510675 0.0598803 0.0316706 0.520363 0.5 +-0.050588 0.0599426 0.0326193 0.598485 0.5 +-0.0500753 0.0599861 0.0335137 0.631515 0.5 +-0.0494761 0.0600183 0.034326 0.56148 0.5 +-0.0488628 0.0600536 0.0351294 0.588837 0.5 +-0.0482359 0.0600875 0.0359237 0.617596 0.5 +-0.0475947 0.0601221 0.0367025 0.639064 0.5 +-0.0469178 0.060141 0.0374462 0.666026 0.5 +-0.0461946 0.0601644 0.0381445 0.665484 0.5 +-0.0453678 0.060156 0.0387657 0.54397 0.5 +-0.044527 0.0601701 0.0393419 0.561475 0.470205 +-0.0436469 0.0601588 0.0398932 0.554058 0.463499 +-0.0713282 0.0982044 0.0407618 0.482207 0.47081 +-0.0896679 0.144435 0.0294634 0.536904 0.5 +-0.0900837 0.117534 0.0447346 0.709863 0.5 +-0.0243811 0.0738035 0.0484997 0.743902 0.5 +-0.0825371 0.14737 0.037761 0.470573 0.416754 +-0.0729927 0.08468 0.0400334 0.675532 0.5 +-0.090033 0.147105 0.0269347 0.643817 0.437792 +-0.0884181 0.136485 0.0410708 0.532455 0.5 +-0.0774025 0.100791 0.0354679 0.697605 0.42485 +-0.024804 0.0737635 0.0475256 0.696564 0.5 +-0.0265403 0.0592021 0.0383808 0.587642 0.5 +-0.0259535 0.0592275 0.0392168 0.596823 0.5 +-0.025376 0.059259 0.0400414 0.605343 0.5 +-0.0248162 0.0593033 0.0409035 0.607795 0.5 +-0.0242184 0.0593353 0.0417104 0.609138 0.5 +-0.0236236 0.0593674 0.0425181 0.615887 0.5 +-0.0230608 0.0594124 0.0433799 0.54239 0.5 +-0.0225179 0.0594554 0.0442529 0.560086 0.5 +-0.0219738 0.059501 0.0451263 0.603994 0.5 +-0.0214151 0.0595466 0.0459898 0.660429 0.5 +-0.0208141 0.0595795 0.0467936 0.703156 0.5 +-0.0202578 0.0596247 0.0476545 0.72689 0.5 +-0.0197076 0.059653 0.0484949 0.734354 0.5 +-0.0191672 0.0596981 0.049368 0.720921 0.5 +-0.0185705 0.0597254 0.0501838 0.70539 0.5 +-0.017912 0.059765 0.0509406 0.704473 0.5 +-0.0810292 0.0940061 0.0336494 0.769 0.5 +-0.0770465 0.161776 -0.0174081 0.62231 0.5 +-0.025733 0.0751362 0.0469781 0.655756 0.5 +-0.0140108 0.0596764 0.0527295 0.614124 0.415331 +-0.0132756 0.0597275 0.0533794 0.628579 0.439481 +-0.0771598 0.160359 -0.0157997 0.508897 0.5 +-0.0278572 0.0972984 -0.0239915 0.572357 0.484126 +-0.0855508 0.0883229 0.0270467 0.727706 0.5 +-0.0917483 0.122888 0.0433845 0.566068 0.5 +-0.0830361 0.0952877 0.0313817 0.748847 0.5 +-0.0890068 0.11621 0.0451247 0.653766 0.5 +-0.0447239 0.169659 -0.000473292 0.364609 0.5 +-0.0777124 0.0900603 0.0375253 0.743453 0.5 +-0.0687671 0.0900946 0.0427048 0.526821 0.446122 +-0.0689033 0.0887623 0.0428815 0.542332 0.423156 +-0.0328429 0.0972178 -0.0231932 0.877587 0.5 +-0.0728066 0.087878 -0.0157134 0.423115 0.432185 +-0.0874564 0.141909 0.0385732 0.596349 0.5 +-0.0770308 0.167319 -0.027484 0.35647 0.451457 +-0.0461657 0.168264 0.000998904 0.305756 0.5 +-0.0822803 0.139383 0.0462108 0.399599 0.5 +-0.080721 0.0845507 0.0336553 0.764743 0.5 +-0.0879683 0.133795 0.0435491 0.541344 0.5 +-0.0857293 0.121702 0.0488414 0.581003 0.396732 +-0.0784376 0.171472 -0.0389273 0.305638 0.5 +-0.0714338 0.100882 0.0394174 0.554427 0.427489 +-0.0775178 0.172972 -0.0399134 0.235435 0.412203 +-0.0876142 0.116272 0.0465171 0.535547 0.5 +-0.0815894 0.0926183 0.0328436 0.770644 0.5 +-0.0774559 0.158948 -0.0154272 0.57693 0.5 +-0.0218769 0.105849 -0.0224625 0.725593 0.5 +-0.0856352 0.151298 0.0280417 0.28762 0.5 +-0.0796666 0.0886389 0.0352895 0.746577 0.5 +-0.0763386 0.161799 -0.0152953 0.390912 0.5 +-0.0755712 0.102178 0.0364401 0.536049 0.439031 +-0.0829735 0.127181 0.0515051 0.551152 0.460882 +-0.0132685 0.101107 0.0437078 0.441949 0.5 +-0.0838411 0.0884243 0.0295799 0.753576 0.5 +-0.0215329 0.0768164 0.0540336 0.586923 0.5 +-0.052073 0.150157 -0.00315276 0.533104 0.5 +-0.0759274 0.108411 0.0376421 0.983562 0.5 +-0.075716 0.071204 0.0277224 0.607658 0.47867 +-0.0819225 0.125087 -0.0048212 0.491185 0.5 +-0.0658988 0.116581 -0.00961273 0.56955 0.5 +-0.0268555 0.0987274 -0.0239779 0.57512 0.480283 +-0.0748436 0.114924 -0.0060803 0.454116 0.5 +-0.0238738 0.105835 -0.0226784 0.672679 0.5 +-0.0298441 0.0972531 -0.0235715 0.830462 0.5 +-0.0669546 0.128237 -0.00895731 0.821565 0.5 +-0.0639758 0.128226 -0.00858393 0.642138 0.5 +-0.0470567 0.069722 0.0403886 0.584254 0.5 +-0.0371896 0.166685 -0.0135589 0.472964 0.5 +-0.07397 0.135486 -0.00709777 0.489504 0.435802 +-0.0530656 0.150158 -0.00286677 0.523242 0.5 +-0.0764634 0.157616 -0.00941011 0.717676 0.5 +-0.0568378 0.0613597 0.0260949 0.453526 0.5 +-0.0555168 0.0610654 0.0262173 0 0 +-0.0548951 0.0610993 0.0270145 0.113106 0.5 +-0.0539202 0.0610131 0.0274265 0.180044 0.5 +-0.053287 0.0610602 0.0282137 0.205745 0.5 +-0.0527176 0.0611373 0.029069 0.251702 0.5 +-0.0522199 0.061167 0.0299696 0.333629 0.5 +-0.0517688 0.0612265 0.030932 0.370126 0.5 +-0.0512549 0.0612644 0.0318233 0.486807 0.5 +-0.0507783 0.0613366 0.0327704 0.470477 0.5 +-0.0501963 0.061364 0.033592 0.514749 0.5 +-0.0495652 0.0614019 0.0343808 0.579435 0.5 +-0.0489426 0.0614374 0.0351759 0.60094 0.5 +-0.0483119 0.0614742 0.035964 0.608859 0.5 +-0.047648 0.0614917 0.0367154 0.626735 0.5 +-0.0469959 0.06153 0.0374819 0.674519 0.5 +-0.0462425 0.0615364 0.0381535 0.695455 0.5 +-0.0455023 0.0615609 0.0388319 0.573371 0.5 +-0.0446553 0.0615526 0.0394256 0.584389 0.476409 +-0.0438223 0.0615675 0.0400039 0.589696 0.5 +-0.0842132 0.092522 0.0298256 0.76696 0.5 +-0.0784933 0.0832425 0.0356821 0.782064 0.5 +-0.0712173 0.0846981 0.0410753 0.663667 0.442521 +-0.0238911 0.0738255 0.0493988 0.74606 0.5 +-0.0840365 0.147342 0.0364323 0.437272 0.5 +-0.0738666 0.0846755 0.0394915 0.668795 0.5 +-0.0869577 0.133848 0.0453706 0.702767 0.5 +-0.0905041 0.147099 0.0259896 0.500496 0.5 +-0.0856022 0.136615 0.0453504 0.718839 0.5 +-0.0858754 0.148602 0.0326009 0.439187 0.5 +-0.0708787 0.0634588 0.0196178 0.40819 0.5 +-0.0260772 0.0606359 0.0392914 0.637239 0.5 +-0.0255028 0.0606627 0.0401195 0.640593 0.5 +-0.0249365 0.0607087 0.0409751 0.66459 0.5 +-0.0243177 0.0607418 0.04177 0.653083 0.5 +-0.0236961 0.0607746 0.0425604 0.654777 0.5 +-0.0231291 0.0608213 0.0434196 0.573364 0.5 +-0.0225608 0.0608496 0.0442445 0.593948 0.5 +-0.0220309 0.0609111 0.0451603 0.628904 0.5 +-0.0214752 0.0609386 0.0459919 0.69017 0.5 +-0.020881 0.0609703 0.0467992 0.732043 0.5 +-0.0203373 0.0610131 0.0476733 0.740293 0.5 +-0.019839 0.0610753 0.0486026 0.755762 0.5 +-0.0192798 0.0610993 0.0494354 0.751082 0.5 +-0.0187164 0.0611476 0.0502898 0.725133 0.5 +-0.0180735 0.0611876 0.0510587 0.719386 0.5 +-0.0173263 0.0611887 0.051725 0.593169 0.5 +-0.0165465 0.061194 0.0523676 0.613024 0.477977 +-0.0251342 0.0878826 0.0516343 0.589624 0.302391 +-0.0145535 0.06115 0.0532234 0.6347 0.5 +-0.0137359 0.061178 0.0537969 0.651487 0.449491 +-0.081903 0.123614 -0.00465545 0.516146 0.5 +-0.0762767 0.179149 -0.050884 0.181555 0.5 +-0.0776802 0.121779 0.0520726 0.579806 0.468259 +-0.0852651 0.14863 0.0333956 0.426516 0.5 +-0.0559977 0.128155 -0.00607843 0.575774 0.5 +-0.0810169 0.0953587 0.0335948 0.752268 0.5 +-0.0896904 0.116203 0.0443945 0.607698 0.5 +-0.0902791 0.116199 0.0435835 0.614632 0.4523 +-0.0768027 0.1218 0.0526081 0.561115 0.5 +-0.0866007 0.129822 0.0479412 0.62974 0.5 +-0.0721201 0.149786 -0.0402916 0.186988 0.5 +-0.0848397 0.124371 0.0492354 0.582239 0.5 +-0.0777504 0.161717 -0.020949 0.480437 0.472834 +-0.0831522 0.148677 0.0355101 0.408945 0.5 +-0.0454458 0.168254 0.00168996 0.356446 0.5 +-0.0791947 0.168601 -0.0366432 0.5547 0.5 +-0.01212 0.102458 0.0438351 0.393869 0.5 +-0.0839703 0.0843113 0.0284366 0.668018 0.464633 +-0.0229076 0.0852723 0.0551257 0.494354 0.5 +-0.0779935 0.171503 -0.0379488 0.251832 0.372952 +-0.0821459 0.0912329 0.0320422 0.762014 0.5 +-0.0807952 0.106052 0.0302403 0.520706 0.5 +-0.0741351 0.0860483 0.039718 0.657035 0.5 +-0.0753549 0.104884 0.0361423 0.491724 0.5 +-0.0788495 0.1177 0.0505094 0.68501 0.5 +-0.0850979 0.131233 0.0492505 0.595171 0.5 +-0.0234218 0.0738847 0.0503501 0.752884 0.5 +-0.0862929 0.15121 0.027304 0.275857 0.392623 +-0.0519207 0.0493094 0.0353906 0.141102 0.5 +-0.0242921 0.0918773 0.0492675 0.580011 0.5 +-0.088169 0.124336 0.0468831 0.503483 0.5 +-0.0889533 0.124321 0.0462453 0.502491 0.5 +-0.0670338 0.0819342 0.0426575 0.650174 0.5 +-0.0789903 0.0900056 0.0359819 0.737335 0.5 +-0.0796191 0.0899783 0.0351979 0.740994 0.5 +-0.0410907 0.157679 -0.0102957 0.72351 0.5 +-0.0748916 0.10354 -0.0108565 0.577126 0.5 +-0.0809901 0.135346 -0.00326263 0.637209 0.5 +-0.0391759 0.16667 -0.0123913 0.370678 0.460091 +-0.0301691 0.174141 -0.0165339 0.470761 0.5 +-0.0699695 0.135529 -0.00821968 0.549147 0.5 +-0.0551021 0.154591 -0.0020359 0.350257 0.5 +-0.0620444 0.166711 -0.0606187 0.348769 0.361141 +-0.0777759 0.113375 -0.00398806 0.40766 0.5 +-0.0669412 0.126769 -0.00883964 0.822427 0.5 +-0.0669198 0.113752 -0.0107887 0.579594 0.5 +0.00412571 0.107297 -0.0203039 0.775494 0.5 +-0.0261553 0.169713 -0.0187023 0.510105 0.465258 +-0.0391566 0.162183 -0.0124024 0.470823 0.5 +-0.0599112 0.109712 -0.0163845 0.45659 0.5 +-0.0420303 0.153306 -0.00761985 0.73379 0.5 +-0.0568311 0.0912579 -0.0217399 0.433194 0.5 +0.00411674 0.108725 -0.0201726 0.815632 0.5 +-0.0820259 0.0858257 0.0320864 0.757358 0.5 +-0.0729125 0.0928513 0.0411123 0.540613 0.433408 +-0.0859998 0.135257 0.0457789 0.715259 0.5 +-0.0796195 0.104749 0.0319273 0.59642 0.5 +-0.0530625 0.0625594 0.0307632 0.285082 0.5 +-0.0229052 0.0945537 0.0478017 0.303875 0.5 +-0.0517008 0.0626767 0.0322349 0.391433 0.5 +-0.051142 0.0627417 0.0330975 0.436639 0.5 +-0.0223183 0.094515 0.0486399 0.313239 0.5 +-0.0497731 0.0627792 0.0345527 0.589509 0.5 +-0.04909 0.0628007 0.0352845 0.599595 0.5 +-0.0484435 0.0628471 0.0360579 0.606246 0.5 +-0.0477964 0.062891 0.036824 0.62544 0.5 +-0.0470606 0.0628926 0.0375096 0.67211 0.5 +-0.0463407 0.0629206 0.0382092 0.70065 0.5 +-0.0456018 0.0629458 0.0388902 0.590106 0.5 +-0.0448136 0.0629573 0.0395248 0.5931 0.5 +-0.0440063 0.0629698 0.0401358 0.596306 0.471266 +-0.0901468 0.129651 0.0415795 0.630335 0.5 +-0.0847456 0.0911272 0.0289858 0.770858 0.5 +-0.0777723 0.0832737 0.0363717 0.783235 0.5 +-0.0801269 0.10608 0.0309775 0.504911 0.5 +-0.0215234 0.0739469 0.0526909 0.746254 0.5 +-0.0847959 0.147297 0.0357863 0.443262 0.5 +-0.0271626 0.0836755 0.0495254 0.625463 0.5 +-0.0887171 0.117597 0.0462102 0.687277 0.5 +-0.0909512 0.147073 0.025026 0.625842 0.463711 +-0.0875501 0.120326 0.0478169 0.581296 0.479674 +-0.0524215 0.162453 0.00456363 0.362044 0.5 +-0.0261647 0.0620468 0.0393395 0.671274 0.5 +-0.0255828 0.0620727 0.0401653 0.677056 0.5 +-0.0250326 0.0621165 0.0410328 0.703698 0.5 +-0.024429 0.062147 0.0418364 0.709715 0.5 +-0.023785 0.0621839 0.0426152 0.693899 0.5 +-0.0231795 0.0622145 0.0434152 0.606456 0.5 +-0.0226371 0.0622591 0.0442913 0.63729 0.5 +-0.0220963 0.0623062 0.0451655 0.660871 0.5 +-0.0215688 0.0623472 0.0460467 0.71881 0.5 +-0.0210322 0.0623911 0.0469253 0.754099 0.5 +-0.0204932 0.0624346 0.0477982 0.754401 0.5 +-0.0199623 0.0624791 0.0486773 0.762606 0.5 +-0.0194395 0.062521 0.0495605 0.779166 0.5 +-0.018805 0.0625267 0.0503254 0.741575 0.5 +-0.0181382 0.0625693 0.0510808 0.729064 0.5 +-0.0174331 0.0625913 0.0517909 0.712277 0.5 +-0.0166845 0.0625881 0.0524778 0.581972 0.5 +-0.0274333 0.0808284 0.0484505 0.629908 0.5 +-0.0308479 0.0972408 -0.0233409 0.854121 0.5 +-0.0139477 0.0625843 0.0539847 0.597978 0.452533 +-0.0131121 0.0626059 0.0545133 0.607106 0.5 +-0.062954 0.125297 -0.00870732 0.836152 0.5 +-0.077844 0.114867 -0.00473455 0.511484 0.5 +-0.064868 0.0953298 -0.0181139 0.50042 0.5 +-0.0855039 0.140637 0.0423198 0.672365 0.5 +-0.0628956 0.119461 -0.00917238 0.641049 0.5 +-0.0699509 0.134055 -0.00826728 0.593641 0.5 +-0.0871672 0.127065 0.0471934 0.707457 0.5 +-0.0878532 0.127045 0.0464651 0.657292 0.5 +-0.0674046 0.0833115 0.0429955 0.628324 0.5 +-0.087451 0.133828 0.0444349 0.536034 0.475981 +-0.0892904 0.149814 0.024685 0.37401 0.5 +-0.0757603 0.10082 0.036651 0.526404 0.5 +-0.0811312 0.129963 0.0524484 0.492966 0.460853 +-0.0808546 0.140749 0.0461596 0.392298 0.450442 +-0.0789386 0.168616 -0.0354931 0.479871 0.5 +-0.0851123 0.133936 0.0477712 0.566009 0.479398 +-0.0856608 0.0854539 0.0244177 0.661501 0.5 +-0.0835133 0.0843594 0.0293933 0.691873 0.5 +-0.0801977 0.117632 0.0490824 0.867122 0.5 +-0.0865386 0.147279 0.0332936 0.601734 0.5 +-0.079194 0.0832222 0.0349745 0.776553 0.5 +-0.0835152 0.150011 0.0330149 0.351544 0.5 +-0.0561449 0.04824 0.0383427 0.0692425 0.276884 +-0.025472 0.0851651 0.0520429 0.631608 0.5 +-0.0771897 0.117737 0.0516815 0.596688 0.5 +-0.0800217 0.102057 0.0324029 0.680473 0.5 +-0.0176724 0.0933571 0.0538975 0.385228 0.44816 +-0.0863817 0.148632 0.0316852 0.543244 0.5 +-0.0203175 0.0933679 0.052311 0.350087 0.461326 +-0.025973 0.0851197 0.051146 0.643649 0.5 +-0.0824678 0.0844329 0.0311552 0.722929 0.5 +-0.0866951 0.0951098 0.0265657 0.690185 0.5 +-0.0670193 0.0901061 0.04379 0.614987 0.5 +-0.0762411 0.0901005 0.0388673 0.595779 0.5 +-0.029331 0.0791866 0.0433726 0.722791 0.5 +-0.074878 0.122304 -0.00772392 0.624454 0.5 +-0.0648948 0.103911 -0.0165942 0.561277 0.5 +-0.0758417 0.114903 -0.00554375 0.383724 0.476224 +-0.0548931 0.111218 -0.0174922 0.64258 0.5 +0.00111992 0.10872 -0.0203906 0.837375 0.5 +-0.0431375 0.160652 -0.0100842 0.414219 0.437953 +-0.0132616 0.175663 -0.0275653 0.420882 0.5 +0.00912605 0.108716 -0.0196568 0.826448 0.5 +-0.0887986 0.114294 0.0264066 0.625757 0.5 +-0.0590133 0.128179 -0.00718347 0.649368 0.479987 +-0.0152717 0.181584 -0.0271612 0.315961 0.5 +-0.0531156 0.156084 -0.00339606 0.34209 0.5 +-0.0340813 0.159269 -0.0127772 0.836975 0.5 +0.00612185 0.108732 -0.0201634 0.830438 0.5 +-0.0251728 0.1712 -0.0194857 0.51739 0.5 +-0.0280973 0.16079 -0.0140776 0.84044 0.5 +0.005123 0.108732 -0.0201833 0.811063 0.5 +-0.0558353 0.0912839 -0.0220329 0.488797 0.5 +-0.0619045 0.104018 -0.0180451 0.464402 0.471554 +0.012125 0.10869 -0.0190017 0.586534 0.5 +-0.0579061 0.0357757 0.046064 0.37319 0.5 +-0.0240568 0.0972281 0.0446316 0.603094 0.5 +-0.0229243 0.0972075 0.044901 0.547966 0.5 +-0.0769685 0.156212 -0.0102521 0.888678 0.5 +-0.0216559 0.0972103 0.0449705 0.387927 0.396865 +-0.0205007 0.0971766 0.0453281 0.395243 0.5 +-0.0197571 0.0971344 0.046022 0.348038 0.429748 +-0.0192952 0.097132 0.0469462 0.322879 0.5 +-0.0217169 0.0945664 0.0494448 0.341827 0.5 +-0.0210328 0.0946153 0.0501685 0.321702 0.5 +-0.0487066 0.064243 0.0362896 0.782972 0.5 +-0.048008 0.0642705 0.0370013 0.662803 0.5 +-0.0472272 0.0642822 0.0376403 0.565687 0.5 +-0.0465015 0.0643139 0.0383309 0.579901 0.482101 +-0.0457208 0.0643263 0.038969 0.588819 0.5 +-0.0449304 0.0643377 0.0396087 0.593842 0.5 +-0.0441151 0.0643553 0.040206 0.604904 0.460384 +-0.0186701 0.0971551 0.0477534 0.327058 0.452304 +-0.0818113 0.136716 0.048659 0.490057 0.5 +-0.0838696 0.117633 -0.00194246 0.527972 0.5 +-0.0567459 0.15948 0.00480369 0.269238 0.413854 +-0.0222463 0.0739152 0.0519932 0.751317 0.5 +-0.0854254 0.147285 0.0350057 0.452773 0.466841 +-0.0795395 0.117686 0.0497856 0.661611 0.5 +-0.0773558 0.163115 -0.0213545 0.412397 0.472317 +-0.0759006 0.161818 -0.014334 0.357976 0.5 +-0.0764965 0.154899 -0.0050946 0.728561 0.5 +-0.0178949 0.0971863 0.0483787 0.347836 0.5 +-0.0262958 0.0634474 0.0394208 0.712934 0.5 +-0.0257112 0.0634738 0.0402437 0.718084 0.5 +-0.0251523 0.0635221 0.0411049 0.734805 0.5 +-0.024583 0.0635737 0.0419612 0.767315 0.5 +-0.0239734 0.0636045 0.0427616 0.59639 0.5 +-0.0234279 0.0636514 0.0436342 0.64366 0.5 +-0.0228589 0.0637031 0.0444908 0.675496 0.5 +-0.0223256 0.0637459 0.0453694 0.704169 0.5 +-0.0218007 0.0637891 0.0462553 0.733198 0.5 +-0.0212883 0.0638258 0.0471454 0.752684 0.5 +-0.0207862 0.0638606 0.0480406 0.759172 0.5 +-0.0202282 0.0639107 0.048901 0.770799 0.5 +-0.0196553 0.063928 0.0497256 0.785956 0.5 +-0.0190611 0.063953 0.0505398 0.744968 0.5 +-0.0183564 0.0639745 0.0512546 0.600683 0.5 +-0.0176233 0.0640054 0.0519373 0.59678 0.476799 +-0.016863 0.0640072 0.0526042 0.590888 0.5 +-0.0171786 0.0971676 0.04907 0.300989 0.439276 +-0.0820851 0.106006 0.028693 0.490965 0.5 +-0.0197736 0.0998405 0.0442778 0.415398 0.5 +-0.0130415 0.0639857 0.0543784 0.570374 0.5 +-0.017789 0.0998203 0.0439009 0.450268 0.5 +-0.075404 0.0914629 0.0394057 0.566418 0.5 +-0.0884421 0.133772 0.0426038 0.533312 0.5 +-0.0897054 0.124293 0.0455762 0.589875 0.5 +-0.0551177 0.156069 -0.00176933 0.41523 0.5 +-0.0231479 0.0919482 0.0509374 0.58679 0.5 +-0.0741436 0.100877 0.037779 0.481218 0.46336 +-0.0885624 0.127032 0.0457658 0.621127 0.467029 +-0.077344 0.119067 0.051823 0.586499 0.477994 +-0.0905232 0.122929 0.0450175 0.620868 0.5 +-0.0780694 0.106243 0.0333548 0.498639 0.5 +-0.0705399 0.100871 0.0399167 0.57143 0.45724 +-0.084428 0.138004 0.0455627 0.525257 0.5 +-0.0833338 0.121705 0.0492392 0.709978 0.385298 +-0.0816426 0.140732 0.045535 0.387092 0.465711 +-0.0821005 0.0885236 0.0320901 0.753421 0.5 +-0.087216 0.0937177 0.0257149 0.694878 0.5 +-0.0776345 0.165887 -0.0268309 0.393723 0.45076 +-0.0165401 0.0997826 0.0440769 0.492697 0.5 +-0.0485608 0.164 0.00493162 0.366549 0.5 +-0.0890267 0.148493 0.027289 0.597941 0.5 +-0.0830867 0.0803012 0.027553 0.640376 0.5 +-0.0835093 0.13127 0.0505027 0.550449 0.5 +-0.0668526 0.0914559 0.0435065 0.501608 0.463847 +-0.0264927 0.0850795 0.0502634 0.641907 0.5 +-0.0761087 0.083292 0.0375324 0.64935 0.5 +-0.0252475 0.0736694 0.0465167 0.664061 0.5 +-0.0812551 0.10738 0.02923 0.413721 0.5 +-0.0887381 0.139163 0.03848 0.499002 0.5 +-0.0718916 0.0995338 0.0398851 0.462223 0.5 +-0.0186351 0.0933648 0.0534492 0.354401 0.5 +-0.0195177 0.0933631 0.0529187 0.34869 0.46697 +-0.053047 0.162457 0.00378602 0.309667 0.5 +-0.0258496 0.0864897 0.0509722 0.622424 0.5 +-0.0253123 0.0865272 0.0518462 0.617683 0.5 +-0.0735922 0.0833012 0.0392631 0.662615 0.5 +-0.0763221 0.159003 -0.0110053 0.516457 0.469372 +-0.0561893 0.159558 0.00559608 0.291073 0.5 +-0.0608279 0.0910686 -0.0191968 0.74946 0.5 +-0.0649074 0.120907 -0.00883756 0.759512 0.5 +-0.0460801 0.153165 -0.0063697 0.703482 0.5 +-0.0729406 0.0676849 0.0243239 0.680081 0.35486 +0.00714876 0.108764 -0.0200496 0.659326 0.473524 +0.00812607 0.108726 -0.0199063 0.653435 0.5 +-0.0679008 0.1038 -0.0147014 0.622839 0.5 +0.0101223 0.108705 -0.0195083 0.787301 0.5 +-0.067283 0.17966 -0.0595334 0.261596 0.5 +-0.0698932 0.103728 -0.0136756 0.488855 0.475557 +-0.0610115 0.132585 -0.00747053 0.839998 0.5 +-0.0776442 0.112189 0.0467134 0.524903 0.5 +-0.0729374 0.129655 -0.00843737 0.405778 0.5 +-0.047823 0.0912927 -0.0217091 0.787125 0.5 +-0.0488158 0.0912881 -0.0217052 0.794002 0.5 +-0.0538207 0.0913026 -0.0221948 0.739968 0.5 +-0.0528115 0.0913061 -0.0221889 0.794986 0.5 +-0.0548296 0.0912974 -0.0221769 0.676503 0.5 +-0.073291 0.0682485 0.025526 0.68681 0.371838 +0.0131167 0.108671 -0.0187213 0.575304 0.5 +-0.0648315 0.0895741 -0.0187043 0.515542 0.5 +-0.0883414 0.120307 0.04718 0.583188 0.5 +-0.0598098 0.08825 -0.0201729 0.580684 0.5 +-0.0817245 0.100671 0.0313188 0.683372 0.5 +-0.0728742 0.149812 -0.0379734 0.178905 0.45481 +-0.0629203 0.122369 -0.00879811 0.755524 0.5 +-0.0821974 0.128571 0.0521036 0.508957 0.456524 +-0.0890869 0.135136 0.0402764 0.521248 0.470913 +-0.0837407 0.129905 0.0507752 0.48588 0.5 +-0.0853379 0.139291 0.0436042 0.53257 0.5 +-0.0203318 0.0946383 0.0508766 0.329261 0.5 +-0.0484493 0.0656843 0.0374132 0.847047 0.5 +-0.0475728 0.0656919 0.0379498 0.55875 0.5 +-0.0467618 0.0657183 0.0385512 0.566808 0.482187 +-0.0459114 0.0657109 0.0391289 0.572769 0.476925 +-0.045045 0.0657131 0.0396946 0.581091 0.5 +-0.0441667 0.0657175 0.0402548 0.602469 0.5 +-0.0458377 0.0970756 -0.021885 0.829382 0.5 +-0.0859779 0.129848 0.0487451 0.634529 0.5 +-0.0258745 0.104437 -0.023108 0.672789 0.5 +-0.0892353 0.14446 0.0304266 0.514101 0.440509 +-0.087924 0.1365 0.0420055 0.529716 0.473095 +-0.0875622 0.147255 0.0314849 0.61153 0.5 +-0.0745333 0.0805197 0.0374668 0.777308 0.5 +-0.0771042 0.163136 -0.0202013 0.638738 0.5 +-0.0782836 0.0860139 0.0367982 0.646921 0.5 +-0.0195579 0.0946763 0.0515134 0.282016 0.5 +-0.0838556 0.139345 0.0449552 0.413355 0.478263 +-0.0264494 0.0648769 0.0395324 0.699669 0.5 +-0.0259181 0.0649186 0.0404266 0.754998 0.5 +-0.0254003 0.0649585 0.0413183 0.747519 0.5 +-0.0248108 0.064983 0.0421327 0.756249 0.5 +-0.0242622 0.0650295 0.043001 0.620871 0.5 +-0.0237291 0.0650733 0.0438813 0.648659 0.5 +-0.0231964 0.0651165 0.0447582 0.682051 0.5 +-0.0227042 0.0651451 0.0456598 0.720624 0.5 +-0.0221975 0.0652175 0.046591 0.75489 0.5 +-0.0216757 0.065257 0.0474751 0.767004 0.5 +-0.0211412 0.0652998 0.0483526 0.767336 0.5 +-0.02061 0.0653432 0.0492306 0.761436 0.5 +-0.0200798 0.0653829 0.0501099 0.763317 0.5 +-0.0194961 0.0654004 0.0509321 0.736708 0.5 +-0.018787 0.0654231 0.0516453 0.591455 0.483833 +-0.0179879 0.0654395 0.0522544 0.603181 0.5 +-0.0171808 0.0654583 0.0528522 0.601442 0.469116 +-0.0814882 0.139397 0.0468344 0.392587 0.5 +-0.0851043 0.10321 0.0261425 0.72843 0.5 +-0.0264348 0.0891318 0.0486594 0.630739 0.5 +-0.0128318 0.0653357 0.0541739 0.714885 0.319675 +-0.0854828 0.0924603 0.0282645 0.759633 0.5 +-0.0882111 0.0936365 0.0238814 0.633304 0.452788 +-0.0648058 0.0881399 -0.0188881 0.542781 0.463863 +-0.0683872 0.0690317 0.0328821 0.53954 0.434328 +-0.0797185 0.0803984 0.0327643 0.716781 0.5 +-0.0436341 0.171062 -0.00299049 0.261108 0.5 +-0.0088954 0.108786 -0.0222808 0.492538 0.5 +-0.0767129 0.161805 -0.0163426 0.622946 0.5 +-0.0882102 0.118977 0.047099 0.597276 0.488771 +-0.0258097 0.0766327 0.0484243 0.675774 0.430178 +-0.0886752 0.135106 0.0413889 0.532769 0.5 +-0.0927055 0.120137 0.0415853 0.596729 0.5 +-0.0266978 0.0917701 0.0460149 0.523728 0.5 +-0.0820753 0.129944 0.0519532 0.484316 0.459865 +-0.0832204 0.140695 0.0442806 0.399631 0.485745 +-0.0809796 0.0788834 0.0298322 0.64398 0.5 +-0.0770334 0.158982 -0.013085 0.846624 0.5 +-0.0249592 0.0767123 0.050372 0.737437 0.5 +-0.0212185 0.178615 -0.022031 0.371257 0.5 +-0.00588737 0.108814 -0.0225516 0.684115 0.5 +-0.0878486 0.143233 0.0360974 0.589947 0.465628 +-0.0254054 0.0766649 0.0494071 0.719943 0.5 +-0.0485411 0.166778 0.000587101 0.38171 0.404831 +-0.0753773 0.0887668 0.039456 0.612897 0.5 +-0.0718069 0.0887788 0.0415418 0.600283 0.460872 +-0.0814909 0.0788596 0.028943 0.641587 0.5 +-0.029166 0.0762862 0.0418904 0.796915 0.368886 +-0.078334 0.175787 -0.0461739 0.301072 0.429445 +-0.0772387 0.158974 -0.0142914 0.59102 0.5 +-0.0707931 0.0879477 -0.0165704 0.464333 0.5 +-0.0779251 0.168693 -0.0322923 0.271725 0.421928 +-0.0255118 0.0931431 0.0461963 0.367785 0.479473 +-0.0244166 0.0931902 0.0479432 0.360035 0.5 +-0.0789031 0.0913518 0.0358575 0.725318 0.5 +-0.0263933 0.0864552 0.0500994 0.617426 0.5 +-0.0212315 0.0839098 0.0563274 0.505352 0.407912 +-0.0245236 0.0838729 0.0539551 0.655122 0.5 +-0.0251232 0.0838362 0.0531591 0.664806 0.5 +-0.0802884 0.146109 0.0411929 0.457671 0.5 +-0.0894571 0.131034 0.0422704 0.513667 0.475195 +-0.0578363 0.0912193 -0.0212351 0.406621 0.468728 +-0.0588327 0.0911696 -0.0205864 0.488927 0.5 +-0.0618121 0.09105 -0.0190303 0.635403 0.5 +-0.0628225 0.0910404 -0.0189489 0.672209 0.5 +-0.0638273 0.0910291 -0.0188305 0.656753 0.5 +-0.0648099 0.0910089 -0.0186372 0.620792 0.5 +-0.065807 0.090969 -0.0181206 0.466198 0.40401 +-0.0518084 0.0913012 -0.0220555 0.84568 0.5 +-0.0508009 0.0912872 -0.0218676 0.833056 0.355825 +-0.0498121 0.0912811 -0.0216901 0.821875 0.5 +-0.0458215 0.091313 -0.0218951 0.699581 0.5 +-0.0448194 0.0913346 -0.0221278 0.641606 0.5 +-0.0468292 0.091298 -0.0217206 0.749525 0.5 +-0.0865836 0.11378 0.0451954 0.456208 0.451626 +-0.060057 0.135486 -0.00665791 0.660892 0.5 +-0.0520933 0.154615 -0.00405641 0.40522 0.42192 +-0.0568824 0.10976 -0.0175883 0.478686 0.5 +-0.0671562 0.0724925 0.0371747 0.556494 0.5 +-0.0629025 0.103986 -0.017642 0.452537 0.5 +-0.0649207 0.122383 -0.00889091 0.783894 0.5 +-0.0668128 0.0894987 -0.0177562 0.460883 0.5 +-0.0187732 0.0946942 0.0521396 0.285862 0.464905 +-0.0826303 0.103323 0.0293175 0.61197 0.5 +-0.0732964 0.0791377 0.0376894 0.770429 0.5 +-0.0761165 0.0874143 0.0388159 0.635482 0.5 +-0.0257486 0.0365571 0.0540093 0.39631 0.5 +-0.0830551 0.128552 0.0515383 0.527893 0.5 +-0.0592291 0.156682 0.00368263 0.0916901 0.349098 +-0.0881508 0.144556 0.0335371 0.593723 0.473258 +0.0191769 0.0959952 -0.0230407 0.822823 0.5 +-0.0178219 0.0896296 -0.0373512 0.500126 0.449734 +-0.00286572 0.104506 -0.0226523 0.760495 0.5 +-0.0481378 0.0672057 0.0386531 0.546721 0.479476 +-0.0472854 0.0671503 0.0390298 0.552143 0.484067 +-0.0462738 0.0671086 0.039469 0.691742 0.5 +-0.0321193 0.0366883 0.0508235 0.369122 0.5 +-0.0443984 0.0671335 0.0404051 0.611386 0.5 +-0.0178266 0.0947205 0.0526193 0.306568 0.5 +-0.0772403 0.0846603 0.0372078 0.653202 0.5 +-0.0857101 0.0869161 0.0258492 0.697826 0.452554 +-0.0832007 0.119017 0.0492012 0.681854 0.5 +-0.0877346 0.144562 0.0345528 0.583068 0.464363 +-0.0874124 0.136542 0.0428952 0.522904 0.5 +-0.0880121 0.147225 0.0305337 0.622896 0.43974 +-0.0885789 0.0922253 0.0228661 0.601941 0.5 +-0.0767597 0.163153 -0.0191399 0.631597 0.5 +-0.0830162 0.0939316 0.0314035 0.771486 0.5 +-0.0401353 0.162183 -0.0119788 0.432598 0.451394 +-0.0877344 0.132461 0.0447656 0.549751 0.5 +-0.0261594 0.066324 0.0406106 0.748029 0.384426 +-0.0256808 0.0663835 0.041558 0.725121 0.5 +-0.0251661 0.0664206 0.0424455 0.727605 0.5 +-0.0246581 0.0664552 0.0433381 0.615194 0.5 +-0.0241603 0.0665253 0.044272 0.657199 0.5 +-0.0236293 0.0665652 0.045154 0.708501 0.5 +-0.0231138 0.0666037 0.0460408 0.745905 0.5 +-0.0225837 0.0666453 0.0469216 0.758471 0.5 +-0.0220763 0.0666765 0.0478151 0.752742 0.5 +-0.0215751 0.0667511 0.0487462 0.754091 0.5 +-0.0210692 0.0667823 0.0496379 0.767613 0.5 +-0.0205507 0.066817 0.0505282 0.772583 0.5 +-0.0199636 0.0668339 0.051351 0.739814 0.5 +-0.019299 0.0668878 0.052102 0.606212 0.5 +-0.0184257 0.066889 0.0526426 0.610888 0.5 +-0.0175551 0.0668893 0.0531861 0.615169 0.460834 +-0.0166742 0.0668915 0.0537111 0.621262 0.5 +-0.0748456 0.159073 -0.00827714 0.296357 0.5 +-0.087722 0.128407 0.0462822 0.638364 0.5 +-0.0927955 0.121487 0.0416389 0.552684 0.5 +-0.0117936 0.0667192 0.0544625 0.748372 0.5 +-0.0528912 0.109829 -0.018387 0.695063 0.5 +-0.078061 0.117721 0.0511362 0.575365 0.5 +-0.06794 0.126772 -0.00890268 0.828378 0.5 +-0.0287411 0.0366033 0.0533099 0.549284 0.5 +-0.0830364 0.104646 0.028271 0.459845 0.485918 +-0.0830074 0.117688 0.0489709 0.677502 0.5 +-0.0842691 0.117693 0.0488129 0.735849 0.5 +-0.0779175 0.0954136 0.0361479 0.702817 0.5 +-0.0658161 0.0866791 -0.018673 0.484728 0.5 +-0.0807235 0.116228 0.0481624 0.639565 0.459752 +-0.0923057 0.12017 0.0426167 0.629388 0.5 +-0.0765127 0.164562 -0.0208538 0.292475 0.458712 +-0.0866887 0.120341 0.0484058 0.584938 0.5 +-0.0824451 0.140729 0.0449221 0.472851 0.5 +-0.0169961 0.094658 0.0531741 0.348289 0.46208 +-0.0277489 0.0877005 0.0471838 0.466685 0.5 +-0.0256851 0.0824232 0.052338 0.701496 0.5 +-0.0248582 0.0752289 0.048914 0.841603 0.5 +-0.0833358 0.105954 0.0271122 0.53304 0.5 +-0.0743965 0.149892 -0.0310959 0.253196 0.5 +-0.0723907 0.151114 -0.0412874 0.239642 0.5 +-0.0763319 0.15494 -0.00387485 0.571148 0.5 +-0.0213294 0.0783028 0.0551779 0.560324 0.5 +-0.0866523 0.0868042 0.0239447 0.659831 0.5 +-0.017215 0.175671 -0.0245809 0.394382 0.5 +-0.0766234 0.167356 -0.0265012 0.249075 0.446585 +-0.0728932 0.0941961 0.0410307 0.515145 0.462685 +-0.0769618 0.103489 0.0349575 0.649895 0.403781 +-0.0908997 0.126938 0.0424248 0.65313 0.5 +-0.0903999 0.124268 0.0448512 0.560792 0.5 +-0.0809093 0.0912865 0.0336272 0.756521 0.5 +-0.0866695 0.135213 0.0450386 0.702137 0.5 +-0.0766812 0.154876 -0.00631355 0.823866 0.5 +-0.0269434 0.0864227 0.0492292 0.557598 0.5 +-0.0706477 0.0874116 0.0418374 0.617637 0.451512 +-0.0221672 0.0839099 0.0558332 0.490068 0.5 +-0.0669681 0.132599 -0.00847972 0.726239 0.5 +-0.0825915 0.143398 0.0421649 0.405344 0.304789 +-0.084679 0.0869987 0.027663 0.717317 0.5 +-0.0765591 0.0818865 0.0366215 0.779994 0.5 +-0.0753069 0.109577 0.0422017 0.84399 0.5 +-0.0650055 0.136996 -0.00788185 0.693105 0.5 +-0.0578677 0.104042 -0.0186102 0.707273 0.5 +-0.0568787 0.10406 -0.0186489 0.675401 0.5 +-0.0558876 0.104087 -0.0189213 0.619451 0.5 +-0.0538972 0.104145 -0.0195691 0.484046 0.5 +-0.0528856 0.104156 -0.0198053 0.643335 0.43434 +0.00417753 0.0922823 -0.0325433 0.703655 0.5 +-0.0548971 0.104115 -0.019193 0.609906 0.5 +-0.0779912 0.139819 -0.00526751 0.457677 0.318483 +-0.0778773 0.120773 -0.00663343 0.422409 0.5 +-0.0311581 0.17265 -0.0162683 0.479138 0.5 +0.0111252 0.108699 -0.019265 0.594589 0.483157 +0.0151073 0.108635 -0.0180644 0.600032 0.5 +-0.0739419 0.129646 -0.00820737 0.45181 0.44809 +-0.0252176 0.0351344 0.0519405 0.890347 0.5 +-0.0550232 0.14424 -0.00134547 0.728895 0.5 +-0.0669793 0.134061 -0.00834965 0.726684 0.5 +-0.069891 0.119438 -0.0086356 0.741639 0.5 +-0.0738772 0.107826 -0.00969763 0.629287 0.5 +-0.0727925 0.0893223 -0.0156729 0.40798 0.430284 +-0.0904989 0.148452 0.0245146 0.583354 0.5 +-0.0777036 0.174395 -0.0426027 0.263898 0.5 +-0.0287307 0.0748955 0.0414817 0.724378 0.5 +-0.0845249 0.129883 0.0501389 0.500821 0.5 +-0.0838122 0.128533 0.0508937 0.517079 0.452752 +-0.0846144 0.128516 0.0502768 0.514976 0.478955 +-0.0245194 0.0879123 0.052427 0.600029 0.5 +-0.028277 0.0807444 0.0465032 0.675132 0.5 +-0.0209967 0.0893299 0.0545201 0.529781 0.5 +-0.0782416 0.0913778 0.0366028 0.71786 0.5 +-0.0865319 0.0910336 0.0265354 0.734027 0.5 +0.0081342 0.104445 -0.020865 0.572659 0.5 +0.0101376 0.104418 -0.0202461 0.517884 0.487291 +-0.066894 0.110895 -0.0121462 0.496212 0.487401 +-0.0238144 0.0879301 0.05313 0.568414 0.5 +-0.08227 0.0830732 0.0310042 0.724217 0.5 +-0.0756281 0.167353 -0.024657 0.244657 0.426881 +-0.0428236 0.0913841 -0.0227682 0.558206 0.5 +-0.0840769 0.0911454 0.0297191 0.773917 0.5 +-0.0859798 0.13928 0.042828 0.691483 0.5 +-0.0754721 0.103526 0.0362863 0.485015 0.5 +-0.0868865 0.136539 0.0438118 0.679533 0.5 +-0.0884823 0.147207 0.0295866 0.639634 0.5 +-0.0784063 0.0886978 0.0368492 0.758324 0.5 +-0.0747355 0.161794 -0.0126957 0.290334 0.281207 +-0.0823671 0.0939609 0.0321712 0.776682 0.5 +-0.0834343 0.143353 0.0415913 0.489068 0.5 +-0.0729449 0.0805494 0.0386997 0.645565 0.481585 +-0.01605 0.0946681 0.0536372 0.358352 0.5 +-0.0260001 0.0677977 0.0418131 0.717372 0.393932 +-0.0254657 0.0678395 0.0426887 0.577324 0.5 +-0.0250008 0.0678945 0.0436439 0.617112 0.40435 +-0.0245116 0.0679611 0.0445844 0.657726 0.5 +-0.0239792 0.0680021 0.045464 0.702812 0.5 +-0.0234564 0.0680424 0.0463484 0.731978 0.5 +-0.0229776 0.0681076 0.0472951 0.753752 0.421462 +-0.0224834 0.0681349 0.0481925 0.749671 0.5 +-0.0219636 0.0681726 0.0490783 0.750587 0.5 +-0.0214414 0.0682091 0.0499624 0.753259 0.5 +-0.0209485 0.0682779 0.0508919 0.770932 0.5 +-0.0203653 0.0682964 0.0517114 0.754883 0.5 +-0.0196654 0.0683158 0.0524244 0.596572 0.5 +-0.0188177 0.0683045 0.0530002 0.593366 0.454355 +-0.0179785 0.068344 0.053543 0.597045 0.5 +-0.087802 0.139216 0.0403868 0.507851 0.5 +-0.023276 0.0768174 0.0529315 0.733001 0.5 +-0.0279123 0.0793217 0.046185 0.705136 0.5 +-0.0238077 0.0811303 0.0547388 0.57563 0.5 +-0.0788017 0.0846357 0.0359502 0.643276 0.5 +-0.0227544 0.0753712 0.0524561 0.737909 0.5 +-0.0187514 0.0906841 0.0550582 0.454383 0.5 +-0.0521114 0.156091 -0.00406652 0.380925 0.5 +-0.0578055 0.0883401 -0.0213124 0.376443 0.5 +-0.0833044 0.10329 0.0285866 0.601062 0.461737 +-0.0853195 0.117662 0.0484974 0.723998 0.5 +-0.085028 0.100559 0.0275605 0.627426 0.5 +-0.0854761 0.132564 0.04817 0.578133 0.48268 +-0.0872404 0.149912 0.0282765 0.361506 0.5 +-0.0883155 0.139178 0.0394996 0.652844 0.5 +-0.0880478 0.0908955 0.0237752 0.659506 0.459481 +-0.0738208 0.0921589 -0.0148323 0.416064 0.434719 +-0.0842319 0.104575 0.0266516 0.722912 0.5 +-0.086684 0.149909 0.029141 0.366034 0.5 +-0.0770439 0.154813 -0.0101321 0.878856 0.5 +-0.0769455 0.154831 -0.00883158 0.878173 0.5 +-0.023437 0.0753613 0.0517266 0.754428 0.5 +-0.033113 0.162236 -0.0143657 0.60775 0.467369 +-0.076768 0.156222 -0.00903892 0.851762 0.5 +-0.0239671 0.075324 0.0508435 0.753151 0.5 +-0.0764449 0.084677 0.0378167 0.653645 0.5 +-0.0829344 0.129921 0.0513858 0.482086 0.5 +-0.0842337 0.150005 0.032317 0.36779 0.420049 +-0.0894324 0.117571 0.0455052 0.568933 0.5 +-0.0267697 0.0750695 0.0452054 0.632976 0.5 +-0.0853268 0.127125 0.0496018 0.541484 0.5 +-0.0754447 0.164601 -0.0189193 0.301893 0.406526 +-0.0289421 0.0848695 0.0456392 0.612869 0.5 +-0.0668098 0.0880715 -0.0180091 0.47078 0.5 +-0.0800654 0.121688 0.0502425 0.66693 0.5 +-0.0861528 0.0951452 0.0274373 0.714745 0.5 +-0.0877008 0.0923103 0.0248018 0.675338 0.5 +-0.0659221 0.115196 -0.0104247 0.57426 0.5 +-0.0274598 0.0863801 0.0483431 0.511518 0.5 +-0.0151861 0.168246 -0.0215615 0.609369 0.5 +-0.0550158 0.128128 -0.00563226 0.567734 0.5 +-0.0733019 0.081934 0.0390113 0.655173 0.5 +-0.0741118 0.0819105 0.0384161 0.650399 0.5 +-0.0749157 0.0818909 0.0378096 0.644818 0.483253 +-0.0757541 0.0819089 0.037226 0.638407 0.5 +-0.0813944 0.0817284 0.031574 0.735688 0.5 +-0.0898787 0.112224 0.0169361 0.595807 0.5 +-0.0593593 0.0651443 0.0328932 0.479597 0.414141 +-0.0738713 0.116445 -0.00712552 0.36045 0.456113 +-0.0809665 0.133877 -0.00363658 0.409566 0.469817 +-0.0789639 0.13393 -0.00512141 0.44224 0.460808 +-0.0798447 0.116298 -0.00419638 0.539702 0.402936 +-0.0609217 0.118124 -0.010668 0.564344 0.455328 +-0.0458732 0.104238 -0.0208285 0.740483 0.5 +-0.0211436 0.168262 -0.0193322 0.562002 0.483278 +0.0141307 0.108667 -0.0183815 0.596805 0.470009 +-0.0470651 0.153179 -0.00606436 0.709113 0.5 +-0.0231257 0.165273 -0.0171671 0.815243 0.5 +-0.0440699 0.153194 -0.00699527 0.726063 0.5 +-0.0639063 0.120904 -0.00875525 0.731777 0.5 +-0.0698001 0.0894083 -0.0167108 0.516276 0.475194 +-0.0678177 0.0894605 -0.0172539 0.502991 0.390657 +-0.0687967 0.0894213 -0.0168337 0.692476 0.5 +-0.0708134 0.0893817 -0.0163657 0.478369 0.40535 +-0.0717916 0.0893503 -0.0160567 0.441476 0.461514 +-0.0747874 0.0892505 -0.0147771 0.356936 0.5 +-0.0738068 0.0892836 -0.0151913 0.384038 0.5 +-0.0490771 0.154645 -0.00592496 0.40839 0.5 +-0.0832309 0.120353 0.049216 0.681585 0.5 +-0.0817321 0.120346 0.0490739 0.674767 0.456655 +-0.0806333 0.120347 0.049427 0.854313 0.5 +-0.0798668 0.12036 0.0500614 0.840228 0.5 +-0.0793168 0.102079 0.0331119 0.690375 0.5 +-0.0786087 0.102098 0.0338163 0.696071 0.5 +-0.0697701 0.0874139 0.0423816 0.594104 0.428547 +-0.0893599 0.133717 0.0406984 0.514192 0.5 +-0.0869443 0.101766 0.0237835 0.520538 0.5 +-0.087877 0.0990467 0.0233782 0.537292 0.5 +-0.065193 0.165273 -0.0595568 0.345227 0.394226 +-0.0787856 0.109366 0.039802 0.913742 0.5 +-0.0759173 0.12523 -0.00781198 0.381866 0.5 +-0.0874076 0.0990828 0.0243308 0.562363 0.5 +-0.0210879 0.0852798 0.0561484 0.576971 0.5 +-0.0609255 0.122379 -0.00879585 0.711911 0.5 +-0.0428815 0.108469 -0.0193857 0.626851 0.459296 +-0.0882171 0.135133 0.0423395 0.536012 0.449802 +-0.0896944 0.133694 0.0395953 0.641493 0.5 +-0.0849548 0.0952071 0.0290738 0.7484 0.5 +-0.0849504 0.136625 0.0461206 0.716512 0.5 +-0.0905142 0.129614 0.0405398 0.61376 0.5 +-0.0790343 0.0886679 0.0360671 0.746838 0.5 +-0.0864575 0.101794 0.0247295 0.544273 0.5 +-0.028039 0.0849631 0.0475609 0.506409 0.394611 +-0.0809226 0.0926448 0.0335946 0.769808 0.5 +-0.0868952 0.0991223 0.0252196 0.581435 0.5 +-0.0863763 0.0991625 0.0261078 0.583309 0.5 +-0.0262745 0.0692227 0.0420449 0.710231 0.5 +-0.0258209 0.0692735 0.0430043 0.705777 0.5 +-0.0253439 0.0693349 0.0439513 0.593069 0.5 +-0.0248173 0.0693751 0.0448313 0.639351 0.5 +-0.024281 0.069418 0.0457102 0.678344 0.5 +-0.023822 0.0694685 0.046666 0.715984 0.419247 +-0.0233157 0.0695067 0.0475588 0.750333 0.5 +-0.0228623 0.06956 0.0485197 0.752361 0.5 +-0.0223265 0.0696009 0.0493961 0.756307 0.5 +-0.0217889 0.0696447 0.0502694 0.759472 0.5 +-0.0212527 0.0696869 0.051144 0.778531 0.5 +-0.0206697 0.0697068 0.051972 0.627043 0.486878 +-0.0199616 0.0697296 0.0526775 0.619573 0.480404 +-0.0191411 0.0697535 0.053261 0.614258 0.5 +-0.018211 0.0697307 0.0537615 0.616563 0.5 +-0.0858145 0.0991904 0.0269676 0.605763 0.5 +-0.0729908 0.139888 -0.00698816 0.404702 0.462671 +-0.0806315 0.139432 0.0474021 0.393513 0.466506 +-0.058803 0.0883 -0.0207912 0.44019 0.3812 +-0.0809803 0.104706 0.0304576 0.612975 0.5 +-0.0816857 0.104685 0.0297488 0.587854 0.5 +-0.0748011 0.0878022 -0.0147955 0.386443 0.5 +-0.0829241 0.126549 -0.00467577 0.41593 0.5 +-0.0882017 0.0949941 0.0238463 0.610526 0.459779 +-0.0284216 0.0792864 0.045297 0.711465 0.5 +-0.0862816 0.117641 0.0480424 0.574629 0.460115 +-0.0748092 0.0790936 0.0363823 0.776892 0.5 +-0.0859393 0.101835 0.0256124 0.55922 0.5 +-0.0619845 0.128209 -0.0080954 0.660445 0.484 +-0.0794763 0.0926775 0.0349659 0.755777 0.5 +-0.0807745 0.102028 0.0317433 0.680786 0.422728 +-0.0735138 0.0874308 0.0404487 0.657808 0.5 +-0.0182505 0.0920203 0.0545129 0.509561 0.442857 +-0.0906893 0.11752 0.0439252 0.718529 0.5 +-0.0765631 0.160404 -0.0136187 0.427375 0.5 +-0.083716 0.087071 0.0295098 0.725771 0.5 +-0.0852334 0.0992128 0.0278144 0.639431 0.5 +-0.0853944 0.101863 0.0264831 0.581463 0.5 +-0.0847959 0.101901 0.0272869 0.611789 0.5 +-0.0765081 0.156243 -0.00790412 0.848828 0.5 +-0.0878947 0.131105 0.044958 0.578232 0.4675 +-0.0727804 0.0887809 0.0411113 0.615283 0.5 +-0.0850789 0.151288 0.0289026 0.310258 0.5 +-0.0722033 0.152534 -0.0417656 0.401097 0.5 +-0.0818952 0.134036 0.0502533 0.531522 0.5 +-0.0827485 0.134001 0.0496722 0.537238 0.460131 +-0.0787829 0.0926997 0.035689 0.721227 0.5 +-0.0582936 0.157998 0.00361947 0.17564 0.5 +-0.0841797 0.101927 0.0280813 0.631372 0.5 +-0.0719584 0.0942006 0.0415089 0.504695 0.5 +-0.0844404 0.100576 0.0283951 0.655595 0.5 +-0.0843685 0.105877 0.0253348 0.656506 0.5 +-0.0289729 0.083488 0.0456837 0.634519 0.386648 +-0.0888148 0.144497 0.0313918 0.486128 0.476072 +-0.0714887 0.0860678 0.0412957 0.657645 0.5 +-0.0590273 0.134027 -0.00648451 0.658698 0.5 +-0.0236613 0.0852675 0.0544729 0.499333 0.467783 +-0.0697873 0.0819627 0.0411407 0.654226 0.5 +-0.0766415 0.100814 0.0361238 0.67468 0.5 +-0.0752643 0.0941545 0.0391883 0.540509 0.478733 +-0.0765269 0.165965 -0.0237196 0.297768 0.404308 +-0.0230753 0.078299 0.0540943 0.591992 0.5 +-0.0271001 0.0779439 0.0468281 0.633213 0.413896 +-0.0284285 0.0821494 0.0466355 0.541094 0.5 +-0.0764226 0.102162 0.0358668 0.548816 0.5 +-0.0518036 0.0898543 -0.0220029 0.808392 0.5 +-0.0508059 0.0898498 -0.0218327 0.80595 0.5 +-0.0478093 0.0898718 -0.0219802 0.740078 0.5 +-0.0468126 0.0898791 -0.022022 0.715418 0.5 +-0.0488103 0.0898531 -0.0217755 0.756736 0.5 +-0.0498078 0.0898419 -0.0216876 0.792268 0.5 +-0.0758056 0.0891863 -0.013912 0.443624 0.462542 +-0.0418656 0.104235 -0.0206965 0.792282 0.5 +-0.0758953 0.12228 -0.00740649 0.455274 0.5 +-0.0839351 0.123564 -0.00377373 0.48799 0.5 +-0.077893 0.12518 -0.00689701 0.458395 0.400301 +-0.0398915 0.109923 -0.0189257 0.62346 0.5 +-0.0719068 0.110755 -0.00961867 0.604766 0.5 +-0.0338786 0.104305 -0.0212068 0.610514 0.446972 +-0.034872 0.104274 -0.0209307 0.634655 0.5 +-0.0368662 0.104233 -0.0205194 0.694905 0.5 +-0.0639176 0.122377 -0.00881224 0.799454 0.5 +-0.0358716 0.10426 -0.0206916 0.656694 0.5 +-0.0378682 0.104226 -0.0203027 0.748953 0.5 +-0.0846211 0.0992422 0.0286106 0.672603 0.5 +-0.0748342 0.156367 -0.00257451 0.283783 0.5 +-0.0916834 0.116094 0.0407438 0.559524 0.5 +-0.0760927 0.0805105 0.0361956 0.774546 0.5 +-0.0769895 0.0790529 0.034321 0.748937 0.5 +-0.0198767 0.105865 -0.0225965 0.686941 0.5 +-0.0210999 0.0811322 0.0562803 0.550507 0.5 +-0.0691615 0.0832998 0.0419252 0.652599 0.5 +-0.0735939 0.077695 0.036626 0.775402 0.5 +-0.087976 0.141871 0.0376917 0.590295 0.5 +-0.0891661 0.132396 0.0419315 0.517856 0.5 +-0.0840037 0.0992695 0.0294026 0.683019 0.5 +-0.0833513 0.099287 0.0301656 0.693299 0.5 +-0.0826594 0.0993103 0.0308836 0.687241 0.5 +-0.0819554 0.0993316 0.0315904 0.682395 0.5 +-0.081252 0.0993542 0.0322994 0.685017 0.420108 +-0.0242491 0.0796961 0.0538111 0.729672 0.5 +-0.0262775 0.073604 0.0447421 0.603792 0.5 +-0.0760841 0.104861 0.0354581 0.575885 0.5 +-0.0790692 0.0804499 0.033529 0.732151 0.5 +-0.0852337 0.104506 0.0248257 0.649078 0.43065 +-0.0861539 0.149931 0.0300167 0.37929 0.5 +-0.0841802 0.136658 0.046769 0.523598 0.5 +-0.0747288 0.102175 0.0369848 0.515846 0.5 +-0.0764401 0.163184 -0.0180705 0.378444 0.466109 +-0.071459 0.151188 -0.0433221 0.155006 0.5 +-0.0805231 0.0993639 0.0329828 0.690498 0.5 +-0.0756445 0.156326 -0.00458549 0.473774 0.5 +-0.0270556 0.0706113 0.0413767 0.745009 0.384267 +-0.0265661 0.0706408 0.0422848 0.703513 0.5 +-0.0261195 0.0706905 0.0432458 0.715044 0.5 +-0.0256136 0.0707601 0.0441795 0.622902 0.5 +-0.0250553 0.0707727 0.0450037 0.655445 0.5 +-0.0245442 0.0708437 0.0459353 0.676037 0.5 +-0.0240991 0.0708914 0.0469009 0.723524 0.420258 +-0.0236559 0.0709438 0.0478646 0.753369 0.5 +-0.0231748 0.0709692 0.0487695 0.751469 0.5 +-0.0226305 0.0710127 0.0496427 0.753628 0.5 +-0.0220941 0.0710555 0.0505203 0.76467 0.5 +-0.0215406 0.0711033 0.0513847 0.784873 0.5 +-0.0209282 0.0711316 0.0521839 0.768389 0.5 +-0.0201874 0.0711262 0.0528634 0.612118 0.5 +-0.0193751 0.0711448 0.0534686 0.60873 0.477663 +-0.0185051 0.0711438 0.0540217 0.606739 0.5 +-0.0176031 0.0711548 0.0545194 0.622979 0.5 +-0.0798193 0.0993879 0.0336913 0.687679 0.5 +-0.0846322 0.139314 0.044315 0.672912 0.5 +-0.079084 0.0994215 0.0343706 0.688653 0.422635 +-0.0845068 0.120355 0.0490624 0.720286 0.5 +-0.0229594 0.0811266 0.055321 0.557805 0.474072 +-0.078807 0.10613 0.032485 0.532401 0.5 +-0.0913593 0.126907 0.0414668 0.627384 0.5 +-0.0796245 0.0859561 0.0353266 0.767808 0.5 +-0.0428742 0.105667 -0.0205602 0.731304 0.5 +-0.0871513 0.117629 0.0474896 0.570495 0.5 +-0.0658335 0.0881117 -0.0184537 0.496855 0.5 +-0.0199036 0.0739897 0.0538964 0.602769 0.5 +-0.0818746 0.144748 0.0414084 0.474096 0.5 +-0.0230529 0.0839079 0.0553134 0.507345 0.470825 +-0.0476682 0.165409 0.0039929 0.349686 0.46828 +-0.0282432 0.0763981 0.0437868 0.721292 0.5 +-0.076218 0.0887607 0.0388797 0.620745 0.5 +-0.0711952 0.0805577 0.0397762 0.634593 0.5 +-0.0831505 0.0857608 0.0304017 0.711996 0.431027 +-0.0835465 0.101952 0.0288636 0.642938 0.5 +-0.0705411 0.0860609 0.0417748 0.636596 0.44317 +-0.0783582 0.0994351 0.0350546 0.699226 0.5 +-0.0191918 0.174184 -0.0227992 0.42389 0.352327 +-0.0220401 0.0852804 0.0556778 0.483033 0.5 +-0.0776021 0.0994637 0.0357144 0.690718 0.5 +-0.0864391 0.131188 0.0477462 0.592026 0.5 +-0.076866 0.0994719 0.0363813 0.559076 0.4431 +-0.0719012 0.152408 -0.0434229 0.285821 0.5 +-0.0684419 0.0805248 0.0412962 0.62321 0.451548 +-0.0759966 0.0994807 0.0369297 0.539824 0.449425 +-0.0237993 0.184341 -0.0145966 0.202198 0.5 +-0.0828981 0.101969 0.02963 0.656757 0.442363 +-0.0822116 0.101996 0.0303518 0.666873 0.5 +-0.0295399 0.0777526 0.042206 0.761904 0.5 +-0.0919891 0.124178 0.0422069 0.501602 0.47305 +-0.0923673 0.124202 0.041188 0.636546 0.465219 +-0.0257584 0.0736396 0.0456283 0.637495 0.5 +-0.0881736 0.132451 0.0437642 0.543887 0.41121 +-0.0278981 0.0863323 0.047373 0.48143 0.385029 +-0.0256026 0.0837946 0.0522209 0.659613 0.5 +-0.0866506 0.128453 0.0480393 0.685922 0.5 +-0.0688604 0.0819375 0.0416515 0.645487 0.5 +-0.0778671 0.177131 -0.0494084 0.324417 0.5 +-0.0254269 0.0781373 0.050782 0.727084 0.5 +-0.0258381 0.0781035 0.0498012 0.73679 0.5 +-0.0263107 0.0780916 0.0488984 0.688481 0.431577 +-0.026682 0.0779832 0.0478067 0.646267 0.5 +-0.0275354 0.0822426 0.0485604 0.598348 0.5 +-0.0720541 0.0777606 0.0379027 0.756901 0.5 +-0.0879795 0.148554 0.029057 0.467988 0.441569 +-0.0408143 0.0899706 -0.0230035 0.698412 0.5 +-0.0418104 0.0899475 -0.0227382 0.710007 0.5 +-0.0429194 0.0898997 -0.0223492 0.592112 0.44212 +-0.065935 0.125307 -0.00885715 0.810106 0.5 +-0.0539078 0.109837 -0.0181931 0.679943 0.5 +0.000101878 0.111584 -0.0199068 0.689753 0.5 +-0.0728936 0.109289 -0.00959602 0.487491 0.48619 +-0.0849268 0.122064 -0.00322109 0.506068 0.5 +-0.0318643 0.104333 -0.0219242 0.452128 0.5 +-0.0328692 0.104316 -0.0215625 0.590342 0.455858 +-0.0558989 0.109796 -0.0177742 0.641121 0.5 +-0.0278708 0.104417 -0.0229648 0.632813 0.5 +-0.0268762 0.104433 -0.0231038 0.651717 0.5 +-0.0557185 0.0570014 0.011057 0.179388 0.5 +-0.022872 0.104437 -0.0231879 0.713138 0.5 +-0.0749035 0.113464 -0.00617122 0.468272 0.5 +-0.0718754 0.119424 -0.00835095 0.655849 0.5 +-0.0448725 0.105637 -0.0203982 0.695553 0.5 +0.001175 0.0909253 -0.0339059 0.588825 0.5 +0.00217921 0.090906 -0.033534 0.735462 0.5 +-0.0751542 0.0995011 0.0375123 0.497407 0.471923 +-0.0193167 0.0754023 0.0546877 0.593528 0.5 +-0.0861256 0.0937891 0.0274526 0.738518 0.5 +-0.022633 0.08929 0.0533197 0.560036 0.5 +-0.0246025 0.0824997 0.0540808 0.674094 0.5 +-0.0291608 0.0806486 0.0445728 0.686304 0.398708 +-0.0758067 0.0877331 -0.0139103 0.488567 0.5 +-0.0794858 0.0940336 0.0349322 0.771672 0.5 +-0.0283572 0.0862879 0.0464179 0.560143 0.5 +-0.0840475 0.0856522 0.0284432 0.685061 0.449165 +-0.0841686 0.143365 0.0409129 0.492686 0.5 +-0.0885696 0.137819 0.0397738 0.51327 0.476791 +-0.0715816 0.0791203 0.0388191 0.618827 0.480794 +-0.0814983 0.102013 0.0310531 0.678302 0.5 +-0.023059 0.0825255 0.0553698 0.523985 0.5 +-0.0191397 0.0920316 0.0539979 0.50914 0.5 +-0.0886344 0.0949473 0.0228281 0.574257 0.5 +-0.0845696 0.12714 0.0502672 0.537013 0.5 +-0.0174959 0.0984963 0.0451272 0.326778 0.5 +-0.0617567 0.139364 -0.00656769 0.615943 0.5 +-0.0783268 0.0804305 0.0341941 0.747294 0.5 +-0.0858069 0.133905 0.0470456 0.719107 0.5 +-0.0834451 0.136657 0.0474496 0.507741 0.5 +-0.0249827 0.0918474 0.0485489 0.553886 0.5 +-0.0288938 0.0821008 0.0456772 0.660198 0.5 +-0.0748166 0.0921259 -0.0144369 0.41024 0.5 +-0.0743754 0.0995209 0.0381506 0.571349 0.5 +-0.0273861 0.0720614 0.0416635 0.758915 0.5 +-0.0269088 0.0720784 0.0425891 0.727437 0.5 +-0.0264479 0.0721314 0.0435447 0.718447 0.5 +-0.0259103 0.0721759 0.0444214 0.621465 0.5 +-0.0253772 0.0722169 0.0453002 0.655957 0.5 +-0.0249029 0.0722756 0.0462509 0.679098 0.416689 +-0.0244152 0.0723023 0.0471532 0.708872 0.5 +-0.023961 0.0723529 0.0481115 0.741519 0.5 +-0.0234979 0.0724108 0.049066 0.749264 0.5 +-0.0229845 0.0724431 0.0499564 0.758299 0.5 +-0.0224223 0.072452 0.0507888 0.767045 0.5 +-0.0218345 0.0725147 0.0516294 0.782372 0.5 +-0.0211964 0.0725528 0.0524066 0.762552 0.5 +-0.0204394 0.0725535 0.0530664 0.606935 0.5 +-0.0196415 0.0725672 0.0536854 0.595665 0.5 +-0.0188257 0.0725897 0.0542693 0.599604 0.5 +-0.0736148 0.0995067 0.0387799 0.560069 0.5 +-0.0727533 0.0995199 0.0393322 0.557197 0.5 +-0.0599044 0.111127 -0.0158584 0.46108 0.477716 +-0.0430533 0.034543 -0.0263375 0.176398 0.205782 +-0.0439898 0.0350927 -0.0256307 0.162339 0.5 +-0.0443417 0.035118 -0.0243716 0.185544 0.251225 +-0.0448486 0.0351369 -0.0234128 0.159962 0.261208 +-0.0454902 0.0352033 -0.0224188 0.156094 0.28502 +-0.0458004 0.0353434 -0.021332 0.178142 0.5 +-0.0460388 0.0353834 -0.0203139 0.159105 0.5 +-0.0462349 0.0354247 -0.01929 0.145398 0.168046 +-0.0465497 0.0354834 -0.0182685 0.191067 0.5 +-0.0466771 0.0355018 -0.0172702 0.189574 0.5 +-0.0471842 0.0355635 -0.0162689 0.188053 0.5 +-0.0474379 0.0355948 -0.0152688 0.193736 0.5 +-0.0476906 0.0356242 -0.0142735 0.194812 0.5 +-0.0479431 0.0356599 -0.0132734 0.186768 0.5 +-0.085371 0.127983 -0.0026626 0.60266 0.5 +-0.0863225 0.128011 -0.00168174 0.660027 0.5 +-0.0883678 0.128089 0.00227451 0.510874 0.346895 +-0.0934137 0.128236 0.0152484 0.774086 0.5 +-0.093262 0.128309 0.02526 0.620648 0.472614 +-0.092072 0.128303 0.0302461 0.621444 0.5 +0.00382729 0.106411 -0.0207174 0.785128 0.5 +0.0309722 0.116471 -0.00147933 0.62174 0.5 +-0.0108057 0.0342947 -0.0255969 0.15305 0.5 +-0.012857 0.0968183 -0.0306036 0.485058 0.438913 +0.0286267 0.117101 -0.00417221 0.520453 0.485167 +0.00493781 0.100395 -0.0223096 0.684313 0.5 +-0.0703962 0.0382223 -0.000484462 0.169982 0.409113 +-0.0932461 0.129666 0.0232459 0.84433 0.5 +-0.0930389 0.129675 0.0242521 0.856795 0.5 +-0.0928278 0.124236 0.0382657 0.844179 0.5 +-0.0420891 0.0363826 -0.0272583 0.151311 0.5 +-0.0432318 0.0365168 -0.0263599 0.219927 0.5 +-0.0437604 0.036567 -0.0252782 0.365098 0.5 +-0.0440132 0.0366004 -0.0242792 0.368537 0.5 +-0.044366 0.0366412 -0.0232589 0.221539 0.5 +-0.045049 0.0367204 -0.0222184 0.25041 0.5 +-0.045663 0.0367902 -0.0212772 0.377981 0.5 +-0.0459579 0.0368224 -0.0202942 0.231859 0.5 +-0.0461137 0.0368295 -0.0192985 0.234706 0.414065 +-0.0462973 0.0368721 -0.0182757 0.376355 0.5 +-0.0466572 0.0369109 -0.0172699 0.213547 0.5 +-0.0469317 0.0369443 -0.0162782 0.375067 0.5 +-0.0473123 0.0369901 -0.0152765 0.378024 0.5 +-0.047565 0.0370224 -0.0142792 0.390309 0.5 +-0.0476227 0.0370311 -0.0128189 0.195728 0.250264 +-0.080434 0.0763484 0.0258387 0.783475 0.5 +-0.0921826 0.114725 0.0193089 0.752363 0.5 +-0.0917278 0.114662 0.0113396 0.451378 0.5 +-0.0902973 0.114585 0.00733567 0.36318 0.431269 +-0.0877422 0.114422 0.00426669 0.318524 0.449434 +-0.0869021 0.114398 0.00327085 0.349273 0.5 +0.0501248 0.0723145 0.00745971 0.794214 0.5 +0.000272434 0.109746 -0.0202486 0.804677 0.5 +-0.00639115 0.121199 -0.012466 0.596006 0.5 +-0.0104359 0.0944019 -0.0340934 0.722928 0.331946 +0.0294698 0.0801098 -0.0210213 0.752623 0.5 +-0.0693963 0.0393871 -0.00132267 0.249699 0.451987 +-0.0702074 0.0394853 -0.000301673 0.241905 0.5 +-0.0707082 0.0395895 0.000643319 0.199739 0.5 +-0.0929029 0.129672 0.0252445 0.860545 0.5 +-0.0792409 0.168033 -0.0359701 0.38015 0.5 +-0.0785372 0.168054 -0.0329755 0.379431 0.5 +-0.0774663 0.168085 -0.0299733 0.264203 0.5 +-0.0549715 0.161246 0.00205939 0.197273 0.387335 +0.0260716 0.115341 -0.00830033 0.511712 0.5 +-0.0438081 0.0899046 -0.0222231 0.647898 0.5 +-0.044116 0.168361 -0.0078879 0.379651 0.5 +-0.0469507 0.168415 -0.00396135 0.35056 0.39049 +-0.0925953 0.129683 0.0262582 0.603082 0.5 +-0.092402 0.129661 0.0272343 0.488426 0.5 +-0.0168415 0.122494 -0.0076608 0.541066 0.5 +-0.0665542 0.169448 -0.0580509 0.516374 0.458393 +-0.067702 0.169446 -0.0560134 0.487347 0.455218 +-0.0687619 0.169445 -0.0540038 0.670889 0.5 +-0.0704863 0.169511 -0.0510127 0.487293 0.450886 +-0.0714505 0.16941 -0.0490283 0.47874 0.339686 +-0.072631 0.169409 -0.0470274 0.479738 0.5 +-0.0920793 0.129683 0.0282033 0.48113 0.447798 +-0.0598434 0.0384999 0.0207227 0.184298 0.5 +-0.0603223 0.0385556 0.0217181 0.161702 0 +-0.0617635 0.0387159 0.0237173 0.149111 0.5 +-0.0626025 0.0388129 0.0247151 0.159834 0.5 +-0.0633235 0.0388939 0.025715 0.159708 0.5 +-0.0918958 0.129686 0.0292517 0.606198 0.5 +-0.0917215 0.129668 0.0302355 0.601516 0.48259 +-0.0915067 0.129676 0.0312386 0.853492 0.5 +-0.0913848 0.129679 0.0322355 0.842499 0.5 +-0.0912678 0.12968 0.0332366 0.83446 0.5 +-0.0788091 0.168052 -0.033971 0.400366 0.464969 +-0.0661658 0.170967 -0.0590604 0.45998 0.5 +-0.0685433 0.170852 -0.0550244 0.669597 0.5 +-0.0709402 0.170831 -0.0510269 0.473736 0.460127 +-0.0735775 0.170801 -0.0470392 0.426932 0.5 +-0.078668 0.170753 -0.0430283 0.276639 0.377887 +-0.086692 0.140502 0.00718566 0.520964 0.5 +-0.0391932 0.171233 -0.0109027 0.415495 0.5 +-0.0775215 0.161144 -0.0189221 0.746562 0.5 +-0.0740526 0.172196 -0.0480444 0.528484 0.5 +-0.0432126 0.168352 -0.00885275 0.393675 0.5 +-0.0702125 0.173659 -0.0540385 0.65353 0.5 +-0.0393334 0.174116 -0.00798067 0.261411 0.5 +-0.0911579 0.129687 0.0342384 0.818689 0.5 +-0.0911404 0.129685 0.035237 0.818655 0.5 +-0.0782584 0.1764 -0.0490322 0.289487 0.5 +-0.0772744 0.177812 -0.051035 0.266661 0.5 +-0.0777137 0.177848 -0.0500546 0.222064 0.5 +-0.0907603 0.140585 0.0151783 0.39901 0.455029 +-0.0924762 0.124198 0.0322659 0.84785 0.5 +-0.0924935 0.124207 0.0332695 0.824774 0.5 +-0.0925657 0.116008 0.0123183 0.483407 0.5 +-0.0416697 0.0377451 -0.0272469 0.265485 0.5 +-0.042649 0.0378778 -0.0263104 0.247791 0.5 +-0.0433082 0.037957 -0.0253239 0.241698 0.5 +-0.0435213 0.0379732 -0.0242868 0.357732 0.363769 +-0.0440467 0.0380432 -0.0230799 0.302986 0.36827 +-0.0449923 0.0381195 -0.0222607 0.280072 0.5 +-0.045381 0.0381676 -0.0212668 0.356225 0.5 +-0.0456637 0.0382067 -0.0202858 0.568126 0.5 +-0.045802 0.0382259 -0.0192856 0.317966 0.450606 +-0.0459192 0.038241 -0.0182827 0.54636 0.5 +-0.0463034 0.0382871 -0.0172845 0.284219 0.5 +-0.0466789 0.0383303 -0.0162856 0.552677 0.5 +-0.0469324 0.0383628 -0.0152843 0.552844 0.5 +-0.0471845 0.0383965 -0.0142868 0.553056 0.5 +-0.0474379 0.0384277 -0.0132876 0.37471 0.5 +-0.047784 0.038449 -0.0122332 0.256664 0.5 +-0.0870454 0.128039 -0.000695727 0.657719 0.5 +-0.0923901 0.114734 0.0183133 0.750435 0.5 +-0.0638593 0.0953482 -0.0183667 0.651463 0.5 +-0.00987706 0.108745 -0.0220853 0.596321 0.5 +-0.0927217 0.128206 0.0112525 0.446494 0.5 +-0.0306198 0.11135 -0.017885 0.661416 0.5 +-0.0665679 0.0404538 -0.00528616 0.346306 0.5 +-0.0672802 0.0405919 -0.00423161 0.292083 0.427548 +-0.0674006 0.0406253 -0.00334064 0.292041 0.31925 +0.0124979 0.0363631 -0.0219171 0.281744 0.444124 +-0.0685642 0.0406581 -0.00126009 0.352376 0.5 +-0.0694593 0.040787 -0.000292884 0.28098 0.5 +-0.0700194 0.0408862 0.000674154 0.224307 0.5 +-0.0911131 0.129682 0.0362351 0.813293 0.5 +-0.0910152 0.129688 0.0372352 0.822245 0.5 +-0.090997 0.129691 0.0382289 0.831044 0.5 +-0.09079 0.1297 0.0392322 0.852518 0.5 +-0.0778591 0.161105 -0.0269202 0.42527 0.5 +-0.075804 0.161028 -0.0299559 0.418641 0.312928 +-0.0747225 0.161031 -0.0319529 0.416194 0.5 +-0.0732611 0.161033 -0.0359392 0.35733 0.479137 +-0.0730235 0.16103 -0.0369405 0.377274 0.5 +-0.0727808 0.161025 -0.0379399 0.373036 0.426852 +-0.0725308 0.161023 -0.0389355 0.358613 0.404324 +-0.0721931 0.161015 -0.0399435 0.366645 0.416715 +-0.071953 0.16101 -0.0409434 0.379982 0.5 +-0.0714698 0.161004 -0.0429413 0.486268 0.5 +-0.0712181 0.161 -0.0439365 0.49184 0.5 +-0.0708835 0.160996 -0.0449446 0.497678 0.5 +-0.0706171 0.160991 -0.0459386 0.498415 0.460508 +-0.0905559 0.1297 0.0402277 0.878085 0.5 +-0.0915744 0.128321 0.0372423 0.809102 0.5 +-0.0594807 0.0398598 0.0207095 0.337927 0.5 +-0.0600846 0.0399274 0.0217122 0.293803 0.5 +-0.061044 0.0400333 0.0227114 0.136609 0.5 +-0.0620019 0.0401372 0.0237075 0.295694 0.5 +-0.0627225 0.0402195 0.0247088 0.303612 0.5 +-0.0635622 0.0403137 0.0257086 0.31826 0.5 +-0.064273 0.0404086 0.0266782 0.238525 0.370167 +-0.064637 0.0404566 0.0276669 0.264418 0.5 +-0.0650238 0.0405393 0.0286621 0.307687 0.304943 +-0.071563 0.151347 -0.0436244 0.152397 0.339709 +-0.0896969 0.139298 0.033185 0.611605 0.5 +-0.0758612 0.165153 -0.0370257 0.430526 0.5 +-0.0785503 0.175004 -0.046006 0.435268 0.5 +-0.0318479 0.09723 -0.023215 0.877913 0.5 +-0.0914715 0.128331 0.0382421 0.818958 0.5 +-0.0779755 0.159708 -0.0199256 0.5055 0.5 +-0.0767016 0.15969 -0.0259195 0.412099 0.5 +-0.0738575 0.159643 -0.0319319 0.341035 0.5 +-0.070737 0.159582 -0.0449318 0.522968 0.5 +-0.0217957 0.119089 -0.0120655 0.786046 0.5 +-0.0120829 0.121468 -0.0106691 0.649742 0.5 +-0.0500656 0.165567 2.77718e-05 0.353913 0.5 +-0.0935392 0.129637 0.0202382 0.809584 0.5 +-0.0750314 0.165158 -0.038026 0.466028 0.5 +-0.0682913 0.165205 -0.0539869 0.508452 0.432115 +-0.0678325 0.165206 -0.0549947 0.491193 0.5 +-0.0777024 0.176292 -0.0501047 0.253048 0.353994 +-0.0764653 0.177807 -0.0519745 0.3702 0.5 +-0.0734442 0.163812 -0.0389777 0.453492 0.438704 +-0.0713722 0.163817 -0.0449613 0.365869 0.451796 +-0.0679508 0.168029 -0.055011 0.492494 0.5 +-0.0146147 0.12166 -0.00880985 0.661887 0.5 +-0.0736039 0.148578 -0.0278556 0.303476 0.5 +-0.0733262 0.151241 -0.0368807 0.40925 0.5 +-0.0924917 0.124196 0.0312677 0.871214 0.5 +-0.092997 0.116043 0.0153159 0.614278 0.5 +-0.0927665 0.116031 0.013321 0.51184 0.5 +-0.0404866 0.0390699 -0.027317 0.3765 0.5 +-0.0417523 0.0392031 -0.0263092 0.329246 0.5 +-0.0424078 0.0392874 -0.0253255 0.258942 0.5 +-0.0427465 0.0393017 -0.0242897 0.428975 0.360831 +-0.0431901 0.039319 -0.0232745 0.432755 0.328016 +-0.0444076 0.0394861 -0.0222996 0.334565 0.5 +-0.0447782 0.039524 -0.0212903 0.681039 0.5 +-0.0451579 0.0395668 -0.0202936 0.702723 0.5 +-0.0452834 0.0395877 -0.019291 0.726106 0.5 +-0.0452845 0.0395903 -0.0182935 0.718412 0.5 +-0.0455391 0.0396225 -0.0172907 0.645519 0.5 +-0.0461447 0.0396778 -0.0162811 0.353387 0.5 +-0.0463977 0.0397105 -0.0152844 0.379252 0.464392 +-0.0466442 0.0397388 -0.0142756 0.299302 0.5 +-0.0468539 0.0397424 -0.0132276 0.25294 0.5 +-0.0473179 0.0397941 -0.0120624 0.223765 0.315924 +-0.0887148 0.12811 0.00328264 0.72111 0.5 +-0.0308753 0.104365 -0.0222089 0.446319 0.482864 +-0.0728566 0.114991 -0.00711315 0.366591 0.436444 +-0.0816493 0.14593 0.000178819 0.592301 0.5 +-0.0893977 0.135151 0.0292068 0.808765 0.5 +-0.089421 0.135156 0.0282104 0.803974 0.5 +-0.0650689 0.0416148 -0.00522845 0.453463 0.5 +-0.0659868 0.0418098 -0.00430732 0.37248 0.5 +-0.0665131 0.0419133 -0.00333369 0.318066 0.378794 +-0.0667152 0.0419014 -0.00231002 0.37233 0.5 +-0.0674877 0.041922 -0.00126982 0.395481 0.5 +-0.0683896 0.0420777 -0.000309277 0.348441 0.5 +-0.0691002 0.0421453 0.000699576 0.293542 0.5 +-0.0695352 0.0422413 0.00168563 0.300689 0.40801 +-0.0696417 0.0422524 0.0026904 0.353307 0.5 +-0.0694557 0.0421945 0.00370163 0.415109 0.5 +-0.0781275 0.152854 0.000107941 0.416632 0.5 +-0.0709562 0.158172 -0.0439179 0.492314 0.35675 +-0.0913446 0.12833 0.0392393 0.837905 0.5 +-0.0847077 0.140411 0.00224002 0.434161 0.5 +-0.0926235 0.124077 0.00926903 0.411092 0.449387 +-0.0665286 0.168031 -0.0580342 0.451278 0.5 +-0.0685156 0.168032 -0.0539935 0.490295 0.454656 +-0.0703858 0.16802 -0.0500308 0.372022 0.35199 +-0.0543713 0.158326 -0.00178875 0.236906 0.5 +-0.0552908 0.158294 -0.000771282 0.192694 0.5 +-0.0561055 0.158254 0.000206899 0.180724 0.5 +-0.0568939 0.158351 0.00118769 0.158859 0.239758 +-0.0574968 0.1584 0.00209189 0.176743 0.412447 +-0.0431779 0.113636 -0.0162215 0.656574 0.5 +-0.0582906 0.0411368 0.01871 0.275642 0.5 +-0.0579197 0.0410941 0.0197057 0.356501 0.5 +-0.0584017 0.0411488 0.0207065 0.376223 0.5 +-0.059 0.0412164 0.021703 0.352925 0.5 +-0.0600825 0.0413306 0.0227014 0.227712 0.5 +-0.0609237 0.0414243 0.0237035 0.23689 0.5 +-0.0617626 0.0415173 0.0247032 0.363447 0.5 +-0.0627252 0.0416196 0.0257026 0.365264 0.5 +-0.063517 0.0417383 0.0266777 0.250007 0.42172 +-0.0640041 0.0417908 0.0276702 0.295208 0.395173 +-0.0643944 0.0418449 0.0286723 0.336977 0.5 +-0.0647338 0.0418755 0.0296857 0.407541 0.5 +-0.0453052 0.113634 -0.0162273 0.705797 0.5 +-0.064574 0.0418551 0.0316967 0.49531 0.5 +-0.0648645 0.041891 0.032665 0.485722 0.287031 +-0.0652377 0.0419529 0.0337045 0.488604 0.5 +-0.0403754 0.124077 -0.00919956 0.595933 0.5 +-0.0194422 0.0952996 -0.0310527 0.431585 0.454864 +0.0278981 0.113772 -0.00862034 0.550472 0.475563 +0.020878 0.117607 -0.0107498 0.482254 0.472144 +-0.0723854 0.155427 -0.0359059 0.790446 0.5 +-0.0730146 0.15545 -0.0319082 0.738485 0.5 +-0.0774728 0.155537 -0.0149084 0.685931 0.5 +-0.0774643 0.155549 -0.0139037 0.760541 0.5 +-0.0772682 0.155563 -0.0118971 0.894149 0.5 +0.0304544 0.114562 -0.00546317 0.665739 0.5 +-0.0681856 0.169443 -0.0550153 0.470671 0.5 +-0.046761 0.126023 -0.00719597 0.543505 0.408336 +-0.0783677 0.176339 -0.0480853 0.316956 0.433024 +-0.0849215 0.130733 -0.00170191 0.61178 0.5 +-0.0786395 0.163873 -0.0279533 0.457209 0.446609 +-0.0857603 0.130763 -0.000714461 0.66754 0.5 +-0.068651 0.163792 -0.0529788 0.495845 0.5 +-0.077495 0.158339 -0.0149115 0.598855 0.5 +-0.086473 0.130788 0.000288786 0.671729 0.5 +-0.087182 0.130813 0.00128919 0.702791 0.5 +-0.0578171 0.08688 -0.0211007 0.398121 0.5 +-0.0925898 0.124211 0.034269 0.805629 0.5 +-0.092883 0.116038 0.0143172 0.558839 0.5 +-0.0808442 0.110042 -0.00155764 0.495667 0.5 +-0.039457 0.0403768 -0.0273046 0.416721 0.5 +-0.0405912 0.0404909 -0.0262976 0.395772 0.5 +-0.0413557 0.0405762 -0.0252979 0.357329 0.5 +-0.0417668 0.040639 -0.0243092 0.354294 0.262323 +-0.0423306 0.040657 -0.0232664 0.406337 0.5 +-0.0436408 0.0408205 -0.0223011 0.359219 0.5 +-0.0441537 0.0408799 -0.0213021 0.464016 0.43402 +-0.0444079 0.0409084 -0.0203048 0.456896 0.5 +-0.0445241 0.0409237 -0.0192998 0.857562 0.5 +-0.0446508 0.040942 -0.0182992 0.862894 0.5 +-0.0447778 0.0409599 -0.0173005 0.836276 0.5 +-0.0452867 0.0410146 -0.0162976 0.789024 0.5 +-0.0456663 0.0410589 -0.0152981 0.800915 0.5 +-0.0460065 0.0410789 -0.0142843 0.376931 0.5 +-0.0463222 0.0411097 -0.0132713 0.347334 0.380711 +-0.0464977 0.041126 -0.0122454 0.233676 0.5 +-0.0489044 0.0413839 -0.0112514 0.62257 0.5 +-0.00483682 0.0910121 -0.035647 0.704116 0.5 +0.0221624 0.0959197 -0.0219723 0.638007 0.5 +0.00206285 0.121236 -0.012553 0.754022 0.5 +-0.0882908 0.103675 0.012381 0.772705 0.5 +-0.0884013 0.103686 0.0143755 0.80184 0.5 +-0.0881324 0.103677 0.0173573 0.824016 0.5 +-0.0642285 0.0429095 -0.00424321 0.437892 0.5 +-0.06512 0.0430832 -0.00329452 0.41037 0.378829 +-0.0657222 0.0431534 -0.00229362 0.463051 0.5 +-0.0661661 0.0431586 -0.00127362 0.395593 0.5 +-0.0671097 0.0432428 -0.000257978 0.406763 0.5 +-0.0676617 0.0433934 0.000689977 0.34214 0.5 +-0.0683794 0.0434664 0.00169373 0.29018 0.5 +-0.0686641 0.0435432 0.00268116 0.361146 0.5 +-0.0685313 0.0435239 0.00368786 0.418319 0.5 +-0.0683862 0.0434928 0.00469407 0.41801 0.5 +-0.0686385 0.0435335 0.00569826 0.430273 0.5 +-0.0880604 0.13085 0.0022566 0.732304 0.5 +-0.088753 0.130866 0.00325856 0.661678 0.5 +-0.0893497 0.130881 0.0042394 0.605664 0.5 +-0.0747758 0.152715 -0.0228916 0.598224 0.5 +-0.0746759 0.152711 -0.0238933 0.631921 0.5 +-0.0745622 0.152707 -0.0248951 0.630937 0.5 +-0.0745333 0.152696 -0.0258905 0.629821 0.5 +-0.0744235 0.152695 -0.0268913 0.542363 0.5 +-0.0743032 0.152688 -0.027892 0.568037 0.5 +-0.0741728 0.15268 -0.0288898 0.583252 0.5 +-0.0899265 0.130893 0.00523191 0.417899 0.467192 +-0.0573402 0.0424553 0.0177175 0.312636 0.5 +-0.0564664 0.0423189 0.0186897 0.274166 0.5 +-0.0561187 0.04231 0.0196965 0.41177 0.5 +-0.0567225 0.0423764 0.0206991 0.404188 0.5 +-0.0574419 0.0424556 0.0216968 0.403487 0.5 +-0.0585235 0.0425717 0.0226979 0.291028 0.5 +-0.0594817 0.0426754 0.0236965 0.302713 0.5 +-0.0604421 0.0427792 0.0246961 0.311704 0.5 +-0.0611631 0.0428583 0.0256966 0.419713 0.5 +-0.062122 0.0429616 0.0266943 0.432905 0.5 +-0.0627683 0.04307 0.0276693 0.282402 0.5 +-0.0633729 0.0431313 0.0286681 0.314912 0.432316 +-0.0637535 0.0431846 0.0296789 0.359815 0.5 +-0.064012 0.0432207 0.0306772 0.447279 0.5 +-0.0641848 0.0432086 0.0316934 0.507041 0.5 +-0.0644549 0.043254 0.0326925 0.499983 0.5 +-0.0646832 0.0432745 0.0336962 0.501936 0.5 +-0.0645999 0.0432992 0.0347148 0.378573 0.467057 +-0.0644598 0.0432795 0.035714 0.403979 0.453979 +-0.0911185 0.128332 0.0402364 0.599609 0.5 +-0.0903815 0.130904 0.00623191 0.399157 0.419856 +-0.0909161 0.13091 0.00724248 0.397632 0.5 +-0.079929 0.151371 0.00121035 0.287686 0.5 +-0.0737333 0.15548 -0.0259091 0.60534 0.5 +-0.0772884 0.155547 -0.0128979 0.819451 0.5 +-0.0771312 0.155572 -0.0108986 0.891675 0.5 +-0.091267 0.130919 0.00823808 0.397983 0.5 +-0.0697746 0.169428 -0.052035 0.666416 0.5 +-0.0669961 0.165196 -0.05701 0.44907 0.5 +-0.0916067 0.130926 0.00923792 0.3993 0.5 +-0.0332631 0.177035 -0.011981 0.289539 0.472036 +-0.0532526 0.161216 -0.00188451 0.24056 0.309439 +-0.0919325 0.130933 0.0102425 0.588114 0.5 +-0.0910473 0.139231 0.0181913 0.517639 0.5 +-0.0472127 0.168412 -0.001987 0.282983 0.5 +-0.0921564 0.130934 0.011242 0.439415 0.475756 +-0.0679516 0.170855 -0.0560296 0.674014 0.5 +-0.0926993 0.124215 0.0352716 0.812711 0.5 +-0.0923435 0.115998 0.0113188 0.464605 0.5 +-0.0801061 0.109977 -0.00253557 0.468646 0.5 +-0.0383481 0.0417109 -0.0273458 0.483986 0.5 +-0.0393599 0.0418158 -0.0263353 0.422665 0.5 +-0.0399608 0.0418525 -0.0253044 0.453193 0.5 +-0.0404258 0.0418709 -0.0242648 0.459924 0.5 +-0.0412055 0.0419705 -0.0232873 0.49286 0.5 +-0.0427492 0.0421438 -0.0223063 0.383843 0.5 +-0.0431622 0.0422126 -0.0213185 0.352134 0.364303 +-0.043534 0.0422491 -0.0203181 0.339314 0.38382 +-0.0437917 0.0422818 -0.0193111 0.332861 0.5 +-0.043781 0.0422821 -0.0183128 0.447048 0.464076 +-0.0440333 0.0423079 -0.0173091 0.427488 0.468839 +-0.0445267 0.0423569 -0.0163056 0.416691 0.5 +-0.0447805 0.0423866 -0.0153071 0.314291 0.463724 +-0.0451509 0.0424209 -0.0143059 0.350768 0.439775 +-0.0456134 0.0424471 -0.0132755 0.302153 0.5 +-0.0459591 0.0424584 -0.0122548 0.278938 0.310973 +-0.0460107 0.0426896 -0.0115747 0.340556 0.5 +0.0252372 0.0926012 -0.0220221 0.629056 0.5 +-0.0318469 0.0958266 -0.0236233 0.866024 0.5 +-0.0703317 0.172249 -0.0530308 0.464972 0.47604 +-0.0881725 0.103664 0.0113862 0.747494 0.5 +-0.0844232 0.100698 -0.00156743 0.508762 0.414897 +-0.0842625 0.100702 -0.00260902 0.460552 0.4045 +-0.0611865 0.0441212 -0.00432669 0.439109 0.5 +-0.0627986 0.0441541 -0.00325511 0.437953 0.5 +-0.0637641 0.044271 -0.0022694 0.406379 0.5 +-0.0642751 0.044386 -0.00129652 0.390658 0.415328 +-0.0649698 0.0444252 -0.000282601 0.375653 0.420293 +-0.0658096 0.0445087 0.000718728 0.3549 0.5 +-0.0665472 0.0446244 0.00170489 0.296309 0.5 +-0.0669483 0.0447271 0.0026821 0.35576 0.5 +-0.067208 0.0447917 0.00368814 0.275754 0.432947 +-0.0673041 0.044774 0.00468689 0.329394 0.432286 +-0.0672001 0.044789 0.00569382 0.340506 0.5 +-0.0923833 0.130942 0.0122392 0.458544 0.478323 +-0.0934473 0.129632 0.0182372 0.771966 0.5 +-0.0925249 0.130961 0.0132346 0.721471 0.5 +-0.0926331 0.130966 0.0142325 0.782368 0.5 +-0.0754019 0.151364 -0.0118956 0.830958 0.5 +-0.0753884 0.151441 -0.0109145 0.769588 0.315348 +-0.0755472 0.15139 -0.00989046 0.718492 0.5 +-0.0757827 0.151399 -0.00889222 0.656589 0.5 +-0.0763465 0.151411 -0.00788806 0.588068 0.5 +-0.0926334 0.130971 0.0152338 0.808837 0.5 +-0.0562626 0.0437454 0.0167126 0.353603 0.5 +-0.0548438 0.043635 0.0177242 0.3335 0.5 +-0.0540808 0.0434992 0.0186914 0.57697 0.5 +-0.0542023 0.0435162 0.019691 0.607363 0.5 +-0.0546838 0.0435714 0.0206922 0.522209 0.5 +-0.0556415 0.043673 0.0216881 0.475319 0.5 +-0.0567225 0.043789 0.0226896 0.366072 0.5 +-0.0576821 0.0438911 0.0236882 0.392451 0.5 +-0.0584005 0.0439707 0.0246877 0.371615 0.5 +-0.0594833 0.0440844 0.0256893 0.369764 0.5 +-0.0602045 0.0441634 0.0266895 0.439332 0.5 +-0.0612844 0.044277 0.027687 0.497186 0.5 +-0.0618962 0.0443648 0.0286813 0.302557 0.45843 +-0.0623664 0.0443972 0.0296888 0.568974 0.5 +-0.062996 0.0444935 0.0306768 0.310782 0.5 +-0.0633534 0.0445301 0.031682 0.340383 0.409388 +-0.0636039 0.0445634 0.0326846 0.378657 0.5 +-0.0637123 0.0445754 0.0336875 0.412714 0.5 +-0.0635872 0.0445618 0.0346899 0.399562 0.5 +-0.0634695 0.0445577 0.0356919 0.456506 0.5 +-0.0632416 0.0445478 0.0366988 0.498341 0.5 +-0.0631227 0.0445391 0.0377156 0.382781 0.460385 +-0.0926435 0.13098 0.0162303 0.778323 0.5 +-0.0731279 0.155455 -0.0309078 0.733049 0.5 +-0.0766628 0.155608 -0.00789132 0.883633 0.5 +-0.0501632 0.165541 -0.000963216 0.269716 0.449211 +-0.0927674 0.130992 0.0172311 0.74255 0.5 +-0.0743109 0.165184 -0.0390136 0.467231 0.343536 +-0.0674561 0.1652 -0.0559896 0.438286 0.280549 +-0.0929968 0.130998 0.0182299 0.735639 0.5 +-0.0893902 0.139278 0.0291842 0.614725 0.5 +-0.0900419 0.139254 0.023178 0.7254 0.5 +-0.0737231 0.156865 -0.0279142 0.435716 0.5 +-0.0931085 0.131006 0.0192314 0.780284 0.5 +-0.0930104 0.131018 0.0202297 0.794438 0.5 +-0.013259 0.121231 -0.0103976 0.65404 0.5 +-0.0929853 0.13101 0.0212315 0.805904 0.5 +-0.0142526 0.181479 -0.0279552 0.29695 0.5 +-0.0927296 0.124224 0.0362665 0.823069 0.5 +-0.0917869 0.115969 0.00931507 0.323955 0.5 +-0.0371849 0.0430027 -0.0273252 0.481653 0.5 +-0.0382076 0.0431174 -0.0263315 0.392631 0.5 +-0.0387588 0.0432047 -0.0253505 0.409973 0.344474 +-0.0393167 0.0432044 -0.0243027 0.473861 0.5 +-0.0402206 0.0433137 -0.0233156 0.472501 0.5 +-0.0417953 0.0435116 -0.0223513 0.309533 0.5 +-0.0422557 0.0435263 -0.021317 0.363925 0.5 +-0.0425222 0.0435673 -0.0203211 0.327645 0.45167 +-0.0428901 0.0435976 -0.0193145 0.320211 0.5 +-0.042915 0.0436274 -0.0183221 0.267926 0.5 +-0.0431625 0.0436516 -0.0173214 0.264519 0.393827 +-0.0435198 0.0436724 -0.0163157 0.258597 0.5 +-0.0440204 0.0437247 -0.0153148 0.270399 0.5 +-0.0442728 0.0437529 -0.0143172 0.626595 0.5 +-0.0446156 0.0437685 -0.0132939 0.272229 0.5 +-0.0451547 0.0437693 -0.0122411 0.23601 0.231781 +-0.0323987 0.114036 -0.016697 0.853943 0.5 +-0.0628575 0.0953598 -0.0185102 0.657151 0.5 +-0.0328363 0.0957996 -0.0235469 0.867882 0.5 +0.038759 0.104954 -0.0010414 0.617363 0.444071 +-0.0883984 0.103684 0.0133796 0.793709 0.5 +-0.0858283 0.1008 0.00139713 0.634246 0.5 +-0.0578284 0.0450681 -0.00544742 0.530144 0.5 +-0.0592389 0.0452743 -0.00430196 0.421692 0.5 +-0.0598716 0.0453976 -0.00333599 0.343607 0.5 +-0.0609254 0.0454597 -0.00231147 0.353084 0.5 +-0.0617588 0.0455326 -0.00130544 0.362787 0.5 +-0.0626845 0.0455625 -0.000282658 0.355971 0.445449 +-0.0632995 0.045657 0.000708444 0.340219 0.437074 +-0.0640343 0.0457636 0.00169557 0.301402 0.5 +-0.0646154 0.0457888 0.00269728 0.283043 0.5 +-0.0651006 0.0458549 0.00368955 0.269784 0.439857 +-0.0653495 0.0459059 0.00467835 0.276438 0.5 +-0.0652563 0.0459546 0.00568144 0.246108 0.5 +-0.0645626 0.0459512 0.00669838 0.2394 0.5 +-0.0639717 0.0459278 0.00771742 0.209792 0.5 +-0.0630075 0.0458305 0.00872119 0.285935 0.5 +-0.0928025 0.131035 0.0222365 0.804539 0.5 +-0.0893245 0.139298 0.0361742 0.482878 0.475189 +-0.0926774 0.131034 0.0232376 0.820894 0.5 +-0.0911932 0.147489 0.0241289 0.477185 0.5 +-0.0913426 0.147495 0.0231401 0.478387 0.480384 +-0.0925525 0.131032 0.0242364 0.81818 0.5 +-0.0548269 0.0450002 0.0157095 0.417572 0.5 +-0.0538714 0.0449084 0.0167075 0.361641 0.5 +-0.0530349 0.0448324 0.0176964 0.405163 0.5 +-0.0527601 0.0447727 0.0186838 0.718564 0.5 +-0.0528814 0.0447887 0.0196824 0.735826 0.5 +-0.0532393 0.0448331 0.0206817 0.673047 0.5 +-0.0539631 0.0449066 0.021682 0.5746 0.5 +-0.0548009 0.0449973 0.0226803 0.489231 0.5 +-0.0558801 0.045112 0.0236807 0.465818 0.5 +-0.0566015 0.0451895 0.0246815 0.504043 0.5 +-0.057322 0.0452663 0.0256799 0.463711 0.5 +-0.057924 0.0453324 0.0266819 0.425546 0.5 +-0.0591236 0.0454581 0.0276809 0.3969 0.5 +-0.0599631 0.0455474 0.028679 0.454948 0.5 +-0.0604443 0.0456013 0.0296807 0.469888 0.5 +-0.0610445 0.045667 0.0306816 0.38031 0.5 +-0.0615251 0.0457206 0.0316818 0.285603 0.5 +-0.0621264 0.0457845 0.0326787 0.31044 0.5 +-0.0623633 0.0458155 0.0336786 0.357415 0.5 +-0.0622817 0.0458517 0.0346831 0.275009 0.5 +-0.0621404 0.0458224 0.0356845 0.285775 0.5 +-0.0621205 0.0458041 0.0366793 0.302276 0.5 +-0.0619129 0.0458194 0.037691 0.320594 0.5 +-0.09234 0.131039 0.0252374 0.820289 0.5 +-0.047064 0.168385 -0.0010022 0.273323 0.5 +-0.0738566 0.161044 -0.0339379 0.334404 0.5 +-0.0790056 0.166641 -0.0359617 0.413253 0.5 +-0.0710521 0.173649 -0.0530415 0.359022 0.5 +-0.0394609 0.174124 -0.00699657 0.204191 0.413475 +-0.0895247 0.139293 0.0351741 0.632208 0.472472 +-0.0921191 0.131045 0.0262423 0.582594 0.480475 +-0.0776418 0.158287 -0.0219264 0.406046 0.453872 +-0.0723862 0.156822 -0.0359122 0.517394 0.5 +-0.0918654 0.131039 0.0272344 0.59176 0.5 +-0.0916243 0.131038 0.0282288 0.596089 0.47644 +-0.0914166 0.131046 0.0292353 0.850447 0.5 +-0.0396002 0.125498 -0.0067103 0.646953 0.5 +-0.0533112 0.162693 5.53048e-05 0.251566 0.5 +-0.0340047 0.0386047 -0.0302796 0.405934 0.5 +-0.076428 0.148619 -0.00986569 0.650855 0.5 +-0.0926703 0.124234 0.0402542 0.62869 0.473902 +-0.092816 0.124239 0.0392636 0.870726 0.5 +-0.0908004 0.115922 0.00730178 0.325908 0.5 +-0.0903482 0.115904 0.00630147 0.32281 0.359572 +-0.0377025 0.0444987 -0.0253388 0.364698 0.5 +-0.0382462 0.044597 -0.024375 0.45018 0.412704 +-0.0388087 0.0446425 -0.0234233 0.462629 0.297556 +-0.0405771 0.0447491 -0.0223069 0.379155 0.5 +-0.0411389 0.0448599 -0.0213399 0.301847 0.5 +-0.0413793 0.0448727 -0.0203291 0.366476 0.5 +-0.0417517 0.0449058 -0.0193246 0.35547 0.5 +-0.0420037 0.0449364 -0.0183222 0.370126 0.5 +-0.0421354 0.0449426 -0.0173193 0.224844 0.33752 +-0.0424968 0.0449805 -0.0163196 0.225445 0.5 +-0.0430213 0.0450576 -0.0153284 0.218305 0.5 +-0.0432762 0.0450842 -0.0143236 0.286727 0.384165 +-0.043641 0.0451148 -0.0133235 0.215665 0.411633 +-0.0441044 0.0451364 -0.0122986 0.256311 0.390836 +0.00545294 0.1216 -0.0129959 0.622385 0.5 +0.0130443 0.113867 -0.0167218 0.634759 0.463552 +-0.0744709 0.159641 -0.0299365 0.326989 0.421821 +0.00232953 0.116694 -0.0177181 0.839046 0.5 +-0.0381489 0.0448685 -0.0242105 0.45518 0.425281 +-0.0548596 0.0462919 -0.006395 0.598118 0.5 +-0.0559631 0.0464314 -0.00541258 0.56982 0.5 +-0.0572353 0.0465198 -0.0043437 0.482448 0.5 +-0.0579832 0.0466328 -0.00336399 0.38099 0.5 +-0.0586841 0.0466878 -0.00234651 0.301686 0.5 +-0.059258 0.0467212 -0.00132733 0.289592 0.5 +-0.0598545 0.0467827 -0.000327155 0.277121 0.5 +-0.0605819 0.0468615 0.000669297 0.286734 0.429608 +-0.0611638 0.0468972 0.00167818 0.279394 0.5 +-0.0619808 0.0469192 0.00268857 0.318892 0.5 +-0.0620081 0.0469936 0.00367346 0.263422 0.5 +-0.0622483 0.0470201 0.00467011 0.234258 0.5 +-0.0619093 0.0470515 0.00567882 0.208503 0.5 +-0.0613177 0.0470312 0.00669678 0.213098 0.5 +-0.0911763 0.131044 0.0302322 0.845002 0.5 +-0.0910383 0.131037 0.0312282 0.830786 0.5 +-0.0723661 0.147118 -0.0228625 0.235551 0.5 +-0.0726068 0.147127 -0.0218633 0.245135 0.5 +-0.0729646 0.147133 -0.0208616 0.269633 0.5 +-0.0732036 0.147141 -0.0198634 0.289399 0.5 +-0.0733101 0.14716 -0.0188577 0.194066 0.5 +-0.0908528 0.131057 0.0322319 0.819824 0.5 +-0.0907216 0.131054 0.0332303 0.815922 0.5 +-0.0521757 0.0461175 0.0166821 0.488105 0.5 +-0.0515886 0.0460739 0.0176829 0.484251 0.5 +-0.0515626 0.0460585 0.0186779 0.810221 0.5 +-0.0519222 0.0461016 0.019678 0.802799 0.5 +-0.0522813 0.0461425 0.0206748 0.80523 0.5 +-0.0527617 0.0461943 0.0216742 0.748573 0.5 +-0.0532423 0.046246 0.0226735 0.699424 0.5 +-0.053845 0.0463107 0.0236764 0.581533 0.5 +-0.0548028 0.0464121 0.0246755 0.533089 0.5 +-0.0552814 0.0464664 0.0256754 0.53388 0.5 +-0.0558825 0.0465312 0.026676 0.494384 0.5 +-0.0567215 0.04662 0.0276747 0.419882 0.5 +-0.0576844 0.0467193 0.0286753 0.414423 0.5 +-0.058163 0.0467738 0.0296766 0.425797 0.5 +-0.0588838 0.0468495 0.0306747 0.333487 0.5 +-0.0592465 0.046889 0.0316721 0.254872 0.5 +-0.059725 0.0469427 0.0326718 0.165762 0.5 +-0.0599651 0.0469723 0.0336736 0.160048 0.5 +-0.0604426 0.0470258 0.0346715 0.188183 0.5 +-0.0603219 0.0470192 0.0356706 0.173342 0.5 +-0.0603651 0.0470889 0.0366883 0.128892 0.5 +-0.0906083 0.131058 0.0342318 0.813964 0.5 +-0.0705028 0.159578 -0.0459334 0.51401 0.5 +-0.0734581 0.168 -0.0440151 0.451963 0.347747 +-0.0754377 0.172239 -0.0469918 0.459023 0.5 +-0.07915 0.166638 -0.0349654 0.468839 0.5 +-0.0718839 0.173642 -0.0520314 0.35801 0.435714 +-0.0396036 0.174135 -0.00601981 0.231059 0.340531 +-0.067202 0.162346 -0.0569974 0.525572 0.5 +-0.0517327 0.164109 0.00103678 0.279566 0.5 +-0.0714498 0.15679 -0.0419165 0.723701 0.5 +-0.0564562 0.159872 0.00406757 0.273086 0.5 +-0.0905823 0.131055 0.0352302 0.807877 0.5 +-0.090498 0.131069 0.0362301 0.815488 0.5 +-0.0682771 0.163789 -0.0539724 0.484293 0.5 +-0.053326 0.162717 0.00204741 0.319472 0.5 +-0.0533378 0.162724 0.0010506 0.278306 0.5 +-0.0429656 0.115061 -0.0157138 0.710981 0.5 +-0.0834635 0.136224 -0.000676656 0.653816 0.5 +-0.0787367 0.168047 -0.0389551 0.372381 0.5 +-0.0898014 0.11587 0.00528404 0.544194 0.5 +-0.0816885 0.110103 -0.000571623 0.518903 0.5 +-0.0858155 0.103519 0.00339021 0.489845 0.5 +-0.0387656 0.0459335 -0.0222844 0.374232 0.5 +-0.0396922 0.0460798 -0.021311 0.43511 0.5 +-0.0399677 0.0461402 -0.0203282 0.384837 0.5 +-0.0404433 0.0461446 -0.0193164 0.314259 0.5 +-0.0407154 0.0462046 -0.018322 0.315306 0.5 +-0.0409685 0.0462375 -0.0173222 0.322531 0.5 +-0.0413231 0.0462396 -0.0163116 0.26441 0.5 +-0.0418006 0.0462579 -0.0152948 0.209411 0.5 +-0.0420238 0.0464078 -0.0143471 0.264033 0.5 +-0.0425982 0.0463965 -0.0133084 0.245753 0.5 +-0.0427809 0.0464775 -0.012357 0.260171 0.5 +-0.0432671 0.0465873 -0.0113888 0.300237 0.5 +-0.0378459 0.0971527 -0.0224307 0.663732 0.5 +-0.0896675 0.150196 0.0231327 0.309766 0.473733 +0.0140209 0.113717 -0.0165571 0.643033 0.444487 +-0.0366211 0.124122 -0.00724685 0.547797 0.5 +-0.0539292 0.0475998 -0.00643542 0.570492 0.5 +-0.0551112 0.0477166 -0.00539308 0.550843 0.5 +-0.0559583 0.0478125 -0.00439058 0.523148 0.5 +-0.0566933 0.0478983 -0.00338525 0.454474 0.5 +-0.0572916 0.0479655 -0.00237378 0.313992 0.44563 +-0.0577489 0.0479998 -0.00135721 0.349216 0.5 +-0.0581079 0.0480417 -0.000353036 0.337115 0.5 +-0.0584632 0.0480819 0.000648377 0.311918 0.5 +-0.0587181 0.0481161 0.00163754 0.297057 0.44796 +-0.0588072 0.0481223 0.00266039 0.377785 0.5 +-0.0590287 0.0481317 0.00366474 0.333934 0.5 +-0.0589359 0.0481542 0.00467247 0.380442 0.5 +-0.0587501 0.0482189 0.00571238 0.350812 0.448733 +-0.0584355 0.0482117 0.00674018 0.428566 0.5 +-0.0905552 0.131061 0.0372264 0.822044 0.5 +-0.0904612 0.131068 0.0382266 0.844019 0.5 +-0.0904123 0.13106 0.0392156 0.873112 0.5 +-0.0542457 0.0574384 0.01981 0.100167 0.5 +-0.0756675 0.155622 -0.00260296 0.310035 0.5 +-0.0774249 0.155543 -0.015906 0.470497 0.5 +-0.0910325 0.14477 0.0261671 0.543708 0.5 +-0.0768287 0.154208 -0.00589938 0.80365 0.5 +-0.0863282 0.151358 0.00923307 0.270388 0.5 +-0.0510278 0.0474301 0.0166894 0.606269 0.5 +-0.0506381 0.0473796 0.0176699 0.57817 0.5 +-0.0508913 0.0474088 0.0186488 0.542293 0.411074 +-0.0512486 0.0474505 0.019655 0.496656 0.5 +-0.0517139 0.047497 0.0206563 0.502932 0.5 +-0.0520755 0.0475411 0.0216528 0.508664 0.5 +-0.0525312 0.0475838 0.0226634 0.49566 0.5 +-0.0528967 0.0476266 0.0236645 0.480495 0.5 +-0.0532781 0.0476794 0.0246524 0.447469 0.5 +-0.0537237 0.0477139 0.0256667 0.706269 0.5 +-0.0542034 0.0477679 0.0266683 0.641326 0.5 +-0.0546836 0.0478194 0.0276676 0.579904 0.5 +-0.0552831 0.0478834 0.0286656 0.47003 0.5 +-0.0558854 0.0479468 0.0296668 0.444319 0.5 +-0.0562412 0.0479891 0.0306662 0.321649 0.5 +-0.0567258 0.0480405 0.0316684 0.215402 0.5 +-0.057205 0.0480928 0.032667 0.143135 0.5 +-0.0573263 0.0481094 0.0336642 0 0 +-0.0575663 0.0481384 0.0346641 0 0 +-0.0570855 0.0480965 0.0356642 0 0 +-0.0721444 0.145534 -0.0189034 0.154496 0.5 +-0.085483 0.140457 0.00319222 0.322719 0.5 +-0.0404175 0.171209 -0.00987004 0.395781 0.5 +-0.0870251 0.136346 0.00321516 0.371426 0.5 +-0.0791449 0.166643 -0.0339646 0.464165 0.5 +-0.0734863 0.173577 -0.0500848 0.329738 0.5 +-0.0727332 0.173623 -0.0510446 0.361735 0.465041 +-0.0737921 0.165213 -0.0399888 0.461371 0.5 +0.0483631 0.0628304 -0.00297175 0.47573 0.5 +-0.0695833 0.156717 -0.0509483 0.287951 0.5 +0.0484803 0.0651161 -0.0012457 0.627194 0.441272 +-0.0560047 0.159776 0.00109778 0.198299 0.5 +-0.0739499 0.156872 -0.0269145 0.342597 0.481478 +-0.0710297 0.16381 -0.0459687 0.37082 0.5 +-0.0167629 0.120643 -0.00969861 0.756324 0.5 +0.0287509 0.0911639 -0.0204971 0.721176 0.5 +-0.0778454 0.158312 -0.0179205 0.516816 0.5 +-0.0131928 0.11434 -0.0171133 0.634887 0.5 +-0.0876158 0.136354 0.00421533 0.350454 0.5 +-0.0297371 0.179987 -0.0120259 0.241679 0.5 +-0.0889882 0.115854 0.0042936 0.571492 0.5 +-0.0825062 0.110166 0.000353593 0.404124 0.484693 +-0.0354973 0.0470472 -0.0223112 0.300811 0.5 +-0.0361509 0.0471597 -0.0213258 0.299501 0.5 +-0.0366019 0.0472824 -0.0203909 0.390375 0.5 +-0.0372775 0.0472266 -0.0193178 0.317166 0.5 +-0.0378922 0.04725 -0.0183117 0.316678 0.5 +-0.0386245 0.0472623 -0.0172994 0.306553 0.5 +-0.0390182 0.0473551 -0.0162983 0.281875 0.5 +-0.0725348 0.149777 -0.0387435 0.150205 0.5 +-0.0792974 0.15265 0.00222093 0.202929 0.5 +-0.0764328 0.147234 -0.00786196 0.388419 0.464141 +-0.0414163 0.0476371 -0.0122303 0.235109 0.5 +-0.0427281 0.0478381 -0.0112773 0.403695 0.5 +-0.0924128 0.11471 0.0173177 0.718162 0.5 +-0.0137302 0.107232 -0.0215702 0.83646 0.5 +-0.0084105 0.095275 -0.0329664 0.689832 0.5 +0.0149683 0.113515 -0.0163113 0.647899 0.5 +0.0195092 0.092819 -0.0242669 0.636237 0.5 +-0.0545162 0.049049 -0.0054035 0.528654 0.5 +-0.0553413 0.0491317 -0.00437815 0.504361 0.5 +-0.0560508 0.049202 -0.00336342 0.451879 0.5 +-0.0566837 0.0492811 -0.00237706 0.333981 0.5 +-0.0570669 0.0493259 -0.00137722 0.406384 0.353106 +-0.0575339 0.0493779 -0.000368538 0.411334 0.5 +-0.0577765 0.0494102 0.000630355 0.411993 0.454223 +-0.0580135 0.04944 0.00163802 0.405438 0.467743 +-0.058126 0.0494622 0.00265482 0.588841 0.5 +-0.0581074 0.0494572 0.00366497 0.581668 0.5 +-0.0580456 0.0494852 0.00468232 0.447234 0.5 +-0.0579078 0.0494657 0.0056917 0.505122 0.459885 +-0.0575671 0.0494422 0.00671449 0.574414 0.449279 +-0.0829782 0.147345 0.00316952 0.660008 0.5 +-0.0903381 0.144712 0.0141544 0.377145 0.45756 +-0.0908558 0.14471 0.0151666 0.392343 0.5 +-0.091229 0.14471 0.0161551 0.394328 0.5 +-0.0914681 0.144718 0.0171554 0.589347 0.5 +-0.0916784 0.144722 0.0181573 0.473958 0.5 +-0.091603 0.144731 0.0191577 0.533768 0.457132 +-0.0933816 0.129671 0.0222434 0.833483 0.5 +-0.050859 0.0487888 0.015667 0.78315 0.5 +-0.0503124 0.0487527 0.0166746 0.73783 0.5 +-0.0502775 0.0487457 0.0176637 0.667169 0.5 +-0.0505039 0.0487703 0.0186583 0.601918 0.5 +-0.0507798 0.0488052 0.0196439 0.58018 0.5 +-0.0512571 0.0488673 0.0206327 0.559033 0.397121 +-0.0517309 0.0489114 0.0216412 0.563518 0.5 +-0.0520878 0.0489475 0.0226481 0.578672 0.393517 +-0.0524468 0.0489914 0.023647 0.568062 0.5 +-0.0527883 0.0490273 0.0246529 0.563259 0.5 +-0.0530142 0.0490552 0.0256583 0.533611 0.5 +-0.0531367 0.0490718 0.026657 0.507381 0.5 +-0.0534716 0.0490986 0.0276613 0.457124 0.5 +-0.0534917 0.0491191 0.0286591 0.444129 0.5 +-0.0537144 0.0491343 0.0296614 0.367564 0.5 +-0.0538363 0.0491492 0.0306601 0.287382 0.5 +-0.0537085 0.0491368 0.0316573 0.226432 0.5 +-0.0537204 0.0491564 0.0326591 0.175254 0.5 +-0.0534816 0.0491363 0.0336594 0.0939823 0.5 +-0.0528781 0.0490838 0.0346622 0.104325 0.5 +-0.0522791 0.0490314 0.0356585 0.114147 0.5 +-0.0735722 0.148626 -0.0268487 0.267484 0.5 +-0.07512 0.161006 -0.0309706 0.423615 0.5 +-0.0879913 0.136375 0.00520661 0.348079 0.5 +-0.0748045 0.167943 -0.0420608 0.404699 0.5 +-0.0772499 0.172214 -0.0459981 0.270817 0.44932 +-0.0790281 0.166651 -0.0329632 0.452074 0.5 +-0.07763 0.165322 -0.0259443 0.36649 0.5 +-0.0733158 0.165215 -0.0409863 0.459841 0.5 +-0.0701046 0.156748 -0.048906 0.401829 0.5 +-0.0697681 0.156742 -0.0499137 0.397542 0.5 +-0.0716519 0.156794 -0.0409079 0.749187 0.5 +-0.0726107 0.156829 -0.0349095 0.512888 0.5 +-0.073056 0.163825 -0.0399663 0.361874 0.5 +-0.0198254 0.120831 -0.00989132 0.696256 0.5 +0.0177118 0.0944604 -0.0240064 0.793707 0.5 +0.0187635 0.105558 -0.0177865 0.859301 0.5 +-0.0779406 0.158305 -0.0189233 0.498414 0.425008 +0.0463602 0.0692197 0.00260588 0.587272 0.5 +0.0283679 0.103615 -0.0157324 0.638105 0.387519 +0.029273 0.103313 -0.0154093 0.671378 0.386891 +-0.0337147 0.120592 -0.00951232 0.568666 0.5 +-0.0305493 0.0479587 -0.0242789 0.250553 0.5 +-0.0315627 0.048073 -0.0232988 0.272345 0.359352 +-0.0321132 0.0482449 -0.0223421 0.220607 0.5 +-0.0327389 0.0482896 -0.0213368 0.198641 0.5 +-0.0333755 0.0483636 -0.0203394 0.213951 0.5 +-0.0338728 0.0483909 -0.0193366 0.239575 0.5 +-0.0346068 0.0483825 -0.0183276 0.195971 0.5 +-0.0351198 0.0484277 -0.0173281 0.265727 0.5 +-0.0361997 0.0483313 -0.0162949 0.159349 0.5 +-0.0360083 0.0485228 -0.0153235 0.161106 0.5 +-0.0366056 0.0484481 -0.0142844 0.109826 0.5 +-0.0365564 0.0488017 -0.0133944 0.127078 0 +0.019292 0.0988007 -0.0225555 0.750392 0.5 +-0.0407044 0.0491484 -0.0113833 0.555432 0.5 +-0.0892062 0.128127 0.00426293 0.652588 0.5 +0.0223945 0.0860763 -0.025219 0.719265 0.5 +-0.0111844 0.110115 -0.0206413 0.785262 0.5 +-0.0194344 0.115555 -0.0163687 0.750445 0.5 +-0.0531678 0.0503031 -0.00638771 0.527245 0.5 +-0.0542668 0.0504201 -0.00539584 0.514955 0.5 +-0.0550517 0.0504886 -0.00434688 0.478204 0.285809 +-0.0556004 0.0505584 -0.00338763 0.34024 0.441427 +-0.0562999 0.0506286 -0.00237306 0.404618 0.455546 +-0.056691 0.0506774 -0.00137882 0.41034 0.5 +-0.0570589 0.0507155 -0.000374425 0.421375 0.365231 +-0.0574282 0.0507609 0.000628334 0.45026 0.5 +-0.0575581 0.0507849 0.00163524 0.658325 0.5 +-0.0577521 0.050802 0.00265023 0.68333 0.5 +-0.0576505 0.0508003 0.0036576 0.694703 0.5 +-0.0575086 0.0507939 0.00466306 0.701783 0.5 +-0.0573191 0.0507885 0.00568774 0.542919 0.471298 +-0.0569855 0.0507747 0.00670607 0.631216 0.5 +-0.0745011 0.151286 -0.0298782 0.453051 0.5 +-0.0785959 0.152697 0.00118419 0.200316 0.5 +-0.0918002 0.143353 0.0191654 0.545416 0.5 +-0.0919004 0.143349 0.0181646 0.490239 0.5 +-0.0917872 0.143341 0.0171661 0.593701 0.5 +-0.0915486 0.143335 0.0161726 0.422694 0.432967 +-0.0910658 0.143334 0.0151805 0.56159 0.5 +-0.0707001 0.15817 -0.0449161 0.496638 0.5 +-0.050356 0.0501549 0.0156949 0.871805 0.5 +-0.0500679 0.0501277 0.0166633 0.825995 0.5 +-0.050165 0.0501393 0.0176523 0.730018 0.5 +-0.0503924 0.0501648 0.0186468 0.671309 0.5 +-0.0506717 0.0501974 0.0196351 0.629493 0.5 +-0.0511359 0.0502476 0.0206335 0.606474 0.5 +-0.0515138 0.0502892 0.0216268 0.62229 0.5 +-0.0518625 0.050332 0.0226347 0.640601 0.5 +-0.0521106 0.0503642 0.0236349 0.647573 0.5 +-0.052431 0.0503969 0.0246465 0.631751 0.5 +-0.0525544 0.0504168 0.0256484 0.637839 0.5 +-0.0526579 0.0504274 0.026653 0.628907 0.5 +-0.0526608 0.0504363 0.0276515 0.620133 0.5 +-0.0526515 0.0504392 0.0286525 0.615489 0.5 +-0.0525421 0.050441 0.0296546 0.578001 0.5 +-0.0524537 0.0504524 0.0306643 0.334533 0.5 +-0.0522987 0.0504261 0.0316576 0.283556 0.457355 +-0.0772757 0.148645 -0.0058688 0.411783 0.5 +-0.0761778 0.148614 -0.0108668 0.638818 0.5 +-0.0760388 0.148613 -0.0118618 0.525648 0.5 +-0.0823359 0.140394 0.000222625 0.604366 0.5 +-0.0806782 0.140364 -0.00279029 0.666008 0.5 +-0.0787812 0.166656 -0.0319662 0.588556 0.5 +-0.04134 0.171235 -0.00891614 0.411905 0.5 +-0.0792807 0.167978 -0.037009 0.371357 0.460079 +-0.0917143 0.128313 0.0332436 0.848572 0.5 +-0.0500433 0.165539 -0.00195268 0.264092 0.43877 +-0.0779524 0.165292 -0.0269536 0.415867 0.460113 +-0.072846 0.165216 -0.0419869 0.462643 0.5 +0.0316481 0.100683 -0.014625 0.746096 0.5 +-0.0517306 0.164095 4.31123e-05 0.237233 0.439898 +-0.0688973 0.120914 -0.00896239 0.775287 0.5 +-0.0787586 0.163869 -0.0289482 0.462213 0.5 +-0.0787597 0.163865 -0.0299483 0.467782 0.5 +-0.0830301 0.110196 0.00131843 0.481449 0.5 +-0.0368548 0.0985914 -0.0223265 0.674753 0.5 +-0.0234485 0.122824 -0.00599554 0.465114 0.5 +0.0234826 0.113521 -0.012343 0.540392 0.5 +0.00716942 0.125754 -0.00749941 0.698867 0.5 +-0.0320291 0.108616 -0.01899 0.867989 0.5 +0.0335254 0.101204 -0.0131717 0.739286 0.5 +0.0343242 0.100732 -0.0126444 0.747145 0.5 +-0.0772978 0.0685904 0.0138065 0.738361 0.5 +-0.0285919 0.0494861 -0.0235098 0.356317 0.5 +-0.0293549 0.0495451 -0.022456 0.328722 0.29233 +-0.0301219 0.0493909 -0.0214267 0.302158 0.341656 +-0.0306153 0.0495713 -0.0203608 0.306544 0.5 +-0.031608 0.0496402 -0.0193495 0.225021 0.5 +-0.0321125 0.0496937 -0.0183514 0.307037 0.5 +-0.0318598 0.0496767 -0.0173511 0.211284 0.5 +-0.0323685 0.0497273 -0.0163483 0.101453 0.5 +-0.0330003 0.0497903 -0.0153502 0.091875 0.5 +-0.0333802 0.0498304 -0.01435 0.162078 0.5 +-0.0340151 0.0498932 -0.013349 0.157996 0.5 +-0.034733 0.0498868 -0.0123113 0.143035 0.134512 +0.0261457 0.100404 -0.0183041 0.694826 0.5 +0.000886159 0.12297 -0.0104051 0.601594 0.5 +0.0453693 0.0693828 0.00245115 0.427946 0.465211 +0.0338375 0.109906 -0.00644408 0.53491 0.5 +-0.00992774 0.110288 -0.021044 0.782384 0.5 +-0.0529425 0.0516633 -0.00638853 0.468981 0.456376 +-0.0541007 0.0517729 -0.00535724 0.475374 0.462024 +-0.0548347 0.0518559 -0.00436961 0.346993 0.468372 +-0.0554751 0.0519418 -0.00338574 0.431738 0.462373 +-0.05597 0.0519966 -0.00239063 0.420849 0.403701 +-0.0564446 0.0520481 -0.00138381 0.417159 0.5 +-0.0569078 0.052097 -0.000371255 0.446271 0.5 +-0.057093 0.0521243 0.00061739 0.476027 0.5 +-0.0573264 0.0521522 0.00163442 0.732636 0.5 +-0.057408 0.0521648 0.00264452 0.77234 0.5 +-0.057288 0.0521607 0.00365094 0.780118 0.5 +-0.0570587 0.0521462 0.00466373 0.771523 0.5 +-0.0568525 0.0521385 0.00567837 0.557435 0.5 +-0.0566078 0.0521283 0.00668717 0.607616 0.463105 +-0.0562674 0.0521079 0.00770249 0.640238 0.449843 +0.0321311 0.10568 -0.0119259 0.653044 0.5 +-0.0463694 0.113628 -0.0162147 0.732291 0.5 +-0.0719603 0.0681626 0.0276375 0.648248 0.253301 +-0.0718839 0.142969 -0.00986002 0.157591 0.5 +-0.072621 0.142849 -0.00891964 0.187592 0.383914 +-0.0734528 0.143001 -0.00787011 0.349216 0.5 +-0.0356565 0.122935 -0.00798984 0.432834 0.5 +-0.0756983 0.148597 -0.0138657 0.499961 0.5 +-0.0499126 0.0515141 0.0166499 0.697804 0.5 +-0.0501479 0.0515412 0.017644 0.645948 0.5 +-0.0503178 0.0515583 0.0186309 0.582456 0.5 +-0.0506614 0.0515945 0.0196285 0.554061 0.337397 +-0.051023 0.051637 0.0206282 0.553661 0.5 +-0.0513914 0.0516798 0.0216239 0.558427 0.5 +-0.0517393 0.0517191 0.022632 0.670696 0.5 +-0.0519836 0.0517496 0.0236325 0.702185 0.5 +-0.0522094 0.0517797 0.0246371 0.70389 0.5 +-0.0523159 0.0517943 0.0256431 0.724334 0.5 +-0.0523188 0.0518 0.026645 0.735814 0.5 +-0.0522959 0.0518057 0.0276471 0.733268 0.5 +-0.0521768 0.0517998 0.0286453 0.742314 0.5 +-0.0520592 0.0517918 0.0296489 0.514265 0.5 +-0.0518346 0.0517811 0.0306554 0.457898 0.5 +-0.0206234 0.0950485 -0.0308006 0.767095 0.5 +-0.00265934 0.098112 -0.0279111 0.695031 0.5 +0.0288107 0.113482 -0.00830654 0.646472 0.5 +-0.000346509 0.12561 -0.00723663 0.63527 0.5 +-0.0811978 0.140383 -0.00182247 0.694051 0.5 +-0.0758985 0.159659 -0.0269354 0.410729 0.5 +-0.0735846 0.159652 -0.032921 0.436422 0.5 +-0.0733446 0.159645 -0.0339252 0.452756 0.5 +-0.0632121 0.172304 -0.0615699 0.35719 0.5 +-0.0821064 0.110205 0.0294137 0.444218 0.5 +-0.0589036 0.112559 -0.0155981 0.454219 0.5 +-0.0745628 0.173554 -0.0490908 0.378333 0.5 +-0.0843958 0.13208 -0.00165487 0.608128 0.5 +-0.0736747 0.166615 -0.0419946 0.460945 0.5 +-0.0670834 0.168031 -0.0569976 0.515924 0.5 +-0.0722291 0.166627 -0.044985 0.478255 0.401214 +-0.0339085 0.177047 -0.0109944 0.337868 0.5 +-0.0718751 0.150885 -0.0428436 0.145352 0.314361 +0.0269727 0.112042 -0.0107557 0.555755 0.45158 +0.0118527 0.105542 -0.0197545 0.53908 0.5 +-0.0330922 0.108613 -0.0189923 0.667102 0.5 +-0.0340031 0.1089 -0.0192874 0.708148 0.5 +-0.0308889 0.108768 -0.0191524 0.856926 0.5 +0.0251623 0.118606 -0.00580398 0.608433 0.5 +-0.0274704 0.0506795 -0.0243965 0.366688 0.5 +-0.028252 0.050761 -0.0234049 0.33413 0.5 +-0.0289103 0.0508426 -0.0224168 0.374964 0.5 +-0.0292764 0.0508797 -0.0213979 0.42849 0.5 +-0.0297126 0.0508986 -0.0203549 0.918185 0.5 +-0.0297131 0.0509006 -0.0193584 0.885595 0.5 +-0.0300925 0.0509394 -0.0183595 0.662925 0.5 +-0.0305996 0.0509893 -0.0173575 0.50334 0.5 +-0.0307264 0.0510087 -0.0163552 0.332941 0.5 +-0.0311133 0.0510509 -0.015361 0.184109 0.41287 +-0.0313625 0.0510794 -0.0143586 0.186293 0.5 +-0.0316347 0.0511137 -0.0133654 0.198562 0.5 +-0.0321386 0.0511687 -0.0124242 0.108709 0 +-0.0899797 0.128138 0.00527223 0.600503 0.5 +0.0101258 0.125306 -0.00703851 0.543238 0.5 +0.0344124 0.0957227 -0.013333 0.740401 0.5 +-0.0579856 0.116646 -0.0132522 0.568329 0.5 +-0.00878563 0.110674 -0.0212403 0.449629 0.5 +-0.0530895 0.0530892 -0.00643833 0.630461 0.5 +-0.0541101 0.0531993 -0.0053725 0.676151 0.5 +-0.0548606 0.0532734 -0.00439052 0.450931 0.5 +-0.0554557 0.0533368 -0.00338183 0.445744 0.5 +-0.0558448 0.0533792 -0.00239414 0.441078 0.409633 +-0.0563149 0.0534289 -0.00138708 0.441145 0.426186 +-0.0567014 0.0534733 -0.0003903 0.450158 0.5 +-0.056967 0.0535025 0.000612409 0.483019 0.5 +-0.0570931 0.0535244 0.00162534 0.756475 0.5 +-0.0571034 0.0535249 0.00264062 0.698192 0.5 +-0.0569845 0.0535242 0.00365398 0.497216 0.478198 +-0.0567588 0.053509 0.00466959 0.479397 0.464507 +-0.0565132 0.053486 0.0056729 0.477152 0.5 +-0.0562701 0.0534697 0.00668599 0.509648 0.5 +-0.055978 0.0534457 0.00767233 0.547146 0.42152 +-0.0555067 0.053407 0.0086882 0.44763 0.5 +-0.0718277 0.141507 -0.00801564 0.302175 0.5 +-0.0852791 0.132127 -0.000702015 0.685546 0.5 +-0.0908661 0.142018 0.0261694 0.701503 0.5 +-0.0322652 0.177059 -0.0129859 0.409091 0.5 +-0.0860119 0.132159 0.00027761 0.672356 0.5 +-0.0865336 0.141884 0.00820248 0.543144 0.5 +-0.0728796 0.151218 -0.0388899 0.314055 0.5 +-0.0498767 0.0529199 0.0166388 0.492255 0.5 +-0.0501571 0.0529434 0.0176286 0.467161 0.310284 +-0.0504372 0.0529682 0.0186225 0.442481 0.5 +-0.0507826 0.0530079 0.0196214 0.43262 0.5 +-0.0510483 0.053037 0.0206135 0.443812 0.5 +-0.0513902 0.0530791 0.0216216 0.550658 0.5 +-0.051623 0.0531083 0.0226238 0.588125 0.5 +-0.0519529 0.0531525 0.0236322 0.650016 0.300364 +-0.0521038 0.0531706 0.024633 0.676062 0.5 +-0.0521911 0.0531856 0.0256383 0.79635 0.5 +-0.0521805 0.0531921 0.0266366 0.824859 0.5 +-0.052068 0.0531865 0.02764 0.826806 0.5 +-0.0519782 0.0531903 0.0286494 0.581515 0.47764 +-0.0518133 0.0531756 0.0296409 0.602664 0.470358 +-0.0515376 0.053149 0.0306286 0.536722 0.5 +-0.0911321 0.146088 0.0161475 0.425759 0.5 +-0.085237 0.147388 0.00618456 0.604825 0.5 +-0.0776508 0.152845 -0.000892884 0.645126 0.5 +-0.0776289 0.158329 -0.0159141 0.56539 0.5 +-0.0709701 0.155369 -0.0459101 0.407793 0.5 +-0.0711896 0.155374 -0.0449035 0.430007 0.5 +-0.0713282 0.155382 -0.0439108 0.561329 0.5 +-0.0730243 0.159629 -0.0349322 0.454881 0.5 +-0.0457839 0.11676 -0.0154906 0.657934 0.5 +-0.0372368 0.172627 -0.0118528 0.381704 0.5 +-0.0383111 0.172675 -0.0109203 0.391521 0.5 +-0.076914 0.17371 -0.0479126 0.275624 0.5 +-0.0689178 0.168027 -0.0530164 0.487503 0.4609 +-0.0742721 0.166608 -0.0409997 0.446354 0.5 +-0.0694963 0.16803 -0.0520069 0.473404 0.5 +-0.0726162 0.166612 -0.0440006 0.47678 0.5 +-0.0346349 0.176996 -0.009991 0.277133 0.5 +-0.0714142 0.166619 -0.0469903 0.372089 0.321179 +-0.0272958 0.178509 -0.0169626 0.478984 0.321271 +-0.0707159 0.179287 -0.0569572 0.285128 0.428082 +0.0208126 0.114503 -0.0133998 0.502097 0.441967 +0.0226051 0.113885 -0.0127298 0.548039 0.5 +0.0243113 0.119024 -0.0062727 0.519335 0.469554 +-0.0349471 0.109117 -0.019515 0.732851 0.420603 +0.0451585 0.0670735 0.000845212 0.58943 0.445657 +-0.0262156 0.0519422 -0.0264212 0.389566 0.447391 +-0.0270871 0.0520359 -0.0253933 0.464312 0.5 +-0.0277337 0.0521019 -0.0243965 0.402567 0.5 +-0.028354 0.0521667 -0.0233844 0.386212 0.5 +-0.0289948 0.0522303 -0.0223864 0.44991 0.5 +-0.0293388 0.0522666 -0.0213646 0.929158 0.5 +-0.029592 0.0522946 -0.0203629 0.984863 0.5 +-0.0297187 0.0523119 -0.0193651 0.970234 0.5 +-0.0299722 0.0523401 -0.0183637 0.971375 0.5 +-0.0302252 0.0523701 -0.0173649 0.770997 0.5 +-0.0304781 0.0523954 -0.0163632 0.58947 0.5 +-0.0306051 0.0524133 -0.0153638 0.581021 0.5 +-0.0308908 0.0524482 -0.0143777 0.328442 0.5 +-0.0314187 0.0525029 -0.0133876 0.25311 0.5 +-0.0319013 0.0525534 -0.0124561 0.175588 0.5 +-0.0906583 0.12815 0.00627512 0.568814 0.5 +0.0239815 0.12134 -0.00278507 0.61768 0.397844 +0.0360129 0.0947297 -0.0122566 0.718849 0.5 +-0.0534255 0.124412 -0.00739059 0.791476 0.5 +-0.0146115 0.109635 -0.0201085 0.630253 0.463696 +-0.0534778 0.0544994 -0.00645482 0.444614 0.5 +-0.0542529 0.0545999 -0.00539104 0.653978 0.5 +-0.0548571 0.0546624 -0.0043828 0.45293 0.457275 +-0.0553478 0.054711 -0.00338754 0.461581 0.5 +-0.0557401 0.0547516 -0.00240302 0.44865 0.5 +-0.0562131 0.054804 -0.00139993 0.45668 0.412922 +-0.0565994 0.0548437 -0.000400453 0.462604 0.5 +-0.0568794 0.0548721 0.000601057 0.410891 0.5 +-0.0569665 0.0548885 0.00161507 0.596154 0.5 +-0.0569818 0.0548922 0.00263009 0.631793 0.5 +-0.0569142 0.0548839 0.00364185 0.398305 0.5 +-0.0567448 0.0548796 0.00465654 0.379481 0.450195 +-0.0565139 0.0548538 0.00566103 0.365427 0.5 +-0.0562967 0.0548357 0.00668262 0.380756 0.5 +-0.0559148 0.0548054 0.00768529 0.340882 0.435064 +-0.0555013 0.0547806 0.00866941 0.333069 0.5 +-0.0548009 0.0547174 0.00969263 0.369768 0.5 +-0.0540496 0.0546601 0.0106814 0.289668 0.5 +-0.0887393 0.0928617 0.00944255 0.782861 0.5 +-0.0886141 0.0928486 0.00844707 0.770736 0.5 +-0.0935499 0.129634 0.0192397 0.805343 0.5 +-0.0705717 0.158164 -0.0459142 0.685542 0.5 +-0.0834736 0.114211 -0.000781836 0.393319 0.5 +-0.0502601 0.0543084 0.0166402 0.315819 0.5 +-0.0505534 0.0543594 0.017626 0.291174 0.5 +-0.0507038 0.0543653 0.0186143 0.298867 0.5 +-0.0510317 0.0544187 0.0196187 0.304691 0.5 +-0.0512591 0.0544504 0.0206222 0.435891 0.5 +-0.0514909 0.0544833 0.0216233 0.472803 0.5 +-0.0517378 0.0545135 0.0226244 0.508944 0.5 +-0.0519166 0.0545256 0.0236155 0.556574 0.5 +-0.0520389 0.0545474 0.0246248 0.724797 0.5 +-0.0521172 0.0545658 0.0256302 0.758549 0.5 +-0.0520861 0.0545712 0.0266312 0.880699 0.5 +-0.0519883 0.0545681 0.0276385 0.616842 0.5 +-0.0518469 0.0545626 0.0286406 0.6395 0.472803 +-0.0516 0.0545447 0.0296397 0.64494 0.47585 +-0.0513204 0.0545255 0.0306253 0.658601 0.5 +-0.089646 0.0929438 0.0164332 0.602441 0.5 +-0.0861662 0.147397 0.00721409 0.622225 0.5 +-0.0731886 0.149857 -0.036868 0.214916 0.5 +-0.0864372 0.14049 0.00618869 0.540467 0.5 +-0.0892506 0.151522 0.0201032 0.280556 0.5 +-0.088924 0.151541 0.0211005 0.283048 0.5 +-0.0725251 0.155433 -0.0349062 0.779898 0.5 +-0.0728889 0.159628 -0.0359308 0.372829 0.5 +0.0130795 0.0927597 -0.0282037 0.529453 0.5 +-0.0393243 0.172677 -0.00992732 0.371622 0.5 +-0.0491873 0.165537 -0.00392571 0.406703 0.5 +-0.0779905 0.173544 -0.0470087 0.321497 0.365258 +-0.0724818 0.165221 -0.0429802 0.470027 0.42705 +0.0333229 0.0997779 -0.013667 0.764078 0.5 +-0.051609 0.164108 -0.000948719 0.277357 0.5 +-0.0771326 0.163938 -0.0219397 0.619271 0.5 +-0.0782928 0.163856 -0.0319501 0.38144 0.5 +-0.0786152 0.163841 -0.0309629 0.42257 0.45528 +-0.026226 0.178551 -0.0179991 0.474168 0.5 +-0.069435 0.179317 -0.0579979 0.25851 0.5 +-0.0884616 0.136381 0.00620417 0.497282 0.406532 +-0.020729 0.181491 -0.0220031 0.533437 0.5 +0.0113952 0.116794 -0.0158535 0.722539 0.5 +0.0217183 0.114203 -0.013082 0.529959 0.5 +-0.00542543 0.120041 -0.0132322 0.62744 0.5 +-0.0359339 0.109235 -0.0196158 0.690463 0.5 +0.029581 0.0907082 -0.0200166 0.731549 0.5 +-0.0255625 0.0532992 -0.0274025 0.453832 0.458106 +-0.0265758 0.0533991 -0.0263925 0.571677 0.5 +-0.0273632 0.0534705 -0.0254085 0.52809 0.5 +-0.0278785 0.0535209 -0.0244081 0.505691 0.5 +-0.0283702 0.0535742 -0.0233936 0.481043 0.5 +-0.0289733 0.0536405 -0.0223788 0.536597 0.5 +-0.0296157 0.053701 -0.0213818 0.523468 0.5 +-0.0298753 0.0537337 -0.0203803 0.532846 0.455024 +-0.0301034 0.0537602 -0.0193727 0.97289 0.5 +-0.0302302 0.0537755 -0.0183734 0.981225 0.5 +-0.0303571 0.0537911 -0.0173707 0.785719 0.5 +-0.0304827 0.0538056 -0.016375 0.789607 0.5 +-0.0307362 0.053835 -0.015374 0.76205 0.5 +-0.0312435 0.0538841 -0.0143722 0.546754 0.5 +-0.0315509 0.053914 -0.013393 0.230506 0.5 +-0.055732 0.115927 -0.0145408 0.464136 0.474515 +-0.091226 0.128161 0.00727002 0.417825 0.5 +0.0368044 0.0942002 -0.0116901 0.595795 0.5 +0.0313221 0.0899509 -0.0192278 0.758616 0.418247 +-0.0156647 0.109623 -0.0201068 0.674169 0.5 +-0.0528315 0.0558373 -0.00742005 0.454728 0.5 +-0.053816 0.0559281 -0.00642904 0.683087 0.5 +-0.054537 0.0560032 -0.00541843 0.618759 0.5 +-0.0550269 0.0560444 -0.00440953 0.447462 0.381952 +-0.0553956 0.0560936 -0.00341211 0.450877 0.5 +-0.0557658 0.0561367 -0.00241411 0.387773 0.5 +-0.0562219 0.0560519 -0.00142054 0.394714 0.313496 +-0.0566027 0.0562228 -0.000407584 0.401829 0.5 +-0.0568935 0.0562594 0.000567085 0.328771 0.427166 +-0.057137 0.0562876 0.0015684 0.321127 0.445217 +-0.05709 0.0562779 0.00261705 0.455114 0.5 +-0.0570496 0.0562866 0.00362097 0.464207 0.5 +-0.0569735 0.056267 0.00463231 0.285368 0.5 +-0.0568589 0.0562507 0.00563881 0.285517 0.5 +-0.056621 0.0562362 0.00665228 0.293131 0.5 +-0.0563207 0.0562341 0.00763908 0.30319 0.5 +-0.0558064 0.0562012 0.00862658 0.249589 0.447958 +-0.0551543 0.0561755 0.00960447 0.21716 0.5 +-0.0544145 0.0561001 0.0105768 0.210989 0.348692 +-0.05375 0.0560385 0.0116204 0 0 +-0.052909 0.0559665 0.0126205 0 0 +-0.052188 0.0559056 0.0136207 0 0 +-0.0515872 0.0558557 0.0146208 0 0 +-0.0870302 0.13217 0.00132034 0.687587 0.5 +-0.0879876 0.132208 0.00230713 0.659649 0.5 +-0.0887459 0.132238 0.00325707 0.611687 0.5 +-0.0894337 0.132252 0.00424863 0.412748 0.5 +-0.0898976 0.132262 0.00523931 0.411479 0.5 +-0.0902473 0.132271 0.00623314 0.409706 0.5 +-0.090578 0.13228 0.00723516 0.410551 0.373505 +-0.0909281 0.132287 0.0082314 0.58139 0.5 +-0.0911632 0.132299 0.00922827 0.583621 0.5 +-0.0913959 0.132306 0.0102259 0.596153 0.5 +-0.0916136 0.132311 0.0112256 0.63566 0.5 +-0.0520943 0.0559627 0.0266271 0.751561 0.5 +-0.0520552 0.0559741 0.0276222 0.534574 0.5 +-0.0518399 0.0559545 0.028629 0.624953 0.471077 +-0.0515738 0.0559395 0.0296214 0.650918 0.47432 +-0.0917522 0.132325 0.0122241 0.652569 0.5 +-0.0920259 0.132307 0.0132318 0.692512 0.5 +-0.0872007 0.147399 0.00826035 0.425598 0.5 +-0.088267 0.147416 0.00925394 0.447568 0.5 +-0.092269 0.124069 0.00827163 0.394214 0.5 +-0.0735938 0.149845 -0.0348818 0.230583 0.5 +-0.0921542 0.132321 0.0142287 0.74179 0.5 +-0.0732612 0.155462 -0.02991 0.696275 0.5 +-0.0702704 0.159573 -0.0469358 0.501413 0.5 +-0.0662858 0.172388 -0.0591199 0.638074 0.5 +-0.0401081 0.172699 -0.00896014 0.465514 0.5 +-0.0484709 0.165547 -0.00491912 0.411958 0.5 +-0.0475211 0.165506 -0.00586183 0.298963 0.5 +-0.0782079 0.165287 -0.027954 0.40931 0.465573 +-0.0886846 0.136388 0.00720801 0.541889 0.5 +-0.0889001 0.136394 0.00820864 0.565088 0.5 +-0.0716942 0.1568 -0.0399156 0.545882 0.5 +-0.0727656 0.156832 -0.0339136 0.712247 0.5 +-0.0726963 0.163825 -0.0409661 0.359694 0.462783 +-0.0282073 0.178522 -0.0159874 0.469207 0.5 +-0.0719403 0.179282 -0.0559874 0.236739 0.5 +-0.0199542 0.180019 -0.0229778 0.405067 0.5 +-0.0197362 0.181499 -0.0230211 0.434383 0.5 +-0.0187788 0.181486 -0.0239544 0.377675 0.480483 +0.019893 0.114777 -0.0136897 0.497701 0.5 +-0.0107414 0.120001 -0.0131465 0.779804 0.5 +-0.0033398 0.119986 -0.0131833 0.845751 0.5 +0.0217844 0.118301 -0.00950952 0.58903 0.5 +-0.0158888 0.123338 -0.00654807 0.537021 0.5 +-0.024936 0.0546494 -0.0284077 0.491441 0.5 +-0.0260773 0.0547586 -0.0274003 0.664521 0.5 +-0.0268504 0.0548324 -0.0264063 0.627079 0.5 +-0.0275816 0.0549129 -0.0253866 0.634178 0.5 +-0.0280896 0.0549613 -0.0243859 0.633357 0.5 +-0.028497 0.0550003 -0.0233987 0.590693 0.5 +-0.0290048 0.0550494 -0.0223991 0.549403 0.39195 +-0.0296143 0.0551126 -0.0213868 0.555597 0.5 +-0.0298766 0.05514 -0.0203901 0.543731 0.443341 +-0.0301429 0.0551656 -0.0193914 0.539953 0.5 +-0.0303622 0.055196 -0.0183802 0.972635 0.5 +-0.0306152 0.0552238 -0.0173804 0.983071 0.5 +-0.0306156 0.0552316 -0.0163811 0.989138 0.5 +-0.0307428 0.0552453 -0.0153798 0.746496 0.5 +-0.0313759 0.0553098 -0.0143786 0.561297 0.5 +-0.0316861 0.0553325 -0.0133983 0.232268 0.412077 +-0.0320271 0.0553591 -0.0124271 0.155832 0.310607 +-0.0890224 0.136404 0.0092064 0.592893 0.5 +0.031191 0.0977616 -0.015509 0.751355 0.5 +-0.00760592 0.125948 -0.00752899 0.441762 0.5 +-0.018657 0.109944 -0.0204332 0.650648 0.5 +-0.0533429 0.0572662 -0.00744815 0.447443 0.454628 +-0.054281 0.0573695 -0.00641449 0.651464 0.5 +-0.0548976 0.0574275 -0.00541424 0.53262 0.5 +-0.0554111 0.0574706 -0.0044262 0.362551 0.5 +-0.0556551 0.0575 -0.00342108 0.370015 0.5 +-0.05601 0.0575293 -0.00241387 0.311227 0.398531 +-0.0563673 0.0575771 -0.00141956 0.30495 0.5 +-0.0567391 0.0576068 -0.000420382 0.294653 0.5 +-0.0571213 0.0576422 0.00058007 0.212777 0.5 +-0.0572784 0.0576838 0.00160501 0.254325 0.5 +-0.0574379 0.0576833 0.0026039 0.222202 0.5 +-0.0575628 0.0576989 0.003607 0.249211 0.5 +-0.0578484 0.0576892 0.00460939 0.249715 0.5 +-0.0581165 0.0576994 0.00562055 0.455982 0.5 +-0.0579872 0.0576809 0.00662705 0.621364 0.5 +-0.0575464 0.0576229 0.00774375 0.553582 0.5 +-0.0572185 0.0575347 0.00867749 0.59633 0.5 +-0.0567221 0.0575063 0.0096837 0.301299 0.5 +-0.0566159 0.0573558 0.0107416 0.352163 0.5 +-0.0891532 0.136419 0.0102028 0.593498 0.5 +-0.0894686 0.136415 0.011209 0.600294 0.5 +-0.0895793 0.136441 0.0122186 0.444536 0.4653 +-0.0898897 0.136442 0.013225 0.469888 0.456916 +-0.090059 0.136447 0.0142016 0.496481 0.5 +-0.0902912 0.136455 0.0152001 0.49545 0.5 +-0.0545965 0.0575496 0.0196126 0 0 +-0.0921816 0.132336 0.0152245 0.762894 0.5 +-0.0788622 0.169438 -0.0409605 0.366493 0.5 +-0.0690053 0.160967 -0.0519594 0.389964 0.5 +-0.0684162 0.160948 -0.0539628 0.31737 0.400276 +-0.0862104 0.140486 0.00518463 0.522313 0.5 +-0.0921938 0.132347 0.0162256 0.773716 0.5 +-0.0523174 0.057382 0.0266177 0.57016 0.5 +-0.0921802 0.132348 0.0172238 0.756407 0.5 +-0.0923144 0.132364 0.0182222 0.739967 0.5 +-0.0923991 0.132355 0.0192227 0.734346 0.5 +-0.0923959 0.132359 0.0202239 0.750417 0.5 +-0.0923003 0.132372 0.0212228 0.754822 0.5 +-0.0921005 0.132392 0.0222257 0.765908 0.5 +-0.0423266 0.169779 -0.00887745 0.368159 0.5 +-0.0693203 0.155248 -0.0509683 0.204332 0.395553 +-0.0734288 0.149863 -0.0358672 0.217183 0.5 +-0.0738057 0.149865 -0.0338746 0.237181 0.5 +-0.0892169 0.151457 0.0141575 0.231722 0.5 +-0.0733818 0.155466 -0.0289107 0.68992 0.5 +-0.0701217 0.159568 -0.0479252 0.46728 0.5 +-0.0783796 0.172116 -0.0450441 0.279584 0.393714 +-0.0408947 0.172668 -0.00780492 0.306109 0.408689 +-0.0496802 0.165544 -0.00294037 0.271246 0.5 +-0.0919787 0.13239 0.0232249 0.763426 0.5 +-0.0917744 0.132406 0.0242297 0.776596 0.5 +-0.0736067 0.154075 -0.0289008 0.70955 0.5 +-0.0280887 0.123076 -0.00418723 0.553946 0.477792 +-0.0916354 0.132395 0.0252256 0.790221 0.5 +-0.0740871 0.156873 -0.0259173 0.318043 0.5 +-0.0706825 0.163806 -0.0469738 0.378063 0.5 +-0.0731314 0.179106 -0.0550054 0.230052 0.383987 +-0.021119 0.180019 -0.0220004 0.518988 0.5 +-0.0548939 0.161294 0.00305835 0.27683 0.5 +-0.0217097 0.181473 -0.0209735 0.502622 0.5 +-0.01522 0.183001 -0.0269465 0.330944 0.35311 +-0.0275613 0.121213 -0.00819283 0.49409 0.5 +-0.00964195 0.120097 -0.0132573 0.548756 0.5 +0.0208541 0.11855 -0.00976629 0.591164 0.5 +-0.0135852 0.123715 -0.00700086 0.446258 0.445563 +-0.0246897 0.0560336 -0.0294195 0.484351 0.5 +-0.0258331 0.0561399 -0.0284181 0.457773 0.5 +-0.0265985 0.0562164 -0.027412 0.625008 0.5 +-0.0272272 0.0562777 -0.0264072 0.601416 0.5 +-0.0276317 0.056316 -0.0254148 0.583362 0.5 +-0.0281182 0.0563778 -0.0244009 0.576484 0.39203 +-0.0286059 0.0564269 -0.0233938 0.550969 0.5 +-0.0292201 0.0564848 -0.022383 0.547748 0.421015 +-0.0295123 0.0565107 -0.0214026 0.56411 0.5 +-0.0298952 0.0565521 -0.0204023 0.545094 0.422764 +-0.0303843 0.0566029 -0.0193937 0.554489 0.5 +-0.0305406 0.0566147 -0.0184018 0.544546 0.5 +-0.0308041 0.0566412 -0.01742 0.534177 0.453646 +-0.0308747 0.056662 -0.0163864 0.951781 0.5 +-0.0311277 0.0566897 -0.0153882 0.742536 0.5 +-0.0313808 0.0567165 -0.0143886 0.572402 0.5 +-0.0317613 0.0567558 -0.0133876 0.379676 0.5 +-0.032014 0.0567822 -0.0123897 0 0 +0.0320036 0.0972394 -0.014969 0.752008 0.5 +-0.0578149 0.12313 -0.00798101 0.673118 0.5 +-0.0197211 0.109971 -0.0204733 0.61368 0.5 +0.0494272 0.0628335 -0.00296645 0.508266 0.5 +-0.053919 0.0587242 -0.00741756 0.66283 0.5 +-0.0546717 0.0587861 -0.00643621 0.55305 0.5 +-0.0552695 0.058846 -0.00542677 0.426227 0.5 +-0.0558395 0.0589131 -0.0044052 0.401397 0.5 +-0.0562018 0.0589495 -0.00340637 0.393971 0.5 +-0.0564836 0.0589584 -0.00242578 0.282783 0.5 +-0.0567945 0.0589511 -0.00142935 0.211661 0.413272 +-0.0572843 0.0589766 -0.000464382 0.206805 0.387372 +-0.0577441 0.0590406 0.000553128 0.185776 0.5 +-0.0582892 0.0589697 0.00149643 0.294237 0.5 +-0.0584646 0.0588965 0.0024905 0.279212 0.5 +-0.0586963 0.0588331 0.00348495 0.339485 0.5 +-0.0905147 0.136459 0.016202 0.494546 0.462825 +-0.0907186 0.136468 0.0172046 0.501817 0.352168 +-0.0908309 0.136473 0.0182032 0.777304 0.5 +-0.0907522 0.136478 0.0191999 0.854917 0.5 +-0.0906746 0.1365 0.0201946 0.648209 0.458488 +-0.0904343 0.136488 0.021207 0.899494 0.5 +-0.0748224 0.0935599 -0.014192 0.404916 0.5 +-0.0758292 0.0935231 -0.0136873 0.395396 0.5 +-0.0391888 0.168166 -0.0121398 0.4443 0.5 +0.0171734 0.0960138 -0.0234178 0.780803 0.5 +0.0181674 0.0959966 -0.023265 0.809077 0.5 +-0.0914347 0.132413 0.0262297 0.804244 0.5 +-0.0912019 0.132413 0.0272298 0.567 0.5 +-0.0640121 0.136992 -0.00763419 0.583651 0.5 +-0.0901963 0.136492 0.0222062 0.913045 0.5 +-0.0898794 0.136494 0.0232114 0.914335 0.5 +-0.0896015 0.136498 0.0242003 0.902342 0.5 +-0.0792333 0.169423 -0.0379787 0.554636 0.5 +-0.0910601 0.132402 0.0282222 0.820849 0.5 +-0.0908205 0.132399 0.0292201 0.558693 0.5 +-0.0905234 0.132421 0.0302253 0.81422 0.5 +-0.0903832 0.132413 0.0312232 0.822631 0.5 +-0.0833865 0.140392 0.00124854 0.49916 0.5 +-0.0780672 0.161102 -0.0219327 0.476659 0.5 +-0.0622101 0.169551 -0.0614764 0.366516 0.383557 +-0.0692517 0.16944 -0.0530112 0.672713 0.5 +-0.0714721 0.152551 -0.0449162 0.179809 0.427342 +-0.0709606 0.152484 -0.0460812 0.149136 0.369161 +-0.0728652 0.170808 -0.0480355 0.453706 0.440948 +-0.074114 0.159638 -0.0309374 0.33951 0.467913 +-0.071061 0.15959 -0.0439233 0.512446 0.469754 +-0.0742711 0.149885 -0.0318724 0.243171 0.5 +-0.0887794 0.151473 0.0131594 0.240523 0.5 +-0.0735022 0.155469 -0.0279133 0.68045 0.5 +-0.0697973 0.159564 -0.0489352 0.450408 0.5 +-0.0789216 0.172194 -0.0440002 0.293212 0.40572 +-0.0786816 0.173602 -0.0460003 0.260349 0.5 +-0.0466234 0.165492 -0.0068396 0.353859 0.337635 +-0.076512 0.15561 -0.00689633 0.72295 0.5 +-0.0768171 0.154199 -0.00689913 0.83207 0.5 +-0.0739884 0.1541 -0.0249038 0.614691 0.5 +-0.0799858 0.150056 0.000166757 0.471534 0.5 +-0.0818563 0.150046 0.00220642 0.415916 0.5 +-0.0901845 0.132425 0.0322244 0.828496 0.5 +-0.0773753 0.161145 -0.0179242 0.648432 0.5 +-0.0704096 0.163806 -0.0479588 0.372678 0.437649 +-0.0222065 0.179998 -0.0209469 0.489358 0.5 +-0.0659308 0.168025 -0.05906 0.412222 0.5 +-0.0225278 0.18149 -0.0200273 0.49555 0.5 +-0.0163006 0.182966 -0.0260091 0.376292 0.5 +-0.0218764 0.182954 -0.0200262 0.440287 0.5 +-0.0467495 0.117966 -0.0147678 0.625411 0.5 +-0.0219544 0.120804 -0.00985027 0.64099 0.5 +-0.032734 0.120436 -0.00935257 0.551911 0.5 +0.0233436 0.112218 -0.0129499 0.662358 0.5 +-0.0245412 0.057448 -0.0303989 0.487966 0.5 +-0.0256858 0.0575487 -0.0293997 0.609779 0.5 +-0.0264766 0.0576077 -0.0284232 0.569604 0.5 +-0.0270955 0.0576776 -0.0274029 0.579575 0.374769 +-0.0274925 0.0577126 -0.0264141 0.567958 0.5 +-0.0279795 0.0577645 -0.0254 0.542156 0.406462 +-0.0283572 0.0578046 -0.0244014 0.533427 0.418356 +-0.0288479 0.0578621 -0.0233922 0.539781 0.5 +-0.0290025 0.0578755 -0.022406 0.546466 0.5 +-0.0295185 0.0579228 -0.0214101 0.52747 0.5 +-0.0300213 0.0579734 -0.0204069 0.540543 0.422257 +-0.0304054 0.0580102 -0.0194062 0.558372 0.5 +-0.0307845 0.0580469 -0.0184096 0.532483 0.438417 +-0.0311645 0.0580869 -0.017406 0.516409 0.5 +-0.0313874 0.0581183 -0.0163942 0.752242 0.5 +-0.03164 0.0581442 -0.0153958 0.570946 0.5 +-0.0317664 0.058161 -0.0143983 0.376962 0.5 +-0.0320197 0.058187 -0.0133973 0 0 +-0.089294 0.136502 0.0252035 0.880858 0.5 +0.0270076 0.100021 -0.0178938 0.704518 0.5 +0.0185572 0.0930309 -0.0244868 0.79357 0.5 +-0.0218071 0.110009 -0.0205036 0.841425 0.5 +0.0156331 0.0915267 -0.0269033 0.557445 0.5 +0.0084061 0.0949783 -0.0285638 0.580992 0.5 +0.00885847 0.0887054 -0.0320419 0.634034 0.5 +0.0294595 0.116659 -0.00368699 0.635449 0.5 +-0.0560752 0.0602595 -0.0044615 0.360439 0.255433 +-0.0564526 0.0602802 -0.00348733 0.342738 0.5 +-0.0570892 0.0602319 -0.00257411 0.21989 0.5 +-0.0578906 0.0600472 -0.00173427 0.158764 0.5 +-0.0579656 0.0599816 -0.000771046 0.112506 0 +-0.0890493 0.136506 0.0262024 0.864578 0.5 +-0.0408505 0.0971293 -0.022095 0.712741 0.5 +-0.0428418 0.0971034 -0.0220359 0.724473 0.5 +-0.0889485 0.13651 0.0272017 0.843587 0.5 +-0.0889642 0.136517 0.0281982 0.826377 0.5 +-0.0799897 0.135372 -0.00407226 0.662734 0.5 +0.0051303 0.105879 -0.0208781 0.775536 0.5 +0.0201949 0.0959886 -0.0227072 0.642785 0.5 +-0.0281007 0.162292 -0.0150733 0.597017 0.5 +-0.0118767 0.105907 -0.0227385 0.643294 0.5 +-0.0368415 0.0943464 -0.0233446 0.572713 0.5 +-0.0378318 0.0943285 -0.0232947 0.564422 0.5 +-0.0318429 0.0944059 -0.023975 0.788248 0.5 +-0.0370674 0.156264 -0.0103696 0.743874 0.5 +-0.0719676 0.138437 -0.00730592 0.499271 0.464413 +-0.0620358 0.136971 -0.00707833 0.644723 0.486394 +-0.0900654 0.132428 0.033223 0.830814 0.5 +-0.0900528 0.132428 0.0342227 0.830886 0.5 +-0.090055 0.132436 0.0352224 0.831982 0.5 +-0.0738377 0.169377 -0.0450494 0.41802 0.5 +-0.0763817 0.169448 -0.0429673 0.419616 0.5 +-0.0792933 0.16941 -0.0399858 0.305986 0.5 +-0.0790213 0.169435 -0.0369802 0.565191 0.5 +-0.0890554 0.136524 0.0291987 0.802967 0.5 +-0.0903048 0.139241 0.0221876 0.738302 0.5 +-0.0936994 0.128298 0.0232525 0.61142 0.474767 +-0.0400469 0.169775 -0.0108504 0.421948 0.5 +-0.0565711 0.159859 0.00306588 0.230458 0.5 +-0.0554287 0.1598 0.000101402 0.221804 0.5 +-0.052904 0.159748 -0.00276649 0.215202 0.5 +-0.0732162 0.169408 -0.0460252 0.460344 0.43447 +-0.0699016 0.160977 -0.0489386 0.369647 0.479996 +-0.090134 0.132434 0.0362229 0.830749 0.5 +-0.091691 0.12831 0.0342454 0.835688 0.5 +-0.0671371 0.169442 -0.0570354 0.500699 0.5 +-0.0883068 0.151437 0.0121831 0.240327 0.411347 +-0.0856284 0.151402 0.00824006 0.263749 0.376598 +-0.0739579 0.155489 -0.0249104 0.5636 0.5 +-0.073597 0.161047 -0.0349306 0.336558 0.476502 +-0.079023 0.172207 -0.0429929 0.377845 0.5 +-0.0788564 0.173596 -0.0449928 0.307473 0.5 +-0.0456155 0.165496 -0.00783315 0.385636 0.5 +-0.0901396 0.13244 0.0372222 0.843868 0.5 +-0.076883 0.154198 -0.00789596 0.844361 0.5 +-0.0783607 0.150068 -0.00187639 0.844803 0.5 +-0.0777749 0.150053 -0.00387978 0.584133 0.5 +-0.0791989 0.150078 -0.000876106 0.7153 0.5 +-0.0901131 0.132441 0.0382173 0.601237 0.5 +-0.0900689 0.132434 0.0392074 0.616599 0.5 +-0.0700603 0.163804 -0.0489659 0.377422 0.480003 +-0.0233436 0.179984 -0.0199453 0.47323 0.5 +-0.0242736 0.181474 -0.0180054 0.455845 0.334595 +-0.0234134 0.181486 -0.0190275 0.454971 0.5 +-0.0233118 0.182976 -0.0180572 0.338223 0.5 +-0.0226479 0.182963 -0.0190305 0.374844 0.330679 +-0.0478545 0.117892 -0.0146818 0.627079 0.466746 +0.00758009 0.121578 -0.0129987 0.654152 0.5 +-0.0425055 0.108838 -0.0192163 0.620822 0.467053 +0.0269605 0.111014 -0.0116501 0.559079 0.5 +-0.0242656 0.0588495 -0.0313753 0.509396 0.5 +-0.0255632 0.0589456 -0.0304089 0.462763 0.5 +-0.0263524 0.059005 -0.029433 0.584988 0.5 +-0.0271171 0.059077 -0.028426 0.536978 0.5 +-0.0275149 0.0591111 -0.027433 0.528274 0.5 +-0.0280135 0.0591603 -0.0264206 0.509051 0.42267 +-0.0285047 0.059221 -0.0254142 0.509565 0.5 +-0.0288788 0.0592582 -0.0244095 0.527401 0.444375 +-0.0291332 0.059286 -0.0234112 0.522941 0.45336 +-0.0293882 0.0593157 -0.02241 0.49518 0.5 +-0.0297438 0.0593588 -0.0214043 0.907422 0.5 +-0.0301375 0.0592681 -0.0204197 0.549851 0.422118 +-0.0305064 0.059434 -0.0194047 0.513758 0.5 +-0.0309091 0.0594671 -0.0184147 0.516012 0.5 +-0.0314199 0.0595176 -0.0174145 0.509454 0.450778 +-0.0316463 0.0595496 -0.0164023 0.758476 0.5 +-0.031899 0.0595768 -0.0154053 0.563975 0.5 +-0.03228 0.059616 -0.0144015 0.375416 0.5 +-0.0324058 0.05963 -0.0134049 0 0 +0.0278652 0.0996344 -0.0174729 0.722088 0.5 +-0.0465413 0.123419 -0.0104793 0.723287 0.5 +-0.039166 0.0355671 -0.0293815 0.124361 0.5 +-0.0207424 0.110014 -0.0205123 0.871346 0.5 +-0.0123646 0.109877 -0.0203825 0.799893 0.5 +-0.00551608 0.110856 -0.0214408 0.643674 0.5 +-0.00120622 0.113981 -0.0187843 0.553215 0.5 +0.00259703 0.093007 -0.0325523 0.674904 0.5 +0.0167046 0.0945555 -0.0241181 0.788192 0.5 +0.00996296 0.0988804 -0.0226985 0.895484 0.5 +-0.065316 0.0625169 -0.002419 0.168435 0.5 +-0.0662857 0.0625946 -0.00141881 0.169372 0.256876 +-0.0671444 0.0628365 -0.000338348 0.208685 0.5 +-0.0398433 0.0971287 -0.022179 0.706388 0.5 +-0.0418449 0.0971142 -0.0220611 0.741023 0.5 +-0.043841 0.0970933 -0.0219235 0.733691 0.5 +-0.0448379 0.0970765 -0.0217835 0.764659 0.5 +-0.0720312 0.141354 -0.00781974 0.31502 0.5 +-0.0234217 0.0359155 0.0533704 0.919256 0.5 +-0.0328414 0.0943934 -0.0238538 0.796645 0.5 +-0.0338378 0.0943788 -0.02372 0.842474 0.5 +-0.0348319 0.0943645 -0.0236767 0.828259 0.5 +-0.0358405 0.094357 -0.023472 0.803934 0.5 +-0.0588396 0.0925945 -0.0203375 0.482684 0.5 +-0.0568431 0.0926948 -0.0216401 0.441355 0.5 +-0.055838 0.0927189 -0.0219026 0.62808 0.5 +-0.05784 0.0926528 -0.0211082 0.498078 0.5 +-0.0698932 0.120907 -0.00884856 0.733079 0.5 +-0.0661663 0.158028 -0.0551775 0.40304 0.5 +-0.0758088 0.0906346 -0.0139136 0.456588 0.5 +-0.0358448 0.0971832 -0.0228124 0.62078 0.5 +-0.0703872 0.161044 -0.0469664 0.402705 0.428161 +-0.0701334 0.160982 -0.047936 0.489404 0.47708 +-0.0695688 0.160974 -0.049948 0.36261 0.468711 +-0.0693202 0.16097 -0.0509443 0.355339 0.441096 +-0.0687445 0.160961 -0.0529537 0.383317 0.5 +-0.0901888 0.139114 0.0151891 0.446042 0.434111 +-0.0895335 0.144692 0.0121557 0.534097 0.5 +-0.0897923 0.144692 0.013139 0.537201 0.5 +-0.0892694 0.136527 0.0301984 0.796902 0.5 +-0.043284 0.169832 -0.00794427 0.485745 0.5 +-0.0451841 0.16983 -0.00497124 0.226547 0.420276 +-0.077742 0.161125 -0.0199262 0.526531 0.5 +-0.0624118 0.168239 -0.0611966 0.32392 0.5 +-0.0890324 0.144705 0.01118 0.321434 0.390016 +-0.0777368 0.158322 -0.016916 0.523705 0.448297 +-0.0446853 0.169846 -0.00596698 0.431387 0.5 +-0.0453256 0.169857 -0.00299568 0.26054 0.5 +-0.0702988 0.15533 -0.0489684 0.223642 0.382916 +-0.0850315 0.151395 0.00719993 0.258815 0.386745 +-0.0837262 0.151367 0.00522149 0.25497 0.380022 +-0.0740972 0.155492 -0.0239137 0.400149 0.5 +-0.0896132 0.139307 0.0341845 0.620671 0.5 +-0.041349 0.172669 -0.00697494 0.263895 0.430234 +-0.0231395 0.168252 -0.0189417 0.812532 0.5 +-0.0873651 0.0927561 0.00443631 0.698806 0.5 +-0.0721609 0.147032 -0.0238695 0.161104 0.375516 +-0.0769907 0.154191 -0.00889586 0.825549 0.5 +-0.0780017 0.150056 -0.00287894 0.942179 0.5 +-0.0808163 0.150056 0.00117383 0.521887 0.5 +-0.0925247 0.128292 0.0282327 0.493165 0.449234 +-0.0684905 0.158118 -0.0539401 0.273827 0.43722 +-0.0679209 0.163786 -0.054975 0.414543 0.5 +-0.0243767 0.179986 -0.0189674 0.469068 0.332041 +0.0526661 0.0660937 -0.000184776 0.478813 0.5 +-0.0785163 0.162478 -0.0269418 0.489605 0.5 +-0.0174269 0.182963 -0.0250022 0.378638 0.5 +-0.0568769 0.116868 -0.0135067 0.577346 0.5 +-0.0510086 0.119975 -0.0128249 0.551049 0.5 +-0.0435985 0.108724 -0.0190759 0.615526 0.5 +0.0288139 0.110493 -0.0110929 0.531399 0.5 +-0.0250606 0.0603159 -0.031412 0.489483 0.5 +-0.0262205 0.0604134 -0.0304432 0.449379 0.447516 +-0.0270301 0.0604609 -0.0294673 0.386717 0.5 +-0.0277397 0.0605536 -0.0284245 0.508478 0.5 +-0.0281113 0.0605968 -0.0274147 0.500342 0.433807 +-0.0284873 0.0606333 -0.0264114 0.498208 0.5 +-0.0288624 0.0606727 -0.0254104 0.512531 0.5 +-0.0290126 0.0606872 -0.0244213 0.5126 0.461839 +-0.0295204 0.0607307 -0.0234192 0.487717 0.5 +-0.0298765 0.0607745 -0.022409 0.90172 0.5 +-0.030256 0.0608147 -0.0214135 0.915893 0.5 +-0.0305096 0.0608404 -0.0204127 0.926718 0.5 +-0.0309108 0.0608665 -0.0194213 0.507452 0.442998 +-0.0313268 0.0609036 -0.0184352 0.520213 0.5 +-0.0318252 0.0609455 -0.0174329 0.418021 0.431997 +-0.0320326 0.0609937 -0.0164107 0.558145 0.5 +-0.0322855 0.0610195 -0.0154117 0.371883 0.5 +-0.0332069 0.0609523 -0.0145937 0.104314 0 +0.0216881 0.102085 -0.0200779 0.635012 0.450569 +-0.0179622 0.106228 -0.0225141 0.736266 0.5 +0.0312054 0.104936 -0.0131412 0.669489 0.405024 +-0.0366978 0.0363155 -0.0300943 0.277791 0.5 +-0.0134967 0.109686 -0.0201653 0.845475 0.5 +0.00630512 0.0970077 -0.026738 0.709047 0.340926 +-0.00553736 0.113796 -0.0185731 0.800452 0.5 +-0.00223749 0.0939165 -0.0335391 0.642359 0.5 +0.0303183 0.0797251 -0.0205953 0.739845 0.5 +0.0537776 0.0692651 0.00258827 0.604757 0.5 +-0.0662958 0.0637695 -0.0035905 0.201496 0.5 +-0.0674721 0.0639504 -0.00252382 0.195093 0.403257 +-0.0682938 0.06404 -0.00150269 0.165663 0.5 +-0.0691053 0.0641529 -0.000471523 0.20535 0.5 +-0.0696582 0.0642657 0.000568637 0.275779 0.5 +-0.0703548 0.0643588 0.00158224 0.307086 0.5 +-0.0560862 0.153109 -0.0014946 0.466776 0.5 +-0.0797544 0.0720045 0.0191472 0.599916 0.5 +-0.0810703 0.0752023 0.0214152 0.758488 0.5 +-0.0708131 0.0922561 -0.0160967 0.506023 0.5 +-0.0718125 0.0922256 -0.0157107 0.468391 0.463787 +-0.0728038 0.0921924 -0.0153063 0.443199 0.5 +-0.0738833 0.122317 -0.0079807 0.662738 0.5 +-0.0708983 0.120893 -0.00865195 0.71797 0.380626 +0.0021184 0.108719 -0.0202691 0.833653 0.5 +-0.0408918 0.109911 -0.0187996 0.608375 0.5 +-0.0819901 0.133862 -0.00285904 0.561222 0.5 +0.00311817 0.108714 -0.0201476 0.823348 0.5 +-0.0778791 0.116346 -0.00545689 0.478341 0.5 +-0.0748251 0.0906869 -0.0145799 0.376251 0.5 +-0.0810085 0.136808 -0.00286908 0.679181 0.5 +-0.0779789 0.136876 -0.0051311 0.493681 0.383138 +-0.0734658 0.151245 -0.0358847 0.410418 0.5 +-0.0578612 0.158406 0.00308521 0.186557 0.413006 +-0.076675 0.154077 0.000107436 0.2319 0.5 +-0.0810442 0.152541 0.00426923 0.24507 0.380055 +-0.0699027 0.158151 -0.0489236 0.522527 0.5 +-0.0680885 0.16093 -0.05501 0.328587 0.5 +-0.0676844 0.160922 -0.0559942 0.35716 0.5 +-0.0669549 0.160975 -0.0568649 0.454318 0.5 +-0.0711264 0.142566 -0.0097279 0.26067 0.219333 +-0.041205 0.169789 -0.00987939 0.435908 0.5 +-0.0440479 0.169839 -0.00695693 0.46912 0.5 +-0.0894637 0.136534 0.031204 0.797571 0.5 +-0.0895706 0.136541 0.0322035 0.570113 0.5 +-0.0627661 0.170921 -0.0616075 0.2685 0.455899 +-0.066757 0.170863 -0.0580345 0.495109 0.471885 +-0.0691313 0.170851 -0.0540166 0.670991 0.5 +-0.0773104 0.159761 -0.0159076 0.557852 0.467123 +-0.0780833 0.1597 -0.0209281 0.501426 0.437653 +-0.075211 0.159631 -0.0279486 0.399913 0.5 +-0.0714642 0.155388 -0.0429121 0.567306 0.5 +-0.0844496 0.151409 0.0062115 0.260847 0.5 +-0.0743228 0.155495 -0.0229079 0.387814 0.466102 +-0.0779043 0.1583 -0.0209193 0.461428 0.5 +-0.0416172 0.17268 -0.00599082 0.220821 0.5 +-0.0714328 0.168025 -0.0480185 0.495079 0.357256 +-0.090746 0.114598 0.00833305 0.373961 0.5 +-0.0897624 0.136545 0.033205 0.592676 0.5 +-0.0769902 0.154182 -0.00989517 0.838179 0.5 +-0.0828306 0.150071 0.00319212 0.428913 0.5 +-0.0751102 0.148577 -0.0168689 0.340746 0.5 +-0.0736141 0.151246 -0.0348888 0.407703 0.5 +-0.0521229 0.0491646 0.0356345 0.121854 0.5 +-0.0689171 0.158096 -0.0529848 0.298285 0.5 +-0.0529179 0.162663 -0.000927718 0.28336 0.5 +-0.0523141 0.162661 -0.0019165 0.31325 0.5 +-0.0782836 0.162467 -0.0289415 0.387061 0.5 +-0.0785063 0.162438 -0.0279579 0.360437 0.457806 +-0.0239599 0.182991 -0.0170658 0.323243 0.5 +-0.0897898 0.136552 0.0342 0.615446 0.455872 +-0.0285818 0.121272 -0.00825717 0.480446 0.5 +-0.0174145 0.118412 -0.0133815 0.684016 0.5 +-0.0413959 0.1089 -0.0192706 0.62082 0.5 +-0.0243269 0.0616478 -0.0324508 0.45692 0.5 +-0.0257193 0.0617764 -0.0314442 0.452259 0.5 +-0.0266191 0.0618553 -0.0304537 0.410415 0.5 +-0.0274971 0.0619365 -0.0294418 0.522343 0.5 +-0.0282695 0.0620042 -0.0284458 0.483773 0.5 +-0.0287391 0.0620637 -0.0274208 0.908645 0.5 +-0.028867 0.0620809 -0.0264195 0.932403 0.5 +-0.0291214 0.0621103 -0.0254198 0.942751 0.5 +-0.029375 0.0621337 -0.0244169 0.902609 0.5 +-0.0298816 0.0621837 -0.0234188 0.908229 0.5 +-0.0302767 0.0622182 -0.0224251 0.497023 0.5 +-0.0306641 0.062253 -0.0214244 0.5112 0.5 +-0.0309385 0.0622798 -0.0204312 0.518875 0.434998 +-0.0314315 0.062325 -0.0194293 0.51994 0.5 +-0.0318261 0.0623615 -0.0184459 0.508206 0.434753 +-0.0323315 0.0624018 -0.0174393 0.40837 0.447765 +-0.0325454 0.0624467 -0.016419 0.557278 0.5 +-0.0327997 0.0624741 -0.0154176 0.366718 0.5 +-0.0330517 0.0624982 -0.0144201 0 0 +-0.0169788 0.106067 -0.0223329 0.726435 0.5 +0.0329293 0.104175 -0.0123189 0.69987 0.5 +0.0320623 0.104555 -0.0127247 0.694171 0.5 +-0.0197912 0.0347004 -0.0276305 0.174612 0.215481 +0.00487604 0.0992462 -0.0230983 0.846042 0.5 +0.0392297 0.0926988 -0.0100859 0.576528 0.354355 +0.040891 0.0917758 -0.00909975 0.547831 0.5 +0.000679346 0.0933957 -0.0329817 0.52965 0.5 +0.016043 0.107446 -0.0178315 0.54139 0.5 +0.0151569 0.107807 -0.0181851 0.582596 0.454464 +-0.0679818 0.0653371 -0.00356488 0.251688 0.5 +-0.0690509 0.0654544 -0.0025414 0.24886 0.5 +-0.0698972 0.0655268 -0.00153079 0.202761 0.415408 +-0.0707052 0.0656331 -0.000502385 0.199708 0.427857 +-0.0715181 0.0657302 0.000515199 0.218811 0.5 +-0.0721682 0.0657282 0.00147121 0.246808 0.390584 +-0.0768516 0.103431 -0.00952853 0.543508 0.5 +-0.07494 0.0707543 0.0282709 0.593295 0.5 +-0.0778795 0.103388 -0.00866618 0.527272 0.5 +-0.0779756 0.13395 -0.00568102 0.43404 0.453644 +-0.0673863 0.146352 -0.0244353 0.596362 0.5 +-0.0746345 0.0660496 0.0075612 0.649876 0.5 +-0.0749218 0.0661459 0.00857247 0.681417 0.5 +-0.0749507 0.0661289 0.00944516 0.536331 0.5 +-0.0808258 0.116274 -0.00349703 0.54735 0.5 +-0.0338231 0.0915286 -0.0241849 0.733427 0.5 +-0.0328411 0.0915526 -0.0242438 0.721596 0.5 +-0.0348255 0.0915164 -0.024068 0.731908 0.5 +-0.0358242 0.0915039 -0.0239402 0.665301 0.5 +-0.0361137 0.162217 -0.0137308 0.551884 0.5 +-0.0370853 0.162227 -0.0135318 0.51239 0.5 +-0.058879 0.104045 -0.0185386 0.690825 0.5 +-0.0598229 0.0911123 -0.0198104 0.499406 0.5 +0.0218862 0.107458 -0.0158341 0.533561 0.5 +-0.0740506 0.152673 -0.0298916 0.554635 0.5 +-0.073929 0.152666 -0.0308896 0.540786 0.5 +-0.0737191 0.152664 -0.0318934 0.535153 0.5 +-0.0401614 0.110268 -0.0187071 0.609508 0.5 +-0.0484141 0.113756 -0.016334 0.716553 0.5 +-0.0413643 0.124214 -0.00934406 0.621872 0.5 +-0.0464652 0.16842 -0.00496016 0.442289 0.5 +0.0352918 0.108619 -0.00504659 0.541809 0.5 +-0.0563129 0.159837 0.00207063 0.156172 0.5 +-0.0453238 0.169855 -0.00399069 0.226657 0.434252 +-0.0779351 0.161108 -0.0209335 0.505629 0.5 +-0.0617514 0.175333 -0.0614739 0.324857 0.422115 +-0.0897878 0.136555 0.0351995 0.64143 0.5 +-0.0897638 0.136555 0.0361946 0.649587 0.5 +-0.0715633 0.170815 -0.0500445 0.470993 0.5 +-0.0743075 0.170773 -0.046055 0.382418 0.454078 +-0.0791607 0.170809 -0.0419883 0.293443 0.5 +-0.0726436 0.159626 -0.0369279 0.497241 0.421508 +-0.0715954 0.155396 -0.0419127 0.582202 0.5 +-0.0745798 0.155493 -0.021916 0.473959 0.454994 +-0.0579064 0.158452 0.00407429 0.191847 0.5 +-0.0416245 0.172695 -0.00500345 0.190702 0.444974 +-0.0728707 0.168003 -0.0450202 0.471235 0.417893 +-0.0919702 0.114664 0.0123319 0.461068 0.5 +-0.0746787 0.169356 -0.0440586 0.366866 0.5 +-0.077087 0.154176 -0.0108977 0.837764 0.5 +-0.0838817 0.150077 0.00420446 0.36032 0.5 +-0.0746094 0.14858 -0.0188631 0.296365 0.5 +-0.0748658 0.148574 -0.0178655 0.299765 0.5 +-0.0738314 0.151256 -0.033887 0.403606 0.5 +0.0162169 0.116863 -0.0139359 0.521215 0.437545 +-0.0692332 0.158118 -0.0519432 0.304841 0.424131 +-0.0777 0.16251 -0.0219398 0.370413 0.5 +-0.0778914 0.162484 -0.0299302 0.383786 0.5 +-0.073524 0.16243 -0.0369561 0.379276 0.454218 +-0.0245671 0.182966 -0.016053 0.292881 0.5 +-0.0896519 0.136557 0.0371913 0.654449 0.5 +-0.0456903 0.11799 -0.0148012 0.639534 0.5 +-0.0197273 0.118003 -0.0129221 0.761134 0.5 +0.0153397 0.120197 -0.0115352 0.509865 0.5 +-0.0249634 0.0631201 -0.0324542 0.462031 0.5 +-0.0261049 0.0632214 -0.0314499 0.455633 0.5 +-0.027103 0.0633188 -0.0304321 0.588981 0.5 +-0.0278877 0.0633808 -0.0294488 0.547986 0.5 +-0.028754 0.0634689 -0.0284339 0.533982 0.5 +-0.029185 0.0634891 -0.02746 0.513658 0.5 +-0.0295071 0.0635474 -0.0264265 0.897057 0.5 +-0.0296335 0.0635627 -0.0254272 0.90772 0.5 +-0.0298874 0.063588 -0.0244234 0.898248 0.5 +-0.0301406 0.0636155 -0.0234264 0.930978 0.5 +-0.030521 0.0636541 -0.0224277 0.907576 0.5 +-0.0310517 0.0636961 -0.0214339 0.489031 0.5 +-0.0314396 0.0637247 -0.0204391 0.508846 0.441726 +-0.0318235 0.0637622 -0.0194381 0.522931 0.439892 +-0.0322265 0.0637977 -0.0184499 0.432564 0.5 +-0.0326141 0.0638332 -0.0174509 0.335516 0.5 +-0.0329324 0.0638892 -0.016427 0.356489 0.5 +-0.0334742 0.0638502 -0.015538 0.108209 0.5 +0.0104481 0.102845 -0.020901 0.871304 0.5 +0.0188526 0.103753 -0.0198618 0.589167 0.305694 +-0.00891857 0.0338467 -0.0251248 0 0 +0.026625 0.0839457 -0.0229857 0.758148 0.5 +0.0328182 0.0967204 -0.0144274 0.748556 0.5 +0.0375907 0.0937201 -0.0111657 0.595586 0.5 +0.0400602 0.0922366 -0.00959201 0.572204 0.5 +0.00890069 0.0988547 -0.0226736 0.872722 0.5 +0.0441838 0.0712847 0.000450163 0.423182 0.5 +-0.00350994 0.110634 -0.0212045 0.678112 0.5 +-0.0684343 0.0667749 -0.00454154 0.32026 0.356015 +-0.0694356 0.066827 -0.00357005 0.276663 0.5 +-0.070487 0.0669606 -0.00253268 0.23267 0.378817 +-0.0714195 0.067071 -0.00151156 0.268814 0.5 +-0.0722644 0.0671374 -0.000515551 0.278849 0.416812 +-0.073344 0.0672327 0.000494062 0.294143 0.348574 +-0.0742084 0.067281 0.00145303 0.305775 0.384345 +-0.0747558 0.067415 0.00253432 0.328215 0.460629 +-0.075086 0.0674684 0.00355063 0.433069 0.463791 +-0.0619023 0.120903 -0.00899386 0.665437 0.5 +-0.0758319 0.0675199 0.00554661 0.400319 0.5 +-0.0760415 0.0675654 0.00655947 0.550905 0.5 +-0.0760729 0.0675487 0.00755458 0.607601 0.5 +-0.0759599 0.0675387 0.00855626 0.631847 0.5 +-0.0759061 0.0675035 0.00967604 0.601366 0.5 +-0.0398282 0.0914347 -0.0233046 0.514492 0.5 +-0.0388211 0.091456 -0.0235256 0.480165 0.5 +-0.0388888 0.109926 -0.019043 0.643715 0.5 +-0.0468678 0.104213 -0.0207743 0.719293 0.5 +-0.0630395 0.136976 -0.00741235 0.623766 0.48613 +-0.0689054 0.113678 -0.00975253 0.564098 0.5 +-0.0498768 0.104205 -0.0203216 0.723423 0.5 +-0.0488714 0.104198 -0.020417 0.732059 0.5 +-0.0688752 0.11651 -0.00852528 0.615905 0.5 +-0.0719627 0.134048 -0.00796724 0.534098 0.467941 +-0.0423655 0.110099 -0.0185262 0.853233 0.5 +-0.0894883 0.139285 0.0301857 0.598091 0.5 +-0.0898984 0.139201 0.0142132 0.443337 0.5 +-0.0787339 0.140316 -0.00472414 0.596483 0.5 +-0.0735831 0.152654 -0.0328925 0.539706 0.5 +-0.0733679 0.152652 -0.0338969 0.546074 0.5 +-0.0772012 0.161073 -0.0279344 0.409147 0.5 +-0.0914367 0.114681 0.021315 0.763094 0.5 +-0.0739067 0.163816 -0.0379732 0.477848 0.347135 +-0.0547363 0.159762 -0.000811248 0.197114 0.246271 +-0.0916073 0.128323 0.0352449 0.8231 0.5 +-0.0783042 0.161088 -0.0239376 0.480672 0.5 +-0.0673534 0.170861 -0.0570311 0.47812 0.5 +-0.0697489 0.17084 -0.0530327 0.661706 0.5 +-0.0894349 0.136561 0.0381888 0.648165 0.5 +-0.0891218 0.136568 0.0391914 0.508226 0.472247 +-0.0836036 0.133464 -0.00169527 0.591445 0.5 +-0.0908345 0.139239 0.02018 0.683319 0.5 +-0.0696635 0.159559 -0.0499324 0.361225 0.5 +-0.0694376 0.159556 -0.0509365 0.377942 0.452316 +-0.0696447 0.166615 -0.0510113 0.388941 0.448918 +-0.0846701 0.133487 -0.000689201 0.6689 0.5 +-0.0631435 0.175042 -0.061564 0.431004 0.5 +-0.0880283 0.128084 0.00127828 0.492615 0.5 +-0.00122028 0.0938312 -0.0334376 0.657678 0.5 +-0.0770943 0.154164 -0.0118975 0.800158 0.5 +-0.0845132 0.150109 0.0051703 0.353541 0.446268 +-0.07404 0.148543 -0.0208687 0.298045 0.5 +-0.0743566 0.148587 -0.0198592 0.300188 0.5 +-0.0740388 0.151266 -0.032878 0.406013 0.5 +-0.0855227 0.133522 0.000289437 0.685401 0.5 +-0.0701319 0.158154 -0.0479233 0.559029 0.5 +-0.0779412 0.162504 -0.0229403 0.377542 0.478951 +-0.0772028 0.162464 -0.0309387 0.382945 0.5 +-0.0731753 0.162423 -0.0379582 0.369884 0.5 +-0.072832 0.162419 -0.0389636 0.363427 0.5 +-0.0169441 0.184483 -0.0249355 0.342334 0.5 +-0.0436382 0.11786 -0.014681 0.671991 0.5 +-0.0335583 0.116878 -0.0136466 0.788424 0.5 +-0.0228771 0.11806 -0.0129657 0.848768 0.5 +-0.0241177 0.120704 -0.00972559 0.592427 0.5 +0.0266976 0.119444 -0.00271582 0.610089 0.5 +-0.0253831 0.0645504 -0.0324979 0.484974 0.464351 +-0.0263871 0.06465 -0.0314802 0.488322 0.465517 +-0.0274005 0.0647434 -0.0304718 0.449719 0.5 +-0.0283013 0.0648191 -0.0294785 0.578883 0.5 +-0.0291848 0.0649007 -0.0284708 0.541417 0.5 +-0.0299396 0.0649723 -0.0274594 0.531297 0.5 +-0.0302058 0.0649962 -0.0264588 0.517895 0.5 +-0.0304 0.0650386 -0.0254348 0.910149 0.5 +-0.0306543 0.0650659 -0.0244333 0.919885 0.5 +-0.0306541 0.0650706 -0.0234343 0.929797 0.5 +-0.0309078 0.065095 -0.0224325 0.892908 0.5 +-0.0314155 0.0651435 -0.021432 0.912515 0.5 +-0.0317948 0.0651814 -0.020436 0.921701 0.5 +-0.0320867 0.0651952 -0.0194497 0.399433 0.5 +-0.0327198 0.0652554 -0.0184496 0.325484 0.5 +-0.0331649 0.0652734 -0.0174782 0.254458 0.5 +-0.0337113 0.0652961 -0.0165207 0.176771 0.5 +0.0126509 0.103032 -0.0211055 0.834697 0.5 +0.0115883 0.102988 -0.0210311 0.855026 0.5 +0.0169002 0.103075 -0.0211457 0.860865 0.5 +0.029535 0.0987313 -0.0165204 0.740361 0.5 +0.0286963 0.0991802 -0.016993 0.743821 0.5 +0.0336101 0.0962478 -0.0138935 0.741396 0.5 +0.0383972 0.0931984 -0.0106151 0.593677 0.5 +0.0446778 0.0701888 0.00161208 0.377476 0.5 +-0.00243593 0.113721 -0.0185019 0.831455 0.5 +-0.00449638 0.110771 -0.0213478 0.652799 0.5 +-0.0687556 0.0680025 -0.00564855 0.256016 0.135401 +-0.0698587 0.0680767 -0.00467294 0.223356 0.342426 +-0.070996 0.0683351 -0.00354604 0.18113 0.419744 +-0.0716941 0.0684125 -0.00254325 0.259641 0.357699 +-0.0728418 0.0685704 -0.00149472 0.306205 0.5 +-0.0739294 0.0686501 -0.000515794 0.293636 0.296358 +-0.0747378 0.0687745 0.000531905 0.399712 0.5 +-0.07522 0.0688188 0.0015368 0.442798 0.465566 +-0.0756991 0.0688679 0.00254149 0.486374 0.5 +-0.0760467 0.0689134 0.00354542 0.528256 0.5 +-0.0762949 0.0689313 0.00454567 0.538185 0.5 +-0.0765723 0.0689281 0.00553415 0.513333 0.5 +-0.0769246 0.0689689 0.00654258 0.417409 0.5 +-0.0709029 0.110786 -0.0101311 0.625599 0.381071 +-0.0770757 0.068957 0.00853894 0.755373 0.5 +-0.0478735 0.104217 -0.0205651 0.722773 0.5 +-0.0689711 0.136995 -0.00816407 0.794643 0.5 +-0.0679786 0.137002 -0.008171 0.83242 0.5 +-0.0759568 0.136911 -0.00615991 0.506238 0.5 +-0.0699032 0.0687756 0.0310328 0.51948 0.47167 +-0.0652856 0.176792 -0.0608019 0.299685 0.5 +-0.0643093 0.0665984 0.0323388 0.563763 0.5 +-0.0132522 0.180136 -0.0286131 0.228754 0.415896 +-0.0428689 0.104235 -0.0209095 0.788574 0.5 +-0.0529014 0.114056 -0.0162353 0.627037 0.5 +-0.0599339 0.120955 -0.00911512 0.63739 0.460131 +-0.061923 0.12237 -0.00883821 0.719054 0.5 +-0.0865692 0.133541 0.00131146 0.643142 0.5 +-0.0875285 0.133568 0.00229932 0.592627 0.5 +-0.0883931 0.1336 0.00326444 0.547588 0.5 +-0.0895773 0.139272 0.0261794 0.644458 0.5 +-0.0767707 0.151403 -0.00690852 0.411828 0.468351 +-0.073245 0.152646 -0.0348949 0.549961 0.5 +-0.0731111 0.152638 -0.0358925 0.552759 0.5 +-0.072893 0.152634 -0.0368963 0.558665 0.5 +-0.0660161 0.169448 -0.0590294 0.474129 0.5 +-0.070964 0.169422 -0.0500317 0.476732 0.5 +-0.0720303 0.169416 -0.0480254 0.478125 0.5 +-0.0485025 0.167013 -0.00296472 0.314052 0.5 +-0.0895593 0.13929 0.0311867 0.607552 0.5 +-0.0722512 0.170824 -0.0490235 0.466133 0.5 +-0.0789509 0.170805 -0.0389931 0.468892 0.5 +-0.0792519 0.17071 -0.0410714 0.329077 0.424166 +-0.0866855 0.14466 0.00818677 0.591028 0.5 +-0.0421206 0.171253 -0.0079388 0.351016 0.373273 +-0.0670071 0.172276 -0.0580562 0.693037 0.5 +-0.0700267 0.166609 -0.0500213 0.38078 0.478737 +-0.0709434 0.168021 -0.0490096 0.382731 0.5 +0.0180702 0.0879847 -0.0272411 0.711278 0.5 +-0.0439439 0.166904 -0.00881722 0.416534 0.5 +-0.0880987 0.13916 0.0101984 0.406451 0.431708 +-0.0769942 0.154149 -0.012901 0.701919 0.5 +-0.085208 0.150101 0.00618898 0.464736 0.5 +-0.0737519 0.14858 -0.0228576 0.286307 0.5 +-0.0739143 0.148544 -0.0218644 0.294056 0.5 +-0.0746468 0.151291 -0.0288803 0.461003 0.5 +-0.0891224 0.133627 0.00423095 0.380868 0.5 +-0.0712116 0.15818 -0.0429219 0.489224 0.5 +-0.0516538 0.162634 -0.00285466 0.278296 0.264391 +-0.0249646 0.181509 -0.0170525 0.406368 0.5 +-0.0183396 0.183004 -0.0240946 0.428755 0.5 +-0.0249379 0.182957 -0.0150514 0.336994 0.5 +-0.017913 0.184413 -0.0239895 0.360575 0.318318 +-0.0356473 0.116902 -0.0136714 0.820147 0.5 +-0.0207916 0.117992 -0.012906 0.82793 0.5 +-0.017781 0.12071 -0.00976707 0.746757 0.5 +0.0258521 0.119872 -0.00319504 0.779378 0.5 +-0.0250386 0.0659034 -0.0335362 0.498707 0.5 +-0.0261589 0.0660162 -0.0325063 0.477779 0.459721 +-0.0269138 0.0660937 -0.0314934 0.64467 0.5 +-0.0277699 0.0661915 -0.0304661 0.622964 0.5 +-0.0286636 0.0662687 -0.0294695 0.567307 0.5 +-0.0295596 0.0663471 -0.0284716 0.520516 0.5 +-0.0301912 0.0664057 -0.0274649 0.56048 0.5 +-0.030476 0.0664272 -0.0264734 0.558124 0.5 +-0.0308481 0.0664794 -0.025463 0.532253 0.432701 +-0.0312058 0.066507 -0.0244549 0.515252 0.5 +-0.0312929 0.0665317 -0.0234435 0.93207 0.5 +-0.0315471 0.0665587 -0.0224416 0.93307 0.5 +-0.0316751 0.0665766 -0.0214412 0.928331 0.5 +-0.0321818 0.0666221 -0.0204419 0.887386 0.5 +-0.0325897 0.0666513 -0.0194517 0.415513 0.5 +-0.0328882 0.0666632 -0.0184721 0.341161 0.402782 +-0.0334203 0.0667037 -0.0174892 0.261181 0.5 +-0.033949 0.0667384 -0.0165589 0.244417 0.188056 +0.0248625 0.12099 -0.00239034 0.608009 0.5 +0.0137891 0.103175 -0.021246 0.833773 0.5 +0.0207514 0.10232 -0.0203322 0.621673 0.5 +0.0226022 0.1018 -0.0197774 0.540598 0.5 +0.0303619 0.0982175 -0.0159971 0.742543 0.5 +0.0274189 0.0834776 -0.02246 0.751148 0.5 +0.0345359 0.11019 -0.00473263 0.53104 0.5 +-0.00764186 0.11082 -0.0214014 0.611996 0.465258 +-0.00653882 0.110902 -0.0214831 0.624279 0.469932 +0.0279206 0.0916217 -0.0209795 0.693816 0.5 +-0.0708142 0.0694524 -0.00574088 0.167011 0.38734 +-0.0721891 0.0696552 -0.00460695 0.138656 0.337292 +-0.0730453 0.0699885 -0.00346826 0.235163 0.5 +-0.0737106 0.0699801 -0.00251138 0.226223 0.440754 +-0.0747624 0.0700921 -0.00148683 0.287135 0.5 +-0.0755745 0.0702081 -0.000465226 0.55895 0.5 +-0.0760489 0.0702549 0.00053996 0.457957 0.5 +-0.0763048 0.0702707 0.00153293 0.492987 0.5 +-0.0766992 0.0702795 0.00252119 0.694805 0.5 +-0.0770775 0.0703016 0.00351307 0.689483 0.5 +-0.0775366 0.070359 0.00451989 0.680634 0.5 +-0.0779103 0.070378 0.00551561 0.660706 0.5 +-0.0448698 0.104232 -0.0209188 0.752386 0.5 +-0.0438685 0.104239 -0.0209341 0.769513 0.5 +-0.0793826 0.0705862 0.00854889 0.692912 0.5 +-0.0795217 0.0705829 0.00954625 0.507181 0.5 +-0.0797359 0.0706327 0.0105539 0.511394 0.5 +-0.079866 0.0706372 0.0115498 0.738439 0.5 +-0.0798846 0.0706301 0.0125498 0.54612 0.5 +-0.0798891 0.0706304 0.0135503 0.574735 0.5 +-0.0798847 0.0706373 0.0145533 0.587556 0.5 +-0.0797756 0.0706254 0.0155549 0.590733 0.5 +-0.0718098 0.0864713 -0.016231 0.453169 0.5 +-0.0588289 0.089737 -0.0207103 0.45501 0.5 +-0.057835 0.0897878 -0.0213715 0.392704 0.464429 +-0.0568374 0.0898133 -0.021762 0.419311 0.449732 +-0.05583 0.0898375 -0.0220234 0.465285 0.5 +-0.0548148 0.0898539 -0.0222515 0.634218 0.372128 +-0.0538034 0.0898608 -0.0222645 0.700822 0.375994 +-0.0528078 0.0898592 -0.0221628 0.774208 0.5 +-0.0895782 0.133632 0.00522749 0.384424 0.439516 +-0.0804601 0.148683 0.000173633 0.507716 0.5 +-0.0772259 0.151416 -0.00590086 0.441893 0.462412 +-0.091455 0.148836 0.0171378 0.474933 0.5 +-0.091474 0.148846 0.0181354 0.505026 0.5 +-0.0728512 0.152626 -0.0378881 0.469214 0.5 +-0.0720202 0.152598 -0.0428872 0.315199 0.5 +-0.071833 0.152571 -0.043913 0.226941 0.5 +-0.0776927 0.169444 -0.0419634 0.29303 0.424261 +-0.0109041 0.121705 -0.010941 0.705348 0.5 +-0.077532 0.159745 -0.0169143 0.54567 0.467499 +-0.0758068 0.170822 -0.0449998 0.331817 0.5 +-0.0791321 0.170818 -0.0399882 0.427035 0.5 +-0.0785409 0.166665 -0.0309637 0.396015 0.5 +-0.0429021 0.171269 -0.00696466 0.424636 0.5 +-0.0676913 0.172275 -0.0570278 0.679624 0.5 +-0.0789669 0.172206 -0.0419919 0.477065 0.5 +-0.0723877 0.16801 -0.0460141 0.484721 0.364062 +-0.00109958 0.115152 -0.0180337 0.558751 0.5 +-0.0785185 0.16527 -0.0289621 0.46911 0.5 +-0.0700369 0.0765697 0.0383694 0.610822 0.5 +-0.0764447 0.154164 -0.0158984 0.302793 0.283685 +-0.0858022 0.150106 0.00719342 0.463797 0.5 +-0.0736262 0.148585 -0.0238576 0.285253 0.5 +-0.0630174 0.113067 -0.0134471 0.616352 0.5 +-0.074873 0.151297 -0.0278802 0.466962 0.5 +-0.0773393 0.152802 -0.0018868 0.470649 0.5 +-0.0713615 0.158186 -0.0419305 0.534661 0.5 +-0.0780988 0.162499 -0.0239377 0.391021 0.478376 +-0.0258217 0.181482 -0.0160394 0.362504 0.341326 +-0.0900165 0.133639 0.00622839 0.559025 0.5 +-0.0254081 0.182912 -0.0140439 0.238678 0.5 +-0.0187316 0.184448 -0.0230478 0.400335 0.5 +-0.0446647 0.117939 -0.0147658 0.64068 0.5 +-0.0162681 0.118552 -0.0135478 0.69405 0.5 +-0.0156178 0.12076 -0.00985742 0.667618 0.5 +0.0232453 0.12098 -0.00440593 0.602275 0.5 +-0.0261628 0.0674202 -0.0335157 0.491055 0.5 +-0.0269668 0.0674701 -0.0325423 0.445714 0.5 +-0.0277895 0.06758 -0.0314768 0.591321 0.323855 +-0.0282054 0.0676114 -0.0305119 0.569039 0.5 +-0.0290693 0.0677067 -0.0294879 0.529077 0.5 +-0.0298099 0.0677811 -0.0284707 0.511122 0.5 +-0.0303159 0.0678299 -0.0274662 0.515505 0.5 +-0.0306901 0.0678681 -0.026462 0.502235 0.5 +-0.0310683 0.0679104 -0.0254551 0.498669 0.460003 +-0.0314424 0.0679449 -0.0244554 0.507458 0.5 +-0.031681 0.0679763 -0.0234472 0.929225 0.5 +-0.0319337 0.0680008 -0.0224492 0.931106 0.5 +-0.0321871 0.0680263 -0.0214501 0.892495 0.5 +-0.0326951 0.0680731 -0.0204474 0.73364 0.5 +-0.0328734 0.0680853 -0.0194707 0.339345 0.402444 +-0.0333922 0.068118 -0.0184774 0.259253 0.5 +-0.0340805 0.0680941 -0.0175876 0.263666 0.5 +0.002489 0.103843 -0.0219556 0.726606 0.5 +0.00917376 0.125511 -0.00726227 0.692726 0.5 +0.0179164 0.102978 -0.02104 0.8691 0.5 +-0.0476462 0.123357 -0.010393 0.707721 0.5 +-0.0433933 0.123406 -0.0104784 0.737591 0.5 +-0.0586388 0.0367329 -0.00984378 0.295521 0.5 +-0.0176742 0.109826 -0.020315 0.689125 0.5 +-0.0166846 0.109701 -0.0201927 0.707174 0.5 +0.00616925 0.0895403 -0.0330971 0.803927 0.5 +-0.0261993 0.095287 -0.0250572 0.480784 0.5 +-0.0734226 0.0711647 -0.00664488 0.238472 0.5 +-0.0747099 0.0713354 -0.00558545 0.126076 0.306508 +-0.0755167 0.0714511 -0.00453448 0.15719 0.5 +-0.0759611 0.0715461 -0.00349282 0.286123 0.5 +-0.0767718 0.0716181 -0.00247133 0.283723 0.45195 +-0.0770237 0.0716688 -0.00146855 0.546715 0.5 +-0.0772056 0.0717509 -0.00044869 0.636744 0.5 +-0.0774933 0.0717304 0.000534742 0.664536 0.5 +-0.0779219 0.0717107 0.00150831 0.634715 0.5 +-0.0784828 0.0717889 0.00251767 0.625965 0.5 +-0.0790435 0.0718734 0.00353541 0.630766 0.5 +-0.0796414 0.0719293 0.00453596 0.630221 0.5 +-0.0802248 0.0719997 0.00554401 0.654199 0.5 +-0.0804084 0.0719394 0.00662383 0.715376 0.5 +-0.0806057 0.0720192 0.00754007 0.529328 0.5 +-0.0807416 0.0720213 0.00853917 0.539168 0.5 +-0.0808524 0.0720445 0.00954101 0.568787 0.5 +-0.080936 0.0720826 0.0105433 0.592471 0.5 +-0.0809806 0.0720629 0.0115411 0.590979 0.5 +-0.0809789 0.0720684 0.0125422 0.608748 0.5 +-0.0809608 0.0720856 0.0135459 0.629914 0.5 +-0.0809392 0.0721012 0.0145438 0.670618 0.5 +-0.0808293 0.0720933 0.0155437 0.667797 0.5 +-0.080608 0.0720682 0.0165498 0.670734 0.5 +-0.0803051 0.0719229 0.0175051 0.527787 0.480493 +-0.0800099 0.07203 0.0185532 0.563406 0.5 +-0.079546 0.0719865 0.0195582 0.610794 0.5 +0.0111873 0.0893276 -0.0308633 0.624227 0.466975 +-0.0368219 0.0900544 -0.0239252 0.611571 0.5 +-0.0378129 0.0900392 -0.0237743 0.43297 0.5 +-0.0388134 0.0900157 -0.0235053 0.601196 0.5 +-0.0398125 0.0899922 -0.0232612 0.476323 0.5 +-0.0902417 0.133644 0.00722857 0.596259 0.5 +-0.0746196 0.147202 -0.0138555 0.311999 0.5 +-0.091536 0.147482 0.0221363 0.624096 0.5 +-0.0916814 0.147477 0.020141 0.605615 0.457318 +-0.0914625 0.148845 0.019136 0.510877 0.473701 +-0.0907031 0.148891 0.0231421 0.533916 0.5 +-0.0904292 0.148866 0.0241237 0.534262 0.462234 +0.04958 0.0652138 -0.00133913 0.494226 0.5 +-0.0904622 0.133649 0.00822658 0.621159 0.5 +-0.0658548 0.0952898 -0.0176963 0.464928 0.5 +-0.0782171 0.159705 -0.021925 0.48956 0.5 +-0.0905935 0.133662 0.00922276 0.634574 0.5 +-0.0782046 0.166684 -0.029962 0.393614 0.5 +-0.0432877 0.171276 -0.00598005 0.252106 0.5 +-0.0682914 0.172271 -0.0560251 0.677086 0.5 +-0.0761969 0.167972 -0.0410261 0.348442 0.5 +-0.0776954 0.16804 -0.0399638 0.324269 0.5 +-0.0107388 0.117999 -0.0150205 0.592673 0.5 +-0.0787666 0.165266 -0.0299591 0.466379 0.458063 +-0.0908157 0.133668 0.01022 0.619682 0.5 +-0.0756811 0.154032 -0.0169094 0.338955 0.339969 +-0.0864971 0.150096 0.00821548 0.328359 0.5 +-0.0869664 0.148754 0.00824898 0.40067 0.459026 +-0.0910325 0.133669 0.0112223 0.65382 0.5 +-0.0910584 0.133686 0.0122173 0.705455 0.5 +-0.0749819 0.151307 -0.0268775 0.563609 0.5 +-0.0771697 0.152833 -0.00289126 0.541902 0.5 +-0.0715838 0.158191 -0.0409255 0.553235 0.467137 +-0.0783091 0.16249 -0.0249404 0.364065 0.5 +-0.0193315 0.182966 -0.0230088 0.495198 0.380718 +-0.0911632 0.133688 0.01322 0.702952 0.5 +-0.0759101 0.148612 -0.0128604 0.516279 0.5 +-0.0778477 0.159718 -0.0189229 0.497188 0.460998 +-0.0556068 0.119255 -0.0119973 0.525099 0.5 +-0.0052585 0.095242 -0.0329133 0.809355 0.5 +-0.0230193 0.120798 -0.0098328 0.625074 0.5 +-0.0260145 0.0688342 -0.034504 0.450574 0.5 +-0.0270649 0.0689032 -0.0335294 0.461902 0.5 +-0.0279464 0.0689892 -0.032513 0.403737 0.5 +-0.0286765 0.0690744 -0.0314836 0.537578 0.5 +-0.0292731 0.0691492 -0.0304581 0.536896 0.377024 +-0.0296624 0.0691842 -0.029462 0.52494 0.5 +-0.030416 0.0692532 -0.0284548 0.850478 0.5 +-0.0306705 0.0692801 -0.0274547 0.906118 0.5 +-0.0310508 0.0693178 -0.0264576 0.903755 0.5 +-0.0314314 0.0693522 -0.0254564 0.915641 0.5 +-0.0317045 0.0693753 -0.0244624 0.490132 0.5 +-0.0321937 0.0694259 -0.0234551 0.904591 0.5 +-0.0324478 0.069454 -0.0224572 0.918597 0.5 +-0.032702 0.0694797 -0.021456 0.723705 0.5 +-0.0330823 0.0695155 -0.0204574 0.535972 0.5 +-0.0336047 0.0695556 -0.0194645 0.224991 0.5 +-0.0339552 0.0695264 -0.0185169 0.168099 0.271035 +0.00449283 0.103624 -0.0217086 0.755673 0.5 +0.00350727 0.103765 -0.0218529 0.738516 0.5 +0.0188735 0.102787 -0.0208351 0.606528 0.5 +-0.0219975 0.107603 -0.0219593 0.634538 0.5 +-0.0252415 0.109687 -0.0201254 0.603606 0.453062 +-0.0240104 0.109837 -0.0203148 0.825875 0.5 +-0.0229027 0.109901 -0.0203838 0.580151 0.5 +0.0176002 0.124344 -0.00401113 0.542796 0.5 +0.0185106 0.12405 -0.00369129 0.570565 0.5 +0.0159009 0.113257 -0.0160529 0.50524 0.5 +-0.074384 0.0726496 -0.00763941 0.303203 0.5 +-0.0755673 0.0727762 -0.00660131 0.219579 0.5 +-0.0765497 0.0728479 -0.00560245 0.183377 0.381418 +-0.077361 0.0729429 -0.00456158 0.243548 0.5 +-0.0781961 0.0730005 -0.00359699 0.289395 0.417879 +-0.0785831 0.0731535 -0.00247436 0.574762 0.5 +-0.0786866 0.073183 -0.00146774 0.512828 0.5 +-0.0784762 0.0731416 -0.000473316 0.728553 0.5 +-0.0786424 0.0732312 0.000545367 0.683272 0.5 +-0.0794271 0.0732336 0.00151817 0.615888 0.5 +-0.0802939 0.0732789 0.00250413 0.351891 0.5 +-0.0808762 0.0733317 0.00350919 0.39189 0.438258 +-0.081164 0.0734408 0.004547 0.520601 0.5 +-0.0814357 0.0734392 0.00553468 0.539045 0.5 +-0.0816964 0.0734472 0.00653139 0.545667 0.5 +-0.0817879 0.0734817 0.0075372 0.595946 0.5 +-0.081817 0.0734713 0.00853447 0.625915 0.5 +-0.0816849 0.073475 0.00953613 0.633769 0.5 +-0.0816979 0.073476 0.0105355 0.653472 0.5 +-0.0816869 0.0734846 0.011537 0.662528 0.5 +-0.0816716 0.0734987 0.0125379 0.668631 0.5 +-0.081586 0.0734778 0.0135382 0.661228 0.5 +-0.0814761 0.0734707 0.0145404 0.702167 0.5 +-0.0813576 0.0734641 0.0155425 0.726782 0.5 +-0.0812898 0.0735018 0.0165324 0.736202 0.5 +-0.0810116 0.0734375 0.0175497 0.747517 0.5 +-0.0806378 0.0734203 0.0185511 0.769039 0.5 +-0.0802598 0.0734072 0.0195467 0.800646 0.5 +-0.0798314 0.0733447 0.0205614 0.801452 0.5 +0.0122103 0.0893249 -0.030653 0.620789 0.5 +-0.0198709 0.104468 -0.0228058 0.703781 0.5 +-0.0188705 0.104448 -0.0228566 0.702738 0.5 +-0.0178695 0.104461 -0.0227631 0.71414 0.5 +-0.0561697 0.0684762 0.0377129 0.587773 0.5 +-0.0912831 0.133698 0.0142161 0.68945 0.5 +-0.073661 0.147179 -0.0178577 0.212484 0.5 +-0.0739033 0.14718 -0.0168588 0.217233 0.5 +-0.091675 0.147474 0.0191435 0.572349 0.5 +-0.0911978 0.147452 0.0151543 0.636897 0.5 +-0.0908755 0.147455 0.0141474 0.427582 0.403691 +-0.0914908 0.1337 0.0152201 0.706799 0.5 +-0.0914381 0.133727 0.0162105 0.740786 0.5 +-0.0470974 0.168427 -0.00297818 0.26159 0.442421 +-0.091525 0.133725 0.0172151 0.758795 0.5 +-0.074839 0.15964 -0.0289433 0.389109 0.5 +-0.0724141 0.159616 -0.0379306 0.497191 0.5 +-0.0423878 0.124291 -0.00941969 0.6461 0.5 +-0.0689 0.172262 -0.0550342 0.670384 0.5 +-0.0915032 0.133721 0.0182157 0.766243 0.5 +-0.0634988 0.173693 -0.0615446 0.385841 0.5 +-0.0914203 0.133738 0.0192152 0.751285 0.5 +-0.0677895 0.175109 -0.0580246 0.621064 0.5 +-0.0788788 0.16526 -0.0309581 0.471836 0.5 +-0.0772898 0.158355 -0.013903 0.588183 0.5 +-0.0751309 0.154085 -0.0179327 0.470841 0.5 +-0.0872329 0.150111 0.00920897 0.313244 0.418294 +-0.0914301 0.133749 0.0202171 0.760957 0.5 +-0.072928 0.148723 -0.0327819 0.285606 0.5 +-0.0750958 0.151313 -0.0258791 0.566131 0.5 +-0.0771905 0.152834 -0.00389169 0.687125 0.5 +-0.0718018 0.158195 -0.0399213 0.532797 0.46153 +-0.0762912 0.162417 -0.0319674 0.403699 0.5 +-0.0202504 0.182971 -0.0220384 0.439171 0.5 +-0.0690156 0.163795 -0.0519803 0.50283 0.5 +-0.0568258 0.120959 -0.0097287 0.788612 0.5 +-0.0218549 0.118022 -0.0129203 0.848967 0.5 +-0.0386191 0.0474546 -0.0163861 0.271122 0.5 +-0.0252565 0.120536 -0.00953586 0.452714 0.5 +0.0369332 0.102635 -0.00864905 0.617572 0.5 +-0.0269157 0.0703179 -0.0345192 0.491915 0.5 +-0.0279086 0.0704216 -0.0334901 0.643523 0.5 +-0.0285896 0.0704574 -0.0325207 0.603835 0.5 +-0.0293484 0.0705264 -0.0315108 0.552722 0.5 +-0.0298407 0.0705727 -0.0304857 0.559866 0.378624 +-0.0303332 0.0706347 -0.0294852 0.538826 0.5 +-0.0309481 0.0706991 -0.0284733 0.519006 0.5 +-0.0313435 0.0707327 -0.0274782 0.498719 0.5 +-0.0316005 0.0707575 -0.0264789 0.484653 0.5 +-0.0319458 0.0708051 -0.0254622 0.907737 0.5 +-0.0322294 0.0708154 -0.0244722 0.47632 0.469168 +-0.0325802 0.0708663 -0.0234636 0.90539 0.5 +-0.0329609 0.0709036 -0.0224656 0.725307 0.5 +-0.0332159 0.0709306 -0.0214641 0.536634 0.5 +-0.0336555 0.0709359 -0.0204834 0.219804 0.405693 +-0.0342456 0.0708723 -0.0195447 0.129292 0 +-0.00323215 0.0940338 -0.0336602 0.622085 0.5 +0.0276939 0.085014 -0.0220629 0.764815 0.5 +0.0268767 0.0854059 -0.022529 0.760918 0.5 +-0.0230123 0.107366 -0.0218426 0.641429 0.5 +-0.0262448 0.109573 -0.0200299 0.581679 0.451495 +-0.0476206 0.111206 -0.0176722 0.754565 0.5 +0.0186443 0.123322 -0.00490878 0.564534 0.432784 +0.00632048 0.123167 -0.0106939 0.706607 0.5 +0.0194036 0.123725 -0.00335403 0.58247 0.5 +0.00434495 0.0973121 -0.027058 0.670854 0.5 +-0.017311 0.117579 -0.0145168 0.725589 0.5 +-0.0758111 0.0741872 -0.00760517 0.260107 0.5 +-0.0768733 0.0742923 -0.00658087 0.246849 0.440401 +-0.077844 0.0743656 -0.00558198 0.238143 0.440892 +-0.0787857 0.0744548 -0.00455566 0.260564 0.452385 +-0.0794876 0.0745597 -0.0035364 0.36458 0.43512 +-0.0797915 0.0746069 -0.00248195 0.44464 0.5 +-0.0797877 0.0746142 -0.00147983 0.687339 0.5 +-0.0797566 0.074638 -0.000471413 0.691143 0.5 +-0.0801245 0.0746668 0.000525034 0.596978 0.5 +-0.0809612 0.0747382 0.0015261 0.535263 0.302071 +-0.0817263 0.0747702 0.00249857 0.329033 0.457027 +-0.0820692 0.0748107 0.00351555 0.46864 0.5 +-0.082326 0.0748249 0.00451639 0.541078 0.5 +-0.0823069 0.0748418 0.00552391 0.561125 0.5 +-0.0824554 0.0748386 0.00652396 0.562933 0.5 +-0.0825515 0.0748682 0.00752949 0.596077 0.5 +-0.0824053 0.0748814 0.00852871 0.683066 0.5 +-0.082219 0.074838 0.0095308 0.684723 0.5 +-0.0820948 0.0748388 0.0105311 0.705722 0.5 +-0.0820812 0.0748515 0.0115294 0.730241 0.5 +-0.0820286 0.074884 0.0125291 0.705727 0.5 +-0.0820593 0.0748753 0.013529 0.711871 0.5 +-0.0819286 0.0748755 0.0145293 0.730114 0.5 +-0.0817699 0.0748179 0.0155353 0.755548 0.5 +-0.0817429 0.0748341 0.0165378 0.754022 0.5 +-0.0815948 0.0748474 0.0175368 0.764102 0.5 +-0.0812999 0.0747823 0.0185535 0.769786 0.5 +-0.0811057 0.0748245 0.0195385 0.787247 0.5 +-0.0807961 0.0747709 0.0205502 0.756405 0.5 +0.00217526 0.0894962 -0.0338845 0.788416 0.5 +-0.0599081 0.112539 -0.0152225 0.581111 0.5 +-0.0172176 0.177147 -0.0249576 0.423698 0.5 +-0.062914 0.11807 -0.00990368 0.566515 0.474186 +-0.0246777 0.0366811 0.0541279 0.389605 0.5 +-0.0913122 0.133748 0.0212171 0.764912 0.5 +-0.091338 0.14476 0.0251578 0.666049 0.5 +-0.091423 0.144753 0.0241539 0.658056 0.5 +-0.0741496 0.147181 -0.0158602 0.306453 0.5 +-0.0747471 0.147201 -0.0128585 0.306414 0.5 +-0.075081 0.147222 -0.0118498 0.31482 0.5 +-0.0891133 0.14743 0.0101992 0.600157 0.5 +-0.0844416 0.147376 0.00515339 0.633935 0.5 +-0.0777094 0.170825 -0.0439812 0.297824 0.5 +-0.0709691 0.153934 -0.0469289 0.208742 0.409643 +-0.0705369 0.155342 -0.0479286 0.293532 0.436592 +-0.0717978 0.155398 -0.0409076 0.630676 0.5 +-0.0691022 0.159548 -0.0519447 0.359827 0.5 +-0.0696134 0.172257 -0.054028 0.666043 0.5 +-0.0911887 0.13375 0.0222165 0.754102 0.5 +-0.0447618 0.116708 -0.0154556 0.672774 0.5 +-0.0910025 0.133774 0.0232232 0.749618 0.5 +-0.0909618 0.13376 0.0242167 0.767464 0.5 +-0.0721022 0.165224 -0.0439746 0.376373 0.5 +-0.0702648 0.156758 -0.047919 0.402441 0.5 +-0.073856 0.154091 -0.0259028 0.61668 0.5 +-0.0900133 0.150126 0.0131697 0.243757 0.5 +-0.0839692 0.148747 0.00414299 0.636574 0.5 +-0.0724483 0.148649 -0.034807 0.25777 0.398185 +-0.0725455 0.148857 -0.0337299 0.453084 0.5 +-0.075231 0.151315 -0.0248804 0.560005 0.5 +-0.0771555 0.15282 -0.00488816 0.716035 0.5 +-0.0721705 0.158208 -0.0379206 0.528263 0.5 +-0.075448 0.162419 -0.0329687 0.412044 0.322088 +-0.0896129 0.139294 0.0321884 0.614446 0.455625 +-0.0909546 0.139232 0.0191849 0.600268 0.5 +0.0227098 0.105005 -0.0172062 0.649499 0.453626 +-0.0263582 0.120444 -0.00943021 0.502587 0.363114 +0.0376532 0.101954 -0.00791483 0.602518 0.5 +1.88808e-05 0.115368 -0.0182789 0.439451 0.5 +-0.0275944 0.0717748 -0.0345689 0.499694 0.5 +-0.0284679 0.0718578 -0.0335433 0.671374 0.5 +-0.0292136 0.07193 -0.032514 0.638311 0.5 +-0.0298783 0.0719759 -0.0315267 0.582481 0.5 +-0.0305049 0.0720397 -0.0305133 0.575137 0.5 +-0.0307766 0.0720324 -0.0295197 0.560357 0.393986 +-0.0313944 0.0721215 -0.0285061 0.524167 0.5 +-0.0318897 0.0721821 -0.0275085 0.524918 0.428277 +-0.0322554 0.0722092 -0.0264952 0.490178 0.5 +-0.0324599 0.0722556 -0.0254696 0.895887 0.5 +-0.0328398 0.0722904 -0.0244709 0.883272 0.5 +-0.033095 0.0723179 -0.02347 0.906967 0.5 +-0.0334757 0.072353 -0.0224701 0.713925 0.5 +-0.0338556 0.0723894 -0.0214737 0.536908 0.5 +-0.0341682 0.0723955 -0.0204945 0.209787 0.5 +0.0139874 0.0924572 -0.0278842 0.551112 0.448921 +9.10767e-05 0.108392 -0.0207972 0.794566 0.5 +-0.0292487 0.115981 -0.0147474 0.8467 0.5 +0.0174482 0.090927 -0.0262636 0.611297 0.5 +0.0165359 0.0912212 -0.0265781 0.587814 0.5 +-0.0485738 0.111377 -0.0178292 0.745533 0.405755 +0.00337067 0.115645 -0.0185908 0.634872 0.5 +0.00537913 0.115468 -0.0184153 0.501635 0.464839 +0.0063888 0.115364 -0.0182909 0.519736 0.475688 +-0.00327774 0.125061 -0.00864173 0.463128 0.474691 +-0.00214312 0.101026 -0.0230018 0.898322 0.5 +0.00237959 0.0976208 -0.0273765 0.689185 0.5 +-0.0767684 0.0756527 -0.0076025 0.3504 0.5 +-0.0779425 0.0757661 -0.00656744 0.376273 0.45071 +-0.0787949 0.0758277 -0.00557109 0.270623 0.466378 +-0.0795844 0.0759236 -0.00451678 0.389329 0.43863 +-0.0802058 0.0759672 -0.0035211 0.320974 0.440705 +-0.0806807 0.0760273 -0.00253172 0.35419 0.455203 +-0.080841 0.0760714 -0.00147772 0.447431 0.5 +-0.0810711 0.076096 -0.000474637 0.591302 0.5 +-0.0814469 0.0761204 0.000521161 0.535046 0.5 +-0.0821611 0.0761834 0.00152312 0.37628 0.5 +-0.0826703 0.0762102 0.00250991 0.329587 0.5 +-0.0830368 0.0762381 0.00350806 0.374156 0.5 +-0.0833901 0.0762729 0.00451303 0.40702 0.5 +-0.0834808 0.0763288 0.0055122 0.454082 0.453792 +-0.0836005 0.0763298 0.006515 0.42405 0.480527 +-0.0836964 0.0763445 0.00752427 0.576288 0.5 +-0.0834735 0.076324 0.00852235 0.655809 0.5 +-0.083145 0.0762813 0.00952219 0.711596 0.5 +-0.0830075 0.0762889 0.0105229 0.696868 0.5 +-0.0828034 0.0762521 0.011522 0.732109 0.5 +-0.0827552 0.07629 0.0125227 0.711914 0.5 +-0.0827739 0.0762807 0.0135216 0.685819 0.5 +-0.0828869 0.0763004 0.0145215 0.680181 0.5 +-0.0829975 0.0763193 0.0155222 0.684291 0.5 +-0.082956 0.0762572 0.0165263 0.700383 0.5 +-0.0829047 0.0763015 0.0175246 0.729611 0.5 +-0.0825849 0.0762413 0.018536 0.74897 0.351069 +-0.0678037 0.0880304 -0.0174902 0.494295 0.5 +-0.0508006 0.0883889 -0.0215985 0.78067 0.5 +-0.0497999 0.0884036 -0.0217208 0.73777 0.5 +-0.0488082 0.0884112 -0.0217819 0.71027 0.5 +-0.0478101 0.0884245 -0.0219224 0.713157 0.5 +-0.0468066 0.088437 -0.0220186 0.707914 0.5 +-0.0679654 0.134068 -0.0084026 0.689801 0.5 +-0.0908453 0.133761 0.025216 0.765606 0.5 +-0.0913279 0.147458 0.016148 0.47157 0.5 +-0.0767777 0.176413 -0.0510191 0.306798 0.5 +-0.091424 0.144749 0.0231531 0.667425 0.5 +-0.0914285 0.144743 0.0221537 0.672871 0.5 +-0.0914617 0.144737 0.0211556 0.678737 0.5 +-0.0823398 0.145942 0.00119384 0.435761 0.5 +-0.082839 0.145958 0.00218243 0.416372 0.473072 +-0.0837301 0.147364 0.00414541 0.645301 0.5 +-0.0907106 0.133758 0.0262122 0.773264 0.5 +-0.0895729 0.151493 0.0191084 0.214973 0.5 +-0.0828958 0.151378 0.00422572 0.320858 0.5 +-0.0718381 0.155405 -0.0399144 0.73179 0.5 +-0.0687753 0.15954 -0.0529632 0.324005 0.398146 +-0.0692603 0.166617 -0.0519986 0.496123 0.5 +-0.0229763 0.0945367 -0.0302901 0.409705 0.5 +-0.0664115 0.162305 -0.0579417 0.375639 0.407331 +-0.000148869 0.0998138 -0.0237113 0.776583 0.5 +-0.0717447 0.165221 -0.0449739 0.357546 0.417239 +-0.0704967 0.156763 -0.0469167 0.525377 0.5 +-0.0738401 0.154086 -0.0269016 0.637889 0.5 +-0.0904268 0.150188 0.0141369 0.407898 0.414558 +-0.0830031 0.148729 0.00315098 0.471063 0.5 +-0.071716 0.148756 -0.0367532 0.252498 0.413169 +-0.0720125 0.148777 -0.0357596 0.286066 0.5 +-0.0753485 0.151324 -0.0238793 0.569398 0.5 +-0.0771542 0.152814 -0.00588992 0.726791 0.5 +-0.072385 0.158213 -0.0369175 0.515781 0.5 +-0.0748156 0.16245 -0.0339456 0.423596 0.5 +-0.0487502 0.167013 -0.00197199 0.32901 0.5 +-0.0904983 0.133768 0.0272133 0.772279 0.5 +-0.0902734 0.133771 0.0282153 0.778428 0.5 +0.0207378 0.105279 -0.0174962 0.622008 0.5 +0.00181128 0.125691 -0.00735123 0.597281 0.5 +0.0148906 0.112386 -0.0170744 0.535965 0.5 +0.00121056 0.115576 -0.018509 0.467101 0.5 +-0.0284441 0.0732827 -0.0345293 0.508751 0.5 +-0.0291577 0.0733109 -0.0335988 0.484695 0.475279 +-0.0297859 0.073336 -0.0325546 0.64535 0.304239 +-0.0305318 0.0734349 -0.0315361 0.589324 0.5 +-0.0308992 0.0734931 -0.0305082 0.599685 0.372673 +-0.0312616 0.0735186 -0.0295121 0.572706 0.5 +-0.0317522 0.0735748 -0.0285005 0.564742 0.5 +-0.03217 0.0735917 -0.0275208 0.528648 0.5 +-0.0327796 0.0736593 -0.0265049 0.500818 0.5 +-0.0331407 0.073693 -0.0254949 0.482946 0.449996 +-0.0334812 0.0737514 -0.024477 0.908561 0.5 +-0.0336084 0.073768 -0.0234794 0.930953 0.5 +-0.0339899 0.0738027 -0.0224777 0.729747 0.5 +-0.03437 0.0738393 -0.0214808 0.539803 0.5 +-0.0348901 0.0738831 -0.020486 0.243281 0.5 +-0.0042883 0.0999626 -0.0238822 0.785416 0.5 +0.0252819 0.100786 -0.0187149 0.692587 0.5 +0.0228212 0.0889774 -0.0242065 0.697809 0.45449 +-0.0496313 0.111407 -0.0178803 0.716908 0.5 +-0.0507728 0.111366 -0.017973 0.70443 0.5 +0.00439305 0.11559 -0.018534 0.65321 0.5 +0.0179014 0.114016 -0.0148856 0.599836 0.5 +0.0198002 0.113601 -0.0144182 0.511141 0.5 +-0.05553 0.12546 -0.00656458 0.919608 0.5 +-0.0376703 0.125135 -0.00632213 0.514782 0.5 +0.00139388 0.0977439 -0.0275242 0.692278 0.5 +0.0181222 0.116444 -0.0134944 0.467947 0.5 +-0.0776083 0.0770893 -0.00760024 0.44576 0.5 +-0.0785348 0.0771858 -0.00655705 0.466796 0.5 +-0.0794073 0.0772395 -0.00557672 0.404551 0.5 +-0.0800971 0.0773092 -0.00453369 0.321748 0.390057 +-0.0807759 0.0773963 -0.00349851 0.337189 0.397182 +-0.0812381 0.0774347 -0.00249764 0.358756 0.419913 +-0.0816036 0.0774754 -0.00149976 0.348421 0.460459 +-0.0819199 0.0775142 -0.000486403 0.399505 0.44434 +-0.0822934 0.0775365 0.000511811 0.379916 0.5 +-0.0828916 0.0775885 0.00151125 0.313948 0.5 +-0.0833848 0.0776237 0.00250717 0.345101 0.5 +-0.0837506 0.0776431 0.00349824 0.379133 0.34085 +-0.0841314 0.0776758 0.00449933 0.401744 0.5 +-0.0841758 0.0777074 0.00551439 0.434437 0.460659 +-0.0844296 0.0777425 0.00651672 0.442632 0.328857 +-0.0846583 0.0777659 0.00751712 0.581014 0.5 +-0.0846449 0.0777798 0.00851725 0.671132 0.5 +-0.0844851 0.0778045 0.00951927 0.714757 0.5 +-0.0844011 0.0777797 0.0105147 0.694459 0.5 +-0.0844149 0.0777754 0.0115138 0.683106 0.5 +-0.0844214 0.0777776 0.012517 0.680725 0.5 +-0.084398 0.0778007 0.013518 0.665468 0.5 +-0.0845392 0.0778023 0.0145171 0.65826 0.375983 +-0.0846638 0.0778105 0.0155166 0.671073 0.5 +-0.0846489 0.0778245 0.0165124 0.708939 0.5 +-0.0845122 0.0778323 0.0175087 0.73754 0.5 +-0.00786973 0.104508 -0.0230207 0.696427 0.5 +0.00812049 0.107282 -0.0201059 0.799655 0.5 +-0.0318198 0.0887354 -0.0251772 0.352231 0.5 +-0.0831098 0.0777207 0.0215128 0.796309 0.5 +-0.082659 0.0776741 0.0225196 0.822833 0.5 +-0.0821806 0.0776422 0.0235195 0.81877 0.5 +-0.0818093 0.0776109 0.0245029 0.785804 0.5 +-0.0458007 0.0884477 -0.0220772 0.707917 0.5 +-0.044804 0.0884409 -0.0220028 0.721437 0.5 +-0.0900566 0.133779 0.0292173 0.789286 0.5 +-0.0894925 0.143336 0.0131803 0.523975 0.379006 +-0.0515007 0.164119 0.00202375 0.346291 0.5 +-0.0235696 0.0368882 0.0541538 0.352009 0.5 +-0.0708338 0.143978 -0.0149516 0.281504 0.5 +-0.0915821 0.144732 0.0201581 0.599476 0.448238 +-0.0768102 0.145866 -0.00487051 0.472689 0.5 +-0.0834257 0.145967 0.00318768 0.427727 0.5 +-0.0776336 0.147268 -0.0038625 0.91294 0.5 +0.0395784 0.104495 -0.000545476 0.583247 0.5 +-0.0747384 0.149908 -0.0288721 0.22342 0.5 +-0.082018 0.151309 0.00327526 0.343516 0.5 +-0.0749299 0.155492 -0.0209193 0.40729 0.453486 +-0.0687931 0.166618 -0.053004 0.506428 0.5 +-0.0665818 0.173704 -0.0590137 0.625859 0.5 +-0.0750214 0.166563 -0.0400315 0.430419 0.5 +-0.00253303 0.110473 -0.0210263 0.670728 0.5 +0.023431 0.11936 -0.00662051 0.616279 0.5 +-0.0891859 0.139294 0.0371595 0.495548 0.474741 +-0.0707247 0.156767 -0.045914 0.559456 0.5 +-0.0734929 0.154069 -0.0299022 0.709974 0.5 +-0.0905664 0.150208 0.0151282 0.407994 0.5 +-0.0387236 0.174145 -0.00898261 0.31153 0.5 +-0.071014 0.148895 -0.037822 0.291122 0.0633409 +-0.0754744 0.151328 -0.022882 0.665139 0.5 +-0.0770107 0.152809 -0.00688788 0.715707 0.5 +-0.0726057 0.158224 -0.0359121 0.490571 0.5 +-0.0725695 0.162422 -0.0399552 0.374103 0.460563 +-0.0484766 0.166987 4.90724e-06 0.371244 0.412863 +-0.0939204 0.128289 0.0212475 0.8318 0.5 +-0.0875197 0.139142 0.00819442 0.52371 0.5 +-0.0904392 0.125398 0.00528343 0.612352 0.344167 +-0.000532268 0.111266 -0.0199168 0.71986 0.5 +0.0157867 0.112048 -0.0167369 0.607608 0.5 +0.00823548 0.113838 -0.0186606 0.569111 0.5 +-0.0558273 0.114722 -0.0152839 0.455132 0.474512 +-0.0289649 0.0747374 -0.0345478 0.515333 0.5 +-0.0298754 0.0748068 -0.0335581 0.687582 0.5 +-0.030539 0.0748507 -0.0325674 0.620924 0.5 +-0.0311696 0.0749025 -0.031542 0.580402 0.5 +-0.0315484 0.0749387 -0.030532 0.574608 0.5 +-0.0317091 0.0749949 -0.0294856 0.905395 0.5 +-0.0321779 0.0750041 -0.0285287 0.521589 0.5 +-0.0330169 0.0750953 -0.0275046 0.47122 0.5 +-0.0333618 0.0751438 -0.0264858 0.891815 0.5 +-0.0337405 0.075174 -0.025488 0.918213 0.5 +-0.0339952 0.0752026 -0.0244888 0.961209 0.5 +-0.0339959 0.0752105 -0.0234884 0.769158 0.5 +-0.0342487 0.0752311 -0.0224883 0.560544 0.5 +-0.0346312 0.0752701 -0.0214845 0.378418 0.5 +-0.0350673 0.0752529 -0.020583 0.18135 0.5 +0.02441 0.101163 -0.0191142 0.628051 0.5 +0.0440634 0.064827 -0.000963389 0.59121 0.444999 +-0.0465999 0.111104 -0.0175509 0.699564 0.5 +-0.0152794 0.114388 -0.017154 0.658085 0.450025 +-0.0142172 0.114376 -0.0171381 0.659341 0.5 +0.0169426 0.11422 -0.015094 0.491543 0.391829 +-0.0405815 0.125646 -0.00686289 0.583875 0.5 +-0.0735086 0.078138 -0.0125733 0.485274 0.5 +-0.0741619 0.0781636 -0.0115723 0.678295 0.287314 +-0.0748509 0.0782361 -0.0105914 0.660679 0.5 +-0.0759199 0.0783227 -0.00959072 0.674819 0.5 +-0.0334887 0.0471143 -0.0243565 0.315073 0.5 +-0.0780856 0.0784826 -0.00760345 0.482831 0.456398 +-0.0790495 0.0785612 -0.00658771 0.465026 0.466522 +-0.0800017 0.0786467 -0.00556567 0.426126 0.5 +-0.0805979 0.0786983 -0.00455339 0.4029 0.5 +-0.0810351 0.0787684 -0.0035164 0.350059 0.353126 +-0.081588 0.0788215 -0.00249997 0.34297 0.433392 +-0.0819874 0.0788394 -0.00151395 0.34113 0.449465 +-0.0824118 0.0788951 -0.000494108 0.318605 0.5 +-0.0827664 0.0789303 0.000509537 0.31756 0.5 +-0.0832232 0.0789707 0.00151853 0.40313 0.371396 +-0.0836967 0.0790161 0.00252063 0.416729 0.5 +-0.0841536 0.0790628 0.0035277 0.440825 0.45837 +-0.0846068 0.0791109 0.00453817 0.478659 0.5 +-0.0849152 0.0791131 0.00550947 0.409107 0.5 +-0.0851867 0.0791254 0.00650076 0.435551 0.5 +-0.0854189 0.0791501 0.00750351 0.590509 0.5 +-0.085501 0.0791776 0.00851156 0.690639 0.5 +-0.0854712 0.0791996 0.00951147 0.726664 0.5 +-0.0854876 0.0791977 0.0105097 0.707646 0.5 +-0.085625 0.079203 0.01151 0.679204 0.5 +-0.0857374 0.0792227 0.0125087 0.698173 0.5 +-0.0857527 0.0792184 0.0135098 0.734162 0.5 +-0.0856126 0.0792275 0.0145081 0.718151 0.5 +-0.0857232 0.0792432 0.0155047 0.721672 0.5 +-0.0857238 0.0792489 0.0165033 0.759172 0.5 +-0.0855011 0.0792275 0.0175034 0.804379 0.5 +-0.0852267 0.0792333 0.0184927 0.811614 0.5 +-0.0848856 0.0792043 0.0194951 0.62356 0.487801 +-0.084435 0.0791603 0.0205035 0.628434 0.487806 +-0.0839381 0.0791399 0.0214982 0.641039 0.5 +-0.0833697 0.0790868 0.0225099 0.836404 0.5 +-0.0829431 0.0790271 0.0235207 0.795268 0.5 +-0.0828165 0.0790258 0.0245191 0.765445 0.5 +-0.0827835 0.0790493 0.0255103 0.751595 0.5 +-0.082569 0.0790202 0.0265184 0.775703 0.5 +0.00913686 0.107291 -0.0199257 0.602352 0.5 +0.0260633 0.114349 -0.00924148 0.539116 0.454724 +-0.0903603 0.143336 0.0142018 0.533468 0.5 +-0.0213746 0.0936314 -0.0333712 0.517422 0.5 +-0.0737276 0.154081 -0.027902 0.672638 0.5 +-0.0717266 0.143977 -0.0139286 0.228277 0 +-0.0766685 0.144473 -0.00485242 0.467331 0.5 +-0.076233 0.145832 -0.00587217 0.478937 0.431646 +-0.0890361 0.146068 0.0101777 0.593544 0.5 +-0.0772746 0.147261 -0.00486297 0.910902 0.5 +-0.0746273 0.149901 -0.0298709 0.265894 0.5 +-0.0809707 0.15134 0.0022444 0.322719 0.5 +-0.07566 0.1555 -0.0199215 0.301022 0.5 +-0.0670035 0.166617 -0.0570134 0.458151 0.5 +-0.0674097 0.173701 -0.0580011 0.611696 0.5 +-0.0760774 0.166574 -0.0390172 0.38093 0.364872 +-0.0685252 0.175096 -0.0570393 0.674524 0.5 +-0.0719124 0.168014 -0.0470137 0.492758 0.5 +-0.078183 0.161072 -0.0259393 0.439977 0.5 +-0.0719027 0.156807 -0.0389123 0.783268 0.5 +-0.0733817 0.154066 -0.0309045 0.70569 0.5 +-0.0908844 0.150204 0.0171288 0.482239 0.5 +-0.0694849 0.173671 -0.0550315 0.663755 0.5 +-0.0681426 0.159579 -0.055037 0.286043 0.420335 +-0.0755977 0.151334 -0.0218791 0.665868 0.5 +-0.076928 0.152806 -0.00788984 0.712479 0.5 +-0.0727584 0.158224 -0.0349231 0.485006 0.456147 +-0.0723047 0.162425 -0.0409479 0.368158 0.47147 +-0.071967 0.162417 -0.0419522 0.366802 0.410778 +-0.0195235 0.184467 -0.0220738 0.380552 0.5 +-0.0226414 0.0961417 -0.0259441 0.75553 0.5 +0.0287219 0.115289 -0.00622497 0.645936 0.5 +-0.0929632 0.124088 0.0102675 0.565866 0.5 +0.0166934 0.111749 -0.0164123 0.617956 0.5 +0.00727636 0.114035 -0.0188609 0.553095 0.5 +-0.0547371 0.114833 -0.0154193 0.604609 0.5 +-0.0444987 0.125316 -0.00848377 0.59037 0.5 +-0.0293563 0.0761839 -0.0345604 0.406811 0.5 +-0.0303959 0.0762676 -0.0335676 0.672822 0.5 +-0.0310416 0.0763051 -0.0325503 0.625166 0.329336 +-0.0316679 0.0763713 -0.0315414 0.595575 0.5 +-0.0320743 0.0763998 -0.0305477 0.559569 0.5 +-0.0323187 0.0763806 -0.0295323 0.551727 0.425106 +-0.0327106 0.0764924 -0.028531 0.50742 0.431889 +-0.0334032 0.0765382 -0.0275106 0.487246 0.5 +-0.0337735 0.0765809 -0.0265027 0.500372 0.462958 +-0.0340008 0.0766042 -0.0254969 0.961744 0.5 +-0.0342551 0.0766309 -0.0244955 0.982427 0.5 +-0.0343831 0.0766477 -0.0234928 0.772307 0.5 +-0.0346365 0.0766699 -0.022492 0.583023 0.5 +-0.0347632 0.076687 -0.0214942 0.394656 0.5 +-0.0348898 0.0767003 -0.020496 0 0 +-0.010458 0.0953808 -0.0330949 0.633362 0.5 +-0.00943219 0.095325 -0.0330289 0.645211 0.5 +-0.0193753 0.114664 -0.0174341 0.793027 0.5 +0.0159989 0.11444 -0.0153318 0.494284 0.380491 +0.0150842 0.114728 -0.0156323 0.532012 0.5 +0.0100557 0.112263 -0.0189498 0.800579 0.5 +-0.0731505 0.0794744 -0.0135813 0.683447 0.5 +-0.074125 0.079542 -0.012586 0.497906 0.5 +-0.074863 0.0795889 -0.0115995 0.47673 0.5 +-0.0755898 0.0796389 -0.010614 0.646637 0.5 +-0.00855727 0.119157 -0.0142712 0.620434 0.5 +-0.0778906 0.0797955 -0.00863863 0.452437 0.5 +-0.0789135 0.0799145 -0.00757704 0.63621 0.5 +-0.0796103 0.0799856 -0.0065507 0.637376 0.5 +-0.0804662 0.0800422 -0.00555374 0.569954 0.5 +-0.0810451 0.0800939 -0.00453207 0.417273 0.397802 +-0.081408 0.0801232 -0.00353296 0.339707 0.456259 +-0.0819076 0.08016 -0.00254028 0.334997 0.428232 +-0.0823568 0.0802033 -0.00152209 0.344773 0.385903 +-0.082746 0.0802849 -0.00049163 0.425325 0.459145 +-0.083003 0.0803028 0.000504056 0.601403 0.5 +-0.0833731 0.0803286 0.00149951 0.598131 0.5 +-0.0838486 0.0803675 0.00250235 0.607528 0.5 +-0.084323 0.0804069 0.00350409 0.618318 0.5 +-0.0847861 0.0804507 0.00450965 0.462675 0.36105 +-0.0852421 0.0804972 0.00551565 0.476887 0.469979 +-0.0856435 0.0805169 0.00650219 0.41808 0.5 +-0.0859756 0.0805547 0.00750576 0.588431 0.5 +-0.0860997 0.0805682 0.0085045 0.659357 0.5 +-0.0861137 0.0805676 0.00950062 0.680433 0.5 +-0.086202 0.0805924 0.0105044 0.670551 0.5 +-0.0863191 0.0806082 0.0115067 0.679895 0.372133 +-0.0864769 0.0806081 0.0125015 0.697591 0.5 +-0.086559 0.0806364 0.0135028 0.745389 0.5 +-0.0864234 0.0806346 0.0145003 0.753888 0.5 +-0.0864209 0.080641 0.0154973 0.767422 0.5 +-0.0863191 0.0806349 0.0164939 0.787618 0.5 +-0.0861064 0.0806138 0.0174966 0.618245 0.5 +-0.0858462 0.0806083 0.01849 0.630527 0.5 +-0.0855847 0.0806062 0.0194802 0.632009 0.488196 +-0.0852141 0.0805923 0.0204766 0.638209 0.5 +-0.0846192 0.0805533 0.0214764 0.837044 0.5 +-0.0839745 0.0804809 0.0225006 0.838214 0.5 +-0.0837154 0.0804764 0.0234959 0.785406 0.5 +-0.0837382 0.0804711 0.0245022 0.757656 0.5 +-0.083714 0.0804887 0.0254979 0.778078 0.5 +-0.0835033 0.0804619 0.0265017 0.791412 0.5 +0.0218142 0.117368 -0.0105004 0.488016 0.469535 +-0.0898716 0.133794 0.0302191 0.826332 0.5 +-0.0743879 0.143042 -0.00684484 0.48448 0.5 +-0.0756919 0.143067 -0.00582827 0.457416 0.5 +-0.0775304 0.143071 -0.00473432 0.424823 0.5 +-0.0898405 0.133789 0.0312158 0.839988 0.5 +-0.08982 0.133788 0.032216 0.851818 0.5 +-0.078067 0.144487 -0.00381208 0.443738 0.5 +-0.0864962 0.112872 0.0280752 0.497488 0.45831 +-0.0896495 0.146064 0.0111487 0.339073 0.0829918 +-0.0769165 0.147253 -0.00586064 0.900956 0.5 +-0.0751825 0.149958 -0.0238676 0.375609 0.5 +-0.0793223 0.151473 0.000118749 0.544125 0.5 +-0.0765864 0.155527 -0.0189073 0.339703 0.5 +-0.0771455 0.156966 -0.0119003 0.901962 0.5 +-0.0775564 0.166657 -0.0379504 0.337177 0.5 +-0.0693729 0.175081 -0.056043 0.46373 0.468719 +0.0225495 0.119713 -0.00701355 0.597446 0.456174 +-0.0630792 0.17626 -0.0613621 0.41716 0.5 +-0.0512338 0.164096 -0.00192926 0.389108 0.5 +-0.0720417 0.156813 -0.0379146 0.78208 0.5 +-0.0729901 0.154042 -0.0338982 0.702346 0.5 +-0.0908852 0.150208 0.0181276 0.499158 0.5 +-0.0497129 0.165582 0.00102101 0.365587 0.411773 +-0.075728 0.151337 -0.0208826 0.649535 0.5 +-0.0767656 0.152802 -0.00889022 0.705017 0.5 +-0.07299 0.158232 -0.0339184 0.483158 0.5 +-0.074349 0.162439 -0.0349528 0.443476 0.447776 +-0.0740612 0.16798 -0.0430295 0.42681 0.5 +-0.0202891 0.184471 -0.0210772 0.329695 0.5 +-0.0879643 0.115809 0.00328051 0.341709 0.5 +-0.0898089 0.133793 0.0332137 0.849829 0.5 +-0.0931866 0.124098 0.0112689 0.605575 0.5 +0.0176113 0.111464 -0.0161155 0.629569 0.462925 +0.00626863 0.114136 -0.0189815 0.534917 0.484866 +-0.0535918 0.114983 -0.0155816 0.596096 0.5 +-0.0136895 0.0952904 -0.0330103 0.637218 0.5 +-0.0293835 0.0775974 -0.0345936 0.406558 0.5 +-0.0305455 0.0776911 -0.0335901 0.516027 0.5 +-0.0312863 0.0777611 -0.0325602 0.678336 0.5 +-0.0319516 0.077812 -0.0315646 0.644634 0.5 +-0.0323682 0.0778417 -0.0305703 0.620765 0.5 +-0.0324762 0.0778813 -0.0295332 0.578697 0.420295 +-0.0327059 0.0779055 -0.0285245 0.538959 0.437218 +-0.0331798 0.0779303 -0.0275261 0.496694 0.5 +-0.0338875 0.0780022 -0.0265044 0.495801 0.5 +-0.0341434 0.0780256 -0.025502 0.521349 0.469289 +-0.0342918 0.0780403 -0.0245107 0.426806 0.5 +-0.0345153 0.0780634 -0.0235017 0.586393 0.5 +-0.0346424 0.0780819 -0.0225024 0.394439 0.5 +-0.0347689 0.0780934 -0.0215038 0.198402 0.5 +-0.062019 0.17397 -0.0618399 0.41905 0.5 +0.0226855 0.103953 -0.0180758 0.503348 0.5 +-0.0182701 0.114743 -0.017523 0.822125 0.5 +0.0188656 0.11384 -0.0146811 0.588136 0.462604 +-0.0250407 0.11597 -0.0147569 0.858098 0.5 +-0.0239792 0.115969 -0.0147616 0.854957 0.5 +-0.0730191 0.0808411 -0.0145801 0.472058 0.5 +-0.0739163 0.0808829 -0.0136046 0.481966 0.456126 +-0.0747315 0.0809443 -0.0125955 0.491481 0.448568 +-0.0755937 0.0809959 -0.0116148 0.450047 0.5 +-0.0766495 0.0810868 -0.0106019 0.361733 0.5 +-0.077886 0.0811556 -0.0096326 0.458705 0.5 +-0.078886 0.0812827 -0.00855752 0.469718 0.5 +-0.0794458 0.0813481 -0.00752304 0.689292 0.5 +-0.0802136 0.0813857 -0.00655277 0.663106 0.5 +-0.0810819 0.0814326 -0.00557353 0.61145 0.5 +-0.0817169 0.081448 -0.00456785 0.327282 0.438748 +-0.0823654 0.0815422 -0.00354068 0.328313 0.459142 +-0.0828253 0.0815398 -0.00255091 0.331477 0.440361 +-0.0831356 0.0816494 -0.00150376 0.424487 0.5 +-0.0833287 0.0817012 -0.000498118 0.435054 0.387394 +-0.0835863 0.0817078 0.00050138 0.439571 0.5 +-0.0838449 0.0817176 0.00149669 0.58766 0.5 +-0.0841291 0.0817203 0.00248105 0.624607 0.358494 +-0.0845128 0.0817443 0.00347449 0.6208 0.5 +-0.0849458 0.0817985 0.00448942 0.465562 0.5 +-0.0852968 0.0818288 0.005494 0.47576 0.472253 +-0.085793 0.0818712 0.00648437 0.425312 0.415196 +-0.0861503 0.0818963 0.00748815 0.599302 0.5 +-0.0862444 0.0819176 0.00849345 0.651309 0.5 +-0.0863906 0.0819518 0.00951177 0.672696 0.401648 +-0.0865124 0.0819745 0.0105022 0.681305 0.5 +-0.0866257 0.081991 0.0115028 0.694405 0.5 +-0.0866809 0.0819772 0.0124969 0.730111 0.378112 +-0.0867126 0.0819778 0.0134931 0.727073 0.386679 +-0.0867731 0.0820034 0.0144903 0.737547 0.5 +-0.0866821 0.0819953 0.0154888 0.745129 0.5 +-0.0865635 0.0819919 0.0164862 0.764679 0.5 +-0.0864107 0.0819973 0.0174801 0.789222 0.5 +-0.0861937 0.0819823 0.0184808 0.612048 0.5 +-0.0859388 0.0819759 0.019473 0.62781 0.487779 +-0.0856119 0.0819492 0.0204815 0.644301 0.5 +-0.0850735 0.0819457 0.0214598 0.846089 0.5 +-0.0843946 0.0818335 0.0225112 0.799463 0.5 +-0.0842824 0.0818436 0.0235004 0.789192 0.355697 +-0.084345 0.0818627 0.0244959 0.769365 0.5 +-0.0842452 0.0818537 0.025498 0.783923 0.5 +-0.0840796 0.0818676 0.0264914 0.62697 0.480009 +-0.0837452 0.0818387 0.0274964 0.653878 0.5 +-0.0898373 0.133802 0.0342135 0.835217 0.5 +-0.0523382 0.161184 -0.00281855 0.238109 0.5 +-0.0783198 0.147274 -0.0028373 0.434363 0.5 +-0.088747 0.148763 0.0102254 0.411708 0.441423 +-0.0787761 0.1431 -0.00379727 0.50944 0.5 +-0.0899071 0.133806 0.0352156 0.588691 0.476051 +-0.0792589 0.1445 -0.00280742 0.534536 0.5 +-0.0801261 0.144525 -0.00183492 0.579423 0.5 +-0.0756616 0.0695139 0.0239361 0.726397 0.5 +-0.0905476 0.146077 0.0141502 0.419629 0.5 +-0.076687 0.14724 -0.00686649 0.371425 0.5 +-0.0752992 0.149965 -0.0228671 0.432809 0.5 +-0.0783656 0.151459 -0.000884796 0.616361 0.5 +-0.0769992 0.155545 -0.0179052 0.374104 0.46185 +-0.0789979 0.165257 -0.0319521 0.468719 0.442073 +-0.0701879 0.175082 -0.0550269 0.466481 0.5 +-0.0129143 0.104805 -0.023047 0.626392 0.5 +-0.073083 0.166616 -0.0429976 0.464777 0.392931 +-0.0507685 0.164108 -0.00292996 0.407964 0.5 +-0.0728984 0.156837 -0.0329194 0.697767 0.5 +-0.0727818 0.154043 -0.034905 0.709438 0.5 +-0.0903295 0.150229 0.0211233 0.530123 0.5 +-0.0906536 0.150215 0.0201223 0.485477 0.5 +-0.0758603 0.151341 -0.0198831 0.624896 0.5 +-0.0765967 0.152807 -0.00988734 0.703016 0.5 +-0.0731091 0.158237 -0.0329184 0.463238 0.5 +-0.0717079 0.162415 -0.0429474 0.365725 0.425669 +-0.00976599 0.121876 -0.011136 0.744471 0.5 +-0.0210079 0.184692 -0.0198306 0.330472 0.33127 +-0.0754641 0.149954 -0.0208706 0.421097 0.5 +-0.0236634 0.123398 -0.00459221 0.499006 0.5 +-0.0934182 0.124107 0.0122673 0.632719 0.5 +0.00528045 0.114267 -0.0191116 0.540485 0.5 +-0.0524481 0.115128 -0.0157418 0.615765 0.5 +0.0553699 0.0651884 0.000788532 0.628404 0.43579 +-0.0284578 0.0789297 -0.0355663 0.510197 0.469799 +-0.0295859 0.0790353 -0.0345348 0.726067 0.5 +-0.0304017 0.0791045 -0.033577 0.707908 0.5 +-0.0311614 0.0791685 -0.0325602 0.623135 0.5 +-0.031899 0.0792306 -0.0315346 0.598782 0.5 +-0.0322859 0.0792627 -0.0305329 0.569436 0.5 +-0.0325368 0.0792892 -0.0295289 0.536413 0.5 +-0.0327803 0.0793117 -0.0285199 0.520107 0.460611 +-0.0329958 0.0793378 -0.0275102 0.951037 0.5 +-0.033504 0.079379 -0.0265108 0.884599 0.5 +-0.0340215 0.0794269 -0.0255119 0.417784 0.5 +-0.0343151 0.0794495 -0.0245241 0.343839 0.5 +-0.0346304 0.079471 -0.0235463 0.254224 0.381284 +-0.0353039 0.0794833 -0.0226806 0.112354 0 +-0.0573945 0.0371513 -0.0102727 0.238385 0.5 +0.0207547 0.10431 -0.0184628 0.579962 0.482592 +0.0297172 0.11319 -0.0079908 0.659791 0.5 +0.00472897 0.0950887 -0.030676 0.803543 0.5 +-0.0271235 0.11599 -0.0147668 0.614605 0.5 +-0.0416312 0.117641 -0.0144485 0.692618 0.5 +-0.0426472 0.117732 -0.0145554 0.676899 0.5 +-0.0740187 0.0822617 -0.01463 0.389122 0.470232 +-0.0749535 0.0823401 -0.0135889 0.488386 0.5 +-0.0756827 0.0823892 -0.0125945 0.484509 0.5 +-0.0766222 0.0824671 -0.0115781 0.458038 0.46911 +-0.0777262 0.0825344 -0.0106004 0.503437 0.5 +-0.0788426 0.0825957 -0.0096075 0.388145 0.464633 +-0.0795322 0.0826724 -0.00859002 0.492402 0.5 +-0.0800112 0.0826849 -0.00756298 0.682599 0.306549 +-0.0807043 0.0827741 -0.00656651 0.632446 0.5 +-0.0816591 0.0828436 -0.00556986 0.556014 0.5 +-0.0826039 0.0829175 -0.00455606 0.498554 0.5 +-0.0833629 0.0829469 -0.00357326 0.291686 0.5 +-0.0839827 0.0830482 -0.0025149 0.367783 0.5 +-0.0843197 0.0830919 -0.00150258 0.424686 0.5 +-0.0844141 0.083121 -0.000497419 0.443293 0.5 +-0.0846694 0.0831371 0.000497005 0.434911 0.406758 +-0.0850182 0.0831804 0.00149618 0.447321 0.405251 +-0.0850671 0.0831487 0.00248224 0.438514 0.383381 +-0.085494 0.083212 0.00349969 0.418742 0.5 +-0.0856607 0.0832001 0.00448541 0.614394 0.5 +-0.0859248 0.0832079 0.00547822 0.503059 0.34354 +-0.0861846 0.083225 0.00647736 0.570376 0.5 +-0.0862277 0.0832671 0.00749085 0.642203 0.5 +-0.0863077 0.083293 0.0084931 0.68266 0.5 +-0.086438 0.0832915 0.00949498 0.702349 0.391399 +-0.0865698 0.0833108 0.0104907 0.684931 0.393861 +-0.0866662 0.0833296 0.0114916 0.700614 0.5 +-0.0866888 0.0833263 0.0124872 0.738657 0.5 +-0.0867616 0.0833332 0.0134846 0.766706 0.368871 +-0.0867571 0.0833567 0.0144816 0.742894 0.5 +-0.0866936 0.0833424 0.0154842 0.73092 0.5 +-0.0865991 0.0833319 0.0164838 0.754462 0.5 +-0.086501 0.0833246 0.0174861 0.772406 0.5 +-0.0864179 0.083353 0.0184733 0.612748 0.5 +-0.0861267 0.0833147 0.0194823 0.618897 0.485937 +-0.0858835 0.0833066 0.0204824 0.828647 0.5 +-0.0855025 0.0832965 0.0214753 0.830479 0.5 +-0.0851368 0.0832799 0.0224738 0.80671 0.5 +-0.0846445 0.0832051 0.023501 0.790067 0.5 +-0.0845698 0.0831877 0.0245094 0.814757 0.5 +-0.0845601 0.0832447 0.0254813 0.80497 0.5 +-0.0844285 0.0832425 0.0264792 0.798177 0.5 +-0.0841359 0.0832101 0.027497 0.6384 0.5 +-0.0899789 0.133805 0.0362152 0.60139 0.5 +-0.0917617 0.141982 0.0191718 0.58379 0.5 +-0.091634 0.141989 0.0201675 0.655388 0.5 +-0.0899902 0.146067 0.012148 0.392848 0.5 +-0.0797197 0.143117 -0.0027917 0.602831 0.5 +-0.0887185 0.143427 0.0331607 0.87147 0.5 +-0.0834729 0.144593 0.00316535 0.401978 0.405251 +-0.0716625 0.145448 -0.0198949 0.195119 0 +-0.0366243 0.151025 -0.00298791 0.384062 0.5 +-0.0898169 0.147438 0.0111767 0.410597 0.5 +0.0313027 0.114101 -0.00492854 0.647781 0.455637 +-0.0846698 0.148755 0.00515607 0.613381 0.5 +-0.0908832 0.150197 0.0161314 0.431058 0.5 +-0.0748416 0.154048 -0.0189002 0.535072 0.440177 +-0.0754952 0.15561 -0.00190651 0.247973 0.5 +-0.0790033 0.16525 -0.0329555 0.439961 0.5 +-0.010699 0.104948 -0.0231645 0.700683 0.5 +-0.080949 0.137599 -0.00280806 0.695898 0.5 +-0.0900062 0.133811 0.0372136 0.60674 0.5 +-0.0500022 0.16408 -0.00389251 0.27682 0.5 +-0.0730192 0.156843 -0.0319176 0.682362 0.5 +-0.0727415 0.154031 -0.0358995 0.713639 0.5 +-0.0900812 0.150215 0.0221142 0.381084 0.471202 +-0.0722746 0.15542 -0.0369062 0.771543 0.5 +-0.0759474 0.151351 -0.0188826 0.631865 0.5 +-0.0751782 0.152724 -0.0149145 0.668348 0.5 +-0.0733241 0.158247 -0.0319134 0.461116 0.5 +-0.0705096 0.1624 -0.046948 0.379835 0.462544 +-0.021676 0.184465 -0.0190713 0.321483 0.5 +-0.0938558 0.126876 0.0162567 0.77813 0.5 +0.0305816 0.112813 -0.00758269 0.668611 0.5 +-0.0936376 0.124116 0.0132691 0.681704 0.5 +-0.0502854 0.11522 -0.0158495 0.665516 0.5 +-0.0513475 0.115214 -0.0158415 0.642094 0.5 +-0.0580499 0.11553 -0.0140963 0.572918 0.5 +-0.0285168 0.0803552 -0.0356291 0.48086 0.471486 +-0.0294013 0.0804353 -0.034602 0.66924 0.5 +-0.0302691 0.080511 -0.0335682 0.627475 0.5 +-0.0309197 0.0805646 -0.0325792 0.400279 0.474681 +-0.0316705 0.0806285 -0.0315587 0.35923 0.5 +-0.0321423 0.0806683 -0.0305334 0.519837 0.5 +-0.0326422 0.080708 -0.0295257 0.518699 0.5 +-0.0328741 0.0807299 -0.0285171 0.980014 0.5 +-0.0330023 0.0807475 -0.0275162 0.95443 0.5 +-0.0333828 0.0807789 -0.0265175 0.94181 0.5 +-0.0337955 0.0808164 -0.0255276 0.433296 0.5 +-0.0342171 0.0808501 -0.0245506 0.363788 0.5 +-0.0346997 0.0808739 -0.0236048 0.308137 0.5 +-0.0364431 0.0379518 -0.0296736 0.270935 0.441303 +-0.0231503 0.121506 -0.00857745 0.429367 0.5 +0.0224677 0.112582 -0.013341 0.57483 0.384304 +0.0252174 0.115733 -0.00872379 0.497924 0.5 +-0.0261028 0.115949 -0.0147279 0.612256 0.5 +-0.0406505 0.117474 -0.0142631 0.704926 0.5 +-0.0324809 0.117911 -0.0127388 0.746375 0.5 +-0.0314168 0.117929 -0.0127586 0.757176 0.5 +-0.0747046 0.0837005 -0.0145969 0.697391 0.5 +-0.0756553 0.0837701 -0.0135751 0.497679 0.5 +-0.0763952 0.0838159 -0.0125906 0.487088 0.5 +-0.077345 0.0838842 -0.0115833 0.68444 0.5 +-0.0783276 0.0839475 -0.0105972 0.489416 0.5 +-0.0792621 0.084024 -0.00957002 0.693435 0.5 +-0.0798951 0.0840617 -0.00859358 0.507723 0.5 +-0.0803392 0.0841108 -0.00756769 0.700692 0.5 +-0.0811308 0.0841829 -0.00653469 0.655568 0.5 +-0.0822314 0.0842513 -0.00555381 0.606619 0.5 +-0.0830843 0.0843065 -0.0045636 0.559152 0.5 +-0.0839142 0.0843714 -0.00355138 0.502952 0.5 +-0.0846111 0.084433 -0.00253466 0.368575 0.5 +-0.0849678 0.0844642 -0.00152644 0.333674 0.458893 +-0.0852858 0.0845126 -0.000515374 0.337948 0.42446 +-0.0856455 0.0845341 0.000486997 0.33454 0.5 +-0.0860138 0.0845642 0.00148082 0.338464 0.453807 +-0.0864815 0.0846104 0.00248575 0.350454 0.407143 +-0.0868299 0.0846427 0.00348465 0.368583 0.465055 +-0.0870453 0.0846718 0.00449266 0.499586 0.5 +-0.0870945 0.0846532 0.00548002 0.548084 0.5 +-0.0871031 0.0846537 0.0064784 0.634669 0.5 +-0.086966 0.0846591 0.00747852 0.700575 0.5 +-0.0868004 0.0846768 0.00848321 0.740846 0.5 +-0.086804 0.0846773 0.00948205 0.670109 0.5 +-0.0869453 0.0846809 0.01048 0.64356 0.5 +-0.0870838 0.0846865 0.0114769 0.679797 0.5 +-0.0870566 0.0847034 0.0124776 0.752229 0.5 +-0.0869081 0.0847086 0.0134765 0.7966 0.5 +-0.0868853 0.0847213 0.0144753 0.811027 0.5 +-0.0868133 0.0846987 0.0154763 0.756972 0.5 +-0.086761 0.084678 0.016478 0.756187 0.5 +-0.086829 0.0847067 0.0174745 0.755643 0.5 +-0.0867621 0.084687 0.0184803 0.777197 0.5 +-0.0866231 0.0846922 0.0194779 0.792655 0.5 +-0.0864956 0.084691 0.0204775 0.800082 0.5 +-0.0862565 0.0846802 0.0214754 0.803533 0.5 +-0.0861039 0.0846923 0.0224682 0.812553 0.5 +-0.0857911 0.0847131 0.0234468 0.81276 0.5 +-0.085128 0.0845897 0.0244984 0.635139 0.5 +-0.0848476 0.0845966 0.0254873 0.826382 0.5 +-0.0846364 0.0845811 0.0264985 0.641251 0.5 +-0.0899225 0.133822 0.0382154 0.630954 0.46721 +-0.0897633 0.133813 0.0392039 0.641589 0.5 +-0.085403 0.141865 0.00516647 0.463398 0.5 +-0.0910722 0.141959 0.0151878 0.562495 0.5 +-0.0890108 0.142042 0.0341592 0.862697 0.5 +-0.08762 0.143285 0.0101199 0.618467 0.5 +-0.0889467 0.143422 0.0321606 0.881127 0.5 +-0.0839561 0.144602 0.00415973 0.401005 0.5 +-0.0757697 0.145819 -0.00688494 0.481482 0.5 +-0.0914628 0.146095 0.0181484 0.497127 0.5 +-0.089139 0.139182 0.0122002 0.453134 0.5 +-0.0861526 0.148758 0.00721004 0.607072 0.5 +-0.0853634 0.14876 0.00617316 0.601766 0.5 +-0.0888439 0.150092 0.0112242 0.316086 0.412966 +-0.0743362 0.15411 -0.0219057 0.579771 0.5 +-0.0545091 0.161256 6.9518e-05 0.202143 0.5 +-0.078769 0.165248 -0.0339573 0.379437 0.5 +-0.0321404 0.106348 -0.0206098 0.806789 0.5 +-0.0816586 0.137613 -0.00180043 0.66291 0.5 +-0.0846496 0.129332 -0.00265191 0.541928 0.5 +-0.0492398 0.164062 -0.00484765 0.316762 0.5 +-0.0743438 0.156862 -0.0249223 0.370997 0.454744 +-0.0725366 0.154032 -0.0369032 0.727756 0.5 +-0.0891677 0.150225 0.0241083 0.331631 0.5 +-0.0699623 0.155307 -0.0499609 0.292087 0.5 +-0.0721646 0.155417 -0.0379087 0.73445 0.5 +-0.0759412 0.151358 -0.0178788 0.634578 0.5 +-0.0749763 0.152739 -0.0169005 0.673938 0.5 +-0.0734754 0.158245 -0.0309204 0.455443 0.5 +-0.070167 0.162396 -0.0479528 0.387091 0.463335 +-0.0192518 0.185941 -0.0210687 0.27681 0.291977 +-0.0920162 0.126943 0.0352547 0.821181 0.5 +-0.093776 0.124126 0.0142628 0.712382 0.5 +-0.0522762 0.123638 -0.00859751 0.743809 0.5 +0.0210264 0.0895934 -0.0248804 0.689553 0.5 +0.0387097 0.105846 2.20656e-05 0.569317 0.461661 +-0.0286135 0.0817842 -0.0355888 0.480453 0.5 +-0.0292965 0.0818454 -0.0346209 0.702753 0.5 +-0.030041 0.0819074 -0.0335886 0.607897 0.5 +-0.0306482 0.0819602 -0.032565 0.583654 0.5 +-0.0311686 0.0820079 -0.0315681 0.522806 0.5 +-0.0320154 0.082069 -0.0305372 0.509812 0.5 +-0.032545 0.0821172 -0.0295502 0.547675 0.5 +-0.0327877 0.082138 -0.0285334 0.53895 0.446135 +-0.0331507 0.0821697 -0.0275285 0.513077 0.460748 +-0.0333885 0.082189 -0.0265241 0.960417 0.5 +-0.0336642 0.082217 -0.0255373 0.425831 0.5 +-0.034171 0.0822565 -0.0245355 0.358336 0.5 +-0.0348253 0.0822923 -0.0236386 0.356523 0.5 +0.0130456 0.0946785 -0.0262358 0.458564 0.469807 +0.0230175 0.0903576 -0.0236845 0.646946 0.5 +0.0322433 0.0896617 -0.0189276 0.756225 0.5 +0.0190214 0.118116 -0.0113006 0.460449 0.427793 +-0.016169 0.117727 -0.0146898 0.755327 0.294821 +-0.033579 0.117839 -0.0126505 0.781947 0.5 +-0.0591392 0.118534 -0.0111826 0.563599 0.458111 +-0.0615874 0.117934 -0.0105067 0.564031 0.5 +-0.0750334 0.0851031 -0.01456 0.50677 0.5 +-0.0760973 0.0851761 -0.013541 0.715989 0.5 +-0.0768599 0.0852186 -0.0125783 0.709737 0.5 +-0.077715 0.0852782 -0.0115916 0.702678 0.5 +-0.0786706 0.0853441 -0.0105854 0.69884 0.5 +-0.0794952 0.0854073 -0.00956797 0.689404 0.5 +-0.0801763 0.0854684 -0.0085384 0.710323 0.30356 +-0.0806595 0.0855046 -0.00754297 0.701847 0.5 +-0.0814052 0.08555 -0.00656718 0.647906 0.5 +-0.0824519 0.0856305 -0.00554258 0.402052 0.5 +-0.0834123 0.0856961 -0.00454328 0.558564 0.5 +-0.0842614 0.0857549 -0.00354776 0.400958 0.5 +-0.0848416 0.0858026 -0.00253503 0.402032 0.446741 +-0.0852938 0.0858468 -0.00152115 0.424996 0.426557 +-0.0856596 0.0858717 -0.000523015 0.425364 0.422235 +-0.0861402 0.0859086 0.000475654 0.414972 0.435161 +-0.0866097 0.0859466 0.00148078 0.352681 0.5 +-0.08699 0.0859713 0.00247197 0.370752 0.446883 +-0.0874441 0.0860134 0.00347726 0.384645 0.450519 +-0.0877934 0.0860475 0.0044818 0.412296 0.5 +-0.0879813 0.0860844 0.0054873 0.573233 0.5 +-0.0879792 0.086094 0.00648058 0.630733 0.5 +-0.0878523 0.0860961 0.00747941 0.662068 0.5 +-0.0877357 0.0860979 0.0084778 0.643427 0.5 +-0.0878555 0.0861109 0.00948006 0.611867 0.5 +-0.0881094 0.0861284 0.0104766 0.590374 0.5 +-0.0882347 0.0861347 0.011472 0.597946 0.5 +-0.0881632 0.0861128 0.0124706 0.665472 0.5 +-0.0878748 0.0861246 0.0134664 0.748959 0.5 +-0.0874341 0.0860792 0.0144694 0.756809 0.5 +-0.0875304 0.0861027 0.015468 0.722149 0.5 +-0.087695 0.0860952 0.016472 0.7029 0.5 +-0.0877886 0.0861226 0.0174689 0.728921 0.5 +-0.087689 0.0861087 0.0184696 0.756954 0.5 +-0.0875543 0.0861148 0.0194651 0.774578 0.5 +-0.0874212 0.0861211 0.0204627 0.605374 0.5 +-0.0871923 0.0861012 0.021463 0.620313 0.483551 +-0.0869334 0.0861006 0.0224549 0.631233 0.481066 +-0.0865732 0.0860822 0.023453 0.648936 0.5 +-0.0108803 0.105927 -0.0227775 0.673103 0.5 +-0.0917004 0.143358 0.0201656 0.620964 0.5 +-0.0914397 0.143364 0.0211639 0.714151 0.5 +-0.0884925 0.144689 0.01017 0.41788 0.5 +-0.0714237 0.153981 -0.0448933 0.406895 0.5 +-0.0857362 0.141867 0.00617644 0.500248 0.5 +-0.0915766 0.14196 0.0161629 0.343539 0.5 +-0.0891584 0.142048 0.0331685 0.871853 0.5 +-0.0882036 0.143298 0.0111345 0.586671 0.5 +-0.0748382 0.149925 -0.0278668 0.345511 0.5 +-0.0843436 0.144613 0.00514953 0.585846 0.387455 +-0.0754983 0.145823 -0.00786764 0.350343 0.451618 +-0.091547 0.146101 0.0191506 0.551403 0.5 +-0.0753389 0.14722 -0.0108566 0.316634 0.395416 +-0.0879015 0.148743 0.00925863 0.408453 0.5 +-0.0761052 0.14997 -0.0158781 0.685883 0.5 +-0.0880403 0.150094 0.0102212 0.313945 0.5 +-0.0742127 0.154103 -0.0229066 0.61632 0.5 +-0.0709313 0.156768 -0.044906 0.555887 0.5 +-0.0781795 0.165241 -0.0349583 0.355802 0.5 +-0.0857975 0.0926505 0.000473688 0.700272 0.5 +-0.0826495 0.137607 -0.000712655 0.619932 0.5 +-0.0876587 0.151372 0.0112162 0.242557 0.5 +-0.0482842 0.164088 -0.00583628 0.328763 0.316713 +-0.0746075 0.156859 -0.0239292 0.359793 0.443823 +-0.0725073 0.154019 -0.0378993 0.605666 0.5 +-0.0886058 0.150235 0.0251076 0.329518 0.439732 +-0.0877217 0.151511 0.024071 0.292464 0.5 +-0.0912353 0.14886 0.0211316 0.736549 0.5 +-0.0759388 0.151364 -0.016882 0.672806 0.5 +-0.074971 0.152728 -0.0179063 0.616519 0.5 +-0.0739864 0.158247 -0.0289285 0.313602 0.5 +-0.0699136 0.162391 -0.0489495 0.490145 0.5 +-0.0199993 0.185902 -0.0200623 0.228505 0.5 +-0.0840153 0.1376 0.000355984 0.634187 0.5 +-0.0939 0.124133 0.015262 0.524396 0.5 +-0.0171637 0.0956465 -0.0313986 0.465422 0.440287 +0.0252334 0.114772 -0.00969056 0.525353 0.449343 +-0.0283933 0.0831937 -0.0356194 0.48892 0.456665 +-0.0291817 0.0832547 -0.0346104 0.496397 0.277093 +-0.0297803 0.0833036 -0.0335871 0.612721 0.5 +-0.0303956 0.0833549 -0.0325649 0.592624 0.5 +-0.0307989 0.0833965 -0.031578 0.56506 0.5 +-0.0315196 0.0834471 -0.0305496 0.480778 0.5 +-0.0322701 0.0835031 -0.0295487 0.350403 0.460518 +-0.0326786 0.0835446 -0.0285522 0.502337 0.5 +-0.0328837 0.0835575 -0.0275315 0.736169 0.5 +-0.0332667 0.0835875 -0.0265323 0.734012 0.5 +-0.0336364 0.0836212 -0.0255231 0.426638 0.5 +-0.0343312 0.0836736 -0.0246034 0.292599 0.437794 +-0.0349846 0.0837189 -0.0236297 0.356714 0.246036 +-0.00865052 0.104822 -0.0230347 0.728002 0.5 +-0.0940576 0.125561 0.0242759 0.660891 0.5 +-0.0942583 0.125557 0.0232684 0.637956 0.5 +-0.0598599 0.0358888 0.0454954 0.410393 0.5 +0.0277899 0.116538 -0.00556904 0.528413 0.485121 +-0.0394946 0.119701 -0.0126173 0.680761 0.5 +-0.0603705 0.118249 -0.0108601 0.566898 0.5 +-0.00441308 0.12096 -0.0123131 0.622826 0.460846 +-0.0752375 0.0864841 -0.0145142 0.381996 0.5 +-0.0762362 0.0865455 -0.0135615 0.527264 0.5 +-0.0770884 0.0866038 -0.0125752 0.712747 0.5 +-0.0779306 0.0866645 -0.0115691 0.689951 0.5 +-0.0787615 0.0867217 -0.0105634 0.69759 0.5 +-0.0795726 0.0867837 -0.00954059 0.696877 0.5 +-0.0801984 0.0868229 -0.00856132 0.739873 0.5 +-0.0808035 0.0868637 -0.00756861 0.707431 0.5 +-0.0816708 0.0869142 -0.00660013 0.63617 0.5 +-0.0825962 0.0869865 -0.00556699 0.385148 0.477598 +-0.0836382 0.0870656 -0.00453769 0.508685 0.5 +-0.0843646 0.087116 -0.00354087 0.520083 0.5 +-0.0849546 0.0871617 -0.00253673 0.392761 0.443779 +-0.0853984 0.0872002 -0.00151975 0.417556 0.433031 +-0.0857724 0.0872268 -0.000524277 0.412804 0.424563 +-0.0863511 0.0872693 0.000483167 0.407101 0.439128 +-0.0868392 0.0873072 0.00147849 0.434575 0.5 +-0.0873232 0.0873446 0.00247822 0.460596 0.330076 +-0.0877048 0.0873692 0.00346654 0.470801 0.5 +-0.0880447 0.0874003 0.00446864 0.506916 0.460159 +-0.0883598 0.0874311 0.00547496 0.438947 0.5 +-0.0884279 0.0874564 0.00647862 0.612281 0.5 +-0.0884282 0.0874635 0.00747939 0.614332 0.5 +-0.0884304 0.0874699 0.00847782 0.593618 0.5 +-0.088608 0.0874693 0.0094764 0.587048 0.339724 +-0.088847 0.0874807 0.0104655 0.571436 0.5 +-0.0889313 0.0875027 0.0114635 0.599992 0.5 +-0.0889154 0.0875162 0.0124615 0.647429 0.5 +-0.0887218 0.0874968 0.0134639 0.687153 0.5 +-0.0883906 0.0874807 0.0144622 0.691648 0.5 +-0.0883909 0.0874867 0.0154625 0.659052 0.5 +-0.088603 0.087513 0.0164636 0.650562 0.5 +-0.0886021 0.087516 0.0174642 0.721263 0.5 +-0.0885609 0.087538 0.0184581 0.754258 0.5 +-0.0883581 0.0875191 0.0194553 0.603669 0.486476 +-0.0881537 0.0875035 0.020457 0.621004 0.482632 +-0.0878269 0.087472 0.021463 0.644723 0.5 +-0.0875265 0.087486 0.0224433 0.660874 0.5 +-0.0871517 0.0874756 0.0234341 0.665938 0.471332 +-0.075265 0.148568 -0.0158698 0.450975 0.5 +-0.0913716 0.140622 0.0201693 0.69553 0.5 +-0.0902457 0.140661 0.0271695 0.693026 0.5 +-0.0892399 0.140676 0.0351725 0.609412 0.5 +-0.081175 0.14869 0.00117764 0.560158 0.5 +-0.0802179 0.141741 -0.00280512 0.634092 0.5 +-0.0903128 0.141958 0.0142327 0.590343 0.5 +-0.0887949 0.142048 0.03516 0.851628 0.5 +-0.088758 0.143311 0.0121502 0.557881 0.5 +-0.0731059 0.151228 -0.0378853 0.412103 0.5 +-0.0848994 0.144621 0.00617242 0.546104 0.5 +-0.0751346 0.145812 -0.00886348 0.30497 0.5 +-0.0916156 0.146104 0.0201482 0.606437 0.5 +-0.0913297 0.148826 0.016141 0.639385 0.5 +-0.0757782 0.149978 -0.0188682 0.423126 0.5 +-0.0760543 0.149976 -0.0168736 0.539876 0.5 +-0.0746657 0.154121 -0.0198989 0.962512 0.5 +-0.0744527 0.154114 -0.0209063 0.564418 0.5 +-0.0685681 0.156629 -0.0529972 0.300927 0.365255 +-0.0713082 0.165213 -0.0459899 0.361232 0.421719 +0.0143403 0.11733 -0.0144441 0.532418 0.5 +-0.0852773 0.137655 0.00128094 0.586922 0.5 +-0.0798492 0.140347 -0.0037915 0.679412 0.5 +-0.0472303 0.164057 -0.00679428 0.354371 0.5 +-0.0750921 0.156856 -0.022942 0.344586 0.5 +-0.0723124 0.154022 -0.038905 0.565969 0.5 +-0.0881372 0.150234 0.0261027 0.317371 0.449221 +-0.0723819 0.152607 -0.0408904 0.410916 0.5 +-0.0916005 0.147489 0.0211447 0.60552 0.5 +-0.0754488 0.151352 -0.0128993 0.823619 0.5 +-0.0748173 0.152727 -0.0208966 0.588606 0.5 +-0.0763594 0.158279 -0.023921 0.359758 0.5 +-0.0695999 0.162389 -0.0499627 0.496575 0.457155 +-0.0205087 0.18589 -0.0190712 0.29965 0.5 +-0.0860712 0.137702 0.0022107 0.535194 0.5 +-0.0945603 0.124158 0.0182654 0.561643 0.5 +-0.0930288 0.116051 0.018311 0.748931 0.5 +0.024446 0.115337 -0.010308 0.500169 0.5 +-0.0281178 0.0845911 -0.0356125 0.483208 0.5 +-0.0289152 0.0846603 -0.0346291 0.497194 0.5 +-0.0294308 0.0847062 -0.0336139 0.660192 0.5 +-0.0299377 0.0847457 -0.0326018 0.593391 0.5 +-0.0305175 0.0847809 -0.0315638 0.576964 0.5 +-0.0309131 0.0848198 -0.0305724 0.528305 0.5 +-0.0315498 0.0848744 -0.0295692 0.350623 0.5 +-0.0320496 0.0849187 -0.0285721 0.348074 0.400967 +-0.0324125 0.0849398 -0.0275574 0.406954 0.5 +-0.0326967 0.0849828 -0.026556 0.332173 0.390752 +-0.0332116 0.0851655 -0.0254848 0.30619 0.379153 +-0.0347045 0.0851136 -0.0245778 0.344716 0.5 +-0.0353285 0.0851433 -0.0237512 0.373442 0.5 +-0.00967624 0.104885 -0.0231041 0.722974 0.5 +-0.0935493 0.125561 0.0262639 0.694607 0.5 +-0.0938092 0.125562 0.0252741 0.533675 0.5 +-0.0856504 0.126624 -0.00269798 0.631799 0.5 +0.0312024 0.114939 -0.00384217 0.519208 0.5 +-0.0835389 0.110217 0.0023021 0.461621 0.475467 +-0.0345505 0.175605 -0.011982 0.362302 0.5 +-0.00231596 0.121888 -0.0112268 0.600435 0.5 +-0.00640927 0.120163 -0.0133583 0.597642 0.478453 +-0.0762132 0.0879097 -0.0135406 0.476865 0.5 +-0.0771177 0.0879695 -0.0126012 0.711198 0.5 +-0.0780353 0.0880327 -0.0115615 0.69953 0.5 +-0.0786364 0.0880738 -0.010561 0.704701 0.5 +-0.0793362 0.0881239 -0.0095476 0.700043 0.5 +-0.0801014 0.0881671 -0.00858727 0.736518 0.5 +-0.0809514 0.0882189 -0.0076035 0.702663 0.5 +-0.0820513 0.0882817 -0.00662822 0.596261 0.5 +-0.082997 0.0883523 -0.00560613 0.524245 0.5 +-0.0838035 0.0884157 -0.00457068 0.49448 0.5 +-0.084499 0.088474 -0.00355332 0.48619 0.5 +-0.0849643 0.0885105 -0.00254627 0.519179 0.436349 +-0.0854224 0.0885478 -0.00153705 0.557536 0.5 +-0.0857793 0.088721 -0.000547834 0.573009 0.405399 +-0.0862272 0.0886081 0.000477626 0.389847 0.5 +-0.0868019 0.0886457 0.00149241 0.422557 0.5 +-0.0873123 0.0886781 0.00248146 0.44186 0.341768 +-0.0877889 0.0887187 0.00347532 0.463736 0.5 +-0.0881443 0.0887489 0.00447233 0.49483 0.5 +-0.0884641 0.0887716 0.00547605 0.528969 0.467185 +-0.0886025 0.0887878 0.00646717 0.552032 0.5 +-0.088793 0.0888086 0.00747102 0.575822 0.5 +-0.0889223 0.0888194 0.00846703 0.576047 0.5 +-0.0890554 0.0888307 0.00946144 0.565856 0.5 +-0.0892473 0.0888575 0.0104669 0.576965 0.5 +-0.0893459 0.0888735 0.0114634 0.593237 0.5 +-0.0892808 0.0888643 0.0124572 0.624695 0.5 +-0.0892338 0.0888828 0.0134587 0.655785 0.5 +-0.0891206 0.0888853 0.014456 0.641868 0.5 +-0.0891212 0.0888935 0.0154552 0.642592 0.5 +-0.0891941 0.0888738 0.0164555 0.654538 0.5 +-0.0891756 0.088886 0.0174542 0.694356 0.5 +-0.0891252 0.0889064 0.0184472 0.737567 0.5 +-0.0889386 0.0888873 0.0194501 0.746043 0.5 +-0.0887231 0.0888754 0.0204484 0.600034 0.5 +-0.0884531 0.0888833 0.0214341 0.610892 0.481775 +-0.0881282 0.0888644 0.0224361 0.624885 0.476148 +-0.0877229 0.0888584 0.0234132 0.668107 0.5 +-0.0855097 0.129367 -0.00169404 0.584164 0.5 +-0.0910616 0.140621 0.0211716 0.791815 0.5 +-0.090351 0.14066 0.0261698 0.687106 0.5 +-0.088994 0.140671 0.0361625 0.608214 0.5 +-0.0776115 0.15005 -0.0049035 0.433446 0.5 +-0.0809405 0.141759 -0.00181375 0.655383 0.5 +-0.0882134 0.141936 0.0111996 0.596289 0.5 +-0.0884618 0.142054 0.0361609 0.588253 0.479721 +-0.086972 0.143283 0.00915353 0.596496 0.5 +-0.0459359 0.168402 -0.00594095 0.477067 0.5 +-0.0856199 0.144636 0.00717286 0.571222 0.5 +-0.0740398 0.145796 -0.011857 0.208836 0.359505 +-0.0915979 0.146114 0.0211525 0.648313 0.5 +-0.0912059 0.14882 0.0151457 0.611197 0.5 +-0.07594 0.14997 -0.0178724 0.536959 0.5 +-0.0774831 0.151439 -0.0048996 0.462682 0.5 +-0.0769695 0.154154 -0.0139015 0.617094 0.5 +-0.0765957 0.161076 -0.0289322 0.410615 0.5 +-0.0188044 0.120762 -0.00982397 0.698303 0.5 +-0.0865466 0.137714 0.00320362 0.396842 0.43087 +-0.0706693 0.165215 -0.0479768 0.371337 0.5 +-0.0651923 0.176525 -0.0608469 0.318215 0.5 +-0.0639487 0.168098 -0.0606895 0.311127 0.5 +-0.0461075 0.164061 -0.00779976 0.413308 0.5 +-0.0760167 0.15688 -0.0219252 0.343174 0.5 +-0.0721764 0.154012 -0.0399025 0.56516 0.5 +-0.0288404 0.0972702 -0.0238091 0.576696 0.5 +-0.0915313 0.147463 0.0171482 0.489866 0.5 +-0.0916539 0.147467 0.0181472 0.535507 0.5 +-0.0755105 0.151351 -0.0138965 0.749305 0.5 +-0.0749324 0.152731 -0.0198994 0.563156 0.5 +-0.0754549 0.158227 -0.0249553 0.362486 0.407252 +-0.0686632 0.162379 -0.0529737 0.404247 0.5 +-0.00173319 0.108975 -0.0214067 0.715377 0.5 +-0.0943409 0.12415 0.0172628 0.534151 0.4791 +0.0242293 0.119847 -0.00515511 0.611205 0.5 +-0.0393568 0.123991 -0.00912015 0.609471 0.5 +-0.0623267 0.035582 -0.00867786 0.279509 0.5 +-0.0273795 0.0859709 -0.0356537 0.502926 0.5 +-0.0284012 0.0860445 -0.0346283 0.500477 0.5 +-0.0291377 0.0860908 -0.0335904 0.667366 0.5 +-0.0295614 0.0861399 -0.0326125 0.621355 0.5 +-0.0300453 0.0861604 -0.0315778 0.591315 0.368367 +-0.0304105 0.0861968 -0.0305753 0.561003 0.5 +-0.0308996 0.0862326 -0.0295626 0.515531 0.5 +-0.0313945 0.0862693 -0.0285563 0.492816 0.5 +-0.0317716 0.0863018 -0.027557 0.424877 0.5 +-0.032145 0.0863362 -0.0265533 0.358317 0.351209 +-0.0326605 0.0863757 -0.0255732 0.225534 0.5 +-0.0351444 0.0865581 -0.0244792 0.351811 0.5 +0.0268857 0.117842 -0.00498093 0.51549 0.5 +-0.0519318 0.0352921 -0.0124585 0.159841 0.5 +-0.0910261 0.12541 0.00626868 0.420689 0.5 +-0.0932418 0.125562 0.0272746 0.704351 0.5 +-0.0866088 0.126656 -0.00171455 0.697219 0.5 +-0.0909462 0.11476 0.0333322 0.415825 0.448147 +-0.0841444 0.110242 0.00330414 0.446953 0.5 +-0.0876151 0.1105 0.015342 0.527105 0.5 +-0.00216638 0.09997 -0.023881 0.784591 0.5 +-0.00853806 0.120181 -0.0133625 0.813645 0.5 +-0.076206 0.0892711 -0.0135327 0.478746 0.461305 +-0.0771941 0.0893363 -0.0125642 0.502881 0.5 +-0.0779429 0.0893818 -0.0115854 0.706663 0.5 +-0.0785236 0.0894249 -0.0105705 0.719973 0.5 +-0.0792595 0.0894709 -0.0095871 0.718317 0.5 +-0.0801272 0.0895173 -0.00861746 0.724596 0.5 +-0.0810295 0.0895599 -0.00769505 0.672072 0.5 +-0.082525 0.0896742 -0.00660526 0.321666 0.46338 +-0.0835634 0.0897492 -0.00557879 0.505218 0.5 +-0.084275 0.0897993 -0.00457099 0.484558 0.5 +-0.0848366 0.0898781 -0.00356125 0.403177 0.421858 +-0.0851803 0.0899483 -0.00256663 0.440294 0.428448 +-0.0854479 0.0898939 -0.00155092 0.607521 0.5 +-0.0856512 0.0899172 -0.000541045 0.626373 0.5 +-0.0859012 0.0899317 0.000454719 0.601543 0.5 +-0.0864523 0.0899653 0.00147962 0.382077 0.406075 +-0.0870489 0.0900041 0.00248653 0.414861 0.402826 +-0.0875561 0.0900472 0.00346813 0.43108 0.5 +-0.087913 0.0900756 0.00446758 0.467505 0.5 +-0.0882504 0.0900881 0.0054683 0.506875 0.45817 +-0.0885745 0.0901142 0.00646846 0.528345 0.4685 +-0.0887995 0.0901451 0.00746775 0.54462 0.5 +-0.0889579 0.0901579 0.00845534 0.548727 0.5 +-0.0891635 0.0901786 0.00945748 0.771094 0.5 +-0.0893735 0.0901981 0.0104595 0.793312 0.5 +-0.0895062 0.0902087 0.0114561 0.586712 0.5 +-0.0895421 0.090213 0.0124508 0.617381 0.5 +-0.0896067 0.0902304 0.0134498 0.623268 0.5 +-0.0895436 0.0902218 0.014448 0.614718 0.5 +-0.0896121 0.0902414 0.0154476 0.627825 0.5 +-0.089636 0.0902445 0.0164491 0.650784 0.428877 +-0.0895621 0.0902365 0.017449 0.67664 0.5 +-0.0895055 0.0902528 0.0184453 0.696018 0.5 +-0.0893681 0.0902559 0.0194368 0.536984 0.5 +-0.0891009 0.0902275 0.0204481 0.560415 0.476419 +-0.0888276 0.090232 0.0214359 0.586631 0.5 +-0.0885465 0.0902329 0.022415 0.614905 0.5 +0.0209029 0.107601 -0.0159886 0.561323 0.5 +-0.0390625 0.110364 -0.0188163 0.634715 0.5 +-0.0892808 0.140568 0.013241 0.62185 0.5 +-0.0903092 0.140666 0.025165 0.648884 0.5 +-0.0493982 0.113885 -0.0164603 0.701758 0.5 +-0.0763578 0.141673 -0.00573846 0.326848 0.5 +-0.0814089 0.141772 -0.000809353 0.653605 0.5 +-0.0875275 0.141918 0.0101858 0.590973 0.363768 +-0.0617568 0.113454 -0.0138737 0.603111 0.5 +-0.0851037 0.143224 0.00618561 0.365624 0.457931 +-0.089541 0.143417 0.0301691 0.524918 0.5 +-0.0829718 0.144576 0.00217748 0.419152 0.471534 +-0.0743787 0.145821 -0.0108474 0.2387 0.5 +-0.0913521 0.14609 0.0171489 0.448221 0.47793 +-0.0757302 0.147214 -0.00986768 0.318534 0.5 +-0.0756832 0.149968 -0.01987 0.451101 0.5 +-0.0776508 0.151441 -0.00388634 0.659976 0.5 +-0.0790475 0.168047 -0.0349702 0.411919 0.5 +-0.0781873 0.168068 -0.0319708 0.344362 0.469009 +-0.0538886 0.161243 -0.000916627 0.291087 0.5 +-0.0709498 0.165209 -0.0469921 0.371092 0.452492 +-0.0694764 0.165214 -0.0509787 0.507996 0.394119 +0.0223468 0.121292 -0.00473526 0.597902 0.429788 +-0.0674763 0.168038 -0.0560148 0.508243 0.299956 +-0.0852257 0.114326 0.001271 0.469883 0.5 +-0.0768497 0.156895 -0.0209209 0.378636 0.5 +-0.0720478 0.154003 -0.0409023 0.568698 0.5 +-0.0726437 0.152619 -0.0388965 0.443416 0.5 +-0.0914264 0.14884 0.0201323 0.733995 0.5 +-0.0909934 0.148856 0.0221303 0.545003 0.5 +-0.0756545 0.151363 -0.0148873 0.734832 0.5 +-0.074941 0.152735 -0.0189 0.544985 0.5 +-0.0749686 0.158241 -0.0259415 0.373439 0.5 +-0.0690062 0.162382 -0.0519693 0.471165 0.5 +0.0033632 0.097467 -0.0272178 0.679985 0.5 +-0.0940988 0.124142 0.016266 0.766598 0.5 +-0.0790938 0.10996 -0.003593 0.481711 0.5 +-0.0771859 0.109877 -0.00559641 0.500767 0.5 +-0.0238533 0.0958019 -0.0255967 0.49848 0.5 +-0.0276205 0.0874255 -0.0346253 0.469591 0.5 +-0.0285082 0.0874866 -0.0336017 0.481076 0.5 +-0.0291401 0.0875323 -0.0325902 0.6357 0.5 +-0.02966 0.0875784 -0.0315907 0.588095 0.5 +-0.0300276 0.0875944 -0.030572 0.578852 0.380926 +-0.030388 0.0876244 -0.0295653 0.53795 0.5 +-0.0307561 0.0876495 -0.0285591 0.510384 0.5 +-0.0311219 0.087675 -0.0275557 0.460183 0.371896 +-0.0313824 0.0877015 -0.0265568 0.387002 0.311968 +-0.0320932 0.0877303 -0.0254981 0.290659 0.5 +0.015157 0.122808 -0.00836184 0.758651 0.5 +-0.0172292 0.104564 -0.022745 0.691921 0.5 +-0.0915903 0.125424 0.00726612 0.413869 0.354625 +-0.0870044 0.115772 0.00228167 0.368812 0.443617 +-0.0929793 0.125561 0.0282631 0.687967 0.5 +-0.0873336 0.126682 -0.000726608 0.668153 0.5 +-0.0930993 0.129616 0.0162363 0.762045 0.5 +-0.0846369 0.110251 0.00429821 0.421887 0.5 +-0.0692038 0.156713 -0.0519425 0.290884 0.5 +-0.0509846 0.123023 -0.00999375 0.488656 0.5 +-0.0498456 0.123179 -0.0101809 0.705514 0.31207 +-0.0762074 0.0906406 -0.013533 0.476512 0.463338 +-0.0771876 0.0907032 -0.0125611 0.518253 0.467969 +-0.078057 0.0907599 -0.0115869 0.743649 0.5 +-0.0785777 0.0907895 -0.0106208 0.720776 0.5 +-0.0794305 0.0908376 -0.00963692 0.689003 0.5 +-0.0805988 0.090913 -0.0086158 0.682025 0.5 +-0.0817894 0.0909919 -0.00761357 0.447664 0.5 +-0.0828622 0.0910525 -0.0066104 0.325989 0.424862 +-0.0837824 0.091132 -0.00556609 0.363704 0.5 +-0.0845016 0.0911794 -0.00456302 0.396289 0.5 +-0.084979 0.0912122 -0.0035611 0.40874 0.5 +-0.0853564 0.091162 -0.00253932 0.377656 0.437436 +-0.0855598 0.0912595 -0.00155473 0.640461 0.5 +-0.0856626 0.0912736 -0.00055353 0.661953 0.5 +-0.0857102 0.0912822 0.000468321 0.678175 0.5 +-0.0860328 0.0912972 0.00145067 0.628416 0.375069 +-0.0865224 0.0913375 0.0024428 0.549006 0.5 +-0.0870992 0.0913786 0.00345195 0.413729 0.5 +-0.0875345 0.0914089 0.00446769 0.465215 0.454791 +-0.0878883 0.0914318 0.00546674 0.485854 0.457052 +-0.0882379 0.0914593 0.00646904 0.497321 0.5 +-0.0885869 0.0914877 0.00746285 0.526098 0.5 +-0.0888303 0.0915034 0.00845607 0.754004 0.5 +-0.0889791 0.0915153 0.00944503 0.753911 0.5 +-0.0892801 0.091541 0.0104497 0.758083 0.5 +-0.0894274 0.0915536 0.0114438 0.776739 0.5 +-0.0896358 0.0915718 0.0124456 0.791934 0.5 +-0.0897425 0.0915834 0.0134432 0.820047 0.5 +-0.0897769 0.0915868 0.0144438 0.6082 0.5 +-0.0897683 0.091592 0.0154417 0.615587 0.5 +-0.0897609 0.0915993 0.0164407 0.630349 0.5 +-0.0897339 0.0916034 0.0174376 0.636433 0.455331 +-0.0896535 0.0916031 0.0184402 0.637304 0.5 +-0.0895419 0.0916017 0.0194388 0.659776 0.5 +-0.0893828 0.0916068 0.0204288 0.532257 0.5 +-0.0890486 0.0915916 0.0214249 0.568276 0.47198 +-0.088699 0.0915828 0.0224195 0.593731 0.5 +0.0171905 0.116688 -0.0137466 0.480997 0.407598 +-0.0878417 0.140531 0.0102059 0.545228 0.5 +-0.0899141 0.140577 0.0142032 0.625571 0.5 +-0.0901142 0.14065 0.0241685 0.6812 0.5 +-0.0820175 0.148708 0.00217249 0.641842 0.5 +-0.0744487 0.141666 -0.00675172 0.359498 0.5 +-0.086045 0.141863 0.00720055 0.365265 0.5 +-0.0886682 0.141939 0.0121971 0.5978 0.366285 +-0.0903937 0.142028 0.0281621 0.577409 0.5 +-0.0845537 0.143232 0.00516668 0.348142 0.444007 +-0.0891789 0.14342 0.0311627 0.497184 0.48282 +-0.0823822 0.144566 0.00117046 0.42924 0.5 +-0.0746727 0.145787 -0.00986958 0.251684 0.413997 +-0.0907871 0.14608 0.0151486 0.418259 0.471213 +-0.0760799 0.147225 -0.00886324 0.382186 0.464002 +-0.0754158 0.14997 -0.0218646 0.415411 0.5 +-0.0776245 0.151441 -0.00287924 0.605007 0.5 +0.0266901 0.106496 -0.0148024 0.626447 0.5 +-0.0921915 0.114676 0.0133297 0.481833 0.5 +-0.0786131 0.166659 -0.0369473 0.350231 0.5 +-0.070211 0.165211 -0.0489867 0.368993 0.427514 +-0.0698391 0.165209 -0.0499791 0.492691 0.5 +-0.0147295 0.0942902 -0.0339999 0.696723 0.5 +-0.0699851 0.168026 -0.0510102 0.370692 0.450091 +-0.0888241 0.114444 0.00524771 0.30044 0.5 +-0.0774531 0.156901 -0.0199195 0.401428 0.5 +-0.0719279 0.153998 -0.0419035 0.470553 0.5 +-0.0725064 0.152612 -0.0398907 0.414729 0.5 +-0.083982 0.134868 -0.000717316 0.657339 0.5 +-0.0758447 0.151365 -0.0158827 0.7078 0.5 +-0.0749566 0.152744 -0.0158977 0.701342 0.5 +-0.0743199 0.158257 -0.0279194 0.333157 0.465025 +-0.0693451 0.162383 -0.0509602 0.480454 0.449318 +-0.0223058 0.184466 -0.0180708 0.260721 0.299635 +-0.0850366 0.134888 0.000298852 0.696748 0.5 +-0.0946685 0.124165 0.0192665 0.588424 0.5 +-0.0766538 0.11399 -0.00481419 0.409221 0.475033 +-0.0782331 0.109897 -0.00456592 0.500611 0.413998 +-0.0476227 0.122378 -0.0113753 0.775492 0.5 +-0.0465602 0.122394 -0.0114017 0.777922 0.5 +-0.0276025 0.0888516 -0.0335952 0.42798 0.5 +-0.0282821 0.0889315 -0.0326167 0.442598 0.5 +-0.0289316 0.0889882 -0.0316153 0.406619 0.5 +-0.0294162 0.0890096 -0.030595 0.54538 0.5 +-0.0297851 0.0890261 -0.0295849 0.544171 0.5 +-0.0300375 0.0890464 -0.0285748 0.549809 0.389399 +-0.0303971 0.0890708 -0.0275789 0.450896 0.5 +-0.0306702 0.0891071 -0.0265975 0.431054 0.5 +-0.0310391 0.0892178 -0.0256627 0.308271 0.160447 +-0.00439966 0.119978 -0.0131705 0.601311 0.5 +0.00120442 0.117582 -0.0166604 0.789481 0.5 +-0.0920493 0.125439 0.00826634 0.400775 0.5 +-0.085242 0.115675 0.000251725 0.484596 0.439002 +-0.086166 0.115735 0.00128445 0.47675 0.5 +-0.0845352 0.136246 0.000324782 0.689662 0.5 +-0.0879384 0.126705 0.000268669 0.461647 0.5 +-0.0913513 0.126793 0.00727091 0.421116 0.5 +-0.0852375 0.1104 0.00532111 0.355472 0.298284 +-0.0545635 0.122251 -0.00910565 0.756155 0.5 +-0.0556879 0.117086 -0.0137514 0.443511 0.5 +-0.0762473 0.0920177 -0.013581 0.493512 0.5 +-0.0772308 0.0920788 -0.012603 0.516178 0.472881 +-0.078074 0.0921324 -0.0116061 0.735691 0.5 +-0.0789524 0.0921836 -0.0106406 0.706465 0.5 +-0.0798777 0.0922401 -0.00961163 0.680717 0.5 +-0.0810332 0.092317 -0.00857663 0.669151 0.5 +-0.0819891 0.0923793 -0.00757573 0.627475 0.5 +-0.0828255 0.0924347 -0.00656966 0.562838 0.5 +-0.0836424 0.0924862 -0.00555232 0.54139 0.5 +-0.0843489 0.0925325 -0.00454911 0.560298 0.5 +-0.0849646 0.0925759 -0.00355765 0.401408 0.5 +-0.085327 0.0926016 -0.00256332 0.422657 0.442119 +-0.0856886 0.0926246 -0.00156242 0.425258 0.5 +-0.0857757 0.0926386 -0.000557841 0.686837 0.5 +-0.0411345 0.037889 -0.0275181 0.275232 0.5 +0.054748 0.0690996 0.0027667 0.396132 0.472935 +-0.0369296 0.0455099 -0.0248207 0.382216 0.5 +-0.0288758 0.046967 -0.0262149 0.610127 0.5 +-0.076686 0.0781369 0.0338733 0.745437 0.5 +-0.0167464 0.108538 -0.0209441 0.70476 0.430188 +-0.0332153 0.107417 -0.0197253 0.654977 0.460745 +-0.00470695 0.0982478 -0.0280611 0.67441 0.337246 +-0.0213844 0.123724 -0.0049697 0.493336 0.5 +0.00710696 0.112707 -0.0194319 0.751195 0.5 +0.000688563 0.105475 -0.0216898 0.765622 0.5 +-0.00941329 0.0943623 -0.0340451 0.514599 0.5 +0.043146 0.0650339 -0.00117659 0.410301 0.5 +0.0226575 0.102902 -0.0189538 0.517918 0.5 +-0.0250024 0.118057 -0.0129436 0.814798 0.5 +0.0177618 0.100614 -0.0224544 0.538972 0.467399 +0.0231094 0.1217 -0.00313916 0.613739 0.462033 +0.024797 0.0615121 -0.0241542 0.723403 0.5 +-0.0274204 0.12046 -0.00942796 0.679115 0.342474 +0.00560187 0.0957087 -0.0293479 0.55311 0.5 +0.0239365 0.0972468 -0.020928 0.841738 0.5 +0.0304359 0.108504 -0.0109544 0.55829 0.5 +-0.0489659 0.12587 -0.00699728 0.576689 0.387381 +0.0204173 0.0925165 -0.0239466 0.66888 0.5 +-0.0302923 0.115032 -0.0157497 0.852221 0.5 +-0.0313173 0.115081 -0.0157968 0.849352 0.5 +-0.0376142 0.115213 -0.0159111 0.865406 0.5 +0.0248886 0.0970269 -0.0206985 0.692453 0.5 +0.0257868 0.0967214 -0.0203669 0.679691 0.5 +0.00199826 0.122137 -0.0115071 0.580167 0.5 +0.0279207 0.111816 -0.0105079 0.531421 0.389695 +0.00325132 0.12142 -0.0127844 0.772222 0.5 +-0.0141356 0.103403 -0.0235224 0.580547 0.5 +0.0461568 0.0626078 -0.00274862 0.592126 0.474615 +-0.0497318 0.0354763 -0.0126201 0.162665 0.5 +0.0223695 0.0993436 -0.0211483 0.59464 0.5 +-0.0287901 0.105845 -0.0221143 0.606661 0.466669 +0.00710547 0.0893998 -0.032814 0.642955 0.5 +0.026686 0.0963684 -0.0200186 0.674546 0.5 +0.0279019 0.110786 -0.0114065 0.538595 0.5 +-0.0460367 0.115268 -0.015925 0.675726 0.5 +0.0345713 0.109241 -0.00571538 0.538531 0.459661 +0.0562407 0.0648113 0.00118357 0.684564 0.5 +0.0252285 0.11379 -0.0106368 0.545907 0.451043 +-0.0260473 0.11708 -0.0139183 0.835538 0.5 +-0.0144639 0.0977101 -0.0275565 0.44201 0.5 +-0.0358502 0.0986071 -0.0225695 0.657592 0.5 +-0.0121854 0.0980546 -0.0279084 0.821557 0.5 +0.0295458 0.115836 -0.00482165 0.5381 0.5 +-0.00642846 0.119149 -0.0142793 0.60717 0.5 +-0.00544058 0.119032 -0.0141551 0.635042 0.453445 +-0.00442024 0.118937 -0.0140576 0.5996 0.5 +0.00546913 0.116627 -0.0176566 0.610798 0.5 +-0.0105486 0.0921685 -0.035821 0.666943 0.5 +0.0383652 0.101327 -0.00724085 0.58037 0.5 +-0.0366079 0.114094 -0.0167422 0.615348 0.5 +-0.036826 0.0446589 -0.0260242 0.407562 0.5 +-0.0309867 0.0458642 -0.0271867 0.669729 0.5 +0.0556932 0.0688929 0.00299188 0.414469 0.390519 +-0.0319101 0.121969 -0.00695975 0.537817 0.5 +0.0275543 0.0960379 -0.019637 0.68162 0.5 +-0.0045009 0.116806 -0.0157814 0.841285 0.5 +0.0283978 0.0955434 -0.019149 0.691231 0.5 +0.0565861 0.0685555 0.00335277 0.441751 0.424181 +0.0294074 0.0974659 -0.0171759 0.712511 0.5 +0.0178674 0.103889 -0.0200126 0.839522 0.5 +0.0168017 0.105866 -0.0181237 0.618082 0.5 +0.0574282 0.0681585 0.00377242 0.466798 0.5 +-0.0263327 0.111444 -0.0179843 0.80316 0.5 +-0.0292314 0.114996 -0.0157151 0.864987 0.5 +0.0259521 0.11908 -0.00433188 0.620307 0.5 +0.0248385 0.107021 -0.0153684 0.584155 0.5 +-0.00344803 0.111769 -0.0204187 0.620209 0.465528 +0.0165931 0.100464 -0.0223776 0.652249 0.5 +-0.0182921 0.113707 -0.0184295 0.852281 0.5 +-0.0439904 0.115156 -0.0158426 0.732781 0.5 +0.00401707 0.125848 -0.00755459 0.647234 0.5 +0.0205831 0.11206 -0.0147671 0.663379 0.5 +0.0292409 0.0951488 -0.0187111 0.696327 0.5 +-0.0252687 0.0931263 -0.0308668 0.273107 0.5 +-0.00953059 0.096141 -0.0318625 0.61496 0.5 +0.000105856 0.117482 -0.0165473 0.547157 0.5 +-0.0396993 0.117276 -0.0140617 0.670035 0.5 +0.0291224 0.0877617 -0.0209279 0.748134 0.5 +0.0300883 0.0872505 -0.0203879 0.751248 0.5 +0.0451306 0.0647669 -0.000900002 0.767143 0.5 +0.0153133 0.121135 -0.0105519 0.51896 0.473939 +0.0413142 0.0637288 -0.00386959 0.361127 0.5 +-0.0425153 0.118993 -0.0138741 0.646388 0.5 +-0.0545346 0.125365 -0.00640975 0.897494 0.5 +0.0111228 0.0960826 -0.0257288 0.764565 0.5 +-0.0498267 0.109983 -0.0185775 0.748734 0.5 +-0.0488146 0.109958 -0.0184987 0.779628 0.5 +-0.0320938 0.0457263 -0.0270587 0.701086 0.5 +0.0301411 0.102934 -0.0150039 0.697605 0.5 +-0.015954 0.105864 -0.0221228 0.668455 0.5 +0.043329 0.066441 -0.000599376 0.366835 0.465964 +-0.0208013 0.108893 -0.0213287 0.619102 0.5 +0.0243406 0.113099 -0.011895 0.557242 0.5 +0.0300756 0.0946988 -0.0182345 0.697241 0.5 +0.0214342 0.0934308 -0.0229317 0.645611 0.5 +0.0309186 0.094253 -0.0177648 0.700623 0.393442 +0.0317623 0.0938577 -0.0173357 0.695277 0.5 +0.0326128 0.0934199 -0.0168733 0.689086 0.5 +-0.0193967 0.186852 -0.0171886 0.287243 0.5 +-0.0184064 0.186879 -0.0179354 0.29354 0.5 +0.0334431 0.0930091 -0.0164312 0.695331 0.5 +-0.0326685 0.0478014 -0.0229356 0.237264 0.431246 +0.0293268 0.0963357 -0.0179631 0.703196 0.5 +0.0351631 0.0941496 -0.0136388 0.702713 0.388092 +0.0072631 0.0968089 -0.0265119 0.729251 0.333916 +0.0189666 0.119003 -0.0102495 0.560345 0.5 +-0.0266047 0.0397022 -0.0293069 0.607511 0.5 +0.00602348 0.111527 -0.0200414 0.608287 0.470003 +0.0232683 0.0857035 -0.0248261 0.721422 0.37218 +-0.00768714 0.116771 -0.0157299 0.877497 0.5 +-0.0602175 0.0443014 -0.00489461 0.461348 0.5 +0.0343015 0.0925788 -0.0159761 0.688947 0.5 +0.0125005 0.1007 -0.0226033 0.633845 0.5 +0.0194959 0.111012 -0.0156283 0.634003 0.5 +-0.00136682 0.125668 -0.00729488 0.635126 0.5 +-0.0174424 0.10313 -0.0232301 0.668739 0.5 +-0.0187811 0.119777 -0.0107944 0.736047 0.5 +0.00646347 0.117501 -0.0166002 0.421029 0.473937 +-0.0117599 0.104933 -0.0231377 0.655204 0.5 +-0.0115776 0.0962625 -0.032007 0.59416 0.5 +0.0227189 0.116065 -0.0110894 0.501964 0.5 +0.0115865 0.119151 -0.014401 0.434885 0.5 +0.00753839 0.119505 -0.0147629 0.496516 0.5 +0.0517415 0.0673755 0.000499527 0.52725 0.5 +0.0462769 0.0649494 -0.00109094 0.598597 0.5 +0.0351226 0.0921155 -0.0154837 0.676719 0.402165 +0.00644791 0.119491 -0.0147367 0.482313 0.435073 +0.0119628 0.111848 -0.018535 0.63407 0.5 +-0.033501 0.113967 -0.0166209 0.853333 0.5 +0.0346346 0.107297 -0.007625 0.549739 0.447994 +0.000831008 0.0996342 -0.0235195 0.801625 0.5 +-0.035551 0.0451135 -0.0264751 0.416329 0.5 +-0.029871 0.0459583 -0.0272702 0.724845 0.5 +-0.0455357 0.120317 -0.0132441 0.856934 0.5 +0.0351408 0.0931106 -0.0145377 0.669246 0.5 +-0.0523481 0.125498 -0.00654313 0.814348 0.5 +0.0359154 0.0915824 -0.0149202 0.666332 0.5 +0.036687 0.0909845 -0.0142871 0.683336 0.5 +-0.0205328 0.113457 -0.0181494 0.565528 0.5 +-0.0193941 0.113623 -0.0183331 0.588965 0.5 +0.0374569 0.0904362 -0.0137042 0.694206 0.5 +0.0382626 0.0899111 -0.0131489 0.70558 0.5 +0.0342346 0.0852576 -0.0183147 0.753104 0.5 +0.0352172 0.0952034 -0.0127755 0.735791 0.5 +-0.0202144 0.186446 -0.0187314 0.231438 0.5 +-0.0189564 0.187079 -0.0195498 0.188076 0.318749 +-0.0175221 0.187321 -0.0198494 0.259879 0.406209 +-0.0626824 0.0436041 -0.00418427 0.486453 0.373193 +-0.0564797 0.0356812 -0.0108166 0.270737 0.5 +-0.036531 0.116238 -0.0149852 0.839704 0.5 +-0.0592138 0.116352 -0.0129282 0.572306 0.444286 +-0.00847175 0.0920515 -0.0356471 0.68202 0.5 +-0.04882 0.119077 -0.0139102 0.869709 0.5 +-0.0348994 0.124334 -0.00549397 0.581413 0.463025 +-0.0293899 0.118762 -0.0116358 0.670945 0.346579 +0.015329 0.118191 -0.013375 0.517773 0.5 +0.0314401 0.110365 -0.00894711 0.563134 0.5 +0.0032744 0.114489 -0.0193505 0.6537 0.5 +0.0268619 0.108823 -0.0133055 0.516109 0.5 +0.028516 0.117882 -0.00302906 0.620203 0.5 +0.00816067 0.125635 -0.0073679 0.704089 0.5 +-0.01069 0.0969192 -0.0307004 0.549076 0.420097 +-0.0322502 0.0367926 -0.0305484 0.31693 0.5 +-5.87354e-05 0.100974 -0.0229378 0.878954 0.5 +-0.0164203 0.103082 -0.0232082 0.638649 0.5 +-0.0292637 0.0364551 -0.0300736 0.430905 0.5 +0.0121568 0.0930338 -0.0284961 0.525051 0.454848 +-0.0218018 0.0947992 -0.0305488 0.748929 0.5 +0.0528515 0.0592232 -0.00323634 0.664215 0.5 +0.0536226 0.0587546 -0.00269037 0.61617 0.5 +0.00856462 0.11946 -0.0147195 0.508891 0.5 +0.0556505 0.0677792 0.00213147 0.454093 0.5 +0.0565412 0.0674698 0.002463 0.481514 0.5 +-0.00749339 0.119159 -0.0142858 0.596598 0.476866 +-0.00335753 0.11894 -0.0140663 0.839855 0.5 +-0.0365515 0.115187 -0.0158874 0.867624 0.5 +0.0160687 0.122524 -0.00804645 0.622514 0.5 +-0.0500595 0.117739 -0.014504 0.630454 0.5 +-0.00129201 0.123843 -0.0093277 0.638759 0.5 +-0.0598499 0.0364094 -0.00954648 0.298579 0.5 +-0.0144671 0.110884 -0.0194361 0.657846 0.5 +0.0265398 0.104204 -0.0163559 0.625063 0.389552 +-0.00545884 0.111961 -0.020621 0.861661 0.5 +-0.0154901 0.11097 -0.019533 0.680702 0.5 +0.0318276 0.102039 -0.0140664 0.729709 0.5 +-0.0365713 0.0483594 -0.015218 0.184984 0.5 +-0.0172469 0.116672 -0.0155678 0.803765 0.5 +-0.0324183 0.116998 -0.0137964 0.789464 0.5 +0.0285718 0.0898068 -0.0210622 0.728798 0.5 +-0.0225512 0.0933694 -0.0331106 0.360758 0.5 +-0.0444734 0.111133 -0.0175908 0.642506 0.5 +-0.0482685 0.037339 -0.0123839 0.20836 0.5 +0.0474407 0.0661575 -0.000283122 0.626763 0.439815 +-0.0216796 0.18469 -0.0188168 0.301044 0.5 +0.0463136 0.0660623 -0.000202599 0.608446 0.464035 +-0.0184884 0.186846 -0.021092 0.213354 0.5 +-0.0170835 0.187214 -0.0216216 0.226185 0.272655 +0.0293531 0.117442 -0.00254348 0.620776 0.480853 +-0.012301 0.110982 -0.0195491 0.797379 0.5 +-0.0340312 0.123966 -0.00509105 0.642444 0.5 +-0.0568391 0.118972 -0.0116757 0.532531 0.5 +-0.0476672 0.0405803 -0.0117113 0.320351 0.438157 +-0.0454995 0.122409 -0.0114255 0.780989 0.5 +-0.0435029 0.119128 -0.0140097 0.641651 0.5 +-0.0405477 0.118695 -0.0135582 0.707348 0.5 +0.0135031 0.119752 -0.013055 0.479317 0.5 +0.0144377 0.119508 -0.0127985 0.511043 0.5 +0.0320945 0.113613 -0.00441584 0.53708 0.5 +0.000649673 0.0963928 -0.0300705 0.746246 0.5 +-0.0117555 0.0969094 -0.0306933 0.502257 0.43852 +-0.0130193 0.115677 -0.016537 0.65885 0.5 +0.0170761 0.115474 -0.0144429 0.483781 0.464115 +-0.0249431 0.0907384 -0.0344432 0.454318 0.5 +0.033068 0.0984004 -0.0141329 0.762374 0.5 +-0.0176555 0.10171 -0.0237622 0.58675 0.5 +-0.00805531 0.101876 -0.0238922 0.739452 0.5 +-0.0260646 0.11803 -0.0129143 0.78043 0.5 +0.0228298 0.0827896 -0.0258286 0.750174 0.5 +-0.0568115 0.11798 -0.012657 0.540985 0.469377 +0.0236821 0.0824052 -0.0254011 0.745368 0.5 +0.0253655 0.0814952 -0.0244829 0.756164 0.5 +0.0542982 0.0579702 -0.00188368 0.611971 0.5 +0.0125353 0.118934 -0.0141702 0.458566 0.472486 +0.0207674 0.103342 -0.0194283 0.593105 0.5 +0.0243686 0.118145 -0.00732959 0.507508 0.5 +0.0303733 0.115414 -0.00438737 0.535228 0.5 +-0.0323789 0.115075 -0.0157884 0.837226 0.5 +-0.03348 0.115008 -0.0157024 0.81929 0.5 +0.0532901 0.0621073 -0.00218568 0.540862 0.5 +0.00543862 0.118556 -0.0157347 0.461542 0.48104 +0.00741391 0.0920665 -0.0315473 0.580726 0.5 +-0.0303554 0.117939 -0.0127791 0.747717 0.5 +-0.0292876 0.113893 -0.0165575 0.885242 0.5 +-0.0344028 0.0453249 -0.0266763 0.417197 0.468804 +-0.0328813 0.11004 -0.0184872 0.71178 0.5 +-0.0308338 0.109919 -0.0183719 0.904951 0.5 +0.0101538 0.113447 -0.018237 0.574774 0.5 +0.0258263 0.0624492 -0.0231007 0.739799 0.5 +0.026638 0.0619848 -0.0226053 0.758485 0.5 +0.0235131 0.101506 -0.0194672 0.577829 0.5 +-0.0332536 0.0434286 -0.0288825 0.4632 0.486655 +-0.00335679 0.11693 -0.0159223 0.810404 0.5 +0.0460243 0.0737836 0.00392327 0.327359 0.439209 +0.0465282 0.0726943 0.00507292 0.31153 0.5 +-0.0365486 0.12125 -0.0102225 0.522053 0.5 +-0.016158 0.0884114 -0.0380198 0.689122 0.5 +-0.0121064 0.0869584 -0.0384624 0.62575 0.463148 +0.047273 0.0720618 0.00573289 0.478395 0.5 +0.048187 0.0717514 0.00605259 0.550766 0.448007 +-0.0184208 0.185917 -0.0222223 0.28199 0.5 +-0.0169852 0.186593 -0.0230311 0.262349 0.389644 +0.0242207 0.111888 -0.0125803 0.548934 0.479776 +0.049267 0.0717276 0.00605578 0.556543 0.449483 +-0.0075843 0.111951 -0.0206051 0.577745 0.5 +0.0130083 0.0956231 -0.0252421 0.463192 0.5 +-0.0394018 0.0468721 -0.0179145 0.398361 0.335083 +0.00745846 0.0952014 -0.0287983 0.570584 0.5 +-0.0544684 0.119419 -0.0121872 0.765833 0.5 +-0.0337268 0.111492 -0.0180397 0.67746 0.5 +-0.00779971 0.114512 -0.0173201 0.77831 0.5 +-0.0365847 0.122192 -0.00920846 0.435169 0.5 +-0.0374511 0.122567 -0.00961353 0.670834 0.5 +0.00261599 0.0960798 -0.0297441 0.776188 0.5 +-0.00333145 0.0968513 -0.0305901 0.715052 0.5 +-0.00664275 0.113752 -0.0185066 0.789115 0.290723 +0.0240847 0.110594 -0.013209 0.652634 0.5 +0.0503819 0.0717878 0.00597587 0.584819 0.448184 +0.0168366 0.113017 -0.0157876 0.507752 0.5 +-0.0151821 0.115592 -0.0164315 0.643595 0.5 +-0.0311962 0.0475489 -0.0247586 0.392695 0.5 +-0.0423449 0.122373 -0.0114097 0.555795 0.478179 +0.0344672 0.111064 -0.00366583 0.449499 0.481753 +-0.0446335 0.126046 -0.00723965 0.528257 0.436839 +-0.027019 0.123094 -0.00421217 0.59136 0.460407 +0.0245413 0.0819542 -0.0249712 0.74391 0.5 +0.0514409 0.0718132 0.00596213 0.612279 0.445495 +0.013479 0.118711 -0.0139326 0.478116 0.5 +-0.00742046 0.035877 -0.0249268 0.239017 0.5 +0.0305352 0.10973 -0.0102674 0.561444 0.441404 +-0.00917487 0.0875708 -0.0370938 0.771494 0.5 +0.00508145 0.125851 -0.00757191 0.678454 0.5 +-0.054587 0.123231 -0.00812744 0.793262 0.5 +0.0524989 0.0718135 0.00595977 0.603198 0.467715 +0.0535119 0.0717543 0.00602975 0.625533 0.466866 +-0.060329 0.11723 -0.0118118 0.563997 0.5 +0.027192 0.101376 -0.017349 0.698507 0.5 +-0.0355455 0.11407 -0.0167228 0.62187 0.474562 +-0.0478216 0.109884 -0.018362 0.800312 0.5 +-0.0457781 0.109842 -0.0182449 0.676526 0.5 +-0.0281684 0.117044 -0.0138686 0.565639 0.5 +-0.0292722 0.116973 -0.0137779 0.817721 0.5 +0.0241882 0.0633761 -0.0240832 0.717435 0.5 +0.0544885 0.0716156 0.00618127 0.63906 0.467089 +0.0554262 0.0714159 0.00640835 0.509752 0.5 +0.0563341 0.0711373 0.00671617 0.540911 0.5 +-0.0323736 0.176483 -0.0134412 0.429135 0.5 +-0.0310993 0.177108 -0.0141677 0.427643 0.5 +-0.029497 0.177966 -0.015166 0.426629 0.5 +-0.0465015 0.112315 -0.0168133 0.708967 0.5 +0.0280633 0.100998 -0.0169482 0.711099 0.5 +0.0279153 0.112797 -0.00956049 0.548236 0.420992 +0.0474137 0.0671743 0.000684928 0.617905 0.5 +-0.0444371 0.122416 -0.011439 0.785404 0.5 +0.0546227 0.0668075 0.00110467 0.480564 0.459148 +-0.0183224 0.184952 -0.0232094 0.355689 0.5 +-0.0169338 0.185679 -0.0240586 0.318683 0.426245 +-0.0444587 0.11222 -0.0167423 0.662138 0.5 +0.00653661 0.120619 -0.0139577 0.614837 0.5 +-0.00648083 0.111994 -0.0206545 0.851319 0.5 +0.00181256 0.0994772 -0.0233519 0.832146 0.5 +0.00525838 0.123196 -0.010701 0.680667 0.5 +-0.053287 0.119647 -0.012449 0.788635 0.5 +0.0102371 0.115602 -0.0165593 0.709224 0.5 +-0.0357372 0.111668 -0.0181975 0.678647 0.5 +-0.00547868 0.112944 -0.019663 0.82537 0.5 +0.0249883 0.12025 -0.003603 0.62572 0.467951 +0.0266688 0.0892152 -0.0224539 0.711942 0.5 +0.052731 0.0672551 0.000627241 0.458688 0.5 +-0.0192836 0.0894928 -0.0371367 0.483863 0.487263 +0.0564401 0.0662549 0.00171258 0.511429 0.472424 +-0.0168964 0.123328 -0.00656517 0.523608 0.5 +-0.0631879 0.0449558 -0.00115255 0.4108 0.348092 +-0.0175036 0.0357848 -0.0270478 0.230538 0.5 +0.0250223 0.110364 -0.0129553 0.545328 0.416993 +-0.0162447 0.115598 -0.0164334 0.631876 0.5 +-0.0111853 0.109046 -0.0214904 0.806839 0.5 +-0.0708646 0.0384387 0.000437312 0.150517 0.401863 +-0.00316977 0.101093 -0.0230747 0.634384 0.5 +0.0176793 0.0852191 -0.0283526 0.712329 0.5 +-0.0386241 0.125328 -0.00654651 0.721355 0.5 +0.0338239 0.11087 -0.00547119 0.523065 0.5 +0.0144108 0.118463 -0.013667 0.511342 0.5 +-0.030624 0.0348272 -0.0303515 0.262513 0.5 +-0.0133229 0.0978873 -0.0277326 0.777318 0.5 +0.0242993 0.0928305 -0.0222726 0.815393 0.5 +0.0223914 0.093257 -0.0227104 0.815911 0.5 +-0.00732851 0.0942973 -0.033961 0.813255 0.5 +0.025021 0.085012 -0.0240764 0.750436 0.5 +0.01399 0.106595 -0.01887 0.540443 0.5 +-0.0345432 0.114978 -0.015669 0.818757 0.5 +-0.0489531 0.117804 -0.0145786 0.604204 0.5 +-0.0300938 0.0476999 -0.0248901 0.444368 0.5 +-0.00546375 0.117984 -0.0150376 0.642582 0.5 +-0.0064886 0.118022 -0.0150746 0.617213 0.5 +-0.00759062 0.117967 -0.0150103 0.61752 0.5 +0.0125143 0.121868 -0.0113432 0.46643 0.473055 +-0.0308492 0.121938 -0.00695618 0.494974 0.5 +-0.0187679 0.0341854 -0.027695 0 0 +-0.0366574 0.173333 -0.0118804 0.419059 0.5 +-0.035284 0.173981 -0.0126295 0.395223 0.5 +-0.0338796 0.174703 -0.0134692 0.408506 0.5 +-0.0323633 0.175433 -0.0143069 0.438943 0.5 +-0.0310025 0.176085 -0.0150686 0.443373 0.5 +-0.0294668 0.176906 -0.0160057 0.44356 0.5 +-0.0281079 0.177558 -0.016771 0.487465 0.5 +-0.0266625 0.178341 -0.0176816 0.479603 0.5 +-0.0251253 0.179165 -0.0186166 0.47688 0.5 +-0.023595 0.180085 -0.0196757 0.478809 0.5 +0.0527591 0.0693467 0.00250314 0.615397 0.5 +-0.00428335 0.124198 -0.00969837 0.551994 0.5 +-0.027328 0.0951114 -0.0248637 0.416967 0.468326 +-0.0433541 0.112279 -0.0167951 0.602383 0.5 +-0.0154061 0.185475 -0.025609 0.252379 0.349202 +-0.0144877 0.185446 -0.0257702 0.273228 0.329781 +-0.0267044 0.158758 -0.0121466 0.658101 0.5 +-0.00744712 0.0961017 -0.0318028 0.695055 0.5 +-0.02745 0.110307 -0.0187882 0.801214 0.5 +0.0202904 0.0912514 -0.02462 0.66063 0.5 +0.0198639 0.11968 -0.0089705 0.757005 0.5 +0.0208045 0.119446 -0.00872458 0.768137 0.5 +-0.026888 0.0344315 -0.0290471 0.244173 0 +-0.0403006 0.122206 -0.0112466 0.748918 0.5 +0.0129986 0.124708 -0.00640366 0.563153 0.409001 +0.0537086 0.0670896 0.000808459 0.469617 0.453983 +0.0112449 0.0943173 -0.0278535 0.474423 0.473679 +0.0121652 0.0940439 -0.0275601 0.468457 0.5 +0.0162842 0.118981 -0.0122323 0.495842 0.466677 +0.0328852 0.113087 -0.00384394 0.524693 0.461284 +0.016382 0.0888799 -0.0281622 0.655048 0.5 +0.0338247 0.108829 -0.00728203 0.542992 0.5 +0.0353274 0.107617 -0.00596632 0.545084 0.456568 +-0.00789661 0.098211 -0.0280331 0.53889 0.411612 +-0.00752216 0.122122 -0.0114318 0.821458 0.5 +-0.0332851 0.0368458 -0.0306141 0.266974 0.5 +0.0155832 0.0893609 -0.0286847 0.640251 0.5 +-0.0512066 0.125627 -0.00670494 0.712962 0.5 +-0.00538883 0.122125 -0.0114557 0.633279 0.5 +-0.00970184 0.120973 -0.0121849 0.770076 0.5 +-0.0375464 0.119352 -0.0122401 0.649959 0.5 +0.0078778 0.0989406 -0.0227671 0.862343 0.5 +0.0278575 0.109692 -0.0122334 0.517511 0.443888 +-0.0138322 0.105995 -0.0224296 0.60161 0.5 +-0.0395958 0.118487 -0.0133369 0.681465 0.5 +-0.0376087 0.118212 -0.0130418 0.614722 0.5 +0.0235801 0.11767 -0.00881398 0.494406 0.5 +-0.035527 0.115134 -0.015836 0.857698 0.5 +0.00543206 0.119469 -0.0147017 0.595097 0.471855 +-0.0415297 0.118854 -0.0137293 0.682626 0.5 +-0.00441737 0.117961 -0.0150091 0.607747 0.468249 +-0.0111221 0.0980696 -0.0279124 0.848532 0.5 +0.0101277 0.0911581 -0.0305812 0.593636 0.5 +-0.0118847 0.117889 -0.0148923 0.5905 0.5 +0.0199668 0.115907 -0.0129188 0.523627 0.5 +-0.0184507 0.117417 -0.0143314 0.696854 0.5 +-0.0196292 0.117165 -0.0140584 0.707168 0.5 +-0.0367588 0.172073 -0.0125043 0.419807 0.5 +-0.0353775 0.172711 -0.013245 0.413207 0.5 +-0.0339572 0.173519 -0.0141904 0.427908 0.5 +-0.0325191 0.174119 -0.0148634 0.461634 0.5 +-0.0311424 0.174761 -0.015609 0.469014 0.5 +-0.0296574 0.175524 -0.0164728 0.453748 0.5 +-0.0282938 0.176171 -0.0172378 0.49146 0.5 +-0.0267635 0.177003 -0.0181719 0.51211 0.5 +-0.0475241 0.112407 -0.0169253 0.739406 0.5 +-0.0388306 0.112851 -0.0174267 0.607895 0.470351 +-0.0377685 0.112865 -0.0174473 0.616567 0.5 +-0.0207673 0.117009 -0.0138783 0.784867 0.5 +-0.0579212 0.120852 -0.00959233 0.833942 0.5 +-0.0218308 0.117001 -0.0138605 0.829389 0.5 +-0.0156288 0.184043 -0.0262877 0.362651 0.5 +-0.0142894 0.184628 -0.0268303 0.369864 0.387185 +-0.0131915 0.184654 -0.0268832 0.299781 0.35877 +-0.0228968 0.117028 -0.0138782 0.839818 0.5 +0.0367118 0.0920329 -0.0133924 0.684003 0.5 +0.0261507 0.0923065 -0.0217116 0.64737 0.5 +0.014908 0.106309 -0.0185911 0.533485 0.5 +0.018427 0.0917703 -0.0251723 0.632965 0.355582 +0.0352506 0.101471 -0.011425 0.611191 0.475617 +-0.00758477 0.0968518 -0.0305822 0.639956 0.5 +-0.0156034 0.097548 -0.0273897 0.775282 0.5 +-0.00865281 0.123002 -0.0103525 0.716016 0.5 +-0.0239594 0.117024 -0.0138685 0.851617 0.5 +0.0573848 0.0670309 0.00292365 0.477792 0.5 +-0.00761105 0.112944 -0.01965 0.780017 0.5 +0.0257874 0.0895854 -0.0228249 0.683974 0.5 +-0.0169095 0.0379753 -0.0273392 0.341134 0.473204 +-0.00436115 0.122059 -0.0113929 0.611585 0.5 +-0.0121375 0.102128 -0.024127 0.533041 0.5 +0.0363661 0.0873006 -0.0164353 0.768705 0.5 +0.0141654 0.115006 -0.0159235 0.625244 0.447499 +-0.059088 0.0445923 -0.00517311 0.48831 0.370334 +-0.0182219 0.0954777 -0.0312615 0.447234 0.454288 +-0.0354802 0.0365931 -0.0303176 0.208061 0.369641 +-0.0310679 0.0435994 -0.0290446 0.479278 0.49112 +-0.031399 0.116965 -0.0137545 0.799194 0.5 +-0.0653565 0.1551 0.00564588 0.763704 0.5 +-0.064416 0.154996 0.00586526 0.699413 0.5 +-0.0633595 0.155022 0.00583483 0.581556 0.5 +-0.0365933 0.117132 -0.0139142 0.83407 0.5 +-0.0376115 0.11722 -0.0140038 0.853387 0.5 +-0.00875136 0.116762 -0.015718 0.640975 0.5 +-0.0575878 0.158069 0.0020235 0.19871 0.5 +0.0216012 0.112963 -0.0137495 0.550359 0.461992 +-0.0454802 0.112265 -0.0167776 0.695127 0.5 +-0.0400219 0.111533 -0.0180322 0.606873 0.467516 +-0.051802 0.111349 -0.0178923 0.675026 0.434005 +0.00850296 0.118331 -0.0155001 0.640384 0.5 +-5.55454e-05 0.1192 -0.0143689 0.756706 0.289692 +-0.00746204 0.125196 -0.00874293 0.644352 0.5 +-0.0442869 0.166804 -0.00853834 0.432511 0.5 +-0.0427999 0.167662 -0.00952768 0.424918 0.5 +-0.0356427 0.112876 -0.017464 0.641035 0.5 +-0.0398347 0.169198 -0.01127 0.439878 0.5 +-0.038314 0.170034 -0.0122167 0.356143 0.479359 +-0.0369254 0.170672 -0.0129456 0.439089 0.5 +-0.035495 0.171374 -0.0137494 0.438038 0.5 +-0.0341867 0.172054 -0.0145892 0.454318 0.440615 +-0.0278288 0.122593 -0.00568164 0.519753 0.461966 +-0.062358 0.172308 -0.0618736 0.384039 0.5 +-0.0366993 0.124957 -0.00615077 0.575982 0.5 +-0.052671 0.112615 -0.017101 0.648628 0.5 +-0.0505191 0.112725 -0.0172384 0.684326 0.5 +-0.0485119 0.112536 -0.0170517 0.727095 0.5 +-0.0268076 0.122539 -0.00562189 0.544559 0.5 +-0.0257438 0.12256 -0.00564443 0.537154 0.5 +-0.0346189 0.112824 -0.0174204 0.643919 0.5 +-0.0613665 0.0430534 -0.00574325 0.571596 0.5 +-0.0601621 0.0433793 -0.00606772 0.581004 0.404197 +-0.0335566 0.11282 -0.0174155 0.629785 0.5 +-0.0144079 0.183333 -0.0275579 0.312425 0.5 +-0.0132393 0.1837 -0.0278845 0.250939 0.362653 +-0.0410688 0.11258 -0.017122 0.605159 0.5 +-0.0324948 0.112838 -0.0174448 0.875926 0.5 +-0.00333512 0.125963 -0.00760181 0.435991 0.5 +0.00167631 0.105337 -0.0215515 0.748392 0.5 +-0.0305905 0.119479 -0.0103702 0.661567 0.5 +-0.00541885 0.0969111 -0.0306599 0.688878 0.334552 +-0.00860618 0.0968801 -0.0306409 0.628847 0.5 +-0.0196985 0.0957936 -0.0295783 0.775112 0.5 +-0.0119077 0.0894805 -0.0370977 0.743103 0.5 +0.05377 0.0682444 0.00163269 0.422864 0.479058 +0.050697 0.0684106 0.00144017 0.64159 0.5 +-0.0098481 0.112657 -0.0193422 0.750728 0.5 +0.00798497 0.0890814 -0.0324293 0.65198 0.5 +0.0192573 0.0903239 -0.0256184 0.662745 0.5 +-0.0251918 0.111615 -0.0181703 0.766171 0.5 +-0.0263531 0.11244 -0.0170322 0.860581 0.5 +-0.0099585 0.1135 -0.0182227 0.797268 0.27471 +-0.00880359 0.113633 -0.0183799 0.763775 0.285649 +-0.0565118 0.0454033 -0.00602573 0.623985 0.5 +0.034589 0.108233 -0.00663102 0.541292 0.5 +0.0321502 0.106752 -0.0110706 0.53941 0.5 +0.00615212 0.112907 -0.0196236 0.565075 0.5 +0.0106037 0.121274 -0.0126925 0.679672 0.5 +-0.0650217 0.154743 0.00396393 0.780861 0.5 +-0.0639212 0.154791 0.00385831 0.684803 0.5 +-0.0629032 0.154793 0.00389792 0.524873 0.5 +-0.0618594 0.154827 0.00385225 0.352214 0.5 +-0.0605375 0.155317 0.003221 0.174334 0.5 +-0.0588974 0.156171 0.00210438 0.160486 0.5 +-0.0573252 0.157131 0.000943525 0.214462 0.5 +-0.0558184 0.158024 -0.000144968 0.224429 0.5 +0.013488 0.120719 -0.0120957 0.461813 0.5 +-0.0523916 0.160438 -0.00307609 0.235771 0.5 +-0.0507332 0.161533 -0.00440491 0.318386 0.5 +-0.0491589 0.162483 -0.00556124 0.355109 0.5 +-0.0475911 0.163428 -0.00670042 0.370018 0.5 +0.0144228 0.120472 -0.0118376 0.490496 0.5 +-0.0444716 0.165339 -0.00887164 0.436885 0.5 +-0.0428743 0.166323 -0.00997516 0.444816 0.5 +-0.0414725 0.16704 -0.0108149 0.474027 0.5 +0.0071927 0.124822 -0.00847934 0.562774 0.488337 +0.000807934 0.124791 -0.00838237 0.612672 0.350413 +0.0338305 0.107861 -0.00824999 0.568803 0.5 +0.033027 0.108336 -0.00876159 0.573804 0.5 +-0.00864992 0.124983 -0.00848236 0.581795 0.5 +-0.0206804 0.112216 -0.0188434 0.582803 0.5 +-0.0327045 0.111423 -0.0179721 0.683755 0.5 +-0.0347529 0.111555 -0.0180951 0.675619 0.5 +-0.0378644 0.111663 -0.0181901 0.637814 0.5 +-0.0389284 0.111648 -0.0181691 0.624629 0.5 +-0.0528539 0.1113 -0.0177773 0.663522 0.5 +0.0360108 0.100867 -0.0107814 0.615966 0.5 +0.00929618 0.123787 -0.00937811 0.723141 0.5 +-0.00231276 0.123919 -0.0094032 0.619696 0.5 +-0.0297303 0.109983 -0.0184292 0.854242 0.5 +-0.0283257 0.118773 -0.011655 0.671515 0.346268 +-0.0165765 0.119912 -0.0109781 0.681798 0.5 +0.0330143 0.106332 -0.0106209 0.545383 0.5 +-0.0133613 0.182397 -0.0284169 0.28016 0.5 +-0.0121975 0.182647 -0.0286755 0.324706 0.435614 +-0.0112874 0.182441 -0.0284978 0.28078 0.5 +-0.0268516 0.0981872 -0.024073 0.538478 0.48008 +-0.027858 0.0343176 -0.0296609 0.182533 0.216147 +-0.0257103 0.0983522 -0.0242349 0.721021 0.5 +0.00181742 0.106617 -0.0209271 0.769536 0.5 +-0.0385431 0.038993 -0.0286239 0.288896 0.44199 +-0.0246099 0.0984431 -0.024327 0.726785 0.5 +-0.0208348 0.0956185 -0.0294009 0.406981 0.5 +-0.0235889 0.0983837 -0.0242804 0.663055 0.5 +0.0527798 0.0683653 0.00150186 0.428987 0.483382 +0.0517581 0.0684217 0.00143507 0.514134 0.377941 +-0.00234671 0.0967246 -0.0304442 0.728827 0.5 +-0.00132352 0.0966684 -0.0303753 0.737376 0.5 +-0.00993012 0.125562 -0.00707028 0.382692 0.5 +-0.0190564 0.0920061 -0.0357108 0.530205 0.469335 +0.0572537 0.0657957 0.00220085 0.507265 0.472715 +-0.0534467 0.125409 -0.00644153 0.856054 0.5 +0.0233517 0.120203 -0.00555174 0.50807 0.5 +-0.0399713 0.112687 -0.0172474 0.600699 0.5 +0.0213076 0.110412 -0.0149847 0.544514 0.479676 +-0.061465 0.0438948 -0.0044823 0.468586 0.5 +-0.00904474 0.102005 -0.0240096 0.557454 0.5 +-0.0225646 0.0983245 -0.0242201 0.643679 0.5 +-0.0647611 0.154265 0.00245101 0.839445 0.5 +-0.0637456 0.154158 0.00252195 0.745818 0.5 +-0.0626839 0.154165 0.00249175 0.55246 0.5 +-0.0616277 0.154191 0.00244865 0.360565 0.5 +-0.0604582 0.154406 0.00215902 0.300795 0.5 +-0.0589643 0.15508 0.0013052 0.284139 0.5 +-0.0573985 0.155942 0.000257732 0.280402 0.5 +-0.0558687 0.156831 -0.000812957 0.350533 0.5 +-0.0541798 0.157923 -0.00210942 0.333285 0.5 +-0.052489 0.159007 -0.00340529 0.354748 0.5 +-0.051025 0.159915 -0.00453945 0.325786 0.5 +-0.0493777 0.160927 -0.00574679 0.323121 0.5 +-0.0477552 0.161949 -0.00697323 0.379157 0.5 +-0.0462961 0.162745 -0.00789878 0.418386 0.5 +-0.00142898 0.112626 -0.0193593 0.619835 0.5 +-0.00244825 0.112634 -0.0193375 0.888633 0.5 +-0.00347107 0.112728 -0.01944 0.845279 0.5 +-0.00445554 0.112864 -0.0195829 0.828993 0.5 +-0.00650346 0.112991 -0.0197156 0.802838 0.5 +-0.000294503 0.124716 -0.00828566 0.637822 0.351948 +0.00190837 0.124868 -0.00847893 0.589732 0.351189 +-0.00130995 0.124776 -0.00834251 0.660437 0.5 +-0.0217663 0.11209 -0.0186927 0.577251 0.5 +-0.0292922 0.117943 -0.0127907 0.759173 0.5 +0.0174798 0.0919971 -0.0254067 0.606923 0.361482 +0.0188031 0.106638 -0.0169667 0.525016 0.5 +-0.0556881 0.123137 -0.00801327 0.850996 0.5 +-0.053406 0.12345 -0.00838645 0.74969 0.5 +0.0132374 0.123205 -0.00876652 0.738295 0.397779 +0.0122831 0.123395 -0.0089862 0.735828 0.398869 +-0.056184 0.0374619 -0.0105738 0.296533 0.5 +0.00108438 0.119342 -0.0145393 0.765248 0.5 +-0.0215094 0.0983521 -0.0242621 0.63899 0.5 +-0.0298836 0.04486 -0.0282273 0.623065 0.463798 +-0.0204069 0.09844 -0.0243451 0.661276 0.5 +-0.0135749 0.18083 -0.0284353 0.233028 0.402204 +-0.0125142 0.181139 -0.0289621 0.275838 0.5 +-0.01134 0.181374 -0.0292688 0.302792 0.5 +-0.0105535 0.180959 -0.0288535 0.266029 0.5 +-0.0298476 0.105726 -0.0219826 0.572492 0.5 +-0.0192998 0.0985099 -0.0244 0.630272 0.5 +-0.018238 0.0985224 -0.0244062 0.606918 0.5 +0.0287445 0.109341 -0.0118595 0.530517 0.5 +-0.055158 0.0361639 -0.0112393 0.238464 0.5 +-0.0171725 0.0985232 -0.0244048 0.609931 0.5 +-0.0161123 0.0985355 -0.0244159 0.595192 0.5 +0.0165523 0.0922417 -0.0256623 0.567503 0.404872 +0.00654043 0.0954774 -0.0291051 0.554323 0.5 +-0.000334987 0.0965293 -0.0302242 0.749582 0.5 +-0.0251322 0.110719 -0.0192347 0.77997 0.5 +-0.0149675 0.0986909 -0.0245721 0.5947 0.5 +-0.0158456 0.122449 -0.00760827 0.532688 0.456233 +-0.0138651 0.0987904 -0.0246748 0.547253 0.5 +0.00919876 0.0964636 -0.0261302 0.757179 0.5 +-0.0553377 0.0457536 -0.00639551 0.627053 0.5 +0.00687166 0.100046 -0.0219438 0.641609 0.5 +0.0295159 0.107768 -0.0121736 0.538299 0.402874 +-0.0198015 0.10169 -0.0238258 0.887146 0.5 +-0.01273 0.098974 -0.0248693 0.828843 0.5 +-0.0645607 0.153661 0.00110457 0.852794 0.5 +-0.0635959 0.153475 0.00125628 0.777968 0.5 +-0.0626195 0.153328 0.0013944 0.568428 0.5 +-0.0615203 0.153356 0.00130737 0.452035 0.5 +-0.0603328 0.153535 0.00105643 0.428971 0.5 +-0.0590115 0.153958 0.00054242 0.448628 0.5 +-0.0575589 0.154615 -0.000238768 0.426294 0.5 +-0.0560997 0.155362 -0.00113519 0.453511 0.5 +0.0197946 0.0872171 -0.0264236 0.734679 0.5 +0.015569 0.110589 -0.0172093 0.598066 0.4619 +0.0147067 0.111012 -0.0176211 0.6316 0.5 +0.0129112 0.111627 -0.0182976 0.619937 0.484346 +0.00907863 0.112423 -0.0191367 0.777725 0.5 +0.0029144 0.125773 -0.00745627 0.613902 0.5 +-5.6077e-05 0.112952 -0.0196345 0.602518 0.5 +0.00419789 0.123154 -0.0106599 0.646987 0.5 +-0.029645 0.121258 -0.00823608 0.431571 0.5 +-0.00533161 0.123249 -0.0106624 0.626347 0.5 +-0.0202559 0.0365056 -0.0280118 0.392689 0.5 +-0.00871405 0.112847 -0.0195489 0.767591 0.5 +-0.0122436 0.112093 -0.0187249 0.815193 0.5 +-0.0183959 0.112492 -0.0191613 0.501625 0.476022 +-0.0195343 0.112367 -0.0190097 0.603213 0.5 +0.0275209 0.088828 -0.0220264 0.718853 0.5 +-0.00192307 0.107424 -0.021877 0.608664 0.5 +0.0115347 0.118055 -0.0152175 0.54773 0.5 +-0.0168418 0.107354 -0.0217003 0.693878 0.5 +-0.0198334 0.107697 -0.0220521 0.638651 0.462592 +-0.020896 0.107686 -0.0220438 0.633627 0.5 +-0.0263675 0.107348 -0.0216948 0.5917 0.5 +-0.0275054 0.107176 -0.0215083 0.565713 0.5 +-0.050989 0.121022 -0.0119137 0.55859 0.5 +0.00305684 0.124987 -0.00863513 0.627488 0.5 +0.0474285 0.0692644 0.00256538 0.538715 0.5 +-0.0115772 0.0991016 -0.0249869 0.531679 0.5 +-0.010479 0.0991873 -0.02508 0.547873 0.5 +-0.0127071 0.179586 -0.0289228 0.244667 0.5 +-0.0114724 0.180094 -0.0295969 0.309028 0.28649 +-0.00938485 0.0992897 -0.0251913 0.55985 0.5 +-0.00832489 0.0993422 -0.0252442 0.556475 0.5 +-0.0261604 0.114813 -0.0155316 0.611274 0.5 +-0.0072203 0.0994662 -0.0253456 0.596781 0.377053 +-0.0346441 0.117803 -0.0126135 0.829148 0.5 +-0.0613587 0.0343255 -0.00949544 0.1361 0.5 +-0.0626127 0.0339199 -0.00909656 0.134793 0.5 +-0.00615627 0.0994928 -0.025355 0.642623 0.345343 +-0.0172265 0.113695 -0.0184196 0.89067 0.5 +0.0103131 0.0935662 -0.0290602 0.502141 0.458423 +-0.0621527 0.0372105 -0.00831557 0.29453 0.442831 +0.0543119 0.0722872 0.00750454 0.498134 0.5 +0.0353693 0.102677 -0.0107148 0.601651 0.5 +-0.0356689 0.117866 -0.0126779 0.617702 0.5 +-0.015069 0.117815 -0.0147928 0.800027 0.5 +-0.00484087 0.0994589 -0.0252596 0.627908 0.343724 +-0.0114209 0.107659 -0.022044 0.591424 0.5 +-0.0417796 0.0485307 -0.0113147 0.409618 0.5 +-0.00403867 0.0994311 -0.025339 0.66675 0.333427 +-0.0240109 0.113853 -0.0165323 0.796291 0.5 +-0.00301309 0.0994095 -0.0252863 0.76156 0.295616 +-0.01624 0.0963836 -0.0301721 0.784465 0.5 +0.0479819 0.0723794 0.00739708 0.740223 0.5 +-0.00175381 0.0993639 -0.0251444 0.662909 0.343541 +-0.0643335 0.153058 -0.000307605 0.855541 0.5 +-0.0634506 0.15272 2.24523e-05 0.765937 0.5 +-0.062479 0.152546 0.000181648 0.674591 0.5 +-0.0615001 0.152383 0.000341367 0.440415 0.5 +-0.0603904 0.152423 0.000272984 0.579754 0.5 +-0.0591465 0.152697 -5.16463e-05 0.611316 0.5 +-0.0579352 0.153021 -0.000467328 0.64611 0.5 +-0.0190955 0.0939751 -0.033709 0.571631 0.5 +0.0173756 0.109987 -0.0165543 0.620422 0.5 +0.0164623 0.11028 -0.0168584 0.603099 0.5 +-0.003234 0.0960652 -0.0317479 0.795225 0.5 +0.0246727 0.0884534 -0.0236513 0.689104 0.5 +-0.0576549 0.124438 -0.00742698 0.71743 0.5 +0.0355567 0.0878311 -0.0169845 0.756119 0.5 +-0.007347 0.0952877 -0.0329727 0.744536 0.5 +-0.0323987 0.116048 -0.0147978 0.80767 0.5 +0.024564 0.103479 -0.0175815 0.574549 0.5 +0.0236373 0.103743 -0.0178545 0.533187 0.5 +0.0197767 0.104476 -0.0186365 0.827878 0.5 +-0.019309 0.0362824 -0.0277788 0.326668 0.5 +0.049023 0.0722611 0.00748575 0.772636 0.5 +-0.0492612 0.115146 -0.0157671 0.694532 0.5 +0.0312862 0.107094 -0.0114403 0.555594 0.436161 +-0.0147452 0.123455 -0.00671201 0.486247 0.5 +-0.0266349 0.121939 -0.00696588 0.533081 0.5 +0.0314474 0.112439 -0.00717966 0.53896 0.5 +-0.0324512 0.0353306 -0.0309147 0.265955 0.5 +-0.0677301 0.181168 -0.057983 0.30968 0.437269 +0.00734712 0.12316 -0.0106668 0.709505 0.5 +0.0472621 0.0627303 -0.00287883 0.604553 0.5 +-0.0533885 0.122494 -0.00938247 0.738927 0.5 +-0.0335992 0.1188 -0.0116562 0.783476 0.5 +-0.0465986 0.120315 -0.0132329 0.856053 0.5 +0.0132 0.115178 -0.01612 0.589003 0.469266 +-0.0120214 0.178126 -0.0292101 0.29387 0.5 +-0.0108764 0.178532 -0.0297831 0.272257 0.378888 +-0.0488368 0.0970812 -0.0221898 0.798237 0.5 +-0.0774288 0.0712256 0.0238415 0.753187 0.5 +0.00840839 0.117161 -0.0162388 0.662101 0.5 +0.0139693 0.112639 -0.017366 0.528024 0.5 +-0.00663677 0.109707 -0.0221975 0.652225 0.5 +-0.0334993 0.115969 -0.0147052 0.795538 0.5 +-0.0312043 0.0422041 -0.0297469 0.683643 0.5 +-0.0301706 0.0421547 -0.0296993 0.699259 0.5 +-0.0291426 0.042089 -0.0296009 0.712095 0.5 +0.00221518 0.114462 -0.0193126 0.638808 0.5 +0.0204165 0.110729 -0.0153427 0.654981 0.5 +0.0120611 0.11304 -0.0178164 0.753773 0.5 +0.0110822 0.113195 -0.0179885 0.756333 0.5 +-0.0348481 0.110331 -0.0188 0.708483 0.5 +-0.0368977 0.110447 -0.0189068 0.658104 0.5 +-0.0379579 0.11044 -0.0188969 0.653302 0.448673 +0.00980942 0.110782 -0.0193656 0.84515 0.5 +0.0117043 0.110341 -0.0188996 0.838671 0.5 +0.0153998 0.109294 -0.0177665 0.600846 0.5 +0.0228667 0.107306 -0.0156684 0.542901 0.416262 +-0.0126238 0.0952928 -0.0330113 0.630879 0.5 +-0.0386758 0.0462873 -0.0214583 0.349508 0.457493 +-0.000964681 0.0992981 -0.0251507 0.682766 0.333112 +0.0276777 0.0972525 -0.0189451 0.679145 0.5 +-0.0175437 0.119111 -0.0121224 0.679656 0.305495 +-0.0511466 0.124736 -0.0077758 0.68225 0.5 +-0.0228793 0.110931 -0.0194728 0.822392 0.5 +-0.00234994 0.125819 -0.00745455 0.499101 0.5 +0.0135991 0.100782 -0.0226731 0.64252 0.5 +-0.0239953 0.114912 -0.0156465 0.841174 0.5 +-0.0348025 0.040194 -0.0297923 0.383835 0.47075 +-0.0228318 0.114095 -0.016802 0.761643 0.5 +-0.0217088 0.114301 -0.017023 0.751904 0.5 +0.00202824 0.108029 -0.0204102 0.829808 0.5 +-0.0260568 0.0375908 -0.0291887 0.449862 0.5 +0.0133657 0.116504 -0.0155461 0.480849 0.5 +2.68966e-05 0.0991578 -0.0250032 0.676563 0.5 +-0.0640607 0.152536 -0.00179872 0.796475 0.5 +-0.0632934 0.151996 -0.00122225 0.739088 0.5 +-0.0623453 0.151603 -0.000787959 0.52792 0.314652 +-0.0615536 0.151288 -0.000477545 0.394138 0.449591 +-0.0605331 0.151186 -0.000375192 0.49047 0.5 +-0.0594261 0.151258 -0.000475846 0.502919 0.5 +-0.0581213 0.151582 -0.000807379 0.561031 0.5 +0.0452487 0.0681916 0.00167659 0.448423 0.412236 +0.0229726 0.108506 -0.0149598 0.492805 0.5 +0.0367726 0.100261 -0.0101361 0.613958 0.5 +-0.0160225 0.0958165 -0.0315688 0.477048 0.5 +0.0341266 0.0993109 -0.0131459 0.759207 0.5 +0.0308218 0.101142 -0.0151148 0.74016 0.5 +0.0299943 0.101654 -0.0156302 0.725665 0.5 +0.0291394 0.102042 -0.0160578 0.71067 0.5 +0.0273648 0.102724 -0.0167839 0.657532 0.5 +0.0264479 0.103016 -0.017087 0.642877 0.5 +0.0070795 0.101453 -0.021277 0.685398 0.5 +0.0178644 0.101883 -0.0218675 0.525756 0.5 +0.0188255 0.104686 -0.0188612 0.830812 0.5 +0.0147875 0.105075 -0.0193 0.866394 0.5 +0.0110737 0.125093 -0.00680678 0.546428 0.482826 +-0.0111071 0.0879305 -0.0374747 0.780777 0.5 +0.00280587 0.10648 -0.0207933 0.793477 0.5 +-0.00382944 0.108004 -0.0223654 0.581577 0.5 +-0.00481267 0.108148 -0.0225124 0.714512 0.5 +0.046473 0.0747304 0.00699979 0.328172 0.5 +0.013228 0.0990749 -0.0229052 0.650151 0.5 +-0.0109854 0.0891937 -0.0368255 0.586613 0.47845 +0.0471199 0.0728094 0.00697834 0.638801 0.5 +-0.00125449 0.12189 -0.0112382 0.595478 0.5 +-0.000114754 0.120081 -0.0133088 0.769579 0.5 +0.00335185 0.118611 -0.0157819 0.778642 0.5 +0.0122035 0.115305 -0.0162457 0.744849 0.5 +-0.015298 0.113338 -0.0180384 0.649868 0.5 +-0.00623267 0.10133 -0.0233757 0.828028 0.5 +-0.0378518 0.0985762 -0.0221892 0.701614 0.5 +0.0297353 0.111221 -0.00987421 0.530976 0.472221 +0.000993844 0.0989182 -0.0247915 0.682702 0.5 +0.00197653 0.0987575 -0.0246237 0.713352 0.5 +-0.0045943 0.109577 -0.0220661 0.685515 0.5 +0.0201484 0.0899648 -0.02526 0.679889 0.5 +0.00296819 0.0986498 -0.0244883 0.721713 0.5 +-0.0396625 0.0399023 -0.0274567 0.316222 0.5 +0.00226918 0.115596 -0.0185376 0.609103 0.5 +-0.0370217 0.0410946 -0.0286549 0.53588 0.5 +-0.035752 0.0415598 -0.0291214 0.435963 0.5 +-0.0344937 0.041903 -0.0294247 0.454633 0.5 +-0.0333944 0.0420411 -0.0295771 0.622283 0.5 +-0.0322785 0.0421631 -0.0296986 0.652475 0.5 +0.00392426 0.0984839 -0.0242888 0.727194 0.5 +0.00471531 0.10507 -0.02128 0.780216 0.5 +-0.0370838 0.0486029 -0.013278 0.169319 0.5 +-0.0380808 0.0483205 -0.0131774 0.168267 0.5 +-0.0392444 0.0481623 -0.0129943 0.241427 0.5 +-0.0404944 0.0478337 -0.0126145 0.206998 0.40387 +-0.0417782 0.0473939 -0.012205 0.242749 0.5 +-0.0367055 0.112873 -0.0174612 0.631873 0.5 +-0.0302725 0.114038 -0.0167089 0.884161 0.5 +-0.0313333 0.114057 -0.0167329 0.620762 0.5 +0.00733671 0.115147 -0.0180672 0.467625 0.5 +0.012072 0.11405 -0.0168987 0.59182 0.375126 +-0.0217183 0.113234 -0.017904 0.445233 0.5 +0.000134491 0.116503 -0.0174981 0.800176 0.5 +-0.0263041 0.10845 -0.0208491 0.819961 0.5 +0.0293628 0.105677 -0.0139766 0.618692 0.348511 +0.0544954 0.0655564 0.000403771 0.492719 0.478469 +-0.0110297 0.11443 -0.0172182 0.882888 0.5 +-0.00557868 0.109705 -0.0221876 0.677757 0.5 +0.0309621 0.0953572 -0.0169293 0.700168 0.5 +0.0049437 0.0984176 -0.0242128 0.728581 0.328136 +-0.0314758 0.118803 -0.0116777 0.674906 0.5 +-0.0591547 0.117476 -0.0120923 0.573413 0.447865 +0.0296113 0.108994 -0.0114792 0.538012 0.5 +-0.0229141 0.111944 -0.0185359 0.803465 0.5 +0.0110271 0.112101 -0.0187639 0.63166 0.5 +-0.0077039 0.113721 -0.0184781 0.776173 0.290989 +0.00592947 0.0982847 -0.0240623 0.732067 0.326346 +0.00695506 0.0982177 -0.0239936 0.740747 0.322373 +0.0101806 0.114501 -0.0173735 0.559259 0.393209 +0.0217819 0.106251 -0.0165369 0.66217 0.5 +-0.055623 0.120216 -0.0109924 0.514514 0.5 +-0.0120923 0.11442 -0.0172013 0.878462 0.5 +0.00793635 0.0980328 -0.0238123 0.758219 0.5 +-0.0631603 0.151216 -0.00238889 0.648848 0.5 +-0.0624412 0.150596 -0.00171821 0.46579 0.5 +-0.06162 0.150156 -0.00124665 0.389796 0.5 +-0.0607079 0.149875 -0.000940868 0.532066 0.5 +-0.0596465 0.149865 -0.00094307 0.553055 0.5 +-0.0584945 0.150006 -0.0011129 0.59524 0.5 +-0.0571547 0.150227 -0.00146353 0.606695 0.430683 +0.0220342 0.108737 -0.0152173 0.500258 0.5 +0.033089 0.0892132 -0.0184699 0.749998 0.5 +-0.0136643 0.0922643 -0.0359313 0.880904 0.5 +0.0211966 0.123092 -0.002693 0.605579 0.455298 +-0.00886334 0.103392 -0.0235214 0.666715 0.5 +-0.00689074 0.103109 -0.0232386 0.672827 0.5 +-0.00282516 0.102957 -0.0229221 0.558339 0.482046 +0.0473804 0.0650284 -0.00116263 0.47864 0.486925 +0.00409443 0.101828 -0.021842 0.69759 0.5 +0.00810708 0.101446 -0.0211916 0.6336 0.5 +0.0188129 0.101666 -0.0216414 0.535021 0.460894 +0.020694 0.101208 -0.0211426 0.525039 0.5 +0.0225251 0.100664 -0.0205487 0.572847 0.5 +0.0260175 0.0991397 -0.0189626 0.68713 0.5 +0.0318352 0.0959581 -0.0155753 0.716829 0.5 +0.0359605 0.0936242 -0.0130764 0.696952 0.5 +0.0399822 0.0910991 -0.010396 0.567223 0.5 +-0.0163397 0.112374 -0.0190184 0.667188 0.5 +0.0469627 0.0735494 0.00823046 0.637102 0.5 +0.0121657 0.0990535 -0.0228743 0.634076 0.5 +-0.00994091 0.089177 -0.0367642 0.565057 0.483027 +-0.0310423 0.0467686 -0.0260418 0.542477 0.5 +0.0301974 0.0887542 -0.0200097 0.741185 0.5 +-0.00121687 0.120006 -0.0132177 0.79178 0.5 +-0.0628829 0.0649103 0.0305991 0.505183 0.5 +-0.0619009 0.0678892 0.0352357 0.515188 0.389612 +-0.0148084 0.124344 -0.00565133 0.467449 0.5 +0.00895989 0.0979651 -0.0237371 0.786588 0.5 +-0.0252122 0.108563 -0.020971 0.610904 0.5 +-0.00996463 0.114432 -0.0172214 0.855376 0.5 +0.0138891 0.0942573 -0.0257865 0.485388 0.5 +-0.00103499 0.117326 -0.0163697 0.53864 0.5 +0.00994371 0.0978413 -0.0235989 0.818126 0.5 +0.0221704 0.109999 -0.014573 0.635974 0.5 +0.0230644 0.109683 -0.0142211 0.519933 0.5 +0.0239811 0.109404 -0.0139261 0.53106 0.479726 +0.0249492 0.109234 -0.0137375 0.533079 0.465034 +-0.0186027 0.111108 -0.0196906 0.646298 0.452935 +-0.0196643 0.111086 -0.0196461 0.611588 0.5 +0.02369 0.10485 -0.01704 0.687835 0.430819 +0.0217204 0.105135 -0.0173432 0.635305 0.5 +0.0226853 0.115014 -0.0119595 0.552176 0.446005 +0.0235731 0.114695 -0.0116124 0.53334 0.440302 +-0.0397761 0.115072 -0.015742 0.607987 0.467926 +0.0322493 0.109934 -0.00848346 0.570128 0.5 +0.0330411 0.10941 -0.00791346 0.564279 0.366658 +-0.0386776 0.11516 -0.0158482 0.850959 0.5 +-0.0159305 0.0950186 -0.0327431 0.547205 0.5 +0.0569982 0.0642691 0.00177262 0.713416 0.5 +0.0120747 0.0958655 -0.0254962 0.782861 0.5 +-0.00117532 0.0998676 -0.0237773 0.778507 0.5 +0.0208954 0.116644 -0.0117151 0.489012 0.450589 +0.0199827 0.116932 -0.0120267 0.480361 0.5 +0.0321971 0.112814 -0.0055615 0.544509 0.455799 +0.0313786 0.113275 -0.00606229 0.659639 0.5 +-0.0022335 0.116052 -0.016996 0.778883 0.5 +-0.00341693 0.115827 -0.0167447 0.800296 0.5 +0.00933928 0.0947261 -0.0283032 0.579181 0.5 +-0.024291 0.106203 -0.0224613 0.667748 0.44212 +-0.0539655 0.0364915 -0.0115887 0.216958 0.5 +-0.0374215 0.0466159 -0.0218044 0.520068 0.322127 +0.0109672 0.0977693 -0.023517 0.846553 0.5 +-0.00361865 0.109419 -0.0218821 0.554529 0.484396 +-0.00102634 0.107271 -0.0216101 0.6305 0.5 +0.0302323 0.0969553 -0.0166472 0.715353 0.5 +0.0276359 0.0629152 -0.0215123 0.766231 0.5 +0.011956 0.0976358 -0.0233787 0.88586 0.5 +-0.0114932 0.036278 -0.0256312 0.285553 0.5 +0.0207921 0.106393 -0.0166835 0.665185 0.5 +0.0257808 0.10679 -0.0151172 0.605645 0.5 +0.0251044 0.111527 -0.0122017 0.567383 0.458974 +0.00314926 0.122256 -0.0116623 0.593151 0.5 +0.0111022 0.114226 -0.0170859 0.5823 0.39193 +0.0178849 0.106917 -0.0172488 0.53532 0.467921 +-0.0313363 0.11605 -0.0148117 0.815061 0.5 +-0.00967152 0.0968708 -0.0306358 0.555953 0.413923 +0.012978 0.0975651 -0.0232996 0.661518 0.5 +-0.0629725 0.150532 -0.00369044 0.534146 0.5 +-0.0624071 0.149633 -0.00268499 0.414473 0.44754 +-0.0616129 0.149191 -0.00221638 0.374854 0.5 +-0.060738 0.148827 -0.00180261 0.527338 0.5 +-0.0598207 0.148547 -0.00150215 0.615393 0.5 +-0.058758 0.148538 -0.00150368 0.64973 0.5 +-0.0576106 0.148673 -0.00161022 0.678226 0.5 +0.0211195 0.109025 -0.0155233 0.51187 0.5 +-0.0012258 0.095852 -0.0315171 0.813047 0.5 +0.00685606 0.0990064 -0.0228407 0.841248 0.5 +-0.0129939 0.103563 -0.0236849 0.618434 0.5 +-0.0078767 0.103255 -0.023393 0.616321 0.5 +-0.00579466 0.103184 -0.0232761 0.657685 0.5 +-0.000759903 0.102685 -0.0227147 0.662866 0.5 +0.00315207 0.102056 -0.0221009 0.700542 0.5 +0.00608628 0.101527 -0.0214717 0.715493 0.5 +-0.00890397 0.114438 -0.0172305 0.815358 0.5 +0.0197796 0.101487 -0.0214363 0.536991 0.41684 +0.021598 0.10091 -0.0208238 0.538135 0.5 +0.00411662 0.125005 -0.00865855 0.694799 0.5 +0.00616718 0.124896 -0.00854967 0.564733 0.5 +0.0102653 0.0944766 -0.0280245 0.58137 0.474014 +-0.0628844 0.116571 -0.0108779 0.558342 0.5 +-0.0063607 0.125295 -0.00886018 0.671027 0.5 +-0.00430179 0.125159 -0.00873129 0.535694 0.5 +-0.0223108 0.122995 -0.00618559 0.43455 0.454833 +-0.053836 0.112592 -0.0169505 0.644329 0.5 +0.0139694 0.0974449 -0.0231882 0.695614 0.5 +-0.0367435 0.0437017 -0.0271198 0.478269 0.5 +-0.0516192 0.112658 -0.0171697 0.667216 0.5 +-0.0434138 0.111151 -0.0176174 0.600674 0.476512 +-0.0033562 0.120959 -0.0122202 0.84935 0.5 +-0.035558 0.0430076 -0.0284728 0.535832 0.5 +0.0150281 0.097439 -0.0231662 0.724143 0.5 +0.0161097 0.0974052 -0.0230873 0.764881 0.5 +-0.0159384 0.124168 -0.00545234 0.498418 0.5 +-0.0375712 0.124334 -0.00748059 0.502979 0.5 +-0.0570526 0.113331 -0.0158151 0.448809 0.448537 +-0.0559199 0.113507 -0.0160179 0.595249 0.5 +0.0101747 0.096292 -0.0259611 0.760708 0.5 +-0.0147917 0.0951887 -0.0329173 0.613424 0.5 +0.00037651 0.0978532 -0.0276151 0.698072 0.5 +0.017211 0.088423 -0.0276786 0.697723 0.5 +-0.0271072 0.11707 -0.0138992 0.814734 0.5 +-0.0249824 0.117062 -0.0139085 0.845839 0.5 +0.0208761 0.115613 -0.0126037 0.518256 0.5 +0.0217846 0.11532 -0.0122874 0.518308 0.5 +-0.0287709 0.04365 -0.0290051 0.662034 0.5 +0.00549299 0.117639 -0.0167508 0.396399 0.453672 +0.00588424 0.100173 -0.0220733 0.671773 0.5 +-0.00111933 0.100971 -0.0229536 0.887792 0.5 +-0.00714364 0.101607 -0.0236448 0.789881 0.5 +-0.013279 0.101966 -0.0239644 0.485306 0.5 +0.0043586 0.119499 -0.0147306 0.577394 0.472321 +0.0244076 0.117212 -0.0083203 0.495634 0.471194 +0.00827474 0.123868 -0.00945393 0.727833 0.5 +-0.0343373 0.0443897 -0.0277936 0.482841 0.5 +0.0288386 0.111536 -0.010211 0.512234 0.477368 +-0.025262 0.107417 -0.0217613 0.639082 0.5 +-0.0295595 0.111353 -0.0178807 0.66641 0.5 +-0.00665705 0.114661 -0.0174859 0.804903 0.5 +0.0305345 0.113708 -0.00653825 0.666741 0.5 +0.0296623 0.114075 -0.00693776 0.655762 0.5 +0.0123912 0.116671 -0.0157278 0.570427 0.5 +-0.0554295 0.0433 -0.00807812 0.59422 0.5 +-0.0285619 0.108073 -0.0204718 0.556544 0.474239 +0.0198041 0.103539 -0.0196351 0.58789 0.469794 +0.01688 0.104029 -0.0201606 0.840333 0.5 +-0.0601038 0.0347331 -0.00989443 0.129922 0.5 +-0.0165812 0.0355875 -0.0267111 0.229949 0.5 +-0.00663864 0.115688 -0.0165748 0.855543 0.5 +-0.0108336 0.116804 -0.0157483 0.609938 0.5 +-0.0584278 0.0383351 -0.00941724 0.34768 0.5 +-0.0633747 0.036885 -0.0080479 0.316348 0.5 +-0.0337721 0.121485 -0.00843946 0.463633 0.5 +0.0252498 0.0645397 -0.0230446 0.736113 0.5 +0.015355 0.119233 -0.0124997 0.507813 0.5 +0.0181426 0.117476 -0.0126083 0.462209 0.5 +0.0124864 0.11785 -0.0149995 0.463186 0.5 +0.0305961 0.110839 -0.00946183 0.54689 0.5 +-0.0238167 0.0929782 -0.0327062 0.36411 0.5 +-0.0117557 0.0345134 -0.025836 0.157137 0.5 +-0.047221 0.115086 -0.0157836 0.688942 0.5 +0.0396278 0.103602 -0.00160767 0.598617 0.5 +0.0322846 0.110983 -0.00760517 0.536308 0.5 +-0.00634438 0.0961732 -0.0318818 0.723393 0.5 +0.00176571 0.0954911 -0.0311224 0.794138 0.5 +-0.0180945 0.124042 -0.00530863 0.511771 0.5 +-0.0622568 0.148888 -0.00391238 0.378284 0.5 +-0.0616232 0.148175 -0.003118 0.345834 0.5 +-0.0608083 0.147764 -0.00265379 0.471559 0.383966 +-0.0599387 0.147394 -0.00221747 0.552287 0.379913 +-0.0589488 0.147198 -0.00200697 0.699122 0.5 +-0.0579829 0.147131 -0.0018633 0.788302 0.5 +0.0202177 0.109327 -0.0158556 0.619964 0.5 +0.0338998 0.0888046 -0.0179815 0.746178 0.5 +0.0523857 0.0624129 -0.0025136 0.498624 0.459455 +-0.0119328 0.103575 -0.0236984 0.64215 0.5 +-0.0217098 0.115215 -0.0159934 0.748586 0.5 +-0.0611913 0.173613 -0.0615062 0.364051 0.5 +-0.00180961 0.102694 -0.0227875 0.538454 0.478256 +-0.0569183 0.115707 -0.0143002 0.45955 0.5 +0.00507814 0.101571 -0.0215886 0.715254 0.5 +0.00917846 0.101539 -0.0214106 0.598533 0.463604 +0.0139515 0.0933972 -0.0268828 0.506298 0.5 +0.0326207 0.0944486 -0.0159568 0.681381 0.395873 +-0.013127 0.120519 -0.0116431 0.670522 0.305987 +0.0465137 0.0736858 0.00606841 0.324902 0.470379 +-0.0229191 0.119996 -0.0109969 0.678283 0.5 +-0.019191 0.123923 -0.00519119 0.47172 0.5 +-0.00455763 0.115688 -0.0165869 0.847709 0.5 +-0.0229012 0.115018 -0.0157633 0.787267 0.5 +0.0111864 0.115382 -0.0163281 0.742361 0.5 +-0.0603076 0.0409502 -0.0078507 0.599525 0.435067 +-0.0152754 0.103231 -0.0233341 0.606972 0.5 +0.00372554 0.105196 -0.0213905 0.77264 0.5 +-0.0203338 0.123782 -0.00500918 0.68935 0.5 +-0.0282283 0.117946 -0.012805 0.751187 0.5 +0.0213227 0.122349 -0.00385694 0.59747 0.431976 +0.00824435 0.0966482 -0.0263491 0.739347 0.32764 +0.00104126 0.108173 -0.0205653 0.830675 0.5 +-0.0190957 0.0968508 -0.0266962 0.470435 0.39637 +0.0485163 0.0672488 0.000612911 0.628534 0.5 +-0.00556188 0.116801 -0.0157696 0.624604 0.5 +-0.0580129 0.118724 -0.0113962 0.551875 0.5 +-0.052193 0.119749 -0.012566 0.781435 0.5 +0.0336763 0.102539 -0.0125747 0.723794 0.5 +0.0328155 0.102974 -0.0130264 0.728383 0.5 +-0.0434452 0.120253 -0.0131867 0.876065 0.5 +0.0304322 0.0902625 -0.0195701 0.747052 0.5 +0.0344822 0.102017 -0.0120204 0.730377 0.5 +-0.0567885 0.123073 -0.00794084 0.89501 0.5 +-0.0185957 0.118181 -0.0131167 0.696906 0.5 +0.0103692 0.116852 -0.0159048 0.725844 0.5 +-0.0409771 0.113795 -0.0164017 0.633547 0.5 +-0.0504236 0.113946 -0.0165184 0.668524 0.446411 +-0.0514821 0.113924 -0.0164877 0.654849 0.5 +-0.0536811 0.113759 -0.0162997 0.630328 0.5 +-0.0525829 0.113848 -0.0164008 0.636494 0.5 +-0.0328911 0.122131 -0.00712262 0.588513 0.5 +0.0102801 0.12364 -0.00922404 0.729473 0.393784 +-0.0522913 0.124591 -0.00759738 0.756769 0.5 +-0.0129957 0.0883892 -0.0379783 0.717359 0.5 +-0.00131456 0.122836 -0.0102349 0.604155 0.45248 +-0.00577101 0.098213 -0.0280417 0.653391 0.5 +0.0394869 0.10531 0.000602508 0.566343 0.432139 +-0.00679638 0.0982761 -0.0281107 0.581121 0.381689 +0.0236022 0.115739 -0.0107408 0.507741 0.5 +0.0209713 0.0966458 -0.0223043 0.641405 0.477326 +0.021889 0.0963552 -0.0220144 0.636675 0.5 +0.00163035 0.0962275 -0.0299038 0.755745 0.5 +0.0547176 0.0680176 0.00187225 0.434889 0.5 +0.0105539 0.104067 -0.0202515 0.904099 0.5 +0.028326 0.0882981 -0.0214817 0.733689 0.5 +0.0227624 0.0959793 -0.0216236 0.656599 0.5 +0.0236771 0.0956901 -0.0213272 0.646082 0.47275 +0.0204284 0.122662 -0.00423372 0.581421 0.5 +-0.0618136 0.0453397 -0.00172473 0.375298 0.5 +0.024601 0.0954054 -0.0210454 0.660031 0.472355 +0.0276762 0.118315 -0.00350857 0.623719 0.5 +0.00929873 0.115842 -0.01682 0.530959 0.481115 +0.0255559 0.0952317 -0.0208124 0.666546 0.5 +-0.0326373 0.119597 -0.0104942 0.701117 0.5 +-0.0167796 0.121583 -0.00869919 0.773487 0.5 +0.0408877 0.0928069 -0.00817715 0.553109 0.404089 +0.00445187 0.116712 -0.0177471 0.611049 0.5 +0.027859 0.114683 -0.0075901 0.555871 0.483626 +0.026954 0.114984 -0.00791167 0.543742 0.471221 +-0.056641 0.0429978 -0.00777539 0.603186 0.5 +-0.0578691 0.0427244 -0.00751381 0.612448 0.42708 +-0.0590296 0.0424919 -0.00727859 0.620995 0.5 +0.0158574 0.104091 -0.0202309 0.843508 0.5 +0.013731 0.104072 -0.0202068 0.858701 0.5 +-0.00349323 0.113677 -0.0184484 0.855898 0.5 +0.0147725 0.0939169 -0.0254338 0.524034 0.5 +-0.0369768 0.047531 -0.0185543 0.262951 0.5 +0.0264487 0.0948748 -0.0204583 0.680081 0.5 +-0.0299173 0.0383162 -0.0299848 0.433102 0.5 +-0.0634823 0.0352819 -0.00824664 0.209876 0.5 +-0.0466544 0.119173 -0.0140371 0.876354 0.5 +-0.0477624 0.119115 -0.0139706 0.60677 0.5 +0.0273313 0.094554 -0.020088 0.681613 0.5 +0.011579 0.120136 -0.0134617 0.439252 0.5 +0.0172033 0.118701 -0.0119316 0.465101 0.481569 +0.0282191 0.0941913 -0.0197138 0.692746 0.5 +0.0277565 0.117474 -0.00457839 0.524858 0.5 +-0.0400399 0.0367774 -0.0284153 0.196305 0.5 +0.026933 0.109961 -0.012516 0.534288 0.363264 +-0.00347452 0.114725 -0.0175669 0.831456 0.5 +0.0388181 0.104067 -0.00210374 0.605756 0.5 +-0.00562089 0.115673 -0.0165634 0.866546 0.5 +-0.0605064 0.0394509 -0.00845033 0.452016 0.5 +-0.000575856 0.0980296 -0.0278345 0.706421 0.5 +-0.00115893 0.11911 -0.0142672 0.772128 0.289437 +0.0244135 0.114257 -0.0111426 0.506287 0.5 +0.0291029 0.0938741 -0.0193597 0.703349 0.5 +-0.0616609 0.147135 -0.00399772 0.266776 0.5 +-0.06089 0.146655 -0.00344226 0.338709 0.5 +-0.0600861 0.14609 -0.00280453 0.436373 0.5 +-0.0592476 0.145654 -0.00231326 0.554193 0.5 +-0.0583136 0.145422 -0.00203607 0.636687 0.480177 +0.0192911 0.109605 -0.016128 0.628466 0.454374 +0.0347324 0.0882263 -0.0174421 0.750932 0.5 +0.00586712 0.0991316 -0.0229749 0.846585 0.5 +0.0349035 0.0987755 -0.0125611 0.753723 0.5 +-0.0189866 0.10628 -0.022556 0.690119 0.5 +0.0299737 0.0934986 -0.0189639 0.704525 0.5 +0.0308492 0.0931255 -0.0185705 0.70708 0.5 +-0.0332024 0.0455956 -0.0269373 0.652401 0.322549 +-0.0134033 0.110892 -0.0194483 0.85467 0.5 +0.0256081 0.104449 -0.0166247 0.613006 0.387426 +0.00614351 0.12581 -0.00755937 0.691321 0.5 +-0.0164766 0.111102 -0.0196668 0.68463 0.5 +0.0326734 0.101648 -0.0136311 0.731594 0.5 +-0.0377619 0.0480619 -0.0149351 0.179796 0.38847 +-0.0389438 0.047744 -0.0146455 0.280465 0.5 +0.0317035 0.0927362 -0.0181479 0.708714 0.5 +-0.0544366 0.120435 -0.011246 0.521842 0.5 +-0.0555537 0.0420256 -0.00889368 0.591601 0.5 +-0.0567567 0.0416998 -0.00856929 0.602629 0.5 +-0.0615105 0.0406302 -0.00752326 0.565035 0.5 +0.0325469 0.0922927 -0.0176842 0.723583 0.5 +-0.0579749 0.117711 -0.0123561 0.552431 0.5 +-0.00524932 0.101176 -0.023207 0.86443 0.5 +-0.0355388 0.0441134 -0.0275262 0.478708 0.5 +-0.0331847 0.0445939 -0.0279862 0.761978 0.5 +-0.0288608 0.0448354 -0.0281934 0.557038 0.5 +-0.0110869 0.111309 -0.0199045 0.762946 0.5 +0.0333653 0.0918289 -0.0171871 0.730111 0.5 +0.0237477 0.0605032 -0.0251433 0.698389 0.5 +0.0229081 0.0608908 -0.0255785 0.685576 0.5 +0.00394905 0.100531 -0.0224465 0.659723 0.5 +-0.0413464 0.0470648 -0.0139804 0.241345 0.5 +0.0115845 0.121127 -0.0125402 0.523404 0.484577 +-0.0380903 0.041957 -0.0274154 0.483274 0.5 +-0.0338627 0.110196 -0.0186635 0.712994 0.5 +-0.0544975 0.121335 -0.0101688 0.524954 0.469387 +0.00903586 0.100133 -0.0220275 0.57942 0.5 +-0.0285891 0.0935252 -0.0252241 0.354667 0.5 +-0.0273522 0.0939518 -0.0257303 0.266494 0.272231 +-0.0261065 0.0944666 -0.0262366 0.262213 0.438909 +-0.0248167 0.0949702 -0.0267501 0.294001 0.43149 +0.0139517 0.124505 -0.00617757 0.55943 0.484903 +0.0366018 0.0989128 -0.0107075 0.605249 0.483136 +-0.0235591 0.0953745 -0.0271663 0.39254 0.5 +-0.0321271 0.107425 -0.0197503 0.842873 0.5 +-0.0043048 0.123153 -0.010566 0.590122 0.5 +-0.038773 0.11398 -0.0166127 0.85303 0.5 +-0.0398766 0.113891 -0.0165093 0.604002 0.5 +-0.0569551 0.11454 -0.0150747 0.45535 0.475939 +-0.0581438 0.114319 -0.0148345 0.436929 0.5 +-0.0605441 0.113772 -0.0142303 0.582461 0.5 +-0.0384117 0.12376 -0.00887525 0.477788 0.5 +-0.0375072 0.123454 -0.00854988 0.50528 0.5 +0.0106204 0.119324 -0.014581 0.442833 0.432873 +0.00962081 0.119433 -0.0146957 0.528624 0.5 +0.000359464 0.0907103 -0.0342066 0.601301 0.5 +0.0533305 0.0723883 0.0073663 0.869563 0.5 +-0.00330066 0.124033 -0.00952648 0.475518 0.447698 +-0.00342912 0.0915905 -0.0351346 0.703404 0.5 +0.0341879 0.0913684 -0.0166968 0.722534 0.5 +0.0350622 0.0909926 -0.0162992 0.72156 0.5 +0.00364343 0.0960341 -0.0296841 0.764955 0.5 +-0.0125598 0.0943837 -0.0340846 0.693608 0.337102 +-0.0114982 0.0943996 -0.0340943 0.735673 0.5 +-0.0614235 0.172219 -0.0618413 0.400189 0.5 +0.0205436 0.121905 -0.00538746 0.587613 0.5 +0.018776 0.122594 -0.0061273 0.569399 0.5 +0.019654 0.122236 -0.00577023 0.574948 0.5 +0.0214379 0.121585 -0.00505488 0.587866 0.5 +0.0178615 0.122874 -0.00643626 0.569397 0.5 +0.0169165 0.123099 -0.00667688 0.735908 0.5 +-0.023326 0.122164 -0.00726067 0.454765 0.5 +-0.0210403 0.122456 -0.00761783 0.454019 0.5 +-0.0199406 0.122541 -0.00772092 0.468171 0.5 +-0.0189216 0.122512 -0.00768052 0.503797 0.5 +-0.00527436 0.124342 -0.0098488 0.547185 0.5 +-0.00638198 0.124385 -0.00985914 0.537673 0.457362 +-0.0086348 0.124041 -0.00947049 0.640587 0.5 +-0.0157593 0.121529 -0.00864145 0.747941 0.5 +-0.00747948 0.0919417 -0.035549 0.682301 0.5 +0.0359032 0.0905437 -0.0158269 0.713842 0.5 +0.0366564 0.089932 -0.0151793 0.701737 0.5 +0.0287652 0.114389 -0.00726895 0.653804 0.5 +0.0329815 0.112282 -0.00498623 0.527472 0.484178 +0.0337455 0.11169 -0.0043358 0.526535 0.460934 +-0.0601959 0.0422699 -0.00706205 0.620509 0.423171 +-0.0614063 0.0419532 -0.0067475 0.60884 0.5 +-0.0135961 0.12464 -0.00600832 0.423776 0.375058 +0.0359226 0.0926166 -0.0140085 0.673611 0.5 +0.00270214 0.10527 -0.0214784 0.749886 0.5 +-0.0223025 0.0957816 -0.0275832 0.403678 0.5 +0.0223281 0.111319 -0.0139783 0.548545 0.5 +0.0196594 0.10025 -0.0221259 0.578796 0.5 +0.0374058 0.0893177 -0.0145297 0.689463 0.5 +-0.0179257 0.0971306 -0.0269629 0.775366 0.5 +0.0353216 0.0863185 -0.0174167 0.755942 0.5 +0.0336501 0.0872305 -0.0183746 0.757562 0.5 +0.00937092 0.0937948 -0.0292997 0.499841 0.459382 +0.0496183 0.0673428 0.0005193 0.632071 0.5 +0.00311717 0.113125 -0.0199945 0.692675 0.5 +-0.0487025 0.121311 -0.0122547 0.802373 0.5 +0.0106278 0.12033 -0.0136749 0.530812 0.468475 +-0.0413062 0.123313 -0.010402 0.690581 0.35076 +-0.0312047 0.123257 -0.00431908 0.603414 0.5 +0.0268137 0.118694 -0.00391821 0.615638 0.5 +-0.0504087 0.0385253 -0.0116443 0.480614 0.5 +0.0258455 0.110181 -0.0127425 0.543288 0.361941 +-0.0368171 0.04253 -0.0279956 0.526115 0.5 +0.0314584 0.111437 -0.00809824 0.536958 0.474182 +-0.0211666 0.0959679 -0.0277597 0.739919 0.5 +-0.0792107 0.0760132 0.0281283 0.625316 0.5 +-0.0284948 0.111359 -0.0178892 0.89876 0.5 +-0.0604419 0.114971 -0.0134731 0.585213 0.5 +0.0436593 0.058746 -0.00488132 0.612698 0.5 +0.0381644 0.0887078 -0.0138852 0.709922 0.5 +-0.00645384 0.126073 -0.0076982 0.457211 0.409571 +0.00338984 0.116722 -0.0177517 0.612855 0.5 +-0.0602464 0.144668 -0.00329576 0.468455 0.5 +-0.0594754 0.144099 -0.00268098 0.588624 0.5 +-0.0585858 0.14384 -0.00236725 0.624605 0.5 +-0.0576194 0.143675 -0.00218012 0.595581 0.477321 +0.0237552 0.0887468 -0.0239425 0.687242 0.5 +-0.0147383 0.10835 -0.0207588 0.874471 0.5 +-0.0343486 0.0367995 -0.0305331 0.233493 0.5 +-0.0158006 0.108342 -0.0207487 0.679635 0.449107 +-0.00891802 0.0982381 -0.0280905 0.502077 0.441066 +-0.0467348 0.10982 -0.0182008 0.736162 0.5 +-0.0447252 0.109884 -0.0183457 0.636644 0.459048 +-0.0318614 0.109962 -0.0183828 0.668195 0.458326 +0.00917706 0.113608 -0.0184169 0.473892 0.5 +-0.00868026 0.111843 -0.0204858 0.797158 0.5 +0.0438775 0.06952 0.000229591 0.38172 0.5 +0.0350851 0.0848737 -0.0178837 0.757747 0.5 +0.0361999 0.103252 -0.0093129 0.605 0.5 +0.025598 0.0610493 -0.0236458 0.74283 0.5 +-0.0386607 0.116212 -0.0149511 0.858695 0.5 +0.0168546 0.104974 -0.0191686 0.835303 0.5 +0.00234985 0.1177 -0.0168004 0.800164 0.5 +-0.0320761 0.0447291 -0.0281131 0.809315 0.5 +-0.0252093 0.112572 -0.0171753 0.784503 0.5 +-0.00988755 0.103466 -0.0236142 0.642251 0.5 +0.0158478 0.102035 -0.022 0.896988 0.5 +-0.0533077 0.12062 -0.0114531 0.535923 0.471745 +0.0126337 0.110109 -0.0186257 0.610881 0.5 +-0.0137851 0.096091 -0.0318323 0.566991 0.5 +-0.0185539 0.095955 -0.0297446 0.453376 0.5 +0.0301667 0.116977 -0.00204442 0.628165 0.476529 +-0.0554517 0.0444829 -0.0071986 0.611548 0.5 +0.0206713 0.0868458 -0.0260413 0.736242 0.5 +-0.0316803 0.111369 -0.0179291 0.684426 0.5 +0.0313508 0.109263 -0.00976359 0.566724 0.438974 +0.0296893 0.110128 -0.0107004 0.553629 0.5 +0.0094151 0.117047 -0.0161127 0.678726 0.5 +0.0074278 0.117326 -0.0164147 0.662435 0.5 +-0.0522647 0.117566 -0.0142997 0.844168 0.5 +-0.010059 0.109235 -0.0217082 0.813079 0.5 +0.0512305 0.0723962 0.00737259 0.579294 0.5 +0.046342 0.0671736 0.000660587 0.594713 0.5 +-0.0315189 0.0351239 -0.0306591 0.272138 0.5 +0.0311435 0.0885162 -0.0196004 0.746733 0.5 +-0.0346622 0.118788 -0.0116368 0.841076 0.5 +0.0231929 0.110938 -0.0135659 0.647097 0.400136 +-0.0148324 0.107132 -0.0214612 0.884652 0.5 +-0.0308996 0.107699 -0.0200324 0.799966 0.5 +0.016843 0.101962 -0.021958 0.908256 0.5 +-0.0376719 0.114063 -0.0167039 0.871745 0.5 +-0.0449755 0.115277 -0.0159431 0.698181 0.5 +-0.0593188 0.114075 -0.0145597 0.57788 0.5 +-0.0105368 0.0850533 -0.0384463 0.670336 0.467319 +0.00653601 0.0924318 -0.0319265 0.551344 0.5 +0.00374161 0.0952291 -0.0308324 0.813295 0.5 +0.00842498 0.094018 -0.0295425 0.50549 0.5 +-0.0142621 0.120334 -0.0114431 0.650718 0.311285 +-0.0470116 0.0710509 0.0409961 0.750129 0.435331 +-0.0464121 0.035458 -0.0187253 0.144677 0.5 +0.00789859 0.0999878 -0.0218807 0.870642 0.5 +-0.0455406 0.124353 -0.00945534 0.63757 0.5 +-0.0444374 0.124419 -0.00954541 0.641977 0.5 +-0.0434133 0.12436 -0.00948612 0.649183 0.5 +-0.0033226 0.122983 -0.0103909 0.477627 0.5 +-0.0063009 0.09425 -0.0339062 0.861727 0.5 +0.0121427 0.124109 -0.00776299 0.728945 0.5 +-0.0656835 0.180548 -0.0590311 0.375183 0.392286 +-0.0608326 0.17151 -0.0610901 0.333259 0.5 +-0.0144059 0.112046 -0.0186792 0.653329 0.5 +-0.0254305 0.0357675 -0.0290845 0.297778 0.5 +-0.0199914 0.0962147 -0.0280142 0.73856 0.5 +-0.0188119 0.0964492 -0.0282644 0.412969 0.462049 +-0.0176693 0.0966335 -0.0284397 0.774989 0.5 +-0.0164919 0.0968814 -0.0286925 0.760406 0.5 +-0.0153516 0.0970497 -0.0288687 0.789015 0.5 +-0.0142085 0.0972199 -0.0290358 0.457899 0.430715 +-0.0187173 0.108826 -0.0212527 0.649997 0.5 +0.0130247 0.112857 -0.017601 0.612828 0.5 +0.014854 0.103191 -0.021265 0.859398 0.5 +0.0158783 0.103153 -0.0212298 0.877135 0.5 +0.0145822 0.10067 -0.0225932 0.690931 0.5 +-0.00658339 0.116828 -0.0157946 0.878358 0.5 +-0.00744498 0.124256 -0.00972454 0.519296 0.5 +-0.00981592 0.123797 -0.00918874 0.603598 0.5 +-0.0220536 0.0952953 -0.0290683 0.425805 0.5 +-0.0232226 0.0950277 -0.0288098 0.398097 0.431486 +-0.0119418 0.120727 -0.011899 0.692832 0.5 +-0.0244677 0.122018 -0.00707965 0.489848 0.5 +-0.0224767 0.091498 -0.0352097 0.487919 0.5 +0.00964377 0.120482 -0.0138306 0.535371 0.469225 +0.00862183 0.120558 -0.0139068 0.505241 0.445281 +-0.0625553 0.041701 -0.00649092 0.572252 0.5 +-0.0638531 0.04136 -0.00615806 0.522861 0.5 +-0.0356809 0.123888 -0.0070042 0.548528 0.5 +-0.0352566 0.0382472 -0.0299775 0.282884 0.5 +-0.0158582 0.107196 -0.0215252 0.658695 0.5 +0.00194863 0.100763 -0.0227079 0.65077 0.462739 +0.0116034 0.0355849 -0.021581 0.540697 0.5 +-0.0130717 0.0973914 -0.0292103 0.459527 0.5 +-0.011049 0.124435 -0.00785173 0.543578 0.5 +0.0232727 0.0989983 -0.0208236 0.641269 0.5 +-0.0356336 0.11996 -0.0108661 0.576147 0.5 +-0.0346794 0.119765 -0.0106544 0.831373 0.5 +-0.016783 0.0973001 -0.0271368 0.760706 0.5 +-0.0306891 0.120328 -0.00923215 0.625032 0.5 +-0.0295885 0.120405 -0.00932945 0.608104 0.5 +0.00748569 0.0942514 -0.0297902 0.501325 0.5 +0.0213104 0.092205 -0.0236008 0.638948 0.5 +-0.027433 0.108265 -0.0206521 0.577115 0.464992 +-0.00743438 0.120242 -0.0134406 0.841345 0.5 +-0.0383512 0.122877 -0.00994551 0.662908 0.5 +-0.0392946 0.123101 -0.0101877 0.687281 0.5 +-0.0402835 0.123242 -0.0103332 0.686146 0.5 +-0.0685344 0.180035 -0.058648 0.22021 0.5 +-0.0166332 0.101644 -0.0236856 0.814814 0.5 +0.0514429 0.0626408 -0.00275857 0.46181 0.5 +0.00830607 0.0917456 -0.031199 0.581212 0.436692 +-0.00451637 0.113738 -0.0185133 0.823157 0.5 +0.0248664 0.0898261 -0.023121 0.664214 0.468684 +-0.0498837 0.0340852 -0.0133065 0.163797 0 +-0.0356548 0.0459643 -0.0252685 0.367549 0.5 +0.0144798 0.109585 -0.0180587 0.629448 0.5 +-0.00246627 0.111608 -0.0202454 0.635048 0.46818 +-0.0177322 0.108689 -0.0211068 0.687362 0.431911 +0.0252284 0.116758 -0.00782512 0.505611 0.465728 +-0.0240311 0.112816 -0.0174462 0.765038 0.5 +-0.060466 0.143311 -0.00379205 0.534931 0.5 +-0.059626 0.14292 -0.00334389 0.617802 0.5 +-0.0586992 0.142676 -0.00307276 0.612777 0.5 +-0.0577688 0.142406 -0.00278963 0.563778 0.5 +-0.0568151 0.142191 -0.00256359 0.585621 0.465029 +-0.0558892 0.141955 -0.00229647 0.600491 0.5 +0.0183373 0.109817 -0.016338 0.627676 0.454604 +-0.0616584 0.114654 -0.0131207 0.583868 0.5 +-0.000234213 0.0957245 -0.0313684 0.823595 0.300577 +0.0383558 0.102292 -0.0062663 0.497345 0.489531 +-0.00648076 0.0969085 -0.030657 0.616493 0.367202 +0.0317719 0.115994 -0.000976469 0.518685 0.5 +0.0347025 0.105449 -0.00966587 0.580734 0.5 +0.0250009 0.0629104 -0.0235842 0.731768 0.5 +0.00748118 0.122397 -0.0118721 0.673323 0.5 +0.0053984 0.122421 -0.0118951 0.659281 0.5 +-0.00423283 0.0951855 -0.0328472 0.832392 0.5 +0.0338583 0.105892 -0.0101458 0.557096 0.5 +0.00645879 0.122419 -0.0119062 0.687095 0.5 +0.00854238 0.122369 -0.0118647 0.656552 0.5 +0.00956448 0.122301 -0.0117968 0.696892 0.5 +0.0105493 0.122164 -0.0116505 0.698132 0.5 +0.0115311 0.122019 -0.0114981 0.673749 0.35911 +-0.0368012 0.111669 -0.0181954 0.643126 0.5 +-0.0533229 0.121583 -0.0104498 0.5267 0.5 +0.0155707 0.100538 -0.0224673 0.683173 0.5 +-0.0638562 0.0423917 -0.00506847 0.488091 0.381666 +-0.0625754 0.042738 -0.00542472 0.523527 0.5 +-0.0589463 0.0436711 -0.00636451 0.608494 0.5 +-0.0565924 0.0442297 -0.00693458 0.610972 0.5 +0.0198288 0.120602 -0.00797301 0.597768 0.5 +0.0207343 0.120306 -0.00765281 0.592341 0.5 +-0.00104637 0.116277 -0.0172455 0.550502 0.5 +0.00122691 0.116615 -0.0176232 0.824705 0.5 +0.0092124 0.114671 -0.0175632 0.56299 0.418091 +0.0082875 0.114937 -0.017843 0.570706 0.418103 +-0.0283013 0.113756 -0.016413 0.622026 0.5 +0.0458479 0.0724092 0.00333418 0.343072 0.435612 +-0.0511148 0.117699 -0.0144446 0.857017 0.5 +-0.017033 0.0949215 -0.0326512 0.55101 0.5 +0.0152676 0.11708 -0.0141694 0.534826 0.436953 +-0.0119956 0.0882297 -0.0377812 0.60601 0.470285 +0.016822 0.123899 -0.00554312 0.701015 0.5 +-0.0577888 0.0439091 -0.00660137 0.608509 0.5 +-0.0140302 0.116852 -0.0157862 0.617121 0.5 +-0.0129648 0.116833 -0.0157687 0.635413 0.5 +-0.0646081 0.0450546 0.000685835 0.358189 0.31484 +0.004329 0.114453 -0.0192954 0.687331 0.5 +-0.0548344 0.113627 -0.016162 0.622903 0.456742 +0.0336337 0.112484 -0.0031866 0.449258 0.47258 +-0.00951583 0.0848597 -0.0382215 0.851988 0.5 +-0.0433911 0.121364 -0.0123522 0.844432 0.5 +-0.0318616 0.0386777 -0.0303614 0.481223 0.5 +-0.0611415 0.0359024 -0.0090437 0.255959 0.5 +0.027747 0.0902677 -0.021551 0.712607 0.5 +-0.0285179 0.0948797 -0.0246293 0.472827 0.5 +-0.0488054 0.124161 -0.00921799 0.631485 0.5 +-0.0476605 0.124307 -0.00939578 0.60956 0.5 +-0.0465624 0.124393 -0.00950278 0.629456 0.5 +0.0522547 0.0611036 -0.00320855 0.506292 0.5 +0.0531449 0.0608429 -0.00288049 0.542252 0.5 +0.0539548 0.0603844 -0.00239402 0.565116 0.5 +0.0546876 0.0597691 -0.00173886 0.672356 0.5 +0.0465866 0.0714909 0.00427537 0.389154 0.414766 +0.047295 0.0711844 0.0046334 0.422825 0.453625 +-0.0240218 0.119915 -0.0108978 0.65575 0.5 +0.0330446 0.111446 -0.00610948 0.535607 0.467899 +-0.0023355 0.0926921 -0.0342848 0.668925 0.5 +-0.00332118 0.0928352 -0.0344367 0.670157 0.5 +-0.00431394 0.0929621 -0.0345661 0.662835 0.5 +-0.00533435 0.0930519 -0.0346806 0.644035 0.5 +-0.00635915 0.0931082 -0.0347376 0.643102 0.5 +-0.00738223 0.0931774 -0.0348179 0.646877 0.5 +-0.0084076 0.0932235 -0.0348708 0.628911 0.46632 +-0.00946933 0.0932363 -0.0348935 0.601708 0.5 +-0.0104939 0.0933018 -0.0349679 0.840068 0.5 +-0.0114787 0.0934019 -0.0350786 0.576627 0.47761 +-0.012585 0.0933765 -0.0350613 0.575448 0.469527 +-0.0136058 0.093388 -0.035076 0.810306 0.5 +-0.0147076 0.0933085 -0.0349989 0.786432 0.5 +-0.0158055 0.0931896 -0.0348885 0.712362 0.5 +-0.0183288 0.115615 -0.0164437 0.802127 0.5 +-0.0589701 0.121961 -0.00876657 0.915638 0.5 +-0.0135504 0.122737 -0.00796322 0.63231 0.5 +0.0140839 0.123776 -0.0073928 0.726798 0.5 +-0.0139593 0.0967237 -0.0305143 0.469676 0.440524 +-0.0150968 0.0965608 -0.0303463 0.451809 0.5 +-0.0168907 0.0921233 -0.0358082 0.788805 0.5 +-0.0379322 0.0359407 -0.029738 0.244576 0.5 +-0.0404418 0.0351129 -0.0289386 0.129267 0.5 +0.00759602 0.120603 -0.0139518 0.639948 0.5 +-0.0465826 0.121367 -0.0123258 0.816744 0.5 +-0.045477 0.1214 -0.012376 0.826438 0.5 +0.0483563 0.0710513 0.00477309 0.530914 0.5 +-0.0119302 0.0975527 -0.0293786 0.466255 0.5 +-0.0108678 0.0975625 -0.0293851 0.505555 0.5 +-0.0228558 0.113062 -0.0177116 0.785708 0.5 +-0.0398336 0.0384391 -0.0280596 0.334349 0.5 +-0.0360543 0.0398378 -0.0294769 0.37374 0.5 +0.0285239 0.105924 -0.0141978 0.618501 0.5 +-0.0147266 0.0922559 -0.0359307 0.851413 0.5 +-0.0262987 0.113585 -0.0162365 0.860839 0.5 +0.0149059 0.124307 -0.00595517 0.71967 0.5 +-0.0053845 0.126096 -0.00772897 0.497273 0.411371 +0.000980617 0.120181 -0.0134191 0.762624 0.5 +-0.0393097 0.122071 -0.0111029 0.762133 0.5 +-0.0317604 0.120314 -0.00921321 0.489562 0.384383 +0.000828067 0.123861 -0.00936286 0.63329 0.5 +0.00307304 0.124054 -0.00961404 0.652853 0.5 +-0.0329396 0.0386558 -0.0303928 0.44845 0.5 +-0.0170833 0.0896859 -0.0373218 0.650885 0.5 +-0.018198 0.0896163 -0.0372798 0.495766 0.451538 +0.0494532 0.0710682 0.00472592 0.524999 0.5 +0.0505588 0.0711508 0.00463977 0.563856 0.5 +-0.0423688 0.123346 -0.0104204 0.737914 0.5 +0.0516174 0.0711387 0.00464104 0.626378 0.5 +0.0526374 0.0710929 0.00470311 0.604841 0.5 +-0.0633527 0.0454486 0.000289555 0.355355 0.5 +-0.0002129 0.122901 -0.0103152 0.612882 0.5 +0.0286561 0.108194 -0.012625 0.52144 0.5 +0.0536516 0.0710277 0.00477709 0.61671 0.5 +-0.00984328 0.0975178 -0.0293224 0.500161 0.5 +-0.0153159 0.119411 -0.012435 0.67085 0.5 +0.0262919 0.101687 -0.017683 0.67718 0.5 +-0.00874511 0.0976201 -0.0294139 0.54048 0.5 +-0.0350844 0.107815 -0.0201106 0.734838 0.5 +0.0180384 0.119266 -0.0105437 0.576074 0.37457 +0.054633 0.0708998 0.00492223 0.494856 0.5 +-0.0605307 0.142151 -0.00455603 0.558083 0.5 +-0.0596476 0.14187 -0.00422882 0.595469 0.313984 +-0.0586999 0.141645 -0.00399496 0.609381 0.331487 +-0.0577531 0.141417 -0.00374252 0.632592 0.389073 +-0.0568701 0.141076 -0.0033696 0.635186 0.380728 +-0.0560039 0.140764 -0.00299974 0.608123 0.5 +-0.0551839 0.140262 -0.00246039 0.626914 0.5 +-0.0869233 0.112018 0.0232463 0.741658 0.5 +-0.090988 0.113988 0.0207121 0.736914 0.357741 +0.0354948 0.10491 -0.00909103 0.560461 0.424319 +-0.0121876 0.113225 -0.0179296 0.844246 0.5 +0.0555717 0.0706847 0.00515518 0.501959 0.465192 +-0.0434727 0.125255 -0.0084227 0.600551 0.5 +0.0564615 0.0703554 0.0055259 0.5192 0.5 +0.057327 0.0700157 0.00587175 0.463152 0.5 +0.058107 0.0694858 0.00643586 0.450237 0.5 +-0.0480175 0.133707 0.00490199 0.397857 0.5 +-0.0282448 0.11486 -0.0155715 0.626591 0.5 +-0.0374161 0.12162 -0.0106267 0.513852 0.5 +-0.0407824 0.116214 -0.0149415 0.66441 0.5 +-0.0181312 0.0948304 -0.0325641 0.539108 0.5 +0.0269219 0.115924 -0.00692402 0.543939 0.391453 +-0.0111671 0.0867859 -0.0382994 0.657248 0.5 +-0.0102744 0.0864318 -0.0379838 0.818352 0.5 +0.0177807 0.10571 -0.0179484 0.869512 0.5 +-0.0590669 0.120714 -0.00943474 0.857409 0.5 +-0.060211 0.120578 -0.00928669 0.85658 0.5 +-0.0336919 0.119642 -0.0105178 0.789769 0.5 +0.0179331 0.121039 -0.00844165 0.615967 0.5 +0.0161504 0.121694 -0.0091598 0.612839 0.5 +0.0261418 0.0859362 -0.0230192 0.769197 0.5 +0.000745542 0.0955759 -0.0312149 0.829818 0.5 +0.0188897 0.120837 -0.00821554 0.596858 0.477389 +0.0170202 0.121328 -0.0087569 0.508897 0.5 +0.0143083 0.122234 -0.00973054 0.605609 0.475818 +0.0288394 0.112544 -0.00929606 0.535183 0.402721 +0.015252 0.122005 -0.00948865 0.600555 0.389173 +-0.00233373 0.114874 -0.0177321 0.788022 0.5 +0.0130913 0.0937889 -0.0272955 0.4827 0.5 +-0.0383343 0.121902 -0.0109317 0.761832 0.5 +-0.0174982 0.111166 -0.0197324 0.664354 0.5 +-0.0207265 0.111071 -0.0196229 0.870053 0.5 +-0.0217829 0.111029 -0.0195757 0.845154 0.5 +0.0277777 0.108556 -0.0130095 0.512365 0.5 +0.0259403 0.1091 -0.0135959 0.607589 0.463143 +3.04988e-05 0.11432 -0.019028 0.582082 0.470485 +0.00110358 0.114412 -0.0192684 0.483863 0.5 +-0.0346391 0.0469045 -0.0241611 0.307234 0.412644 +0.0383367 0.0910432 -0.012345 0.697395 0.5 +0.0260088 0.0910229 -0.0223512 0.664222 0.5 +0.00809551 0.112572 -0.0192987 0.777628 0.5 +-0.0414315 0.120058 -0.0129928 0.658413 0.5 +0.0282353 0.0775351 -0.0225519 0.759889 0.5 +0.0274272 0.0781922 -0.0230908 0.760774 0.5 +-0.0498987 0.124057 -0.00910218 0.676718 0.5 +0.0258821 0.0794179 -0.0243188 0.75695 0.5 +0.049328 0.0615911 -0.00371844 0.660701 0.5 +0.0503466 0.0615208 -0.00363326 0.56329 0.47895 +0.0513324 0.0613858 -0.00348738 0.511717 0.5 +0.00541955 0.0912903 -0.0327619 0.740864 0.5 +0.0131024 0.123925 -0.00754958 0.725425 0.5 +0.00337017 0.091416 -0.0329064 0.710088 0.5 +0.00242842 0.0916453 -0.033159 0.710675 0.5 +0.00150165 0.0919153 -0.0334107 0.705402 0.5 +0.000567537 0.0921561 -0.0336854 0.55231 0.5 +-0.000397685 0.0923281 -0.0338988 0.701916 0.5 +-0.00135158 0.0925397 -0.0341169 0.699719 0.5 +0.0451079 0.0636949 -0.00183531 0.825448 0.5 +0.046214 0.0637709 -0.0019104 0.831041 0.5 +0.0473189 0.0638822 -0.00202275 0.47477 0.485743 +0.0484193 0.0639761 -0.00211304 0.481362 0.457515 +0.0494857 0.064014 -0.00214923 0.499444 0.46257 +0.0505447 0.0640078 -0.00213219 0.523158 0.462336 +0.0515389 0.0638758 -0.00198972 0.562224 0.5 +0.0524799 0.0636428 -0.00173686 0.489672 0.5 +0.0533817 0.063336 -0.00140725 0.517665 0.5 +0.0541934 0.0628656 -0.00090927 0.644345 0.5 +0.054979 0.06227 -0.000302264 0.679868 0.5 +0.0557083 0.0616421 0.000366134 0.720455 0.5 +0.00543406 0.120555 -0.0138758 0.597706 0.5 +0.0172432 0.108764 -0.0171862 0.586734 0.454391 +-0.016912 0.0931258 -0.0348233 0.700935 0.5 +-0.0179307 0.0931593 -0.0348763 0.698458 0.5 +-0.0444577 0.123407 -0.0104693 0.73703 0.5 +0.0142116 0.123033 -0.00860213 0.749619 0.5 +-0.000792652 0.0894877 -0.0349748 0.643998 0.5 +-0.00175042 0.0897209 -0.0353687 0.602032 0.5 +-0.00265737 0.0899953 -0.0354905 0.754227 0.5 +-0.00233157 0.122878 -0.010278 0.631055 0.5 +-0.0104985 0.0362063 -0.0254961 0.321214 0.5 +-0.00994641 0.0339021 -0.0251924 0.130849 0.5 +-0.0410644 0.0466663 -0.0156422 0.259725 0.5 +-0.0296544 0.0346993 -0.0301222 0.270929 0.5 +-0.037469 0.120514 -0.011464 0.616159 0.458117 +-0.0365293 0.120277 -0.0112077 0.581288 0.460858 +-0.0591735 0.11954 -0.0102201 0.547105 0.47548 +-0.060367 0.11933 -0.00999174 0.57823 0.5 +-0.0521219 0.120842 -0.0117106 0.539648 0.5 +-0.0397231 0.116184 -0.0149076 0.625672 0.5 +0.0190541 0.116198 -0.0132311 0.487694 0.5 +0.0219046 0.0892697 -0.0245066 0.683597 0.5 +-0.0295217 0.0402041 -0.0298306 0.666097 0.5 +-0.00768132 0.0976452 -0.0294292 0.598087 0.5 +0.00461042 0.092806 -0.0323339 0.695606 0.5 +-0.00887527 0.109466 -0.0219533 0.481227 0.5 +-0.021864 0.108885 -0.0213157 0.617331 0.472693 +-0.0129882 0.119781 -0.0128781 0.713175 0.5 +0.0214747 0.0996539 -0.0214946 0.579431 0.5 +-0.0125561 0.107483 -0.0218463 0.826226 0.5 +0.00212883 0.120316 -0.0135831 0.780802 0.5 +-0.0284862 0.120462 -0.00941436 0.470666 0.5 +0.00192116 0.123969 -0.00948312 0.614139 0.5 +0.0052003 0.124064 -0.00964829 0.720735 0.5 +-0.0138904 0.0897489 -0.0373664 0.658833 0.5 +-0.0128628 0.0896836 -0.0372956 0.70471 0.5 +-0.0160243 0.0897174 -0.0373532 0.65266 0.5 +0.0159709 0.0859869 -0.0291978 0.706314 0.450015 +0.0168479 0.0856792 -0.0288312 0.709059 0.5 +0.0391135 0.0904981 -0.0117677 0.685367 0.5 +-0.043573 0.126043 -0.00725208 0.531259 0.44059 +0.0351088 0.100136 -0.012024 0.61555 0.5 +-0.056803 0.119986 -0.0107265 0.521686 0.5 +0.0541025 0.0616928 -0.00172111 0.564185 0.5 +-0.0390833 0.0486663 -0.0122287 0.166062 0.326378 +-0.0361402 0.0481769 -0.0171107 0.175585 0.5 +-0.0373786 0.0478297 -0.016773 0.258198 0.379993 +0.0171797 0.119654 -0.0109592 0.488902 0.5 +-0.0345019 0.0461718 -0.0254652 0.373854 0.462156 +0.0205734 0.0999616 -0.0218299 0.573532 0.5 +-0.0592783 0.115234 -0.0137669 0.581182 0.444266 +0.00147386 0.103921 -0.02207 0.723364 0.5 +0.0193852 0.0915557 -0.024942 0.649844 0.5 +-0.0254216 0.0999543 -0.0239282 0.827849 0.5 +-0.06064 0.140962 -0.00527103 0.560024 0.5 +-0.0596957 0.14074 -0.00502874 0.625178 0.446755 +-0.058744 0.140559 -0.00481674 0.624085 0.446606 +-0.0578202 0.140285 -0.0045343 0.631383 0.5 +-0.0569294 0.13993 -0.00415472 0.649486 0.5 +-0.0561139 0.139571 -0.00370722 0.674855 0.5 +-0.0553453 0.138992 -0.00307013 0.681723 0.5 +-0.0546314 0.138445 -0.00241154 0.690386 0.5 +-0.0538462 0.137744 -0.0016929 0.699026 0.5 +-0.0530296 0.137293 -0.00118635 0.666424 0.393394 +-0.0243216 0.10004 -0.0240037 0.793723 0.5 +-0.0703543 0.0703917 0.033048 0.575987 0.437836 +-0.0232574 0.100051 -0.0240138 0.546306 0.5 +-0.0499478 0.135176 0.00116888 0.541833 0.5 +-0.0872312 0.1132 0.0437313 0.43079 0.5 +-0.0486267 0.13356 0.00299082 0.340552 0.5 +-0.0479295 0.132887 0.00374503 0.411985 0.449507 +-0.0472049 0.132217 0.00449629 0.388063 0.5 +-0.0464946 0.131544 0.00524728 0.420413 0.483672 +-0.00333701 0.121977 -0.0113118 0.599014 0.5 +0.0520156 0.0596733 -0.00368903 0.644396 0.5 +0.0511122 0.059915 -0.00400422 0.795454 0.5 +0.0491876 0.0602673 -0.00438234 0.688585 0.5 +0.0502575 0.0602229 -0.00418894 0.747192 0.5 +-0.00931865 0.0862591 -0.0377315 0.813816 0.5 +-0.0433732 0.122414 -0.0114499 0.798127 0.5 +-0.00247117 0.091392 -0.0349524 0.703433 0.5 +-0.02076 0.0347198 -0.0277376 0.205267 0.5 +0.0220892 0.0906332 -0.0239505 0.659848 0.468543 +-0.015827 0.0921385 -0.0358122 0.796018 0.5 +-0.0356488 0.118923 -0.0117804 0.616731 0.5 +-0.0712408 0.114861 0.0513991 0.4811 0.5 +-0.0250745 0.0954862 -0.0252675 0.539672 0.5 +-0.0123796 0.124965 -0.00637162 0.404851 0.5 +0.0138422 0.0901622 -0.0294996 0.592582 0.5 +0.0124215 0.122685 -0.01021 0.56863 0.5 +-0.0192308 0.0947234 -0.0324688 0.509726 0.5 +-0.0280195 0.0378733 -0.0295429 0.477075 0.5 +-0.0393675 0.120945 -0.0119262 0.606369 0.5 +0.0269115 0.116892 -0.00595645 0.522073 0.384209 +-0.0214492 0.0963545 -0.0261739 0.447514 0.5 +-0.0500652 0.125773 -0.00688378 0.618683 0.5 +0.0241638 0.0853333 -0.0244737 0.745172 0.5 +0.0189265 0.119915 -0.00924366 0.746169 0.5 +-0.0250413 0.0925197 -0.0322644 0.330927 0.5 +0.0328365 0.0876935 -0.0188869 0.763739 0.5 +-0.0358204 0.046598 -0.0238768 0.360098 0.323432 +0.00860136 0.121512 -0.0129363 0.507455 0.5 +0.0268943 0.0906576 -0.0219805 0.678775 0.5 +0.0306311 0.076191 -0.0209647 0.760207 0.5 +-0.020238 0.0938075 -0.0335417 0.523891 0.5 +0.0438286 0.0611702 -0.00330591 0.786477 0.5 +0.0449793 0.061326 -0.0034541 0.827182 0.5 +0.0460928 0.061454 -0.00359733 0.475498 0.476263 +0.0471561 0.0614873 -0.00363177 0.478727 0.472959 +0.0482689 0.0616107 -0.00376704 0.615759 0.5 +0.00816432 0.0904541 -0.0318561 0.617065 0.5 +0.0073001 0.0907939 -0.0322622 0.595293 0.5 +0.00639772 0.0911374 -0.0325899 0.730094 0.5 +-0.0125993 0.0922824 -0.0359459 0.642142 0.5 +0.0134275 0.117615 -0.0147491 0.485412 0.5 +-0.00149609 0.0912323 -0.0347548 0.739161 0.5 +-0.0221188 0.100222 -0.0241961 0.749831 0.5 +0.0416942 0.0655359 -0.00371801 0.354107 0.5 +0.0422139 0.06433 -0.00247442 0.372346 0.5 +0.0430174 0.0637781 -0.0018983 0.560992 0.5 +0.043967 0.0636126 -0.00172463 0.574434 0.454226 +-0.0111161 0.125335 -0.00680126 0.381842 0.5 +0.047721 0.0729559 0.00883547 0.786496 0.5 +0.00165238 0.0932332 -0.0327923 0.53251 0.5 +-0.00422597 0.10111 -0.0231367 0.880664 0.5 +0.0367496 0.0931371 -0.012555 0.695917 0.5 +0.032634 0.0954843 -0.0150589 0.704244 0.5 +0.0268942 0.0988154 -0.0185978 0.696052 0.5 +0.0234322 0.100371 -0.0202365 0.608479 0.5 +0.0439094 0.0623682 -0.0025277 0.767818 0.5 +-0.00645816 0.122156 -0.0114796 0.839724 0.5 +-0.00749956 0.121159 -0.0124082 0.819293 0.5 +0.0217031 0.104101 -0.0182402 0.469512 0.480579 +0.0255053 0.103245 -0.0173339 0.621201 0.465883 +0.00274784 0.0953419 -0.0309592 0.806639 0.5 +0.0306065 0.111866 -0.00856301 0.56052 0.5 +0.0083446 0.116042 -0.0170347 0.533312 0.476009 +-0.0190349 0.0930706 -0.0347914 0.460681 0.480467 +-0.0201767 0.0929008 -0.0346271 0.419125 0.475333 +-0.010101 0.102023 -0.0240718 0.535839 0.5 +-0.0365871 0.119162 -0.0120374 0.648684 0.5 +-0.0325387 0.118791 -0.011658 0.675283 0.5 +-0.00364386 0.0901332 -0.0356262 0.76103 0.5 +-0.0123378 0.123047 -0.00831897 0.607765 0.5 +-0.00661675 0.0976221 -0.0294208 0.62298 0.5 +-0.0133438 0.11201 -0.0186315 0.866183 0.5 +-0.0524922 0.0384865 -0.0115467 0.472047 0.5 +0.0516874 0.0662489 -0.000355134 0.546117 0.5 +-0.0141183 0.115602 -0.0164489 0.643942 0.5 +0.0186953 0.0943115 -0.0238444 0.806958 0.5 +0.03545 0.105907 -0.00815474 0.532545 0.5 +0.0162665 0.119939 -0.0112703 0.496505 0.5 +0.0199074 0.11877 -0.0100039 0.47434 0.5 +-0.0272643 0.118767 -0.0116611 0.675247 0.5 +0.0177903 0.112808 -0.0155711 0.516264 0.467883 +0.0156574 0.0925729 -0.0260099 0.532806 0.426885 +-0.0275896 0.0398384 -0.0294326 0.669009 0.5 +-0.00151782 0.111398 -0.0200294 0.683581 0.5 +0.0163086 0.108997 -0.0174538 0.59011 0.5 +0.0159998 0.123366 -0.00698095 0.764468 0.390504 +-0.00563259 0.0974901 -0.0292726 0.662931 0.5 +-0.00444148 0.0916785 -0.0352643 0.696051 0.434695 +-0.00453349 0.0975685 -0.029357 0.697315 0.5 +-0.0237033 0.091176 -0.0348871 0.486522 0.5 +-0.0302701 0.0365155 -0.0302567 0.419116 0.5 +-0.0273178 0.113609 -0.0162558 0.639192 0.5 +-0.0163998 0.119263 -0.0123023 0.684432 0.310823 +-0.0630713 0.173863 -0.0616798 0.406238 0.5 +-0.038215 0.0471675 -0.018189 0.353674 0.5 +0.00323101 0.120377 -0.0136716 0.797596 0.5 +-0.041943 0.114992 -0.0156494 0.694932 0.5 +0.00413437 0.124074 -0.00964261 0.687926 0.5 +-0.0149576 0.0897382 -0.0373658 0.650627 0.5 +-0.0239408 0.0886576 -0.0363455 0.454072 0.467569 +-0.0227541 0.0889021 -0.0365754 0.603014 0.5 +0.0151613 0.0863718 -0.029541 0.697577 0.5 +-0.0554697 0.0345193 -0.0117205 0.132813 0.5 +-0.00350831 0.0975151 -0.0292875 0.704372 0.5 +0.0227707 0.10612 -0.0163977 0.67801 0.5 +-0.0309617 0.044825 -0.0281993 0.847734 0.5 +-0.0418025 0.1163 -0.0150397 0.730588 0.5 +-0.0285904 0.110146 -0.0186081 0.833386 0.5 +-0.00443456 0.111901 -0.0205597 0.618028 0.466374 +0.0197485 0.105413 -0.017636 0.861415 0.5 +-0.00855639 0.121127 -0.0123669 0.792276 0.5 +-0.0322022 0.0465812 -0.0258568 0.500041 0.5 +-0.0333511 0.0463754 -0.0256604 0.543431 0.5 +-0.0022961 0.120938 -0.0122094 0.827231 0.5 +0.0338763 0.0978118 -0.0135516 0.749307 0.5 +-0.0385489 0.119476 -0.0123722 0.65827 0.5 +-0.0386191 0.118326 -0.013151 0.631818 0.465692 +-0.0616548 0.140062 -0.00630976 0.57634 0.5 +-0.0607657 0.139716 -0.00595313 0.620762 0.5 +-0.0598293 0.139488 -0.00569497 0.612771 0.463633 +-0.058864 0.139321 -0.00549203 0.646288 0.463637 +-0.0579608 0.139021 -0.00516612 0.648963 0.5 +-0.0570823 0.138706 -0.0047975 0.670601 0.5 +-0.0562826 0.138192 -0.0042334 0.677642 0.5 +-0.05553 0.137483 -0.00349047 0.704881 0.5 +-0.0548238 0.136818 -0.00273484 0.736853 0.5 +-0.0540045 0.13652 -0.00234857 0.739432 0.5 +-0.0531099 0.136165 -0.00197183 0.678259 0.5 +-0.0522733 0.13577 -0.00153662 0.63413 0.5 +-0.0514739 0.135214 -0.000924577 0.60754 0.409123 +-0.0506815 0.134691 -0.000340536 0.589733 0.5 +-0.0499313 0.134148 0.000258943 0.54661 0.5 +-0.0492298 0.13342 0.00108021 0.404488 0.449153 +-0.0485925 0.132707 0.00186362 0.39599 0.454053 +-0.047856 0.132056 0.00259359 0.373538 0.464954 +-0.0470839 0.131413 0.00333034 0.464383 0.470749 +-0.0463678 0.13079 0.00400616 0.460344 0.5 +-0.00861199 0.118019 -0.01506 0.642591 0.5 +0.0261658 0.0809584 -0.0239333 0.75757 0.5 +0.0269298 0.0804165 -0.0233375 0.749987 0.5 +0.0276968 0.0797349 -0.0226793 0.746527 0.5 +0.0481264 0.060275 -0.00442661 0.653468 0.5 +0.0470549 0.0602552 -0.00440662 0.643749 0.5 +0.0459848 0.0602104 -0.00435135 0.485046 0.5 +0.0448746 0.0601039 -0.00424277 0.843473 0.5 +0.0437641 0.0599949 -0.00412714 0.832713 0.5 +0.0426589 0.0598822 -0.00401987 0.514443 0.456779 +-0.0536497 0.0382495 -0.0113033 0.355139 0.5 +0.000709469 0.125628 -0.00726116 0.614679 0.5 +-0.0174184 0.0961382 -0.0299203 0.429642 0.5 +0.0405643 0.0599899 -0.00408877 0.421251 0.5 +0.0416146 0.0598915 -0.00407392 0.456539 0.5 +-0.00967767 0.118026 -0.0150602 0.617713 0.5 +0.0523234 0.0724358 0.00729932 0.83687 0.5 +0.0114372 0.12283 -0.0103617 0.70648 0.5 +0.013368 0.122467 -0.00997636 0.590857 0.5 +-0.0110119 0.122536 -0.00980812 0.6193 0.5 +-0.0122779 0.122169 -0.00937841 0.635399 0.5 +-0.00979508 0.122843 -0.0101629 0.677986 0.5 +-0.00750765 0.123161 -0.01054 0.571292 0.5 +-0.00635478 0.123294 -0.010702 0.566363 0.5 +-0.0100186 0.0981603 -0.0280043 0.859573 0.5 +-0.0603898 0.116109 -0.0126519 0.577628 0.5 +-0.0397839 0.0471068 -0.0160895 0.216769 0.5 +0.0142784 0.11622 -0.015243 0.52303 0.5 +-0.0202902 0.0906146 -0.0362948 0.582584 0.5 +-0.0129458 0.117871 -0.0148632 0.831258 0.5 +0.0417493 0.0611977 -0.0033567 0.53714 0.5 +0.0427869 0.0611675 -0.0033403 0.771437 0.5 +0.0128104 0.0891816 -0.030491 0.606524 0.5 +0.0118631 0.0894057 -0.0307263 0.608573 0.466351 +0.0169892 0.122251 -0.00777586 0.606887 0.47014 +0.00995573 0.0897855 -0.0311748 0.626688 0.464514 +0.00904636 0.090083 -0.0314826 0.618837 0.5 +-0.0302748 0.116055 -0.0148216 0.833008 0.5 +0.0304033 0.107421 -0.0117891 0.564721 0.430868 +-0.0115345 0.0922826 -0.0359317 0.645332 0.5 +-0.0629168 0.114269 -0.0126902 0.605773 0.5 +-0.0140104 0.117853 -0.0148385 0.809028 0.5 +-0.0508117 0.0354248 -0.0125858 0.327078 0.5 +-0.0270641 0.0376545 -0.0293745 0.461412 0.5 +0.0231651 0.0624431 -0.0251426 0.690366 0.5 +-0.0229201 0.115998 -0.0147881 0.827254 0.5 +-0.0218136 0.116051 -0.0148581 0.771983 0.5 +-0.0206698 0.116197 -0.0150314 0.722785 0.5 +-0.019536 0.116371 -0.0152209 0.714654 0.295676 +-0.00115741 0.0949656 -0.0326157 0.615413 0.465836 +-0.00020637 0.0947598 -0.0324026 0.622008 0.467072 +0.000769534 0.0946028 -0.0322154 0.879727 0.5 +0.00174762 0.0944417 -0.0320379 0.610391 0.5 +0.00273738 0.0943137 -0.0318997 0.897884 0.5 +0.00372222 0.0941665 -0.0317421 0.882954 0.5 +0.0047217 0.0940547 -0.0316305 0.647831 0.448454 +0.00569172 0.093878 -0.0314287 0.640705 0.5 +0.00660528 0.0935786 -0.0311099 0.509261 0.461888 +0.00749081 0.093253 -0.0307631 0.544835 0.5 +0.00836869 0.0928852 -0.0303774 0.547264 0.5 +0.0093177 0.0926652 -0.0301396 0.550091 0.445673 +0.0102735 0.0924657 -0.0299319 0.54741 0.449023 +0.00412979 0.113096 -0.0199676 0.71967 0.5 +-0.0172476 0.114664 -0.0174436 0.83939 0.5 +-0.026364 0.0359692 -0.029405 0.332492 0.5 +-0.0328486 0.0986298 -0.0228073 0.633442 0.5 +-0.0213227 0.0927441 -0.0344661 0.419686 0.5 +-0.0224559 0.092554 -0.0342812 0.413646 0.5 +-0.0210545 0.100222 -0.024166 0.776477 0.5 +-0.0183957 0.116542 -0.0154107 0.753451 0.5 +0.0126673 0.104052 -0.020179 0.881285 0.5 +-0.0110742 0.123419 -0.00875247 0.576799 0.5 +-0.00667005 0.0904165 -0.0359686 0.717248 0.5 +-0.00765334 0.0905691 -0.0361471 0.722691 0.5 +-0.0161934 0.116736 -0.0156361 0.831924 0.5 +0.0394434 0.0585828 -0.00486619 0.432584 0.5 +-0.0422677 0.111306 -0.0177858 0.839568 0.5 +0.0452209 0.0659646 -0.000116442 0.789064 0.5 +0.0354547 0.103863 -0.00997386 0.602315 0.5 +0.0338372 0.104851 -0.0110391 0.587821 0.406061 +0.0260543 0.116303 -0.00733098 0.518164 0.398042 +-0.0177227 0.119786 -0.0108098 0.701843 0.5 +-0.0202736 0.0966137 -0.0264451 0.477812 0.390297 +0.0239731 0.061977 -0.0246362 0.70763 0.5 +-0.0437744 0.116579 -0.0153348 0.694887 0.5 +-0.032345 0.0473443 -0.0245628 0.310417 0.5 +-0.015124 0.037267 -0.0266656 0.393356 0.5 +-0.00946746 0.0362215 -0.025425 0.284043 0.5 +-0.0139288 0.0883705 -0.0380287 0.687462 0.5 +-0.0150862 0.116786 -0.0157023 0.845182 0.5 +-0.0118972 0.116803 -0.015741 0.615301 0.5 +-0.0353912 0.0475494 -0.0206462 0.352376 0.30546 +0.0242032 0.0987613 -0.0205495 0.695578 0.5 +0.00882643 0.110931 -0.0195298 0.839479 0.5 +-0.00773224 0.109619 -0.0221011 0.630666 0.5 +0.0207016 0.113271 -0.0140876 0.52509 0.5 +0.0345802 0.103262 -0.0113359 0.595569 0.5 +-0.0205151 0.114503 -0.0172551 0.535155 0.5 +-0.0240368 0.11082 -0.0193477 0.801703 0.5 +0.024653 0.104647 -0.0168345 0.737106 0.405271 +0.0358581 0.0995241 -0.0113664 0.623946 0.5 +0.0269849 0.113053 -0.00983991 0.577474 0.417457 +0.0344847 0.0868408 -0.0179179 0.750053 0.5 +0.00658649 0.0945677 -0.0301242 0.491691 0.5 +0.0195371 0.122997 -0.00457304 0.574029 0.5 +-0.0215446 0.0942792 -0.0320343 0.332146 0.418407 +-0.0422106 0.112435 -0.0169649 0.589213 0.471105 +-0.0204271 0.0893191 -0.0369723 0.487687 0.486879 +0.05068 0.0673838 0.000483718 0.65253 0.5 +-0.0110454 0.113378 -0.0180964 0.833544 0.5 +0.033847 0.106899 -0.00922375 0.576994 0.432989 +-0.00248627 0.097432 -0.0292057 0.723093 0.5 +-0.0265042 0.106069 -0.02235 0.627736 0.5 +-0.0124244 0.108763 -0.0212047 0.79379 0.5 +-0.0434603 0.109995 -0.0184047 0.604075 0.5 +-0.0118501 0.11995 -0.013068 0.756856 0.5 +-0.00149557 0.0973426 -0.0290749 0.733066 0.5 +-0.0355869 0.116022 -0.0147547 0.818566 0.5 +0.0274527 0.103904 -0.0160338 0.629883 0.344104 +-0.0197167 0.103079 -0.0233045 0.656373 0.5 +0.0126767 0.102031 -0.0220157 0.856978 0.5 +-0.0126802 0.0961728 -0.031918 0.572848 0.5 +0.0319522 0.103353 -0.0134365 0.726206 0.5 +-0.0618764 0.138649 -0.0067701 0.657583 0.5 +-0.0610584 0.138406 -0.00654552 0.669163 0.5 +-0.00991099 0.115578 -0.0164445 0.884524 0.5 +-0.059075 0.137911 -0.00597298 0.660615 0.5 +-0.0581769 0.137607 -0.00562722 0.661568 0.5 +-0.057332 0.137224 -0.00518105 0.667008 0.5 +-0.0566099 0.136533 -0.00462162 0.68206 0.5 +-0.0557698 0.136063 -0.00393718 0.726298 0.5 +-0.0549779 0.135599 -0.00339213 0.719656 0.5 +-0.0540681 0.135339 -0.00310003 0.68868 0.314307 +-0.0531399 0.13506 -0.0028018 0.655558 0.407099 +-0.0523163 0.134709 -0.00240246 0.662758 0.5 +-0.0515105 0.13416 -0.00180112 0.603519 0.5 +-0.0507291 0.133637 -0.00121966 0.575662 0.5 +-0.04996 0.133052 -0.000571002 0.545448 0.5 +-0.0492462 0.132382 0.000177088 0.495351 0.5 +-0.0485603 0.131756 0.000870882 0.383129 0.461532 +-0.0477652 0.131125 0.00158524 0.443615 0.5 +-0.0470088 0.130577 0.00217989 0.436117 0.5 +-0.046283 0.129949 0.00285861 0.455181 0.5 +-0.0411191 0.111396 -0.0179091 0.603171 0.466517 +0.0211822 0.0909362 -0.0242734 0.666624 0.5 +0.0279315 0.0813321 -0.0222629 0.74464 0.5 +0.0284604 0.079188 -0.0220838 0.758077 0.5 +0.0292759 0.0787271 -0.0215887 0.750658 0.5 +-0.0282259 0.115945 -0.0147131 0.607918 0.5 +0.0112963 0.123527 -0.00913288 0.7296 0.396721 +0.00724714 0.123914 -0.00950504 0.746761 0.5 +-0.0191994 0.0907344 -0.0364225 0.595056 0.466822 +0.0548584 0.0611516 -0.00113589 0.574305 0.5 +0.00622241 0.123988 -0.00957575 0.580276 0.5 +-0.00543271 0.0918052 -0.0353894 0.669661 0.5 +0.0204818 0.0854612 -0.0266087 0.743033 0.5 +-0.0208111 0.118967 -0.0119295 0.794935 0.5 +0.00224905 0.118538 -0.0156887 0.759994 0.5 +0.0474345 0.0682488 0.00159582 0.585595 0.5 +-0.0299927 0.0436118 -0.0290457 0.646893 0.5 +0.033292 0.0856433 -0.0187503 0.7469 0.5 +0.0485378 0.0682762 0.00156381 0.603234 0.5 +0.0496382 0.068363 0.00147832 0.62419 0.5 +-0.00364871 0.0982082 -0.0280452 0.670465 0.344781 +-0.0245144 0.0945317 -0.028309 0.299219 0.5 +-0.0238067 0.0899629 -0.0356649 0.548382 0.5 +-0.0225227 0.0903335 -0.0360154 0.434911 0.473611 +-0.0213902 0.0905176 -0.0361974 0.593494 0.5 +-0.00232624 0.124886 -0.00844394 0.50235 0.47603 +0.0101685 0.124401 -0.00806495 0.560825 0.479396 +0.00514071 0.12498 -0.00862525 0.711167 0.5 +-0.0313926 0.112895 -0.0174931 0.646188 0.5 +0.018711 0.100467 -0.0223545 0.566512 0.5 +0.00655622 0.121628 -0.0130526 0.657798 0.5 +0.00961895 0.12141 -0.0128393 0.684849 0.5 +-0.0183958 0.0360837 -0.0274195 0.243529 0.461583 +0.0222264 0.09191 -0.0233017 0.627398 0.478002 +0.015055 0.123588 -0.00721903 0.74609 0.398056 +-0.0283175 0.0963396 -0.0241496 0.839261 0.5 +-0.027235 0.0964545 -0.0242996 0.51192 0.5 +-0.0259964 0.0967524 -0.0245741 0.641523 0.5 +-0.0248989 0.0968475 -0.0246804 0.671589 0.5 +-0.02384 0.0968692 -0.0247025 0.622478 0.5 +-0.0227746 0.0968676 -0.024693 0.585665 0.5 +-0.0200728 0.100101 -0.0240875 0.773208 0.5 +-0.0216758 0.0969718 -0.024798 0.571152 0.5 +-0.0205392 0.0971418 -0.0249761 0.541039 0.5 +0.00176163 0.130465 0.00157228 0.811909 0.5 +0.00286437 0.130486 0.00148286 0.822825 0.5 +0.00388853 0.130454 0.00153712 0.829733 0.5 +0.00495057 0.130435 0.00152594 0.836014 0.5 +0.00597686 0.130404 0.00157669 0.853447 0.5 +-0.0193476 0.0973552 -0.0251961 0.519941 0.5 +-0.0181652 0.097581 -0.0254283 0.501254 0.5 +-0.0170028 0.0977503 -0.0256286 0.46919 0.433421 +-0.015856 0.0980295 -0.0258983 0.442774 0.5 +-0.0147843 0.0981951 -0.0260468 0.442333 0.455855 +-0.0136152 0.0982979 -0.0261721 0.438042 0.445614 +-0.0272212 0.114809 -0.0155223 0.637744 0.5 +0.0239484 0.0901184 -0.0234122 0.657793 0.5 +-0.0143101 0.113201 -0.0178955 0.65492 0.5 +0.00340822 0.117733 -0.0168392 0.832763 0.5 +-0.0498739 0.120141 -0.01301 0.574978 0.478829 +0.0217161 0.119158 -0.00841047 0.59118 0.5 +-0.00056724 0.0909565 -0.0345037 0.599166 0.5 +0.0112159 0.0922395 -0.029689 0.527246 0.5 +0.01215 0.0919974 -0.0294248 0.535009 0.5 +-0.0162644 0.11453 -0.017303 0.632384 0.460684 +-0.0124346 0.0985527 -0.0264295 0.78102 0.5 +-0.0356487 0.0352259 -0.0310792 0.150269 0.5 +-0.0113381 0.0986434 -0.0265191 0.835118 0.5 +0.00517588 0.113065 -0.0197995 0.715911 0.5 +-0.0102337 0.0987343 -0.0266102 0.833519 0.5 +-0.0237309 0.092173 -0.0338912 0.406779 0.444684 +-0.0170398 0.124093 -0.00535053 0.513155 0.5 +-0.00425208 0.0941246 -0.0337645 0.623383 0.5 +0.0243112 0.0999667 -0.0198415 0.663221 0.5 +-0.00864132 0.0907031 -0.0362798 0.718828 0.5 +-0.0096598 0.0907753 -0.0363722 0.694166 0.5 +-0.010683 0.0908469 -0.0364652 0.704241 0.5 +-0.0117053 0.0909225 -0.0365538 0.70379 0.5 +-0.0585618 0.124728 -0.00774237 0.73752 0.5 +0.044724 0.0588042 -0.00496063 0.619893 0.5 +0.0346554 0.10439 -0.0105413 0.605389 0.5 +0.0187342 0.112585 -0.0153321 0.629287 0.462794 +-0.0427254 0.0358312 -0.0275925 0.113076 0.5 +-0.0261657 0.11885 -0.0117616 0.687394 0.321424 +-0.00913054 0.0987984 -0.026694 0.472484 0.449133 +-0.00806953 0.0988363 -0.0267114 0.515334 0.5 +-0.0544997 0.117303 -0.0139925 0.566546 0.5 +-0.0533518 0.117447 -0.0141574 0.575306 0.5 +-0.00701023 0.0988653 -0.0267279 0.564603 0.5 +0.000901863 0.122026 -0.0113896 0.568216 0.5 +-0.00594641 0.0989148 -0.0267499 0.62266 0.5 +-0.000472926 0.0972534 -0.0289903 0.738531 0.5 +0.0250818 0.0983923 -0.0201688 0.707196 0.5 +0.0135498 0.109816 -0.0183273 0.606352 0.479747 +-0.00484603 0.0989761 -0.0268273 0.674271 0.5 +-0.0690818 0.18144 -0.0564572 0.258945 0.419015 +-0.00385823 0.0988046 -0.0266644 0.659782 0.5 +0.0214753 0.11175 -0.0144217 0.569962 0.5 +-0.0262667 0.110544 -0.0190457 0.754971 0.5 +0.000515293 0.09714 -0.0288497 0.729271 0.5 +0.00149737 0.0969588 -0.0286791 0.711461 0.338504 +-0.0588552 0.0351368 -0.0102919 0.138552 0.5 +-0.00279591 0.0988433 -0.0266823 0.678516 0.5 +-0.0203692 0.094546 -0.032294 0.478365 0.5 +-0.047644 0.121343 -0.0122933 0.822298 0.5 +0.0506634 0.0663167 -0.000433246 0.653027 0.438674 +-0.0215596 0.0891328 -0.036783 0.621864 0.5 +-0.0109726 0.115573 -0.0164387 0.885212 0.5 +0.0330115 0.107346 -0.00970764 0.577613 0.436342 +0.0321567 0.107734 -0.010124 0.561512 0.5 +0.0346775 0.106404 -0.00868031 0.555278 0.5 +-0.000194321 0.121911 -0.011267 0.583468 0.460187 +-0.00177026 0.0987839 -0.0266092 0.665959 0.5 +0.0238471 0.107154 -0.0155051 0.727477 0.412085 +-0.0209519 0.121676 -0.0087885 0.461171 0.403399 +0.0252655 0.0864752 -0.0236184 0.749695 0.5 +-0.000747471 0.0987058 -0.0265343 0.670031 0.5 +0.0303577 0.105377 -0.0136057 0.647806 0.5 +0.0361287 0.085855 -0.0169039 0.76533 0.5 +0.0400974 0.0943736 -0.00783899 0.586273 0.5 +0.0393164 0.0948581 -0.00836399 0.579426 0.398093 +0.0311086 0.103751 -0.0138751 0.718065 0.5 +-0.0178575 0.122517 -0.00769635 0.545508 0.5 +-0.0115598 0.09531 -0.0330219 0.634727 0.5 +-0.00884754 0.115581 -0.0164541 0.870755 0.5 +-0.0469304 0.116649 -0.0154073 0.632394 0.5 +-0.0629114 0.115341 -0.0117985 0.570501 0.421608 +-0.0499193 0.118992 -0.0138138 0.853299 0.5 +-0.0576201 0.135609 -0.00546838 0.674822 0.5 +-0.0568117 0.135044 -0.00489316 0.703528 0.5 +-0.0559722 0.134715 -0.00446003 0.705202 0.5 +-0.0550791 0.134447 -0.00412579 0.693329 0.438583 +-0.0541367 0.13422 -0.00388726 0.669431 0.432164 +-0.0532128 0.133944 -0.00360453 0.641012 0.5 +-0.0523718 0.133555 -0.00317026 0.635511 0.5 +-0.051575 0.132941 -0.0025104 0.61079 0.5 +-0.050788 0.13247 -0.00197537 0.56516 0.5 +-0.0500202 0.131989 -0.0014354 0.495987 0.5 +-0.049291 0.131272 -0.000642386 0.455754 0.5 +-0.0485361 0.130681 1.6802e-05 0.44241 0.5 +-0.0477691 0.130137 0.000614804 0.446468 0.5 +-0.0470115 0.129603 0.00120357 0.439139 0.443974 +-0.0461097 0.129234 0.00159921 0.552184 0.5 +-0.0451771 0.128971 0.00184527 0.872597 0.5 +0.00023463 0.0985537 -0.0263753 0.668997 0.5 +0.00118569 0.0983354 -0.0261952 0.475252 0.326149 +0.00218868 0.098191 -0.0260404 0.506621 0.305182 +0.0271866 0.0819517 -0.0229154 0.748829 0.5 +0.0264267 0.0824949 -0.0235141 0.751284 0.5 +0.0256492 0.0831048 -0.024123 0.758925 0.5 +0.0248383 0.0835695 -0.0246296 0.748481 0.5 +0.0239781 0.084017 -0.0250643 0.748935 0.5 +0.0231411 0.0844685 -0.0255261 0.745044 0.5 +0.0222475 0.0847573 -0.0259093 0.743856 0.5 +0.0213669 0.0851498 -0.0262488 0.746154 0.5 +0.0196024 0.0858351 -0.0269873 0.73327 0.5 +0.0187338 0.0862153 -0.0273821 0.728607 0.5 +0.0179038 0.0866718 -0.0278625 0.719266 0.5 +0.0463736 0.0682111 0.00160519 0.581536 0.5 +0.0105421 0.118176 -0.0153416 0.54871 0.5 +0.00317805 0.0980649 -0.0258881 0.50563 0.327982 +-0.0157643 0.0353272 -0.0263783 0.17846 0.5 +0.00413641 0.0979047 -0.0256761 0.670219 0.5 +-0.0190093 0.100114 -0.02409 0.686406 0.5 +0.0408836 0.0614281 -0.00367417 0.45132 0.5 +0.0102589 0.100444 -0.0223447 0.588852 0.5 +0.031034 0.0964814 -0.0161287 0.72706 0.38427 +0.00516194 0.0978455 -0.0256065 0.712325 0.5 +-0.0179474 0.100123 -0.0240926 0.677176 0.5 +-0.0185092 0.127137 0.00354165 0.707764 0.5 +-0.0168818 0.100112 -0.0240537 0.693082 0.5 +-0.0161125 0.127667 0.00290411 0.694465 0.5 +-0.0149347 0.127911 0.00262222 0.703137 0.5 +-0.0137571 0.128142 0.00234571 0.697132 0.5 +-0.0125367 0.128434 0.00198737 0.707996 0.5 +-0.0113995 0.128605 0.00179072 0.72419 0.5 +-0.0102615 0.128766 0.00159795 0.728612 0.5 +-0.00902947 0.129018 0.00125187 0.722409 0.5 +-0.00789583 0.129197 0.00105287 0.744914 0.5 +-0.00680153 0.129324 0.00093339 0.759197 0.5 +-0.00565778 0.12946 0.000751082 0.759119 0.5 +-0.00451438 0.1296 0.000561158 0.765344 0.5 +-0.00341476 0.129699 0.000449344 0.780517 0.5 +-0.00231448 0.129778 0.000344647 0.786001 0.5 +-0.00121026 0.129846 0.000241032 0.793195 0.5 +-0.000107958 0.12991 0.000141982 0.800909 0.5 +0.000950727 0.129943 0.000110463 0.803708 0.5 +0.00205693 0.129985 1.8398e-05 0.811382 0.5 +0.00312017 0.129984 5.00643e-07 0.839326 0.5 +0.00414244 0.129952 4.9397e-05 0.838309 0.5 +0.00520505 0.129939 3.61829e-05 0.844708 0.5 +0.00623037 0.129867 0.000104943 0.849441 0.5 +0.00725591 0.129807 0.000165614 0.86092 0.5 +0.00824452 0.129671 0.000311795 0.876271 0.5 +0.00926262 0.129557 0.000393265 0.61961 0.5 +0.0102193 0.129407 0.000604352 0.624555 0.5 +0.0112062 0.129253 0.000760937 0.625406 0.5 +0.00613975 0.0976727 -0.0254362 0.686248 0.5 +0.00712802 0.0975509 -0.0252935 0.711899 0.5 +0.00806894 0.0972917 -0.0250353 0.731493 0.5 +0.00905498 0.0971664 -0.0248901 0.753534 0.5 +0.0442629 0.0672699 0.000591455 0.441408 0.5 +0.010042 0.0970288 -0.0247384 0.76677 0.5 +0.0286264 0.0638437 -0.020406 0.764524 0.5 +-0.0427898 0.116428 -0.015168 0.710327 0.5 +0.0157473 0.0947545 -0.0243195 0.748112 0.5 +0.0188415 0.121733 -0.00718615 0.613343 0.5 +0.0130281 0.0916311 -0.029044 0.545267 0.5 +0.0139221 0.0913152 -0.0287052 0.577019 0.5 +0.00251855 0.096887 -0.0286022 0.714664 0.5 +-0.0369639 0.0346855 -0.0305537 0.115091 0.5 +0.0334736 0.0940135 -0.0155006 0.677729 0.5 +-0.00425848 0.0961384 -0.0318255 0.787367 0.5 +0.0282492 0.102359 -0.0164093 0.677781 0.5 +0.0189212 0.0875932 -0.0268145 0.723627 0.5 +-0.0343564 0.043282 -0.028737 0.5519 0.5 +-0.0135985 0.108507 -0.0209218 0.820177 0.5 +0.0277597 0.0984362 -0.0181936 0.703887 0.384395 +0.0334725 0.0950337 -0.0145821 0.688395 0.5 +0.0383601 0.0921445 -0.0115002 0.683265 0.5 +-0.0153553 0.112218 -0.0188504 0.671158 0.5 +-0.0127292 0.0909963 -0.036642 0.673373 0.5 +-0.0137194 0.091107 -0.0367438 0.643839 0.5 +0.0458379 0.0588925 -0.00503856 0.643274 0.5 +0.0469104 0.0589185 -0.00506663 0.684539 0.5 +0.0479414 0.0588591 -0.00500215 0.707429 0.5 +0.000924532 0.100829 -0.0227814 0.900044 0.5 +-0.036643 0.118048 -0.0128637 0.615758 0.5 +0.0110282 0.0968851 -0.0245853 0.784756 0.313824 +0.0278568 0.0643129 -0.0209613 0.780518 0.5 +0.0197906 0.106497 -0.0168156 0.517673 0.5 +-0.0159391 0.0999021 -0.023843 0.698382 0.5 +-0.0109132 0.103533 -0.0236899 0.657007 0.5 +0.0321886 0.108821 -0.00928902 0.555121 0.5 +0.0268148 0.0976356 -0.019356 0.674367 0.5 +-0.0455367 0.111121 -0.0175743 0.662909 0.5 +-0.069981 0.180634 -0.0574865 0.246005 0.5 +-0.068804 0.18096 -0.0579804 0.283975 0.390855 +-0.0590849 0.0644137 0.0318252 0.451111 0.5 +0.0120082 0.0967361 -0.024421 0.80515 0.5 +0.0130231 0.0965172 -0.0241956 0.505862 0.441283 +0.0177346 0.123618 -0.0052308 0.552624 0.5 +0.00096833 0.121103 -0.0124156 0.769375 0.5 +-0.0506063 0.0369029 -0.0119734 0.327743 0.5 +-0.0528683 0.0367334 -0.0118941 0.243826 0.410328 +-0.0546435 0.116042 -0.0146857 0.455921 0.476716 +-0.0149615 0.0883672 -0.0380383 0.687121 0.5 +-0.0413386 0.121239 -0.0122322 0.601537 0.5 +0.0325508 0.115423 -0.000329209 0.521143 0.5 +-0.0321931 0.123411 -0.0044713 0.62467 0.5 +0.0162777 0.117973 -0.0131407 0.508698 0.5 +0.0218218 0.116393 -0.0114503 0.490811 0.5 +-0.0358361 0.11045 -0.0189078 0.686834 0.5 +-0.0145896 0.101524 -0.0235873 0.691909 0.5 +-0.033458 0.0353739 -0.0310204 0.198821 0.5 +-0.0345638 0.113971 -0.0166195 0.87923 0.5 +0.0368805 0.101462 -0.00941022 0.634318 0.44791 +0.00429457 0.122356 -0.0118056 0.629568 0.5 +0.00350354 0.0967589 -0.0284524 0.693566 0.344012 +-0.020574 0.115387 -0.0161841 0.734711 0.5 +-0.0239808 0.0936155 -0.0313592 0.326316 0.424252 +0.0408829 0.0937805 -0.00720194 0.572594 0.5 +0.029367 0.1045 -0.0146741 0.649263 0.5 +0.0302694 0.104198 -0.014346 0.683529 0.5 +0.0202805 0.12337 -0.00295598 0.589066 0.454641 +0.0535789 0.0658041 0.000119664 0.487614 0.5 +-0.00774122 0.115628 -0.0165086 0.850404 0.5 +-0.0480268 0.116533 -0.0152488 0.624533 0.5 +-0.0616004 0.115786 -0.012288 0.571345 0.5 +-0.0510158 0.118895 -0.0136999 0.819854 0.5 +-0.0578751 0.134121 -0.00585274 0.681677 0.5 +-0.0570055 0.133804 -0.00545801 0.68228 0.5 +-0.0561028 0.133503 -0.00512832 0.682909 0.5 +-0.0551811 0.133216 -0.00483226 0.675945 0.5 +-0.054238 0.13299 -0.00459005 0.65869 0.5 +-0.0533273 0.132699 -0.00427378 0.635422 0.5 +-0.0524826 0.132311 -0.00383544 0.623438 0.5 +-0.0516987 0.131736 -0.00321408 0.593479 0.5 +-0.0509379 0.131197 -0.00260501 0.540662 0.5 +-0.0501411 0.130626 -0.00198394 0.467177 0.5 +-0.0493632 0.1301 -0.00139208 0.528369 0.5 +-0.0485551 0.129676 -0.000935313 0.514061 0.5 +-0.0477832 0.129154 -0.000397631 0.389857 0.5 +-0.0468263 0.128888 -6.3255e-05 0.478298 0.442316 +-0.0458642 0.128671 0.00011454 0.489638 0.475783 +-0.0448731 0.128505 0.000263047 0.741363 0.5 +-0.0438752 0.128361 0.000408951 0.801652 0.5 +-0.0428482 0.128274 0.00047704 0.856171 0.5 +0.0139014 0.0962996 -0.0239693 0.53022 0.475257 +0.0305321 0.081181 -0.0200863 0.741963 0.5 +-0.0149561 0.0997734 -0.0237179 0.683637 0.5 +0.0302841 0.11623 -0.00325108 0.63195 0.5 +-0.0329956 0.122915 -0.00595413 0.627999 0.425989 +-0.0338857 0.12324 -0.00632922 0.475278 0.5 +-0.0138967 0.099791 -0.0237429 0.654974 0.5 +-0.0365883 0.0485443 -0.0138981 0.108685 0.112657 +-0.0482812 0.115062 -0.0157267 0.681999 0.5 +-0.010796 0.120869 -0.0120713 0.760328 0.5 +0.0158804 0.124131 -0.00578699 0.714708 0.5 +0.0148643 0.0961115 -0.0237665 0.734914 0.5 +0.0170669 0.0871276 -0.028336 0.703403 0.5 +0.0162564 0.0875946 -0.0288434 0.693064 0.5 +0.0154065 0.0880419 -0.0292971 0.676763 0.5 +0.0145599 0.088488 -0.0297413 0.640823 0.5 +0.0137018 0.0888713 -0.0301465 0.601993 0.5 +0.0485408 0.0662379 -0.000364329 0.646743 0.5 +-0.017323 0.112508 -0.01916 0.658125 0.45559 +0.0158504 0.0959717 -0.0236278 0.776782 0.5 +-0.0217254 0.126122 0.00269746 0.721221 0.5 +-0.0205455 0.126353 0.00242085 0.717866 0.5 +-0.0193661 0.126578 0.00214409 0.717491 0.5 +-0.0181782 0.126773 0.00187925 0.712312 0.5 +-0.0170034 0.127025 0.0015954 0.692684 0.5 +-0.0158277 0.127263 0.00131837 0.691426 0.5 +-0.0146006 0.127548 0.000963555 0.698421 0.5 +-0.0134774 0.127753 0.000758007 0.702669 0.5 +-0.0122454 0.128019 0.000407111 0.7079 0.5 +-0.0110606 0.128229 0.000136123 0.719464 0.5 +-0.00992638 0.128404 -5.81123e-05 0.714685 0.5 +-0.00874133 0.128614 -0.000328304 0.72817 0.5 +-0.00760577 0.128788 -0.000526473 0.735254 0.5 +-0.0064667 0.128955 -0.000718006 0.757485 0.5 +-0.00536465 0.129031 -0.000823415 0.778769 0.5 +-0.00426203 0.129106 -0.000929037 0.78275 0.5 +-0.00316211 0.129199 -0.00103699 0.546415 0.5 +-0.00205946 0.129266 -0.00113907 0.561853 0.5 +-0.000994561 0.129288 -0.0011666 0.574788 0.5 +6.3531e-05 0.129314 -0.00119744 0.574275 0.5 +0.00116984 0.129366 -0.00128907 0.581406 0.5 +0.00223085 0.129379 -0.00131325 0.588772 0.5 +0.00329475 0.129383 -0.00133175 0.593749 0.5 +0.00435827 0.129372 -0.0013469 0.593227 0.5 +0.00542168 0.12935 -0.00135496 0.606665 0.5 +0.00644358 0.129282 -0.00129108 0.617309 0.5 +0.0074706 0.129229 -0.00123166 0.627378 0.463142 +0.00845802 0.129083 -0.00108013 0.884474 0.5 +0.00944326 0.128939 -0.000930002 0.882909 0.5 +0.0104303 0.128801 -0.000781749 0.621478 0.47217 +0.0114155 0.128646 -0.000626619 0.631718 0.5 +0.0123659 0.128443 -0.000397752 0.645662 0.5 +0.0133357 0.128238 -0.000223601 0.653611 0.5 +0.0142482 0.127965 9.03059e-05 0.504308 0.475733 +0.01519 0.127729 0.000331934 0.513819 0.476835 +0.0168648 0.0958851 -0.0235234 0.78347 0.5 +0.0178585 0.0957539 -0.0234025 0.804925 0.5 +0.018845 0.0956057 -0.0232473 0.81744 0.5 +0.0198113 0.0954368 -0.0230239 0.82127 0.5 +-0.0476607 0.120291 -0.0131944 0.851647 0.5 +0.018169 0.108481 -0.0169141 0.582154 0.5 +-0.0187755 0.107692 -0.0220397 0.667579 0.5 +-0.0178239 0.107521 -0.0218927 0.703821 0.5 +0.0147945 0.0909396 -0.0283095 0.614278 0.5 +0.0156162 0.0904755 -0.0278196 0.65176 0.5 +0.0164575 0.0900289 -0.0273543 0.630161 0.5 +-0.0273656 0.0360131 -0.0296152 0.354022 0.5 +-0.0251564 0.113713 -0.0163747 0.832877 0.5 +0.00329134 0.119473 -0.0147093 0.779007 0.5 +-0.023274 0.106158 -0.0224283 0.679804 0.5 +0.0207029 0.0950845 -0.0226908 0.652249 0.5 +0.00451899 0.0966593 -0.0283637 0.700348 0.5 +0.00547344 0.0964656 -0.0281399 0.716664 0.5 +-0.0356538 0.120932 -0.00987931 0.55059 0.5 +0.0260546 0.112325 -0.0110571 0.58498 0.4381 +0.00361131 0.0929227 -0.0324448 0.670895 0.5 +0.0110249 0.0988999 -0.0227192 0.878447 0.5 +-0.0148238 0.091051 -0.0367095 0.616122 0.5 +-0.0158845 0.0910066 -0.0366604 0.622322 0.5 +-0.016949 0.0909918 -0.0366612 0.625045 0.466305 +0.0161005 0.115637 -0.0146217 0.514618 0.5 +0.0189716 0.115037 -0.0139804 0.472689 0.5 +0.0180337 0.115273 -0.0142355 0.560201 0.5 +0.00492538 0.111581 -0.020193 0.768833 0.5 +0.021637 0.0948486 -0.0224193 0.67163 0.469223 +-0.0643144 0.0445281 -0.000908113 0.38012 0.415653 +0.0225812 0.0946281 -0.0221802 0.654713 0.474998 +0.0235231 0.0943993 -0.0219282 0.634086 0.5 +-0.0579369 0.119806 -0.0105246 0.541453 0.479544 +0.00641604 0.0962346 -0.0278978 0.512956 0.5 +0.0244608 0.0941673 -0.021671 0.633187 0.5 +-0.0388567 0.0985732 -0.0220835 0.724864 0.5 +0.025374 0.0938744 -0.0213667 0.645403 0.5 +0.0262833 0.0935743 -0.0210485 0.659705 0.5 +-0.0127135 0.100022 -0.0239701 0.542277 0.5 +0.0271589 0.093209 -0.0206672 0.656699 0.367881 +0.0280428 0.0928381 -0.0202889 0.683178 0.5 +-0.0576422 0.035457 -0.0105994 0.14328 0.5 +-0.0517405 0.0367791 -0.0118947 0.295755 0.5 +0.0151848 0.115917 -0.0149184 0.52521 0.5 +-0.0455924 0.119193 -0.014062 0.880699 0.5 +-0.0445311 0.119183 -0.0140568 0.883461 0.5 +0.0125549 0.119968 -0.0132874 0.464897 0.475326 +-0.0347118 0.121713 -0.00868145 0.451774 0.5 +0.0172187 0.117738 -0.0128881 0.470554 0.416611 +0.0158369 0.105055 -0.0192576 0.850582 0.5 +0.0250684 0.0912521 -0.0226015 0.63967 0.5 +-0.0273763 0.112504 -0.0170987 0.884166 0.5 +-0.0347751 0.123588 -0.00668109 0.43935 0.5 +0.0285181 0.0968051 -0.0184722 0.689304 0.5 +0.0361358 0.102075 -0.0100705 0.630061 0.5 +-0.0346988 0.120729 -0.0096591 0.58376 0.5 +0.0288984 0.0924492 -0.0198656 0.713076 0.5 +-0.0008153 0.10869 -0.0211159 0.747538 0.5 +-0.02276 0.093942 -0.0316991 0.325611 0.375721 +0.0275305 0.105074 -0.0152759 0.616822 0.457029 +0.0284509 0.104793 -0.0149826 0.622021 0.5 +0.0248931 0.108132 -0.0145556 0.59766 0.404133 +0.0239203 0.108291 -0.0147313 0.502941 0.469113 +-0.0545694 0.124267 -0.00721739 0.861901 0.5 +-0.0101883 0.0876449 -0.0371912 0.776575 0.5 +-0.0491724 0.116402 -0.0151155 0.65527 0.5 +-0.00337868 0.117905 -0.0149619 0.840785 0.5 +-0.0522091 0.118697 -0.0134778 0.809968 0.5 +-0.0580841 0.132712 -0.00634758 0.679475 0.5 +-0.0571873 0.13241 -0.00599886 0.67961 0.5 +-0.056282 0.132113 -0.00567386 0.687735 0.5 +-0.0553709 0.131821 -0.00535733 0.665368 0.449683 +-0.0544374 0.131586 -0.00508481 0.661002 0.452045 +-0.053528 0.131291 -0.0047694 0.622958 0.5 +-0.0526724 0.130856 -0.00431281 0.598331 0.5 +-0.0518913 0.130385 -0.00375074 0.560621 0.5 +-0.0511061 0.129858 -0.00316533 0.507751 0.5 +-0.0502789 0.129408 -0.00267456 0.472116 0.5 +-0.0494252 0.12902 -0.00225187 0.502177 0.5 +-0.0485794 0.128753 -0.00187037 0.456767 0.418067 +-0.0475118 0.128596 -0.00180437 0.549554 0.5 +-0.046566 0.128368 -0.00156221 0.503877 0.5 +-0.0455856 0.128182 -0.00140207 0.581889 0.5 +-0.0445637 0.128075 -0.00132731 0.632175 0.5 +-0.0435747 0.127942 -0.00117905 0.698016 0.5 +-0.0425517 0.127843 -0.00110505 0.763101 0.5 +-0.0415307 0.127763 -0.00103989 0.583413 0.5 +-0.0405102 0.127658 -0.000961794 0.607944 0.5 +-0.0394932 0.127549 -0.000886358 0.875685 0.5 +0.0297749 0.0920783 -0.0194766 0.729743 0.5 +0.0137354 0.10206 -0.0220537 0.876143 0.5 +0.0147972 0.102084 -0.0220848 0.63606 0.5 +-0.0132881 0.113144 -0.01784 0.626933 0.5 +0.00434751 0.121547 -0.0129175 0.594281 0.5 +-0.048763 0.120209 -0.0131018 0.842472 0.5 +0.0226361 0.118891 -0.00814073 0.589904 0.5 +-0.00225576 0.119004 -0.0141489 0.800758 0.5 +0.0190773 0.108184 -0.0165978 0.577556 0.5 +0.0139163 0.0953242 -0.0249235 0.515716 0.5 +0.03067 0.0917687 -0.019137 0.736202 0.5 +0.0315757 0.0914687 -0.0188156 0.74153 0.5 +0.032458 0.0910982 -0.0184345 0.735609 0.5 +0.0332508 0.0906175 -0.0178979 0.754562 0.379748 +0.00284082 0.0994342 -0.0233056 0.843067 0.5 +0.0340749 0.0901032 -0.0173771 0.73175 0.5 +-0.0225249 0.125571 0.0012278 0.728693 0.5 +-0.0213885 0.125739 0.00103732 0.726734 0.5 +-0.0202523 0.125914 0.000840735 0.720057 0.5 +-0.0190696 0.126125 0.000571573 0.715918 0.5 +-0.0179367 0.12631 0.000372783 0.495476 0.5 +-0.0167051 0.126576 2.44266e-05 0.486507 0.5 +-0.0155312 0.126827 -0.00025822 0.676582 0.5 +-0.0143122 0.127128 -0.000614565 0.681438 0.5 +-0.0131413 0.127389 -0.000900164 0.699708 0.5 +-0.0119496 0.127575 -0.00116297 0.70677 0.5 +-0.0107692 0.1278 -0.0014358 0.713125 0.5 +-0.0095857 0.128017 -0.00170998 0.507892 0.5 +-0.00844614 0.128164 -0.00189615 0.731154 0.5 +-0.00730789 0.12834 -0.00208974 0.733138 0.5 +-0.00617179 0.128513 -0.00228639 0.756099 0.5 +-0.00507021 0.128586 -0.00238902 0.785376 0.5 +-0.00396533 0.128634 -0.00247998 0.810818 0.5 +-0.00290701 0.128667 -0.00250924 0.593161 0.456908 +-0.00184307 0.128669 -0.00252946 0.606661 0.5 +-0.000820873 0.128641 -0.00248283 0.603629 0.5 +0.000242427 0.128645 -0.00250259 0.5837 0.5 +0.00130397 0.128647 -0.00252095 0.603842 0.5 +0.00236523 0.128663 -0.00254763 0.581459 0.5 +0.00347146 0.128699 -0.00262952 0.577637 0.5 +0.00453562 0.128718 -0.00265628 0.585475 0.464526 +0.00559724 0.128727 -0.00267638 0.59883 0.466243 +0.00662363 0.128671 -0.00261559 0.614461 0.5 +0.00764804 0.128583 -0.00254334 0.624965 0.5 +0.00863241 0.128438 -0.00238911 0.623298 0.5 +0.00964716 0.128306 -0.00229994 0.883407 0.5 +0.0106046 0.128135 -0.0020835 0.641405 0.5 +0.0115865 0.127977 -0.0019288 0.666362 0.5 +0.0125362 0.127772 -0.00169738 0.673385 0.5 +0.013481 0.127543 -0.00145794 0.661883 0.456201 +0.0144241 0.127312 -0.00121761 0.64832 0.5 +0.0153381 0.127037 -0.000904662 0.511862 0.5 +0.0162787 0.126801 -0.0006607 0.529389 0.466437 +0.0171824 0.126495 -0.000336309 0.524055 0.5 +0.0180905 0.1262 -1.26099e-05 0.537538 0.5 +0.0189956 0.125897 0.000310264 0.565534 0.4633 +0.0349262 0.0896582 -0.0169179 0.733695 0.5 +0.0357614 0.089262 -0.0164786 0.754616 0.5 +0.036558 0.0887304 -0.0159156 0.742137 0.5 +0.0216927 0.103078 -0.0191449 0.483468 0.475654 +-0.064123 0.113942 -0.0123233 0.596936 0.5 +-0.0184671 0.10319 -0.0232847 0.680191 0.5 +0.000833787 0.106762 -0.0210825 0.784697 0.5 +0.0173609 0.0897252 -0.0270298 0.666815 0.5 +0.0182378 0.0893522 -0.0266421 0.669344 0.5 +0.0297429 0.112241 -0.00897067 0.541671 0.414239 +0.0185485 0.111232 -0.0158588 0.637002 0.5 +0.0373159 0.0880544 -0.0152271 0.714935 0.5 +0.0304209 0.0460912 -0.00653037 0.542403 0.5 +0.0251595 0.0995713 -0.0194056 0.698622 0.5 +0.0285895 0.0979793 -0.017709 0.719134 0.5 +0.0343206 0.094597 -0.0141158 0.718566 0.387559 +-0.0186858 0.118957 -0.0119398 0.7236 0.303822 +-0.0208502 0.120881 -0.00994613 0.674091 0.5 +-0.0521458 0.121812 -0.0107191 0.525204 0.466868 +-0.0208303 0.119929 -0.0109428 0.739124 0.5 +-0.0557051 0.12209 -0.00891575 0.794697 0.5 +-0.0180555 0.0909221 -0.0366017 0.611848 0.5 +-0.0250035 0.0896 -0.0352857 0.493378 0.5 +-0.0486801 0.12235 -0.0113455 0.763066 0.5 +-0.0522074 0.122732 -0.00965468 0.725482 0.5 +-0.0579878 0.0414274 -0.0083271 0.607726 0.436978 +-0.0592051 0.0411249 -0.00803844 0.606408 0.5 +-0.00834994 0.0943471 -0.0340215 0.772221 0.5 +-0.0312226 0.0367355 -0.0304453 0.341679 0.5 +0.0389262 0.103315 -0.00332456 0.589245 0.458755 +-0.0411413 0.0364371 -0.0278037 0.14416 0.280182 +0.00735928 0.0960033 -0.0276522 0.533767 0.479274 +0.0296818 0.0815643 -0.0205093 0.750669 0.5 +0.00465961 0.0959425 -0.0295932 0.54667 0.5 +0.0108274 0.0362708 -0.0225637 0.284612 0.42836 +-0.0652676 0.179645 -0.0602668 0.318406 0.419446 +-0.0643001 0.179479 -0.0601392 0.285196 0.445464 +-0.0115711 0.100192 -0.0241483 0.589142 0.5 +0.0436089 0.0680569 -0.000247417 0.401928 0.5 +-0.0494703 0.0370271 -0.0120635 0.31222 0.5 +-0.036233 0.0469115 -0.0220883 0.328615 0.5 +-0.0595808 0.0380953 -0.00917151 0.350985 0.5 +-0.000110081 0.106984 -0.0213197 0.625114 0.5 +0.0260337 0.0639191 -0.0225668 0.749014 0.5 +0.0343613 0.111866 -0.00251995 0.526862 0.5 +0.0190672 0.117213 -0.0123322 0.47272 0.5 +-0.00991212 0.111561 -0.0201766 0.772168 0.5 +-0.0240588 0.111793 -0.0183639 0.782315 0.5 +-0.0283604 0.112635 -0.0172343 0.640331 0.5 +0.00642086 0.116423 -0.0174422 0.511504 0.5 +0.0317917 0.0949031 -0.0164462 0.692882 0.5 +0.015852 0.106086 -0.0183494 0.627134 0.5 +-0.0221856 0.122325 -0.00745001 0.429012 0.5 +0.0444641 0.0686626 0.00115575 0.486311 0.5 +0.0256926 0.105619 -0.0158649 0.602982 0.5 +0.0247455 0.105845 -0.0161092 0.743046 0.5 +0.0266028 0.105322 -0.0155495 0.618978 0.5 +0.0267717 0.107644 -0.0140409 0.634638 0.5 +0.025846 0.107916 -0.0143268 0.619879 0.5 +0.00569987 0.0949071 -0.0304911 0.805916 0.5 +0.0183426 0.0906063 -0.0259275 0.642632 0.459059 +0.023348 0.0930459 -0.0224955 0.820399 0.5 +-0.050194 0.116459 -0.0151638 0.664634 0.5 +-0.00223434 0.118045 -0.0151238 0.773284 0.5 +-0.0533008 0.118582 -0.0133417 0.818276 0.5 +-0.0250193 0.118984 -0.0119284 0.71311 0.315527 +-0.0262613 0.119664 -0.0106051 0.674179 0.5 +0.0162217 0.120841 -0.0102336 0.602344 0.5 +0.0391665 0.0916193 -0.0109453 0.668147 0.5 +-0.0328255 0.12127 -0.00820532 0.576701 0.5 +-0.0539191 0.129665 -0.00510771 0.587162 0.460326 +-0.052947 0.1293 -0.00466978 0.56164 0.5 +-0.0521339 0.128852 -0.00413976 0.561496 0.5 +-0.0512593 0.128575 -0.00377835 0.491152 0.5 +-0.0503624 0.128323 -0.00347306 0.553441 0.444863 +-0.0493523 0.128134 -0.0033313 0.645893 0.5 +-0.0483231 0.128062 -0.00327126 0.550161 0.5 +-0.0472913 0.128011 -0.00322004 0.902598 0.5 +-0.0462686 0.12794 -0.00315273 0.880987 0.5 +-0.0453217 0.127718 -0.00291517 0.869677 0.5 +-0.0442655 0.127665 -0.00291939 0.531526 0.5 +-0.0432796 0.127517 -0.00276726 0.597229 0.5 +-0.0422556 0.127428 -0.00269381 0.670325 0.5 +-0.0412715 0.127285 -0.00254236 0.523886 0.473726 +-0.0402517 0.127178 -0.0024642 0.566667 0.475619 +-0.0392699 0.127033 -0.00231305 0.884878 0.5 +-0.0382901 0.126893 -0.00216373 0.897201 0.5 +-0.0542618 0.0348321 -0.0120282 0 0 +-0.0213445 0.0916844 -0.035421 0.51767 0.462956 +0.0504568 0.0627892 -0.00292241 0.537503 0.5 +0.0111209 0.0908234 -0.0303895 0.59499 0.451501 +-0.0179551 0.0921164 -0.0358084 0.54409 0.5 +-0.0104704 0.100279 -0.0242341 0.626627 0.5 +-0.00317446 0.0951663 -0.0328247 0.847106 0.5 +0.0235092 0.118527 -0.00774096 0.61049 0.5 +0.0450165 0.0718833 0.00186291 0.429381 0.5 +-0.0289733 0.124361 0.000543811 0.815473 0.5 +-0.0279025 0.124426 0.000511349 0.782315 0.5 +-0.0268485 0.124528 0.000469072 0.76379 0.5 +0.0456137 0.0708816 0.00289794 0.445577 0.5 +0.0463647 0.0703187 0.00350637 0.576913 0.5 +0.0474231 0.0702463 0.00356979 0.523465 0.5 +-0.0222312 0.125137 -0.000350139 0.767746 0.5 +-0.0210951 0.12531 -0.000542597 0.745838 0.5 +-0.0199595 0.125484 -0.000738697 0.729964 0.5 +-0.0187649 0.125661 -0.000995534 0.507488 0.477782 +-0.0176337 0.125847 -0.00119502 0.713958 0.5 +-0.0165061 0.126041 -0.00139683 0.503483 0.460435 +-0.0152817 0.126335 -0.00175389 0.479464 0.5 +-0.0140554 0.126614 -0.00210251 0.651992 0.5 +-0.0128819 0.126866 -0.00238505 0.678153 0.5 +-0.0116556 0.127143 -0.00273206 0.653262 0.5 +-0.0104754 0.127368 -0.00300647 0.683355 0.5 +-0.00933623 0.127529 -0.00319765 0.705314 0.5 +-0.00815144 0.127733 -0.00346398 0.48673 0.5 +-0.00705924 0.127865 -0.00358478 0.506837 0.5 +-0.00591514 0.12799 -0.00376372 0.541475 0.5 +-0.00481374 0.128076 -0.00386981 0.562309 0.5 +-0.00375231 0.128091 -0.0038931 0.593773 0.5 +-0.00268972 0.128069 -0.00389854 0.630667 0.5 +-0.00166671 0.12799 -0.00382866 0.64934 0.5 +-0.000643212 0.127926 -0.00376413 0.639044 0.5 +0.000379078 0.127909 -0.00372478 0.624596 0.5 +0.00144018 0.127924 -0.00374837 0.6086 0.5 +0.00254476 0.127971 -0.00383507 0.601938 0.5 +0.00364827 0.128043 -0.00393793 0.601849 0.5 +0.00470729 0.128083 -0.0039713 0.610116 0.5 +0.0057745 0.128094 -0.00399317 0.632991 0.5 +0.00679871 0.128004 -0.00391746 0.64326 0.5 +0.00782186 0.127915 -0.00384433 0.657528 0.5 +0.00880995 0.127795 -0.00370552 0.643683 0.457161 +0.00979123 0.127622 -0.00353983 0.651074 0.458509 +0.0107457 0.127435 -0.00331768 0.892873 0.5 +0.0117235 0.127254 -0.00315056 0.672404 0.5 +0.0126717 0.127043 -0.00291981 0.531426 0.5 +0.0136156 0.126814 -0.00267762 0.529878 0.5 +0.0145549 0.126574 -0.00243153 0.534011 0.472086 +0.0154742 0.126309 -0.00212525 0.538145 0.5 +0.0164098 0.126062 -0.00187701 0.539385 0.455313 +0.0173223 0.125777 -0.00156033 0.535611 0.5 +0.0182274 0.125477 -0.00123802 0.553465 0.5 +0.0191385 0.125192 -0.000918824 0.557142 0.452602 +0.0200495 0.124902 -0.000599563 0.55171 0.5 +0.0209425 0.124573 -0.000263497 0.579038 0.469588 +0.021809 0.1242 0.000142479 0.747424 0.5 +0.0484547 0.0702338 0.00359645 0.515984 0.5 +-0.0274342 0.111364 -0.0178958 0.870319 0.5 +-0.00940844 0.100291 -0.0242411 0.624826 0.5 +0.0222184 0.122028 -0.00352468 0.595279 0.5 +0.00208806 0.113117 -0.0199282 0.684019 0.5 +0.0120479 0.124912 -0.00663019 0.550748 0.5 +0.0191089 0.0889764 -0.0262512 0.690194 0.5 +0.0199779 0.0885978 -0.0258535 0.712098 0.5 +0.0208421 0.0882147 -0.0254487 0.713827 0.5 +0.0559048 0.0631077 0.000905369 0.716166 0.5 +0.0551275 0.0637038 0.000299703 0.665833 0.5 +0.054323 0.064171 -0.000208879 0.614749 0.5 +0.0534729 0.0645627 -0.000631784 0.516313 0.461969 +0.0375648 0.0926236 -0.0120119 0.689728 0.395761 +0.0044338 0.117686 -0.0167913 0.82758 0.5 +-0.0239399 0.118058 -0.0129545 0.835394 0.5 +-0.0444709 0.120321 -0.0132547 0.873241 0.5 +-0.0498484 0.121182 -0.0121 0.561124 0.5 +0.00834665 0.0958673 -0.0275066 0.530066 0.5 +0.0260213 0.111246 -0.0119 0.567399 0.45289 +-0.0386362 0.117281 -0.0140679 0.874108 0.5 +0.0495547 0.0702574 0.0035522 0.563263 0.5 +-0.0321381 0.0435397 -0.0289857 0.627514 0.461203 +-0.0530949 0.0350628 -0.012244 0.145892 0.5 +0.0392717 0.0938049 -0.00924672 0.580758 0.5 +-0.04015 0.0473434 -0.014266 0.272827 0.375308 +0.0286979 0.0806527 -0.0216026 0.754775 0.5 +-0.0514799 0.0384723 -0.0115832 0.489273 0.5 +-0.0388092 0.0372561 -0.0289196 0.203921 0.5 +0.00929494 0.0956507 -0.0272714 0.773263 0.5 +0.0337894 0.103744 -0.0118635 0.597988 0.475707 +0.0506567 0.0703381 0.00346635 0.583881 0.5 +-0.0654437 0.17819 -0.0606312 0.291507 0.444689 +-0.0643923 0.178295 -0.0607754 0.378579 0.5 +-0.0633934 0.178218 -0.0607118 0.388203 0.5 +-0.0625478 0.177823 -0.0603383 0.318991 0.404503 +0.0516782 0.0702939 0.00352664 0.618806 0.5 +0.0526995 0.0702438 0.0035897 0.583511 0.5 +0.0537172 0.0701657 0.00367339 0.58528 0.5 +0.0375184 0.0915609 -0.0128884 0.696514 0.5 +-0.0285693 0.0399846 -0.0296196 0.643102 0.5 +0.026836 0.0634537 -0.0220606 0.762285 0.5 +0.0175747 0.0931801 -0.024649 0.603585 0.482522 +-0.0110657 0.112343 -0.0190003 0.762643 0.5 +0.0450408 0.0625178 -0.00265494 0.826525 0.5 +-0.0293428 0.112771 -0.0173776 0.653988 0.5 +-0.0303664 0.112853 -0.0174686 0.655137 0.5 +0.0343018 0.0936044 -0.01506 0.667747 0.5 +0.0329891 0.10525 -0.0114692 0.658571 0.5 +-0.0442438 0.113637 -0.0162318 0.692265 0.5 +0.0312687 0.106096 -0.0123707 0.643996 0.5 +0.0303748 0.106409 -0.0127112 0.620637 0.5 +0.0294673 0.106706 -0.01303 0.616642 0.5 +0.0285796 0.107031 -0.0133812 0.599167 0.5 +0.0276786 0.107363 -0.0137282 0.605042 0.5 +0.0205346 0.0937418 -0.0232686 0.662246 0.5 +-0.00851004 0.0960786 -0.0317903 0.66453 0.5 +0.0130461 0.106823 -0.0191157 0.540495 0.472427 +0.014824 0.0950266 -0.0246047 0.548572 0.5 +-0.0512523 0.116429 -0.0151143 0.625601 0.5 +-0.00109974 0.118227 -0.0153259 0.754794 0.5 +-0.0544418 0.118427 -0.0131672 0.549631 0.479057 +-0.0239631 0.11903 -0.0119726 0.737849 0.5 +-0.0273659 0.119585 -0.010507 0.66986 0.5 +0.0171004 0.120495 -0.00987579 0.493028 0.371125 +0.00293844 0.100629 -0.0225769 0.65316 0.5 +-0.0318098 0.121167 -0.00811427 0.505095 0.5 +-0.0541413 0.128093 -0.005327 0.547861 0.475819 +-0.0532414 0.127751 -0.00500041 0.537131 0.5 +-0.0522937 0.12758 -0.00475935 0.657096 0.5 +-0.0512719 0.127504 -0.00467957 0.806751 0.5 +-0.0502577 0.127427 -0.00458948 0.686884 0.34929 +-0.0492021 0.127407 -0.00458885 0.581351 0.399227 +-0.0481783 0.127343 -0.00452632 0.519141 0.439125 +-0.0470742 0.127422 -0.00463291 0.875404 0.5 +-0.0460097 0.127427 -0.00464706 0.88874 0.5 +-0.0450254 0.127281 -0.00449582 0.885975 0.5 +-0.0440047 0.127209 -0.00443148 0.887018 0.5 +-0.0429797 0.127137 -0.00436425 0.885703 0.5 +-0.041999 0.126936 -0.00419358 0.591902 0.5 +-0.0410173 0.12678 -0.00403845 0.653541 0.5 +-0.040033 0.126629 -0.00388698 0.715631 0.5 +-0.0390181 0.126516 -0.0038056 0.785037 0.5 +-0.038039 0.126372 -0.00365101 0.606527 0.5 +-0.0371 0.126156 -0.00341777 0.907536 0.5 +0.0547017 0.0700348 0.00381661 0.399473 0.481114 +0.0556724 0.0698728 0.00398853 0.41414 0.5 +-0.0343794 0.125292 -0.00246071 0.645661 0.5 +-0.033472 0.124985 -0.00213286 0.64993 0.5 +-0.0325683 0.124672 -0.00180773 0.916531 0.5 +-0.0469365 0.0404762 -0.0121149 0.233794 0.323824 +-0.00218115 0.0950603 -0.0327048 0.847079 0.5 +-0.0426157 0.035917 -0.0271302 0.125463 0.5 +-0.0286768 0.123948 -0.00103929 0.835858 0.5 +-0.0275662 0.123979 -0.00112939 0.795242 0.5 +-0.0265008 0.124041 -0.00116405 0.743194 0.5 +-0.0253603 0.124214 -0.00135534 0.709724 0.5 +-0.0242249 0.124407 -0.00155437 0.712069 0.5 +-0.0230963 0.124618 -0.00175855 0.734432 0.5 +-0.0219613 0.124807 -0.00195706 0.745102 0.5 +-0.0208115 0.124915 -0.0021319 0.765288 0.5 +-0.0196629 0.125034 -0.00230889 0.785287 0.5 +-0.0185161 0.125172 -0.00248935 0.551811 0.5 +-0.0173769 0.125333 -0.00267782 0.532376 0.5 +-0.0162407 0.125507 -0.00287714 0.492657 0.5 +-0.0150651 0.12575 -0.00315467 0.454886 0.4536 +-0.0138482 0.126055 -0.00351425 0.445695 0.442436 +-0.0126798 0.126321 -0.00380105 0.441248 0.5 +-0.0114519 0.126605 -0.00415103 0.418421 0.5 +-0.0102692 0.126825 -0.00441849 0.438214 0.5 +-0.00912603 0.126983 -0.00460672 0.620455 0.5 +-0.00794631 0.127212 -0.00487976 0.440374 0.457046 +-0.00680856 0.127356 -0.00506622 0.487284 0.444715 +-0.0057025 0.12744 -0.00517306 0.539757 0.448851 +-0.00463984 0.12746 -0.00519523 0.529136 0.463308 +-0.00357593 0.127459 -0.0052112 0.570598 0.44326 +-0.0025157 0.127417 -0.00520554 0.637544 0.442242 +-0.00152895 0.1273 -0.00507098 0.661462 0.438948 +-0.000544127 0.127196 -0.00494172 0.655262 0.5 +0.00047843 0.12713 -0.00487855 0.625571 0.5 +0.00157852 0.12719 -0.00497022 0.600337 0.5 +0.00268229 0.12726 -0.0050686 0.590514 0.5 +0.00377856 0.127353 -0.00517835 0.588998 0.437428 +0.0048864 0.127407 -0.00526463 0.608014 0.438233 +0.00602626 0.127371 -0.00517179 0.651997 0.423817 +0.00697022 0.12731 -0.00520393 0.662835 0.5 +0.00795806 0.127195 -0.00506697 0.668671 0.5 +0.00897858 0.127106 -0.00499333 0.648109 0.5 +0.00993007 0.126906 -0.00476687 0.509987 0.5 +0.0109104 0.126748 -0.00460652 0.520045 0.5 +0.0118568 0.126524 -0.00436904 0.544286 0.475662 +0.0128031 0.126304 -0.00413421 0.566937 0.418924 +0.01375 0.126078 -0.00389468 0.548898 0.437474 +0.0146587 0.125796 -0.00358107 0.541586 0.5 +0.0155789 0.125536 -0.0032763 0.550359 0.5 +0.0165193 0.125294 -0.00303164 0.682268 0.5 +0.0174244 0.125027 -0.00283112 0.545833 0.465295 +0.0183651 0.124757 -0.00246117 0.562736 0.454988 +0.0192696 0.124452 -0.00213625 0.577566 0.5 +0.0201621 0.124133 -0.00175315 0.574102 0.5 +0.0210813 0.123852 -0.00148905 0.586331 0.5 +0.0219588 0.123501 -0.00109075 0.574664 0.5 +0.0228232 0.123119 -0.000681491 0.596049 0.476718 +0.0565638 0.0695327 0.00435815 0.434406 0.5 +-0.0424235 0.12018 -0.013117 0.628094 0.5 +0.01482 0.0920349 -0.0274402 0.5866 0.5 +-0.0162822 0.113495 -0.0182068 0.628191 0.5 +-0.0186783 0.101771 -0.0238107 0.588576 0.5 +0.013766 0.105146 -0.0193832 0.876061 0.5 +0.0178388 0.104825 -0.0190099 0.843619 0.5 +-0.0220481 0.121595 -0.00868192 0.431497 0.5 +0.0216856 0.0878179 -0.0250022 0.69579 0.5 +0.0225502 0.0873848 -0.0245875 0.707551 0.5 +0.0234098 0.0871372 -0.0242525 0.672588 0.46381 +0.024363 0.0867852 -0.0239669 0.73354 0.430748 +0.0525721 0.0648669 -0.000960413 0.484792 0.452333 +0.0516025 0.0650498 -0.00116678 0.550887 0.5 +0.0282004 0.082909 -0.0218038 0.748139 0.5 +-0.0158711 0.0941172 -0.0338261 0.607866 0.5 +-0.0169313 0.0940904 -0.0338108 0.624295 0.5 +0.0245137 0.102392 -0.0184072 0.60991 0.408631 +0.0104513 0.122961 -0.0105071 0.716701 0.5 +0.0115755 0.104003 -0.020168 0.871955 0.5 +-0.0173075 0.11558 -0.0164072 0.848089 0.5 +-0.0110827 0.102149 -0.0241692 0.538515 0.5 +-0.00952503 0.0920885 -0.0357277 0.666999 0.5 +0.0555538 0.0665692 0.0013688 0.506197 0.461323 +0.0358549 0.0843357 -0.0172902 0.753869 0.5 +0.0102657 0.0954683 -0.0270889 0.785634 0.5 +0.0574071 0.0691343 0.00477569 0.462861 0.470488 +-0.054929 0.0378655 -0.0109689 0.336864 0.412541 +-0.0376206 0.0376543 -0.029358 0.23258 0.5 +0.0112253 0.0952809 -0.0268838 0.562717 0.471517 +0.0581533 0.0685799 0.00535861 0.387571 0.487033 +-0.00838403 0.100228 -0.0241757 0.625709 0.5 +-0.00023381 0.123831 -0.00932637 0.651807 0.5 +-0.0625552 0.176839 -0.0611671 0.36219 0.5 +-0.0413207 0.122297 -0.0113384 0.537502 0.5 +-0.0338561 0.0475081 -0.0226504 0.238887 0.356878 +0.00433485 0.120467 -0.0137766 0.583963 0.466339 +0.00920248 0.0914355 -0.0308607 0.581829 0.5 +0.0235849 0.102638 -0.0186769 0.560524 0.5 +-0.0304508 0.11875 -0.0116176 0.671869 0.347712 +0.0121697 0.0950562 -0.0266386 0.564443 0.5 +0.005339 0.0971934 -0.026912 0.685261 0.5 +-0.05672 0.0341106 -0.0113244 0.142889 0.5 +-0.0372926 0.0394674 -0.0291193 0.351216 0.5 +-0.0412638 0.110187 -0.018624 0.866246 0.5 +-0.0287174 0.0344722 -0.0298467 0.238416 0.5 +-0.0299338 0.0468967 -0.0261593 0.525775 0.256273 +-0.0242006 0.107431 -0.0217757 0.647447 0.5 +-0.042033 0.113762 -0.0163433 0.649561 0.5 +0.0196407 0.0940896 -0.0236062 0.643728 0.5 +0.00382851 0.0992997 -0.0231609 0.824766 0.5 +0.0382996 0.103126 -0.00513692 0.48314 0.489472 +0.0390337 0.102562 -0.00454148 0.553971 0.5 +0.039746 0.101828 -0.00373788 0.567336 0.457184 +-0.029008 0.0478606 -0.0250513 0.458635 0.5 +-0.0160251 0.0375717 -0.0270066 0.322774 0.5 +-0.0523102 0.116406 -0.0150785 0.612979 0.5 +4.86222e-05 0.11836 -0.0154829 0.756917 0.5 +-0.0556334 0.11822 -0.0129265 0.546861 0.5 +-0.0228582 0.119091 -0.0120569 0.800337 0.5 +-0.0284244 0.119569 -0.0104891 0.65565 0.5 +0.0179609 0.1201 -0.00942839 0.582678 0.5 +0.0362267 0.104294 -0.00842134 0.559438 0.5 +-0.030708 0.121227 -0.00820323 0.439496 0.5 +-0.0553259 0.126836 -0.00601308 0.517644 0.5 +-0.0543959 0.12661 -0.00573734 0.662817 0.5 +-0.0533766 0.126536 -0.00565695 0.915268 0.5 +-0.0523607 0.12647 -0.00557636 0.878388 0.5 +-0.0512663 0.12652 -0.00563382 0.775376 0.5 +-0.0502022 0.12654 -0.00566411 0.655332 0.5 +-0.0490636 0.126668 -0.00583208 0.563743 0.5 +-0.0480003 0.126688 -0.00585567 0.54321 0.5 +-0.0468988 0.126761 -0.00595632 0.877558 0.5 +-0.0457969 0.126831 -0.00605616 0.50656 0.5 +-0.0448105 0.126695 -0.00590468 0.923584 0.5 +-0.043786 0.126623 -0.00583839 0.901458 0.5 +-0.0427639 0.126553 -0.0057736 0.521999 0.5 +-0.0417806 0.126404 -0.00562318 0.909844 0.5 +-0.0407607 0.126285 -0.00553285 0.568585 0.5 +-0.0397817 0.126122 -0.00537397 0.658695 0.5 +-0.0388025 0.125966 -0.00521606 0.723567 0.5 +-0.0378236 0.125803 -0.00505851 0.795164 0.5 +-0.0368834 0.125578 -0.00482073 0.876957 0.5 +-0.0359493 0.125342 -0.00457539 0.88222 0.5 +-0.0350845 0.124972 -0.00417237 0.617723 0.5 +-0.0341992 0.124637 -0.00378015 0.65647 0.5 +-0.0332919 0.124337 -0.00345787 0.665238 0.460411 +-0.0323569 0.124066 -0.00320487 0.914258 0.5 +-0.0313957 0.12387 -0.00298136 0.913129 0.5 +0.00114443 0.118463 -0.015597 0.775513 0.5 +-0.00732189 0.100225 -0.0241674 0.669788 0.5 +-0.0283817 0.123518 -0.00261643 0.827759 0.5 +-0.027273 0.123571 -0.00271305 0.80899 0.5 +-0.0262078 0.123609 -0.00273748 0.550116 0.5 +-0.0250588 0.123734 -0.00291588 0.755207 0.5 +-0.023911 0.123885 -0.00309916 0.720073 0.5 +-0.0227771 0.124071 -0.00329832 0.694857 0.5 +-0.0216432 0.124246 -0.00349177 0.705503 0.5 +-0.0205096 0.124449 -0.00369667 0.741747 0.5 +-0.0194201 0.1246 -0.00382324 0.737012 0.5 +-0.0183192 0.124686 -0.00393431 0.532478 0.452962 +-0.017163 0.124753 -0.00408239 0.530639 0.443911 +-0.0160718 0.124871 -0.00420428 0.498969 0.5 +-0.0149468 0.125073 -0.0044168 0.456118 0.5 +-0.0137258 0.125368 -0.00476898 0.406251 0.5 +-0.0124544 0.125711 -0.00519106 0.399036 0.5 +-0.0112343 0.126014 -0.00554296 0.392593 0.446716 +-0.0100919 0.126182 -0.00573829 0.405535 0.455288 +-0.00891511 0.126415 -0.00600997 0.399051 0.5 +-0.00773495 0.12664 -0.00628182 0.438685 0.5 +-0.00658802 0.126776 -0.00645935 0.475836 0.5 +-0.00552934 0.126815 -0.00649473 0.511371 0.5 +-0.00446177 0.12682 -0.00651375 0.517164 0.5 +-0.00340282 0.12679 -0.00651364 0.572487 0.5 +-0.00241379 0.126666 -0.00637642 0.642219 0.5 +-0.00142937 0.126525 -0.00622577 0.67362 0.5 +-0.000408544 0.126448 -0.00615558 0.66639 0.5 +0.00061382 0.126415 -0.00611002 0.662037 0.5 +0.00171621 0.126464 -0.00619605 0.630672 0.5 +0.00281822 0.126541 -0.00629609 0.627876 0.5 +0.00391726 0.126651 -0.0064175 0.624255 0.5 +0.00502464 0.126695 -0.00649713 0.647693 0.5 +0.0060852 0.126695 -0.00651247 0.653373 0.5 +0.00710731 0.126603 -0.00643182 0.674042 0.5 +0.0080932 0.126458 -0.00628099 0.688973 0.5 +0.00907886 0.126317 -0.00613291 0.657988 0.5 +0.0100342 0.126121 -0.00591235 0.668458 0.436528 +0.0110096 0.125946 -0.00574203 0.695357 0.5 +0.0119572 0.125728 -0.00550935 0.544417 0.5 +0.0129045 0.125515 -0.00527553 0.569904 0.5 +0.0138217 0.125251 -0.00497301 0.559987 0.475294 +0.0147654 0.125019 -0.0047274 0.710154 0.5 +0.0157129 0.124796 -0.00448994 0.553866 0.423671 +0.0166807 0.124611 -0.00431903 0.541757 0.439776 +0.00739557 0.0347435 -0.0216037 0.278473 0.5 +0.00340018 0.0348289 -0.0229504 0.322372 0.5 +0.00241269 0.0347278 -0.0230504 0.238474 0.5 +0.00140058 0.0348342 -0.0234319 0.237582 0.5 +0.000403091 0.0348316 -0.0232847 0.251603 0.5 +-0.000582144 0.0347482 -0.0236897 0.194059 0.5 +-0.00157869 0.0347285 -0.0237137 0.189218 0.5 +-0.00258809 0.0348892 -0.0237423 0.29642 0.5 +-0.00357674 0.0347286 -0.0239915 0.219191 0.5 +-0.00458022 0.0347745 -0.0240516 0.217426 0.5 +-0.00557634 0.0347311 -0.0241073 0.202681 0.5 +-0.00657564 0.0346831 -0.0243352 0 0 +-0.00757151 0.0346922 -0.0244599 0.183917 0.5 +-0.0398457 0.0985451 -0.0219087 0.734395 0.5 +-0.04085 0.0985381 -0.021696 0.745481 0.5 +-0.0418518 0.098529 -0.0215916 0.775217 0.5 +-0.0428489 0.09852 -0.021578 0.789338 0.5 +-0.0135754 0.0347863 -0.0255909 0.175367 0.5 +-0.0145783 0.0348246 -0.0259715 0.184949 0.5 +-0.0155786 0.0348181 -0.0259692 0.181171 0.5 +-0.0438434 0.0985095 -0.0215595 0.803266 0.5 +-0.0448438 0.0985036 -0.0215544 0.83963 0.5 +-0.0458425 0.0985138 -0.0217256 0.843346 0.5 +-0.0468406 0.0985145 -0.021833 0.826967 0.5 +-0.0224906 0.034851 -0.0281799 0.260782 0.5 +-0.023525 0.0349287 -0.0283944 0.275308 0.5 +-0.0245413 0.0349941 -0.0287041 0.287495 0.5 +-0.0255122 0.0349295 -0.0287387 0.255944 0.5 +-0.0478408 0.098515 -0.0219326 0.820767 0.5 +0.0142608 0.0359816 -0.0203372 0.466171 0.5 +0.0133536 0.0359529 -0.0210721 0.392851 0.5 +0.0122525 0.036039 -0.0217262 0.403029 0.5 +-0.0488433 0.098515 -0.0220378 0.822764 0.5 +0.0103848 0.03606 -0.0224393 0.589365 0.5 +0.0094116 0.0360543 -0.0227822 0.378117 0.5 +0.00840449 0.0360838 -0.0229864 0.369104 0.5 +0.00741372 0.0360842 -0.0231635 0.435702 0.5 +0.00641089 0.036109 -0.0234066 0.337353 0.5 +0.00541958 0.0361021 -0.0235849 0.3469 0.5 +0.00441886 0.0361314 -0.0238164 0.305 0.426749 +0.00343169 0.0361267 -0.0240106 0.380935 0.405273 +0.00242016 0.0361514 -0.024222 0.361099 0.5 +0.00142185 0.0361564 -0.0243567 0.344657 0.5 +0.000420458 0.036172 -0.0244623 0.326966 0.5 +-0.000579953 0.0361804 -0.0245898 0.314174 0.5 +-0.00158335 0.0361983 -0.0246741 0.304408 0.5 +-0.00258285 0.0361873 -0.0247048 0.348204 0.5 +-0.00358089 0.036197 -0.0248262 0.336847 0.5 +-0.00457986 0.0361758 -0.0248798 0.316788 0.5 +-0.00558231 0.0361988 -0.024956 0.308199 0.5 +-0.00657967 0.0361819 -0.0249969 0.287483 0.5 +-0.00758227 0.0362053 -0.0250795 0.280192 0.5 +-0.00858725 0.0362397 -0.025275 0.308608 0.5 +-0.0498385 0.0970763 -0.0221981 0.767966 0.5 +-0.0508473 0.0970748 -0.0222124 0.738789 0.5 +-0.0518518 0.0970732 -0.0222063 0.706831 0.5 +-0.0125979 0.0362885 -0.0258846 0.319746 0.5 +-0.0136021 0.0363077 -0.0261392 0.316273 0.5 +-0.0145953 0.0363242 -0.0264317 0.283631 0.5 +-0.0498454 0.098516 -0.0220736 0.791235 0.5 +-0.050852 0.0985174 -0.022094 0.746025 0.5 +-0.0518585 0.0985114 -0.0220738 0.69362 0.5 +-0.0185965 0.0364224 -0.0275796 0.283028 0.5 +-0.0196119 0.0364667 -0.0278852 0.360343 0.5 +-0.0206175 0.0364922 -0.0281092 0.381052 0.5 +-0.0215925 0.0364837 -0.0283556 0.372804 0.5 +-0.0225905 0.0365035 -0.0286129 0.363221 0.5 +-0.0235952 0.03653 -0.0288249 0.391376 0.5 +-0.0245975 0.0365494 -0.0290831 0.392666 0.5 +-0.0255895 0.0365546 -0.0292581 0.351927 0.5 +-0.0528758 0.0985097 -0.0219976 0.495892 0.5 +-0.0672648 0.0680031 0.0322561 0.504662 0.5 +-0.0131917 0.169758 -0.0239616 0.564751 0.5 +-0.0181742 0.169737 -0.0210312 0.722788 0.5 +-0.0271732 0.169704 -0.0183584 0.519798 0.5 +-0.0538836 0.0984784 -0.021806 0.468135 0.45348 +-0.0528408 0.0970645 -0.0221327 0.659087 0.343956 +-0.0548752 0.0984577 -0.0213117 0.449896 0.5 +-0.0201579 0.171232 -0.0211109 0.750071 0.5 +-0.0271732 0.171194 -0.0185934 0.471197 0.5 +-0.0321688 0.171168 -0.015915 0.453402 0.5 +-0.055877 0.0984248 -0.0207921 0.439647 0.5 +-0.0569101 0.0984236 -0.0203516 0.459895 0.452391 +-0.0818617 0.117704 -0.00327392 0.580413 0.5 +-0.0578948 0.0983776 -0.0200563 0.450037 0.474425 +-0.058907 0.0983413 -0.0195805 0.55608 0.5 +-0.0598969 0.0982824 -0.0189251 0.526993 0.5 +-0.0191865 0.172705 -0.0222871 0.682828 0.5 +-0.058912 0.109738 -0.0167726 0.453307 0.455759 +-0.0635438 0.0341847 -0.00786744 0.18253 0 +-0.0480694 0.153165 -0.00566954 0.691758 0.5 +-0.0656496 0.0339611 -0.00733584 0.173312 0.5 +-0.0676468 0.0338307 -0.00583252 0.187639 0.5 +-0.0685146 0.033856 -0.00470573 0.204676 0.337077 +-0.0281451 0.166722 -0.0170726 0.774382 0.5 +-0.0301385 0.166718 -0.0165418 0.803302 0.5 +-0.0608693 0.0982413 -0.018491 0.447558 0.5 +0.0143906 0.0373653 -0.0212799 0.35451 0.5 +0.0134057 0.0374127 -0.0219366 0.38161 0.5 +0.0124253 0.0374345 -0.0223624 0.391935 0.5 +0.01142 0.0374719 -0.022733 0.499401 0.5 +0.0104112 0.0375138 -0.0230668 0.470502 0.5 +0.00942462 0.0375116 -0.02327 0.444589 0.5 +0.00841559 0.0375405 -0.0234702 0.427543 0.5 +0.00741716 0.0375454 -0.0236134 0.427871 0.5 +0.00641397 0.0375702 -0.0238447 0.404607 0.5 +0.00540963 0.0375924 -0.0240752 0.396767 0.5 +0.0044132 0.0376001 -0.0242202 0.470167 0.5 +0.00341059 0.0376223 -0.0244648 0.528042 0.5 +0.0024069 0.037633 -0.0245625 0.515359 0.5 +0.00141145 0.0376391 -0.024717 0.499347 0.5 +0.000412578 0.0376462 -0.0248548 0.485157 0.5 +-0.000588677 0.037658 -0.0249499 0.470893 0.5 +-0.00158954 0.0376715 -0.025054 0.486442 0.5 +-0.00258654 0.0376582 -0.0251248 0.505208 0.5 +-0.00358669 0.0376696 -0.025221 0.486475 0.5 +-0.00458896 0.0376652 -0.0252351 0.46412 0.5 +-0.00558664 0.0376733 -0.0253626 0.453531 0.5 +-0.00659114 0.03769 -0.0254352 0.444737 0.5 +-0.00758688 0.0376797 -0.0254717 0.431569 0.5 +-0.00858661 0.0376839 -0.0256139 0.428175 0.41122 +-0.00958914 0.0376967 -0.0257201 0.437521 0.408752 +-0.0105903 0.0377043 -0.0258398 0.411835 0.400152 +-0.0116048 0.0377441 -0.0259987 0.398619 0.393938 +-0.0125983 0.037741 -0.0261872 0.455664 0.408733 +-0.0136024 0.0377623 -0.0264268 0.440562 0.5 +-0.0146115 0.03779 -0.0266447 0.435872 0.5 +-0.0156084 0.0378086 -0.0269252 0.33228 0.5 +-0.0618416 0.098205 -0.0180486 0.44544 0.466101 +-0.0176179 0.0378672 -0.0275216 0.336393 0.5 +-0.0186131 0.0378854 -0.0277917 0.485078 0.5 +-0.0196147 0.0379102 -0.0280301 0.52935 0.5 +-0.0206136 0.0379294 -0.0283016 0.528348 0.400205 +-0.0215953 0.03793 -0.0285032 0.504724 0.398286 +-0.0226026 0.0379508 -0.0287016 0.530764 0.5 +-0.023601 0.0379574 -0.0288347 0.552661 0.5 +-0.024607 0.037979 -0.0290368 0.535152 0.5 +-0.0255993 0.037974 -0.029094 0.513191 0.5 +-0.0628508 0.0981808 -0.0176907 0.466629 0.5 +0.00310161 0.111606 -0.0202814 0.719194 0.5 +-0.0778811 0.12224 -0.00662917 0.424148 0.5 +-0.077868 0.12372 -0.00684832 0.386183 0.5 +-0.0638567 0.0981567 -0.0173229 0.493344 0.478246 +-0.0648891 0.0981501 -0.0170112 0.521532 0.47585 +-0.0658747 0.0981197 -0.0167177 0.502428 0.5 +-0.0668671 0.0980924 -0.0163226 0.483814 0.5 +-0.0678611 0.0980605 -0.0159397 0.499781 0.478548 +0.00614025 0.110185 -0.0202335 0.645586 0.468458 +-0.0350727 0.157773 -0.0116201 0.828995 0.5 +-0.0688327 0.09803 -0.0157395 0.527097 0.48334 +-0.0698503 0.0980241 -0.015524 0.637446 0.5 +-0.0708458 0.0980019 -0.0152545 0.462782 0.5 +-0.0718516 0.0979698 -0.0147575 0.438453 0.5 +-0.0538563 0.0970443 -0.0219059 0.502349 0.453905 +-0.0728362 0.0979301 -0.0143404 0.4383 0.473732 +-0.0152189 0.172708 -0.0246075 0.599954 0.5 +-0.0281556 0.17562 -0.0175208 0.514897 0.5 +-0.0251823 0.172681 -0.0196186 0.48587 0.398002 +-0.0441291 0.159145 -0.00944971 0.442388 0.5 +-0.047561 0.0361661 -0.0123414 0 0 +-0.0485578 0.0361757 -0.0124661 0.196671 0.5 +-0.073851 0.0979023 -0.0138506 0.415776 0.5 +-0.0748382 0.0978559 -0.0133191 0.494062 0.5 +0.00110427 0.111585 -0.0201254 0.699558 0.5 +0.00711096 0.111601 -0.019782 0.790532 0.5 +-0.0758657 0.097813 -0.01246 0.496135 0.5 +-0.033143 0.157873 -0.0118064 0.759356 0.5 +-0.023205 0.178608 -0.0204967 0.373943 0.474776 +-0.0508873 0.105589 -0.0194525 0.744922 0.5 +-0.0519018 0.105587 -0.0193502 0.729881 0.5 +-0.0659107 0.120913 -0.00886784 0.759803 0.5 +-0.0508873 0.109845 -0.0186279 0.734871 0.5 +-0.082909 0.123594 -0.00426589 0.495039 0.38922 +-0.0528954 0.105563 -0.0191967 0.555552 0.5 +-0.0619218 0.112503 -0.0143567 0.473193 0.487262 +-0.0635449 0.0356868 -0.00823988 0.270814 0.5 +-0.0645431 0.0356401 -0.00785526 0.29008 0.5 +-0.0655175 0.0356165 -0.00754656 0.294116 0.5 +-0.0665675 0.0355377 -0.00701232 0.158435 0.5 +-0.0675456 0.035487 -0.00647 0.319801 0.5 +-0.0685946 0.0353745 -0.00558788 0.180509 0.5 +-0.0695434 0.0352232 -0.00418951 0.0917694 0.5 +-0.0708319 0.0345819 -0.00103676 0.147151 0.5 +-0.0715318 0.0347543 -0.000134182 0.165615 0 +0.0244581 0.0366925 -0.000851561 0 0 +0.0234605 0.0367801 -0.00165856 0.113344 0.5 +0.0224551 0.0368363 -0.00219983 0 0 +-0.0491191 0.159098 -0.00622225 0.383273 0.45397 +-0.020138 0.166773 -0.018707 0.793954 0.5 +-0.0261276 0.166758 -0.01752 0.827453 0.5 +-0.0480744 0.151666 -0.00489643 0.760085 0.5 +-0.0295801 0.0368886 0.052851 0.466815 0.5 +-0.0728899 0.122329 -0.00823917 0.650573 0.5 +0.0144177 0.0388354 -0.0218485 0.553343 0.5 +0.0133897 0.0389058 -0.0222843 0.448488 0.467692 +0.0124104 0.0389053 -0.0225983 0.450046 0.5 +0.0114184 0.0389206 -0.0228692 0.572446 0.427994 +0.0104091 0.0389479 -0.0231008 0.54699 0.5 +0.00940878 0.0389595 -0.0232113 0.545598 0.5 +0.0084105 0.0389663 -0.0233493 0.544926 0.5 +0.00740689 0.0389878 -0.0235836 0.542661 0.5 +0.00640724 0.0390095 -0.0238414 0.550461 0.5 +0.0053978 0.0390279 -0.0240405 0.548789 0.5 +0.00440363 0.0390362 -0.0241943 0.563591 0.5 +0.00340212 0.0390598 -0.024445 0.629565 0.5 +0.00240772 0.0390703 -0.0246208 0.629811 0.5 +0.00140103 0.0390882 -0.0248121 0.606413 0.5 +0.000401309 0.0390966 -0.0249339 0.594454 0.5 +-0.000599084 0.0391028 -0.0250468 0.594367 0.5 +-0.00159763 0.0391157 -0.0252097 0.625609 0.5 +-0.00259587 0.0391262 -0.0253465 0.626795 0.5 +-0.00359535 0.0391334 -0.025473 0.614592 0.5 +-0.00459579 0.039143 -0.025596 0.603481 0.5 +-0.00559653 0.0391515 -0.0257085 0.585049 0.5 +-0.00659427 0.0391448 -0.0257394 0.571613 0.5 +-0.00759694 0.039172 -0.0259394 0.562841 0.5 +-0.00859398 0.0391639 -0.0259828 0.554863 0.5 +-0.00959872 0.0391743 -0.0260833 0.512763 0.5 +-0.0105966 0.0391805 -0.0262222 0.534032 0.5 +-0.0115998 0.0391898 -0.02633 0.521549 0.5 +-0.0126068 0.0392015 -0.0264338 0.579394 0.5 +-0.0136017 0.0392183 -0.0267222 0.582447 0.5 +-0.0145978 0.0392398 -0.0269855 0.410905 0.5 +-0.0156039 0.0392636 -0.0272219 0.434768 0.479041 +-0.0166283 0.0393036 -0.0275139 0.436064 0.479523 +-0.0175974 0.0393048 -0.0277532 0.559583 0.405842 +-0.0186192 0.0393436 -0.0280481 0.639291 0.5 +-0.0196031 0.0393462 -0.028238 0.690367 0.5 +-0.0206006 0.0393656 -0.0285093 0.675405 0.5 +-0.0216083 0.039391 -0.0287125 0.647765 0.5 +-0.0226105 0.0393974 -0.0288175 0.680526 0.5 +-0.0236049 0.0394052 -0.0289635 0.678971 0.5 +-0.0246065 0.0394112 -0.0290873 0.674778 0.5 +-0.0255986 0.0394109 -0.0291464 0.600289 0.5 +-0.0540996 0.154592 -0.00271527 0.406906 0.339546 +-0.0780673 0.0690482 0.0132523 0.712447 0.5 +-0.053898 0.105542 -0.0189379 0.682084 0.5 +-0.0709225 0.109376 -0.0106672 0.499156 0.485721 +-0.0306087 0.0394849 -0.0300968 0.590219 0.5 +-0.0316065 0.039499 -0.0303181 0.461121 0.5 +-0.0326038 0.039499 -0.0302708 0.525891 0.5 +-0.0336086 0.0394857 -0.0301589 0.485594 0.5 +-0.0708792 0.115031 -0.00817569 0.425481 0.444759 +-0.0639313 0.11526 -0.0113233 0.572937 0.5 +-0.0291365 0.165225 -0.016186 0.826304 0.5 +-0.0376133 0.0393512 -0.0290006 0.34007 0.5 +-0.038606 0.0392918 -0.0284798 0.306544 0.447497 +-0.0396087 0.0392284 -0.0278507 0.289695 0.5 +-0.0545309 0.0352136 0.0455493 0.735746 0.5 +-0.0548923 0.105518 -0.0186699 0.678065 0.5 +-0.0788715 0.122217 -0.0060966 0.417064 0.370231 +-0.0749763 0.136928 -0.00646616 0.508226 0.5 +-0.0659657 0.129697 -0.00887578 0.811065 0.5 +-0.0261859 0.172679 -0.0191085 0.474182 0.5 +-0.030101 0.160758 -0.0141091 0.865182 0.5 +-0.0475686 0.0376232 -0.0123457 0.19537 0.5 +-0.0485539 0.0376116 -0.0123218 0.286596 0.5 +-0.0495645 0.0375773 -0.0119604 0.35002 0.5 +-0.0558768 0.105489 -0.0184971 0.694009 0.5 +-0.0441374 0.160646 -0.00957119 0.429042 0.5 +-0.0401921 0.166668 -0.0117758 0.386735 0.461963 +-0.0838483 0.119157 -0.00284212 0.523056 0.5 +-0.0668846 0.117985 -0.00889164 0.638896 0.5 +-0.0818614 0.114723 -0.0022038 0.513094 0.5 +-0.0565291 0.0373798 -0.0104777 0.280529 0.5 +-0.0575172 0.037335 -0.0101901 0.253048 0.5 +-0.0568793 0.105485 -0.0183902 0.727087 0.5 +-0.0830081 0.135296 -0.00152379 0.618802 0.5 +-0.0605217 0.0372227 -0.00906293 0.276339 0.5 +-0.06148 0.0371866 -0.00855801 0.283805 0.429462 +-0.0779551 0.131028 -0.00606492 0.419934 0.448641 +-0.063488 0.037094 -0.00797583 0.330869 0.5 +-0.0645109 0.0370591 -0.00764757 0.426245 0.5 +-0.0654933 0.0370192 -0.00733845 0.442432 0.313138 +-0.0664891 0.0369705 -0.00688594 0.295629 0.5 +-0.0675101 0.0369158 -0.0062949 0.255831 0.5 +-0.0685182 0.0368214 -0.0053939 0.2812 0.5 +-0.0695317 0.0366687 -0.00405392 0.130661 0.5 +-0.0706839 0.0363372 -0.00115986 0.157445 0.5 +-0.0715396 0.0362187 -0.000138838 0 0 +0.033449 0.0380742 0.000639692 0.290019 0.5 +0.032415 0.0383305 -0.000488607 0.323719 0.5 +0.0314145 0.0384146 -0.00113672 0.342724 0.5 +0.0304284 0.0383851 -0.001443 0.323118 0.5 +0.0294342 0.0383781 -0.00173395 0.249558 0.5 +0.0284741 0.0381475 -0.00163189 0.24096 0.5 +0.0274945 0.0381011 -0.00197122 0.206568 0.5 +0.026467 0.0383015 -0.00253304 0.170358 0.5 +0.0254584 0.0383883 -0.00303811 0.167442 0.5 +0.0244505 0.0384021 -0.00302114 0.247765 0.5 +0.023446 0.0385037 -0.00396461 0.227308 0.5 +-0.0708979 0.122353 -0.00862039 0.727001 0.5 +-0.0161451 0.166792 -0.0199866 0.652581 0.5 +-0.0231365 0.166757 -0.0180638 0.812504 0.5 +-0.054857 0.0970227 -0.0215362 0.479108 0.5 +-0.0840398 0.132376 -0.0018283 0.593065 0.5 +0.0163786 0.0403059 -0.0216745 0.565342 0.5 +0.0154069 0.0403121 -0.0220991 0.54996 0.5 +0.0144144 0.0403325 -0.0225056 0.595645 0.470777 +0.0134264 0.0403382 -0.0227982 0.595255 0.469409 +0.0124197 0.0403679 -0.0230567 0.580084 0.5 +0.0114164 0.0403794 -0.0231815 0.823757 0.5 +0.0104088 0.0403968 -0.0232872 0.821224 0.5 +0.00941217 0.040392 -0.0233006 0.817707 0.5 +0.00840712 0.0404044 -0.0234014 0.811693 0.5 +0.00740202 0.0404296 -0.0235788 0.592328 0.5 +0.00640925 0.0404248 -0.023654 0.618402 0.5 +0.00540344 0.040445 -0.0238712 0.627267 0.5 +0.00439792 0.0404664 -0.024069 0.606702 0.5 +0.00340705 0.0404653 -0.0241388 0.598141 0.5 +0.00239673 0.0404932 -0.0244502 0.660925 0.5 +0.00139789 0.0405023 -0.0245871 0.647619 0.5 +0.000392133 0.0405199 -0.0247969 0.6591 0.5 +-0.000600787 0.0405329 -0.0249772 0.674591 0.5 +-0.00160432 0.0405525 -0.0251988 0.673039 0.5 +-0.00260003 0.0405608 -0.0253579 0.654299 0.5 +-0.00359864 0.0405713 -0.0254999 0.665713 0.5 +-0.00459976 0.0405792 -0.0256485 0.661258 0.5 +-0.00560235 0.0406015 -0.0258376 0.63392 0.5 +-0.00660048 0.0405957 -0.0258634 0.634293 0.5 +-0.00760223 0.0406064 -0.0259713 0.633131 0.5 +-0.00860205 0.0406149 -0.0260948 0.56415 0.5 +-0.00960203 0.0406207 -0.0262166 0.580819 0.5 +-0.0105985 0.0406145 -0.0262787 0.579764 0.5 +-0.0116015 0.0406252 -0.0263738 0.59138 0.5 +-0.0126067 0.040646 -0.0265976 0.667835 0.5 +-0.0136021 0.0406665 -0.0268707 0.598701 0.5 +-0.0146057 0.0406867 -0.0271172 0.489279 0.5 +-0.0156111 0.0407209 -0.0274801 0.481368 0.5 +-0.0166099 0.0407431 -0.0277394 0.620895 0.5 +-0.0176152 0.0407641 -0.0279656 0.655795 0.5 +-0.0186097 0.0407857 -0.0282477 0.754382 0.5 +-0.0196118 0.040807 -0.0284935 0.577124 0.5 +-0.0205993 0.0408181 -0.0286892 0.754684 0.5 +-0.0216102 0.0408331 -0.028871 0.760223 0.5 +-0.0226112 0.04084 -0.0289768 0.762998 0.5 +-0.0236123 0.0408478 -0.0290846 0.759098 0.5 +-0.0246071 0.0408479 -0.0291354 0.694627 0.5 +-0.0256081 0.0408536 -0.0292407 0.673796 0.5 +-0.0266144 0.0408668 -0.0293519 0.662269 0.376831 +-0.0276134 0.0408758 -0.0294796 0.689539 0.353216 +-0.028614 0.0408765 -0.0296027 0.669343 0.5 +-0.0296169 0.0408892 -0.0298249 0.672648 0.5 +-0.0306178 0.0409006 -0.0300462 0.636137 0.5 +-0.0316113 0.0409091 -0.0301005 0.625669 0.5 +-0.032605 0.0408975 -0.030074 0.580325 0.5 +-0.0336134 0.0408899 -0.0298935 0.436381 0.5 +-0.0346258 0.0408721 -0.0296689 0.429265 0.461122 +-0.0356136 0.0408304 -0.0293778 0.408577 0.5 +-0.0366032 0.0407784 -0.0289892 0.407431 0.467512 +-0.0375646 0.0407082 -0.0285349 0.493729 0.5 +-0.0386188 0.04066 -0.0277325 0.458472 0.5 +0.00710791 0.110158 -0.019992 0.669523 0.5 +-0.0501327 0.159092 -0.00542351 0.460012 0.5 +-0.066012 0.139954 -0.00779963 0.73823 0.5 +-0.0741051 0.0686193 0.025039 0.684478 0.5 +-0.0787639 0.0696569 0.0125705 0.52805 0.5 +-0.0201905 0.172698 -0.0217858 0.686217 0.5 +-0.0740846 0.0657329 0.0152043 0.574951 0.420508 +-0.0629819 0.128219 -0.0083429 0.651582 0.482658 +-0.0475747 0.0390527 -0.0120963 0.355388 0.5 +-0.0485567 0.0390246 -0.0119389 0.38583 0.5 +-0.049558 0.0389942 -0.0116749 0.465499 0.5 +-0.0505315 0.0389504 -0.011562 0.530804 0.5 +-0.0515418 0.0389441 -0.0114685 0.544941 0.5 +-0.0525514 0.0389481 -0.0113995 0.531307 0.5 +-0.0535445 0.0389126 -0.0111352 0.392061 0.5 +-0.0545209 0.0388646 -0.0108239 0.389538 0.438881 +-0.0555353 0.0388223 -0.0103544 0.397461 0.5 +-0.0565382 0.0387829 -0.00997998 0.388941 0.5 +-0.0575406 0.0387439 -0.00960491 0.37537 0.5 +-0.0585141 0.0386878 -0.00928985 0.387859 0.5 +-0.0595062 0.0386574 -0.00901889 0.396251 0.5 +-0.0605167 0.0386224 -0.00865968 0.396172 0.5 +-0.0615139 0.0385816 -0.00827445 0.399812 0.5 +-0.062493 0.0385506 -0.00796777 0.386067 0.427535 +-0.063479 0.0384929 -0.0076832 0.359373 0.5 +-0.0645061 0.0384674 -0.00726163 0.412512 0.5 +-0.0654795 0.0384216 -0.00684663 0.365963 0.421524 +-0.0664676 0.0383698 -0.00648508 0.31061 0.5 +-0.0674682 0.0382926 -0.00574154 0.272759 0.5 +-0.0683644 0.0381281 -0.00463362 0.186633 0.39817 +-0.0695501 0.0378481 -0.00149869 0.346576 0.5 +-0.0705692 0.037778 -0.000833243 0.190569 0.5 +-0.0715439 0.0376425 0.00026118 0.118661 0.5 +-0.0578691 0.105465 -0.0183362 0.714004 0.5 +-0.0198831 0.107284 -0.0222237 0.654458 0.5 +0.0374062 0.0397236 -0.000139169 0.889043 0.5 +0.0363991 0.039859 -0.00104313 0.522935 0.5 +0.0354021 0.0399255 -0.00156043 0.524452 0.5 +0.0344146 0.0399125 -0.00185272 0.892872 0.5 +0.0334188 0.0399387 -0.00226403 0.576211 0.5 +0.0324259 0.0399358 -0.00240332 0.570286 0.5 +0.031421 0.0399741 -0.00264961 0.57108 0.5 +0.0304249 0.0399897 -0.00292852 0.489882 0.5 +0.029436 0.039931 -0.00313898 0.446318 0.5 +0.0284614 0.0398271 -0.00325429 0.393135 0.5 +0.0274404 0.0399547 -0.00370609 0.384593 0.5 +0.0264293 0.0400385 -0.00421056 0.412828 0.5 +0.0254331 0.0400654 -0.00462996 0.410052 0.5 +0.0244747 0.0400424 -0.00510986 0.423327 0.5 +-0.0789484 0.130998 -0.00538086 0.389465 0.5 +-0.0610153 0.131125 -0.0076807 0.659174 0.5 +-0.0171472 0.166778 -0.0196136 0.729759 0.5 +-0.0241278 0.166765 -0.0179136 0.820709 0.5 +-0.0510737 0.151654 -0.00393732 0.478399 0.477935 +-0.0588856 0.105471 -0.0181522 0.664136 0.5 +0.0174063 0.0417452 -0.0219906 0.508929 0.469838 +0.0164129 0.0417834 -0.0225068 0.611659 0.452352 +0.0154304 0.0417921 -0.0229429 0.596218 0.5 +0.0144142 0.0418406 -0.0232939 0.632579 0.5 +0.0134018 0.0418881 -0.0236384 0.910511 0.5 +0.012409 0.0418787 -0.0238148 0.906703 0.5 +0.0114013 0.0419017 -0.0239008 0.891863 0.5 +0.0104003 0.0418913 -0.0239147 0.887912 0.5 +0.00939844 0.0418898 -0.0239164 0.883487 0.5 +0.00839558 0.0418967 -0.0238735 0.891296 0.5 +0.00740015 0.0418656 -0.0238182 0.916384 0.5 +0.00639612 0.0418759 -0.0239341 0.675472 0.449609 +0.00539692 0.0418924 -0.0240197 0.665265 0.460024 +0.00440015 0.0419024 -0.0241382 0.919418 0.5 +0.00339772 0.0418993 -0.0241367 0.919254 0.5 +0.002402 0.041908 -0.0243037 0.909392 0.5 +0.00139766 0.0419298 -0.0244976 0.915974 0.5 +0.000399482 0.0419381 -0.024642 0.90788 0.5 +-0.000607228 0.0419595 -0.0248688 0.905955 0.5 +-0.00159817 0.0419657 -0.0250292 0.895585 0.5 +-0.00260639 0.0419888 -0.0252454 0.908023 0.5 +-0.00360287 0.0419944 -0.0253901 0.912998 0.5 +-0.00460242 0.0419996 -0.0255341 0.897177 0.5 +-0.00560579 0.042007 -0.0256504 0.90336 0.5 +-0.00660848 0.0420213 -0.0257519 0.895801 0.5 +-0.00761024 0.0420402 -0.0258045 0.904553 0.5 +-0.0086066 0.042026 -0.0258639 0.904499 0.5 +-0.00960244 0.0420101 -0.025949 0.887833 0.5 +-0.0106066 0.0420419 -0.0261259 0.879277 0.5 +-0.0116045 0.0420472 -0.0262702 0.897217 0.5 +-0.0125985 0.0420542 -0.026434 0.887903 0.5 +-0.0136075 0.0420889 -0.0267571 0.88369 0.5 +-0.014608 0.0421127 -0.0270124 0.620307 0.5 +-0.0155991 0.0421323 -0.0272897 0.878371 0.5 +-0.0166194 0.0421642 -0.027592 0.686825 0.5 +-0.0176147 0.042187 -0.0278695 0.701922 0.5 +-0.0186103 0.042208 -0.0281438 0.705844 0.5 +-0.0196215 0.042233 -0.0284571 0.711375 0.5 +-0.0206158 0.0422474 -0.0286271 0.744996 0.5 +-0.0216106 0.0422609 -0.0287762 0.746305 0.5 +-0.0226137 0.0422636 -0.0288734 0.766807 0.5 +-0.0236164 0.0422618 -0.0289626 0.767069 0.5 +-0.0246131 0.0422659 -0.0289978 0.738709 0.5 +-0.0256167 0.0422692 -0.0291044 0.742573 0.5 +-0.0266181 0.042276 -0.0292233 0.73574 0.5 +-0.0276164 0.0422898 -0.0293674 0.729605 0.5 +-0.0286182 0.0422955 -0.0294891 0.715431 0.5 +-0.0598806 0.105454 -0.017999 0.623096 0.5 +0.0191594 0.100268 -0.0222959 0.566177 0.5 +0.0182047 0.100313 -0.0224597 0.558889 0.468347 +0.0171559 0.100271 -0.022436 0.667078 0.5 +0.0161529 0.100264 -0.0224296 0.68133 0.5 +0.0151488 0.10026 -0.0226403 0.707681 0.5 +0.0141481 0.100268 -0.0227789 0.679978 0.5 +0.0131476 0.100265 -0.0227775 0.652821 0.5 +0.0121427 0.100268 -0.0226753 0.644381 0.5 +0.0111435 0.100252 -0.0225401 0.619476 0.5 +0.00410653 0.111609 -0.0202712 0.76077 0.5 +-0.0739433 0.134018 -0.00754124 0.476328 0.5 +-0.0608886 0.105445 -0.0177606 0.466322 0.466008 +-0.0148777 0.0364156 0.0513074 0.36577 0.5 +-0.0111949 0.178453 -0.0296295 0.301513 0.289246 +-0.0211896 0.172692 -0.021286 0.666917 0.5 +-0.0271752 0.172675 -0.0185845 0.474558 0.5 +-0.0138991 0.162654 -0.0155462 0.332699 0.5 +-0.0558857 0.0970202 -0.0212239 0.484494 0.464999 +-0.0485658 0.0404434 -0.0115683 0.515716 0.5 +-0.0495545 0.0404082 -0.0113965 0.571363 0.5 +-0.0505461 0.0403717 -0.011217 0.640939 0.5 +-0.0515413 0.0403485 -0.0110842 0.71549 0.5 +-0.0525617 0.0403541 -0.0109145 0.479197 0.5 +-0.0535427 0.0402957 -0.0106063 0.475998 0.459658 +-0.0545439 0.0402656 -0.0102441 0.493628 0.5 +-0.0555251 0.040203 -0.0098178 0.514649 0.44214 +-0.0565326 0.0401709 -0.00945456 0.497082 0.5 +-0.0575443 0.0401418 -0.00909914 0.501382 0.5 +-0.058528 0.0400924 -0.008802 0.50863 0.433787 +-0.0595357 0.0400627 -0.00844467 0.519392 0.436123 +-0.0568962 0.0970004 -0.0209687 0.468664 0.5 +-0.0615278 0.0399873 -0.00779984 0.51858 0.5 +-0.062514 0.0399436 -0.00751704 0.482525 0.5 +-0.0635175 0.0399079 -0.00714576 0.468833 0.5 +-0.0645122 0.0398643 -0.00676714 0.468873 0.5 +-0.0654945 0.0398115 -0.0063825 0.418778 0.5 +-0.0664819 0.0397537 -0.00588584 0.370667 0.5 +-0.0674469 0.0396367 -0.00494886 0.277951 0.5 +-0.0687139 0.0394283 -0.00171366 0.308997 0.440677 +-0.0135156 0.162506 -0.0153049 0.294489 0.5 +-0.0117661 0.182389 -0.0287496 0.379117 0.5 +-0.0768702 0.122267 -0.00710647 0.448248 0.5 +-0.02088 0.107273 -0.0222055 0.649023 0.5 +-0.0689152 0.109432 -0.0116742 0.483429 0.48581 +0.0379841 0.0406211 -0.00115448 0.507762 0.456617 +-0.0716194 0.0382939 0.000706648 0.119304 0.5 +-0.0619058 0.105434 -0.0174028 0.445122 0.5 +0.0383993 0.0413521 -0.00190432 0.400065 0.449871 +0.037401 0.0414131 -0.00242752 0.608642 0.5 +0.0364284 0.0413843 -0.00274773 0.62171 0.5 +0.0354173 0.0414682 -0.003097 0.626363 0.5 +0.0344326 0.0414166 -0.00330414 0.627716 0.5 +0.0334239 0.0414863 -0.00351395 0.699989 0.5 +0.0324265 0.0414912 -0.00365574 0.704492 0.5 +0.0314216 0.0415146 -0.00377022 0.705677 0.5 +0.0304133 0.0415863 -0.00412062 0.690227 0.5 +0.029434 0.0414849 -0.00426139 0.655538 0.5 +0.0284176 0.0415874 -0.00471776 0.455951 0.469649 +0.0274028 0.0416284 -0.00496361 0.463814 0.466803 +0.0264339 0.0415833 -0.00518191 0.458277 0.464872 +0.0254504 0.0415949 -0.00563526 0.522279 0.5 +-0.0629048 0.1054 -0.0169977 0.57 0.5 +0.00310943 0.110155 -0.0202398 0.764921 0.5 +-0.0620515 0.035927 0.0204607 0.14834 0.300091 +-0.021137 0.166765 -0.0184531 0.559508 0.5 +-0.0639163 0.105371 -0.0163736 0.570789 0.5 +0.0183807 0.0432425 -0.0223469 0.479255 0.426123 +0.0173872 0.0432828 -0.0228623 0.505512 0.465844 +0.0163989 0.0433061 -0.0232691 0.537872 0.5 +0.0154157 0.0433241 -0.0236953 0.527331 0.47019 +0.0143954 0.0433708 -0.024029 0.635395 0.5 +0.013384 0.043414 -0.024368 0.930977 0.5 +0.0123957 0.0434077 -0.0245497 0.931636 0.5 +0.0113955 0.0434069 -0.0246972 0.907314 0.5 +0.0103893 0.0434318 -0.0247637 0.898242 0.5 +0.0093871 0.0434015 -0.0246765 0.87056 0.5 +0.00839042 0.0434178 -0.024623 0.881842 0.5 +0.0073902 0.0433817 -0.0245369 0.891731 0.5 +0.00639168 0.0433788 -0.024537 0.637794 0.5 +0.00539495 0.0433546 -0.0245866 0.910032 0.5 +0.00439509 0.0433687 -0.0246925 0.890797 0.5 +0.00339178 0.0433892 -0.0247833 0.886654 0.5 +0.00239172 0.0434053 -0.0248906 0.88082 0.5 +0.0013977 0.0433563 -0.0248502 0.90496 0.5 +0.000400525 0.0433705 -0.0249688 0.898825 0.5 +-0.000596635 0.0433605 -0.0249736 0.911007 0.5 +-0.00160584 0.0434015 -0.0251635 0.898006 0.5 +-0.00260981 0.0434451 -0.0255195 0.910791 0.5 +-0.00359562 0.043415 -0.0257386 0.884979 0.5 +-0.00460043 0.0434181 -0.0258683 0.866922 0.5 +-0.00560304 0.0434101 -0.0260312 0.862103 0.5 +-0.0066107 0.0434378 -0.0261152 0.854413 0.5 +-0.00761327 0.0434711 -0.0261832 0.817005 0.5 +-0.00861273 0.0434199 -0.0261503 0.868829 0.5 +-0.00961348 0.0434416 -0.0262361 0.856731 0.5 +-0.0106092 0.0434444 -0.026227 0.892 0.5 +-0.0116079 0.0434695 -0.0263093 0.88401 0.5 +-0.0126085 0.0434839 -0.0264186 0.92574 0.5 +-0.013606 0.0435021 -0.0266802 0.913794 0.5 +-0.0146056 0.0435263 -0.0269315 0.918057 0.5 +-0.0156018 0.0435495 -0.027203 0.921648 0.5 +-0.0166096 0.0435748 -0.0274243 0.671418 0.5 +-0.0176105 0.0435992 -0.0276633 0.679826 0.5 +-0.0186132 0.0436215 -0.0279143 0.665583 0.5 +-0.0196184 0.043638 -0.0281382 0.661186 0.5 +-0.0206243 0.0436469 -0.0283402 0.69192 0.5 +-0.0216155 0.0436703 -0.028439 0.6886 0.5 +-0.022619 0.0436731 -0.0285417 0.721892 0.5 +-0.0236196 0.0436733 -0.0286374 0.68763 0.5 +-0.0246191 0.0436702 -0.0286423 0.65447 0.5 +-0.0256204 0.0436547 -0.0287136 0.680798 0.5 +-0.0266217 0.0436536 -0.0288174 0.687213 0.5 +-0.0276244 0.0436594 -0.0289391 0.685929 0.5 +-0.057886 0.0969698 -0.0206731 0.435736 0.5 +-0.0649278 0.105334 -0.0156241 0.597638 0.5 +-0.0668923 0.109473 -0.0126504 0.498333 0.486325 +0.00410872 0.110162 -0.02034 0.797779 0.5 +-0.0668955 0.116554 -0.00922261 0.572262 0.466065 +-0.0678845 0.116524 -0.00880656 0.465917 0.5 +-0.024177 0.172689 -0.0201134 0.481559 0.430014 +-0.074876 0.107788 -0.00905848 0.6157 0.5 +-0.0799536 0.133905 -0.00443135 0.430863 0.5 +-0.081937 0.128034 -0.00496911 0.405437 0.445717 +-0.0739068 0.123785 -0.00803832 0.675774 0.5 +-0.021881 0.107267 -0.0220871 0.651068 0.5 +-0.0599768 0.12527 -0.00809043 0.772829 0.5 +-0.0701241 0.109501 0.0382316 0.512903 0.5 +-0.0659232 0.105312 -0.014993 0.616379 0.391672 +-0.0390659 0.157734 -0.0109824 0.80478 0.5 +-0.0221845 0.172691 -0.0208918 0.488939 0.5 +-0.0669297 0.105269 -0.0144963 0.630577 0.5 +-0.0679029 0.105215 -0.0140793 0.637655 0.394297 +-0.0659599 0.128235 -0.00885739 0.825002 0.5 +-0.0485613 0.0418518 -0.011173 0.693304 0.5 +-0.0495602 0.0418248 -0.0110192 0.472907 0.5 +-0.0505603 0.0417939 -0.0107632 0.515424 0.476038 +-0.0515389 0.0417461 -0.0105815 0.557754 0.472955 +-0.0525645 0.0417313 -0.0101531 0.572447 0.5 +-0.0535612 0.0416919 -0.00977582 0.576462 0.458435 +-0.054551 0.0416447 -0.00949548 0.592817 0.5 +-0.0555242 0.0415797 -0.00918326 0.59055 0.5 +-0.0565425 0.0415574 -0.00871771 0.596408 0.5 +-0.0575342 0.0415089 -0.00843308 0.612612 0.437573 +-0.0729608 0.135493 -0.0074448 0.502781 0.5 +-0.0568732 0.108333 -0.017952 0.656314 0.5 +-0.0588895 0.0969269 -0.0201624 0.399271 0.47958 +-0.0711998 0.15079 -0.0434624 0.148556 0.5 +-0.0625234 0.0413191 -0.00677899 0.589487 0.426823 +-0.0635137 0.0412627 -0.00639269 0.542507 0.5 +-0.0644941 0.0412041 -0.00599039 0.506483 0.407349 +-0.0655061 0.041163 -0.00538315 0.458317 0.5 +-0.0848294 0.111312 0.0422165 0.537068 0.446987 +-0.0677174 0.0409231 -0.00173026 0.364166 0.5 +-0.0320811 0.1577 -0.0118106 0.732334 0.5 +-0.0659867 0.134061 -0.00822741 0.755875 0.5 +-0.0291819 0.174148 -0.0171874 0.479098 0.5 +-0.0598355 0.0968573 -0.0194316 0.528986 0.5 +-0.0421665 0.16366 -0.0107342 0.402329 0.5 +-0.0608758 0.0968112 -0.0186271 0.51716 0.465637 +-0.0461288 0.15913 -0.00829043 0.412237 0.431673 +-0.0478356 0.0970782 -0.0220591 0.821535 0.5 +0.0414526 0.0425673 -0.000513932 0.446696 0.5 +0.0404388 0.0427247 -0.00185446 0.458555 0.5 +0.0393846 0.0429207 -0.00283799 0.450148 0.461163 +0.0383916 0.042968 -0.00337479 0.637531 0.5 +0.0373988 0.0430101 -0.00376662 0.714815 0.5 +0.036411 0.0430004 -0.00393346 0.719157 0.5 +0.0354121 0.0430461 -0.00417186 0.714619 0.5 +0.0344174 0.0430387 -0.00433126 0.711979 0.5 +0.0334156 0.0430777 -0.00456693 0.790349 0.5 +0.0324104 0.0430965 -0.00468251 0.796114 0.5 +0.0314049 0.0431209 -0.00494122 0.809078 0.5 +0.0304128 0.0431004 -0.0051324 0.810656 0.5 +0.0293811 0.04325 -0.00550019 0.514724 0.5 +0.0284042 0.0431456 -0.00552671 0.526566 0.5 +0.0274201 0.0431121 -0.00573463 0.760077 0.5 +0.0264706 0.0430524 -0.00597567 0.671741 0.5 +-0.0669244 0.123843 -0.00898539 0.807159 0.5 +-0.0729148 0.110726 -0.0089954 0.598069 0.5 +-0.0329249 0.0369927 0.0503412 0.435134 0.5 +-0.0648898 0.0353536 0.0257632 0.13626 0.356626 +-0.0181465 0.166773 -0.0192359 0.753611 0.5 +-0.0590743 0.136941 -0.00615344 0.663369 0.478015 +-0.0600399 0.13696 -0.00647222 0.6555 0.484442 +0.0183828 0.0447123 -0.0227438 0.544638 0.5 +0.0173831 0.0447578 -0.0232543 0.595341 0.440645 +0.0163996 0.044784 -0.0236657 0.574832 0.5 +0.0154 0.0448131 -0.0240573 0.558483 0.5 +0.0143831 0.0448677 -0.0245168 0.546545 0.456757 +0.0133914 0.0448806 -0.0247967 0.530692 0.446482 +0.0124021 0.0448701 -0.0249804 0.664014 0.5 +0.0113837 0.0449118 -0.0251572 0.907397 0.5 +0.0103837 0.0449023 -0.0251665 0.907276 0.5 +0.00938205 0.0449001 -0.0251557 0.905052 0.5 +0.00838174 0.0449018 -0.0251393 0.896765 0.5 +0.00738229 0.0448872 -0.0251556 0.912297 0.5 +0.00638813 0.0448624 -0.0253374 0.897739 0.5 +0.00538744 0.0448871 -0.0255741 0.861601 0.5 +0.00439164 0.0448792 -0.025855 0.838614 0.5 +0.00339515 0.0448431 -0.0258796 0.806194 0.5 +0.00238303 0.0449286 -0.0261957 0.773642 0.5 +0.00138117 0.044939 -0.0263139 0.778892 0.5 +0.000388646 0.0448955 -0.0263577 0.76651 0.5 +-0.000607851 0.0448652 -0.0263872 0.753282 0.5 +-0.00162246 0.0450436 -0.027024 0.761054 0.5 +-0.00261634 0.0450445 -0.0274328 0.784447 0.5 +-0.00362249 0.0451016 -0.0279234 0.76313 0.5 +-0.00462988 0.0451748 -0.0282624 0.767633 0.5 +-0.00562712 0.0451708 -0.0285409 0.7769 0.5 +-0.00662603 0.045146 -0.0285621 0.773851 0.5 +-0.00762589 0.0451743 -0.028662 0.785677 0.5 +-0.00862356 0.0451919 -0.0286362 0.735088 0.5 +-0.00962571 0.0451144 -0.0282927 0.729792 0.5 +-0.0106261 0.0451108 -0.0281505 0.73794 0.5 +-0.0116236 0.0451107 -0.0281433 0.770619 0.5 +-0.0126252 0.045057 -0.0279244 0.779417 0.5 +-0.0136243 0.0450811 -0.0280269 0.804749 0.5 +-0.0146217 0.0450296 -0.0279689 0.83209 0.5 +-0.0156256 0.0450397 -0.0279587 0.855369 0.5 +-0.016623 0.0450359 -0.0278307 0.877817 0.5 +-0.0176233 0.0450417 -0.02779 0.896284 0.5 +-0.0186212 0.04503 -0.027692 0.88763 0.5 +-0.0196267 0.0450293 -0.0277098 0.669944 0.5 +-0.0206221 0.0450432 -0.0278804 0.673849 0.5 +-0.0216233 0.0450569 -0.0280185 0.641651 0.5 +-0.022624 0.0450535 -0.0281102 0.645176 0.5 +-0.0236253 0.0450591 -0.0281331 0.596546 0.5 +-0.0246221 0.0450443 -0.0281165 0.551392 0.5 +-0.0256221 0.0450194 -0.0280788 0.574468 0.5 +-0.0266231 0.0450263 -0.028096 0.556919 0.460773 +-0.0276253 0.0450182 -0.0280952 0.556513 0.5 +-0.0286229 0.0450027 -0.0280846 0.536906 0.5 +-0.0689036 0.105186 -0.0135662 0.489091 0.484351 +-0.0699012 0.105141 -0.0130553 0.495916 0.371044 +-0.0709057 0.10512 -0.0125462 0.494717 0.5 +-0.0470698 0.154668 -0.0068409 0.62606 0.5 +-0.0609787 0.126745 -0.00811044 0.855885 0.5 +-0.0121766 0.169774 -0.0245851 0.577829 0.5 +-0.064348 0.0611447 0.0212332 0.977356 0.5 +-0.022854 0.100181 -0.0240549 0.556923 0.5 +-0.0290293 0.160675 -0.0139931 0.84917 0.5 +-0.0343542 0.0367977 0.0484644 0.443253 0.5 +-0.0744393 0.114503 0.0509494 0.396527 0.477414 +-0.0718567 0.0701514 0.0311867 0.575141 0.5 +-0.0238559 0.100178 -0.023968 0.558013 0.5 +-0.0905947 0.115833 0.0426569 0.584918 0.45568 +-0.0162094 0.172709 -0.0239586 0.615389 0.5 +-0.0248564 0.100174 -0.0239639 0.854521 0.5 +-0.0456148 0.043386 -0.0114089 0.276912 0.396234 +-0.0465665 0.0433151 -0.011194 0.539382 0.5 +-0.0475689 0.0432884 -0.0109341 0.656702 0.5 +-0.0485485 0.0432385 -0.0107358 0.692237 0.5 +-0.049553 0.0432181 -0.0104928 0.738745 0.5 +-0.0505604 0.0431885 -0.0101401 0.507303 0.5 +-0.0515329 0.0431219 -0.00982617 0.534613 0.467747 +-0.0525459 0.0430871 -0.00935537 0.566551 0.5 +-0.0535608 0.0430661 -0.00900679 0.582413 0.5 +-0.0545511 0.0430136 -0.00860983 0.588659 0.5 +-0.0258582 0.100162 -0.023852 0.843443 0.5 +-0.0268604 0.100151 -0.0237263 0.827721 0.5 +-0.0278525 0.100136 -0.023576 0.817939 0.5 +-0.0589097 0.111154 -0.0162513 0.455333 0.473083 +-0.0481015 0.157608 -0.00698963 0.37964 0.446337 +-0.0839121 0.122095 -0.00374203 0.508553 0.5 +-0.0861163 0.11208 0.0430934 0.436042 0.5 +-0.0288529 0.100117 -0.0233232 0.795166 0.5 +-0.0298518 0.100096 -0.0230635 0.804747 0.5 +-0.0308576 0.10008 -0.0228293 0.820975 0.5 +-0.0318518 0.100063 -0.022678 0.619702 0.5 +-0.0328555 0.100056 -0.0225692 0.661353 0.5 +-0.0338572 0.100054 -0.0225702 0.686282 0.5 +-0.0348607 0.100046 -0.0224582 0.6888 0.5 +-0.0241819 0.175647 -0.0202251 0.442702 0.5 +-0.0358588 0.100033 -0.0223224 0.690661 0.5 +-0.0368547 0.100015 -0.0221726 0.702239 0.5 +-0.0378631 0.100009 -0.0219618 0.717762 0.5 +0.0444747 0.0438727 0.000520461 0.584903 0.5 +0.043508 0.0438731 -6.08517e-05 0.582353 0.5 +0.0424267 0.0441756 -0.00158684 0.612101 0.5 +0.0413371 0.0444728 -0.00290745 0.665973 0.5 +0.0403707 0.0444834 -0.00362771 0.504444 0.5 +0.0393635 0.0445531 -0.00413158 0.419686 0.5 +0.0383887 0.0445417 -0.00444706 0.736342 0.5 +0.0373953 0.0445589 -0.00471693 0.819012 0.5 +0.0364077 0.044553 -0.00488844 0.807247 0.5 +0.0354074 0.0446129 -0.00524037 0.796299 0.5 +0.0344074 0.0446243 -0.00536213 0.798893 0.5 +0.0334058 0.0446363 -0.00548551 0.898558 0.5 +0.0324011 0.0446474 -0.00561054 0.907737 0.5 +0.0314005 0.0446447 -0.00577901 0.591417 0.471897 +0.0304082 0.04464 -0.00596234 0.516509 0.471346 +0.0293657 0.0447288 -0.00609588 0.6622 0.5 +0.0284258 0.044601 -0.00619231 0.674643 0.5 +0.0274801 0.0445395 -0.0065618 0.679213 0.5 +0.0266706 0.04428 -0.00700704 0.568341 0.5 +-0.0738846 0.110669 -0.00843945 0.578119 0.5 +-0.0106963 0.176084 -0.0292514 0.38918 0.5 +-0.0388617 0.099995 -0.0218283 0.735107 0.5 +-0.0398566 0.099981 -0.0216989 0.744528 0.5 +-0.0618754 0.0967815 -0.0181397 0.585669 0.5 +0.0193368 0.0460939 -0.0219388 0.488568 0.5 +0.0183573 0.0461568 -0.0227219 0.566419 0.5 +0.0173787 0.046209 -0.0233857 0.573059 0.5 +0.0163915 0.04625 -0.0239163 0.565897 0.453279 +0.0153612 0.0463061 -0.0243571 0.558332 0.5 +0.0143956 0.046307 -0.0246969 0.543967 0.5 +0.0134074 0.0463149 -0.0249889 0.65303 0.471355 +0.0123886 0.0463398 -0.0252064 0.637959 0.5 +0.0113838 0.0463423 -0.025328 0.916979 0.5 +0.010384 0.0463357 -0.0254801 0.891521 0.5 +0.00938176 0.0463536 -0.0257255 0.875986 0.5 +0.00838362 0.046349 -0.0258656 0.87553 0.5 +0.00738566 0.0463583 -0.0259834 0.869113 0.5 +0.00638455 0.0464233 -0.0264515 0.855615 0.5 +0.00538144 0.0464854 -0.0270709 0.829583 0.5 +0.00438413 0.0465246 -0.0275852 0.822178 0.5 +0.00338055 0.0465728 -0.0280809 0.806189 0.5 +0.00237351 0.0465882 -0.0283321 0.804291 0.5 +0.00137166 0.0465972 -0.0284573 0.799358 0.5 +0.000368669 0.0466323 -0.0286891 0.790789 0.5 +-0.000629686 0.0466337 -0.0288231 0.777349 0.5 +-0.00163455 0.0466691 -0.0289171 0.81307 0.5 +-0.00262958 0.0466399 -0.0290845 0.855601 0.5 +-0.0036313 0.046681 -0.0294588 0.871207 0.5 +-0.0046354 0.0467251 -0.0296701 0.880297 0.5 +-0.0056357 0.0466988 -0.0297075 0.885186 0.5 +-0.00663392 0.0466819 -0.0297341 0.877925 0.5 +-0.00763703 0.046711 -0.0299661 0.890472 0.5 +-0.00863658 0.0467032 -0.0298179 0.83735 0.5 +-0.00963836 0.0466527 -0.0295963 0.822816 0.5 +-0.0106374 0.0466553 -0.0295813 0.83758 0.5 +-0.011635 0.0466548 -0.0295721 0.854721 0.5 +-0.0126391 0.0466477 -0.0295757 0.833705 0.5 +-0.0136362 0.0466649 -0.0295427 0.843038 0.5 +-0.0146369 0.0466344 -0.0294365 0.796613 0.5 +-0.0156357 0.0466082 -0.0291798 0.781272 0.5 +-0.0166345 0.0465837 -0.0289175 0.799758 0.5 +-0.0176381 0.0465514 -0.0286775 0.816148 0.5 +-0.0186385 0.0465274 -0.0284289 0.807308 0.5 +-0.0196387 0.0464931 -0.0280998 0.823247 0.5 +-0.0206484 0.0464719 -0.0278809 0.835839 0.5 +-0.021638 0.0464604 -0.0276852 0.566222 0.5 +-0.0226179 0.0464363 -0.0275647 0.554091 0.5 +-0.0236256 0.0464233 -0.0274769 0.512767 0.5 +-0.0246346 0.0464142 -0.0272665 0.471223 0.5 +-0.0256229 0.0463679 -0.0270847 0.483812 0.5 +-0.0266239 0.0463597 -0.0270834 0.460447 0.5 +-0.0276264 0.046347 -0.026964 0.435474 0.5 +-0.0286261 0.0463451 -0.0269667 0.443004 0.5 +-0.0408477 0.0999502 -0.0215042 0.77106 0.5 +-0.0652274 0.172558 -0.0603808 0.35592 0.434036 +-0.0418518 0.0999485 -0.0214177 0.805327 0.5 +-0.0739579 0.13841 -0.00677972 0.518848 0.5 +-0.0428494 0.0999447 -0.0214282 0.819012 0.5 +-0.0380759 0.16073 -0.01276 0.52085 0.466235 +-0.0350971 0.16074 -0.013448 0.591861 0.477693 +-0.0320964 0.160758 -0.0138294 0.843047 0.5 +-0.0438495 0.0999429 -0.0214407 0.824639 0.5 +-0.0536395 0.0361733 0.0466553 0.350714 0.5 +-0.0652445 0.171051 -0.0600934 0.590198 0.5 +-0.0781409 0.0718256 0.0231698 0.774152 0.5 +-0.034079 0.157748 -0.0116645 0.745592 0.5 +-0.0121468 0.17267 -0.0267827 0.54753 0.5 +-0.0448474 0.0999398 -0.0215303 0.838115 0.5 +-0.0447162 0.0448943 -0.0112435 0.254348 0.5 +-0.0455907 0.0447683 -0.0109766 0.340502 0.431751 +-0.0465551 0.0447198 -0.0107805 0.557997 0.5 +-0.0475678 0.0446906 -0.0104074 0.699162 0.5 +-0.0485566 0.0446478 -0.0101195 0.715411 0.5 +-0.0495658 0.0446328 -0.00989725 0.52434 0.5 +-0.050581 0.0445938 -0.00942218 0.559762 0.5 +-0.0515546 0.0445278 -0.00899667 0.555269 0.5 +-0.0525546 0.0444744 -0.00849373 0.581335 0.5 +-0.0535445 0.0444164 -0.0080927 0.600019 0.5 +-0.0545436 0.0443717 -0.00770843 0.601388 0.5 +-0.0458479 0.0999438 -0.0215809 0.827182 0.5 +-0.0468498 0.0999476 -0.0216953 0.82112 0.5 +-0.0749621 0.134014 -0.00721966 0.439453 0.449618 +-0.0478493 0.099947 -0.0217978 0.819531 0.5 +-0.0488506 0.0999451 -0.0218934 0.821357 0.5 +-0.0739471 0.131099 -0.00783391 0.43873 0.470751 +-0.0371937 0.168177 -0.0134205 0.393661 0.5 +-0.0498545 0.0999668 -0.0218887 0.780642 0.5 +-0.0508568 0.0999518 -0.0219402 0.728027 0.5 +-0.0760409 0.0677685 0.0130189 0.548696 0.459877 +-0.0702518 0.06756 0.0285092 0.64775 0.5 +-0.0531145 0.157563 -0.00324336 0.376079 0.5 +-0.0192324 0.177141 -0.0234526 0.330164 0.5 +-0.0221908 0.175658 -0.0213821 0.411773 0.419467 +-0.0518639 0.0999443 -0.0218198 0.67957 0.5 +-0.0381589 0.163687 -0.0131595 0.453764 0.5 +-0.0528659 0.0999263 -0.0216782 0.632479 0.5 +0.0464333 0.0455453 -0.00066213 0.579414 0.5 +0.0454033 0.0457238 -0.00184235 0.45037 0.461842 +0.0443612 0.0458824 -0.00271937 0.637062 0.5 +0.0433708 0.0459415 -0.00338184 0.659616 0.5 +0.0423872 0.0459654 -0.00393846 0.760688 0.5 +0.0413912 0.0459759 -0.00421898 0.798927 0.5 +0.04037 0.0460545 -0.00454494 0.59083 0.5 +0.0393875 0.0460438 -0.00485579 0.587492 0.5 +0.0383891 0.0460848 -0.00524865 0.579709 0.474577 +0.0373922 0.0461028 -0.00552229 0.651128 0.5 +0.0363972 0.0461521 -0.00588406 0.652472 0.5 +0.0354045 0.046148 -0.00604177 0.650168 0.5 +0.034401 0.0461473 -0.00601616 0.636554 0.5 +0.0333957 0.0461492 -0.00598528 0.643346 0.5 +0.0323852 0.0461686 -0.00610484 0.676301 0.5 +0.0313815 0.0461664 -0.00629419 0.623143 0.5 +-0.0538783 0.0999149 -0.0214389 0.455569 0.5 +0.029421 0.0461183 -0.00671048 0.678664 0.5 +0.0285444 0.0459645 -0.0070843 0.583776 0.5 +0.0278498 0.045613 -0.00720046 0.57502 0.0841444 +-0.0548811 0.099887 -0.0210509 0.560354 0.5 +-0.0558857 0.0998486 -0.020419 0.536833 0.5 +-0.0568876 0.0998079 -0.0197942 0.540405 0.5 +-0.0578741 0.0997697 -0.0193936 0.555621 0.471586 +0.0223974 0.0473356 -0.0199928 0.436852 0.456625 +0.0214018 0.0473917 -0.0206345 0.708251 0.5 +0.0204036 0.0474506 -0.0212729 0.800719 0.5 +0.0193632 0.0475344 -0.0219845 0.887829 0.5 +0.0183271 0.0475932 -0.02269 0.537978 0.455174 +0.0173692 0.0476632 -0.0235115 0.661186 0.5 +0.0163901 0.0476981 -0.0240512 0.662033 0.5 +0.0154036 0.0477404 -0.0246897 0.521268 0.470484 +0.0144227 0.0477589 -0.0252693 0.653441 0.5 +0.0134064 0.0478115 -0.0258783 0.619614 0.460084 +0.0123661 0.0479119 -0.026429 0.863283 0.5 +0.0113671 0.0479427 -0.0268055 0.86596 0.5 +0.010367 0.0479585 -0.0270631 0.852639 0.5 +0.0093755 0.0479282 -0.0271091 0.838924 0.5 +0.00837353 0.0479453 -0.0272176 0.840924 0.5 +0.00736856 0.0479637 -0.0273222 0.866306 0.5 +0.00636801 0.0479975 -0.0276935 0.886726 0.5 +0.00535116 0.0480874 -0.0284111 0.651494 0.5 +0.00435977 0.0481043 -0.0288152 0.894636 0.5 +0.00334719 0.0481602 -0.0292882 0.906543 0.5 +0.00237024 0.0481449 -0.0294793 0.901259 0.5 +0.00136064 0.0481752 -0.0296995 0.890587 0.5 +0.00035867 0.048192 -0.0299591 0.895339 0.5 +-0.000640169 0.0481947 -0.0300913 0.872257 0.5 +-0.00164401 0.0482043 -0.0300627 0.876478 0.5 +-0.00263926 0.0481807 -0.0301073 0.907454 0.5 +-0.00366678 0.0481589 -0.0301707 0.634884 0.475184 +-0.0046427 0.0482096 -0.0303136 0.910591 0.5 +-0.00564116 0.0481924 -0.0303539 0.644238 0.5 +-0.00664168 0.0482162 -0.0304375 0.650022 0.5 +-0.00764633 0.048167 -0.0303862 0.915438 0.5 +-0.00864403 0.0481881 -0.0304747 0.894445 0.5 +-0.0096474 0.0481504 -0.030386 0.873996 0.5 +-0.0106444 0.0481591 -0.0303544 0.871606 0.5 +-0.0116442 0.0481633 -0.0303354 0.880484 0.5 +-0.0126432 0.0481635 -0.0303259 0.891033 0.5 +-0.0136476 0.0481469 -0.0303471 0.873198 0.5 +-0.0146479 0.0481463 -0.0303376 0.839713 0.5 +-0.0156486 0.0481142 -0.0300898 0.808351 0.5 +-0.0166484 0.0480949 -0.029815 0.811192 0.5 +-0.0176564 0.0480544 -0.0295902 0.813106 0.5 +-0.0186556 0.0480312 -0.0293255 0.79691 0.5 +-0.0196537 0.0480066 -0.0290701 0.772453 0.5 +-0.0206629 0.0479548 -0.0285983 0.532426 0.46516 +-0.0216491 0.0479362 -0.0281524 0.39568 0.468007 +-0.0226309 0.0478785 -0.0276417 0.381357 0.424848 +-0.023633 0.0478399 -0.0272396 0.36184 0.5 +-0.0246521 0.0478035 -0.0267776 0.404517 0.5 +-0.0255784 0.0477093 -0.0263526 0.336491 0.458415 +-0.026575 0.0476865 -0.0258778 0.332092 0.447474 +-0.0276111 0.0476412 -0.0256716 0.544875 0.5 +-0.0286056 0.0475856 -0.0255224 0.549998 0.5 +-0.0588824 0.0997395 -0.0190365 0.579836 0.465444 +-0.055903 0.111216 -0.0172629 0.487152 0.481718 +-0.0729777 0.138423 -0.00695981 0.509488 0.460459 +-0.0481389 0.160609 -0.00688834 0.343759 0.465307 +-0.0411287 0.160673 -0.0112161 0.411336 0.469409 +-0.0211637 0.171222 -0.0207379 0.753072 0.5 +-0.0281692 0.171188 -0.018077 0.46464 0.5 +-0.0331602 0.171158 -0.0153905 0.654608 0.5 +-0.0708871 0.119431 -0.00850422 0.712701 0.5 +-0.0782161 0.110396 0.044452 0.426356 0.441087 +-0.0628762 0.0967673 -0.0179048 0.641864 0.5 +-0.0338755 0.107095 -0.0200162 0.678853 0.5 +-0.0748771 0.109206 -0.00842538 0.60242 0.5 +-0.059876 0.0997119 -0.0187764 0.595695 0.5 +-0.043632 0.0462886 -0.0112814 0.303424 0.5 +-0.0445775 0.0462028 -0.0108205 0.377134 0.418749 +-0.0455587 0.0461599 -0.0105245 0.441132 0.5 +-0.0465559 0.0461276 -0.0102455 0.512736 0.467304 +-0.0475701 0.0461114 -0.0100167 0.523203 0.5 +-0.0485691 0.0460686 -0.00963735 0.523514 0.468144 +-0.0495789 0.046041 -0.00928879 0.529587 0.5 +-0.0505664 0.0459962 -0.00889176 0.534388 0.5 +-0.0515556 0.0459336 -0.00836292 0.5324 0.5 +-0.0525396 0.0458696 -0.00783738 0.574164 0.5 +-0.0535493 0.045819 -0.00734382 0.589987 0.5 +-0.0545484 0.0457621 -0.00683862 0.612138 0.5 +-0.0608825 0.0996865 -0.0185327 0.600875 0.5 +-0.0848578 0.117602 -0.00112226 0.527753 0.5 +-0.0788979 0.123682 -0.00614143 0.483576 0.379305 +-0.0618578 0.099667 -0.0183374 0.482886 0.362593 +-0.0628733 0.0996403 -0.0179913 0.471554 0.5 +-0.0540375 0.141288 -0.0013423 0.606175 0.5 +-0.0550222 0.141298 -0.00203484 0.599926 0.5 +-0.0609844 0.0646638 0.031213 0.463 0.453928 +-0.0421167 0.157651 -0.00983865 0.48427 0.5 +-0.045123 0.157633 -0.00869072 0.45243 0.459385 +-0.0441012 0.15765 -0.00916962 0.479562 0.467177 +-0.015205 0.175685 -0.0260892 0.445478 0.5 +-0.0201913 0.175663 -0.0226485 0.321132 0.5 +-0.034118 0.163722 -0.0147399 0.616403 0.5 +-0.0361236 0.163705 -0.0141169 0.530189 0.436025 +-0.0638365 0.0996097 -0.0175199 0.458617 0.5 +0.0474532 0.047084 -0.00164907 0.460213 0.5 +-0.063874 0.0967575 -0.0177619 0.675545 0.5 +0.0453737 0.0474164 -0.00383546 0.53521 0.5 +0.0443631 0.0475049 -0.00446946 0.558017 0.472152 +0.0433856 0.0475038 -0.0047769 0.586512 0.5 +0.0423862 0.047532 -0.00502925 0.899421 0.5 +0.0413899 0.0475369 -0.00516876 0.890654 0.5 +0.0403951 0.0475373 -0.00531603 0.899439 0.5 +0.0393856 0.0475887 -0.00567863 0.634528 0.476209 +0.0383861 0.0476151 -0.00591592 0.65569 0.5 +0.037389 0.0476423 -0.00613109 0.675988 0.5 +0.0363932 0.0476439 -0.00624826 0.671867 0.5 +0.0354015 0.0476244 -0.00628637 0.66247 0.5 +0.034399 0.0476191 -0.006288 0.650754 0.5 +0.0333786 0.0476367 -0.00619535 0.608081 0.5 +0.0323876 0.047596 -0.00623106 0.632453 0.5 +0.0313336 0.0477022 -0.006755 0.768076 0.5 +-0.0648504 0.099576 -0.0170426 0.450894 0.5 +-0.0658419 0.0995396 -0.0165139 0.467705 0.432402 +-0.0769537 0.132513 -0.00657383 0.40952 0.5 +0.0264433 0.0485879 -0.0182655 0.458209 0.5 +0.0253818 0.0487646 -0.0196147 0.455291 0.5 +0.0243874 0.048835 -0.0205112 0.667001 0.5 +0.0233446 0.0489622 -0.0213372 0.685764 0.5 +0.0223908 0.0489358 -0.0217863 0.690533 0.5 +0.0213931 0.0489728 -0.0223035 0.755422 0.5 +0.0203853 0.049027 -0.0227929 0.825669 0.5 +0.0193977 0.0490363 -0.0230642 0.849341 0.5 +0.0183835 0.0490953 -0.0235496 0.857445 0.5 +0.0173651 0.049165 -0.0241471 0.881229 0.5 +0.0163905 0.0491901 -0.024833 0.855835 0.5 +0.0153651 0.0493118 -0.0259325 0.630086 0.5 +0.0143712 0.0493733 -0.0267066 0.655547 0.5 +0.0133608 0.0494245 -0.0271921 0.538983 0.45638 +0.0123741 0.0494269 -0.0274814 0.54895 0.5 +0.0113761 0.0494361 -0.0277541 0.529981 0.5 +0.0103624 0.0494805 -0.028102 0.647048 0.5 +0.00936651 0.0494737 -0.0282538 0.895964 0.5 +0.00836647 0.0494746 -0.0282442 0.872377 0.5 +0.00736705 0.0494733 -0.028237 0.886248 0.5 +0.00637279 0.049483 -0.0283693 0.916659 0.5 +0.00536912 0.049521 -0.0287338 0.669271 0.5 +0.00433106 0.0496013 -0.0292546 0.67658 0.5 +0.00334453 0.0496343 -0.0297987 0.687761 0.5 +0.00235997 0.0496442 -0.0301148 0.681471 0.5 +0.00135548 0.0496637 -0.030356 0.668171 0.5 +0.000356348 0.0496808 -0.0306188 0.704826 0.5 +-0.000650637 0.0496936 -0.0307015 0.910199 0.5 +-0.00164877 0.0496874 -0.0307148 0.908538 0.5 +-0.00265109 0.0497012 -0.030809 0.908517 0.5 +-0.00364517 0.0496603 -0.0307711 0.661398 0.5 +-0.00464724 0.0496642 -0.0307417 0.641756 0.5 +-0.00564795 0.049654 -0.0307584 0.91708 0.5 +-0.00664542 0.0496313 -0.030799 0.911126 0.5 +-0.00764651 0.0496471 -0.0308946 0.902986 0.5 +-0.00865087 0.0496719 -0.030975 0.892928 0.5 +-0.00965082 0.0496857 -0.0310806 0.891089 0.5 +-0.0106511 0.0496684 -0.0311061 0.867429 0.5 +-0.0116538 0.0496371 -0.0310034 0.872769 0.5 +-0.0126494 0.0496668 -0.0310907 0.885489 0.5 +-0.0136509 0.0496769 -0.0312069 0.891141 0.5 +-0.0146513 0.0496822 -0.0311895 0.870261 0.5 +-0.0156536 0.0496375 -0.0309655 0.814372 0.5 +-0.0166725 0.0495705 -0.0306349 0.804024 0.5 +-0.0176728 0.049548 -0.0303695 0.794068 0.5 +-0.0186672 0.0495328 -0.0300927 0.547408 0.5 +-0.0196644 0.0494984 -0.0297043 0.546012 0.465236 +-0.0206569 0.0494682 -0.0293042 0.513965 0.5 +-0.0216788 0.0493937 -0.0287126 0.497977 0.5 +-0.0226625 0.0493576 -0.0281762 0.484633 0.5 +-0.0236585 0.049302 -0.027521 0.367622 0.470158 +-0.0246656 0.0492403 -0.0269082 0.430063 0.5 +-0.0256602 0.0491814 -0.0262646 0.420303 0.5 +-0.0266188 0.0490904 -0.0254391 0.544048 0.5 +-0.0276072 0.0488225 -0.0246209 0.383503 0.376754 +-0.0285577 0.048864 -0.0238529 0.290891 0.5 +-0.0668441 0.0995074 -0.0160123 0.467677 0.5 +-0.075865 0.120825 -0.00747435 0.443288 0.5 +-0.0662647 0.160967 -0.0574681 0.288781 0.5 +-0.0191383 0.16678 -0.0189611 0.779809 0.5 +-0.0834164 0.110194 0.0380909 0.842001 0.5 +-0.0348784 0.10713 -0.0202183 0.723879 0.5 +-0.0358756 0.107103 -0.0202685 0.711251 0.5 +-0.067848 0.0994807 -0.015636 0.477751 0.439611 +-0.0572639 0.0601869 -0.00219809 0.212615 0.212414 +-0.0579449 0.059547 -0.000261977 0.177947 0 +-0.0648684 0.0967433 -0.0176098 0.65886 0.420936 +-0.0655835 0.0626949 -0.00273961 0.168311 0.5 +-0.0688478 0.0994593 -0.0152611 0.501268 0.467928 +-0.0698499 0.0994423 -0.0150141 0.500146 0.469133 +-0.0435636 0.0476726 -0.0110362 0.372605 0.5 +-0.0445836 0.0476428 -0.0105653 0.456286 0.5 +-0.0455673 0.0475992 -0.010259 0.503068 0.5 +-0.0465619 0.047561 -0.00986957 0.516471 0.454731 +-0.0475605 0.047528 -0.00960427 0.529876 0.455343 +-0.0485702 0.047508 -0.00937813 0.525985 0.5 +-0.0495653 0.047469 -0.00900107 0.508335 0.5 +-0.050567 0.0474222 -0.00850865 0.492613 0.5 +-0.0515685 0.0473635 -0.00788512 0.502855 0.5 +-0.0525394 0.0472909 -0.00733632 0.561539 0.5 +-0.0535197 0.0472233 -0.00680686 0.580973 0.5 +-0.0708414 0.0994113 -0.0147342 0.472019 0.5 +-0.0679101 0.109459 -0.0121777 0.491512 0.396242 +-0.071855 0.0993885 -0.014251 0.458296 0.5 +-0.0400646 0.156235 -0.00986121 0.80637 0.5 +-0.0431187 0.159159 -0.0099383 0.445167 0.5 +-0.0764158 0.0699842 0.0233785 0.740388 0.5 +-0.0589426 0.0357407 0.0458703 0.299159 0.5 +-0.0725608 0.109721 0.0409258 0.800133 0.5 +-0.0361012 0.160724 -0.0132118 0.561456 0.5 +-0.0729585 0.134037 -0.00770509 0.511713 0.345043 +-0.0688918 0.119449 -0.00874323 0.732911 0.5 +-0.0122206 0.175683 -0.0283056 0.351615 0.5 +-0.0301123 0.163751 -0.0154896 0.587407 0.5 +-0.0321086 0.163743 -0.0150961 0.613285 0.5 +-0.0728637 0.099356 -0.013752 0.446862 0.5 +-0.0819198 0.126566 -0.00507678 0.440877 0.5 +-0.0738758 0.0993275 -0.0132564 0.42063 0.5 +0.0473411 0.0488863 -0.00367878 0.438752 0.5 +0.0463392 0.0489694 -0.00446687 0.47631 0.5 +0.045359 0.04899 -0.00489955 0.516482 0.5 +0.0443603 0.0490341 -0.0052894 0.676817 0.5 +0.0433823 0.0490357 -0.00560381 0.655293 0.5 +0.0423903 0.0490515 -0.00589339 0.898378 0.5 +0.0413777 0.0491221 -0.00619394 0.887759 0.5 +0.0403123 0.0491555 -0.00629774 0.673349 0.446438 +0.0393963 0.049102 -0.00636122 0.64493 0.468148 +0.0383972 0.0491164 -0.00642484 0.673938 0.444748 +0.0373971 0.049112 -0.00639066 0.694108 0.436501 +0.0363929 0.0490985 -0.00642376 0.695952 0.436383 +0.0353918 0.0491057 -0.00653987 0.675141 0.5 +0.0343638 0.0491351 -0.00656846 0.615627 0.43846 +0.0333812 0.0490928 -0.00645546 0.615901 0.455162 +0.0323895 0.0490788 -0.00667281 0.767224 0.5 +0.0314014 0.0491212 -0.0073371 0.670039 0.5 +-0.0748806 0.0992858 -0.0126164 0.513065 0.5 +-0.083022 0.132397 -0.0026267 0.535343 0.5 +-0.0730257 0.141351 -0.00730576 0.300962 0.402395 +-0.0758946 0.0992374 -0.0118631 0.516217 0.5 +-0.0768471 0.09916 -0.0110394 0.517189 0.456344 +0.0253836 0.0503366 -0.0210264 0.544301 0.5 +0.0243931 0.0503998 -0.0217952 0.500052 0.449679 +0.023375 0.0504685 -0.0225374 0.472736 0.5 +0.0223706 0.0505198 -0.0231651 0.571328 0.5 +0.0213976 0.0505253 -0.0237217 0.594138 0.5 +0.0203664 0.0506236 -0.0244327 0.592286 0.5 +0.0193881 0.0506007 -0.0247336 0.825933 0.5 +0.0183734 0.0506657 -0.0252113 0.824076 0.5 +0.0173702 0.0506958 -0.0254566 0.850804 0.5 +0.0163545 0.0507599 -0.025927 0.876189 0.5 +0.0153634 0.050802 -0.0265798 0.908453 0.5 +0.0143608 0.0508459 -0.0270896 0.530744 0.5 +0.0133755 0.0508647 -0.0275026 0.579182 0.5 +0.0123614 0.0509077 -0.0278502 0.558254 0.5 +0.0113576 0.0509388 -0.0282254 0.536685 0.5 +0.0103593 0.0509634 -0.0286117 0.53128 0.5 +0.00936768 0.0509673 -0.0289075 0.66426 0.463906 +0.00836584 0.0509624 -0.0290525 0.644804 0.5 +0.00735598 0.0509889 -0.0291303 0.885398 0.5 +0.00635062 0.0510121 -0.0292209 0.894151 0.5 +0.00528142 0.0509933 -0.0292119 0.702218 0.435858 +0.0043588 0.0510132 -0.0293749 0.710574 0.5 +0.00334971 0.0510613 -0.029847 0.699228 0.5 +0.00234342 0.0510926 -0.0302041 0.701124 0.5 +0.00134506 0.0511101 -0.0304682 0.68816 0.5 +0.000352424 0.0511166 -0.0306262 0.689691 0.5 +-0.000657388 0.0511382 -0.0308268 0.676548 0.5 +-0.00165332 0.0511407 -0.0309868 0.673068 0.5 +-0.00265316 0.0511482 -0.0311061 0.661552 0.463002 +-0.00365111 0.0511553 -0.0312289 0.681227 0.454282 +-0.00456935 0.0511652 -0.031379 0.678396 0.454283 +-0.00564979 0.0511569 -0.0315211 0.910524 0.5 +-0.00664745 0.0511524 -0.0316637 0.893632 0.5 +-0.00764709 0.0511598 -0.0317878 0.877486 0.5 +-0.00865103 0.0511695 -0.0319029 0.871084 0.5 +-0.00965525 0.0511768 -0.0320162 0.866134 0.5 +-0.0106623 0.0511436 -0.032067 0.84469 0.5 +-0.0116656 0.051126 -0.0319435 0.822452 0.5 +-0.0126641 0.0511309 -0.0317686 0.854835 0.5 +-0.0136632 0.0511316 -0.0317578 0.895277 0.5 +-0.0146591 0.0511639 -0.0318396 0.892936 0.5 +-0.0156738 0.0511142 -0.0317767 0.850156 0.5 +-0.0166806 0.0510876 -0.0315182 0.795408 0.5 +-0.0176768 0.0510699 -0.0312435 0.768335 0.5 +-0.0186908 0.0510113 -0.0307584 0.747181 0.5 +-0.0196774 0.0509888 -0.0303435 0.50471 0.5 +-0.0206679 0.0509474 -0.0298149 0.486143 0.452721 +-0.0216593 0.0509046 -0.0292926 0.47762 0.5 +-0.022659 0.0508417 -0.0286643 0.484293 0.5 +-0.0236572 0.0507797 -0.028024 0.471696 0.389271 +-0.0246551 0.0507167 -0.0273858 0.470515 0.412453 +-0.0256486 0.050648 -0.0266189 0.454654 0.5 +-0.0266334 0.0505574 -0.0257305 0.328259 0.448507 +-0.02765 0.0504128 -0.0240838 0.334839 0.5 +-0.0719071 0.105086 -0.0120336 0.497973 0.5 +-0.0709343 0.126767 -0.00893718 0.715154 0.4011 +-0.0281622 0.169703 -0.0179592 0.49863 0.360002 +-0.0241773 0.17417 -0.0202285 0.448845 0.5 +-0.0368781 0.107107 -0.0201846 0.726453 0.5 +-0.0378811 0.107099 -0.0200653 0.732561 0.5 +-0.0678999 0.11945 -0.00879052 0.720296 0.5 +-0.0356142 0.0493225 -0.0125317 0.104674 0.5 +-0.0366139 0.0493085 -0.0123994 0.214045 0.5 +-0.0376156 0.0492564 -0.0118933 0.25327 0.5 +-0.0386145 0.0492284 -0.011639 0.296028 0.5 +-0.0396128 0.0492137 -0.0115104 0.522576 0.5 +-0.065855 0.0967089 -0.0173163 0.481303 0.424308 +-0.0415923 0.0491549 -0.0111971 0.403252 0.5 +-0.042575 0.0491291 -0.011035 0.453096 0.5 +-0.0435801 0.0491173 -0.010788 0.580622 0.5 +-0.0445836 0.049099 -0.0105442 0.572306 0.5 +-0.0455839 0.0490621 -0.0101677 0.458497 0.5 +-0.0465703 0.0490167 -0.00974944 0.454856 0.5 +-0.0475691 0.0489734 -0.00936479 0.493232 0.5 +-0.0485754 0.0489523 -0.00913959 0.499476 0.5 +-0.0495985 0.048927 -0.00879829 0.481611 0.398597 +-0.0505791 0.0488657 -0.00826795 0.477618 0.5 +-0.0515682 0.0488001 -0.00762593 0.489238 0.5 +-0.0525522 0.0487323 -0.0069784 0.549097 0.5 +-0.0535498 0.0486673 -0.00635158 0.551339 0.5 +-0.0699133 0.123828 -0.00875488 0.773416 0.5 +-0.0589977 0.125247 -0.00779139 0.739675 0.5 +-0.0481114 0.159106 -0.00699154 0.385908 0.357475 +-0.0320868 0.159267 -0.0129293 0.833487 0.5 +-0.0330903 0.15925 -0.0128209 0.837738 0.5 +-0.0202009 0.17418 -0.0222934 0.442965 0.5 +-0.0222044 0.174173 -0.0211642 0.43761 0.5 +-0.025189 0.174162 -0.0196112 0.451372 0.322599 +-0.0388763 0.107081 -0.0200218 0.722494 0.5 +-0.0251149 0.163764 -0.0159045 0.863968 0.5 +-0.0281104 0.163768 -0.0157424 0.594338 0.5 +-0.0672891 0.178209 -0.0595336 0.27726 0.5 +-0.0421407 0.162162 -0.0108328 0.391009 0.5 +-0.0521449 0.157571 -0.00396744 0.333805 0.354164 +-0.0311481 0.174122 -0.0158676 0.478078 0.5 +0.0483255 0.0503286 -0.00380134 0.516307 0.5 +0.0473561 0.0503594 -0.00438005 0.527646 0.5 +0.0463618 0.0504062 -0.00492067 0.547342 0.5 +0.0453399 0.0504735 -0.00539794 0.551268 0.449372 +0.0443474 0.05051 -0.00579969 0.544845 0.451977 +0.0433583 0.0505545 -0.0063311 0.517259 0.5 +0.042364 0.0505846 -0.00668018 0.657892 0.5 +0.0413795 0.0505691 -0.00672382 0.911123 0.5 +0.0403869 0.0505617 -0.00671315 0.656165 0.5 +0.0393962 0.0505525 -0.00668347 0.664989 0.5 +0.0383958 0.0505315 -0.00659356 0.690672 0.5 +0.0373944 0.0505276 -0.00658166 0.715273 0.5 +0.0363875 0.0505227 -0.00658574 0.694463 0.5 +0.0353576 0.0505704 -0.00670224 0.666717 0.5 +0.0343607 0.0505331 -0.00657713 0.63227 0.5 +0.0333583 0.0505553 -0.00686804 0.77212 0.5 +0.0323993 0.0505614 -0.00746951 0.64863 0.5 +-0.0639239 0.116652 -0.0103062 0.562702 0.5 +-0.0710495 0.141325 -0.00813095 0.340946 0.5 +-0.0480757 0.15465 -0.00633475 0.444432 0.5 +-0.0911264 0.115738 0.024682 0.752784 0.5 +-0.0629237 0.112473 -0.0138486 0.62747 0.5 +0.0263294 0.0517767 -0.02097 0.533329 0.5 +0.0253567 0.0518232 -0.0216362 0.55791 0.5 +0.024383 0.0518665 -0.0223004 0.588503 0.5 +0.0234224 0.0519071 -0.0231048 0.526856 0.5 +0.0224205 0.0519815 -0.0241272 0.635903 0.5 +0.0213555 0.0521216 -0.0251867 0.619084 0.5 +0.0203738 0.0521374 -0.0257342 0.626958 0.5 +0.0193833 0.052146 -0.0261511 0.862899 0.5 +0.0183728 0.0521803 -0.0265242 0.862711 0.5 +0.0173644 0.052219 -0.0267492 0.864329 0.5 +0.0163666 0.0522247 -0.0268816 0.897384 0.5 +0.0153438 0.0522442 -0.0271619 0.646092 0.473932 +0.0143568 0.0522918 -0.0274834 0.652907 0.5 +0.0133618 0.0523173 -0.0278769 0.676329 0.5 +0.0123622 0.0523525 -0.0283928 0.553453 0.455618 +0.0113708 0.0523816 -0.0287924 0.552912 0.5 +0.0103602 0.0524141 -0.0291489 0.536669 0.47416 +0.0093588 0.0524416 -0.0295377 0.52339 0.5 +0.0083541 0.0524293 -0.0297113 0.673176 0.452393 +0.00734362 0.0524803 -0.0298755 0.906516 0.5 +0.00634478 0.0524665 -0.0299091 0.880363 0.5 +0.0053433 0.0524636 -0.0297405 0.888724 0.5 +0.00435638 0.0524337 -0.0297062 0.683792 0.5 +0.0033475 0.0524625 -0.0299019 0.692058 0.5 +0.00234532 0.0524899 -0.0301138 0.682026 0.5 +0.00134414 0.0524973 -0.030237 0.687029 0.5 +0.000336625 0.0525175 -0.0304496 0.680844 0.5 +-0.000658033 0.0525337 -0.0307361 0.700823 0.5 +-0.00165167 0.0525486 -0.0310164 0.687692 0.5 +-0.00266028 0.0525834 -0.0313625 0.689527 0.5 +-0.00365126 0.0525899 -0.0316543 0.687032 0.5 +-0.00465552 0.0526099 -0.031899 0.654259 0.5 +-0.00564997 0.0526431 -0.0322774 0.66478 0.462479 +-0.00665267 0.0526646 -0.0325345 0.51892 0.458416 +-0.00766666 0.0527037 -0.0328501 0.522655 0.5 +-0.00864037 0.0526884 -0.0330777 0.52563 0.474901 +-0.00965605 0.0527028 -0.0331963 0.643231 0.460284 +-0.0106582 0.0527176 -0.0332954 0.633173 0.464497 +-0.0116753 0.0526919 -0.0331734 0.583031 0.466659 +-0.012672 0.0526484 -0.0327744 0.799412 0.5 +-0.0136738 0.0526181 -0.0325173 0.85416 0.5 +-0.0146765 0.0526113 -0.0325234 0.885494 0.5 +-0.0156786 0.0526029 -0.032522 0.84893 0.5 +-0.0166832 0.0525719 -0.0322771 0.552977 0.5 +-0.0176845 0.0525387 -0.0318817 0.533883 0.47478 +-0.0186801 0.0525094 -0.0314832 0.514757 0.5 +-0.0196836 0.0524593 -0.0309769 0.503943 0.5 +-0.0206715 0.0524183 -0.0304469 0.467694 0.5 +-0.0216814 0.0523409 -0.0297011 0.45674 0.5 +-0.0226744 0.0522819 -0.0290541 0.464267 0.5 +-0.0236648 0.0522261 -0.0284113 0.468498 0.418256 +-0.0246606 0.0521655 -0.0277657 0.483968 0.5 +-0.0256526 0.0520956 -0.0269974 0.452371 0.5 +-0.0729034 0.123797 -0.00826534 0.682071 0.5 +-0.0182092 0.177147 -0.0243125 0.317326 0.5 +-0.0724664 0.0678961 0.0260135 0.665323 0.239285 +-0.0191702 0.169734 -0.0206461 0.749412 0.5 +-0.0783599 0.0708413 0.0204513 0.787875 0.5 +-0.0672347 0.158081 -0.05503 0.395143 0.5 +-0.0326228 0.0506668 -0.0115219 0.102172 0.5 +-0.0336201 0.0505969 -0.0107597 0.160165 0.5 +-0.0346163 0.0505906 -0.0107587 0.317189 0.5 +-0.0356179 0.0505976 -0.0108834 0.329322 0.5 +-0.0366198 0.0505806 -0.010756 0.526101 0.5 +-0.0376189 0.0505906 -0.0108802 0.55705 0.5 +-0.0386172 0.0505956 -0.0110053 0.576514 0.5 +-0.0396188 0.0505923 -0.0110041 0.778098 0.5 +-0.0406195 0.0505975 -0.0111291 0.79253 0.5 +-0.0416192 0.0505822 -0.0110011 0.796709 0.5 +-0.0425978 0.0505652 -0.0109174 0.526711 0.5 +-0.0435905 0.0505542 -0.0107756 0.543241 0.5 +-0.0446047 0.0505366 -0.0105481 0.636429 0.372142 +-0.0456035 0.0504974 -0.010193 0.41447 0.5 +-0.0465781 0.0504461 -0.00966731 0.420706 0.421464 +-0.0475733 0.0504004 -0.00924022 0.435699 0.5 +-0.0485728 0.0503685 -0.00899002 0.608545 0.5 +-0.0495787 0.0503337 -0.00863311 0.444646 0.5 +-0.0505803 0.0502828 -0.00813802 0.435391 0.5 +-0.0516022 0.0502173 -0.00741774 0.487413 0.5 +-0.0525584 0.0501546 -0.00685551 0.536363 0.5 +-0.0535468 0.0500774 -0.00609453 0.527818 0.5 +-0.0729009 0.105047 -0.011511 0.628695 0.5 +-0.0709159 0.125294 -0.00875352 0.74252 0.5 +-0.0251912 0.178602 -0.0188241 0.482339 0.5 +-0.0350797 0.159271 -0.0126349 0.832829 0.5 +-0.0181879 0.174194 -0.0234207 0.597871 0.5 +-0.0398786 0.107079 -0.0200332 0.702401 0.5 +-0.0408758 0.107069 -0.0201235 0.684351 0.5 +-0.0231203 0.163764 -0.0160465 0.822907 0.5 +-0.0649059 0.116607 -0.0100071 0.569645 0.462987 +-0.066267 0.176761 -0.0601056 0.353887 0.421515 +-0.0418773 0.107078 -0.0201516 0.681359 0.5 +-0.0738862 0.104992 -0.0108534 0.618107 0.5 +0.0503129 0.0516868 -0.00299828 0.54574 0.5 +-0.0668489 0.0966702 -0.0167929 0.462813 0.5 +0.0483193 0.0518215 -0.00445791 0.586772 0.5 +0.0473148 0.0518659 -0.00495567 0.563401 0.454141 +0.0463401 0.0518943 -0.00540594 0.571993 0.5 +0.045327 0.0519476 -0.00589943 0.575737 0.5 +0.044345 0.0519693 -0.00630996 0.541067 0.5 +0.0433486 0.0519969 -0.00665823 0.698648 0.5 +0.0423653 0.0519948 -0.00681796 0.675688 0.5 +0.0413782 0.0519867 -0.00685663 0.655234 0.5 +0.0403895 0.0519763 -0.00684208 0.659713 0.5 +0.0393949 0.0519685 -0.00680892 0.692895 0.5 +0.0383894 0.0519545 -0.00670373 0.693096 0.5 +0.0373767 0.0519575 -0.00666499 0.691778 0.5 +0.0363451 0.0519755 -0.00662669 0.687163 0.5 +0.0353118 0.0520079 -0.00674902 0.683751 0.5 +0.0343592 0.0519767 -0.00689954 0.625572 0.5 +0.0334766 0.0519565 -0.00767966 0.409894 0.46521 +-0.0301257 0.165235 -0.016018 0.844482 0.5 +-0.0661875 0.165349 -0.0586121 0.446339 0.5 +-0.0639427 0.125311 -0.00880074 0.81894 0.5 +-0.0351889 0.171161 -0.0140358 0.424492 0.5 +0.00813236 0.110171 -0.0197068 0.851317 0.5 +-0.0550327 0.0674609 0.0370807 0.577099 0.5 +0.02636 0.0531741 -0.0208871 0.628275 0.5 +0.0252695 0.0532659 -0.021679 0.653575 0.5 +0.0243768 0.0533073 -0.022554 0.568727 0.5 +0.0233991 0.0534151 -0.0239637 0.52345 0.473694 +0.0223344 0.0535713 -0.0254238 0.660211 0.5 +0.0213375 0.0536353 -0.0261911 0.661952 0.5 +0.0203456 0.053671 -0.0267089 0.650498 0.5 +0.0193574 0.0537071 -0.027254 0.532778 0.44815 +0.018368 0.0537078 -0.0275601 0.671761 0.5 +0.0173629 0.0537245 -0.0278081 0.657261 0.5 +0.0163546 0.0537375 -0.0279072 0.645537 0.5 +0.0153464 0.0537553 -0.0279934 0.908604 0.5 +0.0143433 0.0537792 -0.0282321 0.927662 0.5 +0.0133781 0.0537725 -0.0285433 0.65168 0.469416 +0.0122607 0.0538397 -0.0290819 0.568216 0.431115 +0.0113649 0.0538487 -0.0294289 0.555141 0.435107 +0.0103564 0.0538895 -0.0297771 0.563252 0.431075 +0.00935764 0.0539048 -0.0300706 0.562896 0.481807 +0.00834583 0.0539265 -0.0302958 0.688621 0.5 +0.00733914 0.0539337 -0.0304234 0.654444 0.5 +0.0063341 0.0539359 -0.0303914 0.628996 0.5 +0.00533532 0.0538992 -0.0301758 0.611749 0.5 +0.00434097 0.053874 -0.0300717 0.671073 0.5 +0.00333411 0.0539266 -0.0303683 0.659672 0.5 +0.00233442 0.0539469 -0.0306143 0.925135 0.5 +0.00134052 0.0539375 -0.0306386 0.91185 0.5 +0.000343862 0.0539275 -0.0306641 0.92852 0.5 +-0.000664914 0.0539666 -0.0309917 0.92412 0.5 +-0.00165753 0.05399 -0.0314052 0.655208 0.5 +-0.00265601 0.0540246 -0.0319128 0.680472 0.452127 +-0.00366205 0.0540631 -0.0322696 0.685795 0.453885 +-0.00465613 0.0540645 -0.0324247 0.67582 0.5 +-0.00566591 0.0540919 -0.0326394 0.696605 0.5 +-0.00666902 0.0541115 -0.0328784 0.698389 0.5 +-0.00766545 0.0541253 -0.0331554 0.71449 0.5 +-0.00866157 0.0541436 -0.0334268 0.551599 0.5 +-0.00967078 0.0541668 -0.0336446 0.681069 0.5 +-0.0106706 0.054151 -0.0336931 0.666081 0.5 +-0.0116778 0.0541503 -0.0336719 0.634041 0.461576 +-0.0126769 0.0541386 -0.0335166 0.856637 0.5 +-0.0136792 0.0541002 -0.0332811 0.857755 0.5 +-0.014682 0.0540945 -0.0332776 0.880906 0.5 +-0.0156753 0.0541059 -0.0332392 0.852534 0.5 +-0.0166996 0.0540293 -0.0329391 0.565881 0.466527 +-0.0176729 0.0540415 -0.0325983 0.552506 0.5 +-0.0186814 0.0539839 -0.0321072 0.539693 0.5 +-0.0196863 0.0539295 -0.0316066 0.507341 0.5 +-0.0206904 0.0538665 -0.0309758 0.498114 0.5 +-0.0216794 0.0538141 -0.0303252 0.481141 0.5 +-0.0226655 0.0537608 -0.0296706 0.467107 0.5 +-0.0236707 0.0536853 -0.0289139 0.458029 0.5 +-0.0246722 0.05361 -0.0281576 0.474867 0.5 +0.00111147 0.110147 -0.0201294 0.777878 0.5 +-0.0600161 0.129661 -0.00742185 0.668042 0.474317 +-0.0222042 0.178612 -0.0212581 0.362491 0.469736 +-0.0220397 0.0354083 0.0523916 0.871775 0.5 +-0.0201696 0.169725 -0.0202727 0.792935 0.5 +-0.0142152 0.17272 -0.0253585 0.618946 0.5 +-0.0759552 0.133992 -0.00682355 0.409592 0.5 +-0.0326268 0.0520227 -0.0107626 0.268871 0.5 +-0.033621 0.0519746 -0.0102559 0.383264 0.5 +-0.0346207 0.0519685 -0.0102527 0.592613 0.5 +-0.0356207 0.0519761 -0.0103771 0.584392 0.5 +-0.0366224 0.0519804 -0.0105023 0.591146 0.5 +-0.0376227 0.0519888 -0.0106273 0.78985 0.5 +-0.0386238 0.0519962 -0.0107523 0.79057 0.5 +-0.0396241 0.0520021 -0.0108773 0.793094 0.5 +-0.0406241 0.0520111 -0.0110025 0.994534 0.5 +-0.0416225 0.0520166 -0.011127 0.999213 0.5 +-0.0426178 0.0520018 -0.0109441 0.578529 0.5 +-0.0436018 0.0519969 -0.0109067 0.61807 0.5 +-0.0446011 0.0519723 -0.0106716 0.45256 0.5 +-0.0456126 0.0519231 -0.010201 0.421066 0.5 +-0.0466073 0.0518764 -0.00969859 0.39702 0.443593 +-0.0475855 0.0518372 -0.00929506 0.396788 0.452069 +-0.0485842 0.0517801 -0.00897412 0.402755 0.38548 +-0.0496209 0.0517545 -0.00857532 0.511518 0.5 +-0.0506189 0.0517055 -0.00806622 0.549325 0.5 +-0.0515646 0.0516091 -0.00736491 0.438876 0.448081 +-0.0525648 0.0515684 -0.00660684 0.47791 0.5 +-0.0719293 0.126758 -0.00881076 0.649179 0.40107 +-0.0671422 0.159475 -0.0561779 0.339717 0.359564 +-0.060985 0.168641 -0.0594898 0.40121 0.5 +-0.0370838 0.159234 -0.0122889 0.821873 0.5 +-0.0111259 0.174182 -0.0282833 0.349545 0.5 +-0.0211162 0.1638 -0.0163957 0.713989 0.5 +-0.0785368 0.0694183 0.0145853 0.75134 0.5 +-0.026172 0.174158 -0.0190728 0.367021 0.5 +-0.0828745 0.119161 -0.00328383 0.554557 0.5 +-0.0678764 0.117979 -0.00873338 0.648617 0.5 +-0.0678387 0.0966346 -0.0163917 0.628344 0.5 +0.050335 0.0531616 -0.00370253 0.591619 0.5 +0.0493343 0.0532247 -0.0043679 0.585303 0.38417 +0.0483353 0.0532726 -0.00489034 0.587482 0.5 +0.0473212 0.0533258 -0.00537345 0.575685 0.470222 +0.046334 0.0533506 -0.00578803 0.581067 0.5 +0.0453353 0.0533808 -0.00616451 0.566477 0.480271 +0.0443487 0.0533892 -0.00643258 0.555267 0.5 +0.043354 0.053395 -0.00666154 0.721143 0.5 +0.04237 0.0533961 -0.00679891 0.704562 0.5 +0.0413792 0.0533854 -0.00680998 0.663602 0.5 +0.0403849 0.0533789 -0.00673496 0.645483 0.5 +0.0393899 0.0533602 -0.00667374 0.661591 0.5 +0.0383695 0.0533606 -0.00654853 0.662528 0.5 +0.0373499 0.0533605 -0.00643641 0.671789 0.5 +0.0362915 0.0534119 -0.00658438 0.719442 0.5 +0.0353371 0.0534224 -0.00701071 0.82991 0.5 +-0.0291607 0.171183 -0.0175503 0.462498 0.5 +-0.0864944 0.112209 0.0250023 0.678971 0.5 +-0.0642284 0.165303 -0.0599757 0.293271 0.5 +-0.0568734 0.0358081 0.0462717 0.373299 0.5 +-0.0748829 0.104948 -0.0102086 0.621645 0.5 +-0.0489879 0.148715 -0.00337283 0.532433 0.5 +-0.0368889 0.109941 -0.0191779 0.665418 0.5 +-0.0689104 0.122371 -0.00889897 0.771269 0.5 +0.0263272 0.0545944 -0.0208638 0.693284 0.5 +-0.0688283 0.0966095 -0.0161149 0.675616 0.5 +-0.0698935 0.122364 -0.00881274 0.747878 0.5 +0.0233509 0.0549381 -0.0249484 0.556643 0.5 +0.0223236 0.0550419 -0.0260567 0.576577 0.5 +0.0213579 0.055075 -0.0266156 0.566219 0.5 +0.0203316 0.0551325 -0.0272049 0.555393 0.470329 +0.0193474 0.0551603 -0.0276297 0.567331 0.5 +0.0183451 0.0551894 -0.0280076 0.54495 0.5 +0.0173468 0.0552065 -0.0282783 0.688238 0.5 +0.0163504 0.0552051 -0.0284322 0.67583 0.456703 +0.0153369 0.0552331 -0.0286287 0.927446 0.5 +0.0143485 0.0552312 -0.0288146 0.652597 0.469805 +0.0133284 0.055284 -0.0292269 0.694271 0.5 +0.0123553 0.0552818 -0.0294499 0.564173 0.483714 +0.0113495 0.0553023 -0.0296776 0.737325 0.5 +0.0103374 0.0553349 -0.0300221 0.750975 0.5 +0.00934189 0.0553527 -0.0303034 0.740458 0.5 +0.00833741 0.055373 -0.0305597 0.696883 0.5 +0.00733312 0.0553775 -0.0306811 0.679789 0.5 +0.00633113 0.0553726 -0.0306713 0.659122 0.5 +0.00533357 0.055349 -0.0305496 0.64632 0.5 +0.00433576 0.055339 -0.0305463 0.6686 0.457415 +0.00332905 0.0553943 -0.0309954 0.916214 0.5 +0.00233104 0.0554199 -0.0313859 0.919557 0.5 +0.00133514 0.0554198 -0.0315391 0.891246 0.5 +0.000334373 0.0554042 -0.031412 0.87671 0.5 +-0.000679533 0.0554388 -0.0315999 0.924859 0.5 +-0.00167125 0.0554598 -0.0320096 0.67023 0.5 +-0.00266679 0.0554838 -0.0324138 0.684394 0.5 +-0.00367406 0.0555102 -0.0326331 0.680397 0.5 +-0.00467238 0.0555139 -0.0327809 0.691284 0.5 +-0.00566586 0.0555015 -0.0328252 0.679985 0.5 +-0.00666974 0.0555272 -0.0330407 0.675414 0.5 +-0.00767881 0.0555674 -0.03337 0.684798 0.5 +-0.00866441 0.055565 -0.0335626 0.686736 0.444419 +-0.00967937 0.0555867 -0.0337759 0.689593 0.436334 +-0.0106808 0.0555967 -0.0338825 0.688991 0.5 +-0.0116788 0.0555838 -0.0339192 0.677616 0.5 +-0.0126796 0.0555759 -0.033924 0.64528 0.5 +-0.0136846 0.0555659 -0.0339274 0.635474 0.5 +-0.014689 0.0555534 -0.0339367 0.88232 0.5 +-0.0156885 0.0555599 -0.0339026 0.848276 0.5 +-0.0166951 0.0555255 -0.0336624 0.792839 0.5 +-0.0176989 0.0554882 -0.03328 0.539633 0.5 +-0.0186879 0.0554617 -0.0328673 0.533014 0.5 +-0.0196701 0.0554437 -0.0324495 0.525581 0.5 +-0.0206991 0.0553418 -0.0317435 0.484158 0.420275 +-0.0216946 0.055283 -0.031103 0.470472 0.5 +-0.0226761 0.0552382 -0.0304344 0.470312 0.5 +-0.0236788 0.0551648 -0.029679 0.473843 0.5 +-0.0246949 0.0550734 -0.0288078 0.488371 0.5 +-0.0718855 0.122345 -0.00846405 0.697837 0.5 +-0.029123 0.166739 -0.016877 0.782045 0.5 +-0.0709583 0.135514 -0.00804855 0.533107 0.466083 +-0.0531001 0.154605 -0.00338641 0.417637 0.5 +-0.0209654 0.035527 0.0525237 0.896297 0.5 +-0.0291548 0.169699 -0.0175574 0.476592 0.5 +-0.0600079 0.128191 -0.00754937 0.673164 0.5 +-0.0326324 0.0534241 -0.0105104 0.288381 0.5 +-0.0336295 0.0533957 -0.0102549 0.594813 0.5 +-0.0346283 0.0533938 -0.0102529 0.798897 0.5 +-0.0356288 0.0533886 -0.010251 0.79326 0.5 +-0.0366299 0.0534085 -0.0105028 0.783733 0.5 +-0.0376274 0.0534153 -0.0106276 0.992614 0.5 +-0.0386286 0.0534191 -0.0107521 0.979625 0.5 +-0.0396286 0.0534411 -0.011004 0.988881 0.5 +-0.0406319 0.0534345 -0.0110028 0.994141 0.5 +-0.0416287 0.0534443 -0.0111279 0.987199 0.5 +-0.0426252 0.0534503 -0.0112074 0.554202 0.5 +-0.0436286 0.0534388 -0.0110764 0.436415 0.456196 +-0.0446124 0.0534121 -0.0108089 0.440056 0.5 +-0.0456135 0.053373 -0.0104441 0.390004 0.5 +-0.04663 0.0533425 -0.0102323 0.906079 0.5 +-0.0476286 0.0532889 -0.00972253 0.896916 0.5 +-0.0486234 0.0532712 -0.0094518 0.492111 0.454246 +-0.0496217 0.0532216 -0.00894483 0.497317 0.425619 +-0.0506187 0.0531538 -0.00831388 0.518022 0.5 +-0.0516111 0.0530832 -0.00753985 0.584334 0.5 +-0.0525768 0.0530264 -0.00686565 0.613834 0.5 +-0.0649158 0.115218 -0.010913 0.58025 0.437066 +-0.0669175 0.115159 -0.00990572 0.566147 0.5 +-0.0632016 0.165278 -0.0601981 0.324796 0.444464 +-0.04111 0.159177 -0.0108205 0.636721 0.5 +-0.012216 0.174205 -0.0276647 0.375263 0.5 +-0.0174829 0.0365879 0.0522725 0.356533 0.5 +-0.0894731 0.112826 0.0381953 0.466108 0.5 +-0.0769168 0.123731 -0.00719316 0.399101 0.451746 +-0.0511234 0.159083 -0.0045978 0.453494 0.5 +-0.0758756 0.104904 -0.00955908 0.592677 0.5 +-0.0698286 0.0965949 -0.0159812 0.631721 0.5 +0.0512982 0.0545874 -0.00353058 0.614241 0.436996 +0.050316 0.0546413 -0.00421167 0.608439 0.5 +0.0493081 0.0547033 -0.00484617 0.603336 0.5 +0.0483233 0.0547304 -0.00526262 0.605991 0.473038 +0.0473276 0.0547587 -0.00564531 0.599878 0.5 +0.0463433 0.054773 -0.00593764 0.750684 0.5 +0.0453586 0.0547792 -0.00610681 0.719094 0.5 +0.0443577 0.0547836 -0.00632411 0.695227 0.5 +0.043364 0.0547822 -0.00644446 0.685014 0.5 +0.0423718 0.0547731 -0.00653415 0.675431 0.5 +0.0413802 0.0547717 -0.00646982 0.641417 0.5 +0.0403843 0.0547484 -0.00641578 0.574642 0.5 +0.0393677 0.0547517 -0.00623241 0.556017 0.5 +0.038354 0.0547461 -0.00609927 0.591008 0.5 +0.0372666 0.0547889 -0.00619261 0.626377 0.5 +0.0364026 0.0547846 -0.00674979 0.597233 0.5 +-0.0768582 0.104852 -0.0089026 0.569752 0.5 +-0.0108397 0.175678 -0.0290324 0.471426 0.5 +-0.0127272 0.0348945 -0.0256797 0.189287 0.5 +-0.0702558 0.152263 -0.0463745 0.213477 0.5 +-0.0673815 0.0659915 0.0287149 0.560179 0.5 +-0.0609083 0.0612023 0.0236586 0.578977 0.5 +-0.0428742 0.10707 -0.020141 0.662082 0.5 +-0.0438868 0.107083 -0.0199439 0.510302 0.441387 +-0.00832726 0.0349131 -0.024554 0.220658 0.5 +-0.0778811 0.104813 -0.00803583 0.552918 0.5 +-0.0098895 0.107351 -0.0224128 0.651717 0.5 +-0.0718881 0.12088 -0.00850233 0.681551 0.5 +0.0233296 0.0564006 -0.0254415 0.612796 0.5 +0.0223237 0.0564658 -0.026195 0.61139 0.5 +0.0213412 0.0565052 -0.0267347 0.597752 0.5 +0.0203586 0.0565379 -0.0271575 0.604307 0.458513 +0.019355 0.0565693 -0.0275356 0.593103 0.5 +0.0183336 0.0566072 -0.0279953 0.575349 0.5 +0.0173308 0.0566344 -0.0283721 0.568066 0.5 +0.016338 0.0566541 -0.0286494 0.709053 0.5 +0.0153242 0.0566704 -0.0288596 0.661236 0.5 +0.0143357 0.0566765 -0.0290221 0.706429 0.5 +0.0133515 0.0566849 -0.029233 0.755398 0.5 +0.0123244 0.0567269 -0.0296218 0.570005 0.5 +0.0113407 0.0567362 -0.0298085 0.602031 0.489059 +0.0103421 0.0567446 -0.0299462 0.611112 0.489182 +0.00933423 0.0567711 -0.0303022 0.574672 0.5 +0.00833271 0.0567886 -0.0305627 0.710141 0.5 +0.00733204 0.0567933 -0.0307054 0.693196 0.5 +0.00633058 0.0567988 -0.0308016 0.676056 0.5 +0.00534315 0.0567731 -0.0307134 0.690932 0.5 +0.00432629 0.0568097 -0.0310178 0.645106 0.5 +0.00332264 0.0568618 -0.0316357 0.911705 0.5 +0.00231866 0.0568936 -0.0320023 0.932341 0.5 +0.00132582 0.0568889 -0.0321653 0.921945 0.5 +0.000325641 0.0568761 -0.0321896 0.898303 0.5 +-0.000675964 0.056864 -0.0322097 0.644815 0.468698 +-0.00166807 0.0568963 -0.03242 0.679635 0.456512 +-0.00267325 0.0569172 -0.0326724 0.687011 0.452802 +-0.00367712 0.0569332 -0.0329252 0.667528 0.467043 +-0.00467074 0.0569349 -0.0330586 0.683027 0.45503 +-0.00567144 0.0569411 -0.0332111 0.909911 0.5 +-0.0066784 0.0569449 -0.0331859 0.918173 0.5 +-0.0076798 0.0569676 -0.0334142 0.924043 0.5 +-0.00868086 0.056987 -0.0336771 0.686881 0.5 +-0.00968443 0.0570101 -0.0338896 0.69504 0.5 +-0.0106831 0.0570151 -0.0340192 0.702655 0.5 +-0.0116803 0.0570084 -0.0342026 0.69983 0.5 +-0.0126851 0.0570335 -0.0344182 0.650538 0.5 +-0.0136861 0.0570325 -0.0345667 0.909803 0.5 +-0.0146932 0.0570315 -0.0346956 0.881781 0.5 +-0.015693 0.057044 -0.0346551 0.85105 0.5 +-0.0166991 0.0570076 -0.034416 0.562584 0.5 +-0.0177034 0.0569685 -0.0340386 0.54636 0.463714 +-0.0186964 0.0569405 -0.033635 0.546134 0.5 +-0.0197019 0.0568866 -0.0331333 0.545386 0.5 +-0.0206969 0.0568414 -0.0326165 0.528863 0.5 +-0.021696 0.0567795 -0.0319795 0.497971 0.5 +-0.0226771 0.0567339 -0.0313199 0.477831 0.5 +-0.0236825 0.0566574 -0.0305632 0.476826 0.5 +-0.0708385 0.0965734 -0.0156262 0.462502 0.438008 +-0.0677903 0.180834 -0.0585489 0.253189 0.425229 +-0.0719625 0.135504 -0.00769556 0.517338 0.5 +-0.0390578 0.156263 -0.0100859 0.810258 0.5 +-0.0600535 0.138395 -0.00620678 0.65902 0.472972 +-0.0685768 0.0699128 0.0338326 0.561097 0.5 +-0.0301445 0.169695 -0.0171502 0.44952 0.5 +0.0111461 0.101633 -0.021979 0.834638 0.5 +-0.0326395 0.0549161 -0.0112709 0.232548 0.5 +-0.0336359 0.0548461 -0.0105101 0.559572 0.5 +-0.0346346 0.0548282 -0.01038 0.787382 0.5 +-0.0356376 0.0548341 -0.0105043 0.782388 0.5 +-0.0366336 0.0548529 -0.010755 0.976333 0.5 +-0.0376334 0.0548474 -0.0107543 0.98486 0.5 +-0.0386347 0.0548667 -0.0110053 0.975359 0.5 +-0.0396388 0.0548721 -0.0111311 0.989729 0.5 +-0.0406365 0.0548831 -0.0112562 0.984282 0.5 +-0.0416396 0.0548863 -0.0113812 0.99018 0.5 +-0.0426358 0.0548841 -0.0113796 0.989781 0.5 +-0.0436275 0.0548777 -0.0111987 0.5844 0.5 +-0.0446392 0.0548635 -0.0110876 0.571097 0.421241 +-0.0456223 0.0548403 -0.0108081 0.417893 0.442443 +-0.0466235 0.0548092 -0.0105711 0.579301 0.5 +-0.0476209 0.0547841 -0.0103184 0.591162 0.5 +-0.0486159 0.0547593 -0.0100622 0.548717 0.5 +-0.0496187 0.054694 -0.00943972 0.365758 0.5 +-0.0506072 0.0546369 -0.00878713 0.380493 0.5 +-0.0516224 0.0545433 -0.00792825 0.405917 0.5 +-0.0525943 0.0544911 -0.00726112 0.431447 0.466224 +0.0101437 0.101615 -0.0217271 0.819534 0.5 +-0.0718229 0.0965348 -0.0152102 0.449266 0.5 +-0.0211471 0.0377711 0.0538261 0.29667 0.5 +-0.0401214 0.159176 -0.0112287 0.47798 0.5 +-0.0132305 0.174198 -0.0268981 0.412081 0.5 +-0.0186635 0.0360947 0.0525267 0.435136 0.5 +-0.0551833 0.07213 0.0401196 0.702856 0.5 +-0.0570027 0.145725 -0.00171879 0.788639 0.5 +-0.0770006 0.139838 -0.00569476 0.451901 0.5 +-0.0644637 0.0743344 0.0396953 0.579207 0.5 +-0.0728436 0.0965116 -0.0147387 0.450172 0.5 +0.052283 0.0559902 -0.003254 0.611478 0.5 +0.051337 0.0560222 -0.00385605 0.647071 0.5 +0.0502975 0.0560957 -0.00457555 0.631312 0.5 +0.0492985 0.0561391 -0.00508332 0.66627 0.5 +0.0483282 0.0561556 -0.00540695 0.629727 0.5 +0.0473464 0.0561746 -0.0057008 0.758034 0.5 +0.0463445 0.0561751 -0.00589814 0.726223 0.5 +0.0453589 0.0561811 -0.00597324 0.674013 0.5 +0.0443653 0.0561662 -0.00597205 0.674183 0.5 +0.0433693 0.0561672 -0.00598915 0.666266 0.5 +0.0423724 0.056151 -0.00596664 0.637905 0.5 +0.0413778 0.0561233 -0.00592276 0.54064 0.5 +0.0403616 0.0561214 -0.00579676 0.452541 0.5 +0.0393484 0.0561243 -0.00568756 0.495407 0.5 +0.0381487 0.056188 -0.00571384 0.566986 0.246077 +0.0373902 0.0561474 -0.00613784 0.533474 0.435673 +-0.0738591 0.0964804 -0.0142486 0.424923 0.5 +-0.079955 0.130987 -0.00485489 0.37999 0.437456 +-0.0659714 0.070335 0.0357803 0.501893 0.475881 +-0.0223475 0.0360366 0.0535038 0.873205 0.5 +-0.0627763 0.0614875 0.0230054 0.414498 0.460603 +-0.0618627 0.061311 0.023361 0.423005 0.463799 +-0.0448823 0.107056 -0.0197924 0.500706 0.5 +-0.0569949 0.126695 -0.00683103 0.733797 0.5 +-0.0579896 0.126711 -0.00710506 0.774274 0.5 +-0.0748494 0.0964384 -0.0137204 0.413272 0.5 +-0.062999 0.13114 -0.0082084 0.648664 0.488321 +-0.0758579 0.0963896 -0.0129621 0.518013 0.5 +-0.0258791 0.105846 -0.022482 0.654058 0.5 +0.0233313 0.0578274 -0.025582 0.663378 0.5 +0.0223386 0.0578809 -0.0262309 0.648773 0.5 +0.0213573 0.057915 -0.0266602 0.614225 0.5 +0.0203532 0.0579488 -0.0270415 0.632452 0.5 +0.0193386 0.0579734 -0.027391 0.621112 0.472639 +0.0183304 0.0579992 -0.0277502 0.604924 0.5 +0.0173244 0.0580274 -0.0281164 0.582359 0.5 +0.0163249 0.0580554 -0.0285 0.567699 0.5 +0.0153317 0.0580768 -0.0287753 0.548703 0.5 +0.0143467 0.0580862 -0.0289605 0.558917 0.477693 +0.0133351 0.058103 -0.0291864 0.756761 0.5 +0.0123335 0.0581189 -0.0294366 0.795874 0.5 +0.0113242 0.0581457 -0.0297724 0.620394 0.5 +0.0103353 0.0581557 -0.0299403 0.604146 0.489538 +0.00932784 0.0581716 -0.0301717 0.752819 0.5 +0.0083246 0.0581885 -0.03043 0.752713 0.5 +0.00733033 0.058195 -0.0305865 0.738688 0.5 +0.00633738 0.0581963 -0.0307089 0.718439 0.5 +0.00534103 0.0581999 -0.0308279 0.554459 0.480064 +0.00432828 0.0582523 -0.0314184 0.541184 0.5 +0.00330684 0.0583228 -0.0321215 0.531755 0.5 +0.00231832 0.0583343 -0.0324165 0.694014 0.453361 +0.00133085 0.058325 -0.0325937 0.671154 0.5 +0.000324051 0.0583269 -0.0327186 0.657017 0.5 +-0.000687654 0.0583509 -0.0327859 0.668153 0.5 +-0.00168424 0.0583535 -0.0329231 0.681521 0.5 +-0.00267903 0.0583624 -0.0332032 0.660718 0.5 +-0.00368236 0.0583856 -0.0334327 0.646159 0.5 +-0.00468764 0.0584239 -0.0337898 0.919727 0.5 +-0.0056922 0.0584499 -0.034018 0.893559 0.5 +-0.00668986 0.0584241 -0.0339312 0.873847 0.5 +-0.00768539 0.0584014 -0.0338334 0.905588 0.5 +-0.00868753 0.0584178 -0.0339256 0.664657 0.5 +-0.00968478 0.0584187 -0.0340646 0.682625 0.5 +-0.010684 0.0584354 -0.034314 0.66928 0.5 +-0.0116935 0.0584778 -0.0346471 0.649421 0.472874 +-0.0126939 0.0585083 -0.0350263 0.928956 0.5 +-0.0136906 0.0585033 -0.0353384 0.643921 0.5 +-0.014696 0.0585192 -0.0354314 0.628527 0.5 +-0.0156999 0.0584946 -0.0353551 0.609698 0.47048 +-0.0167051 0.0584876 -0.0351851 0.578464 0.5 +-0.0177087 0.0584461 -0.0348025 0.551446 0.5 +-0.0187146 0.058392 -0.0343021 0.554827 0.5 +-0.0197122 0.0583602 -0.0339067 0.551982 0.432608 +-0.0207287 0.058287 -0.0332963 0.525533 0.5 +-0.0217072 0.0582569 -0.0327502 0.528093 0.5 +-0.0226723 0.0582322 -0.0321918 0.51439 0.5 +-0.0237128 0.058121 -0.0313582 0.493089 0.5 +-0.0682308 0.180685 -0.0584278 0.251064 0.5 +-0.0530196 0.144246 -0.000696127 0.546175 0.5 +-0.0458982 0.107069 -0.0194756 0.668669 0.416034 +-0.0451284 0.159142 -0.00893675 0.4182 0.5 +-0.0784224 0.0725404 0.0242536 0.776595 0.5 +-0.0764595 0.111219 0.0459768 0.436677 0.5 +-0.0380606 0.157756 -0.011216 0.815432 0.5 +-0.0181903 0.172708 -0.0227977 0.657824 0.5 +-0.0326464 0.0563525 -0.0113988 0.143826 0.5 +-0.0336457 0.0562895 -0.0107616 0.371831 0.5 +-0.0346417 0.056288 -0.0107606 0.584353 0.5 +-0.0356438 0.0562686 -0.010631 0.780735 0.5 +-0.0366402 0.0563002 -0.0110085 0.977739 0.5 +-0.0376403 0.0562958 -0.0110081 0.984772 0.5 +-0.0386435 0.0563025 -0.0111331 0.989706 0.5 +-0.0396488 0.0563195 -0.0111963 0.589587 0.5 +-0.0406484 0.0563266 -0.0113192 0.638522 0.5 +-0.0416459 0.056333 -0.0114534 0.633621 0.5 +-0.0426429 0.0563425 -0.0115708 0.684131 0.5 +-0.0436328 0.056346 -0.0115255 0.489296 0.5 +-0.0446309 0.0563208 -0.0114385 0.472305 0.5 +-0.045625 0.056311 -0.011298 0.460193 0.5 +-0.0466333 0.0562665 -0.0109539 0.631433 0.5 +-0.0476133 0.0562658 -0.0107838 0.445679 0.5 +-0.0486224 0.0562169 -0.0104362 0.61532 0.5 +-0.0496168 0.0561697 -0.00993077 0.414245 0.5 +-0.0506142 0.0560954 -0.00917258 0.408073 0.5 +-0.0516036 0.0560273 -0.00839821 0.434396 0.434885 +-0.0525972 0.055954 -0.00763978 0.45847 0.5 +-0.0749344 0.128178 -0.00819506 0.347218 0.421623 +0.00215199 0.101646 -0.0224127 0.686179 0.5 +-0.0610181 0.13697 -0.00676267 0.651011 0.5 +-0.0390807 0.159219 -0.0117734 0.516743 0.5 +-0.0142233 0.174199 -0.0261217 0.436391 0.5 +-0.0198519 0.0357263 0.0525976 0.847273 0.5 +-0.0690768 0.0739443 0.0372765 0.577774 0.5 +-0.056007 0.145723 -0.001571 0.734282 0.5 +-0.0839821 0.127994 -0.00381712 0.396684 0.5 +0.00114374 0.101639 -0.0226194 0.6776 0.5 +0.0533093 0.0573451 -0.00263239 0.615474 0.5 +0.0522757 0.0574291 -0.0035048 0.643631 0.5 +0.0513136 0.0574694 -0.00408483 0.658982 0.5 +0.0503092 0.0575099 -0.00459296 0.664408 0.5 +0.0493319 0.0575419 -0.00502247 0.632242 0.5 +0.0483442 0.0575601 -0.00531363 0.753422 0.5 +0.0473422 0.0575607 -0.00551801 0.749512 0.5 +0.0463579 0.0575632 -0.00556359 0.708875 0.5 +0.0453646 0.0575572 -0.00557548 0.672229 0.5 +0.044367 0.0575454 -0.00546316 0.656573 0.5 +0.0433693 0.0575272 -0.00543691 0.644105 0.5 +0.0423711 0.0575006 -0.00528711 0.533289 0.5 +0.041351 0.0574751 -0.0052144 0.435994 0.5 +0.0403284 0.0574912 -0.00511853 0.435519 0.5 +0.0390604 0.0575755 -0.00514174 0.481723 0.226377 +0.0383787 0.0575308 -0.00558257 0.470685 0.433935 +0.000146179 0.101649 -0.0227639 0.661726 0.5 +-0.0729303 0.131104 -0.00814819 0.652092 0.5 +-0.0689665 0.135529 -0.00828838 0.595071 0.5 +-0.0340766 0.172586 -0.0145127 0.443962 0.5 +-0.0468823 0.107031 -0.0193009 0.717565 0.5 +-0.0478798 0.107016 -0.0192852 0.785937 0.5 +-0.0798628 0.122191 -0.00554615 0.412358 0.5 +-0.0809073 0.123633 -0.00507492 0.511313 0.406587 +-0.0708734 0.116483 -0.00801313 0.455162 0.477887 +-0.0569713 0.125238 -0.00711806 0.71582 0.5 +-0.0798905 0.126603 -0.00582167 0.429166 0.5 +-0.0348545 0.0986254 -0.0227182 0.655039 0.5 +-0.0669104 0.120913 -0.00889891 0.769374 0.5 +0.0243264 0.0591823 -0.0248233 0.651331 0.5 +0.0233583 0.0592365 -0.0255115 0.675169 0.5 +0.0223181 0.0592817 -0.0260832 0.639279 0.5 +0.0213663 0.0593118 -0.0264401 0.63495 0.5 +0.0203189 0.05934 -0.026848 0.641659 0.5 +0.0193411 0.0593649 -0.0271573 0.635044 0.484049 +0.0183283 0.0593891 -0.0275077 0.79822 0.5 +0.0173372 0.059408 -0.0277846 0.755566 0.5 +0.0163083 0.0594423 -0.028212 0.584536 0.5 +0.0153286 0.0594649 -0.0285327 0.732649 0.5 +0.0143257 0.0594816 -0.0287805 0.727181 0.5 +0.0133255 0.0594987 -0.0290386 0.766255 0.5 +0.0123252 0.0595168 -0.0292981 0.830747 0.5 +0.0113105 0.059545 -0.0296135 0.798978 0.5 +0.0103113 0.0595614 -0.0298764 0.804128 0.5 +0.00930976 0.0595795 -0.0301167 0.797126 0.5 +0.00833511 0.0595736 -0.0302453 0.761857 0.5 +0.00732527 0.0595899 -0.0304419 0.754983 0.5 +0.00632209 0.0596079 -0.030662 0.751319 0.5 +0.00534844 0.0596161 -0.0309806 0.570731 0.5 +0.00434041 0.0596672 -0.031584 0.563082 0.5 +0.00330662 0.0597508 -0.0323981 0.584961 0.5 +0.00232768 0.0597693 -0.0328325 0.559541 0.5 +0.00131504 0.0597888 -0.0330641 0.688544 0.5 +0.000314733 0.0597904 -0.0332055 0.689089 0.5 +-0.000694781 0.0597985 -0.0333207 0.675318 0.454243 +-0.00169833 0.0598396 -0.033652 0.673305 0.457993 +-0.00268673 0.0598311 -0.0338297 0.925721 0.5 +-0.00369909 0.0598617 -0.0340393 0.646726 0.474422 +-0.00468835 0.0598784 -0.0344633 0.508305 0.5 +-0.00569643 0.0599053 -0.0346867 0.645534 0.5 +-0.00669968 0.0599043 -0.0346663 0.888156 0.5 +-0.00769877 0.0598808 -0.0345717 0.873128 0.5 +-0.00869265 0.0598566 -0.0344628 0.903325 0.5 +-0.00969446 0.0598719 -0.0345693 0.922895 0.5 +-0.0106878 0.0598858 -0.0348312 0.916957 0.5 +-0.0116999 0.0599414 -0.0352829 0.917865 0.5 +-0.0126927 0.0599517 -0.0357172 0.659242 0.470718 +-0.0137008 0.0599733 -0.0359611 0.671649 0.456412 +-0.0147132 0.0599449 -0.0358879 0.628287 0.474761 +-0.0157056 0.0599572 -0.0358177 0.617599 0.5 +-0.0167077 0.059948 -0.0356741 0.840534 0.5 +-0.0177128 0.0599179 -0.0354327 0.799135 0.5 +-0.0187116 0.0598792 -0.0350421 0.544524 0.465797 +-0.0197012 0.0598498 -0.0346368 0.529165 0.5 +-0.020723 0.0597726 -0.0340423 0.490856 0.5 +-0.0217032 0.0597401 -0.0334972 0.493587 0.5 +-0.0226971 0.059684 -0.0328522 0.492304 0.5 +-0.0237052 0.0596068 -0.0321069 0.485458 0.5 +-0.0338487 0.098628 -0.022813 0.655365 0.5 +-0.0679219 0.123838 -0.00890383 0.783269 0.5 +-0.0630199 0.134039 -0.00765574 0.829703 0.5 +-0.027105 0.162286 -0.015104 0.596994 0.5 +-0.0261075 0.162258 -0.0150297 0.599291 0.5 +-0.0211482 0.169745 -0.0200914 0.819403 0.5 +-0.0172406 0.178621 -0.0252251 0.348814 0.472019 +-0.0576689 0.0350157 0.0450337 0.94399 0.5 +-0.0326534 0.0578275 -0.0120318 0 0 +-0.0336503 0.0577563 -0.0112696 0.340218 0.5 +-0.0346492 0.0577427 -0.0111408 0.569117 0.5 +-0.0356468 0.0577276 -0.0110125 0.773378 0.5 +-0.0366476 0.0577363 -0.0111372 0.976555 0.5 +-0.0376499 0.0577418 -0.0112619 0.979938 0.5 +-0.0386568 0.0577511 -0.0111914 0.633525 0.5 +-0.0396568 0.0577566 -0.0113194 0.66275 0.5 +-0.0406583 0.0577787 -0.0115563 0.66904 0.5 +-0.0416597 0.057808 -0.0117566 0.740925 0.5 +-0.0426568 0.0578158 -0.011891 0.550212 0.468491 +-0.0436492 0.0577877 -0.0118151 0.55491 0.444596 +-0.0446453 0.0577855 -0.0118043 0.509053 0.459194 +-0.0456409 0.0577841 -0.0117617 0.499731 0.457732 +-0.0466248 0.0577591 -0.0115398 0.501473 0.468268 +-0.0476199 0.057734 -0.011287 0.674579 0.5 +-0.0486418 0.0576652 -0.0108452 0.471644 0.5 +-0.0496329 0.05762 -0.010324 0.454003 0.5 +-0.0506054 0.0575708 -0.00965819 0.438177 0.4019 +-0.0515955 0.0575054 -0.00888629 0.430161 0.5 +-0.0525841 0.0574366 -0.00812203 0.45259 0.5 +-0.00385838 0.101641 -0.0231016 0.683302 0.5 +-0.0658968 0.109505 -0.0131657 0.639834 0.5 +-0.0829482 0.128017 -0.00457928 0.396406 0.5 +-0.0380826 0.159224 -0.0120325 0.792989 0.5 +-0.0152002 0.174208 -0.0254562 0.568327 0.5 +-0.0489243 0.0675117 0.0383488 0.669387 0.5 +-0.0380583 0.154792 -0.00920218 0.738415 0.5 +-0.0579761 0.145744 -0.00191597 0.821423 0.5 +-0.0799103 0.125126 -0.00560703 0.470777 0.5 +-0.00486253 0.101638 -0.0232055 0.669053 0.5 +0.0533192 0.0587911 -0.00291354 0.634197 0.5 +0.0523216 0.0588453 -0.00357691 0.664833 0.5 +0.0513156 0.0588831 -0.00408417 0.65756 0.5 +0.0503218 0.0589081 -0.00447436 0.624577 0.5 +0.0493315 0.0589269 -0.00474568 0.749851 0.5 +0.0483469 0.0589383 -0.00490848 0.717719 0.5 +-0.0849335 0.125015 -0.00321773 0.624202 0.5 +-0.0689044 0.110844 -0.0111483 0.490264 0.392453 +-0.0903629 0.11521 0.0252935 0.721825 0.5 +-0.0838537 0.110728 0.0339922 0.756232 0.5 +0.0433586 0.0589158 -0.00469925 0.591647 0.5 +0.0423563 0.0588819 -0.00453174 0.508868 0.5 +0.0413366 0.0588699 -0.00449648 0.436735 0.5 +0.0401031 0.0589615 -0.00453029 0.424111 0.26453 +-0.0759667 0.135448 -0.00632576 0.438065 0.5 +-0.0769787 0.135423 -0.00568624 0.447199 0.427213 +-0.0501013 0.15611 -0.00554414 0.382841 0.5 +-0.0709386 0.131124 -0.00852217 0.590579 0.5 +-0.0301745 0.17266 -0.0167996 0.463334 0.456669 +-0.0450894 0.154663 -0.00752455 0.729218 0.5 +-0.0662371 0.173912 -0.0594768 0.604193 0.5 +-0.0559996 0.126683 -0.00642409 0.53475 0.478738 +0.00809889 0.111578 -0.0196036 0.828781 0.5 +-0.0769591 0.131054 -0.00672048 0.426403 0.5 +-0.0652895 0.175332 -0.0607504 0.331013 0.5 +-0.0809104 0.126584 -0.00546143 0.455051 0.5 +-0.0778493 0.11932 -0.00645768 0.516274 0.5 +-0.0108856 0.107334 -0.0222671 0.629817 0.5 +-0.0809138 0.125107 -0.00520991 0.502894 0.416983 +0.0243337 0.0605883 -0.0247185 0.699292 0.5 +0.0233375 0.0606402 -0.0253621 0.683592 0.5 +0.0223381 0.0606785 -0.0258752 0.660666 0.5 +0.0213347 0.0607071 -0.0262571 0.670216 0.477951 +0.0203114 0.0607424 -0.0267183 0.655082 0.5 +0.0193241 0.0607694 -0.0271316 0.637267 0.48403 +0.018318 0.0607989 -0.0274966 0.798155 0.5 +0.0173361 0.0608154 -0.0277985 0.605135 0.5 +0.0163111 0.0608546 -0.0282401 0.600571 0.5 +0.0153317 0.060873 -0.028643 0.762921 0.405039 +0.014321 0.0608889 -0.0289153 0.759584 0.409645 +0.0133301 0.0609017 -0.0290805 0.799277 0.5 +0.0123248 0.0609207 -0.0293142 0.828411 0.5 +0.0113097 0.0609536 -0.0296395 0.825986 0.5 +0.0103202 0.0609665 -0.0299301 0.799893 0.5 +0.00939521 0.0609325 -0.0302492 0.793275 0.390297 +0.00834248 0.0609508 -0.0305126 0.757184 0.402535 +0.0073096 0.0609801 -0.0307365 0.77749 0.397076 +0.00631667 0.061015 -0.0309472 0.739655 0.417681 +0.0053093 0.0610791 -0.0314051 0.725783 0.5 +0.00431168 0.0611153 -0.0319161 0.579917 0.5 +0.00330328 0.0611715 -0.0325304 0.592578 0.5 +0.00230145 0.0612209 -0.0331693 0.581689 0.5 +0.00131984 0.0612266 -0.0334746 0.718473 0.5 +0.00030024 0.0612559 -0.033673 0.706724 0.5 +-0.000691446 0.0612541 -0.0338404 0.684533 0.5 +-0.00170296 0.0612915 -0.034176 0.931089 0.5 +-0.00269376 0.0613003 -0.0344696 0.658087 0.5 +-0.00368188 0.0613041 -0.0346439 0.522934 0.484479 +-0.00469624 0.0613427 -0.0349676 0.520186 0.484575 +-0.00570279 0.0613633 -0.0351663 0.684922 0.44624 +-0.0067083 0.0613544 -0.0352012 0.651672 0.470336 +-0.007704 0.0613485 -0.0352024 0.899586 0.5 +-0.0087012 0.0613261 -0.0351009 0.886303 0.5 +-0.0097823 0.0613531 -0.0352263 0.68778 0.444313 +-0.0106993 0.061373 -0.0355475 0.670518 0.457134 +-0.0117022 0.0613984 -0.0359464 0.687248 0.5 +-0.0126944 0.0614008 -0.0362648 0.698421 0.5 +-0.0137086 0.0614344 -0.0364468 0.651682 0.5 +-0.0147098 0.0613984 -0.0362354 0.858275 0.5 +-0.0157153 0.0613848 -0.0360938 0.851108 0.5 +-0.0167191 0.0613704 -0.0359554 0.852398 0.5 +-0.0177152 0.0613627 -0.0358053 0.84491 0.5 +-0.0187202 0.0613304 -0.0355606 0.802041 0.5 +-0.0197239 0.0612902 -0.0351879 0.539582 0.5 +-0.0207268 0.0612423 -0.0346723 0.506328 0.5 +-0.0217336 0.0611778 -0.0340471 0.481145 0.5 +-0.022701 0.0611501 -0.0334866 0.474073 0.5 +-0.0237002 0.0610797 -0.032726 0.455354 0.5 +-0.058072 0.135467 -0.00577889 0.67445 0.5 +-0.0171973 0.174198 -0.0240623 0.581635 0.5 +-0.0442085 0.165146 -0.00911238 0.44365 0.5 +-0.0301008 0.162274 -0.0148279 0.589633 0.480524 +-0.0142042 0.169737 -0.0232161 0.631837 0.5 +-0.0221552 0.169733 -0.0198584 0.556273 0.5 +-0.0311605 0.169689 -0.016551 0.447724 0.5 +0.0110632 0.0360404 -0.022358 0.321071 0.429304 +-0.0326614 0.0592947 -0.0125392 0.176728 0.5 +-0.0336617 0.0592604 -0.0121578 0.335154 0.5 +-0.034656 0.0592094 -0.011649 0.525141 0.5 +-0.035656 0.0591967 -0.0115208 0.738342 0.5 +-0.0366574 0.0591917 -0.011518 0.948368 0.5 +-0.0376568 0.0591992 -0.0116433 0.941798 0.5 +-0.0386562 0.0591953 -0.0114762 0.572121 0.5 +-0.0396639 0.0592228 -0.0116772 0.648591 0.5 +-0.0406662 0.0592305 -0.0118049 0.737665 0.5 +-0.0416678 0.0592681 -0.0121392 0.830365 0.5 +-0.0426623 0.0592741 -0.0122692 0.611351 0.5 +-0.0436566 0.0592613 -0.0123074 0.607453 0.5 +-0.0446505 0.0592548 -0.0123035 0.78102 0.5 +-0.0456444 0.0592254 -0.0120696 0.755244 0.5 +-0.0466281 0.0592297 -0.0120314 0.772766 0.5 +-0.0476369 0.0591928 -0.0118235 0.762326 0.5 +-0.0486367 0.0591511 -0.0114572 0.659351 0.5 +-0.0496312 0.0590927 -0.0108209 0.44339 0.372992 +-0.0506178 0.0590261 -0.0100428 0.460954 0.5 +-0.051624 0.0589527 -0.00929309 0.453789 0.5 +-0.0526285 0.0588799 -0.00854194 0.46395 0.439843 +-0.0536041 0.0588172 -0.00776341 0.668087 0.5 +-0.0758718 0.109158 -0.00765228 0.589946 0.5 +-0.0629342 0.109643 -0.0151294 0.606602 0.5 +-0.0360892 0.159232 -0.0124312 0.834592 0.5 +-0.0162071 0.174195 -0.0247085 0.563651 0.5 +-0.0488761 0.107007 -0.0192731 0.800527 0.5 +-0.0498753 0.106996 -0.0192538 0.794852 0.5 +-0.0559081 0.112628 -0.0165116 0.475072 0.5 +-0.0698329 0.112058 0.0465849 0.478168 0.380425 +-0.0278615 0.0987172 -0.0237448 0.572131 0.5 +-0.0550257 0.131065 -0.00539027 0.647213 0.455881 +-0.0588822 0.108299 -0.017343 0.459052 0.5 +-0.0460906 0.156154 -0.00788178 0.439208 0.5 +-0.0350646 0.156323 -0.010574 0.742779 0.5 +-0.0208606 0.101617 -0.0238418 0.645596 0.5 +-0.0218606 0.101624 -0.0238704 0.670095 0.5 +-0.0794629 0.0702542 0.0118898 0.725422 0.5 +-0.0228597 0.101618 -0.023963 0.688569 0.5 +-0.0238622 0.101613 -0.0238665 0.662877 0.5 +-0.0248661 0.101609 -0.0237851 0.644783 0.5 +-0.0649264 0.112407 -0.0127033 0.623431 0.5 +-0.0268752 0.105825 -0.0224483 0.626782 0.5 +-0.0258651 0.101595 -0.0237434 0.627196 0.5 +-0.0268641 0.101582 -0.02361 0.608526 0.5 +-0.0278603 0.101566 -0.0234492 0.606695 0.5 +-0.0288578 0.101545 -0.0231915 0.590192 0.5 +-0.0298707 0.101527 -0.0228594 0.596497 0.5 +-0.0308625 0.101511 -0.0227041 0.625319 0.5 +-0.0411739 0.165162 -0.0113688 0.360469 0.5 +-0.0318682 0.101497 -0.022474 0.653343 0.5 +-0.0760085 0.141318 -0.005968 0.3428 0.5 +-0.0570352 0.129621 -0.00626418 0.657833 0.470297 +-0.0642686 0.171043 -0.0609844 0.346838 0.5 +-0.0490718 0.151664 -0.00461846 0.721908 0.5 +-0.0642867 0.172466 -0.0611328 0.305844 0.444783 +-0.0330915 0.16076 -0.0136886 0.842664 0.5 +-0.0528885 0.108408 -0.0187758 0.738837 0.5 +-0.0328698 0.101492 -0.0223548 0.689148 0.5 +-0.033869 0.10148 -0.022225 0.684462 0.5 +-0.0768562 0.117877 -0.00659127 0.494016 0.5 +-0.0778777 0.117832 -0.00599287 0.500696 0.5 +-0.0348704 0.101474 -0.022105 0.693802 0.5 +-0.0358626 0.101452 -0.0219425 0.692298 0.5 +-0.0368559 0.101427 -0.0217814 0.682688 0.5 +0.0222773 0.0620859 -0.0257917 0.689184 0.5 +0.0213389 0.0621093 -0.0262711 0.675234 0.454883 +0.0203077 0.0621778 -0.0269805 0.645975 0.5 +0.0192994 0.062217 -0.0274738 0.639386 0.5 +0.0183032 0.0622432 -0.0278633 0.637029 0.395419 +0.0173165 0.0622663 -0.028279 0.626368 0.396114 +0.0162996 0.0623114 -0.0287447 0.621594 0.5 +0.0153241 0.0623295 -0.0291944 0.592328 0.5 +0.0143086 0.0623633 -0.0295361 0.780167 0.5 +0.0133075 0.062355 -0.0296823 0.819068 0.37689 +0.0123118 0.0623753 -0.0299343 0.797379 0.384298 +0.0112895 0.0624411 -0.0303571 0.79033 0.385997 +0.0103005 0.0624571 -0.0307796 0.800173 0.5 +0.00933955 0.0624337 -0.0310444 0.774248 0.5 +0.00831584 0.0624371 -0.0312473 0.771104 0.395682 +0.00730214 0.0624461 -0.0313742 0.757175 0.401427 +0.00630898 0.0624816 -0.0315869 0.723271 0.423779 +0.00532494 0.0625045 -0.0319907 0.728322 0.418376 +0.00430293 0.0625774 -0.0325544 0.571531 0.419452 +0.00330234 0.0626197 -0.0330565 0.610703 0.464497 +0.00228793 0.0626666 -0.0335374 0.611179 0.5 +0.00133097 0.0626915 -0.0339607 0.592927 0.465014 +0.000300907 0.0626948 -0.0340909 0.704272 0.5 +-0.000697034 0.0626894 -0.03411 0.670644 0.5 +-0.00171529 0.0627358 -0.0345403 0.673842 0.5 +-0.00271622 0.0627636 -0.0349069 0.71062 0.5 +-0.00370938 0.0627709 -0.0350699 0.734275 0.5 +-0.00470743 0.0627772 -0.0352137 0.707395 0.5 +-0.00571075 0.0627939 -0.0354611 0.724601 0.5 +-0.00670797 0.0627873 -0.0354975 0.672752 0.5 +-0.00771091 0.0627931 -0.0356131 0.650764 0.5 +-0.00870224 0.0627847 -0.0356447 0.651502 0.5 +-0.00970298 0.0627929 -0.0357349 0.678915 0.5 +-0.0107078 0.0628117 -0.0359649 0.69925 0.5 +-0.011709 0.0628424 -0.0363307 0.721877 0.5 +-0.0127025 0.0628523 -0.0366298 0.712311 0.5 +-0.0137183 0.0628763 -0.0368336 0.684856 0.443001 +-0.0147168 0.0628748 -0.03682 0.893424 0.5 +-0.0157188 0.0628375 -0.0366012 0.812525 0.5 +-0.016725 0.0627999 -0.0362248 0.824599 0.5 +-0.0177283 0.0627822 -0.0360863 0.869266 0.5 +-0.018731 0.0627665 -0.0359648 0.842678 0.5 +-0.0197337 0.0627381 -0.0357065 0.779859 0.5 +-0.0207502 0.0626823 -0.0352205 0.481683 0.5 +-0.0217308 0.0626511 -0.0346671 0.448668 0.364626 +-0.0227229 0.0625945 -0.0340193 0.462456 0.5 +-0.0237144 0.062529 -0.0332478 0.460326 0.5 +-0.0378618 0.101418 -0.0215553 0.711223 0.5 +0.0051136 0.11017 -0.0202785 0.799617 0.5 +-0.0579701 0.125253 -0.00738272 0.731317 0.5 +-0.0251052 0.162299 -0.0151004 0.866482 0.5 +-0.0152029 0.16973 -0.0225848 0.648317 0.5 +-0.0231673 0.169718 -0.0195033 0.558503 0.5 +-0.0321414 0.16968 -0.0161315 0.451457 0.5 +-0.038857 0.101401 -0.0214118 0.737784 0.5 +-0.0398612 0.101404 -0.0212384 0.765532 0.5 +-0.0336693 0.0607336 -0.0127906 0.164658 0.5 +-0.0346629 0.0607102 -0.0125376 0.353451 0.5 +-0.0356643 0.0606925 -0.0124069 0.525705 0.5 +-0.0366615 0.0606699 -0.0121541 0.713387 0.5 +-0.0376612 0.0606745 -0.0122764 0.893754 0.5 +-0.0386629 0.0606634 -0.011982 0.587775 0.5 +-0.0396673 0.0606846 -0.0120669 0.676045 0.5 +-0.0406738 0.0606904 -0.0121867 0.757155 0.5 +-0.0416725 0.0607151 -0.0124173 0.848204 0.5 +-0.0426785 0.060742 -0.0126195 0.661857 0.467643 +-0.0436626 0.0607395 -0.0127771 0.650016 0.471453 +-0.0446531 0.0607308 -0.0127894 0.88375 0.5 +-0.0456539 0.0606919 -0.0125779 0.804379 0.5 +-0.046654 0.0606571 -0.0123502 0.815501 0.5 +-0.0476575 0.0606291 -0.0121142 0.815548 0.5 +-0.0486555 0.0606014 -0.0118523 0.5192 0.461619 +-0.0496388 0.0605583 -0.0113235 0.472158 0.5 +-0.050636 0.0604891 -0.0105672 0.444895 0.5 +-0.0516205 0.0604369 -0.00991236 0.450284 0.5 +-0.0526322 0.0603614 -0.00917272 0.46893 0.5 +-0.0536323 0.0602894 -0.00841331 0.452904 0.5 +-0.0546088 0.0601814 -0.0071333 0.593472 0.5 +-0.055522 0.0600566 -0.00554029 0.393507 0.5 +-0.0408554 0.101386 -0.0212924 0.797839 0.5 +-0.0418554 0.101378 -0.0213767 0.814768 0.5 +-0.0428553 0.101381 -0.0214106 0.829446 0.5 +-0.0508832 0.106998 -0.0191626 0.795732 0.5 +-0.0518874 0.106988 -0.0190452 0.775672 0.5 +-0.0719103 0.125286 -0.00863314 0.704893 0.5 +-0.0716387 0.0675256 0.0265031 0.643168 0.5 +-0.0584616 0.0717087 0.039721 0.664596 0.5 +-0.0550044 0.145721 -0.00143834 0.699939 0.5 +-0.0540284 0.131061 -0.00500164 0.643285 0.450992 +-0.0438555 0.101385 -0.0214526 0.823264 0.5 +-0.0639323 0.123848 -0.00887264 0.814492 0.5 +-0.0788571 0.120751 -0.0060883 0.521501 0.5 +-0.0649515 0.126767 -0.00875296 0.811394 0.5 +-0.0448562 0.101383 -0.0214692 0.812256 0.5 +-0.0458559 0.10138 -0.0215412 0.80419 0.5 +-0.0468563 0.101377 -0.0215448 0.807693 0.5 +-0.06991 0.11224 -0.0100103 0.583617 0.5 +-0.0709064 0.123821 -0.00862928 0.756169 0.5 +-0.0610115 0.134041 -0.00711168 0.847312 0.5 +-0.0739382 0.132552 -0.00766265 0.675839 0.5 +-0.0649712 0.129694 -0.00875388 0.837691 0.5 +-0.0639761 0.129691 -0.00851425 0.656198 0.5 +-0.0621416 0.141343 -0.00629843 0.508421 0.5 +-0.0478585 0.101383 -0.0215741 0.808974 0.5 +-0.0488595 0.101383 -0.02158 0.798864 0.5 +-0.0381658 0.165183 -0.0131497 0.477937 0.421549 +-0.0528899 0.106976 -0.018917 0.755078 0.5 +-0.0498635 0.101385 -0.021584 0.759782 0.5 +-0.0550525 0.129598 -0.0055846 0.608414 0.5 +-0.0281655 0.17267 -0.018055 0.463087 0.5 +-0.0679296 0.125304 -0.00887173 0.79915 0.5 +-0.0778913 0.126656 -0.00702073 0.440572 0.437044 +-0.0779569 0.132491 -0.00592536 0.423315 0.450384 +-0.0548868 0.108372 -0.0183778 0.693503 0.5 +-0.0538991 0.108397 -0.0185513 0.722272 0.5 +-0.0618964 0.108239 -0.0162152 0.447716 0.5 +-0.0538924 0.106961 -0.0186698 0.735449 0.5 +-0.0758642 0.117897 -0.00698249 0.48249 0.5 +-0.0508615 0.101367 -0.0215394 0.711354 0.5 +-0.0518654 0.101358 -0.0214215 0.663725 0.5 +-0.0528849 0.101359 -0.0212107 0.479277 0.5 +0.0233086 0.0634336 -0.024957 0.68608 0.5 +0.0222874 0.0635154 -0.025946 0.688805 0.5 +0.0213383 0.0635548 -0.0266585 0.664336 0.5 +0.0203245 0.0636 -0.0272806 0.661958 0.392585 +0.0192972 0.063662 -0.0278633 0.635476 0.5 +0.0183116 0.0636834 -0.0282837 0.628268 0.478519 +0.0172995 0.0637271 -0.0287659 0.619616 0.5 +0.0163113 0.0637479 -0.0291811 0.61477 0.5 +0.0153129 0.0637748 -0.0295702 0.604327 0.399711 +0.0143045 0.0638067 -0.0299257 0.629413 0.5 +0.0133173 0.0638081 -0.0300932 0.811702 0.5 +0.0123073 0.0638424 -0.0304488 0.807999 0.5 +0.0112859 0.0638878 -0.0308862 0.638119 0.5 +0.0102881 0.063916 -0.0312717 0.63967 0.482046 +0.00930465 0.0639279 -0.0315779 0.829415 0.5 +0.008313 0.0639391 -0.0318667 0.816814 0.5 +0.00729944 0.0639619 -0.0320669 0.802499 0.5 +0.00629218 0.0639808 -0.0323017 0.765276 0.5 +0.00529533 0.064011 -0.0326857 0.765907 0.5 +0.00429568 0.0640516 -0.0331969 0.627733 0.473996 +0.00329581 0.06408 -0.0335736 0.629519 0.5 +0.00229927 0.0641027 -0.0339638 0.609202 0.410793 +0.00130454 0.0641388 -0.0343264 0.594238 0.471601 +0.000291607 0.0641338 -0.034343 0.699258 0.5 +-0.000697567 0.0641196 -0.0342689 0.701454 0.5 +-0.00170857 0.0641356 -0.0344906 0.725112 0.5 +-0.00271064 0.0641639 -0.0348647 0.756686 0.5 +-0.00371064 0.0641813 -0.0350983 0.738844 0.5 +-0.00471394 0.0641886 -0.0352179 0.741453 0.5 +-0.00571704 0.0642049 -0.0354496 0.731692 0.5 +-0.00671791 0.0642099 -0.0355692 0.670262 0.5 +-0.00771915 0.0642161 -0.0356843 0.670163 0.5 +-0.00871553 0.0642094 -0.0357226 0.672109 0.5 +-0.00972298 0.0642282 -0.0359259 0.699003 0.5 +-0.0107189 0.0642451 -0.0362023 0.741237 0.5 +-0.0117173 0.0642717 -0.0365887 0.779464 0.5 +-0.0127037 0.064273 -0.0367671 0.577387 0.5 +-0.0137234 0.0643092 -0.0370705 0.542103 0.5 +-0.0147222 0.0643235 -0.037347 0.66828 0.5 +-0.0157228 0.0642918 -0.0372774 0.862164 0.5 +-0.0167333 0.0642714 -0.0369951 0.55365 0.482046 +-0.0177396 0.0642294 -0.0366219 0.560318 0.48002 +-0.0187526 0.0641914 -0.0363857 0.575823 0.5 +-0.0197383 0.064191 -0.0362126 0.562778 0.5 +-0.0207376 0.0641563 -0.0358205 0.546618 0.5 +-0.021716 0.0641363 -0.0354017 0.49224 0.5 +-0.0227414 0.0640418 -0.0345473 0.451718 0.5 +-0.0237194 0.0639841 -0.033754 0.450593 0.5 +-0.0247258 0.0638997 -0.032873 0.467812 0.5 +-0.0538856 0.101336 -0.0209374 0.453632 0.466396 +-0.0659978 0.135528 -0.00820667 0.716468 0.5 +-0.0351413 0.166693 -0.0148789 0.511254 0.5 +-0.053967 0.0687802 0.0379578 0.651205 0.5 +-0.0241467 0.169732 -0.0193183 0.572032 0.5 +-0.0331437 0.169673 -0.0156322 0.469409 0.5 +-0.0642908 0.169609 -0.0607929 0.359336 0.5 +-0.0548867 0.101301 -0.0205491 0.438115 0.5 +-0.0336762 0.062222 -0.0135529 0.144132 0.5 +-0.0346708 0.0621866 -0.0131726 0.352868 0.5 +-0.0356709 0.0621736 -0.0130441 0.543504 0.5 +-0.0366712 0.0621691 -0.0130418 0.709534 0.5 +-0.0376663 0.0621956 -0.0129723 0.551355 0.5 +-0.0386685 0.0621637 -0.0127302 0.614183 0.5 +-0.0396713 0.0621627 -0.012718 0.694165 0.5 +-0.0406768 0.0621783 -0.0128097 0.786709 0.5 +-0.0416808 0.0622091 -0.0130274 0.883769 0.5 +-0.0426749 0.0622014 -0.0131851 0.919426 0.5 +-0.0436679 0.0621935 -0.0131864 0.912929 0.5 +-0.0446642 0.0621749 -0.0132201 0.89465 0.5 +-0.0456524 0.0621788 -0.0131898 0.850321 0.5 +-0.0466794 0.0620985 -0.0127944 0.540798 0.5 +-0.0476622 0.0620749 -0.0123691 0.442212 0.466956 +-0.0486546 0.0620591 -0.0122264 0.432309 0.5 +-0.0496442 0.0620141 -0.0117058 0.502131 0.5 +-0.0506534 0.0619401 -0.0109597 0.502885 0.5 +-0.0516393 0.0618882 -0.0103104 0.485715 0.5 +-0.0526397 0.0618282 -0.00966488 0.478736 0.43111 +-0.0535904 0.0617699 -0.00886774 0.564652 0.5 +-0.0545598 0.0616597 -0.0074577 0.547337 0.5 +-0.0555615 0.0615422 -0.00607893 0.443169 0.5 +-0.0564804 0.0613799 -0.00459099 0.321073 0.355633 +-0.0576531 0.0612704 -0.00372094 0.341056 0.5 +-0.058573 0.0613666 -0.00334192 0.179146 0.405704 +-0.0596081 0.0614162 -0.00289701 0.195385 0.344922 +-0.0606301 0.0613516 -0.00265703 0.21968 0.305842 +-0.0616015 0.0614498 -0.00273471 0.237446 0.386283 +-0.062546 0.0614527 -0.00215685 0.231854 0.409636 +-0.0635384 0.061476 -0.00191873 0.22628 0 +-0.0548742 0.10693 -0.0184788 0.731686 0.5 +-0.0558858 0.106922 -0.0182628 0.735175 0.5 +-0.0568864 0.106915 -0.0181412 0.700775 0.5 +-0.078943 0.132461 -0.00522567 0.407232 0.5 +-0.0400491 0.154783 -0.00892819 0.737465 0.5 +-0.0255688 0.0356598 0.0531386 0.564727 0.5 +-0.0570338 0.131087 -0.00617819 0.679759 0.465739 +-0.0558948 0.101262 -0.0199275 0.424147 0.470952 +-0.0719296 0.11219 -0.00889601 0.536078 0.5 +-0.0132439 0.178631 -0.0284206 0.31298 0.434951 +-0.0629391 0.12384 -0.00881569 0.816864 0.5 +-0.0798509 0.120721 -0.00541034 0.531215 0.375276 +-0.0689372 0.126774 -0.00892675 0.790619 0.379434 +-0.0568902 0.10122 -0.0192994 0.558643 0.5 +-0.0699315 0.126779 -0.00900092 0.77642 0.385012 +-0.0578818 0.101192 -0.0190391 0.617408 0.5 +-0.0588731 0.101172 -0.0189069 0.656861 0.5 +-0.0598691 0.101152 -0.0187591 0.66697 0.5 +-0.0600285 0.134031 -0.00683616 0.84805 0.5 +-0.0819835 0.132406 -0.00340088 0.50712 0.5 +-0.0608711 0.101136 -0.0186334 0.667418 0.5 +-0.061927 0.109672 -0.0156348 0.592735 0.5 +-0.061867 0.101123 -0.0184855 0.613226 0.5 +-0.0795939 0.112319 0.0461682 0.59229 0.5 +-0.0331278 0.165217 -0.0153881 0.594089 0.5 +-0.0261888 0.17564 -0.0188354 0.392078 0.5 +-0.0628667 0.101101 -0.0182166 0.440839 0.5 +-0.0560194 0.129616 -0.00591188 0.625053 0.5 +-0.0578783 0.106898 -0.0179862 0.650833 0.5 +-0.0777488 0.07493 0.029356 0.667908 0.5 +-0.0769339 0.126684 -0.00758482 0.425905 0.5 +-0.0788489 0.119288 -0.00581129 0.523105 0.5 +-0.0588961 0.106893 -0.0176578 0.629492 0.5 +-0.0558871 0.108356 -0.0181276 0.680499 0.5 +-0.0438866 0.108471 -0.0191595 0.616008 0.5 +-0.0629263 0.108221 -0.0156274 0.562234 0.5 +-0.0739548 0.136937 -0.00691386 0.508552 0.5 +-0.054118 0.157553 -0.00229988 0.368133 0.5 +-0.0638439 0.101082 -0.0177706 0.444113 0.311459 +-0.0278864 0.105837 -0.0222471 0.609507 0.5 +0.0242723 0.0647548 -0.0237835 0.700294 0.5 +0.0232974 0.0648673 -0.0252072 0.682554 0.5 +0.0223162 0.0649555 -0.0263733 0.672297 0.5 +0.0213135 0.0650138 -0.0271409 0.669476 0.5 +0.0203184 0.0650483 -0.0276666 0.646834 0.5 +0.0192888 0.0651078 -0.0282476 0.634186 0.5 +0.0183 0.0651194 -0.0285252 0.808135 0.5 +0.0172829 0.0651656 -0.0289948 0.832612 0.5 +0.0162971 0.0651874 -0.0294171 0.832195 0.5 +0.0152962 0.0652155 -0.0297912 0.827433 0.5 +0.0142962 0.0652331 -0.0300484 0.831022 0.5 +0.0132839 0.0652538 -0.0302637 0.833626 0.5 +0.0122907 0.0652688 -0.0305463 0.819026 0.5 +0.0113019 0.0652847 -0.0308368 0.84229 0.5 +0.0102822 0.065327 -0.0312772 0.665813 0.5 +0.00929414 0.0653548 -0.0316941 0.863791 0.5 +0.00829502 0.0653838 -0.032076 0.859502 0.5 +0.00729554 0.0653986 -0.0323322 0.845742 0.5 +0.0062922 0.0654161 -0.0325779 0.644826 0.486076 +0.00528348 0.0654438 -0.0329345 0.621715 0.5 +0.00429984 0.0654625 -0.0332399 0.600793 0.482192 +0.00329381 0.0654903 -0.0335962 0.58136 0.478406 +0.00227655 0.0655175 -0.0339267 0.56624 0.5 +0.00128503 0.0655494 -0.0343406 0.584269 0.5 +0.000280959 0.0655552 -0.0344559 0.727621 0.5 +-0.000706682 0.0655468 -0.0343894 0.725974 0.5 +-0.00170896 0.0655406 -0.0343993 0.756049 0.5 +-0.00271881 0.0655507 -0.0345764 0.782498 0.5 +-0.0037118 0.0655569 -0.0347446 0.778462 0.5 +-0.00472043 0.0655745 -0.0349603 0.778318 0.5 +-0.00571384 0.0655793 -0.035147 0.741479 0.5 +-0.0067213 0.065597 -0.0353344 0.707129 0.5 +-0.00772146 0.0656018 -0.0354736 0.71343 0.5 +-0.00872132 0.0656071 -0.0355909 0.717796 0.5 +-0.00971954 0.0656257 -0.0358484 0.735679 0.5 +-0.0107108 0.0656519 -0.03625 0.773818 0.5 +-0.0117258 0.0656807 -0.0365783 0.773046 0.5 +-0.0127075 0.065682 -0.0367743 0.575863 0.5 +-0.0137235 0.0657235 -0.0372342 0.542305 0.5 +-0.0147283 0.0657495 -0.0376113 0.676142 0.5 +-0.015727 0.0657542 -0.0377517 0.660495 0.456168 +-0.0167308 0.0657547 -0.0377116 0.867615 0.5 +-0.0177346 0.065722 -0.0374816 0.820087 0.5 +-0.0187399 0.0656914 -0.0372373 0.79865 0.5 +-0.0197462 0.0656505 -0.036857 0.55499 0.466837 +-0.0207428 0.0656176 -0.0364653 0.547187 0.5 +-0.0217663 0.065545 -0.0358558 0.533552 0.5 +-0.0227424 0.0655154 -0.0353045 0.49496 0.5 +-0.0237378 0.0654511 -0.0345337 0.478629 0.5 +-0.0246932 0.065394 -0.0335995 0.48145 0.44055 +-0.0648576 0.101039 -0.0173044 0.420633 0.5 +-0.0658232 0.100991 -0.0166158 0.441895 0.325008 +-0.0650055 0.135525 -0.0079735 0.763612 0.5 +-0.0606031 0.0352186 0.0442288 0.798941 0.5 +-0.0770239 0.141306 -0.00545257 0.507614 0.5 +-0.0341393 0.169665 -0.0151103 0.505752 0.45529 +-0.0652337 0.169622 -0.0599681 0.614421 0.5 +-0.0668197 0.100942 -0.0159632 0.441126 0.5 +-0.033686 0.0637452 -0.0146972 0.0992731 0.5 +-0.0346788 0.0636729 -0.0139354 0.331557 0.5 +-0.0356782 0.0636593 -0.0138055 0.539051 0.5 +-0.0366797 0.0636525 -0.0138021 0.724321 0.5 +-0.0376789 0.0636715 -0.0137557 0.553239 0.5 +-0.038679 0.0636652 -0.0136088 0.628058 0.5 +-0.0396808 0.0636721 -0.0135815 0.727187 0.5 +-0.0406818 0.0636695 -0.0135779 0.834441 0.5 +-0.0416844 0.0636674 -0.0137203 0.912788 0.5 +-0.0426807 0.0636637 -0.0138633 0.893428 0.5 +-0.0436768 0.0636379 -0.0137577 0.880495 0.5 +-0.0446675 0.0636475 -0.0137193 0.599408 0.481444 +-0.0456599 0.0636306 -0.0135866 0.873741 0.5 +-0.0466544 0.0636155 -0.0134601 0.810772 0.5 +-0.0476918 0.0635243 -0.0129244 0.395166 0.47873 +-0.0486814 0.0634873 -0.0123857 0.389142 0.480058 +-0.0496483 0.0634464 -0.0118311 0.51128 0.378643 +-0.050633 0.0633988 -0.0111763 0.50059 0.5 +-0.0516305 0.0633366 -0.0105425 0.464787 0.5 +-0.0526101 0.0632972 -0.0100113 0.467943 0.5 +-0.0536272 0.0632225 -0.00927695 0.41669 0.5 +-0.054542 0.0631354 -0.00767633 0.472929 0.5 +-0.0555362 0.0629843 -0.00681601 0.460097 0.401394 +-0.0566631 0.0629472 -0.00640536 0.687548 0.5 +-0.0576496 0.0629466 -0.00612077 0.358105 0.5 +-0.0586479 0.0629437 -0.00583333 0.33789 0.5 +-0.0596424 0.0629313 -0.00554826 0.32916 0.5 +-0.0606347 0.0629111 -0.00512698 0.298405 0.5 +-0.0616341 0.0628646 -0.00472902 0.280611 0.447349 +-0.0626402 0.0627915 -0.00434322 0.338368 0.5 +-0.0636421 0.0627085 -0.00368166 0.241393 0.5 +-0.0645865 0.0628123 -0.00359236 0.240903 0.5 +-0.0656128 0.0626699 -0.00283823 0.237061 0.5 +-0.0678676 0.100922 -0.0154166 0.457171 0.5 +-0.0211888 0.175661 -0.0220113 0.414058 0.5 +-0.0599027 0.106882 -0.0174092 0.478819 0.481972 +-0.0609006 0.106856 -0.0171292 0.457003 0.5 +-0.0370678 0.157759 -0.0113588 0.824175 0.5 +-0.0420623 0.154724 -0.00848194 0.816528 0.5 +-0.0276074 0.0356491 0.0527176 0.564301 0.5 +-0.0560394 0.131064 -0.00575471 0.673711 0.5 +-0.0739012 0.112096 -0.00769672 0.50345 0.5 +-0.072904 0.112135 -0.00834183 0.530566 0.5 +-0.0633546 0.0720236 0.0383997 0.654749 0.5 +-0.0619452 0.123832 -0.00870252 0.788617 0.5 +-0.0818672 0.120683 -0.00433302 0.530945 0.383952 +-0.080837 0.120705 -0.00484118 0.530388 0.5 +-0.0688619 0.10089 -0.0150284 0.47106 0.443907 +-0.0838841 0.12062 -0.00343109 0.514708 0.5 +-0.0828908 0.120639 -0.00384458 0.523842 0.5 +-0.0848581 0.120613 -0.00298955 0.498045 0.5 +-0.0620082 0.134045 -0.00734981 0.839608 0.5 +-0.0758664 0.116415 -0.00636144 0.47196 0.430223 +-0.0839874 0.129456 -0.00327263 0.504307 0.5 +-0.0829648 0.129479 -0.00406234 0.47561 0.5 +-0.0751339 0.0669087 0.0157231 0.590039 0.5 +-0.0709646 0.0754682 0.0373385 0.599271 0.5 +-0.0251276 0.16525 -0.016804 0.827116 0.5 +-0.0391765 0.165177 -0.0125287 0.439216 0.5 +-0.0681006 0.0726203 0.0368546 0.547203 0.47216 +-0.0698809 0.100876 -0.0145572 0.475237 0.455706 +-0.0171345 0.165288 -0.0183426 0.679658 0.5 +-0.0619246 0.106845 -0.0166571 0.440766 0.478237 +-0.0590379 0.13549 -0.00623086 0.663188 0.477628 +-0.0759299 0.126701 -0.00794305 0.362393 0.428204 +-0.0590102 0.131118 -0.0069845 0.668822 0.5 +-0.0608967 0.108264 -0.0166058 0.452285 0.5 +-0.0458972 0.108476 -0.0187253 0.685715 0.430718 +-0.0448888 0.108464 -0.0189265 0.638196 0.5 +-0.0639107 0.108163 -0.0148371 0.596017 0.5 +-0.0798256 0.114817 -0.00349908 0.500629 0.5 +-0.070852 0.100833 -0.0142398 0.480109 0.5 +0.0262803 0.0660857 -0.0226574 0.708926 0.5 +0.0252976 0.0661311 -0.0233121 0.735186 0.5 +0.0243299 0.0661738 -0.0239819 0.701407 0.5 +0.0232414 0.0663429 -0.0257954 0.68791 0.5 +0.0222832 0.066418 -0.0268569 0.693139 0.5 +0.0212995 0.0664627 -0.0275106 0.684736 0.5 +0.0203197 0.0664896 -0.0280597 0.66544 0.345855 +0.0193259 0.0665212 -0.0284749 0.658601 0.5 +0.0183118 0.0665429 -0.0287115 0.64461 0.480624 +0.0172994 0.0665713 -0.0290602 0.646033 0.483528 +0.0162822 0.0666125 -0.0295206 0.826211 0.5 +0.0152945 0.0666369 -0.0299356 0.644071 0.5 +0.0142765 0.0666697 -0.0302658 0.648553 0.5 +0.0133009 0.0666579 -0.0304883 0.829322 0.376183 +0.0122905 0.06666 -0.0305971 0.801989 0.386546 +0.0112856 0.0666869 -0.0306751 0.835869 0.5 +0.0102739 0.0667155 -0.0310192 0.837031 0.5 +0.00927611 0.0667424 -0.0314011 0.857521 0.5 +0.0082766 0.0667723 -0.0317926 0.866706 0.5 +0.00727173 0.0667978 -0.0321541 0.86349 0.5 +0.00628325 0.0668147 -0.0324472 0.642137 0.5 +0.00529011 0.0668325 -0.0327227 0.761676 0.5 +0.00429234 0.0668529 -0.0329804 0.712338 0.5 +0.00328879 0.0668715 -0.0332298 0.674736 0.5 +0.00227538 0.0668963 -0.0335609 0.6547 0.5 +0.00126756 0.0669175 -0.0339113 0.534257 0.5 +0.000268234 0.0669357 -0.034172 0.689346 0.5 +-0.000720709 0.0669492 -0.0343521 0.743196 0.5 +-0.00171216 0.066944 -0.0344014 0.763514 0.5 +-0.00271026 0.0669475 -0.0345168 0.809423 0.5 +-0.00373228 0.0669631 -0.0346735 0.81236 0.5 +-0.00470812 0.0669686 -0.0349707 0.80973 0.384345 +-0.00572231 0.0669806 -0.0352658 0.775025 0.400553 +-0.00672552 0.0670096 -0.035497 0.764253 0.5 +-0.00773143 0.0670178 -0.0355816 0.753568 0.408171 +-0.00871509 0.0670095 -0.035665 0.756554 0.5 +-0.00971778 0.0670387 -0.0360005 0.767691 0.5 +-0.0107336 0.0670714 -0.0363227 0.785285 0.5 +-0.0117304 0.0670858 -0.0365895 0.761907 0.5 +-0.0127063 0.0671038 -0.0370425 0.568262 0.5 +-0.0137252 0.0671481 -0.0375067 0.703543 0.5 +-0.0147336 0.0671673 -0.0377424 0.704676 0.5 +-0.0157375 0.0671877 -0.037968 0.71202 0.5 +-0.0167402 0.0671791 -0.0380101 0.657786 0.5 +-0.0177409 0.0671746 -0.0379913 0.631224 0.5 +-0.0187525 0.0671388 -0.037784 0.6045 0.5 +-0.0197539 0.0671131 -0.0375162 0.8099 0.5 +-0.0207606 0.0670735 -0.0371287 0.537254 0.5 +-0.0217661 0.0670215 -0.0366181 0.500203 0.5 +-0.0227439 0.0669905 -0.0360641 0.476222 0.5 +-0.0237403 0.0669252 -0.0352956 0.476329 0.5 +-0.0247344 0.0668597 -0.034525 0.478088 0.5 +-0.0718661 0.100809 -0.0137558 0.468169 0.454738 +-0.0550682 0.150156 -0.00218973 0.531984 0.5 +-0.0640118 0.135519 -0.00771971 0.596346 0.5 +-0.0610628 0.138403 -0.00654794 0.669619 0.5 +-0.0780287 0.14129 -0.00491664 0.522593 0.5 +-0.0728523 0.100773 -0.0133449 0.460907 0.5 +-0.073854 0.100736 -0.0128364 0.433346 0.5 +-0.0221328 0.166772 -0.0183109 0.808248 0.5 +-0.0748309 0.100681 -0.0121692 0.527238 0.5 +-0.0346878 0.0651683 -0.0148251 0.297313 0.5 +-0.0356893 0.0651361 -0.0144415 0.535228 0.5 +-0.0366861 0.0651313 -0.0144389 0.743668 0.5 +-0.0376838 0.0651596 -0.0143574 0.581416 0.5 +-0.0386855 0.0651385 -0.0142461 0.637423 0.5 +-0.0396908 0.0651397 -0.0142325 0.684404 0.5 +-0.0406916 0.0651596 -0.014333 0.772813 0.5 +-0.0416936 0.0652006 -0.0145392 0.879983 0.5 +-0.0426868 0.0651551 -0.0146214 0.893486 0.5 +-0.0436816 0.0651561 -0.0146099 0.601264 0.5 +-0.0446824 0.0651214 -0.0145177 0.817989 0.5 +-0.0456818 0.0650665 -0.0140257 0.575466 0.475221 +-0.0466787 0.0650533 -0.0138917 0.59083 0.467672 +-0.0477034 0.0649971 -0.0135628 0.543287 0.5 +-0.0486599 0.0649886 -0.0131055 0.521597 0.328834 +-0.0496676 0.0649029 -0.0122308 0.49563 0.5 +-0.0506478 0.0648447 -0.0114426 0.497548 0.5 +-0.0516582 0.0647811 -0.0108241 0.477563 0.5 +-0.0526652 0.0647199 -0.0102 0.472077 0.5 +-0.0536204 0.0647024 -0.00963527 0.443738 0.5 +-0.0545225 0.0645764 -0.00897215 0.389915 0.407954 +-0.0556734 0.0645255 -0.00818248 0.420073 0.5 +-0.0566618 0.0645338 -0.00803085 0.494676 0.5 +-0.0576615 0.0645392 -0.00788705 0.552897 0.5 +-0.0586532 0.0645395 -0.00761311 0.524686 0.5 +-0.0596389 0.0645563 -0.0073211 0.502428 0.5 +-0.060662 0.0644224 -0.00688354 0.540043 0.5 +-0.0616679 0.0643653 -0.00651734 0.530702 0.5 +-0.0626395 0.0644043 -0.00619313 0.379588 0.453283 +-0.0636896 0.064322 -0.00564195 0.331733 0.463275 +-0.0646522 0.0642554 -0.00503339 0.279922 0.434349 +-0.0656294 0.0642362 -0.0044412 0.25725 0.423736 +-0.0665925 0.064199 -0.00375071 0.189083 0.5 +-0.0758824 0.100651 -0.0113429 0.519684 0.5 +-0.0232044 0.175652 -0.0207635 0.440904 0.5 +-0.0251727 0.175641 -0.0195733 0.367122 0.467232 +-0.0241218 0.165279 -0.0170232 0.81761 0.5 +-0.026193 0.171192 -0.0190186 0.488036 0.5 +-0.0182558 0.178619 -0.0243596 0.350433 0.5 +-0.0410427 0.15478 -0.00878846 0.812606 0.5 +-0.0757838 0.06757 0.0150388 0.547518 0.5 +-0.058019 0.131103 -0.00658932 0.67832 0.5 +-0.0440942 0.156163 -0.00853601 0.724744 0.5 +-0.0132511 0.177151 -0.0280569 0.383788 0.5 +-0.0609537 0.123826 -0.00859412 0.759873 0.5 +-0.058966 0.123797 -0.00809452 0.719725 0.5 +-0.0624959 0.0607929 0.0219134 0.394088 0.458207 +-0.0599536 0.123822 -0.00839074 0.737424 0.5 +-0.0430879 0.156177 -0.00890493 0.777542 0.5 +-0.0609169 0.109692 -0.0160089 0.454484 0.5 +-0.0609119 0.0678343 0.0355003 0.520623 0.392389 +-0.054081 0.071101 0.0394438 0.695296 0.5 +-0.0430993 0.157658 -0.00954173 0.495173 0.5 +-0.0440746 0.154693 -0.007872 0.778656 0.5 +-0.0265663 0.0356908 0.0529027 0.565998 0.5 +-0.0599553 0.0610872 0.0239566 0.56879 0.5 +-0.0540901 0.153118 -0.00271435 0.424431 0.5 +-0.0261224 0.165258 -0.0166522 0.838336 0.5 +-0.0341277 0.165212 -0.0151261 0.559924 0.5 +-0.0734548 0.0752713 0.0352251 0.766735 0.5 +-0.0571409 0.0642584 0.0323718 0.456317 0.5 +-0.0808257 0.114785 -0.00282613 0.517162 0.5 +-0.0639205 0.112438 -0.0133308 0.628864 0.5 +-0.043156 0.162156 -0.0100947 0.380322 0.454707 +-0.0560239 0.144237 -0.00161522 0.724843 0.5 +-0.0759996 0.139851 -0.00609906 0.441077 0.427878 +-0.0498834 0.108435 -0.0190271 0.795462 0.5 +-0.0468821 0.108426 -0.0186436 0.741559 0.5 +-0.051889 0.108419 -0.0189045 0.752643 0.5 +-0.0288456 0.0986889 -0.0235542 0.807476 0.5 +-0.0738463 0.114952 -0.00659368 0.347495 0.5 +-0.0641553 0.162388 -0.0586672 0.54372 0.5 +0.0262791 0.0675449 -0.0231801 0.736181 0.30726 +0.0252903 0.0675893 -0.0238235 0.728756 0.5 +0.0242906 0.0676576 -0.0247124 0.704567 0.5 +0.0232194 0.06778 -0.026032 0.740248 0.5 +0.022277 0.0678419 -0.0269851 0.736421 0.5 +0.0212831 0.0679005 -0.027755 0.708271 0.5 +0.0203192 0.0679349 -0.0283363 0.698896 0.5 +0.0193228 0.0679612 -0.0287395 0.681284 0.5 +0.0183075 0.0679765 -0.028974 0.662637 0.466243 +0.0173027 0.0680054 -0.0293377 0.658948 0.5 +0.0162924 0.0680403 -0.0298148 0.659108 0.378419 +0.0152753 0.0680849 -0.0302874 0.661748 0.5 +0.014283 0.0681091 -0.0306905 0.651019 0.5 +0.0133289 0.0681229 -0.0310343 0.650266 0.470554 +0.0123125 0.0680946 -0.0309662 0.763998 0.5 +0.0112937 0.0680868 -0.0307505 0.818076 0.5 +0.0102706 0.0681153 -0.0309054 0.825052 0.5 +0.009256 0.0681484 -0.0312392 0.826137 0.5 +0.00826686 0.0681716 -0.0316571 0.831144 0.5 +0.00726262 0.0682112 -0.0321527 0.831813 0.5 +0.00627327 0.0682324 -0.0325665 0.599021 0.5 +0.00528322 0.0682375 -0.0327226 0.73028 0.5 +0.00426734 0.0682596 -0.032922 0.692883 0.5 +0.00326914 0.0682665 -0.0330635 0.648965 0.5 +0.00226876 0.0682822 -0.0333186 0.903214 0.5 +0.00127365 0.0682996 -0.0335875 0.647223 0.5 +0.000274533 0.0683164 -0.033854 0.700654 0.5 +-0.0007305 0.0683317 -0.0340878 0.764349 0.5 +-0.00172768 0.0683482 -0.0343533 0.790948 0.5 +-0.00273038 0.0683735 -0.0347173 0.622765 0.5 +-0.00373539 0.0684024 -0.0350771 0.63202 0.482516 +-0.00473829 0.0684427 -0.0355801 0.615828 0.484523 +-0.00573558 0.0684573 -0.035843 0.771329 0.5 +-0.006733 0.0684593 -0.0359965 0.757441 0.5 +-0.00773829 0.0684701 -0.0360951 0.74898 0.5 +-0.00873489 0.068452 -0.036144 0.75244 0.407964 +-0.009723 0.0684621 -0.0362531 0.76291 0.5 +-0.0107444 0.0685007 -0.0365794 0.755564 0.40943 +-0.0117377 0.0685356 -0.0370961 0.595231 0.5 +-0.0127182 0.0685587 -0.0376659 0.581028 0.470136 +-0.0137228 0.0685659 -0.0377913 0.582122 0.476837 +-0.0147316 0.0685868 -0.0380387 0.566665 0.482724 +-0.0157421 0.0686009 -0.0381423 0.70819 0.5 +-0.0167436 0.068615 -0.0382083 0.660531 0.5 +-0.017747 0.0685932 -0.0381265 0.645161 0.5 +-0.0187468 0.0685918 -0.0381091 0.642047 0.5 +-0.0197563 0.0685528 -0.0378978 0.847898 0.5 +-0.0207506 0.0685447 -0.0377382 0.80549 0.5 +-0.0217729 0.0684817 -0.0372671 0.517068 0.5 +-0.0227695 0.0684387 -0.0367377 0.472294 0.5 +-0.0237519 0.0683934 -0.0360687 0.4533 0.5 +-0.0247363 0.0683356 -0.0352871 0.443935 0.5 +-0.0257476 0.0682496 -0.0344079 0.463709 0.5 +-0.045101 0.156152 -0.00816042 0.684135 0.5 +-0.0630177 0.135513 -0.00745136 0.820431 0.5 +-0.0660053 0.138467 -0.00776776 0.585226 0.5 +-0.0158843 0.0377689 0.0515755 0.31974 0.404994 +-0.0351226 0.169652 -0.0145814 0.468628 0.5 +-0.0548971 0.10981 -0.018029 0.666707 0.5 +-0.0312923 0.0362769 0.0513145 0.518297 0.5 +-0.0231534 0.0352107 0.0523184 0.894874 0.5 +-0.0347008 0.0666358 -0.0153327 0.426734 0.5 +-0.035694 0.0666325 -0.0153314 0.524415 0.5 +-0.0366932 0.0665933 -0.0149481 0.731342 0.5 +-0.0376939 0.0665912 -0.0149459 0.935226 0.5 +-0.0386977 0.0666031 -0.0147476 0.604345 0.5 +-0.0397006 0.0666136 -0.0148744 0.690962 0.5 +-0.0407009 0.066639 -0.0151117 0.765395 0.5 +-0.0417025 0.0666657 -0.0153449 0.861592 0.5 +-0.0426942 0.0666296 -0.0154091 0.896223 0.5 +-0.0436843 0.0666417 -0.0153695 0.881955 0.5 +-0.0446938 0.0665983 -0.0153032 0.838094 0.5 +-0.0456914 0.0665681 -0.0150523 0.545818 0.5 +-0.0466973 0.0665278 -0.0146823 0.555152 0.5 +-0.0477042 0.0664777 -0.0141832 0.54858 0.5 +-0.0486835 0.0664435 -0.0136416 0.506759 0.5 +-0.049655 0.0664173 -0.0130805 0.510572 0.5 +-0.0506338 0.0663851 -0.0124105 0.50116 0.5 +-0.051638 0.0663266 -0.0117848 0.500487 0.5 +-0.0526917 0.0662141 -0.0112413 0.614024 0.5 +-0.0536948 0.0661603 -0.0107375 0.585841 0.5 +-0.0546942 0.0661242 -0.0103565 0.56275 0.5 +-0.0556759 0.0661408 -0.010195 0.519031 0.5 +-0.0566724 0.0661356 -0.00992741 0.534763 0.5 +-0.0576833 0.0660478 -0.00944709 0.589491 0.5 +-0.0586891 0.065984 -0.0090861 0.64718 0.5 +-0.0596856 0.0659756 -0.00895149 0.635082 0.5 +-0.0606931 0.0659255 -0.00858452 0.604016 0.5 +-0.0616838 0.0659304 -0.00830259 0.58484 0.5 +-0.0626986 0.0658458 -0.00782349 0.570729 0.5 +-0.0636795 0.0658475 -0.00727738 0.408745 0.5 +-0.064618 0.0659249 -0.00682147 0.333908 0.431912 +-0.0656433 0.0657616 -0.0058195 0.321612 0.5 +-0.0666563 0.0656524 -0.0048951 0.314765 0.5 +-0.0676491 0.065582 -0.00407795 0.296725 0.5 +-0.0828496 0.117685 -0.00271563 0.564172 0.5 +-0.0271645 0.17563 -0.018169 0.405334 0.5 +0.0121283 0.11013 -0.0187853 0.807197 0.5 +-0.0311715 0.171175 -0.0164295 0.461808 0.5 +-0.0662636 0.175335 -0.0598585 0.4074 0.458563 +-0.037886 0.109925 -0.0191545 0.662569 0.5 +-0.0727056 0.0704556 0.030746 0.569594 0.5 +-0.0390505 0.154795 -0.00905663 0.741883 0.5 +-0.0520076 0.145723 -0.00116844 0.891932 0.5 +-0.0310503 0.155166 -0.00836756 0.554851 0.5 +-0.0152525 0.177145 -0.0265204 0.436058 0.5 +-0.0700283 0.075334 0.0376711 0.604011 0.44694 +-0.0570384 0.142741 -0.0023851 0.573044 0.469636 +-0.0311809 0.165241 -0.0158459 0.60989 0.457286 +-0.0580682 0.132534 -0.0063879 0.678039 0.356252 +-0.081387 0.11145 0.0446717 0.449143 0.5 +-0.0819743 0.130956 -0.00393996 0.494453 0.425494 +-0.0809733 0.130966 -0.00434035 0.353366 0.5 +-0.0121993 0.177175 -0.0288808 0.465218 0.5 +-0.0251408 0.168241 -0.0184358 0.801817 0.5 +-0.058999 0.129653 -0.00698695 0.673717 0.5 +-0.013224 0.172718 -0.0260103 0.615563 0.5 +-0.0660982 0.156586 -0.0534726 0.413172 0.5 +-0.0550795 0.153114 -0.00215772 0.44865 0.5 +-0.0181224 0.165314 -0.018178 0.693613 0.5 +-0.0351354 0.165203 -0.0147634 0.536259 0.5 +-0.037224 0.169679 -0.0130647 0.360178 0.5 +-0.0382126 0.169665 -0.0124129 0.373149 0.476424 +-0.0580289 0.129633 -0.0066561 0.683147 0.5 +-0.0669615 0.129698 -0.00899609 0.790302 0.5 +-0.0628971 0.106793 -0.0162163 0.554684 0.5 +-0.065902 0.112354 -0.012152 0.475734 0.487365 +-0.0610173 0.135506 -0.00686914 0.851522 0.5 +-0.0718707 0.116473 -0.00776413 0.419511 0.41844 +-0.0488828 0.108449 -0.0190525 0.813444 0.5 +-0.0478845 0.108472 -0.0188663 0.84153 0.5 +-0.0539028 0.11125 -0.0176614 0.665459 0.432136 +-0.0632548 0.171035 -0.0614506 0.272755 0.425386 +-0.0729217 0.126742 -0.00866826 0.575583 0.5 +0.0272834 0.0689403 -0.022937 0.734405 0.5 +0.0262865 0.0689766 -0.0234385 0.74518 0.398206 +0.025235 0.0690602 -0.0242719 0.727449 0.5 +0.0242826 0.0691154 -0.0252241 0.74011 0.5 +0.0232722 0.0691857 -0.0260989 0.743289 0.5 +0.0222613 0.0692548 -0.0269722 0.753557 0.5 +0.0212764 0.0693138 -0.0277613 0.737641 0.5 +0.0202826 0.0693621 -0.0284085 0.721476 0.5 +0.0192967 0.0693907 -0.0288221 0.694944 0.5 +0.0182732 0.069417 -0.0291542 0.696455 0.455898 +0.0172728 0.0694422 -0.0295359 0.695149 0.5 +0.0162761 0.0694793 -0.03005 0.682565 0.5 +0.0152655 0.0695272 -0.0306629 0.672405 0.5 +0.0142799 0.0695538 -0.0310885 0.660535 0.5 +0.0132863 0.0695708 -0.0313558 0.63785 0.358293 +0.0122553 0.0695892 -0.0315106 0.779351 0.390556 +0.0112619 0.069597 -0.0315203 0.804046 0.375049 +0.0102711 0.0695708 -0.0315811 0.826643 0.368136 +0.00925419 0.0696192 -0.0318888 0.822963 0.371695 +0.00826699 0.0696219 -0.0321852 0.788738 0.5 +0.00726635 0.0696573 -0.0326992 0.589962 0.5 +0.00626131 0.0696979 -0.0331897 0.570045 0.5 +0.00525297 0.069736 -0.0335357 0.71266 0.431758 +0.00426552 0.0697141 -0.0335935 0.654887 0.461962 +0.00325461 0.0697315 -0.0336623 0.901789 0.5 +0.00225674 0.0697235 -0.0336823 0.935191 0.5 +0.0012658 0.0697321 -0.0339789 0.680843 0.456321 +0.000267595 0.0697483 -0.0342392 0.711974 0.434892 +-0.000727236 0.069749 -0.034387 0.737446 0.41746 +-0.00173892 0.0697883 -0.0347021 0.771821 0.5 +-0.00276158 0.0698244 -0.0351738 0.633068 0.474018 +-0.00374083 0.069852 -0.0355987 0.637516 0.5 +-0.00473325 0.069866 -0.0358872 0.803598 0.386684 +-0.00573885 0.0698843 -0.0361103 0.811341 0.5 +-0.00672844 0.0698676 -0.0361675 0.788457 0.5 +-0.0077447 0.0698983 -0.036343 0.796693 0.5 +-0.00874142 0.0699019 -0.0364843 0.780348 0.5 +-0.0097165 0.0698878 -0.0366754 0.614672 0.474573 +-0.0107349 0.0699421 -0.0371274 0.602592 0.5 +-0.0117423 0.070003 -0.0378791 0.60947 0.5 +-0.0127393 0.0700008 -0.0380391 0.776016 0.401931 +-0.0137303 0.0699989 -0.0380502 0.744888 0.5 +-0.0147444 0.0700214 -0.0382575 0.741237 0.412092 +-0.0157508 0.070024 -0.0384074 0.718443 0.422949 +-0.0167502 0.070002 -0.0383082 0.685797 0.428348 +-0.0177485 0.0700027 -0.0382786 0.68725 0.430484 +-0.0187683 0.0699858 -0.0381989 0.6748 0.444567 +-0.0197535 0.0700012 -0.0382558 0.645377 0.458848 +-0.0207576 0.069984 -0.0381379 0.609456 0.464215 +-0.0217647 0.0699552 -0.0378816 0.568036 0.5 +-0.0227683 0.0699063 -0.0373697 0.523389 0.5 +-0.0237931 0.0698259 -0.0366341 0.485165 0.5 +-0.024745 0.0698061 -0.0360534 0.477948 0.5 +-0.0257526 0.069725 -0.0351721 0.464833 0.5 +-0.0818741 0.119187 -0.00382424 0.55518 0.5 +-0.0620293 0.135502 -0.00717407 0.840907 0.5 +-0.0669932 0.138471 -0.00790807 0.772862 0.5 +-0.0799141 0.109193 0.0343277 0.548424 0.5 +-0.0361907 0.169669 -0.0137878 0.37892 0.5 +-0.0652159 0.16242 -0.0585196 0.407153 0.5 +-0.0707453 0.113137 0.049314 0.445941 0.5 +-0.0688839 0.117973 -0.00851105 0.658201 0.5 +-0.0347085 0.0681808 -0.0168555 0.382401 0.5 +-0.0357042 0.0681118 -0.016092 0.666323 0.5 +-0.0367004 0.0680804 -0.0157124 0.698359 0.5 +-0.0376995 0.0680509 -0.0154542 0.923785 0.5 +-0.0387089 0.068094 -0.0155018 0.590626 0.5 +-0.0397063 0.0680709 -0.01554 0.695159 0.5 +-0.040716 0.0681271 -0.0158645 0.546166 0.5 +-0.0417084 0.0681156 -0.0160245 0.875899 0.5 +-0.0427018 0.0681213 -0.0161497 0.883989 0.5 +-0.0436993 0.0680874 -0.0160622 0.856868 0.5 +-0.0446949 0.0680713 -0.0159309 0.817708 0.5 +-0.045682 0.0680577 -0.0156409 0.763012 0.5 +-0.0466818 0.0680053 -0.0151447 0.52117 0.5 +-0.0476898 0.0679558 -0.0146484 0.401473 0.5 +-0.0486968 0.067904 -0.0141574 0.513656 0.5 +-0.0496757 0.0678792 -0.0135965 0.749621 0.5 +-0.0506838 0.0678366 -0.0132392 0.777255 0.5 +-0.0516893 0.0678068 -0.0129959 0.791374 0.5 +-0.0526737 0.0678526 -0.0129346 0.782737 0.5 +-0.0536823 0.0678463 -0.0129474 0.771199 0.5 +-0.054684 0.067848 -0.0128124 0.680291 0.5 +-0.0556879 0.0677603 -0.0123408 0.609828 0.5 +-0.056688 0.067746 -0.0120827 0.639534 0.5 +-0.0576869 0.0677197 -0.0118328 0.467141 0.46674 +-0.0586925 0.0677294 -0.0118268 0.455273 0.464681 +-0.0597053 0.0675469 -0.0111319 0.478048 0.5 +-0.0606769 0.0676671 -0.0113119 0.48242 0.5 +-0.0616833 0.0676348 -0.0109359 0.455881 0.429499 +-0.0626586 0.0676213 -0.0103966 0.422384 0.422462 +-0.0636417 0.067527 -0.00924444 0.321124 0.5 +-0.0646256 0.0674757 -0.0084666 0.294228 0.5 +-0.0656775 0.067321 -0.00750664 0.285918 0.442545 +-0.0666614 0.0672261 -0.0064803 0.279126 0.40966 +-0.0675878 0.0672405 -0.0057657 0.283485 0.339917 +0.00210157 0.111597 -0.0202587 0.711375 0.5 +-0.0398868 0.108509 -0.0195593 0.650949 0.5 +-0.0639625 0.126764 -0.00871214 0.827084 0.5 +-0.0371717 0.165191 -0.0136726 0.472837 0.5 +-0.067238 0.175347 -0.0588701 0.567704 0.5 +-0.057893 0.109749 -0.0172343 0.464019 0.5 +-0.0689146 0.108019 -0.0123122 0.633912 0.5 +-0.0650297 0.138462 -0.00769967 0.615994 0.5 +-0.0662078 0.0723697 0.0374848 0.553113 0.5 +-0.0691138 0.0763852 0.0387083 0.610919 0.453822 +-0.0530088 0.145722 -0.00115007 0.924702 0.5 +-0.0699144 0.1253 -0.00883057 0.78846 0.5 +-0.0749897 0.139866 -0.00647617 0.47419 0.5 +-0.0321623 0.172645 -0.015639 0.47739 0.5 +-0.0331471 0.172636 -0.0149853 0.69346 0.5 +-0.0639022 0.10675 -0.0154602 0.565124 0.5 +-0.0648797 0.106687 -0.0146649 0.607149 0.5 +-0.0659084 0.106679 -0.0142087 0.649804 0.398055 +-0.0668809 0.106639 -0.013906 0.651437 0.5 +-0.067905 0.106631 -0.013438 0.627225 0.5 +-0.0689089 0.106601 -0.012938 0.484513 0.5 +-0.0699106 0.10657 -0.0124287 0.486563 0.481579 +-0.0709057 0.106531 -0.0119068 0.500163 0.475966 +-0.0590382 0.132561 -0.00680716 0.664738 0.5 +-0.0669085 0.108072 -0.0133167 0.492253 0.486689 +-0.0341448 0.166698 -0.0152744 0.552563 0.382699 +-0.0191218 0.165312 -0.0179178 0.775946 0.5 +-0.027126 0.165248 -0.0165316 0.851279 0.5 +-0.0777691 0.0689598 0.0151422 0.763007 0.5 +-0.0659224 0.108105 -0.0137141 0.643794 0.5 +-0.0540072 0.144242 -0.000990452 0.71194 0.5 +-0.0769694 0.136896 -0.00565009 0.515159 0.5 +-0.0718755 0.10648 -0.0114758 0.496336 0.5 +-0.084006 0.130916 -0.00261237 0.543198 0.5 +-0.0548973 0.112625 -0.01673 0.62668 0.5 +-0.0678966 0.110866 -0.0116376 0.499541 0.487692 +-0.0508811 0.108424 -0.0190099 0.779716 0.5 +-0.0569156 0.112617 -0.0162683 0.453649 0.473927 +-0.0659485 0.126772 -0.00885106 0.813886 0.5 +-0.0699244 0.107994 -0.0118147 0.489816 0.484852 +-0.0460989 0.157633 -0.00826241 0.420633 0.5 +0.0272754 0.0703879 -0.0233186 0.744671 0.5 +0.0262968 0.070421 -0.0238548 0.729964 0.5 +0.0252898 0.0704815 -0.0246106 0.72926 0.5 +0.0242883 0.0705502 -0.0254969 0.739494 0.5 +0.0232364 0.0706221 -0.0263108 0.755209 0.401084 +0.022282 0.0706591 -0.0268891 0.759075 0.5 +0.021248 0.0707121 -0.0275992 0.728577 0.5 +0.0202555 0.0707617 -0.0282449 0.712937 0.5 +0.019265 0.0708008 -0.0287723 0.721551 0.5 +0.0182783 0.0708328 -0.0291795 0.729788 0.439181 +0.0172769 0.0708593 -0.0295557 0.725121 0.442168 +0.0162881 0.0708862 -0.0299631 0.704442 0.5 +0.0152704 0.07093 -0.0305648 0.680651 0.5 +0.0142674 0.0709686 -0.0310685 0.669363 0.5 +0.0132369 0.0709965 -0.0314873 0.658239 0.5 +0.0122698 0.0710113 -0.031719 0.643644 0.5 +0.0112495 0.0710359 -0.0320326 0.64299 0.482225 +0.0102622 0.0710503 -0.0323195 0.648671 0.479648 +0.00924462 0.0710839 -0.0326657 0.632325 0.5 +0.00821291 0.0711477 -0.0331375 0.608771 0.397356 +0.00724928 0.0711363 -0.0334334 0.582533 0.479454 +0.00626754 0.071137 -0.0337471 0.733768 0.5 +0.00525204 0.071179 -0.0340737 0.680745 0.5 +0.00425284 0.0711834 -0.0342035 0.650424 0.5 +0.0032483 0.071196 -0.0343078 0.921953 0.5 +0.00225805 0.0711729 -0.0343766 0.92531 0.5 +0.00125071 0.0712122 -0.0347068 0.679096 0.5 +0.000251433 0.0712294 -0.0349609 0.714691 0.432521 +-0.00074702 0.0712329 -0.0350931 0.766942 0.401446 +-0.0017304 0.0712031 -0.0351875 0.781422 0.397881 +-0.00273284 0.0712345 -0.035418 0.802903 0.5 +-0.00374904 0.0712712 -0.0357267 0.830158 0.5 +-0.00474585 0.0712867 -0.0359934 0.832752 0.5 +-0.00573884 0.0712887 -0.036141 0.820816 0.5 +-0.00674006 0.0712942 -0.0362643 0.819697 0.5 +-0.0077489 0.0713239 -0.0366154 0.801352 0.5 +-0.00874604 0.0713519 -0.0371122 0.625043 0.374028 +-0.00973422 0.0712867 -0.0371391 0.636127 0.366757 +-0.0107396 0.0713653 -0.0375278 0.643133 0.464323 +-0.0117515 0.0714338 -0.0381291 0.650942 0.5 +-0.0127384 0.0714338 -0.0383051 0.78147 0.5 +-0.0137469 0.0714346 -0.0382786 0.794777 0.5 +-0.0147515 0.07145 -0.0385454 0.768387 0.5 +-0.0157548 0.0714554 -0.0386719 0.719291 0.5 +-0.0167567 0.0714512 -0.0386579 0.708152 0.5 +-0.01776 0.0714448 -0.0386564 0.700665 0.5 +-0.0187655 0.0714126 -0.0384549 0.682289 0.5 +-0.0197639 0.0714243 -0.0385337 0.688339 0.5 +-0.0207784 0.0714012 -0.0384405 0.631356 0.5 +-0.0217734 0.0713925 -0.0382795 0.585427 0.5 +-0.0227774 0.0713561 -0.0378898 0.545847 0.5 +-0.0237576 0.0713185 -0.0373359 0.497524 0.5 +-0.0247655 0.0712486 -0.0365856 0.490935 0.5 +-0.0257404 0.0712076 -0.0359148 0.482529 0.353859 +-0.0267454 0.0711222 -0.0350441 0.492087 0.438952 +-0.0618921 0.119466 -0.00942759 0.609132 0.5 +-0.0609057 0.119508 -0.00974426 0.580609 0.5 +-0.067984 0.13847 -0.00792156 0.768036 0.5 +-0.0765927 0.0770726 0.0330453 0.723821 0.5 +-0.0771832 0.107237 0.0346968 0.442449 0.5 +-0.0578899 0.111162 -0.0167182 0.452292 0.5 +-0.0691508 0.152358 -0.047074 0.240898 0.5 +-0.0347147 0.0696617 -0.0176192 0.244355 0.5 +-0.0357119 0.0695868 -0.0167299 0.482391 0.5 +-0.0367079 0.0695483 -0.0163464 0.688255 0.5 +-0.0377072 0.0695284 -0.0160926 0.907754 0.5 +-0.0387164 0.0695709 -0.0161311 0.601546 0.5 +-0.039718 0.0695625 -0.0162922 0.685926 0.5 +-0.0407273 0.0696207 -0.0166002 0.539811 0.5 +-0.0417165 0.069628 -0.0168617 0.827476 0.5 +-0.0427066 0.0696149 -0.0170299 0.897043 0.5 +-0.043713 0.0695592 -0.0168487 0.812961 0.5 +-0.0447099 0.069553 -0.0165571 0.554957 0.458273 +-0.0457003 0.0694971 -0.0160523 0.527556 0.5 +-0.0466969 0.0694537 -0.0155404 0.727471 0.5 +-0.0476756 0.0694312 -0.0151035 0.528242 0.5 +-0.0486922 0.0693814 -0.0146213 0.552577 0.5 +-0.049695 0.0693575 -0.0143663 0.822898 0.5 +-0.0506923 0.0693793 -0.0143111 0.848832 0.5 +-0.0517049 0.0693137 -0.014154 0.816573 0.5 +-0.0527007 0.0693372 -0.0141095 0.812569 0.5 +-0.053703 0.069339 -0.0141095 0.823867 0.5 +-0.0547028 0.0693497 -0.0142348 0.816207 0.5 +-0.0557017 0.0693735 -0.0143448 0.783683 0.5 +-0.0566985 0.0694351 -0.0145553 0.786077 0.5 +-0.0576914 0.0693962 -0.0144511 0.758176 0.5 +-0.0586931 0.0693474 -0.0143558 0.752034 0.5 +-0.0596861 0.0693591 -0.0143393 0.710201 0.5 +-0.0606931 0.0692955 -0.0138548 0.472826 0.461726 +-0.0616784 0.0692367 -0.0132074 0.362392 0.461846 +-0.0626761 0.0691812 -0.0125769 0.437166 0.5 +-0.0636659 0.0691264 -0.011804 0.398749 0.5 +-0.0646189 0.0691309 -0.0109873 0.316854 0.5 +-0.0656199 0.0690554 -0.0100807 0.293936 0.429765 +-0.0666306 0.0689692 -0.00898899 0.292383 0.405129 +-0.0676215 0.0688155 -0.00772966 0.248105 0.295877 +-0.0686185 0.0687175 -0.00655491 0.199291 0.401358 +-0.0695881 0.0687436 -0.00572614 0.198391 0.283441 +-0.0560271 0.142758 -0.00201441 0.580892 0.472994 +-0.0829923 0.130939 -0.00341376 0.497191 0.5 +-0.0589237 0.11399 -0.014753 0.574577 0.5 +-0.0599938 0.126727 -0.00781868 0.824942 0.5 +-0.00998984 0.177238 -0.0295136 0.342899 0.5 +-0.0221892 0.177131 -0.0213718 0.344322 0.460466 +-0.073931 0.128192 -0.0084465 0.38666 0.5 +-0.0790747 0.0713835 0.0198308 0.605509 0.5 +-0.063246 0.0709836 0.037551 0.639731 0.5 +-0.0540085 0.145723 -0.00127177 0.683615 0.5 +-0.0743852 0.111313 0.0463698 0.520945 0.5 +-0.0709113 0.107952 -0.0112859 0.497882 0.5 +-0.0558334 0.0358523 0.0464479 0.364612 0.5 +-0.0728995 0.10646 -0.0108772 0.620793 0.5 +-0.0739011 0.106421 -0.010241 0.622935 0.5 +-0.0748631 0.106362 -0.00967707 0.625636 0.5 +-0.0152743 0.180101 -0.0270399 0.284476 0.471141 +-0.0511241 0.157581 -0.00475152 0.371386 0.463703 +-0.0191687 0.171226 -0.0215143 0.720457 0.5 +-0.0400692 0.157713 -0.010751 0.740568 0.5 +-0.0496681 0.0705507 0.0391462 0.715949 0.5 +-0.0550216 0.142767 -0.00162505 0.583577 0.5 +-0.0118777 0.107304 -0.0220947 0.606687 0.5 +-0.0211973 0.0363196 0.0534993 0.427996 0.5 +-0.0201288 0.165284 -0.0176913 0.791037 0.5 +-0.0687451 0.0708436 0.0347552 0.480601 0.5 +-0.0773807 0.0774654 0.0325309 0.706167 0.5 +-0.0610049 0.129668 -0.00770337 0.671358 0.475718 +-0.0510555 0.150177 -0.00351578 0.535219 0.5 +-0.068908 0.112267 -0.0105177 0.605849 0.5 +-0.0689469 0.131135 -0.00874709 0.68033 0.5 +-0.073925 0.126728 -0.0084362 0.418757 0.5 +-0.0639921 0.134062 -0.00777265 0.793828 0.5 +-0.0430782 0.154691 -0.00814248 0.80231 0.5 +-0.0381729 0.166677 -0.0130206 0.470986 0.448448 +-0.0578994 0.112578 -0.0159728 0.448074 0.478926 +-0.0331359 0.168192 -0.0157544 0.503875 0.5 +-0.0869809 0.112371 0.0426661 0.452737 0.5 +0.0282298 0.0717826 -0.0228933 0.757447 0.5 +0.0272815 0.0718243 -0.0235929 0.756985 0.5 +0.0262673 0.0718723 -0.0242084 0.732481 0.5 +0.025252 0.0719314 -0.0249494 0.731446 0.5 +0.0242867 0.0719771 -0.0256393 0.755891 0.5 +0.0232927 0.0720269 -0.0262872 0.758311 0.5 +0.0222613 0.0720727 -0.026869 0.753577 0.5 +0.021294 0.0721108 -0.027322 0.732267 0.427259 +0.0202221 0.0721388 -0.0279345 0.728053 0.5 +0.0192558 0.0721931 -0.0285132 0.724974 0.5 +0.0182463 0.0722224 -0.0290012 0.720804 0.5 +0.0172553 0.072257 -0.0294021 0.718043 0.5 +0.0162463 0.0722881 -0.029887 0.694951 0.5 +0.0152406 0.0723235 -0.0303843 0.681332 0.5 +0.0142384 0.0723592 -0.0308856 0.676105 0.5 +0.0132668 0.0723896 -0.0312102 0.684168 0.467452 +0.0122687 0.0724051 -0.0314733 0.849063 0.5 +0.0112474 0.0724264 -0.0317987 0.688801 0.5 +0.0102738 0.0724526 -0.032232 0.679677 0.5 +0.00925016 0.0724976 -0.0328208 0.643248 0.5 +0.00824961 0.0725345 -0.0333305 0.622629 0.5 +0.00723812 0.0725784 -0.0338132 0.759549 0.5 +0.00625559 0.0725849 -0.0341185 0.723547 0.5 +0.00524711 0.0726037 -0.0343433 0.693317 0.5 +0.00425042 0.072607 -0.0344972 0.66945 0.461295 +0.00324634 0.0726279 -0.0347233 0.688047 0.450714 +0.00225053 0.0726262 -0.0348847 0.679838 0.5 +0.00124491 0.0726488 -0.0351082 0.713353 0.5 +0.000248169 0.0726618 -0.0353693 0.572746 0.5 +-0.000746952 0.0726633 -0.0355323 0.769252 0.5 +-0.00174908 0.0726707 -0.0356483 0.789657 0.5 +-0.00274076 0.0726647 -0.0356738 0.805947 0.5 +-0.00374732 0.0726737 -0.0357771 0.817376 0.5 +-0.0047515 0.0726952 -0.0359954 0.81506 0.5 +-0.00575365 0.0727093 -0.0362416 0.81747 0.5 +-0.00675345 0.0727271 -0.0364938 0.804525 0.5 +-0.00773777 0.0727528 -0.0370634 0.631107 0.5 +-0.00874857 0.0727984 -0.0375275 0.817656 0.5 +-0.00975454 0.0728065 -0.0376393 0.816041 0.5 +-0.0107636 0.0728162 -0.0377336 0.83268 0.5 +-0.0117675 0.0728437 -0.0380964 0.836186 0.5 +-0.0127593 0.0728576 -0.0383837 0.821735 0.5 +-0.0137652 0.0728728 -0.0386088 0.799831 0.5 +-0.0147627 0.0728806 -0.0387608 0.758842 0.5 +-0.0157652 0.0728861 -0.0388826 0.756793 0.5 +-0.0167638 0.0728801 -0.0389011 0.74123 0.5 +-0.0177632 0.0728777 -0.0388934 0.719018 0.5 +-0.0187634 0.0728738 -0.0388715 0.688303 0.5 +-0.0197661 0.0728664 -0.0388949 0.680083 0.43401 +-0.0207747 0.0728486 -0.0387932 0.621529 0.5 +-0.0217873 0.0728206 -0.0385569 0.593942 0.5 +-0.022785 0.0727991 -0.0382731 0.540307 0.5 +-0.0237817 0.0727523 -0.0377511 0.391046 0.472131 +-0.0247629 0.0727034 -0.0370836 0.473377 0.5 +-0.0257601 0.0726356 -0.0363191 0.490454 0.399612 +-0.0267449 0.0725846 -0.0356647 0.49417 0.5 +-0.0277078 0.0725313 -0.0348614 0.499357 0.5 +0.0101411 0.103018 -0.0207697 0.884081 0.5 +-0.0758841 0.106327 -0.00893896 0.626349 0.5 +-0.0689806 0.138464 -0.0078252 0.724424 0.5 +-0.065182 0.160968 -0.0576695 0.418617 0.5 +-0.0568852 0.111179 -0.0170834 0.472014 0.457127 +0.00913581 0.103011 -0.0206427 0.652184 0.45486 +-0.0347226 0.0711465 -0.0183854 0.195277 0.5 +-0.0357211 0.0710689 -0.0174927 0.493889 0.5 +-0.0367194 0.0710436 -0.0172369 0.678035 0.5 +-0.037714 0.0710075 -0.016855 0.891574 0.5 +-0.0387216 0.0710357 -0.0169218 0.577171 0.5 +-0.0397209 0.0710215 -0.0169451 0.684204 0.5 +-0.0407313 0.0710722 -0.0172567 0.547404 0.475153 +-0.0417202 0.0710768 -0.017536 0.59438 0.5 +-0.0427147 0.0710705 -0.0176966 0.633518 0.5 +-0.0437155 0.0710509 -0.0175901 0.821157 0.5 +-0.0447185 0.0709976 -0.0171011 0.720588 0.5 +-0.0457202 0.0709417 -0.0164642 0.687587 0.5 +-0.0467107 0.0709021 -0.0159388 0.704895 0.5 +-0.0477053 0.0708612 -0.0154107 0.770562 0.5 +-0.0487026 0.0708482 -0.0151225 0.837183 0.5 +-0.0497015 0.070866 -0.0150622 0.641568 0.5 +-0.0507107 0.0708743 -0.0151986 0.66395 0.5 +-0.0517184 0.0708739 -0.0153462 0.885944 0.5 +-0.0527211 0.0709092 -0.0154358 0.869588 0.5 +-0.0537213 0.0709084 -0.0154466 0.872444 0.5 +-0.0547181 0.0708998 -0.0155975 0.859039 0.5 +-0.0557143 0.0709328 -0.0156898 0.855878 0.5 +-0.056712 0.0708617 -0.0156392 0.849627 0.5 +-0.0577119 0.0708497 -0.0156457 0.836583 0.5 +-0.0587133 0.0708136 -0.0155469 0.819737 0.5 +-0.0597131 0.0708022 -0.0154129 0.801464 0.5 +-0.0607072 0.0707896 -0.0151427 0.745043 0.5 +-0.0617049 0.070743 -0.0146345 0.487878 0.5 +-0.0626999 0.0706798 -0.0138683 0.481662 0.5 +-0.0637125 0.0705931 -0.0131267 0.452922 0.5 +-0.0646849 0.0705888 -0.0125799 0.419612 0.33259 +-0.0656817 0.0705232 -0.0118151 0.368719 0.5 +-0.066663 0.0704664 -0.0109078 0.288671 0.45581 +-0.0676348 0.0704852 -0.0103532 0.278915 0.443371 +-0.0685649 0.0705046 -0.00966184 0.290101 0.5 +-0.0696234 0.0702067 -0.00731499 0.220915 0.5 +-0.0706455 0.0701231 -0.00669595 0.165522 0.5 +-0.0716108 0.0701594 -0.00639514 0.207895 0.5 +0.008145 0.103004 -0.0207662 0.703689 0.5 +-0.0648762 0.109524 -0.0137682 0.617162 0.5 +-0.0109917 0.177231 -0.0295208 0.413115 0.5 +-0.0232113 0.177135 -0.0206374 0.356126 0.5 +-0.0491601 0.160603 -0.00598464 0.342324 0.5 +-0.0672794 0.176766 -0.0591515 0.366708 0.447008 +-0.0849191 0.117035 0.0482987 0.710491 0.5 +-0.0560293 0.0674866 0.0368481 0.667097 0.5 +-0.0792446 0.0699823 0.0139682 0.53722 0.295925 +-0.0649943 0.0623954 0.0235277 0.406552 0.462573 +-0.0172735 0.180097 -0.0253788 0.382178 0.5 +-0.0578898 0.108324 -0.0176181 0.611673 0.5 +-0.0530022 0.0712206 0.0395879 0.689964 0.5 +-0.0162612 0.17862 -0.0260128 0.334827 0.42792 +-0.0261862 0.17712 -0.0185723 0.513395 0.5 +0.00713618 0.103008 -0.0210892 0.736518 0.5 +-0.0768529 0.106269 -0.00826114 0.597353 0.5 +-0.0642836 0.175364 -0.0612207 0.325181 0.5 +-0.0571072 0.154583 -0.000558004 0.434814 0.5 +-0.063767 0.0615586 0.0227478 0.559912 0.5 +-0.0680607 0.153823 -0.0498908 0.331169 0.5 +-0.0716564 0.0639047 0.0190638 0.544659 0.408753 +-0.0882831 0.114383 0.0443189 0.518088 0.5 +-0.0520198 0.147215 -0.00210798 0.850195 0.5 +-0.0619905 0.129678 -0.00799355 0.660101 0.480289 +0.00614005 0.103026 -0.0213684 0.75754 0.5 +-0.0749012 0.110639 -0.0076926 0.555889 0.5 +-0.0212115 0.177139 -0.0220322 0.355534 0.5 +-0.0420929 0.156178 -0.00917116 0.773657 0.5 +-0.0749222 0.126715 -0.00818803 0.405979 0.457671 +-0.0858669 0.119072 -0.00140229 0.479328 0.5 +-0.0698753 0.117966 -0.00835455 0.664901 0.5 +-0.0699642 0.138462 -0.00776795 0.671212 0.5 +-0.0620405 0.138434 -0.00686017 0.666407 0.5 +-0.0652259 0.166727 -0.0597961 0.39101 0.419169 +0.00514522 0.103044 -0.0216473 0.744775 0.5 +0.0282636 0.073195 -0.0229429 0.753324 0.5 +0.0272437 0.0732614 -0.0238068 0.756619 0.5 +0.0262796 0.0733084 -0.0244949 0.749467 0.5 +0.0252808 0.0733562 -0.0251315 0.760664 0.5 +0.0242564 0.0734016 -0.0257301 0.759302 0.5 +0.0232513 0.0734458 -0.026356 0.743423 0.5 +0.0222567 0.0734747 -0.02675 0.746008 0.5 +0.0212602 0.0735043 -0.0271352 0.743658 0.5 +0.0202388 0.0735294 -0.0276011 0.729416 0.5 +0.0192552 0.0735767 -0.0281447 0.737516 0.5 +0.0182552 0.0736117 -0.028651 0.717405 0.5 +0.0172623 0.073643 -0.0290458 0.712202 0.5 +0.0162606 0.0736784 -0.0295549 0.70009 0.5 +0.0152424 0.0737083 -0.0300265 0.693382 0.5 +0.0142589 0.0737441 -0.0304465 0.679361 0.5 +0.0132662 0.0737717 -0.03084 0.694512 0.5 +0.0122374 0.0737871 -0.031159 0.829914 0.5 +0.0112326 0.0738116 -0.0315294 0.719764 0.5 +0.0102584 0.0738736 -0.0323425 0.692398 0.5 +0.0092913 0.0739064 -0.0330363 0.654771 0.461698 +0.00825492 0.0739666 -0.0336091 0.789183 0.5 +0.00725148 0.0739904 -0.0339985 0.758752 0.408834 +0.00623854 0.074018 -0.0343382 0.710568 0.5 +0.00525002 0.0740223 -0.0345195 0.721395 0.5 +0.0042421 0.0740405 -0.0347398 0.714991 0.5 +0.00324014 0.0740573 -0.0349749 0.713986 0.5 +0.00224668 0.0740592 -0.0351433 0.695951 0.5 +0.00124079 0.0740793 -0.0353703 0.721449 0.5 +0.000235601 0.0740952 -0.0356038 0.753434 0.5 +-0.000755237 0.0740961 -0.035785 0.799862 0.5 +-0.00176079 0.0741065 -0.0358743 0.815209 0.5 +-0.00275795 0.0740872 -0.0359501 0.804585 0.383514 +-0.00375332 0.07411 -0.0361467 0.814155 0.377247 +-0.00475508 0.0741241 -0.036385 0.807248 0.381297 +-0.00575874 0.0741425 -0.036638 0.808454 0.388824 +-0.0067422 0.0741543 -0.0369448 0.627364 0.487104 +-0.00776303 0.0742012 -0.03739 0.644034 0.5 +-0.00874908 0.0742103 -0.037697 0.837285 0.5 +-0.00975763 0.0742329 -0.0379217 0.826055 0.5 +-0.0107442 0.0742291 -0.0379783 0.833834 0.5 +-0.0117585 0.0742488 -0.0381827 0.840086 0.5 +-0.0127624 0.0742651 -0.0384156 0.832444 0.5 +-0.0137664 0.0742812 -0.0386456 0.836432 0.5 +-0.0147659 0.0742889 -0.0388052 0.829906 0.5 +-0.0157667 0.0742966 -0.0389627 0.811594 0.5 +-0.0167703 0.0742961 -0.0390024 0.790713 0.5 +-0.0177692 0.074285 -0.0389303 0.751656 0.5 +-0.0187732 0.0742782 -0.038946 0.743637 0.5 +-0.019773 0.0742847 -0.0390372 0.705044 0.5 +-0.020775 0.0742803 -0.0390259 0.670105 0.5 +-0.0217865 0.0742531 -0.0388026 0.616749 0.5 +-0.0227837 0.0742285 -0.0385317 0.537035 0.458584 +-0.0238007 0.0741774 -0.0380398 0.39297 0.457854 +-0.0247632 0.0741431 -0.0374571 0.459299 0.393271 +-0.0257535 0.0740897 -0.0368116 0.376081 0.467915 +-0.0267551 0.0740245 -0.0360482 0.478454 0.363196 +-0.0277305 0.073972 -0.0353872 0.50277 0.430952 +0.00414764 0.103055 -0.021794 0.753326 0.5 +-0.0778694 0.106226 -0.00738941 0.571513 0.5 +0.00315167 0.10307 -0.0219554 0.735581 0.5 +-0.0749718 0.138395 -0.00644263 0.509993 0.435147 +-0.0640884 0.160897 -0.0576117 0.441464 0.5 +-0.0121987 0.171236 -0.0257581 0.579756 0.5 +-0.0345906 0.0727451 -0.0199624 0.173263 0.5 +-0.0357278 0.07254 -0.0181295 0.313348 0.5 +-0.0367265 0.0725274 -0.0180009 0.546237 0.5 +-0.0377229 0.0724783 -0.0174913 0.745977 0.5 +-0.0387321 0.0724952 -0.0174162 0.610373 0.5 +-0.0397313 0.072486 -0.017441 0.675525 0.5 +-0.0407291 0.0724971 -0.0177035 0.530495 0.5 +-0.0417274 0.0725105 -0.0179617 0.593531 0.5 +-0.0427238 0.072521 -0.0180673 0.633829 0.5 +-0.0437241 0.0724973 -0.0179849 0.587196 0.5 +-0.044734 0.0724552 -0.0176324 0.736722 0.5 +-0.0457178 0.0724199 -0.0170809 0.698688 0.5 +-0.046711 0.0723683 -0.0164352 0.715495 0.303385 +-0.0476953 0.0723623 -0.0159721 0.757455 0.5 +-0.0487147 0.0723044 -0.01565 0.843935 0.5 +-0.0497184 0.0723081 -0.0156401 0.887898 0.5 +-0.0507233 0.0723393 -0.0157137 0.901494 0.5 +-0.0517297 0.0723507 -0.015831 0.909983 0.5 +-0.0527322 0.0723715 -0.0160877 0.917139 0.5 +-0.0537245 0.0723552 -0.016258 0.897201 0.5 +-0.0547243 0.0723714 -0.0165135 0.886337 0.5 +-0.0557218 0.0723836 -0.0166307 0.894648 0.5 +-0.0567184 0.0723883 -0.016755 0.868693 0.5 +-0.0577142 0.0723919 -0.0167433 0.84928 0.5 +-0.0587154 0.0723411 -0.016523 0.827453 0.5 +-0.0597101 0.0723346 -0.0163812 0.814406 0.5 +-0.0607248 0.0722644 -0.016058 0.792961 0.5 +-0.0617151 0.0722545 -0.0157777 0.534263 0.5 +-0.0627089 0.0722313 -0.0153832 0.509185 0.5 +-0.0636875 0.0722354 -0.0149801 0.489442 0.445103 +-0.0646745 0.0721957 -0.0143162 0.348465 0.471742 +-0.0656915 0.0720893 -0.0135891 0.416875 0.5 +-0.0666558 0.0720875 -0.0129051 0.327967 0.5 +-0.0676524 0.0720092 -0.0120172 0.32422 0.39053 +-0.0686466 0.0719376 -0.0111307 0.336269 0.5 +-0.069632 0.0719472 -0.0104624 0.294306 0.395442 +-0.0704897 0.0719829 -0.0097429 0.254365 0.399675 +-0.0717133 0.0715245 -0.00752229 0.235243 0.5 +-0.0726425 0.0716156 -0.00744076 0.287512 0.5 +0.00214252 0.103065 -0.0221511 0.719241 0.5 +0.00114663 0.103071 -0.022297 0.702203 0.5 +-0.0241845 0.177125 -0.0200954 0.37573 0.5 +-0.0421326 0.160667 -0.0107094 0.397548 0.5 +-0.0682452 0.17678 -0.058273 0.379636 0.5 +-0.0728909 0.120866 -0.00826881 0.633163 0.5 +-0.0798939 0.123658 -0.00558813 0.497387 0.5 +-0.0201192 0.163785 -0.0165508 0.712564 0.5 +-0.0220519 0.163768 -0.0162501 0.801408 0.5 +-0.0241121 0.163789 -0.0160029 0.840143 0.5 +-0.0261166 0.163762 -0.0159025 0.601777 0.5 +-0.0291219 0.163733 -0.0155493 0.596903 0.5 +-0.0311143 0.16374 -0.0152454 0.590618 0.5 +-0.0152331 0.178626 -0.0269991 0.426017 0.5 +-0.0351109 0.16372 -0.0144674 0.566786 0.5 +-0.0371067 0.163706 -0.0138205 0.500392 0.5 +-0.0391731 0.163682 -0.0125377 0.440619 0.5 +-0.0401607 0.163674 -0.0120006 0.438219 0.5 +-0.0495476 0.147557 -0.00269468 0.723565 0.5 +-0.0691832 0.153837 -0.0495596 0.206653 0.428645 +-0.0718669 0.115007 -0.00776782 0.396718 0.5 +-0.0211197 0.1653 -0.017528 0.798991 0.5 +-0.0530779 0.153128 -0.00337034 0.428069 0.427124 +-0.051019 0.147224 -0.00224048 0.750513 0.5 +-0.0629825 0.129686 -0.00825839 0.656144 0.484649 +-0.0181519 0.16827 -0.0202389 0.739405 0.5 +-0.064903 0.110966 -0.0133006 0.624548 0.5 +-0.0629125 0.111049 -0.0145904 0.628127 0.5 +-0.0421939 0.165153 -0.0106292 0.366694 0.467558 +-0.0311112 0.162246 -0.0146263 0.592613 0.477149 +-0.0848716 0.119101 -0.00207765 0.491612 0.5 +-0.0708742 0.117963 -0.00822963 0.665104 0.5 +-0.0241779 0.1712 -0.0197595 0.529645 0.5 +-0.0729302 0.128204 -0.00868672 0.424072 0.5 +0.000140075 0.103071 -0.0225088 0.694065 0.5 +0.0292497 0.0745452 -0.0220465 0.756136 0.5 +0.0282176 0.0746072 -0.022898 0.751932 0.5 +0.0272456 0.0746657 -0.023693 0.754804 0.5 +0.0262228 0.0747294 -0.0245497 0.774759 0.5 +0.0252624 0.0747714 -0.0251152 0.764074 0.5 +0.0242369 0.0748124 -0.0257049 0.748341 0.5 +0.0232608 0.0748451 -0.0261321 0.735881 0.432204 +0.0222568 0.0748707 -0.0265095 0.731848 0.5 +0.02126 0.0748992 -0.0268979 0.7257 0.5 +0.0202616 0.0749268 -0.0272874 0.743616 0.42004 +0.0192374 0.0749637 -0.0278698 0.737466 0.5 +0.0182369 0.0749953 -0.0283712 0.738481 0.429226 +0.0172333 0.0750251 -0.0287502 0.736997 0.5 +0.016266 0.0750624 -0.0291952 0.724532 0.5 +0.0152633 0.0751002 -0.0297036 0.713003 0.5 +0.0142627 0.0751304 -0.0300927 0.716336 0.436395 +0.0132595 0.0751478 -0.0304595 0.710587 0.5 +0.012258 0.0751733 -0.0308354 0.70499 0.5 +0.0112772 0.0752122 -0.0313695 0.68285 0.5 +0.0102426 0.0752832 -0.032327 0.658022 0.5 +0.00923639 0.0753581 -0.0333366 0.6518 0.5 +0.00824182 0.0753956 -0.0338579 0.799784 0.5 +0.00725505 0.0754138 -0.0341479 0.751985 0.5 +0.00623924 0.0754282 -0.0343629 0.754054 0.5 +0.00523462 0.075444 -0.0346019 0.746977 0.5 +0.00423384 0.0754618 -0.0348642 0.746942 0.5 +0.00323955 0.0754773 -0.0351385 0.744707 0.5 +0.0022305 0.0754937 -0.0353597 0.720377 0.5 +0.00123579 0.075497 -0.0355058 0.749765 0.5 +0.000231956 0.0755133 -0.0357459 0.798966 0.5 +-0.000757317 0.075519 -0.0359212 0.645085 0.5 +-0.00176067 0.0755229 -0.0360316 0.637258 0.48505 +-0.00276518 0.0755391 -0.036261 0.63315 0.5 +-0.0037539 0.0755488 -0.0365646 0.623171 0.5 +-0.00476651 0.0755803 -0.0368945 0.806017 0.5 +-0.00574286 0.0755721 -0.037104 0.818377 0.5 +-0.0067485 0.0755804 -0.0372256 0.808313 0.5 +-0.00776872 0.0756191 -0.0375185 0.821743 0.5 +-0.00876475 0.075634 -0.0378123 0.837409 0.5 +-0.00976932 0.0756525 -0.0380331 0.833651 0.5 +-0.0107695 0.0756601 -0.0381615 0.831416 0.5 +-0.0117695 0.075665 -0.0382916 0.832924 0.5 +-0.0127703 0.0756733 -0.0384193 0.832319 0.5 +-0.0137759 0.0756859 -0.0386228 0.831988 0.5 +-0.0147779 0.0756914 -0.0387415 0.825303 0.5 +-0.0157734 0.075693 -0.0388238 0.822141 0.5 +-0.0167746 0.0756989 -0.0389455 0.813107 0.5 +-0.0177757 0.0756957 -0.0389571 0.767003 0.5 +-0.0187757 0.0756949 -0.0390019 0.771308 0.5 +-0.0197782 0.075693 -0.0390468 0.725886 0.5 +-0.0207923 0.0756874 -0.0390657 0.543531 0.480196 +-0.0218074 0.0756618 -0.0388536 0.50832 0.464791 +-0.022811 0.0756351 -0.0385829 0.457608 0.5 +-0.0237813 0.0756129 -0.0382516 0.414704 0.5 +-0.024753 0.0755695 -0.0376923 0.402457 0.357119 +-0.0257631 0.0755055 -0.0369491 0.393393 0.5 +-0.0267649 0.0754486 -0.0363172 0.394309 0.434415 +-0.027746 0.0753954 -0.0356568 0.400079 0.5 +-0.0287456 0.0753309 -0.0348961 0.409903 0.464802 +-0.000856246 0.103081 -0.0226647 0.531744 0.5 +-0.0401309 0.160681 -0.0117333 0.447215 0.5 +-0.0759684 0.138187 -0.00615578 0.532162 0.297214 +-0.00186255 0.103074 -0.0227526 0.544117 0.482233 +-0.0132042 0.171245 -0.025107 0.634341 0.5 +-0.0411819 0.166655 -0.0111213 0.383653 0.476266 +-0.035736 0.0740102 -0.0187661 0.273711 0.5 +-0.0367327 0.0739624 -0.0182558 0.540825 0.5 +-0.0377299 0.0739307 -0.0178742 0.751471 0.5 +-0.0387296 0.0739178 -0.0177449 0.973337 0.5 +-0.0397368 0.0739371 -0.0178005 0.471363 0.5 +-0.0407405 0.0739506 -0.0180651 0.563818 0.436428 +-0.0417336 0.0739469 -0.0182277 0.595439 0.440211 +-0.0427321 0.0739589 -0.0183224 0.57882 0.44242 +-0.0437238 0.0739429 -0.018203 0.554706 0.469058 +-0.0447383 0.0738987 -0.0178782 0.538698 0.468502 +-0.0456618 0.0741031 -0.0174455 0.762669 0.297715 +-0.0467161 0.0738381 -0.0169211 0.78433 0.5 +-0.0477118 0.073839 -0.0167643 0.842004 0.5 +-0.0487235 0.0738176 -0.0166605 0.846572 0.5 +-0.0497297 0.0737805 -0.0165746 0.853764 0.5 +-0.0507323 0.0738128 -0.0166527 0.855826 0.5 +-0.0517362 0.0738243 -0.0167692 0.860657 0.5 +-0.0527297 0.0738092 -0.0169322 0.872559 0.5 +-0.0537348 0.0738508 -0.0172852 0.871638 0.5 +-0.0547337 0.0738545 -0.0174125 0.873887 0.5 +-0.0557308 0.0738305 -0.0174435 0.884919 0.5 +-0.0567297 0.0738308 -0.0175741 0.879682 0.5 +-0.0577288 0.0738232 -0.0175832 0.853136 0.5 +-0.0587405 0.0737726 -0.0173801 0.557724 0.5 +-0.0597307 0.0737738 -0.017073 0.562234 0.481782 +-0.0607249 0.0737695 -0.0169262 0.828513 0.5 +-0.0617342 0.0737271 -0.0167014 0.817459 0.5 +-0.0627245 0.073729 -0.0165415 0.79257 0.5 +-0.0637344 0.0736795 -0.0161836 0.753072 0.5 +-0.0647113 0.0736859 -0.0158833 0.507391 0.5 +-0.0657015 0.0736405 -0.0152375 0.373659 0.5 +-0.0666897 0.0735998 -0.0145924 0.381806 0.453357 +-0.0676789 0.0735575 -0.0139417 0.362544 0.5 +-0.0686614 0.0735088 -0.0131618 0.340684 0.446991 +-0.0696892 0.0733745 -0.0120577 0.369424 0.5 +-0.0706351 0.0733936 -0.01149 0.341576 0.432723 +-0.0715599 0.0733863 -0.0105456 0.275359 0.5 +-0.0727292 0.0730957 -0.00887693 0.274494 0.220301 +-0.0736682 0.0730938 -0.00832442 0.278839 0.419206 +-0.0746688 0.0730125 -0.00771761 0.241098 0.5 +-0.00386335 0.103093 -0.0232514 0.714982 0.5 +-0.00486561 0.103096 -0.0233724 0.687345 0.5 +-0.0841891 0.111446 0.02976 0.585285 0.5 +-0.0121824 0.178673 -0.0292354 0.28445 0.5 +-0.0849288 0.12649 -0.00334252 0.599396 0.5 +-0.0768765 0.119334 -0.00688293 0.41371 0.462855 +-0.0271127 0.16377 -0.0158754 0.600897 0.5 +-0.0738815 0.117926 -0.00764413 0.401991 0.5 +-0.074881 0.117904 -0.00727699 0.384027 0.423179 +-0.0331264 0.163719 -0.0148995 0.606821 0.5 +-0.0518697 0.144272 -0.000239851 0.594338 0.5 +-0.0411447 0.163664 -0.0114686 0.42235 0.4242 +-0.0700277 0.153659 -0.0489787 0.190491 0.271728 +-0.0421212 0.159153 -0.0103433 0.451668 0.345547 +-0.0752784 0.113511 0.0497641 0.417717 0.5 +-0.0231819 0.174173 -0.0207431 0.447327 0.418329 +-0.0615233 0.0354132 0.043881 0.499903 0.5 +-0.0819371 0.129486 -0.00455242 0.483635 0.5 +-0.0724815 0.0696506 0.0297377 0.533853 0.34265 +-0.012881 0.107288 -0.0218461 0.830839 0.5 +-0.0639126 0.11101 -0.0139478 0.623761 0.5 +-0.0669104 0.112326 -0.011534 0.4645 0.5 +-0.058015 0.128168 -0.00680186 0.642866 0.5 +-0.0749578 0.132548 -0.00734349 0.461908 0.5 +-0.0358825 0.108535 -0.0199213 0.69988 0.5 +-0.0719312 0.128266 -0.00893149 0.473855 0.467924 +-0.0476151 0.0378648 -0.0125385 0.190426 0.5 +0.0302394 0.0759037 -0.0212804 0.761209 0.5 +0.0292349 0.0759579 -0.0220376 0.753889 0.5 +0.0282252 0.0760107 -0.0227881 0.759086 0.5 +0.0272664 0.0760665 -0.0234764 0.759004 0.5 +0.0262523 0.076131 -0.0243472 0.761134 0.5 +0.025242 0.0761745 -0.0249679 0.756029 0.5 +0.0242446 0.0762105 -0.0254816 0.733996 0.5 +0.02323 0.0762417 -0.0259573 0.746945 0.5 +0.0222494 0.0762728 -0.0263867 0.750751 0.423844 +0.021268 0.0762952 -0.0266753 0.752592 0.5 +0.0202412 0.0763232 -0.0271232 0.739726 0.5 +0.0192535 0.076364 -0.0276613 0.731912 0.5 +0.0182388 0.0763952 -0.028136 0.737388 0.426936 +0.0172542 0.0764235 -0.0285503 0.739797 0.5 +0.0162437 0.0764684 -0.0291666 0.75565 0.5 +0.0152466 0.0765161 -0.0298116 0.750025 0.5 +0.0142529 0.0765304 -0.0302113 0.734907 0.312337 +0.0132683 0.0765435 -0.0305058 0.7298 0.381248 +0.0122616 0.0765812 -0.0308581 0.694968 0.5 +0.0112702 0.0766287 -0.031501 0.667026 0.5 +0.0102504 0.0766955 -0.0323547 0.673073 0.5 +0.00921578 0.0767579 -0.0331902 0.663117 0.5 +0.00823978 0.0768076 -0.0338586 0.642278 0.469074 +0.00723985 0.076824 -0.0341303 0.786751 0.5 +0.00623348 0.0768314 -0.0342539 0.775892 0.5 +0.00522675 0.0768423 -0.034472 0.772168 0.5 +0.00423189 0.0768627 -0.0347545 0.766383 0.5 +0.00322397 0.0768846 -0.0351052 0.760721 0.5 +0.00224005 0.0768974 -0.0352993 0.77724 0.5 +0.00123226 0.0769082 -0.0355253 0.786189 0.5 +0.00022872 0.0769217 -0.0357549 0.817734 0.5 +-0.000764451 0.0769261 -0.0359174 0.649317 0.5 +-0.0017512 0.0769296 -0.0360915 0.651187 0.483034 +-0.00277907 0.0769693 -0.0364873 0.648454 0.5 +-0.00376935 0.0769928 -0.0369082 0.652514 0.5 +-0.00476329 0.0770151 -0.03731 0.64857 0.382037 +-0.00577511 0.0770351 -0.037534 0.823865 0.5 +-0.00676687 0.0770295 -0.0375725 0.817133 0.5 +-0.0077735 0.0770379 -0.0376668 0.815927 0.5 +-0.00877699 0.0770434 -0.0377883 0.82564 0.5 +-0.00977607 0.0770524 -0.0379416 0.836453 0.5 +-0.0107806 0.0770662 -0.0381287 0.831317 0.5 +-0.0117712 0.0770642 -0.0382004 0.820916 0.5 +-0.0127752 0.0770687 -0.0383028 0.82277 0.5 +-0.0137772 0.0770735 -0.0384143 0.813154 0.5 +-0.0147745 0.0770701 -0.0384436 0.796818 0.5 +-0.015779 0.0770791 -0.0385675 0.826006 0.5 +-0.0167783 0.0770825 -0.0387039 0.835858 0.5 +-0.0177813 0.0770869 -0.0388032 0.807029 0.5 +-0.018783 0.0770899 -0.0389016 0.800314 0.5 +-0.0197826 0.0770974 -0.0390157 0.756587 0.5 +-0.0207882 0.0770942 -0.0390427 0.726358 0.5 +-0.0218167 0.0770677 -0.0388569 0.511821 0.4641 +-0.0228108 0.0770465 -0.0385748 0.481764 0.5 +-0.0237829 0.0770195 -0.0382449 0.435601 0.5 +-0.024781 0.0769658 -0.0376048 0.411486 0.398415 +-0.0257886 0.0768981 -0.036857 0.413047 0.390168 +-0.0267825 0.0768545 -0.0363352 0.414962 0.5 +-0.0277474 0.076815 -0.0357774 0.517621 0.5 +-0.0287531 0.0767493 -0.0350292 0.521629 0.454315 +-0.0560454 0.148678 -0.00182226 0.641911 0.5 +-0.0410616 0.156231 -0.0095971 0.800418 0.5 +-0.0670377 0.155239 -0.0519345 0.381898 0.5 +-0.0461338 0.160629 -0.00828859 0.399971 0.465057 +-0.0141909 0.171251 -0.024451 0.612229 0.5 +-0.0408828 0.108487 -0.0195205 0.637906 0.5 +-0.0357408 0.0754574 -0.0191515 0.29823 0.5 +-0.0367401 0.0754253 -0.0187666 0.532554 0.5 +-0.0377389 0.0753784 -0.0182557 0.72734 0.5 +-0.0387388 0.0753845 -0.0180569 0.572666 0.5 +-0.0397472 0.0753921 -0.0181662 0.49064 0.5 +-0.0407441 0.0753914 -0.0183192 0.510332 0.5 +-0.0417396 0.0754091 -0.018561 0.566239 0.5 +-0.0427371 0.0753968 -0.0185868 0.568134 0.5 +-0.0437352 0.0753785 -0.0184868 0.752531 0.5 +-0.0447434 0.0753343 -0.0181391 0.765194 0.5 +-0.0457331 0.0753099 -0.0177194 0.800652 0.5 +-0.0467249 0.0753156 -0.0175399 0.848909 0.5 +-0.0477302 0.0753108 -0.0175447 0.902088 0.5 +-0.0487364 0.0753122 -0.0176891 0.898721 0.5 +-0.0497426 0.0753235 -0.0177986 0.62239 0.5 +-0.0507419 0.0753249 -0.0179378 0.625376 0.5 +-0.0517453 0.0753545 -0.0181561 0.873354 0.5 +-0.0527446 0.0753599 -0.0182797 0.883164 0.5 +-0.0537353 0.0753205 -0.0183524 0.873913 0.5 +-0.0547392 0.075379 -0.0185175 0.868994 0.5 +-0.0557355 0.0753549 -0.0185519 0.886501 0.5 +-0.0567366 0.0753362 -0.0185878 0.882838 0.5 +-0.0577516 0.0752955 -0.0185275 0.849739 0.5 +-0.058737 0.075302 -0.0183386 0.799072 0.5 +-0.0597355 0.0752692 -0.0179534 0.790459 0.5 +-0.0607447 0.0752603 -0.0176616 0.578457 0.476593 +-0.0617308 0.0752409 -0.0175405 0.605226 0.469579 +-0.0627466 0.0751872 -0.0173542 0.593369 0.5 +-0.063731 0.0751942 -0.0171769 0.80406 0.5 +-0.0647346 0.0751547 -0.0168067 0.545742 0.5 +-0.0657273 0.0751276 -0.0164058 0.523995 0.5 +-0.0667272 0.0750614 -0.0156487 0.408337 0.5 +-0.0676894 0.0750921 -0.0153176 0.511723 0.426156 +-0.0686919 0.0750175 -0.0147112 0.44244 0.5 +-0.069701 0.0749104 -0.0135814 0.352756 0.410928 +-0.0706469 0.0749114 -0.0128891 0.374795 0.455142 +-0.0716272 0.0748459 -0.0119866 0.317415 0.5 +-0.0726176 0.0747594 -0.0108396 0.280394 0.260791 +-0.073622 0.0747015 -0.00970199 0.259516 0.3066 +-0.0746919 0.0745094 -0.0088781 0.26625 0.5 +-0.0756587 0.0744591 -0.00795246 0.281264 0.397634 +-0.0744184 0.069256 0.0261761 0.704207 0.5 +-0.0619642 0.126755 -0.00826981 0.837434 0.5 +-0.0748487 0.0664559 0.00653551 0.503987 0.462563 +-0.0718987 0.123811 -0.00847645 0.725516 0.5 +-0.0768619 0.116386 -0.00596474 0.489877 0.5 +0.000114549 0.110154 -0.0201623 0.779709 0.5 +-0.0441494 0.163638 -0.00943446 0.435574 0.5 +-0.043169 0.163647 -0.0101027 0.347081 0.360484 +-0.0642809 0.173904 -0.0612545 0.314141 0.5 +-0.0321607 0.174124 -0.015122 0.446343 0.5 +-0.0699388 0.131128 -0.00863643 0.646174 0.5 +-0.0162925 0.180099 -0.0261659 0.350433 0.471401 +-0.038066 0.156257 -0.0102365 0.812559 0.5 +-0.088037 0.113814 0.026966 0.597013 0.5 +-0.0719896 0.139908 -0.00735583 0.403133 0.470047 +-0.0162165 0.175672 -0.0252165 0.412103 0.5 +-0.0570417 0.148685 -0.00168484 0.669379 0.5 +-0.0550443 0.148674 -0.00204704 0.614387 0.5 +-0.0500801 0.151654 -0.00422617 0.734966 0.5 +-0.0722147 0.149455 -0.0385736 0.151112 0.396428 +-0.0460756 0.154674 -0.00723534 0.668859 0.5 +-0.0242219 0.178615 -0.0196227 0.496704 0.5 +0.0302495 0.0773125 -0.0211724 0.743328 0.5 +0.0292317 0.0773621 -0.0219141 0.75696 0.5 +0.00109253 0.113026 -0.0199046 0.648734 0.5 +0.0272466 0.0774691 -0.0233342 0.761206 0.5 +0.0262324 0.0775308 -0.0242027 0.754986 0.5 +0.0252499 0.0775815 -0.0248688 0.764782 0.5 +0.024254 0.0776067 -0.0252579 0.76177 0.409006 +0.023226 0.077646 -0.0258357 0.760502 0.5 +0.0222548 0.0776918 -0.0264111 0.77558 0.5 +0.0212552 0.0777078 -0.0266851 0.752627 0.424431 +0.0202715 0.077733 -0.0270961 0.741147 0.426178 +0.0192461 0.0777761 -0.0276631 0.737932 0.5 +0.0182606 0.0778122 -0.0281935 0.737534 0.5 +0.0172524 0.0778474 -0.0286871 0.742589 0.5 +0.0162209 0.0779008 -0.0293961 0.754752 0.5 +0.0152687 0.0779357 -0.0299953 0.74427 0.5 +0.0142249 0.0779815 -0.0305449 0.714589 0.5 +0.0132714 0.0779991 -0.0309033 0.697983 0.5 +0.0122459 0.0780339 -0.0313519 0.684497 0.44967 +0.0112282 0.0780681 -0.031821 0.695672 0.5 +0.0102384 0.0781052 -0.0323493 0.702813 0.5 +0.00921575 0.0781468 -0.0329463 0.688375 0.5 +0.00822704 0.0782053 -0.033734 0.668375 0.5 +0.00724365 0.07823 -0.0340312 0.836107 0.5 +0.00623069 0.0782309 -0.0341321 0.809679 0.5 +0.00522677 0.078235 -0.0342467 0.820873 0.5 +0.00422707 0.0782528 -0.0345112 0.807331 0.5 +0.00322165 0.0782734 -0.0348651 0.805887 0.5 +0.00221136 0.0782941 -0.0352071 0.807517 0.5 +0.00123277 0.0783068 -0.0354173 0.841121 0.5 +0.000231967 0.0783204 -0.0356621 0.832767 0.5 +-0.000774843 0.0783346 -0.0358957 0.841995 0.5 +-0.00175707 0.0783385 -0.0360812 0.83561 0.5 +-0.00277478 0.078376 -0.0365291 0.64336 0.5 +-0.00377564 0.078412 -0.0370359 0.645319 0.485356 +-0.00477608 0.0784365 -0.0374195 0.647293 0.5 +-0.00578852 0.0784633 -0.0377499 0.833792 0.5 +-0.0067867 0.0784694 -0.0378945 0.824736 0.5 +-0.0077824 0.0784642 -0.0379203 0.797695 0.5 +-0.00878487 0.0784493 -0.0377777 0.800255 0.5 +-0.00978193 0.0784455 -0.0377778 0.815046 0.5 +-0.0107827 0.0784509 -0.0379132 0.831604 0.5 +-0.0117787 0.0784571 -0.0380559 0.839081 0.5 +-0.0127769 0.0784711 -0.0383296 0.829493 0.5 +-0.0137626 0.0784616 -0.0384771 0.825745 0.373864 +-0.0147733 0.078434 -0.0385776 0.809565 0.37641 +-0.0157845 0.0784788 -0.0385671 0.79961 0.5 +-0.0167857 0.0784752 -0.0385587 0.823615 0.5 +-0.0177849 0.0784811 -0.0386843 0.83961 0.5 +-0.0187899 0.0784905 -0.0388371 0.846695 0.5 +-0.0197891 0.0785016 -0.0390423 0.811462 0.369233 +-0.0207953 0.0784993 -0.0390618 0.734197 0.5 +-0.0217961 0.0784868 -0.0389208 0.519053 0.5 +-0.0228049 0.0784515 -0.0385457 0.485505 0.5 +-0.0237986 0.0784163 -0.0381462 0.453574 0.440013 +-0.0247852 0.0783802 -0.0377363 0.415244 0.5 +-0.0257826 0.0783385 -0.0372231 0.387239 0.457608 +-0.0268076 0.0782799 -0.0366273 0.486475 0.5 +-0.0277915 0.0782183 -0.0359607 0.50586 0.442479 +-0.0287674 0.078167 -0.0351681 0.510996 0.5 +-0.021633 0.035044 -0.0280533 0.21549 0.5 +-0.0698715 0.116492 -0.00825865 0.586575 0.5 +-0.0759551 0.131077 -0.00722143 0.418964 0.5 +-0.0452001 0.165138 -0.00833108 0.402348 0.5 +-0.0451365 0.160644 -0.00892562 0.409379 0.346947 +-0.0222335 0.171216 -0.0204735 0.558292 0.458958 +-0.0357484 0.0768864 -0.0192776 0 0 +-0.0367451 0.0768715 -0.019149 0.380584 0.5 +-0.0377467 0.0768482 -0.0188928 0.545417 0.5 +-0.038743 0.0768256 -0.018638 0.751296 0.5 +-0.0397503 0.0768521 -0.0186787 0.442467 0.5 +-0.0407478 0.0768336 -0.0187281 0.511805 0.443574 +-0.0417451 0.0768346 -0.0188724 0.524285 0.440207 +-0.0427423 0.0768225 -0.0188988 0.534938 0.465179 +-0.0437426 0.076832 -0.018848 0.775316 0.5 +-0.0447417 0.0768063 -0.0185987 0.806734 0.5 +-0.0457387 0.0767861 -0.0183415 0.818295 0.5 +-0.046743 0.0767653 -0.0182293 0.865395 0.5 +-0.0477443 0.0767654 -0.0182192 0.891715 0.5 +-0.0487475 0.0767781 -0.0183253 0.898138 0.5 +-0.0497482 0.0767922 -0.0184367 0.642712 0.5 +-0.0507515 0.0768088 -0.0186854 0.655064 0.471172 +-0.0517467 0.076797 -0.0188523 0.654478 0.470365 +-0.0527517 0.076824 -0.0190661 0.652653 0.468571 +-0.0537473 0.076818 -0.0192258 0.650159 0.5 +-0.0547458 0.0768339 -0.0193157 0.647543 0.5 +-0.0557441 0.0768187 -0.0193441 0.652011 0.5 +-0.0567451 0.0768007 -0.0192338 0.631386 0.5 +-0.0577454 0.0767844 -0.0191155 0.608546 0.5 +-0.0587477 0.0767588 -0.0188591 0.459515 0.471379 +-0.0597593 0.07671 -0.0185219 0.803599 0.5 +-0.060744 0.0766988 -0.0182193 0.816517 0.5 +-0.0617474 0.0766736 -0.0179709 0.625509 0.5 +-0.0627411 0.0766785 -0.0179436 0.617976 0.5 +-0.0637474 0.0766435 -0.0177206 0.822357 0.5 +-0.0647452 0.0766241 -0.0174472 0.447821 0.5 +-0.0657497 0.0765846 -0.017077 0.55812 0.5 +-0.0667245 0.0765676 -0.016644 0.526101 0.5 +-0.0677394 0.0764997 -0.0160371 0.523148 0.423819 +-0.0687337 0.0764635 -0.0155195 0.500764 0.5 +-0.0697118 0.0764164 -0.0147262 0.492282 0.5 +-0.070667 0.0763937 -0.014042 0.494362 0.5 +-0.0716413 0.0763478 -0.0132577 0.37395 0.5 +-0.0725837 0.0763091 -0.0123208 0.424193 0.5 +-0.0736653 0.0761112 -0.0107553 0.36832 0.5 +-0.0746487 0.0760382 -0.00984365 0.352269 0.457774 +-0.0756712 0.0759423 -0.00884701 0.370763 0.5 +-0.0766573 0.0758638 -0.0078194 0.36986 0.5 +-0.0260174 0.0351047 -0.0290083 0.27267 0.5 +-0.0298552 0.0986755 -0.0232224 0.808896 0.5 +-0.0471051 0.157621 -0.00763511 0.395957 0.443121 +-0.0672464 0.173921 -0.0582812 0.598284 0.5 +-0.0208664 0.103024 -0.023442 0.673185 0.5 +-0.0683095 0.178205 -0.0587107 0.272735 0.375618 +-0.0598887 0.10828 -0.0169771 0.453044 0.442393 +-0.0218649 0.103029 -0.0235712 0.709359 0.5 +-0.0451911 0.163637 -0.00858913 0.390611 0.5 +-0.0659276 0.123847 -0.00897257 0.812254 0.5 +-0.0768904 0.0733563 0.0291265 0.666277 0.459012 +-0.0719379 0.131113 -0.00828186 0.538418 0.5 +-0.0600264 0.132579 -0.00719549 0.649667 0.48407 +-0.0460645 0.151688 -0.00554828 0.70892 0.5 +-0.0161733 0.168253 -0.0210405 0.713686 0.5 +-0.0849899 0.127963 -0.0030064 0.597753 0.5 +-0.064981 0.131148 -0.00860586 0.832555 0.5 +-0.0560526 0.151627 -0.00172465 0.499204 0.5 +-0.020213 0.178617 -0.0227863 0.367191 0.403001 +-0.0639059 0.118033 -0.00945272 0.604336 0.456994 +-0.0709176 0.112214 -0.00951227 0.546996 0.5 +-0.0228668 0.103033 -0.0236969 0.724169 0.5 +0.031224 0.0786608 -0.0202592 0.760816 0.403019 +0.0302906 0.0787129 -0.0208549 0.744891 0.5 +-0.023866 0.103031 -0.0237009 0.695069 0.5 +-0.0248668 0.103031 -0.023615 0.682789 0.5 +0.0272291 0.0788716 -0.0231926 0.755525 0.5 +0.026272 0.0789381 -0.0240124 0.759382 0.5 +0.0252504 0.0789879 -0.0247523 0.755178 0.5 +0.0242629 0.0790161 -0.0251629 0.76999 0.412796 +0.0232602 0.0790529 -0.0256674 0.753748 0.5 +0.0222263 0.0790988 -0.0263649 0.745407 0.5 +0.0212455 0.0791286 -0.0267859 0.747947 0.5 +0.0202561 0.0791555 -0.0271913 0.73826 0.416855 +0.0192101 0.0791931 -0.0277308 0.750448 0.5 +0.0182534 0.0792348 -0.0283217 0.759156 0.5 +0.0172732 0.0792708 -0.0288683 0.741141 0.5 +0.0162407 0.0793143 -0.0294472 0.725919 0.5 +0.0152238 0.0793568 -0.0300519 0.712026 0.5 +0.0142201 0.0793919 -0.0305544 0.709099 0.5 +0.0132183 0.0794258 -0.0310561 0.69611 0.5 +0.012239 0.0794574 -0.0314827 0.845539 0.5 +0.0112347 0.0794806 -0.0318525 0.700162 0.5 +0.0102045 0.0795083 -0.0323062 0.705154 0.5 +0.00923994 0.0795457 -0.0327494 0.699129 0.5 +0.00823122 0.079605 -0.0335706 0.666449 0.463769 +0.00722702 0.0796252 -0.0338785 0.847242 0.5 +0.00624923 0.0796338 -0.0339546 0.828253 0.5 +0.00523056 0.0796312 -0.0340387 0.829579 0.5 +0.00422975 0.0796448 -0.0342885 0.841714 0.5 +0.00321355 0.0796602 -0.0346071 0.843503 0.5 +0.00222038 0.0796794 -0.0348837 0.84023 0.5 +0.0012257 0.0797035 -0.0352779 0.840943 0.5 +0.00022388 0.0797271 -0.0356555 0.825259 0.5 +-0.000786355 0.0797462 -0.0360298 0.647084 0.379833 +-0.00175716 0.0797524 -0.0362245 0.834842 0.5 +-0.00277394 0.0797805 -0.0365537 0.63339 0.5 +-0.00378536 0.0798194 -0.0370348 0.824332 0.5 +-0.00479094 0.0798443 -0.0373862 0.827342 0.5 +-0.00579055 0.0798611 -0.0376463 0.832608 0.5 +-0.00679227 0.0798757 -0.0378854 0.83679 0.5 +-0.0077906 0.079881 -0.0380243 0.815956 0.5 +-0.00878734 0.0798675 -0.0379507 0.808061 0.5 +-0.00979029 0.0798633 -0.0379189 0.813972 0.5 +-0.0107915 0.0798668 -0.0380291 0.82362 0.5 +-0.0117867 0.0798822 -0.0383021 0.832022 0.373406 +-0.0127931 0.0799092 -0.038653 0.640606 0.488361 +-0.013784 0.0799171 -0.0389774 0.635528 0.488493 +-0.0147866 0.0799249 -0.0391233 0.796277 0.5 +-0.0157732 0.0799164 -0.0389165 0.790664 0.375257 +-0.0167958 0.0799195 -0.0388883 0.797968 0.373898 +-0.017794 0.0799068 -0.038901 0.805306 0.5 +-0.0187977 0.0799028 -0.0389405 0.823541 0.5 +-0.0197994 0.0799106 -0.0390737 0.820057 0.5 +-0.0208017 0.0799082 -0.0390716 0.749876 0.5 +-0.0218161 0.0798852 -0.0388524 0.551343 0.5 +-0.0227823 0.0798633 -0.0386035 0.50934 0.5 +-0.0238036 0.0798229 -0.0381557 0.470046 0.439483 +-0.0248008 0.0797877 -0.0377608 0.435424 0.5 +-0.0257724 0.0797722 -0.0374309 0.409004 0.413329 +-0.0267825 0.079725 -0.0369434 0.464752 0.37354 +-0.0277909 0.0796672 -0.0363416 0.472425 0.5 +-0.0258635 0.103016 -0.0235702 0.671695 0.5 +-0.00888364 0.107351 -0.0226177 0.678071 0.5 +-0.0681832 0.155264 -0.0517309 0.345735 0.5 +-0.0799767 0.138308 -0.00390962 0.701866 0.5 +-0.0471517 0.160622 -0.00754132 0.404263 0.5 +-0.0151984 0.171233 -0.0237028 0.62363 0.5 +-0.0321401 0.16671 -0.0160336 0.566219 0.5 +-0.035755 0.0783248 -0.0195335 0 0 +-0.0367537 0.0783235 -0.0195335 0.372634 0.5 +-0.0377523 0.0783086 -0.0194038 0.557786 0.5 +-0.0387497 0.0782817 -0.0191475 0.742743 0.5 +-0.0397537 0.0782783 -0.0191449 0.953478 0.5 +-0.0407521 0.0782965 -0.0192261 0.464322 0.5 +-0.0417522 0.0782987 -0.0193601 0.533879 0.5 +-0.0427537 0.0783105 -0.0194623 0.564674 0.5 +-0.0437474 0.0783133 -0.0194351 0.849381 0.5 +-0.0447519 0.078285 -0.0193632 0.884684 0.5 +-0.0457512 0.0782542 -0.0192962 0.862784 0.5 +-0.0467494 0.0782878 -0.0191673 0.868441 0.5 +-0.0477542 0.0782681 -0.0190718 0.882396 0.5 +-0.0487526 0.0782553 -0.019094 0.88978 0.5 +-0.0497576 0.0782604 -0.019072 0.894687 0.5 +-0.0507565 0.078263 -0.0192091 0.908987 0.5 +-0.0517494 0.0782459 -0.0193853 0.907432 0.5 +-0.0527541 0.0782706 -0.0196088 0.909955 0.5 +-0.0537516 0.078251 -0.0196488 0.908833 0.5 +-0.054753 0.0782755 -0.0197234 0.897058 0.5 +-0.0557536 0.0782586 -0.0197587 0.888465 0.5 +-0.0567617 0.0782351 -0.019665 0.854207 0.5 +-0.0577737 0.0782037 -0.0194332 0.593503 0.5 +-0.058755 0.0782067 -0.0192512 0.829528 0.5 +-0.0597552 0.0781833 -0.0189903 0.573093 0.5 +-0.0607622 0.0781498 -0.0187637 0.82585 0.5 +-0.0617213 0.0781294 -0.0185002 0.574006 0.476638 +-0.062765 0.0780997 -0.0182585 0.607689 0.461502 +-0.0637445 0.0781022 -0.0180675 0.603482 0.5 +-0.0647445 0.0780775 -0.0178137 0.5872 0.5 +-0.0657518 0.0780369 -0.0174491 0.552857 0.5 +-0.0667327 0.078026 -0.0171522 0.555741 0.5 +-0.067736 0.0779793 -0.0166569 0.511453 0.5 +-0.0687289 0.0779401 -0.0161359 0.490345 0.5 +-0.0697213 0.0778913 -0.0154943 0.469833 0.5 +-0.070675 0.0778663 -0.0147995 0.491035 0.5 +-0.0716986 0.077793 -0.0140498 0.496292 0.323612 +-0.0726667 0.0777379 -0.0132872 0.482163 0.5 +-0.0735819 0.0777026 -0.0122023 0.445372 0.5 +-0.0746813 0.077485 -0.0103851 0.616044 0.5 +-0.0756644 0.0774182 -0.00947264 0.460656 0.5 +-0.0766564 0.0773474 -0.00857073 0.479055 0.443714 +-0.077632 0.077285 -0.00766199 0.457324 0.5 +-0.0268707 0.103016 -0.0234914 0.657294 0.5 +-0.0540479 0.142765 -0.001179 0.570514 0.5 +-0.0501125 0.157587 -0.00554245 0.368825 0.5 +-0.0662865 0.178231 -0.0601734 0.282763 0.421719 +-0.0278697 0.103003 -0.0233536 0.499242 0.5 +-0.01113 0.175691 -0.0290055 0.339055 0.464256 +-0.0288694 0.102979 -0.023086 0.478858 0.484273 +-0.0298632 0.102958 -0.0228236 0.470041 0.483691 +-0.0689238 0.125301 -0.00884615 0.795108 0.5 +-0.0191965 0.175667 -0.0232885 0.323276 0.5 +-0.0267763 0.0365192 0.0538225 0.409231 0.5 +-0.0308593 0.102934 -0.0225503 0.612434 0.5 +-0.0639861 0.131146 -0.00837414 0.646516 0.5 +-0.0689145 0.123836 -0.00886831 0.781215 0.5 +-0.0201478 0.16826 -0.0196016 0.797975 0.5 +-0.0709975 0.139911 -0.00751202 0.449773 0.5 +-0.0560788 0.154579 -0.00133297 0.514153 0.5 +-0.0500787 0.154631 -0.00525635 0.388347 0.461445 +-0.0699148 0.109401 -0.011164 0.486433 0.5 +-0.0514343 0.0647808 0.0348885 0.585684 0.5 +-0.0679104 0.122376 -0.00896749 0.788934 0.5 +0.032247 0.0800194 -0.0194064 0.773351 0.5 +0.0312695 0.0800594 -0.0199503 0.744626 0.5 +-0.0318582 0.102916 -0.0222908 0.629923 0.5 +-0.0328687 0.10291 -0.0220775 0.632808 0.5 +-0.0338704 0.102893 -0.0218261 0.640169 0.5 +-0.0348703 0.102876 -0.0215726 0.65406 0.432894 +-0.0358592 0.10284 -0.0213952 0.65958 0.425535 +0.0252131 0.0803965 -0.024704 0.754482 0.5 +0.0242356 0.0804257 -0.0251216 0.762198 0.420382 +0.0232434 0.0804535 -0.0255191 0.747614 0.5 +0.0222353 0.0804964 -0.0261413 0.738279 0.5 +0.0212668 0.080528 -0.0265872 0.73979 0.5 +0.0202522 0.0805604 -0.0270674 0.732032 0.427904 +0.0192111 0.080597 -0.0276192 0.735291 0.5 +0.0182204 0.080645 -0.0282763 0.739656 0.423588 +0.0172353 0.0806842 -0.0288156 0.735694 0.5 +0.0162329 0.0807169 -0.0293214 0.721045 0.5 +0.0152428 0.0807565 -0.0298514 0.697293 0.5 +0.0142259 0.080787 -0.0303234 0.69 0.454976 +0.0132252 0.0808221 -0.0308314 0.688522 0.5 +0.0122352 0.0808526 -0.0312408 0.689156 0.456512 +0.0112279 0.0808839 -0.0317275 0.697137 0.5 +0.0102276 0.0809104 -0.0321098 0.701652 0.452652 +0.00922562 0.0809438 -0.0326125 0.699942 0.5 +0.00824429 0.0809884 -0.0331618 0.660562 0.5 +0.00719386 0.0810104 -0.0336874 0.849698 0.5 +0.00624351 0.0810351 -0.0338384 0.847769 0.5 +0.00522768 0.0810328 -0.0339223 0.847668 0.5 +0.00422853 0.0810435 -0.0341743 0.837067 0.5 +0.00322675 0.0810659 -0.0345434 0.840927 0.5 +0.00222867 0.0810902 -0.0349213 0.840356 0.5 +0.00120832 0.0811183 -0.0353756 0.661773 0.366492 +0.000192029 0.0811649 -0.0359709 0.677009 0.5 +-0.000765864 0.0811873 -0.0364626 0.827586 0.5 +-0.00177837 0.0811944 -0.0365591 0.814102 0.5 +-0.00280854 0.081222 -0.0368531 0.823097 0.5 +-0.0037871 0.0812341 -0.0371832 0.842283 0.5 +-0.00477478 0.0812297 -0.0373809 0.823914 0.373737 +-0.00577775 0.0812461 -0.0375203 0.844202 0.357726 +-0.0067913 0.0812637 -0.0377236 0.831738 0.5 +-0.00779714 0.0812765 -0.0379169 0.833342 0.5 +-0.00879058 0.0812731 -0.0379859 0.814426 0.5 +-0.00978632 0.0812687 -0.0379822 0.80631 0.5 +-0.010802 0.0812949 -0.0382665 0.825781 0.5 +-0.0117856 0.0813065 -0.0386038 0.639147 0.5 +-0.012793 0.0813325 -0.0389447 0.639363 0.489286 +-0.0137973 0.081348 -0.0391911 0.638167 0.489451 +-0.0147977 0.0813547 -0.0393324 0.631341 0.5 +-0.0158009 0.0813621 -0.039398 0.797188 0.5 +-0.0168011 0.0813465 -0.0393174 0.784294 0.5 +-0.017803 0.0813337 -0.0391893 0.779155 0.5 +-0.0188061 0.081321 -0.0390856 0.798284 0.5 +-0.0198097 0.0813191 -0.0390949 0.805904 0.5 +-0.0208078 0.081314 -0.039065 0.765456 0.5 +-0.021805 0.0812974 -0.0389167 0.55551 0.5 +-0.0228155 0.081267 -0.0385568 0.505846 0.5 +-0.0238165 0.0812337 -0.0381734 0.471172 0.5 +-0.0248115 0.081196 -0.037776 0.437926 0.5 +-0.0258047 0.0811626 -0.0373791 0.429515 0.5 +-0.0268045 0.0811284 -0.0369845 0.383479 0.394864 +-0.0277917 0.0810724 -0.036339 0.446166 0.5 +-0.0368759 0.102855 -0.0211016 0.674583 0.5 +-0.0378653 0.102824 -0.0209313 0.716491 0.5 +-0.0769716 0.13837 -0.00578148 0.470556 0.5 +-0.0418874 0.108498 -0.0194287 0.632937 0.5 +-0.0609117 0.111106 -0.0154828 0.464079 0.5 +-0.0231718 0.171204 -0.0201308 0.521272 0.5 +-0.0388626 0.102809 -0.0208006 0.763972 0.5 +-0.0357662 0.0798799 -0.0213145 0.116747 0.5 +-0.0367613 0.0798086 -0.0204262 0.290803 0.5 +-0.0377622 0.0797629 -0.0199128 0.528032 0.5 +-0.0387577 0.0797624 -0.0199123 0.732009 0.5 +-0.0397582 0.079747 -0.0196231 0.57225 0.5 +-0.040758 0.0797297 -0.0196637 0.486847 0.465735 +-0.0417568 0.0797359 -0.0197866 0.548777 0.45056 +-0.0427656 0.0797392 -0.0197597 0.571655 0.471369 +-0.0437584 0.079737 -0.0197567 0.636695 0.5 +-0.0447592 0.0797381 -0.0197229 0.641081 0.5 +-0.0457595 0.0797224 -0.0196258 0.625276 0.465946 +-0.04676 0.0797358 -0.0197068 0.658252 0.5 +-0.0477636 0.0797421 -0.0198355 0.92532 0.5 +-0.0487592 0.0797294 -0.0200154 0.903351 0.5 +-0.0497578 0.0797288 -0.020162 0.886278 0.5 +-0.0507602 0.0797387 -0.0202693 0.886135 0.5 +-0.0517619 0.079747 -0.0203928 0.892728 0.5 +-0.0527613 0.0797578 -0.020501 0.894054 0.5 +-0.0537592 0.0797599 -0.020636 0.887825 0.5 +-0.0547588 0.079768 -0.0207581 0.872978 0.5 +-0.0557733 0.0797194 -0.0205764 0.847354 0.5 +-0.0567655 0.0797174 -0.020408 0.575212 0.5 +-0.0577724 0.0796775 -0.0200459 0.55904 0.5 +-0.0587729 0.0796565 -0.019784 0.784716 0.5 +-0.0597676 0.0796261 -0.0193897 0.806122 0.5 +-0.0607661 0.0796035 -0.0191344 0.600791 0.5 +-0.0617634 0.0795901 -0.0189973 0.61449 0.5 +-0.0627659 0.0795658 -0.0187488 0.606874 0.5 +-0.0637756 0.0795327 -0.0183843 0.61506 0.435573 +-0.0647673 0.0795072 -0.0181104 0.593549 0.449354 +-0.0657591 0.0794867 -0.0178324 0.443626 0.469089 +-0.0667655 0.079447 -0.0174677 0.447201 0.5 +-0.0677628 0.079419 -0.0170759 0.546913 0.455468 +-0.0687693 0.0793684 -0.0165822 0.504959 0.5 +-0.0697484 0.0793376 -0.0160307 0.475894 0.5 +-0.0707552 0.0792696 -0.0152786 0.468352 0.5 +-0.0717184 0.0792466 -0.0147262 0.459603 0.5 +-0.0726954 0.0791971 -0.0139413 0.472928 0.5 +-0.0398616 0.102806 -0.020798 0.81977 0.5 +-0.0408599 0.102809 -0.0209257 0.818304 0.5 +-0.0418598 0.102811 -0.0210501 0.818875 0.5 +-0.0766364 0.0788383 -0.00918256 0.486041 0.5 +-0.0776493 0.0787462 -0.00818258 0.486635 0.5 +-0.0428613 0.102811 -0.0212634 0.831603 0.5 +-0.0729484 0.132565 -0.00781242 0.693071 0.5 +-0.0609674 0.125285 -0.00834926 0.808871 0.5 +-0.0162255 0.177147 -0.0257279 0.416224 0.5 +-0.0438604 0.102816 -0.0213031 0.811076 0.5 +-0.0448632 0.102817 -0.0213129 0.791416 0.5 +-0.0401601 0.165169 -0.0119868 0.438092 0.384644 +-0.0182635 0.180096 -0.0244849 0.383211 0.418721 +-0.0142563 0.178628 -0.0276625 0.315483 0.5 +-0.0458636 0.102811 -0.0213024 0.776898 0.5 +-0.0772542 0.116219 0.0507045 0.545816 0.478168 +-0.0693236 0.142228 -0.0102995 0.389877 0.5 +-0.0468614 0.102797 -0.0212675 0.769838 0.5 +-0.0530219 0.147196 -0.00187885 0.852357 0.5 +-0.0669809 0.135535 -0.00827796 0.700346 0.5 +-0.0241405 0.168248 -0.0186857 0.812967 0.5 +-0.0699845 0.139935 -0.00772138 0.611664 0.5 +-0.068996 0.139931 -0.00789046 0.682385 0.5 +-0.0779562 0.0727271 0.0259414 0.623494 0.5 +-0.0478639 0.102799 -0.0211716 0.76221 0.5 +0.0342214 0.0813611 -0.0182381 0.726238 0.5 +0.0332402 0.0814034 -0.0189012 0.752819 0.5 +0.0322568 0.0814321 -0.0193234 0.739923 0.426783 +0.0312166 0.0814571 -0.0197537 0.734986 0.5 +0.030238 0.0814876 -0.0201701 0.746493 0.5 +0.0292141 0.0815364 -0.0209002 0.757792 0.5 +0.0282219 0.0816125 -0.0219304 0.743565 0.5 +-0.0488701 0.10281 -0.0210946 0.757371 0.5 +-0.0498654 0.102788 -0.0210486 0.729706 0.5 +0.0252001 0.0818001 -0.0245703 0.75371 0.5 +0.0242315 0.0818412 -0.0251267 0.747098 0.5 +0.0232197 0.0818757 -0.0256198 0.751933 0.5 +0.0222547 0.0819067 -0.0260667 0.752532 0.5 +0.0212191 0.0819428 -0.0266321 0.751037 0.5 +0.0202669 0.0819781 -0.0271085 0.736087 0.5 +0.0192289 0.0820148 -0.027672 0.72205 0.5 +0.0182285 0.0820502 -0.0281776 0.715837 0.443611 +0.0172148 0.0820814 -0.0286624 0.712652 0.5 +0.0162074 0.0821136 -0.0291532 0.698996 0.5 +0.0152459 0.0821521 -0.0296185 0.68303 0.5 +0.0142229 0.0821798 -0.0300828 0.674559 0.46631 +0.0132266 0.0822053 -0.0304726 0.679493 0.467363 +0.0122229 0.0822322 -0.030844 0.663872 0.5 +0.011218 0.0822648 -0.0313395 0.66541 0.5 +0.0102245 0.0823018 -0.0318649 0.67326 0.5 +0.00923376 0.0823418 -0.0323881 0.674015 0.5 +0.00821609 0.0823703 -0.0328688 0.664529 0.5 +0.00720473 0.0823989 -0.0333538 0.654207 0.5 +0.00621551 0.0824281 -0.0337654 0.860115 0.5 +0.00521659 0.0824462 -0.0340286 0.853248 0.5 +0.00422867 0.0824562 -0.0341922 0.853168 0.5 +0.00320889 0.0824712 -0.0345101 0.847721 0.5 +0.00219672 0.0825025 -0.0349885 0.657213 0.5 +0.00119778 0.0825383 -0.0355009 0.68148 0.5 +0.000200297 0.0825801 -0.036136 0.688271 0.5 +-0.000786782 0.0826169 -0.0366787 0.677472 0.5 +-0.00181562 0.0826307 -0.0368615 0.839785 0.5 +-0.00279611 0.0826469 -0.0371795 0.648121 0.5 +-0.00378569 0.0826645 -0.03749 0.846502 0.5 +-0.00479883 0.0826783 -0.0376925 0.831759 0.5 +-0.00580621 0.0826794 -0.0377615 0.832572 0.5 +-0.00679579 0.0826768 -0.0377354 0.837362 0.5 +-0.0077992 0.0826766 -0.0378216 0.833153 0.5 +-0.00880164 0.0826803 -0.0379328 0.835439 0.5 +-0.00979541 0.0826872 -0.0380854 0.832213 0.5 +-0.0108037 0.0827117 -0.0384206 0.839195 0.5 +-0.0117953 0.0827249 -0.0387188 0.845677 0.5 +-0.0127989 0.0827406 -0.0389623 0.839384 0.5 +-0.0138083 0.082755 -0.0391488 0.833365 0.5 +-0.0148026 0.0827563 -0.0392327 0.834108 0.5 +-0.0158083 0.0827626 -0.0393641 0.819307 0.5 +-0.0168075 0.0827608 -0.0394117 0.778489 0.5 +-0.0178133 0.0827451 -0.0392154 0.757212 0.5 +-0.0188128 0.082729 -0.0390748 0.769361 0.5 +-0.0198038 0.0827175 -0.0390158 0.780028 0.5 +-0.0208075 0.0827095 -0.0389174 0.750741 0.5 +-0.0217998 0.0826894 -0.0387559 0.694406 0.5 +-0.0228147 0.0826618 -0.0384205 0.498726 0.5 +-0.0238248 0.0826344 -0.0380614 0.472771 0.46406 +-0.0248084 0.0826031 -0.0377611 0.439748 0.5 +-0.0258065 0.0825691 -0.0373737 0.412332 0.5 +-0.0268119 0.082528 -0.0368734 0.378858 0.452398 +-0.027798 0.0824702 -0.0362167 0.465939 0.5 +-0.0508692 0.102779 -0.0209206 0.683783 0.5 +-0.0518684 0.102767 -0.0207881 0.650648 0.5 +-0.0779853 0.13835 -0.00526914 0.465081 0.385363 +-0.0528842 0.102762 -0.0205636 0.476966 0.5 +-0.0308696 0.105755 -0.0215547 0.542878 0.5 +-0.0161876 0.171234 -0.0230543 0.648309 0.5 +-0.0539058 0.102757 -0.0202213 0.460815 0.433432 +-0.0357746 0.08137 -0.0222094 0.297344 0.5 +-0.0367737 0.0813353 -0.0218258 0.30893 0.5 +-0.0377668 0.0812615 -0.0209367 0.440143 0.5 +-0.0387676 0.0812185 -0.0204237 0.699546 0.5 +-0.0397664 0.0812015 -0.0202928 0.914259 0.5 +-0.0407686 0.0811968 -0.0203079 0.447831 0.5 +-0.0417672 0.0812092 -0.0204027 0.507345 0.5 +-0.0427644 0.0812202 -0.0203472 0.7849 0.5 +-0.0437659 0.0811743 -0.0201658 0.853614 0.5 +-0.0447652 0.0811738 -0.019998 0.899209 0.5 +-0.0457643 0.0811616 -0.0200148 0.922282 0.5 +-0.0467675 0.0811826 -0.0202513 0.914964 0.5 +-0.0477684 0.0811966 -0.0205178 0.653161 0.5 +-0.0487658 0.0811872 -0.020682 0.911314 0.5 +-0.049768 0.081217 -0.020889 0.907743 0.5 +-0.0507686 0.0812185 -0.0210302 0.919072 0.5 +-0.0517663 0.0812234 -0.0211522 0.921097 0.5 +-0.0527672 0.0812315 -0.0212685 0.912256 0.5 +-0.0537672 0.0812389 -0.0213883 0.915182 0.5 +-0.0547672 0.0812274 -0.0214088 0.88677 0.5 +-0.0557789 0.0811944 -0.0212002 0.845297 0.5 +-0.0567677 0.0811908 -0.0210238 0.571119 0.5 +-0.0577843 0.0811473 -0.0206854 0.548667 0.5 +-0.0587805 0.0811174 -0.0202922 0.759986 0.5 +-0.0597828 0.0810723 -0.0197911 0.746979 0.5 +-0.0607911 0.0810335 -0.0194373 0.584006 0.457752 +-0.0617624 0.0810326 -0.0192317 0.623165 0.5 +-0.0627622 0.0810191 -0.0190992 0.651624 0.5 +-0.0637681 0.0809918 -0.0188675 0.493808 0.5 +-0.0647819 0.0809531 -0.0185144 0.463178 0.5 +-0.0657845 0.0809163 -0.0181411 0.468762 0.422877 +-0.0667677 0.0809002 -0.0178421 0.470645 0.5 +-0.0677742 0.0808646 -0.0174732 0.4495 0.5 +-0.0687631 0.080836 -0.0170666 0.566631 0.5 +-0.0697426 0.08081 -0.0166425 0.534997 0.5 +-0.0707265 0.080778 -0.0161096 0.501629 0.5 +-0.0717214 0.0807275 -0.0154713 0.476157 0.5 +-0.0727179 0.0806647 -0.0147187 0.467792 0.452451 +-0.0549046 0.102722 -0.0198351 0.449518 0.460372 +-0.0649995 0.134056 -0.00807462 0.778339 0.5 +-0.0558807 0.102663 -0.0193944 0.556007 0.5 +-0.0766463 0.0803349 -0.0100768 0.646511 0.5 +-0.0776104 0.0802915 -0.00928059 0.463039 0.5 +-0.0568656 0.102623 -0.018982 0.60308 0.5 +-0.0719497 0.132579 -0.00806719 0.501429 0.480161 +-0.0898521 0.112924 0.020019 0.71089 0.5 +-0.0808786 0.122166 -0.00503067 0.511761 0.5 +-0.0649403 0.125308 -0.00887181 0.805417 0.5 +-0.0748707 0.116421 -0.00675171 0.44605 0.5 +-0.071123 0.111741 0.0467572 0.476628 0.409319 +-0.0192566 0.180095 -0.0235875 0.405922 0.468178 +-0.0578796 0.102621 -0.0187883 0.683099 0.5 +-0.0641994 0.16384 -0.059407 0.364371 0.5 +-0.0631283 0.163827 -0.0595262 0.349675 0.465222 +-0.0588719 0.102608 -0.018764 0.705511 0.5 +-0.0598777 0.102599 -0.0186645 0.685333 0.5 +-0.0540206 0.147182 -0.0016614 0.635834 0.5 +-0.0809364 0.129495 -0.00494346 0.544124 0.409149 +-0.0281544 0.168213 -0.0175818 0.506824 0.5 +-0.0321537 0.168198 -0.0161712 0.490656 0.5 +-0.0646921 0.0617226 0.0224003 0.403663 0.5 +-0.0608814 0.102587 -0.0185388 0.665476 0.5 +-0.0809085 0.111715 -0.000772193 0.671962 0.5 +0.0342215 0.0827959 -0.0185003 0.748578 0.5 +0.0332406 0.0828224 -0.0189128 0.741804 0.5 +0.0322227 0.0828447 -0.0192606 0.848419 0.5 +0.0312441 0.0828649 -0.019558 0.743592 0.5 +0.0302365 0.0828976 -0.0200496 0.751043 0.5 +0.0292296 0.08295 -0.0208022 0.758835 0.5 +-0.0318681 0.105727 -0.021166 0.788728 0.5 +-0.0618805 0.102572 -0.018381 0.483934 0.5 +-0.0683418 0.0625091 0.0209713 0.446544 0.5 +-0.0628904 0.102548 -0.0180123 0.449006 0.465678 +-0.0638899 0.102518 -0.0176142 0.438938 0.5 +-0.0648854 0.102482 -0.0170908 0.531181 0.5 +0.0222207 0.0833264 -0.0261432 0.75179 0.422756 +0.0212116 0.083355 -0.0266295 0.746805 0.5 +0.0202101 0.0833915 -0.0271395 0.730247 0.430396 +0.0192058 0.0834241 -0.02764 0.729527 0.5 +0.0182147 0.0834619 -0.0281698 0.721658 0.5 +0.0172301 0.0834905 -0.0285819 0.701607 0.5 +0.0162242 0.0835192 -0.0290783 0.684222 0.45621 +0.0152276 0.0835585 -0.0295949 0.678471 0.5 +0.014215 0.083589 -0.0300782 0.668677 0.5 +0.013232 0.0835986 -0.0303791 0.665959 0.476907 +0.0122268 0.0836141 -0.0306261 0.657206 0.478248 +0.0112368 0.0836448 -0.0310335 0.652342 0.480101 +0.0102178 0.0836927 -0.0316174 0.827431 0.5 +0.00920102 0.0837298 -0.0322138 0.66307 0.5 +0.00820345 0.083757 -0.0326005 0.675476 0.5 +0.00721225 0.0837864 -0.0330068 0.6624 0.480322 +0.00621596 0.083814 -0.033411 0.655199 0.5 +0.00519565 0.0838361 -0.0338494 0.64589 0.5 +0.00420316 0.0838546 -0.0341295 0.654239 0.5 +0.00320361 0.0838721 -0.0343861 0.65522 0.481876 +0.00218481 0.0838969 -0.0348518 0.669932 0.5 +0.00120164 0.0839391 -0.0353946 0.692227 0.5 +0.000177098 0.0839833 -0.0361114 0.68991 0.5 +-0.000810177 0.084021 -0.0366442 0.686589 0.5 +-0.00180047 0.0840422 -0.0369301 0.669062 0.476916 +-0.00280088 0.0840687 -0.037315 0.659744 0.484581 +-0.00380864 0.0840797 -0.0375505 0.8482 0.5 +-0.00481396 0.0840888 -0.0377627 0.831012 0.5 +-0.00581332 0.0840953 -0.0378871 0.819548 0.5 +-0.00680823 0.0840973 -0.0379387 0.825875 0.5 +-0.00780413 0.0840976 -0.0379648 0.827185 0.5 +-0.00880306 0.0841017 -0.0380883 0.848671 0.5 +-0.00978935 0.0841125 -0.0382567 0.847134 0.5 +-0.0108141 0.0841239 -0.038537 0.846732 0.5 +-0.0118005 0.0841384 -0.0387163 0.846164 0.5 +-0.0128008 0.0841443 -0.0388521 0.830195 0.5 +-0.0138101 0.0841459 -0.0389466 0.822243 0.5 +-0.0148129 0.0841518 -0.0390669 0.833547 0.5 +-0.0158141 0.084157 -0.0391976 0.83266 0.5 +-0.0168173 0.0841632 -0.0392397 0.789961 0.5 +-0.0178184 0.0841429 -0.0390768 0.744026 0.5 +-0.0188214 0.0841215 -0.0388306 0.738814 0.5 +-0.0198215 0.0841085 -0.0387066 0.763636 0.5 +-0.0208293 0.0841002 -0.0385977 0.725199 0.5 +-0.0218204 0.0840783 -0.0384285 0.522498 0.5 +-0.0228183 0.0840509 -0.0381648 0.508594 0.473969 +-0.0238126 0.0840242 -0.0378907 0.488746 0.5 +-0.0248231 0.0839948 -0.0375331 0.448913 0.5 +-0.0258212 0.0839605 -0.0371412 0.429208 0.430671 +-0.0267986 0.0839175 -0.0367186 0.393801 0.460883 +-0.027787 0.0838632 -0.0360686 0.481465 0.5 +-0.0658775 0.102439 -0.0164403 0.537946 0.5 +-0.0662758 0.159515 -0.0565111 0.329271 0.421752 +-0.0789967 0.138332 -0.00474353 0.481757 0.5 +-0.0668605 0.102389 -0.0157781 0.578312 0.5 +-0.0530436 0.142764 -0.000526483 0.530423 0.5 +-0.0171943 0.171219 -0.0224352 0.686914 0.5 +-0.0678577 0.102354 -0.0152646 0.461568 0.5 +-0.0357813 0.0828042 -0.0224653 0.491748 0.5 +-0.036779 0.0827886 -0.0223365 0.573507 0.5 +-0.037778 0.0827556 -0.0219531 0.518925 0.5 +-0.0387777 0.0827042 -0.0213153 0.668642 0.5 +-0.0397746 0.0826803 -0.0210594 0.896591 0.5 +-0.0407693 0.0826515 -0.0208197 0.421862 0.454163 +-0.0417723 0.0826397 -0.0208385 0.497744 0.439504 +-0.0427705 0.0826571 -0.0207663 0.729743 0.5 +-0.0437727 0.082626 -0.0206932 0.820642 0.5 +-0.0447719 0.0826286 -0.0206706 0.888402 0.5 +-0.0457735 0.0826328 -0.0207974 0.904099 0.5 +-0.0467773 0.0826601 -0.021013 0.640966 0.472799 +-0.0477776 0.0826677 -0.0211258 0.656127 0.472829 +-0.0487756 0.0826651 -0.0212781 0.673574 0.457256 +-0.0497774 0.0826759 -0.0213753 0.681188 0.5 +-0.0507734 0.0826521 -0.0214824 0.675009 0.5 +-0.0517751 0.0826668 -0.0215624 0.664733 0.5 +-0.0527747 0.0826622 -0.0215537 0.648364 0.5 +-0.0537766 0.0826585 -0.0215583 0.642487 0.5 +-0.0547757 0.0826557 -0.0215494 0.627925 0.5 +-0.0557755 0.0826404 -0.0214196 0.618552 0.5 +-0.056773 0.082629 -0.0212703 0.593829 0.5 +-0.0577821 0.0826022 -0.0210434 0.446726 0.464443 +-0.0588054 0.0825509 -0.0205914 0.521117 0.5 +-0.0597904 0.0825229 -0.0201763 0.708865 0.5 +-0.060782 0.082481 -0.019648 0.538491 0.5 +-0.0617679 0.0824635 -0.0193558 0.623609 0.5 +-0.0627701 0.0824471 -0.0192325 0.69393 0.5 +-0.0637771 0.0824308 -0.0191299 0.517092 0.5 +-0.0647775 0.0824087 -0.0188685 0.488983 0.5 +-0.0657828 0.082373 -0.0185031 0.489213 0.444324 +-0.0667973 0.0823343 -0.0181512 0.474669 0.449621 +-0.0677812 0.0823162 -0.0178553 0.44559 0.5 +-0.0687998 0.0822684 -0.0173873 0.435217 0.5 +-0.0697681 0.0822532 -0.0170635 0.435025 0.415269 +-0.0707773 0.0822058 -0.016572 0.417175 0.5 +-0.0717492 0.0821807 -0.0161321 0.523279 0.361558 +-0.0727338 0.0821447 -0.0156124 0.502902 0.5 +-0.0737119 0.082093 -0.0148287 0.3889 0.5 +-0.0688663 0.102328 -0.014772 0.467275 0.5 +-0.0698712 0.102299 -0.0142744 0.471976 0.5 +-0.0708675 0.102264 -0.0137609 0.462169 0.5 +-0.0776607 0.0817583 -0.0102119 0.492466 0.5 +-0.0718785 0.102239 -0.0132694 0.47339 0.5 +-0.0729035 0.125275 -0.00849683 0.635826 0.5 +-0.0709427 0.132583 -0.00826816 0.449192 0.5 +-0.0431813 0.165147 -0.00997877 0.334193 0.463683 +-0.0328776 0.105721 -0.0208169 0.593459 0.465678 +-0.0728613 0.102198 -0.0128504 0.448172 0.5 +-0.0738654 0.102167 -0.0123482 0.428433 0.5 +-0.0748613 0.102114 -0.0115761 0.534365 0.5 +-0.0521615 0.159088 -0.00368491 0.371287 0.5 +-0.0739879 0.139879 -0.00672352 0.477363 0.5 +-0.0661842 0.163921 -0.0584969 0.602439 0.5 +-0.0652684 0.163853 -0.0591668 0.41908 0.5 +-0.0740113 0.141343 -0.00688783 0.387434 0.5 +-0.0570856 0.153101 -0.000954757 0.441689 0.5 +-0.055019 0.14719 -0.00165707 0.67902 0.5 +-0.0799264 0.129511 -0.00520384 0.497269 0.5 +-0.07894 0.12954 -0.00577029 0.474893 0.5 +-0.0758742 0.102063 -0.0106997 0.543915 0.5 +-0.0670075 0.139964 -0.00790796 0.735031 0.5 +-0.0768389 0.102007 -0.0101454 0.537819 0.5 +-0.0649294 0.123847 -0.00887936 0.812583 0.5 +0.0342448 0.0842103 -0.0184253 0.755529 0.5 +0.033222 0.0842418 -0.0188996 0.748263 0.425287 +0.0322402 0.0842577 -0.0191914 0.743885 0.428486 +0.0312031 0.0842875 -0.0196213 0.739428 0.5 +0.030217 0.0843227 -0.0201565 0.736815 0.5 +0.0292051 0.0843756 -0.0209031 0.753562 0.5 +0.0282305 0.08443 -0.0217055 0.757211 0.5 +-0.0778681 0.101964 -0.00928868 0.50153 0.5 +-0.0768656 0.120803 -0.0071099 0.430174 0.5 +-0.0630045 0.132588 -0.00795426 0.641128 0.489798 +-0.0679156 0.112303 -0.0110315 0.607282 0.5 +-0.0682443 0.179461 -0.0589214 0.227821 0.446651 +-0.0338762 0.105703 -0.0205658 0.630485 0.5 +0.0212182 0.0847586 -0.026404 0.74562 0.5 +0.0202147 0.0847891 -0.0269071 0.741476 0.5 +0.019219 0.0848258 -0.027423 0.729509 0.5 +0.0182107 0.084868 -0.0280483 0.717499 0.5 +0.0172008 0.0849074 -0.0286671 0.701001 0.5 +0.0162319 0.0849386 -0.0291053 0.70937 0.450324 +0.015216 0.0849668 -0.0295884 0.692568 0.5 +0.0141976 0.0850086 -0.0301852 0.67654 0.5 +0.0132032 0.0850348 -0.0305799 0.848681 0.5 +0.0122145 0.0850407 -0.0307351 0.848209 0.5 +0.0112227 0.0850587 -0.0310098 0.842195 0.5 +0.0102154 0.0850922 -0.0315035 0.841006 0.5 +0.00921045 0.0851252 -0.032 0.648132 0.5 +0.00819029 0.0851531 -0.0324575 0.6619 0.5 +0.00722024 0.0851796 -0.0327872 0.665043 0.5 +0.00621048 0.0851628 -0.0331463 0.669295 0.472737 +0.00521493 0.0852237 -0.0334342 0.837302 0.5 +0.00420379 0.0852404 -0.0337772 0.83231 0.5 +0.00318984 0.0852564 -0.0341139 0.659139 0.5 +0.00218731 0.0852799 -0.0344916 0.67096 0.5 +0.00121183 0.0853285 -0.0350521 0.681909 0.5 +0.00019241 0.0853625 -0.035651 0.666593 0.5 +-0.000826517 0.0853922 -0.0362438 0.653009 0.5 +-0.00181283 0.0854279 -0.036655 0.834975 0.5 +-0.00281997 0.0854457 -0.0370162 0.820686 0.5 +-0.00382316 0.0854518 -0.0372434 0.827149 0.5 +-0.00480748 0.0854817 -0.0373491 0.808082 0.5 +-0.00581815 0.0854694 -0.0375201 0.800532 0.5 +-0.00681664 0.0854791 -0.0376549 0.807842 0.5 +-0.00781609 0.0854881 -0.0377912 0.816952 0.5 +-0.00881167 0.085499 -0.0379404 0.830426 0.5 +-0.0318501 0.0986369 -0.02282 0.863116 0.5 +-0.0108296 0.0855471 -0.0384547 0.680968 0.467193 +-0.0118225 0.0855318 -0.0386599 0.823072 0.5 +-0.0128237 0.0855345 -0.0387685 0.797607 0.5 +-0.0138183 0.0855391 -0.0388001 0.778956 0.5 +-0.0148175 0.0855384 -0.0388203 0.792394 0.5 +-0.0158191 0.0855498 -0.0389623 0.794964 0.5 +-0.0168246 0.0855538 -0.0389836 0.76428 0.5 +-0.0178271 0.0855379 -0.0388455 0.543601 0.5 +-0.0188238 0.0855077 -0.0385626 0.533044 0.487691 +-0.0198342 0.0855003 -0.0383524 0.556545 0.487143 +-0.0208217 0.0854768 -0.038298 0.557344 0.5 +-0.0218218 0.0854612 -0.0381675 0.534244 0.5 +-0.0228193 0.0854366 -0.0379031 0.510442 0.469437 +-0.0238165 0.0854111 -0.0376407 0.487957 0.5 +-0.0248237 0.0853842 -0.0372699 0.460991 0.444079 +-0.0258164 0.0853463 -0.0368715 0.431825 0.5 +-0.0268088 0.0852978 -0.0363495 0.404548 0.5 +-0.0277715 0.0852268 -0.0356683 0.498689 0.5 +-0.0348769 0.105695 -0.0204457 0.676321 0.5 +-0.0689277 0.115103 -0.00892086 0.574396 0.5 +-0.0358714 0.105673 -0.0204021 0.705195 0.5 +-0.0291786 0.175627 -0.0167894 0.45132 0.5 +-0.0662775 0.0734947 0.0382764 0.582418 0.5 +-0.0738816 0.120852 -0.00799698 0.612648 0.5 +-0.0829232 0.125068 -0.00442148 0.453776 0.5 +-0.035813 0.0842739 -0.0225525 0.298587 0.362273 +-0.0368013 0.0842007 -0.0223672 0.439234 0.5 +-0.0378081 0.0841771 -0.022143 0.472401 0.5 +-0.0387822 0.0841715 -0.021953 0.766308 0.5 +-0.0397846 0.0841362 -0.0215764 0.526135 0.5 +-0.040789 0.084093 -0.0212481 0.455201 0.5 +-0.0417827 0.0840916 -0.0212196 0.505237 0.5 +-0.0427782 0.0841106 -0.0212812 0.546614 0.5 +-0.0437814 0.0840812 -0.0212189 0.578612 0.5 +-0.0447805 0.0840976 -0.0212945 0.622325 0.5 +-0.0457806 0.0841121 -0.0213757 0.645386 0.5 +-0.046782 0.0841151 -0.0215173 0.680863 0.5 +-0.0477812 0.0840973 -0.0215817 0.682908 0.5 +-0.0487816 0.084091 -0.021606 0.663505 0.5 +-0.049781 0.0841032 -0.0216622 0.664363 0.5 +-0.0507818 0.0840955 -0.0217037 0.654673 0.5 +-0.0517799 0.0840941 -0.0216716 0.650158 0.5 +-0.0527821 0.0840792 -0.0215781 0.644628 0.5 +-0.0537819 0.0840761 -0.0215562 0.646869 0.5 +-0.0547819 0.0840722 -0.0215429 0.647175 0.5 +-0.0557857 0.0840569 -0.0214422 0.646677 0.5 +-0.0567766 0.0840541 -0.0213935 0.624462 0.5 +-0.0577868 0.0840301 -0.0211707 0.434542 0.5 +-0.0587854 0.0839965 -0.0207846 0.384586 0.5 +-0.05979 0.0839541 -0.0202843 0.476235 0.455775 +-0.0607901 0.0839118 -0.0197808 0.487579 0.5 +-0.0617895 0.083881 -0.0194032 0.571258 0.5 +-0.0627925 0.0838575 -0.0191674 0.663798 0.5 +-0.0637886 0.083851 -0.0191517 0.686541 0.5 +-0.0647895 0.0838376 -0.0190209 0.504197 0.5 +-0.0658025 0.083802 -0.0186684 0.476863 0.5 +-0.0667828 0.0837809 -0.018353 0.466269 0.5 +-0.0677801 0.0837503 -0.017964 0.451042 0.389061 +-0.0687774 0.0837142 -0.0175822 0.430549 0.5 +-0.0697992 0.0836733 -0.0171139 0.442 0.5 +-0.0707648 0.0836514 -0.0167885 0.421875 0.5 +-0.0717687 0.0836085 -0.0162896 0.414961 0.5 +-0.072774 0.083565 -0.0157894 0.40816 0.5 +-0.0737507 0.0835282 -0.0152437 0.515032 0.5 +-0.0687764 0.180487 -0.0583042 0.265959 0.5 +-0.0341101 0.171131 -0.0149349 0.483877 0.5 +-0.0368731 0.105664 -0.0202847 0.731437 0.5 +-0.0308542 0.0986541 -0.0229751 0.830152 0.5 +0.0181741 0.0988563 -0.0226017 0.72606 0.5 +-0.0739058 0.125263 -0.00826143 0.602469 0.5 +-0.069936 0.13258 -0.0084535 0.62958 0.5 +-0.064292 0.168172 -0.0605879 0.322793 0.5 +-0.0224335 0.0371726 0.0541058 0.3255 0.415078 +-0.0490886 0.157599 -0.00632625 0.503342 0.5 +-0.0541243 0.156074 -0.00260128 0.352958 0.459475 +-0.017174 0.169749 -0.0215263 0.709075 0.5 +-0.0839336 0.126519 -0.00402298 0.416328 0.5 +-0.0758891 0.119352 -0.00728174 0.393508 0.464469 +-0.0748916 0.123775 -0.00787892 0.627736 0.5 +0.0171551 0.0988258 -0.0226279 0.701952 0.5 +-0.075004 0.141334 -0.0064915 0.369818 0.5 +-0.0510743 0.153146 -0.0044532 0.446066 0.5 +-0.0560183 0.147198 -0.00168648 0.721232 0.5 +-0.0570144 0.147201 -0.00173114 0.747834 0.5 +-0.0779361 0.129573 -0.00656407 0.534673 0.5 +-0.0181754 0.17123 -0.0220272 0.706424 0.5 +-0.0620868 0.139878 -0.00655442 0.572767 0.5 +-0.054074 0.15164 -0.0027148 0.467688 0.5 +0.0161578 0.0988387 -0.0226848 0.734407 0.5 +-0.0121243 0.183164 -0.0282842 0.342502 0.437842 +0.0151574 0.0988592 -0.0229537 0.741653 0.5 +0.0322123 0.0856789 -0.0192748 0.742355 0.425062 +0.0311896 0.0857114 -0.0197343 0.744782 0.5 +0.0302059 0.0857499 -0.020278 0.751735 0.414671 +0.0292205 0.0857953 -0.020938 0.760091 0.5 +0.0282404 0.0858422 -0.0216043 0.755847 0.5 +0.0271917 0.0858851 -0.0222975 0.761192 0.5 +0.0141613 0.0988714 -0.0229756 0.698454 0.5 +-0.0321194 0.165225 -0.0156285 0.608349 0.457514 +0.0101112 0.110138 -0.0193681 0.839471 0.5 +-0.0470844 0.151656 -0.00519447 0.697383 0.5 +-0.0555627 0.0351736 0.0453577 0.740459 0.5 +-0.0251898 0.177123 -0.0193397 0.382745 0.5 +-0.0378749 0.105661 -0.0201869 0.78127 0.5 +-0.0172081 0.172701 -0.0233314 0.654907 0.5 +-0.0231858 0.17269 -0.0205136 0.494813 0.5 +-0.0368813 0.108512 -0.0198737 0.69646 0.5 +-0.0789041 0.126621 -0.00628203 0.416161 0.429739 +-0.0388696 0.105647 -0.0202518 0.79228 0.5 +0.0142234 0.0864184 -0.0301272 0.663835 0.5 +0.0132013 0.0864568 -0.0307211 0.840608 0.5 +0.0122037 0.0864617 -0.0308592 0.840381 0.5 +0.0111963 0.0864748 -0.0310924 0.848016 0.5 +0.0101956 0.0865002 -0.0314726 0.843364 0.5 +0.00919662 0.0865327 -0.0319845 0.659435 0.5 +0.00820634 0.0865719 -0.0325157 0.669925 0.5 +0.00722196 0.0865913 -0.0328221 0.65709 0.5 +0.00619535 0.0866083 -0.0331365 0.849277 0.5 +0.005197 0.0866258 -0.0333998 0.853639 0.5 +0.00420219 0.0866314 -0.0335404 0.849711 0.5 +0.00319943 0.0866473 -0.0337836 0.849061 0.5 +0.00219887 0.0866713 -0.0341557 0.84258 0.5 +0.00120237 0.0867098 -0.0346725 0.645379 0.5 +0.000189104 0.0867348 -0.0351526 0.655121 0.476749 +-0.000793766 0.0867716 -0.0355698 0.652351 0.5 +-0.00181216 0.086792 -0.0360393 0.650236 0.5 +-0.00282121 0.086807 -0.0363939 0.631755 0.5 +-0.00382707 0.0868147 -0.0366286 0.807575 0.5 +-0.00481466 0.0868424 -0.0368113 0.795727 0.5 +-0.00581925 0.0868408 -0.0369183 0.786855 0.5 +-0.00681874 0.0868473 -0.0370495 0.799496 0.5 +-0.00781365 0.086863 -0.0372016 0.811749 0.5 +-0.00880796 0.0868775 -0.037347 0.804347 0.5 +-0.0808705 0.11922 -0.0043482 0.551409 0.368232 +-0.0718704 0.117956 -0.00810673 0.598141 0.5 +-0.0789765 0.135392 -0.00472816 0.474323 0.5 +-0.0128309 0.0869146 -0.0385108 0.755036 0.5 +-0.0138249 0.0869198 -0.0385386 0.73435 0.5 +-0.0148225 0.086924 -0.0385597 0.736843 0.5 +-0.0158265 0.0869335 -0.0385904 0.746605 0.5 +-0.0168218 0.086916 -0.0386596 0.728434 0.5 +-0.0178225 0.0869056 -0.0385387 0.687864 0.5 +-0.0188243 0.0868874 -0.0382929 0.647065 0.5 +-0.019834 0.0868717 -0.0379507 0.662955 0.5 +-0.020823 0.0868434 -0.0377816 0.674743 0.5 +-0.0218256 0.086832 -0.0376579 0.668241 0.5 +-0.0228243 0.0868132 -0.0375213 0.498982 0.5 +-0.0238123 0.0867774 -0.0372362 0.481621 0.5 +-0.0248377 0.0867614 -0.0367865 0.452814 0.5 +-0.0258016 0.0867079 -0.0364604 0.418644 0.5 +-0.0267903 0.0866521 -0.0358137 0.489198 0.5 +-0.0590207 0.126708 -0.0075139 0.603622 0.481512 +-0.0518947 0.109852 -0.0185479 0.698439 0.5 +-0.0630484 0.138442 -0.00719818 0.565805 0.480195 +-0.0830784 0.138234 -0.000100609 0.645752 0.5 +-0.0540417 0.148675 -0.00217424 0.575884 0.5 +-0.0530498 0.14867 -0.00246875 0.829778 0.5 +-0.0520649 0.148658 -0.00262972 0.832128 0.5 +-0.0728836 0.119408 -0.00813229 0.607821 0.5 +-0.035698 0.0857595 -0.0237144 0.366486 0.5 +-0.0367909 0.0856326 -0.0224706 0.640853 0.5 +-0.0377888 0.0855996 -0.0220857 0.933623 0.5 +-0.0387912 0.0855771 -0.0218281 0.976914 0.5 +-0.0397898 0.0855606 -0.0217035 0.409074 0.5 +-0.040787 0.0855384 -0.021437 0.450344 0.5 +-0.0417892 0.0855226 -0.0213401 0.510575 0.5 +-0.0427865 0.0855262 -0.0214717 0.601143 0.5 +-0.0437872 0.0855322 -0.0215732 0.639251 0.444817 +-0.0447879 0.085543 -0.0216723 0.678874 0.450862 +-0.0457869 0.0855328 -0.0217062 0.663121 0.465104 +-0.0467885 0.0855251 -0.0217462 0.682357 0.442377 +-0.0477868 0.0855382 -0.0218048 0.672664 0.437403 +-0.0487902 0.0855221 -0.0217064 0.670681 0.5 +-0.0497873 0.0855205 -0.0216876 0.67238 0.5 +-0.0507888 0.0855066 -0.0215873 0.667835 0.5 +-0.051788 0.0855011 -0.0215694 0.675016 0.5 +-0.0527874 0.0854974 -0.0215293 0.676004 0.5 +-0.053788 0.0854855 -0.0214384 0.688125 0.5 +-0.0547883 0.08548 -0.0214211 0.678957 0.5 +-0.0557862 0.0854763 -0.0214113 0.65326 0.5 +-0.0567974 0.0854612 -0.0213212 0.617115 0.5 +-0.0578034 0.0854472 -0.0211977 0.418082 0.5 +-0.0588066 0.0854157 -0.0208208 0.373713 0.5 +-0.0598028 0.0853759 -0.0202992 0.450951 0.400227 +-0.060795 0.0853339 -0.0197774 0.454241 0.5 +-0.0618022 0.0852922 -0.0192956 0.551596 0.5 +-0.0627849 0.0852772 -0.0191174 0.647366 0.5 +-0.0637998 0.0852745 -0.0191701 0.661163 0.5 +-0.0648062 0.0852609 -0.0190538 0.499135 0.5 +-0.0657951 0.0852369 -0.0187501 0.477561 0.463852 +-0.0667905 0.0852019 -0.0183581 0.469011 0.5 +-0.067793 0.0851703 -0.0179862 0.446715 0.450209 +-0.0688144 0.0851338 -0.0175228 0.440219 0.5 +-0.0698084 0.085099 -0.0171261 0.441502 0.5 +-0.0707959 0.0850638 -0.0167146 0.420952 0.5 +-0.0717874 0.0850294 -0.0163139 0.427866 0.5 +-0.0727986 0.0849862 -0.0158247 0.427446 0.5 +-0.0737754 0.0849525 -0.0153987 0.421005 0.5 +-0.0747645 0.0849032 -0.0147477 0.509241 0.5 +-0.0729617 0.136954 -0.00717713 0.519584 0.441884 +-0.0699065 0.110817 -0.0106385 0.48093 0.5 +-0.0759462 0.128163 -0.00785989 0.399147 0.5 +-0.0609102 0.120922 -0.00906619 0.653001 0.5 +-0.074873 0.120838 -0.00772479 0.589936 0.5 +-0.0749113 0.125246 -0.00804661 0.55917 0.5 +-0.0689532 0.132595 -0.00851473 0.651027 0.5 +-0.0691773 0.0628504 0.020491 0.489377 0.5 +-0.0211868 0.174176 -0.0217698 0.432538 0.326988 +-0.0838382 0.11616 -0.00137187 0.529339 0.5 +-0.0291704 0.172664 -0.0174314 0.44522 0.5 +-0.0662744 0.179701 -0.0600508 0.247428 0.5 +-0.0748889 0.119375 -0.00765967 0.418673 0.5 +-0.0765343 0.0681368 0.0143622 0.765926 0.282803 +-0.0619999 0.132592 -0.00773229 0.834133 0.5 +-0.0520761 0.153139 -0.00390728 0.423973 0.5 +-0.0500773 0.15315 -0.00486218 0.629256 0.5 +-0.0490784 0.153156 -0.00527602 0.645104 0.5 +-0.0620052 0.131132 -0.00795604 0.651341 0.484653 +-0.076964 0.129602 -0.00711544 0.554829 0.5 +-0.0788837 0.117794 -0.00533035 0.502703 0.5 +-0.0547546 0.035972 0.0465789 0.287062 0.5 +-0.0550666 0.151635 -0.00215779 0.473888 0.5 +-0.0798758 0.117757 -0.00451351 0.555664 0.5 +-0.0669649 0.131148 -0.00876196 0.765727 0.5 +0.0332298 0.0870923 -0.0186827 0.761893 0.5 +0.0322049 0.0871235 -0.0192744 0.752904 0.418507 +0.0312237 0.0871647 -0.0198177 0.741529 0.5 +-0.0398723 0.105663 -0.0203219 0.761454 0.5 +0.029243 0.0872327 -0.0208644 0.754386 0.5 +0.0282302 0.0872832 -0.0216049 0.73322 0.5 +0.0272389 0.0873294 -0.0222582 0.727934 0.5 +0.0262112 0.0873747 -0.0229809 0.731592 0.5 +0.025208 0.0874192 -0.0236148 0.736403 0.5 +-0.018203 0.175668 -0.0239316 0.398363 0.38839 +0.0111139 0.110132 -0.0191278 0.81562 0.5 +-0.040872 0.105663 -0.0204372 0.725919 0.5 +-0.0829013 0.122118 -0.00412754 0.509113 0.382665 +-0.0817843 0.113273 -0.0014411 0.471274 0.5 +-0.0679688 0.135528 -0.00836676 0.645063 0.5 +-0.0350927 0.168167 -0.014918 0.514899 0.5 +-0.0771313 0.0754374 0.0308061 0.695453 0.5 +-0.0579142 0.114001 -0.0151155 0.442556 0.449656 +0.0152063 0.0878077 -0.0294658 0.689504 0.5 +0.014203 0.08785 -0.0301032 0.646804 0.5 +0.0131946 0.0878791 -0.0305989 0.812934 0.5 +0.0122013 0.0878954 -0.0308742 0.635611 0.482584 +0.0111959 0.0879068 -0.0311136 0.635365 0.483867 +0.0101954 0.0879315 -0.0314901 0.650051 0.5 +0.00920046 0.0879669 -0.0320124 0.6554 0.5 +0.0082124 0.0879974 -0.0324239 0.669293 0.5 +0.00720445 0.088027 -0.0329216 0.673856 0.5 +0.00621357 0.0880484 -0.0332214 0.674195 0.5 +0.00519891 0.0880579 -0.0334439 0.833637 0.5 +0.00419323 0.0880606 -0.0335488 0.820954 0.5 +0.00318991 0.0880718 -0.0337792 0.829019 0.5 +0.00219436 0.0880897 -0.0340427 0.833697 0.5 +0.00119588 0.0881146 -0.0344258 0.835896 0.5 +0.000176932 0.0881362 -0.0348875 0.664627 0.5 +-0.000805756 0.0881637 -0.035184 0.663046 0.5 +-0.00180856 0.0881831 -0.0355551 0.628816 0.482283 +-0.00281209 0.0882041 -0.0358187 0.800677 0.5 +-0.00381497 0.0882175 -0.036071 0.795126 0.5 +-0.00481581 0.0882239 -0.0361964 0.777884 0.5 +-0.00582274 0.088227 -0.0364178 0.773749 0.5 +-0.00682337 0.088234 -0.0365489 0.782623 0.5 +-0.00782745 0.0882395 -0.0367822 0.798479 0.5 +-0.00880856 0.0882704 -0.0368626 0.780461 0.5 +-0.0602789 0.0617061 0.0251086 0.612143 0.5 +-0.0808086 0.113339 -0.00208766 0.490601 0.332974 +-0.0808831 0.117721 -0.00384392 0.579334 0.387877 +-0.0583711 0.0614813 0.0257087 0.445245 0.5 +-0.0510378 0.148698 -0.00295565 0.570554 0.479784 +-0.029146 0.168214 -0.0173005 0.504686 0.5 +-0.0158308 0.0883117 -0.038067 0.692153 0.5 +-0.0168318 0.0883012 -0.0380546 0.682829 0.5 +-0.0178242 0.0882801 -0.0380186 0.51988 0.5 +-0.01883 0.0882728 -0.037792 0.492231 0.5 +-0.0198294 0.0882519 -0.0375379 0.639478 0.5 +-0.020826 0.0882193 -0.0372663 0.637106 0.5 +-0.0218312 0.0882119 -0.0370399 0.644252 0.444847 +-0.0228308 0.0881946 -0.0369029 0.61831 0.5 +-0.0238257 0.0881589 -0.0366228 0.460716 0.5 +-0.0248315 0.0881388 -0.0362597 0.428333 0.5 +-0.0258198 0.0880859 -0.0357275 0.486999 0.5 +-0.0267843 0.0880044 -0.0350453 0.462248 0.5 +-0.0593221 0.0615947 0.0254084 0.405054 0.463497 +-0.066289 0.0747237 0.0389788 0.604639 0.450412 +-0.0738723 0.109242 -0.00905672 0.479397 0.5 +-0.0278046 0.0364789 0.0536304 0.509575 0.5 +-0.029103 0.162278 -0.0149633 0.597189 0.5 +-0.0327955 0.0873016 -0.0254019 0.298281 0.5 +-0.0338535 0.0870951 -0.024854 0.410053 0.395768 +-0.0348246 0.0872331 -0.0245609 0.395015 0.5 +-0.0357817 0.0871994 -0.0240994 0.462712 0.5 +-0.0367713 0.0871639 -0.0235593 0.404976 0.5 +-0.0377966 0.0870844 -0.0227292 0.794587 0.5 +-0.0387964 0.0870429 -0.0222174 0.861386 0.5 +-0.0398029 0.0870085 -0.0218621 0.549864 0.5 +-0.0407936 0.0869784 -0.0214607 0.61638 0.5 +-0.0417916 0.0869783 -0.0214259 0.710061 0.5 +-0.0427934 0.0869807 -0.0215837 0.613674 0.5 +-0.0437953 0.0869983 -0.0218056 0.673266 0.5 +-0.044794 0.0870021 -0.0219374 0.704608 0.5 +-0.0457927 0.0869975 -0.0219586 0.691141 0.5 +-0.0467968 0.0869913 -0.021986 0.70034 0.5 +-0.0477996 0.0869772 -0.0218762 0.705583 0.5 +-0.0487946 0.0869761 -0.0218357 0.703388 0.5 +-0.0363492 0.0338444 -0.0305686 0 0 +-0.0353955 0.0337248 -0.0302701 0 0 +-0.0344859 0.0335245 -0.0299041 0.160468 0.5 +-0.0334418 0.0335662 -0.0297364 0.150938 0.5 +-0.0323521 0.0336874 -0.0296376 0.151374 0 +-0.0314435 0.033488 -0.0292746 0.162784 0 +-0.0304487 0.0334492 -0.0290445 0 0 +-0.0400285 0.0339876 -0.0295458 0.150597 0.5 +-0.0391149 0.0337868 -0.0291782 0.15639 0 +-0.0381652 0.0336678 -0.0288809 0.148986 0.5 +-0.0371627 0.0336289 -0.0286501 0.295099 0.5 +-0.036169 0.0335901 -0.0284162 0.297161 0.5 +-0.0351234 0.033632 -0.0282515 0.305087 0.5 +-0.0341243 0.0335931 -0.0280196 0.312242 0.5 +-0.0331272 0.0335545 -0.0277881 0.296768 0.5 +-0.0320822 0.0335961 -0.0276233 0.308699 0.5 +-0.031088 0.0335574 -0.0273919 0.317366 0.5 +-0.0300883 0.0335187 -0.027157 0.158606 0.5 +-0.0290915 0.0334798 -0.0269263 0.16164 0.5 +-0.0280931 0.033441 -0.0266965 0.159544 0.5 +-0.0270496 0.033483 -0.0265278 0.158389 0.5 +-0.0260065 0.0335246 -0.026366 0.156355 0 +-0.025008 0.0334859 -0.0261337 0.159649 0 +-0.0239658 0.0335277 -0.0259671 0.160669 0 +-0.0229686 0.033489 -0.025736 0.159715 0 +-0.0219243 0.0335307 -0.0255712 0.161465 0.5 +-0.020926 0.0334921 -0.0253378 0.16448 0 +-0.0198832 0.0335337 -0.0251748 0.160748 0 +-0.0188851 0.0334951 -0.0249427 0.157126 0 +-0.0177987 0.0336176 -0.0248428 0.15273 0.5 +-0.016752 0.0336597 -0.0246752 0.154079 0.5 +-0.0157117 0.033701 -0.0245127 0.159309 0 +-0.0147591 0.033582 -0.024214 0.163614 0 +-0.0136727 0.0337044 -0.0241151 0.157158 0 +-0.0126271 0.0337462 -0.0239473 0.157103 0 +-0.0116307 0.0337076 -0.023716 0.160251 0.5 +-0.0105851 0.0337493 -0.0235512 0.162084 0 +-0.00959045 0.0337105 -0.0233226 0 0 +-0.00854262 0.033753 -0.0231542 0.156358 0.5 +-0.00745761 0.0338748 -0.0230567 0.155883 0 +-0.00645782 0.0338359 -0.0228235 0.161954 0.5 +-0.00546373 0.0337972 -0.022595 0 0 +-0.00441949 0.0338393 -0.022426 0.162113 0.5 +-0.00342161 0.0338005 -0.0221963 0.16245 0.5 +-0.00233027 0.0339229 -0.0220991 0.157286 0 +-0.00129242 0.0339647 -0.0219341 0 0 +-0.000337321 0.0338454 -0.0216338 0.163708 0.5 +0.000751147 0.0339678 -0.0215355 0.157278 0 +0.00179227 0.0340095 -0.0213712 0.156385 0.5 +0.00279805 0.0339767 -0.0211497 0.158826 0.5 +0.00384566 0.0341227 -0.0209701 0.169458 0.5 +0.00485548 0.0339942 -0.0207847 0.158392 0.5 +0.00590733 0.0340449 -0.020637 0.157129 0.5 +0.00695815 0.0340953 -0.0204902 0.154268 0.5 +0.00806259 0.0342288 -0.0204182 0.152877 0.5 +0.00900275 0.0343116 -0.0200681 0.202996 0.5 +0.010104 0.0343592 -0.0200136 0.176171 0.5 +0.0111342 0.034487 -0.019828 0.190127 0.5 +0.0122157 0.0346138 -0.0197432 0.222803 0.5 +0.0132509 0.0349689 -0.0195966 0.289099 0.5 +-0.0417544 0.0339701 -0.0279962 0.148671 0 +-0.0408028 0.033851 -0.0276993 0.284498 0.5 +-0.0398023 0.0338119 -0.0274661 0.296341 0.5 +-0.0388924 0.0336117 -0.0270987 0.30575 0.5 +-0.0378917 0.0335733 -0.0268663 0.299924 0.5 +-0.0368482 0.0336146 -0.0266993 0.460255 0.5 +-0.0358944 0.0334964 -0.0263993 0.45178 0.5 +-0.0348112 0.0336186 -0.0263013 0.458292 0.5 +-0.0338581 0.0334994 -0.0260028 0.468489 0.5 +-0.0328117 0.0335416 -0.0258378 0.453088 0.5 +-0.0317722 0.0335835 -0.0256749 0.462956 0.5 +-0.0307727 0.033545 -0.0254394 0.310102 0.5 +-0.0297288 0.0335868 -0.0252735 0.314577 0.5 +-0.0287322 0.0335484 -0.0250427 0.315352 0.5 +-0.0276907 0.0335904 -0.024878 0.314963 0.5 +-0.0266886 0.0335519 -0.0246454 0.310896 0.5 +-0.0256473 0.0335939 -0.0244827 0.311269 0.5 +-0.0246064 0.033636 -0.0243161 0.315939 0.5 +-0.0236086 0.0335974 -0.0240827 0.31951 0.5 +-0.0225654 0.0336394 -0.0239171 0.311934 0.5 +-0.021522 0.0336815 -0.0237529 0.315916 0.5 +-0.0205229 0.0336428 -0.0235211 0.319674 0.5 +-0.0195242 0.0336044 -0.023287 0.319903 0.5 +-0.0184793 0.0336465 -0.023124 0.308301 0.5 +-0.0174373 0.0336888 -0.022956 0.312592 0.5 +-0.016397 0.0337307 -0.02279 0.312197 0.5 +-0.0153541 0.0337728 -0.0226273 0.31725 0.5 +-0.0143105 0.0338147 -0.022462 0.321093 0.5 +-0.0133142 0.0337765 -0.0222266 0.316298 0.5 +-0.0122699 0.0338184 -0.0220638 0.316834 0.5 +-0.0112286 0.0338605 -0.0218986 0.317376 0.5 +-0.010186 0.0339025 -0.0217341 0.324966 0.5 +-0.00918339 0.033864 -0.0215021 0.321081 0.5 +-0.00814387 0.0339061 -0.0213361 0.313021 0.5 +-0.00710114 0.0339482 -0.0211688 0.320144 0.5 +-0.00610064 0.0339097 -0.0209348 0.320445 0.5 +-0.00505811 0.0339518 -0.0207718 0.312656 0.5 +-0.00401542 0.033994 -0.0206047 0.31834 0.5 +-0.00297107 0.0340356 -0.0204416 0.321301 0.5 +-0.00197361 0.0339973 -0.0202101 0.316292 0.5 +-0.000934383 0.0340393 -0.0200439 0.321238 0.5 +0.000108091 0.0340814 -0.0198793 0.316427 0.5 +0.00110904 0.0340429 -0.0196452 0.3116 0.5 +0.00215147 0.0340847 -0.0194818 0.315291 0.5 +0.00315064 0.0340463 -0.0192491 0.315664 0.5 +0.00419216 0.0340885 -0.0190827 0.315257 0.5 +0.00523902 0.0341335 -0.0189244 0.309809 0.5 +0.00628938 0.0341841 -0.018778 0.307789 0.5 +0.0072963 0.0341516 -0.018557 0.296048 0.5 +0.00839351 0.0342854 -0.0184828 0.303865 0.5 +0.00940058 0.0342529 -0.0182643 0.299773 0.5 +0.0104502 0.0343141 -0.0181143 0.224072 0.5 +0.0115063 0.0343546 -0.0179688 0.291746 0.5 +0.0125555 0.034405 -0.0178251 0.294031 0.5 +0.0135609 0.0343729 -0.0176058 0.144731 0.5 +0.0147315 0.0347337 -0.0176578 0.180944 0.5 +0.0156033 0.0352036 -0.0174539 0.27416 0.5 +-0.0433018 0.0342732 -0.0267127 0.1483 0 +-0.0424851 0.033913 -0.0262188 0.294322 0.5 +-0.0416194 0.0336308 -0.0257822 0.297489 0.5 +-0.0406608 0.0335117 -0.0254825 0.440305 0.5 +-0.0396194 0.0335538 -0.0253204 0.452616 0.5 +-0.0386238 0.0335154 -0.0250853 0.456197 0.5 +-0.0375789 0.0335576 -0.0249215 0.456623 0.5 +-0.0365829 0.0335193 -0.0246869 0.616761 0.5 +-0.0355381 0.0335618 -0.0245193 0.605171 0.5 +-0.0344945 0.0336038 -0.0243554 0.626189 0.5 +-0.0334959 0.0335656 -0.024125 0.620404 0.5 +-0.0324526 0.0336078 -0.0239554 0.620122 0.5 +-0.0314585 0.0335695 -0.0237257 0.472007 0.5 +-0.0304111 0.0336116 -0.02356 0.473627 0.5 +-0.0294128 0.0335741 -0.023325 0.482378 0.5 +-0.0283736 0.0336157 -0.0231629 0.4906 0.5 +-0.0273719 0.0335777 -0.022929 0.497013 0.5 +-0.0263303 0.0336202 -0.0227625 0.484592 0.5 +-0.0252891 0.0336623 -0.0225985 0.485209 0.5 +-0.0242451 0.0337053 -0.0224295 0.506409 0.5 +-0.0232497 0.0336668 -0.0221987 0.514359 0.5 +-0.0222505 0.0336283 -0.0219672 0.510989 0.5 +-0.0212056 0.0336704 -0.0218021 0.510235 0.5 +-0.0201622 0.0337128 -0.0216346 0.522665 0.5 +-0.0191683 0.0336751 -0.0214022 0.510007 0.5 +-0.0180785 0.0337977 -0.021304 0.501867 0.5 +-0.0170355 0.0338392 -0.0211402 0.51465 0.5 +-0.0160362 0.0338015 -0.0209075 0.50991 0.5 +-0.0149527 0.0339242 -0.0208085 0.508312 0.5 +-0.0139533 0.0338864 -0.0205741 0.514103 0.5 +-0.012912 0.0339283 -0.0204101 0.507749 0.5 +-0.0118673 0.0339713 -0.0202424 0.508457 0.5 +-0.0108252 0.0340132 -0.0200775 0.514541 0.5 +-0.00982564 0.0339746 -0.0198462 0.5138 0.5 +-0.00878391 0.0340179 -0.0196776 0.508819 0.5 +-0.0077421 0.0340597 -0.0195129 0.514384 0.5 +-0.00674435 0.0340208 -0.0192827 0.520192 0.5 +-0.00574267 0.0339825 -0.0190499 0.516899 0.5 +-0.00470039 0.0340249 -0.0188849 0.503477 0.5 +-0.00361434 0.0341476 -0.0187856 0.508787 0.5 +-0.00261732 0.0341102 -0.0185505 0.514129 0.5 +-0.00157082 0.0341515 -0.0183868 0.515328 0.5 +-0.000577398 0.0341134 -0.0181551 0.522731 0.5 +0.000420695 0.0340758 -0.0179207 0.516718 0.5 +0.00146529 0.0341167 -0.0177588 0.510133 0.5 +0.00250665 0.0341604 -0.0175888 0.508357 0.5 +0.00354988 0.0342019 -0.0174252 0.514846 0.5 +0.00454759 0.0341639 -0.0171912 0.513827 0.5 +0.00554907 0.0341243 -0.0169616 0.505366 0.5 +0.00654381 0.0340863 -0.0167284 0.490133 0.5 +0.00758624 0.0341288 -0.016561 0.476841 0.5 +0.00858548 0.0340902 -0.01633 0.467883 0.5 +0.00968485 0.0342244 -0.0162577 0.455858 0.5 +0.0106928 0.0341923 -0.0160349 0.437793 0.5 +0.0118375 0.0344099 -0.0160341 0.43019 0.5 +0.0128439 0.0343776 -0.0158182 0.296646 0.5 +0.0138974 0.0344287 -0.0156692 0.284783 0.5 +0.0149493 0.0344805 -0.015521 0.281177 0.5 +0.0160661 0.0349193 -0.0155613 0.166524 0.5 +0.0169223 0.0354899 -0.0154522 0.190709 0.5 +-0.0874269 0.111566 0.0378689 0.50964 0.431462 +-0.0439866 0.0342955 -0.0250034 0.269954 0.5 +-0.0433 0.0336903 -0.024306 0.43977 0.5 +-0.0423419 0.0335706 -0.0240051 0.45529 0.5 +-0.0413446 0.0335325 -0.0237744 0.462467 0.5 +-0.0403032 0.0335749 -0.0236075 0.619564 0.5 +-0.0393069 0.033537 -0.0233717 0.628543 0.5 +-0.0382622 0.0335792 -0.0232089 0.628505 0.5 +-0.0372663 0.033541 -0.0229762 0.628574 0.5 +-0.0362217 0.0335837 -0.0228111 0.778171 0.5 +-0.0351787 0.0336265 -0.0226404 0.788348 0.5 +-0.0341799 0.0335887 -0.0224091 0.804258 0.5 +-0.0331372 0.0336314 -0.0222436 0.821028 0.5 +-0.0320928 0.0336737 -0.0220791 0.677401 0.5 +-0.0310543 0.0337173 -0.0219116 0.697809 0.5 +-0.0300075 0.0337589 -0.0217484 0.704491 0.5 +-0.0289244 0.033884 -0.0216457 0.71099 0.5 +-0.0278792 0.0339265 -0.0214795 0.747112 0.5 +-0.0268824 0.0338882 -0.0212482 0.745036 0.5 +-0.0258406 0.0339312 -0.0210821 0.724672 0.5 +-0.0247527 0.0340557 -0.0209813 0.734058 0.5 +-0.023707 0.0340979 -0.0208155 0.754308 0.5 +-0.0226679 0.0341396 -0.0206509 0.757332 0.5 +-0.0216263 0.0341828 -0.0204844 0.754429 0.5 +-0.0205806 0.0342261 -0.0203167 0.762843 0.5 +-0.0195815 0.0341867 -0.0200865 0.765295 0.5 +-0.0185423 0.0342292 -0.0199208 0.756961 0.5 +-0.0174992 0.03427 -0.0197565 0.754185 0.5 +-0.0164538 0.0343139 -0.019589 0.759978 0.5 +-0.015413 0.0343578 -0.0194213 0.76285 0.5 +-0.0144161 0.0343188 -0.0191903 0.765352 0.5 +-0.0133702 0.0343611 -0.0190243 0.754561 0.5 +-0.0123281 0.0344052 -0.018857 0.755088 0.5 +-0.0112854 0.0344473 -0.0186905 0.765139 0.5 +-0.0102872 0.0344076 -0.0184603 0.765143 0.5 +-0.00924422 0.0344526 -0.0182921 0.755165 0.5 +-0.00820144 0.0344928 -0.0181278 0.762893 0.5 +-0.00720215 0.0344571 -0.0178933 0.770698 0.5 +-0.00616098 0.0344967 -0.0177303 0.759807 0.5 +-0.00511763 0.0345398 -0.0175639 0.756398 0.5 +-0.00407779 0.0345848 -0.0173958 0.760777 0.5 +-0.00307655 0.0345443 -0.0171652 0.770118 0.5 +-0.00203672 0.0345877 -0.0169988 0.754757 0.5 +-0.000994284 0.0346324 -0.0168306 0.768707 0.5 +4.31947e-06 0.034593 -0.0165995 0.772503 0.5 +0.00104791 0.0346359 -0.0164332 0.76219 0.5 +0.00204515 0.0345955 -0.0162029 0.769625 0.5 +0.00308943 0.0346383 -0.0160359 0.768064 0.5 +0.00408474 0.0346021 -0.0158016 0.778421 0.5 +0.00508634 0.0345614 -0.0155701 0.778945 0.5 +0.00603967 0.0344425 -0.0152712 0.783005 0.5 +0.00703854 0.0344034 -0.0150394 0.75834 0.5 +0.00803706 0.0343648 -0.0148062 0.749062 0.5 +0.00903132 0.0343268 -0.014573 0.710785 0.5 +0.0099878 0.0342067 -0.0142754 0.68418 0.5 +0.0109831 0.0341684 -0.0140433 0.626492 0.5 +0.0120317 0.0342138 -0.0138856 0.449593 0.5 +0.0130851 0.034266 -0.0137357 0.427929 0.5 +0.0142805 0.0345676 -0.0138073 0.427592 0.5 +0.0153315 0.0346194 -0.0136599 0.280815 0.5 +0.0164763 0.0348375 -0.0136598 0.279075 0.5 +0.0175277 0.0348888 -0.0135142 0 0 +-0.0825815 0.112383 0.0454387 0.388655 0.443275 +-0.0448473 0.0339909 -0.0230279 0.260276 0.5 +-0.0440255 0.0336276 -0.0225259 0.470788 0.5 +-0.0430742 0.0335089 -0.0222312 0.611227 0.5 +-0.0420309 0.0335517 -0.0220625 0.610476 0.5 +-0.0409872 0.0335947 -0.0218947 0.612158 0.5 +-0.0399438 0.0336374 -0.0217314 0.775892 0.5 +-0.0389013 0.0336802 -0.0215651 0.787035 0.5 +-0.0379044 0.0336424 -0.0213286 0.797959 0.5 +-0.0368601 0.0336856 -0.0211611 0.791759 0.5 +-0.0358185 0.0337288 -0.0209957 0.80632 0.5 +-0.0347732 0.0337732 -0.0208295 0.819093 0.5 +-0.0336406 0.0339783 -0.0207966 0.844824 0.5 +-0.0325542 0.0341026 -0.0206973 0.875165 0.5 +-0.0314223 0.0343059 -0.0206653 0.894035 0.5 +-0.0303394 0.0344325 -0.0205625 0.916731 0.5 +-0.0292482 0.0345559 -0.0204636 0.904257 0.5 +-0.0281642 0.0346776 -0.0203658 0.922272 0.5 +-0.0271199 0.0347243 -0.0201972 0.926832 0.5 +-0.0260317 0.0348457 -0.0200988 0.910394 0.5 +-0.0249464 0.0349691 -0.0199992 0.907238 0.5 +-0.0239053 0.0350134 -0.0198326 0.916545 0.5 +-0.0228583 0.0350556 -0.0196661 0.918738 0.5 +-0.0218179 0.0350986 -0.0195001 0.918652 0.5 +-0.0207737 0.0351435 -0.019333 0.90826 0.5 +-0.019688 0.0352649 -0.0192337 0.909767 0.5 +-0.0186888 0.0352267 -0.0190015 0.922347 0.5 +-0.0176483 0.0352702 -0.0188352 0.909165 0.5 +-0.0166066 0.035315 -0.0186674 0.933106 0.5 +-0.0156079 0.0352742 -0.0184368 0.933797 0.5 +-0.014565 0.035318 -0.01827 0.909086 0.5 +-0.0135214 0.0353632 -0.0181023 0.909159 0.5 +-0.0124791 0.0354015 -0.0179384 0.933305 0.5 +-0.0114808 0.0353662 -0.0177045 0.933613 0.5 +-0.0104382 0.0354056 -0.0175403 0.909294 0.5 +-0.00939357 0.0354504 -0.0173725 0.920486 0.5 +-0.00835092 0.0354934 -0.0172056 0.933105 0.5 +-0.00735617 0.0354566 -0.0169734 0.922349 0.5 +-0.00631097 0.0354995 -0.0168068 0.909251 0.5 +-0.00526883 0.0355403 -0.0166416 0.920543 0.5 +-0.00422605 0.0355815 -0.0164762 0.933304 0.5 +-0.00322923 0.0355467 -0.0162422 0.922382 0.5 +-0.00218576 0.0355897 -0.0160761 0.898358 0.5 +-0.00114332 0.0356309 -0.0159104 0.913895 0.5 +-0.000145407 0.0355938 -0.0156782 0.87906 0.5 +0.000940682 0.0357179 -0.0155776 0.890667 0.5 +0.00193935 0.03568 -0.0153447 0.913357 0.5 +0.00293826 0.0356401 -0.0151121 0.955814 0.5 +0.00389123 0.0355229 -0.0148126 0.956258 0.5 +0.00488911 0.035483 -0.0145807 0.965028 0.5 +0.00584547 0.0353648 -0.01428 0.966972 0.5 +0.00679595 0.0352467 -0.0139815 0.975234 0.5 +0.00774922 0.0351262 -0.0136823 0.994011 0.5 +0.00861617 0.0348422 -0.0132521 0.994427 0.5 +0.00952421 0.0346423 -0.0128865 0.981551 0.5 +0.0104332 0.0344417 -0.0125223 0.939553 0.5 +0.011386 0.0343226 -0.0122219 0.684885 0.5 +0.0123862 0.0342845 -0.0119874 0.628788 0.5 +0.0134297 0.0343278 -0.0118215 0.572321 0.5 +0.014517 0.0344542 -0.0117299 0.420938 0.5 +0.0156678 0.0346738 -0.0117297 0.408201 0.5 +0.0167681 0.0348096 -0.0116543 0.282897 0.5 +0.0179105 0.0350278 -0.0116533 0 0 +-0.04595 0.0351008 -0.0224117 0.123435 0.5 +-0.0453989 0.0342539 -0.0215146 0.295367 0.5 +-0.0447524 0.033564 -0.0207541 0.472806 0.5 +-0.0437556 0.0335262 -0.0205177 0.61501 0.5 +-0.0427107 0.0335694 -0.0203532 0.76393 0.5 +-0.0416682 0.0336125 -0.0201879 0.764005 0.5 +-0.0406237 0.0336557 -0.0200198 0.762452 0.5 +-0.0395837 0.0336987 -0.0198537 0.753735 0.5 +-0.0385432 0.0337417 -0.0196892 0.777452 0.5 +-0.0375002 0.0337858 -0.019518 0.783149 0.5 +-0.0364091 0.0339112 -0.0194195 0.794084 0.5 +-0.0352804 0.0341155 -0.0193879 0.79847 0.5 +-0.0340577 0.0344858 -0.0194842 0.773535 0.5 +-0.0328403 0.0348519 -0.0195836 0.810277 0.5 +-0.031661 0.0351392 -0.0196159 0.851428 0.5 +-0.0305288 0.0353431 -0.0195833 0.875112 0.5 +-0.0293998 0.0355494 -0.0195486 0.84266 0.5 +-0.0282657 0.0357556 -0.0195136 0.872681 0.5 +-0.0271788 0.0358787 -0.0194139 0.878336 0.5 +-0.0261386 0.0359205 -0.0192491 0.855156 0.5 +-0.0250081 0.0361291 -0.0192131 0.842458 0.5 +-0.0239187 0.036252 -0.0191133 0.859217 0.5 +-0.022876 0.0362943 -0.0189473 0.873319 0.5 +-0.0218319 0.0363367 -0.0187811 0.860417 0.5 +-0.0207895 0.0363821 -0.0186131 0.874162 0.5 +-0.0197467 0.0364265 -0.0184459 0.887215 0.5 +-0.0187078 0.0364661 -0.0182818 0.886995 0.5 +-0.0176627 0.0365106 -0.0181139 0.887484 0.5 +-0.0166639 0.0364717 -0.017882 0.899591 0.5 +-0.0156218 0.0365183 -0.0177136 0.873793 0.5 +-0.0145821 0.0365575 -0.0175497 0.873575 0.5 +-0.0135396 0.0366033 -0.0173816 0.8874 0.5 +-0.0125377 0.0365668 -0.017148 0.887607 0.5 +-0.0114989 0.0366056 -0.0169842 0.860353 0.5 +-0.0104535 0.0366522 -0.0168147 0.887467 0.5 +-0.00945876 0.0366145 -0.0165831 0.887933 0.5 +-0.00841473 0.0366574 -0.0164161 0.887711 0.5 +-0.00736899 0.0366982 -0.0162506 0.873843 0.5 +-0.00632683 0.0367419 -0.0160833 0.887552 0.5 +-0.00532834 0.0367049 -0.0158504 0.899994 0.5 +-0.00428899 0.0367463 -0.0156853 0.88731 0.5 +-0.00324688 0.0367886 -0.0155194 0.874307 0.5 +-0.00215916 0.0369163 -0.0154166 0.86011 0.5 +-0.00111738 0.0369593 -0.0152505 0.86281 0.5 +-2.83383e-05 0.0370817 -0.0151505 0.865866 0.5 +0.000971023 0.0370418 -0.0149189 0.912707 0.5 +0.00196735 0.0370051 -0.0146847 0.933441 0.5 +0.00287682 0.0368053 -0.01432 0.940836 0.5 +0.0038745 0.0367677 -0.0140867 0.922715 0.5 +0.00482779 0.0366504 -0.0137865 0.940725 0.5 +0.00577997 0.0365296 -0.0134893 0.940621 0.5 +0.00673484 0.0364109 -0.0131882 0.962688 0.5 +0.00764213 0.03621 -0.0128239 0.959949 0.5 +0.00841968 0.0357631 -0.0122614 0.97591 0.5 +0.00923869 0.035402 -0.0117616 0.9642 0.5 +0.0100127 0.0349584 -0.0111996 0.914033 0.5 +0.0107885 0.0345143 -0.0106366 0.881517 0.5 +0.0117447 0.0343946 -0.0103375 0.835038 0.5 +0.0126989 0.0342761 -0.010037 0.77818 0.5 +0.0137845 0.0344 -0.00993851 0.596965 0.5 +0.0148272 0.0344434 -0.00977208 0.558412 0.5 +0.0160068 0.0347306 -0.00980024 0.410558 0.5 +0.0171482 0.0349466 -0.009792 0.28032 0.5 +0.0182459 0.035082 -0.00972071 0 0 +-0.074757 0.111898 0.0475989 0.438823 0.5 +-0.0459466 0.0345121 -0.0200076 0.259 0.5 +-0.0453927 0.0336614 -0.0191153 0.314884 0.5 +-0.0444353 0.0335419 -0.0188134 0.474747 0.5 +-0.0433943 0.0335852 -0.0186462 0.611175 0.5 +-0.042351 0.0336287 -0.0184783 0.763466 0.5 +-0.0413094 0.0336719 -0.0183114 0.77291 0.5 +-0.0403104 0.0336344 -0.0180813 0.766251 0.5 +-0.0392229 0.0337594 -0.0179786 0.759173 0.5 +-0.0381348 0.0338853 -0.0178771 0.759372 0.5 +-0.0369631 0.0341718 -0.0179086 0.731226 0.5 +-0.0356978 0.0346221 -0.0180732 0.731097 0.5 +-0.0344319 0.0350721 -0.0182387 0.722085 0.5 +-0.0331206 0.0356024 -0.0184705 0.718486 0.5 +-0.0318114 0.0361324 -0.0187 0.792418 0.5 +-0.0306807 0.0363386 -0.0186663 0.803428 0.5 +-0.0294591 0.0367076 -0.0187628 0.820759 0.5 +-0.0283747 0.0368322 -0.0186629 0.846126 0.5 +-0.0272428 0.0370384 -0.018628 0.838672 0.5 +-0.0261077 0.0372445 -0.0185929 0.839101 0.5 +-0.0250231 0.0373676 -0.0184933 0.879124 0.5 +-0.0239356 0.0374925 -0.0183912 0.919998 0.5 +-0.0228935 0.0375359 -0.0182249 0.908263 0.5 +-0.021804 0.0376594 -0.0181241 0.929047 0.5 +-0.0208094 0.0376226 -0.0178912 0.937574 0.5 +-0.0197676 0.0376635 -0.0177276 0.937487 0.5 +-0.018769 0.037629 -0.017491 0.927657 0.5 +-0.0176796 0.037751 -0.0173923 0.938269 0.5 +-0.0166811 0.0377146 -0.0171581 0.937533 0.5 +-0.0156387 0.0377596 -0.0169892 0.92719 0.5 +-0.0145975 0.0378025 -0.0168233 0.927228 0.5 +-0.0135559 0.0378433 -0.0166597 0.937917 0.5 +-0.0125112 0.037888 -0.0164908 0.927995 0.5 +-0.0114712 0.0379322 -0.0163227 0.945803 0.5 +-0.010471 0.0378949 -0.0160892 0.947151 0.5 +-0.0094303 0.0379372 -0.0159242 0.938213 0.5 +-0.00843296 0.037899 -0.0156923 0.937627 0.5 +-0.00738705 0.0379427 -0.0155249 0.927227 0.5 +-0.00634516 0.0379873 -0.0153566 0.93941 0.5 +-0.00534725 0.0379464 -0.0151277 0.923664 0.5 +-0.00430704 0.037991 -0.0149598 0.932138 0.5 +-0.00330758 0.0379537 -0.0147265 0.928167 0.5 +-0.00221994 0.0380783 -0.0146251 0.92301 0.5 +-0.00117719 0.0381217 -0.0144579 0.938106 0.5 +-0.000135712 0.0381648 -0.0142912 0.963107 0.5 +0.000863008 0.0381264 -0.0140589 0.971476 0.5 +0.00186325 0.0380873 -0.0138264 0.98648 0.5 +0.00281465 0.0379685 -0.0135285 0.974892 0.5 +0.00381296 0.0379313 -0.0132938 0.981027 0.5 +0.00476485 0.0378127 -0.0129945 0.989325 0.5 +0.00571651 0.037694 -0.0126956 0.99055 0.5 +0.00662772 0.0374926 -0.0123303 0.998826 0.5 +0.00749342 0.0372096 -0.0118978 0.979875 0.5 +0.00822226 0.0366869 -0.011267 0.927286 0.5 +0.00895558 0.0361581 -0.0106394 0.869554 0.5 +0.0095961 0.0354723 -0.00987583 0.814511 0.5 +0.0102837 0.0348658 -0.0091814 0.826079 0.5 +0.0111047 0.0345035 -0.00868495 0.807913 0.5 +0.0120601 0.0343849 -0.00838478 0.781446 0.5 +0.0131 0.034428 -0.00821794 0.763867 0.5 +0.0140981 0.0343905 -0.0079847 0.735329 0.5 +0.0152294 0.0345961 -0.00794828 0.542375 0.5 +0.0163641 0.0348027 -0.00791773 0.400211 0.5 +0.0174939 0.0350076 -0.00788091 0.285626 0.5 +0.0184894 0.03497 -0.0076507 0 0 +-0.0721148 0.067315 0.0248191 0.659092 0.5 +-0.0464498 0.034849 -0.0185661 0.101686 0 +-0.0460733 0.0336746 -0.01741 0.298278 0.5 +-0.0450754 0.033637 -0.0171737 0.474123 0.5 +-0.0440757 0.0335994 -0.0169421 0.625852 0.5 +-0.0430319 0.0336432 -0.0167728 0.752372 0.5 +-0.04199 0.0336868 -0.0166047 0.762936 0.5 +-0.0409497 0.0337305 -0.016439 0.76643 0.5 +-0.0398611 0.0338561 -0.0163385 0.748843 0.5 +-0.03873 0.0340634 -0.0163036 0.741362 0.5 +-0.0375104 0.0344317 -0.0164034 0.677565 0.5 +-0.0361101 0.0351289 -0.0167641 0.619214 0.5 +-0.0346676 0.0359024 -0.017193 0.654319 0.5 +-0.0333156 0.0365169 -0.0174853 0.685573 0.5 +-0.0320031 0.0370471 -0.0177181 0.726969 0.5 +-0.0307415 0.0374976 -0.017878 0.796464 0.5 +-0.029563 0.0377844 -0.01791 0.853857 0.5 +-0.0283882 0.0380697 -0.0179434 0.884094 0.5 +-0.0272993 0.0381948 -0.0178418 0.917525 0.5 +-0.0262141 0.0383199 -0.0177378 0.924592 0.5 +-0.0251747 0.0383636 -0.0175696 0.935265 0.5 +-0.0241311 0.0384069 -0.0174035 0.930975 0.5 +-0.0231343 0.0383693 -0.0171708 0.93126 0.5 +-0.0220444 0.0384934 -0.0170721 0.911963 0.5 +-0.0210449 0.0384562 -0.0168371 0.936357 0.5 +-0.0200036 0.0384998 -0.0166705 0.914268 0.5 +-0.0189632 0.0385431 -0.0165058 0.926268 0.5 +-0.0179202 0.0385865 -0.0163394 0.924397 0.5 +-0.0169229 0.0385492 -0.0161043 0.936881 0.5 +-0.0158788 0.038593 -0.0159367 0.914389 0.5 +-0.0148381 0.0386367 -0.0157684 0.914611 0.5 +-0.0137942 0.0386802 -0.0156021 0.926026 0.5 +-0.0127937 0.0386426 -0.0153707 0.924302 0.5 +-0.0117542 0.0386862 -0.015202 0.92433 0.5 +-0.0107558 0.0386486 -0.0149703 0.925546 0.5 +-0.00971429 0.0386927 -0.0148008 0.911799 0.5 +-0.00867178 0.0387364 -0.0146344 0.921886 0.5 +-0.00762999 0.0387797 -0.0144679 0.932179 0.5 +-0.00658665 0.0388228 -0.0143041 0.913101 0.5 +-0.00554376 0.0388664 -0.0141367 0.941254 0.5 +-0.00449889 0.0389099 -0.0139692 0.940386 0.5 +-0.00350234 0.0388725 -0.0137373 0.922442 0.5 +-0.00241533 0.0389975 -0.0136337 0.912175 0.5 +-0.00141558 0.03896 -0.0133998 0.944017 0.5 +-0.000418875 0.0389219 -0.0131688 0.944304 0.5 +0.000577278 0.0388845 -0.0129362 0.936208 0.5 +0.00157845 0.0388465 -0.0127005 0.953129 0.5 +0.00252922 0.0387278 -0.0124032 0.953525 0.5 +0.00352818 0.0386899 -0.0121702 0.945732 0.5 +0.00447986 0.0385716 -0.0118677 0.971985 0.5 +0.00538842 0.0383711 -0.011506 0.959715 0.5 +0.00629906 0.0381702 -0.0111411 0.967403 0.5 +0.00716304 0.0378885 -0.010707 0.931539 0.5 +0.0078939 0.0373631 -0.01008 0.870071 0.5 +0.00853553 0.0366751 -0.00931803 0.743653 0.5 +0.00908719 0.0358267 -0.00842564 0.679434 0.5 +0.00964519 0.0349724 -0.00752839 0.718531 0.5 +0.0104643 0.0346107 -0.00703394 0.761172 0.5 +0.0113316 0.0343299 -0.00659923 0.775032 0.5 +0.012373 0.0343732 -0.00643255 0.761083 0.5 +0.0133691 0.0343357 -0.00620151 0.760981 0.5 +0.0144149 0.0343798 -0.00603429 0.724741 0.5 +0.0155008 0.0345049 -0.00593057 0.533828 0.5 +0.0166749 0.0347919 -0.00596505 0.389201 0.5 +0.0178069 0.0349979 -0.00592782 0.287714 0.5 +0.0188028 0.0349604 -0.00569856 0 0 +-0.0794975 0.113845 0.0467655 0.688818 0.5 +-0.0866192 0.111201 0.0383037 0.481048 0.454814 +-0.0473982 0.0343754 -0.0164682 0.121114 0.5 +-0.046755 0.0336866 -0.0157033 0.307635 0.5 +-0.0457551 0.0336493 -0.0154708 0.453339 0.5 +-0.0447123 0.0336927 -0.0153017 0.614262 0.5 +-0.0437579 0.0335748 -0.0150071 0.760028 0.5 +-0.0426699 0.0336999 -0.0149012 0.742851 0.5 +-0.0416277 0.0337441 -0.014735 0.753114 0.5 +-0.0405439 0.0338701 -0.0146326 0.705975 0.5 +-0.0393214 0.0342416 -0.0147308 0.666027 0.5 +-0.0379695 0.0348544 -0.0150276 0.602147 0.5 +-0.0364387 0.0357946 -0.0155844 0.543249 0.5 +-0.034906 0.0367338 -0.0161439 0.604521 0.5 +-0.0335515 0.0373466 -0.0164398 0.677158 0.5 +-0.0321536 0.0380399 -0.0168 0.757245 0.5 +-0.0309758 0.0383278 -0.0168292 0.850924 0.5 +-0.0298466 0.0385336 -0.0167929 0.849354 0.5 +-0.028759 0.0386585 -0.0166912 0.847883 0.5 +-0.027716 0.0387019 -0.0165247 0.858875 0.5 +-0.026722 0.0386646 -0.0162927 0.832003 0.5 +-0.0256788 0.0387085 -0.0161237 0.818338 0.5 +-0.0246803 0.0386712 -0.0158919 0.815979 0.5 +-0.0236376 0.0387148 -0.0157231 0.826257 0.5 +-0.0226373 0.0386776 -0.0154938 0.803115 0.5 +-0.0215973 0.0387212 -0.015323 0.801865 0.5 +-0.0206008 0.0386838 -0.0150911 0.800431 0.5 +-0.0195554 0.0387278 -0.0149268 0.780132 0.5 +-0.0185117 0.0387718 -0.0147573 0.781655 0.5 +-0.0174724 0.0388154 -0.0145918 0.811994 0.5 +-0.0164726 0.0387782 -0.0143554 0.802106 0.5 +-0.0154326 0.0388218 -0.0141873 0.790511 0.5 +-0.0143909 0.0388658 -0.0140202 0.78179 0.5 +-0.0133444 0.0389099 -0.0138542 0.804467 0.5 +-0.0123027 0.0389534 -0.0136872 0.814092 0.5 +-0.0113051 0.0389162 -0.0134542 0.814666 0.5 +-0.0102609 0.0389601 -0.0132864 0.804926 0.5 +-0.00921964 0.0390042 -0.0131222 0.785916 0.5 +-0.00813465 0.0391286 -0.0130168 0.806779 0.5 +-0.00718079 0.0390105 -0.0127195 0.795086 0.5 +-0.00609162 0.0391352 -0.0126175 0.793409 0.5 +-0.00509715 0.039098 -0.012386 0.791334 0.5 +-0.00405402 0.0391419 -0.01222 0.792715 0.5 +-0.00301248 0.0391855 -0.0120497 0.771109 0.5 +-0.00196639 0.0392296 -0.0118812 0.774667 0.5 +-0.000924151 0.039273 -0.0117161 0.816802 0.5 +2.76528e-05 0.0391548 -0.0114154 0.825639 0.5 +0.00107085 0.0391982 -0.0112505 0.839534 0.5 +0.00202549 0.0390793 -0.0109499 0.875743 0.5 +0.00297917 0.0389607 -0.010651 0.865235 0.5 +0.00397477 0.0389229 -0.0104191 0.86998 0.5 +0.00488488 0.0387234 -0.0100497 0.889837 0.5 +0.00583724 0.038604 -0.0097514 0.916177 0.5 +0.00669982 0.0383228 -0.00932299 0.889389 0.5 +0.00747563 0.0378784 -0.00876072 0.766725 0.5 +0.00793957 0.0368635 -0.0077325 0.579228 0.5 +0.00831626 0.0356874 -0.00657792 0.547606 0.5 +0.00882514 0.0347544 -0.00561715 0.671683 0.5 +0.0096904 0.0344726 -0.0051827 0.751566 0.5 +0.0106458 0.0343542 -0.00488721 0.758539 0.5 +0.0116887 0.0343979 -0.00472037 0.748269 0.5 +0.0126883 0.0343606 -0.00448368 0.748562 0.5 +0.0137309 0.0344041 -0.00431645 0.750493 0.5 +0.0147267 0.0343671 -0.00408399 0.731764 0.5 +0.0158163 0.0344928 -0.00398192 0.539751 0.5 +0.0169437 0.0346991 -0.00395051 0.377653 0.5 +0.0181231 0.0349865 -0.00397885 0.27526 0.5 +0.0191194 0.0349494 -0.00374623 0.143861 0.5 +0.0201589 0.0349933 -0.00358051 0 0 +-0.0483458 0.0338972 -0.0143683 0.145645 0.5 +-0.0473932 0.0337786 -0.0140697 0.303858 0.5 +-0.0464803 0.0335784 -0.0137021 0.460607 0.5 +-0.0454814 0.0335414 -0.0134702 0.597584 0.5 +-0.0444408 0.0335855 -0.0133031 0.758579 0.5 +-0.0433987 0.03363 -0.0131325 0.742667 0.5 +-0.042312 0.0337552 -0.0130352 0.752758 0.5 +-0.0412672 0.0338015 -0.0128657 0.698524 0.5 +-0.0399614 0.0343338 -0.0130933 0.582835 0.5 +-0.0384749 0.0351927 -0.0135871 0.509959 0.5 +-0.0368535 0.0362973 -0.0142764 0.498247 0.5 +-0.035233 0.0374002 -0.014964 0.584369 0.5 +-0.0338336 0.0380945 -0.0153271 0.719571 0.5 +-0.0326136 0.0384639 -0.0154224 0.751071 0.5 +-0.0314842 0.0386701 -0.0153847 0.798769 0.5 +-0.0304851 0.038633 -0.015152 0.792212 0.5 +-0.0294449 0.038677 -0.0149866 0.764528 0.5 +-0.0284012 0.038721 -0.0148192 0.758534 0.5 +-0.0274016 0.0386836 -0.0145853 0.766884 0.5 +-0.0264035 0.0386467 -0.0143525 0.758912 0.5 +-0.0253618 0.0386908 -0.0141849 0.748488 0.5 +-0.0243199 0.0387345 -0.0140132 0.748837 0.5 +-0.0233223 0.0386973 -0.0137829 0.767134 0.5 +-0.0223249 0.0386602 -0.0135496 0.759172 0.5 +-0.0212803 0.0387041 -0.0133833 0.759305 0.5 +-0.0202818 0.0386671 -0.01315 0.761261 0.5 +-0.0192403 0.0387115 -0.0129795 0.743513 0.5 +-0.0181528 0.0388364 -0.0128782 0.750961 0.5 +-0.0171592 0.0387994 -0.0126424 0.761602 0.5 +-0.0161127 0.0388433 -0.0124778 0.772027 0.5 +-0.0151158 0.0388065 -0.0122456 0.753208 0.5 +-0.0140304 0.0389318 -0.0121434 0.742493 0.5 +-0.0129858 0.0389757 -0.0119758 0.7497 0.5 +-0.0119878 0.0389387 -0.0117395 0.759701 0.5 +-0.0109443 0.0389825 -0.0115729 0.761944 0.5 +-0.00994817 0.0389455 -0.0113423 0.760018 0.5 +-0.00890819 0.0389895 -0.0111716 0.739335 0.5 +-0.00790609 0.0389527 -0.0109414 0.749764 0.5 +-0.00682217 0.0390777 -0.0108403 0.740934 0.5 +-0.00582403 0.0390405 -0.0106025 0.747065 0.5 +-0.00477881 0.0390844 -0.0104359 0.749657 0.5 +-0.00378208 0.0390472 -0.0102032 0.759043 0.5 +-0.00278761 0.0390101 -0.00997081 0.744345 0.5 +-0.00169837 0.0391357 -0.00987107 0.732224 0.5 +-0.000654571 0.0391799 -0.00969942 0.752614 0.5 +0.00038562 0.0392239 -0.00953586 0.764619 0.5 +0.00142887 0.0392678 -0.00936829 0.786816 0.5 +0.00242681 0.0392303 -0.00913048 0.838915 0.5 +0.00333349 0.0390305 -0.00876711 0.845161 0.5 +0.0043349 0.0389929 -0.00853324 0.824611 0.5 +0.00532997 0.0389553 -0.00830106 0.852237 0.5 +0.00615023 0.0385922 -0.00780619 0.776066 0.5 +0.00679264 0.0379024 -0.00704418 0.585005 0.5 +0.00707963 0.0365612 -0.00575515 0.456065 0.5 +0.00732004 0.0351406 -0.00439972 0.551836 0.5 +0.00800811 0.0345328 -0.00370443 0.726706 0.5 +0.00896308 0.0344141 -0.00340754 0.747735 0.5 +0.00991822 0.0342953 -0.00310719 0.756143 0.5 +0.0109143 0.034258 -0.00287102 0.744503 0.5 +0.0119118 0.0342207 -0.00263798 0.744957 0.5 +0.0129551 0.034265 -0.00247291 0.726555 0.5 +0.0139965 0.0343089 -0.00230394 0.726407 0.5 +0.01504 0.0343531 -0.00213727 0.724127 0.5 +0.0160414 0.0343167 -0.00190332 0.545118 0.5 +0.0171692 0.0345228 -0.00186568 0.382344 0.5 +0.0183024 0.0347298 -0.00182982 0.264714 0.5 +0.0193458 0.0347743 -0.00166328 0.278605 0.5 +0.0203856 0.0348183 -0.00149748 0.146288 0 +0.0214264 0.0348625 -0.00133145 0 0 +-0.0519769 0.0340995 -0.0134375 0 0 +-0.0511515 0.0337361 -0.0129379 0.146787 0 +-0.0501127 0.0337803 -0.0127711 0.137806 0.5 +-0.0491155 0.0337431 -0.0125383 0.290956 0.5 +-0.0482072 0.0335431 -0.012174 0.298612 0.5 +-0.0472097 0.0335059 -0.0119372 0.449069 0.5 +-0.0461631 0.0335506 -0.0117706 0.601737 0.5 +-0.0451218 0.0335948 -0.0116042 0.772585 0.5 +-0.0440813 0.0336392 -0.0114358 0.751945 0.5 +-0.0429934 0.0337652 -0.0113325 0.593884 0.5 +-0.0419504 0.0338103 -0.0111665 0.581009 0.5 +-0.0407326 0.0341812 -0.0112599 0.462745 0.5 +-0.0391998 0.0351247 -0.0118182 0.347097 0.5 +-0.0372246 0.0368821 -0.0130308 0.34989 0.5 +-0.0356475 0.0379034 -0.0136529 0.655412 0.5 +-0.0343818 0.038354 -0.0138166 0.733381 0.5 +-0.0332986 0.0384796 -0.0137148 0.749864 0.5 +-0.0322103 0.0386054 -0.0136114 0.743785 0.5 +-0.0311673 0.0386498 -0.0134468 0.747511 0.5 +-0.0301276 0.038694 -0.0132786 0.74561 0.5 +-0.0291276 0.0386567 -0.0130433 0.742955 0.5 +-0.0281279 0.03862 -0.0128123 0.742735 0.5 +-0.02709 0.0386639 -0.0126398 0.745898 0.5 +-0.0260906 0.0386266 -0.0124061 0.750571 0.5 +-0.0250932 0.0385898 -0.0121739 0.724838 0.5 +-0.0240513 0.0386342 -0.0120079 0.733288 0.5 +-0.0230054 0.0386784 -0.0118395 0.73714 0.5 +-0.0220085 0.0386415 -0.0116054 0.747754 0.5 +-0.0209665 0.0386858 -0.0114366 0.748109 0.5 +-0.0199243 0.0387302 -0.0112686 0.739981 0.5 +-0.0188821 0.0387745 -0.0111028 0.737809 0.5 +-0.0178849 0.0387376 -0.0108688 0.737777 0.5 +-0.0167991 0.0388632 -0.0107644 0.740421 0.5 +-0.0158011 0.0388262 -0.0105326 0.758898 0.5 +-0.0147562 0.0388704 -0.0103641 0.748193 0.5 +-0.0137593 0.0388335 -0.0101314 0.735864 0.5 +-0.0127163 0.038878 -0.00996632 0.73789 0.5 +-0.011676 0.0389222 -0.00979553 0.737945 0.5 +-0.010631 0.0389663 -0.00962591 0.7471 0.5 +-0.00963497 0.0389293 -0.00939263 0.746661 0.5 +-0.00858939 0.0389741 -0.00922854 0.741003 0.5 +-0.00754786 0.039018 -0.00905888 0.748744 0.5 +-0.00655213 0.0389811 -0.00882376 0.74641 0.5 +-0.00551112 0.0390255 -0.00865823 0.740134 0.5 +-0.00446475 0.03907 -0.00848801 0.751134 0.5 +-0.00342216 0.0391144 -0.00832149 0.764498 0.5 +-0.00238392 0.0391586 -0.00815532 0.76421 0.5 +-0.00138514 0.0391216 -0.00791905 0.752315 0.5 +-0.000296991 0.0392472 -0.00781836 0.741682 0.5 +0.000702847 0.0392103 -0.00758345 0.747437 0.5 +0.00174509 0.0392548 -0.00741822 0.739975 0.5 +0.0027861 0.0392982 -0.00725238 0.796695 0.5 +0.00369465 0.0390982 -0.00688719 0.808724 0.5 +0.00460237 0.0388981 -0.00652166 0.76201 0.5 +0.0054202 0.0385344 -0.0060218 0.633431 0.5 +0.00584239 0.0374362 -0.00493399 0.448355 0.5 +0.00590625 0.0356875 -0.00331654 0.448539 0.5 +0.00641806 0.0347537 -0.00236123 0.645688 0.5 +0.0072822 0.0344718 -0.00192729 0.726521 0.5 +0.00819303 0.0342719 -0.00156322 0.73886 0.5 +0.00918856 0.0342345 -0.00132638 0.596223 0.5 +0.0101881 0.0341976 -0.00109267 0.586666 0.5 +0.0112322 0.0342419 -0.000927635 0.595746 0.5 +0.0122273 0.0342048 -0.000691958 0.595227 0.5 +0.013224 0.0341678 -0.000459678 0.588944 0.5 +0.0142697 0.034212 -0.000289798 0.589095 0.5 +0.015268 0.0341755 -6.02454e-05 0.592719 0.5 +0.0163555 0.0343012 4.3653e-05 0.579133 0.5 +0.0173961 0.0343459 0.000212982 0.418124 0.5 +0.0185266 0.0345532 0.000246197 0.403273 0.5 +0.019656 0.0347604 0.000281692 0.268513 0.5 +0.0207021 0.0348049 0.000449352 0.274763 0.5 +0.0217437 0.0348491 0.000619009 0.135877 0.5 +0.0227875 0.0348957 0.00078699 0.123743 0.5 +0.0242713 0.035754 0.000294462 0.0909279 0.5 +0.0256228 0.0363687 8.49366e-07 0 0 +0.0267602 0.0365817 2.43485e-05 0 0 +0.0278638 0.0367181 0.000104301 0.0903166 0.5 +0.0289317 0.0369927 0.000264038 0.151306 0.5 +0.0302324 0.0374168 2.32521e-05 0.189294 0.5 +0.0314571 0.0378867 -6.50808e-05 0.444411 0.5 +0.0325428 0.0380502 1.57112e-05 0.287679 0.5 +0.0337414 0.0384723 -6.48206e-05 0.343427 0.5 +0.0348962 0.0387881 -4.46661e-05 0.363877 0.5 +0.0360448 0.0392022 -6.35907e-05 0.780389 0.5 +-0.0547852 0.0339346 -0.0120065 0.139887 0 +-0.0538286 0.0338166 -0.0117099 0.138713 0 +-0.0528343 0.0337802 -0.0114802 0.28026 0.5 +-0.0518373 0.0337424 -0.0112411 0.296897 0.5 +-0.0509699 0.0334609 -0.0108109 0.29672 0.5 +-0.0499299 0.0335056 -0.0106454 0.28381 0.5 +-0.0488841 0.0335499 -0.0104742 0.450769 0.5 +-0.0478863 0.033513 -0.0102384 0.466512 0.5 +-0.0468922 0.0334761 -0.010008 0.602221 0.5 +-0.0457572 0.0336839 -0.00997088 0.743884 0.5 +-0.0447583 0.0336472 -0.00973579 0.769139 0.5 +-0.0437169 0.0336921 -0.00956971 0.592252 0.5 +-0.0426307 0.0338188 -0.00946517 0.427565 0.5 +-0.0414552 0.0341096 -0.00949275 0.360633 0.5 +-0.0398827 0.035133 -0.0101165 0.242414 0.5 +-0.037907 0.0368934 -0.0113278 0.22755 0.5 +-0.0361046 0.0383233 -0.0122787 0.529257 0.5 +-0.0350636 0.0383682 -0.0121121 0.612395 0.5 +-0.0339799 0.0384942 -0.0120095 0.733982 0.5 +-0.032893 0.0386199 -0.0119052 0.750494 0.5 +-0.0318926 0.0385829 -0.0116716 0.752109 0.5 +-0.0308995 0.0385461 -0.0114399 0.739403 0.5 +-0.029898 0.0385093 -0.0112051 0.729332 0.5 +-0.0288553 0.0385536 -0.0110371 0.729343 0.5 +-0.0278584 0.0385169 -0.0108032 0.721705 0.5 +-0.0268181 0.0385613 -0.0106363 0.740459 0.5 +-0.0258632 0.0384431 -0.0103374 0.743669 0.5 +-0.0247746 0.0385687 -0.0102357 0.735545 0.5 +-0.0238211 0.0384511 -0.00993154 0.736592 0.5 +-0.022737 0.0385766 -0.00982941 0.727031 0.5 +-0.0216948 0.0386212 -0.00966204 0.734666 0.5 +-0.0206962 0.0385843 -0.00942784 0.732595 0.5 +-0.0196521 0.0386292 -0.00926197 0.716239 0.5 +-0.0186112 0.0386738 -0.00909396 0.736815 0.5 +-0.0175711 0.0387182 -0.00892429 0.72682 0.5 +-0.016526 0.0387631 -0.00875803 0.72695 0.5 +-0.0154839 0.0388074 -0.00858919 0.745217 0.5 +-0.0144887 0.0387707 -0.00835843 0.745259 0.5 +-0.0134464 0.0388153 -0.00818864 0.738983 0.5 +-0.0124032 0.0388598 -0.00801871 0.745417 0.5 +-0.0114057 0.038823 -0.00778731 0.735426 0.5 +-0.010362 0.0388675 -0.00761727 0.74607 0.5 +-0.00936568 0.0388306 -0.00738531 0.738959 0.5 +-0.00827497 0.0389568 -0.00728452 0.727843 0.5 +-0.00727995 0.0389199 -0.00704692 0.745766 0.5 +-0.00623443 0.0389648 -0.00688285 0.739482 0.5 +-0.00519498 0.0390091 -0.00671136 0.737822 0.5 +-0.00415439 0.0390536 -0.00654274 0.727577 0.5 +-0.00310937 0.0390986 -0.00637767 0.727716 0.5 +-0.00206815 0.039143 -0.00620903 0.747127 0.5 +-0.00106791 0.0391062 -0.00597311 0.738884 0.5 +-2.85469e-05 0.0391507 -0.00580542 0.746846 0.5 +0.000968412 0.0391138 -0.00557511 0.745388 0.5 +0.0020129 0.0391581 -0.00540617 0.723452 0.5 +0.00296745 0.0390391 -0.00510833 0.735608 0.5 +0.00382899 0.0387567 -0.00467455 0.666098 0.5 +0.00438439 0.037904 -0.00378653 0.502102 0.5 +0.00466861 0.0365644 -0.00250089 0.413486 0.5 +0.00482377 0.0349755 -0.00101746 0.544311 0.5 +0.00555777 0.034446 -0.000384949 0.698677 0.5 +0.00646739 0.0342464 -2.28584e-05 0.728152 0.5 +0.00742257 0.034128 0.000278711 0.588251 0.5 +0.00846054 0.0341727 0.000449307 0.60984 0.5 +0.00941817 0.0340541 0.000745803 0.479436 0.5 +0.0104604 0.0340987 0.00091581 0.47629 0.5 +0.0114556 0.0340617 0.001148 0.483826 0.5 +0.0125 0.0341066 0.00131673 0.484667 0.5 +0.0135389 0.0341511 0.00148413 0.486986 0.5 +0.0145856 0.0341976 0.00165401 0.501974 0.5 +0.01567 0.0343236 0.00175615 0.524574 0.5 +0.0167125 0.0343686 0.00192575 0.542046 0.5 +0.0177557 0.0344112 0.00209212 0.52981 0.5 +0.0187103 0.0342934 0.0023932 0.497848 0.5 +0.01975 0.0343373 0.00255688 0.448873 0.5 +0.0208395 0.034464 0.00266226 0.274072 0.5 +0.0219677 0.0346711 0.00269802 0.267745 0.5 +0.02301 0.0347163 0.00286296 0.250345 0.5 +0.0240528 0.0347605 0.00303304 0.226911 0.5 +0.0250957 0.0348061 0.00319961 0.119645 0.5 +0.0263615 0.0352587 0.00303932 0.105976 0.5 +0.0274937 0.0354669 0.00307886 0.200469 0.5 +0.0287584 0.0359201 0.00291435 0.188728 0.5 +0.0299331 0.0362092 0.00288494 0.191747 0.5 +0.0310235 0.0363382 0.00298341 0.187967 0.5 +0.0322412 0.0368006 0.00286913 0.201695 0.5 +0.0335361 0.0372674 0.00265432 0.261697 0.5 +0.0348792 0.0378052 0.00236551 0.331106 0.5 +0.0360001 0.0381146 0.00239588 0.614796 0.5 +0.0372047 0.0385834 0.00228863 0.425264 0.5 +0.0383914 0.0390949 0.00219016 0.436662 0.5 +-0.0712974 0.0669397 0.02531 0.637698 0.5 +-0.073604 0.148628 -0.0255988 0.299412 0.5 +-0.058681 0.0336414 -0.0106847 0.153046 0.5 +-0.0576816 0.0336048 -0.0104516 0.146944 0 +-0.0566419 0.0336495 -0.0102846 0.139644 0 +-0.0556017 0.0336949 -0.0101219 0.274477 0.5 +-0.0546426 0.0335759 -0.00981752 0.284194 0.5 +-0.053649 0.0335392 -0.00958395 0.287259 0.5 +-0.0526941 0.0334208 -0.00928256 0.435904 0.5 +-0.0516521 0.0334655 -0.0091126 0.455863 0.5 +-0.0506516 0.033429 -0.00887801 0.454259 0.5 +-0.0496093 0.0334738 -0.00871292 0.448959 0.5 +-0.0485683 0.0335187 -0.00854361 0.606842 0.5 +-0.0475261 0.0335634 -0.00837623 0.622993 0.5 +-0.0465291 0.0335268 -0.00814027 0.74098 0.5 +-0.0454406 0.0336534 -0.00804117 0.737158 0.5 +-0.0444005 0.0336982 -0.00787213 0.597923 0.5 +-0.0433556 0.0337438 -0.00770024 0.431884 0.5 +-0.0422261 0.0339521 -0.0076663 0.266235 0.5 +-0.0409612 0.0344092 -0.00782476 0.169268 0.5 +-0.0385893 0.036902 -0.00962928 0.134577 0.5 +-0.036834 0.0382539 -0.0105119 0.373602 0.5 +-0.0357494 0.0383801 -0.010405 0.450985 0.5 +-0.0347052 0.0384254 -0.0102399 0.584947 0.5 +-0.0336174 0.0385515 -0.0101375 0.590451 0.5 +-0.0326229 0.0385148 -0.00990233 0.75119 0.5 +-0.0316228 0.0384779 -0.00967109 0.762151 0.5 +-0.0306251 0.038441 -0.00943325 0.762241 0.5 +-0.0296256 0.0384042 -0.00919904 0.752556 0.5 +-0.0286315 0.0383676 -0.00896928 0.742111 0.5 +-0.0275879 0.0384125 -0.00879832 0.725311 0.5 +-0.0265472 0.0384572 -0.00862977 0.752513 0.5 +-0.0255449 0.0384207 -0.00839698 0.736476 0.5 +-0.0245074 0.0384654 -0.0082311 0.746923 0.5 +-0.0234618 0.0385102 -0.00806272 0.748687 0.5 +-0.0224668 0.0384735 -0.00782567 0.745032 0.5 +-0.0214231 0.0385184 -0.00765668 0.747575 0.5 +-0.0204228 0.0384821 -0.0074254 0.750987 0.5 +-0.0193391 0.0386082 -0.00732295 0.729493 0.5 +-0.0182966 0.038653 -0.00715499 0.744343 0.5 +-0.0172971 0.0386165 -0.00691824 0.726432 0.5 +-0.0162113 0.0387427 -0.00681752 0.729106 0.5 +-0.0152122 0.0387061 -0.0065833 0.753313 0.5 +-0.0141697 0.038751 -0.00641336 0.728244 0.5 +-0.0131274 0.0387957 -0.00624825 0.744775 0.5 +-0.0121322 0.038759 -0.00601251 0.744826 0.5 +-0.011089 0.038804 -0.005846 0.73859 0.5 +-0.0100479 0.0388486 -0.00567581 0.755821 0.5 +-0.00904748 0.0388121 -0.00544357 0.735649 0.5 +-0.00800869 0.0388567 -0.00527149 0.7269 0.5 +-0.00696577 0.0389018 -0.00510709 0.738855 0.5 +-0.00592104 0.0389465 -0.0049376 0.747791 0.5 +-0.00492317 0.0389099 -0.00470281 0.746306 0.5 +-0.0038834 0.0389548 -0.00453366 0.729149 0.5 +-0.00283875 0.0389996 -0.00436591 0.736451 0.5 +-0.00179731 0.0390446 -0.00419837 0.727392 0.5 +-0.000753868 0.0390895 -0.00403098 0.737592 0.5 +0.000289503 0.0391337 -0.00386275 0.74914 0.5 +0.00124143 0.0390154 -0.00356473 0.743037 0.5 +0.0021495 0.0388151 -0.00319944 0.707421 0.5 +0.00292266 0.0383702 -0.00263564 0.596139 0.5 +0.00334505 0.0372684 -0.00154693 0.450749 0.5 +0.00349851 0.0356817 -6.66678e-05 0.458565 0.5 +0.00396334 0.0346642 0.000955872 0.645421 0.5 +0.00478616 0.0342999 0.00145343 0.585873 0.5 +0.00569406 0.0341002 0.00181761 0.603731 0.5 +0.00669444 0.0340637 0.00205518 0.614877 0.5 +0.00773677 0.0341095 0.00222437 0.447792 0.5 +0.00886878 0.0343168 0.00225753 0.48562 0.5 +0.00991096 0.0343624 0.00242681 0.359639 0.5 +0.0109499 0.0344084 0.00259617 0.367128 0.5 +0.011996 0.0344545 0.00276628 0.365927 0.5 +0.0130382 0.0344991 0.00293188 0.359942 0.5 +0.0141672 0.0347073 0.00296826 0.342276 0.5 +0.0153865 0.0350801 0.00287497 0.335604 0.5 +0.016475 0.0352036 0.002978 0.38959 0.5 +0.0174262 0.0350846 0.00327627 0.396547 0.5 +0.0183334 0.0348857 0.00364336 0.393946 0.5 +0.0192462 0.0346832 0.00400718 0.386246 0.5 +0.020155 0.0344845 0.00437508 0.560762 0.5 +0.0211096 0.0343656 0.00467028 0.501928 0.5 +0.022195 0.0344915 0.00477409 0.450354 0.5 +0.0231948 0.0344554 0.00500709 0.421302 0.5 +0.0242808 0.034582 0.00510919 0.271691 0.5 +0.0253641 0.0347082 0.00521179 0.26298 0.5 +0.0264528 0.0348348 0.00531809 0.25408 0.5 +0.0275416 0.0349624 0.00541796 0.356316 0.5 +0.0287147 0.0352518 0.00538775 0.342223 0.5 +0.029758 0.0352966 0.00556049 0.346539 0.5 +0.0309311 0.0355864 0.0055308 0.306959 0.5 +0.0323006 0.0361518 0.00522301 0.256828 0.5 +0.0334512 0.0365216 0.00521608 0.283876 0.5 +0.0346158 0.0369318 0.00517598 0.291304 0.5 +0.0359007 0.0374161 0.00496434 0.294632 0.5 +0.0372544 0.0379189 0.00466817 0.293184 0.5 +0.0385114 0.038461 0.00447642 0.345904 0.5 +0.0398172 0.0390737 0.00420564 0.407268 0.5 +-0.0704829 0.066568 0.025804 0.625591 0.258423 +-0.0750442 0.11265 0.048722 0.371426 0.5 +-0.0623556 0.0337533 -0.00969501 0.153807 0 +-0.0614467 0.0335533 -0.00933279 0 0 +-0.0604012 0.0335984 -0.00916237 0.151213 0 +-0.0593595 0.0336431 -0.00899455 0.29825 0.5 +-0.0584052 0.033525 -0.00869675 0.300584 0.5 +-0.057411 0.0334884 -0.00846165 0.296973 0.5 +-0.0564565 0.03337 -0.00815977 0.291561 0.5 +-0.0554108 0.0334149 -0.00799207 0.442212 0.5 +-0.0544171 0.0333785 -0.00775516 0.444591 0.5 +-0.0533709 0.0334238 -0.0075905 0.452838 0.5 +-0.0523328 0.0334686 -0.00741897 0.604499 0.5 +-0.0513331 0.0334323 -0.00718543 0.615174 0.5 +-0.0502892 0.0334774 -0.00701976 0.616459 0.5 +-0.0492467 0.0335224 -0.00684693 0.607119 0.5 +-0.0482055 0.0335674 -0.00667883 0.75581 0.5 +-0.0472066 0.033531 -0.00644781 0.766392 0.5 +-0.0461681 0.033576 -0.00628041 0.748866 0.5 +-0.0451234 0.0336213 -0.00611106 0.597199 0.5 +-0.0440788 0.0336672 -0.00594116 0.437161 0.5 +-0.0429498 0.0338754 -0.00590515 0.27932 0.5 +-0.0418663 0.0340021 -0.00580283 0 0 +-0.0396703 0.036174 -0.00733977 0 0 +-0.0374695 0.0383458 -0.0088734 0.25558 0.5 +-0.0364291 0.0383909 -0.00870817 0.296131 0.5 +-0.0354329 0.0383545 -0.00847377 0.443175 0.5 +-0.0343438 0.0384811 -0.00836679 0.443761 0.5 +-0.033348 0.0384446 -0.00813352 0.602465 0.5 +-0.0323055 0.0384897 -0.00796454 0.605228 0.5 +-0.0313094 0.0384531 -0.00773361 0.774706 0.5 +-0.0303114 0.0384164 -0.0075003 0.774834 0.5 +-0.029312 0.0383797 -0.00726542 0.77486 0.5 +-0.0283123 0.0383433 -0.00703005 0.756442 0.5 +-0.0272728 0.0383881 -0.00686007 0.743177 0.5 +-0.0262755 0.0383516 -0.00662702 0.743178 0.5 +-0.0252324 0.0383969 -0.00646059 0.736912 0.5 +-0.0241881 0.038442 -0.0062907 0.735224 0.5 +-0.0231474 0.0384868 -0.00611954 0.744363 0.5 +-0.0221494 0.0384504 -0.005885 0.736562 0.5 +-0.0210631 0.0385773 -0.00578617 0.741413 0.5 +-0.0200635 0.0385408 -0.00554998 0.747019 0.5 +-0.0190244 0.0385858 -0.00538325 0.733606 0.5 +-0.0180225 0.0385494 -0.00514634 0.743676 0.5 +-0.0169827 0.0385945 -0.00497776 0.718901 0.5 +-0.0158939 0.0387206 -0.00487532 0.743189 0.5 +-0.0149445 0.0386028 -0.00457425 0.735034 0.5 +-0.0138558 0.0387296 -0.0044727 0.726087 0.5 +-0.012858 0.0386932 -0.00424091 0.744169 0.5 +-0.0118175 0.0387383 -0.00407256 0.737904 0.5 +-0.0107728 0.0387832 -0.00390135 0.744368 0.5 +-0.00977658 0.0387467 -0.00366788 0.752549 0.5 +-0.00877818 0.0387104 -0.00343461 0.739258 0.5 +-0.00769265 0.0388371 -0.00333188 0.729708 0.5 +-0.0066489 0.0388823 -0.00316153 0.738299 0.5 +-0.00560731 0.0389273 -0.00299633 0.75557 0.5 +-0.00460988 0.0388908 -0.00276124 0.737891 0.5 +-0.0035205 0.039017 -0.00265492 0.739867 0.5 +-0.00256734 0.0388997 -0.00235847 0.74714 0.5 +-0.0014827 0.0390261 -0.00225591 0.727044 0.5 +-0.000484271 0.038989 -0.00201961 0.744832 0.5 +0.000468869 0.0388702 -0.00172096 0.738069 0.5 +0.00133195 0.0385877 -0.00128958 0.67806 0.5 +0.00197552 0.0378956 -0.000532016 0.529897 0.5 +0.00221584 0.0364728 0.00081639 0.441385 0.5 +0.00250327 0.0351261 0.00210209 0.547092 0.5 +0.00314961 0.0344334 0.00286196 0.706513 0.5 +0.00401259 0.0341521 0.00329327 0.615151 0.5 +0.0049695 0.0340349 0.00359293 0.466077 0.5 +0.00605345 0.0341614 0.00369541 0.491204 0.5 +0.00709964 0.0342068 0.00386204 0.483293 0.5 +0.00822806 0.0344179 0.00390084 0.278726 0.5 +0.00958242 0.0350342 0.0036093 0.334864 0.5 +0.0106658 0.0351593 0.00371028 0 0 +0.0117524 0.0352863 0.00381322 0 0 +0.0128834 0.035495 0.00385056 0 0 +0.0140143 0.0357038 0.00388789 0 0 +0.0153228 0.0362397 0.00366285 0 0 +0.0162763 0.0361212 0.00396256 0 0 +0.0171854 0.035921 0.00432788 0 0 +0.0180082 0.0355585 0.00482766 0.199246 0.5 +0.0189142 0.0353585 0.00519133 0.398949 0.5 +0.0198267 0.035157 0.00555798 0.398255 0.5 +0.0207355 0.0349558 0.0059225 0.395945 0.5 +0.0216001 0.0346735 0.00635285 0.379547 0.5 +0.0224671 0.0343921 0.00678503 0.521628 0.5 +0.0234619 0.0343557 0.00702041 0.441138 0.5 +0.024593 0.0345639 0.00705834 0.414057 0.5 +0.0256371 0.0346096 0.00722464 0.411618 0.5 +0.0267233 0.0347365 0.00732658 0.408784 0.5 +0.0277666 0.0347822 0.00749516 0.539598 0.5 +0.0288939 0.0349903 0.0075309 0.525656 0.5 +0.0299365 0.0350356 0.00770058 0.515667 0.5 +0.0310703 0.0352449 0.00774073 0.472487 0.5 +0.0322458 0.0355363 0.00770856 0.440429 0.5 +0.0335552 0.036072 0.00748554 0.311204 0.5 +0.0348194 0.0365264 0.00732462 0.310292 0.5 +0.0360751 0.0370336 0.00715793 0.256653 0.5 +0.0374618 0.0376657 0.00680115 0.313121 0.5 +0.0387381 0.0381712 0.0065938 0.351128 0.5 +0.0400498 0.0387801 0.0063192 0.32279 0.5 +-0.0696571 0.0662079 0.0262916 0.599927 0.5 +-0.0688031 0.0659098 0.026726 0.572166 0.5 +-0.079479 0.1087 0.0330138 0.470044 0.5 +-0.0695902 0.113495 0.0492959 0.350201 0.361928 +-0.0908243 0.114994 0.023547 0.733146 0.5 +-0.0581295 0.0643065 0.0321224 0.456324 0.5 +-0.0641215 0.0336259 -0.00810847 0.160014 0.5 +-0.0630768 0.0336712 -0.00794186 0.299846 0.5 +-0.0620809 0.0336347 -0.00771095 0.300156 0.5 +-0.0610844 0.0335982 -0.00747508 0.298431 0.5 +-0.0601285 0.0334799 -0.007174 0.298248 0.5 +-0.0591321 0.0334434 -0.0069378 0.453205 0.5 +-0.0581339 0.0334069 -0.00670381 0.456602 0.5 +-0.0571361 0.0333705 -0.00647115 0.463164 0.5 +-0.056091 0.0334157 -0.00629765 0.45383 0.5 +-0.0550956 0.0333795 -0.00606735 0.610561 0.5 +-0.0540526 0.0334248 -0.00589512 0.606522 0.5 +-0.0530523 0.0333885 -0.00566149 0.614129 0.5 +-0.0520123 0.033434 -0.00549431 0.748042 0.5 +-0.0509261 0.0335608 -0.00538789 0.759903 0.5 +-0.049929 0.0335244 -0.00515732 0.777134 0.5 +-0.0489307 0.0334882 -0.00491951 0.766897 0.5 +-0.0478872 0.0335336 -0.00475407 0.757173 0.5 +-0.0468444 0.033579 -0.0045851 0.757211 0.5 +-0.0458025 0.0336244 -0.00441422 0.747969 0.5 +-0.0447604 0.0336698 -0.00424497 0.606831 0.5 +-0.043721 0.033715 -0.00407894 0.437127 0.5 +-0.0426327 0.0338426 -0.00397459 0.274238 0.5 +-0.0415043 0.0340515 -0.0039392 0 0 +-0.0380666 0.0385186 -0.00730796 0 0 +-0.0372457 0.0381548 -0.00680953 0.151834 0.5 +-0.0361586 0.0382819 -0.0067057 0.296324 0.5 +-0.0350693 0.0384092 -0.00660408 0.292015 0.5 +-0.0340295 0.0384544 -0.00643688 0.453504 0.5 +-0.0330305 0.0384181 -0.00620006 0.453734 0.5 +-0.0319894 0.0384633 -0.00603174 0.602378 0.5 +-0.0309909 0.0384268 -0.00579914 0.611245 0.5 +-0.0299919 0.0383903 -0.00556396 0.617929 0.5 +-0.0289964 0.0383539 -0.00532847 0.763748 0.5 +-0.0279974 0.0383174 -0.0050935 0.766881 0.5 +-0.026997 0.0382812 -0.00486026 0.767211 0.5 +-0.0259579 0.0383264 -0.00469023 0.74735 0.5 +-0.0249134 0.0383716 -0.00452352 0.742631 0.5 +-0.0239185 0.0383353 -0.00428996 0.73263 0.5 +-0.0228745 0.0383806 -0.00412065 0.743266 0.5 +-0.0218791 0.0383442 -0.00388387 0.727073 0.5 +-0.0207908 0.0384714 -0.00378381 0.72346 0.5 +-0.0197923 0.038435 -0.00354579 0.732939 0.5 +-0.0187529 0.0384803 -0.00337678 0.734999 0.5 +-0.0177093 0.0385258 -0.00321073 0.735049 0.5 +-0.0166687 0.038571 -0.00303984 0.722922 0.5 +-0.0156709 0.0385345 -0.00280448 0.73867 0.5 +-0.014626 0.03858 -0.00263697 0.712904 0.5 +-0.013583 0.0386256 -0.002471 0.713598 0.5 +-0.0125434 0.0386707 -0.00229897 0.725057 0.5 +-0.0114977 0.038716 -0.00213082 0.7336 0.5 +-0.0104996 0.03868 -0.00189881 0.743787 0.5 +-0.00945842 0.0387253 -0.00172767 0.748427 0.5 +-0.00841793 0.0387705 -0.00155909 0.737928 0.5 +-0.00737522 0.0388161 -0.00139235 0.72549 0.5 +-0.00633129 0.0388612 -0.00122239 0.731554 0.5 +-0.00533786 0.0388247 -0.000985585 0.739433 0.5 +-0.00433796 0.0387886 -0.000752538 0.716876 0.5 +-0.00324909 0.0389153 -0.000648163 0.733709 0.5 +-0.00225297 0.0388793 -0.00041461 0.726732 0.5 +-0.00121369 0.0389243 -0.000247464 0.741365 0.5 +-0.000258207 0.0388058 4.93079e-05 0.728422 0.5 +0.000471055 0.038278 0.000679374 0.631684 0.5 +0.000983167 0.0373381 0.00163376 0.502634 0.5 +0.00122549 0.0359125 0.00298025 0.493588 0.5 +0.00164525 0.0348132 0.00406568 0.655591 0.5 +0.00242535 0.0343652 0.00462872 0.780536 0.5 +0.00333114 0.0341656 0.00499397 0.62827 0.5 +0.0043328 0.0341303 0.00522853 0.442761 0.5 +0.00555045 0.034504 0.00513967 0.301354 0.5 +0.00659366 0.0345497 0.005308 0.351048 0.5 +0.00767659 0.0346834 0.0054103 0.277976 0.5 +0.00942926 0.0360304 0.00452751 0 0 +0.0187645 0.036357 0.00611202 0 0 +0.0195848 0.035993 0.00660837 0 0 +0.0204519 0.0357096 0.00704168 0.193893 0.5 +0.0212269 0.035264 0.00760182 0.37449 0.5 +0.0220013 0.0348195 0.00816409 0.372931 0.5 +0.0228246 0.0344564 0.00866393 0.382371 0.5 +0.0237757 0.0343382 0.00896337 0.522259 0.5 +0.0248201 0.0343822 0.00913252 0.624212 0.5 +0.0258636 0.0344283 0.00929921 0.555977 0.5 +0.0270364 0.0347184 0.00926922 0.562608 0.5 +0.0280342 0.0346822 0.009507 0.710731 0.5 +0.0291213 0.0348096 0.00960912 0.691599 0.5 +0.0302544 0.035019 0.00964843 0.673297 0.5 +0.0313837 0.0352278 0.00968341 0.66185 0.5 +0.0324709 0.0353558 0.0097886 0.48837 0.5 +0.0336899 0.0357287 0.00969367 0.444852 0.5 +0.0349983 0.0362655 0.0094693 0.409093 0.5 +0.03635 0.0368836 0.00917982 0.408127 0.5 +0.0376665 0.0374378 0.0089364 0.300353 0.5 +0.039051 0.0380783 0.00858362 0.244661 0.5 +0.0403512 0.038719 0.00830945 0.30694 0.5 +0.0418337 0.0395215 0.00781447 0.248144 0.5 +0.043074 0.0401669 0.0073914 0.313063 0.399249 +-0.0679412 0.0656184 0.0271584 0.545515 0.5 +-0.0768739 0.0698402 0.0216311 0.731972 0.5 +-0.0761006 0.0693618 0.0222283 0.726973 0.359025 +-0.0805782 0.112389 0.0458728 0.474926 0.5 +-0.0667502 0.0337781 -0.00695475 0.149925 0.5 +-0.0657521 0.033742 -0.00672308 0.293695 0.5 +-0.0647084 0.033787 -0.00655215 0.301492 0.5 +-0.0637555 0.0336685 -0.00625178 0.308515 0.5 +-0.0628446 0.0334683 -0.00588606 0.456775 0.5 +-0.0618946 0.0333508 -0.00558837 0.440823 0.5 +-0.0608506 0.0333964 -0.00541551 0.444064 0.5 +-0.0598089 0.0334419 -0.0052474 0.453491 0.5 +-0.0588111 0.0334057 -0.00501142 0.619775 0.5 +-0.0577717 0.0334512 -0.00484461 0.617296 0.5 +-0.0568164 0.0333332 -0.00454462 0.612996 0.5 +-0.0557727 0.0333786 -0.00437552 0.621894 0.5 +-0.0547761 0.0333427 -0.00414144 0.759139 0.5 +-0.0536876 0.0334698 -0.00403732 0.76829 0.5 +-0.0526923 0.0334338 -0.00380212 0.767454 0.5 +-0.0516478 0.0334795 -0.00363494 0.747459 0.5 +-0.0506075 0.0335251 -0.00346549 0.756493 0.5 +-0.0495662 0.0335706 -0.0032948 0.779152 0.5 +-0.0485652 0.0335345 -0.00306359 0.779162 0.5 +-0.0475247 0.0335798 -0.00289187 0.767834 0.5 +-0.0465281 0.033544 -0.0026564 0.759674 0.5 +-0.0454423 0.0336713 -0.00255197 0.749381 0.5 +-0.0444006 0.0337168 -0.00238543 0.612376 0.5 +-0.0434 0.0336807 -0.00215159 0.44661 0.5 +-0.0423597 0.0337264 -0.0019814 0.282742 0.5 +-0.041271 0.0338554 -0.00188008 0.133265 0.5 +-0.0399669 0.0343914 -0.00210399 0 0 +-0.0367962 0.0383714 -0.00507539 0 0 +-0.0357967 0.0383351 -0.00483874 0.150049 0.5 +-0.0347516 0.0383809 -0.00467189 0.293475 0.5 +-0.033711 0.0384262 -0.00450177 0.297463 0.5 +-0.0327132 0.0383899 -0.00426549 0.451206 0.5 +-0.0317158 0.0383538 -0.00403424 0.45308 0.5 +-0.0306743 0.0383989 -0.00386137 0.463048 0.5 +-0.0297217 0.0382812 -0.0035606 0.610156 0.5 +-0.0286807 0.0383267 -0.00339493 0.607422 0.5 +-0.0276376 0.0383723 -0.00322479 0.779172 0.5 +-0.0266388 0.038336 -0.00299264 0.776814 0.5 +-0.0256418 0.0382997 -0.00275652 0.766473 0.5 +-0.0246408 0.0382637 -0.00251941 0.766866 0.5 +-0.0236004 0.0383091 -0.00235181 0.746961 0.5 +-0.0225582 0.0383546 -0.00218286 0.755714 0.5 +-0.0215605 0.0383186 -0.00194746 0.748133 0.5 +-0.0205171 0.0383642 -0.00178242 0.745228 0.5 +-0.0194769 0.0384097 -0.0016118 0.736153 0.5 +-0.018436 0.0384553 -0.00144245 0.745102 0.5 +-0.0174383 0.038419 -0.00120725 0.74366 0.5 +-0.0163928 0.0384645 -0.00103951 0.740502 0.5 +-0.0153967 0.0384283 -0.000805549 0.744056 0.5 +-0.0143997 0.0383922 -0.000568703 0.738427 0.5 +-0.0133132 0.0385196 -0.000466347 0.714623 0.5 +-0.0122712 0.0385653 -0.000297189 0.714187 0.5 +-0.0112267 0.038611 -0.000125945 0.734972 0.5 +-0.010188 0.0386565 4.14997e-05 0.735039 0.5 +-0.00914442 0.0387021 0.000210725 0.733132 0.5 +-0.00814574 0.0386661 0.000442505 0.733192 0.5 +-0.00710159 0.0387114 0.00061319 0.73368 0.5 +-0.00610364 0.0386755 0.000846714 0.741983 0.5 +-0.00506288 0.0387211 0.00101779 0.737639 0.5 +-0.00402317 0.0387663 0.0011878 0.744769 0.5 +-0.00302574 0.0387303 0.00142158 0.723435 0.5 +-0.00193792 0.0388572 0.00152241 0.735956 0.5 +-0.00107263 0.0385746 0.00195199 0.725453 0.5 +-0.000342105 0.0380462 0.00257941 0.624771 0.5 +7.57538e-05 0.0369473 0.00366537 0.523338 0.5 +0.00040853 0.0356817 0.00488121 0.577176 0.5 +0.000965074 0.0348235 0.00577003 0.752953 0.5 +0.00178793 0.0344587 0.00626566 0.796819 0.5 +0.0026516 0.0341771 0.00670019 0.639287 0.5 +0.003605 0.0340592 0.00699628 0.465107 0.5 +0.00464616 0.034105 0.00716872 0.258125 0.5 +0.00621941 0.0351341 0.00654928 0 0 +0.00788239 0.0363273 0.00580236 0 0 +0.0208979 0.0359371 0.0087849 0 0 +0.021677 0.0354914 0.00935068 0.195712 0.5 +0.0225395 0.0352111 0.00978173 0.397851 0.5 +0.0234483 0.0350084 0.0101439 0.393025 0.5 +0.0243141 0.0347256 0.0105738 0.551481 0.5 +0.0251817 0.0344441 0.0110044 0.507469 0.5 +0.0262204 0.0344897 0.0111735 0.589922 0.5 +0.0273074 0.0346174 0.0112772 0.721002 0.5 +0.0283929 0.0347449 0.011384 0.722729 0.5 +0.0294825 0.0348729 0.0114843 0.713825 0.5 +0.0305676 0.0350004 0.0115893 0.714418 0.5 +0.0316541 0.0351286 0.0116939 0.695533 0.5 +0.0328304 0.0354201 0.0116657 0.677983 0.5 +0.0339626 0.0356317 0.0117064 0.623526 0.5 +0.0353133 0.0362497 0.0114171 0.551462 0.5 +0.036694 0.0368281 0.0111245 0.330294 0.408959 +0.0379749 0.0374097 0.0109015 0.283164 0.5 +0.0393737 0.0381589 0.0105128 0.224976 0.425821 +0.0409151 0.0390283 0.00994476 0.227765 0.5 +0.0422611 0.0397457 0.00959333 0.360441 0.5 +0.0436509 0.0403831 0.00924323 0.363818 0.5 +0.045017 0.0410596 0.00889517 0.37214 0.5 +-0.0796522 0.0704439 0.0152371 0.577899 0.5 +-0.080526 0.109264 0.0359357 0.503151 0.426569 +-0.0789279 0.0699144 0.0158521 0.565571 0.311867 +-0.0781672 0.0694403 0.0164131 0.561735 0.5 +-0.0774125 0.06897 0.0169693 0.756064 0.5 +-0.067477 0.0336926 -0.00520632 0.301842 0.5 +-0.066433 0.0337378 -0.00503676 0.300493 0.5 +-0.065521 0.0335373 -0.00466605 0.450339 0.5 +-0.0645229 0.0335011 -0.00443342 0.443116 0.5 +-0.0635243 0.0334646 -0.00419693 0.455735 0.5 +-0.0625734 0.0333471 -0.00389969 0.616134 0.5 +-0.0615294 0.0333928 -0.00373148 0.613213 0.5 +-0.0605348 0.0333568 -0.0034971 0.605677 0.5 +-0.0594457 0.0334843 -0.00338966 0.614106 0.5 +-0.0584915 0.0333664 -0.00308936 0.782452 0.5 +-0.0574937 0.0333307 -0.00285911 0.765479 0.5 +-0.0564079 0.0334582 -0.0027528 0.760998 0.5 +-0.0554099 0.0334223 -0.00251784 0.789377 0.5 +-0.0543692 0.0334679 -0.00234676 0.766843 0.5 +-0.0533713 0.0334322 -0.00211203 0.766928 0.5 +-0.0523266 0.033478 -0.00194369 0.769123 0.5 +-0.0512875 0.0335238 -0.00177633 0.757543 0.5 +-0.0502435 0.0335698 -0.00160666 0.75765 0.5 +-0.0492034 0.0336154 -0.00143623 0.776051 0.5 +-0.0482041 0.0335795 -0.00119996 0.767096 0.5 +-0.0471614 0.0336254 -0.00103179 0.769217 0.5 +-0.046121 0.0336712 -0.000864342 0.758168 0.5 +-0.0450772 0.0337168 -0.000691764 0.753621 0.5 +-0.044079 0.0336811 -0.000461832 0.609364 0.5 +-0.0430409 0.0337266 -0.000289053 0.446067 0.5 +-0.0419982 0.0337727 -0.000124238 0.29437 0.5 +-0.0410423 0.0336551 0.000178151 0.266658 0.5 +-0.0399106 0.033865 0.000215963 0.126783 0.5 +-0.0388285 0.0339925 0.000319116 0 0 +-0.0354812 0.0383051 -0.00290933 0 0 +-0.0344792 0.0382691 -0.00267158 0.146923 0.5 +-0.0334383 0.0383149 -0.00250434 0.296252 0.5 +-0.0323958 0.0383608 -0.00233468 0.293766 0.5 +-0.0313536 0.0384061 -0.00216621 0.306705 0.5 +-0.0304023 0.0382885 -0.00186367 0.469634 0.5 +-0.0293612 0.0383343 -0.00169706 0.454585 0.5 +-0.0283184 0.0383801 -0.00152859 0.602718 0.5 +-0.0273216 0.038344 -0.00129213 0.60937 0.5 +-0.0263218 0.038308 -0.00105771 0.764138 0.5 +-0.0252778 0.0383536 -0.00088571 0.767443 0.5 +-0.0242795 0.0383175 -0.000652306 0.777868 0.5 +-0.0232836 0.0382816 -0.000419572 0.767592 0.5 +-0.0222409 0.0383275 -0.000251248 0.755911 0.5 +-0.0212016 0.0383732 -7.87452e-05 0.755922 0.5 +-0.0202041 0.0383371 0.000156328 0.753895 0.5 +-0.0191613 0.038383 0.000326194 0.734114 0.5 +-0.0181173 0.0384288 0.000495732 0.754006 0.5 +-0.0171212 0.0383927 0.000728518 0.762157 0.5 +-0.0161203 0.0383572 0.000963241 0.745565 0.5 +-0.0150366 0.0384845 0.00106724 0.759653 0.5 +-0.0140374 0.0384483 0.0012996 0.767976 0.5 +-0.0130394 0.0384127 0.00153612 0.747684 0.5 +-0.0119534 0.0385403 0.00164014 0.725966 0.5 +-0.0109134 0.038586 0.0018115 0.743336 0.5 +-0.00991465 0.0385501 0.00204441 0.744111 0.5 +-0.00887371 0.0385959 0.0022117 0.743773 0.5 +-0.00782857 0.0386419 0.00238313 0.734679 0.5 +-0.0067878 0.0386876 0.00254936 0.75183 0.5 +-0.00578939 0.0386518 0.00278679 0.735508 0.5 +-0.00470317 0.038779 0.00289117 0.745149 0.5 +-0.0037488 0.0386615 0.00318783 0.760178 0.5 +-0.00270805 0.0387067 0.00335713 0.742849 0.5 +-0.00180254 0.0385071 0.00372255 0.733391 0.5 +-0.00115829 0.0378141 0.0044798 0.623426 0.5 +-0.000693426 0.0367942 0.0054988 0.57708 0.5 +-0.000271447 0.0356914 0.00658166 0.658939 0.5 +0.000373363 0.0349968 0.00734292 0.75819 0.5 +0.00110225 0.0344701 0.00796988 0.801881 0.5 +0.00201718 0.0342688 0.0083365 0.649036 0.5 +0.00296971 0.0341513 0.00863676 0.476405 0.5 +0.00396755 0.0341147 0.00886829 0.323397 0.5 +0.0049172 0.0339971 0.00916661 0 0 +0.0222999 0.0360441 0.0108303 0.192505 0.5 +0.0230318 0.0355156 0.0114574 0.354354 0.5 +0.0237641 0.0349876 0.0120857 0.360666 0.5 +0.0246298 0.0347052 0.0125163 0.550122 0.5 +0.0255827 0.034587 0.0128177 0.67805 0.5 +0.0265802 0.0345508 0.0130494 0.777963 0.5 +0.0276661 0.034679 0.0131567 0.744671 0.5 +0.0287557 0.0348074 0.0132587 0.734442 0.5 +0.0298844 0.0350171 0.0132987 0.734678 0.5 +0.0309714 0.035145 0.0133989 0.735052 0.5 +0.0321473 0.0354374 0.0133726 0.719837 0.5 +0.0333197 0.0357288 0.0133458 0.727544 0.5 +0.0345426 0.0361041 0.0132537 0.685356 0.5 +0.0357625 0.0364791 0.0131618 0.635106 0.5 +0.0371127 0.037099 0.0128773 0.563499 0.5 +0.0385505 0.0378908 0.0124577 0.330402 0.5 +0.0398565 0.0384519 0.0122163 0.218926 0.425192 +0.0413373 0.0392631 0.0117259 0.261462 0.5 +0.0427163 0.0399244 0.0113768 0.345857 0.5 +0.0440394 0.0405103 0.0110966 0.338498 0.5 +0.0454742 0.0412367 0.0106737 0.30411 0.254234 +-0.0670784 0.0653289 0.0275882 0.511682 0.369115 +-0.0662043 0.065068 0.0280019 0.407738 0.328506 +-0.0899789 0.116378 0.0441376 0.632631 0.5 +-0.0829702 0.111001 0.0428895 0.555395 0.5 +-0.0653246 0.0648097 0.0284194 0.508358 0.5 +-0.0697867 0.034416 -0.00452426 0.143466 0 +-0.0690565 0.0338884 -0.00389811 0.307492 0.5 +-0.0681462 0.033688 -0.00353141 0.465623 0.5 +-0.0671901 0.0335697 -0.00322908 0.451072 0.5 +-0.0661933 0.0335338 -0.00299624 0.452934 0.5 +-0.0651961 0.0334974 -0.00275965 0.622696 0.5 +-0.0642448 0.0333797 -0.00245942 0.623498 0.5 +-0.063243 0.0333437 -0.00222576 0.61939 0.5 +-0.0622051 0.0333895 -0.00205752 0.757078 0.5 +-0.0611633 0.0334354 -0.00188959 0.778072 0.5 +-0.0601615 0.0333995 -0.00165181 0.768004 0.5 +-0.0591204 0.0334451 -0.00148219 0.773623 0.5 +-0.0581251 0.0334091 -0.00125013 0.786861 0.5 +-0.0571262 0.0333733 -0.00101401 0.760838 0.5 +-0.0560415 0.0335011 -0.000906542 0.76994 0.5 +-0.0550408 0.0334649 -0.000671931 0.786869 0.5 +-0.0540428 0.0334293 -0.000440359 0.769074 0.5 +-0.0529595 0.0335568 -0.000338033 0.769082 0.5 +-0.0519598 0.0335208 -0.000101812 0.764684 0.5 +-0.0509168 0.0335668 6.7085e-05 0.742717 0.5 +-0.0498753 0.0336124 0.000239655 0.743661 0.5 +-0.0488762 0.0335766 0.000473902 0.76194 0.5 +-0.0478366 0.0336224 0.000642732 0.742765 0.5 +-0.0467966 0.0336683 0.000813328 0.743692 0.5 +-0.0457991 0.0336321 0.00104877 0.749406 0.5 +-0.0447526 0.0336781 0.00121434 0.735308 0.5 +-0.0437553 0.033642 0.00144997 0.587998 0.5 +-0.042758 0.0336059 0.00168497 0.441582 0.5 +-0.0417615 0.03357 0.00191851 0.447365 0.5 +-0.0407181 0.0336157 0.00208844 0.288307 0.5 +-0.0397192 0.03358 0.00232461 0.283385 0.5 +-0.0386792 0.0336259 0.00249375 0.146173 0.5 +-0.0376403 0.0336717 0.00266115 0 0 +-0.0341168 0.0383136 -0.000825234 0 0 +-0.0331634 0.0381954 -0.000525199 0 0 +-0.0320742 0.0383234 -0.000421092 0.143839 0.5 +-0.0310333 0.0383692 -0.000250742 0.299466 0.5 +-0.030037 0.0383331 -1.37538e-05 0.301296 0.5 +-0.0290376 0.038297 0.000217512 0.456211 0.5 +-0.0280399 0.038261 0.000453129 0.449918 0.5 +-0.0269995 0.0383068 0.000625566 0.601453 0.5 +-0.0260008 0.0382709 0.000860974 0.603442 0.5 +-0.0249563 0.0383168 0.00102848 0.754216 0.5 +-0.0239168 0.0383626 0.00119722 0.76595 0.5 +-0.0229162 0.0383263 0.00143492 0.773581 0.5 +-0.0219183 0.0382906 0.00166561 0.752074 0.5 +-0.0208788 0.0383361 0.00183886 0.749414 0.5 +-0.0198829 0.0383003 0.00206982 0.743426 0.5 +-0.0188389 0.0383463 0.00224079 0.743371 0.5 +-0.017795 0.038392 0.00241319 0.752154 0.5 +-0.0167976 0.0383562 0.00264497 0.764934 0.5 +-0.0157589 0.038402 0.00281447 0.745592 0.5 +-0.0147126 0.0384481 0.00298688 0.743504 0.5 +-0.0136741 0.0384938 0.00315386 0.766064 0.5 +-0.0126734 0.0384579 0.00339052 0.755054 0.5 +-0.0116325 0.0385039 0.00355749 0.732374 0.5 +-0.0105902 0.0385498 0.00372703 0.74352 0.5 +-0.00955085 0.0385956 0.00389466 0.751965 0.5 +-0.0085531 0.0385596 0.00412906 0.743611 0.5 +-0.00750789 0.0386054 0.00429878 0.752168 0.5 +-0.00651 0.0385696 0.00453582 0.751969 0.5 +-0.00546749 0.0386155 0.00470576 0.733623 0.5 +-0.00442631 0.0386612 0.00487339 0.747585 0.5 +-0.00342977 0.0386245 0.00511046 0.758455 0.5 +-0.00252234 0.038424 0.00547409 0.736516 0.5 +-0.00188052 0.0377314 0.00623396 0.666167 0.5 +-0.00137013 0.0367929 0.00718583 0.636923 0.5 +-0.00085919 0.0358547 0.00813469 0.693124 0.5 +-0.000261091 0.0350803 0.00896105 0.779853 0.5 +0.000514101 0.0346343 0.00952105 0.841429 0.5 +0.00137957 0.0343513 0.00995357 0.832789 0.5 +0.00228893 0.0341509 0.0103163 0.644619 0.5 +0.00333358 0.0341967 0.0104872 0.443141 0.5 +0.0044664 0.0344032 0.010526 0.322834 0.5 +0.00514996 0.0337963 0.0112147 0 0 +0.0226207 0.0360088 0.0127544 0.180494 0.5 +0.0233968 0.0355618 0.0133136 0.359895 0.5 +0.0241747 0.0351145 0.0138772 0.517551 0.5 +0.0249955 0.0347512 0.0143719 0.639642 0.5 +0.0259946 0.0347155 0.014606 0.785811 0.5 +0.0270369 0.0347621 0.0147774 0.776823 0.5 +0.0281202 0.0348895 0.0148787 0.765565 0.5 +0.0292084 0.0350186 0.0149853 0.744825 0.5 +0.0303366 0.0352283 0.0150252 0.745854 0.5 +0.0315592 0.035603 0.0149292 0.693133 0.5 +0.0327757 0.035977 0.0148418 0.711649 0.5 +0.0339966 0.0363512 0.0147468 0.709216 0.5 +0.0352163 0.0367258 0.0146563 0.709079 0.5 +0.0364352 0.0371002 0.0145635 0.646509 0.5 +0.037787 0.0377202 0.0142753 0.590982 0.5 +0.0390959 0.0382591 0.0140545 0.598749 0.5 +0.0404351 0.0389029 0.0137659 0.256477 0.43718 +0.0418277 0.0395362 0.0134182 0.334532 0.5 +0.0432176 0.0401728 0.0130684 0.341205 0.5 +0.0445354 0.0407636 0.0127885 0.294679 0.5 +0.0459347 0.0413813 0.0124396 0.216954 0.5 +0.0473913 0.0422357 0.0119475 0.171402 0.312394 +-0.0766217 0.068534 0.0175211 0.610061 0.332696 +-0.0705699 0.152776 -0.0468148 0.233377 0.30868 +-0.085825 0.114595 0.0464925 0.45819 0.464529 +-0.0640765 0.0658063 0.0313225 0.42131 0.5 +-0.0705055 0.0343308 -0.00278598 0.154692 0 +-0.0696847 0.0339658 -0.0022881 0.310168 0.5 +-0.0688616 0.033602 -0.00179476 0.467225 0.5 +-0.0678631 0.0335656 -0.00155997 0.611441 0.5 +-0.06691 0.033448 -0.00125687 0.607524 0.5 +-0.0658667 0.0334936 -0.00108817 0.600164 0.5 +-0.0648702 0.0334576 -0.000853911 0.770798 0.5 +-0.0638759 0.0334217 -0.000619218 0.783914 0.5 +-0.0628753 0.0333858 -0.000385113 0.766461 0.5 +-0.0618325 0.0334319 -0.000212632 0.757054 0.5 +-0.0607902 0.0334775 -4.36679e-05 0.775517 0.5 +-0.0597937 0.0334415 0.000190139 0.775526 0.5 +-0.0587952 0.0334058 0.000425547 0.77777 0.5 +-0.0577571 0.0334518 0.000595927 0.781884 0.5 +-0.0567145 0.0334976 0.000765085 0.770772 0.5 +-0.0556704 0.0335434 0.000932366 0.775592 0.5 +-0.0546754 0.0335075 0.00116676 0.777983 0.5 +-0.0536324 0.0335534 0.00133593 0.768892 0.5 +-0.0526315 0.0335173 0.00157493 0.784044 0.5 +-0.0516371 0.0334814 0.00180973 0.773843 0.5 +-0.0506374 0.0334455 0.00204379 0.743287 0.5 +-0.0495533 0.0335732 0.00214603 0.73069 0.5 +-0.0485565 0.0335372 0.00238031 0.751621 0.5 +-0.0475589 0.0335011 0.00261705 0.743165 0.5 +-0.0464698 0.0336288 0.00272222 0.73964 0.5 +-0.0455143 0.0335109 0.00302189 0.75775 0.5 +-0.0445167 0.0334752 0.00325528 0.749713 0.5 +-0.0434764 0.0335212 0.0034233 0.594103 0.5 +-0.0424368 0.033567 0.00359466 0.611759 0.5 +-0.0414388 0.033531 0.00382893 0.459306 0.5 +-0.0403969 0.033577 0.00400031 0.453221 0.5 +-0.0393536 0.0336231 0.00416845 0.303028 0.5 +-0.0383106 0.0336688 0.00433881 0.305223 0.5 +-0.0373144 0.033633 0.00457247 0.1529 0.5 +-0.0362745 0.033679 0.00474125 0 0 +-0.0352323 0.0337248 0.00491425 0.152905 0 +-0.0317989 0.0382037 0.00155838 0 0 +-0.0307981 0.0381678 0.00179566 0.14181 0.5 +-0.0297129 0.0382953 0.00190139 0.292175 0.5 +-0.0287124 0.0382592 0.00213562 0.303441 0.5 +-0.0277181 0.0382234 0.00237012 0.444134 0.5 +-0.026674 0.0382695 0.00254021 0.446329 0.5 +-0.0256326 0.0383152 0.00270994 0.601626 0.5 +-0.0246346 0.0382795 0.00294393 0.740868 0.5 +-0.0235934 0.0383252 0.00311252 0.751968 0.5 +-0.0225936 0.0382891 0.00334965 0.770533 0.5 +-0.021599 0.0382532 0.00358087 0.760057 0.5 +-0.0206011 0.0382174 0.00381729 0.74523 0.5 +-0.0195138 0.038345 0.00392275 0.754344 0.5 +-0.0185178 0.0383092 0.00415679 0.740959 0.5 +-0.0174725 0.0383553 0.00432532 0.743298 0.5 +-0.0164306 0.0384009 0.00449856 0.754158 0.5 +-0.0154366 0.0383652 0.00473292 0.754182 0.5 +-0.0143913 0.0384112 0.00490303 0.74338 0.5 +-0.0133509 0.0384568 0.00507202 0.749405 0.5 +-0.0123514 0.0384213 0.00530714 0.743403 0.5 +-0.0113093 0.0384672 0.00547553 0.745306 0.5 +-0.0102702 0.0385128 0.00564525 0.74952 0.5 +-0.00927372 0.0384768 0.00588152 0.730644 0.5 +-0.0081869 0.0386049 0.00598379 0.73345 0.5 +-0.00718543 0.0385691 0.00621806 0.752031 0.5 +-0.00614443 0.0386147 0.00639011 0.751887 0.5 +-0.00514848 0.0385788 0.00662082 0.749598 0.5 +-0.00415159 0.0385426 0.00685716 0.761967 0.5 +-0.00319773 0.0384234 0.00715593 0.768087 0.5 +-0.00251219 0.0378133 0.00785027 0.720221 0.5 +-0.00195749 0.0369571 0.00873581 0.710621 0.5 +-0.00140393 0.0361018 0.00962515 0.748753 0.5 +-0.000757843 0.0354065 0.0103826 0.817483 0.5 +-2.43522e-05 0.0348774 0.0110061 0.850211 0.5 +0.000795729 0.0345137 0.0115011 0.854907 0.5 +0.00170313 0.0343139 0.0118694 0.676527 0.5 +0.00261537 0.0341134 0.0122343 0.488557 0.5 +0.00356645 0.0339958 0.0125338 0.308238 0.5 +0.00465347 0.0341223 0.0126365 0.331903 0.5 +0.00542741 0.0336773 0.0131964 0 0 +0.0222529 0.0365833 0.0139797 0.159934 0.5 +0.0228959 0.0358901 0.0147404 0.30943 0.5 +0.0235861 0.0352777 0.0154316 0.442747 0.5 +0.0242732 0.0346695 0.0161217 0.629965 0.5 +0.0252705 0.0346338 0.0163557 0.763858 0.5 +0.0263999 0.0348437 0.0163952 0.755145 0.5 +0.0274881 0.0349726 0.0165028 0.766099 0.5 +0.0285746 0.0351013 0.0166057 0.743064 0.5 +0.0297936 0.0354746 0.0165125 0.765973 0.5 +0.0308793 0.0356029 0.0166157 0.73359 0.5 +0.0321446 0.0360609 0.0164637 0.679088 0.5 +0.0333636 0.0364347 0.0163708 0.702567 0.5 +0.0345811 0.0368089 0.0162808 0.690422 0.5 +0.0358003 0.0371828 0.0161878 0.691378 0.5 +0.0370638 0.0376395 0.0160314 0.627425 0.5 +0.0383745 0.038179 0.01581 0.640756 0.5 +0.0395927 0.0385536 0.0157178 0.619362 0.5 +0.040988 0.0392554 0.0153655 0.565759 0.5 +0.0423629 0.0398964 0.0150374 0.572592 0.5 +0.0436977 0.0404602 0.0147575 0.568114 0.5 +0.0450791 0.0411084 0.0144119 0.451354 0.5 +0.0465682 0.041911 0.0139236 0.241537 0.320062 +0.0479919 0.0426572 0.0134999 0.232154 0.5 +-0.0643967 0.0646443 0.0287462 0.414637 0.472164 +-0.075813 0.0681115 0.0180714 0.635598 0.5 +-0.0670537 0.071446 0.0363402 0.506097 0.482249 +-0.0829949 0.115554 0.048125 0.628254 0.5 +-0.0708767 0.0346286 -0.00100073 0.141299 0.229414 +-0.0703883 0.0339052 -0.000577152 0.314883 0.5 +-0.069479 0.0337046 -0.000209101 0.488431 0.5 +-0.0685663 0.0335043 0.000153325 0.639535 0.5 +-0.0675754 0.0334584 0.000400215 0.793089 0.5 +-0.0665808 0.0334125 0.000644743 0.783476 0.5 +-0.0655859 0.0333717 0.000880867 0.769568 0.5 +-0.0645473 0.0334176 0.0010517 0.76882 0.5 +-0.0635465 0.0333817 0.00128463 0.779677 0.5 +-0.0625074 0.0334277 0.00145514 0.768545 0.5 +-0.0614627 0.0334736 0.00162861 0.766483 0.5 +-0.0604675 0.0334377 0.00185915 0.775408 0.5 +-0.0594246 0.0334838 0.00203125 0.768554 0.5 +-0.0583832 0.0335298 0.00219999 0.76875 0.5 +-0.0573422 0.0335757 0.00237022 0.767158 0.5 +-0.0563459 0.0335397 0.00260276 0.772692 0.5 +-0.055347 0.0335038 0.00284205 0.763885 0.5 +-0.0543042 0.0335497 0.00301212 0.755145 0.5 +-0.0532618 0.0335957 0.00317772 0.765094 0.5 +-0.0522651 0.0335597 0.0034159 0.783546 0.5 +-0.0512658 0.0335234 0.00365116 0.795419 0.5 +-0.050311 0.033406 0.00395206 0.77876 0.5 +-0.0492702 0.0334521 0.00412227 0.59633 0.5 +-0.0481836 0.0335793 0.00422402 0.61322 0.5 +-0.0472308 0.0334623 0.00452598 0.618173 0.5 +-0.0461887 0.0335082 0.00469546 0.635858 0.5 +-0.0451488 0.0335546 0.00486717 0.646804 0.5 +-0.0441515 0.0335185 0.00510187 0.657711 0.5 +-0.0431097 0.0335646 0.0052718 0.639158 0.5 +-0.0420673 0.0336103 0.00544111 0.654545 0.5 +-0.0410706 0.0335739 0.0056728 0.645666 0.5 +-0.0400289 0.0336199 0.00584373 0.469016 0.5 +-0.0389872 0.0336658 0.00601497 0.458758 0.5 +-0.0379874 0.0336299 0.0062497 0.305317 0.5 +-0.0369476 0.033676 0.00641963 0.299122 0.5 +-0.0359021 0.0337218 0.00658675 0.304964 0.5 +-0.0349082 0.033686 0.00682403 0.151116 0.5 +-0.0338224 0.0338142 0.00692539 0 0 +-0.0304784 0.0381297 0.00370653 0 0 +-0.0294344 0.0381755 0.00387704 0.147199 0.5 +-0.0284374 0.0381394 0.00411543 0.293737 0.5 +-0.0273926 0.0381858 0.00428469 0.289172 0.5 +-0.026353 0.0382316 0.0044532 0.444677 0.5 +-0.0253533 0.0381958 0.00468802 0.599765 0.5 +-0.0243119 0.0382419 0.00485642 0.729962 0.5 +-0.023273 0.0382876 0.00502865 0.739113 0.5 +-0.0222759 0.0382517 0.00526325 0.759933 0.5 +-0.0212772 0.0382158 0.00549847 0.75627 0.5 +-0.0201912 0.0383436 0.00560257 0.754376 0.5 +-0.0192343 0.038226 0.00590432 0.759992 0.5 +-0.018196 0.038272 0.00607299 0.747202 0.5 +-0.0171544 0.0383178 0.00624466 0.755179 0.5 +-0.016108 0.038364 0.00641286 0.741193 0.5 +-0.0150683 0.0384098 0.0065829 0.744273 0.5 +-0.0140732 0.0383739 0.00681638 0.760093 0.5 +-0.013074 0.0383381 0.00704947 0.743357 0.5 +-0.0119886 0.038466 0.00715809 0.736167 0.5 +-0.0109445 0.0385116 0.00732721 0.760192 0.5 +-0.00999143 0.0383941 0.00762464 0.760148 0.5 +-0.00895133 0.0384401 0.00779513 0.73511 0.5 +-0.00790814 0.0384861 0.0079669 0.741371 0.5 +-0.00686818 0.0385321 0.0081342 0.741026 0.5 +-0.00587038 0.038496 0.0083708 0.749459 0.5 +-0.00482937 0.038542 0.00854039 0.757699 0.5 +-0.00387451 0.0384228 0.00884205 0.787087 0.5 +-0.00309828 0.0379762 0.00940157 0.806593 0.5 +-0.00241231 0.037367 0.0100902 0.783963 0.5 +-0.00181158 0.0365903 0.0109133 0.768155 0.5 +-0.00121244 0.0358159 0.011737 0.805938 0.5 +-0.000525817 0.0352062 0.0124275 0.848157 0.5 +0.000249699 0.0347599 0.0129869 0.868877 0.5 +0.00111873 0.0344764 0.0134191 0.687379 0.5 +0.0020291 0.0342762 0.0137843 0.675196 0.5 +0.00297843 0.0341587 0.014086 0.502037 0.5 +0.00393342 0.0340406 0.014385 0.327291 0.5 +0.00497409 0.0340864 0.0145521 0.336322 0.5 +0.00592655 0.0339685 0.0148513 0 0 +0.0214461 0.036336 0.0158614 0.145694 0.5 +0.0222628 0.0359732 0.0163557 0.28888 0.5 +0.0228628 0.0351973 0.0171792 0.401036 0.5 +0.0236407 0.0347514 0.0177381 0.619176 0.5 +0.0246827 0.0347978 0.0179097 0.787563 0.5 +0.0257679 0.0349257 0.0180133 0.766618 0.5 +0.0268545 0.0350543 0.018119 0.766365 0.5 +0.0279852 0.0352646 0.0181572 0.740245 0.5 +0.0292045 0.0356392 0.0180684 0.738626 0.5 +0.0303343 0.0358493 0.0181065 0.762661 0.5 +0.0315086 0.0361416 0.0180806 0.711861 0.5 +0.032773 0.036599 0.0179277 0.70177 0.5 +0.0339472 0.0368914 0.0179028 0.704183 0.5 +0.0352142 0.037348 0.0177424 0.692333 0.5 +0.0363875 0.037641 0.0177175 0.679472 0.5 +0.0376971 0.0381803 0.0174952 0.633535 0.5 +0.0390033 0.0387188 0.0172773 0.65489 0.5 +0.040265 0.0391745 0.017119 0.633427 0.5 +0.041574 0.0397142 0.0168995 0.613962 0.5 +0.0428913 0.0402636 0.016655 0.583144 0.5 +0.0443703 0.0410834 0.0161644 0.592739 0.5 +0.0455972 0.0415054 0.0160287 0.304359 0.5 +0.0470911 0.0422949 0.0155431 0.272871 0.379929 +-0.0634886 0.064446 0.0291098 0.685522 0.5 +-0.0625249 0.0642497 0.029495 0.453081 0.467093 +-0.0867806 0.115997 0.0469199 0.524364 0.471199 +-0.0554146 0.0649279 0.0339175 0.495432 0.392471 +-0.0562473 0.0708294 0.0392023 0.685624 0.5 +-0.0717761 0.0344583 0.000444464 0.165782 0.5 +-0.0709897 0.0340252 0.000991695 0.334106 0.5 +-0.0701237 0.0337481 0.00141754 0.492431 0.5 +-0.0691689 0.0336248 0.00172074 0.652991 0.5 +-0.0681764 0.0335792 0.00196619 0.811149 0.5 +-0.0671848 0.0335335 0.00220964 0.800613 0.5 +-0.0661916 0.0334877 0.00245273 0.802633 0.5 +-0.0652015 0.0334423 0.00269659 0.792382 0.5 +-0.0641668 0.0334738 0.00287677 0.781425 0.5 +-0.0631328 0.0335051 0.0030611 0.786638 0.5 +-0.0621388 0.0334692 0.00329381 0.77217 0.5 +-0.0610939 0.0335153 0.00346695 0.781365 0.5 +-0.0600964 0.0334795 0.00370066 0.77751 0.5 +-0.0590564 0.0335255 0.00387291 0.756414 0.5 +-0.0580565 0.0334897 0.00410791 0.764882 0.5 +-0.0570144 0.0335354 0.00427397 0.76158 0.5 +-0.0560167 0.0334996 0.00451355 0.761589 0.5 +-0.0549774 0.0335456 0.00467992 0.750552 0.5 +-0.053977 0.0335099 0.00491422 0.739838 0.5 +-0.0529375 0.0335557 0.00508499 0.750602 0.5 +-0.0519377 0.0335199 0.00532131 0.609181 0.5 +-0.0508978 0.0335658 0.00549258 0.62173 0.5 +-0.049902 0.0335302 0.00572664 0.639157 0.5 +-0.0489003 0.033496 0.00596365 0.493124 0.5 +-0.0478629 0.0335429 0.00613354 0.511733 0.5 +-0.0467321 0.0337537 0.00617309 0.53914 0.5 +-0.0457346 0.0337173 0.00640665 0.556634 0.5 +-0.0446441 0.0338442 0.00651202 0.565947 0.5 +-0.0436472 0.0338067 0.00674466 0.570213 0.5 +-0.0426076 0.0338549 0.0069173 0.571106 0.5 +-0.0416101 0.0338187 0.00715256 0.578048 0.5 +-0.0406116 0.0337811 0.00738645 0.568877 0.5 +-0.0396582 0.0336638 0.00768797 0.558289 0.5 +-0.0386619 0.0336282 0.00792475 0.534993 0.5 +-0.0376644 0.0335909 0.0081569 0.49915 0.5 +-0.0365789 0.0337187 0.00826156 0.467987 0.5 +-0.035582 0.0336826 0.00849877 0.305007 0.5 +-0.034538 0.033729 0.00866796 0.293934 0.5 +-0.0334968 0.033775 0.00883944 0.152951 0.5 +-0.0324992 0.033739 0.00907408 0.159548 0 +-0.0291577 0.0380555 0.005854 0 0 +-0.0281559 0.0380199 0.00608926 0.143858 0.5 +-0.0270715 0.0381475 0.00619785 0.288891 0.5 +-0.0260288 0.0381935 0.00636573 0.443829 0.5 +-0.0250337 0.0381576 0.00660247 0.599181 0.5 +-0.0240342 0.0381218 0.00683415 0.741282 0.5 +-0.0229946 0.0381678 0.00700416 0.740958 0.5 +-0.0219522 0.0382139 0.00717586 0.742905 0.5 +-0.0209098 0.0382599 0.00734769 0.743035 0.5 +-0.0199096 0.0382242 0.00758286 0.762235 0.5 +-0.0188708 0.0382701 0.00775373 0.747392 0.5 +-0.0177853 0.0383982 0.00785589 0.756215 0.5 +-0.0168303 0.0382802 0.00815469 0.7683 0.5 +-0.0158317 0.0382446 0.00839116 0.73307 0.5 +-0.0147437 0.0383723 0.00849375 0.744156 0.5 +-0.0137494 0.0383366 0.00873382 0.764641 0.5 +-0.0127086 0.0383825 0.00890404 0.745266 0.5 +-0.0116637 0.0384284 0.00907266 0.738219 0.5 +-0.0106693 0.0383927 0.00930564 0.751843 0.5 +-0.00962665 0.0384388 0.00947704 0.755972 0.5 +-0.00858383 0.0384847 0.0096485 0.754059 0.5 +-0.00758439 0.038449 0.00988421 0.751941 0.5 +-0.00654578 0.0384949 0.010053 0.751976 0.5 +-0.0055446 0.0384588 0.0102869 0.760259 0.5 +-0.00455042 0.0384226 0.0105194 0.799442 0.5 +-0.00364368 0.038223 0.0108877 0.840536 0.5 +-0.00290962 0.037693 0.0115129 0.824195 0.5 +-0.00226785 0.0370021 0.0122687 0.797449 0.5 +-0.00162182 0.0363065 0.0130228 0.81863 0.5 +-0.0009793 0.0356154 0.0137824 0.84597 0.5 +-0.000245612 0.0350857 0.0144067 0.898191 0.5 +0.000574283 0.0347216 0.0149023 0.89315 0.5 +0.00144074 0.0344391 0.0153316 0.879616 0.5 +0.00239149 0.0343213 0.0156312 0.678181 0.5 +0.00334696 0.0342028 0.0159318 0.504253 0.5 +0.00429953 0.0340852 0.0162355 0.487958 0.5 +0.00534141 0.0341316 0.016402 0.302279 0.5 +0.00651507 0.0344231 0.0163793 0.142808 0.5 +0.00746772 0.0343056 0.0166757 0 0 +0.0206783 0.0361727 0.0176735 0.123099 0 +0.0214998 0.0358071 0.0181694 0.230295 0.5 +0.0219696 0.0347867 0.0191885 0.432057 0.5 +0.022966 0.0347513 0.0194226 0.617254 0.5 +0.0240499 0.0348797 0.0195293 0.765766 0.5 +0.02514 0.0350088 0.0196342 0.766272 0.5 +0.0262687 0.0352193 0.019674 0.765202 0.5 +0.0274001 0.0354299 0.0197116 0.75942 0.5 +0.028615 0.035804 0.0196241 0.745323 0.5 +0.0297466 0.036015 0.0196643 0.772217 0.5 +0.0309645 0.0363887 0.0195722 0.741259 0.5 +0.0321413 0.0366814 0.019545 0.732375 0.5 +0.0333604 0.037057 0.0194583 0.732958 0.5 +0.0345357 0.0373492 0.0194302 0.713103 0.5 +0.0357976 0.0378059 0.0192762 0.685039 0.5 +0.0370616 0.0382621 0.0191175 0.670001 0.5 +0.0383256 0.0387198 0.0189634 0.651947 0.5 +0.0396296 0.0392572 0.0187428 0.639964 0.5 +0.0409378 0.0397959 0.0185201 0.637412 0.5 +0.0422463 0.0403355 0.0183005 0.634369 0.5 +0.0435663 0.0408867 0.018056 0.593076 0.5 +0.0449495 0.041538 0.0177108 0.609797 0.5 +0.0463327 0.0421886 0.017365 0.601398 0.5 +0.0476183 0.0426691 0.0171605 0.434292 0.5 +0.049239 0.0437392 0.0164633 0.252697 0.275883 +-0.0679777 0.0716192 0.0360049 0.512006 0.473258 +-0.0918605 0.116299 0.0240619 0.79206 0.5 +-0.0791517 0.0792478 0.0324066 0.698444 0.5 +-0.0730595 0.110042 0.0423406 0.775985 0.5 +-0.0728722 0.0355547 0.00103582 0.156876 0.5 +-0.0722117 0.0348867 0.00176609 0.337836 0.5 +-0.0715513 0.0342218 0.00249626 0.506191 0.5 +-0.0707251 0.033867 0.00298473 0.524714 0.5 +-0.0697706 0.0337438 0.00328799 0.661359 0.5 +-0.0687814 0.0336983 0.00353162 0.807797 0.5 +-0.0678317 0.0335757 0.00383638 0.807853 0.5 +-0.0668403 0.0335301 0.004077 0.794176 0.5 +-0.0658022 0.0335619 0.00426403 0.805177 0.5 +-0.0648114 0.0335165 0.00450366 0.794583 0.5 +-0.0637785 0.0335481 0.00468656 0.783619 0.5 +-0.0627873 0.0335028 0.00493012 0.790956 0.5 +-0.0617546 0.0335347 0.00511487 0.771034 0.5 +-0.0607177 0.0335659 0.00529637 0.795165 0.5 +-0.0597681 0.0334439 0.00560092 0.775058 0.5 +-0.0586839 0.0335669 0.00570948 0.762431 0.5 +-0.0576871 0.0335309 0.00594357 0.776077 0.5 +-0.0566909 0.0334951 0.00618234 0.774354 0.5 +-0.0556945 0.0334591 0.00641451 0.773387 0.5 +-0.0546971 0.0334232 0.00665025 0.762085 0.5 +-0.0536531 0.0334694 0.00682116 0.59501 0.5 +-0.0526104 0.0335154 0.00699108 0.613321 0.5 +-0.0516134 0.0334804 0.007228 0.47337 0.5 +-0.05057 0.0335281 0.00739754 0.475634 0.5 +-0.0493961 0.033823 0.00737414 0.468936 0.5 +-0.0481785 0.0341964 0.00728185 0.312925 0.5 +-0.0469177 0.0346518 0.0071269 0.346928 0.5 +-0.0458316 0.03478 0.00723173 0.360233 0.5 +-0.0447856 0.0348265 0.00740272 0.373533 0.5 +-0.0437453 0.0348723 0.00757323 0.375751 0.5 +-0.0427952 0.0347556 0.00787321 0.387291 0.5 +-0.0417964 0.0347181 0.00810808 0.389463 0.5 +-0.0408421 0.0345979 0.00840679 0.394331 0.5 +-0.0398903 0.0344806 0.00870734 0.396953 0.5 +-0.0389795 0.034282 0.00907489 0.399347 0.5 +-0.0380711 0.0340829 0.00944176 0.599338 0.5 +-0.0371614 0.0338798 0.00980443 0.578952 0.5 +-0.0362553 0.0336801 0.0101688 0.565421 0.5 +-0.0352581 0.0336435 0.0104036 0.487542 0.5 +-0.0341695 0.0337715 0.0105094 0.294367 0.5 +-0.0331266 0.0338175 0.0106794 0.304596 0.5 +-0.0321289 0.0337822 0.0109163 0.147696 0.5 +-0.0310017 0.0339922 0.010953 0 0 +-0.0277909 0.0380629 0.00793761 0.147393 0.5 +-0.0267919 0.0380272 0.00817341 0.291381 0.5 +-0.0257516 0.0380733 0.00834253 0.436713 0.5 +-0.0247099 0.0381195 0.00851258 0.584587 0.5 +-0.0236663 0.0381653 0.00868472 0.741077 0.5 +-0.0226683 0.0381298 0.00891697 0.742854 0.5 +-0.021626 0.038176 0.00908889 0.7428 0.5 +-0.0205862 0.0382221 0.00925741 0.742819 0.5 +-0.0195451 0.0382679 0.00943 0.751274 0.5 +-0.0185478 0.0382321 0.00966598 0.730537 0.5 +-0.0175041 0.0382782 0.00983265 0.749706 0.5 +-0.0165056 0.0382425 0.0100681 0.764462 0.5 +-0.0154675 0.0382885 0.0102401 0.745092 0.5 +-0.014426 0.0383347 0.0104075 0.742901 0.5 +-0.0133824 0.0383808 0.0105781 0.75139 0.5 +-0.0123858 0.0383448 0.0108168 0.749042 0.5 +-0.0113851 0.0383094 0.011049 0.743132 0.5 +-0.0103013 0.038437 0.0111565 0.743182 0.5 +-0.00930377 0.0384012 0.0113924 0.740726 0.5 +-0.00826101 0.0384472 0.0115633 0.751808 0.5 +-0.0072649 0.0384115 0.0117959 0.754001 0.5 +-0.00622128 0.0384574 0.0119659 0.759998 0.5 +-0.00522459 0.0384215 0.0122026 0.760118 0.5 +-0.00422659 0.0383846 0.0124357 0.835519 0.5 +-0.0033633 0.038102 0.0128662 0.859173 0.5 +-0.00267666 0.0374926 0.0135597 0.850216 0.5 +-0.00198691 0.0368792 0.0142478 0.851429 0.5 +-0.00134429 0.0361889 0.0150058 0.870436 0.5 +-0.000612836 0.0356605 0.0156316 0.90223 0.5 +0.000120368 0.0351316 0.0162576 0.918289 0.5 +0.000942621 0.0347668 0.0167534 0.941574 0.5 +0.00184795 0.0345666 0.017115 0.923416 0.5 +0.00275941 0.0343655 0.0174794 0.706169 0.5 +0.00375967 0.0343287 0.0177156 0.692001 0.5 +0.00466954 0.0341296 0.0180802 0.504617 0.5 +0.00570986 0.0341754 0.0182505 0.312357 0.5 +0.0067064 0.0341407 0.0184863 0.290121 0.5 +0.00810435 0.0348429 0.0181346 0.120325 0 +0.00910286 0.0348066 0.0183719 0.133931 0.5 +0.0100949 0.034771 0.018605 0 0 +0.0189601 0.036126 0.0191857 0 0 +0.0194741 0.0351845 0.0201392 0.214285 0.5 +0.0202497 0.0347399 0.020698 0.417373 0.5 +0.021293 0.0347861 0.0208687 0.620982 0.5 +0.0223322 0.0348324 0.0210401 0.629466 0.5 +0.0234195 0.0349614 0.0211471 0.754382 0.5 +0.0245482 0.035172 0.0211866 0.755193 0.5 +0.0256796 0.0353829 0.0212256 0.757166 0.5 +0.0268986 0.0357578 0.0211357 0.761173 0.5 +0.0280721 0.0360499 0.0211097 0.754353 0.5 +0.0292911 0.0364248 0.021021 0.798165 0.5 +0.0304203 0.0366341 0.0210583 0.773247 0.5 +0.031639 0.0370094 0.0209702 0.760175 0.5 +0.0328168 0.0373031 0.0209449 0.746554 0.5 +0.034036 0.037677 0.020853 0.760064 0.5 +0.0352097 0.0379704 0.0208298 0.724393 0.5 +0.0364745 0.0384289 0.0206775 0.686358 0.5 +0.0377365 0.0388851 0.0205214 0.686281 0.5 +0.0389971 0.039341 0.0203664 0.665512 0.5 +0.0403042 0.0398794 0.0201445 0.646616 0.5 +0.0416155 0.0404142 0.0199255 0.383418 0.5 +0.0429111 0.040977 0.0196984 0.364043 0.5 +0.0442879 0.0415947 0.0193873 0.609013 0.5 +0.0456202 0.0421608 0.019117 0.631507 0.5 +0.0469552 0.0427274 0.0188429 0.630336 0.5 +0.0482658 0.0433313 0.0185611 0.239557 0.5 +0.0499211 0.0443554 0.0178724 0.21994 0.5 +-0.0750729 0.0675817 0.0186826 0.685326 0.377587 +-0.0742444 0.0756609 0.0347079 0.746509 0.5 +-0.0698715 0.11424 0.0504282 0.437644 0.5 +-0.0682155 0.0787029 0.0404793 0.604318 0.5 +-0.0710555 0.148357 -0.0346175 0.35461 0.310236 +-0.072483 0.0356257 0.00284128 0.292075 0.5 +-0.0719858 0.0346482 0.00381826 0.327071 0.5 +-0.0712039 0.0342165 0.00436442 0.529097 0.5 +-0.070335 0.0339385 0.00479187 0.520154 0.5 +-0.0694247 0.0337382 0.00515427 0.664571 0.5 +-0.0684331 0.0336931 0.00540027 0.810068 0.5 +-0.0674387 0.0336478 0.00564073 0.806539 0.5 +-0.0664067 0.0336797 0.00582425 0.804523 0.5 +-0.0654153 0.0336345 0.00606909 0.802283 0.5 +-0.0644245 0.0335892 0.00631261 0.794085 0.5 +-0.0633881 0.0336212 0.00649796 0.791615 0.5 +-0.0623969 0.0335761 0.00673913 0.783076 0.5 +-0.061361 0.0336079 0.00692461 0.780821 0.5 +-0.0603733 0.0335628 0.0071663 0.797184 0.5 +-0.0593798 0.0335176 0.00740926 0.771345 0.5 +-0.058347 0.0335497 0.00759386 0.777747 0.5 +-0.0573551 0.0335045 0.00783858 0.786935 0.5 +-0.0563218 0.0335364 0.00802021 0.781672 0.5 +-0.0553241 0.0335005 0.00825618 0.778819 0.5 +-0.0543235 0.0334648 0.00849253 0.615182 0.5 +-0.0532836 0.0335112 0.0086601 0.452156 0.5 +-0.0521978 0.0336397 0.008764 0.462652 0.5 +-0.0510223 0.0339346 0.00874224 0.323818 0.5 +-0.0498071 0.0343093 0.00865348 0.281706 0.5 +-0.0484523 0.0349311 0.00836568 0.274467 0.5 +-0.0471043 0.0355495 0.00808039 0 0 +-0.0459741 0.03576 0.00812075 0 0 +-0.0449324 0.0358062 0.00829108 0 0 +-0.0438465 0.0359346 0.00839642 0 0 +-0.0428932 0.0358165 0.00869673 0 0 +-0.0419398 0.0356984 0.00899705 0 0 +-0.0409865 0.0355803 0.00929737 0 0 +-0.0400291 0.0354632 0.00960076 0.195883 0.5 +-0.0390753 0.0353444 0.00990175 0.391176 0.5 +-0.0381696 0.0351458 0.0102677 0.390945 0.5 +-0.0373475 0.0347779 0.0107604 0.393812 0.5 +-0.036529 0.0344176 0.0112583 0.586889 0.5 +-0.0357073 0.03405 0.0117511 0.590914 0.5 +-0.0348878 0.0336855 0.0122448 0.572312 0.5 +-0.0338438 0.0337316 0.012415 0.497557 0.5 +-0.0328471 0.033696 0.0126517 0.301911 0.5 +-0.0317622 0.0338243 0.0127586 0.275107 0.5 +-0.0305886 0.0341169 0.0127308 0 0 +-0.0275114 0.0379423 0.00991362 0.147342 0.5 +-0.0264689 0.0379883 0.0100865 0.296369 0.5 +-0.0254714 0.0379526 0.0103195 0.443462 0.5 +-0.0244307 0.0379986 0.0104913 0.573711 0.5 +-0.0233871 0.0380454 0.010662 0.71269 0.5 +-0.0223034 0.0381733 0.0107634 0.74511 0.5 +-0.0213027 0.0381376 0.0110019 0.753623 0.5 +-0.020264 0.0381835 0.0111715 0.751346 0.5 +-0.0192664 0.0381478 0.0114056 0.751179 0.5 +-0.0182228 0.038194 0.0115761 0.74272 0.5 +-0.0171825 0.0382402 0.011747 0.74274 0.5 +-0.016138 0.0382862 0.0119165 0.753708 0.5 +-0.0151399 0.0382506 0.0121533 0.753718 0.5 +-0.0141005 0.0382966 0.0123251 0.75424 0.5 +-0.013105 0.0382607 0.0125563 0.760806 0.5 +-0.0120612 0.0383071 0.0127308 0.744981 0.5 +-0.0110203 0.0383532 0.0129011 0.756401 0.5 +-0.0100211 0.0383173 0.0131334 0.763041 0.5 +-0.0089791 0.0383636 0.0133044 0.744831 0.5 +-0.00793663 0.0384098 0.0134736 0.755865 0.5 +-0.00689488 0.0384553 0.0136435 0.770456 0.5 +-0.00594273 0.0383379 0.0139478 0.759949 0.5 +-0.00490321 0.0383839 0.0141185 0.762625 0.5 +-0.00390558 0.0383472 0.0143493 0.841532 0.5 +-0.00308793 0.0379842 0.0148477 0.899867 0.5 +-0.0023107 0.0375379 0.0154093 0.89705 0.5 +-0.00162211 0.0369274 0.0160989 0.894961 0.5 +-0.000932932 0.0363158 0.0167895 0.896032 0.5 +-0.000201542 0.0357861 0.0174114 0.933 0.5 +0.000576288 0.0353387 0.0179719 0.964245 0.5 +0.00144009 0.0350568 0.0184024 0.95932 0.5 +0.00226448 0.0346925 0.0189009 0.955416 0.5 +0.00321341 0.034575 0.0192003 0.909546 0.5 +0.00416774 0.034456 0.0194982 0.718014 0.5 +0.00516452 0.0344202 0.0197338 0.521228 0.5 +0.00616601 0.0343841 0.0199712 0.510711 0.5 +0.00716348 0.0343484 0.0202029 0.301845 0.5 +0.00820576 0.0343954 0.0203732 0.281156 0.5 +0.00937824 0.0346871 0.0203526 0.271029 0.5 +0.0105059 0.0348976 0.020389 0 0 +0.0114636 0.0347788 0.020691 0.142579 0 +0.0124134 0.0346609 0.020994 0.157065 0.5 +0.0132792 0.0343795 0.0214237 0.167768 0.5 +0.0143227 0.0344255 0.0215932 0.167221 0.5 +0.0153617 0.0344714 0.021761 0.162071 0.5 +0.0164071 0.0345184 0.0219352 0.159629 0.5 +0.0174901 0.0346463 0.0220409 0.142291 0.5 +0.018535 0.0346925 0.0222104 0.296544 0.5 +0.0195769 0.0347391 0.0223805 0.458221 0.5 +0.0206619 0.0348672 0.0224824 0.602628 0.5 +0.021748 0.0349954 0.0225893 0.777912 0.5 +0.0227878 0.0350417 0.0227582 0.778319 0.5 +0.0239206 0.0352552 0.0228022 0.713952 0.5 +0.0251821 0.0357118 0.0226481 0.732179 0.5 +0.0264019 0.036087 0.0225582 0.746811 0.5 +0.0276204 0.0364605 0.0224657 0.76134 0.5 +0.0288353 0.0368345 0.0223773 0.777282 0.5 +0.0299649 0.0370453 0.0224182 0.818905 0.5 +0.0311432 0.0373381 0.0223917 0.778824 0.5 +0.0323169 0.0376319 0.0223694 0.764586 0.5 +0.0335354 0.0380053 0.0222769 0.764806 0.5 +0.034711 0.0383001 0.0222555 0.764469 0.5 +0.0359289 0.0386712 0.0221633 0.418022 0.5 +0.0371924 0.0391306 0.0220088 0.39945 0.440086 +0.0384543 0.0395883 0.0218564 0.692953 0.5 +0.0397169 0.0400457 0.0217023 0.680854 0.5 +0.0409735 0.0405135 0.0215425 0.39598 0.5 +0.0423699 0.0412112 0.0211935 0.284902 0.377088 +0.0436181 0.0416961 0.0210317 0.283373 0.448635 +0.0450509 0.0423962 0.0206492 0.278146 0.432912 +0.0463347 0.0428813 0.020444 0.382356 0.417898 +0.0477223 0.0435274 0.0201079 0.376558 0.5 +0.0491837 0.0442045 0.019604 0.288402 0.38477 +0.050668 0.0451751 0.0191374 0.288578 0.320102 +-0.0551501 0.0641879 0.0328568 0.458197 0.5 +-0.0839617 0.114292 0.0471508 0.520552 0.5 +-0.081144 0.11 0.0405445 0.912213 0.5 +-0.0899229 0.115405 0.0270455 0.648837 0.5 +-0.0723413 0.0352299 0.00501169 0.288703 0.5 +-0.0717212 0.0344863 0.00580157 0.337745 0.5 +-0.0708965 0.0341323 0.00629169 0.535451 0.5 +-0.069983 0.033931 0.00665746 0.705165 0.5 +-0.0690346 0.0338087 0.00696066 0.84528 0.5 +-0.0680436 0.0337635 0.00720288 0.815559 0.5 +-0.0670064 0.0337953 0.0073865 0.804793 0.5 +-0.0660587 0.0336733 0.00769062 0.810937 0.5 +-0.0650248 0.0337055 0.00787315 0.793449 0.5 +-0.0640324 0.0336604 0.00811729 0.801824 0.5 +-0.0630392 0.0336157 0.00836468 0.791053 0.5 +-0.0620051 0.0336477 0.00854436 0.782578 0.5 +-0.0610145 0.0336026 0.00878975 0.799331 0.5 +-0.0600247 0.0335577 0.00903367 0.791285 0.5 +-0.0589877 0.0335902 0.00921609 0.771819 0.5 +-0.0579584 0.0336225 0.00939861 0.78128 0.5 +-0.0569634 0.0335771 0.00964709 0.79693 0.5 +-0.0560128 0.0334549 0.00994988 0.785139 0.5 +-0.0549804 0.0334872 0.0101333 0.613183 0.5 +-0.0539473 0.03352 0.0103166 0.438236 0.5 +-0.0527782 0.0338002 0.0103069 0.264065 0.5 +-0.0513379 0.0345855 0.00988953 0.267767 0.5 +-0.0501691 0.0348773 0.00986405 0 0 +-0.0485971 0.0359097 0.00925535 0 0 +-0.039222 0.0363262 0.0107899 0 0 +-0.0383571 0.0360437 0.0112202 0 0 +-0.0375341 0.0356789 0.0117182 0.194529 0.5 +-0.0367133 0.0353138 0.0122122 0.391807 0.5 +-0.0358508 0.0350331 0.0126434 0.383402 0.5 +-0.0351624 0.0344214 0.0133327 0.373538 0.5 +-0.0344283 0.0338921 0.0139586 0.534095 0.5 +-0.0334735 0.0337737 0.0142583 0.493539 0.5 +-0.0324783 0.0337381 0.0144953 0.45541 0.5 +-0.0313891 0.0338671 0.0146006 0.278493 0.5 +-0.0303071 0.0339954 0.0147064 0.141066 0.5 +-0.0271872 0.0379033 0.0118238 0.146481 0.5 +-0.0261434 0.0379494 0.0119939 0.299978 0.5 +-0.0251492 0.0379137 0.0122303 0.451047 0.5 +-0.0241505 0.0378782 0.0124647 0.590588 0.5 +-0.0230202 0.0380885 0.0125034 0.715632 0.5 +-0.0219797 0.0381347 0.0126751 0.742514 0.5 +-0.0209361 0.0381808 0.0128466 0.753541 0.5 +-0.0199407 0.0381449 0.0130842 0.762021 0.5 +-0.0188968 0.0381911 0.0132528 0.75354 0.5 +-0.017901 0.0381554 0.0134869 0.75355 0.5 +-0.0168597 0.0382017 0.0136589 0.744587 0.5 +-0.0158173 0.038248 0.0138275 0.75358 0.5 +-0.0147745 0.0382944 0.014 0.746653 0.5 +-0.0137336 0.0383402 0.0141683 0.784687 0.5 +-0.0127796 0.0382227 0.0144711 0.766788 0.5 +-0.0116952 0.0383509 0.0145738 0.734113 0.5 +-0.01065 0.0383969 0.0147482 0.755824 0.5 +-0.00965298 0.0383614 0.0149817 0.764861 0.5 +-0.00861288 0.0384077 0.0151551 0.746739 0.5 +-0.00757253 0.0384534 0.015324 0.770424 0.5 +-0.00662043 0.0383357 0.0156226 0.770391 0.5 +-0.00557531 0.0383818 0.0157938 0.767152 0.5 +-0.00457894 0.0383459 0.0160278 0.806062 0.5 +-0.00358231 0.0383094 0.0162632 0.88817 0.5 +-0.00271812 0.0380275 0.0166967 0.931728 0.5 +-0.00189869 0.037664 0.017192 0.941389 0.5 +-0.00116523 0.0371346 0.0178171 0.923102 0.5 +-0.000433486 0.0366062 0.0184413 0.923845 0.5 +0.000300027 0.0360761 0.019065 0.958108 0.5 +0.00112155 0.035712 0.0195623 0.969496 0.5 +0.00194178 0.0353485 0.0200578 0.982259 0.5 +0.00280759 0.0350639 0.0204847 0.985656 0.5 +0.00371617 0.0348648 0.0208524 0.96622 0.5 +0.00467021 0.0347458 0.0211501 0.737058 0.5 +0.00562336 0.034628 0.021452 0.715493 0.5 +0.00657766 0.034511 0.0217547 0.514071 0.5 +0.00761699 0.0345564 0.0219225 0.49898 0.5 +0.00861514 0.0345206 0.0221572 0.4658 0.5 +0.00965733 0.0345667 0.0223294 0.294834 0.5 +0.0106556 0.0345311 0.0225637 0.296166 0.5 +0.0116984 0.034577 0.0227351 0.305038 0.5 +0.0126937 0.0345417 0.0229719 0.317011 0.5 +0.0137785 0.0346695 0.0230735 0.31965 0.5 +0.0147782 0.034634 0.0233109 0.322729 0.5 +0.01582 0.0346802 0.0234839 0.314429 0.5 +0.0168587 0.0347265 0.0236529 0.310145 0.5 +0.0179003 0.0347727 0.0238228 0.313898 0.5 +0.0189449 0.0348191 0.0239933 0.47099 0.5 +0.0199862 0.0348656 0.0241629 0.611579 0.5 +0.0210708 0.0349944 0.0242708 0.742651 0.5 +0.0222032 0.0352055 0.0243097 0.756438 0.5 +0.0233331 0.0354178 0.02435 0.716327 0.5 +0.0246817 0.0360382 0.0240669 0.678097 0.5 +0.0259452 0.0364961 0.0239139 0.735775 0.5 +0.0271613 0.0368693 0.0238228 0.778478 0.5 +0.028338 0.0371627 0.023798 0.768281 0.5 +0.0295573 0.0375392 0.0237122 0.809672 0.5 +0.0306859 0.0377485 0.0237503 0.818664 0.5 +0.0318729 0.0380045 0.0237472 0.471261 0.5 +0.033081 0.038417 0.0236373 0.778536 0.5 +0.0342539 0.0387023 0.0236157 0.447598 0.5 +0.0354747 0.0390827 0.0235255 0.463983 0.411565 +0.0366896 0.0394563 0.0234361 0.462206 0.402084 +0.0379075 0.0398433 0.0233434 0.410411 0.5 +0.0391712 0.0402919 0.0231925 0.697633 0.5 +0.0404724 0.0408436 0.0229665 0.296099 0.5 +0.0417801 0.041383 0.0227466 0.39714 0.405694 +0.0431361 0.0419917 0.0224684 0.440495 0.5 +0.0444404 0.0425371 0.0222477 0.423741 0.385744 +0.0457689 0.0431024 0.0219801 0.415785 0.5 +0.0471472 0.0437632 0.0216364 0.419951 0.5 +0.0484812 0.0443317 0.021366 0.377292 0.405117 +0.0499661 0.0451421 0.0208878 0.313851 0.395204 +0.051506 0.0461707 0.0202521 0.295884 0.5 +-0.0721635 0.113702 0.0503204 0.410818 0.5 +-0.0556472 0.0657358 0.0349277 0.416829 0.5 +-0.089438 0.113514 0.0412091 0.509597 0.5 +-0.0616258 0.0641254 0.029779 0.446533 0.5 +-0.0728598 0.0355014 0.00645302 0.15537 0 +-0.0721585 0.0349122 0.00711943 0.365717 0.5 +-0.0713326 0.0345571 0.00760774 0.562995 0.5 +-0.0705055 0.0342009 0.00809348 0.750997 0.5 +-0.0695561 0.0340783 0.00839793 0.720041 0.5 +-0.0686026 0.0339552 0.0087048 0.701806 0.5 +-0.0676508 0.0338326 0.0090061 0.827983 0.5 +-0.0666201 0.0338653 0.00919115 0.823811 0.5 +-0.0656682 0.0337431 0.00949839 0.815893 0.5 +-0.0646344 0.0337755 0.00968147 0.803687 0.5 +-0.0636401 0.0337302 0.00992182 0.811764 0.5 +-0.0626529 0.0336856 0.0101657 0.793021 0.5 +-0.0616148 0.0337181 0.0103501 0.79061 0.5 +-0.0606264 0.0336734 0.0105944 0.798748 0.5 +-0.0596345 0.0336285 0.0108415 0.787989 0.5 +-0.0586426 0.0335837 0.0110854 0.769182 0.5 +-0.0576072 0.0336162 0.0112663 0.780274 0.5 +-0.0566151 0.0335713 0.0115144 0.80594 0.5 +-0.0556243 0.0335264 0.0117574 0.629921 0.5 +-0.0546337 0.0334816 0.0119976 0.458851 0.5 +-0.0535552 0.0335918 0.0121227 0.300476 0.5 +-0.0525671 0.0335472 0.0123651 0 0 +-0.036902 0.0362143 0.0131672 0 0 +-0.0360812 0.0358497 0.0136623 0 0 +-0.0353932 0.0352385 0.0143534 0.327334 0.5 +-0.0348821 0.0342989 0.0153052 0.319749 0.5 +-0.0341485 0.0337694 0.0159272 0.505285 0.5 +-0.0331056 0.0338156 0.0161014 0.620006 0.5 +-0.0321091 0.03378 0.0163326 0.444227 0.5 +-0.0309771 0.0339917 0.0163773 0.283311 0.5 +-0.0298032 0.034287 0.0163531 0.126958 0.5 +-0.0268606 0.0378639 0.0137313 0.148508 0.5 +-0.0258626 0.0378286 0.0139698 0.29239 0.5 +-0.0247788 0.0379568 0.0140716 0.444261 0.5 +-0.0237394 0.038003 0.0142418 0.599027 0.5 +-0.0226958 0.0380494 0.0144148 0.742354 0.5 +-0.0216559 0.0380957 0.0145856 0.733372 0.5 +-0.0206145 0.038142 0.0147556 0.761926 0.5 +-0.0196125 0.0381064 0.0149924 0.753425 0.5 +-0.0185746 0.0381525 0.0151621 0.755399 0.5 +-0.0175293 0.038199 0.0153321 0.75721 0.5 +-0.0164885 0.0382449 0.0155037 0.76414 0.5 +-0.0154921 0.0382096 0.0157388 0.744961 0.5 +-0.0144087 0.0383376 0.0158464 0.745007 0.5 +-0.0134078 0.0383017 0.0160824 0.781324 0.5 +-0.012412 0.0382658 0.0163183 0.76262 0.5 +-0.0114161 0.0382303 0.016554 0.732598 0.5 +-0.0103272 0.0383585 0.0166568 0.743587 0.5 +-0.00933224 0.038323 0.0168951 0.745077 0.5 +-0.00824401 0.0384507 0.0170014 0.755025 0.5 +-0.00729397 0.0383333 0.0172997 0.781607 0.5 +-0.00625132 0.0383797 0.0174726 0.757374 0.5 +-0.00521106 0.038426 0.0176436 0.778483 0.5 +-0.00421023 0.0383902 0.0178766 0.789891 0.5 +-0.0031698 0.0384355 0.0180459 0.875914 0.5 +-0.00226303 0.0382357 0.0184109 0.93587 0.5 +-0.00144097 0.0378708 0.018909 0.958501 0.5 +-0.000666067 0.037425 0.0194672 0.951943 0.5 +0.000110958 0.036978 0.020027 0.958927 0.5 +0.000886988 0.0365316 0.0205866 0.96573 0.5 +0.00170937 0.0361659 0.0210822 0.978558 0.5 +0.00252859 0.0358017 0.021576 0.991405 0.5 +0.00339585 0.0355203 0.0220096 0.993564 0.5 +0.00426025 0.0352382 0.0224392 0.99203 0.5 +0.00517049 0.0350387 0.0228068 0.985106 0.5 +0.00607582 0.0348373 0.023168 0.775657 0.5 +0.00707409 0.0348007 0.0234037 0.732943 0.5 +0.00802743 0.0346823 0.0237027 0.701449 0.5 +0.00902499 0.0346466 0.0239397 0.505914 0.5 +0.0100266 0.0346111 0.0241784 0.490488 0.5 +0.0110654 0.0346569 0.0243461 0.475171 0.5 +0.0120628 0.0346214 0.0245844 0.475609 0.5 +0.0131057 0.0346676 0.0247536 0.463026 0.5 +0.0141489 0.0347135 0.0249225 0.46711 0.5 +0.015143 0.0346779 0.0251566 0.468202 0.5 +0.0161851 0.0347246 0.0253316 0.457257 0.5 +0.0172719 0.0348529 0.0254373 0.457197 0.5 +0.0183138 0.0348993 0.0256062 0.464183 0.5 +0.0193537 0.0349459 0.0257791 0.620542 0.5 +0.0204425 0.0350747 0.0258809 0.75424 0.5 +0.0215692 0.0352857 0.025924 0.688219 0.5 +0.0228318 0.0357435 0.0257706 0.674239 0.5 +0.0241838 0.0363666 0.0254891 0.648114 0.5 +0.0254917 0.0369057 0.0252691 0.698759 0.5 +0.0267764 0.0373043 0.025139 0.446474 0.5 +0.0279341 0.0376089 0.0251213 0.479119 0.402573 +0.0291629 0.037982 0.025034 0.359935 0.420995 +0.0303318 0.0382842 0.0249985 0.380581 0.5 +0.0314957 0.0386039 0.0249642 0.371123 0.431412 +0.0326729 0.0388984 0.0249367 0.38701 0.5 +0.0338414 0.0392101 0.0249005 0.495157 0.403843 +0.0350676 0.0395586 0.0248293 0.359131 0.435766 +0.0362342 0.0398741 0.0247937 0.374179 0.417844 +0.0374488 0.0402522 0.0247009 0.473507 0.5 +0.0387128 0.0407096 0.0245464 0.462844 0.5 +0.0399282 0.041091 0.0244564 0.415477 0.417601 +0.0412731 0.0417215 0.0241695 0.440587 0.5 +0.04258 0.0422624 0.0239479 0.327067 0.5 +0.0439336 0.0428821 0.0236685 0.47217 0.363992 +0.0451952 0.0433405 0.023507 0.459059 0.5 +0.0465716 0.0440008 0.0231655 0.450829 0.5 +0.0480114 0.0447211 0.0227621 0.342398 0.5 +0.0493794 0.0453908 0.0224152 0.29111 0.444658 +0.0509675 0.0463703 0.0218015 0.308721 0.458867 +-0.0510235 0.0723937 0.0407728 0.69929 0.367303 +-0.0807265 0.0770568 0.0269252 0.773814 0.5 +-0.0680426 0.110046 0.0381289 0.271178 0.5 +-0.0684679 0.110537 0.0393979 0.412903 0.5 +-0.0801928 0.109885 0.0408487 0.918607 0.5 +-0.0497993 0.0677848 0.0379447 0.686048 0.5 +-0.0716838 0.0351362 0.00880221 0.568611 0.5 +-0.0708605 0.0347825 0.00928864 0.587558 0.5 +-0.0699903 0.034504 0.00971713 0.587225 0.5 +-0.0690811 0.0343024 0.0100819 0.574385 0.5 +-0.0681688 0.0340999 0.0104427 0.744555 0.5 +-0.0672224 0.0339784 0.0107486 0.874835 0.5 +-0.0662305 0.0339335 0.0109932 0.847399 0.5 +-0.0652333 0.0338884 0.0112389 0.825348 0.5 +-0.0642433 0.0338438 0.0114826 0.814134 0.5 +-0.0632514 0.033799 0.0117273 0.822602 0.5 +-0.0622597 0.0337543 0.0119702 0.800833 0.5 +-0.0612693 0.0337096 0.0122134 0.798139 0.5 +-0.0602752 0.0336649 0.0124615 0.798186 0.5 +-0.0592845 0.0336203 0.0127024 0.790094 0.5 +-0.0582482 0.0336534 0.0128901 0.770636 0.5 +-0.057217 0.0336859 0.0130711 0.785204 0.5 +-0.0562656 0.0335637 0.0133743 0.633425 0.5 +-0.0552728 0.0335199 0.0136226 0.456991 0.5 +-0.054161 0.0337073 0.0136843 0.30245 0.5 +-0.0532105 0.0335853 0.013987 0 0 +-0.0357116 0.0358916 0.0155029 0 0 +-0.0353308 0.0347033 0.016646 0.300295 0.5 +-0.0346452 0.0340944 0.0173387 0.347267 0.5 +-0.0337749 0.0338108 0.0177666 0.513983 0.5 +-0.0327797 0.0337757 0.0180041 0.618269 0.5 +-0.03165 0.0339865 0.0180432 0.424861 0.5 +-0.0304761 0.0342807 0.0180201 0.243196 0.5 +-0.0288615 0.0353967 0.01735 0.0746888 0.5 +-0.0265805 0.0377426 0.0157053 0.142048 0.5 +-0.0255422 0.0377889 0.0158759 0.292295 0.5 +-0.0244115 0.0379996 0.0159179 0.444025 0.5 +-0.0233699 0.0380458 0.0160874 0.611511 0.5 +-0.0223732 0.03801 0.0163235 0.74325 0.5 +-0.0212837 0.0381384 0.0164325 0.734902 0.5 +-0.0202897 0.0381028 0.016664 0.764023 0.5 +-0.019245 0.0381493 0.0168345 0.757025 0.5 +-0.0182052 0.0381955 0.0170088 0.75529 0.5 +-0.0171621 0.0382418 0.0171791 0.756175 0.5 +-0.0161652 0.0382063 0.017415 0.775574 0.5 +-0.0151264 0.0382524 0.0175843 0.744614 0.5 +-0.0140843 0.0382987 0.0177555 0.75125 0.5 +-0.013087 0.0382629 0.0179922 0.769954 0.5 +-0.0120858 0.0382274 0.0182274 0.764092 0.5 +-0.0110467 0.0382737 0.0183997 0.746481 0.5 +-0.010004 0.0383201 0.0185669 0.755374 0.5 +-0.00896496 0.0383664 0.01874 0.746494 0.5 +-0.00792408 0.0384127 0.0189094 0.776502 0.5 +-0.00692431 0.038377 0.0191445 0.778302 0.5 +-0.00588211 0.0384235 0.0193174 0.759344 0.5 +-0.00484252 0.0384695 0.0194856 0.789486 0.5 +-0.00384396 0.0384339 0.019723 0.780538 0.5 +-0.00280426 0.0384802 0.0198949 0.846938 0.5 +-0.00180556 0.0384438 0.0201303 0.933184 0.5 +-0.000943594 0.0381622 0.0205587 0.981168 0.5 +-7.52397e-05 0.037877 0.020989 0.975264 0.5 +0.000700235 0.0374335 0.0215506 0.973619 0.5 +0.00152244 0.03707 0.0220484 0.966884 0.5 +0.00234204 0.0367065 0.0225428 0.97737 0.5 +0.00320624 0.036422 0.0229702 0.984986 0.5 +0.00407218 0.0361395 0.0234015 0.988543 0.5 +0.00493694 0.0358587 0.023833 0.996029 0.5 +0.00579995 0.0355749 0.0242599 0.99615 0.5 +0.0067112 0.0353739 0.0246266 0.998575 0.5 +0.00757449 0.035092 0.025056 0.988256 0.5 +0.00852647 0.0349744 0.0253569 0.767913 0.5 +0.0094823 0.034855 0.0256576 0.748178 0.5 +0.0104354 0.0347372 0.0259595 0.705494 0.5 +0.011433 0.034701 0.0261941 0.665721 0.5 +0.0124741 0.0347469 0.026362 0.642779 0.5 +0.0134712 0.0347114 0.0266012 0.624856 0.5 +0.0145126 0.0347575 0.026768 0.624258 0.5 +0.0155546 0.034804 0.0269401 0.616667 0.5 +0.0165976 0.0348504 0.0271124 0.607726 0.5 +0.0176377 0.0348968 0.0272836 0.598931 0.5 +0.0187266 0.0350257 0.0273865 0.593043 0.5 +0.019812 0.035154 0.0274956 0.751244 0.5 +0.0208523 0.0352023 0.0276656 0.675654 0.5 +0.0222487 0.0359069 0.0273161 0.592154 0.5 +0.0236405 0.0366106 0.026972 0.603282 0.5 +0.0249936 0.037232 0.0266864 0.681728 0.5 +0.0262747 0.0376552 0.0265482 0.420018 0.422923 +0.0274875 0.0380349 0.0264602 0.443678 0.409872 +0.0287985 0.0385521 0.0262584 0.354401 0.449769 +0.0300144 0.0389449 0.0261617 0.41794 0.5 +0.0312265 0.0393227 0.0260732 0.397569 0.431434 +0.0323984 0.0396183 0.0260504 0.443446 0.5 +0.0335191 0.0398635 0.0260657 0.402804 0.5 +0.0346942 0.0401467 0.0260507 0.397266 0.431116 +0.0358665 0.0404526 0.0260172 0.413974 0.5 +0.0370832 0.0408236 0.0259314 0.412253 0.377657 +0.0383075 0.041189 0.0258499 0.389409 0.395383 +0.0395145 0.0415874 0.025748 0.367031 0.43567 +0.0408171 0.04213 0.0255289 0.344171 0.5 +0.0421622 0.0427592 0.0252421 0.292024 0.343498 +0.0435234 0.0433666 0.0249665 0.501108 0.5 +0.0447739 0.0438422 0.0248039 0.438374 0.5 +0.046038 0.044353 0.0245911 0.503155 0.316357 +0.0475361 0.0451237 0.0241502 0.314731 0.429413 +0.0489522 0.045877 0.023734 0.343459 0.5 +-0.0743185 0.067053 0.0192856 0.595027 0.476543 +-0.0733752 0.0741466 0.034437 0.717639 0.5 +-0.052801 0.0690675 0.0379843 0.670288 0.5 +-0.0844174 0.110829 0.0409213 0.522791 0.5 +-0.0834627 0.110719 0.0412267 0.929543 0.5 +-0.0667678 0.0695012 0.0345692 0.468575 0.5 +-0.0606782 0.0639978 0.0300882 0.444886 0.5 +-0.0714828 0.0362083 0.00943052 0.292373 0.5 +-0.0854845 0.112639 0.0445732 0.390719 0.464351 +-0.0736187 0.0665006 0.01992 0.57268 0.5 +-0.0694333 0.0348816 0.0112742 0.589936 0.5 +-0.0685657 0.0346013 0.0116976 0.789775 0.5 +-0.0676574 0.0344024 0.0120657 0.778731 0.5 +-0.0667452 0.0342007 0.0124321 0.755645 0.5 +-0.0657975 0.0340784 0.0127357 0.890701 0.5 +-0.0648434 0.0339553 0.0130374 0.851458 0.5 +-0.0638124 0.0339885 0.0132249 0.832762 0.5 +-0.0628603 0.033866 0.0135258 0.819104 0.5 +-0.0618709 0.0338217 0.0137712 0.810903 0.5 +-0.0608764 0.033777 0.0140174 0.808316 0.5 +-0.0598831 0.0337324 0.0142605 0.797563 0.5 +-0.0588955 0.0336882 0.0145047 0.789549 0.5 +-0.0579004 0.0336435 0.0147513 0.784485 0.5 +-0.0569109 0.033599 0.014995 0.622469 0.5 +-0.0559192 0.0335546 0.0152404 0.459329 0.5 +-0.0548859 0.0335879 0.0154264 0.310224 0.5 +-0.054019 0.0333099 0.015848 0 0 +-0.0357817 0.0351096 0.0179926 0.156756 0.5 +-0.0350925 0.0344983 0.0186791 0.336699 0.5 +-0.0343155 0.0340522 0.0192395 0.517084 0.5 +-0.0333602 0.0339348 0.0195439 0.489664 0.5 +-0.0323193 0.0339823 0.0197127 0.433529 0.5 +-0.0311024 0.0343581 0.019624 0.243701 0.5 +-0.0296224 0.0352251 0.019146 0 0 +-0.0272554 0.0377383 0.0173779 0.231287 0.5 +-0.0261669 0.0378674 0.0174813 0.291716 0.5 +-0.0250833 0.0379957 0.0175874 0.431488 0.5 +-0.0240392 0.0380418 0.0177619 0.603577 0.5 +-0.0230427 0.038006 0.0179945 0.772551 0.5 +-0.0220481 0.0379707 0.0182323 0.748411 0.5 +-0.0209608 0.0380992 0.0183358 0.744948 0.5 +-0.0199202 0.0381456 0.0185107 0.746144 0.5 +-0.0188798 0.0381919 0.018679 0.766485 0.5 +-0.0178783 0.0381567 0.0189161 0.756812 0.5 +-0.0167974 0.0382847 0.0190235 0.756805 0.5 +-0.0157973 0.0382489 0.019257 0.775532 0.5 +-0.0147995 0.0382136 0.0194957 0.767319 0.5 +-0.0137598 0.0382596 0.0196658 0.775962 0.5 +-0.0127602 0.0382241 0.0199007 0.777814 0.5 +-0.0117218 0.0382705 0.0200729 0.770477 0.5 +-0.0106785 0.0383169 0.0202432 0.770492 0.5 +-0.00963566 0.0383633 0.0204127 0.770506 0.5 +-0.00859312 0.0384098 0.0205847 0.768843 0.5 +-0.00755399 0.0384559 0.0207545 0.77822 0.5 +-0.00655639 0.0384205 0.0209905 0.771141 0.5 +-0.00547292 0.0385489 0.021098 0.771185 0.5 +-0.00447426 0.0385132 0.0213354 0.789369 0.5 +-0.00343172 0.0385593 0.0215021 0.780392 0.5 +-0.00243741 0.0385239 0.0217416 0.791446 0.5 +-0.00139541 0.0385701 0.0219096 0.845662 0.5 +-0.000398103 0.0385343 0.0221462 0.949289 0.5 +0.00051428 0.0383337 0.0225142 0.984269 0.5 +0.00137655 0.0380516 0.0229424 0.983686 0.5 +0.00219675 0.0376886 0.0234384 0.98701 0.5 +0.00306398 0.0374048 0.023868 0.985534 0.5 +0.00392744 0.0371222 0.0242968 0.971568 0.5 +0.00474777 0.0367585 0.0247919 0.978906 0.5 +0.00565547 0.0365592 0.0251573 0.9844 0.5 +0.00652169 0.0362747 0.0255863 0.984996 0.5 +0.00738689 0.0359942 0.0260187 0.984989 0.5 +0.00825384 0.0357096 0.0264477 0.997391 0.5 +0.00916248 0.0355108 0.0268151 0.998612 0.5 +0.0100263 0.0352289 0.0272451 0.991481 0.5 +0.0109368 0.035027 0.0276086 0.972344 0.5 +0.0118903 0.0349087 0.0279111 0.921243 0.5 +0.0128412 0.0347905 0.0282102 0.836126 0.5 +0.0138852 0.0348367 0.0283807 0.777905 0.5 +0.0148813 0.0348012 0.0286151 0.76671 0.5 +0.0159216 0.0348476 0.0287894 0.757184 0.5 +0.0169629 0.0348939 0.0289563 0.759196 0.5 +0.018008 0.0349409 0.0291289 0.750327 0.5 +0.019092 0.0350694 0.0292369 0.728293 0.5 +0.0201781 0.0351992 0.0293411 0.677815 0.5 +0.0215711 0.035903 0.0289947 0.541291 0.5 +0.0230126 0.0366914 0.0285839 0.54084 0.5 +0.0244967 0.0375596 0.0281073 0.614471 0.5 +0.0257301 0.0379057 0.0280361 0.399381 0.429386 +0.0270346 0.0384464 0.0278157 0.451576 0.5 +0.0282809 0.0389301 0.0276504 0.378253 0.454853 +0.0295979 0.039453 0.0274445 0.400352 0.373374 +0.0308953 0.0400111 0.0272142 0.436563 0.5 +0.032159 0.0404592 0.0270704 0.481155 0.5 +0.0333307 0.040756 0.0270424 0.484864 0.5 +0.0344154 0.0409101 0.0271225 0.481978 0.401041 +0.0355897 0.0411906 0.0271165 0.467021 0.398895 +0.0367619 0.0414833 0.0270934 0.452966 0.410899 +0.0379293 0.0417908 0.0270611 0.430725 0.5 +0.0391473 0.0421646 0.0269754 0.447264 0.5 +0.0404587 0.0426892 0.0267677 0.402884 0.355026 +0.041759 0.0432404 0.0265421 0.311963 0.5 +0.0431078 0.0438619 0.0262578 0.417128 0.5 +0.0444569 0.0444867 0.0259758 0.467722 0.256149 +0.0456558 0.0449086 0.0258493 0.457904 0.5 +0.0470963 0.045623 0.0254581 0.394345 0.5 +0.048576 0.0464424 0.0249843 0.371859 0.5 +-0.0697588 0.147131 -0.0275571 0.356314 0.296108 +-0.0597203 0.0638916 0.0303834 0.563915 0.5 +-0.071352 0.110742 0.0439553 0.757942 0.5 +-0.0729614 0.112778 0.0490933 0.348431 0.5 +-0.0836817 0.0786288 0.0214472 0.822703 0.5 +-0.0574075 0.0649991 0.0334306 0.500434 0.434766 +-0.075455 0.0675485 0.016865 0.611565 0.5 +-0.0824666 0.11008 0.0383967 0.854093 0.5 +-0.0728736 0.0659781 0.0205309 0.548274 0.5 +-0.0583644 0.065095 0.0331446 0.503182 0.400593 +-0.0687909 0.0354139 0.0127136 0.570158 0.5 +-0.0679674 0.0350577 0.0131968 0.592278 0.5 +-0.0670986 0.0347786 0.0136227 0.792609 0.5 +-0.0662316 0.0345008 0.0140489 0.785041 0.5 +-0.0653226 0.0343003 0.0144151 0.769424 0.5 +-0.0643724 0.0341771 0.0147182 0.724098 0.5 +-0.0634619 0.0339766 0.015084 0.711124 0.5 +-0.062469 0.033932 0.0153305 0.667382 0.5 +-0.0614772 0.0338873 0.0155724 0.818573 0.5 +-0.0605291 0.0337655 0.01588 0.816079 0.5 +-0.0595378 0.0337212 0.0161226 0.791107 0.5 +-0.0585033 0.0337545 0.0163089 0.808163 0.5 +-0.057552 0.0336321 0.0166122 0.808473 0.5 +-0.0566004 0.0335105 0.0169198 0.628726 0.5 +-0.0555707 0.033544 0.017104 0.462044 0.5 +-0.0545376 0.0335773 0.0172858 0.328791 0.5 +-0.053835 0.0329874 0.0179508 0 0 +-0.0361895 0.0355992 0.0192692 0 0 +-0.0356328 0.0347409 0.0201566 0.322998 0.5 +-0.0348553 0.0342935 0.020715 0.343603 0.5 +-0.0340311 0.0339294 0.0212063 0.486929 0.5 +-0.0329932 0.0339759 0.0213799 0.44303 0.5 +-0.0318602 0.0341892 0.0214236 0.254934 0.5 +-0.0305143 0.0348089 0.0211376 0 0 +-0.0278811 0.0378156 0.0189805 0.146623 0.5 +-0.0269293 0.0376983 0.0192799 0.296848 0.5 +-0.0258871 0.0377455 0.0194558 0.425014 0.5 +-0.0247602 0.0379556 0.0194943 0.581765 0.5 +-0.0237163 0.0380022 0.0196686 0.755032 0.5 +-0.0226749 0.0380487 0.0198364 0.76847 0.5 +-0.0216341 0.038095 0.0200103 0.768617 0.5 +-0.020634 0.03806 0.0202475 0.758062 0.5 +-0.019552 0.0381879 0.0203532 0.746155 0.5 +-0.0185078 0.0382343 0.0205228 0.767705 0.5 +-0.0175101 0.0381991 0.0207599 0.769738 0.5 +-0.0164722 0.0382453 0.0209318 0.766819 0.5 +-0.0154293 0.0382918 0.0211029 0.768598 0.5 +-0.0143883 0.038338 0.0212719 0.777709 0.5 +-0.0133897 0.0383025 0.0215062 0.78018 0.5 +-0.0123469 0.0383491 0.0216787 0.781798 0.5 +-0.0113089 0.0383954 0.0218511 0.770346 0.5 +-0.0102645 0.038442 0.0220215 0.77041 0.5 +-0.00922198 0.0384881 0.0221926 0.780112 0.5 +-0.00822614 0.0384527 0.0224267 0.778106 0.5 +-0.00718512 0.0384992 0.0226001 0.768677 0.5 +-0.00614297 0.0385457 0.0227705 0.759089 0.5 +-0.00510128 0.0385919 0.0229448 0.778193 0.5 +-0.00410534 0.0385566 0.0231802 0.780199 0.5 +-0.00306646 0.0386027 0.0233477 0.780204 0.5 +-0.00202044 0.0386496 0.0235231 0.772395 0.5 +-0.000982862 0.0386959 0.0236934 0.805634 0.5 +1.67787e-05 0.0386604 0.0239291 0.844124 0.5 +0.00105802 0.0387062 0.0241019 0.941273 0.5 +0.00196704 0.0385066 0.0244659 0.982624 0.5 +0.00291872 0.0383891 0.0247663 0.996425 0.5 +0.00378339 0.0381062 0.0251953 0.990916 0.5 +0.00464996 0.0378242 0.0256263 0.987467 0.5 +0.00551406 0.0375423 0.0260562 0.978097 0.5 +0.00637923 0.0372606 0.0264872 0.978659 0.5 +0.00724524 0.0369774 0.0269173 0.978652 0.5 +0.00810763 0.0366956 0.0273459 0.978471 0.5 +0.00897384 0.0364118 0.0277765 0.980379 0.5 +0.00979486 0.0360464 0.02827 0.990232 0.5 +0.0106595 0.0357626 0.0286983 0.98526 0.5 +0.0114791 0.0353993 0.0291949 0.949134 0.5 +0.0123436 0.0351165 0.0296251 0.915728 0.5 +0.0132092 0.0348336 0.0300558 0.834569 0.5 +0.0142088 0.034798 0.0302902 0.761782 0.5 +0.0152498 0.0348445 0.0304622 0.746258 0.5 +0.0162926 0.0348913 0.030635 0.747822 0.5 +0.0173795 0.0350198 0.030737 0.750268 0.5 +0.0184177 0.0350663 0.0309125 0.749506 0.5 +0.0195053 0.0351963 0.0310168 0.700079 0.5 +0.0207235 0.0355731 0.0309275 0.573445 0.5 +0.0222487 0.0365239 0.0303911 0.509209 0.5 +0.0236875 0.0373106 0.0299772 0.517201 0.5 +0.0251052 0.0382735 0.0297226 0.404127 0.362111 +0.0265654 0.0388814 0.0291555 0.326897 0.5 +0.0279051 0.0395203 0.0288639 0.374023 0.362061 +0.0292035 0.0400739 0.0286474 0.353795 0.457751 +0.0305964 0.0407785 0.0282841 0.482638 0.5 +0.0319555 0.0413937 0.028007 0.575267 0.5 +0.0331811 0.0417541 0.0279348 0.572367 0.5 +0.0343096 0.0419726 0.0279684 0.582848 0.5 +0.0353499 0.042038 0.028119 0.577178 0.5 +0.0364832 0.0422343 0.0281778 0.556699 0.5 +0.0376516 0.0425419 0.0281451 0.511907 0.370025 +0.0388229 0.0428364 0.0281231 0.481444 0.360097 +0.0400787 0.0432895 0.0279756 0.47273 0.5 +0.0413844 0.0438265 0.0277643 0.35476 0.5 +0.0427867 0.0445146 0.027427 0.359847 0.229952 +0.0440796 0.0450784 0.0271934 0.474672 0.5 +0.0453672 0.0456539 0.0269438 0.42944 0.469332 +0.0467625 0.0462832 0.0266316 0.392509 0.5 +-0.070065 0.148313 -0.0344143 0.323862 0.5 +-0.054123 0.064196 0.0330627 0.438042 0.5 +-0.0794475 0.0732175 0.0216948 0.777032 0.5 +0.0390072 0.0393837 0.00207442 0.423395 0.44285 +-0.0770169 0.112922 0.0479771 0.454483 0.377542 +-0.0725566 0.0737794 0.034925 0.68684 0.5 +-0.0769868 0.0713943 0.0255408 0.603285 0.5 +-0.076476 0.07597 0.0322323 0.71984 0.5 +-0.0895884 0.114751 0.0258504 0.673134 0.389671 +-0.0696662 0.0710058 0.0344116 0.570884 0.5 +-0.0910253 0.115214 0.0323598 0.428706 0.5 +-0.0868879 0.111328 0.0363925 0.49125 0.40653 +-0.0815589 0.10988 0.0387619 0.885008 0.5 +-0.0778797 0.109167 0.0401678 0.90674 0.5 +-0.0677487 0.111258 0.0407689 0.313633 0.5 +-0.073756 0.0716254 0.0312714 0.626067 0.457601 +-0.0807007 0.0752735 0.0231846 0.612053 0.5 +-0.070531 0.151779 -0.0453729 0.20315 0.5 +-0.0664219 0.0352675 0.015055 0.434662 0.5 +-0.0655994 0.0349763 0.0155159 0.429517 0.5 +-0.0647928 0.0346609 0.0159953 0.42563 0.5 +-0.063971 0.0343652 0.0164556 0.389633 0.377416 +-0.0629896 0.0341974 0.0167609 0.570355 0.5 +-0.0620801 0.0339964 0.0171254 0.724726 0.5 +-0.0610891 0.0339525 0.017372 0.68064 0.5 +-0.0601377 0.0338299 0.0176745 0.657735 0.5 +-0.0591025 0.0338635 0.0178635 0.796553 0.5 +-0.0581543 0.0337417 0.0181646 0.8123 0.5 +-0.0572015 0.0336196 0.0184714 0.654889 0.5 +-0.0561672 0.0336533 0.0186553 0.473837 0.5 +-0.0551792 0.0336096 0.018904 0.332593 0.5 +-0.0541424 0.033642 0.0190888 0.376671 0.5 +-0.0533609 0.033209 0.01963 0 0 +-0.0360819 0.0351453 0.0214963 0.163888 0.5 +-0.0353491 0.0346157 0.0221204 0.309991 0.5 +-0.0346581 0.0340056 0.0228095 0.473398 0.5 +-0.0336645 0.0339705 0.0230467 0.464143 0.5 +-0.0325779 0.0341004 0.0231549 0.280468 0.5 +-0.0312735 0.034639 0.0229335 0 0 +-0.0285962 0.0377287 0.0207135 0.133839 0.5 +-0.0276455 0.0376114 0.0210157 0.305309 0.5 +-0.026559 0.0377408 0.0211248 0.438663 0.5 +-0.0254312 0.0379511 0.0211651 0.592595 0.5 +-0.0243874 0.0379977 0.0213348 0.758672 0.5 +-0.0233444 0.0380443 0.0215084 0.768328 0.5 +-0.0223063 0.0380908 0.0216787 0.758703 0.5 +-0.0212653 0.0381372 0.0218515 0.779863 0.5 +-0.0202225 0.0381837 0.0220241 0.768586 0.5 +-0.0192269 0.0381483 0.0222601 0.757984 0.5 +-0.0181385 0.038277 0.0223668 0.759664 0.5 +-0.0170991 0.0383232 0.0225362 0.779938 0.5 +-0.0161025 0.0382877 0.022773 0.77794 0.5 +-0.0150618 0.0383341 0.0229424 0.769196 0.5 +-0.0140608 0.038299 0.0231793 0.781273 0.5 +-0.0129795 0.0384272 0.0232864 0.770878 0.5 +-0.0119797 0.0383916 0.0235247 0.777964 0.5 +-0.0109392 0.038438 0.0236915 0.756827 0.5 +-0.00989846 0.0384846 0.0238656 0.756887 0.5 +-0.00885716 0.0385311 0.024037 0.77801 0.5 +-0.00785703 0.0384956 0.0242725 0.780023 0.5 +-0.00681555 0.0385421 0.0244437 0.770351 0.5 +-0.00577674 0.0385885 0.0246132 0.770383 0.5 +-0.00473212 0.0386351 0.0247855 0.780093 0.5 +-0.00369415 0.0386815 0.0249596 0.780105 0.5 +-0.0026931 0.0386465 0.0251959 0.770975 0.5 +-0.00161218 0.0387745 0.0252993 0.760787 0.5 +-0.000568628 0.0388214 0.0254737 0.784611 0.5 +0.000472166 0.0388678 0.0256446 0.807355 0.5 +0.00147085 0.0388322 0.0258794 0.843989 0.5 +0.00251072 0.0388788 0.0260522 0.874849 0.5 +0.00350659 0.0388434 0.0262887 0.962096 0.5 +0.00445885 0.0387258 0.0265895 0.981885 0.5 +0.00536983 0.0385261 0.026955 0.999238 0.5 +0.00623573 0.0382417 0.0273828 0.987711 0.5 +0.00710192 0.0379595 0.027814 0.988483 0.5 +0.00796329 0.0376774 0.0282412 0.983579 0.5 +0.00882931 0.0373958 0.0286749 0.778286 0.5 +0.00960463 0.0369501 0.029234 0.766285 0.5 +0.0103827 0.0365006 0.0297934 0.739987 0.5 +0.0111147 0.0359709 0.0304167 0.703917 0.5 +0.0118497 0.0354401 0.0310392 0.649316 0.5 +0.0126257 0.034994 0.0315996 0.636057 0.5 +0.0135363 0.0347941 0.0319644 0.626939 0.5 +0.0145335 0.034759 0.0322003 0.733496 0.5 +0.0156183 0.0348875 0.0323047 0.733544 0.5 +0.0166591 0.0349342 0.0324763 0.713898 0.5 +0.0177456 0.0350628 0.0325863 0.724859 0.5 +0.0187875 0.0351105 0.0327558 0.692467 0.5 +0.0200475 0.0355684 0.0326031 0.588095 0.5 +0.0214416 0.0362735 0.0322576 0.4166 0.5 +0.0229929 0.0371968 0.0317242 0.284582 0.5 +0.0245219 0.0382712 0.0311236 0.274245 0.352418 +0.026043 0.0392404 0.0305576 0.300527 0.5 +0.0274856 0.0400248 0.0301572 0.306118 0.414427 +0.0289055 0.0408264 0.0297172 0.397473 0.5 +0.0305131 0.0418181 0.0291512 0.438664 0.5 +0.0318466 0.0424663 0.0288342 0.625703 0.5 +0.0331279 0.0428909 0.0287274 0.664266 0.5 +0.0342091 0.0430428 0.0288022 0.667071 0.5 +0.0352492 0.043109 0.0289456 0.62938 0.5 +0.0363367 0.0432226 0.0290731 0.623066 0.5 +0.037465 0.0434297 0.0291248 0.607694 0.5 +0.0385932 0.0436441 0.0291648 0.573421 0.5 +0.0398079 0.0440192 0.0290809 0.581941 0.5 +0.0410489 0.0445052 0.0289111 0.425157 0.234853 +0.0423969 0.0451283 0.0286278 0.418967 0.5 +0.0437177 0.0457281 0.0283091 0.411995 0.472812 +0.0450831 0.0463904 0.0280485 0.457445 0.5 +-0.0827793 0.0771313 0.0211566 0.780032 0.5 +-0.0649916 0.0659907 0.0309635 0.540125 0.459069 +-0.0671962 0.0736816 0.0379285 0.591194 0.468026 +-0.0612726 0.0708854 0.0380779 0.653028 0.5 +-0.0788042 0.109939 0.0428886 0.560539 0.421418 +-0.0827795 0.113314 0.0464356 0.457272 0.5 +-0.0904011 0.115144 0.0307537 0.567756 0.5 +-0.0812191 0.0785924 0.0290188 0.632174 0.473944 +-0.0652616 0.0722487 0.0377992 0.552011 0.366743 +-0.0720619 0.109399 0.0395074 0.64688 0.5 +-0.0676501 0.0667159 0.0297862 0.454542 0.338075 +-0.0896796 0.114349 0.0422656 0.451358 0.5 +-0.0531345 0.0641573 0.0333061 0.491964 0.5 +-0.0653727 0.074532 0.0393295 0.590578 0.5 +-0.0904857 0.114242 0.0332623 0.382143 0.5 +-0.0860696 0.110951 0.0368762 0.484839 0.5 +-0.0898618 0.113382 0.0394321 0.47087 0.5 +-0.0768843 0.109139 0.0404116 0.868516 0.5 +-0.0586618 0.0637687 0.0307411 0.593653 0.415043 +-0.0578159 0.0636603 0.0309898 0.428856 0.426588 +-0.0757375 0.106056 0.0359296 0.479085 0.5 +-0.0670324 0.0672056 0.0312385 0.495337 0.5 +-0.0925663 0.116874 0.0234322 0.805171 0.5 +-0.06879 0.067714 0.0304363 0.499205 0.439093 +-0.0487849 0.0715634 0.0402545 0.734795 0.5 +-0.0497522 0.0716181 0.0399477 0.711003 0.417477 +-0.0645432 0.0673992 0.033354 0.489937 0.471414 +-0.0624735 0.0344952 0.0183787 0.58259 0.5 +-0.0616059 0.0342155 0.0188015 0.548673 0.5 +-0.0606958 0.0340151 0.0191666 0.512476 0.5 +-0.0597443 0.0338929 0.0194732 0.652526 0.5 +-0.0587951 0.0337712 0.0197789 0.807616 0.5 +-0.0577592 0.033805 0.0199655 0.821221 0.5 +-0.0568094 0.0336832 0.0202688 0.657089 0.5 +-0.0558188 0.0336396 0.0205147 0.476256 0.5 +-0.0547437 0.0337519 0.0206417 0.457518 0.5 +-0.0536699 0.0338623 0.0207675 0.353283 0.5 +-0.0528867 0.0334295 0.0213081 0 0 +-0.0366651 0.0353042 0.023032 0.153172 0.5 +-0.0360635 0.034528 0.0238485 0.263742 0.5 +-0.0353224 0.0340121 0.0244595 0.468853 0.5 +-0.0342862 0.0340473 0.0246456 0.615421 0.5 +-0.0331612 0.0342582 0.0246899 0.433082 0.5 +-0.0319429 0.0346356 0.0246022 0.22211 0.5 +-0.0301518 0.0360809 0.0236741 0.074682 0.5 +-0.0282716 0.0376885 0.0226211 0.276831 0.5 +-0.0272298 0.037736 0.022792 0.446069 0.5 +-0.0261021 0.0379463 0.0228342 0.602921 0.5 +-0.0250572 0.0379934 0.0230062 0.760419 0.5 +-0.0239769 0.0381215 0.0231095 0.77061 0.5 +-0.022979 0.0380859 0.023348 0.769349 0.5 +-0.0218898 0.0382146 0.0234539 0.76032 0.5 +-0.0208969 0.0381794 0.0236923 0.782021 0.5 +-0.0198527 0.0382258 0.0238627 0.792046 0.5 +-0.0188094 0.0382725 0.0240343 0.760493 0.5 +-0.0177683 0.0383192 0.0242073 0.770186 0.5 +-0.0167299 0.0383654 0.0243772 0.791552 0.5 +-0.0157326 0.0383302 0.0246146 0.784506 0.5 +-0.014649 0.0384586 0.0247211 0.794359 0.5 +-0.0136478 0.0384232 0.0249573 0.782556 0.5 +-0.0126098 0.0384695 0.0251301 0.78901 0.5 +-0.0116086 0.0384341 0.0253641 0.782151 0.5 +-0.0105678 0.0384807 0.0255376 0.782631 0.5 +-0.00952807 0.0385271 0.0257083 0.768519 0.5 +-0.00848922 0.0385737 0.0258802 0.770543 0.5 +-0.00744633 0.0386202 0.0260498 0.781732 0.5 +-0.00640617 0.0386668 0.0262232 0.770265 0.5 +-0.00536457 0.0387134 0.026395 0.779993 0.5 +-0.00436707 0.0386778 0.0266309 0.780018 0.5 +-0.00332487 0.0387243 0.0268007 0.781776 0.5 +-0.00228102 0.038771 0.0269718 0.772098 0.5 +-0.00124079 0.0388178 0.0271443 0.760732 0.5 +-0.00015619 0.0389464 0.0272511 0.760523 0.5 +0.000884291 0.038993 0.0274224 0.784363 0.5 +0.00192546 0.0390395 0.0275923 0.796973 0.5 +0.00296667 0.0390863 0.0277676 0.808971 0.5 +0.00400981 0.0391328 0.0279405 0.677937 0.5 +0.00500615 0.0390969 0.0281732 0.716877 0.5 +0.00600107 0.0390612 0.028408 0.775798 0.5 +0.00691185 0.038861 0.0287775 0.788748 0.5 +0.00777681 0.0385776 0.0292039 0.791515 0.5 +0.00859545 0.0382141 0.0296981 0.573788 0.5 +0.00937487 0.0377648 0.0302588 0.550385 0.5 +0.0100598 0.0371564 0.0309489 0.490787 0.5 +0.0106605 0.0363802 0.031763 0.417846 0.5 +0.0111749 0.035437 0.032711 0.405938 0.5 +0.011955 0.0349898 0.0332703 0.453645 0.5 +0.0128613 0.0347903 0.0336338 0.612265 0.5 +0.0138178 0.034673 0.033937 0.751171 0.5 +0.0149002 0.0348014 0.0340409 0.735948 0.5 +0.0159012 0.0347663 0.0342789 0.74423 0.5 +0.0169866 0.0348952 0.0343866 0.704137 0.5 +0.0180716 0.0350245 0.0344937 0.707034 0.5 +0.0191993 0.0352366 0.0345338 0.596159 0.5 +0.0207702 0.036271 0.0339301 0.384131 0.5 +0.022412 0.0372285 0.0333476 0.240578 0.5 +0.0239273 0.0383233 0.0327312 0.239403 0.302757 +0.0254197 0.0394349 0.0320923 0.317109 0.5 +0.027107 0.0406036 0.0313674 0.312241 0.5 +-0.0487973 0.070279 0.0395574 0.725647 0.5 +-0.0812419 0.109765 0.0353982 0.493127 0.417252 +0.0319052 0.0437397 0.0295375 0.714435 0.5 +0.033052 0.0440867 0.029429 0.78381 0.5 +0.034148 0.0442132 0.0295363 0.744997 0.5 +0.0352381 0.0443124 0.029693 0.743329 0.5 +0.0362811 0.0443655 0.0298564 0.729515 0.5 +0.0373215 0.0444316 0.0300039 0.560167 0.5 +0.0384486 0.0446185 0.0300797 0.649556 0.5 +0.0395731 0.0448559 0.0300931 0.651241 0.5 +0.0407753 0.0452541 0.0299878 0.489438 0.5 +0.0420748 0.0457918 0.0297783 0.496204 0.462606 +0.0434163 0.0464179 0.0294988 0.464088 0.5 +-0.0568241 0.063612 0.0312362 0.431432 0.42672 +-0.0605435 0.0660534 0.0336067 0.537419 0.5 +-0.0717138 0.073474 0.0353741 0.683322 0.427231 +-0.0748097 0.109257 0.0407877 0.820734 0.5 +-0.0715764 0.0724969 0.0344898 0.645387 0.5 +-0.0758474 0.109198 0.0406016 0.845878 0.5 +-0.0832904 0.111663 0.0440643 0.560126 0.437509 +-0.0892259 0.113441 0.0323782 0.454461 0.5 +-0.0853906 0.110991 0.0352247 0.758937 0.5 +-0.0898642 0.114175 0.0316644 0.507517 0.5 +-0.0885535 0.112746 0.0331115 0.42327 0.41333 +-0.0870355 0.111737 0.0342553 0.759156 0.5 +-0.0845703 0.11062 0.0357089 0.767808 0.5 +-0.0801514 0.109359 0.0377151 0.900163 0.5 +-0.0763852 0.108818 0.0389983 0.882104 0.5 +-0.0594802 0.0716799 0.0395512 0.561236 0.5 +-0.0888863 0.113493 0.0234001 0.697972 0.5 +-0.0830307 0.110356 0.0344756 0.767843 0.5 +-0.0661377 0.0669804 0.0316196 0.477161 0.5 +-0.0898786 0.113438 0.0340422 0.372905 0.5 +-0.0603252 0.0707596 0.0383929 0.652107 0.460124 +-0.0825513 0.110697 0.0307352 0.523556 0.412848 +-0.0558279 0.0635792 0.0314789 0.460183 0.425468 +-0.0581683 0.0606896 -0.00283185 0.219842 0 +-0.0548706 0.0634738 0.0317723 0.497969 0.391365 +-0.0897269 0.113038 0.0361809 0.556882 0.5 +-0.0538732 0.0634525 0.0320061 0.358173 0.272325 +-0.0848272 0.110715 0.0391424 0.91371 0.5 +-0.0773794 0.109459 0.0418273 0.902467 0.5 +-0.0683421 0.111385 0.0423299 0.329698 0.5 +-0.0738907 0.107101 0.0373066 0.321443 0.5 +-0.0633414 0.0357702 0.0187502 0.273201 0.5 +-0.0627834 0.035148 0.0195098 0.333406 0.5 +-0.0621198 0.0344764 0.0202314 0.343534 0.5 +-0.0612546 0.0341987 0.0206565 0.33866 0.5 +-0.0603468 0.0339987 0.0210215 0.492808 0.5 +-0.0593508 0.0339548 0.0212701 0.656969 0.5 +-0.0583609 0.0339112 0.0215144 0.811734 0.5 +-0.0573663 0.0338673 0.0217593 0.819693 0.5 +-0.0563756 0.0338236 0.0220041 0.6579 0.5 +-0.0553855 0.0337802 0.0222515 0.482267 0.5 +-0.0543926 0.0337363 0.0224962 0.324047 0.5 +-0.0534027 0.0336932 0.022744 0.344864 0.5 +-0.0524535 0.0335708 0.023045 0 0 +-0.0382796 0.035429 0.0243806 0.109729 0 +-0.0372877 0.0353832 0.0246264 0.247976 0.5 +-0.0369573 0.0340894 0.0258321 0.439136 0.5 +-0.0359224 0.034124 0.026018 0.625567 0.5 +-0.0348891 0.0341588 0.0262022 0.622211 0.5 +-0.0338144 0.0342727 0.0263277 0.577368 0.5 +-0.0325668 0.0347124 0.0262002 0.341463 0.5 +-0.0308674 0.0359912 0.0254031 0.151069 0.5 +-0.0288992 0.0377652 0.0242203 0.253717 0.5 +-0.027899 0.0377311 0.0244577 0.453342 0.5 +-0.0267255 0.0380235 0.0244373 0.595845 0.5 +-0.0256867 0.0380701 0.0246091 0.782923 0.5 +-0.0246444 0.0381166 0.0247786 0.771805 0.5 +-0.0236064 0.038163 0.0249493 0.788782 0.5 +-0.0226059 0.0381278 0.0251854 0.761547 0.5 +-0.0215209 0.0382567 0.0252967 0.761667 0.5 +-0.0204364 0.038385 0.0254029 0.785164 0.5 +-0.0194853 0.0382676 0.0257029 0.795062 0.5 +-0.0184004 0.0383962 0.0258071 0.771935 0.5 +-0.0173569 0.038443 0.0259817 0.770028 0.5 +-0.016317 0.0384896 0.0261516 0.782427 0.5 +-0.015272 0.0385359 0.0263224 0.779882 0.5 +-0.0142754 0.0385008 0.0265607 0.779914 0.5 +-0.0132381 0.0385471 0.0267309 0.790988 0.5 +-0.0122404 0.0385117 0.0269697 0.781966 0.5 +-0.0111539 0.0386404 0.0270766 0.784489 0.5 +-0.0101559 0.0386047 0.027311 0.802959 0.5 +-0.00915886 0.0385694 0.027547 0.784506 0.5 +-0.00807178 0.0386982 0.0276584 0.784231 0.5 +-0.00707611 0.0386628 0.0278929 0.79411 0.5 +-0.00603714 0.0387093 0.0280658 0.782611 0.5 +-0.00499552 0.038756 0.0282379 0.781685 0.5 +-0.00395415 0.0388026 0.0284096 0.783002 0.5 +-0.00290933 0.0388493 0.0285794 0.782966 0.5 +-0.00186878 0.0388962 0.0287527 0.78447 0.5 +-0.000827607 0.0389424 0.0289209 0.785303 0.5 +0.00021169 0.0389894 0.029096 0.618819 0.5 +0.00129902 0.039118 0.0292011 0.618645 0.5 +0.00233723 0.0391647 0.0293747 0.626438 0.5 +0.00337821 0.0392113 0.0295452 0.626516 0.5 +0.00442082 0.039258 0.029719 0.482701 0.5 +0.00542039 0.0392223 0.0299552 0.488765 0.5 +0.00645901 0.0392685 0.0301228 0.520682 0.5 +0.00741103 0.0391504 0.030425 0.551147 0.5 +0.00823162 0.0387858 0.0309201 0.359342 0.5 +0.00900714 0.0383394 0.0314785 0.329606 0.5 +0.00960807 0.0375632 0.0322947 0.264786 0.5 +0.00994394 0.0362916 0.0335003 0.195722 0.5 +0.0103698 0.0351865 0.034574 0.254455 0.5 +0.0112393 0.0349033 0.0350041 0.434127 0.5 +0.0121456 0.0347039 0.0353715 0.602674 0.5 +0.0131441 0.0346685 0.0356066 0.76132 0.5 +0.0141872 0.0347155 0.0357788 0.736807 0.5 +0.015269 0.034844 0.035887 0.759188 0.5 +0.0162675 0.0348087 0.0361219 0.761736 0.5 +0.0173543 0.0349384 0.0362289 0.720415 0.5 +0.0185257 0.0352322 0.0362088 0.654617 0.5 +0.0198737 0.0358544 0.0359282 0.405286 0.5 +0.0214915 0.0369736 0.0352586 0.257407 0.5 +-0.0821651 0.110069 0.034903 0.797984 0.5 +-0.0721201 0.0655088 0.0210948 0.521037 0.5 +-0.0709567 0.0767623 0.0380194 0.620536 0.5 +-0.0607654 0.0668786 0.0346016 0.459782 0.5 +-0.0633908 0.0664235 0.0326881 0.561185 0.440088 +-0.0731036 0.0721584 0.0326952 0.634913 0.5 +-0.0357596 0.0367769 0.0465803 0.526416 0.5 +-0.0582856 0.0695544 0.0380966 0.512183 0.474737 +-0.0626784 0.0670893 0.0340154 0.585612 0.5 +-0.0724259 0.0727975 0.0340482 0.65353 0.5 +-0.0713342 0.065071 0.0216423 0.493218 0.472389 +-0.0799749 0.0710714 0.0163832 0.625939 0.5 +0.0394746 0.0459091 0.0309432 0.624607 0.5 +0.0406411 0.0462159 0.0309092 0.679363 0.374835 +-0.0792845 0.0704649 0.0170607 0.595405 0.448423 +-0.0785506 0.0699758 0.0176232 0.599118 0.5 +-0.0777833 0.0694772 0.0182331 0.620852 0.5 +-0.0708435 0.0731956 0.0357937 0.659453 0.5 +-0.0754795 0.0704499 0.0266608 0.75767 0.5 +-0.0769851 0.0690914 0.0187275 0.635841 0.399638 +-0.05157 0.0657725 0.0357523 0.63449 0.5 +-0.0847722 0.113367 0.0459387 0.553865 0.5 +-0.0839165 0.110514 0.0395089 0.904669 0.5 +-0.0773811 0.108845 0.0387481 0.886768 0.5 +-0.0810176 0.109646 0.0372868 0.890241 0.5 +-0.0761893 0.0686573 0.0192806 0.668881 0.5 +-0.0728856 0.148047 -0.0249504 0.266102 0.5 +-0.0606626 0.0738612 0.0409255 0.585721 0.481983 +-0.0862122 0.111364 0.0347412 0.765019 0.5 +-0.0837023 0.110333 0.0361338 0.785971 0.5 +-0.0604546 0.071762 0.0392488 0.669091 0.5 +-0.0639661 0.0690471 0.0355624 0.570875 0.5 +-0.0709391 0.109631 0.0395791 0.5967 0.5 +-0.0776118 0.0739521 0.0284675 0.659616 0.5 +-0.0872579 0.113355 0.0275168 0.55346 0.436108 +-0.0754126 0.068174 0.019879 0.718833 0.348013 +-0.0746432 0.067744 0.0203901 0.749554 0.353488 +-0.0738697 0.0672451 0.0209913 0.736364 0.5 +-0.0616634 0.0612417 -0.00198952 0.272812 0.5 +-0.0607907 0.0609394 -0.0015406 0.250808 0.212991 +-0.0599662 0.0605914 -0.00103222 0.233859 0.237272 +-0.0591948 0.0603156 -0.00052226 0.20088 0.5 +-0.058406 0.0598457 0.000248469 0.244272 0.5 +-0.0731035 0.0667848 0.0215468 0.730289 0.5 +-0.0836103 0.0769236 0.0176347 0.723913 0.5 +-0.0603093 0.0652594 0.0325934 0.476835 0.409404 +-0.0763864 0.109432 0.0420745 0.859117 0.5 +-0.0669825 0.112069 0.0420748 0.265175 0.5 +-0.0723466 0.0663158 0.0221054 0.708173 0.355554 +-0.0529002 0.0701503 0.0387731 0.693549 0.5 +-0.0715611 0.065876 0.0226562 0.532611 0.5 +-0.0625972 0.0348156 0.0215996 0.159525 0.5 +-0.0618525 0.0343021 0.022204 0.319803 0.5 +-0.0609416 0.0341022 0.0225725 0.490042 0.5 +-0.0599506 0.0340585 0.0228145 0.647073 0.5 +-0.0589604 0.0340153 0.0230639 0.808303 0.5 +-0.0579697 0.0339719 0.0233097 0.80838 0.5 +-0.0569766 0.0339283 0.0235563 0.808252 0.5 +-0.055985 0.033885 0.0237996 0.643513 0.5 +-0.0549513 0.0339195 0.0239841 0.497915 0.5 +-0.0539587 0.0338764 0.0242313 0.504315 0.5 +-0.0529285 0.0339107 0.0244154 0.351785 0.5 +-0.0520579 0.0336325 0.0248414 0.183456 0 +-0.0510279 0.0336678 0.0250302 0.17805 0.5 +-0.0438381 0.033833 0.0263899 0.154159 0.5 +-0.0428042 0.0338676 0.0265755 0.165943 0 +-0.0418955 0.0336683 0.02694 0.173414 0.5 +-0.0406946 0.0340162 0.0268873 0.146647 0.5 +-0.0396636 0.0340515 0.0270767 0.274667 0.5 +-0.038588 0.0341641 0.0271976 0.272501 0.5 +-0.0375579 0.0341991 0.0273875 0.475738 0.5 +-0.0365645 0.0341557 0.0276322 0.634651 0.5 +-0.0355318 0.0341909 0.0278174 0.765685 0.5 +-0.0344171 0.0343826 0.0278837 0.724343 0.5 +-0.0332179 0.0347336 0.0278325 0.47832 0.5 +-0.0316694 0.0357391 0.0272619 0.240675 0.5 +-0.0295698 0.0377598 0.0258888 0.346105 0.5 +-0.0285282 0.0378067 0.0260568 0.458637 0.5 +-0.0273965 0.0380183 0.0261038 0.595031 0.5 +-0.0263135 0.0381467 0.0262093 0.761801 0.5 +-0.0252738 0.0381933 0.0263814 0.781317 0.5 +-0.0242309 0.0382399 0.0265535 0.779574 0.5 +-0.0232358 0.0382045 0.0267906 0.781733 0.5 +-0.0221488 0.0383333 0.0268965 0.774112 0.5 +-0.0211531 0.0382979 0.0271326 0.774113 0.5 +-0.0200678 0.0384268 0.0272406 0.783436 0.5 +-0.0190238 0.0384735 0.0274147 0.784309 0.5 +-0.018026 0.0384381 0.0276504 0.791875 0.5 +-0.016985 0.0384848 0.0278228 0.770032 0.5 +-0.0159434 0.0385311 0.027994 0.780083 0.5 +-0.0149461 0.0384961 0.0282276 0.780979 0.5 +-0.0138611 0.0386244 0.0283378 0.770692 0.5 +-0.0128672 0.038589 0.0285719 0.790878 0.5 +-0.0118259 0.0386358 0.028745 0.771854 0.5 +-0.0107858 0.0386823 0.0289151 0.781523 0.5 +-0.00974239 0.0387292 0.0290909 0.793584 0.5 +-0.00870302 0.0387758 0.0292604 0.773642 0.5 +-0.00765915 0.0388225 0.0294318 0.79352 0.5 +-0.00661876 0.0388692 0.029605 0.796097 0.5 +-0.00562206 0.0388337 0.0298422 0.804769 0.5 +-0.00457845 0.0388805 0.0300129 0.784111 0.5 +-0.00353807 0.0389271 0.0301841 0.636004 0.5 +-0.00249575 0.0389742 0.0303561 0.618472 0.5 +-0.00141447 0.0391026 0.0304627 0.619107 0.5 +-0.000370674 0.0391495 0.0306363 0.62789 0.5 +0.000668194 0.039196 0.03081 0.469544 0.5 +0.00170995 0.0392427 0.0309786 0.461964 0.5 +0.00275029 0.0392893 0.0311503 0.461032 0.5 +0.00379349 0.0393361 0.0313217 0.455411 0.5 +0.00483671 0.039382 0.0314929 0.322538 0.5 +0.00578775 0.0392649 0.0317966 0.33008 0.5 +0.00678439 0.0392286 0.0320303 0.334073 0.5 +0.00769138 0.039029 0.0323953 0 0 +0.00842312 0.0385006 0.0330183 0.145044 0 +0.00898082 0.0376394 0.0339008 0.0995688 0.5 +0.00852878 0.034888 0.0362651 0.125418 0.5 +0.0094791 0.0347704 0.0365664 0.281514 0.5 +0.0104341 0.0346525 0.0368683 0.446041 0.5 +0.0114304 0.0346172 0.0371012 0.596984 0.5 +0.0124741 0.0346639 0.0372734 0.754806 0.5 +0.0135129 0.0347107 0.0374491 0.758579 0.5 +0.0145534 0.0347576 0.0376203 0.750979 0.5 +0.0156377 0.0348863 0.0377268 0.762455 0.5 +0.0167263 0.0350159 0.0378322 0.742484 0.5 +0.0178543 0.0352284 0.0378786 0.683406 0.5 +0.0191581 0.0357679 0.0376614 0.457581 0.5 +0.020686 0.0367224 0.0371237 0.270085 0.5 +-0.0707511 0.0654954 0.0231537 0.496437 0.468424 +-0.0699342 0.0651273 0.0236486 0.479 0.432292 +-0.0726405 0.148337 -0.0310398 0.299487 0.5 +-0.0884146 0.113764 0.0250911 0.66788 0.5 +-0.0566436 0.0657735 0.0346839 0.530775 0.5 +-0.0735982 0.110276 0.0438156 0.841205 0.5 +-0.0701455 0.111146 0.0439061 0.709662 0.5 +-0.0722895 0.147809 -0.0265569 0.315227 0.45691 +-0.0699466 0.072981 0.0361776 0.635325 0.5 +-0.0826529 0.0796856 0.0277856 0.638713 0.5 +-0.0672589 0.077344 0.0400985 0.601002 0.5 +-0.0691135 0.0647604 0.0241382 0.472699 0.5 +-0.0682758 0.06442 0.0246162 0.418243 0.5 +-0.0673972 0.0641749 0.025006 0.401177 0.5 +-0.0724789 0.110508 0.0438845 0.80261 0.5 +-0.0706216 0.146831 -0.0255714 0.254968 0.287644 +-0.0797208 0.0757926 0.0264575 0.796361 0.5 +-0.0789826 0.115456 0.0491224 0.58497 0.5 +-0.0665349 0.0638845 0.0254353 0.504221 0.442671 +-0.0656277 0.0636798 0.0258038 0.456825 0.363444 +-0.0719281 0.148635 -0.0350398 0.332566 0.34468 +-0.0705444 0.0712752 0.0339991 0.598665 0.349135 +-0.0714085 0.0715566 0.0335759 0.628029 0.5 +-0.0878261 0.11219 0.0337097 0.43985 0.5 +-0.0882187 0.112165 0.0210064 0.715723 0.5 +-0.0906667 0.113308 0.0195238 0.701678 0.5 +-0.0602113 0.0697286 0.0375341 0.619552 0.467391 +-0.0533892 0.064921 0.0343521 0.727392 0.339264 +-0.0749694 0.0749712 0.0333987 0.722021 0.5 +-0.0888928 0.113895 0.0428033 0.44565 0.5 +-0.0800056 0.108388 0.0313605 0.543118 0.5 +-0.0665906 0.0686018 0.0336345 0.552045 0.5 +-0.0753497 0.108878 0.0391875 0.87184 0.5 +-0.0696851 0.11012 0.0394623 0.580504 0.5 +-0.0663226 0.0771733 0.0404118 0.716196 0.5 +-0.0647148 0.06349 0.0261636 0.651209 0.381018 +-0.0649629 0.0620542 -0.00149187 0.223637 0.294552 +-0.0640739 0.0617863 -0.0011495 0.219824 0.306535 +-0.0633366 0.0613129 -0.000511486 0.299253 0.5 +-0.0625236 0.0609176 -2.19725e-05 0.304514 0.5 +-0.0617103 0.0604885 0.000571471 0.303646 0.320118 +-0.0609112 0.060145 0.00105228 0.310602 0.316902 +-0.0600989 0.0598417 0.00157193 0.26174 0.5 +-0.0592102 0.0595951 0.00211544 0.422412 0.5 +-0.0638018 0.0632948 0.0265284 0.487465 0.5 +-0.0628916 0.0631016 0.0268901 0.667696 0.5 +-0.0619477 0.0629617 0.0272004 0.625207 0.5 +-0.0624949 0.0729745 0.0395167 0.678015 0.5 +-0.0609885 0.0628534 0.0274979 0.584718 0.5 +-0.0735402 0.0708078 0.0302704 0.598992 0.5 +-0.0600389 0.0627348 0.027804 0.577645 0.5 +-0.0640639 0.0351963 0.0227232 0.151328 0.5 +-0.0632785 0.0347611 0.0232648 0.298556 0.5 +-0.0624908 0.0343254 0.0238098 0.470117 0.5 +-0.0615416 0.034204 0.0241166 0.477579 0.5 +-0.0605498 0.0341606 0.0243603 0.635598 0.5 +-0.0595593 0.0341176 0.0246105 0.79686 0.5 +-0.0585687 0.0340745 0.0248573 0.810607 0.5 +-0.0575747 0.034031 0.0251021 0.821976 0.5 +-0.0565822 0.0339881 0.0253464 0.804481 0.5 +-0.0555068 0.0341015 0.0254741 0.628774 0.5 +-0.0544743 0.034136 0.0256577 0.653039 0.5 +-0.0534824 0.0340932 0.0259063 0.497533 0.5 +-0.0524923 0.0340498 0.0261507 0.354926 0.5 +-0.0515024 0.0340065 0.0263967 0.360129 0.5 +-0.0505514 0.0338848 0.0267025 0.183201 0.5 +-0.0495577 0.0338416 0.0269497 0.182505 0.5 +-0.0485662 0.0337988 0.0271958 0.17591 0.5 +-0.0475328 0.0338333 0.0273813 0.177435 0.5 +-0.0465457 0.0337901 0.0276252 0 0 +-0.0455114 0.0338265 0.027816 0.170514 0.5 +-0.0444796 0.0338614 0.0280014 0.34097 0.5 +-0.043447 0.0338958 0.0281851 0.327177 0.5 +-0.0423301 0.0340883 0.0282541 0.342104 0.5 +-0.0412543 0.0342017 0.0283816 0.326781 0.5 +-0.0402218 0.0342366 0.0285657 0.32353 0.5 +-0.0391909 0.0342717 0.0287528 0.477001 0.5 +-0.038197 0.0342285 0.0289964 0.474624 0.5 +-0.0371641 0.0342638 0.0291868 0.624887 0.5 +-0.0361326 0.034299 0.0293707 0.61978 0.5 +-0.0350568 0.0344135 0.0294961 0.579625 0.5 +-0.0338576 0.0347656 0.029445 0.479874 0.5 +-0.0322918 0.0358193 0.0288559 0.331483 0.5 +-0.0303274 0.0375897 0.0276802 0.440591 0.5 +-0.0291528 0.0378835 0.0276599 0.577245 0.5 +-0.028023 0.0380941 0.0277005 0.603189 0.5 +-0.0269831 0.0381412 0.0278748 0.761711 0.5 +-0.0258999 0.0382697 0.0279803 0.770308 0.5 +-0.0249013 0.0382346 0.0282196 0.781742 0.5 +-0.0238582 0.0382811 0.0283891 0.795023 0.5 +-0.0228169 0.0383283 0.0285633 0.774502 0.5 +-0.0217358 0.0384567 0.028668 0.772834 0.5 +-0.0206926 0.0385034 0.0288434 0.781754 0.5 +-0.0196964 0.0384682 0.0290787 0.77041 0.5 +-0.0186121 0.038597 0.0291868 0.783048 0.5 +-0.0176156 0.0385615 0.0294218 0.795183 0.5 +-0.0165731 0.0386082 0.0295958 0.793744 0.5 +-0.0155328 0.0386551 0.0297691 0.794514 0.5 +-0.0145326 0.0386197 0.0300043 0.796319 0.5 +-0.0134912 0.0386664 0.0301779 0.793547 0.5 +-0.0124518 0.038713 0.0303489 0.782983 0.5 +-0.0114113 0.0387598 0.0305221 0.782361 0.5 +-0.0103683 0.0388061 0.0306894 0.793185 0.5 +-0.00937118 0.0387712 0.0309279 0.784154 0.5 +-0.0082877 0.0388999 0.0310374 0.783377 0.5 +-0.00729042 0.0388645 0.0312728 0.62626 0.5 +-0.00620458 0.038993 0.0313778 0.626744 0.5 +-0.0052065 0.0389581 0.0316148 0.628286 0.5 +-0.00412302 0.0390868 0.0317249 0.637282 0.5 +-0.00312706 0.0390512 0.0319597 0.483038 0.5 +-0.00208274 0.0390983 0.0321346 0.462668 0.5 +-0.00104546 0.0391448 0.0323048 0.455977 0.5 +4.37647e-05 0.0392736 0.0324137 0.461541 0.5 +0.0010398 0.0392387 0.0326514 0.312269 0.5 +0.00208256 0.0392848 0.0328214 0.317751 0.5 +0.00307915 0.03925 0.0330573 0.314536 0.5 +0.00416104 0.0393786 0.0331643 0.303399 0.5 +0.00524969 0.0395071 0.0332712 0.163796 0.5 +0.00624218 0.039472 0.0335072 0 0 +0.00481949 0.0349074 0.0372909 0.146347 0.5 +0.0057743 0.0347896 0.0375885 0.151307 0.5 +0.00672447 0.0346721 0.0378883 0.150565 0.5 +0.00772286 0.0346363 0.0381279 0.294412 0.5 +0.00872274 0.0346011 0.0383625 0.289196 0.5 +0.00976325 0.0346476 0.0385339 0.451562 0.5 +0.0107598 0.0346122 0.0387698 0.618712 0.5 +0.0118001 0.034659 0.0389456 0.745679 0.5 +0.0128427 0.034706 0.0391137 0.748573 0.5 +0.0139247 0.0348347 0.0392218 0.751359 0.5 +0.0150108 0.0349639 0.0393317 0.762936 0.5 +0.0160525 0.0350115 0.0395034 0.744443 0.5 +0.0172278 0.0353072 0.0394845 0.699161 0.5 +0.0185294 0.0358466 0.0392699 0.490817 0.5 +0.0199235 0.0365522 0.038924 0.296815 0.5 +-0.0590903 0.0626036 0.0281123 0.572305 0.5 +-0.0738874 0.0695898 0.0277412 0.715187 0.225054 +-0.0846331 0.0781756 0.0181083 0.77731 0.5 +-0.0746876 0.0700138 0.0272066 0.72901 0.5 +-0.0815914 0.0767239 0.0235201 0.82368 0.5 +-0.053995 0.0675039 0.0372692 0.62965 0.5 +-0.0471085 0.0683456 0.0397676 0.691304 0.5 +-0.0730641 0.148297 -0.027137 0.357218 0.5 +-0.0690473 0.0727409 0.0365464 0.530251 0.5 +-0.0714849 0.147284 -0.0260827 0.222098 0.345404 +-0.0581322 0.0624985 0.0284102 0.525821 0.5 +-0.0623671 0.0719748 0.0386642 0.658743 0.5 +-0.078333 0.108337 0.035368 0.557371 0.432791 +-0.0571803 0.062383 0.0287138 0.43107 0.5 +-0.0786738 0.10815 0.0335843 0.432571 0.465519 +-0.0781467 0.116431 0.0503206 0.551838 0.45597 +-0.0478952 0.0713156 0.0406183 0.75855 0.5 +-0.0795217 0.0748572 0.0255446 0.814182 0.5 +-0.0705201 0.0646959 0.0221381 0.503205 0.5 +-0.0810085 0.1097 0.0318734 0.574768 0.5 +-0.0516777 0.0668198 0.0365892 0.643775 0.5 +-0.0488766 0.0663121 0.037594 0.651637 0.5 +-0.065916 0.0662086 0.0305519 0.456086 0.475738 +-0.0709356 0.0780686 0.0386829 0.608298 0.5 +-0.0697163 0.064282 0.022673 0.472036 0.5 +-0.0876727 0.111787 0.0358475 0.458595 0.5 +-0.0740415 0.112641 0.0489542 0.342356 0.5 +-0.0838901 0.110998 0.0281595 0.541289 0.301826 +-0.0901723 0.112303 0.0149799 0.517434 0.5 +-0.0726772 0.112018 0.047983 0.391068 0.449106 +-0.0845701 0.112449 0.0449336 0.485183 0.443168 +-0.0827936 0.110133 0.0365 0.820824 0.5 +-0.0792829 0.109073 0.0381388 0.911242 0.5 +-0.0742647 0.109022 0.03931 0.855721 0.5 +-0.0750736 0.0773173 0.0349007 0.770438 0.5 +-0.0813565 0.109598 0.0300528 0.433731 0.5 +-0.0664934 0.0624679 -0.000297249 0.19844 0.375465 +-0.0655849 0.0622273 0.00026904 0.442355 0.5 +-0.0648107 0.0617811 0.00082735 0.413009 0.5 +-0.0641258 0.0611318 0.00140431 0.333039 0.5 +-0.0633435 0.060722 0.00207171 0.552236 0.5 +-0.0625031 0.0602955 0.00246046 0.355612 0.399366 +-0.061699 0.0599431 0.00295203 0.355075 0.399808 +-0.0607891 0.0597911 0.00342454 0.572691 0.5 +-0.0599288 0.0595089 0.00385673 0.431201 0.5 +-0.0591944 0.0589798 0.00447595 0.426675 0.5 +-0.0585951 0.0582039 0.0052961 0.440083 0.5 +-0.07435 0.0711851 0.0297739 0.588351 0.473629 +-0.0883363 0.112382 0.0405773 0.419369 0.5 +-0.0835056 0.0777286 0.0204901 0.779477 0.5 +-0.0765009 0.0716493 0.0271716 0.621405 0.5 +-0.0732 0.113624 0.050147 0.435738 0.438865 +-0.0647046 0.0352193 0.0243246 0 0 +-0.06396 0.034704 0.0249317 0.305741 0.5 +-0.0631313 0.0343469 0.025414 0.482659 0.5 +-0.0621816 0.0342254 0.0257179 0.635422 0.5 +-0.0611919 0.0341824 0.0259657 0.623399 0.5 +-0.0601957 0.0341396 0.0262143 0.773794 0.5 +-0.0591643 0.0341749 0.0263998 0.776817 0.5 +-0.0581312 0.0342101 0.0265873 0.789511 0.5 +-0.0571418 0.0341673 0.0268338 0.81092 0.5 +-0.0561495 0.0341243 0.0270787 0.792879 0.5 +-0.0551152 0.0341599 0.0272668 0.78055 0.5 +-0.0540847 0.0341953 0.0274512 0.62626 0.5 +-0.053009 0.0343093 0.0275811 0.479424 0.5 +-0.0519767 0.0343446 0.0277664 0.498928 0.5 +-0.0509876 0.0343016 0.0280109 0.345787 0.5 +-0.0499923 0.0342577 0.028256 0.352078 0.5 +-0.0490427 0.0341369 0.0285626 0.356114 0.5 +-0.0480122 0.0341726 0.0287503 0.343739 0.5 +-0.0469776 0.034208 0.0289371 0.353036 0.5 +-0.0459855 0.0341655 0.0291843 0.349199 0.5 +-0.0449113 0.0342791 0.0293115 0.344994 0.5 +-0.0438782 0.0343145 0.0294954 0.510388 0.5 +-0.0428028 0.034428 0.0296237 0.496097 0.5 +-0.0418108 0.0343847 0.029868 0.496856 0.5 +-0.0408221 0.0343419 0.0301151 0.485482 0.5 +-0.0398304 0.034299 0.0303636 0.467555 0.5 +-0.0387951 0.0343342 0.0305488 0.63179 0.5 +-0.0378047 0.0342916 0.0307956 0.633348 0.5 +-0.036771 0.0343273 0.0309808 0.617602 0.5 +-0.0357 0.0344414 0.0311095 0.434384 0.5 +-0.0345003 0.0347932 0.0310568 0.360809 0.5 +-0.0330138 0.0356955 0.0305887 0.248514 0.5 +-0.0309502 0.0376665 0.0292806 0.326005 0.5 +-0.0298246 0.0378766 0.0293214 0.453839 0.5 +-0.0286941 0.0380883 0.0293671 0.593042 0.5 +-0.0276072 0.038217 0.0294729 0.620325 0.5 +-0.0265686 0.0382637 0.0296453 0.783767 0.5 +-0.025528 0.0383109 0.0298198 0.772317 0.5 +-0.0244403 0.0384399 0.0299279 0.786128 0.5 +-0.0233997 0.0384863 0.0301002 0.806699 0.5 +-0.0224026 0.0384511 0.0303351 0.796092 0.5 +-0.0213641 0.0384977 0.0305062 0.783844 0.5 +-0.0203244 0.0385446 0.0306811 0.793379 0.5 +-0.0192836 0.0385916 0.0308544 0.773339 0.5 +-0.0182416 0.0386382 0.0310248 0.784147 0.5 +-0.0171561 0.0387671 0.0311342 0.794902 0.5 +-0.0161996 0.0386499 0.0314325 0.794839 0.5 +-0.0151193 0.0387785 0.0315419 0.785374 0.5 +-0.0140741 0.0388251 0.0317136 0.806598 0.5 +-0.0130807 0.0387897 0.0319484 0.806771 0.5 +-0.0120362 0.0388366 0.0321214 0.794316 0.5 +-0.010995 0.0388834 0.0322933 0.627714 0.5 +-0.00995429 0.0389301 0.0324647 0.646722 0.5 +-0.0089161 0.0389771 0.0326408 0.63728 0.5 +-0.00787248 0.0390234 0.0328097 0.643616 0.5 +-0.00687536 0.0389886 0.0330493 0.47729 0.5 +-0.00583756 0.0390351 0.0332216 0.470371 0.5 +-0.00474995 0.0391641 0.0333259 0.456916 0.5 +-0.0037108 0.0392109 0.0335024 0.474939 0.5 +-0.00270958 0.0391757 0.033738 0.317693 0.5 +-0.00167056 0.0392225 0.0339103 0.318169 0.5 +-0.000627469 0.039269 0.0340794 0.314993 0.5 +0.000412609 0.0393166 0.0342543 0.317179 0.5 +0.00149398 0.0394449 0.0343588 0 0 +0.00253507 0.0394917 0.0345311 0 0 +0.00357616 0.0395385 0.0347033 0 0 +0.00206776 0.0348089 0.0386094 0.145087 0.5 +0.00310705 0.0348555 0.0387811 0.142076 0.5 +0.00406092 0.0347375 0.0390843 0.294062 0.5 +0.00506037 0.0347021 0.0393176 0.295269 0.5 +0.00605741 0.0346665 0.039556 0.302356 0.5 +0.00705252 0.0346309 0.0397936 0.312952 0.5 +0.00800637 0.0345135 0.0400968 0.471866 0.5 +0.00904539 0.03456 0.0402645 0.448786 0.5 +0.0101351 0.0346886 0.0403762 0.624679 0.5 +0.0110844 0.0345718 0.0406762 0.78395 0.5 +0.0121734 0.0347014 0.0407838 0.765739 0.5 +0.0132581 0.0348304 0.0408908 0.779059 0.5 +0.0143393 0.0349605 0.0410018 0.792895 0.5 +0.0154275 0.0350916 0.0411096 0.774633 0.5 +0.0166879 0.0355485 0.0409566 0.709755 0.5 +0.0179499 0.0360095 0.0408071 0.505842 0.5 +0.0193853 0.0367967 0.0404 0.31691 0.5 +-0.0750911 0.110634 0.0449752 0.497934 0.5 +-0.0461472 0.0695191 0.0407559 0.597612 0.48718 +-0.0504873 0.0646576 0.0351978 0.760399 0.5 +-0.0771635 0.0705018 0.0227664 0.751555 0.5 +-0.0845698 0.111358 0.0279354 0.485933 0.45124 +-0.0694123 0.111827 0.045291 0.430855 0.394727 +0.0328934 0.0381571 -2.41096e-05 0.227358 0.5 +-0.0489211 0.0687544 0.0390214 0.695085 0.5 +-0.0806729 0.108958 0.0307202 0.450096 0.5 +-0.0772929 0.117422 0.0514809 0.588029 0.479603 +-0.0688718 0.063973 0.0231175 0.433549 0.5 +-0.0741812 0.074527 0.0339368 0.716523 0.5 +-0.0857367 0.111526 0.0418488 0.538855 0.445186 +-0.0900294 0.114549 0.0240977 0.723105 0.5 +-0.0762889 0.0738479 0.0305832 0.685049 0.5 +-0.0718306 0.148291 -0.0327712 0.312039 0.374145 +-0.0709615 0.148056 -0.0324394 0.335529 0.5 +-0.077237 0.0721326 0.0266059 0.618303 0.481547 +-0.0776097 0.0796169 0.0342011 0.747645 0.5 +-0.0784316 0.0799342 0.0337318 0.731638 0.5 +-0.0716235 0.0693585 0.0301698 0.547824 0.5 +-0.0722612 0.0718535 0.0331389 0.62574 0.440245 +-0.0731823 0.109139 0.039466 0.382286 0.5 +-0.0530638 0.0723343 0.0404003 0.711215 0.5 +-0.0593755 0.0706339 0.0387044 0.545636 0.5 +-0.0658455 0.0693268 0.0349111 0.560631 0.5 +-0.073067 0.0692219 0.0282366 0.711061 0.5 +-0.0790124 0.0782686 0.0315155 0.668642 0.5 +-0.0615125 0.0729203 0.0397926 0.676145 0.5 +-0.0811474 0.0769537 0.0251701 0.787297 0.5 +-0.0794408 0.0768726 0.0291038 0.629166 0.5 +-0.0762457 0.0708701 0.0261488 0.598856 0.5 +-0.0818834 0.109932 0.0368633 0.864155 0.5 +-0.0783295 0.108958 0.0384425 0.903382 0.5 +-0.0820552 0.1102 0.0401793 0.89611 0.5 +-0.0685972 0.0635876 0.000162346 0.216313 0.5 +-0.0678684 0.063022 0.000880975 0.28496 0.5 +-0.0670934 0.0625692 0.00143601 0.260688 0.5 +-0.0663487 0.06206 0.00207137 0.567174 0.5 +-0.0656059 0.0615317 0.0026003 0.314662 0.5 +-0.0649369 0.0609076 0.00327394 0.418078 0.418868 +-0.0640613 0.0606361 0.00380817 0.75022 0.5 +-0.0632614 0.0601538 0.00426714 0.415889 0.434023 +-0.0624172 0.0599054 0.00479638 0.712432 0.5 +-0.0615968 0.0595411 0.0052883 0.573398 0.5 +-0.0607324 0.0592584 0.00571875 0.573478 0.5 +-0.0599121 0.0588939 0.00621161 0.598071 0.5 +-0.0591334 0.0584459 0.00677121 0.663277 0.5 +-0.0583127 0.0580812 0.00726379 0.711233 0.5 +-0.0679573 0.0636968 0.0236258 0.421023 0.440196 +-0.0678369 0.0706443 0.0351197 0.573989 0.466987 +-0.0661037 0.0713259 0.0366501 0.517329 0.47666 +-0.0786437 0.112204 0.0464731 0.550212 0.5 +-0.0583387 0.0706756 0.0389009 0.650967 0.5 +-0.0645999 0.0347243 0.0265296 0.301781 0.5 +-0.0637307 0.0344451 0.0269565 0.488059 0.5 +-0.0627783 0.0343233 0.0272634 0.652579 0.5 +-0.0618294 0.0342021 0.0275686 0.800675 0.5 +-0.0608362 0.0341593 0.0278122 0.786824 0.5 +-0.0598038 0.0341949 0.0280011 0.787057 0.5 +-0.0588141 0.0341524 0.0282501 0.776631 0.5 +-0.0577792 0.0341881 0.0284371 0.776335 0.5 +-0.0567453 0.0342237 0.02862 0.778307 0.5 +-0.0557138 0.0342594 0.0288064 0.782215 0.5 +-0.0546814 0.0342953 0.0289953 0.791235 0.5 +-0.0536509 0.0343311 0.0291848 0.61553 0.5 +-0.0526183 0.0343668 0.0293685 0.612102 0.5 +-0.0515819 0.0344024 0.0295565 0.466807 0.5 +-0.0505908 0.03436 0.0298011 0.474578 0.5 +-0.049518 0.0344739 0.029929 0.485845 0.5 +-0.0485262 0.0344313 0.0301756 0.491915 0.5 +-0.0474955 0.0344671 0.0303636 0.485743 0.5 +-0.0464591 0.0345029 0.0305523 0.49304 0.5 +-0.0454276 0.0345386 0.0307405 0.48742 0.5 +-0.0444358 0.0344955 0.0309851 0.494271 0.5 +-0.0434472 0.0344528 0.0312293 0.624148 0.5 +-0.0424147 0.0344885 0.0314161 0.628945 0.5 +-0.0414211 0.0344456 0.0316667 0.645414 0.5 +-0.0404715 0.0343242 0.0319689 0.647471 0.5 +-0.0394369 0.03436 0.0321562 0.624399 0.5 +-0.0384034 0.0343958 0.0323426 0.779212 0.5 +-0.0373724 0.0344314 0.0325332 0.62313 0.5 +-0.0363397 0.0344675 0.0327184 0.443751 0.5 +-0.0352216 0.0346633 0.0327857 0.246099 0.5 +-0.0337394 0.0355643 0.0323212 0.159267 0.5 +-0.0317094 0.0374952 0.0310681 0.178238 0.5 +-0.0303619 0.0381166 0.0307902 0.29796 0.5 +-0.0293203 0.0381642 0.0309659 0.459514 0.5 +-0.0282335 0.0382933 0.0310718 0.466483 0.5 +-0.0271496 0.0384219 0.0311819 0.646468 0.5 +-0.0261534 0.0383869 0.0314189 0.636987 0.5 +-0.0250671 0.0385158 0.031526 0.61963 0.5 +-0.0240288 0.0385625 0.0316972 0.782454 0.5 +-0.0229882 0.0386094 0.0318708 0.794411 0.5 +-0.0219433 0.0386564 0.0320445 0.795858 0.5 +-0.020906 0.0387029 0.0322136 0.806652 0.5 +-0.019905 0.038668 0.0324503 0.79598 0.5 +-0.0188227 0.0387965 0.0325596 0.783839 0.5 +-0.0178239 0.0387614 0.0327968 0.783898 0.5 +-0.0167827 0.0388081 0.0329676 0.807143 0.5 +-0.015743 0.0388551 0.0331436 0.795834 0.5 +-0.0147028 0.0389017 0.0333119 0.626251 0.5 +-0.0136601 0.0389486 0.0334846 0.636015 0.5 +-0.0126221 0.0389953 0.033657 0.645407 0.5 +-0.0116226 0.0389602 0.0338935 0.637204 0.5 +-0.010539 0.0390893 0.0340058 0.471079 0.5 +-0.00949675 0.039136 0.0341772 0.483706 0.5 +-0.00850193 0.0391005 0.0344133 0.482688 0.5 +-0.00746087 0.0391472 0.0345828 0.476902 0.5 +-0.0064158 0.0391939 0.0347568 0.323668 0.5 +-0.00542063 0.0391587 0.0349931 0.323596 0.5 +-0.00437946 0.039206 0.0351678 0.313949 0.5 +-0.00333997 0.039253 0.0353398 0.317611 0.5 +-0.00225491 0.0393816 0.0354457 0.160326 0 +-0.00121535 0.0394284 0.0356173 0 0 +-0.000130337 0.0395577 0.0357254 0 0 +-0.00150449 0.0350731 0.0394353 0.139343 0 +-0.000642523 0.0347913 0.0398677 0.144769 0.5 +0.000357196 0.0347559 0.0401008 0.148606 0.5 +0.00135578 0.0347199 0.040341 0.302375 0.5 +0.00230798 0.0346028 0.0406387 0.298099 0.5 +0.0033481 0.0346494 0.040814 0.296055 0.5 +0.00434602 0.0346139 0.0410512 0.462525 0.5 +0.00533966 0.0345787 0.0412861 0.460398 0.5 +0.00638447 0.0346255 0.0414585 0.468601 0.5 +0.00742535 0.0346722 0.0416328 0.483123 0.5 +0.0084218 0.0346373 0.0418695 0.647625 0.5 +0.00946024 0.0346841 0.0420404 0.642932 0.5 +0.0105031 0.0347322 0.0422156 0.839498 0.5 +0.0115864 0.0348612 0.0423222 0.810716 0.5 +0.0127157 0.0350729 0.0423657 0.816782 0.5 +0.0138473 0.035286 0.0424107 0.819273 0.5 +0.0150176 0.0355797 0.04239 0.796588 0.5 +0.0162371 0.0359566 0.0423025 0.713932 0.5 +0.0175395 0.0364962 0.0420884 0.508176 0.5 +0.0191093 0.0375318 0.0414884 0.30357 0.5 +-0.0571999 0.0684533 0.0375014 0.585167 0.5 +-0.0690356 0.068492 0.0314599 0.521049 0.5 +-0.0841907 0.078353 0.0198111 0.797217 0.5 +-0.0915979 0.115467 0.0229868 0.775542 0.5 +-0.089042 0.112536 0.0205154 0.700919 0.366244 +-0.0703751 0.112557 0.0480687 0.365635 0.441735 +-0.0802487 0.109228 0.032428 0.587245 0.5 +-0.0709316 0.147597 -0.0300096 0.413253 0.5 +-0.0904058 0.114907 0.0416618 0.503964 0.5 +-0.0709978 0.0698591 0.0316215 0.569993 0.5 +-0.0736852 0.109489 0.0408578 0.79039 0.5 +-0.0575351 0.0727864 0.0407731 0.687074 0.5 +-0.0671149 0.0634665 0.0239226 0.392201 0.392353 +-0.0797379 0.0738711 0.0228323 0.76728 0.5 +-0.0807044 0.109603 0.0338418 0.523672 0.5 +-0.0815406 0.110006 0.0333062 0.829141 0.5 +-0.0863885 0.112851 0.0441987 0.401595 0.5 +-0.0776245 0.0703136 0.0210685 0.749327 0.5 +-0.0539828 0.0700164 0.038652 0.679804 0.5 +-0.0780099 0.114072 0.0486721 0.524966 0.5 +-0.0883907 0.115479 0.0451949 0.611554 0.5 +-0.0662482 0.063188 0.0243484 0.380118 0.5 +-0.0681894 0.0774836 0.0397476 0.598833 0.45695 +-0.0796979 0.108952 0.0363543 0.914012 0.5 +-0.072774 0.10871 0.0380686 0.301338 0.5 +-0.0702718 0.110271 0.0410027 0.719098 0.5 +-0.0737602 0.111876 0.0478461 0.395128 0.5 +-0.0819685 0.0791215 0.0284136 0.648545 0.473239 +-0.0741385 0.0703655 0.0287707 0.585871 0.5 +-0.0663881 0.0677373 0.0326703 0.52406 0.398383 +-0.0843239 0.0775269 0.0169616 0.711922 0.5 +-0.0788364 0.0742331 0.0262211 0.636781 0.478965 +-0.0653424 0.0629827 0.0247148 0.367266 0.5 +-0.0621483 0.0699034 0.036962 0.629218 0.5 +-0.0764561 0.106685 0.0353026 0.448995 0.5 +-0.0912918 0.116401 0.0420373 0.618668 0.5 +-0.0699457 0.0641869 0.00125597 0.298078 0.5 +-0.0692702 0.0635509 0.00193084 0.35253 0.373834 +-0.0686182 0.0628687 0.0026871 0.548158 0.5 +-0.0679313 0.0622594 0.0032802 0.323773 0.5 +-0.0671124 0.0618759 0.00376788 0.394557 0.432781 +-0.0664685 0.0611724 0.00451786 0.416766 0.5 +-0.0656404 0.0608118 0.00501538 0.445585 0.5 +-0.0647331 0.0606321 0.00547671 0.736001 0.5 +-0.0639975 0.0601011 0.00610183 0.716255 0.5 +-0.0631791 0.0597373 0.0065938 0.747091 0.5 +-0.0623104 0.0594537 0.00702264 0.75689 0.5 +-0.0614906 0.0590888 0.0075192 0.739578 0.5 +-0.060628 0.0588072 0.00794551 0.757235 0.5 +-0.059761 0.058524 0.00837605 0.792852 0.5 +-0.0588983 0.0582416 0.00880815 0.645539 0.5 +-0.0580325 0.0579587 0.00923969 0.673431 0.5 +-0.0571684 0.0576767 0.00966588 0.521562 0.5 +-0.0874433 0.114073 0.0447649 0.482342 0.5 +-0.0805357 0.113778 0.0465863 0.614195 0.5 +-0.0698996 0.147518 -0.0298062 0.352957 0.5 +-0.0652367 0.0347413 0.0281307 0.319236 0.5 +-0.064327 0.034541 0.0284972 0.485311 0.5 +-0.0633751 0.0344193 0.0288044 0.640929 0.5 +-0.0624258 0.0342984 0.0291094 0.800076 0.5 +-0.0614326 0.0342559 0.0293559 0.795391 0.5 +-0.0604029 0.0342918 0.0295439 0.775713 0.5 +-0.059412 0.0342492 0.0297869 0.788892 0.5 +-0.0583799 0.0342852 0.0299739 0.799932 0.5 +-0.0573888 0.0342428 0.0302238 0.788965 0.5 +-0.0563521 0.0342791 0.0304121 0.76903 0.5 +-0.0552807 0.0343936 0.0305403 0.769936 0.5 +-0.0542898 0.0343509 0.030786 0.78711 0.5 +-0.0532563 0.0343869 0.0309731 0.775548 0.5 +-0.0522635 0.0343446 0.0312176 0.614306 0.5 +-0.0511913 0.034459 0.0313456 0.623486 0.5 +-0.050201 0.0344166 0.0315946 0.623707 0.5 +-0.0491641 0.0344528 0.0317811 0.623144 0.5 +-0.0481341 0.0344887 0.0319692 0.623254 0.5 +-0.0470988 0.0345244 0.0321531 0.620882 0.5 +-0.0461113 0.034482 0.0324006 0.613486 0.5 +-0.0450377 0.0345968 0.0325315 0.62389 0.5 +-0.0440834 0.0344755 0.0328349 0.647357 0.5 +-0.0430533 0.0345113 0.0330204 0.785352 0.5 +-0.0420606 0.0344689 0.0332688 0.774121 0.5 +-0.0410286 0.0345047 0.0334549 0.797721 0.5 +-0.0400348 0.0344619 0.0337052 0.796857 0.5 +-0.0390449 0.0344196 0.0339502 0.776555 0.5 +-0.0380117 0.0344553 0.0341354 0.618952 0.5 +-0.0370213 0.0344129 0.0343812 0.457911 0.5 +-0.0359892 0.0344491 0.0345711 0.2838 0.5 +-0.0348346 0.0347214 0.0345782 0 0 +-0.0325248 0.0371997 0.032926 0 0 +-0.0309847 0.0381919 0.0323901 0.142553 0.5 +-0.029988 0.0381577 0.0326274 0.306648 0.5 +-0.0288195 0.0384506 0.0326078 0.293091 0.5 +-0.0277318 0.0385796 0.0327127 0.47234 0.5 +-0.0267368 0.0385445 0.0329521 0.489262 0.5 +-0.0256953 0.0385914 0.0331228 0.47282 0.5 +-0.0246526 0.0386383 0.0332956 0.647018 0.5 +-0.0236112 0.0386852 0.0334692 0.635458 0.5 +-0.0225694 0.0387321 0.0336407 0.627396 0.5 +-0.0215296 0.0387791 0.0338148 0.635447 0.5 +-0.0204882 0.0388257 0.0339872 0.64358 0.5 +-0.019491 0.0387907 0.0342254 0.636218 0.5 +-0.018449 0.0388382 0.0343981 0.628246 0.5 +-0.0173678 0.0389666 0.0345056 0.637927 0.5 +-0.0163248 0.0390132 0.0346782 0.643193 0.5 +-0.0153278 0.0389782 0.0349161 0.633372 0.5 +-0.0142885 0.0390252 0.0350884 0.470049 0.5 +-0.0132478 0.039072 0.0352601 0.477335 0.5 +-0.0122029 0.0391189 0.0354325 0.483641 0.5 +-0.0111634 0.0391658 0.035606 0.469801 0.5 +-0.0101249 0.0392126 0.0357767 0.313508 0.5 +-0.00908444 0.0392597 0.0359512 0.327299 0.5 +-0.00808629 0.0392239 0.0361848 0.328321 0.5 +-0.00704598 0.0392708 0.0363567 0.318726 0.5 +-0.00596208 0.0394 0.0364646 0 0 +-0.00496131 0.0393649 0.0367022 0.16388 0 +-0.00388013 0.0394939 0.0368098 0 0 +-0.00525238 0.0350087 0.0405181 0.145365 0.5 +-0.0042992 0.0348909 0.0408189 0.148122 0.5 +-0.00334607 0.0347739 0.0411187 0.141435 0.5 +-0.00230838 0.0348204 0.04129 0.288405 0.5 +-0.00139702 0.0346206 0.0416594 0.300279 0.5 +-0.000357095 0.0346671 0.0418309 0.299345 0.5 +0.000637516 0.0346318 0.0420689 0.300065 0.5 +0.00168043 0.0346784 0.042239 0.470945 0.5 +0.00263147 0.0345612 0.0425417 0.470401 0.5 +0.00371763 0.0346901 0.0426483 0.478482 0.5 +0.00471758 0.0346554 0.0428856 0.648636 0.5 +0.00579855 0.0347845 0.042995 0.661256 0.5 +0.00679863 0.0347495 0.0432322 0.68194 0.5 +0.00783805 0.034796 0.0434029 0.682162 0.5 +0.00892319 0.0349264 0.0435129 0.845243 0.5 +0.0100519 0.0351376 0.0435561 0.860607 0.5 +0.0111358 0.0352671 0.0436641 0.8514 0.5 +0.0123077 0.035562 0.0436453 0.825916 0.5 +0.013481 0.0358562 0.0436245 0.820041 0.5 +0.0146552 0.0361528 0.0436042 0.771919 0.5 +0.0159163 0.0366121 0.0434543 0.666188 0.5 +0.017353 0.0374009 0.0430484 0.427453 0.5 +-0.054142 0.0722337 0.0402304 0.724515 0.5 +-0.0732672 0.148476 -0.0292583 0.325299 0.5 +-0.0592544 0.0696245 0.0378273 0.606352 0.369066 +-0.0791696 0.110508 0.0441428 0.434904 0.43875 +-0.084864 0.0789836 0.0191297 0.618524 0.5 +-0.0866023 0.111811 0.0414218 0.961926 0.5 +-0.0783316 0.0788746 0.032897 0.706102 0.5 +-0.0656715 0.0684169 0.0339875 0.535611 0.5 +-0.0798351 0.078638 0.0310296 0.654802 0.5 +-0.0718144 0.147892 -0.0304457 0.388261 0.5 +-0.0774544 0.072993 0.0275707 0.63388 0.5 +-0.074969 0.105672 0.0364824 0.373511 0.5 +-0.0897323 0.115129 0.0291209 0.567575 0.5 +-0.0736758 0.108402 0.0380105 0.523266 0.348661 +-0.0917527 0.113836 0.0170127 0.695766 0.5 +-0.0778809 0.0759658 0.0302027 0.675673 0.5 +-0.0763852 0.114637 0.0504008 0.436064 0.5 +-0.0754368 0.114522 0.050709 0.399872 0.471514 +-0.0689113 0.147966 -0.0319204 0.36316 0.5 +-0.0644389 0.0627719 0.0250864 0.343444 0.467842 +-0.0573916 0.0718042 0.0398933 0.654441 0.5 +-0.0628591 0.0679841 0.0349557 0.643897 0.5 +-0.0815439 0.112456 0.0456165 0.412276 0.5 +-0.089106 0.114375 0.0298659 0.500511 0.5 +-0.0787919 0.108745 0.0367247 0.507202 0.449038 +-0.0716176 0.109058 0.0379622 0.294432 0.5 +-0.0635722 0.0753573 0.0407707 0.604732 0.5 +-0.081811 0.11456 0.047449 0.505988 0.5 +-0.0733102 0.0700068 0.0292571 0.559826 0.471894 +-0.0543842 0.064934 0.034129 0.558089 0.369627 +-0.0762359 0.113613 0.0494664 0.461198 0.5 +-0.0710378 0.113905 0.0504272 0.397759 0.397455 +-0.0870678 0.11107 0.0203515 0.705456 0.335246 +-0.08807 0.113074 0.0239452 0.712093 0.5 +-0.0880799 0.113511 0.0432934 0.431474 0.5 +-0.063535 0.0741856 0.0400495 0.585383 0.42557 +-0.0712771 0.0648585 0.00216525 0.323436 0.5 +-0.0707579 0.0639499 0.00302292 0.260474 0.5 +-0.0701244 0.0632147 0.00385793 0.409406 0.5 +-0.0693763 0.0627096 0.00438827 0.395063 0.446652 +-0.0686887 0.0620968 0.00507892 0.379477 0.5 +-0.0679779 0.0615132 0.00568001 0.414751 0.410544 +-0.0671756 0.0610764 0.00625684 0.425189 0.425666 +-0.0663134 0.0608279 0.00678018 0.746952 0.5 +-0.0654938 0.0604629 0.00727621 0.729101 0.5 +-0.064714 0.0600149 0.00783247 0.767918 0.5 +-0.0638509 0.0597328 0.00826283 0.781386 0.5 +-0.0629834 0.0594485 0.00869517 0.756049 0.5 +-0.0622043 0.0590015 0.0092504 0.741999 0.5 +-0.0613392 0.0587193 0.00967832 0.765359 0.5 +-0.0604332 0.0585193 0.0100455 0.763486 0.5 +-0.0596113 0.0581543 0.0105384 0.774442 0.5 +-0.0587034 0.0579543 0.010904 0.631809 0.5 +-0.0577953 0.0577539 0.0112722 0.475254 0.5 +-0.056974 0.0573893 0.011763 0.321449 0.5 +-0.0561079 0.0571065 0.0121919 0 0 +-0.0763966 0.0748983 0.0314167 0.712594 0.5 +-0.0657931 0.0349145 0.0296068 0.319996 0.5 +-0.0649682 0.034557 0.0300942 0.489314 0.5 +-0.0640156 0.0344353 0.0303981 0.627994 0.5 +-0.0630637 0.0343143 0.0307056 0.77721 0.5 +-0.0620323 0.0343503 0.0308946 0.791757 0.5 +-0.0610813 0.0342293 0.0311986 0.784225 0.5 +-0.0600467 0.0342661 0.0313871 0.766311 0.5 +-0.0589753 0.0343808 0.0315144 0.76899 0.5 +-0.0579822 0.0343384 0.0317603 0.797189 0.5 +-0.0569508 0.0343746 0.0319473 0.78832 0.5 +-0.055962 0.0343325 0.0321978 0.769216 0.5 +-0.0548852 0.0344475 0.0323271 0.778252 0.5 +-0.0538957 0.0344051 0.0325721 0.786501 0.5 +-0.0528594 0.0344415 0.0327571 0.777176 0.5 +-0.0518302 0.0344778 0.0329457 0.766302 0.5 +-0.0507965 0.0345143 0.033135 0.767063 0.5 +-0.0497628 0.0345507 0.0333201 0.777741 0.5 +-0.0487306 0.0345868 0.0335095 0.776151 0.5 +-0.0477419 0.0345444 0.0337565 0.77344 0.5 +-0.0467094 0.0345808 0.0339444 0.773996 0.5 +-0.0457163 0.0345386 0.0341935 0.756777 0.5 +-0.0446433 0.0346533 0.0343218 0.776425 0.5 +-0.0436529 0.0346111 0.0345638 0.79444 0.5 +-0.0426992 0.0344898 0.0348747 0.790887 0.5 +-0.0416698 0.0345261 0.0350582 0.762714 0.5 +-0.0406764 0.0344836 0.0353061 0.779065 0.5 +-0.0396848 0.0344413 0.0355548 0.773584 0.5 +-0.0386513 0.0344774 0.0357393 0.775657 0.5 +-0.0376617 0.0344352 0.0359896 0.628019 0.5 +-0.0366298 0.0344715 0.0361774 0.471597 0.5 +-0.0356761 0.0343506 0.0364799 0.301667 0.5 +-0.0346028 0.0344648 0.0366099 0.154826 0.5 +-0.0336564 0.0343441 0.0369141 0 0 +-0.030565 0.0383245 0.0341404 0 0 +-0.0295276 0.0383617 0.0343291 0.146795 0.5 +-0.0284001 0.0385729 0.034376 0.2917 0.5 +-0.0273153 0.0387018 0.0344821 0.306916 0.5 +-0.0263193 0.0386673 0.0347214 0.31541 0.5 +-0.0251898 0.0388783 0.0347661 0.480271 0.5 +-0.0241934 0.0388427 0.0350005 0.496735 0.5 +-0.0231943 0.0388081 0.0352395 0.47775 0.5 +-0.0221125 0.0389367 0.0353489 0.476465 0.5 +-0.0211148 0.0389017 0.0355855 0.476464 0.5 +-0.0200738 0.0389483 0.0357554 0.483919 0.5 +-0.0190315 0.0389958 0.035931 0.471272 0.5 +-0.0179472 0.0391243 0.0360362 0.472556 0.5 +-0.0169495 0.0390889 0.0362738 0.488542 0.5 +-0.0159529 0.0390542 0.0365141 0.482207 0.5 +-0.0149109 0.0391012 0.0366853 0.470265 0.5 +-0.0138299 0.0392302 0.0367944 0.309556 0.5 +-0.0127855 0.0392769 0.0369668 0.323425 0.5 +-0.0117893 0.0392416 0.0372019 0.328369 0.5 +-0.0107515 0.039289 0.0373765 0.318157 0.5 +-0.00966712 0.0394179 0.0374824 0 0 +-0.00862621 0.0394649 0.0376552 0 0 +-0.00758529 0.0395118 0.037828 0 0 +-0.00891681 0.0351082 0.0414685 0.139305 0.5 +-0.00809599 0.0347439 0.04196 0 0 +-0.00700917 0.0348727 0.042072 0.138845 0.5 +-0.00601124 0.0348376 0.0423067 0.281038 0.5 +-0.00501719 0.0348021 0.0425449 0.295611 0.5 +-0.00410488 0.0346022 0.0429088 0.299774 0.5 +-0.00306313 0.0346488 0.0430839 0.295792 0.5 +-0.00206852 0.0346139 0.0433223 0.457483 0.5 +-0.00102573 0.0346607 0.0434939 0.469983 0.5 +-3.10615e-05 0.0346258 0.0437307 0.485898 0.5 +0.0010095 0.0346721 0.0439005 0.489092 0.5 +0.00205109 0.0347195 0.0440743 0.671709 0.5 +0.00313658 0.0348497 0.0441849 0.67228 0.5 +0.00417967 0.034897 0.044357 0.700038 0.5 +0.00526525 0.0350275 0.0444668 0.86689 0.5 +0.006345 0.0351555 0.0445736 0.893308 0.5 +0.00743122 0.0352845 0.0446812 0.894231 0.5 +0.00856046 0.0354979 0.0447263 0.858572 0.5 +0.00969167 0.0357093 0.0447693 0.813571 0.5 +0.010861 0.0360066 0.0447493 0.60592 0.5 +0.0120758 0.0363869 0.044646 0.352068 0.5 +0.0133269 0.036855 0.044466 0.332085 0.5 +0.0146846 0.037467 0.0442233 0.284164 0.5 +0.0161104 0.038261 0.0437952 0.247606 0.5 +-0.0610541 0.068813 0.0363796 0.46762 0.5 +-0.0792474 0.0803083 0.033239 0.724634 0.5 +-0.0861936 0.111308 0.0401352 0.514606 0.453364 +-0.0750181 0.0761727 0.0341343 0.749564 0.5 +-0.0480338 0.0685335 0.039429 0.690212 0.5 +-0.0589666 0.06768 0.0360494 0.628387 0.5 +-0.0804383 0.111326 0.0449881 0.53315 0.5 +-0.0654246 0.0794919 0.0421931 0.617319 0.425731 +-0.075527 0.0733333 0.0311756 0.675423 0.5 +-0.0715441 0.112225 0.0480665 0.381955 0.435533 +-0.0824187 0.0788859 0.0267668 0.780674 0.5 +-0.0777092 0.07194 0.024923 0.78024 0.5 +-0.0804325 0.078146 0.029561 0.624792 0.5 +-0.0520638 0.0723523 0.0405753 0.713822 0.392606 +-0.0581584 0.0685383 0.037238 0.545219 0.5 +-0.0742409 0.113562 0.0499634 0.423018 0.5 +-0.089862 0.115281 0.0432597 0.545982 0.459157 +-0.0910141 0.11449 0.034742 0.442518 0.5 +-0.0572298 0.0696188 0.0382761 0.63206 0.5 +-0.0653574 0.0733073 0.0386226 0.566816 0.463421 +-0.0905758 0.113954 0.0388293 0.538426 0.5 +-0.0786032 0.107051 0.0327104 0.470929 0.5 +-0.0878029 0.112934 0.0313303 0.416206 0.5 +-0.0884672 0.113635 0.0306037 0.456718 0.5 +-0.0778425 0.108614 0.0370385 0.585619 0.39789 +-0.0634657 0.0730594 0.0392535 0.685883 0.5 +-0.062597 0.0740287 0.040345 0.587601 0.483617 +-0.0796395 0.11488 0.0476725 0.72153 0.5 +-0.0634922 0.0626336 0.0253957 0.616796 0.5 +-0.0262513 0.0350951 0.0517484 0.904049 0.5 +-0.07902 0.0751794 0.0271309 0.624799 0.5 +-0.055064 0.0698751 0.038539 0.670899 0.5 +-0.0781504 0.0736081 0.0268981 0.637958 0.479413 +-0.0739244 0.0668664 0.00165643 0.295676 0.5 +-0.0733588 0.0659821 0.00263497 0.37285 0.43828 +-0.0726455 0.0655594 0.00286688 0.268337 0.410217 +-0.0720741 0.0646161 0.00403373 0.401538 0.5 +-0.0714154 0.063966 0.00470687 0.467978 0.5 +-0.0708238 0.0631793 0.00551684 0.466144 0.5 +-0.0701142 0.0625797 0.0062174 0.42197 0.408074 +-0.0694635 0.0618968 0.00696654 0.431758 0.5 +-0.068707 0.0613453 0.00749837 0.433689 0.429993 +-0.0678958 0.0610238 0.00808464 0.781098 0.5 +-0.0670227 0.0607355 0.00842954 0.430033 0.5 +-0.0662075 0.060375 0.00901189 0.771395 0.5 +-0.0653409 0.0600919 0.00943789 0.7786 0.5 +-0.0645186 0.0597262 0.00993302 0.763364 0.5 +-0.0636975 0.0593607 0.0104272 0.750424 0.5 +-0.0629229 0.058915 0.0109817 0.787188 0.5 +-0.0620129 0.0587144 0.0113478 0.806018 0.5 +-0.0611468 0.0584317 0.0117762 0.793416 0.5 +-0.0602407 0.058232 0.0121428 0.804397 0.5 +-0.0593728 0.0579489 0.0125735 0.651808 0.5 +-0.0584669 0.0577494 0.0129387 0.493241 0.5 +-0.0575997 0.0574661 0.0133658 0.342032 0.5 +-0.0566913 0.0572662 0.0137312 0 0 +-0.081904 0.115723 0.0482136 0.589555 0.5 +-0.0663511 0.0350877 0.0310837 0.334423 0.5 +-0.0655235 0.0347285 0.0315692 0.517255 0.5 +-0.0646561 0.0344494 0.0319916 0.674319 0.5 +-0.0637038 0.0343279 0.0323025 0.799842 0.5 +-0.0626706 0.0343644 0.032487 0.773656 0.5 +-0.061676 0.0343224 0.032737 0.793712 0.5 +-0.0606463 0.0343588 0.0329219 0.784916 0.5 +-0.0596554 0.0343168 0.0331724 0.754716 0.5 +-0.0585811 0.0344322 0.0332983 0.764174 0.5 +-0.0575877 0.0343902 0.0335477 0.774018 0.5 +-0.0565591 0.0344267 0.0337344 0.776423 0.5 +-0.0555243 0.0344634 0.0339194 0.765333 0.5 +-0.0544908 0.0344999 0.0341095 0.772648 0.5 +-0.0534982 0.0344579 0.0343548 0.77443 0.5 +-0.0524675 0.0344946 0.0345461 0.777431 0.5 +-0.0514769 0.0344526 0.0347935 0.779177 0.5 +-0.0504041 0.0345678 0.0349233 0.763773 0.5 +-0.0494127 0.0345257 0.0351696 0.761383 0.5 +-0.0483792 0.0345623 0.0353569 0.772733 0.5 +-0.0473867 0.0345201 0.0356021 0.773302 0.5 +-0.046355 0.0345569 0.0357917 0.766116 0.5 +-0.0453211 0.0345932 0.035979 0.776109 0.5 +-0.0443307 0.0345511 0.0362271 0.768604 0.5 +-0.0433008 0.0345877 0.0364134 0.780138 0.5 +-0.0423463 0.0344667 0.0367209 0.782656 0.5 +-0.0413155 0.0345032 0.0369079 0.776498 0.5 +-0.0403231 0.0344611 0.0371557 0.796572 0.5 +-0.0392913 0.0344977 0.0373408 0.766308 0.5 +-0.0382612 0.0345343 0.0375294 0.784487 0.5 +-0.0372682 0.0344921 0.0377782 0.620414 0.5 +-0.0362363 0.0345287 0.0379647 0.474121 0.5 +-0.035201 0.0345651 0.0381519 0.315675 0.5 +-0.0342132 0.0345231 0.0384015 0.323154 0.5 +-0.0332219 0.0344808 0.0386469 0.165891 0.5 +-0.032272 0.0343596 0.0389523 0 0 +-0.0290584 0.0385824 0.0360072 0 0 +-0.028064 0.0385407 0.0362565 0.142952 0 +-0.0269007 0.0388242 0.0362546 0.150792 0.5 +-0.0258142 0.0389536 0.0363636 0.300676 0.5 +-0.0247725 0.0390001 0.0365321 0.316732 0.5 +-0.0237781 0.0389651 0.0367703 0.322494 0.5 +-0.0227345 0.0390118 0.0369431 0.322631 0.5 +-0.021742 0.0389771 0.0371835 0.31768 0.5 +-0.0206534 0.0391059 0.0372895 0.318622 0.5 +-0.0196569 0.0390707 0.0375255 0.322569 0.5 +-0.0186162 0.0391183 0.0377018 0.309387 0.5 +-0.0175335 0.0392471 0.0378093 0.318004 0.5 +-0.0165344 0.0392124 0.0380479 0.327502 0.5 +-0.0154933 0.0392591 0.0382209 0.333148 0.5 +-0.0145 0.0392233 0.0384538 0.323957 0.5 +-0.0134154 0.0393527 0.0385623 0 0 +-0.0123306 0.0394822 0.0386711 0 0 +-0.0112898 0.0395292 0.0388441 0 0 +-0.0126507 0.0350556 0.0425263 0.143796 0.5 +-0.0117815 0.0347775 0.0429519 0.155874 0.5 +-0.0107484 0.0348144 0.0431359 0.145138 0.5 +-0.00971651 0.0348541 0.0433186 0.291966 0.5 +-0.00876366 0.0347363 0.0436201 0.307778 0.5 +-0.00781043 0.0346187 0.0439246 0.300923 0.5 +-0.00681305 0.0345833 0.0441587 0.297034 0.5 +-0.00576935 0.0346302 0.0443351 0.45266 0.5 +-0.00477205 0.0345951 0.0445699 0.474369 0.5 +-0.0037319 0.0346421 0.0447442 0.487568 0.5 +-0.00273397 0.0346073 0.0449802 0.497592 0.5 +-0.00165204 0.0347369 0.0450897 0.652988 0.5 +-0.000565033 0.0348667 0.0451983 0.679771 0.5 +0.000515748 0.0349973 0.0453092 0.701866 0.5 +0.00160174 0.0351275 0.0454175 0.70832 0.5 +0.00268547 0.035256 0.0455248 0.886134 0.5 +0.00381747 0.0354686 0.0455691 0.86656 0.5 +0.00494458 0.0356784 0.0456125 0.83572 0.5 +0.00607351 0.0358936 0.0456569 0.783938 0.5 +0.00724322 0.0361893 0.0456372 0.729243 0.5 +0.00849938 0.0366585 0.0454484 0.348206 0.5 +0.00988706 0.0373676 0.0450724 0.289298 0.5 +0.0113285 0.0381477 0.0446991 0.265003 0.5 +-0.081733 0.0783168 0.0273929 0.616897 0.5 +-0.0810037 0.0777776 0.0280061 0.778515 0.5 +-0.0820788 0.0765181 0.0218286 0.777443 0.5 +-0.0751616 0.0715622 0.0292788 0.616237 0.473076 +-0.0706266 0.111419 0.0453421 0.423241 0.5 +-0.0816004 0.110405 0.0418977 0.930183 0.5 +-0.0612601 0.0653881 0.0322823 0.48643 0.40797 +-0.0643109 0.0721294 0.0381075 0.664319 0.5 +-0.0718543 0.111061 0.0453722 0.795732 0.5 +-0.0707478 0.147309 -0.0278341 0.411199 0.375208 +-0.0891862 0.112803 0.0347042 0.501885 0.5 +-0.0876394 0.113262 0.0257017 0.628605 0.398726 +-0.062502 0.0625858 0.0256444 0.603009 0.5 +-0.0622566 0.0709345 0.0378148 0.647949 0.5 +-0.0806691 0.107746 0.0299304 0.415567 0.5 +-0.0797382 0.10948 0.0394939 0.9187 0.5 +-0.0781507 0.115089 0.0495991 0.58528 0.5 +-0.0863239 0.111846 0.0325401 0.707889 0.5 +-0.0871035 0.11231 0.0319974 0.395259 0.437502 +-0.0768829 0.108524 0.037335 0.964191 0.5 +-0.0719223 0.112846 0.049279 0.35657 0.5 +-0.057026 0.0675163 0.0366088 0.519618 0.5 +-0.0897032 0.113874 0.0229056 0.707356 0.5 +-0.0768434 0.109781 0.0434593 0.514216 0.5 +-0.0615513 0.0624603 0.0259481 0.597637 0.403052 +-0.0786369 0.113551 0.047197 0.644275 0.5 +-0.0532018 0.0733522 0.0412342 0.757439 0.5 +-0.0764308 0.11585 0.051182 0.515792 0.5 +-0.0745042 0.0669844 0.00328572 0.581089 0.5 +-0.0738976 0.0662178 0.00410027 0.59508 0.5 +-0.0732998 0.0654414 0.00491231 0.560247 0.5 +-0.0726748 0.0647223 0.00565049 0.592535 0.5 +-0.0720537 0.0640001 0.00639175 0.369722 0.5 +-0.0714426 0.0632696 0.00712846 0.360354 0.5 +-0.0707871 0.0625817 0.00788057 0.489529 0.5 +-0.0700956 0.06197 0.00856658 0.464654 0.5 +-0.0692976 0.0615474 0.00912978 0.808881 0.5 +-0.0684765 0.061182 0.0096252 0.801978 0.5 +-0.0676975 0.0607342 0.0101856 0.776256 0.5 +-0.0668328 0.0604514 0.0106116 0.781449 0.5 +-0.0660555 0.0600044 0.0111686 0.782774 0.5 +-0.065193 0.0597221 0.0116014 0.792346 0.5 +-0.0643723 0.0593574 0.0120942 0.807508 0.5 +-0.0635072 0.0590749 0.0125217 0.84926 0.5 +-0.0625957 0.0588736 0.0128867 0.836512 0.5 +-0.0617744 0.0585089 0.0133805 0.845255 0.5 +-0.060863 0.0583083 0.0137477 0.860612 0.5 +-0.0599544 0.0581084 0.014112 0.699019 0.5 +-0.0590022 0.0579904 0.014414 0.521004 0.5 +-0.0580927 0.0577897 0.0147789 0.350749 0.5 +-0.0572305 0.057508 0.0152056 0 0 +-0.0599561 0.0677317 0.0357891 0.645764 0.5 +-0.0667813 0.0354951 0.0323861 0.346689 0.5 +-0.0660379 0.0349778 0.0329828 0.531146 0.5 +-0.0651684 0.0346977 0.0334093 0.696543 0.5 +-0.0642567 0.0344972 0.033776 0.676505 0.5 +-0.0633069 0.0343768 0.0340823 0.796382 0.5 +-0.0622744 0.0344133 0.0342699 0.793121 0.5 +-0.0612826 0.0343712 0.0345145 0.778957 0.5 +-0.0602915 0.0343294 0.0347628 0.770386 0.5 +-0.0592597 0.0343664 0.034953 0.753081 0.5 +-0.0582249 0.0344034 0.0351394 0.762004 0.5 +-0.0571923 0.0344404 0.0353306 0.762083 0.5 +-0.0561609 0.0344771 0.0355158 0.757335 0.5 +-0.0551719 0.0344352 0.0357625 0.74918 0.5 +-0.0541372 0.0344723 0.0359505 0.760172 0.5 +-0.0531047 0.0345095 0.0361399 0.742917 0.5 +-0.0520334 0.0346252 0.0362685 0.768859 0.5 +-0.0510409 0.034583 0.0365198 0.783233 0.5 +-0.0500491 0.0345412 0.0367666 0.771347 0.5 +-0.0490182 0.0345781 0.0369526 0.762862 0.5 +-0.0479854 0.0346149 0.0371396 0.77256 0.5 +-0.0469913 0.0345734 0.0373898 0.764287 0.5 +-0.0459209 0.0346888 0.0375199 0.753944 0.5 +-0.04493 0.0346468 0.0377647 0.78616 0.5 +-0.0439777 0.0345259 0.038072 0.770325 0.5 +-0.0429452 0.0345628 0.0382617 0.783786 0.5 +-0.0419532 0.0345214 0.0385087 0.780854 0.5 +-0.0408786 0.0346362 0.0386374 0.812597 0.5 +-0.0399319 0.0345158 0.0389424 0.81248 0.5 +-0.0388999 0.0345526 0.0391301 0.798474 0.5 +-0.0379081 0.0345108 0.0393807 0.786545 0.5 +-0.0368752 0.0345479 0.0395694 0.623589 0.5 +-0.0358426 0.0345846 0.0397566 0.472491 0.5 +-0.0348513 0.0345425 0.0400019 0.471767 0.5 +-0.0338188 0.0345795 0.040191 0.315979 0.5 +-0.0327846 0.0346162 0.0403814 0.328941 0.5 +-0.0318359 0.0344957 0.0406866 0.168874 0.5 +-0.0308039 0.0345326 0.0408762 0.166672 0.5 +-0.0298138 0.0344903 0.0411187 0 0 +-0.0265191 0.0388768 0.0380618 0 0 +-0.0254455 0.0389929 0.0381911 0 0 +-0.0244003 0.0390404 0.0383653 0.155152 0 +-0.02332 0.0391695 0.0384733 0 0 +-0.0223231 0.0391341 0.0387105 0 0 +-0.0212823 0.0391811 0.0388836 0 0 +-0.0202415 0.0392282 0.0390567 0 0 +-0.0192007 0.0392753 0.0392298 0 0 +-0.0181599 0.0393223 0.0394029 0 0 +-0.0171143 0.0393698 0.0395766 0.160218 0.5 +-0.0160344 0.0394989 0.0396851 0 0 +-0.0149936 0.0395459 0.0398583 0 0 +-0.0164714 0.0348128 0.0436847 0.151757 0 +-0.0154789 0.0347707 0.0439361 0.153022 0.5 +-0.0144467 0.0348076 0.0441223 0.143773 0.5 +-0.0134564 0.0347657 0.0443699 0.28597 0.5 +-0.0124237 0.0348026 0.0445556 0.296712 0.5 +-0.0114338 0.0347606 0.0448027 0.302255 0.5 +-0.0104428 0.0347186 0.0450504 0.298297 0.5 +-0.00945158 0.0346766 0.0453022 0.460278 0.5 +-0.00845839 0.0346349 0.045549 0.473294 0.5 +-0.00742751 0.0346718 0.0457358 0.484025 0.5 +-0.00639449 0.0347093 0.0459249 0.492561 0.5 +-0.00535711 0.0347531 0.0461025 0.67324 0.5 +-0.00427283 0.034883 0.0462122 0.678619 0.5 +-0.00318743 0.0350129 0.0463208 0.700718 0.5 +-0.00210217 0.035143 0.0464295 0.699791 0.5 +-0.000973441 0.0353569 0.0464761 0.682504 0.5 +0.000197079 0.035652 0.0464555 0.658914 0.5 +0.00132313 0.0358703 0.0464707 0.369612 0.5 +0.00252922 0.0362636 0.0463395 0.361366 0.5 +0.00379004 0.0367184 0.046186 0.369818 0.5 +0.00513012 0.0373402 0.0458408 0.280212 0.5 +0.00652975 0.0380351 0.0455331 0.318335 0.5 +0.0078895 0.0386539 0.0453509 0.322843 0.5 +0.00919729 0.039194 0.0451612 0.361816 0.5 +-0.0777879 0.113218 0.0476364 0.469071 0.5 +-0.0838815 0.111187 0.0425305 0.556174 0.5 +-0.0838195 0.113254 0.0462465 0.438793 0.5 +-0.0758694 0.0777615 0.0343673 0.760464 0.5 +-0.0676678 0.0697151 0.0342008 0.558397 0.342793 +-0.0689139 0.148999 -0.0367601 0.301134 0.5 +-0.077502 0.0785105 0.0333799 0.717414 0.5 +-0.0757282 0.0754387 0.0328339 0.72838 0.5 +-0.0605914 0.0623502 0.0262507 0.579356 0.415776 +-0.0903944 0.113745 0.0354564 0.431941 0.443515 +-0.0538466 0.0665391 0.0363755 0.552188 0.254164 +-0.0822959 0.0773319 0.0228488 0.819282 0.5 +-0.060098 0.0687043 0.0366734 0.536418 0.478394 +-0.0905017 0.114314 0.0223543 0.732879 0.5 +-0.0696524 0.0680017 0.0300044 0.619199 0.5 +-0.083006 0.110313 0.0398706 0.896103 0.5 +-0.0857201 0.113489 0.0456231 0.375891 0.5 +-0.0833762 0.111067 0.0302504 0.543219 0.405967 +-0.0714347 0.109953 0.0409933 0.786138 0.5 +-0.0796554 0.0776931 0.0301108 0.637082 0.5 +-0.0855432 0.111388 0.0330811 0.726092 0.5 +-0.059111 0.0686528 0.0369372 0.52736 0.5 +-0.0667659 0.0664754 0.0301739 0.46949 0.459172 +-0.0681691 0.0682156 0.031879 0.514 0.34111 +-0.0694619 0.0701676 0.0334316 0.560205 0.5 +-0.0770271 0.0743283 0.0300122 0.683444 0.5 +-0.0596429 0.0622343 0.0265494 0.393589 0.448237 +-0.0746823 0.0663852 0.00625465 0.697001 0.5 +-0.0761752 0.110468 0.0448594 0.388739 0.5 +-0.0756542 0.0679921 0.00394259 0.377235 0.5 +-0.0751265 0.0670609 0.00488552 0.622619 0.5 +-0.0744851 0.0663284 0.00571192 0.687783 0.5 +-0.0738147 0.065744 0.00631032 0.623691 0.5 +-0.0732519 0.0648877 0.00719031 0.584323 0.5 +-0.0726615 0.0640995 0.00799778 0.390888 0.462916 +-0.0720199 0.063399 0.00874547 0.397678 0.5 +-0.0713305 0.0628284 0.00935991 0.390266 0.440059 +-0.0706528 0.0621972 0.0100461 0.397499 0.5 +-0.0699138 0.0616664 0.0106715 0.540624 0.5 +-0.0691331 0.0612207 0.0112337 0.487816 0.417186 +-0.0683512 0.0607717 0.0117847 0.480588 0.5 +-0.0675058 0.060447 0.0122781 0.828806 0.5 +-0.06664 0.0601639 0.0127094 0.843809 0.5 +-0.0658202 0.0597996 0.0132017 0.848395 0.5 +-0.0649536 0.0595166 0.0136311 0.873354 0.5 +-0.0640428 0.0593154 0.0139941 0.879126 0.5 +-0.0631802 0.0590341 0.0144269 0.886016 0.5 +-0.0622707 0.058834 0.014793 0.909679 0.5 +-0.0613578 0.0586321 0.0151557 0.911673 0.5 +-0.0604511 0.0584329 0.0155226 0.731474 0.5 +-0.0595413 0.0582322 0.0158865 0.538807 0.5 +-0.0586314 0.0580318 0.0162523 0.364044 0.5 +-0.0577255 0.0578321 0.0166151 0 0 +-0.090178 0.113449 0.0375353 0.48499 0.5 +-0.0759857 0.112794 0.0483899 0.505465 0.384689 +-0.0664501 0.0353918 0.0342807 0.365628 0.5 +-0.0657944 0.0348418 0.0348835 0.340585 0.393747 +-0.0648137 0.0346657 0.0352478 0.705005 0.5 +-0.0639025 0.0344657 0.0356117 0.841788 0.5 +-0.0628707 0.0345025 0.0358026 0.803608 0.5 +-0.0619192 0.0343817 0.0361087 0.797612 0.5 +-0.0609319 0.0343399 0.0363539 0.783724 0.5 +-0.0598965 0.0343774 0.0365453 0.77487 0.5 +-0.0588626 0.0344147 0.0367317 0.763271 0.5 +-0.0578317 0.0344516 0.0369209 0.770009 0.5 +-0.0568399 0.0344097 0.0371692 0.764915 0.5 +-0.0558475 0.0343686 0.0374162 0.750573 0.5 +-0.054778 0.0344845 0.0375447 0.761968 0.5 +-0.0537852 0.0344427 0.037794 0.759519 0.5 +-0.0527544 0.03448 0.0379838 0.731578 0.5 +-0.0516781 0.0345962 0.0381142 0.749736 0.5 +-0.0506856 0.0345547 0.0383582 0.768235 0.5 +-0.0496528 0.0345916 0.0385506 0.759938 0.5 +-0.048662 0.0345502 0.0387985 0.760094 0.5 +-0.0476332 0.0345872 0.0389835 0.771314 0.5 +-0.0466394 0.0345455 0.0392313 0.7622 0.5 +-0.0456074 0.0345826 0.0394197 0.761865 0.5 +-0.0446176 0.0345408 0.0396657 0.795011 0.5 +-0.0435828 0.0345782 0.0398547 0.779836 0.5 +-0.0425494 0.0346163 0.040046 0.637068 0.5 +-0.0414778 0.0347327 0.0401772 0.658533 0.5 +-0.040486 0.0346908 0.0404235 0.693683 0.5 +-0.0394562 0.0347283 0.0406132 0.70375 0.5 +-0.0385029 0.0346069 0.040918 0.704352 0.5 +-0.0374734 0.0346441 0.0411075 0.846132 0.5 +-0.0364414 0.0346808 0.041293 0.659072 0.5 +-0.0354498 0.0346389 0.0415402 0.637714 0.5 +-0.0344163 0.0346761 0.0417292 0.474674 0.5 +-0.0334245 0.0346344 0.0419763 0.47999 0.5 +-0.0323904 0.0346717 0.0421656 0.321058 0.5 +-0.0313584 0.0347088 0.042355 0.325544 0.5 +-0.0303694 0.034667 0.0426012 0.325351 0.5 +-0.0293346 0.0347045 0.0427947 0.162616 0.5 +-0.0283441 0.0346627 0.0430398 0.164471 0.5 +-0.0273118 0.0346998 0.0432305 0.160981 0.5 +-0.0263231 0.034658 0.0434735 0 0 +-0.0252077 0.0348536 0.0435448 0.14347 0.5 +-0.0241332 0.0349697 0.043675 0.146111 0.5 +-0.0231843 0.0348489 0.0439808 0.152356 0 +-0.0221888 0.0348068 0.0442295 0.156898 0.5 +-0.0211976 0.0347654 0.0444796 0.159177 0.5 +-0.0201655 0.0348026 0.0446658 0.152546 0.5 +-0.0191373 0.0348399 0.0448528 0 0 +-0.0181454 0.0347978 0.0451006 0.150342 0.5 +-0.0171539 0.0347559 0.0453522 0.298809 0.5 +-0.016121 0.0347931 0.0455365 0.306296 0.5 +-0.0151711 0.0346724 0.0458457 0.30514 0.5 +-0.0141375 0.0347096 0.0460356 0.309964 0.5 +-0.0131452 0.0346678 0.0462791 0.460441 0.5 +-0.0121134 0.0347053 0.046472 0.475507 0.5 +-0.0111235 0.0346639 0.0467191 0.484953 0.5 +-0.0100884 0.0347013 0.0469069 0.496951 0.5 +-0.00905798 0.034739 0.0470958 0.682311 0.5 +-0.00798473 0.0348553 0.0472244 0.679167 0.5 +-0.00690926 0.0349718 0.0473534 0.692845 0.5 +-0.00579434 0.0351694 0.0474261 0.68613 0.5 +-0.00467538 0.0353718 0.0474871 0.694447 0.5 +-0.00354618 0.035584 0.0475305 0.663279 0.5 +-0.00232938 0.0359607 0.0474459 0.444076 0.5 +-0.00118398 0.0362533 0.0473478 0.254628 0.385336 +0.000219502 0.0370979 0.0467851 0.232715 0.5 +-0.0829319 0.114342 0.0473556 0.529842 0.5 +-0.0516722 0.0693248 0.037985 0.672003 0.5 +-0.0754949 0.117024 0.0522099 0.669837 0.5 +-0.089228 0.114813 0.0276717 0.554894 0.5 +-0.0706809 0.109318 0.0378585 0.35407 0.5 +-0.085765 0.112351 0.0286477 0.648511 0.5 +-0.078298 0.0745267 0.0278337 0.652703 0.5 +-0.0707981 0.0672067 0.0269443 0.619388 0.5 +-0.0672529 0.0760725 0.0393761 0.602907 0.45004 +-0.0652549 0.0667307 0.0320259 0.453049 0.355775 +-0.077431 0.108115 0.0357399 0.588657 0.420926 +-0.0644149 0.0731789 0.038947 0.679316 0.5 +-0.0781968 0.0778917 0.0320122 0.685621 0.5 +-0.0614917 0.0661812 0.0332998 0.569557 0.406465 +-0.049761 0.069112 0.038562 0.71228 0.450548 +-0.0644463 0.0769092 0.0410862 0.617312 0.5 +-0.0587286 0.0620484 0.0269094 0.538303 0.447309 +-0.0759886 0.0701373 0.025079 0.742296 0.5 +-0.0625318 0.0662874 0.0329584 0.526056 0.429507 +-0.0739329 0.072514 0.0322154 0.653054 0.5 +-0.0516913 0.0680528 0.0372779 0.65002 0.5 +-0.0722448 0.0688588 0.0287217 0.682029 0.5 +-0.05065 0.0706021 0.0388719 0.688989 0.5 +-0.0800241 0.0745873 0.0239149 0.799816 0.5 +-0.068912 0.148468 -0.034342 0.344398 0.5 +-0.0518826 0.071407 0.0396894 0.691597 0.5 +-0.0780357 0.0769322 0.031104 0.67664 0.5 +-0.0536233 0.0657097 0.0353836 0.628304 0.5 +-0.0860966 0.11232 0.0268196 0.593471 0.5 +-0.081432 0.0776141 0.0263044 0.771322 0.5 +-0.0561497 0.0697401 0.0384165 0.651923 0.5 +-0.0709351 0.0742605 0.0366097 0.700034 0.5 +-0.0578115 0.0619893 0.0271205 0.31406 0.449614 +-0.0692662 0.0692944 0.0324707 0.533572 0.441136 +-0.0674808 0.0688292 0.0332504 0.530321 0.5 +-0.0813927 0.0758934 0.0225084 0.79167 0.5 +-0.074087 0.0734714 0.0331119 0.686579 0.5 +-0.0748775 0.0739125 0.0325733 0.693967 0.5 +-0.0636286 0.0672101 0.0337087 0.461098 0.5 +-0.0750917 0.0664543 0.00723246 0.513423 0.5 +-0.0744375 0.0658205 0.00791081 0.632226 0.5 +-0.0738001 0.0651206 0.00865838 0.641281 0.5 +-0.0731478 0.0644323 0.00940567 0.432879 0.5 +-0.0725213 0.0636798 0.0102197 0.491387 0.5 +-0.0718111 0.0631642 0.010775 0.500884 0.5 +-0.0710841 0.0626658 0.0113319 0.476437 0.5 +-0.0703591 0.0620888 0.0120183 0.579028 0.5 +-0.0696543 0.0614896 0.0127042 0.540002 0.5 +-0.0688911 0.0610594 0.0132079 0.41865 0.352623 +-0.0680618 0.0606588 0.013756 0.510257 0.5 +-0.0671797 0.0604061 0.0141816 0.889855 0.5 +-0.0663392 0.0600723 0.0146241 0.528491 0.428029 +-0.0654627 0.0598015 0.0150426 0.502607 0.5 +-0.0645394 0.0596403 0.015406 0.911373 0.5 +-0.0636711 0.0593571 0.0158341 0.926155 0.5 +-0.0627215 0.0592404 0.0161384 0.920888 0.5 +-0.0618117 0.0590403 0.0165038 0.928945 0.5 +-0.0608999 0.058839 0.0168686 0.747654 0.5 +-0.0599935 0.0586398 0.0172334 0.566271 0.5 +-0.0590849 0.0584397 0.0175987 0.569719 0.5 +-0.0581296 0.0583212 0.0178996 0.376336 0.5 +-0.0571796 0.0582032 0.0181974 0 0 +-0.0753259 0.0689002 0.0227894 0.70221 0.5 +-0.0666556 0.0360676 0.0353877 0.290298 0.5 +-0.066147 0.0353356 0.0361254 0.366973 0.5 +-0.0653284 0.0349129 0.0366619 0.730445 0.5 +-0.0644211 0.0347126 0.0370276 0.894264 0.5 +-0.0634664 0.0345901 0.0373297 0.834246 0.5 +-0.0625155 0.0344693 0.0376364 0.819164 0.5 +-0.0615271 0.0344278 0.0378839 0.794537 0.5 +-0.0604926 0.0344653 0.0380756 0.785641 0.5 +-0.0595037 0.0344238 0.0383245 0.783534 0.5 +-0.0584699 0.0344613 0.0385122 0.772041 0.5 +-0.0574772 0.0344195 0.038759 0.789262 0.5 +-0.056485 0.0343785 0.0390076 0.77465 0.5 +-0.0554108 0.0344947 0.0391385 0.765551 0.5 +-0.0544231 0.0344532 0.039385 0.78123 0.5 +-0.053388 0.034491 0.0395762 0.763025 0.5 +-0.0523573 0.0345285 0.0397607 0.750329 0.5 +-0.0513256 0.0345659 0.0399502 0.759867 0.5 +-0.0503335 0.0345244 0.0401985 0.770997 0.5 +-0.0492995 0.0345621 0.0403913 0.760975 0.5 +-0.0482709 0.0345995 0.0405757 0.763433 0.5 +-0.047238 0.0346371 0.0407654 0.63001 0.5 +-0.046245 0.034596 0.0410145 0.634534 0.5 +-0.0451719 0.0347129 0.0411467 0.655495 0.5 +-0.0441816 0.0346721 0.0413945 0.667606 0.5 +-0.0431088 0.0347881 0.0415217 0.657496 0.5 +-0.0419921 0.0349859 0.0415962 0.50546 0.5 +-0.0409173 0.0351021 0.0417247 0.539846 0.5 +-0.0398856 0.0351398 0.0419144 0.564469 0.5 +-0.0389556 0.0350986 0.042208 0.382564 0.380407 +-0.0379042 0.0350553 0.0424096 0.783646 0.5 +-0.0369545 0.0349347 0.0427177 0.92891 0.5 +-0.0360463 0.0347343 0.0430826 0.907121 0.5 +-0.0350535 0.0346922 0.0433273 0.654938 0.5 +-0.0339801 0.0348087 0.0434578 0.632783 0.5 +-0.0329884 0.0347673 0.0437059 0.481128 0.5 +-0.0319551 0.0348046 0.0438977 0.480085 0.5 +-0.0309651 0.0347631 0.0441412 0.479049 0.5 +-0.0299308 0.0348009 0.0443343 0.316629 0.5 +-0.0289002 0.0348381 0.0445217 0.320531 0.5 +-0.0279078 0.0347965 0.0447705 0.323887 0.5 +-0.0269178 0.034755 0.0450156 0.319946 0.5 +-0.0258834 0.0347926 0.045205 0.307718 0.5 +-0.0248532 0.0348299 0.0453939 0.300883 0.5 +-0.0238604 0.0347884 0.0456435 0.306706 0.5 +-0.022832 0.0348259 0.0458328 0.300442 0.5 +-0.0217971 0.0348633 0.0460203 0.308606 0.5 +-0.0208083 0.0348218 0.0462671 0.308459 0.5 +-0.019816 0.0347801 0.0465131 0.306966 0.5 +-0.0188224 0.0347384 0.0467634 0.307413 0.5 +-0.017832 0.0346972 0.047013 0.310429 0.5 +-0.0167995 0.0347343 0.0471976 0.464356 0.5 +-0.0158082 0.0346932 0.0474464 0.466997 0.5 +-0.0147348 0.0348101 0.0475803 0.478598 0.5 +-0.013744 0.0347692 0.0478272 0.494096 0.5 +-0.0126691 0.0348865 0.0479592 0.670524 0.5 +-0.0116389 0.034923 0.0481436 0.688389 0.5 +-0.0105663 0.0350401 0.0482738 0.689834 0.5 +-0.00945147 0.0352364 0.0483453 0.70815 0.5 +-0.00837752 0.0353543 0.048476 0.879605 0.5 +-0.0072207 0.0356289 0.0484876 0.682431 0.5 +-0.00610573 0.035829 0.0485597 0.65323 0.5 +-0.00492025 0.0362041 0.048453 0.263549 0.5 +-0.00369262 0.0366899 0.0482034 0.214086 0.5 +-0.0795655 0.0711751 0.0181423 0.681418 0.5 +-0.0788559 0.0706244 0.0187647 0.67461 0.5 +-0.0781039 0.070111 0.0193756 0.702285 0.5 +-0.0672962 0.0785128 0.0408262 0.594608 0.5 +-0.0748541 0.107208 0.0370405 0.312679 0.5 +-0.0650483 0.0701635 0.0361166 0.601325 0.5 +-0.0640951 0.0700461 0.0364211 0.597903 0.5 +-0.0691323 0.0776098 0.0394254 0.591872 0.5 +-0.0698308 0.071946 0.0353261 0.594584 0.44916 +-0.0701548 0.148741 -0.0366493 0.273291 0.227077 +-0.0631359 0.0699525 0.0366992 0.61777 0.5 +-0.0773286 0.0696655 0.0199272 0.685176 0.350146 +-0.0891989 0.11586 0.044703 0.60187 0.5 +-0.0843731 0.110309 0.0377873 0.866327 0.5 +-0.0754196 0.111293 0.0461553 0.398792 0.5 +-0.0765357 0.0692333 0.0204809 0.720536 0.359371 +-0.077209 0.110378 0.0446936 0.409075 0.450237 +-0.0906322 0.112714 0.0163744 0.634174 0.5 +-0.0630072 0.0689485 0.0358468 0.583237 0.5 +-0.079103 0.0731629 0.0235749 0.777619 0.5 +-0.0622094 0.0655019 0.0319825 0.522088 0.5 +-0.0638136 0.0680952 0.0346563 0.618855 0.5 +-0.0817644 0.0758778 0.0206878 0.741428 0.5 +-0.091428 0.113787 0.018961 0.726568 0.5 +-0.0757523 0.0687815 0.0210323 0.726172 0.5 +-0.0529063 0.0676787 0.0373317 0.626599 0.5 +-0.0749667 0.0683767 0.0215337 0.715696 0.355807 +-0.0741944 0.0678888 0.022137 0.709676 0.360949 +-0.0845615 0.0777561 0.014943 0.65473 0.5 +-0.0882602 0.111934 0.0373837 0.525511 0.5 +-0.0894904 0.112329 0.0187618 0.681106 0.5 +-0.052616 0.0657163 0.0355847 0.716313 0.5 +-0.0734051 0.0674458 0.022683 0.726952 0.5 +-0.072631 0.0670284 0.0231935 0.6939 0.5 +-0.071801 0.0745407 0.0361884 0.71264 0.5 +-0.0718222 0.0666154 0.0237319 0.644913 0.400955 +-0.0710199 0.0662278 0.0242287 0.634453 0.5 +-0.0701839 0.0658802 0.0247105 0.489121 0.5 +-0.069373 0.0655009 0.0252048 0.578068 0.5 +-0.0685509 0.065132 0.0256966 0.550849 0.299242 +-0.0676963 0.0648397 0.0261272 0.536847 0.363835 +-0.0667991 0.06462 0.0265045 0.405786 0.46941 +-0.0755445 0.0668624 0.00857418 0.584933 0.5 +-0.0672111 0.0749069 0.0386416 0.600287 0.467564 +-0.0742588 0.0655235 0.0100016 0.509744 0.339159 +-0.0735773 0.0648576 0.0107478 0.561682 0.5 +-0.0728932 0.0642808 0.0113714 0.5876 0.5 +-0.072166 0.063706 0.0120556 0.553638 0.5 +-0.0714787 0.0630924 0.012741 0.506207 0.5 +-0.0708134 0.0624523 0.0134268 0.454072 0.5 +-0.0700765 0.0619608 0.0139832 0.478626 0.5 +-0.0693077 0.0614952 0.0145437 0.432237 0.5 +-0.0684865 0.0611195 0.0150424 0.39596 0.434825 +-0.0676995 0.0606833 0.0155957 0.399351 0.5 +-0.0668008 0.060458 0.0159676 0.392356 0.447511 +-0.0659091 0.06022 0.0163937 0.520431 0.449498 +-0.0650007 0.0600171 0.0167571 0.517502 0.5 +-0.0640788 0.0598458 0.0171155 0.948453 0.5 +-0.0631728 0.0596464 0.0174802 0.938839 0.5 +-0.0622614 0.0594461 0.0178467 0.939061 0.5 +-0.0613093 0.0593276 0.0181457 0.75605 0.5 +-0.0604002 0.0591276 0.0185111 0.7573 0.5 +-0.0594483 0.0590098 0.0188119 0.575181 0.5 +-0.058539 0.0588103 0.0191792 0.384301 0.5 +-0.0575865 0.0586919 0.0194779 0 0 +-0.0887093 0.112351 0.0387402 0.430149 0.5 +-0.065903 0.0643977 0.026882 0.483438 0.5 +-0.0663647 0.0360087 0.0372253 0.385201 0.5 +-0.0657408 0.0353871 0.0379044 0.494561 0.5 +-0.0648928 0.0350374 0.038379 0.939063 0.5 +-0.0640233 0.0347562 0.0388023 0.900826 0.5 +-0.063072 0.0346346 0.0391063 0.848458 0.5 +-0.0621222 0.0345142 0.0394173 0.822358 0.5 +-0.0611289 0.0344725 0.039662 0.791874 0.5 +-0.0600953 0.0345101 0.0398512 0.779494 0.5 +-0.0591045 0.0344689 0.0400978 0.779505 0.5 +-0.0580729 0.0345066 0.0402882 0.776799 0.5 +-0.0570813 0.0344654 0.0405363 0.779463 0.5 +-0.0560519 0.0345032 0.0407254 0.760969 0.5 +-0.0550177 0.034541 0.0409139 0.77985 0.5 +-0.054028 0.0344996 0.0411656 0.779994 0.5 +-0.0529942 0.0345374 0.0413527 0.768354 0.5 +-0.0520047 0.0344961 0.0416004 0.758305 0.5 +-0.0509276 0.0346131 0.0417321 0.760798 0.5 +-0.0499367 0.0345722 0.0419808 0.627709 0.5 +-0.0489061 0.0346101 0.0421693 0.63147 0.5 +-0.047874 0.0346487 0.0423594 0.635229 0.5 +-0.0468008 0.0347657 0.0424884 0.492762 0.5 +-0.0457293 0.0348843 0.042622 0.506117 0.5 +-0.0446561 0.0349999 0.0427486 0.518553 0.5 +-0.0435404 0.0351992 0.0428237 0.49688 0.5 +-0.0423655 0.0354607 0.0428683 0.293553 0.435869 +-0.0412769 0.0356814 0.042879 0.235301 0.5 +-0.040104 0.0359968 0.0427867 0.271679 0.5 +-0.0389991 0.0361252 0.0429011 0.445433 0.5 +-0.0381624 0.035793 0.0434599 0.543566 0.5 +-0.0373231 0.0354917 0.0439186 0.608745 0.5 +-0.0364388 0.0352264 0.0443258 0.986512 0.5 +-0.0355301 0.0350253 0.0446914 0.967997 0.5 +-0.0346214 0.0348242 0.0450553 0.910632 0.5 +-0.033587 0.0348608 0.0452447 0.647959 0.5 +-0.0325544 0.0348985 0.0454309 0.627029 0.5 +-0.0315626 0.0348573 0.0456798 0.633856 0.5 +-0.0305285 0.0348948 0.0458677 0.470166 0.5 +-0.0295413 0.0348538 0.0461198 0.470602 0.5 +-0.0285078 0.0348913 0.0463089 0.474733 0.5 +-0.0275166 0.0348502 0.0465557 0.470876 0.5 +-0.0264854 0.0348879 0.0467436 0.477404 0.5 +-0.0254944 0.0348465 0.0469921 0.469279 0.5 +-0.0244623 0.0348843 0.0471798 0.472847 0.5 +-0.0235086 0.0347636 0.0474886 0.466863 0.5 +-0.0224756 0.0348012 0.0476768 0.454465 0.5 +-0.0214848 0.0347602 0.0479269 0.461803 0.5 +-0.0204554 0.0347978 0.0481157 0.468461 0.5 +-0.0194646 0.0347564 0.0483645 0.468034 0.5 +-0.0184307 0.0347944 0.0485523 0.465671 0.5 +-0.0173959 0.0348327 0.0487444 0.483894 0.5 +-0.0164056 0.0347921 0.0489909 0.66633 0.5 +-0.015331 0.0349099 0.0491212 0.659301 0.5 +-0.0142613 0.0350279 0.0492532 0.685328 0.5 +-0.0131306 0.0351789 0.049391 0.428744 0.400091 +-0.0120723 0.0353434 0.0494553 0.877126 0.5 +-0.0109155 0.0356188 0.0494667 0.840078 0.5 +-0.00976126 0.0358952 0.049479 0.65394 0.5 +-0.00860718 0.0361712 0.0494902 0.591191 0.5 +-0.00737907 0.0367231 0.0491533 0.218136 0.421741 +-0.00609738 0.037339 0.0487481 0.238837 0.5 +-0.0650238 0.0641454 0.0272956 0.475481 0.5 +-0.0641074 0.0639595 0.0276548 0.502307 0.470604 +-0.0839319 0.117006 0.0485566 0.728054 0.5 +-0.063207 0.06374 0.0280276 0.667271 0.371296 +-0.065153 0.0712063 0.036955 0.521953 0.5 +-0.0663565 0.0783826 0.0411592 0.591267 0.5 +-0.0814272 0.0752484 0.0195365 0.770515 0.5 +-0.0679292 0.0674285 0.0308631 0.491898 0.470477 +-0.0720693 0.0709772 0.0321852 0.596831 0.5 +-0.0688648 0.111591 0.0438135 0.339731 0.5 +-0.0728503 0.107163 0.0374416 0.333195 0.5 +-0.062259 0.0636125 0.0283336 0.636152 0.384928 +-0.0764283 0.117143 0.0518912 0.57247 0.473261 +-0.0875696 0.115156 0.045661 0.566656 0.5 +-0.0890966 0.114815 0.0438036 0.498813 0.5 +-0.085737 0.110915 0.0387737 0.900324 0.5 +-0.0838603 0.0771078 0.0156983 0.68627 0.195497 +-0.0831878 0.0764607 0.0163622 0.699643 0.5 +-0.0613089 0.0634913 0.028639 0.629029 0.389292 +-0.079976 0.076532 0.0275303 0.776805 0.5 +-0.0603606 0.0633645 0.0289482 0.626557 0.393053 +-0.0851934 0.11068 0.0373035 0.82597 0.5 +-0.0712203 0.0706743 0.0326242 0.585215 0.5 +-0.0799475 0.0796892 0.0318714 0.689703 0.5 +-0.0594448 0.063179 0.0293052 0.585056 0.5 +-0.0675837 0.112197 0.043642 0.259837 0.5 +-0.0584924 0.0630612 0.0296076 0.56014 0.5 +-0.0548476 0.0665624 0.0361422 0.646872 0.249607 +-0.0801239 0.110623 0.0438367 0.444632 0.5 +-0.0575003 0.0630187 0.0298519 0.418615 0.436243 +-0.0757136 0.107486 0.0366393 0.379032 0.4574 +-0.0597781 0.0668249 0.0348598 0.573154 0.383113 +-0.058577 0.0727277 0.0406017 0.691607 0.5 +-0.0565065 0.0629707 0.0300974 0.353629 0.449954 +-0.0831854 0.11075 0.0323354 0.773807 0.5 +-0.0653913 0.0757553 0.0400472 0.610072 0.5 +-0.055548 0.0628794 0.0303893 0.271519 0.434679 +-0.0803034 0.072641 0.00422068 0.457746 0.242506 +-0.0797372 0.0717415 0.00518109 0.63873 0.5 +-0.0791205 0.0709783 0.00599758 0.661542 0.5 +-0.0784664 0.0703272 0.00666705 0.662896 0.5 +-0.0778143 0.0696403 0.00741827 0.498705 0.237608 +-0.0771027 0.0689891 0.00817725 0.756265 0.5 +-0.0545581 0.0628278 0.0306388 0.388626 0.5 +-0.0596114 0.0726835 0.0404064 0.572939 0.5 +-0.0752763 0.0667216 0.0105318 0.57242 0.5 +-0.0746541 0.0660086 0.0112783 0.584572 0.5 +-0.0739688 0.0653923 0.0119616 0.613903 0.331828 +-0.0731928 0.064943 0.0125198 0.6309 0.5 +-0.0724349 0.0644357 0.0131399 0.554388 0.5 +-0.0718387 0.063614 0.0140147 0.5028 0.5 +-0.0712419 0.0628661 0.0147709 0.493115 0.410872 +-0.0704877 0.0623972 0.0153213 0.495072 0.382643 +-0.0697006 0.0619862 0.0158161 0.453 0.5 +-0.0689131 0.06155 0.0163724 0.436109 0.425752 +-0.0680681 0.061235 0.0168081 0.442281 0.5 +-0.0672083 0.0609402 0.0172424 0.418815 0.430907 +-0.0663263 0.0606754 0.0176657 0.531502 0.5 +-0.065396 0.0605193 0.0180241 0.951147 0.5 +-0.0644961 0.0602892 0.0183972 0.522494 0.453268 +-0.0635876 0.0600882 0.0187607 0.522258 0.5 +-0.0626754 0.059895 0.0191264 0.523908 0.5 +-0.0617181 0.0598008 0.019418 0.949051 0.5 +-0.0608049 0.0596005 0.019786 0.766671 0.5 +-0.059855 0.0594826 0.0200848 0.571924 0.5 +-0.0588992 0.0593658 0.0203903 0.384369 0.5 +-0.0579501 0.0592474 0.0206872 0 0 +-0.0878896 0.111968 0.039224 0.50366 0.5 +-0.0535585 0.062801 0.0308747 0.265975 0.5 +-0.0847817 0.111591 0.0313073 0.425426 0.5 +-0.0658521 0.0361993 0.0388506 0.481924 0.5 +-0.0652339 0.0355811 0.0395373 0.598002 0.5 +-0.0644533 0.0351399 0.0400818 0.959347 0.5 +-0.0635867 0.03486 0.0405057 0.945054 0.5 +-0.0626767 0.0346583 0.0408688 0.91034 0.5 +-0.0616825 0.0346164 0.0411183 0.872973 0.5 +-0.0607335 0.034496 0.0414254 0.828865 0.5 +-0.0596993 0.0345337 0.0416145 0.801786 0.5 +-0.0587093 0.0344925 0.0418625 0.799449 0.5 +-0.0577153 0.0344512 0.0421091 0.787641 0.5 +-0.0566848 0.0344893 0.0422998 0.768679 0.5 +-0.0556539 0.0345276 0.0424927 0.769065 0.5 +-0.0546196 0.0345652 0.0426785 0.793297 0.5 +-0.0536298 0.0345249 0.0429297 0.810865 0.5 +-0.0525965 0.0345626 0.0431188 0.835051 0.5 +-0.0516068 0.0345225 0.0433683 0.655997 0.5 +-0.0505323 0.0346392 0.0434961 0.655489 0.5 +-0.0494618 0.0347575 0.043629 0.505422 0.5 +-0.0483876 0.0348751 0.0437589 0.509128 0.5 +-0.0472721 0.035073 0.043832 0.501116 0.5 +-0.0461189 0.0353483 0.0438447 0.338531 0.5 +-0.0450017 0.0355455 0.0439167 0.352199 0.5 +-0.0438855 0.03574 0.0440005 0.201185 0.5 +-0.0426232 0.0362716 0.0437883 0.215832 0.5 +-0.0415825 0.0366566 0.0434527 0.181991 0.305095 +-0.0816947 0.113482 0.0465399 0.471116 0.5 +-0.0747322 0.0729443 0.0316828 0.65569 0.5 +-0.087519 0.112 0.0410625 0.424557 0.5 +-0.0373738 0.0365422 0.044687 0.528209 0.5 +-0.0366241 0.0360289 0.0452882 0.642312 0.5 +-0.0358314 0.0356542 0.0457978 0.633219 0.5 +-0.035019 0.035354 0.0462574 0.598049 0.412495 +-0.0341019 0.0350895 0.0466468 0.970847 0.5 +-0.0331932 0.0348891 0.047012 0.912899 0.5 +-0.0321586 0.0349269 0.0472031 0.828792 0.5 +-0.0311676 0.0348856 0.0474529 0.632752 0.5 +-0.0301364 0.0349235 0.0476426 0.613679 0.5 +-0.0291057 0.0349617 0.0478282 0.620477 0.5 +-0.0281528 0.0348412 0.0481365 0.620806 0.5 +-0.0270805 0.0349584 0.0482667 0.608418 0.5 +-0.0260866 0.0349169 0.0485155 0.635448 0.5 +-0.0250963 0.0348756 0.0487637 0.62 0.5 +-0.0241054 0.0348343 0.0490127 0.635777 0.5 +-0.0231171 0.0347933 0.0492623 0.62428 0.5 +-0.0220809 0.0348313 0.0494485 0.627618 0.5 +-0.0210492 0.0348694 0.0496408 0.647317 0.5 +-0.0200589 0.0348282 0.0498878 0.667198 0.5 +-0.0190678 0.0347878 0.0501361 0.666409 0.5 +-0.0179936 0.034905 0.0502652 0.656054 0.5 +-0.0168782 0.0351038 0.0503404 0.67915 0.5 +-0.0157478 0.0352634 0.050467 0.513092 0.5 +-0.0146066 0.0355634 0.0504427 0.545782 0.5 +-0.0135059 0.0357879 0.0504712 0.393921 0.5 +-0.012329 0.0361667 0.050366 0.350095 0.5 +-0.0111043 0.0366055 0.0502176 0.268042 0.5 +-0.00977952 0.0372711 0.0498001 0.232703 0.409529 +-0.0810675 0.11076 0.0435122 0.547877 0.5 +-0.0739705 0.110854 0.0450522 0.888247 0.5 +-0.0699548 0.147947 -0.0321477 0.383147 0.5 +-0.0787914 0.0724652 0.0224838 0.775073 0.5 +-0.0681116 0.112409 0.0451263 0.345199 0.5 +-0.0829375 0.116994 0.0487646 0.680718 0.5 +-0.0824758 0.0764829 0.0200121 0.753296 0.5 +-0.0817829 0.110167 0.0313299 0.506467 0.5 +-0.0713881 0.068562 0.0291565 0.528711 0.466964 +-0.0821218 0.075868 0.0188618 0.763542 0.5 +-0.0828574 0.0764021 0.018249 0.746822 0.5 +-0.070524 0.0682803 0.0295828 0.495043 0.5 +-0.0772723 0.114862 0.0500033 0.478908 0.473665 +-0.0506105 0.0694238 0.0381651 0.705044 0.5 +-0.0802253 0.0772741 0.0285988 0.780044 0.5 +-0.0802055 0.0754813 0.024867 0.626893 0.483109 +-0.0642021 0.071089 0.0372614 0.517327 0.5 +-0.0576054 0.0658547 0.0344063 0.522041 0.5 +-0.0772544 0.0764799 0.0316515 0.698509 0.5 +-0.0732628 0.0731075 0.0335988 0.682405 0.5 +-0.0611633 0.0698433 0.0372322 0.599577 0.5 +-0.0711005 0.148774 -0.0369587 0.36211 0.5 +-0.0710897 0.0678996 0.0280309 0.66047 0.405544 +-0.0745865 0.0720219 0.0307608 0.623328 0.5 +-0.0792494 0.0723341 0.0207326 0.809706 0.5 +-0.0653767 0.0770838 0.0407622 0.615064 0.5 +-0.087269 0.112677 0.0244432 0.698144 0.5 +-0.0729148 0.0713134 0.0317175 0.611998 0.5 +-0.0620154 0.0689049 0.0360997 0.592557 0.474056 +-0.0877256 0.112462 0.0226926 0.718362 0.360805 +-0.0568342 0.0666429 0.0356476 0.577924 0.405351 +-0.0785673 0.0716608 0.0214639 0.79796 0.5 +-0.0877693 0.113692 0.0289151 0.613555 0.5 +-0.0546552 0.0656851 0.0351815 0.582142 0.5 +-0.0669139 0.0704667 0.0354638 0.486583 0.476249 +-0.0685164 0.0669975 0.0293604 0.474394 0.5 +-0.0746807 0.110131 0.0436879 0.861262 0.5 +-0.0806495 0.10968 0.039129 0.905173 0.5 +-0.0663103 0.0759418 0.0397029 0.607378 0.5 +-0.0649093 0.06918 0.0352438 0.707914 0.5 +-0.0745558 0.0684435 0.0233437 0.713434 0.5 +-0.0891171 0.11284 0.0400327 0.455078 0.5 +-0.0797103 0.0711205 0.00752586 0.689513 0.5 +-0.0790801 0.0704064 0.00826811 0.698102 0.5 +-0.078379 0.0698242 0.00895098 0.711962 0.275652 +-0.0776274 0.0692865 0.00957677 0.719785 0.5 +-0.076964 0.0686471 0.0102516 0.715621 0.5 +-0.0763247 0.0679089 0.0110614 0.516133 0.466356 +-0.0756565 0.0672218 0.011813 0.570943 0.451313 +-0.075008 0.0665773 0.0124915 0.594149 0.5 +-0.0743388 0.0659419 0.0131754 0.614628 0.5 +-0.0736013 0.0654333 0.0137843 0.582441 0.233216 +-0.0729386 0.0646873 0.0146181 0.524433 0.409431 +-0.0723757 0.0638786 0.0154336 0.499572 0.261703 +-0.0717154 0.0632455 0.0160979 0.508851 0.419451 +-0.0709345 0.0627948 0.0166551 0.489033 0.5 +-0.0701585 0.0623473 0.0172092 0.489057 0.39238 +-0.0693216 0.0620201 0.0176481 0.484562 0.398774 +-0.0684648 0.0617211 0.0180797 0.434639 0.420245 +-0.0675878 0.0614559 0.0185068 0.549815 0.5 +-0.0666703 0.0612745 0.0188657 0.964103 0.5 +-0.065804 0.0609905 0.0192925 0.957361 0.5 +-0.064905 0.0607648 0.0196679 0.535632 0.447506 +-0.0639921 0.0605727 0.020032 0.529587 0.453606 +-0.0630317 0.060472 0.0203248 0.964126 0.5 +-0.0621323 0.0602572 0.0206983 0.529997 0.453553 +-0.0611808 0.060116 0.0210055 0.551282 0.5 +-0.0602281 0.059992 0.0213112 0.449332 0.5 +-0.0592659 0.0599215 0.0215991 0.578175 0.5 +-0.0583287 0.0597422 0.0219213 0.240546 0.5 +-0.0707139 0.0721775 0.0349299 0.622081 0.5 +-0.0871021 0.111516 0.0397664 0.507356 0.450712 +-0.0778803 0.0710945 0.0220932 0.782442 0.5 +-0.075934 0.0788992 0.0351468 0.75902 0.5 +-0.0651505 0.0366918 0.0402161 0.439461 0.5 +-0.0646199 0.0359342 0.0410351 0.491459 0.5 +-0.063929 0.0354009 0.0416662 0.599469 0.5 +-0.0630631 0.0351206 0.0420909 0.99742 0.5 +-0.0621134 0.0350003 0.0423988 0.971369 0.5 +-0.0612039 0.0347997 0.0427656 0.963268 0.5 +-0.0602518 0.034678 0.0430709 0.908054 0.5 +-0.0592646 0.0346371 0.0433189 0.882284 0.5 +-0.0582724 0.0345955 0.0435663 0.871987 0.5 +-0.0572808 0.0345537 0.0438127 0.865985 0.5 +-0.0562455 0.0345922 0.0440034 0.856222 0.5 +-0.0552136 0.0346314 0.0441945 0.857769 0.5 +-0.0541416 0.034749 0.0443256 0.853922 0.5 +-0.0530668 0.0348658 0.0444554 0.875414 0.5 +-0.0520347 0.0349067 0.0446489 0.725029 0.5 +-0.0509437 0.0349503 0.0448676 0.334694 0.5 +-0.0723024 0.111428 0.0467445 0.478434 0.5 +-0.0889991 0.11248 0.0367803 0.430525 0.445782 +-0.0475797 0.035695 0.0449374 0.339207 0.5 +-0.060035 0.0645406 0.0315175 0.467725 0.437525 +-0.0806498 0.110292 0.0422048 0.938101 0.5 +-0.0550935 0.0685958 0.0378502 0.624934 0.5 +-0.0691516 0.0788347 0.0401452 0.597767 0.5 +-0.082015 0.110886 0.0432009 0.539251 0.5 +-0.0605698 0.0727907 0.0401099 0.573593 0.48157 +-0.0773369 0.105608 0.0341784 0.522634 0.5 +-0.0507764 0.0715485 0.0397729 0.684688 0.405389 +-0.064755 0.068231 0.0343382 0.520534 0.340711 +-0.0689178 0.0717538 0.0356819 0.506644 0.5 +-0.0737672 0.068042 0.0238437 0.690409 0.230311 +-0.0351573 0.0361738 0.0471926 0.621622 0.5 +-0.0343725 0.0357923 0.047703 0.632488 0.5 +-0.0335698 0.0354174 0.0482024 0.593892 0.5 +-0.0326308 0.0352345 0.0485487 0.97866 0.5 +-0.0317212 0.0350332 0.0489115 0.947235 0.5 +-0.0307721 0.0349136 0.04922 0.887675 0.5 +-0.0297808 0.0348722 0.0494682 0.839975 0.5 +-0.0287487 0.0349103 0.0496611 0.814087 0.5 +-0.0277559 0.0348695 0.0499059 0.774529 0.5 +-0.026685 0.0349864 0.0500364 0.793489 0.5 +-0.0257365 0.0348667 0.0503471 0.816387 0.5 +-0.0247044 0.0349045 0.050534 0.821336 0.5 +-0.0237103 0.0348634 0.0507821 0.835182 0.5 +-0.0226813 0.0349023 0.0509736 0.817723 0.5 +-0.0216077 0.0350207 0.0511065 0.843389 0.5 +-0.0205761 0.0350586 0.0512942 0.866268 0.5 +-0.0195012 0.0351765 0.0514244 0.867851 0.5 +-0.0183748 0.0353493 0.0515278 0.545957 0.5 +-0.0172261 0.0356447 0.0515267 0.575917 0.5 +-0.0359956 0.151076 -0.00202594 0.242178 0.418265 +-0.0466962 0.147986 -0.00319779 0.640606 0.5 +-0.0692389 0.149629 -0.0402111 0.285087 0.388492 +-0.0483555 0.146018 -0.00117385 0.583019 0.5 +-0.0611783 0.167226 -0.0592729 0.517736 0.5 +-0.0158901 0.160985 -0.0130889 0.300113 0.403193 +-0.0688076 0.150274 -0.0424283 0.631599 0.5 +-0.0241329 0.157302 -0.00905689 0.469485 0.437523 +-0.0685062 0.142066 -0.00982847 0.517016 0.38825 +-0.0656264 0.15567 -0.0512009 0.478311 0.5 +-0.0433649 0.150829 -0.00565896 0.595142 0.5 +-0.0640545 0.149152 -0.0269946 0.587998 0.5 +-0.0379505 0.150881 -0.00456722 0.363823 0.5 +-0.0249398 0.157384 -0.00964166 0.513804 0.419065 +-0.0632159 0.147647 -0.016402 0.612537 0.5 +-0.0279028 0.160261 -0.0136941 0.78729 0.5 +-0.0630689 0.150547 -0.0265942 0.6525 0.5 +-0.00997005 0.175779 -0.0292074 0.366445 0.393582 +-0.0631298 0.144906 -0.0101196 0.604725 0.5 +-0.0652865 0.1555 -0.0467797 0.646509 0.5 +-0.0531289 0.138241 -0.000765665 0.628512 0.5 +-0.0310985 0.154152 -0.00673494 0.485277 0.429563 +-0.0636168 0.143654 -0.00954122 0.578125 0.5 +-0.0650821 0.148822 -0.0290175 0.552642 0.5 +-0.0517386 0.139928 0.000994108 0.552269 0.5 +-0.0248998 0.158417 -0.0112592 0.577872 0.5 +-0.0623235 0.139333 -0.00679766 0.60066 0.5 +-0.027962 0.155009 -0.00579987 0.426256 0.5 +-0.0169173 0.16018 -0.0117745 0.299188 0.398266 +-0.050147 0.145259 -0.000515581 0.655517 0.5 +-0.0647467 0.143415 -0.011401 0.857745 0.5 +-0.0096483 0.171546 -0.0270746 0.365154 0.5 +-0.0633421 0.145588 -0.0131138 0.400803 0.470167 +-0.0449931 0.152736 -0.00651735 0.707449 0.5 +-0.0678832 0.147765 -0.0303891 0.291927 0.366562 +-0.0297515 0.154263 -0.00514597 0.416596 0.5 +-0.0240484 0.159369 -0.0122932 0.633262 0.5 +-0.0179779 0.15947 -0.0103936 0.455038 0.5 +-0.0510836 0.145457 -0.000907293 0.777415 0.5 +-0.0652397 0.150467 -0.0337229 0.40076 0.47442 +-0.0628194 0.162004 -0.0576316 0.400042 0.5 +-0.0663951 0.140334 -0.00790584 0.723467 0.5 +-0.0641378 0.146153 -0.0169913 0.525294 0.5 +-0.0703699 0.144073 -0.0154773 0.214016 0.5 +-0.0118669 0.165326 -0.0197278 0.361906 0.5 +-0.0614701 0.166956 -0.0604533 0.352801 0.5 +-0.066663 0.144317 -0.015468 0.770225 0.5 +-0.0641572 0.150753 -0.03179 0.410187 0.5 +-0.047699 0.144615 0.00435323 0.228158 0.5 +-0.0645863 0.144373 -0.0132186 0.470547 0.5 +-0.0643644 0.153473 -0.0380226 0.722841 0.5 +-0.0148475 0.162865 -0.0159421 0.451206 0.5 +-0.0141543 0.161827 -0.01362 0.306328 0.5 +-0.0640258 0.15968 -0.0562568 0.361834 0.5 +-0.0664605 0.152204 -0.0437352 0.538048 0.5 +-0.0654874 0.143443 -0.0120814 0.840504 0.5 +-0.0457281 0.151677 -0.00565337 0.711362 0.5 +-0.031909 0.154239 -0.00732019 0.507028 0.422539 +-0.0650258 0.156351 -0.0487028 0.604768 0.5 +-0.0638714 0.15469 -0.0385902 0.56719 0.481672 +-0.0681034 0.152856 -0.0481556 0.293345 0.406188 +-0.0167645 0.162218 -0.0151135 0.574749 0.5 +-0.0456965 0.147701 -0.00292724 0.572371 0.5 +-0.0387577 0.150948 -0.00516845 0.387702 0.5 +-0.0662237 0.145026 -0.0176812 0.764025 0.5 +-0.0696125 0.150354 -0.0430103 0.47272 0.5 +-0.0415729 0.151549 -0.00635576 0.633348 0.5 +-0.0271741 0.161328 -0.0145155 0.856472 0.5 +-0.0338241 0.152569 -0.00489392 0.786231 0.5 +-0.0708261 0.144835 -0.0182015 0.209906 0.5 +-0.0344427 0.15352 -0.00733684 0.564742 0.5 +-0.069062 0.149033 -0.0371338 0.281212 0.5 +-0.0382525 0.154358 -0.00883541 0.725146 0.5 +-0.067159 0.152634 -0.0476967 0.436707 0.393571 +-0.0658849 0.153363 -0.0443952 0.533719 0.5 +-0.0426772 0.14763 -0.000244299 0.335538 0.5 +-0.0109096 0.167211 -0.0224966 0.390049 0.5 +-0.063716 0.150986 -0.0306408 0.582659 0.5 +-0.0666364 0.150881 -0.0385507 0.590962 0.5 +-0.0367886 0.156481 -0.0105439 0.767887 0.5 +-0.049358 0.146268 -0.00147688 0.640818 0.5 +-0.0138771 0.164812 -0.0186885 0.561955 0.5 +-0.0181568 0.165005 -0.0179156 0.69189 0.5 +-0.0398753 0.149194 -0.00215183 0.610851 0.5 +-0.0240269 0.158277 -0.0107707 0.552175 0.5 +-0.0415439 0.148326 -0.00168489 0.764228 0.5 +-0.0405106 0.151258 -0.00613685 0.616812 0.5 +-0.0680155 0.149781 -0.0384715 0.429834 0.368185 +-0.0225945 0.157229 -0.0076361 0.262747 0.362101 +-0.0222598 0.160103 -0.0129456 0.608905 0.350946 +-0.0652177 0.144322 -0.0140816 0.458143 0.5 +-0.0666009 0.15275 -0.0468174 0.536237 0.5 +-0.0674167 0.149888 -0.0375972 0.449517 0.5 +-0.030183 0.155051 -0.00785968 0.500025 0.5 +-0.0509196 0.141445 0.00173554 0.437855 0.5 +-0.0336363 0.153436 -0.00674709 0.511 0.5 +-0.0618211 0.164489 -0.0586698 0.597042 0.5 +-0.0122439 0.168894 -0.023749 0.549522 0.5 +-0.0431023 0.149502 -0.00451393 0.588458 0.5 +-0.0206187 0.158806 -0.0102834 0.501143 0.402376 +-0.0379006 0.151906 -0.00621808 0.562588 0.5 +-0.0321606 0.153429 -0.00535973 0.613744 0.5 +-0.0459377 0.145792 0.000601046 0.777194 0.5 +-0.0655442 0.155124 -0.0481259 0.607985 0.5 +-0.0379836 0.153062 -0.00765575 0.634558 0.5 +-0.0456817 0.146626 -0.00135754 0.487277 0.435221 +-0.0130347 0.166801 -0.0212915 0.517241 0.5 +-0.0427079 0.151894 -0.00649313 0.675987 0.5 +-0.0148931 0.161809 -0.0143393 0.322852 0.384687 +-0.0446977 0.147484 -0.0025954 0.513068 0.5 +-0.0231566 0.158136 -0.0102789 0.499802 0.5 +-0.0510476 0.139892 0.00172061 0.506 0.5 +-0.0500642 0.142991 0.00242772 0.463237 0.457674 +-0.0128992 0.165641 -0.0199242 0.43641 0.5 +-0.0538875 0.139905 -0.00121756 0.625266 0.5 +-0.0372554 0.154082 -0.00855912 0.684001 0.5 +-0.0624397 0.16285 -0.0548313 0.574242 0.5 +-0.0661058 0.151041 -0.0375744 0.616666 0.5 +-0.0650223 0.156803 -0.0519494 0.593511 0.5 +-0.0653258 0.140047 -0.00770568 0.730717 0.5 +-0.0609158 0.169795 -0.0608698 0.410128 0.5 +-0.0483263 0.149906 -0.00403153 0.512791 0.5 +-0.0622151 0.166391 -0.0605094 0.361152 0.347384 +-0.068634 0.151185 -0.044245 0.35852 0.5 +-0.0654804 0.152163 -0.03833 0.664636 0.5 +-0.0627982 0.16724 -0.0607839 0.297357 0.252336 +-0.0393811 0.154717 -0.00895732 0.736121 0.5 +-0.0142729 0.16729 -0.0212151 0.553381 0.5 +-0.0499316 0.141822 0.00385784 0.429728 0.5 +-0.0168361 0.163394 -0.0165332 0.582916 0.5 +-0.0422245 0.148296 -0.00246029 0.847321 0.5 +-0.0145721 0.168692 -0.0222333 0.620336 0.5 +-0.00876485 0.1716 -0.0262973 0.292433 0.405066 +-0.0345483 0.152531 -0.00560476 0.507713 0.5 +-0.0405566 0.149165 -0.00293165 0.832265 0.5 +-0.0397769 0.152293 -0.00702124 0.657846 0.5 +-0.0635158 0.162004 -0.0583208 0.553523 0.5 +-0.0623624 0.16436 -0.0595797 0.393294 0.5 +-0.0116051 0.171103 -0.0260001 0.54956 0.5 +-0.0138688 0.163706 -0.0171714 0.436104 0.5 +-0.0695099 0.151355 -0.0447129 0.240421 0.391205 +-0.063994 0.152679 -0.0352218 0.378663 0.479757 +-0.0292743 0.157003 -0.0105584 0.611012 0.360932 +-0.0616655 0.144455 -0.00523057 0.420316 0.5 +-0.0694061 0.153071 -0.0482738 0.24683 0.290349 +-0.0178968 0.163686 -0.0167578 0.663525 0.5 +-0.0678883 0.145704 -0.022127 0.561257 0.5 +-0.0649365 0.1467 -0.0209465 0.500101 0.407651 +-0.0695171 0.141232 -0.00845814 0.490215 0.5 +-0.0646993 0.150616 -0.0327557 0.418448 0.5 +-0.0633655 0.139636 -0.00706655 0.65879 0.5 +-0.0453871 0.145929 0.00156561 0.572973 0.5 +-0.021666 0.16235 -0.015178 0.737479 0.5 +-0.0683543 0.152019 -0.0462463 0.268816 0.435845 +-0.0658527 0.144237 -0.0148815 0.801133 0.5 +-0.0275374 0.156717 -0.00957418 0.578388 0.5 +-0.0170332 0.164657 -0.0177746 0.665918 0.5 +-0.0128851 0.164546 -0.0183954 0.429902 0.368676 +-0.0310058 0.156198 -0.0100049 0.610138 0.5 +-0.0387772 0.152061 -0.00669739 0.598088 0.5 +-0.0494259 0.144129 0.00171058 0.412742 0.416676 +-0.0474205 0.145822 -0.000777163 0.509882 0.5 +-0.0338729 0.15688 -0.0110666 0.732654 0.5 +-0.0452267 0.150119 -0.00491516 0.639309 0.5 +-0.0478227 0.148347 -0.00331487 0.467161 0.474089 +-0.0152574 0.166467 -0.0199789 0.609078 0.5 +-0.0208658 0.163381 -0.0161046 0.699626 0.5 +-0.0681283 0.146379 -0.0251159 0.575699 0.5 +-0.0684671 0.140894 -0.00832284 0.655338 0.5 +-0.0439563 0.147482 -0.0018962 0.834277 0.5 +-0.0638562 0.148524 -0.023921 0.509105 0.5 +-0.065557 0.158804 -0.0559152 0.41426 0.324593 +-0.0632228 0.141176 -0.0069873 0.489764 0.5 +-0.0717673 0.146065 -0.0213605 0.126555 0.229662 +-0.0551968 0.138069 -0.00309725 0.695456 0.5 +-0.0132125 0.168083 -0.022507 0.576443 0.5 +-0.0276378 0.158958 -0.0125395 0.701257 0.5 +-0.065785 0.145733 -0.0198954 0.805506 0.5 +-0.0186027 0.160444 -0.0128213 0.494244 0.417189 +-0.0649779 0.141437 -0.00794337 0.671487 0.5 +-0.0151227 0.160977 -0.0122661 0.31952 0.5 +-0.0655423 0.145055 -0.0169033 0.806224 0.5 +-0.0249816 0.15956 -0.0126947 0.655684 0.5 +-0.0113061 0.169739 -0.0249506 0.492569 0.5 +-0.0377322 0.150234 -0.00179971 0.297873 0.348236 +-0.0638387 0.163409 -0.0592654 0.493669 0.5 +-0.0110616 0.168437 -0.0238044 0.501331 0.5 +-0.0408442 0.152602 -0.00723164 0.706364 0.5 +-0.0664625 0.145705 -0.0206681 0.785122 0.5 +-0.018943 0.164042 -0.0169159 0.733729 0.5 +-0.0626506 0.153382 -0.0318715 0.494099 0.483077 +-0.062927 0.150005 -0.0233391 0.624089 0.5 +-0.0106027 0.171925 -0.0271985 0.467082 0.304547 +-0.0364615 0.155102 -0.00949574 0.705748 0.5 +-0.0690491 0.153118 -0.0485047 0.256157 0.289664 +-0.0362549 0.153841 -0.0082413 0.62771 0.5 +-0.034669 0.15585 -0.0101443 0.691657 0.5 +-0.0100812 0.168118 -0.0236136 0.418542 0.5 +-0.031353 0.158667 -0.0125849 0.816328 0.5 +-0.0685791 0.147786 -0.0311476 0.324416 0.5 +-0.0623778 0.167137 -0.0608155 0.374899 0.5 +-0.0293863 0.155004 -0.00725783 0.837545 0.5 +-0.0537922 0.14151 -0.001138 0.594394 0.5 +-0.0623049 0.142641 -0.00633906 0.473816 0.5 +-0.0644028 0.146849 -0.019975 0.518615 0.5 +-0.0293599 0.15815 -0.0119938 0.696253 0.5 +-0.065164 0.147357 -0.0239331 0.819685 0.5 +-0.0148578 0.163977 -0.0174595 0.568036 0.5 +-0.070378 0.149076 -0.0386493 0.335183 0.5 +-0.0257693 0.158564 -0.0117505 0.593385 0.374801 +-0.0663198 0.150167 -0.0356652 0.540628 0.5 +-0.0640918 0.158696 -0.0546245 0.525776 0.5 +-0.0107913 0.165034 -0.0192459 0.289862 0.5 +-0.0720157 0.145244 -0.0182167 0.200274 0.5 +-0.069197 0.145134 -0.0204031 0.36769 0.5 +-0.0524624 0.139899 0.000243693 0.577252 0.5 +-0.0258672 0.156547 -0.00846874 0.822682 0.5 +-0.00948171 0.174183 -0.0285537 0.325652 0.410658 +-0.0234556 0.161598 -0.0145283 0.695153 0.5 +-0.0370469 0.152854 -0.00726744 0.59616 0.5 +-0.0711683 0.149278 -0.039104 0.281802 0.5 +-0.0459611 0.149058 -0.0040494 0.658252 0.5 +-0.070219 0.146984 -0.026659 0.312318 0.5 +-0.0222445 0.159024 -0.0114139 0.541584 0.5 +-0.010275 0.170544 -0.0261793 0.471552 0.33685 +-0.0641249 0.156393 -0.0431197 0.743379 0.5 +-0.017619 0.161286 -0.0140538 0.57382 0.5 +-0.0611658 0.168359 -0.0606871 0.361301 0.5 +-0.0238887 0.156697 -0.00604726 0.356041 0.5 +-0.0686207 0.149674 -0.0393499 0.618353 0.5 +-0.0642545 0.154418 -0.039754 0.478396 0.477405 +-0.0410037 0.148494 -0.000715623 0.320942 0.42352 +-0.0645467 0.148975 -0.0280488 0.57503 0.5 +-0.064545 0.156137 -0.0442784 0.706524 0.5 +-0.0438994 0.148485 -0.00356582 0.555054 0.5 +-0.0241902 0.160559 -0.0136368 0.727899 0.5 +-0.0719316 0.149607 -0.0394232 0.151917 0.5 +-0.0194753 0.160592 -0.0133076 0.548146 0.5 +-0.0668563 0.151928 -0.044894 0.462927 0.5 +-0.036173 0.152719 -0.00677506 0.555192 0.401174 +-0.0643746 0.145275 -0.0151376 0.406505 0.5 +-0.0649333 0.145142 -0.016034 0.495088 0.428617 +-0.0176939 0.162435 -0.0154936 0.621153 0.5 +-0.0430291 0.148351 -0.00306372 0.527806 0.42084 +-0.02161 0.158057 -0.00899889 0.638082 0.5 +-0.065417 0.154594 -0.0449582 0.600953 0.5 +-0.0657391 0.142564 -0.0101503 0.838775 0.5 +-0.0327214 0.154341 -0.00788327 0.520993 0.5 +-0.0432223 0.147486 -0.00120685 0.428638 0.5 +-0.0269011 0.155694 -0.0071882 0.369627 0.424216 +-0.0200653 0.164398 -0.0170398 0.75921 0.5 +-0.0632877 0.151202 -0.0295741 0.698594 0.5 +-0.0248971 0.163359 -0.0156802 0.857151 0.5 +-0.0614708 0.165833 -0.0590275 0.603546 0.5 +-0.0204571 0.159751 -0.0120682 0.562855 0.5 +-0.0353184 0.153664 -0.00782609 0.589127 0.5 +-0.00997898 0.172997 -0.0279186 0.381443 0.412535 +-0.0664375 0.153657 -0.0486366 0.692581 0.5 +-0.0654804 0.146553 -0.0219125 0.463744 0.420001 +-0.0665297 0.149283 -0.0337543 0.359272 0.5 +-0.0286406 0.154979 -0.0065778 0.629642 0.5 +-0.0198183 0.158714 -0.00970491 0.368763 0.420943 +-0.0628566 0.163115 -0.0590591 0.538727 0.5 +-0.0643715 0.139866 -0.00735458 0.583082 0.5 +-0.0344621 0.154617 -0.00886992 0.618934 0.5 +-0.0301543 0.157156 -0.0110394 0.634741 0.5 +-0.0658978 0.147832 -0.0279808 0.504201 0.5 +-0.0628859 0.1495 -0.0200671 0.452229 0.5 +-0.0647358 0.157148 -0.0507072 0.576458 0.5 +-0.063339 0.160302 -0.0538579 0.532025 0.5 +-0.00932165 0.17502 -0.028678 0.299062 0.5 +-0.0356652 0.156121 -0.0104266 0.730519 0.5 +-0.0632078 0.143892 -0.00837073 0.604322 0.5 +-0.0622726 0.163207 -0.0582148 0.437094 0.5 +-0.0652579 0.153012 -0.0402459 0.600151 0.5 +-0.0268492 0.155368 -0.00477229 0.202406 0.5 +-0.0642885 0.148287 -0.0250747 0.494187 0.5 +-0.068322 0.144999 -0.0199128 0.546314 0.5 +-0.0167466 0.161131 -0.0135692 0.436949 0.5 +-0.0610724 0.144529 -0.00434459 0.43947 0.5 +-0.0648295 0.14966 -0.0309451 0.510262 0.404688 +-0.0195496 0.161752 -0.0147401 0.588579 0.5 +-0.0157653 0.161968 -0.0148041 0.424017 0.5 +-0.0661283 0.153073 -0.0457545 0.354779 0.441231 +-0.0159101 0.1643 -0.0176565 0.632766 0.5 +-0.0197453 0.163025 -0.0159769 0.693859 0.296122 +-0.0538319 0.138205 -0.00152003 0.674905 0.5 +-0.0636177 0.149382 -0.0259273 0.593428 0.5 +-0.0618668 0.165619 -0.0600772 0.357415 0.426859 +-0.0674426 0.148384 -0.0326115 0.63559 0.5 +-0.0382124 0.150071 -0.00262103 0.379495 0.402471 +-0.0481456 0.14427 0.00342034 0.236126 0.417297 +-0.0628742 0.161547 -0.05443 0.623714 0.5 +-0.0274951 0.157765 -0.0111917 0.624557 0.5 +-0.0698236 0.144589 -0.0179026 0.348206 0.5 +-0.067038 0.143551 -0.013347 0.747028 0.5 +-0.0702692 0.146349 -0.0238997 0.187457 0.291214 +-0.0653179 0.156011 -0.0499494 0.529151 0.5 +-0.044347 0.146755 0.000226372 0.342851 0.431595 +-0.0703667 0.142544 -0.0104932 0.253622 0.5 +-0.0118076 0.166362 -0.0213381 0.44684 0.5 +-0.0683811 0.149044 -0.0363633 0.375986 0.5 +-0.066026 0.146409 -0.0228827 0.791758 0.5 +-0.0639324 0.147049 -0.0189093 0.52602 0.5 +-0.0232571 0.160328 -0.0132723 0.641269 0.5 +-0.0531944 0.139931 -0.000456373 0.598586 0.5 +-0.0251865 0.160795 -0.0139572 0.745077 0.5 +-0.0261802 0.161053 -0.0142499 0.80592 0.5 +-0.0646767 0.146003 -0.0179612 0.498944 0.5 +-0.0514122 0.146842 -0.00193867 0.788081 0.5 +-0.067642 0.150503 -0.040589 0.407016 0.5 +-0.0641925 0.158337 -0.0512857 0.62314 0.5 +-0.0492219 0.145089 -9.42983e-05 0.55921 0.395905 +-0.0187506 0.162746 -0.0157051 0.675436 0.5 +-0.0276517 0.15535 -0.00385533 0.154272 0.5 +-0.0283979 0.155793 -0.00852382 0.532607 0.401396 +-0.0412895 0.149153 -0.00363446 0.517095 0.5 +-0.0149904 0.165173 -0.0188028 0.559348 0.5 +-0.0678239 0.15109 -0.0436673 0.300963 0.5 +-0.0279379 0.155215 -0.0039665 0.16541 0.259344 +-0.0713444 0.144531 -0.0156116 0.191262 0.275799 +-0.0311494 0.157393 -0.0113544 0.73072 0.5 +-0.0654527 0.156561 -0.05302 0.363666 0.5 +-0.0284257 0.15795 -0.0115973 0.654676 0.5 +-0.0501242 0.144161 0.00100252 0.458746 0.5 +-0.0177321 0.160293 -0.0123373 0.396804 0.408318 +-0.0639066 0.158701 -0.0499459 0.643508 0.5 +-0.0637196 0.147938 -0.020833 0.594154 0.5 +-0.0289402 0.154865 -0.00285823 0.165474 0.335735 +-0.0649871 0.152354 -0.0372683 0.681931 0.5 +-0.0672863 0.151256 -0.0426939 0.49581 0.5 +-0.0675442 0.151908 -0.0456642 0.45976 0.5 +-0.0628045 0.144114 -0.00718004 0.505027 0.445013 +-0.02662 0.157614 -0.0107103 0.572663 0.5 +-0.0625842 0.162383 -0.0563311 0.573211 0.5 +-0.06937 0.145758 -0.0234859 0.378238 0.5 +-0.0108613 0.16611 -0.0209706 0.378327 0.347144 +-0.0670342 0.154632 -0.0510962 0.349863 0.381437 +-0.0106285 0.174518 -0.0286758 0.363974 0.5 +-0.0370306 0.151785 -0.00571407 0.530903 0.5 +-0.0318792 0.156356 -0.0104816 0.651828 0.5 +-0.0635974 0.151927 -0.0324488 0.463595 0.464152 +-0.064505 0.152553 -0.0362048 0.494186 0.5 +-0.0656159 0.148667 -0.029991 0.496952 0.5 +-0.0657818 0.152842 -0.0413063 0.620341 0.5 +-0.0690913 0.143 -0.0123014 0.557151 0.5 +-0.0674057 0.140585 -0.00814985 0.682445 0.5 +-0.0696706 0.14899 -0.0379959 0.321528 0.336509 +-0.0715189 0.150138 -0.0417489 0.205035 0.449353 +-0.0628726 0.147915 -0.0152353 0.69114 0.5 +-0.0657166 0.14722 -0.0249021 0.765601 0.5 +-0.0112299 0.173502 -0.0278641 0.486029 0.5 +-0.0622733 0.144309 -0.00616114 0.3932 0.5 +-0.0699102 0.14965 -0.0409667 0.306014 0.5 +-0.0657306 0.150277 -0.0347821 0.385597 0.5 +-0.0469903 0.145002 0.00194161 0.583264 0.5 +-0.0423065 0.150496 -0.00548521 0.608214 0.5 +-0.0214023 0.161048 -0.0139992 0.664108 0.5 +-0.0102345 0.169322 -0.0249254 0.43095 0.5 +-0.0643532 0.142586 -0.00864957 0.561148 0.5 +-0.0437605 0.146927 0.00133694 0.263917 0.393006 +-0.0668982 0.151542 -0.0415298 0.545682 0.5 +-0.0679787 0.154919 -0.0513588 0.230012 0.5 +-0.0195832 0.1596 -0.0115811 0.500477 0.5 +-0.0213292 0.159914 -0.0125433 0.595849 0.359956 +-0.01408 0.166026 -0.0199736 0.548321 0.319013 +-0.0674032 0.144345 -0.0161484 0.568735 0.5 +-0.025189 0.156576 -0.00769163 0.624727 0.5 +-0.0135887 0.169514 -0.0234669 0.590905 0.5 +-0.0396346 0.151103 -0.0056598 0.582106 0.387281 +-0.0647696 0.148087 -0.0261392 0.527046 0.378185 +-0.0238433 0.163025 -0.0155105 0.78711 0.5 +-0.0515557 0.141366 0.000880581 0.485469 0.5 +-0.0255078 0.162179 -0.0150106 0.854465 0.5 +-0.0710899 0.143489 -0.012899 0.21928 0.5 +-0.0502835 0.146495 -0.00183305 0.690901 0.312876 +-0.0445568 0.151229 -0.00569012 0.668427 0.5 +-0.0545976 0.139948 -0.00193829 0.642257 0.5 +-0.0441 0.149758 -0.00480897 0.620288 0.5 +-0.0683674 0.147186 -0.0280671 0.33 0.321813 +-0.0421651 0.149301 -0.00412295 0.522693 0.5 +-0.0523786 0.138216 -8.53499e-05 0.624577 0.5 +-0.0712073 0.146616 -0.0240304 0.212304 0.5 +-0.0344045 0.152028 -0.00248634 0.299654 0.334872 +-0.0634196 0.15027 -0.0277557 0.626824 0.5 +-0.0484925 0.14723 -0.00252533 0.663653 0.5 +-0.00908464 0.173025 -0.027717 0.216732 0.442746 +-0.0666857 0.141706 -0.00893584 0.608788 0.5 +-0.0725189 0.144585 -0.0159026 0.103131 0.5 +-0.0655919 0.151202 -0.0366034 0.631994 0.339633 +-0.0293232 0.155967 -0.00892475 0.537259 0.5 +-0.066223 0.15556 -0.0520809 0.368905 0.5 +-0.0647392 0.157599 -0.0538703 0.459248 0.5 +-0.0658194 0.154782 -0.0493821 0.552213 0.5 +-0.0293326 0.154386 -0.00360575 0.156588 0.200857 +-0.0650925 0.142629 -0.00933509 0.531867 0.5 +-0.0303597 0.158405 -0.0122944 0.735993 0.5 +-0.0652338 0.145869 -0.0189253 0.790963 0.5 +-0.0639329 0.153712 -0.0368711 0.517836 0.5 +-0.0494895 0.143125 0.00338457 0.374661 0.5 +-0.0635672 0.159894 -0.0552656 0.598501 0.5 +-0.0639536 0.144435 -0.0123561 0.376403 0.5 +-0.0484084 0.144974 0.000471547 0.529031 0.40419 +-0.0388973 0.150052 -0.00339157 0.478902 0.5 +-0.0288635 0.154571 -0.00355817 0.154373 0.272452 +-0.0231137 0.159172 -0.011899 0.55123 0.5 +-0.0645685 0.147457 -0.0230581 0.518977 0.5 +-0.0691709 0.147293 -0.0286567 0.346996 0.295822 +-0.0647302 0.154215 -0.0408208 0.472252 0.5 +-0.0641355 0.160881 -0.0576174 0.443029 0.5 +-0.0281334 0.155101 -0.00344078 0.130349 0.162813 +-0.0471466 0.149481 -0.0040486 0.476825 0.477381 +-0.0649274 0.155826 -0.0455264 0.692182 0.5 +-0.0354607 0.154847 -0.00919588 0.647336 0.5 +-0.068714 0.143769 -0.0144235 0.546302 0.5 +-0.0688026 0.146519 -0.0258522 0.29344 0.352321 +-0.0697305 0.146842 -0.0262196 0.286128 0.206425 +-0.0675802 0.144972 -0.0192338 0.72293 0.5 +-0.0712328 0.151001 -0.0437008 0.156246 0.108518 +-0.0332687 0.15271 -0.00392746 0.567577 0.5 +-0.0389846 0.1533 -0.00797514 0.657005 0.5 +-0.0661914 0.152591 -0.0424622 0.603283 0.5 +-0.0685644 0.145677 -0.0229009 0.542906 0.5 +-0.0630574 0.15313 -0.033029 0.494417 0.5 +-0.0506452 0.142899 0.00154993 0.505368 0.5 +-0.0259115 0.159753 -0.0130913 0.672851 0.5 +-0.0303849 0.154168 -0.00247422 0.160122 0.402818 +-0.0276261 0.15573 -0.00786612 0.506378 0.408215 +-0.0629042 0.151488 -0.0283316 0.715359 0.5 +-0.0655821 0.153706 -0.0431373 0.614801 0.5 +-0.0671293 0.149176 -0.0346332 0.39715 0.5 +-0.0678286 0.139237 -0.00787376 0.758126 0.5 +-0.0503848 0.141583 0.00270968 0.503594 0.5 +-0.0257539 0.157476 -0.0102144 0.51967 0.5 +-0.0627477 0.148893 -0.0169766 0.620522 0.5 +-0.00971544 0.177216 -0.0294611 0.275035 0.357782 +-0.0662325 0.14347 -0.0127636 0.779372 0.5 +-0.0646684 0.155196 -0.0425404 0.736646 0.5 +-0.0650665 0.151369 -0.0356223 0.446277 0.47714 +-0.0630084 0.142674 -0.00705706 0.545127 0.5 +-0.0633749 0.1608 -0.057006 0.360577 0.5 +-0.047607 0.144918 0.0010701 0.806736 0.5 +-0.0267283 0.156621 -0.00899742 0.522208 0.5 +-0.0725233 0.143597 -0.0104167 0.167064 0.116027 +-0.0672167 0.147775 -0.0296135 0.294494 0.5 +-0.0637876 0.155678 -0.0402328 0.790452 0.5 +-0.0303698 0.154176 -0.00601441 0.610896 0.5 +-0.0335873 0.154463 -0.00838872 0.569193 0.5 +-0.0374543 0.155389 -0.00975319 0.7655 0.5 +-0.0627356 0.150882 -0.0252578 0.640507 0.5 +-0.0214326 0.158913 -0.0108411 0.52248 0.5 +-0.0635082 0.148832 -0.022668 0.610183 0.5 +-0.0129572 0.163516 -0.016687 0.327613 0.5 +-0.0700292 0.14319 -0.0126949 0.371405 0.5 +-0.0463999 0.150559 -0.00488163 0.666434 0.5 +-0.0636502 0.159498 -0.051954 0.656438 0.5 +-0.0721769 0.146332 -0.0246714 0.109543 0.5 +-0.0689525 0.144454 -0.0174142 0.512959 0.5 +-0.0613355 0.171315 -0.0617342 0.383905 0.5 +-0.0262324 0.15581 -0.00635861 0.433068 0.5 +-0.0667057 0.14638 -0.0236565 0.773239 0.5 +-0.0632329 0.149656 -0.0246848 0.551539 0.5 +-0.0671416 0.145678 -0.0214457 0.751509 0.5 +-0.0632766 0.146612 -0.0147592 0.335974 0.5 +-0.0636907 0.146369 -0.0159165 0.577488 0.5 +-0.0203772 0.158233 -0.00725915 0.220933 0.5 +-0.0647273 0.156687 -0.0474505 0.711947 0.5 +-0.0223961 0.161302 -0.0143028 0.69081 0.5 +-0.0615025 0.16984 -0.0615386 0.333182 0.415628 +-0.063796 0.145383 -0.0141799 0.395613 0.465715 +-0.016176 0.165587 -0.0188354 0.659656 0.5 +-0.028407 0.156859 -0.0100656 0.584909 0.5 +-0.0623487 0.141045 -0.00649873 0.528779 0.5 +-0.0676059 0.141897 -0.00935244 0.581222 0.362455 +-0.0187849 0.159551 -0.0109781 0.635745 0.5 +-0.0630553 0.148575 -0.0182369 0.596265 0.5 +-0.043754 0.152254 -0.00662286 0.687251 0.5 +-0.0244459 0.156552 -0.00701262 0.582633 0.5 +-0.0154877 0.167822 -0.0210841 0.642307 0.5 +-0.0362392 0.151744 -0.00510561 0.465931 0.45591 +-0.0641035 0.141307 -0.00745692 0.499975 0.5 +-0.0513203 0.142869 0.00077197 0.539209 0.5 +-0.0206091 0.162049 -0.0149623 0.645343 0.5 +-0.0448968 0.146123 0.00263093 0.376124 0.5 +-0.0682244 0.142863 -0.0118107 0.748593 0.5 +-0.0633856 0.148243 -0.0195768 0.611561 0.5 +-0.0636742 0.142603 -0.0078783 0.486243 0.5 +-0.0634393 0.144588 -0.0113838 0.553011 0.5 +-0.0664444 0.151761 -0.0404644 0.551935 0.5 +-0.0635111 0.15292 -0.0340962 0.372533 0.485646 +-0.0688294 0.148429 -0.0341374 0.333495 0.5 +-0.0269084 0.160002 -0.0134029 0.757296 0.5 +-0.0650446 0.154908 -0.0437098 0.628132 0.5 +-0.0092432 0.169141 -0.0244221 0.342794 0.5 +-0.0520559 0.142894 8.38275e-05 0.469874 0.5 +-0.0315436 0.153515 -0.00448892 0.416953 0.5 +-0.048759 0.14421 0.00252118 0.416746 0.395972 +-0.0296304 0.159454 -0.0131553 0.789003 0.5 +-0.0419789 0.152954 -0.00736227 0.725502 0.5 +-0.0654711 0.157635 -0.0545345 0.470569 0.5 +-0.0507334 0.147965 -0.00270623 0.555803 0.5 +-0.0652024 0.153998 -0.041972 0.678123 0.5 +-0.0707102 0.149836 -0.0414255 0.228121 0.5 +-0.0353601 0.152626 -0.00619729 0.534134 0.409532 +-0.0465636 0.146777 -0.00183655 0.531472 0.412991 +-0.0224096 0.15809 -0.00961754 0.469744 0.436387 +-0.0204702 0.16083 -0.0136222 0.606492 0.5 +-0.0640756 0.151735 -0.033508 0.470351 0.5 +-0.0643695 0.149877 -0.0298747 0.576031 0.5 +-0.00929516 0.17029 -0.0258484 0.326194 0.410267 +-0.0621407 0.163665 -0.0567978 0.582085 0.5 +-0.0372213 0.150899 -0.00386632 0.363895 0.5 +-0.0404209 0.150087 -0.00469474 0.396828 0.462195 +-0.0186134 0.161522 -0.0143726 0.600196 0.351661 +-0.0681449 0.144372 -0.0168262 0.541187 0.5 +-0.0714107 0.144356 -0.0151846 0.163429 0.5 +-0.0635638 0.147341 -0.0176577 0.548451 0.5 +-0.063068 0.161146 -0.0557557 0.55018 0.5 +-0.0681305 0.148403 -0.0333773 0.368421 0.40927 +-0.053019 0.141421 -0.000504477 0.57391 0.5 +-0.0396234 0.150027 -0.00409811 0.365244 0.462054 +-0.0466152 0.145766 -0.000178732 0.844488 0.5 +-0.0611832 0.146298 -0.00395593 0.347536 0.5 +-0.0158447 0.163118 -0.0162484 0.550462 0.363992 +-0.032733 0.155408 -0.00943888 0.575616 0.5 +-0.0329038 0.153455 -0.00604291 0.832251 0.5 +-0.0657515 0.154274 -0.0462128 0.614485 0.5 +-0.0671262 0.150692 -0.0396095 0.50348 0.5 +-0.0668614 0.150018 -0.036632 0.513752 0.5 +-0.066567 0.147777 -0.0287654 0.388584 0.5 +-0.0349517 0.151884 -0.00344832 0.338906 0.426706 +-0.0474936 0.146975 -0.00223523 0.589898 0.5 +-0.0209297 0.158088 -0.00822134 0.416597 0.5 +-0.0641393 0.143504 -0.0105249 0.556629 0.5 +-0.0628937 0.146875 -0.0135938 0.436432 0.5 +-0.0670544 0.153567 -0.0495044 0.684037 0.5 +-0.0522702 0.141391 0.00017327 0.527289 0.5 +-0.0336701 0.155604 -0.00983793 0.652459 0.338026 +-0.0665448 0.142647 -0.010737 0.802442 0.5 +-0.0244524 0.16187 -0.0148048 0.767595 0.5 +-0.0646798 0.158592 -0.0555006 0.367066 0.5 +-0.0681899 0.15036 -0.0415571 0.622216 0.5 +-0.0638595 0.159101 -0.0532849 0.553137 0.5 +-0.0669656 0.147091 -0.0266318 0.366521 0.5 +-0.0653748 0.149517 -0.0319115 0.506472 0.5 +-0.0652965 0.147932 -0.0271042 0.517755 0.5 +-0.0413647 0.150284 -0.00509832 0.566818 0.5 +-0.0301348 0.156065 -0.00950629 0.551089 0.5 +-0.0350004 0.157209 -0.0112204 0.77142 0.5 +-0.0660122 0.153896 -0.0475582 0.607399 0.5 +-0.0658642 0.141582 -0.00840157 0.640677 0.5 +-0.0659473 0.151954 -0.0393992 0.572304 0.5 +-0.0558806 0.138039 -0.00386657 0.693847 0.5 +-0.0355616 0.151785 -0.00432824 0.438102 0.446767 +-0.0644393 0.157952 -0.0526177 0.606485 0.5 +-0.0648339 0.153263 -0.0390895 0.664917 0.5 +-0.0644813 0.157544 -0.049277 0.606077 0.5 +-0.0659423 0.149401 -0.0328697 0.363223 0.47192 +-0.0638978 0.150075 -0.0288161 0.60783 0.5 +-0.00982514 0.16696 -0.0220459 0.300623 0.5 +-0.0714181 0.143109 -0.0104276 0.184678 0.321968 +-0.0286315 0.159193 -0.0128611 0.735006 0.5 +-0.0645561 0.151545 -0.0345673 0.444066 0.47228 +-0.064202 0.155431 -0.0413859 0.534016 0.476789 +-0.0528961 0.143026 -0.000455911 0.527807 0.5 +-0.06621 0.148552 -0.030869 0.645226 0.5 +-0.0318636 0.155275 -0.00893878 0.5716 0.5 +-0.0691845 0.152183 -0.0467119 0.252527 0.390549 +-0.0677074 0.147127 -0.0273126 0.418336 0.5 +-0.0326921 0.152804 -0.00294992 0.227767 0.5 +-0.0607836 0.171276 -0.0609166 0.320645 0.5 +-0.0720383 0.149669 -0.0395937 0.156722 0.5 +-0.064096 0.14766 -0.0219948 0.572919 0.5 +-0.0667821 0.14845 -0.031825 0.374413 0.5 +-0.032878 0.156591 -0.0107994 0.683815 0.5 +-0.0662707 0.14708 -0.0258685 0.760971 0.5 +-0.0668387 0.144945 -0.0185544 0.727328 0.5 +-0.0227209 0.162682 -0.0153632 0.776829 0.5 +-0.044945 0.146638 -0.00064718 0.808406 0.5 +-0.0449017 0.148739 -0.00386394 0.573463 0.5 +-0.0393381 0.149359 -0.00118821 0.264439 0.5 +-0.0274694 0.155208 -0.00473974 0.238304 0.5 +-0.0722821 0.143895 -0.0129091 0.215002 0.5 +-0.0509131 0.144221 0.000402933 0.522594 0.5 +-0.0627563 0.152415 -0.0301468 0.718134 0.5 +-0.0703836 0.151592 -0.0450749 0.205736 0.395449 +-0.0662037 0.154495 -0.0505507 0.707543 0.5 +-0.0119941 0.16759 -0.0225943 0.47128 0.5 +-0.0643947 0.15704 -0.046105 0.746848 0.5 +-0.0234022 0.157317 -0.0083471 0.797714 0.5 +-0.0630027 0.145885 -0.0118617 0.55029 0.5 +-0.0648437 0.159826 -0.0567739 0.429816 0.5 +-0.0631669 0.152168 -0.0312981 0.458248 0.5 +-0.0678418 0.143634 -0.0139334 0.718635 0.5 +-0.0677458 0.149084 -0.0355035 0.386188 0.5 +-0.0221568 0.157426 -0.00647102 0.226161 0.5 +-0.0704544 0.150585 -0.0434585 0.224465 0.337855 +-0.0310262 0.153728 -0.00354608 0.167698 0.5 +-0.0400442 0.15362 -0.00816685 0.734503 0.5 +3 21216 21215 20399 +3 9186 9280 14838 +3 16020 13433 5187 +3 16021 16020 5187 +3 20919 20920 21003 +3 23418 15239 23127 +3 30553 27378 30502 +3 7291 7293 21464 +3 12803 12714 13083 +3 12777 4682 16928 +3 22066 22936 21048 +3 21134 22066 21048 +3 3221 3359 118 +3 4809 25593 118 +3 1656 1539 3359 +3 2761 15567 15618 +3 3221 1656 3359 +3 4376 9528 2528 +3 5207 2761 15618 +3 2941 2942 5207 +3 1028 4376 2528 +3 1656 5343 6260 +3 2942 2941 3488 +3 1539 1656 6260 +3 5343 5740 1531 +3 6260 5343 1531 +3 5740 5594 3025 +3 1531 5740 3025 +3 5594 2260 819 +3 3025 5594 819 +3 2260 2982 2576 +3 819 2260 2576 +3 2982 15184 15171 +3 17247 4193 17246 +3 2576 2982 15171 +3 4376 1028 15618 +3 1566 4810 1682 +3 15919 16061 15918 +3 15567 4376 15618 +3 16481 1563 1660 +3 15779 15780 15918 +3 11799 15970 11619 +3 16061 16060 15918 +3 3489 2942 3488 +3 15160 3618 15143 +3 4810 3489 3488 +3 2942 2761 5207 +3 4810 4945 1682 +3 4945 4810 3488 +3 15184 16830 16827 +3 15734 16168 1150 +3 15171 15184 16827 +3 16830 14705 14682 +3 16827 16830 14682 +3 14705 16625 17115 +3 14682 14705 17115 +3 16625 14875 16636 +3 17115 16625 16636 +3 14875 5062 17024 +3 16636 14875 17024 +3 5062 5356 5491 +3 17024 5062 5491 +3 5356 6018 6019 +3 5491 5356 6019 +3 15600 15674 15675 +3 23266 30828 30827 +3 16671 15521 16829 +3 16204 16203 16060 +3 7013 7012 6913 +3 16104 15964 14749 +3 17078 17077 16914 +3 22219 22218 22122 +3 23103 23102 23004 +3 23508 24841 23858 +3 17711 17712 17807 +3 15456 15589 15070 +3 1448 14621 15286 +3 16027 14348 15894 +3 13136 13137 15662 +3 14776 14775 14669 +3 20412 15734 1150 +3 16392 16671 17178 +3 6018 16804 14468 +3 22416 22514 22513 +3 6019 6018 14468 +3 16804 15759 3351 +3 14468 16804 3351 +3 15759 15686 15552 +3 3351 15759 15552 +3 15686 3745 14600 +3 15552 15686 14600 +3 22318 22319 22415 +3 222 96 706 +3 21147 21146 14945 +3 4192 1566 4193 +3 23305 23304 23206 +3 1566 1682 4193 +3 3745 16490 15240 +3 2280 1422 16069 +3 14600 3745 15240 +3 35832 35643 35784 +3 15240 16490 15679 +3 21501 35730 20535 +3 35590 35409 35574 +3 65 15681 14655 +3 111 2904 10119 +3 35558 35876 35737 +3 17808 17904 17903 +3 5058 6014 15303 +3 15863 15455 12567 +3 15736 15600 15675 +3 14656 7109 7108 +3 497 15413 16943 +3 5960 11710 21283 +3 22621 22720 22620 +3 15674 9862 5556 +3 15033 15049 16664 +3 20873 20953 20952 +3 6015 15829 1770 +3 14486 17153 1770 +3 17153 16825 1770 +3 15289 16192 16049 +3 13367 15064 23227 +3 4136 15289 1425 +3 22414 22415 22512 +3 21866 13329 12867 +3 31726 31826 31825 +3 12714 12803 11205 +3 14988 14989 15110 +3 22036 22035 33671 +3 21114 21113 18735 +3 16671 16829 17178 +3 15675 15674 5556 +3 20556 20638 20555 +3 9862 16306 16452 +3 14660 14661 14766 +3 6790 2887 14563 +3 14398 14397 14380 +3 14531 16621 15487 +3 16505 16661 16660 +3 15259 15387 15386 +3 15258 15259 15386 +3 12737 13760 13858 +3 15788 15927 15926 +3 389 2937 279 +3 588 2400 465 +3 16983 17149 17148 +3 16982 16983 17148 +3 16503 16504 16659 +3 4935 17558 15485 +3 14631 1737 1025 +3 16660 16819 16818 +3 3157 1299 3302 +3 2307 14631 1025 +3 5348 2280 16069 +3 15689 15555 3347 +3 15555 3480 3347 +3 1422 16177 246 +3 17148 17149 3361 +3 2019 2147 502 +3 35666 35471 35586 +3 14764 16389 16390 +3 5556 9862 16452 +3 23305 23402 23304 +3 1421 15930 15613 +3 20322 2477 16013 +3 15031 20322 16013 +3 16953 21313 21225 +3 16960 16961 17126 +3 16306 15473 16926 +3 14358 14372 14357 +3 22720 22819 22719 +3 16365 9292 9184 +3 30075 19908 19909 +3 28356 28357 30071 +3 13659 13561 5187 +3 13433 13659 5187 +3 22432 21483 21482 +3 22858 16917 22759 +3 20431 11513 19002 +3 21465 11513 20431 +3 16927 12777 16928 +3 16927 16928 6889 +3 22065 21970 22936 +3 15907 4270 15682 +3 1575 2053 4283 +3 15413 2574 2843 +3 16947 497 16943 +3 15780 15919 15918 +3 16452 16306 16926 +3 16946 3666 4539 +3 16669 1534 1418 +3 22217 22218 22313 +3 22315 22314 22218 +3 4249 3400 3399 +3 15473 15153 15280 +3 14583 14675 14674 +3 16980 16981 17146 +3 1425 15289 16049 +3 14582 14583 14674 +3 2620 3126 2764 +3 858 1612 1209 +3 21133 22074 21132 +3 5744 1533 14462 +3 4244 16392 14337 +3 22155 13525 15599 +3 15521 3208 16829 +3 16061 16204 16060 +3 14767 14880 14879 +3 16392 17178 14337 +3 20663 16798 16641 +3 14766 14767 14879 +3 35472 35899 35903 +3 14661 14767 14766 +3 825 14480 14475 +3 23519 31408 31479 +3 14580 14579 14500 +3 10619 7473 7361 +3 31503 31502 31430 +3 466 2936 176 +3 22066 22065 22936 +3 16926 15473 15280 +3 3600 118 25592 +3 22806 22807 22905 +3 1773 1656 3221 +3 3222 1773 3221 +3 1773 5477 5343 +3 1656 1773 5343 +3 16659 16660 16818 +3 14534 15677 15661 +3 1737 2259 818 +3 1025 1737 818 +3 3480 16635 14681 +3 20873 20874 20953 +3 18079 19539 19025 +3 3347 3480 14681 +3 1412 5740 5343 +3 5477 1412 5343 +3 22452 2938 22354 +3 3217 6128 5330 +3 2574 17013 17014 +3 14699 904 4270 +3 16204 16350 16349 +3 16203 16204 16349 +3 16349 16350 16502 +3 16350 16503 16502 +3 22611 22612 22710 +3 16503 16659 16658 +3 3487 361 3355 +3 14762 21027 23397 +3 15968 14609 15038 +3 12371 34194 33923 +3 16209 16210 16355 +3 14348 14709 14819 +3 16031 15751 15549 +3 14372 14371 14357 +3 14067 5755 175 +3 14609 15163 15038 +3 15387 15518 15517 +3 16967 15833 16958 +3 1412 1505 5594 +3 15386 15387 15517 +3 5740 1412 5594 +3 2394 2260 5594 +3 1505 2394 5594 +3 2394 1659 2982 +3 2260 2394 2982 +3 13095 13518 3075 +3 16660 16661 16819 +3 15556 6403 3480 +3 16943 15413 2843 +3 15507 15508 15642 +3 15643 15780 15779 +3 4539 1536 17025 +3 1536 17026 17025 +3 16912 16911 16753 +3 22123 22219 22122 +3 14588 15772 14567 +3 16349 16348 16202 +3 17147 4249 4602 +3 1453 1568 4332 +3 5751 5752 1612 +3 17146 17147 4602 +3 3209 5855 2482 +3 16981 17147 17146 +3 14675 14781 14780 +3 402 15560 1409 +3 14962 13429 15082 +3 16099 904 14699 +3 15153 7529 1030 +3 8125 16158 1388 +3 23155 16460 3621 +3 1620 1602 1601 +3 15280 15153 1030 +3 9546 23155 3621 +3 22819 22818 22719 +3 35730 35644 20535 +3 15032 12716 12627 +3 23109 23108 23010 +3 20365 20363 11358 +3 14685 20365 11358 +3 1916 5214 1917 +3 22810 22909 22908 +3 3798 3583 1030 +3 3616 5758 5349 +3 16819 16983 16982 +3 17570 6898 23243 +3 4002 3868 2400 +3 16818 16819 16982 +3 35494 35562 35770 +3 16504 16660 16659 +3 1211 4814 6249 +3 2937 588 465 +3 2259 16493 16383 +3 818 2259 16383 +3 17244 17243 17079 +3 22710 22711 22809 +3 5334 576 1493 +3 17242 4331 17241 +3 9879 8525 9764 +3 1659 15185 15184 +3 2982 1659 15184 +3 15185 16844 16830 +3 15184 15185 16830 +3 16844 14731 14705 +3 1768 15240 15815 +3 16830 16844 14705 +3 2843 2574 17014 +3 2669 16491 15934 +3 35933 35915 35488 +3 17013 3121 4278 +3 21216 22155 21215 +3 20090 23155 9546 +3 22834 20537 35521 +3 3126 3403 2764 +3 14425 14451 14450 +3 14424 14425 14450 +3 17245 17244 17080 +3 302 2307 5862 +3 23398 14762 23397 +3 17079 16916 17080 +3 26922 27040 27039 +3 15730 21147 14945 +3 4327 4326 17244 +3 17245 4327 17244 +3 1916 1917 4326 +3 4327 1916 4326 +3 16709 14414 14391 +3 5214 5349 1917 +3 14533 14534 15661 +3 16702 16709 14391 +3 32357 26610 26513 +3 2053 6117 20484 +3 14731 1604 16625 +3 14705 14731 16625 +3 1604 15431 14875 +3 16625 1604 14875 +3 15431 3886 5062 +3 14875 15431 5062 +3 15240 15679 15815 +3 3886 2981 5356 +3 15555 15556 3480 +3 5298 16789 5297 +3 15060 16027 15894 +3 6403 16487 16635 +3 16739 16897 16738 +3 15642 15643 15779 +3 20347 20134 19193 +3 17026 17018 16856 +3 16432 16584 16431 +3 14334 11508 12735 +3 16203 16349 16202 +3 17060 17059 16896 +3 1453 3599 1568 +3 22621 22620 22521 +3 4329 1453 4332 +3 3599 1033 1568 +3 3599 3746 3877 +3 1033 3599 3877 +3 2230 16543 2101 +3 5855 14615 2482 +3 16101 16099 14699 +3 16244 16245 16395 +3 15223 14626 14606 +3 140 14508 6651 +3 14766 14879 14878 +3 4808 16703 15266 +3 14660 14766 14765 +3 7529 3798 1030 +3 16398 25 16791 +3 29542 35598 35633 +3 1772 15362 1655 +3 13578 35560 13607 +3 1736 2129 4229 +3 1621 15362 932 +3 5758 5623 5350 +3 9563 6119 9679 +3 3080 4803 4938 +3 4326 1917 4325 +3 5214 3616 5349 +3 3079 3080 4938 +3 3616 3080 3079 +3 5758 3616 3079 +3 14631 2307 4938 +3 4803 14631 4938 +3 16493 15109 15096 +3 16383 16493 15096 +3 15109 16709 16702 +3 15096 15109 16702 +3 20241 13855 20071 +3 20678 20090 9546 +3 17075 17074 16911 +3 931 1502 3964 +3 13876 12932 17184 +3 13097 12638 12548 +3 5062 3886 5356 +3 2981 16690 6018 +3 5356 2981 6018 +3 5210 3351 15422 +3 16690 5409 16804 +3 17014 17013 4278 +3 109 6253 560 +3 16637 16481 1660 +3 3121 15556 15555 +3 16664 16669 1418 +3 16612 11385 3583 +3 3798 16612 3583 +3 1534 3666 16946 +3 15738 16449 13145 +3 27052 27053 28358 +3 13556 15738 13145 +3 24632 24303 24302 +3 1025 818 137 +3 13329 21134 21048 +3 4928 4938 302 +3 14451 14502 14501 +3 3218 3079 4928 +3 2307 1025 5862 +3 5623 5758 3218 +3 4938 2307 302 +3 5349 5758 5350 +3 3079 4938 4928 +3 20242 15032 12871 +3 5758 3079 3218 +3 14414 497 16947 +3 15681 15792 14655 +3 15966 3213 15291 +3 14391 14414 16947 +3 1561 14468 5210 +3 3351 15552 15422 +3 6018 16690 16804 +3 5409 15059 15759 +3 16804 5409 15759 +3 15059 15822 15686 +3 2925 6019 1561 +3 14468 3351 5210 +3 15521 14548 2004 +3 3480 6403 16635 +3 16986 15159 16514 +3 17135 11408 16969 +3 15245 15246 15373 +3 16897 17060 16896 +3 11222 9392 11223 +3 21464 21465 20431 +3 6398 4137 2524 +3 16144 16287 16143 +3 15373 15374 15504 +3 1036 1404 502 +3 9568 4409 15731 +3 15505 15640 15639 +3 27052 28358 28357 +3 15455 15326 13865 +3 3746 5887 5886 +3 3877 3746 5886 +3 5886 5887 2610 +3 5887 4904 2610 +3 3850 16543 16697 +3 4904 2213 3455 +3 16245 3850 16395 +3 16395 3850 16697 +3 15198 3339 16448 +3 16699 16856 142 +3 34278 34277 34139 +3 7457 11251 13662 +3 26904 26905 26594 +3 23154 9783 23251 +3 13429 20265 20433 +3 15467 12631 15338 +3 23316 10705 22935 +3 22222 22318 22221 +3 1452 1918 4066 +3 22126 22222 22221 +3 5349 5350 1799 +3 4199 1452 4066 +3 17244 4326 17243 +3 1917 5349 1799 +3 17080 17244 17079 +3 1917 1799 4325 +3 23301 23398 23300 +3 4326 4325 17243 +3 14236 14685 4196 +3 16916 17079 16915 +3 14685 11358 4196 +3 23398 23397 23300 +3 20157 20242 12871 +3 22612 22711 22710 +3 19823 460 19760 +3 1493 576 2258 +3 13891 9660 6767 +3 33612 33739 33611 +3 15759 15059 15686 +3 15822 16823 3745 +3 15686 15822 3745 +3 16823 15756 16490 +3 15552 14600 14601 +3 3745 16823 16490 +3 5295 5296 5430 +3 15422 15552 14601 +3 19018 15489 19120 +3 35646 35926 35596 +3 1418 1534 16946 +3 15508 15643 15642 +3 21497 16010 11279 +3 3666 1536 4539 +3 1418 16946 16784 +3 16752 16753 16911 +3 16664 1418 1068 +3 16647 16664 1068 +3 698 2258 15660 +3 14995 15033 16647 +3 22219 22315 22218 +3 22412 22411 22314 +3 16913 16912 16754 +3 35841 9451 11777 +3 17076 17075 16912 +3 17076 17240 17075 +3 16913 17076 16912 +3 17240 17239 17075 +3 4199 4066 17239 +3 17240 4199 17239 +3 15248 15249 15376 +3 15377 15508 15507 +3 15143 3618 1448 +3 15376 15377 15507 +3 4278 3121 15555 +3 14796 17111 17112 +3 5491 6019 2925 +3 5627 5491 2925 +3 35936 12039 11959 +3 2144 19051 2145 +3 14489 295 15565 +3 8117 14829 10454 +3 17024 5491 5627 +3 17023 17024 5627 +3 14157 3054 12253 +3 16658 16659 16817 +3 16362 16514 15414 +3 14621 14804 15286 +3 14587 14728 14902 +3 16287 16286 16143 +3 2795 14728 14587 +3 2524 2795 14587 +3 2134 14490 6668 +3 14728 14903 14902 +3 1184 109 3349 +3 15678 3029 791 +3 13789 12572 24996 +3 16241 16242 15182 +3 8223 20364 13278 +3 11969 13786 14157 +3 35596 35478 35433 +3 27047 27052 28357 +3 35729 13210 13590 +3 28886 29940 27052 +3 3455 2213 6009 +3 15121 15248 15247 +3 2610 4904 3455 +3 917 2661 2526 +3 2667 16245 16244 +3 2213 917 6009 +3 17191 17025 16699 +3 142 2667 16244 +3 15304 4539 17191 +3 16856 2667 142 +3 16784 16946 15304 +3 17025 16856 16699 +3 1068 1418 16784 +3 4539 17025 17191 +3 1734 931 6515 +3 16946 4539 15304 +3 5467 5620 6257 +3 3353 931 1734 +3 5467 6257 1918 +3 5620 3354 3353 +3 1452 5467 1918 +3 5620 5619 6257 +3 5619 5620 3353 +3 3354 1502 931 +3 3353 3354 931 +3 1502 5334 3964 +3 3964 5334 1493 +3 576 2392 2258 +3 2258 2392 15768 +3 15799 15049 15033 +3 17239 17238 17074 +3 16912 17075 16911 +3 13823 13822 13724 +3 11623 6138 13210 +3 14891 15011 15010 +3 16636 17024 17023 +3 2764 3403 5561 +3 14600 15240 1768 +3 6019 14468 1561 +3 4783 2612 3662 +3 14601 14600 1768 +3 3205 937 1646 +3 7008 5732 6910 +3 17025 17026 16856 +3 3618 14621 1448 +3 13556 13145 15461 +3 17018 2668 2667 +3 2282 4674 2846 +3 15462 13556 15461 +3 16627 16626 15305 +3 15306 2282 1153 +3 1153 2282 2846 +3 15305 15306 1153 +3 15768 15033 14995 +3 15660 15768 14995 +3 1405 1493 698 +3 15033 16664 16647 +3 6515 3964 1405 +3 2258 15768 15660 +3 3964 1493 1405 +3 1493 2258 698 +3 858 5751 1612 +3 4602 4249 3399 +3 3850 3874 16543 +3 3985 35841 11401 +3 15249 15377 15376 +3 15286 14804 16637 +3 4244 14337 15613 +3 17807 17808 17903 +3 3208 15521 2004 +3 17011 16027 15060 +3 17115 16636 14722 +3 17113 17115 14722 +3 15010 15011 15133 +3 14367 14382 14366 +3 14591 14551 14563 +3 14382 14381 14366 +3 14682 17115 17113 +3 14653 14682 17113 +3 80 79 15971 +3 3213 616 1061 +3 14903 16467 16466 +3 14640 14740 5139 +3 14902 14903 16466 +3 16467 245 50 +3 4943 14788 2176 +3 5142 79 80 +3 2176 5142 80 +3 79 16945 15971 +3 23206 23304 23303 +3 14787 15489 25 +3 11874 11973 12749 +3 19769 18488 19639 +3 32357 32462 26611 +3 35514 27756 29542 +3 6907 6989 9680 +3 4927 14429 2897 +3 16079 13228 15938 +3 2441 14782 14764 +3 15120 15121 15247 +3 6910 6911 2387 +3 14997 14998 15120 +3 15248 15376 15375 +3 15568 14986 14985 +3 3204 16114 14802 +3 6009 917 2526 +3 15541 15568 14985 +3 2661 15568 15541 +3 2526 2661 15541 +3 14986 16640 16639 +3 14985 14986 16639 +3 16640 826 3 +3 16639 16640 3 +3 826 16626 16627 +3 3 826 16627 +3 5889 3353 1734 +3 16626 15306 15305 +3 5619 3353 5889 +3 931 3964 6515 +3 6257 5619 5618 +3 5618 5619 5889 +3 6257 1269 2042 +3 1269 6257 5618 +3 1918 2042 3932 +3 1918 6257 2042 +3 17075 17239 17074 +3 4066 1918 3932 +3 388 389 5752 +3 4066 3932 17238 +3 3449 2209 2001 +3 6519 13791 13238 +3 33489 33488 33375 +3 2914 3043 5875 +3 2782 5412 2781 +3 16822 16827 14653 +3 14336 2939 15480 +3 16659 16818 16817 +3 14722 16636 17023 +3 15793 5951 15224 +3 15655 15160 15143 +3 14713 24176 4812 +3 16502 16503 16658 +3 16856 17018 2667 +3 27375 35939 30420 +3 22029 22030 22125 +3 2668 16103 16245 +3 16502 16501 16348 +3 22318 22317 22221 +3 34140 34139 34003 +3 16349 16502 16348 +3 22608 22609 22707 +3 14253 1023 3054 +3 2227 2098 17110 +3 3220 5689 14706 +3 15545 2264 1652 +3 35622 35756 35578 +3 4674 2264 15545 +3 363 17713 17619 +3 2846 4674 15545 +3 2264 1769 1652 +3 3212 14901 15769 +3 17112 2132 15615 +3 4001 4002 588 +3 14808 4547 16825 +3 35468 13025 12202 +3 11408 17135 13295 +3 15689 3347 579 +3 15825 15689 579 +3 16818 16982 16981 +3 15930 4244 15613 +3 15162 15171 16822 +3 16827 14682 14653 +3 3402 2576 15162 +3 15171 16827 16822 +3 27053 28359 28358 +3 11444 13983 11876 +3 15480 16030 15819 +3 939 6143 4232 +3 23102 23101 23003 +3 819 2576 3402 +3 14822 16362 15414 +3 5480 5544 249 +3 5465 4137 6398 +3 6668 5465 6398 +3 16053 16093 4943 +3 14788 5142 2176 +3 15504 15505 15639 +3 3593 1483 3460 +3 22805 22806 22904 +3 21024 21110 21023 +3 15818 14720 15114 +3 581 707 466 +3 15173 2765 4924 +3 19034 29940 28886 +3 3479 3478 4147 +3 15181 15174 16695 +3 15832 2119 3479 +3 3478 15181 4147 +3 2797 275 15832 +3 2119 3478 3479 +3 23243 19034 28886 +3 17187 17189 2797 +3 4016 2441 14764 +3 14878 14998 14997 +3 14877 14878 14997 +3 14765 14878 14877 +3 3352 14980 1421 +3 14998 15121 15120 +3 4329 4332 17235 +3 14981 14983 4143 +3 17236 17235 17071 +3 14980 15930 1421 +3 17072 17071 16908 +3 17072 17236 17071 +3 33266 33375 33265 +3 16909 17072 16908 +3 14983 3204 4143 +3 3595 2500 8682 +3 4927 14514 15554 +3 16060 16059 15917 +3 15688 4927 15554 +3 14588 14567 947 +3 15918 16060 15917 +3 16203 16202 16059 +3 5751 388 5752 +3 16060 16203 16059 +3 1499 3622 3081 +3 2683 14983 14981 +3 34756 29811 34755 +3 14429 4934 15973 +3 2001 6519 13238 +3 14116 14117 14212 +3 10651 4240 10528 +3 2209 6519 2001 +3 35603 35612 35418 +3 15132 15259 15258 +3 15131 15132 15258 +3 29940 27053 27052 +3 14491 1531 3316 +3 3025 819 138 +3 1305 1421 15613 +3 17904 17997 17996 +3 26940 35546 35669 +3 35686 30076 35365 +3 2667 2668 16245 +3 14585 14679 16398 +3 21204 15467 21203 +3 16103 3874 3850 +3 16502 16658 16657 +3 12631 22935 15338 +3 15778 15779 15917 +3 16501 16502 16657 +3 15181 15182 15174 +3 15220 15347 16774 +3 23323 23420 22927 +3 22026 22122 22121 +3 23026 23323 22927 +3 21948 15196 21879 +3 16909 16908 16750 +3 24416 25661 25660 +3 22727 18044 22826 +3 16751 16909 16750 +3 14514 4927 2897 +3 4279 2683 14981 +3 23026 22927 21212 +3 22122 22218 22217 +3 582 2399 2937 +3 14506 16173 16826 +3 15437 14872 14654 +3 14423 14449 14422 +3 16781 5140 17186 +3 16624 16781 17186 +3 16817 16818 16981 +3 15455 13865 12567 +3 2625 6260 14491 +3 1531 3025 3316 +3 3590 17193 5040 +3 5752 389 5753 +3 2937 465 279 +3 35592 35853 35447 +3 6260 1531 14491 +3 503 1036 502 +3 138 819 3402 +3 2576 15171 15162 +3 34548 34547 34410 +3 16982 17148 17147 +3 14444 14443 14417 +3 14574 14666 14573 +3 9856 17005 16843 +3 5678 5677 5542 +3 14454 14504 14453 +3 21978 21948 21121 +3 15239 22432 23127 +3 15781 15782 15920 +3 3039 18497 17913 +3 15764 15772 4279 +3 3965 3180 3039 +3 35472 35903 35398 +3 3180 1367 1492 +3 6797 1492 1367 +3 1367 5069 6797 +3 6797 1378 19364 +3 11441 10361 11411 +3 35426 35875 35899 +3 275 2119 15832 +3 15246 15374 15373 +3 5068 18864 18003 +3 5068 3044 558 +3 18357 1756 1755 +3 558 1755 5068 +3 16114 2441 4016 +3 1268 6764 17365 +3 6987 16470 16319 +3 14802 16114 4016 +3 6648 6987 16319 +3 16470 6017 16401 +3 16319 16470 16401 +3 2906 3743 275 +3 6017 2906 17189 +3 16401 6017 17189 +3 22609 22708 22707 +3 17189 2906 275 +3 6787 27411 29564 +3 20214 20300 20213 +3 9623 21204 16156 +3 15064 13367 23417 +3 12901 9400 23429 +3 15070 15071 15461 +3 14157 14253 3054 +3 30366 7399 19465 +3 13659 14908 14907 +3 21204 21203 16156 +3 9332 2360 3466 +3 24750 8580 9402 +3 14213 14311 14310 +3 14212 14213 14310 +3 13870 2209 3449 +3 13481 13870 3449 +3 14736 15220 16774 +3 20790 20791 20872 +3 14780 14781 14893 +3 35484 35610 35621 +3 14781 14894 14893 +3 15265 14784 14785 +3 118 3359 4809 +3 2780 2916 2310 +3 17148 3361 4249 +3 3316 3025 138 +3 3347 14681 15170 +3 17147 17148 4249 +3 16245 16103 3850 +3 15005 15128 15004 +3 15549 15548 16955 +3 3874 5272 16543 +3 14990 12646 15347 +3 11251 12901 13662 +3 15641 15642 15778 +3 20292 20291 20205 +3 1533 15223 14462 +3 15220 14990 15347 +3 5291 16327 587 +3 14452 14453 14503 +3 15182 15173 15174 +3 20353 20437 24052 +3 16241 15182 15181 +3 3478 16241 15181 +3 275 3743 2119 +3 17182 16241 3478 +3 3743 17182 2119 +3 2119 17182 3478 +3 6014 16548 2132 +3 559 6001 16794 +3 9771 20326 14323 +3 21050 23026 21212 +3 4001 1297 4002 +3 2399 588 2937 +3 14926 15045 15760 +3 15108 14328 14984 +3 6988 3796 1444 +3 1889 6988 1444 +3 1967 1968 12646 +3 21133 21132 20363 +3 12867 13329 21048 +3 3359 3358 4809 +3 15684 3483 15683 +3 14990 1967 12646 +3 3462 5417 1968 +3 3459 4266 4392 +3 28198 28199 28315 +3 1451 1796 4809 +3 25011 25145 30533 +3 15119 15246 15245 +3 11528 13974 12125 +3 16981 16982 17147 +3 14412 14929 14727 +3 14804 16481 16637 +3 14503 14504 14582 +3 15167 14994 6015 +3 14908 4516 7903 +3 1967 3462 1968 +3 4364 15564 15698 +3 15209 3595 3668 +3 3860 1757 3965 +3 20175 19905 30290 +3 1757 3320 3180 +3 3965 1757 3180 +3 3320 1368 1367 +3 3180 3320 1367 +3 1368 6137 5069 +3 1367 1368 5069 +3 6137 1260 1377 +3 5069 6137 1377 +3 22160 19423 19435 +3 1260 3596 1377 +3 5202 558 3463 +3 3596 5202 3463 +3 1637 1755 558 +3 5202 1637 558 +3 1267 1268 1755 +3 1637 1267 1755 +3 31557 26613 34062 +3 1267 6764 1268 +3 20020 23817 20021 +3 35349 35410 35852 +3 25766 25765 19476 +3 26603 24162 23254 +3 16401 17189 17187 +3 1172 18908 1507 +3 15952 13716 16092 +3 16554 16633 6648 +3 3462 11563 2364 +3 14764 14782 16389 +3 15007 15008 15130 +3 35802 35759 7082 +3 14556 14555 14864 +3 10617 8457 9574 +3 3352 1421 16389 +3 12826 3724 3925 +3 14427 14453 14452 +3 15595 15731 11257 +3 14426 14427 14452 +3 3731 18318 5756 +3 14075 12035 14310 +3 14311 14075 14310 +3 9974 13870 13481 +3 9975 9974 13481 +3 20780 20702 20701 +3 20701 20700 20782 +3 22720 22719 22620 +3 10488 35640 10004 +3 15048 34343 20678 +3 34343 20090 20678 +3 1539 1424 3358 +3 12871 15032 12627 +3 4101 8882 17082 +3 3359 1539 3358 +3 1182 15689 15825 +3 4249 3361 3400 +3 17153 14808 16825 +3 579 3347 15170 +3 4280 4413 89 +3 35512 35349 35879 +3 5417 3462 2364 +3 320 689 6264 +3 15507 15642 15641 +3 23154 23251 3054 +3 15695 15692 16101 +3 15779 15918 15917 +3 14693 2709 14763 +3 16854 15692 15695 +3 2611 5461 6269 +3 5326 5461 2611 +3 6140 2257 697 +3 6269 6140 697 +3 820 16401 17187 +3 17189 275 2797 +3 4466 4459 17232 +3 17233 4466 17232 +3 5566 15326 9079 +3 15326 9568 13865 +3 16954 7417 559 +3 15908 3212 15769 +3 16910 16909 16751 +3 22758 20822 15050 +3 15501 15635 3209 +3 1297 947 4002 +3 11702 11620 14568 +3 14328 16465 14984 +3 3796 16781 16624 +3 1444 3796 16624 +3 23207 23206 23108 +3 20719 20718 20637 +3 12989 13083 4682 +3 33868 33867 33733 +3 13662 12901 23429 +3 2623 13085 16918 +3 19311 5629 5763 +3 16917 2623 16918 +3 29514 29515 29652 +3 11389 6661 22053 +3 17320 29013 19035 +3 32000 31999 31898 +3 15908 15769 15358 +3 15411 15410 14352 +3 20461 20460 20376 +3 2710 15358 4547 +3 29666 29799 29665 +3 11563 9062 13495 +3 4678 4813 15697 +3 30633 28997 29547 +3 19058 19160 19057 +3 15772 15764 14567 +3 17296 2256 18336 +3 952 8116 17766 +3 4266 3459 3320 +3 1757 4266 3320 +3 3459 1369 1368 +3 3320 3459 1368 +3 1369 1624 6137 +3 1368 1369 6137 +3 1624 1259 1260 +3 6137 1624 1260 +3 3726 3596 1260 +3 1259 3726 1260 +3 5336 5202 3596 +3 3726 5336 3596 +3 1636 1637 5202 +3 5336 1636 5202 +3 1266 1267 1637 +3 1636 1266 1637 +3 30 6764 1267 +3 1266 30 1267 +3 4921 5056 6764 +3 30 4921 6764 +3 5064 5198 5056 +3 4921 5064 5056 +3 1973 2099 5198 +3 5064 1973 5198 +3 18615 1172 6394 +3 1973 1507 2099 +3 18264 19944 19945 +3 1507 6394 1172 +3 14953 14954 16554 +3 3188 17817 17952 +3 15309 15372 14953 +3 16633 6987 6648 +3 697 2257 15309 +3 14954 16633 16554 +3 555 554 18245 +3 15372 14954 14953 +3 13811 13812 13909 +3 12949 13043 13042 +3 13111 13219 12035 +3 14075 13111 12035 +3 2105 9974 9975 +3 13768 2105 9975 +3 16154 9063 20782 +3 22714 22813 22812 +3 11513 18933 19002 +3 23127 22432 21482 +3 20920 27613 27730 +3 1539 6260 2625 +3 12777 12989 4682 +3 28676 30367 30366 +3 1424 1539 2625 +3 5140 17015 17016 +3 2364 11563 13495 +3 15829 14486 1770 +3 590 1182 15825 +3 16049 16192 14814 +3 15640 15777 15776 +3 22029 21934 21935 +3 3399 3400 4412 +3 15376 15507 15506 +3 29558 35723 35657 +3 16853 16854 15695 +3 15772 2683 4279 +3 4811 4676 2043 +3 14726 4148 7090 +3 3485 5326 3588 +3 3484 3485 3588 +3 3588 5326 2611 +3 5461 6140 6269 +3 16501 16657 16656 +3 9062 16615 15538 +3 16500 16501 16656 +3 13495 9062 15538 +3 17233 17232 17068 +3 17069 17233 17068 +3 22126 22127 22222 +3 35938 1016 12555 +3 833 952 17766 +3 17834 17739 392 +3 17073 17072 16909 +3 16910 17073 16909 +3 10991 27 10023 +3 15635 5855 3209 +3 3608 6527 6402 +3 15432 2016 10212 +3 15062 15063 16691 +3 16696 6988 1889 +3 22711 22810 22809 +3 22514 22613 22612 +3 20265 16020 16021 +3 22052 15730 22044 +3 2500 16927 6889 +3 23006 23007 23104 +3 6855 13466 7403 +3 9248 9247 9138 +3 29122 19038 2407 +3 29653 29786 29785 +3 28810 28943 28189 +3 29013 17320 30758 +3 1023 23154 3054 +3 14808 2710 4547 +3 20206 20292 20205 +3 19630 21942 18262 +3 4143 3204 14802 +3 15467 15338 21203 +3 15692 16099 16101 +3 15506 15507 15641 +3 4811 4111 4500 +3 16254 272 2015 +3 22223 22319 22318 +3 4676 4811 4500 +3 4392 3592 3459 +3 2256 4266 1757 +3 3592 1370 1369 +3 3459 3592 1369 +3 3864 1624 1369 +3 1370 3864 1369 +3 3864 2476 1259 +3 1624 3864 1259 +3 3858 3726 1259 +3 2476 3858 1259 +3 930 5336 3726 +3 3858 930 3726 +3 930 1635 1636 +3 5336 930 1636 +3 1635 1265 1266 +3 1636 1635 1266 +3 194 30 1266 +3 1265 194 1266 +3 780 4921 30 +3 194 780 30 +3 4929 5064 4921 +3 780 4929 4921 +3 4639 1973 5064 +3 4929 4639 5064 +3 5468 1507 1973 +3 4639 5468 1973 +3 797 6394 1507 +3 5468 797 1507 +3 3047 3188 6394 +3 797 3047 6394 +3 18430 18402 3589 +3 3047 1031 3188 +3 16348 16501 16347 +3 35510 26498 35922 +3 19857 19655 2402 +3 4244 15172 16392 +3 12233 12234 12318 +3 160 11785 10957 +3 10708 8671 13219 +3 10687 10701 7445 +3 9675 14281 10039 +3 6509 9675 10039 +3 22713 22714 22812 +3 22711 22712 22810 +3 21403 21494 21970 +3 22065 21403 21970 +3 23005 23004 22905 +3 22707 22708 22806 +3 1893 1773 3222 +3 1658 25590 25731 +3 1893 5612 5477 +3 1773 1893 5477 +3 5612 4520 1412 +3 13121 14159 14063 +3 5477 5612 1412 +3 4520 6758 1505 +3 1412 4520 1505 +3 6758 2529 2394 +3 1505 6758 2394 +3 14753 14764 16390 +3 22712 22811 22810 +3 22811 22910 22909 +3 22810 22811 22909 +3 2529 2279 1659 +3 16615 15340 1564 +3 2394 2529 1659 +3 16013 2477 16154 +3 20433 20265 16021 +3 16460 14739 16533 +3 15600 19699 17796 +3 17186 5140 17016 +3 23011 23109 23010 +3 14814 15437 14654 +3 17015 1182 590 +3 16216 4136 3261 +3 20390 20391 20474 +3 2500 6889 8682 +3 3126 1327 3403 +3 14782 16388 16389 +3 22510 22609 22608 +3 15538 16615 1564 +3 15375 15376 15506 +3 1800 2043 4459 +3 12918 12558 20131 +3 23205 23204 23106 +3 1800 4811 2043 +3 21282 21283 13615 +3 22321 22320 22224 +3 35638 13304 35431 +3 23402 5566 9079 +3 24793 24110 24266 +3 28888 30480 35533 +3 16601 20315 12600 +3 21028 15630 23395 +3 17069 17068 16905 +3 16906 17069 16905 +3 21113 21112 21026 +3 13950 8257 14454 +3 15791 15545 16242 +3 35720 35829 35442 +3 17237 17236 17072 +3 17073 17237 17072 +3 35886 35403 35378 +3 6392 6264 15754 +3 35771 35837 11441 +3 15340 12896 22460 +3 16220 16256 15062 +3 15063 16696 16691 +3 14762 15589 15456 +3 4328 1798 4327 +3 20402 20399 13368 +3 20364 20402 13368 +3 2279 15222 15185 +3 1659 2279 15185 +3 2402 19467 19453 +3 22615 22614 22515 +3 19553 2820 19574 +3 18435 29122 2407 +3 7903 4516 7457 +3 30324 30457 30323 +3 4683 18485 18247 +3 9783 16448 23251 +3 17858 18595 34975 +3 28733 28729 29077 +3 2401 708 2936 +3 15642 15779 15778 +3 4111 3485 3484 +3 460 1524 14982 +3 20563 20574 21384 +3 4500 4111 3484 +3 1692 18893 1693 +3 14323 14432 13766 +3 907 3722 3592 +3 4392 907 3592 +3 3722 1141 1370 +3 3592 3722 1370 +3 1141 100 3864 +3 1370 1141 3864 +3 1142 2476 3864 +3 100 1142 3864 +3 1142 3990 3858 +3 2476 1142 3858 +3 3990 5471 930 +3 3858 3990 930 +3 5471 3186 1635 +3 930 5471 1635 +3 3186 1148 1265 +3 1635 3186 1265 +3 1148 4264 194 +3 1265 1148 194 +3 4264 779 780 +3 194 4264 780 +3 1518 4929 780 +3 779 1518 780 +3 4646 4639 4929 +3 1518 4646 4929 +3 107 5468 4639 +3 4646 107 4639 +3 3586 797 5468 +3 107 3586 5468 +3 2773 3047 797 +3 3586 2773 797 +3 911 1031 3047 +3 2773 911 3047 +3 108 42 1031 +3 911 108 1031 +3 5457 671 108 +3 108 671 42 +3 9445 11135 9641 +3 12234 12319 12318 +3 8579 6509 10591 +3 7445 8579 10591 +3 10701 3732 8579 +3 10817 9675 6509 +3 22615 22714 22614 +3 3732 10817 8579 +3 20704 20705 20786 +3 15222 16851 16844 +3 16205 16351 16350 +3 15185 15222 16844 +3 29769 29898 29768 +3 16204 16205 16350 +3 13655 2786 21146 +3 21483 17084 22830 +3 14055 16610 30772 +3 16851 14790 14731 +3 33374 33487 33373 +3 13025 35468 35918 +3 1564 15340 22460 +3 14281 2105 13768 +3 10708 10701 10687 +3 8579 10817 6509 +3 10039 14281 13768 +3 20708 20709 20790 +3 10708 10832 10701 +3 16844 16851 14731 +3 12896 20703 18808 +3 14790 17116 1604 +3 14731 14790 1604 +3 6120 5989 2895 +3 588 4002 2400 +3 5214 5080 3616 +3 1798 1916 4327 +3 5862 137 2662 +3 5728 5862 2662 +3 1327 1209 3403 +3 17016 17015 590 +3 16545 16699 1894 +3 14501 14580 14500 +3 21604 21673 12558 +3 3261 4136 1425 +3 16627 15305 6526 +3 22120 22119 35136 +3 30534 27055 27054 +3 15247 15248 15375 +3 13655 22461 2786 +3 21283 11710 13615 +3 11693 9773 13667 +3 4466 1800 4459 +3 2663 3479 15302 +3 13956 13858 15157 +3 2784 5412 2783 +3 22460 12896 18808 +3 15058 14692 16392 +3 17067 17231 17066 +3 5621 5622 3216 +3 28745 35818 35504 +3 23396 23395 23298 +3 30773 30217 19574 +3 16593 16748 16592 +3 16906 16905 16747 +3 13858 15155 15157 +3 12142 11561 11562 +3 2846 15545 15791 +3 31 2846 15791 +3 4330 4329 17236 +3 17237 4330 17236 +3 16244 16395 16846 +3 16243 16244 16846 +3 29561 28353 28879 +3 20703 20450 20409 +3 137 16256 16220 +3 2662 137 16220 +3 5080 5214 1916 +3 1798 5080 1916 +3 17816 2674 2673 +3 16017 12687 15877 +3 27407 26797 26930 +3 13466 19688 19577 +3 29273 26907 19576 +3 19039 28622 30734 +3 30083 6531 28019 +3 29800 29929 29799 +3 27759 28733 29077 +3 13561 13659 14907 +3 26848 26852 29014 +3 29138 17251 29143 +3 30559 19029 19093 +3 30771 6874 28729 +3 4366 3171 3845 +3 35670 14083 29006 +3 3171 5320 5455 +3 35500 35830 35705 +3 35815 35705 35437 +3 22344 21569 22442 +3 4512 335 907 +3 148 254 17526 +3 3854 3722 907 +3 335 3854 907 +3 3854 6794 1141 +3 3722 3854 1141 +3 71 100 1141 +3 6794 71 1141 +3 1139 1142 100 +3 71 1139 100 +3 1139 4124 3990 +3 1142 1139 3990 +3 4124 325 5471 +3 3990 4124 5471 +3 325 3045 3186 +3 5471 325 3186 +3 3045 1147 1148 +3 3186 3045 1148 +3 1147 4915 4264 +3 1148 1147 4264 +3 4915 785 779 +3 4264 4915 779 +3 785 3465 1518 +3 779 785 1518 +3 3465 2084 4646 +3 1518 3465 4646 +3 2084 122 107 +3 4646 2084 107 +3 122 2210 3586 +3 107 122 3586 +3 2909 2773 3586 +3 2210 2909 3586 +3 910 911 2773 +3 2909 910 2773 +3 154 108 911 +3 910 154 911 +3 5457 5322 470 +3 154 5457 108 +3 11806 13603 13520 +3 3594 13777 13309 +3 6509 10039 12294 +3 10591 6509 12294 +3 13410 10832 13111 +3 10832 3732 10701 +3 24433 23750 23989 +3 18808 20703 20409 +3 20829 20910 20909 +3 35811 35697 9749 +3 17116 14530 15431 +3 1604 17116 15431 +3 14530 1035 3886 +3 15431 14530 3886 +3 1035 14646 2981 +3 3886 1035 2981 +3 14646 16689 16690 +3 2981 14646 16690 +3 16689 15557 5409 +3 16690 16689 5409 +3 16351 16504 16503 +3 947 828 3868 +3 30671 24901 30536 +3 3361 17149 1639 +3 30487 35389 26686 +3 35389 35467 26686 +3 13410 13111 14075 +3 35479 28428 28308 +3 8671 10708 10687 +3 7072 13410 14075 +3 13111 10708 13219 +3 10701 8579 7445 +3 14214 14312 14213 +3 7072 14075 14311 +3 11889 12841 11724 +3 12038 13483 13387 +3 15557 15227 15059 +3 5409 15557 15059 +3 1741 3357 3219 +3 1610 1741 3219 +3 3617 2940 3616 +3 2940 3080 3616 +3 6128 4928 405 +3 302 5862 5728 +3 16158 14962 16302 +3 13384 16970 16969 +3 17191 16699 16545 +3 1924 17191 16545 +3 3852 3747 3746 +3 22509 22510 22608 +3 16638 16639 2265 +3 3 16627 16469 +3 16594 16593 16441 +3 20364 13368 13278 +3 21124 21123 20310 +3 11562 11561 13956 +3 16905 17068 16904 +3 20315 20310 12600 +3 15832 3479 2663 +3 15830 15832 2663 +3 20450 21220 21219 +3 20048 20049 20534 +3 19246 35363 27027 +3 18378 18175 19515 +3 35462 27286 35550 +3 26412 29132 19568 +3 32801 11728 32914 +3 14424 14423 14404 +3 16748 16906 16747 +3 32555 32554 32447 +3 14871 20057 168 +3 16440 25616 25615 +3 15545 1652 16242 +3 22461 14871 168 +3 2041 1453 4329 +3 1153 2846 31 +3 15753 5464 5597 +3 4330 2041 4329 +3 9783 15198 16448 +3 142 16244 16243 +3 16256 15063 15062 +3 17257 12422 25914 +3 5080 3617 3616 +3 14772 14771 14665 +3 27964 27965 28081 +3 28082 28199 28198 +3 31602 31601 31514 +3 34804 34803 34675 +3 27500 27618 27617 +3 19525 6152 19857 +3 17298 17816 2673 +3 28691 28692 28823 +3 30457 30591 30456 +3 17298 2673 2672 +3 18280 17298 2672 +3 35581 35760 12213 +3 26504 30559 19093 +3 4100 3030 3171 +3 4366 4100 3171 +3 3030 5186 5320 +3 3171 3030 5320 +3 5186 5605 4512 +3 5320 5186 4512 +3 5605 903 335 +3 4512 5605 335 +3 3986 3854 335 +3 903 3986 335 +3 6131 6794 3854 +3 3986 6131 3854 +3 6131 1762 71 +3 6794 6131 71 +3 1762 1021 1139 +3 71 1762 1139 +3 2880 1134 1021 +3 1139 1021 4124 +3 10866 4124 1021 +3 35452 35463 35567 +3 325 10975 1253 +3 325 1253 3045 +3 1253 3326 3045 +3 3045 3326 1147 +3 1146 2772 4915 +3 1147 1146 4915 +3 2772 786 785 +3 4915 2772 785 +3 786 3598 3465 +3 785 786 3465 +3 3598 2228 2084 +3 3465 3598 2084 +3 2228 1390 122 +3 2084 2228 122 +3 1847 2210 122 +3 1390 1847 122 +3 2908 2909 2210 +3 1847 2908 2210 +3 909 910 2909 +3 2908 909 2909 +3 1053 154 910 +3 909 1053 910 +3 5322 1053 17183 +3 188 1053 908 +3 13790 3967 3043 +3 2914 13790 3043 +3 10039 13768 10121 +3 13481 3449 1155 +3 13922 14020 13921 +3 14020 14118 14117 +3 11724 12038 13387 +3 8646 8754 8753 +3 29828 18906 35568 +3 27499 27500 27617 +3 14846 102 8010 +3 10832 10708 13111 +3 13824 13922 13823 +3 15227 15821 15822 +3 12294 10039 10121 +3 16062 16205 16204 +3 16350 16351 16503 +3 4412 4133 1880 +3 16061 16062 16204 +3 13726 13725 13627 +3 13628 13726 13627 +3 12571 12726 13379 +3 11723 14082 12367 +3 33377 33490 33376 +3 33870 33869 33735 +3 563 13091 562 +3 11415 11414 31407 +3 9975 13481 2366 +3 13529 13628 13627 +3 14312 7072 14311 +3 33609 33608 33489 +3 12818 12571 11249 +3 12726 9218 13379 +3 15059 15227 15822 +3 15821 15036 16823 +3 4415 1741 1610 +3 15822 15821 16823 +3 2940 5073 4803 +3 3357 14489 15565 +3 4928 302 405 +3 3080 2940 4803 +3 22155 22150 21215 +3 405 302 5728 +3 15179 15304 1924 +3 12631 23316 22935 +3 3599 3852 3746 +3 16699 142 1894 +3 16639 3 2265 +3 3747 5888 5887 +3 25614 16441 25615 +3 2265 3 16469 +3 13470 8573 13566 +3 16749 16748 16593 +3 17232 17231 17067 +3 23102 23103 23200 +3 16394 2797 15830 +3 17068 17232 17067 +3 9773 13666 13667 +3 3479 4147 15302 +3 15830 2663 467 +3 16601 12600 21090 +3 13290 11106 13960 +3 15831 15830 467 +3 22225 22224 22128 +3 22129 22225 22128 +3 14424 14450 14423 +3 23205 23303 23204 +3 33488 33487 33374 +3 15425 14925 15491 +3 16748 16747 16592 +3 20280 20288 21120 +3 23200 23201 23298 +3 12868 20965 22244 +3 1170 1153 31 +3 23005 23103 23004 +3 3852 3599 1453 +3 16469 16627 6526 +3 1894 142 16243 +3 2041 3852 1453 +3 24801 13664 13025 +3 7550 6379 6250 +3 23900 27531 29818 +3 35489 12288 11703 +3 34870 33337 34730 +3 6899 28944 19558 +3 27735 27734 27617 +3 27618 27735 27617 +3 27735 27850 27849 +3 10601 6006 12481 +3 29122 18435 27295 +3 30725 30724 30590 +3 21287 11449 11403 +3 23168 23169 30694 +3 20644 35561 10979 +3 30688 35498 35374 +3 4773 2890 3030 +3 4100 4773 3030 +3 2890 5052 5186 +3 3030 2890 5186 +3 3992 5605 5186 +3 5052 3992 5186 +3 3992 5063 903 +3 5605 3992 903 +3 4120 3986 903 +3 5063 4120 903 +3 4120 6382 6131 +3 3986 4120 6131 +3 6382 2880 1762 +3 6131 6382 1762 +3 1134 221 1135 +3 1762 2880 1021 +3 1247 1246 1130 +3 1247 1363 1246 +3 1131 1247 1130 +3 1363 1362 1246 +3 1479 1478 1362 +3 1363 1479 1362 +3 2332 2333 2466 +3 2602 2601 2466 +3 1146 1145 2772 +3 3326 7897 1146 +3 35547 34347 35637 +3 2772 577 786 +3 787 3466 3598 +3 786 787 3598 +3 3466 3719 2228 +3 3598 3466 2228 +3 3719 5867 1390 +3 2228 3719 1390 +3 5867 3187 1847 +3 1390 5867 1847 +3 3187 4930 2908 +3 1847 3187 2908 +3 4930 908 909 +3 2908 4930 909 +3 16692 188 134 +3 909 908 1053 +3 13198 13199 11134 +3 186 6520 8578 +3 3967 7704 10968 +3 3043 3967 10968 +3 2366 13481 1155 +3 10933 1616 4395 +3 8045 4542 4409 +3 9568 8045 4409 +3 21027 15456 15457 +3 20057 21050 14484 +3 11789 189 4100 +3 29515 29653 29652 +3 27027 28307 30824 +3 14020 14019 13921 +3 13824 13823 13725 +3 13768 9975 9859 +3 10121 13768 9859 +3 6255 1880 17395 +3 10458 5724 6011 +3 1880 156 89 +3 156 1880 6255 +3 15032 15884 12716 +3 23014 23112 23111 +3 20133 18526 19434 +3 35819 35503 35663 +3 13702 4119 794 +3 12049 12131 35708 +3 9218 12726 12133 +3 12640 12912 14164 +3 23029 22930 23321 +3 27734 27735 27849 +3 24682 24516 24801 +3 33265 33374 33264 +3 17303 17264 12903 +3 2204 2203 2074 +3 29420 29558 35657 +3 15036 4801 15756 +3 16823 15036 15756 +3 4801 15687 15553 +3 15756 4801 15553 +3 3536 3404 4414 +3 3404 4415 4414 +3 5073 15614 4803 +3 15614 14631 4803 +3 5623 3218 5622 +3 3218 4928 6128 +3 22125 22126 22221 +3 13429 11499 15082 +3 16784 15304 15179 +3 16785 16784 15179 +3 4769 4904 5887 +3 3746 3747 5887 +3 15495 15541 14955 +3 14985 16639 16638 +3 16907 16906 16748 +3 16594 16749 16593 +3 20472 20557 20471 +3 22127 22223 22222 +3 17232 4459 17231 +3 4459 4460 17231 +3 17187 2797 16394 +3 5141 17187 16394 +3 15630 21028 15864 +3 11946 16601 21090 +3 5144 5141 16253 +3 16394 15830 15831 +3 14740 17185 5139 +3 15381 15382 15512 +3 9749 12135 12120 +3 13228 13133 13229 +3 23009 23107 23008 +3 467 2663 15301 +3 15962 14522 15824 +3 928 22931 23421 +3 21948 21879 21120 +3 30346 27780 27868 +3 16593 16592 16440 +3 16592 16591 16439 +3 4118 35782 35823 +3 26619 26618 26516 +3 15305 1153 1170 +3 29564 26586 13391 +3 21740 21739 29811 +3 6526 15305 1170 +3 6024 6023 5891 +3 5892 6024 5891 +3 32047 32144 32046 +3 6024 6154 6023 +3 17667 26521 28874 +3 29082 30480 28888 +3 27850 27966 27965 +3 27849 27850 27965 +3 27966 28083 28082 +3 27434 21462 29823 +3 27965 27966 28082 +3 30502 27266 22942 +3 29550 29122 27295 +3 28969 29104 28968 +3 30827 17298 18280 +3 6393 4772 4773 +3 27638 27148 26480 +3 4772 5049 2890 +3 4773 4772 2890 +3 5049 2894 5052 +3 2890 5049 5052 +3 2894 3027 3992 +3 5052 2894 3992 +3 898 5063 3992 +3 3027 898 3992 +3 898 4253 4120 +3 5063 898 4120 +3 4253 17 6382 +3 4120 4253 6382 +3 17 221 2880 +3 6382 17 2880 +3 11711 17262 16464 +3 2880 221 1134 +3 1126 1242 1241 +3 14079 7997 13981 +3 13226 13227 1136 +3 1125 1126 1241 +3 1479 1595 1478 +3 1595 1594 1478 +3 2200 2201 2332 +3 2333 2467 2466 +3 1257 2749 3574 +3 951 1151 1373 +3 1242 1243 1358 +3 1475 1474 1358 +3 35570 33233 35764 +3 5681 18920 5815 +3 35197 17451 17372 +3 11202 9895 787 +3 2360 119 5867 +3 3719 2360 5867 +3 119 3851 3187 +3 5867 119 3187 +3 3851 5065 4930 +3 3187 3851 4930 +3 5065 789 908 +3 4930 5065 908 +3 35406 35645 35904 +3 908 789 188 +3 12820 13403 13198 +3 11965 12046 11134 +3 20673 18906 29828 +3 10968 7704 20 +3 9544 1616 10933 +3 9660 9544 10933 +3 14960 13335 14962 +3 13335 16165 20265 +3 33770 33769 33642 +3 7036 7037 312 +3 11129 13868 13769 +3 11703 11441 35837 +3 11644 11500 13317 +3 22618 22717 22617 +3 23029 21489 23024 +3 13726 13824 13725 +3 13922 13921 13823 +3 3449 2001 3999 +3 1155 3449 3999 +3 5599 156 3062 +3 3062 156 1411 +3 7465 3590 6126 +3 5599 89 156 +3 25066 12686 12596 +3 23223 23029 23321 +3 23880 24426 24110 +3 24793 23880 24110 +3 23880 24332 24327 +3 24426 23880 24327 +3 35833 35615 8670 +3 5560 35560 35392 +3 12004 12003 11919 +3 2639 9166 9058 +3 35763 35916 35891 +3 11798 12143 2388 +3 14312 14311 14213 +3 2360 3719 3466 +3 25217 4785 26260 +3 5434 5435 5274 +3 35490 35819 35738 +3 249 16043 15019 +3 20613 20614 20694 +3 14527 16552 14822 +3 15019 14527 14822 +3 16552 14350 16362 +3 3713 3404 3536 +3 14822 16552 16362 +3 15614 1738 1737 +3 4414 4415 1610 +3 3218 3217 5622 +3 14631 15614 1737 +3 27411 30633 29547 +3 3217 3218 6128 +3 1765 1068 16785 +3 15209 3668 16449 +3 5888 4769 5887 +3 15304 17191 1924 +3 15541 14985 14955 +3 4769 2657 2213 +3 16749 16907 16748 +3 14955 14985 16638 +3 15326 15455 9079 +3 17070 17069 16906 +3 2043 1919 4460 +3 11561 13858 13956 +3 1540 820 5141 +3 4459 2043 4460 +3 23299 23396 23298 +3 2797 15832 15830 +3 5141 16394 16253 +3 29224 29361 29223 +3 4818 18485 4683 +3 16253 16394 15831 +3 4684 4819 4818 +3 35611 35467 35828 +3 35588 35812 35811 +3 35923 35893 35718 +3 12455 1971 35797 +3 31168 31169 31232 +3 15732 928 23421 +3 2663 15302 15301 +3 17089 17088 16765 +3 22561 20194 3729 +3 35487 35800 26803 +3 4147 16695 16694 +3 21121 21948 21120 +3 16747 16746 16591 +3 21739 21740 21834 +3 2540 2672 21653 +3 17559 5760 5759 +3 23323 23129 23420 +3 6025 6024 5892 +3 5893 6025 5892 +3 6155 6154 6024 +3 6025 6155 6024 +3 6155 6284 6283 +3 11364 35943 9900 +3 26802 684 27758 +3 28346 35896 35544 +3 28083 28200 28199 +3 28082 28083 28199 +3 24137 24570 30765 +3 461 457 6729 +3 28136 27058 27057 +3 30826 30827 18280 +3 29916 29917 30047 +3 29104 29241 29240 +3 6543 4771 4772 +3 6393 4773 189 +3 4771 5719 5049 +3 4772 4771 5049 +3 5719 3033 2894 +3 5049 5719 2894 +3 133 3027 2894 +3 3033 133 2894 +3 133 5197 898 +3 3027 133 898 +3 5197 4386 4253 +3 898 5197 4253 +3 4386 337 17 +3 4253 4386 17 +3 337 6798 221 +3 17 337 221 +3 3555 3685 3554 +3 10597 337 6795 +3 659 7367 7479 +3 4757 4758 4892 +3 6362 6363 6489 +3 1007 1008 1125 +3 1595 1712 1594 +3 1712 8587 8586 +3 2072 2201 2071 +3 2201 2333 2332 +3 2749 4242 3581 +3 1373 1257 3574 +3 1126 1127 1242 +3 1243 1359 1358 +3 24332 25620 25619 +3 1276 1392 1275 +3 3428 3427 3288 +3 4216 4349 4348 +3 2360 459 119 +3 27297 11920 11832 +3 68 3983 3851 +3 119 68 3851 +3 3983 5199 5065 +3 3851 3983 5065 +3 5199 788 789 +3 5065 5199 789 +3 35615 35675 11976 +3 789 788 134 +3 12054 13403 12820 +3 13199 5418 11134 +3 12497 12587 12496 +3 12677 12676 12586 +3 1616 3712 4395 +3 12209 3059 11060 +3 11136 12277 10500 +3 448 11136 10500 +3 13976 11309 11084 +3 35926 35517 35596 +3 11920 12004 11919 +3 32838 32946 32837 +3 28109 28226 24922 +3 12167 12166 12084 +3 13017 20485 21497 +3 33157 33158 33262 +3 2001 13238 13891 +3 13891 13238 9660 +3 3999 2001 13891 +3 13238 9544 9660 +3 35361 35432 35355 +3 1294 13790 2914 +3 15352 16986 16362 +3 5456 15553 15687 +3 12506 12596 12505 +3 12596 12686 12685 +3 21264 28195 21353 +3 12250 12249 12166 +3 13590 13210 12752 +3 13225 10004 13610 +3 6730 461 6729 +3 5839 5971 5838 +3 1395 1511 1394 +3 1627 1626 1510 +3 3014 3015 3156 +3 3686 3818 3685 +3 23712 28109 24922 +3 14350 15352 16362 +3 5724 11196 9689 +3 4117 3713 3536 +3 2053 4284 4283 +3 1185 96 222 +3 35760 35367 35936 +3 14988 15110 7876 +3 16703 3491 15266 +3 15009 15132 15131 +3 15008 15009 15131 +3 2844 14409 15682 +3 14409 2844 15934 +3 15972 15815 1299 +3 20409 20450 21219 +3 2393 16806 16493 +3 1738 2393 2259 +3 5350 5623 5622 +3 260 5350 5622 +3 20947 15064 23417 +3 28200 28317 28316 +3 16646 16647 1765 +3 1068 16784 16785 +3 2657 918 917 +3 4904 4769 2213 +3 2526 15541 15495 +3 2391 2526 15495 +3 17234 17233 17069 +3 16907 17070 16906 +3 13525 21283 15599 +3 22030 22031 22126 +3 2043 4676 1919 +3 4676 4677 1919 +3 16335 17122 1540 +3 820 17187 5141 +3 25130 35368 35729 +3 29549 27294 6990 +3 16897 16896 16738 +3 1540 5141 5144 +3 4551 4685 4684 +3 19246 21375 35415 +3 4685 4820 4819 +3 4684 4685 4819 +3 4820 4955 4954 +3 4819 4820 4954 +3 17450 17372 17451 +3 35693 35832 30214 +3 9921 35882 12120 +3 18526 15262 15135 +3 19431 19551 4684 +3 5224 5359 5223 +3 15302 4147 16694 +3 29495 35486 35531 +3 16592 16747 16591 +3 22932 23031 12545 +3 23201 23299 23298 +3 16905 16904 16746 +3 2142 19047 19048 +3 23031 23129 13007 +3 6026 6025 5893 +3 5894 6026 5893 +3 6156 6155 6025 +3 6026 6156 6025 +3 6285 6284 6155 +3 6156 6285 6155 +3 6285 6412 6411 +3 6284 6285 6411 +3 28199 28200 28316 +3 35422 35593 35840 +3 5839 5838 5704 +3 5439 5573 5572 +3 12543 11648 7414 +3 881 882 1000 +3 30048 30180 30047 +3 28578 28455 21362 +3 4770 4771 6543 +3 13216 25152 6393 +3 5852 5719 4771 +3 4770 5852 4771 +3 3174 3033 5719 +3 5852 3174 5719 +3 1055 133 3033 +3 3174 1055 3033 +3 1055 2770 5197 +3 133 1055 5197 +3 2770 4654 4386 +3 5197 2770 4386 +3 4654 6795 337 +3 4386 4654 337 +3 5037 5172 5171 +3 11227 10969 6795 +3 5036 5037 5171 +3 5172 5306 5305 +3 7478 778 659 +3 35686 35699 27755 +3 6233 6234 6362 +3 6491 7648 6490 +3 217 3166 5590 +3 696 902 4919 +3 1947 2072 1946 +3 2201 2200 2071 +3 4242 2619 2755 +3 3574 2749 3581 +3 1008 1009 1126 +3 1127 1243 1242 +3 12335 12250 27993 +3 11919 11918 11832 +3 12167 27762 27877 +3 2647 2648 2782 +3 13713 10500 13995 +3 26686 35467 28944 +3 28992 30216 35657 +3 9308 10722 9196 +3 35806 23959 24682 +3 3983 2083 5199 +3 459 8128 68 +3 119 459 68 +3 11581 32249 11582 +3 35888 35401 35748 +3 12205 12054 12820 +3 2920 2784 17159 +3 12209 4123 4389 +3 13403 13199 13198 +3 34414 34413 34275 +3 11100 12209 11060 +3 11136 6957 13027 +3 12277 11136 13027 +3 9635 24842 24482 +3 25269 13590 12752 +3 20662 20647 371 +3 24232 24680 13804 +3 12417 12506 12416 +3 12596 12595 12505 +3 6662 5204 3582 +3 3712 6662 9335 +3 13772 8085 13702 +3 13997 13996 8570 +3 13674 13772 13702 +3 4119 1294 2914 +3 14115 14114 14016 +3 4395 3712 9335 +3 11594 11526 26831 +3 12595 12596 12685 +3 24327 24332 25619 +3 30555 30601 27379 +3 27317 12102 12101 +3 20206 20205 17600 +3 5708 5842 5707 +3 1511 1510 1394 +3 5974 6106 5973 +3 1744 1743 1626 +3 1511 1627 1510 +3 20474 20559 20473 +3 1627 1744 1626 +3 35904 12121 35814 +3 11311 5583 7177 +3 1612 5752 1611 +3 389 279 5753 +3 673 3487 3355 +3 14807 1768 15972 +3 15295 15422 16036 +3 14601 1768 14807 +3 3076 15265 14785 +3 976 15684 15683 +3 4270 976 15683 +3 22509 22608 22607 +3 3483 2844 15683 +3 9632 111 10119 +3 14672 14671 14579 +3 16031 15929 15790 +3 5210 15422 15295 +3 5484 5210 15295 +3 16493 16806 15109 +3 2259 2393 16493 +3 4325 1799 4331 +3 5350 260 1683 +3 22315 22412 22314 +3 12803 12142 11205 +3 14995 16647 16646 +3 14987 14995 16646 +3 918 241 2661 +3 2213 2657 917 +3 3167 3455 4534 +3 6009 2526 2391 +3 4465 4466 17233 +3 17070 17234 17069 +3 21283 21282 15599 +3 19193 20134 30602 +3 4676 4500 4677 +3 4500 4142 4677 +3 5610 17122 16335 +3 5475 5610 16335 +3 16149 25617 16292 +3 21741 21835 21740 +3 15547 1540 5144 +3 6772 5475 15158 +3 18045 4551 19551 +3 4638 4535 2525 +3 4686 4821 4820 +3 4685 4686 4820 +3 4821 4956 4955 +3 4820 4821 4955 +3 4956 5091 5090 +3 4955 4956 5090 +3 5225 5224 5090 +3 5091 5225 5090 +3 5360 5359 5224 +3 5225 5360 5224 +3 5494 5493 5359 +3 5360 5494 5359 +3 19700 27780 30480 +3 5494 5629 5493 +3 16747 16905 16746 +3 2152 19163 2023 +3 12288 9633 13306 +3 17068 17067 16904 +3 6027 6026 5894 +3 5895 6027 5894 +3 6157 6156 6026 +3 6027 6157 6026 +3 6286 6285 6156 +3 6157 6286 6156 +3 6413 6412 6285 +3 6286 6413 6285 +3 35701 35354 35889 +3 6412 6413 6538 +3 5842 5841 5707 +3 1162 1163 1278 +3 6106 6105 5973 +3 28197 28314 28196 +3 1279 1395 1394 +3 4099 4770 1167 +3 21488 35575 35548 +3 5983 5852 4770 +3 27550 30219 30086 +3 3314 3174 5852 +3 5983 3314 5852 +3 5871 1055 3174 +3 3314 5871 3174 +3 5871 2635 2770 +3 1055 5871 2770 +3 2368 8841 2236 +3 2770 2635 4654 +3 4750 4751 4885 +3 28591 22236 17388 +3 6259 784 450 +3 457 6259 450 +3 4902 5037 5036 +3 4901 4902 5036 +3 1001 1002 1119 +3 4756 4891 4890 +3 6104 6234 6103 +3 6234 6363 6362 +3 4919 217 5590 +3 3821 3822 3953 +3 1827 1947 1826 +3 2072 2071 1946 +3 2619 2217 2216 +3 3581 4242 2755 +3 770 771 889 +3 1009 1127 1126 +3 652 653 770 +3 890 1009 1008 +3 537 538 652 +3 771 890 889 +3 424 538 423 +3 653 771 770 +3 313 314 423 +3 538 653 652 +3 35550 30072 30423 +3 538 537 423 +3 35736 35417 35668 +3 314 424 423 +3 4648 6634 3991 +3 11227 4654 9572 +3 5418 11965 11134 +3 16092 13716 13715 +3 3059 12209 4389 +3 4123 4926 4791 +3 11665 11664 11589 +3 13020 7467 7810 +3 12163 12246 12162 +3 12331 12330 12245 +3 14021 14022 14119 +3 33262 33263 33371 +3 18916 19167 19114 +3 21747 21838 17256 +3 11524 11591 11523 +3 11666 11665 11590 +3 35785 35581 12384 +3 9335 6662 3582 +3 10467 13996 10564 +3 13996 10118 8570 +3 8085 1294 4119 +3 13702 8085 4119 +3 13812 13813 13910 +3 14115 14211 14210 +3 6106 6236 6105 +3 14114 14115 14210 +3 6236 6365 6235 +3 6236 6235 6105 +3 6744 1642 6743 +3 9813 9812 9697 +3 6365 6364 6235 +3 4896 4897 5031 +3 1044 1045 1162 +3 1163 1279 1278 +3 12506 12505 12416 +3 4494 4628 4627 +3 12081 12163 12080 +3 12331 12417 12330 +3 22134 22231 22230 +3 20955 21038 21037 +3 21220 22251 22237 +3 21219 21220 22237 +3 19138 7289 27867 +3 14611 2020 5430 +3 1768 15815 15972 +3 16036 14601 14807 +3 1737 1738 2259 +3 20563 21384 21383 +3 16665 1561 5484 +3 14739 13786 16533 +3 13786 14253 14157 +3 9400 20242 20157 +3 13865 9568 15731 +3 14236 4196 13085 +3 1561 5210 5484 +3 2623 14236 13085 +3 15116 16780 16709 +3 15422 14601 16036 +3 1799 1683 4331 +3 15109 15116 16709 +3 15064 21866 23227 +3 1799 5350 1683 +3 15628 15660 14987 +3 25607 16755 16754 +3 917 918 2661 +3 16647 1068 1765 +3 3455 6009 4534 +3 241 15628 15568 +3 17234 4465 17233 +3 4534 6009 2391 +3 22251 10962 98 +3 1684 1800 4466 +3 4500 3484 3613 +3 23401 23402 9079 +3 16516 16550 5475 +3 4142 4500 3613 +3 21862 15729 1034 +3 17122 820 1540 +3 5475 16335 15158 +3 16591 16590 16438 +3 16335 1540 15547 +3 15158 16335 15547 +3 2660 15053 15022 +3 2525 2660 15022 +3 4822 4821 4686 +3 18045 4685 4551 +3 4822 4957 4956 +3 4821 4822 4956 +3 4957 5092 5091 +3 4956 4957 5091 +3 5226 5225 5091 +3 5092 5226 5091 +3 5361 5360 5225 +3 5226 5361 5225 +3 5495 5494 5360 +3 5361 5495 5360 +3 5630 5629 5494 +3 5495 5630 5494 +3 5764 5763 5629 +3 5630 5764 5629 +3 5896 5895 5763 +3 5764 5896 5763 +3 6028 6027 5895 +3 5896 6028 5895 +3 6158 6157 6027 +3 6028 6158 6027 +3 6287 6286 6157 +3 6158 6287 6157 +3 6414 6413 6286 +3 6287 6414 6286 +3 619 33347 23272 +3 6631 9547 6755 +3 5032 5167 5166 +3 1628 1627 1511 +3 1278 1279 1394 +3 35593 35874 35760 +3 1248 1364 1247 +3 3571 2747 2748 +3 4090 4091 4223 +3 2601 2600 2465 +3 14271 35480 12214 +3 2329 2463 2462 +3 35798 35602 35447 +3 24994 35725 35634 +3 14170 11003 14165 +3 6250 9509 7550 +3 1864 1863 1746 +3 13981 14170 12123 +3 1586 1585 1469 +3 11060 3059 7763 +3 764 883 882 +3 646 764 645 +3 4767 4902 4901 +3 4766 4767 4901 +3 4353 4487 4486 +3 5172 5173 5306 +3 5972 6104 5971 +3 6234 6233 6103 +3 3954 4088 4087 +3 4621 4755 4754 +3 35617 35748 35640 +3 1947 1946 1826 +3 2217 5860 5991 +3 2755 2619 2216 +3 5060 9628 10772 +3 889 890 1008 +3 1483 3593 1484 +3 11917 11916 11830 +3 12635 13003 12458 +3 9641 12629 7932 +3 7997 13895 11003 +3 14170 7997 11003 +3 35808 35698 35554 +3 23251 16448 23349 +3 22237 22251 98 +3 13495 12284 12839 +3 33233 35570 33930 +3 35377 35428 35660 +3 670 67 6634 +3 35431 35482 35751 +3 35349 35569 35410 +3 3029 218 791 +3 4389 4123 4791 +3 4926 13772 13674 +3 14201 14299 14298 +3 10004 13225 11857 +3 12000 12081 11999 +3 12246 12331 12245 +3 13495 15538 3066 +3 12081 12080 11999 +3 2364 13495 12839 +3 2364 12839 7437 +3 31367 31434 31366 +3 13245 13151 13246 +3 11916 12000 11915 +3 11591 11666 11590 +3 22821 22820 22721 +3 7324 3057 3201 +3 25620 24536 23595 +3 11786 12732 12638 +3 1512 1628 1511 +3 9544 2902 1616 +3 1280 1396 1279 +3 1512 1511 1395 +3 1163 1164 1279 +3 1396 1512 1395 +3 1045 1046 1163 +3 35881 35378 35835 +3 22809 22810 22908 +3 1396 1395 1279 +3 11100 11060 13584 +3 16303 14960 14962 +3 3582 5204 9452 +3 5434 5433 5299 +3 11830 11916 11829 +3 12246 12245 12162 +3 13343 13342 13246 +3 13247 13343 13246 +3 22318 22415 22317 +3 23105 23203 23202 +3 679 2925 16665 +3 23104 23105 23202 +3 5627 2925 679 +3 4541 5627 679 +3 16806 15116 15109 +3 2925 1561 16665 +3 16032 14722 1500 +3 17023 5627 4541 +3 20980 13422 17129 +3 12392 35793 11627 +3 22807 22906 22905 +3 8239 10012 9553 +3 2017 1893 1658 +3 25619 25620 23595 +3 17113 14722 16032 +3 17114 17113 16032 +3 16709 16780 14414 +3 16780 14436 14414 +3 17079 17243 17078 +3 4325 4331 17242 +3 17077 17076 16913 +3 22906 23005 22905 +3 698 15660 15628 +3 241 698 15628 +3 15628 14987 14986 +3 2661 241 15568 +3 5885 5886 2346 +3 2610 3455 3167 +3 224 4811 1800 +3 4465 1684 4466 +3 16388 3352 16389 +3 3398 3399 4413 +3 3588 2611 1735 +3 3484 3588 905 +3 15053 15057 14946 +3 14952 16550 16516 +3 16746 16745 16590 +3 16439 16591 16438 +3 14944 14946 16511 +3 16516 5475 6772 +3 15053 14946 14944 +3 4461 2171 4462 +3 15022 15053 14944 +3 14946 16516 16511 +3 23959 35806 11725 +3 22025 22121 22120 +3 4958 4957 4822 +3 4823 4958 4822 +3 4958 5093 5092 +3 4957 4958 5092 +3 5093 5227 5226 +3 5092 5093 5226 +3 5362 5361 5226 +3 5227 5362 5226 +3 5496 5495 5361 +3 5362 5496 5361 +3 5631 5630 5495 +3 5496 5631 5495 +3 5765 5764 5630 +3 5631 5765 5630 +3 5897 5896 5764 +3 5765 5897 5764 +3 6029 6028 5896 +3 5897 6029 5896 +3 6159 6158 6028 +3 6029 6159 6028 +3 6288 6287 6158 +3 6159 6288 6158 +3 6415 6414 6287 +3 6288 6415 6287 +3 34292 34430 34291 +3 33862 33861 33727 +3 1164 1280 1279 +3 35685 35934 35883 +3 1046 1164 1163 +3 1045 1163 1162 +3 25051 19916 19915 +3 12080 12162 12079 +3 1630 1629 1513 +3 2466 2601 2465 +3 3159 4109 4242 +3 2328 2329 2462 +3 2598 2597 2462 +3 12678 12679 12767 +3 12055 12136 12827 +3 35715 35355 35937 +3 1165 1166 1281 +3 3557 3556 3423 +3 3687 3819 3818 +3 1820 1940 1939 +3 1819 1820 1939 +3 5185 2757 3580 +3 2096 2095 1956 +3 11362 35396 14285 +3 4632 11014 11015 +3 5307 5442 5441 +3 1015 1133 1014 +3 5840 5972 5839 +3 6104 6103 5971 +3 35831 35499 13100 +3 2203 2202 2073 +3 1593 1710 1592 +3 1827 1826 1709 +3 5860 1483 1484 +3 2216 2217 5991 +3 892 1011 891 +3 16945 3593 3460 +3 773 892 772 +3 1129 1128 1010 +3 654 655 772 +3 1011 1010 891 +3 540 655 539 +3 892 891 772 +3 426 540 425 +3 655 773 772 +3 7040 315 7039 +3 655 654 539 +3 316 426 425 +3 540 539 425 +3 669 218 67 +3 35656 35651 35864 +3 35812 35362 35697 +3 67 218 3029 +3 12363 12375 8570 +3 14298 6511 14297 +3 12766 12858 12857 +3 13799 5723 2091 +3 11746 11830 11745 +3 12163 12162 12080 +3 13438 13437 13342 +3 13343 13438 13342 +3 13534 13533 13437 +3 13438 13534 13437 +3 13632 13631 13533 +3 13534 13632 13533 +3 11746 11745 11665 +3 11830 11829 11745 +3 13974 11528 12932 +3 11666 11746 11665 +3 2777 2778 2442 +3 35865 35788 35682 +3 1514 1513 1397 +3 927 1046 1045 +3 1125 1124 1006 +3 3559 3560 3689 +3 5156 5290 5289 +3 6608 6733 6732 +3 3999 13891 13239 +3 1622 10968 4104 +3 12223 11503 3967 +3 13790 12223 3967 +3 10118 12363 8570 +3 14180 11100 13584 +3 12329 12415 12328 +3 12153 12236 12152 +3 13923 13924 14021 +3 12000 11999 11915 +3 13730 13729 13631 +3 13632 13730 13631 +3 5746 5612 1893 +3 2017 5746 1893 +3 5746 4 4520 +3 14653 17113 17114 +3 5612 5746 4520 +3 1500 17023 4541 +3 14652 14653 17114 +3 4 5866 6758 +3 16805 16822 14652 +3 4520 4 6758 +3 5866 354 2529 +3 6758 5866 2529 +3 354 4275 2279 +3 2529 354 2279 +3 16822 14653 14652 +3 4275 15235 15222 +3 14436 3267 497 +3 14722 17023 1500 +3 17243 17242 17078 +3 14414 14436 497 +3 16914 17077 16913 +3 17243 4325 17242 +3 918 1405 241 +3 17241 17240 17076 +3 15568 15628 14986 +3 15660 14995 14987 +3 5886 2610 2346 +3 14987 16646 16640 +3 1684 224 1800 +3 2346 2610 3167 +3 8116 20723 17722 +3 224 4010 4111 +3 3613 3484 905 +3 10962 21295 21286 +3 14946 14952 16516 +3 905 3588 1735 +3 16591 16746 16590 +3 16550 5610 5475 +3 19103 19537 35696 +3 16904 16903 16745 +3 4420 18594 18716 +3 16511 16516 6772 +3 4555 4689 19228 +3 16170 4554 19228 +3 16438 16437 16292 +3 16438 16590 16437 +3 23926 26555 26253 +3 16590 16589 16437 +3 4959 4958 4823 +3 2169 2040 19175 +3 5094 5093 4958 +3 4959 5094 4958 +3 5228 5227 5093 +3 5094 5228 5093 +3 5228 5363 5362 +3 5227 5228 5362 +3 5363 5497 5496 +3 5362 5363 5496 +3 5632 5631 5496 +3 5497 5632 5496 +3 5766 5765 5631 +3 5632 5766 5631 +3 5898 5897 5765 +3 5766 5898 5765 +3 6030 6029 5897 +3 5898 6030 5897 +3 6160 6159 6029 +3 6030 6160 6029 +3 6289 6288 6159 +3 6160 6289 6159 +3 6416 6415 6288 +3 6289 6416 6288 +3 35941 35394 35502 +3 834 835 8006 +3 4758 4893 4892 +3 3291 3430 3290 +3 2490 6248 9448 +3 3430 3563 3429 +3 5289 5424 5288 +3 1588 1705 1704 +3 8906 6246 6245 +3 5580 5715 5714 +3 1151 1495 1257 +3 4360 4494 4493 +3 2733 2732 2597 +3 2598 2733 2597 +3 6486 6612 6485 +3 3429 3428 3289 +3 6612 6737 6736 +3 3290 3429 3289 +3 4615 4616 4749 +3 4616 4750 4749 +3 4219 4352 4351 +3 4219 4218 4085 +3 418 532 531 +3 1237 1353 1352 +3 2592 2593 2727 +3 1468 1467 1351 +3 7936 1250 7935 +3 4394 4261 10563 +3 5706 5840 5705 +3 5972 5971 5839 +3 2202 2203 2334 +3 2203 2335 2334 +3 1477 1476 1360 +3 1361 1477 1360 +3 1245 1244 1128 +3 5991 5860 1484 +3 1594 1593 1477 +3 1011 1129 1010 +3 1246 1362 1245 +3 1478 1594 1477 +3 1478 1477 1361 +3 1362 1478 1361 +3 8585 1711 8586 +3 1594 1711 1593 +3 3690 3822 3821 +3 3689 3690 3821 +3 35868 35411 35360 +3 3822 3954 3953 +3 2073 2072 1947 +3 1948 1827 8585 +3 35393 35575 35352 +3 35541 35761 35543 +3 10485 516 4917 +3 218 516 791 +3 8637 8744 2118 +3 13888 287 13493 +3 13727 13825 13726 +3 12660 3340 12659 +3 35372 35720 35459 +3 11916 11915 11829 +3 13828 13827 13729 +3 13730 13828 13729 +3 13926 13925 13827 +3 13828 13926 13827 +3 13926 14024 14023 +3 13925 13926 14023 +3 14024 14122 14121 +3 14023 14024 14121 +3 9063 20781 20782 +3 31049 31111 31110 +3 30930 30988 30929 +3 14218 14217 14121 +3 10721 13884 9789 +3 13716 13717 13815 +3 14122 14218 14121 +3 7681 10933 4245 +3 219 3999 13239 +3 14316 14315 14217 +3 11503 9741 7704 +3 14180 13584 12375 +3 12363 14180 12375 +3 12161 12244 12160 +3 12504 12503 12414 +3 12224 9639 9743 +3 14022 14120 14119 +3 3829 3697 3830 +3 2279 4275 15222 +3 15235 16859 16851 +3 15222 15235 16851 +3 16859 14806 14790 +3 16851 16859 14790 +3 14806 3797 17116 +3 1829 3316 243 +3 14790 14806 17116 +3 677 14491 1829 +3 3316 138 243 +3 3797 14940 14530 +3 17116 3797 14530 +3 14940 3885 1035 +3 14530 14940 1035 +3 3885 5407 14646 +3 4675 4810 1566 +3 1035 3885 14646 +3 223 2625 677 +3 14491 3316 1829 +3 17176 5482 3121 +3 3267 3350 15413 +3 17079 17078 16915 +3 16914 25605 25604 +3 4198 4199 17240 +3 17077 17241 17076 +3 2657 6515 918 +3 1405 698 241 +3 16646 1765 826 +3 14986 14987 16640 +3 16739 16738 16583 +3 3877 5886 5885 +3 20093 15024 17101 +3 14679 14787 25 +3 4792 11500 11644 +3 17802 17899 20478 +3 3756 3888 3887 +3 4021 19125 3887 +3 3888 4022 4021 +3 27149 27870 35699 +3 4022 4155 4154 +3 18759 18758 18660 +3 4155 4288 4287 +3 4154 4155 4287 +3 4288 4422 4421 +3 4287 4288 4421 +3 4422 4556 4555 +3 4421 4422 4555 +3 25130 13590 25268 +3 4556 4690 4555 +3 5269 18206 5404 +3 4690 4825 4689 +3 4960 4959 4824 +3 4825 4960 4824 +3 5095 5094 4959 +3 4960 5095 4959 +3 5229 5228 5094 +3 5095 5229 5094 +3 5364 5363 5228 +3 5229 5364 5228 +3 5498 5497 5363 +3 5364 5498 5363 +3 5633 5632 5497 +3 5498 5633 5497 +3 5767 5766 5632 +3 5633 5767 5632 +3 5899 5898 5766 +3 5767 5899 5766 +3 6031 6030 5898 +3 5899 6031 5898 +3 6161 6160 6030 +3 6031 6161 6030 +3 6290 6289 6160 +3 6161 6290 6160 +3 6417 6544 8011 +3 6290 6417 6289 +3 2736 2735 2600 +3 415 528 414 +3 3430 3429 3290 +3 4913 4778 11282 +3 3563 3693 3562 +3 3563 3562 3429 +3 1705 1706 1822 +3 1862 1861 1744 +3 5715 5849 5848 +3 1823 1943 1942 +3 5033 5034 5168 +3 30180 30179 30047 +3 11456 11457 11520 +3 4899 5034 5033 +3 13827 13925 13826 +3 2869 2868 2732 +3 1592 1709 1591 +3 1709 1708 1591 +3 4618 4752 4751 +3 2457 2458 2592 +3 2097 2226 1954 +3 1953 2097 1954 +3 1702 1819 1818 +3 1584 1585 1701 +3 2863 2864 3002 +3 3003 3144 3143 +3 1015 7820 7935 +3 1482 1481 1365 +3 5571 5706 5570 +3 5840 5839 5705 +3 2334 2335 2468 +3 2335 2469 2468 +3 1477 1593 1476 +3 1593 1592 1476 +3 1246 1245 1129 +3 1129 1245 1128 +3 3567 3697 3696 +3 1130 1246 1129 +3 3434 3567 3566 +3 3566 3567 3696 +3 3295 3434 3433 +3 3433 3434 3566 +3 3155 3295 3294 +3 3294 3295 3433 +3 3014 3013 2874 +3 3154 3155 3294 +3 2604 2739 2603 +3 2875 3014 2874 +3 2875 2874 2738 +3 2739 2875 2738 +3 3155 3154 3013 +3 3014 3155 3013 +3 190 3571 3962 +3 4628 4629 4762 +3 35542 35915 29221 +3 3688 3820 3819 +3 11130 29 12662 +3 12046 13775 12128 +3 98 10962 21286 +3 11591 11590 11523 +3 14218 14316 14217 +3 10728 9313 14315 +3 14316 10728 14315 +3 12940 11837 9313 +3 10728 12940 9313 +3 12940 9657 11262 +3 11837 12940 11262 +3 11210 10117 10460 +3 10722 11210 10460 +3 11210 7699 8441 +3 10117 11210 8441 +3 7699 7574 8774 +3 10968 20 4104 +3 7704 7878 20 +3 13353 13354 13448 +3 12244 12329 12243 +3 4123 3989 4926 +3 13552 13551 13455 +3 5407 16536 16689 +3 14646 5407 16689 +3 16536 15558 15557 +3 3402 15162 15144 +3 3265 3402 15144 +3 16689 16536 15557 +3 138 3402 3265 +3 15558 14717 15227 +3 15557 15558 15227 +3 14717 15820 15821 +3 15227 14717 15821 +3 1424 2625 252 +3 14914 15036 15821 +3 15820 14914 15821 +3 5066 4801 15036 +3 14914 5066 15036 +3 16476 15687 4801 +3 5066 16476 4801 +3 35405 28993 35369 +3 16476 1213 15687 +3 3490 3358 252 +3 2625 223 252 +3 5482 14735 15556 +3 17013 17176 3121 +3 22026 22027 22122 +3 21764 13425 20065 +3 1567 1452 4199 +3 17241 4198 17240 +3 4769 1734 2657 +3 6515 1405 918 +3 1765 16785 16626 +3 16640 16646 826 +3 16584 16583 16431 +3 4010 3877 5885 +3 6280 21328 21858 +3 14996 15119 15118 +3 32528 32529 32637 +3 31300 31367 31299 +3 3757 3889 3888 +3 5331 3756 3755 +3 3889 4023 4022 +3 3888 3889 4022 +3 4023 4156 4155 +3 4022 4023 4155 +3 4156 4289 4288 +3 4155 4156 4288 +3 4289 4423 4422 +3 4288 4289 4422 +3 4423 4557 4556 +3 4422 4423 4556 +3 4691 4690 4556 +3 4557 4691 4556 +3 4826 4825 4690 +3 4691 4826 4690 +3 4961 4960 4825 +3 4826 4961 4825 +3 5096 5095 4960 +3 4961 5096 4960 +3 5230 5229 5095 +3 5096 5230 5095 +3 5365 5364 5229 +3 5230 5365 5229 +3 5499 5498 5364 +3 5365 5499 5364 +3 5499 5634 5633 +3 5498 5499 5633 +3 5768 5767 5633 +3 5634 5768 5633 +3 5900 5899 5767 +3 5768 5900 5767 +3 6032 6031 5899 +3 5900 6032 5899 +3 6162 6161 6031 +3 6032 6162 6031 +3 6291 6290 6161 +3 6162 6291 6161 +3 6418 6417 6290 +3 6291 6418 6290 +3 31169 31233 31232 +3 13721 13720 13622 +3 4777 4778 4912 +3 5047 5048 5182 +3 5875 9431 13988 +3 5846 5978 5977 +3 4753 4754 4888 +3 5165 5299 5298 +3 1822 1823 1942 +3 2748 2747 2075 +3 35402 35586 35422 +3 31458 31530 31457 +3 4226 4227 4359 +3 26701 26596 22777 +3 26847 11673 11754 +3 887 888 1006 +3 13771 5060 10772 +3 1608 3460 1483 +3 28346 35544 35619 +3 1133 1132 1014 +3 3953 4087 4086 +3 3689 3821 3820 +3 1585 1584 1468 +3 1353 1469 1352 +3 2864 3003 3002 +3 4483 4484 4617 +3 8269 1482 8161 +3 1598 1597 1481 +3 5436 5437 5570 +3 5706 5705 5570 +3 656 655 540 +3 426 427 540 +3 1361 1360 1244 +3 1710 1709 1592 +3 1012 1130 1011 +3 1362 1361 1245 +3 3830 10395 3829 +3 3697 3829 3696 +3 1818 1938 1817 +3 2063 2062 1937 +3 1956 1957 2757 +3 2593 2728 2727 +3 4632 4766 4765 +3 9657 7772 11320 +3 4766 4901 4900 +3 4765 4766 4900 +3 4901 5036 5035 +3 5036 5171 5170 +3 21107 21196 21195 +3 4900 4901 5035 +3 1584 1583 1467 +3 2226 2096 1955 +3 4352 4353 4486 +3 5454 1954 5319 +3 7935 1249 1133 +3 2327 2461 2326 +3 3060 3061 14 +3 24536 26073 25941 +3 24431 29535 29492 +3 22722 22821 22721 +3 11262 9657 11320 +3 7772 10378 9687 +3 8441 7699 8774 +3 7365 11110 8774 +3 7574 7365 8774 +3 7364 8024 11110 +3 7365 7364 11110 +3 8551 8443 8024 +3 35897 35605 35451 +3 7364 8551 8024 +3 18640 21116 21115 +3 1837 1843 1844 +3 2625 14491 677 +3 4809 3358 4675 +3 15162 16822 16805 +3 15144 15162 16805 +3 243 138 3265 +3 497 3267 15413 +3 4192 25596 25595 +3 3358 3490 4675 +3 16631 249 15293 +3 15019 14822 15414 +3 5487 5480 16631 +3 249 15019 15293 +3 14834 14724 16986 +3 4809 4675 1451 +3 35831 13195 14282 +3 16238 140 15964 +3 3211 6148 1184 +3 35571 35712 35798 +3 16072 15932 14510 +3 14776 14889 14775 +3 12989 12803 13083 +3 21124 22052 21123 +3 16191 2711 16487 +3 3121 5482 15556 +3 23227 21866 12867 +3 15589 15071 15070 +3 23522 23984 30785 +3 4198 1567 4199 +3 28469 17313 29121 +3 26828 19791 27374 +3 28729 28730 30668 +3 32984 32983 32875 +3 35333 35332 35203 +3 26802 28486 684 +3 3496 3626 3625 +3 3625 3757 34473 +3 3626 3758 3757 +3 18376 18304 17363 +3 3758 3890 3889 +3 3757 3758 3889 +3 3890 4024 4023 +3 3889 3890 4023 +3 4024 4157 4156 +3 4023 4024 4156 +3 4157 4290 4289 +3 4156 4157 4289 +3 4290 4424 4423 +3 4289 4290 4423 +3 4424 4558 4557 +3 4423 4424 4557 +3 4692 4691 4557 +3 4558 4692 4557 +3 4827 4826 4691 +3 4692 4827 4691 +3 4962 4961 4826 +3 4827 4962 4826 +3 5097 5096 4961 +3 4962 5097 4961 +3 5231 5230 5096 +3 5097 5231 5096 +3 5366 5365 5230 +3 5231 5366 5230 +3 5366 5500 5499 +3 5365 5366 5499 +3 5635 5634 5499 +3 5500 5635 5499 +3 5769 5768 5634 +3 5635 5769 5634 +3 5901 5900 5768 +3 5769 5901 5768 +3 6033 6032 5900 +3 5901 6033 5900 +3 6163 6162 6032 +3 6033 6163 6032 +3 6292 6291 6162 +3 6163 6292 6162 +3 6419 6420 10692 +3 6292 6419 6291 +3 11320 7772 9687 +3 30180 30313 30179 +3 1942 1943 2067 +3 5048 5183 5182 +3 5159 5160 5293 +3 295 14489 3349 +3 6227 6356 6355 +3 13820 13918 13819 +3 1283 7743 7858 +3 5182 5183 5316 +3 28428 30026 28308 +3 803 922 921 +3 33548 802 801 +3 4354 4353 4220 +3 3318 5038 5037 +3 5160 5161 5294 +3 6097 6098 6227 +3 3293 3294 3432 +3 3433 3566 3565 +3 6105 6235 6104 +3 6235 6364 6234 +3 5025 5026 5160 +3 5161 5295 5294 +3 1469 1585 1468 +3 532 647 531 +3 8149 6092 6091 +3 4090 4089 3955 +3 8269 1598 1482 +3 35525 35495 35552 +3 5301 5302 5436 +3 5437 5571 5570 +3 774 773 655 +3 541 656 540 +3 893 1012 892 +3 1245 1361 1244 +3 3423 3556 3422 +3 1130 1129 1011 +3 3950 4084 4083 +3 3556 3555 3422 +3 11889 12208 13304 +3 3949 3950 4083 +3 1015 1014 895 +3 896 895 776 +3 5306 5307 5441 +3 5442 5576 5575 +3 15009 15008 14888 +3 2120 432 1401 +3 5312 5447 5446 +3 5311 5312 5446 +3 4086 4087 4219 +3 6097 6227 6226 +3 4353 4354 4487 +3 4486 4487 4620 +3 6748 6747 6622 +3 4488 4622 4621 +3 35788 35388 35682 +3 10986 10249 8443 +3 11915 11999 11914 +3 5335 124 9741 +3 12162 12161 12079 +3 12893 16161 21286 +3 10378 12930 13872 +3 9687 10378 13872 +3 8551 10986 8443 +3 9668 9321 10249 +3 10986 9668 10249 +3 15683 2844 15682 +3 15625 4783 3662 +3 3358 1424 252 +3 30029 30028 29897 +3 3350 3328 2574 +3 2574 3328 17013 +3 15413 3350 2574 +3 3328 17176 17013 +3 22910 23009 22909 +3 30027 6875 28997 +3 1612 1611 1210 +3 1209 1612 1210 +3 1404 2387 501 +3 15269 16958 15268 +3 35670 29006 35740 +3 11499 13429 20433 +3 22514 22515 22613 +3 4940 9689 2248 +3 35916 35877 35614 +3 14570 14662 14661 +3 22521 22520 33923 +3 20402 21216 20399 +3 14768 14767 14661 +3 6403 16191 16487 +3 15730 14945 22044 +3 22074 22068 21132 +3 16487 1843 16635 +3 30602 27054 27053 +3 11561 12737 13858 +3 28017 29697 28016 +3 35800 35505 13578 +3 30498 26828 27374 +3 19466 30489 28467 +3 3363 3496 34861 +3 29077 28729 30668 +3 3364 3497 3496 +3 3363 3364 3496 +3 3497 3627 3626 +3 3496 3497 3626 +3 3627 3759 3758 +3 3626 3627 3758 +3 3891 3890 3758 +3 3759 3891 3758 +3 4025 4024 3890 +3 3891 4025 3890 +3 4158 4157 4024 +3 4025 4158 4024 +3 4158 4291 4290 +3 4157 4158 4290 +3 4291 4425 4424 +3 4290 4291 4424 +3 4425 4559 4558 +3 4424 4425 4558 +3 4693 4692 4558 +3 4559 4693 4558 +3 4828 4827 4692 +3 4693 4828 4692 +3 4963 4962 4827 +3 4828 4963 4827 +3 5098 5097 4962 +3 4963 5098 4962 +3 5232 5231 5097 +3 5098 5232 5097 +3 5367 5366 5231 +3 5232 5367 5231 +3 5501 5500 5366 +3 5367 5501 5366 +3 5501 5636 5635 +3 5500 5501 5635 +3 5770 5769 5635 +3 5636 5770 5635 +3 5902 5901 5769 +3 5770 5902 5769 +3 6034 6033 5901 +3 5902 6034 5901 +3 6164 6163 6033 +3 6034 6164 6033 +3 6293 6292 6163 +3 6164 6293 6163 +3 10894 11020 10893 +3 6293 6420 6292 +3 922 1041 1040 +3 13924 14022 14021 +3 1041 1159 1158 +3 921 922 1040 +3 11282 4778 11156 +3 1040 1041 1158 +3 1583 1582 1466 +3 13692 5875 13988 +3 35430 29145 29008 +3 1399 1400 1515 +3 11741 11740 11660 +3 6733 6734 696 +3 420 533 7245 +3 1159 1275 1158 +3 2198 2199 2330 +3 3422 3555 3421 +3 888 1007 1006 +3 5966 6098 6097 +3 1364 1365 1480 +3 6235 6234 6104 +3 3154 3294 3293 +3 3012 3013 3153 +3 5833 5965 5964 +3 35605 35741 35451 +3 5319 5185 2881 +3 3299 2882 3441 +3 11520 11519 11456 +3 22815 22814 22715 +3 3024 3574 3448 +3 3574 3581 3448 +3 5167 5168 5301 +3 5302 5437 5436 +3 893 892 773 +3 656 774 655 +3 3686 3685 3555 +3 1012 1011 892 +3 6092 6093 6222 +3 2324 2458 2457 +3 4083 4216 4215 +3 678 664 6731 +3 3432 3433 3565 +3 6363 6364 6490 +3 28427 35721 35600 +3 2868 3007 2867 +3 12277 13027 12300 +3 35725 35462 35634 +3 12078 12077 11996 +3 8691 10500 12278 +3 3562 3561 3428 +3 11537 11604 11536 +3 6747 6748 1886 +3 2002 3865 190 +3 6748 2002 1886 +3 1886 2002 190 +3 5021 5156 5155 +3 6623 6748 6622 +3 2225 3849 3587 +3 32867 32868 32975 +3 11503 5335 9741 +3 5690 14607 1649 +3 32200 32301 32199 +3 21295 12893 21286 +3 12930 9519 13227 +3 13872 12930 13227 +3 12893 21391 16458 +3 16161 12893 16458 +3 14738 2253 11693 +3 15123 15250 15249 +3 14735 16191 6403 +3 15556 14735 6403 +3 5488 15160 15655 +3 21027 14762 15456 +3 21484 13954 14150 +3 15224 5488 15655 +3 20192 20308 20105 +3 20461 20546 20460 +3 20403 3196 17007 +3 22150 22155 15599 +3 20546 20545 20460 +3 13985 13615 8155 +3 4409 8125 1388 +3 15731 4409 1388 +3 9623 16156 22068 +3 16302 15876 11257 +3 20531 20613 20612 +3 20613 20694 20693 +3 22 23218 16458 +3 21391 22 16458 +3 5951 5488 15224 +3 6021 6247 2487 +3 29940 30602 27053 +3 22513 22612 22611 +3 35876 35440 35465 +3 27665 26576 29546 +3 26620 26619 26516 +3 30340 27667 28467 +3 28616 18010 30736 +3 31207 11420 11419 +3 28714 28584 28585 +3 24454 29293 30776 +3 3365 3498 3497 +3 3364 3365 3497 +3 3498 3628 3627 +3 3497 3498 3627 +3 3760 3759 3627 +3 3628 3760 3627 +3 3892 3891 3759 +3 3760 3892 3759 +3 4026 4025 3891 +3 3892 4026 3891 +3 4159 4158 4025 +3 4026 4159 4025 +3 4292 4291 4158 +3 4159 4292 4158 +3 4292 4426 4425 +3 4291 4292 4425 +3 4426 4560 4559 +3 4425 4426 4559 +3 4694 4693 4559 +3 4560 4694 4559 +3 4829 4828 4693 +3 4694 4829 4693 +3 4964 4963 4828 +3 4829 4964 4828 +3 5099 5098 4963 +3 4964 5099 4963 +3 5233 5232 5098 +3 5099 5233 5098 +3 5368 5367 5232 +3 5233 5368 5232 +3 5502 5501 5367 +3 5368 5502 5367 +3 5637 5636 5501 +3 5502 5637 5501 +3 5771 5770 5636 +3 5637 5771 5636 +3 5903 5902 5770 +3 5771 5903 5770 +3 6035 6034 5902 +3 5903 6035 5902 +3 6165 6164 6034 +3 6035 6165 6034 +3 6294 6293 6164 +3 6165 6294 6164 +3 6294 6421 6420 +3 6293 6294 6420 +3 20494 26573 24969 +3 4767 11143 11144 +3 3953 3952 3820 +3 5039 5038 3318 +3 6622 6621 6495 +3 22226 22227 22322 +3 3292 3291 3151 +3 1010 1128 1009 +3 1746 1745 1628 +3 650 768 767 +3 5300 5301 5435 +3 2515 2649 2514 +3 6116 2755 2215 +3 4219 4220 4352 +3 4086 4219 4085 +3 5969 6101 5968 +3 6228 6357 6356 +3 5965 5966 6097 +3 5973 5972 5840 +3 2882 2881 3441 +3 20693 20694 20775 +3 1817 1816 1699 +3 2733 2869 2732 +3 3008 3007 2868 +3 6479 6605 6478 +3 6352 6479 6478 +3 4218 4351 4350 +3 1956 2095 1957 +3 2329 2330 2463 +3 2330 2464 2463 +3 5032 5033 5167 +3 5168 5302 5301 +3 4361 4495 4494 +3 774 893 773 +3 765 884 883 +3 1120 1236 1235 +3 1244 1360 1243 +3 23489 17964 19806 +3 13763 13668 13570 +3 2873 2874 3012 +3 15277 13784 23218 +3 4899 4900 5034 +3 9345 2741 2606 +3 6730 6729 6604 +3 8744 2247 2118 +3 13823 13921 13822 +3 1014 1013 894 +3 6482 6608 6607 +3 3701 3700 2745 +3 2744 2339 2338 +3 6355 6482 6481 +3 2745 2744 2338 +3 2747 2205 2075 +3 26940 35669 35688 +3 3286 3425 3424 +3 4886 5021 5020 +3 916 1406 915 +3 12052 6015 1890 +3 29543 35925 27642 +3 11627 35911 12473 +3 35883 35934 35741 +3 31049 31048 30987 +3 9519 11071 13877 +3 13227 9519 13877 +3 15000 15123 15122 +3 23203 23301 23300 +3 15122 15123 15249 +3 14567 15764 14557 +3 15384 15385 15515 +3 15833 15549 16958 +3 22512 22513 22611 +3 16220 15062 15061 +3 5951 15793 2004 +3 23429 9400 20157 +3 14155 11121 11234 +3 14548 5951 2004 +3 23202 23203 23300 +3 15919 15920 16061 +3 2790 22956 15637 +3 78 1614 586 +3 22027 22123 22122 +3 32396 32395 32292 +3 498 2017 1541 +3 25730 1541 1658 +3 5878 5746 2017 +3 15781 15920 15780 +3 15920 16062 16061 +3 7410 7409 6780 +3 3216 3217 5330 +3 34550 34549 34412 +3 7192 30807 27839 +3 29354 29413 11404 +3 21607 29767 30156 +3 26576 27839 2946 +3 28428 35479 6876 +3 35703 35450 35499 +3 18799 28616 19702 +3 3227 3366 3365 +3 3226 3364 3225 +3 3366 3499 3498 +3 3365 3366 3498 +3 3499 3629 3628 +3 3498 3499 3628 +3 3629 3761 3760 +3 3628 3629 3760 +3 3761 3893 3892 +3 3760 3761 3892 +3 4027 4026 3892 +3 3893 4027 3892 +3 4160 4159 4026 +3 4027 4160 4026 +3 4293 4292 4159 +3 4160 4293 4159 +3 4427 4426 4292 +3 4293 4427 4292 +3 4561 4560 4426 +3 4427 4561 4426 +3 4561 4695 4694 +3 4560 4561 4694 +3 4830 4829 4694 +3 4695 4830 4694 +3 4965 4964 4829 +3 4830 4965 4829 +3 5100 5099 4964 +3 4965 5100 4964 +3 5234 5233 5099 +3 5100 5234 5099 +3 5369 5368 5233 +3 5234 5369 5233 +3 5503 5502 5368 +3 5369 5503 5368 +3 5638 5637 5502 +3 5503 5638 5502 +3 5772 5771 5637 +3 5638 5772 5637 +3 5904 5903 5771 +3 5772 5904 5771 +3 6036 6035 5903 +3 5904 6036 5903 +3 6166 6165 6035 +3 6036 6166 6035 +3 6295 6294 6165 +3 6166 6295 6165 +3 6422 6421 6294 +3 6295 6422 6294 +3 6422 6548 6547 +3 6421 6422 6547 +3 13728 13826 13727 +3 6672 6673 6799 +3 11071 12842 9977 +3 35652 35437 35753 +3 2191 2192 2323 +3 1004 1005 1122 +3 2461 2596 2460 +3 2192 2324 2323 +3 5961 6093 8149 +3 1954 1955 5319 +3 3975 2616 2617 +3 3711 3975 2617 +3 6231 6360 6359 +3 24519 29432 29422 +3 6098 6228 6227 +3 5162 5163 5296 +3 1365 1481 1480 +3 3686 3687 3818 +3 2881 3580 3301 +3 1476 1475 1359 +3 7040 316 315 +3 644 645 762 +3 5578 5713 5712 +3 6351 6352 6478 +3 6478 6604 6603 +3 2095 1152 2094 +3 537 536 422 +3 6483 6609 6608 +3 4897 4898 5032 +3 5033 5168 5167 +3 2323 2324 2457 +3 4360 4361 4494 +3 2192 2193 2324 +3 34936 34935 34806 +3 1127 1128 1243 +3 3448 3581 6116 +3 9628 216 2793 +3 7619 920 1039 +3 12243 12242 12159 +3 13436 13341 13437 +3 5185 1956 2757 +3 35737 35465 35677 +3 4373 4374 4507 +3 30487 29079 35779 +3 4508 4642 4507 +3 4642 4641 4507 +3 4642 4776 4641 +3 4776 4775 4641 +3 4776 4911 4775 +3 4911 4910 4775 +3 766 885 884 +3 1470 1469 1353 +3 35338 12652 35337 +3 647 648 765 +3 3568 3569 3698 +3 5567 5568 5702 +3 5830 8976 9411 +3 652 770 769 +3 420 534 533 +3 1586 1587 1703 +3 13877 11071 9977 +3 11918 12002 11917 +3 22052 22044 21123 +3 12842 6760 128 +3 1028 2528 2393 +3 15618 1028 15614 +3 246 5192 2711 +3 16191 246 2711 +3 15834 16220 15061 +3 3203 405 2249 +3 13786 11969 16533 +3 20365 21133 20363 +3 35550 27286 30072 +3 14501 14500 14449 +3 15643 15644 15780 +3 15920 15919 15780 +3 498 5878 2017 +3 5878 53 4 +3 5746 5878 4 +3 53 5826 5866 +3 4 53 5866 +3 5826 468 354 +3 5866 5826 354 +3 468 4232 4275 +3 14567 14557 828 +3 15644 15781 15780 +3 26942 19132 30556 +3 28982 29117 28981 +3 21141 20052 21580 +3 19235 21558 24245 +3 34413 34550 34412 +3 29902 29903 30033 +3 27839 30807 26426 +3 30807 30351 26426 +3 30736 18010 6914 +3 30479 30480 29082 +3 3228 3367 3366 +3 3226 33687 3227 +3 3367 3500 3499 +3 3366 3367 3499 +3 3500 3630 3629 +3 3499 3500 3629 +3 3630 3762 3761 +3 3629 3630 3761 +3 3762 3894 3893 +3 3761 3762 3893 +3 3894 4028 4027 +3 3893 3894 4027 +3 4161 4160 4027 +3 4028 4161 4027 +3 4294 4293 4160 +3 4161 4294 4160 +3 4428 4427 4293 +3 4294 4428 4293 +3 4562 4561 4427 +3 4428 4562 4427 +3 4696 4695 4561 +3 4562 4696 4561 +3 4696 4831 4830 +3 4695 4696 4830 +3 4966 4965 4830 +3 4831 4966 4830 +3 4966 5101 5100 +3 4965 4966 5100 +3 5235 5234 5100 +3 5101 5235 5100 +3 5370 5369 5234 +3 5235 5370 5234 +3 5370 5504 5503 +3 5369 5370 5503 +3 5639 5638 5503 +3 5504 5639 5503 +3 5773 5772 5638 +3 5639 5773 5638 +3 5905 5904 5772 +3 5773 5905 5772 +3 6037 6036 5904 +3 5905 6037 5904 +3 6167 6166 6036 +3 6037 6167 6036 +3 6296 6295 6166 +3 6167 6296 6166 +3 6423 6422 6295 +3 6296 6423 6295 +3 6549 6548 6422 +3 6423 6549 6422 +3 6549 6674 6673 +3 6548 6549 6673 +3 6674 6801 6800 +3 6673 6674 6800 +3 6091 6221 6220 +3 35731 11724 12841 +3 1240 1239 1123 +3 12679 12768 12767 +3 5837 5836 5702 +3 1124 1240 1123 +3 4900 5035 5034 +3 24032 24031 30624 +3 543 542 428 +3 35607 35778 35702 +3 5029 5164 5163 +3 3152 3292 3151 +3 4484 4485 4618 +3 767 886 885 +3 5721 5854 1952 +3 6736 6737 934 +3 2603 2602 2467 +3 9977 12842 128 +3 5713 5847 5846 +3 5577 5578 5712 +3 2226 4250 4130 +3 6760 6389 4515 +3 6482 6483 6608 +3 4221 4354 4220 +3 4762 4763 4897 +3 4898 5033 5032 +3 4227 10636 4228 +3 11822 11821 11737 +3 2193 2325 2324 +3 1002 1003 1120 +3 12160 12243 12159 +3 1360 1359 1243 +3 18901 20778 17815 +3 11997 12078 11996 +3 1984 2109 1983 +3 5707 5706 5571 +3 885 1004 1003 +3 4374 4508 4507 +3 2108 2237 2236 +3 4389 4256 9516 +3 902 217 4919 +3 1983 1982 1862 +3 6103 6102 5970 +3 35445 35534 35935 +3 13613 448 13713 +3 2226 2097 4250 +3 764 763 645 +3 11587 11586 11519 +3 6223 6352 6351 +3 5971 6103 5970 +3 3007 3148 3006 +3 3436 3297 9923 +3 6496 6622 6495 +3 11521 11520 11457 +3 795 9989 7667 +3 1282 1398 1397 +3 128 6760 4515 +3 7041 7042 317 +3 20315 21124 20310 +3 354 468 4275 +3 2528 5000 16806 +3 1738 1028 2393 +3 5728 2662 2527 +3 2527 2662 15834 +3 2249 5728 2527 +3 2662 16220 15834 +3 35634 35462 35368 +3 14962 15082 16302 +3 16961 17127 17126 +3 11954 13280 35857 +3 4411 4279 14942 +3 4002 947 3868 +3 4232 15243 15235 +3 4275 4232 15235 +3 15243 16866 16859 +3 15235 15243 16859 +3 16866 14816 14806 +3 4143 14802 15180 +3 16859 16866 14806 +3 14816 1446 3797 +3 14806 14816 3797 +3 1446 15752 14940 +3 17310 29698 28476 +3 18576 18673 1443 +3 26711 26712 26823 +3 28982 28981 28848 +3 30498 27374 30612 +3 30488 21643 11384 +3 30350 29692 29001 +3 25350 25351 24697 +3 27778 27261 27493 +3 27843 27493 30351 +3 3228 3227 14068 +3 28748 28616 30736 +3 3229 3368 3367 +3 3228 3229 3367 +3 3368 3501 3500 +3 3367 3368 3500 +3 3501 3631 3630 +3 3500 3501 3630 +3 3631 3763 3762 +3 3630 3631 3762 +3 3763 3895 3894 +3 3762 3763 3894 +3 3895 4029 4028 +3 3894 3895 4028 +3 4029 4162 4161 +3 4028 4029 4161 +3 4162 4295 4294 +3 4161 4162 4294 +3 4429 4428 4294 +3 4295 4429 4294 +3 4563 4562 4428 +3 4429 4563 4428 +3 4697 4696 4562 +3 4563 4697 4562 +3 4697 4832 4831 +3 4696 4697 4831 +3 4967 4966 4831 +3 4832 4967 4831 +3 5102 5101 4966 +3 4967 5102 4966 +3 5236 5235 5101 +3 5102 5236 5101 +3 5236 5371 5370 +3 5235 5236 5370 +3 5505 5504 5370 +3 5371 5505 5370 +3 5505 5640 5639 +3 5504 5505 5639 +3 5774 5773 5639 +3 5640 5774 5639 +3 5906 5905 5773 +3 5774 5906 5773 +3 6038 6037 5905 +3 5906 6038 5905 +3 6168 6167 6037 +3 6038 6168 6037 +3 6297 6296 6167 +3 6168 6297 6167 +3 6424 6423 6296 +3 6297 6424 6296 +3 6550 6549 6423 +3 6424 6550 6423 +3 6550 6675 6674 +3 6549 6550 6674 +3 6675 6802 6801 +3 6674 6675 6801 +3 6267 6263 6801 +3 6802 6267 6801 +3 2322 2323 2456 +3 35545 35841 11777 +3 6227 6228 6356 +3 4893 4894 5028 +3 5163 5297 5296 +3 4894 5029 5028 +3 3431 3564 3563 +3 6361 6489 6488 +3 35705 35854 35712 +3 5166 5167 5300 +3 3956 4090 3955 +3 5704 5838 5703 +3 1831 2098 2227 +3 3427 3560 3559 +3 5875 1622 1999 +3 1235 1351 1350 +3 5979 6111 6110 +3 5712 5713 5846 +3 2109 2108 1983 +3 1954 2226 1955 +3 4354 4488 4487 +3 9016 2204 8909 +3 4494 4495 4628 +3 4763 4898 4897 +3 3145 3144 3003 +3 4495 4629 4628 +3 2599 2598 2463 +3 3004 3145 3003 +3 2205 2338 2490 +3 2755 2216 2215 +3 6389 37 2792 +3 1941 1942 2066 +3 765 766 884 +3 1118 1119 1234 +3 13924 13923 13825 +3 1004 1122 1121 +3 6612 6611 6485 +3 12415 12504 12414 +3 768 887 886 +3 1831 2086 2098 +3 5703 5837 5702 +3 767 768 886 +3 658 657 542 +3 5837 5969 5836 +3 2871 2870 2734 +3 11455 31950 31949 +3 5436 5570 5569 +3 3567 3568 3697 +3 6350 6351 6477 +3 1703 1704 1820 +3 2617 2616 2219 +3 4358 4492 4491 +3 2732 2731 2596 +3 13883 13981 12123 +3 4515 6389 2792 +3 1632 1631 1515 +3 115 7035 114 +3 739 859 18112 +3 5000 15117 15116 +3 2393 2528 16806 +3 589 590 15963 +3 590 15825 15963 +3 1567 3325 5467 +3 169 15046 5272 +3 19372 19265 19266 +3 19372 19266 2416 +3 1421 1305 16390 +3 17809 592 17905 +3 14942 14981 1188 +3 15764 4279 15761 +3 3797 1446 14940 +3 15752 2708 3885 +3 14940 15752 3885 +3 2708 17174 5407 +3 4279 14981 14942 +3 14802 4016 4017 +3 3885 2708 5407 +3 4017 4016 14753 +3 17174 16537 16536 +3 6862 28336 26480 +3 35399 26803 35456 +3 13562 19684 19683 +3 28849 28982 28848 +3 5407 17174 16536 +3 30822 27267 27082 +3 19683 19684 4666 +3 28469 29121 27667 +3 26814 26815 26929 +3 24912 13296 25938 +3 17252 28605 19671 +3 29813 28736 19233 +3 27413 26909 18093 +3 30744 26942 18617 +3 27843 27778 27493 +3 3090 3230 3229 +3 14068 3089 3229 +3 3230 3369 3368 +3 3229 3230 3368 +3 3369 3502 3501 +3 3368 3369 3501 +3 3502 3632 3631 +3 3501 3502 3631 +3 3632 3764 3763 +3 3631 3632 3763 +3 3764 3896 3895 +3 3763 3764 3895 +3 3896 4030 4029 +3 3895 3896 4029 +3 4030 4163 4162 +3 4029 4030 4162 +3 4163 4296 4295 +3 4162 4163 4295 +3 4296 4430 4429 +3 4295 4296 4429 +3 4564 4563 4429 +3 4430 4564 4429 +3 4564 4698 4697 +3 4563 4564 4697 +3 4698 4833 4832 +3 4697 4698 4832 +3 4833 4968 4967 +3 4832 4833 4967 +3 4968 5103 5102 +3 4967 4968 5102 +3 5103 5237 5236 +3 5102 5103 5236 +3 5237 5372 5371 +3 5236 5237 5371 +3 5506 5505 5371 +3 5372 5506 5371 +3 5506 5641 5640 +3 5505 5506 5640 +3 5775 5774 5640 +3 5641 5775 5640 +3 5907 5906 5774 +3 5775 5907 5774 +3 6039 6038 5906 +3 5907 6039 5906 +3 6169 6168 6038 +3 6039 6169 6038 +3 6298 6297 6168 +3 6169 6298 6168 +3 6425 6424 6297 +3 6298 6425 6297 +3 6551 6550 6424 +3 6425 6551 6424 +3 6551 6676 6675 +3 6550 6551 6675 +3 6676 6803 6802 +3 6675 6676 6802 +3 6386 6267 6802 +3 6803 6386 6802 +3 35436 35937 35592 +3 7234 408 7233 +3 7243 417 7242 +3 6605 6730 6604 +3 2737 2738 2873 +3 770 889 888 +3 6099 6100 6229 +3 3422 3421 3282 +3 5569 5704 5703 +3 6230 6359 6358 +3 3960 3828 10394 +3 2619 2618 2217 +3 5025 5160 5159 +3 2066 2195 2194 +3 12731 35491 35700 +3 2867 2866 2730 +3 6241 6370 6369 +3 5978 5979 6110 +3 3952 3951 3819 +3 35860 35717 35868 +3 19680 2408 28245 +3 35465 35426 35472 +3 4085 4218 4217 +3 4629 4763 4762 +3 423 537 422 +3 4084 4085 4217 +3 2747 2745 2205 +3 2198 2330 2329 +3 1136 13877 9858 +3 6248 2339 6119 +3 884 885 1003 +3 6101 6231 6230 +3 1629 1746 1628 +3 1122 1238 1237 +3 15876 15210 15737 +3 8346 35623 9538 +3 1040 1158 1039 +3 3009 3008 2869 +3 5030 5165 5164 +3 5568 5703 5702 +3 1006 1005 886 +3 887 1006 886 +3 5841 5973 5840 +3 6359 6486 6358 +3 2734 2870 2733 +3 3309 3168 5721 +3 2062 2191 2190 +3 2457 2592 2591 +3 6240 6369 6368 +3 6369 6496 6368 +3 2616 2220 2219 +3 2117 2116 1992 +3 1863 1983 1862 +3 4240 4373 4372 +3 10578 26251 25939 +3 3975 8986 3843 +3 2792 37 13332 +3 21106 21107 21194 +3 28317 28437 28436 +3 1516 1632 1515 +3 1749 1748 1631 +3 15117 16792 16780 +3 23009 23008 22909 +3 35652 35815 35437 +3 27896 29687 29221 +3 29627 29626 29488 +3 35656 35745 35651 +3 478 477 363 +3 364 478 363 +3 593 592 477 +3 478 593 477 +3 4283 4284 3185 +3 831 17997 711 +3 16537 15559 15558 +3 16536 16537 15558 +3 15559 15098 14717 +3 15558 15559 14717 +3 14981 4143 1188 +3 1299 3303 3302 +3 1188 4143 15180 +3 35826 35479 35475 +3 15098 15819 15820 +3 17127 3713 4117 +3 14717 15098 15820 +3 15819 16185 14914 +3 15820 15819 14914 +3 16185 14747 5066 +3 14914 16185 5066 +3 14747 14410 16476 +3 28360 28362 30082 +3 28086 28087 28203 +3 35385 9113 35822 +3 30094 19905 20175 +3 23361 22424 23458 +3 27257 27139 19734 +3 21560 17285 19130 +3 30340 28469 27667 +3 28251 27413 18093 +3 24662 22942 23491 +3 27778 30744 28486 +3 26909 29692 30350 +3 3089 3090 3229 +3 28486 30744 18617 +3 3231 3230 3090 +3 3091 3231 3090 +3 3370 3369 3230 +3 3231 3370 3230 +3 3370 3503 3502 +3 3369 3370 3502 +3 3503 3633 3632 +3 3502 3503 3632 +3 3633 3765 3764 +3 3632 3633 3764 +3 3765 3897 3896 +3 3764 3765 3896 +3 3897 4031 4030 +3 3896 3897 4030 +3 4031 4164 4163 +3 4030 4031 4163 +3 4164 4297 4296 +3 4163 4164 4296 +3 4297 4431 4430 +3 4296 4297 4430 +3 4431 4565 4564 +3 4430 4431 4564 +3 4565 4699 4698 +3 4564 4565 4698 +3 4699 4834 4833 +3 4698 4699 4833 +3 4834 4969 4968 +3 4833 4834 4968 +3 4969 5104 5103 +3 4968 4969 5103 +3 5104 5238 5237 +3 5103 5104 5237 +3 5238 5373 5372 +3 5237 5238 5372 +3 5373 5507 5506 +3 5372 5373 5506 +3 5507 5642 5641 +3 5506 5507 5641 +3 5776 5775 5641 +3 5642 5776 5641 +3 5776 5908 5907 +3 5775 5776 5907 +3 5908 6040 6039 +3 5907 5908 6039 +3 6170 6169 6039 +3 6040 6170 6039 +3 6299 6298 6169 +3 6170 6299 6169 +3 6299 6426 6425 +3 6298 6299 6425 +3 6552 6551 6425 +3 6426 6552 6425 +3 6677 6676 6551 +3 6552 6677 6551 +3 6677 6804 6803 +3 6676 6677 6803 +3 6804 6387 6386 +3 6803 6804 6386 +3 3150 3149 3008 +3 6391 6387 6805 +3 1373 3574 3024 +3 3009 3150 3008 +3 951 1373 1490 +3 934 951 1490 +3 9934 9935 10051 +3 13722 13820 13819 +3 3288 3287 3147 +3 4889 4890 5024 +3 1821 1941 1940 +3 13924 13925 14022 +3 14023 14121 14120 +3 3425 3558 3557 +3 2334 2468 2467 +3 4526 1027 2093 +3 6623 6622 6496 +3 6240 6241 6369 +3 2596 2595 2460 +3 5024 5159 5158 +3 2461 2460 2326 +3 4889 5024 5023 +3 6734 6733 6608 +3 20432 24606 330 +3 3701 2745 2747 +3 537 652 651 +3 12761 12853 12852 +3 3571 3701 2747 +3 1238 1354 1353 +3 3149 3148 3007 +3 3953 3954 4087 +3 1003 1004 1121 +3 6109 6110 6239 +3 6622 6747 6621 +3 2345 2353 2352 +3 2456 2457 2591 +3 2352 2353 5324 +3 5035 5170 5169 +3 30028 22580 29897 +3 5190 2353 9625 +3 28080 28197 28079 +3 26493 26494 27414 +3 2237 2238 2369 +3 12328 12327 12242 +3 1350 1351 1466 +3 4485 4619 4618 +3 6092 6222 6221 +3 5023 5158 5157 +3 3569 10158 3699 +3 6239 6240 6368 +3 3142 3143 3282 +3 5034 5035 5169 +3 681 800 7392 +3 25064 25110 23719 +3 28198 28315 28197 +3 28316 28317 28436 +3 5864 1976 4129 +3 330 5864 4129 +3 1976 3475 3476 +3 4129 1976 3476 +3 3475 2478 4649 +3 1632 1749 1631 +3 1866 1865 1748 +3 16792 14456 14436 +3 4239 4240 4372 +3 255 254 149 +3 150 255 149 +3 365 364 254 +3 255 365 254 +3 479 478 364 +3 365 479 364 +3 594 593 478 +3 479 594 478 +3 712 711 593 +3 594 712 593 +3 5066 14747 16476 +3 712 831 711 +3 17620 254 364 +3 1212 1213 16476 +3 35611 17255 29126 +3 14410 1212 16476 +3 22 15277 23218 +3 35523 35445 35935 +3 17126 17127 4117 +3 16389 1421 16390 +3 5330 6128 3203 +3 4016 14764 14753 +3 6021 14807 15967 +3 15131 15258 15257 +3 29553 35733 35428 +3 35502 35394 35589 +3 26606 26711 26710 +3 7291 21464 21379 +3 31272 11418 11417 +3 28850 15877 30486 +3 30744 28244 26942 +3 27167 17310 28476 +3 18093 26909 30350 +3 19671 21560 19130 +3 30807 27843 30351 +3 29692 29000 29001 +3 32397 32396 32293 +3 27261 27778 28486 +3 34203 2950 3091 +3 34935 35064 34934 +3 3232 3231 3091 +3 3092 3232 3091 +3 3371 3370 3231 +3 3232 3371 3231 +3 3504 3503 3370 +3 3371 3504 3370 +3 3504 3634 3633 +3 3503 3504 3633 +3 3634 3766 3765 +3 3633 3634 3765 +3 3766 3898 3897 +3 3765 3766 3897 +3 3898 4032 4031 +3 3897 3898 4031 +3 4032 4165 4164 +3 4031 4032 4164 +3 4298 4297 4164 +3 4165 4298 4164 +3 4298 4432 4431 +3 4297 4298 4431 +3 4432 4566 4565 +3 4431 4432 4565 +3 4566 4700 4699 +3 4565 4566 4699 +3 4835 4834 4699 +3 4700 4835 4699 +3 4835 4970 4969 +3 4834 4835 4969 +3 4970 5105 5104 +3 4969 4970 5104 +3 5105 5239 5238 +3 5104 5105 5238 +3 5239 5374 5373 +3 5238 5239 5373 +3 5374 5508 5507 +3 5373 5374 5507 +3 5508 5643 5642 +3 5507 5508 5642 +3 5643 5777 5776 +3 5642 5643 5776 +3 5777 5909 5908 +3 5776 5777 5908 +3 5909 6041 6040 +3 5908 5909 6040 +3 6041 6171 6170 +3 6040 6041 6170 +3 6300 6299 6170 +3 6171 6300 6170 +3 6427 6426 6299 +3 6300 6427 6299 +3 6427 6553 6552 +3 6426 6427 6552 +3 6553 6678 6677 +3 6552 6553 6677 +3 6678 6805 6804 +3 6677 6678 6804 +3 11026 6387 6391 +3 6804 6805 6387 +3 1706 1707 1823 +3 1701 1818 1700 +3 11135 12929 12629 +3 1707 1706 1589 +3 654 772 771 +3 13918 13917 13819 +3 2201 2202 2333 +3 653 654 771 +3 5977 6109 5976 +3 1937 1936 1816 +3 2596 2731 2595 +3 5173 5307 5306 +3 4216 4217 4349 +3 1352 1468 1351 +3 6370 6497 6496 +3 1401 432 3570 +3 4754 4889 4888 +3 6497 6623 6496 +3 3557 3558 3687 +3 3687 3688 3819 +3 330 4129 3451 +3 4888 4889 5023 +3 5433 5432 5298 +3 6356 6483 6482 +3 3865 3701 3571 +3 2745 2338 2205 +3 3700 2744 2745 +3 4884 4885 5019 +3 1354 1470 1353 +3 1237 1238 1353 +3 2876 2875 2739 +3 1863 1862 1745 +3 4487 4488 4621 +3 1590 1707 1589 +3 3571 2748 3962 +3 1241 1357 1240 +3 5438 5439 5572 +3 5708 5707 5572 +3 1615 35407 35578 +3 2513 2648 2647 +3 2462 2597 2461 +3 1355 1471 1354 +3 24988 1022 1529 +3 5582 5583 5717 +3 5448 5449 5582 +3 5313 5314 5448 +3 1587 1586 1470 +3 5314 5449 5448 +3 2117 2118 2246 +3 5449 5583 5582 +3 12618 12708 12617 +3 5838 5837 5703 +3 5044 5045 5179 +3 28437 28559 28558 +3 3476 3475 4649 +3 20446 20531 20530 +3 35384 35652 35753 +3 13413 9641 7932 +3 31048 31049 31110 +3 22914 22913 22814 +3 12582 12672 12671 +3 15607 23023 13784 +3 13213 13212 13300 +3 1749 1866 1748 +3 1986 1985 1865 +3 5045 5180 5179 +3 5179 5180 5313 +3 256 255 150 +3 149 254 148 +3 366 365 255 +3 256 366 255 +3 366 480 479 +3 365 366 479 +3 11653 11652 11577 +3 32044 32141 32043 +3 35378 35403 35749 +3 35397 35817 35380 +3 4649 9281 15186 +3 1866 1986 1865 +3 15783 15784 15922 +3 15923 16065 16064 +3 3324 16036 6021 +3 14807 15972 15967 +3 16034 15295 3324 +3 16036 14807 6021 +3 5484 15295 16034 +3 16177 5484 16034 +3 1422 16665 16177 +3 15295 16036 3324 +3 17903 17904 17996 +3 16787 3124 5487 +3 4421 4420 4287 +3 29117 29254 29116 +3 26710 26711 26822 +3 13487 28244 30744 +3 29391 29390 29253 +3 29000 28605 17252 +3 25104 25105 30508 +3 27316 17309 27729 +3 29136 29137 29148 +3 18010 30753 6914 +3 29146 28874 29545 +3 26673 26785 26784 +3 35769 35402 35777 +3 26785 24464 26784 +3 26672 26673 26784 +3 3093 3233 3232 +3 33825 33824 28585 +3 3372 3371 3232 +3 3233 3372 3232 +3 3505 3504 3371 +3 3372 3505 3371 +3 3635 3634 3504 +3 3505 3635 3504 +3 3767 3766 3634 +3 3635 3767 3634 +3 3767 3899 3898 +3 3766 3767 3898 +3 3899 4033 4032 +3 3898 3899 4032 +3 4033 4166 4165 +3 4032 4033 4165 +3 4166 4299 4298 +3 4165 4166 4298 +3 4433 4432 4298 +3 4299 4433 4298 +3 4567 4566 4432 +3 4433 4567 4432 +3 4701 4700 4566 +3 4567 4701 4566 +3 4836 4835 4700 +3 4701 4836 4700 +3 4836 4971 4970 +3 4835 4836 4970 +3 4971 5106 5105 +3 4970 4971 5105 +3 5106 5240 5239 +3 5105 5106 5239 +3 5240 5375 5374 +3 5239 5240 5374 +3 5375 5509 5508 +3 5374 5375 5508 +3 5509 5644 5643 +3 5508 5509 5643 +3 5644 5778 5777 +3 5643 5644 5777 +3 5778 5910 5909 +3 5777 5778 5909 +3 5910 6042 6041 +3 5909 5910 6041 +3 6042 6172 6171 +3 6041 6042 6171 +3 6172 6301 6300 +3 6171 6172 6300 +3 6428 6427 6300 +3 6301 6428 6300 +3 6554 6553 6427 +3 6428 6554 6427 +3 6554 6679 6678 +3 6553 6554 6678 +3 6679 6806 6805 +3 6678 6679 6805 +3 6395 6807 6512 +3 6805 6806 6391 +3 1938 1937 1817 +3 1236 1352 1351 +3 6605 6604 6478 +3 1119 1120 1235 +3 3423 3422 3283 +3 3143 3144 3283 +3 5309 5444 5443 +3 10961 5308 5307 +3 5444 5578 5577 +3 5443 5444 5577 +3 5847 5979 5978 +3 5846 5847 5978 +3 6111 6241 6240 +3 6110 6111 6240 +3 3685 3817 3684 +3 6369 6370 6496 +3 17317 27406 28336 +3 6609 6610 6734 +3 29222 29359 22096 +3 1164 1165 1280 +3 1597 1596 1480 +3 450 784 449 +3 1157 1158 7849 +3 19655 19467 2402 +3 4263 3700 3701 +3 190 3865 3571 +3 5046 5045 4910 +3 3865 4263 3701 +3 2108 2109 2237 +3 1121 1122 1237 +3 2871 3010 2870 +3 8951 2370 2371 +3 3015 2876 9575 +3 5978 6110 6109 +3 6373 6374 6500 +3 3155 3156 3295 +3 11278 4909 228 +3 6728 6727 6602 +3 4640 4774 11151 +3 4910 5045 5044 +3 2111 2110 1985 +3 1986 2111 1985 +3 2240 2239 2110 +3 2111 2240 2110 +3 2372 2371 2239 +3 2240 2372 2239 +3 2506 2505 2371 +3 2372 2506 2371 +3 4775 4910 4909 +3 2641 2640 2505 +3 128 4515 193 +3 9166 2639 2640 +3 2506 2641 2505 +3 4507 4641 4640 +3 2641 2776 2775 +3 13213 12465 13212 +3 42 671 18804 +3 35698 35718 35624 +3 23595 24536 25941 +3 1855 38 13333 +3 3042 13408 11719 +3 11911 11995 11910 +3 12076 12075 11994 +3 2640 2641 2775 +3 693 4636 1974 +3 5851 10963 5982 +3 4217 4350 4349 +3 28436 28437 28558 +3 6100 6101 6230 +3 257 366 256 +3 151 7313 256 +3 367 481 480 +3 366 367 480 +3 35530 35384 35373 +3 20586 14911 20503 +3 5180 5314 5313 +3 15492 5424 5205 +3 714 833 832 +3 2912 2776 2442 +3 28559 28688 28687 +3 5480 249 16631 +3 15352 14834 16986 +3 1897 16399 14724 +3 15896 14508 140 +3 14387 14404 14386 +3 23580 24140 24829 +3 1874 15932 16072 +3 14670 14776 14669 +3 14889 15009 14888 +3 1695 1811 1694 +3 2844 14817 15934 +3 17462 17383 17385 +3 17463 17462 17385 +3 27778 13487 30744 +3 29254 29391 29253 +3 34281 34280 34142 +3 28244 19132 26942 +3 31545 31632 31544 +3 25499 27518 28426 +3 17309 28241 28240 +3 27839 26426 2946 +3 26595 28878 30803 +3 28240 28241 21841 +3 30772 26595 30803 +3 3751 21651 28878 +3 30071 30075 19909 +3 35873 35405 35369 +3 34329 3094 3093 +3 3232 3092 3093 +3 3234 3373 3372 +3 3233 3234 3372 +3 3506 3505 3372 +3 3373 3506 3372 +3 3636 3635 3505 +3 3506 3636 3505 +3 3768 3767 3635 +3 3636 3768 3635 +3 3900 3899 3767 +3 3768 3900 3767 +3 4034 4033 3899 +3 3900 4034 3899 +3 4167 4166 4033 +3 4034 4167 4033 +3 4167 4300 4299 +3 4166 4167 4299 +3 4434 4433 4299 +3 4300 4434 4299 +3 4568 4567 4433 +3 4434 4568 4433 +3 4702 4701 4567 +3 4568 4702 4567 +3 4702 4837 4836 +3 4701 4702 4836 +3 4837 4972 4971 +3 4836 4837 4971 +3 4972 5107 5106 +3 4971 4972 5106 +3 5107 5241 5240 +3 5106 5107 5240 +3 5241 5376 5375 +3 5240 5241 5375 +3 5376 5510 5509 +3 5375 5376 5509 +3 5510 5645 5644 +3 5509 5510 5644 +3 5645 5779 5778 +3 5644 5645 5778 +3 5779 5911 5910 +3 5778 5779 5910 +3 5911 6043 6042 +3 5910 5911 6042 +3 6043 6173 6172 +3 6042 6043 6172 +3 6173 6302 6301 +3 6172 6173 6301 +3 6302 6429 6428 +3 6301 6302 6428 +3 6429 6555 6554 +3 6428 6429 6554 +3 6555 6680 6679 +3 6554 6555 6679 +3 6680 6807 6806 +3 6679 6680 6806 +3 9769 11280 6395 +3 6806 6807 6395 +3 884 1003 1002 +3 4348 4349 4482 +3 764 765 883 +3 883 884 1002 +3 3145 3285 3284 +3 2325 2459 2458 +3 1165 1281 1280 +3 4765 4900 4899 +3 3555 3554 3421 +3 3288 3427 3426 +3 6093 6223 6222 +3 657 775 656 +3 6090 6091 6220 +3 4617 4751 4750 +3 3580 3710 3704 +3 2865 3004 2864 +3 12211 12296 40 +3 2757 1957 2756 +3 13680 14079 13981 +3 5291 5290 5157 +3 12321 12407 12320 +3 1128 1244 1243 +3 2003 4263 3865 +3 2061 2062 2190 +3 5181 5180 5045 +3 2002 2003 3865 +3 4228 10761 4361 +3 4911 5046 4910 +3 1007 1125 1006 +3 2459 2594 2593 +3 3015 9691 3156 +3 2616 3975 3843 +3 5981 5982 6113 +3 5705 5704 5569 +3 1701 1700 1583 +3 6501 6627 6626 +3 13718 13717 15813 +3 9858 9977 7671 +3 2845 2912 5410 +3 5974 5973 5841 +3 35353 35456 35400 +3 6121 2098 2086 +3 5842 5974 5841 +3 1589 1706 1588 +3 1943 2068 2067 +3 2463 2598 2462 +3 4913 5048 5047 +3 2328 2327 2195 +3 13265 13264 13169 +3 11662 11661 11586 +3 13170 13265 13169 +3 13361 13360 13264 +3 12281 12373 12641 +3 15564 4364 4245 +3 5735 1739 3993 +3 12031 12131 12936 +3 15884 11206 12716 +3 5309 5310 5444 +3 882 883 1001 +3 4084 4217 4083 +3 1468 1584 1467 +3 6239 6238 6108 +3 312 422 421 +3 12493 12494 12583 +3 6102 6232 6231 +3 7427 7541 368 +3 367 368 481 +3 6351 6478 6477 +3 27149 35540 35486 +3 35749 35397 35380 +3 4909 4910 5044 +3 715 834 833 +3 714 715 833 +3 953 952 833 +3 834 953 833 +3 2612 16513 15933 +3 4636 2841 1974 +3 16796 16805 14474 +3 5752 5753 1611 +3 2275 2144 2276 +3 34473 13307 3625 +3 29546 27527 21375 +3 17313 28477 19036 +3 30824 29546 21375 +3 26576 2946 27527 +3 30155 29631 21841 +3 28616 28748 19702 +3 27873 18799 7068 +3 28241 29150 21841 +3 30753 28249 29893 +3 34552 34551 34414 +3 26694 26695 26806 +3 27515 27516 27633 +3 6543 25152 1167 +3 31591 31590 31503 +3 3235 3374 3373 +3 3234 3235 3373 +3 3374 3507 3506 +3 3373 3374 3506 +3 3507 3637 3636 +3 3506 3507 3636 +3 3769 3768 3636 +3 3637 3769 3636 +3 3901 3900 3768 +3 3769 3901 3768 +3 4035 4034 3900 +3 3901 4035 3900 +3 4168 4167 4034 +3 4035 4168 4034 +3 4168 4301 4300 +3 4167 4168 4300 +3 4435 4434 4300 +3 4301 4435 4300 +3 4569 4568 4434 +3 4435 4569 4434 +3 4703 4702 4568 +3 4569 4703 4568 +3 4703 4838 4837 +3 4702 4703 4837 +3 4838 4973 4972 +3 4837 4838 4972 +3 4973 5108 5107 +3 4972 4973 5107 +3 5242 5241 5107 +3 5108 5242 5107 +3 5377 5376 5241 +3 5242 5377 5241 +3 5511 5510 5376 +3 5377 5511 5376 +3 5646 5645 5510 +3 5511 5646 5510 +3 5646 5780 5779 +3 5645 5646 5779 +3 5780 5912 5911 +3 5779 5780 5911 +3 5912 6044 6043 +3 5911 5912 6043 +3 6044 6174 6173 +3 6043 6044 6173 +3 6174 6303 6302 +3 6173 6174 6302 +3 6303 6430 6429 +3 6302 6303 6429 +3 6430 6556 6555 +3 6429 6430 6555 +3 6681 6680 6555 +3 6556 6681 6555 +3 6808 6807 6680 +3 6681 6808 6680 +3 6808 6513 6512 +3 6807 6808 6512 +3 312 313 422 +3 28558 28559 28687 +3 13719 13720 13817 +3 3581 2755 6116 +3 1946 2071 1945 +3 2871 2872 3010 +3 5164 5165 5298 +3 27847 27963 27846 +3 5844 5845 5976 +3 6109 6108 5976 +3 1010 1009 890 +3 5991 1484 1485 +3 5445 5310 5311 +3 2069 2198 2068 +3 6749 2003 2002 +3 13286 12049 8339 +3 6624 6749 6748 +3 6748 6749 2002 +3 6111 6112 6241 +3 6623 6624 6748 +3 5979 5980 6111 +3 6242 6371 6370 +3 5315 5450 5449 +3 6112 6242 6241 +3 6629 6630 6754 +3 5046 5181 5045 +3 1357 1473 1356 +3 6384 13987 11004 +3 6232 6361 6360 +3 2465 2600 2464 +3 26948 11592 11525 +3 5570 5705 5569 +3 6113 6243 6242 +3 6113 6114 6243 +3 17667 17269 26521 +3 5714 5715 5848 +3 34284 34422 34283 +3 535 650 649 +3 534 535 649 +3 11992 12073 11991 +3 4091 4090 3956 +3 3825 3824 3692 +3 3957 3956 3824 +3 3693 3692 3562 +3 2197 2329 2328 +3 1706 1823 1822 +3 2067 2068 2196 +3 5980 5981 6112 +3 2196 2197 2328 +3 13619 12726 12571 +3 3176 13612 2879 +3 35749 35380 35938 +3 10383 13300 13019 +3 12548 12753 12458 +3 20387 20471 20386 +3 18178 18930 19911 +3 12393 12372 6256 +3 12820 13198 3340 +3 12131 13602 12936 +3 27133 27134 27252 +3 3151 3291 3290 +3 1125 1241 1124 +3 6355 6226 6227 +3 5981 6113 6112 +3 2480 2352 2220 +3 6495 6494 6367 +3 4357 4491 4490 +3 4625 4759 4758 +3 1003 1121 1120 +3 2609 22440 20432 +3 597 715 7771 +3 7545 6378 6377 +3 598 716 715 +3 597 598 715 +3 716 835 834 +3 715 716 834 +3 2075 2205 2356 +3 8006 836 955 +3 953 834 8006 +3 14662 14768 14661 +3 14768 14881 14880 +3 14767 14768 14880 +3 14881 15001 15000 +3 14880 14881 15000 +3 15001 15124 15123 +3 15000 15001 15123 +3 15251 15250 15123 +3 15124 15251 15123 +3 15277 15607 13784 +3 3583 11385 3928 +3 22337 22338 23023 +3 21282 13615 13985 +3 15607 22337 23023 +3 14652 17114 16948 +3 1891 9435 11101 +3 22337 15192 23229 +3 14474 14652 16948 +3 2276 2145 2277 +3 33997 34133 33996 +3 26595 3751 28878 +3 29546 26576 27527 +3 29077 30668 30804 +3 26415 30804 21651 +3 22646 29414 23238 +3 16777 14374 11232 +3 6902 25952 7081 +3 27729 17309 28240 +3 26589 24723 26694 +3 35385 13474 8760 +3 19569 30634 24229 +3 25361 25322 28498 +3 31898 31897 31791 +3 19128 27869 29277 +3 3236 3375 3374 +3 3235 3236 3374 +3 3375 3508 3507 +3 3374 3375 3507 +3 3508 3638 3637 +3 3507 3508 3637 +3 3770 3769 3637 +3 3638 3770 3637 +3 3902 3901 3769 +3 3770 3902 3769 +3 4036 4035 3901 +3 3902 4036 3901 +3 4169 4168 4035 +3 4036 4169 4035 +3 4169 4302 4301 +3 4168 4169 4301 +3 4436 4435 4301 +3 4302 4436 4301 +3 4570 4569 4435 +3 4436 4570 4435 +3 4704 4703 4569 +3 4570 4704 4569 +3 4704 4839 4838 +3 4703 4704 4838 +3 4974 4973 4838 +3 4839 4974 4838 +3 4974 5109 5108 +3 4973 4974 5108 +3 5243 5242 5108 +3 5109 5243 5108 +3 5378 5377 5242 +3 5243 5378 5242 +3 5512 5511 5377 +3 5378 5512 5377 +3 5647 5646 5511 +3 5512 5647 5511 +3 5781 5780 5646 +3 5647 5781 5646 +3 5913 5912 5780 +3 5781 5913 5780 +3 5913 6045 6044 +3 5912 5913 6044 +3 6045 6175 6174 +3 6044 6045 6174 +3 6175 6304 6303 +3 6174 6175 6303 +3 6304 6431 6430 +3 6303 6304 6430 +3 6431 6557 6556 +3 6430 6431 6556 +3 6557 6682 6681 +3 6556 6557 6681 +3 6682 6809 6808 +3 6681 6682 6808 +3 6809 6514 6513 +3 6808 6809 6513 +3 8116 952 19121 +3 35826 35475 35513 +3 3001 3002 3142 +3 2071 2070 1945 +3 2603 2738 2737 +3 2333 2334 2467 +3 13286 10826 13602 +3 539 654 653 +3 319 7148 429 +3 9340 9654 2748 +3 6241 6242 6370 +3 6371 6498 6497 +3 6498 6624 6623 +3 6370 6371 6497 +3 1630 1747 1629 +3 6497 6498 6623 +3 5449 5450 5583 +3 1471 1470 1354 +3 1238 1239 1354 +3 35497 35855 35689 +3 35410 35927 35457 +3 3165 3169 3168 +3 6503 6504 6629 +3 5314 5315 5449 +3 1472 1471 1355 +3 6630 6755 6754 +3 4490 4491 4624 +3 2872 3011 3010 +3 12078 12160 12077 +3 5701 5835 5834 +3 4891 5026 5025 +3 2874 3013 3012 +3 4755 4756 4890 +3 889 1008 1007 +3 3150 3151 3290 +3 2863 3002 3001 +3 5170 5304 5303 +3 4359 4360 4493 +3 4641 4775 4774 +3 6738 6739 1151 +3 3435 3568 3567 +3 6735 929 902 +3 6744 6745 1882 +3 5849 5981 5980 +3 291 6001 3603 +3 13724 13822 13723 +3 5464 291 5597 +3 675 3603 6001 +3 5464 15753 16549 +3 3603 5597 291 +3 13723 13821 13722 +3 30214 21574 35647 +3 13100 12131 12031 +3 9990 11236 14282 +3 1381 13214 12641 +3 12245 12244 12161 +3 3569 3436 10040 +3 4487 4621 4620 +3 1626 1625 1509 +3 1510 1626 1509 +3 664 461 6730 +3 776 895 775 +3 35502 35589 35588 +3 13721 13722 13819 +3 1128 1127 1009 +3 536 537 651 +3 484 599 598 +3 597 483 598 +3 599 717 716 +3 598 599 716 +3 5848 5849 5980 +3 6648 16319 17122 +3 8968 8969 9075 +3 5576 5711 5710 +3 5359 17765 5223 +3 955 1073 954 +3 21574 20865 20864 +3 1287 912 913 +3 16805 14652 14474 +3 3265 15144 15139 +3 679 16665 1422 +3 16665 5484 16177 +3 17175 4541 2280 +3 2280 679 1422 +3 4114 1500 17175 +3 4541 679 2280 +3 16848 16032 4114 +3 1500 4541 17175 +3 17114 16032 16848 +3 16948 17114 16848 +3 35878 35901 35416 +3 16032 1500 4114 +3 14679 25 16398 +3 22338 22337 23229 +3 2144 2145 2276 +3 35891 35916 35614 +3 27990 28680 28363 +3 3751 26415 21651 +3 21031 2675 30772 +3 6914 30753 29893 +3 28969 28968 28835 +3 26671 26672 26783 +3 21718 28684 28817 +3 35486 29495 27149 +3 25664 26082 24723 +3 19783 19454 19455 +3 23576 23577 29018 +3 27985 29630 28102 +3 3097 3237 3236 +3 34271 34270 34132 +3 3237 3376 3375 +3 3236 3237 3375 +3 3376 3509 3508 +3 3375 3376 3508 +3 3509 3639 3638 +3 3508 3509 3638 +3 3639 3771 3770 +3 3638 3639 3770 +3 3771 3903 3902 +3 3770 3771 3902 +3 4037 4036 3902 +3 3903 4037 3902 +3 4037 4170 4169 +3 4036 4037 4169 +3 4303 4302 4169 +3 4170 4303 4169 +3 4437 4436 4302 +3 4303 4437 4302 +3 4437 4571 4570 +3 4436 4437 4570 +3 4571 4705 4704 +3 4570 4571 4704 +3 4705 4840 4839 +3 4704 4705 4839 +3 4840 4975 4974 +3 4839 4840 4974 +3 4975 5110 5109 +3 4974 4975 5109 +3 5244 5243 5109 +3 5110 5244 5109 +3 5379 5378 5243 +3 5244 5379 5243 +3 5513 5512 5378 +3 5379 5513 5378 +3 5648 5647 5512 +3 5513 5648 5512 +3 5782 5781 5647 +3 5648 5782 5647 +3 5914 5913 5781 +3 5782 5914 5781 +3 5914 6046 6045 +3 5913 5914 6045 +3 6046 6176 6175 +3 6045 6046 6175 +3 6176 6305 6304 +3 6175 6176 6304 +3 6305 6432 6431 +3 6304 6305 6431 +3 6558 6557 6431 +3 6432 6558 6431 +3 6683 6682 6557 +3 6558 6683 6557 +3 6810 6809 6682 +3 6683 6810 6682 +3 6810 6521 6514 +3 6809 6810 6514 +3 1371 9539 4503 +3 30214 35832 35356 +3 6374 6501 6500 +3 1700 1817 1699 +3 1256 3159 2749 +3 317 427 426 +3 5578 5579 5713 +3 5714 5848 5847 +3 5848 5980 5979 +3 5713 5714 5847 +3 5980 6112 6111 +3 5847 5848 5979 +3 8310 9864 5964 +3 5567 5702 16041 +3 35812 35390 35362 +3 2328 2462 2327 +3 4490 4489 4355 +3 4356 4490 4355 +3 1281 1282 1397 +3 4489 4490 4623 +3 4490 4624 4623 +3 902 929 217 +3 766 767 885 +3 6504 6630 6629 +3 35743 35881 35370 +3 1356 1472 1355 +3 6605 6606 6730 +3 11135 12475 12929 +3 1510 1509 1393 +3 1629 1628 1512 +3 2882 2883 5319 +3 1394 1510 1393 +3 5193 16695 15174 +3 4225 4224 4091 +3 1161 1162 1277 +3 1277 1278 1393 +3 5021 5022 5156 +3 1278 1394 1393 +3 1490 1373 3024 +3 5970 5969 5837 +3 35833 35675 35615 +3 6476 6477 6602 +3 784 667 449 +3 1517 1633 1632 +3 7975 1517 1400 +3 1633 1750 1749 +3 1632 1633 1749 +3 1867 1866 1749 +3 1750 1867 1749 +3 1987 1986 1866 +3 9654 8772 4498 +3 1867 1987 1866 +3 4108 9654 4498 +3 5031 5032 5166 +3 3826 3825 3693 +3 4498 212 2000 +3 5042 120 675 +3 31476 11412 26518 +3 120 153 3603 +3 675 120 3603 +3 320 5597 3603 +3 153 320 3603 +3 14298 14299 6511 +3 689 14551 6264 +3 11215 2751 3981 +3 26613 31557 26614 +3 13725 13724 13626 +3 12059 12058 13114 +3 2112 2111 1986 +3 1987 2112 1986 +3 1044 1162 1161 +3 1043 1044 1161 +3 6737 6738 951 +3 6612 6613 6737 +3 12946 12945 12852 +3 17932 17530 18505 +3 5311 5446 5445 +3 7545 6379 6378 +3 485 600 599 +3 7542 7543 484 +3 600 718 717 +3 599 600 717 +3 718 837 836 +3 28688 28820 28819 +3 956 955 836 +3 837 956 836 +3 1074 1073 955 +3 956 1074 955 +3 5006 3265 15139 +3 1190 1307 18464 +3 15144 16805 16796 +3 15139 15144 16796 +3 2395 1272 2261 +3 35658 35709 35836 +3 14674 14675 14780 +3 615 14554 3076 +3 14785 14784 5744 +3 14462 15223 14606 +3 14626 14693 6145 +3 904 976 4270 +3 11710 20322 15031 +3 3491 15478 14488 +3 35495 35606 35920 +3 11947 11776 13570 +3 3354 3216 1502 +3 14999 15122 15121 +3 2042 2041 4330 +3 2249 2527 2392 +3 19155 2277 2145 +3 33882 34017 33881 +3 33292 33291 33186 +3 2278 2277 19155 +3 28836 28969 28835 +3 24704 26934 24825 +3 29518 29519 29656 +3 29685 35386 35931 +3 18993 28342 19031 +3 24647 25322 25361 +3 29085 29222 22001 +3 28342 27047 27046 +3 3238 3237 3097 +3 32919 17399 32806 +3 3377 3376 3237 +3 3238 3377 3237 +3 3377 3510 3509 +3 3376 3377 3509 +3 3510 3640 3639 +3 3509 3510 3639 +3 3640 3772 3771 +3 3639 3640 3771 +3 3904 3903 3771 +3 3772 3904 3771 +3 4038 4037 3903 +3 3904 4038 3903 +3 4171 4170 4037 +3 4038 4171 4037 +3 4171 4304 4303 +3 4170 4171 4303 +3 4304 4438 4437 +3 4303 4304 4437 +3 4438 4572 4571 +3 4437 4438 4571 +3 4572 4706 4705 +3 4571 4572 4705 +3 4706 4841 4840 +3 4705 4706 4840 +3 4841 4976 4975 +3 4840 4841 4975 +3 4976 5111 5110 +3 4975 4976 5110 +3 5245 5244 5110 +3 5111 5245 5110 +3 5380 5379 5244 +3 5245 5380 5244 +3 5380 5514 5513 +3 5379 5380 5513 +3 5649 5648 5513 +3 5514 5649 5513 +3 5783 5782 5648 +3 5649 5783 5648 +3 5783 5915 5914 +3 5782 5783 5914 +3 5915 6047 6046 +3 5914 5915 6046 +3 6177 6176 6046 +3 6047 6177 6046 +3 6306 6305 6176 +3 6177 6306 6176 +3 6433 6432 6305 +3 6306 6433 6305 +3 6559 6558 6432 +3 6433 6559 6432 +3 6684 6683 6558 +3 6559 6684 6558 +3 6684 6811 6810 +3 6683 6684 6810 +3 6811 6535 6521 +3 6810 6811 6521 +3 13630 13728 13629 +3 6535 1371 6521 +3 1725 1613 1601 +3 1467 1583 1466 +3 771 772 890 +3 538 539 653 +3 5444 5445 5578 +3 5579 5714 5713 +3 6629 6754 6753 +3 6628 6629 6753 +3 9749 35697 12135 +3 1389 3165 3166 +3 802 921 920 +3 2597 2596 2461 +3 929 1389 217 +3 2462 2461 2327 +3 5023 5024 5158 +3 2727 2728 2863 +3 4767 11144 4768 +3 2728 2864 2863 +3 3557 3687 3686 +3 1470 1586 1469 +3 12499 12498 12409 +3 13925 13924 13826 +3 535 536 650 +3 12853 12946 12852 +3 33552 805 33551 +3 6357 6484 6483 +3 2241 2240 2111 +3 925 1044 1043 +3 2112 2241 2111 +3 2373 2372 2240 +3 2241 2373 2240 +3 2507 2506 2372 +3 806 925 924 +3 2373 2507 2372 +3 2642 2641 2506 +3 2507 2642 2506 +3 2777 2776 2641 +3 1162 1278 1277 +3 1166 1282 1281 +3 19135 7080 35548 +3 5844 5976 5843 +3 1351 1467 1466 +3 5976 5975 5843 +3 5167 5301 5300 +3 425 539 424 +3 3438 3299 3838 +3 22035 22131 22034 +3 4356 4357 4490 +3 5576 5577 5711 +3 6755 2475 2128 +3 5970 6102 5969 +3 11119 3976 5042 +3 5042 559 8990 +3 6124 292 153 +3 120 6124 153 +3 292 5731 320 +3 153 292 320 +3 14551 689 6134 +3 5731 689 320 +3 31143 11421 31207 +3 8226 13416 13413 +3 13114 13115 11549 +3 33608 33607 33488 +3 8115 7324 3201 +3 2642 2777 2641 +3 17600 17599 17506 +3 4912 4913 5047 +3 414 527 413 +3 4764 4899 4898 +3 650 651 768 +3 13988 9431 14085 +3 15356 17110 1485 +3 9928 9929 10045 +3 26614 31557 26615 +3 486 601 600 +3 485 486 600 +3 601 719 718 +3 600 601 718 +3 719 838 837 +3 718 719 837 +3 957 956 837 +3 838 957 837 +3 1075 1074 956 +3 957 1075 956 +3 1191 1190 1074 +3 1075 1191 1074 +3 23109 23207 23108 +3 18389 1214 18483 +3 13615 11710 15031 +3 22222 22223 22318 +3 35457 35582 35591 +3 14872 1772 1655 +3 22046 23147 23229 +3 3621 16460 16533 +3 15192 22046 23229 +3 20872 20873 20952 +3 14998 14999 15121 +3 15122 15249 15248 +3 5330 3203 5334 +3 15121 15122 15248 +3 3932 2042 4330 +3 1502 5330 5334 +3 35608 35775 35597 +3 1269 3852 2041 +3 16908 16907 16749 +3 15091 17099 13959 +3 15372 15495 14954 +3 16750 16908 16749 +3 15172 15058 16392 +3 14954 14955 16633 +3 14952 14953 16550 +3 16657 16816 16815 +3 30020 30019 29888 +3 19031 28342 27046 +3 3238 3097 3098 +3 30020 30152 30019 +3 3239 3238 3098 +3 3099 3239 3098 +3 3378 3377 3238 +3 3239 3378 3238 +3 3511 3510 3377 +3 3378 3511 3377 +3 3641 3640 3510 +3 3511 3641 3510 +3 3773 3772 3640 +3 3641 3773 3640 +3 3773 3905 3904 +3 3772 3773 3904 +3 4039 4038 3904 +3 3905 4039 3904 +3 4172 4171 4038 +3 4039 4172 4038 +3 4305 4304 4171 +3 4172 4305 4171 +3 4439 4438 4304 +3 4305 4439 4304 +3 4439 4573 4572 +3 4438 4439 4572 +3 4573 4707 4706 +3 4572 4573 4706 +3 4707 4842 4841 +3 4706 4707 4841 +3 4977 4976 4841 +3 4842 4977 4841 +3 5112 5111 4976 +3 4977 5112 4976 +3 5112 5246 5245 +3 5111 5112 5245 +3 5246 5381 5380 +3 5245 5246 5380 +3 5381 5515 5514 +3 5380 5381 5514 +3 5515 5650 5649 +3 5514 5515 5649 +3 5650 5784 5783 +3 5649 5650 5783 +3 5784 5916 5915 +3 5783 5784 5915 +3 6048 6047 5915 +3 5916 6048 5915 +3 6178 6177 6047 +3 6048 6178 6047 +3 6307 6306 6177 +3 6178 6307 6177 +3 6434 6433 6306 +3 6307 6434 6306 +3 6560 6559 6433 +3 6434 6560 6433 +3 6685 6684 6559 +3 6560 6685 6559 +3 6685 6812 6811 +3 6684 6685 6811 +3 6812 6638 6535 +3 6811 6812 6535 +3 6638 663 1371 +3 6535 6638 1371 +3 663 4368 4102 +3 35707 35743 35370 +3 9083 5309 5308 +3 6263 8634 7881 +3 22046 23343 23049 +3 5445 5579 5578 +3 5047 5182 5181 +3 6754 2128 2125 +3 5181 5182 5315 +3 5046 5047 5181 +3 5316 5451 5450 +3 5315 5316 5450 +3 35446 35728 35591 +3 6609 6734 6608 +3 9431 3334 14085 +3 4616 4617 4750 +3 3169 3448 5985 +3 6116 2215 2086 +3 929 934 1389 +3 3448 6116 5985 +3 934 1490 1389 +3 1490 3024 3165 +3 536 651 650 +3 3285 3286 3424 +3 5969 5968 5836 +3 924 925 1043 +3 2647 2782 2781 +3 13675 12727 12638 +3 23147 22046 23049 +3 4774 11278 11277 +3 1385 2384 6662 +3 6355 6356 6482 +3 10277 3698 3699 +3 533 648 532 +3 5575 5710 5709 +3 1706 1705 1588 +3 3287 3288 3426 +3 1241 1240 1124 +3 1589 1588 1472 +3 1384 4791 6262 +3 1165 1164 1046 +3 5577 5712 5711 +3 311 421 420 +3 4491 4625 4624 +3 6606 6731 6730 +3 2310 2442 2778 +3 3694 3826 3693 +3 6754 6755 2128 +3 4082 4083 4215 +3 5181 5315 5314 +3 9858 7671 3040 +3 4794 293 292 +3 120 3976 6124 +3 293 321 5731 +3 292 293 5731 +3 321 6134 689 +3 5731 321 689 +3 31391 31392 31458 +3 14563 3342 6790 +3 33489 33608 33488 +3 12405 12494 12493 +3 23343 22849 22749 +3 11129 13608 13868 +3 20781 20780 20701 +3 6729 457 6728 +3 2879 13860 439 +3 1473 1589 1472 +3 2735 2871 2734 +3 4220 4353 4352 +3 35918 35806 24801 +3 7544 486 485 +3 5985 6116 2086 +3 373 487 486 +3 372 373 486 +3 487 602 601 +3 486 487 601 +3 602 720 719 +3 601 602 719 +3 839 838 719 +3 720 839 719 +3 958 957 838 +3 839 958 838 +3 1076 1075 957 +3 958 1076 957 +3 1192 1191 1075 +3 1076 1192 1075 +3 1308 18562 18561 +3 1192 1308 1191 +3 7878 15835 20 +3 35435 35577 35875 +3 1452 1567 5467 +3 35370 35881 35366 +3 3325 5621 5467 +3 5621 5620 5467 +3 5620 5621 3354 +3 5621 3216 3354 +3 3203 2249 576 +3 3216 5330 1502 +3 2042 1269 2041 +3 5334 3203 576 +3 2282 1924 4674 +3 5618 3747 3852 +3 17071 17070 16907 +3 11805 13029 35684 +3 2257 2391 15372 +3 16908 17071 16907 +3 16656 16657 16815 +3 14955 16638 16633 +3 15057 15309 14952 +3 16816 16980 16979 +3 1735 4399 4535 +3 16554 6648 5610 +3 27257 19734 21381 +3 4095 1735 4535 +3 2959 3100 3099 +3 35633 35537 35661 +3 3240 3239 3099 +3 3100 3240 3099 +3 3379 3378 3239 +3 3240 3379 3239 +3 3512 3511 3378 +3 3379 3512 3378 +3 3642 3641 3511 +3 3512 3642 3511 +3 3774 3773 3641 +3 3642 3774 3641 +3 3906 3905 3773 +3 3774 3906 3773 +3 4040 4039 3905 +3 3906 4040 3905 +3 4173 4172 4039 +3 4040 4173 4039 +3 4306 4305 4172 +3 4173 4306 4172 +3 4440 4439 4305 +3 4306 4440 4305 +3 4440 4574 4573 +3 4439 4440 4573 +3 4574 4708 4707 +3 4573 4574 4707 +3 4708 4843 4842 +3 4707 4708 4842 +3 4978 4977 4842 +3 4843 4978 4842 +3 5113 5112 4977 +3 4978 5113 4977 +3 5113 5247 5246 +3 5112 5113 5246 +3 5247 5382 5381 +3 5246 5247 5381 +3 5382 5516 5515 +3 5381 5382 5515 +3 5516 5651 5650 +3 5515 5516 5650 +3 5651 5785 5784 +3 5650 5651 5784 +3 5917 5916 5784 +3 5785 5917 5784 +3 6049 6048 5916 +3 5917 6049 5916 +3 6179 6178 6048 +3 6049 6179 6048 +3 6308 6307 6178 +3 6179 6308 6178 +3 6435 6434 6307 +3 6308 6435 6307 +3 6561 6560 6434 +3 6435 6561 6434 +3 6686 6685 6560 +3 6561 6686 6560 +3 6813 6812 6685 +3 6686 6813 6685 +3 6664 6638 6812 +3 6813 6664 6812 +3 6664 1839 663 +3 6638 6664 663 +3 1839 4235 4368 +3 663 1839 4368 +3 13596 35823 8670 +3 25380 25438 24714 +3 6753 6754 2125 +3 23033 22934 20701 +3 4911 4912 5046 +3 5182 5316 5315 +3 5968 5967 5835 +3 4089 4090 4222 +3 5302 5303 5437 +3 5169 5303 5302 +3 1389 1490 3165 +3 313 423 422 +3 29640 29773 29772 +3 3024 3448 3169 +3 24450 24444 30632 +3 26572 26677 26676 +3 4752 4887 4886 +3 30990 31051 30989 +3 8477 9661 6632 +3 923 1042 1041 +3 3009 3010 3150 +3 4898 4899 5033 +3 4357 4358 4491 +3 2120 2125 432 +3 6628 6753 6752 +3 6259 3441 784 +3 4759 4760 4894 +3 6753 2125 2120 +3 3956 3955 3823 +3 2068 2197 2196 +3 14200 14201 14298 +3 648 649 766 +3 21862 22266 15729 +3 2086 2215 6121 +3 3165 3024 3169 +3 4624 4625 4758 +3 6101 6102 6231 +3 895 1014 894 +3 658 776 657 +3 2196 2328 2195 +3 1747 1746 1629 +3 3166 3165 3168 +3 5180 5181 5314 +3 795 4794 9988 +3 4794 292 6124 +3 1521 293 795 +3 293 1521 321 +3 5865 808 6134 +3 321 5865 6134 +3 808 6790 3342 +3 6134 808 3342 +3 8797 35890 35617 +3 15560 19861 2984 +3 7467 11549 13973 +3 12404 12405 12493 +3 28469 29157 17313 +3 12845 12059 13020 +3 20781 20701 20782 +3 5020 5021 5155 +3 6738 1151 951 +3 13883 12123 11881 +3 3429 3562 3428 +3 1131 1130 1012 +3 29145 29282 26520 +3 263 372 7430 +3 6485 6611 6484 +3 374 488 487 +3 373 374 487 +3 488 603 602 +3 487 488 602 +3 603 721 720 +3 602 603 720 +3 721 840 839 +3 720 721 839 +3 959 958 839 +3 840 959 839 +3 1077 1076 958 +3 959 1077 958 +3 1193 1192 1076 +3 1077 1193 1076 +3 1309 1193 18468 +3 28687 28819 28818 +3 576 2249 2392 +3 2527 15834 15799 +3 16751 16752 16910 +3 2392 2527 15799 +3 1734 6515 2657 +3 17074 17073 16910 +3 1734 4769 5888 +3 5889 1734 5888 +3 1269 5618 3852 +3 5618 5889 5888 +3 16545 1894 2264 +3 3747 5618 5888 +3 17235 17234 17070 +3 4674 16545 2264 +3 6140 4534 2257 +3 17071 17235 17070 +3 16815 16816 16979 +3 15495 14955 14954 +3 240 697 15057 +3 16980 17146 17145 +3 4399 240 2660 +3 14953 16554 16550 +3 16904 17067 16903 +3 4535 4399 2660 +3 17296 19095 2256 +3 17231 17230 17066 +3 2960 3101 3100 +3 2959 2960 3100 +3 3101 3241 3240 +3 3100 3101 3240 +3 3380 3379 3240 +3 3241 3380 3240 +3 3513 3512 3379 +3 3380 3513 3379 +3 3643 3642 3512 +3 3513 3643 3512 +3 3775 3774 3642 +3 3643 3775 3642 +3 3907 3906 3774 +3 3775 3907 3774 +3 4041 4040 3906 +3 3907 4041 3906 +3 4174 4173 4040 +3 4041 4174 4040 +3 4307 4306 4173 +3 4174 4307 4173 +3 4441 4440 4306 +3 4307 4441 4306 +3 4441 4575 4574 +3 4440 4441 4574 +3 4575 4709 4708 +3 4574 4575 4708 +3 4709 4844 4843 +3 4708 4709 4843 +3 4979 4978 4843 +3 4844 4979 4843 +3 5114 5113 4978 +3 4979 5114 4978 +3 5114 5248 5247 +3 5113 5114 5247 +3 5248 5383 5382 +3 5247 5248 5382 +3 5383 5517 5516 +3 5382 5383 5516 +3 5517 5652 5651 +3 5516 5517 5651 +3 5652 5786 5785 +3 5651 5652 5785 +3 5918 5917 5785 +3 5786 5918 5785 +3 6050 6049 5917 +3 5918 6050 5917 +3 6180 6179 6049 +3 6050 6180 6049 +3 6309 6308 6179 +3 6180 6309 6179 +3 6436 6435 6308 +3 6309 6436 6308 +3 6562 6561 6435 +3 6436 6562 6435 +3 6562 6687 6686 +3 6561 6562 6686 +3 6687 6814 6813 +3 6686 6687 6813 +3 6814 6665 6664 +3 6813 6814 6664 +3 4652 1839 6664 +3 6665 4652 6664 +3 4652 4369 4235 +3 1839 4652 4235 +3 12141 12203 11974 +3 14482 13695 24092 +3 35945 35843 35383 +3 35927 35582 35457 +3 6114 6115 6244 +3 35535 35946 35483 +3 5702 5836 5701 +3 4090 4223 4222 +3 6228 6229 6357 +3 6229 6358 6357 +3 804 923 922 +3 6358 6485 6357 +3 35531 35572 35706 +3 26571 26572 26676 +3 5028 5029 5163 +3 12141 7547 11790 +3 15203 10482 12960 +3 2601 2736 2600 +3 35784 35643 35438 +3 29417 35685 35883 +3 6479 6480 6605 +3 5028 5163 5162 +3 768 769 887 +3 4624 4758 4757 +3 2513 2514 2648 +3 3824 3956 3823 +3 6089 8131 6090 +3 3970 3838 461 +3 6611 6736 6735 +3 922 923 1041 +3 2330 2331 2464 +3 6735 6736 929 +3 2458 2593 2592 +3 6230 6231 6359 +3 3570 4383 2743 +3 1239 1355 1354 +3 217 1389 3166 +3 34695 34694 34566 +3 1235 1236 1351 +3 5310 5445 5444 +3 12324 12410 12323 +3 5568 5567 5274 +3 322 6003 808 +3 1400 1517 1516 +3 6003 4635 6790 +3 808 6003 6790 +3 4635 3980 2887 +3 6790 4635 2887 +3 2091 5723 160 +3 35533 35610 35484 +3 11879 12059 12845 +3 11792 7799 11793 +3 22813 22912 22911 +3 10482 14831 22836 +3 5573 5708 5572 +3 3698 3830 3697 +3 664 3970 461 +3 3438 2883 3299 +3 35116 22322 22324 +3 5169 5170 5303 +3 264 374 373 +3 6099 6229 6228 +3 375 489 488 +3 374 375 488 +3 604 603 488 +3 489 604 488 +3 722 721 603 +3 604 722 603 +3 722 841 840 +3 721 722 840 +3 960 959 840 +3 841 960 840 +3 1078 1077 959 +3 960 1078 959 +3 19794 21607 26242 +3 1078 1194 1077 +3 3932 4330 17237 +3 17238 3932 17237 +3 16911 17074 16910 +3 17238 17237 17073 +3 15179 1924 2282 +3 17074 17238 17073 +3 826 1765 16626 +3 16785 15179 15306 +3 15306 15179 2282 +3 16626 16785 15306 +3 1894 16243 1769 +3 1924 16545 4674 +3 4332 4465 17234 +3 2264 1894 1769 +3 2346 3167 5461 +3 17235 4332 17234 +3 16979 16980 17145 +3 2391 15495 15372 +3 4399 6269 240 +3 17146 4602 5492 +3 2551 2686 2685 +3 15309 14953 14952 +3 34429 34428 34290 +3 14055 17479 14054 +3 14040 30092 30224 +3 6993 13980 13979 +3 2822 2961 2960 +3 14039 30224 14137 +3 2961 3102 3101 +3 2960 2961 3101 +3 3102 3242 3241 +3 3101 3102 3241 +3 3242 3381 3380 +3 3241 3242 3380 +3 3514 3513 3380 +3 3381 3514 3380 +3 3644 3643 3513 +3 3514 3644 3513 +3 3776 3775 3643 +3 3644 3776 3643 +3 3908 3907 3775 +3 3776 3908 3775 +3 4042 4041 3907 +3 3908 4042 3907 +3 4175 4174 4041 +3 4042 4175 4041 +3 4308 4307 4174 +3 4175 4308 4174 +3 4442 4441 4307 +3 4308 4442 4307 +3 4442 4576 4575 +3 4441 4442 4575 +3 4576 4710 4709 +3 4575 4576 4709 +3 4710 4845 4844 +3 4709 4710 4844 +3 4980 4979 4844 +3 4845 4980 4844 +3 5115 5114 4979 +3 4980 5115 4979 +3 5115 5249 5248 +3 5114 5115 5248 +3 5249 5384 5383 +3 5248 5249 5383 +3 5384 5518 5517 +3 5383 5384 5517 +3 5518 5653 5652 +3 5517 5518 5652 +3 5787 5786 5652 +3 5653 5787 5652 +3 5919 5918 5786 +3 5787 5919 5786 +3 6051 6050 5918 +3 5919 6051 5918 +3 6181 6180 6050 +3 6051 6181 6050 +3 6310 6309 6180 +3 6181 6310 6180 +3 6310 6437 6436 +3 6309 6310 6436 +3 6437 6563 6562 +3 6436 6437 6562 +3 6563 6688 6687 +3 6562 6563 6687 +3 6688 6815 6814 +3 6687 6688 6814 +3 6815 6762 6665 +3 6814 6815 6665 +3 1838 4652 6665 +3 6762 1838 6665 +3 4370 4369 4652 +3 1838 4370 4652 +3 2752 2751 4369 +3 4370 2752 4369 +3 3849 3981 2751 +3 2752 3849 2751 +3 3849 2225 2224 +3 3981 3849 2224 +3 7387 7275 7276 +3 35552 35675 35833 +3 35941 35643 35832 +3 6485 6484 6357 +3 6243 6372 6371 +3 33549 33550 803 +3 1945 1944 1824 +3 2883 2882 3299 +3 6365 6492 6491 +3 7997 14170 13981 +3 1825 1945 1824 +3 5587 5454 2883 +3 5303 5438 5437 +3 35818 35665 35632 +3 35622 35692 35756 +3 35663 35503 35790 +3 1517 1632 1516 +3 5164 5298 5297 +3 6112 6113 6242 +3 1042 1160 1159 +3 1041 1042 1159 +3 6736 934 929 +3 6611 6610 6484 +3 4227 4226 4093 +3 2618 2218 2217 +3 7463 10478 5585 +3 35445 26404 27024 +3 6502 6503 6628 +3 6503 6629 6628 +3 3284 3423 3283 +3 1819 1939 1938 +3 1584 1701 1583 +3 1818 1817 1700 +3 8348 5996 322 +3 10756 322 5865 +3 5872 6545 4635 +3 6003 5872 4635 +3 6545 161 3980 +3 4635 6545 3980 +3 1880 89 4412 +3 161 1409 3980 +3 12059 13114 13020 +3 12241 12326 12240 +3 11956 22938 14831 +3 35528 35353 35400 +3 22637 22830 22836 +3 3299 3441 6259 +3 1751 1750 1633 +3 6242 6243 6371 +3 6498 6499 6624 +3 3156 9806 3296 +3 2216 5991 5990 +3 374 264 265 +3 6098 6099 6228 +3 14562 35862 35714 +3 375 376 489 +3 490 605 604 +3 489 490 604 +3 723 722 604 +3 605 723 604 +3 842 841 722 +3 723 842 722 +3 961 960 841 +3 842 961 841 +3 1079 1078 960 +3 961 1079 960 +3 1195 1194 1078 +3 1079 1195 1078 +3 1312 1427 1311 +3 35428 35351 35660 +3 2710 15908 15358 +3 7510 6376 6375 +3 15196 10216 21879 +3 5469 2131 3177 +3 224 1033 4010 +3 16750 16749 16594 +3 1568 1033 1684 +3 1033 3877 4010 +3 1568 1684 4465 +3 4332 1568 4465 +3 5326 2346 5461 +3 1033 224 1684 +3 17145 17146 5492 +3 3167 4534 6140 +3 2611 6269 4399 +3 4602 3399 3398 +3 240 15057 15053 +3 697 15309 15057 +3 13524 35809 1971 +3 19481 2416 2551 +3 35387 35702 35910 +3 3268 18711 19858 +3 2687 2823 2822 +3 2686 2687 2822 +3 2823 2962 2961 +3 2822 2823 2961 +3 2962 3103 3102 +3 2961 2962 3102 +3 3103 3243 3242 +3 3102 3103 3242 +3 3243 3382 3381 +3 3242 3243 3381 +3 3382 3515 3514 +3 3381 3382 3514 +3 3515 3645 3644 +3 3514 3515 3644 +3 3777 3776 3644 +3 3645 3777 3644 +3 3909 3908 3776 +3 3777 3909 3776 +3 4043 4042 3908 +3 3909 4043 3908 +3 4176 4175 4042 +3 4043 4176 4042 +3 4309 4308 4175 +3 4176 4309 4175 +3 4443 4442 4308 +3 4309 4443 4308 +3 4443 4577 4576 +3 4442 4443 4576 +3 4577 4711 4710 +3 4576 4577 4710 +3 4846 4845 4710 +3 4711 4846 4710 +3 4981 4980 4845 +3 4846 4981 4845 +3 4981 5116 5115 +3 4980 4981 5115 +3 5116 5250 5249 +3 5115 5116 5249 +3 5385 5384 5249 +3 5250 5385 5249 +3 5385 5519 5518 +3 5384 5385 5518 +3 5654 5653 5518 +3 5519 5654 5518 +3 5788 5787 5653 +3 5654 5788 5653 +3 5788 5920 5919 +3 5787 5788 5919 +3 6052 6051 5919 +3 5920 6052 5919 +3 6182 6181 6051 +3 6052 6182 6051 +3 6182 6311 6310 +3 6181 6182 6310 +3 6311 6438 6437 +3 6310 6311 6437 +3 6438 6564 6563 +3 6437 6438 6563 +3 6564 6689 6688 +3 6563 6564 6688 +3 6689 6816 6815 +3 6688 6689 6815 +3 6771 6762 6815 +3 6816 6771 6815 +3 1374 1838 6762 +3 6771 1374 6762 +3 4236 4370 1838 +3 1374 4236 1838 +3 2753 2752 4370 +3 4236 2753 4370 +3 3587 3849 2752 +3 2753 3587 2752 +3 34755 29811 21739 +3 35821 35886 35735 +3 11965 4922 13775 +3 16395 16697 2231 +3 11661 11660 11585 +3 11583 11658 11582 +3 2878 9654 9340 +3 897 777 778 +3 1751 1868 1867 +3 1750 1751 1867 +3 1868 1988 1987 +3 1867 1868 1987 +3 2113 2112 1987 +3 1988 2113 1987 +3 2242 2241 2112 +3 6372 6499 6498 +3 6499 6625 6624 +3 1160 1276 1275 +3 1159 1160 1275 +3 6610 6611 6735 +3 5834 5835 5966 +3 2749 3159 4242 +3 2199 2200 2331 +3 4642 4643 4776 +3 4912 5047 5046 +3 4777 4912 4911 +3 4776 4777 4911 +3 5291 5292 16327 +3 1591 1590 1474 +3 883 1002 1001 +3 4217 4216 4083 +3 1707 1824 1823 +3 1823 1824 1943 +3 5738 4501 6545 +3 6003 5996 5872 +3 4501 4499 161 +3 6545 4501 161 +3 4499 402 1409 +3 161 4499 1409 +3 7584 10966 7876 +3 1877 14475 14480 +3 23033 22144 23245 +3 23210 23308 23209 +3 12960 10482 22836 +3 22516 22615 22515 +3 2113 2242 2112 +3 2374 2373 2241 +3 6624 6625 6749 +3 6371 6372 6498 +3 9806 3297 3296 +3 5962 6094 6093 +3 5967 6099 6098 +3 5966 5967 6098 +3 21107 21106 21020 +3 11139 11215 11267 +3 491 606 605 +3 7549 490 376 +3 606 724 723 +3 605 606 723 +3 724 843 842 +3 723 724 842 +3 962 961 842 +3 843 962 842 +3 1080 1079 961 +3 962 1080 961 +3 1080 1196 1195 +3 1079 1080 1195 +3 1196 1312 1311 +3 1195 1196 1311 +3 1312 1428 1427 +3 18565 1427 18662 +3 1544 1545 1661 +3 12473 35911 12384 +3 4811 224 4111 +3 4010 5885 3485 +3 5885 2346 5326 +3 4111 4010 3485 +3 5461 3167 6140 +3 3485 5885 5326 +3 5492 4602 3398 +3 4534 2391 2257 +3 1735 2611 4399 +3 3399 4412 4413 +3 2660 240 15053 +3 6269 697 240 +3 16746 16904 16745 +3 15057 14952 14946 +3 28687 28688 28819 +3 17067 17066 16903 +3 2553 2688 2687 +3 17889 3129 19858 +3 2688 2824 2823 +3 2687 2688 2823 +3 2824 2963 2962 +3 2823 2824 2962 +3 2963 3104 3103 +3 2962 2963 3103 +3 3104 3244 3243 +3 3103 3104 3243 +3 3244 3383 3382 +3 3243 3244 3382 +3 3383 3516 3515 +3 3382 3383 3515 +3 3646 3645 3515 +3 3516 3646 3515 +3 3778 3777 3645 +3 3646 3778 3645 +3 3910 3909 3777 +3 3778 3910 3777 +3 4044 4043 3909 +3 3910 4044 3909 +3 4177 4176 4043 +3 4044 4177 4043 +3 4310 4309 4176 +3 4177 4310 4176 +3 4310 4444 4443 +3 4309 4310 4443 +3 4444 4578 4577 +3 4443 4444 4577 +3 4578 4712 4711 +3 4577 4578 4711 +3 4847 4846 4711 +3 4712 4847 4711 +3 4982 4981 4846 +3 4847 4982 4846 +3 4982 5117 5116 +3 4981 4982 5116 +3 5251 5250 5116 +3 5117 5251 5116 +3 5386 5385 5250 +3 5251 5386 5250 +3 5386 5520 5519 +3 5385 5386 5519 +3 5520 5655 5654 +3 5519 5520 5654 +3 5655 5789 5788 +3 5654 5655 5788 +3 5789 5921 5920 +3 5788 5789 5920 +3 5921 6053 6052 +3 5920 5921 6052 +3 6053 6183 6182 +3 6052 6053 6182 +3 6183 6312 6311 +3 6182 6183 6311 +3 6312 6439 6438 +3 6311 6312 6438 +3 6439 6565 6564 +3 6438 6439 6564 +3 6565 6690 6689 +3 6564 6565 6689 +3 6690 6817 6816 +3 6689 6690 6816 +3 6817 6796 6771 +3 6816 6817 6771 +3 1258 1374 6771 +3 6796 1258 6771 +3 3576 4236 1374 +3 1258 3576 1374 +3 2754 2753 4236 +3 3576 2754 4236 +3 3454 3587 2753 +3 2754 3454 2753 +3 3454 5591 5458 +3 3454 5458 3587 +3 14111 14112 14207 +3 14208 14306 14305 +3 12500 12590 12499 +3 14207 14208 14305 +3 35625 35810 35536 +3 14108 14109 14204 +3 1000 1001 1118 +3 2242 2374 2241 +3 2508 2507 2373 +3 2374 2508 2373 +3 2643 2642 2507 +3 2508 2643 2507 +3 35650 35808 35554 +3 3968 2746 2744 +3 2643 2778 2642 +3 3285 3424 3423 +3 3700 3968 2744 +3 4223 4356 4222 +3 2095 2094 1957 +3 2200 2332 2331 +3 4356 4355 4222 +3 5833 5834 5965 +3 4414 5189 41 +3 4508 4509 4642 +3 4643 4777 4776 +3 3059 4389 9516 +3 4897 5032 5031 +3 1955 2096 1956 +3 1123 1239 1238 +3 4130 1152 2095 +3 22714 22713 22614 +3 9800 809 5738 +3 5872 5738 6545 +3 4502 162 4499 +3 4501 4502 4499 +3 162 401 402 +3 4499 162 402 +3 3332 14475 2250 +3 401 94 402 +3 30823 17387 19520 +3 13910 13911 14008 +3 20624 20705 20704 +3 14065 8342 10385 +3 20786 20787 18449 +3 35718 35893 35359 +3 7990 7989 11980 +3 2746 2340 2339 +3 4799 3968 3700 +3 7105 7104 17369 +3 3818 3817 3685 +3 35388 35621 35858 +3 35703 35789 35450 +3 378 492 491 +3 490 491 605 +3 492 607 606 +3 491 492 606 +3 607 725 724 +3 606 607 724 +3 725 844 843 +3 724 725 843 +3 963 962 843 +3 844 963 843 +3 1081 1080 962 +3 963 1081 962 +3 1081 1197 1196 +3 1080 1081 1196 +3 1197 1313 1312 +3 1196 1197 1312 +3 1313 1429 1428 +3 1312 1313 1428 +3 1429 1545 1544 +3 1428 1429 1544 +3 1545 1662 1661 +3 914 14538 913 +3 1662 1779 1778 +3 1778 1779 1898 +3 1779 1899 1898 +3 26847 11597 11673 +3 1899 2024 2023 +3 2024 2152 2023 +3 2024 2153 2152 +3 2284 2152 2153 +3 2153 2285 2284 +3 2284 2418 19374 +3 2285 2419 2418 +3 2418 19483 19374 +3 2419 2554 2553 +3 2418 2419 2553 +3 2554 2689 2688 +3 2553 2554 2688 +3 2689 2825 2824 +3 2688 2689 2824 +3 2964 2963 2824 +3 2825 2964 2824 +3 3105 3104 2963 +3 2964 3105 2963 +3 3105 3245 3244 +3 3104 3105 3244 +3 3245 3384 3383 +3 3244 3245 3383 +3 3384 3517 3516 +3 3383 3384 3516 +3 3647 3646 3516 +3 3517 3647 3516 +3 3779 3778 3646 +3 3647 3779 3646 +3 3779 3911 3910 +3 3778 3779 3910 +3 4045 4044 3910 +3 3911 4045 3910 +3 4178 4177 4044 +3 4045 4178 4044 +3 4311 4310 4177 +3 4178 4311 4177 +3 4311 4445 4444 +3 4310 4311 4444 +3 4445 4579 4578 +3 4444 4445 4578 +3 4713 4712 4578 +3 4579 4713 4578 +3 4848 4847 4712 +3 4713 4848 4712 +3 4848 4983 4982 +3 4847 4848 4982 +3 4983 5118 5117 +3 4982 4983 5117 +3 5252 5251 5117 +3 5118 5252 5117 +3 5387 5386 5251 +3 5252 5387 5251 +3 5387 5521 5520 +3 5386 5387 5520 +3 5521 5656 5655 +3 5520 5521 5655 +3 5656 5790 5789 +3 5655 5656 5789 +3 5790 5922 5921 +3 5789 5790 5921 +3 5922 6054 6053 +3 5921 5922 6053 +3 6054 6184 6183 +3 6053 6054 6183 +3 6184 6313 6312 +3 6183 6184 6312 +3 6313 6440 6439 +3 6312 6313 6439 +3 6440 6566 6565 +3 6439 6440 6565 +3 6566 6691 6690 +3 6565 6566 6690 +3 6691 6818 6817 +3 6690 6691 6817 +3 6818 3995 6796 +3 6817 6818 6796 +3 1375 1258 6796 +3 3995 1375 6796 +3 4237 3576 1258 +3 1375 4237 1258 +3 2891 2754 3576 +3 4237 2891 3576 +3 3717 3454 2754 +3 2891 3717 2754 +3 15658 17154 5458 +3 3717 5591 3454 +3 14013 14014 14111 +3 14112 14208 14207 +3 31598 31597 31510 +3 11857 35617 10488 +3 15463 20155 1623 +3 12797 12889 12796 +3 3143 3283 3282 +3 12508 12507 12418 +3 2792 13332 13890 +3 9977 128 7671 +3 2252 12044 11880 +3 4515 2792 38 +3 38 2792 13890 +3 20709 20708 20627 +3 6625 6750 6749 +3 2010 4799 4263 +3 35865 35682 35464 +3 24524 13623 13622 +3 5835 5967 5966 +3 5836 5835 5701 +3 5834 5966 5965 +3 21021 21107 21020 +3 2459 2460 2594 +3 4509 4643 4642 +3 35887 35719 35566 +3 24958 26577 26681 +3 461 3838 457 +3 2464 2599 2463 +3 20791 20873 20872 +3 2882 5319 2881 +3 888 889 1007 +3 1008 1126 1125 +3 7803 809 10749 +3 28071 35842 30423 +3 6000 1054 401 +3 162 6000 401 +3 1054 2250 94 +3 401 1054 94 +3 14107 14203 14202 +3 3332 812 706 +3 16014 23412 21873 +3 11889 11724 9233 +3 23049 23343 22749 +3 26937 20180 24826 +3 35498 35611 35520 +3 4091 4224 4223 +3 6750 2010 2003 +3 6749 6750 2003 +3 7213 17448 164 +3 35191 35192 17369 +3 269 268 164 +3 268 269 378 +3 379 493 492 +3 378 379 492 +3 608 607 492 +3 493 608 492 +3 726 725 607 +3 608 726 607 +3 845 844 725 +3 726 845 725 +3 845 964 963 +3 844 845 963 +3 964 1082 1081 +3 963 964 1081 +3 1082 1198 1197 +3 1081 1082 1197 +3 1198 1314 1313 +3 1197 1198 1313 +3 1314 1430 1429 +3 1313 1314 1429 +3 1430 1546 1545 +3 1429 1430 1545 +3 1546 1663 1662 +3 1545 1546 1662 +3 1663 1780 1779 +3 1662 1663 1779 +3 1780 1900 1899 +3 1779 1780 1899 +3 1900 2025 2024 +3 1899 1900 2024 +3 2025 2154 2153 +3 2024 2025 2153 +3 2154 2286 2285 +3 2153 2154 2285 +3 2286 2420 2419 +3 2285 2286 2419 +3 2420 2555 2554 +3 2419 2420 2554 +3 2555 2690 2689 +3 2554 2555 2689 +3 2690 2826 2825 +3 2689 2690 2825 +3 2965 2964 2825 +3 2826 2965 2825 +3 3106 3105 2964 +3 2965 3106 2964 +3 3246 3245 3105 +3 3106 3246 3105 +3 3246 3385 3384 +3 3245 3246 3384 +3 3385 3518 3517 +3 3384 3385 3517 +3 3648 3647 3517 +3 3518 3648 3517 +3 3780 3779 3647 +3 3648 3780 3647 +3 3912 3911 3779 +3 3780 3912 3779 +3 3912 4046 4045 +3 3911 3912 4045 +3 4046 4179 4178 +3 4045 4046 4178 +3 4312 4311 4178 +3 4179 4312 4178 +3 4312 4446 4445 +3 4311 4312 4445 +3 4446 4580 4579 +3 4445 4446 4579 +3 4580 4714 4713 +3 4579 4580 4713 +3 4849 4848 4713 +3 4714 4849 4713 +3 4849 4984 4983 +3 4848 4849 4983 +3 4984 5119 5118 +3 4983 4984 5118 +3 5253 5252 5118 +3 5119 5253 5118 +3 5388 5387 5252 +3 5253 5388 5252 +3 5388 5522 5521 +3 5387 5388 5521 +3 5522 5657 5656 +3 5521 5522 5656 +3 5657 5791 5790 +3 5656 5657 5790 +3 5791 5923 5922 +3 5790 5791 5922 +3 5923 6055 6054 +3 5922 5923 6054 +3 6055 6185 6184 +3 6054 6055 6184 +3 6185 6314 6313 +3 6184 6185 6313 +3 6314 6441 6440 +3 6313 6314 6440 +3 6441 6567 6566 +3 6440 6441 6566 +3 6567 6692 6691 +3 6566 6567 6691 +3 6692 6819 6818 +3 6691 6692 6818 +3 6819 6133 3995 +3 6818 6819 3995 +3 4779 1375 3995 +3 6133 4779 3995 +3 3707 4237 1375 +3 4779 3707 1375 +3 3031 2891 4237 +3 3707 3031 4237 +3 3315 3717 2891 +3 3031 3315 2891 +3 5549 5859 15524 +3 3315 5725 3717 +3 14014 14112 14111 +3 287 4786 13493 +3 12268 12267 12184 +3 13610 8332 13573 +3 13294 13389 13882 +3 20477 20478 20562 +3 12419 12508 12418 +3 24516 22679 11979 +3 35423 8339 12049 +3 18646 21037 21038 +3 4223 4224 4356 +3 3693 3825 3692 +3 26228 13050 13051 +3 4224 4357 4356 +3 6606 6607 6731 +3 4263 4799 3700 +3 2332 2466 2465 +3 14930 22162 16952 +3 10578 13332 37 +3 2331 2332 2465 +3 6350 6349 6220 +3 13114 11549 7467 +3 2325 2326 2459 +3 763 882 881 +3 3817 3818 3949 +3 2740 2876 2739 +3 1121 1237 1236 +3 2064 2193 2192 +3 6097 6226 6096 +3 6495 6621 6494 +3 8772 2878 2885 +3 8879 2885 3843 +3 259 3716 1054 +3 6670 10474 6000 +3 3716 2516 2250 +3 1054 3716 2250 +3 812 3332 2250 +3 2516 812 2250 +3 20802 18272 18365 +3 35728 35894 35664 +3 23118 23020 19540 +3 22915 22914 22815 +3 20043 20124 20123 +3 3825 3957 3824 +3 16144 16143 16002 +3 16093 14788 4943 +3 2003 2010 4263 +3 14436 14456 3267 +3 23031 22932 16299 +3 15118 15119 15245 +3 16584 16739 16583 +3 380 494 493 +3 379 380 493 +3 494 609 608 +3 493 494 608 +3 609 727 726 +3 608 609 726 +3 727 846 845 +3 726 727 845 +3 846 965 964 +3 845 846 964 +3 965 1083 1082 +3 964 965 1082 +3 1199 1198 1082 +3 1083 1199 1082 +3 1199 1315 1314 +3 1198 1199 1314 +3 1315 1431 1430 +3 1314 1315 1430 +3 1431 1547 1546 +3 1430 1431 1546 +3 1547 1664 1663 +3 1546 1547 1663 +3 1664 1781 1780 +3 1663 1664 1780 +3 1781 1901 1900 +3 1780 1781 1900 +3 1901 2026 2025 +3 1900 1901 2025 +3 2026 2155 2154 +3 2025 2026 2154 +3 2155 2287 2286 +3 2154 2155 2286 +3 2287 2421 2420 +3 2286 2287 2420 +3 2421 2556 2555 +3 2420 2421 2555 +3 2556 2691 2690 +3 2555 2556 2690 +3 2827 2826 2690 +3 2691 2827 2690 +3 2966 2965 2826 +3 2827 2966 2826 +3 3107 3106 2965 +3 2966 3107 2965 +3 3247 3246 3106 +3 3107 3247 3106 +3 3386 3385 3246 +3 3247 3386 3246 +3 3386 3519 3518 +3 3385 3386 3518 +3 3519 3649 3648 +3 3518 3519 3648 +3 3781 3780 3648 +3 3649 3781 3648 +3 3781 3913 3912 +3 3780 3781 3912 +3 3913 4047 4046 +3 3912 3913 4046 +3 4047 4180 4179 +3 4046 4047 4179 +3 4180 4313 4312 +3 4179 4180 4312 +3 4447 4446 4312 +3 4313 4447 4312 +3 4447 4581 4580 +3 4446 4447 4580 +3 4715 4714 4580 +3 4581 4715 4580 +3 4715 4850 4849 +3 4714 4715 4849 +3 4985 4984 4849 +3 4850 4985 4849 +3 5120 5119 4984 +3 4985 5120 4984 +3 5120 5254 5253 +3 5119 5120 5253 +3 5254 5389 5388 +3 5253 5254 5388 +3 5389 5523 5522 +3 5388 5389 5522 +3 5523 5658 5657 +3 5522 5523 5657 +3 5658 5792 5791 +3 5657 5658 5791 +3 5792 5924 5923 +3 5791 5792 5923 +3 5924 6056 6055 +3 5923 5924 6055 +3 6056 6186 6185 +3 6055 6056 6185 +3 6186 6315 6314 +3 6185 6186 6314 +3 6315 6442 6441 +3 6314 6315 6441 +3 6442 6568 6567 +3 6441 6442 6567 +3 6568 6693 6692 +3 6567 6568 6692 +3 6693 6820 6819 +3 6692 6693 6819 +3 6820 6136 6133 +3 6819 6820 6133 +3 6136 4384 4779 +3 6133 6136 4779 +3 4384 3971 3707 +3 4779 4384 3707 +3 3971 2892 3031 +3 3707 3971 3031 +3 3175 3315 3031 +3 2892 3175 3031 +3 3175 5858 5859 +3 3175 5859 3315 +3 13916 14014 13915 +3 11319 13888 935 +3 14205 14303 14302 +3 14204 14205 14302 +3 12042 12205 12660 +3 13198 11134 3340 +3 35550 35867 35653 +3 29079 29217 35779 +3 6743 9096 6742 +3 6734 6735 902 +3 13916 13915 13817 +3 31645 31557 31646 +3 22417 7405 35000 +3 921 1040 920 +3 3168 3169 5854 +3 5836 5968 5835 +3 4109 2618 2619 +3 35843 35794 35383 +3 13020 13114 7467 +3 2460 2595 2594 +3 2730 2866 2729 +3 312 421 311 +3 6739 6738 8460 +3 1938 1939 2063 +3 2865 2864 2728 +3 6746 6745 6620 +3 2729 2865 2728 +3 34807 34936 34806 +3 6621 6746 6620 +3 10474 259 6000 +3 6239 6368 6238 +3 73 59 2516 +3 3716 73 2516 +3 59 4132 812 +3 2516 59 812 +3 1184 222 6253 +3 4132 6253 812 +3 13958 12042 13209 +3 3057 13191 3201 +3 11777 13314 35545 +3 11894 13581 13483 +3 20377 20461 20376 +3 3593 3127 3723 +3 23207 23305 23206 +3 17982 19491 23410 +3 15157 15155 20412 +3 4193 4328 17246 +3 23010 23108 23009 +3 17017 17016 589 +3 381 495 494 +3 380 381 494 +3 495 610 609 +3 494 495 609 +3 610 728 727 +3 609 610 727 +3 728 847 846 +3 727 728 846 +3 847 966 965 +3 846 847 965 +3 966 1084 1083 +3 965 966 1083 +3 1084 1200 1199 +3 1083 1084 1199 +3 1316 1315 1199 +3 1200 1316 1199 +3 1432 1431 1315 +3 1316 1432 1315 +3 1548 1547 1431 +3 1432 1548 1431 +3 1665 1664 1547 +3 1548 1665 1547 +3 1782 1781 1664 +3 1665 1782 1664 +3 1782 1902 1901 +3 1781 1782 1901 +3 1902 2027 2026 +3 1901 1902 2026 +3 2027 2156 2155 +3 2026 2027 2155 +3 2156 2288 2287 +3 2155 2156 2287 +3 2288 2422 2421 +3 2287 2288 2421 +3 2422 2557 2556 +3 2421 2422 2556 +3 2557 2692 2691 +3 2556 2557 2691 +3 2692 2828 2827 +3 2691 2692 2827 +3 2828 2967 2966 +3 2827 2828 2966 +3 2967 3108 3107 +3 2966 2967 3107 +3 3248 3247 3107 +3 3108 3248 3107 +3 3387 3386 3247 +3 3248 3387 3247 +3 3520 3519 3386 +3 3387 3520 3386 +3 3650 3649 3519 +3 3520 3650 3519 +3 3782 3781 3649 +3 3650 3782 3649 +3 3782 3914 3913 +3 3781 3782 3913 +3 3914 4048 4047 +3 3913 3914 4047 +3 4048 4181 4180 +3 4047 4048 4180 +3 4181 4314 4313 +3 4180 4181 4313 +3 4448 4447 4313 +3 4314 4448 4313 +3 4582 4581 4447 +3 4448 4582 4447 +3 4716 4715 4581 +3 4582 4716 4581 +3 4716 4851 4850 +3 4715 4716 4850 +3 4986 4985 4850 +3 4851 4986 4850 +3 5121 5120 4985 +3 4986 5121 4985 +3 5255 5254 5120 +3 5121 5255 5120 +3 5390 5389 5254 +3 5255 5390 5254 +3 5524 5523 5389 +3 5390 5524 5389 +3 5524 5659 5658 +3 5523 5524 5658 +3 5793 5792 5658 +3 5659 5793 5658 +3 5793 5925 5924 +3 5792 5793 5924 +3 5925 6057 6056 +3 5924 5925 6056 +3 6057 6187 6186 +3 6056 6057 6186 +3 6187 6316 6315 +3 6186 6187 6315 +3 6316 6443 6442 +3 6315 6316 6442 +3 6443 6569 6568 +3 6442 6443 6568 +3 6569 6694 6693 +3 6568 6569 6693 +3 6694 6821 6820 +3 6693 6694 6820 +3 6821 1841 6136 +3 6820 6821 6136 +3 1841 1048 4384 +3 6136 1841 4384 +3 1048 3437 3971 +3 4384 1048 3971 +3 3437 5984 2892 +3 3971 3437 2892 +3 5984 3034 3175 +3 2892 5984 3175 +3 5989 3262 5858 +3 3034 5858 3175 +3 14014 14013 13915 +3 13888 13493 935 +3 15696 14619 16037 +3 11516 11583 11582 +3 12407 12496 12406 +3 8332 13671 13573 +3 12038 11724 35731 +3 7990 8106 8105 +3 6364 6365 6491 +3 35678 35666 35402 +3 2744 2746 2339 +3 9679 6119 5988 +3 6367 6366 6237 +3 6238 6367 6237 +3 1257 1256 2749 +3 4227 4360 4359 +3 11804 6916 6848 +3 5162 5296 5295 +3 416 530 529 +3 3146 3286 3145 +3 35869 35453 35926 +3 530 645 644 +3 1002 1120 1119 +3 2368 2236 2237 +3 1585 1702 1701 +3 2593 2594 2728 +3 6746 1885 1883 +3 6745 6746 1883 +3 2731 2867 2730 +3 6480 6481 6606 +3 13789 14736 16774 +3 11242 3716 259 +3 574 4131 4132 +3 59 574 4132 +3 4131 560 6253 +3 4132 4131 6253 +3 6384 1856 63 +3 3349 109 200 +3 8902 11646 10385 +3 12407 12406 12320 +3 8345 8327 8344 +3 2097 4127 4250 +3 22415 22416 22513 +3 23004 23003 22904 +3 23402 23401 23304 +3 243 3265 5006 +3 14878 14879 14998 +3 11862 15733 12538 +3 13618 35561 35736 +3 35699 35604 35540 +3 496 611 610 +3 495 496 610 +3 611 729 728 +3 610 611 728 +3 729 848 847 +3 728 729 847 +3 848 967 966 +3 847 848 966 +3 967 1085 1084 +3 966 967 1084 +3 1201 1200 1084 +3 1085 1201 1084 +3 1317 1316 1200 +3 1201 1317 1200 +3 1433 1432 1316 +3 1317 1433 1316 +3 1549 1548 1432 +3 1433 1549 1432 +3 1666 1665 1548 +3 1549 1666 1548 +3 1783 1782 1665 +3 1666 1783 1665 +3 1903 1902 1782 +3 1783 1903 1782 +3 2028 2027 1902 +3 1903 2028 1902 +3 2028 2157 2156 +3 2027 2028 2156 +3 2289 2288 2156 +3 2157 2289 2156 +3 2423 2422 2288 +3 2289 2423 2288 +3 2558 2557 2422 +3 2423 2558 2422 +3 2693 2692 2557 +3 2558 2693 2557 +3 2693 2829 2828 +3 2692 2693 2828 +3 2829 2968 2967 +3 2828 2829 2967 +3 3109 3108 2967 +3 2968 3109 2967 +3 3249 3248 3108 +3 3109 3249 3108 +3 3388 3387 3248 +3 3249 3388 3248 +3 3521 3520 3387 +3 3388 3521 3387 +3 3651 3650 3520 +3 3521 3651 3520 +3 3783 3782 3650 +3 3651 3783 3650 +3 3783 3915 3914 +3 3782 3783 3914 +3 3915 4049 4048 +3 3914 3915 4048 +3 4049 4182 4181 +3 4048 4049 4181 +3 4182 4315 4314 +3 4181 4182 4314 +3 4449 4448 4314 +3 4315 4449 4314 +3 4583 4582 4448 +3 4449 4583 4448 +3 4583 4717 4716 +3 4582 4583 4716 +3 4717 4852 4851 +3 4716 4717 4851 +3 4852 4987 4986 +3 4851 4852 4986 +3 5122 5121 4986 +3 4987 5122 4986 +3 5256 5255 5121 +3 5122 5256 5121 +3 5391 5390 5255 +3 5256 5391 5255 +3 5525 5524 5390 +3 5391 5525 5390 +3 5660 5659 5524 +3 5525 5660 5524 +3 5794 5793 5659 +3 5660 5794 5659 +3 5926 5925 5793 +3 5794 5926 5793 +3 5926 6058 6057 +3 5925 5926 6057 +3 6058 6188 6187 +3 6057 6058 6187 +3 6188 6317 6316 +3 6187 6188 6316 +3 6317 6444 6443 +3 6316 6317 6443 +3 6444 6570 6569 +3 6443 6444 6569 +3 6570 6695 6694 +3 6569 6570 6694 +3 6695 6822 6821 +3 6694 6695 6821 +3 6822 1840 1841 +3 6821 6822 1841 +3 1840 4251 1048 +3 1841 1840 1048 +3 4251 3442 3437 +3 1048 4251 3437 +3 3442 5853 5984 +3 3437 3442 5984 +3 2895 3034 5984 +3 5853 2895 5984 +3 5989 6120 15394 +3 2895 5989 3034 +3 13818 13916 13817 +3 2498 11319 2497 +3 12680 12679 12589 +3 12590 12680 12589 +3 11585 11660 11584 +3 8870 16667 16824 +3 14185 3178 3735 +3 32508 32507 32402 +3 2070 2069 1944 +3 4495 4496 4629 +3 1825 1824 1707 +3 6367 6494 6366 +3 647 646 531 +3 5168 5169 5302 +3 6494 6493 6366 +3 5161 5162 5295 +3 5034 5169 5168 +3 450 449 6727 +3 5027 5162 5161 +3 2866 2865 2729 +3 4621 4622 4755 +3 894 893 774 +3 35631 35439 35874 +3 1939 2064 2063 +3 1236 1237 1352 +3 1885 191 2000 +3 1883 1885 2000 +3 3843 2480 2616 +3 6366 6493 6365 +3 35448 35567 35687 +3 5035 5036 5170 +3 575 3998 4131 +3 574 575 4131 +3 3998 445 560 +3 4131 3998 560 +3 200 199 3349 +3 445 200 560 +3 14258 13519 11261 +3 12465 13415 13212 +3 12726 12051 12133 +3 13320 11129 13769 +3 35928 13304 12208 +3 20209 20208 20123 +3 9528 243 5006 +3 15567 677 4376 +3 22319 22416 22415 +3 15155 15734 20412 +3 14654 14872 1655 +3 1563 7113 15017 +3 35836 35709 35692 +3 14399 14418 14398 +3 35885 35922 35872 +3 5147 5148 5282 +3 730 849 848 +3 729 730 848 +3 849 968 967 +3 848 849 967 +3 1086 1085 967 +3 968 1086 967 +3 1086 1202 1201 +3 1085 1086 1201 +3 1318 1317 1201 +3 1202 1318 1201 +3 1434 1433 1317 +3 1318 1434 1317 +3 1550 1549 1433 +3 1434 1550 1433 +3 1667 1666 1549 +3 1550 1667 1549 +3 1784 1783 1666 +3 1667 1784 1666 +3 1904 1903 1783 +3 1784 1904 1783 +3 2029 2028 1903 +3 1904 2029 1903 +3 2158 2157 2028 +3 2029 2158 2028 +3 2290 2289 2157 +3 2158 2290 2157 +3 2290 2424 2423 +3 2289 2290 2423 +3 2559 2558 2423 +3 2424 2559 2423 +3 2559 2694 2693 +3 2558 2559 2693 +3 2694 2830 2829 +3 2693 2694 2829 +3 2830 2969 2968 +3 2829 2830 2968 +3 2969 3110 3109 +3 2968 2969 3109 +3 3250 3249 3109 +3 3110 3250 3109 +3 3389 3388 3249 +3 3250 3389 3249 +3 3522 3521 3388 +3 3389 3522 3388 +3 3652 3651 3521 +3 3522 3652 3521 +3 3784 3783 3651 +3 3652 3784 3651 +3 3784 3916 3915 +3 3783 3784 3915 +3 3916 4050 4049 +3 3915 3916 4049 +3 4050 4183 4182 +3 4049 4050 4182 +3 4183 4316 4315 +3 4182 4183 4315 +3 4450 4449 4315 +3 4316 4450 4315 +3 4450 4584 4583 +3 4449 4450 4583 +3 4718 4717 4583 +3 4584 4718 4583 +3 4718 4853 4852 +3 4717 4718 4852 +3 4853 4988 4987 +3 4852 4853 4987 +3 5123 5122 4987 +3 4988 5123 4987 +3 5257 5256 5122 +3 5123 5257 5122 +3 5392 5391 5256 +3 5257 5392 5256 +3 5526 5525 5391 +3 5392 5526 5391 +3 5661 5660 5525 +3 5526 5661 5525 +3 5795 5794 5660 +3 5661 5795 5660 +3 5927 5926 5794 +3 5795 5927 5794 +3 5927 6059 6058 +3 5926 5927 6058 +3 6189 6188 6058 +3 6059 6189 6058 +3 6318 6317 6188 +3 6189 6318 6188 +3 6445 6444 6317 +3 6318 6445 6317 +3 6445 6571 6570 +3 6444 6445 6570 +3 6571 6696 6695 +3 6570 6571 6695 +3 6696 6823 6822 +3 6695 6696 6822 +3 6823 1723 1840 +3 6822 6823 1840 +3 1723 1491 4251 +3 1840 1723 4251 +3 1491 3443 3442 +3 4251 1491 3442 +3 3443 5720 5853 +3 3442 3443 5853 +3 2759 2895 5853 +3 5720 2759 5853 +3 6120 6249 4814 +3 2759 6120 2895 +3 14308 14307 14209 +3 12475 13096 14087 +3 11604 11603 11536 +3 23107 23106 23008 +3 12329 12328 12243 +3 13361 13456 13360 +3 7244 7245 418 +3 13868 13773 13675 +3 3828 3829 10394 +3 9106 2083 179 +3 4492 4626 4625 +3 546 15176 4127 +3 6619 6620 6744 +3 6494 6620 6619 +3 10513 4094 4093 +3 4087 4088 4220 +3 4488 4489 4622 +3 5026 5027 5161 +3 2866 3005 2865 +3 3005 3146 3004 +3 10759 8029 6770 +3 3818 3950 3949 +3 1469 1468 1352 +3 1152 4526 2094 +3 2070 2199 2069 +3 1752 1868 1751 +3 6493 6619 6618 +3 6610 6735 6734 +3 5171 5305 5304 +3 6492 6493 6618 +3 11014 4631 4630 +3 5459 5324 1727 +3 3866 1742 445 +3 3998 3866 445 +3 1742 199 200 +3 445 1742 200 +3 12465 40 13415 +3 295 6642 15565 +3 13769 13868 13675 +3 13986 13889 8977 +3 11412 31475 11413 +3 35373 35432 35361 +3 677 1829 4376 +3 6254 23897 170 +3 1829 243 9528 +3 4376 1829 9528 +3 15733 15597 12538 +3 22461 168 2786 +3 1660 1563 15017 +3 15017 7113 14585 +3 15834 15061 15049 +3 15799 15834 15049 +3 16287 16432 16286 +3 22218 22314 22313 +3 731 850 849 +3 25871 1775 25730 +3 850 969 968 +3 849 850 968 +3 969 1087 1086 +3 968 969 1086 +3 1087 1203 1202 +3 1086 1087 1202 +3 1319 1318 1202 +3 1203 1319 1202 +3 1435 1434 1318 +3 1319 1435 1318 +3 1551 1550 1434 +3 1435 1551 1434 +3 1668 1667 1550 +3 1551 1668 1550 +3 1785 1784 1667 +3 1668 1785 1667 +3 1905 1904 1784 +3 1785 1905 1784 +3 2030 2029 1904 +3 1905 2030 1904 +3 2159 2158 2029 +3 2030 2159 2029 +3 2291 2290 2158 +3 2159 2291 2158 +3 2425 2424 2290 +3 2291 2425 2290 +3 2560 2559 2424 +3 2425 2560 2424 +3 2695 2694 2559 +3 2560 2695 2559 +3 2695 2831 2830 +3 2694 2695 2830 +3 2831 2970 2969 +3 2830 2831 2969 +3 2970 3111 3110 +3 2969 2970 3110 +3 3111 3251 3250 +3 3110 3111 3250 +3 3390 3389 3250 +3 3251 3390 3250 +3 3523 3522 3389 +3 3390 3523 3389 +3 3653 3652 3522 +3 3523 3653 3522 +3 3785 3784 3652 +3 3653 3785 3652 +3 3917 3916 3784 +3 3785 3917 3784 +3 4051 4050 3916 +3 3917 4051 3916 +3 4184 4183 4050 +3 4051 4184 4050 +3 4317 4316 4183 +3 4184 4317 4183 +3 4317 4451 4450 +3 4316 4317 4450 +3 4451 4585 4584 +3 4450 4451 4584 +3 4719 4718 4584 +3 4585 4719 4584 +3 4719 4854 4853 +3 4718 4719 4853 +3 4854 4989 4988 +3 4853 4854 4988 +3 5124 5123 4988 +3 4989 5124 4988 +3 5258 5257 5123 +3 5124 5258 5123 +3 5393 5392 5257 +3 5258 5393 5257 +3 5527 5526 5392 +3 5393 5527 5392 +3 5662 5661 5526 +3 5527 5662 5526 +3 5796 5795 5661 +3 5662 5796 5661 +3 5928 5927 5795 +3 5796 5928 5795 +3 6060 6059 5927 +3 5928 6060 5927 +3 6190 6189 6059 +3 6060 6190 6059 +3 6319 6318 6189 +3 6190 6319 6189 +3 6446 6445 6318 +3 6319 6446 6318 +3 6572 6571 6445 +3 6446 6572 6445 +3 6697 6696 6571 +3 6572 6697 6571 +3 6697 6824 6823 +3 6696 6697 6823 +3 6824 1722 1723 +3 6823 6824 1723 +3 1722 3839 1491 +3 1723 1722 1491 +3 3839 3444 3443 +3 1491 3839 3443 +3 5586 5720 3443 +3 3444 5586 3443 +3 2624 2759 5720 +3 5586 2624 5720 +3 2489 6249 2624 +3 2759 2624 6120 +3 14016 14114 14015 +3 14210 14308 14209 +3 13027 6957 11128 +3 13782 12898 1754 +3 2388 12640 14164 +3 11949 12367 12912 +3 23990 24889 20435 +3 5695 8843 5333 +3 13773 12819 12727 +3 3181 15971 3460 +3 3952 4086 3951 +3 3820 3952 3819 +3 1472 1588 1471 +3 6493 6494 6619 +3 6745 1883 1882 +3 6734 902 696 +3 6729 6728 6603 +3 4623 4757 4756 +3 4757 4892 4891 +3 3286 3285 3145 +3 3146 3145 3004 +3 2370 8950 2369 +3 1983 2108 2107 +3 16793 15901 5701 +3 530 531 645 +3 14473 12056 16318 +3 5292 5291 5157 +3 2196 2195 2066 +3 4127 15176 15175 +3 6619 6744 6743 +3 6500 6501 6626 +3 2220 2352 5459 +3 6618 6619 6743 +3 334 1742 3866 +3 10733 575 10858 +3 334 198 199 +3 1742 334 199 +3 15565 6642 936 +3 199 198 295 +3 8843 3476 4391 +3 907 19101 4512 +3 12131 13100 35708 +3 31552 31551 26516 +3 7196 8117 10454 +3 2942 252 2761 +3 5272 15046 2102 +3 17246 17245 17081 +3 223 677 15567 +3 1682 1798 4328 +3 4193 1682 4328 +3 14879 14999 14998 +3 9915 9304 9539 +3 15061 16687 16669 +3 15049 15061 16669 +3 16911 16910 16752 +3 22411 22412 22509 +3 849 730 731 +3 4934 1499 14435 +3 851 970 969 +3 850 851 969 +3 970 1088 1087 +3 969 970 1087 +3 1088 1204 1203 +3 1087 1088 1203 +3 1320 1319 1203 +3 1204 1320 1203 +3 1436 1435 1319 +3 1320 1436 1319 +3 1552 1551 1435 +3 1436 1552 1435 +3 1669 1668 1551 +3 1552 1669 1551 +3 1786 1785 1668 +3 1669 1786 1668 +3 1906 1905 1785 +3 1786 1906 1785 +3 2031 2030 1905 +3 1906 2031 1905 +3 2160 2159 2030 +3 2031 2160 2030 +3 2292 2291 2159 +3 2160 2292 2159 +3 2426 2425 2291 +3 2292 2426 2291 +3 2561 2560 2425 +3 2426 2561 2425 +3 2696 2695 2560 +3 2561 2696 2560 +3 2832 2831 2695 +3 2696 2832 2695 +3 2971 2970 2831 +3 2832 2971 2831 +3 3112 3111 2970 +3 2971 3112 2970 +3 3252 3251 3111 +3 3112 3252 3111 +3 3391 3390 3251 +3 3252 3391 3251 +3 3524 3523 3390 +3 3391 3524 3390 +3 3654 3653 3523 +3 3524 3654 3523 +3 3786 3785 3653 +3 3654 3786 3653 +3 3918 3917 3785 +3 3786 3918 3785 +3 4052 4051 3917 +3 3918 4052 3917 +3 4185 4184 4051 +3 4052 4185 4051 +3 4185 4318 4317 +3 4184 4185 4317 +3 4318 4452 4451 +3 4317 4318 4451 +3 4586 4585 4451 +3 4452 4586 4451 +3 4586 4720 4719 +3 4585 4586 4719 +3 4720 4855 4854 +3 4719 4720 4854 +3 4855 4990 4989 +3 4854 4855 4989 +3 5125 5124 4989 +3 4990 5125 4989 +3 5259 5258 5124 +3 5125 5259 5124 +3 5394 5393 5258 +3 5259 5394 5258 +3 5528 5527 5393 +3 5394 5528 5393 +3 5663 5662 5527 +3 5528 5663 5527 +3 5797 5796 5662 +3 5663 5797 5662 +3 5929 5928 5796 +3 5797 5929 5796 +3 6061 6060 5928 +3 5929 6061 5928 +3 6191 6190 6060 +3 6061 6191 6060 +3 6320 6319 6190 +3 6191 6320 6190 +3 6447 6446 6319 +3 6320 6447 6319 +3 6573 6572 6446 +3 6447 6573 6446 +3 6698 6697 6572 +3 6573 6698 6572 +3 6698 6825 6824 +3 6697 6698 6824 +3 1606 1722 6824 +3 6825 1606 6824 +3 660 3839 1722 +3 1606 660 1722 +3 660 3577 3444 +3 3839 660 3444 +3 3577 5453 5586 +3 3444 3577 5586 +3 5453 2489 2624 +3 5586 5453 2624 +3 11993 12074 11992 +3 5318 2488 2489 +3 14114 14210 14209 +3 14113 14114 14209 +3 900 12898 13782 +3 11128 900 13782 +3 10240 4657 5061 +3 12898 10240 1754 +3 14285 9990 11362 +3 20857 20858 20937 +3 14120 14216 14215 +3 14211 14309 14210 +3 5965 6097 6096 +3 2605 2740 2604 +3 5305 5306 5440 +3 2649 2784 2783 +3 3002 3003 3143 +3 6620 6745 6744 +3 4622 4623 4756 +3 3144 3284 3283 +3 2202 2334 2333 +3 1957 1958 2756 +3 775 774 656 +3 2595 2730 2594 +3 775 894 774 +3 12233 12318 12317 +3 678 3969 664 +3 534 649 533 +3 4217 4218 4350 +3 3059 9516 7763 +3 12160 12159 12077 +3 11270 2356 11269 +3 212 1882 1883 +3 1642 1882 8350 +3 5324 1728 1727 +3 5304 5305 5439 +3 4250 15175 4130 +3 9305 10815 5183 +3 197 936 6642 +3 198 197 6642 +3 5320 4512 5455 +3 6793 7474 7819 +3 15456 15070 15069 +3 3476 4649 4391 +3 3182 20947 14871 +3 9528 5006 5000 +3 16694 4130 4655 +3 2761 223 15567 +3 3490 252 3489 +3 4945 5080 1798 +3 1682 4945 1798 +3 14765 14766 14878 +3 15370 14994 15167 +3 16687 1070 1534 +3 16669 16687 1534 +3 20617 21415 21414 +3 20811 20050 20049 +3 15973 4934 14435 +3 2399 4001 588 +3 18102 851 850 +3 23129 23031 23420 +3 2714 19845 19732 +3 35733 35512 35879 +3 1089 1205 1204 +3 1088 1089 1204 +3 1321 1320 1204 +3 1205 1321 1204 +3 1437 1436 1320 +3 1321 1437 1320 +3 1553 1552 1436 +3 1437 1553 1436 +3 1670 1669 1552 +3 1553 1670 1552 +3 1787 1786 1669 +3 1670 1787 1669 +3 1907 1906 1786 +3 1787 1907 1786 +3 2032 2031 1906 +3 1907 2032 1906 +3 2161 2160 2031 +3 2032 2161 2031 +3 2293 2292 2160 +3 2161 2293 2160 +3 2427 2426 2292 +3 2293 2427 2292 +3 2562 2561 2426 +3 2427 2562 2426 +3 2697 2696 2561 +3 2562 2697 2561 +3 2833 2832 2696 +3 2697 2833 2696 +3 2972 2971 2832 +3 2833 2972 2832 +3 3113 3112 2971 +3 2972 3113 2971 +3 3253 3252 3112 +3 3113 3253 3112 +3 3392 3391 3252 +3 3253 3392 3252 +3 3525 3524 3391 +3 3392 3525 3391 +3 3655 3654 3524 +3 3525 3655 3524 +3 3787 3786 3654 +3 3655 3787 3654 +3 3919 3918 3786 +3 3787 3919 3786 +3 4053 4052 3918 +3 3919 4053 3918 +3 4186 4185 4052 +3 4053 4186 4052 +3 4186 4319 4318 +3 4185 4186 4318 +3 4453 4452 4318 +3 4319 4453 4318 +3 4453 4587 4586 +3 4452 4453 4586 +3 4587 4721 4720 +3 4586 4587 4720 +3 4721 4856 4855 +3 4720 4721 4855 +3 4856 4991 4990 +3 4855 4856 4990 +3 5126 5125 4990 +3 4991 5126 4990 +3 5260 5259 5125 +3 5126 5260 5125 +3 5395 5394 5259 +3 5260 5395 5259 +3 5529 5528 5394 +3 5395 5529 5394 +3 5664 5663 5528 +3 5529 5664 5528 +3 5798 5797 5663 +3 5664 5798 5663 +3 5930 5929 5797 +3 5798 5930 5797 +3 6062 6061 5929 +3 5930 6062 5929 +3 6192 6191 6061 +3 6062 6192 6061 +3 6321 6320 6191 +3 6192 6321 6191 +3 6448 6447 6320 +3 6321 6448 6320 +3 6574 6573 6447 +3 6448 6574 6447 +3 6699 6698 6573 +3 6574 6699 6573 +3 6699 6826 6825 +3 6698 6699 6825 +3 6826 1605 1606 +3 6825 6826 1606 +3 662 660 1606 +3 1605 662 1606 +3 3578 3577 660 +3 662 3578 660 +3 5318 5453 3577 +3 3578 5318 3577 +3 3179 35352 35575 +3 5453 5318 2489 +3 11909 11993 11908 +3 12760 12761 12852 +3 11739 11823 11738 +3 14307 14308 8048 +3 11993 11992 11908 +3 12077 12076 11995 +3 772 891 890 +3 9417 7808 7924 +3 35447 35711 35822 +3 1120 1121 1236 +3 1714 1715 8589 +3 8204 8312 1752 +3 2648 2649 2783 +3 1943 1944 2068 +3 5440 5441 5574 +3 5441 5575 5574 +3 415 416 529 +3 1939 1940 2064 +3 5154 5155 5288 +3 4892 5027 5026 +3 2065 2194 2193 +3 34679 34807 34678 +3 2064 2065 2193 +3 2193 2194 2325 +3 649 648 533 +3 432 4383 3570 +3 6221 6222 6350 +3 4351 4485 4484 +3 6114 6244 6243 +3 6109 6239 6108 +3 319 7043 7044 +3 2202 2201 2072 +3 5440 5574 5573 +3 5170 5171 5304 +3 4655 15301 15302 +3 2469 2604 2468 +3 106 6666 936 +3 197 106 936 +3 1610 3219 2122 +3 30983 31044 30982 +3 4129 3476 8843 +3 3451 4129 8843 +3 11102 14846 8010 +3 1758 11708 12200 +3 17108 15287 8895 +3 5321 1213 2488 +3 252 223 2761 +3 3490 3489 4810 +3 4945 3488 3617 +3 5080 4945 3617 +3 7113 14679 14585 +3 15287 14612 8895 +3 1070 1445 3666 +3 1534 1070 3666 +3 22121 22122 22217 +3 3595 8682 3668 +3 1297 14588 947 +3 16658 16817 16816 +3 16442 16441 25614 +3 31078 31077 31016 +3 477 592 17809 +3 16638 2265 6987 +3 35731 35878 35767 +3 1089 1090 1205 +3 1322 1321 1205 +3 1206 1322 1205 +3 1438 1437 1321 +3 1322 1438 1321 +3 1554 1553 1437 +3 1438 1554 1437 +3 1671 1670 1553 +3 1554 1671 1553 +3 1788 1787 1670 +3 1671 1788 1670 +3 1908 1907 1787 +3 1788 1908 1787 +3 2033 2032 1907 +3 1908 2033 1907 +3 2162 2161 2032 +3 2033 2162 2032 +3 2294 2293 2161 +3 2162 2294 2161 +3 2428 2427 2293 +3 2294 2428 2293 +3 2563 2562 2427 +3 2428 2563 2427 +3 2698 2697 2562 +3 2563 2698 2562 +3 2834 2833 2697 +3 2698 2834 2697 +3 2973 2972 2833 +3 2834 2973 2833 +3 3114 3113 2972 +3 2973 3114 2972 +3 3254 3253 3113 +3 3114 3254 3113 +3 3393 3392 3253 +3 3254 3393 3253 +3 3393 3526 3525 +3 3392 3393 3525 +3 3656 3655 3525 +3 3526 3656 3525 +3 3788 3787 3655 +3 3656 3788 3655 +3 3920 3919 3787 +3 3788 3920 3787 +3 4054 4053 3919 +3 3920 4054 3919 +3 4187 4186 4053 +3 4054 4187 4053 +3 4320 4319 4186 +3 4187 4320 4186 +3 4454 4453 4319 +3 4320 4454 4319 +3 4454 4588 4587 +3 4453 4454 4587 +3 4588 4722 4721 +3 4587 4588 4721 +3 4722 4857 4856 +3 4721 4722 4856 +3 4992 4991 4856 +3 4857 4992 4856 +3 5127 5126 4991 +3 4992 5127 4991 +3 5261 5260 5126 +3 5127 5261 5126 +3 5396 5395 5260 +3 5261 5396 5260 +3 5530 5529 5395 +3 5396 5530 5395 +3 5665 5664 5529 +3 5530 5665 5529 +3 5799 5798 5664 +3 5665 5799 5664 +3 5931 5930 5798 +3 5799 5931 5798 +3 6063 6062 5930 +3 5931 6063 5930 +3 6193 6192 6062 +3 6063 6193 6062 +3 6322 6321 6192 +3 6193 6322 6192 +3 6449 6448 6321 +3 6322 6449 6321 +3 6575 6574 6448 +3 6449 6575 6448 +3 6700 6699 6574 +3 6575 6700 6574 +3 6827 6826 6699 +3 6700 6827 6699 +3 1489 1605 6826 +3 6827 1489 6826 +3 661 662 1605 +3 1489 661 1605 +3 3305 3578 662 +3 661 3305 662 +3 3305 5184 5318 +3 3578 3305 5318 +3 11804 7017 7016 +3 5318 5184 2488 +3 5155 5289 5288 +3 11520 11587 11519 +3 2732 2868 2731 +3 2726 2727 2862 +3 10500 12277 12278 +3 28993 35895 35441 +3 6603 6728 6602 +3 4352 4486 4485 +3 1869 1989 1988 +3 1868 1869 1988 +3 1989 2114 2113 +3 8420 1991 1870 +3 891 1010 890 +3 3593 3723 1484 +3 3301 3580 3704 +3 1006 1124 1005 +3 2195 2327 2194 +3 885 886 1004 +3 4489 4623 4622 +3 4756 4757 4891 +3 3561 3691 3690 +3 4222 4221 4088 +3 2730 2729 2594 +3 2194 2326 2325 +3 5568 5569 5703 +3 3950 3951 4084 +3 531 646 645 +3 457 450 6728 +3 35501 35421 35439 +3 6368 6367 6238 +3 6237 6366 6236 +3 5843 5975 5842 +3 5305 5440 5439 +3 6493 6492 6365 +3 2739 2738 2603 +3 5324 11394 1728 +3 15301 4655 15175 +3 2604 2603 2468 +3 6793 2122 6766 +3 6666 6793 6766 +3 35394 35714 35529 +3 5189 4414 1376 +3 2786 168 7064 +3 13007 12868 22244 +3 35821 35735 35694 +3 20124 20209 20123 +3 2916 14644 2310 +3 4675 3490 4810 +3 252 2942 3489 +3 2941 2940 3617 +3 3488 2941 3617 +3 15111 15237 15236 +3 35700 1022 35551 +3 1445 17172 1536 +3 3666 1445 1536 +3 22412 22510 22509 +3 22030 22126 22125 +3 16657 16658 16816 +3 582 2937 389 +3 23129 12868 13007 +3 22708 22807 22806 +3 16633 16638 6987 +3 2265 16469 16470 +3 30220 35496 35516 +3 15172 4244 15930 +3 1207 1323 1322 +3 1206 1207 1322 +3 1439 1438 1322 +3 1323 1439 1322 +3 1555 1554 1438 +3 1439 1555 1438 +3 1672 1671 1554 +3 1555 1672 1554 +3 1789 1788 1671 +3 1672 1789 1671 +3 1909 1908 1788 +3 1789 1909 1788 +3 2034 2033 1908 +3 1909 2034 1908 +3 2163 2162 2033 +3 2034 2163 2033 +3 2295 2294 2162 +3 2163 2295 2162 +3 2429 2428 2294 +3 2295 2429 2294 +3 2564 2563 2428 +3 2429 2564 2428 +3 2699 2698 2563 +3 2564 2699 2563 +3 2835 2834 2698 +3 2699 2835 2698 +3 2974 2973 2834 +3 2835 2974 2834 +3 3115 3114 2973 +3 2974 3115 2973 +3 3255 3254 3114 +3 3115 3255 3114 +3 3394 3393 3254 +3 3255 3394 3254 +3 3394 3527 3526 +3 3393 3394 3526 +3 3657 3656 3526 +3 3527 3657 3526 +3 3789 3788 3656 +3 3657 3789 3656 +3 3921 3920 3788 +3 3789 3921 3788 +3 4055 4054 3920 +3 3921 4055 3920 +3 4188 4187 4054 +3 4055 4188 4054 +3 4321 4320 4187 +3 4188 4321 4187 +3 4321 4455 4454 +3 4320 4321 4454 +3 4455 4589 4588 +3 4454 4455 4588 +3 4723 4722 4588 +3 4589 4723 4588 +3 4858 4857 4722 +3 4723 4858 4722 +3 4993 4992 4857 +3 4858 4993 4857 +3 4993 5128 5127 +3 4992 4993 5127 +3 5128 5262 5261 +3 5127 5128 5261 +3 5397 5396 5261 +3 5262 5397 5261 +3 5531 5530 5396 +3 5397 5531 5396 +3 5666 5665 5530 +3 5531 5666 5530 +3 5800 5799 5665 +3 5666 5800 5665 +3 5932 5931 5799 +3 5800 5932 5799 +3 6064 6063 5931 +3 5932 6064 5931 +3 6194 6193 6063 +3 6064 6194 6063 +3 6323 6322 6193 +3 6194 6323 6193 +3 6450 6449 6322 +3 6323 6450 6322 +3 6576 6575 6449 +3 6450 6576 6449 +3 6701 6700 6575 +3 6576 6701 6575 +3 6828 6827 6700 +3 6701 6828 6700 +3 3573 1489 6827 +3 6828 3573 6827 +3 781 661 1489 +3 3573 781 1489 +3 3304 3305 661 +3 781 3304 661 +3 3304 5050 5184 +3 3305 3304 5184 +3 8154 13958 11497 +3 5184 5050 5321 +3 4891 4892 5026 +3 4355 4489 4488 +3 14093 13997 9683 +3 4749 4750 4884 +3 13544 13545 13642 +3 11828 11914 11827 +3 11998 11997 11913 +3 14314 14313 14215 +3 1988 1989 2113 +3 2243 2242 2113 +3 8806 8913 8912 +3 1824 1944 1943 +3 2114 2243 2113 +3 1365 1364 1248 +3 769 770 888 +3 6487 6486 6359 +3 4895 5030 5029 +3 6101 6100 5968 +3 1356 1355 1239 +3 4354 4355 4488 +3 4089 4222 4088 +3 3005 3004 2865 +3 2326 2460 2459 +3 3696 3828 3695 +3 648 647 532 +3 4486 4620 4485 +3 1940 2065 2064 +3 4764 4765 4899 +3 2602 2603 2737 +3 1596 1595 1479 +3 15765 15904 7361 +3 6237 6236 6106 +3 6110 6240 6239 +3 1727 1728 3181 +3 6107 6237 6106 +3 2352 5324 5459 +3 5029 5030 5164 +3 35927 35726 35582 +3 6793 6666 7577 +3 15 5189 1376 +3 2122 15 1376 +3 12051 2388 14164 +3 3536 6769 3664 +3 12133 12051 14164 +3 9972 9855 9856 +3 35696 19537 20901 +3 5073 5207 15614 +3 2477 9063 16154 +3 2941 5207 5073 +3 1028 1738 15614 +3 2940 2941 5073 +3 5207 15618 15614 +3 3723 3855 1484 +3 579 15170 15046 +3 17172 17027 17026 +3 1536 17172 17026 +3 14432 20071 11947 +3 23316 15239 10705 +3 16817 16981 16980 +3 14435 1499 3081 +3 32638 32752 32751 +3 14871 20947 20057 +3 6987 2265 16470 +3 16469 6526 6017 +3 6409 35846 19143 +3 14980 15172 15930 +3 13025 35918 24801 +3 12132 35832 35784 +3 1440 1439 1323 +3 1324 1440 1323 +3 1556 1555 1439 +3 1440 1556 1439 +3 1673 1672 1555 +3 1556 1673 1555 +3 1790 1789 1672 +3 1673 1790 1672 +3 1910 1909 1789 +3 1790 1910 1789 +3 2035 2034 1909 +3 1910 2035 1909 +3 2164 2163 2034 +3 2035 2164 2034 +3 2296 2295 2163 +3 2164 2296 2163 +3 2430 2429 2295 +3 2296 2430 2295 +3 2565 2564 2429 +3 2430 2565 2429 +3 2700 2699 2564 +3 2565 2700 2564 +3 2836 2835 2699 +3 2700 2836 2699 +3 2975 2974 2835 +3 2836 2975 2835 +3 3116 3115 2974 +3 2975 3116 2974 +3 3256 3255 3115 +3 3116 3256 3115 +3 3395 3394 3255 +3 3256 3395 3255 +3 3528 3527 3394 +3 3395 3528 3394 +3 3658 3657 3527 +3 3528 3658 3527 +3 3790 3789 3657 +3 3658 3790 3657 +3 3922 3921 3789 +3 3790 3922 3789 +3 4056 4055 3921 +3 3922 4056 3921 +3 4056 4189 4188 +3 4055 4056 4188 +3 4189 4322 4321 +3 4188 4189 4321 +3 4322 4456 4455 +3 4321 4322 4455 +3 4456 4590 4589 +3 4455 4456 4589 +3 4724 4723 4589 +3 4590 4724 4589 +3 4859 4858 4723 +3 4724 4859 4723 +3 4994 4993 4858 +3 4859 4994 4858 +3 4994 5129 5128 +3 4993 4994 5128 +3 5129 5263 5262 +3 5128 5129 5262 +3 5398 5397 5262 +3 5263 5398 5262 +3 5532 5531 5397 +3 5398 5532 5397 +3 5667 5666 5531 +3 5532 5667 5531 +3 5801 5800 5666 +3 5667 5801 5666 +3 5933 5932 5800 +3 5801 5933 5800 +3 6065 6064 5932 +3 5933 6065 5932 +3 6195 6194 6064 +3 6065 6195 6064 +3 6324 6323 6194 +3 6195 6324 6194 +3 6451 6450 6323 +3 6324 6451 6323 +3 6577 6576 6450 +3 6451 6577 6450 +3 6702 6701 6576 +3 6577 6702 6576 +3 6829 6828 6701 +3 6702 6829 6701 +3 3703 3573 6828 +3 6829 3703 6828 +3 1599 781 3573 +3 3703 1599 3573 +3 3445 3304 781 +3 1599 3445 781 +3 35641 23855 35681 +3 3304 3445 5050 +3 12975 13069 12974 +3 2513 2512 2378 +3 1494 7763 3060 +3 35526 35574 35673 +3 9683 8570 12454 +3 13584 12720 12454 +3 12044 12113 11722 +3 1381 11970 13214 +3 6238 6237 6107 +3 9350 9351 9465 +3 2375 2374 2242 +3 2243 2375 2242 +3 2509 2508 2374 +3 2375 2509 2374 +3 3855 1485 1484 +3 6108 6107 5975 +3 9991 35396 11362 +3 34412 34549 34411 +3 1240 1356 1239 +3 543 658 542 +3 3955 4089 3954 +3 4222 4355 4354 +3 20295 20294 20208 +3 12571 13379 11249 +3 4753 4888 4887 +3 5437 5438 5571 +3 11949 11723 12367 +3 1702 1703 1819 +3 2591 2592 2726 +3 4890 4891 5025 +3 2727 2863 2862 +3 13675 13773 12727 +3 1481 1597 1480 +3 28314 28313 28196 +3 6366 6365 6236 +3 6107 6106 5974 +3 15203 22258 10482 +3 4888 5023 5022 +3 35358 35704 35446 +3 2616 2480 2220 +3 5829 4393 5189 +3 15 5829 5189 +3 3664 1387 131 +3 5189 4393 41 +3 11872 11786 12727 +3 11414 11464 11463 +3 2190 2191 2322 +3 433 14564 3350 +3 3267 433 3350 +3 17016 590 589 +3 17186 17016 17017 +3 15825 579 169 +3 15963 15825 169 +3 169 579 15046 +3 24999 15273 25001 +3 17027 17017 17018 +3 17026 17027 17018 +3 15738 15209 16449 +3 4516 11251 7457 +3 388 582 389 +3 16192 15437 14814 +3 23103 23201 23200 +3 15071 15462 15461 +3 16470 16469 6017 +3 6526 1170 2906 +3 11413 11414 11463 +3 905 1735 4095 +3 16550 16554 5610 +3 1441 1440 1324 +3 21305 35816 21488 +3 1557 1556 1440 +3 1441 1557 1440 +3 1674 1673 1556 +3 1557 1674 1556 +3 1791 1790 1673 +3 1674 1791 1673 +3 1911 1910 1790 +3 1791 1911 1790 +3 2036 2035 1910 +3 1911 2036 1910 +3 2165 2164 2035 +3 2036 2165 2035 +3 2297 2296 2164 +3 2165 2297 2164 +3 2431 2430 2296 +3 2297 2431 2296 +3 2566 2565 2430 +3 2431 2566 2430 +3 2701 2700 2565 +3 2566 2701 2565 +3 2837 2836 2700 +3 2701 2837 2700 +3 2976 2975 2836 +3 2837 2976 2836 +3 3117 3116 2975 +3 2976 3117 2975 +3 3257 3256 3116 +3 3117 3257 3116 +3 3396 3395 3256 +3 3257 3396 3256 +3 3529 3528 3395 +3 3396 3529 3395 +3 3529 3659 3658 +3 3528 3529 3658 +3 3659 3791 3790 +3 3658 3659 3790 +3 3791 3923 3922 +3 3790 3791 3922 +3 3923 4057 4056 +3 3922 3923 4056 +3 4057 4190 4189 +3 4056 4057 4189 +3 4190 4323 4322 +3 4189 4190 4322 +3 4323 4457 4456 +3 4322 4323 4456 +3 4457 4591 4590 +3 4456 4457 4590 +3 4725 4724 4590 +3 4591 4725 4590 +3 4860 4859 4724 +3 4725 4860 4724 +3 4995 4994 4859 +3 4860 4995 4859 +3 4995 5130 5129 +3 4994 4995 5129 +3 5130 5264 5263 +3 5129 5130 5263 +3 5399 5398 5263 +3 5264 5399 5263 +3 5399 5533 5532 +3 5398 5399 5532 +3 5533 5668 5667 +3 5532 5533 5667 +3 5802 5801 5667 +3 5668 5802 5667 +3 5934 5933 5801 +3 5802 5934 5801 +3 6066 6065 5933 +3 5934 6066 5933 +3 6196 6195 6065 +3 6066 6196 6065 +3 6325 6324 6195 +3 6196 6325 6195 +3 6452 6451 6324 +3 6325 6452 6324 +3 6578 6577 6451 +3 6452 6578 6451 +3 6578 6703 6702 +3 6577 6578 6702 +3 6830 6829 6702 +3 6703 6830 6702 +3 3702 3703 6829 +3 6830 3702 6829 +3 1607 1599 3703 +3 3702 1607 3703 +3 3303 3445 1599 +3 1607 3303 1599 +3 3312 1299 15815 +3 9864 8870 16218 +3 9516 4256 3060 +3 9445 12386 11135 +3 12763 12764 12855 +3 4256 7324 3060 +3 9399 9877 9993 +3 2914 13692 6005 +3 12772 12773 12864 +3 11880 12044 12207 +3 6108 6238 6107 +3 13191 11004 3201 +3 26073 21359 23747 +3 2644 2643 2508 +3 2509 2644 2508 +3 407 7233 408 +3 5976 6108 5975 +3 1158 1157 1039 +3 5849 5850 5981 +3 2094 4526 2093 +3 776 775 657 +3 429 543 428 +3 3289 3428 3288 +3 4221 4222 4354 +3 2094 2093 1958 +3 1704 1821 1820 +3 10597 6795 10969 +3 667 784 3704 +3 4348 4482 4347 +3 3580 2757 3710 +3 4481 4482 4615 +3 4482 4616 4615 +3 5026 5161 5160 +3 4087 4220 4219 +3 4252 2102 1602 +3 3004 3003 2864 +3 5975 6107 5974 +3 5975 5974 5842 +3 13019 12568 12925 +3 3169 5985 5854 +3 418 533 532 +3 3949 3948 3816 +3 7819 5829 15 +3 13387 13483 8008 +3 5057 1387 6769 +3 4393 5057 6769 +3 25941 26073 23747 +3 13676 12725 35800 +3 21359 24789 24840 +3 3350 14564 3328 +3 14564 2151 3328 +3 17027 17186 17017 +3 16624 17186 17027 +3 2668 589 16103 +3 16103 15963 3874 +3 17017 589 2668 +3 15963 169 3874 +3 17018 17017 2668 +3 589 15963 16103 +3 21933 10263 21934 +3 15198 8223 3339 +3 3622 15635 15501 +3 1327 858 1209 +3 20947 23417 20057 +3 22415 22414 22317 +3 6017 6526 2906 +3 1170 31 3743 +3 229 905 4095 +3 4677 4142 5588 +3 18478 1325 1324 +3 15375 15506 15505 +3 1558 1557 1441 +3 1442 1558 1441 +3 1675 1674 1557 +3 1558 1675 1557 +3 1792 1791 1674 +3 1675 1792 1674 +3 1912 1911 1791 +3 1792 1912 1791 +3 2037 2036 1911 +3 1912 2037 1911 +3 2166 2165 2036 +3 2037 2166 2036 +3 2298 2297 2165 +3 2166 2298 2165 +3 2432 2431 2297 +3 2298 2432 2297 +3 2567 2566 2431 +3 2432 2567 2431 +3 2702 2701 2566 +3 2567 2702 2566 +3 2838 2837 2701 +3 2702 2838 2701 +3 2977 2976 2837 +3 2838 2977 2837 +3 2977 3118 3117 +3 2976 2977 3117 +3 3118 3258 3257 +3 3117 3118 3257 +3 3397 3396 3257 +3 3258 3397 3257 +3 27612 21473 35847 +3 3396 3397 3529 +3 5282 14595 14630 +3 35555 35429 35487 +3 16587 16586 16434 +3 30771 26504 6874 +3 3791 3792 3923 +3 3659 3660 3791 +3 16656 16815 16655 +3 3792 3924 3923 +3 3924 4058 4057 +3 35516 35694 35779 +3 2178 3123 5882 +3 4058 4191 4190 +3 4191 4324 4323 +3 4818 19147 18485 +3 4592 4591 4457 +3 4458 4592 4457 +3 4592 4726 4725 +3 4591 4592 4725 +3 4726 4861 4860 +3 4725 4726 4860 +3 4861 4996 4995 +3 4860 4861 4995 +3 4996 5131 5130 +3 4995 4996 5130 +3 5131 5265 5264 +3 5130 5131 5264 +3 5265 5400 5399 +3 5264 5265 5399 +3 5400 5534 5533 +3 5399 5400 5533 +3 5534 5669 5668 +3 5533 5534 5668 +3 5669 5803 5802 +3 5668 5669 5802 +3 5935 5934 5802 +3 5803 5935 5802 +3 6067 6066 5934 +3 5935 6067 5934 +3 6197 6196 6066 +3 6067 6197 6066 +3 6326 6325 6196 +3 6197 6326 6196 +3 6453 6452 6325 +3 6326 6453 6325 +3 6579 6578 6452 +3 6453 6579 6452 +3 6704 6703 6578 +3 6579 6704 6578 +3 6831 6830 6703 +3 6704 6831 6703 +3 3572 3702 6830 +3 6831 3572 6830 +3 3728 1607 3702 +3 3572 3728 3702 +3 3302 3303 1607 +3 3728 3302 1607 +3 2491 2493 7776 +3 2122 1376 1610 +3 20209 20295 20208 +3 1384 3057 7324 +3 12164 12247 12163 +3 186 8578 7768 +3 4518 1385 3712 +3 16318 12056 16468 +3 12864 12865 12957 +3 12865 12958 12957 +3 23402 23403 5566 +3 28365 29021 5555 +3 35582 35446 35591 +3 28820 28953 28952 +3 8151 547 1140 +3 3659 3529 19880 +3 3951 4085 4084 +3 1140 1496 8151 +3 6374 6375 6501 +3 1817 1937 1816 +3 3560 3561 3690 +3 895 894 775 +3 3148 3288 3147 +3 3428 3561 3560 +3 11525 11524 11461 +3 3148 3147 3006 +3 12410 12499 12409 +3 1952 1831 2227 +3 5022 5157 5156 +3 6221 6350 6220 +3 1953 1954 5454 +3 3821 3953 3820 +3 5158 5292 5157 +3 2246 2247 2378 +3 6368 6495 6367 +3 4350 4351 4484 +3 5439 5440 5573 +3 6621 6620 6494 +3 5574 5709 5573 +3 5709 5708 5573 +3 5709 5843 5708 +3 5843 5842 5708 +3 35926 35453 35517 +3 9306 5057 10220 +3 35394 35529 35589 +3 1387 2126 131 +3 23747 21359 24840 +3 14661 14660 14568 +3 21284 5960 21283 +3 19433 19880 3529 +3 17172 16624 17027 +3 1444 16624 17172 +3 3874 169 5272 +3 4097 3997 16867 +3 14907 14908 7903 +3 20292 20377 20291 +3 739 18022 621 +3 17834 505 17929 +3 15239 23418 10705 +3 859 739 740 +3 3081 3622 15501 +3 16816 16817 16980 +3 11205 12142 11562 +3 22031 22127 22126 +3 2906 1170 3743 +3 31 15791 17182 +3 20380 20379 20294 +3 4142 3613 5884 +3 17122 16319 820 +3 15374 15375 15505 +3 4274 4142 5884 +3 1442 1443 1558 +3 33247 33356 33246 +3 1676 1675 1558 +3 1559 1676 1558 +3 1793 1792 1675 +3 1676 1793 1675 +3 1913 1912 1792 +3 1793 1913 1792 +3 2038 2037 1912 +3 1913 2038 1912 +3 2167 2166 2037 +3 2038 2167 2037 +3 2299 2298 2166 +3 2167 2299 2166 +3 2299 2433 2432 +3 2298 2299 2432 +3 2433 2568 2567 +3 2432 2433 2567 +3 2568 2703 2702 +3 2567 2568 2702 +3 2703 2839 2838 +3 2702 2703 2838 +3 2839 2978 2977 +3 2838 2839 2977 +3 2978 3119 3118 +3 2977 2978 3118 +3 3119 3259 3258 +3 3118 3119 3258 +3 16291 16436 16290 +3 13596 8670 13506 +3 11566 14367 14366 +3 3398 4413 4280 +3 16239 15299 2575 +3 16382 16239 2575 +3 16742 16741 16586 +3 16435 16587 16434 +3 7512 7626 927 +3 16774 16773 12572 +3 16535 14642 1563 +3 16481 16535 1563 +3 35482 35664 35868 +3 16846 16395 2231 +3 5883 2178 5882 +3 5216 3730 5217 +3 16899 17062 16898 +3 17062 17061 16898 +3 5009 19222 4873 +3 23304 23401 23400 +3 4727 4726 4592 +3 18074 19779 19623 +3 4862 4861 4726 +3 4727 4862 4726 +3 4862 4997 4996 +3 4861 4862 4996 +3 4997 5132 5131 +3 4996 4997 5131 +3 5132 5266 5265 +3 5131 5132 5265 +3 5266 5401 5400 +3 5265 5266 5400 +3 5401 5535 5534 +3 5400 5401 5534 +3 5535 5670 5669 +3 5534 5535 5669 +3 5804 5803 5669 +3 5670 5804 5669 +3 5936 5935 5803 +3 5804 5936 5803 +3 6068 6067 5935 +3 5936 6068 5935 +3 6198 6197 6067 +3 6068 6198 6067 +3 6327 6326 6197 +3 6198 6327 6197 +3 6454 6453 6326 +3 6327 6454 6326 +3 6580 6579 6453 +3 6454 6580 6453 +3 6705 6704 6579 +3 6580 6705 6579 +3 6832 6831 6704 +3 6705 6832 6704 +3 3440 3572 6831 +3 6832 3440 6831 +3 6757 3728 3572 +3 3440 6757 3572 +3 6757 3157 3302 +3 3728 6757 3302 +3 2913 9980 10390 +3 3978 4112 15972 +3 20295 20380 20294 +3 20464 20463 20379 +3 12682 12681 12591 +3 12592 12682 12591 +3 31475 11412 31476 +3 1616 4518 3712 +3 27 3181 10023 +3 19798 30601 30555 +3 12196 12219 12137 +3 11408 5562 1018 +3 8332 13609 13671 +3 14217 14315 14216 +3 417 531 530 +3 3295 3296 3434 +3 2062 2061 1936 +3 1937 2062 1936 +3 13826 13924 13825 +3 2600 2735 2599 +3 13097 13675 12638 +3 6728 450 6727 +3 3691 3823 3690 +3 17088 16924 16765 +3 5024 5025 5159 +3 11657 11656 11581 +3 6350 6477 6476 +3 763 764 882 +3 4620 4619 4485 +3 5587 1953 5454 +3 2881 5185 3580 +3 26735 18936 26624 +3 2514 2649 2648 +3 4894 4895 5029 +3 5581 5716 5715 +3 5580 5581 5715 +3 6752 2120 2011 +3 6751 6752 2011 +3 6626 6627 6751 +3 3948 3949 4082 +3 3817 3816 3684 +3 3949 4083 4082 +3 6940 209 7038 +3 29687 35542 29221 +3 4519 346 16959 +3 16959 4363 4519 +3 27088 27087 26971 +3 9313 10853 14314 +3 12004 27532 12086 +3 14661 12286 14570 +3 3328 2151 17176 +3 13608 35858 35444 +3 10090 10209 10208 +3 35519 35888 35847 +3 35493 35477 35590 +3 35892 35497 35395 +3 622 621 506 +3 507 622 506 +3 740 739 621 +3 622 740 621 +3 17236 4329 17235 +3 979 18205 859 +3 22074 9623 22068 +3 21112 21113 19910 +3 3743 31 17182 +3 15791 16242 16241 +3 35683 35770 35562 +3 15917 16059 15916 +3 16795 15521 16671 +3 3613 905 229 +3 5884 3613 229 +3 15506 15641 15640 +3 15505 15506 15640 +3 1560 1559 18673 +3 1559 1558 1443 +3 1560 1677 1676 +3 1676 1677 1793 +3 1794 1914 1913 +3 1793 1794 1913 +3 1914 2039 2038 +3 1913 1914 2038 +3 2039 2168 2167 +3 2038 2039 2167 +3 2168 2300 2299 +3 2167 2168 2299 +3 2300 2434 2433 +3 2299 2300 2433 +3 2434 2569 2568 +3 2433 2434 2568 +3 2569 2704 2703 +3 2568 2569 2703 +3 2704 2840 2839 +3 2703 2704 2839 +3 19011 19112 1526 +3 2839 2840 2978 +3 19497 19607 2570 +3 2978 2979 3119 +3 1487 3875 14616 +3 35451 35406 35814 +3 60 1058 20280 +3 16436 16435 16290 +3 505 17834 506 +3 2847 3398 4280 +3 14928 16509 16492 +3 14920 14928 16492 +3 5215 4116 5216 +3 16587 16742 16586 +3 3339 22856 7855 +3 22150 15599 22148 +3 17144 17145 165 +3 5492 3398 2847 +3 1657 5055 5143 +3 5055 2415 5143 +3 5883 5882 1851 +3 3730 5883 1851 +3 17226 17225 17061 +3 17062 17226 17061 +3 19135 35548 35393 +3 15599 9279 22148 +3 14642 15762 7113 +3 1563 14642 7113 +3 35542 29417 35408 +3 15697 4813 5082 +3 4863 4998 4997 +3 4862 4863 4997 +3 4998 5133 5132 +3 4997 4998 5132 +3 5133 5267 5266 +3 5132 5133 5266 +3 5267 5402 5401 +3 5266 5267 5401 +3 5402 5536 5535 +3 5401 5402 5535 +3 5671 5670 5535 +3 5536 5671 5535 +3 5805 5804 5670 +3 5671 5805 5670 +3 5937 5936 5804 +3 5805 5937 5804 +3 6069 6068 5936 +3 5937 6069 5936 +3 6199 6198 6068 +3 6069 6199 6068 +3 6328 6327 6198 +3 6199 6328 6198 +3 6455 6454 6327 +3 6328 6455 6327 +3 6581 6580 6454 +3 6455 6581 6454 +3 6706 6705 6580 +3 6581 6706 6580 +3 6833 6832 6705 +3 6706 6833 6705 +3 3439 3440 6832 +3 6833 3439 6832 +3 305 6757 3440 +3 3439 305 3440 +3 3840 3157 6757 +3 305 3840 6757 +3 15967 4112 3714 +3 3840 4112 3157 +3 20380 20464 20379 +3 13163 13258 13162 +3 12682 12771 12770 +3 12247 12332 12246 +3 12113 12196 12137 +3 12219 11484 12117 +3 11587 11662 11586 +3 12235 12236 12320 +3 25973 11838 23732 +3 23726 24746 24767 +3 23988 23989 23983 +3 25215 23759 25367 +3 716 717 835 +3 3556 3686 3555 +3 3296 3435 3434 +3 5716 5850 5849 +3 5850 5982 5981 +3 7043 319 318 +3 1473 1472 1356 +3 1357 1356 1240 +3 6502 6628 6627 +3 3823 3822 3690 +3 3823 3955 3822 +3 1820 1821 1940 +3 5160 5294 5293 +3 4886 4887 5021 +3 3556 3557 3686 +3 2323 2457 2456 +3 4482 4481 4347 +3 1001 1119 1118 +3 1586 1703 1702 +3 5463 30332 6531 +3 35467 29126 28944 +3 1147 3326 1146 +3 1944 2069 2068 +3 5038 5173 5172 +3 1358 1357 1241 +3 1014 1132 1013 +3 1708 1707 1590 +3 6354 6353 8520 +3 1122 1123 1238 +3 2743 2742 2341 +3 12640 11949 12912 +3 7859 7975 1400 +3 35730 35764 35644 +3 25528 12252 25368 +3 13505 4118 13596 +3 8556 11784 10827 +3 648 766 765 +3 784 3301 3704 +3 1626 8303 1625 +3 4483 4617 4616 +3 6222 6223 6351 +3 15362 5757 932 +3 16687 16691 1070 +3 508 507 393 +3 392 393 507 +3 623 622 507 +3 508 623 507 +3 741 740 622 +3 623 741 622 +3 860 859 740 +3 741 860 740 +3 35404 35724 35511 +3 860 979 859 +3 17182 15791 16241 +3 18389 18297 1097 +3 4147 15181 16695 +3 16202 16348 16201 +3 16202 16201 16058 +3 4677 5588 2171 +3 1919 4677 2171 +3 15640 15641 15777 +3 15641 15778 15777 +3 5951 15656 5488 +3 15246 15247 15374 +3 2171 5588 2170 +3 5588 4543 2170 +3 18871 1795 1794 +3 18871 1794 1677 +3 404 35576 11363 +3 1914 1915 2039 +3 19073 2040 1915 +3 2039 2040 2168 +3 2040 2169 2168 +3 2168 2169 2300 +3 35445 35531 35534 +3 35412 35924 35745 +3 35805 35862 14562 +3 2434 2435 2569 +3 19496 2570 2435 +3 2569 2570 2704 +3 5743 16703 4808 +3 19496 19497 2570 +3 1887 16052 15500 +3 35940 35538 5425 +3 17190 17188 16250 +3 16252 2149 17180 +3 14616 5200 400 +3 5200 1503 400 +3 7454 7363 13275 +3 12254 13303 8795 +3 20549 20548 20463 +3 15139 16796 16792 +3 16492 16509 699 +3 16509 2933 699 +3 5215 5216 1569 +3 1685 5215 1569 +3 22317 22316 22220 +3 17561 18175 18378 +3 5082 14783 14759 +3 2395 2261 4259 +3 6012 14641 3855 +3 2415 16251 3067 +3 3730 1851 5217 +3 2148 5055 1657 +3 4600 4599 17225 +3 17226 4600 17225 +3 23043 21402 15481 +3 1861 8626 8518 +3 16058 16201 16057 +3 16347 16346 16200 +3 9738 9739 9854 +3 14772 14885 14771 +3 29417 35883 35408 +3 3123 15566 4008 +3 5134 5133 4998 +3 4999 5134 4998 +3 5134 5268 5267 +3 5133 5134 5267 +3 5268 5403 5402 +3 5267 5268 5402 +3 5403 5537 5536 +3 5402 5403 5536 +3 5537 5672 5671 +3 5536 5537 5671 +3 5806 5805 5671 +3 5672 5806 5671 +3 5938 5937 5805 +3 5806 5938 5805 +3 6070 6069 5937 +3 5938 6070 5937 +3 6200 6199 6069 +3 6070 6200 6069 +3 6329 6328 6199 +3 6200 6329 6199 +3 6456 6455 6328 +3 6329 6456 6328 +3 6582 6581 6455 +3 6456 6582 6455 +3 6707 6706 6581 +3 6582 6707 6581 +3 6834 6833 6706 +3 6707 6834 6706 +3 3300 3439 6833 +3 6834 3300 6833 +3 3300 1284 305 +3 3439 3300 305 +3 3708 3840 305 +3 1284 3708 305 +3 3714 4112 3840 +3 3708 3714 3840 +3 13258 13354 13353 +3 35414 35434 35894 +3 20464 20549 20463 +3 20631 20630 20548 +3 12137 12219 12117 +3 35391 14562 35722 +3 13191 6384 11004 +3 1714 8589 8588 +3 26288 26229 23706 +3 24488 25528 25368 +3 1276 1277 1392 +3 3957 4091 3956 +3 5850 5717 5851 +3 1843 1725 16635 +3 2215 2216 5990 +3 651 652 769 +3 3298 2884 3438 +3 3969 3970 664 +3 3427 3428 3560 +3 3955 3954 3822 +3 6611 6612 6736 +3 3150 3290 3149 +3 6737 951 934 +3 3290 3289 3149 +3 2592 2727 2726 +3 1358 1474 1357 +3 4350 4484 4483 +3 2458 2459 2593 +3 28819 28820 28952 +3 6349 6350 6476 +3 5575 5576 5710 +3 5711 5845 5844 +3 35815 35500 35705 +3 4761 4762 4896 +3 4620 4621 4754 +3 3560 3690 3689 +3 3426 3427 3559 +3 3168 5854 5721 +3 2512 2513 2647 +3 20925 20845 25956 +3 5590 3166 3309 +3 28549 30774 29144 +3 11719 35782 3042 +3 35489 35690 12288 +3 815 3736 694 +3 4623 4624 4757 +3 6376 6377 6503 +3 1042 1043 1160 +3 1277 1393 1392 +3 5715 5716 5849 +3 1161 1277 1276 +3 5136 16701 14395 +3 1889 1444 1445 +3 394 17741 17742 +3 20549 20631 20548 +3 624 623 508 +3 509 624 508 +3 742 741 623 +3 624 742 623 +3 861 860 741 +3 742 861 741 +3 980 979 860 +3 861 980 860 +3 1098 1097 979 +3 980 1098 979 +3 7900 912 792 +3 17743 395 394 +3 16059 16202 16058 +3 16348 16347 16201 +3 4142 4274 5588 +3 4460 4461 17230 +3 14692 16795 16671 +3 15778 15917 15916 +3 14409 15792 15681 +3 15521 16795 14548 +3 5588 4274 4543 +3 4274 4407 4543 +3 29498 29497 29360 +3 1261 5195 8027 +3 13666 12305 3729 +3 29088 29087 28952 +3 13579 22343 22650 +3 30690 30691 30216 +3 35759 35569 35349 +3 15300 15301 15175 +3 5876 6772 14517 +3 15158 15547 16782 +3 2525 15022 15021 +3 4402 4638 2390 +3 2442 2310 591 +3 22217 22313 22312 +3 15457 15069 14948 +3 21197 21108 21109 +3 14703 16035 15160 +3 2934 16854 16853 +3 2933 5876 2483 +3 14517 16782 1501 +3 15021 14936 14928 +3 1503 4402 4269 +3 21770 20896 21775 +3 13847 4521 20194 +3 2129 939 4229 +3 14082 13673 13383 +3 17190 16250 16251 +3 2933 2483 2148 +3 4463 4600 17226 +3 17227 4463 17226 +3 16798 20663 16799 +3 22028 22029 22124 +3 16978 16979 17144 +3 5422 5423 16048 +3 3127 6012 3855 +3 16382 2575 15356 +3 5277 2148 1657 +3 699 2148 5277 +3 1569 1454 4599 +3 4600 1569 4599 +3 1053 5322 154 +3 20712 20711 20630 +3 16201 16347 16200 +3 16500 16499 16346 +3 15142 3620 14622 +3 14708 15039 14919 +3 5882 3123 4008 +3 3123 1997 2358 +3 17868 4999 19419 +3 1851 5882 2521 +3 5269 5268 5134 +3 16170 4823 4687 +3 5269 5404 5403 +3 5268 5269 5403 +3 5404 5538 5537 +3 5403 5404 5537 +3 5673 5672 5537 +3 5538 5673 5537 +3 5807 5806 5672 +3 5673 5807 5672 +3 5939 5938 5806 +3 5807 5939 5806 +3 6071 6070 5938 +3 5939 6071 5938 +3 6201 6200 6070 +3 6071 6201 6070 +3 6330 6329 6200 +3 6201 6330 6200 +3 6457 6456 6329 +3 6330 6457 6329 +3 6583 6582 6456 +3 6457 6583 6456 +3 6708 6707 6582 +3 6583 6708 6582 +3 9 6834 6707 +3 6708 9 6707 +3 437 3300 6834 +3 9 437 6834 +3 306 1284 3300 +3 437 306 3300 +3 3446 3708 1284 +3 306 3446 1284 +3 3584 3714 3708 +3 3446 3584 3708 +3 2487 6247 3714 +3 3584 2487 3714 +3 13257 13258 13353 +3 8029 7812 4265 +3 12953 12954 13047 +3 13048 13142 13141 +3 22267 20322 11710 +3 13877 9977 9858 +3 5960 22267 11710 +3 6492 6618 6617 +3 13867 13868 13608 +3 1393 1509 1392 +3 923 924 1042 +3 3293 3292 3152 +3 6490 6489 6363 +3 6752 6753 2120 +3 5156 5157 5290 +3 11525 11592 11524 +3 4089 4088 3954 +3 12477 1328 2626 +3 33022 32914 7527 +3 5554 5061 13771 +3 1592 1591 1475 +3 1474 1590 1473 +3 1590 1589 1473 +3 6613 6612 6486 +3 5854 1831 1952 +3 20631 20712 20630 +3 6747 6746 6621 +3 659 777 658 +3 659 658 543 +3 2600 2599 2464 +3 35541 35619 35761 +3 2065 2066 2194 +3 4755 4890 4889 +3 6105 6104 5972 +3 1249 1365 1248 +3 5973 6105 5972 +3 3153 3154 3293 +3 3294 3433 3432 +3 8561 9685 8200 +3 347 694 5473 +3 9064 7648 6617 +3 816 16483 815 +3 5473 694 3736 +3 1708 1825 1707 +3 1475 1591 1474 +3 2217 2218 5860 +3 1160 1161 1276 +3 805 924 923 +3 14994 15829 6015 +3 6362 6489 6361 +3 250 17625 17848 +3 509 395 510 +3 625 624 509 +3 510 625 509 +3 743 742 624 +3 625 743 624 +3 862 861 742 +3 743 862 742 +3 981 980 861 +3 862 981 861 +3 981 1099 1098 +3 980 981 1098 +3 1215 1214 1098 +3 1099 1215 1098 +3 16501 16500 16347 +3 1216 18582 1331 +3 1919 2171 4461 +3 17231 4460 17230 +3 15777 15778 15916 +3 16795 14547 14548 +3 16491 2669 16094 +3 16512 4783 15625 +3 4407 4274 3744 +3 4274 5884 3744 +3 4461 4462 17229 +3 17230 4461 17229 +3 22129 22128 22032 +3 29547 27410 28307 +3 16352 16505 16504 +3 22414 22413 22316 +3 16549 2934 16853 +3 516 792 791 +3 16511 6772 5876 +3 16510 16511 5876 +3 15022 14944 14936 +3 2390 2525 15021 +3 24789 25337 25336 +3 22121 22217 22216 +3 21136 23462 8795 +3 13699 23467 23365 +3 15175 4250 4127 +3 5488 14703 15160 +3 16782 17188 17190 +3 2483 14517 1501 +3 400 1503 4269 +3 4402 2390 578 +3 22120 22121 22216 +3 23462 23365 8795 +3 23147 22047 23131 +3 694 347 6770 +3 17180 16239 16382 +3 2415 17190 16251 +3 16900 16899 16741 +3 16742 16900 16741 +3 7064 14484 4688 +3 21653 21652 7291 +3 16979 16978 16814 +3 16815 16979 16814 +3 14641 16382 3855 +3 2575 546 15356 +3 700 699 5277 +3 6397 6270 348 +3 5216 5217 1454 +3 1569 5216 1454 +3 20893 15433 18898 +3 7400 6990 6536 +3 49 1060 2395 +3 16967 16958 15269 +3 14418 14417 14398 +3 4130 16694 1152 +3 15566 3123 2358 +3 1997 6397 6775 +3 16585 16584 16432 +3 5217 1851 5218 +3 23205 23206 23303 +3 13760 20010 15155 +3 35802 35511 35569 +3 5135 5269 5134 +3 35433 35478 35482 +3 25129 25128 35634 +3 5674 5673 5538 +3 5539 5674 5538 +3 5808 5807 5673 +3 5674 5808 5673 +3 5940 5939 5807 +3 5808 5940 5807 +3 6072 6071 5939 +3 5940 6072 5939 +3 6202 6201 6071 +3 6072 6202 6071 +3 6331 6330 6201 +3 6202 6331 6201 +3 6458 6457 6330 +3 6331 6458 6330 +3 6584 6583 6457 +3 6458 6584 6457 +3 6709 6708 6583 +3 6584 6709 6583 +3 10 9 6708 +3 6709 10 6708 +3 551 437 9 +3 10 551 9 +3 3837 306 437 +3 551 3837 437 +3 3579 3446 306 +3 3837 3579 306 +3 2344 3584 3446 +3 3579 2344 3446 +3 2486 2487 3584 +3 2344 2486 3584 +3 35357 35466 35616 +3 35719 27642 35925 +3 13047 13048 13141 +3 14251 7363 3859 +3 13884 13872 13226 +3 13227 13877 1136 +3 20794 20793 20711 +3 20712 20794 20711 +3 4242 4109 2619 +3 2884 2883 3438 +3 1043 1161 1160 +3 33550 804 803 +3 6232 6233 6361 +3 6233 6362 6361 +3 1709 1826 1708 +3 2735 2734 2599 +3 10806 10807 10931 +3 649 650 767 +3 3692 3691 3561 +3 4759 4894 4893 +3 1360 1476 1359 +3 1476 1592 1475 +3 6094 6224 6223 +3 6223 6224 6352 +3 26686 28944 29079 +3 6093 6094 6223 +3 5857 2342 7416 +3 2340 2341 5988 +3 315 425 424 +3 20794 20876 20875 +3 427 541 540 +3 2480 2345 2352 +3 5159 5293 5292 +3 2327 2326 2194 +3 1249 1248 1132 +3 4751 4752 4886 +3 13693 13239 5335 +3 3007 3006 2867 +3 14428 6121 5990 +3 12767 12768 12859 +3 35456 26803 11780 +3 9782 10759 347 +3 35802 35404 35511 +3 694 4265 815 +3 3969 3298 3438 +3 6477 6478 6603 +3 1124 1123 1005 +3 30565 30564 30430 +3 5290 5205 5289 +3 6103 6233 6102 +3 511 510 396 +3 8223 13278 3339 +3 626 625 510 +3 511 626 510 +3 744 743 625 +3 626 744 625 +3 863 862 743 +3 744 863 743 +3 982 981 862 +3 863 982 862 +3 1100 1099 981 +3 982 1100 981 +3 1216 1215 1099 +3 1100 1216 1099 +3 5818 5684 19023 +3 1215 1216 1331 +3 16059 16058 15916 +3 4460 1919 4461 +3 3872 16957 3492 +3 3069 14929 14412 +3 5884 229 19 +3 10991 10140 3482 +3 17230 17229 17065 +3 3744 5884 19 +3 23107 23205 23106 +3 2171 2170 4462 +3 15888 9176 2016 +3 22033 22129 22032 +3 7891 11697 14765 +3 14997 15120 15119 +3 16240 467 15300 +3 14774 14887 14773 +3 2170 4543 1801 +3 6772 15158 14517 +3 20288 21121 21120 +3 17229 4462 17228 +3 35615 11976 11314 +3 16437 16436 16291 +3 3531 16215 6146 +3 15069 15331 15460 +3 1501 16782 17190 +3 31017 30958 11427 +3 4269 4402 578 +3 17188 16252 16250 +3 21109 21108 21022 +3 2390 15021 14978 +3 52 1736 5 +3 25762 16147 25763 +3 16250 17180 14641 +3 35679 35501 35439 +3 17063 17062 16899 +3 14641 17180 16382 +3 22410 22411 22508 +3 16900 17063 16899 +3 17169 17005 9855 +3 21050 21212 17106 +3 35363 35839 35524 +3 16979 17145 17144 +3 15005 15004 14884 +3 14362 14349 15142 +3 462 14977 14951 +3 2178 1740 1997 +3 7064 4688 20727 +3 22411 22509 22508 +3 15932 14712 14510 +3 14578 14670 14577 +3 4413 4412 89 +3 2626 12836 12477 +3 22266 13340 15729 +3 2098 6121 14428 +3 2358 1997 6775 +3 6397 348 239 +3 5882 4008 2521 +3 1454 5217 2302 +3 12895 12962 12989 +3 35494 35770 35808 +3 16201 16200 16057 +3 14513 15755 15500 +3 15364 15236 15237 +3 31651 33340 11459 +3 5540 5675 5674 +3 5539 5540 5674 +3 5809 5808 5674 +3 5675 5809 5674 +3 5941 5940 5808 +3 5809 5941 5808 +3 6073 6072 5940 +3 5941 6073 5940 +3 6203 6202 6072 +3 6073 6203 6072 +3 6332 6331 6202 +3 6203 6332 6202 +3 6459 6458 6331 +3 6332 6459 6331 +3 6585 6584 6458 +3 6459 6585 6458 +3 6710 6709 6584 +3 6585 6710 6584 +3 33 10 6709 +3 6710 33 6709 +3 550 551 10 +3 33 550 10 +3 3834 3837 551 +3 550 3834 551 +3 3709 3579 3837 +3 3834 3709 3837 +3 4781 2344 3579 +3 3709 4781 3579 +3 2485 2486 2344 +3 4781 2485 2344 +3 11494 33541 33542 +3 2485 1835 2486 +3 12954 13048 13047 +3 35713 35461 35429 +3 13449 13545 13544 +3 10721 9687 13884 +3 13872 13227 13226 +3 4273 88 5599 +3 12832 11799 11619 +3 8456 299 1859 +3 18997 35113 34212 +3 924 1043 1042 +3 1859 3720 10492 +3 6233 6232 6102 +3 2470 2605 2469 +3 6747 1886 6746 +3 1885 1886 191 +3 2870 2869 2733 +3 1514 1630 1513 +3 3692 3824 3691 +3 3824 3823 3691 +3 13613 13713 9801 +3 5707 5841 5706 +3 6124 8146 4794 +3 1597 1714 1596 +3 6850 12446 25348 +3 35383 35794 35608 +3 3570 2743 2746 +3 2746 2743 2340 +3 3968 3570 2746 +3 2743 2341 2340 +3 2599 2734 2598 +3 2199 2331 2330 +3 3424 3425 3557 +3 5158 5159 5292 +3 6486 6485 6358 +3 3562 3692 3561 +3 2597 2732 2596 +3 14022 14023 14120 +3 5977 5978 6109 +3 2870 3009 2869 +3 1826 1825 1708 +3 882 1001 1000 +3 35592 35447 35609 +3 35943 35436 35880 +3 20793 20794 20875 +3 2074 2203 2073 +3 646 647 764 +3 2063 2064 2192 +3 30095 30096 19906 +3 2218 5726 5860 +3 2740 2739 2604 +3 35741 35645 35406 +3 398 512 511 +3 7333 397 396 +3 627 626 511 +3 512 627 511 +3 745 744 626 +3 627 745 626 +3 745 864 863 +3 744 745 863 +3 864 983 982 +3 863 864 982 +3 1101 1100 982 +3 983 1101 982 +3 1217 1216 1100 +3 1101 1217 1100 +3 1333 1334 18683 +3 1216 1217 1332 +3 14404 14403 14386 +3 20876 20956 20955 +3 229 4095 3597 +3 5743 15018 16703 +3 17066 17065 16902 +3 19 229 3597 +3 11860 12894 21578 +3 17066 17230 17065 +3 22343 3861 22650 +3 23303 23302 23204 +3 13715 16235 16092 +3 23851 24656 6653 +3 21407 18837 18587 +3 35511 35724 35726 +3 2170 1801 4464 +3 15021 15022 14936 +3 17229 17228 17064 +3 4407 4540 4410 +3 20875 20876 20955 +3 17065 17229 17064 +3 5083 5082 14759 +3 4118 13505 13504 +3 15300 15175 15176 +3 4531 4401 946 +3 1685 1801 5215 +3 5876 14517 2483 +3 15864 15457 14948 +3 578 2390 14978 +3 17262 23951 16464 +3 14484 21050 17106 +3 699 2933 2148 +3 35553 35671 35490 +3 17227 17226 17062 +3 16251 16250 14641 +3 22431 22629 20178 +3 17063 17227 17062 +3 14699 4270 15907 +3 28953 29088 28952 +3 2575 15299 546 +3 13045 13046 13139 +3 14590 14613 15959 +3 14690 14800 6020 +3 3123 2178 1997 +3 6270 462 348 +3 1740 6270 6397 +3 1997 1740 6397 +3 16741 16740 16585 +3 16586 16741 16585 +3 20720 20802 20801 +3 22125 22221 22124 +3 20956 21039 21038 +3 24994 25128 35522 +3 5990 1485 14428 +3 816 7587 16483 +3 6775 6397 239 +3 348 14951 14791 +3 1851 2521 5218 +3 4599 1454 4467 +3 30027 30352 6875 +3 21025 21111 21024 +3 16207 16208 16353 +3 15916 16058 16057 +3 3590 7465 17029 +3 7417 16954 7350 +3 5541 5676 5675 +3 29225 29224 29087 +3 5810 5809 5675 +3 5676 5810 5675 +3 5942 5941 5809 +3 5810 5942 5809 +3 6074 6073 5941 +3 5942 6074 5941 +3 6204 6203 6073 +3 6074 6204 6073 +3 6333 6332 6203 +3 6204 6333 6203 +3 6460 6459 6332 +3 6333 6460 6332 +3 6586 6585 6459 +3 6460 6586 6459 +3 6711 6710 6585 +3 6586 6711 6585 +3 44 33 6710 +3 6711 44 6710 +3 1263 550 33 +3 44 1263 33 +3 3833 3834 550 +3 1263 3833 550 +3 3841 3709 3834 +3 3833 3841 3834 +3 4916 4781 3709 +3 3841 4916 3709 +3 2350 2485 4781 +3 4916 2350 4781 +3 1836 1835 2485 +3 2350 1836 2485 +3 1844 2711 1845 +3 1836 1845 1835 +3 13448 13449 13544 +3 3403 1209 5561 +3 13288 11320 10721 +3 9687 13872 13884 +3 20955 20956 21038 +3 23022 23023 22436 +3 24988 11381 1022 +3 8991 3720 299 +3 14556 8043 14555 +3 2885 2345 2480 +3 3010 3009 2870 +3 1886 1885 6746 +3 4619 4620 4753 +3 2096 4130 2095 +3 3568 3698 3697 +3 3969 4919 3298 +3 1252 6385 4110 +3 6005 13692 1856 +3 9431 5875 1999 +3 5185 5319 1956 +3 3838 3299 6259 +3 4372 4371 4239 +3 8131 6089 6088 +3 1818 1819 1938 +3 2594 2729 2728 +3 1401 3570 3968 +3 4799 1401 3968 +3 35712 35602 35798 +3 6505 6631 6630 +3 6604 6729 6603 +3 2109 2238 2237 +3 1826 1946 1825 +3 6229 6230 6358 +3 23023 22338 22436 +3 696 4919 3969 +3 2198 2197 2068 +3 762 763 881 +3 5319 1955 1956 +3 332 4396 562 +3 5579 5580 5714 +3 1941 2066 2065 +3 10769 10894 10768 +3 35491 1529 1022 +3 4351 4352 4485 +3 1585 1586 1702 +3 2011 2120 1401 +3 35929 9538 35623 +3 3010 3151 3150 +3 529 530 644 +3 3324 1835 1845 +3 2063 2192 2191 +3 14930 21403 22065 +3 35750 35509 35869 +3 35855 35910 35837 +3 16028 5274 5567 +3 628 746 745 +3 627 628 745 +3 746 865 864 +3 745 746 864 +3 984 983 864 +3 865 984 864 +3 1102 1101 983 +3 984 1102 983 +3 1218 1217 1101 +3 1102 1218 1101 +3 18684 18683 1334 +3 1217 1218 1333 +3 4095 4535 4638 +3 1306 14925 15425 +3 16745 16744 16589 +3 3597 4095 4638 +3 23462 13699 23365 +3 16903 17066 16902 +3 2387 1178 500 +3 13667 13666 3729 +3 2015 3069 2939 +3 18395 19378 19771 +3 14944 16511 16510 +3 14349 3620 15142 +3 4462 2170 4464 +3 14936 14944 16510 +3 17065 17064 16901 +3 4543 4410 1801 +3 29766 26404 28308 +3 4462 4464 17228 +3 2129 6142 6143 +3 22048 13579 22650 +3 16250 16252 17180 +3 6142 15267 15244 +3 4540 4116 5215 +3 15299 15300 15176 +3 21023 21109 21022 +3 4410 4540 5215 +3 3531 14321 14925 +3 15196 20727 10216 +3 2483 1501 5055 +3 15160 16035 3618 +3 1685 1569 4600 +3 2148 2483 5055 +3 31996 32096 31995 +3 4463 1685 4600 +3 15776 15777 15915 +3 11946 21090 23467 +3 5143 2415 3067 +3 4526 5193 1027 +3 14913 14920 16482 +3 16043 14527 15019 +3 348 462 14951 +3 14977 14920 14913 +3 14951 14977 14913 +3 14920 16492 16482 +3 16434 16586 16433 +3 20727 4688 20662 +3 16899 16898 16740 +3 16741 16899 16740 +3 29361 29498 29360 +3 20349 16929 2500 +3 16347 16500 16346 +3 2021 10212 9563 +3 2626 5754 12836 +3 26 3067 3127 +3 14951 14913 14904 +3 14791 14951 14904 +3 5217 5218 2302 +3 17225 4599 17224 +3 22629 5275 20178 +3 15915 15916 16057 +3 35719 35925 35566 +3 14382 14399 14381 +3 9973 10090 9972 +3 5542 5677 5676 +3 5541 5542 5676 +3 5811 5810 5676 +3 5677 5811 5676 +3 5811 5943 5942 +3 5810 5811 5942 +3 5943 6075 6074 +3 5942 5943 6074 +3 6205 6204 6074 +3 6075 6205 6074 +3 6334 6333 6204 +3 6205 6334 6204 +3 6461 6460 6333 +3 6334 6461 6333 +3 6587 6586 6460 +3 6461 6587 6460 +3 6712 6711 6586 +3 6587 6712 6586 +3 47 44 6711 +3 6712 47 6711 +3 210 1263 44 +3 47 210 44 +3 307 3833 1263 +3 210 307 1263 +3 3973 3841 3833 +3 307 3973 3833 +3 5051 4916 3841 +3 3973 5051 3841 +3 2351 2350 4916 +3 5051 2351 4916 +3 1837 1836 2350 +3 2351 1837 2350 +3 16487 1844 1843 +3 1837 1844 1836 +3 12708 12797 12707 +3 12889 12888 12796 +3 10739 11262 13288 +3 11320 9687 10721 +3 32725 32724 32610 +3 13248 13247 13152 +3 1870 1990 1989 +3 787 786 577 +3 2471 2470 2336 +3 5027 5028 5162 +3 5447 5581 5580 +3 4890 5025 5024 +3 3564 3694 3563 +3 5435 5436 5569 +3 6231 6232 6360 +3 3292 3431 3430 +3 1953 1952 2097 +3 1952 2227 2097 +3 2341 2742 2342 +3 3838 6259 457 +3 4619 4753 4752 +3 5022 5023 5157 +3 647 765 764 +3 23424 22145 22146 +3 2011 1401 4799 +3 2010 2011 4799 +3 2731 2730 2595 +3 2067 2196 2066 +3 448 10500 13713 +3 3441 2881 3301 +3 1608 1483 5860 +3 1946 1945 1825 +3 6732 6733 678 +3 4919 5590 3298 +3 2197 2198 2329 +3 3435 3436 3568 +3 35895 35738 35441 +3 12123 14170 14165 +3 5155 5156 5289 +3 1398 1514 1397 +3 1990 2115 2114 +3 1989 1990 2114 +3 13153 13248 13152 +3 2115 2244 2243 +3 2114 2115 2243 +3 769 888 887 +3 1513 1629 1512 +3 777 896 776 +3 777 776 658 +3 1938 2063 1937 +3 1886 190 191 +3 2757 2756 3710 +3 35784 35438 35397 +3 514 629 628 +3 16047 16028 5567 +3 629 747 746 +3 628 629 746 +3 747 866 865 +3 746 747 865 +3 866 985 984 +3 865 866 984 +3 1103 1102 984 +3 985 1103 984 +3 1103 1219 1218 +3 1102 1103 1218 +3 18685 1335 18686 +3 1218 1219 1334 +3 16590 16745 16589 +3 4535 2660 2525 +3 23396 21028 23395 +3 16903 16902 16744 +3 15119 15120 15246 +3 13699 11946 23467 +3 14455 1420 5757 +3 19149 18055 18916 +3 15831 467 16240 +3 1306 3531 14925 +3 4543 4407 4410 +3 467 15301 15300 +3 16902 16901 16743 +3 3744 3875 4540 +3 21952 22048 22650 +3 16902 17065 16901 +3 939 2129 6143 +3 22131 22130 22034 +3 2149 16240 16239 +3 15161 15291 15622 +3 3875 1487 4116 +3 17180 2149 16239 +3 16588 16587 16435 +3 4540 3875 4116 +3 1180 14534 14533 +3 16743 16901 16742 +3 1501 17190 2415 +3 4401 1180 946 +3 17106 9630 9405 +3 5055 1501 2415 +3 15455 15863 15435 +3 4116 3730 5216 +3 17110 546 2227 +3 23303 23304 23400 +3 16251 14641 6012 +3 17145 5492 165 +3 16492 699 700 +3 3067 16251 6012 +3 4688 9405 20662 +3 16482 16492 700 +3 16289 16434 16288 +3 14484 17106 4688 +3 16289 16288 16145 +3 16586 16585 16433 +3 16146 16289 16145 +3 16434 16433 16288 +3 23401 9079 23400 +3 20639 20720 20638 +3 21932 35269 21933 +3 12869 12777 16927 +3 16656 16655 16499 +3 16500 16656 16499 +3 12286 14568 11620 +3 16101 14699 2849 +3 14913 16482 16477 +3 2664 700 5546 +3 15195 15196 21948 +3 16898 16897 16739 +3 12586 12585 12495 +3 22811 22812 22910 +3 15762 14787 14679 +3 14885 14884 14771 +3 14666 14772 14665 +3 35423 35433 35579 +3 35905 35387 35497 +3 5678 5812 5811 +3 5677 5678 5811 +3 5812 5944 5943 +3 5811 5812 5943 +3 5944 6076 6075 +3 5943 5944 6075 +3 6076 6206 6205 +3 6075 6076 6205 +3 6335 6334 6205 +3 6206 6335 6205 +3 6462 6461 6334 +3 6335 6462 6334 +3 6588 6587 6461 +3 6462 6588 6461 +3 6713 6712 6587 +3 6588 6713 6587 +3 97 47 6712 +3 6713 97 6712 +3 2221 210 47 +3 97 2221 47 +3 308 307 210 +3 2221 308 210 +3 3016 3973 307 +3 308 3016 307 +3 4513 5051 3973 +3 3016 4513 3973 +3 2349 2351 5051 +3 4513 2349 5051 +3 6741 1837 2351 +3 2349 6741 2351 +3 35540 35604 35379 +3 6741 1843 1837 +3 18635 18539 18636 +3 20264 20349 9676 +3 11837 11262 12814 +3 11262 11320 13288 +3 13344 13343 13247 +3 13248 13344 13247 +3 2376 2375 2243 +3 2244 2376 2243 +3 4791 13674 6262 +3 6356 6357 6483 +3 1248 1247 1131 +3 5446 5447 5580 +3 29088 29225 29087 +3 26577 26682 26681 +3 4758 4759 4893 +3 3430 3431 3563 +3 3309 5721 5587 +3 1526 15519 18913 +3 2097 2227 4127 +3 3147 3146 3005 +3 12684 12685 12773 +3 6481 6482 6607 +3 1864 1984 1863 +3 12685 12774 12773 +3 6500 6626 6625 +3 6751 2011 2010 +3 6499 6500 6625 +3 6626 6751 6750 +3 4887 4888 5022 +3 2883 5454 5319 +3 5572 5707 5571 +3 3565 3566 3695 +3 678 696 3969 +3 3006 3005 2866 +3 6496 6495 6368 +3 3287 3286 3146 +3 4625 4626 4759 +3 3694 3693 3563 +3 13439 13438 13343 +3 4218 4219 4351 +3 9625 2353 11096 +3 7042 318 317 +3 13344 13439 13343 +3 7808 9417 1646 +3 2510 2509 2375 +3 6731 664 6730 +3 2376 2510 2375 +3 4760 4895 4894 +3 1746 1863 1745 +3 13925 14023 14022 +3 35065 35064 34935 +3 3434 3435 3567 +3 5301 5436 5435 +3 27027 26586 28307 +3 5567 16041 16047 +3 630 748 747 +3 629 630 747 +3 748 867 866 +3 747 748 866 +3 867 986 985 +3 866 867 985 +3 1104 1103 985 +3 986 1104 985 +3 1104 1220 1219 +3 1103 1104 1219 +3 1336 1337 18687 +3 1219 1220 1335 +3 29362 29361 29224 +3 16745 16903 16744 +3 14996 14997 15119 +3 21028 15457 15864 +3 2481 15141 3491 +3 15247 15375 15374 +3 16253 15831 2149 +3 709 1064 4531 +3 4407 3744 4540 +3 2149 15831 16240 +3 16744 16743 16588 +3 3744 19 5200 +3 16766 8153 7184 +3 16744 16902 16743 +3 14606 14626 6145 +3 15435 171 23399 +3 16240 15300 15299 +3 6143 6142 15244 +3 4464 1801 4463 +3 16239 16240 15299 +3 16436 16588 16435 +3 3875 5200 14616 +3 14621 3405 14804 +3 16743 16742 16587 +3 15299 15176 546 +3 14993 16535 16481 +3 20727 20662 10216 +3 16248 5868 15054 +3 16929 12869 16927 +3 16290 16289 16146 +3 29262 13317 11500 +3 12895 12989 12777 +3 3407 3540 3539 +3 35356 12132 35821 +3 3540 3670 3669 +3 35432 35753 35458 +3 35169 17280 35040 +3 3801 3670 3802 +3 4067 3933 4068 +3 23864 25686 21509 +3 4200 4067 4201 +3 3934 4068 3933 +3 7337 7450 514 +3 4068 4201 4067 +3 8131 10222 6090 +3 4201 4334 4200 +3 22313 22314 22410 +3 4468 18451 17949 +3 15777 15916 15915 +3 1060 15270 1272 +3 16815 16814 16655 +3 2849 14699 15907 +3 1657 5143 2048 +3 15546 1657 2048 +3 5277 1657 15546 +3 5546 5277 15546 +3 1874 4546 16942 +3 16433 16585 16432 +3 12496 12586 12495 +3 12586 12676 12675 +3 2137 35846 35455 +3 1524 15899 14982 +3 14647 1069 16850 +3 239 14791 14728 +3 14469 15899 4148 +3 32756 32868 32867 +3 19246 30824 21375 +3 5813 5945 5944 +3 5812 5813 5944 +3 5945 6077 6076 +3 5944 5945 6076 +3 6077 6207 6206 +3 6076 6077 6206 +3 6336 6335 6206 +3 6207 6336 6206 +3 6463 6462 6335 +3 6336 6463 6335 +3 6589 6588 6462 +3 6463 6589 6462 +3 6714 6713 6588 +3 6589 6714 6588 +3 101 97 6713 +3 6714 101 6713 +3 3343 2221 97 +3 101 3343 97 +3 552 308 2221 +3 3343 552 2221 +3 3158 3016 308 +3 552 3158 308 +3 4647 4513 3016 +3 3158 4647 3016 +3 2348 2349 4513 +3 4647 2348 4513 +3 1613 6741 2349 +3 2348 1613 2349 +3 35374 29430 30688 +3 1613 1725 6741 +3 13465 12895 12869 +3 12870 12962 12895 +3 11837 12814 10853 +3 9313 11837 10853 +3 13535 13534 13438 +3 13439 13535 13438 +3 2645 2644 2509 +3 3970 3438 3838 +3 2510 2645 2509 +3 1588 1587 1471 +3 1480 1596 1479 +3 28080 28079 27962 +3 26930 19039 30734 +3 2862 2863 3001 +3 2191 2323 2322 +3 3002 3143 3142 +3 1234 1235 1350 +3 3286 3287 3425 +3 2867 3006 2866 +3 1364 1363 1247 +3 1132 1131 1013 +3 5178 10565 11188 +3 4349 4350 4483 +3 11311 5851 5717 +3 5716 5717 5850 +3 6750 6751 2010 +3 6625 6626 6750 +3 6480 6606 6605 +3 6224 6353 6352 +3 3828 3827 3695 +3 18724 4334 1522 +3 5985 2086 1831 +3 8627 2107 8626 +3 3426 3559 3558 +3 3147 3287 3146 +3 3283 3422 3282 +3 3695 3694 3564 +3 4754 4755 4889 +3 25264 25126 35900 +3 9275 9166 9276 +3 6245 6115 8906 +3 9525 7998 974 +3 35895 35490 35738 +3 19433 3529 3397 +3 2645 2780 2644 +3 23637 23636 2222 +3 13633 13632 13534 +3 35641 35681 35503 +3 6481 6607 6606 +3 3432 3431 3292 +3 31437 31509 31436 +3 5721 1952 1953 +3 2884 3309 5587 +3 631 749 748 +3 35711 35526 35822 +3 749 868 867 +3 748 749 867 +3 868 987 986 +3 867 868 986 +3 987 1105 1104 +3 986 987 1104 +3 1105 1221 1220 +3 1104 1105 1220 +3 1337 1338 18689 +3 1220 1221 1336 +3 15120 15247 15246 +3 29564 28307 26586 +3 946 1180 14533 +3 15656 5951 14548 +3 5144 16253 16252 +3 3618 3749 14621 +3 3875 3744 5200 +3 16252 16253 2149 +3 16589 16588 16436 +3 19 3597 1503 +3 23303 23400 23399 +3 16589 16744 16588 +3 18138 19107 19006 +3 12993 14154 13762 +3 13236 13237 15272 +3 3178 35758 10623 +3 17228 4464 17227 +3 35839 35655 35773 +3 16588 16743 16587 +3 1801 4410 5215 +3 3620 15138 14622 +3 16901 16900 16742 +3 304 5005 2440 +3 165 5492 2847 +3 16146 16145 25763 +3 5040 110 3590 +3 21282 21281 9279 +3 16435 16434 16289 +3 4270 15683 15682 +3 12362 20093 17101 +3 3269 3408 3407 +3 3268 18079 18711 +3 3408 3541 3540 +3 3407 3408 3540 +3 3541 3671 3670 +3 3540 3541 3670 +3 3671 3803 3802 +3 3670 3671 3802 +3 3803 3935 3934 +3 3802 3803 3934 +3 4069 4068 3934 +3 3935 4069 3934 +3 4202 4201 4068 +3 4069 4202 4068 +3 4335 4334 4201 +3 4202 4335 4201 +3 4469 4468 4334 +3 4335 4469 4334 +3 16432 16431 16286 +3 4603 4738 19628 +3 5143 3067 26 +3 35874 35367 35760 +3 2048 5143 26 +3 3067 6012 3127 +3 700 5277 5546 +3 14904 14913 16477 +3 16740 16739 16584 +3 16585 16740 16584 +3 12585 12586 12675 +3 16145 16288 16144 +3 4823 19228 4824 +3 5591 5725 5549 +3 2664 5546 16093 +3 2795 239 14728 +3 5680 5814 5813 +3 34214 32683 34979 +3 5946 5945 5813 +3 5814 5946 5813 +3 6078 6077 5945 +3 5946 6078 5945 +3 6208 6207 6077 +3 6078 6208 6077 +3 6337 6336 6207 +3 6208 6337 6207 +3 6464 6463 6336 +3 6337 6464 6336 +3 6590 6589 6463 +3 6464 6590 6463 +3 6715 6714 6589 +3 6590 6715 6589 +3 152 101 6714 +3 6715 152 6714 +3 6125 3343 101 +3 152 6125 101 +3 3160 552 3343 +3 6125 3160 3343 +3 3162 3158 552 +3 3160 3162 552 +3 4379 4647 3158 +3 3162 4379 3158 +3 2347 2348 4647 +3 4379 2347 4647 +3 4527 1613 2348 +3 2347 4527 2348 +3 1971 35809 35797 +3 13554 29297 29434 +3 35434 35717 35860 +3 12860 12861 12953 +3 11262 10739 12814 +3 11857 10488 10004 +3 13535 13633 13534 +3 14315 14314 14216 +3 13731 13730 13632 +3 29225 29362 29224 +3 6021 1835 3324 +3 13633 13731 13632 +3 5020 5155 5154 +3 310 7245 7138 +3 27963 28080 27962 +3 22920 23019 22919 +3 5841 5840 5706 +3 3959 4093 3958 +3 3695 3827 3694 +3 3558 3559 3688 +3 3006 3147 3005 +3 1480 1479 1363 +3 20569 3487 673 +3 6613 6738 6737 +3 1513 1512 1396 +3 5448 5582 5581 +3 5447 5448 5581 +3 6373 6500 6499 +3 6372 6373 6499 +3 5961 5962 6093 +3 6353 6480 6479 +3 6352 6353 6479 +3 4752 4753 4887 +3 1151 1257 1373 +3 5854 5985 1831 +3 3287 3426 3425 +3 3425 3426 3558 +3 3565 3695 3564 +3 3827 3826 3694 +3 4482 4483 4616 +3 3013 3154 3153 +3 314 315 424 +3 539 538 424 +3 14315 9313 14314 +3 15072 12567 15594 +3 13829 13828 13730 +3 5417 2364 7437 +3 13731 13829 13730 +3 9976 9858 3040 +3 2738 2874 2873 +3 31207 11419 31272 +3 29499 29498 29361 +3 3432 3565 3431 +3 3011 3012 3152 +3 631 748 630 +3 5590 3309 2884 +3 632 750 749 +3 631 632 749 +3 750 869 868 +3 749 750 868 +3 869 988 987 +3 868 869 987 +3 988 1106 1105 +3 987 988 1105 +3 1106 1222 1221 +3 1105 1106 1221 +3 1339 1338 1223 +3 1221 1222 1337 +3 3405 14993 14804 +3 14547 15656 14548 +3 14517 15158 16782 +3 15656 14703 5488 +3 5200 19 1503 +3 17188 5144 16252 +3 16292 16437 16291 +3 3597 4638 4402 +3 20104 20616 20615 +3 16437 16589 16436 +3 3749 3405 14621 +3 22561 13847 20194 +3 707 6774 2401 +3 14407 14406 14390 +3 14936 16510 16509 +3 14604 7090 273 +3 16901 17064 16900 +3 1801 1685 4463 +3 29902 30033 30032 +3 17064 17063 16900 +3 14712 14349 14362 +3 15297 1306 15425 +3 14616 400 1740 +3 2939 3069 14412 +3 35436 35592 35880 +3 16290 16435 16289 +3 2989 3130 3129 +3 35893 35580 35359 +3 3130 3270 3269 +3 3407 3268 3269 +3 3270 3409 3408 +3 3269 3270 3408 +3 3409 3542 3541 +3 3408 3409 3541 +3 3542 3672 3671 +3 3541 3542 3671 +3 3672 3804 3803 +3 3671 3672 3803 +3 3804 3936 3935 +3 3803 3804 3935 +3 4070 4069 3935 +3 3936 4070 3935 +3 4203 4202 4069 +3 4070 4203 4069 +3 4336 4335 4202 +3 4203 4336 4202 +3 4470 4469 4335 +3 4336 4470 4335 +3 4604 4603 4469 +3 4470 4604 4469 +3 4738 4873 19750 +3 4604 4738 4603 +3 239 348 14791 +3 4873 4874 5009 +3 16482 700 2664 +3 16477 16482 2664 +3 17061 17060 16897 +3 16898 17061 16897 +3 16288 16287 16144 +3 35408 35421 35501 +3 14299 5697 6511 +3 14791 14904 14903 +3 7113 15762 14679 +3 14904 16477 16467 +3 14903 14904 16467 +3 5815 5814 5680 +3 18505 17530 34979 +3 5815 5947 5946 +3 5814 5815 5946 +3 6079 6078 5946 +3 5947 6079 5946 +3 6079 6209 6208 +3 6078 6079 6208 +3 6209 6338 6337 +3 6208 6209 6337 +3 6338 6465 6464 +3 6337 6338 6464 +3 6591 6590 6464 +3 6465 6591 6464 +3 6716 6715 6590 +3 6591 6716 6590 +3 187 152 6715 +3 6716 187 6715 +3 328 6125 152 +3 187 328 152 +3 3018 3160 6125 +3 328 3018 6125 +3 3163 3162 3160 +3 3018 3163 3160 +3 3979 4379 3162 +3 3163 3979 3162 +3 2214 2347 4379 +3 3979 2214 4379 +3 1620 4527 2347 +3 2214 1620 2347 +3 35762 35941 35693 +3 15748 16850 5414 +3 13693 5335 11503 +3 12223 13693 11503 +3 13609 13770 13671 +3 7400 29549 6990 +3 14121 14217 14216 +3 14120 14121 14216 +3 13927 13926 13828 +3 13829 13927 13828 +3 13927 14025 14024 +3 6374 6246 6375 +3 5845 5977 5976 +3 430 7256 544 +3 5710 5711 5844 +3 544 543 429 +3 4620 4754 4753 +3 2741 2740 2605 +3 4226 4359 4358 +3 3959 3958 3826 +3 6607 6608 6732 +3 1822 1942 1941 +3 4893 5028 5027 +3 3010 3011 3151 +3 1397 1513 1396 +3 2222 15364 23637 +3 5581 5582 5716 +3 5582 5717 5716 +3 1471 1587 1470 +3 2102 15046 15170 +3 6244 6373 6372 +3 6243 6244 6372 +3 13485 13680 13981 +3 35633 35661 35629 +3 1364 1480 1363 +3 1119 1235 1234 +3 3559 3689 3688 +3 6733 696 678 +3 4226 4225 4092 +3 4093 4226 4092 +3 4214 4215 4347 +3 1583 1700 1582 +3 9058 2505 2639 +3 2505 2640 2639 +3 6627 6752 6751 +3 35391 35805 14562 +3 13720 13818 13817 +3 5710 5844 5709 +3 2468 2603 2467 +3 2239 2371 2238 +3 6630 6631 6755 +3 24723 26589 25664 +3 801 7505 800 +3 5298 5299 5433 +3 3293 3432 3292 +3 3565 3564 3431 +3 518 633 632 +3 35574 35409 35626 +3 633 751 750 +3 632 633 750 +3 751 870 869 +3 750 751 869 +3 989 988 869 +3 870 989 869 +3 989 1107 1106 +3 988 989 1106 +3 1107 1223 1222 +3 1106 1107 1222 +3 1455 18690 1339 +3 1222 1223 1338 +3 15547 5144 17188 +3 16035 3749 3618 +3 1503 3597 4402 +3 16782 15547 17188 +3 35887 28427 35600 +3 4638 2525 2390 +3 6797 19364 18283 +3 23813 26253 26351 +3 14804 14993 16481 +3 12305 22561 3729 +3 14510 14712 14362 +3 6145 14693 14763 +3 14928 14936 16509 +3 1420 16708 5757 +3 17228 17227 17063 +3 16510 5876 2933 +3 9079 15435 23400 +3 17064 17228 17063 +3 2579 19732 19621 +3 27145 7094 30755 +3 2580 2715 2714 +3 35946 35768 35483 +3 2715 2851 2850 +3 10440 10559 10439 +3 2851 2990 2989 +3 2850 2851 2989 +3 2990 3131 3130 +3 2989 2990 3130 +3 3131 3271 3270 +3 3130 3131 3270 +3 3271 3410 3409 +3 3270 3271 3409 +3 3410 3543 3542 +3 3409 3410 3542 +3 3673 3672 3542 +3 3543 3673 3542 +3 3805 3804 3672 +3 3673 3805 3672 +3 3937 3936 3804 +3 3805 3937 3804 +3 3937 4071 4070 +3 3936 3937 4070 +3 4071 4204 4203 +3 4070 4071 4203 +3 4204 4337 4336 +3 4203 4204 4336 +3 4471 4470 4336 +3 4337 4471 4336 +3 4605 4604 4470 +3 4471 4605 4470 +3 4739 4738 4604 +3 4605 4739 4604 +3 4874 4873 4738 +3 4739 4874 4738 +3 17225 17224 17060 +3 19606 5009 5010 +3 17061 17225 17060 +3 4599 4467 17224 +3 13987 6384 63 +3 3127 3855 3723 +3 63 1856 14085 +3 1856 13988 14085 +3 16477 2664 245 +3 13973 14168 35780 +3 16467 16477 245 +3 14728 14791 14903 +3 19318 5681 19300 +3 19300 5681 5680 +3 5948 5947 5815 +3 30984 31045 30983 +3 5948 6080 6079 +3 5947 5948 6079 +3 6080 6210 6209 +3 6079 6080 6209 +3 6210 6339 6338 +3 6209 6210 6338 +3 6466 6465 6338 +3 6339 6466 6338 +3 6592 6591 6465 +3 6466 6592 6465 +3 6717 6716 6591 +3 6592 6717 6591 +3 195 187 6716 +3 6717 195 6716 +3 286 328 187 +3 195 286 187 +3 3161 3018 328 +3 286 3161 328 +3 3164 3163 3018 +3 3161 3164 3018 +3 4113 3979 3163 +3 3164 4113 3163 +3 2085 2214 3979 +3 4113 2085 3979 +3 1720 1620 2214 +3 2085 1720 2214 +3 12708 12707 12617 +3 35522 25128 25266 +3 216 13693 12223 +3 2793 216 12223 +3 13671 13770 13003 +3 11588 11587 11520 +3 13827 13826 13728 +3 13729 13827 13728 +3 13926 13927 14024 +3 14123 14122 14024 +3 5019 5020 5154 +3 1945 2070 1944 +3 1591 1708 1590 +3 2110 2239 2109 +3 2371 2370 2238 +3 4629 4630 4763 +3 35574 35626 35673 +3 4895 4896 5030 +3 4626 4627 4760 +3 5166 5300 5299 +3 4760 4761 4895 +3 536 535 421 +3 4892 4893 5027 +3 7618 919 7619 +3 4224 4225 4357 +3 6100 6230 6229 +3 1984 1983 1863 +3 1587 1704 1703 +3 14025 14123 14024 +3 6115 6114 9866 +3 11335 32 10589 +3 4484 4618 4617 +3 5044 5179 5178 +3 1397 1396 1280 +3 1281 1397 1280 +3 1587 1588 1704 +3 1704 1705 1821 +3 4225 4226 4358 +3 4093 4092 3958 +3 12768 12860 12859 +3 2467 2602 2466 +3 2110 2109 1984 +3 1985 2110 1984 +3 2200 2199 2070 +3 2071 2200 2070 +3 3970 3969 3438 +3 6732 678 6731 +3 35717 35411 35868 +3 1985 1984 1864 +3 2869 3008 2868 +3 5443 5577 5576 +3 3827 3959 3826 +3 421 535 534 +3 5587 5721 1953 +3 3153 3293 3152 +3 519 634 633 +3 8868 35385 8760 +3 634 752 751 +3 633 634 751 +3 752 871 870 +3 751 752 870 +3 871 990 989 +3 870 871 989 +3 990 1108 1107 +3 989 990 1107 +3 1108 1224 1223 +3 1107 1108 1223 +3 1224 1340 1339 +3 1223 1224 1339 +3 1340 1456 1455 +3 35417 35562 35642 +3 1456 1572 1571 +3 1688 18887 1571 +3 1572 1689 1688 +3 1571 1572 1688 +3 1689 1806 1805 +3 1688 1689 1805 +3 1806 1926 1925 +3 1925 1926 2050 +3 1926 2051 2050 +3 16509 16510 2933 +3 2051 2180 2179 +3 2179 19402 19295 +3 2180 2312 2311 +3 2445 2311 2312 +3 2312 2446 2445 +3 19621 19511 2445 +3 2446 2581 2580 +3 2445 2446 2580 +3 2581 2716 2715 +3 2580 2581 2715 +3 2716 2852 2851 +3 2715 2716 2851 +3 2852 2991 2990 +3 2851 2852 2990 +3 2991 3132 3131 +3 2990 2991 3131 +3 3132 3272 3271 +3 3131 3132 3271 +3 3272 3411 3410 +3 3271 3272 3410 +3 3411 3544 3543 +3 3410 3411 3543 +3 3674 3673 3543 +3 3544 3674 3543 +3 3806 3805 3673 +3 3674 3806 3673 +3 3806 3938 3937 +3 3805 3806 3937 +3 3938 4072 4071 +3 3937 3938 4071 +3 4205 4204 4071 +3 4072 4205 4071 +3 4205 4338 4337 +3 4204 4205 4337 +3 4472 4471 4337 +3 4338 4472 4337 +3 4606 4605 4471 +3 4472 4606 4471 +3 4740 4739 4605 +3 4606 4740 4605 +3 4875 4874 4739 +3 4740 4875 4739 +3 5010 5009 4874 +3 4875 5010 4874 +3 23420 23031 16299 +3 35715 35564 35355 +3 18382 5279 5278 +3 4688 17106 9405 +3 13958 12932 12042 +3 12205 12820 12660 +3 26 3127 16945 +3 5142 2048 79 +3 4137 6775 2795 +3 5546 15546 14788 +3 17791 16821 19542 +3 4008 15566 4140 +3 5817 5949 5948 +3 32727 32839 32726 +3 5949 6081 6080 +3 5948 5949 6080 +3 6211 6210 6080 +3 6081 6211 6080 +3 6340 6339 6210 +3 6211 6340 6210 +3 6467 6466 6339 +3 6340 6467 6339 +3 6593 6592 6466 +3 6467 6593 6466 +3 6718 6717 6592 +3 6593 6718 6592 +3 196 195 6717 +3 6718 196 6717 +3 807 286 195 +3 196 807 195 +3 6645 3161 286 +3 807 6645 286 +3 3021 3164 3161 +3 6645 3021 3161 +3 4246 4113 3164 +3 3021 4246 3164 +3 1830 2085 4113 +3 4246 1830 4113 +3 1719 1720 2085 +3 1830 1719 2085 +3 4252 1602 1720 +3 1719 4252 1720 +3 10772 9628 2793 +3 5272 2102 2101 +3 11521 11588 11520 +3 11663 11662 11587 +3 13729 13728 13630 +3 13631 13729 13630 +3 14219 14218 14122 +3 14123 14219 14122 +3 3015 3014 2875 +3 2237 2369 2368 +3 1865 1864 1747 +3 1748 1865 1747 +3 2736 2737 2872 +3 4496 4630 4629 +3 1256 1140 3159 +3 1140 3306 3159 +3 4761 4896 4895 +3 4896 5031 5030 +3 5163 5164 5297 +3 6483 6484 6609 +3 3011 3152 3151 +3 35543 35761 35603 +3 4750 4885 4884 +3 649 767 766 +3 1013 1131 1012 +3 3819 3951 3950 +3 6244 6245 6373 +3 6245 6374 6373 +3 5179 5313 5312 +3 5178 5179 5312 +3 31272 11417 31338 +3 12411 12500 12410 +3 1821 1822 1941 +3 1705 1822 1821 +3 4358 4359 4492 +3 4359 4493 4492 +3 4627 4628 4761 +3 2737 2873 2872 +3 1748 1747 1630 +3 2239 2238 2109 +3 2324 2325 2458 +3 3284 3285 3423 +3 1703 1820 1819 +3 4256 4389 1384 +3 1865 1985 1864 +3 1631 1630 1514 +3 5442 5443 5576 +3 1747 1864 1746 +3 4492 4493 4626 +3 4627 4761 4760 +3 519 633 518 +3 3298 5590 2884 +3 520 635 634 +3 519 520 634 +3 635 753 752 +3 634 635 752 +3 753 872 871 +3 752 753 871 +3 872 991 990 +3 871 872 990 +3 991 1109 1108 +3 990 991 1108 +3 1109 1225 1224 +3 1108 1109 1224 +3 1225 1341 1340 +3 1224 1225 1340 +3 1457 1456 1340 +3 1341 1457 1340 +3 1457 1573 1572 +3 1456 1457 1572 +3 1573 1690 1689 +3 1572 1573 1689 +3 35773 35530 35557 +3 1689 1690 1806 +3 14978 15021 14928 +3 29362 29499 29361 +3 35864 35823 35782 +3 19005 19542 16821 +3 35706 35857 13280 +3 35828 35834 35520 +3 2313 2312 2180 +3 2181 2313 2180 +3 2447 2446 2312 +3 2313 2447 2312 +3 2582 2581 2446 +3 2447 2582 2446 +3 2717 2716 2581 +3 2582 2717 2581 +3 2853 2852 2716 +3 2717 2853 2716 +3 2992 2991 2852 +3 2853 2992 2852 +3 2992 3133 3132 +3 2991 2992 3132 +3 3133 3273 3272 +3 3132 3133 3272 +3 3273 3412 3411 +3 3272 3273 3411 +3 3412 3545 3544 +3 3411 3412 3544 +3 3545 3675 3674 +3 3544 3545 3674 +3 3807 3806 3674 +3 3675 3807 3674 +3 3807 3939 3938 +3 3806 3807 3938 +3 4073 4072 3938 +3 3939 4073 3938 +3 4073 4206 4205 +3 4072 4073 4205 +3 4206 4339 4338 +3 4205 4206 4338 +3 4473 4472 4338 +3 4339 4473 4338 +3 4607 4606 4472 +3 4473 4607 4472 +3 4741 4740 4606 +3 4607 4741 4606 +3 4876 4875 4740 +3 4741 4876 4740 +3 5011 5010 4875 +3 4876 5011 4875 +3 5146 5145 5010 +3 5011 5146 5010 +3 35373 35384 35432 +3 1541 25730 1775 +3 11659 11658 11583 +3 11584 11659 11583 +3 5414 1069 18584 +3 11739 11738 11658 +3 16093 5546 14788 +3 245 2664 16093 +3 17854 17891 5684 +3 35915 35501 35488 +3 5684 5818 5817 +3 5817 5818 5949 +3 6082 6081 5949 +3 35658 35889 35709 +3 6212 6211 6081 +3 6082 6212 6081 +3 6341 6340 6211 +3 6212 6341 6211 +3 6468 6467 6340 +3 6341 6468 6340 +3 6594 6593 6467 +3 6468 6594 6467 +3 6719 6718 6593 +3 6594 6719 6593 +3 204 196 6718 +3 6719 204 6718 +3 1729 807 196 +3 204 1729 196 +3 2762 6645 807 +3 1729 2762 807 +3 3022 3021 6645 +3 2762 3022 6645 +3 3452 4246 3021 +3 3022 3452 3021 +3 1951 1830 4246 +3 3452 1951 4246 +3 1718 1719 1830 +3 1951 1718 1830 +3 4787 4252 1719 +3 1718 4787 1719 +3 2101 16543 5272 +3 4787 2101 4252 +3 11588 11663 11587 +3 11743 11742 11662 +3 13631 13630 13532 +3 13533 13631 13532 +3 14317 14316 14218 +3 14219 14317 14218 +3 13521 10728 14316 +3 35651 35552 35833 +3 35616 35659 35674 +3 1515 1514 1398 +3 645 763 762 +3 1399 1398 1282 +3 1242 1358 1241 +3 3008 3149 3007 +3 2872 2871 2735 +3 4626 4760 4759 +3 2736 2872 2735 +3 4491 4492 4625 +3 35556 35350 35577 +3 6379 7545 6250 +3 6379 6380 6506 +3 1133 1249 1132 +3 6632 10501 8477 +3 3685 3684 3554 +3 6222 6351 6350 +3 4887 5022 5021 +3 5313 5448 5447 +3 5312 5313 5447 +3 2734 2733 2598 +3 7470 7584 15236 +3 422 536 421 +3 1942 2067 2066 +3 5030 5031 5165 +3 4493 4627 4626 +3 4762 4897 4896 +3 2737 2736 2601 +3 420 421 534 +3 1631 1748 1630 +3 5306 5441 5440 +3 1991 2116 2115 +3 1990 1991 2115 +3 2116 2245 2244 +3 1515 1631 1514 +3 3291 3292 3430 +3 2602 2737 2601 +3 3012 3153 3152 +3 5435 5569 5568 +3 5165 5166 5299 +3 407 521 520 +3 520 7342 406 +3 521 636 635 +3 520 521 635 +3 636 754 753 +3 635 636 753 +3 754 873 872 +3 753 754 872 +3 873 992 991 +3 872 873 991 +3 992 1110 1109 +3 991 992 1109 +3 1110 1226 1225 +3 1109 1110 1225 +3 1226 1342 1341 +3 1225 1226 1341 +3 1342 1458 1457 +3 1341 1342 1457 +3 35508 35672 35750 +3 1457 1458 1573 +3 3848 155 7674 +3 35483 35768 35507 +3 22221 22220 22124 +3 14083 35670 35466 +3 4464 4463 17227 +3 12869 12895 12777 +3 16448 3339 7855 +3 23302 23303 23399 +3 32092 32091 31991 +3 20615 20616 21409 +3 2182 2314 2313 +3 2181 2182 2313 +3 2448 2447 2313 +3 2314 2448 2313 +3 2583 2582 2447 +3 2448 2583 2447 +3 2718 2717 2582 +3 2583 2718 2582 +3 2854 2853 2717 +3 2718 2854 2717 +3 2854 2993 2992 +3 2853 2854 2992 +3 2993 3134 3133 +3 2992 2993 3133 +3 3134 3274 3273 +3 3133 3134 3273 +3 3274 3413 3412 +3 3273 3274 3412 +3 3413 3546 3545 +3 3412 3413 3545 +3 3546 3676 3675 +3 3545 3546 3675 +3 3676 3808 3807 +3 3675 3676 3807 +3 3808 3940 3939 +3 3807 3808 3939 +3 4074 4073 3939 +3 3940 4074 3939 +3 4074 4207 4206 +3 4073 4074 4206 +3 4340 4339 4206 +3 4207 4340 4206 +3 4474 4473 4339 +3 4340 4474 4339 +3 4608 4607 4473 +3 4474 4608 4473 +3 4742 4741 4607 +3 4608 4742 4607 +3 4877 4876 4741 +3 4742 4877 4741 +3 5012 5011 4876 +3 4877 5012 4876 +3 5012 5147 5146 +3 5011 5012 5146 +3 14595 5282 15612 +3 35781 35373 35361 +3 11659 11739 11658 +3 11823 11822 11738 +3 11128 13782 8574 +3 10005 11128 8574 +3 2358 6775 4137 +3 15546 2048 5142 +3 5218 2521 5219 +3 15566 2358 5465 +3 5218 5219 2303 +3 2302 5218 2303 +3 17224 4467 17223 +3 2302 2303 4598 +3 6213 6212 6082 +3 22162 14930 22065 +3 6342 6341 6212 +3 6213 6342 6212 +3 6469 6468 6341 +3 6342 6469 6341 +3 6595 6594 6468 +3 6469 6595 6468 +3 6720 6719 6594 +3 6595 6720 6594 +3 205 204 6719 +3 6720 205 6719 +3 436 1729 204 +3 205 436 204 +3 3037 2762 1729 +3 436 3037 1729 +3 3017 3022 2762 +3 3037 3017 2762 +3 3313 3452 3022 +3 3017 3313 3022 +3 2077 1951 3452 +3 3313 2077 3452 +3 1717 1718 1951 +3 2077 1717 1951 +3 3019 4787 1718 +3 1717 3019 1718 +3 16697 2230 2362 +3 3019 2230 4787 +3 11663 11743 11662 +3 11827 11826 11742 +3 13533 13532 13436 +3 13437 13533 13436 +3 14317 13521 14316 +3 11809 12940 10728 +3 35708 35646 35423 +3 2115 2116 2244 +3 2245 2377 2376 +3 1399 1515 1398 +3 1283 1399 1282 +3 35938 12555 35366 +3 1495 1496 1256 +3 5592 1726 5726 +3 1726 1608 5726 +3 4493 4494 4627 +3 6739 1495 1151 +3 4628 4762 4761 +3 1495 1256 1257 +3 4622 4756 4755 +3 35913 35921 35892 +3 4617 4618 4751 +3 3441 3301 784 +3 6506 6632 6631 +3 4215 4216 4348 +3 6379 6506 6505 +3 6505 6506 6631 +3 6739 8550 1496 +3 6378 6379 6505 +3 5300 5435 5434 +3 6484 6610 6609 +3 4109 3711 2618 +3 5031 5166 5165 +3 1628 1745 1627 +3 2873 3012 3011 +3 2244 2245 2376 +3 259 10474 11242 +3 2377 2511 2510 +3 2376 2377 2510 +3 1745 1744 1627 +3 2511 2646 2645 +3 2872 2873 3011 +3 4225 4358 4357 +3 5299 5300 5434 +3 2617 2219 2618 +3 408 522 521 +3 407 406 7232 +3 522 637 636 +3 521 522 636 +3 637 755 754 +3 636 637 754 +3 755 874 873 +3 754 755 873 +3 874 993 992 +3 873 874 992 +3 993 1111 1110 +3 992 993 1110 +3 1111 1227 1226 +3 1110 1111 1226 +3 1227 1343 1342 +3 1226 1227 1342 +3 1343 1459 1458 +3 1342 1343 1458 +3 462 578 14977 +3 1339 1340 1455 +3 35380 35817 35882 +3 1968 5417 1832 +3 9321 346 1506 +3 35719 29544 27642 +3 28952 29087 28951 +3 19195 1928 1929 +3 1740 400 6270 +3 23245 22144 21952 +3 4269 578 462 +3 6270 4269 462 +3 24656 11975 6653 +3 578 14978 14977 +3 19406 2315 2314 +3 2314 2315 2448 +3 2449 2584 2583 +3 2448 2449 2583 +3 2584 2719 2718 +3 2583 2584 2718 +3 2719 2855 2854 +3 2718 2719 2854 +3 2855 2994 2993 +3 2854 2855 2993 +3 2994 3135 3134 +3 2993 2994 3134 +3 3135 3275 3274 +3 3134 3135 3274 +3 3275 3414 3413 +3 3274 3275 3413 +3 3414 3547 3546 +3 3413 3414 3546 +3 3547 3677 3676 +3 3546 3547 3676 +3 3677 3809 3808 +3 3676 3677 3808 +3 3809 3941 3940 +3 3808 3809 3940 +3 4075 4074 3940 +3 3941 4075 3940 +3 4208 4207 4074 +3 4075 4208 4074 +3 4208 4341 4340 +3 4207 4208 4340 +3 4341 4475 4474 +3 4340 4341 4474 +3 4475 4609 4608 +3 4474 4475 4608 +3 4743 4742 4608 +3 4609 4743 4608 +3 4878 4877 4742 +3 4743 4878 4742 +3 5013 5012 4877 +3 4878 5013 4877 +3 5148 5147 5012 +3 5013 5148 5012 +3 5282 5148 5283 +3 35384 35753 35432 +3 11584 11583 11516 +3 35354 35666 35678 +3 12278 12277 12300 +3 13027 11128 10005 +3 14490 15566 5465 +3 4008 4140 3028 +3 2521 3028 5219 +3 17224 17223 17059 +3 17060 17224 17059 +3 16028 5434 5274 +3 4467 2302 4598 +3 6084 6214 6213 +3 6083 6084 6213 +3 6343 6342 6213 +3 6214 6343 6213 +3 6470 6469 6342 +3 6343 6470 6342 +3 6596 6595 6469 +3 6470 6596 6469 +3 6721 6720 6595 +3 6596 6721 6595 +3 206 205 6720 +3 6721 206 6720 +3 549 436 205 +3 206 549 205 +3 2898 3037 436 +3 549 2898 436 +3 3023 3017 3037 +3 2898 3023 3037 +3 3585 3313 3017 +3 3023 3585 3017 +3 2078 2077 3313 +3 3585 2078 3313 +3 1716 1717 2077 +3 2078 1716 2077 +3 1251 3019 1717 +3 1716 1251 1717 +3 2362 2496 16697 +3 1251 2362 3019 +3 11743 11827 11742 +3 11913 11912 11826 +3 24749 13245 13341 +3 13436 13532 13435 +3 13521 11809 10728 +3 11809 11093 9657 +3 7518 7632 7517 +3 6947 7046 7045 +3 651 769 768 +3 3817 3949 3816 +3 11278 4774 4775 +3 5438 5572 5571 +3 2231 2631 2103 +3 1608 1726 3460 +3 4618 4619 4752 +3 12961 13465 12869 +3 2606 2605 2470 +3 4630 4764 4763 +3 2471 2606 2470 +3 4763 4764 4898 +3 1474 1473 1357 +3 4885 4886 5020 +3 1940 1941 2065 +3 1013 1012 893 +3 3818 3819 3950 +3 11657 11737 11656 +3 22914 23013 22913 +3 6487 6613 6486 +3 5307 5308 5442 +3 4086 4085 3951 +3 3306 3711 4109 +3 3711 2617 2618 +3 1983 8627 1982 +3 5711 5712 5845 +3 2510 2511 2645 +3 2646 2781 2780 +3 2645 2646 2780 +3 35906 35856 35599 +3 1040 1039 920 +3 12903 17264 20758 +3 2219 5592 2218 +3 2219 2218 2618 +3 409 523 522 +3 407 408 521 +3 523 638 637 +3 522 523 637 +3 638 756 755 +3 637 638 755 +3 756 875 874 +3 755 756 874 +3 875 994 993 +3 874 875 993 +3 994 1112 1111 +3 993 994 1111 +3 1112 1228 1227 +3 1111 1112 1227 +3 1228 1344 1343 +3 1227 1228 1343 +3 1576 18793 1460 +3 1343 1344 1459 +3 14978 14928 14920 +3 14977 14978 14920 +3 2178 14616 1740 +3 400 4269 6270 +3 1693 1810 1809 +3 18892 1692 18991 +3 1810 1930 1929 +3 1809 1810 1929 +3 1930 2055 2054 +3 2054 19299 19195 +3 2316 2183 2184 +3 2055 2184 2054 +3 1487 5883 3730 +3 27499 27617 27616 +3 4116 1487 3730 +3 14616 2178 5883 +3 2450 2585 2584 +3 29637 29636 29498 +3 2585 2720 2719 +3 2584 2585 2719 +3 2720 2856 2855 +3 2719 2720 2855 +3 2856 2995 2994 +3 2855 2856 2994 +3 2995 3136 3135 +3 2994 2995 3135 +3 3136 3276 3275 +3 3135 3136 3275 +3 3276 3415 3414 +3 3275 3276 3414 +3 3415 3548 3547 +3 3414 3415 3547 +3 3548 3678 3677 +3 3547 3548 3677 +3 3678 3810 3809 +3 3677 3678 3809 +3 3810 3942 3941 +3 3809 3810 3941 +3 4076 4075 3941 +3 3942 4076 3941 +3 4209 4208 4075 +3 4076 4209 4075 +3 4209 4342 4341 +3 4208 4209 4341 +3 4342 4476 4475 +3 4341 4342 4475 +3 4610 4609 4475 +3 4476 4610 4475 +3 4744 4743 4609 +3 4610 4744 4609 +3 4744 4879 4878 +3 4743 4744 4878 +3 5014 5013 4878 +3 4879 5014 4878 +3 5149 5148 5013 +3 5014 5149 5013 +3 15349 5284 15479 +3 5149 5283 5148 +3 12753 1254 12458 +3 35589 35390 35812 +3 12300 13027 10005 +3 13782 1754 3989 +3 2521 4008 3028 +3 5953 19109 5821 +3 6083 16190 6084 +3 4467 4598 17223 +3 5953 6085 6084 +3 35367 35451 35814 +3 6215 6214 6084 +3 6085 6215 6084 +3 6344 6343 6214 +3 6215 6344 6214 +3 6471 6470 6343 +3 6344 6471 6343 +3 6597 6596 6470 +3 6471 6597 6470 +3 6722 6721 6596 +3 6597 6722 6596 +3 230 206 6721 +3 6722 230 6721 +3 435 549 206 +3 230 435 206 +3 3706 2898 549 +3 435 3706 549 +3 3307 3023 2898 +3 3706 3307 2898 +3 3715 3585 3023 +3 3307 3715 3023 +3 2079 2078 3585 +3 3715 2079 3585 +3 1963 1716 2078 +3 2079 1963 2078 +3 4793 1251 1716 +3 1963 4793 1716 +3 2496 2362 1251 +3 4793 2496 1251 +3 11827 11913 11826 +3 6375 6502 6501 +3 13342 13437 13341 +3 11997 11996 11912 +3 12940 11809 9657 +3 22934 23033 23245 +3 11093 8086 7772 +3 27733 27734 27848 +3 16789 5432 14611 +3 13770 13097 13003 +3 5303 5304 5438 +3 35580 35371 35906 +3 1132 1248 1131 +3 5712 5846 5845 +3 12249 12248 12165 +3 9657 11093 7772 +3 8086 2090 10378 +3 1957 2094 1958 +3 3688 3689 3820 +3 5308 5443 5442 +3 6364 6363 6234 +3 3166 3168 3309 +3 13815 13814 13716 +3 1700 1699 1582 +3 5726 1608 5860 +3 2868 2867 2731 +3 2884 5587 2883 +3 3566 3696 3695 +3 6504 6505 6630 +3 318 428 427 +3 5304 5439 5438 +3 3159 3306 4109 +3 35583 35652 35384 +3 5845 5846 5977 +3 11919 12003 11918 +3 12084 12083 12002 +3 7772 8086 10378 +3 2090 10466 12930 +3 1999 1622 1171 +3 5844 5843 5709 +3 4885 5020 5019 +3 5592 5726 2218 +3 410 524 523 +3 409 408 7234 +3 524 639 638 +3 523 524 638 +3 639 757 756 +3 638 639 756 +3 757 876 875 +3 756 757 875 +3 876 995 994 +3 875 876 994 +3 995 1113 1112 +3 994 995 1112 +3 1113 1229 1228 +3 1112 1113 1228 +3 1229 1345 1344 +3 1228 1229 1344 +3 1345 1461 1460 +3 1344 1345 1460 +3 1461 1577 1576 +3 18793 1576 18893 +3 1577 1694 1693 +3 15035 977 2630 +3 17011 12460 11008 +3 1487 14616 5883 +3 1811 1931 1930 +3 15518 15388 15519 +3 1931 2056 2055 +3 1930 1931 2055 +3 2056 2185 2184 +3 2055 2056 2184 +3 2317 2316 2184 +3 2185 2317 2184 +3 29499 29637 29498 +3 2317 2451 2316 +3 2451 2586 2585 +3 2450 2451 2585 +3 2586 2721 2720 +3 2585 2586 2720 +3 2721 2857 2856 +3 2720 2721 2856 +3 2857 2996 2995 +3 2856 2857 2995 +3 2996 3137 3136 +3 2995 2996 3136 +3 3137 3277 3276 +3 3136 3137 3276 +3 3277 3416 3415 +3 3276 3277 3415 +3 3416 3549 3548 +3 3415 3416 3548 +3 3549 3679 3678 +3 3548 3549 3678 +3 3679 3811 3810 +3 3678 3679 3810 +3 3943 3942 3810 +3 3811 3943 3810 +3 4077 4076 3942 +3 3943 4077 3942 +3 4077 4210 4209 +3 4076 4077 4209 +3 4343 4342 4209 +3 4210 4343 4209 +3 4477 4476 4342 +3 4343 4477 4342 +3 4477 4611 4610 +3 4476 4477 4610 +3 4745 4744 4610 +3 4611 4745 4610 +3 4745 4880 4879 +3 4744 4745 4879 +3 4880 5015 5014 +3 4879 4880 5014 +3 5150 5149 5014 +3 5015 5150 5014 +3 35351 35509 35750 +3 5150 5284 5149 +3 3989 1754 5554 +3 5061 5060 13771 +3 8574 13782 3989 +3 1754 5061 5554 +3 5822 5821 5687 +3 5688 5822 5687 +3 5822 5954 5953 +3 5821 5822 5953 +3 6086 6085 5953 +3 5954 6086 5953 +3 6216 6215 6085 +3 6086 6216 6085 +3 6345 6344 6215 +3 6216 6345 6215 +3 6472 6471 6344 +3 6345 6472 6344 +3 6598 6597 6471 +3 6472 6598 6471 +3 6723 6722 6597 +3 6598 6723 6597 +3 294 230 6722 +3 6723 294 6722 +3 548 435 230 +3 294 548 230 +3 3705 3706 435 +3 548 3705 435 +3 3447 3307 3706 +3 3705 3447 3706 +3 3847 3715 3307 +3 3447 3847 3307 +3 2080 2079 3715 +3 3847 2080 3715 +3 1964 1963 2079 +3 2080 1964 2079 +3 4651 4793 1963 +3 1964 4651 1963 +3 2631 2496 4793 +3 4651 2631 4793 +3 6786 6658 27783 +3 2631 2231 2496 +3 11913 11997 11912 +3 12414 12413 12327 +3 35682 35388 35858 +3 20485 23122 16010 +3 10378 2090 12930 +3 10466 14184 9519 +3 6501 6502 6627 +3 1701 1702 1818 +3 6627 6628 6752 +3 7164 11555 11556 +3 33547 801 800 +3 3952 3953 4086 +3 886 1005 1004 +3 428 542 427 +3 5445 5446 5579 +3 3289 3288 3148 +3 4088 4221 4220 +3 2336 2470 2335 +3 2204 2336 2335 +3 2203 2204 2335 +3 4630 4631 4764 +3 317 316 7041 +3 2605 2604 2469 +3 1728 10023 3181 +3 657 656 541 +3 1727 1726 5592 +3 2367 2498 2087 +3 12084 12166 12083 +3 1727 3181 1726 +3 6378 6505 6504 +3 2331 2465 2464 +3 12679 12678 12588 +3 2073 2202 2072 +3 1745 1862 1744 +3 2220 5459 2219 +3 9641 11135 12629 +3 24164 23918 24547 +3 411 525 524 +3 410 7235 7236 +3 525 640 639 +3 524 525 639 +3 640 758 757 +3 639 640 757 +3 758 877 876 +3 757 758 876 +3 877 996 995 +3 876 877 995 +3 996 1114 1113 +3 995 996 1113 +3 1114 1230 1229 +3 1113 1114 1229 +3 1230 1346 1345 +3 1229 1230 1345 +3 1346 1462 1461 +3 1345 1346 1461 +3 1462 1578 1577 +3 1461 1462 1577 +3 1578 1695 1694 +3 1577 1578 1694 +3 1695 1812 1811 +3 20723 950 17722 +3 1812 1932 1931 +3 1811 1812 1931 +3 1932 2057 2056 +3 1931 1932 2056 +3 2186 2185 2056 +3 2057 2186 2056 +3 2186 2318 2317 +3 2185 2186 2317 +3 2452 2451 2317 +3 2318 2452 2317 +3 2452 2587 2586 +3 2451 2452 2586 +3 2587 2722 2721 +3 2586 2587 2721 +3 2722 2858 2857 +3 2721 2722 2857 +3 2858 2997 2996 +3 2857 2858 2996 +3 2997 3138 3137 +3 2996 2997 3137 +3 3138 3278 3277 +3 3137 3138 3277 +3 3278 3417 3416 +3 3277 3278 3416 +3 3417 3550 3549 +3 3416 3417 3549 +3 3550 3680 3679 +3 3549 3550 3679 +3 3680 3812 3811 +3 3679 3680 3811 +3 3812 3944 3943 +3 3811 3812 3943 +3 3944 4078 4077 +3 3943 3944 4077 +3 4211 4210 4077 +3 4078 4211 4077 +3 4344 4343 4210 +3 4211 4344 4210 +3 4478 4477 4343 +3 4344 4478 4343 +3 4478 4612 4611 +3 4477 4478 4611 +3 4746 4745 4611 +3 4612 4746 4611 +3 4881 4880 4745 +3 4746 4881 4745 +3 4881 5016 5015 +3 4880 4881 5015 +3 5151 5150 5015 +3 5016 5151 5015 +3 5285 5284 5150 +3 5151 5285 5150 +3 12593 12592 12502 +3 4649 15186 15311 +3 12683 12682 12592 +3 12503 12593 12502 +3 12593 12683 12592 +3 5823 5822 5688 +3 5689 5823 5688 +3 5823 5955 5954 +3 5822 5823 5954 +3 5955 6087 6086 +3 5954 5955 6086 +3 6217 6216 6086 +3 6087 6217 6086 +3 6346 6345 6216 +3 6217 6346 6216 +3 6473 6472 6345 +3 6346 6473 6345 +3 6599 6598 6472 +3 6473 6599 6472 +3 6724 6723 6598 +3 6599 6724 6598 +3 323 294 6723 +3 6724 323 6723 +3 434 548 294 +3 323 434 294 +3 3835 3705 548 +3 434 3835 548 +3 3308 3447 3705 +3 3835 3308 3705 +3 3173 3847 3447 +3 3308 3173 3447 +3 2081 2080 3847 +3 3173 2081 3847 +3 1965 1964 2080 +3 2081 1965 2080 +3 899 4651 1964 +3 1965 899 1964 +3 2766 2631 4651 +3 899 2766 4651 +3 35824 2137 35455 +3 16754 25466 25608 +3 12328 12414 12327 +3 12503 12502 12413 +3 23308 23405 23307 +3 20069 16009 22928 +3 12930 10466 9519 +3 14184 8770 11071 +3 5968 6100 6099 +3 1359 1475 1358 +3 6354 6481 6480 +3 4092 4225 4091 +3 4361 4360 4228 +3 4092 4091 3957 +3 417 418 531 +3 5838 5970 5837 +3 3826 3958 3825 +3 5705 5839 5704 +3 2199 2198 2069 +3 6102 6101 5969 +3 3958 4092 3957 +3 4389 4791 1384 +3 3958 3957 3825 +3 5967 5968 6099 +3 5971 5970 5838 +3 894 1013 893 +3 6353 6354 6480 +3 3144 3145 3284 +3 6607 6732 6731 +3 9519 14184 11071 +3 3424 3557 3423 +3 5459 1727 5592 +3 5459 5592 2219 +3 542 541 427 +3 5446 5580 5579 +3 412 526 525 +3 7236 411 410 +3 526 641 640 +3 525 526 640 +3 641 759 758 +3 640 641 758 +3 759 878 877 +3 758 759 877 +3 878 997 996 +3 877 878 996 +3 997 1115 1114 +3 996 997 1114 +3 1115 1231 1230 +3 1114 1115 1230 +3 1231 1347 1346 +3 1230 1231 1346 +3 1347 1463 1462 +3 1346 1347 1462 +3 1463 1579 1578 +3 1462 1463 1578 +3 1579 1696 1695 +3 1578 1579 1695 +3 1696 1813 1812 +3 1695 1696 1812 +3 1813 1933 1932 +3 1812 1813 1932 +3 1933 2058 2057 +3 1932 1933 2057 +3 2187 2186 2057 +3 2058 2187 2057 +3 2187 2319 2318 +3 2186 2187 2318 +3 2319 2453 2452 +3 2318 2319 2452 +3 2453 2588 2587 +3 2452 2453 2587 +3 2588 2723 2722 +3 2587 2588 2722 +3 2723 2859 2858 +3 2722 2723 2858 +3 2859 2998 2997 +3 2858 2859 2997 +3 2998 3139 3138 +3 2997 2998 3138 +3 3139 3279 3278 +3 3138 3139 3278 +3 3279 3418 3417 +3 3278 3279 3417 +3 3551 3550 3417 +3 3418 3551 3417 +3 3681 3680 3550 +3 3551 3681 3550 +3 3813 3812 3680 +3 3681 3813 3680 +3 3813 3945 3944 +3 3812 3813 3944 +3 3945 4079 4078 +3 3944 3945 4078 +3 4212 4211 4078 +3 4079 4212 4078 +3 4212 4345 4344 +3 4211 4212 4344 +3 4345 4479 4478 +3 4344 4345 4478 +3 4613 4612 4478 +3 4479 4613 4478 +3 4747 4746 4612 +3 4613 4747 4612 +3 4882 4881 4746 +3 4747 4882 4746 +3 5017 5016 4881 +3 4882 5017 4881 +3 5017 5152 5151 +3 5016 5017 5151 +3 5152 5286 5285 +3 5151 5152 5285 +3 5421 5422 14803 +3 5286 5421 5285 +3 21560 11575 17285 +3 29818 23842 23900 +3 30454 30453 30320 +3 28987 26412 19568 +3 5824 5823 5689 +3 5689 5687 14706 +3 5956 5955 5823 +3 5824 5956 5823 +3 10337 3457 7452 +3 5955 5956 6087 +3 6218 6217 6087 +3 6088 6218 6087 +3 6218 6347 6346 +3 6217 6218 6346 +3 6474 6473 6346 +3 6347 6474 6346 +3 6600 6599 6473 +3 6474 6600 6473 +3 6725 6724 6599 +3 6600 6725 6599 +3 324 323 6724 +3 6725 324 6724 +3 5957 434 323 +3 324 5957 323 +3 3966 3835 434 +3 5957 3966 434 +3 3974 3308 3835 +3 3966 3974 3835 +3 3974 3032 3173 +3 3308 3974 3173 +3 6616 2081 3173 +3 3032 6616 3173 +3 1966 1965 2081 +3 6616 1966 2081 +3 91 899 1965 +3 1966 91 1965 +3 2765 2766 899 +3 91 2765 899 +3 10866 10975 4124 +3 2765 2103 2766 +3 12414 12503 12413 +3 12771 12772 12863 +3 21459 21369 26347 +3 691 21225 2938 +3 8770 7576 12842 +3 11071 8770 12842 +3 5171 5172 5305 +3 2096 2226 4130 +3 7576 6636 6760 +3 8422 8529 1992 +3 2117 2246 2245 +3 2116 2117 2245 +3 2246 2378 2377 +3 2245 2246 2377 +3 2378 2512 2511 +3 2377 2378 2511 +3 2512 2647 2646 +3 2511 2512 2646 +3 2782 2648 2783 +3 2646 2647 2781 +3 10500 8691 13995 +3 13532 13630 13531 +3 6520 1051 8578 +3 2062 2063 2191 +3 1005 1123 1122 +3 542 657 541 +3 3149 3289 3148 +3 413 527 526 +3 7237 412 411 +3 527 642 641 +3 526 527 641 +3 760 759 641 +3 642 760 641 +3 760 879 878 +3 759 760 878 +3 879 998 997 +3 878 879 997 +3 998 1116 1115 +3 997 998 1115 +3 1116 1232 1231 +3 1115 1116 1231 +3 1232 1348 1347 +3 1231 1232 1347 +3 1348 1464 1463 +3 1347 1348 1463 +3 1464 1580 1579 +3 1463 1464 1579 +3 1580 1697 1696 +3 1579 1580 1696 +3 1697 1814 1813 +3 1696 1697 1813 +3 1814 1934 1933 +3 1813 1814 1933 +3 1934 2059 2058 +3 1933 1934 2058 +3 2188 2187 2058 +3 2059 2188 2058 +3 2320 2319 2187 +3 2188 2320 2187 +3 2320 2454 2453 +3 2319 2320 2453 +3 2454 2589 2588 +3 2453 2454 2588 +3 2589 2724 2723 +3 2588 2589 2723 +3 2724 2860 2859 +3 2723 2724 2859 +3 2860 2999 2998 +3 2859 2860 2998 +3 2999 3140 3139 +3 2998 2999 3139 +3 3280 3279 3139 +3 3140 3280 3139 +3 3280 3419 3418 +3 3279 3280 3418 +3 3552 3551 3418 +3 3419 3552 3418 +3 3682 3681 3551 +3 3552 3682 3551 +3 3814 3813 3681 +3 3682 3814 3681 +3 3814 3946 3945 +3 3813 3814 3945 +3 3946 4080 4079 +3 3945 3946 4079 +3 4213 4212 4079 +3 4080 4213 4079 +3 4213 4346 4345 +3 4212 4213 4345 +3 4480 4479 4345 +3 4346 4480 4345 +3 4614 4613 4479 +3 4480 4614 4479 +3 4614 4748 4747 +3 4613 4614 4747 +3 4748 4883 4882 +3 4747 4748 4882 +3 5018 5017 4882 +3 4883 5018 4882 +3 5153 5152 5017 +3 5018 5153 5017 +3 5287 5286 5152 +3 5153 5287 5152 +3 5423 5422 5287 +3 4102 4368 9768 +3 12249 12334 12248 +3 29149 30423 30072 +3 12842 7576 6760 +3 6636 220 6389 +3 5825 5824 5690 +3 6760 6636 6389 +3 11804 7016 6916 +3 35799 35518 35539 +3 6477 6603 6602 +3 3558 3688 3687 +3 6089 6219 6218 +3 5956 8131 6088 +3 6219 6348 6347 +3 6218 6219 6347 +3 6475 6474 6347 +3 6348 6475 6347 +3 6601 6600 6474 +3 6475 6601 6474 +3 6726 6725 6600 +3 6601 6726 6600 +3 333 324 6725 +3 6726 333 6725 +3 333 666 5957 +3 324 333 5957 +3 3575 3966 5957 +3 666 3575 5957 +3 3842 3974 3966 +3 3575 3842 3966 +3 2893 3032 3974 +3 3842 2893 3974 +3 1959 6616 3032 +3 2893 1959 3032 +3 1959 2092 1966 +3 6616 1959 1966 +3 90 91 1966 +3 2092 90 1966 +3 4924 2765 91 +3 90 4924 91 +3 1529 35491 35627 +3 90 5059 4924 +3 12864 12957 12956 +3 13051 12957 23923 +3 12166 12249 12165 +3 12334 12333 12248 +3 220 4530 37 +3 6389 220 37 +3 22511 22510 22412 +3 12003 12084 12002 +3 3156 3155 3014 +3 35714 35412 35529 +3 5441 5442 5575 +3 2470 2469 2335 +3 414 528 527 +3 7238 7239 413 +3 528 643 642 +3 527 528 642 +3 643 761 760 +3 642 643 760 +3 761 880 879 +3 760 761 879 +3 999 998 879 +3 880 999 879 +3 999 1117 1116 +3 998 999 1116 +3 1117 1233 1232 +3 1116 1117 1232 +3 1233 1349 1348 +3 1232 1233 1348 +3 1349 1465 1464 +3 1348 1349 1464 +3 1465 1581 1580 +3 1464 1465 1580 +3 1698 1697 1580 +3 1581 1698 1580 +3 1815 1814 1697 +3 1698 1815 1697 +3 1815 1935 1934 +3 1814 1815 1934 +3 1935 2060 2059 +3 1934 1935 2059 +3 2060 2189 2188 +3 2059 2060 2188 +3 2321 2320 2188 +3 2189 2321 2188 +3 2321 2455 2454 +3 2320 2321 2454 +3 2455 2590 2589 +3 2454 2455 2589 +3 2590 2725 2724 +3 2589 2590 2724 +3 2725 2861 2860 +3 2724 2725 2860 +3 2861 3000 2999 +3 2860 2861 2999 +3 3000 3141 3140 +3 2999 3000 3140 +3 3281 3280 3140 +3 3141 3281 3140 +3 3420 3419 3280 +3 3281 3420 3280 +3 3553 3552 3419 +3 3420 3553 3419 +3 3683 3682 3552 +3 3553 3683 3552 +3 3683 3815 3814 +3 3682 3683 3814 +3 3815 3947 3946 +3 3814 3815 3946 +3 3947 4081 4080 +3 3946 3947 4080 +3 4214 4213 4080 +3 4081 4214 4080 +3 4347 4346 4213 +3 4214 4347 4213 +3 4347 4481 4480 +3 4346 4347 4480 +3 4615 4614 4480 +3 4481 4615 4480 +3 4615 4749 4748 +3 4614 4615 4748 +3 4884 4883 4748 +3 4749 4884 4748 +3 5019 5018 4883 +3 4884 5019 4883 +3 5019 5154 5153 +3 5018 5019 5153 +3 5288 5287 5153 +3 5154 5288 5153 +3 12863 12864 12956 +3 35568 35701 35350 +3 31625 31624 31537 +3 14185 9652 35758 +3 22312 22409 22408 +3 3993 4530 5735 +3 12166 12165 12083 +3 22216 22312 22311 +3 6088 6089 6218 +3 8329 5959 10222 +3 6090 6220 6219 +3 6089 6090 6219 +3 6220 6349 6348 +3 6219 6220 6348 +3 6476 6475 6348 +3 6349 6476 6348 +3 6476 6602 6601 +3 6475 6476 6601 +3 6602 6727 6726 +3 6601 6602 6726 +3 6727 449 333 +3 6726 6727 333 +3 449 667 666 +3 333 449 666 +3 667 3704 3575 +3 666 667 3575 +3 3704 3710 3842 +3 3575 3704 3842 +3 2756 2893 3842 +3 3710 2756 3842 +3 1958 1959 2893 +3 2756 1958 2893 +3 2093 2092 1959 +3 1958 2093 1959 +3 1027 90 2092 +3 2093 1027 2092 +3 1027 5059 90 +3 16048 5424 617 +3 34807 34806 34678 +3 34414 34551 34413 +3 12956 12957 13050 +3 14309 14308 14210 +3 31111 31174 31173 +3 26950 26949 11594 +3 5830 5962 8976 +3 31399 31466 31398 +3 24840 24789 25336 +3 5574 5575 5709 +3 1744 1861 1743 +3 8089 13613 9801 +3 4751 4886 4885 +3 4349 4483 4482 +3 4631 4765 4764 +3 415 529 528 +3 414 7239 7240 +3 529 644 643 +3 528 529 643 +3 644 762 761 +3 643 644 761 +3 762 881 880 +3 761 762 880 +3 881 1000 999 +3 880 881 999 +3 1000 1118 1117 +3 999 1000 1117 +3 1118 1234 1233 +3 1117 1118 1233 +3 1234 1350 1349 +3 1233 1234 1349 +3 1350 1466 1465 +3 1349 1350 1465 +3 1582 1581 1465 +3 1466 1582 1465 +3 1699 1698 1581 +3 1582 1699 1581 +3 1816 1815 1698 +3 1699 1816 1698 +3 1936 1935 1815 +3 1816 1936 1815 +3 2061 2060 1935 +3 1936 2061 1935 +3 2061 2190 2189 +3 2060 2061 2189 +3 2190 2322 2321 +3 2189 2190 2321 +3 2322 2456 2455 +3 2321 2322 2455 +3 2456 2591 2590 +3 2455 2456 2590 +3 2591 2726 2725 +3 2590 2591 2725 +3 2726 2862 2861 +3 2725 2726 2861 +3 2862 3001 3000 +3 2861 2862 3000 +3 3001 3142 3141 +3 3000 3001 3141 +3 3142 3282 3281 +3 3141 3142 3281 +3 3421 3420 3281 +3 3282 3421 3281 +3 3554 3553 3420 +3 3421 3554 3420 +3 3684 3683 3553 +3 3554 3684 3553 +3 3684 3816 3815 +3 3683 3684 3815 +3 3816 3948 3947 +3 3815 3816 3947 +3 4082 4081 3947 +3 3948 4082 3947 +3 4082 4215 4214 +3 4081 4082 4214 +3 4215 4348 4347 +3 7046 7150 7149 +3 22215 22216 22311 +3 7045 7046 7149 +3 13320 35858 11129 +3 8312 8313 1870 +3 14257 13299 14256 +3 5203 3202 1976 +3 35462 35550 35653 +3 31110 31111 31173 +3 35897 35451 35367 +3 7292 7291 21379 +3 35824 35381 19680 +3 7344 14528 11250 +3 13429 13335 20265 +3 5864 5203 1976 +3 35407 14276 35398 +3 14118 14214 14213 +3 35807 35597 35715 +3 7993 11230 7366 +3 1634 1517 8091 +3 7269 7270 7380 +3 8609 8608 8501 +3 11369 9080 10095 +3 10846 8130 10095 +3 7371 7370 7259 +3 9250 9249 9140 +3 10638 10762 10761 +3 6226 6355 8520 +3 9263 9375 9262 +3 10516 10638 10637 +3 10469 10468 9199 +3 9832 9831 9716 +3 10515 10516 10637 +3 11095 8234 11096 +3 10394 10395 10514 +3 8171 8279 8278 +3 11390 11394 9625 +3 6961 7812 8140 +3 10395 10515 10514 +3 8520 7425 6226 +3 10283 10282 10163 +3 8491 8598 8597 +3 9375 9374 9262 +3 10637 10638 10761 +3 150 151 256 +3 8044 8219 11371 +3 10762 10887 10761 +3 1185 6148 18341 +3 11065 10686 11325 +3 10944 10935 7910 +3 15815 15679 3312 +3 13413 7932 9685 +3 8695 8694 8587 +3 7326 8147 7438 +3 9296 9172 11219 +3 3960 10514 10513 +3 9028 9027 8920 +3 10520 10521 10642 +3 10511 8776 7142 +3 8292 8399 8398 +3 8890 8463 9319 +3 9178 17158 9177 +3 7928 9562 10214 +3 9133 9134 9242 +3 21654 7294 7293 +3 10846 9103 8130 +3 10988 11115 8995 +3 9296 11219 10870 +3 29770 29769 29636 +3 9717 9832 9716 +3 1862 1982 1861 +3 7920 10944 7910 +3 13040 13134 13039 +3 9080 7197 8758 +3 8588 8695 8587 +3 10640 10764 10763 +3 10189 10308 10307 +3 10765 10764 10640 +3 10639 10640 10763 +3 35220 35221 26799 +3 8559 7463 5452 +3 22613 22712 22711 +3 35762 35714 35941 +3 11189 11188 10445 +3 7257 7256 7149 +3 35828 35527 35834 +3 7150 7257 7149 +3 1423 4273 5599 +3 10616 10494 11226 +3 7726 7841 7840 +3 9054 9053 8946 +3 8060 8171 8170 +3 8947 9054 8946 +3 4261 10740 10443 +3 7647 6893 9671 +3 7928 7785 8564 +3 25267 25129 25130 +3 29637 29770 29636 +3 9338 8148 9174 +3 7360 7586 8584 +3 29899 29898 29769 +3 10377 106 7250 +3 14115 14116 14211 +3 13109 7768 10376 +3 23011 23010 22911 +3 1406 932 225 +3 10399 10519 10518 +3 30216 29420 35657 +3 7014 7013 6915 +3 10301 10421 10300 +3 8638 8639 8745 +3 9130 9129 9021 +3 8531 8532 8638 +3 8853 8852 8745 +3 10140 10991 10023 +3 8639 8746 8745 +3 9022 9021 8914 +3 9022 9130 9021 +3 9813 9929 9928 +3 8915 9022 8914 +3 9812 9813 9928 +3 10046 10164 10045 +3 7368 7367 7256 +3 7257 7368 7256 +3 8425 8532 8531 +3 8424 8425 8531 +3 9927 10044 10043 +3 12150 12151 12233 +3 9505 10626 6960 +3 9322 9436 8030 +3 8733 8840 8732 +3 8947 8946 8839 +3 9896 8337 10490 +3 8733 8732 8625 +3 7950 7949 7833 +3 2775 9276 2640 +3 11291 7769 6965 +3 6939 7038 7037 +3 29770 29899 29769 +3 2356 11095 2075 +3 7368 7480 7479 +3 8746 8853 8745 +3 7367 7368 7479 +3 21377 7191 11506 +3 7594 7593 7479 +3 1879 12455 35797 +3 29792 29791 29658 +3 7756 7755 7640 +3 8425 8424 8317 +3 7641 7756 7640 +3 7871 7870 7755 +3 7756 7871 7755 +3 7987 7986 7870 +3 7868 7984 7867 +3 7871 7987 7870 +3 10281 10280 10161 +3 8532 8639 8638 +3 7694 7579 6960 +3 12814 13000 10362 +3 11590 11589 11522 +3 9779 11009 10369 +3 12408 12407 12321 +3 12618 12617 12527 +3 8626 8733 8625 +3 11522 11458 11459 +3 8626 8625 8518 +3 8840 8839 8732 +3 19796 30502 30473 +3 14019 14020 14117 +3 8696 8803 8695 +3 10619 11118 10620 +3 35469 27783 6658 +3 8650 11258 8775 +3 8318 8425 8317 +3 7059 7058 11553 +3 8102 8101 7986 +3 7753 7868 7752 +3 7987 8102 7986 +3 8213 8212 8101 +3 8102 8213 8101 +3 8321 8320 8212 +3 8213 8321 8212 +3 8428 8427 8320 +3 8321 8428 8320 +3 8535 8534 8427 +3 8428 8535 8427 +3 8099 8098 7983 +3 8642 8641 8534 +3 9064 9095 8550 +3 7984 8099 7983 +3 9944 10061 9943 +3 7480 7594 7479 +3 7707 7708 7822 +3 9552 9447 8308 +3 32403 32508 32402 +3 7044 7045 7148 +3 2486 1835 6021 +3 8673 8780 7801 +3 7594 7709 7708 +3 30030 30029 29898 +3 12418 12507 12417 +3 7593 7594 7708 +3 7824 7823 7708 +3 7709 7824 7708 +3 12844 11507 3317 +3 7940 7939 7823 +3 10766 10891 10890 +3 9449 10620 7805 +3 8589 8590 8696 +3 9780 7326 9666 +3 7984 7983 7867 +3 8804 8911 8803 +3 8535 8642 8534 +3 17448 7213 35193 +3 8749 8748 8641 +3 8642 8749 8641 +3 8749 8856 8855 +3 8748 8749 8855 +3 8856 8963 8962 +3 8855 8856 8962 +3 7753 7752 7637 +3 8963 9070 9069 +3 8210 8318 8209 +3 7638 7753 7637 +3 8210 8209 8098 +3 8099 8210 8098 +3 34277 34415 34276 +3 8318 8317 8209 +3 27754 28336 6862 +3 21466 11360 11513 +3 9447 9505 8308 +3 10061 10060 9943 +3 7824 7940 7823 +3 7939 7938 7822 +3 9149 9148 9040 +3 10548 10670 10547 +3 12862 12863 12955 +3 12001 12082 12000 +3 29899 30030 29898 +3 11456 11519 11455 +3 30162 30161 30029 +3 19038 27168 2811 +3 8055 8054 7939 +3 6256 13799 2091 +3 7593 7592 7478 +3 9211 10808 11082 +3 11197 9449 7805 +3 7593 7708 7592 +3 30096 30097 19796 +3 3202 2123 3475 +3 30332 29290 6531 +3 27276 27394 27393 +3 28685 28684 28555 +3 35421 35605 35897 +3 8962 8963 9069 +3 688 6789 8867 +3 9287 17158 9178 +3 9069 9070 9177 +3 10510 7758 9229 +3 9859 9975 2366 +3 30030 30162 30029 +3 6888 11486 6955 +3 30295 30294 30161 +3 7868 7867 7752 +3 7940 8055 7939 +3 8166 8165 8054 +3 28685 28817 28684 +3 30162 30295 30161 +3 35409 35630 35626 +3 19900 30340 30489 +3 6248 2490 2338 +3 1134 10866 1021 +3 8291 8398 8397 +3 8308 9505 6960 +3 9211 7795 10808 +3 8055 8166 8054 +3 8673 9781 9897 +3 10065 10183 10182 +3 1134 8546 10866 +3 5857 2341 2342 +3 26795 27982 12007 +3 2023 19163 19060 +3 12860 12953 12952 +3 8881 13895 9991 +3 12859 12860 12952 +3 26516 31551 26517 +3 7917 8780 11502 +3 14303 340 8735 +3 7708 7707 7592 +3 13917 13916 13818 +3 7479 7593 7478 +3 7708 7823 7822 +3 8274 8273 8165 +3 30428 30427 30294 +3 7628 7629 7743 +3 7743 7744 7858 +3 8701 8808 8807 +3 8166 8274 8165 +3 7943 7944 8058 +3 10749 809 9800 +3 6958 7538 7896 +3 8059 8060 8170 +3 8381 8380 8273 +3 8274 8381 8273 +3 10645 10644 10522 +3 1976 3202 3475 +3 33556 7514 33555 +3 27955 26930 17669 +3 10520 10642 10519 +3 7629 7744 7743 +3 28624 30366 30365 +3 27393 27394 27512 +3 19906 19796 30473 +3 800 7504 7392 +3 5452 7463 5451 +3 8381 8488 8487 +3 29241 29378 29377 +3 26510 26509 26423 +3 30295 30428 30294 +3 30625 26792 24885 +3 30562 30561 30427 +3 29377 29378 29514 +3 10669 10668 10546 +3 35511 35726 35927 +3 1135 7672 8546 +3 10975 8575 1253 +3 8575 10975 10866 +3 8546 8575 10866 +3 1423 5599 357 +3 2123 9746 2478 +3 1714 8481 1596 +3 10372 10496 2907 +3 7175 7686 10030 +3 245 16093 16053 +3 13819 13917 13818 +3 14302 14303 8735 +3 11933 11845 11847 +3 12797 12796 12707 +3 30428 30562 30427 +3 7504 7505 7618 +3 7858 7859 1400 +3 8380 8381 8487 +3 8488 8595 8594 +3 1400 1283 7858 +3 3475 2123 2478 +3 9695 9696 9810 +3 13923 14021 13922 +3 778 7592 897 +3 14021 14119 14118 +3 14212 14310 14309 +3 10541 10540 10420 +3 8068 8179 8067 +3 630 514 7450 +3 7744 7859 7858 +3 9126 9235 9234 +3 10643 10767 10642 +3 30696 30695 30561 +3 7550 8952 6380 +3 13821 13919 13820 +3 2277 2278 2411 +3 14015 14014 13916 +3 3698 3569 3699 +3 31407 11413 31475 +3 8487 8488 8594 +3 8595 8702 8701 +3 22932 12545 22438 +3 8912 8913 9019 +3 13728 13727 13629 +3 8052 8163 8051 +3 8271 8270 8162 +3 23816 28253 25096 +3 547 8874 3306 +3 10146 8575 8546 +3 7672 10146 8546 +3 9108 9216 8575 +3 10146 9108 8575 +3 8012 7897 9216 +3 9108 8012 9216 +3 25945 4194 30074 +3 1287 16708 3170 +3 10612 9438 8658 +3 10619 7361 11118 +3 17761 19327 19297 +3 28856 29763 28590 +3 7555 7556 7883 +3 13258 13257 13162 +3 11291 11290 11164 +3 16047 16041 16644 +3 10040 10158 3569 +3 10911 10912 11037 +3 8180 8288 8287 +3 1692 1809 18991 +3 10326 10207 10208 +3 9693 9694 9808 +3 8792 6489 7741 +3 12772 12864 12863 +3 8594 8595 8701 +3 9254 9253 9144 +3 35789 35869 35450 +3 10042 10160 10041 +3 9809 9925 9924 +3 7533 7142 9753 +3 264 373 263 +3 9924 10041 9923 +3 9459 9918 8249 +3 8080 8079 7964 +3 7849 7965 7848 +3 13112 11716 12118 +3 12539 9109 12544 +3 9064 8550 7741 +3 8702 8809 8808 +3 5333 3195 5695 +3 8701 8702 8808 +3 13609 13320 13770 +3 8809 8916 8915 +3 12164 12163 12081 +3 11134 11130 3340 +3 7235 409 7234 +3 24079 22290 22291 +3 18722 17528 18318 +3 31408 23519 19976 +3 11316 10146 7672 +3 8452 11316 7672 +3 9000 9108 10146 +3 11316 9000 10146 +3 8013 8012 9108 +3 9000 8013 9108 +3 13596 4118 35823 +3 8013 11202 8012 +3 10164 10283 10163 +3 8452 7672 1135 +3 10473 11068 9438 +3 35629 35861 35585 +3 13354 13449 13448 +3 35404 19340 35381 +3 7849 7848 7733 +3 9109 12201 12544 +3 10892 10891 10766 +3 1516 1515 1400 +3 1146 7897 1145 +3 9017 9018 9125 +3 9808 9809 9924 +3 10970 4917 669 +3 11172 11298 11297 +3 10042 10041 9924 +3 35904 35616 35674 +3 30562 30696 30561 +3 8808 8809 8915 +3 11270 8234 2356 +3 35390 35864 35362 +3 5310 5309 10445 +3 9925 10042 9924 +3 11857 8797 35617 +3 10659 10660 10783 +3 4817 3621 12601 +3 4099 5983 4770 +3 7933 212 4498 +3 8994 545 2128 +3 9869 9084 10127 +3 27437 12185 12102 +3 6245 6244 6115 +3 13498 14166 35366 +3 8163 8271 8162 +3 1136 9858 9976 +3 9563 6248 6119 +3 3975 3711 8986 +3 10155 10272 4099 +3 10636 10637 4228 +3 11265 7440 10597 +3 10969 11265 10597 +3 9920 8452 7440 +3 11265 9920 7440 +3 9920 8473 11316 +3 8452 9920 11316 +3 8473 9327 9000 +3 11316 8473 9000 +3 9092 8013 9000 +3 9327 9092 9000 +3 9208 11202 8013 +3 9092 9208 8013 +3 1135 221 6798 +3 9208 9895 11202 +3 412 525 411 +3 8948 8841 2368 +3 25402 29430 19936 +3 28434 28433 28313 +3 11580 11581 11655 +3 9765 10949 7776 +3 7965 7964 7848 +3 7965 8080 7964 +3 544 659 543 +3 11347 11376 8326 +3 7142 7366 9753 +3 10783 10784 10908 +3 2225 3591 3721 +3 10160 10159 10041 +3 7805 7690 10248 +3 9981 8880 8331 +3 30830 30829 30695 +3 30696 30830 30695 +3 35424 35545 13314 +3 29272 29273 19576 +3 26586 35845 8230 +3 7510 7535 6376 +3 13408 3042 4118 +3 26577 24958 22875 +3 22236 28591 13105 +3 18417 19537 19103 +3 5996 8348 11059 +3 9227 8038 5983 +3 3827 3960 3959 +3 20695 20777 20776 +3 10840 11340 8655 +3 7320 263 7319 +3 8133 9572 8655 +3 11340 8133 8655 +3 7532 11227 9572 +3 8133 7532 9572 +3 10820 10969 11227 +3 7532 10820 11227 +3 10384 11265 10969 +3 10820 10384 10969 +3 11351 9920 11265 +3 10384 11351 11265 +3 11351 8472 8473 +3 9920 11351 8473 +3 8472 9215 9327 +3 8473 8472 9327 +3 9215 9200 9092 +3 9327 9215 9092 +3 10037 9208 9092 +3 9200 10037 9092 +3 9916 9895 9208 +3 10037 9916 9208 +3 9221 9332 9895 +3 9916 9221 9895 +3 6618 6743 6742 +3 35884 35842 35720 +3 13069 13163 13068 +3 35558 35737 35786 +3 8191 8190 8079 +3 13813 13911 13910 +3 8618 8617 8510 +3 8080 8191 8079 +3 7611 7726 7725 +3 7611 7610 7496 +3 9832 9948 9831 +3 7610 7611 7725 +3 8502 8609 8501 +3 1521 10756 5865 +3 10064 10182 10181 +3 2360 9332 9221 +3 336 6385 2651 +3 7482 7483 7596 +3 11912 11996 11911 +3 35754 35518 35799 +3 18729 17443 30829 +3 9691 9692 9806 +3 9576 9692 9691 +3 9575 9576 9691 +3 3829 3828 3696 +3 9460 9576 9575 +3 9692 9807 9806 +3 30830 18729 30829 +3 22041 22040 17443 +3 28622 27139 27257 +3 34495 12652 35338 +3 8016 10462 10155 +3 31891 31890 31784 +3 10462 9122 10272 +3 10155 10462 10272 +3 9122 9228 9227 +3 10272 9122 9227 +3 9228 9423 8038 +3 9227 9228 8038 +3 9423 10841 10840 +3 8038 9423 10840 +3 11214 11340 10840 +3 10841 11214 10840 +3 11214 11331 8133 +3 11340 11214 8133 +3 11331 7905 7532 +3 8133 11331 7532 +3 7905 10825 10820 +3 7532 7905 10820 +3 10825 10264 10384 +3 10820 10825 10384 +3 10264 11350 11351 +3 10384 10264 11351 +3 11350 8471 8472 +3 11351 11350 8472 +3 8471 8893 9215 +3 8472 8471 9215 +3 8893 9312 9200 +3 9215 8893 9200 +3 9312 7475 10037 +3 9200 9312 10037 +3 7475 8664 9916 +3 10037 7475 9916 +3 8790 9221 9916 +3 8664 8790 9916 +3 35689 35855 35771 +3 8790 8128 9221 +3 20859 20939 20938 +3 9023 9022 8915 +3 11581 11656 11655 +3 9398 2742 8222 +3 8299 8298 8190 +3 10576 105 2787 +3 7422 3866 9987 +3 8191 8299 8190 +3 10614 7355 10616 +3 8971 8648 10572 +3 35413 35471 35666 +3 10493 10614 10616 +3 8169 8277 8276 +3 7329 8254 7785 +3 7321 264 7320 +3 11528 12054 12205 +3 8107 8889 9894 +3 2074 8801 2204 +3 9948 9947 9831 +3 10063 10064 10181 +3 35534 35706 35545 +3 8011 10599 6541 +3 7329 7669 8254 +3 8383 8384 8490 +3 3436 3435 3297 +3 35705 35830 35854 +3 9438 10862 9195 +3 8854 8853 8746 +3 17429 17350 17351 +3 8911 9018 8910 +3 9692 9693 9807 +3 7985 7984 7868 +3 10937 10566 7664 +3 9808 9924 9923 +3 9244 9245 9356 +3 10641 10765 10640 +3 7953 7952 7836 +3 7794 10860 10735 +3 18729 22041 17443 +3 22041 18009 18471 +3 35267 35139 21932 +3 11263 9060 31853 +3 7909 10462 8016 +3 9060 7909 8016 +3 9231 9122 10462 +3 7909 9231 10462 +3 9119 9228 9122 +3 9231 9119 9122 +3 9119 7352 9423 +3 9228 9119 9423 +3 7352 10718 10841 +3 9423 7352 10841 +3 10718 8416 11214 +3 10841 10718 11214 +3 8416 8333 11331 +3 11214 8416 11331 +3 8333 7419 7905 +3 11331 8333 7905 +3 7419 11062 10825 +3 7905 7419 10825 +3 11062 8159 10264 +3 10825 11062 10264 +3 8159 11209 11350 +3 10264 8159 11350 +3 11209 7889 8471 +3 11350 11209 8471 +3 7889 8786 8893 +3 8471 7889 8893 +3 8786 8984 9312 +3 8893 8786 9312 +3 8984 10959 7475 +3 9312 8984 7475 +3 10959 8764 8664 +3 7475 10959 8664 +3 8764 8794 8790 +3 8664 8764 8790 +3 10831 8128 8790 +3 8794 10831 8790 +3 25407 25264 35900 +3 33864 33863 33729 +3 2122 6793 15 +3 5825 974 7998 +3 6962 10576 2787 +3 5987 10261 13496 +3 8406 8405 8298 +3 10072 10071 9954 +3 10956 8648 8971 +3 7734 10956 8971 +3 8950 8951 9057 +3 10559 10681 10558 +3 10306 10307 10426 +3 7218 8255 10221 +3 8486 8487 8593 +3 25337 24850 23721 +3 8916 9023 8915 +3 14002 10326 10327 +3 8594 8701 8700 +3 15170 14681 1601 +3 7928 11388 7785 +3 7196 10454 10027 +3 10614 10238 9414 +3 8951 9058 9057 +3 22040 22041 18471 +3 8288 8395 8287 +3 8818 8819 8925 +3 8011 6544 10976 +3 8367 8584 10103 +3 8889 11388 8124 +3 31785 31891 31784 +3 11388 7928 8124 +3 11388 7329 7785 +3 8889 8124 9894 +3 8254 10103 7785 +3 9131 9130 9022 +3 9370 9485 9484 +3 9023 9131 9022 +3 9240 9239 9130 +3 9131 9240 9130 +3 9240 9352 9351 +3 9239 9240 9351 +3 7218 7669 11115 +3 9352 9467 9466 +3 9351 9352 9466 +3 9583 9582 9466 +3 9467 9583 9466 +3 8807 8808 8914 +3 8487 8594 8593 +3 7242 417 416 +3 18009 7180 456 +3 18471 18009 456 +3 10477 9060 10737 +3 10737 34197 28341 +3 10355 7909 9060 +3 10477 10355 9060 +3 9342 9231 7909 +3 10355 9342 7909 +3 9011 9119 9231 +3 9342 9011 9231 +3 10880 7352 9119 +3 9011 10880 9119 +3 10719 10718 7352 +3 10880 10719 7352 +3 10719 8415 8416 +3 10718 10719 8416 +3 8415 10971 8333 +3 8416 8415 8333 +3 10971 7996 7419 +3 8333 10971 7419 +3 7996 8464 11062 +3 7419 7996 11062 +3 8464 10881 8159 +3 11062 8464 8159 +3 10881 11225 11209 +3 8159 10881 11209 +3 11225 10033 7889 +3 11209 11225 7889 +3 10033 7285 8786 +3 7889 10033 8786 +3 7285 8877 8984 +3 8786 7285 8984 +3 8877 10834 10959 +3 8984 8877 10959 +3 10834 8476 8764 +3 10959 10834 8764 +3 8476 8688 8794 +3 8764 8476 8794 +3 8688 10707 10831 +3 8794 8688 10831 +3 2371 2505 8951 +3 10707 8876 10831 +3 2083 3983 179 +3 14269 12298 12213 +3 19797 30553 30502 +3 1855 13333 13791 +3 8170 8278 8277 +3 35113 18997 19099 +3 8648 8044 10572 +3 9955 10072 9954 +3 10805 10804 10680 +3 11178 11304 11303 +3 10479 9299 10221 +3 10681 10805 10680 +3 35871 35555 35399 +3 22612 22613 22711 +3 12292 13213 13300 +3 7872 7871 7756 +3 257 7313 258 +3 12210 15763 12295 +3 9734 9849 9733 +3 11171 11297 11296 +3 7351 10956 7734 +3 9849 9965 9964 +3 7514 7628 7627 +3 11011 10937 7659 +3 9166 9165 9057 +3 9058 9166 9057 +3 9166 9275 9165 +3 9275 9274 9165 +3 9618 9617 9501 +3 9387 9386 9274 +3 9275 9387 9274 +3 9502 9501 9386 +3 9502 9618 9501 +3 9387 9502 9386 +3 9734 9733 9617 +3 9618 9734 9617 +3 8107 9894 8890 +3 9849 9848 9733 +3 8570 12375 12454 +3 11186 8107 8890 +3 35455 35846 35414 +3 8144 11208 10951 +3 10988 7218 11115 +3 6354 6355 6481 +3 9103 10988 8995 +3 2491 13028 12296 +3 10208 13906 10327 +3 7669 7218 10221 +3 7988 7987 7871 +3 16843 9973 9972 +3 7872 7988 7871 +3 8103 8102 7987 +3 7988 8103 7987 +3 8214 8213 8102 +3 7540 6376 7535 +3 13713 13995 8048 +3 7180 21378 21377 +3 456 7180 21377 +3 10357 10477 7684 +3 22027 35267 21932 +3 7179 10355 10477 +3 10357 7179 10477 +3 9456 9342 10355 +3 7179 9456 10355 +3 10629 9011 9342 +3 9456 10629 9342 +3 11097 10880 9011 +3 10629 11097 9011 +3 10596 10719 10880 +3 11097 10596 10880 +3 10596 8414 8415 +3 10719 10596 8415 +3 8414 7739 10971 +3 8415 8414 10971 +3 7739 7418 7996 +3 10971 7739 7996 +3 7418 7680 8464 +3 7996 7418 8464 +3 7680 10882 10881 +3 8464 7680 10881 +3 10882 8742 11225 +3 10881 10882 11225 +3 8742 9888 10033 +3 11225 8742 10033 +3 9888 7091 7285 +3 10033 9888 7285 +3 7091 9426 8877 +3 7285 7091 8877 +3 9426 8202 10834 +3 8877 9426 10834 +3 8202 8411 8476 +3 10834 8202 8476 +3 8411 8582 8688 +3 8476 8411 8688 +3 8582 10584 10707 +3 8688 8582 10707 +3 10584 8983 8876 +3 10707 10584 8876 +3 8983 11246 9106 +3 8876 8983 9106 +3 8110 8558 9106 +3 11246 8110 9106 +3 24297 24296 25636 +3 12044 12196 12113 +3 10072 10190 10189 +3 9699 9698 9582 +3 10553 10554 10675 +3 10676 10800 10799 +3 10805 10930 10929 +3 11084 11309 11183 +3 30760 25438 30626 +3 22812 22813 22911 +3 8103 8214 8102 +3 8322 8321 8213 +3 8214 8322 8213 +3 8808 8915 8914 +3 8429 8428 8321 +3 10804 10805 10929 +3 9855 17005 9856 +3 11177 11178 11303 +3 10930 11056 11055 +3 8299 8406 8298 +3 10884 7351 7734 +3 13909 14007 14006 +3 218 669 4917 +3 13811 13909 13908 +3 12035 8089 14309 +3 10648 10649 11196 +3 13908 13909 14006 +3 5295 5430 5276 +3 4119 2914 6005 +3 9099 10649 10648 +3 9089 9099 10648 +3 7664 9099 9089 +3 7659 7664 9089 +3 10100 9983 11011 +3 10937 7664 7659 +3 10200 10199 10081 +3 7588 9983 10100 +3 9848 9849 9964 +3 10082 10200 10081 +3 10082 10081 9964 +3 9965 10082 9964 +3 10319 10318 10199 +3 10200 10319 10199 +3 10439 10438 10318 +3 10319 10439 10318 +3 10559 10558 10438 +3 10439 10559 10438 +3 10208 10207 10089 +3 10681 10680 10558 +3 10090 10089 9972 +3 10090 10208 10089 +3 8383 8490 8489 +3 8006 835 836 +3 8322 8429 8321 +3 6949 6950 7048 +3 21378 17670 7191 +3 21377 21378 7191 +3 8453 10357 11392 +3 7524 33127 33021 +3 10359 7179 10357 +3 8453 10359 10357 +3 9571 9456 7179 +3 10359 9571 7179 +3 10628 10629 9456 +3 9571 10628 9456 +3 9194 11097 10629 +3 10628 9194 10629 +3 8763 10596 11097 +3 9194 8763 11097 +3 8763 8413 8414 +3 10596 8763 8414 +3 8413 7853 7739 +3 8414 8413 7739 +3 7853 11254 7418 +3 7739 7853 7418 +3 11254 11338 7680 +3 7418 11254 7680 +3 11338 11138 10882 +3 7680 11338 10882 +3 11138 9545 8742 +3 10882 11138 8742 +3 9545 9886 9888 +3 8742 9545 9888 +3 9886 9863 7091 +3 9888 9886 7091 +3 9863 9541 9426 +3 7091 9863 9426 +3 9541 11025 8202 +3 9426 9541 8202 +3 11025 8412 8411 +3 8202 11025 8411 +3 8412 7913 8582 +3 8411 8412 8582 +3 7913 10463 10584 +3 8582 7913 10584 +3 10463 7898 8983 +3 10584 10463 8983 +3 7898 8789 11246 +3 8983 7898 11246 +3 8862 8110 11246 +3 8789 8862 11246 +3 35665 35713 35429 +3 209 314 7038 +3 20731 4650 18630 +3 3297 9807 9923 +3 10434 10554 10433 +3 10554 10676 10675 +3 11308 11309 10014 +3 8613 8720 8719 +3 9162 9161 9053 +3 10451 7819 7397 +3 8536 8535 8428 +3 8429 8536 8428 +3 8643 8642 8535 +3 8536 8643 8535 +3 8750 8749 8642 +3 20840 27614 27613 +3 8643 8750 8642 +3 11084 11183 11057 +3 9583 9699 9582 +3 11178 11177 11050 +3 11182 11183 11308 +3 10071 10072 10189 +3 11304 7351 10884 +3 8513 8512 8405 +3 8406 8513 8405 +3 8513 8620 8512 +3 8620 8619 8512 +3 8941 8940 8833 +3 8727 8726 8619 +3 8620 8727 8619 +3 8834 8941 8833 +3 8834 8833 8726 +3 8727 8834 8726 +3 9048 9047 8940 +3 8941 9048 8940 +3 9156 9155 9047 +3 9048 9156 9047 +3 9155 9156 9264 +3 9156 9265 9264 +3 10844 7588 10100 +3 9265 9377 9376 +3 8451 7588 10844 +3 9983 10937 11011 +3 11325 8451 9003 +3 9003 8451 10844 +3 11371 11325 11199 +3 11199 11325 9003 +3 8044 11371 10333 +3 10333 11371 11199 +3 11303 11304 10884 +3 10572 8044 10333 +3 11056 11183 11182 +3 10314 10434 10313 +3 10929 10930 11055 +3 11055 11056 11182 +3 8222 2742 4383 +3 10658 10659 10782 +3 8857 8856 8749 +3 8750 8857 8749 +3 17670 20597 13774 +3 7191 17670 13774 +3 7874 8453 9796 +3 9796 8453 11392 +3 8771 10359 8453 +3 7874 8771 8453 +3 9570 9571 10359 +3 8771 9570 10359 +3 10630 10628 9571 +3 9570 10630 9571 +3 6936 9194 10628 +3 10630 6936 10628 +3 10774 8763 9194 +3 6936 10774 9194 +3 10774 7969 8413 +3 8763 10774 8413 +3 7969 7852 7853 +3 8413 7969 7853 +3 7852 11127 11254 +3 7853 7852 11254 +3 11127 11212 11338 +3 11254 11127 11338 +3 11212 11010 11138 +3 11338 11212 11138 +3 11010 10137 9545 +3 11138 11010 9545 +3 10137 9911 9886 +3 9545 10137 9886 +3 9911 10847 9863 +3 9886 9911 9863 +3 10847 9656 9541 +3 9863 10847 9541 +3 9656 10685 11025 +3 9541 9656 11025 +3 10685 8417 8412 +3 11025 10685 8412 +3 8417 7395 7913 +3 8412 8417 7913 +3 7395 10344 10463 +3 7913 7395 10463 +3 10344 7781 7898 +3 10463 10344 7898 +3 7781 11114 8789 +3 7898 7781 8789 +3 11114 7693 8862 +3 8789 11114 8862 +3 2073 1948 2074 +3 11348 4917 10970 +3 14009 14107 14106 +3 2225 3721 2224 +3 9844 9843 9728 +3 22513 22514 22612 +3 7885 9229 7758 +3 10013 8993 8132 +3 35925 29543 35500 +3 9162 9271 9161 +3 8857 8964 8963 +3 12589 12588 12498 +3 8856 8857 8963 +3 8964 9071 9070 +3 8852 8851 8744 +3 8963 8964 9070 +3 9699 9814 9813 +3 8126 10443 8677 +3 13976 10457 11309 +3 7656 481 368 +3 10675 10676 10799 +3 10014 10457 10443 +3 10190 10309 10308 +3 11051 11178 11050 +3 8449 10700 10455 +3 10189 10190 10308 +3 14346 20411 20326 +3 10455 10575 6962 +3 40 12296 103 +3 13028 13316 12382 +3 8201 7255 8576 +3 7807 6892 10876 +3 10101 10106 8201 +3 21978 15195 21948 +3 7695 10448 10101 +3 7255 9565 8576 +3 10607 10613 7695 +3 10106 7255 8201 +3 9005 9006 10607 +3 10448 10106 10101 +3 9006 10613 10607 +3 10613 10448 7695 +3 9608 9607 9491 +3 10491 10583 7590 +3 9264 9265 9376 +3 9492 9608 9491 +3 9492 9491 9376 +3 9377 9492 9376 +3 9724 9723 9607 +3 9608 9724 9607 +3 9839 9838 9723 +3 9724 9839 9723 +3 9955 9954 9838 +3 9839 9955 9838 +3 10077 10195 10076 +3 10314 10313 10194 +3 10848 10616 11226 +3 10659 10783 10782 +3 8745 8744 8637 +3 8638 8745 8637 +3 9071 9179 9178 +3 9070 9071 9178 +3 20597 24285 20821 +3 13774 20597 20821 +3 10450 7874 10900 +3 35124 10900 9796 +3 10393 8771 7874 +3 10450 10393 7874 +3 10147 9570 8771 +3 10393 10147 8771 +3 10631 10630 9570 +3 10147 10631 9570 +3 9978 6936 10630 +3 10631 9978 10630 +3 10018 10774 6936 +3 9978 10018 6936 +3 10018 7970 7969 +3 10774 10018 7969 +3 7970 8521 7852 +3 7969 7970 7852 +3 8521 11255 11127 +3 7852 8521 11127 +3 11255 8633 11212 +3 11127 11255 11212 +3 8633 10883 11010 +3 11212 8633 11010 +3 10883 10020 10137 +3 11010 10883 10137 +3 10020 11379 9911 +3 10137 10020 9911 +3 11379 442 10847 +3 9911 11379 10847 +3 442 9770 9656 +3 10847 442 9656 +3 9770 10741 10685 +3 9656 9770 10685 +3 10741 8418 8417 +3 10685 10741 8417 +3 8418 7396 7395 +3 8417 8418 7395 +3 7396 10343 10344 +3 7395 7396 10344 +3 10343 10484 7781 +3 10344 10343 7781 +3 10484 9210 11114 +3 7781 10484 11114 +3 9210 10970 7693 +3 11114 9210 7693 +3 35411 35448 35360 +3 35923 35891 35893 +3 14536 791 792 +3 7543 485 484 +3 9613 9729 9612 +3 11029 11156 11028 +3 8712 8711 8604 +3 599 484 485 +3 8317 8424 8423 +3 8316 8317 8423 +3 6513 8450 6512 +3 9179 16995 9287 +3 35524 23855 35641 +3 12932 11528 12205 +3 14010 14011 14108 +3 8209 8317 8316 +3 19845 2714 2850 +3 11995 11994 11910 +3 8745 8852 8744 +3 9109 12720 1494 +3 6652 6786 27783 +3 10925 10924 10799 +3 10266 7146 10864 +3 10429 10428 10308 +3 10800 10925 10799 +3 9766 7894 8449 +3 10309 10429 10308 +3 8844 8556 7877 +3 10575 10576 6962 +3 11281 8556 8844 +3 8150 11281 8844 +3 7536 11192 7176 +3 8556 7536 7877 +3 7670 8037 8022 +3 7877 7536 7176 +3 11192 8037 7670 +3 9324 8245 8352 +3 7176 11192 7670 +3 8037 9324 8022 +3 8022 9324 8352 +3 8245 11117 8033 +3 8352 8245 8033 +3 11117 10745 8225 +3 8033 11117 8225 +3 35382 35921 35913 +3 7591 9006 9005 +3 8225 10745 7580 +3 9910 8553 10491 +3 7590 7591 9005 +3 2787 105 9910 +3 10583 7591 7590 +3 105 8553 9910 +3 8553 10583 10491 +3 10917 11043 10916 +3 11043 11170 11169 +3 10920 11046 10919 +3 11173 11299 11298 +3 9729 9844 9728 +3 9960 9959 9843 +3 10857 9207 9319 +3 10732 10857 9319 +3 8424 8531 8530 +3 8423 8424 8530 +3 9698 9699 9813 +3 24285 27062 27061 +3 7703 3720 8991 +3 1594 1712 1711 +3 20821 24285 27061 +3 27062 28424 28376 +3 8761 10450 9566 +3 33707 10900 35124 +3 8878 10393 10450 +3 8761 8878 10450 +3 10267 10147 10393 +3 8878 10267 10393 +3 10632 10631 10147 +3 10267 10632 10147 +3 10509 9978 10631 +3 10632 10509 10631 +3 8437 10018 9978 +3 10509 8437 9978 +3 8437 7854 7970 +3 10018 8437 7970 +3 7854 8522 8521 +3 7970 7854 8521 +3 8522 11126 11255 +3 8521 8522 11255 +3 11126 8632 8633 +3 11255 11126 8633 +3 8632 7621 10883 +3 8633 8632 10883 +3 7621 10993 10020 +3 10883 7621 10020 +3 10993 8469 11379 +3 10020 10993 11379 +3 8469 9441 442 +3 11379 8469 442 +3 9441 9885 9770 +3 442 9441 9770 +3 9885 7779 10741 +3 9770 9885 10741 +3 7779 8252 8418 +3 10741 7779 8418 +3 8252 8953 7396 +3 8418 8252 7396 +3 8953 11007 10343 +3 7396 8953 10343 +3 11007 10364 10484 +3 10343 11007 10484 +3 10364 11203 9210 +3 10484 10364 9210 +3 11203 11348 10970 +3 9210 11203 10970 +3 7304 9785 4917 +3 14536 912 1287 +3 11486 11487 227 +3 4643 4509 11028 +3 9729 9728 9612 +3 2514 2513 8852 +3 11001 11224 8036 +3 10490 8444 10370 +3 7983 8098 7982 +3 8098 8209 8208 +3 9814 9930 9929 +3 11821 11820 11736 +3 9813 9814 9929 +3 29 12211 40 +3 8098 8097 7982 +3 8165 8273 8164 +3 24622 21535 22138 +3 8208 8209 8316 +3 9497 9613 9496 +3 8870 5830 9411 +3 10925 11051 11050 +3 10554 10553 10433 +3 10549 10548 10428 +3 10924 10925 11050 +3 11194 10941 9766 +3 10429 10549 10428 +3 9437 9896 10684 +3 10700 10575 10455 +3 8231 9395 10508 +3 318 427 317 +3 9930 10047 10046 +3 9395 9756 7766 +3 9929 9930 10046 +3 11017 11018 11144 +3 10165 10164 10046 +3 10047 10165 10046 +3 6984 10966 7584 +3 12766 12765 12676 +3 7806 8135 6984 +3 3061 3060 8115 +3 8031 7061 7806 +3 8904 7876 7580 +3 7915 8026 8031 +3 8135 10966 6984 +3 8026 7061 8031 +3 7061 8135 7806 +3 13825 13824 13726 +3 7328 7441 11240 +3 8735 340 14258 +3 9976 3040 13870 +3 9877 8448 9878 +3 10097 10745 14866 +3 10284 10283 10164 +3 26806 26807 26921 +3 11042 11043 11169 +3 22914 22915 23013 +3 11172 11173 11298 +3 11170 11296 11295 +3 9844 9960 9843 +3 11173 11172 11045 +3 4394 10563 136 +3 10077 10076 9959 +3 8531 8638 8637 +3 9811 9927 9926 +3 11150 11149 11022 +3 8530 8531 8637 +3 29829 2408 19340 +3 14366 12566 11566 +3 33707 9175 9566 +3 10723 8665 33351 +3 9457 8761 9175 +3 8665 9457 9175 +3 8985 8878 8761 +3 9457 8985 8761 +3 10268 10267 8878 +3 8985 10268 8878 +3 11140 10632 10267 +3 10268 11140 10267 +3 9123 10509 10632 +3 11140 9123 10632 +3 8330 8437 10509 +3 9123 8330 10509 +3 10154 7854 8437 +3 8330 10154 8437 +3 10154 8523 8522 +3 7854 10154 8522 +3 8523 11125 11126 +3 8522 8523 11126 +3 11125 8631 8632 +3 11126 11125 8632 +3 8631 7622 7621 +3 8632 8631 7621 +3 7622 10994 10993 +3 7621 7622 10993 +3 10994 8468 8469 +3 10993 10994 8469 +3 8468 9673 9441 +3 8469 8468 9441 +3 9673 10001 9885 +3 9441 9673 9885 +3 10001 8572 7779 +3 9885 10001 7779 +3 8359 8252 7779 +3 8572 8359 7779 +3 8359 8954 8953 +3 8252 8359 8953 +3 8954 9336 11007 +3 8953 8954 11007 +3 9336 10606 10364 +3 11007 9336 10364 +3 10606 7453 11203 +3 10364 10606 11203 +3 7453 7304 11348 +3 11203 7453 11348 +3 11348 7304 4917 +3 10277 10396 3830 +3 12319 12405 12404 +3 9785 10485 4917 +3 8222 545 7775 +3 11014 4496 10887 +3 7764 9338 9174 +3 295 198 6642 +3 8097 8098 8208 +3 8705 8706 8812 +3 8380 8379 8272 +3 7867 7983 7866 +3 9145 9254 9144 +3 6289 6417 6416 +3 9040 9039 8932 +3 27061 27062 28376 +3 10919 11045 10918 +3 8498 8497 8390 +3 8284 8391 8283 +3 7867 7866 7751 +3 7752 7867 7751 +3 11970 12387 13214 +3 6893 9760 9671 +3 9497 9496 9381 +3 9382 9497 9381 +3 10671 10670 10548 +3 10549 10671 10548 +3 10792 10917 10791 +3 10795 10794 10670 +3 9654 4108 3962 +3 7894 10700 8449 +3 8231 10967 7581 +3 8377 8378 8484 +3 11288 695 11287 +3 10967 8231 10508 +3 11288 11287 11161 +3 11162 11288 11161 +3 695 10702 9173 +3 695 9118 11287 +3 10702 9795 9097 +3 9118 695 9173 +3 10990 9778 9555 +3 9173 10702 9097 +3 9795 9778 10990 +3 9091 7166 9297 +3 9097 9795 10990 +3 9778 9091 9555 +3 9555 9091 9297 +3 7166 7762 10699 +3 9297 7166 10699 +3 7762 1618 3190 +3 11366 8026 7915 +3 10699 7762 3190 +3 7766 9756 7328 +3 11240 11366 7915 +3 10508 9395 7766 +3 7441 11366 11240 +3 12866 12865 12773 +3 9756 7441 7328 +3 7842 7843 7958 +3 9424 8002 9647 +3 11169 11170 11295 +3 7727 7728 7842 +3 11046 11173 11045 +3 11296 8144 7415 +3 9960 10077 9959 +3 10795 10920 10794 +3 13191 6262 6384 +3 10195 10194 10076 +3 6419 10692 6418 +3 10853 10362 14313 +3 8011 10850 10599 +3 14306 10467 14305 +3 7283 8665 10599 +3 10850 7283 10599 +3 8138 9457 8665 +3 7283 8138 8665 +3 9093 8985 9457 +3 8138 9093 9457 +3 10388 10268 8985 +3 9093 10388 8985 +3 10633 11140 10268 +3 10388 10633 10268 +3 9637 9123 11140 +3 10633 9637 11140 +3 10621 8330 9123 +3 9637 10621 9123 +3 9094 10154 8330 +3 10621 9094 8330 +3 9094 8524 8523 +3 10154 9094 8523 +3 8524 10998 11125 +3 8523 8524 11125 +3 10998 8630 8631 +3 11125 10998 8631 +3 8630 7623 7622 +3 8631 8630 7622 +3 7623 9300 10994 +3 7622 7623 10994 +3 9300 8467 8468 +3 10994 9300 8468 +3 8467 9787 9673 +3 8468 8467 9673 +3 9787 10000 10001 +3 9673 9787 10001 +3 10000 8861 8572 +3 10001 10000 8572 +3 8358 8359 8572 +3 8861 8358 8572 +3 8358 8955 8954 +3 8359 8358 8954 +3 7968 9336 8954 +3 8955 7968 8954 +3 10245 10606 9336 +3 7968 10245 9336 +3 10245 8678 7453 +3 10606 10245 7453 +3 8678 7195 7304 +3 7453 8678 7304 +3 7195 9901 9785 +3 7304 7195 9785 +3 9901 7900 10485 +3 9785 9901 10485 +3 10485 7900 792 +3 35000 22516 22417 +3 11281 8150 9185 +3 10165 10284 10164 +3 12156 12239 12155 +3 7941 7942 8056 +3 7752 7751 7636 +3 7637 7752 7636 +3 10071 10070 9953 +3 9954 10071 9953 +3 19734 27434 29823 +3 35644 35683 35521 +3 21390 21484 14150 +3 11215 3981 11267 +3 1977 28136 28187 +3 8658 9195 7215 +3 22523 33237 22524 +3 8334 9283 7668 +3 31131 31132 31194 +3 7553 7668 10251 +3 20821 27061 27060 +3 11484 13680 13485 +3 8926 9033 9032 +3 7983 7982 7866 +3 9382 9381 9269 +3 11019 11020 11146 +3 11299 11264 10032 +3 9613 9612 9496 +3 10917 10916 10791 +3 11298 11299 10032 +3 8485 8592 8591 +3 11043 11042 10916 +3 13003 12548 12458 +3 7387 7386 7275 +3 8263 10710 9662 +3 10610 8231 7581 +3 8169 8170 8277 +3 7685 7686 7175 +3 7533 9753 8978 +3 13815 13913 13814 +3 8331 8978 8120 +3 9536 8331 8120 +3 8349 9536 8120 +3 15892 16468 13974 +3 2308 15892 13876 +3 35471 35679 35586 +3 12042 12660 12659 +3 35563 35884 35372 +3 13435 13434 21727 +3 35772 35460 35780 +3 12683 12684 12772 +3 12073 12155 12072 +3 12594 12593 12503 +3 29889 29888 29759 +3 7890 9396 9506 +3 12386 12475 11135 +3 1618 9396 7890 +3 574 59 73 +3 3190 1618 7890 +3 9396 9509 9506 +3 6379 7550 6380 +3 9818 9817 9702 +3 7363 12825 3859 +3 10051 10169 10168 +3 7843 7959 7958 +3 9183 9076 9184 +3 11295 11296 7415 +3 7613 7728 7612 +3 11046 11045 10919 +3 8144 10951 10271 +3 10195 10314 10194 +3 10671 10795 10670 +3 257 367 366 +3 10434 10433 10313 +3 10976 10850 8011 +3 13996 13997 10564 +3 10976 9450 7283 +3 10850 10976 7283 +3 9343 8138 7283 +3 9450 9343 7283 +3 9521 9093 8138 +3 9343 9521 8138 +3 10389 10388 9093 +3 9521 10389 9093 +3 7850 10633 10388 +3 10389 7850 10388 +3 10691 9637 10633 +3 7850 10691 10633 +3 10499 10621 9637 +3 10691 10499 9637 +3 10602 9094 10621 +3 10499 10602 10621 +3 11087 8524 9094 +3 10602 11087 9094 +3 11087 10997 10998 +3 8524 11087 10998 +3 10997 8629 8630 +3 10998 10997 8630 +3 8629 8737 7623 +3 8630 8629 7623 +3 8737 9214 9300 +3 7623 8737 9300 +3 9214 9805 8467 +3 9300 9214 8467 +3 9805 9903 9787 +3 8467 9805 9787 +3 9903 9999 10000 +3 9787 9903 10000 +3 9999 8849 8861 +3 10000 9999 8861 +3 8849 8253 8358 +3 8861 8849 8358 +3 8956 8955 8358 +3 8253 8956 8358 +3 10225 7968 8955 +3 8956 10225 8955 +3 10126 10245 7968 +3 10225 10126 7968 +3 10126 8571 8678 +3 10245 10126 8678 +3 8571 11313 7195 +3 8678 8571 7195 +3 11313 9098 9901 +3 7195 11313 9901 +3 9098 7899 7900 +3 9901 9098 7900 +3 12818 6964 14162 +3 7551 914 7899 +3 1751 1633 1634 +3 3344 458 186 +3 10329 8158 10750 +3 10842 9662 7143 +3 10404 10403 10283 +3 28424 30154 30153 +3 9413 7911 7811 +3 9550 10251 8782 +3 12507 12508 12597 +3 15272 13237 25002 +3 8123 4806 1655 +3 25336 25337 23721 +3 12075 12074 11993 +3 9413 7811 7798 +3 35765 35625 35536 +3 7911 9550 8782 +3 8356 9413 7798 +3 7911 8782 7811 +3 10754 8356 7798 +3 9550 7553 10251 +3 10284 10404 10283 +3 8609 8716 8715 +3 7197 10754 7798 +3 7163 7270 7162 +3 9694 9695 9809 +3 8593 8594 8700 +3 9794 8654 9523 +3 7620 7624 9010 +3 9053 9161 9052 +3 9270 9269 9160 +3 10468 8307 9884 +3 11264 8307 10468 +3 10546 10668 10545 +3 10792 10791 10667 +3 7958 7959 8073 +3 7959 8074 8073 +3 12332 12331 12246 +3 12330 12329 12244 +3 12320 12406 12405 +3 22227 22324 22322 +3 23590 7473 8306 +3 3698 10277 3830 +3 7161 7160 7056 +3 35831 13100 13195 +3 7160 7161 7267 +3 7161 7268 7267 +3 7267 7268 7378 +3 7268 7379 7378 +3 7378 7379 7490 +3 7379 7491 7490 +3 7720 7835 7834 +3 7605 7604 7490 +3 7491 7605 7490 +3 7719 7720 7834 +3 7605 7720 7719 +3 7604 7605 7719 +3 7951 7950 7834 +3 7835 7951 7834 +3 11634 12117 13389 +3 8066 8065 7950 +3 13692 13988 1856 +3 13389 13485 13883 +3 11738 11822 11737 +3 13881 13880 13777 +3 6420 6546 10692 +3 6384 794 1856 +3 8113 8083 10266 +3 6952 7051 7050 +3 12155 12154 12072 +3 10371 10471 10266 +3 7728 7843 7842 +3 10524 10523 10403 +3 7415 8144 10271 +3 7499 7613 7498 +3 10920 10919 10794 +3 10951 10941 11194 +3 12020 11934 11935 +3 10692 7254 6544 +3 10597 6798 337 +3 7037 7036 116 +3 7254 9315 9450 +3 10976 7254 9450 +3 8756 9343 9450 +3 9315 8756 9450 +3 10153 9521 9343 +3 8756 10153 9343 +3 9454 10389 9521 +3 10153 9454 9521 +3 6869 7850 10389 +3 9454 6869 10389 +3 10751 10691 7850 +3 6869 10751 7850 +3 10379 10499 10691 +3 10751 10379 10691 +3 7509 10602 10499 +3 10379 7509 10499 +3 10960 11087 10602 +3 7509 10960 10602 +3 10960 10996 10997 +3 11087 10960 10997 +3 10996 7736 8629 +3 10997 10996 8629 +3 7736 8738 8737 +3 8629 7736 8737 +3 8738 9526 9214 +3 8737 8738 9214 +3 9526 9798 9805 +3 9214 9526 9805 +3 9798 11112 9903 +3 9805 9798 9903 +3 11112 9998 9999 +3 9903 11112 9999 +3 9998 8848 8849 +3 9999 9998 8849 +3 8848 8360 8253 +3 8849 8848 8253 +3 8957 8956 8253 +3 8360 8957 8253 +3 10226 10225 8956 +3 8957 10226 8956 +3 10730 10126 10225 +3 10226 10730 10225 +3 8785 8571 10126 +3 10730 8785 10126 +3 7568 11313 8571 +3 8785 7568 8571 +3 7568 7561 9098 +3 11313 7568 9098 +3 7561 7551 7899 +3 9098 7561 7899 +3 26702 26701 22777 +3 197 198 334 +3 7354 10704 8873 +3 511 397 398 +3 8804 8803 8696 +3 10404 10524 10403 +3 10641 10640 10518 +3 6263 6800 6801 +3 8822 8823 8929 +3 9480 9596 9479 +3 7270 7381 7380 +3 132 4519 4363 +3 35385 35822 35376 +3 8377 8269 8270 +3 20639 20638 20556 +3 28376 28424 30153 +3 346 9321 3607 +3 17253 26905 26904 +3 28556 28685 28555 +3 30154 19801 19798 +3 9804 14276 35407 +3 32 11335 16989 +3 28556 28555 28433 +3 8334 4932 10235 +3 8069 8180 8179 +3 9253 9365 9364 +3 9252 9253 9364 +3 8803 8910 8802 +3 9283 8334 10235 +3 9236 9348 9347 +3 8068 8069 8179 +3 8946 8945 8838 +3 11110 8024 9213 +3 10816 8762 8650 +3 9161 9270 9160 +3 10668 10667 10545 +3 9884 10816 8650 +3 8074 8185 8184 +3 10668 10792 10667 +3 11999 11998 11914 +3 8073 8074 8184 +3 35849 35777 35785 +3 35535 35483 35434 +3 9333 9427 7540 +3 11745 11829 11744 +3 9478 9477 9362 +3 30153 30154 19798 +3 671 556 18804 +3 9363 9478 9362 +3 8030 10248 9101 +3 9563 10212 9448 +3 10369 9322 9101 +3 10250 10369 9101 +3 9779 10369 10250 +3 7439 9779 10250 +3 11330 7309 11204 +3 9779 7439 9870 +3 10854 11330 7426 +3 7309 9779 9870 +3 7697 10854 8372 +3 7309 9870 11204 +3 10854 7426 8372 +3 11330 11204 7426 +3 8066 8177 8065 +3 9174 8148 10953 +3 7951 8066 7950 +3 8285 8284 8176 +3 8177 8285 8176 +3 8177 8176 8065 +3 8392 8391 8284 +3 8285 8392 8284 +3 35589 35529 35390 +3 8499 8498 8391 +3 8083 7146 10266 +3 26406 26411 19140 +3 11365 7575 13864 +3 10856 10471 7774 +3 7728 7727 7612 +3 10646 10645 10523 +3 10271 10951 11194 +3 7499 7498 7386 +3 10692 6546 7432 +3 10941 7894 9766 +3 7432 7254 10692 +3 575 3866 3998 +3 7432 9430 9315 +3 7254 7432 9315 +3 10356 8756 9315 +3 9430 10356 9315 +3 10269 10153 8756 +3 10356 10269 8756 +3 9455 9454 10153 +3 10269 9455 10153 +3 8791 6869 9454 +3 9455 8791 9454 +3 10213 10751 6869 +3 8791 10213 6869 +3 10260 10379 10751 +3 10213 10260 10751 +3 10260 7735 7509 +3 10379 10260 7509 +3 7735 11213 10960 +3 7509 7735 10960 +3 11213 10995 10996 +3 10960 11213 10996 +3 10995 7737 7736 +3 10996 10995 7736 +3 7737 8739 8738 +3 7736 7737 8738 +3 8739 135 9526 +3 8738 8739 9526 +3 9792 9798 9526 +3 135 9792 9526 +3 9530 11112 9798 +3 9792 9530 9798 +3 9530 7662 9998 +3 11112 9530 9998 +3 7662 8847 8848 +3 9998 7662 8848 +3 8847 8649 8360 +3 8848 8847 8360 +3 8649 10495 8957 +3 8360 8649 8957 +3 7539 10226 8957 +3 10495 7539 8957 +3 10855 10730 10226 +3 7539 10855 10226 +3 8465 8785 10730 +3 10855 8465 10730 +3 8355 7568 8785 +3 8465 8355 8785 +3 8355 9429 7561 +3 7568 8355 7561 +3 7782 7551 7561 +3 9429 7782 7561 +3 11826 11912 11825 +3 7250 197 334 +3 8732 8839 8731 +3 6983 916 9090 +3 8443 9307 10102 +3 10524 10646 10523 +3 10663 10662 10540 +3 10398 10399 10518 +3 10400 10520 10519 +3 7665 9100 9099 +3 8456 10150 8327 +3 7094 7200 7093 +3 4112 15967 15972 +3 7094 7201 7200 +3 17361 7200 17439 +3 2407 19038 2811 +3 19801 30638 30601 +3 19798 19801 30601 +3 7893 8650 8775 +3 8589 8696 8588 +3 8065 8176 8064 +3 8803 8802 8695 +3 9126 9127 9235 +3 10829 9296 10870 +3 10644 10645 10768 +3 10399 10400 10519 +3 6946 7045 7044 +3 35691 35913 35628 +3 10770 10769 10645 +3 35081 35210 35080 +3 10368 22660 12305 +3 13371 9684 27282 +3 9926 9927 10043 +3 8625 8732 8624 +3 8839 8838 8731 +3 8650 8762 11258 +3 8762 10234 11258 +3 10546 10545 10425 +3 10426 10546 10425 +3 8184 8185 8292 +3 8185 8293 8292 +3 12720 7763 1494 +3 13913 13912 13814 +3 9683 12454 12539 +3 11915 11914 11828 +3 8015 7851 9333 +3 9427 7545 7540 +3 9478 9594 9477 +3 9594 9593 9477 +3 35668 35642 35391 +3 7177 5585 10478 +3 1174 8868 8760 +3 27783 35512 35733 +3 10478 11074 7177 +3 11074 11349 7177 +3 11074 8905 11349 +3 8905 9914 11349 +3 5048 7060 10442 +3 10131 9982 9914 +3 8905 10131 9914 +3 2885 2480 3843 +3 9205 8906 9982 +3 10131 9205 9982 +3 4245 4395 15564 +3 7713 7828 7712 +3 7697 8372 7645 +3 10514 10636 4094 +3 8148 7645 10953 +3 8148 7697 7645 +3 8239 9537 10012 +3 9174 10953 9422 +3 6262 794 6384 +3 9537 9174 9422 +3 9251 9363 9250 +3 9515 7807 4247 +3 2475 6755 9547 +3 9141 9142 9250 +3 10471 8113 10266 +3 12247 12246 12163 +3 9534 8866 9301 +3 2475 9547 11353 +3 7387 7499 7386 +3 9535 9534 9301 +3 7275 11632 11633 +3 7613 7612 7498 +3 5690 5824 5689 +3 11994 12075 11993 +3 35738 35819 35663 +3 6546 6547 6672 +3 35494 35810 35625 +3 13800 10383 16074 +3 8109 10269 10356 +3 10476 8109 10356 +3 9341 9455 10269 +3 8109 9341 10269 +3 7458 8791 9455 +3 9341 7458 9455 +3 7458 11342 10213 +3 8791 7458 10213 +3 11342 9406 10260 +3 10213 11342 10260 +3 9406 7548 7735 +3 10260 9406 7735 +3 7548 10835 11213 +3 7735 7548 11213 +3 10868 10995 11213 +3 10835 10868 11213 +3 7738 7737 10995 +3 10868 7738 10995 +3 8740 8739 7737 +3 7738 8740 7737 +3 6976 135 8739 +3 8740 6976 8739 +3 11378 9792 135 +3 6976 11378 135 +3 10276 9530 9792 +3 11378 10276 9792 +3 9997 7662 9530 +3 10276 9997 9530 +3 8846 8847 7662 +3 9997 8846 7662 +3 8846 9311 8649 +3 8847 8846 8649 +3 9311 8264 10495 +3 8649 9311 10495 +3 10108 7539 10495 +3 8264 10108 10495 +3 10981 10855 7539 +3 10108 10981 7539 +3 9107 8465 10855 +3 10981 9107 10855 +3 9107 11395 8355 +3 8465 9107 8355 +3 11395 11098 9429 +3 8355 11395 9429 +3 9090 7782 9429 +3 11098 9090 9429 +3 9090 916 7782 +3 7250 334 10965 +3 556 671 16322 +3 9216 7897 3326 +3 30638 27496 27495 +3 28882 27990 28363 +3 28314 28434 28313 +3 7975 7976 1517 +3 32946 32945 32837 +3 10646 10770 10645 +3 7094 7093 17294 +3 18391 18732 14591 +3 7095 7202 7201 +3 7094 7095 7201 +3 7200 151 150 +3 7202 7313 7201 +3 11150 11151 11276 +3 27297 11832 11747 +3 9161 9160 9052 +3 9270 9382 9269 +3 30601 30638 27495 +3 8839 8946 8838 +3 10188 10189 10307 +3 11449 28018 28009 +3 10770 10895 10894 +3 7142 7993 7366 +3 10769 10770 10894 +3 10895 11021 11020 +3 35513 26624 35826 +3 10894 10895 11020 +3 8827 8934 8933 +3 8854 8961 8853 +3 35417 35642 35668 +3 28950 29085 21907 +3 8518 8625 8517 +3 8732 8731 8624 +3 11258 10234 10821 +3 10234 10946 10821 +3 10306 10426 10425 +3 10305 10306 10425 +3 8292 8293 8399 +3 8293 8400 8399 +3 10096 1999 2652 +3 12471 12561 13880 +3 12151 12234 12233 +3 9303 9683 12539 +3 9514 8458 8015 +3 7851 9427 9333 +3 9594 9710 9593 +3 9710 9709 9593 +3 9989 795 9988 +3 8278 8279 8385 +3 13046 13047 13140 +3 12770 12771 12862 +3 7546 10842 10828 +3 7541 7542 483 +3 35609 9113 7758 +3 9116 8898 7885 +3 13921 13920 13822 +3 11831 11830 11746 +3 14310 12035 14309 +3 8599 8706 8598 +3 4925 2638 9628 +3 8706 8705 8598 +3 13918 14016 14015 +3 31406 11415 31407 +3 11021 11148 11147 +3 13917 13918 14015 +3 14309 8089 14308 +3 7828 7944 7943 +3 9229 7908 10510 +3 8059 8170 8169 +3 8278 8385 8384 +3 35724 35824 35358 +3 11829 11915 11828 +3 11020 11021 11147 +3 9363 9362 9250 +3 13910 14008 13909 +3 5038 5172 5037 +3 8927 9034 8926 +3 10856 7774 8888 +3 268 163 164 +3 10610 7581 9397 +3 412 7237 7238 +3 8866 10720 9397 +3 10720 10610 9397 +3 33704 22324 22325 +3 9301 8866 9397 +3 6672 7432 6546 +3 27612 35847 29006 +3 10475 6799 6800 +3 1597 1598 1715 +3 10475 7881 8109 +3 10476 10475 8109 +3 7881 9230 9341 +3 8109 7881 9341 +3 9230 8690 7458 +3 9341 9230 7458 +3 8690 8199 11342 +3 7458 8690 11342 +3 8199 8335 9406 +3 11342 8199 9406 +3 8335 9567 7548 +3 9406 8335 7548 +3 9567 11339 10835 +3 7548 9567 10835 +3 11104 10868 10835 +3 11339 11104 10835 +3 10502 7738 10868 +3 11104 10502 10868 +3 8741 8740 7738 +3 10502 8741 7738 +3 9904 6976 8740 +3 8741 9904 8740 +3 8375 11378 6976 +3 9904 8375 6976 +3 10019 10276 11378 +3 8375 10019 11378 +3 10114 9997 10276 +3 10019 10114 10276 +3 8845 8846 9997 +3 10114 8845 9997 +3 8446 9311 8846 +3 8845 8446 8846 +3 8446 11380 8264 +3 9311 8446 8264 +3 10109 10108 8264 +3 11380 10109 8264 +3 11109 10981 10108 +3 10109 11109 10108 +3 11109 8892 9107 +3 10981 11109 9107 +3 8892 9688 11395 +3 9107 8892 11395 +3 9688 10879 11098 +3 11395 9688 11098 +3 9198 9090 11098 +3 10879 9198 11098 +3 26949 26948 11594 +3 9198 6983 9090 +3 35704 35414 35894 +3 10395 10394 3829 +3 26901 29135 29134 +3 7314 258 7313 +3 10182 10301 10300 +3 21674 21697 13099 +3 10421 10541 10420 +3 15374 15505 15504 +3 21196 33967 21195 +3 27496 13056 30641 +3 7096 7203 7202 +3 7095 7096 7202 +3 7314 7313 7202 +3 7203 7314 7202 +3 11919 11832 11920 +3 258 368 367 +3 10032 11264 10468 +3 517 518 632 +3 9053 9052 8945 +3 8307 10816 9884 +3 29550 27295 21656 +3 8946 9053 8945 +3 14177 14176 13583 +3 1890 11887 12052 +3 11896 7756 7641 +3 10150 9663 10940 +3 7989 7988 7872 +3 35559 35748 35617 +3 8104 8103 7988 +3 7764 9174 9537 +3 19447 19448 21471 +3 7745 7744 7629 +3 7451 517 631 +3 8518 8517 8410 +3 1898 2023 19060 +3 10821 10946 10336 +3 10946 10217 10336 +3 10069 10187 10068 +3 10306 10305 10186 +3 8399 8400 8506 +3 8400 8507 8506 +3 8368 9193 9435 +3 11829 11828 11744 +3 11747 11831 11746 +3 14202 14203 14300 +3 10698 8458 9514 +3 10823 10698 9514 +3 9710 9825 9709 +3 9825 9824 9709 +3 12156 12155 12073 +3 8247 8140 10473 +3 12863 12956 12955 +3 5060 4925 9628 +3 9026 9027 9134 +3 7906 10612 8765 +3 8132 8244 8021 +3 8244 8025 8021 +3 10473 8140 11068 +3 11069 8354 8025 +3 2935 3075 13518 +3 6949 6882 6950 +3 7597 7598 7712 +3 7828 7827 7712 +3 8244 11069 8025 +3 11069 7789 8354 +3 5061 4657 5060 +3 7789 10622 8354 +3 8221 9176 11269 +3 12324 12323 12238 +3 11269 9176 11270 +3 12239 12324 12238 +3 3962 191 190 +3 11908 11907 11821 +3 12410 12409 12323 +3 8552 9065 8659 +3 12207 12044 11722 +3 794 6005 1856 +3 9034 9142 9141 +3 12113 12137 12136 +3 2499 23274 15029 +3 8712 8713 8819 +3 2083 9106 8558 +3 4383 2742 2743 +3 7648 6491 6617 +3 397 7334 398 +3 11148 11274 11273 +3 7671 128 193 +3 9898 10856 8888 +3 10471 10371 7774 +3 418 7243 7244 +3 27495 27496 30641 +3 10475 6263 7881 +3 13524 1971 12455 +3 8634 9121 9230 +3 7881 8634 9230 +3 9121 10257 8690 +3 9230 9121 8690 +3 10257 8198 8199 +3 8690 10257 8199 +3 8198 7431 8335 +3 8199 8198 8335 +3 7431 10239 9567 +3 8335 7431 9567 +3 10239 9224 11339 +3 9567 10239 11339 +3 8542 11104 11339 +3 9224 8542 11339 +3 10503 10502 11104 +3 8542 10503 11104 +3 7780 8741 10502 +3 10503 7780 10502 +3 9788 9904 8741 +3 7780 9788 8741 +3 8374 8375 9904 +3 9788 8374 9904 +3 10136 10019 8375 +3 8374 10136 8375 +3 10113 10114 10019 +3 10136 10113 10019 +3 7508 8845 10114 +3 10113 7508 10114 +3 8361 8446 8845 +3 7508 8361 8845 +3 8361 9390 11380 +3 8446 8361 11380 +3 10110 10109 11380 +3 9390 10110 11380 +3 11235 11109 10109 +3 10110 11235 10109 +3 8999 8892 11109 +3 11235 8999 11109 +3 9774 9688 8892 +3 8999 9774 8892 +3 9797 10879 9688 +3 9774 9797 9688 +3 9310 9198 10879 +3 9797 9310 10879 +3 9310 11081 6983 +3 9198 9310 6983 +3 7782 916 915 +3 11081 9446 6983 +3 13725 13823 13724 +3 35844 35789 35703 +3 10686 10098 8451 +3 11119 8146 3976 +3 7989 8104 7988 +3 7427 258 7314 +3 30090 2277 2411 +3 13056 28989 27784 +3 7097 7204 7203 +3 7096 7097 7203 +3 7204 7315 7314 +3 7203 7204 7314 +3 18959 1778 1898 +3 7315 7427 7314 +3 26578 24957 26579 +3 35426 35899 35472 +3 7583 15904 16044 +3 15451 21795 21889 +3 35854 35629 35585 +3 5998 26260 4785 +3 4923 3880 26139 +3 13195 8002 8686 +3 8215 8214 8103 +3 8104 8215 8103 +3 8323 8322 8214 +3 9896 10490 10684 +3 8215 8323 8214 +3 7630 7745 7629 +3 7896 9286 8445 +3 124 7681 4364 +3 7745 7860 7859 +3 10217 8141 1950 +3 8625 8624 8517 +3 10187 10186 10068 +3 10336 10217 1950 +3 8507 8614 8613 +3 10187 10306 10186 +3 9193 11101 9435 +3 8506 8507 8613 +3 26615 31556 26617 +3 3044 19420 1378 +3 9712 9713 9827 +3 35530 35583 35384 +3 9941 9940 9824 +3 8458 7851 8015 +3 7598 7599 7713 +3 9825 9941 9824 +3 2638 219 216 +3 11355 11078 9757 +3 22266 20131 13340 +3 14211 14212 14309 +3 9077 10974 7686 +3 10341 8247 10473 +3 7601 7716 7715 +3 7600 7601 7715 +3 9473 9589 9588 +3 9358 9473 9472 +3 7827 7828 7943 +3 10170 10171 10289 +3 10052 10053 10170 +3 7469 7698 7546 +3 10053 10171 10170 +3 10171 10290 10289 +3 7924 7808 10622 +3 9820 9936 9819 +3 7789 7924 10622 +3 24957 26578 26083 +3 367 257 258 +3 9539 663 4102 +3 13431 125 17099 +3 8384 8385 8491 +3 10652 10776 10651 +3 2008 18937 18299 +3 13907 13908 14005 +3 8552 8659 10861 +3 22828 20780 9063 +3 7036 7035 115 +3 8820 8927 8926 +3 30418 30552 30551 +3 11826 11825 11741 +3 8606 8713 8712 +3 2475 8888 2128 +3 8733 8626 2107 +3 2742 10864 2342 +3 2125 2128 545 +3 13889 9917 9102 +3 7775 9398 8222 +3 9033 9034 9141 +3 35462 35653 35368 +3 316 317 426 +3 11394 5324 5190 +3 10899 10391 9121 +3 8634 10899 9121 +3 10391 10814 10257 +3 9121 10391 10257 +3 10814 8087 8198 +3 10257 10814 8198 +3 8087 10215 7431 +3 8198 8087 7431 +3 10215 7666 10239 +3 7431 10215 10239 +3 7666 7251 9224 +3 10239 7666 9224 +3 7251 10752 8542 +3 9224 7251 8542 +3 10752 10504 10503 +3 8542 10752 10503 +3 10504 10375 7780 +3 10503 10504 7780 +3 9674 9788 7780 +3 10375 9674 7780 +3 7282 8374 9788 +3 9674 7282 9788 +3 10255 10136 8374 +3 7282 10255 8374 +3 10112 10113 10136 +3 10255 10112 10136 +3 7507 7508 10113 +3 10112 7507 10113 +3 8362 8361 7508 +3 7507 8362 7508 +3 8466 9390 8361 +3 8362 8466 8361 +3 8466 10111 10110 +3 9390 8466 10110 +3 11361 11235 10110 +3 10111 11361 10110 +3 11247 8999 11235 +3 11361 11247 11235 +3 9453 9774 8999 +3 11247 9453 8999 +3 10017 9797 9774 +3 9453 10017 9774 +3 8982 9310 9797 +3 10017 8982 9797 +3 8982 8343 11081 +3 9310 8982 11081 +3 8343 7476 9446 +3 11081 8343 9446 +3 12004 11920 27532 +3 7476 8123 9446 +3 8634 6267 10899 +3 12002 12083 12001 +3 406 407 520 +3 1778 18959 18860 +3 30641 13056 27784 +3 32724 32723 32609 +3 7096 6993 7097 +3 7205 7204 7097 +3 7098 7205 7097 +3 7316 7315 7204 +3 7205 7316 7204 +3 7428 7427 7315 +3 7316 7428 7315 +3 7542 7541 7427 +3 7428 7542 7427 +3 7541 483 7656 +3 23636 23590 2222 +3 13691 13320 13609 +3 6798 10597 7440 +3 6670 809 7803 +3 9466 9582 9581 +3 6506 10501 6632 +3 5312 5311 10565 +3 8430 8429 8322 +3 8323 8430 8322 +3 9207 11370 8890 +3 8880 10511 7533 +3 7859 7860 7975 +3 7744 7745 7859 +3 11118 7583 9007 +3 9582 9698 9581 +3 1950 8141 8784 +3 8141 10980 8784 +3 10069 10068 9951 +3 9952 10069 9951 +3 8613 8614 8720 +3 8614 8721 8720 +3 10480 9193 8368 +3 7660 10480 8368 +3 6153 6023 6154 +3 24047 23923 12958 +3 9190 9298 10823 +3 18929 27375 20570 +3 9941 10058 9940 +3 10058 10057 9940 +3 8386 8493 8492 +3 7484 7485 7598 +3 8035 13286 12208 +3 13668 11947 13570 +3 9982 8906 9866 +3 9914 9982 10963 +3 17464 17463 17385 +3 7906 10341 10612 +3 7831 7830 7715 +3 7716 7831 7715 +3 9357 9358 9472 +3 9246 9358 9357 +3 11120 7469 7546 +3 10715 10223 8263 +3 11063 8263 7698 +3 7469 11063 7698 +3 11063 10715 8263 +3 10223 10715 9667 +3 9936 10053 10052 +3 10715 7308 9667 +3 9705 9820 9704 +3 9935 9936 10052 +3 9820 9819 9704 +3 9936 9935 9819 +3 10842 7143 7354 +3 11001 9662 11224 +3 9470 9471 9586 +3 10828 10842 7354 +3 10530 10652 10529 +3 9355 9356 9470 +3 2016 8221 10212 +3 4239 10527 4240 +3 23229 23131 22436 +3 8445 8552 10736 +3 8605 8606 8712 +3 13618 35736 15593 +3 8392 8499 8391 +3 8713 8820 8819 +3 8606 8605 8498 +3 8499 8606 8498 +3 8819 8820 8926 +3 9034 9033 8926 +3 9628 2638 216 +3 9142 9251 9250 +3 15167 12217 15370 +3 35612 35885 35795 +3 11154 10392 10391 +3 10899 11154 10391 +3 10392 9302 10814 +3 10391 10392 10814 +3 8196 8087 10814 +3 9302 8196 10814 +3 7506 10215 8087 +3 8196 7506 8087 +3 7247 7666 10215 +3 7506 7247 10215 +3 11005 7251 7666 +3 7247 11005 7666 +3 11005 7888 10752 +3 7251 11005 10752 +3 7888 10505 10504 +3 10752 7888 10504 +3 10505 10588 10375 +3 10504 10505 10375 +3 10588 11231 9674 +3 10375 10588 9674 +3 11231 10714 7282 +3 9674 11231 7282 +3 10714 10812 10255 +3 7282 10714 10255 +3 10230 10112 10255 +3 10812 10230 10255 +3 6937 7507 10112 +3 10230 6937 10112 +3 6937 9458 8362 +3 7507 6937 8362 +3 7663 8466 8362 +3 9458 7663 8362 +3 9994 10111 8466 +3 7663 9994 8466 +3 8557 11361 10111 +3 9994 8557 10111 +3 11374 11247 11361 +3 8557 11374 11361 +3 8262 9453 11247 +3 11374 8262 11247 +3 10134 10017 9453 +3 8262 10134 9453 +3 8875 8982 10017 +3 10134 8875 10017 +3 5067 8343 8982 +3 8875 5067 8982 +3 5067 7817 7476 +3 8343 5067 7476 +3 4806 10972 1285 +3 7476 7817 8123 +3 13552 13650 13551 +3 22915 23014 23013 +3 35358 35455 35704 +3 3297 9806 9807 +3 34479 33023 3095 +3 27275 27276 27393 +3 6995 7099 7098 +3 32919 32807 17322 +3 7206 7205 7098 +3 7099 7206 7098 +3 7317 7316 7205 +3 7206 7317 7205 +3 7429 7428 7316 +3 7317 7429 7316 +3 7543 7542 7428 +3 7429 7543 7428 +3 11889 13304 35532 +3 7541 7656 368 +3 7860 7976 7975 +3 7976 8091 1517 +3 9651 7892 10857 +3 10983 11370 9207 +3 8537 8536 8429 +3 8430 8537 8429 +3 8644 8643 8536 +3 8537 8644 8536 +3 35420 35796 35463 +3 7892 10983 10857 +3 559 5042 675 +3 8128 459 9221 +3 8438 11197 8030 +3 9436 8438 8030 +3 8784 10980 10706 +3 10980 10717 10706 +3 9720 9721 9835 +3 9952 9951 9835 +3 8720 8721 8827 +3 8721 8828 8827 +3 10494 10258 10459 +3 10258 10480 7660 +3 12419 12418 12332 +3 20697 20698 22737 +3 10275 9298 9190 +3 8759 10275 9190 +3 10058 10176 10057 +3 10176 10175 10057 +3 375 374 265 +3 8906 6115 9866 +3 11147 11148 11273 +3 404 299 66 +3 6521 1371 4503 +3 9914 10963 11311 +3 7947 7946 7830 +3 7947 8062 7946 +3 7831 7947 7830 +3 8062 8061 7946 +3 9245 9246 9357 +3 9028 9029 9136 +3 10622 7808 6961 +3 13115 13210 6138 +3 10736 10861 10974 +3 9077 10736 10974 +3 15377 15378 15508 +3 10341 10473 10612 +3 8979 8021 8872 +3 10736 8552 10861 +3 8979 8872 9667 +3 8025 10341 7906 +3 7308 8979 9667 +3 8021 7906 8872 +3 8021 8025 7906 +3 8354 8247 10341 +3 35554 35698 35624 +3 10622 6961 8247 +3 9471 9587 9586 +3 9472 9473 9588 +3 10410 10530 10409 +3 7375 7487 7374 +3 9286 9065 8552 +3 18959 1898 19060 +3 35621 35444 35858 +3 10367 9078 7685 +3 11274 7654 8014 +3 9537 9422 10012 +3 21414 22925 22845 +3 35636 35601 35444 +3 12325 12324 12239 +3 15370 14819 14709 +3 9448 8221 11269 +3 17936 22924 18731 +3 16780 16792 14436 +3 1991 8420 1992 +3 11026 10954 10392 +3 11154 11026 10392 +3 8088 9302 10392 +3 10954 8088 10392 +3 7972 8196 9302 +3 8088 7972 9302 +3 8560 7506 8196 +3 7972 8560 8196 +3 8160 7247 7506 +3 8560 8160 7506 +3 7477 11005 7247 +3 8160 7477 7247 +3 7477 6986 7888 +3 11005 7477 7888 +3 6986 10627 10505 +3 7888 6986 10505 +3 10627 10036 10588 +3 10505 10627 10588 +3 10036 9531 11231 +3 10588 10036 11231 +3 9531 7765 10714 +3 11231 9531 10714 +3 7765 9212 10812 +3 10714 7765 10812 +3 9212 10229 10230 +3 10812 9212 10230 +3 10229 9907 6937 +3 10230 10229 6937 +3 9907 10838 9458 +3 6937 9907 9458 +3 8871 7663 9458 +3 10838 8871 9458 +3 9995 9994 7663 +3 8871 9995 7663 +3 9995 10009 8557 +3 9994 9995 8557 +3 11375 11374 8557 +3 10009 11375 8557 +3 9659 8262 11374 +3 11375 9659 11374 +3 10253 10134 8262 +3 9659 10253 8262 +3 8768 8875 10134 +3 10253 8768 10134 +3 10483 5067 8875 +3 8768 10483 8875 +3 7816 7817 5067 +3 10483 7816 5067 +3 35781 35361 35564 +3 27532 11920 27415 +3 11344 9802 14901 +3 27987 11804 6848 +3 31338 11415 31406 +3 9393 14140 14042 +3 6906 6996 6995 +3 13979 6905 6995 +3 6996 7100 7099 +3 6995 6996 7099 +3 7207 7206 7099 +3 7100 7207 7099 +3 7318 7317 7206 +3 7207 7318 7206 +3 7430 7429 7317 +3 7318 7430 7317 +3 7544 7543 7429 +3 7430 7544 7429 +3 11273 8014 11272 +3 35680 35700 35551 +3 33728 33862 33727 +3 10528 10527 10407 +3 18930 18178 24398 +3 10828 7354 8766 +3 8751 8750 8643 +3 7048 7049 7152 +3 13748 13747 13649 +3 8644 8751 8643 +3 10857 10983 9207 +3 8858 8857 8750 +3 14064 9393 14042 +3 11370 11186 8890 +3 10611 10735 9552 +3 7569 8123 1655 +3 10717 7625 7624 +3 7805 10620 7690 +3 9605 9721 9720 +3 10706 10717 7624 +3 8828 8935 8934 +3 9836 9952 9835 +3 10258 7857 10459 +3 8827 8828 8934 +3 12333 12419 12332 +3 7857 10258 7660 +3 10571 9664 8759 +3 14059 12253 2235 +3 10295 10294 10175 +3 9298 10698 10823 +3 12074 12156 12073 +3 10176 10295 10175 +3 9553 9437 9116 +3 35377 35660 35672 +3 530 416 417 +3 4374 10776 4509 +3 11349 9914 11311 +3 9982 9866 10963 +3 8173 8172 8061 +3 8062 8173 8061 +3 9029 9137 9136 +3 8922 9029 9028 +3 9137 9246 9245 +3 9136 9137 9245 +3 3960 3827 3828 +3 27168 29010 29081 +3 2338 2339 6248 +3 12764 12856 12855 +3 9357 9472 9471 +3 9472 9588 9587 +3 9065 10828 8659 +3 9356 9357 9471 +3 10529 10528 10408 +3 10409 10529 10408 +3 7051 7052 7155 +3 7156 7263 7262 +3 7374 7486 7373 +3 7155 7156 7262 +3 8354 10622 8247 +3 7600 7599 7485 +3 9705 9704 9588 +3 8025 8354 10341 +3 7601 7600 7486 +3 9589 9705 9588 +3 10530 10529 10409 +3 7156 7157 7263 +3 10370 10736 9077 +3 9286 11120 9065 +3 10367 7685 7908 +3 9078 10370 9077 +3 9229 10367 7908 +3 9078 9077 7685 +3 8445 9286 8552 +3 17888 23807 24137 +3 6395 6391 6806 +3 41 6769 3536 +3 1709 1710 1827 +3 22420 22518 22517 +3 8118 10954 11026 +3 11153 8118 11026 +3 11092 8088 10954 +3 8118 11092 10954 +3 10813 7972 8088 +3 11092 10813 8088 +3 9124 8560 7972 +3 10813 9124 7972 +3 7248 8160 8560 +3 9124 7248 8560 +3 10696 7477 8160 +3 7248 10696 8160 +3 10696 11333 6986 +3 7477 10696 6986 +3 11333 8139 10627 +3 6986 11333 10627 +3 8139 7178 10036 +3 10627 8139 10036 +3 7178 9507 9531 +3 10036 7178 9531 +3 9507 11124 7765 +3 9531 9507 7765 +3 11124 10873 9212 +3 7765 11124 9212 +3 10873 10228 10229 +3 9212 10873 10229 +3 10228 9791 9907 +3 10229 10228 9907 +3 8363 10838 9907 +3 9791 8363 9907 +3 11012 8871 10838 +3 8363 11012 10838 +3 11012 9996 9995 +3 8871 11012 9995 +3 9996 9893 10009 +3 9995 9996 10009 +3 7461 11375 10009 +3 9893 7461 10009 +3 7461 7089 9659 +3 11375 7461 9659 +3 7089 9318 10253 +3 9659 7089 10253 +3 9318 8661 8768 +3 10253 9318 8768 +3 9282 10483 8768 +3 8661 9282 8768 +3 7312 7816 10483 +3 9282 7312 10483 +3 11344 10972 7816 +3 7312 11344 7816 +3 6420 6419 6292 +3 34175 34313 34174 +3 228 4909 5044 +3 372 7544 7430 +3 6906 6905 35186 +3 6997 7101 7100 +3 6996 6997 7100 +3 7208 7207 7100 +3 7101 7208 7100 +3 7319 7318 7207 +3 7208 7319 7207 +3 6093 6092 8149 +3 11996 11995 11911 +3 4654 11227 6795 +3 35405 35595 28993 +3 7307 7420 7216 +3 10353 10338 10231 +3 9934 10051 10050 +3 9933 9934 10050 +3 8659 10828 8766 +3 9242 9243 9354 +3 16319 16401 820 +3 10756 1521 7667 +3 11202 787 577 +3 2740 2741 2876 +3 8751 8858 8750 +3 8858 8965 8964 +3 299 404 8991 +3 3315 5859 5725 +3 7837 7836 7721 +3 8331 7533 8978 +3 9827 9828 9943 +3 8182 8183 8290 +3 8651 10353 10231 +3 7625 9015 9014 +3 9489 9605 9604 +3 9488 9489 9604 +3 9042 9150 9149 +3 8935 9042 9041 +3 9752 11226 9661 +3 10494 10459 11352 +3 3983 68 179 +3 22147 22141 21138 +3 11387 9664 10571 +3 11386 11387 10571 +3 10295 10415 10294 +3 10415 10414 10294 +3 8444 8445 10370 +3 11273 11274 8014 +3 9553 10012 9437 +3 10012 9896 9437 +3 9828 9944 9943 +3 35862 35924 35412 +3 8281 8280 8172 +3 13239 6767 5335 +3 8173 8281 8172 +3 11277 11278 228 +3 8921 8922 9028 +3 10438 10437 10317 +3 30192 30325 30191 +3 27157 27276 27275 +3 9661 9547 6632 +3 11434 11435 11492 +3 8705 8812 8811 +3 35937 35355 35853 +3 9471 9472 9587 +3 675 6001 559 +3 6861 29543 19679 +3 10529 10651 10528 +3 10289 10409 10408 +3 10288 10289 10408 +3 7374 7373 7262 +3 7263 7374 7262 +3 8815 8814 8707 +3 8708 8815 8707 +3 8494 8601 8600 +3 8493 8494 8600 +3 8280 8387 8386 +3 8279 8280 8386 +3 8172 8280 8279 +3 8171 8172 8279 +3 7375 7374 7263 +3 5996 11059 5872 +3 2238 2370 2369 +3 7053 7157 7156 +3 10370 8445 10736 +3 9176 11393 11270 +3 10652 10651 10529 +3 35844 35508 35789 +3 10290 10410 10409 +3 10289 10290 10409 +3 35721 35655 28191 +3 21208 22147 21138 +3 6391 6395 11153 +3 27156 27157 27275 +3 7472 8118 11153 +3 11280 7472 11153 +3 11217 11092 8118 +3 7472 11217 8118 +3 10256 10813 11092 +3 11217 10256 11092 +3 10141 9124 10813 +3 10256 10141 10813 +3 9169 7248 9124 +3 10141 9169 9124 +3 9169 9409 10696 +3 7248 9169 10696 +3 9409 9677 11333 +3 10696 9409 11333 +3 9677 8145 8139 +3 11333 9677 8139 +3 8145 7075 7178 +3 8139 8145 7178 +3 7075 7994 9507 +3 7178 7075 9507 +3 7994 7306 11124 +3 9507 7994 11124 +3 7306 9776 10873 +3 11124 7306 10873 +3 9776 10227 10228 +3 10873 9776 10228 +3 10227 8897 9791 +3 10228 10227 9791 +3 8897 8364 8363 +3 9791 8897 8363 +3 8364 8565 11012 +3 8363 8364 11012 +3 8565 9880 9996 +3 11012 8565 9996 +3 9880 9777 9893 +3 9996 9880 9893 +3 7578 7461 9893 +3 9777 7578 9893 +3 7194 7089 7461 +3 7578 7194 7461 +3 7194 8454 9318 +3 7089 7194 9318 +3 8454 8554 8661 +3 9318 8454 8661 +3 8554 7644 9282 +3 8661 8554 9282 +3 8243 7312 9282 +3 7644 8243 9282 +3 11222 8243 9392 +3 13503 13502 12388 +3 35450 35926 35646 +3 13239 13693 216 +3 2635 9572 4654 +3 801 920 7505 +3 6998 7102 7101 +3 27040 27157 27156 +3 7209 7208 7101 +3 7102 7209 7101 +3 7320 7319 7208 +3 7209 7320 7208 +3 8203 8204 1752 +3 27039 27040 27156 +3 9604 9605 9720 +3 9654 2878 8772 +3 7624 7625 9014 +3 9015 10624 10618 +3 10061 10179 10060 +3 10179 10298 10297 +3 10908 10909 11034 +3 7497 7496 7384 +3 10164 10163 10045 +3 11150 11276 11275 +3 9068 9177 2785 +3 8857 8858 8964 +3 8965 9072 9071 +3 8964 8965 9071 +3 5688 5687 5689 +3 14203 14301 14300 +3 7617 7732 7616 +3 10909 11035 11034 +3 8183 8291 8290 +3 10493 10616 10848 +3 10231 10338 11256 +3 10338 11221 11256 +3 9153 9262 9152 +3 9374 9373 9261 +3 7885 8898 9229 +3 9041 9042 9149 +3 2083 8558 5199 +3 11226 10494 11352 +3 7056 7055 6956 +3 4774 11277 11151 +3 1883 2000 212 +3 9664 10275 8759 +3 8505 8612 8611 +3 10415 10535 10534 +3 9422 8337 9896 +3 9587 9703 9702 +3 7566 8987 7564 +3 10012 9422 9896 +3 10587 11268 10753 +3 9010 9014 10615 +3 11190 9225 8014 +3 7649 10587 10753 +3 10318 10438 10317 +3 7175 10030 9784 +3 9579 9580 9695 +3 9438 11068 10862 +3 8276 8383 8382 +3 7942 7943 8057 +3 8772 7933 4498 +3 10612 10473 9438 +3 5310 10565 5311 +3 10859 9418 7579 +3 8056 8057 8167 +3 8873 10704 8980 +3 10898 11024 11023 +3 162 6670 6000 +3 6953 7052 7051 +3 10013 8132 7216 +3 7486 7485 7373 +3 6952 6953 7051 +3 8708 8707 8600 +3 8601 8708 8600 +3 8816 8815 8708 +3 8709 8816 8708 +3 9138 9137 9029 +3 8923 8922 8815 +3 9359 9358 9246 +3 9030 9138 9029 +3 7152 7153 7259 +3 9247 9359 9246 +3 7052 7053 7156 +3 9590 9589 9473 +3 17103 20317 4784 +3 7157 7264 7263 +3 6954 7053 7052 +3 6953 6954 7052 +3 7264 7375 7263 +3 7487 7486 7374 +3 28991 35796 35420 +3 7487 7601 7486 +3 6395 11280 11153 +3 35920 35799 11314 +3 8778 7472 11280 +3 9769 8778 11280 +3 11091 11217 7472 +3 8778 11091 7472 +3 8689 10256 11217 +3 11091 8689 11217 +3 10024 10141 10256 +3 8689 10024 10256 +3 7252 9169 10141 +3 10024 7252 10141 +3 7252 7643 9409 +3 9169 7252 9409 +3 7643 8248 9677 +3 9409 7643 9677 +3 8248 11141 8145 +3 9677 8248 8145 +3 11141 11085 7075 +3 8145 11141 7075 +3 11085 7992 7994 +3 7075 11085 7994 +3 7992 441 7306 +3 7994 7992 7306 +3 441 10038 9776 +3 7306 441 9776 +3 10038 10346 10227 +3 9776 10038 10227 +3 10346 9004 8897 +3 10227 10346 8897 +3 9004 8365 8364 +3 8897 9004 8364 +3 8365 7436 8565 +3 8364 8365 8565 +3 7436 9881 9880 +3 8565 7436 9880 +3 9881 11315 9777 +3 9880 9881 9777 +3 7349 7578 9777 +3 11315 7349 9777 +3 7193 7194 7578 +3 7349 7193 7578 +3 7144 8454 7194 +3 7193 7144 7194 +3 7144 8447 8554 +3 8454 7144 8554 +3 8447 8112 7644 +3 8554 8447 7644 +3 9392 8243 7644 +3 8112 9392 7644 +3 6957 900 11128 +3 15769 11223 15358 +3 2126 132 298 +3 2116 1991 1992 +3 2340 6119 2339 +3 7822 7821 7707 +3 6999 7103 7102 +3 6998 6999 7102 +3 7210 7209 7102 +3 7103 7210 7102 +3 7321 7320 7209 +3 7210 7321 7209 +3 4099 10272 9227 +3 21327 27725 26499 +3 9721 9836 9835 +3 12131 12049 13602 +3 9014 9015 10618 +3 9374 9489 9373 +3 10735 9447 9552 +3 10624 10353 8651 +3 7385 7497 7384 +3 8189 8188 8077 +3 11068 8029 10759 +3 7355 10614 9414 +3 9072 9180 9179 +3 6876 18936 30610 +3 9071 9072 9179 +3 9180 9289 9288 +3 8587 8694 8693 +3 9179 9180 9288 +3 5863 14240 22141 +3 8586 8587 8693 +3 7391 7503 7390 +3 7847 7846 7731 +3 15325 15326 5566 +3 4767 4768 4902 +3 11990 12071 12070 +3 12583 12584 12673 +3 9044 9045 9152 +3 9262 9261 9152 +3 7420 7327 7216 +3 10684 10490 9078 +3 8492 8599 8598 +3 8491 8492 8598 +3 429 428 319 +3 8404 8511 8403 +3 10592 10526 8981 +3 912 14536 792 +3 10050 10051 10168 +3 8511 8510 8403 +3 10315 10435 10314 +3 10169 10288 10287 +3 9317 8767 8669 +3 10555 10554 10434 +3 8822 8929 8928 +3 1621 7569 15362 +3 35606 35754 35920 +3 7834 7950 7833 +3 9317 8669 9096 +3 8767 8874 8669 +3 11268 7215 10753 +3 9195 9087 9985 +3 7334 7224 398 +3 7215 9985 10753 +3 10953 6958 8337 +3 9068 2649 2515 +3 10408 10407 10287 +3 10288 10408 10287 +3 7378 7490 7489 +3 7055 7056 7159 +3 5863 21206 14240 +3 7654 11190 8014 +3 33930 21501 33686 +3 8388 8387 8280 +3 7052 7156 7155 +3 8814 8815 8921 +3 8387 8494 8493 +3 8386 8387 8493 +3 8816 8923 8815 +3 9030 9029 8922 +3 8872 8765 9869 +3 7599 7714 7713 +3 7908 7685 7175 +3 8872 7906 8765 +3 7233 407 7232 +3 7685 9077 7686 +3 10777 10776 10652 +3 10653 10777 10652 +3 10653 10652 10530 +3 10531 10653 10530 +3 10172 10291 10290 +3 10171 10172 10290 +3 10290 10291 10410 +3 10291 10411 10410 +3 10411 10531 10410 +3 10531 10530 10410 +3 9460 9575 2876 +3 13839 13838 13740 +3 8450 10274 8778 +3 9769 8450 8778 +3 11343 11091 8778 +3 10274 11343 8778 +3 7455 8689 11091 +3 11343 7455 11091 +3 7999 10024 8689 +3 7455 7999 8689 +3 8474 7252 10024 +3 7999 8474 10024 +3 8474 9217 7643 +3 7252 8474 7643 +3 9217 7331 8248 +3 7643 9217 8248 +3 7331 7394 11141 +3 8248 7331 11141 +3 7394 10958 11085 +3 11141 7394 11085 +3 10958 7393 7992 +3 11085 10958 7992 +3 7393 9748 441 +3 7992 7393 441 +3 9748 8653 10038 +3 441 9748 10038 +3 8653 10345 10346 +3 10038 8653 10346 +3 10345 10878 9004 +3 10346 10345 9004 +3 10878 8545 8365 +3 9004 10878 8365 +3 8545 8685 7436 +3 8365 8545 7436 +3 8685 7661 9881 +3 7436 8685 9881 +3 7661 9222 11315 +3 9881 7661 11315 +3 11346 7349 11315 +3 9222 11346 11315 +3 10352 7193 7349 +3 11346 10352 7349 +3 10352 11239 7144 +3 7193 10352 7144 +3 11239 8340 8447 +3 7144 11239 8447 +3 8340 11324 8112 +3 8447 8340 8112 +3 7434 9392 8112 +3 11324 7434 8112 +3 11223 15910 15358 +3 7434 11223 9392 +3 18932 18178 18398 +3 13846 13845 13747 +3 9325 11193 11724 +3 5610 6648 17122 +3 7000 7104 7103 +3 6998 7101 6997 +3 7211 7210 7103 +3 7104 7211 7103 +3 7322 7321 7210 +3 7211 7322 7210 +3 10383 6871 16074 +3 6409 35946 35535 +3 8934 8935 9041 +3 11002 11355 10580 +3 9262 9374 9261 +3 9489 9488 9373 +3 10618 10624 8651 +3 15773 12287 12282 +3 7963 8078 7962 +3 7327 10013 7216 +3 10238 7196 8258 +3 5988 6119 2340 +3 10479 7700 9299 +3 408 409 522 +3 13882 11881 5418 +3 8561 13413 9685 +3 11738 11737 11657 +3 12500 12499 12410 +3 13387 9325 11724 +3 12128 12211 29 +3 8255 10479 10221 +3 7700 10750 10743 +3 28197 28196 28079 +3 7617 7616 7502 +3 2811 27168 29081 +3 6939 116 6974 +3 11820 11906 11905 +3 11989 11990 12070 +3 8938 9045 9044 +3 8937 8938 9044 +3 9149 9150 9258 +3 9150 9259 9258 +3 8277 8278 8384 +3 8385 8492 8491 +3 7604 7603 7489 +3 4130 15175 4655 +3 9083 10961 9225 +3 7160 7267 7266 +3 7215 9195 9985 +3 10862 11113 9087 +3 9195 10862 9087 +3 10759 9782 11113 +3 8767 8986 8874 +3 10903 11029 10902 +3 22259 21687 22355 +3 7718 7719 7833 +3 9767 8036 7358 +3 10729 9767 7358 +3 9767 10729 10581 +3 10704 9767 10581 +3 4498 2000 4108 +3 8772 8879 7933 +3 7485 7599 7598 +3 35415 35655 35839 +3 7714 7829 7828 +3 11190 9083 9225 +3 10408 10528 10407 +3 35454 35935 35648 +3 14924 15290 11643 +3 7908 7175 9670 +3 5982 5850 5851 +3 9422 10953 8337 +3 8281 8388 8280 +3 7177 11349 11311 +3 8815 8922 8921 +3 8495 8494 8387 +3 8061 8172 8171 +3 8060 8061 8171 +3 8923 9030 8922 +3 9247 9246 9137 +3 7698 9662 10842 +3 8247 6961 8140 +3 7426 11204 11355 +3 11204 9870 7420 +3 7439 10250 7327 +3 11078 11204 7420 +3 9101 10248 8993 +3 9101 8993 10013 +3 9007 7760 11241 +3 7690 11241 10595 +3 7583 10734 7760 +3 7690 9007 11241 +3 26698 26810 26809 +3 9007 7583 7760 +3 10898 10897 4372 +3 25265 35522 25266 +3 1174 9542 3848 +3 22147 5863 22141 +3 10446 10274 8450 +3 10809 10446 8450 +3 11322 11343 10274 +3 10446 11322 10274 +3 8692 7455 11343 +3 11322 8692 11343 +3 7310 7999 7455 +3 8692 7310 7455 +3 8260 8474 7999 +3 7310 8260 7999 +3 8260 10731 9217 +3 8474 8260 9217 +3 10731 6959 7331 +3 9217 10731 7331 +3 6959 10156 7394 +3 7331 6959 7394 +3 10156 11211 10958 +3 7394 10156 10958 +3 11211 9440 7393 +3 10958 11211 7393 +3 9440 9747 9748 +3 7393 9440 9748 +3 9747 8864 8653 +3 9748 9747 8653 +3 8864 10464 10345 +3 8653 8864 10345 +3 10464 10877 10878 +3 10345 10464 10878 +3 10877 8755 8545 +3 10878 10877 8545 +3 8755 8788 8685 +3 8545 8755 8685 +3 8788 7777 7661 +3 8685 8788 7661 +3 7777 9522 9222 +3 7661 7777 9222 +3 7088 11346 9222 +3 9522 7088 9222 +3 10252 10352 11346 +3 7088 10252 11346 +3 10252 10950 11239 +3 10352 10252 11239 +3 13204 11790 10950 +3 11239 10950 8340 +3 8233 10950 11790 +3 8340 8233 11324 +3 7433 7434 11324 +3 7547 7433 11324 +3 7547 8483 7433 +3 35519 35939 35888 +3 1868 8312 1869 +3 12032 13109 10376 +3 9662 11001 7143 +3 35916 35727 35877 +3 30927 30926 30872 +3 30873 30927 30872 +3 7212 7211 7104 +3 7105 7212 7104 +3 7323 7322 7211 +3 7212 7323 7211 +3 35762 14562 35714 +3 7323 7435 7322 +3 21206 21205 14240 +3 7435 7549 376 +3 7279 7390 7278 +3 1249 7935 1250 +3 12855 12948 12854 +3 7502 7501 7389 +3 9867 10973 9775 +3 12680 12681 12769 +3 7505 7504 800 +3 35427 29821 28076 +3 8039 7809 10626 +3 9448 11269 2490 +3 3855 15356 1485 +3 10750 7397 10743 +3 29652 29653 29785 +3 3306 1140 547 +3 32242 32344 32241 +3 12773 12865 12864 +3 9388 9387 9275 +3 7700 10743 9299 +3 29786 29915 29914 +3 9276 9388 9275 +3 11819 11820 11905 +3 7037 313 312 +3 8831 8938 8937 +3 10096 5041 10105 +3 9259 9371 9370 +3 9045 9153 9152 +3 10512 10773 10501 +3 9258 9259 9370 +3 10773 9752 8477 +3 11226 11352 9661 +3 7575 9420 8119 +3 11526 11594 11525 +3 7420 7307 10952 +3 9585 9586 9701 +3 10778 10777 10653 +3 5473 3607 347 +3 7490 7604 7489 +3 7267 7378 7266 +3 10862 10759 11113 +3 35924 35525 35745 +3 35830 35633 35629 +3 17713 363 477 +3 8036 10587 7649 +3 7358 8036 7649 +3 21206 15469 15468 +3 8493 8600 8599 +3 5310 10445 10565 +3 10490 10370 9078 +3 10414 10415 10534 +3 10535 10657 10656 +3 8898 10684 9078 +3 10534 10535 10656 +3 11276 11277 8883 +3 420 7245 310 +3 7808 937 6961 +3 228 11187 11188 +3 7645 7538 6958 +3 533 418 7245 +3 35477 35871 35409 +3 10953 7645 6958 +3 8388 8495 8387 +3 8707 8706 8599 +3 7945 7946 8060 +3 8602 8601 8494 +3 9138 9247 9137 +3 9474 9473 9358 +3 116 6939 7037 +3 9065 7546 10828 +3 9870 7439 7327 +3 7420 9870 7327 +3 8559 8111 7463 +3 11073 11074 10478 +3 9305 10569 10815 +3 7232 406 7231 +3 35661 35590 35861 +3 7362 10442 7060 +3 7362 7060 11282 +3 11283 7362 11282 +3 10904 11030 10903 +3 11157 11156 11029 +3 11283 11282 11156 +3 11030 11157 11029 +3 219 13239 216 +3 11157 11283 11156 +3 9304 10446 10809 +3 20829 20909 20908 +3 11329 11322 10446 +3 9304 11329 10446 +3 6890 8692 11322 +3 11329 6890 11322 +3 8238 7310 8692 +3 6890 8238 8692 +3 8668 8260 7310 +3 8238 8668 7310 +3 7141 10731 8260 +3 8668 7141 8260 +3 7141 10867 6959 +3 10731 7141 6959 +3 10867 8265 10156 +3 6959 10867 10156 +3 8265 10833 11211 +3 10156 8265 11211 +3 10833 9558 9440 +3 11211 10833 9440 +3 9558 8366 9747 +3 9440 9558 9747 +3 8366 10865 8864 +3 9747 8366 8864 +3 10865 10585 10464 +3 8864 10865 10464 +3 10585 10875 10877 +3 10464 10585 10877 +3 10875 8457 8755 +3 10877 10875 8755 +3 8457 8681 8788 +3 8755 8457 8788 +3 8681 7778 7777 +3 8788 8681 7777 +3 7778 10010 9522 +3 7777 7778 9522 +3 10010 11354 7088 +3 9522 10010 7088 +3 7682 10252 7088 +3 11058 11354 11707 +3 11166 11292 11165 +3 7682 11354 11058 +3 8658 9438 9195 +3 10032 10468 10469 +3 10297 10296 10177 +3 11068 10759 10862 +3 6511 8561 8200 +3 35934 35357 35645 +3 14162 13619 12571 +3 14254 8223 15198 +3 7241 416 415 +3 10676 10677 10800 +3 10896 4371 10897 +3 12373 1381 12641 +3 14856 613 14801 +3 9909 277 1891 +3 35350 35889 35658 +3 4137 2795 2524 +3 777 897 896 +3 7000 17369 7104 +3 15971 3181 80 +3 9572 2635 8655 +3 4099 1167 10155 +3 35909 35363 35524 +3 1451 4675 1566 +3 6544 7254 10976 +3 7390 7502 7389 +3 8081 8192 8080 +3 22623 22622 22523 +3 7616 7615 7501 +3 398 7448 512 +3 11747 11746 11666 +3 26000 18510 23891 +3 11110 9213 8007 +3 9484 9600 9483 +3 29243 29242 29105 +3 8774 11110 8007 +3 13409 11079 4796 +3 8024 10102 9213 +3 8933 9040 8932 +3 10829 10839 9296 +3 11172 11171 11044 +3 9347 9348 9462 +3 9136 9245 9244 +3 9972 9971 9855 +3 9135 9136 9244 +3 9503 9502 9387 +3 9854 9855 9971 +3 11018 11017 10891 +3 9388 9503 9387 +3 3334 10096 10105 +3 14200 14199 14103 +3 8724 8831 8830 +3 12154 12237 12153 +3 9486 9485 9370 +3 8830 8831 8937 +3 8958 10512 8952 +3 9371 9486 9370 +3 8773 8880 9981 +3 9752 9661 8477 +3 8439 9536 8349 +3 9408 8773 9981 +3 9420 9408 9981 +3 8119 9420 9981 +3 9564 11244 8776 +3 10747 9755 8869 +3 11244 8869 8776 +3 27406 21656 27142 +3 9586 9587 9702 +3 9703 9818 9702 +3 8920 9027 8919 +3 9027 9135 9134 +3 9356 9355 9243 +3 9244 9356 9243 +3 9356 9471 9470 +3 7143 11001 9767 +3 8883 228 11188 +3 787 9895 9332 +3 7740 7356 9188 +3 9188 9187 11386 +3 11285 11286 7740 +3 9187 11387 11386 +3 10657 10781 10780 +3 7356 9187 9188 +3 10656 10657 10780 +3 11029 11028 10902 +3 10906 10905 10780 +3 10781 10906 10780 +3 9209 9205 10131 +3 9209 7510 9205 +3 8372 11002 7538 +3 10351 9209 10131 +3 6961 937 7812 +3 7645 8372 7538 +3 8495 8602 8494 +3 8492 8493 8599 +3 9359 9474 9358 +3 8602 8709 8708 +3 35687 35587 35851 +3 10777 10902 10776 +3 10250 10013 7327 +3 10250 9101 10013 +3 10961 5307 5173 +3 8111 10478 7463 +3 8759 9190 9082 +3 8084 8759 9082 +3 8015 9191 10507 +3 9190 10823 10948 +3 8015 9333 9191 +3 9514 8015 10507 +3 9316 9333 7535 +3 9333 7540 7535 +3 5851 11311 10963 +3 9539 1371 663 +3 9915 9539 4102 +3 21205 21206 15468 +3 27371 27372 20829 +3 20908 27489 27371 +3 9915 10690 11329 +3 9304 9915 11329 +3 9105 6890 11329 +3 10690 9105 11329 +3 9631 8238 6890 +3 9105 9631 6890 +3 10152 8668 8238 +3 9631 10152 8238 +3 10152 10711 7141 +3 8668 10152 7141 +3 10711 10742 10867 +3 7141 10711 10867 +3 8371 8265 10867 +3 10742 8371 10867 +3 8371 11337 10833 +3 8265 8371 10833 +3 11337 9442 9558 +3 10833 11337 9558 +3 9442 8370 8366 +3 9558 9442 8366 +3 8370 10374 10865 +3 8366 8370 10865 +3 10374 7109 10585 +3 10865 10374 10585 +3 7109 9574 10875 +3 10585 7109 10875 +3 9574 14656 14565 +3 10875 9574 8457 +3 10617 10567 8681 +3 8457 10617 8681 +3 10567 9882 7778 +3 8681 10567 7778 +3 9882 10373 10010 +3 7778 9882 10010 +3 9116 9437 10684 +3 35523 35935 35454 +3 11237 9080 11369 +3 11111 11237 11369 +3 11292 11291 11165 +3 9153 9154 9262 +3 10030 10885 9900 +3 9838 9954 9837 +3 10297 10417 10296 +3 9755 7794 7554 +3 35616 35466 35659 +3 10919 10918 10793 +3 35569 35511 35927 +3 13390 35747 35639 +3 8054 8165 8053 +3 10407 10406 10286 +3 372 263 373 +3 15784 15923 15922 +3 12137 12117 11634 +3 163 268 7323 +3 3607 5473 16959 +3 50 245 16053 +3 16466 16467 50 +3 4792 11569 1382 +3 7321 7322 265 +3 10931 11057 11056 +3 10941 9199 7894 +3 11072 11199 9686 +3 7893 8775 10700 +3 8140 7812 8029 +3 10572 10333 10332 +3 7966 8081 7965 +3 10818 10572 10332 +3 7502 7616 7501 +3 8192 8191 8080 +3 10949 8342 7776 +3 7731 7730 7615 +3 16165 16163 16020 +3 9759 10123 127 +3 9619 9618 9502 +3 8654 8441 8007 +3 10089 10207 10088 +3 9503 9619 9502 +3 8784 10706 10594 +3 12318 12319 12404 +3 16537 16688 15559 +3 10725 10339 8158 +3 18378 19881 19882 +3 519 7342 520 +3 10339 9306 10220 +3 7639 7754 7638 +3 954 953 8006 +3 10892 11018 10891 +3 28952 28951 28818 +3 29106 29243 29105 +3 2246 2118 2247 +3 7039 6940 6941 +3 31080 11422 31143 +3 8319 8318 8210 +3 10089 10088 9971 +3 2876 3015 2875 +3 9850 9849 9734 +3 9972 10089 9971 +3 10041 10159 10040 +3 9735 9850 9734 +3 12322 12321 12236 +3 8007 9213 11218 +3 8724 8723 8616 +3 5694 12648 12561 +3 9486 9602 9601 +3 8723 8724 8830 +3 7563 8958 7562 +3 9485 9486 9601 +3 7696 10511 8880 +3 10773 8477 10501 +3 10747 7217 7794 +3 8773 7696 8880 +3 10870 11219 8250 +3 11244 10747 8869 +3 11219 10810 7398 +3 10810 7761 7398 +3 7761 10810 1056 +3 10810 2929 1056 +3 8736 10870 7560 +3 2929 7647 10387 +3 10870 8250 7560 +3 11219 7398 8250 +3 9573 8736 10726 +3 10710 10224 10127 +3 11191 9573 11064 +3 9662 10710 11224 +3 10974 7920 7687 +3 8736 7560 10726 +3 9755 10747 7794 +3 7217 10987 10860 +3 7794 7217 10860 +3 10987 9013 8373 +3 10860 10987 8373 +3 9013 7916 7767 +3 11160 11286 11285 +3 8373 9013 7767 +3 11159 11160 11285 +3 11286 7356 7740 +3 10905 10906 11031 +3 10906 11032 11031 +3 11032 11159 11158 +3 11031 11032 11158 +3 821 11394 11390 +3 10351 10131 8905 +3 7426 11355 11002 +3 10654 10778 10653 +3 7373 7485 7372 +3 11151 11277 11276 +3 8601 8602 8708 +3 6096 8310 5964 +3 35780 35460 14177 +3 7712 7827 7826 +3 10248 10595 8993 +3 10248 7690 10595 +3 35402 35422 35777 +3 9743 11334 1980 +3 9082 9190 10948 +3 9514 10507 10948 +3 10536 10535 10415 +3 10416 10536 10415 +3 10296 10295 10176 +3 10177 10296 10176 +3 10059 10058 9941 +3 9942 10059 9941 +3 9711 9826 9710 +3 9942 9941 9825 +3 9711 9710 9594 +3 9595 9711 9594 +3 8483 11971 16988 +3 9826 9825 9710 +3 9768 10690 9915 +3 9768 9915 4102 +3 10211 9105 10690 +3 9768 10211 10690 +3 8242 9631 9105 +3 10211 8242 9105 +3 8242 10034 10152 +3 9631 8242 10152 +3 10034 10712 10711 +3 10152 10034 10711 +3 9444 10742 10711 +3 10712 9444 10711 +3 9444 8266 8371 +3 10742 9444 8371 +3 8266 7676 11337 +3 8371 8266 11337 +3 7676 9328 9442 +3 11337 7676 9442 +3 9328 9745 8370 +3 9442 9328 8370 +3 9745 9892 10374 +3 8370 9745 10374 +3 9892 7108 7109 +3 10374 9892 7109 +3 11653 11733 11732 +3 14761 7108 9892 +3 11577 32565 32564 +3 11652 11653 11732 +3 8043 10574 10567 +3 35671 35641 35819 +3 21647 35923 35698 +3 10567 10574 9882 +3 7825 7826 7941 +3 15702 15701 10148 +3 526 412 413 +3 8224 11120 9286 +3 11237 11111 8008 +3 9080 8758 10095 +3 9368 9369 9483 +3 9606 9722 9605 +3 9084 8658 7215 +3 9784 10030 9900 +3 7650 9755 7554 +3 7687 8142 10885 +3 10670 10669 10547 +3 10670 10794 10669 +3 9295 11326 9172 +3 1069 5414 16850 +3 7939 8054 7938 +3 8273 8272 8164 +3 8929 9036 8928 +3 20705 20787 20786 +3 20628 20709 20627 +3 22911 23010 22910 +3 21122 21978 21121 +3 1882 212 8350 +3 6512 9769 6395 +3 35843 35449 35794 +3 8530 8637 8529 +3 8423 8530 8529 +3 9325 13387 9651 +3 9264 9376 9375 +3 8422 8423 8529 +3 11908 11992 11907 +3 9491 9607 9490 +3 10333 11199 11072 +3 8398 8505 8504 +3 20709 20791 20790 +3 10332 10333 11072 +3 7616 7731 7615 +3 8081 8080 7965 +3 11907 11906 11820 +3 12240 12325 12239 +3 9468 9469 9584 +3 9283 8255 7218 +3 9735 9734 9618 +3 9619 9735 9618 +3 18536 20940 20860 +3 7936 8051 1250 +3 10456 10336 6637 +3 7771 7656 597 +3 9144 9143 9035 +3 9827 9943 9942 +3 10411 10412 10531 +3 11370 11369 11186 +3 10270 10014 8126 +3 10443 10740 8677 +3 9054 9162 9053 +3 9271 9270 9161 +3 20628 20627 20545 +3 12237 12236 12153 +3 9966 10083 9965 +3 22902 22903 23001 +3 9850 9966 9965 +3 9849 9850 9965 +3 9235 9347 9346 +3 10083 10082 9965 +3 10492 11082 10150 +3 6955 7054 7053 +3 8617 8616 8509 +3 11991 11990 11906 +3 9718 9717 9601 +3 8617 8724 8616 +3 9671 7563 9527 +3 9602 9718 9601 +3 9564 8776 10511 +3 10512 10501 8952 +3 92 6965 11064 +3 7696 9564 10511 +3 11289 11290 92 +3 9573 10726 11064 +3 10914 11040 11039 +3 6965 11191 11064 +3 10789 10914 10913 +3 10788 10789 10913 +3 10543 10665 10664 +3 10542 10543 10664 +3 10665 10789 10788 +3 10664 10665 10788 +3 11040 11167 11039 +3 11293 11292 11166 +3 11167 11293 11166 +3 11293 8251 10573 +3 8251 7895 8887 +3 11292 11293 10573 +3 10785 10786 10910 +3 10573 8251 8887 +3 10661 10662 10785 +3 10911 11037 11036 +3 10539 10540 10661 +3 10786 10911 10910 +3 10420 10540 10419 +3 10662 10786 10785 +3 7916 7691 8039 +3 10540 10662 10661 +3 10906 10907 11032 +3 7767 7916 8039 +3 11033 11160 11159 +3 11032 11033 11159 +3 11158 11159 11284 +3 11159 11285 11284 +3 11142 10351 8905 +3 11073 11142 11074 +3 11277 228 8883 +3 10778 10903 10902 +3 9625 11394 5190 +3 9586 9702 9701 +3 35506 35895 28993 +3 8057 8058 8168 +3 7711 7712 7826 +3 9355 9470 9469 +3 5183 10815 5316 +3 7943 8058 8057 +3 11971 8483 11974 +3 8811 8812 8918 +3 10823 9514 10948 +3 9333 9316 9191 +3 10416 10415 10295 +3 10296 10416 10295 +3 7272 7271 7164 +3 12572 13789 16774 +3 7495 7609 7608 +3 7383 7382 7271 +3 7724 7839 7838 +3 7494 7495 7608 +3 7955 8070 8069 +3 7723 7724 7838 +3 8070 8181 8180 +3 7954 7955 8069 +3 12248 12247 12164 +3 3314 5983 8038 +3 11266 10211 9768 +3 8998 11266 9768 +3 8480 8242 10211 +3 11266 8480 10211 +3 8480 8635 10034 +3 8242 8480 10034 +3 8635 8973 10712 +3 10034 8635 10712 +3 9559 9444 10712 +3 8973 9559 10712 +3 9559 8267 8266 +3 9444 9559 8266 +3 8267 9540 7676 +3 8266 8267 7676 +3 9540 9329 9328 +3 7676 9540 9328 +3 9329 8353 9745 +3 9328 9329 9745 +3 8353 9891 9892 +3 9745 8353 9892 +3 3199 7923 3200 +3 1836 1844 1845 +3 13986 443 13889 +3 14204 14302 14203 +3 8735 11261 14301 +3 3201 3199 8442 +3 1157 7849 7733 +3 13769 13675 13097 +3 9600 9599 9483 +3 7564 7563 9671 +3 20546 20628 20545 +3 29224 29223 29086 +3 8444 7896 8445 +3 35439 35421 35897 +3 14314 10853 14313 +3 8008 7892 13387 +3 8451 10098 7588 +3 11208 10032 10469 +3 10178 10177 10059 +3 8373 7767 9505 +3 10526 10512 8958 +3 10469 9199 10941 +3 10794 10793 10669 +3 10428 10548 10427 +3 6949 7048 7047 +3 10697 10821 10456 +3 7823 7939 7822 +3 8165 8164 8053 +3 7493 7494 7607 +3 8714 8715 8821 +3 5983 4099 9227 +3 10761 4228 10637 +3 13642 13643 13740 +3 18933 1977 28187 +3 8211 8319 8210 +3 314 209 7039 +3 895 896 1015 +3 9578 9694 9693 +3 8315 8316 8422 +3 7869 7985 7868 +3 8096 8097 8207 +3 8208 8316 8315 +3 10786 10787 10911 +3 8207 8208 8315 +3 11199 9003 9686 +3 8303 1626 1743 +3 7966 7965 7849 +3 9003 10844 5201 +3 7382 7494 7493 +3 7608 7723 7722 +3 2124 159 4800 +3 10041 10040 9923 +3 10201 10200 10082 +3 10083 10201 10082 +3 10201 10320 10200 +3 10320 10319 10200 +3 10320 10440 10319 +3 10440 10439 10319 +3 35628 35892 35395 +3 35531 35706 35534 +3 35438 35502 35588 +3 10682 10681 10559 +3 10681 10682 10805 +3 10682 10806 10805 +3 10805 10806 10930 +3 10806 10931 10930 +3 10930 10931 11056 +3 13587 7460 10807 +3 10844 10100 9636 +3 8612 8613 8719 +3 10642 10641 10519 +3 5201 10844 9636 +3 7381 7382 7493 +3 10641 10642 10765 +3 8188 8296 8187 +3 7494 7608 7607 +3 9833 9832 9717 +3 8510 8617 8509 +3 7647 9671 10387 +3 9718 9833 9717 +3 11163 11164 11289 +3 8958 8952 7562 +3 11036 11037 11163 +3 11290 6965 92 +3 8541 10863 7062 +3 11164 11290 11289 +3 11167 11166 11039 +3 11376 8541 7062 +3 29695 28879 27553 +3 10913 10914 11039 +3 19937 34074 18512 +3 7279 7278 7171 +3 19800 19798 30555 +3 7390 7389 7278 +3 29228 29229 29365 +3 27516 27634 27633 +3 22828 9063 2477 +3 13813 13814 13911 +3 3040 7671 2517 +3 21754 21607 21424 +3 12638 12732 12548 +3 23013 23012 22913 +3 7895 8541 11376 +3 22912 23011 22911 +3 4380 814 9511 +3 8887 7895 11376 +3 11326 11200 4380 +3 9510 10104 10021 +3 9511 9510 10021 +3 814 9510 9511 +3 10300 10420 10299 +3 10104 7567 7566 +3 7691 8796 7809 +3 10540 10539 10419 +3 10782 10781 10657 +3 8039 7691 7809 +3 7740 7145 11284 +3 10658 10782 10657 +3 8111 11073 10478 +3 11386 10571 10570 +3 8372 7426 11002 +3 11142 8905 11074 +3 9354 9355 9469 +3 10777 10778 10902 +3 7910 9323 8032 +3 9470 9586 9585 +3 8142 7910 8032 +3 10935 9678 9323 +3 10935 8873 9678 +3 9597 9713 9712 +3 8919 9026 9025 +3 10704 10581 8980 +3 8058 8169 8168 +3 9025 9026 9133 +3 10177 10176 10058 +3 10059 10177 10058 +3 7272 7383 7271 +3 7495 7494 7382 +3 9830 9946 9945 +3 9829 9830 9945 +3 9599 9715 9714 +3 9598 9599 9714 +3 9368 9483 9482 +3 9367 9368 9482 +3 9368 9367 9255 +3 9256 9368 9255 +3 10440 14188 10559 +3 22195 24398 26245 +3 11215 11139 11266 +3 8998 11215 11266 +3 11139 6982 8480 +3 11266 11139 8480 +3 6982 7447 8635 +3 8480 6982 8635 +3 8311 8973 8635 +3 7447 8311 8635 +3 9443 9559 8973 +3 8311 9443 8973 +3 9443 6985 8267 +3 9559 9443 8267 +3 6985 11312 9540 +3 8267 6985 9540 +3 11312 7332 9329 +3 9540 11312 9329 +3 7332 9744 8353 +3 9329 7332 8353 +3 1621 1407 7569 +3 8353 9744 9891 +3 13300 13212 13019 +3 13212 13415 12568 +3 13212 12568 13019 +3 13415 3594 12568 +3 13722 13721 13623 +3 12068 12150 12149 +3 9864 5962 5830 +3 410 409 7235 +3 9369 9370 9484 +3 6950 7049 7048 +3 9057 9165 9056 +3 8648 7642 8044 +3 11224 10710 10127 +3 795 7667 1521 +3 11273 11272 11146 +3 7463 5585 5451 +3 6882 6949 6881 +3 10135 8544 10956 +3 15508 15509 15643 +3 10060 10178 10059 +3 9041 9149 9040 +3 10918 11044 10917 +3 10793 10792 10668 +3 10548 10547 10427 +3 10926 10925 10800 +3 9848 9964 9847 +3 420 310 311 +3 8054 8053 7938 +3 7607 7608 7722 +3 7723 7838 7837 +3 10561 10683 14188 +3 9346 9347 9461 +3 9577 9578 9693 +3 9462 9578 9577 +3 9461 9462 9577 +3 8316 8423 8422 +3 7982 8097 8096 +3 8747 8854 8746 +3 1859 10492 10150 +3 9686 9003 5201 +3 9425 8971 10818 +3 7722 7723 7837 +3 7954 7953 7837 +3 9365 9480 9364 +3 7380 7381 7492 +3 12678 12767 12677 +3 8840 8947 8839 +3 14105 14201 14200 +3 27314 27296 26474 +3 35841 3985 9451 +3 14006 14007 14104 +3 10635 10648 11184 +3 10649 2248 9689 +3 9067 9089 10635 +3 10648 11196 11184 +3 7658 7659 9067 +3 9089 10648 10635 +3 10955 11011 7658 +3 7659 9089 9067 +3 10100 11011 10955 +3 9636 10100 10955 +3 7838 7954 7837 +3 11011 7659 7658 +3 7954 8069 8068 +3 26475 27314 26474 +3 8403 8402 8295 +3 11020 11019 10893 +3 9949 9948 9832 +3 8296 8403 8295 +3 9671 9527 10387 +3 9833 9949 9832 +3 10910 10911 11036 +3 7563 7562 9527 +3 9197 9294 9295 +3 11037 11164 11163 +3 7062 10863 10839 +3 10839 9197 9295 +3 20780 20781 9063 +3 10863 9197 10839 +3 8775 11258 10697 +3 9781 8673 8566 +3 8514 8513 8406 +3 7776 14065 13028 +3 8300 8299 8191 +3 8192 8300 8191 +3 8407 8406 8299 +3 8300 8407 8299 +3 8514 8621 8513 +3 8728 8727 8620 +3 8621 8728 8620 +3 8835 8834 8727 +3 8728 8835 8727 +3 8942 8941 8834 +3 8835 8942 8834 +3 9049 9048 8941 +3 14011 14109 14108 +3 35595 35914 28993 +3 9130 9239 9238 +3 9129 9130 9238 +3 14410 15823 1212 +3 8699 8698 8591 +3 34757 34758 21648 +3 10926 11052 11051 +3 10021 10104 7566 +3 7543 7544 485 +3 10063 10181 10180 +3 7567 8988 8987 +3 7470 8156 7809 +3 10062 10063 10180 +3 10536 10658 10657 +3 6364 6491 6490 +3 11367 11386 10570 +3 10535 10536 10657 +3 10532 10533 10654 +3 10571 8759 8084 +3 11204 11078 11355 +3 10655 10779 10778 +3 10523 10645 10522 +3 7153 7260 7259 +3 9480 9481 9596 +3 8913 9020 9019 +3 7950 8065 7949 +3 19453 12543 7414 +3 8504 8505 8611 +3 3179 35575 27753 +3 9134 9243 9242 +3 8719 8718 8611 +3 9826 9942 9825 +3 8490 8491 8597 +3 7383 7495 7382 +3 7609 7724 7723 +3 9715 9830 9829 +3 9714 9715 9829 +3 10358 10238 10614 +3 9206 10358 10614 +3 12157 12156 12074 +3 9206 10237 10358 +3 12353 12352 12267 +3 11665 11745 11664 +3 2369 8949 2368 +3 338 5203 2903 +3 4501 809 4502 +3 12288 14086 11703 +3 11267 10025 6982 +3 11139 11267 6982 +3 8672 7447 6982 +3 10025 8672 6982 +3 11027 8311 7447 +3 8672 11027 7447 +3 9330 9443 8311 +3 11027 9330 8311 +3 9330 9557 6985 +3 9443 9330 6985 +3 9557 8743 11312 +3 6985 9557 11312 +3 8743 8259 7332 +3 11312 8743 7332 +3 8259 7348 9744 +3 7332 8259 9744 +3 1273 458 3344 +3 7348 8261 7347 +3 6508 1273 3344 +3 8900 159 458 +3 10957 9120 10363 +3 1273 8900 458 +3 35097 35098 6929 +3 7448 398 7336 +3 8161 8162 8269 +3 524 410 411 +3 1482 1365 8161 +3 2107 8627 1983 +3 9103 8995 8130 +3 10209 10210 13907 +3 575 574 10858 +3 9869 8765 9084 +3 7907 7555 7786 +3 8700 8701 8807 +3 7933 8767 9317 +3 9934 9933 9817 +3 3959 10513 4093 +3 5279 18382 14630 +3 10951 10469 10941 +3 10308 10428 10427 +3 9148 9149 9257 +3 11044 11043 10917 +3 9964 10081 9963 +3 20469 20468 20384 +3 12841 11889 35532 +3 13625 13626 13723 +3 9096 9095 9064 +3 21649 21648 34887 +3 8669 8151 9095 +3 9096 8669 9095 +3 1133 1015 7935 +3 9694 9809 9808 +3 1711 8585 1710 +3 15509 15644 15643 +3 2050 19295 19190 +3 27754 17317 28336 +3 1625 8303 8302 +3 136 10457 13976 +3 9213 10102 7679 +3 7820 7936 7935 +3 8441 8654 9794 +3 9663 9459 10940 +3 7751 7866 7750 +3 11995 12076 11994 +3 12767 12766 12677 +3 7982 7981 7865 +3 7734 8971 9425 +3 12955 12956 13049 +3 9167 7734 9425 +3 8971 10572 10818 +3 2151 17012 17176 +3 3976 8146 6124 +3 792 516 10485 +3 22053 6896 27503 +3 9257 9256 9147 +3 16001 16002 16143 +3 10438 10558 10437 +3 9580 9696 9695 +3 10315 10314 10195 +3 10558 10557 10437 +3 10615 10618 10568 +3 8879 8986 8767 +3 8189 8297 8188 +3 9016 9017 9125 +3 8987 10592 8981 +3 11118 15904 7583 +3 20908 27371 20829 +3 35376 35528 11409 +3 7846 7845 7730 +3 1506 132 799 +3 8510 8509 8402 +3 7731 7846 7730 +3 10066 10065 9948 +3 8403 8510 8402 +3 8071 8182 8181 +3 9949 10066 9948 +3 7956 8071 8070 +3 8070 8071 8181 +3 9295 9294 11326 +3 7955 7956 8070 +3 8592 8699 8591 +3 9294 11200 11326 +3 8699 8806 8805 +3 8698 8699 8805 +3 9378 9493 9377 +3 7370 7369 7258 +3 8621 8620 8513 +3 9609 9608 9492 +3 10884 7734 9167 +3 8407 8514 8406 +3 11303 10884 10757 +3 10757 10884 9167 +3 11177 11303 11302 +3 11302 11303 10757 +3 11177 11176 11049 +3 11176 11177 11302 +3 11050 11049 10923 +3 11050 11177 11049 +3 10924 10923 10798 +3 10924 11050 10923 +3 8942 9049 8941 +3 10799 10924 10798 +3 9157 9156 9048 +3 9049 9157 9048 +3 9266 9265 9156 +3 9157 9266 9156 +3 9956 9955 9839 +3 9840 9956 9839 +3 10073 10072 9955 +3 9956 10073 9955 +3 13720 13721 13818 +3 10073 10191 10190 +3 7566 7567 8987 +3 21481 21756 15468 +3 9946 10063 10062 +3 8470 10493 10973 +3 9711 9712 9826 +3 9945 9946 10062 +3 9364 9363 9251 +3 1135 7440 8452 +3 10570 10571 8084 +3 9252 9364 9251 +3 10412 10413 10532 +3 7155 7262 7261 +3 7055 7159 7158 +3 10533 10655 10654 +3 10196 10315 10195 +3 7371 7483 7370 +3 33606 33605 33486 +3 35898 35743 35527 +3 28137 11512 17574 +3 10896 10771 4371 +3 9596 9597 9712 +3 3711 3306 8986 +3 7260 7371 7259 +3 7483 7482 7370 +3 7608 7609 7723 +3 7839 7955 7954 +3 9483 9599 9598 +3 9482 9483 9598 +3 10238 10358 7196 +3 14104 14200 14103 +3 12769 12861 12860 +3 12768 12769 12860 +3 14189 9303 14258 +3 12539 12544 7456 +3 28018 26494 26493 +3 11656 11736 11655 +3 3721 9908 2224 +3 10861 10944 7920 +3 30475 30476 5741 +3 33451 4797 3927 +3 8667 8672 10025 +3 9908 8667 10025 +3 9391 11027 8672 +3 8667 9391 8672 +3 9219 9330 11027 +3 9391 9219 11027 +3 9219 7305 9557 +3 9330 9219 9557 +3 7305 11198 8743 +3 9557 7305 8743 +3 11198 8261 8259 +3 8743 11198 8259 +3 15956 7347 15159 +3 8259 8261 7348 +3 1993 9759 7462 +3 11334 9639 10744 +3 11910 11909 11823 +3 31640 31552 31641 +3 12662 12465 13213 +3 24850 25177 25178 +3 8898 10367 9229 +3 4496 11014 4630 +3 8758 10846 10095 +3 816 4265 7812 +3 8585 8586 1948 +3 21501 33930 35730 +3 28721 27754 6862 +3 28678 28810 29290 +3 35915 27896 29221 +3 17669 30734 21381 +3 7497 7611 7496 +3 30204 27407 21753 +3 9307 10130 8336 +3 8640 8639 8532 +3 8176 8284 8175 +3 8391 8390 8283 +3 10793 10918 10792 +3 30204 28476 27407 +3 9149 9258 9257 +3 9760 7564 9671 +3 428 318 319 +3 12936 9647 12031 +3 7149 7256 7148 +3 35801 35762 35693 +3 787 9332 3466 +3 7045 7149 7148 +3 9178 9177 9070 +3 6489 8792 6488 +3 26617 31554 26618 +3 10117 8441 9794 +3 7694 10859 7579 +3 10321 10202 10322 +3 9802 7312 8243 +3 11364 35436 35943 +3 4782 4648 3991 +3 13627 13725 13626 +3 7981 7982 8096 +3 8667 9908 3721 +3 7866 7982 7865 +3 8097 8208 8207 +3 9365 9366 9480 +3 7636 7751 7635 +3 9481 9597 9596 +3 8612 8719 8611 +3 8826 8825 8718 +3 33231 7521 7520 +3 1290 4380 6893 +3 4768 11271 4902 +3 7751 7750 7635 +3 10553 10675 10674 +3 11724 11193 9233 +3 10553 10552 10432 +3 10552 10553 10674 +3 10433 10432 10312 +3 10433 10553 10432 +3 10076 10194 10075 +3 10313 10433 10312 +3 10313 10312 10193 +3 10194 10313 10193 +3 9265 9266 9377 +3 9266 9378 9377 +3 7907 9781 8566 +3 8673 7801 7424 +3 8077 8188 8076 +3 8296 8295 8187 +3 7962 8077 7961 +3 8188 8187 8076 +3 7962 7961 7845 +3 7846 7962 7845 +3 10184 10303 10183 +3 8077 8076 7961 +3 10184 10183 10065 +3 10066 10184 10065 +3 8181 8182 8289 +3 10303 10302 10183 +3 7536 10827 11192 +3 8182 8290 8289 +3 15210 12466 15083 +3 7883 7556 8037 +3 12588 12678 12587 +3 11200 814 4380 +3 12296 13028 12382 +3 11660 11659 11584 +3 9725 9724 9608 +3 9609 9725 9608 +3 9843 9959 9842 +3 9493 9609 9492 +3 9728 9843 9727 +3 10076 10075 9958 +3 13691 35464 35682 +3 9959 9958 9842 +3 9651 10857 10732 +3 10401 10521 10400 +3 3318 5037 4902 +3 7669 7329 11388 +3 8813 8814 8920 +3 31550 31476 26517 +3 10395 10396 10515 +3 11034 11161 11160 +3 777 659 778 +3 10396 10516 10515 +3 10675 10799 10798 +3 8158 10220 10451 +3 9496 9612 9495 +3 10674 10675 10798 +3 9381 9496 9380 +3 9728 9727 9611 +3 9381 9380 9268 +3 9612 9611 9495 +3 9269 9381 9268 +3 9496 9495 9380 +3 10310 10309 10190 +3 10072 10073 10190 +3 13290 13960 21505 +3 10672 10796 10671 +3 10849 8470 10973 +3 12861 12954 12953 +3 8825 8824 8717 +3 9206 10614 10493 +3 10853 12814 10362 +3 8718 8825 8717 +3 9143 9252 9251 +3 8610 8609 8502 +3 7154 7155 7261 +3 9142 9143 9251 +3 10292 10293 10412 +3 8920 8919 8812 +3 7054 7055 7158 +3 10413 10533 10532 +3 7482 7596 7595 +3 7266 7265 7158 +3 7354 7143 10704 +3 11001 8036 9767 +3 11023 11150 11022 +3 12135 35697 11719 +3 7143 9767 10704 +3 8821 8928 8927 +3 7838 7839 7954 +3 8069 8070 8180 +3 9256 9255 9146 +3 9147 9256 9146 +3 8117 10358 14828 +3 12947 13041 13040 +3 3060 7324 8115 +3 30425 19344 18375 +3 10921 11047 10920 +3 11174 11173 11046 +3 11299 11300 11264 +3 11047 11174 11046 +3 8307 9548 10816 +3 9786 9548 8307 +3 11381 35551 1022 +3 11023 11022 10896 +3 14017 14016 13918 +3 8128 179 68 +3 8005 9391 8667 +3 9908 10025 2224 +3 8005 9110 9219 +3 9391 8005 9219 +3 9110 8338 7305 +3 9219 9110 7305 +3 8338 10992 11198 +3 7305 8338 11198 +3 10992 7343 8261 +3 11198 10992 8261 +3 11377 11250 16514 +3 8261 7343 7347 +3 3200 2633 1753 +3 7923 13986 8977 +3 12070 12152 12151 +3 12069 12070 12151 +3 12765 12766 12857 +3 13209 12659 12292 +3 5192 16034 1845 +3 10514 4094 10513 +3 7607 7606 7492 +3 5309 5443 5308 +3 26578 26226 26083 +3 8586 8693 1948 +3 12417 12416 12330 +3 9125 9126 9234 +3 8575 9216 1253 +3 3296 3295 3156 +3 10098 10748 7588 +3 4640 4641 4774 +3 10400 10399 10279 +3 518 7341 519 +3 10889 11015 10888 +3 10291 10292 10411 +3 483 597 7656 +3 10307 10308 10427 +3 10178 10297 10177 +3 8934 9041 8933 +3 31044 31043 30982 +3 8456 8327 8345 +3 10150 10940 8327 +3 8346 8456 8345 +3 10130 1506 799 +3 9196 10460 9088 +3 10021 9760 6893 +3 8725 8724 8617 +3 15378 15509 15508 +3 16796 14474 14456 +3 10117 9794 10713 +3 10334 10354 9459 +3 7636 7635 7521 +3 9663 10334 9459 +3 9518 12293 11076 +3 15250 15378 15377 +3 15245 15373 14158 +3 17012 5348 5482 +3 15249 15250 15377 +3 10565 5178 5312 +3 17176 17012 5482 +3 5832 5964 9864 +3 67 670 669 +3 7866 7865 7750 +3 10940 9459 8249 +3 12295 15763 15225 +3 28434 28556 28433 +3 6881 6880 34463 +3 8105 8104 7989 +3 23531 20821 27060 +3 7990 8105 7989 +3 11082 9663 10150 +3 29654 29655 29787 +3 9018 9019 9126 +3 7669 10221 8254 +3 26797 19039 26930 +3 10874 9794 9523 +3 8618 8725 8617 +3 10081 10080 9963 +3 9959 10076 9958 +3 10194 10193 10075 +3 7049 7153 7152 +3 9493 9492 9377 +3 5173 5039 9225 +3 8566 8673 7424 +3 35825 35937 35436 +3 10303 10423 10422 +3 9244 9243 9134 +3 10302 10303 10422 +3 8813 8920 8812 +3 10543 10542 10422 +3 6951 7050 7049 +3 10423 10543 10422 +3 9817 9933 9816 +3 1056 2929 10387 +3 12121 35904 11875 +3 8397 8396 8289 +3 6894 9910 10145 +3 10827 7883 11192 +3 129 2787 6894 +3 10491 7590 7589 +3 8434 10943 8762 +3 9910 10491 10145 +3 9725 9840 9724 +3 10816 8434 8762 +3 9612 9728 9611 +3 9840 9839 9724 +3 21657 29550 21656 +3 9843 9842 9727 +3 10081 10199 10080 +3 35329 33666 35199 +3 26618 31553 26516 +3 1754 10240 5061 +3 10760 8784 10594 +3 27061 28376 28375 +3 7790 9196 8240 +3 28126 27167 30204 +3 30097 30098 19797 +3 10706 7624 7620 +3 9926 10043 10042 +3 9196 9088 8240 +3 9046 9154 9153 +3 7953 8068 7952 +3 7060 4913 11282 +3 9695 9810 9809 +3 8481 1714 8588 +3 10451 5829 7819 +3 26852 26901 29134 +3 7631 7630 7516 +3 630 7450 7451 +3 7746 7745 7630 +3 8838 8837 8730 +3 8945 8944 8837 +3 8731 8730 8623 +3 8731 8838 8730 +3 10921 10920 10795 +3 8624 8731 8623 +3 10598 10607 7086 +3 10796 10921 10795 +3 8470 9206 10493 +3 7695 10101 9984 +3 8718 8717 8610 +3 10555 10677 10554 +3 8503 8610 8502 +3 8611 8718 8610 +3 9143 9142 9034 +3 8717 8716 8609 +3 7485 7484 7372 +3 9035 9143 9034 +3 10173 10174 10292 +3 432 545 8222 +3 7159 7266 7158 +3 10293 10413 10412 +3 9592 9708 9591 +3 9823 9822 9707 +3 7629 7516 7630 +3 6951 7049 6950 +3 8606 8607 8713 +3 8714 8821 8820 +3 8289 8288 8180 +3 9038 9037 8930 +3 8290 8397 8289 +3 8504 8503 8396 +3 12946 12947 13040 +3 12953 13047 13046 +3 13163 13162 13068 +3 25428 24204 22199 +3 11174 11300 11299 +3 11173 11174 11299 +3 8624 8623 8516 +3 8517 8624 8516 +3 8410 8409 8302 +3 8303 8410 8302 +3 12046 11965 13775 +3 19929 17720 17999 +3 12394 6139 6008 +3 12221 10373 9882 +3 11335 10589 8005 +3 10025 11267 2224 +3 10589 9002 9110 +3 8005 10589 9110 +3 9002 8256 8338 +3 9110 9002 8338 +3 8256 9979 10992 +3 8338 8256 10992 +3 9979 8268 7343 +3 10992 9979 7343 +3 14528 16514 11250 +3 7343 8268 11377 +3 12949 12950 13043 +3 11523 11590 11522 +3 13138 13139 15527 +3 13043 13044 13137 +3 12950 13044 13043 +3 443 2907 13889 +3 9028 9136 9027 +3 4093 4094 4227 +3 10172 10173 10291 +3 8819 8818 8711 +3 35619 35896 28346 +3 409 410 523 +3 10435 10555 10434 +3 10587 11224 11268 +3 6793 7577 7474 +3 26624 35818 26735 +3 11297 11298 11208 +3 7725 7726 7840 +3 11717 26231 13123 +3 9652 7559 11237 +3 10764 10889 10888 +3 10763 10764 10888 +3 35613 35553 35490 +3 7664 7665 9099 +3 8981 10526 8958 +3 7554 7794 10735 +3 955 954 8006 +3 9245 9357 9356 +3 9088 7326 9780 +3 8240 9088 9780 +3 8024 8443 10102 +3 10249 9321 10130 +3 10677 10801 10800 +3 1445 1444 17172 +3 3989 5554 4926 +3 8216 8215 8104 +3 8105 8216 8104 +3 256 7313 257 +3 10519 10641 10518 +3 8324 8323 8215 +3 8910 8909 8802 +3 8216 8324 8215 +3 22712 22713 22811 +3 35725 27286 35462 +3 4279 4411 15761 +3 947 14567 828 +3 16069 246 16191 +3 5482 5348 14735 +3 16691 1889 1070 +3 15062 16691 16687 +3 23308 23307 23209 +3 5048 4913 7060 +3 8498 8605 8497 +3 9617 9733 9616 +3 5057 9306 1387 +3 35488 35501 35471 +3 8431 8430 8323 +3 8324 8431 8323 +3 8538 8537 8430 +3 8431 8538 8430 +3 10417 10416 10296 +3 8645 8644 8537 +3 8164 8272 8163 +3 1283 1282 1166 +3 31689 31688 31593 +3 26517 31476 26518 +3 35229 11392 7684 +3 7037 7038 313 +3 10618 8651 10568 +3 9160 9269 9159 +3 8350 7933 9317 +3 7826 7827 7942 +3 7598 7713 7712 +3 432 2125 545 +3 7484 7598 7597 +3 7483 7484 7597 +3 7484 7483 7371 +3 7372 7484 7371 +3 7154 7261 7260 +3 7153 7154 7260 +3 9670 7175 9784 +3 7261 7372 7260 +3 10050 10049 9932 +3 9933 10050 9932 +3 10407 10527 10406 +3 9713 9828 9827 +3 6948 6949 7047 +3 10145 10491 7589 +3 8057 8168 8167 +3 7625 7655 9015 +3 8347 7554 10611 +3 10943 10330 10234 +3 10179 10178 10060 +3 11197 7805 8030 +3 25209 2819 2678 +3 7554 10735 10611 +3 9722 9837 9836 +3 35547 35637 35921 +3 10912 10913 11038 +3 10043 10161 10042 +3 8538 8645 8537 +3 35850 35701 35568 +3 8752 8751 8644 +3 8645 8752 8644 +3 8859 8858 8751 +3 8752 8859 8751 +3 8859 8966 8965 +3 8858 8859 8965 +3 8966 9073 9072 +3 8965 8966 9072 +3 9073 9181 9180 +3 9072 9073 9180 +3 10782 10783 10907 +3 10168 10169 10287 +3 10511 7142 7533 +3 35620 35680 35787 +3 9258 9370 9257 +3 10783 10908 10907 +3 7861 7860 7745 +3 7631 7746 7630 +3 35479 35826 6876 +3 9414 10238 8258 +3 8258 7196 10027 +3 7503 7617 7502 +3 10804 10929 10928 +3 8233 7547 11324 +3 11047 11046 10920 +3 9961 10078 9960 +3 9005 10607 10598 +3 8141 1291 10980 +3 8939 8938 8831 +3 8992 9005 10598 +3 8397 8504 8396 +3 6637 1950 10760 +3 8610 8717 8609 +3 8611 8610 8503 +3 8820 8821 8927 +3 8824 8823 8716 +3 29104 29103 28968 +3 8928 9035 9034 +3 8711 8710 8603 +3 11242 10015 73 +3 8818 8817 8710 +3 8604 8711 8603 +3 2841 4636 2440 +3 1384 6262 3057 +3 8178 8286 8177 +3 8286 8393 8392 +3 8931 9038 8930 +3 9145 9146 9254 +3 7610 7725 7724 +3 7609 7610 7724 +3 12952 12953 13046 +3 7733 7618 1039 +3 7590 9005 8992 +3 7589 7590 8992 +3 11300 9786 11264 +3 11264 9786 8307 +3 8517 8516 8409 +3 8410 8517 8409 +3 35467 35527 35828 +3 11906 11990 11989 +3 11335 3721 3591 +3 11585 11584 11517 +3 35581 35785 35840 +3 9389 9388 9276 +3 22344 14628 21569 +3 16044 10734 7583 +3 15878 11564 35722 +3 11564 22534 35722 +3 35791 15878 35722 +3 9002 8895 8256 +3 8895 8137 8256 +3 8256 8137 9979 +3 14612 9648 8137 +3 9979 9648 8268 +3 10817 10498 9675 +3 14823 9648 15969 +3 12069 12151 12150 +3 14202 14201 14105 +3 12675 12676 12764 +3 12857 12950 12949 +3 12659 12662 13213 +3 12765 12857 12856 +3 9704 9819 9818 +3 8605 8712 8604 +3 12239 12238 12155 +3 9027 9026 8919 +3 9822 9938 9937 +3 14114 14113 14015 +3 7603 7604 7718 +3 10677 10676 10554 +3 8170 8171 8278 +3 8706 8813 8812 +3 9490 9606 9489 +3 11325 10686 8451 +3 8009 8008 13483 +3 7559 7197 9080 +3 11015 11014 10888 +3 11237 7559 9080 +3 7360 7474 7586 +3 10397 10398 10517 +3 10381 12925 11619 +3 10566 7665 7664 +3 11144 11143 11016 +3 2126 1387 9306 +3 10713 8147 7326 +3 9088 10713 7326 +3 10249 10130 9307 +3 8443 10249 9307 +3 35731 11894 12038 +3 31641 31552 31553 +3 18608 23324 18962 +3 6989 11256 9680 +3 7758 35880 35609 +3 9180 9181 9289 +3 13199 13294 5418 +3 12672 12761 12760 +3 10044 10162 10043 +3 8511 8618 8510 +3 13995 13996 10467 +3 8574 3989 4123 +3 1845 2711 5192 +3 181 19528 180 +3 21111 21199 21110 +3 15764 15761 14557 +3 28983 21637 21729 +3 14735 16069 16191 +3 7333 7222 7334 +3 15061 15062 16687 +3 8302 8194 1625 +3 15110 15111 15236 +3 1715 8484 8590 +3 13775 2493 12128 +3 13295 2620 2764 +3 9019 9127 9126 +3 23721 24850 25178 +3 28676 28624 27296 +3 340 14189 14258 +3 35775 35790 35564 +3 2209 2517 6519 +3 13826 13825 13727 +3 33487 33606 33486 +3 11082 10808 9663 +3 9257 9369 9256 +3 11208 10469 10951 +3 7861 7977 7976 +3 34281 34419 34280 +3 7159 7160 7266 +3 35768 35420 35452 +3 8918 9025 9024 +3 7048 7152 7151 +3 35722 14562 35801 +3 7703 10885 8032 +3 8821 8822 8928 +3 8607 8608 8714 +3 8715 8822 8821 +3 8500 8501 8607 +3 8608 8715 8714 +3 8393 8394 8500 +3 21649 34887 21650 +3 8286 8287 8393 +3 9242 9354 9353 +3 20010 20327 15734 +3 11024 11151 11150 +3 9700 9701 9815 +3 9213 7679 11218 +3 11023 11024 11150 +3 8550 6739 8460 +3 10897 10898 11023 +3 9620 9619 9503 +3 11272 3191 11271 +3 7977 8092 8091 +3 9504 9620 9503 +3 9954 9953 9837 +3 26695 26807 26806 +3 7790 8240 10334 +3 9370 9369 9257 +3 4097 17029 7465 +3 8007 11218 9523 +3 9235 9236 9347 +3 9096 1642 9317 +3 11147 11273 11146 +3 9348 9463 9462 +3 9351 9466 9465 +3 22519 22618 22518 +3 9144 9253 9143 +3 10065 10064 9947 +3 10645 10769 10768 +3 9573 11347 8736 +3 10829 10870 8736 +3 27180 11667 27063 +3 13041 13042 13135 +3 7732 7731 7616 +3 10321 10320 10201 +3 10202 10321 10201 +3 10078 10077 9960 +3 9578 9579 9694 +3 11327 10830 10717 +3 10980 11327 10717 +3 10607 7695 7086 +3 2787 9910 6894 +3 35609 35447 35822 +3 9082 10948 11073 +3 8504 8611 8503 +3 7839 7840 7955 +3 8717 8824 8716 +3 8931 8930 8823 +3 8927 8928 9034 +3 8713 8714 8820 +3 6613 6487 8792 +3 35621 35610 35444 +3 9753 9338 7764 +3 8120 8978 8229 +3 13413 13416 9641 +3 13812 13910 13909 +3 8067 8178 8066 +3 8286 8285 8177 +3 9255 9367 9366 +3 9597 9598 9713 +3 35862 35805 35924 +3 3015 9575 9691 +3 9980 11784 8556 +3 9324 10129 8245 +3 7818 8449 10335 +3 10455 6962 6963 +3 9548 8434 10816 +3 10717 10830 7625 +3 9039 9040 9147 +3 10803 10804 10928 +3 7378 7377 7266 +3 7604 7719 7718 +3 35460 35508 35844 +3 11078 7420 10952 +3 11376 7062 8326 +3 9485 9601 9600 +3 5178 11187 5044 +3 10858 73 10015 +3 13913 14011 14010 +3 13912 13913 14010 +3 14206 14304 14205 +3 340 4258 14189 +3 4258 340 14303 +3 14304 4258 14303 +3 12032 10376 4786 +3 15338 22935 14244 +3 23418 23223 16014 +3 6520 2124 1051 +3 12235 12320 12234 +3 14106 14202 14105 +3 12857 12858 12950 +3 11992 11991 11907 +3 2491 7776 13028 +3 11822 11908 11821 +3 35187 6906 35186 +3 8596 8597 8703 +3 10514 10515 10636 +3 8168 8169 8276 +3 11111 11369 11370 +3 24358 24278 24524 +3 9651 13387 7892 +3 10983 11111 11370 +3 11355 9757 10580 +3 8279 8386 8385 +3 9722 9721 9605 +3 11298 10032 11208 +3 8395 8502 8394 +3 9946 9947 10063 +3 7197 7798 8758 +3 7798 7811 8758 +3 10277 10278 10397 +3 10398 10518 10517 +3 9837 9953 9836 +3 10070 10069 9952 +3 10765 10766 10890 +3 11017 11144 11016 +3 10713 9794 10874 +3 8147 10713 10874 +3 13456 13455 13360 +3 28722 28856 6409 +3 13920 13919 13821 +3 14185 3735 8344 +3 35939 35401 35888 +3 805 806 924 +3 11359 9421 10339 +3 7059 11489 11555 +3 8543 11359 10725 +3 27016 27017 27133 +3 4193 25597 4192 +3 9716 9715 9599 +3 10936 8543 9339 +3 11314 35539 11692 +3 9421 9306 10339 +3 31600 31695 31599 +3 17466 17388 17467 +3 6913 7012 7011 +3 7011 7115 7114 +3 7012 7116 7115 +3 7011 7012 7115 +3 7116 7223 7222 +3 7115 7116 7222 +3 7333 396 395 +3 7223 7334 7222 +3 7516 7629 7514 +3 11760 11759 11678 +3 11258 10821 10697 +3 9145 9144 9036 +3 10189 10188 10070 +3 10956 8544 8648 +3 8334 10340 4932 +3 10088 10206 10087 +3 11359 10339 10725 +3 4932 9865 10497 +3 9865 7886 10497 +3 7886 10936 10497 +3 10088 10087 9970 +3 9971 10088 9970 +3 20204 20205 20290 +3 7860 7861 7976 +3 10159 10158 10040 +3 10251 7668 10988 +3 10168 10167 10049 +3 10050 10168 10049 +3 9025 9133 9132 +3 9133 9242 9241 +3 10885 7703 8991 +3 10885 8142 8032 +3 9511 10021 6893 +3 9900 10885 8991 +3 7711 7826 7825 +3 7566 7564 9760 +3 9702 9817 9816 +3 7710 7711 7825 +3 8234 11390 9625 +3 9701 9702 9816 +3 1712 8586 1711 +3 7668 7218 10988 +3 8130 8995 8107 +3 7382 7381 7270 +3 9620 9736 9619 +3 27550 20865 14088 +3 9971 9970 9854 +3 9736 9735 9619 +3 7467 13973 13583 +3 35655 35654 35773 +3 10936 9339 10497 +3 13908 14006 14005 +3 7438 10340 7553 +3 8543 10725 9339 +3 9666 7438 9550 +3 10340 9865 4932 +3 11051 11052 11178 +3 10340 8334 7553 +3 10821 10336 10456 +3 9733 9848 9732 +3 8051 8162 8161 +3 11052 11179 11178 +3 8272 8379 8271 +3 6377 6378 6504 +3 378 491 7549 +3 8379 8486 8485 +3 9682 10492 3720 +3 9307 8336 7253 +3 11181 11182 11307 +3 10750 10451 7397 +3 10014 10443 8126 +3 6939 34720 6940 +3 13998 14096 10323 +3 10441 10440 10320 +3 10642 10766 10765 +3 35889 35354 35678 +3 10830 7655 7625 +3 10421 10420 10300 +3 10335 10455 6963 +3 9059 10625 10624 +3 11281 9980 8556 +3 6962 2787 129 +3 7725 7840 7839 +3 11192 7883 8037 +3 8824 8931 8823 +3 7724 7725 7839 +3 9125 9234 2471 +3 9146 9145 9037 +3 8234 11095 2356 +3 33608 33735 33607 +3 519 7341 7342 +3 4909 11278 4775 +3 35397 35438 35817 +3 15049 16669 16664 +3 13987 13986 7923 +3 13265 13361 13264 +3 9714 9829 9828 +3 9713 9714 9828 +3 10683 14190 14288 +3 8484 8485 8591 +3 8459 10977 11117 +3 11604 11679 11603 +3 7719 7834 7833 +3 7377 7378 7489 +3 7655 9059 9015 +3 8232 10348 10338 +3 10541 10663 10540 +3 9807 9808 9923 +3 19735 18005 5198 +3 10441 10561 10440 +3 9383 9382 9270 +3 9271 9383 9270 +3 34754 21736 34627 +3 6248 9563 9448 +3 33390 33503 33389 +3 73 10858 574 +3 429 430 544 +3 13400 13314 11696 +3 12080 12079 11998 +3 11999 12080 11998 +3 14093 9683 9303 +3 4258 14093 14189 +3 13096 13669 14087 +3 14189 14093 9303 +3 1753 2367 13096 +3 12946 13040 12945 +3 11903 11904 11987 +3 12068 12069 12150 +3 14106 14105 14007 +3 14300 14299 14201 +3 11988 12069 12068 +3 12675 12764 12763 +3 8130 8107 11186 +3 10515 10637 10636 +3 35538 10603 5425 +3 10095 8130 11186 +3 9084 7215 11268 +3 8008 11111 10983 +3 10199 10318 10198 +3 10594 10706 7620 +3 4650 11345 18630 +3 9900 8991 11363 +3 21465 21466 11513 +3 34931 34930 34801 +3 8502 8501 8394 +3 9947 10064 10063 +3 8782 9103 10846 +3 7811 8782 10846 +3 10278 10277 10158 +3 10159 10278 10158 +3 10788 10913 10912 +3 10787 10788 10912 +3 10891 11017 11016 +3 10890 10891 11016 +3 7357 11323 7350 +3 16014 23223 23412 +3 12220 13020 7810 +3 13822 13920 13821 +3 14018 14017 13919 +3 12581 12582 12671 +3 22717 22716 22617 +3 28612 28624 30365 +3 35555 35487 35399 +3 30624 14651 14560 +3 9691 9806 3156 +3 8032 8970 9682 +3 7703 8032 9682 +3 10460 10117 10713 +3 21307 35933 35766 +3 13607 13409 4796 +3 11018 11145 11144 +3 8240 9780 10354 +3 34139 34277 34138 +3 34139 34138 34002 +3 17269 26406 11452 +3 17317 21657 27406 +3 7013 7117 7116 +3 7011 6912 6913 +3 7117 7224 7223 +3 7116 7117 7223 +3 35508 35750 35789 +3 29821 35796 27956 +3 11519 11586 11518 +3 2336 9016 2471 +3 9323 9211 8970 +3 8032 9323 8970 +3 7746 7861 7745 +3 11115 7669 11388 +3 5309 9083 10445 +3 27160 27279 27278 +3 10334 8240 10354 +3 10537 10536 10416 +3 1655 15362 7569 +3 12982 25650 13076 +3 10206 10205 10087 +3 9678 7795 9211 +3 9389 9504 9388 +3 9504 9503 9388 +3 7397 7819 7474 +3 9136 9135 9027 +3 9933 9932 9816 +3 9172 10810 11219 +3 3976 120 5042 +3 9132 9133 9241 +3 10513 3959 3960 +3 10412 10532 10531 +3 8704 8705 8811 +3 10531 10532 10653 +3 10955 7658 7657 +3 8812 8919 8918 +3 9650 9651 10732 +3 10886 10955 7657 +3 8995 11115 8889 +3 10787 10912 10911 +3 1827 1948 1947 +3 22835 35901 35878 +3 8421 8422 1992 +3 489 376 490 +3 8315 8422 8421 +3 10580 9757 7469 +3 11045 11172 11044 +3 8314 8315 8421 +3 35398 9633 35677 +3 10518 10640 10639 +3 8325 8324 8216 +3 8216 8105 8217 +3 8432 8431 8324 +3 8325 8432 8324 +3 34887 21648 34758 +3 8539 8538 8431 +3 8234 9625 11096 +3 17467 22236 6912 +3 8626 1982 8627 +3 11191 11317 9573 +3 9942 9943 10059 +3 11296 11297 8144 +3 9323 9678 9211 +3 7481 7482 7595 +3 8432 8539 8431 +3 8980 9308 7795 +3 8646 8645 8538 +3 8539 8646 8538 +3 8753 8752 8645 +3 8646 8753 8645 +3 8860 8859 8752 +3 29685 35931 35829 +3 7750 7865 7749 +3 8096 8095 7980 +3 7981 7980 7864 +3 7865 7981 7864 +3 12243 12328 12242 +3 7201 7313 151 +3 8654 8007 9523 +3 14007 14105 14104 +3 9015 9059 10624 +3 10625 8232 10353 +3 6963 6962 129 +3 10304 10305 10424 +3 7556 10129 9324 +3 8037 7556 9324 +3 7840 7956 7955 +3 9712 9827 9826 +3 9038 9146 9037 +3 9146 9255 9254 +3 11163 11289 11288 +3 11036 11163 11035 +3 11289 92 695 +3 11162 11163 11288 +3 92 11064 10702 +3 11288 11289 695 +3 10726 9795 10702 +3 695 92 10702 +3 9829 9945 9944 +3 9828 9829 9944 +3 10522 10644 10521 +3 10644 10643 10521 +3 12062 12144 8106 +3 9678 8980 7795 +3 9556 7415 8435 +3 10271 11194 11067 +3 10353 8232 10338 +3 9764 7882 9765 +3 35721 35887 35654 +3 10452 11184 10349 +3 10320 10321 10441 +3 9299 8367 8254 +3 7635 7750 7634 +3 7865 7864 7749 +3 8860 8967 8966 +3 8859 8860 8966 +3 8967 9074 9073 +3 1400 1399 1283 +3 15273 24999 23783 +3 12411 12410 12324 +3 11825 11824 11740 +3 12325 12411 12324 +3 11586 11661 11585 +3 2498 2497 2087 +3 13096 2367 13669 +3 12855 12856 12948 +3 10092 13519 13496 +3 14008 14106 14007 +3 14300 14301 130 +3 11987 11988 12068 +3 12674 12675 12763 +3 13230 13135 13136 +3 14008 14007 13909 +3 9821 9822 9937 +3 8995 8889 8107 +3 9353 9354 9468 +3 9818 9934 9817 +3 35460 35772 35508 +3 9045 9046 9153 +3 35816 35575 21488 +3 10280 10400 10279 +3 2784 2649 2785 +3 8426 8533 8425 +3 9831 9830 9715 +3 9600 9716 9599 +3 2360 9221 459 +3 8715 8716 8822 +3 10251 10988 9103 +3 8481 8588 8587 +3 10278 10398 10397 +3 8782 10251 9103 +3 9117 8902 10382 +3 10382 8902 10385 +3 10382 8899 9117 +3 7468 10845 9117 +3 8899 11323 7357 +3 9117 8899 7357 +3 7417 8990 559 +3 7417 7350 11323 +3 20722 20723 18273 +3 12819 11872 12727 +3 9398 10864 2742 +3 13148 3176 11786 +3 7635 7634 7520 +3 7520 7519 33336 +3 8966 8967 9073 +3 9074 9182 9181 +3 8851 2378 2247 +3 8765 10612 8658 +3 26231 26090 13123 +3 32964 33070 32963 +3 9073 9074 9181 +3 4632 4631 11014 +3 35807 35825 35576 +3 19807 22138 22137 +3 8450 9769 6512 +3 7013 7116 7012 +3 26406 19140 11452 +3 7014 7118 7117 +3 7013 7014 7117 +3 7118 7225 7224 +3 7117 7118 7224 +3 28991 27956 35796 +3 35747 35460 35844 +3 35714 35862 35412 +3 4360 4227 4228 +3 10581 10722 9308 +3 11872 13148 11786 +3 6082 18495 16190 +3 7658 9067 9066 +3 30928 30927 30873 +3 28745 35504 29008 +3 7005 14827 10237 +3 29659 29658 29520 +3 11881 11965 5418 +3 1386 15927 15788 +3 8670 35823 35833 +3 8754 8647 12576 +3 28371 30096 30095 +3 28371 28374 30096 +3 27060 27061 28375 +3 13896 13612 3176 +3 35362 35782 35697 +3 10818 10332 10331 +3 10694 10818 10331 +3 7167 9425 10694 +3 7712 7711 7596 +3 9168 9167 7167 +3 7483 7597 7596 +3 8912 9019 9018 +3 9425 10818 10694 +3 3318 4902 11271 +3 9127 9236 9235 +3 8980 10581 9308 +3 21657 21656 27406 +3 10729 11210 10722 +3 13774 20821 23531 +3 14307 8048 10467 +3 8179 8180 8287 +3 8048 13995 10467 +3 5059 1027 5193 +3 35464 10004 35640 +3 2106 9976 9974 +3 2517 1855 6519 +3 10581 10729 10722 +3 8326 7062 10829 +3 7358 7699 11210 +3 14020 14021 14118 +3 8206 8207 8314 +3 5039 5173 5038 +3 11785 9120 10957 +3 7976 7977 8091 +3 8091 8092 1634 +3 11162 11161 11034 +3 1517 1634 1633 +3 8092 8203 1634 +3 11035 11162 11034 +3 8161 1365 1250 +3 10729 7358 11210 +3 11722 12113 12136 +3 7385 7384 7273 +3 8207 8315 8314 +3 7595 7596 7710 +3 29495 27024 29633 +3 7981 8096 7980 +3 3179 12111 10709 +3 7341 518 7340 +3 10734 16044 9417 +3 6548 6673 6672 +3 6409 35535 35846 +3 8336 799 9421 +3 9017 9016 8909 +3 212 7933 8350 +3 9299 10743 8367 +3 8939 9046 8938 +3 11049 11176 11048 +3 11033 11034 11160 +3 10624 10625 10353 +3 11176 11302 11301 +3 10186 10305 10185 +3 7358 7649 7574 +3 10129 8459 8245 +3 10305 10425 10424 +3 7581 10967 7696 +3 7844 7843 7728 +3 9397 7581 8773 +3 10967 9564 7696 +3 9408 9301 8773 +3 7581 7696 8773 +3 9420 9535 9408 +3 9301 9397 8773 +3 8439 7575 8119 +3 9535 9301 9408 +3 7699 7358 7574 +3 11365 9535 9420 +3 13338 13339 13757 +3 10498 9789 9675 +3 11399 12557 12899 +3 10014 11309 10457 +3 28219 27754 28721 +3 7170 7169 7065 +3 11295 7415 9556 +3 11294 11295 9556 +3 8127 10011 14286 +3 11497 13209 12292 +3 9066 9067 10634 +3 10635 11184 10452 +3 14308 9801 8048 +3 12956 13050 13049 +3 8053 8164 8052 +3 8158 10451 10750 +3 7253 11359 8543 +3 7679 7253 8543 +3 8149 8976 5961 +3 4784 20570 17103 +3 11658 11657 11582 +3 12590 12589 12499 +3 13719 13817 13816 +3 13817 13915 13816 +3 13718 13719 13816 +3 13915 13914 13816 +3 13915 14013 14012 +3 13914 13915 14012 +3 14111 14110 14012 +3 14013 14111 14012 +3 14207 14206 14110 +3 14111 14207 14110 +3 14207 14305 14304 +3 14206 14207 14304 +3 1171 4104 10985 +3 14112 14113 14208 +3 8887 11376 11347 +3 314 313 7038 +3 8608 8609 8715 +3 10573 8887 7769 +3 9716 9831 9715 +3 9831 9947 9946 +3 9490 9489 9374 +3 11317 8887 11347 +3 9884 8650 7893 +3 9199 9884 7893 +3 8640 8747 8639 +3 11371 11065 11325 +3 5190 5324 2353 +3 8219 11065 11371 +3 10382 10385 8342 +3 8342 14065 7776 +3 8436 10382 8342 +3 10949 8436 8342 +3 8436 9171 8899 +3 10382 8436 8899 +3 9171 11310 11323 +3 8899 9171 11323 +3 8990 7417 11323 +3 11310 8990 11323 +3 2106 1136 9976 +3 11867 155 9532 +3 22338 23229 22436 +3 8384 8491 8490 +3 7750 7749 7634 +3 11224 10587 8036 +3 8336 9421 11359 +3 7259 7258 7151 +3 7253 8336 11359 +3 10970 669 7693 +3 6800 6263 10475 +3 10004 8332 13610 +3 11473 11472 11422 +3 7704 9741 7878 +3 14017 14115 14016 +3 16806 5000 15116 +3 35840 35593 35581 +3 28076 28219 28721 +3 6916 7015 7014 +3 6915 6916 7014 +3 7015 7119 7118 +3 7014 7015 7118 +3 7119 7226 7225 +3 7118 7119 7225 +3 7226 7337 7336 +3 7225 7226 7336 +3 19253 19255 5541 +3 18142 5493 5629 +3 314 7039 315 +3 7342 7231 406 +3 10332 11072 10822 +3 10331 10332 10822 +3 6147 9176 15888 +3 8696 8695 8588 +3 7920 7910 8142 +3 30607 6915 7013 +3 1521 5865 321 +3 8014 3191 11272 +3 8312 1868 1752 +3 64 7168 8677 +3 29137 29138 29143 +3 11145 11271 4768 +3 9838 9837 9722 +3 9848 9847 9732 +3 8976 5962 5961 +3 7747 7746 7631 +3 7632 7747 7631 +3 7862 7861 7746 +3 7747 7862 7746 +3 7236 7237 411 +3 7978 7977 7861 +3 9721 9722 9836 +3 14996 14256 3192 +3 10280 10279 10160 +3 9701 9816 9815 +3 20989 21075 27606 +3 9607 9723 9606 +3 9386 9385 9273 +3 6738 6613 8460 +3 7592 7707 897 +3 9165 9274 9164 +3 7582 7697 8148 +3 9617 9616 9500 +3 7582 11336 7697 +3 7351 10135 10956 +3 9851 9967 9850 +3 9809 9810 9925 +3 9851 9850 9735 +3 9736 9851 9735 +3 10973 10848 9775 +3 9967 9966 9850 +3 9269 9268 9159 +3 8071 8072 8182 +3 8945 9052 8944 +3 9160 9159 9051 +3 8838 8945 8837 +3 9052 9160 9051 +3 7770 9867 10843 +3 9052 9051 8944 +3 10202 10201 10083 +3 14162 12571 12818 +3 10084 10083 9966 +3 10084 10202 10083 +3 8096 8207 8206 +3 9967 10084 9966 +3 9810 9926 9925 +3 8095 8096 8206 +3 9501 9617 9500 +3 8584 7586 11088 +3 11317 11347 9573 +3 22124 22220 22123 +3 10860 8373 9447 +3 7564 8981 7563 +3 8910 9017 8909 +3 9562 7928 8564 +3 9139 9138 9030 +3 8404 8403 8296 +3 11049 11048 10922 +3 7803 10474 6670 +3 24068 23240 29947 +3 10923 11049 10922 +3 10186 10185 10067 +3 10753 7365 7574 +3 7729 7844 7728 +3 10068 10186 10067 +3 9372 9487 9486 +3 7844 7960 7959 +3 9487 9603 9602 +3 9371 9372 9486 +3 9719 9718 9602 +3 9486 9487 9602 +3 9834 9833 9718 +3 9603 9719 9602 +3 9950 9949 9833 +3 9719 9834 9718 +3 10067 10066 9949 +3 9834 9950 9833 +3 10185 10184 10066 +3 9950 10067 9949 +3 7649 10753 7574 +3 10067 10185 10066 +3 7415 10271 8435 +3 7169 7276 11633 +3 14118 14119 14214 +3 11169 11295 11294 +3 10634 10635 10452 +3 10105 5041 12837 +3 11020 11147 11146 +3 7657 7658 9066 +3 8600 8707 8599 +3 10516 10517 10638 +3 9826 9827 9942 +3 10103 8584 7528 +3 8981 8958 7563 +3 8395 8394 8287 +3 27141 17317 27754 +3 35453 35457 35517 +3 12413 12502 12412 +3 12502 12592 12501 +3 12327 12413 12326 +3 12592 12591 12501 +3 12242 12327 12241 +3 12502 12501 12412 +3 12242 12241 12158 +3 12413 12412 12326 +3 12159 12242 12158 +3 12327 12326 12241 +3 14305 10564 14304 +3 10564 4258 14304 +3 20926 27865 20846 +3 13584 11060 12720 +3 11292 10573 11291 +3 17446 12371 33704 +3 1070 1889 1445 +3 9375 9490 9374 +3 21812 28817 28950 +3 3716 11242 73 +3 7754 7753 7638 +3 6617 6618 6742 +3 8652 10754 7675 +3 7559 9652 14185 +3 8652 8249 8356 +3 10754 8652 8356 +3 8950 9057 8949 +3 9057 9056 8949 +3 7882 10949 9765 +3 2493 9765 7776 +3 7927 8436 10949 +3 7882 7927 10949 +3 7927 8018 9171 +3 8436 7927 9171 +3 6973 11310 9171 +3 8018 6973 9171 +3 11119 8990 11310 +3 6973 11119 11310 +3 937 7587 7812 +3 34412 34411 34273 +3 9686 5201 6891 +3 8277 8384 8383 +3 10944 8766 10935 +3 29243 29380 29379 +3 23397 21027 23396 +3 7785 10103 8564 +3 8379 8378 8271 +3 33401 33400 33291 +3 12660 12820 3340 +3 10467 10564 14305 +3 13389 13883 13882 +3 28219 27141 27754 +3 14221 665 14220 +3 11500 4792 11800 +3 4648 670 6634 +3 6848 6915 29281 +3 35688 35669 35506 +3 6361 6488 6360 +3 21682 3487 21589 +3 7016 7120 7119 +3 7015 7016 7119 +3 7120 7227 7226 +3 7119 7120 7226 +3 7227 7338 7337 +3 7226 7227 7337 +3 5629 19311 18142 +3 7338 7450 7337 +3 2136 21657 17317 +3 20627 20626 20544 +3 10674 10798 10797 +3 10673 10674 10797 +3 11179 11305 11304 +3 7632 7631 7517 +3 11002 10580 8224 +3 15457 15456 15069 +3 7837 7953 7836 +3 9985 7364 7365 +3 6504 6503 6377 +3 10753 9985 7365 +3 2356 2205 2490 +3 11095 11096 9340 +3 7513 7514 7627 +3 7763 9516 3060 +3 4094 10636 4227 +3 27141 2136 17317 +3 7212 163 7323 +3 10538 10660 10537 +3 9234 9235 9346 +3 10765 10890 10889 +3 9087 8551 7364 +3 10161 10280 10160 +3 9985 9087 7364 +3 11113 10986 8551 +3 9087 11113 8551 +3 9782 9668 10986 +3 6416 6541 6415 +3 11113 9782 10986 +3 10102 9307 7253 +3 8550 8460 8792 +3 974 5825 5690 +3 9386 9501 9385 +3 10808 7790 10334 +3 10103 7528 8564 +3 10521 10643 10642 +3 10460 10713 9088 +3 14200 14298 14199 +3 7675 8344 8652 +3 8072 8183 8182 +3 7381 7493 7492 +3 10430 10550 10549 +3 10298 10418 10297 +3 10191 10310 10190 +3 10430 10429 10309 +3 10310 10430 10309 +3 9815 9816 9931 +3 10429 10430 10549 +3 9026 9134 9133 +3 10672 10671 10549 +3 10550 10672 10549 +3 8078 8077 7962 +3 10796 10795 10671 +3 8441 8774 8007 +3 7847 7963 7846 +3 14109 14205 14204 +3 11175 11176 11301 +3 6376 7540 6377 +3 10532 10654 10653 +3 35566 35925 35815 +3 7607 7722 7721 +3 8378 8379 8485 +3 11045 11044 10918 +3 8870 9864 5830 +3 10517 10518 10639 +3 9970 10087 9969 +3 2505 9058 8951 +3 10205 10204 10086 +3 10087 10205 10086 +3 15070 15461 15331 +3 7944 8059 8058 +3 11176 11175 11048 +3 10923 10922 10797 +3 9782 347 9668 +3 9037 9145 9036 +3 10305 10304 10185 +3 10068 10067 9950 +3 7843 7844 7959 +3 7960 8075 8074 +3 8187 8186 8075 +3 8076 8187 8075 +3 7961 7960 7844 +3 7845 7961 7844 +3 7615 7614 7500 +3 7501 7615 7500 +3 7501 7500 7388 +3 7389 7501 7388 +3 7389 7388 7277 +3 7278 7389 7277 +3 7468 9117 7357 +3 7278 7277 7170 +3 10304 10303 10184 +3 7171 7278 7170 +3 22034 33671 22035 +3 10185 10304 10184 +3 11168 11169 11294 +3 7275 11633 7276 +3 4098 8900 1273 +3 10916 11042 10915 +3 9067 10635 10634 +3 13715 13716 13813 +3 14216 14314 14215 +3 10552 10551 10431 +3 7586 10377 11088 +3 4239 10647 10525 +3 10497 7359 10235 +3 10087 10086 9969 +3 7811 10846 8758 +3 3181 3460 1726 +3 12416 12505 12415 +3 11644 11569 4792 +3 11793 7799 12196 +3 7872 11980 7989 +3 7799 12220 12219 +3 12196 7799 12219 +3 12220 7810 11484 +3 12219 12220 11484 +3 12159 12158 12076 +3 12077 12159 12076 +3 11742 11741 11661 +3 10564 13997 14093 +3 10725 8158 10329 +3 10339 10220 8158 +3 13626 13724 13723 +3 9339 10725 10329 +3 8912 8911 8804 +3 6246 9205 7510 +3 8805 8804 8697 +3 8805 8912 8804 +3 1715 8590 8589 +3 8698 8805 8697 +3 8698 8697 8590 +3 8591 8698 8590 +3 8249 9918 8356 +3 9918 9413 8356 +3 7157 7158 7264 +3 11218 7679 10936 +3 8525 7882 9764 +3 2493 9764 9765 +3 8328 7927 7882 +3 8525 8328 7882 +3 7557 8018 7927 +3 8328 7557 7927 +3 7557 9653 6973 +3 8018 7557 6973 +3 10605 11119 6973 +3 9653 10605 6973 +3 7425 8310 6096 +3 10605 8146 11119 +3 8276 8277 8383 +3 11637 11717 13123 +3 2673 21654 21652 +3 11072 9686 9220 +3 8584 11088 7528 +3 2672 2673 21652 +3 7679 8543 10936 +3 9970 9969 9853 +3 11560 7065 7169 +3 9789 13884 9520 +3 10158 10277 3699 +3 15174 5059 5193 +3 13919 13918 13820 +3 13919 14017 13918 +3 2117 1992 8529 +3 2118 8529 8637 +3 18617 26488 28985 +3 25239 25366 25667 +3 27177 29550 21657 +3 26672 26784 26783 +3 28190 29681 29545 +3 7017 7121 7120 +3 25004 11793 12196 +3 7121 7228 7227 +3 7120 7121 7227 +3 7228 7339 7338 +3 7227 7228 7338 +3 7451 7450 7338 +3 7339 7451 7338 +3 8011 6416 6417 +3 16034 3324 1845 +3 10312 10432 10311 +3 7367 659 544 +3 33444 7517 7516 +3 12158 12157 12075 +3 9854 9853 9738 +3 9739 9622 17169 +3 8695 8802 8801 +3 8540 8539 8432 +3 35572 35857 35706 +3 8647 8646 8539 +3 3223 21938 22032 +3 8647 8754 8646 +3 8539 8540 8647 +3 9139 9248 9138 +3 8533 8640 8532 +3 11711 29634 17262 +3 8747 8746 8639 +3 8968 9075 9074 +3 8967 8968 9074 +3 9075 9183 9182 +3 9074 9075 9182 +3 35561 22834 35417 +3 29126 17255 21294 +3 11965 11881 4922 +3 8111 9082 11073 +3 14005 14006 14103 +3 13624 13722 13623 +3 9480 9479 9364 +3 18929 20570 4784 +3 5825 7530 5824 +3 9512 8883 11189 +3 14119 14120 14215 +3 21652 21654 7293 +3 35559 35888 35748 +3 12673 12674 12762 +3 188 16692 17183 +3 10947 8896 10217 +3 439 12844 1254 +3 8762 10943 10234 +3 10330 10947 10946 +3 8201 8576 10031 +3 10234 10330 10946 +3 9660 10933 7681 +3 35597 35775 35564 +3 8765 8658 9084 +3 15069 15070 15331 +3 9520 2106 2105 +3 10224 9869 10127 +3 9984 10101 10031 +3 8576 8577 10031 +3 10217 8896 8141 +3 7086 7695 9984 +3 10946 10947 10217 +3 1291 11327 10980 +3 11302 10757 8549 +3 8896 1291 8141 +3 8092 8093 8203 +3 9727 9726 9610 +3 8869 9755 9407 +3 2204 9016 2336 +3 14113 14112 14014 +3 10160 10279 10159 +3 14306 14307 10467 +3 22131 22227 22226 +3 22130 22131 22226 +3 31630 31725 31629 +3 10070 10188 10069 +3 9322 8030 9101 +3 21028 21027 15457 +3 4501 5738 809 +3 10798 10923 10797 +3 10432 10552 10431 +3 10839 9295 9296 +3 10558 10680 10557 +3 9951 10068 9950 +3 9951 9950 9834 +3 7959 7960 8074 +3 8186 8185 8074 +3 8076 8075 7960 +3 7961 8076 7960 +3 9158 9157 9049 +3 9050 9158 9049 +3 9494 9493 9378 +3 9267 9266 9157 +3 9841 9840 9725 +3 9379 9494 9378 +3 9957 9956 9840 +3 9726 9841 9725 +3 10074 10073 9956 +3 9841 9957 9840 +3 7829 7830 7945 +3 9957 10074 9956 +3 10304 10424 10423 +3 33173 33172 33067 +3 7170 7277 7169 +3 10303 10304 10423 +3 11042 11169 11168 +3 7388 7387 7276 +3 7596 7711 7710 +3 11041 11042 11168 +3 9495 9611 9494 +3 26790 30623 30625 +3 35585 35526 35711 +3 9614 9613 9497 +3 10307 10306 10187 +3 9040 9148 9147 +3 2105 2106 9974 +3 35518 35809 35539 +3 12076 12158 12075 +3 12496 12495 12406 +3 24348 29432 24519 +3 13684 11646 8902 +3 40 103 13415 +3 14302 8735 14301 +3 11484 7810 13680 +3 7810 13583 13680 +3 11662 11742 11661 +3 11742 11826 11741 +3 9274 9273 9164 +3 13937 13936 13838 +3 35751 35868 35360 +3 7985 8100 7984 +3 28549 29144 28875 +3 8426 8425 8318 +3 1249 1250 1365 +3 6770 8029 4265 +3 659 7479 7478 +3 34354 6538 33692 +3 10390 9980 11281 +3 29516 29517 29654 +3 25402 19936 25259 +3 7822 7938 7821 +3 9432 7911 9413 +3 8484 8591 8590 +3 7896 8224 9286 +3 9918 9432 9413 +3 11090 8525 9879 +3 13775 9879 9764 +3 8041 8328 8525 +3 11090 8041 8525 +3 7572 7557 8328 +3 8041 7572 8328 +3 8047 9653 7557 +3 7572 8047 7557 +3 8555 10605 9653 +3 8047 8555 9653 +3 9988 8146 10605 +3 8555 9988 10605 +3 31553 31552 26516 +3 13884 13226 9520 +3 10822 11072 9220 +3 11149 11150 11275 +3 34555 34554 34417 +3 9611 9610 9494 +3 9854 9970 9853 +3 11461 33340 31651 +3 5832 9864 16218 +3 11182 11308 11307 +3 1625 8194 1509 +3 21198 21199 34244 +3 7899 913 7900 +3 35357 35685 14083 +3 6082 16190 6083 +3 13148 13896 3176 +3 3436 9923 10040 +3 2136 27177 21657 +3 27177 28482 29122 +3 15075 33459 33576 +3 30598 30597 30463 +3 30071 19909 19377 +3 19377 19909 28021 +3 7018 7122 7121 +3 7017 7018 7121 +3 7122 7229 7228 +3 7121 7122 7228 +3 7229 7340 7339 +3 7228 7229 7339 +3 7340 517 7339 +3 517 7451 7339 +3 2609 1385 4518 +3 9205 6246 8906 +3 9380 9379 9267 +3 27297 11747 27179 +3 14830 10454 14829 +3 8810 8811 8917 +3 9383 9498 9382 +3 11054 11055 11181 +3 9020 9128 9127 +3 4256 1384 7324 +3 9505 7767 10626 +3 11272 11271 11145 +3 11146 11272 11145 +3 10893 11019 10892 +3 11019 11146 11145 +3 484 598 483 +3 10768 10893 10767 +3 35583 35566 35652 +3 2107 2236 8733 +3 6946 34597 34598 +3 7493 7607 7492 +3 9308 9196 7790 +3 32617 32616 32507 +3 29550 27177 29122 +3 20307 17702 17607 +3 9220 9686 6891 +3 28482 29292 19038 +3 13684 13685 13414 +3 5201 9636 7995 +3 3073 3072 7967 +3 13042 13136 13135 +3 8435 10271 11067 +3 10338 10348 11221 +3 35410 35457 35453 +3 8449 10455 10335 +3 7770 7111 9867 +3 12296 12382 103 +3 10593 7111 7770 +3 10592 10593 7770 +3 8988 10593 10592 +3 7111 9868 9867 +3 10849 10973 9867 +3 8987 8988 10592 +3 12330 12416 12329 +3 9868 10849 9867 +3 10101 8201 10031 +3 12123 14165 13797 +3 8615 8616 8722 +3 8723 8830 8829 +3 6948 7047 7046 +3 8515 8514 8407 +3 8944 8943 8836 +3 8837 8944 8836 +3 8203 1752 1751 +3 9968 9967 9851 +3 914 913 7899 +3 8050 3451 5191 +3 11018 11019 11145 +3 10768 10767 10643 +3 11019 11018 10892 +3 10644 10768 10643 +3 8704 8811 8810 +3 8313 8314 8420 +3 10363 1993 7462 +3 9845 9844 9729 +3 10674 10673 10551 +3 8623 8622 8515 +3 10680 10679 10557 +3 10196 10195 10077 +3 9835 9951 9834 +3 8401 8402 8508 +3 8075 8186 8074 +3 8294 8293 8185 +3 7845 7844 7729 +3 7730 7845 7729 +3 9158 9267 9157 +3 9267 9379 9378 +3 163 7212 7213 +3 714 7771 715 +3 7963 7962 7846 +3 10973 10493 10848 +3 10231 11256 8195 +3 7732 7847 7731 +3 9961 9960 9844 +3 9845 9961 9844 +3 10192 10191 10073 +3 10219 10231 8195 +3 6947 6948 7046 +3 10074 10192 10073 +3 11881 12123 13797 +3 13896 12566 13612 +3 10801 10926 10800 +3 7047 7151 7150 +3 20722 18273 18272 +3 10864 7416 2342 +3 1481 1482 1598 +3 11465 11464 11414 +3 9498 9614 9497 +3 10085 10084 9967 +3 8206 8314 8313 +3 8205 8206 8313 +3 10893 10892 10767 +3 35619 35544 35761 +3 11415 11465 11414 +3 293 4794 795 +3 11597 11529 11530 +3 25314 23984 25177 +3 5191 3451 5695 +3 8843 4391 5333 +3 35796 35427 35541 +3 14176 14079 13680 +3 8807 8914 8913 +3 31596 31595 31508 +3 8592 8593 8699 +3 8806 8807 8913 +3 8700 8807 8806 +3 8699 8700 8806 +3 7938 7937 7821 +3 8913 8914 9020 +3 8832 8939 8831 +3 6412 34354 6411 +3 9296 9295 9172 +3 11326 4380 1290 +3 10861 8659 10944 +3 8826 8933 8825 +3 8053 8052 7937 +3 7056 7160 7159 +3 29122 28482 19038 +3 7938 8053 7937 +3 7830 7946 7945 +3 21929 21834 21835 +3 8448 11090 9878 +3 4922 9878 9879 +3 10262 8041 11090 +3 8448 10262 11090 +3 7573 7572 8041 +3 10262 7573 8041 +3 7813 8047 7572 +3 7573 7813 7572 +3 7813 8475 8555 +3 8047 7813 8555 +3 8475 9989 9988 +3 8555 8475 9988 +3 35875 35836 35899 +3 30786 23522 30785 +3 7239 414 413 +3 34010 34146 34009 +3 9495 9494 9379 +3 9380 9495 9379 +3 8378 8377 8270 +3 9968 10085 9967 +3 7979 7980 8094 +3 8095 8206 8205 +3 1844 16487 2711 +3 10522 10521 10401 +3 211 20921 1878 +3 35376 35353 35528 +3 13226 1136 2106 +3 9520 13226 2106 +3 24528 24515 24243 +3 25679 25780 24679 +3 29292 46 27168 +3 19038 29292 27168 +3 34004 34140 34003 +3 17761 19114 19327 +3 7120 7016 7017 +3 31434 31433 31366 +3 7019 7123 7122 +3 7018 7019 7122 +3 7123 7230 7229 +3 7122 7123 7229 +3 7230 7341 7340 +3 7229 7230 7340 +3 7897 8012 1145 +3 518 517 7340 +3 24236 25233 21606 +3 7286 9445 9641 +3 8302 8301 8193 +3 9268 9380 9267 +3 8703 8704 8810 +3 4368 4235 8998 +3 7864 7980 7863 +3 7980 8095 8094 +3 10402 10522 10401 +3 7980 7979 7863 +3 10163 10282 10162 +3 10402 10401 10281 +3 10045 10163 10044 +3 10282 10402 10281 +3 9927 9928 10044 +3 10282 10281 10162 +3 9811 9812 9927 +3 10163 10162 10044 +3 6391 11153 11026 +3 10283 10403 10282 +3 2845 9622 9621 +3 12568 3594 13309 +3 8093 8204 8203 +3 12082 12164 12081 +3 7862 7978 7861 +3 8093 8092 7977 +3 11301 11302 8549 +3 7978 8093 7977 +3 8597 8598 8704 +3 10757 9167 9168 +3 6891 5201 7995 +3 9636 10955 10886 +3 13042 13041 12947 +3 7995 9636 10886 +3 12674 12763 12762 +3 14113 14209 14208 +3 11194 9766 10738 +3 12763 12855 12854 +3 12505 12504 12415 +3 11067 11194 10738 +3 11586 11585 11518 +3 12245 12330 12244 +3 9039 9038 8931 +3 12416 12415 12329 +3 10181 10300 10180 +3 8932 9039 8931 +3 10300 10299 10180 +3 10420 10419 10299 +3 8932 8931 8824 +3 8825 8932 8824 +3 10508 11244 9564 +3 10967 10508 9564 +3 7046 7047 7150 +3 9260 9259 9150 +3 8509 8616 8615 +3 8508 8509 8615 +3 8408 8515 8407 +3 8622 8621 8514 +3 8623 8730 8622 +3 8837 8836 8729 +3 9852 9968 9851 +3 31232 31297 31231 +3 27057 27058 28371 +3 19494 19141 17305 +3 9928 10045 10044 +3 10523 10522 10402 +3 10403 10523 10402 +3 10735 10860 9447 +3 35388 35484 35621 +3 13297 4663 15608 +3 9730 9845 9729 +3 21475 13774 23531 +3 8302 8409 8301 +3 11270 11393 8234 +3 10078 10196 10077 +3 8516 8515 8408 +3 8402 8401 8294 +3 8836 8835 8728 +3 8186 8294 8185 +3 8295 8402 8294 +3 7730 7729 7614 +3 7615 7730 7614 +3 9266 9267 9378 +3 9610 9609 9493 +3 10178 10179 10297 +3 10418 10417 10297 +3 7945 8060 8059 +3 19298 5678 17948 +3 12082 12081 12000 +3 10912 11038 11037 +3 66 299 8346 +3 8911 8910 8803 +3 10680 10804 10679 +3 8083 9793 9114 +3 10311 10310 10191 +3 10804 10803 10679 +3 9168 7167 8434 +3 10192 10311 10191 +3 7167 10694 10943 +3 9548 9168 8434 +3 12375 13584 12454 +3 8883 11188 11189 +3 11823 11909 11822 +3 6871 10383 15427 +3 8952 10501 6380 +3 11909 11908 11822 +3 8314 8421 8420 +3 25447 24557 24024 +3 7258 7257 7150 +3 7827 7943 7942 +3 11353 9898 2475 +3 24584 20027 25358 +3 25258 25259 19936 +3 13333 13890 3041 +3 21021 21020 20937 +3 26229 26288 24153 +3 20858 20938 20937 +3 10663 10664 10787 +3 8914 9021 9020 +3 10541 10542 10663 +3 8349 7674 93 +3 10422 10542 10421 +3 10663 10787 10786 +3 10182 10183 10301 +3 10542 10664 10663 +3 7151 7258 7150 +3 10542 10541 10421 +3 7369 7368 7257 +3 7258 7369 7257 +3 7369 7481 7480 +3 7368 7369 7480 +3 10302 10422 10301 +3 7481 7595 7594 +3 8164 8163 8052 +3 10183 10302 10301 +3 27168 46 29010 +3 9021 9129 9128 +3 9399 8448 9877 +3 13797 9877 9878 +3 10028 10262 8448 +3 9399 10028 8448 +3 7688 7573 10262 +3 10028 7688 10262 +3 9672 7813 7573 +3 7688 9672 7573 +3 11195 8475 7813 +3 9672 11195 7813 +3 11195 7423 9989 +3 8475 11195 9989 +3 10356 9430 10476 +3 6672 6799 9430 +3 9430 6799 10476 +3 6672 9430 7432 +3 10220 4393 5829 +3 16954 559 16794 +3 10203 10202 10084 +3 7480 7481 7594 +3 8094 8095 8205 +3 9953 9952 9836 +3 7595 7710 7709 +3 7594 7595 7709 +3 7825 7824 7709 +3 6775 239 2795 +3 12682 12683 12771 +3 7256 7367 544 +3 12639 9085 23544 +3 23410 15365 23409 +3 29010 23955 29081 +3 24407 26388 26455 +3 33411 33410 33301 +3 32522 32521 32416 +3 6921 7020 7019 +3 27871 7017 11804 +3 7020 7124 7123 +3 7019 7020 7123 +3 7124 7231 7230 +3 7123 7124 7230 +3 7342 7341 7230 +3 7231 7342 7230 +3 218 4917 516 +3 13997 8570 9683 +3 1710 8585 1827 +3 3191 3318 11271 +3 11180 11306 11305 +3 11179 11180 11305 +3 8719 8720 8826 +3 9588 9704 9703 +3 9237 9238 9349 +3 7710 7825 7709 +3 7941 7940 7824 +3 7825 7941 7824 +3 8056 8055 7940 +3 7741 8550 8792 +3 9696 9697 9811 +3 8593 8592 8485 +3 8486 8593 8485 +3 7642 8219 8044 +3 7634 7633 7519 +3 8211 8210 8099 +3 9498 9497 9382 +3 7519 7518 33336 +3 2493 2491 12211 +3 12128 2493 12211 +3 11582 11657 11581 +3 13812 13715 13813 +3 17320 5733 30758 +3 7280 7279 7172 +3 7280 7391 7279 +3 7503 7502 7390 +3 10312 10311 10192 +3 11517 11516 32049 +3 8549 10757 9168 +3 10552 10674 10551 +3 9463 9579 9578 +3 9167 9425 7167 +3 9585 9701 9700 +3 12326 12325 12240 +3 13911 13912 14009 +3 2652 5869 5041 +3 10667 10791 10666 +3 10096 2652 5041 +3 9766 8449 7818 +3 10916 10915 10790 +3 8245 8459 11117 +3 10738 9766 7818 +3 7384 7383 7272 +3 35636 35393 35601 +3 9147 9146 9038 +3 7495 7496 7609 +3 7941 8056 7940 +3 9039 9147 9038 +3 8056 8167 8166 +3 8055 8056 8166 +3 8796 7470 7809 +3 8167 8275 8274 +3 9031 9139 9030 +3 7470 6984 7584 +3 10508 7766 10747 +3 8396 8503 8395 +3 9151 9260 9150 +3 13545 13643 13642 +3 8616 8723 8722 +3 9260 9372 9371 +3 8515 8622 8514 +3 2674 22040 21655 +3 8730 8837 8729 +3 8729 8728 8621 +3 11393 11390 8234 +3 8516 8623 8515 +3 28370 28371 30095 +3 7054 7158 7157 +3 4932 10497 10235 +3 7821 7937 7936 +3 9339 10329 7359 +3 8327 8652 8344 +3 8319 8426 8318 +3 8694 8695 8801 +3 28374 30097 30096 +3 9432 9666 7911 +3 7946 8061 8060 +3 10580 7469 11120 +3 8409 8516 8408 +3 8194 8302 8193 +3 8729 8836 8728 +3 8943 8942 8835 +3 8402 8509 8508 +3 8295 8294 8186 +3 7907 8566 8459 +3 10129 7907 8459 +3 9494 9610 9493 +3 9726 9725 9609 +3 9867 9775 10843 +3 7957 8072 7956 +3 9036 9035 8928 +3 9810 9811 9926 +3 8100 8099 7984 +3 9925 9926 10042 +3 35899 35622 35903 +3 7675 10754 7197 +3 10743 7360 8367 +3 7062 10839 10829 +3 10279 10278 10159 +3 9114 9115 7146 +3 12948 12947 12854 +3 7163 7162 7058 +3 13839 13937 13838 +3 12762 12763 12854 +3 10458 11196 5724 +3 11590 11665 11589 +3 9989 7423 7667 +3 13866 11615 4939 +3 11996 12077 11995 +3 12528 12527 12438 +3 913 912 7900 +3 11912 11911 11825 +3 3830 10396 10395 +3 23019 23117 23018 +3 8410 8303 1743 +3 13701 12208 11889 +3 23215 23214 23116 +3 19029 27413 28254 +3 27413 28251 28254 +3 20052 28682 21858 +3 24737 2807 24738 +3 27254 27372 27371 +3 8166 8167 8274 +3 10422 10421 10301 +3 8275 8382 8381 +3 8274 8275 8381 +3 8382 8489 8488 +3 7767 8039 10626 +3 8381 8382 8488 +3 8489 8596 8595 +3 8488 8489 8595 +3 8596 8703 8702 +3 7809 7694 10626 +3 8595 8596 8702 +3 9020 9021 9128 +3 6965 7769 11191 +3 14165 9993 9877 +3 9129 9238 9237 +3 8972 10028 9399 +3 11152 8972 9399 +3 8034 7688 10028 +3 8972 8034 10028 +3 7814 9672 7688 +3 8034 7814 7688 +3 7814 10470 11195 +3 9672 7814 11195 +3 10470 7537 7423 +3 11195 10470 7423 +3 7537 7783 7667 +3 7423 7537 7667 +3 8348 10756 7667 +3 7783 8348 7667 +3 5872 11059 5738 +3 193 38 1855 +3 8703 8810 8809 +3 11276 8883 9512 +3 10323 10203 10204 +3 8890 9894 8463 +3 9321 1506 10130 +3 10277 10397 10396 +3 24636 26813 26814 +3 10435 10434 10314 +3 311 7036 312 +3 12117 11484 13485 +3 60 20280 20279 +3 27253 27254 27371 +3 15278 15466 20645 +3 20622 2206 19277 +3 11403 11449 28009 +3 27646 27782 29272 +3 34549 34677 34548 +3 26831 11526 26719 +3 6922 7021 7020 +3 6920 6921 7019 +3 7021 7125 7124 +3 7020 7021 7124 +3 7125 7232 7231 +3 7124 7125 7231 +3 176 2935 13518 +3 34599 33796 22528 +3 28681 28946 30600 +3 4509 4508 4374 +3 8218 8548 11065 +3 8219 8218 11065 +3 11306 11083 10135 +3 11305 11306 10135 +3 8987 8981 7564 +3 17369 7000 35191 +3 10748 10218 9983 +3 11369 10095 11186 +3 8176 8175 8064 +3 7538 11002 8224 +3 12083 12165 12082 +3 6417 6418 6544 +3 3019 2362 2230 +3 7749 7864 7748 +3 9238 9350 9349 +3 7749 7748 7633 +3 7634 7749 7633 +3 7320 264 263 +3 7864 7863 7748 +3 25714 25817 23644 +3 26720 26719 31650 +3 9621 9620 9504 +3 12475 14087 12929 +3 9852 9851 9736 +3 14094 14190 10441 +3 9737 9736 9620 +3 9737 9852 9736 +3 9611 9727 9610 +3 9621 9737 9620 +3 10808 10334 9663 +3 10193 10312 10192 +3 33949 12994 12901 +3 9460 2741 9345 +3 10545 10544 10424 +3 8990 11119 5042 +3 10545 10667 10544 +3 10425 10545 10424 +3 10791 10916 10790 +3 10791 10790 10666 +3 13629 13628 13530 +3 11042 11041 10915 +3 11117 10977 10745 +3 20788 20787 20705 +3 7273 7384 7272 +3 12326 12412 12325 +3 8503 8502 8395 +3 7496 7495 7383 +3 8181 8289 8180 +3 8396 8395 8288 +3 9479 9478 9363 +3 8289 8396 8288 +3 10782 10907 10906 +3 9364 9479 9363 +3 10781 10782 10906 +3 10907 11033 11032 +3 9418 10619 9449 +3 7579 9418 9449 +3 11163 11162 11035 +3 11064 10726 10702 +3 14244 16152 15149 +3 33401 33514 33400 +3 9259 9260 9371 +3 10544 10543 10423 +3 4118 3042 35782 +3 8702 8703 8809 +3 8622 8729 8621 +3 10431 10430 10310 +3 8730 8729 8622 +3 9579 9695 9694 +3 10963 9866 5982 +3 11083 7303 8544 +3 11171 11172 11297 +3 3721 8005 8667 +3 10401 10400 10280 +3 10475 10476 6799 +3 13154 13153 13059 +3 11078 10952 9757 +3 34354 6412 6538 +3 10218 10566 10937 +3 9587 9588 9703 +3 8868 9116 7885 +3 8409 8408 8301 +3 8194 8193 8082 +3 8836 8943 8835 +3 9050 9049 8942 +3 8187 8295 8186 +3 9622 17168 17169 +3 7555 7907 10129 +3 7556 7555 10129 +3 9610 9726 9609 +3 10922 11048 10921 +3 8072 8071 7956 +3 11905 11904 11818 +3 2471 9016 9125 +3 7303 8357 7642 +3 1646 937 7808 +3 9584 9585 9700 +3 808 5865 322 +3 8969 8968 12755 +3 9894 9009 8463 +3 8968 8967 12754 +3 10371 9398 7775 +3 7648 7741 6490 +3 8089 9801 14308 +3 8357 8218 8219 +3 10354 9780 9432 +3 11165 11291 11164 +3 9068 2515 8961 +3 35902 35740 35890 +3 27870 27149 27986 +3 22425 33237 33970 +3 9241 9242 9353 +3 9338 7582 8148 +3 10897 4371 4372 +3 5541 19255 5542 +3 11187 5178 11188 +3 11446 14187 12119 +3 9076 8969 12848 +3 1174 13474 13418 +3 24430 29569 28125 +3 13249 13248 13153 +3 8810 8917 8916 +3 13154 13249 13153 +3 8809 8810 8916 +3 8917 9024 9023 +3 8916 8917 9023 +3 9024 9132 9131 +3 9023 9024 9131 +3 12157 12240 12156 +3 9132 9241 9240 +3 9128 9129 9237 +3 11914 11913 11827 +3 8757 8972 11152 +3 8881 8757 11152 +3 10461 8034 8972 +3 8757 10461 8972 +3 10461 8479 7814 +3 8034 10461 7814 +3 8479 10945 10470 +3 7814 8479 10470 +3 7653 7537 10470 +3 10945 7653 10470 +3 7784 7783 7537 +3 7653 7784 7537 +3 8455 8348 7783 +3 7784 8455 7783 +3 7412 7298 7084 +3 8455 11059 8348 +3 11275 11276 9512 +3 7671 193 2517 +3 9651 9650 9325 +3 9131 9132 9240 +3 10517 10639 10638 +3 425 315 316 +3 9075 9076 9183 +3 8766 7354 8873 +3 9076 12941 9184 +3 5173 9225 10961 +3 3848 9532 155 +3 11589 11588 11521 +3 13345 13344 13248 +3 13249 13345 13248 +3 28476 26797 27407 +3 29568 29264 19350 +3 30482 24182 29415 +3 34271 34409 34270 +3 6923 6922 11704 +3 26799 6922 6921 +3 7022 7126 7125 +3 7021 7022 7125 +3 7126 7233 7232 +3 7125 7126 7232 +3 30988 31049 30987 +3 1601 14681 1725 +3 14006 14104 14103 +3 8382 8383 8489 +3 8548 10744 10686 +3 11065 8548 10686 +3 9207 8890 9319 +3 7586 7577 10377 +3 26497 8974 1450 +3 7774 10371 7775 +3 9183 9184 9292 +3 7817 7816 10972 +3 20775 20776 20857 +3 11537 11536 11472 +3 14015 14113 14014 +3 9241 9353 9352 +3 10526 10843 10512 +3 22816 22915 22815 +3 9723 9722 9606 +3 8720 8827 8826 +3 6954 6955 7053 +3 10181 10182 10300 +3 9051 9050 8943 +3 7894 7893 10700 +3 10432 10431 10311 +3 8944 9051 8943 +3 10193 10192 10074 +3 10075 10193 10074 +3 10075 10074 9957 +3 9958 10075 9957 +3 9842 9841 9726 +3 9727 9842 9726 +3 9958 9957 9841 +3 9842 9958 9841 +3 10592 7770 10526 +3 7770 10843 10526 +3 9261 9373 9372 +3 9260 9261 9372 +3 7729 7728 7613 +3 10667 10666 10544 +3 7614 7613 7499 +3 7500 7614 7499 +3 7277 7388 7276 +3 7500 7499 7387 +3 9240 9241 9352 +3 7388 7500 7387 +3 7384 7496 7383 +3 9468 9467 9352 +3 9254 9255 9366 +3 7496 7610 7609 +3 8500 8607 8606 +3 9482 9481 9366 +3 9595 9594 9478 +3 8607 8714 8713 +3 11386 11367 10579 +3 9479 9595 9478 +3 9188 10579 7145 +3 9188 11386 10579 +3 11285 7740 11284 +3 7740 9188 7145 +3 9436 9552 8438 +3 6960 11197 8438 +3 7560 9778 9795 +3 8458 3190 7851 +3 12162 12245 12161 +3 13770 13769 13097 +3 10424 10544 10423 +3 10666 10665 10543 +3 13727 13726 13628 +3 13629 13727 13628 +3 10311 10431 10310 +3 10551 10550 10430 +3 7271 7270 7163 +3 12150 12233 12232 +3 10135 11083 8544 +3 10748 8657 10218 +3 10150 8456 1859 +3 778 7478 7592 +3 11257 13654 15594 +3 9353 9468 9352 +3 9584 9583 9467 +3 13440 13439 13344 +3 9468 9584 9467 +3 10052 10170 10169 +3 22875 26226 26577 +3 32307 32306 32205 +3 10566 8157 7665 +3 8943 9050 8942 +3 13041 13135 13134 +3 12412 12411 12325 +3 10797 10796 10672 +3 10011 8127 11783 +3 35602 35585 35711 +3 11175 11174 11047 +3 11048 11175 11047 +3 3200 8977 2633 +3 11183 11056 11057 +3 8544 7303 7642 +3 4108 2000 191 +3 7164 7271 7163 +3 8337 6958 8444 +3 9584 9700 9699 +3 9583 9584 9699 +3 9700 9815 9814 +3 9253 9252 9143 +3 9699 9700 9814 +3 7642 8357 8219 +3 9036 9144 9035 +3 9297 10699 10698 +3 11347 8326 8736 +3 7606 7607 7721 +3 10275 9555 9298 +3 9755 7650 9407 +3 10417 10537 10416 +3 9775 9752 10773 +3 10660 10784 10783 +3 10739 10035 13000 +3 8776 8869 7993 +3 7333 7334 397 +3 5316 10815 5452 +3 13345 13440 13344 +3 10254 9993 11003 +3 9815 9931 9930 +3 9814 9815 9930 +3 9991 8628 8881 +3 9943 10060 10059 +3 11136 10687 6957 +3 8865 8757 8881 +3 11152 9399 9993 +3 10851 10461 8757 +3 8865 10851 8757 +3 10872 8479 10461 +3 10851 10872 10461 +3 10872 7446 10945 +3 8479 10872 10945 +3 7652 7653 10945 +3 7446 7652 10945 +3 7901 7784 7653 +3 7652 7901 7653 +3 9665 8455 7784 +3 7901 9665 7784 +3 9800 11059 8455 +3 9665 9800 8455 +3 6533 12446 6850 +3 12732 12753 12548 +3 9931 10048 10047 +3 8490 8597 8596 +3 8124 10214 9009 +3 7624 9014 9010 +3 1642 8350 9317 +3 2222 23590 8306 +3 9930 9931 10047 +3 10048 10166 10165 +3 13288 10721 10498 +3 10498 10721 9789 +3 13536 13535 13439 +3 13440 13536 13439 +3 19571 27167 28126 +3 19350 19571 28126 +3 32901 33009 32900 +3 32945 33051 33050 +3 33811 34196 11718 +3 29356 29082 28888 +3 7023 7127 7126 +3 7022 7023 7126 +3 7127 7234 7233 +3 7126 7127 7233 +3 13634 13633 13535 +3 491 490 7549 +3 8232 10452 10348 +3 8167 8168 8275 +3 10744 10099 10098 +3 9018 9126 9125 +3 10683 14288 10807 +3 6420 6421 6546 +3 10047 10048 10165 +3 10285 10284 10165 +3 10166 10285 10165 +3 10405 10404 10284 +3 9969 9968 9852 +3 9581 9697 9696 +3 10686 10744 10098 +3 10843 10773 10512 +3 9159 9268 9158 +3 10099 8657 10748 +3 9159 9158 9050 +3 9051 9159 9050 +3 8297 8296 8188 +3 9268 9267 9158 +3 10568 8651 10219 +3 8651 10231 10219 +3 7957 7956 7840 +3 8078 8189 8077 +3 8733 2236 8841 +3 7841 7957 7840 +3 35459 14168 11549 +3 8082 8081 7966 +3 5964 5965 6096 +3 8193 8192 8081 +3 8082 8193 8081 +3 8301 8300 8192 +3 8937 9044 9043 +3 8936 8937 9043 +3 9043 9151 9150 +3 7614 7729 7613 +3 11244 10508 10747 +3 7766 7328 7217 +3 10285 10405 10284 +3 9447 8373 9505 +3 9482 9598 9481 +3 10525 10524 10404 +3 9367 9482 9366 +3 9598 9714 9713 +3 8285 8286 8392 +3 9598 9597 9481 +3 7262 7373 7261 +3 8499 8500 8606 +3 7373 7372 7261 +3 9135 9244 9134 +3 10654 10655 10778 +3 7050 7051 7154 +3 10779 10904 10903 +3 10778 10779 10903 +3 10656 10780 10779 +3 10655 10656 10779 +3 8308 6960 8438 +3 7579 9449 11197 +3 10726 7560 9795 +3 8250 9091 9778 +3 12539 12454 9109 +3 11646 13684 13414 +3 10544 10666 10543 +3 10790 10789 10665 +3 27135 27254 27253 +3 10666 10790 10665 +3 10431 10551 10430 +3 12732 2879 12753 +3 9462 9463 9578 +3 10673 10672 10550 +3 10337 8157 10566 +3 10886 7657 7655 +3 8869 9407 7993 +3 10218 10337 10566 +3 9580 9581 9696 +3 9738 9853 9737 +3 9465 9581 9580 +3 9464 9465 9580 +3 9350 9465 9464 +3 9621 9504 2845 +3 9853 9852 9737 +3 7733 1039 1157 +3 7665 7673 9100 +3 5869 1273 6508 +3 10625 10634 8232 +3 10673 10797 10672 +3 10922 10921 10796 +3 12727 11786 12638 +3 8566 7424 10977 +3 11175 11301 11300 +3 8766 8873 10935 +3 7668 9283 7218 +3 11174 11175 11300 +3 9100 7673 6646 +3 13003 13097 12548 +3 7944 7945 8059 +3 8162 8270 8269 +3 9349 9350 9464 +3 4509 10776 10902 +3 10405 10525 10404 +3 10647 10646 10524 +3 7050 7154 7153 +3 10525 10647 10524 +3 10929 11055 11054 +3 10928 10929 11054 +3 10771 10770 10646 +3 10647 10771 10646 +3 10896 10895 10770 +3 10771 10896 10770 +3 11022 11021 10895 +3 10896 11022 10895 +3 11914 11998 11913 +3 9614 9730 9613 +3 30097 19797 19796 +3 11918 11917 11831 +3 13536 13634 13535 +3 13732 13731 13633 +3 9990 14285 11236 +3 8686 8628 9990 +3 35678 35402 35769 +3 8152 8865 8628 +3 8686 8152 8628 +3 7856 10851 8865 +3 8152 7856 8865 +3 10871 10872 10851 +3 7856 10871 10851 +3 10871 10232 7446 +3 10872 10871 7446 +3 10232 7459 7652 +3 7446 10232 7652 +3 7330 7901 7652 +3 7459 7330 7652 +3 7330 9549 9665 +3 7901 7330 9665 +3 10749 9800 9665 +3 9549 10749 9665 +3 9929 10046 10045 +3 809 6670 4502 +3 8489 8490 8596 +3 35533 35484 28888 +3 9369 9484 9483 +3 11327 7995 10830 +3 1166 7743 1283 +3 10573 7769 11291 +3 11149 11148 11021 +3 9730 9729 9613 +3 11022 11149 11021 +3 11522 11521 11458 +3 13634 13732 13633 +3 13830 13829 13731 +3 2816 2815 25495 +3 21840 29217 29079 +3 28340 24908 29153 +3 6925 7024 7023 +3 6924 7022 6923 +3 7024 7128 7127 +3 7023 7024 7127 +3 7128 7235 7234 +3 7127 7128 7234 +3 15451 21889 13177 +3 16044 15904 15905 +3 10926 10927 11052 +3 7942 8057 8056 +3 10940 8249 8652 +3 8327 10940 8652 +3 10204 10203 10085 +3 10086 10204 10085 +3 11149 11275 11274 +3 11148 11149 11274 +3 9812 9928 9927 +3 9682 8970 10492 +3 9853 9969 9852 +3 8593 8700 8699 +3 10098 10099 10748 +3 10086 10085 9968 +3 1291 6891 11327 +3 8657 10337 10218 +3 7703 9682 3720 +3 10102 7253 7679 +3 8408 8407 8300 +3 8193 8301 8192 +3 8722 8723 8829 +3 8301 8408 8300 +3 9720 9835 9719 +3 8830 8937 8936 +3 9603 9604 9719 +3 9835 9834 9719 +3 9488 9604 9603 +3 9487 9488 9603 +3 9373 9488 9487 +3 9604 9720 9719 +3 9152 9261 9260 +3 9372 9373 9487 +3 9152 9151 9043 +3 9151 9152 9260 +3 8828 8829 8935 +3 9044 9152 9043 +3 10747 7766 7217 +3 9042 9043 9150 +3 10061 10062 10179 +3 7328 11240 10987 +3 9945 10062 10061 +3 9944 9945 10061 +3 7952 7951 7835 +3 10062 10180 10179 +3 7836 7952 7835 +3 8067 8066 7951 +3 8393 8500 8499 +3 8392 8393 8499 +3 7713 7714 7828 +3 7051 7155 7154 +3 10174 10293 10292 +3 10056 10174 10173 +3 1294 2793 13790 +3 11030 11029 10903 +3 8604 8603 8496 +3 8497 8604 8496 +3 10413 10414 10533 +3 10656 10655 10533 +3 10611 9552 9436 +3 6960 7579 11197 +3 7560 8250 9778 +3 3190 7890 7851 +3 11261 13519 10092 +3 22525 22524 22426 +3 3594 13881 13777 +3 12454 12720 9109 +3 10915 10914 10789 +3 11167 11168 11293 +3 13602 7919 12936 +3 35510 35896 27148 +3 10551 10673 10550 +3 13141 15397 13140 +3 8896 9220 1291 +3 6891 7995 11327 +3 8157 7673 7665 +3 30332 28678 29290 +3 20789 20790 20871 +3 11905 11906 11989 +3 7937 8052 7936 +3 9274 9386 9273 +3 8100 8211 8099 +3 10497 9339 7359 +3 7173 7280 7172 +3 7391 7390 7279 +3 11290 11291 6965 +3 11275 9512 7654 +3 10452 10349 10348 +3 10330 10331 10947 +3 10797 10922 10796 +3 11048 11047 10921 +3 8459 8566 10977 +3 13043 13137 13136 +3 9046 9045 8938 +3 10790 10915 10789 +3 11301 8549 9786 +3 10427 10547 10426 +3 12049 13286 13602 +3 11300 11301 9786 +3 9596 9595 9479 +3 9059 9066 10625 +3 9738 9737 9621 +3 8367 7360 8584 +3 8590 8697 8696 +3 7049 7050 7153 +3 8533 8532 8425 +3 11305 10135 7351 +3 26813 24636 26927 +3 18471 456 455 +3 9431 1999 3334 +3 1999 1171 2652 +3 11044 11171 11170 +3 8805 8806 8912 +3 9717 9716 9600 +3 191 3962 4108 +3 16168 2253 14738 +3 11311 5717 5583 +3 18993 25458 25457 +3 12165 12164 12082 +3 13732 13830 13731 +3 13928 13927 13829 +3 31169 31170 31233 +3 9935 10052 10051 +3 9424 8152 8686 +3 8002 9424 8686 +3 8121 7856 8152 +3 9424 8121 8152 +3 7815 10871 7856 +3 8121 7815 7856 +3 10964 10232 10871 +3 7815 10964 10871 +3 10964 9873 7459 +3 10232 10964 7459 +3 7443 7330 7459 +3 9873 7443 7459 +3 10133 9549 7330 +3 7443 10133 7330 +3 7689 10749 9549 +3 10133 7689 9549 +3 2370 8951 8950 +3 7689 7803 10749 +3 5316 5452 5451 +3 1989 1869 1870 +3 7995 10886 10830 +3 7259 7370 7258 +3 9018 9017 8910 +3 22327 22328 6865 +3 4194 25945 25946 +3 16158 16303 14962 +3 8326 10829 8736 +3 11043 11044 11170 +3 13830 13928 13829 +3 11274 11275 7654 +3 10130 799 8336 +3 26784 26899 26783 +3 26578 26683 26682 +3 35223 6926 6925 +3 6925 6924 35223 +3 7025 7129 7128 +3 7024 7025 7128 +3 7129 7236 7235 +3 7128 7129 7235 +3 35722 35801 35908 +3 26577 26578 26682 +3 10802 10801 10677 +3 10556 10678 10555 +3 10162 10281 10161 +3 9407 7650 7534 +3 11024 4640 11151 +3 10767 10766 10642 +3 4631 4632 4765 +3 9969 10086 9968 +3 8094 8205 8093 +3 8312 1870 1869 +3 8313 8312 8204 +3 8205 8313 8204 +3 2341 5857 5988 +3 11037 11038 11164 +3 10801 10802 10926 +3 10927 11053 11052 +3 9238 9239 9350 +3 9239 9351 9350 +3 7820 7821 7936 +3 10894 10893 10768 +3 6511 8200 14297 +3 8829 8830 8936 +3 8294 8401 8400 +3 8293 8294 8400 +3 8400 8401 8507 +3 8401 8508 8507 +3 8721 8722 8828 +3 8508 8615 8614 +3 8507 8508 8614 +3 8615 8722 8721 +3 8614 8615 8721 +3 8722 8829 8828 +3 8936 9043 9042 +3 8829 8936 8935 +3 7217 7328 10987 +3 8935 8936 9042 +3 10785 10784 10660 +3 11240 7915 9013 +3 2606 2471 9234 +3 10910 11036 10909 +3 7952 8067 7951 +3 7269 7268 7161 +3 12136 12137 11634 +3 8178 8177 8066 +3 11741 11825 11740 +3 12117 13485 13389 +3 6666 106 7577 +3 6262 13191 3057 +3 9506 6250 7545 +3 12240 12239 12156 +3 10055 10056 10173 +3 9823 9939 9822 +3 6956 7055 7054 +3 6955 6956 7054 +3 8497 8496 8389 +3 8390 8497 8389 +3 10534 10656 10533 +3 10780 10905 10904 +3 10489 10611 9436 +3 9552 8308 8438 +3 7890 9506 9427 +3 7851 7890 9427 +3 9427 9506 7545 +3 8546 1134 1135 +3 10261 8197 13496 +3 9435 1891 9793 +3 11294 9556 8251 +3 11293 11294 8251 +3 12680 12769 12768 +3 12679 12680 12768 +3 15397 13139 13140 +3 21756 21481 23413 +3 10822 9220 8896 +3 10947 10822 8896 +3 27278 27279 27396 +3 13630 13629 13531 +3 8094 8093 7978 +3 7979 8094 7978 +3 9601 9717 9600 +3 33445 22426 22425 +3 2878 9340 2345 +3 7748 7863 7747 +3 397 511 396 +3 927 33673 7512 +3 7979 7978 7862 +3 10694 10331 10330 +3 545 8994 7775 +3 8434 7167 10943 +3 10943 10694 10330 +3 14277 7786 14286 +3 9512 11189 11190 +3 10915 11041 11040 +3 13676 13578 11616 +3 10188 10307 10187 +3 10914 10915 11040 +3 8549 9168 9548 +3 10336 1950 6637 +3 10634 10452 8232 +3 9786 8549 9548 +3 7654 9512 11190 +3 7655 7657 9059 +3 7372 7371 7260 +3 20260 20259 23692 +3 11055 11182 11181 +3 8329 9525 9524 +3 11308 10014 10270 +3 11307 11308 10270 +3 7633 7748 7632 +3 7863 7862 7747 +3 7559 7675 7197 +3 8887 11317 7769 +3 8744 8851 2247 +3 8811 8918 8917 +3 11218 10936 7886 +3 8529 2118 2117 +3 12683 12772 12771 +3 14026 14025 13927 +3 13928 14026 13927 +3 7047 7048 7151 +3 9248 9360 9247 +3 7162 7161 7058 +3 9360 9359 9247 +3 7198 8121 9424 +3 9647 7198 9424 +3 9081 7815 8121 +3 7198 9081 8121 +3 10386 10964 7815 +3 9081 10386 7815 +3 9874 9873 10964 +3 10386 9874 10964 +3 8017 7443 9873 +3 9874 8017 9873 +3 10016 10133 7443 +3 8017 10016 7443 +3 10016 7796 7689 +3 10133 10016 7689 +3 7651 7803 7689 +3 7796 7651 7689 +3 30059 30191 30058 +3 7651 10474 7803 +3 7370 7482 7481 +3 7242 416 7241 +3 7513 7627 7626 +3 10802 10927 10926 +3 8043 10617 14565 +3 7512 7513 7626 +3 7438 7553 9550 +3 7748 7747 7632 +3 9237 9349 9348 +3 12814 10739 13000 +3 11189 10445 9083 +3 9354 9469 9468 +3 27252 27253 27370 +3 10003 21627 23580 +3 17260 27316 27729 +3 31106 31107 31169 +3 7026 7130 7129 +3 7024 6926 7025 +3 7130 7237 7236 +3 7129 7130 7236 +3 10442 5183 5048 +3 7809 8156 7694 +3 9990 14282 13195 +3 35890 3319 35659 +3 11318 9407 7534 +3 10538 10537 10417 +3 26807 26922 26921 +3 7633 7632 7518 +3 8544 7642 8648 +3 7518 7517 33444 +3 8832 8831 8724 +3 9697 9812 9811 +3 11360 1977 18933 +3 30021 30071 19377 +3 10418 10538 10417 +3 14473 11880 12056 +3 10316 10315 10196 +3 10316 10436 10315 +3 10197 10316 10196 +3 10436 10435 10315 +3 8052 8051 7936 +3 7795 7790 10808 +3 11630 7272 7164 +3 12073 12072 11991 +3 6963 129 814 +3 9294 10335 11200 +3 15432 10212 2021 +3 6096 6226 7425 +3 7916 8031 7691 +3 7806 6984 8796 +3 12671 12672 12760 +3 7691 7806 8796 +3 8031 7806 7691 +3 8796 6984 7470 +3 10987 11240 9013 +3 7915 8031 7916 +3 10661 10785 10660 +3 9013 7915 7916 +3 7162 7269 7161 +3 10910 10909 10784 +3 13532 13531 13435 +3 7380 7379 7268 +3 12594 12684 12593 +3 12684 12773 12772 +3 9361 9360 9248 +3 21569 17100 22442 +3 9592 9591 9475 +3 9249 9361 9248 +3 9476 9592 9475 +3 9708 9707 9591 +3 9708 9823 9707 +3 9939 9938 9822 +3 9939 10056 10055 +3 9938 9939 10055 +3 7266 7377 7376 +3 7265 7266 7376 +3 8175 8283 8174 +3 8390 8389 8282 +3 10779 10780 10904 +3 11031 11030 10904 +3 8347 10611 10489 +3 11009 8347 10489 +3 7534 8347 11009 +3 7421 7534 11009 +3 6661 11389 7414 +3 9555 9297 9298 +3 1171 10985 2652 +3 6896 27648 27503 +3 9556 8435 7895 +3 9435 8083 8113 +3 22624 22623 22524 +3 8251 9556 7895 +3 23132 22839 23230 +3 9984 10031 9868 +3 9220 6891 1291 +3 10547 10546 10426 +3 28009 28018 26493 +3 10678 10677 10555 +3 8205 8204 8093 +3 14124 14123 14025 +3 11190 11189 9083 +3 11513 11360 18933 +3 259 1054 6000 +3 14026 14124 14025 +3 8065 8064 7949 +3 7863 7979 7862 +3 29242 29243 29379 +3 10620 9007 7690 +3 8030 7805 10248 +3 10331 10822 10947 +3 11053 11180 11179 +3 18178 18932 24398 +3 9243 9355 9354 +3 13573 13671 12635 +3 9303 7456 14258 +3 11041 11168 11167 +3 7895 8435 8541 +3 10199 10198 10080 +3 11040 11041 11167 +3 9109 1494 12201 +3 10547 10669 10546 +3 9066 10634 10625 +3 12237 12322 12236 +3 7294 21466 21465 +3 10830 10886 7655 +3 24304 25111 24303 +3 7293 7294 21465 +3 27314 28676 27296 +3 27043 27160 27159 +3 27167 28476 30204 +3 28716 28715 21455 +3 14220 14219 14123 +3 4361 10761 10887 +3 10048 10049 10166 +3 6743 1642 9096 +3 14124 14220 14123 +3 11667 11747 11666 +3 13515 14317 14219 +3 9506 9509 6250 +3 13195 8686 9990 +3 1882 1642 6744 +3 14220 13515 14219 +3 12031 9647 8002 +3 8348 322 10756 +3 8547 9081 7198 +3 10746 8547 7198 +3 11094 10386 9081 +3 8547 11094 9081 +3 11094 7921 9874 +3 10386 11094 9874 +3 7921 7444 8017 +3 9874 7921 8017 +3 11116 10016 8017 +3 7444 11116 8017 +3 8997 7796 10016 +3 11116 8997 10016 +3 9508 7651 7796 +3 8997 9508 7796 +3 9285 10474 7651 +3 9508 9285 7651 +3 12074 12073 11992 +3 9285 11242 10474 +3 10678 10802 10677 +3 151 7200 7201 +3 265 264 7321 +3 10660 10659 10537 +3 7795 9308 7790 +3 13520 13521 14317 +3 7318 7319 263 +3 35529 35412 35656 +3 13515 13520 14317 +3 35818 28745 26735 +3 13650 13748 13649 +3 10897 11023 10896 +3 13603 11809 13521 +3 15170 1601 2102 +3 30068 30067 29936 +3 19137 19519 19035 +3 17401 17324 17402 +3 27396 27397 27515 +3 7027 7131 7130 +3 7026 7027 7130 +3 7131 7238 7237 +3 7130 7131 7237 +3 414 7240 415 +3 8518 8410 1743 +3 8948 2368 8949 +3 2369 8950 8949 +3 10722 10460 9196 +3 11144 11145 4768 +3 24885 26790 30625 +3 2236 2107 2108 +3 2741 9460 2876 +3 13520 13603 13521 +3 7821 897 7707 +3 35514 29543 27756 +3 8911 8912 9018 +3 9818 9819 9934 +3 10784 10909 10908 +3 9056 9164 9055 +3 9273 9272 9163 +3 9846 9962 9845 +3 10079 10078 9961 +3 17854 5817 18920 +3 14555 8043 14565 +3 8470 8577 9206 +3 14820 10237 8562 +3 10286 10285 10166 +3 11200 6963 814 +3 10539 10661 10538 +3 11352 11353 9547 +3 10418 10419 10538 +3 10661 10660 10538 +3 10299 10419 10418 +3 10298 10299 10418 +3 10299 10298 10179 +3 10419 10539 10538 +3 10785 10910 10784 +3 10180 10299 10179 +3 7269 7380 7268 +3 11036 11035 10909 +3 9698 9697 9581 +3 7380 7492 7491 +3 8711 8818 8710 +3 8978 7764 8229 +3 9476 9475 9360 +3 8818 8925 8924 +3 7832 7948 7831 +3 9361 9476 9360 +3 7718 7833 7717 +3 7949 7948 7832 +3 7602 7603 7717 +3 7833 7949 7832 +3 7489 7603 7488 +3 7833 7832 7717 +3 7489 7488 7376 +3 7603 7718 7717 +3 7377 7489 7376 +3 7603 7602 7488 +3 8175 8174 8063 +3 8283 8390 8282 +3 10905 11031 10904 +3 11158 11157 11030 +3 11031 11158 11030 +3 11284 11283 11157 +3 10507 11142 11073 +3 10948 10507 11073 +3 10990 9555 10275 +3 9664 10990 10275 +3 13485 13981 13883 +3 12504 12594 12503 +3 8368 9435 8113 +3 12681 12682 12770 +3 8435 11067 8541 +3 8844 7877 9395 +3 7111 7086 9868 +3 10031 10849 9868 +3 10918 10917 10792 +3 33543 7172 7171 +3 9731 9730 9614 +3 9615 9731 9614 +3 10620 11118 9007 +3 9056 9055 8948 +3 9666 9550 7911 +3 11178 11179 11304 +3 2513 8851 8852 +3 13603 12393 11093 +3 8719 8826 8718 +3 11809 13603 11093 +3 10396 10397 10516 +3 9165 9164 9056 +3 12393 6256 8086 +3 8559 5452 10569 +3 11052 11053 11179 +3 10556 10555 10435 +3 35386 35723 35377 +3 13109 186 7768 +3 9303 12539 7456 +3 12075 12157 12074 +3 11067 10738 10863 +3 8541 11067 10863 +3 11168 11294 11293 +3 8368 8113 10471 +3 31650 31649 31561 +3 5959 8149 6091 +3 12322 12408 12321 +3 10598 7086 7111 +3 7657 9066 9059 +3 8970 9211 11082 +3 10197 10196 10078 +3 10079 10197 10078 +3 9164 9273 9163 +3 9385 9384 9272 +3 19558 21294 28810 +3 6003 322 5996 +3 8163 8162 8051 +3 8933 8932 8825 +3 11832 11831 11747 +3 7369 7370 7481 +3 20377 20376 20291 +3 11093 12393 8086 +3 35603 35418 35851 +3 418 417 7243 +3 7544 372 486 +3 897 7821 7820 +3 5335 6767 124 +3 10925 10926 11051 +3 7919 7249 8547 +3 10746 9647 12936 +3 7249 8793 11094 +3 8547 7249 11094 +3 8793 7683 7921 +3 11094 8793 7921 +3 7683 8129 7444 +3 7921 7683 7444 +3 11243 11116 7444 +3 8129 11243 7444 +3 8996 8997 11116 +3 11243 8996 11116 +3 8351 9508 8997 +3 8996 8351 8997 +3 8462 9285 9508 +3 8351 8462 9508 +3 10015 11242 9285 +3 8462 10015 9285 +3 12589 12679 12588 +3 2640 9276 9166 +3 1250 8051 8161 +3 9962 10079 9961 +3 28487 19519 19137 +3 9616 9615 9499 +3 9501 9500 9385 +3 10397 10517 10516 +3 9349 9464 9463 +3 12248 12333 12247 +3 26226 26578 26577 +3 6256 2091 2090 +3 5697 8226 8561 +3 8716 8823 8822 +3 4912 4778 4913 +3 29146 17667 28874 +3 28558 28557 28435 +3 6929 7028 7027 +3 6926 6928 7026 +3 7028 7132 7131 +3 7027 7028 7131 +3 7132 7239 7238 +3 7131 7132 7238 +3 80 3181 81 +3 5433 5434 16028 +3 9847 9846 9731 +3 9732 9847 9731 +3 9254 9366 9365 +3 8014 9225 3191 +3 10874 9865 10340 +3 11304 11305 7351 +3 7510 6375 6246 +3 10888 11014 10887 +3 7588 10748 9983 +3 23173 19978 19977 +3 10161 10160 10042 +3 10281 10401 10280 +3 10080 10079 9962 +3 9963 10080 9962 +3 9846 9845 9730 +3 9731 9846 9730 +3 26600 24913 26601 +3 27501 27619 27618 +3 9932 10049 10048 +3 8577 8562 9206 +3 10167 10286 10166 +3 10406 10405 10285 +3 7562 8952 7550 +3 7440 1135 6798 +3 7698 8263 9662 +3 10224 10223 9869 +3 7720 7721 7835 +3 7721 7836 7835 +3 7606 7721 7720 +3 7605 7606 7720 +3 7379 7380 7491 +3 7492 7606 7605 +3 7741 6489 6490 +3 7491 7492 7605 +3 8817 8818 8924 +3 8120 8229 7674 +3 8174 8173 8062 +3 8925 9032 9031 +3 9931 9932 10048 +3 8063 8062 7947 +3 10021 7566 9760 +3 7948 8063 7947 +3 9820 9821 9936 +3 9937 10054 10053 +3 9706 9821 9820 +3 9936 9937 10053 +3 9705 9706 9820 +3 9821 9937 9936 +3 10054 10172 10171 +3 10053 10054 10171 +3 8389 8388 8281 +3 8282 8389 8281 +3 8064 8175 8063 +3 8283 8282 8174 +3 8064 8063 7948 +3 7949 8064 7948 +3 9477 9593 9476 +3 9709 9708 9592 +3 9191 10351 11142 +3 10507 9191 11142 +3 9097 10990 9664 +3 11387 9097 9664 +3 12684 12683 12593 +3 22225 22321 22224 +3 13141 13142 13236 +3 12507 12597 12596 +3 7612 7727 7726 +3 7611 7612 7726 +3 10145 10104 9510 +3 6894 10145 9510 +3 27253 27371 27370 +3 7392 7391 7280 +3 9615 9614 9498 +3 9499 9615 9498 +3 10198 10317 10197 +3 10437 10436 10316 +3 8229 7764 9537 +3 10286 10406 10285 +3 1725 14681 16635 +3 7359 10329 7700 +3 9938 10055 10054 +3 10235 7359 10479 +3 8823 8930 8929 +3 10221 9299 8254 +3 8949 9056 8948 +3 9164 9163 9055 +3 10436 10556 10435 +3 9499 9498 9383 +3 5602 4247 9111 +3 8970 11082 10492 +3 11825 11911 11824 +3 11736 11735 11655 +3 10738 7818 9197 +3 10863 10738 9197 +3 7660 8368 10471 +3 7660 10471 10856 +3 8669 547 8151 +3 6617 6742 9064 +3 11989 12070 12069 +3 11988 11989 12069 +3 1494 3060 14 +3 7618 7617 7503 +3 9384 9383 9271 +3 9272 9384 9271 +3 9273 9385 9272 +3 9500 9499 9384 +3 11016 11015 10889 +3 10890 11016 10889 +3 10329 10750 7700 +3 10913 11039 11038 +3 9283 10235 10479 +3 35437 35712 35571 +3 7505 920 919 +3 4636 6792 2440 +3 9465 9466 9581 +3 8086 6256 2090 +3 11553 11488 7059 +3 4380 9511 6893 +3 7701 7249 7919 +3 10746 12936 7919 +3 7701 8235 8793 +3 7249 7701 8793 +3 8235 9875 7683 +3 8793 8235 7683 +3 9875 8237 8129 +3 7683 9875 8129 +3 10693 11243 8129 +3 8237 10693 8129 +3 10824 8996 11243 +3 10693 10824 11243 +3 10824 10449 8351 +3 8996 10824 8351 +3 8568 8462 8351 +3 10449 8568 8351 +3 10132 10015 8462 +3 8568 10132 8462 +3 10220 5829 10451 +3 10132 10858 10015 +3 9163 9272 9162 +3 10254 8881 11152 +3 9500 9616 9499 +3 9732 9731 9615 +3 12241 12240 12157 +3 10764 10765 10889 +3 8255 9283 10479 +3 11500 35365 29262 +3 10705 23418 16014 +3 35642 35625 35805 +3 4794 8146 9988 +3 14021 14020 13922 +3 12494 12584 12583 +3 197 7250 106 +3 4383 432 8222 +3 7359 7700 10479 +3 29681 29146 29545 +3 16663 18053 18421 +3 6930 7029 7028 +3 6929 6928 35097 +3 7029 7133 7132 +3 7028 7029 7132 +3 7133 7240 7239 +3 7132 7133 7239 +3 11053 11054 11180 +3 9824 9823 9708 +3 9963 9962 9846 +3 9847 9963 9846 +3 13608 35444 35601 +3 9953 10070 9952 +3 2490 11269 2356 +3 10763 10888 10762 +3 6915 30607 29281 +3 836 835 717 +3 13881 12471 13880 +3 11489 7059 11488 +3 10874 9523 7886 +3 12003 12002 11918 +3 13723 13722 13624 +3 10080 10198 10079 +3 10198 10197 10079 +3 9962 9961 9845 +3 9055 9163 9054 +3 29378 29515 29514 +3 26810 26925 26924 +3 8577 8470 10849 +3 10031 8577 10849 +3 814 129 9510 +3 129 6894 9510 +3 2126 9306 9421 +3 13622 13621 24358 +3 8874 8986 3306 +3 10223 9667 9869 +3 11230 11318 11336 +3 7534 7421 9412 +3 2091 160 10466 +3 2090 2091 10466 +3 11895 14067 13518 +3 13622 24358 24524 +3 8924 8925 9031 +3 13974 13876 15892 +3 8063 8174 8062 +3 9140 9139 9031 +3 4536 25994 25993 +3 8174 8282 8173 +3 35376 11409 13418 +3 9698 9813 9697 +3 11336 10854 7697 +3 717 718 836 +3 160 10957 14184 +3 10367 8898 9078 +3 10167 10168 10286 +3 9474 9590 9473 +3 10952 7307 7308 +3 9706 9705 9589 +3 7948 7947 7831 +3 10715 10952 7308 +3 8496 8495 8388 +3 7601 7602 7716 +3 8603 8602 8495 +3 8389 8496 8388 +3 9475 9474 9359 +3 9360 9475 9359 +3 9362 9477 9361 +3 9593 9592 9476 +3 9316 9209 10351 +3 9191 9316 10351 +3 9173 9097 11387 +3 9187 9173 11387 +3 23403 276 5566 +3 10466 160 14184 +3 10527 10528 4240 +3 11658 11738 11657 +3 7727 7842 7841 +3 7726 7727 7841 +3 9006 9010 10613 +3 10615 10568 10448 +3 7281 7392 7280 +3 8079 8078 7963 +3 35551 11381 28479 +3 5430 5296 16789 +3 10317 10437 10316 +3 10557 10556 10436 +3 3981 2224 11267 +3 5555 27146 28365 +3 9523 11218 7886 +3 9019 9020 9127 +3 9236 9237 9348 +3 11336 9412 11330 +3 1948 2073 1947 +3 10957 10363 8770 +3 10679 10678 10556 +3 10557 10679 10556 +3 9384 9499 9383 +3 9407 11318 11230 +3 27500 27501 27618 +3 10064 10065 10182 +3 12676 12765 12764 +3 10593 10598 7111 +3 7818 10335 9294 +3 9197 7818 9294 +3 7857 7660 10856 +3 9661 11352 9547 +3 1950 8784 10760 +3 8271 8378 8270 +3 18636 18637 21026 +3 7255 8195 9565 +3 7504 7618 7503 +3 8298 8405 8297 +3 7554 8347 7534 +3 7650 7554 7534 +3 9385 9500 9384 +3 10679 10803 10678 +3 11060 7763 12720 +3 6617 6491 6492 +3 8725 8832 8724 +3 14184 10957 8770 +3 8669 8874 547 +3 1140 1256 1496 +3 10363 7462 7576 +3 8005 3721 11335 +3 11003 13895 10254 +3 9366 9481 9480 +3 6502 6376 6503 +3 7702 7701 10826 +3 7701 7919 10826 +3 9008 8235 7701 +3 7702 9008 7701 +3 9876 9875 8235 +3 9008 9876 8235 +3 10366 8237 9875 +3 9876 10366 9875 +3 10366 8220 10693 +3 8237 10366 10693 +3 10151 10824 10693 +3 8220 10151 10693 +3 8108 10449 10824 +3 10151 8108 10824 +3 8675 8568 10449 +3 8108 8675 10449 +3 9320 10132 8568 +3 8675 9320 8568 +3 10733 10858 10132 +3 9320 10733 10132 +3 8683 11871 12819 +3 9987 575 10733 +3 9616 9732 9615 +3 10802 10803 10927 +3 8605 8604 8497 +3 368 258 7427 +3 10394 10514 3960 +3 6113 5982 6114 +3 16152 16014 21873 +3 8770 10363 7576 +3 8868 1174 9116 +3 12827 11634 13294 +3 12919 10498 10817 +3 11737 11821 11736 +3 1311 18565 18468 +3 6770 4265 694 +3 11024 4507 4640 +3 6291 6419 6418 +3 6929 6930 7028 +3 29087 29086 28951 +3 6931 7030 7029 +3 6930 6931 7029 +3 7030 7134 7133 +3 7029 7030 7133 +3 7134 7241 7240 +3 7133 7134 7240 +3 11181 11307 11306 +3 5348 16069 14735 +3 35894 35860 35664 +3 10292 10412 10411 +3 9069 9177 9068 +3 11188 10565 10445 +3 18495 6082 5949 +3 346 4519 1506 +3 6377 7540 7545 +3 7462 127 6636 +3 514 630 629 +3 29430 35374 19936 +3 18138 15560 14480 +3 9069 9068 8961 +3 8962 9069 8961 +3 11307 10270 11083 +3 10317 10316 10197 +3 9272 9271 9162 +3 9055 9054 8947 +3 30714 30713 30579 +3 29562 29695 27553 +3 8992 10598 10593 +3 8988 8992 10593 +3 8231 8844 9395 +3 10610 8150 8231 +3 8991 404 11363 +3 24398 22195 18930 +3 8263 10223 10224 +3 7546 7698 10842 +3 11318 7534 9412 +3 7366 11230 7582 +3 7145 7362 11283 +3 11158 11284 11157 +3 9032 9140 9031 +3 9249 9248 9139 +3 8924 8923 8816 +3 9140 9249 9139 +3 7602 7601 7487 +3 8282 8281 8173 +3 7687 7920 8142 +3 9590 9706 9589 +3 8287 8394 8393 +3 7933 8879 8767 +3 8179 8287 8178 +3 14117 14118 14213 +3 11461 31651 31650 +3 10030 7687 10885 +3 8297 8404 8296 +3 9014 10618 10615 +3 8290 8291 8397 +3 11364 9900 11363 +3 7307 7216 8979 +3 7308 7307 8979 +3 7832 7831 7716 +3 7717 7832 7716 +3 10734 9417 7924 +3 8792 6487 6488 +3 9591 9590 9474 +3 9475 9591 9474 +3 9250 9362 9249 +3 9477 9476 9361 +3 7535 7510 9209 +3 9316 7535 9209 +3 9118 9173 9187 +3 7356 9118 9187 +3 7576 7462 6636 +3 127 5735 220 +3 1999 10096 3334 +3 35378 35749 35835 +3 7842 7958 7957 +3 7841 7842 7957 +3 7591 7620 9006 +3 9010 10615 10613 +3 7964 8079 7963 +3 8726 8833 8725 +3 7421 11009 9779 +3 11330 9412 7309 +3 10437 10557 10436 +3 8677 7168 8218 +3 8962 8961 8854 +3 8855 8962 8854 +3 9172 11326 1290 +3 7722 7837 7721 +3 9348 9349 9463 +3 9464 9580 9579 +3 8748 8855 8854 +3 8747 8748 8854 +3 25271 12139 25272 +3 10803 10802 10678 +3 7993 9407 11230 +3 162 4502 6670 +3 7504 7503 7391 +3 7392 7504 7391 +3 7086 9984 9868 +3 11679 11760 11678 +3 10335 6963 11200 +3 8022 8352 8026 +3 10459 9898 11353 +3 11352 10459 11353 +3 8378 8485 8484 +3 7386 7385 7274 +3 10448 10568 10106 +3 10219 8195 7255 +3 8512 8511 8404 +3 8405 8512 8404 +3 10369 10489 9322 +3 9449 10619 10620 +3 10803 10928 10927 +3 8218 7168 8548 +3 8534 8641 8533 +3 8748 8747 8640 +3 8147 10874 10340 +3 9459 10354 9918 +3 10390 11281 9185 +3 13822 13821 13723 +3 193 4515 38 +3 9871 7702 10826 +3 9253 9254 9365 +3 8341 9008 7702 +3 10837 8341 7702 +3 8341 9761 9876 +3 9008 8341 9876 +3 9761 10486 10366 +3 9876 9761 10366 +3 10486 10755 8220 +3 10366 10486 8220 +3 7797 10151 8220 +3 10755 7797 8220 +3 7918 8108 10151 +3 7797 7918 10151 +3 7918 8028 8675 +3 8108 7918 8675 +3 9434 9320 8675 +3 8028 9434 8675 +3 10609 10733 9320 +3 9434 10609 9320 +3 575 9987 3866 +3 10609 9987 10733 +3 10928 11054 11053 +3 12209 8574 4123 +3 7829 7945 7944 +3 10927 10928 11053 +3 896 7820 1015 +3 8641 8640 8533 +3 15116 15117 16780 +3 35519 30420 35939 +3 9335 3582 10148 +3 413 412 7238 +3 9974 9976 13870 +3 8561 8226 13413 +3 12584 12585 12674 +3 35561 35417 35736 +3 17149 16984 19594 +3 7619 919 920 +3 6544 6418 10692 +3 35531 35445 27024 +3 27736 27735 27618 +3 6932 7031 7030 +3 6931 6932 7030 +3 7031 7135 7134 +3 7030 7031 7134 +3 7135 7242 7241 +3 7134 7135 7241 +3 11180 11181 11306 +3 1634 8203 1751 +3 8534 8533 8426 +3 8427 8534 8426 +3 10222 5959 6090 +3 6221 6091 6092 +3 9234 9346 9345 +3 9345 9346 9460 +3 9346 9461 9460 +3 9460 9461 9576 +3 8101 8212 8100 +3 9461 9577 9576 +3 11306 11307 11083 +3 6636 127 220 +3 8841 8948 8840 +3 10270 8126 7303 +3 8948 9055 8947 +3 9163 9162 9054 +3 7733 7732 7617 +3 7618 7733 7617 +3 10145 7589 7567 +3 10104 10145 7567 +3 9395 7877 9756 +3 7877 7176 9756 +3 10387 9527 9396 +3 7562 7550 9509 +3 13483 13581 9652 +3 10710 8263 10224 +3 11318 9412 11336 +3 7366 7582 9338 +3 11284 7145 11283 +3 10579 10442 7362 +3 10294 10414 10413 +3 10293 10294 10413 +3 8496 8603 8495 +3 8710 8709 8602 +3 7602 7717 7716 +3 7488 7602 7487 +3 10127 9084 11268 +3 11224 10127 11268 +3 8501 8608 8607 +3 7040 7041 316 +3 8397 8398 8504 +3 7686 7687 10030 +3 8287 8286 8178 +3 7686 10974 7687 +3 13607 35560 5560 +3 8394 8501 8500 +3 18138 14480 19107 +3 8873 8980 9678 +3 8132 8021 8979 +3 14824 16989 14825 +3 7216 8132 8979 +3 19528 181 21062 +3 7760 7924 7789 +3 7760 10734 7924 +3 9707 9706 9590 +3 9591 9707 9590 +3 9141 9250 9140 +3 9362 9361 9249 +3 11059 9800 5738 +3 9095 8151 1496 +3 11287 9118 7356 +3 11286 11287 7356 +3 1525 13792 3993 +3 35566 35815 35652 +3 9414 8258 9193 +3 10480 9414 9193 +3 7958 8073 8072 +3 7957 7958 8072 +3 10583 10594 7591 +3 7620 9010 9006 +3 8940 8939 8832 +3 8833 8940 8832 +3 9412 7421 7309 +3 10626 7694 6960 +3 8357 8677 8218 +3 35666 35586 35402 +3 7986 8101 7985 +3 8212 8211 8100 +3 10639 10763 10762 +3 9577 9693 9692 +3 10888 10887 10762 +3 5824 7530 5956 +3 35365 11500 11800 +3 6088 6087 5956 +3 22417 22516 22515 +3 8879 3843 8986 +3 8190 8189 8078 +3 7538 8224 7896 +3 8079 8190 8078 +3 8298 8297 8189 +3 1494 14 12201 +3 11820 11819 11735 +3 11366 8022 8026 +3 8352 8033 7061 +3 7857 10856 9898 +3 10459 7857 9898 +3 7274 11631 11632 +3 12771 12863 12862 +3 10106 10219 7255 +3 7498 7497 7385 +3 8619 8618 8511 +3 10613 10615 10448 +3 1253 9216 3326 +3 8512 8619 8511 +3 11858 12597 12508 +3 11009 10489 10369 +3 8641 8748 8640 +3 8548 11334 10744 +3 10638 10639 10762 +3 7870 7986 7869 +3 7754 7869 7753 +3 5817 17854 5684 +3 3720 1859 299 +3 34276 34414 34275 +3 6767 7681 124 +3 9643 8341 10837 +3 8419 9643 10837 +3 9643 9762 9761 +3 8341 9643 9761 +3 9762 10608 10486 +3 9761 9762 10486 +3 10608 7792 10755 +3 10486 10608 10755 +3 8676 7797 10755 +3 7792 8676 10755 +3 7802 7918 7797 +3 8676 7802 7797 +3 7802 7912 8028 +3 7918 7802 8028 +3 8241 9434 8028 +3 7912 8241 8028 +3 10487 10609 9434 +3 8241 10487 9434 +3 7422 9987 10609 +3 10487 7422 10609 +3 6355 6354 8520 +3 31549 31476 31550 +3 11054 11181 11180 +3 13185 8157 7452 +3 7870 7869 7754 +3 7755 7870 7754 +3 46 21289 23954 +3 9606 9605 9489 +3 1980 7168 64 +3 4791 4926 13674 +3 10403 10402 10282 +3 220 5735 4530 +3 10852 16303 16158 +3 30633 30027 28997 +3 12165 12248 12164 +3 12333 12332 12247 +3 22409 22507 22506 +3 7674 8349 8120 +3 28355 28356 30021 +3 27619 27736 27618 +3 6933 7032 7031 +3 15788 15652 19112 +3 7032 7136 7135 +3 7031 7032 7135 +3 7136 7243 7242 +3 7135 7136 7242 +3 35401 35788 35865 +3 7168 1980 11334 +3 7755 7754 7639 +3 7640 7755 7639 +3 20536 20535 35521 +3 8147 10340 7438 +3 9865 10874 7886 +3 9128 9237 9236 +3 9127 9128 9236 +3 8320 8319 8211 +3 10049 10167 10166 +3 11083 10270 7303 +3 8212 8320 8211 +3 8126 8677 8357 +3 7303 8126 8357 +3 9024 9025 9132 +3 8841 8840 8733 +3 10898 4372 4373 +3 17154 16989 3591 +3 7589 8992 8988 +3 7848 7847 7732 +3 7176 7670 7441 +3 7567 7589 8988 +3 7761 1056 7762 +3 9756 7176 7441 +3 2345 2885 2878 +3 9527 7562 9509 +3 10698 10699 8458 +3 10961 9083 5308 +3 9753 7366 9338 +3 11230 11336 7582 +3 7145 10579 7362 +3 11367 9305 10442 +3 10414 10534 10533 +3 10294 10293 10174 +3 8817 8816 8709 +3 8603 8710 8602 +3 7488 7487 7375 +3 7376 7488 7375 +3 8380 8487 8486 +3 1809 19092 18991 +3 10168 10287 10286 +3 10287 10407 10286 +3 7486 7600 7485 +3 8659 8766 10944 +3 10974 10861 7920 +3 7953 7954 8068 +3 8598 8705 8704 +3 8168 8276 8275 +3 7910 10935 9323 +3 8918 8919 9025 +3 11594 26948 11525 +3 24295 26681 24725 +3 4657 4925 5060 +3 14869 14870 14988 +3 11241 7789 11069 +3 11241 7760 7789 +3 9822 9821 9706 +3 9707 9822 9706 +3 8925 8926 9032 +3 9033 9141 9140 +3 8814 8921 8920 +3 8058 8059 8169 +3 11287 11286 11160 +3 11161 11287 11160 +3 8439 8119 9536 +3 810 93 11867 +3 7355 9414 10480 +3 10258 7355 10480 +3 8073 8184 8183 +3 8291 8292 8398 +3 10576 10456 105 +3 6637 10760 8553 +3 9047 9046 8939 +3 8940 9047 8939 +3 6547 6548 6672 +3 2605 2606 2741 +3 10337 7452 8157 +3 9703 9704 9818 +3 12079 12078 11997 +3 2353 2345 11096 +3 10854 11336 11330 +3 2885 8879 8772 +3 10222 7530 7998 +3 24885 26792 24240 +3 714 832 712 +3 7530 10222 8131 +3 8190 8298 8189 +3 7240 7241 415 +3 12498 12588 12497 +3 8405 8404 8297 +3 12678 12677 12587 +3 8349 810 8439 +3 11736 11820 11735 +3 11130 12128 29 +3 8026 8352 7061 +3 8033 8225 8135 +3 1056 1618 7762 +3 7761 7762 7166 +3 20790 20872 20871 +3 10204 10205 13998 +3 7386 7498 7385 +3 14453 14504 14503 +3 10568 10219 10106 +3 7612 7611 7497 +3 8726 8725 8618 +3 10594 7620 7591 +3 10489 9436 9322 +3 8619 8726 8618 +3 9639 11334 9743 +3 5183 10442 9305 +3 8101 8100 7985 +3 10744 9639 10099 +3 2785 2649 9068 +3 9696 9811 9810 +3 3318 3191 5039 +3 5039 3191 9225 +3 13518 14067 176 +3 6799 6673 6800 +3 9902 9643 8419 +3 10837 9871 8035 +3 9902 9763 9762 +3 9643 9902 9762 +3 9763 10247 10608 +3 9762 9763 10608 +3 10247 7793 7792 +3 10608 10247 7792 +3 8569 8676 7792 +3 7793 8569 7792 +3 9872 7802 8676 +3 8569 9872 8676 +3 7914 7912 7802 +3 9872 7914 7802 +3 7914 7791 8241 +3 7912 7914 8241 +3 7902 10487 8241 +3 7791 7902 8241 +3 7219 7422 10487 +3 7902 7219 10487 +3 13134 13133 13039 +3 7219 10965 7422 +3 7597 7712 7596 +3 10457 136 10563 +3 7986 7985 7869 +3 483 7542 484 +3 5956 7530 8131 +3 10669 10793 10668 +3 3866 10965 334 +3 8275 8276 8382 +3 11038 11165 11164 +3 23274 4516 14908 +3 5871 8655 2635 +3 8273 8380 8272 +3 1593 1711 1710 +3 2253 9773 11693 +3 22311 22312 22408 +3 14999 15000 15122 +3 21506 13698 21598 +3 27736 27851 27850 +3 6934 7033 7032 +3 6932 6933 7031 +3 7033 7137 7136 +3 7032 7033 7136 +3 7244 7243 7136 +3 7137 7244 7136 +3 8313 8420 1870 +3 12932 12205 12042 +3 21467 21377 11506 +3 4772 6393 6543 +3 1407 1406 916 +3 9463 9464 9579 +3 27735 27736 27850 +3 10662 10663 10786 +3 8427 8426 8319 +3 430 429 7148 +3 35727 35916 35763 +3 8320 8427 8319 +3 25353 28239 28122 +3 35634 25130 25129 +3 16789 14611 5430 +3 7309 7421 9779 +3 8229 9537 8239 +3 8948 8947 8840 +3 9469 9470 9585 +3 7674 8229 8239 +3 7670 8022 11366 +3 8597 8704 8703 +3 10387 9396 1618 +3 7441 7670 11366 +3 8888 8994 2128 +3 1056 10387 1618 +3 9298 9297 10698 +3 7774 7775 8994 +3 11367 10570 9305 +3 8978 9753 7764 +3 8084 8559 10569 +3 10570 8084 10569 +3 10579 11367 10442 +3 10570 10569 9305 +3 10175 10294 10174 +3 9940 10057 9939 +3 8817 8924 8816 +3 8710 8817 8709 +3 7376 7375 7264 +3 7265 7376 7264 +3 22408 22409 22506 +3 6246 6374 6245 +3 9757 10952 10715 +3 11063 9757 10715 +3 7599 7600 7714 +3 7600 7715 7714 +3 10170 10289 10169 +3 10051 10052 10169 +3 7828 7829 7944 +3 8140 8029 11068 +3 8917 8918 9024 +3 4393 10220 5057 +3 9667 8872 9869 +3 3457 10337 8657 +3 26720 31561 26721 +3 5959 8329 8149 +3 10595 11069 8244 +3 10595 11241 11069 +3 9937 9938 10054 +3 10173 10292 10291 +3 8712 8819 8711 +3 9032 9033 9140 +3 8814 8813 8706 +3 18718 18318 3731 +3 10908 11034 11033 +3 10907 10908 11033 +3 9981 8331 9536 +3 8119 9981 9536 +3 7355 10258 10494 +3 10616 7355 10494 +3 8399 8506 8505 +3 8398 8399 8505 +3 10700 8775 10575 +3 10697 10456 10576 +3 9155 9154 9046 +3 9263 9264 9375 +3 28187 28136 27057 +3 27529 26944 453 +3 7474 7577 7586 +3 4509 10902 11028 +3 10307 10427 10426 +3 9948 10065 9947 +3 9964 9963 9847 +3 10521 10520 10400 +3 8329 10222 9525 +3 7998 9525 10222 +3 12083 12082 12001 +3 6090 5959 6091 +3 2102 1601 1602 +3 11634 13389 13294 +3 14 3061 5602 +3 16078 16221 13131 +3 10097 8904 7580 +3 3340 12662 12659 +3 7061 8033 8135 +3 10966 7580 7876 +3 8225 7580 10966 +3 8135 8225 10966 +3 7398 7761 7166 +3 8150 8844 8231 +3 12845 13020 12220 +3 10266 10864 9398 +3 8258 10027 11101 +3 9193 8258 11101 +3 7498 7612 7497 +3 8072 8073 8183 +3 105 6637 8553 +3 10760 10594 10583 +3 8833 8832 8725 +3 9047 9155 9046 +3 26510 26606 26509 +3 7399 26852 26848 +3 8124 7928 10214 +3 8272 8271 8163 +3 10188 10187 10069 +3 338 2608 5203 +3 1714 1597 1715 +3 7191 13774 21475 +3 7148 7256 430 +3 9064 6742 9096 +3 11193 9902 8482 +3 8482 9902 8419 +3 9649 9763 9902 +3 11193 9649 9902 +3 9649 10128 10247 +3 9763 9649 10247 +3 10128 9433 7793 +3 10247 10128 7793 +3 8783 8569 7793 +3 9433 8783 7793 +3 8440 9872 8569 +3 8783 8440 8569 +3 10360 7914 9872 +3 8440 10360 9872 +3 10360 10989 7791 +3 7914 10360 7791 +3 7442 7902 7791 +3 10989 7442 7791 +3 9986 7219 7902 +3 7442 9986 7902 +3 10836 10965 7219 +3 9986 10836 7219 +3 2903 5864 10758 +3 10836 7250 10965 +3 9894 8124 9009 +3 12002 12001 11917 +3 10399 10398 10278 +3 10664 10788 10787 +3 7553 8334 7668 +3 9347 9462 9461 +3 9148 9257 9147 +3 9369 9368 9256 +3 10794 10919 10793 +3 8068 8067 7952 +3 8379 8380 8486 +3 11832 11918 11831 +3 9469 9585 9584 +3 9898 8888 2475 +3 6919 7407 22327 +3 27295 18435 29549 +3 6935 7034 7033 +3 6933 34971 6934 +3 7034 7138 7137 +3 7033 7034 7137 +3 7245 7244 7137 +3 7138 7245 7137 +3 6541 6416 8011 +3 3451 8843 5695 +3 2685 33927 2550 +3 8254 8367 10103 +3 9099 9100 10649 +3 11506 7191 21475 +3 10071 10189 10070 +3 10279 10399 10278 +3 11039 11166 11038 +3 9983 10218 10937 +3 8697 8804 8696 +3 35929 3178 35375 +3 26924 26925 27042 +3 27058 28374 28371 +3 7733 7848 7732 +3 7964 7963 7847 +3 9199 7893 7894 +3 7848 7964 7847 +3 8826 8827 8933 +3 7826 7942 7941 +3 1290 2929 10810 +3 9172 1290 10810 +3 14104 14105 14200 +3 9527 9509 9396 +3 9596 9712 9711 +3 8888 7774 8994 +3 9082 8111 8559 +3 10699 3190 8458 +3 9593 9709 9592 +3 8084 9082 8559 +3 9709 9824 9708 +3 9940 9939 9823 +3 9824 9940 9823 +3 10057 10056 9939 +3 10175 10174 10056 +3 10057 10175 10056 +3 8923 8924 9030 +3 8924 9031 9030 +3 7053 7054 7157 +3 7158 7265 7264 +3 11120 7546 9065 +3 14825 16989 17154 +3 8224 10580 11120 +3 9757 11063 7469 +3 7714 7715 7829 +3 7715 7830 7829 +3 10289 10288 10169 +3 9819 9935 9934 +3 8898 9116 10684 +3 8337 8444 10490 +3 1506 4519 132 +3 6958 7896 8444 +3 6546 6421 6547 +3 11834 11920 27297 +3 7148 319 7044 +3 7618 7505 919 +3 8993 8244 8132 +3 8993 10595 8244 +3 10055 10173 10172 +3 10054 10055 10172 +3 8391 8498 8390 +3 8819 8926 8925 +3 8385 8386 8492 +3 8921 9028 8920 +3 10659 10658 10536 +3 10537 10659 10536 +3 8880 7533 8331 +3 8776 7993 7142 +3 10848 11226 9752 +3 9775 10848 9752 +3 8506 8613 8612 +3 8505 8506 8612 +3 10575 10697 10576 +3 10456 6637 105 +3 9491 9490 9375 +3 9607 9606 9490 +3 27851 27967 27966 +3 27042 27043 27159 +3 7430 7318 263 +3 7326 7438 9666 +3 11166 11165 11038 +3 10318 10317 10198 +3 9037 9036 8929 +3 8930 9037 8929 +3 8976 8329 9524 +3 9411 8976 9524 +3 12499 12589 12498 +3 8329 8976 8149 +3 8002 13195 12031 +3 2608 4110 3202 +3 5203 2608 3202 +3 1739 1525 3993 +3 35542 35408 35915 +3 27850 27851 27966 +3 11079 9185 10720 +3 8866 11079 10720 +3 9185 8150 10610 +3 10720 9185 10610 +3 7398 7166 9091 +3 8250 7398 9091 +3 10371 10266 9398 +3 7146 7416 10864 +3 18491 23224 23220 +3 3435 3296 3297 +3 8184 8292 8291 +3 10843 9775 10773 +3 8553 10760 10583 +3 8183 8184 8291 +3 9155 9264 9263 +3 8775 10697 10575 +3 9595 9596 9711 +3 9154 9155 9263 +3 6964 35932 14162 +3 27967 28084 28083 +3 7769 11317 11191 +3 8284 8283 8175 +3 8179 8178 8067 +3 3436 3569 3568 +3 9345 2606 9234 +3 13418 13474 35376 +3 1991 1990 1870 +3 11193 8482 9233 +3 14456 433 3267 +3 9325 9650 9649 +3 11193 9325 9649 +3 9650 10732 10128 +3 9649 9650 10128 +3 10732 9319 9433 +3 10128 10732 9433 +3 8463 8783 9433 +3 9319 8463 9433 +3 9009 8440 8783 +3 8463 9009 8783 +3 10214 10360 8440 +3 9009 10214 8440 +3 9562 10989 10360 +3 10214 9562 10360 +3 9562 8564 7442 +3 10989 9562 7442 +3 7528 9986 7442 +3 8564 7528 7442 +3 11088 10836 9986 +3 7528 11088 9986 +3 10377 7250 10836 +3 11088 10377 10836 +3 35874 35897 35367 +3 7577 106 10377 +3 6506 6380 10501 +3 10468 9884 9199 +3 9576 9577 9692 +3 8707 8814 8706 +3 7270 7269 7162 +3 13483 9652 8009 +3 9693 9808 9807 +3 9733 9732 9616 +3 7152 7259 7151 +3 7034 6935 114 +3 7869 7868 7753 +3 7034 114 7035 +3 5452 10815 10569 +3 27966 27967 28083 +3 35427 35619 35541 +3 8421 1992 8420 +3 9644 34875 34599 +3 7034 7035 7138 +3 22528 9644 34599 +3 35814 35936 35367 +3 10162 10161 10043 +3 10354 9432 9918 +3 9816 9932 9931 +3 7820 896 897 +3 9830 9831 9946 +3 10743 7397 7360 +3 15904 11118 7361 +3 9780 9666 9432 +3 11115 11388 8889 +3 7397 7474 7360 +3 7648 9064 7741 +3 9154 9263 9262 +3 10767 10892 10766 +3 7271 7382 7270 +3 9723 9838 9722 +3 9376 9491 9375 +3 11170 11171 11296 +3 11297 11208 8144 +3 9484 9485 9600 +3 9041 9040 8933 +3 1290 6893 2929 +3 6893 7647 2929 +3 8156 10859 7694 +3 2902 4518 1616 +3 32096 32196 32095 +3 28084 28201 28200 +3 13531 13629 13530 +3 10084 10085 10203 +3 10739 13288 12919 +3 28083 28084 28200 +3 12369 12115 11865 +3 12483 13983 11865 +3 11779 12483 11865 +3 12287 11876 12483 +3 12483 11876 13983 +3 33894 33893 33759 +3 29556 35598 27756 +3 11664 11744 11663 +3 11828 11827 11743 +3 13374 14056 13961 +3 14254 21029 8223 +3 22525 22624 22524 +3 22723 22722 22623 +3 22624 22723 22623 +3 22822 22821 22722 +3 22723 22822 22722 +3 22921 22920 22821 +3 22822 22921 22821 +3 23020 23019 22920 +3 22921 23020 22920 +3 23118 23117 23019 +3 23020 23118 23019 +3 23216 23215 23117 +3 23118 23216 23117 +3 3486 3615 17625 +3 18358 18355 19491 +3 21029 20406 20364 +3 21217 21216 20402 +3 23209 23307 23306 +3 23110 23111 23208 +3 16016 14841 14960 +3 16303 16016 14960 +3 14960 14841 13335 +3 14841 3038 13335 +3 3038 16309 16165 +3 13335 3038 16165 +3 16309 15880 16163 +3 16165 16309 16163 +3 15880 13339 13338 +3 16163 15880 13338 +3 23208 23209 23306 +3 9218 3337 1761 +3 23307 23404 23403 +3 12133 14164 12216 +3 14164 12912 12729 +3 13412 10852 4542 +3 33869 34004 33868 +3 10008 2791 8045 +3 12906 15198 9783 +3 10852 13412 16303 +3 23446 6265 23154 +3 6265 12906 9783 +3 15115 15490 21403 +3 15365 4939 23409 +3 29355 30220 35779 +3 19365 19417 18968 +3 7520 33336 33231 +3 14164 5856 12216 +3 12665 28723 19520 +3 34284 34283 34145 +3 31631 31726 31630 +3 28723 30823 19520 +3 34958 34957 34828 +3 34018 34154 34017 +3 1853 11628 5425 +3 35932 5425 14162 +3 13379 9218 1761 +3 1853 2088 12834 +3 35908 35801 35647 +3 12133 12216 3337 +3 11628 1853 12834 +3 28318 28317 28200 +3 2088 12194 12045 +3 12834 2088 12045 +3 12194 11485 12115 +3 12045 12194 12115 +3 13758 14909 13757 +3 17969 17876 17877 +3 2634 20811 20049 +3 13336 15409 13857 +3 13379 1761 14084 +3 11249 13379 14084 +3 13796 11779 12115 +3 19668 13394 901 +3 11485 13796 12115 +3 13125 12483 11779 +3 13796 13125 11779 +3 7885 7758 9113 +3 13125 12287 12483 +3 12528 12618 12527 +3 16767 13290 21505 +3 11744 11828 11743 +3 12595 12685 12594 +3 9452 15702 10148 +3 15910 8483 16988 +3 8540 12486 8647 +3 25062 25061 26211 +3 13866 19933 15868 +3 9771 14323 8527 +3 15047 11399 12807 +3 21203 21202 6518 +3 13598 35674 3193 +3 6265 9783 23154 +3 18418 18514 23419 +3 31992 31991 31890 +3 1023 12746 23154 +3 15027 19769 14906 +3 19212 18651 23020 +3 31561 26720 31650 +3 20471 20556 20470 +3 33263 33372 33371 +3 9218 12133 3337 +3 20557 20556 20471 +3 26719 11461 31650 +3 35425 35395 35940 +3 15600 17796 15674 +3 19117 18317 19518 +3 14253 7880 1023 +3 12746 23446 23154 +3 8674 7880 14253 +3 13786 8674 14253 +3 13203 8674 13786 +3 7880 12746 1023 +3 13203 14739 16460 +3 14739 13203 13786 +3 16772 16461 23155 +3 16461 13203 16460 +3 20009 16772 20090 +3 22063 22055 21125 +3 22063 2653 22055 +3 21126 22063 21125 +3 2653 2760 22055 +3 2499 13394 23274 +3 13339 13758 13757 +3 16461 16460 23155 +3 17129 13422 17097 +3 35504 35818 35632 +3 32243 32242 32142 +3 11461 26719 11526 +3 16772 23155 20090 +3 16931 13055 9186 +3 26721 31560 26722 +3 35436 11364 35576 +3 15674 17796 19698 +3 13337 16931 15281 +3 34674 34673 34545 +3 15876 15737 13654 +3 35483 35507 35717 +3 13885 13337 13857 +3 17355 17354 17286 +3 18748 18846 18747 +3 16931 9186 15281 +3 35356 35496 14088 +3 16775 15621 3794 +3 17290 27404 13708 +3 15595 11257 15594 +3 16453 15605 15473 +3 23400 15435 23399 +3 30551 30552 30685 +3 33382 33495 33381 +3 15863 15725 171 +3 33874 34009 33873 +3 31530 31531 31617 +3 23056 15471 22957 +3 34834 34833 34705 +3 2235 23056 8478 +3 22068 16156 22067 +3 3183 19980 7788 +3 15471 16921 22957 +3 22617 22616 22517 +3 22518 22617 22517 +3 31618 31713 31712 +3 34701 34829 34828 +3 8305 1853 10603 +3 35940 5425 35932 +3 23310 23407 23309 +3 14280 2088 1853 +3 21125 22055 21124 +3 2760 15730 22052 +3 8305 14280 1853 +3 23407 23406 23309 +3 7246 12194 2088 +3 14280 7246 2088 +3 11402 11485 12194 +3 7246 11402 12194 +3 5696 17088 17089 +3 22425 33970 33445 +3 22622 22522 22523 +3 22623 22722 22622 +3 30161 30294 30160 +3 22664 24232 13804 +3 11402 11447 13796 +3 22390 25221 23758 +3 11485 11402 13796 +3 11447 13108 13125 +3 13796 11447 13125 +3 26821 26822 26937 +3 35922 35688 35872 +3 691 2938 13334 +3 12753 439 1254 +3 12595 12594 12504 +3 12505 12595 12504 +3 13504 12281 13285 +3 11831 11917 11830 +3 14188 10440 10561 +3 3202 4110 2123 +3 12625 22269 23503 +3 16306 16453 15473 +3 15605 15028 15153 +3 21243 12625 23503 +3 23949 24816 24695 +3 15473 15605 15153 +3 21334 24579 25015 +3 15028 6004 7529 +3 15153 15028 7529 +3 3667 3798 7529 +3 6004 3667 7529 +3 10233 16612 3798 +3 3667 10233 3798 +3 35423 35596 35433 +3 27376 29008 29145 +3 30077 30078 11551 +3 35702 35786 35910 +3 28129 28884 28751 +3 11884 23521 24094 +3 30078 30077 28358 +3 20759 27504 27621 +3 15074 34734 15608 +3 15725 15863 15072 +3 15863 12567 15072 +3 11956 21402 22938 +3 15435 15863 171 +3 28359 30078 28358 +3 12904 14990 15220 +3 16459 12904 15220 +3 3206 1967 14990 +3 35478 35664 35482 +3 12904 3206 14990 +3 16755 25606 25605 +3 3859 12825 14589 +3 31560 26721 31561 +3 20326 20241 14323 +3 1962 3462 1967 +3 3206 1962 1967 +3 13337 15281 13857 +3 12338 11563 3462 +3 1962 12338 3462 +3 12338 14950 9062 +3 20532 20614 20613 +3 11563 12338 9062 +3 23037 23043 16952 +3 35000 22419 22516 +3 22464 24123 24124 +3 12619 12618 12528 +3 22716 22715 22616 +3 23043 15481 16952 +3 14950 23074 16615 +3 12367 14082 13383 +3 9062 14950 16615 +3 23074 4416 15340 +3 16615 23074 15340 +3 4416 21392 12896 +3 21406 18837 21316 +3 16196 16341 14082 +3 12529 12619 12528 +3 12196 12044 25004 +3 22722 22721 22622 +3 12709 12708 12618 +3 15340 4416 12896 +3 24647 24646 28257 +3 21392 19990 20703 +3 12896 21392 20703 +3 19990 20452 20450 +3 20703 19990 20450 +3 20452 21231 21220 +3 34146 34145 34009 +3 35073 35202 35072 +3 34706 34834 34705 +3 34303 34441 34302 +3 10465 7991 8680 +3 33867 33866 33732 +3 24304 26080 24649 +3 25016 25021 25312 +3 24305 24304 24649 +3 11257 15876 13654 +3 33733 33867 33732 +3 14182 1382 1644 +3 10361 8305 11411 +3 10603 11411 8305 +3 13034 14280 8305 +3 10361 13034 8305 +3 7675 7559 14185 +3 7575 8439 13476 +3 14272 7246 14280 +3 11461 11526 11525 +3 13034 14272 14280 +3 11368 11402 7246 +3 14272 11368 7246 +3 11075 11447 11402 +3 11368 11075 11402 +3 20450 20452 21220 +3 11155 13108 11447 +3 13674 13702 794 +3 21231 22253 22251 +3 14106 14107 14202 +3 14117 14213 14212 +3 13673 14161 13871 +3 13383 13673 13871 +3 5856 12729 9922 +3 13383 13871 12821 +3 12216 5856 12301 +3 12729 13383 12821 +3 3337 12216 12301 +3 12729 12821 9922 +3 1029 3337 12301 +3 5856 9922 12301 +3 10482 11956 14831 +3 35772 35672 35508 +3 12798 12890 12797 +3 21402 23043 22938 +3 13171 13170 13076 +3 22413 22511 22412 +3 1761 3337 1029 +3 21220 21231 22251 +3 11075 11155 11447 +3 8339 35423 35579 +3 11155 12282 13108 +3 22253 15151 10962 +3 11507 439 13860 +3 13170 13075 13076 +3 10216 20662 371 +3 11765 11849 11764 +3 13266 13265 13170 +3 13745 13744 13646 +3 21383 21384 22659 +3 13171 13266 13170 +3 13362 13361 13265 +3 10236 10689 16756 +3 10689 10236 4064 +3 20753 25112 20755 +3 12685 12684 12594 +3 439 11507 12844 +3 12001 12000 11916 +3 11998 12079 11997 +3 35552 35495 35675 +3 8673 9897 8780 +3 14044 16599 14238 +3 16599 10236 16756 +3 28423 28303 21608 +3 15048 13428 20156 +3 13716 13814 13813 +3 16599 16756 14238 +3 22251 22253 10962 +3 18181 19778 18630 +3 15151 21296 21295 +3 10962 15151 21295 +3 12987 12893 21295 +3 21296 12987 21295 +3 12987 20404 21391 +3 12893 12987 21391 +3 6261 22 21391 +3 20431 19002 20134 +3 20404 6261 21391 +3 26080 25304 25079 +3 35363 35415 35839 +3 13266 13362 13265 +3 13949 15277 22 +3 12709 12798 12708 +3 13457 13456 13361 +3 12619 12709 12618 +3 12890 12889 12797 +3 10035 12919 3732 +3 12798 12797 12708 +3 6261 13949 22 +3 14182 1644 13220 +3 15065 15607 15277 +3 13949 15065 15277 +3 22336 22337 15607 +3 15065 22336 15607 +3 15592 15192 22337 +3 22336 15592 22337 +3 15592 20454 22046 +3 15192 15592 22046 +3 3089 34203 3090 +3 31376 31443 31375 +3 20318 20315 16601 +3 34303 34302 34164 +3 33114 33113 33007 +3 34002 34001 33866 +3 33867 34002 33866 +3 13404 10361 11441 +3 8882 14248 20011 +3 35771 11441 11411 +3 20454 22049 23343 +3 14301 11261 130 +3 21126 21125 20318 +3 22046 20454 23343 +3 12654 13034 10361 +3 21591 15735 20498 +3 13404 12654 10361 +3 14173 14272 13034 +3 12654 14173 13034 +3 4125 11368 14272 +3 14173 4125 14272 +3 4125 10157 11075 +3 11368 4125 11075 +3 13507 11155 11075 +3 10157 13507 11075 +3 11639 12282 11155 +3 20389 20473 20388 +3 20321 21126 20318 +3 24405 12890 23729 +3 35628 35395 35425 +3 12506 12507 12596 +3 22511 22610 22609 +3 24233 20668 24400 +3 13652 13651 13553 +3 34416 34415 34277 +3 5604 1761 1029 +3 13507 11639 11155 +3 35549 35663 35775 +3 11639 14062 12282 +3 13042 13043 13136 +3 22049 20598 22849 +3 11881 13797 4922 +3 13179 11618 13086 +3 23343 22049 22849 +3 25438 30760 24714 +3 13472 13473 70 +3 12306 13376 13189 +3 11935 11934 11848 +3 11716 14182 12118 +3 13765 13764 10368 +3 22935 16152 14244 +3 11206 12601 13374 +3 10236 2758 4064 +3 22258 11956 10482 +3 12079 12161 12078 +3 35403 35784 35397 +3 14008 14009 14106 +3 11134 12046 11130 +3 12161 12160 12078 +3 24028 25233 24236 +3 24870 24502 23856 +3 20598 16775 12988 +3 30695 30694 30560 +3 22849 20598 12988 +3 28201 28318 28200 +3 13467 7454 13275 +3 28438 28437 28317 +3 13686 21768 21697 +3 19741 17563 19933 +3 35442 14168 35459 +3 20308 18177 17940 +3 20044 20125 20124 +3 20043 20044 20124 +3 14930 16952 14471 +3 13026 23419 17083 +3 13362 13457 13361 +3 13553 13552 13456 +3 21215 21213 20395 +3 13457 13553 13456 +3 11849 11935 11848 +3 12019 12018 11934 +3 11849 11848 11764 +3 12100 12099 12018 +3 12170 13179 13086 +3 11765 11764 11683 +3 12118 14182 13220 +3 11618 13472 70 +3 12118 13220 14271 +3 11154 10899 6386 +3 12285 11954 35857 +3 12214 12118 14271 +3 11358 20363 13088 +3 31458 31459 31530 +3 15409 13885 13857 +3 13954 21755 20403 +3 20210 20209 20124 +3 16924 15409 13336 +3 16765 16924 13336 +3 20125 20210 20124 +3 20296 20295 20209 +3 20210 20296 20209 +3 20381 20380 20295 +3 35789 35750 35869 +3 20296 20381 20295 +3 13553 13651 13552 +3 16936 14691 11946 +3 22938 23037 22731 +3 13651 13650 13552 +3 20465 20464 20380 +3 22938 23043 23037 +3 20381 20465 20380 +3 32900 33008 32899 +3 31556 31555 26617 +3 25879 25880 26021 +3 28997 27665 27410 +3 12915 13008 11571 +3 23114 23212 23113 +3 15347 12646 15746 +3 20550 20549 20464 +3 21146 2786 21067 +3 168 14484 7064 +3 14084 1761 5604 +3 1879 14084 5604 +3 35709 35678 35769 +3 12455 12366 13524 +3 6876 35826 18936 +3 35623 3735 35929 +3 17085 13323 22461 +3 35686 35565 35604 +3 20465 20550 20464 +3 21203 15338 21202 +3 11726 14186 11951 +3 20531 20532 20613 +3 23393 14910 23392 +3 13376 11726 11951 +3 20614 20695 20694 +3 16774 15347 16773 +3 10261 11955 8197 +3 13745 13843 13744 +3 14140 14044 14238 +3 10985 8136 2652 +3 20473 20472 20388 +3 12601 14056 13374 +3 34844 34843 34715 +3 20389 20388 20303 +3 34716 34844 34715 +3 34138 34137 34001 +3 33606 33733 33605 +3 14086 13404 11703 +3 11441 11703 13404 +3 12564 12654 13404 +3 14086 12564 13404 +3 14172 14173 12654 +3 12564 14172 12654 +3 11373 4125 14173 +3 14172 11373 14173 +3 13292 10157 4125 +3 11373 13292 4125 +3 24135 24377 24136 +3 25178 22010 25179 +3 11696 8001 5054 +3 20632 20631 20549 +3 20550 20632 20549 +3 31170 31171 31234 +3 12306 13189 11892 +3 13376 11951 13189 +3 12935 11892 14279 +3 12935 12306 11892 +3 11684 11765 11683 +3 12927 12935 14279 +3 22313 22410 22409 +3 11542 11609 11541 +3 5692 12170 13086 +3 21875 21780 22838 +3 11618 70 13086 +3 22216 22217 22312 +3 22312 22313 22409 +3 20965 22937 22838 +3 8114 12921 13566 +3 22244 20965 22838 +3 28318 28438 28317 +3 20363 20324 13088 +3 13325 13507 10157 +3 24047 24388 23527 +3 13292 13325 10157 +3 13325 13291 11639 +3 13507 13325 11639 +3 20713 20712 20631 +3 13291 14061 11639 +3 12300 10005 11100 +3 14180 12300 11100 +3 11100 10005 12209 +3 26012 26013 26154 +3 26298 26299 24504 +3 21655 18471 455 +3 23016 23114 23015 +3 10005 8574 12209 +3 29 40 12465 +3 12244 12243 12160 +3 13219 8671 13613 +3 20632 20713 20631 +3 20795 20794 20712 +3 20713 20795 20712 +3 20877 20876 20794 +3 20795 20877 20794 +3 20877 20957 20956 +3 20876 20877 20956 +3 12637 11440 4504 +3 20957 21040 21039 +3 2758 11440 12637 +3 35839 35773 23855 +3 28560 28559 28437 +3 13920 14018 13919 +3 11960 12915 11571 +3 7523 7638 7637 +3 27520 26940 27521 +3 13145 15023 15331 +3 15461 13145 15331 +3 17085 22461 13655 +3 21178 13851 21147 +3 13323 14871 22461 +3 13851 17085 13655 +3 20104 20105 20616 +3 13340 928 15732 +3 13298 12835 14081 +3 13787 15203 12960 +3 20956 20957 21039 +3 23410 23313 17982 +3 28438 28560 28437 +3 14039 14038 13940 +3 1039 7618 7619 +3 24504 25492 13658 +3 3926 13489 3930 +3 13370 111 9632 +3 19811 18491 18705 +3 13029 11805 2913 +3 7786 13962 9781 +3 11708 13682 8882 +3 28817 21812 21718 +3 35372 35459 6138 +3 32196 32195 32095 +3 28358 30077 30075 +3 20949 20950 21032 +3 12993 13087 14154 +3 4064 2758 12637 +3 23964 24200 12269 +3 16453 17755 16162 +3 11440 5696 4504 +3 32192 32191 32091 +3 20070 4549 14239 +3 20131 22266 4907 +3 34588 34587 34450 +3 31727 31726 31631 +3 31006 31005 30947 +3 34451 34450 34312 +3 33733 33732 33605 +3 34154 34292 34153 +3 13306 14086 12288 +3 35837 35489 11703 +3 11479 11478 30958 +3 11616 4796 11079 +3 11955 9111 8197 +3 11783 11784 4525 +3 9771 14346 20326 +3 27970 28087 28086 +3 12522 12521 12432 +3 12433 12522 12432 +3 15344 15343 16022 +3 21687 21594 22355 +3 12139 13210 13115 +3 13190 11895 13095 +3 11684 11683 11608 +3 11726 12477 12836 +3 11478 11542 11477 +3 11609 11684 11608 +3 11478 11477 11427 +3 11609 11608 11541 +3 11717 11637 11635 +3 11542 11541 11477 +3 23212 23211 23113 +3 11979 11635 11446 +3 23310 23309 23211 +3 23212 23310 23211 +3 24291 24299 25581 +3 14042 14140 14238 +3 12563 12564 14086 +3 12856 12857 12949 +3 13306 12563 14086 +3 11624 14172 12564 +3 12563 11624 12564 +3 3472 11373 14172 +3 11624 3472 14172 +3 14271 13220 11132 +3 13220 1644 11462 +3 8042 13292 11373 +3 1644 13962 11462 +3 3472 8042 11373 +3 12037 13325 13292 +3 12285 14271 11954 +3 8042 12037 13292 +3 14831 22938 22731 +3 12912 12367 12729 +3 21403 15490 21494 +3 13425 20102 20065 +3 19902 26495 22463 +3 22956 2790 21764 +3 13961 14059 2235 +3 31010 31071 31009 +3 19699 1975 18733 +3 22830 17084 12960 +3 22929 18313 22832 +3 13375 13374 13862 +3 13490 13593 12835 +3 11427 11477 31017 +3 11567 13285 12461 +3 11480 11479 30958 +3 11979 11717 11635 +3 28689 28688 28559 +3 13474 1174 8760 +3 35480 14271 12285 +3 13073 13167 13072 +3 13167 13262 13166 +3 23104 23202 23201 +3 35664 35860 35868 +3 13941 14039 13940 +3 16189 16333 3205 +3 12544 12201 11955 +3 35385 35376 13474 +3 14131 14227 14130 +3 6957 7445 900 +3 11248 7345 14229 +3 11645 1486 14226 +3 14134 14230 14133 +3 14230 11248 14229 +3 13742 13741 13643 +3 13644 13742 13643 +3 30487 35779 35694 +3 18300 21224 17911 +3 14232 8580 14231 +3 35675 11314 11976 +3 4549 13431 17099 +3 19881 17759 19882 +3 12341 12340 12255 +3 2634 20049 20048 +3 12625 15470 22269 +3 12211 2491 12296 +3 26244 23623 23542 +3 23584 23586 24623 +3 13120 33469 3099 +3 23662 26221 23794 +3 12116 13291 13325 +3 23909 25324 25323 +3 12037 12116 13325 +3 14158 14061 13291 +3 12116 14158 13291 +3 12300 14180 12363 +3 12278 12300 12363 +3 11844 11843 11759 +3 11661 11741 11660 +3 12035 13219 8089 +3 14117 14116 14018 +3 8671 448 13613 +3 10709 8683 14261 +3 12350 12349 12264 +3 35431 35751 35638 +3 22040 18471 21655 +3 22550 22650 13558 +3 28376 30153 30098 +3 12612 12611 12521 +3 4817 12601 11206 +3 20965 21048 22937 +3 16022 14846 11102 +3 16299 22932 14045 +3 11000 11791 9655 +3 11481 11480 26361 +3 13190 13095 11890 +3 13519 14258 5987 +3 11866 13476 810 +3 12809 29417 16313 +3 12155 12238 12154 +3 35528 11867 9532 +3 35764 33233 35727 +3 11569 11502 1382 +3 8969 12756 12848 +3 27054 27055 28360 +3 35080 35079 34950 +3 8001 11783 4525 +3 7289 17253 27867 +3 14819 15370 12217 +3 23002 23100 23099 +3 28951 28950 28817 +3 13673 14082 16341 +3 22651 22433 17988 +3 20477 20562 20561 +3 27380 28717 28683 +3 13871 14163 12913 +3 21130 21129 21043 +3 28683 28717 30422 +3 12821 13871 12913 +3 11077 18047 18402 +3 21458 21368 26345 +3 12821 12913 14179 +3 29539 14246 29944 +3 11442 20153 17814 +3 13220 11462 11132 +3 26362 26361 30901 +3 26333 26371 26370 +3 13506 8670 35615 +3 35430 35537 29145 +3 11960 11571 11695 +3 34553 34552 34415 +3 13593 11636 12835 +3 11692 11960 11695 +3 12915 3456 13298 +3 13008 12915 13298 +3 3456 13490 12835 +3 13298 3456 12835 +3 13593 11864 11636 +3 35793 35911 11627 +3 33328 33437 33436 +3 2275 33457 2143 +3 8339 12208 13286 +3 11637 13123 5053 +3 13040 13039 12945 +3 2879 439 12753 +3 20395 20372 3537 +3 11805 5054 2913 +3 23198 23296 23197 +3 16919 16760 15275 +3 33666 13004 17454 +3 5692 13086 12992 +3 14131 14130 14032 +3 11994 11993 11909 +3 35497 35387 35855 +3 14033 14131 14032 +3 13356 13357 13451 +3 9192 10934 7345 +3 13646 13645 13547 +3 13452 13548 13547 +3 13548 13646 13547 +3 13744 13743 13645 +3 24568 23662 23794 +3 35639 35844 35703 +3 22011 24657 24656 +3 12530 12529 12440 +3 12710 12709 12619 +3 23749 24652 24019 +3 12799 12798 12709 +3 12620 12710 12619 +3 33485 33604 33603 +3 12710 12799 12709 +3 13612 13860 2879 +3 11805 13400 5054 +3 12238 12237 12154 +3 14651 23971 23912 +3 5856 14164 12729 +3 8001 4525 5054 +3 12436 12435 12349 +3 12367 13383 12729 +3 14271 11132 11954 +3 25445 25527 25444 +3 11406 29813 19233 +3 26335 26334 30889 +3 19029 28254 28132 +3 29680 30612 28494 +3 26941 28548 30332 +3 27134 27135 27253 +3 27017 27018 27134 +3 22526 22525 22427 +3 35632 35665 35555 +3 22625 22624 22525 +3 22526 22625 22525 +3 22625 22724 22723 +3 1029 12301 12933 +3 9922 14179 12743 +3 23348 22201 25679 +3 29547 28997 27410 +3 31790 31896 31789 +3 8580 10091 14231 +3 15204 15275 15404 +3 22731 23035 21135 +3 23297 23394 23296 +3 12323 12409 12322 +3 24758 25206 25653 +3 10705 16014 16152 +3 1996 2927 11773 +3 9012 5466 1252 +3 11891 13190 11890 +3 11791 1996 11773 +3 11891 11890 12303 +3 14186 14067 11895 +3 1016 12218 12303 +3 12218 11891 12303 +3 6511 5697 8561 +3 11953 1016 12303 +3 12501 12500 12411 +3 13416 7286 9641 +3 22624 22625 22723 +3 21681 20573 21394 +3 9279 21281 5863 +3 11910 11994 11909 +3 20399 21215 20395 +3 23035 22066 21134 +3 13871 14161 14163 +3 12525 12615 12524 +3 22724 22823 22822 +3 5604 1029 12721 +3 22723 22724 22822 +3 22922 22921 22822 +3 22823 22922 22822 +3 19540 23020 18651 +3 33057 33162 33056 +3 31260 31325 31324 +3 34313 34451 34312 +3 33162 33267 33161 +3 34430 34429 34291 +3 19806 17964 18246 +3 34963 34962 34833 +3 12705 12704 12614 +3 9922 12821 14179 +3 15327 13682 11708 +3 11769 11853 11768 +3 5451 5585 5450 +3 23125 22928 22531 +3 22815 22914 22814 +3 12397 8540 8432 +3 13214 12387 10115 +3 11522 11589 11521 +3 13214 10115 12461 +3 12641 13214 12461 +3 5549 15658 5591 +3 12387 12476 10115 +3 13031 13408 11567 +3 9675 9789 14281 +3 13408 13031 11719 +3 13285 12641 12461 +3 35697 35782 11719 +3 13408 13285 11567 +3 12179 12178 12096 +3 12097 12179 12096 +3 8795 23365 16620 +3 1150 14738 13182 +3 1016 11953 13498 +3 12555 1016 13498 +3 31598 31693 31597 +3 32098 32198 32097 +3 126 8023 11356 +3 32299 32298 32197 +3 14033 14032 13934 +3 14227 14226 14130 +3 11248 9192 7345 +3 27045 28352 25131 +3 13261 13357 13260 +3 13451 13452 13547 +3 13554 13553 13457 +3 13458 13363 29160 +3 12620 12619 12529 +3 12530 12620 12529 +3 26336 26335 30889 +3 12441 12530 12440 +3 20618 21207 1969 +3 26337 26336 30888 +3 35848 29553 35723 +3 22343 16037 3861 +3 27760 27497 26594 +3 20721 18272 20802 +3 13762 8527 13861 +3 17982 23313 19637 +3 13261 13260 13165 +3 12799 12710 12800 +3 13166 13261 13165 +3 13357 13356 13260 +3 10934 9344 8304 +3 23114 23113 23015 +3 35576 35825 35436 +3 9344 10934 9337 +3 7345 10934 8304 +3 35832 12132 35356 +3 35706 13280 11401 +3 13210 35729 11623 +3 14019 14117 14018 +3 3985 11401 11869 +3 12948 12949 13042 +3 8902 9117 13684 +3 12301 9922 12743 +3 16915 25603 16916 +3 9633 12288 35690 +3 18332 18513 18484 +3 12652 28723 12562 +3 11883 12563 13306 +3 14276 11883 13306 +3 688 8867 9772 +3 27081 11839 27198 +3 19928 19636 18026 +3 24016 23949 24695 +3 16613 18177 20192 +3 12524 12614 12523 +3 11598 11597 11530 +3 12378 15204 15078 +3 11531 11598 11530 +3 19882 17653 13054 +3 10939 22537 21135 +3 31175 31176 31239 +3 13832 13831 13733 +3 11472 11471 11421 +3 3049 3330 9992 +3 12012 12011 11927 +3 1996 3330 3049 +3 35139 21929 35140 +3 2927 1996 3049 +3 4254 3330 24356 +3 21832 21833 21927 +3 22605 22606 22704 +3 20799 20800 20881 +3 11580 11579 32352 +3 4060 14149 13756 +3 7445 10591 900 +3 12522 12612 12521 +3 4262 20120 2790 +3 1758 15327 11708 +3 12702 12701 12611 +3 26002 25947 26219 +3 13370 12464 23468 +3 12301 12743 12933 +3 25206 26002 26219 +3 11550 11624 12563 +3 17969 17970 20448 +3 11883 11550 12563 +3 11550 7558 3472 +3 11624 11550 3472 +3 7558 14066 8042 +3 3472 7558 8042 +3 14066 13803 12037 +3 8042 14066 12037 +3 13121 12116 12037 +3 13803 13121 12037 +3 14159 15245 14063 +3 13121 14063 12116 +3 12278 12363 10118 +3 8691 12278 10118 +3 20731 18630 17799 +3 11911 11910 11824 +3 29000 29259 28605 +3 23254 24158 26421 +3 18191 3310 23145 +3 23724 24473 24641 +3 11475 11539 11474 +3 21399 21385 20574 +3 11475 11474 11424 +3 35479 35523 35475 +3 11606 11605 11538 +3 11539 11538 11474 +3 11932 12016 11931 +3 11539 11606 11538 +3 11932 11931 11845 +3 12016 12015 11931 +3 11681 11762 11680 +3 11846 11845 11761 +3 11681 11680 11605 +3 11762 11846 11761 +3 11606 11681 11605 +3 11762 11761 11680 +3 12097 12096 12015 +3 12016 12097 12015 +3 16450 4061 16919 +3 12262 12261 12178 +3 8567 15078 15077 +3 19002 18933 25343 +3 6652 30806 29286 +3 22606 22705 22704 +3 7991 126 11356 +3 11341 8567 15077 +3 14166 14265 14175 +3 24258 21 24660 +3 13935 13934 13836 +3 13935 14033 13934 +3 9192 11568 10265 +3 10934 9192 10265 +3 12435 12524 12434 +3 13357 13452 13451 +3 35629 35661 35861 +3 13458 13554 13457 +3 20321 20318 14691 +3 13563 20321 14691 +3 17101 15024 16614 +3 13563 14691 16936 +3 13882 13883 11881 +3 35871 35399 35630 +3 2384 5695 3195 +3 20555 20637 20554 +3 29291 28865 28722 +3 14150 20403 17007 +3 13847 17101 4521 +3 18072 18073 18164 +3 3538 14334 14972 +3 15024 16936 16614 +3 12978 13072 12977 +3 24475 24143 24313 +3 23424 20964 22145 +3 13166 13165 13071 +3 13087 13180 14155 +3 7855 22856 15471 +3 20699 20698 20784 +3 22856 3183 15471 +3 10443 10457 10563 +3 16611 15200 13084 +3 32304 32303 32202 +3 12125 12207 13326 +3 35880 7758 10510 +3 32005 32004 31903 +3 11879 11792 25136 +3 3967 11503 7704 +3 20882 20962 20961 +3 15534 15402 24163 +3 21300 22431 22364 +3 23035 22162 22066 +3 29684 28610 27411 +3 20800 20799 20717 +3 15597 15464 12449 +3 29434 29571 13652 +3 35414 35535 35434 +3 22162 22065 22066 +3 18260 18165 18166 +3 691 13334 13558 +3 23369 3537 19980 +3 20395 21213 21208 +3 13489 9632 3930 +3 21586 21495 21780 +3 16919 4060 16760 +3 4525 9980 2913 +3 13652 13554 29434 +3 21970 21494 21875 +3 3179 10709 35352 +3 12135 12927 12120 +3 11928 12012 11927 +3 26338 26337 30887 +3 12429 12518 12428 +3 12093 12092 12011 +3 12518 12608 12517 +3 12608 12607 12517 +3 12608 12698 12607 +3 12698 12697 12607 +3 12719 13763 13665 +3 12787 12786 12697 +3 8023 126 563 +3 28560 28689 28559 +3 20012 23435 20664 +3 111 13370 23468 +3 12883 12976 12882 +3 11759 11758 11677 +3 4061 4060 16919 +3 13070 13069 12975 +3 24797 25076 25140 +3 35486 35540 35572 +3 8155 16009 20069 +3 11769 26739 26853 +3 32731 32843 32730 +3 19212 22921 22922 +3 32843 32951 32842 +3 21033 21034 18741 +3 33323 33324 33432 +3 22011 23851 25457 +3 28375 28376 30098 +3 1879 5604 12455 +3 1029 12933 12721 +3 4011 16953 691 +3 11399 12899 12807 +3 32951 33057 32950 +3 15359 15490 15115 +3 34145 34283 34144 +3 34451 34588 34450 +3 1144 13182 13181 +3 11753 11883 14276 +3 34278 34416 34277 +3 20011 21591 20498 +3 24149 24148 25947 +3 5604 12721 12455 +3 35606 35650 35754 +3 21071 23178 20016 +3 12976 13070 12975 +3 20446 20447 20531 +3 22804 22903 22902 +3 13164 13163 13069 +3 15155 20010 15734 +3 14910 16005 21500 +3 13090 13184 13765 +3 14912 12626 8000 +3 13184 13764 13765 +3 4196 20093 12362 +3 8000 12626 13090 +3 12626 13184 13090 +3 13643 13741 13740 +3 20010 21684 20327 +3 16167 14912 8000 +3 20072 14912 16167 +3 16918 13085 15276 +3 20327 20072 16167 +3 1144 1150 13182 +3 11358 13088 20093 +3 13085 4196 12362 +3 19796 19797 30502 +3 15327 11205 13682 +3 14248 13956 21591 +3 12731 12823 35491 +3 13676 35800 13578 +3 7892 8008 10983 +3 19644 29684 6787 +3 22449 19328 17859 +3 13589 11621 14265 +3 13161 13160 13066 +3 13837 13935 13836 +3 15078 15404 15537 +3 15077 15078 15537 +3 12349 12435 12348 +3 12614 12613 12523 +3 15864 14948 12378 +3 14945 21146 15195 +3 23527 26064 26065 +3 25909 16002 16001 +3 35792 35382 35913 +3 13302 11550 11883 +3 11753 13302 11883 +3 9551 7558 11550 +3 13302 9551 11550 +3 13968 14066 7558 +3 15024 13563 16936 +3 35735 35898 35389 +3 14948 15460 15204 +3 15865 15864 12378 +3 13072 13166 13071 +3 12885 12978 12884 +3 12179 12262 12178 +3 12433 12432 12346 +3 12347 12346 12261 +3 12262 12347 12261 +3 22928 20784 22531 +3 12347 12433 12346 +3 13329 10939 21134 +3 23418 23127 23223 +3 20800 20882 20881 +3 21489 21482 22637 +3 18740 18642 21032 +3 11541 11540 11476 +3 14971 15047 12719 +3 20545 20627 20544 +3 25033 21451 21966 +3 13961 2235 8478 +3 9551 13968 7558 +3 12547 13803 14066 +3 13968 12547 14066 +3 14255 13121 13803 +3 24312 22271 24892 +3 26033 26175 26174 +3 12808 19668 7300 +3 21146 21067 15195 +3 14259 12538 11105 +3 18173 16162 17755 +3 12468 20663 16641 +3 18599 18698 23216 +3 12711 12800 12710 +3 16162 15741 15605 +3 14233 14232 14136 +3 28821 28820 28688 +3 1016 35938 9921 +3 12135 13030 12935 +3 7345 8304 14228 +3 14229 7345 14228 +3 25120 27045 25131 +3 15275 16760 15404 +3 16760 16603 15404 +3 26341 26340 30884 +3 11571 13008 12822 +3 16453 16162 15605 +3 6854 30733 22983 +3 15741 15027 15028 +3 12698 12787 12697 +3 30934 30933 30879 +3 25273 11879 25274 +3 11928 11927 11841 +3 11678 11677 11602 +3 11603 11678 11602 +3 13070 13164 13069 +3 18993 23243 28342 +3 12897 23369 19980 +3 20291 20376 20375 +3 13172 13171 13077 +3 15605 15741 15028 +3 26057 26002 25206 +3 1658 25731 25730 +3 12547 14255 13803 +3 15118 14159 14257 +3 33735 33734 33607 +3 22524 22623 22523 +3 14255 14159 13121 +3 34009 34145 34008 +3 20102 20575 20574 +3 35753 35571 35458 +3 12379 451 19233 +3 14561 21071 20016 +3 24131 23877 25301 +3 4196 11358 20093 +3 20436 23601 20437 +3 14691 16601 11946 +3 22068 22067 21127 +3 20318 21125 20315 +3 21964 18837 21406 +3 23551 24754 25814 +3 23877 14561 20016 +3 13646 13744 13645 +3 12269 21243 21605 +3 13450 13546 13545 +3 20662 9405 20647 +3 21834 21929 21928 +3 13449 13450 13545 +3 13083 12826 3929 +3 20582 5692 5693 +3 12464 12200 13683 +3 13472 13569 1017 +3 5987 7456 10261 +3 20188 17771 17772 +3 13667 3729 13303 +3 35677 9633 35690 +3 16614 13699 23462 +3 16614 16936 13699 +3 12254 8795 16620 +3 16936 11946 13699 +3 21112 21200 21111 +3 16928 4682 15344 +3 20194 21136 13303 +3 4521 16614 23462 +3 11617 11693 13568 +3 3729 20194 13303 +3 13956 15157 21591 +3 15157 20412 15735 +3 13209 12042 12659 +3 180 3400 3361 +3 15027 9640 6004 +3 15028 15027 6004 +3 15236 15364 7470 +3 3582 9452 10148 +3 14166 13589 14265 +3 13589 12304 12390 +3 13067 13066 12972 +3 13067 13161 13066 +3 23005 23006 23103 +3 7454 18175 7363 +3 12349 12348 12263 +3 12524 12523 12434 +3 16449 3668 16450 +3 2786 7064 21067 +3 25592 25593 25734 +3 22055 2760 22052 +3 23 3667 6004 +3 25505 24743 25302 +3 8345 8344 3735 +3 11473 11537 11472 +3 23223 23321 23412 +3 5191 5695 2384 +3 11206 13374 13375 +3 1385 5191 2384 +3 23056 22957 8478 +3 12716 11206 13375 +3 4669 2343 5074 +3 17101 16614 4521 +3 21023 21022 20939 +3 12378 14948 15204 +3 13072 13071 12977 +3 12793 12885 12792 +3 13585 13683 12389 +3 23393 23392 23295 +3 13739 13837 13738 +3 13640 13641 13738 +3 12883 12882 12790 +3 20456 18071 17980 +3 12612 12702 12611 +3 12791 12883 12790 +3 12791 12790 12701 +3 12702 12791 12701 +3 11477 11541 11476 +3 12976 12975 12882 +3 9640 23 6004 +3 2653 21201 2760 +3 13862 13961 8478 +3 20708 20707 20626 +3 11143 4767 4766 +3 35859 35360 35827 +3 14905 10233 3667 +3 23 14905 3667 +3 13013 6768 27779 +3 11414 11413 31407 +3 23734 23733 24524 +3 26342 26341 30883 +3 33162 33161 33056 +3 25994 4536 4669 +3 33324 33433 33432 +3 34809 34808 34680 +3 23747 24840 24102 +3 5998 13330 22175 +3 30985 31046 30984 +3 26314 26315 20887 +3 35737 35677 35690 +3 35699 35686 35604 +3 3988 25447 24024 +3 26216 24881 24880 +3 14905 13013 10233 +3 22489 22588 22587 +3 23407 9393 23406 +3 14056 14059 13961 +3 12927 12135 12935 +3 13030 13887 12306 +3 22341 22259 22355 +3 15314 1149 13859 +3 21201 21178 2760 +3 11819 11818 11734 +3 13941 13940 13842 +3 14137 14136 14038 +3 11693 13667 13568 +3 15149 13851 21178 +3 23322 21972 25318 +3 13086 70 10447 +3 9759 87 10123 +3 24830 26120 25868 +3 11842 11928 11841 +3 26343 26342 30882 +3 11472 11536 11471 +3 11603 11602 11535 +3 28689 28821 28688 +3 5284 5285 15479 +3 22334 23132 22145 +3 13895 8881 10254 +3 19558 29126 21294 +3 13204 10252 7682 +3 24522 25632 23588 +3 19240 29697 28017 +3 12392 11753 9804 +3 30686 28017 28426 +3 14276 9804 11753 +3 11429 11487 11486 +3 6956 11486 227 +3 20640 20641 20721 +3 7056 227 11553 +3 8106 7990 12061 +3 35469 35759 35512 +3 13489 13370 9632 +3 35811 35812 35697 +3 14136 14232 14135 +3 18439 20859 20777 +3 28889 13267 13172 +3 14136 14135 14037 +3 13267 13266 13171 +3 13458 13457 13362 +3 35482 35868 35751 +3 13363 13362 13266 +3 13842 13841 13743 +3 13363 13267 29023 +3 13546 13644 13643 +3 13744 13842 13743 +3 9201 9803 11801 +3 13545 13546 13643 +3 26604 26603 26507 +3 16005 16006 21500 +3 30078 16310 11551 +3 27518 30686 28426 +3 12390 2915 12479 +3 6791 12904 16459 +3 12390 12479 12542 +3 11621 12390 12542 +3 16462 18118 18475 +3 1065 12394 2915 +3 29009 28875 27294 +3 35741 35934 35645 +3 12119 11871 8683 +3 12111 12119 8683 +3 20393 20394 20477 +3 10709 12111 8683 +3 27866 27643 27549 +3 35601 35352 13867 +3 11621 12542 13194 +3 14265 11621 13194 +3 32949 32948 32840 +3 33055 33160 33054 +3 16459 15220 33467 +3 33611 33738 33610 +3 20474 20473 20389 +3 447 3206 12904 +3 7456 12544 10261 +3 9012 1252 2608 +3 6791 447 12904 +3 19980 3537 5353 +3 12973 12972 12879 +3 12973 13067 12972 +3 15064 23225 21866 +3 2918 22759 10368 +3 12264 12349 12263 +3 12435 12434 12348 +3 12264 12263 12180 +3 12181 12264 12180 +3 16449 16450 15023 +3 12181 12180 12098 +3 26037 26038 26179 +3 13851 13655 21147 +3 25166 12920 24341 +3 24628 20824 24437 +3 13374 13961 13862 +3 504 503 26006 +3 15729 13340 15732 +3 12825 14684 14589 +3 20859 20860 20939 +3 22737 23424 22146 +3 20860 20940 20939 +3 18645 18742 18644 +3 20940 21023 20939 +3 28889 13172 28757 +3 12978 12977 12884 +3 12793 12792 12703 +3 18748 18749 18847 +3 13586 23435 20012 +3 13837 13836 13738 +3 13542 13543 13640 +3 20414 23541 24445 +3 8671 10687 11136 +3 7991 10465 1261 +3 5195 10869 12103 +3 13994 1962 3206 +3 20787 20788 20869 +3 7273 11631 7274 +3 12551 13376 12306 +3 13843 13941 13842 +3 13843 13842 13744 +3 447 13994 3206 +3 17292 13708 19251 +3 13100 12031 13195 +3 23306 23307 23403 +3 14160 13302 11753 +3 12392 14160 11753 +3 6641 9551 13302 +3 14160 6641 13302 +3 13479 13968 9551 +3 6641 13479 9551 +3 13595 12547 13968 +3 13479 13595 13968 +3 13595 13299 14255 +3 12547 13595 14255 +3 15118 14257 14256 +3 14255 13299 14159 +3 12954 12955 13048 +3 12320 12319 12234 +3 12866 12773 12774 +3 35753 35437 35571 +3 11365 9420 7575 +3 11553 7161 7056 +3 26344 26343 30881 +3 35400 11780 11866 +3 27753 4121 12111 +3 12935 13030 12306 +3 11786 3176 12732 +3 31107 31170 31169 +3 11867 11866 810 +3 12848 12941 9076 +3 21400 20064 20050 +3 12461 10115 12551 +3 1328 5561 1210 +3 13887 11567 12551 +3 10115 6007 12551 +3 11567 13887 13030 +3 13031 11567 13030 +3 20103 20104 20615 +3 11567 12461 12551 +3 27901 26344 30880 +3 9189 12364 11806 +3 11536 11603 11535 +3 35412 35745 35656 +3 11422 11472 11421 +3 11536 11535 11471 +3 13087 14155 14154 +3 2819 25209 25147 +3 35591 35728 35478 +3 8269 8377 1598 +3 12424 12338 1962 +3 15078 15204 15404 +3 25197 23877 20016 +3 13994 12424 1962 +3 13285 12281 12641 +3 11853 11852 11768 +3 10362 13000 7072 +3 11430 11488 11487 +3 6888 34055 11429 +3 5563 13112 12118 +3 11487 11488 11553 +3 13354 13355 13449 +3 20366 20372 21138 +3 13258 13259 13354 +3 13355 13450 13449 +3 13259 13258 13163 +3 13164 13259 13163 +3 14038 14136 14037 +3 13259 13355 13354 +3 13940 14038 13939 +3 14232 14231 14135 +3 13940 13939 13841 +3 13842 13940 13841 +3 13938 14036 13937 +3 14038 14037 13939 +3 14227 11645 14226 +3 14134 14133 14035 +3 33738 33737 33610 +3 10604 9201 11801 +3 23813 30871 30870 +3 31998 32098 31997 +3 30956 30901 30957 +3 29087 29224 29086 +3 30825 30826 17893 +3 15471 3183 16921 +3 23465 20580 23439 +3 14187 13600 11570 +3 5053 11961 13486 +3 11470 11469 11419 +3 11420 11470 11419 +3 11534 11533 11469 +3 11470 11534 11469 +3 11601 11600 11533 +3 11534 11601 11533 +3 11676 11675 11600 +3 13158 13157 13063 +3 11601 11676 11600 +3 13064 13158 13063 +3 13253 13252 13157 +3 34280 34279 34141 +3 13671 13003 12635 +3 25613 16442 25614 +3 21033 18740 21032 +3 33359 33360 17272 +3 10827 7536 8556 +3 1408 14149 4060 +3 35718 35359 35635 +3 22267 4664 20322 +3 11695 11571 11504 +3 12699 12788 12698 +3 12880 12973 12879 +3 8527 14323 13766 +3 18177 20308 20192 +3 21208 21213 22147 +3 22759 22660 10368 +3 33488 33607 33487 +3 15200 13054 16613 +3 12099 12181 12098 +3 9279 5863 22147 +3 21178 21147 15730 +3 11934 12018 11933 +3 13275 7363 13372 +3 20615 21409 20575 +3 15338 14244 21202 +3 16156 21203 6518 +3 11608 11607 11540 +3 22145 23230 15193 +3 11764 11848 11763 +3 11541 11608 11540 +3 11848 11934 11847 +3 12018 12017 11933 +3 12704 12703 12613 +3 12614 12704 12613 +3 12704 12793 12703 +3 12885 12884 12792 +3 20499 12170 5692 +3 22238 18117 203 +3 13641 13739 13738 +3 13446 13447 13542 +3 35209 35208 35079 +3 11621 13589 12390 +3 24954 23700 19986 +3 35686 35365 11800 +3 11427 30958 11478 +3 12372 13799 6256 +3 13887 12551 12306 +3 20950 21033 21032 +3 13764 2918 10368 +3 6007 11726 13376 +3 34975 18595 32683 +3 35615 11695 13506 +3 11237 8009 9652 +3 9670 10510 7908 +3 13000 10035 10832 +3 23741 15111 14989 +3 35852 35453 35869 +3 14154 14155 11234 +3 26332 30896 30895 +3 35841 35706 11401 +3 17415 17337 17416 +3 29219 17301 19310 +3 12182 12265 12181 +3 23352 22559 24661 +3 14076 13009 12915 +3 35944 35413 35850 +3 13614 11864 13593 +3 11445 13614 13593 +3 8136 10985 16258 +3 23028 22929 22832 +3 22839 13334 22452 +3 25944 26432 24831 +3 10115 12476 6007 +3 13650 13649 13551 +3 35488 35471 35413 +3 12557 15020 12993 +3 11696 11777 8001 +3 14971 12719 11508 +3 9451 11870 8001 +3 11870 11783 8001 +3 11719 13031 12135 +3 11015 11016 11143 +3 12364 5415 13799 +3 12372 12364 13799 +3 10261 12544 11955 +3 12780 15865 14910 +3 13162 13257 13161 +3 13352 13353 13447 +3 13257 13353 13352 +3 13256 13257 13352 +3 12748 22231 22134 +3 26188 26329 26187 +3 31641 31736 31640 +3 13031 13030 12135 +3 30881 26343 30882 +3 11960 14076 12915 +3 31305 31304 31239 +3 12265 12264 12181 +3 34681 34809 34680 +3 34938 34937 34808 +3 11431 11489 11488 +3 33920 11430 11429 +3 7435 376 7322 +3 265 7322 376 +3 265 376 375 +3 7163 7059 7164 +3 20289 17790 20204 +3 9877 13797 14165 +3 9803 13427 9517 +3 22803 22804 22902 +3 13840 13938 13839 +3 14036 14035 13937 +3 13840 13839 13741 +3 13742 13840 13741 +3 14036 14134 14035 +3 13938 13937 13839 +3 9201 10604 1486 +3 14230 14229 14133 +3 23412 23321 13323 +3 11645 9201 1486 +3 23321 3182 13323 +3 12332 12418 12331 +3 23412 13323 17085 +3 20327 16167 16168 +3 21873 17085 13851 +3 21873 23412 17085 +3 25049 25050 21452 +3 15149 21873 13851 +3 27495 30641 29699 +3 21201 15149 21178 +3 15877 12687 30488 +3 26605 26606 26710 +3 20194 4521 21136 +3 28954 28953 28820 +3 4521 23462 21136 +3 28821 28954 28820 +3 4682 13083 3929 +3 27379 27495 29699 +3 11757 11756 11675 +3 11676 11757 11675 +3 12877 12970 12876 +3 11841 11840 11756 +3 13064 13063 12969 +3 12970 13064 12969 +3 32401 32400 32297 +3 31997 32097 31996 +3 12600 20310 12779 +3 22044 21978 21122 +3 12714 13178 12826 +3 4061 1408 4060 +3 13506 11695 11504 +3 20069 22928 23125 +3 12880 12879 12787 +3 12788 12880 12787 +3 12609 12699 12608 +3 12788 12787 12698 +3 12519 12609 12518 +3 12699 12698 12608 +3 12344 12430 12343 +3 12519 12518 12429 +3 22620 22619 22520 +3 22519 33923 22520 +3 12099 12098 12017 +3 12018 12099 12017 +3 11683 11764 11682 +3 11848 11847 11763 +3 11683 11682 11607 +3 11608 11683 11607 +3 21482 21483 22830 +3 11764 11763 11682 +3 12897 19980 3183 +3 22856 12897 3183 +3 11345 14148 18181 +3 28078 21177 27961 +3 15204 15460 15275 +3 15744 10939 13329 +3 15460 15148 15275 +3 23006 23104 23103 +3 4101 17082 23435 +3 13297 11548 16007 +3 13543 13641 13640 +3 13352 13447 13446 +3 1970 2915 12390 +3 12304 1970 12390 +3 2223 5699 14223 +3 14224 2223 14223 +3 12012 12093 12011 +3 12175 12174 12092 +3 11504 11571 12822 +3 13008 13298 14081 +3 12551 6007 13376 +3 12476 1328 12477 +3 13664 11446 12202 +3 12202 4121 35468 +3 34416 34553 34415 +3 12915 13009 3456 +3 26362 30901 30900 +3 9075 8969 9076 +3 35407 1615 9804 +3 33219 33324 33218 +3 9309 14160 12392 +3 11627 9309 12392 +3 14263 6641 14160 +3 9309 14263 14160 +3 13577 13479 6641 +3 14263 13577 6641 +3 14060 13595 13479 +3 13577 14060 13479 +3 14077 13299 13595 +3 14060 14077 13595 +3 11462 14277 12828 +3 11462 13962 14277 +3 11132 11462 12828 +3 7385 7273 7274 +3 14116 14115 14017 +3 13384 13322 16648 +3 12725 13864 11780 +3 12646 11552 15746 +3 9405 9630 23236 +3 1871 20645 5589 +3 12424 15596 14950 +3 22917 23016 22916 +3 22138 19807 24622 +3 30882 26342 30883 +3 11132 12828 11869 +3 11954 11132 11869 +3 30880 26344 30881 +3 11401 11954 11869 +3 11870 10011 11783 +3 14084 1879 35797 +3 12338 12424 14950 +3 12415 12414 12328 +3 22719 22718 22619 +3 13537 13538 13635 +3 15596 23073 23074 +3 14950 15596 23074 +3 13448 13544 13543 +3 13353 13448 13447 +3 13756 17094 16603 +3 5054 4525 2913 +3 22620 22719 22619 +3 22148 9279 22147 +3 13009 11893 3456 +3 11791 11773 9655 +3 21366 33702 33701 +3 26362 24831 26363 +3 23297 23296 23198 +3 14077 14256 13299 +3 11432 11490 11489 +3 33920 11431 11430 +3 11490 11556 11555 +3 11489 11490 11555 +3 19112 21864 17894 +3 21864 21298 17894 +3 11936 27203 12021 +3 9993 14165 11003 +3 11801 9803 9517 +3 34000 33999 33864 +3 22903 23002 23001 +3 9517 13427 11332 +3 12456 24732 23632 +3 5693 5692 12992 +3 13427 12456 3322 +3 23296 23393 23295 +3 20664 20582 5693 +3 13586 4101 23435 +3 619 15047 14971 +3 15148 16919 15275 +3 17082 20499 20582 +3 20445 20446 20530 +3 4060 13756 16760 +3 22936 21970 22937 +3 14149 11102 13756 +3 23202 23300 23299 +3 21970 21875 22937 +3 14738 11693 13182 +3 23201 23202 23299 +3 21088 21002 21003 +3 11693 11617 13182 +3 22759 16918 22660 +3 28187 27057 27056 +3 11121 14346 9771 +3 13085 12362 15276 +3 619 3752 15047 +3 12714 11205 15327 +3 1017 12254 16620 +3 23468 12464 13683 +3 23365 23269 16620 +3 11757 11841 11756 +3 15343 15342 14846 +3 12785 12877 12784 +3 11927 11926 11840 +3 12785 12784 12695 +3 12970 12969 12876 +3 12606 12696 12605 +3 12696 12785 12695 +3 4682 3929 15344 +3 13083 12714 12826 +3 11102 8010 17094 +3 14133 14132 14034 +3 14133 14229 14132 +3 14035 14133 14034 +3 14229 14228 14132 +3 20698 20697 22531 +3 29695 29561 28879 +3 6955 6886 6888 +3 12430 12519 12429 +3 12609 12608 12518 +3 22818 22817 22718 +3 12259 12344 12258 +3 22917 22916 22817 +3 22719 22818 22718 +3 13368 23369 12897 +3 22818 22917 22817 +3 13278 12897 22856 +3 34203 34349 2950 +3 11678 11759 11677 +3 13278 13368 12897 +3 12176 12259 12175 +3 11843 11842 11758 +3 12176 12175 12093 +3 12344 12343 12258 +3 12094 12176 12093 +3 12259 12258 12175 +3 13256 13255 13160 +3 13161 13256 13160 +3 13352 13351 13255 +3 13256 13352 13255 +3 13351 13352 13446 +3 13447 13543 13542 +3 13095 3075 12722 +3 1970 12722 2915 +3 9655 11260 5699 +3 20786 18449 18353 +3 12093 12175 12092 +3 14224 14223 14127 +3 3183 7788 16921 +3 12258 12257 12174 +3 6007 12477 11726 +3 21135 23035 21134 +3 12764 12765 12856 +3 27781 17293 17292 +3 11893 8684 13490 +3 20787 20869 18449 +3 18545 18544 18449 +3 3456 11893 13490 +3 12770 12862 12861 +3 4925 2366 2638 +3 12149 12150 12232 +3 29089 29088 28953 +3 22617 22716 22616 +3 14313 14312 14214 +3 14215 14313 14214 +3 20949 21032 18545 +3 11405 29398 7287 +3 24831 26362 30900 +3 30894 26332 30895 +3 6923 11704 6924 +3 35877 35792 35691 +3 34809 34938 34808 +3 35579 35928 12208 +3 35910 35786 35489 +3 12743 12744 13875 +3 12744 12743 14183 +3 32730 32842 32729 +3 12933 12743 13875 +3 23349 7855 23056 +3 6262 13674 794 +3 33182 33181 33076 +3 13368 20399 23369 +3 22907 23006 23005 +3 34942 35071 34941 +3 11777 9451 8001 +3 13917 14015 13916 +3 12933 13875 4528 +3 12721 12933 4528 +3 12628 192 33948 +3 12222 9309 11627 +3 12455 12721 4528 +3 12473 12222 11627 +3 38 13890 13333 +3 12366 12455 4528 +3 16912 16753 16754 +3 17372 35067 35197 +3 14231 14230 14134 +3 22410 22508 22507 +3 13939 14037 13938 +3 14135 14231 14134 +3 14135 14134 14036 +3 14037 14135 14036 +3 21281 21206 5863 +3 23073 12663 4416 +3 2793 12223 13790 +3 21871 25635 25578 +3 16931 11718 13055 +3 13524 35539 35809 +3 12911 14263 9309 +3 12222 12911 9309 +3 11433 11491 11490 +3 11432 11431 33786 +3 11491 11557 11556 +3 11490 11491 11556 +3 11557 11631 11630 +3 11556 11557 11630 +3 22040 2674 17816 +3 35567 35543 35587 +3 11234 11121 9771 +3 23074 23073 4416 +3 12884 12977 12883 +3 14910 21500 23392 +3 12792 12884 12791 +3 13071 13070 12976 +3 12613 12703 12612 +3 12977 12976 12883 +3 12523 12613 12522 +3 12792 12791 12702 +3 12434 12523 12433 +3 12703 12702 12612 +3 12348 12434 12347 +3 12613 12612 12522 +3 12263 12348 12262 +3 12523 12522 12433 +3 12180 12263 12179 +3 12434 12433 12347 +3 12098 12180 12097 +3 12348 12347 12262 +3 12017 12098 12016 +3 12263 12262 12179 +3 12017 12016 11932 +3 12180 12179 12097 +3 11933 12017 11932 +3 12098 12097 12016 +3 35764 35727 35763 +3 4948 2790 15637 +3 12899 13762 13861 +3 35527 35707 35834 +3 20049 20050 20540 +3 20373 20457 20456 +3 12200 4101 13586 +3 1261 8027 9899 +3 11841 11927 11840 +3 14149 16022 11102 +3 12011 12010 11926 +3 11927 12011 11926 +3 12257 12256 12173 +3 12174 12257 12173 +3 8682 6889 1408 +3 16928 15344 16164 +3 20310 20309 12779 +3 6889 16164 1408 +3 13423 21862 21755 +3 6889 16928 16164 +3 20533 20534 21301 +3 21090 12600 21004 +3 19997 19965 19966 +3 34553 34681 34552 +3 20870 20950 20949 +3 35510 35922 35885 +3 12430 12429 12343 +3 19980 5353 7788 +3 12094 12093 12012 +3 12013 12094 12012 +3 12013 12012 11928 +3 11929 12013 11928 +3 11759 11843 11758 +3 11929 11928 11842 +3 11677 11676 11601 +3 11843 11929 11842 +3 11471 11535 11470 +3 11602 11601 11534 +3 11421 11471 11420 +3 11535 11602 11534 +3 10809 4503 9304 +3 11535 11534 11470 +3 5466 2651 1252 +3 35929 35375 35807 +3 13791 13333 2902 +3 13600 5053 13486 +3 18641 18545 18642 +3 20869 20870 20949 +3 31369 31368 31301 +3 7275 7386 7274 +3 4664 22828 2477 +3 900 10591 12898 +3 14128 14224 14127 +3 12567 15595 15594 +3 12175 12258 12174 +3 14128 14127 14029 +3 11279 16010 23028 +3 12343 12342 12257 +3 13456 13552 13455 +3 23027 20783 20784 +3 31725 31825 31824 +3 12823 24613 35870 +3 11445 13593 13490 +3 34834 34963 34833 +3 10362 7072 14312 +3 8684 11445 13490 +3 13576 13577 14263 +3 2366 1155 2638 +3 12911 13576 14263 +3 14260 14060 13577 +3 13576 14260 13577 +3 14260 12198 14077 +3 14060 14260 14077 +3 26332 30894 30893 +3 3192 14256 14077 +3 12198 3192 14077 +3 12769 12770 12861 +3 15519 1526 15518 +3 23013 23111 23110 +3 12862 12955 12954 +3 14313 10362 14312 +3 13170 13169 13075 +3 5869 4098 1273 +3 13000 13410 7072 +3 12743 14179 14183 +3 12663 13696 21392 +3 4119 6005 794 +3 30937 30995 30936 +3 29132 29818 27531 +3 23016 23015 22916 +3 20582 20499 5692 +3 20065 20102 20574 +3 25373 23943 23562 +3 24591 12717 24370 +3 4416 12663 21392 +3 13696 19991 19990 +3 30886 26338 30887 +3 30890 26334 30891 +3 35913 35892 35628 +3 21392 13696 19990 +3 32092 32192 32091 +3 25336 25335 25381 +3 20707 20708 20789 +3 25918 21871 24459 +3 12531 12530 12441 +3 23024 21489 22537 +3 14831 22731 22243 +3 13841 13939 13840 +3 14037 14036 13938 +3 18175 17561 14684 +3 20698 23424 22737 +3 22559 24708 24661 +3 2263 5469 2262 +3 33643 33770 33642 +3 24787 23721 25179 +3 6861 27756 29543 +3 15469 13985 21481 +3 18269 19808 3801 +3 11434 11492 11491 +3 33786 11433 11432 +3 11492 11558 11557 +3 11491 11492 11557 +3 11558 11632 11631 +3 11557 11558 11631 +3 7272 11630 7273 +3 28954 29089 28953 +3 12703 12792 12702 +3 8801 8693 8694 +3 35425 35940 35932 +3 12884 12883 12791 +3 10586 12 11970 +3 35576 404 66 +3 11715 10586 11970 +3 22935 10705 16152 +3 11143 4766 4632 +3 11015 11143 4632 +3 11084 11057 13779 +3 10208 10327 10326 +3 12615 12614 12524 +3 7919 8547 10746 +3 12350 12436 12349 +3 12525 12524 12435 +3 21952 22650 22550 +3 35385 8868 8040 +3 13549 13647 13548 +3 13358 13357 13261 +3 20372 20395 21208 +3 21206 21281 15469 +3 11636 5562 12928 +3 18868 19365 18968 +3 11763 11762 11681 +3 11847 11846 11762 +3 11540 11607 11539 +3 11682 11763 11681 +3 11682 11681 11606 +3 11607 11682 11606 +3 21215 22150 21213 +3 29223 29360 29222 +3 34276 34275 34137 +3 26334 30890 30889 +3 21833 21834 21928 +3 21944 21945 2409 +3 19765 19474 15617 +3 22704 22705 22803 +3 12257 12342 12256 +3 12342 12341 12256 +3 12428 12427 12341 +3 12342 12428 12341 +3 28008 27892 12426 +3 12427 12516 12426 +3 24030 23971 30624 +3 32400 32399 32296 +3 29898 30029 29897 +3 20530 20531 20612 +3 563 126 21 +3 23394 23393 23296 +3 4523 11356 10242 +3 12899 12993 13762 +3 11664 11663 11588 +3 35416 35481 35873 +3 11552 12646 1832 +3 11471 11470 11420 +3 11758 11757 11676 +3 11602 11677 11601 +3 11842 11841 11757 +3 11677 11758 11676 +3 2223 9655 5699 +3 11758 11842 11757 +3 19103 20673 18417 +3 11773 11727 11260 +3 3189 3049 11070 +3 27057 28371 28370 +3 27731 27732 27846 +3 3330 4254 9992 +3 22506 22507 22605 +3 22120 22216 22215 +3 13178 13273 3724 +3 12826 13178 3724 +3 13682 11562 14248 +3 13178 15327 1758 +3 12767 12859 12858 +3 12766 12767 12858 +3 13701 8419 8035 +3 10837 7702 9871 +3 33868 34003 33867 +3 19991 20455 20452 +3 14030 14128 14029 +3 13314 11777 11696 +3 12258 12343 12257 +3 14030 14029 13931 +3 20783 20699 20784 +3 12429 12428 12342 +3 17303 24566 24565 +3 10737 9060 11263 +3 35882 9749 12120 +3 11780 13864 13476 +3 7274 11632 7275 +3 30884 26340 30885 +3 16341 16494 14161 +3 12201 14 5602 +3 14163 13322 12914 +3 12236 12321 12320 +3 12913 12914 14183 +3 12913 14163 12914 +3 19999 19968 19969 +3 14179 12913 14183 +3 25708 25706 4243 +3 23230 22452 15193 +3 34936 34937 35065 +3 11888 12222 12473 +3 12384 11888 12473 +3 12368 12911 12222 +3 11888 12368 12222 +3 13192 13576 12911 +3 12368 13192 12911 +3 30883 26341 30884 +3 13985 8155 21481 +3 11467 11531 11466 +3 25587 24318 11855 +3 7855 15471 23056 +3 10939 21135 21134 +3 20777 20695 18343 +3 13068 13162 13067 +3 24404 25587 11855 +3 35935 35534 35424 +3 19990 19991 20452 +3 12269 24200 21243 +3 13192 10347 14260 +3 17419 17508 17507 +3 13576 13192 14260 +3 10347 13284 12198 +3 14691 20318 16601 +3 14260 10347 12198 +3 3668 4061 16450 +3 35870 35627 12823 +3 22637 22836 22243 +3 22930 23029 23024 +3 13743 13841 13742 +3 13939 13938 13840 +3 20784 20698 22531 +3 16918 15276 22660 +3 29089 29226 29225 +3 23127 23029 23223 +3 25062 24513 24849 +3 21453 25626 25728 +3 22807 22808 22906 +3 11694 11617 13569 +3 13284 13969 3192 +3 12198 13284 3192 +3 11435 11493 11492 +3 33659 11434 11433 +3 11493 11559 11558 +3 11492 11493 11558 +3 11559 11633 11632 +3 11558 11559 11632 +3 10845 11008 13685 +3 8439 810 13476 +3 8432 8325 12397 +3 11763 11847 11762 +3 22808 22907 22906 +3 3201 11004 3199 +3 22609 22610 22708 +3 13569 13568 12254 +3 22510 22511 22609 +3 22708 22709 22807 +3 12443 25306 25998 +3 22709 22808 22807 +3 24402 24289 21822 +3 22610 22709 22708 +3 27266 12540 23491 +3 24980 24987 26093 +3 24241 24528 24171 +3 25306 25445 25998 +3 3752 5337 11399 +3 25356 24164 25374 +3 13558 3861 16037 +3 25323 24528 24241 +3 17800 23216 23118 +3 21697 2768 13099 +3 4121 12202 12111 +3 12202 12119 12111 +3 26429 11545 11481 +3 11464 11529 26622 +3 28312 21353 28195 +3 35842 35867 30423 +3 20699 20964 20698 +3 19362 23128 20948 +3 20964 22334 22145 +3 35557 35373 35781 +3 35466 35670 35902 +3 13219 13613 8089 +3 35572 35379 35857 +3 14019 14018 13920 +3 11801 9517 1996 +3 1996 9517 3330 +3 11791 11801 1996 +3 9517 11332 3330 +3 12428 12517 12427 +3 12517 12516 12427 +3 12971 12970 12877 +3 12878 12971 12877 +3 25468 25467 16751 +3 27892 27777 12340 +3 24451 17671 21290 +3 13110 13146 23250 +3 21123 21122 20309 +3 23467 21090 6517 +3 8023 563 562 +3 10242 8023 562 +3 738 1731 284 +3 35748 35401 35865 +3 13783 2927 3189 +3 11356 8023 10242 +3 11773 2927 11727 +3 3049 9992 11070 +3 9655 11773 11260 +3 2927 3049 3189 +3 2638 1155 219 +3 2927 13783 11727 +3 12501 12591 12500 +3 12681 12680 12590 +3 27148 27638 19243 +3 10591 12294 12898 +3 8882 20011 17082 +3 21300 21301 22431 +3 20455 21232 21231 +3 12409 12408 12322 +3 12253 23349 2235 +3 18545 18641 18544 +3 30602 30534 27054 +3 22134 22230 22133 +3 20452 20455 21231 +3 21232 22254 22253 +3 21231 21232 22253 +3 22254 15472 15151 +3 22253 22254 15151 +3 15472 21297 21296 +3 15151 15472 21296 +3 5699 9401 14222 +3 13932 14030 13931 +3 13430 12987 21296 +3 12343 12429 12342 +3 13932 13931 13833 +3 9784 9900 35943 +3 12518 12517 12428 +3 7460 13779 11057 +3 12807 12899 13861 +3 13979 35314 6905 +3 21297 13430 21296 +3 12236 12235 12152 +3 29088 29089 29225 +3 12927 14279 9921 +3 12615 12705 12614 +3 12120 12927 9921 +3 27402 19236 29688 +3 12794 12793 12704 +3 26622 11529 26621 +3 18223 18317 19117 +3 26525 11613 11545 +3 14765 14877 7891 +3 33469 33937 2959 +3 13969 2928 3192 +3 12861 12862 12954 +3 11740 11739 11659 +3 12961 12869 16929 +3 12955 13049 13048 +3 2385 15700 15699 +3 17093 12961 16929 +3 25803 25715 24469 +3 30886 26339 26338 +3 25578 25105 25721 +3 21181 24810 21267 +3 22906 22907 23005 +3 21684 20072 20327 +3 13257 13256 13161 +3 11607 11606 11539 +3 20059 21325 18169 +3 13544 13642 13641 +3 25335 25336 24787 +3 13886 7147 25539 +3 20363 21132 20324 +3 23557 21728 25249 +3 30887 26337 30888 +3 21125 21124 20315 +3 32522 32631 32521 +3 32245 32347 32244 +3 34844 114 6935 +3 34734 15074 15075 +3 13568 13303 12254 +3 12088 1144 13181 +3 13505 11642 13504 +3 24873 24492 25953 +3 13259 13260 13355 +3 13356 13451 13450 +3 12591 12681 12590 +3 12323 12322 12237 +3 21866 15744 13329 +3 12968 12967 12874 +3 12730 12373 12281 +3 11715 11970 1381 +3 13303 21136 8795 +3 13182 11617 13181 +3 33324 33323 33218 +3 26226 24948 26083 +3 34706 34705 34577 +3 29226 29363 29362 +3 33601 33728 33727 +3 11435 11434 33659 +3 11494 11560 11559 +3 11493 11494 11559 +3 13821 13820 13722 +3 11559 11560 11633 +3 12886 12885 12793 +3 5585 5583 5450 +3 12532 12442 27789 +3 14650 14560 14651 +3 14270 11888 12384 +3 25803 24113 25715 +3 35537 35430 35493 +3 12457 12368 11888 +3 14270 12457 11888 +3 13287 13192 12368 +3 12457 13287 12368 +3 5426 10347 13192 +3 13287 5426 13192 +3 5426 12380 13284 +3 10347 5426 13284 +3 9919 13969 13284 +3 12380 9919 13284 +3 8221 2016 9176 +3 9919 7891 13969 +3 11660 11740 11659 +3 12409 12498 12408 +3 13048 13049 13142 +3 12442 12531 12441 +3 12622 12531 12532 +3 24840 25381 24102 +3 23749 24019 23966 +3 21728 24402 21822 +3 24074 24013 26230 +3 14880 15000 14999 +3 18740 21033 18741 +3 12351 12352 12437 +3 12527 12526 12437 +3 23024 22537 10939 +3 23029 23127 21489 +3 13465 12870 12895 +3 12962 12870 4418 +3 12202 11446 12119 +3 13300 10383 12292 +3 35946 28856 28590 +3 11635 13600 14187 +3 13445 13446 13541 +3 13640 13738 13737 +3 13542 13640 13639 +3 13541 13542 13639 +3 12971 13065 12970 +3 13065 13064 12970 +3 13159 13158 13064 +3 13065 13159 13064 +3 11926 11925 11839 +3 11840 11926 11839 +3 15601 24564 16922 +3 25038 26496 23494 +3 12600 12779 21004 +3 23467 6517 23269 +3 14868 8904 10097 +3 23365 23467 23269 +3 21090 21004 6517 +3 11523 11522 11459 +3 1408 16164 14149 +3 13569 12254 1017 +3 30995 30994 30936 +3 31051 31113 31112 +3 12587 12677 12586 +3 20460 20459 20375 +3 35135 35132 2140 +3 10006 10242 370 +3 13348 13443 13347 +3 13443 13539 13442 +3 13539 13538 13442 +3 12058 13115 13114 +3 13931 13930 13832 +3 13539 13637 13636 +3 13637 13735 13636 +3 13833 13931 13832 +3 13735 13833 13832 +3 13734 13735 13832 +3 14029 14028 13930 +3 13931 14029 13930 +3 14127 14126 14028 +3 14029 14127 14028 +3 14223 14222 14126 +3 14127 14223 14126 +3 14223 5699 14222 +3 11260 12126 9401 +3 13559 20404 12987 +3 87 4523 10006 +3 13834 13932 13833 +3 13430 13559 12987 +3 12879 12878 12786 +3 13736 13834 13833 +3 13518 13095 11895 +3 12787 12879 12786 +3 23414 6261 20404 +3 32198 32299 32197 +3 1861 8518 1743 +3 13734 13832 13733 +3 13559 23414 20404 +3 26336 30889 30888 +3 20399 20395 23369 +3 30601 27495 27379 +3 23468 13683 13585 +3 33490 33609 33489 +3 12250 27877 27993 +3 13683 13586 12389 +3 17561 20496 20497 +3 12621 12620 12530 +3 13294 13882 5418 +3 23721 25178 25179 +3 13050 26228 13049 +3 11524 11592 11591 +3 14909 15029 13757 +3 35717 35507 35411 +3 35068 35067 34938 +3 34436 34573 34435 +3 34939 35068 34938 +3 24268 24194 21720 +3 13177 21889 21908 +3 12705 12794 12704 +3 21889 23806 21908 +3 18741 21034 18644 +3 11560 7169 11633 +3 13543 13544 13641 +3 11540 11539 11475 +3 2904 111 23370 +3 13642 13740 13739 +3 12531 12621 12530 +3 9192 7147 11568 +3 21132 21127 20324 +3 12711 12710 12620 +3 3668 8682 4061 +3 13945 23367 15597 +3 11617 13568 13569 +3 20498 15735 12088 +3 15735 1144 12088 +3 11617 11694 13181 +3 23529 22879 24460 +3 12916 35627 35870 +3 13451 13547 13546 +3 13355 13356 13450 +3 13447 13448 13543 +3 20706 20788 20705 +3 12977 13071 12976 +3 13165 13164 13070 +3 11642 12730 12281 +3 12730 13202 1381 +3 13202 11715 1381 +3 12373 12730 1381 +3 23414 12575 13949 +3 30420 21573 27375 +3 17294 30755 7094 +3 34578 34706 34577 +3 29225 29226 29362 +3 29363 29500 29499 +3 29362 29363 29499 +3 12888 12889 12981 +3 11493 33541 11494 +3 11851 11850 11766 +3 12486 12576 8647 +3 24448 25254 21158 +3 11613 11612 11545 +3 30989 30988 30930 +3 35795 35872 35595 +3 35786 35737 35690 +3 34091 21457 34092 +3 12197 12457 14270 +3 14269 12197 14270 +3 13098 13287 12457 +3 12197 13098 12457 +3 12662 29 12465 +3 31240 31305 31239 +3 16532 10209 16686 +3 32299 32402 32298 +3 12617 12616 12526 +3 12438 12527 12437 +3 13360 13455 13359 +3 13551 13550 13454 +3 14248 21591 20011 +3 12870 16606 4418 +3 23225 22930 15744 +3 13178 12714 15327 +3 6261 23414 13949 +3 11446 11635 14187 +3 1018 11864 16969 +3 4504 5696 17089 +3 13160 13255 13159 +3 13446 13445 13350 +3 13351 13350 13254 +3 13255 13351 13254 +3 13254 13253 13158 +3 13445 13541 13540 +3 13159 13254 13158 +3 13350 13349 13253 +3 12090 12091 27548 +3 12010 12091 12009 +3 31894 31893 31787 +3 33265 33264 33159 +3 3189 11070 3846 +3 5415 3189 3846 +3 13538 13539 13636 +3 13735 13734 13636 +3 13330 5998 5466 +3 5466 5998 2651 +3 3930 4063 16608 +3 20310 21123 20309 +3 13091 332 562 +3 14090 13330 5466 +3 370 562 4396 +3 21108 21107 21021 +3 12694 12693 12603 +3 12783 12782 12693 +3 26253 26458 25364 +3 12185 27437 27555 +3 11599 11598 11531 +3 12486 8540 12397 +3 13252 13348 13251 +3 11532 11599 11531 +3 13157 13252 13156 +3 13443 13442 13347 +3 13063 13157 13062 +3 13348 13347 13251 +3 12969 13063 12968 +3 13252 13251 13156 +3 12876 12969 12875 +3 13157 13156 13062 +3 27431 12009 12091 +3 13063 13062 12968 +3 10242 562 370 +3 25511 25515 24561 +3 22934 23245 23244 +3 35368 35653 35729 +3 13735 13736 13833 +3 23327 22934 23244 +3 12972 12971 12878 +3 13539 13540 13637 +3 11953 13589 14166 +3 12879 12972 12878 +3 35773 35654 35530 +3 13498 11953 14166 +3 12575 16294 15065 +3 13162 13161 13067 +3 13949 12575 15065 +3 35857 35480 12285 +3 32402 32401 32298 +3 31511 31598 31510 +3 18061 20532 20448 +3 20543 20625 20624 +3 18072 20456 20457 +3 12527 12617 12526 +3 12828 14277 10011 +3 10035 10739 12919 +3 10481 5426 13287 +3 13098 10481 13287 +3 12469 12380 5426 +3 10481 12469 5426 +3 12813 9919 12380 +3 12469 12813 12380 +3 11697 7891 9919 +3 12813 11697 9919 +3 12588 12587 12497 +3 26058 24535 24343 +3 11869 12828 11870 +3 11544 11543 11479 +3 11480 11544 11479 +3 11476 11540 11475 +3 35896 6862 26480 +3 13641 13642 13739 +3 18073 20457 20542 +3 23370 23468 13585 +3 13838 13837 13739 +3 22537 22637 22243 +3 7147 9192 11248 +3 12621 12531 12622 +3 22836 14831 22243 +3 24113 24107 25715 +3 26471 24717 25340 +3 21489 22637 22537 +3 24997 25356 25501 +3 31328 31395 31394 +3 11642 12281 13504 +3 13165 13260 13164 +3 13450 13451 13546 +3 9201 9344 9803 +3 9344 9337 9803 +3 13071 13165 13070 +3 13260 13259 13164 +3 26333 30891 26334 +3 26339 30885 26340 +3 11686 11685 11610 +3 11686 11767 11685 +3 12298 12384 35581 +3 23719 24920 24919 +3 21113 21026 18735 +3 12054 12055 13403 +3 29638 29637 29499 +3 455 456 21467 +3 29500 29638 29499 +3 12888 12981 12887 +3 13239 13891 6767 +3 4121 27753 35468 +3 11767 11851 11766 +3 12827 13294 13199 +3 35911 35785 12384 +3 4926 5554 13772 +3 13771 10772 8085 +3 20264 17093 20349 +3 29771 29770 29637 +3 34682 34810 34681 +3 28578 21363 28579 +3 31324 31325 31391 +3 34939 34938 34809 +3 34963 35092 34962 +3 35221 35220 35091 +3 35586 35679 35631 +3 35064 35065 35193 +3 11699 12197 14269 +3 11959 11699 14269 +3 12909 13098 12197 +3 11699 12909 12197 +3 13572 10481 13098 +3 12909 13572 13098 +3 13572 12559 12469 +3 10481 13572 12469 +3 11893 13875 8684 +3 12914 13614 11445 +3 14183 11445 8684 +3 12744 14183 8684 +3 13649 13648 13550 +3 13455 13551 13454 +3 13551 13649 13550 +3 13747 13746 13648 +3 13844 13843 13745 +3 13844 13942 13843 +3 13746 13844 13745 +3 13942 13941 13843 +3 16294 22239 22336 +3 11636 1018 5562 +3 11635 11637 13600 +3 11424 11474 11473 +3 13068 13067 12973 +3 13255 13254 13159 +3 12974 13068 12973 +3 13066 13160 13065 +3 13445 13444 13349 +3 13254 13350 13253 +3 12010 12009 11925 +3 11926 12010 11925 +3 102 15215 13012 +3 12731 35700 12642 +3 11785 13315 9120 +3 25369 20749 20666 +3 35767 35843 35945 +3 30872 30926 30871 +3 12466 20264 9676 +3 11674 11755 11673 +3 11674 11673 11598 +3 23600 23941 25278 +3 11599 11674 11598 +3 11755 11754 11673 +3 12694 12783 12693 +3 12426 27892 12340 +3 12783 12875 12782 +3 12968 13062 12967 +3 2608 1252 4110 +3 13183 15048 20156 +3 20839 25716 20757 +3 20624 20625 20705 +3 35695 34730 34981 +3 11570 13486 13148 +3 11961 12566 13896 +3 22537 22243 21135 +3 13486 11961 13896 +3 34730 35695 35435 +3 15210 15083 15737 +3 15065 16294 22336 +3 203 15592 22336 +3 20964 23424 20698 +3 23132 23230 22145 +3 22239 203 22336 +3 25652 25591 24848 +3 30885 26339 30886 +3 4523 10242 10006 +3 23492 25229 25227 +3 203 20453 20454 +3 29816 30472 29563 +3 13638 13736 13735 +3 15592 203 20454 +3 18280 2672 2540 +3 13637 13638 13735 +3 12303 12304 13589 +3 14187 11570 11871 +3 11953 12303 13589 +3 11890 1970 12304 +3 12303 11890 12304 +3 11890 13095 1970 +3 13208 1026 12221 +3 13095 12722 1970 +3 20542 20543 20624 +3 32507 32506 32401 +3 12707 12706 12616 +3 11205 11562 13682 +3 7555 14286 7786 +3 12617 12707 12616 +3 12559 12905 12813 +3 13875 12744 8684 +3 12469 12559 12813 +3 12030 11697 12813 +3 12905 12030 12813 +3 13597 11702 14660 +3 12030 13597 11697 +3 13403 12827 13199 +3 14277 14286 10011 +3 13009 4528 11893 +3 11611 11610 11543 +3 11544 11611 11543 +3 27528 24847 19346 +3 23129 23227 12868 +3 18448 18353 18449 +3 20025 18143 18144 +3 13740 13838 13739 +3 10604 11000 3987 +3 10091 7147 11248 +3 13936 13935 13837 +3 10091 11248 14230 +3 7147 13886 11568 +3 13645 13743 13644 +3 14231 10091 14230 +3 13547 13645 13644 +3 13841 13840 13742 +3 13546 13547 13644 +3 13743 13742 13644 +3 9344 9201 11645 +3 13260 13356 13355 +3 9803 9337 13427 +3 9337 12456 13427 +3 13760 13661 20010 +3 9921 14279 1016 +3 20453 22050 22049 +3 23117 23215 23116 +3 11611 11686 11610 +3 11767 11766 11685 +3 11869 11870 9451 +3 3985 11869 9451 +3 29638 29771 29637 +3 12828 10011 11870 +3 11740 11824 11739 +3 30098 30153 19800 +3 13323 3182 14871 +3 10254 11152 9993 +3 12046 12128 11130 +3 287 12032 4786 +3 13772 13771 8085 +3 4528 13875 11893 +3 12055 12827 13403 +3 10933 4395 4245 +3 12366 4528 14076 +3 11354 10010 11707 +3 20454 20453 22049 +3 1509 8082 1392 +3 22050 22948 20598 +3 20625 20706 20705 +3 4792 1382 14182 +3 31325 31392 31391 +3 11769 11768 11687 +3 26628 11612 11613 +3 12265 12350 12264 +3 12100 12182 12099 +3 12019 12100 12018 +3 12182 12181 12099 +3 26333 30892 30891 +3 12153 12152 12070 +3 31372 31371 31304 +3 33281 33390 33280 +3 34810 34939 34809 +3 31305 31372 31304 +3 34716 34715 34587 +3 33760 33894 33759 +3 12298 35581 12213 +3 32448 32447 32343 +3 34681 34680 34552 +3 5563 12214 35379 +3 21832 34754 21833 +3 35696 35944 35850 +3 13845 13844 13746 +3 13649 13747 13648 +3 23417 23026 21050 +3 20057 23417 21050 +3 13550 13549 13453 +3 13550 13648 13549 +3 13454 13550 13453 +3 13648 13647 13549 +3 11538 11537 11473 +3 32975 32976 33081 +3 11474 11538 11473 +3 11605 11604 11537 +3 26404 29633 27024 +3 12881 12974 12880 +3 11531 11530 11466 +3 13350 13445 13349 +3 25884 26026 26025 +3 35864 35651 35823 +3 20938 21021 20937 +3 1252 2651 6385 +3 14222 9401 14221 +3 2608 338 9012 +3 13062 13156 13061 +3 13251 13347 13250 +3 3846 13315 11785 +3 5723 3846 11785 +3 20205 20291 20290 +3 8567 12378 15078 +3 22049 22050 20598 +3 24505 2006 24417 +3 11418 11468 11417 +3 11468 11532 11467 +3 11467 11466 11416 +3 11532 11531 11467 +3 35910 35489 35837 +3 20598 22948 16775 +3 13766 14432 13668 +3 31594 31689 31593 +3 13347 13442 13346 +3 35602 35711 35447 +3 20460 20545 20459 +3 11871 11570 11872 +3 6008 12479 12394 +3 11570 13148 11872 +3 12642 11701 14074 +3 35350 35701 35889 +3 12298 14269 14270 +3 12731 12642 14074 +3 29900 29899 29770 +3 31508 31595 31507 +3 11468 11467 11417 +3 125 20811 2634 +3 23537 22294 24582 +3 26332 30897 30896 +3 10244 4523 87 +3 23664 23835 22591 +3 15637 22956 13855 +3 3846 11070 13315 +3 13253 13349 13252 +3 20045 20126 20125 +3 12119 14187 11871 +3 13444 13443 13348 +3 12972 13066 12971 +3 13600 13486 11570 +3 13066 13065 12971 +3 13160 13159 13065 +3 1486 10604 3987 +3 11801 11791 11000 +3 14279 12218 1016 +3 20044 20045 20125 +3 3925 3926 15342 +3 23397 23396 23299 +3 12796 12795 12706 +3 13747 13845 13746 +3 30897 26332 30898 +3 28581 33580 33700 +3 11700 11699 11959 +3 12039 11700 11959 +3 11700 12816 12909 +3 11699 11700 12909 +3 12816 12838 13572 +3 12909 12816 13572 +3 20211 20210 20125 +3 12649 12559 13572 +3 12707 12796 12706 +3 20126 20211 20125 +3 12200 11708 4101 +3 13944 13846 29831 +3 13661 21684 20010 +3 15343 3925 15342 +3 14130 14226 14129 +3 14039 14137 14038 +3 14132 14131 14033 +3 1486 3987 14225 +3 13838 13936 13837 +3 14034 14132 14033 +3 14034 14033 13935 +3 13936 14034 13935 +3 14228 14227 14131 +3 14132 14228 14131 +3 8304 11645 14227 +3 14228 8304 14227 +3 12568 13309 12925 +3 8304 9344 11645 +3 9899 126 7991 +3 1261 9899 7991 +3 11892 11891 12218 +3 11356 9278 8680 +3 23313 23312 23214 +3 14279 11892 12218 +3 12981 12980 12887 +3 15342 15215 102 +3 12888 12887 12795 +3 12796 12888 12795 +3 22146 22145 15193 +3 20708 20790 20789 +3 35401 35939 35788 +3 31997 31996 31895 +3 6767 9660 7681 +3 12838 12649 13572 +3 12812 12905 12559 +3 12649 12812 12559 +3 12029 12030 12905 +3 12812 12029 12905 +3 9335 15564 4395 +3 16156 6518 22067 +3 21481 8155 20069 +3 11937 11936 11850 +3 11851 11937 11850 +3 25941 23747 25798 +3 26262 22392 28247 +3 12184 12183 12101 +3 23747 24102 25798 +3 12267 12266 12183 +3 27317 12101 12100 +3 12352 12351 12266 +3 12184 12267 12183 +3 12352 12438 12437 +3 12267 12352 12266 +3 4657 9859 4925 +3 12737 12830 13760 +3 14183 12914 11445 +3 13322 13384 13614 +3 4528 13009 14076 +3 12914 13322 13614 +3 12029 11702 12030 +3 20388 20472 20387 +3 12507 12506 12417 +3 13718 13816 13815 +3 13974 12932 13876 +3 13326 12055 12054 +3 2760 21178 15730 +3 21132 22068 21127 +3 20638 20637 20555 +3 15733 13945 15597 +3 23227 12867 12868 +3 21027 21028 23396 +3 23321 22930 3182 +3 3182 23225 20947 +3 13167 13168 13262 +3 13454 13453 13358 +3 13359 13358 13262 +3 13263 13359 13262 +3 11680 11679 11604 +3 11538 11605 11537 +3 13442 13538 13441 +3 13734 13733 13635 +3 5593 87 9759 +3 87 10006 10123 +3 29771 29900 29770 +3 20297 20296 20210 +3 24067 24006 24007 +3 20211 20297 20210 +3 11469 11533 11468 +3 1975 15600 15736 +3 20382 20381 20296 +3 9401 665 14221 +3 5415 3846 5723 +3 13799 5415 5723 +3 14126 14125 14027 +3 13251 13250 13155 +3 20290 20291 20375 +3 14028 14126 14027 +3 13486 13896 13148 +3 20951 20952 21034 +3 20297 20382 20296 +3 20466 20465 20381 +3 20382 20466 20381 +3 20551 20550 20465 +3 12591 12590 12500 +3 20545 20544 20459 +3 21313 21402 11956 +3 30031 30030 29899 +3 27387 20677 27269 +3 13773 14261 12819 +3 1155 3999 219 +3 22716 22815 22715 +3 13923 13922 13824 +3 13825 13923 13824 +3 20466 20551 20465 +3 20496 17561 19882 +3 14684 17561 20497 +3 33467 32567 15610 +3 16306 9862 16453 +3 20633 20632 20550 +3 20551 20633 20550 +3 20714 20713 20632 +3 12605 12604 12514 +3 29497 29496 29359 +3 28435 28434 28314 +3 12515 12605 12514 +3 33160 33265 33159 +3 11070 9992 24581 +3 13349 13444 13348 +3 20633 20714 20632 +3 13444 13540 13443 +3 13540 13539 13443 +3 12607 12606 12516 +3 13540 13638 13637 +3 10604 11801 11000 +3 13835 13834 13736 +3 14285 35396 35639 +3 12610 12700 12609 +3 12867 21048 20965 +3 19328 22449 7107 +3 13943 13942 13844 +3 13359 13454 13358 +3 24831 30900 30899 +3 13845 13943 13844 +3 33820 9326 33026 +3 22055 22052 21124 +3 27079 27080 27198 +3 31531 31618 31617 +3 19167 18519 19114 +3 33503 33502 33389 +3 31260 31259 31195 +3 22031 3223 22032 +3 20796 20795 20713 +3 13145 16449 15023 +3 20447 20532 20531 +3 29961 13943 13944 +3 11708 8882 4101 +3 13273 13370 13489 +3 13683 12200 13586 +3 23435 17082 20582 +3 14226 1486 14225 +3 14032 14130 14031 +3 23272 33347 33459 +3 31793 31792 31692 +3 33869 33868 33734 +3 32198 32197 32097 +3 10687 7445 6957 +3 19806 34074 34731 +3 13603 11806 12393 +3 33874 33873 33739 +3 20714 20796 20713 +3 448 8671 11136 +3 12092 12091 12010 +3 20878 20877 20795 +3 23435 20582 20664 +3 13062 13061 12967 +3 13189 13190 11891 +3 1739 370 1525 +3 30902 21447 30849 +3 24983 20841 22385 +3 14846 15342 102 +3 3724 13273 13489 +3 16009 23027 22928 +3 20796 20878 20795 +3 13848 15868 16600 +3 33008 33114 33007 +3 64 8677 10740 +3 32994 33100 32993 +3 33051 33052 33156 +3 27783 35469 35512 +3 11781 11700 12039 +3 15023 16450 15148 +3 12121 11781 12039 +3 14945 15195 21978 +3 22044 14945 21978 +3 23225 15064 20947 +3 13367 23323 23026 +3 13074 13073 12979 +3 12980 13074 12979 +3 23245 21952 23244 +3 20878 20958 20957 +3 21952 21951 23244 +3 20877 20878 20957 +3 22650 3861 13558 +3 20958 21041 21040 +3 35512 35759 35349 +3 12980 12981 13074 +3 13075 13169 13074 +3 13169 13168 13074 +3 13455 13454 13359 +3 13264 13263 13168 +3 13169 13264 13168 +3 13360 13359 13263 +3 22452 22354 15193 +3 13264 13360 13263 +3 12908 12816 11700 +3 16450 16919 15148 +3 11781 12908 11700 +3 12908 12199 12838 +3 12816 12908 12838 +3 12199 13710 12649 +3 28087 28204 28203 +3 15331 15023 15460 +3 14948 15069 15460 +3 15023 15148 15460 +3 22930 23024 15744 +3 4418 16606 12737 +3 16606 12830 12737 +3 22258 21313 11956 +3 12706 12705 12615 +3 12706 12795 12705 +3 12616 12706 12615 +3 12795 12794 12705 +3 11845 11844 11760 +3 11680 11761 11679 +3 12177 12260 12176 +3 13930 14028 13929 +3 12345 12344 12259 +3 14028 14027 13929 +3 14225 14224 14128 +3 14031 14129 14030 +3 11469 11468 11418 +3 11419 11469 11418 +3 11466 11465 11415 +3 458 159 2124 +3 11260 11727 12126 +3 5699 11260 9401 +3 13832 13930 13831 +3 12784 12876 12783 +3 13156 13251 13155 +3 15884 4817 11206 +3 13608 11129 35858 +3 13347 13346 13250 +3 12681 12770 12769 +3 14261 8683 12819 +3 20347 20431 20134 +3 12126 9189 9629 +3 20957 20958 21040 +3 20376 20460 20375 +3 22431 20178 20179 +3 20064 20563 20541 +3 12754 12755 8968 +3 9630 1871 5589 +3 35601 13867 13608 +3 17154 2225 5458 +3 12498 12497 12408 +3 11824 11910 11823 +3 13530 26005 13434 +3 11824 11823 11739 +3 11694 13569 11618 +3 12238 12323 12237 +3 22934 23327 20700 +3 29103 29104 29240 +3 29900 30031 29899 +3 20701 22934 20700 +3 23037 22162 23035 +3 32197 32196 32096 +3 12695 12694 12604 +3 14150 13954 20403 +3 22119 22120 22215 +3 12605 12695 12604 +3 15194 19536 20778 +3 12364 13783 5415 +3 20718 20800 20717 +3 26102 23602 23591 +3 11675 11674 11599 +3 11600 11675 11599 +3 13639 13737 13736 +3 13638 13639 13736 +3 12789 12788 12699 +3 12700 12789 12699 +3 16760 13756 16603 +3 12178 12177 12095 +3 12183 12266 12182 +3 12351 12350 12265 +3 13943 14041 13942 +3 16155 23324 18608 +3 2768 22449 20451 +3 13272 21604 21592 +3 12838 12199 12649 +3 13710 12999 12812 +3 12649 13710 12812 +3 12112 12029 12812 +3 12999 12112 12812 +3 11620 11702 12029 +3 12112 11620 12029 +3 8682 1408 4061 +3 21604 12558 12918 +3 13756 11102 17094 +3 20373 20374 20457 +3 12464 1758 12200 +3 13168 13167 13073 +3 9337 10265 12456 +3 22507 22606 22605 +3 14226 14225 14129 +3 13934 14032 13933 +3 3537 12891 5353 +3 23127 21482 21489 +3 20962 20963 21045 +3 13318 14150 17007 +3 22830 12960 22836 +3 13937 14035 13936 +3 14035 14034 13936 +3 20301 20300 20214 +3 12877 12876 12784 +3 21951 21952 22550 +3 11858 12508 24922 +3 12364 12372 11806 +3 7168 11334 8548 +3 35543 35603 35587 +3 10099 288 8657 +3 3077 13695 11644 +3 3926 3930 15215 +3 11821 11907 11820 +3 13273 1758 12464 +3 13370 13273 12464 +3 20627 20708 20626 +3 13367 23227 23323 +3 11598 11673 11597 +3 13286 8035 9871 +3 13717 13716 15952 +3 12286 11076 14570 +3 11528 13326 12054 +3 13914 13913 13815 +3 17605 20218 20217 +3 12171 13570 11861 +3 20811 21400 20050 +3 15868 16300 16600 +3 16600 16300 4122 +3 12980 12979 12886 +3 12887 12980 12886 +3 22812 22911 22910 +3 22713 22812 22811 +3 26366 26332 26367 +3 29360 29497 29359 +3 181 19778 18181 +3 19435 20237 22160 +3 22928 23027 20784 +3 16300 1975 4122 +3 23413 20069 23125 +3 20374 20458 20457 +3 21482 22830 22637 +3 3537 20372 12891 +3 14040 14039 13941 +3 14040 14041 30092 +3 23417 13367 23026 +3 168 20057 14484 +3 21123 22044 21122 +3 23227 23129 23323 +3 12982 24405 25650 +3 22195 26245 11945 +3 8257 14504 14454 +3 12906 14254 15198 +3 11457 11456 31849 +3 34546 34545 34408 +3 24956 24859 24171 +3 22875 21537 26226 +3 24871 15201 19984 +3 11859 11945 22102 +3 20963 21046 21045 +3 4952 619 14971 +3 26332 26366 30898 +3 11480 30958 30957 +3 12616 12615 12525 +3 12526 12616 12525 +3 11931 11930 11844 +3 11761 11845 11760 +3 12701 12700 12610 +3 12611 12701 12610 +3 12177 12176 12094 +3 12095 12177 12094 +3 3987 2223 14224 +3 14129 14225 14128 +3 12981 12982 13075 +3 11533 11532 11468 +3 11416 11466 11415 +3 13625 13723 13624 +3 11727 9189 12126 +3 9401 12126 665 +3 12969 12968 12875 +3 13538 13537 13441 +3 13428 4817 15884 +3 13442 13441 13346 +3 11314 11692 11695 +3 13779 10143 11084 +3 11530 11529 11465 +3 13519 5987 13496 +3 11466 11530 11465 +3 27868 35636 35485 +3 14088 35496 27550 +3 9534 11616 8866 +3 12755 12756 8969 +3 8754 12666 12754 +3 11858 24922 25430 +3 6383 1980 64 +3 12948 13042 12947 +3 25272 12139 12058 +3 130 11261 10092 +3 10207 10206 10088 +3 21875 21586 21780 +3 13998 10205 13999 +3 17603 20215 20129 +3 13602 10826 7919 +3 12158 12241 12157 +3 22937 21875 22838 +3 29655 29788 29787 +3 27159 27160 27278 +3 19246 27027 30824 +3 31595 31594 31507 +3 23349 23056 2235 +3 20156 13428 15884 +3 12784 12783 12694 +3 12695 12784 12694 +3 13783 12364 9189 +3 11727 13783 9189 +3 13194 12542 12642 +3 12479 2915 12394 +3 11756 11755 11674 +3 11675 11756 11674 +3 13444 13445 13540 +3 13541 13639 13638 +3 12881 12880 12788 +3 12789 12881 12788 +3 12096 12095 12014 +3 12015 12096 12014 +3 12266 12351 12265 +3 12351 12437 12436 +3 12822 14081 13202 +3 12730 12822 13202 +3 25772 13555 25155 +3 26074 24724 23814 +3 30898 24831 30899 +3 35942 35876 35558 +3 2499 901 13394 +3 35532 13304 35638 +3 35092 35091 34962 +3 13598 11781 12121 +3 11875 13598 12121 +3 12045 12115 12369 +3 13002 12908 11781 +3 8527 13766 13861 +3 12143 12045 12369 +3 13074 13168 13073 +3 17084 13787 12960 +3 35063 35062 34933 +3 10123 10006 1739 +3 14130 14129 14031 +3 20871 20872 20951 +3 12517 12607 12516 +3 14126 14222 14125 +3 12696 12695 12605 +3 13636 13734 13635 +3 13349 13348 13252 +3 9553 9116 1174 +3 13158 13253 13157 +3 26333 30893 30892 +3 12020 27319 27318 +3 3457 13185 7452 +3 11058 8090 13204 +3 10837 8035 8419 +3 11706 11790 13204 +3 8090 11706 13204 +3 24151 24092 13695 +3 11706 12141 11790 +3 3925 3724 3926 +3 11889 9233 8482 +3 3724 13489 3926 +3 15342 3926 15215 +3 12677 12766 12676 +3 15448 15320 15321 +3 13701 8035 12208 +3 7277 7276 7169 +3 13598 13002 11781 +3 14283 12199 12908 +3 13002 14283 12908 +3 14283 13688 13710 +3 12045 12143 11798 +3 12834 12045 11798 +3 20476 20477 20561 +3 20392 20393 20476 +3 12183 12182 12100 +3 12101 12183 12100 +3 12096 12178 12095 +3 11605 11680 11604 +3 11892 13189 11891 +3 11951 11895 13190 +3 14528 7344 14823 +3 13189 11951 13190 +3 11615 13866 13848 +3 11951 14186 11895 +3 14334 14971 11508 +3 21415 18668 17716 +3 10203 10323 10322 +3 15365 13866 4939 +3 13942 14040 13941 +3 34429 34566 34428 +3 13746 13745 13647 +3 13648 13746 13647 +3 23300 23397 23299 +3 12887 12886 12794 +3 25631 12089 24948 +3 13275 13372 13392 +3 12199 14283 13710 +3 12834 11798 13619 +3 13688 13094 12999 +3 13710 13688 12999 +3 12195 12112 12999 +3 13094 12195 12999 +3 6964 12818 35776 +3 5425 11628 14162 +3 34292 34291 34153 +3 11628 13619 14162 +3 33375 33266 33489 +3 19520 17464 17385 +3 11543 11610 11542 +3 11766 11765 11684 +3 11685 11684 11609 +3 11610 11685 11609 +3 31436 31508 31435 +3 12790 12789 12700 +3 13866 15868 13848 +3 12260 12259 12176 +3 10322 10202 10203 +3 12294 10121 10240 +3 5565 14065 11646 +3 6955 11486 6956 +3 30163 30162 30030 +3 19236 29538 29688 +3 9801 13713 8048 +3 7273 11630 11631 +3 665 9629 13515 +3 10740 4261 6383 +3 19121 20723 8116 +3 11646 14065 10385 +3 12754 8860 8754 +3 13075 12982 13076 +3 13205 13976 11084 +3 10143 13205 11084 +3 35891 35614 35893 +3 13205 136 13976 +3 4374 4240 10651 +3 4240 4374 4373 +3 9905 6383 4261 +3 4394 9905 4261 +3 1979 1980 6383 +3 9905 1979 6383 +3 12565 9743 1980 +3 1979 12565 1980 +3 12484 12224 9743 +3 12565 12484 9743 +3 1052 288 12224 +3 12484 1052 12224 +3 35562 35494 35625 +3 1052 3457 288 +3 8106 12226 8217 +3 8325 8216 8217 +3 288 10099 12224 +3 5875 3043 1622 +3 32298 32401 32297 +3 8346 9538 66 +3 17093 16929 20349 +3 8082 1509 8194 +3 12876 12875 12783 +3 11860 21578 6258 +3 13783 3189 5415 +3 10682 14188 10683 +3 35673 35626 35376 +3 11878 11707 10373 +3 11840 11839 11755 +3 12542 11701 12642 +3 13540 13541 13638 +3 11756 11840 11755 +3 12974 12973 12880 +3 30031 30163 30030 +3 11845 11931 11844 +3 12015 12014 11930 +3 12350 12351 12436 +3 12526 12525 12436 +3 31736 31836 31735 +3 11504 11642 13505 +3 32099 32098 31998 +3 32508 32617 32507 +3 11782 11620 12112 +3 12195 11782 12112 +3 9518 12286 11620 +3 11782 9518 11620 +3 13816 13914 13815 +3 14492 11076 12293 +3 12125 13326 11528 +3 14012 14011 13913 +3 12115 11779 11865 +3 30893 26333 26370 +3 14921 21402 21313 +3 20372 20366 12891 +3 370 4396 1525 +3 13168 13263 13262 +3 14116 14212 14211 +3 27081 11754 11755 +3 9647 10746 7198 +3 30296 30295 30162 +3 13906 14004 14003 +3 26361 30957 30901 +3 30163 30296 30162 +3 2517 193 1855 +3 10683 10807 10806 +3 10443 10563 4261 +3 61 11058 11707 +3 11878 61 11707 +3 13327 8090 11058 +3 61 13327 11058 +3 13398 11706 8090 +3 13327 13398 8090 +3 12203 12141 11706 +3 13398 12203 11706 +3 30429 30428 30295 +3 35936 11959 12213 +3 13701 8482 8419 +3 9742 8157 13185 +3 20049 20540 20534 +3 22665 29890 29761 +3 93 155 11867 +3 13999 10206 14000 +3 30487 35694 35389 +3 5041 5869 6508 +3 6874 30339 28730 +3 30957 26361 11480 +3 4262 2790 4948 +3 23117 23116 23018 +3 5562 10586 11715 +3 26899 24464 27017 +3 11850 11936 11849 +3 24218 24298 26077 +3 12178 12261 12177 +3 12261 12260 12177 +3 12610 12609 12519 +3 12520 12610 12519 +3 12389 13586 20012 +3 16006 16005 11341 +3 16005 8567 11341 +3 22705 22804 22803 +3 13738 13836 13737 +3 14032 14031 13933 +3 13682 14248 8882 +3 15744 23024 10939 +3 21048 22936 22937 +3 12868 12867 20965 +3 28372 29680 28494 +3 12835 11636 12928 +3 12795 12887 12794 +3 11637 5053 13600 +3 23410 23409 23312 +3 11936 11935 11849 +3 11628 12834 13619 +3 23215 23313 23214 +3 26332 26370 26369 +3 20457 20458 20542 +3 34057 19037 2685 +3 32427 32428 32532 +3 31132 31133 31195 +3 31934 31933 31835 +3 13412 16016 16303 +3 23313 23410 23312 +3 22428 22526 22427 +3 9553 3848 8239 +3 13029 2913 10390 +3 13409 13029 10390 +3 12875 12968 12874 +3 11610 11609 11542 +3 13581 11894 35945 +3 16005 15865 8567 +3 35682 35858 13691 +3 14018 14116 14017 +3 11732 11733 11816 +3 22833 22932 22438 +3 10322 14094 10441 +3 10321 10322 10441 +3 35887 35566 35583 +3 14190 10561 10441 +3 10931 10807 7460 +3 8961 2515 8853 +3 2656 13587 10807 +3 8853 2515 2514 +3 13778 13779 7460 +3 13587 13778 7460 +3 10144 10143 13779 +3 13778 10144 13779 +3 12810 13205 10143 +3 10144 12810 10143 +3 938 136 13205 +3 12810 938 13205 +3 9529 4394 136 +3 938 9529 136 +3 4659 9905 4394 +3 9529 4659 4394 +3 1978 1979 9905 +3 4659 1978 9905 +3 3996 12565 1979 +3 1978 3996 1979 +3 13328 12484 12565 +3 3996 13328 12565 +3 289 1052 12484 +3 13328 289 12484 +3 14181 3457 1052 +3 289 14181 1052 +3 813 13185 3457 +3 14181 813 3457 +3 9001 9742 13185 +3 813 9001 13185 +3 6127 6646 9742 +3 9001 6127 9742 +3 1852 6127 693 +3 6127 1852 6646 +3 9629 13520 13515 +3 8735 14258 11261 +3 13814 13912 13911 +3 30296 30429 30295 +3 93 810 8349 +3 12151 12152 12234 +3 7575 13476 13864 +3 4364 9741 124 +3 8865 8881 8628 +3 30898 26366 24831 +3 8977 13889 9102 +3 13238 13791 9544 +3 12126 9629 665 +3 29543 35514 35500 +3 12437 12526 12436 +3 11931 12015 11930 +3 13506 11504 13505 +3 11479 11543 11478 +3 32731 32730 32616 +3 12822 12730 11642 +3 8127 10827 11784 +3 20458 20543 20542 +3 34829 34958 34828 +3 3193 12724 13002 +3 13598 3193 13002 +3 12724 13494 14283 +3 13002 12724 14283 +3 13494 13709 13688 +3 31999 32099 31998 +3 2791 13412 4542 +3 20372 21208 21138 +3 20289 20374 20373 +3 10006 370 1739 +3 12266 12265 12182 +3 22821 22920 22820 +3 3176 2879 12732 +3 11417 11467 11416 +3 12067 12068 12149 +3 35775 35663 35790 +3 35409 35871 35630 +3 35744 35845 35553 +3 35477 35632 35871 +3 12206 11878 12221 +3 1026 12206 12221 +3 8777 61 11878 +3 12206 8777 11878 +3 7466 13327 61 +3 8777 7466 61 +3 14267 13398 13327 +3 7466 14267 13327 +3 13510 12203 13398 +3 14267 13510 13398 +3 13510 13781 11974 +3 12203 13510 11974 +3 13390 7997 14079 +3 4098 5606 8900 +3 11933 11932 11845 +3 13583 14176 13680 +3 35767 11894 35731 +3 3340 11130 12662 +3 14283 13494 13688 +3 13709 13093 13094 +3 2791 4542 8045 +3 13688 13709 13094 +3 12928 5562 11715 +3 13283 3193 35674 +3 11543 11542 11478 +3 14909 2499 15029 +3 12346 12345 12260 +3 21778 21541 26146 +3 12014 12095 12013 +3 12261 12346 12260 +3 13737 13835 13736 +3 12700 12699 12609 +3 12011 12092 12010 +3 13933 13932 13834 +3 12092 12174 12091 +3 12174 12173 12091 +3 13934 13933 13835 +3 13836 13934 13835 +3 13639 13640 13737 +3 13836 13835 13737 +3 13351 13446 13350 +3 13446 13542 13541 +3 12345 12431 12344 +3 12431 12520 12430 +3 11761 11760 11679 +3 12346 12432 12345 +3 11685 11766 11684 +3 11850 11849 11765 +3 13990 12802 19535 +3 12873 25585 12781 +3 276 21047 15325 +3 10008 8045 15325 +3 13093 12280 12195 +3 13094 13093 12195 +3 11868 11782 12195 +3 12280 11868 12195 +3 21047 276 23403 +3 23404 21047 23403 +3 18163 18072 18164 +3 21047 15324 15325 +3 4525 11784 9980 +3 10950 8233 8340 +3 3859 5416 14250 +3 4664 2477 20322 +3 21768 21769 7107 +3 21481 20069 23413 +3 11308 11183 11309 +3 4258 10564 14093 +3 10322 10323 14094 +3 7161 11553 7058 +3 14095 14191 14190 +3 14094 14095 14190 +3 14191 14289 14288 +3 14190 14191 14288 +3 2519 2656 14288 +3 14289 2519 14288 +3 13516 13587 2656 +3 2519 13516 2656 +3 13714 13778 13587 +3 13516 13714 13587 +3 10142 10144 13778 +3 13714 10142 13778 +3 3194 12810 10144 +3 10142 3194 10144 +3 11391 938 12810 +3 3194 11391 12810 +3 7787 9529 938 +3 11391 7787 938 +3 11245 4659 9529 +3 7787 11245 9529 +3 4255 1978 4659 +3 11245 4255 4659 +3 8663 3996 1978 +3 4255 8663 1978 +3 13233 13328 3996 +3 8663 13233 3996 +3 184 289 13328 +3 13233 184 13328 +3 9751 14181 289 +3 184 9751 289 +3 13900 813 14181 +3 9751 13900 14181 +3 8894 9001 813 +3 13900 8894 813 +3 6765 6127 9001 +3 8894 6765 9001 +3 35810 35650 35606 +3 6765 693 6127 +3 12659 13213 12292 +3 8115 3201 8442 +3 9629 11806 13520 +3 11806 12372 12393 +3 11354 7682 7088 +3 11817 11903 11902 +3 35861 35574 35526 +3 11733 11817 11816 +3 103 13881 3594 +3 13415 103 3594 +3 2907 1643 9917 +3 13889 2907 9917 +3 8344 7675 14185 +3 11735 11819 11734 +3 9189 11806 9629 +3 10209 13907 13906 +3 30893 26370 26332 +3 9990 9991 11362 +3 11504 12822 11642 +3 11936 12021 11935 +3 30563 30562 30428 +3 11279 23028 928 +3 1873 9518 11782 +3 11868 1873 11782 +3 12377 12293 1873 +3 1873 12293 9518 +3 13914 14012 13913 +3 14012 14110 14109 +3 15469 21481 15468 +3 4907 22266 21862 +3 12928 11715 13202 +3 14081 12928 13202 +3 13930 13929 13831 +3 30850 12089 30851 +3 15215 16608 13012 +3 12919 13288 10498 +3 12232 12233 12317 +3 11986 11987 12067 +3 12057 13208 12210 +3 14390 14389 25657 +3 9758 1026 13208 +3 12057 9758 13208 +3 12124 12206 1026 +3 9758 12124 1026 +3 13207 8777 12206 +3 12124 13207 12206 +3 1848 7466 8777 +3 13207 1848 8777 +3 2899 14267 7466 +3 1848 2899 7466 +3 2899 11877 13510 +3 14267 2899 13510 +3 11877 12225 13781 +3 13510 11877 13781 +3 35544 35510 35885 +3 35540 35379 35572 +3 32744 32856 32743 +3 13408 13504 13285 +3 20406 20402 20364 +3 12692 25585 25291 +3 19171 19014 18532 +3 9879 13775 4922 +3 29399 29262 35365 +3 24271 25010 24901 +3 15047 12807 12719 +3 17694 17790 17789 +3 13452 13453 13548 +3 1018 16969 11408 +3 23103 23104 23201 +3 12886 12979 12885 +3 12701 12790 12700 +3 12432 12431 12345 +3 11844 11930 11843 +3 12014 12013 11929 +3 14225 3987 14224 +3 13835 13933 13834 +3 30421 30024 15092 +3 34952 34951 34822 +3 12697 12696 12606 +3 12607 12697 12606 +3 12697 12786 12696 +3 12786 12785 12696 +3 12786 12878 12785 +3 12878 12877 12785 +3 14031 14030 13932 +3 13933 14031 13932 +3 12260 12345 12259 +3 12520 12519 12430 +3 12521 12520 12431 +3 12432 12521 12431 +3 11766 11850 11765 +3 12611 12610 12520 +3 25631 30851 12089 +3 23225 15744 21866 +3 15324 10008 15325 +3 5560 13029 13409 +3 14222 14221 14125 +3 18804 18090 42 +3 11938 27087 27205 +3 11516 11517 11584 +3 31043 31105 31104 +3 33410 33411 33523 +3 13423 4907 21862 +3 18846 18845 21214 +3 13358 13453 13357 +3 13453 13549 13548 +3 13167 13166 13072 +3 12979 13073 12978 +3 12830 13661 13760 +3 21281 13985 15469 +3 12966 23572 12873 +3 35365 30076 29399 +3 11917 12001 11916 +3 10323 14095 14094 +3 14096 14192 14191 +3 14095 14096 14191 +3 14192 14290 14289 +3 14191 14192 14289 +3 2654 2519 14289 +3 14290 2654 14289 +3 13417 13516 2519 +3 2654 13417 2519 +3 13574 13714 13516 +3 13417 13574 13516 +3 13793 10142 13714 +3 13574 13793 13714 +3 13805 3194 10142 +3 13793 13805 10142 +3 5861 11391 3194 +3 13805 5861 3194 +3 7904 7787 11391 +3 5861 7904 11391 +3 7931 11245 7787 +3 7904 7931 7787 +3 4388 4255 11245 +3 7931 4388 11245 +3 7875 8663 4255 +3 4388 7875 4255 +3 5595 13233 8663 +3 7875 5595 8663 +3 303 184 13233 +3 5595 303 13233 +3 13419 9751 184 +3 303 13419 184 +3 12923 13900 9751 +3 13419 12923 9751 +3 4665 8894 13900 +3 12923 4665 13900 +3 158 6765 8894 +3 4665 158 8894 +3 4636 693 6765 +3 16288 16433 16287 +3 28191 35655 35415 +3 6765 158 4636 +3 5694 9658 12648 +3 9658 9419 12648 +3 11816 11817 11902 +3 11903 11987 11986 +3 4247 7807 12386 +3 12152 12235 12234 +3 12382 12471 13881 +3 103 12382 13881 +3 10496 12114 1643 +3 12837 6508 13594 +3 35761 35544 35612 +3 30429 30563 30428 +3 13921 14019 13920 +3 5606 4098 16258 +3 7629 7628 7514 +3 12782 12874 12781 +3 13262 13358 13261 +3 23369 20395 3537 +3 16155 13026 3196 +3 13099 2768 20451 +3 33643 33642 33523 +3 33022 33021 32913 +3 31691 31690 31595 +3 13283 12815 12724 +3 11875 35674 13598 +3 12815 12645 13494 +3 23111 23209 23208 +3 12724 12815 13494 +3 3621 16533 12601 +3 23012 23013 23110 +3 26196 12110 26195 +3 12822 13008 14081 +3 9117 10845 13684 +3 21029 20364 8223 +3 10740 6383 64 +3 11745 11744 11664 +3 11977 12057 12295 +3 8797 3319 35890 +3 13697 9758 12057 +3 11977 13697 12057 +3 14073 12124 9758 +3 13697 14073 9758 +3 14278 13207 12124 +3 14073 14278 12124 +3 11328 1848 13207 +3 14278 11328 13207 +3 2763 2899 1848 +3 11328 2763 1848 +3 2763 7973 11877 +3 2899 2763 11877 +3 7973 13780 12225 +3 11877 7973 12225 +3 12134 12052 12225 +3 13780 12134 12225 +3 13911 14009 14008 +3 14298 14297 14199 +3 12966 13061 13060 +3 13410 13000 10832 +3 12874 12967 12873 +3 20373 17886 20289 +3 12645 13687 13709 +3 13494 12645 13709 +3 13687 13380 13093 +3 21217 22157 22155 +3 21216 21217 22155 +3 12071 12153 12070 +3 13453 13452 13357 +3 8105 8106 8217 +3 13262 13261 13166 +3 12790 12882 12789 +3 12882 12881 12789 +3 12095 12094 12013 +3 11930 12014 11929 +3 3987 11000 2223 +3 11000 9655 2223 +3 8325 8217 12226 +3 33439 33552 33551 +3 9871 10826 13286 +3 27148 26498 35510 +3 12606 12605 12515 +3 12516 12606 12515 +3 11600 11599 11532 +3 11533 11600 11532 +3 25487 11771 30843 +3 14129 14128 14030 +3 7883 10827 8127 +3 12431 12430 12344 +3 11760 11844 11759 +3 11930 11929 11843 +3 12521 12611 12520 +3 12975 12974 12881 +3 12835 12928 14081 +3 21494 21586 21875 +3 35684 13400 11805 +3 12794 12886 12793 +3 13525 15539 21283 +3 20406 21217 20402 +3 13709 13687 13093 +3 13380 12279 12280 +3 13093 13380 12280 +3 11952 11868 12280 +3 22527 22626 22625 +3 22157 15539 13525 +3 15539 21284 21283 +3 23019 23018 22919 +3 8628 9991 9990 +3 231 5606 16404 +3 22731 23037 23035 +3 13647 13745 13646 +3 7058 7059 7163 +3 30697 30696 30562 +3 14097 14096 13998 +3 13999 14097 13998 +3 14097 14193 14192 +3 14096 14097 14192 +3 14193 14291 14290 +3 14192 14193 14290 +3 2788 2654 14290 +3 14291 2788 14290 +3 297 13417 2654 +3 2788 297 2654 +3 13514 13574 13417 +3 297 13514 13417 +3 13788 13793 13574 +3 13514 13788 13574 +3 12546 13805 13793 +3 13788 12546 13793 +3 5992 5861 13805 +3 12546 5992 13805 +3 9645 7904 5861 +3 5992 9645 5861 +3 7325 7931 7904 +3 9645 7325 7904 +3 3055 4388 7931 +3 7325 3055 7931 +3 5194 7875 4388 +3 3055 5194 4388 +3 2637 5595 7875 +3 5194 2637 7875 +3 674 303 5595 +3 2637 674 5595 +3 9750 13419 303 +3 674 9750 303 +3 13 12923 13419 +3 9750 13 13419 +3 8787 4665 12923 +3 13 8787 12923 +3 6792 158 4665 +3 8787 6792 4665 +3 11004 13987 7923 +3 6147 11393 9176 +3 2367 2087 13669 +3 9658 13414 10120 +3 12947 12946 12853 +3 7923 8977 3200 +3 11902 11903 11986 +3 11987 12068 12067 +3 5723 11785 160 +3 130 5697 14299 +3 13316 5694 12471 +3 12382 13316 12471 +3 10496 12837 12114 +3 6508 3344 13594 +3 30563 30697 30562 +3 30831 30830 30696 +3 14788 15546 5142 +3 7807 10876 12386 +3 11783 8127 11784 +3 13059 25184 13060 +3 21213 22148 22147 +3 12604 12694 12603 +3 17604 17605 20217 +3 32297 32400 32296 +3 12279 11952 12280 +3 22920 22919 22820 +3 9669 1873 11868 +3 11952 9669 11868 +3 14415 12377 12846 +3 9669 12377 1873 +3 14110 14206 14205 +3 1622 4104 1171 +3 1034 16155 3196 +3 22526 22527 22625 +3 10934 10265 9337 +3 9393 14064 23406 +3 34981 32684 35246 +3 12967 13061 12966 +3 6892 1753 10876 +3 14065 5565 13316 +3 11978 11977 12381 +3 35902 35890 35659 +3 9857 13697 11977 +3 11978 9857 11977 +3 14169 14073 13697 +3 9857 14169 13697 +3 12833 14278 14073 +3 14169 12833 14073 +3 438 11328 14278 +3 12833 438 14278 +3 12289 2763 11328 +3 438 12289 11328 +3 12289 11622 7973 +3 2763 12289 7973 +3 11622 13601 13780 +3 7973 11622 13780 +3 12217 12134 13780 +3 13601 12217 13780 +3 30697 30831 30696 +3 31045 31107 31106 +3 10832 10035 3732 +3 12418 12417 12331 +3 13791 2902 9544 +3 13155 13154 13060 +3 28310 28430 28987 +3 14011 14012 14109 +3 22725 22724 22625 +3 22626 22725 22625 +3 22824 22823 22724 +3 15225 12381 12295 +3 11933 11847 11934 +3 13061 13155 13060 +3 12381 15225 14378 +3 13962 9897 9781 +3 11980 12061 7990 +3 10373 11707 10010 +3 4542 10852 8125 +3 11846 11847 11845 +3 11862 12538 14259 +3 7756 11896 7872 +3 7641 33022 7527 +3 24500 13890 13332 +3 18210 19320 18184 +3 33022 7641 7640 +3 35451 35741 35406 +3 35532 35638 22835 +3 14003 10327 13906 +3 34870 35866 33337 +3 8860 12754 8967 +3 12666 12755 12754 +3 16380 13811 10210 +3 9789 9520 14281 +3 31479 25320 23519 +3 12882 12975 12881 +3 12875 12874 12782 +3 16022 15343 14846 +3 13069 13068 12974 +3 33607 33606 33487 +3 12436 12525 12435 +3 22155 22157 13525 +3 13073 13072 12978 +3 9658 5565 13414 +3 22725 22824 22724 +3 6951 34465 6952 +3 34001 34000 33865 +3 32404 32403 32300 +3 32301 32404 32300 +3 22923 22922 22823 +3 22824 22923 22823 +3 13719 13621 13720 +3 23650 15321 15320 +3 8008 8009 11237 +3 13868 13867 13773 +3 13250 13249 13154 +3 9764 2493 13775 +3 14098 14097 13999 +3 14000 14098 13999 +3 14098 14194 14193 +3 14097 14098 14193 +3 14194 14292 14291 +3 14193 14194 14291 +3 10138 2788 14291 +3 14292 10138 14291 +3 11443 297 2788 +3 10138 11443 2788 +3 13508 13514 297 +3 11443 13508 297 +3 13801 13788 13514 +3 13508 13801 13514 +3 933 12546 13788 +3 13801 933 13788 +3 1872 5992 12546 +3 933 1872 12546 +3 8019 9645 5992 +3 1872 8019 5992 +3 9906 7325 9645 +3 8019 9906 9645 +3 3056 3055 7325 +3 9906 3056 7325 +3 11794 5194 3055 +3 3056 11794 3055 +3 13234 2637 5194 +3 11794 13234 5194 +3 233 674 2637 +3 13234 233 2637 +3 13420 9750 674 +3 233 13420 674 +3 6938 13 9750 +3 13420 6938 9750 +3 5730 8787 13 +3 6938 5730 13 +3 5995 6792 8787 +3 5730 5995 8787 +3 11004 7923 3199 +3 5995 5040 304 +3 9419 9658 10120 +3 13685 11972 10120 +3 12762 12854 12853 +3 12761 12762 12853 +3 9102 11319 2498 +3 2633 9102 2498 +3 12114 12032 287 +3 9917 13888 11319 +3 5565 9658 5694 +3 13316 5565 5694 +3 2907 10496 1643 +3 12837 13594 12114 +3 17470 18729 30830 +3 11580 11655 11654 +3 14119 14215 14214 +3 4118 13504 13408 +3 30831 17470 30830 +3 10123 1739 5735 +3 4922 13797 9878 +3 35763 35515 35683 +3 20788 20870 20869 +3 3061 8115 9515 +3 35765 35536 35525 +3 11871 11872 12819 +3 34029 34165 34028 +3 31437 31436 31369 +3 11778 12815 13283 +3 3319 11778 13283 +3 11778 13690 12645 +3 12815 11778 12645 +3 14743 16296 21568 +3 28610 30633 27411 +3 15433 192 13242 +3 17893 18280 2540 +3 9184 12941 13036 +3 13647 13646 13548 +3 13028 14065 13316 +3 12950 12951 13044 +3 26498 27521 26940 +3 35693 35941 35832 +3 13712 9857 11978 +3 12938 13712 11978 +3 11962 14169 9857 +3 13712 11962 9857 +3 12926 12833 14169 +3 11962 12926 14169 +3 3053 438 12833 +3 12926 3053 12833 +3 12374 12289 438 +3 3053 12374 438 +3 12374 9754 11622 +3 12289 12374 11622 +3 9754 13503 13601 +3 11622 9754 13601 +3 24092 24031 24032 +3 4507 10898 4373 +3 12898 12294 10240 +3 10898 4507 11024 +3 8115 8442 9515 +3 12951 13045 13044 +3 13155 13250 13154 +3 13346 13345 13249 +3 13690 13611 13687 +3 12645 13690 13687 +3 13611 13475 13380 +3 13687 13611 13380 +3 19644 6787 27143 +3 11553 227 11487 +3 11811 11897 11896 +3 35866 34870 35778 +3 11897 11981 11980 +3 11896 11897 11980 +3 11981 12062 12061 +3 11980 11981 12061 +3 12061 12062 8106 +3 8106 12144 12226 +3 12144 12227 12226 +3 14099 14000 10326 +3 12227 12312 12311 +3 12226 12227 12311 +3 12312 12398 12397 +3 12311 12312 12397 +3 12398 12487 12486 +3 12397 12398 12486 +3 12487 12577 12576 +3 12486 12487 12576 +3 12577 12667 12666 +3 12576 12577 12666 +3 12667 12756 12755 +3 12666 12667 12755 +3 227 7056 6956 +3 13250 13346 13249 +3 13441 13440 13345 +3 13346 13441 13345 +3 22816 22815 22716 +3 11616 11079 8866 +3 11716 4792 14182 +3 13537 13536 13440 +3 12979 12978 12885 +3 11687 11686 11611 +3 30848 30847 23823 +3 14202 14300 14201 +3 13475 12365 12279 +3 13380 13475 12279 +3 12033 11952 12279 +3 12365 12033 12279 +3 29684 27411 6787 +3 13029 5560 35684 +3 12412 12501 12411 +3 11612 11611 11544 +3 8587 1712 8481 +3 35915 35408 35501 +3 11737 11736 11656 +3 9781 7907 7786 +3 14099 14098 14000 +3 35890 35559 35617 +3 14099 14195 14194 +3 14098 14099 14194 +3 14293 14292 14194 +3 14195 14293 14194 +3 14293 112 10138 +3 14292 14293 10138 +3 13517 11443 10138 +3 112 13517 10138 +3 13488 13508 11443 +3 13517 13488 11443 +3 2520 13801 13508 +3 13488 2520 13508 +3 11259 933 13801 +3 2520 11259 13801 +3 6123 1872 933 +3 11259 6123 933 +3 4128 8019 1872 +3 6123 4128 1872 +3 8246 9906 8019 +3 4128 8246 8019 +3 4522 3056 9906 +3 8246 4522 9906 +3 12290 11794 3056 +3 4522 12290 3056 +3 13235 13234 11794 +3 12290 13235 11794 +3 339 233 13234 +3 13235 339 13234 +3 9890 13420 233 +3 339 9890 233 +3 9061 6938 13420 +3 9890 9061 13420 +3 1296 5730 6938 +3 9061 1296 6938 +3 110 5995 5730 +3 1296 110 5730 +3 17193 5005 304 +3 110 5040 5995 +3 13414 13685 10120 +3 5755 14186 11726 +3 12673 12762 12761 +3 12672 12673 12761 +3 9102 9917 11319 +3 1643 287 13888 +3 11817 11818 11903 +3 11904 11988 11987 +3 5565 11646 13414 +3 13685 13684 10845 +3 6892 3200 1753 +3 8977 9102 2633 +3 11579 11580 11654 +3 11735 11734 11654 +3 10876 1753 13096 +3 2633 2498 2367 +3 13268 23965 23964 +3 127 10123 5735 +3 13040 13041 13134 +3 12386 10876 12475 +3 17652 34487 18055 +3 1753 2633 2367 +3 25599 25600 25741 +3 13695 24211 24151 +3 13001 9669 11952 +3 12033 13001 11952 +3 14415 12846 12844 +3 13001 12846 9669 +3 14304 14303 14205 +3 14109 14110 14205 +3 34003 34002 33867 +3 22101 24368 22196 +3 13441 13537 13440 +3 11545 11544 11480 +3 7462 9759 127 +3 2225 17154 3591 +3 35790 35781 35564 +3 12560 14924 11643 +3 12939 12938 12560 +3 12650 12939 12560 +3 13982 13712 12938 +3 12939 13982 12938 +3 12043 11962 13712 +3 13982 12043 13712 +3 12741 12926 11962 +3 12043 12741 11962 +3 12661 3053 12926 +3 12741 12661 12926 +3 13211 12374 3053 +3 12661 13211 3053 +3 13211 11958 9754 +3 12374 13211 9754 +3 11958 13502 13503 +3 9754 11958 13503 +3 12388 5221 15894 +3 12749 13502 11958 +3 10121 9859 4657 +3 10240 10121 4657 +3 13912 14010 14009 +3 3319 8797 11778 +3 13635 13634 13536 +3 10772 2793 1294 +3 22042 22041 18729 +3 10567 10617 8043 +3 2652 8136 5869 +3 30087 29415 24121 +3 11728 11812 11811 +3 13537 13635 13536 +3 11812 11898 11897 +3 11811 11812 11897 +3 11898 11982 11981 +3 11897 11898 11981 +3 11982 12063 12062 +3 11981 11982 12062 +3 12063 12145 12144 +3 12062 12063 12144 +3 12145 12228 12227 +3 12144 12145 12227 +3 12228 12313 12312 +3 12227 12228 12312 +3 12313 12399 12398 +3 12312 12313 12398 +3 12399 12488 12487 +3 12398 12399 12487 +3 12488 12578 12577 +3 12487 12488 12577 +3 12578 12668 12667 +3 12577 12578 12667 +3 12668 12757 12756 +3 12667 12668 12756 +3 12757 12849 12848 +3 12756 12757 12848 +3 12942 12941 12848 +3 12849 12942 12848 +3 27521 26498 19243 +3 12942 13036 12941 +3 31554 31553 26618 +3 35637 35866 35607 +3 11612 11687 11611 +3 11457 11458 11521 +3 8157 9742 7673 +3 30860 30859 30848 +3 13692 2914 5875 +3 3043 10968 1622 +3 20361 20362 20445 +3 1852 2248 5470 +3 11744 11743 11663 +3 7883 8127 14286 +3 11852 11851 11767 +3 11768 11767 11686 +3 20872 20952 20951 +3 31302 31369 31301 +3 10208 10209 13906 +3 11555 7164 7059 +3 7147 10091 8580 +3 8580 25539 7147 +3 14196 14195 14099 +3 14100 14196 14099 +3 14294 14293 14195 +3 14196 14294 14195 +3 14294 4234 112 +3 14293 14294 112 +3 9112 13517 112 +3 4234 9112 112 +3 13411 13488 13517 +3 9112 13411 13517 +3 5564 2520 13488 +3 13411 5564 13488 +3 13707 11259 2520 +3 5564 13707 2520 +3 1138 6123 11259 +3 13707 1138 11259 +3 3994 4128 6123 +3 1138 3994 6123 +3 8227 8246 4128 +3 3994 8227 4128 +3 4656 4522 8246 +3 8227 4656 8246 +3 13511 12290 4522 +3 4656 13511 4522 +3 13492 13235 12290 +3 13511 13492 12290 +3 2614 339 13235 +3 13492 2614 13235 +3 10007 9890 339 +3 2614 10007 339 +3 680 9061 9890 +3 10007 680 9890 +3 11013 1296 9061 +3 680 11013 9061 +3 6126 110 1296 +3 11013 6126 1296 +3 13019 15427 10383 +3 6126 3590 110 +3 13685 11008 11972 +3 2124 3997 1051 +3 12583 12673 12672 +3 12582 12583 12672 +3 9917 1643 13888 +3 1643 12114 287 +3 11733 11734 11817 +3 11818 11904 11903 +3 130 10092 5697 +3 13496 13416 8226 +3 8197 9111 7286 +3 10092 13496 8226 +3 11655 11735 11654 +3 11819 11905 11818 +3 10372 10105 10496 +3 5041 6508 12837 +3 11058 13204 7682 +3 22618 22617 22518 +3 12471 5694 12561 +3 12854 12947 12853 +3 11907 11991 11906 +3 12072 12071 11990 +3 8753 8754 8860 +3 13733 13732 13634 +3 32100 32200 32099 +3 22243 22731 21135 +3 26252 26244 23832 +3 31370 31437 31369 +3 32509 32508 32403 +3 12856 12949 12948 +3 34551 34550 34413 +3 31509 31508 31436 +3 30861 30860 30848 +3 12466 9676 15083 +3 30161 30160 30028 +3 11545 11612 11544 +3 7673 9742 6646 +3 8456 8346 299 +3 11565 11643 14596 +3 3061 9515 5602 +3 13405 12939 12650 +3 12739 13405 12650 +3 13874 13982 12939 +3 13405 13874 12939 +3 13975 12043 13982 +3 13874 13975 13982 +3 12740 12741 12043 +3 13975 12740 12043 +3 13308 12661 12741 +3 12740 13308 12741 +3 13308 12847 13211 +3 12661 13308 13211 +3 12847 11874 11958 +3 13211 12847 11958 +3 11973 5221 12749 +3 11874 12749 11958 +3 13996 13995 10118 +3 10092 8226 5697 +3 9859 2366 4925 +3 13320 13769 13770 +3 3712 1385 6662 +3 2384 3195 5204 +3 13962 7786 14277 +3 17470 22042 18729 +3 11878 10373 12221 +3 11090 9879 9878 +3 18055 34487 11647 +3 17443 22040 17816 +3 11729 11813 11812 +3 11728 11729 11812 +3 11813 11899 11898 +3 11812 11813 11898 +3 11899 11983 11982 +3 11898 11899 11982 +3 11983 12064 12063 +3 11982 11983 12063 +3 12064 12146 12145 +3 12063 12064 12145 +3 12146 12229 12228 +3 12145 12146 12228 +3 12229 12314 12313 +3 12228 12229 12313 +3 12314 12400 12399 +3 12313 12314 12399 +3 12400 12489 12488 +3 12399 12400 12488 +3 12489 12579 12578 +3 12488 12489 12578 +3 12579 12669 12668 +3 12578 12579 12668 +3 12669 12758 12757 +3 12668 12669 12757 +3 12758 12850 12849 +3 12757 12758 12849 +3 12943 12942 12849 +3 12850 12943 12849 +3 13037 13036 12942 +3 12943 13037 12942 +3 1485 5990 5991 +3 13037 13131 13036 +3 22839 22452 23230 +3 12207 11722 13326 +3 13320 13691 35858 +3 8752 8753 8860 +3 8797 11857 11778 +3 13283 35674 35659 +3 11857 13225 13690 +3 11778 11857 13690 +3 11865 13983 11949 +3 26680 26681 24295 +3 16054 11444 11876 +3 13983 11444 11723 +3 31436 31435 31368 +3 11938 11937 11851 +3 14003 14002 10327 +3 8346 8345 3735 +3 14003 14101 14100 +3 14002 14003 14100 +3 14197 14196 14100 +3 14101 14197 14100 +3 14295 14294 14196 +3 14197 14295 14196 +3 9428 4234 14294 +3 14295 9428 14294 +3 10029 9112 4234 +3 9428 10029 4234 +3 13406 13411 9112 +3 10029 13406 9112 +3 12308 5564 13411 +3 13406 12308 13411 +3 3046 13707 5564 +3 12308 3046 5564 +3 1137 1138 13707 +3 3046 1137 13707 +3 14174 3994 1138 +3 1137 14174 1138 +3 1972 8227 3994 +3 14174 1972 3994 +3 4790 4656 8227 +3 1972 4790 8227 +3 62 13511 4656 +3 4790 62 4656 +3 13491 13492 13511 +3 62 13491 13511 +3 296 2614 13492 +3 13491 296 13492 +3 12574 10007 2614 +3 296 12574 2614 +3 10246 680 10007 +3 12574 10246 10007 +3 2769 11013 680 +3 10246 2769 680 +3 1759 6126 11013 +3 2769 1759 11013 +3 16867 17029 4097 +3 1759 7465 6126 +3 12584 12674 12673 +3 11319 935 2497 +3 12318 12404 12403 +3 12317 12318 12403 +3 13594 13109 12032 +3 12114 13594 12032 +3 11653 11654 11733 +3 11734 11818 11817 +3 13496 8197 7286 +3 13416 13496 7286 +3 12494 12495 12584 +3 12585 12675 12674 +3 11905 11989 11988 +3 11904 11905 11988 +3 443 10372 2907 +3 10105 12837 10496 +3 35778 34870 35942 +3 14108 14107 14009 +3 3334 10105 10372 +3 14085 3334 10372 +3 11991 12072 11990 +3 12154 12153 12071 +3 11679 11678 11603 +3 12226 12311 8325 +3 5583 5585 7177 +3 10252 13204 10950 +3 13156 13155 13061 +3 11971 13781 11887 +3 13635 13733 13634 +3 456 21377 21467 +3 15110 15236 7584 +3 10876 13096 12475 +3 13225 13610 13611 +3 13690 13225 13611 +3 11589 11664 11588 +3 13983 11723 11949 +3 4122 1975 15736 +3 11687 11768 11686 +3 10899 6267 6386 +3 12576 12666 8754 +3 2916 2780 5548 +3 12858 12951 12950 +3 13122 13405 12739 +3 12831 13122 12739 +3 13972 13874 13405 +3 13122 13972 13405 +3 13878 13975 13874 +3 13972 13878 13874 +3 11796 12740 13975 +3 13878 11796 13975 +3 14080 13308 12740 +3 11796 14080 12740 +3 14080 12462 12847 +3 13308 14080 12847 +3 12462 11787 11874 +3 12847 12462 11874 +3 12053 15060 11973 +3 11787 11973 11874 +3 13995 8691 10118 +3 21745 18009 22041 +3 28368 19644 27143 +3 10931 7460 11057 +3 6662 2384 5204 +3 16046 12569 21696 +3 13831 13830 13732 +3 13733 13831 13732 +3 22042 21745 22041 +3 13864 12725 11365 +3 12963 15476 13057 +3 30829 17443 30828 +3 11730 11814 11813 +3 11729 11730 11813 +3 11814 11900 11899 +3 11813 11814 11899 +3 11900 11984 11983 +3 11899 11900 11983 +3 11984 12065 12064 +3 11983 11984 12064 +3 12065 12147 12146 +3 12064 12065 12146 +3 12147 12230 12229 +3 12146 12147 12229 +3 12230 12315 12314 +3 12229 12230 12314 +3 12315 12401 12400 +3 12314 12315 12400 +3 12401 12490 12489 +3 12400 12401 12489 +3 12490 12580 12579 +3 12489 12490 12579 +3 12580 12670 12669 +3 12579 12580 12669 +3 12670 12759 12758 +3 12669 12670 12758 +3 12759 12851 12850 +3 12758 12759 12850 +3 12851 12944 12943 +3 12850 12851 12943 +3 13038 13037 12943 +3 12944 13038 12943 +3 13133 13228 16078 +3 13038 13132 13037 +3 11722 12136 12055 +3 13326 11722 12055 +3 11955 12201 5602 +3 8125 10852 16158 +3 13538 13636 13635 +3 1174 13418 9542 +3 13610 13573 13475 +3 13611 13610 13475 +3 13573 12635 12365 +3 13475 13573 12365 +3 11865 11949 12640 +3 12369 11865 12640 +3 13701 11889 8482 +3 13929 13928 13830 +3 953 19121 952 +3 8450 6513 10809 +3 14102 14101 14003 +3 14004 14102 14003 +3 14198 14197 14101 +3 14102 14198 14101 +3 14296 14295 14197 +3 14198 14296 14197 +3 14296 8526 9428 +3 14295 14296 9428 +3 9912 10029 9428 +3 8526 9912 9428 +3 9912 564 13406 +3 10029 9912 13406 +3 12630 12308 13406 +3 564 12630 13406 +3 13802 3046 12308 +3 12630 13802 12308 +3 13580 1137 3046 +3 13802 13580 3046 +3 13670 14174 1137 +3 13580 13670 1137 +3 6122 1972 14174 +3 13670 6122 14174 +3 2632 4790 1972 +3 6122 2632 1972 +3 13571 62 4790 +3 2632 13571 4790 +3 13397 13491 62 +3 13571 13397 62 +3 234 296 13491 +3 13397 234 13491 +3 14091 12574 296 +3 234 14091 296 +3 10365 10246 12574 +3 14091 10365 12574 +3 796 2769 10246 +3 10365 796 10246 +3 290 1759 2769 +3 796 290 2769 +3 4097 7465 1759 +3 290 4097 1759 +3 7799 12845 12220 +3 2784 2785 17159 +3 12404 12493 12492 +3 12403 12404 12492 +3 3344 186 13109 +3 6520 458 2124 +3 11579 11654 11653 +3 17370 35065 34937 +3 9111 9445 7286 +3 4247 12386 9445 +3 12319 12320 12405 +3 12406 12495 12494 +3 5602 9515 4247 +3 8442 6892 7807 +3 9515 8442 7807 +3 8442 3199 3200 +3 14010 14108 14009 +3 14204 14203 14107 +3 14085 10372 443 +3 63 14085 443 +3 12072 12154 12071 +3 12497 12496 12407 +3 12952 13046 13045 +3 12951 12952 13045 +3 13741 13839 13740 +3 11970 12 12387 +3 8085 10772 1294 +3 22717 22816 22716 +3 14281 9520 2105 +3 13831 13929 13830 +3 11716 11800 4792 +3 14096 14095 10323 +3 12458 12033 12365 +3 12143 12369 12640 +3 12635 12458 12365 +3 11768 11852 11767 +3 2388 12143 12640 +3 2850 2714 2715 +3 24211 13695 3077 +3 3219 3357 15565 +3 15970 11799 17156 +3 13310 13122 12831 +3 12832 13310 12831 +3 13971 13972 13122 +3 13310 13971 13122 +3 13879 13878 13972 +3 13971 13879 13972 +3 12651 11796 13878 +3 13879 12651 13878 +3 13107 14080 11796 +3 12651 13107 11796 +3 13107 13711 12462 +3 14080 13107 12462 +3 13711 1617 11787 +3 12462 13711 11787 +3 12053 11973 11787 +3 1617 12053 11787 +3 14209 14307 14306 +3 14692 16671 16392 +3 8853 2514 8852 +3 5554 13771 13772 +3 6519 1855 13791 +3 13333 3041 2902 +3 14027 14026 13928 +3 13929 14027 13928 +3 21745 7181 7180 +3 30695 30829 30694 +3 18009 21745 7180 +3 11651 11731 11730 +3 32801 11650 11729 +3 11731 11815 11814 +3 11730 11731 11814 +3 11815 11901 11900 +3 11814 11815 11900 +3 11901 11985 11984 +3 11900 11901 11984 +3 11985 12066 12065 +3 11984 11985 12065 +3 12066 12148 12147 +3 12065 12066 12147 +3 12148 12231 12230 +3 12147 12148 12230 +3 12231 12316 12315 +3 12230 12231 12315 +3 12316 12402 12401 +3 12315 12316 12401 +3 12402 12491 12490 +3 12401 12402 12490 +3 12491 12581 12580 +3 12490 12491 12580 +3 12581 12671 12670 +3 12580 12581 12670 +3 12671 12760 12759 +3 12670 12671 12759 +3 12760 12852 12851 +3 12759 12760 12851 +3 12945 12944 12851 +3 12852 12945 12851 +3 13039 13038 12944 +3 12945 13039 12944 +3 13133 13132 13038 +3 13039 13133 13038 +3 12136 11634 12827 +3 5568 5274 5435 +3 7810 7467 13583 +3 14177 13583 13973 +3 14125 14124 14026 +3 34844 6934 34971 +3 6646 5470 9100 +3 10210 13908 13907 +3 1254 13001 12033 +3 12458 1254 12033 +3 17600 17506 20121 +3 12051 11798 2388 +3 35429 35505 35487 +3 35842 28071 29685 +3 13907 14005 14004 +3 13906 13907 14004 +3 14103 14102 14004 +3 14005 14103 14004 +3 14199 14198 14102 +3 14103 14199 14102 +3 14297 14296 14198 +3 14199 14297 14198 +3 14297 8200 8526 +3 14296 14297 8526 +3 9685 9912 8526 +3 8200 9685 8526 +3 7932 564 9912 +3 9685 7932 9912 +3 12629 12630 564 +3 7932 12629 564 +3 12929 13802 12630 +3 12629 12929 12630 +3 14087 13580 13802 +3 12929 14087 13802 +3 13669 13670 13580 +3 14087 13669 13580 +3 2087 6122 13670 +3 13669 2087 13670 +3 2497 2632 6122 +3 2087 2497 6122 +3 935 13571 2632 +3 2497 935 2632 +3 13493 13397 13571 +3 935 13493 13571 +3 4786 234 13397 +3 13493 4786 13397 +3 10376 14091 234 +3 4786 10376 234 +3 7768 10365 14091 +3 10376 7768 14091 +3 8578 796 10365 +3 7768 8578 10365 +3 1051 290 796 +3 8578 1051 796 +3 3997 4097 290 +3 1051 3997 290 +3 3732 12919 10817 +3 57 10349 11184 +3 12493 12583 12582 +3 12492 12493 12582 +3 13594 3344 13109 +3 458 6520 186 +3 7181 15475 21378 +3 11654 11734 11733 +3 14300 130 14299 +3 9111 4247 9445 +3 12405 12406 12494 +3 12495 12585 12584 +3 6892 8442 3200 +3 11955 5602 9111 +3 14258 7456 5987 +3 13800 11497 12292 +3 14108 14204 14107 +3 14302 14301 14203 +3 63 443 13986 +3 13987 63 13986 +3 12408 12497 12407 +3 12587 12586 12496 +3 12859 12952 12951 +3 12858 12859 12951 +3 13578 4796 11616 +3 20556 20555 20470 +3 15888 141 6147 +3 13721 13819 13818 +3 4409 4542 8125 +3 14027 14125 14026 +3 10623 35945 35383 +3 12844 12846 13001 +3 1254 12844 13001 +3 13619 11798 12051 +3 12726 13619 12051 +3 12925 10381 13019 +3 11852 11938 11851 +3 12925 12832 11619 +3 14221 14220 14124 +3 13309 13310 12832 +3 12925 13309 12832 +3 13777 13971 13310 +3 13309 13777 13310 +3 13880 13879 13971 +3 13777 13880 13971 +3 12561 12651 13879 +3 13880 12561 13879 +3 12648 13107 12651 +3 12561 12648 12651 +3 9419 13711 13107 +3 12648 9419 13107 +3 9419 10120 1617 +3 13711 9419 1617 +3 11972 12053 1617 +3 10120 11972 1617 +3 14208 14209 14306 +3 11008 12460 11972 +3 10806 10682 10683 +3 11792 12845 7799 +3 3040 2517 2209 +3 13870 3040 2209 +3 14125 14221 14124 +3 665 13515 14220 +3 7180 7181 21378 +3 15475 7083 17670 +3 2139 33934 19044 +3 17443 17816 30828 +3 11652 11732 11731 +3 11651 11652 11731 +3 11732 11816 11815 +3 11731 11732 11815 +3 11816 11902 11901 +3 11815 11816 11901 +3 11902 11986 11985 +3 11901 11902 11985 +3 11986 12067 12066 +3 11985 11986 12066 +3 12067 12149 12148 +3 12066 12067 12148 +3 12149 12232 12231 +3 12148 12149 12231 +3 12232 12317 12316 +3 12231 12232 12316 +3 12317 12403 12402 +3 12316 12317 12402 +3 12403 12492 12491 +3 12402 12403 12491 +3 12492 12582 12581 +3 12491 12492 12581 +3 11549 14168 13973 +3 16114 5472 2441 +3 16858 4950 14782 +3 2441 16858 14782 +3 4950 16387 16388 +3 14782 4950 16388 +3 16387 5211 3352 +3 16388 16387 3352 +3 14861 14980 3352 +3 5211 14861 3352 +3 16317 15172 14980 +3 14861 16317 14980 +3 15177 15058 15172 +3 16317 15177 15172 +3 16847 14692 15058 +3 15177 16847 15058 +3 15770 4808 4908 +3 15491 24 14809 +3 24 3266 14809 +3 15266 14488 15104 +3 14931 16795 14692 +3 16465 15294 4533 +3 16847 14931 14692 +3 14931 3534 14547 +3 16795 14931 14547 +3 2444 15656 14547 +3 3534 2444 14547 +3 2444 14725 14703 +3 15656 2444 14703 +3 14725 4667 16035 +3 6402 6527 7004 +3 14703 14725 16035 +3 4908 4808 4949 +3 14984 15106 16096 +3 14741 15770 4908 +3 4808 15266 4949 +3 14335 14598 14318 +3 14598 15770 14741 +3 14335 14318 3266 +3 2380 14598 14741 +3 24 14335 3266 +3 14598 2380 14318 +3 2049 327 4783 +3 327 14813 2612 +3 15491 14809 15421 +3 16512 2049 4783 +3 6527 16096 7004 +3 15294 15491 15421 +3 4667 1850 3749 +3 20669 20670 24592 +3 16035 4667 3749 +3 1850 15561 3405 +3 22715 22814 22714 +3 3749 1850 3405 +3 15294 15421 4533 +3 7004 16108 274 +3 6527 14984 16096 +3 16465 4533 15106 +3 16668 14610 14609 +3 14984 16465 15106 +3 4783 327 2612 +3 14813 16668 16513 +3 16513 16668 14609 +3 2612 14813 16513 +3 14610 15423 15163 +3 14609 14610 15163 +3 15423 16966 16803 +3 16803 16966 16957 +3 15163 15423 16803 +3 16966 4005 16957 +3 4005 3122 15241 +3 16957 4005 15241 +3 15241 3122 475 +3 14369 14384 14368 +3 3122 143 475 +3 143 14916 14798 +3 21879 21852 21119 +3 22814 22813 22714 +3 15561 16623 14993 +3 3405 15561 14993 +3 16623 17131 16535 +3 13894 1878 14052 +3 14993 16623 16535 +3 15526 15886 14539 +3 9405 23236 20647 +3 475 143 14798 +3 14916 15526 15412 +3 15412 15526 14539 +3 14798 14916 15412 +3 14420 14419 14400 +3 15886 14597 2 +3 2936 708 2935 +3 14401 14420 14400 +3 2007 14549 14534 +3 1064 708 4401 +3 14668 14774 14667 +3 6268 2007 1180 +3 14774 14773 14667 +3 4401 6268 1180 +3 14668 14667 14575 +3 1180 2007 14534 +3 14576 14575 14496 +3 14576 14668 14575 +3 14401 14400 14383 +3 14497 14576 14496 +3 2 14597 822 +3 14355 14369 14354 +3 10216 371 21852 +3 17118 14592 15624 +3 17131 5545 14642 +3 2888 60 20279 +3 16535 17131 14642 +3 5545 4941 15762 +3 32141 32140 32043 +3 14642 5545 15762 +3 14539 15886 2 +3 22616 22715 22615 +3 14342 14355 14341 +3 14597 17118 822 +3 14446 14497 14445 +3 14384 14401 14383 +3 14446 14445 14419 +3 14420 14446 14419 +3 15649 15786 15785 +3 14497 14496 14445 +3 10381 15970 15427 +3 14887 14888 15007 +3 1380 3356 3357 +3 14321 3531 6146 +3 15648 15649 15785 +3 4415 4282 1741 +3 27956 28991 27401 +3 4148 15899 15659 +3 15382 15513 15512 +3 21371 21390 13318 +3 15790 17022 5138 +3 14929 16050 15818 +3 16173 16216 16826 +3 15386 15517 15516 +3 14384 14383 14368 +3 17901 17994 17900 +3 822 17118 15624 +3 14549 15697 15677 +3 22715 22714 22615 +3 14592 16992 16219 +3 4941 2802 14787 +3 6999 6998 35189 +3 15762 4941 14787 +3 35901 35481 35416 +3 14787 2802 15489 +3 14672 14673 14778 +3 3317 14416 14415 +3 14779 14892 14891 +3 20760 20174 16304 +3 14778 14779 14891 +3 15624 14592 16219 +3 22517 22616 22615 +3 16491 16094 16248 +3 16992 16692 1413 +3 14331 14341 14340 +3 14369 14368 14354 +3 18367 18366 18273 +3 14751 14749 6014 +3 15770 5743 4808 +3 5058 14751 6014 +3 15415 16051 14512 +3 13132 13131 13037 +3 13131 13132 16078 +3 15133 15134 15260 +3 1407 1621 932 +3 35647 35693 30214 +3 5283 5284 15349 +3 5599 3062 357 +3 5755 5754 175 +3 11780 13476 11866 +3 6016 1413 3991 +3 15415 14512 14655 +3 18143 16508 16356 +3 5754 174 175 +3 14522 14458 15824 +3 15134 15261 15260 +3 1406 1407 932 +3 1770 16825 1890 +3 14534 14549 15677 +3 14341 14354 14340 +3 16672 9182 9292 +3 14577 14576 14497 +3 15654 4812 24249 +3 35521 20535 35644 +3 14892 15012 15011 +3 827 14523 14521 +3 14891 14892 15011 +3 14759 15615 14713 +3 15012 15135 15134 +3 3609 6402 580 +3 14395 16547 23995 +3 6773 827 2267 +3 6139 6773 2267 +3 20040 20046 20490 +3 22516 22517 22615 +3 14447 14498 14446 +3 14354 14368 11566 +3 35922 26940 35688 +3 475 14798 14799 +3 1428 1544 1543 +3 14671 14672 14777 +3 13228 16079 16078 +3 6128 405 3203 +3 21024 20941 18634 +3 14925 24 15491 +3 15554 7357 7350 +3 16354 16355 16507 +3 16221 16366 13131 +3 35518 35624 35809 +3 15477 14973 8114 +3 16366 16365 13131 +3 16518 16517 16365 +3 16366 16518 16365 +3 16673 16672 16517 +3 16518 16673 16517 +3 14571 14570 11076 +3 16673 16831 16672 +3 14751 14752 16104 +3 13757 15029 13659 +3 17159 9287 16995 +3 4512 19101 5455 +3 35556 35568 35350 +3 15397 13141 13236 +3 14354 11566 14340 +3 14368 14383 14367 +3 17152 16323 14712 +3 8123 7569 9446 +3 7350 15688 15554 +3 16066 16067 16209 +3 1065 6773 6139 +3 34822 34951 34821 +3 17886 17790 20289 +3 3207 3609 580 +3 27143 6787 13391 +3 17805 17901 17804 +3 22316 22315 22219 +3 15291 1061 14554 +3 15256 15257 15384 +3 13528 13626 23733 +3 15698 15835 7878 +3 13960 20046 20040 +3 13138 13137 13044 +3 14383 14382 14367 +3 3195 15310 15438 +3 11184 11196 10458 +3 13137 13138 15527 +3 57 11184 10458 +3 9182 9183 9292 +3 9206 8562 10237 +3 89 5599 88 +3 17159 17158 9287 +3 16079 16222 16221 +3 16078 16079 16221 +3 16367 16366 16221 +3 16222 16367 16221 +3 16519 16518 16366 +3 16367 16519 16366 +3 16674 16673 16518 +3 16519 16674 16518 +3 16832 16831 16673 +3 16674 16832 16673 +3 14996 15118 14256 +3 16832 16995 16831 +3 20694 20695 20776 +3 16959 346 3607 +3 15662 13137 15527 +3 8904 14868 14869 +3 14400 14399 14382 +3 14383 14400 14382 +3 35504 35632 35477 +3 35599 6964 35776 +3 15898 15412 15014 +3 3492 15241 15015 +3 15433 18494 18898 +3 14373 14372 14358 +3 15347 15746 16773 +3 16248 14430 15771 +3 13384 11864 13614 +3 2915 12722 1065 +3 15397 13236 15398 +3 14470 14472 2413 +3 18462 18461 18366 +3 19190 1925 2050 +3 15527 13139 15397 +3 14355 14354 14341 +3 15397 15528 15527 +3 16517 16672 9292 +3 15528 15663 15662 +3 15527 15528 15662 +3 25856 24240 25855 +3 6983 9446 1407 +3 15800 15939 15938 +3 13230 15938 13229 +3 15939 16080 16079 +3 15938 15939 16079 +3 16080 16223 16222 +3 16079 16080 16222 +3 16368 16367 16222 +3 16223 16368 16222 +3 16520 16519 16367 +3 16368 16520 16367 +3 16675 16674 16519 +3 16520 16675 16519 +3 16833 16832 16674 +3 16675 16833 16674 +3 16996 16995 16832 +3 16833 16996 16832 +3 35575 35468 27753 +3 1165 1046 7626 +3 16161 17087 21285 +3 9115 9114 145 +3 14598 6146 15770 +3 14419 14418 14399 +3 35654 35887 35583 +3 14869 14988 8904 +3 14500 14499 14448 +3 18367 18462 18366 +3 15622 15291 14554 +3 15265 3661 14784 +3 16807 16971 16970 +3 16648 16807 13384 +3 17137 17136 16970 +3 16971 17137 16970 +3 271 74 17136 +3 17137 271 17136 +3 5757 16708 225 +3 15368 14438 5756 +3 16799 16961 16960 +3 17848 146 19412 +3 392 17739 17740 +3 311 310 7035 +3 15398 15529 15528 +3 15397 15398 15528 +3 15529 15664 15663 +3 15528 15529 15663 +3 15664 15801 15800 +3 15663 15664 15800 +3 15801 15940 15939 +3 15800 15801 15939 +3 15940 16081 16080 +3 15939 15940 16080 +3 16081 16224 16223 +3 16080 16081 16223 +3 16369 16368 16223 +3 16224 16369 16223 +3 16521 16520 16368 +3 16369 16521 16368 +3 16676 16675 16520 +3 16521 16676 16520 +3 16834 16833 16675 +3 16676 16834 16675 +3 16997 16996 16833 +3 16834 16997 16833 +3 7626 1046 927 +3 35624 35635 35809 +3 16826 16216 3261 +3 5412 2784 2920 +3 7876 8904 14988 +3 5006 15139 15117 +3 30862 30861 23861 +3 12962 12803 12989 +3 15241 475 15015 +3 18462 18558 18557 +3 2257 15372 15309 +3 20893 192 15433 +3 14763 14438 15368 +3 19698 17796 18152 +3 3535 2986 74 +3 271 3535 74 +3 2283 2684 2986 +3 3535 2283 2986 +3 2803 6145 15165 +3 856 857 2684 +3 35433 35482 35431 +3 15757 15749 14550 +3 15773 12282 15774 +3 35853 35458 35798 +3 35494 35808 35650 +3 7035 310 7138 +3 15399 15530 15529 +3 15398 15399 15529 +3 15530 15665 15664 +3 15529 15530 15664 +3 15665 15802 15801 +3 15664 15665 15801 +3 15802 15941 15940 +3 15801 15802 15940 +3 15941 16082 16081 +3 15940 15941 16081 +3 16082 16225 16224 +3 16081 16082 16224 +3 16225 16370 16369 +3 16224 16225 16369 +3 16370 16522 16521 +3 16369 16370 16521 +3 16522 16677 16676 +3 16521 16522 16676 +3 16677 16835 16834 +3 16676 16677 16834 +3 16835 16998 16997 +3 16834 16835 16997 +3 6153 33587 34340 +3 35884 35867 35842 +3 17162 5548 5412 +3 2101 4787 2230 +3 5422 5421 5286 +3 12650 11565 12739 +3 14757 14869 14868 +3 14756 14757 14868 +3 14449 14500 14448 +3 18461 18462 18557 +3 18558 18655 18654 +3 18557 18558 18654 +3 6145 14763 15165 +3 15165 14763 15368 +3 2283 856 2684 +3 3876 5750 857 +3 856 3876 857 +3 386 387 5750 +3 3876 386 5750 +3 3664 131 4117 +3 14826 14606 2803 +3 22220 22316 22219 +3 13134 13229 13133 +3 26224 15146 25002 +3 35720 35442 35459 +3 15272 15400 15399 +3 35935 35424 35648 +3 15400 15531 15530 +3 15399 15400 15530 +3 15531 15666 15665 +3 15530 15531 15665 +3 15803 15802 15665 +3 15666 15803 15665 +3 15942 15941 15802 +3 15803 15942 15802 +3 16083 16082 15941 +3 15942 16083 15941 +3 16226 16225 16082 +3 16083 16226 16082 +3 16226 16371 16370 +3 16225 16226 16370 +3 16371 16523 16522 +3 16370 16371 16522 +3 16523 16678 16677 +3 16522 16523 16677 +3 16678 16836 16835 +3 16677 16678 16835 +3 16836 16999 16998 +3 16835 16836 16998 +3 16999 17163 17162 +3 16998 16999 17162 +3 20244 20158 20245 +3 17162 17163 5548 +3 2928 13969 7891 +3 7692 7424 7801 +3 9304 4503 9539 +3 16152 21873 15149 +3 3178 14185 35758 +3 15677 15697 5082 +3 14462 14606 14826 +3 15180 14802 4017 +3 2800 2799 387 +3 16180 14462 14826 +3 386 2800 387 +3 943 944 2799 +3 2800 943 2799 +3 4134 4135 944 +3 943 4134 944 +3 9633 14276 13306 +3 41 4393 6769 +3 22413 22412 22315 +3 1454 2302 4467 +3 35071 35200 35199 +3 34613 18898 19327 +3 15401 15400 15272 +3 13795 35791 13053 +3 15532 15531 15400 +3 15401 15532 15400 +3 15667 15666 15531 +3 15532 15667 15531 +3 15804 15803 15666 +3 15667 15804 15666 +3 15943 15942 15803 +3 15804 15943 15803 +3 16084 16083 15942 +3 15943 16084 15942 +3 16227 16226 16083 +3 16084 16227 16083 +3 16227 16372 16371 +3 16226 16227 16371 +3 16372 16524 16523 +3 16371 16372 16523 +3 16524 16679 16678 +3 16523 16524 16678 +3 16679 16837 16836 +3 16678 16679 16836 +3 16837 17000 16999 +3 16836 16837 16999 +3 17000 17164 17163 +3 16999 17000 17163 +3 25001 15272 15146 +3 35448 35687 35360 +3 14532 15748 5414 +3 21378 15475 17670 +3 13236 15399 15398 +3 21202 14244 21201 +3 3185 673 3355 +3 15894 14348 14819 +3 14677 14785 14716 +3 14606 6145 2803 +3 4134 948 829 +3 4135 4134 829 +3 948 14603 14602 +3 829 948 14602 +3 14603 15795 15789 +3 14602 14603 15789 +3 15795 977 8134 +3 15828 3068 16472 +3 15789 15795 8134 +3 14823 7344 9648 +3 15399 13236 15272 +3 22027 22028 22123 +3 16010 22929 23028 +3 2206 19538 19277 +3 22220 22219 22123 +3 35893 35614 35580 +3 24592 20670 25113 +3 15533 15532 15401 +3 15402 15533 15401 +3 15668 15667 15532 +3 15533 15668 15532 +3 15805 15804 15667 +3 15668 15805 15667 +3 15944 15943 15804 +3 15805 15944 15804 +3 16085 16084 15943 +3 15944 16085 15943 +3 16228 16227 16084 +3 16085 16228 16084 +3 16228 16373 16372 +3 16227 16228 16372 +3 16373 16525 16524 +3 16372 16373 16524 +3 16525 16680 16679 +3 16524 16525 16679 +3 16680 16838 16837 +3 16679 16680 16837 +3 16838 17001 17000 +3 16837 16838 17000 +3 17001 17165 17164 +3 17000 17001 17164 +3 17165 591 14644 +3 17164 17165 14644 +3 15272 25001 15273 +3 14644 591 2310 +3 18318 554 5756 +3 20242 20156 15032 +3 16798 16799 16960 +3 35707 35370 35620 +3 5744 14462 16180 +3 14716 5744 16180 +3 977 15035 15034 +3 6525 3076 14677 +3 8134 977 15034 +3 19803 15035 18619 +3 15034 15035 17133 +3 19803 17133 15035 +3 17133 16194 5472 +3 35496 35356 35516 +3 35598 29542 27756 +3 4950 16858 21568 +3 15114 16991 16630 +3 916 6983 1407 +3 8154 17184 13958 +3 11566 14368 14367 +3 15566 14490 4140 +3 20792 20874 20873 +3 14244 15149 21201 +3 31785 31784 31684 +3 20305 20304 20218 +3 29497 29635 29496 +3 22028 22124 22123 +3 23783 15402 15273 +3 21582 18992 21958 +3 15669 15668 15533 +3 15534 15669 15533 +3 15806 15805 15668 +3 15669 15806 15668 +3 15945 15944 15805 +3 15806 15945 15805 +3 16086 16085 15944 +3 15945 16086 15944 +3 16229 16228 16085 +3 16086 16229 16085 +3 16229 16374 16373 +3 16228 16229 16373 +3 16374 16526 16525 +3 16373 16374 16525 +3 16526 16681 16680 +3 16525 16526 16680 +3 16681 16839 16838 +3 16680 16681 16838 +3 16839 17002 17001 +3 16838 16839 17001 +3 17002 17166 17165 +3 17001 17002 17165 +3 17166 5413 591 +3 17165 17166 591 +3 5548 2781 5412 +3 5548 2780 2781 +3 15907 15682 14519 +3 10206 13999 10205 +3 7083 13892 20597 +3 24430 24467 24517 +3 14391 16947 3796 +3 6988 14391 3796 +3 14785 5744 14716 +3 16943 2843 5140 +3 16858 2441 5472 +3 3076 14785 14677 +3 16386 16387 4950 +3 11696 5054 13400 +3 35440 35426 35465 +3 35778 35942 35558 +3 2765 2104 2103 +3 1925 19190 19088 +3 8136 4098 5869 +3 20303 20388 20302 +3 9400 13183 20242 +3 21202 21201 2653 +3 20403 21755 3196 +3 19378 18962 23324 +3 6518 21202 2653 +3 27411 29547 29564 +3 18263 13147 16932 +3 21409 21399 20575 +3 21933 22028 22027 +3 15670 15669 15534 +3 33865 34000 33864 +3 15807 15806 15669 +3 15670 15807 15669 +3 15946 15945 15806 +3 15807 15946 15806 +3 16087 16086 15945 +3 15946 16087 15945 +3 16230 16229 16086 +3 16087 16230 16086 +3 16230 16375 16374 +3 16229 16230 16374 +3 16375 16527 16526 +3 16374 16375 16526 +3 16527 16682 16681 +3 16526 16527 16681 +3 16682 16840 16839 +3 16681 16682 16839 +3 16840 17003 17002 +3 16839 16840 17002 +3 17003 17167 17166 +3 17002 17003 17166 +3 5410 5413 17166 +3 17167 5410 17166 +3 5410 2912 5413 +3 2845 9389 2912 +3 7547 8233 11790 +3 12207 12125 16468 +3 1777 2484 3870 +3 361 6148 3211 +3 14746 358 51 +3 23353 30685 23256 +3 16781 16943 5140 +3 4935 15485 15753 +3 1186 615 4397 +3 3469 1186 4397 +3 20779 16178 20190 +3 5485 5211 16387 +3 16386 16178 20674 +3 14862 14861 5211 +3 5485 14862 5211 +3 15234 16317 14861 +3 14862 15234 14861 +3 14927 15177 16317 +3 15234 14927 16317 +3 1892 16847 15177 +3 14927 1892 15177 +3 14695 14931 16847 +3 1892 14695 16847 +3 14546 3534 14931 +3 14695 14546 14931 +3 23367 23270 15464 +3 20954 21037 21036 +3 35505 35392 35560 +3 16164 16022 14149 +3 20954 20955 21037 +3 13183 9400 12901 +3 19568 29132 27531 +3 21755 1034 3196 +3 12994 13183 12901 +3 21127 22067 21126 +3 20302 20387 20301 +3 12558 21497 20131 +3 6518 2653 22063 +3 29398 29561 29695 +3 22956 12361 13855 +3 15671 15670 15535 +3 15535 24674 25294 +3 15808 15807 15670 +3 15671 15808 15670 +3 15947 15946 15807 +3 15808 15947 15807 +3 16088 16087 15946 +3 15947 16088 15946 +3 16231 16230 16087 +3 16088 16231 16087 +3 16231 16376 16375 +3 16230 16231 16375 +3 16376 16528 16527 +3 16375 16376 16527 +3 16528 16683 16682 +3 16527 16528 16682 +3 16683 16841 16840 +3 16682 16683 16840 +3 17004 17003 16840 +3 16841 17004 16840 +3 17168 17167 17003 +3 17004 17168 17003 +3 5408 5410 17167 +3 17168 5408 17167 +3 7551 7782 914 +3 5408 2845 5410 +3 1287 913 14538 +3 7433 8483 15910 +3 14672 14778 14777 +3 2845 5408 9622 +3 14919 15039 16337 +3 16703 2481 3491 +3 2886 18732 18598 +3 76 14746 51 +3 615 3076 6525 +3 17015 17014 1182 +3 16397 1186 3469 +3 4397 615 6525 +3 15104 16397 16106 +3 16106 16397 3469 +3 4949 15104 15355 +3 15355 15104 16106 +3 4908 4949 3260 +3 3260 4949 15355 +3 17155 14741 5071 +3 5071 4908 3260 +3 15522 2444 3534 +3 16324 2380 17155 +3 14546 15522 3534 +3 15522 14922 14725 +3 2444 15522 14725 +3 14922 14614 4667 +3 14725 14922 4667 +3 14614 5739 1850 +3 4667 14614 1850 +3 5739 14566 15561 +3 23419 18520 23121 +3 12538 15597 12449 +3 26942 30556 26488 +3 19136 451 12395 +3 34057 2686 2822 +3 28430 26412 28987 +3 13183 20156 20242 +3 29627 29760 29626 +3 20471 20470 20386 +3 23367 13945 16767 +3 22067 6518 22063 +3 22067 22063 21126 +3 20557 20639 20556 +3 20720 20719 20638 +3 15536 25294 24774 +3 33796 34219 17909 +3 15809 15808 15671 +3 15672 15809 15671 +3 15948 15947 15808 +3 15809 15948 15808 +3 16089 16088 15947 +3 15948 16089 15947 +3 16232 16231 16088 +3 16089 16232 16088 +3 16232 16377 16376 +3 16231 16232 16376 +3 16377 16529 16528 +3 16376 16377 16528 +3 16684 16683 16528 +3 16529 16684 16528 +3 16842 16841 16683 +3 16684 16842 16683 +3 17005 17004 16841 +3 16842 17005 16841 +3 17169 17168 17004 +3 17005 17169 17004 +3 5833 15231 15550 +3 277 145 9114 +3 7416 7146 9115 +3 16852 6001 291 +3 17081 17080 25601 +3 7424 7692 10977 +3 17184 8154 14629 +3 12601 16533 14056 +3 15769 9802 11222 +3 4547 15910 16988 +3 14801 16339 17111 +3 17111 16339 15303 +3 17242 17241 17077 +3 15243 15244 16866 +3 2843 17014 17015 +3 17078 17242 17077 +3 5140 2843 17015 +3 17014 4278 1182 +3 15485 349 2934 +3 15753 15485 2934 +3 349 16855 16854 +3 2934 349 16854 +3 16855 15691 15692 +3 16854 16855 15692 +3 14741 4908 5071 +3 15691 16098 16099 +3 1850 5739 15561 +3 5341 14318 16324 +3 14566 15285 16623 +3 15561 14566 16623 +3 15285 16965 17131 +3 16623 15285 17131 +3 16965 3795 5545 +3 17131 16965 5545 +3 3795 15621 4941 +3 5545 3795 4941 +3 20386 20385 20300 +3 17083 23419 23121 +3 18617 26942 26488 +3 35901 35827 35481 +3 23609 21376 23021 +3 7287 29398 29695 +3 4516 23274 11251 +3 30422 30425 18375 +3 13945 13290 16767 +3 12734 11251 23274 +3 21127 21126 20321 +3 8573 14259 13566 +3 5275 21484 20178 +3 20324 21127 20321 +3 20638 20719 20637 +3 21484 21390 20178 +3 15810 15809 15672 +3 20014 15672 15536 +3 15949 15948 15809 +3 15810 15949 15809 +3 16090 16089 15948 +3 15949 16090 15948 +3 16233 16232 16089 +3 16090 16233 16089 +3 16233 16378 16377 +3 16232 16233 16377 +3 16378 16530 16529 +3 16377 16378 16529 +3 16530 16685 16684 +3 16529 16530 16684 +3 16685 16843 16842 +3 16684 16685 16842 +3 14441 12377 14415 +3 16842 16843 17005 +3 9739 17169 9855 +3 17168 9622 5408 +3 6392 15753 5597 +3 22150 22148 21213 +3 23305 23306 23402 +3 1871 15278 20645 +3 16955 16951 15267 +3 21047 15042 15324 +3 5288 5424 5423 +3 14371 14372 14386 +3 4547 15358 15910 +3 6001 16852 15694 +3 16033 2177 5137 +3 16825 16988 1890 +3 15749 4678 15697 +3 1897 14761 16399 +3 1061 616 3661 +3 15682 15681 14519 +3 4331 4198 17241 +3 14560 14650 14559 +3 15692 15691 16099 +3 16098 15747 904 +3 3266 14318 2987 +3 14318 2380 16324 +3 14809 3266 14535 +3 14318 5341 2987 +3 14809 14535 15551 +3 15421 14809 15551 +3 2380 14741 17155 +3 3266 2987 14535 +3 7819 15 6793 +3 15421 15551 5547 +3 4941 15621 2802 +3 30865 30864 26357 +3 9973 16843 16686 +3 15011 15012 15134 +3 15135 15262 15261 +3 14523 14533 15654 +3 21045 21131 21044 +3 20215 20301 20214 +3 25209 2678 20261 +3 22136 13459 25310 +3 25572 25571 23710 +3 25837 25696 25838 +3 12441 27673 12442 +3 34823 34952 34822 +3 15029 23274 14908 +3 29948 19900 30489 +3 12921 13470 13566 +3 12734 13394 33949 +3 13088 20324 13563 +3 17967 20448 20447 +3 13088 13563 15024 +3 20093 13088 15024 +3 15672 15673 15810 +3 20324 20321 13563 +3 15950 15949 15810 +3 15811 15950 15810 +3 15950 16091 16090 +3 15949 15950 16090 +3 16091 16234 16233 +3 16090 16091 16233 +3 16234 16379 16378 +3 16233 16234 16378 +3 16379 16531 16530 +3 16378 16379 16530 +3 16531 16686 16685 +3 16530 16531 16685 +3 12056 12207 16468 +3 16685 16686 16843 +3 4007 4672 1772 +3 35777 35422 35840 +3 29935 30066 29934 +3 13338 13757 13659 +3 28704 28703 28574 +3 23047 19206 18184 +3 26139 369 4923 +3 9175 33351 8665 +3 30951 30950 30896 +3 2343 4933 5208 +3 17185 16186 5273 +3 3066 15538 16015 +3 16246 16237 16104 +3 2939 14412 15480 +3 16825 4547 16988 +3 15924 15925 16066 +3 14888 15008 15007 +3 6134 3342 14551 +3 10586 2764 12 +3 8802 8909 8801 +3 16210 16356 16355 +3 14650 14649 14559 +3 16099 16098 904 +3 15747 4815 976 +3 16096 16097 14744 +3 7004 16096 14744 +3 15134 15135 15261 +3 15615 5136 14941 +3 24055 14941 14395 +3 16383 15096 15063 +3 33514 33633 33513 +3 34000 34136 33999 +3 4533 15421 5547 +3 22913 22912 22813 +3 17901 17900 17804 +3 16096 15106 16097 +3 18655 18753 18752 +3 14356 14355 14342 +3 20569 673 4284 +3 10206 10326 14000 +3 15782 15921 15920 +3 10090 9973 16686 +3 17966 17872 17873 +3 35525 35536 35495 +3 22050 18522 19206 +3 11512 30091 17574 +3 19172 20453 203 +3 6860 18712 17270 +3 18796 13005 19434 +3 13433 13338 13659 +3 22132 22131 22035 +3 14921 16953 3612 +3 15029 14908 13659 +3 27378 27266 30502 +3 30096 19796 19906 +3 15276 13847 22561 +3 22660 15276 22561 +3 15812 15951 15950 +3 15811 15810 25189 +3 15951 16092 16091 +3 15950 15951 16091 +3 16092 16235 16234 +3 16091 16092 16234 +3 16235 16380 16379 +3 16234 16235 16379 +3 16380 16532 16531 +3 16379 16380 16531 +3 13134 13230 13229 +3 16531 16532 16686 +3 17028 17021 15367 +3 23111 23112 23209 +3 14337 17178 14974 +3 17178 15354 14974 +3 16353 16506 16505 +3 16206 16207 16352 +3 17670 7083 20597 +3 20463 20548 20462 +3 14906 3048 9640 +3 22228 22324 22227 +3 25996 5074 5208 +3 828 2268 6774 +3 1564 22460 16937 +3 2531 2396 4933 +3 24009 2921 21872 +3 23404 23405 21047 +3 14415 12844 3317 +3 15548 15890 15891 +3 15662 15663 13230 +3 5701 15901 16041 +3 502 1404 501 +3 9892 9891 14761 +3 14669 14668 14576 +3 14437 14645 14834 +3 904 15747 976 +3 5082 4813 14783 +3 15106 15107 16097 +3 16358 15684 976 +3 22034 21939 33671 +3 15154 14838 14909 +3 16649 16808 16807 +3 16648 16649 16807 +3 14838 901 2499 +3 16972 16971 16807 +3 4533 5547 15107 +3 13432 13759 13339 +3 13758 13759 14909 +3 15106 4533 15107 +3 16808 16972 16807 +3 21907 29085 22001 +3 17138 17137 16971 +3 16972 17138 16971 +3 15027 14906 9640 +3 20451 22449 23220 +3 13149 23 9640 +3 16327 5292 5293 +3 25003 13237 13142 +3 5428 5293 5294 +3 2672 21652 21653 +3 29361 29360 29223 +3 20719 20801 20800 +3 12362 17101 13847 +3 15813 15952 15951 +3 25189 15812 15811 +3 35509 35852 35869 +3 15951 15952 16092 +3 7967 11221 10348 +3 21591 15157 15735 +3 16235 10093 16380 +3 10209 10090 16686 +3 9802 15769 14901 +3 5205 5290 587 +3 14664 14770 14663 +3 13622 13720 13621 +3 15371 15367 14329 +3 14330 15371 14329 +3 1188 15180 1774 +3 15511 15646 15645 +3 13665 13570 12171 +3 23306 23403 23402 +3 2910 4262 4948 +3 3048 13149 9640 +3 14792 14905 23 +3 22132 22228 22131 +3 14557 14552 2268 +3 16063 16064 16206 +3 2343 2531 4933 +3 18654 18655 18752 +3 15042 15323 15324 +3 29928 30059 29927 +3 1426 25870 4276 +3 22130 22129 22033 +3 22130 22226 22129 +3 2129 2261 6142 +3 4536 2262 4669 +3 3357 3356 14489 +3 2177 17173 17010 +3 6144 16329 16480 +3 14498 14577 14497 +3 5137 2177 17010 +3 4815 16358 976 +3 2849 15907 14519 +3 13759 15154 14909 +3 15634 3483 15684 +3 2804 271 17137 +3 901 35002 7300 +3 17138 2804 17137 +3 2848 3535 271 +3 2804 2848 271 +3 4020 2283 3535 +3 20678 9546 13428 +3 2848 4020 3535 +3 34546 34674 34545 +3 31109 31172 31171 +3 14838 2499 14909 +3 29157 26919 17313 +3 855 856 2283 +3 15048 20678 13428 +3 4020 855 2283 +3 13149 14792 23 +3 13706 6768 34874 +3 4009 3876 856 +3 13621 15813 15812 +3 855 4009 856 +3 6413 6414 9326 +3 15952 15813 13717 +3 8573 11862 14259 +3 8562 14818 14820 +3 14445 14444 14418 +3 20755 20837 20753 +3 1 14375 2397 +3 2397 5469 4243 +3 4678 14801 14796 +3 6774 2268 6396 +3 15163 16803 16645 +3 16645 16803 3872 +3 14464 14360 17124 +3 17125 14464 17124 +3 14770 14883 14769 +3 14883 14882 14769 +3 14330 14329 2130 +3 0 14330 2130 +3 15646 15783 15782 +3 15510 15511 15645 +3 1499 14655 3622 +3 13045 13139 13138 +3 14882 14881 14768 +3 14512 15771 15635 +3 16829 16629 15354 +3 14696 15655 3619 +3 14942 14856 4544 +3 16207 16353 16352 +3 18163 18071 18072 +3 20265 16165 16020 +3 15538 1564 16015 +3 22032 21938 22033 +3 22128 22127 22031 +3 2530 2531 2343 +3 15645 15782 15781 +3 15268 16955 15267 +3 14792 6768 14905 +3 251 3211 3349 +3 14388 14387 14373 +3 3714 6247 15967 +3 15095 15221 14508 +3 15559 14336 15098 +3 30191 30190 30058 +3 4813 14796 14783 +3 16358 15634 15684 +3 14932 14933 3483 +3 1061 3661 15265 +3 13811 13908 10210 +3 385 386 3876 +3 4009 385 3876 +3 2665 2800 386 +3 385 2665 386 +3 824 943 2800 +3 2665 824 2800 +3 824 4267 4134 +3 15387 15388 15518 +3 943 824 4134 +3 9546 3621 4817 +3 22144 22048 21952 +3 4267 1414 948 +3 6008 6139 2006 +3 4134 4267 948 +3 1414 14627 14603 +3 948 1414 14603 +3 14627 15797 15795 +3 14603 14627 15795 +3 13892 25800 24285 +3 11256 6989 8195 +3 19276 1411 18629 +3 35661 35493 35590 +3 15795 15797 977 +3 20 15974 4104 +3 14554 1061 15265 +3 15678 15624 6016 +3 2398 15283 3793 +3 15283 15525 327 +3 16067 16068 16210 +3 15938 13228 13229 +3 1504 2395 4259 +3 15427 13019 10381 +3 33894 34029 33893 +3 14375 14365 2397 +3 14654 1285 3212 +3 15894 14819 12388 +3 14405 14424 14404 +3 16957 15241 3492 +3 703 14351 585 +3 15396 15392 14339 +3 14883 15003 14882 +3 15003 15002 14882 +3 2354 6 6271 +3 1619 6761 7092 +3 15783 15922 15921 +3 15645 15646 15782 +3 23109 23110 23207 +3 22224 22320 22319 +3 16182 16320 16095 +3 16320 1538 15616 +3 14769 14882 14768 +3 15002 15001 14881 +3 4411 4544 15757 +3 15761 4411 15757 +3 26142 1731 738 +3 14557 15761 14552 +3 16448 7855 23349 +3 5625 1731 26142 +3 35694 35735 35389 +3 3038 2767 16309 +3 16951 16955 15502 +3 5873 3063 2531 +3 14489 251 3349 +3 14450 14449 14423 +3 35355 35458 35853 +3 5701 16041 5702 +3 35681 35557 35781 +3 15117 15139 16792 +3 14341 26089 14332 +3 14796 14801 17111 +3 15634 14932 3483 +3 16691 16696 1889 +3 693 4944 1852 +3 14932 2398 3793 +3 2630 15797 15798 +3 821 1728 11394 +3 974 5690 15416 +3 357 942 2533 +3 14863 15368 14733 +3 35877 35691 35371 +3 21301 21302 22629 +3 35413 35354 35701 +3 2250 14475 94 +3 13428 9546 4817 +3 3661 14900 14784 +3 6139 2267 2006 +3 18753 18852 18851 +3 15368 5756 14733 +3 18752 18753 18851 +3 18852 18951 18950 +3 14894 18172 17914 +3 4661 15165 14863 +3 18851 18852 18950 +3 2049 15283 327 +3 15389 15519 15388 +3 16068 16211 16210 +3 15525 16400 14813 +3 14580 14672 14579 +3 18205 18204 18111 +3 20476 20561 20560 +3 14400 14419 14399 +3 15630 12780 23394 +3 15419 15418 14365 +3 14553 17121 14714 +3 16989 11335 3591 +3 14351 15396 14339 +3 14372 14387 14386 +3 14416 14442 14415 +3 17125 17124 15392 +3 6 1619 7092 +3 15126 15125 15002 +3 3211 1184 3349 +3 0 2130 6761 +3 22032 22128 22031 +3 15782 15783 15921 +3 355 244 4390 +3 13090 13765 13666 +3 6013 5220 17107 +3 16786 16320 15616 +3 19344 26918 26917 +3 26421 26507 23254 +3 20793 20875 20874 +3 20123 20122 20042 +3 15922 16064 16063 +3 15921 15922 16063 +3 5344 284 1731 +3 4923 5344 1731 +3 30479 27666 30480 +3 12284 13495 3066 +3 2530 5873 2531 +3 703 585 3063 +3 1209 1210 5561 +3 5873 703 3063 +3 35449 35873 35369 +3 16480 16329 14553 +3 35709 35769 35692 +3 556 16322 14733 +3 15303 2132 17112 +3 15647 15648 15784 +3 24345 24428 22422 +3 14775 14888 14774 +3 14933 14932 3793 +3 616 3870 3661 +3 16853 15695 15693 +3 15283 2049 3793 +3 16387 16386 5485 +3 14416 3317 14397 +3 14563 19319 14591 +3 15233 15234 14862 +3 16849 15233 14862 +3 14810 14927 15234 +3 15233 14810 15234 +3 3623 1892 14927 +3 15043 2803 4661 +3 14810 3623 14927 +3 16039 14826 15043 +3 2803 15165 4661 +3 2495 16180 16039 +3 14826 2803 15043 +3 1447 14716 2495 +3 16180 14826 16039 +3 14657 14695 1892 +3 3623 14657 1892 +3 14545 14546 14695 +3 14657 14545 14695 +3 15957 15522 14546 +3 14677 14716 1447 +3 144 14677 1447 +3 14813 16400 16668 +3 327 15525 14813 +3 15925 15926 16067 +3 14749 77 16548 +3 29108 29107 28972 +3 6146 5743 15770 +3 14645 14656 1897 +3 15880 15879 13339 +3 358 16071 16214 +3 12567 13865 15595 +3 4679 17152 15932 +3 2669 3793 16512 +3 3074 15827 15965 +3 15396 17125 15392 +3 1184 6253 109 +3 14442 14441 14415 +3 14976 16778 15889 +3 1619 0 6761 +3 15953 14729 16075 +3 15954 15953 16075 +3 14320 668 355 +3 9773 13090 13666 +3 4000 4390 82 +3 172 4000 82 +3 16862 6013 17107 +3 5220 16540 16539 +3 1538 6013 16862 +3 15616 1538 16862 +3 4658 13412 2791 +3 16320 16786 16095 +3 16064 16207 16206 +3 16757 4658 2791 +3 2354 6271 284 +3 15437 14396 14872 +3 21643 27893 27875 +3 5344 2354 284 +3 14572 14664 14571 +3 14770 14769 14663 +3 14351 14339 585 +3 14718 5346 14360 +3 14992 2535 14786 +3 17121 14992 14714 +3 1725 1843 6741 +3 16065 16066 16208 +3 14555 14565 14645 +3 1877 14480 15560 +3 6148 1185 1184 +3 3035 6791 15610 +3 4334 18724 4200 +3 3870 2484 2534 +3 16400 5685 16668 +3 5483 17132 16966 +3 6525 14677 144 +3 1888 6525 144 +3 14632 3469 4645 +3 4397 6525 1888 +3 15165 15368 14863 +3 4645 4397 1888 +3 14545 15957 14546 +3 5076 16106 14632 +3 15957 16076 14922 +3 15522 15957 14922 +3 16076 5085 14614 +3 14922 16076 14614 +3 5085 3879 5739 +3 14614 5085 5739 +3 3879 14620 14566 +3 5739 3879 14566 +3 14620 16171 15285 +3 14566 14620 15285 +3 16171 16802 16965 +3 5357 15355 5076 +3 15285 16171 16965 +3 5685 6404 14610 +3 14716 16180 2495 +3 16104 16238 15964 +3 16668 5685 14610 +3 18951 19052 19051 +3 15760 15045 14328 +3 15011 15134 15133 +3 15610 16459 33467 +3 14555 14645 14437 +3 15785 15924 15923 +3 15512 15513 15647 +3 15924 16066 16065 +3 18950 18951 19051 +3 3793 2049 16512 +3 15827 15428 15429 +3 975 3074 15965 +3 11702 13597 12030 +3 2400 3868 707 +3 16109 16111 16391 +3 15361 16861 1732 +3 3742 15953 15954 +3 15955 3742 15954 +3 15363 15348 668 +3 584 14320 355 +3 172 82 690 +3 572 172 690 +3 4934 65 1499 +3 4927 14458 14429 +3 14429 5411 4934 +3 5411 65 4934 +3 16182 16095 16993 +3 16994 16182 16993 +3 23110 23208 23207 +3 282 281 736 +3 35680 13194 12642 +3 3195 5333 15310 +3 6 7092 6271 +3 15371 17028 15367 +3 14493 14572 14492 +3 14664 14663 14571 +3 14464 14718 14360 +3 7002 16193 5346 +3 14696 3619 3620 +3 14349 14696 3620 +3 581 466 175 +3 15923 15924 16065 +3 22930 23225 3182 +3 4544 14856 4678 +3 14176 13390 14079 +3 14559 24032 14560 +3 7470 15364 11216 +3 14778 14891 14890 +3 15423 5483 16966 +3 17132 4138 4005 +3 15393 3260 5357 +3 15355 16106 5076 +3 16802 3794 3795 +3 16965 16802 3795 +3 4936 5071 15393 +3 6252 12988 3794 +3 3469 4397 4645 +3 3260 15355 5357 +3 3795 3794 15621 +3 15796 17155 4936 +3 2528 9528 5000 +3 19615 19726 19725 +3 20472 20471 20387 +3 25466 16754 16753 +3 15262 18526 18614 +3 12295 12057 12210 +3 17155 5071 4936 +3 14961 2750 15339 +3 6404 5483 15423 +3 16106 3469 14632 +3 15526 3961 15886 +3 14610 6404 15423 +3 15105 14593 14597 +3 15886 15105 14597 +3 15514 15649 15648 +3 15258 15386 15385 +3 6020 14469 4148 +3 14678 14786 14690 +3 14864 14437 15351 +3 15225 14864 15351 +3 14366 14381 14380 +3 15648 15785 15784 +3 16094 16512 15625 +3 15350 16033 14836 +3 16042 15497 14347 +3 15965 15827 15429 +3 15659 1524 19217 +3 14824 32 16989 +3 16391 16247 15308 +3 16247 15307 15308 +3 16700 3742 15955 +3 14732 16700 15955 +3 17006 16994 15348 +3 14320 15363 668 +3 572 690 280 +3 281 572 280 +3 23012 23011 22912 +3 13412 4658 16016 +3 15143 1448 3718 +3 3619 15143 3718 +3 668 15348 5698 +3 16994 16993 15298 +3 26144 735 5352 +3 6010 572 281 +3 35537 35493 35661 +3 2609 8050 5191 +3 16217 16213 17021 +3 17028 16217 17021 +3 14493 14492 14441 +3 14442 14493 14441 +3 14718 7002 5346 +3 16705 16704 16193 +3 22435 35391 35722 +3 4126 14752 14751 +3 16066 16209 16208 +3 3333 447 6791 +3 613 16339 14801 +3 14864 14555 14437 +3 14727 16030 15480 +3 16052 15823 15500 +3 706 825 14475 +3 13846 13748 29702 +3 16966 17132 4005 +3 4138 4417 3122 +3 14537 5341 16478 +3 16324 17155 15796 +3 15661 5083 4812 +3 3615 22057 21491 +3 818 16383 16256 +3 2987 5341 14915 +3 14713 4812 5083 +3 5071 3260 15393 +3 5341 16324 16478 +3 405 5728 2249 +3 14535 2987 16336 +3 5862 1025 137 +3 3035 3333 6791 +3 16256 16383 15063 +3 20704 18353 18260 +3 15879 13432 13339 +3 13673 16341 14161 +3 15738 15737 15209 +3 14568 14660 11702 +3 2048 26 79 +3 16494 16650 16649 +3 15107 5547 15230 +3 5547 15551 15494 +3 15107 15230 3346 +3 15551 15685 15494 +3 16097 15107 3346 +3 5547 15494 15230 +3 14597 14593 17118 +3 14593 14760 17118 +3 15244 15267 16941 +3 15382 15383 15513 +3 14495 14494 14443 +3 14418 14444 14417 +3 15612 5282 5283 +3 13502 12749 5221 +3 15128 15127 15004 +3 15970 10381 11619 +3 14571 11076 14492 +3 17157 17170 14470 +3 3215 15497 16042 +3 1300 3215 16042 +3 14356 14370 14355 +3 16329 16637 17121 +3 15307 15242 15308 +3 15242 14643 15308 +3 16542 16700 14732 +3 16541 16542 14732 +3 16195 16182 16994 +3 15363 17006 15348 +3 281 280 735 +3 736 281 735 +3 20740 25012 24413 +3 22913 23012 22912 +3 14492 12293 14441 +3 11101 10027 1891 +3 15348 16994 15298 +3 14663 14662 14570 +3 282 6010 281 +3 15348 15298 5698 +3 13860 13612 14380 +3 75 172 572 +3 16217 16778 14976 +3 15226 17108 15484 +3 14572 14571 14492 +3 16213 16217 14976 +3 7002 16705 16193 +3 3930 9632 4063 +3 14612 8137 8895 +3 3074 975 16704 +3 35578 35756 35793 +3 3620 3619 15138 +3 14565 14656 14645 +3 14389 14406 14405 +3 16051 15771 14512 +3 14378 15225 14363 +3 35903 35622 35578 +3 15792 15415 14655 +3 4005 4138 3122 +3 15900 11795 14596 +3 16478 16324 15796 +3 4417 14897 143 +3 1409 15560 2984 +3 14744 16097 16070 +3 16650 16809 16808 +3 16649 16650 16808 +3 14744 16070 16107 +3 16973 16972 16808 +3 5341 14537 14915 +3 16108 14744 16107 +3 16809 16973 16808 +3 14535 16336 15685 +3 16973 17139 17138 +3 16972 16973 17138 +3 2577 2804 17138 +3 17139 2577 17138 +3 2713 2848 2804 +3 2577 2713 2804 +3 4019 4020 2848 +3 2713 4019 2848 +3 854 855 4020 +3 4019 854 4020 +3 5749 4009 855 +3 20379 20463 20378 +3 854 5749 855 +3 384 385 4009 +3 35359 35580 35732 +3 5749 384 4009 +3 2666 2665 385 +3 20294 20379 20293 +3 20463 20462 20378 +3 17118 14760 14592 +3 14760 3078 14592 +3 3870 2534 14900 +3 14727 15818 15755 +3 1304 15016 4007 +3 14444 14495 14443 +3 35557 35530 35373 +3 11795 12739 11565 +3 14979 14974 15896 +3 15937 4679 16621 +3 15354 16629 14943 +3 35524 35839 23855 +3 14528 14823 14347 +3 15497 15164 14347 +3 16757 2791 10008 +3 15912 12287 15773 +3 15242 6650 14643 +3 6650 3739 14643 +3 16110 16542 16541 +3 6273 16110 16541 +3 16195 16479 16320 +3 17006 16195 16994 +3 26286 5351 4553 +3 20558 20557 20472 +3 735 734 5351 +3 22223 22224 22319 +3 16488 16384 14721 +3 1071 16515 16670 +3 9561 13994 447 +3 3333 9561 447 +3 4000 355 4390 +3 668 5698 244 +3 6010 75 572 +3 5598 4000 172 +3 14729 15226 15484 +3 16075 14729 15484 +3 16778 15361 15889 +3 15889 15361 1732 +3 279 465 174 +3 1596 1712 1595 +3 16705 3074 16704 +3 15428 14392 557 +3 12718 12424 13994 +3 11523 11459 11524 +3 13695 14482 14558 +3 35944 35488 35413 +3 14924 14378 14363 +3 15290 14924 14363 +3 14890 14891 15010 +3 14574 14573 14494 +3 9561 12718 13994 +3 12718 10582 15596 +3 3122 4417 143 +3 14592 3078 16992 +3 20294 20293 20207 +3 20208 20294 20207 +3 384 2666 385 +3 2666 472 824 +3 2665 2666 824 +3 472 4268 4267 +3 16097 3346 16070 +3 20394 20478 20477 +3 15551 14535 15685 +3 14897 14917 14916 +3 13759 13758 13339 +3 2987 14915 16336 +3 824 472 4267 +3 32568 34075 19821 +3 4268 949 1414 +3 4267 4268 1414 +3 949 14635 14627 +3 1414 949 14627 +3 35380 35882 35938 +3 14627 14635 15797 +3 5000 5006 15117 +3 5858 15524 5859 +3 2104 2765 15173 +3 19156 2278 19155 +3 35490 35671 35819 +3 593 17905 592 +3 14628 15233 16849 +3 17860 18555 16551 +3 14811 14810 15233 +3 14628 14811 15233 +3 15359 3623 14810 +3 19094 20068 18172 +3 23229 23147 23131 +3 14539 2 14704 +3 3078 356 16992 +3 15395 14536 3170 +3 16102 2849 14522 +3 4672 14896 14812 +3 2387 6911 1178 +3 16071 15970 17156 +3 7344 8268 9648 +3 14974 15354 15095 +3 15261 15389 15388 +3 3356 251 14489 +3 14467 14465 17134 +3 8050 2609 20432 +3 15164 14528 14347 +3 14088 20865 21574 +3 14364 14352 941 +3 6650 15958 3739 +3 15958 15102 3739 +3 5820 14939 4006 +3 4139 16110 6273 +3 16479 5820 1538 +3 16182 16195 16320 +3 23011 23012 23109 +3 22320 22417 22416 +3 280 390 734 +3 5352 735 5351 +3 2549 16384 16488 +3 14439 2549 16488 +3 20711 20710 20629 +3 16628 16471 16176 +3 355 668 244 +3 20630 20711 20629 +3 75 5598 172 +3 14769 14768 14662 +3 17108 14824 15484 +3 584 355 4000 +3 16861 16111 16109 +3 17019 17006 15363 +3 13502 5221 12388 +3 1732 16861 16109 +3 15429 15428 557 +3 15353 15101 14612 +3 932 5757 225 +3 14392 3215 1300 +3 15639 15640 15776 +3 14895 1896 14815 +3 15225 15351 14363 +3 14531 15487 14926 +3 14553 14714 2484 +3 15892 2308 2177 +3 20409 21219 21218 +3 26683 26579 20244 +3 356 17183 16692 +3 7090 15659 15041 +3 20379 20378 20293 +3 16992 356 16692 +3 14811 15359 14810 +3 2267 24417 2006 +3 17177 14657 3623 +3 15359 17177 3623 +3 15260 15388 15387 +3 14544 14545 14657 +3 14916 14917 15526 +3 14366 13612 12566 +3 143 14897 14916 +3 3961 15105 15886 +3 22750 22749 21051 +3 14917 3961 15526 +3 17177 14544 14657 +3 23049 22749 22750 +3 14529 15957 14545 +3 14544 14529 14545 +3 14529 14326 16076 +3 15957 14529 16076 +3 14326 4408 5085 +3 16076 14326 5085 +3 4408 3878 3879 +3 5085 4408 3879 +3 3878 16184 14620 +3 3879 3878 14620 +3 16184 15696 16171 +3 14620 16184 16171 +3 35743 35594 35881 +3 15696 16622 16802 +3 14693 14604 2709 +3 23147 23049 23342 +3 15964 352 77 +3 16334 16485 16484 +3 14059 14157 12253 +3 14370 14369 14355 +3 358 6871 16071 +3 14689 14455 5757 +3 15873 25442 732 +3 15900 11799 11795 +3 14467 16174 5486 +3 16051 16248 15771 +3 10972 4806 8123 +3 15267 16951 16941 +3 17170 14472 14470 +3 16956 16707 16706 +3 15353 15100 15102 +3 16852 16853 15693 +3 16479 16175 5820 +3 15958 15353 15102 +3 16320 16479 1538 +3 4006 4139 6273 +3 14142 16757 10008 +3 5820 4006 6013 +3 735 280 734 +3 22128 22224 22127 +3 242 2549 14439 +3 690 431 390 +3 14617 16488 14719 +3 16384 1071 14721 +3 16985 16077 16968 +3 16471 16628 15931 +3 14841 15081 3038 +3 15298 15292 13124 +3 15655 15143 3619 +3 1448 15286 6144 +3 5598 584 4000 +3 15955 15954 15816 +3 940 14322 584 +3 15366 15363 14320 +3 16111 16247 16391 +3 14375 15419 14365 +3 15228 15101 15353 +3 15958 15228 15353 +3 557 14392 1300 +3 14472 15350 2413 +3 14563 2887 19319 +3 15164 15293 14528 +3 15554 7468 7357 +3 14398 14417 14397 +3 14472 14473 15350 +3 16318 15892 16033 +3 1777 14553 2484 +3 15513 15514 15648 +3 708 2401 6268 +3 2135 2007 6268 +3 9793 8083 9435 +3 3978 15972 1299 +3 12424 12718 15596 +3 15045 15169 14328 +3 16171 15696 16802 +3 16622 6252 3794 +3 16802 16622 3794 +3 1195 1311 1194 +3 15259 15260 15387 +3 15499 14863 16322 +3 19086 19188 19187 +3 620 18022 17929 +3 17184 12932 13958 +3 15786 15787 15925 +3 22047 23147 23342 +3 35759 35802 35569 +3 15132 15133 15259 +3 23342 23049 22750 +3 2126 298 131 +3 798 4661 15499 +3 16958 15549 16955 +3 6016 6634 67 +3 14361 15620 14700 +3 35546 26940 27520 +3 14407 14426 14425 +3 14406 14407 14425 +3 6773 4531 827 +3 18896 1386 19112 +3 14426 14452 14451 +3 14579 14578 14499 +3 14900 14476 1533 +3 15649 15650 15786 +3 14500 14579 14499 +3 14812 14689 5757 +3 14749 15964 77 +3 14746 16074 358 +3 12295 12381 11977 +3 14615 16173 14506 +3 35383 3178 10623 +3 14454 14453 14427 +3 15016 14896 4672 +3 23218 13784 23120 +3 16174 16956 14937 +3 3980 1409 2984 +3 5486 16174 14937 +3 14612 15287 15100 +3 13958 13209 11497 +3 16212 16175 16195 +3 15353 14612 15100 +3 1538 5820 6013 +3 14939 4139 4006 +3 20711 20793 20710 +3 4006 6273 5220 +3 280 690 390 +3 23012 23110 23109 +3 973 242 353 +3 82 28 431 +3 14721 16670 16828 +3 353 242 14439 +3 8268 7344 11250 +3 14719 14721 16828 +3 16077 16471 15931 +3 16471 15436 16176 +3 5698 15298 13124 +3 15292 16985 15284 +3 14571 14663 14570 +3 16993 16985 15292 +3 15960 15955 15816 +3 14655 14512 3622 +3 14322 15366 14320 +3 15954 16075 16363 +3 8909 2204 8801 +3 2100 940 5598 +3 15101 15969 14612 +3 10582 23172 23073 +3 15418 15419 17157 +3 15228 15958 6650 +3 15663 15800 13230 +3 15596 10582 23073 +3 14443 14442 14416 +3 15497 16631 15164 +3 15350 16318 16033 +3 14417 14443 14416 +3 2146 5058 15303 +3 34951 34950 34821 +3 4148 15659 7090 +3 14399 14398 14381 +3 2442 2776 2777 +3 15038 15163 16645 +3 15434 15502 16949 +3 14475 3332 706 +3 5083 14759 14713 +3 15043 4661 798 +3 946 14533 14523 +3 137 818 16256 +3 24114 14713 14941 +3 9648 14612 15969 +3 16039 15043 14923 +3 19831 19945 19944 +3 13139 13046 13140 +3 15926 16068 16067 +3 1896 16480 14815 +3 17111 15303 17112 +3 23172 15073 12663 +3 175 466 176 +3 14798 15412 15898 +3 14863 14733 16322 +3 9855 9854 9739 +3 14370 14385 14369 +3 1888 144 14899 +3 15096 16702 16696 +3 15510 15509 15378 +3 23073 23172 12663 +3 16630 14700 16052 +3 11549 6138 35459 +3 4645 1888 2502 +3 392 506 17834 +3 1533 14476 15223 +3 4661 14863 15499 +3 2620 13295 17135 +3 15133 15260 15259 +3 15383 15384 15514 +3 9856 16843 9972 +3 815 16483 16484 +3 15787 15926 15925 +3 17173 14629 14746 +3 15385 15386 15516 +3 5273 16186 16688 +3 6871 15970 16071 +3 17968 20448 17967 +3 15130 15131 15257 +3 14933 14817 2844 +3 35679 35439 35631 +3 12052 11887 12225 +3 20498 12088 12170 +3 14373 14389 14388 +3 9680 11221 1293 +3 17019 16212 17006 +3 16543 2230 16697 +3 6013 4006 5220 +3 16175 14939 5820 +3 15073 19981 13696 +3 6273 16541 16540 +3 690 82 431 +3 4065 15081 14841 +3 16863 973 14789 +3 4390 6669 28 +3 16670 14975 14377 +3 14789 973 353 +3 2253 8000 9773 +3 16828 16670 14377 +3 14455 15898 1420 +3 4361 10887 4496 +3 16995 9179 9288 +3 4282 4283 1380 +3 16077 15931 16968 +3 3185 3355 3356 +3 15298 16993 15292 +3 13124 15292 6390 +3 3622 14512 15635 +3 16095 16077 16985 +3 15816 15954 16363 +3 15695 16101 16102 +3 14322 14320 584 +3 16075 15484 15483 +3 35879 35852 35509 +3 167 2100 75 +3 701 15228 6650 +3 12207 12056 11880 +3 3355 361 251 +3 701 6650 15242 +3 15293 15414 14528 +3 15244 16941 16866 +3 14494 14493 14442 +3 3215 5487 15497 +3 14473 16318 15350 +3 14443 14494 14442 +3 6353 6224 8520 +3 35434 35483 35717 +3 15515 15516 15650 +3 15008 15131 15130 +3 16177 16034 5192 +3 1895 500 1426 +3 14923 15043 798 +3 5833 15550 5834 +3 14578 14577 14498 +3 14702 1447 5600 +3 16196 16342 16341 +3 21147 13655 21146 +3 14459 16039 14923 +3 2502 1888 14899 +3 246 16177 5192 +3 19653 4133 180 +3 15516 15651 15650 +3 19774 18626 18433 +3 98 21286 21285 +3 16820 16984 16983 +3 16803 16957 3872 +3 9565 14818 8576 +3 1182 4278 15689 +3 15691 15690 16098 +3 15040 5076 6878 +3 14632 4645 14478 +3 16342 16495 16494 +3 16341 16342 16494 +3 16495 16651 16650 +3 16494 16495 16650 +3 16810 16809 16650 +3 16651 16810 16650 +3 5076 14632 6878 +3 16974 16973 16809 +3 6247 6021 15967 +3 14478 4645 2502 +3 16219 6016 15624 +3 1613 4527 1601 +3 15515 15650 15649 +3 11972 12460 12053 +3 15651 15652 15788 +3 15514 15515 15649 +3 2177 2308 17173 +3 15517 15652 15651 +3 3663 4282 4415 +3 16074 6871 358 +3 4265 816 815 +3 14974 15095 15896 +3 14465 14467 5486 +3 16789 5296 5297 +3 15763 12210 14556 +3 2231 16697 2496 +3 15278 16299 15466 +3 14541 14726 14604 +3 15366 17019 15363 +3 13133 16078 13132 +3 5220 6273 16540 +3 16175 16479 16195 +3 14663 14769 14662 +3 16541 14732 17008 +3 82 4390 28 +3 20793 20792 20710 +3 15436 16863 16864 +3 244 48 6669 +3 14975 15961 14319 +3 16864 16863 14789 +3 21741 21649 35014 +3 14377 14975 14319 +3 20612 20613 20693 +3 20135 20192 20104 +3 22416 22417 22514 +3 35442 35772 35780 +3 2767 20266 16309 +3 22614 22713 22712 +3 22932 22833 14045 +3 4283 3185 1380 +3 16985 16968 15284 +3 3663 1575 4282 +3 16993 16095 16985 +3 48 13124 139 +3 14344 14357 14356 +3 16786 16471 16077 +3 16363 16075 15483 +3 15297 15425 15169 +3 940 584 5598 +3 15484 14824 14825 +3 14942 1188 613 +3 6141 167 6010 +3 16474 701 15242 +3 15658 5458 5591 +3 15419 17170 17157 +3 16474 15242 15307 +3 16631 15293 15164 +3 16194 14743 5472 +3 14573 14572 14493 +3 14392 16787 3215 +3 33742 33876 33741 +3 14494 14573 14493 +3 16866 16941 14816 +3 35834 35787 35520 +3 17994 17993 17900 +3 14550 15749 14549 +3 4278 15555 15689 +3 14404 14423 14403 +3 2495 16039 14459 +3 21495 14628 22344 +3 144 1447 14702 +3 5600 2495 14459 +3 14899 144 14702 +3 1447 2495 5600 +3 15962 15824 16794 +3 20597 13892 24285 +3 15487 16942 15297 +3 15221 14926 15760 +3 4546 3531 1306 +3 16942 4546 1306 +3 14387 14388 14404 +3 16942 1306 15297 +3 16100 15611 15747 +3 15291 3213 1061 +3 6878 14632 14478 +3 16098 16100 15747 +3 16810 16974 16809 +3 5357 5076 15040 +3 16974 17140 17139 +3 16973 16974 17139 +3 7010 2577 17139 +3 17140 7010 17139 +3 2578 2713 2577 +3 1653 4936 15523 +3 15393 5357 14742 +3 15391 16475 4815 +3 15690 16100 16098 +3 15487 15297 15045 +3 14896 15015 14689 +3 15516 15517 15651 +3 15650 15787 15786 +3 16033 15892 2177 +3 15255 15383 15382 +3 1874 4679 15932 +3 14629 16074 14746 +3 15414 16514 14528 +3 3404 3663 4415 +3 4679 1874 16621 +3 14375 25564 25420 +3 16860 16112 16111 +3 6002 5 53 +3 14474 16948 433 +3 10745 10977 14866 +3 16616 16799 20663 +3 15784 15785 15923 +3 16540 16541 17008 +3 16212 16195 17006 +3 4136 14707 15289 +3 14732 15955 15960 +3 4390 244 6669 +3 12663 15073 13696 +3 431 28 95 +3 5698 13124 48 +3 15961 5549 15524 +3 16176 15436 16864 +3 16628 16176 15929 +3 14319 15961 15524 +3 6144 15286 16329 +3 7293 21465 21464 +3 2131 14364 941 +3 19981 20022 19991 +3 14406 14425 14424 +3 15108 14984 6527 +3 30417 30418 30551 +3 22419 22517 22516 +3 15929 16176 16865 +3 11969 14157 14059 +3 14422 14421 14402 +3 16031 16628 15929 +3 15292 15284 6390 +3 14448 14447 14421 +3 16095 16786 16077 +3 6669 48 4653 +3 14342 14332 14356 +3 16786 15616 15436 +3 15483 15484 14825 +3 14783 17112 14759 +3 2100 5598 75 +3 35754 35554 35518 +3 15761 15757 14552 +3 283 6141 282 +3 15430 16474 15307 +3 14856 14942 613 +3 4127 2227 546 +3 15430 15307 16247 +3 5487 16631 15497 +3 20548 20547 20462 +3 14665 14664 14572 +3 15428 16472 14392 +3 32447 32554 32446 +3 14573 14665 14572 +3 15749 15697 14549 +3 22163 22237 121 +3 17867 19935 19300 +3 22512 22511 22413 +3 6405 16698 16855 +3 14423 14422 14403 +3 2886 19174 4935 +3 349 6405 16855 +3 14934 6405 349 +3 15485 14934 349 +3 16698 15690 15691 +3 16855 16698 15691 +3 14485 14697 2398 +3 14697 15283 2398 +3 15283 14697 15525 +3 14697 4003 15525 +3 4546 16072 16215 +3 4003 14873 16400 +3 14799 15898 14455 +3 3531 4546 16215 +3 15611 15391 4815 +3 16215 16072 15018 +3 14742 5357 15040 +3 15747 15611 4815 +3 7010 2578 2577 +3 4936 15393 15523 +3 4151 4019 2713 +3 2578 4151 2713 +3 853 854 4019 +3 4151 853 4019 +3 5615 5749 854 +3 1532 15796 1653 +3 853 5615 854 +3 16038 15634 16358 +3 15523 15393 14742 +3 16072 14510 15018 +3 16475 16038 16358 +3 15128 15255 15127 +3 14926 15487 15045 +3 1893 3222 1658 +3 16215 15018 5743 +3 14381 14398 14380 +3 2308 14629 17173 +3 7002 14937 16705 +3 16629 15937 14531 +3 16706 16187 3074 +3 16705 16706 3074 +3 16506 16507 16662 +3 1741 1380 3357 +3 14938 16860 16861 +3 15361 14938 16861 +3 708 1064 2935 +3 14357 14371 14356 +3 13666 13765 12305 +3 737 26144 26143 +3 8851 2513 2378 +3 17008 14732 15960 +3 14919 16337 16192 +3 16073 14707 4136 +3 16862 17107 973 +3 244 5698 48 +3 28 6669 7007 +3 6669 4653 7007 +3 15824 15688 16954 +3 11390 10140 821 +3 16968 15931 16967 +3 16628 16031 15833 +3 16852 15693 15694 +3 16637 1660 17121 +3 272 16538 15936 +3 17123 14617 16050 +3 13696 19981 19991 +3 14067 14186 5755 +3 176 2936 2935 +3 14463 16791 14982 +3 3483 14933 2844 +3 2535 14585 14918 +3 16176 16864 16865 +3 15694 16794 6001 +3 13047 13141 13140 +3 15931 15833 16967 +3 13124 6390 139 +3 3978 1299 3157 +3 16471 16786 15436 +3 28 7007 95 +3 16337 14396 15437 +3 15616 16862 16863 +3 2137 29291 19143 +3 5175 16073 16216 +3 167 75 6010 +3 9524 4018 9411 +3 16397 3873 1186 +3 6141 6010 282 +3 16105 15430 16247 +3 3868 6774 707 +3 24009 21872 24010 +3 16111 16112 16247 +3 16787 5487 3215 +3 14786 2535 14800 +3 14771 14770 14664 +3 16472 16787 14392 +3 23405 23404 23307 +3 14665 14771 14664 +3 5878 6002 53 +3 21219 22237 22163 +3 25130 35729 13590 +3 14751 16104 14749 +3 15141 15142 14623 +3 14362 15142 15141 +3 16038 16183 15634 +3 16183 14485 2398 +3 16179 16478 1532 +3 15796 4936 1653 +3 14537 16478 15619 +3 16478 15796 1532 +3 14537 15619 5994 +3 14915 14537 5994 +3 15525 4003 16400 +3 16478 16179 15619 +3 15142 14622 14623 +3 14873 5819 5685 +3 14895 14815 3213 +3 15966 14895 3213 +3 16475 16358 4815 +3 5819 3611 6404 +3 15685 16336 17179 +3 14915 5994 14797 +3 5615 383 384 +3 5749 5615 384 +3 383 247 2666 +3 384 383 2666 +3 247 2533 472 +3 2666 247 472 +3 2533 6523 4268 +3 15685 17179 83 +3 15494 15685 83 +3 6404 3611 5483 +3 16183 14932 15634 +3 2481 14362 15141 +3 14510 14362 2481 +3 21026 21112 21025 +3 14076 11960 11692 +3 22237 98 121 +3 21218 21219 22163 +3 14771 14884 14770 +3 14417 14416 14397 +3 16961 16962 17127 +3 4282 1380 1741 +3 14718 5486 7002 +3 14937 16706 16705 +3 16508 16663 16507 +3 5858 3262 15524 +3 14857 14938 15361 +3 16778 14857 15361 +3 465 581 174 +3 5753 279 5754 +3 23208 23306 23305 +3 23207 23208 23305 +3 14615 15054 16173 +3 10326 10206 10207 +3 14707 14919 15289 +3 16216 16073 4136 +3 23218 23120 21771 +3 16063 16206 16205 +3 20022 20479 20455 +3 48 139 4653 +3 16864 14789 16181 +3 15824 14458 15688 +3 4653 139 5732 +3 15931 16628 15833 +3 13784 23023 22829 +3 14488 15478 3873 +3 14617 14719 14720 +3 15936 17123 16050 +3 15620 14319 3262 +3 15394 3262 5989 +3 14364 15411 14352 +3 16831 16995 9288 +3 14377 14319 15620 +3 14319 15524 3262 +3 17121 1660 14992 +3 16462 13467 16025 +3 16968 16967 15270 +3 15284 16968 15270 +3 16794 15824 16954 +3 14458 4927 15688 +3 431 95 504 +3 390 431 504 +3 15436 15616 16863 +3 16863 16862 973 +3 14430 15054 14615 +3 16173 5175 16216 +3 10210 16532 16380 +3 1772 4672 15362 +3 4658 4065 16016 +3 35115 22420 22419 +3 15622 14554 615 +3 14933 3793 14817 +3 16861 16860 16111 +3 16112 16105 16247 +3 13569 13472 11618 +3 16354 16507 16506 +3 15828 16472 15428 +3 15827 15828 15428 +3 14884 14883 14770 +3 15004 15003 14883 +3 19991 20022 20455 +3 20407 20409 21218 +3 14712 16323 14349 +3 17246 4328 17245 +3 14622 14895 15966 +3 14623 14622 15966 +3 14932 16183 2398 +3 17132 14507 4138 +3 15494 83 15488 +3 15230 15494 15488 +3 472 2533 4268 +3 6523 1530 949 +3 4268 6523 949 +3 6522 1647 1530 +3 16070 3346 248 +3 949 1530 14635 +3 16400 14873 5685 +3 15230 15488 1419 +3 15934 16491 15415 +3 4138 1415 4417 +3 5685 5819 6404 +3 14715 15052 14593 +3 16336 14915 14797 +3 3611 14748 5483 +3 14053 21673 13272 +3 3346 1419 248 +3 19513 14635 1530 +3 35487 35505 35800 +3 12191 25191 22384 +3 17755 16453 19698 +3 16107 16070 16249 +3 3540 3669 3539 +3 14748 14507 17132 +3 16336 14797 17179 +3 16491 16051 15415 +3 5483 14748 17132 +3 22515 22614 22613 +3 15018 14510 2481 +3 6774 6396 2401 +3 7090 15041 273 +3 14552 14550 2135 +3 16209 16355 16354 +3 2268 14552 2135 +3 174 581 175 +3 17128 2621 3713 +3 20900 16962 16800 +3 14465 5486 14464 +3 5486 14937 7002 +3 14714 14992 14786 +3 22228 22227 22131 +3 14325 14857 16778 +3 16217 14325 16778 +3 8306 11216 15364 +3 708 6268 4401 +3 30352 18927 6875 +3 22224 22223 22127 +3 5855 14430 14615 +3 15054 5175 16173 +3 15483 14825 14457 +3 15289 14919 16192 +3 14820 6908 7005 +3 14403 14402 14385 +3 20479 21235 21232 +3 20123 20208 20122 +3 14789 353 16538 +3 16865 16864 16181 +3 7007 4653 7008 +3 139 49 5732 +3 15014 14704 3170 +3 1420 15014 3170 +3 16538 17123 15936 +3 16050 14617 14720 +3 15790 15929 17022 +3 16865 16181 16254 +3 17022 16865 16254 +3 16181 16538 272 +3 14719 16828 16991 +3 14361 14377 15620 +3 9321 9668 3607 +3 20455 20479 21232 +3 6390 1060 49 +3 139 6390 49 +3 16398 16791 14463 +3 14458 5411 14429 +3 14342 14341 14332 +3 734 390 733 +3 17107 16539 242 +3 973 17107 242 +3 18209 1647 6647 +3 15635 15771 5855 +3 14337 14974 14979 +3 15613 14337 14979 +3 20208 20207 20122 +3 5337 12557 11399 +3 3793 2669 14817 +3 21235 22333 22254 +3 14338 15390 14330 +3 17109 17028 15371 +3 3619 3718 15138 +3 16353 16354 16506 +3 16187 15828 15827 +3 3074 16187 15827 +3 14884 15004 14883 +3 14856 14801 4678 +3 21232 21235 22254 +3 13784 22829 23120 +3 1420 3170 16708 +3 707 2401 466 +3 14498 14497 14446 +3 12292 10383 13800 +3 1415 15140 4417 +3 1416 14461 3961 +3 351 16107 463 +3 16070 248 16249 +3 15490 15359 14811 +3 21586 16857 21495 +3 15115 17177 15359 +3 21494 15490 16857 +3 3346 15230 1419 +3 35932 6964 35599 +3 15140 474 14897 +3 4417 15140 14897 +3 15105 14715 14593 +3 15052 14624 14760 +3 22333 261 15472 +3 22948 23047 14586 +3 22254 22333 15472 +3 1326 15617 19474 +3 14471 14544 17177 +3 261 21354 21297 +3 15115 14471 17177 +3 16330 14529 14544 +3 14471 16330 14544 +3 14393 14326 14529 +3 16330 14393 14529 +3 15472 261 21297 +3 21354 7971 13430 +3 14624 15296 3078 +3 14507 1415 4138 +3 21297 21354 13430 +3 821 10023 1728 +3 20156 15884 15032 +3 14726 7090 14604 +3 14901 3212 1285 +3 7473 10619 9418 +3 9525 974 4680 +3 13377 13014 13378 +3 14552 15757 14550 +3 4544 4678 15749 +3 16962 20900 20980 +3 23998 351 16944 +3 17134 14465 17125 +3 5486 14718 14464 +3 14328 15169 16465 +3 16329 17121 14553 +3 15390 17109 15371 +3 14325 16217 17028 +3 16542 16391 16700 +3 15308 14643 3742 +3 17021 17019 15366 +3 13765 10368 12305 +3 16323 15224 14696 +3 15224 15655 14696 +3 16363 15483 14658 +3 15935 16363 14658 +3 14866 10977 7692 +3 11236 35703 35499 +3 9669 12846 12377 +3 7425 8520 6224 +3 353 14439 17123 +3 16181 14789 16538 +3 95 7007 1036 +3 4653 5732 7008 +3 14519 5411 14458 +3 123 1575 3663 +3 16707 17009 16187 +3 12387 1328 12476 +3 15751 16031 15790 +3 15929 16865 17022 +3 16929 16927 2500 +3 16254 16181 272 +3 14720 14719 16991 +3 16828 14377 14361 +3 7926 13559 13430 +3 23023 23022 22829 +3 15284 15270 1060 +3 6390 15284 1060 +3 15017 14585 2535 +3 14992 15017 2535 +3 22814 22913 22813 +3 733 4013 734 +3 16539 16546 2549 +3 242 16539 2549 +3 15325 8045 9568 +3 15771 14430 5855 +3 14882 15002 14881 +3 15125 15124 15001 +3 7971 7926 13430 +3 7926 23317 23414 +3 13559 7926 23414 +3 20630 20629 20547 +3 469 14338 0 +3 15390 15371 14330 +3 16507 16663 16662 +3 3609 3608 6402 +3 15410 17134 15396 +3 14465 14464 17125 +3 15127 15126 15003 +3 5058 4126 14751 +3 16208 16209 16354 +3 16355 16508 16507 +3 3170 14536 1287 +3 3091 3090 34203 +3 23013 23014 23111 +3 23112 23210 23209 +3 14917 1416 3961 +3 15296 14633 356 +3 23317 15870 12575 +3 23414 23317 12575 +3 14393 3612 4408 +3 14326 14393 4408 +3 3612 4011 3878 +3 4408 3612 3878 +3 16107 16249 463 +3 15870 16445 16294 +3 474 1416 14917 +3 14897 474 14917 +3 14593 15052 14760 +3 14522 14519 14458 +3 21286 16161 21285 +3 16458 21771 17087 +3 4011 14619 16184 +3 3878 4011 16184 +3 2385 15699 15564 +3 35480 35379 12214 +3 16184 14619 15696 +3 34811 34940 34810 +3 15696 16037 16622 +3 29633 29005 29495 +3 17348 17426 17347 +3 14084 11808 11249 +3 15009 15010 15132 +3 5322 17183 14633 +3 35834 35620 35787 +3 14760 14624 3078 +3 12210 13208 10574 +3 27987 6848 28104 +3 15384 15515 15514 +3 14756 14755 14651 +3 12575 15870 16294 +3 23912 23911 14756 +3 1852 4944 2248 +3 20874 20875 20954 +3 1878 16304 14052 +3 3482 10140 6147 +3 2621 3663 3404 +3 17127 17128 3713 +3 22226 22225 22129 +3 2262 2530 4669 +3 10586 13295 2764 +3 3073 10349 57 +3 1300 16042 701 +3 17109 14325 17028 +3 14643 3739 15953 +3 16700 15308 3742 +3 15367 15366 14322 +3 14329 15367 14322 +3 17152 15793 16323 +3 15793 15224 16323 +3 15816 16363 15935 +3 15817 15816 15935 +3 35366 14166 14175 +3 5465 2358 4137 +3 6249 1212 1211 +3 2897 14429 15973 +3 16538 353 17123 +3 14439 16488 14617 +3 95 1036 503 +3 503 502 2147 +3 14499 14498 14447 +3 14403 14422 14402 +3 5995 304 6792 +3 17150 17134 15410 +3 2102 4252 2101 +3 14996 3192 2928 +3 9177 17158 2785 +3 35768 35946 28991 +3 6646 1852 5470 +3 16991 16828 14361 +3 35398 14276 9633 +3 9574 14565 10617 +3 10649 9689 11196 +3 815 16484 3736 +3 14918 16398 14463 +3 1299 3312 3303 +3 22417 22515 22514 +3 504 26006 733 +3 16546 15544 16384 +3 2549 16546 16384 +3 10965 3866 7422 +3 35562 35625 35642 +3 15002 15125 15001 +3 15252 15251 15124 +3 15511 15510 15379 +3 15380 15511 15379 +3 25800 27084 27062 +3 28357 30075 30071 +3 1640 469 1619 +3 14338 14330 0 +3 14321 14335 24 +3 6011 57 10458 +3 14352 15410 14351 +3 17134 17125 15396 +3 14752 16246 16104 +3 15018 2481 16703 +3 15644 15645 15781 +3 15891 14740 14640 +3 28886 27052 27047 +3 20388 20387 20302 +3 7580 10745 10097 +3 17171 671 5457 +3 3078 15296 356 +3 5221 11973 15060 +3 14476 15959 15223 +3 15010 15133 15132 +3 14425 14426 14451 +3 14388 14405 14404 +3 14452 14503 14502 +3 827 946 14523 +3 22238 22239 16294 +3 14704 2 15395 +3 14461 14715 15105 +3 3961 14461 15105 +3 16445 22238 16294 +3 14604 273 2709 +3 35513 35475 35713 +3 15787 15788 15926 +3 4531 946 827 +3 16947 16943 16781 +3 14533 15661 15654 +3 15063 15096 16696 +3 16702 14391 6988 +3 14402 14401 14384 +3 16696 16702 6988 +3 22239 22238 203 +3 14639 5138 17185 +3 35536 35606 35495 +3 24285 25800 27062 +3 16708 14538 225 +3 4114 17175 17012 +3 17175 2280 5348 +3 14456 14474 433 +3 15384 15383 15255 +3 15256 15384 15255 +3 15865 12378 8567 +3 31330 31397 31396 +3 14816 15434 1446 +3 16949 14640 15752 +3 14513 15500 16185 +3 15045 15297 15169 +3 15323 14142 15324 +3 16299 14045 15466 +3 19206 22948 22050 +3 16937 22460 20143 +3 557 1300 701 +3 16474 557 701 +3 3739 15102 14729 +3 3742 14643 15953 +3 6761 2130 2100 +3 14329 14322 940 +3 15793 17152 4679 +3 3208 2004 15937 +3 16546 17008 15544 +3 15960 15816 15817 +3 15766 15905 15904 +3 14877 2928 7891 +3 17151 1187 15961 +3 3718 1448 6144 +3 16488 14721 14719 +3 17123 14439 14617 +3 3314 8038 10840 +3 7007 7008 1036 +3 11221 9680 11256 +3 1406 914 915 +3 1526 18912 19011 +3 30685 30552 23256 +3 5005 2841 2440 +3 2928 14877 14997 +3 5859 5549 5725 +3 6792 4636 158 +3 5287 5288 5423 +3 35816 11725 35806 +3 4940 2248 4944 +3 5079 4940 4944 +3 20720 20721 20802 +3 13812 13811 10093 +3 13335 13429 14962 +3 23911 14757 14756 +3 5351 734 4013 +3 22319 22320 22416 +3 14975 17151 15961 +3 1187 15658 5549 +3 14457 17154 15658 +3 1187 14457 15658 +3 15125 15252 15124 +3 15252 15380 15379 +3 15180 4017 4126 +3 17178 16829 15354 +3 22519 22518 22420 +3 16163 13338 13433 +3 1640 1619 6 +3 2396 1640 6 +3 14321 6146 14335 +3 15379 15510 15378 +3 941 14352 703 +3 15410 15396 14351 +3 22613 22614 22712 +3 11876 15912 16054 +3 15755 14513 16030 +3 3124 5480 5487 +3 4363 16959 16960 +3 35780 14177 13973 +3 14815 1777 616 +3 3213 14815 616 +3 6014 14749 16548 +3 18793 18792 1459 +3 5079 4944 1974 +3 35650 35554 35754 +3 14651 23912 14756 +3 1660 15017 14992 +3 9741 4364 7878 +3 942 357 3062 +3 14889 14890 15009 +3 15499 16322 17171 +3 23298 23395 23297 +3 356 14633 17183 +3 16740 16898 16739 +3 35796 35541 35463 +3 14784 14900 1533 +3 14671 14670 14578 +3 2751 4235 4369 +3 798 15499 15420 +3 4361 4496 4495 +3 16054 16197 16196 +3 35842 35829 35720 +3 16197 16343 16342 +3 16196 16197 16342 +3 14540 14459 15928 +3 15928 14923 3738 +3 5600 14459 14540 +3 14923 798 3738 +3 1771 5600 14540 +3 14459 14923 15928 +3 16948 16848 14564 +3 2151 4114 17012 +3 17010 17173 76 +3 16186 1295 16688 +3 32145 32144 32047 +3 1184 1185 222 +3 17185 5138 16186 +3 15752 14640 2708 +3 15823 14410 14747 +3 4232 6143 15243 +3 14142 10008 15324 +3 20875 20955 20954 +3 22460 18808 20143 +3 15254 15382 15381 +3 10358 8117 7196 +3 16042 15228 701 +3 5562 11408 10586 +3 15953 3739 14729 +3 15833 16031 15549 +3 2130 14329 940 +3 1060 1272 2395 +3 3208 15937 16629 +3 14188 10682 10559 +3 15544 15960 15817 +3 16941 16951 15434 +3 5456 5321 5050 +3 8000 13090 9773 +3 15286 16637 16329 +3 4104 15974 10985 +3 1295 2939 14336 +3 4800 3997 2124 +3 5724 9689 4940 +3 17030 17194 17193 +3 17029 17030 17193 +3 17194 5007 5005 +3 17193 17194 5005 +3 5007 2842 2841 +3 5005 5007 2841 +3 2842 5081 1974 +3 2841 2842 1974 +3 5081 5213 5079 +3 1974 5081 5079 +3 5075 4940 5079 +3 5213 5075 5079 +3 17158 17159 2785 +3 5075 5724 4940 +3 14585 16398 14918 +3 15174 15173 5059 +3 16016 4065 14841 +3 20548 20630 20547 +3 15961 1187 5549 +3 25273 25272 12058 +3 13108 12282 12287 +3 15544 15817 1071 +3 16237 1305 14979 +3 14457 14825 17154 +3 14753 16390 16246 +3 1305 15613 14979 +3 29564 29547 28307 +3 3880 4923 5625 +3 469 0 1619 +3 2396 6 2354 +3 16337 16489 14396 +3 145 473 9115 +3 941 703 5873 +3 3177 941 5873 +3 2019 501 1895 +3 4259 1736 52 +3 16030 14513 15819 +3 15500 14747 16185 +3 181 1639 19778 +3 96 825 706 +3 15303 6014 2132 +3 15354 14943 15095 +3 4266 19095 4392 +3 16848 4114 2151 +3 359 14899 16026 +3 14702 5600 1771 +3 16343 16496 16495 +3 16342 16343 16495 +3 16496 16652 16651 +3 16495 16496 16651 +3 15420 15499 17171 +3 15044 2502 359 +3 14799 14798 15898 +3 15412 14539 15014 +3 15757 4544 15749 +3 4782 3991 788 +3 14579 14671 14578 +3 14886 14885 14772 +3 3738 798 15420 +3 18565 18662 18564 +3 16811 16810 16651 +3 2502 14899 359 +3 16652 16811 16651 +3 16975 16974 16810 +3 16811 16975 16810 +3 17141 17140 16974 +3 16975 17141 16974 +3 14479 14478 15044 +3 14605 7010 17140 +3 17141 14605 17140 +3 1330 6878 14479 +3 14478 2502 15044 +3 16698 16544 15690 +3 433 16948 14564 +3 17994 18084 17993 +3 18651 19212 18534 +3 1887 16630 16052 +3 16621 16942 15487 +3 16819 16820 16983 +3 311 7035 7036 +3 23606 22139 17447 +3 15500 15823 14747 +3 14412 14727 15480 +3 22034 22130 22033 +3 18084 20643 20561 +3 14727 15755 16030 +3 11221 3072 1293 +3 35867 35884 35563 +3 134 1413 16692 +3 7878 4364 15698 +3 470 17171 5457 +3 19228 4689 4824 +3 35808 21647 35698 +3 15898 15014 1420 +3 1811 1810 1694 +3 16404 5606 16259 +3 16792 16796 14456 +3 14056 11969 14059 +3 11444 16054 16196 +3 15974 16115 10985 +3 16710 16868 16867 +3 11393 6147 11390 +3 16868 17031 17030 +3 16867 16868 17030 +3 17031 17195 17194 +3 17030 17031 17194 +3 17195 5004 5007 +3 17194 17195 5007 +3 5004 2439 2842 +3 5007 5004 2842 +3 2439 4946 5081 +3 2842 2439 5081 +3 4946 4660 5213 +3 5081 4946 5213 +3 4660 783 5075 +3 5213 4660 5075 +3 6011 5724 5075 +3 783 6011 5075 +3 11497 13800 8154 +3 13136 15662 13230 +3 1715 8377 8484 +3 4117 131 298 +3 14371 14386 14370 +3 15081 2767 3038 +3 16384 15544 1071 +3 5591 3717 5725 +3 10348 3073 7967 +3 15817 15935 16515 +3 1774 15180 4126 +3 14658 15483 14457 +3 19447 19144 21943 +3 14752 14753 16246 +3 4933 2396 2354 +3 14976 16175 16212 +3 7812 7587 816 +3 4933 2354 5344 +3 14352 14351 703 +3 9178 9179 9287 +3 6143 15244 15243 +3 35735 35594 35743 +3 500 1178 499 +3 16255 2015 1295 +3 35599 35425 35932 +3 1678 3977 4276 +3 14522 2849 14519 +3 35785 35911 35849 +3 14564 16848 2151 +3 4813 4678 14796 +3 16026 14702 1771 +3 14858 2796 6405 +3 2712 2578 7010 +3 15037 15040 1330 +3 14605 2712 7010 +3 4150 4151 2578 +3 2712 4150 2578 +3 14899 14702 16026 +3 14711 14742 15037 +3 35761 35612 35603 +3 13691 13609 35464 +3 14756 14868 14755 +3 15060 15894 5221 +3 15385 15516 15515 +3 14667 14773 14666 +3 16468 12125 13974 +3 15902 14485 16183 +3 15619 16179 14434 +3 16179 1532 15498 +3 4150 852 853 +3 4151 4150 853 +3 852 4141 5615 +3 853 852 5615 +3 4141 1423 383 +3 5615 4141 383 +3 1423 357 247 +3 383 1423 247 +3 9335 2385 15564 +3 5994 15619 14434 +3 4511 5994 14434 +3 14697 16666 4003 +3 15826 14730 16100 +3 2131 941 3177 +3 17874 17967 17873 +3 16983 16984 17149 +3 14700 15394 4814 +3 15266 3491 14488 +3 20948 23341 18417 +3 16206 16352 16351 +3 16351 16352 16504 +3 16694 4655 15302 +3 19713 17755 19698 +3 15564 15699 15698 +3 16618 13894 14052 +3 15699 15836 15835 +3 15698 15699 15835 +3 15836 15975 15974 +3 15835 15836 15974 +3 15975 16116 16115 +3 15974 15975 16115 +3 16116 16259 16258 +3 16115 16116 16258 +3 25420 15419 14375 +3 16549 16852 291 +3 16404 16556 16555 +3 6387 11154 6386 +3 16556 16711 16710 +3 16555 16556 16710 +3 16711 16869 16868 +3 16710 16711 16868 +3 16869 17032 17031 +3 16868 16869 17031 +3 17032 17196 17195 +3 17031 17032 17195 +3 17196 5008 5004 +3 17195 17196 5004 +3 5008 2573 2439 +3 5004 5008 2439 +3 2573 1379 4946 +3 2439 2573 4946 +3 1379 2629 4660 +3 4946 1379 4660 +3 2629 692 783 +3 4660 2629 783 +3 4905 6011 783 +3 692 4905 783 +3 7 57 6011 +3 4905 7 6011 +3 5755 12836 5754 +3 7 3073 57 +3 14721 1071 16670 +3 16515 17151 14975 +3 11477 31018 31017 +3 16670 16515 14975 +3 1071 15817 16515 +3 12 2764 5561 +3 35929 3735 3178 +3 15935 14658 17151 +3 4017 14753 14752 +3 15251 15252 15379 +3 16213 14976 16212 +3 4126 4017 14752 +3 5208 4933 5344 +3 14976 15889 14939 +3 16237 14979 16238 +3 5208 5344 4923 +3 3177 5873 2530 +3 15141 14623 15478 +3 14929 15818 14727 +3 2262 3177 2530 +3 3977 1895 4276 +3 16187 17009 15828 +3 13876 17184 2308 +3 21281 21282 13985 +3 14783 14796 17112 +3 15959 14613 14541 +3 17554 17466 17467 +3 3072 11221 7967 +3 6878 14478 14479 +3 2796 16544 16698 +3 247 357 2533 +3 15523 14742 14711 +3 942 6522 6523 +3 2533 942 6523 +3 15040 6878 1330 +3 1532 1653 3082 +3 6405 2796 16698 +3 16544 15826 15690 +3 16339 2146 15303 +3 1045 1044 925 +3 15169 15425 15294 +3 14836 16033 5137 +3 16040 15902 16183 +3 17128 17129 2621 +3 16338 16179 15498 +3 15902 16666 14697 +3 1647 18209 18081 +3 14797 5994 4511 +3 6523 6522 1530 +3 2783 5412 2782 +3 17012 17175 5348 +3 15272 25002 15146 +3 19210 18896 21389 +3 21403 14930 15115 +3 17179 14797 16632 +3 17127 16962 17128 +3 14518 15166 14873 +3 16179 16338 14434 +3 15257 15258 15385 +3 4003 14518 14873 +3 16052 14700 4814 +3 15138 3718 1896 +3 18837 18429 19579 +3 9676 20349 3595 +3 15083 9676 15209 +3 18896 17894 21389 +3 16458 23218 21771 +3 16062 16063 16205 +3 3054 23251 12253 +3 9621 9622 9738 +3 16954 15688 7350 +3 35465 35472 35677 +3 15700 15837 15836 +3 15699 15700 15836 +3 15837 15976 15975 +3 15836 15837 15975 +3 15976 16117 16116 +3 15975 15976 16116 +3 16117 16260 16259 +3 16116 16117 16259 +3 16260 16405 16404 +3 16259 16260 16404 +3 16405 16557 16556 +3 16404 16405 16556 +3 16557 16712 16711 +3 16556 16557 16711 +3 16712 16870 16869 +3 16711 16712 16869 +3 16870 17033 17032 +3 16869 16870 17032 +3 17033 17197 17196 +3 17032 17033 17196 +3 17197 5003 5008 +3 17196 17197 5008 +3 5003 2306 2573 +3 5008 5003 2573 +3 2306 226 1379 +3 2573 2306 1379 +3 226 3831 2629 +3 1379 226 2629 +3 3831 3064 692 +3 2629 3831 692 +3 4271 4905 692 +3 3064 4271 692 +3 7199 7 4905 +3 4271 7199 4905 +3 3072 3073 7 +3 7199 3072 7 +3 1285 10972 11344 +3 14649 7692 7801 +3 14386 14403 14385 +3 4527 1620 1601 +3 15905 16045 16044 +3 65 14655 1499 +3 16515 15935 17151 +3 15585 13270 26197 +3 16390 1305 16237 +3 14658 14457 1187 +3 16246 16390 16237 +3 14386 14385 14370 +3 16175 14976 14939 +3 15367 17021 15366 +3 369 5208 4923 +3 16110 16109 16542 +3 6910 1504 6911 +3 14823 15969 15101 +3 3980 2984 2887 +3 15310 4391 15311 +3 1575 4283 4282 +3 15737 15083 15209 +3 1446 16949 15752 +3 14448 14499 14447 +3 6146 16215 5743 +3 12836 5755 11726 +3 17173 14746 76 +3 15755 1887 15500 +3 15690 15826 16100 +3 14669 14775 14668 +3 15657 15523 14711 +3 14730 15357 15611 +3 15498 1532 3082 +3 14742 15040 15037 +3 1653 15523 15657 +3 3082 1653 15657 +3 16100 14730 15611 +3 14477 15391 15611 +3 14656 14761 1897 +3 616 1777 3870 +3 14885 15005 14884 +3 14943 14531 14926 +3 2912 2442 5413 +3 6120 2624 6249 +3 14485 15902 14697 +3 15383 15514 15513 +3 3264 14797 4511 +3 16666 14518 4003 +3 25106 3322 23632 +3 14797 3264 16632 +3 14471 16952 16330 +3 14921 14393 16330 +3 16952 15481 16330 +3 15481 21402 14921 +3 14393 14921 3612 +3 15488 83 15229 +3 17179 16632 15055 +3 15794 14710 3611 +3 15166 15794 5819 +3 15912 11876 12287 +3 79 26 16945 +3 3608 15108 6527 +3 16208 16354 16353 +3 14979 15896 16238 +3 6911 52 1178 +3 14513 16185 15819 +3 15823 1211 1212 +3 35780 14168 35442 +3 20792 20793 20874 +3 2413 15350 14836 +3 30431 30432 30565 +3 1150 16168 14738 +3 15430 15429 16474 +3 15701 15838 15837 +3 15700 15701 15837 +3 15838 15977 15976 +3 15837 15838 15976 +3 15977 16118 16117 +3 15976 15977 16117 +3 16118 16261 16260 +3 16117 16118 16260 +3 16261 16406 16405 +3 16260 16261 16405 +3 16406 16558 16557 +3 16405 16406 16557 +3 16558 16713 16712 +3 16557 16558 16712 +3 16713 16871 16870 +3 16712 16713 16870 +3 16871 17034 17033 +3 16870 16871 17033 +3 17034 17198 17197 +3 17033 17034 17197 +3 17198 5002 5003 +3 17197 17198 5003 +3 5002 2175 2306 +3 5003 5002 2306 +3 2175 1609 226 +3 2306 2175 226 +3 1609 1730 3831 +3 226 1609 3831 +3 1730 5999 3064 +3 3831 1730 3064 +3 4404 4271 3064 +3 5999 4404 3064 +3 58 7199 4271 +3 4404 58 4271 +3 1527 3072 7199 +3 58 1527 7199 +3 13108 12287 13125 +3 1527 1293 3072 +3 14754 14755 14866 +3 20702 23033 20701 +3 17107 5220 16539 +3 15893 5624 14706 +3 16539 16540 16546 +3 16540 17008 16546 +3 17151 14658 1187 +3 17008 15960 15544 +3 15813 13719 13718 +3 2004 15793 4679 +3 17021 16213 16212 +3 35449 35369 35794 +3 16391 15308 16700 +3 17019 17021 16212 +3 14347 14823 15101 +3 1732 16109 16110 +3 16042 14347 15101 +3 14937 16956 16706 +3 16688 1295 14336 +3 15228 16042 15101 +3 13945 1623 13290 +3 16991 14361 16630 +3 14629 13800 16074 +3 14559 14649 14558 +3 16186 16255 1295 +3 2534 14590 14476 +3 16318 16468 15892 +3 14514 7468 15554 +3 14542 15360 16038 +3 14775 14774 14668 +3 15357 14477 15611 +3 16475 14542 16038 +3 14542 16475 15391 +3 14477 14542 15391 +3 16040 16183 16038 +3 15360 16040 16038 +3 15129 15256 15128 +3 14773 14886 14772 +3 15104 14488 16397 +3 15425 15491 15294 +3 14707 14708 14919 +3 14396 1304 4007 +3 15513 15648 15647 +3 15254 15255 15382 +3 14873 15166 5819 +3 1733 3533 14507 +3 1419 15488 1535 +3 83 15055 15229 +3 16953 14921 21313 +3 3612 16953 4011 +3 17348 17280 17349 +3 4011 691 14619 +3 17900 17899 17803 +3 15488 15229 1535 +3 18849 18948 18947 +3 5819 15794 3611 +3 83 17179 15055 +3 15786 15925 15924 +3 14710 1733 14748 +3 24065 26685 27874 +3 14519 15681 65 +3 18637 18735 21026 +3 14666 14665 14573 +3 12387 5561 1328 +3 15253 15254 15381 +3 35485 35636 35444 +3 22221 22317 22220 +3 28704 28836 28703 +3 16015 1564 16937 +3 2400 707 581 +3 15479 5285 5421 +3 8221 9448 10212 +3 6907 9680 1293 +3 15702 15839 15838 +3 15701 15702 15838 +3 15839 15978 15977 +3 15838 15839 15977 +3 15978 16119 16118 +3 15977 15978 16118 +3 16119 16262 16261 +3 16118 16119 16261 +3 16262 16407 16406 +3 16261 16262 16406 +3 16407 16559 16558 +3 16406 16407 16558 +3 16559 16714 16713 +3 16558 16559 16713 +3 16714 16872 16871 +3 16713 16714 16871 +3 16872 17035 17034 +3 16871 16872 17034 +3 17035 17199 17198 +3 17034 17035 17198 +3 17199 5001 5002 +3 17198 17199 5002 +3 5001 2707 2175 +3 5002 5001 2175 +3 2707 2900 1609 +3 2175 2707 1609 +3 2900 6129 1730 +3 1609 2900 1730 +3 6129 5209 5999 +3 1730 6129 5999 +3 4537 4404 5999 +3 5209 4537 5999 +3 84 58 4404 +3 4537 84 4404 +3 3071 1527 58 +3 84 3071 58 +3 183 1293 1527 +3 3071 183 1527 +3 18642 13564 18641 +3 183 6907 1293 +3 276 15325 5566 +3 12832 12831 11799 +3 14538 16708 1287 +3 20307 17608 17704 +3 14396 4007 14872 +3 16192 16337 15437 +3 16829 3208 16629 +3 2004 4679 15937 +3 7092 167 6141 +3 6271 7092 6141 +3 7092 6761 167 +3 6761 2100 167 +3 4139 1732 16110 +3 2130 940 2100 +3 15889 1732 4139 +3 16109 16391 16542 +3 13865 15731 15595 +3 14939 15889 4139 +3 16630 14361 14700 +3 15818 15114 15755 +3 14563 14551 3342 +3 16473 3124 16787 +3 14900 2534 14476 +3 23217 20233 22944 +3 6020 4148 14726 +3 2534 14678 14590 +3 15962 16102 14522 +3 14773 14772 14666 +3 9622 9739 9738 +3 15785 15786 15924 +3 15006 15129 15005 +3 2484 14678 2534 +3 15006 15005 14885 +3 15256 15255 15128 +3 14886 15006 14885 +3 15129 15128 15005 +3 5826 4229 468 +3 15138 1896 14895 +3 16480 14553 1777 +3 14815 16480 1777 +3 16339 613 2146 +3 1774 4126 5058 +3 14748 1733 14507 +3 3533 5196 1415 +3 16393 16249 16779 +3 1419 1535 16779 +3 13273 13178 1758 +3 12722 3075 1065 +3 3486 3487 21682 +3 14451 14452 14502 +3 14503 14582 14581 +3 14502 14503 14581 +3 350 463 16393 +3 16249 248 16779 +3 14413 14898 474 +3 3611 14710 14748 +3 15140 14413 474 +3 14898 16396 1416 +3 35725 24994 27287 +3 15395 15678 14536 +3 5175 14411 16073 +3 15326 15325 9568 +3 6634 6016 3991 +3 15255 15254 15127 +3 5732 1504 6910 +3 28342 28886 27047 +3 13612 14366 14380 +3 3718 6144 1896 +3 35747 14177 35460 +3 15114 16630 1887 +3 141 3482 6147 +3 16196 14082 11723 +3 15703 15840 15839 +3 15702 15703 15839 +3 15840 15979 15978 +3 15839 15840 15978 +3 15979 16120 16119 +3 15978 15979 16119 +3 16120 16263 16262 +3 16119 16120 16262 +3 16263 16408 16407 +3 16262 16263 16407 +3 16408 16560 16559 +3 16407 16408 16559 +3 16560 16715 16714 +3 16559 16560 16714 +3 16715 16873 16872 +3 16714 16715 16872 +3 16873 17036 17035 +3 16872 16873 17035 +3 17036 17200 17199 +3 17035 17036 17199 +3 17200 4864 5001 +3 17199 17200 5001 +3 4864 2047 2707 +3 5001 4864 2707 +3 2047 1096 2900 +3 2707 2047 2900 +3 1096 811 6129 +3 2900 1096 6129 +3 811 5345 5209 +3 6129 811 5209 +3 4670 4537 5209 +3 5345 4670 5209 +3 85 84 4537 +3 4670 85 4537 +3 2383 3071 84 +3 85 2383 84 +3 6135 183 3071 +3 2383 6135 3071 +3 6870 6907 183 +3 6135 6870 183 +3 32 14824 17108 +3 6870 14818 6907 +3 28202 28203 28319 +3 16020 16163 13433 +3 35435 35875 35426 +3 22660 22561 12305 +3 283 738 284 +3 24287 25566 25565 +3 284 6271 283 +3 6271 6141 283 +3 12213 35760 35936 +3 1380 3185 3356 +3 15100 15287 15226 +3 3195 15438 5204 +3 15100 15226 14729 +3 15102 15100 14729 +3 14422 14448 14421 +3 15287 17108 15226 +3 5139 17185 5273 +3 20560 20559 20474 +3 14786 14800 14690 +3 5139 5273 17174 +3 15925 16067 16066 +3 502 501 2019 +3 14613 6020 14726 +3 14678 14690 14590 +3 3736 16797 5473 +3 16333 16484 16483 +3 8243 11222 9802 +3 15438 9452 5204 +3 12387 12 5561 +3 4363 16960 17126 +3 14158 12116 14063 +3 15701 15700 10148 +3 14667 14666 14574 +3 17119 15760 15108 +3 2132 5136 15615 +3 14575 14667 14574 +3 14495 14574 14494 +3 14550 14549 2007 +3 1736 4229 5 +3 6396 2135 6268 +3 14507 3533 1415 +3 6015 1770 1890 +3 248 1419 16779 +3 5196 14413 15140 +3 3075 709 1065 +3 463 16249 16393 +3 14582 14674 14673 +3 260 3325 1567 +3 11887 1890 11971 +3 3796 16947 16781 +3 1326 16944 15617 +3 15617 16944 350 +3 18086 20573 19271 +3 16944 463 350 +3 16396 16634 14461 +3 474 14898 1416 +3 14690 6020 14613 +3 15694 15693 15962 +3 16361 14708 14707 +3 14777 14778 14890 +3 27149 35699 35540 +3 14482 14559 14558 +3 3752 11399 15047 +3 16323 14696 14349 +3 5473 16797 16959 +3 15438 15569 9452 +3 9452 15569 15703 +3 14818 9565 6907 +3 15569 15704 15703 +3 14161 16494 16649 +3 15704 15841 15840 +3 15703 15704 15840 +3 15841 15980 15979 +3 15840 15841 15979 +3 15980 16121 16120 +3 15979 15980 16120 +3 16121 16264 16263 +3 16120 16121 16263 +3 16264 16409 16408 +3 16263 16264 16408 +3 16409 16561 16560 +3 16408 16409 16560 +3 16561 16716 16715 +3 16560 16561 16715 +3 16716 16874 16873 +3 16715 16716 16873 +3 16874 17037 17036 +3 16873 16874 17036 +3 17037 17201 17200 +3 17036 17037 17200 +3 17201 4865 4864 +3 17200 17201 4864 +3 4865 1923 2047 +3 4864 4865 2047 +3 1923 1095 1096 +3 2047 1923 1096 +3 1095 1498 811 +3 1096 1095 811 +3 1498 5479 5345 +3 811 1498 5345 +3 4231 4670 5345 +3 5479 4231 5345 +3 7112 85 4670 +3 4231 7112 4670 +3 182 2383 85 +3 7112 182 85 +3 1528 6135 2383 +3 182 1528 2383 +3 6908 6870 6135 +3 1528 6908 6135 +3 14820 14818 6870 +3 6908 14820 6870 +3 35416 35873 35449 +3 23851 6653 17570 +3 4672 14812 15362 +3 613 1188 1774 +3 14371 14370 14356 +3 18641 13564 21116 +3 17875 17876 17968 +3 14872 4007 1772 +3 8137 9648 9979 +3 20280 21120 21119 +3 16860 16704 16112 +3 15965 16105 16112 +3 15965 15429 15430 +3 975 15965 16112 +3 15429 557 16474 +3 16105 15965 15430 +3 5689 3220 5690 +3 16504 16505 16660 +3 2708 5139 17174 +3 5273 16688 16537 +3 3977 5722 2019 +3 15098 15480 15819 +3 14590 14690 14613 +3 15502 15548 15891 +3 13230 15800 15938 +3 24240 25856 24885 +3 1311 18468 1194 +3 4663 15020 12557 +3 14890 15010 15009 +3 20121 20206 17600 +3 14777 14890 14889 +3 14776 14777 14889 +3 10004 35464 13609 +3 17126 298 4363 +3 14496 14495 14444 +3 29636 29635 29497 +3 251 361 3211 +3 14445 14496 14444 +3 14943 14926 15221 +3 2401 6396 6268 +3 2132 16548 5136 +3 27084 28431 28424 +3 1415 5196 15140 +3 19967 31145 19968 +3 15959 14541 14626 +3 14626 14541 14693 +3 5622 5621 3325 +3 140 6651 352 +3 5622 3217 3216 +3 24031 24030 30624 +3 14613 14726 14541 +3 14449 14448 14422 +3 2 822 15395 +3 15395 822 15678 +3 17119 15108 3608 +3 1416 16396 14461 +3 15896 15095 14508 +3 15693 16102 15962 +3 18647 21040 21041 +3 6264 6392 5597 +3 21755 21862 1034 +3 16462 16025 586 +3 320 6264 5597 +3 17446 33704 22325 +3 15311 15439 15438 +3 15310 15311 15438 +3 15439 15570 15569 +3 15438 15439 15569 +3 15570 15705 15704 +3 15569 15570 15704 +3 15705 15842 15841 +3 15704 15705 15841 +3 15842 15981 15980 +3 15841 15842 15980 +3 15981 16122 16121 +3 15980 15981 16121 +3 16122 16265 16264 +3 16121 16122 16264 +3 16265 16410 16409 +3 16264 16265 16409 +3 16410 16562 16561 +3 16409 16410 16561 +3 16562 16717 16716 +3 16561 16562 16716 +3 16717 16875 16874 +3 16716 16717 16874 +3 16875 17038 17037 +3 16874 16875 17037 +3 17038 17202 17201 +3 17037 17038 17201 +3 17202 4866 4865 +3 17201 17202 4865 +3 4866 2706 1923 +3 4865 4866 1923 +3 2706 1094 1095 +3 1923 2706 1095 +3 1094 3184 1498 +3 1095 1094 1498 +3 3184 5614 5479 +3 1498 3184 5479 +3 4365 4231 5479 +3 5614 4365 5479 +3 7009 7112 4231 +3 4365 7009 4231 +3 6516 182 7112 +3 7009 6516 7112 +3 3606 1528 182 +3 6516 3606 182 +3 7005 6908 1528 +3 3606 7005 1528 +3 35822 35673 35376 +3 16316 5857 7416 +3 20212 20211 20126 +3 3736 16641 16797 +3 14812 5757 15362 +3 16352 16353 16505 +3 17124 14360 17109 +3 5346 14857 14325 +3 16193 14938 14857 +3 14360 5346 14325 +3 16193 16704 16860 +3 5346 16193 14857 +3 16704 975 16112 +3 14938 16193 16860 +3 15003 15126 15002 +3 2535 14918 14800 +3 23251 23349 12253 +3 6146 14598 14335 +3 18181 21062 181 +3 465 2400 581 +3 17174 5273 16537 +3 1504 4259 6911 +3 15269 15268 702 +3 1272 15269 702 +3 14496 14575 14495 +3 15891 15890 14740 +3 15560 402 1877 +3 14889 14888 14775 +3 5138 16255 16186 +3 12780 14910 23393 +3 20127 20212 20126 +3 3400 4133 4412 +3 3073 10348 10349 +3 15774 15913 15912 +3 5322 14633 470 +3 15773 15774 15912 +3 15760 14328 15108 +3 9746 9281 2478 +3 14419 14445 14418 +3 77 3207 16701 +3 15015 475 14799 +3 14508 15221 17119 +3 15661 15677 5083 +3 501 2387 500 +3 15420 17171 470 +3 3869 15420 470 +3 3738 15420 3869 +3 1303 3738 3869 +3 15913 16055 16054 +3 15912 15913 16054 +3 16055 16198 16197 +3 16054 16055 16197 +3 16198 16344 16343 +3 14625 14540 16360 +3 16197 16198 16343 +3 15928 3738 1303 +3 16360 15928 1303 +3 4259 2261 1736 +3 15270 16967 15269 +3 15015 14799 14689 +3 14508 17119 6651 +3 6094 7425 6224 +3 11776 11947 20155 +3 6007 12476 12477 +3 6002 5878 498 +3 15186 15312 15311 +3 5871 10840 8655 +3 15312 15440 15439 +3 15311 15312 15439 +3 15440 15571 15570 +3 15439 15440 15570 +3 15571 15706 15705 +3 15570 15571 15705 +3 15706 15843 15842 +3 15705 15706 15842 +3 15843 15982 15981 +3 15842 15843 15981 +3 15982 16123 16122 +3 15981 15982 16122 +3 16123 16266 16265 +3 16122 16123 16265 +3 16266 16411 16410 +3 16265 16266 16410 +3 16411 16563 16562 +3 16410 16411 16562 +3 16563 16718 16717 +3 16562 16563 16717 +3 16718 16876 16875 +3 16717 16718 16875 +3 16876 17039 17038 +3 16875 16876 17038 +3 17039 17203 17202 +3 17038 17039 17202 +3 17203 4867 4866 +3 17202 17203 4866 +3 4867 2571 2706 +3 4866 4867 2706 +3 2571 1093 1094 +3 2706 2571 1094 +3 1093 329 3184 +3 1094 1093 3184 +3 329 5748 5614 +3 3184 329 5614 +3 4804 4365 5614 +3 5748 4804 5614 +3 4385 7009 4365 +3 4804 4385 4365 +3 3210 6516 7009 +3 4385 3210 7009 +3 214 3606 6516 +3 3210 214 6516 +3 6909 7005 3606 +3 214 6909 3606 +3 9115 473 16316 +3 6909 14827 7005 +3 15835 15974 20 +3 5184 5321 2488 +3 4411 14942 4544 +3 16506 16662 16661 +3 15392 17124 15390 +3 14360 14325 17109 +3 15512 15647 15646 +3 15511 15512 15646 +3 15512 15511 15380 +3 15381 15512 15380 +3 15381 15380 15252 +3 15253 15381 15252 +3 15253 15252 15125 +3 15126 15253 15125 +3 35879 35349 35852 +3 4949 15266 15104 +3 4814 1211 15823 +3 14488 3873 16397 +3 304 5040 17193 +3 5469 3177 2262 +3 16958 16955 15268 +3 15751 15890 15548 +3 14575 14574 14495 +3 15268 15267 6142 +3 6651 3608 3609 +3 352 6651 3609 +3 16634 1771 14625 +3 3873 15622 1186 +3 16344 16497 16496 +3 16343 16344 16496 +3 16653 16652 16496 +3 16497 16653 16496 +3 702 15268 6142 +3 1733 15037 3533 +3 77 352 3207 +3 16548 16701 5136 +3 3492 15015 14896 +3 14450 14501 14449 +3 12286 9518 11076 +3 16167 8000 2253 +3 14710 14711 1733 +3 15037 1330 3533 +3 16812 16811 16652 +3 16653 16812 16652 +3 16976 16975 16811 +3 16812 16976 16811 +3 17142 17141 16975 +3 16976 17142 16975 +3 6879 14605 17141 +3 17142 6879 17141 +3 15794 15657 14710 +3 14711 15037 1733 +3 304 2440 6792 +3 20298 20297 20211 +3 3872 3492 15016 +3 15016 3492 14896 +3 15763 14864 15225 +3 28076 28721 35427 +3 2928 14997 14996 +3 21878 20778 18901 +3 15187 15313 15312 +3 15186 15187 15312 +3 15313 15441 15440 +3 15312 15313 15440 +3 15441 15572 15571 +3 15440 15441 15571 +3 15572 15707 15706 +3 15571 15572 15706 +3 15707 15844 15843 +3 15706 15707 15843 +3 15844 15983 15982 +3 15843 15844 15982 +3 15983 16124 16123 +3 15982 15983 16123 +3 16124 16267 16266 +3 16123 16124 16266 +3 16267 16412 16411 +3 16266 16267 16411 +3 16412 16564 16563 +3 16411 16412 16563 +3 16564 16719 16718 +3 16563 16564 16718 +3 16719 16877 16876 +3 16718 16719 16876 +3 16877 17040 17039 +3 16876 16877 17039 +3 17040 17204 17203 +3 17039 17040 17203 +3 17204 4868 4867 +3 17203 17204 4867 +3 4868 2572 2571 +3 4867 4868 2571 +3 2572 1092 1093 +3 2571 2572 1093 +3 1092 1994 329 +3 1093 1092 329 +3 1994 5881 5748 +3 329 1994 5748 +3 5879 4804 5748 +3 5881 5879 5748 +3 4103 4385 4804 +3 5879 4103 4804 +3 6278 3210 4385 +3 4103 6278 4385 +3 444 214 3210 +3 6278 444 3210 +3 6842 6909 214 +3 444 6842 214 +3 14828 14827 6909 +3 6842 14828 6909 +3 35722 22534 22435 +3 15768 15799 15033 +3 16505 16506 16661 +3 16662 16821 16820 +3 14339 15392 14338 +3 17124 17109 15390 +3 15647 15784 15783 +3 15646 15647 15783 +3 15169 15294 16465 +3 14469 14463 15899 +3 14918 14463 14469 +3 4814 15394 6120 +3 1896 6144 16480 +3 14800 14918 14469 +3 35713 35454 35461 +3 14463 14982 15899 +3 49 2395 1504 +3 3713 2621 3404 +3 29549 29009 27294 +3 16706 16707 16187 +3 15549 15751 15548 +3 15751 15790 14639 +3 4007 15016 4672 +3 2261 702 6142 +3 6651 17119 3608 +3 352 3609 3207 +3 16026 1771 16634 +3 14540 15928 16360 +3 2985 2712 14605 +3 6879 2985 14605 +3 4149 4150 2712 +3 2985 4149 2712 +3 1330 14479 5196 +3 4149 1542 852 +3 3533 1330 5196 +3 14479 15044 14413 +3 16548 77 16701 +3 17112 15615 14759 +3 16645 3872 1304 +3 1304 3872 15016 +3 15279 19094 14583 +3 1213 5321 15687 +3 15166 3082 15794 +3 15657 14711 14710 +3 4150 4149 852 +3 1542 4273 4141 +3 852 1542 4141 +3 10845 7468 11008 +3 4141 4273 1423 +3 823 942 3062 +3 26480 27148 35896 +3 14518 15498 15166 +3 3082 15657 15794 +3 17011 2897 16027 +3 14514 2897 17011 +3 14708 15968 15039 +3 15968 15038 15039 +3 16629 14531 14943 +3 15620 3262 15394 +3 10237 14827 10358 +3 15890 15751 14639 +3 111 23468 23370 +3 32399 32398 32295 +3 15314 15442 15441 +3 25769 25862 24413 +3 15442 15573 15572 +3 15441 15442 15572 +3 15573 15708 15707 +3 15572 15573 15707 +3 15708 15845 15844 +3 15707 15708 15844 +3 15845 15984 15983 +3 15844 15845 15983 +3 15984 16125 16124 +3 15983 15984 16124 +3 16125 16268 16267 +3 16124 16125 16267 +3 16268 16413 16412 +3 16267 16268 16412 +3 16413 16565 16564 +3 16412 16413 16564 +3 16565 16720 16719 +3 16564 16565 16719 +3 16720 16878 16877 +3 16719 16720 16877 +3 16878 17041 17040 +3 16877 16878 17040 +3 17041 17205 17204 +3 17040 17041 17204 +3 17205 4872 4868 +3 17204 17205 4868 +3 4872 2438 2572 +3 4868 4872 2572 +3 2438 2548 1092 +3 2572 2438 1092 +3 2548 1271 1994 +3 1092 2548 1994 +3 1271 5880 5881 +3 1994 1271 5881 +3 5462 5879 5881 +3 5880 5462 5881 +3 5877 4103 5879 +3 5462 5877 5879 +3 6277 6278 4103 +3 5877 6277 4103 +3 2930 444 6278 +3 6277 2930 6278 +3 6843 6842 444 +3 2930 6843 444 +3 14829 14828 6842 +3 6843 14829 6842 +3 21115 18639 18640 +3 8156 7470 11216 +3 16661 16662 16820 +3 5815 5680 5681 +3 585 14339 469 +3 15392 15390 14338 +3 14925 14321 24 +3 15261 15262 19579 +3 15650 15651 15787 +3 15260 15261 15388 +3 15127 15254 15126 +3 20212 20298 20211 +3 15004 15127 15003 +3 15254 15253 15126 +3 613 1774 2146 +3 2146 1774 5058 +3 23243 28886 28342 +3 15932 17152 14712 +3 15251 15379 15378 +3 15250 15251 15378 +3 14639 15790 5138 +3 17022 16254 16255 +3 14896 14689 14812 +3 501 500 1895 +3 15677 5082 5083 +3 1064 4401 4531 +3 16396 16026 16634 +3 1771 14540 14625 +3 359 16026 16396 +3 14898 359 16396 +3 5196 14479 14413 +3 15044 359 14898 +3 14421 14447 14420 +3 14413 15044 14898 +3 1178 52 6002 +3 14385 14402 14384 +3 14421 14420 14401 +3 4280 89 88 +3 15039 15038 16489 +3 15038 16645 16489 +3 2897 15973 16027 +3 16027 15973 14348 +3 16338 15498 14518 +3 16666 16338 14518 +3 35440 34730 35435 +3 8332 10004 13609 +3 18113 823 19602 +3 942 823 6522 +3 35544 35885 35612 +3 823 18113 6647 +3 16338 16666 15902 +3 14434 16338 15902 +3 14709 3081 15370 +3 15973 14435 14348 +3 52 5 6002 +3 15933 15968 14708 +3 15956 7348 7347 +3 14689 14799 14455 +3 20777 20859 20858 +3 33126 33127 7522 +3 15215 3930 16608 +3 9632 10119 4063 +3 35723 35428 35377 +3 15314 15313 1149 +3 15443 15574 15573 +3 15442 15443 15573 +3 15574 15709 15708 +3 15573 15574 15708 +3 15709 15846 15845 +3 15708 15709 15845 +3 15846 15985 15984 +3 15845 15846 15984 +3 15985 16126 16125 +3 15984 15985 16125 +3 16126 16269 16268 +3 16125 16126 16268 +3 16269 16414 16413 +3 16268 16269 16413 +3 16414 16566 16565 +3 16413 16414 16565 +3 16566 16721 16720 +3 16565 16566 16720 +3 16721 16879 16878 +3 16720 16721 16878 +3 16879 17042 17041 +3 16878 16879 17041 +3 17042 17206 17205 +3 17041 17042 17205 +3 17206 4869 4872 +3 17205 17206 4872 +3 4869 1803 2438 +3 4872 4869 2438 +3 1803 2414 2548 +3 2438 1803 2548 +3 2414 1995 1271 +3 2548 2414 1271 +3 1995 2501 5880 +3 1271 1995 5880 +3 5327 5462 5880 +3 2501 5327 5880 +3 5745 5877 5462 +3 5327 5745 5462 +3 3348 6277 5877 +3 5745 3348 5877 +3 573 2930 6277 +3 3348 573 6277 +3 15103 6843 2930 +3 573 15103 2930 +3 14830 14829 6843 +3 15103 14830 6843 +3 20967 20237 19016 +3 2488 1213 2489 +3 15314 25669 15442 +3 35598 35537 35633 +3 3063 585 1640 +3 14339 14338 469 +3 5753 5754 2626 +3 279 174 5754 +3 15270 15269 1272 +3 15651 15788 15787 +3 18808 20409 20407 +3 20383 20382 20297 +3 15351 14437 15352 +3 15922 15923 16064 +3 15434 16949 1446 +3 35455 35414 35704 +3 35517 35457 35591 +3 16065 16208 16207 +3 499 498 1775 +3 14336 15480 15098 +3 5138 17022 16255 +3 7569 1407 9446 +3 2484 14714 14678 +3 2019 1895 3977 +3 14817 2669 15934 +3 2669 16512 16094 +3 33372 33485 33484 +3 15161 15966 15291 +3 14623 15966 15161 +3 3491 15141 15478 +3 14447 14446 14420 +3 14402 14421 14401 +3 1213 1212 2489 +3 14385 14384 14369 +3 35498 30688 17255 +3 16064 16065 16207 +3 6907 9565 6989 +3 16052 4814 15823 +3 16489 16645 1304 +3 16322 671 17171 +3 14435 3081 14709 +3 16361 15933 14708 +3 15498 3082 15166 +3 14348 14435 14709 +3 15349 15612 5283 +3 4511 14434 16040 +3 30699 30833 30698 +3 19280 19281 19387 +3 19819 19651 17943 +3 19179 19283 19282 +3 18976 19077 19076 +3 3264 4511 15360 +3 14434 15902 16040 +3 15370 15501 14994 +3 15501 3209 14994 +3 18912 1526 18913 +3 3662 15933 16361 +3 23394 12780 23393 +3 13715 13812 16235 +3 21022 21021 20938 +3 20776 20777 20858 +3 8010 12307 14072 +3 8010 102 12307 +3 17094 8010 14072 +3 102 13012 12307 +3 15444 15575 15574 +3 15442 25669 15443 +3 15575 15710 15709 +3 15574 15575 15709 +3 15710 15847 15846 +3 15709 15710 15846 +3 15847 15986 15985 +3 15846 15847 15985 +3 15986 16127 16126 +3 15985 15986 16126 +3 16127 16270 16269 +3 16126 16127 16269 +3 16270 16415 16414 +3 16269 16270 16414 +3 16415 16567 16566 +3 16414 16415 16566 +3 16567 16722 16721 +3 16566 16567 16721 +3 16722 16880 16879 +3 16721 16722 16879 +3 16880 17043 17042 +3 16879 16880 17042 +3 17043 17207 17206 +3 17042 17043 17206 +3 17207 4871 4869 +3 17206 17207 4869 +3 4871 1922 1803 +3 4869 4871 1803 +3 1922 2281 2414 +3 1803 1922 2414 +3 2281 11 1995 +3 2414 2281 1995 +3 11 326 2501 +3 1995 11 2501 +3 6635 5327 2501 +3 326 6635 2501 +3 5611 5745 5327 +3 6635 5611 5327 +3 6276 3348 5745 +3 5611 6276 5745 +3 2443 573 3348 +3 6276 2443 3348 +3 4406 15103 573 +3 2443 4406 573 +3 14832 14830 15103 +3 4406 14832 15103 +3 11971 11974 13781 +3 7692 14754 14866 +3 3868 828 6774 +3 828 14557 2268 +3 2531 3063 2396 +3 585 469 1640 +3 1210 1611 2626 +3 1611 5753 2626 +3 5732 49 1504 +3 16489 1304 14396 +3 20266 15879 15880 +3 20143 18808 20407 +3 14363 15351 14350 +3 14645 1897 14834 +3 402 94 1877 +3 1775 25871 25870 +3 13283 35659 3319 +3 20858 20859 20938 +3 23855 35773 35557 +3 35796 29821 35427 +3 16255 16254 2015 +3 15039 16489 16337 +3 15599 21282 9279 +3 17970 17969 17877 +3 20349 2500 3595 +3 15755 15114 1887 +3 1404 6910 2387 +3 1406 225 14538 +3 15221 15760 17119 +3 15478 14623 15161 +3 15964 140 352 +3 21112 21111 21025 +3 15936 16050 14929 +3 14670 14669 14577 +3 20298 20383 20297 +3 14640 5139 2708 +3 1496 1495 6739 +3 5433 16028 5432 +3 1496 8550 9095 +3 14389 25658 25657 +3 500 499 1426 +3 23199 23297 23198 +3 3081 15501 15370 +3 14994 3209 15829 +3 3264 15360 14542 +3 16632 3264 14542 +3 19257 17867 17948 +3 21225 691 16953 +3 17987 18219 18091 +3 14581 14582 14673 +3 16930 13240 25817 +3 16632 14542 14477 +3 15055 16632 14477 +3 3261 14808 17153 +3 3209 2482 15829 +3 5146 14630 18382 +3 14411 3662 16361 +3 7065 11560 33542 +3 14397 3317 11507 +3 21022 21108 21021 +3 20939 21022 20938 +3 34104 21196 21197 +3 21108 21196 21107 +3 17094 14072 16759 +3 16603 17094 16759 +3 15445 15576 15575 +3 15444 15574 15443 +3 15576 15711 15710 +3 15575 15576 15710 +3 15711 15848 15847 +3 15710 15711 15847 +3 15848 15987 15986 +3 15847 15848 15986 +3 15987 16128 16127 +3 15986 15987 16127 +3 16128 16271 16270 +3 16127 16128 16270 +3 16271 16416 16415 +3 16270 16271 16415 +3 16416 16568 16567 +3 16415 16416 16567 +3 16568 16723 16722 +3 16567 16568 16722 +3 16723 16881 16880 +3 16722 16723 16880 +3 16881 17044 17043 +3 16880 16881 17043 +3 17044 17208 17207 +3 17043 17044 17207 +3 17208 4870 4871 +3 17207 17208 4871 +3 4870 2046 1922 +3 4871 4870 1922 +3 2046 2150 2281 +3 1922 2046 2281 +3 2150 5734 11 +3 2281 2150 11 +3 5734 6266 326 +3 11 5734 326 +3 5177 6635 326 +3 6266 5177 326 +3 5476 5611 6635 +3 5177 5476 6635 +3 3481 6276 5611 +3 5476 3481 5611 +3 2931 2443 6276 +3 3481 2931 6276 +3 15263 4406 2443 +3 2931 15263 2443 +3 14833 14832 4406 +3 15263 14833 4406 +3 35429 35461 35505 +3 14833 16257 14832 +3 15659 15899 1524 +3 291 5464 16549 +3 3063 1640 2396 +3 5322 5457 154 +3 29133 30600 23957 +3 1328 1210 2626 +3 15411 17150 15410 +3 11565 14596 11795 +3 17464 17387 17465 +3 16309 20266 15880 +3 16552 15290 14350 +3 14437 14834 15352 +3 6916 7016 7015 +3 1036 7008 1404 +3 16248 16094 5868 +3 16094 15625 5868 +3 16051 16491 16248 +3 5868 15625 14411 +3 15682 14409 15681 +3 15792 14409 15415 +3 14409 15934 15415 +3 15510 15645 15644 +3 3356 3355 251 +3 15625 3662 14411 +3 298 132 4363 +3 5411 14519 65 +3 30219 30220 29429 +3 32667 32666 32553 +3 3069 15936 14929 +3 15763 14556 14864 +3 14554 15265 3076 +3 16050 14720 15818 +3 16115 16258 10985 +3 14475 1877 94 +3 29008 27376 26968 +3 14177 35747 14176 +3 16789 5298 5432 +3 16047 14611 16028 +3 15700 2385 10148 +3 20467 20466 20382 +3 2482 14506 14486 +3 26194 26195 25685 +3 4511 16040 15360 +3 15829 2482 14486 +3 14674 14780 14779 +3 15229 15055 15357 +3 709 4531 6773 +3 3339 13278 22856 +3 260 5622 3325 +3 1065 709 6773 +3 1535 15229 14730 +3 15055 14477 15357 +3 16826 3261 17153 +3 1425 2710 14808 +3 22659 12894 22634 +3 23100 23101 23198 +3 23003 23101 23100 +3 277 9909 16257 +3 23002 23003 23100 +3 23101 23199 23198 +3 27062 27084 28424 +3 28431 30159 30154 +3 16603 16759 15537 +3 15404 16603 15537 +3 15446 15577 15576 +3 15445 15575 15444 +3 15577 15712 15711 +3 15576 15577 15711 +3 15712 15849 15848 +3 15711 15712 15848 +3 15849 15988 15987 +3 15848 15849 15987 +3 15988 16129 16128 +3 15987 15988 16128 +3 16129 16272 16271 +3 16128 16129 16271 +3 16272 16417 16416 +3 16271 16272 16416 +3 16417 16569 16568 +3 16416 16417 16568 +3 16569 16724 16723 +3 16568 16569 16723 +3 16724 16882 16881 +3 16723 16724 16881 +3 16882 17045 17044 +3 16881 16882 17044 +3 17045 17209 17208 +3 17044 17045 17208 +3 17209 4735 4870 +3 17208 17209 4870 +3 4735 2174 2046 +3 4870 4735 2046 +3 2174 2022 2150 +3 2046 2174 2150 +3 2022 2503 5734 +3 2150 2022 5734 +3 2503 1402 6266 +3 5734 2503 6266 +3 1402 2901 5177 +3 6266 1402 5177 +3 5342 5476 5177 +3 2901 5342 5177 +3 6275 3481 5476 +3 5342 6275 5476 +3 301 2931 3481 +3 6275 301 3481 +3 1497 15263 2931 +3 301 1497 2931 +3 14835 14833 15263 +3 1497 14835 15263 +3 16315 16257 14833 +3 14835 16315 14833 +3 7817 10972 8123 +3 16315 277 16257 +3 9793 277 9114 +3 7473 9418 10859 +3 15110 7584 7876 +3 17156 11799 15900 +3 20383 20467 20382 +3 15937 16621 14531 +3 21879 10216 21852 +3 21120 21879 21119 +3 14527 14596 16552 +3 15351 15352 14350 +3 15416 5690 1649 +3 35547 35382 34247 +3 35486 35572 35531 +3 14888 14887 14774 +3 16205 16206 16351 +3 20552 20551 20466 +3 15419 25420 25277 +3 17533 19433 3259 +3 14814 14654 3212 +3 10840 5871 3314 +3 1655 4806 1285 +3 14654 1655 1285 +3 26612 31557 34062 +3 14405 14406 14424 +3 134 788 3991 +3 14062 15638 15774 +3 14834 1897 14724 +3 1413 134 3991 +3 30760 25166 24714 +3 14784 1533 5744 +3 14176 35747 13390 +3 5276 5430 2020 +3 16644 16788 16047 +3 1890 16988 11971 +3 16788 2020 14611 +3 16047 16788 14611 +3 14879 14880 14999 +3 20467 20552 20466 +3 8136 16258 4098 +3 8862 4648 8110 +3 16826 17153 14486 +3 14506 16826 14486 +3 16779 1535 14730 +3 15826 16779 14730 +3 14887 15007 14886 +3 1683 1567 4198 +3 17110 14428 1485 +3 15257 15385 15384 +3 13181 11694 13179 +3 14704 15395 3170 +3 2796 350 16544 +3 16393 16779 15826 +3 14644 2916 5548 +3 3261 1425 14808 +3 28991 35420 35768 +3 14656 9574 7109 +3 30029 30161 30028 +3 586 16025 78 +3 22904 23003 23002 +3 22903 22904 23002 +3 30294 30427 30293 +3 30561 30560 30426 +3 22332 30773 19574 +3 30834 2410 30833 +3 15447 15578 15577 +3 15446 15445 19984 +3 15578 15713 15712 +3 15577 15578 15712 +3 15713 15850 15849 +3 15712 15713 15849 +3 15850 15989 15988 +3 15849 15850 15988 +3 15989 16130 16129 +3 15988 15989 16129 +3 16130 16273 16272 +3 16129 16130 16272 +3 16273 16418 16417 +3 16272 16273 16417 +3 16418 16570 16569 +3 16417 16418 16569 +3 16570 16725 16724 +3 16569 16570 16724 +3 16725 16883 16882 +3 16724 16725 16882 +3 16883 17046 17045 +3 16882 16883 17045 +3 17046 17210 17209 +3 17045 17046 17209 +3 17210 4736 4735 +3 17209 17210 4735 +3 4736 2305 2174 +3 4735 4736 2174 +3 2305 3754 2022 +3 2174 2305 2022 +3 3754 3853 2503 +3 2022 3754 2503 +3 3853 5176 1402 +3 2503 3853 1402 +3 5176 1403 2901 +3 1402 5176 2901 +3 5206 5342 2901 +3 1403 5206 2901 +3 3610 6275 5342 +3 5206 3610 5342 +3 3733 301 6275 +3 3610 3733 6275 +3 1173 1497 301 +3 3733 1173 301 +3 14837 14835 1497 +3 1173 14837 1497 +3 16321 16315 14835 +3 14837 16321 14835 +3 278 277 16315 +3 16321 278 16315 +3 11864 1018 11636 +3 278 145 277 +3 7008 6910 1404 +3 1542 88 4273 +3 13811 16380 10093 +3 17150 14467 17134 +3 2397 2131 5469 +3 25850 25708 2263 +3 16043 15900 14527 +3 15290 14363 14350 +3 6871 15427 15970 +3 11864 13384 16969 +3 20634 20633 20551 +3 16158 16302 1388 +3 33187 33186 33081 +3 35593 35760 35581 +3 15617 350 2796 +3 14858 15617 2796 +3 9679 4920 2021 +3 350 16393 16544 +3 21968 17720 33662 +3 31818 31924 31817 +3 16951 15502 15434 +3 20552 20634 20551 +3 20715 20714 20633 +3 81 3181 27 +3 11562 13956 14248 +3 23733 13624 24524 +3 24088 27018 24464 +3 12831 12739 11795 +3 15901 7220 16644 +3 16041 15901 16644 +3 7220 16950 16788 +3 16644 7220 16788 +3 16950 15493 2020 +3 16788 16950 2020 +3 9288 9289 16831 +3 2020 15493 5276 +3 6502 6375 6376 +3 27786 12440 12529 +3 16049 15908 2710 +3 1425 16049 2710 +3 15229 15357 14730 +3 14814 3212 15908 +3 32752 32864 32863 +3 11377 15159 7347 +3 14062 11639 14061 +3 11222 11223 15769 +3 20412 1150 1144 +3 15638 15775 15774 +3 16544 16393 15826 +3 20634 20715 20633 +3 2098 14428 17110 +3 16945 3127 3593 +3 2248 10649 5470 +3 35794 35549 35608 +3 35198 33666 17453 +3 12170 12088 13179 +3 22705 22706 22804 +3 3196 17083 17007 +3 22805 22904 22903 +3 22804 22805 22903 +3 35626 35353 35376 +3 21739 21833 34754 +3 15448 15579 15578 +3 15447 15448 15578 +3 15579 15714 15713 +3 15578 15579 15713 +3 15714 15851 15850 +3 15713 15714 15850 +3 15851 15990 15989 +3 15850 15851 15989 +3 15990 16131 16130 +3 15989 15990 16130 +3 16131 16274 16273 +3 16130 16131 16273 +3 16274 16419 16418 +3 16273 16274 16418 +3 16419 16571 16570 +3 16418 16419 16570 +3 16571 16726 16725 +3 16570 16571 16725 +3 16726 16884 16883 +3 16725 16726 16883 +3 16884 17047 17046 +3 16883 16884 17046 +3 17047 17211 17210 +3 17046 17047 17210 +3 17211 4734 4736 +3 17210 17211 4736 +3 4734 2437 2305 +3 4736 4734 2305 +3 2437 3753 3754 +3 2305 2437 3754 +3 3753 4942 3853 +3 3754 3753 3853 +3 4942 43 5176 +3 3853 4942 5176 +3 35 1403 5176 +3 43 35 5176 +3 5072 5206 1403 +3 35 5072 1403 +3 3741 3610 5206 +3 5072 3741 5206 +3 403 3733 3610 +3 3741 403 3610 +3 15814 1173 3733 +3 403 15814 3733 +3 14842 14837 1173 +3 15814 14842 1173 +3 16325 16321 14837 +3 14842 16325 14837 +3 16325 173 278 +3 16321 16325 278 +3 173 473 145 +3 278 173 145 +3 8083 9114 7146 +3 13815 13717 13718 +3 1272 702 2261 +3 10210 10209 16532 +3 14365 14364 2131 +3 2397 14365 2131 +3 5544 17156 16043 +3 14596 15290 16552 +3 11215 8998 4235 +3 25112 23676 20755 +3 14755 14754 14650 +3 14651 14755 14650 +3 2482 14615 14506 +3 25015 24207 24778 +3 14380 11507 13860 +3 16514 15159 11377 +3 23405 15042 21047 +3 15775 15914 15913 +3 14777 14776 14670 +3 15774 15775 15913 +3 14541 14604 14693 +3 14671 14777 14670 +3 12282 14062 15774 +3 15694 15962 16794 +3 1295 2015 2939 +3 14499 14578 14498 +3 14397 11507 14380 +3 15550 5701 5834 +3 16793 15903 7220 +3 15901 16793 7220 +3 15903 2133 16950 +3 7220 15903 16950 +3 2133 14526 15493 +3 16950 2133 15493 +3 18690 1455 18788 +3 35600 29544 35719 +3 5294 5276 5428 +3 5701 15550 16793 +3 17239 4066 17238 +3 11643 11565 12650 +3 16049 14814 15908 +3 3929 3925 15343 +3 15223 15959 14626 +3 14828 14829 8117 +3 15914 16056 16055 +3 15913 15914 16055 +3 16056 16199 16198 +3 16055 16056 16198 +3 5606 231 8900 +3 822 15624 15678 +3 17183 1053 188 +3 22317 22414 22316 +3 15344 3929 15343 +3 35740 35559 35890 +3 11694 11618 13179 +3 12088 13181 13179 +3 28424 28431 30154 +3 31789 31788 31688 +3 22607 22706 22705 +3 22606 22607 22705 +3 24296 26678 26679 +3 21652 7293 7291 +3 15449 15580 15579 +3 15448 15449 15579 +3 15580 15715 15714 +3 15579 15580 15714 +3 15715 15852 15851 +3 15714 15715 15851 +3 15852 15991 15990 +3 15851 15852 15990 +3 15991 16132 16131 +3 15990 15991 16131 +3 16132 16275 16274 +3 16131 16132 16274 +3 16275 16420 16419 +3 16274 16275 16419 +3 16420 16572 16571 +3 16419 16420 16571 +3 16572 16727 16726 +3 16571 16572 16726 +3 16727 16885 16884 +3 16726 16727 16884 +3 16885 17048 17047 +3 16884 16885 17047 +3 17048 17212 17211 +3 17047 17048 17211 +3 17212 4733 4734 +3 17211 17212 4734 +3 4733 2173 2437 +3 4734 4733 2437 +3 2173 3884 3753 +3 2437 2173 3753 +3 3884 4807 4942 +3 3753 3884 4942 +3 4807 1168 43 +3 4942 4807 43 +3 3464 35 43 +3 1168 3464 43 +3 4668 5072 35 +3 3464 4668 35 +3 6779 3741 5072 +3 4668 6779 5072 +3 16783 403 3741 +3 6779 16783 3741 +3 16783 14745 15814 +3 403 16783 15814 +3 14745 14843 14842 +3 15814 14745 14842 +3 14843 16326 16325 +3 14842 14843 16325 +3 16326 55 173 +3 16325 16326 173 +3 55 2532 473 +3 173 55 473 +3 2532 4920 16316 +3 473 2532 16316 +3 16327 5428 15543 +3 9768 4368 8998 +3 15418 15411 14364 +3 14365 15418 14364 +3 16214 16071 5544 +3 15900 14596 14527 +3 30984 30983 30925 +3 11215 4235 2751 +3 16046 16045 15906 +3 17552 17553 17646 +3 4924 5059 15173 +3 2015 272 3069 +3 1712 1596 8481 +3 466 2401 2936 +3 16199 16345 16344 +3 16198 16199 16344 +3 16498 16497 16344 +3 15231 5833 5832 +3 16345 16498 16344 +3 14740 14639 17185 +3 16949 15891 14640 +3 3978 3157 4112 +3 14577 14669 14576 +3 15550 17120 16793 +3 16003 16002 25908 +3 13135 13230 13134 +3 16793 17120 15903 +3 35853 35798 35447 +3 35829 35772 35442 +3 16169 14525 14526 +3 2133 16169 14526 +3 14525 14680 15543 +3 14526 14525 15543 +3 14680 587 16327 +3 15543 14680 16327 +3 15734 20327 16168 +3 4233 3845 19308 +3 16549 16853 16852 +3 7164 11556 11630 +3 15296 3869 14633 +3 15014 14539 14704 +3 16654 16653 16497 +3 16498 16654 16497 +3 16813 16812 16653 +3 16654 16813 16653 +3 16433 16432 16287 +3 14624 1303 15296 +3 16955 15548 15502 +3 789 134 188 +3 3929 12826 3925 +3 546 17110 15356 +3 20499 20498 12170 +3 17082 20011 20499 +3 35487 26803 35399 +3 20300 20385 20299 +3 22706 22805 22804 +3 22507 22508 22606 +3 20510 20593 20592 +3 21740 21835 21834 +3 15450 15581 15580 +3 15449 15450 15580 +3 15581 15716 15715 +3 15580 15581 15715 +3 15716 15853 15852 +3 15715 15716 15852 +3 15853 15992 15991 +3 15852 15853 15991 +3 15992 16133 16132 +3 15991 15992 16132 +3 16133 16276 16275 +3 16132 16133 16275 +3 16276 16421 16420 +3 16275 16276 16420 +3 16421 16573 16572 +3 16420 16421 16572 +3 16573 16728 16727 +3 16572 16573 16727 +3 16728 16886 16885 +3 16727 16728 16885 +3 16886 17049 17048 +3 16885 16886 17048 +3 17049 17213 17212 +3 17048 17049 17212 +3 17213 4732 4733 +3 17212 17213 4733 +3 4732 2304 2173 +3 4733 4732 2173 +3 2304 3883 3884 +3 2173 2304 3884 +3 3883 5077 4807 +3 3884 3883 4807 +3 5077 4931 1168 +3 4807 5077 1168 +3 1179 3464 1168 +3 4931 1179 1168 +3 4802 4668 3464 +3 1179 4802 3464 +3 4802 6274 6779 +3 4668 4802 6779 +3 6274 676 16783 +3 6779 6274 16783 +3 676 14509 14745 +3 16783 676 14745 +3 14509 14844 14843 +3 14745 14509 14843 +3 14844 16328 16326 +3 14843 14844 16326 +3 16328 54 55 +3 16326 16328 55 +3 54 2798 2532 +3 55 54 2532 +3 2021 4920 2532 +3 2798 2021 2532 +3 5145 5146 18382 +3 2103 2631 2766 +3 17157 17150 15411 +3 21200 19910 34384 +3 16071 17156 5544 +3 51 358 16214 +3 2308 17184 14629 +3 16102 16101 2849 +3 15766 15767 15905 +3 5964 5832 5833 +3 25851 25850 2263 +3 16513 14609 15968 +3 16360 1303 14624 +3 15052 16360 14624 +3 16977 16976 16812 +3 16813 16977 16812 +3 17143 17142 16976 +3 16977 17143 16976 +3 14715 14625 15052 +3 14625 16360 15052 +3 4689 4825 4824 +3 10454 14830 14832 +3 15020 13087 12993 +3 15550 15231 17120 +3 35382 35547 35921 +3 5290 5291 587 +3 15623 1654 16169 +3 14285 35639 35703 +3 1654 705 14525 +3 16169 1654 14525 +3 705 972 14680 +3 14525 705 14680 +3 972 5205 587 +3 14680 972 587 +3 14583 19094 14675 +3 11154 6387 11026 +3 1376 4414 1610 +3 272 15936 3069 +3 16634 14625 14715 +3 5417 7437 1832 +3 6778 6879 17142 +3 17143 6778 17142 +3 6778 3125 2985 +3 6879 6778 2985 +3 3869 470 14633 +3 3204 17133 16114 +3 20126 20045 17507 +3 6016 16219 1413 +3 9891 16399 14761 +3 20011 20498 20499 +3 35514 35633 35830 +3 6094 8310 7425 +3 18047 11077 19423 +3 20446 17967 20447 +3 22409 22410 22507 +3 22508 22607 22606 +3 21681 19271 20573 +3 20721 20720 20639 +3 21795 15451 15450 +3 15450 15449 15321 +3 15582 15717 15716 +3 15581 15582 15716 +3 15717 15854 15853 +3 15716 15717 15853 +3 15854 15993 15992 +3 15853 15854 15992 +3 15993 16134 16133 +3 15992 15993 16133 +3 16134 16277 16276 +3 16133 16134 16276 +3 16277 16422 16421 +3 16276 16277 16421 +3 16422 16574 16573 +3 16421 16422 16573 +3 16574 16729 16728 +3 16573 16574 16728 +3 16729 16887 16886 +3 16728 16729 16886 +3 16887 17050 17049 +3 16886 16887 17049 +3 17050 17214 17213 +3 17049 17050 17213 +3 17214 4731 4732 +3 17213 17214 4732 +3 4731 2045 2304 +3 4732 4731 2304 +3 2045 3882 3883 +3 2304 2045 3883 +3 3882 4673 5077 +3 3883 3882 5077 +3 4673 1849 4931 +3 5077 4673 4931 +3 1849 2636 1179 +3 4931 1849 1179 +3 2636 4937 4802 +3 1179 2636 4802 +3 4937 3740 6274 +3 4802 4937 6274 +3 3740 16790 676 +3 6274 3740 676 +3 16790 14637 14509 +3 676 16790 14509 +3 14637 14845 14844 +3 14509 14637 14844 +3 14845 16331 16328 +3 14844 14845 16328 +3 16331 56 54 +3 16328 16331 54 +3 3737 2798 54 +3 56 3737 54 +3 15432 2021 2798 +3 3737 15432 2798 +3 13467 13275 16025 +3 1413 16219 16992 +3 15418 17157 15411 +3 14724 16399 15956 +3 17156 15900 16043 +3 17157 14470 14467 +3 15502 15891 16949 +3 16688 14336 15559 +3 23942 19765 21567 +3 1178 6002 499 +3 15933 16513 15968 +3 2943 19801 30154 +3 1303 3869 15296 +3 295 3349 199 +3 3125 4281 4149 +3 17133 5472 16114 +3 2985 3125 4149 +3 4281 4280 88 +3 4149 4281 1542 +3 14084 35797 11808 +3 31009 31070 31008 +3 14441 12293 12377 +3 16218 16824 16987 +3 5424 5289 5205 +3 16824 16534 15623 +3 16987 16824 15623 +3 16534 15232 1654 +3 15623 16534 1654 +3 15232 14524 705 +3 1654 15232 705 +3 14524 15492 972 +3 705 14524 972 +3 35934 35685 35357 +3 972 15492 5205 +3 2104 15173 15182 +3 20797 20796 20714 +3 1492 6797 18283 +3 15926 15927 16068 +3 15034 17133 3204 +3 14461 16634 14715 +3 16258 16259 5606 +3 6911 4259 52 +3 6392 2886 15753 +3 35577 35658 35875 +3 14588 14602 15772 +3 14159 13299 14257 +3 14602 14588 1297 +3 15789 8134 2683 +3 829 14602 1297 +3 14602 15789 15772 +3 9679 2021 9563 +3 16641 16798 16797 +3 16620 23269 22462 +3 20447 20448 20532 +3 16619 16620 22462 +3 6517 211 22462 +3 21495 22344 21687 +3 21780 21495 21687 +3 11770 23551 25961 +3 12992 13086 10447 +3 15583 15718 15717 +3 15582 15583 15717 +3 15718 15855 15854 +3 15717 15718 15854 +3 15855 15994 15993 +3 15854 15855 15993 +3 15994 16135 16134 +3 15993 15994 16134 +3 16135 16278 16277 +3 16134 16135 16277 +3 16278 16423 16422 +3 16277 16278 16422 +3 16423 16575 16574 +3 16422 16423 16574 +3 16575 16730 16729 +3 16574 16575 16729 +3 16730 16888 16887 +3 16729 16730 16887 +3 16888 17051 17050 +3 16887 16888 17050 +3 17051 17215 17214 +3 17050 17051 17214 +3 17215 4730 4731 +3 17214 17215 4731 +3 4730 1921 2045 +3 4731 4730 2045 +3 1921 4015 3882 +3 2045 1921 3882 +3 4015 5078 4673 +3 3882 4015 4673 +3 1169 1849 4673 +3 5078 1169 4673 +3 1169 5747 2636 +3 1849 1169 2636 +3 5747 1523 4937 +3 2636 5747 4937 +3 1523 6401 3740 +3 4937 1523 3740 +3 6401 1410 16790 +3 3740 6401 16790 +3 1410 14991 14637 +3 16790 1410 14637 +3 14853 14845 14637 +3 14991 14853 14637 +3 16340 16331 14845 +3 14853 16340 14845 +3 1189 56 16331 +3 16340 1189 16331 +3 6649 3737 56 +3 1189 6649 56 +3 15562 15432 3737 +3 6649 15562 3737 +3 7343 11377 7347 +3 15562 2016 15432 +3 28991 35946 28590 +3 28070 24203 14358 +3 17150 17157 14467 +3 14470 2413 16174 +3 9079 15455 15435 +3 9676 3595 15209 +3 468 939 4232 +3 13615 15031 8155 +3 15865 16005 14910 +3 20696 22341 22355 +3 14343 14344 14356 +3 16069 1422 246 +3 944 4135 2399 +3 829 1297 4001 +3 14551 15754 6264 +3 3873 15161 15622 +3 16365 13036 13131 +3 3607 9668 347 +3 16218 8870 16824 +3 4018 16667 8870 +3 16667 15626 16534 +3 16824 16667 16534 +3 15626 15051 15232 +3 16534 15626 15232 +3 15051 15632 14524 +3 15232 15051 14524 +3 15632 617 15492 +3 14524 15632 15492 +3 2104 16242 1652 +3 16242 2104 15182 +3 2215 5990 6121 +3 16821 16662 16663 +3 20715 20797 20714 +3 17009 3068 15828 +3 15772 15789 2683 +3 14983 15034 3204 +3 14673 14674 14779 +3 14780 14893 14892 +3 9793 1891 277 +3 14779 14780 14892 +3 20719 20720 20801 +3 14372 14373 14387 +3 1683 260 1567 +3 21111 21110 21024 +3 944 2399 582 +3 2799 944 582 +3 3664 6769 1387 +3 16404 16555 231 +3 23395 15630 23394 +3 15630 15864 15865 +3 23269 6517 22462 +3 1017 36 13473 +3 14628 16849 21569 +3 9644 22528 22527 +3 20776 20858 20857 +3 13473 13377 10447 +3 15584 15719 15718 +3 13177 15582 15451 +3 15719 15856 15855 +3 15718 15719 15855 +3 15856 15995 15994 +3 15855 15856 15994 +3 15995 16136 16135 +3 15994 15995 16135 +3 16136 16279 16278 +3 16135 16136 16278 +3 16279 16424 16423 +3 16278 16279 16423 +3 16424 16576 16575 +3 16423 16424 16575 +3 16576 16731 16730 +3 16575 16576 16730 +3 16731 16889 16888 +3 16730 16731 16888 +3 16889 17052 17051 +3 16888 16889 17051 +3 17216 17215 17051 +3 17052 17216 17051 +3 4729 4730 17215 +3 17216 4729 17215 +3 4729 1802 1921 +3 4730 4729 1921 +3 1802 4014 4015 +3 1921 1802 4015 +3 4014 5347 5078 +3 4015 4014 5078 +3 5347 2613 1169 +3 5078 5347 1169 +3 2613 5613 5747 +3 1169 2613 5747 +3 5613 1641 1523 +3 5747 5613 1523 +3 1641 6400 6401 +3 1523 1641 6401 +3 2932 1410 6401 +3 6400 2932 6401 +3 15137 14991 1410 +3 2932 15137 1410 +3 14855 14853 14991 +3 15137 14855 14991 +3 16357 16340 14853 +3 14855 16357 14853 +3 2014 1189 16340 +3 16357 2014 16340 +3 1764 6649 1189 +3 2014 1764 1189 +3 14734 15562 6649 +3 1764 14734 6649 +3 15888 2016 15562 +3 14734 15888 15562 +3 6640 19107 825 +3 11344 14901 1285 +3 14467 14470 16174 +3 16986 14724 15159 +3 22226 22322 22225 +3 2413 14836 16956 +3 5 4229 5826 +3 15478 15161 3873 +3 22344 22442 21594 +3 53 5 5826 +3 16798 16960 16959 +3 15517 15518 15652 +3 4135 829 4001 +3 16797 16798 16959 +3 15130 15129 15006 +3 387 2799 388 +3 4331 1683 4198 +3 5422 5286 5287 +3 15007 15130 15006 +3 9411 4018 8870 +3 4018 14694 15626 +3 16667 4018 15626 +3 14694 16314 15051 +3 15626 14694 15051 +3 16314 14608 15632 +3 15051 16314 15632 +3 14608 14659 617 +3 15632 14608 617 +3 14659 14803 16048 +3 617 14659 16048 +3 14803 5422 16048 +3 14828 10358 14827 +3 29010 46 23954 +3 5989 5858 3034 +3 8134 15034 14983 +3 2683 8134 14983 +3 5750 387 5751 +3 4135 4001 2399 +3 3590 17029 17193 +3 1720 1602 1620 +3 11494 33542 11560 +3 35921 35637 35905 +3 12438 27786 12528 +3 857 5750 858 +3 15245 14158 14063 +3 16661 16820 16819 +3 15890 14639 14740 +3 15311 4391 4649 +3 11187 228 5044 +3 12780 15630 15865 +3 23101 23102 23199 +3 13472 1017 13473 +3 1017 16620 16619 +3 16962 16961 16800 +3 22838 21780 22259 +3 70 13473 10447 +3 36 13014 13377 +3 15585 15720 15719 +3 15584 15718 15583 +3 15720 15857 15856 +3 15719 15720 15856 +3 15857 15996 15995 +3 15856 15857 15995 +3 15996 16137 16136 +3 15995 15996 16136 +3 16137 16280 16279 +3 16136 16137 16279 +3 16280 16425 16424 +3 16279 16280 16424 +3 16577 16576 16424 +3 16425 16577 16424 +3 16732 16731 16576 +3 16577 16732 16576 +3 16732 16890 16889 +3 16731 16732 16889 +3 16890 17053 17052 +3 16889 16890 17052 +3 17053 17217 17216 +3 17052 17053 17216 +3 17217 4728 4729 +3 17216 17217 4729 +3 4728 1686 1802 +3 4729 4728 1802 +3 4146 4014 1802 +3 1686 4146 1802 +3 5212 5347 4014 +3 4146 5212 4014 +3 5212 4914 2613 +3 5347 5212 2613 +3 4914 5478 5613 +3 2613 4914 5613 +3 5478 6388 1641 +3 5613 5478 1641 +3 6388 3871 6400 +3 1641 6388 6400 +3 2523 2932 6400 +3 3871 2523 6400 +3 2121 15137 2932 +3 2523 2121 2932 +3 14859 14855 15137 +3 2121 14859 15137 +3 16359 16357 14855 +3 14859 16359 14855 +3 1417 2014 16357 +3 16359 1417 16357 +3 1302 1764 2014 +3 1417 1302 2014 +3 14634 14734 1764 +3 1302 14634 1764 +3 14634 141 15888 +3 14734 14634 15888 +3 4328 4327 17245 +3 14761 14656 7108 +3 14724 15956 15159 +3 1212 6249 2489 +3 16174 2413 16956 +3 14836 5137 16707 +3 16941 15434 14816 +3 15509 15510 15644 +3 499 6002 498 +3 4229 939 468 +3 3075 2935 709 +3 14159 15118 15245 +3 5421 14803 15758 +3 17126 4117 298 +3 2684 857 1327 +3 5750 5751 858 +3 15504 15639 15638 +3 27786 12529 12528 +3 15639 15776 15775 +3 15638 15639 15775 +3 14755 14868 10097 +3 14755 10097 14866 +3 4680 15416 16314 +3 14694 4680 16314 +3 15416 1649 14608 +3 16314 15416 14608 +3 1649 16172 14659 +3 14608 1649 14659 +3 16172 15758 14803 +3 14659 16172 14803 +3 15479 5421 15758 +3 8268 11250 11377 +3 18731 22825 22826 +3 11344 7312 9802 +3 16334 21979 1059 +3 35421 35408 35605 +3 2986 2684 3126 +3 2799 582 388 +3 15776 15915 15914 +3 15775 15776 15914 +3 15915 16057 16056 +3 15914 15915 16056 +3 2684 1327 3126 +3 16057 16200 16199 +3 21687 22344 21594 +3 387 388 5751 +3 5428 16327 5293 +3 1639 19594 19778 +3 21049 22356 33807 +3 17608 20307 17607 +3 23200 23298 23297 +3 20940 18536 20941 +3 36 1017 16619 +3 23199 23200 23297 +3 22244 22838 22259 +3 21004 20921 211 +3 13473 36 13377 +3 22341 22244 22259 +3 15585 21005 13270 +3 16619 16618 13014 +3 15858 15857 15720 +3 27755 35699 27870 +3 15858 15997 15996 +3 15857 15858 15996 +3 15997 16138 16137 +3 15996 15997 16137 +3 16138 16281 16280 +3 16137 16138 16280 +3 16281 16426 16425 +3 16280 16281 16425 +3 16426 16578 16577 +3 16425 16426 16577 +3 16578 16733 16732 +3 16577 16578 16732 +3 16891 16890 16732 +3 16733 16891 16732 +3 17054 17053 16890 +3 16891 17054 16890 +3 17054 17218 17217 +3 17053 17054 17217 +3 17218 4601 4728 +3 17217 17218 4728 +3 1570 1686 4728 +3 4601 1570 4728 +3 4145 4146 1686 +3 1570 4145 1686 +3 4145 5481 5212 +3 4146 4145 5212 +3 5481 4671 4914 +3 5212 5481 4914 +3 4671 6150 5478 +3 4914 4671 5478 +3 113 6388 5478 +3 6150 113 5478 +3 6777 3871 6388 +3 113 6777 6388 +3 2659 2523 3871 +3 6777 2659 3871 +3 14638 2121 2523 +3 2659 14638 2523 +3 14860 14859 2121 +3 14638 14860 2121 +3 16364 16359 14859 +3 14860 16364 14859 +3 1301 1417 16359 +3 16364 1301 16359 +3 15486 1302 1417 +3 1301 15486 1417 +3 15486 1776 14634 +3 1302 15486 14634 +3 1776 5087 141 +3 14634 1776 141 +3 10140 11390 6147 +3 5087 3482 141 +3 7966 7849 1158 +3 14285 35703 11236 +3 16956 14836 16707 +3 12394 1065 6139 +3 2135 14550 2007 +3 14622 15138 14895 +3 22415 22513 22512 +3 15731 1388 11257 +3 3662 2612 15933 +3 2935 1064 709 +3 14629 8154 13800 +3 11408 13295 10586 +3 2986 3126 2620 +3 74 2986 2620 +3 16056 16057 16199 +3 16346 16345 16199 +3 16200 16346 16199 +3 16499 16498 16345 +3 4364 7681 4245 +3 5284 5283 5149 +3 35567 35587 35687 +3 4680 974 15416 +3 12132 35784 35886 +3 812 6253 222 +3 14607 15168 16172 +3 1649 14607 16172 +3 15168 5086 15758 +3 16172 15168 15758 +3 5086 15349 15479 +3 15758 5086 15479 +3 7801 8780 7917 +3 12646 1968 1832 +3 791 14536 15678 +3 27060 28375 28374 +3 74 2620 17135 +3 857 858 1327 +3 16346 16499 16345 +3 16655 16654 16498 +3 16499 16655 16498 +3 17136 17135 16969 +3 16814 16813 16654 +3 10148 2385 9335 +3 16970 17136 16969 +3 29769 29768 29635 +3 30159 2943 30154 +3 29636 29769 29635 +3 30643 30638 19801 +3 21301 22629 22431 +3 14252 25394 25389 +3 23395 23394 23297 +3 23004 23102 23003 +3 6517 21004 211 +3 12779 1058 20921 +3 21780 21687 22259 +3 22244 22341 12545 +3 36 16619 13014 +3 16619 22462 13894 +3 31018 11424 31080 +3 35793 1615 35578 +3 33054 33159 33053 +3 33264 33263 33158 +3 16139 16138 15997 +3 15998 16139 15997 +3 16282 16281 16138 +3 16139 16282 16138 +3 16282 16427 16426 +3 16281 16282 16426 +3 16579 16578 16426 +3 16427 16579 16426 +3 16734 16733 16578 +3 16579 16734 16578 +3 16734 16892 16891 +3 16733 16734 16891 +3 17055 17054 16891 +3 16892 17055 16891 +3 17219 17218 17054 +3 17055 17219 17054 +3 17219 4594 4601 +3 17218 17219 4601 +3 4594 2436 1570 +3 4601 4594 1570 +3 2436 4277 4145 +3 1570 2436 4145 +3 5617 5481 4145 +3 4277 5617 4145 +3 5617 4805 4671 +3 5481 5617 4671 +3 1067 6150 4671 +3 4805 1067 4671 +3 2359 113 6150 +3 1067 2359 6150 +3 6399 6777 113 +3 2359 6399 113 +3 6399 2658 2659 +3 6777 6399 2659 +3 2658 1562 14638 +3 2659 2658 14638 +3 1562 14865 14860 +3 14638 1562 14860 +3 14865 16381 16364 +3 14860 14865 16364 +3 16381 1298 1301 +3 16364 16381 1301 +3 1298 15496 15486 +3 1301 1298 15486 +3 15496 5271 1776 +3 15486 15496 1776 +3 5084 5087 1776 +3 5271 5084 1776 +3 10991 3482 5087 +3 5084 10991 5087 +3 35422 35631 35593 +3 15893 5687 17951 +3 5137 17010 17009 +3 11096 2345 9340 +3 14476 14590 15959 +3 2621 123 3663 +3 16472 16473 16787 +3 4546 1874 16072 +3 4414 41 3536 +3 14650 14754 14649 +3 33923 34194 22521 +3 16028 14611 5432 +3 19092 19194 19091 +3 13384 16807 16970 +3 16655 16814 16654 +3 16978 16977 16813 +3 16814 16978 16813 +3 17144 17143 16977 +3 175 176 14067 +3 812 222 706 +3 35640 10488 35617 +3 5690 3220 14607 +3 14596 11643 15290 +3 14754 7692 14649 +3 3220 15911 15168 +3 14607 3220 15168 +3 15911 15264 5086 +3 15168 15911 5086 +3 15264 15612 15349 +3 5086 15264 15349 +3 35669 35744 35613 +3 18717 15927 1386 +3 4117 3536 3664 +3 121 98 21285 +3 5295 5276 5294 +3 17136 74 17135 +3 16978 17144 16977 +3 17144 165 6778 +3 17143 17144 6778 +3 165 2847 3125 +3 5456 15687 5321 +3 18964 19065 19534 +3 29898 29897 29768 +3 33607 33734 33606 +3 2943 30643 19801 +3 20718 20719 20800 +3 18155 18154 18063 +3 14811 16857 15490 +3 23102 23200 23199 +3 22508 22509 22607 +3 21004 12779 20921 +3 12779 20309 20288 +3 13007 22244 12545 +3 21212 1871 9630 +3 16618 16619 13894 +3 211 1878 13894 +3 23296 23295 23197 +3 23001 23002 23099 +3 33159 33264 33158 +3 11424 31018 11475 +3 15999 16140 16139 +3 15998 15999 16139 +3 16283 16282 16139 +3 16140 16283 16139 +3 16428 16427 16282 +3 16283 16428 16282 +3 16580 16579 16427 +3 16428 16580 16427 +3 16735 16734 16579 +3 16580 16735 16579 +3 16893 16892 16734 +3 16735 16893 16734 +3 17056 17055 16892 +3 16893 17056 16892 +3 17220 17219 17055 +3 17056 17220 17055 +3 4595 4594 17219 +3 17220 4595 17219 +3 2172 2436 4594 +3 4595 2172 4594 +3 5626 4277 2436 +3 2172 5626 2436 +3 5616 5617 4277 +3 5626 5616 4277 +3 5616 4538 4805 +3 5617 5616 4805 +3 2381 1067 4805 +3 4538 2381 4805 +3 2381 1156 2359 +3 1067 2381 2359 +3 4004 6399 2359 +3 1156 4004 2359 +3 2794 2658 6399 +3 4004 2794 6399 +3 2794 15627 1562 +3 2658 2794 1562 +3 15627 14874 14865 +3 1562 15627 14865 +3 14874 16402 16381 +3 14865 14874 16381 +3 16402 1181 1298 +3 16381 16402 1298 +3 1181 15520 15496 +3 1298 1181 15496 +3 15520 16845 5271 +3 15496 15520 5271 +3 16845 14599 5084 +3 5271 16845 5084 +3 14599 27 10991 +3 5084 14599 10991 +3 5458 2225 3587 +3 11887 13781 12225 +3 16707 5137 17009 +3 17010 76 3068 +3 12134 12217 15167 +3 15735 20412 1144 +3 14430 16248 15054 +3 14411 16361 16073 +3 15693 15695 16102 +3 20879 20878 20796 +3 35375 35608 35597 +3 16067 16210 16209 +3 13568 13667 13303 +3 11795 11799 12831 +3 6778 165 3125 +3 16701 3207 16547 +3 2847 4280 4281 +3 3125 2847 4281 +3 2748 9654 3962 +3 4281 88 1542 +3 7782 915 914 +3 14720 16991 15114 +3 12221 10574 13208 +3 16164 15344 16022 +3 16161 16458 17087 +3 14706 5624 15911 +3 3220 14706 15911 +3 5624 3494 15264 +3 15911 5624 15264 +3 3494 14595 15612 +3 15264 3494 15612 +3 4391 15310 5333 +3 7966 1158 1275 +3 14580 14581 14672 +3 2778 2777 2642 +3 25658 14389 14373 +3 24662 23491 20904 +3 15887 5279 14630 +3 14763 2709 14438 +3 2261 2129 1736 +3 14893 15013 15012 +3 9452 15703 15702 +3 14581 14673 14672 +3 27142 6536 19243 +3 12142 4418 11561 +3 20801 20883 20882 +3 22029 22125 22124 +3 21024 21023 20940 +3 28729 6874 28730 +3 22608 22707 22706 +3 27142 7400 6536 +3 1058 12779 20288 +3 22607 22608 22706 +3 17106 21212 9630 +3 21067 7064 20727 +3 22462 211 13894 +3 22927 15278 1871 +3 23100 23198 23197 +3 1058 20288 20280 +3 25724 23875 30777 +3 23099 23100 23197 +3 16141 16140 15999 +3 16000 16141 15999 +3 16141 16284 16283 +3 16140 16141 16283 +3 16429 16428 16283 +3 16284 16429 16283 +3 16581 16580 16428 +3 16429 16581 16428 +3 16581 16736 16735 +3 16580 16581 16735 +3 16736 16894 16893 +3 16735 16736 16893 +3 17057 17056 16893 +3 16894 17057 16893 +3 17221 17220 17056 +3 17057 17221 17056 +3 4596 4595 17220 +3 17221 4596 17220 +3 1920 2172 4595 +3 4596 1920 4595 +3 5490 5626 2172 +3 1920 5490 2172 +3 1154 5616 5626 +3 5490 1154 5626 +3 4405 4538 5616 +3 1154 4405 5616 +3 4405 2005 2381 +3 4538 4405 2381 +3 2005 2361 1156 +3 2381 2005 1156 +3 2361 6776 4004 +3 1156 2361 4004 +3 6776 2389 2794 +3 4004 6776 2794 +3 2389 14353 15627 +3 2794 2389 15627 +3 14353 14876 14874 +3 15627 14353 14874 +3 14876 16403 16402 +3 14874 14876 16402 +3 16403 471 1181 +3 16402 16403 1181 +3 471 15542 15520 +3 1181 471 15520 +3 15542 3214 16845 +3 15520 15542 16845 +3 3214 16113 14599 +3 16845 3214 14599 +3 16113 81 27 +3 14599 16113 27 +3 13138 13044 13045 +3 35461 35392 35505 +3 17009 17010 3068 +3 76 51 16473 +3 51 16214 3124 +3 3068 76 16473 +3 3661 3870 14900 +3 16473 51 3124 +3 15054 5868 5175 +3 10023 821 10140 +3 3068 16473 16472 +3 5868 14411 5175 +3 16168 16167 2253 +3 16237 16238 16104 +3 18786 18885 18884 +3 35366 14175 35370 +3 16235 13812 10093 +3 14673 14779 14778 +3 16621 1874 16942 +3 14892 14893 15012 +3 14700 15620 15394 +3 17793 19767 5223 +3 17839 18914 18487 +3 1186 15622 615 +3 8195 6989 9565 +3 16316 7416 9115 +3 35369 35441 35549 +3 4944 693 1974 +3 15893 16553 3494 +3 5624 15893 3494 +3 16553 15887 14595 +3 3494 16553 14595 +3 15887 15748 5279 +3 14595 15887 14630 +3 14501 14502 14580 +3 23206 23205 23107 +3 15012 15013 15135 +3 15276 12362 13847 +3 15095 14943 15221 +3 15013 19434 18526 +3 27525 27496 30638 +3 23108 23206 23107 +3 12962 4418 12142 +3 10237 14820 7005 +3 30352 28430 28310 +3 12803 12962 12142 +3 18635 21025 18634 +3 21934 22029 22028 +3 30643 27525 30638 +3 21026 21025 18635 +3 22707 22806 22805 +3 29498 29636 29497 +3 21067 20727 15196 +3 22706 22707 22805 +3 21212 22927 1871 +3 15195 21067 15196 +3 1058 60 20760 +3 23420 16299 15278 +3 9415 23788 15152 +3 20921 1058 20760 +3 16142 16141 16000 +3 16001 16142 16000 +3 16285 16284 16141 +3 16142 16285 16141 +3 16430 16429 16284 +3 16285 16430 16284 +3 16582 16581 16429 +3 16430 16582 16429 +3 16737 16736 16581 +3 16582 16737 16581 +3 16895 16894 16736 +3 16737 16895 16736 +3 17058 17057 16894 +3 16895 17058 16894 +3 17058 17222 17221 +3 17057 17058 17221 +3 4597 4596 17221 +3 17222 4597 17221 +3 2044 1920 4596 +3 4597 2044 4596 +3 5355 5490 1920 +3 2044 5355 1920 +3 3467 1154 5490 +3 5355 3467 5490 +3 4272 4405 1154 +3 3467 4272 1154 +3 2134 2005 4405 +3 4272 2134 4405 +3 2134 6668 2361 +3 2005 2134 2361 +3 6668 6398 6776 +3 2361 6668 6776 +3 6398 2524 2389 +3 6776 6398 2389 +3 2524 14587 14353 +3 2389 2524 14353 +3 14587 14902 14876 +3 14353 14587 14876 +3 14902 16466 16403 +3 14876 14902 16403 +3 16466 50 471 +3 16403 16466 471 +3 50 16053 15542 +3 471 50 15542 +3 16053 4943 3214 +3 15542 16053 3214 +3 4943 2176 16113 +3 3214 4943 16113 +3 2176 80 81 +3 16113 2176 81 +3 35516 35821 35694 +3 35886 35594 35735 +3 22316 22413 22315 +3 19386 2435 2434 +3 15293 15019 15414 +3 16362 16986 16514 +3 16214 5544 5480 +3 3124 16214 5480 +3 16073 16361 14707 +3 5544 16043 249 +3 14714 14786 14678 +3 6766 2122 3219 +3 2268 2135 6396 +3 14800 14469 6020 +3 16754 25608 25607 +3 13322 14163 16648 +3 19057 19159 19158 +3 2392 15799 15768 +3 12650 12560 11643 +3 14502 14581 14580 +3 16238 15896 140 +3 14887 14886 14773 +3 16533 11969 14056 +3 15753 2934 16549 +3 15921 16063 16062 +3 15920 15921 16062 +3 27525 6656 13056 +3 3855 16382 15356 +3 14647 16850 16553 +3 15893 14647 16553 +3 16850 15748 15887 +3 16553 16850 15887 +3 109 560 200 +3 15748 14532 5278 +3 14450 14451 14501 +3 914 1406 14538 +3 15130 15257 15256 +3 15007 15006 14886 +3 10649 9100 5470 +3 28312 28433 21444 +3 15129 15130 15256 +3 23010 23009 22910 +3 3460 15971 16945 +3 4418 12737 11561 +3 23108 23107 23009 +3 27638 27142 19243 +3 13858 13760 15155 +3 29570 13652 29571 +3 18933 28187 25343 +3 20941 21024 20940 +3 21199 21111 21200 +3 22806 22905 22904 +3 21110 21109 21023 +3 21122 21121 20288 +3 22905 23004 22904 +3 22927 23420 15278 +3 20309 21122 20288 +3 20921 20760 1878 +3 23031 13007 12545 +3 16143 16142 16001 +3 15861 25909 16000 +3 16286 16285 16142 +3 16143 16286 16142 +3 16431 16430 16285 +3 16286 16431 16285 +3 16583 16582 16430 +3 16431 16583 16430 +3 16738 16737 16582 +3 16583 16738 16582 +3 16896 16895 16737 +3 16738 16896 16737 +3 17059 17058 16895 +3 16896 17059 16895 +3 17223 17222 17058 +3 17059 17223 17058 +3 4598 4597 17222 +3 17223 4598 17222 +3 2303 2044 4597 +3 4598 2303 4597 +3 5219 5355 2044 +3 2303 5219 2044 +3 3028 3467 5355 +3 5219 3028 5355 +3 4140 4272 3467 +3 3028 4140 3467 +3 14490 2134 4272 +3 4140 14490 4272 +3 14490 5465 6668 +3 19218 830 831 +3 27617 27734 27616 +3 19295 2050 2179 +3 17456 17457 17544 +3 18190 18227 18002 +3 19324 19441 18148 +3 17727 17726 17631 +3 27496 27525 13056 +3 19726 19839 19838 +3 9002 10589 8895 +3 19889 20068 20147 +3 9182 16672 9181 +3 18680 18681 18778 +3 32010 32009 31908 +3 18239 18276 19253 +3 1577 18893 1576 +3 19614 19615 19725 +3 6522 6647 1647 +3 18292 18385 18291 +3 19732 19845 19731 +3 19286 19287 19393 +3 19858 18711 17991 +3 19592 4152 18403 +3 18146 17963 19122 +3 18331 18316 19151 +3 17914 19889 20066 +3 2655 18796 20232 +3 27734 27849 27848 +3 14594 16964 18310 +3 19501 19611 19610 +3 19391 19392 19500 +3 17920 17919 17823 +3 5986 19628 19932 +3 19833 19834 19947 +3 17825 17921 17824 +3 18983 18984 19084 +3 18758 18857 18856 +3 19952 19953 19065 +3 18958 19059 18957 +3 19222 19750 4873 +3 17432 17431 17353 +3 17353 17352 17284 +3 18388 18483 18482 +3 17709 17805 17708 +3 18757 18758 18856 +3 19187 19291 19290 +3 19498 19608 19607 +3 1308 1309 18563 +3 27379 27378 30553 +3 18677 18678 18775 +3 18796 19434 18649 +3 35807 35715 35825 +3 1809 1928 19092 +3 14894 18649 14893 +3 19500 19501 19610 +3 19611 19722 19721 +3 19610 19611 19721 +3 17647 17742 17741 +3 18839 18939 18288 +3 18265 18767 19090 +3 34135 34273 34134 +3 6656 21746 28989 +3 17709 17708 17613 +3 17805 17804 17708 +3 17614 17613 17519 +3 17614 17709 17613 +3 17520 17519 17431 +3 17520 17614 17519 +3 2959 3099 33469 +3 17432 17520 17431 +3 19305 18410 14594 +3 30219 35496 30220 +3 19278 19296 17560 +3 18584 17951 17891 +3 17951 17295 19023 +3 17560 18584 17891 +3 1575 123 6117 +3 35872 35688 35914 +3 1928 19195 19194 +3 5223 17765 17764 +3 18106 18105 18015 +3 15013 18526 15135 +3 19835 19949 19948 +3 19722 19835 19834 +3 19163 19267 19162 +3 17454 17542 17541 +3 17540 17634 17539 +3 19502 19503 19612 +3 18386 18387 18481 +3 13056 6656 28989 +3 28240 21841 26583 +3 29767 29120 27640 +3 17647 17648 17742 +3 19372 19371 19264 +3 18575 1325 18479 +3 27733 27732 27615 +3 18577 18674 18673 +3 18793 18892 18792 +3 4954 4955 5090 +3 15906 16045 15905 +3 18877 18878 18976 +3 18688 18786 18785 +3 18530 19714 18525 +3 29700 29568 14968 +3 18148 19550 18170 +3 19579 18587 18837 +3 35643 35502 35438 +3 18614 18587 15262 +3 6082 6083 6213 +3 19721 19722 19834 +3 17824 17823 17727 +3 19834 19835 19948 +3 18687 18688 18785 +3 19442 4067 19704 +3 35500 35514 35830 +3 34979 32683 18505 +3 30073 30608 683 +3 17550 17644 17643 +3 17643 17644 17738 +3 19154 18331 19151 +3 18619 2630 19829 +3 17826 17922 17825 +3 19195 19299 19194 +3 17429 17428 17350 +3 1692 18892 18893 +3 18091 18182 19170 +3 18126 19305 710 +3 17825 17824 17728 +3 19078 19180 19179 +3 17548 17549 17642 +3 19532 18236 19925 +3 18781 18782 18880 +3 30073 26685 26519 +3 18429 18837 21964 +3 35507 35452 35448 +3 14586 2082 2802 +3 1427 18565 1311 +3 19552 19442 19870 +3 18429 18913 15519 +3 19949 19326 19883 +3 19948 19949 19883 +3 19222 5009 19531 +3 19267 19266 19162 +3 18661 18759 18660 +3 33823 21455 28585 +3 27631 27630 27512 +3 19834 19948 19947 +3 32745 32857 32744 +3 19045 18945 2013 +3 19584 19592 18265 +3 18887 18886 18787 +3 3665 710 18265 +3 20394 17802 20478 +3 18690 18788 18689 +3 17891 17951 19023 +3 33090 33195 33089 +3 17557 19780 19624 +3 17985 19109 16190 +3 3310 18191 19120 +3 35940 35689 35538 +3 18195 18289 970 +3 1073 1074 18275 +3 29760 29889 29759 +3 18775 18874 18873 +3 31167 31168 31231 +3 35463 35541 35543 +3 19299 2054 2183 +3 35564 35361 35355 +3 19326 18989 17718 +3 18016 18106 18015 +3 19883 19326 17718 +3 19365 3311 19708 +3 18780 18879 18878 +3 19808 18269 18242 +3 19384 18372 18371 +3 17295 19109 19023 +3 19950 19951 18970 +3 19894 18321 18342 +3 18403 3665 18265 +3 18683 18781 18780 +3 17925 18018 17924 +3 18574 19443 19921 +3 1676 1559 1560 +3 18112 18111 18021 +3 17706 17705 17610 +3 17706 17802 17705 +3 17620 363 17619 +3 19109 17985 19023 +3 19225 19324 18182 +3 27631 27748 27630 +3 28232 18691 19792 +3 3097 3096 13120 +3 17752 16801 18496 +3 16801 17908 18058 +3 10859 8156 11216 +3 5456 5050 3312 +3 32943 32944 33049 +3 8306 10859 11216 +3 24713 24750 30490 +3 35539 11314 35799 +3 18989 17567 18088 +3 22326 13562 19683 +3 21312 5489 18300 +3 20410 18097 19241 +3 19368 19384 18371 +3 17735 17736 17831 +3 18150 18818 18493 +3 18766 17943 19862 +3 26697 26698 26809 +3 2811 29081 28946 +3 29785 29786 29914 +3 19942 16596 21287 +3 19484 19531 18381 +3 18679 18777 18776 +3 18626 4152 19592 +3 4686 4687 4822 +3 18973 19074 19073 +3 17611 17706 17610 +3 34153 34152 34016 +3 18582 18679 18678 +3 17358 17436 17435 +3 17357 17358 17435 +3 17436 17524 17523 +3 17435 17436 17523 +3 19052 2145 19051 +3 35393 35548 35575 +3 18893 1577 1693 +3 35423 12049 35708 +3 35395 35689 35940 +3 1795 1914 1794 +3 19255 19256 5542 +3 19612 19613 19723 +3 35610 35485 35444 +3 19537 19761 20901 +3 17524 17618 17617 +3 17523 17524 17617 +3 18904 17798 17723 +3 17832 17928 17927 +3 17517 17516 17428 +3 17517 17611 17516 +3 17429 17517 17428 +3 17611 17610 17516 +3 18013 18103 18012 +3 19330 19484 19468 +3 19076 19077 19178 +3 5894 5760 5761 +3 19125 3755 3887 +3 19083 19185 19184 +3 29915 30046 30045 +3 19210 20810 20023 +3 17618 17713 17712 +3 17617 17618 17712 +3 17713 17809 17808 +3 17712 17713 17808 +3 19732 2579 2714 +3 18435 2407 28549 +3 18717 18896 19210 +3 35371 35856 35906 +3 17894 18896 19112 +3 30635 35802 7082 +3 18972 18973 19073 +3 35770 35683 21647 +3 35642 35805 35391 +3 2448 2315 2449 +3 17809 17905 17904 +3 32843 32842 32730 +3 2013 2141 19045 +3 4266 2256 19095 +3 17831 17832 17927 +3 17723 17752 18496 +3 18582 1216 1332 +3 4593 4727 4592 +3 18788 18787 18689 +3 29106 29105 28970 +3 42 18090 1031 +3 10859 8306 7473 +3 29282 29145 35598 +3 17929 18022 18021 +3 2141 19047 2142 +3 35647 21574 35908 +3 17808 17809 17904 +3 19159 19263 19158 +3 35386 35377 35931 +3 17904 17905 17997 +3 23898 23841 29818 +3 18097 24150 28595 +3 1097 18298 979 +3 3845 3171 5455 +3 18332 18717 18513 +3 18513 19210 23331 +3 11223 7433 15910 +3 18102 18195 851 +3 4334 4468 1522 +3 35475 35454 35713 +3 18873 18972 1795 +3 4200 18724 19704 +3 32403 32402 32299 +3 28971 29106 28970 +3 3845 5455 19308 +3 28842 28975 28841 +3 3268 3129 3269 +3 24614 35870 24613 +3 28361 29634 26592 +3 1794 1793 1677 +3 18112 18022 739 +3 3924 4057 3923 +3 2840 2979 2978 +3 18887 1688 18986 +3 19550 19660 18170 +3 26940 35922 26498 +3 17928 17929 18021 +3 18581 5135 17868 +3 18368 18367 18274 +3 18275 18368 18274 +3 18463 18462 18367 +3 18368 18463 18367 +3 18726 18006 19779 +3 19932 19750 19330 +3 19101 19095 18694 +3 254 17620 17526 +3 20051 18484 18513 +3 19437 16356 16211 +3 711 17905 593 +3 7213 7212 7105 +3 18673 18674 1560 +3 269 379 378 +3 19831 19832 19945 +3 18463 18559 18558 +3 18462 18463 18558 +3 19025 17655 18074 +3 18310 18227 18190 +3 19945 19946 18264 +3 2411 2278 2412 +3 30826 18280 17893 +3 15720 26197 15858 +3 15767 15906 15905 +3 18981 18982 19082 +3 3665 18126 710 +3 18496 18058 17987 +3 19618 19619 19729 +3 18321 19170 18342 +3 18559 18656 18655 +3 19843 19842 19729 +3 18558 18559 18655 +3 18656 18754 18753 +3 18655 18656 18753 +3 18754 18853 18852 +3 583 17930 18126 +3 18580 18677 18676 +3 19274 17998 18139 +3 19214 19274 18139 +3 34845 6974 115 +3 1805 1806 1925 +3 5278 14532 18373 +3 18761 1544 1661 +3 4457 4323 4324 +3 19830 19831 19944 +3 18753 18754 18852 +3 18853 18952 18951 +3 2685 2550 2551 +3 18137 16385 18034 +3 18846 18945 18944 +3 18845 18846 18944 +3 19533 19886 18219 +3 18725 18724 18329 +3 23072 6844 11573 +3 18711 18079 17471 +3 27383 26475 26474 +3 29117 29116 28981 +3 35546 35744 35669 +3 19845 19959 19844 +3 18852 18853 18951 +3 18952 19053 19052 +3 18951 18952 19052 +3 19052 19053 2145 +3 27410 29546 30824 +3 25765 17312 19476 +3 19188 19292 19291 +3 30446 30580 30445 +3 18144 19437 23332 +3 35452 35567 35448 +3 16356 16210 16211 +3 12191 28225 25191 +3 5135 5134 4999 +3 31298 31297 31232 +3 17549 17550 17643 +3 18053 16508 18143 +3 17815 20778 19536 +3 19073 19175 2040 +3 19218 17722 950 +3 18330 19424 19428 +3 25669 15314 13859 +3 18944 18945 19045 +3 3463 558 3044 +3 35677 35472 35398 +3 19181 19285 19284 +3 2152 2284 19267 +3 17963 19439 19940 +3 19480 33927 34470 +3 1090 1089 18289 +3 19053 19155 2145 +3 19941 19781 19770 +3 17960 18629 6255 +3 1172 18615 18908 +3 17383 391 13575 +3 32836 32944 32943 +3 18564 1309 18468 +3 18886 18985 18984 +3 24006 16463 22945 +3 35806 35918 35468 +3 20953 20954 21036 +3 23044 24007 24006 +3 17465 17553 17464 +3 23828 25536 25018 +3 18583 18239 18231 +3 18750 18849 18848 +3 18979 18980 19080 +3 18901 17814 22441 +3 24210 24211 29399 +3 18955 18956 19056 +3 1661 1778 18860 +3 17645 17740 17739 +3 17730 17826 17729 +3 27410 27665 29546 +3 19296 18373 14532 +3 27298 27383 26474 +3 19867 19551 19772 +3 21277 33702 27382 +3 28477 28478 19036 +3 5762 5894 5761 +3 18316 18276 18710 +3 35504 35430 29008 +3 2979 19830 19944 +3 18760 18759 18661 +3 18760 18859 18759 +3 27648 26477 26476 +3 5762 19311 5763 +3 19534 18330 19428 +3 19424 19890 19891 +3 19005 18421 18518 +3 20755 23676 25716 +3 19005 16663 18421 +3 16821 16663 19005 +3 18919 19602 19276 +3 17620 364 363 +3 18581 18583 18231 +3 1331 18678 18677 +3 1193 1194 18468 +3 26476 26477 27315 +3 4593 16385 4727 +3 6263 6267 8634 +3 33332 33331 33226 +3 31646 31557 26612 +3 4194 26089 23238 +3 14733 555 556 +3 23903 28985 23902 +3 2670 28864 3052 +3 4420 4421 4554 +3 26427 27839 26576 +3 27755 27870 27409 +3 3463 3044 1378 +3 19388 19497 19496 +3 18973 18974 19074 +3 18388 18389 18483 +3 19947 19819 17651 +3 4687 4823 4822 +3 4689 4555 4690 +3 19319 18391 14591 +3 3486 17625 3487 +3 19542 19005 19317 +3 20813 19317 18518 +3 2435 19386 19387 +3 19218 831 17722 +3 20644 22834 35561 +3 16211 18332 18484 +3 18227 166 19405 +3 17456 17544 17543 +3 31947 32044 31946 +3 5762 5763 5895 +3 18456 4154 4286 +3 4287 4420 4286 +3 27261 26411 26406 +3 18174 19875 18595 +3 18174 17442 19875 +3 18595 18505 32683 +3 17442 18285 19888 +3 18285 19809 19888 +3 21394 21669 21567 +3 17426 17514 17425 +3 19885 19532 19925 +3 18201 18295 18294 +3 18563 1309 18564 +3 19444 19443 18168 +3 18211 18456 4286 +3 4021 4022 4154 +3 28436 28558 28435 +3 831 832 17766 +3 18036 19542 19317 +3 29282 35598 29556 +3 17791 19542 18036 +3 17799 17791 18036 +3 5818 18495 5949 +3 35772 35829 35672 +3 18627 18530 18525 +3 17736 17737 17832 +3 620 17929 505 +3 16821 17791 16984 +3 29552 29686 30209 +3 18114 19931 19851 +3 19481 19372 2416 +3 28246 28988 7884 +3 17442 19888 19875 +3 17897 19696 18833 +3 17712 17808 17807 +3 19944 18264 3119 +3 17522 17523 17616 +3 17617 17712 17711 +3 8310 5962 9864 +3 17616 17617 17711 +3 18914 18127 18487 +3 19534 19428 19416 +3 18001 19539 3539 +3 17741 394 393 +3 18206 5269 5135 +3 32094 32093 31993 +3 2273 688 9772 +3 29680 30498 30612 +3 19778 17799 18630 +3 378 7435 268 +3 19594 17791 17799 +3 19778 19594 17799 +3 18880 18881 18979 +3 3259 3119 18264 +3 35743 35707 35527 +3 11345 18181 18630 +3 23416 29131 28363 +3 14586 2802 15621 +3 17435 17523 17522 +3 19586 18914 17839 +3 3532 18833 18458 +3 18264 17651 18766 +3 3532 17897 18833 +3 17897 19001 18045 +3 17357 17435 17434 +3 17356 17357 17434 +3 18858 18957 18956 +3 18795 19586 17839 +3 18001 18726 17655 +3 17632 17631 17537 +3 3329 17288 17287 +3 19891 18818 18150 +3 17434 17435 17522 +3 17523 17617 17616 +3 5762 5895 5894 +3 19684 570 4666 +3 29411 21065 27637 +3 27493 27261 26406 +3 17394 19653 180 +3 18273 18274 18367 +3 5892 5759 5760 +3 31689 31789 31688 +3 19539 17655 19025 +3 29889 30020 29888 +3 17648 7114 7221 +3 19081 19183 19182 +3 17466 17465 17387 +3 16333 16189 21979 +3 21009 27981 20926 +3 30834 30833 30699 +3 35515 35763 35891 +3 18457 3532 18458 +3 35809 35635 35797 +3 19374 19483 2416 +3 35787 35680 35551 +3 19395 19396 19504 +3 19294 19401 19293 +3 35745 35525 35552 +3 17753 19742 17934 +3 31511 31510 31438 +3 28558 28687 28686 +3 19618 19729 19728 +3 18457 18458 19809 +3 18285 18457 19809 +3 31066 31067 31128 +3 35463 35543 35567 +3 18845 18746 21214 +3 35619 35427 6862 +3 1559 1443 18673 +3 6529 21840 29079 +3 1560 18674 18772 +3 19922 17866 18669 +3 18859 18858 18759 +3 35522 25265 35900 +3 17734 17733 17638 +3 1217 1333 1332 +3 18482 18483 18578 +3 96 6640 825 +3 12052 12134 15167 +3 17658 3660 19880 +3 18883 18884 18982 +3 19042 2009 18940 +3 18687 18785 18784 +3 18660 18758 18757 +3 17654 17753 17934 +3 17729 17825 17728 +3 18329 1522 19586 +3 17921 17920 17824 +3 18977 19078 19077 +3 19862 18490 17654 +3 18105 18104 18014 +3 32900 32899 32787 +3 19696 17897 18045 +3 35747 35844 35639 +3 19492 19382 17757 +3 35861 35590 35574 +3 17394 19528 19382 +3 19492 17394 19382 +3 23839 170 23897 +3 28813 28814 30474 +3 19225 19333 19324 +3 17394 180 19528 +3 18451 19628 5986 +3 17638 17733 17637 +3 17948 17867 19298 +3 17934 19742 19922 +3 18659 18660 18757 +3 18686 18687 18784 +3 18785 18884 18883 +3 18982 18983 19083 +3 18784 18785 18883 +3 18767 18310 18233 +3 19284 19285 19391 +3 19499 19500 19609 +3 18201 18202 18295 +3 31509 31596 31508 +3 19111 19870 18434 +3 19267 19163 2152 +3 2984 19861 19319 +3 19299 2183 19406 +3 19154 19151 17963 +3 18711 17471 17991 +3 19844 19958 19843 +3 19826 19492 18169 +3 18169 17757 20059 +3 19653 17394 19492 +3 19826 19653 19492 +3 3361 181 180 +3 132 2126 799 +3 18881 18882 18980 +3 18761 18860 18760 +3 19837 19951 19950 +3 17826 17827 17922 +3 1214 18580 18483 +3 17723 18496 18591 +3 19060 19059 18958 +3 19499 19609 19608 +3 18884 18983 18982 +3 18957 19058 18956 +3 1307 1191 1308 +3 19391 19500 19499 +3 18678 18776 18775 +3 30152 30151 30019 +3 29552 29551 19141 +3 1336 18686 1335 +3 18276 18316 19255 +3 19624 19585 17866 +3 17866 19941 18669 +3 19090 18233 19333 +3 20430 20091 27265 +3 18014 18013 17920 +3 18988 18169 21325 +3 28191 35600 35721 +3 17717 19826 18988 +3 19414 17717 18988 +3 17395 19653 19826 +3 17717 17395 19826 +3 7114 17554 17467 +3 17395 4133 19653 +3 17728 17727 17632 +3 18269 19442 18114 +3 17923 18016 18015 +3 19584 18265 19090 +3 35835 35938 35366 +3 710 14594 18767 +3 19819 19883 19651 +3 35695 35556 35577 +3 18818 18591 18098 +3 19086 19087 19188 +3 18983 19084 19083 +3 15330 16296 14743 +3 2780 2310 2778 +3 19189 19190 19293 +3 1441 1324 1325 +3 19390 19391 19499 +3 18216 18338 17941 +3 18389 1097 1098 +3 17468 19867 19064 +3 17468 19064 18917 +3 21492 18308 19412 +3 18335 21582 19016 +3 19020 19414 18992 +3 18335 19020 18992 +3 17960 17717 19414 +3 19020 17960 19414 +3 1214 18389 1098 +3 32681 28876 17535 +3 35878 35416 35767 +3 3193 13283 12724 +3 18106 18199 18105 +3 18199 18293 18198 +3 19643 17798 18904 +3 17798 17752 17723 +3 19184 19185 19288 +3 19182 19183 19286 +3 17551 17552 17645 +3 18860 18859 18760 +3 17943 18490 19862 +3 19219 19225 18315 +3 17451 17452 17539 +3 19189 19293 19292 +3 18942 18943 19043 +3 2644 2780 2778 +3 24333 14521 24249 +3 1206 1205 1090 +3 31998 31997 31896 +3 4323 4190 4191 +3 28548 28678 30332 +3 31439 31511 31438 +3 24913 24162 26601 +3 17932 4378 17530 +3 18039 17468 18917 +3 19867 19772 19064 +3 19752 18335 19435 +3 20237 19435 19016 +3 19276 19020 18335 +3 19752 19276 18335 +3 18629 17960 19020 +3 19276 18629 19020 +3 15748 5278 5279 +3 32856 32855 32743 +3 18857 18858 18956 +3 19585 18042 19781 +3 17824 17920 17823 +3 19398 19399 19507 +3 19781 17624 18627 +3 18054 18145 19305 +3 269 17630 380 +3 19222 19531 19484 +3 18126 18054 19305 +3 18018 18017 17924 +3 34003 34139 34002 +3 18527 19532 19885 +3 19183 19287 19286 +3 17921 18014 17920 +3 19390 19499 19498 +3 17829 17828 17732 +3 18012 18011 17918 +3 19608 19609 19719 +3 17548 17642 17641 +3 18680 18778 18777 +3 21363 21274 27381 +3 17823 17919 17822 +3 35538 11411 10603 +3 18467 17557 17753 +3 19330 19222 19484 +3 35779 30220 35516 +3 18129 19438 19419 +3 32402 32507 32401 +3 17886 20373 17979 +3 17359 17358 17290 +3 34017 34153 34016 +3 17359 17437 17436 +3 17358 17359 17436 +3 16643 18834 18338 +3 148 17439 149 +3 34277 34276 34138 +3 17452 17540 17539 +3 30924 30923 30869 +3 26915 28076 29821 +3 18039 18917 17659 +3 19775 18039 17659 +3 32685 17396 32570 +3 19775 17659 4378 +3 147 21670 21492 +3 17932 19775 4378 +3 35648 5560 35392 +3 18646 18744 18743 +3 19423 19752 19435 +3 18047 19423 22160 +3 18919 19752 19423 +3 11077 18919 19423 +3 35899 35836 35622 +3 35400 11867 35528 +3 19800 30555 30553 +3 34549 34548 34411 +3 17552 17551 17463 +3 18922 19229 19863 +3 28819 28952 28818 +3 33505 33504 33391 +3 17437 17525 17524 +3 17436 17437 17524 +3 17525 17619 17618 +3 17524 17525 17618 +3 35829 35931 35672 +3 18331 19257 19256 +3 17618 17619 17713 +3 17120 3070 15903 +3 16963 18329 18795 +3 18145 18146 18410 +3 18371 18372 19278 +3 19742 19624 17866 +3 19296 18584 17560 +3 18104 18103 18013 +3 18265 710 18767 +3 19719 19832 19831 +3 18192 18099 460 +3 18410 19122 16964 +3 18859 18958 18858 +3 19334 19333 19225 +3 19318 17854 18920 +3 19925 18236 18399 +3 19646 18904 19424 +3 19770 18627 19654 +3 4554 16170 18594 +3 19083 19084 19185 +3 18627 18525 19654 +3 18976 18977 19077 +3 5068 1756 18864 +3 17905 711 17997 +3 18329 19586 18795 +3 18143 16356 18144 +3 17631 17726 17630 +3 18990 19091 1806 +3 4999 17868 5135 +3 27758 684 28611 +3 18269 3933 19442 +3 18368 18275 1190 +3 18216 17941 19532 +3 23712 12419 12333 +3 18527 18216 19532 +3 18142 18961 5493 +3 1331 18580 1214 +3 18464 18463 18368 +3 5145 19606 5010 +3 18560 18559 18463 +3 18464 18560 18463 +3 18560 18657 18656 +3 18559 18560 18656 +3 18657 18755 18754 +3 18767 14594 18310 +3 18108 18201 18200 +3 17547 17546 17458 +3 27956 26915 29821 +3 19261 2412 2278 +3 19287 19394 19393 +3 18917 18094 17660 +3 4378 17659 19864 +3 17718 18088 18467 +3 505 621 620 +3 18742 18645 18743 +3 19779 18006 19818 +3 29553 27783 35733 +3 35732 35906 35776 +3 19336 11077 18402 +3 18220 19336 18402 +3 18113 18919 11077 +3 19336 18113 11077 +3 18079 3407 3539 +3 18113 19602 18919 +3 18079 3539 19539 +3 394 509 508 +3 35545 35424 35534 +3 19058 19057 18956 +3 19085 19086 19187 +3 18656 18657 18754 +3 18755 18854 18853 +3 18754 18755 18853 +3 18854 18953 18952 +3 18853 18854 18952 +3 28102 28219 28076 +3 18953 19054 19053 +3 19886 18315 18219 +3 17635 17634 17540 +3 19194 19092 1928 +3 18058 19533 18219 +3 18682 18683 18780 +3 17987 18058 18219 +3 7917 11502 14558 +3 18022 18112 18021 +3 19656 3860 3965 +3 19660 19885 19714 +3 20313 18430 3589 +3 28753 11405 7287 +3 4935 15753 2886 +3 29134 28753 28621 +3 18680 1332 18681 +3 14970 7184 7187 +3 18317 18223 33804 +3 2778 2643 2644 +3 26915 28102 28076 +3 28733 30771 28729 +3 18603 4153 19117 +3 19518 18603 19117 +3 17296 18336 4153 +3 18603 17296 4153 +3 18373 18381 5278 +3 30459 30458 30325 +3 19504 19505 19614 +3 19624 18130 19585 +3 17305 27141 28219 +3 33830 21279 21280 +3 3130 3269 3129 +3 18372 18373 19296 +3 18952 18953 19053 +3 19946 17651 18264 +3 19054 19156 19155 +3 19053 19054 19155 +3 22835 35859 35901 +3 2412 19369 33942 +3 28102 17305 28219 +3 1031 18090 17817 +3 17365 18357 1268 +3 19609 19720 19719 +3 19387 19388 19496 +3 19718 19831 19830 +3 19176 19177 19280 +3 2705 2570 19607 +3 19075 19177 19176 +3 19281 19388 19387 +3 19074 19075 19176 +3 19468 18373 18372 +3 19177 19281 19280 +3 19259 18369 19154 +3 17651 17943 18766 +3 19258 19935 17867 +3 18145 19259 18146 +3 19117 19274 18223 +3 13311 33804 18223 +3 823 3062 19602 +3 19117 4153 17998 +3 19141 2136 27141 +3 27296 27285 26470 +3 18430 20314 19254 +3 19254 19641 19645 +3 19041 18220 19254 +3 19645 19041 19254 +3 18209 19336 18220 +3 19041 18209 18220 +3 29009 18435 28549 +3 3669 3670 3801 +3 28307 27410 30824 +3 20024 19437 18484 +3 35845 26586 27027 +3 18451 4468 4469 +3 19424 18904 19890 +3 17833 17834 17929 +3 17926 18019 17925 +3 18490 18467 17753 +3 4154 4287 4286 +3 18130 18042 19585 +3 17717 6255 17395 +3 17538 17632 17537 +3 17633 17632 17538 +3 18745 18647 18746 +3 17866 19585 19941 +3 18970 18964 2266 +3 16984 17791 19594 +3 18110 18203 18109 +3 33173 33278 33172 +3 21037 18743 18645 +3 684 18617 28985 +3 18799 19702 7068 +3 18745 18844 18843 +3 33266 33265 33160 +3 24622 26718 25770 +3 35738 35663 35549 +3 20052 21141 27146 +3 31274 19970 31209 +3 22763 22764 22863 +3 6898 11454 19034 +3 31736 31735 31640 +3 18712 21944 2409 +3 6151 6856 22326 +3 30165 30298 30297 +3 30313 30312 30179 +3 20926 20927 21009 +3 21658 26738 26717 +3 29630 19494 17305 +3 27054 28360 28359 +3 17438 148 17526 +3 28575 28704 28574 +3 19406 2182 19299 +3 18247 19759 4683 +3 23778 24744 28884 +3 30580 30714 30579 +3 18020 18110 18019 +3 18203 18202 18109 +3 17733 17732 17637 +3 17951 1069 14647 +3 17305 19141 27141 +3 18088 19780 17557 +3 18330 19646 19424 +3 19285 19392 19391 +3 19503 19504 19613 +3 19614 19725 19724 +3 19107 6640 18998 +3 35755 35382 35792 +3 19774 19111 18626 +3 29551 27177 2136 +3 35896 35510 35544 +3 18662 18661 18564 +3 19077 19078 19179 +3 17829 17925 17828 +3 3188 1031 17817 +3 17638 17637 17543 +3 18054 19260 19259 +3 17544 17638 17543 +3 2979 2840 19830 +3 18269 18114 18242 +3 18991 19092 18990 +3 18316 19256 19255 +3 17827 17923 17922 +3 35625 35765 35805 +3 7641 7527 11811 +3 35816 35468 35575 +3 17616 17711 17710 +3 17807 17806 17710 +3 17522 17616 17615 +3 17615 17616 17710 +3 17612 17707 17611 +3 17521 17522 17615 +3 17803 17802 17706 +3 17707 17803 17706 +3 4603 19628 18451 +3 17312 25765 21290 +3 28624 28612 27285 +3 2316 2451 2450 +3 19642 19641 21593 +3 18681 18682 18779 +3 17366 19041 19645 +3 19757 17366 19645 +3 18081 18209 19041 +3 17366 18081 19041 +3 19141 29551 2136 +3 35590 35477 35409 +3 17369 35193 7213 +3 3178 35383 35375 +3 17464 17552 17463 +3 26679 26680 24295 +3 19780 18130 19624 +3 19151 18316 18710 +3 14594 18410 16964 +3 1442 1441 1325 +3 17434 17522 17521 +3 18576 18577 18673 +3 32835 32836 32943 +3 19959 2850 2989 +3 18202 18203 18296 +3 19860 19552 19111 +3 18943 19044 19043 +3 19256 19257 17948 +3 18744 18745 18843 +3 18844 18943 18942 +3 18842 18843 18941 +3 18843 18844 18942 +3 18744 18843 18842 +3 18743 18744 18842 +3 7222 17743 7221 +3 18843 18942 18941 +3 19043 19042 18941 +3 18942 19043 18941 +3 31051 31050 30989 +3 25425 29832 25040 +3 25288 26225 26699 +3 17893 2540 2406 +3 30188 30187 30055 +3 30825 17893 22424 +3 7192 27959 30807 +3 31554 31641 31553 +3 688 686 7410 +3 7409 6873 6780 +3 28678 19558 28810 +3 19559 21658 26717 +3 6856 13562 22326 +3 30726 30727 6151 +3 26828 27873 19791 +3 21239 21327 21241 +3 19595 15897 19898 +3 30351 17269 17667 +3 35605 35883 35741 +3 19508 19509 19618 +3 18369 19258 18331 +3 17934 19922 3792 +3 17546 17547 17640 +3 1335 18684 1334 +3 4152 16963 19920 +3 18961 5359 5493 +3 35630 35399 35456 +3 18525 19925 19654 +3 18785 18786 18884 +3 19088 19190 19087 +3 28742 28482 27177 +3 17925 17924 17828 +3 17286 3329 17287 +3 17356 17434 17433 +3 18574 19860 19774 +3 16963 18795 19920 +3 17732 17731 17636 +3 27780 30346 35533 +3 18434 18725 16963 +3 18776 18777 18875 +3 17728 17824 17727 +3 26685 24066 26519 +3 18580 1331 18677 +3 29551 28742 27177 +3 18950 19051 19050 +3 18654 18752 18751 +3 18556 18557 18653 +3 14818 8562 8577 +3 27849 27965 27964 +3 18557 18556 18460 +3 1339 18690 1338 +3 17729 17728 17633 +3 19953 19954 19119 +3 19646 19643 18904 +3 18366 18461 18365 +3 35671 35524 35641 +3 1524 460 18099 +3 18109 18202 18201 +3 19438 17868 19419 +3 17807 17903 17806 +3 5541 5540 19253 +3 18196 18290 18195 +3 18685 18686 18783 +3 19508 19618 19617 +3 19507 19508 19617 +3 18137 19419 16385 +3 27406 27142 27638 +3 17867 19300 19298 +3 19628 19750 19932 +3 19617 19728 19727 +3 18145 18054 19259 +3 19402 19401 19294 +3 18893 18892 18793 +3 1926 19194 2051 +3 28742 19131 29292 +3 18948 19049 19048 +3 7674 155 93 +3 361 250 6148 +3 18399 4324 4191 +3 19278 17560 18077 +3 19832 19946 19945 +3 18555 17366 19757 +3 19645 20397 19757 +3 19513 18081 17366 +3 18555 19513 17366 +3 2416 19266 19374 +3 2179 2180 2311 +3 22528 22627 22527 +3 28427 35887 35721 +3 35745 35552 35651 +3 17738 17739 17834 +3 18782 18881 18880 +3 19265 19372 19264 +3 25265 25408 25407 +3 2316 2450 2315 +3 19931 18151 19625 +3 17433 17434 17521 +3 19274 19117 17998 +3 19839 19953 19952 +3 17659 18917 17660 +3 18676 18677 18774 +3 381 17726 17822 +3 19064 18305 18094 +3 33161 33266 33160 +3 35363 19246 35415 +3 19403 19735 19209 +3 26415 29077 30804 +3 18772 18773 18871 +3 1756 5068 1755 +3 18978 18979 19079 +3 19192 19894 17624 +3 18675 18773 18772 +3 18042 19192 17624 +3 19921 19443 18515 +3 148 17438 17439 +3 18979 19080 19079 +3 18088 17567 19780 +3 3924 18669 4058 +3 19770 19654 4191 +3 17369 7213 7105 +3 18192 460 19823 +3 19280 19387 19386 +3 7000 7103 6999 +3 18574 19774 19443 +3 17727 17823 17726 +3 35906 35599 35776 +3 28482 28742 29292 +3 19735 18908 19209 +3 19160 19159 19057 +3 35577 35350 35658 +3 18005 19735 19403 +3 26426 30351 17667 +3 17659 17660 19864 +3 19288 19289 19395 +3 4378 19864 17999 +3 19619 19730 19729 +3 18105 18198 18104 +3 19935 19318 19300 +3 18016 18017 18106 +3 30876 30875 26349 +3 16068 18717 18332 +3 17634 17729 17633 +3 18565 18564 18468 +3 627 512 628 +3 19885 19925 18525 +3 33050 33155 33049 +3 19187 19188 19291 +3 18170 19660 19714 +3 17355 17356 17433 +3 18626 18434 4152 +3 19111 18434 18626 +3 18434 16963 4152 +3 19718 19830 2705 +3 18949 18950 19050 +3 13123 14331 14340 +3 18851 18950 18949 +3 13123 14340 5053 +3 18653 18654 18751 +3 18850 18851 18949 +3 18752 18851 18850 +3 18751 18752 18850 +3 19258 19257 18331 +3 18369 18331 19154 +3 18461 18557 18460 +3 19305 18145 18410 +3 18365 18272 18366 +3 18557 18654 18653 +3 19283 19390 19389 +3 18461 18460 18365 +3 19131 21289 46 +3 12353 27672 27786 +3 18726 19851 18006 +3 19957 17991 19956 +3 17903 17996 17995 +3 19259 19154 18146 +3 17711 17807 17710 +3 17902 17903 17995 +3 17288 17356 17355 +3 17903 17902 17806 +3 17720 21968 5691 +3 19287 19288 19394 +3 11435 33541 11493 +3 19088 19087 18986 +3 29292 19131 46 +3 22246 13082 29687 +3 28591 17388 28871 +3 35499 35646 35708 +3 12802 19639 19535 +3 394 508 393 +3 19049 19050 2143 +3 19750 19628 4738 +3 2806 17320 19035 +3 18015 18105 18014 +3 16551 19757 21319 +3 35727 35755 35792 +3 35756 35849 35911 +3 35931 35377 35672 +3 146 17848 17625 +3 19267 2284 19374 +3 17948 5678 5542 +3 35817 35588 35811 +3 17962 19438 18129 +3 5414 19296 14532 +3 19405 16643 18216 +3 17360 17438 17437 +3 17949 1522 4468 +3 17359 17360 17437 +3 19186 19187 19290 +3 29489 29488 29351 +3 19058 19059 19160 +3 16987 15623 3070 +3 18917 19064 18094 +3 4153 18336 19693 +3 35620 35370 14175 +3 19772 18363 18305 +3 17651 19819 17943 +3 17532 19269 18401 +3 19209 18908 18615 +3 19594 1639 17149 +3 29493 29631 29131 +3 35645 35357 35616 +3 4862 4727 4863 +3 23623 27018 24088 +3 18575 18576 1443 +3 18780 18781 18879 +3 19219 19334 19225 +3 18781 18880 18879 +3 18914 5986 18127 +3 35432 35458 35355 +3 31607 31702 31606 +3 2143 2142 19048 +3 19442 19704 19870 +3 34013 34149 34012 +3 18946 18947 19047 +3 18695 18074 19627 +3 17424 17512 17423 +3 17606 17702 20305 +3 17346 17424 17345 +3 17512 17606 17511 +3 35188 35317 35187 +3 17512 17511 17423 +3 17276 34652 17277 +3 17424 17423 17345 +3 18401 18005 19403 +3 18242 18114 19851 +3 18136 18319 19313 +3 17906 18663 18225 +3 19064 19772 18305 +3 18876 18975 18974 +3 19180 19181 19284 +3 19159 19160 19263 +3 28199 28316 28315 +3 18580 18579 18483 +3 19586 17949 18914 +3 22273 22369 29352 +3 17438 17526 17525 +3 17437 17438 17525 +3 17526 17620 17619 +3 17525 17526 17619 +3 18563 18562 1308 +3 18289 1089 970 +3 19954 18625 19119 +3 18883 18982 18981 +3 17924 18017 18016 +3 18006 19625 17959 +3 17552 17646 17645 +3 18233 18310 18190 +3 18107 18200 18199 +3 18278 19774 18433 +3 507 506 392 +3 17923 17924 18016 +3 18017 18107 18106 +3 14894 17914 18649 +3 19078 19079 19180 +3 19660 18527 19885 +3 19507 19617 19616 +3 19506 19507 19616 +3 18001 18242 18726 +3 11695 35615 11314 +3 32626 32740 32625 +3 1221 1337 1336 +3 35793 12392 1615 +3 17283 17352 17351 +3 27298 26474 26470 +3 19131 26592 21289 +3 17430 17429 17351 +3 17352 17430 17351 +3 17518 17517 17429 +3 17430 17518 17429 +3 17518 17612 17517 +3 19870 18725 18434 +3 17612 17611 17517 +3 17707 17706 17611 +3 19731 19730 19619 +3 19506 19616 19615 +3 19178 19282 19281 +3 18298 18297 18203 +3 4643 11028 4778 +3 19177 19178 19281 +3 17918 611 496 +3 35227 35866 35637 +3 2553 19483 2418 +3 19818 18006 17959 +3 17461 17462 17549 +3 26799 6921 6920 +3 5147 14630 5146 +3 17624 18530 18627 +3 19075 19076 19177 +3 3965 3039 4260 +3 32614 32728 32613 +3 19076 19178 19177 +3 18689 18787 18786 +3 18847 18946 18945 +3 19829 17860 19277 +3 35727 35792 35877 +3 14161 16649 16648 +3 23953 23954 21289 +3 35847 21473 35519 +3 6997 6996 35317 +3 18202 18296 18295 +3 17830 17829 17733 +3 17648 17743 17742 +3 14635 15798 15797 +3 17537 17631 17536 +3 18103 18196 18102 +3 18974 18975 19075 +3 17641 17736 17735 +3 17860 19829 2630 +3 19651 18467 18490 +3 11202 577 1145 +3 19696 18045 19551 +3 19022 18075 17843 +3 17658 17654 19230 +3 19961 19329 18631 +3 1455 1456 1571 +3 24455 29156 24454 +3 30082 30094 20175 +3 6780 6873 6898 +3 11454 19193 19034 +3 18802 18596 19824 +3 26411 28854 19140 +3 26726 26615 26727 +3 19939 18400 17937 +3 18001 3669 19808 +3 18573 18090 18804 +3 2569 2435 2570 +3 1543 18662 1427 +3 1455 1571 18788 +3 5455 19101 18694 +3 19007 19314 19530 +3 19183 19184 19287 +3 18400 19007 18535 +3 18535 19007 19530 +3 19314 1270 17861 +3 17937 18400 18535 +3 18322 18228 18416 +3 19530 19314 17861 +3 1270 18228 18322 +3 17472 18090 18573 +3 17861 1270 18322 +3 18228 17472 18416 +3 18596 19939 19824 +3 18416 17472 18573 +3 4021 4154 19204 +3 17844 17845 17857 +3 18319 17906 18225 +3 35728 35664 35478 +3 19084 19085 19186 +3 19691 18136 19690 +3 16964 19122 166 +3 26909 28218 29692 +3 17998 19693 19692 +3 4778 4777 4643 +3 19082 19184 19183 +3 343 21287 11403 +3 35764 35763 35644 +3 15798 14635 19513 +3 18872 18873 1795 +3 19498 19499 19608 +3 831 830 17997 +3 15321 24576 21795 +3 18561 18560 18464 +3 18956 19057 19056 +3 26683 20330 24651 +3 18619 18038 16194 +3 19721 19834 19833 +3 18203 18297 18296 +3 19087 19189 19188 +3 18493 18321 19894 +3 6912 7011 17467 +3 1560 18772 1677 +3 18296 18297 18389 +3 7743 1166 7627 +3 2416 19483 2551 +3 5068 18003 3044 +3 17541 17635 17540 +3 1377 3596 3463 +3 19752 18919 19276 +3 19276 19602 1411 +3 19364 1378 19420 +3 19443 19444 18515 +3 4420 4554 18594 +3 17941 18034 18236 +3 17536 17630 269 +3 19431 4683 19759 +3 18759 18858 18857 +3 35885 35872 35795 +3 18283 18497 1492 +3 17998 4153 19693 +3 19693 18336 19656 +3 19809 18458 18039 +3 18833 19867 17468 +3 21214 18747 18846 +3 18108 18109 18201 +3 7433 11223 7434 +3 18583 18581 19438 +3 35770 21647 35808 +3 18561 18658 18657 +3 18560 18561 18657 +3 18658 18756 18755 +3 18657 18658 18755 +3 18756 18855 18854 +3 18755 18756 18854 +3 18855 18954 18953 +3 18854 18855 18953 +3 18954 19055 19054 +3 18953 18954 19054 +3 19920 18795 583 +3 19055 19157 19156 +3 18846 18847 18945 +3 18295 18388 18387 +3 18619 19829 19538 +3 19538 2206 11439 +3 35580 35906 35732 +3 2584 2449 2450 +3 18377 18245 554 +3 18195 970 851 +3 26578 26579 26683 +3 18834 17962 18129 +3 18732 2886 15754 +3 19054 19055 19156 +3 19156 19157 2278 +3 17658 19230 3660 +3 710 19305 14594 +3 19257 19258 17867 +3 3660 3659 19880 +3 17860 15798 18555 +3 18458 18833 17468 +3 19696 19551 19867 +3 19473 19582 18075 +3 18498 19022 17843 +3 18911 19329 19961 +3 18910 18911 19961 +3 18966 18362 19067 +3 18362 19115 19067 +3 17922 18015 17921 +3 379 269 380 +3 18907 19943 19917 +3 19824 19939 17937 +3 17760 18907 18903 +3 17747 17760 18903 +3 17390 19301 18524 +3 18423 19777 17950 +3 19301 17390 19229 +3 18922 19301 19229 +3 17696 17760 17747 +3 19301 18423 18524 +3 18524 18423 17950 +3 1066 17696 17747 +3 19777 17696 1066 +3 17950 19777 1066 +3 13581 35945 7073 +3 26585 26802 27758 +3 26390 26253 25364 +3 19336 18209 6647 +3 35655 35721 35654 +3 18295 18296 18388 +3 19943 19306 17818 +3 17818 19306 19825 +3 18903 18907 19917 +3 19917 19943 17818 +3 19104 17857 18040 +3 18131 19104 18040 +3 29901 29902 30032 +3 35588 35589 35812 +3 18304 19691 19487 +3 18136 19313 19690 +3 18150 18493 19192 +3 19870 19704 18725 +3 19295 19402 19294 +3 29686 28361 30209 +3 17991 17471 19168 +3 18476 5056 5198 +3 19080 19081 19182 +3 17908 18515 19533 +3 1331 18582 18678 +3 19157 19261 2278 +3 18151 19921 17959 +3 5687 15893 14706 +3 17996 17997 830 +3 30420 27752 21573 +3 5986 19932 18127 +3 18748 18847 18846 +3 18499 19431 18620 +3 18985 18986 19086 +3 18499 18620 18363 +3 19772 18499 18363 +3 29076 22081 22176 +3 19431 19759 18620 +3 22081 29076 28941 +3 18529 18433 19584 +3 29489 29627 29488 +3 19767 19543 19147 +3 1333 18682 18681 +3 18982 19083 19082 +3 5893 5760 5894 +3 35884 35720 35372 +3 19543 19767 17793 +3 18891 18990 1690 +3 18990 18891 18892 +3 17765 18961 18911 +3 17764 17765 18911 +3 18961 18142 19329 +3 18911 18961 19329 +3 18142 19311 19012 +3 19329 18142 19012 +3 5892 5760 5893 +3 156 6255 18629 +3 18904 17723 19890 +3 19888 19809 19775 +3 18458 17468 18039 +3 17457 17545 17544 +3 34140 34278 34139 +3 26427 7192 27839 +3 19372 19481 19371 +3 18944 19045 19044 +3 33055 33054 32948 +3 18236 18025 18399 +3 1377 3463 1378 +3 19946 19947 17651 +3 18014 18104 18013 +3 19282 19283 19389 +3 17926 17925 17829 +3 17557 19624 19742 +3 18385 18384 18291 +3 19371 19480 19370 +3 18885 18886 18984 +3 19538 18038 18619 +3 4818 4683 4684 +3 19042 19043 19044 +3 20562 17993 18084 +3 17919 17918 17822 +3 18310 16964 18227 +3 18683 18684 18781 +3 977 15797 2630 +3 12825 18175 14684 +3 35824 35455 35358 +3 17730 17729 17634 +3 18197 18291 18196 +3 18291 18290 18196 +3 18291 18384 18290 +3 11648 6661 7414 +3 18384 18383 18290 +3 17830 17926 17829 +3 18795 17839 583 +3 29009 28549 28875 +3 6661 6896 22053 +3 19022 19473 18075 +3 18833 19696 19867 +3 28988 27644 28250 +3 19473 19648 19366 +3 19749 1650 19115 +3 19329 19012 18631 +3 19115 17864 18302 +3 18362 19749 19115 +3 21841 29631 26583 +3 16643 18338 18216 +3 19421 17958 18050 +3 19617 19618 19728 +3 28225 12191 24284 +3 18877 18976 18975 +3 17510 17509 17421 +3 19511 19621 19510 +3 17422 17421 17343 +3 17344 17422 17343 +3 18874 18973 18972 +3 17344 17343 17275 +3 19073 19074 19175 +3 17275 34386 34523 +3 18578 18579 18675 +3 35428 35733 35351 +3 1220 1336 1335 +3 30284 30285 30417 +3 32766 32878 32765 +3 16385 4863 4727 +3 2418 2284 2285 +3 18980 18981 19081 +3 2579 2580 2714 +3 18676 18774 18773 +3 28196 28195 28078 +3 21110 21199 21198 +3 19850 17983 18119 +3 17983 18131 18040 +3 29955 5463 30083 +3 26702 26703 26814 +3 7633 7518 7519 +3 30167 30300 30299 +3 28692 28824 28823 +3 21290 17671 17312 +3 1443 1442 18575 +3 19077 19179 19178 +3 1930 2054 1929 +3 35856 35425 35599 +3 18496 16801 18058 +3 18098 18091 18321 +3 19331 19330 19468 +3 477 17809 17713 +3 19953 19119 19065 +3 17839 18487 17930 +3 31170 31234 31233 +3 17471 18695 19168 +3 17841 18150 19192 +3 17952 6394 3188 +3 30774 6530 29144 +3 19268 19258 18369 +3 19269 18005 18401 +3 18319 18225 19313 +3 18470 19269 17532 +3 18570 18470 17532 +3 19763 18470 18570 +3 17445 19763 18570 +3 18604 19322 18714 +3 18827 19763 17445 +3 19581 19366 18604 +3 18714 18827 17445 +3 19583 19582 19581 +3 19322 18827 18714 +3 18075 19582 19934 +3 19366 19322 18604 +3 17843 18075 17748 +3 19582 19366 19581 +3 17906 17843 18663 +3 19582 19583 19934 +3 17843 17748 18663 +3 18075 19934 17748 +3 17764 18911 18910 +3 17763 17764 18910 +3 19648 18721 19322 +3 19366 19648 19322 +3 19875 19888 17932 +3 19809 18039 19775 +3 2140 19044 2141 +3 27261 28486 26411 +3 19389 19390 19498 +3 3860 18336 2256 +3 18383 18384 18478 +3 18384 18479 18478 +3 19724 19725 19837 +3 17385 13575 19520 +3 19162 19161 19059 +3 18784 18883 18882 +3 19371 19370 19263 +3 19719 19720 19832 +3 19838 19952 19951 +3 17850 18424 6023 +3 18338 18129 18137 +3 15389 18429 15519 +3 950 20722 20641 +3 1411 19602 3062 +3 19551 18499 19772 +3 2630 18619 15035 +3 19401 19400 19293 +3 19289 19396 19395 +3 17372 17450 17449 +3 19497 19498 19607 +3 17554 17553 17465 +3 17466 17554 17465 +3 18792 1458 1459 +3 17548 17547 17459 +3 18582 1332 18679 +3 18959 18958 18859 +3 17889 19858 19958 +3 1332 1333 18681 +3 18649 15013 14893 +3 577 2772 1145 +3 19430 18922 19863 +3 27665 26427 26576 +3 4555 19228 4554 +3 35712 35854 35602 +3 3258 3259 3397 +3 19582 19473 19366 +3 24094 16310 20175 +3 27843 27959 27778 +3 17951 18584 1069 +3 18031 18214 1650 +3 19663 19335 19664 +3 19067 18302 18586 +3 17958 17861 18415 +3 18405 17769 19887 +3 18029 19312 19848 +3 19385 19421 18048 +3 22678 22580 30028 +3 6789 7410 6653 +3 30065 22587 30197 +3 6875 18927 26427 +3 30209 26592 19131 +3 33169 33274 33168 +3 18835 19744 18692 +3 32293 32292 32191 +3 6898 19034 23243 +3 19810 18835 18692 +3 19810 18692 17535 +3 17527 19810 17535 +3 18730 19325 19666 +3 19381 17441 19744 +3 18835 19381 19744 +3 19665 19666 17441 +3 19665 18730 19666 +3 19381 19665 17441 +3 18675 18676 18773 +3 17474 19647 19325 +3 26474 27296 26470 +3 19620 19619 19509 +3 19010 17983 18040 +3 18237 17838 19743 +3 2276 12573 2275 +3 17983 19010 18119 +3 19691 19690 19487 +3 17862 17368 11574 +3 24169 27505 27504 +3 29928 29927 29798 +3 19081 19082 19183 +3 28738 29259 29000 +3 17742 17743 394 +3 17846 19779 19818 +3 17949 18451 5986 +3 30088 28242 19689 +3 19585 19781 19941 +3 17643 17738 17737 +3 19579 18429 15389 +3 17549 17548 17460 +3 18267 18136 19691 +3 19844 19843 19730 +3 17752 17846 16801 +3 19692 18267 19691 +3 19025 18074 18695 +3 19186 19290 19289 +3 17827 17828 17923 +3 18497 18498 17913 +3 19510 19620 19509 +3 3039 1492 18497 +3 19190 19189 19087 +3 18848 18947 18946 +3 18841 18940 18939 +3 14158 15373 15504 +3 14062 14061 15638 +3 18840 18841 18939 +3 18742 18841 18840 +3 18741 18742 18840 +3 30815 25241 30814 +3 4067 4200 19704 +3 453 29686 19494 +3 30734 28622 27257 +3 28984 26415 3751 +3 27614 27731 27730 +3 2406 2540 687 +3 2272 2403 19450 +3 17793 17764 17763 +3 17697 17793 17763 +3 18721 18864 18827 +3 19322 18721 18827 +3 35706 35841 35545 +3 19888 19775 17932 +3 33082 33187 33081 +3 3755 19125 18174 +3 17963 19151 19439 +3 19891 19890 18818 +3 27017 27134 27133 +3 17554 17648 17647 +3 34979 17530 5691 +3 24216 6654 25372 +3 24860 24988 1529 +3 18242 19851 18726 +3 27265 27298 26470 +3 4286 18716 18211 +3 17450 17538 17449 +3 19085 19187 19186 +3 19194 1926 19091 +3 19060 19162 19059 +3 28988 28250 7884 +3 21141 22445 28246 +3 18058 17908 19533 +3 28486 18617 684 +3 18332 16211 16068 +3 116 7036 115 +3 18316 18331 19256 +3 18321 18091 19170 +3 18834 18129 18338 +3 17735 17831 17734 +3 19932 19330 19331 +3 19729 19842 19841 +3 17823 17822 17726 +3 17485 17484 17396 +3 21736 21831 21830 +3 18609 17701 18041 +3 17485 17579 17484 +3 28824 28957 28956 +3 20021 17674 20101 +3 18684 18782 18781 +3 18233 18190 19441 +3 17641 17642 17736 +3 18034 4593 18025 +3 393 392 17740 +3 19395 19504 19503 +3 1530 1647 19513 +3 19394 19395 19503 +3 395 509 394 +3 19162 19266 19161 +3 13698 18928 18189 +3 33324 33325 33433 +3 17919 18012 17918 +3 19905 30362 30290 +3 570 18696 18600 +3 35921 35905 35892 +3 28436 28435 28315 +3 27959 13487 27778 +3 19605 19663 18672 +3 26617 26728 26727 +3 18322 18416 18277 +3 19335 19067 18586 +3 19070 19710 18029 +3 18415 18322 18277 +3 3801 3933 18269 +3 19848 19385 18048 +3 19123 18281 18035 +3 19598 18424 19116 +3 11545 11480 11481 +3 18035 17942 19203 +3 19500 19610 19609 +3 18481 18577 18576 +3 6279 11232 14374 +3 18299 1884 18288 +3 17528 18377 18318 +3 833 17766 832 +3 1926 1806 19091 +3 18338 18137 17941 +3 18701 18377 17528 +3 18149 18701 17528 +3 19859 18701 18149 +3 17721 19859 18149 +3 18050 19554 19604 +3 19604 19554 17721 +3 17474 18567 19647 +3 19471 18809 17863 +3 18774 18775 18873 +3 17922 17921 17825 +3 19632 18237 19743 +3 18119 19529 17838 +3 19743 29403 19632 +3 19850 18119 18237 +3 23902 30556 23844 +3 27875 27893 29354 +3 27056 27057 28370 +3 21890 28807 28675 +3 18304 18376 18139 +3 30941 30940 30886 +3 18591 17987 18098 +3 18591 18496 17987 +3 164 17536 269 +3 17388 17466 17387 +3 19958 19957 19843 +3 19731 19844 19730 +3 17913 17906 18319 +3 18146 19154 17963 +3 18368 1190 18464 +3 17722 831 17766 +3 17720 19929 19895 +3 30457 30456 30323 +3 34340 17850 6153 +3 17792 19605 18187 +3 19211 18523 18802 +3 6530 30774 28681 +3 19634 17673 19211 +3 18523 18596 18802 +3 18623 19118 19634 +3 17673 18523 19211 +3 19118 18623 19376 +3 18409 19118 19376 +3 18409 19376 18571 +3 19118 17673 19634 +3 19652 18817 18571 +3 18817 18409 18571 +3 17844 19652 17769 +3 17769 19652 18571 +3 19104 17844 17857 +3 17845 17844 17769 +3 4021 3887 3888 +3 17636 17731 17730 +3 19749 18031 1650 +3 18339 18340 18214 +3 19147 19543 18693 +3 19543 17793 17697 +3 18864 19762 19763 +3 18827 18864 19763 +3 17159 16996 2920 +3 28486 26802 26411 +3 19125 17442 18174 +3 18174 17858 5331 +3 18315 18182 18091 +3 19204 18285 17442 +3 19510 19509 19400 +3 19613 19614 19724 +3 18875 18876 18974 +3 3310 15489 2802 +3 18399 18025 4324 +3 4592 18025 4593 +3 19266 19265 19161 +3 18975 19076 19075 +3 35766 35933 35944 +3 18197 18196 18103 +3 1411 156 18629 +3 18959 19060 18958 +3 5812 5678 5813 +3 35513 35713 35665 +3 2133 15903 16169 +3 19406 2314 2182 +3 14647 15893 17951 +3 395 17743 7333 +3 19842 19956 19955 +3 19539 18001 17655 +3 18479 18480 18575 +3 19728 19729 19841 +3 19956 19168 19272 +3 19841 19842 19955 +3 17486 17485 17397 +3 32685 17397 17396 +3 17580 17579 17485 +3 17486 17580 17485 +3 17675 17674 17579 +3 17580 17675 17579 +3 18857 18956 18955 +3 17772 17771 17675 +3 19925 18399 19654 +3 28138 28255 12800 +3 3924 19922 18669 +3 17831 17927 17926 +3 17927 18020 18019 +3 18778 18877 18876 +3 18021 18020 17927 +3 21455 28715 28714 +3 19481 2551 2550 +3 21214 18746 21128 +3 19160 19264 19263 +3 15593 35736 22435 +3 18943 18944 19044 +3 31897 31998 31896 +3 17533 18766 18222 +3 35596 35517 35478 +3 686 7409 7410 +3 18187 19605 19470 +3 19232 26901 26852 +3 18416 18573 19445 +3 19335 18586 19664 +3 18325 19710 19148 +3 18277 18416 19445 +3 29760 29759 29626 +3 19312 19385 19848 +3 18455 17852 19123 +3 19065 18330 19534 +3 19666 19325 19556 +3 17942 19202 19203 +3 19666 19556 19805 +3 17441 19666 19805 +3 19647 19485 17892 +3 19325 17892 19556 +3 17863 18809 18549 +3 19325 19647 17892 +3 17863 18549 19485 +3 17392 18918 18095 +3 19647 17863 19485 +3 18809 18095 18549 +3 18809 17392 18095 +3 17392 18738 18999 +3 19744 17441 18924 +3 18918 17392 18999 +3 18140 18050 19604 +3 19554 19859 17721 +3 18567 19471 17863 +3 18048 18050 18140 +3 166 16643 19405 +3 19863 17392 18809 +3 18237 18119 17838 +3 27502 27620 27619 +3 18134 19850 18237 +3 19010 18176 19529 +3 12511 5463 29955 +3 27296 28624 27285 +3 31366 31433 31365 +3 29628 22566 29761 +3 18304 19487 19522 +3 30724 30725 19525 +3 19692 19691 18304 +3 19214 18139 18376 +3 18267 4260 18136 +3 18139 19692 18304 +3 18498 17843 17906 +3 4260 17913 18319 +3 19370 19369 19262 +3 17913 18498 17906 +3 17792 17756 19605 +3 30152 30285 30284 +3 26738 28618 28614 +3 18813 19335 19663 +3 2273 686 688 +3 688 7410 6789 +3 19568 27531 19132 +3 23855 35557 35681 +3 28072 28129 28751 +3 23521 16310 24094 +3 21653 7291 7292 +3 28244 19568 19132 +3 687 21653 7292 +3 24572 11483 23505 +3 19218 18085 17995 +3 5412 2920 17162 +3 5455 18694 19308 +3 27501 27502 27619 +3 27498 27499 27616 +3 27734 27733 27616 +3 12438 12352 12353 +3 33278 33387 33277 +3 17922 17923 18015 +3 28079 28196 28078 +3 18031 18339 18214 +3 19948 19883 19819 +3 18287 19543 17697 +3 18413 18425 18340 +3 19762 18437 18470 +3 18485 19147 18413 +3 19875 17932 18505 +3 19763 19762 18470 +3 18929 30479 29082 +3 28246 7884 27137 +3 19125 19204 17442 +3 35484 29494 28888 +3 19204 18456 18285 +3 18456 18457 18285 +3 18456 18211 18457 +3 18211 3532 18457 +3 17628 6992 18935 +3 18716 17897 3532 +3 18211 18716 3532 +3 6992 27145 18935 +3 18594 19001 17897 +3 18716 18594 17897 +3 29517 29655 29654 +3 14894 14781 18172 +3 17859 18705 22449 +3 25131 24038 25120 +3 18219 18315 18091 +3 27737 27736 27619 +3 17793 5223 17764 +3 18437 17365 18476 +3 19092 19091 18990 +3 1778 1661 1662 +3 19779 17846 19623 +3 18403 19920 3665 +3 5762 19012 19311 +3 17487 17486 17398 +3 32686 17398 32685 +3 17581 17580 17486 +3 17487 17581 17486 +3 17676 17675 17580 +3 17581 17676 17580 +3 17773 17772 17676 +3 17676 17772 17675 +3 17928 18021 17927 +3 18625 19643 19646 +3 19119 18625 19646 +3 19290 19397 19396 +3 21037 18646 18743 +3 19441 19550 18148 +3 19723 19724 19836 +3 26802 26585 28854 +3 18745 18746 18844 +3 18297 18298 1097 +3 18114 19552 19931 +3 18845 18944 18943 +3 6883 7070 3362 +3 18264 18766 17533 +3 27413 19740 26909 +3 27549 27643 29958 +3 19895 18187 18554 +3 28218 28738 29692 +3 18573 18804 18245 +3 19663 19664 18672 +3 19938 18325 18553 +3 19445 18573 18245 +3 27620 27737 27619 +3 19710 19312 18029 +3 18046 18023 19359 +3 27737 27852 27851 +3 19021 19598 18037 +3 18281 17942 18035 +3 19224 19331 19384 +3 19782 19021 18037 +3 17420 17508 17419 +3 24566 17315 24571 +3 17342 17420 17341 +3 20129 17508 17509 +3 26967 33974 17273 +3 17420 17419 17341 +3 18777 18876 18875 +3 17371 17370 34937 +3 26349 26390 26389 +3 17274 17342 17341 +3 18692 19744 18924 +3 35404 35381 35724 +3 17455 17543 17542 +3 17441 19805 18924 +3 27736 27737 27851 +3 18929 29082 29356 +3 18337 18048 18140 +3 1214 1215 1331 +3 19471 19863 18809 +3 19367 19848 18337 +3 17553 17554 17647 +3 19229 18738 17392 +3 18119 19010 19529 +3 19808 3669 3801 +3 18134 18237 19632 +3 19010 18040 17947 +3 5608 5609 19459 +3 7184 20091 20430 +3 19088 1805 1925 +3 34728 18128 17964 +3 17631 17630 17536 +3 19818 17959 17908 +3 19623 17846 17752 +3 17798 19623 17752 +3 18779 18878 18877 +3 19263 19370 19262 +3 18350 18351 18445 +3 18978 19079 19078 +3 17748 17844 19104 +3 18542 18639 18638 +3 19313 18225 17983 +3 18663 17748 19104 +3 18663 19104 18131 +3 18225 18663 18131 +3 19934 19652 17844 +3 17748 19934 17844 +3 19581 18604 19118 +3 24298 24297 23731 +3 19934 19583 19652 +3 18409 19581 19118 +3 27615 20840 27498 +3 19583 19581 18409 +3 30555 27379 30553 +3 17104 331 22943 +3 19887 19102 18551 +3 27852 27968 27967 +3 34679 34678 34550 +3 19872 18032 18431 +3 19837 19838 19951 +3 19439 17962 18834 +3 19376 19102 19887 +3 19394 19503 19502 +3 5147 5282 14630 +3 18571 19376 19887 +3 18339 18413 18340 +3 17514 17513 17425 +3 19543 18287 18693 +3 18693 17130 18425 +3 18437 18476 19269 +3 18247 18485 18339 +3 2099 18908 19735 +3 18470 18437 19269 +3 24273 24402 14969 +3 19269 18476 18005 +3 30489 30340 28467 +3 17313 19036 29121 +3 33375 33488 33374 +3 33375 33374 33265 +3 26675 26676 24218 +3 19193 30602 29940 +3 26825 20099 26939 +3 19034 19193 29940 +3 26346 27136 27085 +3 26571 26676 26675 +3 6789 6653 11975 +3 26570 26571 26675 +3 5762 5761 19012 +3 18198 18292 18197 +3 18788 18887 18787 +3 18986 18985 18886 +3 34421 34420 34282 +3 17426 17425 17347 +3 19552 19870 19111 +3 14163 14161 16648 +3 19388 19389 19497 +3 17398 32806 17399 +3 17488 17487 17399 +3 17400 17488 17399 +3 17582 17581 17487 +3 17488 17582 17487 +3 17677 17676 17581 +3 17582 17677 17581 +3 3848 9553 1174 +3 17677 17773 17676 +3 19396 19397 19505 +3 7627 7628 7743 +3 18480 18576 18575 +3 18681 18779 18778 +3 19441 18190 19550 +3 19552 19860 19931 +3 15206 16017 15877 +3 18761 18760 18662 +3 35371 35691 35856 +3 17632 17727 17631 +3 19862 17654 17658 +3 18844 18845 18943 +3 27730 27731 27845 +3 17934 3792 19230 +3 20091 27298 27265 +3 27401 29277 27956 +3 18703 17527 8687 +3 30069 30201 30068 +3 27851 27852 27967 +3 19605 18672 19470 +3 18800 19938 18899 +3 395 396 510 +3 27968 28085 28084 +3 19710 19070 19148 +3 19173 18046 19359 +3 27967 27968 28084 +3 17576 24229 30634 +3 18046 17852 18455 +3 19179 19180 19283 +3 34340 19116 17850 +3 17531 19599 17931 +3 17737 17833 17832 +3 17746 19068 19495 +3 19548 17931 19205 +3 19548 17531 17931 +3 19068 19548 19205 +3 17531 17749 19599 +3 17749 18028 19599 +3 17746 19495 19758 +3 19068 19205 19495 +3 19420 3044 18003 +3 17743 7222 7333 +3 35507 35448 35411 +3 26899 26898 26783 +3 18896 18717 1386 +3 20810 19210 21389 +3 28310 27959 7192 +3 35816 35806 35468 +3 18191 18184 19320 +3 29277 26915 27956 +3 12340 12341 12427 +3 29799 29798 29665 +3 19099 18997 18963 +3 6531 29290 30499 +3 19606 5145 18382 +3 19613 19724 19723 +3 18176 19010 17947 +3 17857 18217 17947 +3 7399 19232 26852 +3 19638 19942 343 +3 33397 33396 33287 +3 29761 29890 29760 +3 19929 17792 18187 +3 19929 18187 19895 +3 17756 18813 19663 +3 17756 19663 19605 +3 18813 18966 19335 +3 18966 19067 19335 +3 18341 250 17848 +3 19268 19278 18077 +3 18842 18941 18841 +3 6640 18341 17848 +3 18743 18842 18841 +3 18941 19042 18940 +3 18742 18743 18841 +3 18941 18940 18841 +3 19861 18138 18147 +3 19583 18817 19652 +3 35638 35859 22835 +3 18604 18714 17673 +3 18357 1755 1268 +3 19420 18003 18721 +3 18817 19583 18409 +3 19364 19420 19648 +3 28336 27406 27638 +3 19118 18604 17673 +3 28085 28202 28201 +3 4683 19431 4684 +3 18405 19887 18551 +3 2580 2579 2445 +3 18730 17474 19325 +3 19202 18405 18551 +3 17544 17545 17638 +3 18567 17863 19647 +3 18623 19872 19102 +3 29352 29489 29351 +3 28084 28085 28201 +3 19376 18623 19102 +3 18413 18693 18425 +3 19960 17559 19306 +3 19147 18693 18413 +3 18693 18287 18380 +3 19759 18247 18031 +3 18485 18413 18339 +3 830 19218 17995 +3 19759 18031 19749 +3 6873 11454 6898 +3 3259 18264 17533 +3 18661 18660 18563 +3 7337 514 7448 +3 19468 19484 18373 +3 28100 24431 26120 +3 17539 17633 17538 +3 19830 2840 2705 +3 18981 19082 19081 +3 19720 19833 19832 +3 17720 19895 33662 +3 18077 17854 19318 +3 31505 31504 31432 +3 2946 26426 29146 +3 29955 30083 28478 +3 31788 31894 31787 +3 12800 24752 12799 +3 21533 28555 21626 +3 19405 18216 18527 +3 18231 19252 18206 +3 18002 19405 18527 +3 17323 17401 17400 +3 17400 32919 17322 +3 17489 17488 17400 +3 17401 17489 17400 +3 17583 17582 17488 +3 17489 17583 17488 +3 17678 17677 17582 +3 17583 17678 17582 +3 17774 17773 17677 +3 17678 17774 17677 +3 19416 19428 19892 +3 16162 18173 18488 +3 1428 1543 1427 +3 17554 7114 17648 +3 19319 2887 2984 +3 20021 23817 17579 +3 17959 19921 18515 +3 17908 17959 18515 +3 18878 18977 18976 +3 19182 19286 19285 +3 18686 1336 18687 +3 18139 17998 19692 +3 18679 18680 18777 +3 18766 19862 18222 +3 21039 18647 18646 +3 27613 27614 27730 +3 28202 28319 28318 +3 19632 19523 18134 +3 2403 2272 3362 +3 19908 11551 28625 +3 19967 19968 19998 +3 17448 17536 164 +3 18187 19470 18554 +3 19872 18800 18032 +3 28201 28202 28318 +3 19284 19391 19390 +3 18325 19148 18553 +3 18023 18046 18455 +3 19283 19284 19390 +3 6797 5069 1378 +3 17852 18281 19123 +3 18103 18102 18012 +3 28319 28439 28438 +3 18149 17528 18722 +3 19291 19292 19398 +3 360 17724 17715 +3 18213 18149 18722 +3 28318 28319 28438 +3 17724 18894 18890 +3 28439 28561 28560 +3 164 163 7213 +3 19544 18037 17695 +3 35630 35456 35353 +3 18616 19758 18438 +3 18616 17746 19758 +3 1378 5069 1377 +3 1756 18357 19762 +3 28203 28320 28319 +3 28442 28564 28563 +3 18410 18146 19122 +3 19295 19294 19190 +3 27759 29077 26415 +3 30709 30708 30574 +3 17510 17604 17509 +3 19401 19510 19400 +3 1191 1307 1190 +3 33373 33486 33372 +3 19947 19948 19819 +3 18716 4286 4420 +3 17871 17872 20362 +3 2050 2051 2179 +3 18040 17857 17947 +3 19720 19721 19833 +3 19740 28218 26909 +3 17845 18311 18217 +3 27848 27849 27964 +3 27965 28082 28081 +3 28438 28439 28560 +3 16672 16831 9289 +3 18840 18839 20618 +3 17514 17608 17513 +3 7187 7184 20430 +3 16385 19419 4863 +3 2541 28984 3751 +3 19433 3397 3259 +3 18278 18433 18529 +3 10241 21031 30772 +3 17462 17550 17549 +3 18804 555 18245 +3 3312 5050 3445 +3 28561 28690 28689 +3 17419 17418 17340 +3 17648 7221 17743 +3 18947 18948 19048 +3 1571 18887 18788 +3 28560 28561 28689 +3 32642 32756 32755 +3 19473 19364 19648 +3 19648 19420 18721 +3 18714 17445 18523 +3 17673 18714 18523 +3 27616 27733 27615 +3 18840 18939 18839 +3 825 19107 14480 +3 19920 583 3665 +3 19102 18431 18551 +3 18311 18405 19202 +3 19863 19229 17392 +3 18013 18012 17919 +3 18688 18687 1337 +3 19229 17390 17367 +3 19634 18800 19872 +3 18387 18388 18482 +3 19943 19960 19306 +3 18623 19634 19872 +3 17130 18693 18380 +3 18907 18909 19943 +3 18380 18287 17601 +3 18287 17697 17601 +3 18620 19759 19749 +3 18247 18339 18031 +3 18620 19749 18362 +3 18363 18620 18362 +3 18363 18362 18966 +3 18305 18363 18966 +3 18305 18966 18813 +3 18094 18305 18813 +3 18094 18813 17756 +3 17660 18094 17756 +3 19864 17792 19929 +3 17999 19864 19929 +3 17660 17756 17792 +3 19864 17660 17792 +3 35612 35795 35418 +3 17635 17730 17634 +3 17545 17639 17638 +3 22424 17893 2406 +3 18892 18891 18792 +3 17741 393 17740 +3 17553 17552 17464 +3 14858 14934 19337 +3 8043 14556 10574 +3 4823 4824 4959 +3 35408 35883 35605 +3 32610 32724 32609 +3 17490 17489 17401 +3 17402 17490 17401 +3 17584 17583 17489 +3 17490 17584 17489 +3 17679 17678 17583 +3 17584 17679 17583 +3 17775 17774 17678 +3 17679 17775 17678 +3 11249 35776 12818 +3 17775 17871 17774 +3 18130 17841 18042 +3 17533 18222 19433 +3 28690 28822 28821 +3 28689 28690 28821 +3 17387 28871 17388 +3 17292 17361 17360 +3 17439 17438 17360 +3 19609 19610 19720 +3 17361 17439 17360 +3 28822 28955 28954 +3 18977 18978 19078 +3 5962 8310 6094 +3 19656 18267 19692 +3 2540 21653 687 +3 6947 7045 6946 +3 19487 19690 19850 +3 27962 27961 27845 +3 8660 12511 29955 +3 18134 19487 19850 +3 19119 19646 18330 +3 19895 18554 18703 +3 19102 19872 18431 +3 19505 19615 19614 +3 18019 18109 18018 +3 19938 18553 18899 +3 18351 18446 18445 +3 3312 3445 3303 +3 554 18318 18377 +3 17770 19173 19415 +3 19292 19399 19398 +3 27781 17292 19251 +3 19579 15389 15261 +3 19845 19844 19731 +3 360 19524 18133 +3 18113 19336 6647 +3 18549 18095 19383 +3 19524 360 17715 +3 19485 18549 17393 +3 18095 18407 19383 +3 3185 4284 673 +3 18549 19383 17393 +3 21312 17911 19536 +3 34462 6880 34598 +3 21046 18653 18652 +3 18244 18616 18438 +3 13078 24492 28757 +3 18682 1333 18683 +3 6653 6780 17570 +3 28757 13172 13078 +3 1459 1344 1460 +3 9185 11079 10390 +3 32840 32839 32727 +3 18152 17796 19699 +3 19797 19800 30553 +3 19180 19284 19283 +3 17864 18567 17474 +3 18302 17864 17474 +3 18302 17474 18730 +3 18586 18302 18730 +3 18586 18730 19665 +3 19664 18586 19665 +3 19664 19665 19381 +3 18672 19664 19381 +3 17857 17845 18217 +3 27503 27648 26476 +3 17845 17769 18405 +3 18311 17845 18405 +3 14061 15504 15638 +3 17769 18571 19887 +3 18596 18570 19939 +3 15027 15741 19769 +3 21075 21074 27606 +3 17532 18401 18400 +3 18279 19861 18147 +3 682 681 33433 +3 17634 17633 17539 +3 28821 28822 28954 +3 27959 27843 30807 +3 19265 19264 19160 +3 925 806 33672 +3 26899 27017 26898 +3 17471 19025 18695 +3 30155 27990 28882 +3 17655 19779 18074 +3 33030 17324 32921 +3 17427 17426 17348 +3 31168 31232 31231 +3 18283 19022 18498 +3 19654 18399 4191 +3 18523 17445 18596 +3 17445 18570 18596 +3 27498 27616 27615 +3 19282 19389 19388 +3 28955 29090 29089 +3 18199 18198 18105 +3 17942 18311 19202 +3 18217 18311 17942 +3 17275 17343 17342 +3 17341 34248 17274 +3 18738 19229 17367 +3 17745 17747 18895 +3 27295 29549 7400 +3 2435 19387 19496 +3 19211 19938 18800 +3 19824 17937 19312 +3 17696 17601 17760 +3 17762 18909 18907 +3 17697 17763 17762 +3 17601 17697 17762 +3 17762 17763 18909 +3 17763 18910 18909 +3 18910 19961 19960 +3 18909 18910 19960 +3 19960 19961 17559 +3 19961 18631 17559 +3 28954 28955 29089 +3 907 4392 19101 +3 4260 18319 18136 +3 18778 18779 18877 +3 18880 18979 18978 +3 19718 19719 19831 +3 17646 17647 17741 +3 29090 29227 29226 +3 19396 19505 19504 +3 18342 18170 19714 +3 19067 19115 18302 +3 1650 18589 17864 +3 5813 5678 19298 +3 29089 29090 29226 +3 19333 19441 19324 +3 34910 35040 17279 +3 18293 18294 18386 +3 17624 19894 18530 +3 35835 35749 35938 +3 29227 29364 29363 +3 17403 17491 17490 +3 17402 17403 17490 +3 17491 17585 17584 +3 17490 17491 17584 +3 17585 17680 17679 +3 17584 17585 17679 +3 17680 17776 17775 +3 17679 17680 17775 +3 17872 17871 17775 +3 17776 17872 17775 +3 18885 18984 18983 +3 20362 17966 20446 +3 17439 7200 149 +3 18109 18108 18018 +3 33243 17327 33138 +3 29254 29253 29116 +3 18975 18976 19076 +3 18025 4458 4324 +3 18294 18295 18387 +3 18490 17753 17654 +3 17639 17734 17638 +3 17637 17732 17636 +3 5760 18631 5761 +3 18879 18880 18978 +3 19313 17983 19850 +3 27731 27846 27845 +3 19364 19473 19022 +3 19690 19313 19850 +3 29226 29227 29363 +3 21514 28752 24745 +3 19529 19173 17770 +3 18945 18946 2013 +3 18482 18578 18577 +3 18800 18899 18032 +3 18258 18351 18350 +3 28624 28676 30366 +3 18163 18164 18257 +3 18446 18542 18541 +3 29364 29501 29500 +3 17833 17929 17928 +3 6522 823 6647 +3 29363 29364 29500 +3 18592 18585 19587 +3 4469 4603 18451 +3 19178 19179 19282 +3 18167 360 18133 +3 11409 35528 9532 +3 19805 19556 18246 +3 18698 23313 23215 +3 19511 19402 2311 +3 18599 18286 19637 +3 18698 18599 19637 +3 18286 19658 18358 +3 19637 18286 18358 +3 19658 18241 19408 +3 18358 19658 19408 +3 18241 17981 19741 +3 19408 18241 19741 +3 17981 17564 17563 +3 19741 17981 17563 +3 18734 18733 17563 +3 17564 18734 17563 +3 19703 19699 18733 +3 18734 19703 18733 +3 15674 19698 9862 +3 19703 18152 19699 +3 2750 14961 15214 +3 19668 12808 34989 +3 19838 19839 19952 +3 17538 17537 17449 +3 18579 18676 18675 +3 18200 18201 18294 +3 19324 18148 19170 +3 18370 18369 19259 +3 16820 16821 16984 +3 19433 18222 19880 +3 17604 20217 17700 +3 28686 28687 28818 +3 18401 19403 19007 +3 17511 20218 17605 +3 17732 17828 17731 +3 19939 17532 18400 +3 18084 20561 20562 +3 17828 17924 17923 +3 35579 12208 8339 +3 4152 19920 18403 +3 19272 19627 19643 +3 18735 18638 21114 +3 18129 19419 18137 +3 6992 7096 7095 +3 35827 35851 35481 +3 17295 17951 5687 +3 15659 19217 15041 +3 18615 6394 17952 +3 30326 30459 30325 +3 33231 33126 7522 +3 17515 17514 17426 +3 17349 17427 17348 +3 19163 19162 19060 +3 19742 17866 19922 +3 19403 19209 19314 +3 18570 17532 19939 +3 1757 3860 2256 +3 19762 18864 1756 +3 15798 17860 2630 +3 19267 19374 19266 +3 18281 18217 17942 +3 17947 18217 18281 +3 17421 17420 17342 +3 17343 17421 17342 +3 18903 19917 19876 +3 19148 19548 19068 +3 29501 29639 29638 +3 1066 17747 18121 +3 19710 19824 19312 +3 19439 18710 17962 +3 17760 17762 18907 +3 19938 19211 18325 +3 17601 17762 17760 +3 18909 19960 19943 +3 18380 17601 17696 +3 19777 18380 17696 +3 17130 18380 19777 +3 18423 17130 19777 +3 18425 17130 18423 +3 19301 18425 18423 +3 18425 19301 18922 +3 18340 18425 18922 +3 18214 19430 18589 +3 1650 18214 18589 +3 19115 1650 17864 +3 18340 18922 19430 +3 19172 18117 19069 +3 19308 19518 34065 +3 18117 19172 203 +3 19069 18522 19172 +3 18214 18340 19430 +3 18522 18184 19206 +3 1930 1810 1811 +3 2181 19299 2182 +3 2054 19195 1929 +3 682 33433 33434 +3 17633 17728 17632 +3 18387 18482 18481 +3 17326 17404 17403 +3 30924 30982 30923 +3 17404 17492 17491 +3 17403 17404 17491 +3 17492 17586 17585 +3 17491 17492 17585 +3 17586 17681 17680 +3 17585 17586 17680 +3 17777 17776 17680 +3 17681 17777 17680 +3 17873 17872 17776 +3 17777 17873 17776 +3 20446 17966 17967 +3 18072 18071 20456 +3 19296 5414 18584 +3 19740 27413 19029 +3 18107 18108 18200 +3 496 17822 17918 +3 19393 19394 19502 +3 19651 17718 18467 +3 3792 3791 3660 +3 17841 19192 18042 +3 19886 19219 18315 +3 19931 19860 18151 +3 17541 17542 17635 +3 18631 5760 17559 +3 17705 17704 17609 +3 17610 17705 17609 +3 29500 29501 29638 +3 1077 1194 1193 +3 555 18804 556 +3 19314 19209 1270 +3 18225 18131 17983 +3 19125 4021 19204 +3 18721 18003 18864 +3 19190 19294 19293 +3 18074 19623 19627 +3 17838 17770 19856 +3 19743 17838 19856 +3 29639 29772 29771 +3 30774 28946 28681 +3 19272 19168 19627 +3 18257 18258 18350 +3 620 621 18022 +3 19474 19765 24000 +3 460 14982 16791 +3 18445 18446 18541 +3 19023 17985 18495 +3 2139 2140 35132 +3 9113 35385 8040 +3 18167 18133 18566 +3 19540 17800 23118 +3 29638 29639 29771 +3 18651 18360 17800 +3 23216 17800 18599 +3 18360 18303 18599 +3 17800 18360 18599 +3 18303 18334 18286 +3 18599 18303 18286 +3 18334 18092 19658 +3 18286 18334 19658 +3 18092 19316 18241 +3 19658 18092 18241 +3 19316 18828 17981 +3 18241 19316 17981 +3 18828 17565 17564 +3 17981 18828 17564 +3 18762 18734 17564 +3 17565 18762 17564 +3 19716 19703 18734 +3 18762 19716 18734 +3 18059 18152 19703 +3 19716 18059 19703 +3 19713 19698 18152 +3 18059 19713 18152 +3 17980 18071 18070 +3 17755 19713 18173 +3 19331 19468 19384 +3 19608 19719 19718 +3 19290 19291 19397 +3 29772 29901 29900 +3 19416 19892 19893 +3 17567 19416 19893 +3 18662 18760 18661 +3 4551 4684 19551 +3 17513 17512 17424 +3 18400 18401 19007 +3 17609 17608 17514 +3 17425 17513 17424 +3 17610 17609 17515 +3 29771 29772 29900 +3 17327 33243 17406 +3 17516 17610 17515 +3 29901 30032 30031 +3 18385 18386 18480 +3 17738 17834 17833 +3 18555 15798 19513 +3 5813 19298 5680 +3 17452 17453 17540 +3 35767 35449 35843 +3 19308 18603 19518 +3 17516 17515 17427 +3 17428 17516 17427 +3 13054 17653 18177 +3 17427 17515 17426 +3 22231 21552 34994 +3 17425 17424 17346 +3 19007 19403 19314 +3 19209 18615 1270 +3 18748 21129 21130 +3 17605 17604 17510 +3 18688 18689 18786 +3 19607 19608 19718 +3 17852 17947 18281 +3 18176 17947 17852 +3 17509 17508 17420 +3 17421 17509 17420 +3 18553 19148 19068 +3 19856 17770 18532 +3 17747 18903 18895 +3 19148 19070 17531 +3 1928 1809 1929 +3 17950 1066 18486 +3 18802 19824 19710 +3 1899 2023 1898 +3 19634 19211 18800 +3 18325 18802 19710 +3 17937 18535 19385 +3 19211 18802 18325 +3 18535 19530 19421 +3 19312 17937 19385 +3 19530 17861 17958 +3 19385 18535 19421 +3 17861 18322 18415 +3 19421 19530 17958 +3 18396 18611 18041 +3 18609 18041 13016 +3 19069 18117 18611 +3 17701 18396 18041 +3 18967 19069 18611 +3 18396 18967 18611 +3 18210 18522 19069 +3 18967 18210 19069 +3 35653 35563 35729 +3 18210 18184 18522 +3 1880 4133 17395 +3 2704 2570 2705 +3 7093 7200 17361 +3 18724 1522 18329 +3 19952 19065 18964 +3 28549 2407 30774 +3 17327 17405 17404 +3 17326 33138 17327 +3 17405 17493 17492 +3 17404 17405 17492 +3 17493 17587 17586 +3 17492 17493 17586 +3 17587 17682 17681 +3 17586 17587 17681 +3 17682 17778 17777 +3 17681 17682 17777 +3 17874 17873 17777 +3 17778 17874 17777 +3 2551 2687 2686 +3 17874 17875 17967 +3 18948 18949 19049 +3 31301 31300 31235 +3 19438 18581 17868 +3 18581 18231 18206 +3 17637 17636 17542 +3 17543 17637 17542 +3 5892 5891 5759 +3 18662 1543 18761 +3 18985 19086 19085 +3 29900 29901 30031 +3 28557 28558 28686 +3 17625 250 3487 +3 35850 35413 35701 +3 20453 18522 22050 +3 18562 18659 18658 +3 18561 18562 18658 +3 18659 18757 18756 +3 18658 18659 18756 +3 18757 18856 18855 +3 18756 18757 18855 +3 18856 18955 18954 +3 18855 18856 18954 +3 18750 18751 18849 +3 18850 18949 18948 +3 18694 19095 17296 +3 19334 19090 19333 +3 17428 17427 17349 +3 34573 34572 34435 +3 19428 19891 19892 +3 19894 18342 18530 +3 5680 19298 19300 +3 231 16555 159 +3 1270 18615 18228 +3 18615 17952 18228 +3 19781 18627 19770 +3 18497 18283 18498 +3 288 3457 8657 +3 18127 19331 19224 +3 30725 6152 19525 +3 22299 22203 22204 +3 6875 26427 27665 +3 19129 27782 27646 +3 13013 14905 6768 +3 18019 18018 17925 +3 26504 19093 6874 +3 28745 26968 26735 +3 35379 35480 35857 +3 18433 18626 19592 +3 18023 17896 18123 +3 19359 18023 18123 +3 19680 28870 2137 +3 18585 18167 18566 +3 18534 19486 18651 +3 22921 19212 23020 +3 19486 18361 18360 +3 18651 19486 18360 +3 18361 17795 18303 +3 18360 18361 18303 +3 17795 19588 18334 +3 18303 17795 18334 +3 19588 17297 18092 +3 18334 19588 18092 +3 17297 18327 19316 +3 18092 17297 19316 +3 18327 19227 18828 +3 19316 18327 18828 +3 17566 17565 18828 +3 19227 17566 18828 +3 18771 18762 17565 +3 17566 18771 17565 +3 19717 19716 18762 +3 18771 19717 18762 +3 18921 18059 19716 +3 19717 18921 19716 +3 19745 19713 18059 +3 18921 19745 18059 +3 13409 10390 11079 +3 19745 18173 19713 +3 30151 30152 30284 +3 30164 30163 30031 +3 18625 19272 19643 +3 19841 19955 19954 +3 19627 19623 17798 +3 19955 19272 18625 +3 7998 7530 5825 +3 19954 19955 18625 +3 19428 19424 19891 +3 4686 4685 18045 +3 30032 30164 30031 +3 17515 17609 17514 +3 2141 2013 19047 +3 30297 30296 30163 +3 18652 18653 18750 +3 17467 7011 7114 +3 18955 19056 19055 +3 18751 18850 18849 +3 18954 18955 19055 +3 19056 19158 19157 +3 17608 17607 17513 +3 18653 18751 18750 +3 33433 681 7281 +3 18694 17296 18603 +3 19610 19721 19720 +3 13575 17385 17383 +3 2141 19044 19045 +3 17609 17704 17608 +3 17347 17425 17346 +3 30164 30297 30163 +3 7337 7448 7336 +3 30430 30429 30296 +3 17511 17605 17510 +3 17511 17510 17422 +3 18682 18780 18779 +3 17455 17454 13004 +3 18046 18176 17852 +3 17838 19529 17770 +3 19951 19952 18964 +3 17604 20215 17603 +3 19173 19359 19415 +3 7070 17626 3362 +3 19548 19148 17531 +3 18167 18486 360 +3 17747 17745 18121 +3 19070 18029 17749 +3 17920 18013 17919 +3 17950 18486 1767 +3 18701 19445 18377 +3 18222 17658 19880 +3 19859 18277 18701 +3 19445 18245 18377 +3 19554 18415 19859 +3 18277 19445 18701 +3 18050 17958 19554 +3 18415 18277 19859 +3 18048 19421 18050 +3 17958 18415 19554 +3 18769 17701 18514 +3 18520 23419 18514 +3 18116 18396 17701 +3 18769 18116 17701 +3 18670 18967 18396 +3 18116 18670 18396 +3 19320 18210 18967 +3 18670 19320 18967 +3 35418 35795 35443 +3 18290 18383 1090 +3 16194 19803 18619 +3 979 18298 18204 +3 16194 18038 14743 +3 30297 30430 30296 +3 17900 17993 17899 +3 19392 19501 19500 +3 17406 17405 17327 +3 33032 33138 17326 +3 17494 17493 17405 +3 17406 17494 17405 +3 17494 17588 17587 +3 17493 17494 17587 +3 17588 17683 17682 +3 17587 17588 17682 +3 17683 17779 17778 +3 17682 17683 17778 +3 17779 17875 17874 +3 17778 17779 17874 +3 19308 18694 18603 +3 34728 12922 34469 +3 30564 30563 30429 +3 5053 14340 11961 +3 19055 19056 19157 +3 19158 19262 19261 +3 19157 19158 19261 +3 17313 26919 28477 +3 18949 19050 19049 +3 18876 18877 18975 +3 14340 11566 11961 +3 30430 30564 30429 +3 18685 18684 1335 +3 19832 19833 19946 +3 33541 11435 33540 +3 7200 150 149 +3 19860 19111 19774 +3 2687 19483 2553 +3 8306 15364 2222 +3 18849 18850 18948 +3 19262 19369 19261 +3 19718 2705 19607 +3 19370 33942 19369 +3 4458 4457 4324 +3 28316 28436 28315 +3 30698 30697 30563 +3 17546 17640 17545 +3 6860 17270 30713 +3 30564 30698 30563 +3 35755 35727 33233 +3 18522 20453 19172 +3 166 19940 16643 +3 21307 21308 35933 +3 30832 30831 30697 +3 18228 17952 17472 +3 17952 17817 17472 +3 17717 17960 6255 +3 4592 4458 18025 +3 799 2126 9421 +3 17451 17539 17538 +3 27846 27962 27845 +3 28079 28078 27961 +3 554 555 14733 +3 26197 26054 15858 +3 29917 30048 30047 +3 29380 29517 29516 +3 28336 27638 26480 +3 30698 30832 30697 +3 18352 18447 18351 +3 18649 19434 15013 +3 27737 27738 27852 +3 19415 18472 19171 +3 18999 18592 18824 +3 6948 6880 6881 +3 17754 18765 19486 +3 22922 18534 19212 +3 18765 18994 18361 +3 19486 18765 18361 +3 18994 18232 17795 +3 18361 18994 17795 +3 18232 16486 19588 +3 17795 18232 19588 +3 16486 18333 17297 +3 19588 16486 17297 +3 18333 19919 18327 +3 17297 18333 18327 +3 19919 19657 19227 +3 18327 19919 19227 +3 17621 17566 19227 +3 19657 17621 19227 +3 18790 18771 17566 +3 17621 18790 17566 +3 19733 19717 18771 +3 18790 19733 18771 +3 18397 18921 19717 +3 19733 18397 19717 +3 19755 19745 18921 +3 18397 19755 18921 +3 19404 18173 19745 +3 19755 19404 19745 +3 19769 15741 18488 +3 19404 18488 18173 +3 19840 19841 19954 +3 13867 35352 10709 +3 19959 17889 19958 +3 19734 29823 21381 +3 18647 18745 18744 +3 15450 15321 21795 +3 19319 19861 18279 +3 18965 18722 18718 +3 17736 17832 17831 +3 19252 19253 5540 +3 18085 18084 17994 +3 17640 17735 17734 +3 11524 11459 33340 +3 17995 18085 17994 +3 18104 18197 18103 +3 19714 19885 18525 +3 19065 19119 18330 +3 17806 17902 17805 +3 17995 17994 17901 +3 17459 17547 17458 +3 32025 32125 32024 +3 2143 2144 2275 +3 18112 18205 18111 +3 18774 18873 18872 +3 21455 28714 28585 +3 17279 17347 17346 +3 17846 19818 16801 +3 19389 19498 19497 +3 17949 5986 18914 +3 17423 17511 17422 +3 17423 17422 17344 +3 28310 28987 13487 +3 27959 28310 13487 +3 18176 18046 19173 +3 19529 18176 19173 +3 1795 1915 1914 +3 19281 19282 19388 +3 17770 19415 18532 +3 17996 830 17995 +3 18121 17745 17724 +3 29290 28189 30499 +3 17531 19070 17749 +3 18585 1767 18167 +3 18524 17950 1767 +3 18029 19848 19367 +3 17390 18524 1767 +3 1066 18121 18486 +3 18895 18903 19876 +3 17367 17390 1767 +3 19876 19917 19207 +3 19917 17818 19207 +3 19207 17818 19021 +3 17818 19825 19021 +3 19021 19825 19598 +3 19825 18424 19598 +3 18962 18769 18418 +3 18514 18418 18769 +3 18612 18116 18769 +3 18962 18612 18769 +3 18426 18670 18116 +3 18612 18426 18116 +3 18082 19320 18670 +3 18426 18082 18670 +3 1206 1090 1207 +3 18082 18191 19320 +3 16663 16508 18053 +3 16385 4593 18034 +3 18127 19932 19331 +3 23332 18234 18144 +3 18882 18981 18980 +3 18783 18882 18881 +3 30982 31043 30981 +3 35189 6998 35317 +3 17495 17494 17406 +3 17407 17495 17406 +3 17589 17588 17494 +3 17495 17589 17494 +3 17684 17683 17588 +3 17589 17684 17588 +3 17780 17779 17683 +3 17684 17780 17683 +3 17780 17876 17875 +3 17779 17780 17875 +3 16355 16356 16508 +3 21582 20967 19016 +3 18556 18653 21046 +3 21131 18652 18750 +3 19291 19398 19397 +3 17806 17805 17709 +3 18077 19935 19258 +3 19625 18151 17959 +3 35515 35891 35923 +3 35675 35920 11314 +3 17710 17709 17614 +3 17826 17825 17729 +3 19188 19189 19292 +3 7114 7115 7221 +3 17459 17460 17548 +3 19293 19400 19399 +3 16964 166 18227 +3 17912 17470 30831 +3 19959 19958 19844 +3 18467 18088 17557 +3 30832 17912 30831 +3 29352 29351 29214 +3 18873 18874 18972 +3 19503 19613 19612 +3 17832 17833 17928 +3 17640 17641 17735 +3 18749 18750 18848 +3 17999 17720 5691 +3 18110 18109 18019 +3 979 18204 18205 +3 2407 2811 30774 +3 17607 17606 17512 +3 18587 19579 15262 +3 22043 22042 17470 +3 18773 18774 18872 +3 35533 30480 27780 +3 17472 17817 18090 +3 6152 19655 19857 +3 18947 19048 19047 +3 19014 19856 18532 +3 27733 27848 27847 +3 19252 5404 18206 +3 30066 30065 29934 +3 31388 31455 31387 +3 2445 19511 2311 +3 17912 22043 17470 +3 29929 29928 29799 +3 18205 18112 859 +3 30367 19232 7399 +3 18532 19415 19171 +3 18447 18543 18542 +3 7290 29294 30027 +3 19359 18123 18472 +3 22634 11860 6258 +3 18585 18566 19587 +3 17936 19555 18765 +3 17754 17936 18765 +3 19555 18266 18994 +3 18765 19555 18994 +3 18266 18728 18232 +3 18994 18266 18232 +3 18728 18024 16486 +3 18232 18728 16486 +3 18024 19407 18333 +3 16486 18024 18333 +3 19407 18832 19919 +3 18333 19407 19919 +3 18832 18089 19657 +3 19919 18832 19657 +3 17622 17621 19657 +3 18089 17622 19657 +3 18791 18790 17621 +3 17622 18791 17621 +3 19754 19733 18790 +3 18791 19754 18790 +3 19633 18397 19733 +3 19754 19633 19733 +3 19756 19755 18397 +3 19633 19756 18397 +3 17961 19404 19755 +3 19756 17961 19755 +3 19639 18488 19404 +3 17961 19639 19404 +3 35499 35450 35646 +3 1688 1805 18986 +3 30365 30366 19465 +3 27893 29413 29354 +3 11551 16310 23521 +3 18986 19087 19086 +3 6015 12052 15167 +3 19184 19288 19287 +3 18168 18278 18529 +3 19584 19090 19334 +3 17448 35193 17370 +3 11156 4778 11028 +3 18786 18787 18885 +3 4133 3400 180 +3 19161 19265 19160 +3 21128 18746 21041 +3 18529 19334 19219 +3 17902 17995 17901 +3 19732 19731 19620 +3 18529 19584 19334 +3 19693 19656 19692 +3 17831 17830 17734 +3 12019 12020 27317 +3 17943 19651 18490 +3 21744 21745 22042 +3 27643 17862 29958 +3 18199 18200 18293 +3 18530 18342 19714 +3 17345 17423 17344 +3 17345 17344 17276 +3 28742 30209 19131 +3 25728 24451 21290 +3 8693 2074 1948 +3 3070 16169 15903 +3 18073 18072 20457 +3 18223 19274 19214 +3 22322 7405 22321 +3 19940 19439 18834 +3 5090 5223 19767 +3 29135 11405 28753 +3 18486 18121 360 +3 19399 19508 19507 +3 17749 18029 19367 +3 18592 17367 18585 +3 18899 18553 17746 +3 19848 18048 18337 +3 18032 18899 18616 +3 18553 19068 17746 +3 18431 18032 18244 +3 18899 17746 18616 +3 18431 18244 19514 +3 18551 18431 19514 +3 18551 19514 19203 +3 18032 18616 18244 +3 13026 18608 18418 +3 19202 18551 19203 +3 17990 18612 18962 +3 19378 17990 18962 +3 19600 18426 18612 +3 17990 19600 18612 +3 19896 18082 18426 +3 19600 19896 18426 +3 19635 18191 18082 +3 19896 19635 18082 +3 3615 21682 22057 +3 19635 19120 18191 +3 18980 19081 19080 +3 7093 17293 17294 +3 18779 18780 18878 +3 18879 18978 18977 +3 19892 18150 17841 +3 17330 17408 17407 +3 6998 6997 35317 +3 17496 17495 17407 +3 17408 17496 17407 +3 17590 17589 17495 +3 17496 17590 17495 +3 17685 17684 17589 +3 17590 17685 17589 +3 17781 17780 17684 +3 17685 17781 17684 +3 17877 17876 17780 +3 17781 17877 17780 +3 22428 22427 33925 +3 34601 34881 33925 +3 17640 17639 17545 +3 17458 17546 17545 +3 17710 17806 17709 +3 17902 17901 17805 +3 18964 19534 2266 +3 17432 17433 17520 +3 18686 18784 18783 +3 9281 4649 2478 +3 17615 17710 17614 +3 13221 17286 17353 +3 17457 17458 17545 +3 17926 17927 18019 +3 18972 19073 1915 +3 30427 30561 30426 +3 17731 17827 17826 +3 18015 18014 17921 +3 19836 19837 19950 +3 17432 17353 17354 +3 19606 19531 5009 +3 19122 17963 19940 +3 17530 17999 5691 +3 1218 1334 1333 +3 19750 19222 19330 +3 18984 18985 19085 +3 18293 18386 18385 +3 17547 17641 17640 +3 18480 18481 18576 +3 22043 21744 22042 +3 17513 17607 17512 +3 18289 18290 1090 +3 19967 31082 31145 +3 34415 34414 34276 +3 26253 26390 26351 +3 505 506 621 +3 27732 27733 27847 +3 1915 1795 18972 +3 21656 27295 7400 +3 2675 2541 26595 +3 30069 30068 29937 +3 18147 18138 19006 +3 28552 27262 26412 +3 28997 6875 27665 +3 18542 18543 18639 +3 27962 28079 27961 +3 19484 18381 18373 +3 3860 19656 18336 +3 18897 18997 34212 +3 18884 18885 18983 +3 29294 28552 28430 +3 19415 19359 18472 +3 22825 18731 22924 +3 18592 19587 18824 +3 19110 19926 17936 +3 18731 19110 17936 +3 19926 18667 19555 +3 17936 19926 19555 +3 18667 18309 18266 +3 19555 18667 18266 +3 18309 18306 18728 +3 18266 18309 18728 +3 18306 19165 18024 +3 18728 18306 18024 +3 19165 17813 19407 +3 18024 19165 19407 +3 17813 17469 18832 +3 19407 17813 18832 +3 17469 19709 18089 +3 18832 17469 18089 +3 17629 17622 18089 +3 19709 17629 18089 +3 18794 18791 17622 +3 17629 18794 17622 +3 19802 19754 18791 +3 18794 19802 18791 +3 19768 19633 19754 +3 19802 19768 19754 +3 19766 19756 19633 +3 19768 19766 19633 +3 17946 17961 19756 +3 19766 17946 19756 +3 17944 19639 17961 +3 17946 17944 17961 +3 18215 13990 19535 +3 17944 19535 19639 +3 19621 19732 19620 +3 7410 6780 6653 +3 19122 19940 166 +3 19443 18278 18168 +3 17463 17551 17462 +3 14906 19769 12802 +3 17646 17741 17740 +3 18182 19324 19170 +3 18871 1677 18772 +3 1338 18690 18689 +3 5193 16694 16695 +3 19725 19838 19837 +3 18168 19219 19886 +3 19892 19891 18150 +3 19399 19400 19508 +3 18168 18529 19219 +3 8116 17722 17766 +3 18290 18289 18195 +3 35626 35630 35353 +3 18882 18883 18981 +3 17733 17829 17732 +3 18479 1325 18478 +3 35827 35687 35851 +3 19643 19627 17798 +3 19288 19395 19394 +3 18294 18387 18386 +3 17275 34651 17276 +3 21656 7400 27142 +3 28453 28575 28452 +3 30580 30579 30445 +3 18840 20618 1969 +3 26401 26400 24803 +3 18260 18259 18165 +3 18166 18165 18073 +3 30285 30418 30417 +3 19419 4999 4863 +3 11591 27064 27063 +3 28984 27759 26415 +3 11498 7181 21745 +3 18258 18259 18351 +3 1767 18486 18167 +3 19442 19552 18114 +3 18738 17367 18592 +3 18999 18738 18592 +3 360 18121 17724 +3 17367 1767 18585 +3 17745 18895 18894 +3 17724 17745 18894 +3 18895 19876 19873 +3 18894 18895 19873 +3 19876 19207 19776 +3 19776 19207 19782 +3 19873 19876 19776 +3 19207 19021 19782 +3 18395 17990 19378 +3 23324 23421 19378 +3 19490 19600 17990 +3 18395 19490 17990 +3 18546 19896 19600 +3 19490 18546 19600 +3 19640 19635 19896 +3 18546 19640 19896 +3 19018 19120 19635 +3 19640 19018 19635 +3 17547 17548 17641 +3 18299 18939 18940 +3 19893 19892 17841 +3 2266 19416 17567 +3 18989 2266 17567 +3 17331 17409 17408 +3 13966 26799 6920 +3 17497 17496 17408 +3 17409 17497 17408 +3 17591 17590 17496 +3 17497 17591 17496 +3 17686 17685 17590 +3 17591 17686 17590 +3 17782 17781 17685 +3 17686 17782 17685 +3 17782 17878 17877 +3 17781 17782 17877 +3 17878 17971 17970 +3 17877 17878 17970 +3 18154 20532 18062 +3 18062 18061 17971 +3 19444 18168 19886 +3 18515 19444 19886 +3 17615 17614 17520 +3 19224 19384 19368 +3 17355 17433 17432 +3 17521 17615 17520 +3 17354 17355 17432 +3 17433 17521 17520 +3 19533 18515 19886 +3 583 17839 17930 +3 19292 19293 19399 +3 18292 18291 18197 +3 18381 18382 5278 +3 18386 18481 18480 +3 18222 19862 17658 +3 18433 19592 19584 +3 18293 18292 18198 +3 731 18012 18102 +3 19858 17991 19957 +3 17645 17646 17740 +3 31133 31132 31070 +3 19047 2013 18946 +3 25398 23603 12007 +3 35624 35718 35635 +3 29539 29123 22158 +3 25343 27056 27055 +3 30534 25343 27055 +3 18250 18344 18343 +3 21379 20347 11454 +3 11454 20347 19193 +3 29799 29928 29798 +3 2979 19944 3119 +3 21744 11498 21745 +3 28983 28849 21637 +3 18924 19805 18246 +3 18435 29009 29549 +3 19006 19107 18998 +3 22107 29534 22012 +3 20949 18545 18449 +3 11498 7006 15475 +3 18446 18447 18542 +3 7181 11498 15475 +3 25 15489 19018 +3 18543 18640 18639 +3 17909 18862 18188 +3 18044 18188 18862 +3 18862 18307 18044 +3 19110 18731 22826 +3 18307 19213 19110 +3 18044 18307 19110 +3 19213 18719 19926 +3 19110 19213 19926 +3 18719 19753 18667 +3 19926 18719 18667 +3 19753 19024 18309 +3 18667 19753 18309 +3 19024 18900 18306 +3 18309 19024 18306 +3 18900 19596 19165 +3 18306 18900 19165 +3 19596 19062 17813 +3 19165 19596 17813 +3 19062 18030 17469 +3 17813 19062 17469 +3 18030 18829 19709 +3 17469 18030 19709 +3 17649 17629 19709 +3 18829 17649 19709 +3 18810 18794 17629 +3 17649 18810 17629 +3 19813 19802 18794 +3 18810 19813 18794 +3 18404 19768 19802 +3 19813 18404 19802 +3 19866 19766 19768 +3 18404 19866 19768 +3 19631 17946 19766 +3 19866 19631 19766 +3 19521 17944 17946 +3 19631 19521 17946 +3 17440 19535 17944 +3 19521 17440 17944 +3 18887 18986 18886 +3 18475 13467 16462 +3 17635 17636 17730 +3 19059 19058 18957 +3 17551 17550 17462 +3 34450 34449 34311 +3 18783 18784 18882 +3 18487 18127 19224 +3 19774 18278 19443 +3 19082 19083 19184 +3 18296 18389 18388 +3 17941 18137 18034 +3 19080 19182 19181 +3 28611 28985 29411 +3 19268 18077 19258 +3 19400 19509 19508 +3 18042 17624 19781 +3 2184 2183 2054 +3 19728 19841 19840 +3 16170 19228 4823 +3 18200 18294 18293 +3 19079 19181 19180 +3 10574 14556 12210 +3 18878 18879 18977 +3 19504 19614 19613 +3 18106 18107 18199 +3 7006 11396 7083 +3 31082 19967 19966 +3 6780 6898 17570 +3 30028 30160 22678 +3 18483 18579 18578 +3 14781 14675 18172 +3 18353 18352 18259 +3 20704 18166 20624 +3 19941 19770 4058 +3 26054 26197 26196 +3 28237 28238 25292 +3 30324 30323 30190 +3 18447 18446 18351 +3 18164 18165 18258 +3 17985 16190 18495 +3 18023 18455 18702 +3 1544 18761 1543 +3 15475 7006 7083 +3 2099 1507 18908 +3 23712 12334 28109 +3 19260 18370 19259 +3 4554 4421 4555 +3 1337 1222 1338 +3 11396 21458 13892 +3 1692 1693 1809 +3 18357 17365 18437 +3 7083 11396 13892 +3 9181 16672 9289 +3 18208 18395 19771 +3 19771 23421 22931 +3 19380 19490 18395 +3 18208 19380 18395 +3 18803 18546 19490 +3 19380 18803 19490 +3 19823 19640 18546 +3 18803 19823 18546 +3 19760 19018 19640 +3 19823 19760 19640 +3 18984 19085 19084 +3 18939 18299 18288 +3 18710 18276 18583 +3 18856 18857 18955 +3 18970 2266 18989 +3 19326 18970 18989 +3 21458 26345 25800 +3 17410 17409 17331 +3 33246 17331 33245 +3 17410 17498 17497 +3 17409 17410 17497 +3 17498 17592 17591 +3 17497 17498 17591 +3 17592 17687 17686 +3 17591 17592 17686 +3 17687 17783 17782 +3 17686 17687 17782 +3 17783 17879 17878 +3 17782 17783 17878 +3 17879 17972 17971 +3 17878 17879 17971 +3 17972 18063 18062 +3 17971 17972 18062 +3 18518 19317 19005 +3 18154 18155 20614 +3 19860 18574 18151 +3 628 7448 514 +3 18240 19224 19368 +3 18372 19296 19278 +3 18487 19224 18240 +3 17930 18487 18240 +3 18292 18293 18385 +3 19851 19931 19625 +3 13892 21458 25800 +3 26345 27085 27084 +3 19531 19606 18382 +3 19090 18767 18233 +3 18684 18685 18782 +3 18018 18108 18107 +3 13057 15885 17389 +3 25800 26345 27084 +3 32725 32837 32724 +3 33431 7172 33430 +3 29391 29528 29390 +3 29692 28738 29000 +3 30191 30324 30190 +3 30458 30457 30324 +3 26573 26678 26677 +3 26572 26573 26677 +3 27055 27056 28362 +3 27056 28370 28362 +3 29944 27528 29402 +3 18421 20025 22056 +3 18669 19941 4058 +3 26964 28188 6532 +3 19845 2850 19959 +3 19467 12543 19453 +3 18998 6640 17848 +3 18299 18940 2009 +3 19093 28132 30339 +3 17341 17340 26967 +3 27669 28248 25371 +3 18587 18614 21407 +3 28874 28741 29545 +3 31173 31174 31237 +3 17909 18188 19321 +3 29893 28249 17260 +3 18224 18432 18862 +3 17909 18224 18862 +3 18432 18923 18307 +3 18862 18432 18307 +3 18923 17917 19213 +3 18307 18923 19213 +3 17917 19865 18719 +3 19213 17917 18719 +3 19865 17811 19753 +3 18719 19865 19753 +3 17811 18548 19024 +3 19753 17811 19024 +3 18548 18826 18900 +3 19024 18548 18900 +3 18826 18120 19596 +3 18900 18826 19596 +3 18120 17836 19062 +3 19596 18120 19062 +3 17836 18043 18030 +3 19062 17836 18030 +3 18043 17820 18829 +3 18030 18043 18829 +3 17650 17649 18829 +3 17820 17650 18829 +3 18812 18810 17649 +3 17650 18812 17649 +3 19814 19813 18810 +3 18812 19814 18810 +3 17907 18404 19813 +3 19814 17907 19813 +3 19878 19866 18404 +3 17907 19878 18404 +3 19469 19631 19866 +3 19878 19469 19866 +3 17933 19521 19631 +3 19469 17933 19631 +3 19297 17440 19521 +3 17933 19297 19521 +3 18494 19297 19327 +3 19297 18494 17440 +3 6770 347 10759 +3 16801 19818 17908 +3 19656 3965 18267 +3 18660 18659 18562 +3 2311 19402 2179 +3 18151 18574 19921 +3 19185 19289 19288 +3 19402 19511 19401 +3 35668 22435 35736 +3 18777 18778 18876 +3 17283 17284 17352 +3 19079 19080 19181 +3 30774 2811 28946 +3 19511 19510 19401 +3 14733 5756 554 +3 17948 5542 19256 +3 19616 19617 19727 +3 19397 19398 19506 +3 18196 18195 18102 +3 18370 19268 18369 +3 19951 18964 18970 +3 17570 18993 25457 +3 18787 18886 18885 +3 17450 17451 17538 +3 19551 19431 18499 +3 23635 15766 23589 +3 19014 18897 34212 +3 30075 30077 19908 +3 18749 18848 18847 +3 18283 19364 19022 +3 18448 18447 18352 +3 18353 18448 18352 +3 4154 18456 19204 +3 20275 17870 20361 +3 32948 32947 32839 +3 34194 22522 22521 +3 18259 18352 18351 +3 19509 19619 19618 +3 17896 18023 18702 +3 18455 19123 19124 +3 19367 19597 18028 +3 17749 19367 18028 +3 18337 19199 19597 +3 19367 18337 19597 +3 18337 18140 18141 +3 18141 18140 19927 +3 19199 18337 18141 +3 18140 19604 19927 +3 19604 17721 17473 +3 19927 19604 17473 +3 17721 18149 18213 +3 17473 17721 18213 +3 18394 18208 17915 +3 17915 19771 22931 +3 18867 19380 18208 +3 18394 18867 18208 +3 19223 18803 19380 +3 18867 19223 19380 +3 18192 19823 18803 +3 19223 18192 18803 +3 6413 9326 6538 +3 15518 1526 15652 +3 3665 583 18126 +3 18493 18098 18321 +3 18710 18583 17962 +3 19935 18077 19318 +3 19950 18970 19326 +3 19949 19950 19326 +3 11808 35359 35732 +3 1853 5425 10603 +3 30349 30690 30216 +3 27085 28432 28431 +3 27084 27085 28431 +3 17333 17411 17410 +3 25406 25264 25407 +3 17411 17499 17498 +3 17410 17411 17498 +3 17499 17593 17592 +3 17498 17499 17592 +3 17593 17688 17687 +3 17592 17593 17687 +3 17688 17784 17783 +3 17687 17688 17783 +3 17784 17880 17879 +3 17783 17784 17879 +3 17880 17973 17972 +3 17879 17880 17972 +3 17973 18064 18063 +3 17972 17973 18063 +3 18064 18156 18155 +3 18063 18064 18155 +3 18250 18343 20695 +3 18156 18250 18155 +3 2040 2039 1915 +3 16194 17133 19803 +3 19592 18403 18265 +3 17331 33246 17332 +3 3407 18079 3268 +3 18775 18776 18874 +3 19893 17841 18130 +3 19780 19893 18130 +3 19505 19506 19615 +3 19890 17723 18591 +3 18860 18959 18859 +3 18579 18580 18676 +3 28432 30198 30159 +3 28431 28432 30159 +3 26421 24158 31857 +3 25280 25043 25279 +3 31857 31856 26421 +3 35856 35628 35425 +3 28869 27289 29425 +3 30325 30458 30324 +3 20905 23491 12540 +3 23911 23912 23971 +3 28362 28370 30094 +3 28370 30095 30094 +3 7292 21379 6873 +3 30091 28188 26964 +3 17574 30091 26964 +3 28717 30425 30422 +3 27373 27380 28683 +3 26711 26823 26822 +3 5463 6531 30083 +3 2679 2543 25350 +3 35795 35595 35443 +3 28479 25258 30621 +3 25767 19476 21374 +3 35905 35607 35387 +3 26584 8660 28477 +3 28126 30204 30337 +3 35375 35597 35807 +3 34219 19432 18224 +3 18374 17853 18432 +3 18224 18374 18432 +3 17853 19593 18923 +3 18432 17853 18923 +3 19593 19226 17917 +3 18923 19593 17917 +3 19226 18823 19865 +3 17917 19226 19865 +3 18823 18489 17811 +3 19865 18823 17811 +3 18489 18902 18548 +3 17811 18489 18548 +3 18902 18807 18826 +3 18548 18902 18826 +3 18807 18727 18120 +3 18826 18807 18120 +3 18727 18060 17836 +3 18120 18727 17836 +3 18060 19493 18043 +3 17836 18060 18043 +3 19493 18996 17820 +3 18043 19493 17820 +3 18996 17661 17650 +3 17820 18996 17650 +3 17661 18815 18812 +3 17650 17661 18812 +3 18815 19815 19814 +3 18812 18815 19814 +3 19815 18183 17907 +3 19814 19815 17907 +3 18183 19879 19878 +3 17907 18183 19878 +3 18572 19469 19878 +3 19879 18572 19878 +3 19738 17933 19469 +3 18572 19738 19469 +3 17761 19297 17933 +3 19738 17761 17933 +3 24631 25113 20671 +3 21365 33580 27381 +3 19727 19840 19839 +3 19531 18382 18381 +3 17550 17551 17644 +3 19726 19727 19839 +3 17737 17738 17833 +3 18563 18660 18562 +3 19839 19840 19953 +3 14523 15654 14521 +3 31259 31324 31323 +3 18818 18098 18493 +3 18875 18974 18973 +3 17431 17430 17352 +3 18761 1661 18860 +3 30198 2805 2943 +3 18231 18239 19252 +3 30159 30198 2943 +3 18236 18034 18025 +3 19727 19728 19840 +3 18002 18527 19660 +3 19550 18002 19660 +3 17642 17737 17736 +3 19056 19057 19158 +3 18554 19470 19810 +3 19470 18672 18835 +3 18554 19810 17527 +3 18672 19381 18835 +3 18703 18554 17527 +3 19470 18835 19810 +3 18260 18353 18259 +3 18541 18542 18638 +3 18448 18544 18543 +3 18447 18448 18543 +3 4058 19770 4191 +3 17461 17549 17460 +3 35924 35765 35525 +3 18927 28310 7192 +3 18165 18259 18258 +3 2805 30762 30643 +3 18702 18455 19124 +3 19123 18035 18312 +3 19782 18037 19544 +3 19116 33465 19820 +3 19776 19782 18076 +3 18076 19782 19544 +3 19873 19776 18969 +3 18969 19776 18076 +3 18894 19873 19871 +3 19871 19873 18969 +3 17715 17724 18890 +3 18890 18894 19871 +3 17915 22832 19475 +3 19475 18313 19488 +3 18207 18394 19475 +3 19488 18207 19475 +3 19215 18867 18394 +3 18207 19215 18394 +3 19071 19223 18867 +3 19215 19071 18867 +3 18099 18192 19223 +3 19071 18099 19223 +3 16791 19760 460 +3 28081 28082 28198 +3 17930 18240 18054 +3 19333 18233 19441 +3 19940 18834 16643 +3 18012 731 18011 +3 19836 19950 19949 +3 19835 19836 19949 +3 14551 18732 15754 +3 19611 19612 19722 +3 19074 19176 19175 +3 1460 18793 1459 +3 18276 18239 18583 +3 18315 19225 18182 +3 17639 17640 17734 +3 17256 28129 28072 +3 28723 12665 12562 +3 17334 17412 17411 +3 17332 33356 17333 +3 17412 17500 17499 +3 17411 17412 17499 +3 17500 17594 17593 +3 17499 17500 17593 +3 17594 17689 17688 +3 17593 17594 17688 +3 17689 17785 17784 +3 17688 17689 17784 +3 17785 17881 17880 +3 17784 17785 17880 +3 17881 17974 17973 +3 17880 17881 17973 +3 17974 18065 18064 +3 17973 17974 18064 +3 18065 18157 18156 +3 18064 18065 18156 +3 18251 18250 18156 +3 18157 18251 18156 +3 18344 20777 18343 +3 18251 18344 18250 +3 18391 19319 18279 +3 18440 20860 18439 +3 18776 18875 18874 +3 18874 18875 18973 +3 17828 17827 17731 +3 17519 17518 17430 +3 17804 17900 17803 +3 19616 19727 19726 +3 17830 17831 17926 +3 18111 18110 18020 +3 18194 19422 34478 +3 6280 29431 21328 +3 29939 26359 30862 +3 21360 18510 30783 +3 28814 28816 30475 +3 30476 19129 5741 +3 23861 29939 30862 +3 29259 27433 28605 +3 20494 24828 24242 +3 2541 3751 26595 +3 30094 30095 19905 +3 30095 19906 19905 +3 687 7292 7409 +3 686 687 7409 +3 25496 2815 2542 +3 19519 2806 19035 +3 20182 26939 20183 +3 26477 26478 27373 +3 30432 30566 30565 +3 15877 30488 30486 +3 22490 22491 22589 +3 23971 14651 30624 +3 11099 24138 6902 +3 34216 34342 6283 +3 25402 28101 29430 +3 27407 26930 27955 +3 32564 32456 11577 +3 23903 29411 28985 +3 17945 19667 17853 +3 18374 17945 17853 +3 19667 18605 19593 +3 17853 19667 19593 +3 18605 17855 19226 +3 19593 18605 19226 +3 17855 19146 18823 +3 19226 17855 18823 +3 19146 17812 18489 +3 18823 19146 18489 +3 17812 19315 18902 +3 18489 17812 18902 +3 19315 17672 18807 +3 18902 19315 18807 +3 17672 19113 18727 +3 18807 17672 18727 +3 19113 18000 18060 +3 18727 19113 18060 +3 18000 19603 19493 +3 18060 18000 19493 +3 19603 18830 18996 +3 19493 19603 18996 +3 17662 17661 18996 +3 18830 17662 18996 +3 18820 18815 17661 +3 17662 18820 17661 +3 19816 19815 18815 +3 18820 19816 18815 +3 19816 19361 18183 +3 19815 19816 18183 +3 19361 19930 19879 +3 18183 19361 19879 +3 19930 18764 18572 +3 19879 19930 18572 +3 18764 19737 19738 +3 18572 18764 19738 +3 309 34848 34626 +3 19737 19114 19738 +3 29631 30155 28882 +3 30035 30167 30166 +3 21408 2921 24009 +3 33605 33604 33485 +3 18021 18111 18020 +3 18111 18204 18110 +3 18204 18203 18110 +3 19289 19290 19396 +3 19306 17559 5759 +3 4392 19095 19101 +3 17804 17803 17707 +3 17353 17431 17352 +3 18974 19075 19074 +3 19725 19726 19838 +3 17348 17347 17279 +3 34564 34692 34563 +3 19398 19507 19506 +3 25111 27502 27501 +3 18892 18991 18990 +3 35390 35656 35864 +3 20761 25574 13015 +3 35600 35719 35887 +3 18190 18002 19550 +3 35818 26624 35513 +3 18589 19471 18567 +3 17864 18589 18567 +3 17604 17603 17509 +3 17422 17510 17421 +3 19479 34470 28221 +3 18725 18329 16963 +3 18847 18848 18946 +3 20362 20361 17870 +3 21116 18640 18641 +3 18543 18544 18640 +3 17549 17643 17642 +3 2315 2183 2316 +3 18927 7192 26427 +3 23145 18184 18191 +3 18234 23332 21961 +3 18079 19025 17471 +3 19124 19123 18312 +3 18035 19203 19307 +3 29294 6530 28552 +3 1977 21475 28136 +3 17892 19166 18115 +3 19556 17892 18115 +3 18095 18918 19601 +3 18407 18095 19601 +3 18918 18999 18824 +3 19601 18918 18824 +3 35546 8230 35744 +3 19556 18115 18246 +3 18080 19488 17989 +3 23126 17989 18313 +3 18301 18207 19488 +3 18080 18301 19488 +3 18650 19215 18207 +3 18301 18650 18207 +3 19096 19071 19215 +3 18650 19096 19215 +3 19096 19649 18099 +3 19071 19096 18099 +3 17899 17993 20478 +3 19922 3924 3792 +3 18126 17930 18054 +3 5675 5540 5541 +3 18782 18783 18881 +3 18276 19255 19253 +3 19723 19836 19835 +3 19501 19502 19611 +3 19264 19371 19263 +3 19722 19723 19835 +3 19271 14858 19337 +3 19397 19506 19505 +3 19840 19954 19953 +3 19615 19616 19726 +3 19084 19186 19185 +3 17962 18583 19438 +3 19185 19186 19289 +3 18227 19405 18002 +3 18099 19649 1524 +3 17909 34219 18224 +3 24349 24793 24266 +3 17335 17413 17412 +3 17334 17335 17412 +3 17413 17501 17500 +3 17412 17413 17500 +3 17501 17595 17594 +3 17500 17501 17594 +3 17595 17690 17689 +3 17594 17595 17689 +3 17690 17786 17785 +3 17689 17690 17785 +3 17786 17882 17881 +3 17785 17786 17881 +3 17882 17975 17974 +3 17881 17882 17974 +3 17975 18066 18065 +3 17974 17975 18065 +3 18066 18158 18157 +3 18065 18066 18157 +3 18252 18251 18157 +3 18158 18252 18157 +3 18345 18344 18251 +3 18252 18345 18251 +3 18440 18439 18344 +3 18345 18440 18344 +3 19724 19837 19836 +3 18537 18536 18440 +3 17431 17519 17430 +3 17708 17707 17612 +3 17655 18726 19779 +3 17730 17731 17826 +3 17753 17557 19742 +3 19958 19858 19957 +3 35614 35877 35371 +3 33729 33863 33728 +3 28582 33698 28583 +3 29379 29380 29516 +3 26508 26507 26421 +3 24034 23861 30861 +3 35914 35506 28993 +3 2675 26595 30772 +3 26243 24034 30848 +3 19905 19906 30362 +3 19906 30473 30362 +3 2406 687 686 +3 2273 2406 686 +3 26822 26823 26937 +3 28188 28487 6532 +3 25080 26243 30848 +3 7287 29695 29562 +3 27435 27436 28850 +3 35920 35754 35799 +3 35767 35416 35449 +3 32568 35122 34337 +3 30794 25074 30793 +3 25281 25280 30229 +3 16952 22162 23037 +3 30337 30204 21753 +3 35925 35500 35815 +3 31748 11459 11458 +3 18704 17627 19667 +3 17945 18704 19667 +3 17627 18049 18605 +3 19667 17627 18605 +3 18049 18414 17855 +3 18605 18049 17855 +3 18414 18606 19146 +3 17855 18414 19146 +3 18606 18622 17812 +3 19146 18606 17812 +3 18622 18248 19315 +3 17812 18622 19315 +3 18248 18825 17672 +3 19315 18248 17672 +3 18825 17847 19113 +3 17672 18825 19113 +3 17847 19015 18000 +3 19113 17847 18000 +3 19015 18533 19603 +3 18000 19015 19603 +3 18533 17810 18830 +3 19603 18533 18830 +3 17810 17663 17662 +3 18830 17810 17662 +3 17663 18838 18820 +3 17662 17663 18820 +3 18838 19817 19816 +3 18820 18838 19816 +3 19817 18419 19361 +3 19816 19817 19361 +3 18419 19748 19930 +3 19361 18419 19930 +3 19748 18501 18764 +3 19930 19748 18764 +3 18501 18916 19737 +3 18764 18501 19737 +3 18913 18429 21964 +3 19737 18916 19114 +3 684 28985 28611 +3 18692 18128 17535 +3 17642 17643 17737 +3 729 611 730 +3 2704 2705 2840 +3 24344 2952 23072 +3 19483 2687 2551 +3 17449 17537 17536 +3 8012 11202 1145 +3 18198 18197 18104 +3 16462 586 14379 +3 17708 17804 17707 +3 12963 13057 32805 +3 18475 18118 18723 +3 18723 18474 18475 +3 18475 18474 19418 +3 18474 19527 19418 +3 12111 3179 27753 +3 19527 18628 19515 +3 26683 20244 20330 +3 18379 18378 19515 +3 18628 18379 19515 +3 17759 17653 19882 +3 18379 19881 18378 +3 19430 19863 19471 +3 18589 19430 19471 +3 17940 18177 19853 +3 18177 17653 19853 +3 11963 16612 10233 +3 19711 17940 19164 +3 19704 18724 18725 +3 30366 30367 7399 +3 34415 34552 34414 +3 30076 35686 27755 +3 19808 18242 18001 +3 18385 18480 18479 +3 27138 27140 28457 +3 28575 28574 28452 +3 18631 19012 5761 +3 19688 19687 566 +3 18312 18035 19307 +3 19514 18664 19307 +3 23531 27060 27058 +3 13467 18475 19418 +3 19485 17393 19166 +3 17892 19485 19166 +3 18705 18491 23220 +3 13558 14619 691 +3 19427 18491 18511 +3 17859 19811 18705 +3 17989 19427 18080 +3 19811 18511 18491 +3 18452 18080 19427 +3 18511 18452 19427 +3 18708 18301 18080 +3 18452 18708 18080 +3 19273 18650 18301 +3 18708 19273 18301 +3 18056 19096 18650 +3 19273 18056 18650 +3 18056 19217 19649 +3 19096 18056 19649 +3 3361 1639 181 +3 5539 19252 5540 +3 7626 7627 1166 +3 18240 19368 19260 +3 19392 19393 19501 +3 6405 14934 14858 +3 19612 19723 19722 +3 19285 19286 19392 +3 17553 17647 17646 +3 19502 19612 19611 +3 25079 20590 20592 +3 17448 17449 17536 +3 17558 19337 15485 +3 19337 18086 19271 +3 18204 18298 18203 +3 19332 20577 18863 +3 730 18011 731 +3 19059 19161 19160 +3 14743 18038 15330 +3 17654 17934 19230 +3 2183 2315 19406 +3 19532 17941 18236 +3 2266 19534 19416 +3 17271 17272 17335 +3 35400 35456 11780 +3 17414 17413 17335 +3 17336 17414 17335 +3 17502 17501 17413 +3 17414 17502 17413 +3 17502 17596 17595 +3 17501 17502 17595 +3 17596 17691 17690 +3 17595 17596 17690 +3 17691 17787 17786 +3 17690 17691 17786 +3 17787 17883 17882 +3 17786 17787 17882 +3 17883 17976 17975 +3 17882 17883 17975 +3 17976 18067 18066 +3 17975 17976 18066 +3 18067 18159 18158 +3 18066 18067 18158 +3 18253 18252 18158 +3 18159 18253 18158 +3 18346 18345 18252 +3 18253 18346 18252 +3 18441 18440 18345 +3 18346 18441 18345 +3 18634 18537 18538 +3 18441 18537 18440 +3 17613 17708 17612 +3 17341 17419 17340 +3 27848 27964 27963 +3 19851 19625 18006 +3 1524 19649 19217 +3 18678 18679 18776 +3 22397 22494 30070 +3 25049 19564 3083 +3 29788 29917 29916 +3 29240 29241 29377 +3 33302 33411 33301 +3 33411 33524 33523 +3 29539 29402 29123 +3 30316 30449 30315 +3 31108 31171 31170 +3 30473 22942 30362 +3 23266 23168 30694 +3 2273 23459 22424 +3 30059 30058 29927 +3 35467 35389 35527 +3 28621 28753 28335 +3 26939 20096 26824 +3 23823 25080 30848 +3 31686 31786 31685 +3 19339 19466 19799 +3 21153 21154 30343 +3 30446 30445 30312 +3 30313 30446 30312 +3 22862 22863 22961 +3 29628 29627 29489 +3 27493 26406 17269 +3 30351 27493 17269 +3 19411 17534 17627 +3 18704 17945 35122 +3 17534 17391 18049 +3 17627 17534 18049 +3 17391 19008 18414 +3 18049 17391 18414 +3 19008 18816 18606 +3 18414 19008 18606 +3 18816 18521 18622 +3 18606 18816 18622 +3 18521 18033 18248 +3 18622 18521 18248 +3 18033 18096 18825 +3 18248 18033 18825 +3 18096 19547 17847 +3 18825 18096 17847 +3 19547 19715 19015 +3 17847 19547 19015 +3 19715 18987 18533 +3 19015 19715 18533 +3 18987 19098 17810 +3 18533 18987 17810 +3 19098 17664 17663 +3 17810 19098 17663 +3 17664 18861 18838 +3 17663 17664 18838 +3 18861 19828 19817 +3 18838 18861 19817 +3 18607 18419 19817 +3 19828 18607 19817 +3 18607 19221 19748 +3 18419 18607 19748 +3 18597 18501 19748 +3 19221 18597 19748 +3 19149 18916 18501 +3 18597 19149 18501 +3 30559 19740 19029 +3 13054 18177 16613 +3 19730 19843 19729 +3 19957 19956 19842 +3 19883 17718 19651 +3 4058 4190 4057 +3 19170 18148 18170 +3 18342 19170 18170 +3 12566 11961 11566 +3 33432 7281 7173 +3 32509 32618 32508 +3 19243 6536 27521 +3 30842 25631 25487 +3 35393 35352 35601 +3 25343 28187 27056 +3 18508 18763 18474 +3 18723 18508 18474 +3 18763 18052 19527 +3 18474 18763 19527 +3 18052 18822 18628 +3 19527 18052 18628 +3 18995 18379 18628 +3 18822 18995 18628 +3 18221 19881 18379 +3 18995 18221 18379 +3 20496 19882 13054 +3 18221 18506 19881 +3 19545 19853 17759 +3 18506 19545 17759 +3 17938 17940 19853 +3 19545 17938 19853 +3 12459 27032 18132 +3 17938 19164 17940 +3 35506 35613 35895 +3 19164 18709 19711 +3 18384 18385 18479 +3 18514 17701 18609 +3 19362 20948 20673 +3 19697 19708 17716 +3 18564 18661 18563 +3 35872 35914 35595 +3 19203 19514 19307 +3 18244 18438 18664 +3 30952 30951 30897 +3 21041 18746 18647 +3 31849 31947 31848 +3 19328 7107 18026 +3 17956 17859 19328 +3 19636 17956 19328 +3 19004 19811 17859 +3 17956 19004 17859 +3 18323 18511 19811 +3 19004 18323 19811 +3 18186 18452 18511 +3 18323 18186 18511 +3 18707 18708 18452 +3 18186 18707 18452 +3 19169 19273 18708 +3 18707 19169 18708 +3 18179 18056 19273 +3 19169 18179 19273 +3 1334 1219 1335 +3 18056 18179 19217 +3 18054 18240 19260 +3 1690 18990 1806 +3 19890 18591 18818 +3 35688 35506 35914 +3 19181 19182 19285 +3 19393 19502 19501 +3 17718 18989 18088 +3 19286 19393 19392 +3 26615 26617 26727 +3 1309 1308 1192 +3 17558 18086 19337 +3 20883 20802 18365 +3 19332 18863 18086 +3 17558 19332 18086 +3 17613 17612 17518 +3 1323 1207 1324 +3 30985 30984 30926 +3 17519 17613 17518 +3 20362 17870 17871 +3 3862 18477 18718 +3 18848 18849 18947 +3 19621 2445 2579 +3 17453 17541 17540 +3 18005 18476 5198 +3 7448 628 512 +3 13267 13171 13172 +3 17337 17415 17414 +3 31950 32049 32048 +3 17415 17503 17502 +3 17414 17415 17502 +3 17597 17596 17502 +3 17503 17597 17502 +3 17692 17691 17596 +3 17597 17692 17596 +3 17692 17788 17787 +3 17691 17692 17787 +3 17788 17884 17883 +3 17787 17788 17883 +3 17884 17977 17976 +3 17883 17884 17976 +3 17977 18068 18067 +3 17976 17977 18067 +3 18068 18160 18159 +3 18067 18068 18159 +3 18160 18254 18253 +3 18159 18160 18253 +3 18254 18347 18346 +3 18253 18254 18346 +3 18442 18441 18346 +3 18347 18442 18346 +3 18538 18537 18441 +3 18442 18538 18441 +3 18635 18636 21026 +3 18634 21025 21024 +3 3933 4067 19442 +3 1795 18871 18872 +3 15489 3310 19120 +3 35845 27027 35909 +3 25631 30842 30851 +3 26925 27043 27042 +3 25261 25404 27957 +3 11623 35729 35563 +3 29787 29788 29916 +3 29132 29133 29818 +3 33734 33868 33733 +3 29666 29665 29527 +3 2675 21031 15723 +3 19675 21747 5088 +3 7298 6837 7084 +3 22424 2406 2273 +3 29528 29527 29390 +3 32448 32555 32447 +3 30486 30488 11384 +3 27053 27054 28359 +3 28335 7287 29562 +3 28605 21560 19671 +3 30842 25487 30843 +3 19339 19681 11574 +3 19799 19466 28467 +3 28453 28452 28332 +3 28333 28453 28332 +3 29628 29761 29627 +3 29761 29760 29627 +3 2946 29146 29681 +3 27527 2946 29681 +3 19821 18226 17534 +3 17627 18704 19411 +3 18226 18436 17391 +3 17534 18226 17391 +3 18436 17837 19008 +3 17391 18436 19008 +3 17837 18153 18816 +3 19008 17837 18816 +3 18153 18713 18521 +3 18816 18153 18521 +3 18713 18453 18033 +3 18521 18713 18033 +3 18453 18270 18096 +3 18033 18453 18096 +3 18270 18007 19547 +3 18096 18270 19547 +3 18836 19715 19547 +3 18007 18836 19547 +3 18392 18987 19715 +3 18836 18392 19715 +3 18235 19098 18987 +3 18392 18235 18987 +3 18235 17665 17664 +3 19098 18235 17664 +3 17665 18870 18861 +3 17664 17665 18861 +3 18870 19847 19828 +3 18861 18870 19828 +3 19847 4400 18607 +3 19828 19847 18607 +3 4400 19694 19221 +3 18607 4400 19221 +3 19694 18500 18597 +3 19221 19694 18597 +3 18500 17652 19149 +3 18597 18500 19149 +3 28552 28681 27262 +3 19149 17652 18055 +3 19384 19468 18372 +3 17991 19168 19956 +3 35439 35897 35874 +3 4998 4863 4999 +3 29360 29359 29222 +3 29223 29222 29085 +3 18430 19254 18220 +3 27394 27513 27512 +3 26809 26810 26924 +3 6536 6990 28368 +3 6990 19644 28368 +3 33025 10599 10723 +3 31236 31301 31235 +3 19751 18665 18763 +3 18508 19751 18763 +3 18665 18326 18052 +3 18763 18665 18052 +3 18326 18406 18822 +3 18052 18326 18822 +3 18171 18995 18822 +3 18406 18171 18822 +3 18504 18221 18995 +3 18171 18504 18995 +3 17656 18506 18221 +3 18504 17656 18221 +3 17865 19545 18506 +3 17656 17865 18506 +3 17935 17938 19545 +3 17865 17935 19545 +3 18238 19164 17938 +3 17935 18238 17938 +3 19446 18709 19164 +3 18238 19446 19164 +3 19812 18428 18709 +3 19446 19812 18709 +3 17444 19697 18428 +3 19812 17444 18428 +3 19417 19365 19697 +3 17444 19417 19697 +3 19514 18244 18664 +3 25870 26012 1678 +3 18026 21769 19928 +3 19928 21769 18868 +3 19622 19636 19928 +3 17623 19622 19928 +3 17957 17956 19636 +3 19622 17957 19636 +3 18905 19004 17956 +3 17957 18905 17956 +3 18229 18323 19004 +3 18905 18229 19004 +3 18819 18186 18323 +3 18229 18819 18323 +3 18393 18707 18186 +3 18819 18393 18186 +3 18393 19066 19169 +3 18707 18393 19169 +3 19066 19106 18179 +3 19169 19066 18179 +3 17293 7093 17361 +3 22749 22849 6252 +3 19368 18371 18370 +3 25457 23851 17570 +3 3669 18001 3539 +3 19263 19262 19158 +3 18674 18675 18772 +3 17567 19893 19780 +3 18481 18482 18577 +3 18773 18872 18871 +3 18578 18675 18674 +3 17558 4935 19174 +3 1522 17949 19586 +3 1309 1192 1193 +3 2886 18598 19174 +3 19174 19332 17558 +3 3660 19230 3792 +3 1207 18478 1324 +3 19174 18124 19332 +3 20562 20478 17993 +3 22651 17988 18569 +3 5135 18581 18206 +3 18098 17987 18091 +3 3268 19858 3129 +3 34615 18317 33804 +3 19843 19957 19842 +3 17734 17830 17733 +3 18577 18578 18674 +3 1693 1694 1810 +3 18758 18759 18857 +3 35631 35874 35593 +3 25346 25183 28348 +3 17504 17503 17415 +3 17416 17504 17415 +3 17504 17598 17597 +3 17503 17504 17597 +3 17598 17693 17692 +3 17597 17598 17692 +3 17693 17789 17788 +3 17692 17693 17788 +3 17789 17885 17884 +3 17788 17789 17884 +3 17885 17978 17977 +3 17884 17885 17977 +3 17978 18069 18068 +3 17977 17978 18068 +3 18161 18160 18068 +3 18069 18161 18068 +3 18255 18254 18160 +3 18161 18255 18160 +3 18348 18347 18254 +3 18255 18348 18254 +3 18348 18443 18442 +3 18347 18348 18442 +3 18443 18539 18538 +3 18442 18443 18538 +3 13564 18642 18740 +3 18538 18539 18635 +3 34723 34596 34597 +3 19762 18357 18437 +3 25034 25033 22368 +3 23315 21746 19794 +3 27499 24301 27500 +3 35644 35763 35683 +3 6536 28368 27521 +3 26921 26922 27039 +3 6990 27294 19644 +3 28875 28610 29684 +3 28430 28552 26412 +3 27262 29133 29132 +3 2403 19451 19450 +3 19451 14970 19450 +3 34002 34138 34001 +3 30290 12215 11884 +3 25570 25569 23711 +3 28562 28563 28691 +3 28360 30082 28359 +3 30082 30078 28359 +3 27873 7068 19791 +3 29001 29000 17252 +3 29958 17862 11574 +3 19681 19339 19799 +3 19784 19783 19455 +3 7183 7295 19455 +3 30285 30152 22961 +3 29890 29889 29760 +3 26426 17667 29146 +3 21375 27527 28190 +3 18320 18226 19821 +3 35643 35941 35502 +3 19216 18436 18226 +3 18320 19216 18226 +3 17910 17837 18436 +3 19216 17910 18436 +3 17910 19854 18153 +3 17837 17910 18153 +3 19854 18601 18713 +3 18153 19854 18713 +3 19019 18453 18713 +3 18601 19019 18713 +3 19019 19127 18270 +3 18453 19019 18270 +3 19127 18632 18007 +3 18270 19127 18007 +3 19747 18836 18007 +3 18632 19747 18007 +3 19924 18392 18836 +3 19747 19924 18836 +3 1766 18235 18392 +3 19924 1766 18392 +3 17666 17665 18235 +3 1766 17666 18235 +3 17666 18888 18870 +3 17665 17666 18870 +3 18888 19849 19847 +3 18870 18888 19847 +3 19849 18531 4400 +3 19847 19849 4400 +3 18531 19695 19694 +3 4400 18531 19694 +3 19695 18699 18500 +3 19694 19695 18500 +3 18699 18390 17652 +3 18500 18699 17652 +3 7290 30027 30633 +3 17765 5359 18961 +3 18267 3965 4260 +3 23220 22449 18705 +3 28816 30476 30475 +3 19411 35122 32568 +3 33483 33602 33601 +3 30871 30925 30870 +3 24339 6877 29762 +3 22761 22663 12109 +3 27379 29699 27378 +3 29144 7290 28610 +3 27294 29684 19644 +3 6950 34465 6951 +3 26412 27262 29132 +3 18963 18568 18665 +3 19751 18963 18665 +3 18568 18492 18326 +3 18665 18568 18326 +3 18492 18797 18406 +3 18326 18492 18406 +3 19309 18171 18406 +3 18797 19309 18406 +3 19546 18504 18171 +3 19309 19546 18171 +3 18218 17656 18504 +3 19546 18218 18504 +3 17768 17865 17656 +3 18218 17768 17656 +3 18356 17935 17865 +3 17768 18356 17865 +3 17869 18238 17935 +3 18356 17869 17935 +3 18811 19446 18238 +3 17869 18811 18238 +3 18100 19812 19446 +3 18811 18100 19446 +3 19302 17444 19812 +3 18100 19302 19812 +3 19707 19417 17444 +3 19302 19707 17444 +3 19379 18968 19417 +3 19707 19379 19417 +3 17529 17623 18968 +3 19379 17529 18968 +3 18427 19622 17623 +3 17529 18427 17623 +3 18706 17957 19622 +3 18427 18706 19622 +3 18420 18905 17957 +3 18706 18420 17957 +3 17954 18229 18905 +3 18420 17954 18905 +3 17986 18819 18229 +3 17954 17986 18229 +3 17986 18805 18393 +3 18819 17986 18393 +3 18805 18866 19066 +3 18393 18805 19066 +3 18866 18477 19106 +3 19066 18866 19106 +3 1647 18081 19513 +3 35889 35678 35709 +3 19260 19368 18370 +3 3039 17913 4260 +3 18677 18775 18774 +3 19151 18710 19439 +3 18685 18783 18782 +3 19621 19620 19510 +3 1442 1325 18575 +3 18958 18957 18858 +3 18017 18018 18107 +3 19192 18493 19894 +3 17644 17645 17739 +3 6392 15754 2886 +3 18077 17560 17854 +3 17560 17891 17854 +3 731 18102 850 +3 19942 21287 343 +3 18598 17842 18124 +3 19174 18598 18124 +3 18590 17988 18124 +3 17842 18590 18124 +3 18517 18422 22459 +3 18590 18569 17988 +3 35751 35360 35859 +3 18569 18517 19429 +3 13242 13990 18215 +3 18517 18308 18422 +3 3731 3862 18718 +3 15433 18215 18494 +3 17644 17739 17738 +3 1332 18680 18679 +3 17295 5821 19109 +3 35170 35300 17283 +3 35169 35170 17283 +3 17505 17504 17416 +3 17417 17505 17416 +3 17599 17598 17504 +3 17505 17599 17504 +3 17599 17694 17693 +3 17598 17599 17693 +3 17600 20205 20204 +3 17693 17694 17789 +3 17790 17694 20204 +3 17789 17790 17885 +3 17886 17979 17978 +3 17885 17886 17978 +3 17979 18070 18069 +3 17978 17979 18069 +3 18070 18162 18161 +3 18069 18070 18161 +3 18162 18256 18255 +3 18161 18162 18255 +3 18256 18349 18348 +3 18255 18256 18348 +3 18444 18443 18348 +3 18349 18444 18348 +3 18444 18540 18539 +3 18443 18444 18539 +3 18540 18637 18636 +3 18539 18540 18636 +3 1461 1576 1460 +3 8577 8576 14818 +3 13767 14143 23173 +3 35398 35903 35407 +3 28375 30098 30097 +3 28374 28375 30097 +3 6530 28681 28552 +3 27294 28875 29684 +3 28313 28312 28195 +3 28196 28313 28195 +3 30826 23168 23266 +3 15346 14970 7187 +3 32503 32502 32397 +3 7527 11728 11811 +3 13267 28889 29023 +3 24865 29258 27287 +3 30078 30082 16310 +3 30082 20175 16310 +3 25835 28724 28592 +3 27666 19700 30480 +3 25014 29216 30737 +3 17368 19339 11574 +3 32729 32841 32728 +3 29641 29774 29773 +3 30285 23059 30418 +3 17257 25914 28353 +3 32788 32900 32787 +3 27527 29681 28190 +3 18512 17364 18320 +3 19937 18320 19821 +3 17364 19063 19216 +3 18320 17364 19216 +3 19063 19626 17910 +3 19216 19063 17910 +3 19626 18624 19854 +3 17910 19626 19854 +3 18624 18502 18601 +3 19854 18624 18601 +3 18502 19712 19019 +3 18601 18502 19019 +3 19126 19127 19019 +3 19712 19126 19019 +3 19126 19440 18632 +3 19127 19126 18632 +3 19440 19764 19747 +3 18632 19440 19747 +3 18547 19924 19747 +3 19764 18547 19747 +3 18831 1766 19924 +3 18547 18831 19924 +3 17714 17666 1766 +3 18831 17714 1766 +3 17714 18889 18888 +3 17666 17714 18888 +3 18889 19868 19849 +3 18888 18889 19849 +3 19868 3614 18531 +3 19849 19868 18531 +3 3614 17955 19695 +3 18531 3614 19695 +3 17955 10688 18699 +3 19695 17955 18699 +3 27370 27371 27489 +3 33157 33262 33261 +3 28880 29816 26944 +3 35691 35628 35856 +3 11925 27196 27198 +3 21654 21655 7294 +3 26519 24066 27258 +3 17295 5687 5821 +3 6944 22097 24300 +3 11360 11506 1977 +3 35657 35723 35386 +3 28875 29144 28610 +3 30608 30073 26519 +3 28610 7290 30633 +3 6530 29294 7290 +3 18997 19650 18963 +3 33325 33434 33433 +3 19650 18473 18568 +3 18963 19650 18568 +3 18473 18314 18492 +3 18568 18473 18492 +3 18314 17890 18797 +3 18492 18314 18797 +3 17895 19309 18797 +3 17890 17895 18797 +3 17895 19303 19546 +3 19309 17895 19546 +3 18125 18218 19546 +3 19303 18125 19546 +3 18507 17768 18218 +3 18125 18507 18218 +3 18324 18356 17768 +3 18507 18324 17768 +3 18180 17869 18356 +3 18324 18180 18356 +3 18720 18811 17869 +3 18180 18720 17869 +3 19884 18100 18811 +3 18720 19884 18811 +3 19009 19302 18100 +3 19884 19009 18100 +3 18466 19707 19302 +3 19009 18466 19302 +3 19489 19379 19707 +3 18466 19489 19707 +3 18027 17529 19379 +3 19489 18027 19379 +3 18469 18427 17529 +3 18027 18469 17529 +3 17698 18706 18427 +3 18469 17698 18427 +3 18051 18420 18706 +3 17698 18051 18706 +3 18051 17953 17954 +3 18420 18051 17954 +3 17953 17562 17986 +3 17954 17953 17986 +3 17562 18806 18805 +3 17986 17562 18805 +3 18806 18965 18866 +3 18805 18806 18866 +3 18718 18477 18866 +3 18965 18718 18866 +3 12334 23712 12333 +3 7221 7115 7222 +3 18371 19278 19268 +3 18370 18371 19268 +3 18881 18980 18979 +3 6881 6949 6948 +3 18239 19253 19252 +3 17551 17645 17644 +3 33246 33356 17332 +3 3180 1492 3039 +3 19955 19956 19272 +3 18495 5818 19023 +3 17542 17636 17635 +3 5684 17891 19023 +3 18732 14551 14591 +3 18341 6148 250 +3 147 19412 146 +3 18732 18391 17842 +3 18598 18732 17842 +3 18391 18279 18590 +3 17842 18391 18590 +3 18279 18147 18569 +3 18590 18279 18569 +3 19006 18517 18569 +3 18147 19006 18569 +3 18998 18308 18517 +3 19006 18998 18517 +3 17848 19412 18308 +3 18998 17848 18308 +3 18688 1337 18689 +3 3615 146 17625 +3 19620 19731 19619 +3 35637 35607 35905 +3 19168 18695 19627 +3 17506 17505 17417 +3 16800 16616 20319 +3 17505 17506 17599 +3 18275 1074 1190 +3 20041 20121 17506 +3 19833 19947 19946 +3 26682 26683 24651 +3 361 3487 250 +3 17453 17454 17541 +3 16551 21319 17860 +3 21319 20622 19277 +3 17860 21319 19277 +3 17979 17980 18070 +3 18071 18163 18162 +3 18070 18071 18162 +3 18163 18257 18256 +3 18162 18163 18256 +3 18257 18350 18349 +3 18256 18257 18349 +3 18350 18445 18444 +3 18349 18350 18444 +3 18445 18541 18540 +3 18444 18445 18540 +3 18541 18638 18637 +3 18540 18541 18637 +3 18718 18722 18318 +3 11808 35635 35359 +3 35387 35910 35855 +3 18594 16170 4687 +3 27673 27674 12442 +3 30098 19800 19797 +3 27058 27060 28374 +3 29277 27985 26915 +3 30591 30590 30456 +3 18639 21115 21114 +3 28313 28433 28312 +3 26969 27957 25404 +3 14970 15346 19450 +3 30583 30582 30448 +3 11384 21643 27875 +3 28987 19568 28244 +3 13487 28987 28244 +3 17314 28130 28129 +3 22481 22580 22579 +3 19248 19355 21945 +3 28614 28618 29408 +3 26411 26802 28854 +3 26941 30332 5463 +3 25406 25405 25263 +3 27375 18929 29356 +3 35230 19522 35101 +3 27286 35725 27287 +3 18320 19937 18512 +3 19806 18246 18512 +3 18115 17364 18512 +3 18246 18115 18512 +3 19166 19063 17364 +3 18115 19166 17364 +3 17393 19626 19063 +3 19166 17393 19063 +3 19383 18624 19626 +3 17393 19383 19626 +3 19383 18407 18502 +3 18624 19383 18502 +3 18407 19601 19712 +3 18502 18407 19712 +3 18824 19126 19712 +3 19601 18824 19712 +3 19587 19440 19126 +3 18824 19587 19126 +3 18566 19764 19440 +3 19587 18566 19440 +3 18133 18547 19764 +3 18566 18133 19764 +3 19524 18831 18547 +3 18133 19524 18547 +3 17715 17714 18831 +3 19524 17715 18831 +3 17715 18890 18889 +3 17714 17715 18889 +3 18890 19871 19868 +3 18889 18890 19868 +3 19871 18969 3614 +3 19868 19871 3614 +3 18969 18076 17955 +3 3614 18969 17955 +3 18076 19544 10688 +3 17955 18076 10688 +3 3848 7674 8239 +3 35324 18814 17695 +3 29528 29666 29527 +3 29150 30155 21841 +3 17774 17870 17773 +3 2674 21655 21654 +3 31793 31899 31792 +3 18164 18258 18257 +3 34651 17275 34523 +3 4012 20317 22542 +3 28136 23531 27058 +3 21475 23531 28136 +3 28681 30600 27262 +3 29144 6530 7290 +3 30352 29294 28430 +3 29294 30352 30027 +3 18897 19171 19650 +3 28190 35415 21375 +3 19171 18472 18473 +3 19650 19171 18473 +3 18472 18123 18314 +3 18473 18472 18314 +3 17896 17890 18314 +3 18123 17896 18314 +3 17896 18702 17895 +3 17890 17896 17895 +3 18702 19124 19303 +3 17895 18702 19303 +3 19124 18312 18125 +3 19303 19124 18125 +3 19307 18507 18125 +3 18312 19307 18125 +3 18664 18324 18507 +3 19307 18664 18507 +3 18438 18180 18324 +3 18664 18438 18324 +3 19758 18720 18180 +3 18438 19758 18180 +3 19495 19884 18720 +3 19758 19495 18720 +3 19205 19009 19884 +3 19495 19205 19884 +3 17931 18466 19009 +3 19205 17931 19009 +3 19599 19489 18466 +3 17931 19599 18466 +3 18028 18027 19489 +3 19599 18028 19489 +3 19597 18469 18027 +3 18028 19597 18027 +3 19199 17698 18469 +3 19597 19199 18469 +3 18141 18051 17698 +3 19199 18141 17698 +3 18141 19927 17953 +3 18051 18141 17953 +3 19927 17473 17562 +3 17953 19927 17562 +3 17473 18213 18806 +3 17562 17473 18806 +3 18213 18722 18965 +3 18806 18213 18965 +3 14628 21495 16857 +3 24032 14559 24092 +3 23239 21305 21488 +3 23239 5555 21305 +3 24851 24072 23805 +3 12339 23562 23604 +3 21916 24216 21915 +3 28367 20892 29021 +3 26029 26171 26170 +3 24433 24369 25403 +3 35875 35658 35836 +3 25545 24433 25403 +3 26089 22646 23238 +3 24563 25211 25090 +3 24556 23544 25979 +3 20058 21393 20646 +3 21423 25168 24950 +3 34995 33812 12572 +3 24905 24904 25319 +3 24129 25678 24411 +3 32119 32120 32219 +3 330 3451 8050 +3 24072 25249 23673 +3 21540 24851 23805 +3 21916 21915 23744 +3 23799 21916 23744 +3 24369 24433 23988 +3 26028 26029 26170 +3 25509 24563 23872 +3 24433 23989 23988 +3 23926 23813 26461 +3 25506 25509 23872 +3 23552 13051 23923 +3 6862 35427 28721 +3 25896 26038 26037 +3 20797 20879 20796 +3 26785 26673 24220 +3 25616 25758 25757 +3 23661 23613 24950 +3 25615 25616 25757 +3 24781 24662 20825 +3 24824 23661 24950 +3 12215 22942 24662 +3 25307 24905 25319 +3 34848 11789 4100 +3 16189 16046 21884 +3 16752 16751 25467 +3 23805 24072 23673 +3 24344 24053 24758 +3 24216 19426 6654 +3 24155 25509 25506 +3 23989 24133 23983 +3 26140 26141 23486 +3 24153 24155 25506 +3 29152 20896 27433 +3 26141 23543 23486 +3 25619 23595 21539 +3 21913 26212 25568 +3 25758 25900 25899 +3 25895 25896 26037 +3 25757 25758 25899 +3 25900 26042 26041 +3 25899 25900 26041 +3 24620 24426 24326 +3 26042 26184 26183 +3 23595 25941 25798 +3 21539 23595 25798 +3 26101 20094 25449 +3 25494 25923 25370 +3 25138 2252 25139 +3 21074 27605 27606 +3 20195 20034 21858 +3 20052 21858 20034 +3 20034 21580 20052 +3 21141 28246 27137 +3 21580 21868 21141 +3 21868 22445 21141 +3 21776 22646 21672 +3 26231 11717 21672 +3 26283 23690 26282 +3 23532 23890 24954 +3 35485 35610 30346 +3 25160 12647 4662 +3 24326 24327 25618 +3 25618 25619 21539 +3 26041 26042 26183 +3 26184 26325 26324 +3 20879 20959 20958 +3 19299 2181 19194 +3 20878 20879 20958 +3 26183 26184 26324 +3 24426 24327 24326 +3 26325 24270 20922 +3 24327 25619 25618 +3 35845 35909 35553 +3 25374 24164 24547 +3 20317 4012 27666 +3 23732 23546 23889 +3 25663 20263 24964 +3 22542 20898 20195 +3 16151 20195 21328 +3 21401 20034 20195 +3 20898 21401 20195 +3 21401 21766 21580 +3 20034 21401 21580 +3 21766 21963 21868 +3 21580 21766 21868 +3 21963 12633 22543 +3 21868 21963 22543 +3 12633 22545 22158 +3 26815 25936 24587 +3 24636 26929 24586 +3 24587 26929 26815 +3 14043 11957 14246 +3 34674 34802 34673 +3 11957 20983 21066 +3 23807 24914 24137 +3 15671 15536 15672 +3 20983 17102 21066 +3 20959 21042 21041 +3 20958 20959 21041 +3 26324 26325 20922 +3 24110 24426 24466 +3 24270 12274 25447 +3 28737 29954 22944 +3 21573 20570 27375 +3 12817 17103 20570 +3 14947 12817 20570 +3 20401 20317 17103 +3 12817 20401 17103 +3 20195 4012 22542 +3 20401 16769 20317 +3 16769 23337 20898 +3 22542 16769 20898 +3 23337 20035 21401 +3 20898 23337 21401 +3 20035 20325 21766 +3 21401 20035 21766 +3 20325 22058 21963 +3 21766 20325 21963 +3 22058 14847 12633 +3 21963 22058 12633 +3 14847 22644 22545 +3 12633 14847 22545 +3 22644 14089 14043 +3 22545 22644 14043 +3 14089 16763 11957 +3 14043 14089 11957 +3 16763 21152 20983 +3 11957 16763 20983 +3 12991 17102 20983 +3 21152 12991 20983 +3 21225 22354 2938 +3 35744 35553 35613 +3 20922 24270 25447 +3 12274 25427 24557 +3 27752 21572 21573 +3 24652 24225 24019 +3 13523 14947 21572 +3 21571 13523 21572 +3 21507 12817 14947 +3 13523 21507 14947 +3 20146 20401 12817 +3 21507 20146 12817 +3 5419 16769 20401 +3 20146 5419 20401 +3 5419 20151 23337 +3 16769 5419 23337 +3 20151 20230 20035 +3 23337 20151 20035 +3 20230 20053 20325 +3 20035 20230 20325 +3 20053 22154 22058 +3 20325 20053 22058 +3 22154 22551 14847 +3 22058 22154 14847 +3 22551 22743 22644 +3 14847 22551 22644 +3 22743 9861 14089 +3 22644 22743 14089 +3 9861 13807 16763 +3 14089 9861 16763 +3 13807 21238 21152 +3 16763 13807 21152 +3 31520 31607 31519 +3 21162 21248 27837 +3 21032 18642 18545 +3 25447 12274 24557 +3 26731 26621 11529 +3 26054 26196 26053 +3 21211 21571 22552 +3 13092 21211 22552 +3 1603 13523 21571 +3 21211 1603 21571 +3 20576 21507 13523 +3 1603 20576 13523 +3 20145 20146 21507 +3 20576 20145 21507 +3 11638 5419 20146 +3 20145 11638 20146 +3 11638 20196 20151 +3 5419 11638 20151 +3 20196 20036 20230 +3 20151 20196 20230 +3 20036 21581 20053 +3 20230 20036 20053 +3 21581 22250 22154 +3 20053 21581 22154 +3 22250 20062 22551 +3 22154 22250 22551 +3 20062 3020 22743 +3 22551 20062 22743 +3 3020 3604 9861 +3 22743 3020 9861 +3 3604 16762 13807 +3 9861 3604 13807 +3 16762 13950 21238 +3 13807 16762 21238 +3 35825 35715 35937 +3 35698 35923 35718 +3 25427 25295 26216 +3 21792 24217 11669 +3 24557 25427 26216 +3 22346 13092 21506 +3 21506 18928 13698 +3 21480 21211 13092 +3 22346 21480 13092 +3 23249 1603 21211 +3 21480 23249 21211 +3 20236 20576 1603 +3 23249 20236 1603 +3 464 20145 20576 +3 20236 464 20576 +3 464 22444 11638 +3 20145 464 11638 +3 22444 20976 20196 +3 11638 22444 20196 +3 20976 21306 20036 +3 20196 20976 20036 +3 21306 21767 21581 +3 20036 21306 21581 +3 21767 20348 22250 +3 21581 21767 22250 +3 20348 20483 20062 +3 22250 20348 20062 +3 20483 16008 3020 +3 20062 20483 3020 +3 16008 5070 3604 +3 3020 16008 3604 +3 5070 10444 16762 +3 3604 5070 16762 +3 10444 8257 13950 +3 16762 10444 13950 +3 10405 10406 10525 +3 21466 21467 11360 +3 14407 12991 14426 +3 25295 24882 24881 +3 23371 21692 21598 +3 28247 13173 28016 +3 22249 22346 21598 +3 21692 22249 21598 +3 21210 21480 22346 +3 22249 21210 22346 +3 23347 23249 21480 +3 21210 23347 21480 +3 22170 20236 23249 +3 23347 22170 23249 +3 22170 15745 464 +3 20236 22170 464 +3 15745 22347 22444 +3 464 15745 22444 +3 22347 20978 20976 +3 22444 22347 20976 +3 20978 20316 21306 +3 20976 20978 21306 +3 20316 1020 21767 +3 21306 20316 21767 +3 1020 11709 20348 +3 21767 1020 20348 +3 11709 20568 20483 +3 20348 11709 20483 +3 20568 6895 16008 +3 20483 20568 16008 +3 6895 15883 5070 +3 16008 6895 5070 +3 15883 20148 10444 +3 5070 15883 10444 +3 15279 8257 10444 +3 20148 15279 10444 +3 20542 20624 18166 +3 18313 19475 22832 +3 35450 35869 35926 +3 21222 20653 23371 +3 35695 35577 35435 +3 14144 21692 23371 +3 20653 14144 23371 +3 21773 22249 21692 +3 14144 21773 21692 +3 21479 21210 22249 +3 21773 21479 22249 +3 23443 23347 21210 +3 21479 23443 21210 +3 13052 22170 23347 +3 23443 13052 23347 +3 13052 23335 15745 +3 22170 13052 15745 +3 23335 21774 22347 +3 15745 23335 22347 +3 21774 23434 20978 +3 22347 21774 20978 +3 23434 20037 20316 +3 20978 23434 20316 +3 20037 20054 1020 +3 20316 20037 1020 +3 20054 5596 11709 +3 1020 20054 11709 +3 5596 20650 20568 +3 11709 5596 20568 +3 20650 10982 6895 +3 20568 20650 6895 +3 10982 22335 15883 +3 6895 10982 15883 +3 22335 20067 20148 +3 15883 22335 20148 +3 20067 19094 20148 +3 35503 35681 35790 +3 2938 22452 13334 +3 32 17108 8895 +3 12809 16313 21222 +3 30880 30879 27901 +3 22949 20734 20653 +3 21222 22949 20653 +3 3468 14144 20653 +3 20734 3468 20653 +3 3468 21772 21773 +3 14144 3468 21773 +3 21478 21479 21773 +3 21772 21478 21773 +3 23151 23443 21479 +3 21478 23151 21479 +3 23151 14048 13052 +3 23443 23151 13052 +3 14048 23432 23335 +3 13052 14048 23335 +3 23432 21869 21774 +3 23335 23432 21774 +3 21869 20197 23434 +3 21774 21869 23434 +3 20197 21859 20037 +3 23434 20197 20037 +3 21859 21675 20054 +3 20037 21859 20054 +3 21675 13992 5596 +3 20054 21675 5596 +3 13992 20649 20650 +3 5596 13992 20650 +3 20649 9624 10982 +3 20650 20649 10982 +3 9624 20147 22335 +3 10982 9624 22335 +3 20147 20068 20067 +3 22335 20147 20067 +3 14582 14504 14583 +3 35586 35631 35422 +3 35440 35876 35942 +3 24556 25979 16930 +3 26216 25295 24881 +3 20733 20734 22949 +3 17257 27866 12422 +3 21570 3468 20734 +3 20733 21570 20734 +3 21315 21772 3468 +3 21570 21315 3468 +3 21315 21398 21478 +3 21772 21315 21478 +3 23053 23151 21478 +3 21398 23053 21478 +3 23053 21416 14048 +3 23151 23053 14048 +3 21416 23431 23432 +3 14048 21416 23432 +3 23431 13785 21869 +3 23432 23431 21869 +3 13785 21870 20197 +3 21869 13785 20197 +3 21870 20038 21859 +3 20197 21870 21859 +3 20038 21863 21675 +3 21859 20038 21675 +3 21863 4918 13992 +3 21675 21863 13992 +3 4918 20895 20649 +3 13992 4918 20649 +3 20895 2212 9624 +3 20649 20895 9624 +3 2212 20066 20147 +3 9624 2212 20147 +3 18544 18641 18640 +3 18394 17915 19475 +3 19992 20497 16611 +3 20147 20066 19889 +3 24882 24650 23994 +3 20745 25015 24836 +3 13123 26090 14331 +3 22256 20733 21493 +3 22247 22256 21493 +3 21785 21570 20733 +3 22256 21785 20733 +3 21227 21315 21570 +3 21785 21227 21570 +3 21227 21477 21398 +3 21315 21227 21398 +3 22954 23053 21398 +3 21477 22954 21398 +3 22954 21326 21416 +3 23053 22954 21416 +3 21326 23237 23431 +3 21416 21326 23431 +3 23237 202 13785 +3 23431 23237 13785 +3 202 21590 21870 +3 13785 202 21870 +3 21590 21860 20038 +3 21870 21590 20038 +3 21860 21309 21863 +3 20038 21860 21863 +3 21309 20060 4918 +3 21863 21309 4918 +3 20060 20975 20895 +3 4918 20060 20895 +3 20975 2655 2212 +3 20895 20975 2212 +3 2655 20232 20066 +3 2212 2655 20066 +3 26788 26789 24267 +3 17914 20066 20232 +3 3927 14973 15477 +3 25074 25482 25073 +3 24243 24956 24171 +3 24881 24882 23994 +3 25820 20745 24836 +3 24836 25015 24778 +3 22352 22256 22247 +3 13082 22352 22247 +3 14046 21785 22256 +3 22352 14046 22256 +3 21140 21227 21785 +3 14046 21140 21785 +3 21140 21476 21477 +3 21227 21140 21477 +3 21476 22854 22954 +3 21477 21476 22954 +3 22854 21237 21326 +3 22954 22854 21326 +3 21237 23334 23237 +3 21326 21237 23237 +3 23334 20981 202 +3 23237 23334 202 +3 20981 22546 21590 +3 202 20981 21590 +3 22546 20039 21860 +3 21590 22546 21860 +3 20039 20055 21309 +3 21860 20039 21309 +3 20055 20566 20060 +3 21309 20055 20060 +3 20566 21058 20975 +3 20060 20566 20975 +3 21058 13005 2655 +3 20975 21058 2655 +3 21979 16334 16333 +3 1975 19699 15600 +3 22733 22728 21384 +3 13005 18796 2655 +3 27902 15214 29491 +3 34482 19099 27032 +3 23762 24702 24909 +3 20968 13082 22246 +3 14515 20968 22246 +3 22450 22352 13082 +3 20968 22450 13082 +3 21030 14046 22352 +3 22450 21030 22352 +3 20564 21140 14046 +3 21030 20564 14046 +3 20564 20118 21476 +3 21140 20564 21476 +3 20118 13850 22854 +3 21476 20118 22854 +3 13850 20657 21237 +3 22854 13850 21237 +3 20657 23138 23334 +3 21237 20657 23334 +3 23138 9416 20981 +3 23334 23138 20981 +3 9416 21965 22546 +3 20981 9416 22546 +3 21965 21397 20039 +3 22546 21965 20039 +3 21397 21676 20055 +3 20039 21397 20055 +3 21676 20729 20566 +3 20055 21676 20566 +3 20729 21317 21058 +3 20566 20729 21058 +3 21317 20133 13005 +3 21058 21317 13005 +3 20721 20722 18272 +3 21330 21242 6408 +3 20839 20838 20755 +3 20641 20640 20558 +3 19434 13005 20133 +3 21307 23025 14515 +3 32251 29687 27896 +3 20969 20968 14515 +3 23025 20969 14515 +3 23039 22450 20968 +3 20969 23039 20968 +3 20785 21030 22450 +3 23039 20785 22450 +3 20139 20564 21030 +3 20785 20139 21030 +3 20139 20117 20118 +3 20564 20139 20118 +3 20117 13948 13850 +3 20118 20117 13850 +3 13948 20150 20657 +3 13850 13948 20657 +3 20150 22351 23138 +3 20657 20150 23138 +3 22351 20899 9416 +3 23138 22351 9416 +3 20899 21683 21965 +3 9416 20899 21965 +3 21683 21386 21397 +3 21965 21683 21397 +3 21386 21959 21676 +3 21397 21386 21676 +3 21959 21228 20729 +3 21676 21959 20729 +3 21228 21407 21317 +3 20729 21228 21317 +3 18449 18544 18448 +3 19642 21410 20397 +3 29635 22383 29496 +3 20595 20677 24305 +3 21385 22733 21384 +3 14058 12468 16485 +3 18912 21865 21960 +3 15197 23025 21307 +3 21955 15197 21307 +3 20970 20969 23025 +3 15197 20970 23025 +3 16935 23039 20969 +3 20970 16935 20969 +3 20191 20785 23039 +3 16935 20191 23039 +3 20191 21311 20139 +3 20785 20191 20139 +3 21311 20116 20117 +3 20139 21311 20117 +3 20116 3345 13948 +3 20117 20116 13948 +3 3345 15406 20150 +3 13948 3345 20150 +3 15406 22255 22351 +3 20150 15406 22351 +3 22255 20979 20899 +3 22351 22255 20899 +3 20979 20565 21683 +3 20899 20979 21683 +3 20565 21685 21386 +3 21683 20565 21386 +3 21685 22245 21959 +3 21386 21685 21959 +3 22245 21316 21228 +3 21959 22245 21228 +3 24267 24350 26788 +3 21228 21316 21407 +3 13431 13855 125 +3 35733 35879 35351 +3 20131 11279 13340 +3 2790 13425 21764 +3 19362 20673 29828 +3 35517 35591 35478 +3 14520 15197 21955 +3 21954 14520 21955 +3 21585 20970 15197 +3 14520 21585 15197 +3 15604 16935 20970 +3 21585 15604 20970 +3 21880 20191 16935 +3 15604 21880 16935 +3 21880 9889 21311 +3 20191 21880 21311 +3 9889 20115 20116 +3 21311 9889 20116 +3 20115 22754 3345 +3 20116 20115 3345 +3 22754 15156 15406 +3 3345 22754 15406 +3 15156 21059 22255 +3 15406 15156 22255 +3 21059 22745 20979 +3 22255 21059 20979 +3 22745 22656 20565 +3 20979 22745 20565 +3 22656 21387 21685 +3 20565 22656 21685 +3 21387 20056 22245 +3 21685 21387 22245 +3 20056 21406 21316 +3 22245 20056 21316 +3 17694 17599 17600 +3 35613 35490 35895 +3 21497 20485 16010 +3 15092 30024 3982 +3 13497 21697 21674 +3 21409 22845 22827 +3 23146 18417 23438 +3 10406 10527 10525 +3 16791 19018 19760 +3 23437 14520 21954 +3 23146 23340 19761 +3 21679 21585 14520 +3 23437 21679 14520 +3 20572 15604 21585 +3 21679 20572 21585 +3 21975 21880 15604 +3 20572 21975 15604 +3 21975 13463 9889 +3 21880 21975 9889 +3 13463 12965 20115 +3 9889 13463 20115 +3 12965 22557 22754 +3 20115 12965 22754 +3 22557 14050 15156 +3 22754 22557 15156 +3 14050 20814 21059 +3 15156 14050 21059 +3 20814 20897 22745 +3 21059 20814 22745 +3 20897 20728 22656 +3 22745 20897 22656 +3 20728 21956 21387 +3 22656 20728 21387 +3 21956 21677 20056 +3 21387 21956 20056 +3 21677 21964 21406 +3 20056 21677 21406 +3 5074 25995 4669 +3 28238 28239 25291 +3 14239 15091 11106 +3 15733 15463 13945 +3 5337 4663 12557 +3 24303 25111 24302 +3 17989 23126 23224 +3 30806 35848 30692 +3 27722 21162 27837 +3 27497 11512 6980 +3 23340 23437 19761 +3 22248 21679 23437 +3 23340 22248 23437 +3 20735 20572 21679 +3 22248 20735 21679 +3 22071 21975 20572 +3 20735 22071 20572 +3 22071 5460 13463 +3 21975 22071 13463 +3 5460 20114 12965 +3 13463 5460 12965 +3 20114 22556 22557 +3 12965 20114 22557 +3 22556 21150 14050 +3 22557 22556 14050 +3 21150 20732 20814 +3 14050 21150 20814 +3 20732 20977 20897 +3 20814 20732 20897 +3 20977 22059 20728 +3 20897 20977 20728 +3 22059 21209 21956 +3 20728 22059 21956 +3 21209 21865 21677 +3 21956 21209 21677 +3 23216 18698 23215 +3 21677 21865 21964 +3 12361 21400 20811 +3 20127 20126 17507 +3 29134 29135 28753 +3 20559 20641 20558 +3 147 21492 19412 +3 16356 19437 18144 +3 20128 20127 17507 +3 21488 35548 7080 +3 23242 23340 23146 +3 23438 23242 23146 +3 22345 22248 23340 +3 23242 22345 23340 +3 22345 21148 20735 +3 22248 22345 20735 +3 21148 22167 22071 +3 20735 21148 22071 +3 22167 13901 5460 +3 22071 22167 5460 +3 13901 20113 20114 +3 5460 13901 20114 +3 20113 22458 22556 +3 20114 20113 22556 +3 22458 20737 21150 +3 22556 22458 21150 +3 20737 20651 20732 +3 21150 20737 20732 +3 20651 22446 20977 +3 20732 20651 20977 +3 22446 22060 22059 +3 20977 22446 22059 +3 22060 21388 21209 +3 22059 22060 21209 +3 21388 21960 21865 +3 21209 21388 21865 +3 20722 950 20723 +3 21865 18912 21964 +3 21298 21389 17894 +3 12894 13272 21592 +3 25113 20670 20671 +3 18491 19427 23224 +3 21042 21128 21041 +3 14246 29539 14043 +3 19337 14934 15485 +3 32 8895 10589 +3 21407 18614 21317 +3 21400 21764 20064 +3 20304 20389 20303 +3 20105 20308 19711 +3 19321 22627 22528 +3 16155 15732 23324 +3 19365 18868 21769 +3 16462 14379 18118 +3 19537 18417 23146 +3 21626 28555 28684 +3 23144 23242 23438 +3 23341 23144 23438 +3 12138 22345 23242 +3 23144 12138 23242 +3 22548 21148 22345 +3 12138 22548 22345 +3 22548 11720 22167 +3 21148 22548 22167 +3 11720 4505 13901 +3 22167 11720 13901 +3 4505 20112 20113 +3 13901 4505 20113 +3 20112 21789 22458 +3 20113 20112 22458 +3 21789 20149 20737 +3 22458 21789 20737 +3 20149 20400 20651 +3 20737 20149 20651 +3 20400 22544 22446 +3 20651 20400 22446 +3 22544 20581 22060 +3 22446 22544 22060 +3 20581 1449 21388 +3 22060 20581 21388 +3 1449 21864 21960 +3 21388 1449 21960 +3 20105 20617 20616 +3 21039 21040 18647 +3 20637 20718 20636 +3 17419 17507 17418 +3 24650 24599 24719 +3 24771 12275 23608 +3 23994 24650 24719 +3 24878 25451 20514 +3 24875 24878 20514 +3 35836 35692 35622 +3 35191 7000 35190 +3 26328 26329 24659 +3 21073 12008 23679 +3 1537 25379 22530 +3 26173 26174 26314 +3 5466 9012 14090 +3 23592 20747 25363 +3 26458 26253 26555 +3 6789 11975 8867 +3 25251 23276 21244 +3 4382 24016 24817 +3 13297 2229 4663 +3 11385 16768 3928 +3 18358 19491 19637 +3 20307 17704 20392 +3 15074 15608 5337 +3 13471 13665 12171 +3 23213 23311 23212 +3 33231 7522 7521 +3 21578 4907 13423 +3 11512 28137 6980 +3 19362 21049 23128 +3 19011 18912 21864 +3 21953 23341 20948 +3 23128 21953 20948 +3 23046 23144 23341 +3 21953 23046 23341 +3 22950 12138 23144 +3 23046 22950 23144 +3 22648 22548 12138 +3 22950 22648 12138 +3 22648 22264 11720 +3 22548 22648 11720 +3 22264 22152 4505 +3 11720 22264 4505 +3 22152 20111 20112 +3 4505 22152 20112 +3 20111 21788 21789 +3 20112 20111 21789 +3 21788 21762 20149 +3 21789 21788 20149 +3 21762 20144 20400 +3 20149 21762 20400 +3 20144 22643 22544 +3 20400 20144 22544 +3 22643 15341 20581 +3 22544 22643 20581 +3 15341 21298 1449 +3 20581 15341 1449 +3 19429 22459 22651 +3 1449 21298 21864 +3 16613 20192 20135 +3 20777 18344 18439 +3 20279 20280 21119 +3 20491 21300 21299 +3 24599 23612 24671 +3 24719 24599 24671 +3 24139 25580 24671 +3 23612 24139 24671 +3 21069 24550 25580 +3 24139 21069 25580 +3 25335 24787 13893 +3 24529 23803 24550 +3 25032 25968 24376 +3 25334 25335 13893 +3 23543 23662 24568 +3 24722 23267 23555 +3 25163 26209 25536 +3 26555 23926 26556 +3 26175 26316 26315 +3 20659 21073 23679 +3 34685 34684 34556 +3 35614 35371 35580 +3 26178 26179 26319 +3 23638 24886 20267 +3 26179 26320 26319 +3 16923 23156 15601 +3 24817 24695 25299 +3 25862 24080 24413 +3 15673 25189 15810 +3 19121 953 954 +3 3583 3928 9394 +3 24387 24457 26213 +3 16925 16926 13244 +3 1030 3583 9394 +3 15280 1030 9394 +3 13244 15280 9394 +3 16013 16154 23027 +3 19983 24532 24272 +3 17980 20373 20456 +3 32199 32300 32198 +3 14619 13558 16037 +3 21049 20154 23128 +3 22356 21049 19362 +3 21857 21953 23128 +3 20154 21857 23128 +3 21857 22947 23046 +3 21953 21857 23046 +3 22850 22950 23046 +3 22947 22850 23046 +3 16011 22648 22950 +3 22850 16011 22950 +3 16011 22360 22264 +3 22648 16011 22264 +3 22360 21678 22152 +3 22264 22360 22152 +3 21678 20110 20111 +3 22152 21678 20111 +3 20110 21695 21788 +3 20111 20110 21788 +3 21695 12805 21762 +3 21788 21695 21762 +3 12805 20132 20144 +3 21762 12805 20144 +3 20132 23430 22643 +3 20144 20132 22643 +3 23430 20810 15341 +3 22643 23430 15341 +3 20810 21389 21298 +3 15341 20810 21298 +3 20063 20484 6117 +3 19821 19411 32568 +3 13084 16613 20135 +3 20192 20105 20104 +3 5416 14345 11121 +3 21414 21415 22925 +3 21069 24529 24550 +3 381 380 17630 +3 24529 24412 24328 +3 24426 24620 24466 +3 24320 22882 22881 +3 24966 1520 24579 +3 24110 24466 24432 +3 25581 25583 23348 +3 12020 27318 27317 +3 23948 26255 26115 +3 24366 24705 24199 +3 22530 12107 23058 +3 24610 23948 26115 +3 20842 14153 25510 +3 26056 23857 24729 +3 25602 16916 25603 +3 7656 7771 481 +3 26320 24628 23771 +3 25369 20750 20749 +3 22755 262 23878 +3 21537 25631 24948 +3 23921 262 22755 +3 25299 23921 22755 +3 24308 20429 23717 +3 262 25251 23878 +3 24357 25727 24160 +3 19139 19983 12537 +3 24457 23433 26213 +3 24259 11690 24387 +3 15031 16013 16009 +3 23657 21055 25484 +3 8155 15031 16009 +3 24239 25446 22296 +3 16009 16013 23027 +3 16154 20782 20783 +3 23017 23115 23016 +3 17090 16452 16925 +3 23621 23654 25647 +3 31933 31932 31834 +3 32532 32533 32641 +3 21223 21566 20154 +3 21049 21223 20154 +3 21856 21857 20154 +3 21566 21856 20154 +3 22848 22947 21857 +3 21856 22848 21857 +3 20224 22850 22947 +3 22848 20224 22947 +3 20224 20488 16011 +3 22850 20224 16011 +3 20488 22457 22360 +3 16011 20488 22360 +3 22457 21054 21678 +3 22360 22457 21678 +3 21054 20109 20110 +3 21678 21054 20110 +3 20109 7800 21695 +3 20110 20109 21695 +3 7800 3338 12805 +3 21695 7800 12805 +3 3338 13200 20132 +3 12805 3338 20132 +3 13200 20482 23430 +3 20132 13200 23430 +3 20482 20023 20810 +3 23430 20482 20810 +3 7409 7292 6873 +3 16169 3070 15623 +3 13272 12894 22659 +3 19378 23421 19771 +3 20050 20541 20540 +3 20497 15200 16611 +3 12894 11860 22634 +3 23803 24529 24328 +3 24412 24224 23727 +3 24328 24412 23727 +3 24324 22586 23727 +3 24224 24324 23727 +3 35466 35902 35659 +3 24324 17576 22586 +3 31264 31265 31329 +3 24018 23725 23749 +3 23943 22877 25518 +3 24774 23766 23757 +3 25252 23578 24625 +3 22448 26004 22645 +3 29542 35633 35514 +3 23885 16024 25860 +3 17102 14390 25657 +3 25245 24329 21660 +3 23872 24563 25090 +3 23928 25803 24469 +3 26174 26175 26315 +3 25211 24870 23919 +3 25745 25887 25886 +3 34600 34478 19432 +3 23941 13116 25293 +3 24435 24352 25095 +3 21244 23276 12186 +3 25278 25293 12186 +3 14273 12535 20738 +3 22591 25278 12186 +3 30152 22862 22961 +3 22862 22763 22863 +3 22863 22962 22961 +3 23060 23059 22961 +3 23059 23157 30418 +3 22962 23060 22961 +3 30552 23157 23256 +3 23060 23158 23059 +3 20393 17704 17705 +3 23158 23256 23157 +3 24130 24839 24838 +3 23451 30819 23353 +3 12995 24124 25514 +3 24045 12360 4382 +3 16926 15280 13244 +3 23027 16154 20783 +3 28751 28884 23779 +3 16452 16926 16925 +3 25647 28108 24830 +3 24229 19250 19569 +3 33997 33996 33861 +3 31555 31554 26617 +3 21137 21596 21566 +3 21223 21137 21566 +3 21855 21856 21566 +3 21596 21855 21566 +3 22748 22848 21856 +3 21855 22748 21856 +3 21053 20224 22848 +3 22748 21053 22848 +3 21053 20736 20488 +3 20224 21053 20488 +3 20736 22555 22457 +3 20488 20736 22457 +3 22555 20971 21054 +3 22457 22555 21054 +3 20971 21405 20109 +3 21054 20971 20109 +3 21405 22655 7800 +3 20109 21405 7800 +3 22655 13277 3338 +3 7800 22655 3338 +3 13277 23040 13200 +3 3338 13277 13200 +3 23040 20567 20482 +3 13200 23040 20482 +3 23331 20023 20482 +3 20567 23331 20482 +3 19210 20023 23331 +3 27032 18508 18723 +3 20047 20048 20533 +3 18513 23331 20051 +3 20306 20307 20391 +3 3538 4952 14334 +3 23725 20904 20905 +3 24126 25038 22465 +3 25445 25444 24822 +3 24579 1520 25208 +3 25165 24497 1998 +3 23585 24841 23508 +3 25979 26121 21334 +3 25232 24896 25005 +3 35585 35861 35526 +3 26034 26176 26175 +3 1520 24320 25208 +3 34413 34412 34274 +3 26033 26034 26175 +3 25878 25879 26020 +3 25300 23873 262 +3 6844 23072 2952 +3 25594 25595 25736 +3 22081 22177 22176 +3 29214 22176 22272 +3 22177 22273 22272 +3 22273 29352 22272 +3 22273 22370 22369 +3 22467 22369 22370 +3 22370 22468 22467 +3 22467 22468 22566 +3 22468 22567 22566 +3 22566 22665 29761 +3 22567 22666 22665 +3 22764 22665 22666 +3 22666 22765 22764 +3 22764 22763 29890 +3 22864 22863 22764 +3 22765 22864 22764 +3 22963 22962 22863 +3 22864 22963 22863 +3 23061 23060 22962 +3 22963 23061 22962 +3 23159 23158 23060 +3 23061 23159 23060 +3 23257 23256 23158 +3 23159 23257 23158 +3 23354 23353 23256 +3 23257 23354 23256 +3 13196 24005 2922 +3 18516 23451 13526 +3 23798 25067 20514 +3 18516 30819 23451 +3 5828 5556 17090 +3 25998 25445 24822 +3 4948 15637 20326 +3 6874 19093 30339 +3 18063 18154 18062 +3 22261 21224 21137 +3 33862 33997 33861 +3 21224 21690 21596 +3 21137 21224 21596 +3 21759 21855 21596 +3 21690 21759 21596 +3 22649 22748 21855 +3 21759 22649 21855 +3 13656 21053 22748 +3 22649 13656 22748 +3 13656 21149 20736 +3 21053 13656 20736 +3 21149 22654 22555 +3 20736 21149 22555 +3 22654 20891 20971 +3 22555 22654 20971 +3 20891 20481 21405 +3 20971 20891 21405 +3 20481 22361 22655 +3 21405 20481 22655 +3 22361 14324 13277 +3 22655 22361 13277 +3 14324 22941 23040 +3 13277 14324 23040 +3 22941 20648 20567 +3 23040 22941 20567 +3 20648 20051 23331 +3 20567 20648 23331 +3 17936 17754 22924 +3 22819 22918 22818 +3 30153 19798 19800 +3 20215 20214 20129 +3 19018 16791 25 +3 22845 22925 13497 +3 13269 26288 24468 +3 21515 24097 23881 +3 26108 24959 12189 +3 24747 24126 22465 +3 25639 25632 24522 +3 25749 25750 25891 +3 12191 13269 24284 +3 25608 25750 25749 +3 25607 25608 25749 +3 25892 26034 26033 +3 25750 25892 25891 +3 26176 26317 26316 +3 25891 25892 26033 +3 16440 16439 25616 +3 26175 26176 26316 +3 21985 21890 21891 +3 26163 26304 26303 +3 21891 21986 21985 +3 18424 5891 6023 +3 21986 22082 22081 +3 21985 21986 22081 +3 22082 22178 22177 +3 22081 22082 22177 +3 22178 22274 22273 +3 22177 22178 22273 +3 22274 22371 22370 +3 22273 22274 22370 +3 22371 22469 22468 +3 22370 22371 22468 +3 22469 22568 22567 +3 22468 22469 22567 +3 22568 22667 22666 +3 22567 22568 22666 +3 22766 22765 22666 +3 22667 22766 22666 +3 22865 22864 22765 +3 22766 22865 22765 +3 22964 22963 22864 +3 22865 22964 22864 +3 23062 23061 22963 +3 22964 23062 22963 +3 23160 23159 23061 +3 23062 23160 23061 +3 23258 23257 23159 +3 23160 23258 23159 +3 23355 23354 23257 +3 23258 23355 23257 +3 23452 23451 23354 +3 23355 23452 23354 +3 1998 23703 13526 +3 23452 15453 23451 +3 25165 9314 1019 +3 15453 9314 13526 +3 27018 27135 27134 +3 5556 16452 17090 +3 17570 23243 18993 +3 19637 19491 17982 +3 33807 32684 22261 +3 21224 18300 21690 +3 5489 21783 18300 +3 21758 21759 21690 +3 21783 21758 21690 +3 8581 22649 21759 +3 21758 8581 21759 +3 12984 13656 22649 +3 8581 12984 22649 +3 12984 22747 21149 +3 13656 12984 21149 +3 22747 22753 22654 +3 21149 22747 22654 +3 22753 20890 20891 +3 22654 22753 20891 +3 20890 3881 20481 +3 20891 20890 20481 +3 3881 22265 22361 +3 20481 3881 22361 +3 22265 14049 14324 +3 22361 22265 14324 +3 14049 22842 22941 +3 14324 14049 22941 +3 22842 20730 20648 +3 22941 22842 20648 +3 20730 20024 20051 +3 20648 20730 20051 +3 18735 18637 18638 +3 28477 29955 28478 +3 13855 12361 125 +3 20387 20386 20301 +3 20800 20801 20882 +3 20533 21301 21300 +3 24500 24606 20432 +3 1 25706 25564 +3 23627 24698 24678 +3 25203 24577 24895 +3 24894 24747 22465 +3 26317 24127 22366 +3 18926 25371 24228 +3 25032 23649 25968 +3 26316 26317 22366 +3 26162 26163 26303 +3 25229 7003 23977 +3 21701 28423 21608 +3 25488 25490 23890 +3 21609 21702 21701 +3 21796 21701 21702 +3 21702 21797 21796 +3 28675 28546 21796 +3 21797 21892 21891 +3 21796 21797 21891 +3 21892 21987 21986 +3 21891 21892 21986 +3 21987 22083 22082 +3 21986 21987 22082 +3 22083 22179 22178 +3 22082 22083 22178 +3 22179 22275 22274 +3 22178 22179 22274 +3 22275 22372 22371 +3 22274 22275 22371 +3 22372 22470 22469 +3 22371 22372 22469 +3 22470 22569 22568 +3 22469 22470 22568 +3 22569 22668 22667 +3 22568 22569 22667 +3 22668 22767 22766 +3 22667 22668 22766 +3 22866 22865 22766 +3 22767 22866 22766 +3 22965 22964 22865 +3 22866 22965 22865 +3 23063 23062 22964 +3 22965 23063 22964 +3 23161 23160 23062 +3 23063 23161 23062 +3 23259 23258 23160 +3 23161 23259 23160 +3 23356 23355 23258 +3 23259 23356 23258 +3 23453 23452 23355 +3 23356 23453 23355 +3 2905 15453 23452 +3 23453 2905 23452 +3 1019 9314 15453 +3 2905 1019 15453 +3 5354 15675 5828 +3 31995 31994 31893 +3 22627 22626 22527 +3 12808 20090 34343 +3 18355 13866 15365 +3 18534 22923 17754 +3 17911 21312 18300 +3 18300 21783 21690 +3 21663 21758 21783 +3 5489 21663 21783 +3 14516 8581 21758 +3 21663 14516 21758 +3 20225 12984 8581 +3 14516 20225 8581 +3 20225 22847 22747 +3 12984 20225 22747 +3 22847 22853 22753 +3 22747 22847 22753 +3 22853 20138 20890 +3 22753 22853 20890 +3 20138 20108 3881 +3 20890 20138 3881 +3 20108 22168 22265 +3 3881 20108 22265 +3 22168 21063 14049 +3 22265 22168 14049 +3 21063 22742 22842 +3 14049 21063 22842 +3 22742 20808 20730 +3 22842 22742 20730 +3 20808 23332 20024 +3 20730 20808 20024 +3 18355 19408 19933 +3 19011 21864 19112 +3 20046 20047 20491 +3 30760 24777 12920 +3 13866 18355 19933 +3 25767 26247 25766 +3 24770 24214 23947 +3 24654 24793 24349 +3 24127 24146 24075 +3 24895 24894 22465 +3 24086 16597 26287 +3 22366 24127 24075 +3 28069 21426 28186 +3 11644 13695 11569 +3 21427 21517 21516 +3 28303 28186 21516 +3 21517 21610 21609 +3 21516 21517 21609 +3 21610 21703 21702 +3 21609 21610 21702 +3 21703 21798 21797 +3 21702 21703 21797 +3 21798 21893 21892 +3 21797 21798 21892 +3 21893 21988 21987 +3 21892 21893 21987 +3 21988 22084 22083 +3 21987 21988 22083 +3 22084 22180 22179 +3 22083 22084 22179 +3 22180 22276 22275 +3 22179 22180 22275 +3 22276 22373 22372 +3 22275 22276 22372 +3 22373 22471 22470 +3 22372 22373 22470 +3 22471 22570 22569 +3 22470 22471 22569 +3 22570 22669 22668 +3 22569 22570 22668 +3 22669 22768 22767 +3 22668 22669 22767 +3 22867 22866 22767 +3 22768 22867 22767 +3 22966 22965 22866 +3 22867 22966 22866 +3 23064 23063 22965 +3 22966 23064 22965 +3 23162 23161 23063 +3 23064 23162 23063 +3 23260 23259 23161 +3 23162 23260 23161 +3 23357 23356 23259 +3 23260 23357 23259 +3 23454 23453 23356 +3 23357 23454 23356 +3 11382 2905 23453 +3 23454 11382 23453 +3 12745 1019 2905 +3 11382 12745 2905 +3 732 3036 3197 +3 12745 3036 1019 +3 22726 22725 22626 +3 22627 22726 22626 +3 19437 16211 18484 +3 17102 12991 14407 +3 15194 5489 21312 +3 19418 19527 19515 +3 21662 21663 5489 +3 15194 21662 5489 +3 22549 14516 21663 +3 21662 22549 21663 +3 20396 20225 14516 +3 22549 20396 14516 +3 20396 13989 22847 +3 20225 20396 22847 +3 13989 22953 22853 +3 22847 13989 22853 +3 22953 21310 20138 +3 22853 22953 20138 +3 21310 20726 20108 +3 20138 21310 20108 +3 20726 21787 22168 +3 20108 20726 22168 +3 21787 21064 21063 +3 22168 21787 21063 +3 21064 22159 22742 +3 21063 21064 22742 +3 22159 21961 20808 +3 22742 22159 20808 +3 20326 15637 20241 +3 20808 21961 23332 +3 26680 26679 24242 +3 27027 35363 35909 +3 20103 20615 20102 +3 20640 20721 20639 +3 22825 22824 22725 +3 22726 22825 22725 +3 22924 22923 22824 +3 22825 22924 22824 +3 18061 18062 20532 +3 17802 20394 17705 +3 23270 23367 16933 +3 24182 30482 24255 +3 21726 23880 24793 +3 24654 21726 24793 +3 7759 24770 23947 +3 21726 24367 24332 +3 24146 24968 25099 +3 24577 25203 24214 +3 26255 26287 23566 +3 24075 24146 25099 +3 21426 21336 21427 +3 25302 24981 24955 +3 21337 21428 21427 +3 21336 21337 21427 +3 21428 21518 21517 +3 21427 21428 21517 +3 21518 21611 21610 +3 21517 21518 21610 +3 21611 21704 21703 +3 21610 21611 21703 +3 21704 21799 21798 +3 21703 21704 21798 +3 21799 21894 21893 +3 21798 21799 21893 +3 21894 21989 21988 +3 21893 21894 21988 +3 21989 22085 22084 +3 21988 21989 22084 +3 22085 22181 22180 +3 22084 22085 22180 +3 22181 22277 22276 +3 22180 22181 22276 +3 22277 22374 22373 +3 22276 22277 22373 +3 22374 22472 22471 +3 22373 22374 22471 +3 22472 22571 22570 +3 22471 22472 22570 +3 22571 22670 22669 +3 22570 22571 22669 +3 22670 22769 22768 +3 22669 22670 22768 +3 22769 22868 22867 +3 22768 22769 22867 +3 22967 22966 22867 +3 22868 22967 22867 +3 23065 23064 22966 +3 22967 23065 22966 +3 23163 23162 23064 +3 23065 23163 23064 +3 23261 23260 23162 +3 23163 23261 23162 +3 23358 23357 23260 +3 23261 23358 23260 +3 23455 23454 23357 +3 23358 23455 23357 +3 13967 11382 23454 +3 23455 13967 23454 +3 13386 12745 11382 +3 13967 13386 11382 +3 732 3197 12034 +3 13386 3197 12745 +3 16767 21505 16617 +3 4122 3335 16446 +3 13566 14259 13567 +3 1646 9417 16045 +3 20717 20799 20798 +3 18608 18962 18418 +3 29152 28737 22944 +3 21661 21662 15194 +3 20778 21661 15194 +3 22451 22549 21662 +3 21661 22451 21662 +3 21139 20396 22549 +3 22451 21139 22549 +3 21139 13401 13989 +3 20396 21139 13989 +3 13401 15067 22953 +3 13989 13401 22953 +3 15067 20516 21310 +3 22953 15067 21310 +3 20516 20107 20726 +3 21310 20516 20726 +3 20107 21694 21787 +3 20726 20107 21787 +3 21694 20819 21064 +3 21787 21694 21064 +3 20819 22062 22159 +3 21064 20819 22159 +3 22062 22056 21961 +3 22159 22062 21961 +3 18234 21961 22056 +3 13015 30503 25433 +3 13078 13172 13077 +3 29002 28595 24210 +3 20473 20558 20472 +3 20881 20961 20960 +3 12538 12449 11105 +3 8114 13566 12512 +3 14259 11105 13567 +3 17249 15736 5354 +3 4122 15736 17249 +3 16600 4122 16446 +3 15675 5556 5828 +3 8114 12512 15476 +3 11615 13848 13946 +3 15477 8114 15476 +3 28368 27143 27520 +3 23880 21726 24332 +3 25110 25430 24921 +3 24367 25621 25620 +3 24770 24577 24214 +3 24672 7759 23661 +3 24968 13957 14153 +3 24577 24894 24895 +3 26287 23461 23566 +3 25099 24968 14153 +3 21247 21337 27952 +3 16597 25435 26287 +3 21248 21338 21337 +3 21247 21248 21337 +3 21338 21429 21428 +3 21337 21338 21428 +3 21429 21519 21518 +3 21428 21429 21518 +3 21519 21612 21611 +3 21518 21519 21611 +3 21612 21705 21704 +3 21611 21612 21704 +3 21705 21800 21799 +3 21704 21705 21799 +3 21800 21895 21894 +3 21799 21800 21894 +3 21895 21990 21989 +3 21894 21895 21989 +3 21990 22086 22085 +3 21989 21990 22085 +3 22086 22182 22181 +3 22085 22086 22181 +3 22182 22278 22277 +3 22181 22182 22277 +3 22278 22375 22374 +3 22277 22278 22374 +3 22375 22473 22472 +3 22374 22375 22472 +3 22473 22572 22571 +3 22472 22473 22571 +3 22572 22671 22670 +3 22571 22572 22670 +3 22671 22770 22769 +3 22670 22671 22769 +3 22770 22869 22868 +3 22769 22770 22868 +3 22968 22967 22868 +3 22869 22968 22868 +3 23066 23065 22967 +3 22968 23066 22967 +3 23164 23163 23065 +3 23066 23164 23065 +3 23262 23261 23163 +3 23164 23262 23163 +3 23359 23358 23261 +3 23262 23359 23261 +3 23456 23455 23358 +3 23359 23456 23358 +3 4387 13967 23455 +3 23456 4387 23455 +3 8049 13386 13967 +3 4387 8049 13967 +3 1519 15873 12034 +3 8049 12034 13386 +3 11615 14139 12872 +3 4939 11615 12872 +3 13566 13567 12512 +3 27521 28368 27520 +3 20813 18518 21145 +3 16334 16484 16333 +3 22441 21878 18901 +3 9417 16044 16045 +3 16178 20779 20674 +3 20287 21661 20778 +3 21878 20287 20778 +3 21233 22451 21661 +3 20287 21233 21661 +3 21226 21139 22451 +3 21233 21226 22451 +3 21226 17098 13401 +3 21139 21226 13401 +3 17098 23052 15067 +3 13401 17098 15067 +3 23052 22151 20516 +3 15067 23052 20516 +3 22151 23234 20107 +3 20516 22151 20107 +3 23234 21601 21694 +3 20107 23234 21694 +3 21601 20818 20819 +3 21694 21601 20819 +3 20818 21967 22062 +3 20819 20818 22062 +3 22923 18534 22922 +3 22062 21967 22056 +3 33188 33293 33187 +3 20871 20951 20950 +3 14151 13497 21674 +3 18355 15365 19491 +3 30226 30093 21542 +3 20640 20639 20557 +3 33465 17695 19820 +3 16933 16767 16617 +3 13946 13848 16446 +3 13848 16600 16446 +3 3335 4122 17249 +3 15736 15675 5354 +3 20700 20699 20783 +3 23327 20964 20699 +3 14139 11615 13946 +3 20782 20700 20783 +3 21505 20040 20032 +3 23409 4939 23408 +3 23367 16767 16933 +3 11234 8527 13762 +3 25880 26022 26021 +3 23514 24411 20263 +3 24332 24367 25620 +3 13957 24411 23514 +3 14153 13957 23514 +3 11614 24879 24874 +3 24411 23516 20263 +3 22394 22298 25521 +3 24955 24981 23652 +3 21162 21249 21248 +3 31702 31701 31606 +3 21249 21339 21338 +3 21248 21249 21338 +3 21339 21430 21429 +3 21338 21339 21429 +3 21430 21520 21519 +3 21429 21430 21519 +3 21520 21613 21612 +3 21519 21520 21612 +3 21613 21706 21705 +3 21612 21613 21705 +3 21706 21801 21800 +3 21705 21706 21800 +3 21801 21896 21895 +3 21800 21801 21895 +3 21896 21991 21990 +3 21895 21896 21990 +3 21991 22087 22086 +3 21990 21991 22086 +3 22087 22183 22182 +3 22086 22087 22182 +3 22183 22279 22278 +3 22182 22183 22278 +3 22279 22376 22375 +3 22278 22279 22375 +3 22376 22474 22473 +3 22375 22376 22473 +3 22474 22573 22572 +3 22473 22474 22572 +3 22672 22671 22572 +3 22573 22672 22572 +3 22672 22771 22770 +3 22671 22672 22770 +3 22771 22870 22869 +3 22770 22771 22869 +3 22870 22969 22968 +3 22869 22870 22968 +3 23067 23066 22968 +3 22969 23067 22968 +3 23165 23164 23066 +3 23067 23165 23066 +3 23263 23262 23164 +3 23165 23263 23164 +3 23360 23359 23262 +3 23263 23360 23262 +3 23457 23456 23359 +3 23360 23457 23359 +3 9404 4387 23456 +3 23457 9404 23456 +3 14235 8049 4387 +3 9404 14235 4387 +3 1519 12034 8049 +3 14235 1519 8049 +3 4939 12872 23408 +3 24142 23582 12997 +3 16617 21505 20032 +3 17007 7074 9740 +3 26695 26694 24723 +3 28249 27316 17260 +3 20153 23030 22441 +3 28848 21544 28849 +3 21973 21878 22441 +3 23030 21973 22441 +3 20286 20287 21878 +3 21973 20286 21878 +3 22533 21233 20287 +3 20286 22533 20287 +3 21314 21226 21233 +3 22533 21314 21233 +3 21314 20405 17098 +3 21226 21314 17098 +3 20405 23442 23052 +3 17098 20405 23052 +3 23442 21584 22151 +3 23052 23442 22151 +3 21584 21760 23234 +3 22151 21584 23234 +3 21760 21602 21601 +3 23234 21760 21601 +3 21602 20234 20818 +3 21601 21602 20818 +3 20234 21145 21967 +3 20818 20234 21967 +3 20874 20954 20953 +3 23341 23438 18417 +3 20541 20563 21383 +3 20723 18274 18273 +3 21592 12918 4907 +3 23956 23955 23896 +3 21764 20065 20064 +3 21577 13423 13954 +3 20302 20301 20215 +3 13954 13423 21755 +3 15091 13959 19982 +3 1623 14239 11106 +3 13959 20048 20047 +3 15597 23367 15464 +3 13180 14250 14155 +3 28818 28951 28817 +3 20470 20469 20385 +3 13318 17007 9740 +3 20961 20962 21044 +3 25621 24108 24536 +3 25117 29260 24668 +3 19994 20074 19993 +3 23516 25236 25097 +3 20074 20159 20073 +3 24798 23827 24190 +3 20159 20245 20158 +3 5276 15493 15543 +3 33998 33997 33862 +3 21224 22261 17911 +3 6411 34216 6283 +3 23214 23312 23213 +3 23409 23408 23311 +3 20301 20386 20300 +3 20637 20636 20554 +3 24072 24071 25249 +3 21131 21130 21044 +3 26248 25868 26120 +3 24648 26248 26120 +3 25097 25236 16597 +3 24281 25479 24755 +3 25777 24281 25435 +3 16597 25777 25435 +3 21075 21163 21162 +3 30290 30362 12215 +3 21163 21250 21249 +3 21162 21163 21249 +3 21250 21340 21339 +3 21249 21250 21339 +3 21340 21431 21430 +3 21339 21340 21430 +3 21431 21521 21520 +3 21430 21431 21520 +3 21521 21614 21613 +3 21520 21521 21613 +3 21614 21707 21706 +3 21613 21614 21706 +3 21707 21802 21801 +3 21706 21707 21801 +3 21802 21897 21896 +3 21801 21802 21896 +3 21897 21992 21991 +3 21896 21897 21991 +3 21992 22088 22087 +3 21991 21992 22087 +3 22088 22184 22183 +3 22087 22088 22183 +3 22184 22280 22279 +3 22183 22184 22279 +3 22280 22377 22376 +3 22279 22280 22376 +3 22377 22475 22474 +3 22376 22377 22474 +3 22475 22574 22573 +3 22474 22475 22573 +3 22574 22673 22672 +3 22573 22574 22672 +3 22772 22771 22672 +3 22673 22772 22672 +3 22772 22871 22870 +3 22771 22772 22870 +3 22871 22970 22969 +3 22870 22871 22969 +3 23068 23067 22969 +3 22970 23068 22969 +3 23166 23165 23067 +3 23068 23166 23067 +3 23264 23263 23165 +3 23166 23264 23165 +3 23361 23360 23263 +3 23264 23361 23263 +3 23458 23457 23360 +3 23361 23458 23360 +3 9772 9404 23457 +3 2273 23458 23459 +3 8867 14235 9404 +3 9772 23458 2273 +3 4381 1519 14235 +3 8867 4381 14235 +3 24657 1519 24656 +3 18128 18924 17964 +3 27433 11575 21560 +3 14250 5416 14155 +3 26349 30875 30874 +3 9538 35929 35807 +3 32751 32752 32863 +3 17850 6023 6153 +3 16932 22069 21973 +3 23030 16932 21973 +3 20285 20286 21973 +3 22069 20285 21973 +3 22353 22533 20286 +3 20285 22353 20286 +3 2207 21314 22533 +3 22353 2207 22533 +3 2207 20656 20405 +3 21314 2207 20405 +3 20656 13324 23442 +3 20405 20656 23442 +3 13324 20889 21584 +3 23442 13324 21584 +3 20889 20106 21760 +3 21584 20889 21760 +3 20106 21510 21602 +3 21760 20106 21602 +3 21510 15872 20234 +3 21602 21510 20234 +3 15872 20813 21145 +3 20234 15872 21145 +3 17800 19540 18651 +3 22426 34601 33925 +3 20641 20722 20721 +3 14432 11947 13668 +3 18920 5681 19318 +3 23220 23224 23126 +3 25620 25621 24536 +3 24108 26084 26073 +3 24536 24108 26073 +3 26084 24397 21359 +3 26073 26084 21359 +3 24397 24715 24789 +3 17078 16914 16915 +3 24024 24557 11482 +3 25629 25772 25155 +3 30874 30928 30873 +3 22364 22431 20179 +3 16025 13275 13392 +3 21574 30214 14088 +3 15553 5456 15679 +3 19964 19995 19994 +3 19964 30959 31020 +3 20075 20074 19994 +3 19995 20075 19994 +3 20160 20159 20074 +3 20075 20160 20074 +3 20246 20245 20159 +3 20160 20246 20159 +3 20331 20330 20245 +3 20246 20331 20245 +3 20415 20414 20330 +3 20331 20415 20330 +3 23312 23409 23311 +3 11867 35400 11866 +3 21390 21371 20179 +3 23116 23214 23115 +3 12802 13990 3048 +3 21359 24397 24789 +3 24767 24746 24018 +3 25168 25452 24824 +3 26248 24299 24291 +3 24672 23661 24824 +3 24823 24672 24824 +3 20990 21076 21075 +3 21074 21075 21162 +3 21076 21164 21163 +3 21075 21076 21163 +3 21164 21251 21250 +3 21163 21164 21250 +3 21251 21341 21340 +3 21250 21251 21340 +3 21341 21432 21431 +3 21340 21341 21431 +3 21432 21522 21521 +3 21431 21432 21521 +3 21522 21615 21614 +3 21521 21522 21614 +3 21615 21708 21707 +3 21614 21615 21707 +3 21708 21803 21802 +3 21707 21708 21802 +3 21803 21898 21897 +3 21802 21803 21897 +3 21898 21993 21992 +3 21897 21898 21992 +3 21993 22089 22088 +3 21992 21993 22088 +3 22089 22185 22184 +3 22088 22089 22184 +3 22185 22281 22280 +3 22184 22185 22280 +3 22281 22378 22377 +3 22280 22281 22377 +3 22378 22476 22475 +3 22377 22378 22475 +3 22476 22575 22574 +3 22475 22476 22574 +3 22575 22674 22673 +3 22574 22575 22673 +3 22773 22772 22673 +3 22674 22773 22673 +3 22872 22871 22772 +3 22773 22872 22772 +3 22872 22971 22970 +3 22871 22872 22970 +3 22971 23069 23068 +3 22970 22971 23068 +3 23167 23166 23068 +3 23069 23167 23068 +3 23265 23264 23166 +3 23167 23265 23166 +3 18124 22433 20577 +3 23265 30826 30825 +3 28879 28353 25914 +3 24012 25428 25431 +3 33621 33748 33620 +3 25452 24823 24824 +3 24797 24663 23850 +3 23508 23858 25119 +3 24715 25338 25337 +3 24396 24527 23546 +3 14906 12802 3048 +3 13243 13149 3048 +3 13990 13243 3048 +3 14683 14792 13149 +3 18634 18538 18635 +3 13188 13147 18263 +3 25716 23676 24301 +3 20671 20588 23746 +3 13147 22165 22069 +3 16932 13147 22069 +3 20284 20285 22069 +3 22165 20284 22069 +3 22257 22353 20285 +3 20284 22257 20285 +3 22257 20312 2207 +3 22353 22257 2207 +3 20312 21236 20656 +3 2207 20312 20656 +3 21236 23346 13324 +3 20656 21236 13324 +3 23346 20137 20889 +3 13324 23346 20889 +3 20137 22547 20106 +3 20889 20137 20106 +3 22547 2255 21510 +3 20106 22547 21510 +3 2255 15636 15872 +3 21510 2255 15872 +3 15636 20731 20813 +3 15872 15636 20813 +3 18188 18044 22727 +3 17989 23224 19427 +3 20046 20491 20490 +3 21697 21768 2768 +3 11508 12719 13665 +3 20451 23220 23122 +3 24789 24715 25337 +3 25338 26235 24850 +3 24880 25452 25168 +3 24879 24880 25168 +3 22175 26260 5998 +3 23755 24073 23924 +3 26218 23815 25341 +3 24496 23647 23769 +3 20152 12309 21983 +3 25215 22486 23759 +3 7294 455 21466 +3 23671 21008 23674 +3 20485 20451 23122 +3 23408 23407 23310 +3 13243 14683 13149 +3 19965 19996 19995 +3 17822 496 495 +3 20076 20075 19995 +3 19996 20076 19995 +3 20161 20160 20075 +3 20076 20161 20075 +3 20247 20246 20160 +3 20161 20247 20160 +3 20332 20331 20246 +3 20247 20332 20246 +3 20416 20415 20331 +3 20332 20416 20331 +3 13578 13607 4796 +3 20416 20501 20415 +3 23312 23311 23213 +3 20700 23327 20699 +3 3477 5551 34874 +3 22919 23018 22918 +3 14683 3477 14792 +3 25337 25338 24850 +3 26235 25314 25177 +3 24850 26235 25177 +3 22191 29496 22286 +3 11614 11482 24879 +3 20991 21077 21076 +3 20990 20991 21076 +3 21077 21165 21164 +3 21076 21077 21164 +3 21165 21252 21251 +3 21164 21165 21251 +3 21252 21342 21341 +3 21251 21252 21341 +3 21342 21433 21432 +3 21341 21342 21432 +3 21433 21523 21522 +3 21432 21433 21522 +3 21523 21616 21615 +3 21522 21523 21615 +3 21616 21709 21708 +3 21615 21616 21708 +3 21709 21804 21803 +3 21708 21709 21803 +3 21804 21899 21898 +3 21803 21804 21898 +3 21899 21994 21993 +3 21898 21899 21993 +3 21994 22090 22089 +3 21993 21994 22089 +3 22090 22186 22185 +3 22089 22090 22185 +3 22186 22282 22281 +3 22185 22186 22281 +3 22282 22379 22378 +3 22281 22282 22378 +3 22379 22477 22476 +3 22378 22379 22476 +3 22477 22576 22575 +3 22476 22477 22575 +3 22576 22675 22674 +3 22575 22576 22674 +3 22675 22774 22773 +3 22674 22675 22773 +3 22873 22872 22773 +3 22774 22873 22773 +3 22873 22972 22971 +3 22872 22873 22971 +3 22972 23070 23069 +3 22971 22972 23069 +3 23070 23168 23167 +3 23069 23070 23167 +3 30694 30828 23266 +3 23167 23168 23265 +3 24437 24012 25431 +3 11482 24880 24879 +3 5203 5864 2903 +3 35794 35369 35549 +3 21408 14242 2921 +3 26210 25062 26211 +3 22269 25976 26118 +3 23503 22269 26118 +3 23993 25489 22760 +3 33052 33051 32945 +3 34165 34164 34028 +3 30575 30709 30574 +3 29415 24061 24121 +3 19538 11080 18038 +3 18510 25314 23891 +3 18358 19408 18355 +3 27641 29767 27640 +3 13188 22262 22165 +3 13147 13188 22165 +3 20283 20284 22165 +3 22262 20283 22165 +3 21321 22257 20284 +3 20283 21321 20284 +3 21404 20312 22257 +3 21321 21404 22257 +3 21404 22946 21236 +3 20312 21404 21236 +3 22946 23248 23346 +3 21236 22946 23346 +3 23248 12536 20137 +3 23346 23248 20137 +3 12536 10022 22547 +3 20137 12536 22547 +3 10022 22072 2255 +3 22547 10022 2255 +3 22072 4650 15636 +3 2255 22072 15636 +3 9326 33820 6538 +3 15636 4650 20731 +3 2910 4948 20411 +3 21487 20059 17757 +3 15200 16613 13084 +3 20392 20476 20475 +3 21673 21674 13017 +3 13099 20451 20485 +3 24929 24930 11233 +3 22102 11945 22101 +3 23874 24741 20494 +3 24024 11482 11614 +3 24472 24024 11614 +3 25435 24281 24755 +3 25485 26201 24160 +3 1566 4192 1451 +3 24947 26001 25070 +3 16913 16754 16755 +3 26234 24470 25777 +3 23311 23408 23310 +3 25054 25182 24927 +3 25822 24403 24138 +3 21270 21269 21183 +3 19997 19996 19965 +3 19965 19964 31020 +3 20077 20076 19996 +3 19997 20077 19996 +3 20162 20161 20076 +3 20077 20162 20076 +3 20248 20247 20161 +3 20162 20248 20161 +3 20333 20332 20247 +3 20248 20333 20247 +3 20417 20416 20332 +3 20333 20417 20332 +3 31894 31995 31893 +3 20417 20502 20416 +3 23327 23244 22334 +3 12558 13017 21497 +3 23116 23115 23017 +3 20964 23327 22334 +3 7302 6847 6846 +3 23018 23116 23017 +3 25541 26079 11835 +3 25324 24515 24528 +3 26077 24298 23731 +3 25870 25871 26012 +3 20909 20992 20991 +3 27489 20908 20990 +3 20992 21078 21077 +3 20991 20992 21077 +3 21078 21166 21165 +3 21077 21078 21165 +3 21166 21253 21252 +3 21165 21166 21252 +3 21253 21343 21342 +3 21252 21253 21342 +3 21343 21434 21433 +3 21342 21343 21433 +3 21434 21524 21523 +3 21433 21434 21523 +3 21524 21617 21616 +3 21523 21524 21616 +3 21617 21710 21709 +3 21616 21617 21709 +3 21710 21805 21804 +3 21709 21710 21804 +3 21805 21900 21899 +3 21804 21805 21899 +3 21900 21995 21994 +3 21899 21900 21994 +3 21995 22091 22090 +3 21994 21995 22090 +3 22091 22187 22186 +3 22090 22091 22186 +3 22187 22283 22282 +3 22186 22187 22282 +3 22283 22380 22379 +3 22282 22283 22379 +3 22380 22478 22477 +3 22379 22380 22477 +3 22478 22577 22576 +3 22477 22478 22576 +3 22577 22676 22675 +3 22576 22577 22675 +3 22676 22775 22774 +3 22675 22676 22774 +3 22678 30160 22776 +3 22774 22775 22873 +3 22874 22776 30293 +3 22873 22874 22972 +3 30293 22973 22874 +3 22972 22973 23070 +3 23070 22973 23071 +3 23070 23071 23168 +3 3988 24024 24472 +3 23071 30560 23169 +3 26013 26155 26154 +3 12553 3988 24472 +3 6008 1063 14074 +3 30878 25077 27901 +3 6919 22327 6865 +3 1881 3035 15609 +3 15609 3035 15610 +3 23311 23310 23212 +3 33521 33640 33520 +3 21971 22639 13188 +3 22297 24517 24467 +3 22639 22358 22262 +3 13188 22639 22262 +3 20282 20283 22262 +3 22358 20282 22262 +3 16018 21321 20283 +3 20282 16018 20283 +3 16018 21496 21404 +3 21321 16018 21404 +3 21496 23045 22946 +3 21404 21496 22946 +3 23045 23150 23248 +3 22946 23045 23248 +3 23150 13129 12536 +3 23248 23150 12536 +3 13129 21765 10022 +3 12536 13129 10022 +3 21765 21976 22072 +3 10022 21765 22072 +3 21976 11345 4650 +3 22072 21976 4650 +3 25523 25533 20885 +3 19708 21415 17716 +3 24172 24175 25523 +3 24276 26792 30632 +3 22827 14151 22733 +3 27279 27397 27396 +3 13017 13099 20485 +3 26158 26299 26298 +3 26157 26158 26298 +3 26322 26323 23651 +3 22003 3988 12553 +3 25479 24734 24755 +3 24734 20517 24755 +3 24797 25140 24663 +3 22009 23490 22008 +3 23805 23673 23799 +3 21450 21916 23799 +3 23018 23017 22918 +3 17011 15060 12460 +3 11086 3333 3035 +3 1881 11086 3035 +3 19998 19997 19966 +3 31082 19965 31020 +3 20078 20077 19997 +3 19998 20078 19997 +3 20163 20162 20077 +3 20078 20163 20077 +3 20249 20248 20162 +3 20163 20249 20162 +3 20334 20333 20248 +3 20249 20334 20248 +3 20418 20417 20333 +3 20334 20418 20333 +3 20503 20502 20417 +3 20418 20503 20417 +3 18317 34615 30213 +3 32095 32094 31994 +3 21951 23132 22334 +3 8257 15279 14583 +3 23214 23213 23115 +3 23244 21951 22334 +3 20830 20829 20747 +3 25363 20747 23760 +3 20909 20991 20908 +3 20830 20910 20829 +3 20910 20993 20992 +3 20909 20910 20992 +3 20993 21079 21078 +3 20992 20993 21078 +3 21079 21167 21166 +3 21078 21079 21166 +3 21167 21254 21253 +3 21166 21167 21253 +3 21254 21344 21343 +3 21253 21254 21343 +3 21344 21435 21434 +3 21343 21344 21434 +3 21435 21525 21524 +3 21434 21435 21524 +3 21525 21618 21617 +3 21524 21525 21617 +3 21618 21711 21710 +3 21617 21618 21710 +3 21711 21806 21805 +3 21710 21711 21805 +3 21806 21901 21900 +3 21805 21806 21900 +3 21901 21996 21995 +3 21900 21901 21995 +3 21996 22092 22091 +3 21995 21996 22091 +3 22092 22188 22187 +3 22091 22092 22187 +3 22188 22284 22283 +3 22187 22188 22283 +3 22284 22381 22380 +3 22283 22284 22380 +3 22381 22479 22478 +3 22380 22381 22478 +3 22479 22578 22577 +3 22478 22479 22577 +3 22578 22677 22676 +3 22577 22578 22676 +3 22677 22776 22775 +3 22676 22677 22775 +3 738 26143 26142 +3 24705 21246 24199 +3 24222 24511 24618 +3 15146 26224 25001 +3 25593 4809 1796 +3 24361 26244 23542 +3 26002 24149 25947 +3 25539 23929 13886 +3 25297 21957 20141 +3 25298 25297 20141 +3 26304 25188 25154 +3 5553 9561 3333 +3 11086 5553 3333 +3 12806 12718 9561 +3 5553 12806 9561 +3 31813 31919 31918 +3 20535 21876 21971 +3 18263 21971 13188 +3 21876 22739 22639 +3 21971 21876 22639 +3 22739 22455 22358 +3 22639 22739 22358 +3 20281 20282 22358 +3 22455 20281 22358 +3 23038 16018 20282 +3 20281 23038 20282 +3 23038 21587 21496 +3 16018 23038 21496 +3 21587 23143 23045 +3 21496 21587 23045 +3 23143 14433 23150 +3 23045 23143 23150 +3 14433 13794 13129 +3 23150 14433 13129 +3 13794 5557 21765 +3 13129 13794 21765 +3 5557 21786 21976 +3 21765 5557 21976 +3 21786 14148 11345 +3 21976 21786 11345 +3 22012 21919 22013 +3 21062 18181 14148 +3 21044 21043 20960 +3 32147 32247 32146 +3 22827 22733 21385 +3 14151 21674 21673 +3 25188 24833 13560 +3 24149 25490 25488 +3 22293 24293 20517 +3 23651 22003 12553 +3 736 737 282 +3 24734 22293 20517 +3 21627 21535 25771 +3 23932 23057 25008 +3 29123 28246 22445 +3 22073 21883 21155 +3 21980 23740 23795 +3 22073 21980 21883 +3 14949 10582 12718 +3 22919 22918 22819 +3 12806 14949 12718 +3 19968 19999 19998 +3 30878 30877 27895 +3 20079 20078 19998 +3 19999 20079 19998 +3 20164 20163 20078 +3 20079 20164 20078 +3 20250 20249 20163 +3 20164 20250 20163 +3 20335 20334 20249 +3 20250 20335 20249 +3 20419 20418 20334 +3 20335 20419 20334 +3 20504 20503 20418 +3 20419 20504 20418 +3 25628 13459 15317 +3 20504 20586 20503 +3 17579 17674 20021 +3 1388 16302 11257 +3 20748 20830 20747 +3 20666 20749 26233 +3 20831 20830 20748 +3 20749 20831 20748 +3 20911 20910 20830 +3 20831 20911 20830 +3 20911 20994 20993 +3 20910 20911 20993 +3 20994 21080 21079 +3 20993 20994 21079 +3 21080 21168 21167 +3 21079 21080 21167 +3 21168 21255 21254 +3 21167 21168 21254 +3 21345 21344 21254 +3 21255 21345 21254 +3 21345 21436 21435 +3 21344 21345 21435 +3 21436 21526 21525 +3 21435 21436 21525 +3 21526 21619 21618 +3 21525 21526 21618 +3 21619 21712 21711 +3 21618 21619 21711 +3 21712 21807 21806 +3 21711 21712 21806 +3 21807 21902 21901 +3 21806 21807 21901 +3 21902 21997 21996 +3 21901 21902 21996 +3 21997 22093 22092 +3 21996 21997 22092 +3 22093 22189 22188 +3 22092 22093 22188 +3 22189 22285 22284 +3 22188 22189 22284 +3 22285 22382 22381 +3 22284 22285 22381 +3 22382 22480 22479 +3 22381 22382 22479 +3 22480 22579 22578 +3 22479 22480 22578 +3 22579 22678 22677 +3 22578 22579 22677 +3 29768 29897 22580 +3 14949 23171 23172 +3 10582 14949 23172 +3 23171 10116 15073 +3 23172 23171 15073 +3 10116 15030 19981 +3 15073 10116 19981 +3 15030 20031 20022 +3 19981 15030 20022 +3 20031 20486 20479 +3 20022 20031 20479 +3 20486 21292 21235 +3 20479 20486 21235 +3 21292 22342 22333 +3 21235 21292 22333 +3 22342 9790 261 +3 22333 22342 261 +3 31713 31813 31812 +3 35529 35656 35390 +3 20536 21877 21876 +3 20535 20536 21876 +3 21877 23426 22739 +3 21876 21877 22739 +3 23426 22553 22455 +3 22739 23426 22455 +3 11774 20281 22455 +3 22553 11774 22455 +3 22939 23038 20281 +3 11774 22939 20281 +3 22939 21680 21587 +3 23038 22939 21587 +3 21680 23241 23143 +3 21587 21680 23143 +3 23241 20487 14433 +3 23143 23241 14433 +3 20487 22054 13794 +3 14433 20487 13794 +3 22054 21304 5557 +3 13794 22054 5557 +3 21304 21693 21786 +3 5557 21304 21786 +3 21693 21062 14148 +3 21786 21693 14148 +3 21464 20431 20347 +3 26359 24803 26400 +3 17099 2634 13959 +3 34495 28871 12652 +3 21399 22827 21385 +3 14151 14053 22733 +3 16618 15633 13206 +3 13014 16618 13206 +3 25229 25244 7003 +3 24191 23717 23718 +3 1998 13526 9314 +3 11941 23720 26069 +3 27663 27664 12255 +3 21154 21153 21068 +3 22169 22073 21154 +3 21068 22169 21154 +3 22955 23740 22558 +3 22169 22558 22073 +3 22820 22919 22819 +3 17968 17969 20448 +3 9790 21367 21354 +3 261 9790 21354 +3 19969 20000 19999 +3 30877 30876 27895 +3 20080 20079 19999 +3 20000 20080 19999 +3 20165 20164 20079 +3 20080 20165 20079 +3 20251 20250 20164 +3 20165 20251 20164 +3 20336 20335 20250 +3 20251 20336 20250 +3 20420 20419 20335 +3 20336 20420 20335 +3 20505 20504 20419 +3 20420 20505 20419 +3 20587 20586 20504 +3 20505 20587 20504 +3 15082 15210 15876 +3 25369 20668 20751 +3 32424 32529 32528 +3 16302 15082 15876 +3 20832 20831 20749 +3 20750 20832 20749 +3 20912 20911 20831 +3 20832 20912 20831 +3 20912 20995 20994 +3 20911 20912 20994 +3 20995 21081 21080 +3 20994 20995 21080 +3 21081 21169 21168 +3 21080 21081 21168 +3 21169 21256 21255 +3 21168 21169 21255 +3 21256 21346 21345 +3 21255 21256 21345 +3 21346 21437 21436 +3 21345 21346 21436 +3 21437 21527 21526 +3 21436 21437 21526 +3 21527 21620 21619 +3 21526 21527 21619 +3 21620 21713 21712 +3 21619 21620 21712 +3 21713 21808 21807 +3 21712 21713 21807 +3 21808 21903 21902 +3 21807 21808 21902 +3 21903 21998 21997 +3 21902 21903 21997 +3 21998 22094 22093 +3 21997 21998 22093 +3 22094 22190 22189 +3 22093 22094 22189 +3 22191 22096 29359 +3 22189 22190 22285 +3 29496 22191 29359 +3 22285 22286 22382 +3 22286 29496 22383 +3 22382 22383 22480 +3 22481 22383 29768 +3 22480 22481 22579 +3 22579 22580 22678 +3 24148 24149 25488 +3 20658 24028 25359 +3 23617 12357 23720 +3 25652 24100 25591 +3 11547 23565 22581 +3 21367 12655 7971 +3 21354 21367 7971 +3 21853 7926 7971 +3 12655 21853 7971 +3 21853 23219 23317 +3 7926 21853 23317 +3 23219 20944 15870 +3 23317 23219 15870 +3 22721 22820 22720 +3 13016 16445 15870 +3 22622 22721 22621 +3 22820 22819 22720 +3 20944 13016 15870 +3 34247 34347 35547 +3 4818 4819 4954 +3 27500 25111 27501 +3 15756 15553 16490 +3 21299 21300 22364 +3 19761 23437 21954 +3 20541 21383 21324 +3 22521 22522 22621 +3 22721 22720 22621 +3 14973 12921 8114 +3 22622 22621 22522 +3 35437 35705 35712 +3 21238 13950 14454 +3 23047 2082 14586 +3 20704 20786 18353 +3 19982 20047 20046 +3 20128 17508 20129 +3 22956 21764 21400 +3 20537 20536 35521 +3 24776 30846 24202 +3 20537 21781 21877 +3 20536 20537 21877 +3 21781 22757 23426 +3 21877 21781 23426 +3 22757 22652 22553 +3 23426 22757 22553 +3 22652 23149 11774 +3 22553 22652 11774 +3 23136 22939 11774 +3 23149 23136 11774 +3 23136 22443 21680 +3 22939 23136 21680 +3 22443 23339 23241 +3 21680 22443 23241 +3 23339 21588 20487 +3 23241 23339 20487 +3 21588 21583 22054 +3 20487 21588 22054 +3 21583 21671 21304 +3 22054 21583 21304 +3 19711 18709 18668 +3 21304 21671 21693 +3 19429 18517 22459 +3 17799 18036 20731 +3 21409 21414 22845 +3 34064 18898 34613 +3 14053 14151 21673 +3 20616 21414 21409 +3 21674 13099 13017 +3 20554 20636 20553 +3 22341 20696 22438 +3 13426 15743 14054 +3 1878 20760 16304 +3 12545 22341 22438 +3 21241 21068 21239 +3 13151 23581 13753 +3 2382 22169 21068 +3 21241 2382 21068 +3 22657 22558 22169 +3 2382 22657 22169 +3 12872 9393 23407 +3 22955 23054 23686 +3 23408 12872 23407 +3 15906 15767 3800 +3 19970 20001 20000 +3 31209 19969 19968 +3 20081 20080 20000 +3 20001 20081 20000 +3 20166 20165 20080 +3 20081 20166 20080 +3 20252 20251 20165 +3 20166 20252 20165 +3 20337 20336 20251 +3 20252 20337 20251 +3 20421 20420 20336 +3 20337 20421 20336 +3 20506 20505 20420 +3 20421 20506 20420 +3 20588 20587 20505 +3 20506 20588 20505 +3 12830 7457 13661 +3 20588 20669 20587 +3 13151 13245 25948 +3 20669 20751 20668 +3 20833 20832 20750 +3 20751 20833 20750 +3 20913 20912 20832 +3 20833 20913 20832 +3 20913 20996 20995 +3 20912 20913 20995 +3 20996 21082 21081 +3 20995 20996 21081 +3 21082 21170 21169 +3 21081 21082 21169 +3 21170 21257 21256 +3 21169 21170 21256 +3 21257 21347 21346 +3 21256 21257 21346 +3 21347 21438 21437 +3 21346 21347 21437 +3 21438 21528 21527 +3 21437 21438 21527 +3 21528 21621 21620 +3 21527 21528 21620 +3 21621 21714 21713 +3 21620 21621 21713 +3 21714 21809 21808 +3 21713 21714 21808 +3 21809 21904 21903 +3 21808 21809 21903 +3 21904 21999 21998 +3 21903 21904 21998 +3 21999 22095 22094 +3 21998 21999 22094 +3 22095 22191 22190 +3 22094 22095 22190 +3 24152 25505 25490 +3 24399 24098 26225 +3 26225 26700 26699 +3 25997 25243 24098 +3 24399 25997 24098 +3 23835 25278 22591 +3 24607 24487 24815 +3 6640 96 18341 +3 21128 18747 21214 +3 20213 20212 20127 +3 20128 20213 20127 +3 20299 20298 20212 +3 20213 20299 20212 +3 20384 20383 20298 +3 20299 20384 20298 +3 20468 20467 20383 +3 35454 35648 35461 +3 35475 35523 35454 +3 20384 20468 20383 +3 20553 20552 20467 +3 20468 20553 20467 +3 20635 20634 20552 +3 20553 20635 20552 +3 20716 20715 20634 +3 20635 20716 20634 +3 20798 20797 20715 +3 20716 20798 20715 +3 20798 20880 20879 +3 20797 20798 20879 +3 20880 20960 20959 +3 20879 20880 20959 +3 22834 20538 20537 +3 35791 13795 15878 +3 20538 21782 21781 +3 20537 20538 21781 +3 21782 23329 22757 +3 21781 21782 22757 +3 23329 22751 22652 +3 22757 23329 22652 +3 23247 23149 22652 +3 22751 23247 22652 +3 23135 23136 23149 +3 23247 23135 23149 +3 23135 22541 22443 +3 23136 23135 22443 +3 22541 23436 23339 +3 22443 22541 23339 +3 23436 16940 21588 +3 23339 23436 21588 +3 16940 20136 21583 +3 21588 16940 21583 +3 20136 21487 21671 +3 21583 20136 21671 +3 1090 18383 1207 +3 24933 23642 24934 +3 4797 3538 14972 +3 18668 18709 18428 +3 20961 21044 20960 +3 11776 20155 15463 +3 22728 13272 22659 +3 26693 26805 23692 +3 21043 21042 20959 +3 20960 21043 20959 +3 21129 21128 21042 +3 33734 33733 33606 +3 25445 25385 25527 +3 21329 21241 21327 +3 25106 11332 3322 +3 21331 2382 21241 +3 21329 21331 21241 +3 22756 22657 2382 +3 21331 22756 2382 +3 22756 23152 23054 +3 22756 23054 22657 +3 20752 20753 20835 +3 21043 21129 21042 +3 20002 20001 19970 +3 31209 19970 19969 +3 20082 20081 20001 +3 20002 20082 20001 +3 20167 20166 20081 +3 20082 20167 20081 +3 20253 20252 20166 +3 20167 20253 20166 +3 20338 20337 20252 +3 20253 20338 20252 +3 20338 20422 20421 +3 20337 20338 20421 +3 20507 20506 20421 +3 20422 20507 20421 +3 20589 20588 20506 +3 20507 20589 20506 +3 35600 28191 29545 +3 31047 31109 31108 +3 20670 20669 20588 +3 15468 21756 15467 +3 20834 20833 20751 +3 20752 20834 20751 +3 20914 20913 20833 +3 20834 20914 20833 +3 20914 20997 20996 +3 20913 20914 20996 +3 20997 21083 21082 +3 20996 20997 21082 +3 21083 21171 21170 +3 21082 21083 21170 +3 21171 21258 21257 +3 21170 21171 21257 +3 21258 21348 21347 +3 21257 21258 21347 +3 21348 21439 21438 +3 21347 21348 21438 +3 21439 21529 21528 +3 21438 21439 21528 +3 21529 21622 21621 +3 21528 21529 21621 +3 21622 21715 21714 +3 21621 21622 21714 +3 21715 21810 21809 +3 21714 21715 21809 +3 21810 21905 21904 +3 21809 21810 21904 +3 21905 22000 21999 +3 21904 21905 21999 +3 22000 22096 22095 +3 21999 22000 22095 +3 22096 22001 29222 +3 24540 24607 24815 +3 24204 11614 24874 +3 20614 20532 18154 +3 20314 19641 19254 +3 3311 19365 21769 +3 20469 20554 20468 +3 11861 11776 15463 +3 18169 18988 19826 +3 21592 21604 12918 +3 30293 22776 30160 +3 19437 20024 23332 +3 20068 19889 18172 +3 2229 15094 15020 +3 4663 2229 15020 +3 20393 20477 20476 +3 20813 20731 19317 +3 32501 32610 32500 +3 20588 20671 20670 +3 21577 21578 13423 +3 22633 22634 6258 +3 13665 13763 13570 +3 20070 20071 4549 +3 21319 19757 20397 +3 33542 33429 7065 +3 23047 22948 19206 +3 21578 21577 6258 +3 24464 27018 27017 +3 20644 20539 20538 +3 22834 20644 20538 +3 20539 21688 21782 +3 20538 20539 21782 +3 21688 23133 23329 +3 21782 21688 23329 +3 23133 22851 22751 +3 23329 23133 22751 +3 23345 23247 22751 +3 22851 23345 22751 +3 22840 23135 23247 +3 23345 22840 23247 +3 22840 22641 22541 +3 23135 22840 22541 +3 22641 4419 23436 +3 22541 22641 23436 +3 4419 20741 16940 +3 23436 4419 16940 +3 20741 22076 20136 +3 16940 20741 20136 +3 22076 20059 21487 +3 20136 22076 21487 +3 20836 20753 20837 +3 16037 21051 16622 +3 29086 29085 28950 +3 13557 20411 14346 +3 12735 11508 13471 +3 21960 21864 18912 +3 21384 22728 22659 +3 13959 2634 20048 +3 18272 18273 18366 +3 12511 26941 5463 +3 19321 22727 22627 +3 18537 20941 18536 +3 20540 20541 21324 +3 35594 35886 35378 +3 29545 28191 28190 +3 26310 26311 12996 +3 22550 22839 23132 +3 21421 21331 21329 +3 21419 21421 21329 +3 22855 22756 21331 +3 21421 22855 21331 +3 35081 35080 34951 +3 22855 21421 23444 +3 22727 22726 22627 +3 19321 18188 22727 +3 19972 20003 20002 +3 19971 19972 20002 +3 20083 20082 20002 +3 20003 20083 20002 +3 20168 20167 20082 +3 20083 20168 20082 +3 20254 20253 20167 +3 20168 20254 20167 +3 20339 20338 20253 +3 20254 20339 20253 +3 20423 20422 20338 +3 20339 20423 20338 +3 20508 20507 20422 +3 20423 20508 20422 +3 20590 20589 20507 +3 20508 20590 20507 +3 24063 24062 20199 +3 35481 35443 35873 +3 21756 12631 15467 +3 33292 33401 33291 +3 20835 20834 20752 +3 25112 20752 24592 +3 20915 20914 20834 +3 20835 20915 20834 +3 20998 20997 20914 +3 20915 20998 20914 +3 20998 21084 21083 +3 20997 20998 21083 +3 21084 21172 21171 +3 21083 21084 21171 +3 21172 21259 21258 +3 21171 21172 21258 +3 21259 21349 21348 +3 21258 21259 21348 +3 21349 21440 21439 +3 21348 21349 21439 +3 21440 21530 21529 +3 21439 21440 21529 +3 21530 21623 21622 +3 21529 21530 21622 +3 21623 21716 21715 +3 21622 21623 21715 +3 21716 21811 21810 +3 21715 21716 21810 +3 21811 21906 21905 +3 21810 21811 21905 +3 21906 22001 22000 +3 21905 21906 22000 +3 21906 21907 22001 +3 25227 23977 24870 +3 23949 24440 24816 +3 25301 25300 24816 +3 28498 23782 25361 +3 11670 11749 21816 +3 23548 23543 26141 +3 13089 26243 25080 +3 28357 28358 30075 +3 24802 25641 24283 +3 29774 29903 29902 +3 30077 11551 19908 +3 27017 27016 26898 +3 28992 29685 28071 +3 12719 12807 13763 +3 26570 26675 26674 +3 22826 22825 22726 +3 20390 20474 20389 +3 22727 22826 22726 +3 33732 33731 33604 +3 17754 22923 22924 +3 22364 20179 6763 +3 20944 18520 18609 +3 22363 22364 6763 +3 20179 21371 21370 +3 21371 13318 9740 +3 6763 20179 21370 +3 25223 23597 25321 +3 21370 21371 9740 +3 25353 28122 28123 +3 14345 13557 14346 +3 20040 20490 20489 +3 25304 24632 20672 +3 20490 21299 21293 +3 20032 20040 20489 +3 21299 22364 22363 +3 20489 20490 21293 +3 17007 17083 7074 +3 21293 21299 22363 +3 20555 20554 20469 +3 17083 23121 7074 +3 20881 20882 20961 +3 20386 20470 20385 +3 10979 22142 20539 +3 13578 35505 35560 +3 22142 21689 21688 +3 20539 22142 21688 +3 21689 23231 23133 +3 21688 21689 23133 +3 23231 22951 22851 +3 23133 23231 22851 +3 22951 23051 23345 +3 22851 22951 23345 +3 23051 22161 22840 +3 23345 23051 22840 +3 22161 22741 22641 +3 22840 22161 22641 +3 22741 7284 4419 +3 22641 22741 4419 +3 7284 20660 20741 +3 4419 7284 20741 +3 20660 11108 22076 +3 20741 20660 22076 +3 11108 21325 20059 +3 22076 11108 20059 +3 19241 6408 21242 +3 18750 18749 21131 +3 19825 5759 5891 +3 35579 35431 35928 +3 17816 17298 30827 +3 20718 20717 20636 +3 11506 21475 1977 +3 20962 21045 21044 +3 28605 27433 21560 +3 18215 15433 13242 +3 35777 35840 35785 +3 30503 13015 25574 +3 27497 6980 26594 +3 21951 22550 23132 +3 13558 13334 22839 +3 25320 23268 25807 +3 21419 21508 21418 +3 21420 21421 21419 +3 21418 21420 21419 +3 15767 15631 23444 +3 21420 23444 21421 +3 20390 20389 20304 +3 16849 17100 21569 +3 21390 14150 13318 +3 15858 15860 15998 +3 19973 20004 20003 +3 19972 19973 20003 +3 20084 20083 20003 +3 20004 20084 20003 +3 20169 20168 20083 +3 20084 20169 20083 +3 20255 20254 20168 +3 20169 20255 20168 +3 20340 20339 20254 +3 20255 20340 20254 +3 20424 20423 20339 +3 20340 20424 20339 +3 20509 20508 20423 +3 20424 20509 20423 +3 32839 32947 32838 +3 33053 33052 32946 +3 25304 20590 25079 +3 32947 33053 32946 +3 31690 31689 31594 +3 20133 18614 18526 +3 20836 20835 20753 +3 20916 20915 20835 +3 20836 20916 20835 +3 20999 20998 20915 +3 20916 20999 20915 +3 20999 21085 21084 +3 20998 20999 21084 +3 21085 21173 21172 +3 21084 21085 21172 +3 21173 21260 21259 +3 21172 21173 21259 +3 21260 21350 21349 +3 21259 21260 21349 +3 21350 21441 21440 +3 21349 21350 21440 +3 21441 21531 21530 +3 21440 21441 21530 +3 21531 21624 21623 +3 21530 21531 21623 +3 21624 21717 21716 +3 21623 21624 21716 +3 21717 21812 21811 +3 21716 21717 21811 +3 21718 21812 21717 +3 21811 21812 21906 +3 21907 21906 21812 +3 26324 20922 22003 +3 24557 26216 11482 +3 24390 22350 24234 +3 25379 12107 22530 +3 25889 25890 26031 +3 24477 12168 23755 +3 12168 21540 23755 +3 23275 24390 24175 +3 21540 23805 24073 +3 11749 21912 21816 +3 25197 23873 25300 +3 24559 25101 25102 +3 23773 23774 24976 +3 25667 23736 25103 +3 1895 1426 4276 +3 24095 24089 25462 +3 24382 20823 20985 +3 22550 13558 22839 +3 34932 35061 34931 +3 20305 20390 20304 +3 17440 18494 18215 +3 20071 20070 11947 +3 22108 22107 22012 +3 11575 26599 17285 +3 20710 20792 20709 +3 18814 19544 17695 +3 20178 21390 20179 +3 19535 17440 18215 +3 20105 18668 20617 +3 20462 20547 20461 +3 20629 20628 20546 +3 2673 2674 21654 +3 20534 21302 21301 +3 28686 28685 28556 +3 24221 24717 26059 +3 20547 20546 20461 +3 14972 14334 12735 +3 20303 17700 20217 +3 20293 20378 20292 +3 20944 18609 13016 +3 13242 13243 13990 +3 24631 20672 24632 +3 12628 14683 13243 +3 13242 12628 13243 +3 34060 5551 14683 +3 13242 192 12628 +3 27752 22552 21572 +3 27852 27853 27968 +3 13296 26570 24594 +3 27969 28086 28085 +3 28836 28835 28703 +3 29552 30209 29551 +3 34411 34410 34272 +3 34273 34411 34272 +3 22143 21595 21689 +3 22142 22143 21689 +3 21595 23134 23231 +3 21689 21595 23231 +3 23050 22951 23231 +3 23134 23050 23231 +3 23050 22952 23051 +3 22951 23050 23051 +3 22952 22064 22161 +3 23051 22952 22161 +3 22064 15199 22741 +3 22161 22064 22741 +3 15199 2494 7284 +3 22741 15199 7284 +3 2494 21490 20660 +3 7284 2494 20660 +3 21490 21958 11108 +3 20660 21490 11108 +3 17675 17771 17674 +3 11108 21958 21325 +3 26209 25163 23599 +3 18128 34469 17535 +3 14239 4549 15091 +3 21655 455 7294 +3 21467 11506 11360 +3 17099 125 2634 +3 15885 1881 15609 +3 18927 30352 28310 +3 20122 20121 20041 +3 28557 28686 28556 +3 20187 20101 17771 +3 21325 19414 18988 +3 21418 21508 13852 +3 23847 29830 27637 +3 21882 21418 13852 +3 1262 21882 13852 +3 21603 21420 21418 +3 21882 21603 21418 +3 3800 23444 21420 +3 21603 3800 21420 +3 15767 23444 3800 +3 20128 17507 17508 +3 21162 27722 21074 +3 20005 20004 19973 +3 19974 20005 19973 +3 20085 20084 20004 +3 20005 20085 20004 +3 20170 20169 20084 +3 20085 20170 20084 +3 20256 20255 20169 +3 20170 20256 20169 +3 20341 20340 20255 +3 20256 20341 20255 +3 20425 20424 20340 +3 20341 20425 20340 +3 20510 20509 20424 +3 20425 20510 20424 +3 25079 20592 24649 +3 20510 20592 20509 +3 12512 1881 15885 +3 15476 12512 15885 +3 13579 22750 22343 +3 13567 11086 1881 +3 12479 11701 12542 +3 20917 20916 20836 +3 20837 20917 20836 +3 21000 20999 20916 +3 20917 21000 20916 +3 21000 21086 21085 +3 20999 21000 21085 +3 21086 21174 21173 +3 21085 21086 21173 +3 21174 21261 21260 +3 21173 21174 21260 +3 21261 21351 21350 +3 21260 21261 21350 +3 21351 21442 21441 +3 21350 21351 21441 +3 21442 21532 21531 +3 21441 21442 21531 +3 21532 21625 21624 +3 21531 21532 21624 +3 21625 21718 21717 +3 21624 21625 21717 +3 21625 28684 21718 +3 21887 22172 20140 +3 25211 25227 24870 +3 170 23176 6254 +3 24431 24348 24648 +3 25100 23801 24129 +3 25565 24458 24609 +3 15585 15584 13177 +3 25459 25153 25458 +3 25861 25973 25831 +3 23755 21540 24073 +3 25278 23941 25293 +3 24589 25348 12446 +3 21325 21958 18992 +3 23782 24873 25361 +3 24938 24342 24939 +3 25643 25786 24960 +3 13296 24912 26571 +3 25877 26019 26018 +3 25543 13104 12535 +3 24692 25543 12535 +3 12557 12993 12899 +3 23974 24239 22296 +3 18634 20941 18537 +3 16867 17030 17029 +3 20496 13054 15200 +3 33439 33438 33329 +3 20374 20375 20458 +3 20497 20496 15200 +3 20289 20290 20374 +3 20459 20544 20543 +3 20204 20290 20289 +3 20375 20459 20458 +3 17989 19488 18313 +3 20290 20375 20374 +3 20788 20789 20870 +3 20629 20710 20628 +3 20547 20629 20546 +3 20792 20791 20709 +3 20707 20706 20625 +3 20710 20709 20628 +3 20458 20459 20543 +3 20626 20707 20625 +3 20626 20625 20543 +3 20544 20626 20543 +3 20707 20789 20788 +3 20706 20707 20788 +3 20462 20461 20377 +3 20789 20871 20870 +3 20207 20293 20206 +3 20378 20462 20377 +3 20122 20207 20121 +3 20378 20377 20292 +3 20042 20122 20041 +3 20293 20292 20206 +3 30561 30695 30560 +3 20207 20206 20121 +3 12512 13567 1881 +3 22048 23342 13579 +3 11105 5553 11086 +3 13567 11105 11086 +3 30846 24776 23823 +3 13618 22240 22143 +3 20644 10979 20539 +3 22240 23119 21595 +3 22143 22240 21595 +3 23119 23036 23134 +3 21595 23119 23134 +3 23036 23440 23050 +3 23134 23036 23050 +3 23440 23441 22952 +3 23050 23440 22952 +3 23441 21969 22064 +3 22952 23441 22064 +3 21969 20620 15199 +3 22064 21969 15199 +3 20620 6759 2494 +3 15199 20620 2494 +3 6759 20967 21490 +3 2494 6759 21490 +3 20967 21582 21958 +3 21490 20967 21958 +3 34487 33935 11647 +3 22826 18044 19110 +3 14323 20241 14432 +3 20540 21324 21302 +3 11947 20070 20155 +3 14471 15115 14930 +3 20801 20802 20883 +3 12807 13861 13763 +3 12449 12806 5553 +3 11105 12449 5553 +3 15679 5456 3312 +3 23131 22047 22144 +3 28362 30094 30082 +3 27267 29423 27082 +3 15408 1262 20982 +3 21065 20982 1262 +3 21977 21882 1262 +3 15408 21977 1262 +3 21696 21603 21882 +3 21977 21696 21882 +3 12569 3800 21603 +3 21696 12569 21603 +3 26351 30872 30871 +3 18417 20673 20948 +3 19975 20006 20005 +3 19974 19975 20005 +3 20086 20085 20005 +3 20006 20086 20005 +3 20171 20170 20085 +3 20086 20171 20085 +3 20257 20256 20170 +3 20171 20257 20170 +3 20342 20341 20256 +3 20257 20342 20256 +3 20426 20425 20341 +3 20342 20426 20341 +3 20511 20510 20425 +3 20426 20511 20425 +3 20594 24305 24649 +3 20511 20593 20510 +3 15464 14949 12806 +3 12449 15464 12806 +3 23270 23171 14949 +3 20838 20837 20755 +3 35645 35616 35904 +3 20918 20917 20837 +3 20838 20918 20837 +3 21001 21000 20917 +3 20918 21001 20917 +3 21001 21087 21086 +3 21000 21001 21086 +3 21087 21175 21174 +3 21086 21087 21174 +3 21175 21262 21261 +3 21174 21175 21261 +3 21262 21352 21351 +3 21261 21262 21351 +3 21352 21443 21442 +3 21351 21352 21442 +3 21443 21533 21532 +3 21442 21443 21532 +3 21177 21264 21263 +3 21532 21533 21625 +3 32788 32787 32666 +3 23869 24459 25722 +3 12540 27378 29699 +3 23544 23837 26121 +3 22295 22662 22294 +3 24305 20594 20595 +3 21631 26248 24648 +3 24356 3330 11332 +3 22293 23648 24293 +3 19988 21631 24648 +3 25040 25424 25425 +3 25238 25100 24129 +3 25783 20902 26074 +3 15533 15402 15534 +3 25880 25881 26022 +3 20985 20823 22877 +3 20845 20762 24644 +3 24688 25226 25719 +3 24342 25643 24960 +3 35855 35837 35771 +3 24269 25814 17086 +3 25101 25239 25786 +3 13104 21888 23235 +3 25894 25895 26036 +3 24642 23731 24473 +3 12535 13104 23235 +3 26148 4552 4013 +3 24297 24298 26677 +3 25230 25443 23703 +3 25711 25652 11942 +3 12874 12873 12781 +3 23428 25966 25964 +3 11690 24457 24387 +3 32554 32553 32446 +3 21509 25686 26210 +3 26210 26067 25062 +3 13557 2910 20411 +3 87 5593 10244 +3 15608 4663 5337 +3 11508 13665 13471 +3 20218 20304 20217 +3 4549 17099 15091 +3 20870 20871 20950 +3 22354 21225 22258 +3 20951 21034 21033 +3 20950 20951 21033 +3 18647 18744 18646 +3 17129 17128 20980 +3 21225 21313 22258 +3 22737 22146 13787 +3 21051 6252 16622 +3 16330 15481 14921 +3 21483 20697 17084 +3 20304 20303 20217 +3 5485 16849 14862 +3 22531 20697 21483 +3 30770 27641 30762 +3 26703 26815 26814 +3 20050 20064 20541 +3 20065 20574 20563 +3 19002 25343 30534 +3 33486 33605 33485 +3 27055 28362 28360 +3 20134 19002 30534 +3 22750 21051 22343 +3 21072 30641 27784 +3 15464 23270 14949 +3 22047 23342 22048 +3 23270 16933 10116 +3 23171 23270 10116 +3 16933 16617 15030 +3 32195 32194 32094 +3 30872 26351 30873 +3 15593 16012 22240 +3 13618 15593 22240 +3 16012 13903 23119 +3 22240 16012 23119 +3 13903 15319 23036 +3 23119 13903 23036 +3 15319 23344 23440 +3 23036 15319 23440 +3 23344 22852 23441 +3 23440 23344 23441 +3 22852 16934 21969 +3 23441 22852 21969 +3 16934 20226 20620 +3 21969 16934 20620 +3 14241 6759 20620 +3 20226 14241 20620 +3 14241 20237 20967 +3 6759 14241 20967 +3 22931 22832 17915 +3 20397 19645 19642 +3 78 13392 2229 +3 17509 17603 20129 +3 15463 1623 13945 +3 33327 33328 33436 +3 21673 13017 12558 +3 1623 11106 13290 +3 22728 22733 13272 +3 10116 16933 15030 +3 16617 20032 20031 +3 15030 16617 20031 +3 23033 23131 22144 +3 20780 23022 20702 +3 22133 22132 22036 +3 22035 22036 22132 +3 10506 15408 21151 +3 20982 21151 15408 +3 15337 21977 15408 +3 10506 15337 15408 +3 21884 21696 21977 +3 15337 21884 21977 +3 8110 4648 4782 +3 4782 8558 8110 +3 20025 18053 18143 +3 20308 17940 19711 +3 20007 20006 19975 +3 19976 20007 19975 +3 20087 20086 20006 +3 20007 20087 20006 +3 20172 20171 20086 +3 20087 20172 20086 +3 20258 20257 20171 +3 20172 20258 20171 +3 20343 20342 20257 +3 20258 20343 20257 +3 20427 20426 20342 +3 20343 20427 20342 +3 20512 20511 20426 +3 20427 20512 20426 +3 20594 20593 20511 +3 20512 20594 20511 +3 20032 20489 20486 +3 21567 21681 21394 +3 35937 35853 35592 +3 25716 24301 20757 +3 20919 20918 20838 +3 20839 20919 20838 +3 21002 21001 20918 +3 20919 21002 20918 +3 21002 21088 21087 +3 21001 21002 21087 +3 27845 27961 21003 +3 21087 21088 21175 +3 21176 21263 21262 +3 21175 21176 21262 +3 21263 21353 21352 +3 21262 21263 21352 +3 21353 21444 21443 +3 21352 21353 21443 +3 21443 21444 21533 +3 23556 25965 25534 +3 26149 26150 26290 +3 24956 24323 24859 +3 24099 25472 25471 +3 25312 25021 23667 +3 26181 26182 26322 +3 25537 24609 14252 +3 25242 25104 30509 +3 26323 22003 23651 +3 23568 23569 30763 +3 23648 24717 24221 +3 12026 24798 24190 +3 21728 21822 25249 +3 25890 25891 26032 +3 24267 24782 21815 +3 24316 25387 24331 +3 24390 24234 24175 +3 23597 26565 26469 +3 25956 20845 24644 +3 32612 32726 32611 +3 25643 25101 25786 +3 22785 22884 22883 +3 34940 34939 34810 +3 32540 32649 32539 +3 21487 17757 21671 +3 19923 23081 23179 +3 17757 19382 21671 +3 25171 24183 25205 +3 25069 24947 25070 +3 24946 11690 24259 +3 25204 24046 25205 +3 21778 25054 21541 +3 24807 24808 24173 +3 12958 23923 12957 +3 25484 25628 15317 +3 13342 13341 13245 +3 21543 23981 23849 +3 23864 23808 24041 +3 30926 30984 30925 +3 11836 24834 11483 +3 23981 23864 24041 +3 11499 12466 15210 +3 25606 16755 25607 +3 16555 16710 4800 +3 5187 12961 17093 +3 22354 22258 15203 +3 20755 25716 20839 +3 17084 22737 13787 +3 15193 22354 15203 +3 15193 15203 13787 +3 22146 15193 13787 +3 15082 11499 15210 +3 16021 17093 20264 +3 20433 20264 12466 +3 11499 20433 12466 +3 22432 22531 21483 +3 20433 16021 20264 +3 23125 22531 22432 +3 20697 22737 17084 +3 23413 23125 15239 +3 15239 23125 22432 +3 23413 23316 12631 +3 23316 23413 15239 +3 21205 15468 21204 +3 21756 23413 12631 +3 22229 22228 22132 +3 15468 15467 21204 +3 22144 22047 22048 +3 22133 22229 22132 +3 23022 22436 20702 +3 23342 22750 13579 +3 20031 20032 20486 +3 21771 22267 5960 +3 20489 21293 21292 +3 22534 15191 15593 +3 22435 22534 15593 +3 15191 22045 16012 +3 15593 15191 16012 +3 22045 20868 13903 +3 16012 22045 13903 +3 20868 15202 15319 +3 13903 20868 15319 +3 15202 23246 23344 +3 15319 15202 23344 +3 15068 22852 23344 +3 23246 15068 23344 +3 15068 23233 16934 +3 22852 15068 16934 +3 23233 20227 20226 +3 16934 23233 20226 +3 2522 14241 20226 +3 20227 2522 20226 +3 2522 22160 20237 +3 14241 2522 20237 +3 20025 18234 22056 +3 20860 20859 18439 +3 20534 20540 21302 +3 13392 13372 13180 +3 20883 20963 20962 +3 20120 20103 20102 +3 13855 13431 20071 +3 21673 21604 13272 +3 20486 20489 21292 +3 21293 22363 22342 +3 21292 21293 22342 +3 22363 6763 9790 +3 22342 22363 9790 +3 22829 23022 22828 +3 23120 4664 22267 +3 22436 23131 23033 +3 20702 22436 23033 +3 9630 5589 23236 +3 35063 35064 35192 +3 12728 10506 9415 +3 21151 9415 10506 +3 1059 15337 10506 +3 12728 1059 10506 +3 21979 21884 15337 +3 1059 21979 15337 +3 20048 20534 20533 +3 18313 22929 23126 +3 16046 15906 12569 +3 18556 21046 20963 +3 22100 24142 26829 +3 35064 35193 35192 +3 22195 22100 19017 +3 20259 20258 20172 +3 12774 24388 12866 +3 20344 20343 20258 +3 20259 20344 20258 +3 20428 20427 20343 +3 34935 34934 34805 +3 20513 20512 20427 +3 20343 20344 20428 +3 20427 20428 20513 +3 20513 20595 20512 +3 6763 21370 21367 +3 15633 16618 14052 +3 9790 6763 21367 +3 31507 31506 31434 +3 20920 20919 20839 +3 20839 27498 20840 +3 27613 20839 20840 +3 24491 25812 13240 +3 25812 24491 25820 +3 21003 20920 27730 +3 24778 24207 24156 +3 22979 21792 12336 +3 27961 21177 21088 +3 21176 21177 21263 +3 21263 21264 21353 +3 3322 11332 13427 +3 34806 34805 34677 +3 21179 25587 24404 +3 22586 24126 24747 +3 24328 23727 24894 +3 21912 21179 24404 +3 34272 34271 34133 +3 13269 12191 24159 +3 24194 24483 21720 +3 26039 26040 26181 +3 26182 26323 26322 +3 25213 25665 25288 +3 25807 25665 25213 +3 25467 25466 16752 +3 31812 31813 31918 +3 24798 24931 23827 +3 24931 24932 23827 +3 14870 14989 14988 +3 23646 25671 24900 +3 34678 34677 34549 +3 21423 24950 23798 +3 22588 22687 22686 +3 22587 22588 22686 +3 22687 22786 22785 +3 22686 22687 22785 +3 22786 22885 22884 +3 22785 22786 22884 +3 22885 22984 22983 +3 22884 22885 22983 +3 22984 23082 23081 +3 22983 22984 23081 +3 23082 23180 23179 +3 23277 23179 23180 +3 23180 23278 23277 +3 23277 23374 21474 +3 23278 23375 23374 +3 21474 23471 16596 +3 23375 23472 23471 +3 15316 23471 23472 +3 23472 15190 15316 +3 22587 22686 30330 +3 31364 31431 31363 +3 15190 15458 15316 +3 26198 23548 26141 +3 24110 24432 24266 +3 11667 27180 27179 +3 23798 23617 25067 +3 24579 25208 24207 +3 26284 13079 26283 +3 12193 23958 3799 +3 25049 25784 19564 +3 21243 23503 25098 +3 24482 24144 16758 +3 23921 25300 262 +3 21605 21243 25098 +3 16021 5187 17093 +3 23723 26100 24307 +3 13654 13556 15462 +3 15594 13654 15462 +3 13465 13561 12870 +3 15589 15725 15071 +3 13561 13465 12961 +3 14907 7903 16606 +3 5187 13561 12961 +3 13561 14907 12870 +3 12870 14907 16606 +3 7903 7457 12830 +3 16606 7903 12830 +3 7457 13662 13661 +3 12891 20366 14685 +3 21138 21133 20365 +3 27047 28357 28356 +3 20366 20365 14685 +3 35234 22325 22228 +3 19598 19820 18037 +3 17087 21771 5960 +3 22230 35105 22229 +3 21370 9740 12655 +3 23017 23016 22917 +3 21367 21370 12655 +3 9740 7074 21853 +3 11564 14333 15191 +3 11954 11401 13280 +3 14333 22241 22045 +3 15191 14333 22045 +3 22241 22075 20868 +3 22045 22241 20868 +3 22075 12467 15202 +3 20868 22075 15202 +3 12467 23148 23246 +3 15202 12467 23246 +3 23148 13381 15068 +3 23246 23148 15068 +3 13381 21874 23233 +3 15068 13381 23233 +3 20313 20227 23233 +3 21874 20313 23233 +3 3589 2522 20227 +3 20313 3589 20227 +3 2845 9504 9389 +3 2522 3589 22160 +3 5416 11121 14155 +3 16189 21884 21979 +3 13372 14251 14250 +3 13180 13372 14250 +3 13960 19982 20046 +3 20882 20883 20962 +3 20241 20071 14432 +3 25269 12752 25413 +3 12655 9740 21853 +3 23121 23219 21853 +3 7074 23121 21853 +3 18520 20944 23219 +3 23121 18520 23219 +3 21285 17087 21284 +3 22163 121 15539 +3 21771 23120 22267 +3 23022 20780 22828 +3 22829 22828 4664 +3 23120 22829 4664 +3 27046 27047 28356 +3 22619 22618 22519 +3 23788 23787 15152 +3 274 16108 23938 +3 16938 12728 15152 +3 1680 16938 15152 +3 14058 1059 12728 +3 16938 14058 12728 +3 14058 16334 1059 +3 16517 9292 16365 +3 8558 4782 788 +3 20307 20306 17702 +3 22160 3589 18047 +3 27672 12268 27555 +3 19147 4954 19767 +3 17969 17968 17876 +3 15560 18138 19861 +3 20345 20344 20259 +3 34275 34413 34274 +3 24928 24676 24929 +3 25858 26234 23516 +3 23732 24396 23546 +3 14042 14238 14142 +3 24131 25301 24694 +3 24978 20842 25532 +3 26424 31955 32055 +3 18668 20105 19711 +3 25913 23714 22778 +3 21889 23555 23806 +3 23555 15218 23806 +3 22290 25917 25774 +3 22385 25923 25494 +3 24103 24868 24425 +3 24071 23557 25249 +3 12107 23528 23058 +3 24754 26204 24484 +3 35683 35515 21647 +3 23336 24686 24535 +3 12110 26058 24343 +3 21909 25855 21813 +3 26290 26291 23764 +3 25614 25756 25755 +3 25613 25614 25755 +3 24036 23975 25916 +3 23971 24030 23970 +3 24739 24187 26208 +3 23911 23970 23910 +3 24931 4230 24932 +3 4230 24697 24932 +3 12214 5563 12118 +3 6922 26799 11704 +3 22490 22589 22588 +3 30065 22489 22587 +3 22589 22688 22687 +3 22588 22589 22687 +3 22688 22787 22786 +3 22687 22688 22786 +3 22787 22886 22885 +3 22786 22787 22885 +3 22886 22985 22984 +3 22885 22886 22984 +3 22985 23083 23082 +3 22984 22985 23082 +3 23083 23181 23180 +3 23082 23083 23180 +3 23181 23279 23278 +3 23180 23181 23278 +3 23279 23376 23375 +3 23278 23279 23375 +3 23376 23473 23472 +3 23375 23376 23472 +3 23473 15189 15190 +3 23472 23473 15190 +3 15189 15726 15458 +3 15190 15189 15458 +3 9887 8974 15458 +3 15726 9887 15458 +3 20096 26939 20182 +3 9887 1450 8974 +3 25979 24491 16930 +3 35847 35888 35559 +3 25315 22289 23509 +3 22289 23554 23509 +3 26168 26309 26308 +3 26100 26101 24307 +3 24175 24234 25533 +3 24790 24523 15591 +3 4545 12273 24781 +3 24876 25493 22078 +3 15737 15738 13556 +3 13654 15737 13556 +3 15072 15594 15462 +3 22414 22512 22413 +3 15725 15072 15071 +3 15071 15072 15462 +3 171 14762 23398 +3 23399 171 23398 +3 12871 12627 12626 +3 14912 12871 12626 +3 16921 7788 16917 +3 5353 14236 2623 +3 12891 14685 14236 +3 7788 5353 2623 +3 4658 10689 4065 +3 4064 12637 15081 +3 4504 17089 20266 +3 4065 4064 15081 +3 22619 22718 22618 +3 15323 14042 14142 +3 22918 23017 22917 +3 12746 12839 23446 +3 23115 23114 23016 +3 21324 22634 22633 +3 22918 22917 22818 +3 30829 30828 30694 +3 15878 23228 14333 +3 11564 15191 22534 +3 23228 22242 22241 +3 14333 23228 22241 +3 22242 20805 22075 +3 22241 22242 22075 +3 20805 5729 12467 +3 22075 20805 12467 +3 5729 20367 23148 +3 12467 5729 23148 +3 20367 7087 13381 +3 23148 20367 13381 +3 7087 21779 21874 +3 13381 7087 21874 +3 18402 18047 3589 +3 21874 21779 20313 +3 18920 5817 5948 +3 5948 5815 18920 +3 18534 17754 19486 +3 21586 21494 16857 +3 13392 15094 2229 +3 30591 30725 30590 +3 20880 20881 20960 +3 78 2229 13297 +3 21383 22659 22634 +3 7363 14251 13372 +3 15637 13855 20241 +3 23984 30784 30785 +3 21302 21324 22633 +3 18478 1207 18383 +3 21217 21218 22157 +3 20407 21218 21217 +3 22157 22163 15539 +3 17087 5960 21284 +3 121 21285 21284 +3 15539 121 21284 +3 22520 22619 22519 +3 22718 22717 22618 +3 3602 23786 23842 +3 23841 23176 3602 +3 23995 580 274 +3 23176 20319 3602 +3 16616 1680 20945 +3 20319 16616 20945 +3 20663 16938 1680 +3 16616 20663 1680 +3 12468 14058 16938 +3 20663 12468 16938 +3 16178 16386 4950 +3 17623 19928 18868 +3 11106 15091 19982 +3 20799 20881 20880 +3 3310 2802 2082 +3 21578 21592 4907 +3 18175 12825 7363 +3 11552 1832 13203 +3 14100 14099 14002 +3 11725 35816 21305 +3 2768 7107 22449 +3 34001 34137 34000 +3 27847 27848 27963 +3 23406 23405 23308 +3 12284 3066 6265 +3 23309 23406 23308 +3 24242 26679 26678 +3 11552 13203 16461 +3 20214 20213 20128 +3 20129 20214 20128 +3 26806 20260 26805 +3 25968 25826 24376 +3 15553 15679 16490 +3 20740 24268 26204 +3 24080 20740 24413 +3 23142 21144 21318 +3 25755 25756 25897 +3 22955 22657 23054 +3 24673 19915 4634 +3 25898 26040 26039 +3 16440 25615 16441 +3 16146 25763 16147 +3 25617 25759 25758 +3 23550 22004 21815 +3 25616 25617 25758 +3 25759 25901 25900 +3 26196 26195 26053 +3 25758 25759 25900 +3 6280 28682 5555 +3 25756 25898 25897 +3 24044 24425 16312 +3 30621 35498 35520 +3 4230 25350 24697 +3 25757 25899 25898 +3 24739 26208 26207 +3 25432 16311 4230 +3 20824 24012 24437 +3 14482 24092 14559 +3 22491 22590 22589 +3 30066 22490 22489 +3 30621 35374 35498 +3 22589 22590 22688 +3 22689 22590 30334 +3 22688 22689 22787 +3 22788 22887 22886 +3 22787 22788 22886 +3 22887 22986 22985 +3 22886 22887 22985 +3 22986 23084 23083 +3 22985 22986 23083 +3 23084 23182 23181 +3 23083 23084 23181 +3 23280 23279 23181 +3 23182 23280 23181 +3 23280 23377 23376 +3 23279 23280 23376 +3 23377 23474 23473 +3 23376 23377 23473 +3 23474 34 15189 +3 23473 23474 15189 +3 34 15590 15726 +3 15189 34 15726 +3 13964 9887 15726 +3 15590 13964 15726 +3 1565 1450 9887 +3 13964 1565 9887 +3 35391 22435 35668 +3 1565 15206 1450 +3 23723 24307 23509 +3 23554 23723 23509 +3 12273 11884 24781 +3 25072 23363 25022 +3 20906 4545 24781 +3 24523 25094 15591 +3 24026 4545 23726 +3 11884 12215 24781 +3 22512 22611 22610 +3 25538 21536 25684 +3 22511 22512 22610 +3 22611 22710 22709 +3 22610 22611 22709 +3 22710 22809 22808 +3 23106 23204 23203 +3 23105 23106 23203 +3 12627 13279 13184 +3 12626 12627 13184 +3 22957 16921 22858 +3 7788 2623 16917 +3 16765 13336 13432 +3 15879 16765 13432 +3 12637 4504 2767 +3 15081 12637 2767 +3 20090 34995 20009 +3 15746 16461 16772 +3 17840 17912 30832 +3 16773 16772 20009 +3 35680 35620 14175 +3 8660 29955 28477 +3 25901 26043 26042 +3 28372 28494 28736 +3 27137 28367 28365 +3 24358 15812 25189 +3 17870 20189 17773 +3 20362 20446 20445 +3 18335 19016 19435 +3 30929 30987 30928 +3 13795 23326 23228 +3 15878 13795 23228 +3 23326 23034 22242 +3 23228 23326 22242 +3 23034 20804 20805 +3 22242 23034 20805 +3 20804 11400 5729 +3 20805 20804 5729 +3 11400 20368 20367 +3 5729 11400 20367 +3 20368 12937 7087 +3 20367 20368 7087 +3 12937 21686 21779 +3 7087 12937 21779 +3 35611 35828 35520 +3 21686 20314 21779 +3 22426 33925 22427 +3 21131 21045 18652 +3 20307 20392 20391 +3 21039 18646 21038 +3 15094 13392 13180 +3 14589 14345 5416 +3 24260 25255 23704 +3 20047 20533 20491 +3 351 23998 23997 +3 19982 13959 20047 +3 21037 18645 21036 +3 20791 20792 20873 +3 4284 2053 20484 +3 33866 34001 33865 +3 12839 12284 23446 +3 1832 7437 8674 +3 20406 20407 21217 +3 21218 22163 22157 +3 22817 22816 22717 +3 22718 22817 22717 +3 6272 23839 20973 +3 440 23896 23955 +3 33866 33865 33731 +3 20974 6272 20973 +3 7925 23176 170 +3 6272 7925 170 +3 20900 20319 23176 +3 7925 20900 23176 +3 20900 16800 20319 +3 16800 16799 16616 +3 20373 17980 17979 +3 20303 20302 17700 +3 16641 16485 12468 +3 12268 27672 12353 +3 34970 6931 35098 +3 23239 21488 7080 +3 21577 21484 5275 +3 23898 23897 6254 +3 20860 18440 18536 +3 7437 7880 8674 +3 3928 13337 13885 +3 14254 16937 21029 +3 21029 20143 20406 +3 12906 16015 14254 +3 20143 20407 20406 +3 23446 12284 6265 +3 16937 20143 21029 +3 3066 16015 12906 +3 6265 3066 12906 +3 23211 23309 23308 +3 23210 23211 23308 +3 14064 15042 23405 +3 23406 14064 23405 +3 15746 11552 16461 +3 1832 8674 13203 +3 18428 19697 17716 +3 16773 15746 16772 +3 18614 20133 21317 +3 33605 33732 33604 +3 20922 25447 3988 +3 20694 20776 20775 +3 25900 25901 26042 +3 26043 26185 26184 +3 26042 26043 26184 +3 26185 26326 26325 +3 24618 25862 25769 +3 26184 26185 26325 +3 25897 25898 26039 +3 25920 23604 24866 +3 24091 24150 24090 +3 26040 26182 26181 +3 24467 24430 28125 +3 22882 23935 23678 +3 9532 3848 9542 +3 26205 21333 22079 +3 26326 26060 24270 +3 26325 26326 24270 +3 26060 24799 12274 +3 24270 26060 12274 +3 32946 33052 32945 +3 26115 24371 11838 +3 24503 25330 25019 +3 26696 26082 25213 +3 738 737 26143 +3 24743 24984 24981 +3 25596 4192 25597 +3 24726 25202 22857 +3 24943 12276 20152 +3 24390 23275 22297 +3 20762 21449 23689 +3 26098 24134 24998 +3 24832 19986 24945 +3 22491 22490 30067 +3 24848 25591 23705 +3 20355 23812 20354 +3 24920 23659 25141 +3 25923 24353 25513 +3 22789 22888 22887 +3 22788 22789 22887 +3 22888 22987 22986 +3 22887 22888 22986 +3 22987 23085 23084 +3 22986 22987 23084 +3 23183 23182 23084 +3 23085 23183 23084 +3 23281 23280 23182 +3 23183 23281 23182 +3 23281 23378 23377 +3 23280 23281 23377 +3 23378 23475 23474 +3 23377 23378 23474 +3 23475 6663 34 +3 23474 23475 34 +3 15727 15590 34 +3 6663 15727 34 +3 232 13964 15590 +3 15727 232 15590 +3 1681 1565 13964 +3 232 1681 13964 +3 15080 15206 1565 +3 1681 15080 1565 +3 15631 23635 23152 +3 15080 16017 15206 +3 22391 12339 25502 +3 12687 16017 15339 +3 23363 25024 25022 +3 24929 25228 24930 +3 24461 22683 23529 +3 25228 24676 20261 +3 4552 13365 13366 +3 23079 24448 23460 +3 18073 20542 18166 +3 13365 12193 15603 +3 22709 22710 22808 +3 22809 22908 22907 +3 23204 23302 23301 +3 23203 23204 23301 +3 13279 13863 13764 +3 13764 13863 2918 +3 13862 8478 12391 +3 13863 13862 12391 +3 13336 13857 13759 +3 13432 13336 13759 +3 13244 9394 13885 +3 15409 13244 13885 +3 16925 13244 15409 +3 16924 16925 15409 +3 19642 21593 21502 +3 455 21467 21466 +3 17899 17802 17803 +3 2082 23145 3310 +3 19757 16551 18555 +3 17759 19853 17653 +3 35797 35635 11808 +3 14583 14504 8257 +3 20695 20614 18250 +3 19210 18513 18717 +3 18845 18844 18746 +3 12569 15906 3800 +3 15878 14333 11564 +3 29687 22247 21493 +3 13053 23423 23326 +3 13795 13053 23326 +3 23423 23328 23034 +3 23326 23423 23034 +3 23328 20495 20804 +3 23034 23328 20804 +3 14852 11400 20804 +3 20495 14852 20804 +3 20369 20368 11400 +3 14852 20369 11400 +3 20369 22752 12937 +3 20368 20369 12937 +3 22752 21593 21686 +3 12937 22752 21686 +3 21593 19641 21686 +3 9862 19698 16453 +3 20716 20717 20798 +3 19536 15194 21312 +3 16611 2910 13557 +3 13570 11776 11861 +3 23122 23126 22929 +3 11548 13297 15608 +3 33179 33284 33178 +3 16800 16961 16799 +3 6258 21577 5275 +3 4954 19147 4818 +3 18484 20051 20024 +3 20218 17511 17606 +3 34079 3094 34329 +3 16768 16931 13337 +3 7437 12839 12746 +3 7880 7437 12746 +3 23954 20058 440 +3 21393 11711 21575 +3 25138 25004 2252 +3 21575 20646 21393 +3 21056 20974 20058 +3 20646 21056 20058 +3 3473 6272 20974 +3 21056 3473 20974 +3 13422 7925 6272 +3 3473 13422 6272 +3 20980 20900 7925 +3 13422 20980 7925 +3 14743 16858 5472 +3 3615 3486 21682 +3 16944 351 463 +3 26357 26359 26400 +3 17790 17886 17885 +3 21051 16037 22343 +3 13340 11279 928 +3 11106 19982 13960 +3 30828 17816 30827 +3 1575 6117 2053 +3 9394 3928 13885 +3 5696 5828 17088 +3 22916 22915 22816 +3 22916 23015 22915 +3 22817 22916 22816 +3 23015 23014 22915 +3 23113 23112 23014 +3 23015 23113 23014 +3 23113 23211 23210 +3 23112 23113 23210 +3 14064 14042 15323 +3 15042 14064 15323 +3 10689 4658 16757 +3 20366 21138 20365 +3 16756 10689 16757 +3 10689 4064 4065 +3 13270 12110 26196 +3 24248 24287 25565 +3 24799 24084 25427 +3 33373 33372 33263 +3 12274 24799 25427 +3 24084 25156 25295 +3 25427 24084 25295 +3 25156 23836 24882 +3 26194 26193 26051 +3 25295 25156 24882 +3 25722 23875 23869 +3 23586 24624 24623 +3 32837 32945 32944 +3 24776 24202 23653 +3 25358 24858 14794 +3 20015 19235 22288 +3 21452 25050 25051 +3 13304 35928 35431 +3 30870 30869 21630 +3 23621 24287 24248 +3 23836 12643 24650 +3 25496 2542 25497 +3 24882 23836 24650 +3 12643 25811 24599 +3 24719 24671 24823 +3 24650 12643 24599 +3 25190 21634 25329 +3 336 25217 23620 +3 20885 14252 25389 +3 25330 25190 25329 +3 26023 26165 26164 +3 25389 25394 24043 +3 25607 25749 25748 +3 24183 25204 25205 +3 24644 20762 23689 +3 24234 25537 25533 +3 25474 25475 23530 +3 23816 25391 21449 +3 25016 26259 25021 +3 24809 24832 24945 +3 22788 30468 22789 +3 23985 26061 25918 +3 22691 22790 22789 +3 23813 21630 26394 +3 22790 22889 22888 +3 22789 22790 22888 +3 22889 22988 22987 +3 22888 22889 22987 +3 22988 23086 23085 +3 22987 22988 23085 +3 23184 23183 23085 +3 23086 23184 23085 +3 23184 23282 23281 +3 23183 23184 23281 +3 23282 23379 23378 +3 23281 23282 23378 +3 23379 23476 23475 +3 23378 23379 23475 +3 23476 793 6663 +3 23475 23476 6663 +3 15728 15727 6663 +3 793 15728 6663 +3 5727 232 15727 +3 15728 5727 15727 +3 1797 1681 232 +3 5727 1797 232 +3 15207 15080 1681 +3 1797 15207 1681 +3 16159 16017 15080 +3 15207 16159 15080 +3 35784 35403 35886 +3 16159 15339 16017 +3 22758 12356 20822 +3 25452 23994 24823 +3 34137 34136 34000 +3 23598 26496 26684 +3 25720 25709 24444 +3 25214 26211 25526 +3 24493 23646 23822 +3 23646 24900 23139 +3 22808 22809 22907 +3 24200 12625 21243 +3 23399 23398 23301 +3 22908 23007 23006 +3 26022 26023 26164 +3 24416 24406 24359 +3 22957 22858 12391 +3 23947 12444 23613 +3 15281 15154 13759 +3 15281 9186 15154 +3 11440 5354 5696 +3 5828 17090 17088 +3 19408 19741 19933 +3 29813 28372 28736 +3 27269 20677 20595 +3 6873 21379 11454 +3 6532 28487 19137 +3 27202 27255 28601 +3 31196 31260 31195 +3 20865 14243 13053 +3 20864 20865 13053 +3 14243 23130 23423 +3 13053 14243 23423 +3 23130 23425 23328 +3 23423 23130 23328 +3 23425 13424 20495 +3 23328 23425 20495 +3 13424 14851 14852 +3 20495 13424 14852 +3 20370 20369 14852 +3 14851 20370 14852 +3 20370 22653 22752 +3 20369 20370 22752 +3 22653 21502 21593 +3 22752 22653 21593 +3 22545 29539 22158 +3 15998 15997 15858 +3 20120 13425 2790 +3 20798 20799 20880 +3 3859 14589 5416 +3 19992 16611 13557 +3 13425 20120 20102 +3 20131 21497 11279 +3 16962 20980 17128 +3 23028 22832 22931 +3 20704 18260 18166 +3 18155 18250 20614 +3 17088 17090 16924 +3 2758 17249 11440 +3 3928 16768 13337 +3 34361 11718 16931 +3 16756 16757 14142 +3 14238 16756 14142 +3 21221 21575 16464 +3 26723 26722 31560 +3 20809 20646 21575 +3 21221 20809 21575 +3 21142 21056 20646 +3 20809 21142 20646 +3 22453 3473 21056 +3 21142 22453 21056 +3 17097 13422 3473 +3 22453 17097 3473 +3 5759 19825 19306 +3 18609 18520 18514 +3 24631 20671 20672 +3 19414 21325 18992 +3 17704 20393 20392 +3 21046 18652 21045 +3 20636 20635 20553 +3 18165 18164 18073 +3 19642 19645 19641 +3 11234 9771 8527 +3 31835 31834 31734 +3 19491 15365 23410 +3 17090 16925 16924 +3 10236 3335 2758 +3 17089 16765 15879 +3 20266 17089 15879 +3 5353 12891 14236 +3 8478 22957 12391 +3 22141 14240 22074 +3 14240 21205 9623 +3 21138 22141 21133 +3 21205 21204 9623 +3 22141 22074 21133 +3 14240 9623 22074 +3 25054 24927 21541 +3 22097 6944 29432 +3 13590 25269 25268 +3 26213 23433 24940 +3 25565 25566 24458 +3 24425 25327 26146 +3 13555 23875 25724 +3 25566 22394 24458 +3 26247 26110 20682 +3 26019 26161 26160 +3 24623 24624 25854 +3 25255 21818 21723 +3 23621 22350 23654 +3 21537 24948 26226 +3 26171 26312 26311 +3 23835 23600 25278 +3 11669 24217 23830 +3 25687 25545 23941 +3 25422 22959 24290 +3 25394 24044 24043 +3 25190 25051 21634 +3 22105 22104 26191 +3 24671 24672 24823 +3 22424 23361 30825 +3 25811 23713 23612 +3 24599 25811 23612 +3 23713 24495 24139 +3 23612 23713 24139 +3 20094 24767 25449 +3 27269 20595 20513 +3 23361 23264 30825 +3 25051 25052 21634 +3 25533 14252 20885 +3 25886 25887 26028 +3 21984 23336 26058 +3 20762 23816 21449 +3 19422 19432 34478 +3 23824 24832 24809 +3 32947 32946 32838 +3 12251 20152 24696 +3 23530 23824 24809 +3 35190 35189 35060 +3 21357 25093 22103 +3 22593 22692 22691 +3 35061 35190 35060 +3 22692 22791 22790 +3 22691 22692 22790 +3 22791 22890 22889 +3 22790 22791 22889 +3 22890 22989 22988 +3 22889 22890 22988 +3 22989 23087 23086 +3 22988 22989 23086 +3 23087 23185 23184 +3 23086 23087 23184 +3 23185 23283 23282 +3 23184 23185 23282 +3 23283 23380 23379 +3 23282 23283 23379 +3 23380 23477 23476 +3 23379 23380 23476 +3 23477 8901 793 +3 23476 23477 793 +3 15866 15728 793 +3 8901 15866 793 +3 3605 5727 15728 +3 15866 3605 15728 +3 16157 1797 5727 +3 3605 16157 5727 +3 15208 15207 1797 +3 16157 15208 1797 +3 16160 16159 15207 +3 15208 16160 15207 +3 15212 15339 16159 +3 16160 15212 16159 +3 33054 33053 32947 +3 15212 14961 15339 +3 24042 23614 23982 +3 31994 31993 31892 +3 23614 25214 25386 +3 26211 12801 25526 +3 23822 23646 23139 +3 24900 25808 25305 +3 4552 26289 13365 +3 13366 13365 15603 +3 26140 23486 21543 +3 25866 25867 22976 +3 25046 24919 25142 +3 25738 25739 25880 +3 15470 13010 22174 +3 22174 21794 13461 +3 21887 23907 23909 +3 26293 22758 12355 +3 16446 3335 16599 +3 24378 21267 25029 +3 16555 4800 159 +3 16196 11723 11444 +3 24832 24954 19986 +3 25400 23675 215 +3 24271 25829 25010 +3 13091 22270 332 +3 31786 31892 31785 +3 23701 25215 24904 +3 35850 35568 19103 +3 24967 25099 20842 +3 11551 23521 28625 +3 25449 23973 20429 +3 24013 24075 24967 +3 24480 21069 24139 +3 13010 21794 22174 +3 24495 24480 24139 +3 24282 24529 21069 +3 24480 24282 21069 +3 24310 24412 24529 +3 31687 31686 31591 +3 35908 21574 20864 +3 20866 3198 14243 +3 20865 20866 14243 +3 3198 23032 23130 +3 14243 3198 23130 +3 23032 20675 23425 +3 23130 23032 23425 +3 20675 3867 13424 +3 23425 20675 13424 +3 11185 14851 13424 +3 3867 11185 13424 +3 11185 20371 20370 +3 14851 11185 20370 +3 20371 22554 22653 +3 20370 20371 22653 +3 22554 21410 21502 +3 22653 22554 21502 +3 25722 25721 25104 +3 19642 21502 21410 +3 12918 20131 4907 +3 17759 19881 18506 +3 19992 13557 14345 +3 14589 19992 14345 +3 22453 6117 17097 +3 20385 20384 20299 +3 14251 3859 14250 +3 20491 20533 21300 +3 20025 18144 18234 +3 20323 18308 21492 +3 5354 5828 5696 +3 3335 10236 16599 +3 2767 4504 20266 +3 60 2888 20174 +3 21221 16464 20061 +3 23951 21872 20061 +3 21485 21221 20061 +3 20029 21485 20061 +3 21867 20809 21221 +3 21485 21867 21221 +3 21229 21142 20809 +3 21867 21229 20809 +3 20063 22453 21142 +3 21229 20063 21142 +3 17097 6117 123 +3 35336 12472 35335 +3 14099 10326 14002 +3 8040 8868 7885 +3 16611 13084 2910 +3 13180 13087 15020 +3 24240 26792 26793 +3 20717 20716 20635 +3 21302 22633 22629 +3 22633 6258 22629 +3 18378 19882 17561 +3 18749 18748 21130 +3 17757 18169 19492 +3 17249 5354 11440 +3 3335 17249 2758 +3 13857 15281 13759 +3 9186 14838 15154 +3 16921 16917 22858 +3 12716 13375 13279 +3 13662 23429 21684 +3 21684 23429 20072 +3 13661 13662 21684 +3 23429 20157 20072 +3 20157 12871 14912 +3 20072 20157 14912 +3 25895 26037 26036 +3 4812 15654 15661 +3 12104 24501 24201 +3 20906 20825 24746 +3 16312 24425 26146 +3 25446 24025 24675 +3 24458 22394 25520 +3 24043 24044 16312 +3 25520 25521 23699 +3 25521 24567 23699 +3 23699 24567 25019 +3 24567 24503 25019 +3 7043 34723 6945 +3 25330 25329 25019 +3 21095 21183 21182 +3 21182 21183 21269 +3 21271 21272 28455 +3 21269 21270 28454 +3 25931 25429 24046 +3 16915 25604 25603 +3 28479 30621 35520 +3 25519 24104 22196 +3 24282 24310 24529 +3 22288 24537 25952 +3 24223 24224 24412 +3 24310 24223 24412 +3 22192 25493 24876 +3 24223 23618 24324 +3 18274 20723 19121 +3 25471 25470 24095 +3 25195 24834 23520 +3 29674 29673 22107 +3 22108 22204 22203 +3 22203 22299 29808 +3 22204 22300 22299 +3 32840 32948 32839 +3 29937 22299 30069 +3 29808 22299 29937 +3 22397 22495 22494 +3 26927 24636 24481 +3 22495 22594 22593 +3 22494 22495 22593 +3 22594 22693 22692 +3 22593 22594 22692 +3 22693 22792 22791 +3 22692 22693 22791 +3 22792 22891 22890 +3 22791 22792 22890 +3 22891 22990 22989 +3 22890 22891 22989 +3 22990 23088 23087 +3 22989 22990 23087 +3 23088 23186 23185 +3 23087 23088 23185 +3 23186 23284 23283 +3 23185 23186 23283 +3 23284 23381 23380 +3 23283 23284 23380 +3 23381 23478 23477 +3 23380 23381 23477 +3 9560 8901 23477 +3 23478 9560 23477 +3 15867 15866 8901 +3 9560 15867 8901 +3 10139 3605 15866 +3 15867 10139 15866 +3 16301 16157 3605 +3 10139 16301 3605 +3 15335 15208 16157 +3 16301 15335 16157 +3 16305 16160 15208 +3 15335 16305 15208 +3 15211 15212 16160 +3 16305 15211 16160 +3 14963 14961 15212 +3 15211 14963 15212 +3 12688 15214 14961 +3 14963 12688 14961 +3 31893 31994 31892 +3 12688 12664 15214 +3 23139 24900 25305 +3 26572 26571 24912 +3 32398 32397 32294 +3 6006 11404 29413 +3 27647 12167 12084 +3 12481 16770 10601 +3 12003 12004 27647 +3 32295 32398 32294 +3 24925 26117 25975 +3 19912 6132 12379 +3 23498 25913 25199 +3 24123 24185 24230 +3 26205 25535 21333 +3 22172 21887 23909 +3 20760 60 20174 +3 16015 16937 14254 +3 24136 24017 23629 +3 18430 18220 18402 +3 22583 23630 25375 +3 25680 20763 25375 +3 23909 23907 25324 +3 21887 21699 23907 +3 26259 26119 25021 +3 23895 25326 25325 +3 24198 26105 25316 +3 26158 26159 26299 +3 25589 24096 25584 +3 24469 25674 23517 +3 16439 16440 16592 +3 15401 15273 15402 +3 13079 25713 23690 +3 26119 25977 25017 +3 25829 25011 25010 +3 26150 1679 26151 +3 24779 24374 24373 +3 25497 23538 25496 +3 23584 24623 24612 +3 24709 24779 24373 +3 20015 22288 25822 +3 17081 17245 17080 +3 25099 14153 20842 +3 13146 20015 25822 +3 25327 21778 26146 +3 22366 24075 24013 +3 26065 25065 25064 +3 26066 26065 25064 +3 24224 24223 24324 +3 11855 24318 23584 +3 32505 32614 32504 +3 24324 23618 17576 +3 12191 24167 24159 +3 24652 23725 20905 +3 23416 22630 20866 +3 26356 26397 26396 +3 22630 10124 3198 +3 20866 22630 3198 +3 10124 22933 23032 +3 3198 10124 23032 +3 22933 22738 20675 +3 23032 22933 20675 +3 22738 17105 3867 +3 20675 22738 3867 +3 14047 11185 3867 +3 17105 14047 3867 +3 14047 21854 20371 +3 11185 14047 20371 +3 21854 22456 22554 +3 20371 21854 22554 +3 21320 21410 22554 +3 22456 21320 22554 +3 21320 21319 20397 +3 21410 21320 20397 +3 125 12361 20811 +3 26789 24782 24267 +3 20470 20555 20469 +3 13084 4262 2910 +3 6258 5275 22629 +3 22453 20063 6117 +3 20615 20575 20102 +3 27262 30600 29133 +3 19093 19029 28132 +3 18863 21240 18086 +3 32505 32504 32399 +3 14044 13946 16599 +3 2921 20029 21872 +3 21318 14242 21408 +3 8046 20029 2921 +3 14242 8046 2921 +3 21576 21485 20029 +3 8046 21576 20029 +3 21962 21867 21485 +3 21576 21962 21485 +3 21498 21229 21867 +3 21962 21498 21867 +3 20484 20063 21229 +3 21498 20484 21229 +3 26357 26400 26399 +3 22246 32251 21308 +3 11080 19538 11439 +3 20554 20553 20468 +3 19088 18986 1805 +3 20411 4948 20326 +3 3311 21769 21768 +3 15732 23421 23324 +3 17600 20204 17694 +3 26148 733 26006 +3 15812 15950 15811 +3 24856 25224 22447 +3 26053 15861 15860 +3 13055 9280 9186 +3 23600 25687 23941 +3 12627 12716 13279 +3 13375 13862 13863 +3 13184 13279 13764 +3 13863 12391 2918 +3 23302 23399 23301 +3 23008 23106 23105 +3 15725 15589 14762 +3 171 15725 14762 +3 20601 20683 27516 +3 26098 24644 24134 +3 25611 25753 25752 +3 25139 2252 11880 +3 25321 25158 25223 +3 24207 22979 24156 +3 20847 20926 20846 +3 24764 25712 21361 +3 20847 20927 20926 +3 27865 20926 27981 +3 20927 21010 21009 +3 7043 6945 7044 +3 21010 21096 21095 +3 21009 21010 21095 +3 21096 21184 21183 +3 21095 21096 21183 +3 21184 21271 21270 +3 21183 21184 21270 +3 24605 24590 24851 +3 25167 24854 23487 +3 23491 22942 27266 +3 20887 25289 24074 +3 23565 22582 22581 +3 23973 24018 23969 +3 21071 23535 23178 +3 12647 25358 14794 +3 25248 24026 24476 +3 24537 25916 25952 +3 21871 25578 25721 +3 26149 26290 26289 +3 22013 22109 22108 +3 22012 22013 22108 +3 22109 22205 22204 +3 22108 22109 22204 +3 22205 22301 22300 +3 22204 22205 22300 +3 22301 22398 22397 +3 22300 22301 22397 +3 22398 22496 22495 +3 22397 22398 22495 +3 22496 22595 22594 +3 22495 22496 22594 +3 22595 22694 22693 +3 22594 22595 22693 +3 22694 22793 22792 +3 22693 22694 22792 +3 22793 22892 22891 +3 22792 22793 22891 +3 22892 22991 22990 +3 22891 22892 22990 +3 22991 23089 23088 +3 22990 22991 23088 +3 23089 23187 23186 +3 23088 23089 23186 +3 23187 23285 23284 +3 23186 23187 23284 +3 23285 23382 23381 +3 23284 23285 23381 +3 23382 23479 23478 +3 23381 23382 23478 +3 10472 9560 23478 +3 23479 10472 23478 +3 16444 15867 9560 +3 10472 16444 9560 +3 13751 10139 15867 +3 16444 13751 15867 +3 12474 16301 10139 +3 13751 12474 10139 +3 12474 15336 15335 +3 16301 12474 15335 +3 16451 16305 15335 +3 15336 16451 15335 +3 13657 15211 16305 +3 16451 13657 16305 +3 15084 14963 15211 +3 13657 15084 15211 +3 16764 12688 14963 +3 15084 16764 14963 +3 11501 12664 12688 +3 16764 11501 12688 +3 16609 3844 12664 +3 11501 16609 12664 +3 5736 12481 3844 +3 16609 5736 3844 +3 23351 16770 12481 +3 5736 23351 12481 +3 15742 15345 16770 +3 23351 15742 16770 +3 12379 6132 15345 +3 15742 12379 15345 +3 22106 23758 22464 +3 31433 31505 31432 +3 23907 25325 25324 +3 31301 31368 31300 +3 25962 24690 26205 +3 12997 23582 21448 +3 21333 25927 12105 +3 24690 25535 26205 +3 25324 25325 24515 +3 25927 25929 12105 +3 23629 24311 24244 +3 25325 25680 24515 +3 23907 23895 25325 +3 25326 20763 25680 +3 24089 25464 24087 +3 25463 25464 25161 +3 24096 25471 24095 +3 25471 24712 24538 +3 23745 25863 22974 +3 25684 25542 23579 +3 26220 23538 24935 +3 25478 24802 24283 +3 24873 23502 25361 +3 25239 25103 25787 +3 26287 25435 23461 +3 24262 24261 11670 +3 2815 25496 25495 +3 25829 24271 24277 +3 23563 23584 24612 +3 26220 25496 23538 +3 25952 25916 7081 +3 14511 25477 22975 +3 25289 22366 24013 +3 25822 22288 24403 +3 23690 23644 26282 +3 24075 25099 24967 +3 25744 25745 25886 +3 25670 12639 13079 +3 26121 24966 21334 +3 24723 26082 26695 +3 24318 23586 23584 +3 24960 25150 24940 +3 20866 27434 23416 +3 25478 24283 22485 +3 22631 16598 10124 +3 22630 22631 10124 +3 16598 22536 22933 +3 10124 16598 22933 +3 22536 22638 22738 +3 22933 22536 22738 +3 22638 20803 17105 +3 22738 22638 17105 +3 15150 14047 17105 +3 20803 15150 17105 +3 15150 21950 21854 +3 14047 15150 21854 +3 21950 22359 22456 +3 21854 21950 22456 +3 20622 21320 22456 +3 22359 20622 22456 +3 19317 20731 18036 +3 21320 20622 21319 +3 13084 20135 20120 +3 18749 21130 21131 +3 23419 13026 18418 +3 21582 18335 18992 +3 20155 14239 1623 +3 3927 4797 14973 +3 19636 19328 18026 +3 30426 30560 23071 +3 13946 16446 16599 +3 14140 14139 14044 +3 9635 9634 25248 +3 21318 23240 23142 +3 13750 14242 21318 +3 21144 13750 21318 +3 23226 8046 14242 +3 13750 23226 14242 +3 21491 21576 8046 +3 23226 21491 8046 +3 22057 21962 21576 +3 21491 22057 21576 +3 21589 21498 21962 +3 22057 21589 21962 +3 20569 20484 21498 +3 21589 20569 21498 +3 29539 22545 14043 +3 32297 32296 32195 +3 23122 23220 23126 +3 23146 19761 19537 +3 14345 14346 11121 +3 4797 14972 14973 +3 27134 27253 27252 +3 20484 20569 4284 +3 25737 25879 25878 +3 26315 25289 20887 +3 35083 35082 34953 +3 26170 26171 26311 +3 20180 24886 24826 +3 26937 20095 20181 +3 13279 13375 13863 +3 20267 20353 23638 +3 22858 22759 2918 +3 12391 22858 2918 +3 23007 23008 23105 +3 22909 23008 23007 +3 24646 28139 28257 +3 23990 20435 20521 +3 20603 20602 20520 +3 20521 20603 20520 +3 20684 20683 20602 +3 20603 20684 20602 +3 30361 25942 30228 +3 20684 20766 20683 +3 20848 20847 20765 +3 20766 20848 20765 +3 20848 20928 20927 +3 20847 20848 20927 +3 20928 21011 21010 +3 20927 20928 21010 +3 21011 21097 21096 +3 21010 21011 21096 +3 21097 21185 21184 +3 21096 21097 21184 +3 21272 21273 21362 +3 21184 21185 21271 +3 35360 35687 35827 +3 24598 24601 25804 +3 25611 25612 25753 +3 24646 25361 28255 +3 25754 25896 25895 +3 23268 26078 25665 +3 22843 25653 23609 +3 24167 25515 25511 +3 29257 29256 21823 +3 26056 24729 25958 +3 21824 21919 21918 +3 29396 21918 21919 +3 21919 22014 22013 +3 22014 22110 22109 +3 22013 22014 22109 +3 22110 22206 22205 +3 22109 22110 22205 +3 22206 22302 22301 +3 22205 22206 22301 +3 22302 22399 22398 +3 22301 22302 22398 +3 22399 22497 22496 +3 22398 22399 22496 +3 22497 22596 22595 +3 22496 22497 22595 +3 22596 22695 22694 +3 22595 22596 22694 +3 22695 22794 22793 +3 22694 22695 22793 +3 22794 22893 22892 +3 22793 22794 22892 +3 22893 22992 22991 +3 22892 22893 22991 +3 22992 23090 23089 +3 22991 22992 23089 +3 23090 23188 23187 +3 23089 23090 23187 +3 23188 23286 23285 +3 23187 23188 23285 +3 23286 23383 23382 +3 23285 23286 23382 +3 23480 23479 23382 +3 23383 23480 23382 +3 13421 10472 23479 +3 23480 13421 23479 +3 16298 16444 10472 +3 13421 16298 10472 +3 13849 13751 16444 +3 16298 13849 16444 +3 13849 4144 12474 +3 13751 13849 12474 +3 4144 15465 15336 +3 12474 4144 15336 +3 16604 16451 15336 +3 15465 16604 15336 +3 13755 13657 16451 +3 16604 13755 16451 +3 15085 15084 13657 +3 13755 15085 13657 +3 12299 16764 15084 +3 15085 12299 15084 +3 8903 11501 16764 +3 12299 8903 16764 +3 15474 16609 11501 +3 8903 15474 11501 +3 13241 5736 16609 +3 15474 13241 16609 +3 23448 23351 5736 +3 13241 23448 5736 +3 15606 15742 23351 +3 23448 15606 23351 +3 12395 12379 15742 +3 15606 12395 15742 +3 31592 31591 31504 +3 13426 12395 15606 +3 26152 26293 26292 +3 26151 26152 26292 +3 20822 24689 24821 +3 32343 32342 32240 +3 24477 23750 25687 +3 22268 22680 24380 +3 24837 24807 24806 +3 23825 20346 14511 +3 25375 23629 24244 +3 24017 24077 24311 +3 9120 11922 1993 +3 1658 3222 25590 +3 24089 24087 25346 +3 25464 25360 25161 +3 25470 25471 24538 +3 24712 24806 24805 +3 24806 25290 24763 +3 24538 24712 24805 +3 25290 23057 23932 +3 24805 24806 24763 +3 24763 25290 23932 +3 24261 11749 11670 +3 25775 24034 26243 +3 13089 25775 26243 +3 32193 32192 32092 +3 24100 25473 25472 +3 22269 22174 25976 +3 24099 24100 25472 +3 24245 24036 24537 +3 25860 16024 25481 +3 23275 24175 24172 +3 13761 23275 24172 +3 25636 24296 24449 +3 23665 25831 23889 +3 25352 23815 23677 +3 25341 25485 24160 +3 25735 25877 25876 +3 24415 23565 11547 +3 22631 23416 28363 +3 32193 32294 32192 +3 22535 16598 22631 +3 22632 22535 22631 +3 22535 22437 22536 +3 16598 22535 22536 +3 22437 22538 22638 +3 22536 22437 22638 +3 22538 1176 20803 +3 22638 22538 20803 +3 23221 15150 20803 +3 1176 23221 20803 +3 23221 23232 21950 +3 15150 23221 21950 +3 22263 22359 21950 +3 23232 22263 21950 +3 22263 2206 20622 +3 22359 22263 20622 +3 17870 17774 17871 +3 15504 14061 14158 +3 21324 21383 22634 +3 4262 13084 20120 +3 12392 9804 1615 +3 18796 18649 20232 +3 12735 13471 13470 +3 22433 18124 17988 +3 23871 21668 4110 +3 35876 35465 35737 +3 23044 21144 23142 +3 14139 13946 14044 +3 21143 21144 23044 +3 22945 21143 23044 +3 2251 13750 21144 +3 21143 2251 21144 +3 21667 23226 13750 +3 2251 21667 13750 +3 21486 21491 23226 +3 21667 21486 23226 +3 21486 3615 21491 +3 147 3615 21486 +3 21682 21589 22057 +3 21240 18863 20577 +3 20067 20068 19094 +3 21915 20925 24748 +3 14972 12735 12921 +3 4952 14971 14334 +3 12964 3927 15477 +3 14973 14972 12921 +3 13471 12171 8573 +3 12921 12735 13470 +3 25962 26205 22876 +3 8040 7885 9113 +3 26057 24152 26002 +3 26329 24962 24659 +3 20182 20181 20096 +3 17271 33249 33359 +3 20268 20267 20181 +3 20182 20268 20181 +3 16917 16918 22759 +3 33053 33158 33052 +3 20436 20521 20435 +3 33158 33263 33262 +3 20522 20521 20436 +3 20437 20522 20436 +3 20604 20603 20521 +3 20522 20604 20521 +3 20685 20684 20603 +3 20604 20685 20603 +3 20767 20766 20684 +3 20685 20767 20684 +3 20849 20848 20766 +3 20767 20849 20766 +3 20849 20929 20928 +3 20848 20849 20928 +3 20929 21012 21011 +3 20928 20929 21011 +3 21012 21098 21097 +3 21011 21012 21097 +3 21098 21186 21185 +3 21097 21098 21185 +3 21186 21273 21272 +3 21185 21186 21272 +3 31895 31894 31788 +3 21363 28578 21362 +3 25753 25754 25895 +3 24217 23718 23830 +3 24654 24349 24520 +3 25542 25400 215 +3 21823 21729 21824 +3 23535 23534 23178 +3 21730 21825 21824 +3 21729 21730 21824 +3 21825 21920 21919 +3 21824 21825 21919 +3 21920 22015 22014 +3 21919 21920 22014 +3 22015 22111 22110 +3 22014 22015 22110 +3 22111 22207 22206 +3 22110 22111 22206 +3 22207 22303 22302 +3 22206 22207 22302 +3 22303 22400 22399 +3 22302 22303 22399 +3 22400 22498 22497 +3 22399 22400 22497 +3 22498 22597 22596 +3 22497 22498 22596 +3 22597 22696 22695 +3 22596 22597 22695 +3 22696 22795 22794 +3 22695 22696 22794 +3 22795 22894 22893 +3 22794 22795 22893 +3 22894 22993 22992 +3 22893 22894 22992 +3 22993 23091 23090 +3 22992 22993 23090 +3 23091 23189 23188 +3 23090 23091 23188 +3 23189 23287 23286 +3 23188 23189 23286 +3 23287 23384 23383 +3 23286 23287 23383 +3 23384 23481 23480 +3 23383 23384 23480 +3 15454 13421 23480 +3 23481 15454 23480 +3 16297 16298 13421 +3 15454 16297 13421 +3 13947 13849 16298 +3 16297 13947 16298 +3 15334 4144 13849 +3 13947 15334 13849 +3 15334 17096 15465 +3 4144 15334 15465 +3 16605 16604 15465 +3 17096 16605 15465 +3 13853 13755 16604 +3 16605 13853 16604 +3 2622 15085 13755 +3 13853 2622 13755 +3 12385 12299 15085 +3 2622 12385 15085 +3 12556 8903 12299 +3 12385 12556 12299 +3 12599 15474 8903 +3 12556 12599 8903 +3 11712 13241 15474 +3 12599 11712 15474 +3 23350 23448 13241 +3 11712 23350 13241 +3 15743 15606 23448 +3 23350 15743 23448 +3 14054 15743 15881 +3 30066 30067 22490 +3 13461 24925 25975 +3 26117 26070 23499 +3 12355 15050 23965 +3 13268 12355 23965 +3 26150 26151 26291 +3 26292 12355 13268 +3 25975 26117 23499 +3 26291 26292 13268 +3 24394 24201 24478 +3 24201 22857 24478 +3 25868 24291 24288 +3 503 504 95 +3 23829 26203 26112 +3 24410 26074 23814 +3 25183 25346 24087 +3 25464 25463 24087 +3 25397 22138 25915 +3 25589 25584 26202 +3 25855 25398 21813 +3 23705 26202 25915 +3 24140 21627 25771 +3 34145 34144 34008 +3 23057 24899 25008 +3 25550 25692 6406 +3 27548 27431 12090 +3 23705 25589 26202 +3 25493 24929 11233 +3 25239 25667 25103 +3 25158 25321 13089 +3 20223 22628 24391 +3 25080 23823 25231 +3 25959 23537 24465 +3 25540 12027 26079 +3 25520 23699 24103 +3 24175 25533 25523 +3 24323 24238 25376 +3 23275 13761 23818 +3 22297 23275 23818 +3 31895 31996 31894 +3 31299 31298 31233 +3 28680 15407 22632 +3 23141 15598 21757 +3 22732 22632 15407 +3 15598 22732 15407 +3 22635 22535 22632 +3 22732 22635 22632 +3 14147 22437 22535 +3 22635 14147 22535 +3 14147 22439 22538 +3 22437 14147 22538 +3 22439 14854 1176 +3 22538 22439 1176 +3 14854 21412 23221 +3 1176 14854 23221 +3 23330 23232 23221 +3 21412 23330 23221 +3 22166 22263 23232 +3 23330 22166 23232 +3 22166 11439 2206 +3 22263 22166 2206 +3 20391 20392 20475 +3 13026 16155 18608 +3 20135 20104 20103 +3 30294 30293 30160 +3 15463 15733 11862 +3 13470 13471 8573 +3 18698 19637 23313 +3 2082 23047 23145 +3 9393 12872 14140 +3 12872 14139 14140 +3 21454 21726 24654 +3 34430 34567 34429 +3 21057 21143 22945 +3 22846 21057 22945 +3 16939 2251 21143 +3 21057 16939 21143 +3 20030 21667 2251 +3 16939 20030 2251 +3 21670 21486 21667 +3 20030 21670 21667 +3 18132 27032 18723 +3 231 159 8900 +3 30427 30426 30293 +3 23115 23213 23114 +3 12171 11861 11862 +3 25586 21454 24654 +3 8573 12171 11862 +3 31106 31169 31168 +3 20559 20558 20473 +3 18926 24228 30634 +3 19277 19538 19829 +3 21454 24372 24367 +3 26066 25064 25063 +3 21726 21454 24367 +3 20096 20095 26824 +3 26288 24155 24153 +3 20269 20268 20182 +3 20183 20269 20182 +3 20354 20353 20268 +3 20269 20354 20268 +3 20438 20437 20353 +3 22908 22909 23007 +3 20523 20522 20437 +3 20438 20523 20437 +3 20605 20604 20522 +3 20523 20605 20522 +3 20686 20685 20604 +3 20605 20686 20604 +3 20768 20767 20685 +3 20686 20768 20685 +3 20850 20849 20767 +3 20768 20850 20767 +3 20850 20930 20929 +3 20849 20850 20929 +3 20930 21013 21012 +3 20929 20930 21012 +3 21013 21099 21098 +3 21012 21013 21098 +3 21099 21187 21186 +3 21098 21099 21186 +3 21187 21274 21273 +3 21186 21187 21273 +3 31789 31895 31788 +3 21273 21274 21363 +3 24372 25623 25621 +3 21544 21545 28849 +3 21545 21638 21637 +3 21637 21730 21729 +3 21638 21731 21730 +3 21637 21638 21730 +3 21731 21826 21825 +3 21730 21731 21825 +3 21826 21921 21920 +3 21825 21826 21920 +3 21921 22016 22015 +3 21920 21921 22015 +3 22016 22112 22111 +3 22015 22016 22111 +3 22112 22208 22207 +3 22111 22112 22207 +3 22208 22304 22303 +3 22207 22208 22303 +3 22304 22401 22400 +3 22303 22304 22400 +3 22401 22499 22498 +3 22400 22401 22498 +3 22499 22598 22597 +3 22498 22499 22597 +3 22598 22697 22696 +3 22597 22598 22696 +3 22697 22796 22795 +3 22696 22697 22795 +3 22796 22895 22894 +3 22795 22796 22894 +3 22895 22994 22993 +3 22894 22895 22993 +3 22994 23092 23091 +3 22993 22994 23091 +3 23092 23190 23189 +3 23091 23092 23189 +3 23190 23288 23287 +3 23189 23190 23287 +3 23288 23385 23384 +3 23287 23288 23384 +3 23385 23482 23481 +3 23384 23385 23481 +3 15586 15454 23481 +3 23482 15586 23481 +3 11964 16297 15454 +3 15586 11964 15454 +3 13144 13947 16297 +3 11964 13144 16297 +3 15333 15334 13947 +3 13144 15333 13947 +3 15333 2208 17096 +3 15334 15333 17096 +3 20351 16605 17096 +3 2208 20351 17096 +3 13951 13853 16605 +3 20351 13951 16605 +3 7106 2622 13853 +3 13951 7106 13853 +3 12931 12385 2622 +3 7106 12931 2622 +3 4681 12556 12385 +3 12931 4681 12385 +3 12689 12599 12556 +3 4681 12689 12556 +3 11691 11712 12599 +3 12689 11691 12599 +3 20328 23350 11712 +3 11691 20328 11712 +3 15881 15743 23350 +3 20328 15881 23350 +3 26195 24343 25685 +3 14055 14054 15216 +3 24849 24513 25046 +3 2262 25851 2263 +3 26159 26300 26299 +3 25141 23659 28227 +3 23933 21537 22875 +3 24248 25565 25537 +3 22684 22683 24461 +3 23922 22684 24461 +3 23955 23954 440 +3 12752 13210 12139 +3 25799 25801 23825 +3 25904 25903 25761 +3 13663 23076 24602 +3 24235 25818 23545 +3 24301 23676 24631 +3 24961 25232 25476 +3 25111 27500 24302 +3 23676 25112 25113 +3 20750 25369 20751 +3 24631 23676 25113 +3 25113 25112 24592 +3 24770 24550 24577 +3 15470 22174 22269 +3 20886 20222 24583 +3 24096 24095 25584 +3 25161 25360 24727 +3 21723 21818 25193 +3 24939 24960 24940 +3 24469 25715 25674 +3 23549 24404 23593 +3 23614 25386 23982 +3 24107 24105 25711 +3 25545 25403 13116 +3 19418 7454 13467 +3 24467 24390 22297 +3 23941 25545 13116 +3 31234 31299 31233 +3 21358 26200 12717 +3 20807 23141 15092 +3 3982 20807 15092 +3 23124 15598 23141 +3 20807 23124 23141 +3 22831 22732 15598 +3 23124 22831 15598 +3 22734 22635 22732 +3 22831 22734 22732 +3 12959 14147 22635 +3 22734 12959 22635 +3 22730 22439 14147 +3 12959 22730 14147 +3 9646 14854 22439 +3 22730 9646 22439 +3 21503 21412 14854 +3 9646 21503 14854 +3 23427 23330 21412 +3 21503 23427 21412 +3 23427 22070 22166 +3 23330 23427 22166 +3 22070 11080 11439 +3 22166 22070 11439 +3 28579 21363 27381 +3 27381 21274 21275 +3 146 3615 147 +3 20120 20135 20103 +3 35403 35397 35749 +3 28818 28817 28685 +3 17716 18668 18428 +3 19889 17914 18172 +3 16463 13196 22846 +3 22729 21881 2922 +3 22746 22846 13196 +3 21881 22746 13196 +3 21230 21057 22846 +3 22746 21230 22846 +3 21861 16939 21057 +3 21230 21861 21057 +3 22149 20030 16939 +3 21861 22149 16939 +3 21492 21670 20030 +3 22149 21492 20030 +3 21486 21670 147 +3 33789 17815 17911 +3 7361 23589 15765 +3 28250 23238 29414 +3 2123 4110 21668 +3 11080 15330 18038 +3 20747 20829 20746 +3 22691 30468 30335 +3 24367 24372 25621 +3 25623 24456 24108 +3 25621 25623 24108 +3 24456 26223 26084 +3 18275 18274 1073 +3 23760 20746 23832 +3 20270 20269 20183 +3 33249 17271 33357 +3 20270 20356 20355 +3 20270 20355 20269 +3 22907 22908 23006 +3 23007 23105 23104 +3 20524 20523 20438 +3 29703 29702 29570 +3 20606 20605 20523 +3 20524 20606 20523 +3 20687 20686 20605 +3 20606 20687 20605 +3 20769 20768 20686 +3 20687 20769 20686 +3 20851 20850 20768 +3 20769 20851 20768 +3 20851 20931 20930 +3 20850 20851 20930 +3 20931 21014 21013 +3 20930 20931 21013 +3 21014 21100 21099 +3 21013 21014 21099 +3 21100 21188 21187 +3 21099 21100 21187 +3 21188 21275 21274 +3 21187 21188 21274 +3 21365 21276 21366 +3 31996 31995 31894 +3 21456 21546 21545 +3 31507 31594 31506 +3 21546 21639 21638 +3 21545 21546 21638 +3 21639 21732 21731 +3 21638 21639 21731 +3 21732 21827 21826 +3 21731 21732 21826 +3 21827 21922 21921 +3 21826 21827 21921 +3 21922 22017 22016 +3 21921 21922 22016 +3 22017 22113 22112 +3 22016 22017 22112 +3 22113 22209 22208 +3 22112 22113 22208 +3 22209 22305 22304 +3 22208 22209 22304 +3 22305 22402 22401 +3 22304 22305 22401 +3 22402 22500 22499 +3 22401 22402 22499 +3 22500 22599 22598 +3 22499 22500 22598 +3 22599 22698 22697 +3 22598 22599 22697 +3 22698 22797 22796 +3 22697 22698 22796 +3 22797 22896 22895 +3 22796 22797 22895 +3 22896 22995 22994 +3 22895 22896 22994 +3 22995 23093 23092 +3 22994 22995 23092 +3 23093 23191 23190 +3 23092 23093 23190 +3 23191 23289 23288 +3 23190 23191 23288 +3 23289 23386 23385 +3 23288 23289 23385 +3 23386 23483 23482 +3 23385 23386 23482 +3 15587 15586 23482 +3 23483 15587 23482 +3 12550 11964 15586 +3 15587 12550 15586 +3 15145 13144 11964 +3 12550 15145 11964 +3 14958 15333 13144 +3 15145 14958 13144 +3 17095 2208 15333 +3 14958 17095 15333 +3 20350 20351 2208 +3 17095 20350 2208 +3 13952 13951 20351 +3 20350 13952 20351 +3 17092 7106 13951 +3 13952 17092 13951 +3 7974 12931 7106 +3 17092 7974 7106 +3 4548 4681 12931 +3 7974 4548 12931 +3 12778 12689 4681 +3 4548 12778 4681 +3 12482 11691 12689 +3 12778 12482 12689 +3 20243 20328 11691 +3 12482 20243 11691 +3 15216 15881 20328 +3 20243 15216 20328 +3 34298 34436 34297 +3 15881 15216 14054 +3 25633 24876 22078 +3 10978 25633 22078 +3 23499 24461 23529 +3 262 23873 25251 +3 24609 25512 25394 +3 25026 23866 26238 +3 23986 24104 25519 +3 24104 22101 22196 +3 5625 26282 3880 +3 11568 13886 25921 +3 28734 6671 19904 +3 20346 25815 14511 +3 2076 12998 11232 +3 11232 6279 19904 +3 28232 14374 13767 +3 12998 16777 11232 +3 28232 13767 29679 +3 16777 14143 14374 +3 14143 23271 23173 +3 29679 23173 29954 +3 22944 29954 19977 +3 23271 19978 23173 +3 22944 20233 29152 +3 19978 23217 19977 +3 24804 23979 24039 +3 29152 20233 20896 +3 25786 25787 25150 +3 25360 24804 24727 +3 3600 25592 25733 +3 24960 25786 25150 +3 25715 24107 25711 +3 22385 20841 25923 +3 20987 20905 12540 +3 24107 25475 25474 +3 33374 33373 33264 +3 31435 31507 31434 +3 12447 3982 22844 +3 22943 12447 22844 +3 20888 20807 3982 +3 12447 20888 3982 +3 23222 23124 20807 +3 20888 23222 20807 +3 15740 22831 23124 +3 23222 15740 23124 +3 22735 22734 22831 +3 15740 22735 22831 +3 12776 12959 22734 +3 22735 12776 22734 +3 14146 22730 12959 +3 12776 14146 12959 +3 10819 9646 22730 +3 14146 10819 22730 +3 21411 21503 9646 +3 10819 21411 9646 +3 11061 23427 21503 +3 21411 11061 21503 +3 21974 22070 23427 +3 11061 21974 23427 +3 15330 11080 22070 +3 21974 15330 22070 +3 21964 18912 18913 +3 25786 25239 25787 +3 7435 378 7549 +3 15094 13180 15020 +3 20071 13431 4549 +3 18184 23145 23047 +3 21881 13196 2922 +3 31435 31434 31367 +3 21600 21881 22729 +3 20320 21600 22729 +3 22647 22746 21881 +3 21600 22647 21881 +3 20812 21230 22746 +3 22647 20812 22746 +3 22362 21861 21230 +3 20812 22362 21230 +3 20323 22149 21861 +3 22362 20323 21861 +3 19697 19365 19708 +3 22149 20323 21492 +3 12894 21592 21578 +3 35933 21308 27896 +3 3196 13026 17083 +3 20558 20640 20557 +3 20574 21385 21384 +3 20099 20184 26939 +3 25860 25481 13808 +3 20100 20099 20019 +3 20020 20100 20019 +3 20184 20270 20183 +3 20100 20185 20099 +3 20271 20270 20184 +3 20185 20271 20184 +3 20356 20271 20357 +3 20271 20356 20270 +3 18644 18742 18741 +3 18208 19771 17915 +3 20525 20524 20439 +3 20438 20439 20524 +3 20607 20606 20524 +3 20525 20607 20524 +3 20688 20687 20606 +3 20607 20688 20606 +3 20770 20769 20687 +3 20688 20770 20687 +3 20852 20851 20769 +3 20770 20852 20769 +3 20932 20931 20851 +3 20852 20932 20851 +3 20932 21015 21014 +3 20931 20932 21014 +3 21015 21101 21100 +3 21014 21015 21100 +3 21101 21189 21188 +3 21100 21101 21188 +3 21189 21276 21275 +3 21188 21189 21275 +3 27382 33702 21366 +3 21275 21276 21365 +3 33957 34092 21457 +3 21456 21455 33823 +3 21547 21640 21639 +3 21546 21547 21639 +3 21640 21733 21732 +3 21639 21640 21732 +3 21733 21828 21827 +3 21732 21733 21827 +3 21828 21923 21922 +3 21827 21828 21922 +3 21923 22018 22017 +3 21922 21923 22017 +3 22018 22114 22113 +3 22017 22018 22113 +3 22210 22209 22113 +3 22114 22210 22113 +3 22210 22306 22305 +3 22209 22210 22305 +3 22306 22403 22402 +3 22305 22306 22402 +3 22403 22501 22500 +3 22402 22403 22500 +3 22501 22600 22599 +3 22500 22501 22599 +3 22600 22699 22698 +3 22599 22600 22698 +3 22699 22798 22797 +3 22698 22699 22797 +3 22798 22897 22896 +3 22797 22798 22896 +3 22897 22996 22995 +3 22896 22897 22995 +3 22996 23094 23093 +3 22995 22996 23093 +3 23094 23192 23191 +3 23093 23094 23191 +3 23192 23290 23289 +3 23191 23192 23289 +3 23290 23387 23386 +3 23289 23290 23386 +3 23387 23484 23483 +3 23386 23387 23483 +3 23484 15588 15587 +3 23483 23484 15587 +3 14237 12550 15587 +3 15588 14237 15587 +3 15147 15145 12550 +3 14237 15147 12550 +3 14957 14958 15145 +3 15147 14957 15145 +3 11802 17095 14958 +3 14957 11802 14958 +3 13899 20350 17095 +3 11802 13899 17095 +3 14051 13952 20350 +3 13899 14051 20350 +3 17091 17092 13952 +3 14051 17091 13952 +3 3856 7974 17092 +3 17091 3856 17092 +3 3750 4548 7974 +3 3856 3750 7974 +3 15089 12778 4548 +3 3750 15089 4548 +3 6615 12482 12778 +3 15089 6615 12778 +3 20583 20243 12482 +3 6615 20583 12482 +3 16610 15216 20243 +3 20583 16610 20243 +3 24027 24534 24078 +3 32244 32346 32243 +3 24534 23780 23781 +3 23645 24027 24078 +3 25348 24589 21813 +3 12356 24442 20822 +3 25976 13461 25504 +3 25975 23499 23707 +3 23987 24757 23553 +3 23553 23986 25519 +3 14249 6671 28734 +3 24676 25228 24929 +3 9403 1177 2076 +3 14249 9403 2076 +3 1177 5552 12998 +3 2076 1177 12998 +3 16776 16777 12998 +3 5552 16776 12998 +3 16776 3963 14143 +3 16777 16776 14143 +3 23368 23271 14143 +3 3963 23368 14143 +3 20089 19978 23271 +3 23368 20089 23271 +3 13369 23217 19978 +3 20089 13369 19978 +3 20235 20233 23217 +3 13369 20235 23217 +3 31368 31367 31300 +3 20235 20943 20233 +3 23439 21770 21775 +3 20943 21775 20896 +3 25590 3600 25732 +3 27433 21770 11575 +3 24105 24107 25474 +3 24137 23679 24570 +3 331 17104 17285 +3 25475 23824 23530 +3 12902 12447 22943 +3 23042 12902 22943 +3 13856 20888 12447 +3 12902 13856 12447 +3 23320 23222 20888 +3 13856 23320 20888 +3 3984 15740 23222 +3 23320 3984 23222 +3 15066 22735 15740 +3 3984 15066 15740 +3 16019 12776 22735 +3 15066 16019 22735 +3 10243 14146 12776 +3 16019 10243 12776 +3 14698 10819 14146 +3 10243 14698 14146 +3 21413 21411 10819 +3 14698 21413 10819 +3 22740 11061 21411 +3 21413 22740 21411 +3 20966 21974 11061 +3 22740 20966 11061 +3 16296 15330 21974 +3 20966 16296 21974 +3 17772 17773 20189 +3 17164 14644 17163 +3 13497 13686 21697 +3 21044 21130 21043 +3 20320 21396 15282 +3 19094 15279 20148 +3 23333 20320 15282 +3 21763 23333 15282 +3 21599 21600 20320 +3 23333 21599 20320 +3 21061 22647 21600 +3 21599 21061 21600 +3 20398 20812 22647 +3 21061 20398 22647 +3 3341 22362 20812 +3 20398 3341 20812 +3 15860 15858 26054 +3 22362 3341 20323 +3 22827 22845 14151 +3 20617 18668 21415 +3 22733 14053 13272 +3 15729 15732 1034 +3 21686 19641 20314 +3 3736 16485 16641 +3 20330 20414 24651 +3 20101 20100 20020 +3 20021 20101 20020 +3 20186 20185 20100 +3 20101 20186 20100 +3 20272 20271 20185 +3 20186 20272 20185 +3 20358 24906 20357 +3 20272 20357 20271 +3 6787 29564 13391 +3 35144 21743 21650 +3 20526 20525 20440 +3 20440 20439 23812 +3 20608 20607 20525 +3 20526 20608 20525 +3 20689 20688 20607 +3 20608 20689 20607 +3 20771 20770 20688 +3 20689 20771 20688 +3 20853 20852 20770 +3 20771 20853 20770 +3 20933 20932 20852 +3 20853 20933 20852 +3 20933 21016 21015 +3 20932 20933 21015 +3 21016 21102 21101 +3 21015 21016 21101 +3 21102 21190 21189 +3 21101 21102 21189 +3 21190 21277 21276 +3 21189 21190 21276 +3 31171 31172 31235 +3 22973 22972 22874 +3 29544 35600 29545 +3 21548 21641 21640 +3 21457 34091 21546 +3 21641 21734 21733 +3 21640 21641 21733 +3 21734 21829 21828 +3 21733 21734 21828 +3 21829 21924 21923 +3 21828 21829 21923 +3 21924 22019 22018 +3 21923 21924 22018 +3 22019 22115 22114 +3 22018 22019 22114 +3 22115 22211 22210 +3 22114 22115 22210 +3 22211 22307 22306 +3 22210 22211 22306 +3 22307 22404 22403 +3 22306 22307 22403 +3 22404 22502 22501 +3 22403 22404 22501 +3 22502 22601 22600 +3 22501 22502 22600 +3 22601 22700 22699 +3 22600 22601 22699 +3 22700 22799 22798 +3 22699 22700 22798 +3 22799 22898 22897 +3 22798 22799 22897 +3 22898 22997 22996 +3 22897 22898 22996 +3 22997 23095 23094 +3 22996 22997 23094 +3 23095 23193 23192 +3 23094 23095 23192 +3 23291 23290 23192 +3 23193 23291 23192 +3 23291 23388 23387 +3 23290 23291 23387 +3 23388 23041 23484 +3 23387 23388 23484 +3 23041 15724 15588 +3 23484 23041 15588 +3 15724 3470 14237 +3 15588 15724 14237 +3 15274 15147 14237 +3 3470 15274 14237 +3 15079 14957 15147 +3 15274 15079 15147 +3 6975 11802 14957 +3 15079 6975 14957 +3 12723 13899 11802 +3 6975 12723 11802 +3 13953 14051 13899 +3 12723 13953 13899 +3 16602 17091 14051 +3 13953 16602 14051 +3 16308 3856 17091 +3 16602 16308 17091 +3 285 3750 3856 +3 16308 285 3856 +3 15088 15089 3750 +3 285 15088 3750 +3 8461 6615 15089 +3 15088 8461 15089 +3 20665 20583 6615 +3 8461 20665 6615 +3 15090 16610 20583 +3 20665 15090 20583 +3 31108 31109 31171 +3 31172 31236 31235 +3 10241 1858 21031 +3 2675 15723 30743 +3 1858 23463 15723 +3 15723 23463 13371 +3 23463 39 13371 +3 9684 13371 39 +3 39 13482 9684 +3 9403 29427 9684 +3 13482 1057 9403 +3 9684 13482 9403 +3 1057 13282 1177 +3 9403 1057 1177 +3 13282 1049 5552 +3 1177 13282 5552 +3 14688 16776 5552 +3 1049 14688 5552 +3 14688 3857 3963 +3 16776 14688 3963 +3 23466 23368 3963 +3 3857 23466 3963 +3 2518 20089 23368 +3 23466 2518 23368 +3 13006 13369 20089 +3 2518 13006 20089 +3 20238 20235 13369 +3 13006 20238 13369 +3 20946 20943 20235 +3 20238 20946 20235 +3 21784 21775 20943 +3 20946 21784 20943 +3 23445 23439 21775 +3 21784 23445 21775 +3 20580 23055 18408 +3 23445 23465 23439 +3 26106 26105 25538 +3 11775 30689 23055 +3 23042 22943 331 +3 26105 21536 25538 +3 20806 13856 12902 +3 11775 20806 12902 +3 16153 23320 13856 +3 20806 16153 13856 +3 15025 3984 23320 +3 16153 15025 23320 +3 12983 15066 3984 +3 15025 12983 3984 +3 12983 20177 16019 +3 15066 12983 16019 +3 9543 10243 16019 +3 20177 9543 16019 +3 21949 14698 10243 +3 9543 21949 10243 +3 21322 21413 14698 +3 21949 21322 14698 +3 22640 22740 21413 +3 21322 22640 21413 +3 20190 20966 22740 +3 22640 20190 22740 +3 21568 16296 20966 +3 20190 21568 20966 +3 14390 17102 14407 +3 33159 33158 33053 +3 22845 13497 14151 +3 20636 20717 20635 +3 24871 15445 15444 +3 20199 21395 21763 +3 22940 23333 21763 +3 21395 22940 21763 +3 20493 21599 23333 +3 22940 20493 23333 +3 20816 21061 21599 +3 20493 20816 21599 +3 20816 20142 20398 +3 21061 20816 20398 +3 20142 22459 3341 +3 20398 20142 3341 +3 18556 20963 18460 +3 15999 15998 15860 +3 20616 20617 21414 +3 20475 20560 20474 +3 17771 20101 17674 +3 16010 23122 22929 +3 16025 13392 78 +3 1185 18341 96 +3 17873 17967 17966 +3 20869 20949 18449 +3 17771 20188 20187 +3 20187 20186 20101 +3 14743 21568 16858 +3 20273 20272 20186 +3 20187 20273 20186 +3 20358 20357 20272 +3 20273 20358 20272 +3 22314 22411 22410 +3 31046 31047 31108 +3 20527 20526 20441 +3 35445 35523 28308 +3 20609 20608 20526 +3 20527 20609 20526 +3 20690 20689 20608 +3 20609 20690 20608 +3 20772 20771 20689 +3 20690 20772 20689 +3 20854 20853 20771 +3 20772 20854 20771 +3 20934 20933 20853 +3 20854 20934 20853 +3 20934 21017 21016 +3 20933 20934 21016 +3 21017 21103 21102 +3 21016 21017 21102 +3 21103 21191 21190 +3 21102 21103 21190 +3 21278 21279 33830 +3 21190 21191 21277 +3 22874 22775 22776 +3 34550 34678 34549 +3 26432 26431 26363 +3 31047 31046 30985 +3 34091 21548 21547 +3 21642 21641 34365 +3 21641 21642 21734 +3 21735 21830 21829 +3 21734 21735 21829 +3 21830 21925 21924 +3 21829 21830 21924 +3 21925 22020 22019 +3 21924 21925 22019 +3 22020 22116 22115 +3 22019 22020 22115 +3 22116 22212 22211 +3 22115 22116 22211 +3 22212 22308 22307 +3 22211 22212 22307 +3 22308 22405 22404 +3 22307 22308 22404 +3 22405 22503 22502 +3 22404 22405 22502 +3 22503 22602 22601 +3 22502 22503 22601 +3 22602 22701 22700 +3 22601 22602 22700 +3 22701 22800 22799 +3 22700 22701 22799 +3 22800 22899 22898 +3 22799 22800 22898 +3 22899 22998 22997 +3 22898 22899 22997 +3 22998 23096 23095 +3 22997 22998 23095 +3 23096 23194 23193 +3 23095 23096 23193 +3 23292 23291 23193 +3 23194 23292 23193 +3 23389 23388 23291 +3 23292 23389 23291 +3 23389 4403 23041 +3 23388 23389 23041 +3 4403 15862 15724 +3 23041 4403 15724 +3 15862 7887 3470 +3 15724 15862 3470 +3 7887 15403 15274 +3 3470 7887 15274 +3 15205 15079 15274 +3 15403 15205 15274 +3 12549 6975 15079 +3 15205 12549 15079 +3 20434 12723 6975 +3 12549 20434 6975 +3 14245 13953 12723 +3 20434 14245 12723 +3 13854 16602 13953 +3 14245 13854 13953 +3 16307 16308 16602 +3 13854 16307 16602 +3 6130 285 16308 +3 16307 6130 16308 +3 14967 15088 285 +3 6130 14967 285 +3 8666 8461 15088 +3 14967 8666 15088 +3 20820 20665 8461 +3 8666 20820 8461 +3 16455 15090 20665 +3 20820 16455 20665 +3 16455 3458 10241 +3 15090 16455 10241 +3 3458 23338 1858 +3 10241 3458 1858 +3 23338 23464 23463 +3 1858 23338 23463 +3 23464 4532 39 +3 23463 23464 39 +3 4532 13468 13482 +3 39 4532 13482 +3 13468 13522 1057 +3 13482 13468 1057 +3 13522 13281 13282 +3 1057 13522 13282 +3 13904 1049 13282 +3 13281 13904 13282 +3 1329 14688 1049 +3 13904 1329 1049 +3 1329 4285 3857 +3 14688 1329 3857 +3 15875 23466 3857 +3 4285 15875 3857 +3 21777 2518 23466 +3 15875 21777 23466 +3 11596 13006 2518 +3 21777 11596 2518 +3 20239 20238 13006 +3 11596 20239 13006 +3 21117 20946 20238 +3 20239 21117 20238 +3 21850 21784 20946 +3 21117 21850 20946 +3 15112 23445 21784 +3 21850 15112 21784 +3 12448 23465 23445 +3 15112 12448 23445 +3 23140 23055 23465 +3 12448 23140 23465 +3 35882 9921 35938 +3 23140 13469 23055 +3 21303 20806 11775 +3 13469 21303 11775 +3 15871 16153 20806 +3 21303 15871 20806 +3 14145 15025 16153 +3 15871 14145 16153 +3 14145 23422 12983 +3 15025 14145 12983 +3 23422 22339 20177 +3 12983 23422 20177 +3 12892 9543 20177 +3 22339 12892 20177 +3 23123 21949 9543 +3 12892 23123 9543 +3 21504 21322 21949 +3 23123 21504 21949 +3 20311 22640 21322 +3 21504 20311 21322 +3 20779 20190 22640 +3 20311 20779 22640 +3 29811 34757 21648 +3 20674 17100 16386 +3 20300 20299 20213 +3 18747 21128 21129 +3 18649 17914 20232 +3 28951 29086 28950 +3 20655 21395 20200 +3 31788 31787 31687 +3 15459 22940 21395 +3 20655 15459 21395 +3 20578 20493 22940 +3 15459 20578 22940 +3 20578 20571 20816 +3 20493 20578 20816 +3 20571 22651 20142 +3 20816 20571 20142 +3 20134 30534 30602 +3 20142 22651 22459 +3 21505 13960 20040 +3 20475 20476 20560 +3 13861 13766 13668 +3 15732 16155 1034 +3 13763 13861 13668 +3 928 23028 22931 +3 21399 21409 22827 +3 20385 20469 20384 +3 14154 11234 13762 +3 17772 20189 20188 +3 3736 16484 16485 +3 20274 20273 20187 +3 20188 20274 20187 +3 20359 20358 20273 +3 20274 20359 20273 +3 20443 20442 20358 +3 20359 20443 20358 +3 20528 20527 20442 +3 20443 20528 20442 +3 20610 20609 20527 +3 20528 20610 20527 +3 20691 20690 20609 +3 20610 20691 20609 +3 20773 20772 20690 +3 20691 20773 20690 +3 20855 20854 20772 +3 20773 20855 20772 +3 20935 20934 20854 +3 20855 20935 20854 +3 20935 21018 21017 +3 20934 20935 21017 +3 21018 21104 21103 +3 21017 21018 21103 +3 21104 21192 21191 +3 21103 21104 21191 +3 21279 21193 21280 +3 21191 21192 21278 +3 30986 30985 30927 +3 23081 6854 22983 +3 22480 22383 22481 +3 28557 28556 28434 +3 28435 28557 28434 +3 26596 26700 26225 +3 17285 17104 19130 +3 21736 34499 34627 +3 34499 21735 21734 +3 21831 21926 21925 +3 21830 21831 21925 +3 21926 22021 22020 +3 21925 21926 22020 +3 22021 22117 22116 +3 22020 22021 22116 +3 22117 22213 22212 +3 22116 22117 22212 +3 22213 22309 22308 +3 22212 22213 22308 +3 22309 22406 22405 +3 22308 22309 22405 +3 22406 22504 22503 +3 22405 22406 22503 +3 22504 22603 22602 +3 22503 22504 22602 +3 22603 22702 22701 +3 22602 22603 22701 +3 22702 22801 22800 +3 22701 22702 22800 +3 22801 22900 22899 +3 22800 22801 22899 +3 22900 22999 22998 +3 22899 22900 22998 +3 22999 23097 23096 +3 22998 22999 23096 +3 23097 23195 23194 +3 23096 23097 23194 +3 23293 23292 23194 +3 23195 23293 23194 +3 23390 23389 23292 +3 23293 23390 23292 +3 14701 4403 23389 +3 23390 14701 23389 +3 14701 16295 15862 +3 4403 14701 15862 +3 16295 2254 7887 +3 15862 16295 7887 +3 2254 13809 15403 +3 7887 2254 15403 +3 15332 15205 15403 +3 13809 15332 15403 +3 3931 12549 15205 +3 15332 3931 15205 +3 11505 20434 12549 +3 3931 11505 12549 +3 7571 14245 20434 +3 11505 7571 20434 +3 4062 13854 14245 +3 7571 4062 14245 +3 16454 16307 13854 +3 4062 16454 13854 +3 4377 6130 16307 +3 16454 4377 16307 +3 14966 14967 6130 +3 4377 14966 6130 +3 10094 8666 14967 +3 14966 10094 14967 +3 23175 20820 8666 +3 10094 23175 8666 +3 23175 16456 16455 +3 20820 23175 16455 +3 16456 9232 3458 +3 16455 16456 3458 +3 9232 15874 23338 +3 3458 9232 23338 +3 15874 23366 23464 +3 23338 15874 23464 +3 23366 12423 4532 +3 23464 23366 4532 +3 12423 13276 13468 +3 4532 12423 13468 +3 13276 9202 13522 +3 13468 13276 13522 +3 9202 13186 13281 +3 13522 9202 13281 +3 704 13904 13281 +3 13186 704 13281 +3 3128 1329 13904 +3 704 3128 13904 +3 3128 12634 4285 +3 1329 3128 4285 +3 15676 15875 4285 +3 12634 15676 4285 +3 19979 21777 15875 +3 15676 19979 15875 +3 13955 11596 21777 +3 19979 13955 21777 +3 20278 20239 11596 +3 13955 20278 11596 +3 21118 21117 20239 +3 20278 21118 20239 +3 21851 21850 21117 +3 21118 21851 21117 +3 5222 15112 21850 +3 21851 5222 21850 +3 14156 12448 15112 +3 5222 14156 15112 +3 23153 23140 12448 +3 14156 23153 12448 +3 3336 13469 23140 +3 23153 3336 23140 +3 20193 21303 13469 +3 3336 20193 13469 +3 11410 15871 21303 +3 20193 11410 21303 +3 13201 14145 15871 +3 11410 13201 15871 +3 13201 23325 23422 +3 14145 13201 23422 +3 22340 22339 23422 +3 23325 22340 23422 +3 12985 12892 22339 +3 22340 12985 22339 +3 23415 23123 12892 +3 12985 23415 12892 +3 21323 21504 23123 +3 23415 21323 23123 +3 22540 20311 21504 +3 21323 22540 21504 +3 20674 20779 20311 +3 22540 20674 20311 +3 16386 17100 5485 +3 29086 29223 29085 +3 23213 23212 23114 +3 24187 30767 26209 +3 12361 22956 21400 +3 21379 21464 20347 +3 31688 31788 31687 +3 21395 20199 20200 +3 20026 15459 20655 +3 21669 20026 20655 +3 20577 20578 15459 +3 20026 20577 15459 +3 20577 22433 20571 +3 20578 20577 20571 +3 17875 17968 17967 +3 20571 22433 22651 +3 18747 21129 18748 +3 20155 20070 14239 +3 20391 20475 20474 +3 20305 20306 20390 +3 26202 24112 25397 +3 20064 20065 20563 +3 28686 28818 28685 +3 21484 21577 13954 +3 16300 17563 18733 +3 17097 123 17129 +3 20189 20275 20274 +3 20188 20189 20274 +3 20360 20359 20274 +3 20275 20360 20274 +3 20444 20443 20359 +3 20360 20444 20359 +3 20529 20528 20443 +3 20444 20529 20443 +3 20611 20610 20528 +3 20529 20611 20528 +3 20692 20691 20610 +3 20611 20692 20610 +3 20692 20774 20773 +3 20691 20692 20773 +3 20774 20856 20855 +3 20773 20774 20855 +3 20856 20936 20935 +3 20855 20856 20935 +3 21019 21018 20935 +3 20936 21019 20935 +3 21105 21104 21018 +3 21019 21105 21018 +3 21105 21193 21192 +3 21104 21105 21192 +3 33966 21194 33967 +3 21192 21193 21279 +3 20184 20099 20185 +3 22844 17104 22943 +3 28198 28197 28080 +3 28081 28198 28080 +3 27614 27615 27731 +3 27615 27732 27731 +3 3365 3364 3226 +3 30316 30315 30182 +3 21832 21927 21926 +3 21831 21832 21926 +3 21927 22022 22021 +3 21926 21927 22021 +3 21928 22023 22022 +3 22021 22022 22117 +3 22118 22214 22213 +3 22117 22118 22213 +3 22214 22310 22309 +3 22213 22214 22309 +3 22310 22407 22406 +3 22309 22310 22406 +3 22407 22505 22504 +3 22406 22407 22504 +3 22505 22604 22603 +3 22504 22505 22603 +3 22604 22703 22702 +3 22603 22604 22702 +3 22703 22802 22801 +3 22702 22703 22801 +3 22802 22901 22900 +3 22801 22802 22900 +3 22901 23000 22999 +3 22900 22901 22999 +3 23000 23098 23097 +3 22999 23000 23097 +3 23098 23196 23195 +3 23097 23098 23195 +3 23294 23293 23195 +3 23196 23294 23195 +3 23391 23390 23293 +3 23294 23391 23293 +3 4947 14701 23390 +3 23391 4947 23390 +3 4947 16443 16295 +3 14701 4947 16295 +3 16443 12570 2254 +3 16295 16443 2254 +3 12570 15076 13809 +3 2254 12570 13809 +3 14956 15332 13809 +3 15076 14956 13809 +3 4195 3931 15332 +3 14956 4195 15332 +3 7471 11505 3931 +3 4195 7471 3931 +3 13588 7571 11505 +3 7471 13588 11505 +3 20584 4062 7571 +3 13588 20584 7571 +3 16607 16454 4062 +3 20584 16607 4062 +3 4096 4377 16454 +3 16607 4096 16454 +3 13150 14966 4377 +3 4096 13150 4377 +3 6633 10094 14966 +3 13150 6633 14966 +3 23273 23175 10094 +3 6633 23273 10094 +3 23273 8004 16456 +3 23175 23273 16456 +3 8004 11201 9232 +3 16456 8004 9232 +3 11201 20013 15874 +3 9232 11201 15874 +3 20013 22658 23366 +3 15874 20013 23366 +3 22658 12337 12423 +3 23366 22658 12423 +3 12337 13373 13276 +3 12423 12337 13276 +3 13373 6118 9202 +3 13276 13373 9202 +3 13378 13186 9202 +3 6118 13378 9202 +3 13206 704 13186 +3 13378 13206 13186 +3 15633 3128 704 +3 13206 15633 704 +3 15633 14052 12634 +3 3128 15633 12634 +3 16304 15676 12634 +3 14052 16304 12634 +3 20174 19979 15676 +3 16304 20174 15676 +3 2888 13955 19979 +3 20174 2888 19979 +3 2888 20279 20278 +3 13955 2888 20278 +3 20279 21119 21118 +3 20278 20279 21118 +3 21852 21851 21118 +3 21119 21852 21118 +3 371 5222 21851 +3 21852 371 21851 +3 20647 14156 5222 +3 371 20647 5222 +3 23236 23153 14156 +3 20647 23236 14156 +3 5589 3336 23153 +3 23236 5589 23153 +3 20645 20193 3336 +3 5589 20645 3336 +3 15466 11410 20193 +3 20645 15466 20193 +3 14045 13201 11410 +3 15466 14045 11410 +3 14045 22833 23325 +3 13201 14045 23325 +3 22438 22340 23325 +3 22833 22438 23325 +3 20696 12985 22340 +3 22438 20696 22340 +3 22355 23415 12985 +3 20696 22355 12985 +3 21594 21323 23415 +3 22355 21594 23415 +3 22442 22540 21323 +3 21594 22442 21323 +3 17100 20674 22540 +3 22442 17100 22540 +3 123 2621 17129 +3 4233 19308 34065 +3 20490 20491 21299 +3 13686 3311 21768 +3 32241 32343 32240 +3 20305 17702 20306 +3 30507 25105 30506 +3 25578 30506 25105 +3 21240 20026 21669 +3 21394 21240 21669 +3 22651 18569 19429 +3 20026 21240 20577 +3 14811 14628 16857 +3 18026 7107 21769 +3 14684 20497 19992 +3 22925 13686 13497 +3 11861 15463 11862 +3 14589 14684 19992 +3 18840 1969 18741 +3 18968 17623 18868 +3 20575 21399 20574 +3 20189 17870 20275 +3 21768 7107 2768 +3 14058 16485 16334 +3 20306 20391 20390 +3 33187 33292 33186 +3 16849 5485 17100 +3 20361 20360 20275 +3 35851 35418 35443 +3 20445 20444 20360 +3 20361 20445 20360 +3 20530 20529 20444 +3 20445 20530 20444 +3 20612 20611 20529 +3 20530 20612 20529 +3 20612 20693 20692 +3 20611 20612 20692 +3 20693 20775 20774 +3 20692 20693 20774 +3 20775 20857 20856 +3 20774 20775 20856 +3 20857 20937 20936 +3 20856 20857 20936 +3 21020 21019 20936 +3 20937 21020 20936 +3 21106 21105 21019 +3 21020 21106 21019 +3 21106 21194 21193 +3 21105 21106 21193 +3 21195 33967 21194 +3 24738 2807 28996 +3 22761 24553 24555 +3 28315 28435 28314 +3 28315 28314 28197 +3 27963 27962 27846 +3 27732 27847 27846 +3 31597 31692 31596 +3 26606 26605 26509 +3 21833 21928 21927 +3 21832 21831 34754 +3 21928 35138 22023 +3 21927 21928 22022 +3 6846 21368 21458 +3 27635 27646 29271 +3 22119 22215 22214 +3 22117 22022 35136 +3 22215 22311 22310 +3 22214 22215 22310 +3 22311 22408 22407 +3 22310 22311 22407 +3 22408 22506 22505 +3 22407 22408 22505 +3 22506 22605 22604 +3 22505 22506 22604 +3 22605 22704 22703 +3 22604 22605 22703 +3 22704 22803 22802 +3 22703 22704 22802 +3 22803 22902 22901 +3 22802 22803 22901 +3 22902 23001 23000 +3 22901 22902 23000 +3 23001 23099 23098 +3 23000 23001 23098 +3 23099 23197 23196 +3 23098 23099 23196 +3 23295 23294 23196 +3 23197 23295 23196 +3 23392 23391 23294 +3 23295 23392 23294 +3 21500 4947 23391 +3 23392 21500 23391 +3 21500 16006 16443 +3 4947 21500 16443 +3 16006 11341 12570 +3 16443 16006 12570 +3 11341 15077 15076 +3 12570 11341 15076 +3 15537 14956 15076 +3 15077 15537 15076 +3 16759 4195 14956 +3 15537 16759 14956 +3 14072 7471 4195 +3 16759 14072 4195 +3 12307 13588 7471 +3 14072 12307 7471 +3 13012 20584 13588 +3 12307 13012 13588 +3 16608 16607 20584 +3 13012 16608 20584 +3 4063 4096 16607 +3 16608 4063 16607 +3 10119 13150 4096 +3 4063 10119 4096 +3 2904 6633 13150 +3 10119 2904 13150 +3 23370 23273 6633 +3 2904 23370 6633 +3 23370 13585 8004 +3 23273 23370 8004 +3 13585 12389 11201 +3 8004 13585 11201 +3 12389 20012 20013 +3 11201 12389 20013 +3 20012 20664 22658 +3 20013 20012 22658 +3 20664 5693 12337 +3 22658 20664 12337 +3 5693 12992 13373 +3 12337 5693 13373 +3 12992 10447 6118 +3 13373 12992 6118 +3 13377 13378 6118 +3 10447 13377 6118 +3 13014 13206 13378 +3 24108 24456 26084 +3 17911 22261 34071 +3 20587 20669 20668 +3 16923 15601 23885 +3 24471 16923 23885 +3 23715 26004 22448 +3 20986 23715 22448 +3 15585 13177 21908 +3 26223 24438 24397 +3 25591 24099 25589 +3 29569 24430 3058 +3 21005 23501 13270 +3 26330 25719 24962 +3 12087 21984 23501 +3 15585 26197 15720 +3 21660 23314 24424 +3 24434 24710 24350 +3 25964 24627 25377 +3 25965 25964 25377 +3 25226 23667 25455 +3 26001 24046 25204 +3 25591 25589 23705 +3 25154 25188 13560 +3 24133 24748 23983 +3 23535 23833 23534 +3 13110 23250 22447 +3 6008 2006 1063 +3 1326 19474 24000 +3 13060 13154 13059 +3 35648 35424 35684 +3 12873 12967 12966 +3 34720 6939 6974 +3 23572 25585 12873 +3 21957 25718 24820 +3 35080 35209 35079 +3 14373 24203 25658 +3 22394 25521 25520 +3 25993 25851 4536 +3 15577 15446 15447 +3 17102 25657 21066 +3 26293 26294 22758 +3 12692 12782 12781 +3 16775 14586 15621 +3 24546 24362 12008 +3 24905 23701 24904 +3 22368 25033 22271 +3 22463 25224 24069 +3 23786 20945 23787 +3 25854 25864 21073 +3 21358 22291 25773 +3 23890 25302 24955 +3 24148 25488 25486 +3 23890 24955 24954 +3 25140 24448 23927 +3 25321 25775 13089 +3 26167 26168 26308 +3 24580 20658 21888 +3 13104 24580 21888 +3 24687 12712 24688 +3 25863 24370 22974 +3 26084 26223 24397 +3 24161 24715 24397 +3 12358 21722 25570 +3 24438 24161 24397 +3 24997 26260 25356 +3 24450 30632 30625 +3 24161 25339 25338 +3 14562 35762 35801 +3 22780 25333 24788 +3 26251 37 4530 +3 35653 35867 35563 +3 2343 5208 5074 +3 20058 20974 440 +3 17315 17303 11836 +3 25488 23890 23532 +3 23611 25672 22628 +3 22298 25630 25521 +3 20844 23526 23870 +3 14356 14332 14343 +3 25736 25878 25877 +3 22290 25970 25917 +3 25061 25062 24849 +3 25650 24405 26096 +3 26052 26051 25909 +3 25919 24286 24474 +3 13077 26096 25953 +3 24715 24161 25338 +3 24286 24769 21515 +3 25714 16930 25817 +3 25339 23891 26235 +3 24532 22098 24707 +3 35351 35879 35509 +3 24234 24248 25537 +3 24443 24022 29020 +3 25023 25919 24474 +3 25536 23828 25163 +3 24474 24286 21515 +3 21908 23806 21005 +3 13363 13458 13362 +3 23806 15218 12087 +3 25290 24173 23057 +3 15218 23252 12087 +3 24858 24471 23715 +3 20907 20986 23252 +3 15218 20907 23252 +3 14794 24858 23715 +3 14794 23715 20986 +3 20907 14794 20986 +3 22878 16923 24471 +3 25338 25339 26235 +3 26031 26032 26173 +3 24264 23776 24983 +3 25454 25149 25422 +3 24440 14850 24694 +3 25961 25814 23916 +3 22365 24380 22778 +3 14332 25946 14344 +3 24858 22878 24471 +3 25762 25904 25761 +3 26349 30874 26351 +3 24477 23755 24325 +3 24847 30599 28070 +3 26089 25946 14332 +3 35854 35585 35602 +3 22350 24248 24234 +3 16148 16149 16292 +3 7991 11356 8680 +3 25629 25155 13459 +3 20590 23746 20589 +3 24964 25097 24086 +3 25026 24521 21055 +3 23786 3602 20319 +3 24948 12089 21447 +3 24525 12105 26257 +3 24343 24535 25685 +3 12105 20140 26257 +3 24154 25476 22781 +3 23881 24097 25031 +3 23808 23614 24042 +3 25521 25630 24567 +3 21534 21910 23714 +3 24950 23613 23798 +3 24462 24463 20984 +3 21070 23943 25373 +3 25518 24051 24222 +3 20984 21070 25373 +3 24424 23314 2234 +3 23562 25518 24222 +3 24194 22778 24483 +3 23715 24471 26004 +3 24511 24424 2234 +3 25380 24713 23633 +3 19570 24230 25225 +3 22174 13461 25976 +3 23985 24290 26061 +3 9634 24482 12273 +3 32247 32246 32146 +3 26143 26284 26142 +3 23585 23826 24841 +3 25250 22365 24194 +3 24185 24184 25225 +3 22778 23714 24483 +3 24408 22365 25651 +3 118 3600 3221 +3 22365 22778 24194 +3 33556 7516 7514 +3 35084 35213 35083 +3 20829 27372 20746 +3 29414 22646 21776 +3 26090 26231 26089 +3 20590 20672 20671 +3 35440 35435 35426 +3 26120 24830 28100 +3 24933 24934 23496 +3 13247 13246 13151 +3 23314 24408 2234 +3 22365 25250 25651 +3 24768 25654 12623 +3 25914 25318 21972 +3 24521 22287 21055 +3 24379 22268 25245 +3 23543 23548 23662 +3 25218 21700 23571 +3 26320 26321 24628 +3 25977 25218 23571 +3 23750 24477 24325 +3 24812 25856 21909 +3 22291 22290 25774 +3 13247 13151 13152 +3 20502 14911 20501 +3 4396 24869 1525 +3 25612 16442 25613 +3 13753 25185 25184 +3 25471 25472 24712 +3 23943 25518 23562 +3 24766 13015 25433 +3 21534 21911 24435 +3 23859 23860 25219 +3 20223 15540 25219 +3 31919 32020 32019 +3 26161 26302 26301 +3 23665 25861 25831 +3 22172 21793 26257 +3 6850 25348 21814 +3 25774 23869 23875 +3 26038 26180 26179 +3 26235 23891 25314 +3 25185 15328 23572 +3 25184 25185 23572 +3 15328 25308 25585 +3 5424 15492 617 +3 23572 15328 25585 +3 22271 21966 24892 +3 25537 25565 24609 +3 23250 25822 24138 +3 32766 32765 32651 +3 33219 33220 33324 +3 35113 19099 34482 +3 24605 12169 24527 +3 28350 27026 25133 +3 25808 22585 23930 +3 21672 11979 22679 +3 25292 25287 28237 +3 25308 25292 25585 +3 24201 24726 22857 +3 26294 12356 22758 +3 21055 25628 25484 +3 16024 16922 21159 +3 22877 24709 25518 +3 25032 24376 23814 +3 35817 35811 35882 +3 22291 25774 25773 +3 21700 25218 24493 +3 23867 25671 23646 +3 24600 23867 25218 +3 25114 24600 25218 +3 17086 24812 21909 +3 24589 17086 21909 +3 22560 4248 23076 +3 25662 24902 26331 +3 26115 26255 24371 +3 23566 24312 24892 +3 16147 16290 16146 +3 23764 23964 23958 +3 25460 25461 23352 +3 24661 24708 24819 +3 20677 24169 24305 +3 19987 13663 24602 +3 21356 26097 20739 +3 24222 24051 24511 +3 24471 23885 26004 +3 23596 22977 24986 +3 25955 24494 9690 +3 23893 24462 21156 +3 26110 23508 20682 +3 24684 25627 24687 +3 24133 23924 24748 +3 26225 25288 24399 +3 11859 22195 11945 +3 25448 24437 25100 +3 23520 24834 11836 +3 24384 25654 24768 +3 26209 30767 25536 +3 26302 26303 24705 +3 23663 23810 26221 +3 29427 9403 14249 +3 21509 25214 23614 +3 21509 26210 25214 +3 25976 25504 25220 +3 23620 24014 23870 +3 25476 25005 25426 +3 15581 15450 15451 +3 12451 25070 25204 +3 31017 31078 31016 +3 26005 21727 13434 +3 24682 23959 22679 +3 24516 24682 22679 +3 20410 21242 23970 +3 35806 24682 24801 +3 24962 25719 25455 +3 26118 25976 25220 +3 618 24479 22560 +3 24079 23917 22290 +3 25220 25504 17483 +3 25216 26247 21356 +3 23608 25959 24465 +3 25504 23707 17483 +3 24724 25032 23814 +3 25719 25226 25455 +3 24590 24071 24072 +3 26245 24475 24368 +3 24493 23867 23646 +3 25826 25968 23556 +3 23837 12006 26261 +3 12652 12562 35337 +3 28425 25792 23598 +3 22584 22106 20681 +3 22585 22584 20681 +3 24900 21691 25808 +3 21445 25638 25194 +3 23810 23527 22762 +3 21070 20985 23943 +3 26194 25685 26193 +3 11945 26245 24368 +3 20668 24233 20587 +3 12623 24198 25316 +3 20682 25119 23917 +3 23611 24381 24463 +3 25740 25882 25881 +3 29544 29545 28741 +3 24113 24148 25486 +3 23758 22562 22464 +3 24904 25215 25367 +3 25767 25779 26247 +3 25153 24658 24657 +3 30812 25385 23809 +3 27520 27143 8230 +3 25292 25291 25585 +3 33383 33382 33273 +3 15111 15110 14989 +3 22945 23044 24006 +3 35939 29356 35788 +3 23498 26236 21911 +3 21181 21267 24378 +3 24494 25813 24600 +3 25065 25066 25430 +3 13664 24516 11979 +3 21778 11944 25054 +3 15591 12271 12272 +3 26195 26194 26052 +3 25685 24573 22200 +3 24769 24322 24097 +3 35579 35433 35431 +3 24683 24685 25382 +3 13664 24801 24516 +3 20441 20442 20527 +3 30932 30931 30877 +3 33161 33160 33055 +3 26005 13530 13529 +3 20025 18421 18053 +3 11449 21287 15329 +3 35338 35337 35208 +3 35805 35765 35924 +3 737 738 283 +3 21515 24769 24097 +3 15543 5428 5276 +3 25793 23585 26110 +3 13626 13625 23733 +3 6402 274 580 +3 25905 26047 25904 +3 12106 25926 21699 +3 26203 24269 24589 +3 24491 25979 20745 +3 22645 25860 13808 +3 16024 21159 25481 +3 20027 22878 24858 +3 25358 20027 24858 +3 26200 22287 24521 +3 12717 26200 24521 +3 23607 25926 12106 +3 22287 26200 25629 +3 24459 25721 25722 +3 26299 25492 24504 +3 23807 23925 25169 +3 34274 34273 34135 +3 25037 23925 24852 +3 25815 25037 24852 +3 25801 25802 20346 +3 21357 22103 24238 +3 13859 15201 24871 +3 35192 35191 35062 +3 24802 23671 25641 +3 25824 25825 25396 +3 22104 26331 26190 +3 20140 22172 26257 +3 24462 20984 21156 +3 21008 24740 21093 +3 25711 24105 25652 +3 20902 23515 21425 +3 24604 23881 23649 +3 20441 20526 20440 +3 23515 23524 21425 +3 25638 24235 25655 +3 16002 25909 25908 +3 23547 24601 24598 +3 25971 23825 16236 +3 26053 26195 26052 +3 23811 20033 25543 +3 25365 27901 25077 +3 27982 21719 12007 +3 26003 22192 24876 +3 23915 25037 25815 +3 20346 23915 25815 +3 22878 23058 16923 +3 23058 23156 16923 +3 23058 23528 24611 +3 23156 23058 24611 +3 26302 24705 24366 +3 11752 25663 24280 +3 25472 24837 24712 +3 24325 23755 23924 +3 24096 24099 25471 +3 35776 11249 11808 +3 22657 22955 22558 +3 11771 30844 30843 +3 30846 23823 30847 +3 23832 26244 24361 +3 26180 26321 26320 +3 25881 25882 26023 +3 20353 20267 20268 +3 21635 11770 25961 +3 24780 24829 24742 +3 23730 25195 24352 +3 22270 13091 25677 +3 13761 22384 25191 +3 23616 23627 24678 +3 26119 25114 25977 +3 23235 23607 12445 +3 25114 25218 25977 +3 23702 25789 21691 +3 25200 11751 26215 +3 23515 24474 23524 +3 23675 20815 24261 +3 21536 21629 25542 +3 24849 25046 25999 +3 24100 24105 25473 +3 26303 25154 24705 +3 25824 25396 23672 +3 21535 24622 25770 +3 32296 32399 32295 +3 23592 25363 22493 +3 24756 26077 24642 +3 23760 23832 24361 +3 23533 618 13663 +3 33437 33550 33549 +3 21158 4780 23665 +3 24833 4382 25349 +3 23776 23790 21355 +3 22781 25476 25426 +3 25593 25735 25734 +3 24828 23933 22875 +3 3880 26281 26280 +3 23878 25251 21244 +3 25031 26109 25967 +3 23524 23881 24604 +3 24576 24602 24722 +3 23076 25160 23267 +3 25734 25876 25875 +3 24602 23076 23267 +3 20826 20827 21060 +3 12443 25998 25344 +3 13531 13530 13434 +3 31515 31602 31514 +3 23533 13663 19987 +3 25863 26113 24370 +3 24589 21909 21813 +3 23526 21668 23991 +3 20415 20501 20500 +3 24463 24381 21070 +3 25253 24625 23724 +3 26304 26305 25188 +3 26303 26304 25154 +3 24706 23914 23627 +3 22175 22270 25677 +3 25953 26096 23728 +3 23794 26221 24315 +3 13274 12715 24683 +3 28225 28216 25191 +3 21727 13436 13435 +3 24583 20222 24584 +3 25155 13555 25725 +3 25905 25906 26047 +3 26189 26188 26046 +3 25188 24045 24833 +3 12336 21792 11669 +3 26330 26329 26188 +3 24521 25026 22974 +3 12023 23849 24042 +3 25216 20739 25765 +3 25336 23721 24787 +3 24749 13341 21727 +3 19564 13893 2944 +3 126 9899 24660 +3 11409 9542 13418 +3 23650 15320 21361 +3 24479 22779 24700 +3 618 22560 13663 +3 21361 23533 19987 +3 24964 24086 23948 +3 25677 13091 24258 +3 25016 25020 26259 +3 25970 23985 25918 +3 23697 24493 23822 +3 25636 24449 24641 +3 23791 23515 25379 +3 1537 20222 25379 +3 21425 23524 24604 +3 23881 25031 23649 +3 4248 25009 25160 +3 23076 4248 25160 +3 31725 31726 31825 +3 4254 21725 9992 +3 19984 24764 15447 +3 25435 24755 23461 +3 11793 25137 11792 +3 24122 25576 25577 +3 21006 10869 10465 +3 23728 23729 24752 +3 25021 25017 23667 +3 4553 13366 24721 +3 25715 25711 25674 +3 23267 4662 23555 +3 23581 23497 13753 +3 25948 23581 13151 +3 23497 25186 25185 +3 13753 23497 25185 +3 25186 12733 15328 +3 25185 25186 15328 +3 25309 25308 15328 +3 12733 25309 15328 +3 25633 24186 24876 +3 24049 16920 23336 +3 24698 24699 25911 +3 23628 24699 24698 +3 13077 13076 25650 +3 24660 9899 8027 +3 23918 25108 20827 +3 20823 23583 21335 +3 26109 26108 12189 +3 20222 1537 24584 +3 31530 31617 31616 +3 25628 25629 13459 +3 24189 23929 24713 +3 25093 22100 11859 +3 24740 24742 21093 +3 25061 24849 25060 +3 32194 32193 32093 +3 26793 24276 24359 +3 25309 25287 25308 +3 2543 25351 25350 +3 24697 25351 23642 +3 26285 26284 26143 +3 25813 23411 25671 +3 25021 26119 25017 +3 24290 26062 26061 +3 23517 24427 24469 +3 11942 25652 24848 +3 26138 25996 369 +3 24299 25583 25581 +3 19564 2944 3083 +3 25119 23985 25970 +3 25304 20672 20590 +3 22192 24928 25493 +3 23515 20902 25379 +3 20222 23791 25379 +3 25965 25377 12534 +3 25377 24192 24193 +3 24583 24584 25009 +3 4248 24583 25009 +3 24761 24229 24125 +3 24513 23719 24919 +3 25664 25807 26082 +3 12309 20408 24790 +3 32681 17535 34469 +3 22350 23621 24248 +3 25598 25740 25739 +3 23519 25320 25664 +3 23914 23628 23627 +3 23627 23628 24698 +3 23667 23363 25455 +3 25332 25784 25331 +3 24549 23894 23895 +3 24623 25854 25821 +3 24280 23948 24610 +3 22779 25919 20886 +3 24363 24280 24610 +3 25912 23929 24189 +3 24184 25068 25225 +3 23588 23591 24638 +3 25911 25912 24189 +3 25816 25958 24896 +3 26096 23729 23728 +3 24193 26236 23498 +3 26192 22105 26191 +3 25709 25863 25661 +3 24959 25825 25824 +3 25867 25869 24341 +3 24573 24683 25382 +3 23578 24756 24642 +3 30224 30356 14137 +3 25160 25009 12647 +3 24391 24462 23893 +3 23649 25031 25967 +3 24787 25179 13893 +3 24909 15187 25954 +3 23828 25571 25572 +3 22760 24907 22389 +3 21091 25192 24355 +3 24355 25192 24706 +3 21006 21091 24355 +3 25192 23914 24706 +3 12189 25824 25966 +3 25600 17081 25601 +3 24500 10578 24606 +3 25396 24264 24265 +3 24840 25336 25381 +3 23933 25487 21537 +3 22009 22008 25028 +3 12534 25245 24231 +3 25199 25913 22778 +3 24629 22009 25028 +3 24483 13174 22099 +3 24380 25199 22778 +3 21333 12105 24525 +3 25908 26050 25907 +3 24679 24788 25201 +3 23756 24375 24374 +3 26105 20861 21536 +3 23918 24023 25108 +3 24645 24677 25867 +3 25869 24512 24341 +3 4780 25861 23665 +3 24699 25912 25911 +3 25762 25761 16148 +3 26050 26049 25907 +3 24833 25349 13560 +3 26234 25236 23516 +3 34952 35081 34951 +3 26183 26324 26323 +3 24534 17483 23780 +3 12276 20408 12309 +3 23652 24415 11547 +3 24482 16758 12273 +3 23929 25539 24713 +3 24781 12215 24662 +3 23510 23509 24308 +3 23716 23533 21361 +3 24725 20413 24445 +3 25595 25737 25736 +3 26165 26166 26306 +3 15904 15765 15766 +3 12715 12804 24685 +3 26182 26183 26323 +3 23913 23909 25323 +3 24535 24686 24573 +3 24092 24091 24031 +3 13808 24891 12715 +3 9278 11835 11671 +3 26025 26026 26167 +3 26026 26168 26167 +3 23917 25119 25970 +3 25164 23596 24986 +3 24713 25539 24750 +3 22447 21728 23557 +3 23815 26218 23677 +3 24311 24077 24956 +3 20223 24391 15540 +3 25773 25774 23875 +3 25585 12692 12781 +3 15631 22756 22855 +3 25804 12624 23915 +3 29830 21417 26499 +3 25924 23549 25818 +3 23593 23563 23547 +3 21817 21816 25924 +3 23549 23593 25818 +3 11595 11670 21817 +3 21816 23549 25924 +3 26192 26191 26049 +3 25378 8027 24621 +3 23667 25017 23363 +3 23750 24325 23989 +3 27749 27633 20846 +3 26040 26041 26182 +3 25300 23921 24695 +3 23487 23541 20500 +3 24176 24249 4812 +3 25655 24235 23523 +3 24373 24374 24340 +3 11944 25053 25054 +3 32529 32638 32637 +3 26203 24589 12446 +3 25524 25157 25171 +3 26032 26174 26173 +3 23828 12358 25571 +3 23587 23588 24633 +3 24638 25866 25865 +3 24478 24479 618 +3 25712 23716 21361 +3 25878 26020 26019 +3 24379 24193 22268 +3 26059 29833 25034 +3 26046 26188 26045 +3 21073 24546 12008 +3 24697 23642 24933 +3 25784 21452 25331 +3 25630 23753 24567 +3 25635 24122 25577 +3 22760 25489 24907 +3 24322 24111 24979 +3 26041 26183 26182 +3 24111 26107 26108 +3 22198 25662 22104 +3 23622 24641 24445 +3 24677 25869 25867 +3 21514 21424 30156 +3 23528 12107 16150 +3 33863 33862 33728 +3 25208 24320 22881 +3 24764 15320 15447 +3 9085 15603 23837 +3 5074 25996 25995 +3 21917 20659 24914 +3 25821 20659 21917 +3 25818 23593 23547 +3 23563 24612 24601 +3 20844 12188 24926 +3 23821 20844 24926 +3 12188 20844 24385 +3 20844 23870 24385 +3 24385 23870 24015 +3 23870 24014 24015 +3 24543 20826 24630 +3 25388 25529 24015 +3 13079 23690 26283 +3 26284 26283 26142 +3 25031 24979 26109 +3 26224 26198 25001 +3 24097 24322 24979 +3 26107 24314 24959 +3 24979 24111 26108 +3 24314 25683 25825 +3 26108 26107 24959 +3 24578 24593 25801 +3 24959 24314 25825 +3 23513 23523 24578 +3 25802 23915 20346 +3 23596 25219 22977 +3 24392 25955 22977 +3 20590 20671 23746 +3 26085 25374 24543 +3 26085 24543 24544 +3 21628 26085 24544 +3 24314 25538 25683 +3 20229 24478 618 +3 25965 12534 25534 +3 21910 21534 24351 +3 23509 24307 24308 +3 12472 12383 35335 +3 25799 23825 25971 +3 25796 25799 25971 +3 25219 23596 25164 +3 24686 24683 24573 +3 23528 16150 23583 +3 24593 25802 25801 +3 24611 23528 23583 +3 16150 24410 23742 +3 23583 16150 23742 +3 24410 23814 23756 +3 23742 24410 23756 +3 25250 20740 24080 +3 12087 23252 21984 +3 22487 22584 25789 +3 15534 24163 24674 +3 25377 24379 12534 +3 25866 22976 21092 +3 24435 25095 25116 +3 25862 2234 24080 +3 25805 25821 21917 +3 20659 23679 24914 +3 1149 24909 1024 +3 24702 24701 23868 +3 25943 22780 24788 +3 1149 1024 13859 +3 24909 23868 1024 +3 20943 20896 20233 +3 24323 24077 24238 +3 25867 24341 22976 +3 23917 25970 22290 +3 26049 26048 25906 +3 24079 24101 15405 +3 24395 24396 23732 +3 16930 24491 13240 +3 25906 25905 25763 +3 25751 25893 25892 +3 26247 20682 21356 +3 26247 25216 25766 +3 25382 24685 22198 +3 24376 24375 23756 +3 25597 17247 25598 +3 26150 5722 1679 +3 22172 23909 23913 +3 26093 26140 21543 +3 12272 12271 24166 +3 12271 25319 24166 +3 13651 29570 13650 +3 26161 26162 26302 +3 11922 5593 1993 +3 23893 21156 25790 +3 26005 21820 21727 +3 8680 11671 10465 +3 21820 25963 24749 +3 21727 21820 24749 +3 25963 25622 25948 +3 24749 25963 25948 +3 25622 14795 23581 +3 25948 25622 23581 +3 14795 22483 23497 +3 23581 14795 23497 +3 22483 25187 25186 +3 23497 22483 25186 +3 4194 25946 26089 +3 24700 20886 24583 +3 23860 23859 24890 +3 24621 8027 12022 +3 24909 24702 23868 +3 23821 24926 24701 +3 24612 25821 25805 +3 25684 23579 20744 +3 24618 24511 25862 +3 14252 24609 25394 +3 25960 24522 23587 +3 26261 24838 24966 +3 24023 25378 25108 +3 23857 25248 24729 +3 12804 24890 25020 +3 25219 15540 22977 +3 25196 12733 25186 +3 25187 25196 25186 +3 25172 25309 12733 +3 25196 25172 12733 +3 25286 25287 25309 +3 25172 25286 25309 +3 20682 23508 25119 +3 24685 12804 24684 +3 25774 25917 23869 +3 23993 22662 23494 +3 22368 22271 24312 +3 21917 24914 25169 +3 25035 25167 20666 +3 25865 25866 21092 +3 24633 24638 25865 +3 1731 5625 4923 +3 21699 24549 23895 +3 21156 20984 22391 +3 24625 23578 24642 +3 19121 1073 18274 +3 24904 25367 24166 +3 5555 29021 21305 +3 14911 20502 20503 +3 22558 21980 22073 +3 24909 1149 15187 +3 25635 25577 25578 +3 24458 25520 25512 +3 21818 20923 25639 +3 23783 24987 24980 +3 25119 23858 23985 +3 24077 25030 24238 +3 28118 24731 25500 +3 26291 13268 23764 +3 23648 24221 24293 +3 24374 24257 24340 +3 23669 26230 24560 +3 24978 25532 24279 +3 26063 26206 24766 +3 24380 22365 24408 +3 33633 33760 33632 +3 24231 25245 21660 +3 25814 24588 17086 +3 21151 23788 9415 +3 24759 25856 24812 +3 25906 26048 26047 +3 25381 25335 25334 +3 25969 25381 25334 +3 12027 24581 21725 +3 25279 23711 25569 +3 23826 25454 24841 +3 24408 25651 2234 +3 28139 24646 28138 +3 26148 26149 26289 +3 23252 24049 21984 +3 24392 23893 25087 +3 24051 24424 24511 +3 25955 24392 25087 +3 20985 22877 23943 +3 25216 25765 25766 +3 15540 24392 22977 +3 25910 25911 24619 +3 25163 23828 25572 +3 26169 26170 26310 +3 23740 21980 22558 +3 23774 24980 24976 +3 24593 24598 25802 +3 24479 24700 22560 +3 25736 25737 25878 +3 17483 24460 23780 +3 12444 12357 23617 +3 25220 17483 24534 +3 26230 24967 24978 +3 7930 15405 25222 +3 25328 11944 21778 +3 22198 24684 25662 +3 24914 23679 24137 +3 24601 24612 25805 +3 20229 618 23533 +3 23716 20229 23533 +3 14758 21060 11668 +3 23588 24638 24633 +3 25802 25804 23915 +3 25370 25513 23505 +3 24890 23859 25020 +3 23859 25164 25020 +3 12804 25627 24684 +3 23859 25219 25164 +3 22156 28367 29817 +3 25627 12804 25020 +3 13146 25822 23250 +3 24434 24350 22099 +3 25224 22463 13110 +3 32347 32451 32346 +3 23698 24393 22837 +3 14141 25167 23487 +3 25804 25805 12624 +3 11750 21179 21912 +3 11879 12058 12059 +3 26260 24751 25356 +3 23858 24290 23985 +3 25116 25095 12903 +3 20827 24260 21060 +3 25544 22581 24681 +3 24391 24392 15540 +3 23428 12189 25966 +3 20514 25067 25858 +3 11671 21724 21091 +3 32241 32240 32140 +3 11569 14558 11502 +3 20846 27633 27634 +3 11749 11750 21912 +3 25157 25008 24183 +3 24517 24346 2957 +3 22582 23496 20017 +3 23544 26121 25979 +3 30504 25576 25433 +3 23496 24934 20017 +3 26061 26062 25635 +3 25580 24550 7759 +3 25214 25526 25386 +3 25937 24933 23496 +3 25615 25757 25756 +3 23917 24079 26097 +3 35791 35722 35908 +3 14793 3036 732 +3 26016 26017 26158 +3 23662 23663 26221 +3 20669 20752 20751 +3 25369 25950 20668 +3 14344 14343 14332 +3 16107 351 23938 +3 23969 23966 25676 +3 35063 35192 35062 +3 21816 21912 23549 +3 24641 24449 24445 +3 24370 24521 22974 +3 25003 26228 25002 +3 19386 2300 2169 +3 26228 26224 25002 +3 25534 24231 24257 +3 12596 12597 25066 +3 338 26249 9012 +3 24997 24872 25531 +3 16758 11884 12273 +3 25966 23672 24627 +3 25683 20744 20743 +3 22560 24700 4248 +3 20440 20525 20439 +3 20744 24263 25634 +3 25825 25683 20743 +3 6644 25655 23513 +3 20743 20744 25634 +3 25194 25655 6644 +3 23523 24593 24578 +3 24353 25194 6644 +3 25655 23523 23513 +3 12534 24379 25245 +3 12309 24790 12187 +3 20861 21629 21536 +3 14137 30356 14233 +3 24352 25195 23520 +3 27436 15206 15877 +3 24674 23774 23773 +3 25904 26046 26045 +3 22857 22779 24479 +3 24478 22857 24479 +3 24544 24543 24630 +3 23704 21723 21265 +3 20739 26097 21453 +3 25182 25074 25147 +3 25573 23708 30368 +3 25248 9634 24026 +3 26207 26208 20761 +3 25149 25088 22959 +3 12624 25169 25037 +3 24841 25454 25422 +3 25950 25167 14141 +3 21245 20223 25219 +3 24305 24169 24304 +3 12104 24201 24394 +3 34410 34409 34271 +3 34272 34410 34271 +3 24044 24103 24425 +3 22977 25955 9690 +3 25912 25921 23929 +3 25451 23798 20514 +3 24341 24512 25166 +3 24074 26230 23669 +3 24678 25910 25869 +3 23625 23616 23602 +3 23616 24678 24677 +3 26102 23625 23602 +3 1261 10465 10869 +3 21724 26068 25192 +3 23924 24073 23744 +3 9690 24494 24600 +3 24041 23808 24042 +3 21983 12309 12187 +3 25826 25827 24375 +3 23814 24376 23756 +3 24376 25826 24375 +3 23556 25534 25827 +3 26679 24295 24296 +3 19986 25399 24762 +3 35354 35413 35666 +3 14390 14406 14389 +3 11894 35767 35945 +3 11979 11446 13664 +3 23964 23965 24200 +3 24459 21871 25721 +3 13146 22463 20015 +3 26300 24452 25492 +3 13270 23501 12110 +3 24315 26066 26067 +3 25492 24452 23811 +3 4785 2651 5998 +3 26095 12421 24594 +3 23839 23896 20973 +3 24897 13529 13528 +3 26301 26302 24366 +3 23572 12966 25184 +3 5864 330 10758 +3 23991 23620 23870 +3 5352 5351 26286 +3 26249 338 2903 +3 13330 14090 22270 +3 24702 23821 24701 +3 7930 25222 12717 +3 23875 25722 30777 +3 25779 26110 26247 +3 3474 23174 16166 +3 21091 21724 25192 +3 34934 35063 34933 +3 25918 26061 21871 +3 24897 26009 26005 +3 20015 27723 19235 +3 26009 20843 21820 +3 26005 26009 21820 +3 24192 25200 26215 +3 20843 24256 25963 +3 21820 20843 25963 +3 26052 26194 26051 +3 24256 20988 25622 +3 25963 24256 25622 +3 25355 14795 25622 +3 20988 25355 25622 +3 26113 25626 24591 +3 21725 24581 9992 +3 23631 24711 24699 +3 16003 25908 25907 +3 23790 21445 21355 +3 15615 14941 14713 +3 26174 26315 26314 +3 23722 13176 23935 +3 25316 26106 24111 +3 26106 25538 24314 +3 20826 21060 14758 +3 24630 20826 14758 +3 11668 23704 21265 +3 21060 23704 11668 +3 24354 25193 25960 +3 21723 25193 24354 +3 21265 21723 24354 +3 24522 23588 23587 +3 26103 25357 21628 +3 25193 24522 25960 +3 17483 23707 24460 +3 24877 25357 26103 +3 24101 22291 21358 +3 25476 25232 25005 +3 24841 25422 23858 +3 25955 25087 22395 +3 34677 34676 34548 +3 24494 22395 23411 +3 19765 21681 21567 +3 13529 13530 13628 +3 25627 25020 12712 +3 25814 24754 24588 +3 26261 24130 24838 +3 25020 25164 26259 +3 23762 9281 9746 +3 22440 24500 20432 +3 25273 12058 11879 +3 21668 23526 21914 +3 25534 12534 24231 +3 26309 24963 24733 +3 23570 22483 14795 +3 25355 23570 14795 +3 25055 25187 22483 +3 22530 23058 22878 +3 925 927 1045 +3 24329 24380 24408 +3 12044 2252 25004 +3 26313 26314 23605 +3 23856 24190 20680 +3 25742 25743 25884 +3 23824 23532 24832 +3 26111 23856 20680 +3 23689 21449 24626 +3 23610 25544 24232 +3 21160 24106 20033 +3 25391 25637 21538 +3 14713 24114 24176 +3 20033 24106 24580 +3 24647 28257 28377 +3 25906 16004 25907 +3 23570 25055 22483 +3 16149 25761 25902 +3 26099 25196 25187 +3 26110 23585 23508 +3 25566 25567 22394 +3 25932 23703 25443 +3 23555 4662 15218 +3 4662 20907 15218 +3 25627 12712 24687 +3 22391 25373 12339 +3 23547 23563 24601 +3 26068 26094 23914 +3 26233 23592 22493 +3 17081 25600 25599 +3 25192 26068 23914 +3 25055 26099 25187 +3 21005 12087 23501 +3 25173 25172 25196 +3 26099 25173 25196 +3 31077 31139 31076 +3 25285 25286 25172 +3 25173 25285 25172 +3 23992 24198 12623 +3 25500 25285 25644 +3 25285 25500 25286 +3 25066 11858 25430 +3 12639 23544 24556 +3 24560 24978 24279 +3 24543 24547 20826 +3 25532 11752 14839 +3 23628 23631 24699 +3 26191 22104 26190 +3 24173 24259 23057 +3 24711 25921 25912 +3 35458 35571 35798 +3 24854 23622 23541 +3 21822 24289 21450 +3 9085 23837 23544 +3 26107 26106 24314 +3 25538 25684 25683 +3 24322 23506 24111 +3 26106 26107 24111 +3 23769 23506 24322 +3 24769 23769 24322 +3 24496 23769 24769 +3 24286 24496 24769 +3 25202 25919 22779 +3 22857 25202 22779 +3 25202 24496 24286 +3 25919 25202 24286 +3 24029 24877 26103 +3 23506 25316 24111 +3 25388 24877 24029 +3 25357 26085 21628 +3 24014 25388 24015 +3 25529 25388 24029 +3 17819 23882 17321 +3 23527 24388 26064 +3 23602 23616 24677 +3 25709 25661 24416 +3 25920 24866 22661 +3 24484 23550 21815 +3 21660 24329 23314 +3 13051 23552 26228 +3 25798 24102 23504 +3 25781 25798 23504 +3 24328 24894 24577 +3 24101 24079 22291 +3 16920 13274 24686 +3 24980 26093 26092 +3 33264 33373 33263 +3 22779 20886 24700 +3 21327 26499 21417 +3 35696 35850 19103 +3 24211 3077 13317 +3 14076 13524 12366 +3 24378 25029 24017 +3 23605 20887 24076 +3 20887 24074 24076 +3 25885 26027 26026 +3 29957 19425 21239 +3 24190 23827 25937 +3 20680 24190 25937 +3 25399 23610 24232 +3 23700 23610 25399 +3 21449 25391 21538 +3 34805 34804 34676 +3 24696 21983 20658 +3 23811 21160 20033 +3 23754 24186 25633 +3 23874 20494 24969 +3 26058 23336 24535 +3 25033 24128 21451 +3 24694 25301 24816 +3 24979 26108 26109 +3 24685 24684 22198 +3 33330 33439 33329 +3 21629 25400 25542 +3 6533 26112 12446 +3 1451 25594 1796 +3 23568 30764 24570 +3 351 23997 23938 +3 24810 25770 12997 +3 20738 23235 12445 +3 26094 23631 23628 +3 26458 26555 26554 +3 23252 20986 24049 +3 23914 26094 23628 +3 22175 24751 26260 +3 33310 33309 33204 +3 22463 13146 13110 +3 22175 25677 25819 +3 15237 23637 15364 +3 25677 24258 24023 +3 26144 736 735 +3 1426 1775 25870 +3 24751 22175 25819 +3 9525 4018 9524 +3 24258 24660 25378 +3 25819 25677 24023 +3 11980 7872 11896 +3 21691 25789 25808 +3 24023 24258 25378 +3 24699 24711 25912 +3 16150 25783 24410 +3 25477 24739 22386 +3 25096 28253 21376 +3 21913 25568 25569 +3 24264 25634 23776 +3 23461 24893 24312 +3 21722 21913 25569 +3 22977 9690 24986 +3 11751 22385 22482 +3 25733 25734 25875 +3 26018 26019 26160 +3 25530 23992 12623 +3 24268 21720 23550 +3 21358 25773 25772 +3 25772 25773 13555 +3 25961 23551 25814 +3 20982 21065 23903 +3 25012 20740 26204 +3 24576 24722 21795 +3 24721 9085 12639 +3 24602 23267 24722 +3 24262 11670 11595 +3 20740 25250 24268 +3 25683 25684 20744 +3 24263 24262 11595 +3 23579 24262 24263 +3 20744 23579 24263 +3 33732 33866 33731 +3 11670 21816 21817 +3 25731 25873 25872 +3 25602 17080 16916 +3 25783 26074 24410 +3 34274 34412 34273 +3 25064 25065 25110 +3 20758 25116 12903 +3 18194 35122 17945 +3 24263 11595 23790 +3 25779 25793 26110 +3 23839 6272 170 +3 20973 440 20974 +3 14558 11569 13695 +3 26239 21539 25781 +3 25618 21539 26239 +3 11697 13597 14765 +3 25466 25609 25608 +3 26230 24978 24560 +3 26172 26173 26313 +3 12866 24047 12865 +3 25601 25743 25742 +3 24932 24933 25937 +3 23827 24932 25937 +3 19986 23700 25399 +3 24113 25486 25475 +3 25391 25096 25637 +3 26188 26187 26045 +3 24106 24696 24580 +3 26299 26300 25492 +3 23653 24202 23874 +3 23864 23794 25686 +3 24136 24378 24017 +3 25434 21887 20140 +3 25634 24263 23790 +3 11595 21817 21445 +3 24866 24184 22661 +3 22200 25382 22105 +3 24619 25380 24714 +3 24512 24619 24714 +3 24928 24929 25493 +3 23810 24047 23527 +3 15860 26054 26053 +3 24678 24698 25910 +3 3600 25733 25732 +3 3799 21605 24130 +3 23411 21691 25671 +3 12692 12693 12782 +3 23602 24677 24645 +3 35651 35833 35823 +3 21245 21159 20223 +3 23591 23602 24645 +3 25939 26251 13792 +3 22628 25672 24391 +3 19987 24602 24576 +3 2903 25939 13792 +3 35818 35513 35665 +3 23992 20861 26105 +3 24687 24688 24902 +3 22487 23758 22106 +3 23776 21355 20841 +3 23971 23970 23911 +3 20841 21355 24353 +3 24983 23776 20841 +3 21355 25194 24353 +3 25826 23556 25827 +3 30346 35610 35533 +3 24329 24408 23314 +3 24340 21660 24424 +3 12357 23608 24465 +3 26331 24902 25719 +3 25882 26024 26023 +3 7073 10623 35758 +3 25098 23503 26258 +3 25568 25280 25279 +3 15201 16166 19984 +3 23524 21515 23881 +3 26215 22482 23730 +3 26236 26215 23730 +3 24192 26215 26236 +3 24193 24192 26236 +3 31042 31043 31104 +3 24379 25377 24193 +3 34136 34274 34135 +3 25254 4780 21158 +3 34136 34135 33999 +3 20587 24233 20586 +3 29947 23240 21408 +3 3977 1679 5722 +3 26150 26008 5722 +3 32141 32241 32140 +3 24645 25867 25866 +3 5195 1261 10869 +3 25902 26044 26043 +3 25901 25902 26043 +3 24097 24979 25031 +3 25851 2262 4536 +3 25569 25568 25279 +3 26290 23764 21234 +3 33865 33864 33730 +3 13719 15813 13621 +3 20923 23634 25925 +3 26215 11751 22482 +3 25023 23791 20222 +3 25632 26102 23591 +3 24409 23428 25964 +3 13237 13236 13142 +3 13623 24524 13624 +3 24388 12774 26064 +3 25598 17247 17246 +3 23734 24923 24897 +3 23733 23734 24897 +3 24923 26010 26009 +3 24897 24923 26009 +3 26044 26186 26185 +3 26043 26044 26185 +3 26186 26327 26326 +3 24319 24326 25588 +3 24620 24326 24319 +3 25588 25618 26239 +3 21539 25798 25781 +3 25750 25751 25892 +3 25893 26035 26034 +3 26314 20887 23605 +3 26030 26031 26172 +3 25600 25601 25742 +3 25743 25885 25884 +3 24932 24697 24933 +3 23919 23856 26111 +3 24107 24113 25475 +3 25486 23532 23824 +3 16003 16004 16145 +3 33484 33485 33603 +3 24452 21160 23811 +3 25733 25875 25874 +3 25642 25102 25643 +3 24449 24725 24445 +3 26105 26106 25316 +3 25325 25326 25680 +3 26198 26141 24999 +3 12355 22758 15050 +3 24866 25769 25068 +3 25602 25601 17080 +3 2651 4785 336 +3 12213 11959 14269 +3 35493 35504 35477 +3 22486 25478 22485 +3 736 26144 737 +3 15535 15670 15534 +3 12193 3799 12006 +3 15603 12193 12006 +3 2006 24505 1063 +3 22003 20922 3988 +3 21153 29957 21239 +3 33882 33881 33747 +3 23505 23512 24572 +3 16922 22628 21159 +3 24027 25220 24534 +3 12251 24943 20152 +3 24211 13317 29399 +3 34678 34806 34677 +3 24575 25799 25796 +3 25617 16149 25759 +3 2819 25074 30794 +3 24613 12823 14074 +3 24848 23705 23606 +3 8027 12103 12022 +3 24879 25168 21423 +3 33371 33372 33484 +3 26010 20742 20843 +3 24851 24590 24072 +3 26009 26010 20843 +3 25579 24256 20843 +3 20742 25579 20843 +3 2234 25651 24080 +3 24474 23515 23791 +3 25344 25998 25345 +3 24658 25442 15873 +3 23782 24492 24873 +3 17321 23882 20679 +3 15446 19984 15447 +3 33736 33735 33608 +3 26191 26190 26048 +3 15201 3474 16166 +3 23730 22482 25195 +3 22482 25494 25195 +3 12334 12249 12335 +3 25195 25494 24834 +3 24684 24687 25662 +3 23656 13089 25080 +3 24356 21725 4254 +3 22777 22007 26703 +3 33760 33759 33632 +3 23712 24922 12508 +3 23996 24056 24055 +3 23995 23996 24055 +3 24056 24115 24114 +3 24055 24056 24114 +3 24115 24177 24176 +3 24114 24115 24176 +3 24250 24249 24176 +3 24177 24250 24176 +3 6999 35190 7000 +3 24250 24333 24249 +3 35700 35491 1022 +3 12774 12685 12686 +3 24873 23728 23502 +3 23630 23629 25375 +3 25905 25904 25762 +3 26260 24997 25217 +3 15591 25094 12271 +3 25249 21822 23673 +3 20743 25634 24264 +3 25795 23826 25793 +3 24775 20988 24256 +3 25250 24194 24268 +3 25579 24775 24256 +3 23685 25355 20988 +3 24775 23685 20988 +3 26185 26186 26326 +3 26327 23863 26060 +3 26326 26327 26060 +3 24466 24620 19988 +3 24191 24414 23717 +3 21631 24620 24319 +3 24326 25618 25588 +3 25892 25893 26034 +3 26177 26318 26317 +3 26035 26177 26176 +3 26034 26035 26176 +3 26173 26314 26313 +3 25889 26031 26030 +3 25884 25885 26026 +3 26027 26169 26168 +3 23978 23919 26111 +3 25090 23919 23978 +3 25475 25486 23824 +3 23532 24954 24832 +3 17819 23517 18359 +3 24134 23689 25212 +3 25732 25733 25874 +3 25875 26017 26016 +3 23552 23548 26198 +3 26224 23552 26198 +3 20763 22583 25375 +3 25927 20738 25929 +3 12105 25929 20140 +3 25929 25434 20140 +3 14850 24693 24694 +3 22201 25780 25679 +3 3450 24821 15470 +3 24821 13010 15470 +3 24502 10978 12026 +3 24748 20925 25956 +3 21605 25098 24839 +3 21821 24070 24071 +3 24130 21605 24839 +3 25098 26258 12354 +3 25061 25060 12801 +3 25024 23571 13460 +3 2300 19386 2434 +3 24476 20094 26101 +3 13627 13528 13529 +3 24976 24980 26092 +3 22631 22630 23416 +3 26330 26331 25719 +3 12006 3799 24130 +3 16166 25712 24764 +3 15152 12728 9415 +3 24872 25501 25357 +3 16463 24006 24005 +3 20269 20355 20354 +3 26022 26164 26163 +3 25068 11770 21635 +3 26224 26228 23552 +3 21267 21448 25029 +3 23863 25048 24799 +3 25724 25725 13555 +3 23615 23570 25355 +3 24289 24317 21450 +3 23685 23615 25355 +3 25056 25055 23570 +3 23615 25056 23570 +3 23518 26099 25055 +3 25056 23518 25055 +3 24547 20827 20826 +3 23969 23749 23966 +3 14405 14388 14389 +3 15601 16922 16024 +3 26060 23863 24799 +3 25953 23728 24873 +3 25791 22390 22487 +3 19765 23942 24000 +3 25672 23611 24463 +3 25632 23591 23588 +3 25048 24083 24084 +3 25494 25370 24834 +3 25306 25385 25445 +3 20666 25167 25950 +3 24799 25048 24084 +3 26008 2147 2019 +3 35867 35550 30423 +3 34029 34028 33893 +3 23938 23997 23996 +3 32120 32220 32219 +3 23997 24057 24056 +3 23996 23997 24056 +3 24057 24116 24115 +3 24056 24057 24115 +3 24116 24178 24177 +3 24115 24116 24177 +3 24251 24250 24177 +3 24178 24251 24177 +3 24334 24333 24250 +3 24251 24334 24250 +3 24418 24417 24333 +3 24334 24418 24333 +3 24258 13091 21 +3 24418 24505 24417 +3 24748 25956 23983 +3 24550 24770 7759 +3 25863 23745 25661 +3 23806 12087 21005 +3 25174 25173 26099 +3 23518 25174 26099 +3 25284 25285 25173 +3 25065 25430 25110 +3 20353 23812 20438 +3 25753 25895 25894 +3 24466 19988 24519 +3 17576 30634 24228 +3 24432 24519 29422 +3 24620 21631 19988 +3 26176 26177 26317 +3 23561 24436 24146 +3 26318 23561 24127 +3 26317 26318 24127 +3 25746 25747 25888 +3 25605 25747 25746 +3 25888 25889 26030 +3 26031 26173 26172 +3 26026 26027 26168 +3 26169 26310 26309 +3 24984 25090 23978 +3 23872 25090 24984 +3 25544 24681 24680 +3 24232 25544 24680 +3 21449 21538 24626 +3 24998 24134 25857 +3 25874 25875 26016 +3 26017 26159 26158 +3 25396 20743 24264 +3 26032 26033 26174 +3 12445 12106 25434 +3 25929 12445 25434 +3 25680 25375 24244 +3 24515 25680 24244 +3 25815 24852 25477 +3 26204 23550 24484 +3 15050 24821 3450 +3 23965 15050 3450 +3 25026 21055 23657 +3 24880 24881 25452 +3 32902 33010 32901 +3 25025 21821 24605 +3 12354 26258 23645 +3 24839 25098 12354 +3 25022 25024 13460 +3 21700 24008 13460 +3 26100 24476 26101 +3 24476 24026 20094 +3 24395 25025 24396 +3 21821 24590 24605 +3 16442 25469 16594 +3 14344 25946 25945 +3 1775 1426 499 +3 12982 12981 12889 +3 23758 25221 22562 +3 24381 20985 21070 +3 19993 25940 25503 +3 23981 24041 23849 +3 10099 9639 12224 +3 20320 22729 21396 +3 11800 35565 35686 +3 23808 23864 21509 +3 20841 24353 25923 +3 11725 21305 29021 +3 25813 25671 23867 +3 25592 25734 25733 +3 24083 25296 25156 +3 24600 25813 23867 +3 25174 25284 25173 +3 25294 24674 23773 +3 25645 25644 25284 +3 25284 25644 25285 +3 24604 24724 26074 +3 24084 24083 25156 +3 25115 23724 23622 +3 23638 20353 24052 +3 25486 25488 23532 +3 13364 23836 25156 +3 25296 13364 25156 +3 23829 23916 24269 +3 24238 22103 22102 +3 24003 12643 23836 +3 3977 1678 1679 +3 23956 29081 23955 +3 33158 33157 33052 +3 24683 12715 24685 +3 25502 25221 22390 +3 12103 23634 20923 +3 3207 580 16547 +3 12103 8027 5195 +3 23999 23998 16944 +3 13524 11692 35539 +3 11692 13524 14076 +3 23998 24058 24057 +3 23997 23998 24057 +3 24058 24117 24116 +3 24057 24058 24116 +3 24117 24179 24178 +3 24116 24117 24178 +3 24179 24252 24251 +3 24178 24179 24251 +3 24252 24335 24334 +3 24251 24252 24334 +3 24419 24418 24334 +3 24335 24419 24334 +3 24506 24505 24418 +3 24419 24506 24418 +3 13753 13152 13151 +3 24506 24613 24505 +3 13364 24003 23836 +3 25205 12443 25344 +3 24612 24623 25821 +3 24279 25532 14839 +3 11752 24280 24363 +3 24049 22448 16920 +3 26004 25860 22645 +3 25381 25969 23504 +3 23707 23529 24460 +3 24102 25381 23504 +3 35692 35769 35849 +3 21 126 24660 +3 25238 24129 13957 +3 25640 25978 25036 +3 24127 23561 24146 +3 24968 25238 13957 +3 24436 25238 24968 +3 24146 24436 24968 +3 26179 26180 26320 +3 22463 24128 19902 +3 25604 25605 25746 +3 25747 25889 25888 +3 26168 26169 26309 +3 12996 24441 14850 +3 26310 12996 24963 +3 26309 26310 24963 +3 24743 23872 24984 +3 24152 24153 25505 +3 24936 24937 24680 +3 24681 24936 24680 +3 23689 24626 25212 +3 24331 24998 20661 +3 24580 24696 20658 +3 21983 12187 24028 +3 25089 24594 26570 +3 23934 24218 26077 +3 12106 21699 21887 +3 25434 12106 21887 +3 23629 24017 24311 +3 14840 24690 25962 +3 22004 22099 24267 +3 1679 26152 26151 +3 26070 23922 24461 +3 23499 26070 24461 +3 22974 25026 26238 +3 25251 25198 23276 +3 24819 24818 22348 +3 25823 25383 23680 +3 26258 24027 23645 +3 11979 21672 11717 +3 23571 21700 13460 +3 24493 23697 24008 +3 7080 17573 23239 +3 25095 23520 11943 +3 25665 26078 24399 +3 10363 9120 1993 +3 4553 4552 13366 +3 21234 23958 12193 +3 24368 24475 24313 +3 26093 21543 23849 +3 23702 25791 22487 +3 21159 22628 20223 +3 25017 25024 23363 +3 24382 24611 20823 +3 11701 12479 6008 +3 20512 20595 20594 +3 25686 26067 26210 +3 26067 25063 25062 +3 4243 1 2397 +3 24173 24946 24259 +3 24487 24607 24477 +3 2017 1658 1541 +3 4530 3993 26251 +3 13341 13436 21727 +3 24598 25804 25802 +3 24005 24065 2922 +3 20508 20509 20590 +3 12889 12890 24405 +3 24003 23696 25811 +3 25883 25884 26025 +3 21908 21005 15585 +3 25818 23547 23545 +3 24047 12866 24388 +3 32839 32838 32726 +3 24732 10265 11568 +3 7073 9652 13581 +3 25502 25920 22661 +3 23856 24502 24190 +3 25876 25877 26018 +3 25957 24323 25376 +3 26153 1679 1678 +3 22682 25502 22390 +3 23915 12624 25037 +3 2019 5722 26008 +3 26307 21180 12360 +3 24396 24605 24527 +3 26162 26303 26302 +3 25194 25638 25655 +3 32251 22246 29687 +3 12643 24003 25811 +3 23999 24059 24058 +3 23998 23999 24058 +3 24059 24118 24117 +3 24058 24059 24117 +3 24118 24180 24179 +3 24117 24118 24179 +3 24253 24252 24179 +3 24180 24253 24179 +3 24336 24335 24252 +3 24253 24336 24252 +3 24420 24419 24335 +3 24336 24420 24335 +3 24507 24506 24419 +3 24420 24507 24419 +3 24507 24614 24613 +3 24506 24507 24613 +3 21954 35766 20901 +3 17398 17486 17397 +3 23696 23767 23713 +3 25334 13893 25333 +3 14395 16701 16547 +3 25468 25469 25611 +3 25926 24549 21699 +3 24444 25709 24416 +3 25567 25581 22298 +3 25674 25711 11942 +3 23348 25679 25630 +3 37 26251 10578 +3 25441 25244 25229 +3 22298 23348 25630 +3 24564 24382 24381 +3 23492 25441 25229 +3 16755 25605 16914 +3 24501 24384 23647 +3 23486 23543 24568 +3 16913 16755 16914 +3 24963 12996 14850 +3 24663 24131 24693 +3 24441 23850 24693 +3 14850 24441 24693 +3 24153 25506 25505 +3 23706 26229 24053 +3 25506 23872 24743 +3 25505 25506 24743 +3 25317 25180 24937 +3 24936 25317 24937 +3 24134 25212 25857 +3 12252 24331 23701 +3 20658 21983 24028 +3 12187 24982 25233 +3 13528 13627 13626 +3 25246 23934 24756 +3 32504 32503 32398 +3 35254 35251 34362 +3 24442 14840 25962 +3 23493 14840 24442 +3 25036 25106 23632 +3 24511 2234 25862 +3 24241 11107 22683 +3 32857 32856 32744 +3 24590 21821 24071 +3 25227 25229 23977 +3 24406 24416 25660 +3 25661 23745 24389 +3 12339 23604 25920 +3 23853 14870 14869 +3 21700 24493 24008 +3 3197 13386 12034 +3 17307 25120 24038 +3 24135 24136 23630 +3 24086 26287 26255 +3 22974 26238 24389 +3 13365 21234 12193 +3 23958 12269 3799 +3 26092 26093 23849 +3 7759 23947 23661 +3 24944 25455 25072 +3 25502 12339 25920 +3 22011 25153 24657 +3 24142 12997 26718 +3 25003 13142 13049 +3 25469 25612 25611 +3 35461 35648 35392 +3 25681 24497 25165 +3 25491 25230 23703 +3 1998 9314 25165 +3 25444 25241 25443 +3 25429 25306 12443 +3 24140 25771 24857 +3 24046 25429 12443 +3 31298 31365 31297 +3 25115 25253 23724 +3 25289 24013 24074 +3 25811 23696 23713 +3 23526 23991 23870 +3 33731 33865 33730 +3 25043 25280 29966 +3 1680 15152 23787 +3 25861 24610 25973 +3 20761 23599 25574 +3 35339 34495 35338 +3 4773 4100 189 +3 25637 24740 21008 +3 4552 26148 26289 +3 25221 25502 22661 +3 25911 24189 24619 +3 24353 6644 25513 +3 25422 25149 22959 +3 3041 22440 2609 +3 26150 26291 26290 +3 32095 32195 32094 +3 20027 22530 22878 +3 22762 23527 26065 +3 25919 25023 20886 +3 26061 25635 21871 +3 31109 31110 31172 +3 33486 33485 33372 +3 24000 24060 24059 +3 23999 24000 24059 +3 24060 24119 24118 +3 24059 24060 24118 +3 24181 24180 24118 +3 24119 24181 24118 +3 24254 24253 24180 +3 24181 24254 24180 +3 24337 24336 24253 +3 24254 24337 24253 +3 24421 24420 24336 +3 24337 24421 24336 +3 24421 24508 24507 +3 24420 24421 24507 +3 24508 24615 24614 +3 24507 24508 24614 +3 15719 15584 15585 +3 30765 17888 24137 +3 31995 32095 31994 +3 34327 34465 6882 +3 25240 25241 30816 +3 35356 14088 30214 +3 25090 25211 23919 +3 22684 25323 24241 +3 25121 25259 25258 +3 24988 25121 11381 +3 21514 25392 21424 +3 27899 27900 21514 +3 23460 23536 21071 +3 25244 23754 7003 +3 23079 23460 14561 +3 23536 23535 21071 +3 23079 14561 23877 +3 23927 23079 23877 +3 23850 24663 24693 +3 23460 21071 14561 +3 23927 23877 24131 +3 24663 23927 24131 +3 24320 26237 22882 +3 23706 24053 24344 +3 26229 24153 24152 +3 26057 26229 24152 +3 25498 25642 25180 +3 25498 23980 25642 +3 25317 25498 25180 +3 23980 25102 25642 +3 24998 25857 20661 +3 12252 23701 24905 +3 24028 12187 25233 +3 24982 12272 21982 +3 24218 24219 26675 +3 23578 23542 24756 +3 11838 24395 23732 +3 23764 13268 23964 +3 12356 23493 24442 +3 26295 23493 12356 +3 15050 20822 24821 +3 24689 22876 13010 +3 26151 26292 26291 +3 20357 24906 20356 +3 25533 25537 14252 +3 24070 24856 23557 +3 25660 25661 24389 +3 22662 22760 22294 +3 24215 22367 12995 +3 19570 24855 24230 +3 15873 732 12034 +3 26323 26324 22003 +3 26050 26192 26049 +3 33748 33882 33747 +3 23699 25019 24868 +3 13852 21065 1262 +3 25094 12270 12271 +3 25198 24843 23276 +3 25493 11233 22078 +3 23801 22199 24875 +3 24649 20593 20594 +3 20593 24649 20592 +3 25442 14793 732 +3 20586 24233 14911 +3 35792 35913 35691 +3 23849 24041 24042 +3 14143 13767 14374 +3 17607 17702 17606 +3 32794 32906 32793 +3 24619 24189 25380 +3 24837 23920 24807 +3 24808 24946 24173 +3 23731 24297 25636 +3 25528 24316 12252 +3 24625 24642 24473 +3 23731 25636 24473 +3 23724 24625 24473 +3 15449 15448 15321 +3 10869 23634 12103 +3 26259 25164 24986 +3 35383 35608 35375 +3 23729 12799 24752 +3 30779 25310 25725 +3 24754 24484 24588 +3 25294 15536 15535 +3 22386 24739 26207 +3 25455 23363 25072 +3 20018 25425 25424 +3 26081 20018 25424 +3 25741 25883 25882 +3 24891 23860 24890 +3 23701 20661 25215 +3 23672 25396 24265 +3 25088 26206 26063 +3 25512 25520 24103 +3 25728 25626 26113 +3 22646 26089 26231 +3 13748 13846 13747 +3 23942 24001 24000 +3 8050 20432 330 +3 24061 24060 24000 +3 24001 24061 24000 +3 24120 24119 24060 +3 24061 24120 24060 +3 24182 24181 24119 +3 24061 29415 24120 +3 24255 24254 24181 +3 24120 24182 24119 +3 24338 24337 24254 +3 24255 24338 24254 +3 24422 24421 24337 +3 24338 24422 24337 +3 24509 24508 24421 +3 24422 24509 24421 +3 24509 24616 24615 +3 24508 24509 24615 +3 24616 24736 24735 +3 24615 24616 24735 +3 24736 24861 24860 +3 24735 24736 24860 +3 24861 24989 24988 +3 24860 24861 24988 +3 24989 25122 25121 +3 24988 24989 25121 +3 25122 25260 25259 +3 25121 25122 25259 +3 12169 24605 24851 +3 11834 27299 27416 +3 1520 23976 24320 +3 12023 24042 23982 +3 13330 22270 22175 +3 25261 27957 25260 +3 26286 24721 25670 +3 25868 26248 24291 +3 26237 23722 22882 +3 35714 35394 35941 +3 24428 23706 24344 +3 11974 8483 12141 +3 25165 3036 25681 +3 26229 26057 24053 +3 24901 24559 25102 +3 25429 23809 25306 +3 23980 24901 25102 +3 33999 34135 33998 +3 23892 25368 25307 +3 23892 25307 12270 +3 25368 12252 24905 +3 24331 20661 23701 +3 25233 24982 21982 +3 12272 24166 22978 +3 23934 26077 24756 +3 25252 24361 23578 +3 30070 22494 30202 +3 24497 25491 1998 +3 26294 26295 12356 +3 26154 26295 26294 +3 24821 24689 13010 +3 22876 22079 21794 +3 24679 25943 24788 +3 23498 21911 21534 +3 21606 21982 22202 +3 20517 24293 24893 +3 23873 25198 25251 +3 28625 24144 25390 +3 26306 26307 12360 +3 21180 23949 24016 +3 9746 21668 21914 +3 13528 23733 24897 +3 23977 7003 10978 +3 24689 25962 22876 +3 25890 26032 26031 +3 25512 24103 24044 +3 23577 23778 29019 +3 25741 25742 25883 +3 22684 24241 22683 +3 24171 25776 11107 +3 29123 22543 22158 +3 30990 30989 30931 +3 25003 13049 26228 +3 21538 25637 21008 +3 2656 10807 14288 +3 35646 35596 35423 +3 26718 12997 25770 +3 12745 3197 3036 +3 9402 8580 14232 +3 23613 12444 23617 +3 24651 20414 20413 +3 3799 12269 21605 +3 25035 22493 25115 +3 22493 25253 25115 +3 23664 22591 23276 +3 24200 3450 12625 +3 25938 24776 23653 +3 20752 25112 20753 +3 23790 11595 21445 +3 24269 26203 23829 +3 25675 11771 24741 +3 21817 25924 25638 +3 21445 21817 25638 +3 4110 6385 23871 +3 24502 12026 24190 +3 24868 25328 25327 +3 12006 24130 26261 +3 20825 24662 20904 +3 24930 25228 25432 +3 20906 24781 20825 +3 29831 25425 29962 +3 24628 24437 25448 +3 24891 24890 12804 +3 13458 29160 29297 +3 26189 26190 26330 +3 25671 21691 24900 +3 25924 25818 24235 +3 30506 25578 25577 +3 31593 31688 31592 +3 31300 31299 31234 +3 24293 22368 24893 +3 24062 24061 24001 +3 31235 31300 31234 +3 24121 24061 24062 +3 24062 24063 19304 +3 23889 23546 23833 +3 23536 23889 23833 +3 23546 24527 24540 +3 24527 24607 24540 +3 31506 31593 31505 +3 24527 12169 12168 +3 23655 24531 11942 +3 6902 24138 24403 +3 26834 26950 11594 +3 24607 24527 12168 +3 24617 24616 24509 +3 35702 35558 35786 +3 24617 24737 24736 +3 24616 24617 24736 +3 24737 24862 24861 +3 24736 24737 24861 +3 24862 24990 24989 +3 24861 24862 24989 +3 25123 25122 24989 +3 24990 25123 24989 +3 25261 25260 25122 +3 25123 25261 25122 +3 2952 24344 24758 +3 25262 25405 25404 +3 26109 12189 23428 +3 24053 25206 24758 +3 25739 25881 25880 +3 23818 28216 24346 +3 25596 25597 25738 +3 23877 25197 25301 +3 25593 1796 25594 +3 25063 25064 23719 +3 20747 23592 20748 +3 24721 13366 9085 +3 12276 25298 20408 +3 25473 23920 24837 +3 20141 24820 24523 +3 20408 20141 24523 +3 25393 12025 12270 +3 25094 25393 12270 +3 12025 23892 12270 +3 25368 24905 25307 +3 21982 12272 22978 +3 23759 23815 25352 +3 25367 25352 22978 +3 24166 25367 22978 +3 23542 25246 24756 +3 23760 24361 25252 +3 25323 25324 24528 +3 18045 19001 4686 +3 26153 26154 26294 +3 26012 26154 26153 +3 24073 23805 23799 +3 13010 22876 21794 +3 12169 24851 21540 +3 21972 28879 25914 +3 26096 24405 23729 +3 27553 23322 26506 +3 24842 24144 24482 +3 20661 22486 25215 +3 24078 24534 23781 +3 25426 22289 23781 +3 24550 23803 24577 +3 24816 25300 24695 +3 20354 23812 20353 +3 22105 22198 22104 +3 24693 24131 24694 +3 24967 20842 24978 +3 24313 24143 24842 +3 24452 24366 21160 +3 24241 24171 11107 +3 24859 24757 25776 +3 5555 23239 6280 +3 26083 21447 24603 +3 25191 28216 23818 +3 20681 22367 20599 +3 24189 24713 25380 +3 21060 24260 23704 +3 28070 14358 13754 +3 8230 35546 27520 +3 23932 25008 25157 +3 20221 23932 25157 +3 24805 24763 23979 +3 24804 24805 23979 +3 25470 25464 24089 +3 24095 25470 24089 +3 28347 24112 25462 +3 26622 26518 11464 +3 26255 23566 24371 +3 26077 23731 24642 +3 18518 18421 22056 +3 15812 24358 13621 +3 14558 14649 7917 +3 25184 12966 13060 +3 35640 35865 35464 +3 9276 2775 9389 +3 26966 17457 13223 +3 25939 2903 10758 +3 25222 24101 21358 +3 25327 25328 21778 +3 24307 26101 24308 +3 24659 24962 24944 +3 25813 24494 23411 +3 23753 24679 25201 +3 24124 24123 24855 +3 25225 25068 21635 +3 23738 23734 24524 +3 24460 22781 23780 +3 24278 23738 24524 +3 23738 24924 24923 +3 23734 23738 24923 +3 24924 26011 26010 +3 25019 25329 25328 +3 24099 24096 25589 +3 31593 31592 31505 +3 26202 25584 24112 +3 23535 23536 23833 +3 23546 24540 23833 +3 24474 21515 23524 +3 25023 24474 23791 +3 1537 22530 20027 +3 24584 1537 20027 +3 25788 25931 26001 +3 23837 26261 26121 +3 26081 25424 25281 +3 31506 31505 31433 +3 25958 24729 26100 +3 25925 23594 26102 +3 25827 25534 24257 +3 25374 24547 24543 +3 25280 25568 30229 +3 24987 24999 26140 +3 2807 24737 24617 +3 24737 24738 24862 +3 24991 24990 24862 +3 24863 24991 24862 +3 24991 25124 25123 +3 24990 24991 25123 +3 25124 25262 25261 +3 25123 25124 25261 +3 25405 25406 12691 +3 25261 25262 25404 +3 20679 24780 24740 +3 23980 24277 24901 +3 24705 25154 21246 +3 25637 20679 24740 +3 21246 13560 24943 +3 13560 25210 24943 +3 24943 25210 12276 +3 25210 25298 12276 +3 24820 25393 25094 +3 25298 20141 20408 +3 25641 23674 24357 +3 24523 24820 25094 +3 25641 24357 26201 +3 24283 25641 26201 +3 24283 26201 25485 +3 23674 24629 24357 +3 25367 23759 25352 +3 22485 24283 25485 +3 22485 25485 23815 +3 23759 22485 23815 +3 35819 35641 35503 +3 31560 26612 26723 +3 25363 23760 25252 +3 24361 23542 23578 +3 24377 21181 24378 +3 21793 22172 23913 +3 25610 25611 25752 +3 21276 27382 21366 +3 25689 25547 24439 +3 23711 30233 25571 +3 24867 25318 25547 +3 25689 24867 25547 +3 2545 23322 24668 +3 24867 23322 25318 +3 24325 23924 24133 +3 25959 22295 23537 +3 25958 26100 23723 +3 23780 25426 23781 +3 25515 23492 24561 +3 24561 23492 25227 +3 11975 24656 4381 +3 35374 30621 19936 +3 12799 23729 12798 +3 20158 20073 20159 +3 22196 24313 9635 +3 24143 24144 24842 +3 24171 24859 25776 +3 24859 25957 23986 +3 29494 35484 35388 +3 20263 23516 25097 +3 25029 25030 24077 +3 24017 25029 24077 +3 26091 26092 12023 +3 24302 24631 24632 +3 23592 20749 20748 +3 26233 22493 25035 +3 24763 23932 20221 +3 23979 24763 20221 +3 24259 24387 24899 +3 23057 24259 24899 +3 25150 24947 25069 +3 24387 26213 26214 +3 25150 25787 24947 +3 24940 25150 25069 +3 25787 25103 25788 +3 25103 24970 25788 +3 17822 495 381 +3 25609 25751 25750 +3 24923 24924 26010 +3 24147 20742 26010 +3 26011 24147 26010 +3 25436 25579 20742 +3 24674 15535 15534 +3 23671 23674 25641 +3 24494 25955 22395 +3 25626 21453 7930 +3 24745 23779 25656 +3 23375 23471 23374 +3 23858 25422 24290 +3 22395 25791 23702 +3 24611 23583 20823 +3 23506 12623 25316 +3 24147 25436 20742 +3 23792 24775 25579 +3 25436 23792 25579 +3 25481 21159 23860 +3 23683 23685 24775 +3 24729 24476 26100 +3 31367 31366 31299 +3 23541 20414 20500 +3 21794 24925 13461 +3 24293 24221 22368 +3 24958 26681 26680 +3 31369 31436 31368 +3 5090 19767 4954 +3 25236 26234 25777 +3 24470 11941 24281 +3 26069 24582 24734 +3 25777 24470 24281 +3 22389 22293 24734 +3 25479 26069 24734 +3 24907 23648 22293 +3 24582 22389 24734 +3 19984 16166 24764 +3 22389 24907 22293 +3 25792 26796 25340 +3 23604 24222 24618 +3 24907 25340 23648 +3 24186 26003 24876 +3 24863 28996 24864 +3 24862 24738 24863 +3 24992 25125 25124 +3 24991 24992 25124 +3 25125 25263 25262 +3 25124 25125 25262 +3 31173 31237 31236 +3 25262 25263 25405 +3 21915 24216 25372 +3 25096 20679 25637 +3 24780 23882 12450 +3 29019 23778 28884 +3 24742 24829 23490 +3 23580 21627 24140 +3 21093 24742 22009 +3 24829 24140 23490 +3 21093 22009 24629 +3 23674 21093 24629 +3 24970 30809 19477 +3 24742 23490 22009 +3 24568 23794 23864 +3 24381 24382 20985 +3 24149 24152 25490 +3 35842 29685 35829 +3 23617 23887 25067 +3 20747 20746 23760 +3 23981 24568 23864 +3 23794 24315 25686 +3 24001 23942 20200 +3 24604 23649 25032 +3 25110 24921 24920 +3 24087 24054 25183 +3 24810 12997 21267 +3 23619 23969 25676 +3 25689 24439 15026 +3 24439 22235 201 +3 25303 25689 15026 +3 23775 25303 15026 +3 24730 24867 25689 +3 25303 24730 25689 +3 31107 31108 31170 +3 24730 24668 24867 +3 25426 25005 23554 +3 25005 24896 23554 +3 22289 25426 23554 +3 24896 23723 23554 +3 24138 14969 23250 +3 21728 22447 24402 +3 22367 24124 12995 +3 24626 21538 23671 +3 336 23620 23991 +3 25294 23773 23766 +3 23857 25519 9635 +3 24313 24842 9635 +3 24757 24859 23986 +3 25957 25376 24104 +3 25236 25777 16597 +3 24934 24935 20017 +3 21448 21357 25030 +3 25029 21448 25030 +3 24690 24691 25535 +3 14273 20738 25927 +3 20738 12445 25929 +3 25535 14273 25927 +3 25470 24538 25360 +3 25464 25470 25360 +3 24899 24387 26214 +3 26213 24940 25069 +3 23240 24007 23142 +3 25594 25736 25735 +3 23579 215 24262 +3 24288 25567 25566 +3 22562 24185 24123 +3 215 24261 24262 +3 25117 24668 24730 +3 23871 336 23991 +3 23792 23683 24775 +3 9746 21914 23762 +3 24347 23615 23685 +3 23683 24347 23685 +3 25057 25056 23615 +3 12419 23712 12508 +3 21159 21245 23860 +3 14521 2267 827 +3 25087 25790 25791 +3 20221 25157 25524 +3 26101 25449 24308 +3 31748 11458 11457 +3 24221 25034 22368 +3 24347 25057 23615 +3 26097 15405 21453 +3 24205 23518 25056 +3 25057 24205 25056 +3 24261 20815 11749 +3 25175 25174 23518 +3 25907 26049 25906 +3 20986 22448 24049 +3 16463 22846 22945 +3 32020 32120 32119 +3 12168 12169 21540 +3 24066 26685 24065 +3 25706 25849 25848 +3 16108 7004 14744 +3 31045 31046 31107 +3 28351 25133 25131 +3 11941 26069 25479 +3 24281 11941 25479 +3 24031 24091 24030 +3 12639 25713 13079 +3 24981 24984 24415 +3 20014 24774 23757 +3 23750 24433 25545 +3 24415 23978 23565 +3 24309 24895 22563 +3 28248 25038 24126 +3 22465 25038 22563 +3 21160 24199 24106 +3 25831 25973 23732 +3 7003 23754 25633 +3 30816 30817 25240 +3 31752 31858 24158 +3 24993 25126 25125 +3 24992 24993 25125 +3 25126 25264 25263 +3 25125 25126 25263 +3 31048 31110 31109 +3 31046 31045 30984 +3 35670 35740 35902 +3 25875 25876 26017 +3 33337 35866 35227 +3 31688 31687 31592 +3 21912 24404 23549 +3 6283 6284 6411 +3 26064 25066 25065 +3 23630 24136 23629 +3 25076 23177 25140 +3 24947 25788 26001 +3 24818 24039 23658 +3 24609 24458 25512 +3 24727 24039 24818 +3 24708 24727 24818 +3 20884 25524 25383 +3 24039 20884 23658 +3 25461 25463 22559 +3 25161 24727 24708 +3 24087 25463 24054 +3 22559 25161 24708 +3 27026 28350 25183 +3 25463 25161 22559 +3 23078 25084 25083 +3 25463 25461 24054 +3 25083 22980 23078 +3 31993 31992 31891 +3 22980 24321 23775 +3 23078 22980 23775 +3 23641 25303 23775 +3 24321 23641 23775 +3 25117 24730 25303 +3 23641 25117 25303 +3 31171 31235 31234 +3 19528 21062 19382 +3 25332 25331 25201 +3 30672 30673 25366 +3 24788 25332 25201 +3 24437 25431 25100 +3 23781 22289 25315 +3 13176 23781 25315 +3 25141 25142 24919 +3 23920 24808 24807 +3 24774 25294 23766 +3 23773 24976 24975 +3 23553 26056 25816 +3 23987 23553 25816 +3 23986 25957 24104 +3 25376 22102 22101 +3 16003 16145 16144 +3 9542 11409 9532 +3 23582 25093 21357 +3 21448 23582 21357 +3 14840 15739 24690 +3 24691 14273 25535 +3 25590 25732 25731 +3 13050 12957 13051 +3 24538 24805 24804 +3 25360 24538 24804 +3 26214 26213 25069 +3 25787 25788 24947 +3 11751 24983 22385 +3 23501 21984 26058 +3 24013 24967 26230 +3 14941 24055 24114 +3 23861 24034 25775 +3 26671 23597 25223 +3 25108 25378 24621 +3 25342 23861 25775 +3 9652 7073 35758 +3 20681 22106 22367 +3 24205 25175 23518 +3 13091 563 21 +3 25283 25284 25174 +3 25175 25283 25174 +3 24573 25382 22200 +3 25645 28115 28116 +3 24735 24860 35627 +3 23919 24870 23856 +3 10758 24606 25939 +3 24735 35627 12916 +3 26600 26704 22007 +3 22487 22390 23758 +3 25283 25645 25284 +3 26065 26064 25065 +3 13176 25315 24414 +3 14839 11752 24363 +3 23767 25181 24495 +3 25969 25334 22780 +3 13059 13153 13152 +3 25977 23571 25024 +3 13152 13753 13059 +3 24440 24694 24816 +3 27258 24066 24067 +3 24006 24066 24005 +3 23503 26118 26258 +3 2231 2103 16846 +3 16442 25612 25469 +3 24707 23975 24036 +3 12275 25203 24309 +3 24895 22465 22563 +3 24214 25203 24771 +3 25203 24895 24309 +3 23713 23767 24495 +3 24247 24480 24495 +3 25181 24247 24495 +3 24209 24282 24480 +3 24247 24209 24480 +3 20515 24310 24282 +3 23947 24214 12444 +3 25203 12275 24771 +3 22104 25662 26331 +3 23536 23665 23889 +3 25747 25748 25889 +3 24999 26141 26140 +3 29279 27286 27287 +3 24992 24864 24865 +3 31237 31302 31236 +3 24999 24987 23783 +3 27024 29495 35531 +3 31172 31173 31236 +3 25408 25551 25550 +3 25406 25263 25264 +3 25551 25693 25692 +3 25550 25551 25692 +3 25835 25694 25836 +3 28592 25834 25835 +3 25171 25205 25344 +3 22532 25171 25344 +3 23658 20884 25383 +3 25524 25171 22532 +3 24575 24578 25799 +3 25383 25524 22532 +3 34326 34327 6882 +3 25801 20346 23825 +3 24464 26899 26784 +3 26189 26330 26188 +3 3052 24942 2670 +3 25499 21266 28862 +3 23908 25013 24942 +3 21266 12192 3052 +3 25084 25014 25083 +3 12192 23908 24942 +3 25797 25083 25013 +3 23908 25797 25013 +3 24541 22980 25083 +3 25797 24541 25083 +3 24541 24639 24321 +3 22980 24541 24321 +3 20924 23641 24321 +3 24639 20924 24321 +3 22861 25117 23641 +3 20924 22861 23641 +3 24970 19477 25931 +3 31893 31892 31786 +3 24500 13332 10578 +3 25363 25252 25253 +3 25126 35522 35900 +3 24948 21447 26083 +3 24078 23781 13176 +3 23722 24078 13176 +3 26047 26189 26046 +3 23678 24191 24217 +3 23599 25163 25573 +3 4545 9634 12273 +3 23553 25519 23857 +3 26056 23553 23857 +3 24104 25376 22101 +3 11945 24368 22101 +3 24725 24651 20413 +3 26079 21632 21819 +3 26718 26829 24142 +3 23582 24142 25093 +3 23493 24533 14840 +3 15739 24691 24690 +3 25732 25874 25873 +3 25731 25732 25873 +3 12360 24016 4382 +3 26164 26165 26305 +3 25938 23653 24912 +3 26306 12360 24045 +3 25864 24546 21073 +3 24265 24983 11751 +3 23887 23617 23720 +3 25342 25775 25321 +3 23534 23834 23664 +3 24815 23600 23835 +3 25198 20016 24843 +3 23534 23664 24843 +3 26307 26308 21180 +3 24733 24440 23949 +3 22061 24488 23892 +3 21180 24733 23949 +3 25759 25902 25901 +3 4018 4680 14694 +3 24724 24604 25032 +3 24030 20410 23970 +3 23487 24854 23541 +3 25221 22661 22562 +3 24209 20515 24282 +3 20515 24811 24223 +3 25769 24413 11770 +3 25966 25824 23672 +3 25517 25441 23492 +3 25319 24904 24166 +3 13177 15583 15582 +3 27989 2807 24617 +3 24184 24866 25068 +3 25382 22198 22105 +3 480 481 7771 +3 34409 34546 34408 +3 13245 24749 25948 +3 24310 20515 24223 +3 24067 24007 14848 +3 24854 25115 23622 +3 24405 12982 12889 +3 14358 24203 14373 +3 24272 24707 24036 +3 29492 22002 22098 +3 23661 23947 23613 +3 24214 24771 12444 +3 24125 23618 24223 +3 24811 24125 24223 +3 24761 12995 25514 +3 23618 24125 24229 +3 25208 22881 22979 +3 25015 24579 24207 +3 12515 28008 12426 +3 25932 30818 3624 +3 35190 6999 35189 +3 21911 23730 24352 +3 11475 31018 11476 +3 25606 25748 25747 +3 31595 31690 31594 +3 24993 24994 25126 +3 25407 35900 25265 +3 31302 31301 31236 +3 25266 25409 25408 +3 25265 25266 25408 +3 25409 25552 25551 +3 25408 25409 25551 +3 25552 25694 25693 +3 25551 25552 25693 +3 25836 25695 25837 +3 25693 25694 25835 +3 25202 24726 24496 +3 26200 25772 25629 +3 25709 25720 25863 +3 24726 23647 24496 +3 26257 21793 26070 +3 25954 15186 9281 +3 22079 24525 24925 +3 21794 22079 24925 +3 24525 26257 26117 +3 24925 24525 26117 +3 24548 21266 24188 +3 25499 24188 21266 +3 15318 12192 21266 +3 24548 15318 21266 +3 22171 23908 12192 +3 15318 22171 12192 +3 22171 25109 25797 +3 23908 22171 25797 +3 23691 24541 25797 +3 25109 23691 25797 +3 23691 23709 24639 +3 24541 23691 24639 +3 21512 20924 24639 +3 23709 21512 24639 +3 24518 22861 20924 +3 21512 24518 20924 +3 31787 31893 31786 +3 24518 24666 22861 +3 26237 23645 23722 +3 24454 24666 24455 +3 24838 24839 23976 +3 12354 23645 26237 +3 23645 24078 23722 +3 23976 12354 26237 +3 21792 23678 24217 +3 14521 15654 24249 +3 26208 26209 23599 +3 25163 25572 25573 +3 25519 22196 9635 +3 21632 25978 25640 +3 20884 20221 25524 +3 17086 24588 24812 +3 24912 24969 26572 +3 24937 24938 13804 +3 25742 25884 25883 +3 12360 21180 24016 +3 26155 26296 26295 +3 26154 26155 26295 +3 25874 26016 26015 +3 25873 25874 26015 +3 25437 24219 23934 +3 26305 26306 24045 +3 24680 24937 13804 +3 25180 24342 24938 +3 25501 25356 25374 +3 9389 2775 2776 +3 26469 25321 23597 +3 4193 17247 25597 +3 23178 23534 24843 +3 23834 23835 23664 +3 24284 13269 24468 +3 13269 24159 24155 +3 25509 25511 24563 +3 26288 13269 24155 +3 24870 23977 24502 +3 24561 25227 25211 +3 23977 10978 24502 +3 1 4243 25706 +3 25349 25210 13560 +3 24771 23608 12357 +3 13171 13076 13077 +3 23725 24652 23749 +3 22200 22105 26192 +3 26321 20824 24628 +3 26193 22200 26192 +3 12692 25353 12693 +3 25356 24751 24164 +3 23526 20844 23821 +3 21914 23526 23821 +3 26051 26193 26050 +3 21914 23821 24702 +3 594 479 480 +3 24207 25208 22979 +3 24053 26057 25206 +3 31504 31591 31503 +3 4545 20906 23726 +3 24902 24688 25719 +3 23240 24068 24007 +3 20416 20502 20501 +3 25964 25966 24627 +3 23672 24265 25200 +3 24707 22002 23975 +3 25597 25739 25738 +3 24874 24879 21423 +3 25168 24824 24950 +3 11107 25776 24154 +3 23973 23969 23619 +3 24757 23987 24961 +3 13957 24129 24411 +3 32953 32952 32844 +3 23762 21914 24702 +3 34806 34935 34805 +3 25271 12752 12139 +3 32729 32728 32614 +3 24569 21814 21719 +3 5404 19252 5539 +3 31896 31895 31789 +3 31790 31789 31689 +3 25129 25267 25266 +3 35499 35831 11236 +3 25267 25410 25409 +3 25266 25267 25409 +3 25410 25553 25552 +3 25409 25410 25552 +3 25553 25695 25694 +3 25552 25553 25694 +3 26795 12007 23603 +3 25694 25695 25836 +3 25323 22684 23922 +3 23913 25323 23922 +3 26117 26257 26070 +3 23913 23922 26070 +3 14511 25815 25477 +3 21793 23913 26070 +3 22680 23498 25199 +3 24852 24187 24739 +3 24188 17482 24548 +3 14234 17482 13173 +3 24081 24548 17482 +3 14234 24081 17482 +3 25930 15318 24548 +3 24081 25930 24548 +3 25930 3331 22171 +3 15318 25930 22171 +3 3331 24330 25109 +3 22171 3331 25109 +3 24330 22077 23691 +3 25109 24330 23691 +3 22077 26256 23709 +3 23691 22077 23709 +3 23470 21512 23709 +3 26256 23470 23709 +3 21089 24518 21512 +3 23470 21089 21512 +3 22466 24666 24518 +3 21089 22466 24518 +3 24455 22466 24908 +3 22466 24455 24666 +3 24345 24468 23706 +3 10265 24732 12456 +3 23924 23744 24748 +3 23656 25231 24594 +3 34547 34546 34409 +3 27143 13391 8230 +3 20413 20414 24445 +3 26006 503 2147 +3 1073 19121 954 +3 21819 21632 25640 +3 24449 24295 24725 +3 35776 11808 35732 +3 11835 26079 21819 +3 23687 15111 23741 +3 24822 25444 25230 +3 30814 25241 25527 +3 26296 24533 23493 +3 26295 26296 23493 +3 26016 26158 26157 +3 26015 26016 26157 +3 24088 25246 23542 +3 23623 24088 23542 +3 24937 25180 24938 +3 25642 25643 24342 +3 22061 23892 12025 +3 12024 22061 12025 +3 12798 23729 12890 +3 25998 24822 25345 +3 25301 25197 25300 +3 25197 20016 25198 +3 24159 25511 25509 +3 24155 24159 25509 +3 23843 23901 23900 +3 24448 23079 23927 +3 25504 25975 23707 +3 23690 25714 23644 +3 25761 16149 16148 +3 24757 23986 23553 +3 12981 13075 13074 +3 30814 25527 30813 +3 21239 27725 21327 +3 25954 23762 24909 +3 25662 24687 24902 +3 23647 24384 24768 +3 23650 19987 24576 +3 12903 11943 17303 +3 12624 21917 25169 +3 14395 23995 24055 +3 25735 25736 25877 +3 24591 7930 12717 +3 24434 24351 24710 +3 17563 15868 19933 +3 26221 22762 24315 +3 26388 24407 27895 +3 25950 25369 20666 +3 25451 21423 23798 +3 11925 27198 11839 +3 25147 24676 24928 +3 23152 23635 23054 +3 25157 24183 25171 +3 25776 24757 24961 +3 24927 25147 24928 +3 23800 23621 25647 +3 23753 25201 24503 +3 24472 11614 24204 +3 25428 24472 24204 +3 19175 19176 19280 +3 21334 24966 24579 +3 1326 23999 16944 +3 25586 24520 27982 +3 32615 32729 32614 +3 21361 19987 23650 +3 24409 25964 25965 +3 25678 25858 23516 +3 24654 24520 25586 +3 24202 25675 23874 +3 34567 34566 34429 +3 23634 10869 21006 +3 25130 25268 25267 +3 25128 25129 25266 +3 25268 25411 25410 +3 25267 25268 25410 +3 25411 25554 25553 +3 25410 25411 25553 +3 25554 25696 25695 +3 25553 25554 25695 +3 33589 17337 33472 +3 25695 25696 25837 +3 22837 24394 20229 +3 25634 23790 23776 +3 22680 25199 24380 +3 24394 24478 20229 +3 22392 26262 23574 +3 23903 23845 20982 +3 29156 29293 24454 +3 26263 23574 26262 +3 25828 14234 22392 +3 23574 25828 22392 +3 23772 24081 14234 +3 25828 23772 14234 +3 23772 23469 25930 +3 24081 23772 25930 +3 23469 24653 3331 +3 25930 23469 3331 +3 24653 24634 24330 +3 3331 24653 24330 +3 24634 23748 22077 +3 24330 24634 22077 +3 23748 26116 26256 +3 22077 23748 26256 +3 25507 23470 26256 +3 26116 25507 26256 +3 25666 21089 23470 +3 25507 25666 23470 +3 22564 22466 21089 +3 25666 22564 21089 +3 201 15026 24439 +3 22564 24908 22466 +3 23809 30811 30812 +3 25001 26198 24999 +3 12845 11792 11879 +3 22464 22562 24123 +3 20745 21334 25015 +3 24638 24645 25866 +3 25819 24023 23918 +3 25108 24621 24260 +3 25978 25106 25036 +3 25070 26001 25204 +3 22586 24228 24126 +3 34273 34272 34134 +3 24073 23799 23744 +3 23551 25012 24754 +3 25345 24822 25491 +3 25444 25443 25230 +3 24533 15739 14840 +3 24945 19986 24762 +3 3450 15470 12625 +3 22287 25629 25628 +3 25437 23934 25246 +3 24088 25437 25246 +3 25180 25642 24342 +3 25102 25101 25643 +3 21157 12024 12025 +3 25393 21157 12025 +3 25670 24721 12639 +3 6534 25092 25372 +3 23873 25197 25198 +3 20016 23178 24843 +3 25511 24561 24563 +3 24563 24561 25211 +3 26214 25069 25070 +3 12451 26214 25070 +3 25201 25331 24503 +3 21452 25190 25330 +3 24366 24199 21160 +3 25331 21452 25330 +3 22350 24390 24467 +3 23654 22350 24467 +3 31178 31179 31242 +3 24051 24373 24424 +3 27644 4194 23238 +3 25581 23348 22298 +3 29966 25280 29965 +3 25638 25924 24235 +3 24159 24167 25511 +3 14521 24333 24417 +3 5352 26285 26144 +3 20886 25023 20222 +3 20029 20061 21872 +3 9690 24600 25114 +3 21575 11711 16464 +3 24401 24372 21454 +3 23951 17262 24010 +3 25133 28351 28350 +3 24927 24928 22192 +3 21541 24927 22192 +3 20442 20441 24906 +3 22486 22485 23759 +3 24567 23753 24503 +3 25331 25330 24503 +3 12553 24472 25428 +3 24012 12553 25428 +3 25785 24401 21454 +3 24401 25649 25623 +3 24372 24401 25623 +3 25649 23575 24456 +3 20014 24196 15672 +3 24174 24278 24358 +3 3474 23698 23174 +3 24981 24415 23652 +3 25856 25855 21909 +3 24198 23992 26105 +3 21425 24604 26074 +3 10244 25541 9278 +3 25130 35634 35368 +3 20668 25950 24400 +3 25269 25412 25411 +3 25268 25269 25411 +3 25412 25555 25554 +3 25411 25412 25554 +3 25555 25697 25696 +3 25554 25555 25696 +3 25697 25839 25838 +3 25696 25697 25838 +3 25839 25981 25980 +3 34010 34009 33874 +3 25981 26123 26122 +3 26263 26262 19662 +3 26264 26263 26122 +3 26123 26264 26122 +3 24048 23574 26263 +3 26264 24048 26263 +3 24048 21007 25828 +3 23574 24048 25828 +3 21007 24082 23772 +3 25828 21007 23772 +3 24082 24206 23469 +3 23772 24082 23469 +3 24206 24884 24653 +3 23469 24206 24653 +3 24884 24760 24634 +3 24653 24884 24634 +3 24760 23802 23748 +3 24634 24760 23748 +3 23802 25974 26116 +3 23748 23802 26116 +3 25508 25507 26116 +3 25974 25508 26116 +3 12109 25666 25507 +3 25508 12109 25507 +3 22663 22564 25666 +3 12109 22663 25666 +3 24554 24908 22564 +3 18638 18639 21114 +3 22837 20229 23716 +3 25477 24852 24739 +3 26019 26020 26161 +3 24187 24852 17555 +3 25913 23498 21534 +3 26020 26162 26161 +3 16002 16003 16144 +3 21911 24352 24435 +3 23541 23622 24445 +3 23174 22837 23716 +3 25651 25250 24080 +3 25222 21358 12717 +3 25664 25320 25807 +3 20267 20180 20181 +3 24497 23680 25491 +3 24822 25230 25491 +3 24242 24958 26680 +3 25387 24998 24331 +3 32906 33014 32905 +3 25771 21535 25770 +3 24219 24220 26674 +3 25200 24265 11751 +3 25158 13089 23656 +3 12421 25158 23656 +3 25718 21157 25393 +3 24820 25718 25393 +3 24838 23976 1520 +3 26285 26286 25670 +3 25790 21156 22682 +3 25373 23562 12339 +3 24414 23510 23717 +3 22294 22760 22389 +3 25035 25115 24854 +3 23490 24857 22008 +3 19916 25050 3084 +3 25190 21452 25051 +3 23651 12553 24012 +3 20824 23651 24012 +3 26322 23651 20824 +3 26321 26322 20824 +3 11482 26216 24880 +3 25189 24174 24358 +3 23739 23738 24278 +3 24174 23739 24278 +3 24953 24924 23738 +3 23739 24953 23738 +3 21534 24435 24351 +3 24953 26055 26011 +3 24986 25114 26119 +3 23556 24409 25965 +3 24986 9690 25114 +3 10978 22078 12026 +3 23953 21289 18454 +3 24546 21092 24362 +3 11711 18454 29634 +3 10465 21091 21006 +3 21541 22192 26003 +3 26146 21541 26003 +3 23707 23499 23529 +3 23745 22974 24389 +3 26181 26322 26321 +3 26180 26181 26321 +3 26039 26181 26180 +3 26038 26039 26180 +3 25623 25649 24456 +3 23575 26227 26223 +3 24456 23575 26223 +3 23865 24438 26223 +3 24924 24953 26011 +3 26055 17577 24147 +3 20152 12276 12309 +3 24371 24892 11838 +3 30940 30939 30885 +3 9278 25541 11835 +3 23833 23834 23534 +3 24607 12168 24477 +3 31508 31507 31435 +3 23174 23716 25712 +3 14969 22447 23250 +3 22139 21627 17447 +3 25413 25556 25555 +3 25412 25413 25555 +3 25556 25698 25697 +3 25555 25556 25697 +3 25698 25840 25839 +3 25697 25698 25839 +3 25840 25982 25981 +3 25839 25840 25981 +3 25982 26124 26123 +3 25981 25982 26123 +3 26265 26264 26123 +3 26124 26265 26123 +3 23626 24048 26264 +3 26265 23626 26264 +3 23626 24558 21007 +3 24048 23626 21007 +3 24558 22958 24082 +3 21007 24558 24082 +3 22958 25934 24206 +3 24082 22958 24206 +3 25934 25928 24884 +3 24206 25934 24884 +3 25928 25085 24760 +3 24884 25928 24760 +3 24542 23802 24760 +3 25085 24542 24760 +3 25832 25974 23802 +3 24542 25832 23802 +3 24772 25508 25974 +3 25832 24772 25974 +3 26254 12109 25508 +3 24772 26254 25508 +3 25413 25412 25269 +3 26254 22761 12109 +3 24026 23726 20094 +3 20215 17604 17700 +3 23961 24443 24554 +3 22663 24554 22564 +3 23680 22532 25345 +3 27613 20920 20839 +3 25217 25531 23620 +3 23593 11855 23563 +3 24374 24375 24257 +3 2123 21668 9746 +3 4553 24721 26286 +3 24463 21070 20984 +3 26153 26294 26293 +3 22004 24267 21815 +3 23156 24564 15601 +3 25868 23800 24830 +3 25681 25823 24497 +3 23680 25345 25491 +3 24741 23933 24828 +3 20494 24741 24828 +3 25771 25770 24810 +3 24857 25771 24810 +3 26289 21234 13365 +3 7801 7917 14649 +3 25158 12421 26095 +3 26095 24594 25089 +3 24627 23672 25200 +3 25245 22268 24329 +3 25315 23509 23510 +3 24966 24838 1520 +3 23673 21450 23799 +3 24289 19426 24317 +3 25009 24584 25358 +3 25647 28125 28108 +3 23490 24140 24857 +3 21538 21008 23671 +3 4382 24817 25349 +3 23953 21393 20058 +3 25896 25897 26038 +3 26227 23865 26223 +3 23865 12533 24161 +3 24881 23994 25452 +3 24438 23865 24161 +3 26011 26055 24147 +3 17577 25439 25436 +3 24147 17577 25436 +3 24539 23792 25436 +3 8027 25378 24660 +3 25913 21534 23714 +3 11671 11835 21724 +3 26259 24986 26119 +3 24341 12920 22976 +3 25864 25865 24546 +3 23411 22395 23702 +3 23800 25868 24288 +3 12958 12865 24047 +3 25921 13886 23929 +3 16312 26146 26003 +3 24186 16312 26003 +3 24652 20905 24225 +3 22683 22879 23529 +3 25754 25755 25896 +3 25897 26039 26038 +3 12533 25483 25339 +3 24161 12533 25339 +3 25483 26000 23891 +3 25339 25483 23891 +3 23619 25676 23830 +3 25439 24539 25436 +3 24539 25726 23683 +3 24007 24068 14848 +3 24235 23545 23523 +3 21724 21819 26068 +3 11835 21819 21724 +3 6644 23513 23512 +3 24624 24633 25864 +3 31712 31713 31812 +3 25902 25759 16149 +3 25271 25414 25413 +3 21627 22139 21535 +3 25414 25557 25556 +3 25413 25414 25556 +3 25557 25699 25698 +3 25556 25557 25698 +3 25699 25841 25840 +3 25698 25699 25840 +3 25841 25983 25982 +3 25840 25841 25982 +3 26125 26124 25982 +3 25983 26125 25982 +3 26266 26265 26124 +3 26125 26266 26124 +3 26266 23876 23626 +3 26265 26266 23626 +3 23876 24237 24558 +3 23626 23876 24558 +3 24237 12554 22958 +3 24558 24237 22958 +3 12554 23372 25934 +3 22958 12554 25934 +3 23372 2233 25928 +3 25934 23372 25928 +3 2233 24145 25085 +3 25928 2233 25085 +3 21513 24542 25085 +3 24145 21513 25085 +3 25690 25832 24542 +3 21513 25690 24542 +3 24898 24772 25832 +3 25690 24898 25832 +3 26114 26254 24772 +3 24898 26114 24772 +3 22860 22761 26254 +3 26114 22860 26254 +3 24555 23961 24554 +3 22860 24553 22761 +3 24446 23961 24555 +3 24553 24446 24555 +3 24446 22388 23946 +3 24446 23946 23961 +3 24304 24303 26080 +3 20218 17606 20305 +3 22103 11859 22102 +3 26080 24632 25304 +3 20901 35766 35944 +3 9634 9635 24482 +3 24233 24400 14911 +3 24400 14141 14911 +3 15317 22039 26000 +3 24303 24632 26080 +3 14793 22348 25681 +3 25823 23680 24497 +3 11771 25487 23933 +3 24741 11771 23933 +3 24857 24810 21181 +3 22008 24857 21181 +3 23622 23724 24641 +3 25967 23428 24409 +3 25602 25603 25744 +3 25603 25745 25744 +3 24357 24629 25727 +3 15868 17563 16300 +3 26166 26167 26307 +3 26308 24733 21180 +3 21450 24317 21916 +3 26086 26091 11856 +3 23885 15601 16024 +3 24564 23611 16922 +3 23461 24755 24893 +3 16996 17159 16995 +3 24555 24554 22663 +3 23948 24086 26255 +3 5424 16048 5423 +3 25305 25808 23930 +3 14586 16775 22948 +3 23792 24539 23683 +3 20654 24347 23683 +3 20681 20599 23930 +3 21356 20682 23917 +3 26068 25640 26094 +3 21819 25640 26068 +3 25140 23927 24663 +3 25865 21092 24546 +3 23808 21509 23614 +3 4687 19001 18594 +3 11233 24798 12026 +3 22078 11233 12026 +3 25244 25389 23754 +3 24043 16312 24186 +3 26063 24766 24122 +3 24156 22979 12336 +3 25613 25755 25754 +3 25612 25613 25754 +3 26210 26211 25214 +3 23766 23773 24975 +3 26092 23849 12023 +3 24154 24961 25476 +3 25726 20654 23683 +3 25058 25057 24347 +3 24961 23987 25232 +3 2944 13893 25179 +3 23631 23632 24711 +3 25640 25036 26094 +3 25210 25349 25298 +3 23586 23587 24624 +3 13601 13503 12217 +3 24309 22295 25959 +3 25272 25415 25414 +3 25271 25272 25414 +3 25415 25558 25557 +3 25414 25415 25557 +3 25558 25700 25699 +3 25557 25558 25699 +3 25700 25842 25841 +3 25699 25700 25841 +3 25842 25984 25983 +3 25841 25842 25983 +3 25984 26126 26125 +3 25983 25984 26125 +3 26126 26267 26266 +3 26125 26126 26266 +3 26267 25162 23876 +3 26266 26267 23876 +3 25162 13897 24237 +3 23876 25162 24237 +3 13897 25042 12554 +3 24237 13897 12554 +3 25042 23373 23372 +3 12554 25042 23372 +3 23373 2365 2233 +3 23372 23373 2233 +3 26072 24145 2233 +3 2365 26072 2233 +3 25480 21513 24145 +3 26072 25480 24145 +3 25548 25690 21513 +3 25480 25548 21513 +3 23668 24898 25690 +3 25548 23668 25690 +3 25972 26114 24898 +3 23668 25972 24898 +3 22859 22860 26114 +3 25972 22859 26114 +3 24552 24553 22860 +3 22859 24552 22860 +3 23962 24446 24553 +3 24552 23962 24553 +3 30687 23946 22388 +3 23962 22388 24446 +3 24371 23566 24892 +3 20588 20589 23746 +3 25442 24819 14793 +3 22348 25823 25681 +3 25153 23352 24658 +3 24661 24819 25442 +3 24040 25460 24038 +3 23352 25153 25459 +3 26676 24298 24218 +3 20408 24523 24790 +3 24040 24038 25131 +3 12187 24790 24982 +3 23774 23783 24980 +3 24987 26140 26093 +3 22008 21181 24377 +3 25028 22008 24377 +3 25140 23177 24448 +3 24629 25028 25727 +3 23727 22586 24747 +3 25383 22532 23680 +3 25605 25606 25747 +3 25596 25738 25737 +3 26024 26025 26166 +3 26167 26308 26307 +3 25169 24914 23807 +3 24930 25432 24931 +3 25441 20885 25244 +3 25389 24043 23754 +3 24755 20517 24893 +3 25532 25510 11752 +3 25461 22559 23352 +3 23663 23923 23810 +3 28190 28191 35415 +3 16004 25906 25763 +3 26064 12686 25066 +3 20654 25058 24347 +3 26233 25035 20666 +3 20652 24205 25057 +3 25036 23632 23631 +3 30878 30932 30877 +3 24354 25960 24318 +3 26094 25036 23631 +3 23994 24719 24823 +3 15419 25277 25139 +3 1326 24000 23999 +3 15583 13177 15584 +3 24930 24931 24798 +3 26025 26167 26166 +3 23754 24043 24186 +3 11233 24930 24798 +3 25467 25468 25610 +3 20885 25389 25244 +3 25755 25897 25896 +3 24316 24331 12252 +3 1089 1088 970 +3 23604 24618 24866 +3 24106 12251 24696 +3 4192 25595 1451 +3 25058 20652 25057 +3 12712 25016 25312 +3 25176 25175 24205 +3 15741 16162 18488 +3 25009 25358 12647 +3 25136 25274 11879 +3 24688 25312 25226 +3 24633 25865 25864 +3 23587 24633 24624 +3 13503 12388 12217 +3 23276 22591 12186 +3 25273 25416 25415 +3 25272 25273 25415 +3 25416 25559 25558 +3 25415 25416 25558 +3 25559 25701 25700 +3 25558 25559 25700 +3 25701 25843 25842 +3 25700 25701 25842 +3 25985 25984 25842 +3 25843 25985 25842 +3 25985 26127 26126 +3 25984 25985 26126 +3 26127 26268 26267 +3 26126 26127 26267 +3 26268 23507 25162 +3 26267 26268 25162 +3 23507 15213 13897 +3 25162 23507 13897 +3 15213 24916 25042 +3 13897 15213 25042 +3 24916 13407 23373 +3 25042 24916 23373 +3 13407 25933 2365 +3 23373 13407 2365 +3 24718 26072 2365 +3 25933 24718 2365 +3 25859 25480 26072 +3 24718 25859 26072 +3 23643 25548 25480 +3 25859 23643 25480 +3 23831 23668 25548 +3 23643 23831 25548 +3 25830 25972 23668 +3 23831 25830 23668 +3 24197 22859 25972 +3 25830 24197 25972 +3 23318 24552 22859 +3 24197 23318 22859 +3 12713 23962 24552 +3 23318 12713 24552 +3 22387 22388 23962 +3 12713 22387 23962 +3 5191 1385 2609 +3 23576 22387 23577 +3 24658 24661 25442 +3 24819 22348 14793 +3 22661 24184 24185 +3 24872 24997 25501 +3 25513 6644 23512 +3 22295 22294 23537 +3 25730 25872 25871 +3 24578 24575 23512 +3 26014 26156 26155 +3 18792 18891 1573 +3 16922 23611 22628 +3 24686 13274 24683 +3 25028 24377 24135 +3 25727 25028 24135 +3 25073 17377 30792 +3 24025 25076 24675 +3 26311 26312 23974 +3 25008 24899 12451 +3 25595 25596 25737 +3 25738 25880 25879 +3 25883 26025 26024 +3 25882 25883 26024 +3 13461 25975 25504 +3 24352 23520 25095 +3 25523 20885 25441 +3 25517 25523 25441 +3 26020 26021 26162 +3 23815 25485 25341 +3 25492 23811 13658 +3 22876 26205 22079 +3 1451 25595 25594 +3 25399 24232 22664 +3 25461 25460 24040 +3 20414 20415 20500 +3 20652 25176 24205 +3 25282 25283 25175 +3 20520 20602 20519 +3 13597 14660 14765 +3 25255 12022 21818 +3 23632 24732 24711 +3 25612 25754 25753 +3 24578 25801 25799 +3 23897 23896 23839 +3 27173 21396 30477 +3 15237 23687 23637 +3 23897 23956 23896 +3 23649 25967 25968 +3 11855 23584 23563 +3 25432 20261 16311 +3 11107 24154 22879 +3 24172 25523 25517 +3 24170 24172 25517 +3 22978 25352 23677 +3 24491 20745 25820 +3 16442 16594 16441 +3 25394 25512 24044 +3 25871 26013 26012 +3 13658 23811 25543 +3 25176 25282 25175 +3 25283 25282 25646 +3 23860 21245 25219 +3 24532 24707 24272 +3 25137 25136 11792 +3 12022 20923 21818 +3 24318 25960 23586 +3 25587 24354 24318 +3 11793 25004 25137 +3 20033 24580 13104 +3 10578 25939 24606 +3 25873 26015 26014 +3 25417 25416 25273 +3 25274 25417 25273 +3 25417 25560 25559 +3 25416 25417 25559 +3 25560 25702 25701 +3 25559 25560 25701 +3 25844 25843 25701 +3 25702 25844 25701 +3 25844 25986 25985 +3 25843 25844 25985 +3 25986 26128 26127 +3 25985 25986 26127 +3 26128 26269 26268 +3 26127 26128 26268 +3 26269 4798 23507 +3 26268 26269 23507 +3 4798 15087 15213 +3 23507 4798 15213 +3 15087 24917 24916 +3 15213 15087 24916 +3 24917 22005 13407 +3 24916 24917 13407 +3 22005 23449 25933 +3 13407 22005 25933 +3 25525 24718 25933 +3 23449 25525 25933 +3 25768 25859 24718 +3 25525 25768 24718 +3 24597 23643 25859 +3 25768 24597 25859 +3 21422 23831 23643 +3 24597 21422 23643 +3 25688 25830 23831 +3 21422 25688 23831 +3 25717 24197 25830 +3 25688 25717 25830 +3 21665 23318 24197 +3 25717 21665 24197 +3 23963 12713 23318 +3 21665 23963 23318 +3 22292 22387 12713 +3 23963 22292 12713 +3 26145 20172 23692 +3 22292 23577 22387 +3 25460 23352 25459 +3 23352 24661 24658 +3 23923 24047 23810 +3 23769 24768 23506 +3 25727 24135 23559 +3 24160 25727 23559 +3 26218 25341 22681 +3 24941 26218 22681 +3 22202 23677 25347 +3 23894 22202 25347 +3 25359 24236 25926 +3 23607 25359 25926 +3 25926 24236 24549 +3 24236 21606 24549 +3 25583 22201 23348 +3 25182 25482 25074 +3 24899 26214 12451 +3 26144 26285 26143 +3 25737 25738 25879 +3 26021 26022 26163 +3 25599 25741 25740 +3 25598 25599 25740 +3 24368 24313 22196 +3 24740 24780 24742 +3 13761 24172 24170 +3 22384 13761 24170 +3 25734 25735 25876 +3 24257 24231 24340 +3 26197 13270 26196 +3 23501 26058 12110 +3 25543 20033 13104 +3 12717 24521 24370 +3 12603 12693 25353 +3 25473 25474 23920 +3 30983 30982 30924 +3 23976 26237 24320 +3 25903 25904 26045 +3 26067 26066 25063 +3 22877 21335 24709 +3 23530 24809 24808 +3 24576 15321 23650 +3 23841 6254 23176 +3 24288 24291 25567 +3 12191 22384 24167 +3 24487 24477 25687 +3 23523 23545 24593 +3 21632 21725 25978 +3 21725 24356 25978 +3 23841 3602 23842 +3 21396 24063 15282 +3 24063 21396 27173 +3 23920 23530 24808 +3 29081 23956 28946 +3 2450 2449 2315 +3 25377 24627 24192 +3 34694 34693 34565 +3 23653 23874 24969 +3 24473 25636 24641 +3 35339 35338 35209 +3 24727 24804 24039 +3 20923 25925 25639 +3 24893 22368 24312 +3 24323 25957 24859 +3 26200 21358 25772 +3 22744 24427 17819 +3 23928 24469 24427 +3 25515 25517 23492 +3 25630 25679 23753 +3 22106 22464 22367 +3 2816 25495 25351 +3 25312 23667 25226 +3 25910 24619 24512 +3 25960 23587 23586 +3 21179 21265 25587 +3 23826 23585 25793 +3 26351 30874 30873 +3 25275 25274 25136 +3 25137 25275 25136 +3 25418 25417 25274 +3 25275 25418 25274 +3 25418 25561 25560 +3 25417 25418 25560 +3 25703 25702 25560 +3 25561 25703 25560 +3 25845 25844 25702 +3 25703 25845 25702 +3 25845 25987 25986 +3 25844 25845 25986 +3 25987 26129 26128 +3 25986 25987 26128 +3 26129 26270 26269 +3 26128 26129 26269 +3 26270 20231 4798 +3 26269 26270 4798 +3 20231 13312 15087 +3 4798 20231 15087 +3 13312 24918 24917 +3 15087 13312 24917 +3 24918 21446 22005 +3 24917 24918 22005 +3 21446 23450 23449 +3 22005 21446 23449 +3 24951 25525 23449 +3 23450 24951 23449 +3 24208 25768 25525 +3 24951 24208 25525 +3 24596 24597 25768 +3 24208 24596 25768 +3 21332 21422 24597 +3 24596 21332 24597 +3 25546 25688 21422 +3 21332 25546 21422 +3 24499 25717 25688 +3 25546 24499 25688 +3 14686 21665 25717 +3 24499 14686 25717 +3 23904 23963 21665 +3 14686 23904 21665 +3 22197 22292 23963 +3 23904 22197 23963 +3 26695 26082 26696 +3 22197 23778 22292 +3 34692 34691 34563 +3 25460 25459 24038 +3 24768 12623 23506 +3 24649 26080 25079 +3 25341 24160 23559 +3 22681 25341 23559 +3 12445 23607 12106 +3 23719 25110 24920 +3 32019 32020 32119 +3 24142 22100 25093 +3 27135 23623 26244 +3 20746 26252 23832 +3 24220 25437 24464 +3 20905 20987 24225 +3 24054 25461 24040 +3 20825 20904 23725 +3 24746 23725 24018 +3 24280 24964 23948 +3 26164 26305 26304 +3 26163 26164 26304 +3 25686 24315 26067 +3 25584 24095 25462 +3 24442 25962 24689 +3 25788 24970 25931 +3 23550 21720 22004 +3 24973 24975 26086 +3 25881 26023 26022 +3 26021 26163 26162 +3 24624 25864 25854 +3 25376 24238 22102 +3 24100 24099 25591 +3 6254 23841 23898 +3 23866 25026 23657 +3 24403 25952 6902 +3 25679 24679 23753 +3 16291 16290 16147 +3 15187 15186 25954 +3 24448 21158 23460 +3 26047 26046 25904 +3 23322 2545 26506 +3 24416 30632 24444 +3 274 6402 7004 +3 25626 7930 24591 +3 25899 26041 26040 +3 25898 25899 26040 +3 23762 25954 9281 +3 25608 25609 25750 +3 23996 23995 274 +3 24391 25672 24462 +3 26221 23810 22762 +3 12027 21725 21632 +3 24615 24735 12916 +3 23786 20319 20945 +3 26079 12027 21632 +3 11122 17304 21511 +3 25066 12597 11858 +3 34559 34558 34421 +3 35201 35202 35330 +3 21818 25639 25193 +3 23678 23935 24191 +3 25224 24856 24070 +3 24069 25224 24070 +3 21966 25025 24395 +3 24892 21966 24395 +3 21966 21451 25025 +3 21451 21821 25025 +3 25879 26021 26020 +3 26308 26309 24733 +3 13082 22247 29687 +3 25430 24922 24921 +3 25487 25631 21537 +3 23727 24747 24894 +3 25720 25728 26113 +3 21006 24355 23594 +3 20018 29962 25425 +3 24501 24726 24201 +3 24677 24678 25869 +3 25541 25540 26079 +3 25921 24732 11568 +3 21265 24354 25587 +3 25138 25137 25004 +3 24016 24695 24817 +3 25276 25275 25137 +3 25138 25276 25137 +3 25419 25418 25275 +3 25276 25419 25275 +3 25562 25561 25418 +3 25419 25562 25418 +3 25704 25703 25561 +3 25562 25704 25561 +3 25846 25845 25703 +3 25704 25846 25703 +3 25846 25988 25987 +3 25845 25846 25987 +3 25988 26130 26129 +3 25987 25988 26129 +3 26130 26271 26270 +3 26129 26130 26270 +3 26271 12425 20231 +3 26270 26271 20231 +3 12425 1854 13312 +3 20231 12425 13312 +3 1854 24794 24918 +3 13312 1854 24918 +3 24794 14268 21446 +3 24918 24794 21446 +3 23693 23450 21446 +3 14268 23693 21446 +3 23693 24952 24951 +3 23450 23693 24951 +3 23624 24208 24951 +3 24952 23624 24951 +3 25809 24596 24208 +3 23624 25809 24208 +3 21698 21332 24596 +3 25809 21698 24596 +3 20972 25546 21332 +3 21698 20972 21332 +3 23525 24499 25546 +3 20972 23525 25546 +3 20862 14686 24499 +3 23525 20862 24499 +3 23789 23904 14686 +3 20862 23789 14686 +3 22484 22197 23904 +3 23789 22484 23904 +3 35873 35443 35405 +3 22484 24744 22197 +3 24377 24378 24136 +3 24790 15591 24982 +3 5469 25708 4243 +3 25872 26014 26013 +3 23677 26218 24941 +3 25347 23677 24941 +3 24866 24618 25769 +3 31368 31435 31367 +3 23656 25080 25231 +3 24152 24149 26002 +3 25675 30845 30844 +3 25223 25158 26095 +3 13366 15603 9085 +3 22268 24380 24329 +3 24030 24091 24090 +3 31918 31919 32019 +3 24780 12450 24829 +3 12270 25307 25319 +3 26305 24045 25188 +3 24817 25299 25297 +3 25720 26113 25863 +3 21722 25569 25570 +3 24039 23979 20884 +3 25030 21357 24238 +3 25224 13110 22447 +3 13434 13435 13531 +3 25490 25302 23890 +3 24733 24963 24440 +3 24671 25580 24672 +3 8346 3735 35623 +3 21982 22978 22202 +3 25580 7759 24672 +3 2487 2486 6021 +3 24856 22447 23557 +3 25008 12451 24183 +3 24355 24706 23625 +3 25973 26115 11838 +3 23634 21006 23594 +3 24260 24621 25255 +3 24193 22680 22268 +3 15673 24174 25189 +3 21668 23871 23991 +3 12920 25166 30760 +3 23594 24355 23625 +3 15673 24196 24174 +3 24615 12916 24614 +3 25491 23703 1998 +3 9278 4523 10244 +3 22662 23993 22760 +3 274 23938 23996 +3 23411 23702 21691 +3 25682 24581 12027 +3 24196 23743 23739 +3 24174 24196 23739 +3 23834 24815 23835 +3 23894 25347 25326 +3 23594 23625 26102 +3 30490 25438 23633 +3 14473 14472 17170 +3 12217 12388 14819 +3 23787 23843 23842 +3 23786 23787 23842 +3 19132 23900 23901 +3 23843 23900 23842 +3 23965 3450 24200 +3 24627 25200 24192 +3 24069 24070 21821 +3 21451 24069 21821 +3 21151 20982 23845 +3 22762 26065 26066 +3 25513 23512 23505 +3 24315 22762 26066 +3 24963 14850 24440 +3 25831 23732 23889 +3 23803 24328 24577 +3 25206 26219 25653 +3 25540 25682 12027 +3 27434 20866 21462 +3 23743 24972 24953 +3 23739 23743 24953 +3 24972 26076 26055 +3 25672 24463 24462 +3 25218 23867 24493 +3 25380 23633 25438 +3 24621 12022 25255 +3 25093 11859 22103 +3 11668 21265 21179 +3 20945 1680 23787 +3 15444 25669 24871 +3 25277 25276 25138 +3 25139 25277 25138 +3 25420 25419 25276 +3 25277 25420 25276 +3 25563 25562 25419 +3 25420 25563 25419 +3 25705 25704 25562 +3 25563 25705 25562 +3 25705 25847 25846 +3 25704 25705 25846 +3 25847 25989 25988 +3 25846 25847 25988 +3 25989 26131 26130 +3 25988 25989 26130 +3 26131 26272 26271 +3 26130 26131 26271 +3 26272 23763 12425 +3 26271 26272 12425 +3 23763 22565 1854 +3 12425 23763 1854 +3 22565 24795 24794 +3 1854 22565 24794 +3 24795 25071 14268 +3 24794 24795 14268 +3 25071 23793 23693 +3 14268 25071 23693 +3 23793 9799 24952 +3 23693 23793 24952 +3 26071 23624 24952 +3 9799 26071 24952 +3 25810 25809 23624 +3 26071 25810 23624 +3 21981 21698 25809 +3 25810 21981 25809 +3 22252 20972 21698 +3 21981 22252 21698 +3 24784 23525 20972 +3 22252 24784 20972 +3 20216 20862 23525 +3 24784 20216 23525 +3 23944 23789 20862 +3 20216 23944 20862 +3 25656 22484 23789 +3 23944 25656 23789 +3 28751 23779 24745 +3 35189 35188 35059 +3 24515 24244 24243 +3 24762 25399 22664 +3 25871 25872 26013 +3 26013 26014 26155 +3 21606 22202 23894 +3 24549 21606 23894 +3 11701 6008 14074 +3 29119 26495 26059 +3 24962 25455 24944 +3 25076 24797 24675 +3 21157 21244 12024 +3 25293 22061 12024 +3 13116 25403 24488 +3 12186 25293 12024 +3 24316 24369 25387 +3 24369 24316 25528 +3 23983 25956 26098 +3 23988 23983 26098 +3 25349 24817 25297 +3 21244 12186 12024 +3 25291 28239 12692 +3 15536 15671 15535 +3 26201 24357 24160 +3 25606 25607 25748 +3 4780 24363 25861 +3 24610 26115 25973 +3 24071 24070 23557 +3 20904 23491 20905 +3 16920 22645 13274 +3 32510 32509 32404 +3 26148 4013 733 +3 215 23675 24261 +3 20815 11750 11749 +3 13792 26251 3993 +3 24953 24972 26055 +3 26076 12190 17577 +3 26055 26076 17577 +3 24975 26091 26086 +3 12190 25440 25439 +3 24400 25950 14141 +3 26049 26191 26048 +3 25808 25789 22585 +3 22781 25426 23780 +3 35911 35793 35756 +3 25756 25757 25898 +3 23156 24611 24382 +3 24199 21246 12251 +3 28069 27952 21336 +3 24076 23669 24025 +3 23669 24560 24025 +3 25322 24647 28377 +3 24284 24468 24345 +3 5593 9759 1993 +3 25600 25742 25741 +3 12647 14794 20907 +3 4662 12647 20907 +3 17577 12190 25439 +3 24716 24539 25439 +3 23583 23742 21335 +3 23704 25255 21723 +3 9012 24869 14090 +3 25357 25501 26085 +3 9389 2776 2912 +3 5351 4013 4552 +3 23788 23844 23843 +3 23787 23788 23843 +3 23844 30556 23901 +3 23844 23901 23843 +3 26004 23885 25860 +3 16147 16148 16291 +3 23605 24076 25446 +3 24239 23605 25446 +3 25967 26109 23428 +3 23953 18454 11711 +3 24540 24815 23834 +3 23833 24540 23834 +3 24231 21660 24340 +3 22882 23722 23935 +3 24045 4382 24833 +3 20141 21957 24820 +3 25518 24709 24051 +3 24373 24340 24424 +3 25440 24716 25439 +3 16761 25726 24539 +3 26285 5352 26286 +3 24564 23156 24382 +3 29699 20987 12540 +3 21453 15405 7930 +3 26047 26048 26189 +3 24556 16930 25714 +3 11750 11668 21179 +3 14758 11668 11750 +3 22645 13808 13274 +3 25740 25741 25882 +3 24009 29947 21408 +3 1 25564 14375 +3 20438 23812 20439 +3 440 20973 23896 +3 25564 25563 25420 +3 25748 25890 25889 +3 25564 25706 25705 +3 25563 25564 25705 +3 25706 25848 25847 +3 25705 25706 25847 +3 25848 25990 25989 +3 25847 25848 25989 +3 25990 26132 26131 +3 25989 25990 26131 +3 26132 26273 26272 +3 26131 26132 26272 +3 26273 25107 23763 +3 26272 26273 23763 +3 25107 25000 22565 +3 23763 25107 22565 +3 25000 24796 24795 +3 22565 25000 24795 +3 24796 22006 25071 +3 24795 24796 25071 +3 22006 25146 23793 +3 25071 22006 23793 +3 24911 9799 23793 +3 25146 24911 23793 +3 24545 26071 9799 +3 24911 24545 9799 +3 23694 25810 26071 +3 24545 23694 26071 +3 21791 21981 25810 +3 23694 21791 25810 +3 25362 22252 21981 +3 21791 25362 21981 +3 23560 24784 22252 +3 25362 23560 22252 +3 26104 20216 24784 +3 23560 26104 24784 +3 23797 23944 20216 +3 26104 23797 20216 +3 23681 25656 23944 +3 23797 23681 23944 +3 21145 18518 21967 +3 24745 25392 21514 +3 33587 6283 34342 +3 23559 24135 23630 +3 26156 26297 26296 +3 26155 26156 26296 +3 21888 25359 23607 +3 23235 21888 23607 +3 26596 24098 23639 +3 24464 25437 24088 +3 24752 23502 23728 +3 24404 11855 23593 +3 13116 24488 22061 +3 25293 13116 22061 +3 13237 25003 25002 +3 20094 23726 24767 +3 22202 22978 23677 +3 24746 20825 23725 +3 21699 23895 23907 +3 25535 25927 21333 +3 20669 24592 20752 +3 25752 25753 25894 +3 25139 17170 15419 +3 26319 26320 23771 +3 12202 13025 13664 +3 27989 24510 30618 +3 26313 23605 24239 +3 26312 26313 24239 +3 25182 25147 24927 +3 12008 24362 23568 +3 25053 25482 25182 +3 25054 25053 25182 +3 23336 16920 24686 +3 26048 26190 26189 +3 12250 12335 12249 +3 26204 24268 23550 +3 24716 16761 24539 +3 22051 20654 25726 +3 12107 25783 16150 +3 25481 23860 24891 +3 25639 25925 25632 +3 24906 20358 20442 +3 26005 13529 24897 +3 16000 15860 15861 +3 20015 22463 27723 +3 480 7771 594 +3 25917 25918 24459 +3 24572 24575 25796 +3 24695 23921 25299 +3 25970 25918 25917 +3 10204 13998 10323 +3 24606 10758 330 +3 23813 26351 30871 +3 25446 24076 24025 +3 498 1541 1775 +3 21984 24049 23336 +3 24163 23783 23774 +3 25359 24028 24236 +3 21720 22099 22004 +3 22879 22781 24460 +3 16761 22051 25726 +3 25059 25058 20654 +3 31849 31848 31748 +3 29297 13554 13458 +3 12712 25312 24688 +3 25590 3222 3221 +3 31392 31459 31458 +3 23514 20263 25663 +3 23845 23844 23788 +3 17081 25599 17246 +3 23903 23902 23845 +3 23845 23902 23844 +3 25349 25297 25298 +3 3221 3600 25590 +3 26172 26313 26312 +3 26171 26172 26312 +3 21335 23742 24779 +3 22448 22645 16920 +3 24818 23658 22348 +3 1573 18891 1690 +3 16148 16147 25762 +3 18792 1573 1458 +3 24708 24818 24819 +3 25761 25903 25902 +3 2903 13792 26249 +3 25903 26045 26044 +3 22051 25059 20654 +3 25025 24605 24396 +3 21268 20652 25058 +3 25925 26102 25632 +3 25739 25740 25881 +3 26190 26331 26330 +3 31947 31946 31848 +3 20815 14758 11750 +3 21629 21628 25400 +3 25749 25891 25890 +3 25849 25706 25708 +3 25902 25903 26044 +3 22348 23658 25823 +3 35654 35583 35530 +3 14848 27258 24067 +3 12823 12731 14074 +3 25909 15861 26052 +3 66 9538 35807 +3 23857 9635 25248 +3 26495 27723 22463 +3 3041 24500 22440 +3 25849 25991 25990 +3 25848 25849 25990 +3 25991 26133 26132 +3 25990 25991 26132 +3 26133 26274 26273 +3 26132 26133 26273 +3 26274 13271 25107 +3 26273 26274 25107 +3 13271 3725 25000 +3 25107 13271 25000 +3 3725 22153 24796 +3 25000 3725 24796 +3 22153 24974 22006 +3 24796 22153 22006 +3 24974 23761 25146 +3 22006 24974 25146 +3 2889 24911 25146 +3 23761 2889 25146 +3 26199 24545 24911 +3 2889 26199 24911 +3 23573 23694 24545 +3 26199 23573 24545 +3 22783 21791 23694 +3 23573 22783 23694 +3 25625 25362 21791 +3 22783 25625 21791 +3 20579 23560 25362 +3 25625 20579 25362 +3 20203 26104 23560 +3 20579 20203 23560 +3 23852 23797 26104 +3 20203 23852 26104 +3 24447 23681 23797 +3 23852 24447 23797 +3 25392 24745 23681 +3 24447 25392 23681 +3 24311 24956 24243 +3 35062 35061 34932 +3 26297 24526 24533 +3 26296 26297 24533 +3 13658 25543 24692 +3 12751 13658 24692 +3 6631 6632 9547 +3 35406 35904 35814 +3 25968 25967 24409 +3 25542 215 23579 +3 25403 25528 24488 +3 25403 24369 25528 +3 25468 25611 25610 +3 29490 22098 22097 +3 26796 26471 25340 +3 15443 25669 15444 +3 25567 22298 22394 +3 23783 24163 15402 +3 25821 25854 20659 +3 20749 23592 26233 +3 20902 21425 26074 +3 25854 21073 20659 +3 22296 24675 23850 +3 25748 25749 25890 +3 25887 25888 26029 +3 26030 26172 26171 +3 26258 26118 24027 +3 24709 24373 24051 +3 9404 9772 8867 +3 24488 25368 23892 +3 26045 26187 26186 +3 26044 26045 26186 +3 26328 26327 26186 +3 26187 26328 26186 +3 25059 21268 25058 +3 24839 12354 23976 +3 25044 25176 20652 +3 2609 4518 3041 +3 13808 25481 24891 +3 5404 5539 5538 +3 35638 35751 35859 +3 27035 27153 27152 +3 27037 27035 20345 +3 6882 34463 34326 +3 12686 26064 12774 +3 16915 16914 25604 +3 1525 24869 13792 +3 23638 24887 24886 +3 24659 23863 26327 +3 28215 28098 21182 +3 34676 34804 34675 +3 24560 25076 24025 +3 24363 24610 25861 +3 26118 25220 24027 +3 24722 23555 21889 +3 25233 21982 21606 +3 23177 25254 24448 +3 26328 24659 26327 +3 24659 24944 25048 +3 21268 25044 20652 +3 25143 25144 28230 +3 25216 21356 20739 +3 21356 23917 26097 +3 24877 24872 25357 +3 24185 25225 24230 +3 24630 14758 20815 +3 25400 24544 23675 +3 21884 16046 21696 +3 5469 2263 25708 +3 17321 25096 21376 +3 21065 23847 27637 +3 26036 26037 26178 +3 25891 26033 26032 +3 25745 25746 25887 +3 25888 26030 26029 +3 26097 24079 15405 +3 24982 15591 12272 +3 21234 23764 23958 +3 23851 22011 24656 +3 23863 24659 25048 +3 24944 25072 24083 +3 25048 24944 24083 +3 25072 25022 25296 +3 24083 25072 25296 +3 25044 25143 25176 +3 25010 25011 30535 +3 26152 26153 26293 +3 25046 25045 25999 +3 25501 25374 26085 +3 25531 25388 24014 +3 24544 24630 23675 +3 20861 26103 21629 +3 34411 34548 34410 +3 24128 24069 21451 +3 25022 13460 13364 +3 23621 23800 24287 +3 25370 23505 24834 +3 925 33672 927 +3 20842 25510 25532 +3 24696 20152 21983 +3 16593 16440 16441 +3 29570 29702 13748 +3 25708 25850 25849 +3 24500 3041 13890 +3 25850 25992 25991 +3 25849 25850 25991 +3 25992 26134 26133 +3 25991 25992 26133 +3 26134 26275 26274 +3 26133 26134 26274 +3 26275 13175 13271 +3 26274 26275 13271 +3 13175 5328 3725 +3 13271 13175 3725 +3 5328 21666 22153 +3 3725 5328 22153 +3 21666 24720 24974 +3 22153 21666 24974 +3 24720 26232 23761 +3 24974 24720 23761 +3 25668 2889 23761 +3 26232 25668 23761 +3 25039 26199 2889 +3 25668 25039 2889 +3 23888 23573 26199 +3 25039 23888 26199 +3 22782 22783 23573 +3 23888 22782 23573 +3 25247 25625 22783 +3 22782 25247 22783 +3 25237 20579 25625 +3 25247 25237 25625 +3 26246 20203 20579 +3 25237 26246 20579 +3 25384 23852 20203 +3 26246 25384 20203 +3 25354 24447 23852 +3 25384 25354 23852 +3 21754 25392 24447 +3 25354 21754 24447 +3 21607 30156 21424 +3 21754 21424 25392 +3 24526 12751 15739 +3 23718 23619 23830 +3 24504 13658 12751 +3 24526 24504 12751 +3 23726 20906 24746 +3 24594 25231 25938 +3 23433 13804 24939 +3 24342 24960 24939 +3 24369 23988 25387 +3 25387 23988 26098 +3 27035 27037 27153 +3 22493 25363 25253 +3 9882 10574 12221 +3 24392 24391 23893 +3 16003 25907 16004 +3 25604 25746 25745 +3 20823 21335 22877 +3 32836 32837 32944 +3 23698 22837 23174 +3 7003 25633 10978 +3 24393 24394 22837 +3 12107 25379 25783 +3 26029 26030 26171 +3 23611 24564 24381 +3 3036 14793 25681 +3 25466 25467 25609 +3 24513 24919 25046 +3 26289 26290 21234 +3 25296 25022 13364 +3 13460 24008 24003 +3 13364 13460 24003 +3 24008 23697 23696 +3 12421 23656 24594 +3 23744 21915 24748 +3 24003 24008 23696 +3 26008 26150 26149 +3 24269 17086 24589 +3 34463 6882 6881 +3 13505 13596 13506 +3 5351 4552 4553 +3 26053 26052 15861 +3 23697 23822 23767 +3 21055 22287 25628 +3 13115 12058 12139 +3 16068 15927 18717 +3 15860 16000 15999 +3 24052 23967 24887 +3 23638 24052 24887 +3 24704 24825 24887 +3 23967 24704 24887 +3 24878 24874 25451 +3 26818 24637 24530 +3 21795 24722 21889 +3 24560 24279 23177 +3 21888 20658 25359 +3 21720 24483 22099 +3 23703 25932 3624 +3 17162 2920 16997 +3 20158 26579 24957 +3 6534 25372 6654 +3 25789 22584 22585 +3 22584 22487 22106 +3 22562 22661 24185 +3 16108 16107 23938 +3 24029 23992 25530 +3 24588 24484 24813 +3 25602 25744 25743 +3 23675 24630 20815 +3 23240 21318 21408 +3 15237 15111 23687 +3 23548 23663 23662 +3 24196 15673 15672 +3 25790 22682 25791 +3 25062 25063 24513 +3 25603 25604 25745 +3 25746 25888 25887 +3 25467 25610 25609 +3 25610 25752 25751 +3 25943 23504 22780 +3 25334 25333 22780 +3 23696 23697 23767 +3 23822 23139 25181 +3 23767 23822 25181 +3 23139 25305 24247 +3 24151 24150 24091 +3 11856 12023 23982 +3 24170 25517 25515 +3 22367 24215 20599 +3 26090 26089 14331 +3 24872 24877 25388 +3 12358 25570 25571 +3 21628 24544 25400 +3 23992 24029 20861 +3 14989 14870 23796 +3 3041 4518 2902 +3 23658 25383 25823 +3 23800 24288 24287 +3 24572 25796 25795 +3 20560 20561 20559 +3 24571 24572 25795 +3 25796 25971 23826 +3 24046 12443 25205 +3 21536 25542 25684 +3 26292 26293 12355 +3 15445 24871 19984 +3 25851 25993 25992 +3 25850 25851 25992 +3 25993 26135 26134 +3 25992 25993 26134 +3 26135 26276 26275 +3 26134 26135 26275 +3 26276 22488 13175 +3 26275 26276 13175 +3 22488 14964 5328 +3 13175 22488 5328 +3 14964 20220 21666 +3 5328 14964 21666 +3 20220 24846 24720 +3 21666 20220 24720 +3 23862 26232 24720 +3 24846 23862 24720 +3 13565 25668 26232 +3 23862 13565 26232 +3 12986 25039 25668 +3 13565 12986 25668 +3 23695 23888 25039 +3 12986 23695 25039 +3 22880 22782 23888 +3 23695 22880 23888 +3 25007 25247 22782 +3 22880 25007 22782 +3 15869 25237 25247 +3 25007 15869 25247 +3 24551 26246 25237 +3 15869 24551 25237 +3 23972 25384 26246 +3 24551 23972 26246 +3 25421 25354 25384 +3 23972 25421 25384 +3 26242 21754 25354 +3 25421 26242 25354 +3 24520 29358 21719 +3 27982 24520 21719 +3 24533 24526 15739 +3 12751 24692 24691 +3 26298 24504 24526 +3 26297 26298 24526 +3 13296 24594 25938 +3 25231 23823 24776 +3 24457 22664 23433 +3 13804 24938 24939 +3 25956 24644 26098 +3 24414 25315 23510 +3 24532 21373 24300 +3 26165 26306 26305 +3 20827 25108 24260 +3 24919 24920 25141 +3 13663 22560 23076 +3 24105 25474 25473 +3 25894 26036 26035 +3 25893 25894 26035 +3 26319 23771 23561 +3 26036 26178 26177 +3 23771 25448 24436 +3 26318 26319 23561 +3 23679 12008 24570 +3 23561 23771 24436 +3 24673 25482 25053 +3 25052 24673 25053 +3 25780 25781 25943 +3 23504 25969 22780 +3 25181 23139 24247 +3 23930 24209 24247 +3 25305 23930 24247 +3 20599 20515 24209 +3 24167 24170 25515 +3 22384 24170 24167 +3 28225 24429 29676 +3 29570 13748 13650 +3 25763 25905 25762 +3 10465 11671 21091 +3 24588 24813 24812 +3 25814 24269 23916 +3 26329 26328 26187 +3 23930 20599 24209 +3 24813 24759 24812 +3 20436 23931 23601 +3 13721 13622 13623 +3 33739 33738 33611 +3 23601 23968 23967 +3 24052 23601 23967 +3 24703 24704 23967 +3 23968 24703 23967 +3 24530 24637 24704 +3 24703 24530 24704 +3 25076 24560 23177 +3 25936 26816 24530 +3 13174 24434 22099 +3 24279 14839 25254 +3 17162 16997 16998 +3 24105 24100 25652 +3 24157 24158 23254 +3 24913 24157 23254 +3 27179 11834 27297 +3 24528 24243 24171 +3 24413 25012 11770 +3 20599 24215 24811 +3 24005 13196 16463 +3 23620 25531 24014 +3 24384 24385 25654 +3 24015 25529 25530 +3 15320 15448 15447 +3 21329 21417 21419 +3 25458 22011 25457 +3 20435 23931 20436 +3 23979 20221 20884 +3 25601 25602 25743 +3 26315 26316 25289 +3 24157 31752 24158 +3 31046 31108 31107 +3 34600 19432 34219 +3 25609 25610 25751 +3 25752 25894 25893 +3 22201 26239 25780 +3 25781 23504 25943 +3 20515 20599 24811 +3 24215 12995 24125 +3 24811 24215 24125 +3 19677 25514 24855 +3 8680 9278 11671 +3 25068 25769 11770 +3 25020 25016 12712 +3 24698 25911 25910 +3 25012 23551 11770 +3 25978 24356 25106 +3 24484 21815 24813 +3 26103 21628 21629 +3 25529 24029 25530 +3 26062 24122 25635 +3 24779 23756 24374 +3 21822 21450 23673 +3 24291 25581 25567 +3 24892 24395 11838 +3 26012 26153 1678 +3 25971 16236 25454 +3 25795 25796 23826 +3 25968 24409 23556 +3 25063 23719 24513 +3 25100 25431 23801 +3 21246 24943 12251 +3 12456 23632 3322 +3 15401 15272 15273 +3 25994 26136 26135 +3 25993 25994 26135 +3 26136 26277 26276 +3 26135 26136 26276 +3 26277 20492 22488 +3 26276 26277 22488 +3 20492 14965 14964 +3 22488 20492 14964 +3 14965 23253 20220 +3 14964 14965 20220 +3 23253 24845 24846 +3 20220 23253 24846 +3 24965 23862 24846 +3 24845 24965 24846 +3 25159 13565 23862 +3 24965 25159 23862 +3 23077 12986 13565 +3 25159 23077 13565 +3 23077 23883 23695 +3 12986 23077 23695 +3 23883 23567 22880 +3 23695 23883 22880 +3 25086 25007 22880 +3 23567 25086 22880 +3 24383 15869 25007 +3 25086 24383 25007 +3 24665 24551 15869 +3 24383 24665 15869 +3 24050 23972 24551 +3 24665 24050 24551 +3 23945 25421 23972 +3 24050 23945 23972 +3 33789 34338 17815 +3 17815 34338 11442 +3 24077 24323 24956 +3 24244 24311 24243 +3 15739 12751 24691 +3 24692 12535 14273 +3 26157 26298 26297 +3 26156 26157 26297 +3 25938 25231 24776 +3 33052 33157 33156 +3 11690 24762 24457 +3 22664 13804 23433 +3 26121 26261 24966 +3 26001 25931 24046 +3 25805 21917 12624 +3 22296 25446 24675 +3 25302 24743 24981 +3 21335 24779 24709 +3 24565 21374 17264 +3 20158 20244 26579 +3 26035 26036 26177 +3 26178 26319 26318 +3 25583 25588 22201 +3 26239 25781 25780 +3 24319 25588 25583 +3 24299 24319 25583 +3 25448 25100 25238 +3 25588 26239 22201 +3 25329 21634 25328 +3 25052 25053 11944 +3 26089 14341 14331 +3 24726 24501 23647 +3 24125 12995 24761 +3 25713 24556 25714 +3 25979 21334 20745 +3 23142 24007 23044 +3 23951 20061 16464 +3 26051 26050 25908 +3 26193 26192 26050 +3 25167 25035 24854 +3 25012 26204 24754 +3 24351 25116 24710 +3 25909 26051 25908 +3 24468 26288 23706 +3 26113 24591 24370 +3 24428 24345 23706 +3 15582 15581 15451 +3 23931 24888 23968 +3 23601 23931 23968 +3 24587 24703 23968 +3 24888 24587 23968 +3 35692 35849 35756 +3 24587 25936 24703 +3 26211 25061 12801 +3 25379 20902 25783 +3 23177 24279 25254 +3 16166 23174 25712 +3 14839 24363 4780 +3 25254 14839 4780 +3 24485 24157 24913 +3 24162 24913 23254 +3 15631 15767 15766 +3 24287 24288 25566 +3 21910 24351 24434 +3 25654 25530 12623 +3 6658 28366 26522 +3 24547 23918 20827 +3 25654 24015 25530 +3 22881 23678 21792 +3 23591 24645 24638 +3 25193 25639 24522 +3 26311 23974 12996 +3 12189 24959 25824 +3 25744 25886 25885 +3 25510 25663 11752 +3 23686 23740 22955 +3 16145 16004 25763 +3 24875 20514 25858 +3 25678 24875 25858 +3 25751 25752 25893 +3 24436 25448 25238 +3 21631 24319 24299 +3 26248 21631 24299 +3 22979 22881 21792 +3 20429 23973 23619 +3 24018 23749 23969 +3 32611 32725 32610 +3 23625 24706 23616 +3 24706 23627 23616 +3 25713 25714 23690 +3 34410 34547 34409 +3 13174 21910 24434 +3 12022 12103 20923 +3 23634 23594 25925 +3 24029 26103 20861 +3 24385 24015 25654 +3 25489 25340 24907 +3 25253 25252 24625 +3 24601 25805 25804 +3 23545 24598 24593 +3 24487 25687 23600 +3 24815 24487 23600 +3 16236 22975 25149 +3 23826 25971 25454 +3 9634 4545 24026 +3 13013 11963 10233 +3 24774 20014 15536 +3 22199 24878 24875 +3 35898 35735 35743 +3 35594 35378 35881 +3 25995 26137 26136 +3 25994 25995 26136 +3 26137 26278 26277 +3 26136 26137 26277 +3 26278 23820 20492 +3 26277 26278 20492 +3 23820 15086 14965 +3 20492 23820 14965 +3 15086 24669 23253 +3 14965 15086 23253 +3 24669 24844 24845 +3 23253 24669 24845 +3 24844 25027 24965 +3 24845 24844 24965 +3 13393 25159 24965 +3 25027 13393 24965 +3 13393 25256 23077 +3 25159 13393 23077 +3 25257 23883 23077 +3 25256 25257 23077 +3 26075 23567 23883 +3 25257 26075 23883 +3 24753 25086 23567 +3 26075 24753 23567 +3 24386 24383 25086 +3 24753 24386 25086 +3 24664 24665 24383 +3 24386 24664 24383 +3 23905 24050 24665 +3 24664 23905 24665 +3 24021 23945 24050 +3 23905 24021 24050 +3 24227 21746 23315 +3 24021 23315 23945 +3 23895 23894 25326 +3 25347 24941 20763 +3 24691 24692 14273 +3 12535 23235 20738 +3 26015 26157 26156 +3 26014 26015 26156 +3 20984 25373 22391 +3 24920 24921 23659 +3 24946 24945 11690 +3 24762 22664 24457 +3 23935 13176 24414 +3 24700 24583 4248 +3 29767 21607 19794 +3 25232 25816 24896 +3 21355 21445 25194 +3 25743 25744 25885 +3 24828 22875 24958 +3 26316 22366 25289 +3 26177 26178 26318 +3 23801 24875 25678 +3 24308 25449 20429 +3 29947 452 24068 +3 25348 21813 21814 +3 32837 32836 32724 +3 23935 24414 24191 +3 25398 12007 21814 +3 21634 25052 11944 +3 25449 24767 23973 +3 23267 25160 4662 +3 24868 25019 25328 +3 12110 24343 26195 +3 21813 25398 21814 +3 24217 24191 23718 +3 31047 31048 31109 +3 20429 23619 23718 +3 25166 24512 24714 +3 11332 25106 24356 +3 20520 23990 20521 +3 20014 23757 23743 +3 24196 20014 23743 +3 23757 24973 24972 +3 23743 23757 24972 +3 24973 26086 26076 +3 25917 24459 23869 +3 24483 23714 13174 +3 21814 24569 6850 +3 35755 34247 35382 +3 23931 20435 24888 +3 24889 24903 20435 +3 24586 24587 24888 +3 24903 24586 24888 +3 21883 21980 23795 +3 21883 21790 21511 +3 13852 21508 23847 +3 23878 21244 21157 +3 25773 23875 13555 +3 24010 21872 23951 +3 35810 35494 35650 +3 14083 35685 30023 +3 25522 24485 23670 +3 22007 25522 23670 +3 24972 24973 26076 +3 26086 11856 12190 +3 25139 14473 17170 +3 13274 13808 12715 +3 24076 24074 23669 +3 23717 20429 23718 +3 16753 16752 25466 +3 15951 15812 15813 +3 23545 23547 24598 +3 22482 22385 25494 +3 22079 21333 24525 +3 10979 35561 13618 +3 23720 24465 26069 +3 12188 24501 12104 +3 11356 4523 9278 +3 25038 23494 22563 +3 25067 26234 25858 +3 3997 4800 16867 +3 25713 12639 24556 +3 24767 24018 23973 +3 26285 25670 26284 +3 23510 24308 23717 +3 24406 24401 25785 +3 25043 30099 25279 +3 24406 25660 25649 +3 24401 24406 25649 +3 26076 26086 12190 +3 23642 26220 24934 +3 11856 23982 25440 +3 25037 25169 23925 +3 25597 25598 25739 +3 24926 12188 12104 +3 26206 13015 24766 +3 12188 24385 24384 +3 24501 12188 24384 +3 23562 24222 23604 +3 20577 19332 18124 +3 23720 12357 24465 +3 25153 22011 25458 +3 22975 22386 25088 +3 25454 16236 25149 +3 25687 23750 25545 +3 25816 26056 25958 +3 24411 25678 23516 +3 25996 5208 369 +3 2530 2343 4669 +3 25660 24389 23575 +3 25996 26138 26137 +3 25995 25996 26137 +3 26138 26279 26278 +3 26137 26138 26278 +3 26279 22393 23820 +3 26278 26279 23820 +3 22393 24453 15086 +3 23820 22393 15086 +3 24670 24669 15086 +3 24453 24670 15086 +3 23752 24844 24669 +3 24670 23752 24669 +3 25006 25027 24844 +3 23752 25006 24844 +3 25006 25081 13393 +3 25027 25006 13393 +3 23879 25256 13393 +3 25081 23879 13393 +3 23884 25257 25256 +3 23879 23884 25256 +3 23940 26075 25257 +3 23884 23940 25257 +3 23940 12359 24753 +3 26075 23940 24753 +3 23511 24386 24753 +3 12359 23511 24753 +3 24783 24664 24386 +3 23511 24783 24386 +3 23906 23905 24664 +3 24783 23906 24664 +3 24020 24021 23905 +3 23906 24020 23905 +3 24226 28989 24227 +3 24020 24227 24021 +3 25326 25347 20763 +3 24941 22681 22583 +3 23978 26111 23565 +3 25869 25910 24512 +3 23548 23552 23663 +3 23552 23923 23663 +3 21967 18518 22056 +3 25923 25513 25370 +3 24808 24809 24946 +3 24945 24762 11690 +3 24843 23664 23276 +3 25653 24514 23609 +3 32093 32193 32092 +3 7082 35469 26522 +3 25886 26028 26027 +3 25885 25886 26027 +3 23903 21065 29411 +3 25947 24148 25803 +3 24129 23801 25678 +3 23887 24470 26234 +3 25670 13079 26284 +3 25807 23268 25665 +3 25649 25660 23575 +3 24389 26238 26227 +3 23575 24389 26227 +3 23766 24975 24973 +3 26238 23866 23865 +3 21634 11944 25328 +3 24164 25819 23918 +3 26227 26238 23865 +3 23866 23657 12533 +3 23865 23866 12533 +3 23990 20520 24109 +3 12190 11856 25440 +3 26166 26307 26306 +3 25386 24716 25440 +3 26208 23599 20761 +3 23714 21910 13174 +3 23657 25484 25483 +3 22563 23494 22662 +3 12533 23657 25483 +3 20435 24903 24888 +3 24585 24586 24903 +3 24889 24585 24903 +3 33999 33998 33863 +3 24585 24636 24586 +3 25718 23878 21157 +3 26312 24239 23974 +3 26091 12023 11856 +3 25297 25299 21957 +3 26814 26929 24636 +3 30490 24750 9402 +3 25806 25522 22007 +3 22777 25806 22007 +3 23982 25386 25440 +3 25526 16761 24716 +3 23589 23636 23635 +3 23635 23636 23054 +3 16292 16291 16148 +3 23054 23636 23686 +3 22099 24350 24267 +3 33056 33161 33055 +3 25949 23519 25664 +3 16867 4800 16710 +3 25825 20743 25396 +3 13246 13342 13245 +3 24926 12104 24393 +3 24701 24926 24393 +3 12715 24891 12804 +3 25685 22200 26193 +3 24199 12251 24106 +3 30629 30763 23569 +3 24309 22563 22295 +3 26138 369 26139 +3 25942 30360 30226 +3 25484 15317 25483 +3 22039 15317 22136 +3 24984 23978 24415 +3 22585 20681 23930 +3 21267 12997 21448 +3 25386 25526 24716 +3 12801 22051 16761 +3 25526 12801 16761 +3 24393 12104 24394 +3 25665 24399 25288 +3 24375 25827 24257 +3 21242 23910 23970 +3 1024 23868 3474 +3 24701 24393 23698 +3 22680 24193 23498 +3 26078 25997 24399 +3 25593 25594 25735 +3 25877 25878 26019 +3 22386 26207 26206 +3 25149 22975 25088 +3 24122 24766 25576 +3 24729 25248 24476 +3 26024 26166 26165 +3 26023 26024 26165 +3 25217 24997 25531 +3 35627 24860 1529 +3 13077 25650 26096 +3 25333 25332 24788 +3 26139 26280 26279 +3 26138 26139 26279 +3 26280 23960 22393 +3 26279 26280 22393 +3 23960 20600 24453 +3 22393 23960 24453 +3 15882 24670 24453 +3 20600 15882 24453 +3 23751 23752 24670 +3 15882 23751 24670 +3 23735 25006 23752 +3 23751 23735 23752 +3 23735 25082 25081 +3 25006 23735 25081 +3 25082 25207 23879 +3 25081 25082 23879 +3 25207 25648 23884 +3 23879 25207 23884 +3 25648 23939 23940 +3 23884 25648 23940 +3 23939 23640 12359 +3 23940 23939 12359 +3 23666 23511 12359 +3 23640 23666 12359 +3 23540 24783 23511 +3 23666 23540 23511 +3 24306 23906 24783 +3 23540 24306 24783 +3 24883 24020 23906 +3 24306 24883 23906 +3 25144 25143 25044 +3 24883 24226 24020 +3 20763 24941 22583 +3 23559 23630 22583 +3 25728 25720 24450 +3 23742 23756 24779 +3 26018 26160 26159 +3 26017 26018 26159 +3 21815 24782 24813 +3 25876 26018 26017 +3 15603 12006 23837 +3 8483 7547 12141 +3 22744 21376 23609 +3 25674 11942 24531 +3 11942 24848 23655 +3 26219 23928 24514 +3 26028 26170 26169 +3 25145 25011 25829 +3 22532 25344 25345 +3 26027 26028 26169 +3 25067 23887 26234 +3 390 504 733 +3 22881 22882 23678 +3 23887 23720 11941 +3 24849 25999 25060 +3 22563 22662 22295 +3 27836 27837 21247 +3 24976 26092 26091 +3 12275 24309 25959 +3 24975 24976 26091 +3 22879 24154 22781 +3 23987 25816 25232 +3 24242 26573 20494 +3 20519 24109 20520 +3 25060 25059 22051 +3 12801 25060 22051 +3 22194 12358 25018 +3 25154 13560 21246 +3 23512 24575 24572 +3 22959 25088 26063 +3 24644 23689 24134 +3 26702 22777 26703 +3 24765 24889 23990 +3 27397 20519 20601 +3 24481 24585 24889 +3 27280 24765 24109 +3 11728 7527 32914 +3 24765 24481 24889 +3 66 35807 35576 +3 23757 23766 24973 +3 22755 23878 25718 +3 20679 23882 24780 +3 25299 22755 21957 +3 21957 22755 25718 +3 23639 25806 22777 +3 30880 30934 30879 +3 23639 26240 25806 +3 2267 14521 24417 +3 23958 23964 12269 +3 23589 23590 23636 +3 23796 21790 23795 +3 23636 23637 23686 +3 23687 23741 23740 +3 23686 23687 23740 +3 23741 23796 23795 +3 23740 23741 23795 +3 15631 15766 23635 +3 23853 23910 21790 +3 23868 24701 23698 +3 6385 336 23871 +3 24425 24868 25327 +3 23771 24628 25448 +3 24955 23652 23700 +3 12271 12270 25319 +3 4381 24656 1519 +3 25999 21268 25059 +3 15446 15576 15445 +3 26280 26139 3880 +3 26329 26330 24962 +3 25060 25999 25059 +3 25045 25044 21268 +3 24265 24264 24983 +3 22581 22582 20017 +3 34006 34005 33870 +3 23702 22487 25789 +3 13859 1024 15201 +3 23868 23698 3474 +3 26160 26161 26301 +3 24712 24837 24806 +3 24807 24173 25290 +3 24806 24807 25290 +3 26207 20761 13015 +3 25088 22386 26206 +3 26062 26063 24122 +3 25433 30503 30504 +3 25776 24961 24154 +3 22683 11107 22879 +3 24054 24040 25133 +3 33483 33484 33602 +3 14153 23514 25510 +3 26281 3880 26282 +3 13059 13753 25184 +3 24301 27499 20757 +3 13081 23960 26280 +3 26281 13081 26280 +3 24827 20600 23960 +3 13081 24827 23960 +3 24827 20867 15882 +3 20600 24827 15882 +3 13653 23751 15882 +3 20867 13653 15882 +3 25782 23735 23751 +3 13653 25782 23751 +3 24835 25082 23735 +3 25782 24835 23735 +3 24835 25151 25207 +3 25082 24835 25207 +3 24165 25648 25207 +3 25151 24165 25207 +3 24165 21886 23939 +3 25648 24165 23939 +3 21886 25395 23640 +3 23939 21886 23640 +3 25395 23886 23666 +3 23640 25395 23666 +3 23777 23540 23666 +3 23886 23777 23666 +3 23952 24306 23540 +3 23777 23952 23540 +3 23804 24883 24306 +3 23952 23804 24306 +3 25673 24226 24883 +3 23804 25673 24883 +3 22681 23559 22583 +3 21072 20987 29699 +3 24568 23981 21543 +3 23486 24568 21543 +3 26160 26301 26300 +3 26159 26160 26300 +3 25212 24802 25478 +3 25857 25212 25478 +3 25212 24626 24802 +3 24626 23671 24802 +3 24954 24955 23700 +3 23652 11547 23610 +3 25653 26219 24514 +3 25947 25803 23928 +3 25497 2542 24277 +3 20822 24442 24689 +3 26170 26311 26310 +3 23974 22296 24441 +3 25510 23514 25663 +3 19902 24128 29833 +3 24470 23887 11941 +3 24465 23537 24582 +3 12444 24771 12357 +3 12275 25959 23608 +3 25097 16597 24086 +3 23647 24768 23769 +3 23513 24578 23512 +3 25730 25731 25872 +3 23613 23617 23798 +3 25872 25873 26014 +3 22975 25477 22386 +3 16236 14511 22975 +3 18644 21034 20952 +3 25999 25045 21268 +3 32145 32245 32144 +3 23825 14511 16236 +3 30819 30685 23353 +3 24535 24573 25685 +3 21151 23845 23788 +3 25387 26098 24998 +3 25346 28347 25462 +3 23610 11547 25544 +3 24555 22663 22761 +3 24935 24936 24681 +3 22581 20017 24681 +3 23538 25317 24936 +3 20017 24935 24681 +3 25497 25498 25317 +3 24935 23538 24936 +3 24277 23980 25498 +3 23538 25497 25317 +3 24277 24271 24901 +3 25497 24277 25498 +3 30928 30986 30927 +3 34229 34366 21549 +3 25243 26240 23639 +3 24098 25243 23639 +3 15441 15313 15314 +3 21008 21093 23674 +3 16001 16000 25909 +3 32944 32945 33050 +3 25593 25592 118 +3 25474 23530 23920 +3 24809 24945 24946 +3 14870 23853 21790 +3 23741 14989 23796 +3 24896 25958 23723 +3 23796 14870 21790 +3 15405 24101 25222 +3 25780 25943 24679 +3 25017 25977 25024 +3 4680 4018 9525 +3 25472 25473 24837 +3 23989 24325 24133 +3 26282 5625 26283 +3 26219 25947 23928 +3 21915 25372 20925 +3 2956 24429 24345 +3 282 737 283 +3 24751 25819 24164 +3 22395 25087 25791 +3 22682 22390 25791 +3 25669 13859 24871 +3 1024 3474 15201 +3 24351 24435 25116 +3 26236 23730 21911 +3 24674 24163 23774 +3 24183 12451 25204 +3 30503 25574 30368 +3 26206 26207 13015 +3 22959 26063 26062 +3 24290 22959 26062 +3 23665 23536 23460 +3 21158 23665 23460 +3 24148 24113 25803 +3 25431 22199 23801 +3 25087 23893 25790 +3 21156 22391 22682 +3 26283 5625 26142 +3 23642 25495 26220 +3 23644 13081 26281 +3 26282 23644 26281 +3 25817 24827 13081 +3 23644 25817 13081 +3 13240 20867 24827 +3 25817 13240 24827 +3 25812 13653 20867 +3 13240 25812 20867 +3 25812 25820 25782 +3 13653 25812 25782 +3 25820 24836 24835 +3 25782 25820 24835 +3 24836 24778 25151 +3 24835 24836 25151 +3 24778 24156 24165 +3 25151 24778 24165 +3 24156 12336 21886 +3 24165 24156 21886 +3 12336 11669 25395 +3 21886 12336 25395 +3 11669 23830 23886 +3 25395 11669 23886 +3 25676 23777 23886 +3 23830 25676 23886 +3 23966 23952 23777 +3 25676 23966 23777 +3 24019 23804 23952 +3 23966 24019 23952 +3 24225 25673 23804 +3 24019 24225 23804 +3 20987 21072 25673 +3 24225 20987 25673 +3 23874 25675 24741 +3 35778 35558 35702 +3 26301 24366 24452 +3 26300 26301 24452 +3 25857 25478 22486 +3 20661 25857 22486 +3 26037 26179 26178 +3 25531 24872 25388 +3 23700 23652 23610 +3 11547 22581 25544 +3 20680 25937 23496 +3 22582 20680 23496 +3 26111 20680 22582 +3 23565 26111 22582 +3 12996 23974 24441 +3 24441 22296 23850 +3 25887 26029 26028 +3 20263 25097 24964 +3 26069 24465 24582 +3 22294 22389 24582 +3 22199 24204 24878 +3 24874 21423 25451 +3 24514 23928 24427 +3 24675 24797 23850 +3 4276 25870 1678 +3 26795 24359 25785 +3 24204 24874 24878 +3 14941 5136 14395 +3 25663 24964 24280 +3 25431 25428 22199 +3 23566 23461 24312 +3 24103 23699 24868 +3 25614 25615 25756 +3 336 4785 25217 +3 23433 24939 24940 +3 24092 24151 24091 +3 17246 25599 25598 +3 22682 22391 25502 +3 24934 26220 24935 +3 22367 22464 24124 +3 24782 24759 24813 +3 1679 26153 26152 +3 15187 1149 15313 +3 25490 25505 25302 +3 30845 24202 30846 +3 19517 19901 24022 +3 19993 20074 20073 +3 29430 21382 30688 +3 30611 28107 28218 +3 21701 21796 28546 +3 27374 19791 30738 +3 28599 28601 30336 +3 29540 26524 27904 +3 19560 19559 26598 +3 29568 29700 27751 +3 29022 29568 27751 +3 21427 21516 21426 +3 27607 30470 29812 +3 7404 19736 20240 +3 15458 8974 15329 +3 34275 34274 34136 +3 30897 30951 30896 +3 10601 11404 6006 +3 35904 35674 11875 +3 2810 29017 29555 +3 35481 35851 35443 +3 18600 18696 7186 +3 27607 29812 27838 +3 4666 570 18600 +3 11428 12690 7186 +3 29022 27751 28461 +3 18696 7185 7186 +3 26524 27607 27838 +3 30470 29022 28461 +3 26524 27838 27904 +3 30470 28461 29812 +3 18422 18308 20323 +3 5474 20176 29555 +3 3341 18422 20323 +3 27902 29491 29413 +3 27893 27902 29413 +3 29491 6006 29413 +3 20200 24062 24001 +3 22327 19784 19788 +3 20176 2810 29555 +3 29697 17316 28016 +3 14618 30669 29017 +3 2810 14618 29017 +3 26918 27019 29138 +3 26478 26481 27380 +3 29565 29427 14249 +3 343 11403 11437 +3 27787 26481 26478 +3 24123 24230 24855 +3 7185 11428 7186 +3 27761 27787 26478 +3 11428 27787 27761 +3 12690 11428 27761 +3 14849 5474 29555 +3 26481 27385 27380 +3 22328 22327 19788 +3 28726 5474 14849 +3 19784 19455 19456 +3 30932 30990 30931 +3 26965 28726 28594 +3 19788 19784 19456 +3 30693 29540 19913 +3 28594 28726 14849 +3 30693 19913 30669 +3 14618 30693 30669 +3 30465 18008 19344 +3 29540 27904 19913 +3 30425 30465 19344 +3 18008 27019 26918 +3 29139 29125 17251 +3 29138 29139 17251 +3 26347 26348 27138 +3 32096 32095 31995 +3 26708 26820 26819 +3 28017 28016 28134 +3 26603 26708 26707 +3 26707 26708 26819 +3 12460 15060 12053 +3 235 19136 13426 +3 29125 26830 27399 +3 27399 26830 29154 +3 19903 26965 19795 +3 6781 19903 19795 +3 13426 15606 15743 +3 33370 33371 33483 +3 19197 11406 451 +3 6282 19903 6781 +3 19136 19197 451 +3 28717 28731 30425 +3 19795 26965 28594 +3 27385 28731 28717 +3 27380 27385 28717 +3 19344 18008 26918 +3 28731 30465 30425 +3 7069 11576 7006 +3 27019 29139 29138 +3 19576 26907 30822 +3 19638 343 345 +3 26566 27841 29557 +3 567 566 21555 +3 26477 27373 27315 +3 25318 12422 25547 +3 29921 29920 29791 +3 30317 30450 30316 +3 29659 29792 29658 +3 29792 29921 29791 +3 30721 30722 6883 +3 29772 29773 29901 +3 28233 29287 30500 +3 29287 21749 7289 +3 29271 6282 2812 +3 29151 29271 2812 +3 21562 29813 11406 +3 19197 21562 11406 +3 28373 28372 29813 +3 27491 27635 29151 +3 21562 28373 29813 +3 17251 29125 27399 +3 2812 6282 6781 +3 33371 33484 33483 +3 26830 28233 29154 +3 11463 11464 26518 +3 26592 18454 21289 +3 21846 19790 30200 +3 28021 25390 24143 +3 30052 30051 29920 +3 19734 30478 27434 +3 29921 30052 29920 +3 30184 30183 30051 +3 30052 30184 30051 +3 30317 30316 30183 +3 30184 30317 30183 +3 30450 30449 30316 +3 30584 30583 30449 +3 30450 30584 30449 +3 30718 30717 30583 +3 30584 30718 30583 +3 31538 31537 31465 +3 33156 33157 33261 +3 30500 29287 7289 +3 21749 30554 17253 +3 7408 7288 27491 +3 27635 29271 29151 +3 28252 29680 28372 +3 28373 28252 28372 +3 19567 30498 29680 +3 28252 19567 29680 +3 26472 26828 30498 +3 30474 7288 7408 +3 30469 30474 7408 +3 30554 21752 26905 +3 29154 28233 30500 +3 24202 30845 25675 +3 23710 30233 30234 +3 712 7771 714 +3 28841 28840 28708 +3 7080 35636 27868 +3 33609 33736 33608 +3 25407 12691 25406 +3 31110 31173 31172 +3 30925 30983 30924 +3 19630 18262 6927 +3 17011 11008 14514 +3 30716 20240 30715 +3 25675 30844 11771 +3 21942 21943 18262 +3 26607 26606 26510 +3 29511 29512 29649 +3 17282 7404 30717 +3 30718 17282 30717 +3 26356 30866 30865 +3 19526 13311 19214 +3 7289 21749 17253 +3 27408 27497 27760 +3 28813 30474 30469 +3 28808 28813 30469 +3 19567 26472 30498 +3 26473 27873 26828 +3 26472 26473 26828 +3 27400 27412 28808 +3 19793 18799 27873 +3 17253 30554 26905 +3 7288 27635 27491 +3 2948 17310 27167 +3 29084 27760 26905 +3 24704 24637 26934 +3 12335 27993 28109 +3 27993 28110 28109 +3 20509 20592 20590 +3 28110 28227 28226 +3 28109 28110 28226 +3 28227 23659 28226 +3 12020 12019 11934 +3 28873 26566 29557 +3 29903 29904 30034 +3 26566 30609 19242 +3 27841 26566 19242 +3 25692 25834 6406 +3 19242 30609 27173 +3 17316 28364 19097 +3 28592 28724 28613 +3 19360 19736 7404 +3 17282 19360 7404 +3 26359 30863 30862 +3 26356 30865 26357 +3 29084 27408 27760 +3 27408 20817 11512 +3 27983 27992 26484 +3 26486 27412 27400 +3 26473 19793 27873 +3 28488 28616 18799 +3 19793 28488 18799 +3 28488 6852 18010 +3 11437 27992 27983 +3 11397 11437 27983 +3 27785 30084 30091 +3 21752 29084 26905 +3 24921 28226 23659 +3 24758 25653 2952 +3 27877 27994 27993 +3 12167 27877 12250 +3 27994 28111 28110 +3 27993 27994 28110 +3 28111 28228 28227 +3 28110 28111 28227 +3 18408 30689 23042 +3 34229 21548 34091 +3 19901 29020 24022 +3 28580 28709 28579 +3 26501 26505 28460 +3 28483 28369 28885 +3 30817 25932 25240 +3 28724 25836 28343 +3 28364 28592 28613 +3 23081 23082 23179 +3 19360 2539 21941 +3 19448 21659 21468 +3 29245 29382 29244 +3 21555 19638 345 +3 27497 27408 11512 +3 27785 30091 11512 +3 26484 26486 27400 +3 27412 28813 28808 +3 28616 28488 18010 +3 344 345 11397 +3 6852 30619 30753 +3 18010 6852 30753 +3 345 11437 11397 +3 30619 26602 28249 +3 30084 30079 28487 +3 27992 26486 26484 +3 33484 33603 33602 +3 12084 12003 27647 +3 27762 27878 27877 +3 12167 12250 12166 +3 27878 27995 27994 +3 27877 27878 27994 +3 27995 28112 28111 +3 27994 27995 28111 +3 28112 28229 28228 +3 28111 28112 28228 +3 32838 32837 32725 +3 25045 25046 25144 +3 7295 5607 19456 +3 27280 20519 27397 +3 28460 28483 28885 +3 21770 27433 20896 +3 23984 25314 21360 +3 25111 20759 27502 +3 12286 14661 14568 +3 29512 29650 29649 +3 19736 19360 21941 +3 2539 21659 19448 +3 30193 30192 30060 +3 345 343 11437 +3 20817 27785 11512 +3 30084 28188 30091 +3 567 21555 21554 +3 568 567 21554 +3 30753 30619 28249 +3 21555 345 344 +3 26602 28489 27316 +3 28249 26602 27316 +3 28489 21646 17309 +3 19003 19577 18057 +3 19577 567 568 +3 25144 25046 25142 +3 28188 30084 28487 +3 27647 12086 27762 +3 27532 27649 12086 +3 27763 27879 27878 +3 27762 27763 27878 +3 27879 27996 27995 +3 27878 27879 27995 +3 27996 28113 28112 +3 27995 27996 28112 +3 28230 28229 28112 +3 28113 28230 28112 +3 34291 34429 34290 +3 25259 25260 27957 +3 11122 21330 6408 +3 32301 32300 32199 +3 28369 19517 30687 +3 28885 28369 30687 +3 19130 17104 6845 +3 29679 30611 18691 +3 28016 17316 28247 +3 28563 28692 28691 +3 21941 2539 19448 +3 21659 14247 21468 +3 27194 27077 25922 +3 29536 17381 22002 +3 30079 28598 19519 +3 19519 28598 2806 +3 19577 19686 18057 +3 21554 21555 344 +3 27316 28489 17309 +3 21646 236 28241 +3 17309 21646 28241 +3 30998 30997 30939 +3 236 21565 29150 +3 24422 24510 24509 +3 19686 19577 568 +3 29395 21918 29396 +3 33441 33555 33554 +3 27649 27764 27763 +3 12086 27763 27762 +3 27764 27880 27879 +3 27763 27764 27879 +3 27880 27997 27996 +3 27879 27880 27996 +3 27997 28114 28113 +3 27996 27997 28113 +3 12809 21222 30023 +3 12809 35685 29417 +3 21353 28312 21444 +3 23522 22010 25178 +3 19563 26505 26501 +3 34933 35062 34932 +3 30289 19563 12510 +3 30287 30289 12510 +3 21508 21419 21417 +3 6279 28232 19792 +3 17316 19097 28247 +3 28364 28613 19097 +3 6971 6970 21468 +3 14247 6971 21468 +3 27139 29493 30478 +3 30061 30193 30060 +3 28487 30079 19519 +3 28598 11511 2806 +3 30731 7403 30730 +3 7403 19003 18057 +3 28241 236 29150 +3 30288 30155 29150 +3 27489 20989 27488 +3 21565 30288 29150 +3 16596 23471 15316 +3 35791 20864 13053 +3 27415 27533 27532 +3 21511 21790 21330 +3 27533 27650 27649 +3 27532 27533 27649 +3 27650 27765 27764 +3 27649 27650 27764 +3 27765 27881 27880 +3 27764 27765 27880 +3 27881 27998 27997 +3 27880 27881 27997 +3 27998 28115 28114 +3 27997 27998 28114 +3 25077 26454 26453 +3 22191 22095 22096 +3 26824 20095 26823 +3 21272 21271 21185 +3 27161 27280 27279 +3 28496 28497 30287 +3 26698 26699 26810 +3 27160 27161 27279 +3 28134 24188 28426 +3 26699 26811 26810 +3 24782 26789 24885 +3 4634 17377 24673 +3 17478 17477 6970 +3 6971 17478 6970 +3 35802 30635 35404 +3 32398 32503 32397 +3 11511 2771 17320 +3 2806 11511 17320 +3 30597 30731 30596 +3 21940 7403 18057 +3 30288 19566 27990 +3 30155 30288 27990 +3 18263 16932 18621 +3 17304 30343 21155 +3 30477 2922 24065 +3 27845 21003 27730 +3 24398 18932 28021 +3 27416 27534 27533 +3 27415 27416 27533 +3 27534 27651 27650 +3 27533 27534 27650 +3 27651 27766 27765 +3 27650 27651 27765 +3 27766 27882 27881 +3 27765 27766 27881 +3 27882 27999 27998 +3 27881 27882 27998 +3 28116 28115 27998 +3 27999 28116 27998 +3 23169 30560 30694 +3 20601 27516 27397 +3 27279 27280 27397 +3 28458 30203 28457 +3 29101 29100 28965 +3 13676 11616 11365 +3 29238 29237 29100 +3 28701 28833 28700 +3 26932 26943 26417 +3 28833 28966 28832 +3 26943 26418 26417 +3 26418 27268 27255 +3 17478 26943 26932 +3 17477 17478 26932 +3 32506 32505 32400 +3 32401 32506 32400 +3 2771 29288 5733 +3 17320 2771 5733 +3 7403 21940 30730 +3 29288 30740 2820 +3 20190 16178 21568 +3 30731 30730 30596 +3 27990 19566 28680 +3 11591 27063 11666 +3 26095 26672 25223 +3 26673 25089 26674 +3 22490 22588 22489 +3 11852 11853 11938 +3 27299 27417 27416 +3 27180 27299 11834 +3 27417 27535 27534 +3 27416 27417 27534 +3 27535 27652 27651 +3 27534 27535 27651 +3 27652 27767 27766 +3 27651 27652 27766 +3 27767 27883 27882 +3 27766 27767 27882 +3 27883 28000 27999 +3 27882 27883 27999 +3 28000 28117 28116 +3 27999 28000 28116 +3 25693 25835 25834 +3 12711 28138 12800 +3 29238 29375 29374 +3 19899 19595 19898 +3 29945 19142 26420 +3 28966 29101 28965 +3 28603 28602 27255 +3 28344 29945 26420 +3 28943 29078 28735 +3 26417 26418 27255 +3 28189 28943 28735 +3 21748 21382 29078 +3 28943 21748 29078 +3 30688 21748 17255 +3 22332 18770 30773 +3 21748 30688 21382 +3 2820 30740 22332 +3 18770 28127 30773 +3 5733 29288 2820 +3 30740 18770 22332 +3 30597 30596 30462 +3 30463 30597 30462 +3 24143 24475 28021 +3 30330 30463 30329 +3 19739 19687 19688 +3 21563 19942 19638 +3 11591 11592 27064 +3 29519 29657 29656 +3 31308 31375 31307 +3 25050 19916 25051 +3 27869 27985 29277 +3 27063 27181 27180 +3 34936 35065 34935 +3 27181 27300 27299 +3 27180 27181 27299 +3 27300 27418 27417 +3 27299 27300 27417 +3 27418 27536 27535 +3 27417 27418 27535 +3 27536 27653 27652 +3 27535 27536 27652 +3 27653 27768 27767 +3 27652 27653 27767 +3 27884 27883 27767 +3 27768 27884 27767 +3 28001 28000 27883 +3 27884 28001 27883 +3 28001 28118 28117 +3 28000 28001 28117 +3 32949 33055 32948 +3 31617 31712 31711 +3 26420 19142 27048 +3 30444 30578 30577 +3 19196 6901 28728 +3 19142 19962 27048 +3 19363 28596 21849 +3 28596 19196 28728 +3 17939 19363 21738 +3 28596 28728 21849 +3 13698 30023 23371 +3 26356 30867 30866 +3 30867 26356 30868 +3 6132 2271 28725 +3 28127 21839 21840 +3 30773 28127 21840 +3 30330 30329 30196 +3 30197 30330 30196 +3 30197 30196 30064 +3 30463 30462 30329 +3 29118 29117 28982 +3 30065 30197 30064 +3 28983 29118 28982 +3 19912 19032 2271 +3 29539 29944 29402 +3 19350 28126 29950 +3 11592 26948 27064 +3 29950 28126 30337 +3 29568 19350 14968 +3 30056 30055 29924 +3 29936 30067 29935 +3 14968 19350 29950 +3 29807 29936 29806 +3 30067 30066 29935 +3 29674 29807 29673 +3 34017 34016 33881 +3 21003 27961 21088 +3 27064 27182 27181 +3 27063 27064 27181 +3 27182 27301 27300 +3 27181 27182 27300 +3 27301 27419 27418 +3 27300 27301 27418 +3 27419 27537 27536 +3 27418 27419 27536 +3 27537 27654 27653 +3 27536 27537 27653 +3 27654 27769 27768 +3 27653 27654 27768 +3 27885 27884 27768 +3 27769 27885 27768 +3 28002 28001 27884 +3 27885 28002 27884 +3 28002 28119 28118 +3 28001 28002 28118 +3 29628 29489 22467 +3 29889 22763 30020 +3 20430 27265 27086 +3 35499 35708 13100 +3 14057 20430 27086 +3 26470 26460 27086 +3 30448 30447 30314 +3 23956 30600 28946 +3 19517 24022 23946 +3 28847 28846 28714 +3 14427 14426 12991 +3 25143 25282 25176 +3 29668 29667 29529 +3 29534 29533 29396 +3 30193 30326 30192 +3 22108 22203 29674 +3 29936 29935 29806 +3 26583 29493 27139 +3 11616 9534 11365 +3 29807 29806 29673 +3 30622 28873 2954 +3 2537 30770 2805 +3 18600 7186 11648 +3 22107 29673 29534 +3 28873 29557 2954 +3 29229 29230 29366 +3 29805 29804 29671 +3 29672 29805 29671 +3 30199 30198 28432 +3 32098 32097 31997 +3 29366 29367 29503 +3 27738 27739 27853 +3 6659 30622 19040 +3 28204 28321 28320 +3 27504 27622 27621 +3 19791 7068 19231 +3 27854 27970 27969 +3 29118 28983 21729 +3 29393 29530 29392 +3 26607 26608 26712 +3 11396 6846 21458 +3 29663 29796 29662 +3 30209 28742 29551 +3 25279 30099 23711 +3 30592 30591 30457 +3 29148 29143 28217 +3 21154 22073 21155 +3 27136 28456 27085 +3 34677 34805 34676 +3 32094 32194 32093 +3 27065 27183 27182 +3 27064 27065 27182 +3 27183 27302 27301 +3 27182 27183 27301 +3 27302 27420 27419 +3 27301 27302 27419 +3 27420 27538 27537 +3 27419 27420 27537 +3 27538 27655 27654 +3 27537 27538 27654 +3 27655 27770 27769 +3 27654 27655 27769 +3 27886 27885 27769 +3 27770 27886 27769 +3 28003 28002 27885 +3 27886 28003 27885 +3 28003 28120 28119 +3 28002 28003 28119 +3 32295 32294 32193 +3 32194 32295 32193 +3 31994 32094 31993 +3 12121 12039 35814 +3 26599 18408 331 +3 29394 29393 29256 +3 21942 21941 19447 +3 29649 29650 29782 +3 29790 29919 29789 +3 30050 30049 29918 +3 30321 30454 30320 +3 29919 30050 29918 +3 27648 27761 26477 +3 19128 29277 27401 +3 22679 21776 21672 +3 6531 30499 28019 +3 24109 20519 27280 +3 30686 19240 28017 +3 27900 28015 28752 +3 29004 29012 29697 +3 11070 24581 13315 +3 28973 28972 28839 +3 19790 2537 30199 +3 30336 30344 19560 +3 29934 30065 29933 +3 6853 30770 2537 +3 29934 29933 29804 +3 29805 29934 29804 +3 30987 30986 30928 +3 30065 30064 29933 +3 29108 29245 29107 +3 10003 23580 12450 +3 28840 28973 28839 +3 28588 28614 26931 +3 26717 28614 28588 +3 19559 26717 26598 +3 19032 28887 2271 +3 28614 29408 26931 +3 26598 26717 28588 +3 29408 29124 19463 +3 7079 6970 7301 +3 26359 30864 30863 +3 26931 29408 19463 +3 29672 29671 29533 +3 35681 35781 35790 +3 29382 29519 29518 +3 29534 29672 29533 +3 26817 26900 26414 +3 17669 21381 178 +3 6970 7079 21471 +3 23961 24022 24443 +3 27202 28601 28599 +3 26948 27066 27065 +3 28734 29565 14249 +3 27066 27184 27183 +3 27065 27066 27183 +3 27184 27303 27302 +3 27183 27184 27302 +3 27303 27421 27420 +3 27302 27303 27420 +3 27421 27539 27538 +3 27420 27421 27538 +3 27539 27656 27655 +3 27538 27539 27655 +3 27656 27771 27770 +3 27655 27656 27770 +3 27771 27887 27886 +3 27770 27771 27886 +3 27887 28004 28003 +3 27886 27887 28003 +3 28004 28121 28120 +3 28003 28004 28120 +3 28121 28238 28237 +3 28120 28121 28237 +3 25385 30812 30813 +3 20679 25096 17321 +3 29257 29394 29256 +3 35491 12823 35627 +3 14968 29950 28243 +3 7214 14968 28243 +3 28601 30344 30336 +3 29950 30337 30471 +3 27201 27202 28599 +3 6970 17477 7301 +3 20845 25092 20092 +3 28485 28343 25980 +3 28461 27751 27636 +3 3477 6768 14792 +3 31687 31787 31686 +3 25049 21452 25784 +3 26357 30864 26359 +3 30848 24034 30861 +3 325 4124 10975 +3 26607 26712 26711 +3 30220 29355 29429 +3 21840 21839 29217 +3 21742 21741 35014 +3 32404 32509 32403 +3 30739 29426 30604 +3 35193 35065 17370 +3 6853 27645 30770 +3 34552 34680 34551 +3 29245 29244 29107 +3 6969 6968 7182 +3 29381 29382 29518 +3 28973 29108 28972 +3 30868 21630 30869 +3 20181 20095 20096 +3 26122 19662 28485 +3 29124 29220 29357 +3 27135 26244 27254 +3 19463 29124 29357 +3 29538 27529 27259 +3 32921 32922 33030 +3 27161 24765 27280 +3 21506 13092 18928 +3 30737 21848 25014 +3 21381 29823 30086 +3 21630 30868 26356 +3 31857 24158 31858 +3 6868 17669 178 +3 21447 12089 30849 +3 21790 21883 23795 +3 2955 21753 27840 +3 16846 2103 16243 +3 23812 20355 20356 +3 31592 31687 31591 +3 26363 24831 26432 +3 13498 35366 12555 +3 30687 19517 23946 +3 34137 34275 34136 +3 20092 23816 20845 +3 22973 30293 30426 +3 26949 27067 27066 +3 26948 26949 27066 +3 27067 27185 27184 +3 27066 27067 27184 +3 27185 27304 27303 +3 27184 27185 27303 +3 27304 27422 27421 +3 27303 27304 27421 +3 27422 27540 27539 +3 27421 27422 27539 +3 27540 27657 27656 +3 27539 27540 27656 +3 27772 27771 27656 +3 27657 27772 27656 +3 27772 27888 27887 +3 27771 27772 27887 +3 27888 28005 28004 +3 27887 27888 28004 +3 28005 28122 28121 +3 28004 28005 28121 +3 28239 28238 28121 +3 28122 28239 28121 +3 17888 17555 23925 +3 30508 30509 25104 +3 27904 27838 21557 +3 30200 19790 30199 +3 28472 28480 30215 +3 29812 28474 26623 +3 2956 2817 24429 +3 32726 32838 32725 +3 14054 235 13426 +3 235 14054 17479 +3 29700 11228 27492 +3 31366 31365 31298 +3 29783 29912 29911 +3 27751 29700 27492 +3 29426 28099 29289 +3 30174 30175 30307 +3 25013 21848 24942 +3 28099 2948 19571 +3 28862 27518 25499 +3 25286 25500 24731 +3 30613 30739 26910 +3 29426 29289 30604 +3 29559 29421 19746 +3 29421 29559 30752 +3 28099 29264 29289 +3 29698 27164 26797 +3 29427 27282 9684 +3 19571 2948 27167 +3 26420 27048 29220 +3 19912 2271 6132 +3 30716 30715 30581 +3 29124 26420 29220 +3 33056 33055 32949 +3 26819 26820 26934 +3 24273 14969 18230 +3 28983 28982 28849 +3 19988 24348 24519 +3 30732 30731 30597 +3 33704 33923 22421 +3 25365 26452 12108 +3 178 21381 30086 +3 20019 20099 26825 +3 21462 27550 30086 +3 29823 21462 30086 +3 26609 26608 26512 +3 26513 26609 26512 +3 27138 28457 27136 +3 30365 19465 19249 +3 27955 17669 6868 +3 6132 28725 29423 +3 30471 30337 2955 +3 27840 27955 6868 +3 28243 29950 30471 +3 21753 27955 27840 +3 27751 27492 27636 +3 30337 21753 2955 +3 17569 19197 19136 +3 27838 29812 26623 +3 235 17569 19136 +3 2808 21562 19197 +3 17569 2808 19197 +3 29535 24431 28100 +3 30754 28373 21562 +3 26950 27068 27067 +3 26949 26950 27067 +3 27068 27186 27185 +3 27067 27068 27185 +3 27186 27305 27304 +3 27185 27186 27304 +3 27305 27423 27422 +3 27304 27305 27422 +3 27423 27541 27540 +3 27422 27423 27540 +3 27541 27658 27657 +3 27540 27541 27657 +3 27658 27773 27772 +3 27657 27658 27772 +3 27773 27889 27888 +3 27772 27773 27888 +3 27889 28006 28005 +3 27888 27889 28005 +3 28123 28122 28005 +3 28006 28123 28005 +3 24240 25398 25855 +3 25292 28238 25291 +3 21393 23953 11711 +3 21066 14246 11957 +3 2808 30754 21562 +3 28617 28252 28373 +3 30754 28617 28373 +3 28468 19567 28252 +3 28617 28468 28252 +3 26582 26472 19567 +3 28468 26582 19567 +3 27283 26473 26472 +3 29017 30669 28133 +3 26582 27283 26472 +3 29700 14968 7214 +3 19913 27263 29566 +3 29531 29530 29393 +3 11228 29700 7214 +3 29394 29531 29393 +3 29669 29668 29530 +3 7188 7187 14057 +3 15346 7187 15219 +3 29215 19200 21738 +3 19363 21849 21738 +3 28189 28735 30748 +3 30499 28189 30748 +3 30499 30748 30752 +3 28019 30499 30752 +3 26691 29559 19746 +3 29559 28019 30752 +3 26691 19746 29810 +3 7406 26691 29810 +3 7406 29810 6901 +3 19196 7406 6901 +3 24439 27549 22235 +3 201 22235 29215 +3 30999 31060 30998 +3 31433 31432 31365 +3 31505 31592 31504 +3 27318 27437 12102 +3 30043 30175 30174 +3 17575 6980 26502 +3 28137 17574 1960 +3 30308 30441 30440 +3 30067 30068 22491 +3 13754 24847 28070 +3 31909 32010 31908 +3 30870 30924 30869 +3 26609 26714 26713 +3 26608 26609 26713 +3 3036 25165 1019 +3 26713 26714 26825 +3 30363 30365 19249 +3 19465 26848 26833 +3 22007 23670 26600 +3 27285 28612 27284 +3 3052 28862 21266 +3 21824 21918 29257 +3 30739 30604 26910 +3 19688 566 567 +3 30613 26910 21556 +3 19231 30613 21556 +3 28461 27636 28474 +3 14869 14757 23853 +3 30669 29566 28133 +3 29812 28461 28474 +3 11509 19793 26473 +3 2404 14849 26574 +3 27283 11509 26473 +3 26834 26951 26950 +3 29489 29352 22369 +3 26951 27069 27068 +3 26950 26951 27068 +3 27069 27187 27186 +3 27068 27069 27186 +3 27187 27306 27305 +3 27186 27187 27305 +3 27306 27424 27423 +3 27305 27306 27423 +3 27424 27542 27541 +3 27423 27424 27541 +3 27659 27658 27541 +3 27542 27659 27541 +3 27659 27774 27773 +3 27658 27659 27773 +3 27774 27890 27889 +3 27773 27774 27889 +3 28007 28006 27889 +3 27890 28007 27889 +3 28124 28123 28006 +3 28007 28124 28006 +3 23597 26671 26670 +3 12395 451 12379 +3 30642 28488 19793 +3 11509 30642 19793 +3 29141 29151 29269 +3 30642 6977 6852 +3 27838 26623 21557 +3 29555 29017 26574 +3 30669 19913 29566 +3 27904 21557 27263 +3 29802 29931 29801 +3 19913 27904 27263 +3 29531 29669 29530 +3 29802 29801 29668 +3 29669 29802 29668 +3 29931 29930 29801 +3 7187 7188 15219 +3 2272 19450 2405 +3 7187 20430 14057 +3 27050 19792 30771 +3 28602 28603 30347 +3 19962 22233 20894 +3 27268 28603 27255 +3 30348 2270 21658 +3 30347 30348 21658 +3 28603 30348 30347 +3 21658 2270 26738 +3 2270 26786 26738 +3 26738 26786 28618 +3 26786 28719 28618 +3 28618 28719 28344 +3 28719 29945 28344 +3 25914 12422 25318 +3 22235 19200 29215 +3 30164 30165 30297 +3 26344 12108 26382 +3 21328 20195 21858 +3 24867 24668 23322 +3 22949 16313 29687 +3 30582 30581 30447 +3 29562 27553 26506 +3 19200 17939 21738 +3 28335 29562 7071 +3 7071 29562 26506 +3 28621 28335 28607 +3 28607 28335 7071 +3 29014 28621 28492 +3 28492 28621 28607 +3 19249 19465 26833 +3 28746 29014 28492 +3 26848 29014 28746 +3 26833 26848 28746 +3 28612 30365 30363 +3 29261 27844 30686 +3 26470 27285 26460 +3 28608 28612 30363 +3 27265 26470 27086 +3 28612 28608 27284 +3 19450 19449 2405 +3 27285 27284 26460 +3 30194 30193 30061 +3 2272 2405 18925 +3 30062 30061 29930 +3 30062 30194 30061 +3 29017 28133 26574 +3 29931 30062 29930 +3 28488 30642 6852 +3 29151 2812 29269 +3 6977 30485 30619 +3 21626 21625 21533 +3 26835 26952 26951 +3 26834 26835 26951 +3 26952 27070 27069 +3 26951 26952 27069 +3 27070 27188 27187 +3 27069 27070 27187 +3 27188 27307 27306 +3 27187 27188 27306 +3 27307 27425 27424 +3 27306 27307 27424 +3 27425 27543 27542 +3 27424 27425 27542 +3 27543 27660 27659 +3 27542 27543 27659 +3 27660 27775 27774 +3 27659 27660 27774 +3 27891 27890 27774 +3 27775 27891 27774 +3 28008 28007 27890 +3 27891 28008 27890 +3 17447 23655 23606 +3 28007 28008 28124 +3 6852 6977 30619 +3 30485 26733 26602 +3 30619 30485 26602 +3 26733 28589 28489 +3 2812 6781 26569 +3 26602 26733 28489 +3 30327 30460 30326 +3 29269 2812 26569 +3 30327 30326 30193 +3 30194 30327 30193 +3 30594 30593 30459 +3 30460 30459 30326 +3 6883 6867 30720 +3 30460 30594 30459 +3 19450 15346 19449 +3 30721 6883 30720 +3 15346 15219 19449 +3 27050 30771 28733 +3 7068 19702 30613 +3 2948 6914 17310 +3 28709 28708 28579 +3 26347 27138 27136 +3 29688 29538 27869 +3 2410 19898 17840 +3 29374 29375 29511 +3 29101 29238 29100 +3 28833 28832 28700 +3 32220 32321 32320 +3 28966 28965 28832 +3 28572 28701 28571 +3 27646 29272 29271 +3 21474 16596 21563 +3 30572 30706 30705 +3 30437 30438 30571 +3 30571 30572 30705 +3 30706 30840 30839 +3 30840 22330 30839 +3 22330 22331 30839 +3 30705 30706 30839 +3 25574 25573 30368 +3 30438 30572 30571 +3 26795 25785 25586 +3 27048 19962 20894 +3 22100 22195 11859 +3 32219 32220 32320 +3 20894 22233 29260 +3 26929 24587 24586 +3 26714 20019 26825 +3 26678 26573 24242 +3 26912 27518 28862 +3 28864 26912 28862 +3 29261 30686 27518 +3 26912 29261 27518 +3 27844 19240 30686 +3 27724 29004 19240 +3 27844 27724 19240 +3 6851 28749 29004 +3 6851 29951 28749 +3 27724 6851 29004 +3 29951 29142 28749 +3 28604 19773 29142 +3 29951 28604 29142 +3 3362 2272 18925 +3 19461 28747 19773 +3 30055 30187 30054 +3 30320 30319 30186 +3 30728 30727 30593 +3 570 571 18696 +3 27491 29151 29141 +3 27021 27491 29141 +3 28589 19672 21646 +3 17751 7408 27021 +3 28489 28589 21646 +3 26720 26836 26835 +3 12426 12516 12515 +3 26836 26953 26952 +3 26835 26836 26952 +3 26953 27071 27070 +3 26952 26953 27070 +3 27071 27189 27188 +3 27070 27071 27188 +3 27189 27308 27307 +3 27188 27189 27307 +3 27308 27426 27425 +3 27307 27308 27425 +3 27426 27544 27543 +3 27425 27426 27543 +3 27544 27661 27660 +3 27543 27544 27660 +3 27776 27775 27660 +3 27661 27776 27660 +3 27892 27891 27775 +3 27776 27892 27775 +3 22142 10979 13618 +3 27891 27892 28008 +3 29959 28594 2404 +3 14849 29555 26574 +3 21836 19795 29959 +3 28594 14849 2404 +3 6781 19795 21836 +3 26569 6781 21836 +3 13562 18671 19684 +3 19795 28594 29959 +3 30187 30320 30186 +3 19682 571 570 +3 12622 28138 12711 +3 30587 30721 30586 +3 28748 30736 28099 +3 3362 18925 6867 +3 35191 35190 35061 +3 6883 3362 6867 +3 19494 29552 19141 +3 30298 30431 30297 +3 29763 27401 28590 +3 28604 19461 19773 +3 27739 27738 27621 +3 27969 27970 28086 +3 26593 28732 27759 +3 29501 29502 29639 +3 6783 6782 7302 +3 24439 25547 12422 +3 26811 26926 26925 +3 26810 26811 26925 +3 26925 26926 27043 +3 26926 27044 27043 +3 27043 27044 27160 +3 27044 27161 27160 +3 24144 24143 25390 +3 28018 28020 26494 +3 29357 29156 28340 +3 27256 29357 28340 +3 26931 19463 19907 +3 28619 26931 19907 +3 26590 26598 28587 +3 28588 26931 28619 +3 19560 26598 26590 +3 28587 28588 28619 +3 19561 19560 26590 +3 26598 28588 28587 +3 19463 29357 27256 +3 19907 19463 27256 +3 30336 19560 19561 +3 29375 29512 29511 +3 28599 30336 30333 +3 30333 30336 19561 +3 27201 28599 28593 +3 28593 28599 30333 +3 26414 27201 27200 +3 27200 27201 28593 +3 26804 26817 26413 +3 26413 26414 27200 +3 6981 26817 26804 +3 17475 6981 26804 +3 7078 6981 17475 +3 26817 26414 26413 +3 21470 21469 7076 +3 7076 7078 17475 +3 30581 30580 30446 +3 30447 30581 30446 +3 26970 26969 28747 +3 25994 4669 25995 +3 30055 30054 29923 +3 29924 30055 29923 +3 342 7185 18696 +3 17758 342 18696 +3 30469 7408 17751 +3 30467 30469 17751 +3 19672 30670 236 +3 21646 19672 236 +3 30670 17302 21565 +3 236 30670 21565 +3 30421 30288 21565 +3 26721 26837 26836 +3 26720 26721 26836 +3 26837 26954 26953 +3 26836 26837 26953 +3 26954 27072 27071 +3 26953 26954 27071 +3 27072 27190 27189 +3 27071 27072 27189 +3 27190 27309 27308 +3 27189 27190 27308 +3 27309 27427 27426 +3 27308 27309 27426 +3 27427 27545 27544 +3 27426 27427 27544 +3 27545 27662 27661 +3 27544 27545 27661 +3 27662 27777 27776 +3 27661 27662 27776 +3 31044 31045 31106 +3 27776 27777 27892 +3 30594 30728 30593 +3 12691 26969 25405 +3 30728 6866 30727 +3 6866 6856 30727 +3 6856 6866 13562 +3 6866 18671 13562 +3 19684 19682 570 +3 18671 19682 19684 +3 30453 30452 30319 +3 571 17758 18696 +3 26970 27957 26969 +3 30320 30453 30319 +3 21155 30343 21154 +3 8153 19198 20091 +3 19461 26970 28747 +3 28203 28204 28320 +3 6782 6783 15897 +3 27641 27640 30762 +3 19248 19144 21470 +3 6847 6897 21459 +3 19144 19248 21944 +3 21469 7078 7076 +3 21943 19144 21944 +3 19144 21469 21470 +3 30033 30165 30164 +3 29654 29787 29786 +3 30044 30045 30176 +3 30177 30310 30309 +3 12510 19563 26501 +3 26505 28483 28460 +3 26402 27178 27176 +3 27176 27178 28496 +3 25340 24717 23648 +3 6914 29893 17310 +3 30034 30166 30165 +3 34933 34932 34803 +3 26401 24803 25342 +3 34804 34933 34803 +3 12089 30850 30849 +3 23779 22484 25656 +3 26603 26604 26708 +3 28455 28454 21270 +3 26709 26821 26820 +3 20765 27634 20683 +3 26708 26709 26820 +3 28454 28453 28333 +3 29815 29947 24009 +3 21368 26346 26345 +3 25306 23809 25385 +3 15476 15885 13057 +3 21642 34501 34500 +3 31299 31366 31298 +3 28576 28575 28453 +3 28454 28576 28453 +3 28705 28704 28575 +3 28576 28705 28575 +3 28837 28836 28704 +3 28705 28837 28704 +3 29242 29241 29104 +3 28970 28969 28836 +3 28837 28970 28836 +3 29105 29242 29104 +3 29105 29104 28969 +3 28970 29105 28969 +3 30715 30714 30580 +3 29242 29379 29378 +3 29912 30043 30042 +3 30447 30446 30313 +3 30187 30186 30054 +3 29782 29783 29911 +3 342 11398 11428 +3 29924 29923 29794 +3 7408 27491 27021 +3 7185 342 11428 +3 17302 30421 21565 +3 28808 30469 30467 +3 29834 29965 25040 +3 30288 30421 19566 +3 24994 24993 27287 +3 26722 26838 26837 +3 26721 26722 26837 +3 26838 26955 26954 +3 26837 26838 26954 +3 26955 27073 27072 +3 26954 26955 27072 +3 27073 27191 27190 +3 27072 27073 27190 +3 27191 27310 27309 +3 27190 27191 27309 +3 27310 27428 27427 +3 27309 27310 27427 +3 27546 27545 27427 +3 27428 27546 27427 +3 27663 27662 27545 +3 27546 27663 27545 +3 6671 14249 2076 +3 27662 27663 27777 +3 28319 28320 28439 +3 24531 18359 23517 +3 28731 28744 30465 +3 30466 19347 18008 +3 30465 30466 18008 +3 19347 27020 27019 +3 29387 29386 29249 +3 29250 29387 29249 +3 30587 30586 30452 +3 30453 30587 30452 +3 27780 17573 27868 +3 30721 30720 30586 +3 30581 30715 30580 +3 16333 16483 3205 +3 18262 18712 6860 +3 30715 6927 30714 +3 21943 21944 18712 +3 6927 18262 6860 +3 30750 30751 28366 +3 18262 21943 18712 +3 29516 29654 29653 +3 27165 27163 26355 +3 29241 29242 29378 +3 29515 29516 29653 +3 29379 29516 29515 +3 29378 29379 29515 +3 29653 29654 29786 +3 29787 29916 29915 +3 29651 29652 29784 +3 29785 29914 29913 +3 7295 7411 7189 +3 19455 7295 19456 +3 26393 26402 27176 +3 27178 28497 28496 +3 26408 26402 26393 +3 26387 26408 26393 +3 25945 30074 30745 +3 6840 26408 6839 +3 14233 30356 9402 +3 31596 31691 31595 +3 23655 17447 10003 +3 31594 31593 31506 +3 27146 5555 28682 +3 24993 24865 27287 +3 7182 7183 19454 +3 7413 6897 6847 +3 19354 7182 19454 +3 7182 6968 7299 +3 7183 7182 7299 +3 6840 6839 7299 +3 6968 6840 7299 +3 26408 26387 6839 +3 21947 19354 19454 +3 28497 30289 30287 +3 3087 21947 19783 +3 19783 21947 19454 +3 6918 3087 3088 +3 3088 3087 19783 +3 30711 6918 7407 +3 7407 6918 3088 +3 30711 30710 30576 +3 30710 30711 7407 +3 30577 30576 30442 +3 30577 30711 30576 +3 29652 29785 29784 +3 30443 30577 30442 +3 30178 30179 30311 +3 29514 29652 29651 +3 30314 30447 30313 +3 30312 30445 30444 +3 30667 25145 25829 +3 30314 30313 30180 +3 29795 29924 29794 +3 22002 24707 22098 +3 11398 27876 27787 +3 29795 29794 29661 +3 28755 28808 30467 +3 11428 11398 27787 +3 30778 25725 25724 +3 27400 28808 28755 +3 30458 30592 30457 +3 27963 27964 28080 +3 21757 19566 30421 +3 26723 26839 26838 +3 26722 26723 26838 +3 26839 26956 26955 +3 26838 26839 26955 +3 26956 27074 27073 +3 26955 26956 27073 +3 27074 27192 27191 +3 27073 27074 27191 +3 27192 27311 27310 +3 27191 27192 27310 +3 27429 27428 27310 +3 27311 27429 27310 +3 27547 27546 27428 +3 27429 27547 27428 +3 27547 27664 27663 +3 27546 27547 27663 +3 24466 24519 24432 +3 19426 24274 11450 +3 344 11397 341 +3 27983 26484 26483 +3 11397 27983 27953 +3 3323 11397 27953 +3 27020 29140 29139 +3 18008 19347 27019 +3 29250 29249 29112 +3 29113 29250 29112 +3 33262 33371 33370 +3 34566 34565 34428 +3 29655 29656 29788 +3 19448 21468 21471 +3 30046 30047 30178 +3 6927 6860 30714 +3 29915 29916 30046 +3 30047 30179 30178 +3 29786 29787 29915 +3 29916 30047 30046 +3 29092 29093 29229 +3 30311 30444 30443 +3 30433 30567 30566 +3 30432 30433 30566 +3 30176 30177 30309 +3 30310 30443 30442 +3 30045 30177 30176 +3 30309 30310 30442 +3 29784 29785 29913 +3 29914 30045 30044 +3 33268 33377 33267 +3 29913 29914 30044 +3 26386 26392 26391 +3 26385 26386 26391 +3 26392 27170 26391 +3 27170 27169 26391 +3 27170 28495 27169 +3 28495 28484 27169 +3 6859 2944 22010 +3 27488 20989 27606 +3 30224 30357 30356 +3 16483 937 3205 +3 30357 30491 30490 +3 30356 30357 30490 +3 27077 27078 25922 +3 35665 35429 35555 +3 12004 12086 27647 +3 14378 14924 12381 +3 30286 13991 21750 +3 26612 31560 31647 +3 28495 30286 30231 +3 30231 30286 21750 +3 6838 26386 26385 +3 28484 28495 30231 +3 5607 7295 7189 +3 17571 6838 26385 +3 6838 17571 7189 +3 7411 6838 7189 +3 13991 26500 17311 +3 21750 13991 17311 +3 26500 28459 28339 +3 17311 26500 28339 +3 29563 17262 29634 +3 28459 29155 28883 +3 28339 28459 28883 +3 30763 30764 23568 +3 19382 21693 21671 +3 29155 26503 23576 +3 29513 29514 29651 +3 17984 23916 23829 +3 30311 30312 30444 +3 29377 29514 29513 +3 30181 30314 30180 +3 30445 30579 30578 +3 26231 21672 22646 +3 30181 30180 30048 +3 29662 29795 29661 +3 29123 28988 28246 +3 27876 26482 26481 +3 29662 29661 29523 +3 27398 27400 28755 +3 27787 27876 26481 +3 13466 19739 19688 +3 27953 27983 26483 +3 19687 21563 566 +3 30431 30430 30297 +3 30455 30454 30321 +3 26613 26724 26723 +3 21757 15092 23141 +3 26724 26840 26839 +3 26723 26724 26839 +3 26840 26957 26956 +3 26839 26840 26956 +3 26957 27075 27074 +3 26956 26957 27074 +3 27075 27193 27192 +3 27074 27075 27192 +3 27193 27312 27311 +3 27192 27193 27311 +3 27430 27429 27311 +3 27312 27430 27311 +3 27430 27548 27547 +3 27429 27430 27547 +3 12725 13676 11365 +3 27547 27548 27664 +3 18929 4784 30479 +3 21553 21554 341 +3 29925 29924 29795 +3 24339 17668 29956 +3 569 568 21553 +3 21554 344 341 +3 29140 29158 29125 +3 27019 27020 29139 +3 29113 29112 28977 +3 28978 29113 28977 +3 19677 19357 25514 +3 29650 29783 29782 +3 29518 29656 29655 +3 29517 29518 29655 +3 21945 21946 3086 +3 30179 30312 30311 +3 27855 27854 27739 +3 28968 29103 28967 +3 29504 29642 29641 +3 29093 29230 29229 +3 29642 29775 29774 +3 29641 29642 29774 +3 26917 29137 29136 +3 29137 29143 29148 +3 28748 29426 30739 +3 19702 28748 30739 +3 24863 24864 24991 +3 30222 21838 21747 +3 33490 33489 33376 +3 13943 29961 14041 +3 24212 26385 26364 +3 28096 28095 27978 +3 28213 28330 28212 +3 26391 27169 27166 +3 34843 34844 34971 +3 28330 28329 28212 +3 31045 31044 30983 +3 26348 27140 27138 +3 30092 30225 30224 +3 12184 12185 12268 +3 30225 30358 30357 +3 30224 30225 30357 +3 30358 30492 30491 +3 30357 30358 30491 +3 26815 26816 25936 +3 30491 25438 30490 +3 11978 12381 12560 +3 30492 30626 25438 +3 21072 29699 30641 +3 22292 23778 23577 +3 35075 35204 35074 +3 6897 21369 21459 +3 12664 29491 15214 +3 30215 30222 21747 +3 21838 17314 17256 +3 31113 31176 31175 +3 28883 23576 29018 +3 30565 30699 30564 +3 28339 28883 29018 +3 28883 29155 23576 +3 17311 28339 28338 +3 28338 28339 29018 +3 21750 17311 17261 +3 17261 17311 28338 +3 30231 21750 21751 +3 21751 21750 17261 +3 26385 26391 26364 +3 30230 30231 21751 +3 27979 28096 27978 +3 17571 26385 24212 +3 29376 29377 29513 +3 27841 19462 30749 +3 30444 30445 30578 +3 29240 29377 29376 +3 30049 30181 30048 +3 30579 30713 30712 +3 29123 29402 28988 +3 30049 30048 29917 +3 29524 29662 29523 +3 29402 27644 28988 +3 26482 27386 27385 +3 29524 29523 29386 +3 26484 27400 27398 +3 26481 26482 27385 +3 11397 3323 341 +3 26483 26484 27398 +3 19465 7399 26848 +3 568 21554 21553 +3 30617 30618 29762 +3 26614 26725 26724 +3 26613 26614 26724 +3 26725 26841 26840 +3 26724 26725 26840 +3 26841 26958 26957 +3 26840 26841 26957 +3 26958 27076 27075 +3 26957 26958 27075 +3 27076 27194 27193 +3 27075 27076 27193 +3 27194 27313 27312 +3 27193 27194 27312 +3 27313 27431 27430 +3 27312 27313 27430 +3 22566 29628 22467 +3 27430 27431 27548 +3 29825 24339 29762 +3 22383 29635 29768 +3 27989 30618 30617 +3 28106 27989 30617 +3 27989 28106 28881 +3 19436 18057 19685 +3 19686 568 569 +3 29158 30089 26830 +3 29139 29140 29125 +3 28978 28977 28844 +3 28845 28978 28844 +3 6786 29827 6658 +3 29529 29528 29391 +3 33091 33196 33090 +3 29656 29789 29788 +3 27740 27855 27739 +3 34808 34937 34807 +3 27748 27747 27630 +3 27855 27971 27970 +3 28242 30073 683 +3 27513 27631 27512 +3 30643 30762 27525 +3 27640 29120 6656 +3 28479 35787 35551 +3 27525 27640 6656 +3 30566 30567 30700 +3 30835 2813 2410 +3 28484 30231 30230 +3 28481 28484 30230 +3 26364 26391 27166 +3 27169 28484 28481 +3 19659 27867 19030 +3 27166 27169 28481 +3 30322 30455 30321 +3 30723 30722 30588 +3 30536 24901 25010 +3 29698 17260 27164 +3 34676 34675 34547 +3 26831 26834 11594 +3 30226 30225 30092 +3 30093 30226 30092 +3 30359 30358 30225 +3 30226 30359 30225 +3 30359 30493 30492 +3 30358 30359 30492 +3 30493 30627 30626 +3 30492 30493 30626 +3 30627 30761 30760 +3 30626 30627 30760 +3 29535 29536 22002 +3 12920 24777 22976 +3 30736 6914 2948 +3 24992 24991 24864 +3 19270 28984 2541 +3 34018 34017 33882 +3 29520 29519 29382 +3 26904 26594 6537 +3 29502 29503 29640 +3 29383 29520 29382 +3 26919 19035 26584 +3 19574 26941 12511 +3 30486 11384 19129 +3 27875 29354 29273 +3 18865 30693 14618 +3 19670 2810 20176 +3 19670 29682 2810 +3 28726 28725 5474 +3 28887 19670 20176 +3 28816 28850 30476 +3 7085 17571 24212 +3 11449 15329 28018 +3 19242 19629 19462 +3 7189 17571 7085 +3 29239 29240 29376 +3 6918 17568 3087 +3 30578 30579 30712 +3 29103 29240 29239 +3 29918 30049 29917 +3 17270 17568 30712 +3 27528 30074 27644 +3 29918 29917 29788 +3 29387 29524 29386 +3 29402 27528 27644 +3 27385 27386 28731 +3 28713 28712 28583 +3 27386 28744 28731 +3 28744 30466 30465 +3 18057 19436 7402 +3 21940 18057 7402 +3 30618 29825 29762 +3 23653 24969 24912 +3 26615 26726 26725 +3 26614 26615 26725 +3 26726 26842 26841 +3 26725 26726 26841 +3 26842 26959 26958 +3 26841 26842 26958 +3 26959 27077 27076 +3 26958 26959 27076 +3 27431 27313 12009 +3 27076 27077 27194 +3 30201 22491 30068 +3 30926 30925 30871 +3 24040 25131 25133 +3 28125 25647 23654 +3 23953 20058 23954 +3 2807 27989 28881 +3 30730 30729 30595 +3 30582 30716 30581 +3 29125 29158 26830 +3 19685 19686 569 +3 28845 28844 28712 +3 30089 30735 28233 +3 29686 29552 19494 +3 33731 33730 33603 +3 34680 34808 34679 +3 21508 21417 29830 +3 6656 29120 21746 +3 29291 28722 19143 +3 28971 28970 28837 +3 6837 26947 6407 +3 2943 2805 30643 +3 28838 28971 28837 +3 29289 29022 30470 +3 30762 27640 27525 +3 30700 30699 30565 +3 29120 19794 21746 +3 28880 27529 29538 +3 29563 30472 17262 +3 2271 28887 20176 +3 19789 21474 21563 +3 21287 16596 15316 +3 5474 2271 20176 +3 30959 19964 19963 +3 18704 35122 19411 +3 31070 31132 31069 +3 17449 17371 17372 +3 25084 23078 19674 +3 34361 16931 16768 +3 29831 13846 29702 +3 26692 20087 26587 +3 33729 33728 33601 +3 30228 25942 20018 +3 27266 27378 12540 +3 23993 23598 25489 +3 30360 30359 30226 +3 6854 23081 19923 +3 30360 30494 30493 +3 30359 30360 30493 +3 30494 30628 30627 +3 30493 30494 30627 +3 23569 24777 30761 +3 30627 30628 30761 +3 21462 20866 20865 +3 15407 21757 15598 +3 22976 24777 21092 +3 24062 19304 24121 +3 27641 27645 29767 +3 28823 28824 28956 +3 30040 30172 30039 +3 30305 30438 30437 +3 30172 30305 30304 +3 30171 30172 30304 +3 29909 30040 29908 +3 30304 30305 30437 +3 29779 29780 29908 +3 30172 30171 30039 +3 29647 29780 29646 +3 30040 30039 29908 +3 29509 29647 29508 +3 29780 29909 29908 +3 29235 29234 29097 +3 29780 29779 29646 +3 34361 12463 33811 +3 28963 28962 28829 +3 7190 7189 7085 +3 32952 33058 32951 +3 3086 21946 21947 +3 19788 19787 22329 +3 29102 29103 29239 +3 26497 27435 27432 +3 30713 17270 30712 +3 28452 28574 28451 +3 29789 29918 29788 +3 2409 3086 17568 +3 30419 30422 10727 +3 28839 28972 28838 +3 28712 28582 28583 +3 27528 19346 30745 +3 28233 30735 29287 +3 30346 27868 35485 +3 18057 19686 19685 +3 28473 5340 21749 +3 2807 28881 29258 +3 30462 30596 30461 +3 28130 29019 28129 +3 11008 7468 14514 +3 21415 19708 22925 +3 26727 26843 26842 +3 26726 26727 26842 +3 26843 26960 26959 +3 26842 26843 26959 +3 26960 27078 27077 +3 26959 26960 27077 +3 19476 25767 25766 +3 25922 27078 27196 +3 22491 30201 22590 +3 30506 25577 30505 +3 33171 33170 33065 +3 20240 6927 30715 +3 566 19638 21555 +3 11775 12902 30689 +3 30596 30730 30595 +3 28849 21545 21637 +3 26830 30089 28233 +3 30730 21940 7402 +3 30061 30060 29929 +3 30735 28473 29287 +3 27553 28879 21972 +3 28713 28845 28712 +3 29381 29518 29380 +3 19139 21373 19983 +3 28865 29425 28722 +3 6409 19143 28722 +3 27504 27505 27622 +3 27740 27739 27622 +3 27530 27173 30477 +3 26793 24359 23603 +3 30310 30311 30443 +3 29914 29915 30045 +3 19358 19452 2403 +3 29521 29659 29520 +3 30299 30432 30431 +3 30566 30700 30565 +3 29372 29509 29371 +3 29647 29646 29508 +3 29235 29372 29234 +3 29509 29508 29371 +3 29098 29235 29097 +3 29372 29371 29234 +3 11834 27415 11920 +3 18304 19522 17363 +3 27647 27762 12167 +3 20018 21542 29962 +3 29832 29831 29702 +3 29703 29832 29702 +3 11613 26629 26628 +3 32842 32950 32841 +3 28107 28737 28738 +3 19740 30611 28218 +3 31434 31506 31433 +3 26208 24187 26209 +3 13311 18223 19214 +3 27254 26244 26252 +3 30361 30495 30494 +3 30360 30361 30494 +3 30495 30629 30628 +3 30494 30495 30628 +3 30628 30629 23569 +3 24362 24777 23569 +3 23900 19132 27531 +3 18189 14083 13698 +3 27509 27508 27389 +3 30569 30570 30703 +3 28092 28209 28091 +3 27152 27153 27271 +3 27975 28092 27974 +3 28326 28325 28208 +3 27859 27975 27858 +3 28209 28208 28091 +3 27859 27858 27743 +3 28092 28091 27974 +3 27744 27859 27743 +3 27975 27974 27858 +3 28209 28326 28208 +3 28446 28445 28325 +3 28326 28446 28325 +3 28568 28567 28445 +3 28446 28568 28445 +3 28697 28696 28567 +3 28569 28698 28568 +3 28830 28829 28697 +3 33163 33162 33057 +3 26522 26422 30635 +3 30708 6865 30707 +3 22328 22329 30841 +3 26494 26497 27432 +3 6532 19137 29157 +3 28452 28451 28331 +3 28332 28452 28331 +3 17270 2409 17568 +3 6979 26626 6841 +3 28839 28838 28706 +3 28707 28839 28706 +3 26905 27760 26594 +3 26703 22007 26704 +3 33261 33262 33370 +3 27289 19128 29763 +3 29287 28473 21749 +3 29892 29428 21752 +3 30462 30461 30328 +3 30329 30462 30328 +3 28842 28841 28709 +3 28996 2807 29258 +3 3311 13686 22925 +3 22925 19708 3311 +3 26728 26844 26843 +3 26727 26728 26843 +3 26844 26961 26960 +3 26843 26844 26960 +3 27079 27078 26960 +3 26961 27079 26960 +3 35669 35613 35506 +3 15041 19217 18179 +3 22194 21722 12358 +3 33580 28579 27381 +3 28710 28842 28709 +3 30064 30196 30063 +3 30329 30328 30195 +3 5340 17259 30554 +3 30729 30730 7402 +3 21749 5340 30554 +3 17259 29892 21752 +3 30315 30448 30314 +3 11437 11403 27992 +3 1961 7069 21744 +3 27867 17253 26904 +3 29244 29381 29380 +3 29243 29244 29380 +3 21945 19355 19353 +3 2409 21945 3086 +3 27623 27740 27622 +3 17626 2403 3362 +3 28563 28564 28692 +3 28958 29093 29092 +3 29425 27289 29763 +3 28825 28958 28957 +3 29426 28748 28099 +3 28732 28733 27759 +3 28830 28963 28829 +3 29098 29097 28962 +3 28829 28828 28696 +3 28568 28697 28567 +3 24752 12800 23502 +3 28697 28829 28696 +3 24098 26596 26225 +3 35634 25128 24994 +3 27415 11834 27416 +3 19304 24063 30609 +3 29571 29704 29703 +3 29570 29571 29703 +3 29704 25040 29703 +3 24346 19478 2957 +3 27374 30738 30746 +3 28494 30612 29683 +3 30612 27374 30746 +3 28736 28494 30341 +3 19564 25784 13893 +3 24300 21373 6944 +3 26212 21913 30496 +3 14233 14136 14137 +3 30361 26212 30495 +3 22000 22001 22096 +3 30496 30630 30629 +3 30495 30496 30629 +3 30630 30764 30763 +3 30629 30630 30763 +3 19235 24537 22288 +3 20260 26920 20259 +3 30704 30838 30837 +3 6783 7069 1961 +3 27272 27390 27389 +3 30703 30704 30837 +3 35064 35063 34934 +3 27271 27272 27389 +3 29818 29133 23898 +3 27153 27272 27271 +3 29109 29108 28973 +3 28974 29109 28973 +3 20259 26920 27037 +3 30589 30723 30588 +3 26907 11404 27267 +3 24608 26816 26705 +3 18865 30558 30693 +3 29384 29383 29246 +3 28962 28961 28828 +3 26852 29134 29014 +3 28698 28830 28697 +3 28829 28962 28828 +3 27551 27022 19678 +3 28698 28697 28568 +3 6865 22328 30841 +3 26422 27551 19678 +3 17574 26964 29948 +3 6865 30841 30707 +3 28574 28573 28451 +3 19900 6532 29157 +3 26626 26409 26407 +3 28215 28332 28214 +3 28972 28971 28838 +3 26485 26626 26407 +3 33603 33730 33729 +3 28578 28707 28577 +3 26511 26607 26510 +3 26704 26705 26816 +3 19575 27408 29084 +3 24451 30623 17671 +3 30596 30595 30461 +3 29428 19575 29084 +3 29388 29525 29387 +3 30196 30195 30063 +3 28710 28709 28580 +3 26618 26729 26728 +3 26617 26618 26728 +3 26729 26845 26844 +3 26728 26729 26844 +3 26845 26962 26961 +3 26844 26845 26961 +3 26962 27080 27079 +3 26961 26962 27079 +3 3862 15041 19106 +3 18477 3862 19106 +3 29256 29255 29118 +3 30064 30063 29932 +3 29663 29662 29524 +3 30554 17259 21752 +3 30196 30329 30195 +3 29428 29084 21752 +3 24603 21447 25940 +3 24062 20200 20199 +3 23670 24485 24913 +3 25413 12752 25271 +3 28871 28723 12652 +3 29107 29106 28971 +3 11498 7069 7006 +3 21946 21945 19353 +3 29518 29517 29380 +3 28835 28834 28702 +3 19355 7297 7296 +3 28835 28968 28834 +3 29103 29102 28967 +3 29526 29664 29525 +3 29920 29919 29790 +3 5607 7189 7190 +3 19352 19456 6788 +3 33051 33156 33155 +3 7082 26522 30635 +3 35553 35909 35671 +3 28963 29098 28962 +3 12603 25353 28123 +3 27784 24226 25673 +3 11236 35831 14282 +3 33602 33729 33601 +3 25209 24676 25147 +3 35611 29126 35467 +3 29434 29572 29571 +3 24847 21066 30599 +3 29705 29704 29571 +3 29572 29705 29571 +3 23502 28255 25361 +3 29705 29834 29704 +3 25242 25722 25104 +3 12442 12532 12531 +3 28494 29683 30341 +3 32097 32197 32096 +3 26212 30496 30495 +3 30612 30746 29683 +3 32298 32297 32196 +3 24398 24475 26245 +3 30491 30492 25438 +3 21287 15316 15329 +3 30631 30630 30496 +3 35466 35357 14083 +3 30631 30765 30764 +3 30630 30631 30764 +3 27179 11747 11667 +3 24570 30764 30765 +3 30435 30436 30569 +3 21363 21362 21273 +3 22430 22429 14737 +3 30303 30436 30435 +3 30838 22429 22430 +3 19457 19458 14737 +3 30837 30838 22430 +3 22429 16457 14737 +3 16457 19457 14737 +3 19457 5339 6784 +3 6835 6836 11438 +3 30570 30704 30703 +3 19458 19457 6784 +3 6967 6835 11438 +3 6967 11438 6784 +3 5339 6967 6784 +3 29525 29524 29387 +3 28087 28088 28204 +3 29097 29096 28961 +3 28962 29097 28961 +3 28569 28568 28446 +3 28447 28569 28446 +3 18261 18271 27022 +3 27551 18261 27022 +3 30574 30708 30707 +3 30573 30574 30707 +3 1960 17574 29948 +3 26964 6532 19900 +3 28098 28215 28097 +3 28332 28331 28214 +3 26409 27199 27195 +3 26407 26409 27195 +3 24416 24359 24276 +3 28707 28706 28577 +3 2410 17840 30833 +3 22010 23522 30786 +3 26706 26707 26818 +3 21453 21290 20739 +3 21472 20817 27408 +3 19575 21472 27408 +3 29933 29932 29803 +3 29804 29933 29803 +3 29019 28884 28129 +3 29255 29254 29117 +3 26619 26730 26729 +3 26618 26619 26729 +3 26730 26846 26845 +3 26729 26730 26845 +3 26846 26963 26962 +3 26845 26846 26962 +3 26963 27081 27080 +3 26962 26963 27080 +3 27080 27081 27198 +3 26712 26713 26824 +3 24603 24957 26083 +3 26478 27380 27373 +3 22139 23606 25915 +3 29933 30064 29932 +3 26699 26698 25288 +3 24036 12537 24272 +3 27319 12020 12021 +3 18510 30782 30783 +3 23800 25647 24830 +3 25953 24492 13078 +3 28972 29107 28971 +3 26600 26705 26704 +3 19353 19355 7296 +3 29244 29243 29106 +3 28574 28703 28573 +3 7297 7077 6969 +3 28703 28835 28702 +3 28968 28967 28834 +3 29791 29920 29790 +3 29252 29389 29251 +3 30057 30189 30056 +3 30322 30321 30188 +3 21095 21182 28098 +3 6788 5607 7190 +3 24301 24302 27500 +3 29256 29118 21823 +3 28889 29024 29023 +3 30883 30937 30882 +3 29024 29161 29160 +3 29023 29024 29160 +3 29161 29298 29297 +3 29160 29161 29297 +3 29298 29435 29434 +3 29297 29298 29434 +3 29435 29573 29572 +3 29434 29435 29572 +3 29706 29705 29572 +3 29573 29706 29572 +3 29835 29834 29705 +3 29706 29835 29705 +3 29966 29965 29834 +3 29835 29966 29834 +3 381 17630 17726 +3 19566 21757 15407 +3 14736 34195 33467 +3 28218 28107 28738 +3 29259 29152 27433 +3 13363 13266 13267 +3 28738 28737 29259 +3 2922 30477 22729 +3 34282 34420 34281 +3 35880 35592 35609 +3 30631 25018 30765 +3 30631 22194 25018 +3 32296 32295 32194 +3 30766 17888 30765 +3 32195 32296 32194 +3 13194 14175 14265 +3 30302 30303 30435 +3 21546 34091 21547 +3 30303 30302 30169 +3 30436 30570 30569 +3 30170 30169 30037 +3 30170 30303 30169 +3 30038 30037 29906 +3 30038 30170 30037 +3 29778 29907 29777 +3 29907 30038 29906 +3 29778 29777 29644 +3 29645 29778 29644 +3 19375 21461 6836 +3 6835 19375 6836 +3 21556 26524 29540 +3 19426 24289 24274 +3 29234 29233 29096 +3 29097 29234 29096 +3 28210 28327 28209 +3 28447 28446 28326 +3 27049 29941 18271 +3 18261 27049 18271 +3 30306 30307 30439 +3 30440 30574 30573 +3 30758 8660 26584 +3 29013 30758 26584 +3 28098 28097 27980 +3 27981 28098 27980 +3 27199 28554 28547 +3 27195 27199 28547 +3 27789 27905 12532 +3 26739 11769 11687 +3 28601 28602 30344 +3 28722 29425 28856 +3 26404 35445 28308 +3 20261 24676 25209 +3 27788 27785 20817 +3 21472 27788 20817 +3 29533 29671 29532 +3 29804 29803 29670 +3 29118 29255 29117 +3 28478 30083 29559 +3 26620 26731 26730 +3 26619 26620 26730 +3 26731 26847 26846 +3 26730 26731 26846 +3 29831 29962 13944 +3 26846 26847 26963 +3 12020 11935 12021 +3 11529 11464 11465 +3 12184 12101 12102 +3 29262 29399 13317 +3 33730 33864 33729 +3 35526 35673 35822 +3 22883 22884 30733 +3 10527 4239 10525 +3 19959 2989 3129 +3 27672 27673 12440 +3 25458 18993 19031 +3 12353 27786 12438 +3 30959 25503 30902 +3 7296 7297 6969 +3 29107 29244 29106 +3 19109 6084 16190 +3 6979 6841 6969 +3 27964 28081 28080 +3 21376 22744 17321 +3 19137 19035 26919 +3 17303 11943 11836 +3 29157 19137 26919 +3 29948 26964 19900 +3 24302 24301 24631 +3 22328 19788 22329 +3 24901 30671 24559 +3 30099 25043 29967 +3 28757 28890 28889 +3 27981 21009 21095 +3 28890 29025 29024 +3 28889 28890 29024 +3 29025 29162 29161 +3 29024 29025 29161 +3 29162 29299 29298 +3 29161 29162 29298 +3 29299 29436 29435 +3 29298 29299 29435 +3 29436 29574 29573 +3 29435 29436 29573 +3 29707 29706 29573 +3 29574 29707 29573 +3 29836 29835 29706 +3 29707 29836 29706 +3 29967 29966 29835 +3 29836 29967 29835 +3 28433 28555 21533 +3 23239 17573 6280 +3 12256 12255 27664 +3 12090 27431 12091 +3 27972 27971 27855 +3 30767 30766 25536 +3 28089 28088 27971 +3 27856 27972 27855 +3 12642 35700 35680 +3 27972 28089 27971 +3 10647 4239 10771 +3 12353 12267 12268 +3 17555 17888 30766 +3 30767 17555 30766 +3 23458 9772 23457 +3 25402 27957 26970 +3 31791 31790 31690 +3 21931 21930 6281 +3 31899 32000 31898 +3 28245 28870 19680 +3 32100 32099 31999 +3 31897 31896 31790 +3 6279 19792 27050 +3 2137 35824 19680 +3 19904 6279 27050 +3 30178 30311 30310 +3 29907 29906 29777 +3 28942 28859 28870 +3 26354 26353 21461 +3 29645 29644 29506 +3 29796 29925 29795 +3 19375 26354 21461 +3 29371 29370 29233 +3 27782 27875 29273 +3 28327 28447 28326 +3 29234 29371 29233 +3 27519 13660 29941 +3 28093 28210 28092 +3 30439 30440 30573 +3 27049 27519 29941 +3 19553 12511 8660 +3 30173 30174 30306 +3 28215 28214 28097 +3 30758 19553 8660 +3 28554 30331 30292 +3 27981 27980 27864 +3 28578 28577 28455 +3 28547 28554 30292 +3 3624 18516 13526 +3 26494 27432 27414 +3 26707 26819 26818 +3 29427 29565 27282 +3 27788 27517 30084 +3 28991 28590 27401 +3 29671 29804 29670 +3 27785 27788 30084 +3 18375 19344 26917 +3 29396 29533 29395 +3 28478 29559 26691 +3 26516 26621 26620 +3 2682 238 9284 +3 26620 26621 26731 +3 33735 33869 33734 +3 6850 9284 8907 +3 21459 26347 26346 +3 25213 25288 26698 +3 21368 21459 26346 +3 34946 35075 34945 +3 29890 22665 22764 +3 27319 27438 27437 +3 27318 27319 27437 +3 27438 27556 27555 +3 27437 27438 27555 +3 27556 27673 27672 +3 27555 27556 27672 +3 11232 19904 6671 +3 12441 12440 27673 +3 7077 6979 6969 +3 25961 23916 6410 +3 17377 25073 25482 +3 26626 26485 6841 +3 12622 28022 28138 +3 35726 35446 35582 +3 28255 23502 12800 +3 12711 12621 12622 +3 26450 26382 26451 +3 21088 21177 21176 +3 19456 19352 19787 +3 19456 5607 6788 +3 31132 31131 31069 +3 19788 19456 19787 +3 28626 28758 28757 +3 21095 28098 27981 +3 28758 28891 28890 +3 28757 28758 28890 +3 28891 29026 29025 +3 28890 28891 29025 +3 29026 29163 29162 +3 29025 29026 29162 +3 29163 29300 29299 +3 29162 29163 29299 +3 29300 29437 29436 +3 29299 29300 29436 +3 29437 29575 29574 +3 29436 29437 29574 +3 29708 29707 29574 +3 29575 29708 29574 +3 29837 29836 29707 +3 29708 29837 29707 +3 29968 29967 29836 +3 29837 29968 29836 +3 29968 30100 30099 +3 29967 29968 30099 +3 33503 33622 33502 +3 30948 31006 30947 +3 25940 30902 25503 +3 24187 17555 30767 +3 28323 28322 28205 +3 28206 28323 28205 +3 28206 28205 28088 +3 28089 28206 28088 +3 23925 17555 24852 +3 30743 2541 2675 +3 31693 31692 31597 +3 31686 31685 31590 +3 27150 28470 28466 +3 12711 12620 12621 +3 19914 28015 27900 +3 21460 21461 26352 +3 30207 30208 21931 +3 6281 19914 27900 +3 28466 28470 30207 +3 21930 19914 6281 +3 26603 26707 24162 +3 30208 21930 21931 +3 30422 18375 10727 +3 20892 22156 23959 +3 28245 28942 28870 +3 2537 2805 30198 +3 29507 29645 29506 +3 27290 27291 28859 +3 26354 27162 27150 +3 29507 29506 29369 +3 24359 24406 25785 +3 26353 26354 27150 +3 29508 29507 29370 +3 27666 4784 20317 +3 28327 28326 28209 +3 29371 29508 29370 +3 27519 27258 30025 +3 27976 28093 27975 +3 30307 30440 30439 +3 13660 27519 30025 +3 19553 19574 12511 +3 30041 30042 30173 +3 27865 27981 27864 +3 28715 28847 28714 +3 30331 19565 19562 +3 27865 27864 27749 +3 26704 26816 26815 +3 30292 30331 19562 +3 28226 24921 24922 +3 4012 20195 16151 +3 29930 30061 29929 +3 22012 29534 29396 +3 29130 30079 30084 +3 11403 28009 27992 +3 29671 29670 29532 +3 27517 29130 30084 +3 19036 28478 26691 +3 20683 20601 20602 +3 19240 29004 29697 +3 26517 26622 26621 +3 26516 26517 26621 +3 23954 23955 29010 +3 9284 24569 2682 +3 18837 21407 21316 +3 25952 24403 22288 +3 30083 28019 29559 +3 29004 28749 29012 +3 28457 30200 28456 +3 28749 28858 29012 +3 9670 35880 10510 +3 24089 25346 25462 +3 27320 27439 27438 +3 27319 27320 27438 +3 27439 27557 27556 +3 27438 27439 27556 +3 27557 27674 27673 +3 27556 27557 27673 +3 25013 25083 25014 +3 23451 23353 23354 +3 20847 27634 20765 +3 28703 28702 28573 +3 25489 23598 25792 +3 28138 24646 28255 +3 28022 28139 28138 +3 27905 28022 12622 +3 22679 23959 22156 +3 32196 32297 32195 +3 26422 19678 30635 +3 28498 25322 28377 +3 24036 24245 12537 +3 28195 21264 28078 +3 28498 28627 28626 +3 31473 31472 31405 +3 28627 28759 28758 +3 28626 28627 28758 +3 28759 28892 28891 +3 28758 28759 28891 +3 28892 29027 29026 +3 28891 28892 29026 +3 29027 29164 29163 +3 29026 29027 29163 +3 29164 29301 29300 +3 29163 29164 29300 +3 29301 29438 29437 +3 29300 29301 29437 +3 29576 29575 29437 +3 29438 29576 29437 +3 29709 29708 29575 +3 29576 29709 29575 +3 29838 29837 29708 +3 29709 29838 29708 +3 29969 29968 29837 +3 29838 29969 29837 +3 29969 30101 30100 +3 29968 29969 30100 +3 30101 30234 30233 +3 30100 30101 30233 +3 12340 12427 12426 +3 25333 13893 25784 +3 28323 28443 28442 +3 19898 19897 17840 +3 6657 6966 7413 +3 6782 6657 7413 +3 30233 23711 30100 +3 6966 11407 6897 +3 30177 30178 30310 +3 32306 32409 32305 +3 28323 28324 28443 +3 24834 23505 11483 +3 26353 27150 27144 +3 28444 28566 28565 +3 6836 21461 21460 +3 26352 26353 27144 +3 11407 6836 21460 +3 21461 26353 26352 +3 27144 27150 28466 +3 28470 30208 30207 +3 17668 24255 30482 +3 24423 24422 24338 +3 2682 24569 29358 +3 24169 20759 24304 +3 28942 27290 28859 +3 33347 3538 33451 +3 29370 29507 29369 +3 28073 26490 27291 +3 27162 28471 28470 +3 29233 29370 29232 +3 21572 14947 21573 +3 27150 27162 28470 +3 29646 29645 29507 +3 9277 452 29947 +3 28210 28209 28092 +3 29508 29646 29507 +3 34004 34003 33868 +3 28093 28092 27975 +3 30174 30307 30306 +3 30025 27258 14848 +3 29808 29674 22203 +3 30042 30174 30173 +3 23444 15631 22855 +3 30217 28548 26941 +3 19565 26581 26568 +3 27632 27633 27749 +3 29256 29393 29255 +3 19562 19565 26568 +3 29392 29529 29391 +3 24569 9284 6850 +3 18928 27612 18189 +3 29919 29918 29789 +3 29130 28600 28598 +3 27992 28009 26486 +3 29533 29532 29395 +3 30079 29130 28598 +3 28708 28840 28707 +3 29530 29668 29529 +3 29142 28998 28858 +3 20580 18408 26599 +3 26517 26518 26622 +3 19790 6853 2537 +3 25351 25495 23642 +3 28708 28707 28578 +3 28579 28708 28578 +3 27179 27180 11834 +3 28840 28839 28707 +3 12021 27203 27320 +3 5741 27646 27635 +3 27203 27321 27320 +3 25018 30766 30765 +3 27321 27440 27439 +3 27320 27321 27439 +3 27440 27558 27557 +3 27439 27440 27557 +3 27558 27675 27674 +3 27557 27558 27674 +3 27675 27790 27789 +3 27674 27675 27789 +3 27790 27906 27905 +3 27789 27790 27905 +3 27906 28023 28022 +3 27905 27906 28022 +3 28140 28139 28022 +3 28023 28140 28022 +3 28124 28008 12514 +3 28140 28257 28139 +3 30535 30536 25010 +3 26847 26731 11597 +3 28377 28499 28498 +3 23708 30235 30368 +3 28499 28628 28627 +3 28498 28499 28627 +3 28628 28760 28759 +3 28627 28628 28759 +3 28760 28893 28892 +3 28759 28760 28892 +3 28893 29028 29027 +3 28892 28893 29027 +3 29028 29165 29164 +3 29027 29028 29164 +3 29165 29302 29301 +3 29164 29165 29301 +3 29302 29439 29438 +3 29301 29302 29438 +3 29577 29576 29438 +3 29439 29577 29438 +3 29710 29709 29576 +3 29577 29710 29576 +3 29710 29839 29838 +3 29709 29710 29838 +3 29970 29969 29838 +3 29839 29970 29838 +3 30102 30101 29969 +3 29970 30102 29969 +3 30102 30235 30234 +3 30101 30102 30234 +3 11687 11612 26739 +3 19972 19971 31274 +3 19976 19975 31408 +3 23708 25573 25572 +3 18602 6657 19595 +3 12692 28239 25353 +3 21460 26352 26348 +3 21369 21460 26348 +3 29229 29366 29365 +3 26944 29563 28361 +3 28207 28324 28323 +3 30033 30034 30165 +3 28565 28566 28694 +3 27973 28090 27972 +3 28443 28444 28565 +3 28827 28826 28694 +3 28324 28444 28443 +3 28566 28695 28694 +3 28206 28207 28323 +3 24510 27989 24617 +3 24255 24181 24182 +3 11483 24571 17315 +3 30618 24510 29825 +3 14848 24068 452 +3 30604 30470 27607 +3 31591 31686 31590 +3 27290 28073 27291 +3 29895 26591 26490 +3 29233 29232 29095 +3 29096 29233 29095 +3 30212 30208 28470 +3 28471 30212 28470 +3 29765 452 9277 +3 29895 29765 9277 +3 29779 29778 29645 +3 29646 29779 29645 +3 27745 27860 27744 +3 27976 27975 27859 +3 19789 19687 19739 +3 23708 25572 23710 +3 29781 29782 29910 +3 29911 30042 30041 +3 30441 30575 30574 +3 28848 28716 21544 +3 27515 27633 27632 +3 27514 27515 27632 +3 26581 28586 28493 +3 26568 26581 28493 +3 26930 30734 17669 +3 29382 29381 29244 +3 27412 27414 28813 +3 26910 27607 26524 +3 29801 29930 29800 +3 29930 29929 29800 +3 28600 11229 11511 +3 28598 28600 11511 +3 26249 24869 9012 +3 30464 30598 30463 +3 23519 25949 26492 +3 30349 30216 29129 +3 30224 14039 14040 +3 11575 21770 26599 +3 34588 34716 34587 +3 19702 30739 30613 +3 24637 26818 26819 +3 27204 11937 11938 +3 30344 30347 19559 +3 27204 27322 27321 +3 27203 27204 27321 +3 27322 27441 27440 +3 27321 27322 27440 +3 27441 27559 27558 +3 27440 27441 27558 +3 27559 27676 27675 +3 27558 27559 27675 +3 27676 27791 27790 +3 27675 27676 27790 +3 27791 27907 27906 +3 27790 27791 27906 +3 27907 28024 28023 +3 27906 27907 28023 +3 28141 28140 28023 +3 28024 28141 28023 +3 28258 28257 28140 +3 28141 28258 28140 +3 28258 28378 28377 +3 28257 28258 28377 +3 28378 28500 28499 +3 28377 28378 28499 +3 28500 28629 28628 +3 28499 28500 28628 +3 28629 28761 28760 +3 28628 28629 28760 +3 28761 28894 28893 +3 28760 28761 28893 +3 28894 29029 29028 +3 28893 28894 29028 +3 29166 29165 29028 +3 29029 29166 29028 +3 29303 29302 29165 +3 29166 29303 29165 +3 29440 29439 29302 +3 29303 29440 29302 +3 29578 29577 29439 +3 29440 29578 29439 +3 29711 29710 29577 +3 29578 29711 29577 +3 29711 29840 29839 +3 29710 29711 29839 +3 29840 29971 29970 +3 29839 29840 29970 +3 30103 30102 29970 +3 29971 30103 29970 +3 30103 30236 30235 +3 30102 30103 30235 +3 30236 30369 30368 +3 30235 30236 30368 +3 2960 24791 2822 +3 30369 30503 30368 +3 27317 12100 12019 +3 30689 12902 23042 +3 26352 27144 27140 +3 20028 18602 19899 +3 28870 29291 2137 +3 26348 26352 27140 +3 28684 21625 21626 +3 19261 19369 2412 +3 28207 28206 28089 +3 33672 33673 927 +3 27973 27972 27856 +3 28090 28207 28089 +3 27857 27973 27856 +3 28090 28089 27972 +3 17303 17315 24566 +3 30750 30088 30751 +3 17303 24565 17264 +3 25281 30229 26081 +3 30624 14560 24032 +3 29966 29967 25043 +3 31432 31431 31364 +3 30169 30168 30036 +3 28073 29895 26490 +3 19233 28736 19032 +3 29370 29369 29232 +3 29895 9277 18931 +3 30212 19675 21930 +3 29096 29095 28960 +3 21643 2750 27893 +3 30208 30212 21930 +3 29908 29907 29778 +3 29159 26946 27290 +3 27860 27976 27859 +3 29779 29908 29778 +3 18189 29006 14083 +3 27860 27859 27744 +3 29910 29911 30041 +3 19923 19789 19739 +3 30588 30722 30721 +3 29782 29911 29910 +3 23152 22756 15631 +3 6919 6865 30708 +3 28586 28490 28491 +3 27395 27396 27514 +3 30464 30463 30330 +3 28493 28586 28491 +3 28711 28710 28581 +3 22286 22190 22191 +3 28009 26493 26486 +3 33580 28581 28580 +3 11229 6660 2771 +3 29264 28099 19571 +3 30598 30732 30597 +3 11511 11229 2771 +3 2950 3092 3091 +3 28846 28845 28713 +3 27402 29688 27289 +3 30454 30588 30453 +3 27140 28458 28457 +3 20513 20428 27151 +3 2820 22332 19574 +3 33274 33273 33168 +3 29834 25040 29704 +3 27205 27323 27322 +3 27204 27205 27322 +3 27323 27442 27441 +3 27322 27323 27441 +3 27442 27560 27559 +3 27441 27442 27559 +3 27560 27677 27676 +3 27559 27560 27676 +3 27677 27792 27791 +3 27676 27677 27791 +3 27792 27908 27907 +3 27791 27792 27907 +3 28025 28024 27907 +3 27908 28025 27907 +3 28142 28141 28024 +3 28025 28142 28024 +3 28259 28258 28141 +3 28142 28259 28141 +3 28259 28379 28378 +3 28258 28259 28378 +3 28379 28501 28500 +3 28378 28379 28500 +3 28501 28630 28629 +3 28500 28501 28629 +3 28630 28762 28761 +3 28629 28630 28761 +3 28762 28895 28894 +3 28761 28762 28894 +3 28895 29030 29029 +3 28894 28895 29029 +3 29167 29166 29029 +3 29030 29167 29029 +3 29304 29303 29166 +3 29167 29304 29166 +3 29441 29440 29303 +3 29304 29441 29303 +3 29579 29578 29440 +3 29441 29579 29440 +3 29712 29711 29578 +3 29579 29712 29578 +3 29712 29841 29840 +3 29711 29712 29840 +3 29841 29972 29971 +3 29840 29841 29971 +3 30104 30103 29971 +3 29972 30104 29971 +3 30104 30237 30236 +3 30103 30104 30236 +3 30237 30370 30369 +3 30236 30237 30369 +3 30504 30503 30369 +3 30370 30504 30369 +3 13845 13944 13943 +3 27173 30609 24063 +3 6657 6782 19595 +3 28322 28323 28442 +3 27144 28466 28458 +3 2951 20028 2813 +3 34937 34936 34807 +3 27140 27144 28458 +3 27291 28869 28865 +3 31791 31897 31790 +3 3844 6006 29491 +3 28859 27291 28865 +3 30758 5733 19553 +3 28870 28859 29291 +3 21374 25779 25767 +3 26490 27402 28869 +3 11839 27081 11755 +3 25405 26969 25404 +3 35684 5560 35648 +3 26589 26588 25949 +3 30037 30169 30036 +3 34680 34679 34551 +3 29264 29568 29022 +3 30302 30301 30168 +3 26591 29895 18931 +3 19138 27867 19659 +3 28961 29096 28960 +3 9277 29947 29815 +3 19675 5088 19914 +3 28961 28960 28827 +3 29765 29895 28073 +3 21930 19675 19914 +3 30039 30038 29907 +3 26946 29765 28073 +3 27628 27745 27627 +3 30834 30835 2410 +3 31786 31785 31685 +3 26834 26831 26835 +3 29511 29649 29510 +3 29782 29781 29648 +3 29911 29912 30042 +3 26703 26704 26815 +3 27278 27396 27395 +3 27277 27278 27395 +3 28490 28947 19901 +3 28491 28490 19901 +3 29808 29807 29674 +3 28692 28693 28824 +3 28843 28842 28710 +3 28711 28843 28710 +3 24570 12008 23568 +3 28369 28491 19517 +3 6660 29819 29288 +3 2771 6660 29288 +3 26610 26611 26715 +3 27505 20677 27387 +3 29384 29521 29383 +3 30325 30324 30191 +3 7288 5741 27635 +3 19270 26593 28984 +3 29220 29293 29156 +3 19577 19688 567 +3 10771 4239 4371 +3 12532 27905 12622 +3 22677 22678 22776 +3 27087 27206 27205 +3 11938 27205 27204 +3 27206 27324 27323 +3 27205 27206 27323 +3 27324 27443 27442 +3 27323 27324 27442 +3 27443 27561 27560 +3 27442 27443 27560 +3 27561 27678 27677 +3 27560 27561 27677 +3 27678 27793 27792 +3 27677 27678 27792 +3 27793 27909 27908 +3 27792 27793 27908 +3 28026 28025 27908 +3 27909 28026 27908 +3 28143 28142 28025 +3 28026 28143 28025 +3 28143 28260 28259 +3 28142 28143 28259 +3 28260 28380 28379 +3 28259 28260 28379 +3 28380 28502 28501 +3 28379 28380 28501 +3 28502 28631 28630 +3 28501 28502 28630 +3 28631 28763 28762 +3 28630 28631 28762 +3 28763 28896 28895 +3 28762 28763 28895 +3 28896 29031 29030 +3 28895 28896 29030 +3 29031 29168 29167 +3 29030 29031 29167 +3 29305 29304 29167 +3 29168 29305 29167 +3 29442 29441 29304 +3 29305 29442 29304 +3 29580 29579 29441 +3 29442 29580 29441 +3 29713 29712 29579 +3 29580 29713 29579 +3 29713 29842 29841 +3 29712 29713 29841 +3 29842 29973 29972 +3 29841 29842 29972 +3 30105 30104 29972 +3 29973 30105 29972 +3 30105 30238 30237 +3 30104 30105 30237 +3 30238 30371 30370 +3 30237 30238 30370 +3 30505 30504 30370 +3 30371 30505 30370 +3 4950 21568 16178 +3 35607 35702 35387 +3 28443 28565 28564 +3 27856 27855 27740 +3 18602 19595 19899 +3 28442 28443 28564 +3 28466 30207 30203 +3 30836 2951 2813 +3 22729 30477 21396 +3 28458 28466 30203 +3 28585 33824 33823 +3 5563 35379 35604 +3 30672 24559 30671 +3 30886 30940 30885 +3 19001 4687 4686 +3 17815 19536 17911 +3 17306 17264 21374 +3 19476 17306 21374 +3 24010 30472 24009 +3 30603 26788 20758 +3 10601 28334 11404 +3 27064 26948 27065 +3 30169 30302 30168 +3 30037 30036 29905 +3 29503 29641 29640 +3 30435 30434 30301 +3 18931 9277 29815 +3 17626 19409 2403 +3 28828 28961 28827 +3 32400 32505 32399 +3 5088 28072 28015 +3 28828 28827 28695 +3 28426 28017 28134 +3 19914 5088 28015 +3 19899 19898 2410 +3 28709 28841 28708 +3 26491 26492 26587 +3 30299 30300 30432 +3 29649 29782 29648 +3 26588 26693 26692 +3 30587 30588 30721 +3 29649 29648 29510 +3 27396 27515 27514 +3 30504 30505 25576 +3 28947 19234 29020 +3 27158 27159 27277 +3 35933 35488 35944 +3 19901 28947 29020 +3 28976 28975 28842 +3 26604 26709 26708 +3 26824 26825 26939 +3 28843 28976 28842 +3 29819 30605 30740 +3 17260 27729 27164 +3 21608 28303 21516 +3 29288 29819 30740 +3 10727 18375 26914 +3 32868 32976 32975 +3 27164 11103 19039 +3 23916 17984 6410 +3 14055 15216 16610 +3 21468 6970 21471 +3 23710 30234 23708 +3 26611 26716 26715 +3 31896 31997 31895 +3 30468 22788 22689 +3 27087 11938 11853 +3 30093 14041 29961 +3 27088 27207 27206 +3 27087 27088 27206 +3 27207 27325 27324 +3 27206 27207 27324 +3 27325 27444 27443 +3 27324 27325 27443 +3 27444 27562 27561 +3 27443 27444 27561 +3 27562 27679 27678 +3 27561 27562 27678 +3 27679 27794 27793 +3 27678 27679 27793 +3 27794 27910 27909 +3 27793 27794 27909 +3 28027 28026 27909 +3 27910 28027 27909 +3 28144 28143 28026 +3 28027 28144 28026 +3 28144 28261 28260 +3 28143 28144 28260 +3 28261 28381 28380 +3 28260 28261 28380 +3 28381 28503 28502 +3 28380 28381 28502 +3 28503 28632 28631 +3 28502 28503 28631 +3 28632 28764 28763 +3 28631 28632 28763 +3 28764 28897 28896 +3 28763 28764 28896 +3 28897 29032 29031 +3 28896 28897 29031 +3 29032 29169 29168 +3 29031 29032 29168 +3 29306 29305 29168 +3 29169 29306 29168 +3 29443 29442 29305 +3 29306 29443 29305 +3 29581 29580 29442 +3 29443 29581 29442 +3 29714 29713 29580 +3 29581 29714 29580 +3 29714 29843 29842 +3 29713 29714 29842 +3 29843 29974 29973 +3 29842 29843 29973 +3 29974 30106 30105 +3 29973 29974 30105 +3 30106 30239 30238 +3 30105 30106 30238 +3 30239 30372 30371 +3 30238 30239 30371 +3 30506 30505 30371 +3 30372 30506 30371 +3 25806 26240 31655 +3 35866 35778 35607 +3 27741 27856 27740 +3 28737 29152 29259 +3 28694 28693 28564 +3 27624 27741 27623 +3 30835 30836 2813 +3 28565 28694 28564 +3 6281 27900 27899 +3 30568 30702 30567 +3 21931 6281 19855 +3 19855 6281 27899 +3 30207 21931 21846 +3 21846 21931 19855 +3 27749 20846 27865 +3 30203 30207 21846 +3 17312 17306 19476 +3 35748 35865 35640 +3 30356 30490 9402 +3 17312 30603 17306 +3 17306 20758 17264 +3 30603 20758 17306 +3 29906 30037 29905 +3 24865 24993 24992 +3 30302 30435 30301 +3 29906 29905 29776 +3 19591 29696 29015 +3 30435 30569 30568 +3 32614 32613 32504 +3 28841 28974 28840 +3 28696 28828 28695 +3 18930 22195 19017 +3 19242 27173 27530 +3 19629 19242 27530 +3 28204 28205 28321 +3 28441 28442 28563 +3 30166 30167 30299 +3 30300 30433 30432 +3 25444 25527 25241 +3 26692 26693 23692 +3 29374 29511 29510 +3 29373 29374 29510 +3 30743 13371 27282 +3 24657 24658 15873 +3 27041 27042 27158 +3 27159 27278 27277 +3 24908 24443 29153 +3 19234 29153 24443 +3 26416 26417 27202 +3 30482 29415 30087 +3 29111 29110 28975 +3 28976 29111 28975 +3 11413 11463 11412 +3 32726 32725 32611 +3 30605 19201 18770 +3 30740 30605 18770 +3 33698 28584 28583 +3 25793 24566 24571 +3 35846 35535 35414 +3 28622 26583 27139 +3 26731 11529 11597 +3 19032 30341 28887 +3 27968 27969 28085 +3 12481 6006 3844 +3 29893 17260 29698 +3 26739 26854 26853 +3 4396 332 22270 +3 26854 26972 26971 +3 26853 26854 26971 +3 26972 27089 27088 +3 26971 26972 27088 +3 27089 27208 27207 +3 27088 27089 27207 +3 27208 27326 27325 +3 27207 27208 27325 +3 27326 27445 27444 +3 27325 27326 27444 +3 27445 27563 27562 +3 27444 27445 27562 +3 27563 27680 27679 +3 27562 27563 27679 +3 27680 27795 27794 +3 27679 27680 27794 +3 27795 27911 27910 +3 27794 27795 27910 +3 28028 28027 27910 +3 27911 28028 27910 +3 28145 28144 28027 +3 28028 28145 28027 +3 28145 28262 28261 +3 28144 28145 28261 +3 28262 28382 28381 +3 28261 28262 28381 +3 28382 28504 28503 +3 28381 28382 28503 +3 28504 28633 28632 +3 28503 28504 28632 +3 28633 28765 28764 +3 28632 28633 28764 +3 28765 28898 28897 +3 28764 28765 28897 +3 28898 29033 29032 +3 28897 28898 29032 +3 29033 29170 29169 +3 29032 29033 29169 +3 29307 29306 29169 +3 29170 29307 29169 +3 29444 29443 29306 +3 29307 29444 29306 +3 29582 29581 29443 +3 29444 29582 29443 +3 29715 29714 29581 +3 29582 29715 29581 +3 29715 29844 29843 +3 29714 29715 29843 +3 29844 29975 29974 +3 29843 29844 29974 +3 29975 30107 30106 +3 29974 29975 30106 +3 30240 30239 30106 +3 30107 30240 30106 +3 30240 30373 30372 +3 30239 30240 30372 +3 30373 30507 30506 +3 30372 30373 30506 +3 27081 26963 11754 +3 29962 21542 29961 +3 27506 27624 27505 +3 27741 27740 27623 +3 25283 25646 25645 +3 27624 27623 27505 +3 28826 28959 28958 +3 27387 27506 27505 +3 30702 30836 30835 +3 28825 28826 28958 +3 30568 30567 30433 +3 30701 30702 30835 +3 30434 30568 30433 +3 30702 30701 30567 +3 2180 2051 2181 +3 20028 19899 2813 +3 18430 20313 20314 +3 20314 20313 21779 +3 30614 30603 17312 +3 17671 30614 17312 +3 26789 26788 30603 +3 30614 26789 30603 +3 31904 32005 31903 +3 25052 19915 24673 +3 29777 29906 29776 +3 20052 27146 28682 +3 30434 30435 30568 +3 29777 29776 29643 +3 29109 29246 29108 +3 30569 30703 30702 +3 28088 28205 28204 +3 30723 7174 30722 +3 29827 30750 28366 +3 29227 29228 29364 +3 26920 20260 26921 +3 29908 30039 29907 +3 30034 30035 30166 +3 27510 27628 27509 +3 21542 20018 25942 +3 30992 30991 30933 +3 29100 29237 29099 +3 29374 29373 29236 +3 30046 30178 30177 +3 331 17285 26599 +3 26924 27042 27041 +3 26923 26924 27041 +3 35254 13013 35251 +3 21152 14427 12991 +3 27255 28602 28601 +3 19144 19447 21469 +3 29248 29247 29110 +3 29111 29248 29110 +3 32976 33082 33081 +3 33487 33486 33373 +3 19201 19133 28127 +3 18770 19201 28127 +3 6853 19855 27645 +3 27645 27899 30156 +3 32948 33054 32947 +3 26629 11613 26525 +3 34547 34675 34546 +3 28071 30423 29149 +3 24492 23782 28626 +3 27645 27641 30770 +3 26628 26740 26739 +3 25522 25806 31655 +3 26740 26855 26854 +3 26739 26740 26854 +3 26855 26973 26972 +3 26854 26855 26972 +3 26973 27090 27089 +3 26972 26973 27089 +3 27090 27209 27208 +3 27089 27090 27208 +3 27209 27327 27326 +3 27208 27209 27326 +3 27327 27446 27445 +3 27326 27327 27445 +3 27446 27564 27563 +3 27445 27446 27563 +3 27564 27681 27680 +3 27563 27564 27680 +3 27681 27796 27795 +3 27680 27681 27795 +3 27796 27912 27911 +3 27795 27796 27911 +3 28029 28028 27911 +3 27912 28029 27911 +3 28146 28145 28028 +3 28029 28146 28028 +3 28146 28263 28262 +3 28145 28146 28262 +3 28263 28383 28382 +3 28262 28263 28382 +3 28383 28505 28504 +3 28382 28383 28504 +3 28505 28634 28633 +3 28504 28505 28633 +3 28634 28766 28765 +3 28633 28634 28765 +3 28766 28899 28898 +3 28765 28766 28898 +3 28899 29034 29033 +3 28898 28899 29033 +3 29034 29171 29170 +3 29033 29034 29170 +3 29171 29308 29307 +3 29170 29171 29307 +3 29445 29444 29307 +3 29308 29445 29307 +3 29583 29582 29444 +3 29445 29583 29444 +3 29716 29715 29582 +3 29583 29716 29582 +3 29716 29845 29844 +3 29715 29716 29844 +3 29845 29976 29975 +3 29844 29845 29975 +3 29976 30108 30107 +3 29975 29976 30107 +3 30241 30240 30107 +3 30108 30241 30107 +3 30374 30373 30240 +3 30241 30374 30240 +3 30374 30508 30507 +3 30373 30374 30507 +3 35542 29687 16313 +3 24182 24120 29415 +3 29368 29367 29230 +3 29231 29368 29230 +3 29368 29505 29367 +3 29505 29504 29367 +3 29505 29643 29504 +3 29643 29642 29504 +3 29231 29230 29093 +3 29776 29775 29642 +3 29094 29093 28958 +3 29094 29231 29093 +3 28826 28825 28693 +3 28959 29094 28958 +3 30625 30623 24451 +3 28694 28826 28693 +3 11422 31080 11424 +3 25568 26212 30229 +3 30623 30614 17671 +3 30625 24451 24450 +3 30623 26790 26789 +3 30614 30623 26789 +3 24052 20437 23601 +3 17872 17966 20362 +3 29289 29264 29022 +3 19792 18691 26504 +3 29644 29777 29643 +3 5733 2820 19553 +3 30568 30569 30702 +3 29369 29506 29368 +3 29697 29012 17316 +3 30703 30837 30836 +3 29502 29640 29639 +3 27854 27855 27970 +3 30039 30171 30170 +3 26946 28073 27290 +3 27745 27744 27627 +3 30038 30039 30170 +3 34934 34933 34804 +3 27628 27627 27509 +3 29237 29374 29236 +3 26920 27038 27037 +3 28228 25141 28227 +3 29237 29236 29099 +3 27042 27159 27158 +3 23990 24109 24765 +3 28450 28449 28329 +3 26808 26809 26923 +3 26508 26604 26507 +3 28330 28450 28329 +3 29385 29384 29247 +3 27979 27978 27862 +3 26939 20184 20183 +3 29248 29385 29247 +3 19133 1857 21839 +3 6406 28304 25550 +3 30341 19670 28887 +3 28127 19133 21839 +3 29149 29267 29129 +3 29903 30034 30033 +3 27971 28088 28087 +3 28071 29149 29129 +3 20739 21290 25765 +3 24942 3052 12192 +3 25105 30507 30508 +3 26629 26741 26740 +3 26628 26629 26740 +3 26741 26856 26855 +3 26740 26741 26855 +3 26856 26974 26973 +3 26855 26856 26973 +3 26974 27091 27090 +3 26973 26974 27090 +3 27091 27210 27209 +3 27090 27091 27209 +3 27210 27328 27327 +3 27209 27210 27327 +3 27328 27447 27446 +3 27327 27328 27446 +3 27447 27565 27564 +3 27446 27447 27564 +3 27565 27682 27681 +3 27564 27565 27681 +3 27682 27797 27796 +3 27681 27682 27796 +3 27797 27913 27912 +3 27796 27797 27912 +3 28030 28029 27912 +3 27913 28030 27912 +3 28147 28146 28029 +3 28030 28147 28029 +3 28147 28264 28263 +3 28146 28147 28263 +3 28264 28384 28383 +3 28263 28264 28383 +3 28384 28506 28505 +3 28383 28384 28505 +3 28506 28635 28634 +3 28505 28506 28634 +3 28635 28767 28766 +3 28634 28635 28766 +3 28767 28900 28899 +3 28766 28767 28899 +3 28900 29035 29034 +3 28899 28900 29034 +3 29172 29171 29034 +3 29035 29172 29034 +3 29172 29309 29308 +3 29171 29172 29308 +3 29446 29445 29308 +3 29309 29446 29308 +3 29584 29583 29445 +3 29446 29584 29445 +3 29584 29717 29716 +3 29583 29584 29716 +3 29717 29846 29845 +3 29716 29717 29845 +3 29846 29977 29976 +3 29845 29846 29976 +3 30109 30108 29976 +3 29977 30109 29976 +3 30242 30241 30108 +3 30109 30242 30108 +3 30242 30375 30374 +3 30241 30242 30374 +3 30375 30509 30508 +3 30374 30375 30508 +3 12442 27674 27789 +3 30777 25242 30644 +3 4381 8867 11975 +3 28228 25144 25142 +3 30301 30434 30300 +3 25310 25155 25725 +3 30168 30301 30167 +3 30434 30433 30300 +3 30035 30036 30167 +3 30301 30300 30167 +3 29904 29905 30035 +3 30036 30168 30167 +3 29776 29905 29775 +3 29905 30036 30035 +3 29643 29776 29642 +3 29905 29904 29775 +3 25646 28114 28115 +3 24450 25720 24444 +3 30334 22590 30201 +3 32321 32424 32423 +3 1382 11502 8780 +3 9897 13962 1644 +3 1382 9897 1644 +3 20865 27550 21462 +3 24054 27026 25183 +3 28361 29563 29634 +3 30604 29289 30470 +3 29264 19571 19350 +3 29644 29643 29505 +3 21556 26910 26524 +3 6410 21635 25961 +3 29506 29644 29505 +3 25144 28229 28230 +3 32294 32293 32192 +3 26947 26360 6407 +3 27777 27663 12255 +3 30171 30304 30303 +3 30170 30171 30303 +3 27391 27510 27509 +3 27390 27391 27509 +3 19900 29157 30340 +3 27038 27155 27154 +3 29100 29099 28964 +3 28965 29100 28964 +3 31112 31113 31175 +3 31176 31240 31239 +3 26696 26697 26808 +3 26809 26924 26923 +3 27645 30156 29767 +3 30691 19040 30692 +3 28099 30736 2948 +3 7079 7078 21469 +3 29522 29521 29384 +3 29385 29522 29384 +3 28242 683 19689 +3 14055 30803 17479 +3 1857 29429 29355 +3 21839 1857 29355 +3 7404 20240 30716 +3 7296 6969 7182 +3 29832 25425 29831 +3 28754 17569 235 +3 26451 12108 26452 +3 18408 23042 331 +3 18375 26917 26914 +3 26525 26630 26629 +3 30644 25242 30509 +3 26630 26742 26741 +3 26629 26630 26741 +3 26742 26857 26856 +3 26741 26742 26856 +3 26857 26975 26974 +3 26856 26857 26974 +3 26975 27092 27091 +3 26974 26975 27091 +3 27092 27211 27210 +3 27091 27092 27210 +3 27211 27329 27328 +3 27210 27211 27328 +3 27329 27448 27447 +3 27328 27329 27447 +3 27448 27566 27565 +3 27447 27448 27565 +3 27566 27683 27682 +3 27565 27566 27682 +3 27683 27798 27797 +3 27682 27683 27797 +3 27798 27914 27913 +3 27797 27798 27913 +3 28031 28030 27913 +3 27914 28031 27913 +3 28148 28147 28030 +3 28031 28148 28030 +3 28148 28265 28264 +3 28147 28148 28264 +3 28265 28385 28384 +3 28264 28265 28384 +3 28385 28507 28506 +3 28384 28385 28506 +3 28507 28636 28635 +3 28506 28507 28635 +3 28636 28768 28767 +3 28635 28636 28767 +3 28768 28901 28900 +3 28767 28768 28900 +3 28901 29036 29035 +3 28900 28901 29035 +3 29036 29173 29172 +3 29035 29036 29172 +3 29310 29309 29172 +3 29173 29310 29172 +3 29447 29446 29309 +3 29310 29447 29309 +3 29585 29584 29446 +3 29447 29585 29446 +3 29585 29718 29717 +3 29584 29585 29717 +3 29718 29847 29846 +3 29717 29718 29846 +3 29847 29978 29977 +3 29846 29847 29977 +3 30110 30109 29977 +3 29978 30110 29977 +3 30243 30242 30109 +3 30110 30243 30109 +3 30243 30376 30375 +3 30242 30243 30375 +3 30376 30510 30509 +3 30375 30376 30509 +3 11483 24572 24571 +3 30510 30644 30509 +3 30644 30778 30777 +3 25144 25044 25045 +3 25539 8580 24750 +3 35062 35191 35061 +3 14074 1063 24613 +3 24505 24613 1063 +3 2920 16996 16997 +3 19674 23775 15026 +3 28480 28472 27163 +3 26360 27165 26355 +3 27165 28480 27163 +3 28690 28691 28822 +3 28956 29091 29090 +3 29228 29365 29364 +3 7184 8153 20091 +3 17840 19897 17912 +3 14374 28232 6279 +3 21238 14427 21152 +3 9897 1382 8780 +3 30632 26792 30625 +3 11381 25121 25258 +3 23055 30689 18408 +3 26599 23439 20580 +3 16766 14970 19451 +3 27725 21239 19425 +3 28229 25144 28228 +3 27151 27270 27269 +3 7068 30613 19231 +3 27269 20513 27151 +3 23459 23458 22424 +3 19677 19570 6410 +3 17984 19677 6410 +3 28228 25142 25141 +3 33531 33532 33650 +3 30304 30437 30436 +3 29230 29367 29366 +3 27273 27391 27390 +3 27272 27273 27390 +3 27037 27038 27154 +3 27155 27274 27273 +3 28965 28964 28831 +3 28832 28965 28831 +3 31303 31302 31237 +3 31238 31303 31237 +3 29937 29936 29807 +3 26697 26809 26808 +3 32844 32952 32843 +3 7069 6783 11576 +3 22156 20892 28367 +3 27863 27979 27862 +3 29660 29659 29521 +3 29522 29660 29521 +3 27414 28814 28813 +3 22369 22467 29489 +3 32618 32617 32508 +3 30219 27550 35496 +3 19040 19026 30692 +3 6841 6840 6968 +3 17479 28754 235 +3 19673 2808 17569 +3 26362 26430 26429 +3 26361 26362 26429 +3 26430 26526 26525 +3 35386 29685 28992 +3 26526 26631 26630 +3 26525 26526 26630 +3 26631 26743 26742 +3 26630 26631 26742 +3 26743 26858 26857 +3 26742 26743 26857 +3 26858 26976 26975 +3 26857 26858 26975 +3 26976 27093 27092 +3 26975 26976 27092 +3 27093 27212 27211 +3 27092 27093 27211 +3 27212 27330 27329 +3 27211 27212 27329 +3 27330 27449 27448 +3 27329 27330 27448 +3 27449 27567 27566 +3 27448 27449 27566 +3 27567 27684 27683 +3 27566 27567 27683 +3 27684 27799 27798 +3 27683 27684 27798 +3 27799 27915 27914 +3 27798 27799 27914 +3 27915 28032 28031 +3 27914 27915 28031 +3 28149 28148 28031 +3 28032 28149 28031 +3 28149 28266 28265 +3 28148 28149 28265 +3 28266 28386 28385 +3 28265 28266 28385 +3 28386 28508 28507 +3 28385 28386 28507 +3 28508 28637 28636 +3 28507 28508 28636 +3 28637 28769 28768 +3 28636 28637 28768 +3 28769 28902 28901 +3 28768 28769 28901 +3 28902 29037 29036 +3 28901 28902 29036 +3 29037 29174 29173 +3 29036 29037 29173 +3 29311 29310 29173 +3 29174 29311 29173 +3 29448 29447 29310 +3 29311 29448 29310 +3 29586 29585 29447 +3 29448 29586 29447 +3 29586 29719 29718 +3 29585 29586 29718 +3 29719 29848 29847 +3 29718 29719 29847 +3 29848 29979 29978 +3 29847 29848 29978 +3 30111 30110 29978 +3 29979 30111 29978 +3 30244 30243 30110 +3 30111 30244 30110 +3 30244 30377 30376 +3 30243 30244 30376 +3 30377 30511 30510 +3 30376 30377 30510 +3 30511 30645 30644 +3 30510 30511 30644 +3 30645 30779 30778 +3 30644 30645 30778 +3 23315 24021 24227 +3 34723 34597 6945 +3 28736 30341 19032 +3 24362 23569 23568 +3 29015 29696 6903 +3 27549 12422 27866 +3 19409 19358 2403 +3 26902 19591 18509 +3 29246 29245 29108 +3 7174 19409 7070 +3 24274 24273 6528 +3 28974 28973 28840 +3 30712 30711 30577 +3 27957 25402 25259 +3 12422 27549 24439 +3 29538 27259 27869 +3 24128 25033 25034 +3 21307 35766 21955 +3 34134 34133 33997 +3 35075 35074 34945 +3 35846 2137 19143 +3 21369 26348 26347 +3 30298 30299 30431 +3 28859 28865 29291 +3 2680 2546 26112 +3 30443 30444 30577 +3 26203 12446 26112 +3 20180 20267 24886 +3 19357 19677 17984 +3 2546 19357 17984 +3 24266 29412 24349 +3 24481 27044 26927 +3 30303 30304 30436 +3 29774 29775 29903 +3 27154 27273 27272 +3 27153 27154 27272 +3 27154 27155 27273 +3 27274 27392 27391 +3 28700 28699 28570 +3 28571 28700 28570 +3 29286 6786 6652 +3 6652 27783 29553 +3 28734 19904 28732 +3 24427 23517 17819 +3 28497 28547 30289 +3 30292 19562 19563 +3 26812 26813 26927 +3 28752 28751 24745 +3 29793 29792 29659 +3 29660 29793 29659 +3 29092 29229 29228 +3 28021 24475 24398 +3 34803 34932 34802 +3 26486 26493 27412 +3 19353 7296 19354 +3 31372 31439 31371 +3 28754 19673 17569 +3 19040 2954 19026 +3 30757 30754 2808 +3 25310 30779 22136 +3 26362 26363 26430 +3 26431 26527 26526 +3 26430 26431 26526 +3 26527 26632 26631 +3 26526 26527 26631 +3 26632 26744 26743 +3 26631 26632 26743 +3 26744 26859 26858 +3 26743 26744 26858 +3 26859 26977 26976 +3 26858 26859 26976 +3 26977 27094 27093 +3 26976 26977 27093 +3 27094 27213 27212 +3 27093 27094 27212 +3 27213 27331 27330 +3 27212 27213 27330 +3 27331 27450 27449 +3 27330 27331 27449 +3 27450 27568 27567 +3 27449 27450 27567 +3 27568 27685 27684 +3 27567 27568 27684 +3 27685 27800 27799 +3 27684 27685 27799 +3 27800 27916 27915 +3 27799 27800 27915 +3 27916 28033 28032 +3 27915 27916 28032 +3 28150 28149 28032 +3 28033 28150 28032 +3 28150 28267 28266 +3 28149 28150 28266 +3 28267 28387 28386 +3 28266 28267 28386 +3 28387 28509 28508 +3 28386 28387 28508 +3 28509 28638 28637 +3 28508 28509 28637 +3 28638 28770 28769 +3 28637 28638 28769 +3 28770 28903 28902 +3 28769 28770 28902 +3 28903 29038 29037 +3 28902 28903 29037 +3 29038 29175 29174 +3 29037 29038 29174 +3 29312 29311 29174 +3 29175 29312 29174 +3 29449 29448 29311 +3 29312 29449 29311 +3 29587 29586 29448 +3 29449 29587 29448 +3 29587 29720 29719 +3 29586 29587 29719 +3 29720 29849 29848 +3 29719 29720 29848 +3 29849 29980 29979 +3 29848 29849 29979 +3 30112 30111 29979 +3 29980 30112 29979 +3 30245 30244 30111 +3 30112 30245 30111 +3 30378 30377 30244 +3 30245 30378 30244 +3 30378 30512 30511 +3 30377 30378 30511 +3 30512 30646 30645 +3 30511 30512 30645 +3 30646 30780 30779 +3 30645 30646 30779 +3 34932 34931 34802 +3 30780 22136 30779 +3 27291 26490 28869 +3 30472 29815 24009 +3 26490 26591 27402 +3 26591 19236 27402 +3 19236 26591 28880 +3 26591 18931 28880 +3 18931 29815 28880 +3 29815 29816 28880 +3 29816 29815 30472 +3 19357 19250 24761 +3 29119 26059 24717 +3 28217 26902 18509 +3 19792 26504 30771 +3 19233 19032 19912 +3 25241 25240 25443 +3 27900 28752 21514 +3 5223 5090 5224 +3 21608 21516 21609 +3 27841 19242 19462 +3 29120 29767 19794 +3 18928 22552 27612 +3 6897 11407 21369 +3 34675 34674 34546 +3 35740 29006 35847 +3 24559 25366 25101 +3 25646 28115 25645 +3 19250 19357 2546 +3 2680 19250 2546 +3 25922 27196 11925 +3 30070 30069 22299 +3 29904 30035 30034 +3 22787 22689 22788 +3 27037 27154 27153 +3 26587 20087 20007 +3 27273 27274 27391 +3 27392 27511 27510 +3 28832 28831 28699 +3 28700 28832 28699 +3 26737 29827 6786 +3 29286 26737 6786 +3 29565 28734 26593 +3 19904 27050 28732 +3 27178 27195 28497 +3 28547 30292 30289 +3 26700 26701 26812 +3 33864 33999 33863 +3 29922 29921 29792 +3 29793 29922 29792 +3 20864 35791 35908 +3 30734 27257 21381 +3 14190 10683 10561 +3 22524 33237 22425 +3 22156 21776 22679 +3 30673 30674 25667 +3 17310 29893 29698 +3 20766 20765 20683 +3 19673 30757 2808 +3 4816 28617 30754 +3 28454 28333 21269 +3 26212 30228 30229 +3 26432 26528 26527 +3 26431 26432 26527 +3 26528 26633 26632 +3 26527 26528 26632 +3 26633 26745 26744 +3 26632 26633 26744 +3 26745 26860 26859 +3 26744 26745 26859 +3 26860 26978 26977 +3 26859 26860 26977 +3 26978 27095 27094 +3 26977 26978 27094 +3 27095 27214 27213 +3 27094 27095 27213 +3 27214 27332 27331 +3 27213 27214 27331 +3 27332 27451 27450 +3 27331 27332 27450 +3 27451 27569 27568 +3 27450 27451 27568 +3 27569 27686 27685 +3 27568 27569 27685 +3 27686 27801 27800 +3 27685 27686 27800 +3 27801 27917 27916 +3 27800 27801 27916 +3 28034 28033 27916 +3 27917 28034 27916 +3 28151 28150 28033 +3 28034 28151 28033 +3 28151 28268 28267 +3 28150 28151 28267 +3 28268 28388 28387 +3 28267 28268 28387 +3 28388 28510 28509 +3 28387 28388 28509 +3 28510 28639 28638 +3 28509 28510 28638 +3 28639 28771 28770 +3 28638 28639 28770 +3 28771 28904 28903 +3 28770 28771 28903 +3 29039 29038 28903 +3 28904 29039 28903 +3 29039 29176 29175 +3 29038 29039 29175 +3 29313 29312 29175 +3 29176 29313 29175 +3 29450 29449 29312 +3 29313 29450 29312 +3 29588 29587 29449 +3 29450 29588 29449 +3 29588 29721 29720 +3 29587 29588 29720 +3 29721 29850 29849 +3 29720 29721 29849 +3 29850 29981 29980 +3 29849 29850 29980 +3 30113 30112 29980 +3 29981 30113 29980 +3 30246 30245 30112 +3 30113 30246 30112 +3 30379 30378 30245 +3 30246 30379 30245 +3 30379 30513 30512 +3 30378 30379 30512 +3 30513 30647 30646 +3 30512 30513 30646 +3 30647 30781 30780 +3 30646 30647 30780 +3 22039 22136 30780 +3 30781 22039 30780 +3 28118 25500 28117 +3 23487 20500 20501 +3 27742 27857 27741 +3 25586 25785 21454 +3 27625 27742 27624 +3 27857 27856 27741 +3 27507 27625 27506 +3 27742 27741 27624 +3 27388 27507 27387 +3 27625 27624 27506 +3 27270 27388 27387 +3 27269 27270 27387 +3 27970 27971 28087 +3 27507 27506 27387 +3 30156 27899 21514 +3 4396 14090 24869 +3 18359 10003 12450 +3 30809 24970 23736 +3 7413 6966 6897 +3 26430 26525 26429 +3 26803 35800 11780 +3 11407 21460 21369 +3 25038 28248 26496 +3 20020 20019 26715 +3 6858 2680 6533 +3 8907 6858 6533 +3 19569 19250 2680 +3 6858 19569 2680 +3 35632 35555 35871 +3 25617 25616 16439 +3 16292 25617 16438 +3 26081 30229 30228 +3 23639 22777 26596 +3 28824 28825 28957 +3 27391 27392 27510 +3 27629 27628 27510 +3 28571 28570 28448 +3 28449 28571 28448 +3 30203 21846 30200 +3 19855 6853 19790 +3 28734 28732 26593 +3 1961 21744 22043 +3 26402 26407 27178 +3 27195 28547 28497 +3 6410 19570 21635 +3 26701 26813 26812 +3 30053 30052 29921 +3 29922 30053 29921 +3 29503 29504 29641 +3 29425 29763 28856 +3 23817 26832 17579 +3 10651 10776 4374 +3 30182 30315 30181 +3 30182 30181 30049 +3 29293 20894 30776 +3 26346 26347 27136 +3 30757 4816 30754 +3 28597 28468 28617 +3 11894 13483 12038 +3 28682 6280 21858 +3 26433 26529 26528 +3 26432 26433 26528 +3 26529 26634 26633 +3 26528 26529 26633 +3 26634 26746 26745 +3 26633 26634 26745 +3 26746 26861 26860 +3 26745 26746 26860 +3 26861 26979 26978 +3 26860 26861 26978 +3 26979 27096 27095 +3 26978 26979 27095 +3 27096 27215 27214 +3 27095 27096 27214 +3 27215 27333 27332 +3 27214 27215 27332 +3 27333 27452 27451 +3 27332 27333 27451 +3 27452 27570 27569 +3 27451 27452 27569 +3 27570 27687 27686 +3 27569 27570 27686 +3 27687 27802 27801 +3 27686 27687 27801 +3 27802 27918 27917 +3 27801 27802 27917 +3 27918 28035 28034 +3 27917 27918 28034 +3 28035 28152 28151 +3 28034 28035 28151 +3 28152 28269 28268 +3 28151 28152 28268 +3 28269 28389 28388 +3 28268 28269 28388 +3 28389 28511 28510 +3 28388 28389 28510 +3 28511 28640 28639 +3 28510 28511 28639 +3 28772 28771 28639 +3 28640 28772 28639 +3 28772 28905 28904 +3 28771 28772 28904 +3 28905 29040 29039 +3 28904 28905 29039 +3 29040 29177 29176 +3 29039 29040 29176 +3 29314 29313 29176 +3 29177 29314 29176 +3 29314 29451 29450 +3 29313 29314 29450 +3 29589 29588 29450 +3 29451 29589 29450 +3 29589 29722 29721 +3 29588 29589 29721 +3 29722 29851 29850 +3 29721 29722 29850 +3 29851 29982 29981 +3 29850 29851 29981 +3 30114 30113 29981 +3 29982 30114 29981 +3 30247 30246 30113 +3 30114 30247 30113 +3 30380 30379 30246 +3 30247 30380 30246 +3 30380 30514 30513 +3 30379 30380 30513 +3 30514 30648 30647 +3 30513 30514 30647 +3 30648 30782 30781 +3 30647 30648 30781 +3 18510 22039 30781 +3 30782 18510 30781 +3 24537 24036 25916 +3 15317 13459 22136 +3 2169 19280 19386 +3 19175 19280 2169 +3 28960 28959 28826 +3 28695 28827 28694 +3 29095 29094 28959 +3 28827 28960 28826 +3 29232 29231 29094 +3 28960 29095 28959 +3 29369 29368 29231 +3 29095 29232 29094 +3 29506 29505 29368 +3 29232 29369 29231 +3 25120 17307 27045 +3 22942 30473 30502 +3 11666 27063 11667 +3 34548 34676 34547 +3 25133 27026 24054 +3 24038 25459 17307 +3 13651 13652 29570 +3 25834 28592 28998 +3 23711 30099 30100 +3 19031 17307 25458 +3 2953 6858 8907 +3 9284 2953 8907 +3 19345 19569 6858 +3 2953 19345 6858 +3 25617 16439 16438 +3 19345 30634 19569 +3 21548 34229 21549 +3 33871 34006 33870 +3 22586 17576 24228 +3 28321 28322 28441 +3 27511 27629 27510 +3 27746 27745 27628 +3 28449 28448 28328 +3 28329 28449 28328 +3 30616 30750 29827 +3 26737 30616 29827 +3 24005 24066 24065 +3 24112 25584 25462 +3 26408 26485 26402 +3 26407 27195 27178 +3 25514 24124 24855 +3 26596 26701 26700 +3 30185 30184 30052 +3 30053 30185 30052 +3 30165 30166 30298 +3 29667 29666 29528 +3 8907 6533 6850 +3 11416 11415 31338 +3 29493 29131 30478 +3 30362 22942 12215 +3 4816 28597 28617 +3 28131 26582 28468 +3 28597 28131 28468 +3 29541 27283 26582 +3 26366 26434 26433 +3 35443 35595 35405 +3 26434 26530 26529 +3 26433 26434 26529 +3 26530 26635 26634 +3 26529 26530 26634 +3 26635 26747 26746 +3 26634 26635 26746 +3 26862 26861 26746 +3 26747 26862 26746 +3 26980 26979 26861 +3 26862 26980 26861 +3 26980 27097 27096 +3 26979 26980 27096 +3 27097 27216 27215 +3 27096 27097 27215 +3 27216 27334 27333 +3 27215 27216 27333 +3 27334 27453 27452 +3 27333 27334 27452 +3 27453 27571 27570 +3 27452 27453 27570 +3 27571 27688 27687 +3 27570 27571 27687 +3 27688 27803 27802 +3 27687 27688 27802 +3 27803 27919 27918 +3 27802 27803 27918 +3 27919 28036 28035 +3 27918 27919 28035 +3 28036 28153 28152 +3 28035 28036 28152 +3 28153 28270 28269 +3 28152 28153 28269 +3 28270 28390 28389 +3 28269 28270 28389 +3 28390 28512 28511 +3 28389 28390 28511 +3 28512 28641 28640 +3 28511 28512 28640 +3 28773 28772 28640 +3 28641 28773 28640 +3 28906 28905 28772 +3 28773 28906 28772 +3 28906 29041 29040 +3 28905 28906 29040 +3 29041 29178 29177 +3 29040 29041 29177 +3 29178 29315 29314 +3 29177 29178 29314 +3 29315 29452 29451 +3 29314 29315 29451 +3 29452 29590 29589 +3 29451 29452 29589 +3 29590 29723 29722 +3 29589 29590 29722 +3 29852 29851 29722 +3 29723 29852 29722 +3 29983 29982 29851 +3 29852 29983 29851 +3 30115 30114 29982 +3 29983 30115 29982 +3 30248 30247 30114 +3 30115 30248 30114 +3 30381 30380 30247 +3 30248 30381 30247 +3 30515 30514 30380 +3 30381 30515 30380 +3 30515 30649 30648 +3 30514 30515 30648 +3 30649 30783 30782 +3 30648 30649 30782 +3 29021 20892 23959 +3 30360 25942 30361 +3 12633 22158 22543 +3 21551 22134 22133 +3 6836 11407 6966 +3 11438 6836 6966 +3 6784 11438 6966 +3 6657 6784 6966 +3 6784 6657 18602 +3 19458 6784 18602 +3 19458 18602 20028 +3 14737 19458 20028 +3 14737 20028 2951 +3 22430 14737 2951 +3 30702 30703 30836 +3 30837 22430 2951 +3 29688 27869 19128 +3 30836 30837 2951 +3 21776 29817 29414 +3 24492 28626 28757 +3 26934 24826 24825 +3 24791 34057 2822 +3 24826 26934 26820 +3 25940 20073 24603 +3 32245 32244 32144 +3 25459 25458 17307 +3 22529 2953 9284 +3 238 22529 9284 +3 19238 19345 2953 +3 22529 19238 2953 +3 18926 30634 19345 +3 19238 18926 19345 +3 28864 28862 3052 +3 27901 12108 26344 +3 17482 24188 28134 +3 28205 28322 28321 +3 27629 27746 27628 +3 27861 27860 27745 +3 28095 28212 28094 +3 28329 28328 28211 +3 17916 30088 30750 +3 30616 17916 30750 +3 2947 19629 29275 +3 27530 30477 27874 +3 26485 26408 6840 +3 6841 26485 6840 +3 11937 27204 27203 +3 28107 29954 28737 +3 30318 30317 30184 +3 30185 30318 30184 +3 6782 7413 7302 +3 24216 24317 19426 +3 13466 19003 7403 +3 21753 27407 27955 +3 29683 29682 19670 +3 18510 21360 25314 +3 28131 29541 26582 +3 28224 11509 27283 +3 29541 28224 27283 +3 26367 26435 26434 +3 26366 26367 26434 +3 26435 26531 26530 +3 26434 26435 26530 +3 26531 26636 26635 +3 26530 26531 26635 +3 26636 26748 26747 +3 26635 26636 26747 +3 26748 26863 26862 +3 26747 26748 26862 +3 26863 26981 26980 +3 26862 26863 26980 +3 26981 27098 27097 +3 26980 26981 27097 +3 27098 27217 27216 +3 27097 27098 27216 +3 27217 27335 27334 +3 27216 27217 27334 +3 27335 27454 27453 +3 27334 27335 27453 +3 27454 27572 27571 +3 27453 27454 27571 +3 27572 27689 27688 +3 27571 27572 27688 +3 27689 27804 27803 +3 27688 27689 27803 +3 27804 27920 27919 +3 27803 27804 27919 +3 27920 28037 28036 +3 27919 27920 28036 +3 28154 28153 28036 +3 28037 28154 28036 +3 28154 28271 28270 +3 28153 28154 28270 +3 28271 28391 28390 +3 28270 28271 28390 +3 28391 28513 28512 +3 28390 28391 28512 +3 28513 28642 28641 +3 28512 28513 28641 +3 28774 28773 28641 +3 28642 28774 28641 +3 28907 28906 28773 +3 28774 28907 28773 +3 28907 29042 29041 +3 28906 28907 29041 +3 29042 29179 29178 +3 29041 29042 29178 +3 29179 29316 29315 +3 29178 29179 29315 +3 29316 29453 29452 +3 29315 29316 29452 +3 29453 29591 29590 +3 29452 29453 29590 +3 29591 29724 29723 +3 29590 29591 29723 +3 29853 29852 29723 +3 29724 29853 29723 +3 29984 29983 29852 +3 29853 29984 29852 +3 30116 30115 29983 +3 29984 30116 29983 +3 30249 30248 30115 +3 30116 30249 30115 +3 30382 30381 30248 +3 30249 30382 30248 +3 30516 30515 30381 +3 30382 30516 30381 +3 30516 30650 30649 +3 30515 30516 30649 +3 30650 30784 30783 +3 30649 30650 30783 +3 13077 25953 13078 +3 3058 24430 24517 +3 34803 34802 34674 +3 34675 34803 34674 +3 9670 35943 35880 +3 14473 25139 11880 +3 26570 26674 25089 +3 19351 5608 19459 +3 7298 7412 5609 +3 29639 29640 29772 +3 29773 29902 29901 +3 453 19494 29630 +3 11103 28240 26583 +3 28683 30422 30419 +3 15897 1961 19897 +3 30700 30834 30699 +3 30578 30712 30577 +3 17568 3086 3087 +3 33998 34134 33997 +3 25371 24126 24228 +3 26821 24826 26820 +3 29412 29397 24349 +3 29397 19589 2682 +3 29358 29397 2682 +3 10724 238 2682 +3 19589 10724 2682 +3 22423 22529 238 +3 10724 22423 238 +3 19343 19238 22529 +3 22423 19343 22529 +3 27669 18926 19238 +3 19343 27669 19238 +3 20762 20845 23816 +3 20259 26145 23692 +3 24429 24284 24345 +3 20259 20172 26145 +3 27746 27861 27745 +3 12725 11780 35800 +3 28212 28329 28211 +3 27977 27976 27860 +3 2947 28242 30088 +3 28095 28094 27977 +3 29275 27530 27874 +3 17916 2947 30088 +3 6969 6841 6968 +3 19629 27530 29275 +3 28119 28120 24731 +3 26485 26407 26402 +3 30451 30450 30317 +3 27164 27729 11103 +3 27432 28816 28814 +3 30318 30451 30317 +3 30475 5741 7288 +3 33957 21456 33823 +3 30188 30321 30187 +3 30474 30475 7288 +3 28135 30642 11509 +3 30738 19231 30558 +3 28224 28135 11509 +3 26332 26368 26367 +3 26368 26436 26435 +3 26367 26368 26435 +3 26436 26532 26531 +3 26435 26436 26531 +3 26532 26637 26636 +3 26531 26532 26636 +3 26637 26749 26748 +3 26636 26637 26748 +3 26864 26863 26748 +3 26749 26864 26748 +3 26982 26981 26863 +3 26864 26982 26863 +3 26982 27099 27098 +3 26981 26982 27098 +3 27099 27218 27217 +3 27098 27099 27217 +3 27218 27336 27335 +3 27217 27218 27335 +3 27336 27455 27454 +3 27335 27336 27454 +3 27455 27573 27572 +3 27454 27455 27572 +3 27573 27690 27689 +3 27572 27573 27689 +3 27690 27805 27804 +3 27689 27690 27804 +3 27805 27921 27920 +3 27804 27805 27920 +3 27921 28038 28037 +3 27920 27921 28037 +3 28155 28154 28037 +3 28038 28155 28037 +3 28155 28272 28271 +3 28154 28155 28271 +3 28272 28392 28391 +3 28271 28272 28391 +3 28392 28514 28513 +3 28391 28392 28513 +3 28514 28643 28642 +3 28513 28514 28642 +3 28775 28774 28642 +3 28643 28775 28642 +3 28775 28908 28907 +3 28774 28775 28907 +3 28908 29043 29042 +3 28907 28908 29042 +3 29043 29180 29179 +3 29042 29043 29179 +3 29180 29317 29316 +3 29179 29180 29316 +3 29317 29454 29453 +3 29316 29317 29453 +3 29454 29592 29591 +3 29453 29454 29591 +3 29592 29725 29724 +3 29591 29592 29724 +3 29854 29853 29724 +3 29725 29854 29724 +3 29985 29984 29853 +3 29854 29985 29853 +3 30117 30116 29984 +3 29985 30117 29984 +3 30250 30249 30116 +3 30117 30250 30116 +3 30383 30382 30249 +3 30250 30383 30249 +3 30517 30516 30382 +3 30383 30517 30382 +3 30517 30651 30650 +3 30516 30517 30650 +3 30651 30785 30784 +3 30650 30651 30784 +3 21360 30783 30784 +3 31432 31504 31431 +3 27389 27508 27388 +3 27626 27625 27507 +3 27270 27271 27388 +3 27508 27507 27388 +3 27151 27152 27270 +3 27271 27389 27388 +3 22463 24069 24128 +3 27152 27271 27270 +3 30558 21556 29540 +3 27035 27152 27151 +3 19591 29154 29696 +3 11404 28334 27267 +3 28753 7287 28335 +3 29154 30500 29696 +3 21840 6529 30217 +3 30773 21840 30217 +3 25014 25084 29216 +3 29014 29134 28621 +3 26488 23902 28985 +3 29422 29412 24266 +3 29412 14505 19589 +3 29397 29412 19589 +3 17476 10724 19589 +3 14505 17476 19589 +3 18633 22423 10724 +3 17476 18633 10724 +3 19342 19343 22423 +3 18633 19342 22423 +3 26684 27669 19343 +3 19342 26684 19343 +3 26496 28248 27669 +3 26684 26496 27669 +3 12691 25407 28304 +3 12184 12102 12185 +3 27079 27196 27078 +3 27432 27435 28816 +3 27861 27977 27860 +3 28094 28093 27976 +3 27978 28095 27977 +3 28212 28211 28094 +3 2947 29275 30073 +3 28247 19662 26262 +3 30749 19462 30616 +3 19629 2947 17916 +3 19662 28247 19097 +3 21823 21824 29257 +3 24668 29260 22233 +3 24022 23961 23946 +3 30585 30584 30450 +3 30451 30585 30450 +3 21382 29430 28101 +3 14246 21066 29944 +3 32732 32731 32617 +3 35779 29217 29355 +3 28714 28846 28713 +3 28979 28978 28845 +3 28135 17719 6977 +3 30642 28135 6977 +3 26369 26368 26332 +3 26369 26437 26436 +3 26368 26369 26436 +3 26437 26533 26532 +3 26436 26437 26532 +3 26533 26638 26637 +3 26532 26533 26637 +3 26638 26750 26749 +3 26637 26638 26749 +3 26750 26865 26864 +3 26749 26750 26864 +3 26865 26983 26982 +3 26864 26865 26982 +3 26983 27100 27099 +3 26982 26983 27099 +3 27100 27219 27218 +3 27099 27100 27218 +3 27219 27337 27336 +3 27218 27219 27336 +3 27337 27456 27455 +3 27336 27337 27455 +3 27456 27574 27573 +3 27455 27456 27573 +3 27574 27691 27690 +3 27573 27574 27690 +3 27691 27806 27805 +3 27690 27691 27805 +3 27806 27922 27921 +3 27805 27806 27921 +3 27922 28039 28038 +3 27921 27922 28038 +3 28039 28156 28155 +3 28038 28039 28155 +3 28156 28273 28272 +3 28155 28156 28272 +3 28273 28393 28392 +3 28272 28273 28392 +3 28393 28515 28514 +3 28392 28393 28514 +3 28515 28644 28643 +3 28514 28515 28643 +3 28776 28775 28643 +3 28644 28776 28643 +3 28776 28909 28908 +3 28775 28776 28908 +3 28909 29044 29043 +3 28908 28909 29043 +3 29044 29181 29180 +3 29043 29044 29180 +3 29181 29318 29317 +3 29180 29181 29317 +3 29318 29455 29454 +3 29317 29318 29454 +3 29455 29593 29592 +3 29454 29455 29592 +3 29593 29726 29725 +3 29592 29593 29725 +3 29855 29854 29725 +3 29726 29855 29725 +3 29986 29985 29854 +3 29855 29986 29854 +3 29986 30118 30117 +3 29985 29986 30117 +3 30251 30250 30117 +3 30118 30251 30117 +3 30384 30383 30250 +3 30251 30384 30250 +3 30518 30517 30383 +3 30384 30518 30383 +3 30518 30652 30651 +3 30517 30518 30651 +3 30652 30786 30785 +3 30651 30652 30785 +3 35424 13400 35684 +3 23522 25177 23984 +3 28957 29092 29091 +3 2144 2143 19050 +3 27743 27742 27625 +3 27626 27743 27625 +3 27743 27858 27742 +3 27858 27857 27742 +3 27858 27974 27857 +3 27974 27973 27857 +3 27974 28091 27973 +3 28091 28090 27973 +3 28091 28208 28090 +3 28208 28207 28090 +3 28208 28325 28207 +3 28325 28324 28207 +3 28325 28445 28324 +3 28445 28444 28324 +3 13013 35254 11963 +3 28567 28566 28444 +3 31654 31753 24485 +3 24349 29397 29358 +3 6857 14505 29412 +3 29422 6857 29412 +3 237 17476 14505 +3 6857 237 14505 +3 10328 18633 17476 +3 237 10328 17476 +3 19244 19342 18633 +3 10328 19244 18633 +3 19244 26479 26684 +3 19342 19244 26684 +3 26479 23598 26684 +3 23494 23598 23993 +3 18097 20410 24090 +3 30818 25932 30817 +3 19912 12379 19233 +3 29521 29520 29383 +3 27977 28094 27976 +3 28699 28698 28569 +3 27512 27630 27511 +3 27747 27746 27629 +3 28242 2947 30073 +3 29275 27874 26685 +3 19462 17916 30616 +3 19462 19629 17916 +3 22098 24532 22097 +3 16547 580 23995 +3 29007 21550 19134 +3 19134 30087 19304 +3 30719 30718 30584 +3 30585 30719 30584 +3 29078 21382 29016 +3 25286 24731 25287 +3 30056 30188 30055 +3 30321 30320 30187 +3 35683 35562 35521 +3 6855 7403 30731 +3 17719 30484 30485 +3 6977 17719 30485 +3 26370 26438 26437 +3 26369 26370 26437 +3 26438 26534 26533 +3 26437 26438 26533 +3 26639 26638 26533 +3 26534 26639 26533 +3 26639 26751 26750 +3 26638 26639 26750 +3 26751 26866 26865 +3 26750 26751 26865 +3 26866 26984 26983 +3 26865 26866 26983 +3 26984 27101 27100 +3 26983 26984 27100 +3 27101 27220 27219 +3 27100 27101 27219 +3 27220 27338 27337 +3 27219 27220 27337 +3 27338 27457 27456 +3 27337 27338 27456 +3 27575 27574 27456 +3 27457 27575 27456 +3 27692 27691 27574 +3 27575 27692 27574 +3 27807 27806 27691 +3 27692 27807 27691 +3 27923 27922 27806 +3 27807 27923 27806 +3 28040 28039 27922 +3 27923 28040 27922 +3 28040 28157 28156 +3 28039 28040 28156 +3 28157 28274 28273 +3 28156 28157 28273 +3 28274 28394 28393 +3 28273 28274 28393 +3 28394 28516 28515 +3 28393 28394 28515 +3 28516 28645 28644 +3 28515 28516 28644 +3 28777 28776 28644 +3 28645 28777 28644 +3 28777 28910 28909 +3 28776 28777 28909 +3 28910 29045 29044 +3 28909 28910 29044 +3 29045 29182 29181 +3 29044 29045 29181 +3 29182 29319 29318 +3 29181 29182 29318 +3 29319 29456 29455 +3 29318 29319 29455 +3 29456 29594 29593 +3 29455 29456 29593 +3 29727 29726 29593 +3 29594 29727 29593 +3 29856 29855 29726 +3 29727 29856 29726 +3 29987 29986 29855 +3 29856 29987 29855 +3 30119 30118 29986 +3 29987 30119 29986 +3 30119 30252 30251 +3 30118 30119 30251 +3 30385 30384 30251 +3 30252 30385 30251 +3 30519 30518 30384 +3 30385 30519 30384 +3 30519 30653 30652 +3 30518 30519 30652 +3 30653 30787 30786 +3 30652 30653 30786 +3 10601 16770 28334 +3 30787 6859 30786 +3 23576 22388 22387 +3 6859 22010 30786 +3 26592 29634 18454 +3 21607 21754 26242 +3 17568 6918 30711 +3 29365 29366 29502 +3 19898 15897 19897 +3 11576 7302 6846 +3 20091 19198 27298 +3 29631 29493 26583 +3 29012 28364 17316 +3 31121 31184 31183 +3 30088 19689 30751 +3 27390 27509 27389 +3 23681 24745 25656 +3 34755 21739 34754 +3 24608 26818 24530 +3 31391 31390 31323 +3 30674 30809 23736 +3 25836 28724 25835 +3 6944 6857 29422 +3 29432 6944 29422 +3 21373 237 6857 +3 6944 21373 6857 +3 21373 6785 10328 +3 237 21373 10328 +3 6785 19247 19244 +3 10328 6785 19244 +3 19247 28425 26479 +3 19244 19247 26479 +3 25514 19357 24761 +3 13554 13652 13553 +3 29492 29535 22002 +3 21269 28333 21182 +3 28850 30486 30476 +3 29682 14618 2810 +3 28570 28569 28447 +3 28448 28570 28447 +3 27630 27747 27629 +3 27862 27861 27746 +3 30073 29275 26685 +3 21506 21598 22346 +3 19026 17266 29286 +3 30749 30616 26737 +3 26122 25980 25981 +3 30743 15723 13371 +3 29956 21550 29007 +3 30756 29956 29007 +3 7067 17282 30718 +3 18915 2538 2539 +3 29078 29016 28475 +3 28735 29078 28475 +3 30746 30738 18865 +3 30588 30587 30453 +3 31655 31654 25522 +3 23984 21360 30784 +3 30484 28010 26733 +3 30485 30484 26733 +3 26371 26439 26438 +3 26370 26371 26438 +3 26439 26535 26534 +3 26438 26439 26534 +3 26640 26639 26534 +3 26535 26640 26534 +3 26640 26752 26751 +3 26639 26640 26751 +3 26752 26867 26866 +3 26751 26752 26866 +3 26867 26985 26984 +3 26866 26867 26984 +3 26985 27102 27101 +3 26984 26985 27101 +3 27102 27221 27220 +3 27101 27102 27220 +3 27221 27339 27338 +3 27220 27221 27338 +3 27339 27458 27457 +3 27338 27339 27457 +3 27458 27576 27575 +3 27457 27458 27575 +3 27693 27692 27575 +3 27576 27693 27575 +3 27808 27807 27692 +3 27693 27808 27692 +3 27808 27924 27923 +3 27807 27808 27923 +3 27924 28041 28040 +3 27923 27924 28040 +3 28041 28158 28157 +3 28040 28041 28157 +3 28158 28275 28274 +3 28157 28158 28274 +3 28275 28395 28394 +3 28274 28275 28394 +3 28395 28517 28516 +3 28394 28395 28516 +3 28517 28646 28645 +3 28516 28517 28645 +3 28778 28777 28645 +3 28646 28778 28645 +3 28778 28911 28910 +3 28777 28778 28910 +3 28911 29046 29045 +3 28910 28911 29045 +3 29046 29183 29182 +3 29045 29046 29182 +3 29183 29320 29319 +3 29182 29183 29319 +3 29320 29457 29456 +3 29319 29320 29456 +3 29457 29595 29594 +3 29456 29457 29594 +3 29728 29727 29594 +3 29595 29728 29594 +3 29857 29856 29727 +3 29728 29857 29727 +3 29988 29987 29856 +3 29857 29988 29856 +3 30120 30119 29987 +3 29988 30120 29987 +3 30120 30253 30252 +3 30119 30120 30252 +3 30253 30386 30385 +3 30252 30253 30385 +3 30520 30519 30385 +3 30386 30520 30385 +3 30654 30653 30519 +3 30520 30654 30519 +3 30654 30788 30787 +3 30653 30654 30787 +3 13869 6859 30787 +3 30788 13869 30787 +3 3083 2944 6859 +3 13869 3083 6859 +3 26396 26463 26395 +3 27634 20847 20846 +3 29354 11404 26907 +3 26212 30361 30228 +3 27139 30478 19734 +3 30674 23736 25667 +3 29091 29092 29228 +3 29673 29672 29534 +3 31656 31655 26240 +3 6980 28137 26502 +3 31562 31656 25243 +3 7280 7173 7281 +3 8377 1715 1598 +3 17398 32686 32806 +3 26120 24431 24648 +3 32000 32100 31999 +3 25310 13459 25155 +3 19983 21373 24532 +3 24554 24443 24908 +3 6084 19109 5953 +3 33116 33115 33009 +3 24272 12537 19983 +3 19139 6785 21373 +3 21264 21177 28078 +3 19139 19145 19247 +3 6785 19139 19247 +3 19145 26903 28425 +3 19247 19145 28425 +3 26796 25792 28425 +3 26903 26796 28425 +3 28008 12515 12514 +3 34135 34134 33998 +3 25837 28343 25836 +3 31690 31790 31689 +3 28448 28447 28327 +3 28328 28448 28327 +3 27747 27862 27746 +3 27978 27977 27861 +3 30065 30066 22489 +3 29808 29937 29807 +3 30692 19026 30806 +3 17266 30749 26737 +3 22949 21222 16313 +3 19563 19562 26505 +3 6877 29956 30756 +3 21550 30087 19134 +3 30719 7067 30718 +3 19360 18915 2539 +3 28735 28475 19348 +3 21382 28101 29016 +3 31563 31562 25997 +3 21550 30482 30087 +3 25834 28998 6406 +3 21598 13698 23371 +3 28010 2536 28589 +3 26733 28010 28589 +3 26333 26372 26371 +3 26372 26440 26439 +3 26371 26372 26439 +3 26440 26536 26535 +3 26439 26440 26535 +3 26641 26640 26535 +3 26536 26641 26535 +3 26641 26753 26752 +3 26640 26641 26752 +3 26753 26868 26867 +3 26752 26753 26867 +3 26868 26986 26985 +3 26867 26868 26985 +3 26986 27103 27102 +3 26985 26986 27102 +3 27103 27222 27221 +3 27102 27103 27221 +3 27222 27340 27339 +3 27221 27222 27339 +3 27340 27459 27458 +3 27339 27340 27458 +3 27459 27577 27576 +3 27458 27459 27576 +3 27577 27694 27693 +3 27576 27577 27693 +3 27694 27809 27808 +3 27693 27694 27808 +3 27809 27925 27924 +3 27808 27809 27924 +3 27925 28042 28041 +3 27924 27925 28041 +3 28042 28159 28158 +3 28041 28042 28158 +3 28159 28276 28275 +3 28158 28159 28275 +3 28276 28396 28395 +3 28275 28276 28395 +3 28396 28518 28517 +3 28395 28396 28517 +3 28518 28647 28646 +3 28517 28518 28646 +3 28779 28778 28646 +3 28647 28779 28646 +3 28779 28912 28911 +3 28778 28779 28911 +3 28912 29047 29046 +3 28911 28912 29046 +3 29047 29184 29183 +3 29046 29047 29183 +3 29184 29321 29320 +3 29183 29184 29320 +3 29321 29458 29457 +3 29320 29321 29457 +3 29458 29596 29595 +3 29457 29458 29595 +3 29596 29729 29728 +3 29595 29596 29728 +3 29858 29857 29728 +3 29729 29858 29728 +3 29989 29988 29857 +3 29858 29989 29857 +3 30121 30120 29988 +3 29989 30121 29988 +3 30121 30254 30253 +3 30120 30121 30253 +3 30254 30387 30386 +3 30253 30254 30386 +3 30521 30520 30386 +3 30387 30521 30386 +3 30655 30654 30520 +3 30521 30655 30520 +3 30655 30789 30788 +3 30654 30655 30788 +3 17378 13869 30788 +3 30789 17378 30788 +3 3084 3083 13869 +3 17378 3084 13869 +3 3084 25049 3083 +3 19304 30087 24121 +3 19459 5609 19457 +3 29492 24348 24431 +3 27163 28472 28471 +3 7412 6967 5339 +3 27163 27162 26354 +3 26355 27163 26354 +3 26355 26354 19375 +3 6407 26355 19375 +3 7084 6407 19375 +3 6835 7084 19375 +3 5609 7412 5339 +3 7412 7084 6835 +3 34808 34807 34679 +3 6967 7412 6835 +3 29432 24348 29490 +3 22002 17381 23975 +3 31365 31432 31364 +3 26673 26674 24220 +3 29271 29272 6282 +3 19452 19451 2403 +3 29965 25281 25424 +3 19576 30822 19903 +3 21561 19145 19139 +3 12537 21561 19139 +3 26849 26903 19145 +3 21561 26849 19145 +3 26471 26796 26903 +3 26849 26471 26903 +3 26692 26587 26588 +3 25792 25340 25489 +3 25499 28426 24188 +3 29358 24569 21719 +3 28211 28210 28093 +3 28094 28211 28093 +3 27392 27393 27511 +3 27862 27978 27861 +3 3844 29491 12664 +3 27282 19270 30743 +3 35723 29558 35848 +3 17266 26737 29286 +3 35788 29494 35388 +3 30289 30292 19563 +3 6877 28809 29826 +3 28809 6877 30756 +3 7067 18915 19360 +3 17282 7067 19360 +3 30748 19348 26734 +3 30748 28735 19348 +3 22300 22397 30070 +3 19231 21556 30558 +3 20570 21573 14947 +3 17579 26832 17484 +3 2536 26908 19672 +3 28589 2536 19672 +3 26334 26373 26372 +3 26333 26334 26372 +3 26373 26441 26440 +3 26372 26373 26440 +3 26441 26537 26536 +3 26440 26441 26536 +3 26642 26641 26536 +3 26537 26642 26536 +3 26642 26754 26753 +3 26641 26642 26753 +3 26754 26869 26868 +3 26753 26754 26868 +3 26869 26987 26986 +3 26868 26869 26986 +3 26987 27104 27103 +3 26986 26987 27103 +3 27104 27223 27222 +3 27103 27104 27222 +3 27223 27341 27340 +3 27222 27223 27340 +3 27341 27460 27459 +3 27340 27341 27459 +3 27460 27578 27577 +3 27459 27460 27577 +3 27578 27695 27694 +3 27577 27578 27694 +3 27695 27810 27809 +3 27694 27695 27809 +3 27810 27926 27925 +3 27809 27810 27925 +3 27926 28043 28042 +3 27925 27926 28042 +3 28043 28160 28159 +3 28042 28043 28159 +3 28160 28277 28276 +3 28159 28160 28276 +3 28277 28397 28396 +3 28276 28277 28396 +3 28397 28519 28518 +3 28396 28397 28518 +3 28519 28648 28647 +3 28518 28519 28647 +3 28780 28779 28647 +3 28648 28780 28647 +3 28913 28912 28779 +3 28780 28913 28779 +3 28913 29048 29047 +3 28912 28913 29047 +3 29048 29185 29184 +3 29047 29048 29184 +3 29185 29322 29321 +3 29184 29185 29321 +3 29322 29459 29458 +3 29321 29322 29458 +3 29459 29597 29596 +3 29458 29459 29596 +3 29597 29730 29729 +3 29596 29597 29729 +3 29859 29858 29729 +3 29730 29859 29729 +3 29990 29989 29858 +3 29859 29990 29858 +3 29990 30122 30121 +3 29989 29990 30121 +3 30122 30255 30254 +3 30121 30122 30254 +3 30388 30387 30254 +3 30255 30388 30254 +3 30522 30521 30387 +3 30388 30522 30387 +3 30656 30655 30521 +3 30522 30656 30521 +3 30656 30790 30789 +3 30655 30656 30789 +3 22232 17378 30789 +3 30790 22232 30789 +3 19916 3084 17378 +3 22232 19916 17378 +3 35562 22834 35521 +3 30226 21542 25942 +3 27022 29829 19340 +3 19678 27022 19340 +3 29110 29247 29109 +3 31892 31891 31785 +3 35329 13004 33666 +3 20172 20087 26692 +3 32618 32732 32617 +3 10003 17447 21627 +3 32844 32843 32731 +3 32952 32951 32843 +3 35381 19340 2408 +3 32732 32844 32731 +3 28117 25644 28116 +3 34757 29811 34756 +3 30778 30779 25725 +3 24221 26059 25034 +3 31562 25243 25997 +3 9534 9535 11365 +3 24245 21558 12537 +3 28564 28693 28692 +3 25333 25784 25332 +3 26910 30604 27607 +3 21558 21561 12537 +3 24622 19807 26718 +3 21558 10932 26849 +3 21561 21558 26849 +3 29119 26471 26849 +3 10932 29119 26849 +3 26471 29119 24717 +3 21770 23439 26599 +3 24666 24454 30776 +3 34427 34564 34426 +3 28328 28327 28210 +3 28211 28328 28210 +3 27274 27275 27392 +3 27630 27629 27511 +3 29565 26593 19270 +3 27282 29565 19270 +3 35209 35338 35208 +3 19026 29286 30806 +3 26416 27202 27201 +3 19562 26568 26505 +3 29762 29826 30483 +3 29762 6877 29826 +3 2538 19338 21659 +3 2539 2538 21659 +3 29421 30752 26734 +3 30752 30748 26734 +3 27048 20894 29293 +3 24532 24300 22097 +3 29492 22098 29490 +3 19340 35404 19678 +3 26908 21372 30670 +3 19672 26908 30670 +3 26335 26374 26373 +3 26334 26335 26373 +3 26374 26442 26441 +3 26373 26374 26441 +3 26442 26538 26537 +3 26441 26442 26537 +3 26643 26642 26537 +3 26538 26643 26537 +3 26755 26754 26642 +3 26643 26755 26642 +3 26755 26870 26869 +3 26754 26755 26869 +3 26988 26987 26869 +3 26870 26988 26869 +3 26988 27105 27104 +3 26987 26988 27104 +3 27105 27224 27223 +3 27104 27105 27223 +3 27224 27342 27341 +3 27223 27224 27341 +3 27342 27461 27460 +3 27341 27342 27460 +3 27579 27578 27460 +3 27461 27579 27460 +3 27579 27696 27695 +3 27578 27579 27695 +3 27696 27811 27810 +3 27695 27696 27810 +3 27811 27927 27926 +3 27810 27811 27926 +3 27927 28044 28043 +3 27926 27927 28043 +3 28044 28161 28160 +3 28043 28044 28160 +3 28161 28278 28277 +3 28160 28161 28277 +3 28278 28398 28397 +3 28277 28278 28397 +3 28398 28520 28519 +3 28397 28398 28519 +3 28520 28649 28648 +3 28519 28520 28648 +3 28781 28780 28648 +3 28649 28781 28648 +3 28914 28913 28780 +3 28781 28914 28780 +3 28914 29049 29048 +3 28913 28914 29048 +3 29049 29186 29185 +3 29048 29049 29185 +3 29186 29323 29322 +3 29185 29186 29322 +3 29323 29460 29459 +3 29322 29323 29459 +3 29460 29598 29597 +3 29459 29460 29597 +3 29598 29731 29730 +3 29597 29598 29730 +3 29731 29860 29859 +3 29730 29731 29859 +3 29991 29990 29859 +3 29860 29991 29859 +3 29991 30123 30122 +3 29990 29991 30122 +3 30123 30256 30255 +3 30122 30123 30255 +3 30389 30388 30255 +3 30256 30389 30255 +3 30523 30522 30388 +3 30389 30523 30388 +3 30657 30656 30522 +3 30523 30657 30522 +3 30791 30790 30656 +3 30657 30791 30656 +3 4634 22232 30790 +3 30791 4634 30790 +3 19915 19916 22232 +3 4634 19915 22232 +3 29510 29648 29509 +3 32852 32960 32851 +3 29648 29781 29647 +3 29781 29780 29647 +3 29780 29781 29909 +3 29781 29910 29909 +3 30439 30573 30572 +3 29910 30041 30040 +3 30306 30439 30438 +3 30305 30306 30438 +3 30173 30306 30305 +3 30172 30173 30305 +3 29909 29910 30040 +3 30041 30173 30172 +3 35787 28479 35520 +3 30040 30041 30172 +3 29536 29535 28100 +3 28108 29536 28100 +3 25092 6534 19413 +3 19413 20092 25092 +3 27267 28334 29423 +3 29630 17305 28102 +3 28732 27050 28733 +3 28567 28696 28566 +3 25385 30813 25527 +3 25040 29832 29703 +3 27723 10932 21558 +3 19235 27723 21558 +3 26495 29119 10932 +3 27723 26495 10932 +3 13469 11775 23055 +3 26495 29833 26059 +3 23817 20020 26715 +3 34138 34276 34137 +3 28570 28699 28569 +3 28831 28830 28698 +3 27155 27156 27274 +3 27393 27512 27511 +3 19017 22100 26829 +3 32730 32729 32615 +3 22097 29432 29490 +3 30806 6652 35848 +3 26900 26416 26414 +3 26414 26416 27201 +3 28106 30617 30483 +3 30617 29762 30483 +3 11496 14247 21659 +3 19338 11496 21659 +3 29421 29285 18282 +3 29285 29421 26734 +3 30050 30182 30049 +3 20894 29260 30776 +3 9749 35882 35811 +3 25051 19915 25052 +3 21372 6845 17302 +3 30670 21372 17302 +3 26375 26374 26335 +3 26336 26375 26335 +3 26375 26443 26442 +3 26374 26375 26442 +3 26443 26539 26538 +3 26442 26443 26538 +3 26644 26643 26538 +3 26539 26644 26538 +3 26756 26755 26643 +3 26644 26756 26643 +3 26756 26871 26870 +3 26755 26756 26870 +3 26871 26989 26988 +3 26870 26871 26988 +3 26989 27106 27105 +3 26988 26989 27105 +3 27106 27225 27224 +3 27105 27106 27224 +3 27225 27343 27342 +3 27224 27225 27342 +3 27343 27462 27461 +3 27342 27343 27461 +3 27580 27579 27461 +3 27462 27580 27461 +3 27580 27697 27696 +3 27579 27580 27696 +3 27812 27811 27696 +3 27697 27812 27696 +3 27928 27927 27811 +3 27812 27928 27811 +3 27928 28045 28044 +3 27927 27928 28044 +3 28045 28162 28161 +3 28044 28045 28161 +3 28162 28279 28278 +3 28161 28162 28278 +3 28279 28399 28398 +3 28278 28279 28398 +3 28399 28521 28520 +3 28398 28399 28520 +3 28521 28650 28649 +3 28520 28521 28649 +3 28782 28781 28649 +3 28650 28782 28649 +3 28915 28914 28781 +3 28782 28915 28781 +3 28915 29050 29049 +3 28914 28915 29049 +3 29050 29187 29186 +3 29049 29050 29186 +3 29187 29324 29323 +3 29186 29187 29323 +3 29324 29461 29460 +3 29323 29324 29460 +3 29461 29599 29598 +3 29460 29461 29598 +3 29599 29732 29731 +3 29598 29599 29731 +3 29861 29860 29731 +3 29732 29861 29731 +3 29861 29992 29991 +3 29860 29861 29991 +3 29992 30124 30123 +3 29991 29992 30123 +3 30124 30257 30256 +3 30123 30124 30256 +3 30257 30390 30389 +3 30256 30257 30389 +3 30524 30523 30389 +3 30390 30524 30389 +3 30658 30657 30523 +3 30524 30658 30523 +3 30792 30791 30657 +3 30658 30792 30657 +3 17377 4634 30791 +3 30792 17377 30791 +3 19936 30621 25258 +3 17964 23489 34728 +3 27373 28683 27315 +3 30556 19132 23901 +3 30822 27082 26965 +3 29272 19576 6282 +3 24229 17576 23618 +3 29965 25280 25281 +3 683 18261 27551 +3 19689 683 27551 +3 683 30608 18261 +3 30608 27049 18261 +3 27049 30608 27519 +3 30608 26519 27519 +3 27519 26519 27258 +3 27196 27079 27198 +3 11754 26963 26847 +3 25321 26469 26401 +3 29569 29536 28108 +3 28125 29569 28108 +3 565 17381 29536 +3 29569 565 29536 +3 26496 23598 23494 +3 565 7081 17381 +3 28445 28567 28444 +3 28696 28695 28566 +3 21542 30093 29961 +3 28072 28751 28752 +3 32044 32043 31946 +3 25536 30766 25018 +3 32405 32510 32404 +3 31709 31708 31613 +3 25034 29833 24128 +3 26495 19902 29833 +3 26588 26587 26492 +3 21814 12007 21719 +3 28699 28831 28698 +3 17381 7081 23975 +3 27156 27275 27274 +3 27275 27393 27392 +3 26696 26808 26807 +3 26695 26696 26807 +3 32507 32616 32506 +3 32616 32615 32506 +3 7301 17477 26900 +3 7078 7079 6981 +3 28881 28106 19573 +3 28464 28106 30483 +3 11496 6972 6971 +3 14247 11496 6971 +3 19746 18282 27023 +3 19746 29421 18282 +3 24673 17377 25482 +3 30315 30314 30181 +3 29429 178 30219 +3 31439 31438 31371 +3 30024 30421 17302 +3 6845 30024 17302 +3 26337 26376 26375 +3 26336 26337 26375 +3 26376 26444 26443 +3 26375 26376 26443 +3 26444 26540 26539 +3 26443 26444 26539 +3 26540 26645 26644 +3 26539 26540 26644 +3 26757 26756 26644 +3 26645 26757 26644 +3 26757 26872 26871 +3 26756 26757 26871 +3 26872 26990 26989 +3 26871 26872 26989 +3 26990 27107 27106 +3 26989 26990 27106 +3 27107 27226 27225 +3 27106 27107 27225 +3 27226 27344 27343 +3 27225 27226 27343 +3 27344 27463 27462 +3 27343 27344 27462 +3 27463 27581 27580 +3 27462 27463 27580 +3 27581 27698 27697 +3 27580 27581 27697 +3 27698 27813 27812 +3 27697 27698 27812 +3 27813 27929 27928 +3 27812 27813 27928 +3 27929 28046 28045 +3 27928 27929 28045 +3 28046 28163 28162 +3 28045 28046 28162 +3 28163 28280 28279 +3 28162 28163 28279 +3 28280 28400 28399 +3 28279 28280 28399 +3 28522 28521 28399 +3 28400 28522 28399 +3 28651 28650 28521 +3 28522 28651 28521 +3 28783 28782 28650 +3 28651 28783 28650 +3 28916 28915 28782 +3 28783 28916 28782 +3 28916 29051 29050 +3 28915 28916 29050 +3 29051 29188 29187 +3 29050 29051 29187 +3 29188 29325 29324 +3 29187 29188 29324 +3 29325 29462 29461 +3 29324 29325 29461 +3 29462 29600 29599 +3 29461 29462 29599 +3 29600 29733 29732 +3 29599 29600 29732 +3 29733 29862 29861 +3 29732 29733 29861 +3 29862 29993 29992 +3 29861 29862 29992 +3 29993 30125 30124 +3 29992 29993 30124 +3 30125 30258 30257 +3 30124 30125 30257 +3 30258 30391 30390 +3 30257 30258 30390 +3 30525 30524 30390 +3 30391 30525 30390 +3 30659 30658 30524 +3 30525 30659 30524 +3 30793 30792 30658 +3 30659 30793 30658 +3 22763 22862 30020 +3 25018 12358 23828 +3 17272 33472 17337 +3 26479 28425 23598 +3 28097 28096 27979 +3 27980 28097 27979 +3 27632 27749 27631 +3 27864 27863 27748 +3 27980 27979 27863 +3 27749 27864 27748 +3 28214 28213 28096 +3 27864 27980 27863 +3 28451 28573 28450 +3 28097 28214 28096 +3 28331 28451 28330 +3 28573 28572 28450 +3 28214 28331 28213 +3 28451 28450 28330 +3 32320 32321 32423 +3 28331 28330 28213 +3 32423 32424 32528 +3 22689 22688 22590 +3 3058 565 29569 +3 16751 16750 25468 +3 6902 7081 565 +3 3058 6902 565 +3 28485 25980 26122 +3 29156 24455 28340 +3 28015 28072 28752 +3 22484 23779 24744 +3 29159 27290 28942 +3 28345 29159 28942 +3 13173 28134 28016 +3 23902 26488 30556 +3 17482 28134 13173 +3 22271 25033 21966 +3 11943 12903 25095 +3 22785 30464 22686 +3 27039 27156 27155 +3 24636 24585 24481 +3 27041 27158 27157 +3 27038 27039 27155 +3 17272 17337 17336 +3 26808 26923 26922 +3 29558 30692 35848 +3 30228 20018 26081 +3 28881 19573 29279 +3 17477 26932 26900 +3 11453 26945 26943 +3 29258 28881 29279 +3 6972 11453 17478 +3 6971 6972 17478 +3 6901 29810 30205 +3 29810 19746 27023 +3 21941 19448 19447 +3 27777 12255 12340 +3 1857 6868 29429 +3 178 30086 30219 +3 24537 19235 24245 +3 30792 30793 25073 +3 26338 26377 26376 +3 26337 26338 26376 +3 26377 26445 26444 +3 26376 26377 26444 +3 26445 26541 26540 +3 26444 26445 26540 +3 26541 26646 26645 +3 26540 26541 26645 +3 26758 26757 26645 +3 26646 26758 26645 +3 26758 26873 26872 +3 26757 26758 26872 +3 26873 26991 26990 +3 26872 26873 26990 +3 26991 27108 27107 +3 26990 26991 27107 +3 27108 27227 27226 +3 27107 27108 27226 +3 27227 27345 27344 +3 27226 27227 27344 +3 27345 27464 27463 +3 27344 27345 27463 +3 27464 27582 27581 +3 27463 27464 27581 +3 27582 27699 27698 +3 27581 27582 27698 +3 27699 27814 27813 +3 27698 27699 27813 +3 27814 27930 27929 +3 27813 27814 27929 +3 27930 28047 28046 +3 27929 27930 28046 +3 28047 28164 28163 +3 28046 28047 28163 +3 28164 28281 28280 +3 28163 28164 28280 +3 28281 28401 28400 +3 28280 28281 28400 +3 28401 28523 28522 +3 28400 28401 28522 +3 28523 28652 28651 +3 28522 28523 28651 +3 28652 28784 28783 +3 28651 28652 28783 +3 28917 28916 28783 +3 28784 28917 28783 +3 28917 29052 29051 +3 28916 28917 29051 +3 29052 29189 29188 +3 29051 29052 29188 +3 29189 29326 29325 +3 29188 29189 29325 +3 29326 29463 29462 +3 29325 29326 29462 +3 29463 29601 29600 +3 29462 29463 29600 +3 29601 29734 29733 +3 29600 29601 29733 +3 29734 29863 29862 +3 29733 29734 29862 +3 29863 29994 29993 +3 29862 29863 29993 +3 29994 30126 30125 +3 29993 29994 30125 +3 30126 30259 30258 +3 30125 30126 30258 +3 30259 30392 30391 +3 30258 30259 30391 +3 30526 30525 30391 +3 30392 30526 30391 +3 30660 30659 30525 +3 30526 30660 30525 +3 30794 30793 30659 +3 30660 30794 30659 +3 24348 19988 24648 +3 25074 25073 30793 +3 29797 29926 29796 +3 32397 32502 32396 +3 29389 29388 29251 +3 28980 29115 28979 +3 29252 29251 29114 +3 28847 28980 28846 +3 29115 29114 28979 +3 28980 28979 28846 +3 29926 30057 29925 +3 29115 29252 29114 +3 29526 29525 29388 +3 29389 29526 29388 +3 29664 29663 29525 +3 29797 29796 29663 +3 29664 29797 29663 +3 30057 30056 29925 +3 28441 28563 28562 +3 29926 29925 29796 +3 23818 24346 24517 +3 19662 26122 26263 +3 25469 16750 16594 +3 25468 16750 25469 +3 11099 6902 3058 +3 2957 11099 3058 +3 20302 20215 17700 +3 18230 14969 24138 +3 29775 29904 29903 +3 33120 33119 33013 +3 28345 28942 28245 +3 29829 28345 28245 +3 30437 30571 30570 +3 30436 30437 30570 +3 29765 30025 452 +3 30203 30200 28457 +3 28865 28869 29425 +3 28869 27402 27289 +3 26921 27039 27038 +3 30166 30299 30298 +3 26807 26808 26922 +3 27040 27041 27157 +3 29791 29790 29657 +3 2957 3058 24517 +3 26932 26417 26416 +3 30072 27286 29279 +3 23059 23158 23157 +3 28106 28464 19573 +3 17478 11453 26943 +3 26945 26428 26418 +3 21849 28728 19705 +3 6901 30205 28861 +3 29810 27023 30205 +3 28728 6901 28861 +3 28457 28456 27136 +3 19736 21941 19630 +3 19133 27840 1857 +3 6868 178 29429 +3 28810 21294 28943 +3 28320 28321 28440 +3 26339 26378 26377 +3 26338 26339 26377 +3 26378 26446 26445 +3 26377 26378 26445 +3 26446 26542 26541 +3 26445 26446 26541 +3 26542 26647 26646 +3 26541 26542 26646 +3 26759 26758 26646 +3 26647 26759 26646 +3 26759 26874 26873 +3 26758 26759 26873 +3 26874 26992 26991 +3 26873 26874 26991 +3 26992 27109 27108 +3 26991 26992 27108 +3 27109 27228 27227 +3 27108 27109 27227 +3 27228 27346 27345 +3 27227 27228 27345 +3 27346 27465 27464 +3 27345 27346 27464 +3 27465 27583 27582 +3 27464 27465 27582 +3 27583 27700 27699 +3 27582 27583 27699 +3 27700 27815 27814 +3 27699 27700 27814 +3 27815 27931 27930 +3 27814 27815 27930 +3 27931 28048 28047 +3 27930 27931 28047 +3 28048 28165 28164 +3 28047 28048 28164 +3 28165 28282 28281 +3 28164 28165 28281 +3 28282 28402 28401 +3 28281 28282 28401 +3 28524 28523 28401 +3 28402 28524 28401 +3 28653 28652 28523 +3 28524 28653 28523 +3 28653 28785 28784 +3 28652 28653 28784 +3 28785 28918 28917 +3 28784 28785 28917 +3 28918 29053 29052 +3 28917 28918 29052 +3 29053 29190 29189 +3 29052 29053 29189 +3 29190 29327 29326 +3 29189 29190 29326 +3 29327 29464 29463 +3 29326 29327 29463 +3 29464 29602 29601 +3 29463 29464 29601 +3 29602 29735 29734 +3 29601 29602 29734 +3 29735 29864 29863 +3 29734 29735 29863 +3 29864 29995 29994 +3 29863 29864 29994 +3 29995 30127 30126 +3 29994 29995 30126 +3 30127 30260 30259 +3 30126 30127 30259 +3 30260 30393 30392 +3 30259 30260 30392 +3 30527 30526 30392 +3 30393 30527 30392 +3 30661 30660 30526 +3 30527 30661 30526 +3 30795 30794 30660 +3 30661 30795 30660 +3 24338 24255 24339 +3 30795 2819 30794 +3 30418 23157 30552 +3 15493 14526 15543 +3 27738 27853 27852 +3 24162 26707 26706 +3 19134 19304 30609 +3 26566 19134 30609 +3 28809 30756 6659 +3 29007 28873 30622 +3 29007 19134 26566 +3 30756 29007 30622 +3 28232 29679 18691 +3 28873 29007 26566 +3 26700 26812 26811 +3 29679 29954 28107 +3 30611 29679 28107 +3 24731 28118 28119 +3 28440 28441 28562 +3 26573 26572 24969 +3 19993 20073 25940 +3 26507 26603 23254 +3 32294 32397 32293 +3 28216 29675 24346 +3 10695 11099 2957 +3 19478 10695 2957 +3 25673 21072 27784 +3 10695 18230 11099 +3 19194 2181 2051 +3 18230 24138 11099 +3 2408 19680 35381 +3 23692 26805 20260 +3 30571 30705 30704 +3 30570 30571 30704 +3 26946 13660 29765 +3 30025 14848 452 +3 28964 28963 28830 +3 29099 29098 28963 +3 12604 12603 28124 +3 26920 26921 27038 +3 26923 27041 27040 +3 26922 26923 27040 +3 19574 30217 26941 +3 29937 30068 29936 +3 13944 13845 13846 +3 28950 21907 21812 +3 28493 28491 28369 +3 21647 35515 35923 +3 26943 26945 26418 +3 27281 27268 26418 +3 21738 21849 30737 +3 28728 28861 19705 +3 30042 30043 30174 +3 30449 30448 30315 +3 30449 30583 30448 +3 30183 30316 30182 +3 19201 2955 19133 +3 27840 6868 1857 +3 30726 30725 30591 +3 30592 30726 30591 +3 26340 26379 26378 +3 26339 26340 26378 +3 26379 26447 26446 +3 26378 26379 26446 +3 26447 26543 26542 +3 26446 26447 26542 +3 26543 26648 26647 +3 26542 26543 26647 +3 26648 26760 26759 +3 26647 26648 26759 +3 26760 26875 26874 +3 26759 26760 26874 +3 26875 26993 26992 +3 26874 26875 26992 +3 26993 27110 27109 +3 26992 26993 27109 +3 27110 27229 27228 +3 27109 27110 27228 +3 27347 27346 27228 +3 27229 27347 27228 +3 27466 27465 27346 +3 27347 27466 27346 +3 27466 27584 27583 +3 27465 27466 27583 +3 27584 27701 27700 +3 27583 27584 27700 +3 27701 27816 27815 +3 27700 27701 27815 +3 27816 27932 27931 +3 27815 27816 27931 +3 27932 28049 28048 +3 27931 27932 28048 +3 28049 28166 28165 +3 28048 28049 28165 +3 28166 28283 28282 +3 28165 28166 28282 +3 28283 28403 28402 +3 28282 28283 28402 +3 28403 28525 28524 +3 28402 28403 28524 +3 28654 28653 28524 +3 28525 28654 28524 +3 28654 28786 28785 +3 28653 28654 28785 +3 28786 28919 28918 +3 28785 28786 28918 +3 28919 29054 29053 +3 28918 28919 29053 +3 29054 29191 29190 +3 29053 29054 29190 +3 29191 29328 29327 +3 29190 29191 29327 +3 29328 29465 29464 +3 29327 29328 29464 +3 29465 29603 29602 +3 29464 29465 29602 +3 29603 29736 29735 +3 29602 29603 29735 +3 29736 29865 29864 +3 29735 29736 29864 +3 29865 29996 29995 +3 29864 29865 29995 +3 29996 30128 30127 +3 29995 29996 30127 +3 30128 30261 30260 +3 30127 30128 30260 +3 30261 30394 30393 +3 30260 30261 30393 +3 30528 30527 30393 +3 30394 30528 30393 +3 30662 30661 30527 +3 30528 30662 30527 +3 30796 30795 30661 +3 30662 30796 30661 +3 2678 2819 30795 +3 30796 2678 30795 +3 30093 30092 14041 +3 21868 22543 22445 +3 22763 29889 29890 +3 27622 27739 27621 +3 28613 28485 19662 +3 19097 28613 19662 +3 25496 26220 25495 +3 28724 28343 28485 +3 28956 28957 29091 +3 6529 29079 6899 +3 13173 28247 22392 +3 13173 22392 14234 +3 30216 30691 29420 +3 24913 26600 23670 +3 30692 29558 29420 +3 20175 30290 24094 +3 24094 30290 11884 +3 30691 30692 29420 +3 21242 20410 19241 +3 20643 20641 20559 +3 32611 32610 32501 +3 2547 19478 24346 +3 17602 10695 19478 +3 2547 17602 19478 +3 6528 18230 10695 +3 17602 6528 10695 +3 6528 24273 18230 +3 24828 24958 24242 +3 29829 28245 2408 +3 21729 21823 29118 +3 30705 30839 30838 +3 30704 30705 30838 +3 29941 13660 29159 +3 13660 30025 29765 +3 28831 28964 28830 +3 28964 29099 28963 +3 26694 26806 26805 +3 24296 24297 26678 +3 27158 27277 27276 +3 27157 27158 27276 +3 30217 6529 28548 +3 29079 28944 6899 +3 29826 28809 30690 +3 30756 30622 6659 +3 26568 28493 28483 +3 28483 28493 28369 +3 26428 27281 26418 +3 26798 28720 28719 +3 15345 29423 16770 +3 5891 18424 19825 +3 30611 19740 30559 +3 30175 30308 30307 +3 30471 2955 19201 +3 30605 30471 19201 +3 30725 30726 6152 +3 2955 27840 19133 +3 30726 6151 6152 +3 26341 26380 26379 +3 26340 26341 26379 +3 26380 26448 26447 +3 26379 26380 26447 +3 26448 26544 26543 +3 26447 26448 26543 +3 26544 26649 26648 +3 26543 26544 26648 +3 26649 26761 26760 +3 26648 26649 26760 +3 26761 26876 26875 +3 26760 26761 26875 +3 26876 26994 26993 +3 26875 26876 26993 +3 26994 27111 27110 +3 26993 26994 27110 +3 27111 27230 27229 +3 27110 27111 27229 +3 27230 27348 27347 +3 27229 27230 27347 +3 27348 27467 27466 +3 27347 27348 27466 +3 27467 27585 27584 +3 27466 27467 27584 +3 27585 27702 27701 +3 27584 27585 27701 +3 27702 27817 27816 +3 27701 27702 27816 +3 27817 27933 27932 +3 27816 27817 27932 +3 27933 28050 28049 +3 27932 27933 28049 +3 28050 28167 28166 +3 28049 28050 28166 +3 28167 28284 28283 +3 28166 28167 28283 +3 28284 28404 28403 +3 28283 28284 28403 +3 28404 28526 28525 +3 28403 28404 28525 +3 28655 28654 28525 +3 28526 28655 28525 +3 28655 28787 28786 +3 28654 28655 28786 +3 28787 28920 28919 +3 28786 28787 28919 +3 28920 29055 29054 +3 28919 28920 29054 +3 29055 29192 29191 +3 29054 29055 29191 +3 29192 29329 29328 +3 29191 29192 29328 +3 29329 29466 29465 +3 29328 29329 29465 +3 29466 29604 29603 +3 29465 29466 29603 +3 29604 29737 29736 +3 29603 29604 29736 +3 29737 29866 29865 +3 29736 29737 29865 +3 29866 29997 29996 +3 29865 29866 29996 +3 29997 30129 30128 +3 29996 29997 30128 +3 30129 30262 30261 +3 30128 30129 30261 +3 30262 30395 30394 +3 30261 30262 30394 +3 30529 30528 30394 +3 30395 30529 30394 +3 30663 30662 30528 +3 30529 30663 30528 +3 30797 30796 30662 +3 30663 30797 30662 +3 2814 2678 30796 +3 30797 2814 30796 +3 11422 11424 11473 +3 2814 20261 2678 +3 19773 6406 28998 +3 26672 26095 26673 +3 28613 28724 28485 +3 21746 24227 28989 +3 35469 7082 35759 +3 27627 27744 27626 +3 19962 30157 22233 +3 16758 23521 11884 +3 28866 30157 19962 +3 19142 28866 19962 +3 27739 27854 27853 +3 30157 2545 22233 +3 27744 27743 27626 +3 27509 27627 27508 +3 22665 22566 22567 +3 26675 24219 26674 +3 28225 29676 29675 +3 28216 28225 29675 +3 2681 2547 29675 +3 29676 2681 29675 +3 6904 17602 2547 +3 2681 6904 2547 +3 6904 11450 6528 +3 17602 6904 6528 +3 24402 24273 24289 +3 2076 11232 6671 +3 31303 31370 31302 +3 29686 26944 28361 +3 22331 22429 30838 +3 30839 22331 30838 +3 18271 29941 28345 +3 13660 26946 29159 +3 29236 29235 29098 +3 29099 29236 29098 +3 26589 26694 26693 +3 26693 26694 26805 +3 27277 27395 27394 +3 27276 27277 27394 +3 31043 31044 31105 +3 27874 30477 24065 +3 19573 29149 30072 +3 29279 19573 30072 +3 7301 26900 26817 +3 26505 26568 28483 +3 2269 26798 26786 +3 2270 2269 26786 +3 201 29215 29216 +3 19674 201 29216 +3 21846 19855 19790 +3 30732 6855 30731 +3 6660 7214 29819 +3 28243 30471 30605 +3 29352 29214 22272 +3 30189 30188 30056 +3 26342 26381 26380 +3 26341 26342 26380 +3 26381 26449 26448 +3 26380 26381 26448 +3 26449 26545 26544 +3 26448 26449 26544 +3 26545 26650 26649 +3 26544 26545 26649 +3 26762 26761 26649 +3 26650 26762 26649 +3 26762 26877 26876 +3 26761 26762 26876 +3 26877 26995 26994 +3 26876 26877 26994 +3 26995 27112 27111 +3 26994 26995 27111 +3 27112 27231 27230 +3 27111 27112 27230 +3 27231 27349 27348 +3 27230 27231 27348 +3 27349 27468 27467 +3 27348 27349 27467 +3 27468 27586 27585 +3 27467 27468 27585 +3 27586 27703 27702 +3 27585 27586 27702 +3 27703 27818 27817 +3 27702 27703 27817 +3 27818 27934 27933 +3 27817 27818 27933 +3 27934 28051 28050 +3 27933 27934 28050 +3 28051 28168 28167 +3 28050 28051 28167 +3 28168 28285 28284 +3 28167 28168 28284 +3 28285 28405 28404 +3 28284 28285 28404 +3 28405 28527 28526 +3 28404 28405 28526 +3 28656 28655 28526 +3 28527 28656 28526 +3 28656 28788 28787 +3 28655 28656 28787 +3 28788 28921 28920 +3 28787 28788 28920 +3 28921 29056 29055 +3 28920 28921 29055 +3 29056 29193 29192 +3 29055 29056 29192 +3 29193 29330 29329 +3 29192 29193 29329 +3 29330 29467 29466 +3 29329 29330 29466 +3 29467 29605 29604 +3 29466 29467 29604 +3 29605 29738 29737 +3 29604 29605 29737 +3 29738 29867 29866 +3 29737 29738 29866 +3 29867 29998 29997 +3 29866 29867 29997 +3 30130 30129 29997 +3 29998 30130 29997 +3 30130 30263 30262 +3 30129 30130 30262 +3 30263 30396 30395 +3 30262 30263 30395 +3 30530 30529 30395 +3 30396 30530 30395 +3 30664 30663 30529 +3 30530 30664 30529 +3 30798 30797 30663 +3 30664 30798 30663 +3 2679 2814 30797 +3 30798 2679 30797 +3 16311 20261 2814 +3 2679 16311 2814 +3 29237 29238 29374 +3 13092 22552 18928 +3 28322 28442 28441 +3 28701 28700 28571 +3 28719 28720 29945 +3 28750 28866 19142 +3 7071 26506 2545 +3 30157 7071 2545 +3 28720 28746 28750 +3 2952 25653 22843 +3 26798 26833 28720 +3 28492 28607 28866 +3 28608 30363 30354 +3 28746 28492 28750 +3 29676 24429 2681 +3 28606 28608 30354 +3 15873 1519 24657 +3 20683 27634 27516 +3 26112 6533 2680 +3 30778 25724 30777 +3 6887 6904 2681 +3 2817 6887 2681 +3 6887 6900 11450 +3 6904 6887 11450 +3 25342 29939 23861 +3 6900 19426 11450 +3 31691 31791 31690 +3 25949 25664 26589 +3 19786 16457 22429 +3 16457 19786 19457 +3 18271 28345 29829 +3 27022 18271 29829 +3 29373 29372 29235 +3 29236 29373 29235 +3 24703 25936 24530 +3 26588 26589 26693 +3 27395 27514 27513 +3 27513 27514 27631 +3 30709 6919 30708 +3 6529 6899 28548 +3 19573 28464 29267 +3 29149 19573 29267 +3 21471 7079 21469 +3 29258 29279 27287 +3 28603 28606 30348 +3 30354 2269 2270 +3 29215 21738 30737 +3 29216 29215 30737 +3 19855 27899 27645 +3 29683 30746 29682 +3 11229 11228 6660 +3 29819 28243 30605 +3 4230 24931 25432 +3 7069 11498 21744 +3 26343 26382 26381 +3 26342 26343 26381 +3 26382 26450 26449 +3 26381 26382 26449 +3 26450 26546 26545 +3 26449 26450 26545 +3 26546 26651 26650 +3 26545 26546 26650 +3 26763 26762 26650 +3 26651 26763 26650 +3 26763 26878 26877 +3 26762 26763 26877 +3 26878 26996 26995 +3 26877 26878 26995 +3 26996 27113 27112 +3 26995 26996 27112 +3 27113 27232 27231 +3 27112 27113 27231 +3 27232 27350 27349 +3 27231 27232 27349 +3 27350 27469 27468 +3 27349 27350 27468 +3 27469 27587 27586 +3 27468 27469 27586 +3 27587 27704 27703 +3 27586 27587 27703 +3 27704 27819 27818 +3 27703 27704 27818 +3 27819 27935 27934 +3 27818 27819 27934 +3 28052 28051 27934 +3 27935 28052 27934 +3 28169 28168 28051 +3 28052 28169 28051 +3 28169 28286 28285 +3 28168 28169 28285 +3 28286 28406 28405 +3 28285 28286 28405 +3 28406 28528 28527 +3 28405 28406 28527 +3 28657 28656 28527 +3 28528 28657 28527 +3 28657 28789 28788 +3 28656 28657 28788 +3 28789 28922 28921 +3 28788 28789 28921 +3 28922 29057 29056 +3 28921 28922 29056 +3 29057 29194 29193 +3 29056 29057 29193 +3 29194 29331 29330 +3 29193 29194 29330 +3 29331 29468 29467 +3 29330 29331 29467 +3 29468 29606 29605 +3 29467 29468 29605 +3 29606 29739 29738 +3 29605 29606 29738 +3 29739 29868 29867 +3 29738 29739 29867 +3 29868 29999 29998 +3 29867 29868 29998 +3 30131 30130 29998 +3 29999 30131 29998 +3 30131 30264 30263 +3 30130 30131 30263 +3 30397 30396 30263 +3 30264 30397 30263 +3 30531 30530 30396 +3 30397 30531 30396 +3 30665 30664 30530 +3 30531 30665 30530 +3 30799 30798 30664 +3 30665 30799 30664 +3 2543 2679 30798 +3 30799 2543 30798 +3 16311 25350 4230 +3 631 630 7451 +3 28450 28572 28449 +3 30478 23416 27434 +3 28861 28864 2670 +3 19705 28861 2670 +3 28720 28750 29945 +3 29945 28750 19142 +3 28607 7071 30157 +3 14141 20501 14911 +3 26609 26610 26714 +3 25424 25040 29965 +3 28856 35946 6409 +3 22631 28363 28680 +3 27146 27137 28365 +3 30341 29683 19670 +3 26833 28746 28720 +3 7884 29817 28367 +3 31405 31472 31404 +3 30628 23569 30761 +3 2956 24345 22422 +3 24864 28996 29258 +3 11123 6887 2817 +3 2956 11123 2817 +3 11123 11451 6900 +3 6887 11123 6900 +3 6654 19426 6900 +3 11451 6654 6900 +3 32200 32199 32099 +3 12255 12256 12341 +3 22331 19786 22429 +3 5609 5339 19457 +3 28975 29110 28974 +3 29941 29159 28345 +3 29510 29509 29372 +3 29373 29510 29372 +3 19689 27551 26422 +3 24865 24864 29258 +3 27394 27395 27513 +3 27749 27748 27631 +3 29658 29791 29657 +3 30307 30308 30440 +3 28464 30483 30349 +3 28809 6659 30690 +3 6981 7301 26817 +3 11943 23520 11836 +3 28606 28603 27268 +3 30348 30354 2270 +3 29696 19138 6903 +3 21849 19705 30737 +3 30738 30558 18865 +3 32244 32243 32143 +3 27492 11228 28600 +3 7214 28243 29819 +3 26608 26713 26712 +3 34817 34816 34688 +3 15453 13526 23451 +3 26343 26344 26382 +3 34946 34945 34816 +3 21630 26356 26396 +3 26451 26547 26546 +3 26450 26451 26546 +3 26547 26652 26651 +3 26546 26547 26651 +3 26652 26764 26763 +3 26651 26652 26763 +3 26764 26879 26878 +3 26763 26764 26878 +3 26879 26997 26996 +3 26878 26879 26996 +3 26997 27114 27113 +3 26996 26997 27113 +3 27114 27233 27232 +3 27113 27114 27232 +3 27351 27350 27232 +3 27233 27351 27232 +3 27351 27470 27469 +3 27350 27351 27469 +3 27470 27588 27587 +3 27469 27470 27587 +3 27588 27705 27704 +3 27587 27588 27704 +3 27705 27820 27819 +3 27704 27705 27819 +3 27820 27936 27935 +3 27819 27820 27935 +3 27936 28053 28052 +3 27935 27936 28052 +3 28170 28169 28052 +3 28053 28170 28052 +3 28287 28286 28169 +3 28170 28287 28169 +3 28287 28407 28406 +3 28286 28287 28406 +3 28407 28529 28528 +3 28406 28407 28528 +3 28658 28657 28528 +3 28529 28658 28528 +3 28658 28790 28789 +3 28657 28658 28789 +3 28790 28923 28922 +3 28789 28790 28922 +3 28923 29058 29057 +3 28922 28923 29057 +3 29058 29195 29194 +3 29057 29058 29194 +3 29195 29332 29331 +3 29194 29195 29331 +3 29332 29469 29468 +3 29331 29332 29468 +3 29469 29607 29606 +3 29468 29469 29606 +3 29607 29740 29739 +3 29606 29607 29739 +3 29740 29869 29868 +3 29739 29740 29868 +3 29869 30000 29999 +3 29868 29869 29999 +3 30132 30131 29999 +3 30000 30132 29999 +3 30132 30265 30264 +3 30131 30132 30264 +3 30265 30398 30397 +3 30264 30265 30397 +3 30532 30531 30397 +3 30398 30532 30397 +3 30666 30665 30531 +3 30532 30666 30531 +3 30800 30799 30665 +3 30666 30800 30665 +3 2816 2543 30799 +3 30800 2816 30799 +3 21533 21444 28433 +3 23021 22843 23609 +3 28572 28571 28449 +3 24428 24344 22422 +3 30205 26912 28864 +3 28861 30205 28864 +3 26460 26428 26945 +3 27086 26460 26945 +3 28750 28492 28866 +3 28866 28607 30157 +3 28814 30475 30474 +3 30746 18865 29682 +3 27636 27492 29130 +3 11228 11229 28600 +3 26623 28474 27788 +3 27636 29130 27517 +3 28846 28979 28845 +3 28474 27636 27517 +3 2269 19249 26798 +3 29530 29529 29392 +3 23072 22422 24344 +3 24274 24289 24273 +3 22422 8583 11123 +3 2956 22422 11123 +3 17308 11451 11123 +3 8583 17308 11123 +3 17308 6534 6654 +3 11451 17308 6654 +3 22299 22300 30070 +3 31787 31786 31686 +3 30558 29540 30693 +3 19786 19459 19457 +3 19787 19785 22330 +3 29110 29109 28974 +3 31892 31993 31891 +3 29648 29647 29509 +3 29102 29101 28966 +3 30751 26422 26522 +3 3087 3086 21947 +3 27514 27632 27631 +3 21946 19353 19354 +3 29357 29220 29156 +3 29267 28464 30349 +3 29826 30690 30349 +3 29129 30216 28992 +3 7079 7301 6981 +3 27281 28606 27268 +3 28606 30354 30348 +3 19409 17626 7070 +3 18509 19591 29015 +3 26610 26609 26513 +3 30803 14055 30772 +3 28474 27517 27788 +3 11228 7214 6660 +3 30593 30727 30592 +3 30326 30325 30192 +3 25105 25104 25721 +3 21890 21985 28807 +3 22861 24666 30776 +3 22861 29260 25117 +3 26452 26548 26547 +3 26451 26452 26547 +3 26548 26653 26652 +3 26547 26548 26652 +3 26765 26764 26652 +3 26653 26765 26652 +3 26880 26879 26764 +3 26765 26880 26764 +3 26998 26997 26879 +3 26880 26998 26879 +3 27115 27114 26997 +3 26998 27115 26997 +3 27234 27233 27114 +3 27115 27234 27114 +3 27234 27352 27351 +3 27233 27234 27351 +3 27352 27471 27470 +3 27351 27352 27470 +3 27471 27589 27588 +3 27470 27471 27588 +3 27589 27706 27705 +3 27588 27589 27705 +3 27706 27821 27820 +3 27705 27706 27820 +3 27821 27937 27936 +3 27820 27821 27936 +3 27937 28054 28053 +3 27936 27937 28053 +3 28054 28171 28170 +3 28053 28054 28170 +3 28288 28287 28170 +3 28171 28288 28170 +3 28408 28407 28287 +3 28288 28408 28287 +3 28408 28530 28529 +3 28407 28408 28529 +3 28659 28658 28529 +3 28530 28659 28529 +3 28659 28791 28790 +3 28658 28659 28790 +3 28791 28924 28923 +3 28790 28791 28923 +3 28924 29059 29058 +3 28923 28924 29058 +3 29059 29196 29195 +3 29058 29059 29195 +3 29196 29333 29332 +3 29195 29196 29332 +3 29333 29470 29469 +3 29332 29333 29469 +3 29470 29608 29607 +3 29469 29470 29607 +3 29608 29741 29740 +3 29607 29608 29740 +3 29741 29870 29869 +3 29740 29741 29869 +3 30001 30000 29869 +3 29870 30001 29869 +3 30133 30132 30000 +3 30001 30133 30000 +3 30133 30266 30265 +3 30132 30133 30265 +3 30266 30399 30398 +3 30265 30266 30398 +3 30533 30532 30398 +3 30399 30533 30398 +3 30667 30666 30532 +3 30533 30667 30532 +3 30801 30800 30666 +3 30667 30801 30666 +3 2815 2816 30800 +3 30801 2815 30800 +3 21985 22081 28941 +3 23072 11573 22422 +3 30205 27023 26912 +3 28439 28440 28561 +3 14057 27086 26945 +3 27023 29261 26912 +3 19039 11103 28622 +3 11453 14057 26945 +3 27137 7884 28367 +3 12021 27320 27319 +3 26623 27788 21472 +3 21630 23813 30870 +3 29925 30056 29924 +3 21557 26623 21472 +3 30593 30592 30458 +3 26608 26607 26511 +3 27492 28600 29130 +3 21557 21472 19575 +3 26493 27414 27412 +3 29395 29394 29257 +3 18733 1975 16300 +3 19249 26833 26798 +3 11573 8583 22422 +3 25092 20925 25372 +3 11573 30022 17308 +3 8583 11573 17308 +3 30022 19413 6534 +3 17308 30022 6534 +3 12334 12335 28109 +3 24668 22233 2545 +3 29273 29354 26907 +3 29773 29774 29902 +3 22329 22330 30840 +3 22329 19787 22330 +3 33058 33163 33057 +3 28366 30751 26522 +3 28967 28966 28833 +3 28967 29102 28966 +3 26570 13296 26571 +3 30051 30050 29919 +3 26926 26927 27044 +3 21635 19570 25225 +3 32616 32730 32615 +3 30483 29826 30349 +3 10241 16610 15090 +3 28992 35657 35386 +3 28608 28606 27281 +3 26786 26798 28719 +3 26587 20007 26491 +3 30833 17840 30832 +3 28133 29566 29892 +3 26610 26715 26714 +3 32049 31950 11518 +3 27263 19575 29428 +3 26678 24297 26677 +3 21919 22012 29396 +3 30533 25145 30667 +3 29260 22861 30776 +3 12108 27901 25365 +3 26453 26549 26548 +3 26452 26453 26548 +3 26549 26654 26653 +3 26548 26549 26653 +3 26766 26765 26653 +3 26654 26766 26653 +3 26766 26881 26880 +3 26765 26766 26880 +3 26999 26998 26880 +3 26881 26999 26880 +3 27116 27115 26998 +3 26999 27116 26998 +3 27235 27234 27115 +3 27116 27235 27115 +3 27353 27352 27234 +3 27235 27353 27234 +3 27353 27472 27471 +3 27352 27353 27471 +3 27472 27590 27589 +3 27471 27472 27589 +3 27590 27707 27706 +3 27589 27590 27706 +3 27707 27822 27821 +3 27706 27707 27821 +3 27822 27938 27937 +3 27821 27822 27937 +3 27938 28055 28054 +3 27937 27938 28054 +3 28055 28172 28171 +3 28054 28055 28171 +3 28172 28289 28288 +3 28171 28172 28288 +3 28289 28409 28408 +3 28288 28289 28408 +3 28409 28531 28530 +3 28408 28409 28530 +3 28660 28659 28530 +3 28531 28660 28530 +3 28660 28792 28791 +3 28659 28660 28791 +3 28792 28925 28924 +3 28791 28792 28924 +3 28925 29060 29059 +3 28924 28925 29059 +3 29060 29197 29196 +3 29059 29060 29196 +3 29334 29333 29196 +3 29197 29334 29196 +3 29334 29471 29470 +3 29333 29334 29470 +3 29471 29609 29608 +3 29470 29471 29608 +3 29609 29742 29741 +3 29608 29609 29741 +3 29742 29871 29870 +3 29741 29742 29870 +3 29871 30002 30001 +3 29870 29871 30001 +3 30002 30134 30133 +3 30001 30002 30133 +3 30134 30267 30266 +3 30133 30134 30266 +3 30267 30400 30399 +3 30266 30267 30399 +3 26522 35469 6658 +3 30399 30400 30533 +3 30197 22587 30330 +3 30801 30667 25829 +3 25366 25239 25101 +3 21176 21175 21088 +3 2542 2815 30801 +3 24803 26359 29939 +3 3624 13526 23703 +3 23975 7081 25916 +3 18282 27844 29261 +3 29364 29365 29501 +3 7188 6972 11496 +3 15219 7188 11496 +3 17269 11452 26521 +3 26676 26677 24298 +3 26574 28133 29892 +3 17259 26574 29892 +3 26512 26608 26511 +3 29566 29428 29892 +3 26512 26511 26424 +3 2542 30801 25829 +3 29114 29251 29113 +3 27263 21557 19575 +3 5340 2404 17259 +3 25644 28117 25500 +3 29532 29531 29394 +3 33160 33159 33054 +3 30363 19249 2269 +3 13363 29023 29160 +3 25483 15317 26000 +3 6844 27903 30022 +3 11573 6844 30022 +3 27903 20092 19413 +3 30022 27903 19413 +3 29395 29257 21918 +3 20845 20925 25092 +3 29682 18865 14618 +3 28989 24226 27784 +3 30841 30840 30706 +3 30841 22329 30840 +3 33268 33267 33162 +3 32093 32092 31992 +3 28834 28833 28701 +3 28834 28967 28833 +3 29920 30051 29919 +3 30051 30183 30050 +3 26699 26700 26811 +3 26812 26927 26926 +3 19674 29216 25084 +3 28071 29129 28992 +3 27627 27626 27508 +3 8792 8460 6613 +3 27284 27281 26428 +3 27284 28608 27281 +3 19977 29954 23173 +3 35724 35358 35726 +3 28473 29959 5340 +3 29566 27263 29428 +3 29251 29250 29113 +3 5741 19129 27646 +3 31274 19971 19970 +3 26918 29138 29137 +3 28693 28825 28824 +3 27082 29423 28725 +3 31656 26240 25243 +3 17251 27399 26902 +3 19976 26492 26491 +3 31341 19973 19972 +3 28957 28958 29092 +3 26917 26918 29137 +3 29121 19036 7406 +3 29143 17251 26902 +3 26082 25807 25213 +3 32554 32667 32553 +3 26492 25949 26588 +3 25074 2819 25147 +3 29121 7406 19196 +3 25365 26453 26452 +3 30745 14344 25945 +3 26454 26550 26549 +3 26453 26454 26549 +3 26550 26655 26654 +3 26549 26550 26654 +3 26767 26766 26654 +3 26655 26767 26654 +3 26767 26882 26881 +3 26766 26767 26881 +3 27000 26999 26881 +3 26882 27000 26881 +3 27117 27116 26999 +3 27000 27117 26999 +3 27117 27236 27235 +3 27116 27117 27235 +3 27236 27354 27353 +3 27235 27236 27353 +3 27354 27473 27472 +3 27353 27354 27472 +3 27473 27591 27590 +3 27472 27473 27590 +3 27591 27708 27707 +3 27590 27591 27707 +3 27708 27823 27822 +3 27707 27708 27822 +3 27823 27939 27938 +3 27822 27823 27938 +3 27939 28056 28055 +3 27938 27939 28055 +3 28056 28173 28172 +3 28055 28056 28172 +3 28173 28290 28289 +3 28172 28173 28289 +3 28290 28410 28409 +3 28289 28290 28409 +3 28410 28532 28531 +3 28409 28410 28531 +3 28532 28661 28660 +3 28531 28532 28660 +3 28661 28793 28792 +3 28660 28661 28792 +3 28793 28926 28925 +3 28792 28793 28925 +3 28926 29061 29060 +3 28925 28926 29060 +3 29061 29198 29197 +3 29060 29061 29197 +3 29198 29335 29334 +3 29197 29198 29334 +3 29335 29472 29471 +3 29334 29335 29471 +3 29472 29610 29609 +3 29471 29472 29609 +3 29610 29743 29742 +3 29609 29610 29742 +3 29872 29871 29742 +3 29743 29872 29742 +3 29872 30003 30002 +3 29871 29872 30002 +3 30003 30135 30134 +3 30002 30003 30134 +3 30135 30268 30267 +3 30134 30135 30267 +3 30268 30401 30400 +3 30267 30268 30400 +3 27035 20428 20344 +3 21336 21426 28069 +3 29650 29651 29783 +3 21608 21609 21701 +3 26500 26501 28459 +3 28460 28885 29155 +3 25371 18926 27669 +3 30032 30033 30164 +3 24126 25371 28248 +3 11644 13317 3077 +3 18282 29285 27844 +3 30699 30698 30564 +3 15219 11496 19338 +3 19449 15219 19338 +3 26605 26604 26508 +3 26604 26605 26709 +3 30735 21836 28473 +3 29959 2404 5340 +3 27667 29121 19196 +3 28749 29142 28858 +3 19036 26691 7406 +3 29142 19773 28998 +3 26569 21836 30735 +3 30089 26569 30735 +3 28250 29414 29817 +3 7884 28250 29817 +3 2952 22843 23021 +3 30354 30363 2269 +3 23021 6844 2952 +3 26503 30687 22388 +3 23021 28253 27903 +3 6844 23021 27903 +3 18175 19418 19515 +3 27903 28253 20092 +3 21890 28675 21796 +3 21374 24565 25779 +3 29247 29384 29246 +3 24481 27161 27044 +3 30438 30439 30572 +3 30707 30841 30706 +3 33163 33268 33162 +3 30751 19689 26422 +3 28702 28701 28572 +3 28702 28834 28701 +3 29557 27841 30749 +3 30183 30182 30050 +3 26811 26812 26926 +3 23775 19674 23078 +3 31370 31369 31302 +3 32842 32841 32729 +3 23911 23853 14757 +3 26793 26792 24276 +3 7188 14057 11453 +3 26460 27284 26428 +3 21567 21669 23942 +3 27729 28240 11103 +3 29269 26569 30089 +3 2404 26574 17259 +3 21092 24777 24362 +3 19773 28747 6406 +3 28747 28304 6406 +3 28747 26969 28304 +3 19973 31341 19974 +3 31753 24157 24485 +3 24157 31753 31752 +3 26491 20007 19976 +3 23519 26492 19976 +3 19972 31274 31341 +3 26078 31563 25997 +3 24150 18097 24090 +3 25522 31654 24485 +3 19114 34613 19327 +3 35393 35636 19135 +3 2147 26008 26006 +3 26078 23268 31564 +3 19974 31341 31408 +3 33702 21277 21278 +3 19959 3129 17889 +3 33604 33731 33603 +3 30400 30401 30535 +3 34909 34910 17279 +3 13761 25191 23818 +3 26969 12691 28304 +3 28365 28367 29021 +3 27901 30879 30878 +3 25856 24759 24885 +3 26455 26551 26550 +3 26454 26455 26550 +3 26551 26656 26655 +3 26550 26551 26655 +3 26656 26768 26767 +3 26655 26656 26767 +3 26768 26883 26882 +3 26767 26768 26882 +3 26883 27001 27000 +3 26882 26883 27000 +3 27001 27118 27117 +3 27000 27001 27117 +3 27118 27237 27236 +3 27117 27118 27236 +3 27355 27354 27236 +3 27237 27355 27236 +3 27474 27473 27354 +3 27355 27474 27354 +3 27592 27591 27473 +3 27474 27592 27473 +3 27709 27708 27591 +3 27592 27709 27591 +3 27709 27824 27823 +3 27708 27709 27823 +3 27824 27940 27939 +3 27823 27824 27939 +3 27940 28057 28056 +3 27939 27940 28056 +3 28057 28174 28173 +3 28056 28057 28173 +3 28174 28291 28290 +3 28173 28174 28290 +3 28291 28411 28410 +3 28290 28291 28410 +3 28411 28533 28532 +3 28410 28411 28532 +3 28533 28662 28661 +3 28532 28533 28661 +3 28662 28794 28793 +3 28661 28662 28793 +3 28794 28927 28926 +3 28793 28794 28926 +3 28927 29062 29061 +3 28926 28927 29061 +3 29062 29199 29198 +3 29061 29062 29198 +3 29199 29336 29335 +3 29198 29199 29335 +3 29336 29473 29472 +3 29335 29336 29472 +3 29473 29611 29610 +3 29472 29473 29610 +3 29611 29744 29743 +3 29610 29611 29743 +3 29873 29872 29743 +3 29744 29873 29743 +3 29873 30004 30003 +3 29872 29873 30003 +3 30004 30136 30135 +3 30003 30004 30135 +3 30136 30269 30268 +3 30135 30136 30268 +3 30269 30402 30401 +3 30268 30269 30401 +3 30402 30536 30535 +3 30401 30402 30535 +3 27498 20757 27499 +3 32197 32298 32196 +3 28459 28460 29155 +3 28885 30687 26503 +3 21473 30420 35519 +3 33058 33057 32951 +3 15897 6783 1961 +3 6783 7302 11576 +3 26734 6851 27724 +3 19897 1961 22043 +3 18925 2405 2538 +3 18915 18925 2538 +3 26710 26822 26821 +3 26709 26710 26821 +3 27020 27021 29140 +3 29141 29269 29158 +3 21572 22552 21571 +3 22844 3982 30024 +3 30701 30835 30834 +3 22744 23609 24514 +3 21836 29959 28473 +3 19347 17751 27020 +3 24957 24603 20073 +3 20158 24957 20073 +3 27869 27259 27985 +3 7067 6867 18915 +3 24295 24449 24296 +3 19418 18175 7454 +3 34805 34934 34804 +3 23021 21376 28253 +3 27087 11853 26971 +3 16151 19700 27666 +3 32631 32630 32521 +3 21247 27837 21248 +3 19129 11384 27782 +3 29247 29246 29109 +3 30707 30706 30572 +3 30573 30707 30572 +3 35438 35588 35817 +3 33377 33376 33267 +3 28573 28702 28572 +3 29239 29238 29101 +3 28096 28213 28095 +3 29557 30749 17266 +3 20602 20601 20519 +3 28124 12514 12604 +3 29408 28344 29124 +3 4396 22270 14090 +3 19705 2670 21848 +3 30737 19705 21848 +3 19449 19338 2538 +3 6972 7188 11453 +3 26509 26605 26508 +3 26605 26710 26709 +3 30466 30467 19347 +3 29158 29269 30089 +3 29817 21776 22156 +3 24216 21916 24317 +3 30567 30701 30700 +3 31174 31238 31237 +3 31478 25320 31479 +3 26508 26421 31856 +3 19994 19963 19964 +3 31052 31051 30990 +3 32727 32726 32612 +3 25944 24831 26366 +3 30986 31047 30985 +3 31233 31298 31232 +3 15610 32567 15609 +3 33164 33163 33058 +3 31617 31618 31712 +3 32344 32448 32343 +3 35726 35358 35446 +3 30076 27755 27409 +3 29002 29399 30076 +3 27409 29002 30076 +3 24467 28125 23654 +3 8230 35845 35744 +3 33863 33998 33862 +3 27372 27254 26252 +3 28340 24455 24908 +3 30700 30701 30834 +3 24227 24020 24226 +3 31105 31106 31168 +3 29133 23957 23898 +3 25342 24803 29939 +3 26388 26456 26455 +3 24407 26455 26454 +3 26456 26552 26551 +3 26455 26456 26551 +3 26552 26657 26656 +3 26551 26552 26656 +3 26769 26768 26656 +3 26657 26769 26656 +3 26769 26884 26883 +3 26768 26769 26883 +3 27002 27001 26883 +3 26884 27002 26883 +3 27119 27118 27001 +3 27002 27119 27001 +3 27119 27238 27237 +3 27118 27119 27237 +3 27238 27356 27355 +3 27237 27238 27355 +3 27356 27475 27474 +3 27355 27356 27474 +3 27593 27592 27474 +3 27475 27593 27474 +3 27710 27709 27592 +3 27593 27710 27592 +3 27825 27824 27709 +3 27710 27825 27709 +3 27825 27941 27940 +3 27824 27825 27940 +3 27941 28058 28057 +3 27940 27941 28057 +3 28058 28175 28174 +3 28057 28058 28174 +3 28175 28292 28291 +3 28174 28175 28291 +3 28292 28412 28411 +3 28291 28292 28411 +3 28412 28534 28533 +3 28411 28412 28533 +3 28534 28663 28662 +3 28533 28534 28662 +3 28663 28795 28794 +3 28662 28663 28794 +3 28795 28928 28927 +3 28794 28795 28927 +3 28928 29063 29062 +3 28927 28928 29062 +3 29063 29200 29199 +3 29062 29063 29199 +3 29200 29337 29336 +3 29199 29200 29336 +3 29337 29474 29473 +3 29336 29337 29473 +3 29474 29612 29611 +3 29473 29474 29611 +3 29745 29744 29611 +3 29612 29745 29611 +3 29745 29874 29873 +3 29744 29745 29873 +3 29874 30005 30004 +3 29873 29874 30004 +3 30005 30137 30136 +3 30004 30005 30136 +3 30137 30270 30269 +3 30136 30137 30269 +3 30270 30403 30402 +3 30269 30270 30402 +3 30403 30537 30536 +3 30402 30403 30536 +3 29494 35788 29356 +3 30537 30671 30536 +3 29155 28885 26503 +3 24869 26249 13792 +3 2809 22137 25397 +3 30930 30929 30875 +3 28587 28619 28490 +3 28586 28587 28490 +3 26734 19348 6851 +3 24423 24338 24339 +3 30452 30586 30451 +3 30720 30719 30585 +3 26712 26824 26823 +3 28476 29698 26797 +3 28744 28755 30466 +3 29140 29141 29158 +3 26717 26738 28614 +3 28618 28344 29408 +3 25645 28116 25644 +3 23173 29679 13767 +3 27021 29141 29140 +3 27398 28755 28744 +3 31044 31106 31105 +3 31050 31051 31112 +3 27259 29630 27985 +3 6867 18925 18915 +3 7771 712 594 +3 12988 16775 3794 +3 25682 11922 9120 +3 9120 13315 25682 +3 937 16483 7587 +3 24826 26821 26937 +3 28884 24744 23779 +3 27162 27163 28471 +3 19785 19351 19459 +3 7095 27145 6992 +3 19787 19352 19351 +3 19785 19787 19351 +3 35685 12809 30023 +3 7513 7512 33673 +3 29102 29239 29101 +3 29376 29375 29238 +3 29827 28366 6658 +3 28213 28212 28095 +3 25398 24240 23603 +3 26345 26346 27085 +3 27256 28340 29153 +3 24826 24886 24887 +3 27023 18282 29261 +3 29285 27724 27844 +3 6867 7067 30719 +3 2405 19449 2538 +3 26429 11481 26361 +3 26606 26607 26711 +3 26483 27398 27386 +3 17751 27021 27020 +3 27259 453 29630 +3 28321 28441 28440 +3 28021 19909 25390 +3 26509 26508 26423 +3 17262 30472 24010 +3 26510 26423 31955 +3 31955 26424 26510 +3 25646 25282 28230 +3 30991 30990 30932 +3 33736 33870 33735 +3 33870 34005 33869 +3 27149 29495 29005 +3 34005 34004 33869 +3 31459 31531 31530 +3 27149 29005 27986 +3 14261 13867 10709 +3 23692 20172 26692 +3 19237 27409 27870 +3 27986 19237 27870 +3 28860 29002 27409 +3 19237 28860 27409 +3 25390 19909 28625 +3 28860 28595 29002 +3 26716 26832 23817 +3 28625 19909 19908 +3 13944 29962 29961 +3 28996 24863 24738 +3 28304 25407 25550 +3 21972 23322 27553 +3 14924 12560 12381 +3 26349 26388 27895 +3 26349 26389 26388 +3 31202 31266 31201 +3 26389 26457 26456 +3 26388 26389 26456 +3 26457 26553 26552 +3 26456 26457 26552 +3 26553 26658 26657 +3 26552 26553 26657 +3 26770 26769 26657 +3 26658 26770 26657 +3 26770 26885 26884 +3 26769 26770 26884 +3 26885 27003 27002 +3 26884 26885 27002 +3 27003 27120 27119 +3 27002 27003 27119 +3 27120 27239 27238 +3 27119 27120 27238 +3 27239 27357 27356 +3 27238 27239 27356 +3 27357 27476 27475 +3 27356 27357 27475 +3 27594 27593 27475 +3 27476 27594 27475 +3 27711 27710 27593 +3 27594 27711 27593 +3 27826 27825 27710 +3 27711 27826 27710 +3 27826 27942 27941 +3 27825 27826 27941 +3 27942 28059 28058 +3 27941 27942 28058 +3 28059 28176 28175 +3 28058 28059 28175 +3 28176 28293 28292 +3 28175 28176 28292 +3 28293 28413 28412 +3 28292 28293 28412 +3 28413 28535 28534 +3 28412 28413 28534 +3 28535 28664 28663 +3 28534 28535 28663 +3 28664 28796 28795 +3 28663 28664 28795 +3 28796 28929 28928 +3 28795 28796 28928 +3 28929 29064 29063 +3 28928 28929 29063 +3 29064 29201 29200 +3 29063 29064 29200 +3 29201 29338 29337 +3 29200 29201 29337 +3 29338 29475 29474 +3 29337 29338 29474 +3 29475 29613 29612 +3 29474 29475 29612 +3 29746 29745 29612 +3 29613 29746 29612 +3 29746 29875 29874 +3 29745 29746 29874 +3 29875 30006 30005 +3 29874 29875 30005 +3 30006 30138 30137 +3 30005 30006 30137 +3 30138 30271 30270 +3 30137 30138 30270 +3 30404 30403 30270 +3 30271 30404 30270 +3 30404 30538 30537 +3 30403 30404 30537 +3 30538 30672 30671 +3 30537 30538 30671 +3 20733 22949 21493 +3 33741 33875 33740 +3 32048 32047 31950 +3 23603 24240 26793 +3 28619 19907 28947 +3 28490 28619 28947 +3 29016 19461 28604 +3 28475 29016 28604 +3 30319 30452 30318 +3 30586 30720 30585 +3 26797 27164 19039 +3 28848 28981 28847 +3 27953 26483 26482 +3 30467 17751 19347 +3 29090 29091 29227 +3 27505 27623 27622 +3 26593 27759 28984 +3 11398 3323 27876 +3 30743 19270 2541 +3 27386 27398 28744 +3 28755 30467 30466 +3 24304 20759 25111 +3 28848 28847 28715 +3 24429 28225 24284 +3 29763 19128 27401 +3 17819 18359 23882 +3 23957 23956 23897 +3 15041 18179 19106 +3 18359 12450 23882 +3 22330 19785 22331 +3 21747 17256 5088 +3 29018 23577 29019 +3 19785 19786 22331 +3 29018 29019 28130 +3 28338 29018 28130 +3 19352 6788 5608 +3 19351 19352 5608 +3 27082 28725 28726 +3 23059 30285 22961 +3 29239 29376 29238 +3 29376 29513 29512 +3 28480 30222 30215 +3 16151 21328 29431 +3 30761 24777 30760 +3 26417 27255 27202 +3 19907 27256 19234 +3 19234 27256 29153 +3 29285 26734 27724 +3 19348 29951 6851 +3 30186 30319 30185 +3 30720 6867 30719 +3 28716 28848 28715 +3 28981 28980 28847 +3 341 3323 342 +3 26482 26483 27386 +3 21942 19447 21943 +3 19447 21471 21469 +3 35943 9670 9784 +3 23521 16758 28625 +3 31956 31955 26423 +3 31957 31956 31856 +3 26423 31856 31956 +3 31856 26423 26508 +3 30933 30991 30932 +3 31140 31203 31139 +3 34141 34140 34004 +3 34005 34141 34004 +3 12916 35870 24614 +3 29633 26404 29766 +3 27728 29005 29633 +3 29766 27728 29633 +3 28103 27986 29005 +3 27728 28103 29005 +3 11252 19237 27986 +3 28103 11252 27986 +3 17267 28860 19237 +3 11252 17267 19237 +3 30211 28595 28860 +3 17267 30211 28860 +3 24211 24210 24151 +3 30211 18097 28595 +3 29825 24510 24423 +3 26706 26601 24162 +3 29527 29665 29526 +3 30045 30046 30177 +3 30733 22884 22983 +3 20261 25432 25228 +3 25365 25077 26453 +3 35067 17372 17371 +3 35067 17371 34937 +3 26390 26458 26457 +3 26389 26390 26457 +3 26458 26554 26553 +3 26457 26458 26553 +3 26554 26659 26658 +3 26553 26554 26658 +3 26659 26771 26770 +3 26658 26659 26770 +3 26771 26886 26885 +3 26770 26771 26885 +3 26886 27004 27003 +3 26885 26886 27003 +3 27121 27120 27003 +3 27004 27121 27003 +3 27240 27239 27120 +3 27121 27240 27120 +3 27240 27358 27357 +3 27239 27240 27357 +3 27358 27477 27476 +3 27357 27358 27476 +3 27477 27595 27594 +3 27476 27477 27594 +3 27595 27712 27711 +3 27594 27595 27711 +3 27712 27827 27826 +3 27711 27712 27826 +3 27827 27943 27942 +3 27826 27827 27942 +3 27943 28060 28059 +3 27942 27943 28059 +3 28060 28177 28176 +3 28059 28060 28176 +3 28294 28293 28176 +3 28177 28294 28176 +3 28414 28413 28293 +3 28294 28414 28293 +3 28414 28536 28535 +3 28413 28414 28535 +3 28536 28665 28664 +3 28535 28536 28664 +3 28665 28797 28796 +3 28664 28665 28796 +3 28797 28930 28929 +3 28796 28797 28929 +3 28930 29065 29064 +3 28929 28930 29064 +3 29065 29202 29201 +3 29064 29065 29201 +3 29202 29339 29338 +3 29201 29202 29338 +3 29339 29476 29475 +3 29338 29339 29475 +3 29476 29614 29613 +3 29475 29476 29613 +3 29747 29746 29613 +3 29614 29747 29613 +3 29747 29876 29875 +3 29746 29747 29875 +3 29876 30007 30006 +3 29875 29876 30006 +3 30007 30139 30138 +3 30006 30007 30138 +3 30139 30272 30271 +3 30138 30139 30271 +3 30405 30404 30271 +3 30272 30405 30271 +3 30539 30538 30404 +3 30405 30539 30404 +3 30539 30673 30672 +3 30538 30539 30672 +3 15723 21031 1858 +3 24520 24349 29358 +3 29020 19234 24443 +3 15329 28020 28018 +3 19565 19561 26581 +3 6846 6847 21368 +3 28101 26970 19461 +3 29016 28101 19461 +3 30186 30185 30053 +3 30586 30585 30451 +3 29116 29115 28980 +3 28981 29116 28980 +3 17758 21553 342 +3 27876 27953 26482 +3 25077 24407 26454 +3 28491 19901 19517 +3 25931 19477 23809 +3 31924 31923 31817 +3 569 21553 17758 +3 571 569 17758 +3 29253 29252 29115 +3 29116 29253 29115 +3 24531 10003 18359 +3 27621 27620 27502 +3 23522 25178 25177 +3 26789 26790 24885 +3 23580 24829 12450 +3 26970 28101 25402 +3 30212 30215 19675 +3 27381 21275 21365 +3 30599 25657 25658 +3 29143 26902 28217 +3 28086 28203 28202 +3 28562 28691 28690 +3 29520 29658 29519 +3 30189 30322 30188 +3 6980 17575 6537 +3 30589 30588 30454 +3 11384 27875 27782 +3 30476 30486 19129 +3 29375 29376 29512 +3 29512 29513 29650 +3 12132 35886 35821 +3 31993 32093 31992 +3 30770 30762 2805 +3 24030 24090 20410 +3 26590 28587 28586 +3 28947 19907 19234 +3 28475 28604 29951 +3 19348 28475 29951 +3 30054 30186 30053 +3 30452 30451 30318 +3 29390 29389 29252 +3 29253 29390 29252 +3 19685 569 571 +3 3323 27953 27876 +3 26702 26814 26813 +3 23809 19477 30811 +3 32570 17396 26611 +3 32462 32570 26611 +3 26832 26716 17484 +3 31803 31909 31802 +3 27548 12173 27664 +3 31720 31820 31719 +3 33092 33197 33091 +3 30933 30932 30878 +3 30879 30933 30878 +3 33225 33330 33224 +3 34279 34278 34140 +3 30026 29766 28308 +3 32637 32638 32751 +3 26487 27728 29766 +3 30026 26487 29766 +3 28220 28103 27728 +3 26487 28220 27728 +3 27292 11252 28103 +3 28220 27292 28103 +3 28994 17267 11252 +3 27292 28994 11252 +3 29548 30211 17267 +3 28994 29548 17267 +3 29274 18097 30211 +3 29548 29274 30211 +3 25570 23711 25571 +3 29274 19241 18097 +3 28108 28100 24830 +3 25364 26458 26390 +3 18671 19436 19682 +3 3323 11398 342 +3 16218 16987 15231 +3 26701 26702 26813 +3 18645 18644 21036 +3 35067 34937 34938 +3 24509 24510 24617 +3 22552 27752 27612 +3 20953 21036 18644 +3 20952 20953 18644 +3 26555 26660 26659 +3 26554 26555 26659 +3 26772 26771 26659 +3 26660 26772 26659 +3 26772 26887 26886 +3 26771 26772 26886 +3 26887 27005 27004 +3 26886 26887 27004 +3 27122 27121 27004 +3 27005 27122 27004 +3 27241 27240 27121 +3 27122 27241 27121 +3 27359 27358 27240 +3 27241 27359 27240 +3 27478 27477 27358 +3 27359 27478 27358 +3 27596 27595 27477 +3 27478 27596 27477 +3 27596 27713 27712 +3 27595 27596 27712 +3 27713 27828 27827 +3 27712 27713 27827 +3 27828 27944 27943 +3 27827 27828 27943 +3 28061 28060 27943 +3 27944 28061 27943 +3 28178 28177 28060 +3 28061 28178 28060 +3 28295 28294 28177 +3 28178 28295 28177 +3 28415 28414 28294 +3 28295 28415 28294 +3 28537 28536 28414 +3 28415 28537 28414 +3 28666 28665 28536 +3 28537 28666 28536 +3 28666 28798 28797 +3 28665 28666 28797 +3 28798 28931 28930 +3 28797 28798 28930 +3 28931 29066 29065 +3 28930 28931 29065 +3 29066 29203 29202 +3 29065 29066 29202 +3 29203 29340 29339 +3 29202 29203 29339 +3 29340 29477 29476 +3 29339 29340 29476 +3 29477 29615 29614 +3 29476 29477 29614 +3 29748 29747 29614 +3 29615 29748 29614 +3 29748 29877 29876 +3 29747 29748 29876 +3 29877 30008 30007 +3 29876 29877 30007 +3 30140 30139 30007 +3 30008 30140 30007 +3 30273 30272 30139 +3 30140 30273 30139 +3 30406 30405 30272 +3 30273 30406 30272 +3 30540 30539 30405 +3 30406 30540 30405 +3 30674 30673 30539 +3 30540 30674 30539 +3 30673 25667 25366 +3 22194 30631 30496 +3 29021 23959 11725 +3 24432 29422 24266 +3 27414 27432 28814 +3 19561 26590 26581 +3 29794 29923 29793 +3 24731 28237 25287 +3 30323 30322 30189 +3 30054 30053 29922 +3 30729 7402 30728 +3 29527 29526 29389 +3 35523 35479 28308 +3 7402 19436 18671 +3 8626 1861 1982 +3 22176 22177 22272 +3 23655 24848 23606 +3 21553 341 342 +3 30595 30729 30594 +3 29665 29798 29664 +3 29798 29797 29664 +3 27863 27862 27747 +3 27748 27863 27747 +3 29492 29490 24348 +3 29431 19700 16151 +3 25682 13315 24581 +3 23655 10003 24531 +3 30215 21747 19675 +3 20330 20244 20245 +3 30712 17568 30711 +3 29366 29503 29502 +3 28955 28956 29090 +3 29091 29228 29227 +3 19030 26904 6537 +3 25693 25834 25692 +3 30710 7407 6919 +3 30709 30710 6919 +3 30576 30710 30709 +3 30575 30576 30709 +3 29513 29651 29650 +3 29651 29784 29783 +3 28496 30287 30286 +3 23576 26503 22388 +3 26900 26932 26416 +3 12173 12256 27664 +3 27199 27200 28554 +3 26581 26590 28586 +3 19993 25503 19994 +3 21141 27137 27146 +3 29523 29661 29522 +3 30319 30318 30185 +3 29390 29527 29389 +3 29665 29664 29526 +3 30461 30595 30460 +3 19682 19685 571 +3 28878 28754 17479 +3 30803 28878 17479 +3 10241 30772 16610 +3 26513 32153 32254 +3 35202 35201 35072 +3 34942 34941 34812 +3 33302 33301 33196 +3 31820 31819 31719 +3 31720 31719 31624 +3 31625 31720 31624 +3 34141 34279 34140 +3 34417 34416 34278 +3 33078 33077 32971 +3 35852 35410 35453 +3 30291 30026 28428 +3 6876 30291 28428 +3 27033 26487 30026 +3 30291 27033 30026 +3 28337 28220 26487 +3 27033 28337 26487 +3 29824 27292 28220 +3 28337 29824 28220 +3 30206 28994 27292 +3 29824 30206 27292 +3 29410 29548 28994 +3 30206 29410 28994 +3 29820 29274 29548 +3 29410 29820 29548 +3 6408 19241 29274 +3 29820 6408 29274 +3 34134 34272 34133 +3 21242 21330 23910 +3 19436 19685 19682 +3 27318 12102 27317 +3 21651 19673 28754 +3 28878 21651 28754 +3 30804 30757 19673 +3 11978 12560 12938 +3 26253 23813 23926 +3 21290 21453 25728 +3 26934 24637 26819 +3 20501 14141 23487 +3 26556 26661 26660 +3 26555 26556 26660 +3 26773 26772 26660 +3 26661 26773 26660 +3 26888 26887 26772 +3 26773 26888 26772 +3 26888 27006 27005 +3 26887 26888 27005 +3 27123 27122 27005 +3 27006 27123 27005 +3 27242 27241 27122 +3 27123 27242 27122 +3 27360 27359 27241 +3 27242 27360 27241 +3 27479 27478 27359 +3 27360 27479 27359 +3 27597 27596 27478 +3 27479 27597 27478 +3 27714 27713 27596 +3 27597 27714 27596 +3 27829 27828 27713 +3 27714 27829 27713 +3 27945 27944 27828 +3 27829 27945 27828 +3 28062 28061 27944 +3 27945 28062 27944 +3 28179 28178 28061 +3 28062 28179 28061 +3 28296 28295 28178 +3 28179 28296 28178 +3 28416 28415 28295 +3 28296 28416 28295 +3 28538 28537 28415 +3 28416 28538 28415 +3 28667 28666 28537 +3 28538 28667 28537 +3 28667 28799 28798 +3 28666 28667 28798 +3 28799 28932 28931 +3 28798 28799 28931 +3 28932 29067 29066 +3 28931 28932 29066 +3 29204 29203 29066 +3 29067 29204 29066 +3 29204 29341 29340 +3 29203 29204 29340 +3 29341 29478 29477 +3 29340 29341 29477 +3 29616 29615 29477 +3 29478 29616 29477 +3 29749 29748 29615 +3 29616 29749 29615 +3 29749 29878 29877 +3 29748 29749 29877 +3 29878 30009 30008 +3 29877 29878 30008 +3 30141 30140 30008 +3 30009 30141 30008 +3 30274 30273 30140 +3 30141 30274 30140 +3 30407 30406 30273 +3 30274 30407 30273 +3 30407 30541 30540 +3 30406 30407 30540 +3 30675 30674 30540 +3 30541 30675 30540 +3 21722 22194 21913 +3 30675 30809 30674 +3 23265 23168 30826 +3 17104 22844 6845 +3 26723 34062 26613 +3 29392 29391 29254 +3 29661 29794 29660 +3 29923 30054 29922 +3 29927 30058 29926 +3 30190 30323 30189 +3 30461 30460 30327 +3 6866 7402 18671 +3 21651 30804 19673 +3 30668 4816 30757 +3 30804 30668 30757 +3 28730 28597 4816 +3 7402 6866 30728 +3 30328 30327 30194 +3 29927 29926 29797 +3 29798 29927 29797 +3 23705 25915 23606 +3 29794 29793 29660 +3 32153 26513 12129 +3 23637 23687 23686 +3 30600 23956 23957 +3 23957 23897 23898 +3 28472 30215 30212 +3 26611 17484 26716 +3 19035 29013 26584 +3 30440 30441 30574 +3 30230 21751 21838 +3 30222 30230 21838 +3 19452 16766 19451 +3 28085 28086 28202 +3 30308 30309 30441 +3 30442 30576 30575 +3 7299 7411 7295 +3 7183 7299 7295 +3 6839 26387 26386 +3 7299 6839 6838 +3 28577 28576 28454 +3 6838 6839 26386 +3 26409 26413 27199 +3 21790 23910 21330 +3 29956 17668 21550 +3 27200 28593 28554 +3 30074 27528 30745 +3 12086 27649 27763 +3 29386 29523 29385 +3 29661 29660 29522 +3 30058 30057 29926 +3 30590 30589 30455 +3 30195 30194 30062 +3 30729 30728 30594 +3 30668 28730 4816 +3 30339 28131 28597 +3 17484 26611 17396 +3 32955 32954 32846 +3 32357 26513 32254 +3 34287 34425 34286 +3 34287 34286 34148 +3 34554 34553 34416 +3 34554 34682 34553 +3 34417 34554 34416 +3 34682 34681 34553 +3 26610 32357 26611 +3 18936 35826 26624 +3 35608 35549 35775 +3 11811 11896 7641 +3 30424 30291 6876 +3 30610 30424 6876 +3 30639 27033 30291 +3 30424 30639 30291 +3 28305 28337 27033 +3 30639 28305 27033 +3 19541 29824 28337 +3 28305 19541 28337 +3 22234 30206 29824 +3 19541 22234 29824 +3 28193 29410 30206 +3 22234 28193 30206 +3 29407 29820 29410 +3 28193 29407 29410 +3 11122 6408 29820 +3 29407 11122 29820 +3 24450 24451 25728 +3 23603 24359 26795 +3 23853 23911 23910 +3 29365 29502 29501 +3 29932 30063 29931 +3 30595 30594 30460 +3 28730 30339 28597 +3 28132 29541 28131 +3 26556 23926 26461 +3 30339 28132 28131 +3 26461 26557 26556 +3 20990 21075 20989 +3 26557 26662 26661 +3 26556 26557 26661 +3 26662 26774 26773 +3 26661 26662 26773 +3 26889 26888 26773 +3 26774 26889 26773 +3 26889 27007 27006 +3 26888 26889 27006 +3 27124 27123 27006 +3 27007 27124 27006 +3 27243 27242 27123 +3 27124 27243 27123 +3 27361 27360 27242 +3 27243 27361 27242 +3 27480 27479 27360 +3 27361 27480 27360 +3 27598 27597 27479 +3 27480 27598 27479 +3 27715 27714 27597 +3 27598 27715 27597 +3 27830 27829 27714 +3 27715 27830 27714 +3 27946 27945 27829 +3 27830 27946 27829 +3 28063 28062 27945 +3 27946 28063 27945 +3 28180 28179 28062 +3 28063 28180 28062 +3 28297 28296 28179 +3 28180 28297 28179 +3 28417 28416 28296 +3 28297 28417 28296 +3 28539 28538 28416 +3 28417 28539 28416 +3 28668 28667 28538 +3 28539 28668 28538 +3 28800 28799 28667 +3 28668 28800 28667 +3 28933 28932 28799 +3 28800 28933 28799 +3 29068 29067 28932 +3 28933 29068 28932 +3 29068 29205 29204 +3 29067 29068 29204 +3 29205 29342 29341 +3 29204 29205 29341 +3 29479 29478 29341 +3 29342 29479 29341 +3 29617 29616 29478 +3 29479 29617 29478 +3 29750 29749 29616 +3 29617 29750 29616 +3 29879 29878 29749 +3 29750 29879 29749 +3 29879 30010 30009 +3 29878 29879 30009 +3 30142 30141 30009 +3 30010 30142 30009 +3 30275 30274 30141 +3 30142 30275 30141 +3 30275 30408 30407 +3 30274 30275 30407 +3 30408 30542 30541 +3 30407 30408 30541 +3 30542 30676 30675 +3 30541 30542 30675 +3 30676 30810 30809 +3 30675 30676 30809 +3 12603 28123 28124 +3 30810 19477 30809 +3 25292 25308 25287 +3 22139 25915 22138 +3 29249 29386 29248 +3 29923 29922 29793 +3 30190 30189 30057 +3 30058 30190 30057 +3 29803 29932 29802 +3 30328 30461 30327 +3 28254 28224 29541 +3 28132 28254 29541 +3 28251 28135 28224 +3 28254 28251 28224 +3 30195 30328 30194 +3 29670 29803 29669 +3 30456 30455 30322 +3 30323 30456 30322 +3 30199 2537 30198 +3 29386 29385 29248 +3 23217 22944 19977 +3 24766 25433 25576 +3 24427 22744 24514 +3 28941 28807 21985 +3 28471 28472 30212 +3 21329 21327 21417 +3 29383 29382 29245 +3 29246 29383 29245 +3 28481 30230 30222 +3 28480 28481 30222 +3 28691 28823 28822 +3 28725 2271 5474 +3 30309 30442 30441 +3 25408 25550 25407 +3 7411 7299 6838 +3 27176 28496 28495 +3 28706 28838 28705 +3 16769 22542 20317 +3 26804 26413 26409 +3 28455 28577 28454 +3 25050 25049 3084 +3 26626 26804 26409 +3 26716 23817 26715 +3 17668 30482 21550 +3 29251 29388 29250 +3 21330 11122 21511 +3 29249 29248 29111 +3 28712 28711 28582 +3 19409 19857 19358 +3 30456 30590 30455 +3 29670 29669 29531 +3 30063 30195 30062 +3 28251 18093 17719 +3 28135 28251 17719 +3 33711 33838 17417 +3 17417 26850 33711 +3 32620 32619 32510 +3 31601 31600 31513 +3 35068 35197 35067 +3 34165 34303 34164 +3 30931 30989 30930 +3 31050 31049 30988 +3 12298 14270 12384 +3 30988 30987 30929 +3 29560 18936 26735 +3 26968 29560 26735 +3 26405 30610 18936 +3 29560 26405 18936 +3 30620 30424 30610 +3 26405 30620 30610 +3 28077 30639 30424 +3 30620 28077 30424 +3 27639 28305 30639 +3 28077 27639 30639 +3 30768 19541 28305 +3 27639 30768 28305 +3 27608 22234 19541 +3 30768 27608 19541 +3 28855 28193 22234 +3 27608 28855 22234 +3 30210 29407 28193 +3 28855 30210 28193 +3 30210 17304 11122 +3 29407 30210 11122 +3 30020 22862 30152 +3 22543 29123 22445 +3 26202 25397 25915 +3 4784 27666 30479 +3 7296 7182 19354 +3 27985 28102 26915 +3 18093 30350 30484 +3 17719 18093 30484 +3 26831 26720 26835 +3 26394 26462 26461 +3 30827 30826 23266 +3 26462 26558 26557 +3 26461 26462 26557 +3 26558 26663 26662 +3 26557 26558 26662 +3 26663 26775 26774 +3 26662 26663 26774 +3 26890 26889 26774 +3 26775 26890 26774 +3 26890 27008 27007 +3 26889 26890 27007 +3 27125 27124 27007 +3 27008 27125 27007 +3 27244 27243 27124 +3 27125 27244 27124 +3 27362 27361 27243 +3 27244 27362 27243 +3 27481 27480 27361 +3 27362 27481 27361 +3 27599 27598 27480 +3 27481 27599 27480 +3 27716 27715 27598 +3 27599 27716 27598 +3 27831 27830 27715 +3 27716 27831 27715 +3 27947 27946 27830 +3 27831 27947 27830 +3 28064 28063 27946 +3 27947 28064 27946 +3 28181 28180 28063 +3 28064 28181 28063 +3 28298 28297 28180 +3 28181 28298 28180 +3 28418 28417 28297 +3 28298 28418 28297 +3 28540 28539 28417 +3 28418 28540 28417 +3 28669 28668 28539 +3 28540 28669 28539 +3 28801 28800 28668 +3 28669 28801 28668 +3 28934 28933 28800 +3 28801 28934 28800 +3 29069 29068 28933 +3 28934 29069 28933 +3 29206 29205 29068 +3 29069 29206 29068 +3 29343 29342 29205 +3 29206 29343 29205 +3 29343 29480 29479 +3 29342 29343 29479 +3 29480 29618 29617 +3 29479 29480 29617 +3 29751 29750 29617 +3 29618 29751 29617 +3 29880 29879 29750 +3 29751 29880 29750 +3 29880 30011 30010 +3 29879 29880 30010 +3 30143 30142 30010 +3 30011 30143 30010 +3 30276 30275 30142 +3 30143 30276 30142 +3 30276 30409 30408 +3 30275 30276 30408 +3 30409 30543 30542 +3 30408 30409 30542 +3 30543 30677 30676 +3 30542 30543 30676 +3 30677 30811 30810 +3 30676 30677 30810 +3 23736 24970 25103 +3 30810 30811 19477 +3 29796 29795 29662 +3 19789 19923 23179 +3 28977 29112 28976 +3 29523 29522 29385 +3 7174 19525 19409 +3 30724 30723 30589 +3 18691 30611 30559 +3 30063 30062 29931 +3 30350 29001 28010 +3 30484 30350 28010 +3 29001 17252 2536 +3 28010 29001 2536 +3 17252 19671 26908 +3 29932 29931 29802 +3 29532 29670 29531 +3 19525 7174 30723 +3 30590 30724 30589 +3 7006 11576 11396 +3 29112 29249 29111 +3 28347 29943 24112 +3 22197 24744 23778 +3 31902 32003 31901 +3 34291 34290 34152 +3 25576 30505 25577 +3 26788 24710 20758 +3 6847 21459 21368 +3 30431 30565 30430 +3 27166 27165 26360 +3 26364 27166 26360 +3 28823 28956 28955 +3 15329 8974 28020 +3 7084 6837 6407 +3 26914 26917 29136 +3 26392 26393 27170 +3 27170 27176 28495 +3 28706 28705 28576 +3 28577 28706 28576 +3 7077 7076 6979 +3 26413 27200 27199 +3 29525 29663 29524 +3 29114 29113 28978 +3 30690 6659 30691 +3 29255 29392 29254 +3 28676 28677 30367 +3 30419 10727 19232 +3 2402 19453 19358 +3 19453 7414 16766 +3 26944 29686 453 +3 19453 19452 19358 +3 2536 17252 26908 +3 21947 21946 19354 +3 19671 19130 21372 +3 26908 19671 21372 +3 20043 20123 20042 +3 17507 20045 17418 +3 34154 34153 34017 +3 35071 35070 34941 +3 30989 31050 30988 +3 31050 31112 31111 +3 30931 30930 30876 +3 30877 30931 30876 +3 12397 8325 12311 +3 33223 33328 33222 +3 17268 29560 26968 +3 27376 17268 26968 +3 27610 26405 29560 +3 17268 27610 29560 +3 29276 30620 26405 +3 27610 29276 26405 +3 26419 28077 30620 +3 29276 26419 30620 +3 19869 27639 28077 +3 26419 19869 28077 +3 30080 30768 27639 +3 19869 30080 27639 +3 27174 27608 30768 +3 30080 27174 30768 +3 2945 28855 27608 +3 27174 2945 27608 +3 30343 30210 28855 +3 2945 30343 28855 +3 25321 26401 25342 +3 30210 30343 17304 +3 32097 32096 31996 +3 27505 24169 20677 +3 19525 19857 19409 +3 24220 24219 25437 +3 2954 29557 17266 +3 29395 29532 29394 +3 21545 21544 28716 +3 21372 19130 6845 +3 24006 24067 24066 +3 16151 27666 4012 +3 26395 26463 26462 +3 26394 26395 26462 +3 26463 26559 26558 +3 26462 26463 26558 +3 26559 26664 26663 +3 26558 26559 26663 +3 26664 26776 26775 +3 26663 26664 26775 +3 26891 26890 26775 +3 26776 26891 26775 +3 27009 27008 26890 +3 26891 27009 26890 +3 27126 27125 27008 +3 27009 27126 27008 +3 27245 27244 27125 +3 27126 27245 27125 +3 27363 27362 27244 +3 27245 27363 27244 +3 27482 27481 27362 +3 27363 27482 27362 +3 27600 27599 27481 +3 27482 27600 27481 +3 27717 27716 27599 +3 27600 27717 27599 +3 27832 27831 27716 +3 27717 27832 27716 +3 27948 27947 27831 +3 27832 27948 27831 +3 28065 28064 27947 +3 27948 28065 27947 +3 28182 28181 28064 +3 28065 28182 28064 +3 28299 28298 28181 +3 28182 28299 28181 +3 28419 28418 28298 +3 28299 28419 28298 +3 28541 28540 28418 +3 28419 28541 28418 +3 28670 28669 28540 +3 28541 28670 28540 +3 28802 28801 28669 +3 28670 28802 28669 +3 28935 28934 28801 +3 28802 28935 28801 +3 29070 29069 28934 +3 28935 29070 28934 +3 29070 29207 29206 +3 29069 29070 29206 +3 29207 29344 29343 +3 29206 29207 29343 +3 29344 29481 29480 +3 29343 29344 29480 +3 29481 29619 29618 +3 29480 29481 29618 +3 29619 29752 29751 +3 29618 29619 29751 +3 29752 29881 29880 +3 29751 29752 29880 +3 29881 30012 30011 +3 29880 29881 30011 +3 30012 30144 30143 +3 30011 30012 30143 +3 30144 30277 30276 +3 30143 30144 30276 +3 30277 30410 30409 +3 30276 30277 30409 +3 30410 30544 30543 +3 30409 30410 30543 +3 30544 30678 30677 +3 30543 30544 30677 +3 30678 30812 30811 +3 30677 30678 30811 +3 24219 24218 23934 +3 17324 17323 32921 +3 28844 28977 28843 +3 30209 28361 26592 +3 8153 11389 19198 +3 29112 29111 28976 +3 26944 29816 29563 +3 19857 2402 19358 +3 27203 11936 11937 +3 2954 17266 19026 +3 28716 21455 21545 +3 21511 17304 21883 +3 12108 26451 26382 +3 30583 30717 30582 +3 30717 30716 30582 +3 19198 22053 27383 +3 29803 29802 29669 +3 11925 12009 25922 +3 30724 19525 30723 +3 18906 19103 35568 +3 12091 12173 27548 +3 29943 2809 25397 +3 35122 18194 34337 +3 34995 20090 12808 +3 22447 14969 24402 +3 34153 34291 34152 +3 20746 27372 26252 +3 28683 28677 27315 +3 20181 20180 26937 +3 28481 28480 27165 +3 17261 28338 28130 +3 31514 31513 31441 +3 27166 28481 27165 +3 28677 28683 30419 +3 21272 21362 28455 +3 26387 26393 26392 +3 27621 27738 27737 +3 21153 30343 29957 +3 28838 28837 28705 +3 17475 26804 26626 +3 6979 17475 26626 +3 27782 29273 29272 +3 6877 24339 29956 +3 29393 29392 29255 +3 28582 28581 33699 +3 27315 28677 27314 +3 28677 30419 30367 +3 21941 21942 19630 +3 30344 19559 19560 +3 17255 35611 35498 +3 19736 19630 20240 +3 21294 17255 21748 +3 29290 28810 28189 +3 17340 33973 26967 +3 32906 32905 32793 +3 33973 17340 17418 +3 31602 31697 31601 +3 32202 32303 32201 +3 31304 31303 31238 +3 31049 31050 31111 +3 33903 33904 34038 +3 24906 20441 20356 +3 20569 21589 3487 +3 27376 29145 26520 +3 30085 17268 27376 +3 26520 30085 27376 +3 27727 27610 17268 +3 30085 27727 17268 +3 26410 29276 27610 +3 27727 26410 27610 +3 26689 26419 29276 +3 26410 26689 29276 +3 27522 19869 26419 +3 26689 27522 26419 +3 27293 30080 19869 +3 27522 27293 19869 +3 45 27174 30080 +3 27293 45 30080 +3 29957 2945 27174 +3 45 29957 27174 +3 32755 32756 32867 +3 2945 29957 30343 +3 28561 28562 28690 +3 22632 22631 28680 +3 26914 29136 29135 +3 11103 26583 28622 +3 30335 30468 30334 +3 19452 19453 16766 +3 21294 21748 28943 +3 27529 453 27259 +3 22326 19683 19467 +3 2670 24942 21848 +3 11406 19233 451 +3 26396 26464 26463 +3 2546 17984 23829 +3 26464 26560 26559 +3 26463 26464 26559 +3 26560 26665 26664 +3 26559 26560 26664 +3 26665 26777 26776 +3 26664 26665 26776 +3 26892 26891 26776 +3 26777 26892 26776 +3 27010 27009 26891 +3 26892 27010 26891 +3 27127 27126 27009 +3 27010 27127 27009 +3 27246 27245 27126 +3 27127 27246 27126 +3 27364 27363 27245 +3 27246 27364 27245 +3 27483 27482 27363 +3 27364 27483 27363 +3 27601 27600 27482 +3 27483 27601 27482 +3 27718 27717 27600 +3 27601 27718 27600 +3 27833 27832 27717 +3 27718 27833 27717 +3 27949 27948 27832 +3 27833 27949 27832 +3 28066 28065 27948 +3 27949 28066 27948 +3 28183 28182 28065 +3 28066 28183 28065 +3 28300 28299 28182 +3 28183 28300 28182 +3 28420 28419 28299 +3 28300 28420 28299 +3 28542 28541 28419 +3 28420 28542 28419 +3 28671 28670 28541 +3 28542 28671 28541 +3 28803 28802 28670 +3 28671 28803 28670 +3 28936 28935 28802 +3 28803 28936 28802 +3 29071 29070 28935 +3 28936 29071 28935 +3 29208 29207 29070 +3 29071 29208 29070 +3 29345 29344 29207 +3 29208 29345 29207 +3 29482 29481 29344 +3 29345 29482 29344 +3 29482 29620 29619 +3 29481 29482 29619 +3 29620 29753 29752 +3 29619 29620 29752 +3 29753 29882 29881 +3 29752 29753 29881 +3 29882 30013 30012 +3 29881 29882 30012 +3 30013 30145 30144 +3 30012 30013 30144 +3 30278 30277 30144 +3 30145 30278 30144 +3 30278 30411 30410 +3 30277 30278 30410 +3 30411 30545 30544 +3 30410 30411 30544 +3 30545 30679 30678 +3 30544 30545 30678 +3 30679 30813 30812 +3 30678 30679 30812 +3 20908 20991 20990 +3 19103 18906 20673 +3 28977 28976 28843 +3 19897 22043 17912 +3 7414 11389 8153 +3 22053 27503 27383 +3 30202 30335 30201 +3 19791 19231 30738 +3 19655 22326 19467 +3 19467 19683 12543 +3 19683 4666 12543 +3 32506 32615 32505 +3 30070 30202 30069 +3 30335 30334 30201 +3 25346 28348 28347 +3 27503 26476 26475 +3 24826 24887 24825 +3 26785 24220 24464 +3 24559 30672 25366 +3 23278 23374 23277 +3 25397 22137 22138 +3 29943 25397 24112 +3 2809 17254 19807 +3 22137 2809 19807 +3 17254 26829 26718 +3 19807 17254 26718 +3 20759 27621 27502 +3 21271 28455 21270 +3 21751 17261 17314 +3 17314 17261 28130 +3 28020 26497 26494 +3 19903 30822 26965 +3 30176 30309 30308 +3 30441 30442 30575 +3 26386 26387 26392 +3 26393 27176 27170 +3 27612 27752 21473 +3 27902 27893 2750 +3 28593 30333 30331 +3 28554 28593 30331 +3 18691 30559 26504 +3 26713 26825 26824 +3 28844 28843 28711 +3 28712 28844 28711 +3 27383 27503 26475 +3 27315 27314 26475 +3 24566 25779 24565 +3 30717 7404 30716 +3 32615 32614 32505 +3 29657 29790 29656 +3 17417 20041 17506 +3 17418 20044 20043 +3 33883 33882 33748 +3 33404 33517 33403 +3 31112 31175 31174 +3 31111 31112 31174 +3 31175 31239 31238 +3 31174 31175 31238 +3 32249 32248 32147 +3 31534 31621 31620 +3 26851 26520 29282 +3 29556 26851 29282 +3 19676 30085 26520 +3 26851 19676 26520 +3 28192 27727 30085 +3 19676 28192 30085 +3 27260 26410 27727 +3 28192 27260 27727 +3 26801 26689 26410 +3 27260 26801 26410 +3 30742 27522 26689 +3 26801 30742 26689 +3 28718 27293 27522 +3 30742 28718 27522 +3 29424 45 27293 +3 28718 29424 27293 +3 19425 29957 45 +3 29424 19425 45 +3 30902 25940 21447 +3 30334 30468 22689 +3 17573 7080 27868 +3 28822 28823 28955 +3 30367 30419 19232 +3 26901 26914 29135 +3 33883 34018 33882 +3 25931 23809 25429 +3 27853 27854 27969 +3 17256 17314 28129 +3 5832 16218 15231 +3 25350 16311 2679 +3 26397 26465 26464 +3 26396 26397 26464 +3 26465 26561 26560 +3 26464 26465 26560 +3 26561 26666 26665 +3 26560 26561 26665 +3 26666 26778 26777 +3 26665 26666 26777 +3 26893 26892 26777 +3 26778 26893 26777 +3 27011 27010 26892 +3 26893 27011 26892 +3 27011 27128 27127 +3 27010 27011 27127 +3 27247 27246 27127 +3 27128 27247 27127 +3 27365 27364 27246 +3 27247 27365 27246 +3 27484 27483 27364 +3 27365 27484 27364 +3 27602 27601 27483 +3 27484 27602 27483 +3 27719 27718 27601 +3 27602 27719 27601 +3 27834 27833 27718 +3 27719 27834 27718 +3 27950 27949 27833 +3 27834 27950 27833 +3 28067 28066 27949 +3 27950 28067 27949 +3 28184 28183 28066 +3 28067 28184 28066 +3 28301 28300 28183 +3 28184 28301 28183 +3 28421 28420 28300 +3 28301 28421 28300 +3 28543 28542 28420 +3 28421 28543 28420 +3 28672 28671 28542 +3 28543 28672 28542 +3 28804 28803 28671 +3 28672 28804 28671 +3 28937 28936 28803 +3 28804 28937 28803 +3 29072 29071 28936 +3 28937 29072 28936 +3 29209 29208 29071 +3 29072 29209 29071 +3 29346 29345 29208 +3 29209 29346 29208 +3 29483 29482 29345 +3 29346 29483 29345 +3 29621 29620 29482 +3 29483 29621 29482 +3 29754 29753 29620 +3 29621 29754 29620 +3 29883 29882 29753 +3 29754 29883 29753 +3 30014 30013 29882 +3 29883 30014 29882 +3 30146 30145 30013 +3 30014 30146 30013 +3 30146 30279 30278 +3 30145 30146 30278 +3 30279 30412 30411 +3 30278 30279 30411 +3 30412 30546 30545 +3 30411 30412 30545 +3 30546 30680 30679 +3 30545 30546 30679 +3 30680 30814 30813 +3 30679 30680 30813 +3 22775 22874 22873 +3 29423 15345 6132 +3 34355 3364 3363 +3 30833 30832 30698 +3 16766 7414 8153 +3 11389 22053 19198 +3 17819 17321 22744 +3 26673 26095 25089 +3 29790 29789 29656 +3 30622 2954 19040 +3 20345 20259 27037 +3 19003 13466 19577 +3 29668 29801 29667 +3 566 21563 19638 +3 25351 2543 2816 +3 29148 28217 29398 +3 28350 28348 25183 +3 12039 35936 35814 +3 29946 29943 28347 +3 28348 29946 28347 +3 2671 2809 29943 +3 29946 2671 29943 +3 19017 17254 2809 +3 2671 19017 2809 +3 35115 35116 33704 +3 17254 19017 26829 +3 19198 27383 27298 +3 26429 26525 11545 +3 26364 26360 26947 +3 21838 21751 17314 +3 27435 28850 28816 +3 26965 27082 28726 +3 30044 30176 30175 +3 30175 30176 30308 +3 28495 28496 30286 +3 30287 12510 13991 +3 17888 23925 23807 +3 27752 30420 21473 +3 30333 19561 19565 +3 30331 30333 19565 +3 29825 24423 24339 +3 26706 26818 26705 +3 24530 26816 24608 +3 24608 26705 26818 +3 26476 27315 26475 +3 28677 28676 27314 +3 19566 15407 28680 +3 30202 30201 30069 +3 28602 30347 30344 +3 31504 31503 31431 +3 20044 17418 20045 +3 33973 17418 20043 +3 31071 31070 31009 +3 33293 33402 33292 +3 31371 31370 31303 +3 31239 31304 31238 +3 33770 33904 33769 +3 34039 34175 34174 +3 11381 25258 28479 +3 31533 31534 31620 +3 28815 26851 29556 +3 6861 28815 29556 +3 10600 19676 26851 +3 28815 10600 26851 +3 28309 28192 19676 +3 10600 28309 19676 +3 29896 27260 28192 +3 28309 29896 28192 +3 26916 26801 27260 +3 29896 26916 27260 +3 27523 30742 26801 +3 26916 27523 26801 +3 27175 28718 30742 +3 27523 27175 30742 +3 29263 29424 28718 +3 27175 29263 28718 +3 29263 27725 19425 +3 29424 29263 19425 +3 20043 17417 33838 +3 34561 34689 34560 +3 28456 28432 27085 +3 28440 28562 28561 +3 10727 26914 26901 +3 19232 10727 26901 +3 19786 19785 19459 +3 15214 27902 2750 +3 30727 6856 6151 +3 30459 30593 30458 +3 26356 26398 26397 +3 23168 23071 23169 +3 26398 26466 26465 +3 26397 26398 26465 +3 26466 26562 26561 +3 26465 26466 26561 +3 26562 26667 26666 +3 26561 26562 26666 +3 26667 26779 26778 +3 26666 26667 26778 +3 26894 26893 26778 +3 26779 26894 26778 +3 27012 27011 26893 +3 26894 27012 26893 +3 27129 27128 27011 +3 27012 27129 27011 +3 27248 27247 27128 +3 27129 27248 27128 +3 27366 27365 27247 +3 27248 27366 27247 +3 27485 27484 27365 +3 27366 27485 27365 +3 27603 27602 27484 +3 27485 27603 27484 +3 27720 27719 27602 +3 27603 27720 27602 +3 27835 27834 27719 +3 27720 27835 27719 +3 27951 27950 27834 +3 27835 27951 27834 +3 28068 28067 27950 +3 27951 28068 27950 +3 28185 28184 28067 +3 28068 28185 28067 +3 28302 28301 28184 +3 28185 28302 28184 +3 28422 28421 28301 +3 28302 28422 28301 +3 28544 28543 28421 +3 28422 28544 28421 +3 28673 28672 28543 +3 28544 28673 28543 +3 28805 28804 28672 +3 28673 28805 28672 +3 28938 28937 28804 +3 28805 28938 28804 +3 29073 29072 28937 +3 28938 29073 28937 +3 29210 29209 29072 +3 29073 29210 29072 +3 29347 29346 29209 +3 29210 29347 29209 +3 29484 29483 29346 +3 29347 29484 29346 +3 29622 29621 29483 +3 29484 29622 29483 +3 29755 29754 29621 +3 29622 29755 29621 +3 29884 29883 29754 +3 29755 29884 29754 +3 30015 30014 29883 +3 29884 30015 29883 +3 30147 30146 30014 +3 30015 30147 30014 +3 30147 30280 30279 +3 30146 30147 30279 +3 30280 30413 30412 +3 30279 30280 30412 +3 30413 30547 30546 +3 30412 30413 30546 +3 30547 30681 30680 +3 30546 30547 30680 +3 30681 30815 30814 +3 30680 30681 30814 +3 22973 30426 23071 +3 832 831 712 +3 25116 20758 24710 +3 28320 28440 28439 +3 29136 29148 11405 +3 29135 29136 11405 +3 29935 29934 29805 +3 26921 20260 26806 +3 29367 29504 29503 +3 30727 30726 30592 +3 26907 27267 30822 +3 22010 2944 25179 +3 30733 30732 30598 +3 26594 6980 6537 +3 28334 16770 29423 +3 29015 6903 17257 +3 31607 31606 31519 +3 24276 30632 24416 +3 29960 29946 28348 +3 28350 29960 28348 +3 19911 2671 29946 +3 29960 19911 29946 +3 18930 19017 2671 +3 19911 18930 2671 +3 22421 22420 33704 +3 33704 22420 35115 +3 19677 24855 19570 +3 14427 21238 14454 +3 7085 24212 26947 +3 24212 26364 26947 +3 16596 19942 21563 +3 19687 19789 21563 +3 29913 30044 30043 +3 30043 30044 30175 +3 30286 30287 13991 +3 12510 26501 26500 +3 18189 27612 29006 +3 34817 34946 34816 +3 21470 7076 7077 +3 7297 21470 7077 +3 28858 28592 28364 +3 29012 28858 28364 +3 26600 26601 26705 +3 30347 21658 19559 +3 11405 29148 29398 +3 28217 18509 29561 +3 27761 26478 26477 +3 29801 29800 29667 +3 27399 29154 19591 +3 29267 30349 29129 +3 33973 20043 33838 +3 17417 20042 20041 +3 31466 31538 31465 +3 32210 32209 32109 +3 31438 31437 31370 +3 31304 31371 31303 +3 34313 34312 34174 +3 35221 11704 26799 +3 11363 35576 11364 +3 27756 6861 29556 +3 26625 28815 6861 +3 19679 26625 6861 +3 21499 10600 28815 +3 26625 21499 28815 +3 28429 28309 10600 +3 21499 28429 10600 +3 30158 29896 28309 +3 28429 30158 28309 +3 30640 26916 29896 +3 30158 30640 29896 +3 29690 27523 26916 +3 30640 29690 26916 +3 28851 27175 27523 +3 29690 28851 27523 +3 28851 29400 29263 +3 27175 28851 29263 +3 29400 26499 27725 +3 29263 29400 27725 +3 35060 35189 35059 +3 25922 27313 27194 +3 26502 1960 19466 +3 22107 22108 29674 +3 19236 28880 29538 +3 29398 28217 29561 +3 30500 7289 19138 +3 6896 12690 27648 +3 26902 27399 19591 +3 26357 26399 26398 +3 26356 26357 26398 +3 26399 26467 26466 +3 26398 26399 26466 +3 26467 26563 26562 +3 26466 26467 26562 +3 26563 26668 26667 +3 26562 26563 26667 +3 26668 26780 26779 +3 26667 26668 26779 +3 26895 26894 26779 +3 26780 26895 26779 +3 27013 27012 26894 +3 26895 27013 26894 +3 27013 27130 27129 +3 27012 27013 27129 +3 27249 27248 27129 +3 27130 27249 27129 +3 27367 27366 27248 +3 27249 27367 27248 +3 27486 27485 27366 +3 27367 27486 27366 +3 27604 27603 27485 +3 27486 27604 27485 +3 27721 27720 27603 +3 27604 27721 27603 +3 27836 27835 27720 +3 27721 27836 27720 +3 27952 27951 27835 +3 27836 27952 27835 +3 28069 28068 27951 +3 27952 28069 27951 +3 28186 28185 28068 +3 28069 28186 28068 +3 28303 28302 28185 +3 28186 28303 28185 +3 28423 28422 28302 +3 28303 28423 28302 +3 28545 28544 28422 +3 28423 28545 28422 +3 28674 28673 28544 +3 28545 28674 28544 +3 28806 28805 28673 +3 28674 28806 28673 +3 28939 28938 28805 +3 28806 28939 28805 +3 29074 29073 28938 +3 28939 29074 28938 +3 29211 29210 29073 +3 29074 29211 29073 +3 29348 29347 29210 +3 29211 29348 29210 +3 29485 29484 29347 +3 29348 29485 29347 +3 29623 29622 29484 +3 29485 29623 29484 +3 29756 29755 29622 +3 29623 29756 29622 +3 29885 29884 29755 +3 29756 29885 29755 +3 30016 30015 29884 +3 29885 30016 29884 +3 30148 30147 30015 +3 30016 30148 30015 +3 30148 30281 30280 +3 30147 30148 30280 +3 30281 30414 30413 +3 30280 30281 30413 +3 30414 30548 30547 +3 30413 30414 30547 +3 30548 30682 30681 +3 30547 30548 30681 +3 30682 30816 30815 +3 30681 30682 30815 +3 24517 22297 23818 +3 19639 12802 19769 +3 26601 26706 26705 +3 27436 15877 28850 +3 18509 29015 28353 +3 29561 18509 28353 +3 12690 27761 27648 +3 22883 30733 30598 +3 28596 28467 19196 +3 29696 30500 19138 +3 19363 19799 28596 +3 28467 27667 19196 +3 19681 19799 17939 +3 14041 14040 13942 +3 6152 6151 19655 +3 24169 27504 20759 +3 27866 19659 27643 +3 13112 35604 35565 +3 35565 11800 13112 +3 28351 29963 29960 +3 28350 28351 29960 +3 29963 18178 19911 +3 29960 29963 19911 +3 7334 7223 7224 +3 7336 398 7224 +3 2144 19050 19051 +3 24885 24759 24782 +3 30455 30589 30454 +3 27161 24481 24765 +3 7190 7085 6837 +3 6837 7085 26947 +3 26502 28137 1960 +3 6282 19576 19903 +3 29784 29913 29912 +3 29912 29913 30043 +3 13991 12510 26500 +3 26501 28460 28459 +3 28215 21182 28333 +3 31297 31296 31231 +3 19248 21470 7297 +3 7076 17475 6979 +3 2681 24429 2817 +3 28858 28998 28592 +3 26149 26148 26006 +3 25657 30599 21066 +3 28353 29015 17257 +3 6903 19659 27866 +3 12690 6896 6661 +3 6151 22326 19655 +3 19799 28467 28596 +3 19200 11574 17939 +3 20042 17417 20043 +3 33197 33302 33196 +3 18085 19218 950 +3 31371 31438 31370 +3 33524 33643 33523 +3 31510 31509 31437 +3 31438 31510 31437 +3 30929 30928 30874 +3 31133 31196 31195 +3 28853 19679 27642 +3 27642 19679 29543 +3 26736 26625 19679 +3 28853 26736 19679 +3 30218 21499 26625 +3 26736 30218 26625 +3 28551 28429 21499 +3 30218 28551 21499 +3 29567 30158 28429 +3 28551 29567 28429 +3 26906 30640 30158 +3 29567 26906 30158 +3 27494 29690 30640 +3 26906 27494 30640 +3 27059 28851 29690 +3 27494 27059 29690 +3 27059 29537 29400 +3 28851 27059 29400 +3 29537 29830 26499 +3 29400 29537 26499 +3 10380 19526 34522 +3 19789 23277 21474 +3 17575 26502 19339 +3 30722 7070 6883 +3 4666 18600 11648 +3 27529 28880 26944 +3 19799 19363 17939 +3 23710 25571 30233 +3 8230 13391 26586 +3 33931 34878 33934 +3 26400 26468 26467 +3 26399 26400 26467 +3 26468 26564 26563 +3 26467 26468 26563 +3 26564 26669 26668 +3 26563 26564 26668 +3 26669 26781 26780 +3 26668 26669 26780 +3 26781 26896 26895 +3 26780 26781 26895 +3 26896 27014 27013 +3 26895 26896 27013 +3 27014 27131 27130 +3 27013 27014 27130 +3 27131 27250 27249 +3 27130 27131 27249 +3 27368 27367 27249 +3 27250 27368 27249 +3 27487 27486 27367 +3 27368 27487 27367 +3 27605 27604 27486 +3 27487 27605 27486 +3 27722 27721 27604 +3 27605 27722 27604 +3 27837 27836 27721 +3 27722 27837 27721 +3 21474 23374 23471 +3 21516 28186 21426 +3 23179 23277 19789 +3 30234 30235 23708 +3 26697 25213 26698 +3 21701 28546 28423 +3 21003 21002 20919 +3 20839 20757 27498 +3 20840 27615 27614 +3 27035 27151 20428 +3 28546 28545 28423 +3 25241 30815 30816 +3 28675 28674 28545 +3 28546 28675 28545 +3 28807 28806 28674 +3 28675 28807 28674 +3 28940 28939 28806 +3 28807 28940 28806 +3 29075 29074 28939 +3 28940 29075 28939 +3 29212 29211 29074 +3 29075 29212 29074 +3 29349 29348 29211 +3 29212 29349 29211 +3 29486 29485 29348 +3 29349 29486 29348 +3 29624 29623 29485 +3 29486 29624 29485 +3 29757 29756 29623 +3 29624 29757 29623 +3 29886 29885 29756 +3 29757 29886 29756 +3 30017 30016 29885 +3 29886 30017 29885 +3 30149 30148 30016 +3 30017 30149 30016 +3 30282 30281 30148 +3 30149 30282 30148 +3 30282 30415 30414 +3 30281 30282 30414 +3 30415 30549 30548 +3 30414 30415 30548 +3 30549 30683 30682 +3 30548 30549 30682 +3 30683 30817 30816 +3 30682 30683 30816 +3 17304 21155 21883 +3 13618 22143 22142 +3 28979 29114 28978 +3 29631 28882 29131 +3 17257 6903 27866 +3 19659 19030 27643 +3 12543 4666 11648 +3 7186 12690 6661 +3 29958 11574 19200 +3 27289 29688 19128 +3 27549 29958 22235 +3 27508 27626 27507 +3 30192 30191 30059 +3 30060 30192 30059 +3 19030 6537 17862 +3 35210 35209 35080 +3 26430 26363 26431 +3 23782 28498 28626 +3 11516 11582 32249 +3 32147 11516 32249 +3 28352 29964 29963 +3 28351 28352 29963 +3 29964 18398 18178 +3 29963 29964 18178 +3 35395 35497 35689 +3 7224 7225 7336 +3 25779 24566 25793 +3 26628 26739 11612 +3 7174 7070 30722 +3 6903 19138 19659 +3 6788 7190 7298 +3 7298 7190 6837 +3 28456 30199 28432 +3 19923 19739 6854 +3 3088 19783 19784 +3 29783 29784 29912 +3 25674 24531 23517 +3 19454 7183 19455 +3 33205 33310 33204 +3 20200 23942 21669 +3 21944 19248 21945 +3 19355 19248 7297 +3 20200 21669 20655 +3 6528 11450 24274 +3 28975 28974 28841 +3 23055 20580 23465 +3 17575 17368 17862 +3 6537 17575 17862 +3 30060 30059 29928 +3 7186 6661 11648 +3 30200 30199 28456 +3 26395 21630 26396 +3 18084 18085 950 +3 30468 22691 22789 +3 35040 17280 17279 +3 33904 33903 33769 +3 31510 31597 31509 +3 31597 31596 31509 +3 31901 32002 31900 +3 32102 32202 32101 +3 31048 31047 30986 +3 35092 35221 35091 +3 28741 28853 29544 +3 27642 29544 28853 +3 17263 26736 28853 +3 28741 17263 28853 +3 29003 30218 26736 +3 17263 29003 26736 +3 5737 28551 30218 +3 29003 5737 30218 +3 19245 29567 28551 +3 5737 19245 28551 +3 26489 26906 29567 +3 19245 26489 29567 +3 27524 27494 26906 +3 26489 27524 26906 +3 28852 27059 27494 +3 27524 28852 27494 +3 28852 30637 29537 +3 27059 28852 29537 +3 30637 27637 29830 +3 29537 30637 29830 +3 25013 25014 21848 +3 21068 21153 21239 +3 30733 6854 30732 +3 17368 17575 19339 +3 27672 12440 27786 +3 29800 29799 29666 +3 22235 29958 19200 +3 19042 33934 34878 +3 35834 35707 35620 +3 26401 26469 26468 +3 26400 26401 26468 +3 26469 26565 26564 +3 26468 26469 26564 +3 26565 26670 26669 +3 26564 26565 26669 +3 26670 26782 26781 +3 26669 26670 26781 +3 26897 26896 26781 +3 26782 26897 26781 +3 27015 27014 26896 +3 26897 27015 26896 +3 27015 27132 27131 +3 27014 27015 27131 +3 27132 27251 27250 +3 27131 27132 27250 +3 27369 27368 27250 +3 27251 27369 27250 +3 27488 27487 27368 +3 27369 27488 27368 +3 27606 27605 27487 +3 27488 27606 27487 +3 27722 27605 21074 +3 22686 30464 30330 +3 24761 19250 24229 +3 15458 15329 15316 +3 27952 27836 21247 +3 20002 19970 19971 +3 27853 27969 27968 +3 14175 13194 35680 +3 27620 27621 27737 +3 19963 25503 30959 +3 30448 30582 30447 +3 21891 21890 21796 +3 14970 16766 7184 +3 29431 6280 17573 +3 23841 23842 29818 +3 29220 27048 29293 +3 20345 27035 20344 +3 11483 17315 11836 +3 13426 19136 12395 +3 20643 20559 20561 +3 28941 28940 28807 +3 32630 32744 32629 +3 29076 29075 28940 +3 28941 29076 28940 +3 29213 29212 29075 +3 29076 29213 29075 +3 29350 29349 29212 +3 29213 29350 29212 +3 29487 29486 29349 +3 29350 29487 29349 +3 29625 29624 29486 +3 29487 29625 29486 +3 29625 29758 29757 +3 29624 29625 29757 +3 29887 29886 29757 +3 29758 29887 29757 +3 30018 30017 29886 +3 29887 30018 29886 +3 30150 30149 30017 +3 30018 30150 30017 +3 30283 30282 30149 +3 30150 30283 30149 +3 30283 30416 30415 +3 30282 30283 30415 +3 30416 30550 30549 +3 30415 30416 30549 +3 30550 30684 30683 +3 30549 30550 30683 +3 30684 30818 30817 +3 30683 30684 30817 +3 22481 29768 22580 +3 25240 25932 25443 +3 22190 22286 22285 +3 34566 34694 34565 +3 35404 30635 19678 +3 19339 26502 19466 +3 11574 19681 17939 +3 6854 6855 30732 +3 26394 26461 23813 +3 29830 23847 21508 +3 2813 19899 2410 +3 1652 1769 2103 +3 19739 13466 6855 +3 34843 34842 34714 +3 27643 19030 17862 +3 30777 25722 25242 +3 30464 22785 22883 +3 27045 28355 28352 +3 11516 32147 32049 +3 28355 30021 29964 +3 28352 28355 29964 +3 30021 19377 18398 +3 29964 30021 18398 +3 19377 28021 18932 +3 18398 19377 18932 +3 23633 24713 30490 +3 25573 25574 23599 +3 5088 17256 28072 +3 27867 26904 19030 +3 5608 7298 5609 +3 5608 6788 7298 +3 29640 29641 29773 +3 29658 29657 29519 +3 7407 3088 22327 +3 22327 3088 19784 +3 27397 27516 27515 +3 21493 22949 29687 +3 28333 28332 28215 +3 24210 24150 24151 +3 30714 6860 30713 +3 18712 2409 17270 +3 28344 26420 29124 +3 14233 9402 14232 +3 6659 19040 30691 +3 29388 29387 29250 +3 1960 29948 30489 +3 19466 1960 30489 +3 29673 29806 29672 +3 29929 30060 29928 +3 27313 25922 12009 +3 19595 6782 15897 +3 22138 21535 22139 +3 2104 1652 2103 +3 31538 31625 31537 +3 34441 34440 34302 +3 31792 31791 31691 +3 31692 31691 31596 +3 31071 31133 31070 +3 32025 32024 31923 +3 35362 35864 35782 +3 32667 32788 32666 +3 33602 33603 33729 +3 14083 30023 13698 +3 26521 17263 28741 +3 28874 26521 28741 +3 11452 29003 17263 +3 26521 11452 17263 +3 19140 5737 29003 +3 11452 19140 29003 +3 28854 19245 5737 +3 19140 28854 5737 +3 26585 26489 19245 +3 28854 26585 19245 +3 27758 27524 26489 +3 26585 27758 26489 +3 27758 28611 28852 +3 27524 27758 28852 +3 28611 29411 30637 +3 28852 28611 30637 +3 21065 13852 23847 +3 30637 29411 27637 +3 29157 28469 30340 +3 20394 20393 17705 +3 29806 29805 29672 +3 29667 29800 29666 +3 26360 26355 6407 +3 26714 26715 20019 +3 22194 30496 21913 +3 20095 26937 26823 +3 24764 21361 15320 +3 23597 26670 26565 +3 26696 25213 26697 +3 26671 25223 26672 +3 24647 25361 24646 +3 33692 6538 33820 +3 26671 26783 26782 +3 26670 26671 26782 +3 26898 26897 26782 +3 26783 26898 26782 +3 27016 27015 26897 +3 26898 27016 26897 +3 27016 27133 27132 +3 27015 27016 27132 +3 27133 27252 27251 +3 27132 27133 27251 +3 27252 27370 27369 +3 27251 27252 27369 +3 27489 27488 27369 +3 27370 27489 27369 +3 23265 30825 23264 +3 28625 16758 24144 +3 26720 26831 26719 +3 27489 20990 20989 +3 35069 35070 35198 +3 35446 35704 35728 +3 29431 17573 27780 +3 5198 2099 19735 +3 6899 19558 28678 +3 28548 6899 28678 +3 29079 30487 26686 +3 28944 29126 19558 +3 34551 34679 34550 +3 30876 30930 30875 +3 33219 33218 33113 +3 34810 34809 34681 +3 19700 29431 27780 +3 22844 30024 6845 +3 29675 2547 24346 +3 25503 19963 19994 +3 35896 35619 6862 +3 20240 19630 6927 +3 22176 29214 29076 +3 24423 24510 24422 +3 21336 27952 21337 +3 30925 30924 30870 +3 29214 29213 29076 +3 950 20643 18084 +3 29351 29350 29213 +3 29214 29351 29213 +3 29488 29487 29350 +3 29351 29488 29350 +3 29626 29625 29487 +3 29488 29626 29487 +3 29759 29758 29625 +3 29626 29759 29625 +3 29888 29887 29758 +3 29759 29888 29758 +3 30019 30018 29887 +3 29888 30019 29887 +3 30151 30150 30018 +3 30019 30151 30018 +3 30284 30283 30150 +3 30151 30284 30150 +3 30284 30417 30416 +3 30283 30284 30416 +3 30417 30551 30550 +3 30416 30417 30550 +3 30551 30685 30684 +3 30550 30551 30684 +3 30685 30819 30818 +3 30684 30685 30818 +3 30819 18516 3624 +3 30818 30819 3624 +3 22382 22286 22383 +3 17668 24339 24255 +3 29806 29935 29805 +3 29529 29667 29528 +3 7302 7413 6847 +3 11576 6846 11396 +3 21693 19382 21062 +3 23829 26112 2546 +3 19674 15026 201 +3 26919 26584 28477 +3 6854 19739 6855 +3 27135 27018 23623 +3 30464 22883 30598 +3 19031 27046 27045 +3 17307 19031 27045 +3 27046 28356 28355 +3 27045 27046 28355 +3 28356 30071 30021 +3 30948 30947 30893 +3 12748 22134 22135 +3 33102 33207 33101 +3 33312 33311 33206 +3 33207 33312 33206 +3 33421 33420 33311 +3 33312 33421 33311 +3 33534 33533 33420 +3 33421 33534 33420 +3 33653 33652 33533 +3 33534 33653 33533 +3 33780 33779 33652 +3 33653 33780 33652 +3 33914 33913 33779 +3 33780 33914 33779 +3 34049 34048 33913 +3 33914 34049 33913 +3 34185 34184 34048 +3 34049 34185 34048 +3 34323 34322 34184 +3 34185 34323 34184 +3 34461 34460 34322 +3 34323 34461 34322 +3 34461 34598 34597 +3 34460 34461 34597 +3 32655 32776 32775 +3 25795 25793 24571 +3 34459 34596 34595 +3 32654 32655 32775 +3 32126 32125 32025 +3 32886 32994 32885 +3 32675 32796 32674 +3 31629 31724 31628 +3 32542 32655 32654 +3 33084 33189 33188 +3 33083 33084 33188 +3 7024 6925 6926 +3 35220 26799 35219 +3 35342 28949 35341 +3 31139 31202 31138 +3 21463 13105 17318 +3 34833 34962 34832 +3 3755 18174 5331 +3 33635 33634 33515 +3 35091 35090 34961 +3 32435 32542 32541 +3 33298 33299 33407 +3 33403 33516 33402 +3 34448 34585 34447 +3 31331 31398 31397 +3 32908 32907 32795 +3 32434 32435 32541 +3 32562 32675 32561 +3 32796 32795 32674 +3 32886 32885 32773 +3 31178 31242 31241 +3 33287 33286 33181 +3 34585 34713 34584 +3 34585 34584 34447 +3 32352 32351 32249 +3 32331 32435 32434 +3 31719 31718 31623 +3 921 802 803 +3 34709 34837 34708 +3 33089 33194 33088 +3 31603 31602 31515 +3 31266 31265 31201 +3 32977 33083 33082 +3 32868 32869 32976 +3 32644 32643 32534 +3 33102 33101 32995 +3 35087 35216 35086 +3 32316 32419 32315 +3 32535 32644 32534 +3 35095 35224 35223 +3 31624 31719 31623 +3 34841 34840 34712 +3 34310 34448 34309 +3 33521 33520 33407 +3 33299 33298 33193 +3 20643 950 20641 +3 33194 33299 33193 +3 34966 34965 34836 +3 34837 34966 34836 +3 34966 35095 34965 +3 35095 35094 34965 +3 31062 31124 31123 +3 34955 35084 34954 +3 34021 34157 34020 +3 33284 33283 33178 +3 34157 34295 34156 +3 34295 34294 34156 +3 34164 34163 34027 +3 34149 34287 34148 +3 31053 31115 31114 +3 31695 31795 31694 +3 35094 35095 35223 +3 16694 5193 1152 +3 33436 33437 33549 +3 920 801 802 +3 18128 18692 18924 +3 30213 19518 18317 +3 32869 32977 32976 +3 32015 32115 32014 +3 32453 32560 32452 +3 32756 32757 32868 +3 32115 32215 32114 +3 33300 33299 33194 +3 35213 35212 35083 +3 32524 32523 32418 +3 31513 31512 31440 +3 32859 32967 32858 +3 32758 32870 32869 +3 33084 33083 32977 +3 32228 32229 32330 +3 31307 31306 31241 +3 32996 32995 32887 +3 32751 32750 32636 +3 32967 32966 32858 +3 35074 35073 34944 +3 34432 34569 34431 +3 33436 33549 33548 +3 33287 33396 33286 +3 29811 21741 21740 +3 33435 33436 33548 +3 33326 33327 33435 +3 34557 34685 34556 +3 32641 32642 32755 +3 32673 32672 32559 +3 32983 32984 33089 +3 33895 34030 33894 +3 33509 33628 33508 +3 34030 34029 33894 +3 31719 31819 31718 +3 31529 31530 31616 +3 32456 32455 32351 +3 32352 32456 32351 +3 32563 32562 32455 +3 32456 32563 32455 +3 32676 32675 32562 +3 31643 31642 31555 +3 31556 31643 31555 +3 31819 31925 31818 +3 31738 31737 31642 +3 34594 34595 34722 +3 31455 31527 31454 +3 33928 18621 20153 +3 17456 17455 13004 +3 31310 31377 31309 +3 35072 35071 34942 +3 32958 33064 32957 +3 34814 34943 34813 +3 35331 35332 13223 +3 33169 33168 33063 +3 19362 29828 22356 +3 32251 27896 21308 +3 13966 35347 35218 +3 35347 13966 27871 +3 35090 35219 35089 +3 35219 13966 35218 +3 32954 32953 32845 +3 32105 32205 32104 +3 33763 33762 33635 +3 31242 31307 31241 +3 31819 31818 31718 +3 32026 32025 31924 +3 31643 31738 31642 +3 34595 34723 34722 +3 31838 31837 31737 +3 31738 31838 31737 +3 31936 31935 31837 +3 31838 31936 31837 +3 32033 32032 31935 +3 31936 32033 31935 +3 32033 32130 32129 +3 34320 34458 34319 +3 34458 34595 34457 +3 34320 34319 34181 +3 34595 34594 34457 +3 34182 34320 34181 +3 34458 34457 34319 +3 34945 34944 34815 +3 32742 32741 32627 +3 32320 32423 32422 +3 32528 32637 32636 +3 34166 34304 34165 +3 34579 34707 34578 +3 34842 34971 34970 +3 32453 32452 32348 +3 34697 34696 34568 +3 32628 32742 32627 +3 34816 34945 34815 +3 32514 32513 32408 +3 31180 31181 31244 +3 32962 33068 32961 +3 34046 34045 33910 +3 33911 34046 33910 +3 32032 32033 32129 +3 32130 32230 32229 +3 32129 32130 32229 +3 17400 17322 17323 +3 35933 27896 35915 +3 35537 35598 29145 +3 33548 801 33547 +3 32230 32332 32331 +3 32229 32230 32331 +3 32332 32436 32435 +3 32331 32332 32435 +3 32436 32543 32542 +3 32435 32436 32542 +3 33649 33650 33776 +3 33777 33911 33776 +3 33530 33531 33649 +3 33911 33910 33776 +3 33418 33531 33530 +3 33650 33777 33776 +3 33417 33418 33530 +3 33531 33650 33649 +3 32215 32214 32114 +3 31801 31800 31700 +3 35356 35821 35516 +3 34842 34841 34713 +3 31606 31701 31605 +3 31926 32027 32026 +3 32008 32007 31906 +3 32216 32317 32215 +3 34182 34181 34045 +3 34046 34182 34045 +3 32543 32656 32655 +3 33308 33309 33417 +3 32542 32543 32655 +3 21741 29811 21648 +3 34723 7043 7042 +3 7435 7323 268 +3 33612 33611 33492 +3 21307 14515 21308 +3 30213 34615 35237 +3 31513 31600 31512 +3 32777 32776 32655 +3 32656 32777 32655 +3 32889 32888 32776 +3 32777 32889 32776 +3 32997 32996 32888 +3 32889 32997 32888 +3 33103 33102 32996 +3 32997 33103 32996 +3 33208 33207 33102 +3 33309 33308 33203 +3 33309 33418 33417 +3 32993 33099 32992 +3 33204 33309 33203 +3 33204 33203 33098 +3 33099 33204 33098 +3 33396 33395 33286 +3 34714 34842 34713 +3 32519 32628 32518 +3 34294 34293 34155 +3 33060 33165 33059 +3 32008 32108 32007 +3 32773 32885 32772 +3 32993 32992 32884 +3 33103 33208 33102 +3 33313 33312 33207 +3 33208 33313 33207 +3 33422 33421 33312 +3 33313 33422 33312 +3 17369 35192 35193 +3 33659 33540 11435 +3 34951 35080 34950 +3 31849 31748 11457 +3 32303 32406 32302 +3 32511 32510 32405 +3 33535 33534 33421 +3 33422 33535 33421 +3 33654 33653 33534 +3 33535 33654 33534 +3 33781 33780 33653 +3 33654 33781 33653 +3 33915 33914 33780 +3 33781 33915 33780 +3 34050 34049 33914 +3 33915 34050 33914 +3 31932 32029 32028 +3 32885 32884 32772 +3 31734 31834 31733 +3 31931 31932 32028 +3 31834 31932 31931 +3 31833 31834 31931 +3 31925 31924 31818 +3 31820 31926 31819 +3 32885 32993 32884 +3 33099 33098 32992 +3 34186 34185 34049 +3 31834 31833 31733 +3 34050 34186 34049 +3 14644 5548 17163 +3 35430 35504 35493 +3 6153 6283 33587 +3 20901 35944 35696 +3 31693 31793 31692 +3 31640 31735 31639 +3 31431 31503 31430 +3 35040 34910 34911 +3 34598 6947 6946 +3 33749 33883 33748 +3 33270 33269 33164 +3 33165 33270 33164 +3 34324 34323 34185 +3 34186 34324 34185 +3 34462 34461 34323 +3 34324 34462 34323 +3 11412 11463 26518 +3 34461 34462 34598 +3 32128 32129 32228 +3 11580 32249 11581 +3 32563 32676 32562 +3 32797 32796 32675 +3 32351 32455 32350 +3 31552 31639 31551 +3 32351 32350 32248 +3 31639 31638 31551 +3 32249 32351 32248 +3 32455 32454 32350 +3 16313 29417 35542 +3 31640 31639 31552 +3 32676 32797 32675 +3 33901 34036 33900 +3 32909 32908 32796 +3 16243 2103 1769 +3 34355 34492 3225 +3 34133 34132 33996 +3 32684 33807 35246 +3 26788 24350 24710 +3 17370 17449 17448 +3 29002 24210 29399 +3 7637 7636 7522 +3 33543 7065 33429 +3 21642 34365 34501 +3 6643 27988 2950 +3 11477 11476 31018 +3 32617 32731 32616 +3 31734 31733 31638 +3 31639 31734 31638 +3 32541 32542 32654 +3 32129 32229 32228 +3 33189 33294 33188 +3 33294 33293 33188 +3 34028 34027 33892 +3 33893 34028 33892 +3 34833 34832 34704 +3 28949 21463 17318 +3 34031 34030 33895 +3 34705 34833 34704 +3 34448 34447 34309 +3 31016 31077 31015 +3 31935 32032 31934 +3 31266 31331 31265 +3 33516 33635 33515 +3 32797 32909 32796 +3 32032 32129 32128 +3 33017 33016 32908 +3 32909 33017 32908 +3 20153 22441 17814 +3 33337 32684 34981 +3 35246 35556 35695 +3 34072 34071 32684 +3 33337 34072 32684 +3 34072 34338 33789 +3 34071 34072 33789 +3 33686 18263 18621 +3 18621 33928 33794 +3 22421 22519 22420 +3 22228 22325 22324 +3 1167 4770 6543 +3 33266 33376 33489 +3 33237 22523 22522 +3 33008 33007 32899 +3 31077 31076 31015 +3 33767 33766 33639 +3 31737 31736 31641 +3 33123 33122 33016 +3 32644 32758 32757 +3 32330 32331 32434 +3 33186 33291 33185 +3 32643 32644 32757 +3 33400 33399 33290 +3 33291 33400 33290 +3 33769 33903 33768 +3 35342 35341 35212 +3 33893 33892 33758 +3 35213 35342 35212 +3 34442 34443 34579 +3 33759 33893 33758 +3 31642 31641 31554 +3 34730 33337 34981 +3 17272 17271 33359 +3 35227 34072 33337 +3 34870 34730 35942 +3 34199 34338 34072 +3 35227 34199 34072 +3 34199 13102 11442 +3 34338 34199 11442 +3 13102 33794 33928 +3 11442 13102 33928 +3 31139 31138 31076 +3 33686 18621 33794 +3 31259 31260 31324 +3 20000 19969 19970 +3 32757 32758 32869 +3 32203 32304 32202 +3 33017 33123 33016 +3 31555 31642 31554 +3 33228 33227 33122 +3 33123 33228 33122 +3 31644 31643 31556 +3 31557 31644 31556 +3 31739 31738 31643 +3 31644 31739 31643 +3 31839 31838 31738 +3 31739 31839 31738 +3 31937 31936 31838 +3 31839 31937 31838 +3 32034 32033 31936 +3 31937 32034 31936 +3 32131 32130 32033 +3 32034 32131 32033 +3 32131 32231 32230 +3 32130 32131 32230 +3 32231 32333 32332 +3 31624 31623 31536 +3 32230 32231 32332 +3 21971 18263 33686 +3 33022 7524 33021 +3 32914 33022 32913 +3 34247 34199 35227 +3 26498 27148 19243 +3 34608 13102 34199 +3 34247 34608 34199 +3 34608 33930 33794 +3 13102 34608 33794 +3 27375 29356 35939 +3 33794 33930 33686 +3 11730 11650 11651 +3 34722 6942 34721 +3 32333 32437 32436 +3 32332 32333 32436 +3 32437 32544 32543 +3 32436 32437 32543 +3 32657 32656 32543 +3 32544 32657 32543 +3 32778 32777 32656 +3 32657 32778 32656 +3 32890 32889 32777 +3 32778 32890 32777 +3 32998 32997 32889 +3 32890 32998 32889 +3 33104 33103 32997 +3 32998 33104 32997 +3 31527 31614 31526 +3 33209 33208 33103 +3 34433 34570 34432 +3 33755 33754 33627 +3 32994 32993 32885 +3 33419 33418 33309 +3 34970 34969 34840 +3 34172 34310 34309 +3 34713 34712 34584 +3 33517 33516 33403 +3 32125 32225 32124 +3 31465 31537 31464 +3 33104 33209 33103 +3 11421 11420 31207 +3 33314 33313 33208 +3 31792 31898 31791 +3 35637 34347 35227 +3 31692 31792 31691 +3 33233 34608 34247 +3 17815 11442 17814 +3 34247 35755 33233 +3 34608 33233 33930 +3 31397 31464 31463 +3 17461 17383 17462 +3 6947 34598 6880 +3 33209 33314 33208 +3 33423 33422 33313 +3 33314 33423 33313 +3 33536 33535 33422 +3 33423 33536 33422 +3 33655 33654 33535 +3 33536 33655 33535 +3 33782 33781 33654 +3 33655 33782 33654 +3 33916 33915 33781 +3 32633 32632 32523 +3 33782 33916 33781 +3 33012 33011 32903 +3 31186 31187 31250 +3 31537 31624 31536 +3 32792 32904 32791 +3 31062 31061 31000 +3 31001 31062 31000 +3 34051 34050 33915 +3 32201 32302 32200 +3 33916 34051 33915 +3 34187 34186 34050 +3 34051 34187 34050 +3 34325 34324 34186 +3 34187 34325 34186 +3 34818 34947 34817 +3 34325 34463 34462 +3 34324 34325 34462 +3 5199 8558 788 +3 11417 11416 31338 +3 32536 32535 32430 +3 32229 32331 32330 +3 33873 33872 33738 +3 34319 34457 34318 +3 31079 31078 31017 +3 31079 31141 31078 +3 31018 31079 31017 +3 31141 31140 31078 +3 31204 31203 31140 +3 31141 31204 31140 +3 31268 31267 31203 +3 31204 31268 31203 +3 34319 34318 34180 +3 34181 34319 34180 +3 33333 33332 33227 +3 33228 33333 33227 +3 7040 7039 6941 +3 31551 31550 26517 +3 11419 11418 31272 +3 34721 6942 6941 +3 31447 31446 31379 +3 30894 30948 30893 +3 23589 15766 15765 +3 30875 30929 30874 +3 33442 33441 33332 +3 33333 33442 33332 +3 33776 33910 33775 +3 31709 31809 31708 +3 34295 34433 34294 +3 31431 31430 31363 +3 35084 35083 34954 +3 17318 13105 19572 +3 34826 34955 34825 +3 32524 32633 32523 +3 31333 31400 31332 +3 34570 34569 34432 +3 31333 31332 31267 +3 31268 31333 31267 +3 31467 31466 31399 +3 31400 31399 31332 +3 31927 31926 31820 +3 31400 31467 31399 +3 31632 31727 31631 +3 31821 31927 31820 +3 31306 31305 31240 +3 33092 33091 32985 +3 34944 35073 34943 +3 22426 22427 22525 +3 31614 31613 31526 +3 31176 31177 31240 +3 34593 34594 34721 +3 31115 31116 31178 +3 33509 33508 33395 +3 34594 34593 34456 +3 34580 34708 34579 +3 33403 33402 33293 +3 33759 33758 33631 +3 33632 33759 33631 +3 33649 33776 33775 +3 34705 34704 34576 +3 32872 32871 32759 +3 33648 33649 33775 +3 33758 33757 33630 +3 33518 33637 33517 +3 33631 33630 33511 +3 33512 33631 33511 +3 32980 33086 32979 +3 33191 33190 33085 +3 34457 34456 34318 +3 33086 33191 33085 +3 34962 34961 34832 +3 33529 33530 33648 +3 33635 33762 33634 +3 23590 23589 7473 +3 35060 35059 34930 +3 34802 34931 34801 +3 23589 7361 7473 +3 35554 35624 35518 +3 7513 33673 33555 +3 33554 33555 33673 +3 33896 34031 33895 +3 31935 31934 31836 +3 32031 32032 32128 +3 34045 34044 33909 +3 31365 31364 31297 +3 31539 31626 31538 +3 33910 34045 33909 +3 31539 31538 31466 +3 31467 31539 31466 +3 31721 31720 31625 +3 31626 31625 31538 +3 31821 31820 31720 +3 31626 31721 31625 +3 34704 34832 34703 +3 31721 31821 31720 +3 35219 35218 35089 +3 34961 34960 34831 +3 34576 34704 34703 +3 34832 34831 34703 +3 34301 34439 34300 +3 34438 34439 34575 +3 32328 32329 32431 +3 34163 34301 34162 +3 31927 32027 31926 +3 32537 32536 32431 +3 32329 32328 32227 +3 32329 32432 32431 +3 32432 32537 32431 +3 32646 32645 32536 +3 32537 32646 32536 +3 32760 32759 32645 +3 34457 34594 34456 +3 32646 32760 32645 +3 33910 33909 33775 +3 34594 34722 34721 +3 33442 33555 33441 +3 33417 33530 33529 +3 35764 33930 35570 +3 2442 591 5413 +3 33308 33417 33416 +3 32621 32620 32511 +3 33764 33763 33636 +3 33307 33308 33416 +3 33637 33764 33636 +3 33898 33897 33763 +3 34033 34169 34032 +3 34168 34169 34306 +3 33191 33296 33295 +3 33190 33191 33295 +3 33098 33203 33097 +3 33308 33307 33202 +3 17288 17357 17356 +3 7073 35945 10623 +3 35199 33666 35198 +3 34343 15048 13183 +3 35341 17318 35340 +3 33203 33202 33097 +3 32776 32888 32775 +3 34181 34180 34044 +3 33530 33649 33648 +3 33405 33404 33295 +3 34045 34181 34044 +3 33399 33398 33289 +3 33296 33405 33295 +3 33290 33399 33289 +3 33512 33511 33398 +3 2959 24791 2960 +3 34961 35090 34960 +3 34684 34683 34555 +3 34832 34961 34831 +3 802 33549 803 +3 35090 35089 34960 +3 6922 7020 6921 +3 31263 31328 31327 +3 34813 34942 34812 +3 31395 31462 31461 +3 31462 31534 31533 +3 31262 31263 31327 +3 34439 34438 34300 +3 31394 31395 31461 +3 34163 34162 34026 +3 34027 34163 34026 +3 34027 34026 33891 +3 34301 34300 34162 +3 33892 33891 33757 +3 33892 34027 33891 +3 33631 33758 33630 +3 33758 33892 33757 +3 32871 32872 32979 +3 33399 33512 33398 +3 32760 32872 32759 +3 33086 33085 32979 +3 33416 33417 33529 +3 32872 32980 32979 +3 35222 6924 11704 +3 32992 33098 32991 +3 34708 34836 34707 +3 33762 33761 33634 +3 32992 32991 32883 +3 11963 12463 11385 +3 32884 32992 32883 +3 33098 33097 32991 +3 34582 34581 34444 +3 34307 34445 34444 +3 33764 33898 33763 +3 34033 34032 33897 +3 33203 33308 33202 +3 33898 34033 33897 +3 33949 11251 12734 +3 32772 32884 32771 +3 33081 33186 33080 +3 33291 33290 33185 +3 32974 32975 33080 +3 33434 33435 33547 +3 34965 34964 34835 +3 31931 32028 31930 +3 32884 32883 32771 +3 33518 33517 33404 +3 33405 33518 33404 +3 34838 34837 34709 +3 33637 33636 33517 +3 34710 34838 34709 +3 34967 34966 34837 +3 31114 31115 31177 +3 32866 32974 32973 +3 6930 6929 35098 +3 33875 33874 33740 +3 6884 13101 2411 +3 34065 19518 30213 +3 34802 34801 34673 +3 22028 21933 21934 +3 12994 34989 34343 +3 23075 27404 17290 +3 20893 33578 34742 +3 26433 26432 25944 +3 21110 21198 21109 +3 34382 21200 34383 +3 33023 3096 3095 +3 30949 30948 30894 +3 1614 13776 14379 +3 30895 30949 30894 +3 31007 31006 30948 +3 806 33553 33672 +3 30949 31007 30948 +3 31068 31067 31006 +3 31007 31068 31006 +3 31068 31130 31129 +3 33290 33289 33184 +3 33185 33290 33184 +3 34445 34582 34444 +3 34710 34709 34581 +3 31833 31931 31930 +3 31832 31833 31930 +3 31833 31832 31732 +3 31733 31833 31732 +3 33186 33185 33080 +3 31638 31733 31637 +3 32888 32887 32775 +3 34708 34707 34579 +3 31551 31638 31550 +3 31614 31709 31613 +3 31638 31637 31550 +3 31733 31732 31637 +3 33901 33900 33766 +3 34595 34596 34723 +3 34169 34168 34032 +3 32983 33089 33088 +3 32227 32328 32327 +3 32226 32227 32327 +3 32869 32870 32977 +3 32645 32644 32535 +3 32536 32645 32535 +3 31645 31644 31557 +3 15041 3862 273 +3 31740 31739 31644 +3 34036 34035 33900 +3 33188 33187 33082 +3 33767 33901 33766 +3 31915 31914 31808 +3 33059 33058 32952 +3 13394 34989 33949 +3 35096 35095 34966 +3 34838 34967 34837 +3 31455 31454 31387 +3 32983 32982 32874 +3 19965 31082 19966 +3 31557 31556 26615 +3 34409 34408 34270 +3 17387 17464 19520 +3 18798 19014 8309 +3 19014 35112 8309 +3 7300 33812 34995 +3 34247 35227 34347 +3 34995 12572 20009 +3 17280 17348 17279 +3 517 632 631 +3 33550 33551 804 +3 33467 15220 14736 +3 35141 21741 21742 +3 34195 32567 33467 +3 27988 34329 3092 +3 21932 21933 22027 +3 13004 27028 17456 +3 32567 27552 15609 +3 35569 35927 35410 +3 31067 31068 31129 +3 31130 31193 31192 +3 32974 33080 32973 +3 33185 33184 33079 +3 34582 34710 34581 +3 34967 35096 34966 +3 32208 32207 32107 +3 31794 31900 31793 +3 31645 31740 31644 +3 31840 31839 31739 +3 31740 31840 31739 +3 31938 31937 31839 +3 31840 31938 31839 +3 32035 32034 31937 +3 31938 32035 31937 +3 32132 32131 32034 +3 32035 32132 32034 +3 32232 32231 32131 +3 32132 32232 32131 +3 32334 32333 32231 +3 34035 34036 34171 +3 32232 32334 32231 +3 804 33551 805 +3 16316 4920 9679 +3 32438 32437 32333 +3 32334 32438 32333 +3 32545 32544 32437 +3 32438 32545 32437 +3 32658 32657 32544 +3 32545 32658 32544 +3 32779 32778 32657 +3 32658 32779 32657 +3 32891 32890 32778 +3 32779 32891 32778 +3 32999 32998 32890 +3 32891 32999 32890 +3 33105 33104 32998 +3 32999 33105 32998 +3 33210 33209 33104 +3 33105 33210 33104 +3 33315 33314 33209 +3 33210 33315 33209 +3 34713 34841 34712 +3 33439 33440 33552 +3 32621 32735 32620 +3 35563 35372 11623 +3 11518 11585 11517 +3 30958 31016 30957 +3 19668 901 7300 +3 34813 34812 34684 +3 9566 10450 10900 +3 3755 3756 3887 +3 34079 34479 3095 +3 17293 27781 29270 +3 35002 30338 33812 +3 7300 35002 33812 +3 30338 13499 24996 +3 33812 30338 24996 +3 13499 34738 13789 +3 24996 13499 13789 +3 34738 31854 34195 +3 13789 34738 34195 +3 31854 27552 32567 +3 34195 31854 32567 +3 35246 35695 34981 +3 27552 17389 15609 +3 33376 33266 33161 +3 7025 6926 7026 +3 31129 31130 31192 +3 31708 31808 31707 +3 33080 33185 33079 +3 31193 31257 31256 +3 1614 16007 34486 +3 32865 32866 32973 +3 32652 32766 32651 +3 35095 35096 35224 +3 33424 33423 33314 +3 32512 32621 32511 +3 33315 33424 33314 +3 33537 33536 33423 +3 33424 33537 33423 +3 33656 33655 33536 +3 33537 33656 33536 +3 32747 32859 32746 +3 34433 34432 34294 +3 33783 33782 33655 +3 33656 33783 33655 +3 33917 33916 33782 +3 33783 33917 33782 +3 34052 34051 33916 +3 33917 34052 33916 +3 34188 34187 34051 +3 34052 34188 34051 +3 34326 34325 34187 +3 34188 34326 34187 +3 35061 35060 34931 +3 34325 34326 34463 +3 34487 17652 19310 +3 22135 22134 35249 +3 32870 32978 32977 +3 32431 32536 32430 +3 34458 34459 34595 +3 13867 14261 13773 +3 34183 34321 34182 +3 34321 34459 34320 +3 31512 31511 31439 +3 33930 35764 35730 +3 34421 34558 34420 +3 32101 32201 32100 +3 14284 35293 18937 +3 32854 32853 32741 +3 2277 30090 2276 +3 6931 34970 34971 +3 35002 13055 30338 +3 13055 35002 9280 +3 34196 5325 13499 +3 30338 34196 13499 +3 5325 34621 34738 +3 13499 5325 34738 +3 34621 34069 31854 +3 34738 34621 31854 +3 34069 28234 27552 +3 31854 34069 27552 +3 13057 17389 28234 +3 27552 28234 17389 +3 7514 7513 33555 +3 670 7693 669 +3 31808 31807 31707 +3 31914 31913 31807 +3 31192 31193 31256 +3 31322 31321 31256 +3 32754 32866 32865 +3 33080 33079 32973 +3 34586 34714 34585 +3 11579 11653 32352 +3 33886 34021 33885 +3 32419 32418 32315 +3 34285 34284 34146 +3 31440 31439 31372 +3 32650 32764 32649 +3 35094 35093 34964 +3 34836 34835 34707 +3 33632 33631 33512 +3 33513 33632 33512 +3 32633 32747 32632 +3 32748 32747 32633 +3 34440 34439 34301 +3 32748 32860 32747 +3 34577 34705 34576 +3 33896 33895 33761 +3 33762 33896 33761 +3 31837 31935 31836 +3 32032 32031 31934 +3 31837 31836 31736 +3 31737 31837 31736 +3 34013 34012 33877 +3 31642 31737 31641 +3 32455 32562 32454 +3 34157 34156 34020 +3 33636 33635 33516 +3 32774 32886 32773 +3 32888 32996 32887 +3 31926 31925 31819 +3 32535 32534 32429 +3 32430 32535 32429 +3 32904 33012 32903 +3 33775 33909 33908 +3 34282 34281 34143 +3 32532 32641 32640 +3 32641 32755 32754 +3 33223 33222 33117 +3 32531 32532 32640 +3 33554 33673 33672 +3 34836 34965 34835 +3 17370 17371 17449 +3 33553 33554 33672 +3 33528 33529 33647 +3 33648 33775 33774 +3 13055 34196 30338 +3 31907 31906 31800 +3 33161 33267 33376 +3 31202 31201 31138 +3 35689 35771 35538 +3 32805 34849 12964 +3 33811 13478 5325 +3 34196 33811 5325 +3 13478 33573 34621 +3 5325 13478 34621 +3 33573 13119 34069 +3 34621 33573 34069 +3 13119 33345 28234 +3 34069 13119 28234 +3 3095 3234 3094 +3 33345 32805 13057 +3 17276 17277 17345 +3 12964 15477 12963 +3 15477 15476 12963 +3 11577 11652 32565 +3 31257 31322 31256 +3 31389 31388 31321 +3 32639 32640 32753 +3 32753 32754 32865 +3 34449 34586 34448 +3 34714 34713 34585 +3 33522 33521 33408 +3 34166 34165 34029 +3 31177 31241 31240 +3 32302 32301 32200 +3 34306 34305 34167 +3 32860 32859 32747 +3 19526 19214 18376 +3 670 8862 7693 +3 273 3731 2709 +3 19135 35636 7080 +3 31741 31740 31645 +3 31646 31741 31645 +3 33307 33416 33415 +3 31841 31840 31740 +3 32968 32967 32859 +3 33306 33307 33415 +3 31741 31841 31740 +3 33201 33202 33306 +3 31939 31938 31840 +3 31841 31939 31840 +3 32036 32035 31938 +3 31939 32036 31938 +3 32133 32132 32035 +3 32036 32133 32035 +3 32233 32232 32132 +3 32133 32233 32132 +3 33097 33202 33096 +3 32335 32334 32232 +3 33097 33096 32990 +3 33202 33307 33306 +3 32991 33097 32990 +3 33202 33201 33096 +3 31123 31124 31186 +3 32747 32746 32632 +3 33122 33121 33015 +3 32859 32858 32746 +3 33330 33329 33224 +3 31187 31251 31250 +3 34593 34721 34720 +3 34197 11263 31853 +3 32233 32335 32232 +3 32439 32438 32334 +3 32335 32439 32334 +3 32546 32545 32438 +3 32439 32546 32438 +3 34044 34180 34043 +3 32659 32658 32545 +3 32546 32659 32545 +3 32780 32779 32658 +3 32659 32780 32658 +3 32892 32891 32779 +3 32780 32892 32779 +3 33000 32999 32891 +3 32892 33000 32891 +3 32771 32883 32770 +3 33106 33105 32999 +3 33000 33106 32999 +3 32991 32990 32882 +3 33211 33210 33105 +3 33106 33211 33105 +3 33316 33315 33210 +3 33211 33316 33210 +3 33425 33424 33315 +3 33316 33425 33315 +3 33647 33648 33774 +3 31831 31832 31929 +3 32049 32146 32048 +3 32146 32145 32048 +3 11728 32801 11729 +3 33327 33436 33435 +3 34845 34718 6974 +3 33812 24996 12572 +3 33811 12463 13478 +3 12463 34361 11385 +3 35254 34362 33573 +3 13478 35254 33573 +3 34362 33790 13119 +3 33573 34362 13119 +3 33790 19239 33345 +3 13119 33790 33345 +3 19239 34849 32805 +3 33345 19239 32805 +3 33583 2143 33457 +3 34849 34341 12964 +3 11392 10357 7684 +3 3927 34341 33451 +3 3538 4797 33451 +3 3227 33687 14068 +3 33707 9566 10900 +3 33402 33515 33401 +3 32530 32531 32639 +3 32640 32754 32753 +3 34945 35074 34944 +3 32742 32854 32741 +3 35203 35202 35073 +3 31117 31118 31180 +3 33872 33871 33737 +3 35201 35200 35071 +3 32634 32748 32633 +3 33872 34007 33871 +3 33529 33648 33647 +3 34143 34281 34142 +3 33538 33537 33424 +3 33416 33529 33528 +3 33425 33538 33424 +3 33657 33656 33537 +3 33538 33657 33537 +3 33784 33783 33656 +3 31832 31930 31929 +3 33657 33784 33656 +3 31637 31732 31636 +3 31832 31831 31731 +3 33918 33917 33783 +3 33784 33918 33783 +3 34053 34052 33917 +3 31550 31637 31549 +3 33918 34053 33917 +3 33440 33553 33552 +3 31732 31731 31636 +3 33440 33439 33330 +3 31637 31636 31549 +3 34189 34188 34052 +3 33331 33440 33330 +3 34053 34189 34052 +3 34327 34326 34188 +3 34189 34327 34188 +3 21630 26395 26394 +3 33331 33330 33225 +3 33226 33331 33225 +3 34030 34166 34029 +3 32218 32219 32319 +3 33205 33204 33099 +3 33379 33378 33269 +3 31795 31794 31694 +3 32306 32305 32204 +3 34592 34593 34720 +3 6882 34465 6950 +3 34318 34456 34317 +3 34593 34592 34455 +3 34180 34318 34179 +3 34456 34593 34455 +3 34318 34317 34179 +3 34456 34455 34317 +3 34044 34043 33908 +3 33909 34044 33908 +3 32883 32991 32882 +3 34180 34179 34043 +3 22593 22691 30335 +3 32431 32430 32327 +3 33786 11431 33920 +3 32565 11652 11651 +3 33015 33121 33014 +3 33207 33206 33101 +3 32883 32882 32770 +3 32904 32903 32791 +3 31537 31536 31464 +3 33880 34015 33879 +3 32564 32563 32456 +3 21137 33807 22261 +3 33625 33752 33624 +3 32677 32676 32563 +3 32246 32245 32145 +3 31016 31015 30957 +3 12463 35254 13478 +3 31722 31721 31626 +3 33748 33747 33620 +3 3365 3226 3227 +3 9326 6541 33025 +3 25682 25540 11922 +3 21954 21955 35766 +3 32399 32504 32398 +3 35251 34610 33790 +3 34362 35251 33790 +3 34610 29822 19239 +3 33790 34610 19239 +3 29822 12047 34849 +3 19239 29822 34849 +3 12047 34352 34341 +3 34849 12047 34341 +3 34352 33566 33451 +3 34341 34352 33451 +3 33566 33459 33347 +3 33451 33566 33347 +3 33026 33025 10723 +3 3752 619 15075 +3 3329 17286 14262 +3 32944 33050 33049 +3 32425 32426 32530 +3 32531 32640 32639 +3 32322 32323 32425 +3 32426 32531 32530 +3 13106 26966 13223 +3 32323 32426 32425 +3 31310 31309 31244 +3 33064 33063 32957 +3 32850 32958 32849 +3 34943 35072 34942 +3 33415 33416 33528 +3 32311 32414 32310 +3 34021 34020 33885 +3 32967 33073 32966 +3 32564 32677 32563 +3 34283 34421 34282 +3 31542 31629 31541 +3 35094 35223 35222 +3 31732 31832 31731 +3 30943 30942 30888 +3 34965 35094 34964 +3 33073 33072 32966 +3 33513 33512 33399 +3 33400 33513 33399 +3 34028 34164 34027 +3 34302 34440 34301 +3 30943 31001 30942 +3 34167 34166 34030 +3 34031 34167 34030 +3 31124 31187 31186 +3 34167 34305 34166 +3 34305 34304 34166 +3 13105 21463 22236 +3 34443 34580 34579 +3 32798 32797 32676 +3 33294 33403 33293 +3 31061 31062 31123 +3 32677 32798 32676 +3 34841 34970 34840 +3 6931 34971 6932 +3 32246 32348 32245 +3 32452 32451 32347 +3 31394 31461 31460 +3 31393 31394 31460 +3 35251 13013 27779 +3 32414 32413 32310 +3 31801 31907 31800 +3 32519 32518 32413 +3 32317 32420 32316 +3 32108 32107 32007 +3 34020 34156 34019 +3 34156 34294 34155 +3 32219 32320 32319 +3 32420 32419 32316 +3 34172 34173 34310 +3 32319 32320 32422 +3 34303 34304 34441 +3 34841 34842 34970 +3 33121 33226 33120 +3 34442 34579 34578 +3 32910 32909 32797 +3 34969 34970 35098 +3 32798 32910 32797 +3 33018 33017 32909 +3 32910 33018 32909 +3 32316 32315 32214 +3 32619 32733 32618 +3 33634 33761 33633 +3 31925 32026 31924 +3 32348 32347 32245 +3 34962 35091 34961 +3 32965 32964 32856 +3 32205 32204 32104 +3 33118 33117 33011 +3 32101 32100 32000 +3 31796 31902 31795 +3 31627 31722 31626 +3 32201 32200 32100 +3 32433 32538 32432 +3 32002 32102 32001 +3 33687 3226 13024 +3 32724 32836 32835 +3 28595 24150 24210 +3 7042 7043 318 +3 27779 13706 34610 +3 35251 27779 34610 +3 13706 33694 29822 +3 34610 13706 29822 +3 33694 35257 12047 +3 29822 33694 12047 +3 35257 34489 34352 +3 12047 35257 34352 +3 34489 33564 33566 +3 34352 34489 33566 +3 33564 33576 33459 +3 33566 33564 33459 +3 10244 25540 25541 +3 25540 10244 5593 +3 17453 33666 17454 +3 11548 34778 16007 +3 34104 34103 21196 +3 19044 2140 2139 +3 31948 11455 31949 +3 1614 78 16007 +3 17323 17322 32921 +3 35186 6905 35185 +3 32222 32323 32322 +3 31748 31747 11459 +3 31460 31461 31532 +3 32221 32222 32322 +3 32146 32246 32145 +3 35212 35211 35082 +3 33746 33745 33618 +3 34173 34311 34310 +3 33068 33067 32961 +3 31512 31599 31511 +3 33012 33118 33011 +3 33409 33522 33408 +3 32001 32101 32000 +3 33441 33554 33440 +3 31440 31512 31439 +3 31373 31440 31372 +3 32763 32762 32648 +3 33124 33123 33017 +3 33018 33124 33017 +3 33229 33228 33123 +3 34941 34940 34811 +3 33124 33229 33123 +3 33334 33333 33228 +3 34812 34811 34683 +3 20153 16932 23030 +3 15092 21757 30421 +3 34455 34454 34316 +3 31742 31741 31646 +3 31142 31141 31079 +3 35331 13223 35330 +3 32348 32452 32347 +3 31080 31142 31079 +3 31261 31262 31326 +3 31080 31079 31018 +3 32121 32122 32221 +3 31461 31533 31532 +3 32021 32022 32121 +3 32122 32222 32221 +3 31920 31921 32021 +3 32022 32122 32121 +3 31814 31815 31920 +3 31921 32022 32021 +3 31714 31715 31814 +3 31815 31921 31920 +3 31619 31620 31714 +3 31715 31815 31814 +3 31533 31620 31619 +3 31532 31533 31619 +3 31262 31327 31326 +3 31620 31715 31714 +3 31205 31204 31141 +3 31198 31262 31261 +3 35198 35197 35068 +3 31142 31205 31141 +3 33121 33120 33014 +3 33226 33225 33120 +3 33015 33014 32906 +3 33195 33300 33194 +3 31925 31926 32026 +3 32907 33015 32906 +3 31334 31401 31333 +3 31468 31467 31400 +3 33276 33275 33170 +3 31540 31627 31539 +3 31647 31742 31646 +3 34317 34316 34178 +3 31842 31841 31741 +3 31742 31842 31741 +3 34179 34178 34042 +3 31940 31939 31841 +3 32647 32646 32537 +3 34043 34179 34042 +3 33638 33637 33518 +3 33519 33638 33518 +3 13706 27779 6768 +3 33050 33051 33155 +3 34861 34355 3363 +3 21735 21736 21830 +3 34874 22636 33694 +3 13706 34874 33694 +3 22636 12750 35257 +3 33694 22636 35257 +3 12750 34488 34489 +3 35257 12750 34489 +3 34488 33567 33564 +3 34489 34488 33564 +3 33567 34609 33576 +3 33564 33567 33576 +3 34609 33582 34734 +3 33576 34609 34734 +3 33582 34778 11548 +3 34734 33582 11548 +3 6138 11623 35372 +3 34778 34486 16007 +3 34486 13776 1614 +3 6995 7098 13979 +3 32055 32154 12129 +3 6993 13979 7098 +3 26497 28020 8974 +3 12963 32805 12964 +3 31322 31389 31321 +3 32293 32396 32292 +3 32849 32848 32736 +3 35341 35340 35211 +3 31822 31821 31721 +3 33638 33765 33637 +3 33646 33647 33773 +3 34043 34042 33907 +3 31842 31940 31841 +3 32037 32036 31939 +3 31940 32037 31939 +3 32134 32133 32036 +3 33527 33528 33646 +3 33647 33774 33773 +3 32037 32134 32036 +3 32234 32233 32133 +3 32134 32234 32133 +3 32336 32335 32233 +3 32234 32336 32233 +3 32440 32439 32335 +3 33414 33415 33527 +3 32336 32440 32335 +3 33491 33490 33377 +3 34684 34812 34683 +3 32547 32546 32439 +3 32440 32547 32439 +3 32660 32659 32546 +3 32547 32660 32546 +3 32781 32780 32659 +3 32660 32781 32659 +3 32893 32892 32780 +3 32781 32893 32780 +3 34317 34455 34316 +3 33001 33000 32892 +3 31722 31822 31721 +3 34592 34591 34454 +3 32643 32757 32756 +3 31822 31927 31821 +3 31327 31394 31393 +3 33221 33222 33326 +3 31456 31528 31455 +3 31326 31327 31393 +3 31456 31455 31388 +3 31615 31614 31527 +3 31389 31456 31388 +3 31528 31527 31455 +3 31528 31615 31527 +3 31710 31709 31614 +3 31615 31710 31614 +3 31810 31809 31709 +3 31916 31915 31809 +3 31710 31810 31709 +3 32017 32016 31915 +3 31810 31916 31809 +3 32116 32117 32216 +3 31916 32017 31915 +3 32017 32117 32116 +3 32016 32017 32116 +3 31197 31198 31261 +3 32117 32217 32216 +3 31269 31334 31268 +3 31073 31135 31072 +3 31269 31268 31204 +3 31401 31400 31333 +3 31205 31269 31204 +3 31334 31333 31268 +3 31401 31468 31400 +3 31540 31539 31467 +3 31468 31540 31467 +3 31627 31626 31539 +3 32433 32432 32329 +3 34941 35070 34940 +3 34179 34317 34178 +3 32538 32537 32432 +3 32893 33001 32892 +3 33415 33528 33527 +3 33107 33106 33000 +3 33001 33107 33000 +3 33200 33201 33305 +3 33212 33211 33106 +3 33765 33764 33637 +3 33306 33415 33414 +3 33738 33872 33737 +3 34034 34170 34033 +3 33548 33549 802 +3 35723 29553 35428 +3 34874 5551 22636 +3 19598 19116 19820 +3 34851 13500 12750 +3 22636 34851 12750 +3 13500 34617 34488 +3 12750 13500 34488 +3 34617 33810 33567 +3 34488 34617 33567 +3 33810 11797 34609 +3 33567 33810 34609 +3 11797 35316 33582 +3 34609 11797 33582 +3 35316 27872 34778 +3 33582 35316 34778 +3 27872 33461 34486 +3 34778 27872 34486 +3 33461 12122 13776 +3 34486 33461 13776 +3 34200 12459 13776 +3 12122 34200 13776 +3 35587 35603 35851 +3 34200 27032 12459 +3 6924 7023 7022 +3 6906 35317 6996 +3 32314 32313 32212 +3 33887 33886 33752 +3 33899 33898 33764 +3 33880 33879 33745 +3 33908 34043 33907 +3 33765 33899 33764 +3 33107 33212 33106 +3 33096 33201 33095 +3 33317 33316 33211 +3 33212 33317 33211 +3 33426 33425 33316 +3 32770 32882 32769 +3 32990 32989 32881 +3 33317 33426 33316 +3 33539 33538 33425 +3 33426 33539 33425 +3 33658 33657 33538 +3 33539 33658 33538 +3 33785 33784 33657 +3 33658 33785 33657 +3 31831 31929 31830 +3 33919 33918 33784 +3 32538 32647 32537 +3 33528 33647 33646 +3 31712 31812 31811 +3 34556 34684 34555 +3 6905 6906 6995 +3 31616 31617 31711 +3 31711 31712 31811 +3 31812 31918 31917 +3 2075 11095 9340 +3 14683 12628 34060 +3 34455 34592 34454 +3 34592 34720 34719 +3 33191 33192 33296 +3 34591 34592 34719 +3 35212 35341 35211 +3 33406 33405 33296 +3 32318 32421 32317 +3 32642 32643 32756 +3 32318 32317 32216 +3 32217 32318 32216 +3 31128 31191 31190 +3 32421 32420 32317 +3 31613 31708 31612 +3 31127 31128 31190 +3 31613 31612 31525 +3 31526 31613 31525 +3 31526 31525 31453 +3 31708 31707 31612 +3 31454 31453 31386 +3 31454 31526 31453 +3 31320 31387 31319 +3 31387 31454 31386 +3 31255 31320 31254 +3 31387 31386 31319 +3 31190 31191 31254 +3 31320 31319 31254 +3 31005 31066 31004 +3 31066 31128 31127 +3 32526 32525 32420 +3 30947 31005 30946 +3 31135 31198 31197 +3 32421 32526 32420 +3 31012 31073 31011 +3 31134 31135 31197 +3 30954 31012 30953 +3 31135 31134 31072 +3 30900 30954 30899 +3 31073 31072 31011 +3 30954 30953 30899 +3 31012 31011 30953 +3 35073 35072 34943 +3 34015 34151 34014 +3 33406 33519 33405 +3 34968 35097 35096 +3 31731 31831 31830 +3 31730 31731 31830 +3 33785 33919 33784 +3 34054 34053 33918 +3 33919 34054 33918 +3 34190 34189 34053 +3 33305 33306 33414 +3 31636 31731 31635 +3 34143 34142 34006 +3 34446 34445 34307 +3 3757 3625 3626 +3 7883 14286 7555 +3 34060 12657 34851 +3 5551 34851 22636 +3 12657 7110 13500 +3 34851 12657 13500 +3 7110 34616 34617 +3 13500 7110 34617 +3 34616 33568 33810 +3 34617 34616 33810 +3 33568 33946 11797 +3 33810 33568 11797 +3 33946 35001 35316 +3 11797 33946 35316 +3 35001 35037 27872 +3 35316 35001 27872 +3 35037 35266 33461 +3 27872 35037 33461 +3 35266 32917 12122 +3 33461 35266 12122 +3 33456 34200 12122 +3 32917 33456 12122 +3 34482 27032 34200 +3 33456 34482 34200 +3 18510 26000 22039 +3 19042 19044 33934 +3 33753 33887 33752 +3 6951 6952 7050 +3 31701 31700 31605 +3 34022 34021 33886 +3 34034 34033 33898 +3 33876 33875 33741 +3 33201 33306 33305 +3 33899 34034 33898 +3 34054 34190 34053 +3 33096 33095 32989 +3 34328 34327 34189 +3 34190 34328 34189 +3 31549 31636 31548 +3 31731 31730 31635 +3 9184 13036 16365 +3 34327 34328 34465 +3 28949 17318 35341 +3 31849 11456 31948 +3 33229 33334 33228 +3 34955 34954 34825 +3 31549 31548 31476 +3 33443 33442 33333 +3 34170 34169 34033 +3 32882 32881 32769 +3 32761 32760 32646 +3 32647 32761 32646 +3 32761 32873 32760 +3 32873 32872 32760 +3 32872 32873 32980 +3 32873 32981 32980 +3 32981 33087 32980 +3 33087 33086 32980 +3 33087 33192 33086 +3 33192 33191 33086 +3 33297 33406 33296 +3 33192 33297 33296 +3 34954 35083 34953 +3 33519 33518 33405 +3 30987 31048 30986 +3 31117 31180 31179 +3 35070 35069 34940 +3 31198 31199 31262 +3 31179 31180 31243 +3 31065 31066 31127 +3 32144 32143 32046 +3 31191 31255 31254 +3 31316 31315 31250 +3 31251 31316 31250 +3 31522 31521 31449 +3 31383 31382 31315 +3 31316 31383 31315 +3 31450 31522 31449 +3 31450 31449 31382 +3 31383 31450 31382 +3 31609 31608 31521 +3 31522 31609 31521 +3 31704 31703 31608 +3 31609 31704 31608 +3 31704 31804 31703 +3 31804 31803 31703 +3 31804 31910 31803 +3 31910 31909 31803 +3 31066 31065 31004 +3 32011 32010 31909 +3 32635 32749 32634 +3 30947 30946 30892 +3 32635 32634 32525 +3 32861 32860 32748 +3 32526 32635 32525 +3 32749 32748 32634 +3 32749 32861 32748 +3 32969 32968 32860 +3 32861 32969 32860 +3 33075 33074 32968 +3 31516 31603 31515 +3 32969 33075 32968 +3 34967 34968 35096 +3 35070 35071 35199 +3 31929 31928 31830 +3 3756 5331 34473 +3 33334 33443 33333 +3 33300 33409 33299 +3 33556 33555 33442 +3 33443 33556 33442 +3 33522 33641 33521 +3 33554 33553 33440 +3 34308 34446 34307 +3 33166 33271 33165 +3 17333 33357 17334 +3 33553 806 33552 +3 33948 29677 12657 +3 34060 33948 12657 +3 29677 35168 7110 +3 12657 29677 7110 +3 35168 34745 34616 +3 7110 35168 34616 +3 34745 33688 33568 +3 34616 34745 33568 +3 33688 33348 33946 +3 33568 33688 33946 +3 33348 31019 35001 +3 33946 33348 35001 +3 31019 35166 35037 +3 35001 31019 35037 +3 35166 33969 35266 +3 35037 35166 35266 +3 33969 18610 32917 +3 35266 33969 32917 +3 33816 33456 32917 +3 18610 33816 32917 +3 35113 34482 33456 +3 33816 35113 33456 +3 28993 35441 35369 +3 32052 33671 21939 +3 32052 21938 27757 +3 4503 10809 6514 +3 33887 34022 33886 +3 31063 31064 31125 +3 33619 33746 33618 +3 34158 34157 34021 +3 34583 34582 34445 +3 33615 33614 33495 +3 32990 33096 32989 +3 34446 34583 34445 +3 32882 32990 32881 +3 33201 33200 33095 +3 34940 35069 35068 +3 32795 32794 32673 +3 31629 31628 31541 +3 35093 35094 35222 +3 18424 17850 19116 +3 32867 32975 32974 +3 32866 32867 32974 +3 32561 32674 32560 +3 34302 34301 34163 +3 34968 34967 34838 +3 31636 31635 31548 +3 32791 32903 32790 +3 34839 34968 34838 +3 33222 33327 33326 +3 33274 33383 33273 +3 33222 33221 33116 +3 33117 33222 33116 +3 33011 33117 33010 +3 32349 32453 32348 +3 32984 33090 33089 +3 31472 31471 31404 +3 33628 33627 33508 +3 34024 34023 33888 +3 35083 35212 35082 +3 31321 31320 31255 +3 33507 33626 33506 +3 31256 31321 31255 +3 31514 31601 31513 +3 32192 32293 32191 +3 31054 31053 30992 +3 30993 31054 30992 +3 30881 30935 30880 +3 30993 30992 30934 +3 30927 30985 30926 +3 30935 30993 30934 +3 34469 18128 34728 +3 619 23272 15075 +3 31382 31449 31381 +3 31521 31520 31448 +3 31315 31382 31314 +3 31449 31521 31448 +3 31249 31250 31314 +3 31449 31448 31381 +3 31185 31186 31249 +3 31382 31381 31314 +3 31122 31123 31185 +3 31250 31315 31314 +3 31123 31186 31185 +3 31186 31250 31249 +3 31061 31123 31122 +3 31060 31061 31122 +3 31910 32011 31909 +3 31180 31244 31243 +3 30893 30947 30892 +3 32111 32110 32010 +3 32790 32902 32789 +3 31005 31004 30946 +3 32669 32790 32668 +3 33010 33009 32901 +3 32790 32789 32668 +3 32902 32901 32789 +3 35078 35207 35077 +3 33903 34038 33902 +3 34571 34570 34433 +3 32740 32739 32625 +3 7040 6941 6942 +3 34434 34571 34433 +3 11524 33340 11461 +3 31321 31388 31320 +3 32795 32907 32794 +3 32559 32558 32451 +3 34164 34302 34163 +3 34835 34964 34834 +3 32122 32123 32222 +3 32640 32641 32754 +3 32216 32215 32115 +3 32907 32906 32794 +3 32671 32792 32670 +3 22236 17467 17388 +3 32559 32672 32558 +3 11923 34742 29677 +3 33948 11923 29677 +3 34742 12843 35168 +3 29677 34742 35168 +3 12843 3461 34745 +3 35168 12843 34745 +3 3461 33565 33688 +3 34745 3461 33688 +3 33565 33460 33348 +3 33688 33565 33348 +3 33460 31340 31019 +3 33348 33460 31019 +3 31340 35296 35166 +3 31019 31340 35166 +3 35296 35196 33969 +3 35166 35296 33969 +3 35196 12453 18610 +3 33969 35196 18610 +3 34363 33816 18610 +3 12453 34363 18610 +3 29419 35113 33816 +3 34363 29419 33816 +3 21938 32052 21939 +3 29419 34212 35113 +3 24725 26682 24651 +3 32300 32403 32299 +3 31253 31318 31252 +3 32963 33069 32962 +3 34022 34158 34021 +3 33498 33497 33384 +3 33615 33742 33614 +3 34296 34295 34157 +3 34839 34838 34710 +3 33496 33495 33382 +3 34711 34710 34582 +3 34711 34839 34710 +3 32674 32795 32673 +3 34583 34711 34582 +3 34294 34432 34293 +3 32010 32110 32009 +3 12734 23274 13394 +3 35220 35219 35090 +3 28349 21934 10263 +3 611 17918 18011 +3 33385 33384 33275 +3 33402 33401 33292 +3 32515 32514 32409 +3 32986 33092 32985 +3 33902 34037 33901 +3 31724 31725 31824 +3 22022 22023 35136 +3 33180 33179 33074 +3 33075 33180 33074 +3 3095 3096 3235 +3 33285 33284 33179 +3 33180 33285 33179 +3 7019 7018 6920 +3 33285 33394 33284 +3 33394 33393 33284 +3 33394 33507 33393 +3 33507 33506 33393 +3 33753 33752 33625 +3 33626 33625 33506 +3 31385 31384 31317 +3 33626 33753 33625 +3 32855 32854 32742 +3 33220 33221 33325 +3 32226 32327 32225 +3 32735 32734 32620 +3 18134 19523 19487 +3 31902 31901 31795 +3 7405 35115 35000 +3 35000 35115 22419 +3 33923 22519 22421 +3 17455 17456 17543 +3 32610 32609 32500 +3 13776 12459 14379 +3 7684 28341 34061 +3 31530 31529 31457 +3 32673 32794 32672 +3 32631 32745 32630 +3 31199 31263 31262 +3 31313 31380 31312 +3 31132 31195 31194 +3 31327 31328 31394 +3 34146 34284 34145 +3 31726 31725 31630 +3 30935 30934 30880 +3 32908 33016 32907 +3 31374 31373 31306 +3 31054 31116 31115 +3 32312 32311 32210 +3 32971 33077 32970 +3 32011 32111 32010 +3 32211 32312 32210 +3 32211 32210 32110 +3 32111 32211 32110 +3 32415 32414 32311 +3 32312 32415 32311 +3 32520 32519 32414 +3 32415 32520 32414 +3 32309 32308 32207 +3 32629 32628 32519 +3 34699 34698 34570 +3 32737 32736 32622 +3 31388 31387 31320 +3 34571 34699 34570 +3 32452 32559 32451 +3 34160 34159 34023 +3 32792 32791 32670 +3 32672 32671 32558 +3 32226 32225 32125 +3 32674 32673 32560 +3 33276 33385 33275 +3 32875 32983 32874 +3 32558 32671 32557 +3 32789 32901 32788 +3 22420 22517 22419 +3 7405 22320 22321 +3 34742 11923 20893 +3 35112 19014 34212 +3 33578 35133 12843 +3 34742 33578 12843 +3 35133 28235 3461 +3 12843 35133 3461 +3 28235 33569 33565 +3 3461 28235 33565 +3 33569 35120 33460 +3 33565 33569 33460 +3 35120 35114 31340 +3 33460 35120 31340 +3 35114 34468 35296 +3 31340 35114 35296 +3 34468 34334 35196 +3 35296 34468 35196 +3 34334 29295 12453 +3 35196 34334 12453 +3 25135 34363 12453 +3 29295 25135 12453 +3 34245 29419 34363 +3 25135 34245 34363 +3 35112 34212 29419 +3 34245 35112 29419 +3 19480 2550 33927 +3 18798 19856 19014 +3 33174 33173 33068 +3 33920 11429 34055 +3 31064 31126 31125 +3 33069 33174 33068 +3 34158 34296 34157 +3 34174 34312 34173 +3 33383 33496 33382 +3 34434 34433 34295 +3 35218 35217 35088 +3 35089 35218 35088 +3 32793 32792 32671 +3 33270 33379 33269 +3 32510 32619 32509 +3 32512 32511 32406 +3 32126 32226 32125 +3 33441 33440 33331 +3 31724 31723 31628 +3 33227 33332 33226 +3 33332 33441 33331 +3 31724 31824 31823 +3 31723 31724 31823 +3 33178 33283 33177 +3 33752 33751 33624 +3 31375 31442 31374 +3 31696 31796 31695 +3 35347 27871 35346 +3 14284 2008 13677 +3 28012 30607 22434 +3 27726 28012 28949 +3 31933 32030 32029 +3 19167 18055 18519 +3 29281 28104 6848 +3 14515 22246 21308 +3 34038 34037 33902 +3 31265 31330 31329 +3 31623 31622 31535 +3 35115 7405 22322 +3 31318 31385 31317 +3 35345 28104 35344 +3 32743 32855 32742 +3 34312 34311 34173 +3 34142 34280 34141 +3 32963 32962 32854 +3 35336 35335 35206 +3 33016 33015 32907 +3 35115 22322 35116 +3 32213 32314 32212 +3 18390 19310 17652 +3 18390 18814 35324 +3 32447 32446 32342 +3 32343 32447 32342 +3 33704 12371 33923 +3 21763 15282 24063 +3 1646 16189 3205 +3 1646 16046 16189 +3 16046 1646 16045 +3 34064 33956 18898 +3 32106 32105 32005 +3 32206 32205 32105 +3 32006 32005 31904 +3 32006 32106 32005 +3 31905 31904 31798 +3 31905 32006 31904 +3 31309 31376 31308 +3 31799 31905 31798 +3 31243 31308 31242 +3 31799 31798 31698 +3 31061 31060 30999 +3 30937 30936 30882 +3 31000 30999 30941 +3 31000 31061 30999 +3 30942 30941 30887 +3 30942 31000 30941 +3 26799 13966 35219 +3 30888 30942 30887 +3 31796 31795 31695 +3 32649 32763 32648 +3 33174 33279 33173 +3 33168 33167 33062 +3 32849 32957 32848 +3 33388 33387 33278 +3 34956 34955 34826 +3 31447 31519 31446 +3 33628 33755 33627 +3 34827 34956 34826 +3 34449 34448 34310 +3 32534 32643 32642 +3 34939 34940 35068 +3 34311 34449 34310 +3 32350 32454 32349 +3 32733 32732 32618 +3 32561 32560 32453 +3 32454 32561 32453 +3 17461 17460 17383 +3 6915 6848 6916 +3 33956 35232 33578 +3 18898 33956 20893 +3 35232 13599 35133 +3 33578 35232 35133 +3 13599 33574 28235 +3 35133 13599 28235 +3 33574 33689 33569 +3 28235 33574 33569 +3 33689 34985 35120 +3 33569 33689 35120 +3 34985 33584 35114 +3 35120 34985 35114 +3 33584 11788 34468 +3 35114 33584 34468 +3 11788 34068 34334 +3 34468 11788 34334 +3 34068 27051 29295 +3 34334 34068 29295 +3 27051 34208 25135 +3 29295 27051 25135 +3 19460 34245 25135 +3 34208 19460 25135 +3 8309 35112 34245 +3 19460 8309 34245 +3 19014 19171 18897 +3 32046 32143 32045 +3 17534 19411 19821 +3 35672 35660 35750 +3 33279 33278 33173 +3 34428 34565 34427 +3 32669 32668 32555 +3 32556 32669 32555 +3 34296 34434 34295 +3 31466 31465 31398 +3 34831 34960 34830 +3 35089 35088 34959 +3 32962 32961 32853 +3 35332 35331 35202 +3 31001 31000 30942 +3 33178 33177 33072 +3 35138 21929 35139 +3 32978 33084 32977 +3 32430 32429 32326 +3 3029 15678 6016 +3 31809 31808 31708 +3 31648 31647 31560 +3 13223 27028 35330 +3 31374 31441 31373 +3 31561 31648 31560 +3 35074 35203 35073 +3 33752 33886 33751 +3 35347 35346 35217 +3 32854 32962 32853 +3 21463 28012 22434 +3 27987 27871 11804 +3 30882 30936 30881 +3 32113 32112 32012 +3 7519 7520 7634 +3 22026 22121 22025 +3 22025 35267 22026 +3 35138 35267 22025 +3 29553 35848 6652 +3 22324 33704 35116 +3 32743 32742 32628 +3 32520 32629 32519 +3 32855 32963 32854 +3 32629 32743 32628 +3 30991 31052 30990 +3 33069 33068 32962 +3 32326 32325 32224 +3 32406 32405 32302 +3 34560 34559 34422 +3 32417 32416 32313 +3 31445 31444 31377 +3 31378 31445 31377 +3 10688 19544 18814 +3 35768 35452 35507 +3 35822 9113 35609 +3 17858 35104 5331 +3 6766 3219 15565 +3 6666 6766 15565 +3 17446 33970 34194 +3 12371 17446 34194 +3 19523 19522 19487 +3 33970 33237 34194 +3 32650 32649 32540 +3 19738 19114 17761 +3 33120 33225 33119 +3 32045 32044 31947 +3 31948 32045 31947 +3 32142 32141 32044 +3 32045 32142 32044 +3 31473 31545 31472 +3 31699 31799 31698 +3 33225 33224 33119 +3 33614 33741 33613 +3 31517 31604 31516 +3 31698 31697 31602 +3 33875 34010 33874 +3 34422 34421 34283 +3 34009 34008 33873 +3 31059 31058 30997 +3 30998 31059 30997 +3 28948 19482 13984 +3 13127 28948 13984 +3 33059 33164 33058 +3 34820 34949 34819 +3 33279 33388 33278 +3 32957 33063 32956 +3 31606 31605 31518 +3 33501 33500 33387 +3 35085 35084 34955 +3 34425 34562 34424 +3 32533 32534 32642 +3 34956 35085 34955 +3 34304 34303 34165 +3 33117 33116 33010 +3 34707 34835 34706 +3 33197 33196 33091 +3 34613 19114 18519 +3 31992 32092 31991 +3 17350 17349 35169 +3 7392 7281 681 +3 34064 33940 35232 +3 33956 34064 35232 +3 33940 34207 13599 +3 35232 33940 13599 +3 34207 33660 33574 +3 13599 34207 33574 +3 33660 33952 33689 +3 33574 33660 33689 +3 27377 34985 33689 +3 33952 27377 33689 +3 33682 33584 34985 +3 27377 33682 34985 +3 33682 33131 11788 +3 33584 33682 11788 +3 33131 26938 34068 +3 11788 33131 34068 +3 26938 12140 27051 +3 34068 26938 27051 +3 12140 33136 34208 +3 27051 12140 34208 +3 34741 19460 34208 +3 33136 34741 34208 +3 32252 8309 19460 +3 34741 32252 19460 +3 34361 16768 11385 +3 32252 17319 8309 +3 34723 7042 6942 +3 15652 1526 19112 +3 34290 34428 34289 +3 34565 34564 34427 +3 34715 34843 34714 +3 34587 34715 34586 +3 33410 33523 33409 +3 33301 33410 33300 +3 34703 34831 34702 +3 34960 35089 34959 +3 35201 35330 35329 +3 31181 31245 31244 +3 31608 31607 31520 +3 31703 31702 31607 +3 31743 31742 31647 +3 31648 31743 31647 +3 31843 31842 31742 +3 31743 31843 31742 +3 31941 31940 31842 +3 31843 31941 31842 +3 33071 33070 32964 +3 33281 33280 33175 +3 30898 30952 30897 +3 31441 31513 31440 +3 35218 35347 35217 +3 31056 31055 30994 +3 33127 7523 7522 +3 27871 27987 35346 +3 7018 7017 6920 +3 21835 35140 21929 +3 33523 33642 33522 +3 30994 30993 30935 +3 31364 31363 31296 +3 22027 22026 35267 +3 31685 31785 31684 +3 35138 35139 35267 +3 18494 19327 18898 +3 17342 34386 17275 +3 31267 31332 31266 +3 33737 33736 33609 +3 33515 33514 33401 +3 35076 35075 34946 +3 22133 22230 22229 +3 33301 33300 33195 +3 32105 32104 32004 +3 31725 31724 31629 +3 33278 33277 33172 +3 32016 32015 31914 +3 31119 31182 31181 +3 31118 31119 31181 +3 31695 31694 31599 +3 33622 33621 33502 +3 25540 5593 11922 +3 35105 35234 22229 +3 35234 35231 17446 +3 35138 21928 21929 +3 35231 33445 33970 +3 17446 35231 33970 +3 11718 34361 33811 +3 18595 17858 18174 +3 32736 32848 32735 +3 18055 11647 18519 +3 32848 32847 32735 +3 32956 32955 32847 +3 32736 32735 32621 +3 32622 32736 32621 +3 32622 32621 32512 +3 32513 32622 32512 +3 34569 34697 34568 +3 33740 33739 33612 +3 31699 31698 31603 +3 34954 34953 34824 +3 31445 31517 31444 +3 31604 31699 31603 +3 31517 31516 31444 +3 31604 31603 31516 +3 31057 31119 31118 +3 31056 31057 31118 +3 30996 30995 30937 +3 30938 30996 30937 +3 33083 33188 33082 +3 30884 30938 30883 +3 31601 31696 31600 +3 34147 34146 34010 +3 33388 33501 33387 +3 33273 33272 33167 +3 34425 34424 34286 +3 33620 33619 33500 +3 35214 35213 35084 +3 31015 31076 31014 +3 31338 31337 31272 +3 35085 35214 35084 +3 33011 33010 32902 +3 32560 32559 32452 +3 31891 31992 31890 +3 32903 33011 32902 +3 33817 34064 34613 +3 17319 18700 18798 +3 33817 34198 33940 +3 34064 33817 33940 +3 34198 34206 34207 +3 33940 34198 34207 +3 34206 33545 33660 +3 34207 34206 33660 +3 33545 34088 33952 +3 33660 33545 33952 +3 33240 27377 33952 +3 34088 33240 33952 +3 34740 33682 27377 +3 33240 34740 27377 +3 33132 33131 33682 +3 34740 33132 33682 +3 34726 26938 33131 +3 33132 34726 33131 +3 13582 12140 26938 +3 34726 13582 26938 +3 13582 33951 33136 +3 12140 13582 33136 +3 33951 33681 34741 +3 33136 33951 34741 +3 33681 1143 32252 +3 34741 33681 32252 +3 1143 17480 17319 +3 32252 1143 17319 +3 19743 19856 18798 +3 7022 7021 6923 +3 18798 18700 19743 +3 21835 35141 35140 +3 32556 32555 32448 +3 32449 32556 32448 +3 31706 31705 31610 +3 31452 31524 31451 +3 34960 34959 34830 +3 31332 31331 31266 +3 32738 32850 32737 +3 34831 34830 34702 +3 21463 22434 22236 +3 35072 35201 35071 +3 32038 32037 31940 +3 33009 33008 32900 +3 31941 32038 31940 +3 32135 32134 32037 +3 31179 31243 31242 +3 32038 32135 32037 +3 32235 32234 32134 +3 32135 32235 32134 +3 32110 32109 32009 +3 31806 31912 31805 +3 34162 34300 34161 +3 31443 31442 31375 +3 34438 34437 34299 +3 34300 34438 34299 +3 31718 31717 31622 +3 32985 33091 32984 +3 10831 8876 179 +3 11963 11385 16612 +3 34565 34693 34564 +3 34693 34692 34564 +3 33433 7281 33432 +3 10155 1167 25152 +3 32682 10155 25152 +3 35140 21932 35139 +3 35786 35690 35489 +3 3227 3228 3366 +3 32951 32950 32842 +3 31590 31589 31502 +3 35740 35847 35559 +3 31503 31590 31502 +3 31685 31684 31589 +3 17459 26966 19482 +3 31378 31377 31310 +3 31311 31378 31310 +3 31182 31246 31245 +3 31181 31182 31245 +3 31311 31310 31245 +3 31246 31311 31245 +3 33817 18519 11647 +3 33190 33189 33084 +3 3029 6016 67 +3 21743 35272 35271 +3 35105 34994 35231 +3 35234 35105 35231 +3 34994 34601 33445 +3 35231 34994 33445 +3 18061 17970 17971 +3 22030 21935 22031 +3 32104 32103 32003 +3 30213 34626 34065 +3 31797 31903 31796 +3 32004 32003 31902 +3 32004 32104 32003 +3 31903 32004 31902 +3 32204 32203 32103 +3 32104 32204 32103 +3 33613 33740 33612 +3 32305 32304 32203 +3 31070 31069 31008 +3 33613 33612 33493 +3 32346 32345 32243 +3 33622 33749 33621 +3 32125 32124 32024 +3 30951 31009 30950 +3 31057 31056 30995 +3 30996 31057 30995 +3 33115 33220 33114 +3 33220 33325 33324 +3 31058 31057 30996 +3 30939 30938 30884 +3 33115 33114 33008 +3 30997 31058 30996 +3 33063 33062 32956 +3 33009 33115 33008 +3 33501 33620 33500 +3 33063 33168 33062 +3 31138 31201 31137 +3 33747 33746 33619 +3 35343 27726 35342 +3 31188 31189 31252 +3 35343 35342 35213 +3 28012 21463 28949 +3 35214 35343 35213 +3 27726 28949 35342 +3 21648 21649 21741 +3 12459 18132 14379 +3 31852 34198 33817 +3 11647 31852 33817 +3 31852 29080 34206 +3 34198 31852 34206 +3 29080 32051 33545 +3 34206 29080 33545 +3 32051 33684 34088 +3 33545 32051 34088 +3 33684 33349 33240 +3 34088 33684 33240 +3 34090 34740 33240 +3 33349 34090 33240 +3 13313 33132 34740 +3 34090 13313 34740 +3 13313 32151 34726 +3 33132 13313 34726 +3 33563 13582 34726 +3 32151 33563 34726 +3 11885 33951 13582 +3 33563 11885 13582 +3 11885 34727 33681 +3 33951 11885 33681 +3 34727 32803 1143 +3 33681 34727 1143 +3 32803 11714 17480 +3 1143 32803 17480 +3 11714 35101 29403 +3 17480 11714 29403 +3 32504 32613 32503 +3 34989 12994 33949 +3 31201 31265 31264 +3 31200 31201 31264 +3 11433 11490 11432 +3 34312 34450 34311 +3 32985 32984 32876 +3 33873 34008 33872 +3 34575 34574 34437 +3 34438 34575 34437 +3 15074 5337 3752 +3 32958 32957 32849 +3 31113 31114 31176 +3 31324 31391 31323 +3 32337 32336 32234 +3 32235 32337 32234 +3 32441 32440 32336 +3 31051 31052 31113 +3 32337 32441 32336 +3 31599 31598 31511 +3 31521 31608 31520 +3 32548 32547 32440 +3 32441 32548 32440 +3 33164 33269 33163 +3 34815 34944 34814 +3 33378 33491 33377 +3 32311 32310 32209 +3 31053 31052 30991 +3 34026 34162 34025 +3 34300 34299 34161 +3 34754 21831 21736 +3 31623 31718 31622 +3 11548 15608 34734 +3 17911 34071 33789 +3 33168 33273 33167 +3 34950 34949 34820 +3 33807 22356 35246 +3 35249 21551 29265 +3 35141 35270 35269 +3 35140 35141 35269 +3 35270 12829 10263 +3 35269 35270 10263 +3 12829 26688 28349 +3 10263 12829 28349 +3 26688 29405 3223 +3 28349 26688 3223 +3 21551 35249 22134 +3 17428 17349 17350 +3 33817 34613 18519 +3 21938 22034 22033 +3 35105 22230 22231 +3 32682 8016 10155 +3 33085 33190 33084 +3 35105 22231 34994 +3 35205 35334 35204 +3 32409 32514 32408 +3 30599 25658 28070 +3 18118 14379 18132 +3 32199 32198 32098 +3 22426 22524 22425 +3 21552 34881 34601 +3 34994 21552 34601 +3 35909 35524 35671 +3 24711 24732 25921 +3 3235 3096 3236 +3 34085 22428 33925 +3 3223 21935 28349 +3 22526 9644 22527 +3 31105 31168 31167 +3 33339 12748 22135 +3 34734 15075 33576 +3 32428 32533 32532 +3 32204 32305 32203 +3 35660 35351 35750 +3 33494 33613 33493 +3 32408 32407 32304 +3 33381 33380 33271 +3 33272 33381 33271 +3 31058 31059 31120 +3 3223 29405 21938 +3 32668 32789 32667 +3 30938 30937 30883 +3 30885 30939 30884 +3 30997 30996 30938 +3 33273 33382 33272 +3 31184 31248 31247 +3 35205 35204 35075 +3 35078 35077 34948 +3 32417 32522 32416 +3 31519 31606 31518 +3 32878 32986 32877 +3 32048 32145 32047 +3 33620 33747 33619 +3 32206 32307 32205 +3 31912 31911 31805 +3 33881 33880 33746 +3 34848 4100 4366 +3 31611 31706 31610 +3 32765 32877 32764 +3 31126 31189 31188 +3 6252 21051 22749 +3 21223 33807 21137 +3 33935 31852 11647 +3 7640 7524 33022 +3 33935 7879 29080 +3 31852 33935 29080 +3 7879 34215 32051 +3 29080 7879 32051 +3 34215 33570 33684 +3 32051 34215 33684 +3 33570 35262 33349 +3 33684 33570 33349 +3 35262 32804 34090 +3 33349 35262 34090 +3 34604 13313 34090 +3 32804 34604 34090 +3 35322 32151 13313 +3 34604 35322 13313 +3 1876 33563 32151 +3 35322 1876 32151 +3 31081 11885 33563 +3 1876 31081 33563 +3 31081 33450 34727 +3 11885 31081 34727 +3 33450 34846 32803 +3 34727 33450 32803 +3 34846 32356 11714 +3 32803 34846 11714 +3 32356 35230 35101 +3 11714 32356 35101 +3 730 611 18011 +3 17404 17326 17327 +3 34152 34290 34151 +3 34290 34289 34151 +3 31632 31631 31544 +3 34428 34427 34289 +3 35200 35329 35199 +3 619 4952 33347 +3 34162 34161 34025 +3 31116 31117 31179 +3 32110 32210 32109 +3 33014 33120 33013 +3 33492 33611 33491 +3 31694 31693 31598 +3 32661 32660 32547 +3 32548 32661 32547 +3 32782 32781 32660 +3 32661 32782 32660 +3 34007 34006 33871 +3 33611 33610 33491 +3 33610 33737 33609 +3 33871 33870 33736 +3 32894 32893 32781 +3 32782 32894 32781 +3 31950 32047 31949 +3 31177 31178 31241 +3 32026 32126 32025 +3 32412 32411 32308 +3 33885 34020 33884 +3 31052 31114 31113 +3 21642 34500 34499 +3 3752 15075 15074 +3 34627 34755 34754 +3 35314 35185 6905 +3 6993 7096 6992 +3 21649 21650 35014 +3 33220 33219 33114 +3 33382 33381 33272 +3 34328 6953 6952 +3 17284 13221 17353 +3 31651 11459 31747 +3 33674 34972 22036 +3 35271 1638 12829 +3 35270 35271 12829 +3 1638 26567 26688 +3 12829 1638 26688 +3 26567 27757 29405 +3 26688 26567 29405 +3 29356 28888 29494 +3 16987 3070 17120 +3 32052 33674 33671 +3 16987 17120 15231 +3 33671 33674 22036 +3 34972 21551 22036 +3 6666 15565 936 +3 3845 4233 4366 +3 33494 33493 33380 +3 179 8128 10831 +3 22231 12748 21552 +3 33381 33494 33380 +3 12748 13319 21552 +3 13311 19526 10380 +3 13319 33353 34881 +3 21552 13319 34881 +3 13681 33925 34881 +3 33353 13681 34881 +3 22428 34085 9644 +3 13681 34085 33925 +3 34085 34875 9644 +3 17527 17851 8687 +3 9744 7348 15956 +3 15956 16399 9744 +3 34599 34219 33796 +3 9744 16399 9891 +3 15075 23272 33459 +3 33156 33261 33260 +3 32305 32408 32304 +3 32513 32512 32407 +3 33272 33271 33166 +3 33167 33272 33166 +3 35202 35331 35330 +3 31458 31457 31390 +3 32555 32668 32554 +3 32789 32788 32667 +3 30939 30997 30938 +3 31058 31120 31119 +3 30940 30998 30939 +3 35076 35205 35075 +3 35337 35336 35207 +3 35208 35337 35207 +3 35381 35824 35724 +3 12562 12472 35336 +3 32976 32977 33082 +3 12665 19520 13575 +3 34698 34697 34569 +3 35221 35222 11704 +3 34152 34151 34015 +3 32953 33059 32952 +3 33747 33881 33746 +3 34016 34152 34015 +3 34016 34015 33880 +3 33881 34016 33880 +3 18390 18699 18814 +3 19522 35230 17363 +3 17301 33935 34487 +3 26390 26349 26351 +3 17301 33933 7879 +3 33935 17301 7879 +3 33933 34353 34215 +3 7879 33933 34215 +3 34353 33953 33570 +3 34215 34353 33570 +3 33953 34614 35262 +3 33570 33953 35262 +3 33027 32804 35262 +3 34614 33027 35262 +3 35319 34604 32804 +3 33027 35319 32804 +3 35225 35322 34604 +3 35319 35225 34604 +3 28999 1876 35322 +3 35225 28999 35322 +3 28999 34351 31081 +3 1876 28999 31081 +3 34351 35194 33450 +3 31081 34351 33450 +3 35194 34356 34846 +3 33450 35194 34846 +3 34356 34522 32356 +3 34846 34356 32356 +3 34522 17363 35230 +3 32356 34522 35230 +3 35495 35920 35675 +3 6974 116 115 +3 33740 33874 33739 +3 33495 33494 33381 +3 33271 33270 33165 +3 33739 33873 33738 +3 31059 31121 31120 +3 32451 32450 32346 +3 33891 34026 33890 +3 31055 31117 31116 +3 32303 32302 32201 +3 32525 32524 32419 +3 34008 34144 34007 +3 31194 31195 31258 +3 33002 33001 32893 +3 32894 33002 32893 +3 33108 33107 33001 +3 33002 33108 33001 +3 33213 33212 33107 +3 33108 33213 33107 +3 34555 34683 34554 +3 31603 31698 31602 +3 33318 33317 33212 +3 34144 34143 34007 +3 33213 33318 33212 +3 33492 33491 33378 +3 16773 20009 12572 +3 33155 33156 33260 +3 32119 32219 32218 +3 31907 32008 31906 +3 34500 34628 34627 +3 34499 34500 34627 +3 34628 34756 34755 +3 34627 34628 34755 +3 6953 34328 6886 +3 32352 11577 32456 +3 22417 22320 7405 +3 8693 8801 2074 +3 17452 35197 35198 +3 31442 31514 31441 +3 21743 35144 35272 +3 21935 3223 22031 +3 35272 14092 1638 +3 35271 35272 1638 +3 14092 20828 26567 +3 1638 14092 26567 +3 20828 29147 27757 +3 26567 20828 27757 +3 29147 32053 32052 +3 27757 29147 32052 +3 32053 33675 33674 +3 32052 32053 33674 +3 33675 34973 34972 +3 33674 33675 34972 +3 34973 29265 21551 +3 34972 34973 21551 +3 34601 22426 33445 +3 19632 29403 19523 +3 35522 25126 24994 +3 28882 28363 29131 +3 33339 34205 13319 +3 12748 33339 13319 +3 34205 34869 33353 +3 13319 34205 33353 +3 35240 13681 33353 +3 34869 35240 33353 +3 20008 34085 13681 +3 35240 20008 13681 +3 20008 33024 34875 +3 34085 20008 34875 +3 33024 34600 34599 +3 34875 33024 34599 +3 30488 12687 21643 +3 34599 34600 34219 +3 18422 3341 22459 +3 923 804 805 +3 32408 32513 32407 +3 31308 31307 31242 +3 33167 33166 33061 +3 33062 33167 33061 +3 32955 33061 32954 +3 34687 34815 34686 +3 32558 32557 32450 +3 32668 32667 32554 +3 31057 31058 31119 +3 31120 31183 31182 +3 32852 32851 32739 +3 32113 32213 32112 +3 35337 12562 35336 +3 12665 13575 12472 +3 35211 35340 35210 +3 19572 34495 35339 +3 34953 35082 34952 +3 35211 35210 35081 +3 34568 34696 34567 +3 34953 34952 34823 +3 34431 34568 34430 +3 34696 34695 34567 +3 34293 34431 34292 +3 34568 34567 34430 +3 34155 34293 34154 +3 34431 34430 34292 +3 22135 35249 33339 +3 6942 34722 34723 +3 35324 29219 19310 +3 19310 17301 34487 +3 29219 34856 33933 +3 17301 29219 33933 +3 34490 34353 33933 +3 34856 34490 33933 +3 34089 33953 34353 +3 34490 34089 34353 +3 19701 34614 33953 +3 34089 19701 33953 +3 13301 33027 34614 +3 19701 13301 34614 +3 13301 17258 35319 +3 33027 13301 35319 +3 35127 35225 35319 +3 17258 35127 35319 +3 34472 28999 35225 +3 35127 34472 35225 +3 34472 31954 34351 +3 28999 34472 34351 +3 31954 34246 35194 +3 34351 31954 35194 +3 34246 10380 34356 +3 35194 34246 34356 +3 28114 25646 28230 +3 34356 10380 34522 +3 35441 35738 35549 +3 6922 6923 7021 +3 34950 35079 34949 +3 21641 21549 34365 +3 34821 34950 34820 +3 35079 35078 34949 +3 34008 34007 33872 +3 31915 32016 31914 +3 34422 34559 34421 +3 31900 32001 31899 +3 34026 34025 33890 +3 31054 31055 31116 +3 32634 32633 32524 +3 35222 35221 35092 +3 34719 34718 34590 +3 33876 34011 33875 +3 33427 33426 33317 +3 33318 33427 33317 +3 33540 33539 33426 +3 33427 33540 33426 +3 33659 33658 33539 +3 33540 33659 33539 +3 34454 34591 34453 +3 33786 33785 33658 +3 33659 33786 33658 +3 33920 33919 33785 +3 34316 34454 34315 +3 34591 34590 34453 +3 31950 11455 11519 +3 10027 10454 16257 +3 34501 34629 34628 +3 34500 34501 34628 +3 34629 34757 34756 +3 34628 34629 34756 +3 31104 31105 31167 +3 35246 22356 29828 +3 30982 30981 30923 +3 21743 21742 35014 +3 17403 17325 17326 +3 12687 15339 2750 +3 35144 35273 35272 +3 21650 21743 35014 +3 35273 27171 14092 +3 35272 35273 14092 +3 27171 30747 20828 +3 14092 27171 20828 +3 30747 12824 29147 +3 20828 30747 29147 +3 12824 32054 32053 +3 29147 12824 32053 +3 32054 33676 33675 +3 32053 32054 33675 +3 33676 34974 34973 +3 33675 33676 34973 +3 34974 27611 29265 +3 34973 34974 29265 +3 35256 35249 29265 +3 27611 35256 29265 +3 35256 35228 33339 +3 35249 35256 33339 +3 35228 34991 34205 +3 33339 35228 34205 +3 34991 12840 34869 +3 34205 34991 34869 +3 33938 35240 34869 +3 12840 33938 34869 +3 33803 20008 35240 +3 33938 33803 35240 +3 33803 35118 33024 +3 20008 33803 33024 +3 35118 35239 34600 +3 33024 35118 34600 +3 12687 2750 21643 +3 35239 34478 34600 +3 11422 11421 31143 +3 18194 18374 19422 +3 33393 33392 33283 +3 33261 33370 33260 +3 33062 33061 32955 +3 32956 33062 32955 +3 32344 32343 32241 +3 27555 12268 12185 +3 34147 34285 34146 +3 31471 31543 31470 +3 31119 31120 31182 +3 31183 31247 31246 +3 31806 31805 31705 +3 33010 33116 33009 +3 12562 12665 12472 +3 31900 31899 31793 +3 35082 35211 35081 +3 35340 35339 35210 +3 33221 33220 33115 +3 32046 32045 31948 +3 33066 33171 33065 +3 31694 31794 31693 +3 32108 32208 32107 +3 32005 32105 32004 +3 33617 33616 33497 +3 33385 33498 33384 +3 12383 12472 391 +3 35207 35336 35206 +3 7523 33127 7524 +3 11392 35229 9796 +3 34226 29219 35324 +3 34244 34243 21198 +3 12632 34856 29219 +3 34226 12632 29219 +3 12632 34618 34490 +3 34856 12632 34490 +3 33683 34089 34490 +3 34618 33683 34490 +3 33350 19701 34089 +3 33683 33350 34089 +3 6978 13301 19701 +3 33350 6978 19701 +3 33449 17258 13301 +3 6978 33449 13301 +3 34332 35127 17258 +3 33449 34332 17258 +3 5558 34472 35127 +3 34332 5558 35127 +3 5558 28609 31954 +3 34472 5558 31954 +3 28609 31339 34246 +3 31954 28609 34246 +3 31339 34493 10380 +3 34246 31339 10380 +3 18376 17363 19526 +3 34493 13311 10380 +3 11518 11517 32049 +3 8862 670 4648 +3 35208 35207 35078 +3 35079 35208 35078 +3 35340 19572 35339 +3 28591 28871 34495 +3 31406 31405 31338 +3 19572 28591 34495 +3 34815 34814 34686 +3 7524 7640 7639 +3 33891 33890 33756 +3 31055 31054 30993 +3 34156 34155 34019 +3 32018 32019 32118 +3 34178 34316 34177 +3 34591 34719 34590 +3 33786 33920 33785 +3 34055 34054 33919 +3 33920 34055 33919 +3 34316 34315 34177 +3 34191 34190 34054 +3 34055 34191 34054 +3 34366 34365 21549 +3 34190 34191 34328 +3 31248 31313 31312 +3 35131 34203 3089 +3 34042 34178 34041 +3 34365 34502 34501 +3 2412 6884 2411 +3 34502 34630 34629 +3 34501 34502 34629 +3 34630 34758 34757 +3 34629 34630 34757 +3 1891 10027 9909 +3 9909 10027 16257 +3 7041 7040 6942 +3 34887 35016 21650 +3 35016 35145 35144 +3 12964 34341 3927 +3 35145 35274 35273 +3 35144 35145 35273 +3 35274 12028 27171 +3 35273 35274 27171 +3 12028 28857 30747 +3 27171 12028 30747 +3 28857 13033 12824 +3 30747 28857 12824 +3 13033 32250 32054 +3 12824 13033 32054 +3 32250 33679 33676 +3 32054 32250 33676 +3 33679 34983 34974 +3 33676 33679 34974 +3 34983 34209 27611 +3 34974 34983 27611 +3 34209 35297 35256 +3 27611 34209 35256 +3 35297 27147 35228 +3 35256 35297 35228 +3 27147 28074 34991 +3 35228 27147 34991 +3 28074 13388 12840 +3 34991 28074 12840 +3 34223 33938 12840 +3 13388 34223 12840 +3 34496 33803 33938 +3 34223 34496 33938 +3 34496 24728 35118 +3 33803 34496 35118 +3 24728 34086 35239 +3 35118 24728 35239 +3 34744 34478 35239 +3 34086 34744 35239 +3 18194 17945 18374 +3 34744 34337 34478 +3 22620 22520 22521 +3 17273 33974 33975 +3 32848 32956 32847 +3 28581 28582 28711 +3 33614 33613 33494 +3 32407 32512 32406 +3 33066 33065 32959 +3 31798 31797 31697 +3 31182 31183 31246 +3 31312 31311 31246 +3 31332 31399 31331 +3 32971 32970 32862 +3 17458 26966 17459 +3 32215 32316 32214 +3 34824 34953 34823 +3 35082 35081 34952 +3 33878 34013 33877 +3 34149 34148 34012 +3 33511 33510 33397 +3 33398 33511 33397 +3 33289 33288 33183 +3 33184 33289 33183 +3 33184 33183 33078 +3 33079 33184 33078 +3 32865 32973 32864 +3 33079 33078 32972 +3 35216 35345 35215 +3 32973 33079 32972 +3 17695 34226 35324 +3 33434 33547 682 +3 35129 12632 34226 +3 33465 35129 34226 +3 35129 19027 34618 +3 12632 35129 34618 +3 33571 33683 34618 +3 19027 33571 34618 +3 33462 33350 33683 +3 33571 33462 33683 +3 33585 6978 33350 +3 33462 33585 33350 +3 11948 33449 6978 +3 33585 11948 6978 +3 27264 34332 33449 +3 11948 27264 33449 +3 11968 5558 34332 +3 27264 11968 34332 +3 11968 34108 28609 +3 5558 11968 28609 +3 34624 31339 28609 +3 34108 34624 28609 +3 10577 34493 31339 +3 34624 10577 31339 +3 33804 13311 34493 +3 10577 33804 34493 +3 35223 35224 6926 +3 3731 273 3862 +3 33750 33884 33749 +3 34019 34018 33883 +3 34155 34154 34018 +3 33884 34019 33883 +3 34572 34573 34700 +3 31536 31623 31535 +3 33390 33389 33280 +3 35345 35344 35215 +3 33630 33757 33629 +3 33757 33891 33756 +3 33641 33768 33640 +3 34835 34834 34706 +3 34178 34177 34041 +3 34454 34453 34315 +3 29270 30755 17294 +3 34459 34460 34596 +3 6940 7039 209 +3 32645 32759 32758 +3 32644 32645 32758 +3 33907 34042 33906 +3 32758 32759 32870 +3 32759 32871 32870 +3 11431 11432 11489 +3 35568 35556 29828 +3 11434 11491 11433 +3 35903 35578 35407 +3 34366 34503 34502 +3 34365 34366 34502 +3 34503 34631 34630 +3 34502 34503 34630 +3 34631 34759 34758 +3 34630 34631 34758 +3 34759 34888 34887 +3 34758 34759 34887 +3 34888 35017 35016 +3 34887 34888 35016 +3 35017 35146 35145 +3 35016 35017 35145 +3 35146 35275 35274 +3 35145 35146 35274 +3 35275 8228 12028 +3 35274 35275 12028 +3 8228 28739 28857 +3 12028 8228 28857 +3 28739 33239 13033 +3 28857 28739 13033 +3 33239 32354 32250 +3 13033 33239 32250 +3 32354 33685 33679 +3 32250 32354 33679 +3 33685 34987 34983 +3 33679 33685 34983 +3 34987 31952 34209 +3 34983 34987 34209 +3 31952 34059 35297 +3 34209 31952 35297 +3 34059 24213 27147 +3 35297 34059 27147 +3 24213 34477 28074 +3 27147 24213 28074 +3 34477 30221 13388 +3 28074 34477 13388 +3 34498 34223 13388 +3 30221 34498 13388 +3 34852 34496 34223 +3 34498 34852 34223 +3 13591 24728 34496 +3 34852 13591 34496 +3 12212 34086 24728 +3 13591 12212 24728 +3 12370 34744 34086 +3 12212 12370 34086 +3 34083 34337 34744 +3 12370 34083 34744 +3 35801 35693 35647 +3 34083 32568 34337 +3 22522 34194 33237 +3 25838 25839 25980 +3 31329 31330 31396 +3 32242 32241 32141 +3 31524 31611 31523 +3 33387 33386 33277 +3 31247 31312 31246 +3 31379 31378 31311 +3 32327 32430 32326 +3 31443 31515 31442 +3 31698 31798 31697 +3 33195 33194 33089 +3 34019 34155 34018 +3 34293 34292 34154 +3 31701 31801 31700 +3 31798 31904 31797 +3 33398 33397 33288 +3 33289 33398 33288 +3 32905 33013 32904 +3 33119 33118 33012 +3 31143 31206 31142 +3 33013 33119 33012 +3 31206 31270 31205 +3 31270 31269 31205 +3 32973 32972 32864 +3 31335 31334 31269 +3 19048 19049 2143 +3 23238 28250 27644 +3 34976 35129 33465 +3 34340 34976 33465 +3 34976 13395 19027 +3 35129 34976 19027 +3 33819 33571 19027 +3 13395 33819 19027 +3 33562 33462 33571 +3 33819 33562 33571 +3 33706 33585 33462 +3 33562 33706 33462 +3 34622 11948 33585 +3 33706 34622 33585 +3 34988 27264 11948 +3 34622 34988 11948 +3 13289 11968 27264 +3 34988 13289 27264 +3 13289 19349 34108 +3 11968 13289 34108 +3 34725 34624 34108 +3 19349 34725 34108 +3 34211 10577 34624 +3 34725 34211 34624 +3 34615 33804 10577 +3 34211 34615 10577 +3 17324 17325 17402 +3 13314 13400 35424 +3 33884 33883 33749 +3 21939 22034 21938 +3 35087 35086 34957 +3 35216 35215 35086 +3 33642 33641 33522 +3 31611 31610 31523 +3 33630 33629 33510 +3 33511 33630 33510 +3 32793 32905 32792 +3 33757 33756 33629 +3 33646 33773 33772 +3 32672 32793 32671 +3 34460 34459 34321 +3 33645 33646 33772 +3 33516 33515 33402 +3 32996 33102 32995 +3 33271 33380 33270 +3 33761 33895 33760 +3 32975 33081 33080 +3 32754 32755 32866 +3 6940 34720 34721 +3 32023 32123 32122 +3 20441 20440 23812 +3 17459 19482 17460 +3 34229 34367 34366 +3 23812 20356 20441 +3 34367 34504 34503 +3 34366 34367 34503 +3 34504 34632 34631 +3 34503 34504 34631 +3 34632 34760 34759 +3 34631 34632 34759 +3 34760 34889 34888 +3 34759 34760 34888 +3 34889 35018 35017 +3 34888 34889 35017 +3 35018 35147 35146 +3 35017 35018 35146 +3 35147 35276 35275 +3 35146 35147 35275 +3 35276 26690 8228 +3 35275 35276 8228 +3 26690 14069 28739 +3 8228 26690 28739 +3 14069 13617 33239 +3 28739 14069 33239 +3 13617 32680 32354 +3 33239 13617 32354 +3 32680 33695 33685 +3 32354 32680 33685 +3 33695 34996 34987 +3 33685 33695 34987 +3 34996 31953 31952 +3 34987 34996 31952 +3 31953 27403 34059 +3 31952 31953 34059 +3 27403 2949 24213 +3 34059 27403 24213 +3 2949 33343 34477 +3 24213 2949 34477 +3 33343 34073 30221 +3 34477 33343 30221 +3 34339 34498 30221 +3 34073 34339 30221 +3 33693 34852 34498 +3 34339 33693 34498 +3 28615 13591 34852 +3 33693 28615 34852 +3 34344 12212 13591 +3 28615 34344 13591 +3 34872 12370 12212 +3 34344 34872 12212 +3 34858 34083 12370 +3 34872 34858 12370 +3 34335 32568 34083 +3 34858 34335 34083 +3 25837 25838 28343 +3 34335 34075 32568 +3 6414 6541 9326 +3 28113 28114 28230 +3 32314 32417 32313 +3 31391 31458 31390 +3 31312 31379 31311 +3 31446 31445 31378 +3 31399 31398 31331 +3 31140 31139 31077 +3 32347 32346 32244 +3 32307 32410 32306 +3 33750 33749 33622 +3 33623 33750 33622 +3 32960 33066 32959 +3 33325 33326 33434 +3 32753 32865 32864 +3 32752 32753 32864 +3 33224 33223 33118 +3 31143 31142 31080 +3 33527 33646 33645 +3 33526 33527 33645 +3 33305 33414 33304 +3 33414 33527 33526 +3 31270 31335 31269 +3 33413 33414 33526 +3 21066 24847 29944 +3 31402 31401 31334 +3 33587 34976 34340 +3 3933 3801 3802 +3 33587 34342 13395 +3 34976 33587 13395 +3 33954 33819 13395 +3 34342 33954 13395 +3 33560 33562 33819 +3 33954 33560 33819 +3 19557 33706 33562 +3 33560 19557 33562 +3 12478 34622 33706 +3 19557 12478 33706 +3 34753 34988 34622 +3 12478 34753 34622 +3 28075 13289 34988 +3 34753 28075 34988 +3 28075 3863 19349 +3 13289 28075 19349 +3 3863 33341 34725 +3 19349 3863 34725 +3 12917 34211 34725 +3 33341 12917 34725 +3 12917 35237 34615 +3 34211 12917 34615 +3 35389 35898 35527 +3 35769 35777 35849 +3 7518 33335 33336 +3 35894 35434 35860 +3 31818 31817 31717 +3 7874 9796 10900 +3 32530 32639 32638 +3 32529 32530 32638 +3 32638 32639 32752 +3 32639 32753 32752 +3 33902 33901 33767 +3 33013 33012 32904 +3 33414 33413 33304 +3 34042 34041 33906 +3 33523 33522 33409 +3 34686 34814 34685 +3 32022 32023 32122 +3 33199 33200 33304 +3 34322 34321 34183 +3 34569 34568 34431 +3 34047 34183 34046 +3 32407 32406 32303 +3 34184 34322 34183 +3 32099 32199 32098 +3 21650 35016 35144 +3 34092 34230 34229 +3 34091 34092 34229 +3 34230 34368 34367 +3 34229 34230 34367 +3 34368 34505 34504 +3 34367 34368 34504 +3 34505 34633 34632 +3 34504 34505 34632 +3 34633 34761 34760 +3 34632 34633 34760 +3 34761 34890 34889 +3 34760 34761 34889 +3 34890 35019 35018 +3 34889 34890 35018 +3 35019 35148 35147 +3 35018 35019 35147 +3 35148 35277 35276 +3 35147 35148 35276 +3 35277 12653 26690 +3 35276 35277 26690 +3 12653 13978 14069 +3 26690 12653 14069 +3 13978 10716 13617 +3 14069 13978 13617 +3 10716 33128 32680 +3 13617 10716 32680 +3 33128 33696 33695 +3 32680 33128 33695 +3 33696 34998 34996 +3 33695 33696 34996 +3 34998 34908 31953 +3 34996 34998 31953 +3 34908 22736 27403 +3 31953 34908 27403 +3 22736 34863 2949 +3 27403 22736 2949 +3 34863 34087 33343 +3 2949 34863 33343 +3 34087 33971 34073 +3 33343 34087 34073 +3 14071 34339 34073 +3 33971 14071 34073 +3 29949 33693 34339 +3 14071 29949 34339 +3 34750 28615 33693 +3 29949 34750 33693 +3 30775 34344 28615 +3 34750 30775 28615 +3 35243 34872 34344 +3 30775 35243 34344 +3 29284 34858 34872 +3 35243 29284 34872 +3 34731 34335 34858 +3 29284 34731 34858 +3 34074 34075 34335 +3 34731 34074 34335 +3 17851 28876 33129 +3 6283 6154 6155 +3 34949 34948 34819 +3 32857 32965 32856 +3 31379 31446 31378 +3 31518 31517 31445 +3 34011 34010 33875 +3 32410 32409 32306 +3 31128 31129 31191 +3 31129 31192 31191 +3 33623 33622 33503 +3 33504 33623 33503 +3 33435 33548 33547 +3 31718 31818 31717 +3 32220 32221 32321 +3 32322 32425 32424 +3 31206 31205 31142 +3 31335 31402 31334 +3 33095 33200 33094 +3 33200 33305 33304 +3 34459 34458 34320 +3 33517 33636 33516 +3 33200 33199 33094 +3 34184 34183 34047 +3 33095 33094 32988 +3 32989 33095 32988 +3 31899 31898 31792 +3 7129 7025 7026 +3 34065 34626 4233 +3 4233 34626 34848 +3 34078 33954 34342 +3 34216 34078 34342 +3 34202 33560 33954 +3 34078 34202 33954 +3 13703 19557 33560 +3 34202 13703 33560 +3 35261 12478 19557 +3 13703 35261 19557 +3 34056 34753 12478 +3 35261 34056 12478 +3 34986 28075 34753 +3 34056 34986 34753 +3 34986 12934 3863 +3 28075 34986 3863 +3 34779 33341 3863 +3 12934 34779 3863 +3 34779 34359 12917 +3 33341 34779 12917 +3 34359 34345 35237 +3 12917 34359 35237 +3 34626 30213 35237 +3 34345 34626 35237 +3 5756 14438 3731 +3 35731 12841 35878 +3 7172 33543 33430 +3 1152 5193 4526 +3 32321 32322 32424 +3 32425 32530 32529 +3 31469 31541 31468 +3 31628 31627 31540 +3 32769 32881 32768 +3 32905 32904 32792 +3 34581 34580 34443 +3 32989 32988 32880 +3 34168 34306 34167 +3 34048 34184 34047 +3 34709 34708 34580 +3 33912 34047 33911 +3 32881 32880 32768 +3 34444 34581 34443 +3 10477 10737 7684 +3 33380 33493 33379 +3 33957 34093 34092 +3 6934 34844 6935 +3 34093 34231 34230 +3 34092 34093 34230 +3 34231 34369 34368 +3 34230 34231 34368 +3 34369 34506 34505 +3 34368 34369 34505 +3 34506 34634 34633 +3 34505 34506 34633 +3 34634 34762 34761 +3 34633 34634 34761 +3 34762 34891 34890 +3 34761 34762 34890 +3 34891 35020 35019 +3 34890 34891 35019 +3 35020 35149 35148 +3 35019 35020 35148 +3 35149 35278 35277 +3 35148 35149 35277 +3 35278 12742 12653 +3 35277 35278 12653 +3 12742 13193 13978 +3 12653 12742 13978 +3 13193 13103 10716 +3 13978 13193 10716 +3 13103 33137 33128 +3 10716 13103 33128 +3 33137 33697 33696 +3 33128 33137 33696 +3 33697 34999 34998 +3 33696 33697 34998 +3 34999 35265 34908 +3 34998 34999 34908 +3 35265 5559 22736 +3 34908 35265 22736 +3 5559 13113 34863 +3 22736 5559 34863 +3 13113 33678 34087 +3 34863 13113 34087 +3 33678 19028 33971 +3 34087 33678 33971 +3 19028 12297 14071 +3 33971 19028 14071 +3 12738 29949 14071 +3 12297 12738 14071 +3 34070 34750 29949 +3 12738 34070 29949 +3 34385 30775 34750 +3 34070 34385 34750 +3 33344 35243 30775 +3 34385 33344 30775 +3 29218 29284 35243 +3 33344 29218 35243 +3 23489 34731 29284 +3 29218 23489 29284 +3 25143 28230 25282 +3 33347 4952 3538 +3 35859 35827 35901 +3 6931 6930 35098 +3 34690 34689 34561 +3 31309 31308 31243 +3 31446 31518 31445 +3 31605 31604 31517 +3 391 28948 13127 +3 12383 391 13127 +3 32737 32849 32736 +3 32208 32309 32207 +3 33504 33503 33390 +3 33391 33504 33390 +3 33196 33195 33090 +3 33196 33301 33195 +3 32120 32121 32220 +3 32221 32322 32321 +3 31469 31468 31401 +3 31723 31722 31627 +3 31729 31730 31829 +3 31830 31928 31829 +3 33699 28581 33700 +3 34216 6411 34354 +3 32678 32677 32564 +3 32565 32678 32564 +3 33913 34048 33912 +3 32921 17322 32807 +3 35881 35835 35366 +3 31043 31042 30981 +3 24063 20199 21763 +3 33454 34078 34216 +3 34354 33454 34216 +3 27405 34202 34078 +3 33454 27405 34078 +3 32569 13703 34202 +3 27405 32569 34202 +3 33792 35261 13703 +3 32569 33792 13703 +3 35226 34056 35261 +3 33792 35226 35261 +3 29268 34986 34056 +3 35226 29268 34056 +3 31208 12934 34986 +3 29268 31208 34986 +3 31750 34779 12934 +3 31208 31750 12934 +3 31750 29689 34359 +3 34779 31750 34359 +3 29689 34346 34345 +3 34359 29689 34345 +3 34346 309 34626 +3 34345 34346 34626 +3 12841 35532 22835 +3 35878 12841 22835 +3 29131 23416 30478 +3 17407 17406 33243 +3 32021 32121 32120 +3 32424 32425 32529 +3 31402 31469 31401 +3 31541 31628 31540 +3 31730 31830 31829 +3 32881 32989 32880 +3 32799 32798 32677 +3 32678 32799 32677 +3 32462 32571 32570 +3 35096 35097 6928 +3 32571 32685 32570 +3 8016 31853 9060 +3 32911 32910 32798 +3 32799 32911 32798 +3 31649 31648 31561 +3 31744 31743 31648 +3 19743 18700 29403 +3 33823 33958 33957 +3 17271 17335 33357 +3 33958 34094 34093 +3 33957 33958 34093 +3 34094 34232 34231 +3 34093 34094 34231 +3 34232 34370 34369 +3 34231 34232 34369 +3 34370 34507 34506 +3 34369 34370 34506 +3 34507 34635 34634 +3 34506 34507 34634 +3 34635 34763 34762 +3 34634 34635 34762 +3 34763 34892 34891 +3 34762 34763 34891 +3 34892 35021 35020 +3 34891 34892 35020 +3 35021 35150 35149 +3 35020 35021 35149 +3 35150 35279 35278 +3 35149 35150 35278 +3 35279 12924 12742 +3 35278 35279 12742 +3 12924 11705 13193 +3 12742 12924 13193 +3 11705 13197 13103 +3 13193 11705 13103 +3 33241 33137 13103 +3 13197 33241 13103 +3 33241 33703 33697 +3 33137 33241 33697 +3 33703 35004 34999 +3 33697 33703 34999 +3 35004 35328 35265 +3 34999 35004 35265 +3 35328 26687 5559 +3 35265 35328 5559 +3 26687 29809 13113 +3 5559 26687 13113 +3 29809 33924 33678 +3 13113 29809 33678 +3 33924 21644 19028 +3 33678 33924 19028 +3 21644 34602 12297 +3 19028 21644 12297 +3 18869 12738 12297 +3 34602 18869 12297 +3 34474 34070 12738 +3 18869 34474 12738 +3 13117 34385 34070 +3 34474 13117 34070 +3 34732 33344 34385 +3 13117 34732 34385 +3 12922 29218 33344 +3 34732 12922 33344 +3 34728 23489 29218 +3 12922 34728 29218 +3 5988 5857 16316 +3 35892 35905 35497 +3 30994 31055 30993 +3 21191 21278 21277 +3 31605 31700 31604 +3 33749 33748 33621 +3 31518 31605 31517 +3 31700 31699 31604 +3 6924 35222 35223 +3 6913 30607 7013 +3 32213 32212 32112 +3 34947 34946 34817 +3 33177 33176 33071 +3 33072 33177 33071 +3 32863 32971 32862 +3 32875 32874 32762 +3 32020 32021 32120 +3 32121 32221 32220 +3 31628 31723 31627 +3 31823 31822 31722 +3 31548 31635 31547 +3 31730 31729 31634 +3 31649 31744 31648 +3 31844 31843 31743 +3 31744 31844 31743 +3 31942 31941 31843 +3 31844 31942 31843 +3 32039 32038 31941 +3 17530 4378 17999 +3 15788 19112 1386 +3 33692 33454 34354 +3 4233 34848 4366 +3 34743 27405 33454 +3 33692 34743 33454 +3 17376 32569 27405 +3 34743 17376 27405 +3 33801 33792 32569 +3 17376 33801 32569 +3 14070 35226 33792 +3 33801 14070 33792 +3 13477 29268 35226 +3 14070 13477 35226 +3 34218 31208 29268 +3 13477 34218 29268 +3 33947 31750 31208 +3 34218 33947 31208 +3 33947 34481 29689 +3 31750 33947 29689 +3 34481 27029 34346 +3 29689 34481 34346 +3 27029 11789 309 +3 34346 27029 309 +3 7097 6993 7098 +3 309 11789 34848 +3 31813 31814 31919 +3 33243 33244 17330 +3 32648 32762 32647 +3 31920 32021 32020 +3 31548 31547 31475 +3 31541 31540 31468 +3 31942 32039 31941 +3 31476 31548 31475 +3 32136 32135 32038 +3 33030 33031 17325 +3 32154 32255 32254 +3 32153 32154 32254 +3 32255 32358 32357 +3 32254 32255 32357 +3 32358 32463 32462 +3 32357 32358 32462 +3 32463 32572 32571 +3 32462 32463 32571 +3 32572 32686 32685 +3 32571 32572 32685 +3 17325 17324 33030 +3 18460 20883 18365 +3 17273 17341 26967 +3 32039 32136 32038 +3 32236 32235 32135 +3 32136 32236 32135 +3 13112 5563 35604 +3 17964 18924 18246 +3 33824 33959 33958 +3 33823 33824 33958 +3 33959 34095 34094 +3 33958 33959 34094 +3 34095 34233 34232 +3 34094 34095 34232 +3 34233 34371 34370 +3 34232 34233 34370 +3 34371 34508 34507 +3 34370 34371 34507 +3 34508 34636 34635 +3 34507 34508 34635 +3 34636 34764 34763 +3 34635 34636 34763 +3 34764 34893 34892 +3 34763 34764 34892 +3 34893 35022 35021 +3 34892 34893 35021 +3 35022 35151 35150 +3 35021 35022 35150 +3 35151 35280 35279 +3 35150 35151 35279 +3 35280 13018 12924 +3 35279 35280 12924 +3 13018 29418 11705 +3 12924 13018 11705 +3 29418 2544 13197 +3 11705 29418 13197 +3 33661 33241 13197 +3 2544 33661 13197 +3 33661 33708 33703 +3 33241 33661 33703 +3 33708 35005 35004 +3 33703 33708 35004 +3 35005 19341 35328 +3 35004 35005 35328 +3 19341 19356 26687 +3 35328 19341 26687 +3 19356 11640 29809 +3 26687 19356 29809 +3 11640 33922 33924 +3 29809 11640 33924 +3 33922 34220 21644 +3 33924 33922 21644 +3 34220 33968 34602 +3 21644 34220 34602 +3 35248 18869 34602 +3 33968 35248 34602 +3 35195 34474 18869 +3 35248 35195 18869 +3 34883 13117 34474 +3 35195 34883 34474 +3 33815 34732 13117 +3 34883 33815 13117 +3 34469 12922 34732 +3 33815 34469 34732 +3 35270 35141 35271 +3 35271 21742 21743 +3 22118 22117 35136 +3 21641 21548 21549 +3 11433 33786 33659 +3 7032 6933 6934 +3 31800 31799 31699 +3 31700 31800 31699 +3 35335 35334 35205 +3 35206 35335 35205 +3 35335 12383 35334 +3 12383 13127 35334 +3 31912 32013 31911 +3 31010 31009 30951 +3 33282 33281 33176 +3 33177 33282 33176 +3 33419 33532 33531 +3 31008 31007 30949 +3 31325 31326 31392 +3 31393 31460 31459 +3 31723 31823 31722 +3 31392 31393 31459 +3 31635 31730 31634 +3 32539 32538 32433 +3 32338 32337 32235 +3 32454 32453 32349 +3 32236 32338 32235 +3 32442 32441 32337 +3 32338 32442 32337 +3 33293 33292 33187 +3 32248 32350 32247 +3 34971 6933 6932 +3 21971 33686 21501 +3 34217 34743 33692 +3 33820 34217 33692 +3 6655 17376 34743 +3 34217 6655 34743 +3 33235 33801 17376 +3 6655 33235 17376 +3 34607 14070 33801 +3 33235 34607 33801 +3 35315 13477 14070 +3 34607 35315 14070 +3 33950 34218 13477 +3 35315 33950 13477 +3 33236 33947 34218 +3 33950 33236 34218 +3 33236 33972 34481 +3 33947 33236 34481 +3 33972 13215 27029 +3 34481 33972 27029 +3 13215 13216 189 +3 27029 13215 11789 +3 7523 7524 7638 +3 31520 31519 31447 +3 31814 31920 31919 +3 31919 31920 32020 +3 32539 32648 32538 +3 32874 32873 32761 +3 13112 11800 11716 +3 31635 31634 31547 +3 32549 32548 32441 +3 32442 32549 32441 +3 17325 17403 17402 +3 32055 32155 32154 +3 3094 3233 3093 +3 32155 32256 32255 +3 32154 32155 32255 +3 32256 32359 32358 +3 32255 32256 32358 +3 32359 32464 32463 +3 32358 32359 32463 +3 32464 32573 32572 +3 32463 32464 32572 +3 32573 32687 32686 +3 32572 32573 32686 +3 32687 32807 32806 +3 32686 32687 32806 +3 32723 32724 32835 +3 32806 32807 32919 +3 32864 32972 32863 +3 114 34844 34845 +3 32662 32661 32548 +3 32549 32662 32548 +3 32783 32782 32661 +3 32662 32783 32661 +3 32895 32894 32782 +3 32783 32895 32782 +3 33825 28585 28584 +3 20883 18460 20963 +3 33825 33960 33959 +3 33824 33825 33959 +3 33960 34096 34095 +3 33959 33960 34095 +3 34096 34234 34233 +3 34095 34096 34233 +3 34234 34372 34371 +3 34233 34234 34371 +3 34372 34509 34508 +3 34371 34372 34508 +3 34509 34637 34636 +3 34508 34509 34636 +3 34637 34765 34764 +3 34636 34637 34764 +3 34765 34894 34893 +3 34764 34765 34893 +3 34894 35023 35022 +3 34893 34894 35022 +3 35023 35152 35151 +3 35022 35023 35151 +3 35152 35281 35280 +3 35151 35152 35280 +3 35281 13704 13018 +3 35280 35281 13018 +3 13704 19072 29418 +3 13018 13704 29418 +3 19072 12041 2544 +3 29418 19072 2544 +3 12041 33670 33661 +3 2544 12041 33661 +3 33670 33710 33708 +3 33661 33670 33708 +3 33710 35007 35005 +3 33708 33710 35005 +3 35007 31273 19341 +3 35005 35007 19341 +3 31273 27609 19356 +3 19341 31273 19356 +3 27609 13126 11640 +3 19356 27609 11640 +3 13126 34082 33922 +3 11640 13126 33922 +3 34082 34357 34220 +3 33922 34082 34220 +3 34357 33836 33968 +3 34220 34357 33968 +3 33352 35248 33968 +3 33836 33352 33968 +3 34865 35195 35248 +3 33352 34865 35248 +3 34882 34883 35195 +3 34865 34882 35195 +3 34067 33815 34883 +3 34882 34067 34883 +3 32681 34469 33815 +3 34067 32681 33815 +3 33176 33175 33070 +3 19482 28948 17383 +3 33026 9326 33025 +3 35334 13127 35333 +3 31906 31905 31799 +3 31800 31906 31799 +3 35077 35076 34947 +3 34948 35077 34947 +3 35077 35206 35076 +3 35206 35205 35076 +3 31247 31248 31312 +3 31380 31379 31312 +3 30891 30945 30890 +3 34947 35076 34946 +3 33391 33390 33281 +3 33282 33391 33281 +3 33408 33521 33407 +3 33640 33767 33639 +3 31460 31532 31531 +3 31459 31460 31531 +3 33520 33519 33406 +3 33407 33520 33406 +3 32648 32647 32538 +3 32762 32874 32761 +3 35330 27028 35329 +3 31726 31727 31826 +3 33003 33002 32894 +3 32895 33003 32894 +3 33109 33108 33002 +3 33003 33109 33002 +3 17324 17401 17323 +3 32142 32242 32141 +3 26424 32055 12129 +3 32352 11653 11577 +3 18934 34217 33820 +3 33026 18934 33820 +3 13293 6655 34217 +3 18934 13293 34217 +3 33793 33235 6655 +3 13293 33793 6655 +3 34603 34607 33235 +3 33793 34603 33235 +3 30342 35315 34607 +3 34603 30342 34607 +3 34475 33950 35315 +3 30342 34475 35315 +3 34619 33236 33950 +3 34475 34619 33950 +3 34619 32915 33972 +3 33236 34619 33972 +3 32915 13216 13215 +3 33972 32915 13215 +3 7636 7521 7522 +3 5551 34060 34851 +3 31714 31814 31813 +3 17360 13708 17292 +3 33088 33087 32981 +3 31713 31714 31813 +3 31406 31473 31405 +3 32762 32761 32647 +3 33214 33213 33108 +3 31055 31056 31117 +3 33109 33214 33108 +3 30535 30533 30400 +3 32056 32055 31955 +3 31956 32056 31955 +3 32156 32155 32055 +3 32056 32156 32055 +3 32257 32256 32155 +3 32156 32257 32155 +3 32360 32359 32256 +3 32257 32360 32256 +3 32465 32464 32359 +3 32360 32465 32359 +3 32574 32573 32464 +3 32465 32574 32464 +3 32688 32687 32573 +3 32574 32688 32573 +3 32688 32808 32807 +3 32687 32688 32807 +3 8687 33662 18703 +3 18703 33662 19895 +3 34074 19937 34075 +3 17457 17456 27028 +3 17454 17455 17542 +3 35197 17452 17451 +3 33319 33318 33213 +3 22494 22593 30202 +3 33214 33319 33213 +3 33428 33427 33318 +3 21736 21735 34499 +3 33319 33428 33318 +3 33698 33826 33825 +3 32675 32674 32561 +3 33826 33961 33960 +3 33825 33826 33960 +3 33961 34097 34096 +3 33960 33961 34096 +3 34097 34235 34234 +3 34096 34097 34234 +3 34235 34373 34372 +3 34234 34235 34372 +3 34373 34510 34509 +3 34372 34373 34509 +3 34510 34638 34637 +3 34509 34510 34637 +3 34638 34766 34765 +3 34637 34638 34765 +3 34766 34895 34894 +3 34765 34766 34894 +3 34895 35024 35023 +3 34894 34895 35023 +3 35024 35153 35152 +3 35023 35024 35152 +3 35153 35282 35281 +3 35152 35153 35281 +3 35282 13606 13704 +3 35281 35282 13704 +3 13606 69 19072 +3 13704 13606 19072 +3 69 11698 12041 +3 19072 69 12041 +3 11698 33939 33670 +3 12041 11698 33670 +3 33939 33787 33710 +3 33670 33939 33710 +3 33787 35008 35007 +3 33710 33787 35007 +3 35008 31652 31273 +3 35007 35008 31273 +3 31652 28462 27609 +3 31273 31652 27609 +3 28462 20863 13126 +3 27609 28462 13126 +3 20863 34867 34082 +3 13126 20863 34082 +3 34867 29693 34357 +3 34082 34867 34357 +3 29693 28990 33836 +3 34357 29693 33836 +3 35252 33352 33836 +3 28990 35252 33836 +3 33665 34865 33352 +3 35252 33665 33352 +3 35244 34882 34865 +3 33665 35244 34865 +3 33129 34067 34882 +3 35244 33129 34882 +3 28876 32681 34067 +3 33129 28876 34067 +3 21742 35271 35141 +3 35536 35810 35606 +3 31120 31121 31183 +3 13127 13984 35333 +3 32007 32006 31905 +3 31906 32007 31905 +3 34948 34947 34818 +3 34819 34948 34818 +3 32740 32852 32739 +3 32960 32959 32851 +3 32205 32306 32204 +3 32409 32408 32305 +3 32966 32965 32857 +3 32858 32966 32857 +3 32966 33072 32965 +3 33072 33071 32965 +3 31330 31331 31397 +3 31735 31734 31639 +3 31532 31619 31618 +3 31618 31619 31713 +3 33193 33298 33192 +3 33407 33406 33297 +3 32203 32202 32102 +3 34825 34954 34824 +3 32016 32116 32015 +3 32327 32326 32225 +3 33541 33540 33427 +3 33428 33541 33427 +3 13120 3098 3097 +3 4194 27644 30074 +3 33026 10723 33351 +3 34721 6941 6940 +3 9175 33707 33351 +3 33351 18934 33026 +3 17284 35300 13221 +3 33586 13293 18934 +3 33351 33586 18934 +3 35108 33793 13293 +3 33586 35108 13293 +3 34061 34603 33793 +3 35108 34061 33793 +3 28341 30342 34603 +3 34061 28341 34603 +3 34197 34475 30342 +3 28341 34197 30342 +3 29083 34619 34475 +3 34197 29083 34475 +3 34360 32915 34619 +3 29083 34360 34619 +3 34360 25152 13216 +3 32915 34360 13216 +3 21366 33701 21365 +3 6393 25152 6543 +3 31326 31393 31392 +3 21194 21280 21193 +3 32982 32981 32873 +3 32982 33088 32981 +3 33077 33182 33076 +3 32410 32515 32409 +3 32565 11651 11650 +3 13624 23733 13625 +3 19974 31408 19975 +3 30533 30535 25011 +3 32057 32056 31956 +3 31957 32057 31956 +3 32157 32156 32056 +3 32057 32157 32056 +3 32258 32257 32156 +3 32157 32258 32156 +3 32361 32360 32257 +3 32258 32361 32257 +3 32466 32465 32360 +3 32361 32466 32360 +3 32575 32574 32465 +3 32466 32575 32465 +3 32689 32688 32574 +3 32575 32689 32574 +3 32689 32809 32808 +3 32688 32689 32808 +3 32809 32922 32921 +3 32808 32809 32921 +3 35420 35463 35452 +3 13409 13607 5560 +3 35417 22834 35562 +3 20893 11923 192 +3 11486 6888 11429 +3 32679 32565 11650 +3 6886 34191 6888 +3 33698 28582 33699 +3 11487 11429 11430 +3 28343 25838 25980 +3 33699 33827 33826 +3 33698 33699 33826 +3 33827 33962 33961 +3 33826 33827 33961 +3 33962 34098 34097 +3 33961 33962 34097 +3 34098 34236 34235 +3 34097 34098 34235 +3 34236 34374 34373 +3 34235 34236 34373 +3 34374 34511 34510 +3 34373 34374 34510 +3 34511 34639 34638 +3 34510 34511 34638 +3 34639 34767 34766 +3 34638 34639 34766 +3 34767 34896 34895 +3 34766 34767 34895 +3 34896 35025 35024 +3 34895 34896 35024 +3 35025 35154 35153 +3 35024 35025 35153 +3 35154 35283 35282 +3 35153 35154 35282 +3 35283 13605 13606 +3 35282 35283 13606 +3 13605 30741 69 +3 13606 13605 69 +3 30741 2492 11698 +3 69 30741 11698 +3 2492 33945 33939 +3 11698 2492 33939 +3 33945 33788 33787 +3 33939 33945 33787 +3 33788 35009 35008 +3 33787 33788 35008 +3 35009 31749 31652 +3 35008 35009 31652 +3 31749 34853 28462 +3 31652 31749 28462 +3 34853 35247 20863 +3 28462 34853 20863 +3 35247 35233 34867 +3 20863 35247 34867 +3 35233 34076 29693 +3 34867 35233 29693 +3 34076 27030 28990 +3 29693 34076 28990 +3 35107 35252 28990 +3 27030 35107 28990 +3 34077 33665 35252 +3 35107 34077 35252 +3 33669 35244 33665 +3 34077 33669 33665 +3 33342 33129 35244 +3 33669 33342 35244 +3 33342 17851 33129 +3 28876 17851 17527 +3 17280 35169 17349 +3 800 681 682 +3 33741 33740 33613 +3 18937 35165 18299 +3 32107 32106 32006 +3 32007 32107 32006 +3 34691 34690 34562 +3 34563 34691 34562 +3 32517 32516 32411 +3 32412 32517 32411 +3 32746 32745 32631 +3 32632 32746 32631 +3 32746 32858 32745 +3 32858 32857 32745 +3 30950 31008 30949 +3 31069 31068 31007 +3 30950 30949 30895 +3 30896 30950 30895 +3 31531 31532 31618 +3 31619 31714 31713 +3 33193 33192 33087 +3 33298 33407 33297 +3 32350 32349 32247 +3 31118 31181 31180 +3 17399 32919 17400 +3 33779 33913 33778 +3 3229 3228 14068 +3 33652 33779 33651 +3 34048 34047 33912 +3 33077 33076 32970 +3 33295 33404 33294 +3 31727 31827 31826 +3 32986 32985 32877 +3 33707 33586 33351 +3 34720 6974 34719 +3 35124 35108 33586 +3 33707 35124 33586 +3 35229 34061 35108 +3 35124 35229 35108 +3 35229 7684 34061 +3 28341 7684 10737 +3 11263 34197 10737 +3 19523 35101 19522 +3 31853 29083 34197 +3 6945 6946 7044 +3 32682 34360 29083 +3 31853 32682 29083 +3 21934 28349 21935 +3 34360 32682 25152 +3 32144 32244 32143 +3 19482 17383 17460 +3 33766 33765 33638 +3 31260 31261 31325 +3 34587 34586 34449 +3 32874 32982 32873 +3 33019 33018 32910 +3 32515 32624 32514 +3 33913 33912 33778 +3 31564 31563 26078 +3 31958 31957 31856 +3 31857 31958 31856 +3 32058 32057 31957 +3 31958 32058 31957 +3 32158 32157 32057 +3 32058 32158 32057 +3 32259 32258 32157 +3 32158 32259 32157 +3 32362 32361 32258 +3 32259 32362 32258 +3 32467 32466 32361 +3 32362 32467 32361 +3 32576 32575 32466 +3 32467 32576 32466 +3 32690 32689 32575 +3 32576 32690 32575 +3 32810 32809 32689 +3 32690 32810 32689 +3 32923 32922 32809 +3 32810 32923 32809 +3 33031 33030 32922 +3 32923 33031 32922 +3 21222 23371 30023 +3 34055 6888 34191 +3 32911 33019 32910 +3 33580 28580 28579 +3 33125 33124 33018 +3 33533 33652 33532 +3 6928 7027 7026 +3 6541 6414 6415 +3 33700 33828 33827 +3 33699 33700 33827 +3 33828 33963 33962 +3 33827 33828 33962 +3 33963 34099 34098 +3 33962 33963 34098 +3 34099 34237 34236 +3 34098 34099 34236 +3 34237 34375 34374 +3 34236 34237 34374 +3 34375 34512 34511 +3 34374 34375 34511 +3 34512 34640 34639 +3 34511 34512 34639 +3 34640 34768 34767 +3 34639 34640 34767 +3 34768 34897 34896 +3 34767 34768 34896 +3 34897 35026 35025 +3 34896 34897 35025 +3 35026 35155 35154 +3 35025 35026 35154 +3 35155 35284 35283 +3 35154 35155 35283 +3 35284 12480 13605 +3 35283 35284 13605 +3 12480 30364 30741 +3 13605 12480 30741 +3 30364 12040 2492 +3 30741 30364 2492 +3 12040 34066 33945 +3 2492 12040 33945 +3 34066 33798 33788 +3 33945 34066 33788 +3 33798 35010 35009 +3 33788 33798 35009 +3 35010 31850 31749 +3 35009 35010 31749 +3 31850 13224 34853 +3 31749 31850 34853 +3 13224 27172 35247 +3 34853 13224 35247 +3 27172 35236 35233 +3 35247 27172 35233 +3 35236 12658 34076 +3 35233 35236 34076 +3 34201 27030 34076 +3 12658 34201 34076 +3 34201 35121 35107 +3 27030 34201 35107 +3 33809 34077 35107 +3 35121 33809 35107 +3 33561 33669 34077 +3 33809 33561 34077 +3 33559 33342 33669 +3 33561 33559 33669 +3 35501 35679 35471 +3 33559 35006 33342 +3 21546 21456 21457 +3 6154 6283 6153 +3 32878 32877 32765 +3 28876 17527 17535 +3 32207 32206 32106 +3 32107 32207 32106 +3 34563 34562 34425 +3 34426 34563 34425 +3 33878 33877 33743 +3 33744 33878 33743 +3 32632 32631 32522 +3 32523 32632 32522 +3 31068 31069 31130 +3 31131 31194 31193 +3 31008 31069 31007 +3 31069 31131 31130 +3 31134 31197 31133 +3 31261 31260 31196 +3 31197 31261 31196 +3 31261 31326 31325 +3 33088 33193 33087 +3 33298 33297 33192 +3 34812 34941 34811 +3 32624 32623 32514 +3 33019 33125 33018 +3 34322 34460 34321 +3 34460 34597 34596 +3 33761 33760 33633 +3 32317 32316 32215 +3 32637 32751 32636 +3 32863 32862 32750 +3 31815 31816 31921 +3 32755 32867 32866 +3 33283 33282 33177 +3 32734 32846 32733 +3 31999 31998 31897 +3 33886 33885 33751 +3 32300 32299 32198 +3 35124 9796 35229 +3 22849 12988 6252 +3 8761 9566 9175 +3 28234 33345 13057 +3 21642 34499 21734 +3 21456 33957 21457 +3 21932 35140 35269 +3 31590 31685 31589 +3 33766 33900 33765 +3 6359 6360 6487 +3 27895 30876 26349 +3 34035 34034 33899 +3 33830 33702 21278 +3 33900 33899 33765 +3 33900 34035 33899 +3 33073 33178 33072 +3 33639 33766 33638 +3 33068 33173 33067 +3 34570 34698 34569 +3 31922 32023 32022 +3 31478 31564 23268 +3 25320 31478 23268 +3 31959 31958 31857 +3 31858 31959 31857 +3 32059 32058 31958 +3 31959 32059 31958 +3 32159 32158 32058 +3 32059 32159 32058 +3 32260 32259 32158 +3 32159 32260 32158 +3 32363 32362 32259 +3 32260 32363 32259 +3 32468 32467 32362 +3 32363 32468 32362 +3 32577 32576 32467 +3 32468 32577 32467 +3 32691 32690 32576 +3 32577 32691 32576 +3 32811 32810 32690 +3 32691 32811 32690 +3 32924 32923 32810 +3 32811 32924 32810 +3 33032 33031 32923 +3 32924 33032 32923 +3 33031 33032 17326 +3 26850 33589 33711 +3 8016 32682 31853 +3 3092 34329 3093 +3 33533 33532 33419 +3 33064 33169 33063 +3 33230 33229 33124 +3 33580 33701 33700 +3 22036 21551 22133 +3 33701 33829 33828 +3 33700 33701 33828 +3 33829 33964 33963 +3 33828 33829 33963 +3 33964 34100 34099 +3 33963 33964 34099 +3 34100 34238 34237 +3 34099 34100 34237 +3 34238 34376 34375 +3 34237 34238 34375 +3 34376 34513 34512 +3 34375 34376 34512 +3 34513 34641 34640 +3 34512 34513 34640 +3 34641 34769 34768 +3 34640 34641 34768 +3 34769 34898 34897 +3 34768 34769 34897 +3 34898 35027 35026 +3 34897 34898 35026 +3 35027 35156 35155 +3 35026 35027 35155 +3 35156 35285 35284 +3 35155 35156 35284 +3 9627 12480 35284 +3 35285 9627 35284 +3 11448 30364 12480 +3 9627 11448 12480 +3 11448 11510 12040 +3 30364 11448 12040 +3 11510 34105 34066 +3 12040 11510 34066 +3 34105 33799 33798 +3 34066 34105 33798 +3 33799 35011 35010 +3 33798 33799 35010 +3 35011 31851 31850 +3 35010 35011 31850 +3 31851 11882 13224 +3 31850 31851 13224 +3 11882 12552 27172 +3 13224 11882 27172 +3 12552 34739 35236 +3 27172 12552 35236 +3 34739 21842 12658 +3 35236 34739 12658 +3 21842 13462 34201 +3 12658 21842 34201 +3 25132 35121 34201 +3 13462 25132 34201 +3 33808 33809 35121 +3 25132 33808 35121 +3 35295 33561 33809 +3 33808 35295 33809 +3 33677 33559 33561 +3 35295 33677 33561 +3 34877 35006 33559 +3 33677 34877 33559 +3 28740 8687 35006 +3 34877 28740 35006 +3 21545 21455 21456 +3 28740 33662 8687 +3 7173 33431 33432 +3 6942 7042 7041 +3 34426 34425 34287 +3 34288 34426 34287 +3 33498 33617 33497 +3 33744 33743 33616 +3 32523 32522 32417 +3 32418 32523 32417 +3 31130 31131 31193 +3 31194 31258 31257 +3 31011 31072 31010 +3 31134 31133 31071 +3 31197 31196 31133 +3 31072 31134 31071 +3 34171 34170 34034 +3 34035 34171 34034 +3 33639 33638 33519 +3 33520 33639 33519 +3 32248 32247 32147 +3 18595 19875 18505 +3 7639 7638 7524 +3 32001 32000 31899 +3 33420 33533 33419 +3 33125 33230 33124 +3 33335 33334 33229 +3 33230 33335 33229 +3 33444 33443 33334 +3 33335 33444 33334 +3 34683 34682 34554 +3 30889 30943 30888 +3 17288 17355 17287 +3 33937 24791 2959 +3 17293 29270 17294 +3 35135 2140 2141 +3 31608 31703 31607 +3 12472 13575 391 +3 33061 33060 32954 +3 31053 31054 31115 +3 32302 32405 32301 +3 32745 32744 32630 +3 31794 31793 31693 +3 31116 31179 31178 +3 32845 32844 32732 +3 32733 32845 32732 +3 34142 34141 34005 +3 31114 31177 31176 +3 33737 33871 33736 +3 34006 34142 34005 +3 31003 31064 31002 +3 31811 31812 31917 +3 32013 32113 32012 +3 31859 31858 31752 +3 31753 31859 31752 +3 31960 31959 31858 +3 31859 31960 31858 +3 32060 32059 31959 +3 31960 32060 31959 +3 32160 32159 32059 +3 32060 32160 32059 +3 32261 32260 32159 +3 32160 32261 32159 +3 32364 32363 32260 +3 32261 32364 32260 +3 32469 32468 32363 +3 32364 32469 32363 +3 32578 32577 32468 +3 32469 32578 32468 +3 32692 32691 32577 +3 32578 32692 32577 +3 32812 32811 32691 +3 32692 32812 32691 +3 32925 32924 32811 +3 32812 32925 32811 +3 33033 33032 32924 +3 32925 33033 32924 +3 33033 33139 33138 +3 33032 33033 33138 +3 18997 18897 19650 +3 33139 33243 33138 +3 17318 19572 35340 +3 33091 33090 32984 +3 31745 31744 31649 +3 31650 31745 31649 +3 34111 17273 33975 +3 6924 6925 7023 +3 33702 33830 33829 +3 33701 33702 33829 +3 33830 33965 33964 +3 33829 33830 33964 +3 33965 34101 34100 +3 33964 33965 34100 +3 34101 34239 34238 +3 34100 34101 34238 +3 34239 34377 34376 +3 34238 34239 34376 +3 34377 34514 34513 +3 34376 34377 34513 +3 34514 34642 34641 +3 34513 34514 34641 +3 34642 34770 34769 +3 34641 34642 34769 +3 34770 34899 34898 +3 34769 34770 34898 +3 34899 35028 35027 +3 34898 34899 35027 +3 35028 35157 35156 +3 35027 35028 35156 +3 35157 35286 35285 +3 35156 35157 35285 +3 35286 12060 9627 +3 35285 35286 9627 +3 12747 11448 9627 +3 12060 12747 9627 +3 13700 11510 11448 +3 12747 13700 11448 +3 13700 34204 34105 +3 11510 13700 34105 +3 34204 33800 33799 +3 34105 34204 33799 +3 33800 35012 35011 +3 33799 33800 35011 +3 35012 31951 31851 +3 35011 35012 31851 +3 31951 11772 11882 +3 31851 31951 11882 +3 11772 35260 12552 +3 11882 11772 12552 +3 35260 33468 34739 +3 12552 35260 34739 +3 33468 34193 21842 +3 34739 33468 21842 +3 34193 34879 13462 +3 21842 34193 13462 +3 34879 34749 25132 +3 13462 34879 25132 +3 33346 33808 25132 +3 34749 33346 25132 +3 34980 35295 33808 +3 33346 34980 33808 +3 34980 33795 33677 +3 35295 34980 33677 +3 33795 13396 34877 +3 33677 33795 34877 +3 13396 28995 28740 +3 34877 13396 28740 +3 28995 21968 33662 +3 28740 28995 33662 +3 28253 23816 20092 +3 35942 34730 35440 +3 17457 27028 13223 +3 23945 19794 26242 +3 30992 31053 30991 +3 33617 33744 33616 +3 32418 32417 32314 +3 32315 32418 32314 +3 31193 31194 31257 +3 31323 31322 31257 +3 30953 31011 30952 +3 31072 31071 31010 +3 34584 34712 34583 +3 34840 34839 34711 +3 34447 34446 34308 +3 34309 34447 34308 +3 33500 33499 33386 +3 34814 34813 34685 +3 33763 33897 33762 +3 31444 31443 31376 +3 19346 14358 14344 +3 34686 34685 34557 +3 32764 32876 32763 +3 32876 32984 32875 +3 31845 31844 31744 +3 31745 31845 31744 +3 31943 31942 31844 +3 31845 31943 31844 +3 31803 31802 31702 +3 34717 34718 34845 +3 32040 32039 31942 +3 34718 34717 34589 +3 31943 32040 31942 +3 32137 32136 32039 +3 32040 32137 32039 +3 32237 32236 32136 +3 32137 32237 32136 +3 32339 32338 32236 +3 32237 32339 32236 +3 32443 32442 32338 +3 32339 32443 32338 +3 32550 32549 32442 +3 32443 32550 32442 +3 32663 32662 32549 +3 32550 32663 32549 +3 32784 32783 32662 +3 32663 32784 32662 +3 31654 31754 31753 +3 31860 31859 31753 +3 31754 31860 31753 +3 31961 31960 31859 +3 31860 31961 31859 +3 32061 32060 31960 +3 31961 32061 31960 +3 32161 32160 32060 +3 32061 32161 32060 +3 32262 32261 32160 +3 32161 32262 32160 +3 32365 32364 32261 +3 32262 32365 32261 +3 32470 32469 32364 +3 32365 32470 32364 +3 32579 32578 32469 +3 32470 32579 32469 +3 32693 32692 32578 +3 32579 32693 32578 +3 32813 32812 32692 +3 32693 32813 32692 +3 32926 32925 32812 +3 32813 32926 32812 +3 33034 33033 32925 +3 32926 33034 32925 +3 33140 33139 33033 +3 33034 33140 33033 +3 33140 33244 33243 +3 33139 33140 33243 +3 17344 17275 17276 +3 21278 21192 21279 +3 32896 32895 32783 +3 32784 32896 32783 +3 17970 18061 20448 +3 33830 21280 33965 +3 22119 22214 22118 +3 33966 21280 21194 +3 12463 11963 35254 +3 22118 35136 22119 +3 33966 34102 34101 +3 33965 33966 34101 +3 34102 34240 34239 +3 34101 34102 34239 +3 34240 34378 34377 +3 34239 34240 34377 +3 34378 34515 34514 +3 34377 34378 34514 +3 34515 34643 34642 +3 34514 34515 34642 +3 34643 34771 34770 +3 34642 34643 34770 +3 34771 34900 34899 +3 34770 34771 34899 +3 34900 35029 35028 +3 34899 34900 35028 +3 35029 35158 35157 +3 35028 35029 35157 +3 35158 35287 35286 +3 35157 35158 35286 +3 35287 14167 12060 +3 35286 35287 12060 +3 14167 11803 12747 +3 12060 14167 12747 +3 11803 13128 13700 +3 12747 11803 13700 +3 13128 34213 34204 +3 13700 13128 34204 +3 34213 33805 33800 +3 34204 34213 33800 +3 33805 35013 35012 +3 33800 33805 35012 +3 35013 32148 31951 +3 35012 35013 31951 +3 32148 27897 11772 +3 31951 32148 11772 +3 27897 33455 35260 +3 11772 27897 35260 +3 33455 35106 33468 +3 35260 33455 33468 +3 35106 34748 34193 +3 33468 35106 34193 +3 34748 19410 34879 +3 34193 34748 34879 +3 27958 34749 34879 +3 19410 27958 34879 +3 27958 29283 33346 +3 34749 27958 33346 +3 29283 35327 34980 +3 33346 29283 34980 +3 33929 33795 34980 +3 35327 33929 34980 +3 33929 28105 13396 +3 33795 33929 13396 +3 28105 13382 28995 +3 13396 28105 28995 +3 13382 29128 21968 +3 28995 13382 21968 +3 34979 5691 21968 +3 29128 34979 21968 +3 25391 23816 25096 +3 2009 2789 30805 +3 35069 35198 35068 +3 17290 13708 17359 +3 32315 32314 32213 +3 32214 32315 32213 +3 31258 31323 31257 +3 31323 31390 31389 +3 30899 30953 30898 +3 31011 31010 30952 +3 34712 34840 34711 +3 34969 34968 34839 +3 34590 34589 34452 +3 34453 34590 34452 +3 34453 34452 34314 +3 34315 34453 34314 +3 33004 33003 32895 +3 32896 33004 32895 +3 33110 33109 33003 +3 33004 33110 33003 +3 34315 34314 34176 +3 34177 34315 34176 +3 33215 33214 33109 +3 33110 33215 33109 +3 33320 33319 33214 +3 33215 33320 33214 +3 33906 34041 34040 +3 34177 34176 34040 +3 34590 34718 34589 +3 28351 25131 28352 +3 33429 33428 33319 +3 33644 33645 33771 +3 33320 33429 33319 +3 31755 31754 31654 +3 31655 31755 31654 +3 31861 31860 31754 +3 31755 31861 31754 +3 31962 31961 31860 +3 31861 31962 31860 +3 32062 32061 31961 +3 31962 32062 31961 +3 32162 32161 32061 +3 32062 32162 32061 +3 32263 32262 32161 +3 32162 32263 32161 +3 32366 32365 32262 +3 32263 32366 32262 +3 32471 32470 32365 +3 32366 32471 32365 +3 32580 32579 32470 +3 32471 32580 32470 +3 32694 32693 32579 +3 32580 32694 32579 +3 32814 32813 32693 +3 32694 32814 32693 +3 32927 32926 32813 +3 32814 32927 32813 +3 33035 33034 32926 +3 32927 33035 32926 +3 33141 33140 33034 +3 33035 33141 33034 +3 33141 33245 33244 +3 33140 33141 33244 +3 33244 33245 17330 +3 35830 35629 35854 +3 33542 33541 33428 +3 34556 34555 34418 +3 33429 33542 33428 +3 21195 21194 21107 +3 33378 33377 33268 +3 33269 33378 33268 +3 8309 17319 18798 +3 6928 6926 35224 +3 33967 34103 34102 +3 33966 33967 34102 +3 34103 34241 34240 +3 34102 34103 34240 +3 34241 34379 34378 +3 34240 34241 34378 +3 34379 34516 34515 +3 34378 34379 34515 +3 34516 34644 34643 +3 34515 34516 34643 +3 34644 34772 34771 +3 34643 34644 34771 +3 34901 34900 34771 +3 34772 34901 34771 +3 35030 35029 34900 +3 34901 35030 34900 +3 35030 35159 35158 +3 35029 35030 35158 +3 35159 35288 35287 +3 35158 35159 35287 +3 35288 27025 14167 +3 35287 35288 14167 +3 27025 30353 11803 +3 14167 27025 11803 +3 29406 13128 11803 +3 30353 29406 11803 +3 34224 34213 13128 +3 29406 34224 13128 +3 34224 33806 33805 +3 34213 34224 33805 +3 33806 35038 35013 +3 33805 33806 35013 +3 35038 32149 32148 +3 35013 35038 32148 +3 32149 13970 27897 +3 32148 32149 27897 +3 13970 34747 33455 +3 27897 13970 33455 +3 34747 33466 35106 +3 33455 34747 35106 +3 33466 26403 34748 +3 35106 33466 34748 +3 26403 34880 19410 +3 34748 26403 19410 +3 34880 34729 27958 +3 19410 34880 27958 +3 34729 34106 29283 +3 27958 34729 29283 +3 34106 32566 35327 +3 29283 34106 35327 +3 32566 28743 33929 +3 35327 32566 33929 +3 28743 13032 28105 +3 33929 28743 28105 +3 13032 5188 13382 +3 28105 13032 13382 +3 5188 12036 29128 +3 13382 5188 29128 +3 12036 34214 34979 +3 29128 12036 34979 +3 13677 2009 30805 +3 2009 13677 2008 +3 6929 7027 6928 +3 22434 30607 6913 +3 32214 32213 32113 +3 32114 32214 32113 +3 31322 31323 31389 +3 31457 31456 31389 +3 32903 32902 32790 +3 30953 30952 30898 +3 34840 34969 34839 +3 33224 33329 33223 +3 33304 33413 33303 +3 33413 33526 33525 +3 17330 17331 17408 +3 33500 33619 33499 +3 33746 33880 33745 +3 32871 32979 32978 +3 32870 32871 32978 +3 33311 33310 33205 +3 33413 33412 33303 +3 34047 34046 33911 +3 34321 34320 34182 +3 34837 34836 34708 +3 33199 33304 33198 +3 34581 34709 34580 +3 34584 34583 34446 +3 34041 34177 34040 +3 34712 34711 34583 +3 34447 34584 34446 +3 33526 33645 33644 +3 33771 33772 33905 +3 34168 34167 34031 +3 34032 34168 34031 +3 31932 31933 32029 +3 34183 34182 34046 +3 33778 33912 33777 +3 33206 33205 33100 +3 31756 31755 31655 +3 31656 31756 31655 +3 31862 31861 31755 +3 31756 31862 31755 +3 31963 31962 31861 +3 31862 31963 31861 +3 32063 32062 31962 +3 31963 32063 31962 +3 32163 32162 32062 +3 32063 32163 32062 +3 32264 32263 32162 +3 32163 32264 32162 +3 32367 32366 32263 +3 32264 32367 32263 +3 32472 32471 32366 +3 32367 32472 32366 +3 32581 32580 32471 +3 32472 32581 32471 +3 32695 32694 32580 +3 32581 32695 32580 +3 32815 32814 32694 +3 32695 32815 32694 +3 32928 32927 32814 +3 32815 32928 32814 +3 33036 33035 32927 +3 32928 33036 32927 +3 33142 33141 33035 +3 33036 33142 33035 +3 33246 33245 33141 +3 33142 33246 33141 +3 28070 25658 24203 +3 34057 2685 2686 +3 33304 33303 33198 +3 34103 33967 21196 +3 32679 32678 32565 +3 34943 34942 34813 +3 34683 34811 34682 +3 33779 33778 33651 +3 18055 19167 18916 +3 20893 33956 33578 +3 35006 17851 33342 +3 26006 26008 26149 +3 34104 34242 34241 +3 34103 34104 34241 +3 34242 34380 34379 +3 34241 34242 34379 +3 34380 34517 34516 +3 34379 34380 34516 +3 34517 34645 34644 +3 34516 34517 34644 +3 34645 34773 34772 +3 34644 34645 34772 +3 34773 34902 34901 +3 34772 34773 34901 +3 34902 35031 35030 +3 34901 34902 35030 +3 35031 35160 35159 +3 35030 35031 35159 +3 35289 35288 35159 +3 35160 35289 35159 +3 17481 27025 35288 +3 35289 17481 35288 +3 29416 30353 27025 +3 17481 29416 27025 +3 13689 29406 30353 +3 29416 13689 30353 +3 34348 34224 29406 +3 13689 34348 29406 +3 34348 33822 33806 +3 34224 34348 33806 +3 33822 35099 35038 +3 33806 33822 35038 +3 35099 32152 32149 +3 35038 35099 32149 +3 32152 11966 13970 +3 32149 32152 13970 +3 11966 33943 34747 +3 13970 11966 34747 +3 33943 33575 33466 +3 34747 33943 33466 +3 33575 34221 26403 +3 33466 33575 26403 +3 33818 34880 26403 +3 34221 33818 26403 +3 33818 33133 34729 +3 34880 33818 34729 +3 33133 35259 34106 +3 34729 33133 34106 +3 35259 32355 32566 +3 34106 35259 32566 +3 32355 19464 28743 +3 32566 32355 28743 +3 19464 33447 13032 +3 28743 19464 13032 +3 33447 35015 5188 +3 13032 33447 5188 +3 35015 34854 12036 +3 5188 35015 12036 +3 34854 33797 34214 +3 12036 34854 34214 +3 33797 34975 32683 +3 34214 33797 32683 +3 17396 17397 17485 +3 19765 15617 21681 +3 32014 32114 32013 +3 13754 19346 24847 +3 31390 31457 31389 +3 31529 31528 31456 +3 32791 32790 32669 +3 32670 32791 32669 +3 33329 33438 33437 +3 34964 34963 34834 +3 32988 33094 32987 +3 33199 33198 33093 +3 31052 31053 31114 +3 31115 31178 31177 +3 31245 31310 31244 +3 31377 31376 31309 +3 32223 32324 32323 +3 32222 32223 32323 +3 31621 31716 31715 +3 31921 31922 32022 +3 34688 34816 34687 +3 32880 32879 32767 +3 32768 32880 32767 +3 33060 33059 32953 +3 34969 35098 35097 +3 34968 34969 35097 +3 33768 33767 33640 +3 33525 33526 33644 +3 33645 33772 33771 +3 31729 31829 31828 +3 33412 33413 33525 +3 30934 30992 30933 +3 31728 31729 31828 +3 32995 33101 32994 +3 31562 31657 31656 +3 31757 31756 31656 +3 31657 31757 31656 +3 31863 31862 31756 +3 31757 31863 31756 +3 31964 31963 31862 +3 31863 31964 31862 +3 32064 32063 31963 +3 31964 32064 31963 +3 32164 32163 32063 +3 32064 32164 32063 +3 32265 32264 32163 +3 32164 32265 32163 +3 32368 32367 32264 +3 32265 32368 32264 +3 32473 32472 32367 +3 32368 32473 32367 +3 32582 32581 32472 +3 32473 32582 32472 +3 32696 32695 32581 +3 32582 32696 32581 +3 32816 32815 32695 +3 32696 32816 32695 +3 32929 32928 32815 +3 32816 32929 32815 +3 33037 33036 32928 +3 32929 33037 32928 +3 33143 33142 33036 +3 33037 33143 33036 +3 33247 33246 33142 +3 33143 33247 33142 +3 14858 19271 21681 +3 21681 15617 14858 +3 17283 35300 17284 +3 11730 11729 11650 +3 33652 33651 33532 +3 32964 32963 32855 +3 32800 32799 32678 +3 32679 32800 32678 +3 31797 31796 31696 +3 33061 33166 33060 +3 21365 33701 33580 +3 34975 35104 17858 +3 34104 21197 34242 +3 19422 18224 19432 +3 34243 34381 34380 +3 34242 34243 34380 +3 34381 34518 34517 +3 34380 34381 34517 +3 34518 34646 34645 +3 34517 34518 34645 +3 34646 34774 34773 +3 34645 34646 34773 +3 34774 34903 34902 +3 34773 34774 34902 +3 35032 35031 34902 +3 34903 35032 34902 +3 35161 35160 35031 +3 35032 35161 35031 +3 35290 35289 35160 +3 35161 35290 35160 +3 35290 28863 17481 +3 35289 35290 17481 +3 28013 29416 17481 +3 28863 28013 17481 +3 9331 13689 29416 +3 28013 9331 29416 +3 34494 34348 13689 +3 9331 34494 13689 +3 33831 33822 34348 +3 34494 33831 34348 +3 33831 35100 35099 +3 33822 33831 35099 +3 32353 32152 35099 +3 35100 32353 35099 +3 12452 11966 32152 +3 32353 12452 32152 +3 12452 33446 33943 +3 11966 12452 33943 +3 33446 34855 33575 +3 33943 33446 33575 +3 34855 13705 34221 +3 33575 34855 34221 +3 13705 34336 33818 +3 34221 13705 33818 +3 34336 34081 33133 +3 33818 34336 33133 +3 34081 28011 35259 +3 33133 34081 35259 +3 28011 34107 32355 +3 35259 28011 32355 +3 34107 29127 19464 +3 32355 34107 19464 +3 29127 30557 33447 +3 19464 29127 33447 +3 30557 30821 35015 +3 33447 30557 35015 +3 30821 35263 34854 +3 35015 30821 34854 +3 35263 33821 33797 +3 34854 35263 33797 +3 33821 35104 34975 +3 33797 33821 34975 +3 32461 6643 2950 +3 33243 17330 17407 +3 3234 3233 3094 +3 34567 34695 34566 +3 31457 31529 31456 +3 31529 31616 31528 +3 32557 32670 32556 +3 32560 32673 32559 +3 33328 33329 33437 +3 34586 34585 34448 +3 32988 32987 32879 +3 33094 33199 33093 +3 32912 32911 32799 +3 32800 32912 32799 +3 33020 33019 32911 +3 32912 33020 32911 +3 33126 33125 33019 +3 33020 33126 33019 +3 33231 33230 33125 +3 33126 33231 33125 +3 33336 33335 33230 +3 31634 31633 31546 +3 31547 31634 31546 +3 30995 31056 30994 +3 35203 35332 35202 +3 26512 26424 12129 +3 33119 33224 33118 +3 31547 31546 31474 +3 33329 33328 33223 +3 33231 33336 33230 +3 31475 31547 31474 +3 3933 3802 3934 +3 31658 31657 31562 +3 31563 31658 31562 +3 31758 31757 31657 +3 31658 31758 31657 +3 31864 31863 31757 +3 31758 31864 31757 +3 31965 31964 31863 +3 31864 31965 31863 +3 32065 32064 31964 +3 31965 32065 31964 +3 32165 32164 32064 +3 32065 32165 32064 +3 32266 32265 32164 +3 32165 32266 32164 +3 32369 32368 32265 +3 32266 32369 32265 +3 32474 32473 32368 +3 32369 32474 32368 +3 32583 32582 32473 +3 32474 32583 32473 +3 32697 32696 32582 +3 32583 32697 32582 +3 32817 32816 32696 +3 32697 32817 32696 +3 32930 32929 32816 +3 32817 32930 32816 +3 33038 33037 32929 +3 32930 33038 32929 +3 33144 33143 33037 +3 33038 33144 33037 +3 33248 33247 33143 +3 33144 33248 33143 +3 33357 33356 33247 +3 33248 33357 33247 +3 21835 21741 35141 +3 26512 12129 26513 +3 7516 33556 33443 +3 2677 23075 17290 +3 11519 11518 31950 +3 32115 32114 32014 +3 21197 34243 34242 +3 31914 32015 31913 +3 33070 33069 32963 +3 586 1614 14379 +3 6768 3477 34874 +3 17397 32685 17398 +3 34244 34382 34381 +3 34243 34244 34381 +3 34382 34519 34518 +3 34381 34382 34518 +3 34647 34646 34518 +3 34519 34647 34518 +3 34775 34774 34646 +3 34647 34775 34646 +3 34775 34904 34903 +3 34774 34775 34903 +3 34904 35033 35032 +3 34903 34904 35032 +3 35033 35162 35161 +3 35032 35033 35161 +3 35291 35290 35161 +3 35162 35291 35161 +3 14178 28863 35290 +3 35291 14178 35290 +3 28014 28013 28863 +3 14178 28014 28863 +3 13679 9331 28013 +3 28014 13679 28013 +3 34611 34494 9331 +3 13679 34611 9331 +3 33832 33831 34494 +3 34611 33832 34494 +3 33832 35102 35100 +3 33831 33832 35100 +3 35102 32457 32353 +3 35100 35102 32353 +3 32457 11133 12452 +3 32353 32457 12452 +3 11133 32253 33446 +3 12452 11133 33446 +3 21844 34855 33446 +3 32253 21844 33446 +3 33471 13705 34855 +3 21844 33471 34855 +3 33471 35326 34336 +3 13705 33471 34336 +3 35326 35264 34081 +3 34336 35326 34081 +3 35264 34977 28011 +3 34081 35264 28011 +3 34977 35103 34107 +3 28011 34977 34107 +3 35103 33453 29127 +3 34107 35103 29127 +3 33453 34485 30557 +3 29127 33453 30557 +3 34485 33458 30821 +3 30557 34485 30821 +3 33458 35134 35263 +3 30821 33458 35263 +3 35134 35250 33821 +3 35263 35134 33821 +3 35250 13307 35104 +3 33821 35250 35104 +3 13307 34473 5331 +3 35104 13307 5331 +3 22023 35138 22025 +3 28584 28713 28583 +3 31616 31615 31528 +3 32003 32002 31901 +3 31544 31543 31471 +3 32764 32763 32649 +3 34037 34036 33901 +3 33641 33640 33521 +3 32880 32988 32879 +3 33094 33093 32987 +3 31729 31728 31633 +3 31634 31729 31633 +3 33326 33435 33434 +3 17851 35006 8687 +3 31746 31745 31650 +3 31651 31746 31650 +3 31846 31845 31745 +3 31746 31846 31745 +3 31944 31943 31845 +3 31846 31944 31845 +3 33074 33073 32967 +3 33897 33896 33762 +3 31272 31337 31271 +3 35332 13106 13223 +3 31337 31336 31271 +3 34007 34143 34006 +3 32041 32040 31943 +3 31600 31599 31512 +3 31944 32041 31943 +3 1307 1308 18561 +3 31659 31658 31563 +3 31564 31659 31563 +3 31759 31758 31658 +3 31659 31759 31658 +3 31865 31864 31758 +3 31759 31865 31758 +3 31966 31965 31864 +3 31865 31966 31864 +3 32066 32065 31965 +3 31966 32066 31965 +3 32166 32165 32065 +3 32066 32166 32065 +3 32267 32266 32165 +3 32166 32267 32165 +3 32370 32369 32266 +3 32267 32370 32266 +3 32475 32474 32369 +3 32370 32475 32369 +3 32584 32583 32474 +3 32475 32584 32474 +3 32698 32697 32583 +3 32584 32698 32583 +3 32818 32817 32697 +3 32698 32818 32697 +3 32931 32930 32817 +3 32818 32931 32817 +3 33039 33038 32930 +3 32931 33039 32930 +3 33145 33144 33038 +3 33039 33145 33038 +3 33249 33248 33144 +3 33145 33249 33144 +3 18086 21240 21394 +3 33248 33249 33357 +3 17333 33356 33357 +3 21200 34382 34244 +3 32138 32137 32040 +3 32041 32138 32040 +3 32238 32237 32137 +3 32138 32238 32137 +3 33493 33612 33492 +3 33493 33492 33379 +3 33114 33219 33113 +3 34384 34383 21200 +3 2142 35142 2141 +3 26511 26510 26424 +3 34383 34520 34519 +3 34382 34383 34519 +3 34520 34648 34647 +3 34519 34520 34647 +3 34648 34776 34775 +3 34647 34648 34775 +3 34776 34905 34904 +3 34775 34776 34904 +3 35034 35033 34904 +3 34905 35034 34904 +3 35163 35162 35033 +3 35034 35163 35033 +3 35292 35291 35162 +3 35163 35292 35162 +3 13217 14178 35291 +3 35292 13217 35291 +3 27898 28014 14178 +3 13217 27898 14178 +3 11131 13679 28014 +3 27898 11131 28014 +3 34623 34611 13679 +3 11131 34623 13679 +3 33833 33832 34611 +3 34623 33833 34611 +3 35110 35102 33832 +3 33833 35110 33832 +3 32458 32457 35102 +3 35110 32458 35102 +3 32458 24364 11133 +3 32457 32458 11133 +3 13977 32253 11133 +3 24364 13977 11133 +3 33664 21844 32253 +3 13977 33664 32253 +3 33664 34884 33471 +3 21844 33664 33471 +3 34884 34993 35326 +3 33471 34884 35326 +3 34993 33691 35264 +3 35326 34993 35264 +3 33691 34978 34977 +3 35264 33691 34977 +3 34978 35241 35103 +3 34977 34978 35103 +3 35241 34606 33453 +3 35103 35241 33453 +3 34606 34857 34485 +3 33453 34606 34485 +3 34857 27991 33458 +3 34485 34857 33458 +3 27991 11886 35134 +3 33458 27991 35134 +3 11886 34861 35250 +3 35134 11886 35250 +3 3756 34473 3757 +3 35250 34861 13307 +3 31448 31520 31447 +3 6954 6953 6886 +3 34685 34813 34684 +3 34597 6946 6945 +3 31711 31710 31615 +3 31616 31711 31615 +3 32326 32429 32428 +3 32670 32669 32556 +3 17335 17334 33357 +3 32735 32847 32734 +3 31203 31267 31202 +3 33269 33268 33163 +3 31795 31901 31794 +3 32846 32954 32845 +3 31337 31404 31336 +3 31475 31474 31407 +3 32340 32339 32237 +3 32238 32340 32237 +3 32444 32443 32339 +3 32340 32444 32339 +3 32551 32550 32443 +3 32444 32551 32443 +3 31404 31471 31403 +3 31404 31403 31336 +3 32664 32663 32550 +3 31543 31542 31470 +3 32551 32664 32550 +3 32785 32784 32663 +3 32664 32785 32663 +3 31478 31565 31564 +3 1307 18561 18464 +3 31660 31659 31564 +3 31565 31660 31564 +3 31760 31759 31659 +3 31660 31760 31659 +3 31866 31865 31759 +3 31760 31866 31759 +3 31967 31966 31865 +3 31866 31967 31865 +3 32067 32066 31966 +3 31967 32067 31966 +3 32167 32166 32066 +3 32067 32167 32066 +3 32268 32267 32166 +3 32167 32268 32166 +3 32371 32370 32267 +3 32268 32371 32267 +3 32476 32475 32370 +3 32371 32476 32370 +3 32585 32584 32475 +3 32476 32585 32475 +3 32699 32698 32584 +3 32585 32699 32584 +3 32819 32818 32698 +3 32699 32819 32698 +3 32932 32931 32818 +3 32819 32932 32818 +3 33040 33039 32931 +3 32932 33040 32931 +3 33146 33145 33039 +3 33040 33146 33039 +3 33250 33249 33145 +3 33146 33250 33145 +3 21394 20573 18086 +3 33250 33359 33249 +3 17363 34522 19526 +3 17334 17411 17333 +3 6928 35224 35096 +3 19346 14344 30745 +3 32897 32896 32784 +3 32785 32897 32784 +3 33005 33004 32896 +3 32897 33005 32896 +3 33111 33110 33004 +3 31307 31374 31306 +3 31441 31440 31373 +3 9340 2748 2075 +3 17453 17452 35198 +3 34384 34521 34520 +3 34383 34384 34520 +3 34521 34649 34648 +3 34520 34521 34648 +3 34649 34777 34776 +3 34648 34649 34776 +3 34906 34905 34776 +3 34777 34906 34776 +3 35035 35034 34905 +3 34906 35035 34905 +3 35164 35163 35034 +3 35035 35164 35034 +3 35293 35292 35163 +3 35164 35293 35163 +3 14284 13217 35292 +3 35293 14284 35292 +3 28872 27898 13217 +3 14284 28872 13217 +3 30802 11131 27898 +3 28872 30802 27898 +3 34733 34623 11131 +3 30802 34733 11131 +3 33835 33833 34623 +3 34733 33835 34623 +3 35117 35110 33833 +3 33835 35117 33833 +3 32918 32458 35110 +3 35117 32918 35110 +3 3085 24364 32458 +3 32918 3085 32458 +3 34992 13977 24364 +3 3085 34992 24364 +3 34864 33664 13977 +3 34992 34864 13977 +3 33668 34884 33664 +3 34864 33668 33664 +3 33668 34350 34993 +3 34884 33668 34993 +3 34350 34990 33691 +3 34993 34350 33691 +3 34990 34982 34978 +3 33691 34990 34978 +3 34982 29266 35241 +3 34978 34982 35241 +3 29266 28727 34606 +3 35241 29266 34606 +3 28727 34491 34857 +3 34606 28727 34857 +3 34491 34364 27991 +3 34857 34491 27991 +3 34364 34355 11886 +3 27991 34364 11886 +3 35189 35317 35188 +3 11886 34355 34861 +3 34288 34287 34149 +3 6521 4503 6514 +3 33404 33403 33294 +3 31515 31514 31442 +3 32014 32013 31912 +3 32114 32113 32013 +3 31711 31811 31810 +3 31710 31711 31810 +3 32325 32326 32428 +3 31338 31405 31337 +3 33755 33889 33754 +3 34436 34435 34297 +3 33769 33768 33641 +3 31006 31067 31005 +3 27028 13004 35329 +3 31056 31118 31117 +3 33515 33634 33514 +3 31272 31271 31207 +3 33005 33111 33004 +3 33216 33215 33110 +3 33111 33216 33110 +3 33321 33320 33215 +3 33216 33321 33215 +3 33430 33429 33320 +3 33321 33430 33320 +3 30202 22593 30335 +3 33430 33543 33429 +3 31566 31565 31478 +3 31479 31566 31478 +3 31661 31660 31565 +3 31566 31661 31565 +3 31761 31760 31660 +3 31661 31761 31660 +3 31867 31866 31760 +3 31761 31867 31760 +3 31968 31967 31866 +3 31867 31968 31866 +3 32068 32067 31967 +3 31968 32068 31967 +3 32168 32167 32067 +3 32068 32168 32067 +3 32269 32268 32167 +3 32168 32269 32167 +3 32372 32371 32268 +3 32269 32372 32268 +3 32477 32476 32371 +3 32372 32477 32371 +3 32586 32585 32476 +3 32477 32586 32476 +3 32700 32699 32585 +3 32586 32700 32585 +3 32820 32819 32699 +3 32700 32820 32699 +3 32933 32932 32819 +3 32820 32933 32819 +3 33041 33040 32932 +3 32933 33041 32932 +3 33147 33146 33040 +3 33041 33147 33040 +3 33251 33250 33146 +3 33147 33251 33146 +3 33360 33359 33250 +3 33251 33360 33250 +3 33465 19116 34340 +3 33472 17272 33360 +3 1450 15206 27436 +3 1450 27435 26497 +3 33206 33311 33205 +3 35204 35333 35203 +3 34907 34906 34777 +3 35036 35035 34906 +3 34907 35036 34906 +3 35165 35164 35035 +3 35036 35165 35035 +3 14357 14344 14358 +3 14358 19346 13754 +3 34931 35060 34930 +3 26242 25421 23945 +3 13677 28872 14284 +3 19794 23945 23315 +3 30820 30802 28872 +3 13677 30820 28872 +3 34751 34733 30802 +3 30820 34751 30802 +3 33837 33835 34733 +3 34751 33837 34733 +3 35119 35117 33835 +3 33837 35119 33835 +3 33134 32918 35117 +3 35119 33134 35117 +3 27288 3085 32918 +3 33134 27288 32918 +3 34605 34992 3085 +3 27288 34605 3085 +3 34859 34864 34992 +3 34605 34859 34992 +3 17797 33668 34864 +3 34859 17797 34864 +3 17797 24365 34350 +3 33668 17797 34350 +3 24365 35253 34990 +3 34350 24365 34990 +3 35253 34225 34982 +3 34990 35253 34982 +3 34225 34612 29266 +3 34982 34225 29266 +3 34612 33932 28727 +3 29266 34612 28727 +3 33932 33834 34491 +3 28727 33932 34491 +3 33834 34492 34364 +3 34491 33834 34364 +3 19479 19370 19480 +3 34364 34492 34355 +3 32308 32307 32206 +3 35002 901 9280 +3 34150 34149 34013 +3 34150 34288 34149 +3 31631 31630 31543 +3 32202 32201 32101 +3 31707 31807 31706 +3 31913 32014 31912 +3 31811 31917 31916 +3 31810 31811 31916 +3 31916 31917 32017 +3 31917 32018 32017 +3 32017 32018 32117 +3 32018 32118 32117 +3 35771 11411 35538 +3 31067 31066 31005 +3 32624 32738 32623 +3 35200 35201 35329 +3 33505 33624 33504 +3 32116 32115 32015 +3 804 922 803 +3 31318 31317 31252 +3 32995 32994 32886 +3 31444 31516 31443 +3 14675 19094 18172 +3 26723 26612 34062 +3 21501 20535 21971 +3 27895 25077 30878 +3 25077 27895 24407 +3 17292 17293 17361 +3 19968 31145 31209 +3 5551 3477 14683 +3 34248 34386 17274 +3 7300 34995 12808 +3 31408 31480 31479 +3 31567 31566 31479 +3 31480 31567 31479 +3 31662 31661 31566 +3 31567 31662 31566 +3 31762 31761 31661 +3 31662 31762 31661 +3 31868 31867 31761 +3 31762 31868 31761 +3 31969 31968 31867 +3 31868 31969 31867 +3 32069 32068 31968 +3 31969 32069 31968 +3 32169 32168 32068 +3 32069 32169 32068 +3 32270 32269 32168 +3 32169 32270 32168 +3 32373 32372 32269 +3 32270 32373 32269 +3 32478 32477 32372 +3 32373 32478 32372 +3 32587 32586 32477 +3 32478 32587 32477 +3 32701 32700 32586 +3 32587 32701 32586 +3 32821 32820 32700 +3 32701 32821 32700 +3 32934 32933 32820 +3 32821 32934 32820 +3 33042 33041 32933 +3 32934 33042 32933 +3 33148 33147 33041 +3 33042 33148 33041 +3 33252 33251 33147 +3 33148 33252 33147 +3 33361 33360 33251 +3 33252 33361 33251 +3 33473 33472 33360 +3 33361 33473 33360 +3 33473 33590 33589 +3 33472 33473 33589 +3 17350 35169 17351 +3 33590 33711 33589 +3 33711 33839 33838 +3 33839 33974 33973 +3 33838 33839 33973 +3 26967 33973 33974 +3 13895 7997 13390 +3 35317 6906 35187 +3 17341 17273 34248 +3 7626 1166 1165 +3 6764 18476 17365 +3 34337 18194 34478 +3 34386 17342 17274 +3 18476 6764 5056 +3 18723 18118 18132 +3 33116 33221 33115 +3 34133 34271 34132 +3 33295 33294 33189 +3 34462 34463 6880 +3 33589 26850 17337 +3 16445 13016 22238 +3 18041 22238 13016 +3 13183 12994 34343 +3 30805 30820 13677 +3 22238 18611 18117 +3 34862 34751 30820 +3 30805 34862 30820 +3 33921 33837 34751 +3 34862 33921 34751 +3 35123 35119 33837 +3 33921 35123 33837 +3 33234 33134 35119 +3 35123 33234 35119 +3 35318 27288 33134 +3 33234 35318 33134 +3 33705 34605 27288 +3 35318 33705 27288 +3 33558 34859 34605 +3 33705 33558 34605 +3 33663 17797 34859 +3 33558 33663 34859 +3 33663 28867 24365 +3 17797 33663 24365 +3 28867 34466 35253 +3 24365 28867 35253 +3 34466 35245 34225 +3 35253 34466 34225 +3 35245 33448 34612 +3 34225 35245 34612 +3 33448 2386 33932 +3 34612 33448 33932 +3 2386 34084 33834 +3 33932 2386 33834 +3 34084 13024 34492 +3 33834 34084 34492 +3 13024 3225 34492 +3 28713 28584 28714 +3 32207 32308 32206 +3 32965 33071 32964 +3 34014 34013 33878 +3 34014 34150 34013 +3 31015 31014 30956 +3 31201 31200 31137 +3 31913 31912 31806 +3 31807 31913 31806 +3 31612 31707 31611 +3 31807 31806 31706 +3 31525 31612 31524 +3 31707 31706 31611 +3 32118 32218 32217 +3 32117 32118 32217 +3 27435 1450 27436 +3 33903 33902 33768 +3 32738 32737 32623 +3 32850 32849 32737 +3 33636 33763 33635 +3 33379 33492 33378 +3 34423 34422 34284 +3 33778 33777 33650 +3 30902 30960 30959 +3 30960 31021 31020 +3 30959 30960 31020 +3 31021 31083 31082 +3 31020 31021 31082 +3 31083 31146 31145 +3 31082 31083 31145 +3 31146 31210 31209 +3 31145 31146 31209 +3 31210 31275 31274 +3 31209 31210 31274 +3 31275 31342 31341 +3 31274 31275 31341 +3 31342 31409 31408 +3 31341 31342 31408 +3 31481 31480 31408 +3 31409 31481 31408 +3 31568 31567 31480 +3 31481 31568 31480 +3 31663 31662 31567 +3 31568 31663 31567 +3 31763 31762 31662 +3 31663 31763 31662 +3 31869 31868 31762 +3 31763 31869 31762 +3 31970 31969 31868 +3 31869 31970 31868 +3 32070 32069 31969 +3 31970 32070 31969 +3 32170 32169 32069 +3 32070 32170 32069 +3 32271 32270 32169 +3 32170 32271 32169 +3 32374 32373 32270 +3 32271 32374 32270 +3 32479 32478 32373 +3 32374 32479 32373 +3 32588 32587 32478 +3 32479 32588 32478 +3 32702 32701 32587 +3 32588 32702 32587 +3 32822 32821 32701 +3 32702 32822 32701 +3 32935 32934 32821 +3 32822 32935 32821 +3 33043 33042 32934 +3 32935 33043 32934 +3 33149 33148 33042 +3 33043 33149 33042 +3 33253 33252 33148 +3 33149 33253 33148 +3 33362 33361 33252 +3 33253 33362 33252 +3 33474 33473 33361 +3 33362 33474 33361 +3 33474 33591 33590 +3 33473 33474 33590 +3 33591 33712 33711 +3 33590 33591 33711 +3 33712 33840 33839 +3 33711 33712 33839 +3 33840 33975 33974 +3 33839 33840 33974 +3 35396 13895 35639 +3 13895 35396 9991 +3 34111 34249 34248 +3 13895 13390 35639 +3 34249 34387 34386 +3 34248 34249 34386 +3 34387 34524 34523 +3 34386 34387 34523 +3 34524 34652 34651 +3 34523 34524 34651 +3 26968 28745 29008 +3 34652 34780 17277 +3 34651 34652 17276 +3 13789 34195 14736 +3 33085 33084 32978 +3 32887 32886 32774 +3 33897 34032 33896 +3 31377 31444 31376 +3 33101 33206 33100 +3 33176 33281 33175 +3 34878 2789 19042 +3 32914 32913 32801 +3 18611 22238 18041 +3 3225 13024 3226 +3 34878 34862 30805 +3 2789 34878 30805 +3 33931 33921 34862 +3 34878 33931 34862 +3 35125 35123 33921 +3 33931 35125 33921 +3 33463 33234 35123 +3 35125 33463 35123 +3 25659 35318 33234 +3 33463 25659 33234 +3 19669 33705 35318 +3 25659 19669 35318 +3 12204 33558 33705 +3 19669 12204 33705 +3 12204 35130 33663 +3 33558 12204 33663 +3 35130 34650 28867 +3 33663 35130 28867 +3 34650 34737 34466 +3 28867 34650 34466 +3 34737 33813 35245 +3 34466 34737 35245 +3 33813 33577 33448 +3 35245 33813 33448 +3 33577 33690 2386 +3 33448 33577 2386 +3 33690 35323 34084 +3 2386 33690 34084 +3 35323 33687 13024 +3 34084 35323 13024 +3 13115 6138 11549 +3 17414 17336 17337 +3 32411 32410 32307 +3 32308 32411 32307 +3 33879 33878 33744 +3 33879 34014 33878 +3 33014 33013 32905 +3 32876 32875 32763 +3 34289 34288 34150 +3 31464 31536 31463 +3 31453 31525 31452 +3 31904 31903 31797 +3 32318 32319 32421 +3 31612 31611 31524 +3 33619 33618 33499 +3 32218 32319 32318 +3 33751 33885 33750 +3 31949 32046 31948 +3 32116 32216 32115 +3 30952 31010 30951 +3 31715 31716 31815 +3 32982 32983 33088 +3 34816 34815 34687 +3 32426 32427 32531 +3 30849 30903 30902 +3 30961 30960 30902 +3 30903 30961 30902 +3 30961 31022 31021 +3 30960 30961 31021 +3 31084 31083 31021 +3 31022 31084 31021 +3 31147 31146 31083 +3 31084 31147 31083 +3 31211 31210 31146 +3 31147 31211 31146 +3 31276 31275 31210 +3 31211 31276 31210 +3 31343 31342 31275 +3 31276 31343 31275 +3 31410 31409 31342 +3 31343 31410 31342 +3 31482 31481 31409 +3 31410 31482 31409 +3 31569 31568 31481 +3 31482 31569 31481 +3 31664 31663 31568 +3 31569 31664 31568 +3 31764 31763 31663 +3 31664 31764 31663 +3 31870 31869 31763 +3 31764 31870 31763 +3 31971 31970 31869 +3 31870 31971 31869 +3 32071 32070 31970 +3 31971 32071 31970 +3 32171 32170 32070 +3 32071 32171 32070 +3 32272 32271 32170 +3 32171 32272 32170 +3 32375 32374 32271 +3 32272 32375 32271 +3 32480 32479 32374 +3 32375 32480 32374 +3 32589 32588 32479 +3 32480 32589 32479 +3 32703 32702 32588 +3 32589 32703 32588 +3 32823 32822 32702 +3 32703 32823 32702 +3 32936 32935 32822 +3 32823 32936 32822 +3 33044 33043 32935 +3 32936 33044 32935 +3 33150 33149 33043 +3 33044 33150 33043 +3 33254 33253 33149 +3 33150 33254 33149 +3 33363 33362 33253 +3 33254 33363 33253 +3 33475 33474 33362 +3 33363 33475 33362 +3 33592 33591 33474 +3 33475 33592 33474 +3 33592 33713 33712 +3 33591 33592 33712 +3 33841 33840 33712 +3 33713 33841 33712 +3 33976 33975 33840 +3 33841 33976 33840 +3 34112 34111 33975 +3 33976 34112 33975 +3 34250 34249 34111 +3 34112 34250 34111 +3 34388 34387 34249 +3 34250 34388 34249 +3 34525 34524 34387 +3 34388 34525 34387 +3 34525 34653 34652 +3 34524 34525 34652 +3 34653 34781 34780 +3 34652 34653 34780 +3 34781 34910 34909 +3 34780 34781 34909 +3 10688 18814 18699 +3 35704 35894 35728 +3 34032 34031 33896 +3 6912 22236 22434 +3 32123 32223 32222 +3 31809 31915 31808 +3 32324 32427 32426 +3 32620 32734 32619 +3 17416 26850 17417 +3 34944 34943 34814 +3 29828 35556 35246 +3 26850 17416 17337 +3 33934 2139 35132 +3 33698 33825 28584 +3 35128 35125 33931 +3 33934 35128 33931 +3 33464 33463 35125 +3 35128 33464 35125 +3 31855 25659 33463 +3 33464 31855 33463 +3 33242 19669 25659 +3 31855 33242 25659 +3 13965 12204 19669 +3 33242 13965 19669 +3 13965 17339 35130 +3 12204 13965 35130 +3 17339 34471 34650 +3 35130 17339 34650 +3 34471 34746 34737 +3 34650 34471 34737 +3 34746 34331 33813 +3 34737 34746 33813 +3 34331 34080 33577 +3 33813 34331 33577 +3 34080 33572 33690 +3 33577 34080 33690 +3 33572 35143 35323 +3 33690 33572 35323 +3 35143 14068 33687 +3 35323 35143 33687 +3 11442 33928 20153 +3 22428 9644 22526 +3 32516 32515 32410 +3 32411 32516 32410 +3 33499 33618 33498 +3 33745 33879 33744 +3 31063 31062 31001 +3 33745 33744 33617 +3 31453 31452 31385 +3 35070 35199 35198 +3 31319 31386 31318 +3 31386 31453 31385 +3 32217 32218 32318 +3 32422 32527 32526 +3 33387 33500 33386 +3 30945 30944 30890 +3 32901 32900 32788 +3 32225 32224 32124 +3 33625 33624 33505 +3 33751 33750 33623 +3 32323 32324 32426 +3 31136 31199 31198 +3 32427 32532 32531 +3 30904 30903 30849 +3 30850 30904 30849 +3 30962 30961 30903 +3 30904 30962 30903 +3 31023 31022 30961 +3 30962 31023 30961 +3 31085 31084 31022 +3 31023 31085 31022 +3 31148 31147 31084 +3 31085 31148 31084 +3 31212 31211 31147 +3 31148 31212 31147 +3 31277 31276 31211 +3 31212 31277 31211 +3 31344 31343 31276 +3 31277 31344 31276 +3 31411 31410 31343 +3 31344 31411 31343 +3 31483 31482 31410 +3 31411 31483 31410 +3 31570 31569 31482 +3 31483 31570 31482 +3 31665 31664 31569 +3 31570 31665 31569 +3 31765 31764 31664 +3 31665 31765 31664 +3 31871 31870 31764 +3 31765 31871 31764 +3 31972 31971 31870 +3 31871 31972 31870 +3 32072 32071 31971 +3 31972 32072 31971 +3 32172 32171 32071 +3 32072 32172 32071 +3 32273 32272 32171 +3 32172 32273 32171 +3 32376 32375 32272 +3 32273 32376 32272 +3 32481 32480 32375 +3 32376 32481 32375 +3 32590 32589 32480 +3 32481 32590 32480 +3 32704 32703 32589 +3 32590 32704 32589 +3 32824 32823 32703 +3 32704 32824 32703 +3 32937 32936 32823 +3 32824 32937 32823 +3 33045 33044 32936 +3 32937 33045 32936 +3 33151 33150 33044 +3 33045 33151 33044 +3 33255 33254 33150 +3 33151 33255 33150 +3 33364 33363 33254 +3 33255 33364 33254 +3 33476 33475 33363 +3 33364 33476 33363 +3 33593 33592 33475 +3 33476 33593 33475 +3 33714 33713 33592 +3 33593 33714 33592 +3 33842 33841 33713 +3 33714 33842 33713 +3 33977 33976 33841 +3 33842 33977 33841 +3 34113 34112 33976 +3 33977 34113 33976 +3 34251 34250 34112 +3 34113 34251 34112 +3 34389 34388 34250 +3 34251 34389 34250 +3 34526 34525 34388 +3 34389 34526 34388 +3 34654 34653 34525 +3 34526 34654 34525 +3 34654 34782 34781 +3 34653 34654 34781 +3 34782 34911 34910 +3 34781 34782 34910 +3 35597 35564 35715 +3 26853 26971 11853 +3 805 33552 806 +3 26853 11853 11769 +3 33179 33178 33073 +3 33025 6541 10599 +3 32247 32349 32246 +3 33283 33392 33282 +3 31135 31136 31198 +3 31195 31259 31258 +3 31373 31372 31305 +3 33071 33176 33070 +3 10809 6513 6514 +3 31306 31373 31305 +3 35132 35128 33934 +3 17335 17272 17336 +3 33557 33464 35128 +3 35132 33557 35128 +3 28877 31855 33464 +3 33557 28877 33464 +3 33238 33242 31855 +3 28877 33238 31855 +3 33238 35242 13965 +3 33242 33238 13965 +3 14266 17339 13965 +3 35242 14266 13965 +3 14266 11873 34471 +3 17339 14266 34471 +3 11873 34480 34746 +3 34471 11873 34746 +3 34480 33667 34331 +3 34746 34480 34331 +3 33667 34109 34080 +3 34331 33667 34080 +3 34109 28463 33572 +3 34080 34109 33572 +3 28463 35131 35143 +3 33572 28463 35143 +3 2542 25829 24277 +3 35143 35131 14068 +3 31948 31947 31849 +3 19821 34075 19937 +3 33499 33498 33385 +3 32625 32624 32515 +3 31125 31188 31187 +3 33386 33499 33385 +3 31319 31318 31253 +3 31002 31063 31001 +3 32750 32862 32749 +3 31254 31319 31253 +3 32970 32969 32861 +3 32862 32970 32861 +3 34151 34289 34150 +3 32319 32422 32421 +3 32847 32955 32846 +3 34564 34563 34426 +3 32406 32511 32405 +3 32210 32311 32209 +3 33506 33625 33505 +3 32527 32528 32636 +3 32654 32775 32774 +3 32628 32627 32518 +3 30905 30904 30850 +3 30851 30905 30850 +3 30963 30962 30904 +3 30905 30963 30904 +3 31024 31023 30962 +3 30963 31024 30962 +3 31086 31085 31023 +3 31024 31086 31023 +3 31149 31148 31085 +3 31086 31149 31085 +3 31213 31212 31148 +3 31149 31213 31148 +3 31278 31277 31212 +3 31213 31278 31212 +3 31345 31344 31277 +3 31278 31345 31277 +3 31412 31411 31344 +3 31345 31412 31344 +3 31484 31483 31411 +3 31412 31484 31411 +3 31571 31570 31483 +3 31484 31571 31483 +3 31666 31665 31570 +3 31571 31666 31570 +3 31766 31765 31665 +3 31666 31766 31665 +3 31872 31871 31765 +3 31766 31872 31765 +3 31973 31972 31871 +3 31872 31973 31871 +3 32073 32072 31972 +3 31973 32073 31972 +3 32173 32172 32072 +3 32073 32173 32072 +3 32274 32273 32172 +3 32173 32274 32172 +3 32377 32376 32273 +3 32274 32377 32273 +3 32482 32481 32376 +3 32377 32482 32376 +3 32591 32590 32481 +3 32482 32591 32481 +3 32705 32704 32590 +3 32591 32705 32590 +3 32825 32824 32704 +3 32705 32825 32704 +3 32938 32937 32824 +3 32825 32938 32824 +3 33046 33045 32937 +3 32938 33046 32937 +3 33152 33151 33045 +3 33046 33152 33045 +3 33256 33255 33151 +3 33152 33256 33151 +3 33365 33364 33255 +3 33256 33365 33255 +3 33477 33476 33364 +3 33365 33477 33364 +3 33594 33593 33476 +3 33477 33594 33476 +3 33715 33714 33593 +3 33594 33715 33593 +3 33843 33842 33714 +3 33715 33843 33714 +3 33978 33977 33842 +3 33843 33978 33842 +3 34114 34113 33977 +3 33978 34114 33977 +3 34252 34251 34113 +3 34114 34252 34113 +3 34390 34389 34251 +3 34252 34390 34251 +3 34527 34526 34389 +3 34390 34527 34389 +3 34655 34654 34526 +3 34527 34655 34526 +3 34783 34782 34654 +3 34655 34783 34654 +3 34783 34912 34911 +3 34782 34783 34911 +3 34912 35041 35040 +3 34911 34912 35040 +3 35041 35170 35169 +3 35040 35041 35169 +3 114 34845 115 +3 35333 13984 13106 +3 13105 28591 19572 +3 17487 17398 17399 +3 32541 32654 32653 +3 32419 32524 32418 +3 32653 32654 32774 +3 9106 179 8876 +3 31241 31306 31240 +3 31924 32025 31923 +3 35142 35135 2141 +3 14068 35131 3089 +3 33579 33557 35132 +3 35135 33579 35132 +3 12811 28877 33557 +3 33579 12811 33557 +3 5603 33238 28877 +3 12811 5603 28877 +3 33791 35242 33238 +3 5603 33791 33238 +3 33791 35255 14266 +3 35242 33791 14266 +3 35255 34620 11873 +3 14266 35255 11873 +3 34620 34192 34480 +3 11873 34620 34480 +3 34192 34484 33667 +3 34480 34192 33667 +3 34484 13484 34109 +3 33667 34484 34109 +3 13484 34349 28463 +3 34109 13484 28463 +3 34349 34203 35131 +3 28463 34349 35131 +3 192 11923 33948 +3 35204 35203 35074 +3 32739 32851 32738 +3 32851 32959 32850 +3 33172 33277 33171 +3 33618 33617 33498 +3 31063 31125 31124 +3 31124 31125 31187 +3 31126 31127 31189 +3 31386 31385 31318 +3 32636 32750 32635 +3 33076 33075 32969 +3 34289 34427 34288 +3 33496 33615 33495 +3 32118 32119 32218 +3 34427 34426 34288 +3 34020 34019 33884 +3 35093 35092 34963 +3 31909 31908 31802 +3 33624 33751 33623 +3 33651 33778 33650 +3 33392 33391 33282 +3 31835 31933 31834 +3 30842 30852 30851 +3 30906 30905 30851 +3 30852 30906 30851 +3 30964 30963 30905 +3 30906 30964 30905 +3 31025 31024 30963 +3 30964 31025 30963 +3 31087 31086 31024 +3 31025 31087 31024 +3 31150 31149 31086 +3 31087 31150 31086 +3 31214 31213 31149 +3 31150 31214 31149 +3 31279 31278 31213 +3 31214 31279 31213 +3 31346 31345 31278 +3 31279 31346 31278 +3 31413 31412 31345 +3 31346 31413 31345 +3 31485 31484 31412 +3 31413 31485 31412 +3 31572 31571 31484 +3 31485 31572 31484 +3 31667 31666 31571 +3 31572 31667 31571 +3 31767 31766 31666 +3 31667 31767 31666 +3 31873 31872 31766 +3 31767 31873 31766 +3 31974 31973 31872 +3 31873 31974 31872 +3 32074 32073 31973 +3 31974 32074 31973 +3 32174 32173 32073 +3 32074 32174 32073 +3 32275 32274 32173 +3 32174 32275 32173 +3 32378 32377 32274 +3 32275 32378 32274 +3 32483 32482 32377 +3 32378 32483 32377 +3 32592 32591 32482 +3 32483 32592 32482 +3 32706 32705 32591 +3 32592 32706 32591 +3 32826 32825 32705 +3 32706 32826 32705 +3 32939 32938 32825 +3 32826 32939 32825 +3 33047 33046 32938 +3 32939 33047 32938 +3 33153 33152 33046 +3 33047 33153 33046 +3 33257 33256 33152 +3 33153 33257 33152 +3 33366 33365 33256 +3 33257 33366 33256 +3 33478 33477 33365 +3 33366 33478 33365 +3 33595 33594 33477 +3 33478 33595 33477 +3 33716 33715 33594 +3 33595 33716 33594 +3 33844 33843 33715 +3 33716 33844 33715 +3 33979 33978 33843 +3 33844 33979 33843 +3 34115 34114 33978 +3 33979 34115 33978 +3 34253 34252 34114 +3 34115 34253 34114 +3 34391 34390 34252 +3 34253 34391 34252 +3 34528 34527 34390 +3 34391 34528 34390 +3 34656 34655 34527 +3 34528 34656 34527 +3 34784 34783 34655 +3 34656 34784 34655 +3 34913 34912 34783 +3 34784 34913 34783 +3 35042 35041 34912 +3 34913 35042 34912 +3 35042 35171 35170 +3 35041 35042 35170 +3 34861 3496 13307 +3 35171 35300 35170 +3 30887 30941 30886 +3 21109 21198 21197 +3 31703 31803 31702 +3 34151 34150 34014 +3 32030 32127 32029 +3 33418 33419 33531 +3 33299 33408 33407 +3 33966 33965 21280 +3 2142 35167 35142 +3 17319 17480 18700 +3 33581 33579 35135 +3 35142 33581 35135 +3 32802 12811 33579 +3 33581 32802 33579 +3 32460 5603 12811 +3 32802 32460 12811 +3 32916 33791 5603 +3 32460 32916 5603 +3 32916 15629 35255 +3 33791 32916 35255 +3 15629 29404 34620 +3 35255 15629 34620 +3 29404 22140 34192 +3 34620 29404 34192 +3 22140 34876 34484 +3 34192 22140 34484 +3 34876 32461 13484 +3 34484 34876 13484 +3 2677 17288 29691 +3 13484 32461 34349 +3 11431 11488 11430 +3 7522 7523 7637 +3 34283 34282 34144 +3 7521 7635 7520 +3 32625 32739 32624 +3 32959 32958 32850 +3 33386 33385 33276 +3 33277 33386 33276 +3 31002 31001 30943 +3 31062 31063 31124 +3 31190 31254 31253 +3 31189 31190 31253 +3 32527 32636 32526 +3 32862 32861 32749 +3 33742 33741 33614 +3 34015 34014 33879 +3 32420 32525 32419 +3 32525 32634 32524 +3 34989 13394 19668 +3 31009 31008 30950 +3 31735 31835 31734 +3 31258 31259 31323 +3 34074 19806 18512 +3 32031 32128 32127 +3 32030 32031 32127 +3 33420 33419 33310 +3 30853 30852 30842 +3 30843 30853 30842 +3 30907 30906 30852 +3 30853 30907 30852 +3 30965 30964 30906 +3 30907 30965 30906 +3 31026 31025 30964 +3 30965 31026 30964 +3 31088 31087 31025 +3 31026 31088 31025 +3 31151 31150 31087 +3 31088 31151 31087 +3 31215 31214 31150 +3 31151 31215 31150 +3 31280 31279 31214 +3 31215 31280 31214 +3 31347 31346 31279 +3 31280 31347 31279 +3 31414 31413 31346 +3 31347 31414 31346 +3 31486 31485 31413 +3 31414 31486 31413 +3 31573 31572 31485 +3 31486 31573 31485 +3 31668 31667 31572 +3 31573 31668 31572 +3 31768 31767 31667 +3 31668 31768 31667 +3 31874 31873 31767 +3 31768 31874 31767 +3 31975 31974 31873 +3 31874 31975 31873 +3 32075 32074 31974 +3 31975 32075 31974 +3 32175 32174 32074 +3 32075 32175 32074 +3 32276 32275 32174 +3 32175 32276 32174 +3 32379 32378 32275 +3 32276 32379 32275 +3 32484 32483 32378 +3 32379 32484 32378 +3 32593 32592 32483 +3 32484 32593 32483 +3 32707 32706 32592 +3 32593 32707 32592 +3 32827 32826 32706 +3 32707 32827 32706 +3 32940 32939 32826 +3 32827 32940 32826 +3 33048 33047 32939 +3 32940 33048 32939 +3 33154 33153 33047 +3 33048 33154 33047 +3 33258 33257 33153 +3 33154 33258 33153 +3 33367 33366 33257 +3 33258 33367 33257 +3 33479 33478 33366 +3 33367 33479 33366 +3 33596 33595 33478 +3 33479 33596 33478 +3 33717 33716 33595 +3 33596 33717 33595 +3 33845 33844 33716 +3 33717 33845 33716 +3 33980 33979 33844 +3 33845 33980 33844 +3 34116 34115 33979 +3 33980 34116 33979 +3 34254 34253 34115 +3 34116 34254 34115 +3 34392 34391 34253 +3 34254 34392 34253 +3 34529 34528 34391 +3 34392 34529 34391 +3 34657 34656 34528 +3 34529 34657 34528 +3 34785 34784 34656 +3 34657 34785 34656 +3 34914 34913 34784 +3 34785 34914 34784 +3 35043 35042 34913 +3 34914 35043 34913 +3 35172 35171 35042 +3 35043 35172 35042 +3 35172 35301 35300 +3 35171 35172 35300 +3 19806 34731 23489 +3 35301 13221 35300 +3 35091 35220 35090 +3 2143 35167 2142 +3 33311 33420 33310 +3 32619 32618 32509 +3 31934 32031 31933 +3 31442 31441 31374 +3 33583 35167 2143 +3 17326 17325 33031 +3 33583 33581 35142 +3 35167 33583 35142 +3 33338 32802 33581 +3 33583 33338 33581 +3 34358 32460 32802 +3 33338 34358 32802 +3 35258 32916 32460 +3 34358 35258 32460 +3 35258 35126 15629 +3 32916 35258 15629 +3 35126 27670 29404 +3 15629 35126 29404 +3 27670 35320 22140 +3 29404 27670 22140 +3 35320 34497 34876 +3 22140 35320 34876 +3 34497 6643 32461 +3 34876 34497 32461 +3 34349 32461 2950 +3 27988 3092 2950 +3 33942 19370 19479 +3 6886 6955 6954 +3 33495 33614 33494 +3 19751 19099 18963 +3 32516 32625 32515 +3 32851 32850 32738 +3 33277 33276 33171 +3 33618 33745 33617 +3 30944 30943 30889 +3 30944 31002 30943 +3 31127 31190 31189 +3 31525 31524 31452 +3 32421 32422 32526 +3 32750 32749 32635 +3 31630 31629 31542 +3 34423 34560 34422 +3 33624 33623 33504 +3 32019 32119 32118 +3 32405 32404 32301 +3 32106 32206 32105 +3 33101 33100 32994 +3 33532 33651 33650 +3 32801 32800 32679 +3 19820 17695 18037 +3 32913 32912 32800 +3 32801 32913 32800 +3 30854 30853 30843 +3 30844 30854 30843 +3 30908 30907 30853 +3 30854 30908 30853 +3 30966 30965 30907 +3 30908 30966 30907 +3 31027 31026 30965 +3 30966 31027 30965 +3 31089 31088 31026 +3 31027 31089 31026 +3 31152 31151 31088 +3 31089 31152 31088 +3 31216 31215 31151 +3 31152 31216 31151 +3 31281 31280 31215 +3 31216 31281 31215 +3 31348 31347 31280 +3 31281 31348 31280 +3 31415 31414 31347 +3 31348 31415 31347 +3 31487 31486 31414 +3 31415 31487 31414 +3 31574 31573 31486 +3 31487 31574 31486 +3 31669 31668 31573 +3 31574 31669 31573 +3 31769 31768 31668 +3 31669 31769 31668 +3 31875 31874 31768 +3 31769 31875 31768 +3 31976 31975 31874 +3 31875 31976 31874 +3 32076 32075 31975 +3 31976 32076 31975 +3 32176 32175 32075 +3 32076 32176 32075 +3 32277 32276 32175 +3 32176 32277 32175 +3 32380 32379 32276 +3 32277 32380 32276 +3 32485 32484 32379 +3 32380 32485 32379 +3 32594 32593 32484 +3 32485 32594 32484 +3 32708 32707 32593 +3 32594 32708 32593 +3 32828 32827 32707 +3 32708 32828 32707 +3 32828 32940 32827 +3 33259 33258 33154 +3 33259 33368 33367 +3 33258 33259 33367 +3 33480 33479 33367 +3 33368 33480 33367 +3 33597 33596 33479 +3 33480 33597 33479 +3 33718 33717 33596 +3 33597 33718 33596 +3 33846 33845 33717 +3 33718 33846 33717 +3 33981 33980 33845 +3 33846 33981 33845 +3 34117 34116 33980 +3 33981 34117 33980 +3 34255 34254 34116 +3 34117 34255 34116 +3 34393 34392 34254 +3 34255 34393 34254 +3 34530 34529 34392 +3 34393 34530 34392 +3 34658 34657 34529 +3 34530 34658 34529 +3 34786 34785 34657 +3 34658 34786 34657 +3 34915 34914 34785 +3 34786 34915 34785 +3 35044 35043 34914 +3 34915 35044 34914 +3 35173 35172 35043 +3 35044 35173 35043 +3 35173 35302 35301 +3 35172 35173 35301 +3 14262 13221 35301 +3 35302 14262 35301 +3 27757 21938 29405 +3 19422 18374 18224 +3 31599 31694 31598 +3 32845 32953 32844 +3 33021 33020 32912 +3 32913 33021 32912 +3 3095 3094 34079 +3 31747 31746 31651 +3 17457 26966 17458 +3 2789 2009 19042 +3 33457 2275 12573 +3 28580 28581 28710 +3 33814 34358 33338 +3 33457 33814 33338 +3 34873 35258 34358 +3 33814 34873 34358 +3 34873 34735 35126 +3 35258 34873 35126 +3 34735 33926 27670 +3 35126 34735 27670 +3 33926 28550 35320 +3 27670 33926 35320 +3 28550 34210 34497 +3 35320 28550 34497 +3 34210 28868 6643 +3 34497 34210 6643 +3 28868 34329 27988 +3 6643 28868 27988 +3 21276 21277 27382 +3 2709 3731 14438 +3 30936 30935 30881 +3 29403 35101 19523 +3 33172 33171 33066 +3 32739 32738 32624 +3 31252 31317 31251 +3 33067 33172 33066 +3 31004 31065 31003 +3 30890 30944 30889 +3 33286 33285 33180 +3 31065 31127 31126 +3 31191 31192 31255 +3 32636 32635 32526 +3 33438 33551 33550 +3 33610 33609 33490 +3 34420 34419 34281 +3 33885 33884 33750 +3 17354 17353 17286 +3 34418 34555 34417 +3 31847 31846 31746 +3 31747 31847 31746 +3 31945 31944 31846 +3 31847 31945 31846 +3 32042 32041 31944 +3 31945 32042 31944 +3 30855 30854 30844 +3 30845 30855 30844 +3 30909 30908 30854 +3 30855 30909 30854 +3 30967 30966 30908 +3 30909 30967 30908 +3 31028 31027 30966 +3 30967 31028 30966 +3 31090 31089 31027 +3 31028 31090 31027 +3 31153 31152 31089 +3 31090 31153 31089 +3 31217 31216 31152 +3 31153 31217 31152 +3 31282 31281 31216 +3 31217 31282 31216 +3 31349 31348 31281 +3 31282 31349 31281 +3 31416 31415 31348 +3 31349 31416 31348 +3 31488 31487 31415 +3 31416 31488 31415 +3 31575 31574 31487 +3 31488 31575 31487 +3 31670 31669 31574 +3 31575 31670 31574 +3 31770 31769 31669 +3 31670 31770 31669 +3 31876 31875 31769 +3 31770 31876 31769 +3 31977 31976 31875 +3 31876 31977 31875 +3 32077 32076 31976 +3 31977 32077 31976 +3 32177 32176 32076 +3 32077 32177 32076 +3 32278 32277 32176 +3 32177 32278 32176 +3 32381 32380 32277 +3 32278 32381 32277 +3 32486 32485 32380 +3 32381 32486 32380 +3 32595 32594 32485 +3 32486 32595 32485 +3 32709 32708 32594 +3 32595 32709 32594 +3 32829 32828 32708 +3 32709 32829 32708 +3 33369 33368 33259 +3 33481 33480 33368 +3 33369 33481 33368 +3 33598 33597 33480 +3 33481 33598 33480 +3 33719 33718 33597 +3 33598 33719 33597 +3 33847 33846 33718 +3 33719 33847 33718 +3 33982 33981 33846 +3 33847 33982 33846 +3 34118 34117 33981 +3 33982 34118 33981 +3 34256 34255 34117 +3 34118 34256 34117 +3 34394 34393 34255 +3 34256 34394 34255 +3 34531 34530 34393 +3 34394 34531 34393 +3 34659 34658 34530 +3 34531 34659 34530 +3 34787 34786 34658 +3 34659 34787 34658 +3 34916 34915 34786 +3 34787 34916 34786 +3 35045 35044 34915 +3 34916 35045 34915 +3 35174 35173 35044 +3 35045 35174 35044 +3 35303 35302 35173 +3 35174 35303 35173 +3 3329 14262 35302 +3 35303 3329 35302 +3 22528 33796 19321 +3 16257 10454 14832 +3 31901 31900 31794 +3 34144 34282 34143 +3 32139 32138 32041 +3 32671 32670 32557 +3 32042 32139 32041 +3 32239 32238 32138 +3 31067 31129 31128 +3 32139 32239 32138 +3 17332 17410 17331 +3 34160 34298 34159 +3 12573 33814 33457 +3 2008 14284 18937 +3 12573 35003 34873 +3 33814 12573 34873 +3 35003 13509 34735 +3 34873 35003 34735 +3 13509 34997 33926 +3 34735 13509 33926 +3 34997 33130 28550 +3 33926 34997 28550 +3 33130 33709 34210 +3 28550 33130 34210 +3 33709 29409 28868 +3 34210 33709 28868 +3 29409 34079 34329 +3 28868 29409 34329 +3 19099 19751 27032 +3 8665 10723 10599 +3 22434 6913 6912 +3 16932 20153 18621 +3 32961 33067 32960 +3 34011 34147 34010 +3 31188 31252 31251 +3 31384 31383 31316 +3 30946 31004 30945 +3 31064 31065 31126 +3 32970 33076 32969 +3 33181 33286 33180 +3 34298 34297 34159 +3 33491 33610 33490 +3 35093 35222 35092 +3 33437 33438 33550 +3 2276 30090 12573 +3 34811 34810 34682 +3 32341 32340 32238 +3 32239 32341 32238 +3 32445 32444 32340 +3 32341 32445 32340 +3 32552 32551 32444 +3 34964 35093 34963 +3 32445 32552 32444 +3 32665 32664 32551 +3 30856 30855 30845 +3 30846 30856 30845 +3 30910 30909 30855 +3 30856 30910 30855 +3 30968 30967 30909 +3 30910 30968 30909 +3 31029 31028 30967 +3 30968 31029 30967 +3 31091 31090 31028 +3 31029 31091 31028 +3 31154 31153 31090 +3 31091 31154 31090 +3 31218 31217 31153 +3 31154 31218 31153 +3 31283 31282 31217 +3 31218 31283 31217 +3 31350 31349 31282 +3 31283 31350 31282 +3 31417 31416 31349 +3 31350 31417 31349 +3 31489 31488 31416 +3 31417 31489 31416 +3 31576 31575 31488 +3 31489 31576 31488 +3 31671 31670 31575 +3 31576 31671 31575 +3 31771 31770 31670 +3 31671 31771 31670 +3 31877 31876 31770 +3 31771 31877 31770 +3 31978 31977 31876 +3 31877 31978 31876 +3 32078 32077 31977 +3 31978 32078 31977 +3 32178 32177 32077 +3 32078 32178 32077 +3 32279 32278 32177 +3 32178 32279 32177 +3 32382 32381 32278 +3 32279 32382 32278 +3 32487 32486 32381 +3 32382 32487 32381 +3 32596 32595 32486 +3 32487 32596 32486 +3 32710 32709 32595 +3 32596 32710 32595 +3 32710 32829 32709 +3 33482 33481 33369 +3 33482 33599 33598 +3 33481 33482 33598 +3 33720 33719 33598 +3 33599 33720 33598 +3 33848 33847 33719 +3 33720 33848 33719 +3 33983 33982 33847 +3 33848 33983 33847 +3 34119 34118 33982 +3 33983 34119 33982 +3 34257 34256 34118 +3 34119 34257 34118 +3 34395 34394 34256 +3 34257 34395 34256 +3 34532 34531 34394 +3 34395 34532 34394 +3 34660 34659 34531 +3 34532 34660 34531 +3 34788 34787 34659 +3 34660 34788 34659 +3 34917 34916 34787 +3 34788 34917 34787 +3 35046 35045 34916 +3 34917 35046 34916 +3 35175 35174 35045 +3 35046 35175 35045 +3 35304 35303 35174 +3 35175 35304 35174 +3 35304 29691 3329 +3 35303 35304 3329 +3 30823 28871 17387 +3 32801 32679 11650 +3 32328 32431 32327 +3 26682 24725 26681 +3 32552 32665 32551 +3 32786 32785 32664 +3 32665 32786 32664 +3 32898 32897 32785 +3 32786 32898 32785 +3 33006 33005 32897 +3 32763 32875 32762 +3 32154 32153 12129 +3 17357 17288 2677 +3 22029 21935 22030 +3 30090 33680 35003 +3 12573 30090 35003 +3 33680 33941 13509 +3 35003 33680 13509 +3 33941 34866 34997 +3 13509 33941 34997 +3 34866 34847 33130 +3 34997 34866 33130 +3 34847 14275 33709 +3 33130 34847 33709 +3 14275 34871 29409 +3 33709 14275 29409 +3 34871 34479 34079 +3 29409 34871 34079 +3 35164 18937 35293 +3 18937 35164 35165 +3 6940 7038 6939 +3 17814 18901 17815 +3 32853 32961 32852 +3 31545 31544 31472 +3 31187 31188 31251 +3 31317 31316 31251 +3 30892 30946 30891 +3 31065 31064 31003 +3 33181 33180 33075 +3 33076 33181 33075 +3 32428 32429 32533 +3 21839 29355 29217 +3 33409 33408 33299 +3 33768 33902 33767 +3 34716 34717 34844 +3 33634 33633 33514 +3 32898 33006 32897 +3 33112 33111 33005 +3 33006 33112 33005 +3 33217 33216 33111 +3 33112 33217 33111 +3 33322 33321 33216 +3 33217 33322 33216 +3 33431 33430 33321 +3 30857 30856 30846 +3 30847 30857 30846 +3 30911 30910 30856 +3 30857 30911 30856 +3 30969 30968 30910 +3 30911 30969 30910 +3 31030 31029 30968 +3 30969 31030 30968 +3 31092 31091 31029 +3 31030 31092 31029 +3 31155 31154 31091 +3 31092 31155 31091 +3 31219 31218 31154 +3 31155 31219 31154 +3 31284 31283 31218 +3 31219 31284 31218 +3 31351 31350 31283 +3 31284 31351 31283 +3 31418 31417 31350 +3 31351 31418 31350 +3 31490 31489 31417 +3 31418 31490 31417 +3 31577 31576 31489 +3 31490 31577 31489 +3 31672 31671 31576 +3 31577 31672 31576 +3 31772 31771 31671 +3 31672 31772 31671 +3 31878 31877 31771 +3 31979 31978 31877 +3 31878 31979 31877 +3 32079 32078 31978 +3 31979 32079 31978 +3 32179 32178 32078 +3 32079 32179 32078 +3 32280 32279 32178 +3 32179 32280 32178 +3 32383 32382 32279 +3 32280 32383 32279 +3 32488 32487 32382 +3 32383 32488 32382 +3 32488 32597 32596 +3 32487 32488 32596 +3 32597 32711 32710 +3 32596 32597 32710 +3 33600 33599 33482 +3 33721 33720 33599 +3 33600 33721 33599 +3 33849 33848 33720 +3 33721 33849 33720 +3 33984 33983 33848 +3 33849 33984 33848 +3 34120 34119 33983 +3 33984 34120 33983 +3 34258 34257 34119 +3 34120 34258 34119 +3 34396 34395 34257 +3 34258 34396 34257 +3 34533 34532 34395 +3 34396 34533 34395 +3 34661 34660 34532 +3 34533 34661 34532 +3 34789 34788 34660 +3 34661 34789 34660 +3 34918 34917 34788 +3 34789 34918 34788 +3 35047 35046 34917 +3 34918 35047 34917 +3 35176 35175 35046 +3 35047 35176 35046 +3 35305 35304 35175 +3 35176 35305 35175 +3 28679 29691 35304 +3 35305 28679 35304 +3 29691 17288 3329 +3 28679 2677 29691 +3 18299 2009 2008 +3 33543 7171 7170 +3 33322 33431 33321 +3 16459 15610 6791 +3 29944 24847 27528 +3 32003 32103 32002 +3 21548 21640 21547 +3 32227 32226 32126 +3 34589 34717 34588 +3 21834 21833 21739 +3 3095 3235 3234 +3 2411 13101 33941 +3 17357 17290 17358 +3 33680 2411 33941 +3 17290 17357 2677 +3 13101 454 34866 +3 33941 13101 34866 +3 454 35238 34847 +3 34866 454 34847 +3 35238 34868 14275 +3 34847 35238 14275 +3 34868 35325 34871 +3 14275 34868 34871 +3 35325 33023 34479 +3 34871 35325 34479 +3 682 33547 800 +3 3096 3097 3236 +3 6974 34718 34719 +3 17355 17286 17287 +3 32741 32853 32740 +3 33067 33066 32960 +3 31317 31384 31316 +3 31451 31450 31383 +3 32345 32449 32344 +3 31004 31003 30945 +3 33395 33394 33285 +3 33286 33395 33285 +3 31544 31631 31543 +3 31192 31256 31255 +3 31297 31364 31296 +3 32309 32412 32308 +3 34452 34589 34451 +3 16007 78 13297 +3 32887 32995 32886 +3 32423 32528 32527 +3 33127 33126 33020 +3 31836 31934 31835 +3 33021 33127 33020 +3 7966 1275 8082 +3 33016 33122 33015 +3 30858 30857 30847 +3 30848 30858 30847 +3 30912 30911 30857 +3 30858 30912 30857 +3 30970 30969 30911 +3 30912 30970 30911 +3 31031 31030 30969 +3 30970 31031 30969 +3 31093 31092 31030 +3 31031 31093 31030 +3 31156 31155 31092 +3 31093 31156 31092 +3 31220 31219 31155 +3 31156 31220 31155 +3 31285 31284 31219 +3 31220 31285 31219 +3 31352 31351 31284 +3 31285 31352 31284 +3 31419 31418 31351 +3 31352 31419 31351 +3 31491 31490 31418 +3 31419 31491 31418 +3 31578 31577 31490 +3 31491 31578 31490 +3 31673 31672 31577 +3 31578 31673 31577 +3 31773 31772 31672 +3 31673 31773 31672 +3 31773 31879 31772 +3 31980 31979 31878 +3 32080 32079 31979 +3 31980 32080 31979 +3 32180 32179 32079 +3 32080 32180 32079 +3 32281 32280 32179 +3 32180 32281 32179 +3 32384 32383 32280 +3 32281 32384 32280 +3 32489 32488 32383 +3 32384 32489 32383 +3 32489 32598 32597 +3 32488 32489 32597 +3 32598 32712 32711 +3 32597 32598 32711 +3 33722 33721 33600 +3 33850 33849 33721 +3 33722 33850 33721 +3 33985 33984 33849 +3 33850 33985 33849 +3 34121 34120 33984 +3 33985 34121 33984 +3 34259 34258 34120 +3 34121 34259 34120 +3 34397 34396 34258 +3 34259 34397 34258 +3 34534 34533 34396 +3 34397 34534 34396 +3 34662 34661 34533 +3 34534 34662 34533 +3 34790 34789 34661 +3 34662 34790 34661 +3 34919 34918 34789 +3 34790 34919 34789 +3 35048 35047 34918 +3 34919 35048 34918 +3 35177 35176 35047 +3 35048 35177 35047 +3 35306 35305 35176 +3 35177 35306 35176 +3 13011 28679 35305 +3 35306 13011 35305 +3 23075 2677 28679 +3 13011 23075 28679 +3 33457 33338 33583 +3 27032 19751 18508 +3 1392 8082 1275 +3 32734 32733 32619 +3 32775 32887 32774 +3 31620 31621 31715 +3 34717 34845 34844 +3 34314 34452 34313 +3 13215 189 11789 +3 32847 32846 32734 +3 17410 17332 17333 +3 6884 2412 33942 +3 33680 30090 2411 +3 33023 13120 3096 +3 33028 454 13101 +3 6884 33028 13101 +3 34860 35238 454 +3 33028 34860 454 +3 34860 29278 34868 +3 35238 34860 34868 +3 29278 33470 35325 +3 34868 29278 35325 +3 33470 13120 33023 +3 35325 33470 33023 +3 31898 31999 31897 +3 34328 6952 34465 +3 33065 33064 32958 +3 6934 6935 7033 +3 32853 32852 32740 +3 32961 32960 32852 +3 31384 31451 31383 +3 31523 31522 31450 +3 32345 32344 32242 +3 30946 30945 30891 +3 33508 33507 33394 +3 33395 33508 33394 +3 32450 32449 32345 +3 33889 34024 33888 +3 33396 33509 33395 +3 32623 32737 32622 +3 34452 34451 34313 +3 34717 34716 34588 +3 34707 34706 34578 +3 33642 33769 33641 +3 31816 31922 31921 +3 21108 21197 21196 +3 11455 31948 11456 +3 31136 31135 31073 +3 28871 30823 28723 +3 30859 30858 30848 +3 30913 30912 30858 +3 30859 30913 30858 +3 30971 30970 30912 +3 30913 30971 30912 +3 31032 31031 30970 +3 30971 31032 30970 +3 31094 31093 31031 +3 31032 31094 31031 +3 31157 31156 31093 +3 31094 31157 31093 +3 31221 31220 31156 +3 31157 31221 31156 +3 31286 31285 31220 +3 31221 31286 31220 +3 31353 31352 31285 +3 31286 31353 31285 +3 31420 31419 31352 +3 31353 31420 31352 +3 31492 31491 31419 +3 31420 31492 31419 +3 31579 31578 31491 +3 31492 31579 31491 +3 31674 31673 31578 +3 31579 31674 31578 +3 31774 31773 31673 +3 31674 31774 31673 +3 31880 31879 31773 +3 31774 31880 31773 +3 32081 32080 31980 +3 31981 32081 31980 +3 32181 32180 32080 +3 32081 32181 32080 +3 32282 32281 32180 +3 32181 32282 32180 +3 32385 32384 32281 +3 32282 32385 32281 +3 32490 32489 32384 +3 32385 32490 32384 +3 32490 32599 32598 +3 32489 32490 32598 +3 32599 32713 32712 +3 32598 32599 32712 +3 33851 33850 33722 +3 33723 33851 33722 +3 33986 33985 33850 +3 33851 33986 33850 +3 34122 34121 33985 +3 33986 34122 33985 +3 34260 34259 34121 +3 34122 34260 34121 +3 34398 34397 34259 +3 34260 34398 34259 +3 34535 34534 34397 +3 34398 34535 34397 +3 34663 34662 34534 +3 34535 34663 34534 +3 34791 34790 34662 +3 34663 34791 34662 +3 34920 34919 34790 +3 34791 34920 34790 +3 35049 35048 34919 +3 34920 35049 34919 +3 35178 35177 35048 +3 35049 35178 35048 +3 35307 35306 35177 +3 35178 35307 35177 +3 12736 13011 35306 +3 35307 12736 35306 +3 27404 23075 13011 +3 12736 27404 13011 +3 22261 32684 34071 +3 17331 17330 33245 +3 31078 31140 31077 +3 34176 34314 34175 +3 31074 31136 31073 +3 32649 32648 32539 +3 33328 33327 33222 +3 34589 34588 34451 +3 34040 34176 34039 +3 31207 31206 31143 +3 31271 31270 31206 +3 33380 33379 33270 +3 33166 33165 33060 +3 19321 33796 17909 +3 13216 6393 189 +3 28221 33028 6884 +3 33942 28221 6884 +3 34063 34860 33028 +3 28221 34063 33028 +3 33544 29278 34860 +3 34063 33544 34860 +3 33544 33469 33470 +3 29278 33544 33470 +3 7516 33443 33444 +3 33470 33469 13120 +3 31697 31696 31601 +3 33949 12901 11251 +3 32518 32627 32517 +3 32959 33065 32958 +3 31805 31804 31704 +3 32741 32740 32626 +3 31076 31138 31075 +3 31451 31523 31450 +3 34023 34159 34022 +3 34450 34587 34449 +3 6488 6487 6360 +3 33627 33626 33507 +3 31542 31541 31469 +3 17383 28948 391 +3 33905 33904 33770 +3 31207 31271 31206 +3 33078 33183 33077 +3 33771 33905 33770 +3 33194 33193 33088 +3 33444 33335 7518 +3 17273 34111 34248 +3 17360 17359 13708 +3 31808 31914 31807 +3 33640 33639 33520 +3 32015 32014 31913 +3 30914 30913 30859 +3 30860 30914 30859 +3 30972 30971 30913 +3 30914 30972 30913 +3 31033 31032 30971 +3 30972 31033 30971 +3 31095 31094 31032 +3 31033 31095 31032 +3 31158 31157 31094 +3 31095 31158 31094 +3 31222 31221 31157 +3 31158 31222 31157 +3 31222 31287 31286 +3 31221 31222 31286 +3 31287 31354 31353 +3 31286 31287 31353 +3 31421 31420 31353 +3 31354 31421 31353 +3 31493 31492 31420 +3 31421 31493 31420 +3 31580 31579 31492 +3 31493 31580 31492 +3 31675 31674 31579 +3 31580 31675 31579 +3 31775 31774 31674 +3 31675 31775 31674 +3 31881 31880 31774 +3 31775 31881 31774 +3 31881 31982 31880 +3 32082 32081 31981 +3 32182 32181 32081 +3 32082 32182 32081 +3 32283 32282 32181 +3 32182 32283 32181 +3 32386 32385 32282 +3 32283 32386 32282 +3 32491 32490 32385 +3 32386 32491 32385 +3 32491 32600 32599 +3 32490 32491 32599 +3 32600 32714 32713 +3 32599 32600 32713 +3 33852 33851 33723 +3 33987 33986 33851 +3 33852 33987 33851 +3 34123 34122 33986 +3 33987 34123 33986 +3 34261 34260 34122 +3 34123 34261 34122 +3 34399 34398 34260 +3 34261 34399 34260 +3 34536 34535 34398 +3 34399 34536 34398 +3 34664 34663 34535 +3 34536 34664 34535 +3 34792 34791 34663 +3 34664 34792 34663 +3 34921 34920 34791 +3 34792 34921 34791 +3 35050 35049 34920 +3 34921 35050 34920 +3 35179 35178 35049 +3 35050 35179 35049 +3 35308 35307 35178 +3 35179 35308 35178 +3 28194 12736 35307 +3 35308 28194 35307 +3 19251 27404 12736 +3 28194 19251 12736 +3 11718 34196 13055 +3 27404 19251 13708 +3 33644 33771 33643 +3 33942 19479 28221 +3 32414 32519 32413 +3 32128 32228 32127 +3 31465 31464 31397 +3 33165 33164 33059 +3 34314 34313 34175 +3 33524 33525 33643 +3 31336 31335 31270 +3 31271 31336 31270 +3 32429 32534 32533 +3 32794 32793 32672 +3 33514 33513 33400 +3 32954 33060 32953 +3 35169 17283 17351 +3 3098 13120 3099 +3 34470 34063 28221 +3 34470 19479 19480 +3 9554 33544 34063 +3 34470 9554 34063 +3 33937 33469 33544 +3 9554 33937 33544 +3 21954 20901 19761 +3 7017 27871 6920 +3 33170 33169 33064 +3 33275 33274 33169 +3 32627 32626 32517 +3 32627 32741 32626 +3 31705 31704 31609 +3 31705 31805 31704 +3 32225 32326 32224 +3 34842 34843 34971 +3 33888 34023 33887 +3 34297 34296 34158 +3 35346 27987 35345 +3 32972 32971 32863 +3 31470 31469 31402 +3 31470 31542 31469 +3 33525 33644 33643 +3 34176 34175 34039 +3 28104 27842 35344 +3 31398 31465 31397 +3 31536 31535 31463 +3 33221 33326 33325 +3 33465 34226 17695 +3 33412 33525 33411 +3 901 14838 9280 +3 30915 30914 30860 +3 30861 30915 30860 +3 30973 30972 30914 +3 30915 30973 30914 +3 31034 31033 30972 +3 30973 31034 30972 +3 31096 31095 31033 +3 31034 31096 31033 +3 31159 31158 31095 +3 31096 31159 31095 +3 31159 31223 31222 +3 31158 31159 31222 +3 31223 31288 31287 +3 31222 31223 31287 +3 31288 31355 31354 +3 31287 31288 31354 +3 31422 31421 31354 +3 31355 31422 31354 +3 31494 31493 31421 +3 31422 31494 31421 +3 31581 31580 31493 +3 31494 31581 31493 +3 31676 31675 31580 +3 31581 31676 31580 +3 31776 31775 31675 +3 31676 31776 31675 +3 31882 31881 31775 +3 31776 31882 31775 +3 31983 31982 31881 +3 31882 31983 31881 +3 32183 32182 32082 +3 32083 32183 32082 +3 32284 32283 32182 +3 32183 32284 32182 +3 32387 32386 32283 +3 32284 32387 32283 +3 32492 32491 32386 +3 32387 32492 32386 +3 32492 32601 32600 +3 32491 32492 32600 +3 32601 32715 32714 +3 32600 32601 32714 +3 33988 33987 33852 +3 33853 33988 33852 +3 34124 34123 33987 +3 33988 34124 33987 +3 34262 34261 34123 +3 34124 34262 34123 +3 34400 34399 34261 +3 34262 34400 34261 +3 34537 34536 34399 +3 34400 34537 34399 +3 34665 34664 34536 +3 34537 34665 34536 +3 34793 34792 34664 +3 34665 34793 34664 +3 34922 34921 34792 +3 34793 34922 34792 +3 35051 35050 34921 +3 34922 35051 34921 +3 35180 35179 35050 +3 35051 35180 35050 +3 35309 35308 35179 +3 35180 35309 35179 +3 17572 28194 35308 +3 35309 17572 35308 +3 27781 19251 28194 +3 17572 27781 28194 +3 31647 31646 26612 +3 19371 19481 19480 +3 33525 33524 33411 +3 31903 31902 31796 +3 31848 31847 31747 +3 31748 31848 31747 +3 31946 31945 31847 +3 31848 31946 31847 +3 33771 33770 33643 +3 33412 33411 33302 +3 31403 31402 31335 +3 31336 31403 31335 +3 32450 32557 32449 +3 31405 31404 31337 +3 33508 33627 33507 +3 33754 33753 33626 +3 27871 13966 6920 +3 35269 10263 21933 +3 19481 2550 19480 +3 26433 25944 26366 +3 33927 19037 9554 +3 34470 33927 9554 +3 24791 33937 9554 +3 19037 24791 9554 +3 33497 33496 33383 +3 31183 31184 31247 +3 32310 32413 32309 +3 33065 33170 33064 +3 32012 32112 32011 +3 32518 32517 32412 +3 31524 31523 31451 +3 31610 31705 31609 +3 34700 34699 34571 +3 31452 31451 31384 +3 35346 35345 35216 +3 34159 34158 34022 +3 31075 31137 31074 +3 19965 19995 19964 +3 33093 33198 33092 +3 31403 31470 31402 +3 32043 32042 31945 +3 33303 33302 33197 +3 31946 32043 31945 +3 32140 32139 32042 +3 32043 32140 32042 +3 32240 32239 32139 +3 32140 32240 32139 +3 30916 30915 30861 +3 30862 30916 30861 +3 30974 30973 30915 +3 30916 30974 30915 +3 31035 31034 30973 +3 30974 31035 30973 +3 31097 31096 31034 +3 31035 31097 31034 +3 31097 31160 31159 +3 31096 31097 31159 +3 31160 31224 31223 +3 31159 31160 31223 +3 31224 31289 31288 +3 31223 31224 31288 +3 31356 31355 31288 +3 31289 31356 31288 +3 31423 31422 31355 +3 31356 31423 31355 +3 31495 31494 31422 +3 31423 31495 31422 +3 31582 31581 31494 +3 31495 31582 31494 +3 31677 31676 31581 +3 31582 31677 31581 +3 31777 31776 31676 +3 31677 31777 31676 +3 31883 31882 31776 +3 31777 31883 31776 +3 31984 31983 31882 +3 31883 31984 31882 +3 31984 32084 31983 +3 32184 32183 32083 +3 32285 32284 32183 +3 32184 32285 32183 +3 32388 32387 32284 +3 32285 32388 32284 +3 32493 32492 32387 +3 32388 32493 32387 +3 32602 32601 32492 +3 32493 32602 32492 +3 32602 32716 32715 +3 32601 32602 32715 +3 33989 33988 33853 +3 33854 33989 33853 +3 34125 34124 33988 +3 33989 34125 33988 +3 34263 34262 34124 +3 34125 34263 34124 +3 34401 34400 34262 +3 34263 34401 34262 +3 34538 34537 34400 +3 34401 34538 34400 +3 34666 34665 34537 +3 34538 34666 34537 +3 34794 34793 34665 +3 34666 34794 34665 +3 34923 34922 34793 +3 34794 34923 34793 +3 35052 35051 34922 +3 34923 35052 34922 +3 35181 35180 35051 +3 35052 35181 35051 +3 35310 35309 35180 +3 35181 35310 35180 +3 30636 17572 35309 +3 35310 30636 35309 +3 29270 27781 17572 +3 30636 29270 17572 +3 3364 34355 3225 +3 33927 2685 19037 +3 33198 33197 33092 +3 31376 31375 31308 +3 32342 32341 32239 +3 32240 32342 32239 +3 32446 32445 32341 +3 32342 32446 32341 +3 33303 33412 33302 +3 33093 33092 32986 +3 33889 33888 33754 +3 30956 30955 30901 +3 32346 32450 32345 +3 32557 32556 32449 +3 33627 33754 33626 +3 33888 33887 33753 +3 31696 31695 31600 +3 32243 32345 32242 +3 33807 21223 21049 +3 33393 33506 33392 +3 34328 34191 6886 +3 19310 18390 35324 +3 27982 26795 25586 +3 19037 34057 24791 +3 33170 33275 33169 +3 33384 33497 33383 +3 32209 32310 32208 +3 32413 32518 32412 +3 32012 32011 31910 +3 32212 32211 32111 +3 30945 31003 30944 +3 31375 31374 31307 +3 34297 34435 34296 +3 34572 34700 34571 +3 35217 35216 35087 +3 35217 35346 35216 +3 31075 31074 31013 +3 31137 31200 31199 +3 32987 32986 32878 +3 33198 33303 33197 +3 32553 32552 32445 +3 32446 32553 32445 +3 32666 32665 32552 +3 31474 31546 31473 +3 32553 32666 32552 +3 32787 32786 32665 +3 32666 32787 32665 +3 32899 32898 32786 +3 30917 30916 30862 +3 30863 30917 30862 +3 30975 30974 30916 +3 30917 30975 30916 +3 31036 31035 30974 +3 30975 31036 30974 +3 31098 31097 31035 +3 31036 31098 31035 +3 31098 31161 31160 +3 31097 31098 31160 +3 31161 31225 31224 +3 31160 31161 31224 +3 31225 31290 31289 +3 31224 31225 31289 +3 31357 31356 31289 +3 31290 31357 31289 +3 31424 31423 31356 +3 31357 31424 31356 +3 31496 31495 31423 +3 31424 31496 31423 +3 31583 31582 31495 +3 31496 31583 31495 +3 31678 31677 31582 +3 31583 31678 31582 +3 31778 31777 31677 +3 31678 31778 31677 +3 31884 31883 31777 +3 31778 31884 31777 +3 31985 31984 31883 +3 31884 31985 31883 +3 32085 32084 31984 +3 31985 32085 31984 +3 32286 32285 32184 +3 32185 32286 32184 +3 32389 32388 32285 +3 32286 32389 32285 +3 32494 32493 32388 +3 32389 32494 32388 +3 32603 32602 32493 +3 32494 32603 32493 +3 32603 32717 32716 +3 32602 32603 32716 +3 33990 33989 33854 +3 33855 33990 33854 +3 34126 34125 33989 +3 33990 34126 33989 +3 34264 34263 34125 +3 34126 34264 34125 +3 34402 34401 34263 +3 34264 34402 34263 +3 34539 34538 34401 +3 34402 34539 34401 +3 34667 34666 34538 +3 34539 34667 34538 +3 34795 34794 34666 +3 34667 34795 34666 +3 34924 34923 34794 +3 34795 34924 34794 +3 35053 35052 34923 +3 34924 35053 34923 +3 35182 35181 35052 +3 35053 35182 35052 +3 35311 35310 35181 +3 35182 35311 35181 +3 26580 30636 35310 +3 35311 26580 35310 +3 30755 29270 30636 +3 26580 30755 30636 +3 33633 33632 33513 +3 34244 21199 21200 +3 32787 32899 32786 +3 31474 31473 31406 +3 33007 33006 32898 +3 32899 33007 32898 +3 33113 33112 33006 +3 32987 33093 32986 +3 33074 33179 33073 +3 31014 31013 30955 +3 30956 31014 30955 +3 27987 28104 35345 +3 35088 35087 34958 +3 33754 33888 33753 +3 34023 34022 33887 +3 32449 32448 32344 +3 31472 31544 31471 +3 31610 31609 31522 +3 30936 30994 30935 +3 28237 24731 28120 +3 17286 13221 14262 +3 34012 34011 33876 +3 6948 6947 6880 +3 33384 33383 33274 +3 33275 33384 33274 +3 32109 32209 32108 +3 32413 32412 32309 +3 31911 32012 31910 +3 32112 32111 32011 +3 31189 31253 31252 +3 31385 31452 31384 +3 34572 34571 34434 +3 34435 34572 34434 +3 34959 34958 34829 +3 35088 35217 35087 +3 31014 31075 31013 +3 31137 31136 31074 +3 31728 31828 31727 +3 32879 32987 32878 +3 33007 33113 33006 +3 33218 33217 33112 +3 31546 31633 31545 +3 33113 33218 33112 +3 31407 31474 31406 +3 31633 31632 31545 +3 33323 33322 33217 +3 33218 33323 33217 +3 33323 33432 33431 +3 33322 33323 33431 +3 30918 30917 30863 +3 30864 30918 30863 +3 30976 30975 30917 +3 30918 30976 30917 +3 31037 31036 30975 +3 30976 31037 30975 +3 31099 31098 31036 +3 31037 31099 31036 +3 31099 31162 31161 +3 31098 31099 31161 +3 31162 31226 31225 +3 31161 31162 31225 +3 31226 31291 31290 +3 31225 31226 31290 +3 31358 31357 31290 +3 31291 31358 31290 +3 31425 31424 31357 +3 31358 31425 31357 +3 31497 31496 31424 +3 31425 31497 31424 +3 31584 31583 31496 +3 31497 31584 31496 +3 31679 31678 31583 +3 31584 31679 31583 +3 31779 31778 31678 +3 31679 31779 31678 +3 31885 31884 31778 +3 31779 31885 31778 +3 31986 31985 31884 +3 31885 31986 31884 +3 32086 32085 31985 +3 31986 32086 31985 +3 32086 32186 32085 +3 32287 32286 32185 +3 32390 32389 32286 +3 32287 32390 32286 +3 32495 32494 32389 +3 32390 32495 32389 +3 32604 32603 32494 +3 32495 32604 32494 +3 32604 32718 32717 +3 32603 32604 32717 +3 32718 32830 32717 +3 33991 33990 33855 +3 33856 33991 33855 +3 34127 34126 33990 +3 33991 34127 33990 +3 34265 34264 34126 +3 34127 34265 34126 +3 34403 34402 34264 +3 34265 34403 34264 +3 34540 34539 34402 +3 34403 34540 34402 +3 34668 34667 34539 +3 34540 34668 34539 +3 34796 34795 34667 +3 34668 34796 34667 +3 34925 34924 34795 +3 34796 34925 34795 +3 35054 35053 34924 +3 34925 35054 34924 +3 35183 35182 35053 +3 35054 35183 35053 +3 35312 35311 35182 +3 35183 35312 35182 +3 18935 26580 35311 +3 35312 18935 35311 +3 18935 27145 30755 +3 26580 18935 30755 +3 19966 19967 19998 +3 7171 7172 7279 +3 7172 33431 7173 +3 21112 19910 21200 +3 31716 31816 31815 +3 33410 33409 33300 +3 32422 32423 32527 +3 32757 32869 32868 +3 32860 32968 32859 +3 31136 31137 31199 +3 31200 31264 31263 +3 34959 35088 34958 +3 34161 34160 34024 +3 34159 34297 34158 +3 34435 34434 34296 +3 31138 31137 31075 +3 35207 35206 35077 +3 31911 31910 31804 +3 31523 31610 31522 +3 31908 32009 31907 +3 32109 32108 32008 +3 34148 34147 34011 +3 33877 34012 33876 +3 33616 33615 33496 +3 33497 33616 33496 +3 32009 32109 32008 +3 32310 32309 32208 +3 32112 32212 32111 +3 32313 32312 32211 +3 32626 32625 32516 +3 31003 31002 30944 +3 34957 34956 34827 +3 34828 34957 34827 +3 34299 34298 34160 +3 34830 34959 34829 +3 31199 31200 31263 +3 31264 31329 31328 +3 32767 32766 32652 +3 32879 32878 32766 +3 31728 31727 31632 +3 32767 32879 32766 +3 31633 31728 31632 +3 31828 31827 31727 +3 31546 31545 31473 +3 31535 31622 31621 +3 33948 34060 12628 +3 32957 32956 32848 +3 31461 31462 31533 +3 32031 32030 31933 +3 30919 30918 30864 +3 30865 30919 30864 +3 30977 30976 30918 +3 30919 30977 30918 +3 31038 31037 30976 +3 30977 31038 30976 +3 31100 31099 31037 +3 31038 31100 31037 +3 31100 31163 31162 +3 31099 31100 31162 +3 31163 31227 31226 +3 31162 31163 31226 +3 31227 31292 31291 +3 31226 31227 31291 +3 31359 31358 31291 +3 31292 31359 31291 +3 31426 31425 31358 +3 31359 31426 31358 +3 31498 31497 31425 +3 31426 31498 31425 +3 31585 31584 31497 +3 31498 31585 31497 +3 31680 31679 31584 +3 31585 31680 31584 +3 31780 31779 31679 +3 31680 31780 31679 +3 31886 31885 31779 +3 31780 31886 31779 +3 31987 31986 31885 +3 31886 31987 31885 +3 32087 32086 31986 +3 31987 32087 31986 +3 32187 32186 32086 +3 32087 32187 32086 +3 32391 32390 32287 +3 32288 32391 32287 +3 32496 32495 32390 +3 32391 32496 32390 +3 32605 32604 32495 +3 32496 32605 32495 +3 32605 32719 32718 +3 32604 32605 32718 +3 32831 32830 32718 +3 32719 32831 32718 +3 33992 33991 33856 +3 33857 33992 33856 +3 34128 34127 33991 +3 33992 34128 33991 +3 34266 34265 34127 +3 34128 34266 34127 +3 34404 34403 34265 +3 34266 34404 34265 +3 34541 34540 34403 +3 34404 34541 34403 +3 34669 34668 34540 +3 34541 34669 34540 +3 34797 34796 34668 +3 34669 34797 34668 +3 34926 34925 34796 +3 34797 34926 34796 +3 35055 35054 34925 +3 34926 35055 34925 +3 35184 35183 35054 +3 35055 35184 35054 +3 35313 35312 35183 +3 35184 35313 35183 +3 17628 18935 35312 +3 35313 17628 35312 +3 7065 33543 7170 +3 35136 22025 22120 +3 3757 3888 3756 +3 35210 35339 35209 +3 32349 32348 32246 +3 34958 35087 34957 +3 31836 31835 31735 +3 31516 31515 31443 +3 32304 32407 32303 +3 31543 31630 31542 +3 15885 15609 17389 +3 31527 31526 31454 +3 31621 31622 31716 +3 31817 31816 31716 +3 34025 34161 34024 +3 34025 34024 33889 +3 35086 35085 34956 +3 34957 35086 34956 +3 31125 31126 31188 +3 31064 31063 31002 +3 32313 32416 32312 +3 31805 31911 31804 +3 31185 31249 31248 +3 31184 31185 31248 +3 35332 35333 13106 +3 34012 34148 34011 +3 33743 33742 33615 +3 33616 33743 33615 +3 31802 31908 31801 +3 32209 32208 32108 +3 32212 32313 32211 +3 32416 32415 32312 +3 32517 32626 32516 +3 34949 35078 34948 +3 35215 35214 35085 +3 32013 32012 31911 +3 34161 34299 34160 +3 35086 35215 35085 +3 31462 31463 31534 +3 34437 34436 34298 +3 31395 31396 31462 +3 31463 31535 31534 +3 31263 31264 31328 +3 31329 31396 31395 +3 31328 31329 31395 +3 31396 31463 31462 +3 31534 31535 31621 +3 31622 31717 31716 +3 32751 32863 32750 +3 32147 32146 32049 +3 34285 34423 34284 +3 32979 33085 32978 +3 30920 30919 30865 +3 30866 30920 30865 +3 30978 30977 30919 +3 30920 30978 30919 +3 31039 31038 30977 +3 30978 31039 30977 +3 31039 31101 31100 +3 31038 31039 31100 +3 31101 31164 31163 +3 31100 31101 31163 +3 31164 31228 31227 +3 31163 31164 31227 +3 31228 31293 31292 +3 31227 31228 31292 +3 31360 31359 31292 +3 31293 31360 31292 +3 31427 31426 31359 +3 31360 31427 31359 +3 31499 31498 31426 +3 31427 31499 31426 +3 31586 31585 31498 +3 31499 31586 31498 +3 31681 31680 31585 +3 31586 31681 31585 +3 31781 31780 31680 +3 31681 31781 31680 +3 31887 31886 31780 +3 31781 31887 31780 +3 31988 31987 31886 +3 31887 31988 31886 +3 32088 32087 31987 +3 31988 32088 31987 +3 32188 32187 32087 +3 32088 32188 32087 +3 32392 32391 32288 +3 32289 32392 32288 +3 32497 32496 32391 +3 32392 32497 32391 +3 32606 32605 32496 +3 32497 32606 32496 +3 32720 32719 32605 +3 32606 32720 32605 +3 32832 32831 32719 +3 32720 32832 32719 +3 33724 33858 33857 +3 33993 33992 33857 +3 33858 33993 33857 +3 34129 34128 33992 +3 33993 34129 33992 +3 34267 34266 34128 +3 34129 34267 34128 +3 34405 34404 34266 +3 34267 34405 34266 +3 34542 34541 34404 +3 34405 34542 34404 +3 34670 34669 34541 +3 34542 34670 34541 +3 34798 34797 34669 +3 34670 34798 34669 +3 34927 34926 34797 +3 34798 34927 34797 +3 35056 35055 34926 +3 34927 35056 34926 +3 35185 35184 35055 +3 35056 35185 35055 +3 35314 35313 35184 +3 35185 35314 35184 +3 13980 17628 35313 +3 35314 13980 35313 +3 13980 6992 17628 +3 7517 7631 7516 +3 33190 33295 33189 +3 31697 31797 31696 +3 33227 33226 33121 +3 33310 33419 33309 +3 33895 33894 33760 +3 33122 33227 33121 +3 33438 33439 33551 +3 34432 34431 34293 +3 31717 31817 31716 +3 32024 32023 31922 +3 31923 31922 31816 +3 31817 31923 31816 +3 33890 34025 33889 +3 33629 33756 33628 +3 32651 32765 32650 +3 22025 35136 22023 +3 34024 34160 34023 +3 32921 32807 32808 +3 33280 33389 33279 +3 32521 32520 32415 +3 31059 31060 31121 +3 31122 31185 31184 +3 13984 19482 13106 +3 19482 26966 13106 +3 33877 33876 33742 +3 33743 33877 33742 +3 31802 31801 31701 +3 32009 32008 31907 +3 32416 32521 32415 +3 32630 32629 32520 +3 32744 32743 32629 +3 32521 32630 32520 +3 31706 31806 31705 +3 32047 32046 31949 +3 28012 29281 30607 +3 32102 32101 32001 +3 34299 34437 34298 +3 29281 28012 27726 +3 34574 34573 34436 +3 34437 34574 34436 +3 34830 34829 34701 +3 34702 34830 34701 +3 33397 33510 33396 +3 33510 33629 33509 +3 31923 32024 31922 +3 32325 32428 32427 +3 31917 31918 32018 +3 31918 32019 32018 +3 31074 31073 31012 +3 33118 33223 33117 +3 30921 30920 30866 +3 30867 30921 30866 +3 30979 30978 30920 +3 30921 30979 30920 +3 31040 31039 30978 +3 30979 31040 30978 +3 31040 31102 31101 +3 31039 31040 31101 +3 31102 31165 31164 +3 31101 31102 31164 +3 31165 31229 31228 +3 31164 31165 31228 +3 31229 31294 31293 +3 31228 31229 31293 +3 31361 31360 31293 +3 31294 31361 31293 +3 31428 31427 31360 +3 31361 31428 31360 +3 31500 31499 31427 +3 31428 31500 31427 +3 31587 31586 31499 +3 31500 31587 31499 +3 31682 31681 31586 +3 31587 31682 31586 +3 31782 31781 31681 +3 31682 31782 31681 +3 31888 31887 31781 +3 31782 31888 31781 +3 31989 31988 31887 +3 31888 31989 31887 +3 32089 32088 31988 +3 31989 32089 31988 +3 32189 32188 32088 +3 32089 32189 32088 +3 32189 32290 32188 +3 32393 32392 32289 +3 32498 32497 32392 +3 32393 32498 32392 +3 32607 32606 32497 +3 32498 32607 32497 +3 32607 32721 32720 +3 32606 32607 32720 +3 32833 32832 32720 +3 32721 32833 32720 +3 32833 32941 32832 +3 33859 33858 33724 +3 33725 33859 33724 +3 33994 33993 33858 +3 33859 33994 33858 +3 34130 34129 33993 +3 33994 34130 33993 +3 34268 34267 34129 +3 34130 34268 34129 +3 34406 34405 34267 +3 34268 34406 34267 +3 34543 34542 34405 +3 34406 34543 34405 +3 34671 34670 34542 +3 34543 34671 34542 +3 34799 34798 34670 +3 34671 34799 34670 +3 34928 34927 34798 +3 34799 34928 34798 +3 35057 35056 34927 +3 34928 35057 34927 +3 35186 35185 35056 +3 35057 35186 35056 +3 34343 34989 12808 +3 35234 22228 22229 +3 13979 13980 35314 +3 13980 6993 6992 +3 35234 17446 22325 +3 16316 9679 5988 +3 31013 31012 30954 +3 31013 31074 31012 +3 30955 30954 30900 +3 32103 32102 32002 +3 32968 33074 32967 +3 32124 32123 32023 +3 31471 31470 31403 +3 33288 33287 33182 +3 32024 32124 32023 +3 33890 33889 33755 +3 33756 33755 33628 +3 32562 32561 32454 +3 33756 33890 33755 +3 30957 31015 30956 +3 32877 32876 32764 +3 33502 33501 33388 +3 33171 33276 33170 +3 31060 31122 31121 +3 33389 33502 33388 +3 3625 13307 3496 +3 31121 31122 31184 +3 32511 32620 32510 +3 32352 32249 11580 +3 34286 34285 34147 +3 34148 34286 34147 +3 31702 31802 31701 +3 31908 31907 31801 +3 31249 31314 31313 +3 31448 31447 31380 +3 33175 33280 33174 +3 33389 33388 33279 +3 33175 33174 33069 +3 33280 33279 33174 +3 34562 34690 34561 +3 34562 34561 34424 +3 27842 29281 27726 +3 5982 9866 6114 +3 27842 27726 35343 +3 35344 27842 35343 +3 35344 35343 35214 +3 35215 35344 35214 +3 33288 33397 33287 +3 33629 33628 33509 +3 32124 32224 32123 +3 32324 32325 32427 +3 33182 33287 33181 +3 33284 33393 33283 +3 30955 31013 30954 +3 27842 28104 29281 +3 30922 30921 30867 +3 30868 30922 30867 +3 30980 30979 30921 +3 30922 30980 30921 +3 31041 31040 30979 +3 30980 31041 30979 +3 31041 31103 31102 +3 31040 31041 31102 +3 31103 31166 31165 +3 31102 31103 31165 +3 31166 31230 31229 +3 31165 31166 31229 +3 31295 31294 31229 +3 31230 31295 31229 +3 31362 31361 31294 +3 31295 31362 31294 +3 31429 31428 31361 +3 31362 31429 31361 +3 31501 31500 31428 +3 31429 31501 31428 +3 31588 31587 31500 +3 31501 31588 31500 +3 31683 31682 31587 +3 31588 31683 31587 +3 31783 31782 31682 +3 31683 31783 31682 +3 31889 31888 31782 +3 31783 31889 31782 +3 31990 31989 31888 +3 31889 31990 31888 +3 32090 32089 31989 +3 31990 32090 31989 +3 32190 32189 32089 +3 32090 32190 32089 +3 32291 32290 32189 +3 32190 32291 32189 +3 32499 32498 32393 +3 32394 32499 32393 +3 32608 32607 32498 +3 32499 32608 32498 +3 32722 32721 32607 +3 32608 32722 32607 +3 32834 32833 32721 +3 32722 32834 32721 +3 32834 32942 32941 +3 32833 32834 32941 +3 33860 33859 33725 +3 33726 33860 33725 +3 33995 33994 33859 +3 33860 33995 33859 +3 34131 34130 33994 +3 33995 34131 33994 +3 34269 34268 34130 +3 34131 34269 34130 +3 34407 34406 34268 +3 34269 34407 34268 +3 34544 34543 34406 +3 34407 34544 34406 +3 34672 34671 34543 +3 34544 34672 34543 +3 34800 34799 34671 +3 34672 34800 34671 +3 34929 34928 34799 +3 34800 34929 34799 +3 35058 35057 34928 +3 34929 35058 34928 +3 35187 35186 35057 +3 35058 35187 35057 +3 21198 34243 21197 +3 29403 18700 17480 +3 7094 27145 7095 +3 31244 31309 31243 +3 30901 30955 30900 +3 31267 31266 31202 +3 31396 31397 31463 +3 31331 31330 31265 +3 32002 32001 31900 +3 33506 33505 33392 +3 32533 32642 32641 +3 32224 32223 32123 +3 32972 33078 32971 +3 33183 33182 33077 +3 33100 33205 33099 +3 32796 32908 32795 +3 32143 32142 32045 +3 32765 32764 32650 +3 33621 33620 33501 +3 31076 31075 31014 +3 30999 30998 30940 +3 33502 33621 33501 +3 30941 30999 30940 +3 31060 31059 30998 +3 32846 32845 32733 +3 35334 35333 35204 +3 31017 31016 30958 +3 32103 32203 32102 +3 34424 34423 34285 +3 34286 34424 34285 +3 34424 34561 34423 +3 34561 34560 34423 +3 31248 31249 31313 +3 31381 31380 31313 +3 31381 31448 31380 +3 31314 31381 31313 +3 32856 32964 32855 +3 33070 33175 33069 +3 31380 31447 31379 +3 31519 31518 31446 +3 32514 32623 32513 +3 32623 32622 32513 +3 32143 32243 32142 +3 34715 34714 34586 +3 33100 33099 32993 +3 32877 32985 32876 +3 33183 33288 33182 +3 33510 33509 33396 +3 32224 32325 32324 +3 32223 32224 32324 +3 33392 33505 33391 +3 32451 32558 32450 +3 31203 31202 31139 +3 33912 33911 33777 +3 30923 30922 30868 +3 30869 30923 30868 +3 30981 30980 30922 +3 30923 30981 30922 +3 31042 31041 30980 +3 30981 31042 30980 +3 31042 31104 31103 +3 31041 31042 31103 +3 31104 31167 31166 +3 31103 31104 31166 +3 31167 31231 31230 +3 31166 31167 31230 +3 31296 31295 31230 +3 31231 31296 31230 +3 31363 31362 31295 +3 31296 31363 31295 +3 31430 31429 31362 +3 31363 31430 31362 +3 31502 31501 31429 +3 31430 31502 31429 +3 31589 31588 31501 +3 31502 31589 31501 +3 31684 31683 31588 +3 31589 31684 31588 +3 31784 31783 31683 +3 31684 31784 31683 +3 31890 31889 31783 +3 31784 31890 31783 +3 31991 31990 31889 +3 31890 31991 31889 +3 32091 32090 31990 +3 31991 32091 31990 +3 32191 32190 32090 +3 32091 32191 32090 +3 32292 32291 32190 +3 32191 32292 32190 +3 32292 32395 32291 +3 32500 32499 32394 +3 32609 32608 32499 +3 32500 32609 32499 +3 32723 32722 32608 +3 32609 32723 32608 +3 32723 32835 32834 +3 32722 32723 32834 +3 32835 32943 32942 +3 32834 32835 32942 +3 32943 33049 32942 +3 33861 33860 33726 +3 33727 33861 33726 +3 33996 33995 33860 +3 33861 33996 33860 +3 34132 34131 33995 +3 33996 34132 33995 +3 34270 34269 34131 +3 34132 34270 34131 +3 34408 34407 34269 +3 34270 34408 34269 +3 34545 34544 34407 +3 34408 34545 34407 +3 34673 34672 34544 +3 34545 34673 34544 +3 34801 34800 34672 +3 34673 34801 34672 +3 34930 34929 34800 +3 34801 34930 34800 +3 35059 35058 34929 +3 34930 35059 34929 +3 35188 35187 35058 +3 35059 35188 35058 +3 22321 22225 22322 +3 34780 34909 17277 +3 17346 34909 17279 +3 34909 17346 17277 +3 17277 17346 17345 diff --git a/examples/04-mesh/fs_mesh.sc b/examples/04-mesh/fs_mesh.sc new file mode 100644 index 000000000..936df5dde --- /dev/null +++ b/examples/04-mesh/fs_mesh.sc @@ -0,0 +1,54 @@ +$input v_pos, v_view, v_normal, v_color0 + +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform float u_time; + +vec2 blinn(vec3 _lightDir, vec3 _normal, vec3 _viewDir) +{ + float ndotl = dot(_normal, _lightDir); + vec3 reflected = _lightDir - 2.0*ndotl*_normal; // reflect(_lightDir, _normal); + float rdotv = dot(reflected, _viewDir); + return vec2(ndotl, rdotv); +} + +float fresnel(float _ndotl, float _bias, float _pow) +{ + float facing = (1.0 - _ndotl); + return max(_bias + (1.0 - _bias) * pow(facing, _pow), 0.0); +} + +vec4 lit(float _ndotl, float _rdotv, float _m) +{ + float diff = max(0.0, _ndotl); + float spec = step(0.0, _ndotl) * max(0.0, _rdotv * _m); + return vec4(1.0, diff, spec, 1.0); +} + +void main() +{ + vec3 lightDir = vec3(0.0, 0.0, -1.0); + vec3 normal = normalize(v_normal); + vec3 view = normalize(v_view); + vec2 bln = blinn(lightDir, normal, view); + vec4 lc = lit(bln.x, bln.y, 1.0); + float fres = fresnel(bln.x, 0.2, 5.0); + + float index = ( (sin(v_pos.x*3.0+u_time)*0.3+0.7) + + ( cos(v_pos.y*3.0+u_time)*0.4+0.6) + + ( cos(v_pos.z*3.0+u_time)*0.2+0.8) + )*M_PI; + + vec3 color = vec3(sin(index*8.0)*0.4 + 0.6 + , sin(index*4.0)*0.4 + 0.6 + , sin(index*2.0)*0.4 + 0.6 + ) * v_color0.xyz; + + gl_FragColor.xyz = pow(vec3(0.07, 0.06, 0.08) + color*lc.y + fres*pow(lc.z, 128.0), vec3_splat(1.0/2.2) ); + gl_FragColor.w = 1.0; +} diff --git a/examples/04-mesh/makefile b/examples/04-mesh/makefile new file mode 100644 index 000000000..900aad91e --- /dev/null +++ b/examples/04-mesh/makefile @@ -0,0 +1,9 @@ +# +# Copyright 2011-2012 Branimir Karadzic. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime + +include $(BGFX_DIR)/premake/shader.mk diff --git a/examples/04-mesh/mesh.cpp b/examples/04-mesh/mesh.cpp new file mode 100644 index 000000000..b6688f855 --- /dev/null +++ b/examples/04-mesh/mesh.cpp @@ -0,0 +1,316 @@ +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include +#include +#include +#include +#include "../common/dbg.h" +#include "../common/math.h" + +#include +#include + +void fatalCb(bgfx::Fatal::Enum _code, const char* _str) +{ + DBG("%x: %s", _code, _str); +} + +static const char* s_shaderPath = NULL; +static bool s_flipV = false; + +static void shaderFilePath(char* _out, const char* _name) +{ + strcpy(_out, s_shaderPath); + strcat(_out, _name); + strcat(_out, ".bin"); +} + +long int fsize(FILE* _file) +{ + long int pos = ftell(_file); + fseek(_file, 0L, SEEK_END); + long int size = ftell(_file); + fseek(_file, pos, SEEK_SET); + return size; +} + +static const bgfx::Memory* load(const char* _filePath) +{ + FILE* file = fopen(_filePath, "rb"); + if (NULL != file) + { + uint32_t size = (uint32_t)fsize(file); + const bgfx::Memory* mem = bgfx::alloc(size+1); + fread(mem->data, 1, size, file); + fclose(file); + mem->data[mem->size-1] = '\0'; + return mem; + } + + return NULL; +} + +static const bgfx::Memory* loadShader(const char* _name, const char* _default = NULL) +{ + char filePath[512]; + shaderFilePath(filePath, _name); + BX_UNUSED(_default); + return load(filePath); +} + +static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName) +{ + const bgfx::Memory* mem; + + // Load vertex shader. + mem = loadShader(_vsName); + bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem); + + // Load fragment shader. + mem = loadShader(_fsName); + bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem); + + // Create program from shaders. + bgfx::ProgramHandle program = bgfx::createProgram(vsh, fsh); + + // We can destroy vertex and fragment shader here since + // their reference is kept inside bgfx after calling createProgram. + // Vertex and fragment shader will be destroyed once program is + // destroyed. + bgfx::destroyVertexShader(vsh); + bgfx::destroyFragmentShader(fsh); + + return program; +} + +struct Mesh +{ + void load(const char* _filePath) + { + CTMcontext ctm; + ctm = ctmNewContext(CTM_IMPORT); + ctmLoad(ctm, _filePath); + + // Create vertex decleration. + { + m_decl.begin(); + m_decl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + + if (ctmGetInteger(ctm, CTM_HAS_NORMALS) ) + { + m_decl.add(bgfx::Attrib::Normal, 3, bgfx::AttribType::Float, true); + } + + if (0 < ctmGetInteger(ctm, CTM_UV_MAP_COUNT) ) + { + m_decl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float); + } + + CTMenum colorAttrib = ctmGetNamedAttribMap(ctm, "Color"); + if (CTM_NONE != colorAttrib) + { + m_decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true); + } + + m_decl.end(); + } + + // Allocate vertex buffer and copy vertex attributes. + { + CTMuint numVertices = ctmGetInteger(ctm, CTM_VERTEX_COUNT); + uint32_t stride = m_decl.m_stride; + const CTMfloat* vertices = ctmGetFloatArray(ctm, CTM_VERTICES); + const CTMfloat* normals = ctmGetFloatArray(ctm, CTM_NORMALS); + const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); + uint8_t* data = mem->data; + const uint16_t normalOffset = m_decl.getOffset(bgfx::Attrib::Normal); + const uint16_t color0Offset = m_decl.getOffset(bgfx::Attrib::Color0); + const bool hasColor0 = m_decl.has(bgfx::Attrib::Color0); + + for (uint32_t ii = 0; ii < numVertices; ++ii) + { + { + float* xyz = (float*)data; + xyz[0] = vertices[0]; + xyz[1] = vertices[1]; + xyz[2] = vertices[2]; + vertices += 3; + } + + if (hasColor0) + { + uint32_t* abgr = (uint32_t*)&data[color0Offset]; + abgr[0] = 0xff000000; + abgr[0] |= uint8_t( (ii%37)/37.0f*255.0f)<<16; + abgr[0] |= uint8_t( (ii%59)/59.0f*255.0f)<<8; + abgr[0] |= uint8_t( (ii%79)/79.0f*255.0f); + } + + if (NULL != normals) + { + float* nxyz = (float*)&data[normalOffset]; + nxyz[0] = normals[0]; + nxyz[1] = normals[1]; + nxyz[2] = normals[2]; + normals += 3; + } + + data += stride; + } + + m_vbh = bgfx::createVertexBuffer(mem, m_decl); + } + + // Allocated static index buffer and fill with indices. + { + CTMuint numTriangles = ctmGetInteger(ctm, CTM_TRIANGLE_COUNT); + const CTMuint* indices = ctmGetIntegerArray(ctm, CTM_INDICES); + const bgfx::Memory* mem = bgfx::alloc(numTriangles*3*sizeof(uint16_t) ); + uint16_t* data = (uint16_t*)mem->data; + for (uint32_t ii = 0, num = numTriangles * 3; ii < num; ++ii) + { + data[ii] = (uint16_t)indices[ii]; + } + + m_ibh = bgfx::createIndexBuffer(mem); + } + + ctmFreeContext(ctm); + } + + void setup() + { + bgfx::setIndexBuffer(m_ibh); + bgfx::setVertexBuffer(m_vbh); + } + + bgfx::VertexDecl m_decl; + bgfx::VertexBufferHandle m_vbh; + bgfx::IndexBufferHandle m_ibh; +}; + +int _main_(int _argc, char** _argv) +{ + bgfx::init(BX_PLATFORM_WINDOWS, fatalCb); + bgfx::reset(1280, 720); + + // Enable debug text. + bgfx::setDebug(BGFX_DEBUG_TEXT); + + // Set view 0 default viewport. + bgfx::setViewRect(0, 0, 0, 1280, 720); + + // Set view 1 default viewport. + bgfx::setViewRect(1, 0, 0, 1280, 720); + + // Set view 0 clear state. + bgfx::setViewClear(0 + , BGFX_CLEAR_COLOR_BIT|BGFX_CLEAR_DEPTH_BIT + , 0x303030ff + , 1.0f + , 0 + ); + + // Setup root path for binary shaders. Shader binaries are different + // for each renderer. + switch (bgfx::getRendererType() ) + { + case bgfx::RendererType::Null: + case bgfx::RendererType::Direct3D9: + s_shaderPath = "shaders/dx9/"; + break; + + case bgfx::RendererType::Direct3D11: + s_shaderPath = "shaders/dx11/"; + break; + + case bgfx::RendererType::OpenGL: + s_shaderPath = "shaders/glsl/"; + s_flipV = true; + break; + + case bgfx::RendererType::OpenGLES2: + s_shaderPath = "shaders/gles/"; + s_flipV = true; + break; + } + + bgfx::UniformHandle u_time = bgfx::createUniform("u_time", bgfx::ConstantType::Uniform1f); + + bgfx::ProgramHandle program = loadProgram("vs_mesh", "fs_mesh"); + + Mesh mesh; + mesh.load("meshes/bunny.ctm"); + + while (true) + { + // This dummy draw call is here to make sure that view 0 is cleared + // if no other draw calls are submitted to view 0. + bgfx::submit(0); + + int64_t now = bx::getHPCounter(); + static int64_t last = now; + const int64_t frameTime = now - last; + last = now; + const double freq = double(bx::getHPFrequency() ); + const double toMs = 1000.0/freq; + float time = (float)(bx::getHPCounter()/double(bx::getHPFrequency() ) ); + bgfx::setUniform(u_time, &time); + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/04-mesh"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading OpenCTM meshes."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + float at[3] = { 0.0f, 1.0f, 0.0f }; + float eye[3] = { 0.0f, 1.0f, -2.5f }; + + float view[16]; + float proj[16]; + mtxLookAt(view, eye, at); + mtxProj(proj, 60.0f, 16.0f/9.0f, 0.1f, 100.0f); + + // Set view and projection matrix for view 0. + bgfx::setViewTransform(0, view, proj); + + float mtx[16]; + mtxRotateXY(mtx + , 0.0f + , time*0.37f + ); + + // Set model matrix for rendering. + bgfx::setTransform(mtx); + + bgfx::setProgram(program); + + mesh.setup(); + + // Set render states. + bgfx::setState(BGFX_STATE_RGB_WRITE + |BGFX_STATE_DEPTH_WRITE + |BGFX_STATE_DEPTH_TEST_LESS + ); + + // Submit primitive for rendering to view 0. + bgfx::submit(0); + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + } + + // Cleanup. + bgfx::destroyProgram(program); + + bgfx::destroyUniform(u_time); + + // Shutdown bgfx. + bgfx::shutdown(); + + return 0; +} diff --git a/examples/04-mesh/varying.def.sc b/examples/04-mesh/varying.def.sc new file mode 100644 index 000000000..f18fe1db2 --- /dev/null +++ b/examples/04-mesh/varying.def.sc @@ -0,0 +1,10 @@ +vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); +vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0); +vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); +vec3 v_pos : TEXCOORD1 = vec3(0.0, 0.0, 0.0); +vec3 v_view : TEXCOORD2 = vec3(0.0, 0.0, 0.0); + +vec3 a_position : POSITION; +vec4 a_color : COLOR0; +vec2 a_texcoord0 : TEXCOORD0; +vec3 a_normal : NORMAL; diff --git a/examples/04-mesh/vs_mesh.sc b/examples/04-mesh/vs_mesh.sc new file mode 100644 index 000000000..739274a10 --- /dev/null +++ b/examples/04-mesh/vs_mesh.sc @@ -0,0 +1,29 @@ +$input a_position, a_normal +$output v_pos, v_view, v_normal, v_color0 + +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform float u_time; + +void main() +{ + vec3 pos = a_position; + + float sx = sin(pos.x*32.0+u_time*4.0)*0.5+0.5; + float cy = cos(pos.y*32.0+u_time*4.0)*0.5+0.5; + vec3 displacement = vec3(sx, cy, sx*cy); + pos = pos + a_normal*displacement*vec3(0.06, 0.06, 0.06); + + gl_Position = mul(u_modelViewProj, vec4(pos, 1.0) ); + v_pos = gl_Position.xyz; + v_view = mul(u_modelView, vec4(pos, 1.0) ).xyz; + v_normal = mul(u_modelView, vec4(a_normal, 0.0) ).xyz; + + float len = length(displacement)*0.4+0.6; + v_color0 = vec4(len, len, len, 1.0); +} diff --git a/examples/01-cubes/common.sh b/examples/common/common.sh similarity index 100% rename from examples/01-cubes/common.sh rename to examples/common/common.sh diff --git a/examples/common/math.h b/examples/common/math.h index 84731d6aa..192084dd6 100644 --- a/examples/common/math.h +++ b/examples/common/math.h @@ -3,6 +3,8 @@ * License: http://www.opensource.org/licenses/BSD-2-Clause */ +// simple FPU math lib + #ifndef __MATH_H__ #define __MATH_H__ @@ -31,6 +33,13 @@ inline void vec3Mul(float* __restrict _result, const float* __restrict _a, const _result[2] = _a[2] * _b[2]; } +inline void vec3Mul(float* __restrict _result, const float* __restrict _a, float _b) +{ + _result[0] = _a[0] * _b; + _result[1] = _a[1] * _b; + _result[2] = _a[2] * _b; +} + inline float vec3Dot(const float* __restrict _a, const float* __restrict _b) { return _a[0]*_b[0] + _a[1]*_b[1] + _a[2]*_b[2]; @@ -107,6 +116,25 @@ inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, flo _result[14] = bb; } +void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far) +{ + const float aa = 2.0f/(_right - _left); + const float bb = 2.0f/(_top - _bottom); + const float cc = 1.0f/(_far - _near); + const float dd = (_left + _right)/(_left - _right); + const float ee = (_top + _bottom)/(_bottom - _top); + const float ff = _near / (_near - _far); + + memset(_result, 0, sizeof(float)*16); + _result[0] = aa; + _result[5] = bb; + _result[10] = cc; + _result[12] = dd; + _result[13] = ee; + _result[14] = ff; + _result[15] = 1.0f; +} + void mtxRotateXY(float* _result, float _ax, float _ay) { float sinx = sinf(_ax); @@ -126,4 +154,88 @@ void mtxRotateXY(float* _result, float _ax, float _ay) _result[15] = 1.0f; } +inline void vec4MulMtx(float* __restrict _result, const float* __restrict _vec, const float* __restrict _mat) +{ + _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _vec[3] * _mat[12]; + _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _vec[3] * _mat[13]; + _result[2] = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _vec[3] * _mat[14]; + _result[3] = _vec[0] * _mat[ 3] + _vec[1] * _mat[7] + _vec[2] * _mat[11] + _vec[3] * _mat[15]; +} + +inline void mtxMul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) +{ + vec4MulMtx(&_result[ 0], &_a[ 0], _b); + vec4MulMtx(&_result[ 4], &_a[ 4], _b); + vec4MulMtx(&_result[ 8], &_a[ 8], _b); + vec4MulMtx(&_result[12], &_a[12], _b); +} + +inline void mtxTranspose(float* __restrict _result, const float* __restrict _a) +{ + _result[ 0] = _a[ 0]; + _result[ 4] = _a[ 1]; + _result[ 8] = _a[ 2]; + _result[12] = _a[ 3]; + _result[ 1] = _a[ 4]; + _result[ 5] = _a[ 5]; + _result[ 9] = _a[ 6]; + _result[13] = _a[ 7]; + _result[ 2] = _a[ 8]; + _result[ 6] = _a[ 9]; + _result[10] = _a[10]; + _result[14] = _a[11]; + _result[ 3] = _a[12]; + _result[ 7] = _a[13]; + _result[11] = _a[14]; + _result[15] = _a[15]; +} + +inline void mtxInverse(float* __restrict _result, const float* __restrict _a) +{ + float xx = _a[ 0]; + float xy = _a[ 1]; + float xz = _a[ 2]; + float xw = _a[ 3]; + float yx = _a[ 4]; + float yy = _a[ 5]; + float yz = _a[ 6]; + float yw = _a[ 7]; + float zx = _a[ 8]; + float zy = _a[ 9]; + float zz = _a[10]; + float zw = _a[11]; + float wx = _a[12]; + float wy = _a[13]; + float wz = _a[14]; + float ww = _a[15]; + + float det = 0.0f; + det += xx * (yy*(zz*ww - zw*wz) - yz*(zy*ww - zw*wy) + yw*(zy*wz - zz*wy) ); + det -= xy * (yx*(zz*ww - zw*wz) - yz*(zx*ww - zw*wx) + yw*(zx*wz - zz*wx) ); + det += xz * (yx*(zy*ww - zw*wy) - yy*(zx*ww - zw*wx) + yw*(zx*wy - zy*wx) ); + det -= xw * (yx*(zy*wz - zz*wy) - yy*(zx*wz - zz*wx) + yz*(zx*wy - zy*wx) ); + + float invDet = 1.0f/det; + + _result[ 0] = +(yy*(zz*ww - wz*zw) - yz*(zy*ww - wy*zw) + yw*(zy*wz - wy*zz) ) * invDet; + _result[ 1] = -(xy*(zz*ww - wz*zw) - xz*(zy*ww - wy*zw) + xw*(zy*wz - wy*zz) ) * invDet; + _result[ 2] = +(xy*(yz*ww - wz*yw) - xz*(yy*ww - wy*yw) + xw*(yy*wz - wy*yz) ) * invDet; + _result[ 3] = -(xy*(yz*zw - zz*yw) - xz*(yy*zw - zy*yw) + xw*(yy*zz - zy*yz) ) * invDet; + + _result[ 4] = -(yx*(zz*ww - wz*zw) - yz*(zx*ww - wx*zw) + yw*(zx*wz - wx*zz) ) * invDet; + _result[ 5] = +(xx*(zz*ww - wz*zw) - xz*(zx*ww - wx*zw) + xw*(zx*wz - wx*zz) ) * invDet; + _result[ 6] = -(xx*(yz*ww - wz*yw) - xz*(yx*ww - wx*yw) + xw*(yx*wz - wx*yz) ) * invDet; + _result[ 7] = +(xx*(yz*zw - zz*yw) - xz*(yx*zw - zx*yw) + xw*(yx*zz - zx*yz) ) * invDet; + + _result[ 8] = +(yx*(zy*ww - wy*zw) - yy*(zx*ww - wx*zw) + yw*(zx*wy - wx*zy) ) * invDet; + _result[ 9] = -(xx*(zy*ww - wy*zw) - xy*(zx*ww - wx*zw) + xw*(zx*wy - wx*zy) ) * invDet; + _result[10] = +(xx*(yy*ww - wy*yw) - xy*(yx*ww - wx*yw) + xw*(yx*wy - wx*yy) ) * invDet; + _result[11] = -(xx*(yy*zw - zy*yw) - xy*(yx*zw - zx*yw) + xw*(yx*zy - zx*yy) ) * invDet; + + _result[12] = -(yx*(zy*wz - wy*zz) - yy*(zx*wz - wx*zz) + yz*(zx*wy - wx*zy) ) * invDet; + _result[13] = +(xx*(zy*wz - wy*zz) - xy*(zx*wz - wx*zz) + xz*(zx*wy - wx*zy) ) * invDet; + _result[14] = -(xx*(yy*wz - wy*yz) - xy*(yx*wz - wx*yz) + xz*(yx*wy - wx*yy) ) * invDet; + _result[15] = +(xx*(yy*zz - zy*yz) - xy*(yx*zz - zx*yz) + xz*(yx*zy - zx*yy) ) * invDet; +} + #endif // __MATH_H__ diff --git a/examples/common/varying.def.sc b/examples/common/varying.def.sc new file mode 100644 index 000000000..f18fe1db2 --- /dev/null +++ b/examples/common/varying.def.sc @@ -0,0 +1,10 @@ +vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); +vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0); +vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); +vec3 v_pos : TEXCOORD1 = vec3(0.0, 0.0, 0.0); +vec3 v_view : TEXCOORD2 = vec3(0.0, 0.0, 0.0); + +vec3 a_position : POSITION; +vec4 a_color : COLOR0; +vec2 a_texcoord0 : TEXCOORD0; +vec3 a_normal : NORMAL; diff --git a/examples/runtime/meshes/bunny.ctm b/examples/runtime/meshes/bunny.ctm new file mode 100644 index 0000000000000000000000000000000000000000..693c37f2ce79bd478e15ef98dc6fbd442fef08d8 GIT binary patch literal 213750 zcmV(+K;6GjLsU%#0000@M=}6wi~s;j4*>uG00000000010000i0001JbaZe!FE3|u zVQ^?^V{0s(Fd8`k0DwFBXL7$k z<)}V>RYQMi&Q=A(uO`R?Q%g3~X>Iy?bOv3|*licK%04cULDM}x0Y9|woTz_9dG+fh!AW-%ZNQ% z=4w~a;Za7qsUP*WQ48@QEGcw>w6qYVc~;9pI@+Dv?Mr72SKlyITXfgB7b4VRiL52Z zWAgiOWm!D5t!P?<_o2UJfYT3zF*xW+bp*h{0i|xX)W(fCtif) zKayVaEGcYO^)tnqs2@kUl|3s80$ksDnh~2nig`qTwD`DYk*5zv>yTb}HgQqq$$;Kbk-dD^d!Z2Hw%hXH=mo#ISFGazAiiMP@i%3{EGHXKF<5KcC&_}F^KQSk*sG+ z!Yh`NNZ{(c6h-Z+vig6K}RRYyy(5aHW<_xDR2Dhy0h_x=q#c z#zJ|Vxjl|B!VTgHSe++&-EKmR7+0jkhCO+=(4d@h<|hMnQR-x~DcW zC%J!HH4Z$yh!|LL!UvHkm5{#Ye={FGfWLyD#9m44Yxvi?Wr2Ep#OKQRdh_=>dAqQK zZ5cbkK*y@~zVx*D@aMG`r&x~2MIoJ?xQ8ky`yxDpiZ7HdQMXAmvcnJ`E(M~d$t5o4 z0~Rr>Vz7TRSf?h#Ut#NyQqFSg$wDNLRbxz;_wE8CAC{wx zPss~t5S;Wf^_aU;QjtvRRTlAHq>H7l*VjR~sC^tkIc0A)sKx-X%IM`4JA%oIQ2#U0{&eSA8 zUiQ*0Juh}B_vESfpHzd*Q+J(57WRQyWU&MI%oA&JgFnWL3I5G=8KI?UIFgtVrwV3z zD3a2L!byj@**{2$pVK;6^g?@m=VpiBip?e-P0YR)u9rl^ynKSe?tT1F!C zca{)wd-F(j(wf%1%fg{(^9|tx{Rmtv-TMxN=ha+LA8q?}33+5AQ4keYMiR5(NS0HEK-8 zxvqwfb{OhTIMIu_sLbDS{*2!vn2xELtvSrfy zw)`iE!k}=vv0Cft@*Z(zP9%gLzCVA#_tN-?C@5AssUI-?IWC<;)WVDA!3WSg%s2TO z<9WiP1-cBc;4~=`Zb6d7Wn}s0kYa9rR*}5Ijl3vIM5EXB_8?dI{nLhMrg8Z0s3N>M zhVvfJS~IGbt3Q*?bM>7(e-djxbMz@EfuOovlW7`$Zw;_;SwaWzeA^H?GDFW}h@M-M z^J#zNWj(XRw zPSbHMNz^;S?1BBtTryHivVwSbfiWZU?ttM5%zH+q+Vo_Kp$vcOHbJY}c3&#XyekQ-w+tx&Nge$V znCi5S-=4wkIZ-pIxt4bGxi2vk_UTfUq3^Wz9~f;8=Z~;oc6R6dud9`aIIV`rTp~6% z`=n7sTS~*Kr>;VhxIHHRq;T99&V8@>f|eIcH*IRou!mujhk&EwDisW0h@W8iQHA)= z4{&?JXUUkU!X|7=F5w(`K(kZ4>nw)C6Wmptel-0qH4XxyxYF-Su~&N1!s2@ndspzD zp#?>L;SVlFk#&T6+^EeEwJQg1)WS-<((%a+>F}C@*TN9_9rUB6Wg1LI#-Or~IN=j% z?7%|FH-Z;-@vnMp+m}6CAwBKjcenpH;m&HqdU2x3$g)woJd;*5_|Bb{(lw_vsfuC; zAe8SAUi(;-cKCA-#SUO9(Z^i<84}7JTMk6??9C&-E0xcZ*->5hvsC)MF<+qH*l{)C zZ8oz-A$8Je?73Km?#r2Zle;8RA`aVEB}&|%MyXCquTd=r(yOl+DPlFqs~uujlR5w# z9fKZnKrxp)kykW;AGI;7*`zUuLM47ICC)LgSk``a^H;ChskG$KhI$4oR)p%mhx7&$ zT*V#&UpFm9bV}aHm+db4sLGB0e7~4!9NsEa;J7Q0<;bw5CSSm@!Z5DQkWb(9Hznk_ z(Gu`qlZM&C2&hDuI26km<%Np)TZn0hFi@Sx7G2vBcKy6`QP_8KqNs<@WjZA(B$L-O zNl&8k%d*5Ps-YJvay3QUAaCAT_m-1lNb`8(GhX_G0C{6%=?@?sQ~-1-IXY_Ub2&r-vkuwq z|MXLo>C9y6{|>OMT>z$MY9KfCO^#E;sv1m9It>7uvI=6lVtT+?@2q2P@Oh14?Wv z^-=FQ7FKA@qog{ol{KH^zxiu6U?Ts%O7*^&Hq!5k(L_GeEVPT?H1{>b`jpf0rAC|% zYsbetBFwFs^2`Jm#)d9Doi1|5Q@o}wFjzrHPYr&f(@q=Ea0 z5cQlCP6INt{F)MR&b$G*N1eO*LAfRU`#E&TH`$K>*14;?N_kk5k&oK?`5#kmTM+TW zAQYVpDq|Xmn7$#7XDMuvipMLAKs*&l*Nlz2-g<0#O9cud?_2@1H{l}8$42d?6UTj> zXP5rnv59uqq;Xz(K;@6HT<$h`21`VdrKUTJ`;-PxAa^>-IlFK9_;;)TJp%2lLkdq) z;xh;CD@w^uDIKrY>vj~Es>&cc23AxA1_#o_0QB;`ND~D*1ttPA-!y98pINw7I1%`I z7~A3=H%m#UL|D~r+cR_R_hUh<>2h)f69a<3*7V!~=I#oVo7Do*E;gy!YAaiCpXkE<0C2%F@w+%=$#>f| zyKwGj%z><&mTVUq0##b0fuZdodu`}kBda9pOTP6L$?FeJ#Sg$HTY#gVHn)4Yp<^E3 zI_%&sTY9V5aM{;TSlc-~$)@GHQk3l}E?=wBb$Z3GnPRATSK2Y_CP=HZMHTK!!F+f8 zegiM*ndnrjy0Xq!-#Rt7>Nr(+p=`bGiuVnO#y@>lC2xUeY{|G@rG7%RT3n99B$^;O zJ+lOXh2rFX5>4>`NbR(%S+CR5s4RMlQ)~5oP>N@3F5h0!DZW=(GvL@Ez$_F1U^ScN z>!;h~BCle1QKj00HE=h#jYQfe;Qjye;WH#N4g?#{St=2!-Sya>LSv^#&;id1PtKQr_n9$cvK{a1c#OkDZiY|R zIk*OJ9n=BgsQ@l_VwK~TwB-^1CI&?20mL7Aai?Fk_XQAc2h^K}f47q)s3EyqaLRqNDD7N6K3`Y9zZEy zBzVDCPJK!8ZxOpZFpe(u?<6aYfx}wE<*(T?IZ*_Kf3A(<3^uW%0h{*1=R|4kTn#sJjwRfF)pZJ{YJj3TQeFu=*wnhGfD}axWKzKf-I;cgV zcj~OGfo-#jg4;b2mo2&vKJ+X+aRR1i5*0T$NKn-H8$9o%LCpZ9lW40=Oz_=d}yAT%a`IN?prVcBO4foi4 z{-#!ZeB8SSvcWLp4g5-Ho!}*b7B-FdHO{S-%Fh3XA@bdwWi-gR{pL(gLT7=ypuWjc z2Sk4?Fo5C%RRStD>O_t6d-ju!bivzHkRj9TP=?jL{I*zGJ0mP9`jQd25(a=G8ej<} zNz!`-!v`!bC~cP07U8~`U@qe*FvJ6uvM?6BY%C=8zBe<#2*BUxe@tHLxux0#O>NrH zATbA41agq*RM1G*hKaLp`KoT%*Vr!6%X{qEyhV^wWVSyUmNZ}HYfd%c!Ir&=u} zJl(Gh#-*YYO;TVsh-3JAy)_}mK*3=Gp{uZ%X7)QYSds}jH(1Hdd){BT zIyOy6G6{Qbq*FwW(={SqknS|SE=5;gQ|ILhHnS@vXkq_BdR*!Xrm28t{n%K$`VS2NOT28=r zc`dSyg3sbpdHJj&5szUR!oNe4_lKHgaZ58SIH9|bz^Au6EF9jMGF!~R2pn{Tdrcc9 z=of3@$l)#3aRn#4zu=0(-M3l|{cZ9r9ucRWN=X+7@>&)NnWGD-J5LODenVu4vdh!q zf$UELBi#z0v4Y1=oVgLw^Ew0|bxV+dGrUKi(ena5W%MYt!NrRTk4}CKYZbku0986pg_rS`LF=QW5#11 z7nj#MwYQ0RfyNKOshQi+l4(VrH929B$qOs@&+m6Bx+9z0$+&XD6^?(tqiexEFH@jw z6V;r80mJhrEu?DBtBA!5!fL%0(!vi%m|GbdxQ2C;dp;fRT-LEd)dcH3Ci8fncT>^E z?hU)K=Id!Wx|6&nFcqFj<%iT?ZV%$f!jnWnRe+2pK!>(dxC2wMvUQIO_91%WVZQ2< zL-!NZSzQi6>GOW#d6Zx{gb*lCbg=g|`9IC#P<$U=k5L#scl56Fix{pF{``P5oYNlA z%Ux@b0zs!itVowY3Lx0~yy|pFIOTZ(!fTAqxrPF_6S-t}HBnX(Zj;Q`CI6?np1wz_ zOlXuQLG!b&c<69$XfsACxFWT|g<~O_>(}WT;W7T7<8|x9jLqQ^5Rku?E5?g1wm0D4 zp>;8B_z14(SO>cPalvk#Ui$RW=m|IeeZ69GCoh9qF20(){T4s*MjF1`49P`hm<6WLmz2TV+nSZL07G6 zM7eNXfvK;cCp<<{-0zYg;JmpBu17A~-(yR18;D!&C;JpX^H#>d|8fR3146 z`p-c;V9nkP1pQBpx0%7u0voMqbH~4oM~O4UIB2)AYs;eDGCgtIveavo;c+p|cWRy( zG?#;=X~_8|Kx`2yg!Bh)K^&4kRG6S9n0YtgzV_w?qQSST6JoxdeQGq?nLr9m^4Wur zH|Ekn&rr%S?Ki(*(4#FjDXzd37n%W|SsJ(ly5N7AS_}%Oxc{Tkfqx+6y(pi}S465a zF9ub>G%WyG$t+-fY3=YM9d0a-mAKz#_4^lz@}%a}_H_~xWpWL%E=Hxk@R0PEtd7$z zQ57jm1n=ryzjRh9Tog)sGc*`+&&Io5{8askn;E!DUtB%Mm+`gGQFN4G9+ zK0Bz>b#-A#zB!{VwQ=~Tf=>};;39Ml(|o<&77o)adX}ySmFm8XPQN7}C3M*gFN8Ya z(98(yu7|&p58Cm&Cz|H~>4z47W$~5n0q^Z%-(3FCv7&ZIkqYN6N?$KQki(fBEBr`S zZ-z@EpwvdPe3r4fK}>#74)o*+TbN26a14}_(&?1ul|b$aDgDg5R;rl5CjrT~b)?8& zx>1DQm_4h`gWybPcpw4S#Jgl{zuu^PzHg9#D1L^nHHmr0GhPL_CD#ihfrt7A>n+ae zDk8?nG#akux5$4IuMtzoF#o!PhZlKgd_}LUs-8cpkMu) za}dL!l3J=P2G%5_1s)!)w%rIsRHTO&D-Xnhdl>C_jxBnl(AN$r>sCvD5;9{vLipvS z+NOOvJk4aF3>0o&I5F?2{2-{UywLli0YwSK2kzh8GYujn{`>6w*wzNv8{`xONVoCQ z`}+L78}t8tB%!6Qzh?VOFH=g>Rxn!hm=bxMK&969P6ut$5rx`dAj%v>NK!5NsD7GG zLhbPHC?_VC73J6)RU~m*uAENsoi*xgKz8>VN4KMK5_PHMXboq316$i3L)%lhUXW74 zyDkowrYkkqeJl9SxZ|1pKnVmv51VZRvkL5r8kUpL`u|Dj;!!~o<9l60>q+C%crSmp z6~0B1rrmVpJ>*`Bdq7T8+Z?b@dhS^15O)5snr)xY!h+{NvR*xc?ZtD@A>m(fJ>ou~ z+%K1+HbhTm2(m5PI-Q`=ixMxfW1-O4kKtDYXvdn1jdafbWuIw|soLk!6xR_%wddN!%}brj!kN&g$b{3k)u>>`)xt zUSP?sQ$#~&S7=^vj&9SUPCDxOi;xG2V}j4uo1(=HyppToSWHUn0UXm05($pV<}lLDsKD%kWAz&sb|XUM>0_9D$@2+{tVQzD2gV)e|EdmkV zMXM2TkAL+`pVyKkCfm(h_8kjY-2;_}9}AXt00>GdaIfgCf*CS#olB)3{ymJLrOQ zjfUP(4|3SKf;P!woe-p%lnUvTLQ0;|!2qpnWU&$`Zk_0=y*fs0$BHO31k>zI)92Tm z($2pGWBoSdAXf}`7|#|Y>c~ui%m>exUj*r{4ny3TnZU1WLFLXs&${)PQ(GEyQp1xv zb;woY@mw<~z|JICmxB59APjDj;w%)+D{G33Sz7Eu=6 zAO`l_9o7HAe8wgALOpLac{U2$X%G@lPbR{3-T687cc~IEisCDS;RHYpTE}x(8<21G zqS^6#kXv?xP+rrRRlC}`H+0zTip9joZUWQ_DyjIO9$YE4Zj_AzlTRB@eeDM;J_pvd zV}sljz(jr^YcD9$xhh~-1v?|2>k5Q#Q#X@X?}F~~W9{oZd15JewjBiroliKBQVC35 zb!3MN=S-an`VufMvVE$gP0xRVtL>kNP{ki7_z%7y^awTjl#S`bb&O!3&=ZKHSDjY$ zW(8FqT^8a6qLPEb(E^Ij^JV52X9&AI{Bf}t#T*O^WhaK7?`&<`KFA{xfv7R!SkQ@) zkT+Gt?4WlIfRut%w02Ra#eX4CW76T?`JtvhHsqGN!@-?^(|!Z%)gf%mJUf0DJSfU_ z1_eo1$}aMlPAVP4(HeEuE;CSqiIpBC3+`kL5GGuR;O=s#xBFFa1tJpCZvtJk87&%c z18k-*lTEse-B|VacL!LXL_)eMu&Z(k7++%6-YvT@zY+>;sa&4jD#ZW6?nN6c^Bgj=_cj_w zD%+}HW2sWOqcr>%CpjiW)LQo}MrfLU^y3YscY*tcUqMkWQE(cC#GxGcs2j0aFrDNFniLnq6G&MDQ%MN?Gwkb6f;^8|>R1?5ccZ+xZ5 zh_rc-!I!AoF~NU>K!Z^h+jx^m%$vlbc+iQER5D%7?+&eaI77KxhQ~MiW-|I3)?Am@ zRI6!tanFTA1nyk8HyPN518)468YPJ<;@lE36{L6q2L!>$9f}@BcUQLo{UnVzf}-~) zu{ng2codK_8W`wEc4Wp^~i;zS;4IWwOP`PQ1{lXH75w(W~^oOVmNMED%l4N2r zepCg5hX%PV^b_)o=j>c{I=LOHjb%b@b}08MIpTSB2+};;+6H>bkp-5V4^H&o&Uw{qvHC zE#*A`@6T&lAh*pj7Ld<`8a>b9UD(*LN3b#M&&WB~tCJGZ>vW%X!N9S%)M)f=W)3_) zkEvG@g~dWYqfDj;$<{Zg)l-coxo&9E94RjFy-TDNl(Td^g zpO99rrq{XDVM1Tf{1V{Vwqloi*oamuH$Z+1gf&F& zq3f@JCxSy^4v^~TUxBH&$iO0RmvFwzdF5MahA|CwVyGk@kERgqc+Zf3+K<3Lm$Rh` zO|*Md{e4}!9K$B+i6I!Z&8GeK#Z>B`|0{qnwvJ%MS#bQK9c)Oz!opA$N%@o)>6dsr z?A$OG2;jL~s$IhM_xjc7A5S!D8OUY#K}{p%wn|A`@`%U3m74JKR583mPrqd=E!A9t z%M5*O0NpPG4Ev3qbxTkdOsRWNcL?kqsgMFTsN4{w(|30D*#ccgqO1l1KndxrS40JC zBd=oL@76e=n#fIV%IJ6=+qZb_H{+}+27kww#+b^c^B~L3Y;q3e5UN!uiHmpF0O^^Z z=A51@3jiHJf~!CK8VYP?c0P3@U8UrNt+NjVz!FsNj{R0}z9B;Hk)n6WOz%je>Td+i z9B#-)Cp?8lnj4~V%xpGQMMS#RqM*O4UBkrDN^9=FmZ@~rXI1tQyP(U-F?h=Z5)JF#!CRO2*R7c1?LzCbkQWaOF z_y$sX{z{jcsH#ZhS$o-*y#8~)O$Ed(R$zCdCc~zDl|Y#Ol@80xNZa7NXT7yooShHS zPckDWyA>(txHgA`f>BeI0)T)i!OR*kALrnn{zh(ed;e@Ukxy9VJ3sh->+&b~C`21@ zm9I(iL$Hwl?06*48AOJ=FOd-sc7&cAkd)ghV_{`+F6v~3omLmWC7=ik!HGl98>my| z<9u8Bk+DM;^wE@yD9`t0bG{B(5i3M;heMJF25@02%yv8b(Ag1h{Pc&yX^L2cB?F`q zpkj=;*E!NNQMy`rJFIbDlI>d~Y3q(ehagM-W5h$gr8FQ(a zh{bfM?Y`uuvr<_7apjm2#_G=sm#BKC;0yL4Swpnad*4G*TvH(%m$Uz0_4MR(+>lyn!&&}Elp|T^ zBXg#LtQl+4mXS=a7!l%5p4GYCwMJL_s8&K*Y*ixb!qI2CSUQoJVYdSQHQ?_xX>>Ow zW*Z&Bb?xD)yjE8PH&d|!s!cdBSTMs7d2ZlB20BZZ@q6?qXlnK<5Fg0TX^l_R-$xKXfu^G<%>yR~Z_sN(D>`c1L1$#> z=~=|{WF))&7X~1&!`4niiK91N+2yN2X9V@$REbtQMG@{!sKeYkfnq^ z|85ADCB!Cmq0)eNXXO1VzKIAqvmK3MrR2#qupTY)&*x!%U5n15WH-D_wRDK0bo=sh zuorQ*H=F&{=s6Nfr@bou#q1Au)QH&r8Tc_kcL$ERBWwm%W0; z5@kctltW(F9fm*Ale=<}Iml&a7Bh>n2FIz53wu^U4lAlH5bct?cWDD{(7yw7!m%6b zDqoBoGYKh~1-aD0rKN;1(VekxY_EWMX~ZbRC!Y3J(-$TaZ;T)J@=F>7T{IK?uRV84H{>5dc%m`HdaEVNQ4;Nsz@iLUxOH~UCP zJvSf$vwNH|uR8X0x-*KWGNw_>GQ8^^Sb53L&?ROxI?VX3MdYk?hHK$*rdpDSW&P~bOxsGw* zx$iqM5~coeU=n}5W#!Dj(o1^S__sfjS>B#n>XDG}e1z4KO_;jQZTvrU2&OLg6<>wQ zI(a-X(ejY2uL|02-n>1BpcI<#GCg=Af=&YJ9uSwkS=QHnO+%1(^hG)7ebO1R<~QkZ zRQz`yVF#l-J)kfI%iH-Yc)0^FIuqf^8!1kdhv% zWUMNkqMujZ1G6S@oTID77LfW z=DBe0waF^saS>O;b@m#_VIv)9=sjQ$vASL16BfFi4O_ckqSLK#u-hBag!a+u3^BPk z^U@$17J2IZ{cfRYau+8s9|7m&EfuAl@wPO~KgY&8<+`|JwMF~53HTLy9$bZ@^UJo|bBWjRw%YUN8K z8@~9%so$sFuP%MB=ShkXX@K4=l_@=u-v9v6g3@qGIeAs^EkXVt_Gwh`hRuwK-``J_e{rEa4Le~^ham~oo3SFz z+RjD4?ePoznrGkiA)p@$Vmoro2Qw3_o>$akp9cy)h@?nG$-Q6V*${|s^?O>Ak7`ly zH|ul)Bp%{bxYR~Yj!iU=aIK7LFJd3nXRZ{{4umP1+-;XI?g+!6{iDzLk&7$7mO1b0 z2!_e{mM4HN2(01@a;nb34wUIQ8?hQ4o4H&#D&D3ruv*UO?=21BoXSwl&~wOyD52v( z-enCrtl1Bo;Pqlb0^zBMWx+H6}A-y^u z!k$M`Vm45u&SQn$I#cl@&RiLC?&Jnb1BoR^6mYr3h*Z15O%aCP!G;^KpIJuy=i_qX zS|B$(`_Eh9p(CjEK6ye>noGt_47Df!A34Sxlhb?PV57Pc>9i|<4kK-g+;@trzQI!I z%Nnl-VQSgnq~s~8>U@Lz%4O|%RX-azd1|wy*q0H1PrNvsh6tuPTevN-S83a-MdX^2 zelac_K{vCP(Dz^~-_}{~o89%~EF@Mcxu>2Dn&{5cYJgXcpYfXU{gd3B!g~HY0uGo- z_D71Byp~(-1-InhUQZ<)UIjXl&Pt;p(`$4+kh@SU>`D+pJ!UX8rf>|Unay<@{#h5} zqXBTaz~=4t)h>H3u+*5dKm)Rd`vL!BzqHUClGMp!H&Ym;9fHEDt^t6Vsh4Vt&2*Ne zbq*!j94sAKu6w3ze-?2Wy>qIxcdS6v6X1cDWw;l~fK!e2ESUy;?*7x_RgKm{#*lXh z+L=WT+}VfPufjsA@F=cthK$hxk!IqwB0v&WbQU;B^ZeXZv3_FQ@NB+jp3N@W&bcHv zs&sPj{fN2|xZympS)zUG7MJ0TtCEf<;pw5my4rEjs)P7nRMHs+{LS7fqhl|l-twND zWyp)Q(#)EOzBr^~W>N<_R`MqGxErRqwHhcy%|hH}f=#p;|CBUj^ZwI5%2pM!sfLZt z{q7xV(&Uf4CtlWH2g!T~L0aE2W{IS6v;k0Kc!T!`W4 zjpIL$-e8e*A0LXeUDakR2l(#_?Rog^Oh!lN(Yl9k%>dubSriQFg<*k{u6$uSUw|{@ zk4QIEx;p~OYUj%Zdgn`T#)Ir!J3bD~Nt_piCMVp)uTkMQb!C|PTfE7$BE$JzPsk17f$#ndLHX%s0o{i;i*KO@$DFRt zO7B_TBq1z7xaN5`RV$@8fj~(T#}2rKyLuoKt^kOH_w)|}-KP33w~rM;IuF4`Unb1Q zx8U0X)#yA|V$Eb5xV2Nhe861vIyf^DwOQ_kENUvpYAh74f831hes4c?EYm(beI)DmASF1#jUzb%X!}h*(n&1S&Xz z+Z~g-_nA-~XcU*9(D6#LirjHIr7srcx6{o z$7A4|9nEXg_4R+R>5jw=uWbr5w^rzclF%9K9iVS4K)_9{JX#kFuXDe+zT_=F9~Nv`J0iS#M8a zv99U^PA}swik_BoQb1Yz&Rq%}T~vGhK*s;J=9*Pz{$;V6N7}>hu^nL7Z+QO*RZX?Y zW`LTooNF5!e=z(pRsEx-x6dPS5ACYrE$Sw_z7fJ|^K7`=Xtk#p16xLU&}1Mt_4Bz{ zNw%?LJLVY~O;A=&Fh+aMImEeL?+mqxeD^U2nc}T0ucdD)q>}^YTpS4-HG=~rl6>h@ z{|mFH`FOo)VG8zEJ-jTXCj=M%S53n)Ic>Q7m)H))-?U{9dv~3S5GGn11B^J?O_BJ>FR7u4-Nb z|Dd{J6cCN$CVM_pSc5mSD7>%m;u-sIRRzej4A}ynd#h;Z06mVIc^b`{uCrtDa0`R1 zljj|NptL{_=z`fIkltJ$PLGTY5(pYzoy@C&yV5ROfHZUPiWL^JReR-}zG5yb~`+hF)1wqQc;mqmzM>hmJ;q zlrIT>4bJ2CvM6ExR1n7=O)Ry8!#in0Z!?7sun^JASIh0{+K-U8iTd_aP|))L7lROFV z!SI>+VV0CvOW}Hb|ra~y+ngHrlt`?%-R7gAjSk@GOWLNJZ*~7vt^Aem3J`P{` zrWE$xFsgOE=YF3y^>+BM^hy2_=*6{vXSoPYocr;dBLD_I3UBX2+eifU(X$%V)NZ!Jl$0{r*BEiQsHNC@*|2kqP=51b^s#1dH@_69~qMd)3DK=k3*mD5dc2%>i%%O*x zBpsotvMGhnlmr;@?~vBPHf73Q=>sP zN9^J_!{D`%6ri2oHnZ#t(o(WpICS_x9wJOF?QMgYnh|GgW>NI-O60VT7RpV}7kPIo zzCgF*Oq zq5vPH`;={u?bG)Qoi2&9-bvKff$<` zvF&X@4;}*4;x1gEIEC##>^O_>-(4|LP%?g@^YEUt{h23H+XEV!=A*ShM?#~s4Tgi6 zC!eaZ2cpKx^O0>nkx+(rn`nSZ{`l0h7?8?zd%>nq((DX8+(I7c{7R%>X%z*^7{;6R z$w{7LNf?Az&?|-BZk%3vSd_bB^+!qCgwe`kN_H@@{95O(7L3XBC?Rjj;aI4F^#BGd zmBI@99ddA(+mz$&O(vO3MZeWIvrfe?j+27Y*O^$4{zg4BSv!r|toJ2~!m}{Ut9E%8 z6{PdOxhY|Bxc`WNe5b|I?uiyzQg?J=c;O^uFtD02#Sy)*&2mI|v~uWN@?@c3{kbAJ z;BBe9TfFdGKt35iz_px-Y_^dld~%Wq4tu6_rt6RkE#Ky#th>epgd@fHn!P^poS&k3 z82xTPMuv3@_y~LosCjT) z(vhyN@8%L6mjJpFg>GW(;N91>maww-@dKVarPVw#-}Cv(Tv@B)u_4vqrUGymB|K8l z^s{OnRk3hjqtg0UUzQ(nnUQKMz8|IZDl8F3?QwI6tR1Qg?cRNc4Hqf5ahMpD>&f^! zd6IM1bWvUxxbwUAz=Wm|55+yhs?T*=R04*}w4+~Gy8>1|F;J%zU=4CrQz^G-d&t$m zuHm`?T|8axtQtUPnxcCw#QDSkG!(BBSQa3U6Y7SG?2m$~I^PdFTJfeX09#jvxyEfC zsieII7Qc;E3;_zMZ$Hw!fO9H&o5m{eP+)qbyx)wtyV@cQXDgZ=R2|-CQt*aKzCFtX zw$^N4OpEXifU#R}uo^g?{giwtRJ&STYz))v1a~$K^Y8w^sQ&u?*J-TgPP`T-VGfU) z%gw;K+#E{IUimD||NSP!UDL+zCr|fIzWB=1S-Sxu#d1`Xz1-^Sujd{|@#&5Jnya5s zw16F&DC@r*_W&WJU7q>?!<$f*h7SCM=9BoZUxOz2M;QBX&|HPXzO7#Q#R860*{*5T zXDgPsZx0w@e`qNWkPVo|EouUYbO53vop&>v800aWUjb}mIWGZLx6w~I-n%j1?OpwD z(N#}1tWAOUm^4HUk#V#}f-sd_G&+QfXaUc1Z=t|QSco&E%2BL|!}`X%$#LPVX#~H^ zL}m-%VC}q;>zYe);-@r;@k5|2qCiA62D#h|YC_RQbt@UItHvcU4yF{R+E{+S?8=k2 zO%;);8Iq*FyXB=T4^Mbd!>|@x!YZras4kcm(pxz1A{o`nn8G10k4)dS*e zI}4gpH74Ha=UatK52x^rCLSupRM9oh2cD5R%RtK)_;6k^awwc_Mu#j!OTu*&vvrusxztZ+wc`&LgUV6E`=P- zK@T8R9NyvR3`GKg@u@2V6!|*TT+5b}Qj%e69>zm(GO;`8`6AZY(e30JCnj|aOZ^!6!k zhKaoW%yb9|msu!^w^Y~7M;8=7fLd}%y1q?fx6k*0P%6dVq@`MSrLMfzUq`sZS;!c( z{&s`4L}E!+Z1v0ov}S9RYU0;xd)y*8lPqzUG5#aLw)U_k>nW)`@1mMH8ZGQR?!sBY zy5dBgu9;BnAN{P3vZt*C{AZRzAzX{yOpauyLjqN!kJ0e~g6O2{x|vQhRgK`0tDW9N9iZ88eM z2*k3e{{6$jVo=8Y-gT1gBH!i+$nl?+6KQ=xvRXVSy{}kh&Rp2NhN#b~XT>l>quNU*mxJ^cVCrP$1(1wvZ8cYf&bTHhQgCVe6ohS@>4r&n>9zI&w^a7KaG z!Qq{Kc79vnakm2yYinqjG`6wk0_alqtc7*puYVwm{Xzd{gk|CKe8{MJ>G|zrdMWF0U#sDKg+`r}O zHVYjY^V+w`($JpIApulOpx3ZZUBEKTRgT=;3rYL5k-BpN2`(~Y((`FB|F7w9i@14} zq@k6@9VVW0tn^YV-w3gzKYFId-%GFP$|mP5%X}`x#cWk9+b~1;@SCRGhhE1szT2QL zagW?7bm6#uADGzZu^;p%&JBHBU9x&lRP$pr+j-PVyv(8a!&m z>LkL`W=?jh{;Xhz_(qXN|AIHR=5De0qlt0BmYf!~(#LzcdUgMIMYfATgwL7|` zx__gOY_uZ+4b@M|ZRQwH>W@0pqHD#?eJDn+y!jqo7RwUWzWz<_*BkmiSLZ5j8_-bG zbKNRZr7Yugl)iUVixc{WiFh|OI#h;{KoKm(q;b_jtR;$u#nv|K>8Tq(8Wy5IY@0RJ zo9QDdh^zX{WQ0PRQ6xxu4sH2uzRmw@N%L^v7t&&vQkN3R16#cDPGlWdZK_TZ#3{VsV^q*GdU* z1+XXunOfHujCe5rAs?_5glgk-MQi99GXg9h#1G7T(#0h75E|4!^8cb^>>DG`b7zp& z#kgrTR~z-AF_pR1>&icOjRK!>Prse$gl?R=V0?U@XB6#1OXJo$)hl*he4fto|D*@#Og;Lu0zm(h|eoC;zWqz_+yn-jYv9bC;)Ud=|F=y=`PJy;o3|RrkSb24ChaH zQlnx4^E^rk&Nl`{>l;Sly=dmkgvNNu8h4$P~C)C+PA1l-y^6B82` z4d>Hw)su;H)6f5Zs(n-B=!IYW!$%t;i5(*Qb8qP#Yq^M;PuFlmR+^cI^(~6`XH9%_ zGX=^wqW}L0xJin%iqsLfd)wWvpL9P%p4OB0Ttt8}!)F^cN#K9PG`!qxG8>cAbU@z~ zQ$|~s64UPFNgk}v_6|@na+J&9nbjRrPk-V}bP7d=`%t8?>yG6OREf7CTgXd&O(CJi z?7!AgM%QEB5W6?UWJWs@B-Oyf-LCPNYXzV#m(zc?eL!BX4Q<|C!#_eI=gI5M6BNJL zueK5QIBN+N6&CX$y#Q8#^!oeN$fz4Y+VmbrPhasvEO<J}U@lz`P#q4R6q{i4!b7@JZ1b>szZN|+2Jt|%8^q`Gqv}DeZqbS~6 zYEYOBtnz`H&Pfnt+aFCi883VHI__5y%@w^K9DZyBpq7BoKE53dBEHk1x{HG)7tOzR zAk*iux~smbB_I4XPftfQT2;09z;25KJEhz2*<6#_l4Ag*A;z=lpLNYym`L1$zEJsUO zXBNqiU`CwH3*VggUGYZ^y(FR&e)hG}?4hU%E7<^yHu1>*^=s+pIrHj!0&0Q*Lzj!; z$_dC%7N5*W;c5puqIo+r zE_?rB>;;Fx(s~57wu;%fQ~!HF8m4lqa>Ab{P&Du;6v(S&9UA)yo@WV!6268g4F1TM zcx_}x#QLl>ttbi7FIUtJ(!$$-!ha_pWe<`A6jGeLxOVy=sKU zTftteHnVS3BO ziKM-b!9x)&JrZS3a3BZ_Nj+Zk9I-k)$QD7(ZUEF1KE;HM66N3MN3lX5*-!!wu{MRn zVa}wII!s(Ie|d+0J+j0PpEmCKNj-IY^i)L*{D?XtkE+`Tw|FaKpy!(?i&?rg%Tg-w(aQxfLG^%{Xyn-XJbexLpc zo;9nMb}s@QpxyzAuLT@bI?Taa72kj@`tMzYkKHQr5(_i>?qh)I29Ayt@#n7hpkJI1 z@;GIGID={>gMe?@<C zN31Im2Bqi*wo6O9a{&(iOCu1^Zq~q<$HZ|X^!685|8{+B6vv}c_J+l$bbE`U1J0?= zmu2%MBIyjK7n*4nUm?-wULz%RpKs>t26|kp*qtjF;SHS}(bT+l>81V{Q526EQh?nm z(m*bF-4k})3YHwUua-a==lKJ%UEwoUu?rdUGq5UOL53nAu31y3sMhG=`%r@P#2Q`0UEA=pf5vP=@~Wg~aw= z9~s0EPJzm&9M3Dqu9vGL?@Cr{Ey;+r)xh(5SqCsA(yhI}zn1^eg(3HdHt+r83);=t zt9zsHFNO@{PTFof@;Yh4%zNex!S^@uNxiND5`ix{5g{lw%X2FUKdBNE+}N9$Zs6^U zS8k4{tSW~U`D%!ZQ+m-IYN%`1vlmBCCLun|SwsEq?M&23*59Ms@2knpBx5g`?=06r zdo5`qx5F`1H*L`P&?2i?5uqLK>)%SY3ju-~v3cT!f#7nbTg4UB@pX?~n4rm-&Au-o zWqoUbeji?_S5wbRfGFrijHsiXYt~i+BJ7x+9#i=3=h60iq=0?e)XOx1wk*eQo4{l; zicf)3LN$gAvv%Jic!vOEZ}s1=Lp$)BzH=-5JfFH$o;^iWUwl$7hG#86=(U!$rVD-E~iq*|_CZ|hk$I!OX>&Ddb#OuV;&1wtvqE~hms?Z`r`OUiu z_R~THt;EG{(ff~;C(cM_PXQH%TVIVg{%u|P@Tm(zKta>Gfd@KF^fZJ==>)j@EaR_tn2lN z{C@OQ1A1R3JvWb!2fdrPe7;kjvgiu42lYH`fXbhsFgCs?0|I+vgrq;FIzhQ*Vg>C6 z0ALkxA1UqAyWw@tr?{Zkx;w+X$GgDFQoh~y>bBs=1@S8$RmGbkA;Wjif9^M*Xk)## ziJ9k>lM4>!f!yTh%bO4fkSxQVwrb+4C>SWQPhu+gD4I`sljwxC% zPnNs&V|-wN%E0}S#Yr5Zy=9~O(hZMg7(_M;6xOI)NLbALb0``KClT{A<<71EQL9~2 zJbn#K8%6S@SM!sW?U428OS|_dU3bxzXSxsg+5YF+59x;>RA&-3=V+w+;I_l(sB{@7 zBs5idA#ZHdaj>gY%6`6TT1eFF4k#j~O(Te+$A~*kF^HWBrX6@hj-?|$>@5(1$>_Y} zhUQu6Aq;E{W=cJDsKv(K34^XPXyTlqv{hiWh2Bz@uWahg<>Ph4I}UJYiz-+MxNlA4 zNbMeIRO7=(eM=faFA#PQOrEnu8?(_o}ni z*2uPwB+J#e>|3RROzeE9V_qP-t+vQBt4GW>@NyJ!EXe_sE)Yhp6H3$Pprso$8Jnt* z6Mx~r*~jN%s$YoKGLTlJusaE9tv>B6K+Cj~Vq?7Yoq-fjEvh`jJ^oOi+MUYd~qZl%#G}gxZ{te!2k#hO{iad z$(q+!{SaWFzT2kt_^^QgGm@T^VJ$cmdE(MT{W5E1K$@2IQ88@hOBXb z=DH^!vbcvQ5!{m|a~%~E*QZ0Xig03cOF1`(KTl8qz<%m_axEa7$0yPD6JFjMK!GlK z+PWQW9YOMQ>->s1o-~G1z@ECs*LsQdp#!DsZXaOW^ekalrccMwW1`=CEdm|K0X@5!NdqbtAi+0S{G6yF^!4Nhq?SMY1GC?~LL#2i;8oXi z0B2uZ+K+Q5kV{v*GD3$PoDUaQJ|RiZs~+B@+8}A*zx~_K%|T)W@q|(lpZuQ&SnEbT zI5ibkOSAFzD@596dv6Or+AabLnaDI<5c0(&V8sUCBBqhHCPQXG*&+V1%SxCbW-WH3 z)(#fEjl~#0xi-?^(~o)8b?*(h@DRJOD#{uH`G~s=mG!a!;pLnctwGw1aHOjorh_W3gX zo(+}UduSA{l}t1xaN!O%u(78P)%e@0FQu2h5od8<2nmK~wNuk}xKdnVljyNlxaDM+ z?o;0^=^Fc;4teWLK@etHd{Uxdp4OV`EDnGlP6(QV>KBNN*S2`D8d(;LMaECd`EK*7 z2P!0g;jG&L@MF0s{bKS z?YPiMCW`feH-ZYx_VCYDRIBO^8QEdy6So;{QVi<_X@tD>dmLqEWF9kXxExhu#kn3! z^ci1;l-Zj7_XUfaP>Rbg5l*p63qiAMWU$qaod=0CFbS@nCwZKmyy-(JwN)`OQk#=h z4yqcOMVyWJ;oWzphhHd&rxe*|d1C<&IFrt`lfD2dlgz@XYr%j&+@46>=sUdwCa#@A z?(YKs#y2d*i;13)vO4re4N-YB4XRic@e%h7Ed=nK0uw}YU=gFwz3oSYq8KuS*mPNp z7L?+zapXI$Sv5B)hV*exLK!y3@@}D>Kkd+hGZYf0bQV=Tf5C<}0Y>z(e-p2870GRF zR+?+itAw`qsBQAMB>AV4<*?h=x{v7ts0WZzD^)^)WS(7so}Air2Yy2A;ci-G?g0d= zV@G$tUyDd_l@c;aXm*aiGJ8!s=Oarv2X3akv66(k!Ik_?Wh@ex@qi)A@RKh$YYv)= zpzu-$Nlw0EPmhq9sT8`)V2`F6gnn60rv~Qu?HZt@i4%fa%sY%-VE?#Eq$U$$6fn6Z)Q}vb6%>P5>fJ8mH}J&CEn9 z=vu6)o_Dg=0apwujhqy%cwQs?D}q>$}v{N=(r!J2DK*oVu7JjCYLYg3mL zi?;e_S&}m^2y>;*j6_2xi4K+EYMTh9!v-=cur@q6MA1`o%ToTWs4M)|yckh;WdZsw zxbh};FoxEN4lt+;Yc%Chcb%wdbcRM_m{dQ7&*z&iWxl$U3N3(>UJ z0uc-MH%IN}*lAsdBv}}%j-b-j&4ypT4M#HthqwKcR|ZTcQIacO{DoTQJF2`&q&jQ_ z>z%8#;J2wK!C6L`b}6DR)x9U_mg;hG`F!?HmZ{l#l@6pkHGCZ)DY5nTJYsqGb96Y(>46Gbo8dicc?YHwCrVn8QTGso zf9w0P0eqCV&%rP0bQp;1-gmcyQQ2 zVtHd4W@g21uy*5uI%&~yDTgnckh2XYu%bsR?-!YQQ7w@}CIa%hYHUjvO0kT)%Z`WI z2{(3^oV5|jo|>83Cq466?BWb?wpzJ6(!kfDfC43cc1n>jysif^;Och0jbt9JZ{F^M#f2b!lJF&$JeA6ogecnMdg!UJG1&i8N8X*oD-SVg!~xc< zozDbPn(5GF=~i}DPsW_=r3?U7rHRlR_jf|di*&3h-@meO;E6G1HpnvVp{`_5!vL96 z3m@3I1wPEU7|yZO%XLuy2r;r}ETK;7I1lT4l@_Ts=M$|;bj9&e)CD!T;iB5s#q1ht z2}U)QWk*hUoeq8o%=R;J5-CR#?ym_PE*nnHQ$xM>(ml@9dd${c2fs;o_b*=j<~Z78B{s7HNf-(LcJCh5GwCjobt=7m&rPd{ zL#th|lS6QVfEBCwyBV<*3nJo&+LseY1n5P%vv9mo_# z`cQKBRtY*-~ED zaTjXXhMCw^dz!(&i{v7(YJ0v7!d*6Xm5=wj05B1=RlxHF@1eerN<-bqE=73l2oIfO zOFWt80u|S2F8uX!myZ_F?Y5Q?CP^m3kmh4#6!a~ z>XA;&_n?_Y=OI))^@`3CC&jW^Xb8sZ6Dbb^jsheHbyT+g!N5DApRO2BEJYGx)m~!r zHo5?}m@+Mvd8Oh@1F-beh4*Om2w$bFNi^5TQa7n56o4#~G*C7cp-lToLr*jex5ne$ z+=2}gNsyOC-8JGSy}yzQW0YT z3FWBU(5X4>Lxn~uwYF=+K-IC)1b&gWUTE$>lB}CDi`48+2pw+Nfx(wQ<%SgiqXLot zhn=zvA7pBr<7>b%0IxN)sT=|FhcBI+capVWJFNfINtYgF&O3x#2%rI6%6AM!Ue-^k zEdvu`P82qKflN+nD^u73jJ>PZJ+=Ule=uFVh5J|hSeDcb+)h+@-O>2)32fqG^&IJ2_RRBhU+_I zW=`$IH8P5s zc$3)ndLWldb}oLSR{Y;cP2}>8vKxrYw8LROAht13Bd%4K)`NIBfk7|>b~JSZ7IJfi zSx|sjM6-y(xv^L2<;C1j`J}p13#94tyPeC+MXI`0T$uG5XZF591R@?Bg{LZ*|?6;U7 zQpmV7#K~cScI=R-q|+NJ?63g5$wC|$|D>n_a|dTw&Kq%kaz1t`;@RO#BNc`x^0}4i z57+V8Q&09OJw3=#i7ekx_kvdX38EILL)uCY?A!Pi{2#lpFmYllcnvfv$S3wh?s-Td z3rFwI04VpgJQ3{;#EB7N5Um&f9ou>z&5dCZ)Y+v378UtM=b{U6K>S1{`U-N-$EgQB ztN?ZnMmUw?Ax;S#6<(wQcl)|LPdBqp?&E1WYFA6WUmWl41EEdbk>yM`wL|LmVzOpp z`jw4~vt3nH3OA#q9f*DF&zcK5tJgWcuix)=9c7jX4Bf~n^2=cUVYYTbQ|o%-7WNA< zSV2rk#JqBBhp;zeF0t~yQ??dZt_c@-x@=;eDmFF(j|b{Kd2m!{uNI=f4G}r}wsF7+ zzdHb2WlkwUSWQjBl}NM;0c!-zsvdXqL5ofg%`ktER4bQqhrkgQ(1;=LX!nSLLGVt- znNo@if2*=auw-_aPME+A3k)IeqoWN*GsN!M33P_d62^z3LPEoGGpB;R^4VRRlLiSa za{eeK*>WnRQSKd5{KA?F#+Np2P#-wH^vxRgVl>6vWXHehb|?@kku~31-LU9=Ziqp% zNMX@b6|sw`mTB^XH`${Z`FBnZ7NiMJVXC_Am-BsJg|Fo*ioaX?#0ER;P&?VqnXISI zp5L>mI8F)^)EtMZ1E-&zel2-B4(F~Q9jbrPQ^sBIZN@-xxAjb5jdtJlxMxUXauzpS zor+L?7zwIU(j&p=3d1i(8;BVAfI6R#>M*ZYfpp7?*;dp(El!Mqx~8!$mlcKE)h_*; zrX|483H~?+gZ~4;<-9N$)sZX(Q#gKPd?4CBE(%oflUU)aqU*N2)*Vz@q3+pSpTx_; z&W?|E)I5mjslXrxLrLXRetG`qW&D#E;zR0l|^U$>i@DN~>`09DVBF+lEG$<>ZX~KR%J{hENC3@|- zeL+}&GHmP7Nw`~Tln#qzHVR_*C58ETJ?rBs#i;8cYB23`4Qz#*N_`{=z95jL5weicD z8Sq9#z5MQ2S;rV;Cs8ka%YMmIrHH(;>{b%7yQXv<7jr;#Q~oZuOX8X1S_<{O<-O;z zKs&^WH>&j(7nM5csex>NOTF+3=>o0XqdIF7LcZjGy@T&ztNKKmoHZL|Q2oLb^52@3 zV6#e765alMPs`MbJEF>fHYiD9t;8<)t|ND^gi2H8LzI*-C(DQ z>6y1Ab_gh70=^<+V`#*w+sp?R-P$wpyU;Z+PrwM>3T8M&X=l*yPj!Alu#d0hX?8>- zrxKg%Cp^_NCcC;>$QJ;K#ai;kEHwL2l7)QGwBr=AXhG&#d)&@F-z_Fov4{_p$(gnl zhuoD(*g~yKv~$!mJuTTt3-=vEyhGg9-nF2kUY}lk3nx$ON7spB^Toe2Y%GrPe;3`$ zc1KH6x_SChH2Lj0I{oO<3;No!cel@e#8_%$`7hkTp(66G)|)es)V(vdX9g9)J&9WFqECcpAOL*cN-rOz~{GbOW) zff}j~0`0uoB9Wza=ygxlhn5LN$|)uuV}6Os{ktb=BvJcuGgx6EM2L}U%?if-4ysrm zRi12PNu~f@j&gGR!uH+h)Z=$&;>Jcf2fVW8N!lvTl=V3oV=yk_ianpynZ*gP$h}bn z5O{{#4nr{L=e9LjJcDmv%q7rgTJkWeW}1jGZ1VkqTcXdys~J?Kxnf?(h`$ z*_>>hHvlz-m9@EbP(g*>lWz`Cny*^In+e92S2JeJEYYo+3hGOM{2VS##=2lV0l{pU zkyMcm%`Ciuec!aho|57WOtXp&Y4b&R|NW;U?P**GNVkyjjl0#fLE{|7lrkw9HCi@# zn>AI235wpup60PG38U4@bA1LpS~K4e{fOGVS|7P&7H`ka7&9UV`%+LY0gqI3=0o~2 zk_rxfD7UY#Snof|0A3O>D<;pBH@IUV2p2cI3tUWqxIcX?Yx;Sm37imv$_yY5|L5g< z(&^KK(Q$W%=oCoQ-w2A*B*Hz8?VWPiH*$1!V)3!sgTX&gv8_K}FcsdmTLBrDD5Tgm zkqi+M^?N0db9tG}cs>-b|Kyf5{QP;4R)x$_{ax2~c4MtZf;y?Ep|V#(dzx<%!QPUg zk^kC}3I6cmWHY7;Ko4XVrrW*GjTc>+ao7h*li7H@HqTw^Y&b}YbkA>lI4{`?H!lRU z8~*~syMrp?FDR!H;h1MKQx2 zik5PnF|waD8nv?KBIFXS(I0Z&=L~z=yD$_W32;74m>UI!8bVXr2}~152kFc&l-5aBV0xusQH-O zOOV}0yVz7fSvA~TwD@eDkImEbzbN){s96c3w=IGzZ+wN5e2vCqf3E{~_xS=O3x(cnVfRXSs$se`hoPG%SRDce4i;&KZ^KoN3bdBwl30xq2HTDr zTvpjjawrFXFwgx|&z7NgqZ@n#LL&)iAK)w^J0>r&qPzMnI)czIVFWi|yQHws06*O{$yHdL#gRxuR*6agr2LYAe-abi z%1hOPG}w8Ouxfe&d4eiQA*Qqp4ubtH_s|S(E3~@`4^{5>@gBCkpe4v@DW*{UZft4~ zm)qgkE$2DZYu4e$Urm_XN%9qY)=|QUfcgpKn02 z|K%yQNnAhx6kOxjndd>Ts}s6oS%F7-PDV;AEy$48?ycl?e9^6xkm|UNBbzAxj|f)M z&iR4K?*J-e%@?$4BwRB_e3dQ)k6kazF(``v2vPM}ktP@0X+XfTUB5*tIrMZk4XUBBa%Q278x9dpKwf8JN4EdA{0_!;OooOFr03`1tEx@n~dF*e3j z5ekyQ<4^}QNNjUnR!<~P8iJT*@kvRr}`N-cp6^1OONY^My3YCpI*s4FLG30z`R z2rNjj@vE#HHbyIUI*H+n;s>0zG@@Dt5zZ|LH;|CpKv{8CpG4sWZo|1z%LSVkB4MP_ zZo=;HFaHc6p5CPXG9D-E*IB=FA1ssAzXllz`F4rrQx*l6lyAM$!losU(7S^UTSL4r zq+5`GIL0YtIsC3fJ#3ti)zkM9^z!^ljF;K?yOyt&p5L#%cgg;zQH_usU{|BFW=vzo zD(lF??z@^mt^E2?H^M=V%FzWme|#O0y3U|pGbAHZByMW`tSZP%xkU1Z@g?jW# zylk`$+^k&;3$CBjy-*5_g`_mlZW80cu93%vQ7BoTH>L7#UQOcb zQ7Yus^}`;-3JXq|9b)BBe&AQYzc@--EXTO}Ns+rkO7Etow=W3VYw&!KT?e8{-N9%` zjcgn%$2)>Hexvs|;j1)z@w4+u=eif4%mQRqS`H-t2#`HHVSc$91?MhD;-(dHG~mSU ztLskc(_%dm+q*~nF}2d-riQ=}=6Fz|3B)PzXZ#$<#k~gSc?+UN>?k=QJZtp1hURV& z*tf8mo*JcZE!LwM7|F!xWsd(`W09)A}1k3=I|)__Nm1;F^o35=4;?rkGcYB=u<-vuKNo z%HH6^Xx}ro=5fd2-2HE@CCaw==egA2I3ly~ z14!5D7L&mh-obEWWZlzPtg_k>IQ@od^=y1Jc$5{8Uvtdo4%a2KeK9goWYn?EdB}jifysdco{sS& z-grZyf5KhzgyoPQx!8;OWxShTksM=g%QF#s_S7OJ2krd9-T-aY>^HPHpNs+z{(Jb=6HKUTqWEpS1-^AN|LtgPF26uo=+yaCQ(&2^@1;!0Vb0 zj!KOe?+xXvp4XNydCuA_*W9an-hN%H)*sX7 z6M7eVX}p)@*cU3*OFku>u->QwL=RM-;8t_y4l;T#4oG$tfO}+SB|W;Vo_t37F99%8 zQcVtviePE60=2}dW;GS_7bxnrHtfmMGkRoMjTId4$0NjE3;0Z=!8Od;-(CvB{yxsD zv{}Jc!ZN!2y@iIZBG|w-26q-se%$9Cf42qb@p$p>4>rTr@s3~{Kq?p7oLf$V-ghBw z3G1~{iv--J?5dAZJw|06DfjIo<|#V0p>=tEPi%39uf=LBTyH2>KDn2DS6!t`t%(`6 zdb}iYlCEj0n@QvtHr6JPJYGN0R%Xk4Lq~Y5A5jsk3?O_a`G5h1Yh+a}EBtR;eIXof zPazo!bI*t)5$WYE`QT*8h)vliqgL8n^{T8RlHImU1V|!H+VH6QMJBxK&Uv|?)iy)| zmnhZijfrkoGgr4@xKHJ$96j?2x@`4j61TS-w~Cb@-C@@=L>3Q$^8xzsNv9c*7l8-f zm|GVFH~v9Xg7<9M3w|4RL4%fyeu% zgEftVFdP9*_nHV%&k9ziC zlM5BDA@sv=?&NS7^VutJ$}m^JD>1{Sw9qdRZLZ3Z5Ek#Z3b{M;Y#K*=#ZHXY!PPZG z2wVDGI0<1T2V|CuAw)x2XfsKIdC)fhTpQ#+^Sp2~y@bG(B}b@wGToB>474EyvRaFdu&1p0RjlCS(Km2MgZ@4xo1}Z4le-^`8 zLNKJYWod>_;5FJ7dYky80<=Vu-~T!z!qLL&_@M>3c6sE$xHxN*5tw|N&uH9x=U5r1 z>7B?cuwJK-CBfbK4$W4v*6rbiCT<-~;_B7((ki zM}8nq(0z+iSp2k&JgHzIq@Uj%4BNxZS~*tXaBSvZSeJ=GIXQ<~O5n3LG6zC`*Kd9M zi$DQ@iq#=E!=;@TTC)2ty6bwd{+KxP|G;C~q8v+g6^4mtnd%ua%rVa95vqn~=WR6d zLv^govd4k+oY2pj%6}-9{uOyw!6QZay3@Kg84h*NIw%Z z8dWrcBpI7D20Y}BmdUw}wfBXP-$9D1(+BD_17leZJ4Xlqgo|qJRqactgmi9Z&{vU) z-;17Mc5g%$;Eiz?M0@s??OaFTZ{?Eu#7}nFWk#eNRx~cg`HUUKb7>;%ooiAM|Lx7koSzC|a1Vku7$~$=iyF^;6MeluBA~ zTTE_O=edRihqqGiV;5A@)719wSWtnijtuW=hR^EIGKDEfxJV~-^xR*3wSd-k2M#mJ z2%X52=l&IGsU!gD;ydReQN|f#oS9u3^f)s zOVHtp*JWN^Mof!7i7;%7=^Oe!=z_`Zfmw>8X0{bs1hE0grk-FSM%pV4FEWZJ!FVZr z)0if5l!r+$h--700U`4$yP5k(EcSW;2%zT84IRpQ83_ z!ywc7jc-IR8OHnsQOMK<2A5smS(en=y&Ub4dtI)$lRM#}8dm#GhSfDjIj&vwjW+av1h z9t-G$dS#W-ZeA36f9!cS?KYeX=EyV|n7>?zRrLEdd(_=ybBrpLA_bzC@6ev&_h{Z- zG>PHE9~WgLLj}Qck*#LB!pT{KZS})I=<{l8GWf0rGhL7s^RcrwD7w+KyhVJ}<=m3P z1Fx#&LsW(!9dvmb4S}SekV;E>=+odvp%7R>)QXha2qM>i&5$Utq`3+3WK{ngtkL>L%#ZfID?^L@Lv zgi#`{hk6rxls7Jw*(p5%FDsKt!m`C*wU+_~66B=!AUjc)k`@APTEx_2xYD93po_S& zO-z1xXjWc!5Lv_cT>8F-VB&&NBmJF{&(I3mKcrbcwF^YNwg?evPoqM6EyoYV?`FAw zA9`3(WaJ;lc+Y8+Uzcl6;=IjqA89XeZ}HB~s4tH~D=kl1HfN58kPNN^>-&5NE*uKC z>RC(TmXhKV7Tlc}RHN(e1~vpIwm7Mv{x!feSJ$rQQm;vGn>V{J=t)kQ5v5wAe>LE227F|v}LTE0;>p!ABLnb`>*`y{*-Mh z|7tHpD-M#Fv(7DRq8l$UKN$l418vMYkhbjD$ZPu_PqFh!G7IBShd}xND4G696so;f zFTw20cQn(%^eF5<3%Cvz{<64<(m{5E-AybYMBV(;D|;}LQcL&aRq00HQ(LhfAFDj} z$C^Q{;}aNX$-t*nuM$1qE`OXbnyc3fNPo-hYo0&$(3lE9rqul3He@#qt7K@(J05ir zFoJ@_Non3(muZvmuumdhjCD-`NSlyG3{wrHRa+FOFv}+0THRYiVY+u{11X$-Pth3; zoQ2e@6R^hil|`faVte@E(QW1ERpW-_N!c2Dr%^ z8b*WE=Y$T4?9{UBZ>e4GaVdtlY6hw|!)l%Mg)zeTm$@10Rq8Z$-Kl)E8=lye)O@X@ z*x3jgUf(dI99m_pluEi3eU$>V;7~yX62XZTJh-;$-;TizDk{7Zck=LSv{B*YR!&WD zyQXcgiJ$gR-bzbBTjuhkEF21Z#PVN`fn}s!hinC+P`wBGotWAp(rbKD4VhBE3&F zZ_DTP0CbG!BX^%tcP=9u*KI_Moj!Q5aB-ww-n*^jNp=hdhw5(_1J%`>dGLl()h*}Awr=rx+2wm(0WlKJf?dZ#2L=5${B_vhSF)G|X@#_{T-GN;w^8++?(8xyC{G`V+zh)P&ak1_j?(jt|M$Aa#z2K~t* z*T%r?C>b%2PX+U+LDt*_?&L5!*_ z=cE|{;i|&qp9RcCi+)r(E$pm$cpRKEqs)nd>sO^89|&&SU4(CDD@1Do_$_@Q>;gHp z9zU%O=GMN@=S4(x!A+#yUB>uxJl2Z;6}LqLS-B})DP)hZHo-A!7>`NDW1CParDT%E z`%)`NFilt~sC=+=oII*bI?HXzZ|(QDNR-k%vL_?ClezV~hz495YUxL`Q- zrAenWSPo!6=oXX9awDydFogTQSaewGt#n4p@gnYSi+lqeWB@%t!oLA=wx3Qu@!5Ud z)MP)Ejk>`^!J&RB_T5-f6gCcB(-T873N;}I>GRrQ`Hebb9N|y;<>2jzew>Dj%SIn- zY)N;j;RRc6nGWJ^03aE{j)Fv@g}U(h9Swm+YU6D|2(1Lut8kp8q2m^1P$n(F_ysBF z)HXiz;Ez2{&X75VqQrLxmYujGl6+Dz7Sk2hlNHd|U3IgLHFLA=?c;G&)GJ|$g~EA@ zLY3zRpBkN3UpM>_nc|P5RN;%91K>~=jYG*NSaX-c(UEwT?$OucT_%qCl;m?QwPpy$ zjX+pTFcMWNnOu9XkTdL}CaffK1FTul#(54To32-eo%RzNeEw{mKNX{w;Tg%L3;$>x zUh_Lb+{IJEcikjd6K7+|G}n1VlpwCRtbFX%5p;Z-ugz6+ zAEZX&YJ?kOJkel{Va+#8+Jo)uIPbr~DJ^3|wo$*XopyS$>m`29o_2 zzeh+1*RgVI)KF4F;)d&iV>#{lH38Pj_gjKvcwtz78Tiz)exDdO$Q-xi|5_~ybZ9nD z=Fv5M#)nF}rI;x2is*IQ!|6j^a51+&q)rH9@FaO7O0jzGzc z0I%j{gn?#(H}igL>N-)rbJlQe^4=TZ4;HLIa=69rcI-Zb{)gm zIkYtpskIt}Fi}?@Sv{ud$CX%W*wh4M>3kA!=dKB)w1Qd61EQhx&da1H*wqPGr0iWM-TukWBOKWbQthN`-9Cyk z5K;NGm4L6b{oJ=#r?K7VVlPH$lwlWTQGVGsGZO@v=I22=_A_3Zj*2ITsijomSXxy3 zeIuLcmb6ik4ihh>%FdWeqYlJMTLM&={M2JKbv6?PAoU}!>fK39 zU@=T`$y+=eKfFDH=w7@AmE___nul|BKDFhkAk-RSm4Hq-k3%r%F3~urzRwGJlGL07 zqiw;W4$$4&0_@D*c-+-78LE6@HnIbvn)RfORnldTDo%aXWng@j?n_ZU&pu zdH?14c6&Zec1+sOB~~mQY2Ypc_G74-O#^w~x&e1Oh;Q+^xvpZw?`ur{kv0)bQfv_z zmm6o3lcRLsb6jC4RO4ZB^Adi|Nth`Rk|i-}aswcz^1vUi=1aP8YFtP(2$Bb6?_Ff_ zew@ejyO@4A)=bPzLBFeRg7?iyJeW4>GV|E&EfVE*Xb>ealqW~D3fa7F6svswht{ag z1hplXW1ql}NSzUgf=mL_2_X)r+QI|8GkoR@)ZNB_`U)>>d&AdQK1B$Vz=qj)TO<9X zWDl-AZHfT1{?7)Qhj8V#`m0f$i2h@r<}cf~_N{E~VS>U8bs^FAv450U-~h|f4YXJ< zDyOJIzr!_{tB>I^L`v7JCV?KFBr%;cd8wLfJGjKc{`H!qL3Fk6U0~||36fSgw;+WR z9;bmeDaL{jyfd40J zqFwFKV^OtsN?QMQ-g@r7agG!B+Gs|*$o#E`i%s+sn^X3@k61{gv{%mbcIMc9JF~;C zF(Rw+6tSK5yW4#O5Z?)=U2U#^}#A zoWlr|%_2@fZQ(-HY@1H@|2|8&tjl@b~epBPD@7%DKOuy$A>x^BGHl9e(_Wu>BC>DJW8>` zH>(Sbnyl{pi<;67#uWdy1?t_;f!jnS^j>n!6_Kj`jr##XSwQur?>}eisgElQEXqN}Uud+dN*35t76O3Kw=RNL*-uO? zlw1PTVF1$k)z0z%T{yJaPFcW_n}2s&TIvdH9!G_rS@3%&8U0~C#r04t|6^y9n}(iZ zGr9vaCqH@O@)lQy1>+n?i3M@}MZ!-H!RLtb0~YWY40^^ERsV}4 z=!!2&%FY`!X()<;J@@Bf75Vu!*I$%!aS-1Xx)RnkX!JNHznOwHgO(7M{){mkcE3K^ zz8t3sG4!~INUL``kCHII-lGOjNpKW$&gB{7hI22gU*^h&Djw(<raF^Zo^Pi}g3;g&#Ze9?tc_lmqX@ z8)f?79*{DsbXTm7w~wI;&;(ne+dnco*_qk`zk_NE9^B8}NXYz*tR(Ga$c#;Yf z%_5aw3}kkVcr2P0zibnK#lBW7syGFkcMNOUh-7oQNA>p4;UeF9z`8&3=LO1#A>j_S zpBLb#Z^#gR21oa8c}zQ1{%$8@kHjGb^n|;6pA3oM89%%JX!v*Ut!1WwZ&F+ zq~Ogcf)-&fhzNMImrMsy1?ay70F(GCXpBLhi;!yi1oU}vV_iPzQ z3xetyKdh>XLF}YAB&$R{CA$Myo^X0K_Jc}9%PKmsl)|SCL24GFW6+*qi~1i`kb*`Y z@7QS=n8=P})y`XXG8OTejWN_a@ZyoN^xZ`qrWjD=Q?3UBz!yi@4KWJ95^yQuV!3@? ztc%8`|EHxfj7Dj^;AVLG90-{#px)>xBlTE$R`mp2s=jPH4~9Aq(XW?CpDIE3X=`XT zbq+%gJjUt`^?K}2$LpZ+#3!pZeTr{eAZmF@(F+vpJ(+gQh+5Dp{OeuRrw4n(vFfR( znX>K+a#D_BykPaDq>54@Q9T6@&P?BxKC$Q?0#xou!GgF9Btmo5M#m96JI%?9NehqU z0f*H-8`}*Ov95lw+{6qQcx|@liuij}B z;6(UaYYd$fMD`LqBB536?;>_EYti_YgMALTZIH&v8@MmH-pZB;W`cn6;c4Kd{P#nVI4p*;I`;=-T^ft)r2_ZvnZRTf8a9 zbzuta(tKb&VTzM1NcWkg@bK)Tv@Ty8=)KzfSp@r)a57;iyEYTNLWP?q6N^44>FDHQtU#Lo^ucO&ePqU@QYyx82J<}6Kbg&}gRv@WAO z4)MnL(=Ivd#*Z1?Dhg<47|l+z2M+vIHD&+U>}GI#Ls39@&9#Ee;}J`8Q#C|kqP53d z{1EF93wk#pjSNK|uT+)K7x^f&YX=XeM^*AdBWc@BAOdTz)s``IZ@{=(Gx9WcFf?%s z!`P$0AF45AuvDcBtc%B;#1#(=f!)~?gi4yl&*aT~g3|au0lrqEcQB{oB%s}D*wRL> zL)Jnk{d3YQ3o)srK3wGXx{LcA6k;1FxEV;J5E?6hY|ToK%~Pbl8f2LoIWC(CBAIS~0(SqBCLQInrac5Wk0vsu;@ENkx(^R$**WdR3AaNK zlY(+AI1noeMixiZWvmsAfeZX37K{LuNHi;;CUrBs!rlheFidxWWIP{{eSM}u&qucL z-Z>Mvf}p~ZnF`J6S*2e&4@v2&K08LBjaH_p{1KkbVOFWpD{&rl{6_T8p?1oaWq>@C zX{Jl(PWWg{9kjBmmsg)`9lH|&AFQ@A;YjbmeR(i<@O2W7&ll}1?lJ)bPbz*Ci){IFz^$pjaP(hL&8gi(L*qaSuS5GSOtr|E zBnrP*=_p+=5y*djU(pkg9!v1W9GTD>G(5=(Omd&^w+C!-Js@B3S^JuY5xmsfJ5LuI zbPs!?7yj4iCcCoTf*BFn$1o8ST(Yk@4Pp*Pt#W6f@UK=ITDdNTxUtVN0IrSZS~5*|=GRx`d1F#_O%$PgtA~*`;!AXSOsBshLS?%P=-V zNjJO(#q(t>Ch4fvker#XbG;)bM$r>afLytY6{D=XHS>HpEEfxwX-B( zV!?HtGiB^VSPGD$1$!+iTr$s$>cx+{^Td1U{TZRl4^~A-_c2w$=TV7G7DFa?yo6@q z`hh_DE*HlolTU&$xkGHVVST8D$vK^g;t;?>IQz%&wLCtC^orpoW>1(*>D>`O#S#Gv z-QLqkfbn|e3P&X`@1%ZhELJaO2}0uJmJ>64`>i3Tuy1a8y%eL!gj1zCBOON#Oqz4( zg_;)pnxHZfl2tXGet)yb#p#Wo5X%P*pyvollqLxyEhUgMA9l<52&XD7lnXrofr#L% z#=Z^4i?OBRS}6)3(Lw2vLUjON^R|f;qaK$-It@wgjl|^1ElV__q$|wZTJptDu6IWf z+^eluL-uZmRB?X>?cQ7~%uRa`Y94h-jK#nA$cjO*jux*(CM@k4+%|#HC@ri5EdySF zYx*BB@T(O2T-A|0B}nexc6`>c)Rp%t>+}#1bgWp{-3tL5-nhTz+y3Zit6Zemc3Ij; zaWX|XmaVhtwGETsCO1%RpVD9s(sJ(Xu$OAd*{gwWJo}uSLv~m&$*Si&s(o&LDgif@ z?pjTLe(w+vct5s)UKPqY&khR67L&t++?a~44Z*u`$5VnQQpP`&GgJWqTe$O#60V<` z!!dMf>{t9-RWEf=a)0 z++EO;md-4}T=_HPC(=c}uNnF(c$C;XrQ}#mT1)-n3pvdr(Ynj25%>Tur_2KwPfEaI zosD_IC|YCeG%;vSYUl8{UHm>N34fh8k{>3ACl5)dCLU70b4O`fS=C{FlSuHko-py9 zPH`tPKq(B?)o}zrCP>sud(cc?>?~{{8-tXx4AKb3?7V8N(K_QSH7IlYb23V`__S5g za-BHG0`tl~0>rlt2S8zr7+tU%l9Lil--y*b(aNfK_aMOuoJ@!cvs6_FPVn^VHe8D+ zvYT-QIrA{h7?|O*Hwf`j_{7plGZlVHiRlis*~a<>!wGSfebXkpGeAQ2-v($6lCI8q zKOhy8yB_PiD#$>VjYn$O>~;IWn(sCOZ=S-fIOG$3kt<35S}7WFqJfM)o{VMaL`-Os zvMnYKTXS}@Q(VPlTL&ol{Nj5&&{$Ox2TSIf0PloHGH-S7#d zL}hyWhTcTrjNPsp{y}DfJZLYL3HfgIS7*g(qyW|HV-BB_eG`zbiFgm^*bRvn9)QpgHlI z0~mB9RiT&d(H}u#T8EB(P;d*jPqDctU8v);44oyc3~<{@5leK3(BhZPhm$vRIlVJ& zwcJef!AgPf5@^vlX)Vzyey-SxZn9p7sHXteTfN(Bc^O!>57+b&>$Y?3_4V5Z$_wmX zsoz|b0>x_ko?rlxfmRmajYnQe^CT6j z!WgCRGeX!RR_Bi!ZiH#$wLvcWaSA0pgW1tDi)_V0Ww6fWBY(Q>RC`J>s6a> z%AgA0{Kc~Fl38uFW33DQ5CbH{ zB!dC%dH+qxxs`jJ1$hn+=@#D~Ax|lEU12R*GBNI>BSY)dJ#}ToNCAE8)G%R3@eaCA zv<4V^K@VEBQ@PBW%9lvQ>0loc9=8&R?Dm;RkYg&*V{kGypm?#vud>_=Di3K6UZvfp z(4LEN!py&`9B69RC7D)z7U)KZ+K>~!}@S7!F`@SK9A!FEI7SD;2T-9YIDFt&o7TA~SP3{0y zHElC!y8sJS?CI05O7x<<%qs~tV&JT*^OZLfgx)W{ceru)FqoXlz^b0wA{84-i{v$= z4Ks-XcRZSb+ikI$;mOFD8tfw}-nUZ+c%nDoDRbXoB`}z(A($>lPZ#)!PXOR9tTW}> z@dCh=F5M06<F1XN$ht?J8`L1~d))BCJ|!?dIV*Jm^mptV<2`z%}mr=LBe{fOY@m0_HSl7YM5 zJ#r-Xz((rQh9)or14?aHU{nxkztw5!^qWM1D_Y@zR0T2Hs2AkBG6wg;p{b@?joaD8p=xkK4Nm}hH1s(R2_p&Qh!Vfx! zefJ0d@z_X=S2J%**!#^g2GzsqMtkBQGW>b@apSN?-bS|Q&#}hb7|a*S&XUdt^46uj z))8h~sWUm^aty}*G;4+XJ#JoW*WMtjX-_!g)T1o#<4JUM>V3;X*6Rx!L4qnqLkoN*Hx3S#K;-&t;)<@2}384jE4?tMtI3|zj zQtV*uN)Yb2Mb#%R<+sBP?d8&TjbM|%3ns85M>fN7=Ko-=2)tEFYwAIvXmxV=4XGZuoCsXSXB^l`j7s+2$AON#)Z*$NXgHU;Bf%>x`m$W* zuLYju5t-VzZDnh0w%#6j1Lda=Qu{pM&nZ1o>$gw&YY9%_lE$_meMETqMSI{pF@m-J zwH@!KhKClOSzK|KKx}cC@0mKz7}|7i>IpLTa6MqEKQ(h(I$Y%0Q`8-$B(0X zkRF?r{^IQM-lg3%`~;HzuRYtX(A;zqD$+mFe(Pe5n@N`zpnE7qB*t(bu{=qbxTHAyxya_-U zOmnE~5<$rl0xwt8=8Cr(!9$joN8Z`7DiI*n?PaB27k!H!%7N!RGw_|~=%4(L zJ3h-oB&)j{A6y)oiT_>P>~Ddvx&^XW1mxsy%;R^a&tSKPacx7)H|fP=cGRcHJ=|JR z43fGW5~o_pq)Kt%AAA-j?{3C9J*m8L7#M<3AnaKtBUeU*upE1s)d=LS(;7q&bN5&k zX7^KRbjtD9w%OD_YpdV?Yu%nfg06Z^!t;{p#>S|jh_wRYq&I>y!5BjuhZUE@o03^V zRvc7DsI8nkn0}Cv!obfCW6wExUT?wC7X!&Y4G?nfe-*E?bZ9$J3z*t*4uFNPN$+o` zDK)8fl%iF832;TM=KnZ}Y?tiTlk)SniefPmxM|{_BSTE)s)SL9#{X!23CEPu6n>UG zJi?Rbz*N>#m6)>v@D8e{$+)=Ga1n3k0{)9>`@VQo9lF+eteDK0B|V1_5@-pT@_K6) z5ovD(X))-t9dZ7P_+f|ULjv>vMs+@L5IX={+W!+y;m#8e1hEf3U_7SCs>MQUNeibf zCdNaPJW>VNUS=qkEpM$BxpY-S2To?7`^DFc;qEXFPbB%$>m5Gyhlar;z`@z!##dsZ zGXi19lq<`Xcld8}c{tjM=yq3~gJjxh%ELo1EPT(&^Imk8H9(Gujf4G{o-skfuBiU% zroT9P0RSFvRe|NyWi-z?4iK5V89{S=8&ktIN}qb*nA9Cm7i9 zV(pZ&iMVM&1*-VrGE4mq!6vyPhp!Ljq{<0dV4>}$)A_XJiwN{Y76NKEYT*GJ%3qIR z6YP$F32RNW7<3F|o2y}Nz@J-`^LdEc`xtY1|MZ+|9o~y0ZTv+G&uZu-bXtYRCDFjP z>7j;^IP!9>BeEJTDj@h;q^tO!4ZF@};iy4m^-HWwdrjVM@$|{rln>!sA6xIdG3I$j z#>e>8#M^21s42MaC#-3nhmGmY{E`xf@Oa5+RcKaT%CZ&H;Jey7D|6x55qeg?)ZXD4 z9&+n(0aG}?J@*8l4^K2FAA@)ZZrOrw3)z2oc$?K7hqy4Y@7ubeVP2Q1XWGRvlWNt= zs4aR`cV}?b&^jHDk}YHW8_^Gwpi4SY*Mi+e_Trur8y@M}JyWEpgUy9I+{oHtssYW1wG;*&-&L=)Mt)~@7Xi}ts->p|HE;XMLu%|UJ-)7 zH~QlKXayjfN!TRLL-f~QXX9Q?Wd4(4I7>hesL9xvD|#2n``mr3_5aLDK%S}GZ(I%z48$woLAs`W`^jE186pBz7jQ^ATqQ-UE z-4<>Qd@7^620$BXrn8#3P8o;-g(`>Q!Y?(0fz%gCm?eP3S*C1tCH((dvA ziTq~qsp=)7`Sl(YjnG0rSqsHb=7djG_G zT7hgJ?!wC1@gQHBFieALb{XJf9u}q?e8D?4kNp<)k=HB@Nqa{SxndD1yeV9LsBG?P z_VKy=e~Z6FNvlD9)W7)DN+9B5FCbERY~2!a#2I~vAQUx&4yW{7SfcKD2r`J^ts5#S zwNsMiuj$TQa*k{ZEE$ZP>w%Vr0cPaS9~fC?7Elp%(&lT%7Pzl=5^^h>&hT+}1C1+X z@FuZz-MRLGwft$)W;_B<>&4u3Aj1uwucrr@&WCl&a7zH;?2|1E`?Jh%W9cn$gAAkW z5z=uvf|3w39gjP&vDDz!Q)!QCSbpr_0m1P=IXf{WzT;6zywcvhXf&S8-v7;Qj~ocg zd~vnbWjW)b{PMKtQl$`BLQS1l`g{Y{83h38gf5F_58?P|X#}VTtAKV;N6Qy*$mIG6 zijB+9$X;6{9pP6SHn>E>k`1yH8XsKvWkFtr6&;0J+%#AoXe<7Edu6nJXd|;vxdjLs z<%Fy5JAriYSUGFO+4Nf#_X*9R6i#qyXltK1P`aI<363_ye20Hp*B8ufs$t$s^F8hC zP>MWr&C}b$IP){l4$D~gb%^XUeye>yNBN*9Dcr>yg~N{VGy!@0+1oZ(Quh5?xa+KL z6L)Vvhree61EW*ljl5Bkpkpx#?s6Zc2E{RHt)~_y40T!%gJb@$8VB!$uo8PchKn<3 zv{!?*Po+qW4Xr`8s3HA;zfp7hJXU!){v+dJPt~zY5ehe>TwdmgoZH>XwRC$!A zF3aC4!e|8J@+0%T1**jCUp7$0>h+zTh)lWmo~wcv$dXdG5+6(O8^WnG?6^bhO`hq! zpqr44^D(`ydYH@D51Y*jlb_aqz0!+#jFxq0i6_7s`Iiv_muoE2fxiUb(&(F9KJ6+Du zdX&tq#hS&DKV5pSGerM+5O|8+BCO2%VS8{z{`QPZ7*W6D@*)J(7cIwcaPiDbt)kdR&_Y+-Ej$d2EvT3x#o!8bX?GAoN3;45NY~u zU(ZjJpx@}r1)w<_)>6b`B&Uisl)Z^49{)e&h?@swAd!BLz6iABYf$yT)qaFS%Qv0g z{M+QT1+MEn6TGgPaWuDr;)DV})(~sS6v~c58@aSeB0Zn_q7Mf-E+bgqybN+vu!TPx! z+jckbwLrA-pjR!s(4Mhwy!IuLk(X>lgz?xvBJ7pJpna3%{bw8G2Jx__h@7!O#0^MD zJ_|)ceSWbHIDIKpc|#bz7pl9$x$EXeQAqXcpG1Z@GLD8U*3~Bb+}O)j)|kNo(_e)_ zrTsQn{<;3M;am6kJuwMbCgu~FRG3TuS#?(rK4 z3Oc9$^eVVLO~3C<$D8I-s`|=d!o0Rpy4Q|}a~-Q<2oly_O@1K|7iCfAumZ2|VL2R) zbeC?jVTv?h3^IcpP!J)Vcdzh@Ot0XMR%De`pQxdo7;i^Zgj)&6a~3^ew_}wcTWp|g zy>#BaXXSb+Lg)81TZtbs2PnR{I%DO^K&Cu+=S$`iBj~#JXvR0tnX!A)cDkH&-ipIR zy&+YFN_NEd$=WHU=F+VxLhEQQSi4-gIF<_2b%krbRBrTMY^sPih^~&u+d1rG#b31o z@V-J1POve+B4840*11_7uCaHV7imgR(Q^_&fJ@cS&K|IZ=M#;}(*zdkH9oE%dr787pwLr2!IrEa^GgZw7!5o(nB<-~u}cN& z@TQfWWn`ogA`Zo2HwYDrF64`*JDw+x>BdAH0~+3o#>q|Ll>eekBxlu10Ks zcipVGsWmpZiQ6ZKVt_9H-aAz2$60k8h;c=kTlQV27BTuU~rvXCrBebq6Z=#L&D)$aAgs-)%HY60Q9;7IfbBWn6 z@N*2YiA&uYvjL4K!S1w=VCjP8bOP0)o6U8w~H-phfR|TdgIZ{{{#=m}F?xb$3?!O-dSPm9P0RdB|U(kKg<#^gYO5D@b=h z%b4Sin{q9aPtr_}ruTO9YP}ncZaM9Bp%L9P)KCFwaJ$EJu81Lz3*4X^PFxx`V)UQh zja(=vXLXTi%56#LHFBcRuucoat7cU%OD|y+B4rmuqqA`<`wO6}4XABXi6=yu&MNho zAjL3_{#{Rn=TQzPP{%Fgdzb{L9T<#|M15jCk+7~4D;$x6royt4hB#3L32H z3i3jL3BQF!A?I`2has=0l$j+HC%e)B8on^{G`Jb@XGB6G%|qug869d z1EtE9%kC@XKO$|Vp;4#BjA>(nn^Lyo1Pn3lw3tcg%-#mDq$ih1y`m%J$ne8A=>q)T z7$Fe|eT3)7Tw^>;@LeXn-lHwcLa!EboD9Sk;J`823R{^FdhE<*X^=2 zW6#k$MdSIJE;MFlWzd#7d5brD3*&|lWCOx!uU z{~ph|5Iu3H{o3Y+-x@snWvEu=!N=};ey`4mFK{Gq4?@G z?phpELrHLl(i|{pg`6dz$H;^Mn$~u&P!BnYGA<9uF2dM=5QBm%rM#h^tHN)E;bu#{ z|2S_33yz~@*_d&pNfkb4%R#9awsnCQEye3WJ)=kW$^IRcWl9J>hS?V|#Wt=rQJ=-H zj#4>cI!{$)?B4RoT!esR7&<6s_>|FV8cBhxgGaovgh^B`(T<09=Drd^Sdf=Vh^iu7 zGFCU*LrG7s47adwZQXcKTEcZ|!=68Y8oCo|=rPbWZbPcbg_~zD$ht(lRTS?H_T<=Q{kziUi&XW^8Q1<`ROW@BLr`a4ONq+AHF#WIFm^%8b_%y*?YO&E{g zQZ}HfISeYerR|%1g|Q$)qmnCRTq_7*`SsH?*2V*LHgLzyBlrbz5XRgh?RHzMdOJLP~xRNv%mn#43%q|Aj!6 zb6aECgJw>#)`C?oVgnL1Bxd=l46+e69;C7QO1B!${ZUR2Eyjoq5_x~RKHiSj{`5k< z1i2hi`W)PU=9V4~bV*vFIIdWrH`leu>!1q|$GF=9a+Q%Fr&O`&*j>g3q?g5{3kSPp z*7{ITwWS{-vEg_NGiq^<%T}!62{*gnIB`GlUdZeb3QGms4lu}&jgtHg>($=A;x7QC z^BxrCGSD&SE#DA`fTqyn<``L4cp5NzT9JhtzH-!Rc%{l4zs+0^m_k@Fy_c2~$j|5h zu<83_v$gqHIUg9txe1dLvJynqj*YA_;whf5pDpmHhVy6hwohWA`6hD1B976@%(?X} z26dUv+CVYF`$bxMJ1d*eEM{0db&@a5x+;gkv8Wd0==EC|iBh(o4d?l|ZAqm7hz;=ozx{fA9`{N?lFl5( zA;+)cHp9i-J?#NnMMXcjer}(*(aej%LYhXvG_3nk%k-2f*6$5fa|{M*W)(pWc8{I& zPdR-Bx0F3q)0fn-LVlx-No72`onRuy(EbpfWp7KNJR^m$(h_Ts?G49CXncCwY(H5K zyeXi;igC6f+oJswDfAIOTGiP*%Tv4dqJ@p|?ht&V3G~G%0MCm2gB>)QZR8Aa+#y~& zC1jP}6OXM|EvMa?%?La}ydZcA@OY?r$H6 zTi1B`I=iAs*Bnq7CT7XM)+YR)BK_`tCqrkPKl9bJcc`rLAF=xQPv?C6vAvq{(=39z z_Wd2i{o`gWNZItgI_Dt=qawhrE4(H! zf)4KTmy!Y=`O*LF;FSI@CvWf{aTdPvMCF1FW1x`?@@O>R3FyPG&-q73pThqk5D|~p z@sqEeI;#}!!jf)tm#VlYLX{#VD`ABVgE=X=$(U%!W5ioBLUh~ML!fKsO736=nOA!J z`*146y=fB56PbYkH|72<&)Uw*XRPu%hK$L-sqtPT34*l4P`KnlL(=r0Z}l_wejbl&M~IOx2R5Dut``oMhTo!egeAjz7x zfve8pZV{N8l5HGGtP1yv@~C-e4G;c_f$8SQWb5CH2Zmu!^|K&PWfTtrm#K?I&x*B_ zLhs@^ZFc^{zfX^HnH`PN6oAph*|KP-`G(|;O7<7E89f+AKG;CJ`o5%l7RfBsA)N!8))UHI4g?6^qEt}ZZr zgN^hM=n}P~p0WM7Oimx#-!*kWHz_=F%q6Fg8k+O+eDqj>Vfm1JvP@~eM;SS}oH9y( zs-n*3a>S1{Om8I166zgh%`SoE6S*KkOi-#B9>GZ%D0#ZUp-K#BemGXtkxDayX484a zZ&lh@bRUEVlHnJa6t>$i9oDjar`Ox^o)0$_+lfI0^V0gCn|Hf$Mo$`2cg+8C4L*~q z4EQpP+p*6ur{4XC+VqSKak!fjT{1poj;1I=y_#ZL8*5I>bJY0cLB8+MSdE76dTGD) z_Ody=mr7X7Uf=to8Q5x9ud;4fC2kbs1ihN6XEk+Q@<|2Xh|BGS%3pdV~8j5#jHh;5@=L z@{JpjFJG(=Rm3&*dl`Hoi4!QF1cN_>WY)}pYvneyTETVt*5o~SeJpqp138KYYhoj8 zJX%y`16E31HzYJOJSWWqo8CHQf!CICAkX7+B-4iB#GUsClrsN=^WuPI(^Kx{@~ISr zB4?V+n#+qyxon*}XMl4l8Cb_RDyp|9lk>TB_qOMY(8KOfKjuw&Ii^#fY3u)sdR1#5 z&G``lBV-HT(w+iV<<^INN952^{7Kb}_N z-;T1Z6r>g>vMoa4F@n2BASIImJBaUr9MkW!;k3nDZ@G43U4AO@VDz9!2=(-c*PPg| z$2ZgLCG&O`%KV!;6EDWvFK0B)jqrB@I`6#mQKy#e&N8Y}0}xftr+@T^qUT@<7*>q1 zDM7<6c4$2u_Os;W!rWr&ik{Xojt+-NErI`KZh;IAvyaxdKg;ZM14<9ebbF2wJ>DOE zlfz!?U6DbA_%hlpg3@%}t>T8IFbrWlf-!M^0_2G*4-Sei+Srsxol_%Wkuj&xwW4Rc zR6vOsr??(8pW0^SYllj0^wbub7pwodoHD?^m8R0AD4Je+3)410_`9FULJaSTFv$6G zaFF-EWS`JshCBH9r?;^`xTBr|Puu^GG%v^5zK9u5KDawzkyU9rocZA1k>~T5Fd)d8 z+HHk`%)9yTKHzuiAO1k!YuukgQtW!qO`AbCyGZrNCRjpU9&KR2ycBfo>kr$9>R4_C z&Z&?|xvaDto`bF@KN4bE6hCrL?XO#?aQPIjO{N-) zi%R&OT=Z;PGDGV*t${Mv{m!?*O4G|E1a)4sp5X_z_VI(o*fEK2MPyjqLdhU4lEtS&aczhtWsq58b; zj}xpT-C0#rqgJB0)~p09+pKDSbos=;mjH=sTE957?pD989X(>gVJ-W65A5AdWuvL; z^B)^*fkU$Zs_X1k4@LnJn(Msi+(+WSeDg4Kr4ZDQRhZuBm#X!!T9m&vva^4iDtKC^ z(mbe9QzxPp5DX!~#%3=3;;-6Uh-Az1Z}M)HXJ~x;R$zmN5Dj7sr`9^S|II8T98&qY z_q=hzMX#bGCypQJqJk%aqy4Gz95{`gPcYtp;R$Y8l{N1wMOj(QanlMswz_B@y*dK2 zAnOt??1#Gaqy|!R1;>I$&f$V{N~%(y+u+zLdWK6BA49b>ZTgFF=|O1<^3cR+k|f4q zlOJIls%|52g;EZs)*5kN{w^>RjJho(C=2|b(r^+rNdt^Jk9m$%6T%bXuvWJcl_uCO z`4M9cit)x0`Dm-DGWz*_&})w@^TuYvjeP$TihhApY{+-u(Rb`hgh&$z#bsW?4c2MPVn)(Zen0Wfl9 zh5f#pn%wciiKrS2?5U1RfOEEr5rIb++2P%I+)E+BVgIyiaOj;NG3?)~gi3Bkrlqh` z{)L41K=O;HHvf<1Mpkw4r{LX6$V5!y3o91>M|2t(mxLXLqBALn>%h^9!JBpp;&Nz; z9;MftOSa96#^OyJ&Tlvc$IjJR0y~Dj{VZKAE|qd?6sEB<6GPSJ`Yeq+#$1?84U2VG zu=A+!a2&H&E*kEep!!_o&NLE?$+rE@Ne|@EL5^Hp6Lya+GI5BB$Gf)2Bile%2B8s? z6=Tqv^{Ak+a#PSUVmI8i`uuor6Nps?v5xjsJXD_SwB02+^7GCmubt zsxx_L=Y3iMhG=b-=$+b%3b83q=nj2jHtc;@q@Vk{E~yJ_vnI4Mmu)iw%palq755G$>BrHrv_;OK8ZUY`B0D z>{(lke?R|RH6X-dyB|_Kx~nw31q}_x#grXP#N$leOo}d zUC(yH=)c|0*iCa5Gr@3J#+Zt!nzg$v+#?W~oxnj8RDbv(%w)xUi4c1jtB{v)yqFq= z<&UR_G-4ZGb84DcR0bw?JijJ(d0M>JeLWz%mk(rne7^&-1jZYc0g~Re`hF{?RD&n1 zUFXh*FD0i`cHrW7h3GIY1A?V5BES`3{X2I;icB~=Mb^#A`;VMd^w|@Wp&A4#QL)ab znldwCBgb8I^I`hW8p*VFwmDsY&tWb%>_p9HB_cffVpBa2r6$f6Csy2E1n(K-oyvaM z)mh%rx9G1bN?TW7(6zn*w{7-i=-etNfdE4t`m1IyL*KrTiF3nsa!s;vgnIi9p@j&H zJH(oS0HyI8Qf8iiw@H1I$i?=H!p~Q5fsmiEJOV{5O-z3>CJ?j;bAng%-O9^U?QS6m zEoS0qg@2EN(DVYjcD=@wYGeXB=qfsoq&1AY5im(%?CUy}uwKwM*6xf-HWv|xA0-BL zl8R=60Y%SlROfqAM$*XmKmSwEoRl)HjV4Bx5@(EjZ&GbD{)x?rn4D$Tg#7P2#hN~C znw6ukGq0}*pXRqt$YQ_VunM6n0Lr+?9_!D`ZSRvXzEQZdo7K<8ay4EaX|Q{Miek0? zr91fZflGX_BKHTY4qVj&rFPY37(j_NRqh_ug(%x_8@H?&m+b&n%v@+bxIuqRe{qBk zf7KHJLqNR0U1(^9g)=~eqH1lh$_^@d_!2Nyi)0?dUr4)37~WJ=&WWT(y-u7oKbJd@ z1VgBypHN)!qBWydma0thWA$<}I$HkV)_v4j<9KWhTQvnSOB1R91>3&eLOVLC!JucV zVq)$H2ePhgv8_waxaf-3CgRSd^}7e$4`z_vyF;8CPu|t{YU(m(r$s38I1%U1 zz8gJR@hKA1-vrlSBY}nMkH0zmHeljn7Sfa}>-p=bOX~HCF@fqzpjo)a9oIUP{(~E|svj5sFw@3Tx4Yuf0W8s%C6~ z`u?Q7p4*k|v@0c^Kr~LMeMb;a?VvSRgSzaLeHR6g^I%1-4^zKf^>C3DF$1-!oi#^lfhiR}S6tCX}zqEVCj#QnkH-Yla zYW=~YBTs`9WS$dJVZAe2=l;~j*%~^8$*ANSBm$%|ZOXuHpRT9qEP7EI( z0(E{aaz5BR2NY8UX(AvKy8B1u37qd3fV5owkp+(;sy$h` ze?GbAOuhyRRemV(uILKskpHjPgwMfg*Zkg>EXQVg5ud<+sP?1!e#OJ%x=Hb(^y8p; z0eD`G71p^=y{(q#ryknAd*}C4y|Xg3Q*&>C4p%prcsRkVjOdj5yp`D_u{zbzPnf8T_C5^?LdU{MiaS(?c(;<_~1eZd6M<3Kkc+! z?~r;)Y{9mpkbk7VAB&%kIB0+8rFHwA$pR;uz5F*?1`pAID~L)99%-CdrGf{|=T?KSLy*R}93o`JFI7J@robIMm^>r!mtw8;WOv9NB^ui6Rjy~Yt(2-?6* zu6%-_?a4Eptoq^$RavY*tg8ZwHWJKxFTW~Y3mLIP)K>9vNPhHLXbVP1hM;EOWp z=pUhB>(!vXudn<1eM4xnV!_;u()I3BD%-~|UUJws)&Q<4XbNbip6cs&2qYD=Ufa>! z@CjvIXY{Z}5ayEpdED}w z)qIF07#J#^J>xsRyJ&k3^Lc0itNqgWSp}0_3_W(j{F#XJ^b~*yG+)AEN)Wc<%SLw) zj=oJN@PmF=?-F`Qmbk+kNqp2HiFAnAm8fATKex5Q&mem5c!3s4AJcfV~(0 zPtXh#u8SRxC$V)b&C`p%q=KB%966q6=Bd8fSy1fY8S3ED+P>mM8=kmT=)O9_w<=eD z8BqC3?{Rsec3csc)E&#+6Dt3)#8rVfZA0b)$Ta1b((Xlnn)7)CqP+xC8k;0waH)6; z7jr2KjJzBkWOd9`BB5r`Zg8dy7h=W2jOhTT`Vrt9x|+Tf%E@DJmJDKlx@2nXEEE8; zJs!LeB$v*)fLdaaBW%7P>c5kQn=V2E)ilx5x>(>X>^J(!kEvZMNdbSL2w+~-}pPe)P!oWQf)b^K4;9zK`pIg-1S zM|-9tZ=S}e*)?v;q+opUQmEvKNPuSBO1RE}pa@*ET@<=n#o>?h5&AzMC8`?m1uhke$g zNSRnpa9GbQ(Q{aybmvi-_cGReg=Q0)GvlO+G}~x4*R3GK*XMbz-zpZjw40E1zw$CX z_uJe7ZbpvLbFlbxOJ9nBzIynfMcW#7?duH*X%?)3zu_6aXbh0d@qNr&7*!rVvrMceExkD$UH5R7s_AR)PY5KG^4NkK!|G) zKhVS;mo>UY-Ib`}IZRIeI+KXl7ISzGQdW@QJ!U3^YvW*z{^+RBz~i_xS{m+We+ZJT zQT|YD)r{x}EfGU2Iqy)&kD6UFO6 zEh};O*f);h$r753<48c*8Ds7++yeTkY)&BSI|u7i4< z^n^XbMxwbf`VLM7e-)K5k(#p%m3~s&1OPsVJRt+~$Ca9h4=!4rU*t(f1&)orSx95# zBBnkqZY{RpwbJ336HF1n${7t`D)OzukOzXipEkcU8i=|6JyvYd1o8rIfPy23Pc-Dt zmLV}=W?3)gE=2$n4wzeY?N%ZVu{P5TCPWCVH2A3x8HE{9dZJvFn3(Cy3}9jZ$f@%A!2As+-k~dwBCWfU#clz@*p3igDgShxyPt%t+0M#fqRqTxIvqb zb=cq#GY~0$2-4!>zvuD9|N84CGA3;J?0)ND(|sR7?0YX-e9*swf&FHeL-G9MxCyX_ zF`e}=>i)ILPz(&aUf85P&FqdXy)(2Wut~hI2=mX1uYqxP{OlJro^V#5kc}%8|K1hL zX6$upYF#R}3=Q;7TA2N)=t9neznHNki zRDF?+b#hbwIYlR?|Nh%xH1vs0M&Clf696ZUBuUcsXj z-ctTHL5C1jFKf*d*!!u*q>&D&w}6W0I2Z(qGG!H2B=JnvFGf%tLWU<5#wLn@Vo6Tzs6{8&(~ z@(tE}+@)#}3_$Xl>M4K(8!+`c{vzDu*Z|8GLTE>Yi|f34jCa-{D_Lse@Ze=tqy~&f zm{X!dkoFe(zE7GSkVcj!?;7{W^`5i@}-qwl7g0T{^I-)9Ub) z_5+n71_5v)r|4Zo!Z~hSt7h~S+qtg-AQcwp$r)se^{rDL2h7qHS%eBZzQ}j9dFHu} z5>MrN2~;QpL{}E1unPmy&ox*pEIsUV`O>>pW-xmjX~6wqB!X#>%n;rb%fb&4FHsqz zqgB<9=B0S^)WKA;+#+_PPBPK>qdjsuIO--&EkiW9an~c@67~$pU=u!@RvbQ7)MLKl z8#d%e5V`J7j8ymHhd%ki`C>D82v(OY2{>D8&`^Y7F@o%;S9&+bP{z#*lpIHI9w4ssA{IxPlh8>gDy$bl7jK{Jj{-150Rfvk* z0fID=(qVrhuM27K2R|~MJ70YYHqSCENdBr)51I7mop%>3uQOzF0K5aE>~FU3iX5J? zKA=pPOYoovhGyLlj{Rh=eW9%P^`Y7**FD*2@}R6??-!4aPh8UnB%!XEm>eQX%~mQW z=?Yi=F9V2Ix_gboFXH~~75I5cUQ|6ET+4t8gkG9R4XiT@yoow$w4Q0qM)O{r6SOsh zfTvm6bxB*X$kQkwj6^Z>3GPhoCzc;Ejxq-DjYx*kG$w>!SLGksx_5rSJx&&Q$_hdV#9#OclQus~H@=j4NcrX&gMT{XoSW z(mO_sC~%1s((w>iSBYNfv~-km>^Z)QwLy98)wyeo`!BLpUDxmzJF&rHM!F#EnKU8u z0SjR%`{v+wuQq^vd>ul!)LzZ_sx=#)iZhxC=G1O}U7B12z%g?PEO1PGR)oq$zA?pt zFwQ1j^X}c@m-R9xe;;}|`}o|eMpv8oQg7_?%Lv*>P-2yoLwwJPird-vSJHm^-u(%4 z^XlvJW70*rhYV#!N%L&%D}GOTNjb5Mxc75w8i;r8{c_M8fxuOSdV*dp4?(AkJ^C#B z?S%0_!IuJQI8t7IR%2$r!x2_p`~N+|dlgvsa^km*qH%wz_C+jq|HGHN>G$3CW2w=y zbTS7^8Ut62wcMZpYmzWXPcaE(gOcuTEQL1yptJ>N)=)3jm`miN!oW3DARs=cK^Z>)%QIyHuO&GOz|=y$MKi@EpKP9Szi|3 z5O)|Fw-Kp*`UQOC`Kk|FQOdpXipBW`6xh7|`{T^r`QnK*jD---ZX3)*VW~_kvdqvI zt(zo(g5P=oM-`=fGDu`>QxIhR_qnglcnz%VJPR~V#YVU`F^}Fq2YCE~XA`p~QG|ZN zqJ&)ur7dSW6yd{%n7vg96t;&3Ig2kVfLNWCRU-b4Qt+m#PEH@^j1zB~{zAWcaqNx2 z-AYjOctVT{-grc-_XDR<*!vvYsrzV)el$gcZ~@>8oM;D3Rc=9us?|HDfI!Sv4Pp&7gpb zXn-$fJ7u1(W`b96{EDgVQ*BYcz?3=U?hI8t58N;nW?fq=pF0i(c>GB;3rz@Y5Z!`T z{QX08@FmE}s3{=Eze-L_fWzznJW+QcLPIJxNM_KS%t(H8u?vH0bnoRZ=V81_hD!XB zEG1Ph;EO}bn&DSSg{yS&uLt0-$BD&SN@nBY5X(hqn`@-Y2TW7buQki?H|>n?rwL_7 z)NbA8t;axfQTb(V4Z!_Ys8*?1_uZ4r`@nGf@{c~(3Yl2 zCe>JCB+7JxvO2ga=IE5mAa~BCD&06XsB)jP_Lab<`?=FH3|@V84M!(?rlLY8xba-t3V2#CvKd5$(7G9vgP-Guw8 zM(?5*eYz4U^A_?03pS;Ja%J=%S+-=MfW;XMJQ~Ne=uZ5biVvR9C(cp(Zt_Y#(TS0- z&Pv}3*rXWT&%n5Lr00W>b*cU$&}(`3r2QjZlFoL!9tBrkcmm<)X{?ESZWDPD{UuFh zxEB53{%N;UMAv2a^=T*6t6Pkr=0Q|Bb4IqXyZ;cYT1gSoNNg^ZIF}G^b@Y)7>t%hh zT`U0YH0vQ5pObYC!`$9aW3jA;OT|ft1lsfX3VwLrk@j~+4mM8+zY zz_2sUebC#_1Qi~YvV0H)#O@?fCBJ^OuHV>2=xH5%g`-1#Q44YRe}aV`kurFXq~QyQ z3Xt4g-{6&}ilG7ZGLXXSD-N6IK17iXBaNNi0u3ectQ?i&uJ-snaJIWgHPLg*j8|E+ z1G`0aPB?|Sbn3ts$^ZbE=HE|@!y3eI>uHh__si+U&+@g)!j*OM+0)x0!N}T~K+JoB zX2Bx2cBObo0GbTfU2GKd6UxBf9)I1Yb1Rdj=OjcMGssszRbLnw_IT@C#TtK@3V^F9 zGP%Q*tly0#uY;RD^7z8^lkAJ$$Ychl=|%#ONENlP*uJvuSCgI&7|1i+{$f);L-Xbx z8}obOIY|aaIeK#!-nP8EVO2-KDopt8U?)d9iChOV4b2SA4o{HM^qZqelXqt!xJ@cH z;uqS0#=X=PSWLML&9E}9KLo)xS2AF|IA<8{QU6WU^5_px3&XGmfKV=XxCJ4ppgU!l z+-ZnKYBx$NS1QY@=C`urCiKK3<{nMnJygT<{~_D8&FgoazG~#oEBJ^*VD9aQzYx#3 zjxJs^7K%+gkB7KMu$~JnnrY5>E)Rbq6Xm$TTEs5{Z;KHF9t$>)Brd37p%cTM=ued5 zx1;gL1?AE6u}K9z{y`=-wnV6%(q(0nhE=lVA##9MElM^)>7 zzW}Veu+hIadJ&?<08Z|d3u}fgfOd>!G%RnPxb>@NF_y$xf78#p8v!G=hjzk4(F@fr zJmod>{$`Xxy|Vn{xT3I4d2OkzFv7$~kh&NzRK77cyDiQVDery+)lWhG_*&q}4D419 z2FbZ;9^{tc%2zujXnBXXmI$9Riyd8x?Eoc?7axa+bEl0(veEOJX9EO|`syb#cj|o1 zRGgonlJ(lf&1N9)S)77Fqd@$X^v^#OrohOE0apK1K+>1SK$!!;p7`-r`JO=o>qNaEB0mi>=dte$7C7xOwSfDk!m)2ei8BfWHI(FHE&K0&|t zo$&blsqvUvtqrE;+dr8vhqA1PP2mqxN`+YPN?ar!?@g>w$3;stAAUhD^?tCJmoSn_ z>s>SvByR17ldTey89;_mU|qLgL|R2pUrsd|De+nSbbN>K7F5U^V^YwcdRtt7_sjFL z0NM!IEg~k4p7=@AdAX0L|qmeJlD&cZ(Ki zP4yZB2zQp#Q+tGea!IGjz!2v>v23gvpgN`L{8uQm`(#3CD-Q7DxnpuBU zHk=s*De#Lrx)vZYI7dz!L4rle<~ZhxhQbVG39ysyo2#cTfovK!vsh)V8kV~BA;bMY zH1DICv6OJ0uFXq-z-W4AY1aF=WgE$rl)N)e2F=3V3WOMhFjnwKsNKoSd=OJ8xJh_2 zq_zt^L(btAJE)JNL>zlLbumNKWFbVf(GCPf3Y8=OKI-WQh0tS_H(&c7l?nTE^i7aV zA$I2D_L)J5Q=hmt*NwRZel3zHRX_zabaYn(x^3BmRn9T34|*9s`Jy_@%nAsE z0pI5tx58q$GzrGZGJELB;N}m?Y&JUE4U=Bp|F|JLR_%}V1P{vaUap&s>sUTZdsj@z zv$!F_z(j~67^G5G(yn)ljIvHBcw?1h-c?!9ixkWJD`dJAbQWtP;q6Slc_gp9sHs?O zCK85wEwzatc}g|Dii`Qjuv?xrN=+r#$ik#i4n+MgJGq!J`x@=Yq))2g+w}`BB*S<@ zwqIh#wmV1JOeRsLe1?bl0!Gaj#`P`U<*L{3@$z)7xe0;Kt~(PZ zLNUtF$^n8%g_~+Bq_cYR4TPoMzYVlFnW6~*YdR>ZGLs3{QoY+_IG{|Q23ozBQc(W< z4e-gGd~objxWM>aWn(TAQfG!sFZ%YRewI&Zpmz?1FwtzLsfw)M0e6(;F5GTI!^D6@ zmR|b0ACy*VB8YlEq|gg}tW#ZOze`*;@S)Uvx8++ZgOa#r=>*t`!$F@9MSG4^x?(bba)$)DL5g5_1z)lzzd%{zPRZ_Q_2?v={taf!?&`t+&>X&Lh5}0dQ>~b7 zj6N03_oo;k&mu5w?1r-|cdF*(j4ykj?c+`Bf-Z;-XeX*}dkn^S!muj(!Pz(6`tvl!xTPX=oUl-=GkpobyB-Kk05$w6%A!bX#h$_gH@ zRO4G9Bz=>)0b|=Hr?dB^K16kcY>~cYu7BF*##B;bPogG7D#_Swt5&x{Gi=ry+FkG1 z4L+x9!`Gy?T>SF!VZ-&YBiHp2=w;$X|Jq_^Z;F)8be5A)a+FMEU!-YdrgYZ;QUcip zVUihtOsQ`BMYyU)@t;d$s{p>_iSY3@yIuBmm7t~mtAM`}olQpoXR4IV3$9!sEA-J> zqdYv`&S11P)-z7(Q2-u5f#n~)^Sy(-X_-oGI8oHczq7)P1>&cZ3 z{Syivj7a1O6*^I+q!#84Sdt6j5vHZj#%-?_?I+6MeRR%mwhX#$LV$GIS!5s9w}SY&x|InbY`=fH)xHi!uAqXzMC+Zyx0(=@MO8} zu-fAcv<{jkHy*q2D(~L4UsOeHL3l}gHCA5d@9(ZXQ-r*jA^q8KsB>~bM&TQ<&9*l4 zUho^6BOs_c>t9#x*-ePtPnaQ)YN8N4-#KKb63&7>L?c0wB-eEP5Y`2A!?s*ve(!Z9 zyQKIfQXD#|ivSn+Rky;z}B0QCZNlMqP>vvWkFu0bu}z5Y%2DepjT%l z2SA7=TORuoY-Sc@AJvWakI(cIK8p6$ z2f=EjGNd$|!g+M+rZ8)x-pKCQNoXg0Q1FDDf33qnp;}#7@%LU?1^m;PJtg>owyZsK zAvE_+=%SK_lFg68O$?88pPN+w(eybp?I04nPqQ0)gSo~1xQ%vO=M8R4g4&|Uw^}F# zItJ32Pd2#$i_Xi$cqV_sn%BkOR%e=j!NzJmiy!8h#NfXqW2(Tom^4s!tOinW@``f5 zoaN7+QLnP@X2nfIQJ8j{f*Fw6ls$8OIW&ke%%gt_o6Put^M(>4u6NA;6MF5|QN<#_ zM!{$;8OvW7O6yICv5WQ@XE~=;hmW`!C+@<6@9Q>a=feiwD5}i0NRb58sl}X-IHrdLoHmBJH zWx~7)vXN>_wC%3=Hm5;g$HI~bPE38iK%eJ~lb{XDh2C0~KE7r;C;kQU0=aJD8en{I zZmGZP;^#sYKMToV^)f4a<2D!+0Vyg#tDrFg4($XUb1PK;!d&QG&sS_1j7=Brq{siU zQ^_ZPjkS>5ayEDyWk14XsdNqY5X;M&ZS{dMVQM&X- zWqU^(HteR#bNTTI7~P|GGxr)q8o>}BDdL2+h-XD1%L0+Vt_gLD2p-V*5L(jV$8fHI z+XgTTuqkQDMBc$nU*VfH#`+{GRDF1N%o2-YFSM>oz$vRYnX9gNUx~4N#B6ST!;M+| zJNx!w3N*kHqyvdLOW#Y9z7(9T-Kf^9dUB<^U#>y-VnxtLDZp}>@xEQP=7bP7>mAqo z=e*Jt-zXKlgIW^Xb_j*DPPce3zrmE*!0#Vyx#tJYvio&Q;JA0ZyRQ-AVB57h9so(* zEW6yf6g2D0HJ?~r$TB-;$!V6WlYo{R6u_7LtdUwV5;m`NUXH<_ygv8lw2)bkR*{lK;+opY z^ti`h5*km^%hG*;Ez9jDZ&L5T!J}Q+?CbJ2EwEU~uh_hdA(eAs0Thcgh)h(eptiMj z7J@ync)}2`5v6Vz(2Ntzr#g7Wy69zh2c`3ziXMPXKwP?tgL|vdLDT1GLxBV%Jl`0X zoH3D-W`G#(nZPm0(TFtM5qpJ9s|yF`K$lI~CQH9uJlMG&ppQFiY!GIDOkpD^YH zuu7U2rGcpa@ooFjnggES5P^A4ObKH`9Zb(_^!E{plcZhwuB~xeU}#}P43H4=jxt1H zB7o_?QRFFFB0t!Jc9(|Pp^j@EW?F6onN9&HVYcsOs-IR8t?)-HnbXYa6v# zjhx3>NSr^G4lm`KNubmS=;J?d=A?|Z{0|WBa(60Ta8#fDcO|I{^i~HR9WGP*^N<+QhBk)U>dKN7J%6~8}y;o;Ug)}DhVFBPT;Txbr0ZDPd^5dh--dsmlY{3YI%dHm$^ANDJf|FK8P2~P& zKApGt$cIl-ce~U^&+#D|^Mm*$P>43V;Jia@33N7t;7mMgr3;CW7S6u)I+ve3C?FkfimC$7`oyTfCk|R2!u|-#HE}_*DO+owUXA?H(G+vO5Cs1|MqT z#BR1BbbDvK6zYI;{=R9QM-&Z>hV~fwWr*^v)s}(#j@)1pWBMLN)`-(At@O>}HxGFz zV}KJ)nRWKC#M%fgghswND#my_ty+pMT81gD1jNFy@W44d)0<-MN(;Ta#x{L@0T0>} z($;+CYFvn_+qNOQCws);s@^_e$G^FFOgSlzb(^)K0wd?M()&A}FljvfE#ZuaayBsE z1u=LV^CLV8F5w%Uu#c)+@oRW_pkKXPS+OaToKlmLde*-$rlRxDg&M!IVghb{&1$mD zicbb?1CkNVE9>9ap90G>I#~TaeF>Zz^N8P5_4AJI={D0nW-%s*GtBUhjnU-BJ@a0? zPdB5FVi-gUl2J7njDcVIpP37Ruf=7vx=JxR1Uwj_(w{^t*x1xr zj+|spmy`-0ak*;|U z7wIQBIjQCU|0v9;-I$9!?#AV+rf=sZjp%3Y7)N((js)VDxHx@NAM=2&h_|hb(N6&Yd!q=Vbht(h7*u zm}6Zzoq1w4a1l2dDq~`ltC;I8x;tgx5E!HHMU6g=T#Gouh>jSKD_KE_GdzfPP|i*3 zjniUKca_gvNy>NACN|CYx>0Dp^|T`~d&<^88lT(Z$I}?1;U`T>86uIXi4OMPc=1VIhp3vFg8NEPCHt}JK+CXRWyP&JYmK+)+DU; zZWB(2Lqo3KJw#W64Pm40CwFc@UgJWqh}m2G{wucH*47(P#JYY13l;vg3zq%AhAlK$ zeTfd=l$BWawNiHT!A9A_nYNmcie$s(_U|=jeYhs2pWZHm@sPaAH4+b(1^SE*`?C-n z*c$H_=IH{qF22;U!chMK=utdn3tL-wHw8J>5<8IV1~x;WyYSd zkOt+MbsV}L`^BrQPa+2csMIXD!`NLXqAN%H2Gq2hQLFPLKCi@Nb6zC=>16(z>*LDF z5%F3Z@O^r(WVSpDSQ$cG^E?xDe}WC(;e!|C3$OT7w->=;@L$=FB1RL;BD3Co-$C<3 zo>)Fn^@L$t-vB1DVYel7`f&8oB-cJgpklv2tA*Ih&fu@TqSmYWjsocy+0N6*norGHC>~6Hye^pDt`VCR_Zy*);jEDPWmVVzgaBIDoRXJSnPyolg5sg@|HNVQ`(V!E zwpXV67oU}w~h@h`>1q@D638Pb{V%VKW$L7)6^padFkoU@k02w(g5}-Z%mE5DjF6+1cvUz zaoY?Jzu4_p%Nff~2^?s*u;*mJkm*g3Fb~3fr3(im6 zAL#y*R1JkbMY>(=GuEUVYx6_dx>SQ}jVV_;plDsP;Fo4>r>MP8nC+x1A|yll@#fPcL_vpxs=!wy){qL#fsY&p3BRPA{Gp5nI#PewZ>gi3;Zf)D2R|lv5nvK*(FpVg1FmY3Godk+?i^CE z4-FChA$j%L{?4%*$T=fs_*hymPt&FawpjaQrQv@skVNd80-YdnkYAFI-E?Hp!GP8| zvLO*3-`!b9k*-gluTqf%=j@o|_S4NMDK=K^%Z{EkS83^BD@YBB@v`u9!6k=wmp56G ziaz{9YnRpR$aDBQ3ET-VwMw$8KXTXZ%CHe%v(=2|f>f7_4+`6xer&RjNkKQI3Ob$EipBL&;jDOU^h0lE=aURtM|iR3 zvO=sxK{w5?g(SA%IEmNU&%Rx-pK3-Xzus_Oj~^E#yU)XKvhn5~H~qYe(APiv?{#R_ zZ1QrMjv*V&c(V5uzw%Gcr^_`zwCzgI zpcRnc&qxK*O2Y!SA`nzOr7dMTs^O_@-Vd?P zN9!@8_Prr!}t85Y`xK(jDK0sY?o^w(W7ZHH6 z5xFoi!*zs3qlb~)H?RfQBts9>lP!QBMQgf&mQ`&0A-AvvdZv$N9Mi`JPNeLPysK?2 zp#M8}VqfgebOR=KcqY}|PXAZCMH=#EuoDL?Ny~?_Ctv}k zL`(Yt3|w}N3S{E{#c^z7$!bu1e!3V@QuW*zlwNZ+v6?M#YmCFoZXUi=xoaimaWfO` z-NA{JHq~9QjThm9?w^p3f97>tvK{;@6DqVzE1UFr3%%656%B-S`@8lmappA-GJqsB zry$>)zCQ7W%HakT$jN7pT@~D{aDo$Z&a9|+$iig`!{?8kU|8Wq<{xh*icpn%g?X4- z0H>~S&Sc1$X-(F`dES|D^th=J8U=!#ghW=kz2K8af%6_^j?mTKt$6uuwbF?pqh^~H zG{FVa?v}c6PgyX3%WW|XHEf-tPoNgvcstcLP7|4A{Pg0 z@I7>l6y3L@WD^%pDv}hc@$NZPV{n|cFtb}a(O^6AUgWN-Dpagwgb#g8FhfjEoi!;S zS-If4ak%n-`s>q7{JnDN)q7ogh}&}#c!xp`Pi;m=03Pk8-RYN5uD0-bvd?=YyspyJ z++fa@u71b{);uli_L=c>;NtJ{nS?6D%c((Bna>BhB6}>`EUWYd8!KH88BQsZGNRL5$+dozE0b`zdV zjcz2aVrgjb?Vw^gLuY6ym~-CFK!E|AhlAvOKI2qTL26v2i^)h~Zryj8zII_*>9_+dNm&G>)_eV^KFrXTsv|{<2G#Rg>9171%bw`TcHx` zsJ1Dlok@0=6jFPu@l9r1!)>6e74cw5tb;0aGw-EGbKUR4{RTU3dy<*o&!0mCY5s9s zdHUs^9;VkQO4;p<$BFlhg414^xM0eHnKDD20^F*Gvvd_CoGJ&;meFWV$>O+ECMuV} zAV6o+B}WU9l-6V5aGR9jV-bd#`ChJdKxZhl`w~BazF6e8OwSYY(`IbssGl{oTs7@K z!_(9z_%cEQT`~n=;Cxv!d5z4XgaapJmh@?J5kwS04Duu3#2*x*fx)R)M*v&kYjVF!?!C z>Wy8<3_%?;Wc#o%HbN0h|h9_8t&A7^ZD7cB&Q4LZBZYtJbb&;d1)N&oQs98 zH9MP7qRZ^Q3sH|RKmcQUZcP&#kwbSvnZVL~PJSPuYckBkJko^*8)}NCYJqy-=~l?1 zgI(ZaU=JI~Z%o8XhcvjZR&fW)X`W8-L5vBGF&`^Z+QE5(Y5p*Bpny^?UhC=mMkK>x z6U^OZ&|>B8Nj|MVHkl63!hXy+!C8z^{o3PpPBE@qy;36XZk&(rcA&HmTMaI^Xv6QD z-PS?FHMw5t*)@4L|0quj1M6uNY?hps@KJZIDc?1y1W0g5WKwJ!ES8|9*gNGV*2h?U zw$?A&MtK*$vhyz`JyiiA?=Ug0f`jVT{nCyN`{OZ?2++(>Sk8>2r&RXa{;v8b9stdLV zQ_|+4CG*Kpm;x}(*JE&evN!^!Qq8h~6JHoE#2sVs89soo$L38b?sCWMLoX^-Rj{XbwyIif{#T%{s2=yb{U49y{mTiq8AB#>h zn=Y&OI!((RQ71{oa6SG^J_3<=AfKp@6U-5YqlC{JES{cb3}H*ihwv_N^e2eT1vOXi z;+Npz)F<9|w|9{u91q<216wvtD%iXGU#8aFqrxaI?!^BA4FnGU28)de37Z#czOQT# zpgoQFPr)5Xh(0`ld%5fvosT2+oHtdv&fIruW+z>!gfWf^Cews}>s#*W(6>XrN$&K4 z06dm~a>=~g^xYud5X{ZFOFLeKFK8@hca9r$bZ*&hp_55@Fm4VPw-zHT(-?E>ZjpO* z+rRHjd`{gXpup0TCiFI=&mg~B%jOGoJmA@c*6CC#VbZo!PG!)8V5$|v5BS)1i_^sryGhPh17zj@PXg@?nNcJO7Y%>G55tYW22EWt$XW*2P@-U zb!+wt$biE{o<|r$(`ZQ(8x6)vyh(OXd`#hc+u<2@dFWf7rJl#- zw(Pp3jvdLX=SV_5QpwDz-J1$m`HgdHZ?I6}{#<@UtYKT z_7MW7$O`I#J$d4c5PZPHbpuOMQ5mdZHP=29Bgip~55wl13Ls**84?eqep=sXEilV` z_|~2V6u`a1YRCyB(E6r;l2?p8CyE2Ic^C+xpM8!0(AJUJiwn!^qk=>S{pmTxk=qDG z-{9?=B*wccMyc7pL=XW04WBy|aK$Qf@{s=Mf1p70mo8qn8& zg_W2V0bC*7WhV-DqOm|Z9<+BfOAW3NK1=zL?wHQX8I_nmpH%H|Cjq7(hdfx}Yh>Er z-FuiKfVmsZqpyux>vZqgXHX@cAq6r6Z=>Ez$O$93WKC>j0L}C1YF(y}H&<$;EwXBEysCjM>h+UyEIz zzRiX~15Hqf!9S&+B27bj;c8LYx`SJfdjS-@0d!A#v#54>&)yaiS+*-7@ZkRKwwT4a zL*|RWJ(8Bq($GYA&~R=l(aPY3!g($wxu+B|Zn38q8C)(<_nWYtW!bE{*}>vw=PVDh?L z&3NNF63yR5{tV`wmlM%Une9Wyp)aL9NP<-WTtK70n%qjy!wE0c9MWK6Di|R89$`Ym z+>1Y}*Rd)jCLCu58U6L7aLto{&^TQTFYgg*I^p{cHB{^1s8|C~wg#R)y;pbnYk_14 z!LZAZ-$cdQ?e{jp04|$qYxT2hNa%oe<9O*90N8-wfDY0xMK_zyK4)U|5zLh* zkG7V`@bHN%rw?03YLn4mkztT?_SO1?8*7lnl@e*HXU24XedNU&*YU5VE z9Nk+0YgSAwI4CN6(i+sGQGYp;Qm{Ccv8-aj;X(5*Yzyo9{g)f8s1IB!Ap{f<5(qb3 z6b@Kzuy&l6!}hFY`;)weLQ-cp)VSV9@AeRAsPx+ZP+Z%KW`$jtElO*@XfY*QcBalm z2qN8kB7-43=9K_bbO^jZ#al{z_>A3jh8wewj@vbXvn>^T-Lxc=hR5fyU8cOK*BmEf zJMt@o;1jdd_A*NE2+-Anq>U!Ts|~MtJlQ7{mvZNpE`sbbmAmH-Yax1wR~z!~(wQ z|HX<^7d};0A@s{llDy)G%J!->;+D#(Q@OWwD7eXS>_hvBDVO#gk=?g-4+i)a|1AJ4 z5gke3$K%*(?_5>_gWu(T&JN=NM5%?9L&%$r0~;iLk~ups@lJ%M&Wb~kcEm$D4^nbp zzj4BkzwV)+Pvb1Vm`4V_YXim^x1-^@ZScreBaiKKNw7-4w7{LcAl7Y5WDJ`J5DDY> zouD-wm-Zn^+8oOQ6TK)*7$E%Pw7)JMLyPQxQ6&1zIJ zFUycqr>*|#6n7{%<$x6QKz%oXenSYMJ>yB9_(V3+K*(0P6YU~F&lDCO=u5?MxB@?u^2^O>#M|&VQ8BZ@&h<-LaKaOM>JOC zCPUVG_@FqPcmqnyI?R*mDO)^Z@98l*;Ft zT$esxCnFh4FY)qtFQlZFG0NNrNd4?}cV>*YuyHQZ>p`z?Z<<-5G^j$-mEok+>gM5S zFiW1T#5X?9P9GN^yRwW8Cmin+iiO>9Ne*|kr(#P*2zH~wZsTRDblP5%S zIGc@(%*_XmA|ArS!F~D2IF56Qg;JR=SOa+bGSeexhrTC>H>+*>qNIe$70jAaJ~3SC zErvY&7l#e8w>}J)Rq}(fR|qTDm=-N^=ZJyhJ+u<5~2>5K6`OT z>ox#Mt2TJQ{r68XGD2SS8dg{fi8~o!vFwKtX|Ste5muFs0$o{@726K&PWmqWz?joV zHyfZm16gyZ*7alFjFHdbmM?=}?7dlhj0N6=x@9QlqLA&3>mo(#Y_=v8kTcXJj0T-0 zf1{tN5&_;SZA}T!DXTfuBEP^XO7oOV7ylSvRv&QVq=<8)OLl8lAkZpXWAOlgT=kP| zn}LELcV(T^R>}UfClI(0x0>lE!}h8#r+^Yd^y!?nD3M;~UZQp-HrFg`4!?cEW6-%j zv78b!9~!XHzPN=YT&nK~)q86}D74qV^Y#b@y`UT={421e7|j1d^$>lG6;*OqovbCOW|pq{4Z(2buxXq_3p-l!7#KL0HD2g z16XQZI!;T|>b-J3(^_f_#cg#rRzaW6k_EcmU%fG`2x z%c!4(!SM@0b80jAK$vRNKpZ6eRnLKD9k>vxR85-qiR8{T?kuaG-S^bw+f%$_(@T=v zXRBSYPFM!tX4+`{a}}}oYOWkkZ9J0{<0%;@iPpCZnLQV#b;of&4RvuU=baCGnRdlG zJE)aN*^NLDx42D6LI_^x5mLq{JfG3Rqz!-C{qrIYSn(|uQRNAGkMr8iEKHhX~( zIuAz2qfoNEHI?YxAUX<&;NBN^MaS;OgJM>Mnt*-dwmcZNvxz`*$+>1&55eMxXiKNT zhn5y3sd~Om(W0#6L;!f_9F_l9ZYfK&O0&oq|6#SrdcjW~*ktH_^ zR7g|Gw;llP%a)^Njq$6t`Mh2m!dkNY>Gre|08Ejjvwjt9Yxxu*>YUAEALdsah6L(aT=Hr&zM6( zE~9a&dt$n0r&~<e6_E% z|E7#HKYTOk09&1qD=Em-BM?Cb&_(`FqAwhG<|L4?NTfE$HV0%=o#lZzk7&j|r2qQC zs+#u^(k5UBrRS+IOm#8+g#3iVQSiA~3EyVjtEEpeLVDvDs#yJ?u>*NJQy|`tuVc&U z4Du87D6!c>QG9`|AuvlDIHz^hh5)>jBOI?BXCKpNB}EB^z$&szCaeR=xiW(aQ%>szg(tRPh)FXjXhaX%6+{kKY59`ejIUqlvG0wjA{;1+v0mm*Iu#- z$9*VC1dkU9V|H(Yzzktb&8E=NeSuH1wL>>-1WYXakaub59FFKNOMqFr#^=0@{8!!PeGN+sS*_36pQual^*P&!fMrIo-A)7;$W&WlEK!_I5*EWTwzEAR4Xi|jt1 zAPWPZm>Mqlbsu1u$FbU@3DvXa3jh!dfq6taQ4r$RFCQ6^LgW--s8W3uMnXX!fbva+ zqmOOnS#u2OH~Kd$NMh>j(||y*j#3q9TI5V#GM_5qk&+?yLKPf)@8NH<2Nbp9z@8A{ zZj?ZSAWDm4ecZY+K1+L^u?VEa>94}ok<-(jSSuCohQZ%%h?do`_gU_rne$;E!Uvrl zP=^02TK^{^4CgH)4p-P4PwpOek^hwFu!SpGKap|iup z0eTwZM|OyaT26(Ehe=M?$ymWSaEB^8{-~H4-0?CeykXu?`rHS~@xIGzx=rxpu`^Y)$Q={f~%r;loC zV>>iMJbE2UtF$bON_1qqXIfxR*a+Jp&BgZSsQerW*FzhGn8w)dwlZ5*-kdl}dTE!; z=U4x`3Q`3uC{JB)+x!V``#<-x_IA`SGes{G8zcJaRRzoTcH%8l|-Q|H{ASTf1iX#(xtdpcv&z zi+Qv}nJAWS zj;vsxC`t9=T+DmE?;ny}7(*YQN!Y5O?29skKt z%mr?ZmGJ-Twl%aE37VQ0w(V;S<7;3HeA6$jZ=SF4L;07TMteYZHTjILowPh|Jmn~G zz*Q@}7!Gf6oJA>Qht9duonC!L3}fQBJk~2keuGNDKrJs0Z|2C*sXbU+P_>NMp|PR@ z>~+$TD8=y5WJ|%~1gn1m=qG}jPrvBf&*#W|nv;Xg-Qcs(P;Jo}b$j$a=w4|ewsLWB zf-t2=y4whGcLHiR{Q>}bMJ&-+x*>|J7h&bTu6s3ZZNPGIuUfL|F)L|uvdM!WBQCm^ zZF&?t{4u?!z#CT+U`<@>Q8|q58P9#jH=cP?U^ z^y{$gg2eG_C!tJqU#%x}o=n&1gJerhNYpVoK z=0lQf5n?%yYn+*YF!^wAM%@e%zu$W@d8!Uj4J$bnfYlX)(2GK|JqR z(-{9PNlYC(587vnStjka^LvrW`A7#gPnSE=&bL>41i9(Pzxtr&f#_S_7xS$?=W@46 zmCwG3BnE2N9fAx1u7~-}n6Rn`v+Wp@mhXlwmkAH1TkSj&#T9mVb)wLULVo%Dw_VUW0Yixw#q***&^JRf!ZrMLguADV@}TI!!~riF%% zsd~kX3gFZ2MKLR#0rA*-*lIPyYYfu*iRGRL)mdxr!@gKM2vqyVH5{hTwN?41--L;x z-7mB0(CO?gi+iI{2>8n!h4z7F{mQ6Qse4}S0u_kS^Pg^2N0iH7hdKH-AKucNVYz z=@F`tQV+E*I@fK<9LJ++_c>&lC|C^wBFZ}cl5UnGzwIaNH1TxRXwHC3LQ5QOXWJ&& z;vmcIQTB7q3|N)ph9xeOi+o91UQL&d!E;}I9UiJ_AS`uKKn&&n*K=wsx z?z9+~y13InR(txcx$SNT;c#85$qHCg5k|+hy173Bm>Jz9m3i&+1*~97YmG-c{-=3mFC@z+d|{*vqpv*fa5oIb zAly1E+r&-XG|OpHME~+GnK+BAtZ!Bc#AM!dObq!sU@W4pJX883vg=Yo3^%>Gih2q+z4~#qgsf z?0oEY38wxBBfJ)`1Ht?%)ckP*s>K8~^N2o`3UkK8=yez7J#LEOhffTd7~SQ4g85Z9 z=O4x>p4{cAXaeI_Ny+Pgq-R%~jaBAu}&Kv~5A&@#ct}%-my=doV zmJcah+wnuNEq}&NQjxGP>rdVmTlxaPIf2+-ei1Oo&<@%PR^#ji(>e>#T7Z9r)U{s7 zwco>#qIHqUiyc zY#(ql=m5hi`KJy>UZ@hugQZ|0N#X>^NvHmEXGHuNT@H)vN=#9)((tP3lJR=(8kl{N zFZwv6hToB(kXcI65iUvoTI3S(MtMkNg+>`W7R5p@Al6;>7>XRc`*+Dx^3h6WL!4)y%Ly^y$lO_iNOKjR(HR0meGl-B2l6Z z%%tWQT=wOLiugW?b6~eD3p7K84}htbZqzu_UZ`7)qIx9Ni?|NSv{n)|SxR&*rS1-T zK!2xP)y@$LX|NZ5p)63VY}2A?`CQ)XYcfwPq%=ZYY}gH#aTG(>&Wma$aBaZ@~naiw;j=CgMA(jL#_$Nkd?#RMM=!eASaaMUqs9R zVLuD8IV4Z4=AxzzhSzO-hv*eCArwY((5e2FCaYT00qZzN(43R$VUlhaa%0*&Lm zUqhH#0m%Ruv3uA%lfT=#LeOEEqoBXsT-p(OUZ_#`3Hmj9DMVXz?v4c9ME2!0;ohB2 zh;Ii(oYi6n{oKZnP}nUfXw1A*+y$=7J$oia_WtcvpeNU*1Ku9T9%HBCe_QOJVey7J zdg(U=EirBB4Fj_u@aeco-7LeZ+&i=)f@TsyA8qWtue~@l)FQSeNZ{*2j&4F)mHz+p zw2`wmv_L};=d7oct)+r&fVnRWk9hUswW0mwc7d03#xh#`{@PLf6$21xd1)m;&91DaOid5JZPUo)nI9WS!Ob3&8eDk>6!fdC6Qew})>clE59|0EqL+H#`jQ zQ2@TFnC!Ub+VFyvmhQO|NIh4c=CRvDEF)T-&Eaw(Gteu0T26p4ci#NYitck{oUBESO>*BwcM zV-5ER2c#*&@YIx>(}1cDcf-f}4l%Wi{4iIHde1menOHi}=O6d)o-|n*7^2iR86*&s z^dpBgS{xzAU<<l~a&Xb-4O8xYxXS#^aL%TcOH z`?8=r`GK-WrnR1nI#cFWu%Ko!AyqtgK%s&e5V863?VPHQn_*>SK19#?n{A%8^*>|h zwawLSJJTS$e77M}$_9k-2Eg8C4T*Z`+$Rt z`8^L`kNjFzC4KauT6?2Zp<9&BlDOf%HPd-Tx4@f*XneSBYs)8ZNv*w~Vrp6YOv*Qo z>U?0;C~!!2VrS1F2xr>2uwH#)6ngJlRXaYMC@q)gS`PFB`LfANd2`Ch_Jl^z$yqkD#|(j%vq)Tz~|D@>zF zjul=7e9Y?1xL+eDP0WUb2%JvF!^rDw1EWzV7wBb$9uo&Q;Z5roiof7YJg(6b6Zx7? zw4-GqrX<+g&%n0C)#~v^A-vIO2%)r-%nGoF_FFbzs|Y0dBU+8{^$+i32#N$pJM&u4{hx%fL7?~-W3Mbo}d zRR%noK+ow*SleA=Uh&~KX~q^X@$^L-64LOeO_cMS-3Rs(yfaIV@?~s0flnjpHa40+ zpl>{0Rdp|hkO+u^xzh9}rA|E+Jm@&~&Tjw|6>PoL{Qor>`=t;>+FlU#I*0`@Fs8C+ zqJD7F-sG_qfPL&lvvq6_?BHb6q7jY)6t1aJzDeVj;Onzl{URo2(Zh;mI>XIl6MnN5Swc^HQXe|Lkvv zeM<|nw`3p5!B(@2o?(pD%`+d#OF$M%DY)Z7dxC0GfBCcIP{q1w>F*b7?=i zi0#bhJTqmC&M1r*bwDfc8I^q?j%oI-BYh&c9ivEHV!J<`j+we{@0V>( zLl~)n;kk>ny@Aa+fxK#=w_?<)+;6z-=Yj{fMf#qz@)6)P{?xeI$|fNv=MFBZi$Pd9 zG%^ow6bxYI%w^!U4UZU1xk{%%FR3AJFm(qO4r7Ssliu0a=KqtUIWW_+5it0}$Uz~U zVBfs;+kRP+Rz&@8`od^a-WZ7?CA_YQ$ZvRR09y*0G}NG)gT85a*D4A`9CcT+SeThO z+4isDMZ$JTs{HG6hNS{H>>_iBfwwFotPj{N7wUXXStw<6HtwE0gs!gdmfBp+X0=*c zdyxdRzYd7P z0^$#i#=ZuQv<=8>^CEi?q7X3-cEw@dye%i_`|sk z$#$KPhf_^KZm+PVVyC03^od{%)#75CH`jk+Z*BS9_&Dq0-XK%ZzpN3(XCF`Sp`wF$ z5|2~Qwkt*QbfkzB2MT~Y=pgGQhdES=^B3x@8_8FGIvx}gW=->}8IXa>PQz&CWBR|- z1?@X>L|HD&^;>&n6h(zf5vO0|2HZ4}?}1tgD*1jnVH)dnR8brScK=w9Xk&h@E$4Y8nWi3(Nk}e*v7cFgN+FVF`mY^#`GM7Vr~$Z4TbOTETtD zzWr}vYnvN1KToBdRGCp?AFr!btYf<^&A8qGKz;ia&ZkpmD#|mnv!WVOZ|$OT3ldC> zyqby-EM`*=hG!k~cQRw%{X$mFwavaunujQ-H=hTsN-seMB^GeZ)l!uuuc$#j_}XHZ zHY}S}9yD&uTmBVckSwQJtgb}($O-zalSnt^#jNSy{GDEg`4lB4W>m#}R2#=6cB%3$&C6#ec zhm_3Y21vI$sX2~af-AXj9o-AWO&vUMk-fRo>zeH%ja_;QvozPuOl*3?J(=mNdzj7? zHW@Wcb+*>B+(9nn#$kldF+U4h+J;eU-?PZhFhNUjX=%PEvY{D;6hfpVH#d$9^Qly( z&}P2Nu9^LG4UKCFUElEZSb(X(%@=|?(C6I`6e|Q_5R#|cAW{kjR&O6J`Ka(;)7O}@ zLUOazGi(ynre5X(2DmUkG6Bj-ErG7ev*aAzyg>CBDtiv!UT3)84J zN|lsFSC>N?a7g2ks(AXs?_K+5#^9lx@M|DJ`6*vvIaZAY$Eu@$w&JjgBzavRurP=5 zi(+F+)9s0z8Od^V?n1v%NkqlkBKmXIJh_oK;wfPHY(mhPG_H>Tr!u`~ zvO;Mxwdq83u<*P@Pe?N)=Q586^sh%1+Ut;(rzzulwGrrTmlp zGN{CMs5LK;T7^a?|Kp%HNV%%K+ar&nHppxv9rSfP@dnz_w#)m8W(nhi6HBjf`#u>mmCQQ*3S38#sBPBTR zC;xfN5(IFRH0R!sM_eLE*`140O7;TXa7?Nxm`q|1tkN-9ED4=Jpmp>@HVHwWuQ_T^p!SHuG%41qZPqfa-W|xuuS}-v-{w6iqLkZy9>| z`hS&oVTh(}Pr5udGEcxC%T-k{kH?!JmvLVjv2UF(FV#}`@wXKu+4-zs#dCeU>#MX^ zdq!Vg$Zgn7(Ofel{9_;Pu1EVSqSv-WUhrg_Y~wOi5>PBoYZ_kXyS;e>Ovk@8(G+kV z1|#$s03vEN zRa#6`d(NSs#hKXTA$q@FnTUauEgAANi~5sA{`-YkD2`ejpDKaotgA*Y{sT;bFu0wA|ql*^a(FMrX+3xfaB;L zQHc-$Q%Aqn<3Sxyecr$vC|3lS{-CRUvO*tyvK11lH>lA@&g2A@J+;-d@lr_Lec}A1 zQpJroF!q8#zgTjnbq31!0Cjpses0;%oC|?MIyRJ3qEYuCWow&oB>q8dDlAVHo}q!o z%sp3JcO{*<=eqbxk^0Bp!Yopyum+e9XLZ0&a`CuNl~|*F+`FNW&Jg>fjOZ<|YzN<` zY#^{D=f$#QB|ZP#Zk$#Lh>M}w@S^vIwORd}P;jv_nipl(_Fq7j1&vxxV2i;An9>do zm-$K;7ueC@?QyVOop}IVAB2IQIP0v1;832LY{sAKuG>@f5loo;Eu}xwL*qiyT+m-R zFD-N^W0XRk;APA|W3J^#%qORB18zvai;)I2dBZ>>csh+$hX(4Vcw^O#&hefgw73Wv zv(sm67|I$C^*2Tz(Qm<}_s83EGuAj2J9kV)@?+irmz>an5Gwc1w~q}|&}pvTpbsaU z^|^pmU&~-N)58V9R1_+R2UwV2U}UwXxAV+TOvvvHg!j0%bK)meE;d;Qz@aqjeYdOy zIfsHESeV96xXyy9dy;kVQp!8f_jDtpAkuXp(I_bkDMpze6 z-`fc`PH3D)tCE(X^%09GWxoXx74*6Cj+S5;0YxIsNoXyS%+9zWGi|nE(2UVKZ2;B5vHi-d3SIYIQX}JB6Uu;u z)gsc|qVWYIvw1c;?Zcui=c}zkRvxf}FGpco5c*k#L``mlPCkh4A3hhz)xZ%ol8$)z zOv_&o#g8|{P&Pfp)l&D7)l1H)ZUKO}mn}iyTjrVvFW7JM{2EEPd%MNNb<;||%9m)= zfG+s4dlDl2OiT&w!cN{HKz>kgd}}1m>O+3bk`pX9gZ0BIlaEnts5kQ=glP|omyoMJ z!lODUhNk3Aqgkt($NV!BjD+0(&!IWn9u82JyDlt}45O9&mXujhZ~_k^L&*u>J#wWd zD){Q-$Ku;TbEwyEb)$9{vc{rk@PR4j#yM2a?O&GwZWrd@#PcEi6v$-tbVj_s9^pcy)s@2y@0$d4T19BbKQO+wK^CH7W=O(fP$C9Z_blk=zT3?*kN z?89sNTqte;bg|{gMx48_LQit4QnJ#bd*1{&fUKL(@0$L}3_Ix&tYWPS$CN4k@NgJC z^09Y1+`5=nVn7xpn#CvCavOQn(g1?UFG|l^Kd+|fH6!E{=f^A{I}pIK;`68$WT%^o z&H)+hoRO_EiI+M+O|RCO!uiN{uJ@;w?cc!*vuKlJ@{90qtKX_(3`;r0MZFNj zQE049`2f#;7c#Vv>Dw&;%-kp)qawc?H4w5HcYZtx@b~5Y3}OjW!O;5B<|`z3#~+<< zXeb{cyz$PH|A&K8YHnaAfW+9t^yqEf3e1OvQA)u96i>a&c#x>Merv#aR>%k_`9g_{2E?>nJ?-3yuD zfMVAjjsErt&~h^g;>05P7Wt+BFSpxG>)YZD-xiD@fK8haMoj2ApK__~Zqs2Y$<~Qk z?bl!1dIIqf;C?Is{SuBd+G5wk431(w+F`{$q^_@`t+k=k3TgdEy=ownWT=G%VfPC3 zL73s}IkpgtxH<|_Th(Hc2sK`~6dJ={_5wm~DDkVf5zAAelf->`&>+Z0 z2|%Ctiw&xxM)H(f`IX-JI;b$mZh7QpyPHoL)pDECvroCK@CGC)2as)Jv;4F&5%&qX z?TOJTjIe0VfV(fPitK%ZB0v|qpbkBl1xQE$EncYt-j>$sjFm7E9pLy_RWf(FF)23FXaw0 z@0i%o{1q_tX{t4m#(JdsRg4` z04_W;&)%U3UD3BgTS18Dy$br;ct*&@NCnxY{r0H}CfWb7Nl3sY%;E4DLbEmmXV1@d zwUg^Afs#l?cqg~q_^IQ}*EU~V{F=##NYyUk{xaTSjZeCPo}~7|xUaG}B2AOz9ywyE z;=;Q?ZK`*5z=Es z@EfY+d9pP$*rW=p7i)CuPOAd)U^+tv{(HuMdo$cV@0JGAxGPU?)5=gbx5=Tc3O6_1 z*Q6TohXBhB6&P3)k!OflwngW%MTS|{uUT*gQnc=T2#-w+te4bVS+t6avKeBmWad+N z9af8Gz?5b>mo82Y&oh1}#3g`xmJUyCNi&Uf2RBB&~fi(@*}!-n{Es+?L*EL;y*=pbseL zeT=d2%l;_IMJJLS$qlDIST_l!IHGDgclwdKB>5x}LAa0CP$NAFx0WFq==lj~Gznd$vMjW9X9BCvvM%IE~c)dbjbc&#CM>lH<*72F0~#)?0NBqG)U z6?h!2nv+WxM0W^_gp$s743mn7T_cqSupkSyb`RU6(lwyqw&FQkv=e`9J=n|MxvkPx zVw|MGBKWf;S+dGsCjiSm6#B?#M|1*&Ud;$5t!>;Uik9sw=>JjfjlsytjRJ8~6r6?P zkj_QLp&+GEgZDoQEajD?@M&7mgS1xTZE=tUX0-^an^=2fQwwF%9# zxZxzL?4jwsqwpv)Fk=F7Ew#<1dVXSOwsT5-+?`=yHu-e8!$BZI&IExpW-|Uu&LJ8L z6)mtL@0~|G#|BB)j?xfJ7^nkv-mx7Hwt_t8yaA&koj(Y!?xgUyr(4q`SaA!7G{nqi z|D-dFB#lPx9JG8T!#E#ad4lM4Y78dw{qaT7#d4f52F)O@1^LUz92=t$&YdLO)DyL56dpD+b{%thoc?&Cvw^RuFQ_s6QWyd22I%z8Wu zBxle=5k~|{oyNED*rE%t5RP{|7&_ok12hw%&@;)(Ez6dN&Y069%jSsN@z~wU zhnC>6=Ejy+KTJA4-`>01wMq-91aQ~S66YT+vwyi~-}vcfc~wvMZ+WhbfA}7k(V2x= zJme8a<;Ba|5H>N$)kFmKXq<>r2S5bg;7{LZX9juE3xM%p{`O4=zXN}W5l7P@%rl$z z*jAhxe}A7BF7p=dH6+chJ4hut$j~04s&2U`>+G9EP?=q31Q|iWP7iM_&u2~ukUpI; z75uR9jSu>{$nK#58~`1gXYEZxT%{>o7E2v$6Q(O=4&a`TgtDHY=}#g}dX)^cI#^c% zb`+U(wK_km*+%hZ_&}yD&quf#sDqYN6Qsv-JF8ZCmH{aJXNP(>po^o{Fz3X2$(|PT z-<%gP*0H2)Zt!ffzo8Umk3;!)!P~fxm)|FwufIZkD9r1IXD}k;Gh37@aJP+o|G0c| zZ`uG*%9(+M=mVyZ1|zEf)odRfQ{`gnF?ha9nm}GEfgk%RswjPINHJXyxYop|-9ABa zOI%P{98!*fud@3D!QECT+KuMX9DI;~qcqAZ^O4}Uts4w@w%-wd*$yapUFUBzmDH;j<)@ond22mr-JJVKdpuS? zRCSj#B7!J_)mUnwpZyI)>BT0^n@aQn z{!gw|Ts1qra&BprcM;%PKv24`32N4n;soe8dTuEN4UAv|XhrXb`@;AtuFRZj>SMUw zDK>rF5zNm&($2RmjN%8=)(F}&HChQ@;*N!#Q_#icjRW_-K!q zf9z{>lLQE_O^x>x;JozcKhoB8gcUfWl5InQpXA|BBWh2GXngLcXCm74+@rKu9kJ1r zy#)8-hGc0QG8r5sSi_Yr#?p%wCngcLds@PYgQ28h7rnUl)<~jureFEc*8$vd#rpC} zIC{EZWL@G+4FV|E`*w!+?0w zVxPvEa3j^Nehe9d;(-M7U`wRp=W1tyO_({{YQ7voPPnOS zzTMz|HBo+{0K8-?Kb@AZ<#9DoyrG)%3^350sG$w8u*;kgi)7fXpUxD9@F-tp`1AkM zYKwRsBqqvhZFjwS>g>4d`9>Dl9#V0u4knW0iFH<(Ar}QIO~PFyM>I?Y1fiS7fe-{q zy8)aIkgoj|kI0rCA*P{2S|-=j2N)c$A8Rw7uog2R-kE^-nr;+8#Ot5htexQY_9Sk& z-U9(Tj4X))tx8Wz4s$8XDgGXSQMYaq4}nyY2Y`!S4O$or6fxBC3x%H92&P=tz_DSz z`7hy(2wo2_K5a)dRlvexw8GvNpb6Yt->}3`mg8*-j_Zsi72e~jy|Sz+f?jZzj%FSK z<7@44!R7x+iop4!pI+(47x+*nZuq*udwP)bEHpdA0c-aLjXxCCVdiK@9t0&=bkKxf z*2q**p~f=F8SKH$pLEbUC%o{9+wlD4lyJF1>GGl zrHAJlO48hGLQq4i04;;5EjjmbUqOH>gp&(|smED_lbuwkj3`8sUz zEc*rPo2T!BX=>mP(?f0>1b4u;)|Bp~O9XJcG9L}orO48X73b)L#GBVlYW1;gU00D% z&uFIio*NM20cUOe?TK|iZUEVp#r$*bAM5i#?Dwr9rl!s-c?Piw&& zi5mM6OY9b;2Z4My>2Os{$T^#J2P^!eG@W`dMR=3<3-d3%zR3;ZVG)T4{=YG(5mhGm zWhzEt3QptsL$#yaU-5=D8(Q){&OVRGZzJdmp=Ljg#lK=@}OEJ6@RPS zY-r)C<40D;+HBgXJ#18}x?j;@5oZUWY{quwWgM~ml@I|#Lw$&yu>_axWJr<#1sEQx z*aKiT9TJk7jUx_Y7nPNEj`sG*ay=gE%8gWbw=BuXVu*KXXc@fEz8Pi_OMLBWHYW?~W)K-+_lI?b| zO>Tys^t1tWaTEK_&-7<;k4G`>zpDCR4E}Hj%xdvvwJxO1vJG3+WQ-=vz224$HxTLg zJozP$T-?wdd5#MF?&~-pBN`g73>mh?Wtu<87EvnD*hFX8a{|(oWM0q$(L`dXaFyy+ zNI8`_dLr22(H_7S#kp+Ut6g!E?BYLHSE_g^$lLxD3p&2z^~a~<$tBdHXa}WOgdFIn zzH6A^nlA`H3A)pN&@|5aOu*dxl97Sh7C&E(&|7-=2S@uqb?=$Od~mBi6Em>>M>C#N z>O_u5KVb5fNe^r?>4;Bbf|E^n^K7tI0wN=c4qj(Wncu+~89bF0hVV_3(-eEEDnB!u z56F)GlYgYWX@H+)o@HS5c{CskEpc$0FB)FNb`Hz2bvjo2o;5THG(z1fcJ9>>Hoy4G z%{(_%ve>`(ezNiU`HTpomQAgW%&WNc4C#19_vO(AA!ob6hRj1gp=w_2+tbn_GE^Uj zpn^z}qj>t*-|qPOeJ6M$?LQs1X0F0YH35TiN@s+vuTpO?p`{4TCf>S-z{FQR@`%0V zT-jtf`1}o@qde7o3y&Umx#CVMGO3`$V>-NNhiL>UE|#*da|IPYk|=sSixh-qcB_&Q z`H4I(4hqrB<^#V%M2>!GPM?cMxEd@V{(Pef_#@}B-ZuFTh?S`{?iZn($dAyRkFBY5%~pDu2*A0j$>9V41mxzT*l)G<@* zF0dregx%&KE6YFg2e8Pq9eqYuzXhAM;Casp+AyGcdR#!c!k|i{c2)rUOYu!av*jmV z=qm|D;X5QY0dJy;Zg>z=F^+x(Dhh@Lh*`_ty>5ex|6pqP=q3C+_CbeFuO^K@ex32S zSWU~^|Hiv)985W01t$SG`o+likG!XMA#I{!N0Npd)$A9H3{0^FT1Ct-@{hT`=71Ik zuDP`o`cV95BYVBvO5V%Toe?XEUefzUzeK{!&a8yAQPnkN(xy0j(LU}L=3jSJF0@YY zp7hDTX+-;7^C3J|iqzT&%;68mUd}k{sqQ}-*@voo2%n|YgHDFX%42Kh`sblY6uM}1d!O)NEYG2R*2NZN_jKJ(H&97P04ag;g*6H> zFB0Q#|6v+zf95HjBq*_;=j2tx)&7fvi|~SjFLa2w8Q4K;9m-UTRv40eUv!ZMY$JXQ_0~ z&26OldYekTEN$_xl!}NsBCWbY=)QJ#053q$zxD`%*ur3y%DE%#$(NhMw8-K=d4f-8 zqgbf|fKvnfDt`}7e8l(t7R|h&iaOrwELaU-zVkb#+#7b}v8wJi@U|Gs(Ex~jLnzR> z?h5+2Ga%-$Rrm*GKyB?EO{%o3GYb2P+~6wOnwN6}YcAOBK({HxZ(=xHj_-+kqjlT)QLuIANyED!g|xfpr9@FXjiR0Pe-&ytX+$GgLhX z>gEg<{*Hs03*Z&%d`60ZiiHg=`-@Rj<;-|*Jz)Y^xrym-)pU636wbJRH7DheG#zbR ztBqR|r^I3j|0X#8T|Z&dtT_1QO^MaM=;Sn`GC*d2AU8ETyP}rP-Ib0|VJW^)Lb&D)@HGKO&Z}eL~dtb-7l$lhPray@TN%;Bm zK13gzBx7ptzHbsV?iy$q0>XXE%d9#?ocSVEbS1P1OpV-S@@CI8$y>+NAjLGd?kqwA*_y1WZt^HRiRL+{cDc^J6Iq8r7xh|m{PuC zNtNgKS<}i7IMhVqvJImp-xrlPYqD*r)^_m%O<4BfTkdquI{xN!@=Mq z^#XD)VGW2zqm0%B>f8h4ZMv~<*kt9;U%;nTFBK3SXI{z3E532DAEYeW&>ZN+3QR-W zi-a|hZf_x^Tqg*&eR5#5K%_9fPK^-%&m7WYo0&m8h2Z+axT2@>-GYOG<~^#f0CM>R zGjF6IK3$In}Gg0bA0p zMqrR;L92#9p5V10>m3Y z<~c{bf2uUEA@|@4ZYUzpBX0VwwamVmDuHkFN#nXp`MSD*fivn)b?H1;73D4sgygTY z+=c}dT$4o4v5aHuGpX-34A-o4U-PiBMT)s^JI+7^QecUtIp(1&BbJ*BI!owGTq2^F<9Qa>EMtO|)j|L#XhVR*0tKMqe*C)p)gfp#0jf%Z82WO0 zs8BM#uZ(DRzdDfDM;Cav4OE5w|59V-we;_4@JdqhL;E;$oZWCM|FDdeWGDD{ck>nL z1PW)LI4;2_REMM8AzFdJao7;ftD-W#oIdGLe4H~0ep{;z6b zz;SG=7%(yz1Cinuy0PzM6k-^ZKlcG^Y=p z(c0LkwZ~M1&nL~2pLih&AWxC0Yw;)#q(f)xp_4E(phl)M>pAo(^)TAbdwF7aNd>~}St(t&6b_mnb1NlmL6%C$6IQNlJ zx*#^uk7}PJJHAo?S}NeqBW~b!FF9eB=CxWyh8I2m2D%^I>tU?frCGU!j-&Q2abBCt zO!g?>l1v@Jl(XnG%vMYZ4w>eHKIa3f+=Bh$bXdMm~A4HtE#B`DwVu@ z#uIJiaaS~-UcOK0ze8!A{NQybTPXTMGBiT?XH~;ujzPX_V#6=SK@Sz`UzpC_Z#A7G zG&V9Ul1mbIGz~)=2=7_zhXE0Enrg;4%>e4}a=raK1+N{30}#TS1)SodyHv z2Dn@8lQK@rI~a)=Un22bz3uhHsB}Q#*V_ku?{`(meN4epB9okObRH3@a*)TpY_QxJ zG@5l9?=CBf=sfl!DRg1`!ePepMB>@tX=Az1NXMu6Ip74qGy?6dw-acC%<)}2(HL*3 zv_IHf7+cIVOo8rI^JNl0q2Mal^AOdbmuEWDyBCQH##Bd$*rnh8#8 zGQLd+z?JLb9ldPpfzK9-wsf;<49EksBwTWl5KN7tFq>x-#=m{xARBCMF)0HfreyvB z7Z>mXEY3)X7JoCrqJ7H&3Pf4r(=u#IbOxH;i_)=wdGuu(l3biPC|M(#jSZOL;D9qZ zyoI5fVQ$#G(z>cr>2%dE6Od?#`(>(Tz>YLmoIBCx&N_)3+l2v95T7T0b5JY_{x0NX z`ePPVr(A5T^}epnsAd2EMYc_Z)Yf*VS{1izY;Qliww9zj28x>pjvkIkpf^3)wr z-fdPs%PuDxi<3o9T7SnrqK>!OQD}Fo;f#xvs*4`iqbY@IZnD)APe?{9%O;!vE-l$r z*i*e|kO&PHibi08q%oU|U5#7tB1>XMnz52_LA!;)1Xc&mc9OCq1QtpUQyz02+d;uo zo3q}C?W_;Vx2i4(IhD?CljbYOQ~%R3!)03nAvLD|gI}BkHXB?djc-n<&~*iMfQIW; zS}XR{4wO3C9UiOW=QBK;jC_QLIiRZ8iXPFro+|SBbo8Y6g~AmC*j&DZsny$m{c+(r z<{&AISyiXNO~`OL!$c^+3S))V*=$Z{Ci`UV@Sl7|)=VWP8UIf>{nkF-q(%{8cY~Y~ zC&x7AZ-RWYe!^jzdVb`P6=+2UECyEvrU@lmVPz|nrNxfuk}9{H|Hejy6ylzB23jnt znXt#v(E44yLs=zvfCtlh*&_FyM^|fQa&H2vrm#nkS724*cr>RsqP%BO14PNl6Aj%j z*tTNh?Z1tUwD2f(p|)=>!nVy2ax}01C6S3fGsN-H=LGOu>Uu+eqDtBC`lnO#hrR-L zq^_pbkB3o^9M>U%OniN1j^Yo>R?+L7{TL6?-eBRJ{(P%fKgKuTvgMUD;fe(FwZ^h# zES9(soa6%KWmVtfjqQtS-sxXx{ci0$f0%`_hF2+b`g%$j4nmaSjztA((ONL&$JdMS z2dnf6U_KJ-UUHH>&?Vb8RSAz#J3o^)Ts^rE#3-2X?w`5f;Z)etsb58KUWE7Qjl4sG zI!QmzSKK05u3y^>y^GcKw&O))%?=7aXH)GFx`rdni(Aa^#o(yAodqi4$Uj!9QlcA& zjpCFH*uA!C;rql}PP#aIg|WGb0;p>1i5ltG7(j@byt6_#rYX<2@o%JFV}Jil_j`34 zRMF&VkGL*#k}vC0CEr)5)ru=xO;|iNE)XRtk@6S5%@2gdchcT}wHrP2O<7Zb!LAJ7 zrZWCN=U=&1L1>VxVHpWa_kMGr?nII# zTI$v@i(?;pbS{9SRkd$nKd~6A&Eun4@1(?`$Mn&7fTDiuEp4bT42*e3osWZQ6H9i0 z11TSUeC_8LP)&M^3YXoB1LFBK3yd^LCIP&5+wNpiYjjIZ} z=Wt7gvgy;&6Ok%?`Nr7mih#c*IALIo@NIk5V?s|wAE)y%^{<76e^@8!%hwBgi=1s7 zKogR11mh|)lDvi+{7#41pu&OGNqQP==2|o>T9n-_d*AHbPfZN$WTn-!2EWd~l7t(r zJPR{fyV;p+SJJmDfg<#lbcb}h*46X24NVKfQ3|oe!>|9s&*}3RfthQeH68Ze6ezyc z9^xL3OE4zA5+S55K?BQX_vYb_j{>bC>E;@(`IvVSO=9T984BV;aG$IiU1>JVNFBcx zG;hH|^6$I`Tjzhykw70Y!6O8Fgw+?2=UA4?LV8{A89*SV{=K{47v#bAub z2&j4 zRb5qBq2hwNNxl4vZVv$#Cn7qIpbfFID_#2s$jt&ulxB)@X9kYNkiFEdi%6S;ebYFA z2(mPmgGN#d7-1!B5r%i9TS!{0CZwtiIz0XXyd_{2bM>hzOToj+;n>^S(9U>MSVE#w zhT4AEHYHsYMCP^P-gxaj;8mdjWQ=c@3Dzf3fCvER*JsxBWlxB6qW#w=BL>SPj`bbI ze&^J3UGk=>sJAC!+0Nl#MH$4ORWf9CncLB*H9P~k1&e1GslCYH9Ug>Um*xhY8%{KG zbX10I{xVsR6s!YRwD7Wg`S>iLB_XWq)0V%91z zWBFUG2liY58xo3dPdymiAeUmHho4dq&zrJ&^a*^Q&BzAdITB^SHmn$zo(w~+cs_<< zi-_8F$ydr)R_KISJWH>zmPc=C5>k}T*vQ6uD&J2*jbVzZ;5LrHgnVkuXd2U$eqH(^ z?oOOwgBwQJA=dcr&k{PEtEf&5m$^YTPYCmq#H>}CHTtaX5*0%IW1|2iZb7~|2|1%a zmPA}#%O~hK58g|CK`Gv2k9pW$%ku)Drrq zYgitU)X~D{G&t%28RVY-xz}0kghI=WaH<_W$=B*}H-Fem=-jJ>58JMucD+KYK}vM!-3xN;_$ZsL;*#Sz zC%SSL*@H35NbH2+X*74q0=Jkw5|Yi9$L!o4a6;zih$mu9*oD0EyuYMKvkM*yN?QSaI{Y~S0Y?bF@r<1^%@AL_JffqH6V26g8VA@P7$ZaX#~EeTDCf+} zq6q-IIcjKg=w5*=HMfb25zi&EinYwX^@j&a??44)=KEC0o*+9!Mog*mDP4{<_v~vU zoS9s3FUNl9D;>Qp^c`zEEa-#J2i;9!y|_RlXDn^hsy5#ZtEH;gP4ssopPqUo1RQ}n zOk}NTTin#;j{C8a4^*w(PfeMVfqlj;;{#HAHTu(f_kJ<~Y3Go*6=TXrs^c8pLs^ z34G+$o1ZO?4;N*J&@*S(04&E7lp1r%m_YQBs=YkTJ<3NFHDbz#Yb%Fq!}>S=^@f;;hI4+6+o-J*K|AMaTr)A>i9(xBHh@m4K4i(PJi`Q zTjM$1-BA<%?ql9yNntjULkE(xR_|?n<8CclrAz#{N(PNq)#Dg3!e!6Ej5y#hu7i&A}pXSj)JGh?tIFSPVpe*U@HEmyCGHA>W-KmILusXNYw8b2&J52r>l z=M!r(UCeQH1aN@##$cqFR5x|zBawRS38Z&vzQG%b`M?7a)HvRkUCjz;mD$lR&%W6K z=ds+@2-Yq@Yb!=ekAd{Ssazrz7=y4;i7_{L@SKG0`LkaE>DtM%sUEz%6OchH#lFDA zp}pc=Gk>*b9Cy7<{slC#AydMwXAd~`@VKA`jEN3=KlxHkoFWw<=^rf z;JK;2E?Ii&K=}~Kabbkd?xZl2zDVZvB@V2}6BsSD{j&g1`>1;jq_m23!F z?H5#ynT;Yx%V9$&vs;x)(7jh7l%uC)+mOFgaVqRDJ{lwXGQvA!G#{rs*3JlS&p(l2 zPH2Ao^tVjT4f7-95Xr6{GXoFRyH-}dLg0rvUy_p+)j*)ROrR?N9F7c_t;Cx<)i{`< z5zCsl%w{e~WPZx|*cQTC_WoFcSjh2GJPQiuGJ+&Hvq%zQlRKE$({V||hlKdK`6ut8 ziAvp?Wc39Ag^H&zN;5jswV#QQ<-kr8#M`Aqb1wqbii{AR5Q{#mmB4|t1xIwPYHARm zsxqPfzW@vox?SL}8`U#S+bf=w;N=c86_jh)sioUEP1(EAqY*9Lx%$rTXFghCAyD#e z-(Po#!E-2SV$(4sPO8+?@(MXd#!zxl-O^!#=bimjZ^Og`?j%mUfAHwGa())IQ(s4D6G3=k?n_vU+Amo=FY$C|u zZbTKj!wk8B{=2&{Vm9S_NU&v1yk4r0^Nvlf=axTC|GGLD*+1j}uz@W~o=ySmjYb|5<1b&omtY z`#G5tQ3F}c!m4aqaIt9ACaSI)9=~DPu`79j7UJle{J?erYP*UDy=iRME4FZxQ$oH} zLL`u{RXqxFL?$lYH|r7;{**r=O~gBw`wuv>2yKcg}xFZecSrS@`2{R(ez7RuA||9y0e?pxKCb!4s=Mm_>d_@lt&4{91dG!P-yi>7XeEYbWmQJ*vk4Qvu-5nmKt)q z6?0b+ZGsib{;+=0nh~#6>>1Vt96gnge<~Sm0SG-yDTC&|hCIWeo|?Bdc!5z>JN+Ht zZWeEvG`AEJFG&R@CnOk^)nlgOLX-U&#iMi10^T6{uc7j@diyl?xHP?7l4pSghNu=6 z$KIH$b=;~Cq>*GW4$5mt3(EBsmdZN8%M&)|qtT!|mLmEYr*4UND$ui^@jFP);8yB*pq=_wvkE0EJj2t9J$y`xOQD}`FLfM$MV92grX*AT{ zl0L0uy{xw?0_wP$Z$PTm!HRNg5O+H*4-K^UT(sG-+Ld6SL9b?uwAjZF%9r<<^n%dv zG06Da)}pIsbF$hU08o<=RM0NoT4DCk?Ef;R$vI#J!d}PI5gXV zR3?2MO;B7Hf2gdQ7?@l(3*Z;GbI49&AI`Sa?J3-lZT&tqG^_V7AjQz1so}t6^{eMx zMT1Qz_W~Un)@hAhO;zP6lRN53l4&0xbi??DI5g~@6_ch3fAg4J@YU;=+CjA=nB*i~ zmh!TmVW27<8X_OZk2m-m>D051D`?tZzbDfbRQ6a0{G$ckL?sJ4 z;^yC@)O1y69p5SWByXexH8CEk#7KdrG8ib;S|Qm>%YyuI$gu=nyV*6xzz3L(z%7;G zg?a_*cq9v++P-z(^pYXdqW^^HreV`#Mb^8dD?&K4oD!=1VDR}o6;%D-lgr-TsiCO+TyB#{MS*}z&x>;!)R1fT-1yKo z2>ZGL&8^MRTY4bCalAr9{nu|WT*h+ynByuH6+$P$Ee-(eJ-&BA?01!G(g zURO|c&v~b3vUXPWA5~*N_QfNb4fvyH{Tc^em`fm#tW#+k@R>#5(&w(aCGviQ@WKaGG!)cQ3sp07(GPF#Z_m`fZ& z)kEE#&1GJW`tiwn#0WR39jjx@D3d>*LuS4kJ}6IFbjd~E@SzJ3>Depmj*+r*FuTp5 zd{&G+q=j27cWy$YnnN?W8Pw0sC%bLARLi)UrN*sTrn!z?Q~@a5OuGk!-->jSxJKK< z8o74J!>Z!;Ykq;TT>IuH0X(u3?G~c_5#UfaJeOF`kJv+_ErR< z?J-L(-rL=YF4a{dU1@mL9~1sIiK;FCIT`&1Sa5SF!qUT8ARQgMs7T#-k8L&Uc_?hQx2#wU`E?57PQQ}w-DRCu+2OPBwLSY` zk+%ZboheEa8ld_dV<}c@(+TZZVMlp2HmMqLgTSLHAA;HO-cbj7d3pjQYL+QgEzd?K zU=rDIQ@Z3dcaXt(T0)!U_2Ee|GfQHWIkM{($`aZWa_l<{-ci8pb_ULvjO)kJFG?4#!et2D)=oe;`vq|Tk!n{%Lu1tt`hmDFwL>ZT-%*~DIXc8a_Mx%EaAxsBFE{rE8QFB1mv+|Uo`H%_!l*hbJ0%`@c9w4^ z$zGN1r2A-LeBs^~n7rN(7H_dc=Gi59!NsTB^g9!aQb6F^?p z)|(KH4$&KE9L&`HApquIl62J68ad#Fo2Wp`vzJxVWRI`h!2RcG7t0L}w zcF!6_!A6qR(%UXI|0A5?LZ@80@FAhEQw}*qq4*e(VKs2zr_ITAnb?%RDH@I?!c(yn zrvJd>#FrPsXgprR`VQj(U zbLX^zGaWLR@vb)1V{=b90jb@u2k15T2>7z%Le36<+FK4%q``#qrsf%|lI+F|uT8SI zh0BrvN{~!O=$D4U&_p$6Bm-&&fEOZLXts`SsJ}p$Ysc5lf7F`L#9o?u+(^bY=8OmZicQp;$seKu56#tfy z6*vu!n8f_7$TZR$)~?{SLH>RTy4sWl*uG&(eyOvaKicG*lz|Iqlfx34$iW}`2C9y4(CO^y+fOa$D8h8Pqk=D+_+&1Y!cft z+eWP%Bbg=Q)pzzu+FDxDwTY#3wR)B%9*S4Alx*A8$tPIpU?qv^P5~q6nR7WZBUAdl zYYLdhPqMLHKMY1hRVrSlTcB+wE+UPVtAq?@yk?_s)9f+!a@wf>Q-*4uWYSO;S|F1w zPo=J3oB>?1O=-QMO>lOjUm!MZkzIDnKIP_1RiMLxf!RDQYGyBVO~Py0;2$p|kUW+3 zSrc8jIfe-|@Y?n6QPSBpK2t{+89;*)x-%}Arw{qu}!H(3CL z%jl`Q#L|N2l%H?4^UQ8@QtTTNaCH$Os&nf`5#^vr!k^VY`3iqt z|DoHSQm-1!&H<49$Q_XA1aWi}_v&9|i|{M3rAu_K!1pWIH|MN>J4ps0-c>o~=3!6M zG2#2X>!4AI_RC?AHNa)9S1!eGNhdUYELWqjM>d-QAe$}7ds?iQ4>hp&+qVH&@~z>+ z8uBD1b`M}MjmPg-mU!$zf48_-aRI5A!H>`>A%CH7m3nlcYu)U7kv^^o3D%qzgB(`N z)0g^A9H>*XxI5%}&FF*E@|PhVn2&F~dt74x%c{}8ViuUi1xpD9B)Fd5nujN-DrC;7 zV;9=2Q0;0?B$`@PbD*J1eUxeWOiE~>H|tuGD2;2n-jrj{S)oKLluSHsL`N1dnFmSbV}u z{iBj=c5XOZzkT^z6GurzSS1|*09^n80RR91Z~g!OqqqM@K1daEIbl(_k|^e*h6nlX zJSs2B2isEMiYQWxfNo3;N{|Y3l zfM4PIe1~ylCx1srxLbFeXJx6c&Fs6>XDIIyXhggfrNTyidgj_^#CGWjgmSh8$hWEe zS6+D6-bk%=p_UwyUd}r|i|f3-7YlTXg@UUuQMhOVu8+r&O)a?O3jFP~ha2sVQl{;0 zR0fnCBAf8z%Jw%6H7w?o-}^=lbIbM)3s?S-De6*?b@6zlfrC&3x6%64ZQdU%Aa3VC z2KCC6VGUv6b5TLj^K!Yex!i}(Z642u6iXTE(UN5x<7AGZ`vla9Y}J1?v+)7-XY)Mn>I@|iLp)vDPB-!klE^OdQpt| z=_=~TWMR_IbFVQNb+;}XA<>ZPwStB~wmU$9iiy9dr1x|sQ#c-0_*#JM!q-XgP<}TJ zcgKFaw^-`(g>L`CYk}A)XrWOzp&xQmo>lRr*$8Ak{Qc|t8Jj=QP-S}1zEG$fbm;{6V zd89c^z3z43X%CqgV|m7d&|~fAZviadyWMIpFx;(t_xqMmA6b7d$hzA?hl|A3NULw* z$^=OrzN^hsev=cNNID-2fv_M2yZ_ktr>lS!M_#=e4N#q9_MI zFSANPP0g`OH~BpGSITVeF8chc@$4|Svwo!|U(4+86kis1(00oR>VX8_ZR@7uI$%0~i=Sd&_slD< zmzPdm>}O9J0C=wOYq>dK?M|zDD(*3)DWlL1(f_d8et^3$-GI&WdLh+>0m!6B=|tkh z^i|+<<81wu00y5Z_m8NT<)tWiNr`wCc;e%Z|4(+7Zyf`4hYVyasz!NP*x1bb6P&Uw zFjIW%$HaROZFB{TXk+b{6@x66r3*&aN>|=TFd8!+uCa@zl@d}qoQ%PI%W%ybI2n@y zxqY0-c;NF=$+Od>+P0yogks{xAtTGqE9OBs*1%Sr93#p0K5Xx*vRIYv;(+50a%#ec zX@>Kf2_$fS(_nEV_6er_Z7#4mV$>;0DaS%$5oDWblqi>O`qY8_Sw8pdVMC~~ux zV<9gS>hxvqI~%1Q-<9uLJ)8P&1>nhE>+L`f>3A8mQS(wkhM3(UMHR4C6DK4Z`C6Lm ziy&dZO6-9ch%S}e?R-YNpjKtP6Hd$0#*x6ol(%l?9^I>tI3bppM|B`vM+P)wqS8n= z7IR-tS;ayZ({Y`08P>=8Kc(CfcqNXSa|#VYuUQY7H8Doz@X8^hal8J!+R259z1%vU z%_dyd2!fkRofc7N0q^cvHENqQ!%unAg2<~==Ln%(@oBqBx7AyyDTQ!!1SK$WnIAKW zY_vZtojPcIVYT|BMg4%NL{QQ`T;To^C&VDqv##DAKq)#-3JOUX{ei6XG{u|;!vU+i z<%^_p>4FTez}hPy)tqUp%7(;fA@RLS?Rl)PE%}f=ycT4Ms+ln8unCj54yTIWDwiS{ zQg^e#B-~<)ip3>^0DA0cipG!+)u;ECeB8a@uH2bROu&x}a0>ntBp-`2yPH?j=2i$I z(o$7~s5h>VxT~%TOsFW?rS5uaiUoyf2{_|&Oa0&mM!qI8%*aR6HA-l&(oKn4IEI3b zZVS2d&!4s@G+^mN_ZcdnNUPJhHMnI!XB);VpV5aZ5ca@#;bYwi*s9ESG(#L&QorCL z(vk$b(iR$^CRw)^e%bECK1d$Uys@zXrzrjym`CL5bw3mj-$*V&8&Zgtiy!d6j8(7i zW)lc&d$CAqBHlX&EUqv=X7VqIMXDF#7nlH6FL{!WT|G}(RIwyXjmVRQ2D6R=DTP1e zEKd3ZEE%W_h{VXi9>Q`kG%^>bRUUV;qr3z5 z57r~{ukB+K0?dQaylNQZ+&z-M1NPlr@g~glnYF$ta&Te$+@^n@mwa+TpFmiPzMMSgtNrokddfd zENnSd?tgO~*FlSS#dl= zFMP9_?SGf?%;_;GrvHbjJ!;{*>F3oJmnYY6njG5rnH6zV`U2Eb?e7S;9tC%N%wtUA z0$Y}Q{qqBjlR&S&(cQm1_xF#K-Sv}S`;z#6=GQNRz_E)rT$QYm8TvEtPh;06ehPIf^k4neQLUl7v}mz>%+Br?+Mv$^qf$9 z1j9cgK`|uCzNQWW?X;DD#)UQX3h=Cc_#ZmXg3*E$+rrK5M#4eH=%HaY(a0y^6Sw*j z_EI6m2UKOF`ocYrTg(+}#MMzTKzha}x{-`aPGr3{56p`M&VK}qlqfY}di_o?Is9FG zd3gc~dUF0&dq0hlw(nfD(?n}j4o&VuAm`!+n zCxFgCtJdW{|3oLqX@M}RNO>D8g8wD1zD?<)?-Ohca*{@1q#l~194+U z=R&XcaKLufVaGpMWD2QCm}j<#-mpa;S2~Vzm^1%CJ*T$IfYPOQe|+^v$F~a?m0tTq zdjo7jUNmuG$KB*3w9|yr-E_6l$mz6&3t!c&kd7d_N!n-F;K-)NDG7GbgvE@kCnJ~D zk_u)a+hKy2uzW8}y#QuzJ>@vqSYmq2VHa?wFz3>oK0wOFVRP>!=9g!;Ej=-E$sR+v zd3aIPTfbVjif>oIkD$=UDE1HGVTK1jS-rJz@0j|xSsgzXgkGVK1fmFMT+M&1Za!Xy zggW$vEUMHfHar+mVK3%e1V2vvy{&$57VN2zbP_0nUFpZ`>F;BkLiGPyNloXbtn7GMZtwHjY9Os=(pyspd!10CXse1C--nc{}IJvD@n>;)m5r zCz>6WM+94nrxs5|&N?x}GolfuXBDguvNHyY`lq{GI0}V+&iQq{tBC4*S!LF=^wlY* zt}^X%8!C@X{SR87(9077{{Ut@NV^&4vFX~L`Sj#5U_$SI35-+^3j^U>eGDv2CyQ)`1R?8%u=u<@GJtM&ed2!DQGuV zz)R6~QZ=Bjxk@dH_g))uLk|KZmiF!BaV==XTeC9J3E~O2<}x&RihS6@-zu$#GV=*L zENb!x`!ST1c!*|*VM-67cX3kc;tFy*-)~niEUw9q5aI_1`FAST zt5FFnm{f975c3F-ExSbq!_cbG#x;#vlMH<0reU1)THdHHwIk}5k9ZBuPPhmbE(?MV zB8Ny;1GLMxn_*dSv>?-fo$!ZWI73g`a<|{yM|6@zyCZV)G2yaHLpNuDohVi)(#aYu z*x=e#f$FvYmE;tNczN#Tu5A;3RQ$6DV3ATrU5As3306mEe=)UW57407n5lHM8%ym@ zcjP|J6Q5MrNo;+@X-YjFbi`RCMsHQ;#B|QiXi$xxa?s2pBs7upJnYbzW{8mBvE%&!yj8H^s(PYi6_ z52cW_7;5pty2hAwC65mW1;l3UDS_bHgz(K$qRb6@@FR!=`=njU238xMHEw=Z8A>S+abM%$o(oBPnT&T`rR| zzMz+8Lb}gvhC5W$j`yAuA5DmzzR-4c|6#F&b*A`GMDC2a>yK4!i z%UmVb69CrVBULRL2iy`fJ#LV&O=xn=TKXJGDBM6=1G82V&N-J%BIPkO`Fdk6K@dC6 zuFq8?$o{GgUL}cAqy!@;^;c*Is4N$M>KYNgRVObi=ME#^(H!&tM(~luON-bB z*_R%2$;O#NLT3Fl0j@bgf z_yB$s(ws~Cj1CXA2GVK=KPw^`!MicFo_45OQogwgOX0;T8puF#Fr~gp$qS4p0Q;r_ z(DzR~0?EcK1(0YeiH$sKOrLji{(g!}q$375;8gwbJkGzZ|kg9ir`>vuv4+7e%? zEV<5TSs@!coy&3Vw|uVY$e)iUZ|MjzztHNi9*Hjhp^>b!&PPPGM?_-q_Mx}2&;?_0-v}>OkjanRc zunW@r%Cak0PKn9j@BF(%yE0MXLQ2I$taj?~eIBhAo#sVhZ2_Hrw?a%Mrg)UFm{E1K zoToQtsw!%I;YPVz0XvpFy6{!Q@1s+KlDO0|Wkl>{qs&CvOA|asdJtYj zMXXskM>5*Zi=&c%6AnVbTIuCD3lUu2F} zV*5W|XQLMI^*m5qr-p6!u1=*ABn{1vB8LcxVUU$Rh))k;TZf^U9#vFEWjS?ZcziN{be6b`+|=$ci*d}n^4M-r`P#HSw#-&3FlI`1 z0ageT?({&unC?giMf8uid6=UGv}Vkgc`yDkDxB!_0MekDn?x{MuX&I^B6Ur= zZAyaUPU>wl;4PXszT`g4y{UT}H)%E(U>T3{old zp_#7&?bpj@Q;FY6De;R(lP4VmO`dNWWJyxC;5=g7IV+2EKce2PC&4wGhQTQ@SQ~g_ z&d14?*K?|Go!Dw?0E&oqH(#9t`HY&BJD6uSXrFhj@O8=@$KFX0B*r^S8-g+oO?S9G z;SRGp$2t?`ipxp$VzjH>7>Zk7V8k+&f~ISe1*WrbQu+F93UW}HG`Ai=Yd$*C+PF*` z>_<~G3GyDdD#dX%Jr{iJ)lF&3wIGZaS_bGTPfwC`fH&-TlQ4{^Lbh7~}tyO7i$XIL(JDilY#V( zNN@X;K`b-o%&rvq>ruezpf#l3w8~QY^B&DuAtQT>@MIc8`v}yDJUCkOg8#kdredDM zLBM9&{n$Rw3^Ds1EKuP#Va#Q02IxT*CVI}~9lZZjXjVMgR;jjdF-g#!oy`uY?Wf;S z*|ksW+Zi>}O!bqt@c5o|_(S~_F&l%vBwM!#VD~~Q-vn<*+4-R1W?@1C#I?^%=m}ky3WgprOzsMAW&Tmf9d0Fmqvk6n12{ zDn-a3=0dncq`!$l#T&p`;gxkMO0zK*x!1lW;3>TI}GnK42l@M3s&%Za*H9AM>6$ zgk-mvHMJY>zxh#(+}#t1fE8pfoAMe0nzIft)2a*d&@XDlUILTZAS=((VRjEcZewAe zo(c4v)(0x4%nCU*p6Q5Mo>^Q>fmD|fI`T@b*0o*&lZqd!zmbdp6Vhkmj&RDi)OrbH~Pw_;vW8T z0OB!;;`w&^wdiSv$$a2&=ZYK4rB&`p=!WUGg|T5iPGWf)dNi1H-fe+8f0g&r;v|Hh z)`Ar09k8w%%QZ>1_peXIG1ZiTT45^gOw?mGp)Lb;zLrx(iDUpe*2fXAA`)VE4$Nsd zogbCN9U)7M@8`R(`J}Q5k z**8_n=_!argH={t4LgYNA>0uvJi5-QCvyLw8N>jWROWK5Lou?=Gxixtxk=ZCl|h;6 zcn92hjRBF-?aEB;_4%qWX9QfPjWOfDOF7v)AKRNG*p)EQXq^Kgii-^6e_0KRU;GrZ z0(OEv=IXn<%ry>u9=jA?TQVMxjK`{e=n%`pMne+u=upa{jEX`;US&7w=oU9=i<@)C z?L}}_>5Z@YJ&WdNMbTxXZvRm29wHqfRu-x_Ds|gS-^Qhhd z`|L{I>!49z>f)=Y1RkqFGyDZ2Jin(uN)uxsUR`rZQJiOFUp5N63fmvCbCx=vPqRa- z$w}pgd0&&`UGeFT0ApCwPIrLHd==0jKdfVtdE%epc&~WBM-Fq#@RDB{=VG|CRNa^L z%~nLxFkd*sr`OMD{Z}JIXuju_&9RD3-#wXsw2a=57)r=~X)mTX7z;9TsX!9f_$EjO zu@K4N7Hzi1!sx}=cVhQvd5FFzcY6#`anpC^&ph*8#ZN)AQ%bUIsFztuKZbV9sO z^sDf>bi`bgxs0SM?3@-#0DKe3QoD$qKH_ar`o&+!n%L}M;X0JRSc3d`U&rX&rhj)U z+fz3b?D^cdGnWjR%~{NO5@VKdX1I0->@BiEOXa^>n9ti&B$-D)hD?}B6N;Dx9BqR8 z8n)@+#KQ5jk&-wE0NTQh>bM?L&@_G8$pKBTv+8{k7$tNRfKSHtxEp-FlYaq8rS&r` zWdo*p++y>LCpT^f zuM3b13&~l>vlLE!zymHB(y82kH`xW3lntaKV}@g(_>Y_(9d~E-Z1Ih`-_!p)JJQ){ z`zT5X1$yOfQLa|3^uACp3_2PzCx_y3GFV?h7NZIY0$QAxhR~?Kj&7mJ0N7r zaGqY+thFtU`iNiB65F0nhSgCBIcDcbGZz!e+E&9Q7O7m{=B#Ze#4k2?+!w-@_^D`6poV=?GPk?aA}Y9p6rcv(e1qi3QFp^2?Nm#F8ab>|5W3!6bA!ai-uN zo;=xYd7zi49h7d8jZ>}44Vo!w>qc5@f}(hEMw@4b3D-dcx_kwpkH+Ao2nz}}_5H7G zASn3&#jvhiYvnBw^JGpAiXY~BiofdfB8fIAe!hZ*jh=)wqFSgzgUF@ZBHiVwxExBIXs*;M%jp#S8+7f4A!be=Fn5e&&1Slk`q~#s$fr z^wlsiw9C8me&oE9w3nJlq9~9F8;zOw(RNcvtepdbC`uN^+O}=mwr$(C{o1x|+qP}n zw%zj=G0Uhr$&K^$FFP6k49`I)ygY-`YvR<5g?1G;ycDl-@Pq%9(^s_SoB9Nya)~JT zAy7njSYanu4%&K0J|B?_`mvC&oTQjcq=2J!NW4fqml+Fo$-u?h6{DF;$)HSgbil zBOH>jVRu!s>6=mWPS{lVF#Xq(?Dh`G8!Zt8SLF&*mk&9`xRJ{LOAiHDf|5qzj10x$ z%JsE$l3^nG2U=yL8u1fsT%2@=azG)eDi|Ng^f(#Q2-&FQz$J7mS1#&)*0~Wk_DT}F zT;a%&VyO^q;0hq;*5RWk6K-hbt+1O*vl6_xJEX66U+sdjBvd%??;ghYkYig2O*O;& zvY#LxrL*dhTC~K7n&?Z{M3y}IDPYt|110+IgUV27%R_UE4F_r&oQJ(s+JwkGJ9I+L zP$xtA>?hgz!9fsJ{9?nweh7t#s_*`L(on(L_mA-!IInIl6xArxWhlgpKqP|>AYFV; zRyJgHpN+|Y@eFA&6Uo|7aq<_c%zB7tKB?q!Q=fWhu21sw@V1RnMJ7+HDgBC+>z&4XlG30I^GS08T`ti;H7Dlg zxmr?Z&ECdPGCeo8*HVBw+~H&K@!vulkY$x8GQRA8x6X0~ry>9WW1Wb@Fr0&8N4D2( z&KL!@+WqTNyu1WURz`DfQph+E^4bX@OX-lAE_JTbiFG=Fe^(L{s$EXC2@E%zQcu-h z?Af9sz;VJL@i|6zVua$Ee1?#;09Oj7p`w^`g}!~kuTFn?MjVU?SUbv~fmighCEsNEV#%hNIRGhi`0fjV=p-nZ=;BMNnj0~aIP2f2} zePK;ii_2>S9LB#}*E72A`S$uZ+&9Boi8w&gaMD{kY5E_geNfCHp`11lOD-v%Lwhv& zx1Za;mfhjyfS!22Os8X-!iE$esDQiSjZ*#4?(K6N;L$2t#7*X|BOKI&n)dQ$%rqZJ zvIQ;R*MPlNDhi+NjerRN62M@O6~qFLpiHmsR-V>i>%*M|N0NSz(F5^(Rcrqp%B{n9 zKb-FBg_NZroymK8FVk(!c&&u#!uAmb;RH{xL^vYuT2-<8R-$k~CEcSXU-VxB0*{@; zbX#4S#-W>cG}n^pbaHFoyu9`RKgw6(dy5QLNb<~+%tUkhC%%yWBl69pQ!ek_5*;<# znvIZ^YZEXjqOkmaEocyH^>jQ8eQW|v+(z+X#S`Y^xoDBAMY_qYO;D8Md7LltDFAOW z?!ZiGPWMK%#OiJ8;~w^U{hq)$Q11eSEb&TU4M?iAFQPSoi5I|8sG&6R#!d>u6>p4a z;V$r~127!OjG_@H!2k)@nYJ-$HZ&dhFt#O?x@C9f&895^g_#O~n3oQM?gzP@FpyLK z%R$v|u3gtcZvSJ?70p$iBf|(r(zldh3&{xo6i0`RXooY<>x&B}NoinGwx&4+XNHis zA+@CwJq|E@&*zr8NqF*QD6ln*b&o9w*|CQ8_kOyy$-ojy1#iCs$>tmz5`>j_quqtA zt!@}PcE-%W@GhR{Z2dvJ&OA3>R95Xn;t9~{D^p@TbKQbsKZiCn7UO=&n}8Bgvyx(1 zsCV{U6q&91j8Ws6!D^*1u9jBoYSB+rS^v3hV&v`|dgtzQJf$!?Wh498W$6I(FC0h7 z*?v!%1IfNA{$r#-=GsQTJ7|MD%bv~g*^Ryv^quFONCnfXmSgPCEZ~aSTH0D8?v9R7 zCL;l1%I!+C0_En|#0@Etu5!GjOx~-E{uhDJ6;B?D6cT<6doYnmy@JQzJS#h4ZcQpB`j-;VZBkWce&!$2D1Q+K&y) z5C~Zc=oomdHE@8_WNzou;Vj@&Sa%2CS#2FCpu-_MYaua5%xM(-C5LnAsDDHJc(Dru znQ_uiz#Z|{om0ol4e(uAC$4ygvY{Q&)(!bSlSUg#3+&?(jSu9l(#0nVEc0bA9=HrM zWzcL-b{JHEaC_SJYyd->=h~V!%})TXPK%9KVZeJT{z$})(XZcvW{0*)opa*3{G1%{ zx||}ld)C__sXViz_P*9KSn!>wBuU!Jl0I}5 z8%Zot(E?OR8isdL)&H}l@4f!p=2k^30h`249b1xF9z)Ufl|SWD-rePvxpW;8UOb*C zOjBd}<`wue9$t^@{VFo(?)?;`7}A&aNsjt&lxZbalqZI1EoCF!ikW$mxJsK3<=^?- z!;N(4_Sb&O8<2aT>JcMnxEAcy%6km_i9Nvid;@{>yfZVA^We{vx2;iR)`#y~>f?z+ zsQ8j!MeQEO8SgIdl6vf!$P*lsIM6qk05LW^H)zOs6P6Sj zfg*tVUZ(gg1QAR4b-fmb7sRyz!M+=^tUaI&O`Aa&vtoHNAO=?Jkula*#Omm@*S;h^ z%UL_?Hmt`2VbbkaIikX>&sfE5_$)BcvBDwzu(x6-xT_UrA1h9G#JG5WvlG5y^+PT* z!7Q2OW`V^wWC`G%>RT6515+-^S>Zr?knOc|?O2SX6LWS?&s(-9xZ>{|8S(WiF>ojc z=$@03OZy9@s?RZNCpQ4e_y@|DSwab+3baw00yvaCqJ>{^8M)zrFeTt0LyVZXV(-w#0`KvHZ3%+rPeYLxy)Kew>ht!^= zX?TjK`;gff(SNk5*+1)`MXK<0j9^^611V_1@LP&q&J!Gk-%;X7k?S5nvSk~b`N~a_ z2`eV@lsh0$b?+gGDimG%6~1tC=w53c&>wg>`!tGHE+RwCVP8E>{A9DrDrhUq5Qn01*JKvCnY^b~^(+_ZH> z`NvplgSai!hRKEYno7NGg85G42-f5wg=R=Hcz)_tfrL?j8DhA?CPf@1Z8awzE`($z zm>=A-Mc!8cP`j6teM>ky+;O`KsJ_ZeN|338tHdItMSvpz7gKA_6xQy9f#2GMRglg`vAvc%7J%CIAdN^tyz#Rqd@&PU8=Ps!p zTYN7*G3v`02XsyJd6N>JT)UK2FpwVtf~c8;e0%*D)W8n}?4ADS za_8f$HAF|TQXj-U3|bqY>5_qA-)$55`P%;>3lpi4sLm-f%eh}sKX|scO+ysNp4ZJv zdn?G4E*oFYHPKF?-PgO`>b9dLTOV)*NY`sUxgGWEkHe<)Nj{_9KADWx(~9Nx?Z>=-04^=&m z&Red})uk|J%R^fw{Cuep#bCQh|Kfx$H0T%jT!XTZg$6#q`fpotqo5k(l8SdXsa0d) zF<*4}ti{}uNcZ}Kl11=*bOXK)$8z6B5Yj9izeF#&%@T>1A>Cn#zN z3~{J?4p>-8Fc>^np3p5z$4@R(ZO^ zR}g-`M_ z6NlIC!Sjx+LalM_>6VADFO^E-#$|9Yr^TJ9IQ3KiwGcalW&b*&a!e}V=ja-G^=Bv{ z^!3WReW|yvQ63A$2KixALd}OI$>)M^-btK_#RT@>jExp^hKj{03?uaeF2PgYlf0?D zLkKACx)Yd|#l(BYxRtbE3z0E%&Yuf*h`>iUQZx`=OYXx#Yjdu}`-!poj{Z|28ZD%D zfWzJaMem_J7o7(Cgt;geWt=#0Omb>2C`~6X#`3syCL+)8(XivQsDoh*$`ad+xm zfl%UbD4aWy-r~R9MX`JLA_=VG`9{!pI+Bm7iM1R3>7jWs)|!}F1wc*<9Q5;XEzvMx z{M!>CJ#B*vQ-Nc&n`WxfKh+<;yRk`N6L==FtU>MGjVs5d3~=MRCtDZp(;au6pxoCr zU0e)BWW}=+dZC=NdP|;MPC=8dt{dUL0;hd7g;bC$+SM}v#?|DF{&I$#sc>|PX;xH zNT<8^S@Uy)I@^S+GULsx*Ocn56<8J;9r%%!^#NajzWL@x*WZofFue~Xx0CcEjGy!q z2ZqA<_cId&G_L3{yD#V>gc?K68GEZzHT0#+t61o-geNTSs6dTVl{EwQ$Qvo@8tD>I z*wX!hd{7ZQ7%jjkL&bUg5oGv=H0+1MZPjE)3)oCQPCAn_Pb4rbm1sq&b)+qqMauM_ zHPKis1w0TC;B;0jWZkI^)g|jg9^yNF^S!V>0C6w4z0k*N{nbfeMa~X&mS2w~F;(%r zLVt)B<2;Ug_H#5jc8j7$j`I(b$qmBVmVrM|+~Tk38n>UC2Z3_!^=l^YbpRxc7WXtQHZ>BSOS3bZ@puQT)|}k_ zWFq*$4OgmX{ITEvsz(Y6R`mtg@t1&u{%RVz zcQ=!a4*PZ~1Ph`N1{OlHeeKQa=TV)R?@Ths(l;4BcFEhYwTJx9g^ct`SKCo;@>t2Z z>WrF2H&#wXfNi$v1@rB63f(PKP_>mM0iJZeAQjmmxK7Tk?|_>6n7ib`x1JwKi}(q# zLIJA3!nLQ!wAU+ln#DRuhzlyHS zAa96=6w)#yBMyRw%1*-!oC(ZHq`9F)-iM-WiSot_eh{OWus5a?3W7&{{`@GYNo6Ct z-U0+<8k>POcp!3HeEV9h0f%5K z2QO1^URytJi7BAQ`lP!2^mulsrb3Vy0J4tLlintyNmZH6abCpCzJX9(TRhSA%zw@` zAlBP}2o#;?M9D}0W;}|B-XbVpMAuGlb}UB6ks2>sx=9saT%vJ|^d5?%?$4>8hFL4k z>r|hs4yWxlUw_vr$TLQJuyHW^Z^<>fbY{!pW_5A|%AVr1W&@jYUW(c40^?spVxEBK`X+j`NA8QpAeR^Mp?C3c1X?rjJ@xkb(88{XXcNWt$M)D6-bLj9K z$T5U6uxf#Ay2>>hEX}+;#+VAYdA^&^9rO~E%)jn_PSN!r4+5LrXKC21?TW?vxtUFz ztJpS~N&zFm;@??gG2#fDc3HB}Fo+*Hw%>0DLd!+-7?n218zod9H5PQ270u2SL&Pfz zaUXss^)}gM!kH_2;h#H{R?OE^xBLn-`Oe4oD1zI#jFOmO`w#^l*!UGDiC%Xt9V_v& zUC`S5xH;=?ay8^?5rH|X32?y4p&hLEHM&R8EZg>)tSt(**x$WbD&CfG#G6hDT>4L^ zvbr6=@*6+Rw##mz5QJhx+^&t$BDMvcKX5%>{)qzhYtp!T@$FYe-ZOOl1XtE!EHg6s z=zpR5-V5cH*7>q2BX@rd;1!MH>aO{Z!h$*yS?*jhwuN&+=G9e0>BG~t5G6CAlQo&S zk%kyTE4Fevdc=8N(9t{0LSsM6LzY$)wXs|p3xL_3kJ4^uvmu5cELiS+a3m4- zIEiic?RvWZy{v?%m>zi*Hmd0IC_+4M7Pp?naqawOgb9UCmr@(%BRpJaVJ$qh@@@t; zB21Xp+%OIKEITC^hjbaKrquVgR3T?iVsOeC4TDX@nZL*{xBs>UO#su}Wbqu7B4{ak zA<2brpkNqm5e~O`7B{HEiC9Eo4X|fSkTm(5rx*<{1iYH0(GM~s;P;^9w2gKpwjwOj z9AxqL1R32p&3=`1DTmn|rZq|3m4KhRjwCj<=8`UECfDDGlk zVxR*PT8bUOkkMS2gLm<<<+UqqVsObeAd!xqgw_f4gJB?3Hyg2bgOq;{`{gd3L#6Cp zwe18>jt>{QY=D@)GNFHel+;uU$gAn(xCPLdX8I>8Y#$ z6~U<~;oCBmBGB=MH>)3U>}|Tx;7P%^0BNbS)!v}`W0k!+aInZqrB><~er6-pL;nfcaiJPT%9n0NQp9lBu`Q;{V zg)QPNKXO}$^$F;}!Th%hs5f}xU80x`jwzM)?(9a52a8~;BuD_vI!qgXVDx?}a+!lR zIsZl3Ks{R;7~g}dW{P+Y#}z@A{U+O}$N{?FB^$Li5{ zXLM%Fi<@SW*g`K#+9nz#qD|Go_94(=j!5P3G@l7NIg$6lx&ecXMni6vTk`oG3Z4V4 ztT-p`8K+CURnEU<*o~|dxf=dPDoSAOaLhoy`CjB_ZD(5aL~6{emu4IK?F0ZukEC*I ztlZhySgmNVckn^N&@Bw_IP`14X(H9enWhKiBIE_;x&HjT*hn4fOX8dw3o-j<>7dhI zGfc~VLW2D^?>bbi2^a-NlPOOnCR`R}!z|KK&*K9dr!yFpIXVTRDs83d{sZ?^9sWaFl77Hn# zx30c||?r-)wo-FiaZHk!qM-+0P-L+W$6k%Z!Bf6IV7mvO8##_g;b>xq98!fs$o@EAJJVBkc>v8o*Ie73*-y#_F(=^LE|||`=89V-5oG-Koh4aeAJ<;Fyo3@ zZZ^<-QojCRH#GCJ&}IOQUsYynboIX%8^IXX-Q-b;z_y|zk}cjnOm%bzzdNnFJJ4;`V2SgPXEi#z@6 zm@-3MMz$1Xcsd*71_)fz29y4x$2MD;B=*QKD`DmKK~TcEC(TBGJMl5E1=owYv$>i! zx#2Wh$}{VxADJez)}>&e)cnFhf)*%cAPFS8$Cj3^I=G`zAl*N)KV-S?g!|;=j$|z@ia%snp7D!U~gyk?Tcy=R5AfkcbBbw=z{JfHQ_R~cM8 zyIrd2T*C9DgU~@#N$#4ZpCEUN%uXWEsJqPU;W8-)pAdep8;n3{TR+HIuHTDKn=)I-@V?tq5#Swi^v>c0&2!f$9B< z*iW+i(p&<7m1ud@!SBe{IPNuzWJyS<20B!Qn}jBDD?nqJ>kuc7 zYLyd+27SfC!|4aM&+CGp17m}9m9Q8g8kw)P1(4ui&Ih$d=E9ecb6XK*^^-8op{-PE z|7@v0jA@TVG%#2yQr?>aTf_GCT{POcp9wyv`?y0fX0JU~1MFV=uLm$O+@1sl4_WVu znTkdte%fQ5(DOuq`}aKN%e>xI=pjtrk?8z#*Y2 zevshsL-aV7+4d-}GpnmXf{6g#X5$vGCdDH+80X+$n-^8Na=!`j=J>MtBL!6AKGhE4 zpN^}FE8ki*9>oUe#W>x)U<#NK;ehTPUIymG?m-5&r$Ym^iq#-nX}S@ZZKXdD)X({m zXhXh;BRJJk&2>ZPIQKU$b6FW=zT2js_)B%|l+>HEpVdjlG|R%G>B zl&}1PPV4nXJKszkNI=0Lp@?X4(?tU2r^Z&9n*?c3rn}beaZp(H?&u=b&-S~?8-92o3?eXV5TU9%`)<4}in9@_ zu$RaLPMX|}+gVziZ#Z4bDoEWzxpdI+OWB;HVXtLRSJgiIiFwb9gV;T`AvL0Mp1>2P z$E3^^SJBJYO2LYQ$`euv+n|*B*Po@O?U$PC{(TeVP1tA)^S#?~G6C{;d!#M5N5X`4 zD4jJ&q)JZB&O^01Pt(-}ekmv4A{PxRJ`-0o{r4*|HN(BAChdw=)ILVt`Ulzin|=Nb z#MLP8Duo}7p^O6f!b>XREKKx@(ewR11R*rsV^7w)HKyIRCbhybAAZn;AQSJURl4=t zv$sU^?_Ufu(79uLb)BOpY}^4|88Mc#q>^m=;V44_jC7>ABbt@f!qRR7x+wj^^Dqzn zuc>@*yNCYlbQ$5HosPl5W-8;)>{^g>am4vKNfiOwVGP#UjYKr;d@E!V^{|!=RNO5 znlm1dyY?6|7vrlEo*1CP1dJ+m=iJk9HuI$Sd+E_DgFH}GYt1B=LB+U@hKav^yGxfs zkv^Edz+1W*L|#{JA01ZJ&=dZ78d`NI2!;<vO5HVe2fhJB7BHhsLw1kL z?#Uhf#Tb%wQ1iROp)V@N)TXdDJn(e4z>72C@mp(12=?S%XVE52fPEkdcQS{P(M0%-X1G6zb-%p;MEa3{1!E4> z7sN%}sDpy;Bc2vIt-93+4l<(%Y~})ZL&+ynWHpV)q?-#Pq?uqhz6nO48y`})$Eo!j zCUA+)+yO~~%-urPN3ucK3R2TF9v2H5Gq34#;A*M0SMOyLw3>)dH;4|ATT->{E@^M~P$yEv5Q91{t2H>rFf&>%&G7mv(VnL z6onp)kE_+B1W5v~OW1zIB_1E(ZWgr*tS&$0s*_N`#cl8IERd;$APohflcjanvY$Xd6{O1ts-F@7^-&w z?GJe*s$ZIK5%&UwR3=N{qg;+~xsNgT$0cGaa)!YtEc04;=aiKrKRz{TqWOzS;l_;` z`CNACTLN9Ei`cXr(QKIRd+mTF?$cf($8)MH;%(B(m(D7jyXKEWcPYOmZv2vTwnHdC zt5`ABd}^K*s~OzkpZh>^5;=NO%V$d0{5d^wD}r_V_)urqN`|IJMe0A`1~NX_s2`my zK8(7p^{Ok?u>NuIER!RYKD`twLv24+oIUBPL<+4afB-ngP@$^HU29dMqBsK2hrjB7 zO(y}bBXf?r5vm(kK=D{ow9phV8Xx^vRcAkMr! zfM_vzQ}}1W%w$|?gn;kkV8wY|fFX$ShHQWGqz>h;d53GI-_ETlEv7~U3s^>pR|l&?cLG~kX#*Ll zV!gjwMR7j)^0{+7Lqu~TW{WR=hP;7Yse2TGZ){5#RsQ+VXuSW338`tbq{vrjl4>i) znCMVHFoPUjwy^tN>9FR3+OJj~g~xlL&2VUzJ3lTI+Y4F>-qGttg228h)3SV)cuQPr zRMzN?S<9&ca>;d*2(ynx)vKkQ+}+bY8k3pDL=lhR2&Qbl*UH@n{o{8v$0HTKt$7aK zzDq-=no~pXN4j-TJ(ptRNdP*R-4+RPSx`{}mJXN9F7Q1ICE9)EmunqwNoI0n=-JcJLezea!lonu9ybAJBajy4OQ5Oj@ddO|Vq#|0xh`s0=*9}7JW zX_j|jI4QC2ii|Ak&DHulG3)I%@F4Nu7a5FiVR(-jP?skmjuUTcCjV$%M!#5j^``}R zLn+WWv}O@iu=5gRre{6wmt*~g)&WWo;@8$PyysvNRS>OYNKeYI7{GWD9%f5c$}a0} zSkgVLAsG;{7gV@m;;v*wi+$b@0^4j6)gVz@TW#0U$*tT~cQ1BsPloTgNJNA%M1z0@ika*9x2jjya_IFL`x8&N#21Fu zi5t9;D#hrccyuE3U^S}l+T#34K`v!4%;gX-G3{8|fi5tj>Tvc`l-PCT!*Q2DIwZzipGzS$|%>C-l7^9ntK0csL5At;aTC$ z2$G1J~u)_$qWd;5uLu+<2D@|76JupOdG_=SOA@^vhja0*%|-91$1<37^=^jrHy z`GE38FXv*ynXN#Hlbftgdw96fFP|T8jdU}01!;+koj9;(vA`#=G2%mh%GP-z)q^+n zb_oyBIbklee<||@aqfAv#R_g^AXOy<$(5Mfrx8dw*nobCGx#L*3bJz`avD!#+jwi@ z2%Q#uleQPL*-z1)?zFW46(XLlLYVuZY{H*#|C;+=j`Wh!Saxh`DFIxjCU<%XP&_jjHjk8f$q#zLglJGXp_1yG)O+F<}t zhx>$Ovvl&Wt;P$B#po(C14vQnnoh;Q@KkPi+RR1KWQLcC_=rKbTb_43bmV3J2#v6o zci>pa;wy9P<7o^-^kJ4CR`d55J46~Su#bp6y~IT5&%@{C%k*8flv@6_(M7j#kxq@< z7SE-JuAX{zZSyc@J1meqa02drWLM9i-2QvOq)8dASHjp*KbdLb(Xi3jcpPD_*>!-t zz%1Iq)-evwv2+H7zEBJzaC#!4I^oIX2DW%>{3U>`Z_?Q+Z%L@5N(&iVd`16ayW5US z3wwr^(+$WCq;LHegzLaUOJ+&ffPOd&=jUL9Tdb(EJxUXr)gXx8ZMb*R<_H>we^*MJ zpRZ%aLZ2&^sh6;pu~E4~s_AVkV-{1~H%r7R`%l=wNV5WA zC~%uIW#i5maRJ?UQsQ(ky}WLYSIP>vwf^TBFZitJaq#@bJ#quf@Pb%%wVQ2#J$|+D z!9ZlaziA}RQib{E#Z2)j+DFla?5o?I>69)fspK6|7d0R9f5!bW!CF>RcMGE$@I zGWCdKHD`_v0&66A;3pR}-J8E2F>EY*)^F39`s@tcX~F~+Gh zepfzv&iBoA_zZ>iD= zD%Zxxeq59_F$Ig$n%@dez);K&nmpR|lw8ZHaVMvNq#*DFK6>}s`IW4mKT(BXyM&R$4th2q5bdWWU}PNv zlkAh{s&-i4J)K5pRtJ4uY%tRoZaS#1xQJjs8K}<;Id7qt!io%8*%oiO0EH)M0yANH za$x_gvtB2aW92;~S^*LPPBra$$MFqWVG(|F4B`{jD!x-(AMJ*wq|&(((Ex5v2zy4_ zNfwEQ;!+ZRASHF26SHt#V71sQ?B*8|@o<>BwCy?w+Um-z(V@m7HOLijX7YH2EpKyE}^<+6R3HZ^Irq)^o7dsGmVE-Fug83^$cCD z2t5Uw&&>N<8Dxm#2nnr7EY}Y1|0#Jb#tjp3aOES>=p5hj{S-9VM>2E*BrM>_N&HOc zC%|dVK-&SKA{rEhtl8_}yDi83hi{$Oi5qd8DmLB~BWf%5N*I`aK%5qzz(8r9rj(DGu^@FWUSU*EPo z9T!_jl_EruF>E`NvJ8>zj&f{dn)22!Yhqw8b{mpNH>u;qsPVr!x7E9YIhrgd0Oh81 zfO*Xa0Q=bb{3Nf#iAc2$Nn?nyrKM5SDoiY;Cpld%TR;2#&>Z*(9GJ5zB`z&BexNN=Og@!qS`YCqec=-PY&P5m!90r`sh$7Tsk zF=|OD8R}uTfDQAHa-6WAl55#crj`qyA`c`5@9mxGq;asR1*gI(DOv!N0Vm^|(5znasT@`vyiUB4sEwVI={D3WIq5rAkDaurB0~`syPd zX9MN#T;j<&Hc|%wvkKfTnGR!V$0)Gc z(d#MramImEu(;i^CYQZ_XRaP{YTuq7uLvPfPq}IJT9}=eas8_J3;R&Kp+mHVEr|I_ zMHUTYhEkziHV#7iB-R5?xyjyVd=8$Z*Bz~4x6RR7k3EM5`9x)8)q52cdRc~IvH za#%CQhae2utsFtK$=$Ueh3#U2;LF;&cFbVH_pj0Jhg67I7t<1F(AP_9&AWNWzb57M z?dOqJDVvCxE=lE8^YL`kx4d)9pBY(a7kHKO0}aw2{gM~fTKhXt2%B1AS1?awj`{wg<+4l}FfRV9GRCI4Hc!2KKOqZVgM0IfH8sIFbcjcjfEqRG zs-QV!fYLKTe!MhSndocw)Ve`|C|;k&Q6bLhKY~?GKVxcbdpmoinCZ>tN}+0i!7kEX zlbwTLXWJGayO}}W&S`EM8-DKxDkga@U+vE1r6dmds;FlUVNQA>hyvaaB5EMGby0lu z&Z@h^{kHPrH_$kl;;5pO%-JHD$(q21Nok@820$cL(^!!Yme{}M0c>5$&6WaT_pqne zXZX6nQMs3c{W2vT^$+9s4&U=mR#5a?QorXtE?mtN$F($*<_uEn*X91$Vmm)a#q}LN^5f(5dK2-Q;Jp_a=A}vtJV^{<_ zS!`w8{|Usa#*lWosYpcE%r{T8@}Uyj*t|d_WY3LB@CUuqU8$T=iGM3Z?<9gdJxB>` zs2upE@KeElaj-|s%>lzU^#%FG9qL)d7qq;YZ-AuY{d1GruJ_b=Q)hrR|Gk~*H8sXF+w6IAlfZtRfI-<3!HX;%rx_M=BzTWY( zS5^0&@f_djIPuiy0C-0N02s{`%HvnNub|L1db;p4u|`J9)$~8&t0rL_>k$_!I_nDu zkKznn1B6ye5QXBvk8OcSWM6&+RbEh5Wim6byJG4CufRllrxZJ;S+V|Ya`*Ts_aus| zV5qf?`9f@cgkECyn`?G<-jf}!!%mOc@W0bG+D7vS z#mfh+s>=nHR)n?fj6g2ZJCNFqaV3kNGx&S6Z57DvYtwJk+HOSG=^OQdQ{aBPM{9oe zd-aEhz)4{N(Sk(!W$eBovdyMdQ|6H-_*;m~1^p;94EKyxu96G=Ngpa+<@#4;W3YzW zdeZ|D%h^GN+~MD=tz}Ud27-%O5FHavv`n%M)O_c&OIl)IRdoSuwi%(S?i}sl z8LGm9QaZkGF=_8(g#Gp_zb=K{C=vGy1AmG;zr0}h6`u~Jg60=*ZYBR5A5Mg$bNc4D zcx#oXQx7-sXkjI)8+Zq%zPK100pme>OO>g*8hxnT?M9DP9)poeE2C&_^kOk;v+nFJ z&{mx0ou@4t!Z_L)#lYlfcV&A;i|p6YAnIlnTJEQ^_gyj>_8rXXtDD;tpfQn4y_WzB zzyMBcAdG}U9U#*$RR;miNZS*SN1SvaYTxY#&&?qmnhkYMI_D4l_w-bWBPm6Q-Gmyh zhVK}*zKQd=WtX8$AqW>gQVH485eB}G zL{}Wi=6LGjnsBd#1sATR;M(&&ivb-Vr9~N1S~FgOIsCk%?fUdJeItxG8H6j%1x447 z^MC)c(p3I-2vj9i{gsiX%Z5_?x(3$^gu^dvnd~*?KnR%EGSXJ^u{1zp6vHTlS>YLN z16d41%(uum034oUvsoOpK@j}25>7tyKs!|3NypDF65EcYUedL$+zF>;sohpEW8aEb&zySMMK2lW z&*jX&fuQkah^Dq-1s)~N%stmu3*ep8L zx!qxIbth>RJ@D|nhtQ|91rl%F4QxwoM8Ly%3+i-G+>aLfUC4x|hlFL>Q(yIlNq-gF z#pEDOZWoKy*&OsmuM|2(40~l2cO%?@bl*3l@z#a6_IPhX=T6a>iUqC?Acamhra9g+ z5E&sGbm(l-7`=WO9*ss3kvR1dhZ_fhtySiB*V`7|uy%dxH?B|fz~*2u%WzgO=Z4bt zPyD?EH-hszoto&yr2T|2$#=t#)5-rp`To7|uWb{YrxN&Scn;!jU7czNUbi0UJo|x> zxl^9?E?Oc1A_IebChB)myz~p%#5z(N(`&<8gGoD^>r>Y1A^v0GR?lE`YPhQp z3jS_Fpd5efFY-zUt@&pM2H}rgsiCwp8RATzXRW)8`5#$daB~p~befd~?3`MH0pHny zR-uFtB{Uyc-p^&>L>Qg;bS40JyB$_w%g}_w@nR``1M1$w8(cBzdPtWYBx}LGUGIzW zCrNvOAD}POa$s2DdH7CnA`i%#b*$A_deGgfn)lU2a9|RI5_YQSIf{u~!%>1Q|0J+% z#4pE@Q^#en04)ZM24J*v`d9_zN%v;?uD^8wxPbZ%lrNrSg1uUS&@SMY6qlJizOJcQ z<$=DBR?aMn&u7=$qNCxGPdrwc!#s4u3BMTL<_e)8d8flA1sLmzzYd|rqw0yMrwxL7 zX4FF287VC_vXd&;I#6)~5cgpVF3k6eb_YsV519aE4!nD*gfn}n5J{Y+L`}VCl&U|U zn;oE7$6a^XGrv>U3{vB!gwoi9J|OmueMXYNTOc=8GK{UP))H#GThmJCGQQ z446X41PT*4%DFBaX>m51Ue;Mje1Y<rN3;u|oTc9ABXwr3r zU~?sF57&?ziJcP1(_z*Ae8UCvvwbP)b;@aHU0+Z!Jb};w*-a!$Nsl2L2(?WEGHv(vj;82Y#>mv^R$9q(q;$itr5X2t9ZM> zB)c^*ie|Gt7?M3VOxVOXHe#j7IkyiGxEl&4tw-F-7F!yO0&!c<$rT3?E|Tc@R#Gw-Os-r`!N$w$e?PFJ1k}jNZ8Gq+t&kG`4X$Tfh$vF-pjz`1 zpe8l3y<$w0Klc&e&VHa&*B*L?T`5fhqQL~T#layl_O@;&GZ)8=M{9+JTXirItqj$z zdIem3vr73*`(DGRihHSgH<0x8fG(~!QPKXOp1w*Yj{Ch3*KpVqQ5&ZmW6?@A2VeEB z9Gw=wTUe;atCnwBsJI{n@?@I6^e;V?OSV6f(SiFP4Hh&C{U0u?Ta0h;fA6@p_@V1bkDoXh-e2|*WI{tyfYv2pFbdu4ImvhFr z$Th>++)pm$f7b1;mxF8fGeivS6BmJkegtUl<{R$Ry$6s%{E=*dSIjE`iI_N|ZV$#E z16wyl$y$@S5BBb7qil%-+id3DN|5<-S^on=K)k=H& z9G(RA0gdAwu;RIcCH3rBMA^Pen!e)vzr)Bwp}D6Y4H!U8m&QlY$Tr#|bvQ+EJ-TSm zT?hblKtts3pOQvXoZ!KW6$-r0#9W376^U%!UM$gS*xNz(B1Xn<3nvsd_4(<6WAa6e z14b^A_;D_65f+U)L+l%sraxr;lg=ORriE ztw$lEs$1CAU$oT!c4vrtq97W&?*Ian2S)KLdk!{#5R@giV~(E82ysElhWL>Wiwp{iQ}UR;x0<(SANR8 zC-4+5n(|lql^sD~!HCW64l-r@67zLC^GS?M+orD(tUz9MDfkW&sw%}2nHzuG2+=&d zLIPFi+Kom5ZVr535)J81@q3jjf4mN8!74p9pgB{cMeGp~WiPu*HHrPc<<*@FaRKd% z{RdvynyKJ~tN5*gKoB)hPlbnpNx-eDnQ8xt=?(=FnPf9F z2l6Zc%F#c+DAI8Ij{}D~EooL^5g;N%-6$R3G;I*B*jI;km8he^?&jElupLJn>XmM` zK{Ag!0}kvySTg?klY!goaaNs5B~Co>%($AXA4aT^VF2d>L@=R6p+;aiL1j}g zO)k>aL;&Sg1v+66>TT5~(2>%iJpbfNooUb$avSPJpzRPHjKn{gq7$~pZQY|)o+k-h zLPUOGnVqQ$>=vMQUTud@7`J?B{~s-`-dv6EMeo^q$`MY0xzo7sR~YaoGQDzal2 zILLw=K3PK7slqV?&cxsz-#Dt;3BZf;lXHELh`|BDtFw+rHwMYLY+ z4irRr*@(U@*$Huw=88n7-wtU*Fh9T!hH)rPY6mv=r_f|p0tQFfg*F74PYx2TQh5op zQ`N2sGVsRV=nDEP3Qd;WZ=nLAxWiSse<3L~Q#&WeGx%CDlm8sLs8Q~ox@1*iMHtdw zwI5!na?Uh(wq&{UVGV?24me|0^}vTb$=I9=seLmrkU!Yo+v?>|(H2#?sutp?tMo3Y=TNmm>zFJ+phKHncV<6T$Rk zL9TNyymoCBzF;Z~X14X_fut(4K$&&)=XTX~l3$W$tp7PkMvSxMQFjJM`BU;W&|d)` ztn>-;OLN6T^?g(Hmt0OJVA+YF%sT?#vyz!7i;d409uDMOQBRdu>nNCmWFXJSrJZHQ zK{2o+zmYTcbq)&d#kioCZTM1It;A$xi*TWuaY{`Su8I}>rBwude&0NX1d^n9we_K? z-c(h)>AeS}Wsa}(Fo_`C)WQ@X;>|1dhXokoFiYSbw6`^6m%DlV>xK-MIT3m@uPJOp zsF%E!>)~pAt8*$m);SrzoE0|(|8PV-HIi-q?$vr%$aBj{_lq-@O7){1B#V*~1)-n^ zjbKoU0u;@*yhjWU@1{|YXjSBq%tc9LRvmb$|8CM$P+!9R zSL~^f=s-pg_(H)8nL<+*Hu+sJ3036fTyh-Lf&z*wdlZ@{i&5Bfy@Foj`Kgbi&C|<^ zTj^Gy#b>@#D_wN2dGWF6ere^%0LynH|8ZNv=ye%s>U8;&vbM{bd&0E7a3q%Hb`Y|zYlcT+JF3*M|TzP<5WTym!( zUXFev=&A4Jy>+t!oE|Sbu9y`Gb)J?8JKZS5du#S5_ME{hmkwgpisOopL7Md5<_)L{ zfY?+1_Z@ZItPCliVEi>VWHAhYa)8SEUyLQL9+vWI&u(&$!tLky@~g`!#yKHpb0;Co zq*lm!A6JN5)=27gGo;0+i{nRMp(4Ith38-rvZWQ+PFxhacDe^>7mXcwDkVTbgeyv- zuX45s@B=EJ)oRwQkr?5O#5!IdfA}Jp)tO&>uHg@o>US3ck4z?Z_>w?#5ih<)vNU#0 zh5JNO0a{g88WU@x(`RCUR^LE`L~^UCXvq~&)JJ0=u^uSGs$n3dyPG=>k zrN3Eu_#xpNIB0L`1*_`G6690b!e23lwhCQ#O-z=a@OMzPK1}>FIcHx$u2j2J_Gu2G z)U2ucU!4hlCjUPPI$$05^18=2HG>I4-3`2p<@Ppa0){F~sZhWmWZHz#+H?0wN;toq z)kby<3^6dJ+fKG0Uz6&8csd((y^r2oaJChud&2I07Ag2c?cPwef+x7X*NFM?heainrE*Qbxlw z#x0c9z=YiFkFcCGa<>iP5*j4=SW|bv6p!(T^}+!Fr(UbK?sZ4cHa9Ep!x}fVGru$Z^pu!PiYmBP{^TapKh=>_>{%;kEL4H*sUu)B(@Z&ktx|^1E)eX^#Elu2g$vUt% zkCeAn%Y|2#kBQl5B6A(#0L{_I)o_d|KJqjaz^J&v&n0xNg={K ziI$*6+y|fu?+5ub>n0YsCYO;H%j@N7%ENX%`(osg0Vol)(MSWRZRW_)Ax|(5(ErL& z)D`nlBxw6}A!|!Yj`#YG7CnaF*tr^Yln_R~JJnzX7^Y>EDnuv4x3ds>l_{9}tUK?^ z=?iPY)%kyxT)hXOV=3)oBtCY3yQFXlj||CmJO*Ch+JS}yRQINM%@xiLb(mdqHQduI zF%l~_scOEfxK4^OX6j3_z@!1+>ReQ=7Ogd^y)4hQ()O#CFC--RLQL0!M#1#&7sBqA z&TUAAy}XHHBAe9A)yqG6vIJ8-F;$ccA0HL0Rd)5bjq8<0%cAc4fMfqRA@FzvECTZQ zWJ5OP1Q$@ zU!Prd0-9RDR4TyJHBQif^O-S2BsdXt0Q3Nl(?w*|)aqKxufUZ*xCCGB>eNnnLyW$` z2GV9tGtPV5OzY7rk$O})UWSXvBj z8|%)3@Qn|ZFPhmzZxmq%b}>!*;iVT!%Yl!w(K}0^Rw6cL8h*dc5LR;B!{~Io80|=Q z2y;?xXv*$eb|C)~Lm69CknIFF$(0sE^4tG{pK%Ie8{Ul|6k`UJ(p5I(8UnJE-y5LJ zhD#UqLmjZlHIKi~vGzCqcpK1@@COkD{Wp))T>2p}kRRO8)-)*tNp ze(C81D{tu^YRc=kEz8t#R)vT0KL6v>0oZ+90B6+Y+Qjz;D!RD)2H^ao`sl3} z=Yn)sC`G=t4%knyHNHMDQxfN|Jhi<1eX#uo@A1`lS4AeaN61JJa9hQX_0F0P91_DT zaW66K`LRFO(hrZa3e?qLfU+!WSa#EC!bH`c6(+|OcL!P3-XEn35o8E%HudIv@@m1O zR7*{i8KW_4N$@rJ*w`sg>8S!3yf^eGa_yX1{v#9ul^^jeXwRw!>DIanU^xYx@WH2S z>s^by<20Z%BAWf1gP>182rbz)G-knNTkyoIh22-Q8i)8#_N!#A!VDbTLi+sR1yFPe zAr(RS1aYy!uVK%Tw?Y)NW&LY+96t7HYH~2lhs9w$1Y4YA4KXqne2( zAkrDFY*(%~QferoZZ`V$S z3hph`{J1j;HIS`S`*zy9qof*NdHl|!^!5KZmZn*dZWoWzydct^>_{N-MZ?hA-U=+j znk=U2^|GBkec9+b`4;yJf7K1Vw>p?#RzyLjfRo)o@|)?;&vPN2S&ZVB!cfhntJhUPi(V)XfR|J2+_NDo^%U1#!13HpXK^dn1U2W&P*RS1nI~7 ze><&2iWdhVh4gL0`5j`8Df?TM+{E9iL~!3?I#< zef3HMid;y8OA2eI748ReEKH|BRa+DLS`XAW7Y5|Q$in5b__>g);jSLRP`u)hU&<{% z=1oySoW-x4aBn(S>?T2R{p?r)u_q7o z=pjb9=mVBSU>Do1tLc=&WzkiTM{qvpCjMdBpf7rCQVC$Jl_=`g<1X6732cj$yzdnF zfCw4BYU6DTo%`H1)PJ6tt`ziEVr!O$g-e0o{=^-)5l_ccA+*vt0BVKsc3N$e9owJy zh-CueJcb=e#37>88@YK*Z-8(cNqc5!-OXIej(J@Ne}iNY235HCf@ga4k^G5*WQyi~ z4#(VBd|1v_rtJbofmysp3VW9!B0~-v>IQ>dB+bbO67)S*gaO3I$wT#5xI5LfL3h_J z5Q~`wSh4VsMA8-0zbL(?nz9!v&W_-6Z|dZl9SksrQV0+FRUe}deMWud3-5@roK->+ z7ED|aFnHT14|ZKp_^##Ulrl~w%%;(6bp(O%EnxitR#Tkjup&f*sBHJpMZI2l0yA6{ z6zQe+Y!PQxxhw%ifJ48pYb-@UK!mDc!dPk$C7v(;ND&Ls@*^XEvIc`_H5hw(diQ-x zZL7}-iZ>bZo=lWs;M#`7XD@5>2HQlI$0Jv@sirGd0^*|%4trV!8LZGcNd+v&RB#>W zy+Q~CbI8<`lk%`fL|xOA(S$oHNAndlKdm*;hJugvrP^{<_?18i5JpQ*@8i%&4>e0e z)GnL~L^@)~h)K%V1pRpiS4U-aMJ+?}(~SC+O*GK$Y-k!-Rq0#VFjnt7@u8FLy`g@9 zxQ!Rey#$OsY%G)DN(1jmo&ne>`$6>ZZ2J=-T+!)IAc&*4MD@v&9 zH?EKG>tRRkYZPTNBgk7|_)ZPDqF-2jbDh|Y2N50!et)MBa>+_it4kM~i)2o!;L&lGwO+d=e2~E)hM~V^KW$^^DnkVa z!!X|&GWsK-CxC#EqfP1G72Bhllz+4%=Vl6|0rxgM+?EAxl=EVP#yrgitB9{GU_(09 zoAs<=QY^a6R+|+m=`inn4FSagY$;T-m4`t~)r_&=xNwP?0+zNej@gmnmwgQpK|KBh z_aT?KK^L$V8`NH=PloZYhUF?AxoSa?@K^bGTRr^K+bh+L=5!7GTw1YD{96p4o%Gh7>wbYFS|Kp5Q`@gbpMS*%b|V;`fb_yzG5|KZl66 zC-1|nz&Kt{$A%OxfuYQur2Rla_CyL0>*C%!=#!H7kHT>mpjviHjy!#U+pK$FxsHu$ zxkzOS`-O)m8HNVv?lV7T-ADL-=;#HUg)yhN=`(6_2n>Q)mu(WuI(l2)cj*p|qDr9) zGcIWy=SDKFX?JuMX6M*Ok<#5IUp;3^!=fzjjW1op*18^?XoeOotxbh)kt0SJ%Gb?s z#stW&VVVXyeYUJkfVx7T_UQ`{1svz1_kP7!EY$`IKKOwz$=#L8GP)Z{vcYdchub!A zFZjHkhY84FdhY-12D-GjtgBw_4nMIB!HEzGt~kbBpPU}Oncd^KsarMm=c|Yua+Gi0zU>X)wl=B!c#R3tHP1mIX&J2|NBS zG?zS0YY9RSRUf>|z;3`blp{}uDsGE9ghX^%+dZS0WBsKr3!C^j-mm>7rH(KAm56$3 zuB{0RtQ+n%={_$%6?g4KAjdGv!_!xOaOdvAPH*&EYqXB17Cq;degT@pe&s`rqmRxI z_erDI&n1i};!GY=E$N$wN+Op#Nu~a90(Dw+8#zHcHU@61)*pGMyv{sdNR_o02gCD_ zzb*NHZ}}~Ci;ZhUS|-4=O*-ujD&qkH$(iZPc}K67wLM_rrT4hoY)U%s&WtJT8R$!S z726Z4nN}csQ>5mp(pX}-xwL7g4Z(vw8w8vXT1CyQ3R^dE`F2} z7;`uT&fzptP>Q|95g@RdO>%d_!COOTSiGJb8`Vur=%rOe-`quFXZpnrz97d$Sqf1- zfZoI|LmkR-{w6;9oOyAy10^fgDOPC#`D2@ub`WjiFg`|2R*zRwf_P2zQbW&Z9(Iys>c$7DwNMZ>OAi2}T0PDo%=E1dCK>*it2TuqEAofJfhJ%M< zgB|H!h2$Z>$%P`)O7q$rB0YS9gcKY-@pxeSa`!WbQeoSq9 zJ{;W>^#0(jgwVE)Uj(?HOeCYH^jV6V$F(U-XnRu*gM^71sufs9rru=&N^4u!}6X zD}eq&NYCNuOlqF^2os#jgmSyMZXVIysKk8V1;9vD{KkUx{a-RH@aGD9|FNCkASGg? z=ifzNW!&IVW3Vopud?TchEU=j!ukmMVthI_c~K2;kI>8#kmu$AtpcKy4pK~!`JnV^ zV9jN*=6mPLV$8T3P=-od7wKWlbjKFa5@R`jJ`NR~s)viu&XwRKmZP0_|2D?4_dE1A zSe3Cs45JqaJRcE$O7^84>-6T$Oqz6XZnxW(E zmpy*ek9WgkM+fr5bkr>Je{0gtR1;mq0}Sn^tAJGF?D7N}?~=?*evr#ZlvC)qcMzKxFQ|0W=+(F%LrX{A894(P^TaFa1QWV( z6j-e^n6(^cQ87Kz*xUI24goDUm z>z>(?@R&K=kALKMp~CCn^nD2CQ=hKIerpKkIp z4-4=0dfwE|yL{j@8iXYiLB5F?Wsns1U-u1)f>9!ku)b{aJOf5RHv>`^%d$@%-|Y20 zDF4CN7}9TfVM+gj?F$e08!bwqi*V?`N8*BZuy{aLrz_xkw)CFjlXrV}2sG}y8+I`7+8un%LgLPCiSjFM#CgfVDz4MMDbd<)(5mN0ScY6DL|At&74`kFUI0b;x0T= z9mNs7r)t{RkCdW{R2QanS z8$)?r5f2+ru>NdUtG$h~L#lBV^`Pm%kbvY_TYi@oy@{`d0$Oj&*0R+(!k^RQsW0xW zD7Zf&fH-nD0ls{lukG#zgR&Y!HY|#uIQ@y0hP_Q_pgPVdf%FQ*sf?ZAI+&smA~^iK z`6{L)AMw7Ni=CuxGM*11$R&M1WN7*;v(BYNzu&A`W?R>CQ3wx65ye+N`JuKE~H~)NyFH7ZEZ-Ojza5a6!?I?>{o!}6D zih3hBkiaVyOOk{=Raak5+$3zp5yfGpiY6co$x02wcHb;qk%N08-neoTxxWkzSSDH7 z3DTfffi7cry~H!W|DBB1UA(Ea!4f!z2}2W$Y3UzOPBMs81H5V8hR8! zw)WW@H5nZfPMK@O@wPYM(2lR@zxk5LB3hbg4XaaUvlXInlDke+OkR=0in~`F`ibp! zjT-Lhb-QF}C6d5@f--gx`jXUy1?pjyY`{-r{jo9burBA-Wg~?Bq6vRh@RWAqz5)C! zrz`o_jSOKL+NdO-^}RM=$UR5uifH?wd}hU)&t-Y|*=U>l%V`U#;vjl$#@f60OdI-) zug=VWxPPCgTwX>#uS^2!lH!adhTc;XTrCE1cF?2E`BsIsC{q0U=-XmCR(PQ4T}Lf& zCF!K>_<1L;C!9R_%p*A`b-q^fBaas+_P}l!mCo~DIJ0(M2p8XVY|9VPE0@y`-ckQm~7K(zU%9+~1nfI^LfA0We!**(^X(->Jwwy+h#m27rYErMNx1|rvX zdW6wKX$b$h6j>`JarDs^$^|qoEq9EpW)dIQQsQ2WUm(Yoh9Z(Qy>cld_LNe7=Dvzz zILd_4C zwaLJCsq(S3`PA?Oy!XJ{XPVim?I@U1LGCPIw~5P2HG~j-uKG1~#{p6$dJwPsq?*AX zg=SocBpGD_t@=s1U7C?Z(S%{-V;mz8u}&xx9@GMG5!(p z5W-%5N}H2|l?`n4G@(sh)pD7k7p*7pLMP&u<&VObU+)!CG$x5A^i4wZZ|^Zt`+q?}L7Pp*lQ0u zP~9q`pt5ER{CDW1@JT0(T6=7oA)#VH+F%smsoA5#mSi{bFB|B8+9C|NnuXSwcrVkt zUgBp(kZ!(!pPupXLMj&qX@lnzka9j2=qqDQ;X*NMu-(#mcfOQ` z5DX6ehD_;+o#Ma|!KxO9fuoG+OD$6-1$2Ck7{#Mt4NChR zDysAmO;hkKHxs@-h|aSP(3m_j3f5Lhta|m#_hm6r{bz_1tLUu0dr5{_YrER-;&tXG zJVG{oXnFL1YuF4t6;o&rUT`W+N1{2v-aSHzd+@vOkl+NG#zN+504!8QwK7PCn;`Y=F+$$l6a3r=gn}s}AI$*=dsr@yAWB0N06kgZOn=Ou;yyit zZJ2Q40GtYA0PWbX1K`~#{h-VmWO_go_uzM##4b4O8e5K zAS;CdUl$zhe=lHG4D{EaJKTk?frAp+kXWsmbxeZh2;Q<^;s3?5$AlpdE+3{=3GT$a zp>XyP?@{WE)t2C;I7+=(DJv@&cQhq8K@6WXi;8AX4HY0>|pD+~`p7+Nm!pX}*3y;a_>X2`grPefJ$0hM&y^}botuH)A)%5t;_fvtIGQ;`*J+D|^)@)UK26Nq-C zxa4ANL*a1FtI_m&7ze2nMWmyrpMeKd}3GQXRW<$TiMSl zp>6+{Y=D>*(U3Do)}@ID3b3W6&TQd21iyFpEiKn2t^}KnuIJ}(6a+jLrzIT*Y3l!_ zEYfs5*=y7vE!kqD6@^~_s5_BPo@AVE60YATvDyK}18swx0wbtfy;vpFief!KWp&eb zW4AG$_SVatf(_WC$wr&_!5U8(b-(&!5K418u!k>}D1OlSNg?8vOB_yLkG9Hvw1!Mg zlp{KS@_-2Eio^np3qn8jsXnuN1cuRQM|>6+6R-9K8b?S(R4(SHIp}wC3Y2r15)wnT^1X z_bA_Aulq3ro1{{U&h%XuIhwO{8sS){SXsrf3VHs>>;=*ZtGAbZN4oftUU>J~BQ&v} zM(_e*r4&Vt+kvi%XK1>m<8O-4WCT~Hu*S;`skv3RvU@X_G*az$MhCtafcSKPs9C0s z4A#wdcLHVM_cv1!LsZqMYO}OnwjJdJ0Ez(-D$DwaR+)uxUYU%yzmckKjO>K*Dua0q z$Ma)d8@)S`S5N=Lxay*FkzOPfex^iHT3lKvc|ZNk{-hNBYe+b;`EyTeF*#F?QZ|`` zFN*69R>6&DUvoDUYYdFa`bx|#lRjl!mLdbq=ApR6P66+?%oC&GlMC#)WglDGn%>z9 zDycz#k?W;!s5Nly_9Pa5ke!h$rHU2F=G#OegqeXpCNR1n5e&ff+B|x7>-eKu{3;ib z5sOd)^Vx4y=PFxj=Q;KjddbpiHP9nA9h#LaZBMp(==EUW>u4ce(*0{eV+eF8jiX#( z$t)-bJlv@cH_^8z@FEdn{YYlXuFmr6`^p@Ho`Iuo~wGL z!T+{;JFhS%wGq!DnxwiUz4hw3>Y2*mp8}+Y(24ngF?)as%^b=eQz)Fc-f#SqpRT|M zLK!~&6XX6hGpZ#1Lw ztxjh*6sbdecOqwe%RW}rN|DMHNz}yvZPRm0rW2{3YCDk;(swD~k;&N5^kdfY$+U_o z!D%+j({`3bRhW00x^GhNp&aaVqw8Z7$VGdu?#56DiA)j{$y3Z9rQb_r%G4b9ryJEn zq&p4;h=Y>OQt&>QVo5YV<050(9UUNc8+Po7ao5kWJpfQYj0e@k@3>r9p(ZPbv5=L6 zbFj~ZiRWO=k3M)MnRQg={iF5S1$U9T&mE_#O+=|UNqQ^9XjcbscL1fj82hX4;`E+I zFTkTx`d+n2}AB1dE;I|A9DbZY~yhr%zEm6fM? zGwGsv+gW(<5gm2-@Jv>szSBV!*TszPP2EY-o#*pBwdn|+gLK4-Xf_sdfYs|vHTZ<53WXFl~sH_@}F_U}kN_*dM z3(@5g-K}yxgXO$=f>|={+_$->-wXBS5uTk|q_{F+`q%7N{9Y8naS6$!-CsM|?dS!} zhnx$=nRETIGTaz zT-F?=TA9F%f<sNXC*Ksz>n@gtfYisq?0y%tGq6C$df8|X-x zDPnvIzAjhEEK=Tu03E&uB2!`#1cNq}TuM{QrXhLP zfR-gSbzF^~k&DcP?h)>yy5V7f`v^QMXgiXa1dS|<%6%DL{5#4PFz$gTWdSkZV<8qs zy0?bL$f%1&O=YjmJj`@qEXzFoDeXiLVFr31m7*oQ_!^L6xjwKtcQmo0Fbp0uAy;34ubIOI6c=f_PEiSk!g_mZ& zh^^)3hi!v&svRT-pYQj33^Ock<7&L0xMN*IL>!??S#x5?PVEH z%@VCn3`R-$%`jGC=%;pXmKV%87~Rut%~P$60$|OHXd3VQzPhQk4LQi1Xsoy0O6h~# z07V_4M_kyRd4w*1BIBP-BWNibvfm#F`-ZVA?{ad$v@-?ro`H7gFm=X=ps!OiEb z+0cnGIxND)#wwAJ?WH-`c&q(`N8b^%^3KZuryeN`9dO|-{1YlSW@3ipqt$DvSRva7 z-Zrl4k!g_gzJkfpOy(DY3wXj&;Rq?hE){OkZ-;!V7FEvUKktdckOxNv1OO@9 zTo?3^<{pA2_ODe|G@6wBI|j{u1R*7uo6E`rewZS|f#A_PwDZ~;1-In++X}4elTs~R zorozPu`cCmOcna%N2(MHSDWu7=?n^U}&iY|Q{Xjg^Io=Jp z$tqq~xYrbdxs{rDJriw(eBF_X=HLfosJZGf7ZyY<#O^a}~l?iupBndUS4rwRZoO}Ef{+0PhAG^d=N*r|kXB52Q9 zMm1?QteMV|L?hqhXU$7FHmKR-feYcZo-|_6@v3WZ7)PcQ1|)3%^&|it#e7oam(VT~9G6RbqNga2I6pKHdCY)PT_F9U|K#4m@EK4%Ys`PMFh#hWVf(-GhBoL}gi? zp=ovTx{M>LIq@eqUU9P@`DuZqd_@IefY~m-r0B%NQINLftsZOlS}$j~R=4odlr}cv zZoC$y-60pE%ebPOOI`|;e0KRel+Y*{ynS_$6+9hVfo~ns2OHS90k_Kx-qyOc7RH7x zk->e2{+)eb6Y}3UFLKSjQ)?7Wg%@mQ9{AhWGJ?o)*nTfa1v9iN?rfX^>zv&vzgmje ziMqzhDFVWL%!7$6+o8r=-=bV+czyw@@za6=)4vY$Vbk8|hosp1B}9}q?$}39-ms6i zVY#`I=r`{5@9orwbcDTHYZ6I4IE_rc!&;M`Hk6mhGn!NW+VPyw3t*WVXV(82SLy2K zXX+?rWnIX5|AJOdWI*(;NE**xckYwxJvr)$I@LWJ9E=K%pl4C4f!lHT(YSNqJ~v@} z`=XnxYd+xytWQuI)+cZG%-06Z9JFYjD8#7p;)2^k5e_fpofJ)=8>@97xGrBdGYKF; zb9|aM^~lLU4l|>xpx(y(fT|Z>bfgccKC=52rLkq$$$s&nuvlArpFs#Ke)?WC3kzj7 zVur2%1FDk~%=#DbLNH>bAIMTr(+}TFJb(hf&t-()r!`OJ1*{hXvqCAt*!0}1zeO8y zNVby(eV+OKxUrM(z+(XmN9PtwqX_DDpLJ))74Mi=fWW|f@tjRiFG0a(BpJ|mTIN=_ zZ4iVLn8|X@nwhQeq893KyK(c@{c@_t#_tocuR5qUAE;odWB5_M zDYSBH!A8wfnh-1nbHYjz>zn0Fy4$+}59Ei!qN#+ny2MjWoK?82-B-1;SRAieg5O+oe+{K2YS^}ZlbvN`l&b|GH9(sP?u&mebnlFT{ArsY~4*NSyVIE#Q&wniKfX zF@x`)e&p(quex2R3qT)HiwhsJxU40E(feajYZ76TG}GQSc8WJpG;mbc$eHjJjDu9< zdIlqIP_VR!x?UgSuxDs7VeCV?ZX%A4$LvZN#;QSy*>{q$Y40I^TX`Ws;wlrFEzm1s zVJ{5_Nl|(#O1p(`xDJpw5ACAvUT32Z&UsrQ9!U6z~Xf!|!Hpf4b}uv>6|hcxmXt^%G)qXc=7XZ_Mwn1@g#^_dvV zM8yS3>3)mrEKSGfIw_!d;cPA{RkO?D?2r_J<{(!$#uUUTi@+%*QO}K*ik8N8s8psQ ze*h1^!rUmuC~j$QHe{k)!h$`oaP&UCdIKUkiYh8p95f7<)z6m<8ZvTOItl9Yx_Qrk zic)%vVi4V6UVW7SP7x(=BAN?IAR1VK2mAN(7TgDy=z@2iF_8Vs;_zOx6fD=#^HrXg zvf~Z9+M{T$Ae#w7{cYWCHoBC)=G+I%i1$N?&r%|U5F@&}f~mwzepm@xpUgW-y<9RD z-Wsv>C*fquu~XfQ9dr0CW<)~05?=u`FRmce{4SQg^m{q(Y-FMY%}w9N*3-Sw(982_ z_@XVkuP_Y{;U70jpc4C=_TgF)@e9rm)=*&~C_e?Y`%3_~7q9$58`t~^^>O$)Ujls; zgzT6)G!xgl7n(Erv>gmj4Gd^>N{&=O|6=EOHs*alGVD*kVmL=x;ZW&J^D!nn=JUE% z!NbR}Nt~}QLwt0rxepC_r-U{s6Mw0v`cdbNRl^RFJs4jyBE7xSPkANWyr}u^tSj?A zKN7Sid(Ke*vv5180X5y+<+cLQkYnd2>+UKXK1-Y0nHeXzG8t8fpRWc|s^qnvSquM9}$qaX=Q!y{QTu)fQSD�gf28)lz+bzqVQ6Xlttpu+425@P3Iaj zYoc-eW4>G~ri#3y)pkH@Fk$qee3z!tjjO?uXXV%7zz2n~H@9xW988)O@1o)uA|W9U zOXnRWlISu&uw1HVzWjU@bP)e>O3+Z>7|i~-Y~w5N^YLX=dprD|>CN0)U^>(40jN;+ zXIKQv-+lTelIr<2rzI%VboajXyeD<>pT*2%Vf{VKD>)f!ZTj`$y->m-@YV?0P=Y&2 zZNqk%(*9}lDAOXtC6qz2eX)h~q!A48O#Jt65py!l+FO(h{X*B+vWVBen2&y}4fro! zy0E5#r3)k2pO(`cwyk#^c|LAunAi`Y^iMN84CC36y)z-`7;F4y)tu#HDK7W8g`kw8|*bCj5 zh60rcW_Jvv9J8WoBsISuEp{#kviyXeX34m;)V_;|rX>y9`k@zN&A?R>X0r@4=bxBO zql~R20-p9)PMTV3Sv<(nFm; z^UX0|@2e&DLg1mxUXVK--B0A5Eo}VPO>NYs6VZd?yVB~tZ>{OM&%c2}WDa;&)IDYV z&g!J3E*bW!ZV7$#Iv(kK`?Vqp+*@j^d4w?Cj&yhX3Y&7nR2sBU@*$?+vN?@e`eJY7 ztv}r&bsxZLK+q9Dz{*d3Q0hY0-5ZKZnK-2Perj zONwLhI<2MW8qXI)rWwQfdSO~6QG1i{7UjQv8F`h{t?Tyk2-v+hz^m6Il!t3x=(9$1 zp<-Rx1J!Qc{(1Jmk#(KArSe9oG+18F;(cAVy4Ce?DTk(2#};l*QE#@;kWyhrdFkF2 zPCi_pO)Wk6l%d?Uz?{*N9d4h6`*+vPX|qas4<_>Kt~rZIZab zZ6^%!gOa$rF=6`k20k3;JUxR>y8!PgklL40ZCDHmAe@lnM6A9w-^e!=g%EguFgEwf zTjH*b+Ntfzq=Nb?U=vyL!6T3%o%srB{g+=d+x)iB6Ok|tXiGPBXb(#~HKoFQor-Pt zmc>Jp^~hOs5JxM-BstYsgkOKpY zqBVXM0?*934U!70$9r|WHeiT6;D6v_?8vw%b4$wZ_f6#`a4XC7{WEz zzAC?Bc?aqY`0&uoESO5ku56L){<_9OqkL)&2XT&E|Jn;#ivj4=uvyAhzQ4F{jFiuT zdY0VIzaBiPQxQTAOlcLO-}pt|BX4=!o-)1K?^Olc2gF3{24g|nKJyI(($C7D`3vUA zUA^y+`^nqhD~l#C_Df5CZ$!X1H)oXRP(iqm_fA!}9Y+gcVOCgc=%v{gEYg^no4(O# zKT|Cy>Q|G%k=2Cj8+Bz|kQgFMwpgU)0VKHp>wSzqOT0;AHDTeq9EIc{F@PH-b`$sN z?pERR0Si%HTrArVMc2TTt^3uNRA-JL@Ki$Ks9k$Km0kVJ#PLlDjjB-wS&STKbvURo zO{Ky~_}OW50JM+!cm0HV_rxT_zJ^b>m0&8-|gO3WXExK}5 z^PC+RN>=fq1b)T9@ijHkc*$}_fC21OqW_FMIAywmg59#b;Mz_@=VM07Uj4f$*9XYI z3c%Hl{3Kq;dq0@z)(E<5kNyw-XF8cQ#sw=%q{$##unNb3RpO~4Vuxy6=yw7enT!$c zl>F2&xUHn&uk8+y_En-vVh8{{VlP|Ukf-o~>L8BVQtU`p*%S;rtnO6&dNUka(7TTL zpM5JI?|r7njjJkDWF46D&-)j8ygivk)w3FX#s?`G3tqk1QLJ$mFLT5w1b1?(jso_` z0;>h&RT~G-J}P$J!D{)*N;Fb?C%hwL!Ba+P!#2hdI~C$-+DpftsC2}w5QE*IFrBkr zf>DMN@ZrhzLDRS^q)b@yNQl3bDVKaiRwj5NLoZVvq~b@3 z-;0(7`!n<(H8T=J6Q9zu=NA2{3psN{uJxT~M&P)fa!deN zlaI++Kl^Y*#*;j|Z)NhO9Vna|7Oh%Y zJnceY5GUdyY@lH6aBdMZQ$#13D=e5u0%!N%*m7@5BZKi!3}K4twikY_UK2?dWU2r| zK)k;ulSd!sU~s7fiMTSlKh9r(6{}D7J4#DMw|kQ1Bz#i{=A3x|?uCOarY}#}?+~Ge zKqiCY2Oxk|^Y_zKmEXE;*B{cgZ5c}!Uf*f#zk14FEYvBt z#?B@BC4+jM^JYODA}ih~;JEA0kqa=I&&Ys#wA`+w8W`|~jl&F#|Bb%m` zQSXOks{z7It9}*L3TJPChB?Gh_;)Ex`k|!?CyYXi=+T<|Oe^Pg8^+6Ok~wB^{}kt> zpCKP3?<+h7hyi)H^jzse`GB1u%nIfI9eg=#0q+FY28ei9mXx5?plpo6SR+CVQ`5R7 z!U$LT^xmLCWB2u#Xg0v7hO|Is1XytD<-CX3t-BsBVgy>2lWudL1~K#|&!fqH9OS~6 zpm_AI0m^o-tG&V%$H^Fm_)~SwJRz!b)D<@#tKBE&H|g!|kP~BnXGMjx3?B5~$Y`*d zi;#)`j3vcT$z_6^u-j$QZ67S^z~*l&Ydi5J@qJm ziU0TDP3aq-hiBOc7XI4+!9hG=q{)@1je z?*>bb{VSkAaErn{t8jc_D!>*d<&Joy1vibo52c97sZx+;sAD$jqBYRw0kw#qv?TA{ z=T0pKab}Ncu+U9L8^Zl8o$=pFZp5q{GMg(7WUqm8!-T5Kq7&>ZK78D36`FY?5EKu5 zErbq7Kn2I=y*x_O+uzD*wGx$F7VFx>_ZB!7^U$S`fb!UTwOBFC4dM3kueSYCM^mLq z`cxo@x>GF)nbF1<9>YAwtpjK;X1_8wJXjt5#1RWG5bMOOo^bqPxu{ zqWy5=G+3CF5}#+WX1XpNc9-Rra_k5T6d`cQ^&?oki&4H?^K))AKa|+VzM|$=bna9KZ&Zc&X8}++OxL zudt_75+;StDuW~*CB)9kqATdSb}fod0t$$#d#c+YfBmodM53k+K#wdPaUb8N3B0X* zWFgSnto;81+s8k##TCjgdkl=QDvDrH1r159a9dR0aaJTL2RO)W3s;y(HV{!;V(#G} z)E}J%`|B>!ch*b4;J(*jX}FX4qR@&m9vb(QM@&Xt$wo!~s^sfK%UswLN?BX@(EXt! z@5z02To3l~P=y_^9H#Mi1H_1}9PNwOf_UWz5 z;muVCnG}zya~^9m(Z*JrAc&NV9U52SXy%U&c8c1H|PF& z2Ew|o`ZUyb05LbSBn}F61M0z4B+6gEv?T!v^p2w4qDt6a>(&r(HD{jWUSFKe#oUz= z-;0U2n8>Xxpp#T$a05+36|^3x3Qgs6e3o8y{1-y>BiB2Ow>tk78pP${%U^p>P6jEM zoYHdnXJpQLVXAEC`7FaLB%H&_BTX4C0RCIVOa(SVajbX8{iS&;uB*#PNmsH!?Z5Oh z5AgC44)e6f)|9{zE{$RWxT?oi@9jc)BSBEoM`=#pV5_o%*Ff;=fsxRqTpG^xBw6V{ z^3>wOi*D|K5FlE0Zh#VEK)x<&Utb~Uw2%GgFkb+Jw97Rplm$USNMNxdCX1S@`wS>q3U(9ocS!JK=JilMAU#zcNl*^&x|? zM4K0v<3n{PW)!AU6O@ongQLaFj1Gi0Csj`h06wC|^=3*b z@zC8&Mcu3^u0Z_`>;k3gcL$C`LllBrl!QB=ScS<02~mx)@Q9nyA@>AV2q!nM7iu)% zhp?Ew(3(;}tm$o}sXQvPGZWcEKejpih!# ztAuLMpPEb!vCiv8);QPVNfXRw?)jan9y&%Pk_h1*k58htrB*K zP4V@K!i1Bl3)y?3RX+NFRE@E5#M;M?<$^1q)Sk9CeFR=>=71J;3VQ>DiG29OG+w&V zt$aAJf2gvT8G+d3{dFYCKaEN+nH$M6$00-r=SL;%W~Q`~eXe%yPhzBqc}I1}y+D5l zj4;I$T|OB;{>h-nEb76i;~`sAQ&36o!%;=pJ1Q!@C5JtLrm>a=k8Rik&)7^u{}pXC z=!(5p_euQ*`PD^}pSxDuX(G3B(BXD^KT$gX;g3s0QrcxEyFc3mc|MDs!NuInpw79sIjP2FI3Rx!ho`Q*sR(QA)JZIZ)9E560D)+X1;ALyi3H!wObFWAY;_o{)8{9T_Iwq+LiTdk~hin zT}6X>;Ul1iT!X)Xm43~vlW4x^2e6tIt9T3^8jidiK`wHtn-83* zXL@ZkTKNTTjZdo3@Yk{>WB<@0G>R+v(5}a#bW?EI>VU-d^JkT7Ap!;iRB82ec4@nm ze+P8x5>p0=MMvYlCsq^?#R(Sno)?acSC7TRTy|6Oay&i>6|?nR0XfoYl8B4)iWpfq zp7xA)!x5KntHEp4xc?a=ba&E(#+l1F(Fb_bk^tHN0L`e1cy)A|7?N=56K%;8$)f{6wzP>pe`G+ zp`WOh&|Ut^BKvq6YXGTM9Fb6DrRk&^E=qA?0CzmWhVft{e?`kc`mVemStkpFHyf<| zvsp@0I>2i{!ZQw`&By3su6}rZl?xclkrepLBf_BQF#1lf{c{}JUeJ6imOviik1y<| zU}eV#+rG4DKEj&JK@@C@4!};$|@t|B)4`DGfoO&Fv|!?_Xz$^tu676w0{j| zelDN30gz_CMIzhhy9hW^=q*74sEhbKYdW^8F1w2j;a94@UHQU3nf-iD-dBrNi#AKJ_KOycdwCQws8T)k*f+hE>IzE3@<`kxOOz`gu2O5 zz?Da;aQZ9C|5=*|_-5(?FyTjdlDJ?&X}93TD@!ukai7 zTNNYj)}$F0u)wflxKr1`z6&ra7thHFr6!>hb;Rp6o54_m--e)>XP7(E)XxUW)F zV|@cdOxV*Yc`RD3R-jhfUn43^s}Kpkk#nK;*gm$Jpv`Y3T4#s!DegjP@&fvE!d*`z zKio#z;eo%!2&3O;5$^i+6XgWY;hku`j&Xtoaw2de%#swa9S3kdp+#KG?B%7i*%rHf z25}iUPpTSAu<0Gq&d+$BBRRn}X~%K4#bod2g+b(z0jP||&hlHSP0?w(hb9&IKUBA> zE=-jhgW-Us5B}-!Zf)%m)y&75v>5qDCXn|pphPOIB|}s+>LsRY^GuiW=kDy?)=9C@*8>9 zFa!vn%T`@Z%yoHVD=rFfasp$3EM~D0%Tham$3x3S2S@>!Oj)}cZ(21zxd|{?n$Lzg zNHHu1xBvS&tWW*gHUG}A!R|oM-;)YNT=@4&0LN0Pu~pV&x7MfMYbWW6-^o^!r67hJ zsT9}ZubRM)Z6g$jZX!khMHMnMZzK6SRqIOWs|A>$bhdf##FkW1HbG?F6Ck_p`>EFg z|73P|+YkQ*EB0hqy%+0kTabJPq2W>G-j-X!&UF*SLV=%_dwHa?rMhje>W4{30eYH@ zcb*QiNIc|X>~p3-sAm7i)Z+z_0;@qF%gY0Tdl;wLhT|f|p)lNtE!BdP(bV(y=`25` zBUOcyo{nSQWzTVJ2MN^hT~k5H222C^XVM227M{0fH2%viV46Il^boBxi*V84CcrTp zwqrr7=9@a?G(sM150dlHiWoJa;0jZeHYH4AvwvTr2w@9D*qD#!Rv8h|D)%R; zNZA9?>?!7g^I_$zw;JcdOHUUv{@hqv|$m5aagaG?NrA-P-zl2~+JGhhor+`3-Xhyb#@zV*>=@=8h zhp@DXLVcFvQP*s}HRUJ3l66 z$)n5g>Rq{0NZE|nBruDg%m6?5^6AwJEX_c@?g$8-j!ngMGxb&(1!e(y68CWfZB8Sp z-Man>dgw1Anoz|kfeNJqR9hUU5Y9^kC2(v(khH@$%>;7+!dICwTT;jP*z!Ukq#{FK zuJk&{tdJ$cfF{?MnO!+HmyABDs&E9WOv59R`gUqg*T6LA+S=J&8+*3ORhDvD6_sa& zv~SLeo$=3RvdR&yZB6m|wv`=8IT3L9i$U&Eg-GchQvg)|H9C~_YkioSx;Q2=8FU-Y zS(oWmUby$%^HuAO6;a9wOwUe@F~%$|-$zI=$jY3tH@FpS7=1p#mjV#B@rx1y%ovS+ zPb)Xys#h4n1nFm(t}>ZfNYbn0eCSMlwQiBgisD7r~|z*dJO2>0t@n%;;C zgFWSy(ZZ@4HMM^9@3cXv;mQ)*^{LjqWLTu)ZcvCv6dXR*6;cQrwmO&;$d6tbG%stp zUg0)eFK38!xv%9=|JvbW$(#>0*)x&H=Rb~E{we`zUyHaZ>!2$?`F$n8lCd>S?pE!< zhw`iGI%F7ZOd$p+%a_$?4~c5(mG=t$S#Tr>DFt@Er3jeX@m#(czHHYQPi8{=NPkzg znR!IhL^>~%_wZZ4O3ep^dq-M7L))S&BQO~m&IclWOFJPQ^AW>3`7{T%)wi9y>1R=3 zjJ3iKR%ka}udI-`2x4!$$Lcxgaageu)EuZY0lzO#AoGRF=Q1JDSsW8Su?) zjp@_txDy|ehw56_dbBJ|ZS2U@s<%?<87#%Ou9PETKdKxLwpU)X@NsuIT_SY7zcs^1 z<`K|Cvvj!lJ21oQw2~<6_57}8z0ercyR^&uY{fAf$Sl^>&XrY-eEK4QNd|);eDx6m z!76xl4+$%gdfyXb3ojvqk01D~*r1iE5XH`=O=|>{cSE*My6jmA&LzukWCZUgbA(e* z^pu!#Zu7ohdTovPr?)rCm6>-QdW-U@qpHbmjQu6OkADZOzCz14xcE7PNSkvd4tu0C zOoWQz&Dh!qR-BCB2!S}y=?hD$09o9@|EyhWtqsUC=|d)|vw|z88)SvZC%q`EHz?b# z*Z8~}&CH^)C>4h9q4&FbRD=!NuURGif2h2mgA;=+k5I_%WWq&w%mFxHQ9+SgP@rw8 zl?8h#D*d`0@Nf>w@0kj2v8U!c^D4tdokUELRNy%FceG)SwA1d)B%2m>VLs+GmRJ)Y zI_`QnbJy^Hq&1ua3eY50F@w?auX7}o^;3Q??6W2HG@$a1-!wH+C3jrh+CcW`ZBk+S z$(AB!_HF!mU0g^wh7{e2L`(ASuM~IAIo=3`IWkObQyX8(LK$j7yO0ZIsWep{ZAm6r zPVQ)5H4>(Zjdy>SzeX`#$BAKw`i7)3yacnoTcPijW<4E>v@yxsNRTgTY5>A)l^H=VF z?!sop7$v4+3urPyKjo2&nTlIOGXLxszyqrJ5P@m$HMj}W%r=i~XpZj}O4|P~L z-tVgvs&drR-zjg&$lnSCLEdZtD#tG##7)iCVK{j|U z0zY%zrEBpQrankq)#+yaih`;`~>4h zYWJI>fK5@OZK)nOwVa^M`5E+)jF$K!YA=iWUgk|#IaUx4kT+1z;a#adoC@{DrmRn_ zD&mIbgy4EPq{z?rTom@V4yxK1$bdUth3MOgOcHh2Sbk?Kru~Wrgp$1v$L3O=;Zrq=0-tEQo&MTxP?v7+YhKJ z1aLR0Ak*y|De+d_r#e*6Fhob@Vk;WLr5k9Fr%z=`1?Ry!NXwE7s0XHIzZRL>R4Ww= z$aQXB0$x<7W1>Sgk!7+ELhg5C`(~aSZ6t?j3)z0)g2bsq+p9TvgAay*ibPZjEpRns zrq-h}BHM+BKJA>gF%(Sljdfz@F9^qBAKuUK;e+4^%}V$uaqOL#{z@L8V&vsz3KH|m z7k^+NYzztvGz1+$0$h+bjIJ_s*-0l#H0FeX_(ru=EZ@9yHL zLgl>|#!+D%a#m;CL*6{bsF#B`Ollj3v0Ep~OmPPR3Ol{5;p2|CnMN*W_y;Oj-kDBB zJ@wvXJ)4r6GmKy@E4MVVwjDdQacdzG?lEuF}_nBFEnDWT@f=@5=UVs-!^k8cN^L$=@)gZ z08yQv8+(GQ`S?;dVjavsNaTuZ(^EPl+J^{mTDFC-WQUT6=Fy)VqU_Oq5(@1(Uv)4~ ztmI1nlo#g27d;U?{Rt%m8RR!=g-}a=1(wu1pj?HVZ>pJ{AH+2tf^-!>PggNYl>+d4 zzAshTU=etCF@Cl#uskmQq}2VHMXe@JW=J)-iM;J5^!%oxF>;PJ#}xioajH*Nmb-T# z&X2Q$Gj@%fR;FqbVSt1Jk3f4Bu#d8~dLJZaPuv~bxwL1Po2U!$zrL0N8UiEP@yYy( z-du*)*oWj}`-%sYZyVz?$ApVu+}Ub1wjz#YxI}H%=L)-u{;lOdVRog?BEQ?25tz3$ zHl2HaG>L(6*wBcY`lx4v?Iij)pQ^)9gaYU|RN$dtEG1&##Jv-0LR8^PkAlFA0@+74 z->&Bm<45Prh!}q~#XGHKbmVf|EyEM;^441=gUjSs+HqRqn3J^`--GA>D8r}vZ#f3i zkJ!lSU~@$`@e4Q0L@O2Q1iHMQdAjD1S@r9lOA>~R$X319ATwvam*l!b<=c57(v}(v zlFD$R`xD(#L(L-qPi0#nusM>0eV?ihP^@ymEQ7~zsU-6Nm?Z%iL8)BaOZN#e0hG{TX~S9h7rX$B?iaQ{NH z5f|x$m|>swmF^D$o-2!fD%rlrm`b>f%CwoYda3w3Ma<{Zj;hF&AA~=U=Qa zNhdW#Lv5-po1D7Z8#eh=N_3xAB7Z(sI!iqac3#x&9>4UzvA7wzRP1KiCoF14s<7w+5TW_0~;O=44=!+k>Crh3-xxS^? z2UuNnN@U^#8^PcEc_*?98l%cX`qi{82`9Im z>2H0(wbhE+qu%_l@wQkoLNrcx%e8q+mmf@194DE?e*)7v}@_+B?o__gHzZ~kpNcJDqO-O8SjoYs_r;h@mW=>$3 zK0`N)I^9(_RD>c5{TNm90;vtNj0{cY(3OmHDD9ZIC6>O2mbkoISbugXItR$IePAEe z&48!1Fq~v#)*JHcmA`B+$ZR;Azp;Jdfm!TFAkURWyt?KXI2H1VV5+8hO6j1IHC#+wP%+*}oG&xViiGy#8+tXrM z{_V*5biCad^3uG%x8gd?Vc+hFtvr@S^B1!SrEcM#l|jCBV`m647JR2MRuXQ99&-{& zD+{?FxYpm(b$cv&i3rSh9-i=#%r9To3%bMNIV5(*7<{#5SuS1w@cI$}uXhkm_cgPO zAKBMrz27uh@5Ec8$^`xd4vPGk?V2-Vd7K^1v-ULvA~eT#Q)Wvr1F*jK5s;bhaJ=;r z`a;KG8k#in4kdrz>8s?*e7{0cg@>m=e;xm8w#==4sLM}k&bHG7red?LV&Ot8qLC7b zWvR)0eJ>y+gz7jc=o~^D5F`SOPjTe|Q$Ya5I=D9#KqzG+mAA}M0ceYRWG-9HoidVT zi(3=@ODs8zZx7072ZlAti%$xAB<)C1(FJ?pO*dAXRd8{qFT?ltRN0hk24?z5cYlv| z;l6m?8)K_8{xtmJicQFD!8)}nrCXTOyU-q3)iI3FfaF3B4n z?1Hh8kSkSn^?wH=4U=I!nXz=V^xM$7>ySt3W5;$a(lwjjRpua4euu^j0i=)Y7Ply3 zuJ@AV(2n?C3EI8=D_@iRmNzpIpzwd%Dg!KgQEW{DS3?j90_5 z;((U=3H>VFy$GiN&`3 z(SDeO7mGhijVYjKP{5tuyco{{fq{1#NPwT9w5(Z+A*NVx{Pm2?PwX~A(M%LUC9S>Q z4iMXllz9{#5vwg)W1ssgCoTmW9uv0SZp+2VPV>Xz5hWbD8Efes`VmI-s^wAf^8zmv{x3UU*?25l@r0=epZCxhZ}yqJRh=yaCGOC^Iu}5QjOQ}LxM7`hdG zHNV8A+r{FJlSP&ZzjiHe*6aO?e_<})t&L_zJ^B)9oLoKPl`Ycb9x@B#{zt~IMff== z*@$Ye;X`^!`zT|LNGq_Gh-cA&0-7!8I31G}S3hK*=JqmW&chungW=NPg_ZL_LyVet zj|m2U(pWwUE_IA2AjfXupWh0E^#7LwJ=1k{BeO9nVS@hT!k5(ufiLY_c{^%9qu#Yv zq}l_bS>?(;eM!9T>?!W*sn;6|Xz}$1CJI#2c6SuqrsH2a(T%{Gtj# zK;<-h`wfGUYZa2!73$r7`YJ~A==YtvOEjf|TAwC+2pFP(YdXw@$;-MEegUat@*vGE zC!2pzoy#(4{AP35n_6r*kawK1ks7SL!gUsd89~1eTs(bf9$zcdt1Fim9U{+R?|hVf zD$&MF))4Eh=snLv<+oU*`l?GP5+V>5mD+|xOr}|Q)Oq4_$#|gSEE$HnD5LX9XPcNjV7cH8g1jpOA=zd&sO#~#h}^YK+KnmNW@e!zLQ%rymuSABhFfZO)bMJ;X6cInVZ;~O&HNZFEJ47m}G`| zZ$)Lx6OUES{=3nNR9uay|FfF0=5$@(73A|sr3b$;sBe`BzHZd2s|nWcr7>-Mu?{Zd z@J!5T$OWix#($;u1F3&I(-oIf*2S6bc>gT(52h3)a@)e1xFoUsQccoVPSG?rBez^4 z%=R3*W(*d>t9t+B$fD1^>qgXMJ|-h;pxr2l8(B`X%LcZXl&?*T1md|hmCkq5Zplk! zHe92a{!!E(ugy`0>L;R1SW#Ug)cNB6iEdyYr~QktR=5r&Qb%`Z(!Ul6XYOzO!pU)3 z%Bka9F&eB&i<^j%n=gxi@J!YPnkJ18Z&`|py~)F&sf|}AMe-nqcoc)awt54~*3=)vSpY)(5#g0_?y&P|DpQx=`AhZf#l9UQo4mu59Uxp*rbsRt`N)v%-E&w;m9)*x zms@f#?Qz>^Klie;>9#vVCCOA{Id6WJn3QN%bH-QO^|AB|ykD+CuYi$0?WGXB*t%Ye zZyD9bthWKPk4I`*m#QDyN>^Pm){J`G)@GN&`sFZhzUwZPV`OJgg@mrx!~;UM-W_Ti z!O8x*n4i>Jm3@Z^0m1Fh-wJdj37ez3-^tg@>WsE>$lCOGln02?*=olNJ9;_*{DkxV zW+Ph|9_Lf?4eRIm-8g=Pbm0pkj|uvi?Kgtx;0(T^CZ_Le zo}57OA*h-W`|fdf%A}-d8D2oH2Biy0zLV47 zJ*(pOnEnl(mETB)?;Dip>c)f$cn4La8GC~5Rpk;W`%t9Yy)l2u#Y6?{z(TvWPkwuV z@UR|TI+Zod9y6DocjZ8}LC~%e_XgMp; z7pNjyr~*!{s3K}Abe>Kn?HJv!FkfuJ)cEGSqo)S=gmKyA1+*Z6YmBEaYpb)*4uDxP z+_1!7FO8$ZB`rNQ0KBjxy#^_xQRE;%+a72iiRFfne`8%0wrAHegUbxk?_4k`=n~+4 zWH6Rmz@~oW^YuxklVV-GfyX;hX^tO@ZjMZ@hlclktL>nsX6BR4TlDJ8bie zLgocYZ~!4=fy1e|h^^r`p#DrK8EmxD1#HE4yL4$Kz5X(LRG;4cw^&JO-@n zjw>fGWT@ETdbQH)U*ll^rEiuCpxvsx!h6DI*YEWY)@cm0KEXdjvQJZhTNrw}DbZRh z#2>*Qr+O%VDNIXt7}t=u`VU@ni7*m?l7zV@7M9{y1(>?nL2E*86ceoE;st_X>JX&)AkJDoLlauLocx)%v=aQNZ zB&T>WgeVP~Pb@igt|z;=TpsUc)bAeCkZ9X%!+oA0z9=m7PKNFxPlqHDWeDi9fKiTN{jfg zS=Km2W~8)kBhfDe{GF^76)20I_5t2RrUm5$9{itsr>YCewvLI!qPS5%C&Zn7wEcxQ zG0Bk0c>Y>No7!R4c-T9&n`OsLj|eL|+#KZ}_^_4p6Ha_Ndz{s~ld3?`0T{*O8Efc3 zyng~TP|g@d7$Lf&hd8(#)}u9Gmyi{IYAS6!aqe=h_=Xju*57EvG@en5ucUYF8y?U5L?7xp3>nR|*n zSq#Fo&n~|7iSZJvNnmPYfA`(3Xjo;~Ip?Xx5BmyRlDVtEw<%cnd_Ty8M%GNlo&w_H zUKd$s?Jt)}A9|}?(dYqn9ExSOlWj>jtK<}i9a+D6uhI^>ZW)Q*!B!{sB{x%J zoUaa=@c?)IQh_ddL-w;{E5F9I7OT%=(h4Ay85z1@wgwTt{WJMbR`BS&CAJ}Lz}tmF zxaR)52S&@ut$RXi2u%bM8*;2PyUg2)nq9MO3gJ;gl8(ne{q|Up1UaNTh65cp_ID3M zM>ZVa$Cj9TJ@=1CgMdxXz|3(hYm--6!?x-H$sC9~;(QzKZWZtNt7*{NG`3X~8@rGa zmScbh>$MbHj;_4F#mhk=qv4v_nA<^+hyfc_sl&2CA5;g3gUYSIW-7GoT}YG%P6eJ} z7Xwf}O6dz|%`3R-psb3?lA&okPBm;~Yhdi=67WN zXl6+CSxOyaQ!fAh38t0DAR|Mb3hf8%C2a&g{2K^&2>xuwAP^(ba6F&p9min(DhP9J< z&~7xWn-M#DYBub@QC`u(Gv_Ig8i&I#z>dIsx64&p5wdhE@O$p~6hhiax~lfL9( z!5_`&x7W9}8T=^?%Y(<7dg;sk17PQn#=t86eJoE+`i9ExIZryH_HC%Nm&UnW>?>+q zW%M<(%zd-)35>YA#tdSV;u`BeJ96Yl7m?WT=h3Devbk59OG>NGRa6Z?YZ3MuhPAy* zpXKQUB7bWhyGVmaQLKEG{_u)uMN0R%&eK$!(pahGLr-unT+0_(ORP2LJ>4a!^}iuh zqHBV-3E%{H>4@uj4RQPLY(Cr6fh3c0acrCi1ls#1xkP=2$EU3EdR>EolWKyxRNvZ> z)l++O1E9EWq<9_9$0vtZK=U_QWc(7Y%Y-ObRi+Jc`}QAduZa*e-D~Xv8!afc=76xk zE%>z;64;c8b>_7i(FZ(B3S;=_wmtk)0-5=Xu-p2i+PAo9k|lr8#Fy3m=r<3z!9-A} zq2oiO0X;R)i0n~D`gz&SDdc_&9?Xyxe9`?fAVxr&Sep}Fh_?J{5)#+9UPrGiHXi)h zo4B;|nysR)SxoG2QB*?yC+53<;&^Fpfh@icx2Z#0e3-uC`+tH(9jm6+58Z$}hZGMV zsDC9U$S&=GC3;R=uK15PADPefK!1-r#^u<)>t|7lv#(B`m0$g^^?Ftegp6UnL#8n{ zc-)4@WLzTeEbIzady&$X8x#@Uy_PBIzU5S>BlP~9`LReFGLJ32vX4tfS`tld&n$L7 z-s)CqG;b|1JE2(%kwp%Glj~XfozBxs6WPWpSR!N)oOu*o)B&h&ZAgzN53_T*=KLuUb(%WHiQOq=Z{8D5OQ~a6M zya~ty0NA5F+MW^n`|FM;DgMSJU0shVn;J|aKQ}b*ipqTmB+N`gA2}2bP_HkB5(!)n zs$FdqT3MydC6lMcN9Ie*o|wnl(`QhROq5t8Dlt}Uc?HoIdzPm<@KACw9hOpK`;~A5 z!o&t*8r_VVWyKXQ?)Zl#Oc9KE%nmQN{tK|~;6$pSVw0YMuFHPzj~4}4)?C;8xNEua z-=nJ#x))nI=;@u|Xbn!(7|n>JKlrE2%PD`J>mYz_;dc~9(LWyEJ|AHoiVBr>fPczL zd9QLh;8Zu(@H1VoDYk@RP?eWDR5_yNfrPCRJ0n_eAati-7d)n~B?02;!0!F~DUa z++u3TuzSgPEYHTmm&FvHo&vuo04*y!bErHfODRPY?V?kh<+tIWql#+A|66g2m;pwm7Uhgqm|r|V%Z^gUZpO`FfkoKx7jjTy;se;7^w~X zSPVZlE^wFVF^A?P21JL{w`$zfA&(G)8MuP~QyHyvU+Aaw7vY7a@~4NaYJ5?mv;nH| zt^-n6*JUA^5rG_~8UKb(mENJ(LUy_m$>d3h#*!+o+bj<=#NTUAq#SL6D`(d)e?cKc z<3)KJ??^J;b0T zszv&`JH@+67bfp>XO+brH3c>Dzvtaaju&4M&>kb>7t#`FckC-jM{N`RX!qps5E}G zG`WgZ`HH3kqfhUHXnJh&Pf{!hzfP=Ik@8;<4%!>9xEx7QN4v``V(V+~HXWN1MU+HqTnB;w{R zvtaI(y|>JJ!ZuUWt8iOOJ77~3%xAZcJ=Vn%?EgrAJVDfWbg>&7Jqiqon6zB+13u9I zSq$6(H*xy4cX?W9Zf#a}tzGaA^(u0)g-s8I5c0B6ezSyhwG@Q$41ngRcvlsVu~n?j zh~?k>@giIGqgzqA`I$;sU1!dk3RdlyBf^mfT5X3BmcgMGa7}D}*gsOsV|{7Y{RuJP zng(1BcwJWcHY?-6HA@Y8@O&bhrarCST(BaCpc&TqV-Ztw<6#<9&?n#+?E%c27R5i9 zLAjZb~aM*|O6r9yGB9GSO(zcn*eQU?j z#jRwCZ^t0K8Agw5r*#;;@J(;sx=8Mww~kq zjDp;#WDrXtkY-69B%l$PukA~mc39&2SaU9pq|xqkNzM}bt6}`RnO}IVnE%3rV!Q>Z z2lg%C590DkVym**vaoJ=G;QhXHr;#9n*=331hM9_j?ghx8~@2er$iKW7}9lufC`%- zviUGVG%bM+ie2Mc&`xfv93D66H{Dzs@#nk622T6k><2oC)tOh2c&{1gI&l6o+?o91 z*-ALykXusqYHlQk4D%f}eNq!-QNEq537~zG$orWnf@K@=q#nn~ml&$5KtIxI$qvsK z-iA_?(x>f5mOZC-NtRx=m|c+aLeq28rG)%W-B&h?FjdG8ide)VkS9!_$$v73S6jA+ z1>vujO&VG20iEs7kGuKKP~ncu%fI3iO_y1~|C94}1=}iV->DauU~`Sd-c*pK^8fax@WmO$&6yZjWgx?P zIg^?;T2y}a4wr2Kt=cc&5d$5FEC6HsRqiot|MUC?tyu=#UU&R1V%{S(ur0wJn;015 z-9KH~KL(Ica?n@Lq2pGEw|#Bb{;!sUhA%Duk?(d*+=ZM!ofYlO)q|I;p6NgFGR{_4 zyB@-Ewl*v2T$@G^y>7UOnIEQ2{TulkQY&Qr)kO1tB&Xh$@IA4lL?FGX_z$vZxHgf- z0tSl*Opewo+God(!zQbK+#(HRWGq1l$G$8M(fyJs`L(=ms`pk}NX8-(pEPmnGi4xh zs(~0cXG;p%npJnuER+6_Jgvasxg>2dj@U!eal0C_we$Y`JGbrYJuq`14Fj9bi$J1G z;)1?@nz29_Z2aon-1%9}*nJ6ORW;m57i!9IETMjaHP)KeAW&B(svSVWvmLs2>96PJ60z_|VjQO-Vf)n1iw{3xa(T{MIvMQi9avW+bSxuJa zksd{(it67l6MdJmgGkqS0RGq$vzNYc@|XP;bYZct;zT_B;c^r?CGZ>oTD(dl)@5|FYy$v&h`MbhYe`!|(r3K1Gw-zjUDHk#vuWwR zxg32y081x*;rSMK<~dKR^;C|%jfgKdsV3A1zX|MLcPGAkMI8P^+jWUX6AtONqb1)@ z4D#M50AKfJ0b3JuL#zr!R?oOd!Y*#g&ueM)D_vvM)}Yk)X$Boa+O(o?ICzZT(zCTr z5Fp_rDd?@l-H16P5rnA7G~ck&Pg_HN8sH zfcqaY%#C=UbL9_;KX9!(^-S&jagLF%rD&OphNtw$gq)|^5Y(*_tVkb|HSf&z9XovS zUGWyY$^zX8uSeOii~k^vwXI^jByB7_4i+8h{F7oC>0for=63!knfWPe3ft;KTw_6Q zqEo)2>JhHb!nYTz!XNGbqt~P_7G>QuJbMT!j}qr|kZqD}8b*r;$?U}6Xw>f>_qz+e zp`k$(^R1>EP6XAr$yOk~x!h_fXYR)OaUgmWF2bvyFjc6krC0Sn>Y#K^80`HmFP#fsexX2^Cd+fL5`(%X9^J~ z-j-X;CP;_2$ujGboD?$BJLTxqcd&oZG^Uqp)m4oy`YD|X!ow>+i^-yGPEts5@V{q? zu+;`&+P40mNoEkK%EJ$$8Ida`=1|J!KQL>|#$i3d`muyQDxyi{%-je)!{|K5$(9r_NjLKy&{=Rq}sP^$>X&R3K;e#*hQ!VOAD{vmKj{wmV_k{}&$ zrFu>OBW-mq5=XWe;M+#&M_e-)KH~MNXj);;!*MnxxP!@ct z&BSs8NVQDnHa;T^%vL{^@Sic)$lXqJqh)hDHRRp;3rSk!xrtv=WP7U%L=PukYF5}f zOwDY|Xcw$lb=Y~&-46kQw^N0p2G}j8pD?wMAC1ZM=|_J?2xG|%pP2>+Q;#KgT*){S z<6gE*_#c;c8bp=dtfs;7SLspVJ{mpBwSg7{oQiI%f`G=hYErzgOiX?(8&N0~U-xi2 zey+ni7&ZTlElz?8xO$BjLtw z(MH;OnFkeT(}K=`fK72%=v>itt5OBh%BY_B*5lHo#Mk$MSAV^6(^qi2iy+47JfQXt z*gBt#35yQIvX^DB2zE6s4NMEUE}LrQIbBXTo^ur^SvTK1*6?U$c3`WuT`QCL0YJ19 zDgyxrOAckIH`bpiOjX3^o$t*ELSeR^#L$8oif&9y47~6=O3~$RL4~ku!wlW(Ivc+X z?_*ZC(>Ci0SPE#cE38(zYo43H7TwfpP+;*VjX9`lD0bL97N%nBWCKrljI4{k3&^3P zwSku%>*H4m>G>ONHG<_NzH?FJqggnntG8fbHLrnXl#0-@+=S&kPElC)&I3JGKB7$tBK^}XtsFnQ79EsWZz zzbN4CC{i9=3U4+!x8jfOd?@Q8KnqsAL3kN(d%ERSqZTge45s3zqQ31g@!`T;@}xDx zL+b%^2)KU_`N6!r24czWrKK`BQV!9=n0srDRxL}A9&J?{3Ek0AGu5R=A?i)0EqW>l zPEjd2QeF3insf4PKju2LE78Q(mk%of6>+bq!vM)ck`~rEmd|1*)a-HRa?S*oO$w*F zr_h&}-B|MqD3vofTLO+T8n<5Y_)+<>r}}!Nz>&Sz^B89~bnB(H-L%zZy^*uHcs-jG zJv`@4zCb6RbG&a$Q`+qqIb`bxe7~1}zAr9{ zg@f?nuv92)Tu0EpDed9nBd*MkqY!boy1I{@xXDUdD18EA--+7-a=zCDzf4 z62^9e6@feNK7h-C4L!e3YzDaCca6?0=)Sj&a z%g~o7_$>*(U0ZqD0tMM+&O)a@lr$F;AHfiEbd$JAy%HJ$V`q(wDk4Z0#PzQXG|-3g zQhqHJV)w0}W z!TiJkq-Lk^6n?0^GQhHbQEBpP_B$r^M=Ph>PfaaZPjJkU1x9)z=Jz z!OcjL@63#ba@O@w!z-+eX&ePMTuSf&4wIwi#DfvcG#AM}ze>D(5>bYAPf>AIfFIEd zpg(snu5{)nI&;4_Fh1kr(|Y-~Py+Ez=5g5)C6Fe_m1c5&Cn1|*j?PTe)iU+2zD%*H4qQ6l10vn9*0hyxWSqLaL(U>mITju%q@ky?LCYzz4Mrkxfmv%R#Vab2#4c;C&vZ& zB}o8WCZeBWFXTkdd%bXx4SAf@8=OuWI-oThjhNMTnahBKRkE)H$4l$igV@?CY%+fv zHya@r)8cXY*Fq0}ca72VRhN-zFR7<6wxF~qmK;Qe|8>UELqflqcJ)&{Oa4K`Zuz4b zY_t8%kv;M;im!7M{N?Z^2wW$IPL8A$p|EGxvAztX@g;Gm8z1<1IpltW2-0)Mu;Ew{ z@9*XW87CzdQJ#LmvGSX0V;BX5U0;=gKRr)TsEnBKs9ON5`RX=t_y15%tpG$)PNVcW z24}C&bVCGau2bO-A7$?A2NJ2yh4)UEHM(98kpg0ZBy17Y4}Yc@Z@x~X=Vk$9-@pGH z!dRaI{1>!{64eG48W#GAqKm1fkZ_Vo$af$_LpVJ7UYB}SG~{m4a#H5#NKckafGNT! z4;&Qmm23B#&GJP0TZpZT&mv{)Sb!~h@fa}|AcpM>|H!uf%+K!Igp@+@%Ae_*uDHGy z&ZUu?X+>pras=TwQsU7s1>hcbgJI}_Grqe~ZBsRsib2vh&q{O8z~lwBQL zf()sGQOQ@`)1kE`9Z*W8WnWOJ3NX2&5w}UPwur~0JmWj)xSut12;&gkiJ(rcWHKt4 zj-1^Gsvf1ay4?7Toy^gbfwBj#7G!M23%KMmhxFX788idiOZ`@%dxjC`TA~%$M_9YL z_zbMI=dRl&KK%AkHOub(DIQlx%o#5rNl+2Y0EIT9}kMWqT}tC#637GD3KM(1Lo|9iaqewPbe6C29u`t03MB^V%x={wIB&<}$TdtqINvENCIfh+S z=fbJxOyZ{x%stsVUuk>LJiPBG$SC~2LsfOY9egK#&nj_)o}rw1t-Q1qG9NPd0a>DK z#AorYA{58GKrH4!zU(BvWQN4{I`^@A+vL;(Z1kipS{?_Bx#uHS?78R+A#wRB>hkA{ zpc@TLGX}X;5~0Nt6}K*%C!mTjRuJ)4bNffIYptb;9Uzd{#LYZ`BIMYlCDFqKOU4w| zqKvM(bo&mxlEClqe$iCqBFQiZwS%-fPpc=vK+V9LF?}O~(|&zI}>9CsVnG?b_@k z0Ro!}YBYr0eZU+f55!}ta%YWyY-3g;uzrxpKT#naK&_2Dwd)#z-Nb*Jv^ThUUZ#cR zrjj;_Y!58y&DyjvaO_kad24_tuQ!@Ox>M+4mmlI_QBw7I;lkC=+_tk)1Hwc^-Hc3jUG`75E$f_92lrqU5H12vb<{f@sDr7{MjHI|2b`(<5AkY0;| zVG@&pgSqCk33rHz98eY=j*4!{e&9+HmNRm1U63$ZVFD_H1aQH&_xyZy^6OH!e zrAYg8DM)>;5oR8z1zs#ejFW#tX^ebejRDZN$Q;?4Z9VE`4QTn^4lQ$ifnOEnd*^*A zTw>^^g||xhWzA9bc|MU)3|f~a3AMjE&U?uTRAZ48!b$ShpU@vaJ8C5-4hg;f;bGM$%#(>sB~g8&>2 zpSO2h#`S)LOVT*h?6+P+;hMLfxU3FiMun2+ed^98Vd9ZwtI_lq|&|M&7?yVMszy!iG;cM}ZtFCMo= z`1LV^iLiI~miD*xG^8-jzg0fp~?3Q;S@WKLTi{Ft;$5P93 zI`5Lx22ol)-DC9CEXn5_iv%n2_B->gj5~uJw#&fJ+G#;4*6X%sB$%~)r%5iR%T$W* zLYTWtk=AYEms0Iwy-MC;$-vdz%uk9oY6$WG6z`rZifM+z@408u^W=JWC6Ep?^Sh#| zOftQi?~!N#9aeV83zblc{b_N{KF^1;<$P;%j(wrNFlL|45l##b5EOI!@L;eC)o7aS z!X1G^epMtr6JgPaP{+TwV+N3b(0~*t#$!?g_uFK71Yc*fB!cjUoLO|^(S9VfgeW}0 zOQeV&#Gk|~n>5~#qk*Xwz>$LsMHU}HEKUJW%F8}O8M7H?u>ApaW!~HnXo3Qj)c6n{ zJ}V0LkG@&5L`7Hhx%O_QM|G-2Y9zS*o@tq{-}K)+@U~Z?+UfOV3C$jR8gCOLLoW*5 z{qDsVm|0Ut@riy@Rquv@?$j#hYU#&@as{11m0H_-G4DTh6TyHf!bE8 zT!Pj#nMDU~&YidD{B$f9r?<@moVrEH>RJVLL+Ft+>fd0F264>lbY!kKE%^m38HQ64~haT}Efn+AXd^6&Tc&*9Y7E zL>BE`@>Wrt?)t!OnW9lH?m&uDsJ!66{{V+O!=FGgnXU9}c zXTTRN6%F8NTT>T;CBt_nhT*UY#z3jfk`DRL&cnE@B#_*3#r` zwcqT}?RLd-{caK5eQVK5v3I=$c!c@U$k}6L`1xtQ8x}$HXF=j&&B#($8I>*Q-l;zC zEjZN{8Sk+xdg&AV(V0wdojxlA9L^1`Ui=ENA+zZ{VPNhs1Xg5=vnaCi?y>O0F&Mli z#B>jHGX-B?5^!9Zlvy8GMYjQZ`E)Ihy>O#)C`w?a?UffQ&`7isoPz;J0#?223olGHKA8KVL@-2JY3MYCPOeeEa{|+zlK@6yQYh1J8%-eGB(3-I2@- zo+^-CbV_bXf>WSF`cVL_8nPiF;jCE|4OAW~hz=Qqj<@W)*B}TkLDkwekC>;;D0{2+r+*{JG(1qx6DP*;D zP@JY+xu0@Du$%3TY`BCoocRn*!!-2T>>nb->;_K^^vA^;UG0E-K{F1Nai-fjLca~F z6+rySe`BX7866uQ1!E*?k=XaMA>B*DjcemOlu^`OfQ+j4ElgW9W}4K;*Ue@ zVzq2&xxM3zw1#Bg_nZDo*(7rWJccG*Owh2xt+*_v=l?WKwq#4@8=W3;l|Dj6XxzFE z=TUS05lVpd#Zy)LDjuf9d>cJaTz-sDdhp)#u#V2y$Ag+bGuh5f6@ZtwM?eo4w(V<` z+ur_UWxz6CDSv*R=dC|fO838B#6l%+L@W{OINZ=ChlhJFJBBld@>#19FQ~qReKSqu z_Qx*JH7*xu5AnnW|37~9qf599q32E-{Cj^)nynbz`oHR*Q{~13U#_f z(y;hzrUqa3okrq^q=0lzE6DPIK^HMh8SGCZ zwFv%?cJ(eFnZx#L`ExlDqD*md|D3>yc(1=u5`Roy#A!8}csC-2=EENQoSdhrH7rQd zT-ua$L$q}LQ>S6f6==_yk2i=ky9f07Cxu3US5?v~YtW%i%4rG+;823;Xlz^PwOcSd zLd6M>;h@mx`(-d6_AIj{q!JQddNDAUX@u%k{nCplF;xv%1b6{QNwp1n7l>x`nm?b| zWcXul6v4-W*6W)Eugy*n!28!GC#>HTv7~($>Pnmw&ff&aCa+b#Ik6zFh(#t*l5hZIOfb_by8|cK`i8>^@PPVXwX*v-#x=6$G~k)uinHIg%;^g5$?f0@mb?23L1Xjg>S|-L(TEtzD#Y zCV}%qI3x@?Q?OUoGR`A`Q6~HHPjJvmgU5QJT8>zV54fWq zU^!Jm)Pg`_ZCb!gV=5nkgOAxvUHpMqb``IOgr=j;Voy)lRxFyj?3ia9Bm%}jQ}5D= z1c-yV(6?s!Uv<$7X7TV-IZUckjFz?f}) zMxto!T%&k!gne@ow?!R5?RQ5wI@v+0EK#zQKrTL*C@9BKJCVyJFb;2h zd-ezGQ(&7r5w8Nn$Xte7N`hcJ#;)7Ck$Q`8-?jZ&-LO%Jm4xO-6rCKzDFdmGE`h-` z1!xic1TLmIqGvWt`@2_g&`UeE9Ck!V;@GDI5*n!FuGIE{A}!QpC2EfY^!34YoPXQH zA8*y?J(X2?Kuy9aS%ktCp37a&3axnU(DhTCdd}=x6xN?)giB+>at-$~ov&~#OJug9 z$5|X$r+DHSDU?^y}mPPcqGzU)8L8)bX-GKnvrPR7C*i6H8Kx_m}3Je+`IP0oOa}l~ok`7&un_WmUSX%vE z%#4QA&cf2GcdOQqcl2%k#$IGTm71`SEz=Cl1=jH7dFAQ%LxNp}{xvivx%?0pd1Am5 zIU?*>RFie_!o@q*#FKqOG9+9VN4M@rpDX)%qO5{9*JtEYmLt>OKvR3P6`FcC+>ShS)H)iM&f?~L6 zaKfKeu~=;y$*JvC1tw=n5U#?bfBhC-*xutl{2Ub97KI4F_O@94V4B2!UPBPa8GlHm zIu4rhfqRX79Yd{&mxl(#kGZ{uLxS-XMwC*iWzTI~(~(hwn%M4x3MI~rHCI9{OsXET?~r*f zD99TQ2J6$Tuc|bp2~Mj;7o<4d3xz{(H_;>8Yc~yTjCxX%Dc{WFT#p9%WhvKApaGKT z2`R!QDb<28e?8fO;2{6K&7T~xjp=cC;ErUSgyX1iW!pkDb<>GZCa}Fk+>j~VUe}wW z-{UmN8xtlum<(0cbGuI@IHt!&H^*POS<QsCeYy5b(H=tA`mlXkdeQ#KRySBzm_6#v^>lXl(6Ee{mE@3D+BV8{4Y5EV& zV2q7D+u*1Yp;T4Q)`|p;i=+EZbyDe8Qc3VWtoMPONS)+$yj!28Td4TiQCY0z=6^b?-yO$QsPm>n*xXRjZi$-Sc}LycqBxC zO1Ol7#RbqQ_al6RbC|9TOcq1))|Z>;k*KtzUGyc!iaMIos&7lAyM=F3+i9?;>Rl5j z+hEjCf+_7ZaU)OvXp$9G8Hfk{O`+y{z@n)2jFzdNH{2|!*19v_*1CT_Ne$r2cwasG zw=K+|y7|n<@m_ons*h0s(m+VIXSdm(R=E%|quu)hBwx*Tv~|TS zMAMty2Wy_(=c1_5{fsiG1jS-)CzbOv9!(zWgrLm?vbZ#rRKrkFn0M0E?aDxn7OV?S z!folJgmuE#*UAxg)_h7b#tcv~W6M5go&wu}xU9^DIQE%JY6WnYuClkJq-_^J)Fh%igxVj9^=IQ+Q49F*jgPF?k+$}wa1t3vu zq=1shFVdX%oV*z!AeH~#{Z$cJrTE2-RCABpu^3Kl664(HT)Tf0Wynz$lzwS&N<$J% zM9Mp@MxQNBXGVchp+}YT?M-1WY~>6o`4jE;Pf~fT715#%IWvwW0(eZk{Wn~TP?wEc}K3Uk29)a*=h z3B0~+sYn@2IC~YWW<|Fw$iRF$Tp~(eP{7+X3kScehSmoL;TA=j)(h8BxE&Igpyr+g zOzN&F5_d)dOl)fhBDK-9Pamw(NT8|=nFuR#{*J;tp;OlTF`&Fo_4*J2C!T|L%EoP& z*txxhy`UJu9Jg7A#Qo~S@RTs*a_gD~CoPiA(Pvm;!$iN?SIPP1xB*@O6v0T=;2zluMWMw@I?fe_JN~Z?70mLA+#D#O>I4+oL$}7fR(v%QOQx%X^Qu(>=ckHL7B0K&1 z{9+_U85JS)4@Rr^BDTkjbhYb-8-bsN=654`AphC#@5eb17d}dlNp07@5h5o%k!;nn z*Ia=NJ>nvub_`VeCo`N+@hGJ$jp;Pk{lALpGmc{YBDa9fRWbxoL9*>~iJ^vT-~FkC zriNX25>azBrcA$?;cvEIl5!~tx-GoQ5}LrRMF_x1SP@?Au04OuBxYta@q3 zI%lTt%oGWXgb2cJ)t?<6*P_%g0${H!S>80Oc8l$ouh;-n`Jt#e zpe;I>3Hl-OW;lfA@I&x^Nw^kI>=`t3{7j59iqiE^K}%LhwPigs$?_K{XtRJ_us+1* z&v7QYUP7Xvy$WC)1(AcJ*tsZj`p2FA)}b~nM^NV0+|6o7hH*3*rjG?ppd^}3B^ z@U!{%bYs7+n5RLY!c#DkJbidvv{1Hb8JAU0+?{N?>%Xo8V$Gx3Al0-J z%k}9WO7MzSx@%?u0dI3F+x}LjgUk#H4?BGZ@YE9o{=8B$64b{WcO}edr(l9{Hnu_@MC({&xnLyp*>7SAU*|3E`$I8Vu_|v@K4D9zh2-r0vB+%I)GUm+2`Ry)#_AwC{D#X8S|A zaP%JjN8R^ACy}q7CE-^nad8Q(>-O&6zTis5ii4!jFvKz?lugL0n5Mrjb%XA{&>b(R z*uTOcU}yach#aob939_tsK!r~4E`sILJ@sKu!Fxt+9YR8T(C!|sZBQN%jA$+k1^D! zpupDAEzdT99h18-h5NbK?9rYLzEs~R>|MsY>>>tM*VM+l!8wG1v1p?^?k z*RI?(6!DMjB22ISJGD5Wfp}ItZiS#yI4Zr*! z4YG9-<{pHbc6|CP-~y~hkEAlsI?_swO0V+oW|>e|NBB=wxcv(NX^wN4_55AB*iX<`VGI^z6y*q4kR4h;YwBRWHY!%F$6SHyjien*!v-TOJac-CdOLJ|{ff zWvKrttgD8TRd7nX*c}%E?ok2>RNbYGfBMhbNJKcEHp`R?^C8fQVNbd_spo=Ks~}rV zUppdw0?6CiSnxI(NbY0PB8=@~Z4sh~y;OO;8IQu`3e`$&|Ap6VkkKjQ5`#*`h?U@pVlh|f9 zlXw8+?FYC>Pwc9dbH4&7dyyfB%&RAs_Nc-f|ib{{DN|qClG@!YOQhMAebned$gg5RB;C zF{aESROjiyv(c(v`JJONBucyu-Mn9C{NC`pIyQ$#j`qj|uACDfnOugCrL9tzR!TBs zNwPK(qlm>50e z3$h{?5Vh{<5oS)eN8pKoRBg1FwLSp%l85<_XL_OQuDlC4%D6tOG`I-~s8KEcQC1o~ zx35Ekztd2p&ZhE5SS}n`-m{jO!3G(>ke;YyKT-p}1w4ledH0EHC>GNbYJ-P?4sFZ( z4As4hOxm65$VyX6<)w!ZRs9;10##yYLtZqu19>u_=RhK%4mzWw1`K=bK1i1;=dT>4 zq(VKQHtvi;%?WK(55B)HB*TH`)MdjBTKdiwTjD4@E>5kR^pMQS!QJ`W70n5$QwnRh zvW6M8ACu%#e{3Ak?(o7crNToRSRq4C4_XEF$*xJ%&-7#7FuaH)X2$))uz#c;G5X6f z3-M=9ZZ>={QB_;&nHM$~J$(cK&Kxq`qG7?;+O>v`n&B0mQp3S^AZ*q)mE{M)$rm;X z64V@h7mPpDOMw1*6siX8Eq?cMo7^$*3apOsE>xgII(}~r9;Q;RQtJ`*{-nArA&y$f zzZ1E3W@UpLKX262PS$vn)JiT^g1UquBk>VRS*}}L513RTc`LiC2bs?leUF}$&TTL# zuIk+QBLOf;<{XlZb<@4br?N1q63^!pryD@0 zQ-|sU?B_e%&i4kchDz=UWs&V*K2b|;rMe@}qwsKLXm%R5YlzZO|tzPsH7Q0OJOI}CRY?%6yAeQZW{fFQ(L z5{9B~?dmb@gH$jQ+v7J?97<}n)Gm%gM-`BFOMUH^!-p1eAchwGi^O8`V!Y2h#PEFB zOQR5N0}&_TK1rFvzy83(Ub}Q#Ku|i*+qd?K#5r$5B%FrSxF63j-0I*!{Yl2$mqp-A z#-S)@4qdj$9nONQmt7Y(aPC4N2%VOO?D}%(XI+T()0fNzI)n{EFILcA)eettY0bmVl?`S;2V|A*#|t!s;z$%NNPmUU7+c$@%)z)TgV zRwbPdqw~SA=TI&^C;W{d7hE=b2NBejRv8t0D9vHNf5Wavl(>z#F*?Dw!M&h&;!@u zsZ$Er?=h{y_9a862f-H@{(-1sDL{8@{pi^is1w#Vy&4jkJZI=dtwuT${UB;4pm#W~ z=Km3E7X?_U?ckM%y}YPgnlHgeN+y4`rl|q;=k*OJBJT!cs;E)Yh@BeLmMU6hi>PQP zh=6YtQXE!YD{WS|3B)OIT5E-Mv!{N3jIXge&lFR7VG%PzJcfuv_rrHtr@UmDz>p4l z6Z?(~54y@Ros-MOBA8Rl1@>rNy}fMQ&fVkY_`Rh2c4{qBLdI*O7_9;4AH|U1K?F!s zJO%ZN>?b#UY7I76P0XB=));4m7gc{>De1n}p6Gf~^<5rU7^XPrmj*kBR^riy$p~o6 zaps#{s0VBI%7+cl;_U16`vG0H=+A*1QIM#4O2?l_1Vh)HUOt99+3DuNUiB!*>*Sm$sjyMkq?*+xhge4zAK5i4IR95mCGj=q;R%`{*5H$E{wUaQ#ksIo4XJYT)PS0ydwcJ2{rH_bBN9q%2?S&yLmW; z{jQ1DN`h}@u6d`RmUgYby%=}`JJu+X;J4}5os@aJTM- zo{G@2sCT9n7Y^m;4~^fnI%C0E%jOV6+aGc_Ti;jV379cBHmrH8m`~BcT zsl5vPe6P=g?5IV6c%*ONSC6OLgHuVMfJl&w3A@SEVdEYL1so_%gh#cpKTVUog)#0X zsm-%56_*b8OQ$4NqS!G9TEEE5v;;ZK9*=xQHxRd>X0B>!$M+X)okd>Hu*YS@nlFDh z9P?pXk53U^?ssr!V}2w=(DjwO=Id14SH!_%=0>?w1G!F1>V2<}d99~0?aL$xdnXW} zB?dC4$dUcgRP?wE{z`~w(^kGj6cbEA4lJ0xI8+4NoUK_QLA?X((|qcG=vSJa4tx)h zAGFZv8PVO> z4*snoX?Y!vK&nf6A@uM=dx^ymZEH$5TDJfGpm;Sx%@jg9!Uz>OkwF`nnhS^($MBp7 ze9_;EBj>Df5I_$)GA%t3MhKO=4X!G{Q{k8R4OADk)KQR2ATX?V^*;rJRYXom7qYN; zkLoULUi5#!ILBu|73bTbge)TF(6HG$W1BlSjPRw#WmbJM%pu;>(rnaCG#;Uv<84%M zYa70gi{T;^r;`l2FkldG%o8Bv`zaDdNunP7!fpu&zq-2eXY}&FW@tVq;?a3ef*?1y z-HH-iEW9ml4e8tAAr>F`oBm(ED8G=_7C7kaDs|98_6Q8j_zslXZ|eP5H&7zy|y%90G5= zd#M!RRY;Pi#*eE@HKi$AvkTQc2jgALwmk~ zWr!*b#7h2-b86VWK;HlcGBdPYwHXC=;P4;?*^^R|1cVLD9iQ1Rp)6eHAaNKQrK$N zt7dP#fk%$rjv%sz{nLMWd_OvNVG2^3<%Rt~KQq>-+v^K80oO`z14|Q3yyt=sJy(`V zbD!ov60umRh=qfImZ*0|)9TH09#!+8=u~ zHQ)+!Uuqi^FlL2yV(RIfF>C}A_6`LNT0}*DnV99gIT*bHAMMUCMkb=8wYG|>Dk7&j zmEaSmp#X(5>e#MIOd@ixV%8CjNB86~Se_`p!p2I!6xof=QCIW}PDhQ(RvQ-_5}*{|5QGiY zQulM_lXfl{Fu_TDvjN~svOkId=;B7+8B)A0d@6jUu{|HkCQFAcK+#a^&!N{gtS1v1 zMm_o;O{s6T^6en{WSegPf-=@YEU78jDr&If8%7`Er~o$leFkd2h`nXK3+|0`c%$YD zdJ~y+Tg&8<{n%4doG2O|Hce_jpi6zu1wmSD{terI$k^1oO{}@m3~#ECkofD%kLUJ_Vlxfaf32Q zHkp~Bponnt#2$rx5;j8H$AjxyX~TqAH+%tBp$Xz%ie2-ry6q|t^%`&WjMOtGAY~e| zMSL{`U?gknMjtKgkliGwY~ggdfzg;+xCJ%JuwykKUrN!YTWy)X|M4X?V!{h7NBs{{ zm2JLL%hAYaB&k}p{?)XCs(J=X?nf*V@a$e=z(f9nf#0e@w>r1C{^=zLe9w0!%FQQ( zF&=V7PtB>Yp z73BbQrc(KrY|gkI8(Ekvo$xz-XdE4yx&73!qIsgbu6p-U=8QvMILe0lCZUoc3M$yA zph$m1DVM{e@Sh6(GmMyJ*T2HWx5#b0TrCP?=dguV6F-S%IXvu$f~(q8kz1e;w=DvX zcnrF{SG?ubcjn#PI^bD{UqZsjn>n}`=3V3;((!@}0M_6z^L>x*TfsZz%5H!tWa`A7 zg|3Lrz5cRZsZ2Us&u}*i?K#!dzhs3z`8pyHkRK6ah!2U)+8liz7QItva z6YLDl)-{1<@6>~qdkg%cj`nvmRx~c%O*ndc7JPcRV5HwS`K9~0^U7Kv)#SkZ$8@ul z8+KO|Gc{-07pj`Q)r-I#vInfvqLELDjI6O``@e>l)!gaS6@uRDT_^J7Sh`S1=_#=# z#2l}SVNFg*vK4DnAR;FgFx;@}Fyi#)obug$N%tz<}# z@xuTz=r~~z7Hn*v)ZFLIX8$(gk$ByGTwV9J`S!7i#z@+OdBW4$)Se)q+XX>UhMAxm2lJ`>^^E^1l{v~TC5J8 zajw`mmPRy4Th?&iA<$Eq{gr+*lJ%FeuCL#Jr!w6Ti4q$^%Fo)N{DjyKbQIMjl=~(9 zeD$a?(088v$8UHNaR`X8L8V!RRpYVDj|J7sLq0VtKT>6N#o&~3he(A*~E4R685|P!rfahf)&pr4IZh3#C4>NVF89! zJcxzuPd|WcW%(@T3Cr0PX3!6SkEp(Q^Wp9+5$m-5Q~>kCj9wY3zNVm7!)vygXxIH1 zhYfksZf|-tpw+y6Jj=Rt%^k&?__vU%_!1>eJ(I@Xh$;xBd>xx^aacA((iHT7kqe5(7%7sTH!W`&VP7%xz z7D&0BZxYA;E^LT7XU+x*qQ27=Sqm)ZUw0msGU3_N}!yjf)~U=F$Vqo$#X(5v?Lua;7POJDaK;Hz!jaBh9#Mvd)+GmKGlMLd$bUAEllxb@KJ9JyPpv zKfSn^yNgUlIn(DV%q|hZm{0Eu;-^L?F=x;1u|i>k;jQpOzL0#+iTu|;-rn-4zJvpx zI|MZ(HWJrcPubre_@h&3WyhuWoX}z z^vn-NPFM-txPzqXx1id0?aEuBQ5Trx17XC99D6+gKa=badpQ5m6jIq*Huok`M%^_o z;`e$H&o494s218?JXM&6`!q*P?wJI{FvTtgLA8R#8q9PU-vMRMGf%56Q4AGobFn;9foqgNkuk%x9+P1W&bdT`+N~zPa6?!8f5ECb$4O zK*qnv#7IzkOx&tH=d|QX*)Dy4@gVdh1;tx&(cqIp<-p~mO^R6#(pCK&->;8U1adeh zvD{dYwTfk2IpVWy#He^oGz0Sogmk~7p~c&NX)ozS5D))CD$ADN)p{*tB>dcne zE_~1wA#Jfvd81IiU4=?uxF)|0jzGP;P9iRDa)6S$|>&GRSSw_nD zU9e{*JQVA}$SXT*xH*Fsckq7rghjBHCZ7=PRE34KhpDOfj>&vo`P92Uv&So2=F>i# z9I5;cq__~;KBN?f!u=l^`$Ts?LiYR}0joBcDT6-a8C!D|yR~}6HNuxQaF&qQcjiN& z)CwIHC@}}G&QDP)QunGdt+JWnyD>TD8w1y+9vWhr#2@m`g~F$iVIR#F0S1;_6z`z5 z;ofznTbmLJeOHMsh{4kin`dvhS+Uy)<^b73 zr1I2mgnb!$Mm{KY$as9+Ja=NDc+GSk#tPL2r9-`J2p+}5VrOR?xR8cJ0CXQmZ>4vqXotHl>|T8DZ+;fmHTYto0_N%>XhIB?OJ5{U$B zWX_HxdO?DB4t^s*{d{UeI=BDt&p?`7$N-yRTPTD81k?M&d%kGamYl*k3*~wc( z;LP#H2+`(N+>;3oOaH6g8rNwAe5Vz&Q6VXM1X|@QH`ru=?d#B~f-fp;qq(|UN}s@a zPLm*;lLVj@K=o-F%+?c?pH3m=(i|@60Z~OYP10J(t&tb#Fhxihkwihh)BH3P>4#c! z@7pr9^O&^1fU|f}m#eNt$M_2Cuy@wXGQeR!AY_+2gEC@xK7uX|K3C38!5>x#IMW^RkA{2w#8 zH*0>G*<_aE`dSXopLNpzUO4R{xLcT5kRvTm`8-CwNU~cj29>RJL3gD5T+8CqJIaK}#d8-rorGj_hhzlX8#G*u+!p1% z7=Sb9CW-TUou(0GGn&D$@90HS2QKRo*Yjc^J`tw18^a|3Yf<-R`+sJ~$z!mTs=&*ux{jL6?@W z6WlhFq(S|(u8%o2LM(540J10a+VVfQ9)#JJRwb3!FW4qs;kDLz`K7S|zCvgdri0-t z;k_zXo;eeq2XlOT-gFp57wU&BOb)8Ikb9+eDNu4%oJMHOk#RXCnOxe2IFD@+GvMtx-WgWS zidYSdQEn{(IyYbiiQ1VH16%Z%kt|nDVm^Wn$L(7PM5CTZ3sGzqto}U>(dFrFSZpQA zBig>SpPDA^fd*2|PiL(bUA)MK6w;J$E_MYMDIUV&9^0$}bT9iOSaXX#{=y`?s>tuH zVlOLGEQ~Uulb$)ls0wG4VRj2}kWz3qE42Ys0##Y*v#PIg4&2{@^ZVEKIMc#nv zHTsT>502&9Yxv_7Y{l9z^Phkm-&1RU>*{%hlJHTJB@iC%B(LMhY40+B38NqTamYZx z-t+9J&29~$P0X0-D|mTS*xB?kZWG?Wq=xJCnJK*g;(Y%j-4>95pguJE7nf7`N`d-M zd(hOA{%Q6qBnD3R30G!%{UT=L_WMm>j~C*89-g@rZ`$Afigmq7vXMEkAfFrkPN`Om zov9_H+M9k-YR26mLsGG*$4rDeMxo-faF>NI-V+_De8ew})Ws`emTKp?ZZl+}L5~iF zWl}WO@Mwl3xBa8JRzjM$*ua=c&x*0#(wcEq&qV;w8ADv=shL^Vsz^3GNEcknQp{V+ zfvJg5xp66n2kKVr23uBQ=Me$fM_4Nn^R~gADaWr8HD#Kb?&RZ`y>V>NcgQ@hSkw^?X4^>;Wcg9+deVP|)npnhvsh7mWZ~%YTJHt4~`yunZQIo3Q z2ku#+9&Z1Sy5pQ|k#Ws~b`JHkcjtt9ZFh9u{XPys?L%DXgPqh1NZKi%M38pZOV0
    N3?A=E$Zj*0TSWz}ARBd*i*XQK=XFncX?yfj=gJ?6 zY30|hOTy?cr1j_Zn-VyksgD-j*z>)6K~WM;^W?kWRK6?JT_|4!r}D*;Y`^z~=(N-o zBJVsIpUPY$fluhi4z+25dd0;tsgckw&Rn<%5s+=IQPs0hy9?iG)9gvRGx4hT9$rSA zQ=TI{AM=b^PK;8Xt9T~!thtjIz&tKO~nW?Ut-AQjCX_J}31r z!B1qrm$d(=ow~miME2;}S=H9|)(p*q&WW7Rc=xys>;U!h3ua_6^y5~{tA6w^cToD5 zfM@-?C-FCGr?t2od%vw#%Td5FM#_9HbJu1CEXaV@xG7I|9$Dr-u^s;7Kky?18`mVk zj3EwRvXj0f;ip`zTPIhd>1r2hqxPfN)SUdOgfBD?3tOQXsE}}N-tO;B;jl4D7Dkdz z4Z~T!KoIroN>CjgUgz)aOua_z2qGh3LWU-`JNx*N;7P%kxnJuJ-GxaN*hc$}4V|a) z9LNQV4N(qxgH-QAXaeCUc)zKEMNJj0>v2TVv`CNi7wXCuK*l@{Sk=Mu-u<{CR7baD zR#sRQoBB3CA6v5F4;s{AAgAMA+Qh4B%6L>)d(A2?>R*MouL@J&#pD8?q4%C5*A z^25@6MQ)KFnU)$X50b2uf0vo|tAaRN{}*k^1&UAQq^op*Zcz6Iy~4EucU^^qCa2mn zdZhc+!9eeR=|AHokIrE~3UDZ>Zq>q;B7N`wgH}mmKSI)j$>^zq}H5-IS|Q|I4)lS$VC| zL#cVKVh%7TD{lu@!g)KGo>ZGBE?n&Kc`vbebwbq_=jd~Yoikpq&ZVFh%+*UK5qBnU zj+igN_KEod|CdnbC5~(gCTb(8(Rn6BS50(; zFW0LlRMh%{#&r6u&z^uAjv3#8cr|+U#By%>`f#6M!xvpOnN7>ht+8_^vo=t@7rMop zKr2SrRw(zS&M8EbjLN^lT?w156&IrM9bO%*G|D(3Geknz&{9AwnBU5nqMGf9Bi;Y} z3vGAH7T+5d8wlamM^Q}xnj2sVibu&#+*Rd z-Ah=`=@Lj7pbOm z*21sYhga852pQuBZv|w4&^xMLvegv1ux77L^A@y796GM+d*XKEJ^LUDxZqX#eo+s8D_> z?jS|(dkToPW>TLQ@E(?tQ$qKvDY>?K(im#ku7>-H1 zHw~C4n^tXr-zaUs0+DizG zP>aODApGgIEK6KC+9gEY1i+QyzRrwaXiZM=C3|r{sw*A{b1V-8bO|a@^==7Q{Pej~RB(MC;=@t=IEG+tET5nVxX!K@&GKcUZ`I4D1Ft}p!rlvS(iF?L;+pnl=G zG8>U!SzEkJ#{L3LSbJnFoVMQdJ6KXm#$wv+#fr1l2lJQcHjCXN{8XpIl1ycnIAH&= z=?gQDVN1ruY@f)t(d^5_hpJ&>h`H5PA^t_#s;X(0Kb4fS8T(W3XBh8L9|i)dzFfOL zTV|O=VZoosdkFh~KtBPV5zU9k2qgq7ic2wpg-GZnzF66@SQSE1C8fiKctXL);X)*8 z35fdlP*PAqfsqzU0#Q}BL>t2?IR!3WHraxYBWP(|wYe2W-lb~d6>Rl1eoxlyGVyx0 zbQl;}h;XfWuis%sBphWcEMQxaA$G;;jupHTIbVcs<4g;UV9uhK-fws_W#QUDjzxJ% zxXG#4b!&IJ^nA%W$BDL38x^ZMrqQjMV=;P$>**jx?E?~&ydU{a;vXjn|9IOaeftv* z!agp~+r#c*q;v5Q#3`?(En|aBXn2j1Y^@}xt;CJrsZ1K~{`6`r|Gqu5LiQn8AUsE9 zf9hj_;6sH464ze7_pv}Ke-5pd60d66H=v0dbZ8>BZ}v=4C7BL32_(rLGF7;LQc@|h zX(b#6#+#EuW$t5)pi5I|sfK5{^;g~nQ?foe&#+(F_HRT)5TLvB=Hw9E?CLo=`qEq> z7x|Vx^)&QiywD2_Uexw5!J-$5-l&10J*;ianCQm$o= zB2Ii>QrkO%#-v>-j@PP=nLuMQ+5Dn_)f4w4y>lJB?byNdq=@ns(6`@}%M_D4KT4xJ zJ}(U8ThLzPlC<<@j-tIQ(v=<|t;2uOjaMHOLg0p*R{O^(`02N| zsq-`Z^hJu9_HWcHW(hCdsOrT+qw%405$y_F{j9FO3DZ{M>QiA1u$-i72 zCJ@0ZU8XFA`wPBCE8~xqZV`NCY)o0}f3h=UyZ=eYI{%Y-`zBRA%2gbBJ8{UmuT`sh zOe<@~#?DPumeU~8Z+5w=hY~(j%Jv+estT>_X=C5TkdAt<)^scFiyC{IVsDzntycFx zq!$upIWIg1?-5T^>o~r}B%`o9-PsAE<7xZ_NutPpbf@V6vc>bv7CE(Ej18Y`n`J$D zFB;D8Q^JhBlc?pl$+g^U)lx$(o@e$-tdKWfO{!q)`a}ivX9hvYr+MzVfJ-mDo_t{hi|_BY0sMda+z=0)5K!X&;DeeHn(Xrv2QR{T+-FiOcD;glIwpGxh#Hb zVBUKr!z!1KfO%N!hhhMOyqky@%FklWe~{X+a-`28m!ixavH29b`6BFW+B=F)RTV+4 zJZml{HCFG7XBZD`hZURl6T7m39&tpfau&pw{H^1tIK>0nD`L$6XsGuEv{y{qpZ%nw zPmiY-#p|AkZgJvK`-J69yD@&-#y9HL>;CoHv{@0oG!b85*EU#H2RaI^ss_j9MP^lc>VZ_epof@V&{S#TVIXwUA`tHB z=-?*UQ{&-zQt^}ipffeTQw>!(Bfc|UwV^Yee|Yn6z$hvKw-}cs8(lDPJ6>ylt-Yhs zYGiQOZ;?hm0Nw3pnT~qSjVU7WTsti>Cr$zWZtBiGZ3l*tDxS_G#qqkRZ^TYA5CPU# zIu4$Fy7~GiQh_phyvB4s=X8ZB;p6rm9cIoNmP9 zq|!-qe?KG8etFvZw50lEIrYt!fn#dU$O9eKR(*p{mi(mp&J1-Kr-iSBc&c`P&kVjl zP-44(^C?Z8l=0vX$h6*EG3->EQ%*zM;vL^6^Ppr>(Y6wSu-*sX7SAY;XXO~_NMYg& zPDA3@j1-mI(=ptt`J@@B?6LknTGeb-`#Bm7xPSxxjo1K54YXm=x5Or>qH?hbLPB?T zJVEh6Nr$R@eZR^_QTZ9dTz%SV^UZ42{ETNaX$O4%JgSI`s>?xwpf8+HQWp zX~x_%@4zw>{GDN~&rohqB#lc5%J@Wd_BIU{Q`5Fo)gb# z|5U;2*Dug&1p3#k=m8T|pC0_=Gb|`B(6?&-`wsZ;6UO9V`UH+gcD4~J8*$A(PMQcO z_X1)@FaAUILY%5QCZ4J%YRQ~UszBchJ9rc9pgpqGYAzDuXB+A-uJzK>*6Ok#M*jR-x)0=2|JEWx%$H5WV^x+G4r(GT1Q`N1g)JKT_ znCholJ1~TYm})!8IM||T^Kay=hYPA_%`YU&_A9o=R`~RqjhcT$=TK|EU^zP{0e|I} zz{;+Upw#!7{x{$Q5~xHUv(T&0cSbv9gX)wGs#9%H z?J4mEO|n6aOB<{4Mz;&o_7wP^Ub4I6kC^IN^*_n0bo|TKpVEGjRsYy4#tp3h>r_fy z8R9|^fBw(n@8@a!RAfkXkK(c-x7#$-J;~d#2UK(D(u zwsO&s*yKNHb!+wKq$cgTmHZ3(qHR5`AEsiRRuap4P9TZRy??V-bKm-SQIB5pc>8eu zCz3P8|9FZDqurhwZS}@$8sq-P_*wBZy=HCu^sW^D+SgkXAB&Drs^)^?mv2uj-(n}x@I*#r76_+Anh zd>8ND$FA5V`kkr=;;9sFA0G8T;A~HgkBeohxu5nbw>U)(kg8d z^E^3VLciG2A$ERv%|KgT=T$9Z)d%nbQL#G2!jUyokHz(dKJs#zkQc?)T?Z?0jba7H z>*Fwd8lnk{m#t?A3vgD_rx7}Q%O@Y}RU2f-XJw_;Jyt}e1!Ye!`9;S90mdYB-a53 z@q_M(YInJhROUy+%Bu-9H?m>nSpHaR6#Yt)=-?z?hh1l9N0n9iKt@fLWxk|+){K34 z?-ie4u^sU&^bGz==-E1_=bDtFwW-!&vmIJMq$ZKNiI)-jzWdTzr{EU!O2^0Prvv}5 zq)L4X{>X3zf5e&B!u`ZTXTA{r`=xfIrvrs=5{}BVW*Mnhye?4JG$UoLY1UUcqaRAZ zoexvOS^N{ZlKsg!*50iMf0fdCHm#qfrxZBH!u>*;)!Pq1<(SQ;sQ4sVxfPV^XB`=* zg{A|Sh%<*K{jPz~{44>@kIo31J8AFKxS9W@ph>};xj$}xntz%`iz$EilohqR+5Zem});rF&Rgwz=cm0*cABe4SSvvg^KI zHbOW(;i1eQ&^$b374d7f_)GDiBrFPCi@w5}KgSuqxB!ZV=awTp7TR_ZU-`lH+58wo zP&6iAWQ6P@L-p(Tzo)Hi+N_s74rxm%Yc3T2=82A1S>P5Zdw4wqP%wS5fEaHA!8Lre zaJ@cse{W}j0GDZk!R=6e2^W1Kcpsh&-hCb7vuJ@gL4l{(FB3nocXY;L@67p<*bmc% zwS%F%c)6wjj%5_j&$*sJgyK)H0ufAN=R1<$n)O>x{z{*63me}9VOydMx=iobv1 z@0~o~;C<155A5ZSjr#PPBDgMP2$5TA#{BnxpGM>piZ9KPZnBs6z zM>Bsvq};4WX_IH>Po_8)@O;42ZnYzA$y3F%gu3LpljjFK?bh=Kf4g~-)Xk!Aj~t1vS44eg&W6pcu)p%%d>uAfnbttfzL5vX($(B3bm(tcJsf z8ct+~{}x?7*%97bt?$)mOxE*jiS6`OIt?SuoG}^xk?Z%|z1WJ`UY0hr%6_6;4WQhK z9GInCPw@oUAqM#83%N>)e`!Z40EZ400@HKvXTZ&Pc)s@$FT@|?A_fiu@9?9tmV}f@ zhH=*~dwV<6jkowCMv(2&j!zkCjpcgrid$o4J>{`7m&84%VHJ8xnXs05=PxqRWgZc__rN<8D{@;7Msn5=R-?y_UjGNM|fSzT}8S+ftI%-{n%c*8oM)nZ&C z9qQ8SUA2?Z6vzB5L!~ROdpcmR#(m4FmADcTx_;#%f*sUfNp!kM6_mT!q}(%Nv!3#HEv3LR70l5OZ=a$K~gi7TW8cj4>ldmDcsEz?!k)M#eT#f z;@7w{{5UXw+KQQu@subB6S_G^^I3Rt1K+S+c9$O~HkDMMDIVLQ?CkNk6DU z!7Ki*x`WHIg4ODRgPwe!r;#lW>s{t2Hhu&f=)q`fq~{(em;`-l{;dl7^e}&9J$eOZ ze5eY&5SgJZV*293#eUTYMI}4Vm8uAxhrhAjoxjKzz8FJq`7jIgibb7J3b_I5iT^g^ z1;5WsjQP6*S`D^2-IfL9tud@|F|W_Bad{e#$XuP1sfZ5Wq>{M$gh_WdZjpjZJTh)z zEIS^O1fZNK%L4;KPva9(f7P)HeEc!1vup`(ja9iT04Tr4?Py=?tBb_G*iIGKb4Cilzpbvm2fp0G*(kuWVZC@^+%*Xv69S4TC5}+KP0e((~Wk4 z(TJ>rxtW`P0h0rgk%|Q)SZ|8)9r{6oshV%mLMu$N8{2a$=rR~y`3$>JWTa-m1S$k8Tn&P;eX9Ld(o;w(^5RW4zaVrLwV%WD~So1;6-(s&8 z=`Kj0K=7i-P+^6X1^@BloYe5q%4G9em+_rpEW38Sc#$X zLTVzPs?6%0Z4VeL_hEG$s4)J{aP-^spuZEYIRJ#*B^@r*d!six!qeq~kZLzqa$m}> zO59Gw55FTkZicWKO>>`~;waa5b#gV!p8FJZW0hqfv8+*Tj_wO`8(TOiGhh_H$pVq(wx*ZL(r2IE7aj*c_B8-LOP}s8nC*^SK!njz`X|H~ zHHcS@i4=IoR_*$i_=hVehv{1hYkDB^Tl_riNT&231KpT^ID^$SaIj4LU=J=f+rQ;7 zA#|=V6RYh>C{(Pub-XYqB{Jli7W%R^7+ahhl+1sTllW|B{z$G4Uy46<_$($aG88Ls>pPEV6itI8l>akY|!Z=!XK z&B)|>YY{Q|i0DMrQ=Mz8?{w;=PJNP=uT9`0ZV4+>=;X5Z-Qiqof6NcKI9yI5rn9!l zNeSe%7npfl^`Qm3BX3Y`{tR#Ar?Dxn{3*`xe6;sKaYik9RZAD1K@-xe$j?E%j*()q z4?_EPhT54IZ7({43#_;7fveEuo2@6Cy&c zypdaWh-|?vJIZUxm~ne=Z_vnO0Y|rG%Q{W?ep>jB9?6N79W?O0!_>dcf3R7NZ5Jqa z7$ZLCj>IHS0O~Y0!P!zh(-^PUfE0a&qBj3gg_ZTe@{sqLDUOQm_>&qlRL|TE;wpMr zCQ#Y2Kq&hUENbIlNFqoB?xCttV~_l1+cIvUS?&@Z2&_3D%{#Q?cw!N(b+UaZjm*Zg zJ&0$nvGWrtEK4R=Echpxfnf*}s5r+M#^#uY_eBr1yeenb5hqVYw`6_b zz9Y^ttDylW`Am=w3lXi)ba)yy+4JaNX=Zgf%yBvS<=&$#xgB|80;o|I7gLDbj{G~I zGCRd$o%qZxP6_uriWuXjPY*uaX6fU{?Jjxxm8NV9jykdGOs=NU2)dSVaWkF#xFm(k zc-kEEm>gnOO{P-!+EQ=d6p;QE39d#!Lzs}|crJjv#J$*N|G5XN+$aZJc9(wS+~j{S zF!3I7q!VEv(2^k2nC7oXv2 zdYnTIKyvyDk0_O!W)@!Ds^$TVy1+G+fIJeA`l2MT2-c!Nf{OqoueBAtF5t{|c8(IB zKEoonF!|vsIZ+30QpP7fE@K2YZ*l9ZEKI8j6&AzpE7gp!s(GGj zI#u}YJ-CWfUqx8C!p%3`+7doY^w*>h1TmQ`<0%oO`^J;LnB%D&>X~B~By~U-LuQsh zKh~OAhb0)wVpWSp5d`M-iM1l;A)uRVMIR9imtF=Epb9aedeie%c- zy^06vNB1j>_k6$Wj!Tru`xGZ`7{YHTro+{XV*2;D+F8nn$ zBhPJ-$)bS6^&}}B#isHtQTSEO?~wrPu0^_)9dJVmSW`%{zWF)iXguxKUwOCoD|@<5 zFsExjd?%Xcd?d{?7iGYPn6=6z|CaJhO^9NW*GKBf%R}gs-QM`qv{$)qp?7<+mm`&l zWZKnttX=4x&(i*z9M%R0=H~vunERXEUhZkyJ9U){`d66*f6i&@1NId27^iTi?~u*_ z`>WO&Q4pzyZD)RoFMRf?o1fRedBIO!GxqpfE=1W>{*8XA7 z$7ntMV^x`b6FHL*{e!Yf)d_i@Jt33vm3eA>i8v~OC2D%p-k>tS>;}bc2&v&}*_kHm zQ}IRQLRUF&^oB1}`j8~@C>x#CCKU1lo4&*GXvK0X@|4o#4M@>RZn_oPp0p!L|CGPC zxcCwQ&dEKB%ZWN-`>TINugqHg<{=6-e0nIdK;))uJ8pdfjC>_w=WivioRW`oc$`VN z3dtF5a|Iht9Eywy<)qBvUeO2sq4HRxu2*JOgtAn^DwW{16Q*VcLJ!Ro%P{WV{nvhl zgw&}2%=zLLK^^xrU8gQ>$A>}W0)}LqY_pxGE$ftUE4e+SQj|-hEJ4}9WiVJo|ax8w)PiMRWF|Mw{ zjQ2)Oi`uX%y4G z<8u+))%&8oSBED=d#}M-p?AFea|2hL^%lYj%=Q{9A2bcNM35hwv!7_ko_jvzove}Z z0A@mK`~~?w6HF(@BZtNBAf-uknRIzw}+9217R8*|c+I zmV}2oN8#wom7Zw#HLHfv&qLDBPI~3jGh@=}iqJHW0RYv;bk#sozaawjdtd07Ld#cF zvP-$KQh{P8RI-Vd;dZibyr=0?fC?2VEPs4dz~)k5MI55N5>uleM^tSbx>pUX8lKe1 zObZo%Gz<0(g9Q#<(%ovn%0rV>6YEt@0Ee@V2xQiPb%qA^v)cHUo!1`R{+;yOjZ#&= zPMSEl)K11_mt@5|CE*~$OitQ{lGiT|336)W5}OJ*!t6@@>-->2fZWjjS!-vSnCHEh zp=Un#02enkyp@7Uyy>3f&B@g2uPhH@Sv9y2_Ut85vrjK9`xF8xQC;-QjG`KMl=K z({odQ!4lc|l_X3FcJdc-db(FZ5CQzsnJ)Say7_=N6SGa(ZGC^5aeLI|RL_#03rd zT01!B^&nj$6G$#dm&p8KS3$bOppRTl6)MWz4QN9gNJ&|9)k0hr32}J|&u2A9E44Hu zQ^AyJX)(C-W}nPY?z}W>yveLFTu#x@tx(HK51A9cJv5AZTLIA!JvD4b-F6drDv}GkspyM-ZE2hv4p|u-50BOg~EVTZHyOSILpd%VGKwM zEmjGm6OHv75@}DAoYZG>#ZrVwQ-RQOibc0`Wn=vBf(WCF$=>=HaO9B$?qF zy_g7#nId4>kJ1wW3fjVMZIXs4kXw_KY=tb*7Ilx3C0GeHm@R3;f(S&6TGgBoBH5r` zGSu&XNsI^X;yZ4KDL- zS&3eC1o1&_3NkPs=C&Y=)+9UDzQ=Gj`xt(js0`(?pi7~)!dQ(Im24!X$oQ>P!*nYj z^|B*^xiSN(bwl09jjsYWz$4#y^fC5P6*G#1&dg zA5di07M5eMV2oLpf>vsC?YAq8fBY*ob+IiX9m|5$$AsE@Q9mJ(PFP2FSu4HOyvA{p--Rc5?{T5 z;ZmHXYazF`T8p~iT19`(L-t=DI@0QQM7O#sjg6@J7zKOf7hEeBcSO!ZyHRZtd@*)lq+F{)bWC-zxx!VSjTc&ip}2_>BASK>ZbRT6U5>W@My`wXtP#T}kT=rW z`6sBV=`xEpbFC?}eUNca`qx_#LH05Zue|?Q8BQHTHE3JCAh^fnQx$ z){CaXZeceq3Q~zCQYeZRxshR6AtH#UcO!xrUaq={ztHH;ER4F9t0VGXxFZT_8E|j} zseLB%>I#LkYGakEP9~5j{{U&AwP~?r46eTI<>`6btra8 zi3p0l)l@iEAC27)k;G#&%{5(aJYeS3gP9UEwbWZKe59~*)moj)xQkTTizYC27=q*B zuc|ZNa#42)?ng29YJe+@IaWoSQVH=Pk|gA<*X(5CzW@oh5cCx@69^JQ&-_;Ln`B?R zk0vXPVbUHLU(9rprRP&Lw9@#91tX_M**4@*oh-%b!>Co?QK49mNf(SiN;wtu!xS2X z9#WqlmCsPvzKzI&sIM-0Q}jgQ>FcV>9jfei%qsgA54EVYnWXh{zMYz>`=kR0!qs^@ z3tFx7QFo`X3Hik9F6-flG~J=jGu6fzsnOq4NQnXw9rvt!m$*0zIN2gMtE#)+B@-$+ zRc+)~y_~O$om_j+Qhy%7zaGnxDPq<47qZ%its|jkRs1O_&YcfabEqJHYPP5GDJk%{ zO1zIm1$MR#_RZ=%KRE2J`V0HFS0#1(T?zPICj8cBXTd)~G9}>u`RU+KC+k4?kD5Dn zVr8j;VtmSFbmX?2T>U8K>rDsgRenj9r|Eh1lI>~QqF!=5O`CY(BpK?a&y~i*R49Gs zW->JCBEwj)KB>PwGFClmtOoSA()cz-PwH<^zwxRx3MEtGJZtxt5QGEAtI`-l*2H;M zjaQ|S!Z*N5^q0Ohu4SW-uF67rRIlE$c@q~Y7eh8 zHmHPtJlL_L!YO`F5=wGuRM@)J5?+4J_-N~X)UGGeMY$f^{8z-R0nV?T7dFq8KjWHb z$)C~9^W=}ad4c>%Z@!s70d=gZH1bt*HWx1zJ|VNYY!cL}q5r)04TYDX_=YJzIK%Py z>sy14NAmn*|C3B-HXco69XKAh^DTKi1k;BUrmM}A=&D>f&Vh2f-GeH5lAWy1iq=6# z&|oHywUgCZ(K_z*C4c&+YF0*ADp!gf;UGgVtI7|M+=n@t#L4ug-yBZRn@Z#7lp19I z+HecKsWciSQvzQ$y%}`=R*|(2Uwc*YBEBW#YkhS86vsNA@AEvs^D~}b@FY`Q)-!NL zmwO$}nW=Le;q+z~e*)1~^L$!vbRL#k6Iw+@p95w*DY3+xnM(4C@eT|Fr{gZONdE|rAL+{fomfYC*8G<&Rs3Ic{Q-XKlb<5I z-A1GSMhDEZr|~vYv2cN#^oGI;mScxhx1+1PsN9j0NgV{2=6VtZqrturd?Iatxdppmr;YAL~Pg>g`!i%mZ>T!|f;UWH_}W!=;qt?C7soeEd1?B%uo zy__nvvTYFMHh*(Aa9cK^T8$Vl`q89&sdpH&ntllq%8hM!8qjYbWE7+>@l<~~vvG^Z^APuYVE?a`C9@g({gz)I%!XxFf zwuPLg85hh@g~bdSw`ocQCmbTvE;3YZlMPR@XW+5Z&%i$6`Va*@k+UUI=K5BO?cmwN z^EaLW^dfp>rKvKCBg?>`@|c>>ZT{}LY--0_Qwcck@5cD(UiH%{KYKRa%8x&n@(*5^ zMBCEJUWS`neP{074439_)cg-<{)aUG!_E@3K! zvk6BSKGzZ`oGVa_=8k5)B8v%22;g3nTh=+&;=kP@QbL#*tcKDbH9{QNg!c}LD6L*Z zX={K=%h0E)(@V(l(QLZ6Ya}Ia|iIhBqjJ&InxW%C6X#mqUcyu1CdAJcr6ev zA-}qrOH?J97SrzSSBY@yd~IiZ`?=U4fBQdNK9V*;MgW@cHn z@f6>fBlJKz&q=S)yJ_1;e#biR^`j!=8ux|IS{F#UzC0x|GTMUsb1FT58*91rb6cYA zZ2FOFA>iAKd?}E1PGP!_qs>L@<=zOZuNId-Lz+o&`ERhBi!BH7@dd{>CE*u^4!RB;a5T}|dps*QKCJyxitGbV0-nRJ@4@!3MIJ|r|NBs|VH3MG&T|Da9}(N&oa z{b=NpN173Q>pKd|A5|~K?$9={957yPmvWYnQJ?MPM(?BM)&XW}WUDN8RaVsY28{O= z+XJQK>Xt>BofkjywA9E}7IYT|%0ru}uHsSoW;Ccey<*Ah@2AFuKaswf>iLBRl!tDq)35p|N5Zx zM=SyAv-+R!jqgyHne8lCNPR+X?ByYfRAV}+Cf`oAk^ce4Ug&zUH&0mi(I!Nf^n*w! ziE$R61ahZ9J}#NQ8J|=n!#`f&f16K&fT`GNneZ$9!yxN>5cq#d;UxI`mbZdmBQ**B z=<~fPct!Sy|J(f_k^_fPA;o69$XjmsP4?&HA+^`L+*ue3$V546jHRG-MWQq_)ftL1 zd^1kcX?yF(=t%jbsrSlH2mek|`{4im{FAZ&OLFwhhgpKp`}hPN`z>}RBJhfQBXl!) z;KPmEq;3&*cmqZk_vZjFllfADKA6XCW0tDN#kpWv7V;%b@JuB*UK2%0)?-iqFU6=4 zdu6mflIbHBauV)(Dls@acZCkJu8b5Lq{MD)>3_Js0mayEt%l ze^l@TL1n4bO}yi8BKCdwZPW5hmWQ+;DrVy=W+4;PN{VfqBSo=5lYA6U0Mk21zK>7- zuBv#C@8mP}b`O#U+5%eE3)GJtm|fn|_w7L67YH@VXuLjK5W((XYX8jn zQ60LEG!|A1snSnNb4QcH5}77%!X25@?8mAOYv!x<8QNf$Zy2<^DE}Uo#=l`U-fziJ z9%acR*}Zcdd4B zg~wZ!IxYR!UA!uNTKchNg_4HP6t?Nj0?S{^WTu$vJrI(ZLC>l0rkcx|S!!+lT)vkn zXBbibM7e`ufF{cv0Bim0@zBdOBZ2S#T}oOM-~+-mDkZv6C0`L_ayG-Ehm+YAdB>Fw zhKe1s-#tofvm}Mf9B*;K?cOEtbc`ik?#y1v)dsQZn+rY)4@KynIIbdyu}o1tYtYcb zY03pjvwY5SbKSo-i*`)|Tj4B~jjg#Xwo1xUz;PzkCljf}OVBuszFh^S-X%|UDEY@A zx)tJ3?_63RTjZno2y^}}rb_Blw<55{P1R1L!5U8sn5v!2Q1W!17f-YFeS2kSu2-ep zoufU^%>62=F42b>m#B{d%&GM{OPWG2NChWms%8_L39-K&**urim;-OS8t>TKoh?1lj47Do@ zgLD)7S<=32p3es5k4h+;#9t(iVnb5MvZ>u0RA`$Zv*+`5=!^OpIx`&FE1yx4}bqN z2!EDAj>LGH_&ZiI$ZS^o-C*)+CCV~dR2f(D3KjgyX~G%c#!lh7hwoR1zH(#AE4&~v zH6Gllj+)2)u9UVR8zhyY=KZKg6qNO#}bx4T{81Y!;$d>@E)m0-;=)e2)~fpt$Nc zGk>9X=?!_kGQOc4Nx6pPM@x5fBM5T61tUw$XiVWlF9t~E%kNA zUj)Bk#u+QiEU!>W0i%%-Ld>wbRh1WL%8hKvS%-W-3kq^AhS#gNsMJ~1Q(>e^YKAUa zbESH>TPanoyuD3E9Jxn-cRo|Uou#;>T8v@duFy|ll#G9GZCa3nb0*($~>dStTdFOFuK{{?#O-^SI7m>F@GO|3J?%xUv)TRueA&kpH0vRim0 zdi^ru2VUUE54QOap=hH2=$M&_3fxkP0Pg$BoTOieab(|P`~aBrE_(S6Mp4rOM#Z1i zh%f=q;ldhy2ErL6uM%P*S6DT54W8~lq8B3T)yfPp(=JJq3F~Q`$6r0rgUhi9;&$UV zE*SGP7D_sI5l@oz-TLkBO_PC1-+rbNzM;`MS*aZ_(X&kxR6)J>%M^8X{7{Nc?DW&7 zB|kXR@|j#rw))K*nLN>5*;;j0hbZzk<$fvf-K)QobpbVWc%EZ7t@0aS2d-a^GLlo<1k+M7fA^li?rtJ$dRv+$VEv()t zcBSB>bH%0>RmqvxA#J5TO1VS&63-!Y%Sn@&z`e0Ru|rqNDMmDHG(?qQQsoz$QU|@;MxHv zfGubR;u{B@LyJX$D+L{eSjFD3P>Ste*0ps6mtP%ze z73f^i(3U#$^YMiu%ElCTAapZjJGpX(_J+&(5v3XXL!#=*X4Ow4QxFvPRn3TrPtYx5 z2UX;ROis%8MJ9@)bTb>bidxn5EErNFiDubHMYR}>*PdLHf`l;(gx+Qaln0IClk$kR zaxqQi-{cHW(-BNhl_syxpA@-Hn)F*uMuuA5>iizgOU705S$3amZA`V$Ku3i2Yl4No zr99NYw~C3Pt%?zERc26~* zvSdD058SVrMsH7cDM5JOey!$^+OI*C!>ChifVp4!$Xi)$T(7{ADQ=w%WCaAczn$O= zDeKp{3bFA!am98-YD>>Wo-V^xt?q}QFAI}ONj#lBM%GZpQ@tz7$Qf?&OQ^5{5lIAs zk@fViiv`6w))RW$tZS2L9ISlk`)}4PBh_E8T0i8$bNt=3WrFAyN6xT^z-Ez2~ri)o!`XEOP)H)UQ=6BGoEuPO-oO}^`Dvx3Hxf3Uac zx8<+%7qBPatozz2`+o75(O*HqE)!cPb zM|Z(zk#V7KnJ7GVOf{Fhex(iLR_me}c^|2#*ukOyE$B_hixMyQ^ao zmf{5^j^j`vO7}y2gISB)loJ+p+k&A9PED)BPvd3SGvoeN3quiK$VY}?rBPu+sHQow zdYDQmv_IoB=b(Z%Ph%z6mitqS-Laq-H<`vfK1jk9{Ecq+5;kNg#4>Tap&TkXG(~!Z z_sWpMl$`A?X!SInV9S$|NBIlQmDhK9g~o1j0nQoifD~$aN(#+%#;S}M)2Qlgt&W)_ zH*^{w7lKWbusOJR@sse^6n`M_S^j%+o9+l^fizC+FyP>XVaTM&1@rYczctj32 z1)oIPWNHfgzsLC1CRwELkxlEF!IS*NZ#rARNUNP3Fdo9q-ymOW1MA(YldZyb%kX~7U0Vk@J}vw6AwsFlj!5wE@GwL{8HjSJ5Y!ikwsg5ZNMls&b=OE&bTqcomjRs_cZid#Fb_5?GRf8aUOqrREtGt%I(a=DD|?!gmsZ!@=3hH)n9S^Z zP5QRJ&3~T&LYVM2|3i$2!`S#I84Dri7l*RR%i-fTt4Rsgq`XtUBDcty=Pv)laz0b{ z2k#*IM%hL=rb1btE@+SB*cFU7D_}FQ11lOA*)Q&9v zflwFgq_V>JuP#AiW=E}158|k+aFAzXtEXn6r?Eo5b0vEBL*}=9VMQtoUDFDr_}n1_If?hxA-L;v12;bY>ckJ#wl0MR@e_H;i=m^ zrh4R{u0CYS2Nm^ursQK6QlGtcJ~1z3wn$Vcxz>l!sz$1(=?T8(7rQ<8x2~Oa!{$zm zTHF#2yfXt@B3B~lAjwr?LfN!P`U<8Z8&OA}TIa23Xt*04Owckzdj^K5fSO7+YqD(6Du!EAdvDVnd=1L3s9WFQV} zj3i3!??Lh2Ko-@Y)=oDg=n z_&;wwOJeD-6^}@a17kv0@s@Ck#71@zBCa}OCEolJ zNaA8iEOE!?c!T&4NRY8>W7X_SC}?DECMgG`Y?zCXBrjPh-11@1vx)MeH_umsR~HIntc@$yZgd z8?xM2fzZD*tbo?(#z^BQ9BC327<-UW$xcS_fvL`hM|z$&DQE|T3rjLDr(cKjh4i>aiJF4t_~V?*x{-zCW(8eMg!x8%Vocfu?(?Lg?k(qdVnG@yE9HM zQq^4G|!$}Wawk1Xke{mafr3?|3YO>kt2xm+2VOGO!R+S+#8+PmHDg{@Z6S{uM$g31D-ZsS5*v}`>zbQ>#+ zK~wX8f1Yz@G853Y|KE?-E6lk(=ed5L@AJKXkKK01X@RGnvF=SBW^~5&@rBnarXcX$ zw)$5?PXwL{l|iO9b(Hckgz)vp^#aQ=hwO-@I($x{512wZ%rs%B=*&{d3dG^f>DUj* zP~X(!iV~B~0|&S)X#eIqdFK)7ecNXL_W%7pADKg5L9GDLFizh&^I42eY6 z)!R*tAc`IKztv}`4FxSS`10CjEUJ^$FSewrhg;#*9TNHI6AqRkL>r|qbr-JvgH@0TV3 z;^9;5PZ7)g@oS)!Izm+6)M}5|6Ng2|c1Al3n(gW7Dww~6e&Dawe)hQ1s2w0op+1xK z2a|C-iKi+;Pet@9zt5n$74kLPhew(H3-&jUR=hhc%Wi*88bw1I6Gz#QXLpwwGOjjuJ&RB6@aowcTIZ`eOIz(F&>rrgX`96#QPbw&48;F3kwr52=tUM1 zuR&G~>t&8i1@PxO1x?JMJDgOs^}|Ug=L^eCVimAdeYakj=i!#e-qcyxYJWWQZVHADQfdqlIkNhZXs5T;ZpeA5?KN~+OUleuqdvYk z{T`V+y|I=bl*r3|jJAyw4c`k+`MG*k&^ZtL!S8c5!fHp}iIpf9ygf>n!B%b>_}XxC zZE%`(|i8_k&Z+2X)Q| zb;o~DZ#RlLXjjKK_$Cp3S0X}(J|MTeTg&cdHCy7;l7E6)Mv0s`OPYKWpcuXwhIv

    iI~2pyvr*b{qr;840y?l)V4y_!&FPnYh%nmA&O#Qp;b26n4j4VW3yd&e2<=veG@?kB&SI1%@~HKockhtW6jr(gYLge49?iOvXNiFFLc6)1DM zG`e1x4roG5$M4l*wc5+mH9O>}$XVhN2D)EjiX>ch8>Iv3I^<4uCUt05p3M zF3j=0so(W?^194erh8>zrH>9PoHvWRffV z0iee8)az;GylCpoBc9Wb(#_3t>R6De<6@_d3jL4W9A-vl_5`jSX0lEavv2ON1F0aEh({cF=6MZ5se<8~!0;)O^c{}z& zQ5AWenBU*=O=sW;JL_mBNzmXG>A^>x!Out!-sgE-o{fKdQ&-VcL_|ownhK3K^=poo zRZd$>P*ytw6+uzhE>wua&feOe=d)BzP{N1q9D#lShcqI((h-_sv=SZ}a2+0}?t|2z7lxDaMs zLu||JdbFSap6-}oHQ6st7?n^o@(fr1|F_JK85a_!3lPL)bx3<{gHa9TL5^6%kvGu% z+^j9zYX5S-11GTGX&|LL5C$uFPu#L^xbMe>I^uu+mhn_cvb?Vep3X=U(Ej4^2}|Vb zEJVT4CjdjwVa_ITZZ9U=_H&9Q+srxDcG!N1Q`(_X=5%bPFz5Y8_vP+DQ1fIFpuff} zOXTNv%=LEIzirp3;jNCc*;=CPX)$@Sx3OBiW!J}J!N?n&GKFO4$P+~||7hA*G;Qv! z^}zOvbeafjkZ2{1at&Wr!UR+J=6?64ZWlfv&kQaA2#vO2y9N?9`VH^R&_|8jvQlc z&;o!!PJCzji)n7XTqHhIWL3KU5d>q(j;{NKE7e!8@sA)a#d^h>RhSybKf;JKjGTz^ z8~-tE`arJhQ_G5>12|Wln-b@y)`^9C8IG0IjIf~0dKs#qzC{3@7G0lgHLZv0fdqx~k%gZRE!J7i7VtXZ zzy-UC;u*wwCW&{S7wC3qsrb)~f;U?rMtg0C9%EJ9RWSE&=G;qCW)%|PmQfmw=Q8r6 z>{5VOcU}?$#Ae(@v|D+4P7t_hJm7#lt73g(TbSVDnaJW!gS^k3?@;!HsowD^)fc9J zzsl*~c>Tc>){l10%43EU*yg_SMjxgOJ1pqk_#2n@X(~47Wlf0s%id`v7d>f?CgDOD zm9e7vUiOUTxB7^6?0#?66f5-DiZ7c@NE0VP(C}}-iR%NUq!m%xN*^u>4qaPQl!g#9 z0cy{oUYI>clhi>UxPHNDdu@{ zvbf|s+)k|;sPTDbRe6$Y6i?r+SnF-v3E7?m!&`uOC3b;ThrNe?CVglxk})PWaP}K7 zrakbMm}g%5cC44(&6VlC;K9^~vrkPC3b1IvEN zWd*%vZsMJbh{O5Lr5h_+I?D9^RnqLxwtez=I{?X~@|qHaemE|*6gM_SJ3UTiKQo0x z_V2MQ&hFGeWk?V(zt6>}^bh|aXUIjyH%R)Ne2jP8By4gIGO-7Pt&WQj0RR`7{7;UL z(3%Rl5!4Yn&b7NJzxEfytLL{OpGcKXbGZGQp5$O>6PBetqj2ESTm@H@7;Pw=K= z(-6>tw@Mr)aqhP@j*Nuw&cBTQ}? z>z1%pNcI!B+b?Xp{Q3AIDz1ilh)B0G8n0q*oqRL$V<*IcmxPlzjYVaDiNpR?s^YTj z8e&g%j55}tQ!<#YV^H^#Iv&y#d>!{2_A}eSzH~1D{4aW#GXLWJ2k>9-KuukFFc>#9~U^!?3L8p!bew|kC1(9o4fTfWPC*# z;7RMx>KIW?N5W30cG<~HO$Xd(oM)xhuJ*RESJU6i#fnoF)aiIx8Dz!5UPG*bj*bxZ zeaC$3w_n1XT7_D}7}9;+9Q06V@zYckS0joSt9aZL58B^T@jEou)#u ze|}KsPS#YX_wzVDSFh`QcfQgEvwY{VF7P0#lR8Bmo@(qN1ltnA-bdp`**C199HDiWLV;hb-v^Ze{w~rcLle>6H-FCxk?03v`79c%g0gf z&}&g29E%gO{EZ2;W4b)#u#KQwiX?A;MK~|Jn863HyCjzD?^;UPb_y4aRgktOi}-We zPt&803!MAS5lBux@sBA!j^9JjnRO>vJ*WTlhaFlPwSNg^#1v<@q4|_LO9>5*5n2qJ zk{kg#T?O*(^*O>tZEdAmYh0%lwc)MNbg~Ot-8f6_5-KU zH+(!{UkwMKPb)|p78Jz^XPcM2C7dDrK}w0+i1YG3RR?8pbvUwhZN9ZNNm`QIKpp|p zeo&ME>2`<z~c-NmgBnTydv9 ze<<-vURixGHn}G9=IQ}a2G04EI6M~(P5p~@^h*p?Vh4pyLI$1-{4d_jj+U&m9);ME z{%Si9O_V(s9KjZ_YATp$0!h7SFHtS^qnp}n65pDS?6qcwz3rP!HntoRm-R>-Ho~Aq zvRb)$fwe~Qu~OHS1Rh;df--ibG112%XVlX6J3xWwQ z^%8h~EL{%WYc`soQPw!mHtRJDzmGURS1)e1|8WizPjv89l>-j5tR)pnc_k7OTdib% zk~s0zBN`SYiS>Ct$Bu@aLV#1f?|D0MAn)?Z638TS`}LJzpoN)WJkur?7b8|mQa`c<*yGj6^V!^ zcDZJ+nfL|%)HO~IS^#&33mP*ck}?#9@USsF8&oXVa_EGt1l5dpveCu7wEUPPc`xbEaSY!WkTFHGe8Gw`JN zMj@e*Ak={CwYO$5R*=>_LL<%Cly`YP0eWB;H&y0czDNOjw&o|c<-_D<2j~fOV-F~E z_=-fo@-svxuii>GI8y6<6;Z1Yv2mmA$3-t$XkA6Du~cgwQ-7*ekn;aBwO|uZF@kLH zlKvps0>bepQ4(DvTg)VWdpz+qb%q*I57-#tL9+Q$p=80{g1t)SagA5j-8Ww3`16&P zxBJ%2O|}IUe`2GzfHa&8Wfm1Q+UrvQV|6fu|DG>7InwT1{cCH(k+d#sJN9de)>Z`) zU)7%2F($F#_JQi47QLsBnAkLSi#N3{cws+VZOD6{q5z$0`R8TL(RF#3Uq3!a`*P-p ztP;ycmHP0Tn`T|!5{!R^d8kMXgv^WuBh^P%|CkAM6mw?ZyZaq!(O&El${QC3?uHmb z-_QzD(fBIM3aXDtse+Pxm{fjiKAc2Ge=`|LN4p@d@Zlp$cHq%HO{iDwAD@l+tDX*; zhdU5H+V(RgK;Mqk;>g(iy>GsO8Z%Kn8VdYmJNlsN;fmx&f5EZHBBo{7+P3<8tmXW@ ziRvSv#6V!{pS)XN#66}yuxYJ|*- zVwE!69K@mid-hWTP9uxkhu^O&vbLsK9Sk4|B(J?p6=nJFY)&^{=UuM5BSp#F!QT)nru>g_sK*_dO$70~-)}@lA5;)2tKXhX1ppcWMfB03N$T+P z)*R(_-R`%`liW6NetM%;!PuT;ZH1V6asRyl9Nm^5JI8Ilmrk1IJ52L;Q-t&Wuzlbpo`dT>E(G+*y^Q0f z5{QWaF?a3eUIibUsXgH2^4*T32l65$J2=-ewhJi})m)WPdDPxNstF-s>0$d$^OckK zmjGA@7W?hL@H*Pzp(w(@Ci};xbWo+6b4uf@ER(Y>Kzr2gHKhnLdDy-vr<7CY4@{lw zC_417f`6C3lhm|s96|~8*HRp9vMp#l;mWFTT2!h491Y>9-NzDFYnLUB%k#~BKc%^4|YvTCtaRY5!i z_}_A?6<@JXYV9cETe2deoVW%8aStOHIyGAfGsQd~46^JJwZt)@$f3?$d{Qdif_sj} zX629+b2Sp=DTH+Mm5w5FLUl2eZi;1N8;; z4uL9(BIm-~A56#vAh?pLUJr^y$q-GMeRE;8~X9)UfsHs+Xt&>H} z7nm0$LlnWskTLqxV0%t6=Y&zh_-Qt3-v!ewo<5i6HTZchr=(O?@E{vP7~&C!k=SiG zE!kJRC2+tv!Z8)Wb~N(Fn(K)=T4;{M@^uT>e2{i$G};f3FjP5DmKAK*{$qDwH#Urx z?--^rn51JWMP}z2wTbPa$gK-kKS!q^WSEE1NOhQFc>^SVI8`%-2VomFw>E2Xw}?T@ z{|&3L!nz!Izyc=F{S42BE)-o*haG4z75b$W`g~JImPf0q#d6tZ#gC||)eop2WL_6kYZN^B&dV>M`&(`t zMu<9TON<}Zk{HW;7`5-4_#r-^ieTESx(IR@{a$j<%35Z^y71DC|N&V!1-&{<(`W%<3m`TJU*GsiUAN9a zVApjk;*G+tTc;!BxU_Hk=DZw?tW%9(Cw9qanW6??qy2M^2HH;JZSae*($!vglLsB9 zF-O3{d+66=t@idVf|o$5SR1Kmm~WyWJ*##hD7BaG@O((lKm;meNPrLQC_~a!=hUSG z%4#f5Y%Q_2UAWbFXlxs+Se((l=zXfPq`a~?KFK_sSh&BUE^iCOkjGWlP@ewLy;N;U zImDO=_H5M_gDZzq%StXZa-^AW{^qo!=L}nmu4M}}EVKq$kw@7?OaiC(Npd5e#n$d3 zq7piX-l$(!?JHxKkn75G$8^q^#I0cuiOZiEa%7M?l6&iB#0v?Tki^om0+|AVl2IYo z1tZIf;>fi8$h6EOcRYx$D#K<-&iJ^$+PSCy?vSULk(qkfhmAx;)Ac|lqSjpf6mxHA z6$lhaD*F#u0pbFu;XD(Yl{kiar)wR6adMaBUemkQP4~nmyTn3&P1v&~pZYQjqxF@3 zPdZa8TB0yl;MYL+J_?!Gg{846iIMXIJ}7i4|gG z=^yg)|8%DC{P<)Xk0d;b{Dz3EYm0{pthGhbwlCJ%%o3cdn`@n$SR42Z740buiV-0$ znFhTG>s@WCs)Q_Uw95p7Bb{?w?a$uM)gZf${d0~86^?wUWKl8F9W-L%`<#6>#P!Nm zSTLbnJ<0`8x!vgz@H2lebD2Cf+2T#%@Kqs!i$RL1nsClt33m>*oSCYbXGj|NmKPm; zzr;dxphiZ}W674qy)AWi6$l|&vyi@xD^neK)qbm6*l2&=jM1CJ?(Jl=y>7pmfR3&y z9w_t_p}(#3cKVaP0l~e8#_V^{i^{e`L7C3WA+B~q>7nbb_1crVG=ITlt*?Kw$4GlN zhS2YZRmT9V5&xWSvHs+fZ?$gKwu~GD%*Td`skjKq1*SF7Ijvr6ax#BlviY`*k3)(!*L-l_}?`AjWZa&5I%Y2^8)t(jxdzS;}%-ihf>%rSC7~W z@Z^@{4f_u-@#_s8`5YFmU7XZp49gqatF&LS8s?$DW_lhtoy_BT@yk?qd|uZ^w(bSU zF04W=L5qI#2WrgZtH)s4VuNYvSso_ql2R5rJ?v=*2Ft3a1$rvEQ1{PZbF5HL*Df)& zFSc42LQ_HcjhSN>G#HyFTDGQ`N?OpvgX@wQL14xVk$Wm~=>~7AwiE$X?OfApa_wB} z4eK<#avo}538u?vt6lnku8y)x#T;@>==vY-)U_>P5_=%~pYV?)>$SelrBVB-wanyj zN5u!K;9EY=x;uQ!G;nk?TwBIg3eZF;Xa`_TfrS3ad6~0@`ds|jfR*OgH3cojsfOZl z;d(CLWZ*w6;u;D*&|N5)ZUdbJy5DBQCFCk?oX9b;vNr>e4&FJHehTZzEUh8P8Q*z6 zsOrE4=`IR4{dtX|ZGglu_6jM$R70?-rLpru3O+_b!xNeWTuYUJ3%figr;MoG3NPPW z20X+rQB4m~Q@Wn%N-Wk)J=3Y@(vrYxcu=#AE010E;5K znUXfE+deMz%t$}8q1A=&BB}eDHqrp5K-DDutv`r5&U3o-9V7kKqo~Vyxd|fhIDmKX zt&z9ww*!>I3Qlf{!@ukT*Ec6OfIZ;sj171N8$d052H~S3)ugHk-9ffz^B%wYb}zDW zOxA0BsRjh^?<7X1uf0C-=zS{|R^ha9e;q%Z$`wQ}*pHzVE{6NJ|vD9=8^!cYId@hnHrX!@l zx&w)fw3PcbF1y+(n2|Hz_uEL7=O_FX(#f~^_2dTfMI2&~f4B1TB0c%l-CPNLi=rzHd`(8kG9k>UJ6-D{g92HYUS%V}Y zUbI*@VGF?lsmJ2=ZuV4DguTp=+b0K^e9m6vib6(XAy`0DOTwL&edhAv_x{Z}lOMJ!S>S zB|Ut|urq*GD>hQt3?FsG2vmY@{?n1_(G5^qhegssP!UfuiNvtLxlw)yofM2X^IAX( zRMsGDd0qYsq?29XUQ2x@?cF{hwx)%XW8cMczGPzWkaB;f~;6?7Rag1&Ub zW51swn-HXAVG;9vnQ>u9>T2R=mH(NFaFGpkp9fI3ShrLdaY5i-j44n@jYMuP3Vd!V z*Qxp)_P^W;X-V*Mu5ktSoFUWZ{TgO}^#QQgu>EribZs~Qfg|59Vjv+j3jAc3wWtU~ zxL3Uw?uk4b_}r6vwQ_OdZK$8kTti`000F5*-tzpIvQsck8NY?C_5h125fzFKPhzXr ze)9~xZR&ALJVLLqjX0uNYPD}%Z4feJIlA$R#DLe(ll8-y;46*Ro+jcB*?dD+58Iwv zBPcNuNp{<3(@5ff^5Xv?V>QAPwi>|0BAja+!+i+quy}+ZUKGyDj+=C8;!02Ke=_u5 z3-s$k@G1Lv2MAUtBbFYWjJJo|n4MOPzM&U&d_S{>M8cg4 zO=a$ZI-M%R=!2Y`l$3)v=yPeA1UUQClA9 zp=ZR5$Pv{7aO2Y2_EiEo^J-!UWa^UNBohAp;kvky)HO3i7ZnC zrD%2$O%`N2KHHiu5~VZ0b8^Q{HkjO)UxFeNmC~F{OuyzMtIUe|bYO6RMGc{X2&RAh^l?kH7Ds0x= ze1~Vw+)Ov*-NAE(^r&i|Gb`QW?;*4`<*#1kG~7wp6>JQuE<+0N-aViLj5wGUjhPXf z@p>8WuFQC6XPU|$ukDU^2)a{?(F&*J4Chei@xytEXW7F!Wx{ZNHvXPtPm6qV?r>rs zm@pjKfFf5-&eR$&k(#N-yDEFUCo0gs-HgxYfl@J0d_|_+IqcLWC{coqfbkIqr%udp z2Pb`pxCh6+g9H|hrHQSj<2)8;wmXYDZRQk=^X;uk_}rbo|9tE3-~tLw`$tQen{La^%}0rB@qXCLNLGRd`wkX-9id^x}RsCVjXaf!I0bmd-;tsNH48*# znliL&UpC=cPJ6(2&t3#)eM4urSgZYscV=Mnvnbux5axu5cLLa()Flph+adP9aCMc( z@nqRld4-YpE)q1yPqHdY=*2Ld&N+}ruM5u_#+Y_EEnuw19nx1Vf18whD?WOS#TT6Z7lQ%qC%pWWOW~8 z-bR=Zzwyy1A#3COXL{TATZrHqg30AiS}pUE8;dxFrME3kHjwCX$Nas$)q}m&FI$9T zX(&a%*)liTJ}=o4POT~>_zz(XcG-`JFR8`M(mOfckh;cOJ}p*D0(jP|0&*=D!Q~+_ zGD8BDK>T7n!6jB{!BXJpt@_|H56gYTK=S1I871?Ek~Om=u?(+Tth-RXTuD`;YcWAHJT!JODOGoTaVNRj>UaSVgh-1R$Gp&zOIp0d zK`yY*>KMn0`o`FTY+F(MmPZr@asax`1b8$P5(xA!{>#&Oq5u#5w{S_E`E0Sjy~@ld zqg^97n~fGHXFlCv3q#ktgVsUYJ&bqaeV2R;C5!Sl3d{WqgGuwa?Lyvj}|&mZt4;WG=jxat;+|kc1<}< z2$DsZ5HUCyPHhBXX9SBGX^5-g%NFen&6J4}Td2WQu2H8u+tVWPh8az2op=7e^4WoI zxm+o*&FwcZ4ly5u4rpPvJBym^kMT@Twqpe+Z-9B?<+h#S?AT&1`N5YW#j0Vb+eqFi|>+7G}imMEpow8RIus)(`;VkTukgtip^u zud*bsGM8|0sYY`?mB|Ft98pD(b=c-|AQ^HGg6@Dwy!v5qs3vygZ z=$s_owdWb*M5HaU*L>$*cjINF6GX|pH131n0BAQ7{T^6Y8mt?v= zOSxU>`sa$ortP+8(Myg=Oi*<<#ks?!B(dQja^yee#jaAnU%zg=-v+OqsNdRyDZ;Mh zK}88-d`eV-uWxaq6qz%yoXX%0uj3cM+?6Tmi}+vy~vYluEiWUeIoHF0?HrfUDD`tYXZMT9cytsdD_ z9qg??wh0v^2MEa{x)6_;7@|8&XvY_Om0NdEVM5vt^tK)BZToLRf;z~)x9v#p^0#`c z-|od}33~|>qqn!M&%R}YZC?! zD8DcmExB@zduFaFgjvaty(~N8*b8nV(52|H9gS9eTH2_L3YzVMT78)8z5SJ;JTzDm z1wRw``nDzKJa4@Pe}y0@lSyDndWkpUdkx<*`IM&eYgFA3Jsi%ih-20Z{7J? z7nJOsV_l$>HRs*=ssYBgJTRwN(>Hp1_O73qc&p$JKeR8Ci+m~6zTK)T#y~(A>}vN( zX6@Ym%lKL610n^#b;Hk#U}dnmytcO}c|&gz7%zG4<3)Ci6A`~WR6E3|31-9}2ELfU zkibg@9v=`LAkjoPQWFmJNMj~7E(Q@%pVMIzru9zK>orr#>mUvCRH(LCTP$5D=lv@T z7oh|!hyAqz1)z1M#T;c<2klMnqo1pkla6<3v)P5bpNZaO(Nf*Xf{kOT2j>npqMulM zg7H@SZJ=l6s?B*u&l$uCD|VW!dL<-lA@=M3+}COV3Z?`c(Z*RnDr>rCvVi?B#W027 z3{sm$t6fi=Ag75z^AcTozkN||bt_k0>L^%)p7E=R>to;(^CwdLS|iyYzmL+W zy~#l@vh~|xKQK%9MPa_3O-i^k921)fKzdkBxc}3a3wqRClJE&vhf|d>iwgtyd=W}L@M!Og{~*hd)OYx?+P))|@djQ9 zQ}bApq4z&!Y!OPIGL{HuJ#~>D&Uxxm{ha*NCHnC{wLm|U zo|?~3e=Q3AJ3=yBdcDzIxg32VQHLDZjeQzSRiaMJ%=vPBr1^s;WgP^H<*f- zVGRvIuDb2tM>A8gP(4Nh*I10~pHsC78`T~5cd<@luWk`NCI6&M5B|`X>AMm}1dR1Z zrjbCmY}b_$z#YU))Cu_0X4ml0cn#yDzwup0e^K_ApBn#CqsPS!A=r)X$a{oInat@~ zlNtXorA!h*cYflHnr?`d*;X9+Y#R4O!GFq$yb56qJ!I9YUI?Sza+K?p~E6ORzIeMCePk7$EyBeD%KkwJk=?jZ@pZp0?)4gBk1ARgVJa1 zsn6_+e}-;wcZEwiHjCkS3JGJr~}0j+Zohd!}YYds{QobGv}$1Upwwwi9>mY(dY>?0!K{8r-^9 z=>f>9*69Pew4?T%34N%W(1#1M028LSe#=VJ|H|StqMtSX!FcD=P4>JAz|y&>YDr_M zDpP}Vs(kgD%v82(dIJ?%1OcQX*4(eWrHjV7WlkuY-l@XXs!yQ+Y*Z=tbinn4zDaHQR{E>mPAG z$V*Sv;U_ZPcQLIyC2_M}eZrsFw#a}oJ*W;MVmygfELr_@vU-Qzz9fz8&gHmF z)jw&DVkYhW{4DrelWEm>Za7rWhcXY{@dFIKRHZ6bJU;S6$ zom7}xXtHn0RP?WZpuN}m8{uz^ze3ua&R>YX)A-9Kn8mL-`e|8WLd!eUI%GXZQ+RP~ zs<_WuMwXl`5;j|vW2!Oqtg%1d+lcY7^tjj@!-C>EhpiPMR1S)5v#)J3Y#p{)Ok3JG zks8##;fITypaM|8vFR*Q%$H_xrENt@daMxR?FsD8egx3*UqSHlHa??#MKC_a@$I3X ztgq$78oJqst}h*HsMf?9`hBfgaRiVHoLECxcn}=9cg0NN4JB8EA?=mi3O@a6g5dZG z&aUWrQ#q%SQNJU)3Zsr2PiF>TIFrM87(D)M9IQ;Dx4&ZM#CSsD&!b`TXJ?88kqo(Hz;@D{K ziV9!*O_@x8v7cZCT0tkrka}zwwI8CCJO%t^ZGJ-BT~>ZZ?23#%VvT|;$R2SovxlT* zwzr;6?3A*{R=$W5DYxpB7G_5(73Qi zJMJw8PQLc6Rwh)|J~K9{tUZV?<_u|^s1@_28HnS~Kt7B=G10H%52GzhMRCR~kA_x} zF{^#k*5gb77=K27u$cxVKlrJwHr`df#`;M1i_#Ax(^f}173eMy0%l2gXk_lVVTiWD z(f?Abjv#>&;r^B<Ge7CPE;Un(&6prMbGH+CUt7WYmDerIRCJd2QSjpzd~jPhF9YXk9FhgE!XIa7pkXYs z9R-MqG`q|GK3u#6BZ2fTNq=qjf7&<$%M1>WruBTQ@0cvipxo+U&W&%1w}tiKgjt_j z6+$4(jfuCY$3&4ujRP3!wc~OZ&}!+Ok;WN-r@x8AQ5k8~Z??~@2hfkEs&}O7pZ<9e z=x9l{!G%Aqq$2e@?I`DhJUlii9wQl>_K*ORe3SYV&9e$s@3emoNrEJU5Kx44Y1?cM znZpDR23KacZ9?!PBnR<-6d za8Z8z6qtDS@qx+F&V2i$|0zj;f2csg&Tyl}qRIYu078OsG8iCLw9jTieBXB+XLauvO`C{rUF{i{>f8rlBQOXzJWSPQkG^K;B>t@yC~#WXEF ze-N-JFY1f-9oL}7$WuO!`lnl;()Mji#$Qz6oJnMyVf1WB@Q5Ka`#2;D>)YsKW1xAC!j)iQUUqfba%lf#q+P zxYh5CtrNJG$Wlqjxf1blJHbs{@$m#%PSwG2@v(tngTrGBh<4 z(9Rj$UlmFlzd3Kccx#bi%^^md{p1KIU$?F?KD6G{?ICpudrPw|_JU_pw};uRZR#%D zBl}%I&lVHf`x*5A3(M-lv6;z$IWJcAVti|op^-ezA}AEfPm*jX=|+-3QP=n;lp;ha z0PZngWTso^y|G_(?6E?GkpX$uh6!vnJGp#>S&IYHTnM@x({?(F!bm#DKC?|Gu?3KT zp)rNhE3@)R+tFw}%iuV=7z*Jb266*hn_%p?jbfO>WuC6^-yqf@+INqk<*QhRsC&sRk=x2x7pwLid}6=k8X$tg>@*nnEQ1)x!;& zJ1ZdiF%q}Ek8)3L$wkNKv1Ib+?_;0cU8rxC|Bx6gNJ@uXe}D~}QOK3!QMY#9SjpEa zZb6cWhx{uAL+|5v>!EyI7MV-0E=4hIJyfX6LOkg4$F`P#$I7>e+7#&C&u}G{Srab5 z*%$Y_spNXr1>>j54;QP-*Az<2NL^n+LGN+^#OX?{&2#*7BhQm=@#au0uXfS%{RlPI z|Bpts1p2jL?Oa5iQFXAw|MKE3;g@gt+LHt!uJc=q9}go^eR60TH=7ohhkF;F{^W^f zqAK!o;4UB!%3w>Ay%oTeDf;Xy(f~@t%SXgSNmS8{px1zA{X@#Jn%BRmD9y&Lv`aFb zKY2Ag0e|Q5cL{%6-M>fp-Nj#ezZx1n1pR4+*|QBusmt-HlDo)VOq#P5%pNt{^)tFW znzdaEV#_dBB1{U~6&<+QuJI9VSCYr2V~jdm>4bJm`9@wy-^!hZG+|eX=nySR{61jfJ{BZ)jmcbwlkHkgJ6ZQk zg2+&YQe;P{YR1)@4t^#sCgzFZO%12F5|mjqnF-XN+%VExKW6`+Jl*r40W$}@Fi26S z5F5t%oA`WU>%u0P(5vZOSsV>a97Q$t$Cy zvxKgquxxOl1lS|XlxgV@f)>Zbmi^??^RK&8?oF)=Jn@IvYbK`>x5GP+aymEyS@8zDF^D6QX)6`X6X!Es6cF z#3^uRiiuKE0%s}6OJF97S!xd_H@^2Qu|O3*_}X3eS0&@i%+hfL0YkGNAWlc8XP~f8 z1OUM>>|ZSev-_i%j@S!L=S6+IC$OE88RIEw)aQaFh@-z9hfs#63xm%~jPEru5M;Dv z2$21a_D|^rcy&|TNE0rY>Wh7*Iaz|)VQ={!mIL<_*nQD(U^JpR`(x*Vskn*1(TS~v zU3UojfxNI{*l%|7azqfA$Y*En0$#C!qQzf0ZtS)QADA+#{~V5)Lg z){jWmFP!N54^TC1kgjEzA=o5 zAyng|ikg-$A)84p6zIW0b}T`Rpx9#VxZ|5S!TLP(+KK0oHYOOZ7nQn9b6aTinA4HK*_k77mq#VO2HK|1V&&XmL%5s^5Um(BmgNhy4J~N4ae=| zl7$cFO%NDGb5NfBx$kh?m}=m~NTK>@HW<3AW$=UKX=IPG$}ZgphH7xkUEFNg%tpvq zNM4MH$(jdcf38+69p43^m_0|+N7#kFSUz2H;;`*=ckCnWt7vtCyi(>4qQ7&x3o#B> z&PnZU`k3u&tq07fNbvY&V%&pPzH?@+71Mo|?5`rLB|h4dBR*>KCtJh)m7?D=a>Dck zXg^}YN?1Zne&9)$kelNY=0ZG->dP9fC^Of}G>0-n-0GEyJE9Ur{@4X$Bz$!=zFjph z2_3C0$tU+!Rfec?WQ-1eY45E%-LQD?j=#-e8d7XU7h%k6R{Zx#fIdl9()17PQy6Dr zK~UN+&Lw{Ku5?e-d1(0^D(8fGa&ie9L}kRO&cZa#j4@x0>V_gi82V-h?Qy{Dw)eh( z$ZT22i6XVakTftw-{-Zq{5SX|Rap)Bd9f}K+5N3c)Ei-DR0a^-uMWLKBGNDnX#2|k z3Kq*b5y8C2Kg93=1D&mhrb_DbN&$i&wu*8PutLWQ$Q`Zt-Nl_yb_-1_qU@&8%N_Q5 zw2J1`Uv}K7-;Oax#?K`UA39&kE_crt_Nh5v)?Su5U-n~F;f&%v&zGN>V(P|UKVKY> zP9Oj2`1kZ%N4?@Hq$T_6qrorlO>dQF+J4V2p7h?ua_B9>HJaJ|4aOu6M4e_`Zz5K=A)=^wb_~YMj}4&x!uQdlfsLp1Qv5|C*jU8In^J=TF9IDQ4t2S}Fri4tL|T0DE3lFs+eldFU`C&_^#1)nSJf~4u4gb7u-g6B z($9u)#@Lx$djFG)BEMR%>>gGd;^1M3ped%#_+~4xtXRq=nhpDQ2U2lT{^MS5z92?W~R+=dc7n+N{noa*km8s()mOs!F66 zSv)rliy#N=k^Tqd>|`e7JyN-n%=^=<`W@Etr?Kp<@5AT{>4!cD4Ljlww>dc4WMS;A zjy|Vh1kb$&gOIta2d3o|S zFP3{E;in>Bz^7*winORN&0V?pvNY=ibK{SY2*Cl6VFy5t2tWcoyS4TX>sxHpPpBVs zoIR@N(A%!8??i&WvtM=ueU_=h5YNQ|cvK@I^jmaRY7=M=2o^r9a#{PpI5pJkA*QH1 zTv*@XNaT_P^WjnwIntL&?*Vin(S*}(CD7#2ZFz)zuC|lagJzQ}7`V@h_1MYy{)(g9 zM6H;c1KjvxldZ+P!Rr3ju(dLbe9x+yc(l&Y(Kghzh?^d~%e8)N=NRSo}Y%@g$xR-M^WreVa^hH^hSwI zv>)Exsy~o~yI6iOSyz-p_9Smch+F(O9`f&n&pnxbyeB??xisC~6BKjtdFeQRya|8z zP0Ph1!vy1f9qw&8{lvJ~#m6o)^>P{xA*~3`3ehfk3^(v?j<3MDFfB*YcG2--xtnst zaxIRXE)vFqJC;~g=4AIegCcpoCl-KgDFrSPuLN|SPvdqrZgkN7V}y1XsPF<39%l(O z>qb6=Y(w&)6u&uaqB$Sln_fx2?>**oTt4*S_bz7W73(S_L`c;-MXvx^7iYeSIQ?}y zui!$!)iOl?eycS|SQ;6ygE>Nq*8r3$bBo+wlXVVYoq(Qs+XPVjVw#@$_PqaB^h{91 z%p)?nal|0Q8Dhqv|K63Jxo@1F>G}Ud&v?%Jn-=2bbKj%b@$}3lf)M^+%7@I1eCt^D zj2LW^(c(F0kNy{}X0Iin4q?^@3M)9idfSV7+fTP2z93D*C)-QxQ_L9rm}IyywB;Zt zU>=9JKbM$cQsg8@M5H2)RA}XPwlUJ7mD?S9oG1eXqtBKP4K~{UL?=LGo7#>b9~x9o z>@oUqBKoP+=+_7BUtXks6DE-0?gVNYROmh2=8TW&5&Lz}6VuD7i!g)G?V;KP>AJ#{{G7^hL5Cx#;m#SUQxohvSnTUs1Bm$k?$YftG3_c02LH zJBoQ~FMCKGBu`Z^QWFZ?gN{kxxXzViaomnwAMqTn=De6hwo4rl#w9Ot3^$8jofNR8 z<{X9sMfjhb>iD!ORF>P5k4nAWLh#294=oNg7=?aO*DD9Qjupp)#)77N#lrZNiFKu8 zs4M?!eWzsVJD@2}eP1K+I~Fg29_-P?We~^EOs2hoIown&`GpiySXP0b*uh!ykm!l! zA@kDmkoSQNv*aP9D6q@4@1FMMNJL(CH}6j;NJP{g@<7F`yHeVqK_;zPJ!tVo_5^w` ztyCE5cc(L2WbQC{=kE;ef4hs~YrxwEvI?hBW(bzGn1^(3c3{Ye9 zksZZrD3UHZ8-Ek&ESi)6y5oR8iI`7XAqzmoC?>)R@!W&OG4G zxLv>S>a@45UDMubjoP=+_R8Z~KDU1rAb-i5n$Vx^K)atdH*@y;VzXbLR2VpW8bigy zNxn^-BGr3vC%lnqgVa;t;3pL+UO_cy$QH^8=J_PSJgv1s8EouQpj2h6Knt0|6}H|6 z_v1G0J6G8%TmpbIUsVv3vTX!<40?5(GLXJ_hMu5k1Z)~}9ddFt(Rc202-M#|W2V;| zX>AcaP~t#G3l{NlCZV{@hiq2^dCVm%4 z*LFS~kk zu^X#yNV6M{n$Iwb@mt&9++*!YJUe_=V-es;i$^O+REbfU7n~!*HYe|1A;ttXKXZDJI)ALCu@ z(014zzf1F8X1}UOi$YAt0Zqq~-^xr!bY*%vzRyE?E1=7=1iBHBKJ-=X!rk_QK8f)I z-S={vULNAeunbSD)_*V+U=I<5{Z)YJkEQb^5SO;b7mtpA6Ad+WJfd$db-!VabLU!? zOqyh=5_-iwmoo>l&fB)LsYd>2BY+nx!UEvp`jPeOAyRI14vI$Ox%n~E`K zkOd?GF&(R4bdZJ64c4V`KW$)X^ajh`vkv@AYz28$YJ#eRo9f4!dVTf=`b#&*$IAE+ z1Ykf&nx=XGj6JnMYAuJ}!KqZ8(HWUNCBn~A_U5Rw+~lNEXSssHpPiOo-&1oJcO8bq ze#Ia-K25ukyqWqH)bgLzbs|??9c+I>@uyt*!KT@l&mouJK63dTpQnxt52rnoc$qkX z&!n?BOi+&sf9tdbsO?K=!AbRyRfzYA!)bc#{a7Vu(_Dtp5#Ol}`!!yeNFj}U{O`fRveUahVr^;)B zu_hU!&Lnc=B0na{PF%m@*=eAh1&xChRWrzU2;}RKbdEVqPJpMCCVbQ?Y}3d&ff=SS z&k}|BQBbL=iltwJ0x)}rWRJh%eeU>?p}fcV)AWupB{b&ivG;MFLxE%NLQm0C&Bn>X z&eMP!!qgNcyCkAh5_3$DRvUR&x<1E>+Ntn-x5Bf)tK&8PWX^;dYl|}e04@M%z9l_l z&o7e=N^Nzp;hhw}#|Ij=d65bBx72fp(tumd8iL)-5Ndv=LqhKHHjy{j)%I+|bj9 zev&x;iZFYGnsMTggQPd^AMie``$JuNNY^kUnq`s7*rZcUdLO>?#-cN|X5NQQ&ODDF zxBp}MAJsFKElWaMUzs{z+4S`65^`9QbGXvAxh}7^*JF5XCq7j44i#i?9=Ox3I-qkx zUnUkl>w~)O89)&pqu}rr@ z56e*RSqv0(ejrjb(Qm%4+QT05hN4g$XJ6^^-f}H z<772Zy_2q@?A&85Dm5zbCNt@-hJ3lgs#g$Bg%J7%GSgPwspUI~i?w`@5Ip}+RRzmP z3fA{UWdL7%1`TECjUQ{#ml#tCPUm@6dC%UB9SV)(j$_<1@H$=YL-dSIyB96EvFZ;i zF7po|TkX{8+IUA~^u2>K=!Y=6KNQ+Yw)GJ@(Vju89O8*j+D20^8^HM2*o>S*srsF) zVR`)yjN|BTzG%ATJA~bw3moV6KxHv1?EQ&vm7bRBJ&0gka6JH^NL)LU5Js5kFCPqi z_9do{>7oVvntUeoy=F68m%e;BvG6NE#C<$BK;>8{OW>>sZMW)i9Dr!CKYj8zKt$zq z(ar-08cvdaCG=$h#N#hzbREV40yDS@KL`^v0+Q$CTU3f1UY<8&zn%an_C#2WYnn`9kGpKus_X>|U9JL=pQG>v{(Z1i%QQ-cGBB;#yL@<(hVa>iQCC+Vu`ulfj zBJKP?Vhy$(#b+U*TETy0E8}aKEDRShl8wXMXz z&>KGwNtU^px3D-q8)?@1X?MQbr$H zpqJ%!{`j);Yy4PEMT3#%V0=*vA?E?PhF^}3rLOVXHT;5PWle@Tzv4)ps!Y{+3f6o{ zsx{nR-WrNecSEI3vS(2oV4MisE<7^GR5Vl`4Pu^JAw!&q0OK+fglnD=v+yo{9tS?l zf);N)HuNf2{60|Oqt~9^#t=SQxidOGpFd^yWWjrSGWYQ~7v3HE#GHJStk>foM|0tb z6BV))2*%$L68mIF|0qkEMFQ5ya}KkD?$j4BSOr4*RL8rK=x;0hy(@@QCFe#RHsrce zoK82*dJSZfp}daYvGiY^wr>JuFg5ry1_9dfG4fvglR;F{=1A6GM%i`>7mQU9Y41;q$X zC%>c2s&V6s+WzV36Xi@jY{Z}NE0W3Fw3|c4^(Szc>ACW-oH#A=2_ z38tz-gypM0T)uoXKBb&gBHf>W3@vXC2YNoj1yTFT8_6}k&|D9be@AK7Vi#C98z;#h zPfO44b?)qv-X^q3r*^?ECU|hD3hBHGbK2iY;WYVo0W*=RLg;)LR-L2Qx;7tlg|32w z-I%2BwzoMIh&mEO5yK3k#l9lbV6(;uDeM2dmh=AqptX^q3bivktDTG3toZj4cTTY_ zu?k#1Y%LCYt(jsR)s&$dTGiADcz^)$E%wV((}N1(MkgNf`%oZ^I(;@uNmD)S=U6%c zHEbbltXI1EBauo{ZtpY%sEu2gcofdjYvdvZpv_Feqg45ZPO)aum-TpB?O{UF@nxXq z7p+fh2XJ_vZGs9sj{9qV`ea9bA%9KuNt-L!@N(B|V|(qizX{rt=x6y3L>TyIR_`I9 z@Mat~@ymn|-f8dQb2(yO>BusgCI2lueX;aOU>ra0$cSGv?#N3ofK#6VS7+RjgV-y! zOCpu4EXa08euTPdJo0B$3V0v7{j>keVB>Lz&}MstGtTV?sxSD*VQIIf19D;?QHNtW z5{x1pw|}FhT~1i^F!0mZ=_Ot;i)D0rEOSs!+QIVcfY+~sS8z8Z|Ev)oT1zJzt{(Xy za2oAc%vc)j;-L6CoEeO_=c}Aqj<@HT`UuMR+HzmPZfgpxz>&_$#uekokGZ^w96!He z96uirV4y$*dKC9s5+FzvBL?FCsfH9(-wbY|Yj<@D|1m15$waEj3lzBExF+99t`{gG zA|^xn7Mz!ezWSoQfq*NlDUo*M1zP>|Q++JCaRMbbuID6PDpmDbO=$g|M#te(P+{N1 zBNpyBhff1fK_ha3!~$oFzH%tV87u%^BM5%$iGiz(XJ8sBUwn{Q&17&~?X&(X@w)=p zSZJ-))2#m@#-+JG0=ebfd(HjGN=UBNQ?~v=R$fXyMHDpriae9yO5gI(%xcgZudHkD zAD*v^`Ohm@WKOAkO3g{zjj3S4-h#a<>_0)_0t(MImSt|OWJXfic_%0f%f6cKIGt0) zTVE}lPw)B!LZ%-TIDv#kB#Io!J{+9$5B#q9eXj;I`)T@p9S~;d_i03q$)#slKh3fu zxS3((9{z|=0!?pTwx~(ufzH>g^9MsZ9hm8_1Kr=%EwOGJz}H{aHPZ&=4?ALdeV$$`Ntylg%-fTAMtPYp z!DG}JP=}r5nlRWoQegE0r^Lyd^Nf?MC?18U)33>H%dZ)nGd_q1l#j%wmz2GdFnuT_ z9{hn3RTKYkh>%QB)?H+Ui(Qr;#MvFa>Sb4wUK)+L9m;g`<2LkO;K+XH1XiabXQ)q2h^VSDw|gG+?>Ew8y4Q^kF*w?^H1V83HfezqQiZ zs?~7d&%DRk?DM=2Jlbb+kQ~S#fA6k$vDW*OPA4u-HI#^!ZFg?ZB_& zj}ASwsrrae=XNJv<+#d8>mx{4PbLbLpql+Ht%fOf0wmL;K=+qi3^>mf0{kN!)_LC+ z0mtUJAxi{V5NnVp$JNr_`&#Y0Zf3F&e2`;eT_}$n6YGNcIA^0Dhq<~sjRvya4gze7 zckE4oKYCOj0ov0Yo#sft4t@csGgk ztv|Aj?8> zl(A8?kDGaE2BD5y?4q@%UaQ|#vl#q3oandjyi!$8=*6p_cS>tVhodd_O?T=Z%i4GW zEz5Hn=_UYERQ?%Xya0a}jE}kH3X4j4TyceVTl{U%fp=6ts32ji2!5~L8+h~+&U?q$ zo3CRe5!tf_Y8~ZJwJ-3KXB(sT&jAOTOdr(mU7m3tW7zWNOb^>{hJEfDGZ2#&d3-Z4 zVP^btH^xr$G|{h$PXh7Vfd4R)$HAsoaU0r`xu1gE0y!v85vG1hRZ5ZNF17hl|Eh7y z33PvvedDe#(xZv%+l#c8^%bj|7_jfW>I9SjQKtyfJ6b+h5djK0=M;6Jh6Z9724JTP z$Dq@LH?qAPsDZ?W$lmBBIK8f9m`Sl5;K}K+JAUxS1$S;Vz&HT}ev8OJlD3+|YQ|YK z2|(OYyWgk3Jv|4Azse$% z=B9#oTJ15|9EokX61dc;U9l_FM8%ZLz(b_+HFG`m@Z0@;x)olm=T`No4zwCo zL%&x;|Nm%v8~7-zD}j3^GYKOM%uoVGi4rwdX#79}N*L6DB%l(QBr+k@5Ns=*rmkX` z0o)P{4zU>?$KqBjZnec~yLL;rbXO6pU_xjT1o;rE5m2$q+8YNgDkVW9^Zw6$o=GMF zyW8LUzW8(UJomYu=iYPfIp>~xj?)@CGV2O^MXBAm0W2O!f%b$B0W%swSB^ncCzs?@y~=c{l|{P+DjWr?1ErIyd+` zaL`>@hJBD+6mr!U_`+A4{nrsanEmGqb?F-pJI{c*|67m&P7ni+Ks_?esOH{Ggp1`{cK)PP|=oB0A6Y_B@=4 zIH|yXgT25qkurt}D^)7WrHjx6yi;{dypp*JiqM2U2C~!)Ca`-M%BK_R(RI>2Bp+I? z@%oBREXim2m#SZ%WDIp2|40Cr@^|DkUYh-?2AN~Egd%4CoZif06j#^NW;+IArgpHd z$9@Bu@|*hlj14b3dl`3QwnvTYt?W(maV1T+t#8*b-s}P6o$B@nk2NFg-}KJ{Ls$Rh zu#5Re9)Bl0H@Mdcfw)j-N?9U?lz(#GY@2eNwR|9$y}ihWjs8*2dBt3GyxyuplPWCv zLIe&gM)M#}yZ6Aw&(Og_hX&V4wHqi$5$odl-s)f$^{L0rRPC=p%VQ|3DAt|6G!K#M z$(L~=G$=aW@DL>I>T1tprmjKkOT=(U+=x5zPImQKzPpUw@pmPon}*`^I>_& z3!ioI0?r|d-Ln6AClALy?G5bH{PxME_VBPsQ(B}sjZOL}abnVmU)h1KIPB7UFEVCQ z@j=;Bf4Ir!rmL6p|3v=3f&XXlzloXVZ!bN;PqzqEV)um9n=a~;77fpG?%dJ6%h^(? z(^uzSd^rSWyqwYH$yJ?$Fq;f`j6e|QX+oL~lB@c5&yS^!)kT>SvbCl9c3may>B9;3 z7*NuSy1P})Gx-^@oB1&)pt@xr&ZwU>)(o#!Sd$gaNDL}h8wuQ`v6Xc{+FW%pcs|=K zmYle$IUgnW%~-QTwklu|9yLi5oxN1-6L8*w2bWB3=?NZH1WKbfWh#q)0l`D6-fDMT zC^NW#I@KC2EWnS0yj3lQ(hE*&`Z*+EJaRtnHaLl@a}ik~59|<^Xeb;o>0wIDM-y zyD{hA-2CyY|M`wy$W%90&~h%rr8+KHHJn^B3OHHv$2rlPb^JUcqkqPu$uV~l?P-rshNnE>PwdNoqYKVF^p+TB$L@H`jg{5;LTQje<~Ym9V1mc3 z?F&E9Zh~6mnoMtP*8Z=>2)|mdfh|#v!)YwuLfJKCd;%~%KVD4tXmbga3~#Fk)kV)T z7KkUnnf0z)oHb!cF&uKs+3fJ@`KZb9xS7(JIe+k%dae~Ww3t90Rav}4nM!zSKztgm z{CDc<=wDj*SD2W{{Vr}1_b_p`C50xp8oOWc-2(pkrk|hk(z3){cwuc<47fWfipISV z$jTMvsjk{R*1lq5vk8y6uGND#r(@`}im2WJ<9PE2>5k)`t<9@%u}^cfB3T?`;;jPa zd^9Tnrc>lyT#fol+=Qsr>qEeYe^Qu$fcobJGAi6Uq?9k^`X9Yv;Z@2$iz=}a4i%TR z4jIo6Tto(jevCEOU%?7t3q_|ATy`aE#?O!X!Gq?SA--AoU40FX8^t~1WQAJ8zfBz? z{gb_%fGwzjjYZDH9Q^dmajN&LHMnWWS8mLA5o4`jv9tuEWwq2JEe*F?8Wo6^yVM4= zkkN&+rq`(Sb{!|Ab1d_k0?!(bKh(*mWvOUOG%o;1Om!p40|gB~;gc~A4OIBc)c1i? z^3?HKbLdwg;F;sTNH{hBO=P7WcjSviXoQ?@4U-6Ogt(rMHh^`9XiKMjGu%tg z4d(WioGvAAHcOHtZ-!e_r_}jO?T?n<5E>+|{I$knnTo66g}8J9bP9TF)&2Rb-t12z z5&9Y~OW6{v{+ObvgoGb}4!!tQ0UbXsLnq8k27=djL~In>JJLHy2g2iOh+?CDyIw9R zb*uZ4p8Qc}aTtPEtnn#RO&((HOJGf_ZNAY8Zlr|EBrsAeD$-NFQl& zCNNi%b!}!LcP>R2;EhrmN2kP6)}1J)Le1U@W#BrRJN!Zt&dIr!zs#p*7F|Z0%CW{X zi19p@lnqH2ewcYO$MX*IcR8HpuiujKU}@wDl&Xg$H>!tGG9E}=n>rvP)KSuhL2)p! z303Oxd}?6M;$V!!O#EQ?;w{{*hq;ovwi7eS$T&IDF6qi=*S#?*_0T^d+S z1J?K?a9#M{lA|-^Odr2`@)s+`G&B43zU-;P-xUzjs9e&pB?(_1%(-Pc#QoKqaL1{Z zb8Au%BATK8TcrQlfHyNicx7!6i-W6vwVCjggX8hr;gylN!BGHHUAA5Uo!)N^YE5o9ee+{i&#_6{1KTfEk1{b@ zG}Ap}etYdz8Yv_8)jN4ld!iUa@tvoGeMs{{I$r(Y@^P|HYaI|kAYQ1 zo=s_ma}HGD?Ya^=FaeW z>Mq8(%b5P3&ba6-$n>J4)i($^Y7VKtcS`%H?S&>#uQl(Q9*SR7U-ObQPCZhFl7zqB zkI}4@bC_6@hEf)4a4Gk(0&1$H*eU|3g);R8EeVv+kKMBHb89z5&^m9&cD^T8+-==A z`aj+001*bQE^$v9#u;3jJJRZ2nRpJ!*8b<_b>rvQ`VqN4dQk0sX(L~mh{_(6BX-}6 zOxV5|V__)nbK-k!WTe%LBfH4yMYZn$@WE6lG<<6J!1~~D0KqlvV(!g3EJ6IIFY2MH zEZ;Y|_f@dWNmbO-1$NX?W_(Gdau+2Tr*fZ%}>a(6-G)Mf$(;m=jZj zzK~a%e_WAcV;?9%%ty@-Tib&;8?=$FOuaS^{n6~4QZYQ#>1E2NMK450!d=Z*-<`)I zOkU%W`7X_2_{6%0%W6fHpHyF#<+V{qKz*rYDZIVO5trnjD*YY7o{55iEddSFK{Lyl z*E`MqRrL9v1UIsT{ieZ!`t5h=gKRIH!Q56}p$4&BWG%sTyHv+|qHwActZmxBrn`dm zw4F3O*WXmGZXqihLk00W{7|vy(2V0Juh?193YgT9Zwf|Cx?O9^&Hl>3g1eZgfZF;` zNqj*QjAQr~t&9k$U-hOt3rRJVmp_$R=*35iWn%m(_1%*!7tXP2x}!H`n6Bk3%6qnE z_|-q(DZLS;*4I2+XWNTQRWO+n{#dNXYsQ!!UkRkw3Kl&^4S>jr4FAwCOoQfED(dxP0)oj`)m!CViCG04UpEG$|I6d;Q zJv4N+oebgsG1>U}L?RPjg7TvO4j3&JP%tB5jTeyTZA1AXTHsy~_+!rNkn4W^G}DXb zdu5{xKdT>lnd=4q2kn+xBKt*CpS^{zrJPW^K63)IJ>uBgvH86}%Ues>LMP!s!SP1t zaG{Il3tNTtu5+c6EAAkXe16YXaM1BusjAobixazEYO3c?8#{(!+?L82z)kRmkeri| z?y-xndwRm9{-hj%t=)4hQdYw`;^SAJ(r9ZW`~`N4fq!?YYS=5vY-cQUlUTDj-oS~m zdBCdAN`;^RpRZ~!`yX#_WU{@#2`=QlX|`FC(q_N*y!j^s>Z+8ly<@fi<842I?;XY( zQ13QqG%<(Ruf6{8bpGRQOf=hwWn#xKv~zK4Q_20#vd?`;$Sa4{ZMHP>s>Q-wJ}zm( zqUw)lddsus!)?XKMpdTK>ieuV z&1m7?xVJXlct93!o19NW!CAYfD%1h36ci2VNZ)6R2V2Z1kv9<~KSPofER{H%v?ubv z@CO8+o{J?IewR?s;9&A^La?Mi@QVRsapvaNfne7M%^y0Z~Wk(Js8>^f321}64W1_qjSfD*Bw&r;6(tnMW%Vt93 zGrhi*ev%i@kg?Ud=lHtnrZi?|6xV+~IOLO?wAUtdPOBc{B`G$rvelXA`d*T1YF{z! zGF-M+XNJuzDZ8f&CQHN5Es#fz;8j(Ks{MGZUif`dQ7~WTbK>jFCuZw)?z|RX8}o_T z!jkz|-bGFc6aq{o7b~K3UH#tk+C=&9XmPap^LCax_Lr$C$n4aU*M@c-gK#fKkPy4s z&gxbt4Tw^P{&AgJUd_X@zWxfob3C%!!|8P7^ywu|Jc(UwRA+7e&Ap4AfWxYd~@JTYLNJ_g09IRuTh zeLn(keICO?$G80OfN@_>1n&^a86EF?E&PeKt@jqt>x=d|Fn0P?`$|oE@|)TSE(_KJ zw8mm*s*q&P7iK4-)A*#ITBhv5ohAylAWU0lp2eAw9f`bl-_9k2VwqXKz2wRz7j6$8 zl8bq`Wp;cKNt|Aiu7*nC;w+~6Vy4S4J|C9>R*X6y!ca{^V;TLs3UyWd3Ir^L7pX|M z0IZm~B!iwxB!B_02%r*4L)Oe}f&6Tz?A!Pv!<>cn!A6$Xtaq`;ImSq?krlE=idhqr zl50X&-0!^?bowE3e~zFtr$RA(G6X!^GSu(q5c!i2Kow_pwe`JF%`u^x-B^rGh{$uP zu$2mR`2&2=SWkJ*&#&n#pKX@UYAklOWjueD^32cKs`%>zRu@E=Y{NY}pv7pjw;B;E zcba*G5$od^z=TgCTNi=lP!o^w&>cLXxwNV~^s25%e~QJo(BnNW?!pUJ1l)=B)zbUvQTLzyZ{=9Kj4&nEEO_%rzw*_zF-y22lwKdW*6 zl*oz+@+pv0rtVLEnh>2ozHxqz&>^W8Oq-wlgm>`F>c;s_tIvQtHalCN&!*%aZ}s9# zyiC$hI1l5Kyy8q>%hGi9625i?)u1M@i+#BEH0dU;6@UfE8M~DmY6XG)ChC09uZ#=h zyHy9_+ce1p9VYij2bT>L+;>(Kgqo(Jpngq39N7%`cQ*PlO}h1f$n1Gvm?WS5!uLsd zOijY^g>>>QlsJT3<>_^vENbnx2?24bU9FS`tu+m~FiAruaPmzmL#xpo>{Y_S3jO%& zSv!9Q{SaLVvlW}~Om5adr~{xod`u3Rfap+Qtq+!BX=pA>VKdDKuS6RE3pFN9R)USRdJZnF4ruh-kXZ*jPk87wr zIUjXyb2BU4o&@!nB&dIbrUFn`vTj&R!n9lo^LIHbG5&u8Hg4PJx+=<8bjM=-fZTu4 z_2C!(2DD1pjYrzWITdnr9{{5-X)U-Zcj-C%K9-$%x1(9^H%)jj=6q0&LvU5kg`C#V z_r!aBHGZ6WdgJA|BXvEpi&n@kihgZHw$TQb;$#P=op?BUqk}yqxLB;%E%q17;-WDX z-g+om&f&7k+9oFSLW28+PlSJq3nkja4*_$;p_Nw~K)dvYiS0a}Xlx0!q3060H~{9W z^bgcEiwhH-`s1^S+aT-#>vd{o+f>bE`5Q5^l=b?a5Uu_#{zK(| zPWiTs6I9<@i&_2*mgK$UNwLWfoWYg|Kk%}dr?)DNaMTw$HeQQh!5;VzEUDGjTUeK( zw-{Q@l@M*7Qbi=S9y@es(uJN?EwT++`c6|Zh1u{WrgEI4aV)UX;+I(ZBzJGJqcGm9 zQkuLImBu!a@eVkSV`0L@9scgl+fyojq;USAxA!V6fRCv2<>aF1$g6VLTu^rcfs#Az zb9->{cY^+^;mOV}n6I&kENsa|NBnB%5=n3-ihBB0$OsyW;q$A5$E5teo2|j-=<-Yj z6;hEYYdt(eXkRsPf5dS7IX6@#AhCUZ{%ZZMt%FivVpR_1E95cwILaPAB>+Hn`Za5)rs=TnEt4!*F)&`!dG$dAf_Ri!Rhoy>_g1A%lo}$S#PN7 z$v(^|#cak!8kZX(9pb~JEmgmUa%~jX0KIHpy1p__eV_txE3HLtZtm-AU3(n@A#ToL zxtN?3)~gH>I#Od_**p*CQ0+kU@0CIMZl0gz9})slo+J?SGb>=qR0-6(CILqln~_~^ zp=-1<)8AO>R99QyCdFn<8u)Fb_3gIUjN1l&J4O2z4`b?=#Z&Yr#5;+lC^$o=%urY;&)aUyZ+o`E4Jlt5dOI^)4EQMZ^&>T=1 zOSzt4_K0%vPMYt+^ZK62c;$hSorcwUI%KPX7bM>_#}pw-ygmAHl>}H@abgGbj08 z^F)3R=#1ul>Sdj;!}s=Lw`Kalfl55xA$QY>8=o#06<>o!sd?=8!V3~;w?vE$N}In( ztB7T;W5Gs?-0D2m2?r;_qX(SWh_Z|~vB)?RjyZksu`zc96qTsHyVX7o#_P=nGCwF zD=#;`$m=eTmSADSSiR~U))i&TE6Oyt~qoY`W!Crp-;s|psE`a9DHSnS*THo^9h$x$+O$2 z#07;{I~3}U-sdvz%Z%Rdj&du}k7+@sabH#xe+B-m>gb}Z`O(rWE7Ic9DXiaQU=!LG z@M7Q>(s8Sy2v}`RfWq}bg}D=2f9EHR^zSf(k+!js*0IzS-U3f_do|}~MP7b;X^}h# zJi$k46O~h2hNyCkHf!gwJjJz6g|g4H?42!o-GV9J0u1a{7r7hZJFPQOX{Y}oBlUAW ziY0CeNacco-yd8fgs!27WfHWJ!4G$_7`!o)IC$#6pZa4l$yyqFBu6&I+hp+OdFge& z{_q=k9?NDbOYY2**h05mS_1_T1!=9{`M%%$;d{Rc zEF?Ej+G8;8ij{JjYO8SuHv>he!E~udx6pe&Y;D2c;ERPkz4IM*3H!jN$&DUUaXKGs zbiJyE(A8MUShT*`>PG^ax?Ir#aic(e^KOlvd~GYrH8<9r#wxE`_7QE%%mWg$e@Xln zM;RJF35=(H4|OrI`J*H@o9hpnir$%ic5J<a=L!!xyJ|z0j=;NX*ZPa>F;}Nq;Ifjku#oJ~d z#`3k&?{ikfw#o{Bng4C}pGju(Q=9$b-fV4Co!$>_8t_>xXsxVMos0Gi{5&-E^YM2E zeiq57xAdCV27VsV`x%qL)NbM4EqMTFC2K@$v*C3@HelIBXK@S98eg(-Oa*Q=rud#-C~{7b z6kP+T)Rl{L;RNO)P+@B6s*Z9^gaZ@Os-tpTX=zEU$>$H7uUN_(8sMDoHpq0Bf>LK%!@tLpM8Qun7_TL_~{s~@) zeeXUFvD_##e4nD$*yej9G@?T6PbWohK<9`%v-89c~{u+=BtAl-1lhCWBj z6O;ENd^5Wh>eXXRZk;*W+ES5AR) z@$;RNk53S_V79d26$W`L^%+I=Fi-g>vFd;5-*~5xjK{Odd4vC@J4py;QjEjJ*licA zDpPnQHNQn#GSqKwl&a*y>EPAQ8>ZaBEqP4*uB1@o^ogpNmp^X)M-;sn`I0= zY$D#x3f`S22g6a)joGtGRqM424eRZb2(OVeHwENx+|Fuv1WuB*) ztIQ}aWYa)KM0^r(O)?RYc??ZnXKlURUCA@i<3gX&Xlo-zZL-BNi zTjh1g`p}+Ui2JZNZ{ICiY}%xG0IhfQ+Khd9dt=VYz79_WQ!Seu4~uGkpKt$SsU{7D zeurEHt+AD>E$@IqXwTaLI?Fq6TP)Khj$`Kb5K9Z`s0=fp2bby904{69#xh7mrU;rI z#3IN*-fJP$tjH3TRz^!+N(xI3YrF)>$jpklCsjvrsE*@a4sw${p6f**GbOIP-gp}tx6YeF=@94k2FPnU;1ON)&CgZf33>2>G?fV-(i$a&ufF{u5h&a17(rsDe4mH z8L0fQ);nz7)akN*g{V3{<#MYO_>__LBdvOs&|axF`_T7)Tq#7B83{=TuK(d(*XcVIN@q@@gNQc_ z!ltv~MZK}59GZp3nJi+I^F523lGO&Yy}#Dj))~1Q0Fh`6xa%@uH z{A)`83BJ+jdj*6s9mi;K{P(!?+Bbi9;lhPooz0&+jcv_pjAI+0;0}afPQ+wPYn*oG z&32xV?!WE_2XSM(v`< zk_BbdYj|>#!%u0uU6fHjcndf~B!$SDEq^FIJP5UIj*oF1#My6Iw4^=e{AtYHOc21` z>O46xC~0pk+KaY)FRs{xEch93Kn}BBMt;+uaA!PsFAJr;%<-O-&TNKGvKO)#@rNq{ zDf%z;Ry)raZ)E#;hdB9W`R+BBZ@D_5)haB9x%wD^!|z=&cfC>69?NWxxnE@hZ|4cp zt?9N2o}c9{i@@T{1?k~K(QF^=Q3PA z%so)X&NbJnNCU~7#=LF~mNc{jc5WtF%CG~ad7q&STP_-@?e2JqxU7?=ehQXzfhjiS zRY$^+D0d``mb^BtZ7bTV9?_r$a4v3!iAJmhEQm?q1~!y#JbzrFtHVFo0abfQXcDAA zY_=s@)fu!jiC_JhU74*U{@y^J`{S?1#Z0b*5)3rmod7H>*$|Y!28=O!`GUjx+J|a36kl#7CR>`QzN1|D~(b zv9E895FpXQ&;|W4^vs+u-TW`P=U6z}{+ARSJ#SocX7CYh;^>ujk_1O}84E`{OdRbn zakRt4(GC+wXB=Rxroy;=vu-=?*srnFLeaxuYgx?sj?@t?Igr;9bFb8k^0%VCEjiFy zbQoMcY!n^thpRVoI-)<79Of&F;(*3gT@7_)u1vw$5#;T~*fYnUg0qK{IJ*WRR4wK>t7N0P&I8Xdn9w{>`>o?VTL}YPk#rFMB`xHbzVj}W0umFO{r2vtoeMJ4| zyD~ZmMsIU|quX)FpC=|b(W1j@rAB5T>mpc-AoCF>gTqyg%pKg$@#`u<<|FEtP~l!= z{^0A$aVPmVksOAxpJr7kA3-z5!BDc%XwU1JXc_PkB2L&{@`!sM9=+xx&Pd9{LAzWp zBftC-xln(<1-~5IvVQO2PP79(#^Om`Wnt77K%)l7bOjIoYt{Zixj^ zvR(YuZZ~YH$Gs`)PC4!!7b)8AoaP&`{LP?(w@_CUXqL@9O4ggU>ry?tEwNkdz9DrZ zBm~cGYn=6yuZYgw$bs-1ToutJKbthLF{NA+g7U9m)3%=KFT* zo%jUm2{Y;W-lTQvAv0-xZ_+Djv6=L6Z_;CGfteKQO=?mlB#F<8rmpu!CszK&hH6aw z+g&OO^dY3bV!lD(U2r^W(VtH z$drbj(*z#eOhKGC&D~xWo4c9+pNEoetSAdgtf3nIL%ux!BIXD4YtO@fWSI4JyKMNt zuiI=RUNi5qav(m9h=o%L!y~eN-8cNfI{<*%FqT%uBIFCsVxTf9%jNBh%}JL?W6`?x z(W+;oRnGyOf~qy1hqlu}TKqR=yM2*c4M#Yf*=-esXTuK20AKnEEWsRTZZN!gPG}Hb*XNmr-n?5fh)~ z3yp>a{Arwf0tRUzqB+@~#L4W!Xwgaab73#)j*0j}xFhwiw`tfiNmChsuVjtq!Ksur z>ed@2&*ts1_y8kAb~cmdcwXFBlO|y{=Cv<6W-m7PbF-4iTv1o5&(JnE1*aZ_O5%Ds`hHwyeB5j^c@RgED_`Ad#o=wY!Eu5+aGE1ipzILKPwLDop9J<#qm7KBs{mE7L`hiHurzs-tRTM z9wiw^5ADX>XW7A?gifocU{wOjUM>@3IrG&->f1Tysxyi(3BGGEp2>e5^BHxXRg+2HMP6EYEChY{d-V2Mi{5S&db{y| zqqiGV>FpNub@VL-f!2*NhjJEr`*13~jhs<(zEv`n-p<~(v``=fP;7g2>4UwYfnUa0W z_iO6=?3vV;ov&mA)VJsrV>(+OhERWErS9{qi{N|)QeSr>h5D|C@@|CkKFn3nKH96P z?{lM>XH9*Nuo=}ucZK?{hx+d2UBa?G2V!l6dTJyLc1%Y78?AaQTD2}(^`xK~OHG!x ztZQ`}wLze-@dp=8V1W<0#9H9ryiR)Pj+LxYQ;}g)*4g+Ak|;w1v9%AQPZLs4;4QPB zLaC<(YOWFGYkl>cl2aaSYNk<7aXKO@o&2VJOwPnlC#I&5)9!+&)>G$_8;l~|KoE*j z263O74Q-E!pBrPXq@k91aT_mm(-r9+7D{iOo_;Jb!?#6B*KQLpK;D{R5<*ajUw)$C zsb{6yi!J{I11e`fp{V4jJ!-_(@fZ0^Z$cZ?@n&K0aB$;!NP^Q_>*G0A0FIc1x1i+~#?xi(gq8CC^JOPF+hkZc}DD zD-!$gV?WsFh&4>7h@W?<nqW@uOv5C&x=LRT3gsFvavB=tPi8;;Q`xiLEU4XRlks?>mFmr?b~pLg2+C( zSr;6z;Wp{2&$8h*Ns%UV6WxUKTyyhIP3_xoQ~KrU+i+7-lN;{3CTGXUB+~@jjsYM(6zpn51TJ;!8tecnx-+Q6_*y1cX zAB)_ePi~I+)x)<6CE-X>ueRbIna$SXW8&*MHe31jgb$Rfpqagq;P0{-P8?#&JP5Ffuz4^s8lvo%dyT$Tzuau z%FDCJS-Ae$lXt7L-zQ5ZY+ZZ}H}`S0?Gj6h(zY4e%A;+Dw$wEC$Zb7!(d#Vkw(RH+ zL^#x%c{=Is*^bIR4P|EP`iXY@1HufQh%xTDF@WQ4qU zFFN7aX4r`J_jro;-A*BgzxJBC!3l6vKpJp-L4J% zoyN8C#}Ms(GhCseeleV*N%huyvK~0XA3vWU0H()ubi@H?IV|5n6bRrPK0Z3s$A6Lo zXF`cMqeP0~5Zfz5;AX=FJdSV)mh*L;6wO4wKhEOz5{Pc51zFz&Z|I18pW%Lc##m!% z?x7igq%NZ)-PJuCn;^^+4&f?zM>6HzQ*T$f-!5{$`}TWBPHvwXzMFd}iIq^Q#F)jd zLI*eA9m|j7Rfqc&u{mDru>T;7NDli)Ch46kinnZ$;^e$v@>M2J{KY{kx7^-D$x@s! z_C#moM3?3&_HjK3^X`PiM9_+en?s}%?+Z1DUXed^&Cfby0#{5Bj~QD``SlGGn8Jkwl!&@|uv z<%i?vi-g*OcHp+3Xw|^l4V2d0>geD`7#H===Ua%qgA*XOw9b`Z6Ull_O6~WaS-V@; z9&DtB_$$H??@Vc8eX@x`W`>{k+T+J!G6dy+iE%UpWgLVY4&F^Ior{@1$;UGWXlA~# zH1!WWUXS!{Rskpm7%CdDk@GT-WkL@g-Vdch%iv!6S4R z()yh>4m>ynr&D=AJuecpMoG8Xh{*2o8)_WELjC=*f#2Z?ZSf2FK1F{I^?o00mQUw9 zjQ<3_CI{Bmu#Vo7PPmKB0t7QAA;VA2rN;3ssGkC)y;e`WsKtsL(i)nQWAUtQ_&H_Oay}YcWOX$(Rm5UVJn-q?Z<$Wyg<*f~`G60*}U#W3}X&4mr@*)1Mpj*DHKcsx=?rsU{Yiz?*90 z_$~OHF26wD|00X>1$k^Z=~=atQPHKOjDUt1CqYZ)^zAjHBp9XyI zc_MlIH8d6UwRs{J@K!%*vZo=Fhk`9qr6(dDK4Y;dOpn@t%n?uz>B^jW7+b_*^CbP* zR`GatkCooyFSqhPOuF%cR1;AC)KY7t)IEGH*do1L{B@&2{?<>rK0MkmJK45)I1Cw9 z^RZY+auRTK#t=ztbwMqHso~Qhp zy%bwJg;o%uB!v&Fcq_H0ZP7_7t+R$1rdg4y(T{rY?;#)>dctE%?M!9EL^@KgI{u5~ z?pOsTy-%_J%enZ){K#nXPpWP?)7C?Dv_;2Dz{y3faza9=uMcO}Xo_sluD>xi+E7pK zXoK`7+R&(f7wO-S{#_=&nyPsk{w(v=RUA-vZlYO&D4)aMn)Kkqhl^|hb9&X1i)E=} zkmhN49RNgH(}_YZ*;!qLRQE(4p%N|M2A^e_R;ZEHRBAfV^Q>y1i0?Dpp?zkwV)P6d z-OM=K8us$5nfnHb+D0Z@Yr`w@q<#hWX66Ex%jv9Ig^VZ+jQWB%QGslc(q5yR`}?|( zU)_GA#>c-?FP>N;M`=btUCyL-zQs#TM(}_PRXuu}MOFd4(`W0AA;RuWmyLWWq+n*MZ&mhA;e@x36+JrsHw)tIed{uDUx6=RwB6=Q4Cg6s9v z-;!g2F`QR0e;$#>mQ1e*1Rw6Dex>m%Du?1ZIC`hD^V{&Y!K`gktX3Bj z_s?T$>S}&Kyr}<_Ho?Epu%MF~xWBAZT(JfXlIJE$+RI4A=5(`L8Xdj{nRCyoUkNOk zZ}tgUr%4igy-?WHm0P=6&-X(XU;+Y|z;f1aLGcvMKRld&>?tS~$P}{xV#U)1GUk-5 zqkVhhpS5biNUUp1)ko|& zR`s$3%G6;=Fe|xRSF)1?a|v)({9ksa-$K|ZBQ_F3OjE|o{mA|cp<=6ezJw)C-x{Po z6K~fISQhhAm&LsP%OYTPZ=N3g^|C{5&${N2tc)$PBndDsgEG53MRz$%cUfbk9=A-? zaaL`WzC+CppW5S}zB-`C;|rFB1Q{0yGA<}sCVeXeGb2r7d#B=Z-I^(U7R6C%iBkOicUlSnwSRdQ}wzeRX>m?jAbXS}eU7d&ysVh5m=>W8mU z@s{H}LUa!EXK_YM|FxWDT{TKpyerxubRF*bJAq(_Xp_?2q{}hoZ8@3-TGcIsPqD~+ z-COdgceGj_jkODC7%z0ClHX~O+jX2HSzQ)>EWfF9hwiaO!DaF=phSbB<=G!6rRB58 zhe*qBAuVT`H>-yl(|_E1t@;{$o!aW*wZ8?Mve}nD?4+uh- z@0aQgLih-CV|YP$2wByVgqN{cY=abgq)mpUANT)Whc&36M*TkGH`F+V*bvscgLk8$ z9m%NRg~R+xW%8D+>c9V;{1W9dSs(A#Fi*Z3|0g@tB0}pTuBj zt?WEy>PNFJjJcav_4U32qoshkMpO-%jE0%y;2H#sYO9#+O_*qvoJ4x`1^F6%VV3^& z^Q$Hc^@<5|P^w&JUSq8+t1{&=59ouN1=;0dmqzyQav%jYh@V>?TrVFI*um-#v-Jm- zOq0}`#*dCZ8T;jv&zp8VT4SBXmM9wQ#HF(c6Oy>p*(AR$!nh&gGYbTu|$ zvn9eV6{Z(KVJB6=c{W>RWmQW}X3+lvEie6!&9=D&W3q(>sAmdo;Ym+V;m^v=^5QSD z*}|8-Bu7dM3mUWJ^LdfYA^r|q;>8DVqvDZ^G0~EvacAVNqv%`J-@Z))5I9#&wz>y0 zU#SA$f_;_*)AwGb>a1e4cM&-B;oId)ovUWFDnWH#nHZVL7@m3dTH^f_(5Gi+N#vgp z0*%h)QkO|C6=zgB;T$ze5@_{x`3nXQ!YW%HpI%1EXO{EhPfT3IpTxwwrLOgHO@X3C zMP~{F^px#7dS}ymqS`_#;Bqi zx33HxCdAC;t4@Y4?AivF*+Opl3%YHOo*U0v`DYQ|cpAnN$volWMAwSMO}#`5iZU)~ zgTRLW?eH`#mDObRnrT}j)7G&-Q01shoo}L_XQ#Nw?i06k-lZP9$*XJ-nk?UplY~d``14B`Bp}K`PlT-{FNzuxu zWwD5}-eIgA9KOdL`LHYTY>pPfL-0s0C@#~EcYk|vq}3Do;CSDnc+2QOTYY7XdwxOs zqDu%`K2oSr<^xpBGV{=(&L2>LdI6k`j#vMo|5W3@Jf0a)AFUvp`d8B0Y;Z|vD)1Me zN1}cIU{D>|i5e-Kt(K6dLjGC!m42VbuOTh*X(x-_kDbwXthdVwxRY;Wk?2$gG9=*eLTcvzj6$M`5t&I~Ltt98>w) zK=IGcm2L`l>y8l0RChs8+)W<}L&W98Wb3H9l^R+C>S!8+BZO8!eM2A!-X&)+ojM3} zBmqROVd+|vr-v-Th1%=icW``sDlJ_2Yf*}Y3dG3PxFHWajTM(y;B%#zVO9FopB|DP zxapn5MOxK#zbA6!OB`0j2SsMPa~Nr>cq4&=M8N3r$VisP&D z6Gr%mt}ZcQV?eoeBP~hTbKnD+bJ>}wkOR7}o?@$Nq4O)5&PrJY-7>Oiq~g>*>=HN) zm6qa{$-?$9AC-6yljr|nBS@XrBx2qwHA;rLl3D5&O;%;g=JAm2mZt?Qftt+upwytv zHhLG&@U_+rGFqRJFE!lONHDLJmCp#!$aGU#fcUCGhENx2>L`#Ro@Pa{`HxxlpGh!m~+6x-;uW=^)X2$jl+` z%9&<<@qyuvH0AisA{L3DgdVxCxpvI;y1}fK3*3nZ#91x_)fH{HhvuqU%(7!?E?E}$ zH>WtWb=Qrs%IHqkota&qSQ@wGy4lmPGY)+(ziBnw2M)4Et^8b$7HWq@uAdG>flcRF zU?c8)KX=w%-Su|leMiWhw=cOZg-;so%|~4L#N&^bKd(jp>|lcnWqkG6a=dToGB*VMYsS#W zhOiQ6E(#A)Uw@Q*8Qf3srLP;zM{du%`o6o=zoLNP4k)Q73m2t@Gb1w>rO}8The0lC z#t9%F%{#KX8<-^sFH~||EtH-W9gl3@0EXIEjEWT<_XiySScY*a%|hwoUo-04`HY2x z=SAntOXahUNk0geeUUpCeQAw8a{Xg$MYb?AOz(n>g6vauc8Hg*aRto@mpq^sA}6Kv zVubXf#x7m>#Tv5<-hN$(9I^ks4t%X&2gsakzTxc6-+8v?oznazU(vktA8DT0Oy=mn zqWM36d6v<;r1@umboSA^{*mU1*Zg;z|91c8%_T6%S^^haJs7YAW-*+3w4FD zq7!&Q?f>cezlX*X^(P#*CEwvb`V)EGv7%%C(XZjn z|5y~tu$ks7D+wyvFpJ(4R1p+(Dh~lQUp|Nu{Tf~|z^KF${zim|& z_vmD~K!1=fk3NVk(iDQOH020|gyY2GW=f=Odo&}mA7zUEc47?u02JgMSgaK*HKwyC^`|NBTrD#V>!y6C$Z8@11|CLO!>GnZS)C@AS!Bmp7 zq3MA)RyO|=fTK*LX-r~vCOjs=e??-9|H0h;)pJvLRuTA!WV?ney* z&ahA3FRVRb6@{^H3B8%$g!4`PxKnL^f|(F;Jv>x7bOp#Aw)kt{;iNI)9Q9YmY*t!x zT5nJyiK`v|DpkAV&-fEzB5bP{9+!7Kg7k9yN!D;Yoz<-2jv zq}a5??Jbt=mYiRhJV&|F0sjCm;_BL_CEk&%2S>KqC+`gHA*NxenHY`_>8LPTn*ZAy z7}8-3epQRM%|=)LPRDV_smLb@k#YCrw+f5+z6iPD>`S$*yI=m;!>*MdFyi{~c3dgt zH?*W6qUAF3I=r7I6OVUV^4wIBY(t-Hn^Q+B1PdiPyme{l}%|AWz zrzR^nNoML}#837^bRa-RZt{e4QJ#dxs3%aTrcTw^Z(CE<*-c-FCR^q9JSB7WCz&~K za^~8k^ucKOa6m2l8{lM;L=Fot38+g&5)sCBbfo(x_lD^`X(~Bc?L7ugkxs`^x$& zs5%;&V$>Z;l(<9JBxXC84K{{(Hrb~}hs6g4R5vRNVWEST!h?N?F&>J<-Hn50MC*=B z864ixI3_8guC)$kge1FL59TPcG%-hdX8Kw==xPtsgH@K^g@kySp{`R!!r@( zGxARsN5g~{6Ey-4fr_MdNpuw~4C>4oSmy?)8I>PV=jqBalaRWSp5g}67QQ+~HzAec z%{f`^c%e1jaE@U&Kx5GBm@%Z5x})4V(`Whx*K5VaW+l( z?o)OBc90A_BVH|KMY2`zkV2+V(9~eW@6$awvje!|4pigjJq(6xa&C9Dz~rhB*W@cjxK(8&lcw&Gog1SQEMx;hp(b1D zo6BT&kE(B&?-lBOGI9c#oR=iIn@V?Dl#^T{fziYRx`~#jg=`Yq4+V4j9mtjVDK?s0 z5)}7p1(f1^mO>5 z)&2y}-pQqj@Q_GRkF%hzr*>QXM$e|g1n~$H@nW7%^K?2sg{Loh`Z9hEPdz;Kz*Onh z;-1xBYRM!%wYP98UY-l8dTMe0R*l})vk7NT=j1iVKW*8(uVcFHnZlvOsY;*D@8&(z zd78=7-TG-3PruYpex8Q$^vrEMw58AE_h!nrrQgBRH*}T-JUzTy(!Rsfc|4iBt$Lhw zqdxwH;E2oi%y$4Z@_U%~Lw^=8dwu_qZCwNpTRmK~vvmL7)%V#^d(Jhw_>#GL5E|Oa z+d}6;@`q|YEH8tRfIq`OC3}RK)Ee%Ltw^lCGmQ;ltR$sP-X7k%da8p`S*sT&2+uuv zd+5FRZ_p{+UcGu-=M`uVVlxuFv>0vrS7x>1RmI*`kr+7%yk*TLMo!>iWt*g~Of2}& zW?L%fc<+j1Ov$elOX5h0Y7gU*%wOgux!HTb86s^~`!kvyoGv z;A0Xo{%PqLdBW3znRU}`Y8Lpg`8K|^Idj)YhHsN0a{U?xK~} zAYfvoq~}bJ?H8g3iqyGn zo`$DLPfTo->YJxi%;=8R;m9hqEHQDFByP}&(0G({M^Ok88T|iyNbMROJbN=Qufky5#vfAehC%jqa@DT{7s9uE=u5$U_ zHFtmuKI(rp%sQW%Ug8dqMbU_>yvU48@OZKwjB^;B0P~rFR}AoO}L7MvNlGugp8poOLE0{J_9&ez)kS7^l4$f+x8KZ(u!C~|7}(qT12=YfjO*LU%)swI6o z$Wt?{($_w^>5^tHG*q>y7nvx~Eo1X|hu?-O(bb}!O(sn+licRo2q=z(5{N0KQI~p9 z@RSh9uke>EC7_xs*df#O7pN06ggWn}@3c8bqcy3n8C4yfWCG&rECdno+v0assGojl z&PU|C?mZRi7S@ZNjVmkE4d(Od(8U$%8lF*m#wKX}ZiTv7zExVBY(_j?GqIknGoAJC ze@TF%B-})Z%WqOYp;Pcgt_rnYS~JH})j3nfBg;N=%*(jU8$_^?IFqaDDX8;?E-I+Y z3}tigYK+>?;_f@4sZifSrKklij#tpjg|l!SJ(NY4|3+8XTTqm_{ zG#ia(qNuyk&Twx{$jz%0*nc;Sk_jow?0gPjW4=)5PJ}!lhUU%!of?Yj7HF6(qc+>c zv=iv86{;gSMb&CjuRJU37_yq#@|*DP?DuyTNoG!ujJ7&+Bz{1}9$TUPL; z5Mxbf3c}vdbp_$f&@~0&tnkGC-Dy*1cV0%HmWt%J%(d2qx|n*v)hzWA7wXMZm8?WK z6Cs+83J$NNdn}<8K{}lgAsfYYvA;<%bE)6u0%ck z@Bi8W{e;1&*FwJSFnAI5za)08>9Y03>ZCl3ye$5b}fw(l)|?sbkIU&cR`VN z>FcN^L1k|em08erCwj5DTd=u1iOsJ{pJuyPzON5IuQKs@tmon1NxFs46@tXqsvi%x za2O2Bd(U3i6QAR&>aLvwv&G5vFCoXmDb;Z)kdmQu^4}25?Zy{B#RDpFr^e7nz9&E< zTx}wBC-H{bz~y#(Nl)I}zP4JwQFkIf4kaIfRWO-&fh7S^CFeMJdqGWZM4}**?n7-P z9$LdxjiTPpPX=I;yYszd3gj!!Dw`y$tfNqni7hxZPS7b=w&Tp?*8KoHaw_f&L-5ke zReeA)kRVglVM1c!P72~^ob9K9N+M3HlzBzUm~$K}%Jd6ONTS^N&*&B`%vpJCUPkH- zJusU^Y`rC>cN3`L2p4F$n)+^lZS#>S>YaHr*NdWXiBiCmm>+#_NJ_HwBKgYH; zI}LSm!*=0mI9nzoz|Y5GGBni0Cw5{PWMbkPcGupF&pf9y_GLQ=-%PgPEb8pdRW~r# z^JcF6riIalCYlTqiIeP`=`~m3NBTAUAO1!#Th}7V!E|!?)y9D})tEKKo{~%k(s9?n z(SfEREQcveiX`C!5@Jsl1^A9RtIn0zT;qVBWgz>yUy_QsX;Q8}{FUx{-&ls3b(i;! z;{~Z(>s&0L97B}WKzTS7D31)x_D3^Y(47jD;J{ozw<>!a$%?v z3kCwu-fXKiFhxCOfvVZeX6U8KZ9kfcIcIjt6(m|-T)XeL((+d}TRpJZ`_9_zh=I-C zVrI+JU@#kxIp^sup(ba*(7w=EmNK-VXKmwmN!}qjv=3l^Sq0{x%rEk$x$h$1Epq~Up*ozu~kJvGT^PeYRxYOtc=~aS}UU;$yhY7t$#DK1&^fm z=$3)GR$7(4AY@Jr=d(D^(2XkxZ?RR5ji5lKueH)lUUHLPeF)rN`ksm430>0s28kP{ zdn=B+tp%Es>}}sVj%S#K$o>aCgDDXD1ljyddidjk*iQ!`2(K~}3|SJ;cHI@0Y7XYA@c z0t6%7>8M(H=#-zD6N!WCsS_LZeo!Isi5p5eswLAgzB-O zX?a0;V&qIJh;*lgui(;!AilMVF(hIVDwA(yoURE!`moQ>70b)R99I?25-B4*vZBUW zq2`dH?RDFpl%cRadi%Amu1se58W~hh^6lkAx;yF_s^xr396H^u#9DnvipGsI9H;2q ztRtH#M%rY1_{zaeXd>^lhc6v`G<1QSvP?}2pGV^G$#*)!UWpaD%{lmJ_zeTww3aoa zoAw=vG}&9an(ch(JZ{>iu_QWB1AxeDR{57M;XF@)fF^dDEw87Q6SuoArvERCOSPnd;uif<<4V zb$+AsMw%?B$_x?BF*9v>JHNRPY(ou(E4t&HX0IMJBeHb^y|OnJC5Taq8!*qNqC|}g z8{K;WSGb)u6CW;V#v|?I6RVBL5jl?AUSF5Eg6Qtyj7UjVT0Dc-yzn_xNE(&Zcq?f) zd@0G}L+7*=We%oveB$asQPMN2ZT#|Hgv?Q~jBr|-zO-{EK-u}{9v+XsDI8GzU(=B__oNA zw9wFksuN4ktIdei9k(qV4&!zMQ8a4{mP$fm$<^xQ$KvWf%Wevb_=qYwo`{s3NW@2x znie`Ia@TQygj6mcq6o)CX@cOTBgIBtI?D(K3Ou=TDW`9AkV zwde{&AOo~ z7<1*J~zPI;%xUXZ# zq3{X5AE#57+v&M(`m!zmjXC$vj&p>qKbk{! z59n|^9nN}GgVOA+m);Jex9%mbJVrknXzQ5Ce9$9}XXK{w- zm)rIqX)*TZH`TvCX8)hXKiC^B`uiyJ`)~K||GWju$j`?}hVB*~jBQErHNeP^J;*zAJpWdJiRIsvLaJbWIrRkvC;spD-z7X9qYbiZYWf?$C6x#V9#e zzWPGc1hEzN$V-|mt~giBS3H~06>>AEMs|>6LK3~kqnaFUYJuQPgCYuQtsXNY-d6v` z6&6WMum2)1>>v^Pg|g}4TWJ%cZqKS|`XSfzqXHhl>~GY6kwPOUoJk`uf_|b{vtg#$ z?G2A0dw5tcp>)oWCVns75!IL0=4E;|?ex6po_(@elfs>m&hhclUCo*nUcGu}ednF^ zr=W&Ap@y9~k>(w~lFY^D2`MZn>Z!dfj9+;2mPl#Cb&gcB87t z^SdenSEG59p&OczLBmEv!>$(^cFsx^XVA5!=P=5=f^g50ud5r-ET+&cc8{J!+#>|3 z#x@Tr+tEriREQM-WwXo-Xvgz6vHC+lHv z2q5zR5ce+NQB~){|0FX>hGdc%Ab}vaph2+#4;pBRAs8eHp%M&65~AEZMNFf%h%r$y;6BsnOq4eK zFrI3&orc>{X(0+M#J0p^DdTn;u#o>s{>%9<=6@Rhllh;(zghC&@nFd}kMmSK70(kq zPw?#K+0FA5&r>{mc=qt@<=Go@h3L8iiJqS5aF~{KdK3Q-^Zyem8{_Us18oMG8s0IhXfx{#WwfTIRguV9RW$@qr$_5B2E%VnET-wrHCEx%wc{_)yP6%Yc-d z2c)A1^e{SSA2^KY*$;YnvKKz+=IQ3?;_13@ZtOA2p}YzFPvd{ClpUL!GAAQ2U@r7G zy&W(Q^o=xj*adSJCEjfvG#`>4H((HEAeH_*ZpICL&llMMy(rhwg)jTZAy7J6UHX}{ z+xpYqpszGU5@+ukCwhMvm&+8<9z1=B#+p`D3kDQ7y6Wl4QiE6@IO)F#wYASEtvzrB zm;?C~eE~E8J-iZI_mlL^lG`}m^UkQ;kG&IJx%+m<;szThTt}zpE?i-BZGhXf!GBmM z&M}U6A8k7dCGZ}y3h&(k?ZmrK8{o6)?}nQX-81Iss9e*NyYVBINaIFyUabuVUN<04 zj6;sd#AvJ?e#8!c%Yln%A!c?->cIA+i*mE&KYD00il&Q%zqjcLuo9k}ygysS0S+Q? zd?T01Me-By(%2QID>v3&ZiR*Nt65OuG4Z1v7J1J|bt#j!qtH!O8v9d}M`pS9@}iMc#Gei>`7}^wZLY z&9vcT??M_EujZYk0|ZjruF+5Pl1#GEl8ht_fi9YfjgQZLf|39J@d+#l&tZTzNAvry z`bY96g+F1-V}pB#zJB}z4&mui`yS8k5CfndBjkqfGb#Sc6&t7LZa~lC=%j}$uXh}^ zzW-j=zkOpgqH*kb2r|4v%IAlWHdgo^3IXBCq15l3=bQd$lKY4uDP&KweoR?ZN-=*t+&xJ{&u}EaUU{6=4Pc{qyH-zKRS3;k#SI#$SN%oEZW% z1K>LVde=_~0Lh_p`8#<8$~A!uylLa<<_;5$T%?;r*v9Bpcr6f|)!Q z!aSEO-5dN%cp%z4^XQ)e?2qE0`U*Ki>D_?-^B0jIypL}?Z^^O{HdMT>Wf#_^YU#&K;QZ)#J|JoTe)tRA6u#)G|NHTL zNke<)(S7Vb?|?XE+@gb;DM-Yl7J^~Sy_JGSq63Qy=0ayn+KTI?hT^P>~%l~bZ-bGr%`%fd-J})uZ^p6f^edxj3ND zk~)%f!*itJ#eD096qsnEq473u854O$JxK|Xi!a=XZS3^)1+yP7{EuW9P`G-J!f&z} zJsVF+APf$9^gkpN6pqvZIj27g0%Cj<;rLwT*WlO%eZ_S4*8a~H?^ zVCb0qe)ov{KK8o&ZaW~qJH(ykicR0`(T|Wgzg)5DvAz1yyhlHtY}1dQzQE(rZ#H-H zFaxeosS9gDymvNF<~M;ub8wrIxZ>V=jQ<_yHPn2hR~u_lH7~`!j6I%U^8_6!`Ebgu z6J=rWBe?B2$%D-k3AeHqatRXBDUpP|kq_=@CSrleKGt()*dhagpQ1|^c+MQWWN+I3 zV7i1v`L0?5yE=qB;HbRLdp`%GbW=S-@YyhT{6p0a7-tMzs`{01&=C7@!@G#7X`aYI zE(g&E4kX_tdZ1uV?v;XJv;hqiuQNG&Z~}?i%b>RCIi%7)h*%4-gyV}9OSG19s(bVS zj{V=JqeRAG03_E zotoiJs?SCl+_)5BJ}nXYl*pE>0}H5`hZz7^Xi}FL_!%hvGf4W0ApgT8#JmY9?G+(u zF}9>txKR8rzffFU{E<{g1;&sW!!M|u)f2g28pIux_di{^k&ifRqO43f*HNv>I;tbV zyVaF@_XlRXu_uSg>ZhpwC*`e*mlr({PqxiS%Yn5*nI~1cSoaf;k#P9NqAM^-UCwo! zeUlaKgnEXPD$q7<@hM^3b_?6~=m+7K^ysLVN-{vGV9q8BbM_%E^95(t`%H$d5DaIw z+~&+W%Od+EsYn1JBzXK z;J-FFHZtR>jec+Aj7je#6+^NIh9B*U48; z`<)~2%#^@Jkz9;*FSU$P80lq@Ci0XRh{X%gqRE`~1(4^6m`v zOKdRJUt9|U_$czz`e6(4n`;9b4C`v!cj9cj;-IALuXsef;>)GDu7Xl2Zux-X-ejTa zW^CmcK{I6C#0p=a86P#wTd4fSGUMzBxX^7m-e*!n_q=$mVaaEE4j4*Y+`hFmuRWF# zibpd&P(Xc|zKEe8ci;;3XV%C-Cd;~sQON0)0q+sW(fpHekQotM=3JoWsb@cvtL(4j ziYx&73KnJt()A!-%@VAwjZCSAMTGVUYVv4DE&=seD5Z9LpGmPp<`M#mn++Gng}MGi zdEMaHX^W*rwpx7rQcck9RDG8=S!`R3Rbyz_K(zbQJl!4Lg~&*eN;|e>arhSi3p1?& zM+>p-@x+EnxJu}WK4l=5aqv)VT_O4xxy|VM5FUO4%A$b`Oo=ca37B!X)dx3OrT&^l zS>~z5Xo=hC>J_6U!=6g;4|&S%&-jspSq!A$>Q}^&^vrsy)eTq6I#P>SPU4+d#PzUC zHOG_*LzZr@;JZzr($A*qz2-ydRO&LUa9}??-gG1JeDU??<9#AEyl`_&>#eFaIv8^zfg_ z|7H9$H~$OwBT|`Z74uup|3d!nkdWBi{7>#j*c9B`S@LU!vgD&`QEbOim75%O2__u} z%2xj(H@5D>uYlu34%-(~i)!%Hs7wfA!2@7L)S_xsdp;YIh=TvGOZ5j|zOZH4(UwKk zqEPnv?IJk|pgLjeJ=AajVuPxwRtpzPCqAbYwS9=jPad`FnK*u8V~tUR_DShwO%leG zCX5r=RkG(pM63OD9hI`3LV*^(d-siIg^EcmXrh>1OWnsYN5UZj)6I>089^xGg_yj7 zw(^=AWk|ixxU$1rdAWc-HFt+$Xffw;LiZ2q-Y-MO?h0|xvbeXS^i#)7N<<`Rr3;@l^|&Pu;bgbkTB#eX zp8c_mQ?Br>zAhU)f)dY^_V@?k7Sh_IO|0lPFe{`Ln6w&H)Uc3`W>vINj z&Em|WoTTrJ@Mjf`lSf9;#qvlgauh$35J*zv>ts!cU_srZXlmNb1F;Yx<1&A~edx+R zEebQeg`+;544c3|2=TmL!y3No1Ae^58o&n*!%O$*g#&3Z#SZwD1aNHbR~8sa#K!Zz zOs8$@rSA1vn5oW$OH=jY(_FCBsO%Vh;7_-=?U%>u<*ViUckUw%HVQkEelwCQ9xH3P zJq?%Ey+Ap2=OHVr)f>PQ&??{=I|e>rmr{&%F*FRQ?W#+(gMA9njAX~awXQ3m!>dKBpUnK zMCUn@b0n?v-jHdAAb`u0=0#gVJ}MP&=$_2-J5>{wjXU|J22I$xvV?i`k@Q(Nw zDPxAr>P1^lQJoOH=KiXJ0)K{iwJ#};UMb2g=}@0>z5Zj=y0?J26dJ#7d}s9 zNzvxm_eS}iSM;secawb2DEdz9yIH=kC}vJVW6W8|pA1t44gB}(U9)S{YhPqQdNAEkBsOtjA-rstP!+khTD6hEJTj|s zMp3Q*N`KZuRRD0RDn zLpcLA&bT<>6A{1iE)MXic7;gB0+f zKyq2+@Dp>NZ&15T(S4xoa7s;WW_r&KCvLzp3ZJVn%c&D~!X(dV<)-Pf8u?SD!PxxAeD zzF4UaK|#TBg>7+pG`q8}rdkTv2YcEspnR)Xbq;C^&#U(_ zbv5~KBc8cCaE0{-GAZZ%p3WpmA)pqy#NL99p0$D0`ox7>B?6eeGU*oD^BVqI^aEesc8=za*3cafAheAz)kQT#f$XZEp=I+QMR2N|3><-*#W!)h` z-Pk&6TE!Sn8{vlABFedNYD%0 z_Z^umJ`xSL)lr<38eHq{D9&|s6pv5sD87`>X&uE=P$?@m(keU zNRkHSgf{CIePKY01kE-s%WaG`$yhdx=Gko;?0lne*Q!HSX;(p!>B=*ShcEhyEly6X#SJDl=IQ6lr3KD!Fl< zt1+^wqs+CDoieHZ^g?WC?k?BPs@pzc&a|#fkAdTzS)lxDfFe0!wGc?I8dN5K- zab%E~a(40R?r+sa(N_7tM2jM+lCCqEb!*Ks&O5!EZWB1t6K-X#qg>YBV0LG*mL3HZ zR-#&#%(()Q*6k%2&D|+KH7vZ2yS=7tFJcp=(^c5F>LWG>Ni|ne$II&#}Ttl3iCv zRKKYgv1e%=5S9_xP$+lx09}nTZT_*Ud;dz+SH-J-=x_kX0n)%UD@kWRzsYGU)n4WHQqAxP@oJ ztKw{2E@tPCs8KPj*p;_v6 zNdR6#y*OBQ2iVfRMXb>BZmqsU&4gVVx8uTnrbE5UnP4}~qpcMG!Z6}t2diJ|7si!k zAtx_ustgK7X1*mLen5}#ygET`Sf%IDx4{)sm{~T_{>rhxrr2LY?62wem&^Vtw!cpQK<6v5zm)w|ZhyUHe=RDK zsgz3gNdUujn~aj&4Vvrgz#$jWg(v6&qwd{k$&C3^YSg2WI5tZ)_AFf?83|)@$$JNR zFR4-a(+Dgq(nf-GSJHP#z-+vU0Sb>@$cpXd)+Nqjt^KV)XD zH;f`lL0(xAA zM^~ouVQDe7x7Lkped*dERR9=&%Zz~ZRnnIA#|tOStx0wK=+^I6AvBz z&<(fTCTeKfQUkf6$o& zTXUJE$TB2I;znTuz4_e#WcdK8{B9c*<@qc94NL%TPxH>*PJU^3em6>3DLb#HB<7pL@(EW&mjpqa2TGypYqw>$IW?eqpL5N!R;l5$#v)6MBYgOVgDno zOgvE~gQj5-axd#q=YAmX#f9AgbaFgekWct8Y`M>WAMnOFirn+nc$*q&41j6Q2$d&b zHho@pUeBDu^H^nHKe~pagh#!lS;By2Z=}N5n?tQ~)V_yV7rJ$%(5=Iev*;RY9^_I` z8#9esJ&hVOb>;Xo>l3T0aD(%&4#y?Cz%4>7jHlMt3U`YefkA7w_A4*d-5#$FtB6Q> zh83RLA`L8Hq+81z(@!HeZsO3^1C;1J(6+a&u5;mS#%f6#QR7-r>h(pZv z!OIdmDxuI5Z2iG)zmne_TCl5myS!`JtYEW5DTjia zs@i@TW8}v;j1?YPu$hfJo+hC%Et-GAi%1PHp5eWzT)K)0TMl6VJQ9d_UM$bbyhQI9 z#DuNc-QJg^?bvRUBLimt_iH1z-;#7A1i@g$R_uPAwddV7Vw-60I$fNL6si#RSVKGN zZCcD*>(F3G3#^4~5jGJ(Yx(Yn{5Bo(HjSk{vy2^*z!7{*MAf{T(ggkD}S$ z;_t5THSza^a6a!FbsAY$;oNvsVmO=k#&cf?Oyr{tDrCf8^jBzEP4D-Vqo!D;mhQY|mC0R%o>S zzVM{@dro*9@2$@1Ukr?Hyf3Db}e7R$HO zmwTIjE6=Zbn|>qDuVXJ#o&j&u4tcKiHf@vVLT{7U&JAu8Xb3gS;zE>aS7mV9US8Fm za9qKJt<3^?wf>9EkSx5=Hi10#1oTI%bCzALxN3Z&mu+TXiu*_ruAqDYl%D0@Zz|BJ zx9J|%xY1MP{pQC^yNy&0HPi0{coy>S#zsx^x04vWT{)f20*d5v*wAlJdU1gkw+uaY zibySi5Pa-7ufgWW`Spg%si0G10nWjW@RNL=(FkHPv8e0m~)Uu$R8vRHo!W&3qC`SD) z+C*RP$!qsET}Ii`=YNyP&sX7}?0t52Z)KfG-GsE=%m`*B* z3~im=+Y%K}m2?tlXS7=to=QcgxWKaefQ89IvHAb1e~R5b0blQnj$lYS=Ffa2Z`Z+| z0iEdPY-a;V_z%2pDT(*DQiWl)*M?su*yvg5{pNY<_BQ>VU!&(%@1_@Y_-)TUWb2yi=F zj^DGwY!=X5!2!^1zXp^02PXVO8DNcYitQ@EnGRD2AhpscP5lu~HB*qQF*@Dh-|`U{ z+<5M`z^yho@$HDz7HH5~pKNb58+Qm&*hkq?$(}sdmAV9iNuW364rzBx-hVuz3?N(M4%#oXk41bQSi*Ra&~3kj_yBzd_6p ztCz6}!HL7%A&7xX=Z$}&XOO1$q6uV2ORR#8B*`DOlh@WZ?vPb}TVNDGJRp&nF;;8h zi3%qL21n^=HK$bT{yqM0t{8sFll7)HeV+tce+lu=lHYjkvZKC z$>V)-c5lQbi{}vtnc2M(=zN6Ru0#EaMi#!YVfZ?{P2N2ia|?$YXWr`XTy!yP1|r@v zdjg61ZyS299SxoV;Bb+lG4L5%66ylbFgw$B2a?C>Mu!3?O&w`zq=Ip}WQq1qGBvP2 zaziDzjo)7cfVNLI&K3k8(*V+AzO_EtsYkOVV_sxOsPtrBM_IICj6+n!eVbmWw*X%$ z=Btebll|3}Uc09L?MRqh9GNj^1>woX#f7g1PUUI5bg(BfK_jgG1#Ba%NXneXX&9xJ zw4c~%?TU;YZHzx7zKAI_^%|+i$MG zkeaIc$#x;?3cCbjhwN!ITPpRhXl`5o&!!%@=(h1}vK5j+udGiNMfyz>wYrb zcv6%d998vm@x06%K5EsnhxGXHHBje)uGvZs|8I0NN?oA}*8r^yz2JhOQ!+YpdhPwp zR=ODOaS42{%Al#M!^}Es)4AB{BKxC~-4@=B9(rUnxAu&MYDhmNzggY#JNktD zPF3<-be!K6o3ea4@1(#vjp-Nw4#G^qWa;l9(`ndigX zgg1B5T@2e3C)z7pBywvnZS73z=68?`PSPpfWN`F62eqoo7CE>F^|0B4wY8WcVAbyB z>b@3X8?CxhS5hh_-EU+}j3P;Zh%9NIkTi8t_65TxV}+dg=@+vv=1evHlN+HX5&~mF zu1_k3u9&8;My$z3XSV8_O$joRo-(5^cikaaTCl&2T%A&`LOwFBDsyxb6<6<++<0e% z2RhWioG?b-tiv^GMJo&GQn;%f?u~uIN?mtMr(CM7#SfB{0cWLkxIg}nOK!GjlSP1B zh!ksOO`r-b-~6yJjemlay|CgNaGz2zT3Buv&%N|r7Qz_iKNb_(n1+dX)b24{GetMJ zU<_V8J0oAK&sNKXZ!1@$0k68`NjaQy9+eKwN7Jd6SGkfb7!#PN2ct%P0>eiJA~3v0 zJrtx^_2(yIxx^PpT5v`L?(RJj6=M-|q5=?(s}dT!n_?#b@X^~9dR85>yJjF(Ftk!# zERmG&t{3PT(7%vrf~I(Ft!?Bc^F(+8TX3gdAVIrzR zqpmcEip8wz-r#~BY*7Uldrt342>9F2xxQ?iyJoes{+gT2>s*D`xdYe2%5pRs=W^~I zVeUU13C&G(ojE*i(e{$QL4ix)*Nqzy85R0+S3Ks??R&^TB=`94akVZOm1dROyxGNK zc2=AU-sBRQ1%7XE2dmsPOZYYeYF*r8{5}EkYi~1)+K~sdba7Anc~|{4cssdnN#VPz z6U}#>2+HVOWG{S!kT(k7!rvx-DeiI=-sKJy?$m8QpL6$c^X0=IoOxrMpZ3mmx&q^* zQCCJT3SHNw!+&MBR-$x!@1mKM;x^~F#515S(VXKB&T})!5vNFSpmBnEiMOJxtBUTB z=b%|jYPWF1$Ul!?H@}7R+<|4S3|C8qx39g07a2qhx1mv=VeZ$%dN@LR2940~dUQ*+ zmki2|T&@%O7}f!)YF&IkFC9DleyB;edyo%KaxghqGMQVXZp-a$K1uwRx=VyZ?QJ^3 zhncrb=TXGa=Ow8)g&=BZe|I*=j{#6 z9eiSbs5}$a**-+`Sw2Fb=oL|zBxzT>j62<#dUb5QQF;X8mGEGZ^iRtcZCS`0@)5F( zM9Zc-Fa_6`x3^_N#!D@6|2vZz3tY*H0?=9`Npkt@TwC?xJDus&>Ff5)oX zVwVi_=K}%eOpFbiclnU&h&Y{Xv(N=NYwrGPn_k6DlVueH|D`=Q1&iImVizWCzZ^JK z?=sKpi;4C>d7bxo>SRWvjS(~>Ts8!v9HD=4tON-x=q)_AW|p}>@3r=@2c^B4MtP5A zw4Ct5stRrHE~s@;>+^sZDNr zD?II%>-x~#D-jjdNOq~Y_*7`r`QTz72vYJd_62L*!RuUtQLc0ITUhH3)U?h`0gDV3 zERy0ftem??H8ukXA$g|2FF zZbC2k4F$)tgy6Nk!IGKL&gkDz=IISZ$9!(E*-#ko zH5%DsUGjR3Zv#m7_6F_t#4D^g74m#!-XlX9yjPF!b^N-cI~&8A97E2@E`tU!tQtAL z`Xa4wJp7>`=K?*fugb6zN9Vf+MBd{HMTd3XfMG551)af?>|RYw#jHFUCo;Ea1W@4y zB{`D>)fnx=jo)D&vK#2Enq!>Jsjg{AGhVe0e_-GfA(9T*8T;{maQJ=MrqeavI|^M; zJH%B}M4A%iUyUBTFH0PiT z;*PHBCP$Wf9G;MQgnFW~tb>G%P*=l^tTnIm1ry9!K4Y5Y|3h%JZsaVV=>z2$=iqgj zn>65=>o%8MQXy@A4KH+Z6K}&~d5KvN>q~~1n*UZ4gO3f^$e#q;e17H6-CUAyUGi#R zNVH%ItnrSB=PuNudaK5%HWCDxe$>+OV`8z|HbdZq$cvpyWNNh5tA7j{ zs~1_T-72uovNo>poMG`J4h{KP=EkRMEW`HW7a{-Agk*F-H-oErstqoNSg#?q;DjoydmJn}Scqd7<-l^Hy?*oXdeeL7j+1a`aFqi6w6|0>O7 zYf4Hml*6Z$bwC5Cw`m#aNvA{o?xwfBO_hXLS+5XpKBh-Y7m(i;Y@SX|3?h5)zm|KP zU~>tdtD zsYCfw%g~KU z3~rPD+0z_Nc!QO=}qzqlZAp>But%x(=9 zS_^c2-uuqNhYMduyqVED)NWY@cu4IJB%kK|L3|?W`0-4+H>iBcF4?` zIQ2*k3^R1M66@1%UJ=YLE;e+Z6Qhq6L0@t4Mh!E4(!XtgfB*hjND(~({r$U1he>4CGu z?!i-_y;U#fpRTU1TaeBnFVr0o^}3Lho7b+dEi29T%IdoCr-G>T!aafmz9z0s^&->L zi4&BL%23l($^4fVu;1g{CJ77Q-SBe6V{g+oadW#5f`(#tUx_ATjQ@^Qzn9&50f6KSN?HCIKYItav(`#5kn=k^NmH zh7yIu0VKvS+X#hhaaZ)nPKe;u@d$n`z8N1G#cOcdU!pjs(+N#+T=fk~mA>^z-@4w2 z_id>9mv}+aryny^;(sAdHeIAv#}jDdBPuD{nFBVxH2p$)$qT)dq3NZLN;Oh<22GQc z(~T5d~+>rfhc@k@411rD74WlCwyITWj#V=QKwmP9AAb#561fWmpXVeJ<%PU zFE!aDl`z_+o?DquG*s|jd|5$~AF_A#ScLSaQETXa1yU`v14XR|Y7fD%{i3K6C6uKQ zp)s@_4&yeKx2P2T{bk`-_JXpaCH<;Nw@Df`5nD3;zq4iSpDPWMGrDQMb^T4FMBm?A z;tsn+AR_xYAmY{6p}xeEJ$D$tVSa@dU+-LsfAGSh$5Fd#s4>s9|1ojPLzh-MoE-(( zxH^Ow^B8__rJBJw>q7$eFOC~l=DGS{1nSi zrTi?DpOv8(8v*M%fdj(w`GeMZhF7m8{oRk4J^API&S3*w9?Z*hh*I;Q@!uO@#~1GR z56RmP3-oTVnn<>yxv}6B`fa7oQeWOK7=YqU6CKf0Cx1*_X=!20>x2B5i};I z%!)?K!-?)QRrOYCBCDgw`AyVOX~0`m0Se5SOQPnSPKEuz8EBcdF{;GZbYW!Babj)b&i z(i1Eu|HX!K`G*@S-R~*a4czX6E}s zYU2Q{nQp@71j+T!qTKxn^?IJ3=C`#pCG~Qa zE5>}TCiH<=2-}f zp&JVwWv%vvntRDYZI#q432{S?%FnmK#rbbn5l$%7Vof}{hD=rJU+SSm_mo5vaEaNU zK+8wzM5}ZnJob5?-Bc>oaEkJ0G|o*P?Q7kXB*jJspKed|XGu_w1W{1Sreqneh`Xan zzc{3;J0sQhD0Vgv!|J5)x|4kX+6Kp__7y^CQ-H8s}zE%RxlfB3|R% zh&5E3K^+Gh-_L3BMVuWD$IQalpek`eB$vf|@6`LMr*5GD`SJr$(+htiXmHCzsA)9M zUg;lgY`DXLt)Mk^h_1Skhjiss*3{u-xNz#jspw365v7@n zK=%8S-V9N1!vcpIyKoy`Y=gjC@E)$Em==0BLml05c$N zU4?loH4n@d9KDvU!|3Y^jOk30SB3&QtBZof%vCA88ZpxlnQrub8W=J#$uW{d-ZuJr z;naWxie3GYkv+DFEZb<8+0oCE%ozZ$TB86yjFut>O`Q%lxRGVaFmVjbY{CeBjK*lE z%LUsXr?cKBq&P6pb=+v1T-43$sy}VC6m+4tX(cH)T0$dwo0jwLeYO+Sd|Zzl;`D@w z#S3mLWL?OT$R|iI($K6?n2!s90rL-CE93`!+q*pl3zYZ%9;#?;_<$l`<1G~Uur&ii zs7<^0@IF(|C`^*fH+GfbQ zS{olF(p^$Gn$i+x7xt`vpM9XLOw_^;GH>WIa)oU)bm83l_^PnkNz*!Ki5R;>-3BkD zJ~=qc6Po1<1)rdtn^u@t&Rh|kJhQm?%g8C6RBw_b{4C3|ajtW;3tLdDPgC}K5&fCM zA_&bI^IRWAHM-r!a{_10SuQn%92ChdDWnRj9yZFdG1a|-sUlAmOcfaMHZP=HAuM8U zxOUg;MUYvyRu;ih;NPg|vefnaWg!F`jwz8TF_+fC+))8mFFJySvs~V$8kq(;N2#1M zvL=q;=2II$c&>%Eu^i0vC!aJfaiHjnNnSFdUSHb91U3uyHUq~jQFe>2kilkIU6HL@ zRjG<;QEhNZU6olRtHOHoblFM{Y44Nmbds!0?hM}HgVphC*lqUmo8{WtLjTNJ?yZ~j z)3bFmPuL*qXf<&`_Ou|I>sKumnBro6P&S+h4=^Ld@Vu9l-RA5SH^mPQ`I5>ZS#51-J$@J5oIxEM zH}pI#YITFn6xyCf6VT>6k4S%Q!O~v;5OX%l%8uwxlA(izS``)eF zLDACTBq@@L`kN!o5OqF-2x*!umjB<&|_RVvmGSn2o$>#d!nd)}6;f#Y$q(>7hH zl<#ZQu-F}%l~5$>XpI-6NO60m3nKyUu0C&R>AhQIiO}_!rKO&h#b-N8&tYjPRm>~( zbd;Wrn^(#d3rm;)p0DlCh{+|O_b#EHa-au%(@OhIsv=pC>3z1e_mWc21?H7vJFj{n zmBmou4!Wa2s($|2fFJe;)K9G2E(828o$QJnn{YDtI)|s=;$y+Z+{ty-r>F;HSU5$g z0NFsvq0-}(Y7FnSER%HmB>f$Z=diXzrN=7Ow~$>L5VbZIb)-`L*M(7w?I?9>l@$C+ zaP;zA2$a{XV9`UOtz6W?Z`}dJ(^L;B(BBRQ_F(5?9d;bnZmArSk#v;C!$&^L@0%G+mkw=_xZB&N19B@0 zM)&c7g`X@BF}EL@?&Rnt!8h>fzi7)c9&~DOu;N%=l1?J|jzp5}3BdqvWmWw(;CgFv zP2CF=1&F?4774G+dJ|al7A!sxNG0BMv@E8 zEOtpI&W8FmyR-ClhCp=E)gIO)juF+r>gN%)l_$d#TSEU#vVz60dz=5vOTDwYzSwN& z0`od=kf5YPCuB@UOP{G6WKiV@oE_@18z+UDou1 z4TH-fA7bAjum@NicZ6iS8)sY{m_{bNOIo#zYyupYBvPi7k#TavCla4c{FfyDvylah z_xkZpcHFx&Iaqp(!M;Q{*jnRKH!h1cH`AW@7dXQ+@sT9UUgVlHM;QM2pxHlL+~<2hG0-jh^r?CmY)oQhAc&idt#+ER(zZ24CI*^R3Wq>k<5YVO+E)(R}l(hwdbsv%|SN)RZ{>QOlCbF&TV&TT0$8 zXK8lfg6s{+h)bM}Bs#nCtcOe4M%t|f(grqm^yeB2;CRf&P100s{P4Pv*TU}gCB_FS zk!uEa{DNMO{9HkU%qiP+k5hP&-Z}%LZr?ZES&^fEbHBPzSY6JF31}fE1TuqDHwlhN z-yFvjk=q4>2B$u(!yn~WUBk&pP;lHfSp-A2OemslUu~1(5|Sj{JwrC?r(@BjNmjb# zkBrzZ9|byio#%4>w32ku8aegfOJg}ltheW%#*BKedI-jV)EKp=cCTF@ZuInJ#2= z32+dg3r>_6YfWZVB!gi6Rb9=u6fOv@TAhRFr?|+C#<|<;oeS#|kz_rUMn8g!dm4t; zyB3-+6Tqgyp|wZOtNIRh{tZ=CBvmiSk)iaI4inS0)Ko3uqN8T)DL2z)uD8hO7w$D{ zMl}p8Jh<-S!UG$|6dqhZrtm<+MdohNoh>}D?sVb74IdXCSnn=8*dRi9%AAc%%yj2$ zm;9#KvtD>GkdF3dlE9AlvGz!sdg5Ixp`CLVa;W z6e@9k2%9oA^Lg_vbZAsKNQ%yphwB}`Zk(Uss3PbMg3Jbd@(o^aO3=@Sigm7L>u#|E zu(4BGVJtX>H<^vU6O_u?@}8tQ#=hQ}fpidR?U}P6R93e;Nu$)~G>Vk4na=Z)FLIUe zDx;ZWIaB{;&J-q=rOEjUdkyTFr-EgfHEJcT#IbSNs7LA=f7WNw?lFW!8{O-8UXWlQ z>3KnmX4xo6fr4vY4e92QnFXU-*PYXyofDkr%X78XBlrmi)l&rpXiZkbrQj5!%~kuz znX@o&>SRY0vsc0DY;~^1uGRfWUH35@vlNdOWP0DE3fa7j*Z#z5zq z^dTmqaXVZ-z1*TA8s}csz=K733?!vL!CDBy6^Pv-49IxZXEL^5knyR%p7AU!sDU-M zT#)hc{*2qD_TAg1sNLHoeE0UrXtfEuRjqsu=n%s`UiBl&i%H(2R)8fDyrk!<-Pnl6 zDqsmX_?TH%vZUY21t+4CxFg_x*Sg|QN1W@5BjCN}BAo8V{OX1ezO5Yr@52%BN$m(2 zrvs$UJQH&S?29@A_Cy^4FA*=gvDLce7-#`h&#L97s~5R*a3MatBMI<*a{T9@Rc`SY zOkd@nIDL(OtUBsvD&;RaBXz=A*^>!xY$eONv(%FS#7BJiUPXl66GdBJc&} zQ*$*$>$?Pn=5Kh>QOv>oWp9%hI>&5)R^a`2z}VZ=$}f80-X>u$87j?RUGAT4sBHf~ z87fsXzrD>{h{CYBxA~|fuJHIk+5|bma_$_oz@u&Zo-Xwidz+uNQxu1v@FP7@lpn7}54-hBj)7MZ#PPB$dz)&~(7a1zUUs~?JQrZVA zKH1xxLBVHAJ&rbx_GN<_JdwFL+YU_Mcx$iqB7k6*v zv9ToBg$%5;XSF`5E}O(0I`r|4)EMRLNRoOSE=Oc0drOXv|L>L2(j?xk;}ac`arG&6 z6LtKqc>FMKYj=vArOT5&| zaS$eMpsR4I+^Km(!Zp=*VIkMk+^OBnMNhG~GbsO&jCo*YsO(eRAg>t`D)YhOflZ}P zYmdZoSyP^_R#z`3*uGIST~F&fIS+@sZ|UH&$hU;Mcsx?a)kWBs_JeRwd2gg&6SoWEWNmo)&%pYN{^uVV_&-=#QDaN@ztQmg1`ijt$ z)uBbd^qFZ)m~pSm5qL$jqv2qxF9U1O$;y+DMSMh_Uj9v?vY7L1=5ja1y3WjW32~zD z#{Buz=f)mQ{$BO*jTY92>#{|$VxE_r=c6c#O>f72bY*wNH#CG?iyv? zm2KTML1je~VtZ;qbxoD|z8LJxKO_c>t%E2|z=3$*{K#wvZ2kjq*0KADx2!*MA<7_$ z_*>mc#$~?x&OwJ5*p)lYJ96DO%(wixnd(<8NNLF~tkH^zr)`9{3tV5V&ch(k7spprs}Jq>KL5ql>i4`O zN?0A5-Yin5>M-9J6{!_dGAUH2&B(MCyK?WFeqSJE<2>!ZVdHx3vLlcsow(4G2bjvt zu;#hE&m_zYW<-W+JBD38R8ay zDpmd>x$vzGe551S6Uj8K4J4M8f%43t@UqQ8t;wx}S~AL7Gg^{c+gmfrn)U@wE}2%* z?~5j`M-s2Hua+uH-L0r@bvNxpIOu!2s3EOGuHNrYDQK{Sl)Zn1@DbI5JLw)0*jNEX=m13TiVQ}pv{D_H2sUHk5(3)M(nU%n zCXMkUy|T5#FU$qO#LcW$zb+9rTD9{`wQ78nVa8dQ%_^0QNU5+^Yipy^V+Xx7Fi5T= zu_PE6#f7AKMEx4T%RgQCE{=WPyxn{`#SdUc*g68Ue-*1>7h2GqDu_jq41}l%v?E z|0>1910FC+B3mBg0~;qM+Pln4&{}|v=1F-tFXDy%IClJBpKqTy&HxM8O4yT$K5MqB zf@P+g&w=ufb_eiP^>xHT3wN*n9S*L*ee@qe_Dlx0;dL3=ymrpdC%r%5MT$k%e|{x1 zqazu99p&tF?wzkP?~qZVD8H*^Y-EJMLh0+6!U$xWovdb`I?QpHEh~Q6SUoSUo-GiS zZG(4IV#wZovf~ILHws`OW>s=d2*Qnkk{V|O!n=~?Q*ScNru@udVwrIx$vG#a!J9| z^zCc>T~}lK$`))3J00Pxh!JX|F@Im$UTk<%oVhq#N~D$jrJ?s!cINGoZyUewvVF8N zo4YT|Ka|!U7)N5!L`&KDJGe=XGJ=wjxrwAR=6!NNq0lSK%#Jc>{elIV0T*%Lp-k z1!4i-XWLd7Jq4>1oftRlG4AYjwIsts^8RG6t3B*0vnn!Ih=!bq1y%Gk{8WFeoBx-~ zyi1qa<6eCw-XL1tjb~RN)_=AP{NR{e9{HdU`L;|6E(oMF?!LMuJ2D7;Ij+w8im{1C zQwKAb^^>dBh$_7%ox+3gG){8_5|PJaCVoC8Ho7Zmq!_FzQ=i^0>u$Wj%O!{NN>5bP zjy$;5vw^$ERmmO6d1aAQnVvI8h8{liR^ef@kAYv8`Nz=Y+MAdxG|A^-}T$7pq z;DT9rr!^m1H)cZ;Xl2!K$gAa~`b9JqiOL3~8Y`(%S7DU3K9y9PE=a{eRSNFF zMS;MiAY#2H2J#bP7(ElF&)qKbEQo!c`aKp65k8xw+$;0~3r>!iZTsHN=n@-%u~=eT znR?l}R{y54!RPR27vjotC=gc&ZfS#M-N__$6elid0T1WERm~{$IhY zkDO*`~RfLU*fV%8XHfE5|Xs$g5er)I?w=c@xSs*_9bmsbo#q*-7_ zL8O90vEjE&6V1Lj5*<7zjzoTQ4 z*iG*Ye~)=X!m#k=)$f|6ua|Q(C`kW+%vxwVR&fN^VdftNY;K=eAoKD5GoaaHA`2y3 zL1`CUSEHwQ-K4_O%!Ub9zwA$KO_`18+1Zw*eR_vDfCCy<)T^>VH0ce(7a0|c(VIsH z@e=#c8EIVq_A$IX-gCj_ zpU7E>jbOf$*uD;||&M0S%IJd&Ny)=mKn*Zb^D?f|^c-j$qxs0QVUyTa zavf;aA=D0XEeGAvW z|0RY{wn{FW*k>fRw(zxell*L!pNIH~f;X{dy128cE~s>&#qiPXr#((A2DEt!J64^* zxs0>Iy`-@H?j(tZeqW5g6DdROmTGp_=hQtcO?A^$&2S1f91+79=hHUK<&?FXOQF1W z|Hb^f`Cp#b9wS#evS*%QsPsgj`|!>p?caOxG@Zvcx}+bALg_v4#=QSmL^;W>K(Y zFuoCvMc!7oNpq58Ad(d=WvsPkd6l)Gt2Q!1l!_aU7!AiA_~dq|J=O_P197{|=G7$CfUB92R#p#4giEi;KSf2t zW$V~i1e>Kz&S~wkG&VML$u}~zc>Q{m^q&zApBS&*I57&DbYTqD_bm*To(L{D4l`q< zdXxb-avW+S&wgdv7Pw;YmOB)RP3%Z2QbPu!uapL-~!CBaC>knypbl^5drjnVQbLh zAM&to3+xl;RJ+BIDdw(&SlaeMCOU(qY%)Ie6V0_PJ%wA8G3skNpGP{mTEDslHt1&^ z4MW|MYc98Xt(XeE!IF##P}LmTf;VPNG`-GOPtSCf`~9tRAdpl2cgWH9Hb{DJu~oq> zfoA`Alw>5OPFvjPpJ#eo=VpwTgtH{!j99|PhCYyGcOuo2czi03(5pIq>c!jqFzPLQ88M5BQ;h{Ub8U2^Ro|F%9)lSWjLzMd%)lUd;SsNKfT|&JS`(&U z4_Na7X%bTyqWQNG`5eQ)fy{hcgwKuu@;-POB6PHQI|cs-dW> z4QzKzha5gysUZ~hHMVY1Ip_QaE7kv8hcn$wX|1qO(oc$vFXUn)Sw}pM>^+x{GDmsW zXfjX-yGTEa_J|_yeX{|)NS2vm_r6&Am>5ZFO`z>4(3PH&380VOX6d1v8TazMt~IS` z-`eC^VigpgT`^M6h{gA~HVmcmRTfJM8RH3X24Y{A&dNIy8FJ>xBUoRr zl%CC>p?k)mBX9AkgY35fZb&gq6QKordf z5(0>PRTD`xDAhe~icx41FlOHWv-V69@Z+A}eeZqGdEXb!?6uck>sinGde&OcdOoIF zI~f%t7!?)zmk*1m>Up2{IZuUtnvwAa?}XAcZ$&6&_Uyt!IzJ-PnXK!2LqE&ic&ywi zsA*j7^0jifQtOvtR7X19??V$@4HT58d%tj?+^hylX?&pMaH#DauKgM9-inY@21~CD z773gtFv&>XIVb6o;nt-xc#`eJK{a~VSbNOB&roe_$K&`zfXp5kLStnJWf5I|lK?)|uLsiE zJK(Q9r3m*qW)OO9J$_{dA>THG@Vt;`$i>)}SrG8sY-sZpwDT#=daA^nI1A3Xc;>=R z!gTch&L7;guRkrt#FQAv4&Y!;RB%2|$8YVgSTd#M?+~c=c1k~<#d?%qo{ppI*I`pB zN*=ocUil|g5uwblfRFIYMXrpSsqBK2r2p+X>8A~*|2gSl$y~!D6fn7|tEH|O1{%g@ zMQUv&gt)KgL_j`j*Z7eV`s=$#0-*g8!95 zkft9On{Oi^fEu;mS0eWZi_QOWGfjlsS1vZ*7XY7e``SR^s@L`i43Xx^cmbSN3QnSE z2x1s*J1Jgno9L9018CWc@}qxb6$~r8SOQ84nA+HLSJ;>syY{4O|^@dBZIZS2pqOVq6lb z>7iKdUlkBN?p^B#|G0pOzFuO^up^&Tky~PsU$G-MsmLc|k)wz#d;DqMILx4u zVuLR+&)hHZPZ9r^{LscX=8uzP+FUO5$P}F>Z$_8-ErEbFN955bbIp;XJY`)NF7BOQ ziPzra7?vneQnE?iNE8Hy)fW34jx2|j|Crzf+^Hp|M?g^iByotE`okovlcQ1W$i=W?7sZr@uB$j(%y4@W2hmS9y9 ztJQEzxDATI!?+gm*$J759X8@FbA`Ph@D;or@a0#f21eNcn+o2BZ&{pL@Y>q3=G}1h zXur@@TakU(zsK6o`YXo=a%(9CZ-|g4%bRtuGSO(l0OYcY{OMYa=k2F*9c%751J%Wp|Gk|h|RIae_nrozTmwYR5!oniS z&^XVx>^emT>s0WzH>iD1m2RL)%T$$;%$^$utF$6sB}P<*L1`6iBD-__o&&u_@pELU z@M$nh@J75|B2fWvuxZva01SwnezcMuOFnd-9>&uf2Ok z+$}w&K9GadhL3P6GxsAn^$33O>@u2qRuI3-*eOrv0c)-jfAb-8k}7Eqd{+DomneMk z4T!&`BL3zrAnlrAH{|kR?85Byyd#7>gi?Fn#76s@4r8}*$Y_&tmc=Ky?dIAz-JIMD z!B*-{mz0=GFM+~zag(*?3L(j%xx#oG70p9ubJgXtQ%yzF?Rzdq^IWAEDQf>WizjWn z0UO{vHair&VdA)w%kBZG5mlb?QFD^|JR6fzaPGK4Sgc)65nm}Wk4~cKUYr1bf@lgw zUn@mtL|3~Omzbxf+GP*ZE0EuE@=cu6sglJ@Pji9*)rLiX=rW(XoZL;uEOH0jTOD(6 zjIqoX86TPZ8Svfs+7YGRR7St}v9qzC-<*&^QnP;9z@|_#ygMYrk?#)8fE*07MsFB4 zpWAN`gp~BOmW{11D;#JJc9kSSzQ$AbQYOH|Rh=g{i;{ppbvXoj8P!Yec6c631(_R4f?JAtfe^NGk>3~F1wL#SuzP%n^#J|;A0+X216B)u zuqcb4Wn#5J3>n-=RP|z_s+SY>gNj0azF)%6np^l;zlsmvBd+=f#8s~)uDW_v_}Lm@ z#!VbNZcyeBD+igOs#BmL3lujtO}}77u^8>n-HpR`d7N$jz&L>Y!g){xW1oJsIs|v% zBkjE0kHl5;S7=xU6S-j;V61K}mN79-={%HsfSXKbYi=7S8zXQWDP$6ye1e45f`Zoq z(|X$U24AQckB)Xr9OGND$4LaaOOLUN=As&P(|l7*2H7Q8W8#Ui#Ly5)Jh|BbU#9{p zjw zwqCTFEiTIbPS8gLgWDqZ{OPd+0y_}S2&gY~n%T0Y+u_5w^+^n}4est!?XCYOKbPsD zW?oEY1SqmN$F?x$G*xr%P-6AT!E%GG{4I7@JsbS+x=wHKpV{F5WP`tNga1=lUmN_< zeD_xNL>Qr)Rw!ap&lwbhbX4{YVy8WQ+i$5b*Xj3ZY(l(sH}k8XzR-IgSH-+Wq%{r* zWB7n=k82)YbBNPFaC_@E6X0DK8oX;ioTvHq4~BVzhk?=TZxz;3v%kIT)D4b~#28>u|25J_+S zg3=B%A3KsMDppeDV$y|*TVtOhchZK0O-cWT9WUXC>=|IV&ObFricvWJj)2t3dX#{w<-ZYlT4H`i;C87;kiZJ5 z#NBo!o)pk`*x~CX0ldTZA_+i|+PCnvBe}h}x8wZ5hEmU{a=$vKYS@%Lx`Uf^#Bf3NblgugcauHi4AzrXQ!g1;XA^hq-qc@A^q z3z!3uU|d&vK6~(&FzbX{+-aLeFgTO`Ny_pt4T?t?ty{aQxxe2ve||@1b_HCoQuE1M zY+1YYQ{Z^5A0u3@iKJhkl2oReUt2EgiO;%o(E@YZcVe)t6_TXg?dZJ$SKPjirP&@L zfLWPZ>9MXhF90Yvby6;Ob!Bo{H|IwqfN+e1f^sUJxm#R}Rf@sz~-`Kzz+E}7!6G0Y-7trLI(h{C{P$r2BVU*m-m zmVnBVe*p1TB9~hHfzFa5AIU!^K$azM^YoR6YyJuQ4c9rO*J^$=!W|e{VLY;wc~kRRV$J*g zf4SOnRlIQZc@?2YWRuF6D z8#Xp%d*9&Rq4ucQw=v#yw(97YPyF9dOk0axPTSvN#S`%dRq)^Tf4cvbjjvGf#?B#F z>_4{u*zg^n#l>u3M7Fhbv|=ZOkk#GM+R@r}qDei>rX$;Fo#>H2$ZvNLiL7X$=CP}q z++;r!+TBmn98GO4pO+ZFH_|T2R&p%$TMeHJH0wW}T~IqRGc6)YG)9)O3 z`O=cMA}r)+YIkp9uqZk1CgU0xd)Kb&newAKI}#;EKR!GS5?PISc@nS2aPJelQW}n? z@a_twW*?cHt?w8PNP7JmSCee^hrmcs5lt1fGqS4_HD}x8>~A+!7_RJ!nY@m#&^xoV z(GR`dsRF56g=CnbCGzbim6GjZM|w6O8S6GwEB&)^+DseY(u9qy;kN%%xOp)CDt ze$}3~LlXY0%rBvbJ36_GH2fLd2pIlM?%k|m1JTf5+5GuAuBY3cY>}l67k8G-zsWqd zRET;i)VHFx%A?xt4$n|x8-st`^TqTw9g>ujRybeCP|mb0`#HMAevZ3EJ)y~vWcQDLE@>wD4W zJ9>4)QCCB6k^x;@3i;3ZmrZu!PQn0FwDLIQ5CSVye)K`M@Y5VB&5?cy`&9Ta;nh7~ zBf~2sB;%qtNGzEeY8%(n;I(JgF@V=z2&hJzHiE)=jFmXK(~pmOsBK*~wpY+PsHolT za8`uUvl&>%{sXx#{eCNDp1gvxPS!TYqF5(ZpCal!S9S;E z)_b1DYRVvQZ+WYMw`_@ht3?)U?#rIOVqA-loV=(1R<4o z?Rfo+BXD61Kv#7jxx@VwX`4FSTjjCs16nP@wLw(PdY(c#HWjW8Dx_TWm3tEjKZ6-- zkWC`{hyOkBEvDW_R$46L>wjkbN~M_Ref)Mu`Mg@GW@TOV0&^HVlX z-HnBT#I{d||6S-{3h<-WuOk_JjQo)wo1*TAqS^%} zHnshoG{<6V%R_d7vjPX(K8g|jL?OX%3fUjt5?IjGcHByoEWG@YG?ACMxG`U&;RG^~ zBic^ry$OLN8>={sBU7YE`S5o>MA|y7zjd@ms>sVjkXv#t3JC$P6fD`!0_BR#Rk`9H z?P@p$xj)6@nuLxWnR0@>Z?&CUvj=3U7%Xk$1Jc56Ev-if;@Xb3bqR>R);1x7fiZ3M z?P-aa!;v@u5~rovE5=qT?y!2d%D&(FXpw$gGfwd(7G%rODFrx`>nI5wBq{H^^KL(9e^ zacA&{GA_+bpok>oad*oH_zGc03^U*{C)J!|Sy%GosqfGy1iw3Fomp2?gbB z7Wp%o@m(oZR;yM;qE#ob!RN~nxytL2dU9Wdqj4G zIDuTlqdO=qn-Cb&7skiccIlbTn`?fYnxJ{YXbx8WWb@{Z@{M6tp|IL=E-0}9Y@9uU zwkR>XP?=)QTfVHrzcDhB{DWN@>y_~!Mz6&CA=Z~y{DTho3CBu0KrODP7E~Di5fw(O zY9JaSFutO84=0aMc|Qy*q?Ei*w5EjoXF}!ONABphoE(G5t5^&}k7rXE@8Pc zT`b9@ezeO@wbgO6>FI~$(&@kQaP_d2|DWGj+ZZ>?d-RK6ZLb`iHnEnYcPb99UBJ^0(nU$a`6 z2eumadMD`AsNx!TQR`P4Aoz~8MF=lz%W6-H_vW>?52o}f1ad~NvJsJnZ2Z{UxLR6#;DOxsprC8InM)k|704V zo-d2e5ZKEWRgkSunA8s;rh+qqzU3<8WEF7M)9hCSv%X7Xe8^5K_kbSprR=u%Szi4J zrHV4SV_P)?iY*?4;uG3>^?uJu?|bAOmDWr7l>Ii5Z(Kr=%_LhmNw7P&=*-~M+f*Y@ zRskt`$rZuE9|$^&CP_UQ8jSUYdx3Wdc!wqcuZgdt+;%BTj}o5gcu-)=x+2x0GpN?& zV98nqJ6#0?@+-Gg3*?1tfR_qe0M3K2Rl1lz*aKz4#@NsEZ^SbwmkQs6aXaez>{N^kV__@eu0}Y^Nxh4bY0CXY~1!} zp*kU~I_rdRjJ1jEfLeN(GA7w&EaX(MP~zB*FFv^K7IId2cO0Z(AIuJg^eMhd1>WTE z1l>1!)qSe!M?dyXfn8F@jAtgPxFyFcysO?j0k$W$Rnug-``yu_2^>?V$bf5D~f1fE;#s-~VsKV-xrjWB`4&Y{X@}0CFKt|el zzG4$s#W?CDuAX9q5Hj$~m|&}Vq&PsVvLpbREPGdS*=HO2cgYU^NH}zlAMfo^!D#juv`esYW0CEW@wAdgsy5YmuGB^WuAKLGT9PH(}mrPLEIiU%ETdqI{F-X{v;!k znLW2lsH8q=;`{cU9;7A zgqawib9n`r77;acd9)oKUrppmo`Uz*L{i2%| ztpI5?c%q_oQ$j;2j)U;*r^PJsk}pBc8g3tUE}3GLwtjfTGO-ZqvTkzY_R zl|lME_ykcfyGRskyu~fx4g+%y9q>jAbese%6#ROF+xdlB?BxvWsG+S+GiYQFI@rO1 zl|WL2hC;uzb7klZ4x2#;+Qc{nNYx}&jJ@W`Sm216A&<{V;;oxYuh~_JQ@VI|Z=Dzt z;u|yN7&BqVwiArH$bCctNv&XmYu7=$ol_cB=c|cP!>UQbG>;mNquhl&>GzgxnN&Vf zWP?#7OlnQap=}AbShZ!tU>&`|->8;ku=Jwt9v?dI2#=-fYWuoLgZDV4^TqOy&jpJ=_j;)<^ry39D9ztr}B)fb<4`l38LW47} zae$r$r^sghTl~a)JH%Z)#LlZ6PSsVQc@O93va&6k0!0H+Q|CAw?d2R^?F+ukAOk5%=dxf^%o+_p7#G>|6B=z#T-|hqk)*|4#b;9}S zs)llQp@@_on3-Sd3skq6tp{w?zmXkpcC^6}bJve7aYT;NCi11Djm$8_VI;Oj6wjM`K^z$RVMKYPmYv`M?2ZhJSD>HlXcdW^LH5@FfOE{ebi3JrcLfg9cSN<*6=axE@4oA=6-am4dY$lfARh3EjIA~d-tQO zY#>=|d#9BUW=3(U`9FL=dY#O?2GdnB^V8J8`Ali|epU223)8rI8##_wOXY|)Zr5j0 zMLgF>qnqSzNB$`rNDXW*99s6q1Wwu*>A#^zMFc+NK!WJe6WK!^M#8pefB$;te!VN2 z*NE59-#HQzYBkfC)kn^+*B#TcxkHOOwDaUDEvhA2uZCwurIg%;rtqx(fzYP|p}ts1 z{G^Bs`9gm^e2kIuaAYn3Rv-ru?QpW$XAzu*jfOW*0mkuko_kzgutmk_!38+@%>!u}`bz0Hby z0VTH4gh$FPnHWndA!t`2;wPAgnVwWIxVeU;2&vBm-WKutW(1x7%)Z5zeY9I;)_T<{$VFKT;x(U683&{cYPrBXqeA{pq&`!O)qVPj zVdAC1i8bH2tUI@#82RW7_!bN}*iIGc^)9ReG~EtHAdade{xw|YujvJ4;>*@A){kdD zrfhlHR#q~R%d&-ZOY)+E;CwNOje>DWsJJuli20{)vyAP?LQQdtOG|sf!L~@Oja8Y} zR57b92~8)g=x+b<#IiCBt#JL|exU~Zh#|-oNg%0q54ztFul8K-DlzMGt;_Hq3tfw* zpowwH<)QHqGI3XO;jjVicaarCkAPcYQQSZu@V0De#$f=KmMcakOnj*aQc>~tN!5FG zQ82Srt3)PU1O`jYo5`iTn2!Cdx6?4rPHVD072z=D-t;c%!ou5REX4GBhLc-Iujj*w zL&{c;#Lw|Pc9aCz0csvdXLt3Yb*ih+(d+qK_olZ?P3ir(d($CmJI7@+6Ia_=F;Ikg zyDIea)OPACV=55O3RIi#Or>a&QM&1=o!-&G-2vKWTa#&>0nxYg!Ev!*5pEWYkMhU8 zh?HAk`ho?Ru2_8Q^^c*KE!xRDp2C7Xfo{Ep22RgyC=%-l322_BKPKrJDBij!0WOxzpWw+z@&@-3zzAi2c^3X3 zlCT6D@@E;-M3+vK1F}W&Go6XXUIb=Gz*Q} zpg7ZepKL!+YC^_wXilZ9S+Hll-$wrmdnT%mBy%ux+|+#1^z5=-4QCj02SGEr6Nml zrcP3Q2eJ%k{c4AeY3Zs#X>EGdZcuPRIVd@=J0jvW>u2h{oolDlO?IcAZ^})v(TBcS zM{}}jm1fl{e@*&Kt0+gvBz&66V$sN#swNpPv{3qBBfV~y=*sK1CMnf3YLS7n9x=sn z+&qXBg&6to0_&c)#&%C6yBUU6RA!BdHzmMg!lu#DQXzx(I)(T(Z8_aVN;EvFZE8N- zMyBK>6}2_1cPfYCJkxQkxZpODzH^{VQb z$%A@TcR?_sqfaqgKciQ5JD<+dt2(_L8XMQE5-_4ybm^{RHnB44v3O9aB>yJC^s zh%9@2KW|W_A$nE6QSp0;e@uR8Y4oZjndntHz&kok-q5Q$DJlO~^r{3e;G$Rclz^c8 zA$nDUA0N@H`g!c*5WOm?rupMoJUts9C!%zibZiWGc;%1qg~m}-fw zwigLVkBiF84ACn&i6yHH>rG?-^f8+2ni~U9MC}9?1BYL8Ef#B>HwI2(KFzlw!yF}G zY`q=p8Ks64TM^W@fOP;WuHfNzA+D%|?#{_UMD}N%g~%-fi2PNux;Birc8lW9Ar(9j z)7tTF9KOL*cn!FW2N&zYfmhFswyw?z$(*<$12he#b%YZWw2n3`O^Pm2qQD!*n~S96 z816q&2T3-kc0=tM#Bb`^_|>EKV>c9T5$uM#kcK+2F=<00jng#PI2W4#7&}-%!_dYV zoQY4cW-y7cO?YZ!X?oqlgmHoKy4Z!nN&Jv$H4*iCdt2h<==-_z%cW)*b}fDx6%3Uv zL++dB&!^(DA5!WNzQv2shcI7ZCBg9s&fWtf%^She-WwUs#v9f=C|J0-53<@D+Z_oJ zYsQ|eQha8BqJ%MvJY{Io?Zn*YSx(^N+ah!?O8b_J%5(ay56aeP5>ku$zGx`Wj^KT4 zkCbV?H-=dDNPBq3aM)?Q9@!5yIcJmfA}QD;{bnGcy-B)!wdxLQm+jN^i+sT2r~Jn@ zfbX0Gpo{%G{i*Mc8jaS?CFVsm&CsnBgmI7to4-@LDf9u`L#3V881uXVXy#Z2UoUP~ z4#MJlZ8^`dbu~&m&07&;QHr(8qzHRoW$UTlDmFpQ-i@>=BQP{e_F8HBb*Y}_SsC)l z8p(?*JS&|~M9JpJnB~#G<8p)&V$&_wqF%H1!gx!HwHamqd_aXf)BG-9WBOFG88$yg zNJJg7(A?mHYC^+lw~?y+!eX=4`_h~Qm)=>(23O4vMy<^1RN393mVGjS4aGHV!#&WI z#1LL9l~-^3-Kl$`9K5(CSTolAdxo0gab3Evq+k&qACF$Pa!{CL0 zMEdhl3E`8P<~WC{ghZdxxNmin{56- zO22qOlQfE$DpkghpSSLA5M(soXb{F&!%B4K9-`#iFgUJ(OTQAK%^n$Qzu)7j&oVz9-L5ygyyeQ>yiv zQ&lU1%AKwHD3f`}xLc>jofzwyG+hMu2X^I)76fWud$d5Qw(EvP(Yc@|Xu!*VXD?2eAklubr5K3=hW zhqvOdUl1Qo=2Zlls~n)@$TNgq7VKHHc-_qfX$pr0MuX6Vk3M5L2EXYE+BAK7RGS(@ zB`_{`kLJ5h^IZ1@Sm>!qoQSQ_=9A|SVDU7;P=-Px?v^Yz_A|@}`6kq)Y9Kl3;*;Rw zSR;MTKzB9>a)E4fu>hZH&g3z4mh6RZAvA)cW1``Z^Iqz$TZO2Vl+#^ki8V`=dtx?n zu23d(Vpfu{b+F76xUzD%c^RW#wA$r;j56CDzLqm)^K(SA><2g}9E)Cyk05b48a1af z{=}v7I0Zar%)zBVhv!U}gR9u^<|J(TK%yz{2zXG+hd%(^!07nwoDR=Pki0qMr5YKx zwn{ZZOQ|2a@?wIjy)wmY5FnuBp~eyMtWMl2rj5`=3{UCNLT`8m(Z&_q#X3;1+grz# zpF;?{OU1Ym-^MGBSN}JnyRW5fm+I?1jzB&benkM`5r(EvahZc{@xrrwl7ij%f3lpk zhU^Q?9DwLm?Ko)(FT*T~s<;5v#_}RH(RUVFKf$z<5$L3V9W~bZ9ru!InprV1h=SFgA?aD%Ymu?SA=?FwaeZLbna-*p#~gsh#Wd zPTlivrWa}FuPN-~^mg!24JFT?R)olxb|VG|&MR^B2i)cy1hF2I7j-<^DtbHCDh%Fs zp~oLC_ROcJ=g>Zs`8|E6WKImc8K*{f1zrm&fQuGYxW&EDD!)-2}_#RLT74=q!@ZOkoJMm|7Mu?7u{*s->yfEyW1&wBC(ZBDQEikVlKL zBj5D#;#gJatgRr9p={*a)V8C`{CTuLwiE;=*ol%Wyw8q6MH_0&uFR&^Y=W%a!ah=F zufKcJ9yeMQi-@t|Nf|Gv6V^}4FZQj=$~(vj)B8Z^ zC6TpFHH*;q*oNIaY;P(CXlklh?Ao&?Cw6!*@cUM0n!iKjFs2|WdkS+pTpD}jo&|5z zhq&WMl&+=7DeK=Y+QVpNb@iB^aHPkXI*!Y=^n$lm`*Ke%s&qKtUSKZ$v|mW;JYqTd>jVJWP1d7LenIn6*EhuSUB9!Jgy?$3W(y( z$X$x?W}2mMgg0XnP`sH88Y@}xW-L70>BhH)oJ(<_fsEu~9zgT<4 zP`=D1bE)n*e3{XV%yYOJcw^Q6IqbT+1SdD^ zF8kmG=HHJ~02~Y}z=VYHp^%4lk(pmUq$V8S&40h1ZJsi8${IGefD`(7VOaRsSwn&` zK7Eh`EY>?Rm>KMf;ZY2(_;UUqokO8YHx(u7d8ep^(HvfReBfxGL)6eyxjNb}kmVzg zt&a9^8O}b}pRYz*=I5OsNU%JTs^bRhtxC2{JDBgHVyThYU=8Fh52Lk%rsZ4=XCQn^_*dTm#4m?FuJDD zT%w}pm?i32WEQFC^=6@ZmYCDkbD=p^J(rj{>bca+QqNn=4E0=L`qcAQ)1#iZn-29{ zW%hn7HPp;5^}Ne8)pMQM$x~2J>e=Q&iG8+?0cSR=;06i4sDk%O@PDY_CJFvl1@D*O zLn`>71UIRmY-`P+3O*{qAF1FI68wP*Zjs;$g8Gih@%@$EDcUq6slcsV*23eNMUpZD z?+ortq|b%xbD4@+gN45=6@zhXi8%+zdi*OCxU*wv6 z_v$-cMiP(?$pIZ2oW%Aj!8#RNyrx2nu{Tr$eeJ?O=!WwCX8(R6z&H-ohT$}Hr$6em zhR4)&H!tqUL5oLu}$qTcN;4lvShBUhBf{29M?evIEE` zlx=ZGA^hhm>>#99`oxszH~71hzj6Hebh9wfTuP)H0vXD>awrK)FEieJ=Wc<$*l|FBtvHN^9qPDYr!e|XbAt-w)5NtpG5e}Z*Z+BVD4bU zfaHOre&R0lqjMQM3EHIEmAzD~TC$UiywLx1GhSg_`9Q7TGv!X-H4HqsxEt-rW-DZ^-EO-sUt>l2ws=X~dLcurz=O;*i@;!kT< zepTam<*8LAg1}&7R{jf3-e$--$nZbl*W}=MR1m;Q{!M5afy}_^3mgGa3(WNo?!rkL}94h^ai)^ z!mdK({OTt*0M1e9t&>X%3D#(93mUw^I+f-)yQrVuO^}{igGn{lnyL72_XaD7^1kHn z&x;m$>n`D?$Q!(gN3-9I_RB-f!pIn+Dic*>bg)Z=PngoEHM6m#b@mc5v5_dovA6DL z(#lRT(#WUU->HUE9|C-!aP2k*h&T8L5Ui~-KYZb3N1#k<9%&~ABb0*Y0fMsq`>Cib zgRA$R5(2UE%j4yH>t+*c<4|Nrf(AGQMTREgraXESJ`By#&kwfDuQW$+TV7`VoU0jS zAPK`@E2!E`scRq;FPkL!=;$EQ^_;y_AIwr!eck>f1}YTlF_Hw@_*@UqnW-xM?}`Eb6z9H3A_J8p`W;7}88f;z1i?9xE zxSn$luF=FSU{yxkTH#ppj7vIZd1$)gqnI1vQE*x@nyoV3D+eX~7b$avujdCcv77Br zpHxjZi-V^^tr5e8L-)cWDuCm$N@yrBIBUmwB%{?x>%{7z6R2h~xHRQ;gGYYgn3j_t z=%iJXRae-(6k~0wR;9MzFb_*@?Hz~g`k{0g0|lGH>|=92!2Haho#Bj|W>;4~rVu&G z2F{z#WgKVHF5w`;|9p=j$Qa6B;t5&Yz1!hvk&xt4~%I)XZ%)PMx zVuw4i#A)6v3>o234npT}AFYlA$pZ70D;#qD>p8h5eNnC($h8QDBnRnX*e#CwJ>KV9 zyw4u!o|8Dv#T~Qu&r+F8@3Y?SISIswD?~9|PpS&zWaK?*=28#No(>6Trq}v*!%=~C zup(u*4XXmtoZ{Y!f>pjdQ~4dWHmSn7D&4x0@cDO6TuN|?c+f#NIe((brl6g z3V|YpK#@YANFh+95Gb+{==%}``YK>&R21wBTvWlSY#60_gN=;Lp;2E1?S<|PUd9Lq-5xn|m)%Oc%6+kLz#l#V+oS4K{_?X%PSGdoWU81E zB6SsKMm$1TMozBz-xAIqITw99HgX1eC2HhYcL?X6`>MVoWmjy(kQtXY z-e>n;+dbzhKxPR@7boQlHlAKW-04MSs7KZ_I&9X;4px_J*NVp_ zhEzG?15vymMzyQ-b=i}nT2g_QJ$cO(ydN5=e+i*JAnp&>{e^wS1-AdgIe+n(*QwkD zmJ`5sDrm=CFhH=V3-Ylm4B5~*YVURl4zRiAry4h<=Fj(Fs*Ne5%FE@pJ9uxA38*S?{*?wl873;E0 zB@6a}$cP2@4gJQFQ_LNs$bOA`cL*!wOYofb1$ZV6#q*i3{U5_K@Xi39NH)dq$c?*Y zW{x*sfhDJQGiog`OBbn$$<`)FhjFvCrbFF?Zy3Mc#bqV;!OF1d2s14CVi(yv3J&2L z2)KHurM$L$Sw*O5K!f@mmq6*3tbb5wl$~+}S!TGM{@}+9_Mu3US98w=S?d zk&zl&ox03ulHvOOP8kNaoNoMg@uJeaXx`t2;H1=7jh^cl&8nW(o;USY2bOHoQ9BW{ zmYIA^pUbz5!Ec#-%ZQo2%n$&1anqN+0n?Y_%UMicW+>B_t<3fefGEGv2do2a%JcIP zJU?S9lT?|co3_YeCIeb8hy<{hj#I^mEBvC2D$s}u8q7!#5>S^fg z>*~`k7n^!w5?f1Iw8+#Uf?U@moA+@Z9O6!KLaf1?ms{iDY0@#NaEFGO3rLS$Ubi_< zWgPU*iR;}$ElIx%?$H=hd(7#=xGj5LMv^Q#Zdfn)ZApr41Tj%;!Ka18?~4|vDv2ij zo6#~L;8wBvy*Sscdv0nW^SjGv)4risbN6*QV>Thl!jYRZTI`Vx?Ro~id^c|eEP18L1AcB?-w7jiU8LhmlOXW4F(>AH(l0sb`d`OD22DMZx03c%kLw{ zbG6}?ohw2{F-Cm>yPGdm#l$2a|XzWd__$1*xUo-PRB*%_NV#o z(1shqrw9numb;G~!(j*YXf597&d+NJZSUk$X!~*X`=b0lVDej0@CM9fQdTA|clPKi zl_T^_J)gYy{xk96YcR6ZyJRg}zeev%HM{0umZj4xRL=WSU4zMMWpYC=&Y^-&kcR{D zJ^vU610*|mf3e7O>S3uEwSSaHD5z={R5cE&x&~Dn1f{N#7s*H|xCPhd>84Y=61i4w zQf{+0nm2Fo5kBi-N$-jL%Rtx_2@Zr4B6kz6RcUIVZ;?t~hi#WEk>vy{^fQ+RChJWu zyBmy~`$CThF1Q^GUp)ZD)uSRKQ;0DXuD8_>XB&+Fr~M)I9vLNxH%rYNk)$}_OU?!? zUj^`cTu;VYA@U|+BPd^nf|U2j%Y2f`_g<$h)_ZT&uGM>Q*E00pwP;}S$*z=Kbw(cG zr$Ybc?STuNJ+Wwb7j~aTm@ctK@VJR0AV&o}Flgw{Dmn`e$#Q7zzOT54?5%utNcFon?pa^41-- zLrd^dK}g>$V}+KGaeY(x85x?*Y7EF0$o!Po$RA0k+GB#`EEnk8I& zZB(J3ujci-{SgaNq?nzO{*q8K+mTqbx!&&VXVk}E>$o1Mb0 zW9S*FW8_+JFa!m=NGfubQRKn~Zl2w$GRnO#J3?V;7j4upavKK+M%pXWHYhwz-^yi_KZwLKup~Lz-U%Et=UE>jpJiSTBd$fF-;1hbI)gpM=Kj zzEJQ%0 zIkbynlMksfdq82ubcLi}Xs0hLtI)Sgqkk`u$+Q@f>J~}$wRozUZ%zq}jCBc>yw;w< ziy|%tw_O$KwNQ8~psZ}&T#ZCmpBndd8|APmt4IqOn}d?#E2KTE%b}w5LM16Hr{Z!T zxQj%FN~+h-=Y2Qtq3!MbM*Jj-4OVh_gYwSkh!2HKJ5Xr16`TE+XZKky?{l;Jeqmh@ z`$jWs&R?*Q9<)=%qP4NXgVh(Ta|P>HkHm8MK{2zS1`TZP_-NTgf4yn+1`_e>X_K|8 z)FESJjIIcFkD_vCj~Amkr74hfky?Ah&wRo>u$QB#TBdPiiX=`-lQzXra{z8VQuJ5- zhPpN2N;5z7$R=r$UgOR6Nlw+u8%Eq+nqFmqMrT1i_Hwe-rYc&|3A1|X5cP;0%R26OIPxsOQi+C7mP zxFGt>eqO_BRxdyl>F58DQJornMp7ASS7v_hDq^8rKf-)t8gn90%=!TR-IjXon^ z?6uThO3fF!J#%iC1opIYlvV%M%GAR`oubxxcIz*Sq4YNrm&G=I>#|})T%h2-=3xXCz?GJH-BYvx+M->}}(7&?c!x1>JtB5tgOiP}^Q(f8<}OzZrn3W^Z9* zr?JS_iT<2jtW87*xCyTvl;asT0B`pD9W!V99Y5f2FMk)#@jE8*cRPRU_=X%{mTO@VU*n`Zo54FKq(6a^e{dTNNE^zH&A~(DuvpZ}_s*&`(Xpc^8(55MU9=Vl+N^7Yc z;l3(W^*F7IcpBi`ueT(IJeEkI$?K;ndo1p^J$hE3Kw*UjN|w6LR@pCB-`+(=+D`vI zzK5)o*o&pNcyL?7m*Vt>qwYLU?a@w*DO@g5!TMc`>$ z!p$PzZ{b(J<(8vuu)&Bd!I@!EmVWeIL9mFN86A?kV@PVF=$82RTRJ3H$C48BM)s1z zz*u0*l_`$~v{3gfkB_^NOZo|TB=89VmjrqUVD47GA}^t`m>wpk@@6D)VftdfoiFfC)pT&clXQcH3qPm+z4 z?J-zv=pE;Z7jG#Dy^5^!Y#2+7j`TW&3%v`>Dz-{x`g=W*P0(Ei(D_`KxilZjtlzc2 zd=gp1mpY`;ekm(6w{PA$#%)}G!+ z-&Lh`;F|Yjds=S~w&xeLooFvVE-+>VT*e{UAsGITIdtp0d=(-8$6KB3X$p2#;eWQS z{J55c{0(IvxZ`+Td6!5~9H-ct19x;41v-NVH7vLv2mA8lJUb>JD1CA{d>2op&lG77 zA&Z|Hfj)eK__UF~0$!+g>dLVhvj zAw~3S^>UGVQH+s|eh*~8Rq3`aU>LYzi9&gia~{yi zY%AO?FxuzO$K0L1!&PeB<_g`O?ZTqz@fzB3kf#(~ofV#)Q4(G4G5;H#4?a}lVtr+O zzeI;;`}mX^o}EPkn58u(=5;C+zGFP*D%qOuaK#Lp269>Lz5=|C*%@bJKienRuSWL$ zPL(5DG*6QVqQIvbbaj>~Q4!hzqyCovA>lY@7`?p9>W}J*=HLGiM5z0I{Apk zPXY06F8d^IrG_aDjOTtjA(l4pU@go#%!34mi+K%HR~RyORMd_VGb0R@;t^YW z;ZRT9CC(09l}_seXGOBn@lx(Cd&A=z{pBJurjsBF9(ep4UzHGgaa!*^Sb>b zeA;`9Uiwg&lNSX>;9Oc8rliU$hWST`0Tr7BL{!tJS{Kj9`bXRZiwGJwe1O4q;i1sC zwI4_;$xt8A7JH}zZ(T3@`{Iqt>ydYcMm*Gpnz`t!c_tR8_UxbN?@MXmb`FMr+a0Mx z6VBhr`qPl04L>r)gianQ_dF!>X+BK4+A;LfL%hg#g*2x~BQdfK8P;|J)5;%pwDQLK z-e$=MRLMNI7Rqkx&0HmG?Vf`GlC}tnQpokN+cAo_Lgu0OkEI^#Yh1${4#S~5kZZ$d zj$`klIoUtay5ewIpCsvVv+Q|U(#Q5)777P;gt?7E7;IlKYc`xUYmC|A9CeYgnoUU2 z;!yZ5CZ%>$kv6+XyP`;&RHR*7RHU7UK+a~eH3!%6*+aI}WBaQ^M~xD zId35|aiw`3^iF2#a?u0$Z_NX9HGZ|Bo<}e|&Yz2W1&_1dtN)a0$i?W0-^q{WeCu>m zgPB>g)hGQDkXKT21;B*SzBf}nZoyc3Cb5}mS2J!WMNhJon3J7_N%JhZtx##XSJW7srj4{QQ}@Kq`qh`hkm3HtS$`)! z6fm??-unC-rY@c}U8P^wOlU!u8{m_0FqdV}GA?tx)I5P5ix@)Y>~3RIzWV z2s`>M6$8}Nw)!J8vI%6F4+E1jD0d*E{VCOy3vfQA4*7(KhqH1oi{+NQ@oe*mQ}3iC z&b%rHW@y|cL(*Wpc>tRc#8ZagvwJ8$cDd$f#>%Mhie-OF z#mDg=66_w1r%gROUhHYv6<5%A58_xUUv?`T_nd{J!o&Pl{BvsC;ODkI=R(PjCmX=g z&Yr5`2XNUfIQBy2Rf&T*s`yS7Kah6MAdWlb%N~W}-m`F2c$oh^{yDX6@N?T9@9bXk(QsZd{aa8fAAeMGRDCqkJaePz0>{B?t zb{38b5A%ii=hU{r&uy=r3+4WJvH=|J?CVtg0FL_v$6MoR2XR#KB?D<8Pb8Ew%mN}6 zT13StLQX8I1fnPIPin-9X-&13_jczb$8-pHS{olsR2-vA5G7$69v4bNWV#8nFM4Eh zwoJ`b`Phov3V8~wRA9xOybQt;rxxaI3YKR87Ln;Df)Ybuc^vHumd8;tfXCaCS2oK- z@gOqY9CKD)${)ycMDiekbyglC(@pM5hm>dI{3Z3@eGUv&|7XsD(Yo$GRR8q~);aYT zpW}mVN&OY9&(!~#bMR30pK?~-&(vQC`Or2~^*;@58!V4JLxxGZ+CfZS(xf6|14S4G zj2$8u%%^|PpC+0Fzmp$tP#n}Zm?@k)Yqm~i5rj3qiYQ6OFi?hZqt)KJrFPucRGhc2 zm{$gyd=W=oq@K*KB6y`8W(D>Jl_TbXeL?-z#?tJmweQMKBDZzzGIGRr4E4i@e(`Sj zm<w8?edyLlFcjYQ2We*Zs8Km{G56NKt>t$x-bhKK(>1pKb z8*!O!>$0x^-W6)+LgMKx|I-Ih7%WA~xLV(nr8gxQd(K8ciPogFhL+kT;y(i% z+m4Fa!b!r14kY3sqoqA`nw5ak`WpZ%wI;bXS(z0?vGiE?%3V?@nk>n*)MUQY4gz5|o-8bVS=0AJr z&W|G!8@lGt*nl;eqKnnkcCxAMA#7Y+|5p~yB-ek-9?WzbK42+F)GmwBnhALHr`1Q_Bx>-}+BpgPY5n?p_DE6fj zh57O(Nj1p>PHv%H16;YuFm}Dq6%AitwACIJ5*sQ$ZWJY9PS7Yy^gidX>36Lay;|5i zzQwpGgHKocNkTp15MRkVf@;CiU}qo=cAj(HDTJ&yb9BzD$06|Ve_xsS`z4VFc;}Gs zSQHL)hN}*5-nGBDz1w|*zOVCIxh%@vmv``*L+^yI4|W=tJ3q$8rExj>5qDk;U&$KFB~q@WQlCeL z?@SOIm>*-ox<6qxYH-R?eG$_6p^+TG?>-PJh5^=#RMw%+i?|#(B`8#-RXWQA_uO51 z^(TL?dMRP{W0;k47`t-Qr1k}ERcWzS`h6q~5>U|Uz0b=t*WVQm95!~*fSc{c*^D4& zuiI{&&9R2jSDsRhiVl~t`_TKKmBsA%YH4538(5MIFMXub$TRj$d@Y1cquqyKp!cN& zPKEM}K-Z!7kOvnoZzynT-65l^GO^*kM3gMPox87K|2kSCq&*-Fy5fOO$2>ja3LdO_ z|I0gUptor9+}(E5G9)NEc%HZJC*buZT~+aAUFC7)9n9S~&{g3X=NI(f=_)uQ{h)kw zhw@>ISrh28@dMq38KYQlIWdD6y4-lJ=!Yw@(DszQKTEq3zSphdO zp$kPLC3ds%pF%@7f#U!FXz0DvT4<=${{Lk(^vgQz{~I*)emdp9Bn{mlqb5zz`>#zy zZ9E?a&!IF_-v2ApP-)lCp`i~F{U4{H>jv*cMbrT6nP|ECH*oWHZC=abkbe^!qEPw0 zp}>Qo@~1=PTSDbegvuWcl|LLRe=1atidr@%&HvHTf0kNj-NkacO=njs@*3#!gi4>> zm^dR#OPw)H^UN5oxn`sVoYz>^U#4zMyhcBr;=SiG_Fy=mzws`=W8!VA(eIS%0idENk}PD_d&o zH~PwZk;5;uexYE70$TvP=6B};lsnBo%*fSpW=zqtv26MLjM?6wiQTUm{`I~Y-}U}% zs)Sd1@5|v?nPk<@t4xX9&Dt8r)cez$csmEIw{9VkS0Q~-AsnfJZ3ssO41nYo{k)KEtzS>pUwb4s^}$ zuWGWk>s48pleOW7=S3-0YXthA4Q!om;c|9U2;q-6;ks02EXnsjy~bBl)#G00?DzNF zNZW+`PfM-6KYg1NR$1lnvU&RH;ojhj90IMEC?4g@3#on9Z7svSFLi~lzkGk~=@L{I ztB2Xm`mW`Eem?J^;)ku28TsD(Zl*%^r;n65!f5f+lyf7FU^I+Z>_9{2X(iUa{z{=obOL0t^3o27#A9eOcaK z^WHO@x0hbNTHf}p<@^-#?*iY*2%_`4D+*o@OqkW!YBSL|_p}?+CU`IsEl0#&|RjtkbEpD0W{s)cH zEzbH->BGT;>u(CraqkHEp9s%JFy&E$|4X0nJ~xVkvc8g0@ux;(abNg~M2;Y?f-X6y zi04?0=`l~%A{AT_P1gNSBwjr?|JcBLk zzhP9h2cvi88i7{BfB3-4!wu#H<8^0uN>{@N6ELNf(pcLd;v1oWG%h)+_sLJO9ZRt4 z8l$17)%#qRb6>araDpaNTTG*3x39GIz#Z)kof8gxn1ZdE!wv6DIAEqU-hiz^dMj`s zKk$_1uF#7QC#cTFad&>{;k6@;(!=5)D*+F0j+z8V;0nF!^(dO9D_^IEZz4seuYA+7 zO>iRpTLBaW{BO;&MpQ)oZ&{wG|4kt-uWyy!MxNu&iKwBqROBzhXe^{(61oE=LhuYDbM*GU_XL zFsAqFRZlvg7EDXSzt{U*@eU)f(zBVh{PpuUd$r&3 zWB%^r?*sn+%HKlG@3@Y?Uc#}nL+aqVSD7Tn{%&<4s(`G~PX8IKaZkmf1egA9POsK* z`D`}+3DH%`MoQJ01!`j-56(E>eH6#Rc1n9i84omX$!H=_AM3VHv;X=3@6$LEow2M z)@mj^L@RfdU0cwz{^r_#Wh8Dvc+QnEJMWj738=SWB(7PT9y8uQWic9b?PRsBK){E< z%?P3*kpqA&F%Q$C7?C>5us<#}u=bc=bxdmwyRHlpHO4?4!d?z`UOUaK--0cTYNcQUGpa!}_lGcUam@VsuS874-x*$srK^~E_+y); z&qO>L^C6YaTd8m1t&@K*me<94$m3%Eu}PVj#1@xW48op>CJrt%tc|?>*rP(nhsG?6 zA40{@!6K}Gvv~a#pfNKC&-?)`LuK-!t^Vx2(XE)+(LEY{yI_208e-7$wj=*o1(PYOm(vE5&+V=|jhk-O4`a{WymS*KwH_(`y)ypYEfjEUHZ`UcJqoP6RPFftBX|Y7VKLy#+-Rh z=Dimv)UB)GR*7vB)L+Hzf;d$$|20Ee)Ms6ZT}_GO&vR>n(2P~7VxZH^Qwg##P~{t1 zI_>Ax>-+5}+s39?0aawk7Gk#HquMSF5n~XG|LeT&#l}pr0*BbIk&N+|mG-<5OEZ{dhMx)=5RLr|8u_A?Kg0&Zl#xF``Bl81& z8ujWk-~5ftqClVC?2b_?H(T@#Uw@riZSSt3_o<;(3Fd&awACtXs_Q1kv&_VzD` zHM0dcBN{z}35i|SEM_6~fec?@{(QR##v;n-FgFl198Bz%rdwqjBb_rEvM81B4Mx`u zuXYujywhbgA)33BT^uHMJm&rX7kh65A60eck6%cF5rT;pTiRm17LcGoLtd2dq7evU zHHbytsu+f3!VD&vI4=+^FQI`gEh0mSL+;i?Z&w0-Gc{$HH_Z+-p4S68a zZulzI-aTUL_ja7w@Lhyvd1JFuja1-D>=VnPXvqp3!P=jHvA((it; z=g9DWttU{twSTmg(sNDE4(zafPvR1GcJ!GNWv_zG@=&!d2+&y&1mN;2?aSXzS2Uj* z!_vC$qbvGHrbbV}BFSW_^|pKOJ8{c0g9GE1E$_pjAe&Fo1_#)JEVUH7kfCYg;Q>8? z1HQ%|ZR_3qgo2UnfySdR9cX+7*Q>a`hwJ;eet_#WTtCEh4A<+p-uU%_#y4-qXp^jR ze8hoy!>9Ha<5Nu~P9sK2lSb3An0zYUvziRAslMrnHtePF$9q3GG+}hHx^v#}1M`Z8 z9hg^Kbzoiz0?Z93ufm$gwpmBZcRYy#aRb@+;9JkEQ;A}1DN+6|iA+P{lF%KnT>VR! z;`m3lVJ|RcZ(y_jmn;J{XP^&8i|wlZ1)J@{ z7=etE{_8@uR^HeCA}jBg%)A({oQ%PaE4;Jn#O!O?}%- z%l_Z9@9aB^<)Uyl%fE9Bp5t*I488j%4~M?imR$OFGV!zI=AR^+9>ZJR+y4SC;O5bL zXk>&u+UjH@-=-shdmA6SJN07kk1yHx>!KZp%eRMc@BYJOMNN;T_9dI1oDSSTx_3dZlLR+s~0NjKh3;;KeU}I<@re z@vn`4xv%!}@^5^=Nf^?U_x>N$g7Hpy?^F2loEQszQ2wPqpN=_9wk+aQKRm)3U`CyMbd-`B25 zJky7b7aRBT0I2Di)Y830hm%WpV*s?Y?~c)!P%KS0!Eb*Qqh&0_g-eV9P-@w^@_#(k z8+=OXD;_!Pc?^K|(Ex}Jhr;mSDJ8jp2S6iw8y~>{=ur%ScK2@HjR8=q@maj?-1y8u z)85|AdzGz!xb5KZy&!JKz?NC>HlD@fJ&CEXgqXy6C3q@zv}o_XlUI*|xZuTrvlt5% z?Zr??>_gIc7Ef(GLLW`y7QSK}bdbhDdyCGV!Ty>w4%!1>gk)ps=~p_=?)&l8ul#(} zFHt;=gHDb*vJi7)=q!wb8u#!x=#)MVIt0-g{RDLUjH3O_Q^LGmq!z0k>eO+7m43bTw33Fw0!$|+(5jdZ?g%`#%HkB8l&^3 zJs2{7wy)_}vgv7z(T}H^o-Y3e#QxIW;IkN)AE9yixRJBo04!f8SUxLY`K*#`*2m=? zPY-Ws7--tlyLpeYbuW#|O+dGc+oPamT1!hDUQ?et-w&gvK*8DnA1>@-2J? z8V?9Go-)w5o6xw~hQ?ovde4qVOm+!0icxt1(6}H68c&&{@~3hlkw@jf8kKk|8vu#7 z#i;yE9+jU+AC(`66NRm%#tus@eLU6pwbbS@ZOP&B>c@(}&#l)}kY>0ZN@{%Kz}%u? zmVKH#{J>n;rnx1`$>#T94+gH>Qnc>M=2Sx4_w$NvKmP!dK#w=Rjc$eELdfPg4w+0f zop>d996^(!H%DP4451-Sv2UR1SseTTQWD3|8P)IpXxq;Q@XVGfOHC!)Kl4>Fu%DO$s|S z9l)Z4v%_LVm{L!j!V6!+a9Hi3zA;tFrO(cK4H=KdhTT%s^b%>n!=sM$)!t0!K_s3{ zl71Llbf#xt70yP`t{!!2=csuIDvDt3i35%Oh!5TlLAw2+qT6TJZN3Zw)IYyxR(;~q z14UK0&sw!N_AA60>2LA8wgKgXqU()RE_y#Fyh&&-yM1dl7`e+KyIMBfmo^S^T5?cX)gxRtc4lCMNFhJ=Cy&bOU|U$3JwE8(s}Mn_6|Y=2hmCEPL%Kw2j=svZ5@5Z8a75DuugRrRg<seyB&GtgQTtrVe8=}|IjDcVP2i5J6z(#9UaFc7VQcXhhv)$NC=J)g&x=ICL94DD_%T6ClsUqzFS498dM zY{JxYMAnX%4P2%6jo(jDQjv`AXuzK`gd(ocyJIB&qG-t7YvaG$d$J*Z)wYv*Gfq-7 z04Z(;{iSBm-{Gm}Q-^Ar%0@Moy}J+mXHiv@9v*t@;!t55W6=g(XBLz-EElVjmub&l zi8g-wY_SNPO8&~+NYOke}(T@U$sm>KS}#Ceq;Aq+GxAzl9d>{?|-Oa!i24} z@oumNVwP#0;^Bcf3R+_;Xjw)<3vv`RtbF@laX}Mp1%2FB(CCbUenaESG>UL~Qcrvp z2Hc1UuPeceWC;7*@W(V#!bUyuOAu%Ri&xbQ)NekurD|YNarYIe5f9xl=k!i&98muC zVYehN>%R<#jmIMX%Idp^#pBFV?d{dR|Do%ElA`Vyn2MYk1R7Gk< zF%6V35dQ1b5m@KG*;n+9`Q)fqQrO?%zsXo09`!Or4d*-s-@&#h*m1DvFqz92Q>#uD zoq;L+Vc+aep~N+6Ij4!tp~#)NL|G^iKO@zJb_Ii z;Q#lHyBx0d>oBKpz|x*skX%uWx2TH-8faPHFzmO0y8Fs*PW_Nf`Rq@QdOx*TP}esO z=DT#%kFfV)cX4tBHYmITBR6>6vwn%feq~b9yZIe7K0dDRPO|CWg-w4?*z_cJMtU_~ zJP*%eUprpHRHl@F3A>(RgXjKhi9GDUSdm116{+|4{kUS^FDgcTci&Gcwl!*}(7|{< zSyA6r8vnt!l^%#7;)GSHs#JF|(g^^mmy6DTtH~;O1{mF-!PEwF6{sf`mhN~lj=pZv zuvz0svo{;ROufnP4((mkpr85f`9|PXVClpz^2ow(Ns+Ddr%DTp$?3tw*L}; z5iP;^<~2;E)o-TLYA#FNhAp4Rp(;ePe^|cby|6?mC^_==MW6oxR%mpkyczOiBp zz43ff%(>t=8k(0uJ02o3Cu8zuc=UMB=AYx0_n*gq_|W2E+h2_zeQ4Co(rEF_BkTXE zp#e-xX#M|Mzj^GI8I(JQC{)AAD^RrY)Gx$S8eHRtF2#eTGmn)2K^(0V5C6FT0?$QtZ;b4!CbE9t+ne{2-z0e!M`)JE()`hNT!*SPilXMc{;I`k=scW{p_6n zYnG$SO0``-qr&Jd@zF58#h1*U6TfQv-uTCj<8NM19k{-P4%^vx7ArYu-pTr{&vM*_ zoqn-t#&?0!1@)K2FYVn|+|XOEB;H-tunxN!(W#4o6-}BTxI1>;rP`OD_+X&_vc=jD z;W^@vl>^0?Oj((_1T^$tGa}V^&eXd4hAyy@t8jQXV%pz+D!msz`y1{BntbV8ma1Bg zIxrQtWZj%)S_&F~4mg8p#v#QG*obs?&E6T!!!YK@#K)7=q**1K@R=B?)j_xH;ye2j zt7+D2Lj6^Ip3pe$FMi59*L_xNK-GfNsEvKPdfE^FG3ZikA+v-WBfW_DkCJ1>^NEij zX$B`zaX1iXe-fveQB64B8r?v{!{TqeYMZw_4&w72mvZd zd=fmtbVg%oa_q@30$w=fiGH5CwXb$h{ikrY1IQn^Iks+H@$vyKT-${@(W|I%Y5yXo z^Cx(2)~~S|=Rf;y9gZa{58r@i=FoHHz1Y%VVDY+Q{n@p~v*p`ytQ|xH`{M6OUXGQ; zFoMaCb0djI-PpDTXW40g{{<-Kl?{uvN8tbx$HDGRnaZmK@uE)w=j zpJ`CayZ7I+jOW?6ZUlv=7A(`gN}VLI@@c3c9QXc}?HM3hfZY%XBnN4)UkIG(YtfW< z1u6fnecb=h-1`%i+FwDd*fsPt=*bKXjonk?z`1l+x&dTKH=jwA zJlAt-k)n;z)0b&cq-yWt8Ok2&`u9c!=QjYvv^3yk?BBo_>Hvyu3>#Qnyf}31pRhs7 zmr<+O^ap7$)}^UmYNKz0bd6B{`A#Ku;J#IO&-&mn`f>87b$S`gQoj`G+N-#QT~&s~ z0oTP?hyeS{Ppq52=i1#M;Cq;c36d6N=w58o($~0q zv34I8fWBlr_viH7SpB)b$aszp1`2)6cB3nWxc)9k|X(WRXM|LJlwN=n^m?Ob<{%f%&0&n8#o8D+x zc|vqIov3d*PLm|sa~SmPM?02l2dOwA;^*GIq!3zDSK$$C<*J`!f%P)0%2FNY zQZ45Oj^A_m`BG)Y$}eFvr{m0OTC=gdHC0ECfH0g(H}IEWG5lzV2xj(6HRuTF_cEOR z*L(ao^ft>a#jPp4+>I($olDMYO>%W)i%~Qn-TMwUe_MVIl<>ZeFa}tVB78wAuD6^7 zM1}PypAu8rbg~DD$+B~_%wkb#&CA+5J=ioJ3vSkr8CYK?)|;${FIlQB5D!}mZ)Pmn zwz+gXWG->Vp4m^pfdzg1LJ^#_b2(=-qjU}Bg(dJBzN44WLlIiK;oZs(j zd}%RK2dV~^ejlL{EH~`kd`^jf%3&nOt-dSivnT}yZqr-h}6V`;~? zqHy#fvA->TIjBC^Fo8(Gc&)#^f8DxaxHZrPqEnfbBja7N$p8=H~1S zskFMUM7w$>nZ9$2QU~teI|j>rn=0xT7H=+@wXk#xUWpt?;C!PpSTMXKN!#&nK7u8O z3zAjT9b;!TmuCO@CJT>BXPUR0diN#&t5ZG=_O zrHHZ2`Xx@o+Sl8SH6*`;hOZ(@k$qut|EmmPtTbYv^#(OsBUu9u049k2f=!rz9@Bt; z(|v!11wu`j13hPeOT!pmfD3~rtk9~^7GWJt3KKp0?bN=*`xom6)!=}dvg=zXltILj zl_^aRc)(UcbTQDv()h;HqOg3AB!j19Pa(9cpH{Q7nI!b5tM1a}leVygtvc{oQrR=? zwu*k7`~s$lgdmfxqFY)Bw+vhL6fZ>;wn}6ZAVRmqZ|z%L+A~v$-^>~SYXPvC)xOfZ zKBxUPt(K&K0G&NF;min3q@1~=G>$2!ij+dT2cEfPSo{Qb^~IOralBvLz^8<=)rHK^ z7Gq6!&O06-JEtYqaU91h)x8CS@WdnNUghM(8?k@Z1iG<@Z)_>kK8jx@^kV?w5FEi? z5eku|89@TRxdPDLwzaqi$y;%7ORTiNC=~;kPiX)7rtui-j#-H@@gVTNrDWEI;!P!5 zDJsH3ljB9HJ4=fW;jP&O9g;>e+`AETNmnLgrJ*AHT!Qq0_^@Ja(I`@0=al|WV6~Kn z<6TJ2V_P)b5@g^kb=2GcCx(&03OR*pEzuswhyvwlj{&*+L2wG>HGn*;jnyWxrTbIL zwi(Qs8NJ;VMTzRv!ZF+4Q%k<`ahmkFhW?grd+*cuoA_97_c#S2a{3Jz-NUyeca{wY zM)yIQXy>;_h)c)+16*n<#S6CAZL8-}Kb^W|96IllEPUuw(7$-#fw9^b-UEah&(Tmp z`vsmtDKoIb_>ZxHZcx+u>fn|zM4-)6!$|Cl4iKj{;hd!6)NQ4y+UiuY@QBZeF4Xp+_UQA-yR66j$ zxYUTnsauPSXw7sp)FSzNdlMsX$EbM6n_J()`l!Z%VFNH$Sh{%0rhmHco`)I{1zA_T zr{pk-Bv(;tNfz2^VYcfNSXa5hq`yq|Gq&r7-&2uZ}O& z+RexQPLy+xdE=|NF|a|;yi8lRA63f z{n>Z`1YKeLxEqB~E>Wx2%)~6lcv%$KU$6bw2+^4MWIXqV@namd^CkL)ddkmSQoK%C z0Wk*zPxO~)r>2`~0R7#68L-KSdl>g?_G&)>@JP8VCieFdkQ*xmd$DYORT)e>rYV+| z_1$}U8EeMG7@R-=7m~&y3)qLLSQx*0VWJkt(JsJILm=gU1L!NUkahjoCEA(OcnJ%u zCq&A_wv@M!VyGvQC8#Gs*nd|UnyGj5SWFDVUentGrM$%zVH$6X;b)>~8CGp!IPzyG zXy8WS{w~x00q}y73DG12q^|+@lMBcbOWjUyC6sFa!(vzoR$YRrvk7=ucWCaSxJl`@ zn-Hl3wBA6+E!Xb<0qL6_e23lCR^eA4|I&Vg?aC1VynfqFZ2HC{Fbi5Z9;>_I%e3cE zHe5VlZ$}CR;84!qt!3EpR9l4>rV`_5w_S1o_4(gZcm!X82Q1Uv&A&fRdTIOK#GRNsxO&S~ zz)n9AZhf1-u)HmmH(^ViK6*M8Ljm!fj!i~WBTuFH=-9q?T{rp zJWX4J=j`m-3H}h>_aDyL>)ZDQ}A zA`?tz{UzmJ-iEKUZY|!r3Bv}my0_Bc3kMgprxuW1?!)vhEZIA_Gk#$GxD=h1i`9b1 zwO9U!$|P(2iGikfaJWW&<2zgbW1vavZ9ENm)0C~x^J zrcApX+6ql&tepbTPOgGf0`fhZ$KkXr3ZBly!lIQcdp6S<68}InUxFCgz|{`33&#hf7X zjDKR=``1GI#IHzIjDKy`_o5@uG^oSMci^-F<;*R`ZJ61`s7ORidqH(#GhX)4TlaNV zHWmHrdb^=xxPWc%lOc|-Ag40^IlPlo-Mg`(C_1Hn<(T!8Qg@9@eXbPK-B*==Ju!h) z5VWNztODG+YXC2`s{L1s`(TVMN!uq_0)-70;7n2DAIBw%vAvxUC4nVd3O=HL5E{|? z9v&D#Z1iaJeX0Lgg?md={a9WDK}eK*6FLCF+53?LM{XW|zD&fgPy=n%gTq%aPC#Jc zg%T)2WjyZ^B7^&nLfE%WeCF((ih>PN$T`)zM|?1_i|&V-_v76Y?Xls2!3(9k zb|ce4#Fvp3{{#>8=U=ctKf`?fYyFGx{0jZ~L;U>FwC6)--(G~5(m7NxJk$)M@y+hB zP(R=AJ2yZzJb4`1C-z{xA*dw!;b{g=ormpj(w>-8)D)SaJ%V%TaN1&S`v0@{`Fr<-I!DwMoy z3{s!0#K%Mhb9bW^_&B@hCpQ_SC+o)H*TE7MpDVfS3HX+*tHLLj`mJJv9glLUZz#l$ z1|)C$G4XNN6nqukc9>X-GQSN#qKH}~94wiE&*CxoebsDyOY)P+x`p`8#ouEVU;F}r z;|o;$l`D{pR|tq5^YK*_e?;eYvhEJtJ6N(9pG%13tM10PBtMj_TaE8r@-VaHhnete zQ1Y&Ok@{p8J|+^cM-zj0(NBvVt@w4YB!thqx$Jg)OV)MclS}>kB7+^mEhI!IH=DIf58H=W%>X@{`HBr}3SO{}rT0NZ~n_!YfexuBVXt zqXNSq? zw{Y)Z$#Hysj!Qm)Z%KYAS$7KGxnzyxg7wiIOmitp-t`VrpH$u_PMjo8V3Kba{j@l7 z8aWP@oW{+ zqynG!aG7K9Ey)ih>r{N_l4qDD@2+S4MMczSiWr8lF)s4_L~jJzN?m=ubYieZRgH& z1EF`IXORUj`>v)uD<~m?1ei0+n!WT==#E>UkBdUBzqwQSW+i5_wKtH-$`N{OF48Xv z?LLR}M@UnDi%RdIyCtEW^wiUI_bIyDN_Wdbhv@EJy8DN8w_yhE4hua-B^;x>-E{X3 z$~!Fd6x}^Vch}I}8FaTO)IcSaejIo2pt}=9ZN+p~rMoxauAnibf)%-l6YCY^xHyAguhalGj$SvDNzqv25 zfRC)vED}@dqUE8x8CRdj>1CvL-;(@L zvTirNbIIGxlIL^DPom^q&mi^5z4(}@z+D)vAmYD^ep+JoHT;5CfX@(@{VcvE>ki?Q zOTFGKbvBoJJJCD(7?Qz`UxMBj@Kw-zSh-vmhL>>fV98N@hPlk|<6Dv+O4c36cP{xA zh?U?(EtmXD>`$D!@)VMxf2riR@YSGm+mRj=o}BXzl~i{Ep9f1ce6FMN`JrUpS^RG1 zqSu>6PvN5f1Vyv_pF@^ir}1&04vHsBe@%EW{F7z7=r>oYoh0kV;NHQKvG_dD2m0#9;aid)O4e24yJ$azU$j3i+JBbXKLg3SV=@6>1!pbC zWD4#bEUBVTF1Z%plKfDzt^wb<)=83l440OLUdD6ZT#W~I-ObP5i%;!vFT^v1 zOxOtld0wMD-ITDK5?(T%hVu9>B|Sn(e@sa$^kl%4t`!$aSrgvFF_m=fMG9w`dFL@6Ok`A16W)*sOm zdMM#fkRT8mDrNH6zb+2_J3aas>AW~S`Y07D{uhUSKxw-vZ3WT{ofj%bU+Ma^IMf1Z z`Q}2>&b9RXQ_Mz`Fl=3MsFl)IQ`%Vj^F1ODG%j@RUaDgT)p2?op6{~KhK2S~+G0vO zMrkXIG}6`kDJ?{4&r({0l{PH&0;Tm(+7n1K=r+b@p(>G=T3Hf$p7JV0W1Px)mYK>N zCWI)v+IxK86zo-bEEimM9OLR@Qbb>sRYTuzFv#B~#{Ww=^#MR7fh>z{EQ!1V^MpX2%fSJ?~Y$~aupaLvWF2-gZ+t+>|XdIZor^_aGl0A0z4aw zi~cPHkBomkm_ONzOZlfpMaA{V*Bh1HxE6l{e{t>oW}~wD*+%6FT*q;({#V??W&9g= z?R@3V*7-_s_k88XZ_HOZPS00<6rFD*D}VlAqw?>_Bl}lX@xWrbPtJY_*JJ-&t~~Zs zxiYa;QPfW>N_)67Na@YZ;m&Zpxh>Jz(%j6y*F*y?LH_;){2qUkx&UeMaHLah4YuK_ zRy7b;>2Y;p>r8cGOr1R*9t8bc5Dj*BtMk;w(O_3J(h`itB2jhy^l5d|rmOQJT^pm} zwV}9LId8JMW~0iPmj|Ljb$We$jXG7WuBxh@HgaC1qbuBwO73iltLhE7JH48UZ*E?& zbkV%#J8oOlsMATm@4oHMMf{V}Z@WVz;k%hlX(O6iy1IzIiLr?>@%JlmZF3^TiO$?K_%QK62fgFJs6EfqR1EQYz&qRX*%+KdSZ3!%!yU{$EQK#-M2OA^nQ9`O-x0)IDo>ADtAXBYDc0aq;@4@p*4Y)`|;eJ zi8z(j5$uRWH{$p5Nc4VnO`@$W7*!+dgHiBc18yrDB=^F9%A=PR>w=J= zPt=Y;OEjVq=hZ-TEzuhQ_nBNlOQ3Tjr6f9no$;9UggxWj#M+taZSC#BwSjiEx!G2x zqBL>&Oc`V)kVY@JHNE^cNF0+yw3_KUcGNaV79=3+erq@yY>7vrVM>J@BU@*nBdE$4 zVlTHd7>h$x$Adeucpx6+HY&;@al0kbK{ph|Xc}u4b}!70!wUGb1Q z2fD<{*M*jL#zVnaFs4qboSY-Km7mJJKNwdh-LooZ-g$w}&In-873?%biP^zjhc@q)RBff3k)#EI)lO1n1v_s zpfetfc7g&{OxLguP&WjaXhSyQBol-a2v!0-jdcZE!fj#nTs)!*LApj=1nwka!PaS* zazp;M;0A~6in6p52nJ}VkYG1+VmufZk4D;saexMjM1>AAcs3ra?EoRrVXUd<+4FPr zHiY9LQ>g4BqAZC=1D$KpInYr7R2x+*C$>(TtOnZXyO7Q7Jlun37W4+he(e-O0ZMCS z*rC02f7-NZIxA+1JcfRaZ|ovSvSQpbYI)LJqa7Unhvfk&wL3TcYCdLHP zZ-bUVnW!4Qq^@a?wA@d2RablA&aOl}O*k6wTtJ1JGPRWYy(8QSscVJsMWLj)9ilrc zCks4GQ9C0lx4`Uk)ScO0gI2w%9c!pqU58O#QRWmijU_rb)5}7=v5lSaK)0wKb=h!o zufd%;pbDbU4z&y7g_t0#GB*HSqW6W4U9&(+hYUj$0a7)fH<=y|7%Wwq!m+M)=;c;* z(#?}p2+*XNlcuOJAnU`CL`?KLv>Zel`W)pYI(0SFs&DAVhr_x=RX&0Nkn7e^+Da5Fh9fW#=#U4<(2bwcMkfBeowY&WM|0KGAK(t4TYt5 z3&@U!NgtX#7%x&XyB}B+j#Op>+CGIk8;^nMkYM3xaeE@L*XUKVHEI5&aIAn%wJi{C zPekDhjAz}a3M)oU4x$GVBp^cnkbUY1Y-H56MF@84c*Aewv_vefu3>X-g6W=Eyfxgp zO1ZacVubpGG)yHNBJwtkw$gpIEgI<%mSiH}qx;1ZW8|}nG~pqT?@9NdZYbaeJ3%}* zA0S71ri%OQ>*4Q$0L%*h!b9#P*>2SR&NYw`lAIP(LKS88%Zv~*Mam|LKcoQ7PYw`U)T$^y+ z45#vXID=E+6sq?%DC+J8@Jm&?{=PxEp>Do;DXSaMcz@RvmHMDkiG>2K+Rjb*k+wwN81XK{%IyVKAn`kx}8fwN8z6wv!3g1qY>00$&{J zvy~A50T`Q@B&~)nAd)(CXTQAMGs{CI^qldV zzC*7@qOGE8!o%_J%vHKJH7Ki-b6sI!HS)?ZbM#;4DidSP(O{fL9}4lV+2nUKxQlUu z;nxSEQD_t9cr-yw5d9DeK=lw-5*B#a&IG&Rv9xbgXxtnO#F$59f4Cf-i)?#^9wVEU zS;I^kS+KiBnqmri1Ueeuh&R!2cXPZ0BV5C8gOkvO5gd&-&|xN>M%O7~kU-DzEh|SP zI)!?l5)5Q9XiY{iX2^J_7b+B80OHX(6`pV~8g5a6s{p$mf-d$y&2pHq)r4TPAV3Lt z%w4ul7npPF9ZT*|r%#(+1s2+5f;kAYiHsQjA)l>iMlkA|Mpag#kJgh&)A%;r8N)y@ z+!6-6tZqwZ96Fd-M)Wd|GutAsYm(?+I~g%5XHB@Zl?Ned4asVIEYQ)_4(-Fu;;P}V zh#|juORa?G2LwWKsXSmKD+fa+lv=Qrh9Ut=<&dwy>Ih|v2Z#gUA>^oQ?_5mQHYj_0 z+{qEikW`lR@>YL)u0mJOHuvSpES_RS9@4D#%Tz|b5LKT9I_vmR7~}(3Ba{YD}-?;%{?!Y zXm4eE6b4R!Unm%Y8q^eza%p^%tC3WfJ_LeS+@>o5A$&lOAe&PV<6=7&=SGmu%6g9Z z#j1}C9V5$Z2l9Vz;S#e7gSBw75N-;t4Z?cdktcl(M%kis;PS;_NFPWbSYe1x4eJ0q zO%o^Dl(B>&ogPsnI>*S5c3Wh@Nz>`do6pQJY2rk75inv1M%P33pcSB>?-WB#?uuxz zoxL`U){Vz3yv1N(15prxUKJ`-f(ML&-1fVqGU|8ww@l!YY0yz(&;ycf{1bYDLmSkI z!FD6UBg(n0jkQTzI12w+FOBk{4ERc-K~sdnfz?LC3;-Byjj0=g?d=9evS>)_6B;Dw zsL>Ic-A5KTt-h2z*W49}#S!;z!LVIePVxn_V5(EOCK7?w?nIMUuWfIh*Bq-G1FQ!U0fel>@M_d(WCL8cbzm@|uO-r+=;+jMpj9fn0Mr*< zP&5EGG-rB=2&^Lb70X)>hE&sQt1u#`a9!&Zt_`LNqcnJz`Rjq(L+*i58~i8yKu?0e zpdLreY#W!GPCA&r0Ac_66n8`)i1=gXbFs_^nFnZi+S6%2P!@V3$iZKzr{-Il=9Ak< z$^b&YKG-a30+T86b8}^hhI}CUim|oeG)zJc8kN<8>`7K%!g~|LT(p^jc|4p}R|n$o z>DDCTKrHHCjWNhZ`1dsY0L{XBK(<XoN(qipoI&qrTMrlj zgOWClv}#NNDR!J#{I)>~`Vz_wu!3zP+iLbRwTkN#K_PC4?KwPRJh?jD$wha@q2V}o zyCz6uO+qV`v3h+Z4CQBz6il1Jz%p-BR%`6c^@Rd7KJT1L1pvoTiXf7Lw=`Y?_>pMb zhWZwh754E17h+M0^4DP4em{#8R}PQ_VWH9X0Hgx(KT?=#3|@6hNP(!w!<`8Vx9L)m znH_Cw4a268ZkJ}t=t$%jt(YXF802%vw1{Jo-I0cxiI#K+68Djqdl-D*skbqFexhAZH|SKYSuY~aiFan zGb-CcPOm7ZH9IRH)&?*qOCW6tQp~vQ9bPfSTIn@8q+b*A* z7io_~(;g%_%uty*>a;&=m`)Jx{%nSvRIMguYaR z7~!?V6;=Zj_ZJ$TicyRZ1oMW(86JY+Q&9WKz2S*ct5nt#vLHt$P6tzdq>JV;FpA0$ z3@Ve>K0F8_MStp!ir%3Hy_64nGd=O9IVue%v+mCZ3UHsx!(TBt=9nbHWcvM#qQt;K zo@NYTNZFt`MISc6S27~Tti=WSpW*L%Zc*hRP)r;P&bEGSFFNRGe-bsjY##>1zZXPN_Bp_p|?O#p~o68`6{42~^uP><{r zD`}Ku(uERrl*9MZWx2DJzhJCSV?-mJ2Y6d-L33LeLP4Bi>V`0^ju?gJ3^s_4p$IF& zGBFBC$j~lglR8})Bg^zyiGc%AEz|%2s0TS>mW~&E!)t5&Z#aI^x}3?luERy^W@s%A z?Q?SjE?P@N%%-(9gy|YwwYYA?H3L^YF8W7ncV^+DbvhKQx0hv;B0T>fOlgL4)J-1rAxFeB^fMYKxo>j?*oA1dX+2qfeVi|PLQ-C)$SUN* zw!_I3d7)cbc~-KM2#05CYZ!Kgd=025&V#sw2+SJlb+XX6Y2KzePT-;G%=A$o95CZq zH3VIOg(NgDB^+CX$gtwWv{7(r%)BBSkMzj@GW<8AV&*={g<+3*H4cvwboX^l5csCp z*hZds&&bL&3vtGn(lFL2%=k)nd@hFjvOEjml*Tg?^!)bcIiGn0IHeVfVe|l2*%0m2 zaU?cY1V$J|SOJ($V<2P8i6Sz~z~g2{?oDH)WCN3B5s?e|DN)GrQNO17Tv4nE|_KlP=bKGoZodj1y6X#i<(&P+B%!RRsAN11<~J{I6n0NI-^EdPt6D~V_1T#@0^ z6@o$|F&_Bqp)4_DldF74Q4C=LEF=RkSyyDZFOGiwBnmY|X=oen#H^Vatmh~X3JM@7 zYKssk=E#H8g#7_(ryj*idjjPmU_woVk7FxI+*d!Nnus-O7lup-A0b88t&m8R;imq~ zaf2S!aP=&K5OFc|Bt|~80xE(*NYEBc(dXAqwn4lp=tb>A+}dQ9sFQqi#9hqpMCtg2 z@S^TH8m-X-YLnV9-kRizPr_CZirB}LD;pE57=f;Bk6?9@5HKhX8X=&Y&2hgO3Bi&R zQb6HOjQI%~2C1A~q6Gx>gaLzUmz2nw1#_j!YA~mu1%mfd9Te>7iW^3YO%h^_*|&tv zw4mP+h$4&(t}rt@v0g3{Py*82Vj5(!I&*qH9r#9&jbxR_s7uY^QHHU|T_!(w3sz3B zK7?qXk92Y;srLsrVuh_WEt1je;#u;0?6wV52`tbT69pO806sBNg|5oTr_&0(8V>+a zhQ1`Z(0!FIm{0JPJPKpMiG5NiV0jnhj=|9cjIj98%8hVN%l!~2o|8toWJ`F7oxY$( zC&AJmBIu`dfFLaRW1*vw16dsQJS;lW^5{W63i$DTYJ({tmH|Uk+Ynd6Y6zYHr;)3X z%a)(PL4Fax<6xDe-?zevt&t$Ft`+MH@S;OJBE&l58Ix#X5KXy+Cl{f0jQO6ohcLl0 zJYn=%!00u5d$Z`I@x4`P8gDo+rCS4j*lMeZl#T~7w1>eo(H`m`V+p6e2+_>2Celjl z?89wSZ81AzAZaSqtob!P?ih|WbL5rBaMryx)D{m#6Jm@f?%T?@ytB*-40Ek;&=yP- z1KP}N);ymG&535h!tm-*cB%z5ltxT07>|!jlRG*K7_z@V5sHyIt z=+kt1XTymUZUwZ#DpgVL!PQBFMOx5H^Ge_|StI;WVjU60_|R`=95r+113eDWX2pX1 zm6c|X1=hqyVue^G1)Tx_0tN~c2c>(sYeJbb@h#m{sg>c*$wtgHy0&WaWc`s!9Z!|E ze$hj#YcNd-9f-A7u*3Y!WIUEpJ>neIE^DW(dO;4Ai(GE&u5n*?jjOtm%Wd7Y?(42~ zRX1|EsvCmhvTEeaUo&TNSFwlQ2ISpzx1P;)^=>dN$Y9yX|u-*F~r6+2qwj z*hpKX%YRE`@Cu;Yl73S?7|J20D+aZa7m@~IP=2Nsh)q^2%^xVm%$rk*Ohq|H^jWBt zO1x)yW7UoIH`Go>X@-7@p|HU#7kR@Nhy`mGmp15TxrH&KIA^nJ)Iv6kUhW)ZZ@Co@ zmX4gwsx4@B+FG1bV%j5X)of#Yy(KE$5SuJx9eV)F3A1mbL$k78 zmtK@1fuK#&`z)3P7EMXhS*S8w&Np*6oRhQK&3DtA&9@5HYQK^zZ*>h;D5Uo{sI5^Q zTMent>}`H1tJO7X!CLKCu;s0;m9@Ioxz$h#l2)^D+aL}`)cS3;RPNi`Go+q|A1=MG zHH% zTowez*NBW+*?h>A)r53VORLS6D$eFxsO*)ysa^_52^XaKvN`Tm zqI7cQrKbs$oO`(*%+!N^mYEx;uwNjDQ&q-IvjPiMDvF!H4HkD!*ndMO~Y9=kq=3CZeM zAM!-xN~!QoJ|4{MFF*2B=<#q)dBU*Qtvq2Y48&wLFCC5<-G{+4p)BieE_o7l5PCAX znA<+VF}DY}rH&uO4zF4-m96+%|e>rIf{&#YD|Pe!$pCgpSbm}p&?-Bd3{au(}{ zQl5xcQYw6tFK1gGe-Hji=DY^RS?4Fdn#BNn2Z-TNw!~%dEc+2e@v<13olDZS*_pCX zn^AdsSLqa!`OC_eCe|XOgaTQ4x#NbCS|qx_@a)mi^nfjB4w>;ZU+l`a&uF=wr&OOr zh30!AUw?A35@u#q?X5QjwfQ?USM}+A$+?EKD+}*dI(LlByUh25i>@SBE~A(%PG&3& zFmY*rE~EEFpgz0gG`U14NvoF-Fr-~sc#p=;8GO%Rj?A&i_k@eCBy*lojHGJMQYmI1 zvP;fxm85zJ0R`+z-I!*q6TtgkM6FHpvH=h+aJf)uV>4}}*K9()veN5v0eD;#KD2ke zutVfEaRAYnel+Vc60)L)(bxleS{l<0yC%v@XLWjA#Ex9mNz*8hNkrngY@Za-82+bY z!kpMKYTy+OgSCDpSIp&FwjL11!ie?B*K3Ftq;-I>3I>}Ea?P5I1RMYPi5%?bG;-W^ zMrA%`bhMPg=3|nM84~7uvR5Wcaxfq2-4FA{5ZpER!QdJ-H}gdlLdtxrqKkw1o-9m0 z=0hR-VZInFdSQO81M|h$QObO)q6@@)spijC{FX|`LN8+x*hZ7Jrn<4Ec8gT;S!w7$ zGpA8V)GP$sr`jz5PsQG(KL_r}bheX$wwI-Ac&UO8PMtw(T5K9gf$=W{Ko;#a##L4&{=(1CmqcFS=ZPvXJ z`7;favO0p1dAT_qO)5r!U%XmULBwR@k6cCh54oi!XvexDbifS^OZ3OTz zduCREFM3s3jt43cWKf<#J0NC@EVj`~ayI*N$540+#&gzV2Dh;{NSB!^kv2|;z-2DL z0DJYt6t*QYc4^DWasyLbvg@jC>m#hHZ8xP=lLQ*oQEwaH)2lXCMH#74?pf+ko7N`7 zFZwuJYpWJp_1>saO{FbM%-L1&EliGNsqo)-mCPKZ0o1mf$wGl$SU+RSx-|r*(JbD z%B*}knJq)nn+>qY;BVO_!4=9^5*ZEM4@fr~1rM-i(~_U1>;}j<$_e=y%GnCRPcCRM z?DS-X%^t2a9Wxu6Knq6YKH14@#j^m)MY>`qLIv41dxj_1HyCz$GFN%oiE(yzqg


    sH%(;g(=HbAh^dwVHQ@y3oE3Z)*0!}jT4A1RNK4* zI%nJXjSq*maeCgi)u`BfurU4RU0!mwjo1G>w2jmAwhi)DsJ401f8l=K({7=>eb)*%H2RmqhOYh2cTS0 z;Tl*th>G1ka`vA{&fmB~83jgy=!?7|Yk?XEPplxSg&|(Jo+}(Q3)FLkG6)H9+hxa5 zRwun_q~}7Vk?ssj&Q+L>O8^9JMUL}2wvGy;3^|);WXRJ#&Q`bvy0r?_Ku4=!W^iht z3#%Z?DO>~HiXPSLXcf#1P7UM|^7mlD#E;P6R{j_{4vNzdu$=AF1vr263S}1<3m%&1 z4A4A=!DxQ|<`rtNz=-nDJZE?ota-k{X$F?;ais!mJB4$>+kwM1AsB z&ys}=wrmk7r`p}>ToemLyQv+BbX~h!g^1b#I5)KeFga@15s{9Ei+(y!f1S)W{UYKd zxMB4$O)$vk{5V_I!<|8F*JGQ`oN#+n1P{+EE&KP zL{CP|;GQRS=3Fn8rn;=w6F%}*TjRD`PePlw+FE(FdZ(walL22cH-H+lez#%zeD=GW zYKNfT-BddS{hnQ|yx)UsqrqUNhV)d&Mti*i5syYkMgGmDp?*ill#;*2)X*jJlkpi&Puswgu86&1kc=^xVDx zybILYn!}GcwnlJB&CQ{#EieU(TCvB!IVho84O|GlK3Epjs7@?GYEBj*O~NAk^5<+G z@ixR}1G0MjBIQx7Bae`plSfFC@yNaeH=9YkX6ynmi8Y8_e?;PgRvoPE^lr^qm9Far z3b*H1AKBK!U=V6R0fo>N4z#j(i<(4Z9PDqJz;cY|JzLPbK&d+59jdbTGhz*11*xu-Kiw%0xyXPYpIx0#` zaXHBx*QolX)w?^ClU5hdAX;mE)9QBYD|(N6Oirws;bK66=)XMFUNkrmJ(!2uiv|g_ zxItgoEJuQw;bK5S{-qcflSUwF9j%3#AwO@2UMJAppd%8@4Ed?8_N~F(S_Yn|&A0sF zqR|OF@0yR=!s>)dkt?+^|l1y_FMPw#(^hcoZREkmf&jcQM;-(;Hsm5au|?nI9$)sxKrG zTvk3bP;goK&|pDYxekW(IDT88g%0H25Qw%Cz6S-1MLJATj2VEkUd6f1F?A6R@3TZK z$7Uq97?nVnZ6wVFSZKSA=EO2zOeIZZ_&L;AQ?@jkgVl~Ca~E-tR@V^gVDP~ zS=+$#B%~K%fUjSOS?!xFMaCtj{lw&l#Cq}+rF&BKfU?2ctUl)S{L?Hos!viq!OfYg zu4gTLlIm6)@&MUsip9*3pRd(^`RZ1I5iO1wFf-&QcE~|Mv=nX{bBJLe#;6XEH8bSr z?2yAi3}*8Xd$H&OG3w1jY(cewVJy=9Mw`88yoi=U**7<5CSA-{!{@TC3t~2W(t3gH zhEHlQkm2x2ty>%v*mC%!)-4iD%aF^5G&8s|9X_dbi-ZE(4xiMzMM8m%hZ}0ydf3Jp z2*}Un*_{RLkwBbWZ`-h&V*oDwcbdC_hDZ5g{BO=7+lG-MreK7K!__!e#F$~`Mrn!@I1{0(!a`)m1amS z+=(N_VnOt>4JZiOiC)THvy?uHql{{YPMUF~hn2J(v9o)JuJB_yV zk3<7eyuG6bu3~hyM@O(T-W<0bSD~K`l73){xM}7^%L378U}H0uUZj0Bu-ai?LP5B% zgzA&to2&|HFb^dW6+0JC4YaM%;0mfF74SWq1f{pws@jaP=3!DpwaHf(Y(j1@DoeO| zHG^~eve_qV9kCQl9YX$br{&@wnrBt+nu9f-I9O9S4$1&XT(vbKtxuhMNQS^%H2?&L zT%^lU0}c~1yU#TTYdvwWmN@9#7I$c4UYXPm0jr$BR_ljVb)HyNCj}ecX3P>{EFLQq zOTCvQgBjg}Ml1xOvf_pIDMXW*P+M1~;mD8@vTeDA1_xc3Fq9mT!S>U3aG8))d(p(J zEaNQv7Z=94W>Cf%L7DSloU?FHAP~#2A?|s_25d)`1*dxj0Ql;RvpV z8~niQMo;j%Q3|giR8s!>M+PL~=MX9>e}u|9nF+OZ6fbK)b`X%|Ih}V!<*(ah z_+slKX_AkTv8;H1gv#)xo56x9DjBs5x?IjWb-q=*YfUxX+}qk6!f=X|q&tRCR|!e; zs;k6P>E@GFfP{D-Sdta*k5Czwm{4114$`H{RYh)H1yJ~blDDY!bce8YmI@m}fC=_| z2mt1f&|JOG+>-}NzGgS3dz;=scA4G7v8Cro&iz*92r~&Bg zp7r4<$h5EE>G|wMf71S;?nP=c{gVi2fx1z!=fl~JjPb&-MxZ&}(-!v%A&f>hTFye6 zeX&osIk>a-NnQC=UXAK~Do?Bfaxs-xJE*BVELoOKFtoova$}DEU(TXlQp<-$Yc#>9Wq%lmE4)CtO%Y%CN~_fa>MZ| zHyp2W!|^IN9ItZ2@hUeQuX4ljDhbE)tbpq0z zB`dygJ`od|%gHyCu&IgA-#L}Btq@bN@?fE1x&?fx_7^veRfCjW=Bp1OBK+AqS(gnl zBK#3569SKj;IN?ql$u5P@9BHJH}EI901G( z3SY|urd!5VT6ZS$hID~|OljLS>*}LfvZ$j=tprg|8X<>6U}<3KT;+M=#@$KVHi~LHd0N&4)iiWld&6 z-GhSNyj-C0HQioq4OHBK0@;Vq(G+GmeZU~N<~6V)0|jg4!bE^%#rq>v)?_BsJt)}C z%K-}Xmk&p?+8W}z0>zNdkjpqE?tKVA;g3*RlRbih-Mn0&K>6NhBCD<7h$~RY=ei5z zQ^+{vkJq_Gc?iviKSE_qCY?i;PCBV=^u9IvU^maWEjrN*A)tG$a$FBdtF5q_D^LvS z^t6ma{!FzD6fA&4XFmK9Dr>SwO~GznE>NH>6I|{=VFhGefkHmfJcOFUAFpMgU;+Fv zfWn)m5UVP4fxBAV4h8qt)Ajkx!FpP~~EemAV2(fg+Pz!JHfG42NRmmf{x zEuvXHq!CRSC<>=3sPrN9Df|&CYcdmR>rAN%w?N?((L{gw0fo1SX7!LpG-VtjUFv-{ zOgxo7xGkVhAuHY=p|U1>^C`qCL_>jOI-0&Bn$_0CvlNh-l?-V_Q^p~2&#U>6_1X}F z!XKfsCVK>hQ$!Qp>qk>~i)dC4X+%@TA%DDPGJYFV!hv8M1xs05tbkP_O_N zW=JY4-XEbdP%xpk&dj4JoFba&FF&C07SXIZ?-5OZyq5JE@qY--hd)APpkP96otXy| zP7zJ?mmg4gi)hx!Bbr0_mP9VDNk;5gl~$lmmsKioW_bCgNyqxgp{$imiL9xtP0Uzj z8f=`M@`CIe(*PX!0h_l-X^lKmDu3DeJVQ{ZfNV5e5C{s8WWA{1<248w@N+>BaZv)N zbTY;}24yuflP&ZMl$%pHfQMDP>%eS{x4>_r<+zh+i1AA>eB3 z?m;R%na_|1Y`y}%HQoZg$SwohMXm72>nO;JbY37xs%PkG&1LBsf|kk|BnE{Tr3Xm! zV9-~5xyD<38QCui3^FS+-loWqyv-ui%4ZQSYU_GIAP6&a{vk*^3KkH9LZ;Id9&6g%7$n2$>uu7aRz7JV1Do4>K2{6KTn};2 z`}&_;WequOy^|_4f<*pMikJYqcUoo2a;Rw)GUJ_AnXCy~ErCk&UyR|M^D&Q*73+EV z=CHN-H;0`(SwEjS>v-na1JS`8=B=Nh99@g13bj$0`#kSx>;aow&(8pMBk4KY5z!tF z@;1)#cCMUrxvtyo3En6br|IOlR*x7(w;Q7X3Gby0V%nxk&8ozLsG;UO08Y|H41 zHIYcW-m6`KXrLn)$BEwJ2D;3Qc!oQTjeNTuQ9#A1b8z^4*1D6xnwW(Q6k^+nR3NPK z`r8&QU@gTkv%zHzb+1bzDXW@?M$VH#B;RwOk<*z()saq5*ve05O(ruz2QZnNmz-|V z=}fFAFy<$=RzfU5>_}{_nnA3MVn%SK9lxD{&hvoZYk*%vb$0`()^~zuCIN(uLW9#Y z1qFwlX9^0AC1(nB?WQO;e6$BU*TzE`{lm(|W&e0Gb!oU3np$G&yj0IRCa=yHM3PaL zXxY{X?izUIqB4H6g3YwY9*J~e6fZoHF05xEh?L_n7P~u?t*X3g3hqAv-Ar3-Kn1S8 zj%}Gw#)ea!odJQgpEOoL85u%D4|-B5&ZIJ6@{?NQmsC%>$C*@yO@2~q{gUd|RD_Kl zHWzATcw=UU{KQuKCDttjh!$Nb$l+>c$WQE$gMet!l|yb~FBTXi^1;B&ke{II6YEYJ2vd>fuLwKQ_&_4SgRsGjd7RZ+HH{_nHv|x|`MzA_ z#cVBn(t1J6g-=>9kiGCp?FBLzKB;w!g92L&pVYcV0_iOl_gtQXnc-s42SiK(ZH7p)1y0khraHVh>YsxKrG zTvk3bP;goK&|pDYxuF%(;$Izscr@HSFVfM~lxUAntNsUM#NBUvu#Fr>OuP)03WkU+686W<_=g9q|f{sk5gneecqcN zm(@fBWM?(n0ODe?@Y+u7v+9~sn9jja%8$FFl(K?SGrVIo|3SW;-N|kx0G(Ci)X6n! z&Q7jTWt~jj>A#n2)brTOu1S@4vwKp#cQXr>9gwa`<%#r6*>O*5*8IJJvuxR+tX>f5 zRxJXNwN8kv&5g)fIU+X<3X-+w6_T!Lm15F8t%bm(Yg(nCbWf{yP-e@IYg+Xsdg;c; zJ*`=bN^%PjW%VLJ)!iPHIx;&65hdqT?3DO>)h;n&*}jH%F>-IgyFEB+HQkP`8YSoK zZc3DO_n@?9_4(AAZYh=OO!t&}@9Zo+SLFp5N4Td|3QhO4dWWX#4zKm1hmhH+!znqZ9->59hr5*-X?MGqnF4gT zTS}#!?VeKao&Dj_L%u1M`fcucI)r{(jTeoH%uWJC$vFjx5@iD9UJFS@$h{USfC#y# zRVqa8X)S;dxu;cX&fU{Ggyy`~%b)_8oxn-SIl)PZQgFIeno?}Kk8BhIn{G*!Leo8| zg@C48Ql-drPpWrhW+`~rp)IL~cTZ};G(5)a8S(b+jQFe1=@)sV-JGZcER1No)P_$Jq_1|w=5T`x03escZd79_YeXGBf4 zqfT%MT`tErcfEn30FnlBed;joKM$f-TOjVb1p^Nz@q)H(JzqyS^X=9PIGzk+J(Mwp z%^qLcPYA`uGoJKGs#`EK1|6JUBi&h12qgO?)vZ=TC5}qXNY6_uQ0$Xbw;BzkI4d-l z;SVmyFR`8=;H1vn6AN|ble3;cP#9u;!oa;lmd78{lbzv8nSAk-oN~8t<-ATzH8bQP z)<0gok0BhC78geC$xp6N#8M4zA?DlgI11)=u5 zL7^bj`qWs zCbIb^*R2MlY8+iJGedrI{o>Yx1|w>m-7lBW<#K#;*Bcld(V$CWe(w6zVcdTnM6H11 zNmm9!I-WdV^OJ%vnVXcDPBA8nbAf^tU{Yot50jGxcjGE%?=X_;Gx z5|lf>vTda2YMDz(<6;WbwDSc=_f7lI;n9853Ij;4&!q_yw5@jr+Ts zlVE20yiKH)wCdouVUW9;rkQXa+lXuvt@iOyKkX;$&WmIfpg%%AX)K3W2NXFwxy~%* zT>c34B-_q}vd@~A&|1|Wp`Kh+rxCbIn6e4=N2;gJFAS+QKDp|t`wK&=I{>im%GejY zBhs3=EjV|kOIJ}9JullZB$9|5`-X=t6J+ixZluMtydb;pgd*%)f{5DU(L`s9rQEPN zwPP7!o8FIGSq)DqD;hD?UbOWck5WY$+MXcomRAh_oUG#1ut8ti<|>>dVU*o9%;1!G z#08`5Ww_@Q7w?r(Ze>_S>GF3@7*m{@lTkIQj8S$kE}K($#tofdrc`r0CemDA4v^AHIid4~~7q%~8B9*ZsWPQNgGd z(*~OQft3Th`iAO|naAG>6WdZS8$Z3Sjx76hHuBSF+&~up#(LAtJ8{x(y#3jEqkrs! zD0`_b{#*hVz#Iyf;6nw>f_n?@A(^jg2_%I={A~pzIW&d#Wj<73ETo&`9*6mAwd3%& z7=QvPzsm>|94Lrm<`R9bY83eU@E}j_H&WCx-ES0e%t8B&&1TfxzUR2$Z1YB$d#I;b zn-AGsM?GzW>^Y8xG)Jw_jqN#+rVn7yQp2U`-pHFm84-+T3a@yJzSz}|n&FwL7AmIrZq_UsM8`k9M1YUTm_NMtYWP z%EH#a7t5ep8SXTu7V{6rE)KcWoo0yzb&yN(P%f8Iq*j_^pNmH(UD3@_c~Qw@7TM_n zsq@=L_iw8#!kx`n=hhjCb_CkP4+g2pwlOO6M6kg&O4a#dTM1wZEHBv9{YZyZBH~mj zWAGv#qG4D@{TPk7T|Y)y#d1NX+BuimT5B}oM1k9dStwh7y(|v}HL6Dn+^%;51^R1X zc_^rLra%BBZT(0*qi6U4b(hExhpp#DhRAk}i%#)!2s`J^4-ApbZRKt|gi3YMBO;r$ za$Q!lU1?^>&)I5qs8JyLkJX5rwPuF=)YkZ>)-4W*7+v&pQ+v@Mf%kZET5WG; z$j{rMM}pY5#Q_OshWykHJral*M5&u8@FzCg4qAUfwyLc{L~IT5{MYx>5@yC znIS*5LyrU^#t{i-hWymJM1tIZ!1DKCba6D&nrO*%?C7Xk!OFZIKU!0*CUjR*Vw0=Y z^{AdBrD-p0@M*Xm#&fobB8-(KN6dBLwmAbqo0(KrVW^NcnZcCcm{emxkw9|RJH<2@ z)j{H;PV|V&I_)nX+w07nUg+RNqR2MlBHp+@e}uvBvjcGUh^z}JcI~?l_~Z#6ec-xM zStrOV9egLaHS{dgemeo%7f3Lf>l7V#lE8=P_~`|jBy-jGvTl&qI@oT&L5u}bMtBk5 z5dTbNM5jHwL@~FU(D!L_G33?hDI!K>Ww@W+S zwJwtNx?C68w!Z)d4HSau=HcqDE0sx}ywY5f=c7_tzsoE2(C_kIcYQ8gKCSE2?>G}q zChoueTG!V1u64bv^X0mJu$}MzR84mG9E2Xbei%}gsq5)POlDY4r7uR3*JJ4tNbmEPF+k9PDWJ88a?QzXBc{p`BZOtrp`CmCQqW=rW;m{x_LGcTwl7E) z-o4N`&S9{#ke61@<(E`XgB6F+DjOR&q+(^MPp*23YB-bXV)6nFs&z@K31j=YFVR42 zIM5j@43_gl)fPeIrrQ*UzB;68TGjL$YwK#N>#OS+xLIRY0+MIsI+4c6ED&YhftrW1 zGFw2v;Ixq_hj?hE7p@sHf6DA8q zd631~T?5O^J;coNq(K~*g|$)nn1xN4yf6!@$OE!O?!qz)4NBV&DjIBy2F`;%lZ&s= zDZ#k;s(f0IMx@?vh`tpig&%JK(@fRXgM?eyQ_P$+)YTr|=m#SVT`76SW@U*wD=Tze zwyLzq5t+H*?0mTi(J9G(prZoY*EyT z5~(FupeR0?dv_;vnCEIeMI8GwRiY;17VmWf6B%-4)qC>`!6Gfl@U_LW(@1LVlPnN)=p^uodCR`ihWGX4m_J$&J$+1vkO0PV|yle{X*jPfu@LVWhgr z-zU5LeDJ#5FSjZ@4Tj0D?usTzkd@7b#t_}D7Ys3Cb zrqSUwnnsy^2_dFn7S*{vX=<-C(`o-E$|S_Li_sXJRkNIf&`U9&B+i)V=Swf4s>yUZ z6h@PQ)Q3lwKFsOlTv&p`6L2B@%;m=dc(9%G>JS)Q8omw-V)E)-xXQ6g;;(40CB(WBhDOD@ z0=JrD-H2Ibv0l=D&A%R9Td{i7R^DaBc;UGpydGWK2vd(HbjZU~knEfdx8nRc)ob&E zR|~_9%?vu3!PwfiTwuW5h)*@Lia|R$N>q}>Rj6EStCHMZS&K)Piqiw?thyw1$J$1S zTpR{7?gy3SVnuuhskqC|Kz%t(;SV+EFb!rE=P-%>m&=Q#!7i3P!?g`0L#|GO^f_@TSLhQi4(!#Er@GYD z8x#wQJc1er8q=)6Q|Cx@$Hhu4N_nU9i;#0}OPANgd;@($jH}_U|E03*1purQ33#pejmhW=sQAMcK0pk26N zDG62;KtLHZhn1Xj9Pj2% zW&;nCMt}kxiHHRAIXw{U5GNeinPnK*W+MuVqXZDxMk)qY0b;~}ElRcb1(2AncP+RA z+f2cr*JVfLF@XE-h<;!drbZ0ddOjx%*iykV2J2kA^wtzvGyqb`QF#pDb~-r*Nw&!M z|Mn)6`Ssa6-uKQL@nAPTmBoL4RSeG%c*JS#5dzTJs+#o86!8A~B%@>xgAi^)%J!zI zr<`B*`iJ5TW|{+GP)(Mrrw0{(m#IG_$!M?|eqq7Ica9VYFBpy^B%Hv(DxJjc<0?uc z{#{DTZ2i6Tw9=vJjV7F)`Uw-ltt9x)+>#om{gS%`dU%_UoK!Kc*v-@nVCFp4^P$Hr z*)QDF-GNyKmisT;l{x6*{z`lfVCo;)?$nkds*C`^efe>A-pkI(J1^TLxFWvNFO_qJ zeV3`Fc1_A|lH;a?$bMT$y>LEtgbw7mJ#kJVBwm!Hn|Y?-xcHo@)FZO}3eSaSa+wn^ z4+h_TBZe??N$nJNjtI<4kw)X-~{Ar5A|7iPpMw=2l~uQFWG;>CCON423yd#K}EuXaRfHmd&kq z2-T5Io2G>dl{<`3fhwPWcx_GcbgD;$_v97l*vXZbf;Xe_t(+NCw?cU4NP_J7j>Vd6 z+L!BBNZO1_EsHNT0=8M_gNcZd!*g-gAIbOithou#l-F@fEw<>x$b*;~M~ex0s!+ja zSO_U$mo|!SL)g=c5BV0DwULE~_=hkuHD6JTY+LlSMn2r1#_(#H$+*j&-G|wc;nt&15v&Dv>}t0-+Vwn8c|u??NSS$fvn!FGloG_sp& zhcx=aCiG(bJDZ=H*}?pLI-B}+dGuatVsFjQ3gcp}7&hlKkcDx8=yl1AR9G)O@7K4k zFyETs6^d-dn`A)Tp3D{(Op>L12(#q6l+|!XS{1lfzJLSsTgg(roZxJ@w2+%xzO(dC zl3Uu~q{!XtTF7mcw@7kJFPKr}URTS_Cf|9#uV?+_LrEf7wDH829S?%?3c;j&54%v3 zAPIlATvWoEomel1)AIEI!M~v&}|z7e@(eqS(grnmjG+?3^;{3;OA-Uk3W( zD6rB>5$>xKnl4`wsE( zODSBOj-(E=raXExy|#w%PB|>`CQMxE!?Q^xW7gtG z31u6UJrCwWTrT4R(P7}8hZh_a-_O*iSVX$&Tf2^`Bl zkSRLWDu@nM{hF^#-NqJtwx-9BYc;02#Q{xwm(r_V)4O>*O?&%7D{%8k8y2fHISJZP z^+LrhT8y1Mmq2Nfv$%zk5f=Lh3fv*n`pRm}SI99$Y5aQP(x516mcs;#BkZDy>sRB$ z`N1?svsK(S<4aM4zvZ`zn3XHHRKKiTyCu3My|1)_ zZdtig?XgMLeNPRpL#3i@X~8ZOmE>rruuUTWC}TtP3b zN5iFhX+0_i^HMfHNc4U1AeD7KVtC)nfc+!{qc7U0h#_!O#6c~mmdqDevtnC z;L-rzqoM-`j)3=yNbZ&$5Yfpzg!2;rya}&fmPG`slM{RF_ow~6cpgt@aw+L|n3FpG zUVsqmdl3ThEjA2lIU=mACL$8}8i*Gn#OVMDktC}WpWA@z&QEWINhv{Ms;YD%S#N)O zuNXUV=mf^*iFOFEeREx(7#!Iz; zgp8N8P?gR9a2%?qR;8qv3QE;xB#R0ZORXxKf2{fU3F#|?%5(AfkTw^W&9$+TAWkfk zGJ`IuuKa0aWxII@jfQc5baC?vwR-op#=@;6^Sh*djyQTv@GP(W`RY`&xV5`kVzY97 zPjC*A;4Mw2!=S2UDAPaG9LqP!u+dLfGNuQtM00cLXf&%{Tsj<8REzSu0^@1(gI5EL z0Mr3Zo=MVhQC=-b4`|~F@BJ{L(Z^gYD$!$G&ccnUK#`^6IPe^xar%kv26-Gnq! zsp_(NB*^s<(s-l3YYmb?T`L1flCn<9@@srT5HU>U15$+-5&Wkw1l5e~tlMCM+=!5{ zo6`r04bA*8mR0&7ONYRZuwe{RIX{EBp)3Q@UWr`(}*wTCQaJ}^!TX$S%Pq8&EI9fO4-6`@u zF+Nx%IbW6cLi88usZUot zjwS=?vod_2B%&Jc@L5?XkJrs1Hc!}Gc8zZ%tIklBEUr@bQ&8+sS>GRm+bi!k0FP#6 z{ssUNKKIM(sWh%aENyN8Y!H~{g~GJnZhlZ;4$AW(d0j&T@Mz;Icg3f^`y|lzA*w2W zAF6sTt&r9L|Y@ zZlFgi0LL{`7oQ!l67fP>FQ$2fnl~EF3YMkA(WFQr^=tIkvfJxj{b}4ik=(BAheop^ zW$Dh*q)72EKp~I%c?S-J#z$kf^V$VO@chzKF!g(`Ki!(fJIRPH{;67)%^Z(dbEMA+ zZh(U{DP97;&F6NSx&(XTyca0V8fTi~DoqNXAkVGxuG||n;xq%2W`#~OFlkoc5LcvD zIpb|u+%y1@riD!dAgL~DSU;CozGf{mM8xjh@|*)Kn;68~BXJV!*F59h=&Vc+_*8ZW zTuyI2F)NX-% zra3uRy?zU?hhE&-nZ^G1M%H}Et31?gPsX$P7IuAy<9T<&w304bB)#A(8|_j;E?p~D zV-bh_^syVOgd?Sf3<4yp%!ojy?Y~t5l2UmF0TSmyL>#j^lL0#vCM3Xo6R(GskAs8DS)GLHzgM)f)quw5x zDX`a8H?UU>%0>tGieXt>fV0*Ik0Il|3t26`jGnM(oKspnLCSLbxy=%;b8Ep|?Y>3r zD=ECNY;?|CHOH(iY1+ql?HA;=Ub*T`3~G$)S16NPuMcF>8x)hr(zX7lpOH zX&T9ED~cSztp8fF7D{uz`QE++w8Kf!K;LKTze#`XFS`-ZB zpUhE+v$|vw60*~&&Y;|bvuUaG1js?bFx^K}2rf~<;2ps#%*c95<>#lJpET@t0j4{T zAn~?0^1T402N-8@kgh(?HgM=A{Th}6iIH7JGs+7RO8(9upkuREygCeL=xHKk+LU$*$L9|*GT!58@!ld65m<9z>!(67KP;zJ#1@DAu zea18*Q5s4P^Fs$*f;Z5#xR{enbC9W~^QMKTHn+isUAbR(u>sHap!VY8L#G?~`Mc8d ztEE`_=60!PDVT+hPD6`KNtTI;N(O1CSt#i=O30L~w?8ImXvk|zc2=L>j+K&2_14<7 zT%x=BbQHDt=U=beJ>@EvJEZuOUT#sp z7uKsg>Iq$_rHZ#wvP4Min*~{#7ZenyG@ikvMup`}A}SSj6CGW}DdQ7Ru@9drdRC60 zpzwy9SThJpt2ou3;u1d%LZwLo)F4=z6G2t9(N;f#8iY!dBB(*IG$(>8>J+Sg5H$;! zCdE;+kZDdRRo1vz{a|VuG))SpreRZ6Ksoe{s%nrq29#4@DVsK_XGspoRM$~keQYXi z!7UvgcDHRLS-*E_I{7$CCp-zvz9nJq=mAak2A}d>Y?J;sa_~8|VXSVe9k(Qn!gcxOw?L;3;dpKHw>A z<9tBvu9$cXEoFJeav2Lqu&QNkpbw~ptz(9TWjtm!>g9Jq5hy2 z*xetTGMd$bWVO`pdDz~I>D>g!whGC|2^~1*d&C(%eVq?Tr+L{iH$>7EOn9G|#`A;e zxO-xLc&$qd2!eLZQHk2w_bVJtM~fbUb``lLiy%kc8t;}q$~E6DeY9JmTaxCmnwMo6 z6Us8(vU25?>Xwyj*L1h^3Ax6*rH^vWcS|4bmgtuB2FeN!;*~46RJW{LyI^kVFj2E@ zmN|MSZ5l@?pB+@R?XK0YVseo@Qe7v1V%i^|R5e{I*8woNG&nrjH5_sCWVd{s?QlSO z2oAhdEAs-*OZ@ZZNuXTYjW00L8z;nGco5T?hyZ{u{;2|lr4()@;{t`Sb7(I>h?!7C zfCvayZA3h>*AWn2#Ad8Uyx^dfnht0%$0NdF)j+Bij}?rUY5{3dy!cKkS+>=MOM1Xc zj4n$@qgk=CbU0QnQZ$Jp4FqK&mL72XL`s!ttYD;62}hG6#dqorfzaz3#uRqIN<_-i z(P&nrEFF#}MGAREgXW4%I&9o7bkIVs=kQY;QRV!B-j!>1YjY1{N^%w7P{Ah*+ZGKE!^M5KULQ@*yvD2 z^E%kY9xoUvgI@-d4~}d|A>z24YeZf+Qbx=mIAZ-qgmEdCmb_3T6sJKztSqQCMOl{l zs?Uw9AJomjvB5!I=OqqpNV9?<9T-+_q+THy8y(augyX6QwI(&PSkz7B(gR>7chrNr z88EJXP&Wg|1_yPW7miFpt$Vc0RL$><+5Us65RpNWn7Qe))+=m zO}SlhG#NF&o5o%3$NDtK-?~oq4Ezco+JL?V3kX5U;Ooyymw@?nr+=EzZWkqC& z_J+wX`TnfHcdjKJ6bv&#B(@9zIwUNo5OYBVb7e0`DEZI1v7Im zL{=?oXyvLGB#nuhfD=kBAP^PWMGZ|FZJL8ggCeInpsZHx1V|>gUF_6?$*RRpEub_e zb^=b*P2-Msm28v7o#tTDpx9{+C>6zyL!Tt%(hUDL0i|K&FynE+C3yeHlv)fWZ7^hb z<4OL!fQvgjvv`h@F6{}=)SeRUt;r={X~ILBEmU+$o-!R-!r?AxTm=`REo7miQ!bS0 zSZ|-lLPM7}j!Z%34MZb`Xxvz+*nCG-)WjA#F40kaX3T>3TZAvcHU2D^FiSA0iYf5p4Y2IaZ^Ufu^ zY^{ne)op9lbQN4T#E7!YX&2d`ArxH=*A1a*FxPeJ2!?prtX1-LYWm4K2M+4`H--gO zwfEb>D6>pO{X4yaqUI?}FjXH ztd*P41vkGF*$bU&mIsNDSoO#1z{Dwu6F^}plL$(6onJ>samx1uP%4TY^ALCRVy6yF zRxWnx0HryxQ$@?uF`+bQzx|UFI&oqe&kv^K?uq%~tc!ayiITb|wrA%E=JD3-2tBt<0FFQvHg$y6 zkT!LMQ;`GMKh@3h_ z14O2#;KVQ1LV;Z0ps_+Cr+%?)k;z4RmMv({G%^ezu5${Dk}`ASAOhD?1t%io0J3sI zCkbx(a=WFuP;$E`J8D^!`8BSTT8!F~cmKiMUFEiHrAZ&65aaa3DQG~*Ry48GiL;Ef zS}QKfTee(_MB6O9a%L=gUnQW~ruxSYc6Q>a$;0HCoakRL>w9ZIr+pHZ)_2gFVsB%XyX@m%T-l+-T!6n-q9v0tY*K za&)kxZ6;Vdq|Pq+;Hu69KkYVK`aw4a*pIG#6d^TC~?qH&hbWtGfE8Q@{E$q(Lu+ABe}Ng*<}LVtn$ca zf_7dx%NH@0T@ZQhA!j=bYs;%Ya*jtK+mUs2K=laa*Fwci&gc%P+Gcc{%1&L^9o4F? z{#;Jx=rAw9vaDQxkTa`8RVUA^WR4CMk0(cmi1g&>U`IJeaxQnUqdb?BIXc+UlcR$j zJvlnqQO=P(dN|lI89iLbD+fDza&)kxCr1Z6CL9&BEO@dT{2#$jZk^%5c)PGp%;sKg ze!qBsx(iN_E;LMUCXNsHr!g!ooQ#u)*UhKEY|&-rXW>Xt5Wr&5KU?o?WY3PW;7+~h z4|IE73U|1^K-ZmGDgpO(5_hPYRNMjloIf1E`tZkw^V!wO+0mrW?mQP(5ZZVKQbOqn zesOI$-|o-mTL){xH3)X9pL5`29@dO9u!C$xpn3?3z+6NN13So81ge|xhh3N~0V1q- z^&&7|Vfo|E6FU&ebByeHdVZ5%$CKc-?CN7*&DI( zFrc^A-JVRQ1NnZQhuBjr`2i=;btGb5nod4mxu`u`Q7e~d-BuzAczBzVpP;!rWtn?` z(-iG&4c^I<=#=ntLNNHWKN!Li`nvheLO!Vt>3lio-x? zB4q)fiIfF=1yUk-+Y`@FF3`?f!Y+_aq#6evw88WG+J>)5V~Z?kBGowX`fc3i9y(PT zuVD_7PfTLm_S?YqLC-sKZ|chB!!U!1f(I*lbSx}FUCpA`)v>S`eAFz~)huii>CLUl zbMbUbC$dE@B~Y`$*esh3oF!^vTG*f5@Eeg1b$)#_j9)8wFu&HZu)ti+qSw{2urP$0 z#k$Bsv<@`xe65pB!t;de3N2ljSb?mT#tO)cj0o0fvYXe@HYez`v`7XzGK~QXJPTD4 z8bvKyFaZ~AS8%NstzvsfiPr2B(|PM#@%E@cjk_n3rl}IG;TQ^$S=@pq=|Cz$>tCC- z9!B*re5Oc?78NZR2Pe}OE-GBx@o?0lMMZ08+TU)+Msg*wHyQZ)7Mzbi`DPibb;U_n zo{R0|$dQNDWWbS!)wIfyht=Fj%H#H*$?y4Ib5e8<>hR>-(>maY!tA#Vd11Ozaw>5y zyw^X>L&uJ0VQso#&gr(EjN?)1B@+1&3j7f#KdNk*>lo(E(Rwn~li|2M@BXUPLfp|I z=ReaQ$!(Y%(Lcl^vUX+#mSo9WCka2mB#3{l0({`^Kn*1P0Fxm81r6|lM^NYmfdfo} z_*Xr_yu{x)!9?*lkE4Hmg- z_OSjz!`?q$f&Cgx8Xb*aE&4oaboy5de~G^sjct4*6`;*JW1|*>?^jrbo$qgyg>x$8SR9}hBy2Ex z2ol0D3xz!dQ3muV9`DYt=Mxs=2%F4vcP^XK>U2W-ShAv{!Q6_D60*S%AM&wXxG#lH zn;qHR*IIKQZa3u?V84a-9i0!uRKDA7Is!ku&$9{y&!?;B4C~oye}*t%k)G@ z@qjSq*P2+v!ot347GOgS3kw6PS%8riED9F#UzVZZ%gv|oD!wzG>)JLJ8B-wwk5OF; z(Mu4_zAX34D+av;!OTyUK=clH!s&E)`1oXR|EYsfA&g-k%|3XbstjQJl%)pjr5OMZ z)UeRp#sFv15XJ*FER@B}2p&Fi^?LE%$7^<@le&n~6obfv1|J@%(v9s?S_pa2@WTT& zJaYKu#|t`E{Kbh7ZOqe#&-%_#Gp+*Zu1id{lfA@I+Va& z8MJJlz`SfO8jw01**+}~8jL_ki6YyljR~zEj{L4h`eUyd4tSAz|FcsG_iHK#casHw#H_GQlaU z`8qQSuenZg&4vzUvFr+mhdh|4GCE=^>W_-^a2xSfMoq}L1@zEJLClF`4VjS6o;aM4 z2`LR)|MNzrewB$)>+?i2QS!znBTIkSYWlp;jH4J-iSji+4|E}l?0KJ=LCzO%-mCx} z!lP(MlYu-VWrCvT)FCY4d8#>KYx6CZ4CEJPasnw_&l|f?PovEX3(hG%hc+?yY0u{) zpWe_vADLg%^M63{=?(vcW|9>Gk`O@oXF2;hB|)Mz;c1*QFOkG6+lOF_kDejqojjs` zHeNGC2o3`Q9)jKT4CJ0!Ol#mIuGk9@#{^MBAX;-7;S}Jr>;1vxhJO;j!szHzIXJ49 z2XI;ab5VV=h8c8-@_M;!imm@3xwcV{-@6rVd%W0GRh$nbuL#I{hpn5L z-~M0`nr31a0cs{@5vC<#xnSk*=I{fu^umTbIZR!!#oQBRInGSX0!TA43m{9xL?GMe z+j~5ry?wmB2YB93w=cYSz$bW3q%1<$M9Ly?3#7!bZQo1L_i(-Ty%b*Pc}K4Hc^1O8 zJfDzO@L*%Lj)g_2t66BSgy9r~T2Ap$iUj7x8l z$m?neXNj7aRNMDb;F}heYm3-EVbPC|Arwm^m|qJlMC-Kgr6@d5mVqUtG7+ryy%ZK; zweO`cjV}e)!qK3;SzEl^l^cykwAxoJ*!WiaUW(}qVv9AM$PX-U-%DYU>)ZEI*u*2u zB--~)W#N5Rvj6OxvGwg#hhOtBUTdadnwp` zPs-^jzXmHz9!nl!WdrFjZ02F*by6Pay6PuQ!CotmRI$)JngQpP>@?F=Z#+QnqRu+W5!IW=Rg~Nq)xMX4 ztzyj=IDukVeSNllFNJ39aJA_3sL?&(Fi_%DSii(y4974}?3XVK;EaX-L8*$csO#}T z_i{EkKTxkez_E=wedLeRS8@rqj6$nR?%ItbVjOubn-Gu@*o450z$OP;&cECDQivA@ zLs*?vi|AX52i0f$)$d^l;T6E9eJ@4nJ%1XzEW)T-!z}nH9At5TS`cMGx9_E3qnXW> zjrP41g?E#;@1^LTC{99HP*Mve97a@bsJU8T#lx{7ZN;pm0$Z_3YZod-U?x1EXDKtS+RFcnGD+ZQe?jAIF$o{4X+*v)7a43P{YC^P}MBj z_fnMC*ds^WH-nw0$hP)rI^}Snu#xa z#x5yGuzFg}L$eaA&2@zf=lo46!lJ*j-D%ZJ5T|P&Lf$@vyyAzDi=}b}V`>E^FQy=HOdsEyag-?U|LkME5m*G8ZLk*L8Qg@Ynx_wo z&Jgjl0f8gM1~on>JyTrb3N=3mT_;M-&pDTh!k=I5pQMP-t}eNzXrc63+P>}@PL`!S zhg@T)FbRZ+k2a{sli@5rowpQy)ej%EluJ+Og!HA46&=lTSSvcpMUxCNoSo8mBT(ri687>+fBV1%Mdbr4B^l)Kqm4}N~ZJFVs z(J{hBCZmUoOePOk`kJuZ`n$TO@@U}CdqE6>gUV;WOGeOw2s-p@E z$GK!F`!BuIMxW+uEY$rd@Oph3(`5H>9cJy69dk9YV~^O`;(Px6V#X@3tm zO?{`2j~}GdCU0EHZy@rQmQSp_B_`wR(SsU^VCcL=67Xv5Z<2wNiit7ghiI5`B#&t25{0mFjr~&} z8`s=l^%1q^{;QLyX({68qU3RsFtX=EM~w1xp!AcKJVFMLHO!!Mh4v0luOyIS8zO<$ zA#eMhNtom2niOoP7hZ2DMo#;lNgK4<_e_>sU?uNr-!tjfWMV+J@0py1x!bgT&m>+l zaA|fjKh(VKuYJ#?$IJe_-&R*JOv%O;7h_GN$d?A;>4M|kQ5+_43#7zirG3w&ZZ)PU zZrk@vdZFhXx!UJ5Dp#a{RV_kV!2^lFZ3@{%TB z&#)4OH;xH!hO_~`^e)G|bYKA+jLp<679x~26_aZFp2_w-liF4OA(MwL2U&QuKt^=s z_C1rb&W{4D_C1r*&W{2ua4j4Sg!z>1cq0(b6S5oOb!03?7#$h^Ky2SLY2#b%dnViW zOjaC^!`*Q{>9pC4y)7)85s764VAH;5QgR7N@KF)2_C1p}$$qDO&!i1p?RzHM_e{oY zf)3*sIF6yUgKZYo^ElW(Y>1Jt~dlqdh^`pl$ zk2gbLSJ66obAT59K$(rR{14T&R*f(|R&q7@(y`(UaTv zOt$Zt#IiyAQOt$ZtJlW;>LFj?!6CT^mT+1}-L*i`TGnogETruH+s)iWb zC)h^};W0dmsy`Y&ALsefjmE9-Kinn8&o0mB<*~&9Tf6)&>sMGSX|*JER3CqJOBYW|O@-je2yA;82Z5xL3z$ovsla zs$qnC^^C~Qu m+$%5=2j0oSJf6aHO9ltU(H9`6Sq=x#?zVjFW&5V8p%<;nGA?1F z0}qr@vgmbnENG4nlEO1!lq}Y@EU012a=e{PF%|R+w#)V-pYT?s>-_2C9|}EyjS%x|R$zj!+&*o?6A| zSsKSm9Vu!|pn3+WsGbj`aM;yJMfGncm0m%r7cD z+nvUJsG6@{?-!P<)8m)rGj)#8%nOi5o9nVG>D(i=u1!M=2`MMke5aNRZEQe7%DE@s zDR2=-SHbDp7iG6^F0S~^#iHl6FUoG+tzvg8m)f*?gblc=4jbPoq|-7N+R(s;TpgDn z(+1?C92)peK^HMV+ZSbL>qeCTGH?a_%DzDJI2@yuvsAuQ%Z27~NT_MWh$~_|3>CF5 z-x&ZgB&0-)@6>Xkm2XH$>0*4Rz(tJF_C?u-+maDI3@qM(Kf!(rt3cZqWf$l4+^N-o zp{qj7n%6a?PMsky`t1^4RHK)}{~7zHm*y}>EW9r|pZv(s+Q0iwr+keslF^IdZv%@L z#bl!R*?_zUW0ShQAFgUMi;(rREp4NJZf<;Amfz-Gy;eblMabe`g`T zq(&P=OMFp^)Nk4sWwQ#QSX$utCYEBNOSLb`#*(W1@))5IE5U`6KB1Nccxlr>^HOmd z9ahl@0y>I=a*J-^PDbxtShnWjq7|}cxM*~YaFNOA;UbgC!GBvJZdbp)%iMfi|L4mncMed zm&_a>c-r@5OY)9G1c`Ymof&w)bvoo5DwSDOoL6~EY(2GdNeC&vI1}`in2fP?uqob? zUG0#{hs;ZShA1CT^Y2y7i^G;}Fq@c`u@8x3yr)11duvrIkFB+^cxE3 z*I0WP&RQsP6;P*8XgVTR>+VU(Ht0@ooS9DhH;r*u>!?10P#!5#~)+3Bb1xP^~=n)~Z&X3asVfJNB_fK*vL#O04A}kFB)`vs@2p?5$O; zJoeVARvw44h*%MM7|mKJ@{H0-C`p-iac5^1&-3Zq*5OSm6EFR*>cEE!>2haij(%K1I!x3$_mV%ZYgyTr03w)F`@)>l@X=o7u#ePY=X+xx__ zCAJ>s$QOLouHij=SPM-ao7F-G$Z@vu=iN^9ANTA_*9Hh}AB7DN+SWO|+m*{2wP_a< zDh)(?2WbS_)@iTYK9(2kY^+wa9bIyWWYU7YCH-cX^um3Tvi^4fX>VSZKVuww5I%a+*QBbF_31wNtnV3zFa z?sO3lu2kYme4@iIFa4&plHHAzwL zf6uzUIA%ud8t-h%UulraS<})MOHuR1x@{UG6~C4eNx-Y|!5x4H{^W0a;!a?+@!E#J zjR`|9Jjs7DnGWPZCll4r#srB7x2YJxtMS1gJ~r+JurX<1vb3=zYH%s9pXrI~xIILj zv1Qr*Njx1m`+NJNcq$JKNN(1lBf`pM_0L81$$C0~vyv~icqM@p+Ykwqh_9EtgR_If zd~DIHJ)WZX7x$Ov31MZ#GL-3VI95XG$dDgy(d+8S(4Gf?rGrRDj2uAgW?sn_Ej3y@ zH->}x^%k$ft8Vk&1vk2$II(ju-k#$V<){6@us@!OPd(vLCd81mrW?fYT<~~y@+3a_ zNj#kem-=kBTX%A=t3A2b)t$VqKY2ZW^2r4b2~klI8V(77ZaC;pHsYW=*@#2#WC4fS zaBPo3f4n=2-4IZpYSdqSs!@C4R6+Oci9;L+q(tB-QJ_Axe%I^@KRc|k^uJqk=BnK4Vsh_MHP6^YSC%9~r0=i=#> zT(dR(zzwgZ(VcC^MR&Fth}_x2hyjV?x|sE8KsX{GKh3DR{4}G^$!UVJkSLChvXB^# zj~IXzh*^B3bnai9-QM;UwZp}|>K-uemCR}Q9TA$-RMToaQ8(W3{R)n{ z5r?fPO+^)k98AEXy0>2%7PY(0jS0q^OhtWfKWhrEJDTYaUm-+xYYPtf1)hAZebX5sZ!ybO6 znzB+$4x7EAOno^qdp()<2{9oPfV=FtWC8)j$-(?&mz#JPpmD^=F&yR8>~Kt}^}2Fu zc0i`o)>CRCk}m59T6c6IASzO_i*u z^Fj$dX@{0i2lW$FNoMA!1=LrKp3X@)8YQ38*h1$dTq!EG1HF^5-6dLVs{}T@8%j5J z^ZjLVDmTI7b-?lcQhHK1!Q*w%@%>VISubB4%J6s>eHE7F>ZrY#?=Op|A?Kp4Ku#Qd z`iG+GJcX%c<@-yr>N1}WNd|O@8rv%IL)fl!8@5|UOzJdnv<^kKTSiRkF>tiKnmW+z z_0&WuNxXxnTea)*{Ze{T2f^cY!14W3dQu<3 z<6ZP^2OlkLJXx2_z&A_W#5Eg(^`vfs^mJ~*_e-PvKRs6znvmYf7P z%FV|1C|tyKMB+{^jW$kF<&(HqXE?sUtQ|W|p&#F;(NJePWGD#(zFEys9SC@)E)w|u zvWCv~bAi*DnG2Lo%-pB1a-%VNDz9`Maha(V{P;eFSGtbLKvXppaFRL=b+*H^C1Jof zt2I=I0iLM~1HQi$2HZ^2#A39dE)b9%F6l4yoqX82z^TsCCGCVFX>S;EhF*Yxk5c`R zg^}zQh_$Yqh0bVlo3X7j7Ci+EouPo3#O>Ku8H;rV3!SF}v9+@2v8^Q*I%9-FO2;D< zR7xIvhq|`m`%7`kH<#eLHkphnw#YSRsA_!|c~tGZ$RqP!A-BxtvBUf;9_+@&T$-BB zX@(^u$dH#TA!BH%U5M>g&~v`4OF<8FhpoOGCj~*w6f%Ok;MWp#(O63`Q(1JPy~$*L z-QAT=$$beiIxXKNN6DCmkz$D%^D`+gUk{YA>UCADTucQLt}}u%R(wwhL3WNkfD5lE z@mlPXG4u0jOJ*)0F2uKFCX0pPY@ELx2JKT0`-=^JH#MA!i@*qbL zZmnA;$fCfJ9z2JrBp}d(&2I9+BV%OrU~@uG7%~TwxjmlBy0}y_kkBlVV_-_Im=LI; z!xd(h3`#d@=!Ru#+0_yO$L;B4HWQI#T(vP}5LF;Po=o@pqv7)ot}jXG3|*~c(rBkC zRPq2gjWC;IrwJPG^ta=k$@E5l>aY~_LeXa2Z_dd#Uzo-_R^-`Nnwu;O18T+xUj8~p$fL^5M#S##H8y4;AkB%Y`2V9HtdPR92~uN zXpjvLkP*b~a%I;J4HDu3a*`@3dxr*d-~lp{xLqz~&m<)tASbDka@`~)9v~x$+vQTO zo6Lg;$Vq1A5j-B&kH=GZUg_WE2!Q+Sf*{$!S`u?zvZl^e&0~AU()W)w>^R z28OO%beUbXki=D2q$e4W_+|xmy0F0$CBrb^te~gUSG8im zRbSPT00x6XKApZuPogj1oY0dv_vR-K`nelwO?GGcmg)vq6qvR$YORNNP4V1%_zAqV zOy%M5sOvt|tZfGGPy2f@ATcXse)J#7tb%V=WFTF6jwiMmocW_u_Oi_2f`7M3e7|+_ zZk7!tL5;p8?G)f3qYG+0Q4-XAvm!|ZEK}mPJZU}q_VMiEbWJzm;DvapHs+fZk*AAf z9_dngPQw+_lT0}H=JJGNJejw{R69&TpDiugSACc|!ol1h-^^)`3!&9bF`lv{OA-ug zwbG0QO?qs9E*^qQI1e)uJ5T6&^hfzl$7)Coi8H4=tK?k3HdK0Qv{|CpbCkh7j}PYu z)A&kZ0Sn%Qq9!)u?=%!%wOX9D!s(;Qpxh7F(;Zet_`rj(!ITMQ;gzIhEDV%WG%6sS z;^9bISHUEB2rm@1!9zzm#iIh!DISibbroWQNAA6)Hi+nGr-)QSJjKL~I4yq^-isLu zmnZ(Rbnm2{j^-^kY z2hs+iGb5M3*Ff5i-rqrDjqJh zd336SFv}eJRHcH2NPcajQu5}KgE@x8$!QK_7_foJnok5dlBc?jBY7G$hQS($cqJD{ z@>FOX$rHVvRB5OXBJxNyFoxH9>Y(L11D3{qJY=om9}c#|Hr3qfN<$?xY}Z{9%(ACO z;tY8aW4-`JotDjI7n4kq(Sl$hm6?Wxwt(@>1sas4l&M(Q%Nzg;DaKU4&`K<&90Us~ zWf~URVopkziiJI8Di-#XiCO!!xgL^2LL^Tpw=(kO@!)*^WfnB^s#7bM`BL$A1-@C{ z4mYqgCr5jpRF?>;r$J5XEVj`83IMD&yI`qHXGz61AWIso+Sta?gsx+dL}ka43Tr?u zX|NLJsNsPP%9ILiP^LU+)%9RjXc`NBJ3k`wB@8Hbd}+=^o4JPfr_g+swoXz z+mZ&$h&69?!*Zp<8_WC8Ox>G&_yeev0J&Jj~|*(IgP+N zjj3~k;EbuB6`U~*Xs1C~Z(%Cb6|km)T>)!iNO@ErMfc8^AMxmHJm1be){o`^>Jb?k zmge8Mv7&B~9Y3nAL+M9DQ#}Clpb3v>IF3|A!*QfxsvdL^Q^|za+egE3q+%M5BMno- za8s4D24+h|H!xco#D+npD&GyvmI`qIw$cGD{FGWd%vel$(SW*((&oz}p(LT&$Z;sN zz{CKF@luK*?-V5gc2&;QLrO!nk@Mhcg$>P4&V!OfmMUlbhE!@L4b@KdU_-N$-|$w1 zCrE2izx18Ot+Euh5Qu86+7O}{%x|zP;=|DN?FQE<64huGiP? z&D7($Jx{7pLh_^qi$PFIQqc{| zH2}Uci&l@XHP;~cT63l0tFFP=`Q^+2o2#rtUAR*54XZ1;TW!4ZBr~lh0TUS$t~|*Y zg8}mM!SWant180}@m#Btzwyo3Ew6Qm3MmcMJ=KGBNNHGr8CPd%Q@wWCWYJ6|e{#8Z zpeAvsma0h{nyIu|O;UlVBMSIcoZ7>QLp4=R=x|VtVU=4fU(9F>{xAuUC{AvO@D)cJ z=rmV0v=|tNFaXgT&)P0bK#8ahT^~j?n~5EUN?nL*vf2cqTC6sKh*6(-P+FGy8m&;N zmdizK2|>vyj{7v%QWr#~xC5PVQRm`WWmM-0$dc+F0a*rsRWc=56b#kCYR57NtadDE zuxg7!ZQU{s6R~}xyr1gsbNdGfXFvj%8%ly6JO=n9lqTII9Rn23ROnEV|&4dxaLIF z!KZqr`>1ar3@sICMbV}L3sI;^q84F-7%3DoG$U!pByDw3G!lzEmHSf7RFgPVL)9cs z08?3cP4%V*xVPHnMKi$gV4P3RCSoJH@{wzetSN;7;DWm!~P zzOs};yj+7lG3^I!o^Tx%HR#~dp!9MIegf=~yzhcKV5rCSpyE(nyC!jHSx7s2NvdS# zGcrS^J3Q=Ehb&Yh)gcSbLfT9yslI?}udA>S+u>oMI%J_*s18|Z7P5bYNtHILM;fY? z>XC*xbS{Q*WrIW#P}vYGPT8!p4B7y&`sbZY%kivE(ck7((jK{IbMjFs%0Y%d#_xAV&Bjws)v`lrdq^G8WMzPT(N z+YV`^EFUc{vYJvNouoGu3_WUOEK5FWY%EJYnsu}CQ(|3t>Vr}$fbUVQyDa&r)?Jo- z#N1M-=4nQD3gL2kA&QtFsL9ci3r{@RS^6Otv0UZj`q0qVIGBK?iZDU8_DdWgrJ+WK z`U*!#X@C}?w$sWYajzxXDVQ`t>=aBInw_*4T$IC+B%GLwL6^;=y;p}UR2$VHO8^T= zyd^b+B2`ysp+K?(u}~mcXcp355|c}^oJ)m)WT9H94qS*O58)D&1RS?Pi73)y5~}R@ zN<^YYx4PyE*)*|vEm}|T}nM?<2hLyYmSl}5_AqI#*yIiNA-Uxi>yoh08T|D1~k6HpxIeAhh zOjWn?a}4zIR0O=9X&D5l60BVsD+{?xvuM+Lz}kkJM{9ZZx&qI@`mBqzW%xOHv{s$9 zgr&VLogG>$PYSPIo{DhSGc6kg23Bi_#=%(W(5d!{EYfpyXf02J)AiiasFr1_raj)y zPN$V8g}_!GwmRI}1B`3Rg#=UfIXv4b4G`IqF_>NN4<61aiC?mUgQhSOBq8ctJc3+px(&qo8Xbn7^D zw$+`d(bjO9N?XHe3vEwE_;cdU6FUdv?fGyr?(WQ|{qbyPGTpngThtx4z_x|8Px1{g z3og@{$A|c)12Yju1IXqc0F>0tLYG5&7)SgPm!n97@4Pnb&rW87=EY&{ct%)IO3Fy` ziY4iBo&vEpA4#BtdJsa7C&`nDBTV?D_%K(m(O%WcV{fi%<*~JvFjG=l3$KPr_f-*H z)yiXUt!m}5wN`FcC$$MstkqssOJr}cswHAx&#*U*7+HQU%#bQDoV8G;SyB^(Lemkk z!plWckR}hdcS)xjL?0w8Mne$6n zwz+{IjmI!kiM2fBsl-|y^4MC7FmI|ki5p|fLmqo;Rf|sr*7EQj``99&;~`Ha*7A_Y z)>?#Fu7@=C)~Z$>duvrIk3(5h{Vd5^DDsTb%9A8z8ow2z+Cq&_*%b3R;j!k@DvzJs zpsusO!1f_yDy}L<*fs+a#s}s69`jrFD#+SAV%ZYgyTr03w)F`@)>l?|=o8t~bZYa7 zWlL=D6U&y^dYCJ%3VR zyIr}gQJdDcuQU+t9i$OxTc^Ep`&fQ~CUmxzOj@wFT*t%(R8iNdi}yK52Q6Nb*E?^i zR$hBYH%(irl^3X6t+gRYtDJ2wXK*z3Oe>VP5^tzbUR!S<%&#gPR_u$VWlL=D5zCgi z0-sQOFiUpuNKSl6a&0390pUs|uEZxQmDtuN2y zbTZWfC;w8yTHHlP!$Dl9ye28?Pj5h0tZ=yqFUa`~g5>-wm9wU$EtaBIiyre>ONk`l zt$7-mFrKBiW&7Be-v{Q0C_&WpUOuv@l}nV~qDGcTV&k5tjS1P_8aSz#{&7qYH3Xu# zl-JMn#C6;r0X|FaY4(%T;(~y;tp2$u9psHmDZORocTm@at(VJkKM0dRiTHZSJ2*Qy z%;QQgpLj{Jueu!$DB#h`WO`j48CpAx4fO&UF?Rx5H(Rvg z?NNUkcTWt*C%Zbdc5Vy@^Xn~MTD;&^*At7|W#O&EL%3g7oCxqJ6Jn@vZ!6zFh4VxS#YV(X1jGK8}4+5N9Aca8*d!Woh;l4pKKQuq2Z7K=!S#tWFro`lZ`m! zP8M*O4afEv^vAoS*bM>osYd(_nWKe~4BA7!WS zA7!uaJGp)7Y36*SkUu5_9&8Ty7nxHHsild_}B!;7- zEDnH2NZTXj$T-9u9oz0tZn)&*!nn-GGs$bMC{?}ux%_fsgydZi4J7Dw<-`any-aL9 zB_<^L_;B9^M5j)Gd~_nVQ)=reH4#ad^#eK0agmSCxo=l@6#b7GUOks#yRAU8a~G2d?A%35jWRtDq6}%_ zDUy6Zod6c8F)$VMbg-rKLJ2)-hn7zV)kaOHixPTSlUDQ*SAEs!xoE4VrgIXNu5xMz zdM9DKOVPl#O3aFPL+Mfo-(M!DauYmW2OQror6+Y0JYEMK-!G*nbrU?^MPEgfadp&Q z%=eeY(~xt~Rv;%1KK(;6Lii}6mX+@>$=VJ+T8Cl&WCfZoJXrKtQPa5#iyb;OeO|%6 zC0c^xiLU0Fj2W1cEQR!Ru<`w6>DXxsdOF}#37G+^pr^|!9FMYm@&xayt(uyPu5xPa z;3F))ZwDW!KgG&I7<>SxJ*VsDg@TU{KYPRRGyRc#n!eXR#C@_W;JTP(xuz77Y^$6b z-=$`zOHgnwt~)H~#BY_-N_TdSL#*6v zNKEA-e8f=~d#Vu$ykxDbV8{0<0>E|90;1sP((vXabsFkShi6N|fNxeaR0jf{sfz@@ zzZB%mN^<=S_S3}yGLvK!cV;e7qWspHxmOT!UW}f~NnEFU%+v~ge4io=TqlIgoN9*Z zv4Gbg>Oj}lC~Ai4FmQ!b?V3gl>H>iSUWz(SQ|g>XcDhhd!D*qLP$caQL(b3()de4= z`XLJ=*)0%jT{#P#(d5aCZI!X;DOl(X1;ixTpKX<~SXZ#nC43;ZCN1jLpdo8vj8I7F z3?2$9B@ezsorn1TQk?S5CAh9lCZmcia*dg8$h=p`Ewg#-F#n1NyRqDN zB}={-f@+hq-70~w&kz`!8F=Y@{AU>W< z_xhvZ^A4^rN$3n+tz^<@rzuqO062{>n`5U58t?SC2+mX;8>L|Mia=mtV_A93tR+?0q0TdvPik4 z3Afe-H=C5GarC9cjL^%7p+TISTt*DA@7j4G)kJ#O-or*A5L5;sJ7!Dk*!126Ny6GLpDmE@jUo zB_1FrsgiQtBqbgoBZ=GPQm&iKg9pe-X66w*9@dY?Q+OEg;2@vu(GfH^ezGL7T?{O? zb;?s?FzPLTvGssbvF; z2oACFSEeQ%Op%(-M5^^KuDYt0xBxvTZIPa&df=NCw$SOz7ebWAdA?aePv@(ul?<-> zs+KA+7!vs;&b|4GgMRKlV3XZ}o}_|eTOCkf+Ll0NTNTuFfehzKOwP6{sOc=;dN_OL z_^Nt1JfXV}rFNUa`_ukj3`oohnZNb#+r_`zB(8kQaO>nN?c{M=p0w$kzx#yOA*EVz zrOK1ybWK-&@)v)T4Z-V>P6P#F^8bxr__gEdT3I#POkwHcRyS6J>DE<3n6ycBQcH z2Jf9w6PxkZ8=l_iCf`7uf%r-ClnG_w-L7OT43tweDj=QW z;YeCn!6bMH??JV}Lq|EqqXN9l{-KFtzSOI7q!-|?ZZO9h#M-Qm%ZPvdIM1AZO-6doV?y1bCU zlc4Y6qB$p8fi%vJb)-`?97r1| zXWo;UyD)IFXz)NoT^6b+Q^ByOOv6H5xWW0ot_K$Ol&M(QQ>I~|E7*L|aG_1b!-X~v ze8Nn%kYvjNBXtrY`L&Ho$(!p;<`@zur#XzFN&_NmJ`v^&7r` zN$r;Du;WOc3XLOqqSuqkOBF&y9*G9V@LHESDAmNdTCSWKyqv#KaT2N14eTO28GA`} zT2>$nfO3fkE9gHSvdja6dKp7qim5154Pj52=A2r(Qm3b;9(&3`u#n13!$Mm-W?m@z z8x;$C%2X`uDF?tpig6Guq?ChTA*D>iLR&{m=~A(s836-vt zJk65E!O}Cz4TGhWI@O|XvIoLNiaFKGjgm{L2g5~5o$QXJ5+!3%E>X_sU&BPRhkESf za$hQ559OQXS40gg)2Tv8o>bd~~hI=ac5^1!}7GnQbU^Qt*aTl@H%14s=TmRP+!NC zYV@F*(!jMXX|Rk~^F}u;S1P<=xzg~pt!)tBo;SW>xl-{B%aw+&aS|+<354=tLtDa{ zGZp9XIul0+&e(WSM^a_!At$nTD=c-1naJ3!vefHLb8n|&OQ$gkrCa^7Xj^EP=m8a( zdus+>s&fa|*r0IMz%c1+?bTGMok~5ub5X&rfHg6sJPOUCd*>_7cyuIMOgx*H?(CEI;}BXgH2kOv7=c zVXCjCQeQ2v?KMzOhfzoJRJ0t)8-&l6?P`a_6dTDr*fTE%WlM$9PlNM$W~U6*e?GITtY!S*mOX8panZX{dIp2OFB5Xyuax zh7iG{>mI5CNE^3Q3sj&r4Q{^@t7ryIuL%FnNGp-3Mypt)e07Hp{lMk<;mbQ_9%);qxqV|oU!xk zM;2F479C!bG=m^($&-exy0nAyWeEs2hZvzX_O#|oMK`Rj0q~Vsw0eB4xdy@4nkx-o zb;--lFGneCuCnZR;Y!6ftgbYC^#v^hQ;Knj9HFb?T{u&54zF_{tgT~+UilfYw&olR zYirKLi=^Dh#`P9eu_vszkg?X(7-YS}=v*$H;kJ?Rl{43>lw$a1ycS|ng;AqHUEhY3 zh8iLDNJGs~nz~K0Xhm%%;1^8+5Hix~~fZG}(ZA;MQ2ZJ^U!+0eOT9O@n+w9UJK5>XwxK8$EK6B~Dxx)60x zuT3DT#cC6XoP?N9r%sQGHwv-Eqd49!T|F-cop6ph3p zPvyQ;Gu0#x)lfBw6TnnfUQ@lP!if{aRN=&-naaIBkVI9*y;ECk)Z$Q0RTDbI3TJU4 z&9Zqha?3O zg<4dC${w3Upsb3qs&9xQEeb*#ksxHM!U$vDXg0}|!X+!xBH!b}wQMBK%qj6BdQs|p zb>CJbYW&xT63uMl)$36_mCSb}vF75~RHM}<5Y=S02}I0Ai3=H{Ut+f`sH(}4xpfE1 zL@Ccoq(mv7Jo{X|DEd1`NHuv@!FIDqCb@**_h`)`(Xg_?V@Av3QDXw<*GmwOn$pU` zv5ZwRE6-yktMbidqq6NGTI)sVs+W#xSe%pBFCFMlxOos~qY~L9c@F5oG+bs^*etcH zx|>QJx0WLv)vn8tj%L?%P9(9da&{)OEes)2+lE-5&S#PJOGvfv@-QS;EnL8~XpsOZ z4`Z;YwW-U)8d1i@#FHi;CtDUU*{SbLzGiX%Q1wDSe|X-Quol8YgyJU%}f$xYrk3>QW|Pxs4v!rl!lh&w6aLtYl(IW zCQT4K1(SwmC+)Rk&%z(NvlNe!V$)zw)jkSswg6i61D zg|t`q<&rFC)k7dzs1~XN7n+6AS-rBCUVEl9Tul!o57kn2;S2;^3Ul5t9BTs9(6hjaBLE97N8CXH&6RjN1=ILjR} zRsW9KqmW%Tt5`H@a4tbKT2@sErjCN8o3l#MJk439Xf$&wE-)$!hmti}yl5`;l-op$I#Pc?7m3~K0zDn$> z6fb~js}zr1q9b@|nJ&3@6H3PN;7W5o#qtxmST0L<%7RfHZwaDNoo)%D5gl$ZO{FYVh^4#fOlMo&c^YjEr>V3xoVL*RWW;_> z+<9W>V7xsaPR3oP#bd+y?CRv)cz$PB1ORSQg$=N2VR801Y{@;-lq2z6e{>L^Jju^s zzXdF@*|tU^#^5p1>QQO+x<*>-R9fprS|{Z|KFxs>)ISIaB{l~`L5Z|NLCKnyL7)V% zxJRBHP5K3&WWGk?0#u6jg7XBUka1+rYotZP5osBG5{{s`B=2As{9E)%bh`jZA{nFl zG?!$~YotYkk~y!D77a?~yhU0kCHZn5AL83%Sp{8kCmOHpT`*a{fcdjLtMVzM=716Q zCfR=MPYMYslQfxHS1TDlA!lpAS zsWQA2$oXXD=mjt{>xKCVD)gbG$gsTc9nHK^2vfkyg$;me($Vr0HP_v$0$JXH2$ImR zu+Eu2t$X@`&@b`BwbT))65AlTsnl3eN$lggDZW7@CSzeJk=n9uw)L}z#Ky9i8AEd=K3VLi04g2ACMh*6B z8$oa&kYrH4PtBm~B z08@)n1(E=m^p(BMO`OPhH|=>b>@6-~R$o^)r4C&hR9zXfLddbYd>)E!tUdMnh1MEAsSe6nj_z}JxH)o$c5BTvTAl@1B9en}@!rBGmf7B)zlmft1o zNyx2*v?S2hpID;QC{tP$EM$_`dC4P?{k%7OjR?N z(|Y{`&YnnYz^UX=^|E!siN{??cXFL+`GJ*aV9DGAvcxI;q%J(E+2CK&I2{4@ZD&bdQ^VM5CrLtB|#FlLVjEroE;qI z;h-1R{8H!sqR`3{!bulwfeOuVe+-+Q>B!L5y91eCS4W1nMg+*Li)2JE0<>=Cm2A;c zqqTEmIGA5=@rt)c{b`(aBJ$oPpU3q)^Cn?6P2kjI!I32e$B7$X;GOp=j95m~lxUJp z072AJ@~n*`9UR^~l-K#o@EsmJSn#-W z15iS#{I!?yxYBYFdWT?J+zEVh`;zmKXKs5!=j>#c$#e1A$8k}^s6US1kH-psUoQN8wea^9{Co3eoSe+{ zOaH!{@Jau^TKM})@^>QJ=J>hCC!@)f$@Ex%``Pou-Rrp4VsNlMM?Pn#lkq&ak@L%r zeQGj@N9hTC-{PFYPN2s~U6~wAw*guB8|eV>@pRZ9W&E-YoZh7g-20fw{rG6O&lFGo z-iY_-*Dv?SyJ)D{c7KGw_w4#`4D4q!MlaqzfMFeJ4~9EC2jGtVy=y~c7w-*cvqav( z5JlUL->=Xo-G5%9SGwHw9~Vg?KqB{X|&g$_Y#|C@)QXt`%9ZeITLb7Z#_94({X%wZUg1P_~w6e8-xEm zj?YzOvK~O*hs4D;yp8XFO5FBV$+ovhwjpDbNjw*oD{fnpY&$L4c8YJ~c)@p^B*HJG zSI`AVrA!}|*Z5!T9At;*u>5(pzYT+36kVH4M#*+|d=iFu+@&;aU~P)W;Li*Auju?c zFGP>RC*Ag9`0{7Jy&0W?ZO7pI9c)j;j{DfZ+|0J&aVOxISHK64L3;Qb>3!~BEspyZ z*!EJ`7QqMUrF@ac+y7{B9PYz&Fa7CaTT1U;!Zth~&;8oNW%>RXw&4$+ho3LQ-@h*$ zhvyb~bdqf%j~6A|ep8_LP06-j6}DkL!SofjeRHzyQ^GdH3XdBJ+YlGr_CaCWw~0N)Yk6Y%|GU%nW9BYb~3e1G&`UX0L>I`I8ZlJ8%C%Z2E(|I@_? z{S{@|faCGpKZNb~z%ls!H{tv5CEtG;zJK*AoY!aJ`=zh)@1KP4bD)FAkKp?{Y{%~( zhVQ?ed_NE0e=GU^F8KcCz8JorO1}Tu`i1Cx^8M@Z{W^R{ zUC^(-@UJdL7}MwzFa2NmceL@RlJ97_v>9i-+7qDWg z34bU21uk4}EU7k<8Nw`j;`|oenY;z_o*P@&4t926vYYVOfK87jTbO+3*o~se=$NjzGc6Tq{n@n$Z zhvV+@S=ZNN5Xl%4)?6r;LKJ@y5OX5Q2vWgAP|;JA+; zjGsk%KyK9Ejxo7!jUd8t+juhG8t^{Db2wk0qiwLE0pEwv44Dsih7gqOaPVfB-19C1 zg0>4gfFHOp?`OdG`E)W$Pmj3w$AfgkJ^k%%=)Xkwz5BlCzIVdsLHK+xe7*-hAA!$@ z;B!BG{v3Q>2cMJhIdNa~^o28*zYFBK?_T)(A^5xrJ`cd>&G$v;H_u+(y7J_?vsa_& z^0_CTO#e8)dF9I1#mifp?|=Htc{ulp%bRDeZeA8QMfW`dG~RVzlpb^8;??Z<``!rq zJ_?^t-WQ#@un}Fn97UJTT)Dalw60t_^Em##bRK>`dGY+l=H=+()hFTKD7vuuf%E4s zY)1Ic*5(Hg~zjF2RxeHHZe@ExeE{;04v3cR@xwGex(35AbJh}DE z=H)BrF0#oC`}=7ib~f3^xFp}ton<@NG3U-MjyZRh)7iYR0bi5v=dYmb?AXooxS4;4 zvry!VkG(hd_t~c}JPwDjZTK5cSx6j3{Iree@rzGAb!H1l0NVFp`r5%-Ad2q6<{JLo zVfZ->`yc4u@zAL^pX|Nq?e_~uzvB%L-y{54`nrC{TV7k*C~SD^Yu>gd{JEU3$L@GR z=Nn%5jW7D9JHPqG-}0?5dFi*^^|F`W{q4tJ@g1-H&R4zqb+5nojrW~+@Ybzk(OaXp zMQ@KbqqEUpiQW-C868G{KDrQHjBZBnjNSz>{>C||`(WPiYw-IE@cB9T{0MwL1)mXo zJ`A5r@Y#UR+u?HxKKH=q74Ug6e83T-uRRI#1o-?Re10E3zXhLPhtIFV=L_)p9DF_l zpHIW*Q}FpDd=B9=htEEI2JrbXd_D-DtMGXgKBwSw4}4w$pO?eurSN$%d|m{f4t)OX z38?4c^L6-q4L<({K7RtAKZeg&;qztq{2_e)06xDDpWlPe@4)9XU*3$q{>9Dc@5A?B zhRgTb?9)EmebMx%kC!ToX$tTa9doTXHPydr}yd%2f*fFsB3trIayzm?0*BzbC3&8hY zfSZrO--RD^%NHDb!Ld8;fcpN}9UV9q{v-Twet4Gnb2fSc?El_jJlMW=x&N^be`M>U zANuaAPha`qcRh9C1JCTf@BGC}@87xpf){qaA=-HIHLv_ZP6pqOJDLGFS;{&%WJ!@d;J^kx%cFW zH{SQAH$QOysfQkX>pNj4`LdUPGZ23CTcWppE2Hu3t%K;WiUeI)w7ZsERXZ{hE7|D6Sj>3@HEEdB4NF&cL4YQ2exn%UV8YuE}i@C5B*2ntSCi|b5&gKW-`~HtS@}BSgpx;ru+`F+p=yDPdvI1-y>cSWBhANl9xM@FKYjO2%@ z2R=tV@cXF;MuY?39X;|MxX`t;dwuxvXGeSE#H5d&`4OloAB!H}DDV40^qTVK5{)9w z0*gGu9Ctww?Bm`I|AwM@>sFI!-nyms zB{$7)7mBxT+4zuNYmD<-w?x( zMEd*tutK8Shep?Mem$N-zl(LK`rW<$_H=?s!RjMe+yNINpJH3?ox!=IQTKX(2Do19 z!@8kuz;z#%e2#$v^uzF)L62$By#ZXh_YS(yQ#-(B5xg^EVVc27 zJQYT_K46AccmQhuAz-ovlOXPtjDgeTIov0vV@Oo%1gXXXZ6`D%% z^tpI|V8F)QIoMO`;}REuWlM7W<(Rb^cvBU+b{rAD4s2nqDU)&pb~|KpqTGA%ZNwx; z&v`fe*M*t()6seO4{ge%#J1fVhC6pcFAqAmJNa!}X@h2KEA3$)@QWsCV|c=rZ6OXx zA3f<+UmMP$g}gn%)-c-#_Y!Pv!ZAa+cVOJ0P)v(TQK@)5`8g7FmeYOG)c5d?}O^K{K$%Pf+|4Ts9_fBu$ONmd*mA2VYmQ%sHZ8 zHU&RQcR_x@$X)D;z|nYU6!yFU`>|an2>%!2MA*jSQOu=?=e-9H-+OT4-h-15=hb8_ z>4&?@{Wtnk3^q6d`p*!_Q;3R3SZvH7r}kN$JB57@!havm{o8|M2T6vULw5XdmQNpm zXhT{hA?0}vl;5di*fQs{LlzYAeV-ueBZp{%Ys>SUGfch~8 z*&QixpxaB>yea|>o`?)7jPy_U%WbpUt)uW%yk5YsrkUxJUK(4?~|8_kCx9=7Uf{ zoQgiiwx-gf+<5G(lG*B)qVI>ljTKLwwki@qcJYtdha`R>05bKt)c z{ng~C_e6g=`NrqED!J0_e2Zb$}wv-_OIpKgr0xFd_b8SgG;tlJox4=%=Bxu%Q39;rri<{{86pp*Q;^bQczT^4}IR z<2SzV9|=caj;=r#B7aWtuYVGKFv6ZCZtnnzGQA7y{zIzeuyUt!Vj6N{j2ka2u}m!!AB%VO($cZScW9*301Ya`@aWe7+sN9)-^t_&f%m$KkU9ALPB6{7&U)e=lru6tMtz$b9k+;X4%z z%nPbdkp|`s@spm1@o)MdEj&g%AHUnsF!4zDBQN~fh~5kT{!!&M{C@9TV~^JmeI!x7WYuSL&wKHYh~^SjZk(>eC3&i8lr zJEP9L^NG$*XVQ7mvAxc$Glsw7&h<`o?3<3gzQX@bAwb`@*r;!tbvD#VGnnrw>P6@7#av1Dy|aKGZpNY^Spg z|Mfc`?K}-sE_BX!zN_0Ihug*_MG`+GW%z}}0U$Kd-Toz2cWJN;v4 zIvbsbVar?L-_xB(;r9dZ??dqK+u?Jf^Ty74=ibhJoqIZ`VC!1vwVn4IJJESV=XISo zckb>C;rp99ujzby=aq2e-N5r#j{Uu3zYWsf{HO}4Q_Q$qIT&->#yT|Pow|iU{e0Iiu zx44tEZRfb|aeMO8D&v~8O^3KSM%TDqKUwpPZPIAf*Vf;xudJ`Fzgyq) zzZKW-tZmk}*5}rjyq{QGtj*Z|-TDZBpXd-wU}{as7kwfwq^}-oW37)(6(R z)+^Rq#z)4x_!4`0UO^}DGH%aXZ#wqtQP(+o+n@danzhAvRolO8t+!kstF1?j&y8)y zTI&hx8S62t*?QLc6Yn$Vp0S?9|7vWXuvSB&-^dP_5tfbFOB86Ds?Yd-lN@? zS@&YT$-2q$$!!9oS%S^R3;@CDsMj+1BOOrP}BD){WLu>jvvoYo2wo@f|gGzI7o!PP0zN{akB- zb(S^9nr+Rp_AyV#W|4J?b+J`#%|w4Ps#3G9dTW1kn0YgH4VdLQ*E$DX7?(2ZM61NA zw5oV3tz)eeb2=_Ftf|&<)+GGbTPIn0R<3mvwslsR|0%dJk24TYu=31}amS*oFejo@ z>L@GQD&!q&O|&vmbMYxpv2}uVymh2C60?9j-y3_I1y+_d-WqNl4y5rOW95_D0IR<> z$f_~VHJgkv)(A|8S$(acgge|CVhzKsx0PXKQWpKKf!3kcfz}~bPt@L4BGB79*xJkL zZuP?d5NkiM>xq72+)Db$#h7j~2UrJKyAWc3E5R}WWyRySgB54(W_9KL(QGkywSF=a z@D*=$uy(b+H9MkyZT`*t%KXXvfp??P+4`&bwfTYhK5@42|C9Ny`61>n&Cjv<%-m{j zLHCyViTQ^4ruiPa_2%=qykfqL&v(%M75kS^m0HjLD&R@;3G;sQ0d#lrf4jNbyidEY zG#}OKBjz8?Tg}_dO=gODkGaBp(7eXHTDv@ix&pVWfa}afrpyycU87DmN0=uv{;${O zH~2rm7(~fs8ulnrX&hrFnwJ_68-Fy`8m}3z7*87C8gCk1%(Kk1&7X`GBhfs>JdiZT zm|5lp<}&K}HuEH%W{#O_9)oT&SZ<8F+&tf$ZqC3w%RB`77D)6%NHACYlu9aH%%VPg``gU_5 zxJSSLPAqx{hAndHl&;D_S0zF$Bu2q)gPnl+qJdL;v?eHo=)bl*jILpgm0-c zJ4NxDcPSp#&%e~2y&?CFXOGC{W$M9>PRNnaVgtJDQ!(<2h+6=e+3z*1zJTLUWB5b6PcD zm2f__SRG7h%u`G7{X5RBa!9F?-BABq#mUxEPO6r&vpJJfAc?1*)pIo`VZyz37H8ul zIo}`2S;Z{Y-e+qc7qHrXQ!P}7T34|rel9ETx77LS5_KWI%dADL#*?f|S%qKDX~i|1 zWBA`IIMcXA-Nu=~Hco8rP~Q>aPUU|e^L)te|6kPGtlu}Q$Juj!UVWjqLihbmy`aA2 zTx7L+N2l<$`j|74uT&>vF()M>$;}er2J+k28qc14pNv04 zUq5X;V+>^lbGx#P;a0P;%2;PSYdmNC&G_2*yOCh-VsItJ9CHtgs~%9@!*!TFSq+_Qo@X9mjkX>&Q>}^cPER&7 zq2&GV6!TcK$~@7Wsl)VU9hPn-TVu^JR<&89?J~`QR@kiby@FAOWQXZzSu) zeBwBU^-elfrE;Zp(XPtSi`8!r}SD2TZmzkHc>b%6f z*u2QR&|Jt$@qAX0XPRf2^Uc%E)67%Nd8`UgHs_ji%-QBFvkCtFN>+>0&5&6EKYy87 zYL=MA<_YHU<}`Dvd7N2f7McaDFZ0bj)|nH`9P?=NC^H-W|8eG6GtEpjN1LO}pn0S@ zl3M{I%)?m|4>Xg_0cL-*pLv+s*Gw`GW$k*988CaXf<3_OY3^_CXYOnEF!wRLn|qpj zn7f}Yl{Ie0``c{3T{;ob(pQ$bC zQ}tK%iTX%=s6J5dtM}Bq>_2Z*8`K-{xxB{7=1ZJ!u46a*X?DNYsHZqXeL}6`g!<2% zYp-Od`w>pcAL8V6g?fvC)D4{ zD|;*QFjf9WUK6TzSF1C!WY|vojl5ksechMS*WIIDxgW8+C3gn)FWW&q0rQ#icL>WVTI>e_*2Au0B(nBTlqf-`g(V3AZ`P3OUAq> zbbT+6wzp~gUf2)Db}+PPFHUU5_FztCdtpA9w=d?As3WlxlbE~1&D|F|^)R)!mCWg^ z*vUZJrgZ!|?2-O;Xs3b~V2M>IWIz=&DE*ekDGO}rB- zR@BHVbZq36`QM15COc?4RA^EAJ%oMj4n|T8J$V}A`Du*u^7dtSyaP0AKTGTu>i1D* zmq(eE61D>UO6&LNI~o{Xkm>wNU+5>00c zMS2wUWDe;~fT|oxh+r#vQcf#!p*IVmI440<9_yK>I`ri z(QII?P|J#=nw7|jtVm+%!>O!Orm%jQ#A#D&x-d=Cf2jyL&LcgoK3s!$xeVxzwHu3yM4zFhEQ)`vmfyl`x0M7 z(QzNMXAw)wy~AF{2KGwc)HL0z?77%f-3#n#JkS2dvoZADYIZ*!hyO5^%KL++^IR(L zUUoXJXaD0`sJzSBdy$=&3)!8yfIXS>*r_?2eVen`zd3__q0^xQh4WW9q-U|OBiz_^ z>=)*Z)T?HFC-1%H0XbJ^N5*rQ;RLMO6Y~jKe-g0isBvv4g zueC=*GhCfkUzOAD|cuE(2dbI zad6}*hf(MU~Z_9dkZsb!?SAx_9dJ^xKanQc1OXpJLT;rKu zibzpz6NGBY5T#>(me!Ff>|7)YBQD2v*D`p#3r5`5nMvByn`*VpA&HG^Qd%sqdwnQ6 zMv((lQzx>j8np-@!iMXMsfXglgq z{8X2gg+xRU;)fz;?%;7Jth}Kkap%M}J)Mt#jSgv0ddyzIo z+oa>LYK4dq!7?c$< z*r!Jo1oc>2A;T!i`*Kku0;J{6rG1Ul=b}^-y=!i)|j;8F9sVgT^*N;O>9`| z)kZoRC-UOTrt_B`GV>d!SIzNP2V)=CZ7FrXzgeYxTA+-c?8|do^QqgJ#ZBM6_KoJH zwR8Q!>QwfG^l@2yfUTe){n*0s>6v+x9Xmb(=eL`vJ&u_;cB~d%r?O+s5|88T#OX$7 zr!gqgGuv@FiGqV|b`tc=85753xo$%;v3C3o_UQ*{y^TvGKHD6L&oWvLAVQFP9T`R0lgLMYdO=Zkku9K4^}m7C5-2^^V$8ORWn^b50(%gP&znm!>vC#zscCU=U(VeF)=jG>My zcTdC&si86*dr`$+RIwlL*o!LmqKbXq#QdU(M3|kMKe5QgC$}(rT&@;JNM5F7Wjglb z({sRtIP)fs$;q-U3&-abxZ!g0a>qGd6_>uV3Pi{skF6&UMd?M^8I%XXvoma;lk#$~ z%%PN!iI|t2>xe4^AJN%<#^n{|i91Dew2Ms9`0PTlE6So=kl3j8$L42=P{XX;i4(*; zG1n>cob*ERoL)FV<)j~*=VmltE^4P2XXj2zFUU^k!ghL&#@DgW%P-2FK=BvnjUB66 z*-?j%T_$aRoc2T-(RN7Wn^;7_O8HVAV{LhmS$R3gL8P?s@8(y^h+@}vjyOl1dG8K6 zehVk&XBFgAcibjNQ4_Kc+bt(xL9Aal}luw`Pp zA;3%IWje+Qc@cl95dFg&f zWN;SyWoZ`Ce*6}b$J-5aQeL*(1!%(s6Qu(>{n2ga$YqdzY2J1fU zjF4^|wk37y1ai$WMlVfw1a!l@LzZiHhAhv&jDoJ4jH<3)M%74~dK&P|Zk(>W8>efQ zI9FOm;5AUd%#j|&!_NIv#|FQl&v!LJw^3rf@9J4q3IA)Euqt}yx7f$+(U4?pb znUG#IbjncrnWzk!T4m5g9pcyzaqNdovF!&t_JbY!!D3%HArG;yjL{5K(nfRh=*NZm z(t>4rQ1sekWd>lp8k<)zfqv`_Q8Iq$aUeU_9t$%NEKxvvlz5yWT~x5sW*O4eM8`o? zaS&A;NKMZfqKdt!Vn4>Q7gg*<6??|g^ocn|in&OSuZ5Gdi!#VZK~~Yk0>+ih?81!n z0_Hzv1rSH(tL-n7(V9M3l$|?KhZ}=TT|Ljy8SPw=@FE5QaNu zqCLoq{L39ZFW~sf>*m_0UwZzz_0PT>@w(xiSKof^t%$jm?iq948?7vT78~E(^rFxB zpV976K5VS$CRZe*mfdt@5a~^6>0=O7I(FQ6q&VeFpdlVpP*^l^(&Q<}9yfKGEx56q z9ikXV`jG@uB`0WyIgFcjzy^Z|MT-GMGZ9Ps1y$a@900Goie^ee!QCU1hxPl z02_eyz-r)OU^#F*unbrXECS{O)xZ=W6X*{FfSy2ipbHQO{I~?%fscU=z{|iIU?s2| zSO#1RTmhU1%meCx3Sb(L4`c!(fD|AJ2mn2RZa_SsfNhIO2lyCx9as;n0agMlfZKtk zz!kuSzye?%&Fna3gv*_E5@%18FgPj+Q3i~MDg!z}WcdlFXUFg{1%A{)B)3gAkZJ^4*Yl-VSshO3ScR49?%F( z0WyI;Ko?-^rQiar16BgdfD3_YUgP$Bd`Hj2SlECHE-7k@OXXb zy&rK>xLLm+!vXdQd|-ct8!Yl}fji87KjW0~3(W_;6>gF*IeGkw^T)6C`*%(wzu^^r zl5KES+wb@AnaTTu^Zp3$*^h9b$-CWqZ4OT12$4s)J47tC@O21ha7W%wyzy^Bz_a#kPfgBBdlB=OC(j2un5NI8a{p`0{6iJhGQNHD8L0u z*X>uT9l%18@Wn$h2wubvW`+^hL2$IQ+o4lO(ovdiRu_U{cI;$;dxtnn%R#WEqToYI zMiBWZw!~fqpVjT~Vm_i}4L!!m{a?7DAhK>mj?G&5G)0;a_p9N_T+WRL`^^4nEm!7Q zeY;^j_ZnV=&+}z1hwKgb1UA4i@D5y{o8Sk1pYcM*iI4T@V2=Y^;UV~dvEePaML%IQ zc%AtF2&dU?4p#z3-!sIp)L>}^oSB}+|5@+|+z1!9QcK|*xF5dJhtU54-oin~NopuQ z?}dl-F6`u4t~vfLMRyAjky$KKU}~`$X4Dhw4e%Juhu5G98%ZNf>FfqKf`q>bZnewN zJphc=R+Z-* zN6r>E@{OM`A4ZtHm^F|C0d!$(-NhIRSIS(tG!*CJOPsg(pu+wO;rMs!b{1BbcX=XsfaCb9uvhjZsm zdRwGlzDv&>ZoIFQAv1cp=4SXC?f7@}K)XIaq7N;ncb!NJ7YX5p5s?rs_n>6%Jl2qz zUuOLPob-P&w!jhox%!iFlJSLVhS&aO_^w_xwyG-QMtG^d)Laiu%5ASo{l4X`mSJk) z_UBp_ZvPBes;=H;;dcAofcfX&GYP$Ldr$rU^S*z%k0&)2{hat^6xbc^-u>v)AK@a{ z9@p|^%Qos|KIYYokx!~mEjyhKgjyRHNpq#Aa_wUvHw7~~B+&~7 ztHMr4Gnzy&icgR?Vh-X~0<3f5PEi-PJe5$UUTuj_C{)k1gw%?blNgmmiu_u*zHZb0 z&f)(U#`_b!nC}FW=yxflGPC95cu8%t=daSy?QTrPeRE5-y2MGjEBSa2SGzQRR9idR zcwP!7y~**y?Jwaoql4(;6ISbZ;uFsCVvbJT_9Z@d_FcIB2OZbB`v11h@d;{lyOl~ytCzIZC<$j3P!+;4vU$80v#iHj!(El zyWg(j6Ry*`tJQL10&~hQ(6Nfv^@EN%5=L}xTex21o6#XYVHu$pZl4~P(P6s|FQ#ie zom~S;`*CCXPP^Xk^W(Zi)Hp&cYk8#Qw3ZuNhH^)B1f!^Y<6zWGhqNx4JZ)0pmgen!)qC6PResBb_+Pkveam4+ z4Wq8;57qyV;(w(MW5>U6`yk!h_HVgGyNkT&U7<3nRCnVH_!7@#4%pXdVXi%jn?o-c zrAq!MGcpSW+r13YHL zslG-BZe{+?xR4p=F4jHyn$8yLS}1G#{^n48PBc0(w;!Zwg~iY(?sp?{jJuiVYt$j! zT&hx2px8@|B`OD8ucgK0z+D>8EPbMJDf$ysH8(!XxTiGJSf=hXPJx1H;`UOQ8&jp+ zdAiOxn^_9(N#k^=jrr{~{ zzQ2?kO}9d$-b#9}F{jUEPT$VVezS4DdfnKJ?Q(8NT>xd(O)X=ca2K~ObGYGjH~+Q9 zCD1qa?bGx08X=!MNe38<)SB%rI>asNq87UhZh{I;RI*N(?UeH2(8MnqpS9e}-LEsa zYb7acR_DW&Z-=-;m)e$=zpG=6@6{h!x$Oq;uU%JXaX)Jc^Kc8ep5XY8GjfeYN=Qb! z$xtYJQyR~bgFU!4wkPYnC(ut}UalkLW~jg}(1K^FUdAlSvp5Ia z?Y=f~6}QtitHs<+t0SfyZm!)9FY}$)-NCK42e{w%Ft^;~&fD`XPjU}#6@1W7b5~&v zch=tE&RPLC*ESemsY{G+)FN&PFHkd#Lg>}&xgC44YT%aIJKTU!T9{VQ@IQ5UvKDc0g~pM|?_6f3*m_#BnJnrvNn zP=Wttb+?Od%m2UCU7jAL++5rJ?!T|@%KyKtyW4)I?u4FcZ?v)J&;N~?>FmtNF2asR zei`q6{g~+=Ep5Gwng16?%+@)xZTz!cdwyEacJ2B6*W0%@+qF*le>JCAMf`T2wrbAb zvm%&2Ck9+Gz<(+c*TiA~BA>kv>e<~k#3zPGONDgeQ z{Q0nLetZ9sR%GX6lI{iWy79MP`m*~kUpMXEs%U?{A4CWFPqiN#3%m5Mh${X6#`a_9 z=C{y(=d#;^VV z_E#(N?V_oi(jV{4cAb$XTEt213jX8tDgMK75%l4VM@Em%`hOcZl(0L08|MrsayQ$K z{RG2S`>0ON-fm~)TkdZ>L(IkO^*_z&ZyYBQCDDR5oL_kAWB!fUYro{KHq8*lwh z=SPjV;SD%O1@sBRbH3fr=iqQSS)U?bZIp2S@Eq?uz&2u;sr7Sk-J6q&=h)pAex`Rg zuXqPMHn1-~PxWT^y2{vq>s9PxpQ5@F%X8%9EL`7$OXDKv%;Fu+?ByK#6wa65;r|^@ z^4F;QjgQc;AaBDtzkVKR5=R?PQy#a#k@B2crSrd$a!VxFr>HgXGCaqwcaE`Em%-EI z_i5he$iLuSMc5*JA|odiQWp(|?72RtHmMRgNa84?r=2o*MwdYu=iYssQhtRLHgTqT zim?ekiJ}&vX^3U(P8{N5l5t$&fwfuJD$~ zP5*ZYvpYNPdr@|G1MhJDvOl}=YpK~4obTK5)R1-`cI}@>Cfs`V<<}}XKNr3l`Rddf z%&&7!{|2GoWcPhKcI&`uBP~F3HwFBK-%5C`gv&}etkU$UjhvGRFV#3sAF?^aDx@4H z5o#K>XJcEWu{{L2SxMw;EoHfmRH~@c=kU9Z^Q)&RP08~*4V$oiN4s>vyb*mCZEQR_ z8_TJ|I9kLamCXt0QSi{QkB!|OoGU%b=~93)c$qd+qFy!Ri^lR?u5~x-|64s<+s*xt zYi0jvD;w8uwEDc~PfAnVq_m>HUjD9O^FqnFg7}bcI@=O|+d4sLY5CWlAISI8?9tTz zD%wp>7(?Se|NvL*Fzvs({@JcQKdooG_I&>9?c1B}TBrQKnrmtKt=F8tXGLmIYR)ya zM}hr&#>AGE{~L7V&g7!Kp4Ao|>DJC~Pi-p~?X|K9_Wup7tTnYO_`BnGdpQt4(WAh> zW~H(-ElhA(>#ZAGTHMu&zlH569}+(D{HO9^x3G13gmQCWW983B1kc}=F4BtH%ExcN z^jlgYIfyP#p?Z>VIw;%jBl>Yyv_7h$DcKd02wzGZO|LxV%zl)}_ zSJ!RL)P5}6(z~;r?9D~HpXS^?Jd>Ss`3qCvq}j*V-)j&+Yq@l7kP`Cu$e&MaXUH-MGiL7u@svu-|Fh6W^Pb6eNQc~SS%%5_;BDdJ(2D^QG{X2a>U2dgsm%EwV$&~x&an6m*&fNHuuOjr) zH>msb6@)?hmh^D;=hN63@5W7nUf{o(y?EJmpF~RQIECrR&AMLXybm`4?VbD0oS!6d zIw0R|5oz2~0&pS3f5+JQ%7_~Ua_zaWOncV-EyZ>@m-@g4XxBesd{p}n7{u1tt&u4Vn zeK~npr!pxqIb}+qoYtyg`t(Ecz8Tnr`&wT~Yye{kBOx~tMoL|NX%{j0#+lrZ%Cje?3hF!u5f~2IRKRt!*rw z6VQUJ`v;n8kp+pIVFWni*gs&K5bdh{rVSdSmfn!2;|?rOQ(OCwQQbaCljKxyM`&YU z(9o2?z`!`9rWK4S_9W6aO`nb^+i=;5M2-OLlbWjPNdp1Q0b6b}DL8%uWg^+RA%Qr9 zwN=%l1D?cUv5Ls+4S4clC7QCTii%Jz!puQ5kTfWHNQz_-S&^Z7FS))FK~qDi2q>-} zqcMt@kuz3bUpm)wM{rk^Iism8BEVve{;nlVYbW+zFJ*d3PZ+^)TobSrxo#Tb8HI6=`10MJ z>ZrDPuwx$V_`{Yun-wa@n^p;~RdGO!t+p3c>_rv(GRIz2u@_bBn-IW?qGp8=u*~Ch z209b6ZxJP4+SpiMRaQ(pM-XnfmS!rFngbDutF~}{#Kl+WHeXeX$o{GdT6aZg4ieM@ zuEb=VT{kbXXlL9B0}igc;L}u#SnBYMT7+%$Re&}V*XfGiU(&Cgs3IM+#QDa6laumr zbyH1kaZTxoww&gM%2GxF+EQZ$qlQ;bB3e0AKZ~+Kd~ijmuCdZZvfY^NuoE(ie^pqW z24huurF`C?0vY9`SzH}zXb_ptqMuP8lA(n1u+2!gMeo$>bP-`2LKJj)7=iwR!YoWw zY=et;J2h*|z73Q}9oAPNOgah4#(fXfg7h1j>gvMvG7#%AO);$Tv4+}kW59Ds4itKx zoYA)-K#7iI4Ak{EE~hYuaETSki7A6A=K#VS!5P_(#S}dQK(W(n$S3ynJrTKETTx0b zkegj)S3!g8)`%S6rutB^?u)*7L`J#eR2|k0p0e3?oXGky4F2F;QQTlt++I^^PDaFD z9G3yN0L!t*to`qX`BvaIAZM!B+wts$`F7wApxS5O4fCCV$mdw@vzN&32JQhC`RtFw zd@pbxkmA^j--ChW!2Q6Y&+T+w`v#Y1w08n1&sIEpNM${AW|`CKvbeqGeTjcO4m#CR&K)ZJN+YM)(ifmV z9LdqNP^GX@6-;=Dr&gg_ttf|<(0GWSS`i^Gg?#y}K*eO0_s4)jfMFJq*di4Ax)R@F9z#Bu&$;#iudLZBditELAeIh8hqcs8av z-LT0%x1`DUGju$CNn~~43*F@Il@B z9`260cPSraV7Ss>dPqzeDs$YX;iUOdnp(CkPpt%A2etz7-{q+QFapR2DuMaHVqiJ2 z2G|5_1G;^mr;>m=;5=X{@G!6*_!v+>Y?zwZbiCwgD*vc;ju|01i76ul zEw@dVmX|Z71o*^6wf)%_`4|kj7+~jup%ube%#aa$AtKr9Q*=n=-jCEhCz<%FL$xz# z%OV|~_67mbgame(%k>8;l3jN@SfH_VW=LiZTxT@NJk=111DUTn?wFZH<{X(k0)vtV zr6lhVe-C%?%68}!zGZUq$+U)nftu2WnRfqgoCDX|oasOXPz{tR8E|T<=BV;&XmY|g zm4zXSN-NN+I>^(SQgN@PJvAzkDPOBUN}$JqVn?fL!&SOpRgA6BV-~6|^YU;5UrMQH zDrY|D+Z3K2doine{n3*UGqoP)gnVbLU;;-i4^@fi9_g#K<)|{-m+^U)Qa%+keQ=Yf zZyG$^(@!5<<>{-iZ^B%KU+qWh%TyWm(+8JfFKQD|CEs-zENMX;Y8A8S$ya@i{u~N! z4JXxWda}NO-I4M-@Sg$J;8oV3YC|(btNN_YQURdHH^>kKx&ZM&9Ps1ck--OS0X_yc z0j~ou1M7ixz#3pRunJfSJPfP=mIKRx#lVHYd|)2X2vh?Vz%(Eq$N|O!K_CT40s=q} z;5=|!0L%yG0ds&UKn_p@H!i(MylAxql z(#)7edie|5PtT2aN9js>(a+XYMso(C`OP|=M_7*+GcJ;^9mV6O)t*`#w((xI61>aD zs6}VCjklz+GwCe7h_QSp%BilNGOEPyIc=vW`0gk@*KPUo==1`|kq=<$RN|jT+&ofV z^C>S$bJZE`r}uMd>N0fW`!i)vd}(Jz;&X9|RdqP>)0VpEZsxq>!I`)O{B26~`M3-I z-Dp?c8cEC7uH1Cocw^13yC&My6qCp*RH{RVt~~lrG@Uzl=-jz$SCh)3TVHWke zuzfsZ@ov*h;*#%t`a%9|>cS~!e_q-QM>(`<@5Hy1a?Gc!m&UXcf4qKun{i25-@D^_ zQ}>Kf^Z&SGC^>h>?rwM)dwwa9UAz4L1fJ)S-wWEWkDbZy&WyK`CQlkrGH$PL86V}@ z!LOYn33vInc2tvu!Kb;{;~Z0N~Gp0n#x#L6m5wtl2M zWmm>;;q&9Ui9ef$F3QVfwuG(}vQisZTzYZ2G^C~lvot9vYdhADAx&}(N=_LlamnM- zS3<+M^i^XEa*u%@p;fj5TL3?O6^CDeAODi2l8(fmqq=r}cfVa*^wl)dap@~p-4T6t zJL$&KS4G4z9&qWbUrJvE3G32VDd_tEJ%D)N>+QM9jbF-Z)uaqHd|2i`44cMeKqJqt z3lL{bsG^EbIEq$PR?VmsT>waIC{C0`Lt{-HOLkjtuflL=)rphp+gJSQCA8vvAY~wn zX)&=GrgGS|%C8U0c8KDG0D50s7IRa9WY(ww7Tp7B3CStMkvv=z+=)%@nwxl}Wd+z9 zwAbS*pcmS*>Q~5EV;zsKZ@@Oo+FR`VavIS$kfi;fvi{eRumY*m9^`05JUZ)Y**4Ho zxa)d}L$CEk!z1Or=@saM7n!@)GyVeWp9h{}Zd`}?Y1Flh$-sP|WDR5UQ`oO&Uj7Si zZxQxQ<~+*#R1l`z{Ofj&XK!yihSgzP+lYaY0efF2K}Gv*Z)?#PfILKpaknX>w-@~( zqW#NxlWc45z`uJ&l~|?o!#;$5rTpY@s4w~MuU#n5EzrS0$*0g2pHQYi09g7lW%Uty zVAF?~fjVH-2bAmkxV=Yt0(F}RzY#kiu^~;Gi}JoWXB)M>ta}4&rwI;8di@@dvbW7H zf_($5mHAF*JsVO1)`N5HHm&!bie<-&u=ckLLt0NBlDx$1z2GESG?vQ#ZGgNcs3dQ4 zus4g7Sak9&RGAbc3S`j|htqeGWI>N@lJu_n&~(8Mql2%u(Ku^6Ia*-U$HGKJPy$%eXgCtCH$ga8AHJ_Kc_E4wz}E1i)#UD@-K zGZ^_2q-=c(4ip(XHKB??P;5ujS2==Y|E)qc4f%*@$o}LlyF7Nq+Fy~By+ZrDxZZJw z6QO73Q_XBD)->@a2$q6vxVCz3pkZzeQ<+ZNYY*VzwgbVbw5c&Hs<%gp-reUEdk<%? z!6XH}bQ?zZb@CDj*7Et$(S14ZV0WgT{Z==x{)S@bTWT$+zuZ_`F}f|CH0G$Xq3HSY zu@gjg!D7mDr_<;g9d83|kKM%Bh@;Y;UR6)A#(LT5{7GKiwxA<3dXaj${fbi@u zp{ZW69q*6V**}ZmR4U)>rtvurM{?rbL_Vd|BK4v>Y0&XPDx9G4oo}j8_IFQ~x+jcX zn-#>zffM`a8g-{zN0((|Wr(AuGJRk#Em(*~r(;W8QDqwIx7Kd(G6;xYe@NXE9EU8g zO+^N)0G(6H!q)*wSu+W+ljj>lbuVE4_Tq>Pa89%I4S_n=KvJ-Z&3f4}W|SMP?IbC^ zpQeXK^lYVi2NSwq$?)WKT(7L14{Qnwo?UH|e8gH~<=JucP{VgO1A~SKTxZXX&3`X` zT~iJH-D;J&!t)oJQ(E3g-^af_itr(5y^GsFFoPow7#_rX#D8Q^b&EktROi!8PyAr;N-Q@$mnLQA1LQCz(7?H=j1G}+==$^7S2#S9f{{3-sjG<59XjO`_jdQ;e7By$3`vJA zk4?8aG<^rjdVM|;zuoJjaF@|Xe}X&~Yd_x3L^w6*`5t|IOg;j^>dFS`!u*pdJA|CS zFh$BTP9GA;!Id=3Kp96@Z0|cKK)Nll(9@ro_JwK7SqBv^1-pfphnuP^Y7cGXh=S6G zYofeTX0k}f5~9>?2+o)tm4B}r2O7f>kAgO5MKWUP9N;D+5s5H$`lIvOj!g_W?Qv=l zk}fn|7m`lE>$y>Bm+Ht5ZE(xMD*?L%_mzR!aa4M}0VByeh z(cv{SLKP%mC@Pt#d^pGdQ66IZg>GVkLj=(*Z|rD2pt^Gtn3Xn$YovR};^pfjLe1H^ z_wprHzOF&fV0Nh;t%stdpscL4Uix|@jMKQiIZqD_wj~~;^6c*i#F6cc4ZfKnSqQ$U zFg{0|SdWH%YxbC-cI$}LF~s^q9izS>Two?aiWL1_&0$5*=R^=OX1EL<^H4`I-A zPCul%Lqrx1pun9v*5xVjFWP(O_pW01YW!w*FXor1lK#^DBk9-eYwNe}6S3Qh-Kqm3 zW`CObJvldV+;)`iCTAZ@{J48sY1mcO7t=_*;Zx{Orw3hmt^gS} zy?G#9L&;V#M8X@Rse5R;HvH*;BmtxXokm?j8k7LsqcFdlQ zSIx{Bb?|J}7dvEHAPozToeQ3afbbyIhN>CR8v|15oYzYC6beg^>^f7FKXJG;T%e*# zkJ_+XgaY)tDn5-}rOyuQ`|A;2@=nao7wi4*kvRSFiGR*st7@8R0?wheFhuBLW#ncT zB@qfz7>n#RnT+b8kh4yz*WYIk5MZFqN8wEhL@FzqvQVJfCU_(S>FPBrl_YJ`@86p$Z6sqROJ|ZGl;f=15$&lW9J0^EH5M^* zijAVZZq6>y^A0mv8B>On8HZB~qdUD7dz0uv35+=&6-qrrG`57$-ofyR1W zq^H9 zJGjafeg-g;Lhorqf*Q-wyJn8G`Gd8#HbnmxhB)mJ z1`ry9k06Qoq#1bOBk7Yy3<0BwsoaS`8KSJV}f~i zdwXuOzGw(n&!Vm&{OlGTMNyW(QAWdY$8)z0N_pBlfK(R)kk5>%PFr~Hwo%Qf4wscy zd(GH2yMv{(|DpMGVcn4#qrp8+VYGFJDIt>u8_mTT;Y?@ijr4@mJti493K?VQ zr&4PNxTzACH-tCX?Gai>GYjUh7ZusgB-u$}9-JL=Qo)?VM;k-e0YKi-mlzaEzzrPH1pUDxUU)umi936#{Z zv&ul?4bZwz&;p%KIoB>az3()C$gjuMpXc^)+mXGL+oHi4Dh=?*mEyyx1h;&j+3(NQ zFC9S~`0=Mz7i0FjiGKaC3`t&<_~w8#pWco8=hQ%zjeBhTi-;@MF4ipR|6Ke#>mD2T z&zb9jcK&xZ{-5*rbLqvp&xc20XY=0{KZD;cg}7ql-x;%{FXxL($J54&GSu=3oHcSz zxE`~pKL_1%GF0HGh`-Pr_zxOG#qeh9wX#0PbWHa0+%`CRJ(=l3;IFOnU39G7w(3y3 z0qdtk`pI%fpYOAiICduAv3>-Hw$lGKc4@5NC4Ny;00nH?3p+s6MZkP9&SZwr_8ZMe7BAKkQeq}uz?iE^+uQWF-?n*CYDRx|y&3+lG;_%(L1<+N(% z&zIAD`~*(ixqh=eOq&6I4!2l5cBa1SYN=m9p0?s&G&_=RNkc>*>sRVRolCy)-wKae zKVKe!lcM9Un;UJG^zu(;zorfQws6@|+i1&e`CW_|ePrn)}NdIlrtiI z!A)n;>8Vnqgzf|f)`l-`b+v>OZXJ#lig*1Jg5w4pn zR9;=_4Eyq*-akr!52_|C3m%*FwVj~$bSIO5uDg8}px28~qMoyIdLxTImQ1Yf(AZu@ z-{29{(3;_<`anZDXO|iu*=N$_b8)0BV$1)RnB6k}MJj2}tb#O#Kub!QlbAASPGCU5 z*2oT%ToQ#po;}sXy&QSA?_=;bp21$(kHrwoy?eF(m>wl5L~QBRbAx$8S{BQoXJE zUTit4E88zC@w@a2+x^#++s~yh<3q`H(dp|kL&gn2(ogx_FHb+8FoJK16E-%_zsBs( zf8Am`{uERJaocp2t@{0yV7D`Axq01@-%XU0Kkl8;|6KX+D7{#>R`bu^k@2rRx@G6=WjXo?bX3QLNEO*%YV_$KVSa&_)#}yFqRZ+MwduLp4Pc6!`=j?F>>0^tsbH|B^-I?i)0hy7Qtjp%YEyj25`Qys0 z4DGTzBtEo#6|y*{tFV^RQLaicl_K3{u5u-HWT!j5T*i& z9}>2a(9_fmzMb9x3?S}0?5g-)ZxvGaL-?46OT8-h`I?5g6yMeOE+^)4om2(BMUH$x z9i*j(CPC91&hYiL1U4Bv3%24^t0KysS<&23bzB1HM)gW8ylt2UWa6**4 z)WBTy)!I(-CFNI%tw?7nQ%#ikOnf#HVk&-)C&%z0{?qEYM%QF1HC{()hiM&B<~5ir zQ5*O#Chbx%sm7;U{|(?=!}r?-$4cs2>dvkO+a%>A&%Xmt8<#S0uWl1p8zaHg?-Rak z2V>h-+MwjA{TxNyrEN>SRT4)~x8X<$N%)AnlmYibMUu!+Pd`MYhPd{QijDR+SgE3{ zDH(Zr1)1V!OiosA=H#sGapQ|@eRghUb_RkNcrx;G@(NIM^9m-U=O~q*SD0OtotG
    00>#{Ga36_79*I}t5RgagMK5tl`eGIwBtF+HX-J%|xf^=% zBYp+?0D`M)PIL4q|F-m&ug>5OEBiBm%f}mK%feW_nmTF0ay@-1aRA-7ev6?_D*WvjEMzUnpU->g#RhRSa?pBx%}5iNT`LOl4sXn-J}w zNB_ICWpU5*6T;9ThN%o^PUwdpg; z_fz&Gfc!5gldb4cJ0}h}VtDcq!yCx0EU9F%Gk8va9luD4;%1XRK?{fgo)N_&MPh1V z#qohr3HIF!rRJwOd6u9fkfoy+Y}!sQsz%I_a+$0d!MR_-DFN~=DjGPLgJYzzs;r7F zuDOcx<(zE*#X4J#?1Vi;c>9IvVt`ln#8Vpql&5)RTNHuWI#HMW#&aL5?uytxXw2R5?ynPzeYU#Ze^Jj9(H z3E7;Gb6OY>$@`(4TWWqMuYD937i1MpEXXY`rdf49RsI}yE@5~O0<2idS?pOij{*lh z-}lAh6tT>+WA{AcDpxG<$F-8ghG~>-XPT4aO-_fBBtEyf;>`=ny&!2Sv`H^GJ&ZX> z^A`u~C}?+`=}<%E956rJz`CB>6(a+MlZxG;{zxxxelL+!e6|THl6{?&>Mz9=(7ikQ zq){i4nU!BOo?I)(pNoi`wPtW3uHMF^D7|1@R+08c-XpouHsnvUhw7q;jsRZp=&aZQ z+_I8jNP40KrSutBgv-=6OR;%nx)bAp7bViQ?A#9aN)4Qb*mgtwc0+Bup`IP=5^mTz zkq31-xW9x>WGgRu-XrK;JNHu?qJPu>}myvC_naqt+_;G zFm}d9JwVG9p|)ozzKCbfV?XO}-@|(+lpHZ9>$-V?BNrZU?PF&Q&r|^iGQ#y)bE+Ei z-F($R;g_>YsE2x&l}rWe1!*kY>Jqf|zpPgT&k3xw%Jq7vfe^@@Q30f(%Bro2wNN#t z4AqY}!0Nk6uSaDS9m1T0uQI)clC`?~B&mFzF1I3e7+KHRYxzdv59k$xto3G~mvx22 zRLUBojSEj?r+SpyIRp^zXjlo!*?*MVwdkXc0 z^v7w(T#2vQ#5EVS3H$;vYr=rWL~sy{BxM^`o;;|i(%_!1uy z#?52fWm-Y{<%E(Fm9>6rO#P|RWEB!&G_JBMA^QuGpOK^^kJN}rId#orHBJ$8uvIRl z4DH&Kx}6C~xzw_AEI^-l7J89sdScg4}YF1CLWQ;Vyi=B zal_-Pwkh)8A`6?=&-`espNns6v+X|xqF6ukT{Sj-L>Dzy(LFUO8(_^w7b(igD=f5a z^xjAzds;rD%FLUPo}KHr;oNC>%8;R56Vl;PsuK=0`((=I5QbY*v-!(iM7U99xljtJ z2cuO+z)iops!ZQng#|jyNr_x#N>0eH4$19Ep`E#pqeJ*&=MIN+2P*)}WsN>AsR?s& zwW?MqON~LY&H$Mg{DyQ*7!XM3B8P(p;wA$V3bS)a02JkbjU-^};Xo`@Q^sAYiYCn^ z$K?nS5~qE6d}})Tgd*|J)Fv4Y5fbWEIQ;CrARn&Dfo%A*;TV!@Ue#4IL&Pox0ND>? zpYUr5W3lWEQc{AGUP@?^IB8&cb$#CmH>}39G~glSFbPAa@zai()zuTAsC3>X--9LJ za)1|t+i^xE!+L2s`Ng|12|_{p3d~<#gJR0d%R3iVrSb}j$PeWW1DsquEr%s`r^`dq z5!_NF4T(wcizHCtxDOs7?oA%?AMp{W43*Z|*b>j+!*`I!*;V04)Vkgx;fA*x4r!x1 z2scc^)yXyKSylCo2%U&jkkq73K=7hZv{UxQVXhffH4dcVpl~0AYnC2fgN~4Jk$me# zk1Sf*cjxSP7X054zfKu>*IcAz{Jj%A2I=zgU2M{mwHDUw)Z{_@>N0H8uO|*q7r6M<{YfvUq{G&Q*+uY1B8ftVw~%hZ&=*zZ_2Gsv zX91I{bS^Xc_4CRj#~$=#Z06pQ3PPD_u1-xbIlD$oMQ-uw<@!Mh2@pEsO`jdGPqs?- z-{d&}y)(V=wcCjPBJ{F9CeOt_{UtvABA@H#baPZ{*+Gf>hP45$@xsGfq*W8 z_>#&J9yU_y=J3ShgT2J~c$9cvF{-Tx=Bx3&bSw(tQgIzRc8c$uuuGS&yYAL)_dWLP zzSrLS^w@X5{d*p8V6VVI2lwuic*vnieGlu`e?aoUltF`s3>`N7@DWFhJTf?HbZT1q zn2gM<=Eq#GV&g=zh$(%P}1vI(X2>2>uJ zO6MNcRC`oYb$Zi`!cbjad1G#P76p$tRbJkpCKinyFao`(gNEnmjo68~*%^76St`^o zB_%~X+Rv)fjQn)8^IKZRrDr!dWOcZHEV7Lm@bc~3MtC?ns~|TkX9zpl$OR6$^!H@F z(kqmGHg-C(pNN#^JbghtJ2Ej(w!`EgD=}TmV9gKLHPz{OY_lB=awi)aN@s+|gy&4= zsff3t*6`Ctu3~? z$uS2!AC6`|#e~~@{H;P=g{q(VPk)tt67Xfon47u+7ajYzZIAb=y~S|UGmxLGYQh!M z#Wy2qt*8v(gQOlxMfjwsB7l+yS&!OY^gDjGrVgs9*(dpr4bA;m^j&%DK7UNb|E3;? zjuvskJX=$LsOoNXyyx=fU2d%kKD=#>xUbr`rp$9c?%?Y#|LZQdHg~+?mE?|ByeRHV zFM6@bbASHIndjU%@4@EsJMO*py;EP;@qgBThUY$akMA2QNB+6_$ZtB1IKJOI;vP7^ z>j^EuV_=_Kx%sunz)Mt-8efsrFKho|)-(KjXzbSRf>^@hl8}e9c`aXNjoWJs8?f&i) zXL|1EUii_~4>sJLdh?CD_MLvsU&Vb>$~Q+i@o!4ay>`**{g1k?`Tjr6|MGzmTf}|- z{hMZa;hT=j3N^+5xq0kGgP)(d=rbMvN0S@9@B_BpJ!{a?WvOotcydzu4WH}y?=Lym zabKVM%8X-o?RCK2&C92K`}|d9U+D1rlr?$o`2&yLEp+2G&4(nuaPvj4YxlHoPCd^_ zf0g+6J?=UnV&#NSZ6|!QlYVMD={Gz0H@Aa-vy=bScJklslwWE)<=5<#e{(zK-|W<1 zb366d?9_jAJN4h}w4c;=+E267{!-g%f6Y$&O>L+BHaqP3_{m|4nVD|29Wzx-H$-*zn?C`oGh@w#KF}?$ZA~_Za-eUHZT09+Q6^KmFfxk10QK zm;S#Jm1k>g`D=IjzvmuPf7+e?@43g+zjmkpJLzwVZ9m$b{_nZRv_El|{_n)UDYpHJ zyYzoAd`$b-@zejk@G<>I$4~!v+}FqUKOLU_@43hHUvZcI@1(y<%)ZB6=SQq!#*f(W zvExr{`l&JFm$+~8;h!2a{^{_({Kt-;;_ffM)R^&C$L}lu*zsG(@2kJmnDJk``|3Y6 zX8zFbzV;J4|7dq#`%8_PzqGrr{iepuf8xH$*Zxyu=1+0=_n+ALSKR&mFLwUc@%#F3 z>O}oKA@)3*ns?XF8IJuesrxN8_#M`~PxWJaS3fqXdFWGQHlK1&uw?%1(O36Z zYR_+G3@do?!eHasd%d(A_O8-3AC=~QTM}GzO;eAobD{lCIqUdauf8g{+xg#BPx-x4 zFI+pYZq%Pg2XA`erNLX?SL*eZK^O)ES5TD#MVQKo>&&#IN*+ZuO4Hl zhf)j53Xi!Xc=9o)1|P0BRCD2;sTZEVFxd1=_|vI38>)EV$kE?!xjJ~~A1eo)`?8@f z`pd1E>ER24uU=So-jN+mb;a$szyH(4zYC5iYpOkYgsHyT+-q^aar1+3&wDSFHPcjs z?&@6g?zd+K-+iao->U=*YXKX6V3|m^@l+T+dEq7 zsBJGDf5h9D1Y7p5cpyG#slKQ7Sa;#T8-q{ZG4k-+PO{X(6Bah~eet&7H#dAZ^sU=0 zRg-hrZR2k^J9zNWJ#ub+$5I_GyDo9;!?y?fCVzWS!rpOekGmf)`K&x6IN zHP^cF&3D(;2G<84`~6Ml#Hr=?o&4x?i)IB6J#6?ZZ#KuN&W9ykv+k^=!CU)ZH|v4# z;#8;2cRsef^DV(M@~)fIZ)gW~@oPWz=rHW^;G2j3e)za>2i3W#=X>v#FADZ88vk~u zyE>?0t19|^H28|(_=E1*E4;abO1NJF2_7h69%cZVomSZ~3^XS0{Dr zZTnn&aOu+Eni*pzeOlZ}opZy1WADzqDR_?YX+!rLJE@7)uio|Ur=eh3?(@U{_FgBo zen!iqH*Ei1aF6G5mYkm$uQnQMx_9q&WpK-7nb*8g8Lw9Sb?ajT|8P<8t)+*J`S9*| zm0A3^W6%2Ll;H5$do8*5%Xk$`>UixVB{v5@c;eaRhacWq-C6cs;DwK`4Cdv&bHkaZ zc2i~DXzR^qUb?!o`cv}NQ-;=D6Rh~~_*15LNl^0_KYaDPL$3@@OC0@x zH8DXwcw9s6f~p0<=AY(HoOykMI(Nu3m(AYq!r(nG9k=9$j}z4I4j8audY_wu-|v<8 z@J&N@QTKMZ^8V!AZw!t-;fJqgoxY2D_U+c;kL~=zC7TumkA7it@|QEZsLFjWtL{H@MzCtp7aIb9=%OB6vT=Cly32#7 zoZsoF0iC+4+d7T9_3WD)gXb>$VMC88UDe%}J@!ieaTf>A9{iT|(H&jYWmg^5v*FRj z!4s}IWyn=Oc2zH(H?kz|p~m1hsS7tJ=kKZx$?kmFq2Wt|Z!B7N(|yZ!Rq=s4(^vlG z;^3jjm43ee_q(dk&wgRh9TgV@)3R!(&dT3SUH9yz6OKH8cJTE@*Prp&ZM!+0-=)*L zsV|Pu<4KxQul;FoS$r4ULu9OLJvPeNloEWpVse~7Yj=sE{jt;bzngN^-L{GDk}g#%4$l&X!^)c$Mj@ec3{?wiaTs7A*yXseZ z9jcV8E_TeWI>s@(>XuLJ_+0gB$Ly-(9kZ)`uh+p$VUButj9TWHUA2c}cGdNp?etvr z0>|vCV;!@rnvU63AJ^-2K1SrIXU3>w9J8x-bj+^$^oMr(u6nU!cGXFa*;Nm8%&z*8 z-bdhrrjEKiMm^avyXsiS?5f=zv#Y-MzKxHoKH!*L^-Ra?ss)bORr@$*SN-NaJ3d!^ z+A+K8^^Vz98y&N&9_5%_HQ<aO~8Gbk5$_oP0y-Yn%5!^o_&%FupzB`;FXU~yyMi9@7ss?-d*|LCoiTxe!xY0bV(uq;~$;W^R|~# z&suQ%@58I(N2w{-KE6xo%c)O2d*oRYib*f6+vNuw@Ji~%*LJ<>`{lz%sjWAxK4AST zsV|-I{e^d>9Xd*F%jwhO>{nCw{c_>9f%QqFRQv|jBlueCs#!(fz7-e(KFdg0h3cAEYT?8G|1YUx?T4_JrQAV>9AW2Xkoe9JM{^PiSeQypDr1%^0 zupoyz`PI?MqL~HVH%`CR0m{EV;p)CD>UTw3N6WH4wAZ!mQLVCRT+Z5oejQr&A&;eQ z+QHd0nI0k`&!E0~bbURT%cg1b(-IaOYuJZ4bxM4znL}UKvTQr?p>7|Nelo4g&>VUp z?a;0!Yr$T&)jEBAV-EG%vTg2&iS402r%cRxl|%PLpNc#^qER0rPtH7K@{G=!;1E!~ z1mas(nlTp?;dg6u0G`(RU}(JbNrGwIH>f&4<@`PR;Yi4a?nt_Pc7A z%;`BjYrd~!g|ulOlJfG2boq1o$A}YuK3W0w;o4~O`poClve_>8n^&Oy$h^YajbG51 zcG{=zPpN^&cYE~s7j*x1-Sm68P#;F-<8rsYpk6UwSL}9%?dAY=Uk#dJYd zSTU|Gu$1)+6x)P;fFej>87<#0kUnAkfc*l?W;15}0;z<_tY09z#QFj282byXuwqWNdD9#K00NFa$9|#gyA@&PeFu9oB@6!ZUi2Z~4f-Li7Y{9~b{enW_J}+hc0_lDx zvwneMq97}5nZJ?1q#EOA!hK$LPGIR~CP%XS|2TmaV!yzM>D2|6z83EDvTN*qzfWL= z*e?hcWa&_*@5#6+^H*Uq>lY}l3-@`&L4l>K*nNK%^Y>t~y}+`LOcwhE--Y|Sl=TZ_ z*O+{m-S5{iIZ|MmFY_1s1-+Rp_6xLFIMy$aX0!Xc*e^IL$WqoXP{cBMD&w(?9T}So ztZ2^US^|@=?Ed|n@oj;nX9QO4Wb#U;k7OLccr?>H2(0MJWJ9K}%eai)pWh2CeI&5# z8uLHNWY#Z`u43U>zd$;b$*f->8^q#Sv3Mp-FZK&`nEq$~pj^j*33ojUOXtzAUmn<% zB*OiG%rtHFYBhbNKg>&;+Jd}%&A3LJ>HTi$8E(r5fZRMu<;)Hm_^4;d*mV$I<~IJ1 zf%~ZD{p)9!NA?4`i)_)Khv>`3omZ}DFc8A;9+$WK4{9^2UZ;BIDHMGjxQpci-F-kiYD4PH=ECb=%U#aCaw2U!fh9 z5vQQlRgc!aWDWOIMVDSnAD^R6A^v;gMnZV$!PYa|U!aFudY5kA3)f!~;xug9MH;wt zgVCl7P=1eiF9*dX>eJ1APWmOdUVDUn+*acXEqc{-F=8~bjdZU^I_PX*d}nj&u(AMr8_(ydK}O*(@LT5pDj8puh$>s`}d0- zZ_>6MH=iGV43Dql!fVmDXug5gozLxTApYv-HuBrFyX%BD#edj?+)Xn*ES0K`)YbU% z39kR~M_S#|y+dD~wyo1-F4S+{^Xawr-Jx6OsMXS01NZ+!cjLEP-=$;H-{gjF0KLnK z{lg#KrIzOx8h$n}hW_2k^l9PqzIW(wQREx z+EeG_^48Dp)1L8jw2hph|3U6VWCmr>M*(T32N$;LLjv1QUPLnKv0>74wKMyEWBH=Pd0n`+tG+u;%QXr8Fq?-(4PPMG$b)JIfuTdT==?7!#) zoc0*`nEr^ovHI*$Xg`x>i|Xe*rq3FVQQx}1Gw2N^>n1*-YN5HSUEUi&`<7`vd-sIy zS@^z#-!llG*LDBfprwdQ=`&uIL#<|J z*Jv;l?(b`t1oY){=umfczp_cte@*&h%*WCk8kDIr_i10SFCEEMAB$&n=JvMBLTW?) zvQbHfGoR5N`bSLuJmdt&)3wRQr4P9wYn`1xtJ$3;hn^p(Uhg3%i#zgYMVZZ6VzPbV zi}eq<&!v4xMu7HNSom~!&lV532-;XN$-olyY71NL&g7yq7vGl19nTWQATGcplUuFs z5MX@O_AH5yQ15jzgR|{!v*~ML*Rv$4r27u53{J}+Z&P6_=~*J(^LpKl`&>J+^WLcT zR%c1-klfF%_qm>4Q6*nPR79h8-N=A?LKNzIV87F^kPF4{8DV(_Wh2Q@QQdnq=R;_K^O=xDj!w z+~%w>=MGn_A%0<8%ciNE)l0pr!M+wyA3<~WxZmc^4Zb9qR<94#Umwjm^KNm9lCpvw zQ@X+N`~Ps+cazhUEIkwB1?kBwbJwP&a6PXse{u7(`dN}ax~W^q4X($rzS{9ItwE0d zo@9K3JK@{>&AQS3ApJ9=-aB9CnqM9#3s?i?mDxPAoqdf{y*YH^_$E;QNe-I(cVFd( zj>`8sy}${|*K(WW-W9ITc8ye-{SC|;6x8f|=M^f8X$1h*t+_=?Ihwk=;^4*;j zR(zf_?B;Mjc2MuL#3MwtpyPS2&ls2U&mByle7#-cJkN1=8Xw}a_5X@AfUbE}oWal^)KKM`#X`AI)4UkU#|m=|%cWWi849x~$P=`cCB=G^>hO}m1< zNxyts^zJlgqy6XJ8+us3zK%!6p5p8?)*boQ8roNuWVIsw1UGcgS9#Hgfe?Si9*cp; zx$BnAs@>gV3i?0q+Fw4(op5%md(rwW*wdDk?fd@089blZ%ds&Wk95@SQ2AkQO?0B( zk=all+2f*Jy$*40To1l!VG8ypTUxjzU_U1xGi{JXTd+^!laV}S4`-AS{%ArIY|p53 zrC~ccvmpob7j`!X{m_=3BDQfi{V%Ps>kIZK>$cr7YBSe=NS3=+W3X2u`OvlTMs7g< z(T*pYqdm{-20F$U0hg$1mgPbLR=Ca^ZX?c}~qc%;%=QtTV#g5%MEp z{uec;b4G7&4m&*_>$fr|JReBQgy#V155}d8OBjD={Ecxj<08gi8Gm8?nQ=4_ zKQYc@{E_ho#_t)wWBiu!pN!uy&Sm_X@hiqJ8NXosobfZpIgGOzXEA=t_zC03j2|(6 z$oK(c;eRSbn!)7zjPEf{XPhRm>@MRwj8hrkW_*kBO~xsVZ!o^j_!{G@jIS`h%=i-H zi;OQYKF|1^z(hxAe?=YkoXA+pm@rmoGd*J|W5QUW#q^A&j0s~!ZKh`|WlR_=YB4=y zDPzJ|QIqKzOBoZ!3QeYGEM-g>D>Rs%v6L}ktf;~CjHQeTV?}kQXDnq*7%SA7p0SiM zVXRPNdd5=5gt4L;(=(PbCX5xTOwU-#m@rnTFg;@_W5QU$-c!pMOMkt$7RFyIyEG74 zcw3hibf~Av7fsC;eIQ77`!43RX`xwm+#pSm6&{74 zdy-brpCXDI119&U_uD1Pn~#J38_eQ&ZLJG!r?J1oyP43RB|2WJ;X`P0|J|;wv!MSB z9m>J(!{|HxacdUjLH~#Zjy>IXBwd*P?MI=lF~|z7p2lu8qA+Xzje$K;pM6Wyoo4N~ z9cMPi3gn`Is4ltpK;XLEWUw*2aKnYq>YOoj;G#cYfgCnFaLgi4Pquk2dr5b_V%S>4`1A^l1~* z;3Rb{Z_<)1{mC>&wl(I~){Y=6PUz0}qw*KUDY2uWKTlF;3@Y}gmWP{#5AT8Hi@mpD z@)UaBQa9+y5$Nxc^p`~efpn%s#ebF-<{xsPZJQvfB-<_~Nm?q7h(`&*5TaaCzJRLHXa(A-s885-~Q?rb`d4qPI|@I$UfgwnBrbc*?Md_K{*)S~A!`l0Ud+}#w*V^JeAe;RE+&oJJ8B$mga z(W|}FX;2Mo*@6ogKlX=Vd3p(IayPZPB33 ztUfm#K$fgNx@;yr?bX4)`MJIzr=RcEe-^#FG5=3nO-z5~`DC?lIz72dtm$jCucND+ zlEW!iG*)LsM{NJK7TMEhQT=Y=1zxd_mon^G$;{NV8EZTu=vHpIDjNYrBvN)_3+K0B;;X5)q zedO(7t*l`Dkdz!<(kYULHE%z)`+2P29)?pEMbdNLX&*OEKshgbaBd{+uRitZ$pt98 zp6_8BMHBky=%4zAJSrj$2)6Sf)h4wP6QR(Pt8j-Um z-CFMpJg@cA`FJv#PA(qyvG6OF=Xn0}dNK4{euJWWBeDL9&OHi_q547GYxCCl{LpF6 z{o65g^V?>9;)g*0pTxFK?=Y8kKV7tIM3N!M=E>;`=2GkHk0-x7kNR(e`xK5b3s$NiF3YQ={~m&$eGZ>46?lLT9sgK>(%ucwE`P~oNK&rdk|+$=CCv_;E1p zS%U`861}Z~UR;5@n>;RR0LU%}%{zH<^)LLft5G*>FX`R~q2sxA zPu0Gfy+L~@x;*RbIPUo|*Ym^ALVucgs5Vv~$7Od~8C)>CKFA}+oN)5wZgv}RDKQwH zmq==c%SsRK)6L$Ow`*hkz~{G4xO2OwY5!><>xlZHU+l(m_X>}$UepuwKUCe|z8iOT zk^0t@EqwcY?&3X~i+yrt=VVKGo+J{(euX1BePa#v#~rbJE=xv5kKp`&WSY-)#ODcV zcW>R{T$Ah0rAb>lV|q;|Z63;PIO@30uN2dZxAHY{2uJb8%y~Qn1FMZI;*@`=L$|}ESOVrCQ zggvm}Lfie>t)*A09OUy$^t*G_!Zhq(WbwyyaIv!~cO=2N&F$Xsd`4t--|DyK=Jpu; zBy%Mm59!^oUIXq&yG3SW(i)&#(Mj2Q(F$8(-Ds%|TR+-bV3`$@rA)RISlUNmMQow1mmum|QF{DH2%rg~^|pTp+MCUtmQZlRq-~J(J%FOx_AC zd&A^hCchF``ch!Ub0$Aya<;&-EP=^WCO>BKBPKr(SehxY;y#n_F*!|O*sjuQK_vz_LpMlZ#9~&*XCgD>#9r$xN0r`HaBiw7{~HOg_QnV@y6O zu;Pfo(!)$X$m9b8ll=nA_A+@7lXnR$-6^nQJCnCDc?**_3rvy(mL)QIBa=4>EL|_K zVl9)`FnN{0vXugp6--{nbdw;<5}AG@(=(PPF#iqA zpRshkAj{S<{aU7HEM3F&tC>Gz=_=;GQeedjre`c&&h*QeKA!0r%a$_#CCs0(bg>}I z;+TFB(=(PXWcmfnpRqKS`Og3-qGvhs%?6U! z5}$WSk_x$M+3E3dzu~X&`3U7ZmXjVW+C8oYKF{F1bQzZGu8ehbYJ|@#rbP;qRg_zl8?E5Q*nHP=+{mnbZ<(JbGI8*NBKu> zsR~`FBe`GKpFe(MZK6sSpBx$zHOL6{BkCwrsf%ylC9}rz`LETHRipOPGP)P9Hbec3 zx>7Y7bigm?i+_8RRrRvfXp3!~CUr0FjIx)0k~+Ps<0Lt|gpZ$I&!akh>tFILLz55h z(m+y!c6Dy<)oPt4hF@)Iq)j8425ooUVWMXepWo%iQcb$o`gB6G z6uy0fo06LJ(dVg=X>YACe!J$1nsj+1dsp9syu3x?QHw61(WP3ugYE9d_D6Ya zQx9GG(OrG$wdQ<#t!$>yrRRG`xGv0r{~y5vOmm4IOFjCyLTs@2Gr=zxN}iN7xl@V0~^qZZQG0v9|8ZjgY(Zc zwE^8{IdNEVQB#yN%uEcZp7YbbH;efA?aXBcbezjFHLId%Jl;!PvkhpZ_I~f3G4OsJ zrU&gVZAimM&x)GUj;~Mco=FYqkL?X#Jvha;XGpKShSYw{{b!{M`1WgU;nIkv%UV`o}k=sT&{ObeoIgYb0|(UQ=oklDbCaF>n93oL!pHn$KFFz1Ea3f9Rm3 zW^~&R^H$OW{Pk#)a=$kQ{tCytV@yiZ&>>;7oE-!K1yn@$roqQxTZ)ewH{~LV!-tD|rLLc6itkcNh z?J3vfs)X)4yhHcUT)upFP4gr)zUAptIeNVO!A#PE%HPXoY&U}U`9xOR9L9qS+;ufy zH$(f9b?Pc>LB}jA41H;f!v)idHLHn2KTkkTYZIgq$j||4~GT9iLOhekVT3o08efaY`*p?X4>iaid z50;^Q$P{)aMzl*G(+|<3`0KN-gNG6I316gfu@B!~6CLA?XwILHcMmMU`XF3Cg%O== z?wwTYJb%7t_s=z=WzT2DSnR;@YgwNG2CZo5$n7rEujBnumN?L%6+IKF*RkCry#B~k zUBX(?=o!h)?eaUJ+;LD+E9%y>_Ql@yI)F^p3{GuD&Cd56RpQ0lkD4nnrgKL24{xqj z1H(@pYGO=>Up#a6O&k7rcMTh1ObZ5|f49JqFK@FEv7m3NsH3UJ+wYo@Cyi;fn2A?g z>tgwc-soIos-g3++6=tI9^8vq;d7R zlibD)IeKkS)=XbopS#pVWyrR3_`Z`|NO!N#$u%u6HoDJ;55L#BK6iRo?c!Tr15j^% zzpNfN@%&-EjD|SgME<;gyB=qDsAT?5@C-j~iE5-0>4>^6V#~#x% ztC+qhM?6}p&zW8ft>5>CKFVz$yX$j{&m5>V@_UgSvIJwmTc|Nycg=jo|Nfv zcRJmR9(%qc%1xi%*5e8ylRh55hvQ9T;nRb9Tn#QiePgC0${n*J^thvXy~gx$#_A_My|A6e~dffK-d2QO;N>E=r=c6vy@y}s%!rhyqyeo&(<=!^!JNu%$ z70TAnmg;i-TRh$sH(=XG?sykf%- zW&0ga@BbpJF1NblyPDaNeEqAuJXn`IJZ#;^Cjor@tauqwmm4%xXY7{{K0l*Z&ULxE zdMB!1h{?zLIP$7_UG75i`z+rSKECwzM;)&Jo*o~Ts)e-0#+?0dEh7bEoKVH>>}-FUgf}ubywH4rd(t>f7PNoiIN4rj8C*ZH`^Z)Lwk} zdFfmo?z*<-d-a|DP#<^Cy$-kJsgu@CN4|dJ@0V$Fea=dwP3rUZ7oV|7o7-VDuT!c0 zcPwvQCe`L<&+9Vy`ci&;bKZk2Ev`j)Cv*MV#i(!haFZ67eLQA%R4lJ=_K0e6_AMv* z*R+KHFTe|f$62+xdF`^!9a!#+a>?U}+MJ1&WJ|A2yqx=_d2MdfhW%#!7x3XzpK`Uh zK^_tR&l3r_+4aQ%cT~?E;vpc(+%1YjT+vRXIxij+)=I=OUhx+Qz z+-q_gu3fHgDeRAO_OmigZpDC3hwpFU+w=JIO`4pv=!AReWxl-@zMz_1ebWRtpP?`D zct*U;(%>$<-jWqq!ncp{s|XEl?v;Kg*M#xMm-ni<2A6Sn-{nR-n_&9KUxT%VWjF2Y zQ@cCLJ#r&za84VqOdDfhi}JVJ<~6u=!`42jeTI*J@(ov=Q~9HBb;UHk{K0>^SLa@j z-~9R2VLrchZ_CuV)m@D>49@ZAU-sKg>Riwr-Quh}eEj9_s5;lH(Xzn@w)58$>H91- z?(vdMMs?J2Je$0GAECx+_h0@*^-gP)-9At?E;4n`tX1Rq<5&HdRgFu^H?rM7jklj2 zA0w)9j&G*-ST>jsZuytJf97d%P|Ck?isG z?deXY{PoT49sQ9!Xx9-9ZH_OW>-&h(6hd;4Xv8pXv^16_Gj*M^30cq#^2sG5X-ajOIcy^ta-(EI?l)UEyUt0Eljqb zXDFj}`SN9djVMUoF}vgR2XA;;R>b8e*Pebj=G-K{{S1oBJ|z!&5mr{CSp$r}tC)UD z{&F_9olZ@BKS0dCMdT&#dhuqF=C=+g2Y!zDm^|lk^3ahIzP=2;M0`k2zi{Wq`V;)| z=zJ}EmmD>BLs{TS-oA^zM!Ze-f6_zeyD6VuYEjvnTVbuYNCkp1gnBo4ymg`SZb~r0iL8 ztAFi=^*mkCShFuWQ>Uye6h6 zD=B-B9Gay!AXZibWoc>I{p58AdcN4I;O#%Jv@9)I<<_?|J_^#^k8azrH{be!2Q5{}`7Zaglx)?zMWyg&CIPk1lFw?{bW*VdZOQ z-RV9jgcSalfcss$eBa%tejYt>^W^%ro*OJY`R~B<=opRBL!#q@=(SU2y z8#dV*FBiTG&!gT)L$^Jfy4d3BmnUr}2j)>@i^I>dmc_}1@5J+HSd@5b|JP0z>uI_+3%@zp-K{qmGN8sz+}{^Mrx>^t&2I(XKl)(v_| zEgGl&I5^>Z9-Vb|;KlbFCd&u$-<5x&JvZ3&)VZ`;o?_~!INRT2&MV}DmTbSecGM@Tx%b1VNzy2bS^RhBpJ?d9j8j(ek@7zm$Mq;)_=!%g zv*wPW&N8|19r`Ew!pCuz)957@>27K<*=Ih{8eckfoi}8iT=*{i6SeT#LIPA0Et)}mBkjTAJ1Oq*gT)U-@bC?oZV6EyY+k;tbXPA zoI~p@=#C@Kw+7|YZH0x&L(eT_-?8V@2XCb7x}1%&h#dbpCo3kO&eo!Fy`0v|h40$) z=}_JM2Xl4jS;Rkhm>O|1pKfi`3g=mvW;&GwwkV+CY6eSQCoE*&!57f&BfG`4XuZPX)28L_mxdM4 zHg*HuKDaHC-{8NCFM$4ZU+&LdtK}0i)%_2|6;Qd_I*Y}t66Ig{@8k>Uv(KLQyS)gN zzucvFq2q-DdZF!@?nPyZa^buA0(vGfude39g%(X@`_yc|70`m>Va0~2Yvk?t@8}C@ z*m9F5z6E3DYj(Lj_-tB8*UoT%{^UxeT==fOklvPkRGYcM!D2XR`rc|%A)U6+>rVfb z3G6%jLYg-&{`l5&Q!SpRW#qNnT1bZ_-zgY(V;%eMzK}la`|jWx>)94sPfFJvd0a@l zgiVq^dbieMC;uIOA$>l4{E^ES3x3>4SbnQ)KZS(C22_%nUobp7a@RZ;A_ebC$6 zsXLjiwm4xoa-s3H&veT?-^j-OE!cPbpXr!aGLzyR8!R**Pdk;P{)O5<9k!wGvla5W z{CE9d=<1`=Ip?BR$R!t2%; z%krzufgTZ{f~Ibp5Ee16`5ue9?zwGY$l#mLRhnW(%!_m$ooQ2&mT z?j|;mz*jnFM!nOjV*)L78(F%xRx6_I*7%Q`7rtDs$ImNJL^I6lr8jljDBpj@(5{hv z5&eGCYHQ5>SowQ?o`E8I`b+wTqRX4)>n1FGaAjc;?R6}?;QY#UY~Fz)YTSR`uupGR zTg2HMt8aF@i0*m*#%%1pK)EmvK@s&^^L&e5%3O=fWy@-f)-R@ptwwa3aet%yB|k4g zF+DTqSmYJ=iSjywuimg3RZM&4ZC@SUf12EdpQoUhrp|2~KH6ZT{B(`$fuE9!soASr z%g#<+CKu){D5lBzL5J+Z!!6*MyW#lUVjAG|D(t#Zn1we#kHI%;cCX18$B`@KT{`xA zx54Ba-P`T)Y&VnD7GwB%4ZhJFtHqB3I&YMZ_`^gmamF`#dHkj8b8c*4^BjDmrlnuC zuYHTRm|2jGje?xiD`+34P+=vcOv>(qd+6 znfqR839WfKI=j2=1~!jE37lUJWdmZDTO4~`eWm}>5^CcnbCB-~V)H7L&_|AM?%b#r zYVqyDn4z_@N@(!Ls3E;G7t6!>c@|1(!ps@g-Q@}L`~_MX^E;Q)>2o&*&2rc%7v^0k zrPaHS&QN_HWwAE;TK(s;Qkt9fe$lyR%jCj545ifUn7=PEOtA1cs#4G*t(2ZO$O{|( zaJhv$KQBWm9o^r+`R4Xz^0u2l>)RRspsV#~Mz%h_MlQ_L@PjT**)3a;7;O>lbmjY? znLlXG;@a0+-dk?*ke|2V2VK!7p@CsSqWsguB^@1Z|DbXE>mDswksuf5ari+G9p5&u z@XAJuHK!+cZ{MnnS})P!wr^g+=5;8e3pZzW%t>2kp`Vtzs*?T0KF1Zv{c9y$Eh501-@8S5F9Uwh?U%`p$o$@JCLVJ7gobLYau=q4sI7g;RK>fNSw50~LGQUfOgcX5e@I*_!H#mXQS zf$6|~e0(%CYJ>#_P7e$$HxD?dtDL_YC&>OaH?dHx7qd<_PQsMu81?^YCm|KL zHZYgFuvOGlCOg2)?!Vh&$X~be;UmefO@;iuO*w@q@@rEie{U1xOa7m3d*R^!+NwVP zr!7Dw^5>@VH=Wpm$Wbc4HdU3sw~6updi4KMpMP}*U{3n5i8-S5YhQ=_%>!n^Du(}i zNBb+34*9h&?5XgNpt8uQ=$N_l=Ep8rxF~M%lBMy>maka3YW146>(*~b*qFE}Y4et? z+qUo6xoh{Hz5DhbIC$vrkw1b2`PQf}V5oqFeP zTKc{F8JQ0rK6?D*X;ya5v*#~fzIvVe=Fhk9-hcR*_bI=i@bj0iMaAE~mz4e}`!6rx zQ1t>0e`^7UfA{hKyYv4q*Z;p-K%;6szktTS`}iFkdineJ!qxWRkA>hmNCtqD;LZ$i zWWa#VUS6GH2b{|QLaYF=YzM4A#V@NuU=@#_`>?3T6!eDmJzxzhApk7*0W0;vpNvBN z_%vV<5N}KimIU$j1BTT>#`^%nLLtGSu=XkHVBHXY7ncWt^a-SkX%a{a(*XoPycw7V z#>coAhrp^Mp}}6D!1RKB`8`;VBzP+GgXKvAyqN&2mGFD8a0#!4HB1DCl}jKlfq1Zf zt`~uD1j67NC&V2VL<;eoz%MA{4vSvE(#OPo2Kdh~1(=Wt!LULG_)UO?Gq4QqJ~INR zz_GiJ_Z){6?B~Vwg2=C{fs2#C@)}qL1eVp{8J5-H+1h!a^H5hKVrn>Opw&PEEGz<# zYy;s<4Ttdl5^Gr2*Uvk|TOurDB5{IcvqGi>w}vnhYd=^nOyc0{4a=8}_n9HF@t!(9 z*f)@=iKH*CU?v2z3J&(10g;sbeg&6!hDh2Fi7PDRSs@V*ewi)_Te_I7zcdk=(5p4^ z@b?UW^-;Veu)-GurSlc39G7A9TNJ*eg-eJGVlsV1OYf2p@h ztBiQSf|qbMdczV=UfyT}qsK_b`%Re&3*iXIS5dE|^_b!x;L9)UHr00`w!4@D+D(A> z^wDFW975Ypo4~LCRj%cJW>Y>4wE19HS4XT{TLJxeHE4lWfPZ0^YWegtBU+R1EC&7+xlH0#4wc>0FV8reO7u1#A7Nf z!{!+*R5>ow^(!G}m);XRap^tfBluNSKhx)%tg`q*;mf7!0p`y)0+z4bIm=E~^v8vI zr%VvaFb$WAgEpHsj&FVR^k9~N`yDOY0SG}mVYb8D4X9v^XILE0&v#+~TtnU6VM!*) z8ZP6o9~ctc%^Vn34aDU6uoGaJB|&g^$0ZKMeOTk}XP7`w^cK>FHK|~EU3Yi9P^#0Jm<&;cL;=mRtWFeeZxJm^ev0qz%UiDIua*#?LQ1Oi+E*`Uh=c-*ojffsE_ z2tWex0Js6tF}~eEk_s#Xc_oBf3y6XJSb!fO1$5!SVSo_;SAY}11<(V~<|h1871#^l z18@M?;69`i0tf^60RjOsKsX=<5C@0_C?Nf#fPH`@KrA2}-~(^~v;k-Uat}C@tAK5Q zSb!J62G9gR0D1eJ$veOcKsw+MU>6_(5C;eZxB%J!2q1GGK!GC-&H=il~-fpn;-6Xh!!7BA3a0W<=7#2Uyz37zl zRE~rC?D{SwPbnQdHUjNf8z3GVhNl;dGE(!hmSKs?b^gB>T3-72Jq;rM(&uUt0e zxR{0n!o^icF9GCz71G0Sm8GW~7t^zWaF3PJ!#M9iE&_jK1JH^3bR|9dUy%G>KdI&K^{tG` z>y`7z^bfZZ^teA8_NyvKHRJN>R4ivRlk)nj6^^67S$TbG1^vn{<@FWQ*XmkcUorjU zp5^rwF@O?q`%iE^cD2o1`F(U!kM?(K;Sq4I=qIUgQD@* zkJ_;B!@`T#5M`b1hpOA_xYzH?^VawG`Y)4zuU{QlULU7apBdpc!n-|Kbv{a#=2FZ34=l#j1mzSM&@oRg3caisiR7F0Ze6{Zwls=&>x)*0w*}sbW6% z-OHy_F`vc*%j=cf*?G7vnG8VZ0ewq!esX7m{e*DfwE*#2hBu{?-!TaLT1904mI=nyrxWT^DIdxK){L611>J{qn<i$Vja>1&0&bi2R?oMyodOBdcnA}R~N6ap6=#d zI(gx+0v}?q_XIz9Y(x8m@GLm=*kRv!fQzG(?ckr`r>MYM&=3L!-n^WA1H7%sEA+t? zp!tQ(3E8ab04vw?OM{b*{JyXZ_yb~#tBhL*`-b?!5XBJ45SNxFA61>aJ*Rp9#ot*K z(j78mDh!gl`uclYO|^q#z&)~!Pj#@jkZv*NKVXVisGqk36w1#V7Nu^XHpI^x#=<3- z1}=SV<>dvVD=@sQreYiBD=uA+FuR)ZrED#Ch7XaLwsPoZ|;`93rdmjt&W$?SM4Hl?|mtJ1pgW+(|wN4nzv&(-6* zpu`)FLe&v%1xDW{dwV$sj1T6=ZsBy@UOI10ZSU32O%YH6*#C>NwTLdtB(miQd8D8tkrONm#8|6Kfco zX4Xui`BVf8wT4UaDkT}r9*)FH#m+Bust;OD-_QvYyo15cNAsavuwlqx+_%EGdU!0( zwgYhg5tL*YjwV?{A};XuflL;T)Zcs5lmKs~Ro-FsgldCB{Dua=(2W=Qf~hH=Z(y09 zRGp@H!u4Prygr!$@-b)uIL#sTnH5iLs{pSdfxZDkWj3nz)An4ahz1E$rwoRcs*j;Z6=x;SPpj=|&jJC4JPBT(OHl>B!!srBK{Xl4PvUoFG3As4#Z@u11b6p$6O5OjEWt}tY$}i)a{6*ksZ-6u_Fd%b|lcojvVS| zM^c^bh{Iqz5LVld!MgUkq`pJCrNG$4m#3y4Zol?sXv9{oxn}Kv_bdyb6eO#h!TFfcUBQBz_be z@AzMFUDh~|9vg)^(3xuYZ?6Z3@lZeBP)!sqcRaH;_>X^eWL;YNb`ne7D zoDTIr4(iYk-qo`@l_o&_Z27O%?Z4Z;epjy}mi^V{{yXYc_STW0P5pP(ucC{?Z|yfs z+mZC><_Jq_IsUZcz|!*PbgHg!ULR^#{@j+?{pZeaA60wOM*Z)f=d!U7_BS?OSzE~D z_GDKwTu1O+23zINXRufPoCcf4^BV0|w0}j`U#}HJ(}Cn^I}n+~0hS;W>JjZ6uLWr9 zcr8SG$Lk?pNAS9UcF$iM!1nPPiPx6c{SIX9bq5lb>p-r417>yZF%;T*3SfyNxtbuf zL12a>K^w@`>-XDhl31Rqu1jJb|EJpZF2p%+Pjq14#0~U8 za9)7i@kABBKX(6Qu)3r-Zv|rC)lq*$Nw>h-~06wTOInk-3O9|zr4!rWmchc zguZQR6}sin>Foi!3FT4}1kCR$==>|up_ifx9p-nk3LWORtqR>E$S)RjFw|G6^Q%IK z`8idg!~DX!4I~pQNfD1v3h}&{Zl+Qg)M34dy6F{kCQ7=n3OXYt9slQ9rpGi5lytL{ z;^D4XPJ9MZcFN^MT~*~oT~*~oT~*~oT~*~oUBz;O7g>Nm6`WXS-ps$UvWU9M$|CA2 zmZdh-nW&qslqcp#lyu=0ba~M3V!Q}t9oR&66*{!RbS0fkDIV@#RMO2+(qX(qRp>BS zLKQl+-IywL;<@Rgl#f`ac1G>qgM+Nq% zLWk|{R)r4R-L(oG+8Mg#0#*9E6nqmaXvB6$-KO8@R{lm8{~O)1Ds<>QrGhRLWU)M= z4s8ZenGUK7hi59);rn1jW%0n9chlgvs{AU`iTPEg6Z5M~$Fk$8s{Bw{Q77hCnNG~F zG9CJ%gI6qnNmH!P%5-9WmFdL%lyxw`T+S)iwWt&Gt4t^6SD8-CuQHvOsd8Oc%&#(? zm|tZ&F~7=mVt&YC8&%A&GM$)TWjZmx%5><5uClro>$5VQm|tZ&F+XKpkdV#KU*)BRgh(~0?2rV}$%uIq~VRi+d3t4t^6SD8-C4_R!#iuqNh6Z5M~C+1g~4*k$o zR@Y*ER;Cm4t4t^6r>qMWvibR|T-Tyb%&#(?m|tZ&F~7=mVus3fT`|APbYgy$>BRgh z(~0>Zi|to2zshuCewFFO{3_F-AG*rwTCC5?bYgy$>BRh$b>clv$c^O(_jq)ou3UZ< zbmj76I=t&uBkhSXX-8TE+5p;-RzH7n4`Bdk!1hHyBajg&W8C_HY5+BWI-o6}t`dwP zRCCgjNZ>B40x23miVa93(u6c4P2pXI5o|3WOnunkWeB8E9Z&5LFc)KcYLx?LGTIn{73@^8hfYJM3+ek8!j3T3zHa8+{W5^gXmbk;_!Ec_# zlZ=O_PH)&I@Y_UqcJ+ZiGH#RjO{gcKza-jCWsG)%_J}4UqOx%R89z*09e{DMONv|r zpuzSvnOu`G>O|Cnef)2j)^DHR9oW|a)Mb9?uUiH1P2ztB`bzQYDeYsq#d6?2 zrj2rafLMkGux|ip2xtVrF!&ZvEJqXA$M0X70h$9O0MxYrv;-Iei~y|w=x@vz_c71b zjK#8G{{P_r-8z8g=i6UA$1Af1Jm;0qQ9Mt@b5#tF_JrrG2$aQhx1tWi;Q1_ut%@;i zbZEo)+nRJ#>7deHr2}w#m9{FTur*RKgkOnDTe#bFfUSXwDTLKl`2p8yXVL<6Rs_T0 zb-E>l!+qS~zir?T<9)pLm#+rs97rRThAP!n?BTzADk|Sd3CxL65BvilY%pLnT+0LD zE`(=W2`Pm;!w*tG^5D8#NWPO|@&Ur+k$mtgARoz}^dsCff+6=?9~glL3CP4@=>|uP?}^DxQ!Fj#YW^{%+96um#CfWhC5}OjRgg5m^OK z;=9QKNbNlQSK$tMNM1l0zCx+c#Y6ipgKar%D_~m*Tl{agRgj_(Vm0uZO2e+@eb-gc zi7}hO^{IRwVoJ)XttIPz=7gcwE5#8@P(Bqws#+&#HYlYN&*vccB!K@$0CFN921hq4 z%R%(R`m4?N6zafTqb^*f^#IsssK@tG8o;%>AzY`$t?|!2(Wg8&forz}w!u(8L*P2C z4cF}!aIJ0+mfI1w(a__-&5U$`-bZKXahQ^>(EsQS{fmBJtE0&h=wbBY`x>3Vw=?K1 z$UM-D1^dSog!t}c0EF)Zy%bXjzXbAI4EbTt#T7KzccIYx=mb3&Q%Ko~@5jLVeCRLW zkuQQ#S?tYtgU@_OeJ;$I6a}*)$w&mmo&)ws!TSHYHHSM=#jPdWl`3wAaNbnhxaOU&P&lGnoI*IZwuiaNGL#gi-U7) zDx8x+B#v!M;cQ>}bDIKZsXv^jlc5jg3q7id(7PH3XRHVGz}(>M90h%}5zvPl23HBJ zO&7Rs8H0aM=tG+Gz2Y{!Pdwj~tphz#(c1od7;P4v*!%tOVO732J^*^|1K`?Slb343 zd4Oj^J*aW)v)AYQ^C&lk{f4kL1?x5f`*w!fGXlFsYp(~4XHPS*$^QJA@XKxoL)d;` z#jU`O`$6qnf+bo)$Y$`{pXdIt*Aeziz#^P@A9%M0b&VD>AMDftwqancGTu&S@vT1% z+SmzNH5h*JN?38jD`UkCuap%xymD6D@QNpFtBJ4$F-B=kCEHrE7VHUse{JjFN;n0u z{^y2wgGs!!fouRf!{1+90$js<0Lt4&-V(jx9Nx&bM6k=mpBq}JJ6tEwN<|wT3fF@n zV5cr{j#2>z^nq(iZ?IOh+vf0e))=mGdT{mAfh%EcuvdJ_s`1}!weeuF%KweR zeYg?werV17`%LJBU|-=c4*ao?QJEXIh<)o*nerdMe_IWBL%U#~^Zyp7jt_1Bxc}>F zAiEgm4uN-x=x`t3ZKGQY`}m&%aUcIfAnu=3+QJAZVTKE9tr zhw0<{IB_4}zlr6F_63in@bS@dKv-<2d&|U>xgq0G0sj0Ji`(pzvKgaF`|Z3xK_V@&7`u!1&)b8{iUP zDR3FE2{4`y_^g28v8?!wxeRyylMdsf!}B29#+jr7M5n@bME;NZR~4_SbgBw3`im^a z|KH0xRXX9AB~`lr9d%Omh$Mq=3@+kj@O`vV;@S0`@=~O&HfrbE%Rx1F}&HC zBa|#|n=?PhiZu)Q|JSv9Z7uAH{c`_R8OvF*tOh#2@`&96eS@7aXXP$uGNO(PNrL<_ zJTkU5-b=;ODDTSxg>>^i33`_yu41tN6ua2`*Ww?l4f7}hL{}z-d3gQ?#PI)98D5C~ z)>Zr(xf*j7k5_y~SMJl|6u0iaFn1E(A0I3juBNt>euXK2xY7T4!bLHv*Hvw(|tPiXWoC11$7Q6^t2lyzk4sdPI z<8yQgq=U!i1dPu&4!{!NT@VhR5B)&KXGSkz{2!1S#KY&BeW1s}mO%U9^HCu%J`cSE z#%I+Rz-V5Nf${k!6W9+9<%l$tU_=fnT)08olImMFl4AU zbTW9EChiM9_zOxf2Y6J1ha;>65(sBVEC602{Y8iR52yo|$8K49*yJcP|7^x(Wj`X+ zM%j{@fI5JBfJOibz!=a0U&r3YytfMlK^u7s{wle*8#TyZvY4h;0WL{;3*&ipa{D%2JCWvkcL7xyLd zmt^xkQg>-&)F~-vac{@%GRNj&=hLK9E@#KRkzKPty<(S@eD36-t$Qy1 z8kim4SN>$l)8dWa-_F@H$a?duY0p#g+jfqLG`4A@(_l~00iEZUE`GClyEDDu>)V`u zGgsZV^-j66Onb+Hq=wJ8+G%+=s2v(PFLc^9hXEt{zSy~@XC$a#iYa7-`7OD>R zxY#Nbj+fj_xtSuk?=+}S&5W&q_)|njdG*e6Uc4qiH~KTZkk-Mw;j_-VbJ%Qsr5#%xbkyS~+Q(`U(6i{|^z?AWezBVT&j8aZ&t?q@djkFWFI z2kbRCM;ab(QpebGmk}x^>x;@`(-_ zKdJHI<|pW-9!W#hbrxSIBHXpWcr~KK|?MS2k8jo>9B7{i&4)59fNETzC8~ zmE~sbv6uYT2Y>57%0DOA+y0J^oV$MQ=DPRy6VyBYu>GH%ZefgjwKHg6V@HjMoIH8r zqa>AI{sJs8boxeZv$=DGSM~|31a>AI%TVLSb?_uk6|4fIw=NkX#eu=V# z4?CUh=*0>4uk4Ro|KEOYXcr0g|Fb`C{eK%f1mV}A0p6~m_(O%|zu{u|DJS@uGtp1^ z#*L4jFval051i1ZjEagJKXOWY{0xxE6Q@iZ9ov4?#PQn5DdRg#<@|i{F0`?u@q-Bl z;k9CTvz_6`bs&D`1J!+f8GcO2lvw*cVSn+f@#TLHe{)LYs3-B_y{DY7V^e=NIdT$y z)=X?cnx8ll^?3 z9NTHsD7@;=@EbicdP=09$vWQt+IRou+h6~VKk>Wo&N|+8t*qnio5o*f9dE6t8PX}F zQ($0^-rYk(Z~n*q{MrUK5qN&n$Sb5hcaVF6dhv1m7QRf7#P7sT(m*LpS}J`k{VI9L zz2%+q2l6rb0Yy;)wID563(-=vR4q+gqor#ZTBeqzy{%{Kd-MbP=lX1;of&OCZFhfP zU>AHE#*N|@a|gHr?mMoSyTV=L+^8q5Me9>v+Kvj;q(L-^E~Rz(M*LzvSxl7XNl8+& zlp>`{Y0?@gUCNL$r7S61%9jeHLg|2LP8r{+b?U zgc}h?lo4&j7_mm25pN_IbBsh|o{?lE8!1Mrk!Gwh(v1uw)5tQijU7ggvDe5o4j6gH zQRBFgZxk4X24^lYOU$3lN|tQpSf5(wE&CwYYxWqKNK(0eG?&lg*Gj|Wi*i5Zc_mqS zRmo8D)dICpEmDis5_PUts5Q{X>Ph;mdJqd{A#4B(WuuMpMv9qgrkQKZbTh-uG_%ZX z)642&^|IG20C*9fGDs%LBH3gI$sv15E;&H*$Wd~fX5lB4AqIaZF7RgIh*L>4fs3=F8%YPfh$r zLizLDMaFP5=__;zeT}Z68>uhfpP$7~5|#)b3azC8X^8Zav_)zwU(vjDs?XA8ql@vl z@tJYLC^J0F)8<9<8lInIb+#U}##%2}i>+*Hua$2V+4qs;{Nrjt2pLJnli4_L>3Fhx z$U$<0)Zo@}`?$m0DegS?Gv`bFX&*X_&ZIBX{qzW}!#Cx}@lislR3=@=P>P4_DSOHD z_gN;~Coyfu&8%Z~Ggq2> zOlDtCTKO}h5;DYQQfKKQIY@p`VajM_uCi0P ztejPSwNUL1El>MZGxd1=ENf*1@;L|Ab1UbR=q6@JP7xC={LC}P7 z;dP;r__Vk}d|xaT8%a+|v!okx8)c62vQk}Zf~qo5i`ABC>$Rr(oB9iEuF=6fgthgs zR$8tca4dXXckJ?U+$FAz8%#IypW{k93YO4QcuCkRye?Lfd?h0FLakUPUzdH9#)_}f zLTRJ;D?|}cxtJ251S&yFuo9vSP(qb3C0vP6qLgSQMu}D8lz1fpSCgpBQ}UG}rMnuY zPE!-r6>42QTtA`LVqMrX>}__64Kh}vM!3wW<^uB_bEkRGTy1Tzwpqt4yVxb;I!j1P zt{?X_x16g^{pk02j@kUz{I7f!p|;RiXe~&BE_4$z1b4B!*jpSZt`)b6IpW9S1*}W3 z^cE`JcImV~ zhq&*#QqG4qp#iij9ZM(R1bju?@c#TLel5S94-h5^BgL=9??rd1j^rm%?9e{aW6}!g zxO5)pqo&+M_Lr07SLNU2YRY&#(G$wIN>6p5nyr4I`fE(>h~w+VC#&%*1%ErKQ%}PB9iI2}w7)qs&-y zj=9a;WgamL%}eGl*cA_2wn!6zRp>#6a4XS?1`2V)VS$MW;y$UJyj}iQ$yJ}zlC;;f zE!uAF6X$wLwTE@0_tZbtXIm~`H%CXIwp7vJNO)aFQ3aFKz}~UALsM=0{&KQE9J}h>&|+6 z3SQ2d+v}YyqzI`(n(&=aCNvWjF+_|P=iyX-A^J!s)H7<9maXm3@=^CZ^xAq$UBsRl zs7LBg>T~tQ`dX~yhx#%7y#Bp@9V3Gt%#(RBZ&r`_u*O*37OV~PXM_oC8B1eJjJ3u` z#y993VP?1)fwhb_W3ZmM*#I}>b8Wm7j(t+b<|!!ZGapCF0xSF7(uBsYL!! z?y2@shp8{1KE1CVQA^e8ny)4SnLVz>XfJ3hwRg0A+I;(KhPc^n+EtsI$8F^HawXhJ z`VH?cR252v8sdXu7pbpQMcyZWf=WL`c|iM8KczQgChN+cz^-4$j-rz^H#z|q%{JdK zzc5|lZjN^6&Q;|oCv*GgC$xw@E||_2u|azPUS7vlYQjIvaj4iZiBN)WIy2ROSoT#k_M#3l*y961rSFG)_8Q{+@ROKv^ap7$j^fc0j>**Nst1?*Lp z&a&8Uc8=X(RgJnv3!{Uf8{LfohM)NnFo+wb0Fa*{A`PXRX=Ci=Y{6SFb zd;t1#m=>-@pu$CC2gCx=#cK)L94%3shZC3lJG^f1=NzXl96&#}YeT+P;M9j=twbx; z%CzekfA!EkbuZmpuc!OyjdfqWh294BlIVi2=u8jL1N9(1SP#($pn`^>Pe$lb=q53G ztR4q^kf6^&XPF25o2;kksd}2eMo&kL&D68N7Ix@4`d&R3oFPv?imIEh7wCn0kzTBq z=%squpPVFxF&4lAQK4_)>M$10B3KlQW-%<5#i5!dusJM|%|k~^W+^NcXKxLjRR+t% z^U7vBSPt9Ea#7Xuu*;9Ld{%%CTEvP`<4ai?yN=Oc55v>&GQ5p?hL6!0h^mFr#_%@? zu(4t=BftnWf`EWR@T^18dBgvZb!g^#bCc;RaKl7`%jL^;y?m%-0KrT;{DUu+D2bBnLs-J;B6c%7~GaoY_M`zz|xk}uS+PC*reG*6> zB{RqzvXpEk7f5Gesc;%BEceb$1bHtdz*agKL7T5NLm#!UQ^pCenHMF3B{7 zrqVR@<8+!qGieshraNd3I7TkMcOE@TkJEfwfL>ihi)jfhrDgOwhP6C+Pu`37=Iil3 zd}H31Z^7F*h42Ee@Qe@O1Nk66m=ECx{KvbO4-ln|8rlf{0s+!i1SSLsfkKcFEQAOH zgis+2*gHaq5~76|Ar>7uUPut;2#LZxA?bGCTO*_ck7f#4Lbk92xMQ!7D;&53eH02s zLa|VSo>3-T7hIx;=qY-M-eNt`M{F$miY>%8qQ6K)0lkxn0b-ySBnG344iH1dFfm+= z5TnFsF-D9P;Zg+7 zR@QFOC>M{_8Wilq{%^e!gm{WtrY-N{-h z?ZHZPWf*u|ys}t{Q+KOhsdcpO+Oyib+AkW@yXbxN%|PW30Eu!yXd_YCoPlY)m&68Sfg0j9-lgW_z=b8EHOiZZ`AGZ@^1yS#2%T>S{d-PCVCIZDoO* z?f_cfYvo!8tUT+ebsS8!z$&!SJ8^fk2SSFCnPffr3B0={Hx>vzg?kg{v=!|~C(-$I z5nV+$(NA$QZk>sT_|E)Lu>LImFn^wJDp2gb>B4gCs9nMZ!B6Z1EOh|S@Tyo>YA1D* z9+#fM>J~|L(CJ^7lay>_m+}#6-Ek-q&DD15E9&Z4`CGTmaF-<_;>ja`9u5<{7>L&9zqSFj?fTitF_QU5dX!gdRmw( zEJV#+hr8Vmq<&ebFSZriNhbE$CFv@dNe#J~%me96m%o(vsiRO^(@yY(1cG?;2vrAT~Rc7~) zaCciC0oGrIevl1*bd`$2t60BYV8s#Qi{b+GF!`QS{2^4yuO)Z6np{&}4pwpC4mGf$ z(n_H~RL7Jv$_1qg`q@M^PEA%Xt2b0npr={dD?mb7+BMBxuc@oI(a8?|0Rz_&<8Dhr zF8z0^T32w@;amXrOE!ALHhveF#SmdQRR1UlLYaCUFE#PdJhgJ|%|~kt*6`oP zl(PPwehbZwFhop9xf}_fZbcG?bT80 zb}+K)T5F*2Of6D>8aVfB{i@y?tm*?Gl{N-%^a5Ud$=HhPlugSVW4`KWz&p$wv$541 z8sbva=zN?KTzHLenAqq@%4>(eu`h|M( z_HJtlzM@0j>*c6>Y1#&DJGg%?^p~#CT$byf=q<1=Q^BKlv(MR&%*$v7?V%4e#naH( zTA7+T(tN_4Y;G}koBK^~t2I>CP%GM+X)U)lqMPlqPNH{Ru&&u_Re=3(OEAQf*toa} zu~pYTz@({U6I66JsK{NoLEI#64yxtXTqQUVy|8*K>24ssGH|mo{33oGzY~hVb-tQV zAC=z}`U+!(nZkT9@mnaVL}(y3aa4jA#dYFA@msN~)LN3HMbew7o7bee@=Nks_z`uK zMoI^zi!$-1u9&2}qa495X{B1~Aa$xbUtI?+{2R5IW@)3esoDbUm($t}tr_@LPiQnR z=MHu_BN;j~J1gHoz%&q1D_!admYE6V9SqzTg zjwuDaH-IdDij>bbdJFhnc^IFUHgDLqKLyYr=YW24wt!Yrc?d(S-r-s%c0;<@X z@Oy%Qv^{wp8r~)T5eFA+6*`D7i|>iufXrs$yKTg(Wy^=;pX4tUFV#?ItDmYrskJo~ zSm;gkme22Cqy#H67&zz+*4LN|tbLo&Fs@=MMb(ocy-@wR}Uat~7(oL;4;`EPkko(+X#A=Hf(s9hU?2mhgKe5o{5Rds@TQSGTcsjbjH(%#Yqrh<{G zW&=13&si@+bG3<00G@44GM=j{))yz>G%pbY0R7xc;$HC0W6dMIiuz^zRCT!mC}a!B*ZPI8_U z@Gpv;fsP-PbK!DrV>^uxjc*NCcqPXVUUP?AcPEmrcaIXZTHdUF0#&w_-jk`&Qe9A+ zgKfPkrV`%9<#K&OT649~Z|~(&2b55Cj_z-{5-MS09q*l`Tln{QKcS=0MYyEJ>2K+m z!ImqrhT#7%;jEls*VrZFn$Zx*IKoSUbBTw|Q&N-O_b*~E+fiZvN3y@u{z zBG*+C)rYj^&}ceqgS7q7Rf?b-&bq^4ykh)fc%eh}Gl!ZJ%nbXiW>#`$mRzJa>F=P~ z4wR>Tfm^=-&aMldxedDJW?`G)CRPDH>L*?kZ-^~`IF?H*B{#V?^feCEdZzrG++Uf3 zinCQIP^ziT)P<A9Jo`Tp-nZsP`y+u#2So!o?%_K zTm|L(+=o0&Bx1l}Tu7$zF~Y~f2|aDNRKh`~%j_1A;&wZ+K%ovIq zSia9&b6?Ze{C?@YrbD$|ipshTfBGb}rb^I_JkWJU0s(s9-4d8(BSXoX<)H&2)y)HoWYfH>tlg zLYgQ|mF7wd;L_{?3OxfpLhiQ9)({t0H<`gqX$foCOc}tV&Lpv^3(ESI7e&bH|0-de=zgzNx zpi3=gUzxj6YdsuY-*$xtli^sqJo*6Nknhfq=Qkj8;SG&umJklNL6;VT71zYoq`?~< ztjvI?{ju_kqN<(Mr`6SJKlIy4$TDCdLOg71&sB+5r_E>ws(|G_P2Zwh=zGwv@@YGM zgv0-yzv+^^&z}Y2^}OkM+)|Au+*X9X6@C!B#JV^2oKE66_)Yh!GSzP@E`G8pAC?;_ zys`~!@R)K6XOODP)b;AS@b`ZJ�Sf%&9ptKjfo)9PYXHtE~pH=WV_*vo7^%YxSG z3ANnUpinT{0S9+C2bdN(?y7QrAMW935$jMxJ@pJZ|Qj1!g;oSc0Wk44m8*NqU0-N&@jzaip^rp}PvG3V0OZ{X zzW8i-D5tOsen#?U8`yRpk`pJC(@HP3zdBZp#c5vZczb754*LI8FxuC&O{nU}wd(pv z=p=7o|DAw>F0x2AjeUfAe3@N!5MyVk)%}eT$iz%XvSW$yzVU%^(D=&u-uTI=j(cuv zil&a|FbK|6q&W#H(p-4lOMzqyjK`SAvJ*&o?D0 za6CUGze0)WN=-Km?ONyJ?SRKO#8>hh=M7xe9dEiZH$hmR%>b3^ohi@i40`;`NFjSZwT5k7(v`h{>x_y)|W6!_5t%4b8dDOAr6qAYfXhu>cu1%-10^i5l{SOH$O zQT!4)s*9qx)Bw60Gd-0${x|FvccucRIk^QGpvq zpj*cP|IN^5YcIpUN!K>Q)3fpDXL!=zXcx4~@U9!{?e&Fv2TQZYTZ@oU!p)_5IGOu8 zWn5iktU~ExaGY(>vFkzWYJyrLiGzT?Cqm^Mq)5<4h}KPeUR$Si(WgQ0f0#WA z*I)zAXak&2e`6GU;5cKGvEA5bR02})F*)>&;n*Duu{+k9TkY?g>EUP%hz-g7G8q#iQp7O5prSh{fQk?_lw@Lj@y{fhVKYmmjrj6GoYlpOx z+By9oD&tgOp}N3O9(d~$ek2=mLS4Amq)_=f@(lgq?axK8T&&uxdIWaJ0&OY0x?p`U zvPmx^YnBE_dIPHMIpBX2%5fqpuI=Tffwk2Gb8K$B1?Kc2PJVT`Nh$E9%D+!D@TIe4 zDb8sV;9z$+92@xW_=k|Nxg=Hr&g_Hk_^!N5{tW56V)-)EsH#eRnp*P>a%L_ z_=2E4#32n>6S~Yy;GttcYNci;C=EYg$5gf>POfO|iQ4d!I&v2GD91q$SCL5T!T04S z^3(V)`EU52k$x4GvV$g;#sGHk$UOlaK)ST4ot$He}gr|bw6)B zjGpxjB8yFr$vyaNi(E3q&Rsl6pdZ-71>YO4HQ(M6vLPP4g5kyPjW%GIHL7M zXScI44UE>P8G&#nhM?C>K)0C%t!ufl(s;wzW?VJup?ct=d@DOWV+mP}jN@0thwIK= z<%ZLjsI9)Vadel*h38Ry4+|HC2T)&QQByyG9?St%jt8pTit5!)mgN!h0w{7{0Qa^) z)=LFy8mT;?JgK~>EKrsLwdE?~k(jb`Cw2{e7wXeN?HH=(3cW7#h1wp7j8mNXA`+Qz zW2YWQn&l_BCJoT#RC^6cWydS^1@5eY9;MM>Isz`pCMa%O@H8KQ?$aNL@=2VJP10yN z28`geJ_PkM9&U56%@SR%fXYq=pbf2sN~rR~rPt*)YN+~*I$BS@Cy%<#_yYM;{GE`> z4!`e3wjiBb2=~Puy3JH*2j0L9U_ansH>8#_g+3R9U9(Q{L^^Dc8mW#~kK3=V4zKL+ z+{#=J8Uc(n2)Tn<{QJBc{JQaCZRsJ&kfzI%l&2JbV72wyTUs9{(NY|W4(vr+>ZiQ9tWjsiZV@^juhQm<&aWc zZ2%povi1^o?Go(U)#zY*^$v!CWJFu^jSRCYFw`vIhsqA;A56xPuJAG@AUSu9Yf9U( z&x{gyBEx_{2HDqD-4{ldrHUCEPDuXCQy~DGIDc|fnCJGy~vjL z%SU8_gx><>qJoiys){U5H{hblY%XfyM(6`4*>_-n4;m_Toav~#uYj4mLpgo~HERu2 zSfF>8E3LAlm9(Qh=`z&z+IWf_&iKPf2aS||mE+Z9_8yW1`|N$4Ss6ba9J&NNw5f2> zp2wQ4AQ{jYcEhFm5(u`KTt@w<%QbWIGeKaNL*R>#C!Q%n+{h4-6;>XL@j{0{O=AL2}ZiHdz*{1J*qHK~@=Ph8`Ug$xrfxx)o+odxT?Bq zRkiwXT3Vs|P-J$xYJHK_83}YZ6$zc^kk46;yw(QPrk%id2Y}@BwKGsWf7B}Jb&g>qpy;}K9!qq!I^ z7JVb0O8|~fM20MdOGPDIgT$u2M|W^J|0FqIWEA7vmLeT}9V&>2=?To}ZPo*ByyeRH zLl+Tl@~c26RUQKN7Yg2y3LWB>PMK}mj>x^ts}LE~V(<`LZ(e05gOdFhQ}QmPEbnE& zzt2sC{LW+gXQ_#QxB>qvGl6R?sBDi7xc*wc1b>j!bk&20VP~oA6qTKyvemjwWTx!2 z)Nwp8^5WYFV7Fk4`!pX}U|op`ddPIk)4&Ntb~COgw)r=lg)eW z?2?^YiUPKe$9zN**zX$5L}UXQ<{|A@h#g@+Kl{nqPMZC+f}j_LIa-#T{!9dNOm!4x z`x)81*nTdy-|G!ss|EU}&5)TDUkx-GBs>nraBW>>6m%T1Xjuh!_Glk+SV(N0x{)-BNoCRDu%LOs+1|$p_+TBo~oDXt=3b0 zfTDcW7HS(HDWVGSkOI^|HAoFsL(~CaMz<0L(ZE)*Nbtm~3D8Uu)ucQ8$#gYC%>>rU zR(Gg5x2MXEg8k&*F@yKtNWJ{Etn^zunXR)CNs5C>);Opn^IzsAiyeegR*q5d#*jRe zFBkD}P>Q#MQyM!+rHzAC1P84IICv%4K`fyTW{Gf6ON@hC;vM9Y=wO#*2fd`-#xH-4 za{pRikNHb8G%oL2t^vqS-`{;C!MCw7SovLK{F^ha_m|fV!Zb_>6yngoH5pN!XFU2h z=OPkr=OB~+#^i&I?LGfsf=Kz(xrc=NntHgunTLeGF=zb`w)pRI#kK@e-jh|_ch~?^Bu*{Ug=5`>V>4hc==#3SX_$u2!W?uCW}l1jMu+Rpyt5aSd;tlE zpqo=5VaWc>fv%C_Og^u{{MTM*+Puh_^eRIl)SlW(#AH@3CU;7aWFYV?WAJ8{Ow8_- zz?CO*2&P)Xo!Q-3j%D!l9`rg865H6P766V0t#ci^0jrL`u9w z^~NNtjnSf^h0lXOm+8!qlxW_VFb%;JX%bY=JZPQQk)=|ccc+9y;f!&nI}_k&r?N~a zoH@`qkKUZv^nku;Cl zH3~yICK>O|I)Iw$0cVK8wM&8vl#BO(xWK6taHklsq;w}62=}I-mh%o&A1EHtB#}hH zM@)lnc$`C@E~(`z#;02vaS9a06jb#!NN{E1yY6sm`vGS-824oN3ES@qK(`1+di&3`rOe;?lm%FgBFCjHh2BlDDo|3K>|qX<=p=IO z9-YGrm@5rLKOTSta0GIzvB-AJ!DMzada~V-vxFV!$_LPw^Myje#yKfk65fsA={SE1 zCP$-gzwf~2{RC@auSC#2ZzYI9CMeEqWHq(?tX6R2LZH6?Gk#k>VfwcjuD3USDlR^V zH}Kx?wXYz&!|d)JX}fMM9M6q`i3Wp(hQW7^hUXlQeKHTMGZkKQ2E2eB+yuNCU@9`s z&){8E&mm_wADM?GbU9st+`~F#?%u}RHMY|2NQ>^F`;ZAfh!n)<$m^e?XOM+Bj|}N$ z>I84s91rD6{uK&iWR6>fr=HVSb>Tas91rD6{uK&iWR6>fr=HV oSb>Tas91rD6{uK&iWR6>fr=HVSb>Tas91rD6{uK&|NaX6KiBDJ5&!@I literal 1117696 zcmeFa4Rljg)<1mHq-`jH8=yeNibYUCP>}jT4M?D-En*;TY@$M29hHe0KM-;Ol|u10 zrI$kxNBl;_8Ah4WdE}WvtzWgJ*y1M@9W4)zGBb{z7)GmhAV`P2zkTja(iZ1gv)2Dz z>s{}=URbyH-gEZZ=bU}^*=O&4_PKFiw^=evl4QY^NJvr>?)1+o{{HWO;>aF)<|{*` z-Gkm6*JQfty>V9uZdqQiblDw0Uv|T71vlPs`|Wpx3VwET!7}Ccf?IAcxMHEV;I=z% zy7_`3Lvkhhyt?LT*VN?o*XV~+tMKmotaIuOxUahYa`8T`^P8#Fc#rfPoO+#r zzhY{JfNP)1#l3av1abdJz*XFGV}Nk}yB>I4l5~|RQ+j&7%aepTEM=Gmn+8eJe`QM2 z;=v;MRVyfC$72i9h${4)AxZQ`|B`p<`eA~Ijdu(KJ)P?WAi+`raZlYSQQG3QOCEaY zv`f29^f2JxVY{^TYE;{rDdi8y>ig;}wf7$@wA1rb_>4jqgl=9H!t=b}qvg~t>MIR? zpMM3Cbo~X(Zn`0KgCtFRJV)>QR^0!P>aBowf*=>@V3PF~BwY`LSK+?E=&*niRBO3l z+45yK;$8F=eI^=8kDUVNykObQx84E3iaU`H8c54<-+Bt%T%`X0|Nd{FKqWiET-LfK z8`xe7jbe>QtdhhkZLF>v59Jk!PIa%fs_ot6KfwE#VhbM)P2Z4J-x8YQXSLS4HJtBq9P9uLmhzu(Dh)I~aaTF|%vze%5>ygl{+z zx}5E2ZIPQMNE_^z4O7O{9|#TK;4xiRZc>J-Eg5QSM*RWhi^7&z=IJeJS0daJx(bB` z`T3?}L@A5c$A6e1NrA)EK&^q0@(MH)>GMTv^Zre1&l0VzS(MKH3F>r|2mv9OfcV92 zQ;&}go!N(PMzGC-27+lS$_3d9TWA;nzwXFpbUZ!eK7V0?eHSd$YU{MuL!goN`cmv8=O*ZopQN$zx%=FbS0uxKS#M~5=9rinycHAcPgJ$}zoeau-&uG7QU zBmr%Xj?gFVl2q4xQVied0LdI)ZR9sd;CO)Su4_JF4DXCRG`wSGN+2nQH!hMh`OE(T zAvbKx2T|(}h0c+i--*1osR_7fyqLdN{nipRRrpT6!}mi*f^X{&DZKEIR@E4}$K-2o zNDv-vn+5gpKhGivOI_17H+ZCC&9zZ+B-?ie+e9GijwjH!TA4jW4Q#XwGc{APkN;|5 z(a@V}JV%*Y*DNZK>+eG~$#HD_DK3xR0RpS>@ydcoWn%?eCZ+}-G(>b*3$H@9qfHK< zo<)d?#Jm|**E~x+3}GFOqCj*KzzSQ8mwdfU{he4E3{Yj5kNUr}Ux!Chg~tNs%Z z9z!A5zmJEas>U^U8aS0RlijK5KOO}_>cr-;heQ_yFSc7UB-Tuw!PK6*AsfPVQkov4 zbb63z6~f7o%o|Egr6gJ-?v3R>{=BQtNQPVFa5*L}b8XbSo1x5(JV;{<68%$$gdoXd z5lRccC5OiWy6{lsE>rYvj2X%m9?~-%@5o^bGJ&#wJZ6LF>^#f|xw(-T`K0TY^VH*W z64)nlAeVnXB!+?dY_PQzs8dyea3v-SZ=4oAS_ti&3e?uod!lylz?Lg2T% z+NJ0+WCf-TcS;_;+9xB>)6JFO8 zN1AhSXEH0XMdtm-^4?agc32z&#p*Wwu1pG8QD2}}tV+da0O>fSs^ zQ4_}Ur2By+Gmg?%xeAZYNYorzYNq7#tJBD9Rq_=yJ^ z!XZc~s;mRw;(-t-LkOG@M86}6gyF57P*=M?Lm8W7#C_%by>7vXV3l^)k5Y6mAQPf7 z(bw>({+{YF$>HberM3=?{2LvYN#680rM)g1E{8Ya1xN<8brn(*VOs2>x6xxnJpK%i z$)OpbfaK_7vmjr+3kpQ|8B8H8#^7Zs`Z%8Jn*Sx%sM$;)b+m22nz`6?$fewxzl7Xhkq8!g0*+i1mY+;*Ax>kxlwShR-S_}kG?06F$9=6grOMR;lvPc!heTRhFg z(+=_E#M2f$Y1^*AlU8kSZz#iqN!vzhp|laNtM;M z^@zV*{3Z3Sy@6CBQ{%Sd;)S$gQ+q=WF-&^{DN)Gk#jSB0X} z+i+JCw1Eiw0=63-!Z#tn2iaV_k)BtxE_bTUud8Ia-yxcEOA$_9Ag%-B3%iWR0F7 z(NqQ^AD;-!R9g!)YahQ%)Rrr1%caitv!8_iZUe%!{_bT}wmQdDn1NR9g*em!Wh|z{ z17hf`;TFYSy+~Kg|N6BqGSphT7@k>A)uoEgDS=USg3zESfoaW=Ni()pT7-#@~SC3eU zw^3|1RzVi0DV~6KKMy8OI3d^1!QIct3jVc#-)(@r7?7wwc7~6?4V2I**bwp-Xx0rQ zIqtyG=&`Uh*1EMO$s5X(n@cm~W;v2SM?GUsAu0pX`M@0P)3WXXUyYdh6i<@6Nhg9(g8*yv8 zg7Tkfnn}0qO&8Ja(WWVM`(@Jvy0NBwy45%3;ugIdeAQ&5CsI?IEcCR5o~UEd#q`t* z9*$PfQx83r;VJ2$(7QtJ5BNSnqu>M|Uw8pg$!6Gz5n)*><&oltXB|fSSC+~zHgeJ4 z$ftA@l3bVPk%y{?0ro5#1k!q<^YMZa_VHRFwk+@>B_Q7x>B0;0Np(nT#)4C4l|jyi zvS&@lO&Jo*@$td`AXcy@1`{8*Jp3{(#v$E`*S?Wq=0-?QtjA+xr?0txjOQ(2>|YlG200b8Up4n5}1 zvkZ2T!(PavB3E1vzl7YN8S=yE15NY*$6WI9Uw)lP`1o^rvxx0#iC-|(3Rur2GVe=e zDqqE_>zYX~lR~g8LD#c={IITe1jqaMNWilNR`>`UcnTJPUj+uYz>rVq#|n7^{3C(? z?@_9JY9IVQ{vFWK40;QBn8oXAd#8eoa{XHHl#h={32?doHlzg4@$njz@bQBr5NU#< zP>NzAA*rE2&SjtFlqTW&ew`!2Ll;LVQ%?sZ%r;gT}`zwpmwl1%A-BpS3oDTJAA=*(#)N$3Z5FYQ^_ z+Fc2u5OkWs;EGkupSs!v4E1J8$%cj`uYUrMi3#Dw=R4u3N|>ULQC6u%Yap{Hx)E>c zS_@2p*2YcbPm121O4-x+5Sd8PKq>`JS2BB|zElcIk(CuCQ%}c(Ql#KSr>9a-ifpiG zK`I5M$U=(_O{Jg|xe}ti5Pmuylpm0K}S;ch@N%<%J$$r&CI*6s+EENaI+{+mU zRB-6IXceu$4P{|%WEKDg_91A6vvka{VQo!BX;Eu$Ap6-AEu=a&Q8OY!qj&6+Rk8?~ z-=YmuC5u?pHZ+h^e`c;6q4u$b7P+}a+t@%WfI9nhxmjdGg>2k1%?iMi;yv00{xHVO zx{2)cXggAX_}Kr9IZ*f44C_N8@xPN`TR_S(6pubhU^SM)mO96I9WL7htnx4cHCH#S z-yNzZLxHuf!@3&NUau7Rk+KPlqc`@O)!3 zCv+CW+R{8CVylZ>ab>66Jl|AYuDRkon1oP1Q)|1W(2ympG7jcnqIoi6gO@OO96NtY zv@0#D%a(<7`3)%8J<2+y%5P*iTs@&dK`D4{^gUFEv6AcQ0Vxxsui^pp3!1RPTzjS% zFw%K`Psx5uMQ~D-T*D_D$e|G>?G?Zg-!zs;`%}fFAZJ7DZe(hk$R82AgU0J2a!SN* z5&-0xh+QiH$UPBTAOOfa5i3qHF1aaU7qLy`aHae$o5lvvG~UWy19> z@V<=e&$!;f^$f0mA)T%V@vPuFgt98`Kj8i#uA~Ih?HeJ#tVh=qqnZ>qTTikf@+AEQ zFV4cu3|)Z9=jRdfDtBZ0g^$YhB6W-MH4I*& zTQmJdOLQm-1nCDAGzm)i_?M@n@g~s|=v#P!-=B8dg*{tN4jX@9yXbQ+nf)+nt>J_+ zC{mhPBRDv@JbI1g@yjuU!j6_yVO7-bvSN{JoSV-YXi^p?`Yn-Y-Vl9rs@!Yrm(#)_ zg$e?jQ6==nu|j0;!7Z>+q`ZVjw2*aF>(wWj6Za&4dI}HuwW>J(^lbF`CGu8Mn~$!U z7rE~mylC!T-Tym}BOR?j#)$Q26MoG2BE{e|Wv*mtC%Cx2}_w&_S z8;l3)*04UKaX5P!l5YR`JIq^@mk5jHV%T5bA{Ct>>tqI9eb=xWXai*83Fxr)L)e5dc`)HsW zDKD~_P&(dTHazI?@I68VSp~YPwhfiG#$ky%9YxC9Ys?@2tB`z>7{9`VPpj?aXO9=X zC2N0}4-$yyrV>Kms_{v3{ajk?H+_T()#GQ%kt^u+AwrMUh{nq#T=1Jor@0(?YJ9O$ z#2Q31n?*A_mJJCyeEf91nXy6b(qfZv-uw8^&m!Ce3yM4T$9|zZk>@C92M$lCjZNID_(fEtwiocRjcRx9KOL9E8@&)ZSfeS~#0gBofMx$dgYN^T_he!SqvYJB+L+ra(FPt z3pRxpHoy_JBR{e}K?xsdt{&{7*MEs7$S)2O#sOZ*Wja@@>{gHGE0k!8zJipcF8KDyQ+*hh}6MJCg^hP@rR)3o8VIS4U1zM(2H`F%vB zSRz*q$}sQO+;J#t%U1wL!G?v2$jZcJIm#&ZHv71bj#V31J5I(fM5)27gMUsGj>pad z&?l$NCsrGeSsk@K%jY)ArI_NZvYYyZ=25Hw1%bd@0}Eak6BIJ$f+yv255Gk$9=4iA zO*v?|?n!am%7d5t_<~cj`pABI1pU<`Hi`)I^A;gPQzGTGV3wcT1O{tI=@j4w>4dx2 z>+=*I^=nF;*9yM3(vCclX3R#Ehri8ZB6dl`CfSO`6gO~aF zAR#=h)r$oGi=Gf=zRwe^U%jY5Z93Ldy%?>8-lAd!VPi{l^pTorg-5j~N#dgrm>9Z- zTt5sCnEP_QRXmJWYW)0cQ776nK9ti;fYHCgppcu(5@mHSi^wJ=M-yp| zwv~Skj`edzZye2@#VGFQUkI^giP8ixqDT-zQoM4R{NnvRMNaZre~KHl4_`U|3IPJK zn&f(TnxL{RR?hdsofo?@xY*A}rt$Xzqo0RFf^f&4*-22RB}?zFp5gUFi1DAn zK43~ORAhD^4FLvOt&L0C0$b=hR@DP6Yk$kn??h9u7xg=U` z1ExVd?odgq$MjU zKxAK}%%m+SfQod1wyg`@#=3#Yq%{)>G_e4(Vq2svQ$22x*PjVqK%h|BOef;rptDN~ z!kefR)G|+GzP&s+$j46`MZ~igt(g$|!)70U46n4UKo09rX3;8ZD2DY;z*w|31wt8z zUV#`hWDP|irU)vHESOdvyAUNVMzV4`bCR0fL#aOAHA0LIi;In3=CM@hMM|c5_*3r@ zS#3Jt^Zfx!@@cyK2!G&6u5Ge zm6q6GbSYg;I{+5@fcflt8)ENy!Q?hj7(@eT+?G-29D+nbmKmg^#Yzhs)p5T{}{Kz6&dp$NU+emP8eMSxqRR zOf^xd*qGZ|&PN$Jh&SLlqOTTgCAA6NBFX9c9sKU|dpn9J60P}XNhz}!QUVEH{w`7? zWlz$O93L&O-;P8C#JzSoNwml#xHW^YlJKB3Q%|F9_|uGt1}XY7JrQ}L&(qTodZN9N zW>RXRkJHm&db%Hf-oRXu3Xigcmv0b^1P+*n?#GMP3|Hesi1?B<)`;f~^~cPW^VDxm ztFCDM5->$;v(=VPb9bymJuIs&gYfivq^wgtp1tw{1E(6lbnR#=G29yob$9afQuu4X z@bV-2UQtYD-Lb*&419C$vCmFFI=GXQ6d=DE7*j9t^vxoWMx{WsOiJ)*3w^-HVQ ze2gE!TM}OBtYPgSDmo>>D1hv`bCy%O2Ui%^eYhUQ^=n+e$Mq5}Ge{|!tX69VF8XK2 zWwB;jv#i;DM-1at4(^N0{g)cgT?vbi!gVnv-My@o9@QUDm)A2Ph8}#*3B0XZcBIrI zR@KRUp5^EJydZqLpvVnRQ8fxSZQYCg-5;|;nN5%2$rC(3Dir!3vmRA!$Bw7b9XrnU zq~AU~+~+x-ejeYap22;d3;RAFaJ0fL*%w_QB|Ug*($-Uxww;>v#HmS7_DjMXQy|Xn z6hSfR#zI_JkbK>MWTGo}#9XXTn~!y+iyiAsKNr3QA-bitFK7krPmRayhlD9?NrV0h zx6TrQ)${2tuV&L-SMhy|kCk9swwmuI9(&?<2o zIECaFd91uVOUP%asXe4$P#6y!00d^oqtLyw#lu7;;N>st0!fXZryFx#{!B7uk{tdF z^?Lb(dWx4CH;R{vHd)raPab8oMTil8XP;6#Q7WC?fHy;5mBS>EBJQ4YFYgpm5$+D= z>QQc>maa!08}bo+Xw9AYgQ1_n?y<6t|4@MmS4mA&#yEt?-1zX$Qq;ka_T{L&mcc!6By>tpRi z$|*{aZ-K8d_H>*3bZMq9JoZ?BGZ*{}GEK zFjO~zIdpFTF^-DyV#}>BKZiB-914eRUHl z1|mm|pQ{x3c_sQ_bihSbRd*1RBwHLD?&WQwD9A>-hbWr#U#{|UiqNJ8!kO3&k)l8V z7N(MtmhEK_WJ82ZF+vjc3e}Snm7!j4*5PTg4bw^1w*e!(d~UJ<;Ap)8FYibV)_-sW zN*PY!p?neSX6m3p7i)*$e4v#2_Zg!T%J=dqs5O}D<$Ix23Cg9o2H2`QGN>`exDFUf zYjP-!^wsd!&=8MErhEB*Acd~kLA4Y8$QYxU2Yu#zms1MhD#jHp!Mbz>_J8m!ktO!i z_E?5F<9{{NEdOgRuo~;vx+Ap9y!~wmY-r+<7ed(HiaZg5P-+j;-?5EhMZB!QUkQ3Q zwLX@m%Llpno(yzJ?5ebgb2X6Da(EFpXgQMcoJS-pW08cBF*L$N7@))3o76-;&< zI+O1sjZ1F6|2cGq?NJY#w8|dTFNc>kY3=w|AE9tuc`1rk*~LLFw`;i_z0YpJP;bzSez04Z*);To~sN& z!nf_k85zRgNeGAG#KM-=2^l&28s}$3H32tDd1piCQS2w1klxwo&4}KKbaK7jf;(H# z3y)h(wU%Qrt9twlr55dv(s@5{XmD^jKb%Evq)qY~a5mA=01nzbyp1x&4mvW8WkR1r zmDb>p3jS-#cNvBI3J+$BOat}HgF|C;QqOYiVrCKPsM`~?m-8Ewm7|sYD#w;JvxRjO z!^9Mx0Z`0E)RvS|u%L~3Q&8rVPT<-%&nZ2RD;t+&ve3T_i&^*!MJ&cC@whk&xV(jS z0cjZbBeZx2_8$;=Hmoss=p2L+A5HC#F&8XaMDxPH6!E;5y`vzWSIKR%yoUfzmmOJ% z>eW+0vB=fdf(kyGa4We$u4N(md{8P}oLrY|VZK&|{@B?lk6*ja%6(v8HdLE~1ns(9 z92vSMk7Y&5@--_P)p%V#C0JM~1?=HyMkbTBG7BL6`5mMNN``@+T))dPrW*Z1*~GEa5eA!|~la^!Z&> zZB;IXSGmNlzyF7tT+ zICeNF=rY&CyAUCRZdwc9(z4N6q82E-)K2ug#ya`CzQZI~0rsKJ6M_oqKSH0G&?h+E zA1J`E`Pgw@-Uc~WYR7I!DV|sB_l5 zbv-{)`o%027*>u);HqZ<$+ib);uahqn-(mHO$p?Rrj!6p>}-F;^=ZI{1P_1v71}BP z6wa^7qK4d94r=?hmHJ>s&g_%ySao&V4M5$j%(Lv;JU);2&sMBKgQh}o~S1}N6r>8ap9h{X*IqKt+!vsZ1; zC#kVH&4|^)Cjfjjo7PeA2`TGLqu7&3rM&_ZLO=Oz>$81G`x#KSX@m6p&%ut{^s_;< zzJb*pUCYn%GY}g)===GF2nuDhp$h(hNQy`U!8p2>9qxPjB-yL<9r)D~<7=~D*@AJ6 z$?A!VU)hMK)tRr<;|7`HW8IkTL)0~J!;D}n5XhnYQ1})FWrqf_?3fkd5wY(uYb&tR zwHieNH{p+;=aR%)PrU?F3sn@o&VAyVpF#37amwH5Y~XqU{{<~t;OL{FDp5(ur^^#{ zjZJ!aBJ?^X^X0{W6zv!Z|7LkbpiGqfohWIK;TT>nsBdN^b_7{iaGG+8$loCHbM>b0 zLT9UM&56>yv^^uj8z6NfF1v>x5zv;J`FWUd54T{L-Y4|Jlf3Z4%@2SO2*_b}5 z{a*sp53U;|rt+0mHW#km(3uG^duSi24uF0@h3sPhbl#YoLfI z)IE<~X(#yqP(CZC83&H5@MVSh`68^NJn@NU#wJLu)f@5aNfrESNEI!ceU9}PG4pb` ziuxp~m*o0es4YedHpNBF{*XG5Bv3Yru78KlNhToo5*tEOzVA+9^Sw(BG&2}!RrN*bq;mueCg|Nm> z`$Ya2M%eHho)^OL^fG{dy&k-AkBwW7qz zkK`BEe^Dva&raOxnkjNqQU=vEQ+TEn+Kuy=Bm#7g_<0JxOrU2B4qk-#3S@y@jZ&fY zrmEi9y*|D%U1F+oZ?g6rEP7|@HBYL7b}aM{x3!~WA}W&DunieAvA=gG%E~Xc82f^9 z{SAbxmBFV`0H|ujn24pNNx$)v4NwF(q~+FQ*WP8K7be$K>11O$viqZ7wfnF(E#kNOhxDQ zj*DqMv~LpjpT+(6O&kbH-of+mZQ za*q$A3{IC4AJXF2qTG!se;oM5BzDx=LYEOsTnu4wq2HGTx>`*vrjKNF0?;E;X)_Yx z5pVPPs~6D1enpJIPLa?OXyj0@EGVGAMxFs(m6tI;YR^U!g?*IldQjyyd6K`FD76fFeasis3XSd}vULmswS>`SSs$@@oyGqGQ71 z5Hi;Dq8hS~7g%9PiueCW{}S%=+Cf5@Z-z%)oY?LhPk{j`N4!BcLq4Jxeu%0eLNCXn zS3qNkBPJ|67Z9M|D5$tKOrtt=G>Gh-fyT2iEC!!(~0vzW% z>D&q;wh>qrI+I+7KHZ)Wz9=mN?H*aP$Up-VdY{l6aDE1=q1>zsagJ?*T|lC8Q>aws zPPzV9c=PgUx`N;Z4oh$x)U&gEJpKb((1G9z2BBn|+?hV{jq{tLNtWmv)F3*uojjnu z2kd~jw=R6{W`k)CVsMX7-fw)V|rMUc@p@-V?cE+B7dd*hOXspF@inj;S-p>dp&IMa{dG=!Wwh-cYq~w+Km0vnnhYhHI%pHK2LI18vF&P{IcBO{J_5V zVc~i3hcCl+KZ-NU3%g)u_2m!vt;nTj4NB}g^xcE~^Y{5hzcN9+Hg#luw4ba?H8FZk zZm?3vw+c!8EFB;DX{z?vQs)hPz=1Eun3&z4IKbBAsfmFNiNX~m8uB_d1kpN#?HnBc zVG9b_FqVP-*HkAC8y#YEtY_Cj;}^Rn*aDaXWn=YVHEv#;B{re)xdwfsD-F*&*Zq}> ztoyMJBe-Jh*%U`VOR_-s9?s@r{~G0w|1ag!@GETUU6u@`Z%wHNWc+jk&|a#as$BOY z)wyDfz>(X^vx6q}aJDCy!ApM!;_kJzJymydfz+@0y1s#i{7B&rmN^GfByVI(+TC}041(N`HoEUDZR!5+h7k#j^ax0r>)9mCh z^jP6DOoOFr1w7*CFGSdYtG6gCw7?Hli21r%g(b3}+k>Wfz=m;_%{*mnf8qedNCt~T z+Gir@BbHIvlE7CF=7R)mJ}R(iCau`YE>ZD`!IvNs27DWXDy8~>73v5z9_U6P3`}R@ zpv1qKErx|0vKYbgNM&zeJI1Vn{}UMqA!Zk1*nwS~_zz9QdV^0S!A>ss5GZ{iqJqCo zpqD_n5ZqRjRu17LW55cZiih7e6PfU-V*gX0`qUobeSnbYCU#k1XV)Tnipb!^=@K|< z(HixHRmnlKjRgtQXT_L619&5F%?DtqY52p-$pj$F8*m%pzVO*Ft(5X2C;0O z;E3o6R9e_VPv6ng(daSUsL&U%!jf1xC44B%GFlV&!$DUbv;j+vf#n6G(DNyn7eq}X z*uLoF$ea9G=t?z~5jtBmbc+GKE(N__U_`s3Wav_DHz)Jt`k#|)gW8Q6qi!SLmCi4v zd}>iH^3T_6yOGFJh$`jqIYx;Q=@KJ#j9?jWMR`z0N7`RENztPqC)FL*EkxQfkC86~ z4kfoOC;@Z`Kp!X2cMQB%QHwv#y7gke+sYOFk_9B#x z{hXR}T^ek03QRP|4mcaZ%_g|%fHOu+uAdG_N<1T37^l{WhM*DuEfv93#5NKZ9_kOd zFqP2(I%cUeD91G5yM!u0woVbgz&1KSQcKT%jB^l{Ims9~JP1I9r_8$UFJeVHUI$t$NT5|{5LO|16MY>D0PKVQ zi`Kfoh$ZB>Sho5VAi*OrrU6!DsjDm*Aj#iSt?HyXyXGZ*l~`csH<77XW^Ij9R|*fX zwqsbQ?Ku86zi$S^msF5Z)$0ugw8}WYU6_Y7$q=HykH67^v58}>65e0|FHdC-@%xbb z)PZC!F!LW^9YMd-O6}}e^l8B;y}>{QKT$|+BHQ_lekGs2 za6HpTcEt9Z9WR;*n_6=%`V#OVSS=Xv@Um2sPwUs@Gxa7zv4#7TFy_ob>h!`k0-{Hu(_fP<}>|@?*!*MD;RB zu?i&!6^cga>yvt9X?lN*x$u_sftOCO^4tBl$! zp9{{c;0vcG$Ljii9Y05h>TvA_FG5~NaDJB#*Xb*0sTHn07H|DlOq|2n>Q|UJWH9XF z-+&J=gX$s577^cLJ25mtZSReZgGeh6W(Rse0x!rI#&@GN*KQE)DU45S8;Dl*T(H2) zU%Sv~k{tdNb@yx5eZoIz>u`}Ff!*5Oq={DUVimcpwUrN251So(R%ft1t%nB{ww^6P zjVWvm=6m6J4KMG1`ps^En0gGqP2r)?L@RaI?=F?wp*K<&#=7> z3EAEHO>&^W#6WjPEMpxVD=h5TWJZ*i|_G5_;{#$2>qrnM&{wD!MQZmpF=s5%EE#}%mf(zfd z*}&F*f(a2HwS`pYoUVonTM1$g9NdqAnKXcgEd;(iU9^FDqz zK8b|57mZbJsQ|ALCw=ma;G{=k9K;?1VbPVyHN9e>ermjj8sq&P8-ej=@6g&ShyRO6 z_C7Q+N&4_BAPMF#r2BK_Jbr$Pf*%j0;5)kn6*^p7k%KYDr1$WSbb+RU1s>B25Xr@i zdpr%hV<7D925bw>y4qb4P>qZXm`hrQ2Ez>_hU4)~V)%E;;SAEtfHl9IyL7Bri!da& z_ZyPa(n#s+)PH^)6O6XYb%JlidZ4+sMyHF3Y7S=5VnsCeB03NwQ9^Z8ZpB>p()d(8 zO_Z1GuSGJ(H|iDHV(8`q6I=qQ;%=jg9YLq`M_hYweSphY@5K3w+5&JJ-!vsfY5F2o zzjoj7e3IV~KX`K*@brOzGju@1kUOqZ70|HE6)i%?* z((_-UGFFvqaFLRCO36s><)Ua&s^~N-`m#|JVj`)(IF2u$$SMnhh|76yve853?tZ;f z^-^Gq$^y3Ekl3)mf)gqheE20-QpKwJ6}w6=meN9KS;DYf@)FIF=mDX|Sba27#c$KV z_C{#~+89e`-3^`*^N`*B`b_j1#c zJ~0zBwi3;#;3Lrt(FQr3J&>RHbE3f=uIKc29Q=mWHuY=F!OGVTR<;Bu9IV{yKUlR7 zHaXur3H{QoNICpx6ztcv2X&NKPAi)t_gJ(Ux;Y=r*Gv^ux&ft)=FqXner2yU${wYr zPpIJ6rD2B;ggrl9&(35ey3YWg6T(a|>w3QMSkV_~zC%N?&)*u$iGD+mL$<@=LuB1< zko5_yYf!~#%Kt!%4W|4*aHqL@V4~6H0jk4qh3nCV%`%L5zK8!V1y|ayU+WCG7N`dv z7*=P&oT7R@G3xmMcStwr2o+eTh^3eQ5lkD8JwrkouOGYyyKIl~vKKFy0bQcdZW3Z* z@%a5yI?}HVq!bpy_ONTv$l(YyW)DDDdjuDBu%yK5lq zXag49w_SDZvPZ7$ugyWJa$-*5E4TNWNSF@sKMLM!04AW}@`g0vDeJ(seKA(00Z&;6rlkNU;CxIP zaMZx6vkgF^M?YFXrqFk{;MQ~PYW+ILss1$^IxRxw@67~VqHkM41@~^^y*KeSC9vB` z@*P#~5CZqWUgFMZuFkduH0>1ubb&~LvIVgTwAsK~A(*p8=h@4U55f>Fa=-YBZ|Dd=USIKJ}_-6-_gv z)}2tgs8;gcP_3j^vfACSB)|uK4Sl(x7$THxc{yA}!qiVj9&8MRR2r+P9rK4j{fuA& zLI6d^123ta-D$=4`6MLKx-UhV@RK_} zKKd&CqDECYC~ONbM?iRSk&>Itdf6;Rc!}(!{A>`*#@=czz& z;!UK$#G`9al$iSB|H5nK4v{ra&$>}y-GzmKX4YOP`o!ZakxD#H!Rr(Tx!D@3r{bxbtns$N7rUHb1)xOW3LsmcKZ_h$w?EkfunBnV7T%y#w5 zY{$pTv)T7r<<6K{Q+5^}h|I-FfjX_SUaM@>DmOazt&sKoRPBmzozu~}?3iKxX_dRn z!0f{&GWf>z(Kg-#Rr?X^+#UL0;k%k%KDjSwd?0A=uLUSM0T9lF0|6f~0Kq%`#VyHNW9f12lw54U0g0Fv2jJHo8eO394W+cb1+@x(i_)`){!R^H;=PyOQkn zKF_3b-BF<~=o0@!Vd3urhrQ3gg1(O2cEK0VVH>5cf|#(In4?>0+|0eT+>oy4J*snF zufZKhsZ`}ohR$CCoeaL)!1+UPK z3fQI??%f`5Ip2nDXne09R=^#YxUpMd9x*Sz+Mp}6G`-*5o>FK@*P-cs!Wc&6uK5Gy zJ`$Zm+~j`5u#6h9Vv;;?8U-#Bxk3kZqd@ddybtVGG1Tt4R;W*giW$qI*4A!yRBc%v za-3YgRPXELV|>FI29=dd`_1ATwhIaqVmN+wRQRAJ>%DC1PWEy*^-?xe;8th|u>+zZ zCS`X&#fD}YSS};!Ie3=z7F|6btXHpl4kq+#!RJpVTOiE(Uo%V+@*KE#kSMGmg+yd* zFft7L-iSBO_0uOJp36`6?y7#cRRi}S`aOj8DWKW?fT{tMH0$YGQS@n%DUo7JY!ckr zK{JNc`X}A|`zPF2uxI~3;`n7Kz>I=>Vx2?`TR%#mpdf~wjiEi+c+niY+;9d&77o@R z_#Ao<4*%vN^caThQV3k#NAMA8HJ#f8Ip{F>$EWv^zvMXV*X(C>Kv+Pwpy4wmt|K#*kk#kJ!g`lzY#Qx&PORjY(0Pl2=izIaoBqC zRSmJBi(r8)1-tjTMqmT{1LVJF#d*Y^-|>wPnDAMVypAl6k-;9emfZpJfV^w12$t?B zu|d8|>OHwc-zc5~9>4{1@rN(Pr)e?9Y<{kWogcT&&%gZ~o$yZl;A@;Zt7-I2pffjB zd#tI=F)-YK@Cp&1fM0~MvSILR<|R4@Zpn-N4x4%eVJ_Hj$iu4V;rr@IZqw1=ooF1$ zQx1x>$@tk9L=5#(kRN?{XhvzSA|vB&uo}Dx;U0p82C>jy!F|902@yU_om-oCJI-NX zf17aIjGT6XIj=BL^fJj(x#0y$IJmBj1U8{Dv$81_e3k$Yoi7@(k6(^Pz=;D_$pluJ zSBi5Oj#sGoviD+&_%y%xD84a8VxMAHauzy84%&-OGk8f3pCUuEx9WsmX!r5_btae| z{N{7eaQsZ5yBEXHe-1N5TRHf~Q~a5cJH<{ELYHA&pgw&X=68Wj=E1v2qJVZ_Ur%NAeuAtE^eoy|F*a1- zw#NyM(%d3f_i8hmOwo(@h@9()`j@43$34n96nWv)BQJ19p#*KhA!mFZ=Uw0{ui$^i z20KC>5RKN#EwtFi&7nbR+@k+*3IbZW8N2j|2|F!tAk~%@YRj)46U~g-UTwlFzT~wV zH>%BJ#Cgm}y&QGsoABFe$vo!FWeajK-jMh9a&KTM3RZY{g=k7%>|8dQ&AkdpIuRr` zMu*e^uh0P}2|(bm>%l+>{mfWnL(Apx3Ggw#qn7Rt&yee}x{0v166!~OfP|q=ZVCAK z|2!)C5yjT3RJ718*TdB)1;(U+_I?bY7Yv}slR&@3199R^KmQ$0=o^;NCm>Nj$yTeE zD?Cbq+S*4@lL6z0pys!xOOqh!S9-Ql8f%E37pDP#KM-(~0SLV-4pRl^#BcsHE%2Br z<=FACilTO!!0QGUJ@g19y#gZ;hDW6GBTNQ&7j4H@cEKg@>O!PWfFgBnCZ6-zTcd;U zdoQGK>;zdz-&p)eQns81{*IJbq9br8ZE-kl3Ux(Esi0Rgy~d;0;T2O5RZ`+mc)T!O z>PZN%1C4}nhpknblQ{p4r`W`DKY#dBQV6Vo%p^#}D(IV?^sQki_5_J1Y#X~cb05Z} zyfESFp-HJ6rr##}1wuV&-7C#&rn&8C4`o8=#IB@yv(%!{SCXKFO0lA&r4utk)7Zip zkpJl84umy$c&EOSLqIn(*eg$^w z1&F2dlJ)7H-cl>ynl4BuE&CO`LoXO5zcVcWWVddmFomw@SHft(r)7!s6~SzXhP=R5 z@R)~>83QUT#3>X+Mq+u2JxD5SH|eYNQ*+>l=t-gAc9YWf1a{6K{h}8mi@A>&3hpyl z{i(n_qd>996$NfZfmi|k6b$KI#927lHh_*uba!HMINp})$@*h{tCj;gv&v33yRj$g7@n6$VIp0 zOQpJPJs&`@MRIn}>h-a}&-Sc8>;S5$QGoWnaAt4NzLa(-0e~ ztHMZ_dR69C@Y`V|B7VTox>EWux`-oqq;EvrJmNZ{xq&6uUlFO|nu{Bp z#XtB2Sd1-%`U@}ZHwUFqU96}Ffo<4kJi$EJs|R!!dVu53ltP3KKL9RGvb920Fg-n5EK@I z=6uFaP>?n}fQq9}1QP64*rVlGASry*T89=bu#+wq_w&cXq%R>r2j_XwL(($32-Q7y z{ycCw;-RydpN?Bs@F($(aK+>ryctcz8hq^%B5H0QA%M@=b>WNr`1)sG#ynLxGUz3c zdRcn6!qYHJGhB&~i&iE$`0aLM5)TOV`RbQ~D(Ou&*br_mTvlg5`Ah25kRA|1@5p9o zL+BNaQ5Oi;Z%S{~QQ=dd>?Ed1m9@YBPw4^a;RPh-yjzd|fqa4MUjf#X>+#uvSW9%Q z;B_(^<^fhne>wa=10nNuNQxuv>0fm+j&u|016T>Mi7cfM)r(z2$cx*4o$fD!`pD#} zr%^%Hz4z0C1%1tNQm!umX|WDQ$Iwhbvk;Z^hoMR8_IKrJ_oHi-`id(2b&tXgh?VaG zDvIws0rj!RkWv{Jx%cR~bk;8@AudWt#iN*K#HjRRnf8+)Ot z`CLYm`FP#h8IoN8ON8OGntXh3UUTh3V3Fo(V)GHb@|xz}3#Nv1=!**Wjz%-Rg`b=W z;BG8Q&|W99;(Sk_?hv#>#pa8+o67kes2{&4DC);o+{tuIn1Ki8s7U1?2IKscYYR43R zq_U|3IOmH9$aL-MiA*_sB}sLcEmHX|Y5SEQL7sUu_q&mWQy|0M?QnI1?<8*j5Tj80 zF8x9!e!S4W;^$gbHxwkCRl$~RJcivi@;^%W6kF&nk^m(zwA|hFV?-?1TEQ>G_6lSM zWW_Dw>tlVC8TD2Lh__&`@cMtuh zKXvd0eovtDfAH&IVOkbTawEBmm~C^!vYC}b@}Mo{c0@cggs9_N{fe!;!V}mGaF7sR zetqu-8lm+9XF-aD_*_TryZk~dCB{7blh|p-v7`Ov_@O0^6DcqvQs7vnD?1YjQr{8E zj3{FlzJF3Ea2iVojXE6bYp1X-?9J*vLTp#!(~;0Z-JeFFePUI0eX3O+hHL|Iv8ES6 zW!en#(mW{bW=>0FVK+{NSSt|VgfIw%^x>hqsH#U+w-Q)C^8hvt%!4P8&L7)PO$%k> zcx=p^fQeUPL6r#qLR}z=`!GCPuET5vj3O(W%{s}=4JRht+!TP?X~KtUW=nEdp(!bJ zFC167EAMt?G5x?)Lzt?5pI@w3QkLZD#h|bcOznvtBV`n;EWW@2;s-7g8DP!mXZe<;Cx?fM%pkS|iIyflY_u zk(v{nzyrW1GytrI7ZWoD^ZC`OI))fR^;b{mVa#H?{T=>Ch=INa1HLQP4>gQTI+4(c z(%PIE%x^z7*Gdt+hPJX|QKZI#{-e4ew#weLLZ~Oh9~#l#eyiX^a1aU$O3Pyi>cBkq zQbbd+MJE|^9ZBuB9>H(wJ&PZeAoWq{CQv*>pMm;WmpD!$Ps3P@FgT3V`aHgtSm>! zl=}d#t=K0pQ0Bw1#wnT<<5!U0gHKj?_)u&t!n(``ccYO+LQ-5nMNk@t9(0|>aUwKM zXB$$e6BG)vP*7wvEguLCv1oT$Sk)0mehTX3RJ4KgmJ*CNg(zQ>o$Sn+{W>#M?@Ur} zfe?wfyTnfO5*P((@w326?h&y=7dJtV^I5_NR$r+8XokFjN!t>_shi%y7GC#3@(ZkGQzKN_2zX#t`Ug76^V^o2m z6o4E_l|Z;yLilY0Q^*Woq}a9Vd*TV4f<15HIWn!t6-TXxBIXiW@?S%=FbzCp#aa;? ziGx06uu|V3iwAMWPTtsxM_8=)y-Z1Z#302A`uo^2@W(Dk z<3?dF&lN$yID5pU&^6>Jo1*dz<*wiqFMrEyOvlg?Hk7uT#SxibZ@`q(vKEP!5ZJF$ zV6)jMoJaAC<1woTg58q>%QLVIhwQ2B3kFe`Rih(bG@XL`lgx-a=z(Jf2l0tv@+gxB z5MpQ<)M9yK4s1WT0_FQmwjxWUA1^lnY6L#erD;d@nRJ z`gJ-SaIptg{aN@Vo3AlR;*cQV#dxs66q`Mo-3{%);wZI*aspQYGz!s4%l`ZAVo4s3 z4g5C!F9uw8ZZ)n@|SY;?e;ci>m&6A<}$p;xdS^I*o6$z z!YlFVBmPg{06HXDisqL%4TKNmXRH}RXGPpLQ5My`(WjKbg@9kTChuO%spX>r*MA0$ z%g-O_2Zr?x9{#hTrG*MeS>aK9vCI>2>ae$_VRI=+8T(dXRDeUk>fo;k@B$rtRzGmZ zKEQxw`9lJx8)J;>PwNMRaQsz!1sBeOSmd|r&lfT;Gz)8?CmH^r`L|g zbn5x2z%Cug-46);9Tlk8a|-+AfIWVRwqr6~LcMIzpU=S$kl?j&j`g>7@Ft-!O#{?@ z^y*aCsO}D2F01GfjX%a*1o@CGfpF2K$!{^lLUL>;`AI5-ypeXANX*{1krT|+Rk??Bf)!Yg_2|XD#-N2>XbESfQmlccAfh)mS8oaI zvuqM=6&8s4(CH+O7E`{5PwmqUS{10KoWuon`twD2PK5^I4D<^Ikk4-t+y2K9{{OMlu;Lw+Tp`?*{vkToM{ral4$e=I4Wy7wF;q>o- z(^w!r3PA9)AlVXX&mOjd!&L8+OCL{PApH?P4r|^K9IG=tw z6I%>dNEg8+Oos@{@QVvs$wSDIo1SuF0Srzl=Z~Eb-9jg@$Cq0n&Jn(dZC_m-#_u~C zAGX2y#v%`b6S^^ZDCXd2C}+3?Lze~v^!=tJBA9q_vK^LK^fTNG?l)t^ES0*mef7!DVhUmU>rZ_JrfDddKJYsVZ?U2)qS&3(jC1{z&L)+v3^ zcoGd?Sqj+*CjoI6izF zfg2KdGK6m};5>2-9DT4NlV-^{G8XZ@LzoyI3+61*p^tS!KV^sF)q3GeQJ8*-O!wa= znkff-|NDlwo5 zkcY%1lZ4D@frPebrzy1&W*{hp#7Tt1aVl-4x3=2aTW_nay?rSStw11@1Vshw1FN^9 zrR|vxt+AyNkdpsz?Q>=_L9p6e??2ynGUu_MYp=cb+UvCyn`IUim?2rclxVz2X%Kjo z8zvw50p<`X!SV0z$l_3=%FOVa&xiLEYL%HW@4Gwfp&O9H7f7l!Ni~dC2XjdpnnWeT zRcl@CdsYbq!Uw+EkDFkqhKei0M;Lq!+Y#f+xx!1Z*Eu=O~Qh z+l6u}!su2&O_j0pAG2Yp1%>&dD$c;8+{4{pQ?794XqvPI+;X)G2PPoX{aN}>f_V$n<_gp%3)FH5(>zK+ z9JoyjPU?J+a$?soX95ekLk)Xqo*M6PWp;`T7wV1BH5?xhn@-LVbTzwaW>)ac&iSM! zSnUc@gKM(f2Ru?hwecNQfCn`0O4CYm^t8upGvEU4SM7V~$$|hmH*&YDOCVi|3-`wH1Qo?Vhq&+PUE*^FmW73`m z-O_qH_OvuWwOTvBC`E=`fo2MYPjY&r>v+KsY!C3pieEZ$Fu1=zB{W8&hW4Zqky{R1 z9TpDjS9wkTEkCFTnC%qvJJc4C>@Zy6gHVSoY)&wi7|u?aV-=b)JWFq@%(S6M zi3#!p1YZPH$({FqmpC3~$kVK(X zdz>Kju(+iPaJ_NysjjZ^<_moeAI_xl#01WeHE4HXZi-%+p@Ia-vLx|yN;34Dr-=`@ z;svVQTEoKKrAutaw{8I~=Va;*j^~AiST6E<33E^;^7=ip*gFw2l_?QCk>HH`NDnUN z$ufm906UxFL#$OGj#goa(w?M&g@@>M-4XP9Op~pM^@UgiMAP2yrcY2MFfpqPZ4`<$ zR@xbvlS@;>Kq~$&!Id1kq-Dda$5%?Gjt)Y9+Qjf_V=MrB-oBLqA+0tEKKG zBIyiTz-iAJG{LNYma0E-;`3?OxA5T%0iQ2}{g!K885mXTCoFg84+=4_$%I@uUG1%) zf;2Tn_ML@xKT0D;79u`MAKfmCN`({K3a?vZRc%;EXY=QHf>()F9G>3T3^lCv08PDo zhFX_oyBCRV zz?7Xb1#Oy_zz!xe=tx5F1}${~-rUJe(5nKRK~xN@Bz&-9lFSyEHFrKjlfuVYNISpA z9otNSMg?+JW2S18J01s4dIVbMaPW0Y23k>ePfo~A>C$j>wk^o0WXos7t0a(PqzlA! z&Ov8PX7p?#akpfoxHj#OVL6DuRT3a0C~dIkw9KdGaH#EI7Y6?Jea?30y8SWE5#cw^ z^r-pksoikPG>(XMg;!+}U^u}UiFC5sDI}zbh8~6?)QfTv=!-0uBWHm;D>y-?1$CDM zv)hi#60tlp&@X6JaTtBp)A+mRYsnE}aeKXYS z)C7vYviW3F#aVKWAe1xYEO?Hv(`!67#Aq!n7E?GK4%IW3+?+@s8m8YUrbK%R_QMv5 z1bzzrLha#ZbN5ZdlFGo>7Q6GC+(G8o5P`EAUx}~j5&I^T^KNw(WPXv|JW2rfi~QN# z%Svonxb7|ZWU-CZ;Sy3eTZYEX(ZE>Ait+0U$UqR# zI0FvS&|1t_u2gB96i?I%XKOS4or2y{t&bA|`+&JOQjA0Lh@^B_`}$csk#fUDsgP8N zG2B>ZAcb-&>6lsnOGOGbqGE828bf$yE#z@^C^oCvZF6-9YD(io-S+|(PV8X4vV+x8 zLAif{K{Pa!4L!OEcBq^Q**gGs74$AceubL*Vbwb6#phH_W)4>0e4pf4AvvDo%m}wt zLfrW4hYMJ4AW-ZNk(3~HpamQhpul^Yjq@T;c&#TbG#&rgJIL6l8VuKF<;XM*1-wdM z>Duv!5qV9SZGVtJG*>od0+7a;)y8XoGG#pyTK@vhUqs@}7z^hoN^H6z4pO&$UP@}3=JAt-?Cv6Wmv49-L}BqD~8BT{ciXRIu{#NE(| z!LGP9`VwWFEq3N&wO%6>>$eC%k|-7oTRgXEfJxTLiL99NDyfOqGPDJ)YsT9`Gsr83 zo`<9H)=pH_DD$J0L#v6`fnfxsn|vVb6J|byIlC&)2mUw))lMFq~~ zM{Mm=;Qra6`Xst#d6tNxkd#=DnGo1WM>D$_uQB~ctgW)i*Y|2;Nx|}k(n7;W89t-X ztzipO*Vky%h@pc`7S2b;I8k);3-a&E0skGY`-=yn^Js*=Ad|o<7A;gL-ybR7fM!rar2Q##ja{jtaNSO>4PZn z*k|lKB>m%b6scZ1XY~D1>Xv=+BLD$-RO{s#*eXS&a=(}aY`b06K3A&k*2|<{_`*;z z>npY><|={mkQdsTKH)Xp`dW8&WYI3#VCP36)tlBLNz53~q}t8rkV{+tgof5r;X#0F@ZT2aqwZO*`ARO}8T6$kOXGj4y3glmpO z)2L3oC0l-HwF)iKS)#lm9#eYYAjJ!{ao;8jl~4(%Wf~?dqD0DRkX2GSHZ)GtQhew+ zjJ!lqEL_Tz|C3l(GgXqZE8Y}q0xK`;7h8Gh=D~0egzkCcxkmvF4w`>>E8Z@aGUc>2 zA4?}oqmb=0b|=11WGq>X#SgO@GjJ-4Z}gLNF|rt|Mt(7ok8qn<-1HhJRwS2uJKy8- z`Dr5RUX;i%N)6W{$iJ`(xBz2pY5W#uBB@Gdc4S_TM6S!lrpBywcCL{TFT~Z}ON>aX z=DVfl{%A9XHfm6Zj(qVUhK!LfK8Ps5co|x#MjHZa4ZeJ?Hn#HNG$TLO9Qm;#Htdg{ zMHMpI8{dpW^#Xl#Vzdu1+QQ46zeGm+G{cn)$oOa%CyJT?tr0*j{~L7?*bYS-jvMy8 z*M=zC5+mSDWMrXtNWFK46qX4?rqHXA@%_WW!Ewlwad?RrCKESGN#tLGvMQDh?gxP& zLs1K_lQa~OayeWMj)c8(3J4atE1Oi>oGhd9yC#m^ohVXdZPJoHETjf;>{E&FNjUcB zHA8C|4D^`j;id6>uJ+#$3ksYN@Z2wDL;pBmQ!u`mfwTr3R_Ev+WQH>Pt+ADH?=#-y ztx57;c|&@SS{5fIRb-zze*T*1B6;QjNg)gSOxgiK_--QWgDPv5WW7m}s&S8I%dKLI zK7emQfpR*&W#sFsS+WS;pb8g;1+}!vu)Kc}9I2=XM-lWCtNBm8kxe-;g*C>M|DqWm z$P_Am(A2g<-b^JUdO=|JH(c)p^Q#qqIJm;*fJFZSZ}bF2T!4MRXe3yozNSyK%fbW- zdo*NuQM$9MZyk!Xn3TefMK*~UXN^(%$Uo~B_T<9p;z1ytLjlN+2oBESWlm3`XTtLi zvR?B?(Wig5YMz0O`o@W+wN0m6YInYNBpp(`i+XJ0QL$v7llQ8lDZ<#Yk*H-~ zQ8l=)P>-i!5B~mIyq7OvhKlGE>H+4@%5Xx2@gp?u9gpgrf zDpKM)L#Y~lq!EMra*?yuAk7md@u0}46?BpA@r+}OG53`urm^2-8ikq6jlV~$rg(3* zjyUwQFDTE7)ID5d-1Y5&fj}!wj1)f%Wtn*;kQ*&}KZ^s>Dmb_TVxYK3uu8by;h_nE znJSAgm?Ov%XP1OYfkP2o$Ab>$!hBfNuaCz}mItvQ00j9JPlTqz{^Zvk3|+v2$&s-L z1iBEapT)3_ZM{<%o5#g{>sa&}$cij)KlzPXBTSCvGJ1oB&S?B6z(ke~5f|jrCN>&Q zkah1buf~@-Yt0dt%vG>HRG#2#u-6_Eo*&Pf?rds0Xk1}c^SwkdDyleT zoHeAHb&2orYW-qDN|JG>R5K`jHJ3KR23E!Mx!MP0UYpD27Pa$={z#nghi-v zC{kI&L+2WZASt4Q*DU(L)m7AUskNbDTrodfaCW3fzwKB;Kz5i#6Q>kxq>t*!IA zm*TU1tI9J-&={V{MNlX+faeD|9lIL{$xmMFqpbcpzZHHt;i?nHSY z`zx{0O%_f3NPKYqN&gc)OzJU*(bhn=936`d@#_N@Y$# zmL2KR8i&_-;5R}V?2(8E*dTJqWXs+0kN`+liw~06j6Zb|WAa*1nlD=tk<;ZQcDi3g zLJh0p!(rjO6^bOl5Ut{+veqxpGTc(>DO|~dEPZ@jnj*BpT=Mk;rqp+~9UVitTSzK< z`;fS3rih)*cVCW!QntcMnlT*52-jAr$ZckiZyHgZY} zA%-HZRUYQ1%SHPY=wY!tl3G8(Ib{wk>F!nqprkE!K28y_NxZw9cRWABGxBKRm>=Yp z4|ROdpFx*6*ElZDAcc4Vh{Huev14VK)wMU}Lp%~?$7?I5L04;Q0_~JwN&*&7m7aNG zdB*Msq*K9L^#xYo%7R6X6??-NHLnptb#-8=WUAYRs$;6kBtw7{9F3*e>I`>v{D_Sr zqG*WyeA$b-+P^6;DjWr68LoT2Ecg30Z$@-IcUweQonLMbeJgyI+t%`c+z!K{O$n{( zz}j{4#-T58tLVVtX9l9P!BmiwL}unPd#EUkSUltj%uRIXOP8vFid~$~=kp~N^L)V| z=E_-=1$#A|Y8FT}&kU5yiPT^~(O`j>pcR00*+W_3HHU2o=u0@Ab4lpZKpz?a*4LQOrA~7=zeF`iU83Xo zBzveY#fx&a7YPk3&k=_2Jw+d*?=S|EXz5_0Oi4tMBq}iz?X?n>4kkLvJb!hLlqAIb zix3+o^&?igDTC>rCtdzsIcWM^oA*nR;}@%>t4K;*3-R#7J!?TOO3oM);B`?&7aRGt z?w~K02BJc#3jB`HxWG-Se=-qMRR0LLrKH$MBVecTgrzXD%f4B0Nenx3Sw%V+^cdsr zrir1)6~f{hvdZoVWylCpwpb^dSY4N+a3>yz2t^;d{Fy%?zBJeGxMu&f(6)tZ*3S@! zb9FqySsG6k+D30KwCP;Sf5E%XLfbBWk8{2B%R<{@PZip}ytUAF*S11iAF=FH>=jbtGTw}(#-DAg& z9XEcw$8*+%b0%g?I(u?vTo-ET@4|<((8~4Yy;krySNnG0t*kF#3nRGN!Sn6#W3GUu z9jBGSH;NZiU)&tvpcaDpByPuHnZgo4!qoJ^j*S)lurrW(7|}FrX-#b92bt%M44jAw zULK59nmQj?K(zhNz+PVa;a#d@*Xo5C9bIdkfhW`}DKcAjNC)sFzD6mj9H!0ej0O+p zcEyfBvn2Eyk6mPr701O?8_wjErv6e{7GlnkDdrpq?7YTAgqdP}fDhuxa0^;lCk?|?;2rCU`{iYWXZa9fpx=qo?<#tzx z44&YxtK&%-3bb=gynRgWy`KE#LN?1S-KwiYh^&ND8KyT`+Po@H=dM40Nb4aia~L0w zUNpU+Z^dXV0LWM^_7|~99q+CiCVX{Qz)V>cn9%blxff62rrlDNkz6PzD@Jz~TlgitgGo*Ic-LPG_fqAwpp=0{)57`7)`#;FM zWxmSu;m<>q$+Jr`&irVVZInFOA0dRqYgPM z%N_VJ)Tc(F-XrImM4$vwSMbV$QtUsy#&%41kRFJ#xZ3!sJk-IFVl(JXx><;x`il_DLlC#U=b8N~mzB!Sr-$W} zvIYBz^=XbWjtos#7OR(IvAX4c(#Vc+%e~xG!%wJ`^m~b9t~i7pPf)$`h&j%xXW}fz zXc43TiM1ZiV^CgKDY6A@_AKMKK4uZD>bpDccD27LBT6h+{PfG+S||gP1B^h3*Y{kk zvS5e$Em5kZ3&aHET+uCIuLVgeR0ahF`$8kbt6U@4=wW!V@eu9SwN;~9@Wpa{7K5dg& z3$#-iiR}a7S+Wk*7+=U@Kuy;PgkpPEkHhe0?P#yxxClN5YOi4cSB!OrtNniIC?RIx z7LdX6u%SG&_01G%!TO5vL3{YqnJ0N@4H4(i&S10VptKR)_AX7Gr-7SY#lglDjW=~1 zn1Hh_AZ2`W2@JNOVmvh3wRulod8TZb-b}d?>Gg6efI~Od7+{_GnYZR=%X@kA@^gfAUSYtermtrgEMgv)bA-y}1=^T~G9cyMn6+DCJ#+zxH zK#SQqDfj&?Ui{zAmEzs8N?@+iDdf+x(rrwnd&Ww45%Se{cZm7A*Hfcx*CWNf0PqLa z_u*o9jYeD<$xCxPs@WvOy<5ai4I|D$D=KBjsosDnhrPy&NW>$)EM{W9FEex%XZm4a zO=zdA{9Cd@7X(&Id+K^IEYztl<_av47pei5ss=dq`b>+vgpYEyKQs)x*lNrCqFw127FOYUuXQ5I;vLXKL zNX{(llO}AG5kn<3Cviuzn_IWHGN86lm1X42!Op&ncV}m01^U+L z9=Zz#yGeq&9wACipzE*kK9*QX>N6l}phvYI;g<2RY$z2Y0Gw!T>sm~pX6n1q-m>Yp z`YLL>Y$d19+xj*lrgCwanN!KJR#IM4ne{+QsGvOQJ<5FeRWFDby46 zgG87qUI6JIjE2Z@Uv?DSl~~3KGBJ^RYhrkJrV_9wo(`2aZj5%$qAc+cO+_W6(Z*V$ zz=3l@D1)CC4fX7dEfTorQF}1GQ;23Puf1zkx*{gA92S}MPNAT&a~^eb`xM}ajea!C z)h@f%PKmF$dI_MJuWa!YEkp^r<2wEw7$FUhHPVjPw9nfA-GQJ zkOR`hEg=OqDajq-T(wru5+q^D8}G!2x#5%|ofHYSgm+{ZyU-y*l4qF125a>FY@=?HZB%Lam_0OHrcY=lPJGN3C3;8= zUe06h)eFTg_%>6Ew`MZUqC%G62RU=sU zKrbO0@Gm9>kd=_YHslH+{>rEh+@Gj*gxNTj(GH1}38)*>0vq}4HSCot$_DGXnQ2KP z(~B8qkKmysZ0xN_nUHw-gz+pw&9O_iO`L@*%91Ws-*lDr2|wLId-9a=6{`UH3iCL} z9X8w|AwnbK>iEoY(4yEdS5B6OWE((aZ=4e>0{q!%j&*_`6(7X!nd5KKM@gJPR`R;n zHHkBLh^QGDMxb9-kQ@TX*gdEOnS4S@;Yb|PI)$3=O*B#Svm(M0Kpld@n8R~WeR4-D z`4rz^s`WfeJjT>X(r__$Xu0TzS=2?uQE?d2f4|5(iV>;L%ffKnGJ!N~q9T>R)VT2! z=@P&uIEig9v`RIn?qF?=vD9o1GD~qDS8b^{$Ub_$*%nKn1(83FrCNIEVzJqO#ian50PeRc^uB25t+=A)!MEGPSM9|+e z%F&|<>xGfF7{?6{T@YRihj>n)Q%X@)c2Y`02PHf8V>ks$g2#4L}*c~*JrSj=|_zhdj%y3kB7~AhF+wWvlf=KeAA*=7PI)YXL|Zs zveaVsv|7yknX$2YVXhnrSemKM1iX@EwluM7*@XtDh0XYpXmvVn?-#l#)Jqe0GPRxz*i){bYbvH*=q!+ieE{I zy*AMME=~qs^4wR%39<0dGT4vs$qGi)COd3ni-ITfio@7zmEaEew`Tw-hV;AKyu^fOUY61H7g3vmhM{ZCW|;+uK)E*XHEAH! zgr?OUkXbA;LE~A^pjS9q;f0J#QJn%ndPc-FM{QuK>e-8wi0Do-?n>CL8eb$kEkMa- zbR(-ZvzY*yp|ZgT?;{3}0>~}_$Sy2i4ZoGG%3W(r7GW*PoZ|5N7W7MzX}9sa*;1aX z{dpm271VvW#<=f^gxH6#tQ}~c(ccv*{avoOdsI5SwSj&nkC@x~oCs=xWW_G6jvDrA zb^DCh$1Cz6bgtS{P}e^=g1aOa7P+Tu@OM=%cWXi+@9dL4dp4+bj~1;jtdDq zx(K-6ny-*SEYg*sIa@XGL@S%Yk`bwvFz3}-)=7(547b{aoV)>Kt2lueV%i`rjV}f2 zm-#O`cI96e5-(zjb0kj3J~0D0APZfy@|8a2jAc3foUjf;hg$HbV;6iC(w z6nMGreUw{Z=DP1&+(=lZa$J(lo!LaoWYXrVQTpohnCFNah+Nw^t=708k&czS*O)Is zzRZsVmKdJ+I8K=r{^5zCo==rxyfzpGKbb!ngiJk5$^v!lM}z73jp*mpVV#jYthJDu zBgUOBHLUdutXy$On!mtP1XreedMa)>3{Ed%5;f2+8DPt0Pw=g_ak|gAZc7{>Y-f$7 zXm(FA0|Z|q^TcK$DUhHqpqDJw>H}KKQr4+d4M}{lGdO~?BA+)d5mEbE_y?-XLG+~X z$s^8;YZ2A+GTSnJsrAqX$sQW5GWM~(l*a{Tv(FRh4(wc=llc_Td`rcZC|PzdJy!VR zRq~R`Oq5Siw_i>dsOv-Ogj!%gN0KSBv@w?dv~HWt`gIIdF-eu|>VHU#aHXb^10*Ve zg(V0O7FyWN!xlG2v}9NNwV)^JtVOt1s(pdwmLS3iwRyhAe6M`Ik~{=k)hNn>m{@v4 zucMkV{(H0t7RDfX zE%FET(x%xpjdtXJ*C^7C1_bkhs-Tv+exNj{l{O_MkIx#oax9-Fz?zzm?-;kb z6)tmPQ)Mph?U}e@YbDuQNzVF`X+6Uq?1y**AA6)%Fom7|ZZO?0TB^LR{GtqE#l(v| znqo^wGL&|@*n!d~J>@YQNE#g8dE$7nt=o)OFue1KJX|Qu?$HC2yDmH=j|v3ee*F7h zHgZ?9Ks4UeXbUXnv1gdPls}_lssO+puU*Zz&J2Hw%?KBz*^pdk(_0y9orTBK=)6P%I?tAW$A0r#~P-gJbC!`=@OWfjS>*xU(Y>W#X z(Dg2{xi3{JdY@L6YZMO0DVN~G?)*ib6;n1Dh4!h9FXi?sWUd}NV+~XfN0alD+p$2 zW?Ef;UAp~*{vbaCVR=ZzV+zkw!%Glz4ixH48u#zWd+WSd8BRy|uB=p_zei=K1lzVH z{0n8~FV7%seAkUP+9D-;w{(8mi(ipZ%cd9I3|VZUDU#ys&OA~F9N)gtwxxNA*A{7h z&bZu6v^`Y{yPbdecV&gnmegkj9`2X&_HXgtN+X87zqB$bt@%^)Y+C}iNol_{4$4BK zs!ZM1%-7I4Qc_01{q#Ia+OuW-XGqs_uhE%EmuT8NDXe#9xoykW0%l=fNhC_$CI}WU ztni2B6!zwpuFpzg?Z)R4=@Nx~QVKip+D*1C-p@&4-!)1SiI9!A{!-+Pw&2;FXG_A~ z^h(>714||0UyO4S32n&o1Bs8udp;skLH~uq`P_tEk#Mn9;;KYKRbo6L+HYH+bp{FN zGGdYDk%l*sP?abXGttJc6_Bu5l{nJ4IFV457*7acqv{(-c#|4ohj9|$q@-Sp7Dq}{ zRTs`B;k|0~MjJ1g3BhJ?YED+@+}2-;{@fNkD{!!sbn8{kF5`!Z0#(gs8VihB^GLW+ zB^+b4n+XvyB|=N683{eFW@o1tId%KpdSPZ-QLbL?)vD)fso|peL>0YbDQcR6JF;Ej zFHwK3f5U|K7lKaL<`*`2HXZna7q5q(rbMROT-(3d9Q5Llc|7e6*Y?aswmZGHf&;;6 zuI=~qhP<{}Vym$_eS>G~f#m@AOzA`WT-)u%QV>Ei>PXuu&lxLuj<=}9YR=uunNkf4 zPStn%BTm|~MYU!7%r&VrBh>>I|e_huxIu+(3cy}_HY9xqoXd}R{>-@mF~ zMNs|7^3;OoIEZhYzRa%IAb(wbRVwdPtYxSKpgpYb})0twfFlk_-k8R}R0q*G0eJ-joufm7p0cJ7r$qP`AIWu4vd-~b3guNjqc#VW(^Q}m7<*%kq}He7?@DfPr7Sx6ig-QFon zYe8R-k6D^8Tk~ZY7n8d|%b<}~`%vW2uz*N1?CZI!XT>T4A$gA&#cCb_^cCB=!d|8k zOJ8LnzKJtDbGa(m z_?@|mBOFpnC#ArjfNFmgmcMCBVQGuD#|jV-gGO|Q%bUy>d(#kfHA zO7pbIVFb((>%a-O#vT#Hi6FmVzFSY#N`#2{-jDev11armoMz<6p-;FD*^4l`T31gwX$vjn2aC))srrWk`#u82?6M0r>U=~h@1W$!oRd_pq2?@hdwm+GQMb@9 zk2Z#_P)~`X?~of1+KMObpwb3NibTpwj6xj0BP&yVTF7bKKyA`Znd1FY(`0Ju7+5h0 z9MgNJ_UW(GZpa+7eo|5RPbs0lBPm&ckx;eIyL;{ojJxeKY{sRE^+d;^%6L)Ac%=%; zP^bWqsCbY+7yOk$@-xot2o<>sWf^w^DMZG;fUVGGt1*_t=?P}|VWBH-2sk;?|?<*DqAiWkE=veOr7N>TC79EHefkBJ;+MD^6&cpPm|EUR;H z{Hsl5jexAFdgW4dGFWOhBizr9ES!>3(7j@0XICXq{8A-d88>xDS@_NzTWGXe_YX7_ zicqjyL{2SZu+asVCzcjT%(=f?#X8&c6vS=tb>7^N3-4pL$0KlDh+;iq)0>@B-wVH; z!e}>39hXr@+kh?0W?M0AyZjL346&kc!SQ$@11oN4SU57NKw(O_e;~-I9wQNO`aEjt zZV-FUiW6!3i`LuEMm<&V{IcgrfUV3K5>SMgm$Rz=`8o^xf+IU`mi9bUK^rk@tjvrG zr8mZ0EA&_XM4O-{IRPTtkZ$_Zx{32|d{LF)rjwvw9rCM6JK?Dl#m+JIUPBc#Ft#^# za+fHp#(0dPP3aEp^y*+(8HGO6m{M)ztNb2SXz+&#l7hfVt9C2cB4#Mb3{5RKfFifV z?&DzS6M|UAITlG(kP$k>>EkD~>RfRdJ7E=6nJI_ixFa(s72N4uF$*R}-?86F+mY4{ zwtV?QS`~+zM*OBEdIm~kkY!`+as*a)+{8w{UKV$b>Z#1!Z5J7lOc=8-w08GgMA|0Q zOrSMrB}P9S6f@8w@DoS21 zDk%vt+mb6{9g#mH=r3v3Dp$KYo>gNd^IL1lfeve{5Y$;TSz84Qvbtxsn=~+2UR&tg zfCKT1vBjhCKr8VoA~K_j?tQsj(&Wl(v4@iaMkt&W(sj(}bh&YL)Y~6k*A=MUL2Ti~rv| zeuGnOTp}~sDExV(MqXgqJzr0WcxcYu58v)Zsm63!7?S z?(YwGT^3yi_#n?|&kN)HoRNodfpJnS417xw--D+!z>MgFLfwrNSI0|=p|M)Xj7)>< zK1Z3xaq%34_keM#a734qet??Dx?ghmmZrTzI$yT&!jN=NsNyj0#r7OY{+`y=?tzh3 ze>@urII7LdRPl1-K;ir;y>fM7GRZ)#&vesRWa3nzGApGlJ9=rNY-soy%8uh_0_Y#U ze9m4eIik3pXctleq~!Es(iv;|7itKXOsClCuJv+)I6OU~1&f#0Cxq|BU!c8|iW}-X z5r^8~eKwS2tWSeXmFv$;?G+A|(XPzeFdjA##G`?{Q*EqVn)gEMY6p-u!D??Kh>`4t z6A&c8pKo=Mn8PFhkJUxV>ICvZ+7*-qql(?GZ73*y$2pfKkCm|z-mOr*M~M7P{CzNr zp*G&0a8@-&c7Dr&Ga8mzb6Rds@>EGNL(hG%=&JFN(Wppt5A3~rNqMUn1M6vcei7EDB@m+6O>e@E3 z##ne(d>F>Lww0!o66!MkCioY94C5N^8RieDn{u|G58-kF&l(+#Zo!4aS>i7}kGjR0nGrnOw`ifBq)T)#1rCeQf)>9@t1S@gB&YjOI@VIC=+SnCZ^lz$Vu8jF}~#J{OH zv;FY3BE?Ejzsxf(ufjik^!1hUr+m!iW2Ex2wjcMMkF|Uewtk%O$A{!&Egxr%kF|U} zAU@Xe@pbrE%TN0_%V)YO{%*%thR`3;rzLRe-%2p3(6ud9spd^`^l#>utp2?7OKzAf`oHk!=On z>s%#v-gBKd%)FZTeU|I8;YGFx*Ppp6(u-_A|U4P=`7T=-bNR`KK26!PPIvk={>%7}!zw2Jm$P@8T0 zO!6Z8s_UG3Y=iUK^%t7>uuch@yoD~Odks~smlJ%_ODcAN9 z1-+pfIUTSfe0&&glbIdTJZ<5o_SwYquIn`ZfElx1@kH8=0zxD_GWmt0zZp^YIBnK< zPknBKCuP06kn?BW)$2MVO?bgPOg{p&B}|VC&FWYGN6e!aKiX5Q6uKlN^X}r;Y#SDJ zMJl>bs#HA15eFmnfx_0+!@6t)Uk^Qzw!2{WE8ycPCRbfC|ex@h)3NQ+ao84YnoH~y+4so+!UxtotS`}8aQ`V1<%LFAM4^;+Gf z5C4!A;%l_RuCEof>#s19INE^uOTB0?>j~;E3e-Ge;)PPW^%1BeMhQOLXfNbVziADl z@V_y~Yi!bib{!f_LG`f@U<4!EXq@7AoT8BQH#&UAXC!rhtxucMQ;I|pJ+#jsuIFeLP7Y~C;c9Oy5Sd~SorFUfC}2i&xt>bDbI^^1Tx^zcqeE?j=}ff)px+@H z;>5dpd1;M|`J?8m1CxWkyn%wFA*J(IXu=tgjZWerY@lfev;yreyLOjDzec)&z0}d* zXJhF~{u?^cm{V)~mn6GJ?{9Q$8AP9RsfR2){(H8rgPC z+9NTm?6Eg6qL|ip(t5Gh9(%6fxzK0YcJzt({n)UTB?H-!N5>Y~XiY(xBUFJ6Pl4AN zyG*qUd!tt@(gM?U9+zfjPNU|8STt;RkiloG1SU*;Gw_P_hG4UN#X-O#u-gXz+&ZR?d@EgCE zUjYjmGus+>b-=l}5-IZ6?-O7 zp4(I&cQ@d|MkhmIgrhrPQy)jfAD2kvbmKUa1FY)~ELM-P_~Tsl_IyCBzrCjJ>;A1UHS zXE(Iqr*w1-*HPehfZt56?{MAE)xoub>oZ(8bKS^w9oJN@9bC3C$$u$hQd7pH5P@oV zx*2*ZF=v^toM*`KBY2F=5`T49`>p)f$Fv=jCnhk{MJ8}~#~a~e3ta2=n`2RUmKuv} ze!~4T2?QluIQ1{KCfq;EjA|5+eUbVX3xxZxCzWi()W4Wtr3zD8Kz29kUu-rnL(2lP z9Z~;cSIUb|24w%B{>8Gw{TGG20b%&nznClBzdCe7Ksa>u4>@tKXvB62Wxp7+tVku+ ze>iJ#+>(b7S46FoGlbBA+~{u5%Cb!JgW6c8LUOSrsX`YhQzhbHQ2=IeU%wO_ps zdIRFJ9`U)c0Uvz{QuUr`fif`7Z+uIGKE15>7#AT74-~3*y1e@}@5aeHw|cjdci~;x z9A$3S&LJK+7FGui>?Gctu?l?U#P=M68KZ1BzTUwjK`2ht`n7be!C_poju+UcmAEwm zHQ@*5Cjx;30}$*8HGif=MBJ67;Y-xhpo-skka_bCSD5R0uE)4iJ@9f|HVH|VBLCj^ zmzrjO-@A|UVwfPA*yo7p&2X2 z0c%8>xkeP(O`FC!c5FQIi|9VG3kE`P<$bLQt zl#Z%bcF`up0B)VLUW2t&&$T|kEX!A`hI8C+j!!$+vU)pDwS+eHq)QDwr4ISg8k|I? zq>TssKCPf~^iPBasI zEM=+em-r^Nc2>g|;3S1hk}pN_rQjHR`_sl{M1kS)EEMeLOF$SRcZ|@7>kctAxt8yv zc`3(Q593!w@OENcM}YaUfv4z^H@p+|>XvNL)Mdn-mAV_9K4VjxUjnJQy0pe z`Uv5jDx56c?e7Zan*0+nlv3Je2sLwc+{bGohKlEEp*>P}g!2bYMKF4Yg0uC$oG zrNPlf1y8R&!Y8|~V)Fxbi3`u^+!w3XItb-gWBk$~t#d-so;RK+fOBkVV~*eWd#gZ? z6#7xjO9fjB9p;bPrW&_O${TbVccl#1Zj$Q<2$P=|N1*u(pbXIs!o^Jif#~MVcCEqQ zcD;q(4GuXIiV_6Baqw|Nia_8}t9-Iv@9s!JWKhB*@00fN8+aQ-# z<%kD{>~6a*gVu)X^_%VZua4WOrLGQ0uWBPK!A{N zKkL@71Wv|}MMH??PzpH0`A7u~c5HpB?C}N%+x6b)LTNLQCvvu-}cxbP=-AU|n;-x3(vy{vhr=&48kO{Zq zH!d~V5Gr;B=6|x%R_im)Q%!UdX28n}zmcAlB+E>4@;rqcjriUFu7x4)^ZSO*#D~CR zv2RiqpCwLXks!hxPUSSh@I!KRM;1G*a(#F~dguxU(ghwsON?9psvK+y%7D7uY1{)E z^L4b(Sgi<;y@6#!aHGyq9cY)f)ELWDTQDvqs;FJ!^53C2E(|-9w@k7=`K?}a%Gn5X z`D@r)fnOnFR614PY2AfZ$IQOh8ly-UPgMc)BLJy32C}T~`;9|u=#C;tKBIXp_r)F# z(z#vkD%`a|1+2s8&u-`ffjVsS92zpAQad3znq`{_Mt4T#PyIJ<2?v|_>Q+6F}X61=KyKxks$levOD49XZkJSjuw6bk>dyHew>2!(3ZiXR1uaTO>`GF+_L zzXt2^&mg+QBx~nhsISNtzF|4}hwk}PK*9Gj4MX?*!kVeo!Q2~v7mkr=9>zto++Zd~ zsB8B7IZOsO=YjE(XRGg)BN6>G?f2mvjJNNUHZZv#phrFF;{YFPmF9OEFUc2By;f^1 zR+ajE#?j|sy=_;|wFSB!onvdvGJN->+7uV>leW}5@CC3OK$K%ZhE|`c)r%Dsz5zy* zR>c$N8n5xxm=bvOQAdE2huzNFr&D9G;x z=g(;PY*4-}Ro}Ll-)1z7Q7_BX%SYlb$E%k)>g9d$mo4h0Q@y;?eA#$=z^0xX&1W_j zV%#nG#{l)o+|P*bXRvq94S9OfQW>D0IS%tjE!0-jif%bquoAKi8+O7l)DA>;RLBtG zoDmY05(o2W0j#fl>f+qhatHphzW@IHI><&P zjt;Z`44nbf>l_Wl)}Zlf*9kvxg-O^sc5tne7K~wsR{}d>HN*$UwvMcd@|oKy3gILc zn({4@nFu0fDf$LHB>0B7EFfB4bE4o4SNoS~olpO@(I+j)}I zvnMF&aE)C8xV;hv20B2CuYmJ_bsdIAg4l+5l%-08uy)5i2cNb&XTfZHXcqj6{xrLj zSe^t_suP-nM;T5{_L!Vi$Y{XfF#N@cr0fhwZ%>gTSQt=;U~G;6Ta`s3l=M>%rsDnK zHU03TDhRUxlEq6fW{iU17B%aUu9@IFBzvQB2d*A6Xy$xoIB@RfaGwZVyP_jG{siKz zl6U=j_X9#)rdR}LiM$*_T>c7_{wZ;Rzgpz**BWB|st_KIGM$!AHg`6|&7BPZ@?)cG zrxy@1U#&60lsF8bL?(|#`#ZmufdsZTb*R6*BNAB+FIbDCJauW2AM-!5>9G9oa7ZxA zNPyD{eOkxEyy5`RSG7%#tAtKYu*d~o{mR&ZUwh`I>g4dmpiTFfTZkrRQ(sv zq@Ip_{0AKeB3q?!?V;D@TclI{e@gxDQvY|!|4qH>UK*f9ma6|v>VHuFZ))bh9+B4Q zo21Uj{OXh1lY8ZP;5Kb|!OO07GNq=zv;SmC+g3^8z8Kv9tt&iSj`LLQOzYCr?=1PW zVx-x4mF!8$pl?;h@7{6HK6N*?u$NbBTcycH!|xf_UgnwzUVnZT64uvNWZ_@AUw=>8 zQ{JXePrXf>hD(!pg}kGy(jxP(nb`S*?|=XMN8j4~|7-OYJ1VO^bP7I!jmHQ1U$DzjuWf5)D+BlGrX zs;pRM+cBktbD7_e--;>@`3n1PTiX738|ry3_nQQai2j`;`^!$qAiOW9qY5fj|770=Wfd(U<*0dM2 z$RVEc_HftH#2w1CZddyYfCo=Xug9D=gpt%XwMwp9ht|<9H*=iP9ug7s(bazYcy6}J z%p%6dKtyiBTLpGDys;9qOy4AM)BKKbkAvg4Bdg_!o#3WUN#E^(Ta2h#SI)aG`B>}F zBWmuku{WomIf>1Q%0Vo82kpmPv&~ZQi zz3@s;a5R;$kR38j^A*u>h1-Bsc%=;SS`8O0xXyPu;v2UtJtwX*l`W}(|T12XdO^9p~il?c(gLF$*O~PEgxIi^) z<*axQq!e$pu6knpjnh%hYIQ|1Yt(k!YvO6O(Jte%D+3M5CPCl8;ZMgm?2!%uy4U!W zO5qM~6$r2x-8oiZB~UWQGfh`0uWwQV6Di|^9#Lbn=_a|~q=qNrRquQGuWgzy|06f^ zKNLvJfcc??+ZYC0q~kCj^3{w5Vv6Ea8xL_h9n{MNMZN+B9~Hp7MyvS|_FlNRyk{2} z4ZM+Ma1gb66j=uy;Y*+|;wmFkdX~)PV0PgwnNKS-Zwt>XmbsJ?8jB8GCXm)4vxx&5 zN(!EQoI6*$j~pD^wMq39DQJi4W;v5a^|97zc2Gi+{UufFkZ!uR4-dcX2**6Jb>V(y z!(xnA^++>cM5eN7wcPlfx`Mcg;U?Ia23p5LzUmzca*@SyZ$h_Ysd_J!YnuZ6m-!J{ zq8{&+PpX01cs5tC1$so@AqeB75F&r8PFbs&IhM?m#jvC@qp4GdS2kv9Mw`=F>rkbt zoZ+q$+NSlS3HN`}weF!Y%1h^P0s19{W8tpcz+$Dm`PCgVY>w!iB+;i7yc)b+j~L`5 zCg%5rIF^e(7WvaOm?w)J68cdq!l+D`Hm{~;g7NHf##2oyS;D$PhxEyaoz9CnEOFIF zvtoTbRT~H8glQ#(ikes*-f6a{#<-gH=;>Z#4dub%M&BAO$Sf_={rwo3z}s$;smB_U zs>Wnemblfdh2e5+|dt+9_VCorbb z3&|0lfzQ#6pmo79SG$K7nj<<|N}@ZZeKlUmpg$ySFm6=bzBBq4b}V`oE1|q)KN#-* zajo8Pu*S$yegf|3vyz~+U#~LEG+wHGkR%-CG|Wo!eJhF8J3AhW$JMSyhVwPyQ~TpR zmv1erQf;+{W0?Xv-@L{Ng&6keC#4|O5+V!(^@aFvnY46A(5oMpIQ{!S2kgrg?BU`O z5qiyI;0Q~MKFUp$dlgq9Ukx0Q16-SS&Soc6#Tlp>sB=s>NBc*aKrxA+w{tAC#&}tY zbsf>yw+gusi?LVc$UG?nBskp`!bnOV&X zV;#sR6Y2F4=0s}$H8&Q%^m3aRYbrWlDw-7NG;xB_tu@M2c4zb+)F{Uf?}$zVthku#3wd4KJURomGotBLmE6)k~(fY`s(C8 z;Wty6@@JotcT(Um=rw-I$68~i%1)HHev`UXtE{y~wn=2dYdJD(LU`>7TSAz_{5QYpRVN?; zFs9>Hr_Z_@8n}Ff95BW~6e?{KfT=ZJ=cq|gTlY&^0!c6CZMZwP*7%vK*d5K0c2CrI z4)wR6x|^Vt%dSE&y^stw#y9?|NDeE;xw@;-?G5iptv05Z`Y*jt+jI!zkNywBMg4}> z8>WTqjl?@^9LXu=#&NrnR3{R3N+Q2qzt+n1s63bUjVe8Y)@tG?KRfyd5{Y#_DsAiF ztL8*{P8yK(!SSc0@R1^~YcNNNNxt6*WYE&@M zb$7-4({3D0d*9`JUTvjaci#KcE*VUFZ)#Gx_xznL_bF|dF_`wgm-!qoH@xTlX`L!< zA3f4t##M}VVqpG?CY1h~U-}v1#Fqo|Wo6&gYk~LV1O#`QZ`0)M_{7`C0C0xLX=w`W9%VVRX#wc0>b?6(SpVHGshNRYQ<9zw77$D+%bv#Iuj5ltRS8^*p zt0@+vC!(PV61Bt*N9Hp&+$vMm5v`KSkia21v%WN0U#?ay>SH2PnJUhB^3#;ONlMla z)YKX)s0jL~rCI7xvkFnn>n?ZuA*RpgJ5lf^gW< zU<$FG4{8YoeoRuBlzbm4INNiB`r?e4yl z?|GnSxDxf3zyuSa#u=S2S>c?XR6JuP+Wgo~3+~PuW6!4~o9F`KB0PNx`VV( z2RNIOxA)sDy4wE?)SsMe-y*GKCh12Xz|+N1O2Hr~9wpFFjBpBQXjx^`|< z4zf1KGB zcU~n~(amH}E;ipPR)j0D?*pV=lBZL!7MX3EQ3wp}kjHQU7QEmpow4BKLJ zw~0AhY}Ph0VvAj~tzME`u}w;hwCdtp)+Y036_-(oJk&euiz!;F~GB z(v{dskL(pXu~mt-9#T78wf@V_dsDlN|4PTv0}*?X9uYZ~Rt`3-=Z1Z??87;3bCc|V z*-Rs=W9w1QNQi8}wfRfUNYGqAx1>af7V6$YwBXwQPTFpBk8Mg9F1{__siX^`b6lG@ zig3Xa2yRl1*(tKB*P|jWu-Dy*uqrMtl&|uwi*F_p1)hpirRs=63+zkiEwgnSbCDrq zn+6&C2|vg>{JBN83FO0Gp*8rPFtZ*slIb=K9` zTXGd~t>pS4*K=Hlxop=I*(PvZ#C0WCC)ea_&AQI#H-0aDnaguM*8|q~$M|*3D6)CE zzQ=Wt>)QMxTQ%2mu8mw#uD@~pgDagf#&S*Ox{&J%u6(XJToqh?u1|7(j%yj$Dy~+p zbzEQM+QjuB*LS$S&-D|oPOj}-ySbj_dXeijuD7@btw)so$fD>(6av;u^c^UMd_9HJ z8An^BX_{$tKv17Tf@E!=QqQVoz-}wHkX8X|&yE-JMV?7PwP{$MSchXTgJ=9?;^MHyP zPY!1E_)snzl?R~&=-ejO=zYe17+^7aG@5^g;!DM+#k~s-fbNV7>}9Yxd4U*&4+t4y zOGT6$&UdUfE|FS%x%3m3(z%d_%3RH*w-DRDdM8tE=+!Xi%N(vP`^)#6!o~x(W z{Lq~y!CmXR)<8h(93|4eyFUeZag|9jU?P5bQq%lDO(6tbOSV>0sI}0*pQxg?PY*pU zZR-n8-#DZ_Bh7fOi6)uJ2}yet7psu!PhaR+5iy%hvckElChfRv4qcKUZVeag81#wI zF|s~G*j4W-VONzxUdH3&j`wkafuAkZJ|1@F5Gy@tzB6M&dMpZ{Yjlun&q zwGt+Rt#_7sc-njzuO1>i2n>c*Fxk30%jJJ!?#m7RQ}I;Kih`FJ#8Vw5OwvbH>na;=7%!Am5z zerX9Q=pOc5%+!&cD#;X;WJvtdrMw~;>NOJ(GJYQ%zx2;C4oUG#=St4??eoAer+CVeM!D$<-{#pkx-nU1NR+Ji!8jhb>vHo>wUsSp!zZB|56 z?-?VSZb#90#)zhJdJD$&qc%)hKP4W~l;Axjp2*Dgy6cyz5Xt;o5)n;Z5(4chmJfZE zbLw%iU1>7ogVkrt`f|YzES#$BQ(q0s8Lga|jzxp5ZaC4xR?Z4rSK~^Z96@ zRJ}M9DWkh24u<(qEel8mvG8#caBHOt^WN2}7U!?badoU^NYs8u<5ZO@j#U&4(3Zg` zq3|GB>;~P?p?Ke@`?EKcW~@&or_>5Q6V0?VSF3Yt zbxzr@Z60ZH@kwkl9DHe^=1(xlaPWT}T1c}UhX^6$>sG-sA@ z%&rbOIW+HGyeTN$m&tD=bdC4^{|3L)B%JxgR-u628m8WBLW>jwl7 z^=IhaQ%k)B5RHSm42PKfJ93#$H&P0xNLfPx{5bGbL5+dwnVl;;LKzu>l!Q4>^JnJ! zvsc^!ywjkTDvYSaRFE*D=W3YnlJuL zzvj<2zKYsXr#lVVvLsiy$upij8>%wakBW+hME85s_Nk~L+viP?}Tt1MR%@i85R>LVQHGx3ka$1HaEB8UO-oPqWxP_E3U z6=lI1_>eTn`>MsFNMYr>8XEck6~?NMCsZHp@oqrJ;V@6oKR(dE*iNhS(!Ue*?*#oT z7Op2g5fMwM@SnE{>+!K+WKU@>+A!PyWA0r5n<}#Z@tZbnLmN%N072_orD_$FLQpBi zrJ?kJ(2};2;6ht=SJ_w}i;w`yt0fI`8Kd~Xb=UW*E3UeWu4qw#7PJLaUcRXK09^IP zuxnKo3Re32oSA#`qPTp&f1B?gJ`Eyiz)On(;R(om! z{FTnb(Uc5&l%OGs?9bocnahAYK@o}LKVRbhL38k4>VSH)NYOV)II8Ss=xDKxApyjG zpGacfL=u~uNMiF6No;;1iQU?J#3pCqA`A4dsPnh<9u=(@hhb2u6phzIS5GIKL-e@cpA!_oDRTDNYa+FG^eEK3y-X0z>ph}THSn^8 zP`SMKsPs^3hp-a}P56q05?vyQj!r1ibU`#fp+r}4e|poHgc8jXM6XOJ(Pyy(2^Hy= z2_<^DAUZaoL|eY(IW0&i(Mf`+J)uND{DS9nTtbQdMi4DbDA9l6pdZxU@d+h5Ul1)y zDA8m=v^b$e@BEyLx1{%oMs?Gr386Bf_o&2l(|2I%c20JE)1CO0yl2%n)$@mb^-VOX zi!+{SKoor9Q!e1!;+gvS#ywGsMW!T#iZdZpTnV8vH6c{4NeGo+C4|bfgix8D5GvIP zp;DC)Dpx0jN=-tj)Fy<=jD%46bwa58CLvUQn-D73CWOj$386AGAyj_XdsLzpiSpH& zx4gtxYtmK_995OIVtf+zj2g#yJ*SPC!q;w^{8QSw$>WG;>gQW@7`DSo9CcI zws-xxAY^blf++0u#Bdn@l-2mfE@eWFVJ|0eJ6ocDi~_vy7YZL|dLTGT>~ zm4uKqElr1d1ldIiCVMaRCCDyLFxgB&c1eQCK83xA$ZdUs$zCeRHYAwrE7+Ha+%8Qp z*#be> zOm?mydwYV(c8gW7%M(m?xgaYim~3A`c1428{s~7kpaIQEFxkO^EK4xi=Wxv^a(hR@ z$gTt>)6&ZX*+9a`3gx&#EO)&#!DLGW*}D=e_l`Ew&9o5E4e`W#S3oN9y@L2n@x*_QoS$^b{;eB$j{Eio(H_Me z_E0~mk!(0B+)ht#KcW7vy848=(d%_K%-~b;43@1wq4FN8Iw^xcN3oq$f~KXdqPF}+ zV={4axltpj7MyPg+>~N=;aogX^A3LYHXeS)Ehjw+f>x!OmaZ2r;iomOG_t+cW`*(h zl_0x1o@_4{`wrm}ekPu5FX#5CAp6&Nvb~&JI=dJ8_}O@}y`0+&k=y6u$@X$?zZWjy zzsHm9<=mbvguEu6Y%k|FMdbE{c(T2m+hKz2i}7T8Iky9a1AJ{f*-pohQh? z6i>F7b6YDs(d**L_Hu4zLH5;nvb~(!TZAY2wRp0K|5bGu5ogxAND?d9BV6l6EVlkMf)J}q3r8{^6La&C7CvYX<`{v5fD8^h!D z@hfo8Xytc0I#LviRF^ndIW3}eDci51i;7JCbDqU0tlaEU&i<7MI9&_)7#K(P)SlH` z!>=rgneFNY5xE?u4N2jX5p2zzUQ=f|u69^@KX~kZz6^KWmD{D?0dA_aOCJG(cz$cL zT`H-vOD_S=y&Ct_0e%4d$zhkI3Y>xu91Yx4aPJ{%2Gdy05xS0ki>C zOYPDwz+@lp6a&j${pZb33`C>ciW}c03+_POV0qZ?nPMuPQTAC z`2k&kIjihaJHTv{zueNfa_1-2QcA5yYw}HJ!F@X9=1#O z0Wu!3OG^Pq0ka;pOJ4zM9)k=3lOBic0HgnmdlmsXPuQhL0Rx_d+yMHg?9u|jcYy2v zg1a99uBTDXfTGo?djQ)rxTg_t?qBWF1Ay_*LRJ-sGs!MJi)Rh!8V|SGrIYG#Q=$)- zEUwY5OM>eJYuV++`sK@J8zpJ^vbp^4F8(*^GzwXP=lrAI)aA>*z*7@0D3|1Ahp=W! zUe-Z>?|cq_+m=0mzqrX5PgeYx`P0=D02=bLdK^*Tw(K$B&_DUkCwa_=c+4%pD&V2B zIMyD-aQvl^u1>>!BTly!JS*?4z#@Ec<&)<^SDmEn`bLNAJQm@SVLjbJ?E5N7UPif7 zthDZv-{@p(j=md@@=xjEdM=jA9GNb*y?ZyV8^j$hXZz+`l5u5Xsg+I0Yzg-9?N9a{ zO~$<-rIyw-9UH*LjREpbU=HM%eL1Ej3P-(BknRgAGcX-<40R&$4qVE36)uPIZ}k+i zV!F9-OclGv;$rhHzV2ktC4}hc-tGG#*?TTN_GLR-_V=-sW;X1XaP9JN++-U0mW$LU;Jy{GloFUvM7je--41uw8q{AU^`E#4w5+?rUC&>S ze2&*C-IeYR{;J@WwX(~7Z)E!qd)Kch>o$}fZ`|sAVnxyM+8R27Pvl+8f01EDfl&=4 z`Qv(;0_|Qi?cEUhPUR2o`ZHcz9Lj`$>(CzFT~3!d7?fu*3sF-YJTyXFVT$;^gGO8l zW?(+5TuxV=*`W+jbdn8wKn(e9-e1>Eb9Z8v#l3Gwk)(v`C>f)?sFNMRB{{5RNSnt= z*QeBO$Yp2&MTe-xiL~7N@aRzTkeEnnM&0G^0!k_yf0V~WQlaU%^mvp!U*B3_q^pxX z_mxYsw=?wkhT$SXm>5#%d68s=`wo1@EfmNTu~BTOZ7nuJn&L1b#wZUJ&MLM=8F3Z( z=sa9x(Y2ObCwcQ3E&{&&0i;#w2+W)B43wEGTuSvFbUhmG;xnykUS4utW3%TBTnbc6 ztgrz!vcn(@h9WbrB)a>)?rxVd1TEO5thyVWITskN&Q`wqlDI+bH~BvX0r!Pq*)8oX zQf2na^;~AQ!}UwR$b`UTL*8V)Cmoj~{(Jv%k}?k;?o`gHfQd8ZkVqKKzLMXf>QG!k zE``89 z#c%o^<=9^FTlua|O5d}*+QdFp2EfO=qS{2Cr>zyA3pesSrSGX<)Gax^naX)BI$YTt zDAmh`HYyTHF2Hrw!5kqFr?fVF6a{iyLPDfvASBfub_ln=oJ{7-5kQMqq_I>f&cB4+h&8kI4<(=8Y z4Kz%h0Vd=*b0FU`qwkH<^gU1%eU(@F|nr8gPClt79A)f43)jxp7oM zXeXYAw(3VoHJkn2UX!hPRI(?tpni;1@*b_(%-+S-x*x7ECN1Z;z#SgaR*JxGGm<(J z@Z(z8dia%+@lO~2Ll39;FNyja-@%2CkG$I<+1|v(F?10Qu9hm3{();>@4pEZMJ{@X zG`#nLhGXp}%wyb+3L;&(34i9{&e{5=C(+!CUdP34MXz(!QTBQj%M8^2rCf5^x)r(> zNiJF~7ri7edakYL$w~hym;8qprLxu|d!Tfi*WGlwBn{c#aFiOJT()K*(pf{#tn77W zo- zDY>(l_(6U{DJ6E$TcKN?*4XTQ8*HI_7RkQqP?IGhFhP`O)PQh*T^-DxAn|*%Q9qg< zu;M1W!kd$%NHw9$)rxTMx&p-$@EhRZ3j`KIlgNI$svS8EJV#$v9i+bjHx8bW{cq!0 z_OIrD>3(-EBze`76cC_$;L)A8vn{sWZT=>_)kB1B{xx{o!k=Ep6AGw1u%5`te!2o) z4$vL#vj1cLcOU%~SIhf3$-s@A@GSZp@X+5?^YM2kTSdGuKapkuA~91Q5V*SZxV-iy zyySmiy4{Ns9MZAtcrp95;i&mS)O+8;;V9FV|#I6WFwPi%DLDwN%tszD-sG^ zefb$p@1R7E9BBDkAJE?;2Poyhm8Vg|ElptEa#e-t>O%F5eF82)X7#6wSZ^p@qqEc!1NUdh1_F= zzH9yK6z{MR+)>@-^@0f8lM0QLt0p=MfR^G)B>vRFcJneC*1Je9iRsx8_9!O$%VuldSYRqs)RHiK`o zMLvW1c{?i9v%tsneWHP_+D8vnM&|z~JrtUKtx3U6FbG(HQZ&7yFWd7s6cEogSx!1o zQ~5FZFMv$gDlU7D-tAwGNR=2BF--KJ2Nm)1cuP0={1B6GeG^c+O}_agvn>IAADMs6 z-!d-+cW+Wt;|Qbz{G@C0{LdkR$HcgDm~nl^R`Ejcmja9Vc{v0o(Q|+o#VQA$W&hRm zH!u}{O@8k=)Nn}LsGAOx|2n*HKoKC2D-GUCMf-gFDj_AFp};BP#;$*LRQs7wGr~{BvGcluoVRuWK!UNf3A!Y=tV+ zJd{q|6~q@cG(Q~L5=@E&XGaAmM}kii!L5Euk?(c#I^2gkQ4M{Y4^}B5 zQX6krf*;aXo*g=&e9l>{G_%6J1!xYAX2~Tqb8rpNS_@|Cf=?4ZFFrQ8vy!=#K;c0L zl6<48Qb|L1hBO+;?64{1ZzQPX*e!V4f&5iZgVkn)ntp{4fF1FpbLlZ$hL$w*Hfaa@cM zWXCVTMn`CiXo_{CDwLZw5}q?uydl8bBJc*pP~9|5qbe*4r(QHs3|U1hm2nO3K-rlS z4CH8%tQ+M}GEN{d6eOll0i-`mmJ_%~|o}L9| z3a58+LA9r~*W?60g1w>&;1Y1xcBLvPULPnIMH&fH;{<33757r$KFD!{6dK`ZfQIfF zh}wb5Q72VY*5v^GMv-)^Y-j#TlkLeF4PH(*)fK^E^b_Xm`482sn;Of>TA$oOtX0%q z2vR!1*(3@NM_8yufInq&r$9a*$nTBeS&rpv`!yP0Col8hBNrfMxGXZm>8}l^e*x0> zi1c5MV1D;OnDuXnMH6#@d5DR4FXHIIgY;ou=TBAivA#BQpg31fW5pwJGci0bi$@02 ziKlrTY6sC{J>v1ob7fO>yxr%A^D?GVaezbeV3PMKlckZc9Ca75?aI^nFvU~NP_M1U zqjaHIq5W~HCbW~+;^6f}h#PFw48OuSpY5?72C4i{J;T{p_LlNJ^irU3Xj}5g!{t(2 zp%rRa;?4?rI2;x7oJ@I6mOLk0UXT+T!bhedL>y=vaZR45ryw6BUmo~6=$ zl#-_`OQ)XYM>S?MnnBF1(2uwfu7VDN?WU`WvzD)=;>B9-F& zNGj*4sdS(zryz}s??2uRF3+Xlup0W$?r^TY!@4fs_<^4a{9~&){x%P@b$p26ZpT5!M`kmKOzd>0Q}Jce|QXj zN(4VC3cnBV(*?dR2LJtCVfpOF06~*aI`BWbkIQEl1&8JHR0RLeQTQ3a|Es`%JOo7`$gfO4*W9(e%~1UFLs9Wdw|9g z)ES^Yn1KH^&gVe=*-ydY{H~4QzZivY2L7u8|AiQQe*}MN6ndwXGb`{-@$vM<+nfZk6~<&{C-Qp;rzZC!QT{x zKLGgK1b#~l{;CN6#bJKf|_@mm|3*IG;X+HOH?baSm%V&>@p~TY)$)ia5mA z1~|Z^;8VYVE*L~l57N__^mI2pokdT#(-VweDY%H9&Zeh1^aPNC*V7ZmPExRzp0em^ z3O$`mPZRNk?%TK6I?U8qMhzp(qAZj8hRs1)MgkBNCXQgIk>Se@EXYeIt0z)AfS+>%lm~k9limSCdTgT<% zB8kr6{qz+bk1$BG$soy54U(MTt^8w$_*kAzR!8LHbo$5#baf-El#kxgs)nCN{xP|{ z5{^lc%b)1pTphC03O?(ytK{NL)o!&YhE^)WkudA9?IpY7dy_v9&+JN-K>RpG2sS)gsmpd? zz@mKqHuap;)9v-nh{<%RNJp-*s+~F}zJ#~4P#bzoG%}uL8MmNgfRGvNLpj*4{0(+s zTWS^zHMu5JuE~;XvV%91rT&(3FFx6t+mfyHvCyhIf+l8${t(IGWa253!w2JY_&4s` zJF(LBoI_ny4sVXh;Y^XvDdcb;<#4isEVdPAafgPhQ+8$t2cgX&zZ+my#^-m2$nO*Q z)MI{SRFys@9qbCsccW^{m{NBgk{y}BH_@Wi&`uuOMWKJEP~mFi@#=OpJBc~Ip z?K19qB00rYTOsN22(m7_5`##keOsg^l*Y*Emm(dK6BwPy8Li4BzD;szR?tGMZCBQ1 zpCE+LGL-n^2#=P4pS%7FGedumlz27Kj+FQbIeC4O)&OJe#GXssbkdx7L^_lc6krva zYnNP@$;z!5LRVx3uYy`dPQHO{8CRSE7_2jaFb;)%S{GZS(7fl3d(m@j3Cc(+X2sd)6@7bcfhVgD_ zWsK&!0$d;hDZ*xlvJIY@;Gh`x|DX}_-WtRHaqiOlZ|v_o3H!S+O{`ktH&L6ya5bEV z>u7SG@-T+DVX&1^LwT2?qf8uzvI(t-$oH_8R2+lVVFtz6u~hSbI5bUH3i<9K2Ax^5 zIZnR0TB@eTw`mM9Ss?~1xRBqNpfdO%23f(c2M~j*W1>z+rhXN%xIDsQm6li>i?2@5 zx{aTz0y|G4!vH4jRT*AHEV}kZWO%N|VkgE*!4hH--jjW(Bz0VfFF=EZWd=;_hOeeGf|~Jmz>od!F?34mb|ZZIZh>0 z!}N}fX?ngAk>R~{L!HWzH#9{sShX$QCogkH=wj#vZix}6Ei|&;6WSh=PQIE>d{+|g zM9_l-3Zt6`T&u;|!A=ZXBV5ka7>MKYlj0~YD>NieHVT?VERQ6#Jh1&ECTz~DPYW6DmdOLzf3IP=qglkWQ&{>aSw1C`fj?j5nOCpYrKAO&a z4aw9p|8G4v&^+(7V+!0zU%nw-7%0pPyr1~tqc`heV-NFZbq8hl{v5|VPm9n`xq9MurbOrLmMK*hD8x8iXnDiA(zBY5hKHu+dajZ zWV2@lrwGEwpn-ZM{33I8VSpvC;s(xzgblOR)9W-52rC8B*kPb5^lXNn^ zeMW-JuoMzzEsuMog#t{C|1?n&dfCqt{D9uLVT*-r>y|?NlCY&rjjQpD85KSgzs~Y` zk+i}*y07=l#@(KND;&Df6*}+fv{<1f3F~40X=@IpoYm~xgQ-Wap<%mZfW93qX7Sf` z9XR#4mm@Cakt^Z)SAE2gsWF$hjj8# zs;p;#d;xlpSCNj&eeVA-dOe~qpy+(cyD1ydSFY$g+N?^hLO0q$l50tV@OqM*gq3u^ zRB2lfIdEI{&1qqmjAtG~60{wr&Ulkh*4zsZArF$Xf)T#TF*Hb+lwX^{V zn;J`q8?~UXC04g#a&b?U!q7udSzpM%Q#_Y@Jia?ZXMh`#QU&L}lH+Fx{7|a8-uGcX zPhDtXe7TD(CeCg__s>iI&JD`^Fb=ltYNSJL{Dd6_fwEJd_9&D)PK zXjO@}l48lY{BKQ-zubq!lT~&L(PlZjg_w7z*?%kqQ5nU$jDIJ|e!dJ~W2)~PgD+$W zt>6npzQtmA#uvrNlQCT3qdyncbI{zWw$OkU6krjE?4Qmv!`B@IW^jak_$&LbrN66g zq>xp_0xcH_xcMiV;%8i*GL|pUn_Q)r!6Lj9eEkg;+Z38beWAr8{*SOSOdYSGE})?X zD>EXaGz29fXl!hd9zjE+f_&SPf|+-22-i3xyw_sh^}%Oj-VMPAW8O=HEau%2ToCgMI|b41b!un7l}GP0sR~+~6RJASQoCRw!Aqsl9MOO)ZBM3}S~qq^aQI<3f@IegXzgnPZ({W6QC!IjHKW#^n{V76#N}M!F-W|)%27@ zPgV4E5j{FnT(To^t6anV#TOkb*}c zu?<*lBn7|0liDlLjlh}e9k_GOzy^~_x1Ka z)EY6=uOOTKIr24kgkDqIKu)Dnr_nPtc7KK%3uiC4Ethi4ppF!;U@p5#xe~~#d1>;m z1M@Lf-y?a#>WlS_MUQ!4vDFQQGbl^>{$;I^`tOcU$0^c*zwqQ!=rpZ5*+Mh9HJN#N zo`LSU&=SJEJqb%?lzu8NEerIYK^G=8nPQxgz{9>J; zVGF!&Ocl95>(+(^^8t<~3+niQJ2C+HD;gn6aGk2}avaL)aE!*MKH()OR-A}I(rp|+ z_&9wLDiTq=ktkzP=ty0M{QjOCs2#yVss_TvJHf161tA32K_5l3c!d_*dwEP2AGt!y z;>l}3a3&??>coH)6n`W~XGds9gtNUbY1wal>QgZ>1HAV+Uho-&sQNaiLRk|*eg0#7 zphU@`xLP3p9bvw)l6SaB+}(kN6lmMWpcpYapf3a6=c9GFoAJS2k3Y&Mmx~H~MWEO$ zV?&5O*bJ2{65#^jiNNAs8=c6oa3Tei$OCF3;kh8HF{mr3iKsVuRAcIps@eiGD;4D* z;Vgf#m$HmJjD-3{QH1cW$|lpHY>XgYO&J#RGJOQJs!8V&D38?h_exVeBPDFruEK)7Pt!%6yCe2abZGPUHc@i3`_G?hgx;n*)w4xi52MQ%g>lOS2)NbBISiU964QWg(B*)M~}hejdET zaKDP$Kh&Yjdoe6<4~#G^I`=d}_N78Rzo$>(IE9fo1@vL^9-5-&KJ20Q_wSry7lFNCu&0Z}RM zV1hbrBvwX=iK>uQsmKx3W$od%ey>1XfeMk$U6nMv=YNCP~RhNMJ>y!QueNi>S03h^=ynyG|->u7bbVgd>X}> zNqyi$hI8#@y#cqdvIU$qMhpGE|jbX-NN zd9fDUwiWBZ<%wot)tg?il)0ZRmrSo<*gzyOfSI!9B?N5zHn~*{Z${0`Gm7EOrC3DI zhd1i*iSN9i(ZD=9L~py&1;x^qIvtae!GWm2l-BY!=+nhui;uAgdjeq#jr96&qE=L& zjjjmFZ3DL}Oz+YFBWS?S%HtdCQooIM>DsTcS6lt1XAJ_)k!LN8e%B*BsDc*Wx5X}b z03QNIZ^E8;!0NX}{I~IZ>1Mlh8DJ)$6`;kV-;TI<3Onx&yYwpnJ>P@h9{{W0jEzU% zrnF*@HQ-GEy$@`|ety6_z}pAx(s95uc>V`~zOTpczW`@%5$|RAU8FugkKa$!=hL=g ze?H(Qz{3EF`wo78RG%-|Cc>)K-+=nNUj6--`g`_UDjoH=0lyD}r?vRq2-pgE7w`$- zE5Nsa9{?$koe4m48>GtdPxvL7u2J8KCxY#G4*?ACVE;Mb-tBhDw*!070c!#No!Fnh z%Pvg^+z40*(Bj^K=ZU-R(m}vo@8S%E_pqlOFzKNcXKy*0KGY0L_F94SUt^qUx z{toyUKxq*WUK-Nbun~C$90VjcW8Wq~(rf>8+JinR{FF@F#>4-_{&1fndCtKuZO<9> zC#`Af59Lzz=B7#Fr$GFS;y>Y-;(^CEI$H~_(**ChV>Pn^a|Lz<%s>pM(oQ|l z6my`=Qc>wtru|JPxo5mngb(%4Q=gj?b3}pQM@s}-)s0BV*E-+r;b{e8(lSNT8refy z#37|O#XysD$l|$_J2U=xFB)Y}^;$GKg1?jU^ z>=!>(dWfeBUB2!Rk9UfZO#VxdeOou3Hn6UPVs2h}%297c-hACU&jeq0l4l~Twr;RM za&1Lj@C-;*f%1dOx3DF!fqwui@50s*?B~~KuvDBvL0hpc$&kPArY@cLy=k>;bo`Ko zCdxE6?s0*YS#k1%!~GtDDk_y!Bn5xQwAvBP992m<4*Q|n%FnwPS_QkKQ4q_*sY796 z#dPL{pcW>=Cc^lf*M->K5>*c5!rNDQ1Rrp4K!naGT7b$UBfcz7_Z@<- zoB3z6#+Io6bl$_^)FjVo?nV^7@?b8ReEP$wI)u!p5LpY+BjiR3nWu#q5Hf>8t`i~b zbk@?M=zaTi9^>JbEKizyD!zu!!v43@+*cFg7%gfRLMBnj#ac)KLJBCvs)f`eWF&>8 zijX6z5^4Yfhf?6T!#Jl1g!zTQYzq819Efpm4MHsx+A2b;H@okk*H`d*4R188#kRFg zdI*7XsTrr4&?-gjE-N*vP0HzBjc@E*r4dos+)PNu_e%)}kra0@Oec5X43o-dncA6RVZWK$8iM6 z$8=6ce0yoCRd$5DIbb6LN*`Sb5`@2QpLJ|#8H z&?h~^NL`ojRx3^APO#!69&`6@_dXKC{GnR&;r%C?P+a4|5kGCxKY@yMjIo^{wFe9r zd19ak0t zwK3$Q(ns=W%*a?x_W?m$qhD-wsU*iD4Yru)b8)7mk-R91A(cjK(s=?HL@a(^HYqqS7)m7L}q)Xp=g5@np%4?CMSCu$h8$6^{Cr zpv*JaWVM(=YB#VHq#=GbFOv%C@~S{>7K2|VGpc=dXzkOf;>KyoUDHGbxzaN{ zo>$$S?e98Uyby7>%;GtC6;5*MH&PMQWSyW}HR(Btun)TnyuT3f-#vGYgf?K`G7{`z*PZ+a{ z$(SuBV|J{22GQG;LmcL)^uXcO6#5)OL7p=PQF3t_7E9 z0&;0i^(G5sDdgvH&*J$fO4R3bwbY;18?X~p(~X2V6PQ$po5}vJLLz};ebiA$s6Gur zI^W8Ly@VJ^1$Caj4Z+ng2)u*Th2dk&u`24=B<1CY zFl6df_n7BBO2Z`DzTOAB3F&w;=UrfSYi@dHRf&(kvn9!8(=fj(o{AfF84qM4jw{s3< zE9rnc*_q2$(iwNMb0k|yN8HKIQEVlha3?#*u$6ScUGnba-LkWQt)z4AWaoIck{@&D zEM+U{q&wL;iLIo=?qsKft)#Q=Wari3$kV63=?0on^`xw$-ikS=+IIO4=!QF|vhu06 z-FXf@%;x0Xwq1iiwC$3eQ+@OGlGp5Ox(`XrpPj}dK`1!yB6+KAn{U6~woNVx%9v${YOL$JV6XN^LKboSK08U$kpahdRvkCTH>bK?BD9mVD&@|hepv+ zL`M3+ivZ)>hq>#R4mbKCzuGvrFV;uW5eIZM7}_tQ=l|eMdyO{OhfJ^Cf$EgM$mmIV zjSL;W``*`mEiz8uo6hlvDvo?r(eiZ)+jhg&YjFTei=(nCP}b$HN4yFp@Hl9-rDIHh zH0D0ZrgYU}yF!GR(075-OefYG%))spmH=G)v+zGoS~0ds_aPOzuRH>y4S9k=cF?FM z{{zn;HrwLcWX2(R@-NwKdNv&AA<9?j<-R!8FIFdVeHthodXn^MbFE04PLw()@aebwCC>~(5azlmkAdu0vH9Tg= z$APPL>Tu_6{{Dxj!|x<7IAtd29d$Un=5!!pz(Ce^fsl%j2P-zvsTX4(;Avx_ovrRX zw}KqIx8RR5;4IR9w9cOfsm1!rx^9QEiKk`eY4KVDCD?|H!QWnhCXS|3Y6xwo^j$PY z;sieZ19CwpR$~9H_o^5gFP^EZJIh9u##7|=sJ4KoazbhD)JjwI|B?EiVmWTmcyiX4K zi>m*Rgz?i@fuW}evG_MfC?8UtbXw%` z1NE%f!ZPGZX;7fX0x;`qGx|0g(QD=xn`gf{O=!g^qZXVtkr9+vtoLTXzsTlV@aXA8 z`@|wc@5n0nQ;GOFw!NWb`i}IC$;z9U%fqpArV=Eczt}umshtK_+~(S8sEC`TkGn{33@GST+iOv8rc>^20H>*jlX($D#YA+51@k=bm#&?#J+_ z5??>T*T-{!>&~PI2zd)3>RGo`E2;fZ`Yz=jumlxO&fjYhJFsjj{&Erz2ok>IrL#Y0 z{l`Cx)JEYCrN0QDY==XA0#9c1GVNw}PRFOfG6(+h$kRmRhU2S&FdL)6=+j@L>C^nY zO8?`|L}er-zbRwY27Su??&n()CPlw0)>HAL$$IEXUF0n z+5j`ir?Ud1E8x(r;D==%9kPk_r{)=$dK!)>(%+3H(1}Vf^xk=-bV`jC?tSQ~s$5F_ zaMFBcd9jgOhGbOnzH}UX%6kM#HAk^TqX_u|(RVD(o7O~C5QjAu83U!=ICi{zI<=MmE@hKspHcf%5U!D)r+g-I(Ve|-9_){Jy;!-Cv-`1KvMQcuTc*-&YmE{wkv7aocR6xf^ zh#J(N5_6)uye$%Et?H4$;IG1Wt3Jh(!Brv+G4&FTR5xQl=E7l{MQnmaF6#>1s#p6v z6ExAO)}aB#DAfG#XK%w*bJRxp2o_cyYHC0~m+2eCm^Lz+;_}k?!2q8saxd{ismJj% zzQJ$;LsWhwo-~|t%UMBXyVY!K_IJ-6!)~$oTJ<>0zRa*<(C9OuO1s zmN=0xA19V}na82y@GJPi{AGpm3a*?AokIqqV#IMJIE1(uTeBPJ5zadx%oMgq{RYy^ zlE-3t`F=muhGH`gv-~6QpeXA%+`~VfiDO8v^;(1>gxJCsQs&^onEDONILg@#i>>6a znS+Fu-A)OWo1sWoiiAkTbvwY@G{8*2Er3OUQ(5;w_2ZxgRymrunYs+&T`thOsw!!g zPLIX|<%_Po*dP}jl*>BgqC;|7C)5>uM82a2&$TE{_EE#G1dR=kZG}54c{1jxryQ(Qp2Lb< z=&dT{x95=$4|+avt|W&BWh)EjJA=hb6h|NymX@P!MZ`S?>4=` zEoV&0_0C zve%3u>SVVA-`!^XQ4AS;6vrl;(b7^e=fY;?nEWpx(RBuVKjk$ECVxHRup+EN&CPQR z_4IT9QwJW34puo7T6Ya0LF#;$M&2yF*Xo;Z#&#z68-&F3Q!kLJ>fFjxIF*lg#-_#= znu>Rs^JeS4DXh{QO7?B*rj_~!Xkln49UA#4Vc-7EB{At|UKizneDR}TDpH+`?2dqqrrx=5g(M-}R9Ho?#mO!Ms*uFQ82z@zWm zZ@Mafmj^y!)ju{xogd;X!^P*wvQ5Fnx0xn~aHB?zBLJ%CKK6&RC16nWu( zInrl1o!r3sIRP&KnzG+p<1h`;X3+WnW zw=%uIKtEZvxV8BDd4r*0_E=y{(k@C^k+d5UKeVe6KeRs)KjajJ#X3RS4$Kz;>j2Gw zHURO2^kBSu4Yp>rzq4>+Y`Z$5I#osAr@+@aW?>7RjjrD8A#zOo+OeLAk5Wc~<%jx1 zDNX^syzzHi)iprq0ounmSe3~aB;lmyvzm|WA+Z5##rSkSKPna%U5BUyUP=O>@*hcm zD$>s!z|&_)eJ{Y@ylDKMlui_snj{7CM?q5!tzVdqIXz>$(q3(7FXEn!_J2n|6W*Jk z`6(a>IMfsUD?z_8LSH4rkTsP|JBTaSpP!^LgZl)KLsbgG_kyx2LJ|(ZG{6l2A<1}o z9yHLvZyHEi28OdN><1b=fvEa2#n8Se-SkRPI#EAO!iWs6_V$~)KEoX&MV;+8rHApt z?1&KfE4ew+1RmZ5>;@d`fuAV`|L#RbHeo6v=o@%esmRUwJ7;Gg6s&ZKz^P2XlAfY6 zBdW4prSc8#I0E2N2zgWa`SQBGhl;8Cd^dYH!pK7y;h0)3?!v+yRIsN8vx3akIxo(R;--x^?HM|4 zz++ULA>OX;Lvoa4B)Zzay}lIQDIVHGe?%YuSN&1SN%|u+F5E(8&y*`*cEqh%0Da05 zZeH4DYi_~p=1$b^G;(2O4tHiw;BKRrNjpq2@I`8wXQORiWni}%d3XNqK6aJ#-2xdjul<(Y$j z@a@mdXd8}IH0hXRRKM}LTN(WBz*zg;ulNiua6j|yH)d=m+(O1Bo{5ry?S};>;Gs0G$N8g-rDdr3JhFU_-*82UQDyTlcQaane(Oxqy)X zDlo3UEn>V6v6+4Ql3gwPQgC4lWDnc2r-k&^4M7>CQzHAqNvq`VjhDreb5WZP}q4!7vM6>JmRj%A!JL9FB?Ri3}agS*^PycmckdD5wixRjQ~T*O*! zo1Uph?!3Pcag)6LSsNWL%+A8e_{-r%QK!RbjkTqR5i;@<0Kc#&tDLxiEt?Hz*XZRM zJ-bEE2Fbr@Bgsi^c8rNpC%3VFxN7ZVZhm4aIR67LW`*@NQ7a?F?3G!aVPw}B0+?}~ zYG76wcT33bLkd5WVBtDYWx=yW*XgAMN=fotv50b<-i2``Zgay`ZeR2`{-(;u zl9>aZCiWKHnMW@L{IL^h_GNQN;U~Sysi0c%QBJq#7HvG5;vK_ErgP%e`7kDCndkmO%&(M?C4s@>Zz-zFT#PzQ zCd5}F?)s>>n!ZEbLhfnJ*e@viu0U~@dkwBaa46?^QK-1a&WMlRuXyIUexm#5ys3fW zWE#pt`x@yYLU3+`{%ukEpbe@Yvegf%tiXaG-(q71)@l`FN`Eu=II8mJzEadjnzl7G zk*BD(8VhDua&hVLjBq2I@ZonS=F{-vVjap2JkXHeiVOc*Yk`9!K@q9=Rt0 zIk&)x_bpG4JoazUwl=Y@04e|%T;ZI9VskCd&1_38h2ntLz}7S@fU(Lr)ep&xMA& zz}cTxQJ19r`^yt>TxK@T0D}}b(EWAE%C`T8Q=vS4BFbs^VH{tJEb?hp(C)vS2ROq4 z@T#Ny)XyugK^|70hdu<*0kGh`6mSI~`kyW-IVo9}q}S0TtoAQ8T)p`Cl{`@-^C~Qq zP=;U{AuM#vy++ABO6XX6;%ojCl`K~D;tUK`?pD+7bl4E&-kHtiz7Ic-Q?}HMpuS;w z(h@Us#rh{M!y!)jEekKj_-x5VtWe8$7=4FQJQ`;zPc&l&wm=z;XKbtZmAsfsM_`>$ zDkHy$E;)e|EpsgzmNSvW`Rn6UCegfNY&jfxSO&-ftOv{hJPY9ebo^gZ64p5Lea@);zTo-LQ2J5w$_e|hPJ(PcvV8|&M4L!Zz(C)ugTZ7(<+ z5zXoZQMIjWKY6|n&G-n^1SJ1f7z>JjQZgzKvWewx)e(A%)oufEHQW@^y3zH#X&xCMHnEZ=j{zAYQ(cCcyk5IU#yXq(mt6xUp08uX$j1=1k z{X8jJiAS2(M*pzFXI&BPc4p7E`mA`5B-e_iB2DYh1NvCm8r_Qvjg^B?Z zHu+y6*~1=~V89rYX7i5H%$;c&R+3OS=01RgDP0Mp5cU?lVz5zYom0!~WDI9pLTNPX z1NYT|wETDHq_L0WDTYw8Tn){gS7tOVGa)AUwKe;G(3|eq0C5ZZ8{J)!ERUbp7!Z~vSK=}M@--)?*z*D`>_wC3z)b=`@dmk3CyfGOprGH zeHW;!Y5JP=NH$v_XJgnBsQNK~lWA!QY|{MAb1p-E{!0o4Y8H3~stx&@XK%OXLmW#F z!PcY_gL+Xbd;T_)FCRi`S3obihF`rjzJ{~vE;x1~O%)~jHTNEB6&f8>8JxVPW&eVl zsUhNOVj>e=MX^)@2#*p%QCDEnaw|C{z!UfUm!h={MQfq0oq0j93I|M5Xav2!s*pjB z<`Ei9uS4h+3h>Mjyb9Zu*J0I?Cl(`u7VC0-U!F&UugIuBfdO2nYRKO7EssF@y z&Q<4jD7iO=Z~68V(4yw~26?_wo_{JfQ(qkA6t~7I_#X0~m zzZJ!OoINbn<_DdY8rfy8<+BduG5Tk2f4FG8 zX4I_N!;W{?$R#S)cICjO+zwC2r>FOz>n<^4G#l@(;Ny+3fPN2$mTfP*F>;MTt}()c z6=x$Xw$gy!$)&VKNQsukDPN*ykRJ@AkT;C^o8dtzHM^7J_6UYK_Gfk(Dqv zMHVXVvJM&s;|ldDnQ~EQWuT}7lPnIl9modFnMcOA^3vB><_UIb1}S=xZ47_8C-TQ< zf~++EJE?m&hDGKh#hK)x#PU7pGK?PhEUjkk@cI%ij(z{;sw1|_l27stjIe2xQlZt{ zO59ORH8+mwZfGV^Ny95_quWD0(hnzovY{nJ2M+}$j3z;%K$GBubv@jxVvt>_%>0mh z9l(Pi7b#KDL-|03z|m9yQwFMVMLMnM($^pTwOrjHS09qAJ7KDs?r1>b^+#`8ve0ST zu+?RHdEI0XwH;nz95DJV&xJr=cny8N8edH>%Qk!*vO}JRD~o-{^|N=6 z${gSwQHP_Je81yfEmXO|=r34Vr?V1wvRAOO4*VMUS$)kITC21E+;NGrMRD*|0O10m z@}>E6RKdtV5!=RLbY!Z%KJr8LuBl?LAGIy!F{5xiy%iH zA5`P8)>1g)W0a-nZ%|+0`B-Eau@`NT)@SrZ3eFI$C9)?ljKOJdV`!f)#sozj`K_i# ztk0C#)J(Fv47P5vySxUu?2u{M3q%_GunMw#`%GxyG!xm0nY-i3^Um$gUi;50VDG+* zgMHs^`8p|Nq#u1Kg?>^o!@#z`tFUcYtN-r4K1En^n>=p}oK=S?&UV`l+)rdX8oD^3 zUke(NtJHQ=y8<)RrUJ~2Zvfp6a0ZS6S zOtI}~zW0!6=?vP_q8Rrp8rBlufhZ zHlLJ0VRGmS?lC4OF*=Wou-_D`wBS6>R>M=^HVvKTTL7P&ttP3jIA8uywSucR`n z?!sv(TWz~HknR)ZS(r7rb+ySe6*E!uu%05I9|ietB6%i==}Ruk z3eQopZ4+}n_WTye7PB)3h@C`h>m0YM)ptz4@DFu3`|S6>jThis?3ySMp25Z$A*!A6 zB1AZekit)0glcb2u1{4nN6D}XUdo6J9m@H;HFp>Zkg6;^K(nkhwOEIv&Gk>|s*!KA zVA6{(VvuhQKc0KpIO%-AP=F0E1uz3}GhiWL?d9X74S=@+d+0anAL+Luvu!t&jOrWU z(^*`_@Z~_oVmT1DwiS@~6_!fFSCO?zb4#KJL*6{vH@R)$2o&a$OMnek60Ibx+@7E@l{+gHY4z{9-0H_?z>)yEnl{mbN zJxr3vHxe<48E_g8L@QxArGKlbu>eXz%$-m>3(TiUt8U+-F3FoLFY3b1%5kIUs04nd z&Pa@*s$3P_=$f%~vyzU4P!m)B#3w|IRTaM0Y^QPu-h6Ll2b)2MlE?`saY1YnzE+D< zOTxt?S%Zusp|=@Hy$$A!ZlIT3^`(Yh_<0dvcNnGv`J~%4;$59^LwSLVW^|>g#1rQH zpd&HU^>OGjVr3|?0`wf0@)tg9qlbNXmf$Ls3ZtdURf!C$Od%@zE^IsD!t%G%__(MG z(fd@n96-Z&)s_j%njRqUNPQgHV|_$npi0(_aj>IG89YqX!C*0JKNLq@^o4d=`{^6q zGUl@Kt0gjR#hK_HheKnOV2wnkt;M%5$<{&xfytS+Ewt@=3#utT+FH)1S>wnzXbl*_ z;o9pD_T;|HfnPJN8ZerhhxFlPL-GL=JxWL=D1o!V&8$JEl z#G&%!p$zv*(7J+Bw0n#`x~GW|__y0#vX`%SFY3e+%fNz6 zT3?96t@6F6V;T^3O1R-deH_Xm7=h?K^E>98MO>J)DocFGl1Ta{|DVt98#d&xys)@hu+8!-vM= z4~1{3luu;b3zp!TU0H}hM6neIChx!+D5Yd43aSiiwA<1O(lKmCV<^d%(FK$YZ7VV2 zlw>JbN!=O(wEXIC{$`#P4MU{^fN|)znWVnH?916}#0KZXxAz!|}7xp)u zZlrehl=pCT;LB*E^xh;>=Pv z(+lW6)(u^E3xmW_^@r)-sRilkjC7J$Vo4xLSC^$Ax10x|uJE6tJF)Vtfw`UX{D+kG zQy|DF$paAmvJrDh^p~J$;y@T4N=vp#J8r`z!`wQI@@kbK)hUSZ8ZnI1te;os2o|v=kxQ<*y@*XqQ2F3ArRt zmdpZ400N1&oWbRaQC8KpsCPXmca(hTAMQQC_66qI*n-epO1I{I7H)2aoicorUx>8MemN6*E0|_y;8qZ@ z+N?+I3$G!4PZ|8rUdLL3Lt%~u>EJPS@0#T||CxNz$Pw*BqebO0V`NqzMEbaS|KLH^ zd=f3DRUbMK?-226Eyy$V$LBG8^i2cvouj}I`lIG1xrCLESXgcz2w?lfw@`Gl*r4mx zP#)(Y43T2`Q@%+#O>xFZkTMr+7$F2LI9tONjvd}SxAJ_7peKo%036<v1L^9v0@-2 z)kfYi-Il@h59BhSU0t4D0&@}O>`5ij;&N=O2G4`+NZtR*gYfg|XgzQtQNs`QaH`ga zR87u!g>+i^Y23ygfw}3_YuzPMXR9-5@X`ixG=50BeH@_jlLPMdQos9jv!fl1-=vNuVnL?L1G`cYtr5ly z&YI*D&1xTAj&inRjNBcRy~Wvqr3;8sl-h|dR%Dck0YyYpL{@_7beHf?ypM4xk#Yp` z8|iHNuJnLgUK?S8g8>SJ-|6y;g;=TP?>CAQAEv7vnKROnT;%2%>FUA^UbC9LSYxhO zuRZ41SejpOg9xb6|>}pNlaeXb9b*7$R15bbG(7v)A{hP#qOo z-aCHcSP;21&+dqS{4$Xzff01TlVM5Q#Y73B`%`@}YV#Q{kM24ee;O8#V0mZI(J2aI zW3{g>2zz2!;(o-<%dglM45bY4Eu#97wI^^%0>t1fLGj^78j#BkAT2-cJUY;Br6#E} zI!uD6PPGS5skvylv!q903M6NQU1z{efHLFum+CKeqiBKgC&YvNAF zA5G6V{+PLYg7XhZ(2@xY84|le73r>nFJV6lL;@se?fJBUSR;{0juq^qj#wkrvC8Fl zZWf=-041KV`)gQ(4huc<8)B!d`33*jKPnzxhjYz-BxP>Myl)8LJW zlA>3RwIpcQ?2!Q;O}01QgK*d7~2~M z2tr&WgpE1`_bPQNGEQdOp1u~fp#ByQ!5)tQmKzw^Aa2*la%{Feb%3tfaBlW(PgaM1 zbcc)%%Vb3-oNQ{^6P=}-u7BEhfh59DBjBb zzG}&UWE172o;k2Vqk6PsL@u0&T0(c858zqMou^U>;1kJeS1?gb`44vXNn3Pq(E(#L z#j?-L|3|2eZlnf^hshBGD8gBTP&_PMoA%*tpd|T7Y_4ycIXF9jqbs{@oNhYBZX2Ic zpKPz4&fYiwNa#fkRPVj@Nl=ns#vX}9Ol5+MsRUdd&1ksPEMV^sIWCCib$E-Y%Tukf z!QD(tPhxO)&|TXakN@z^Q45zW1Nmsug0j1gwH#{+ofvkZ;o63`2s$fCZW$uO%*>l& zT4TpGu9##D+Ii652iVmb?B418L%gN9$pI9`nd_f)AzTlKCR`BDk$4+eKnDWbnhVY- zq+vkU4~Ig?WOe>o`Yzt0(`qcRy2vmc3B90!>b;j$8mO+m0V_iBosI_6c~*p+p&2N& zN{%^LVMEM$3e)llhPo*Fytnnp%jYA!#qxpt8%!(;rlg6Nkgp*)`vPkS9FLdL{?JPr ztEvC9QqHg zLF{$;Gv52@tz#9uNBquBAWi0O?R?_i1WVeOCQmv={EeoFzpK%?W92J?iA1<*(3l+k z@e1q+nY)RAt!B6k=#wXU`7tZ{V*V?kA85Gr;2%6X`FINyn16u3?e5^7qN4>D?dE|{ z!Uel2po{=$KwWU=QlM_4tDerwJD;VuARasxuzcW4iVY@-=w%~%4GG2uPY~y8wWzUQ zwL~ngj;7CXD5Y3&QO`XoCPM1s8 z8UJ`VS*(1L>m6E$bEIj^F2A$(h@+M#%}tq&-F{!G-cBiGY`=y59Dmj|je%<-n-Ns2K7BmM^Z^YahdF?#D*1xeForya%b-UME%IyR9W00VeC^@ZYGz4rvS zwOk=Lf*HYtmamzt4)sodC3WDK7F|7_yM^Q{t=Fn|s)zmVl}8*a5$K+9G(H((u3l^) z7t1{O)mIS{A$pw3v-5fzoXnA=Vy3aT_n39qIZt4!ZAU@seD723C3@>zt8O3Dgs^sS0CM`-6f{o& z(m!KT)ItioIIG?hx|bkTu2tU`3CN%nEN=)+!4u@4tc0w6C%tsnX&x%7du_nF1#APx z?2Ud$oo`z*LIX&DMN%rS*E?vv-bm{;Hy9I){V+%?HrI>%2f=c}C^&m-L+iC*j^SSr zb<~@)Pgh!rGt;*Ph)MKM+S(B3+!*Jso19&_dHxHb&G0MJkopt8s?NGVQh-r$*AZUQ zL&@*hD3Q7dM)8mL0i&e`Mhknx=xV}99!ZAxhS5Z(6bJ;2)CG2Rq1ktecBE6ZBb}lh zDW)YhIJ<^+q?_Z$`8_oa=x$Ej{%ptQ`TIiK;pnD;ufx|K9qtSGt99^WdVqhBU^>=j zFSdJau(kd(j{InC)g$2yQC0Z|L}A$Z+aK{Q0pCz$5f||!zC#-aQeZ8!(D~)FM4E<0 zbl@i6ZaUD&zyg0|o!^Zq^bG<&;g1qfz(xJeYLxahrC`^=oP~FsVDP!C_zxOZ-PP(AD(2tv2>w^S8{-Zj8$xqzVB%8MTZd~6 zP{h5W^`DKWvIF(2fF? zRWXh#41UkI9W6FI9O->Zb*@w$8&&sa;19=mCw17nHts-x5Oc3o*AOA&-V4k`RKywE zYhT5kRvnuIp1&lIX$r=oa?2o`;aXyXBLdc~v_9g_&}uwM0393Y23}JPlR1V-jF^#) z+0C{mpNBC&rm{MQp=--M#!>70@g`^!X5wWilUy0(bWg|EOP-HIG2Q#~eC(&*YN(5787rrvrk-WySG0cCkmcV!*BKY04;Wd68aUB-(ZiQ$tjzxnE^>(-) zB>0y=j#<@4fdFv(6uMd^9!A)p$pg@%F=*Gi=iZhUQX{S*VYMiW6U>W zwg|2R??#k5`qIt)<mjAsdS&mZ-+j&Q)iQZzpLB6=~_&nYlBEJbE z^4vucDMeFA2;l|uxrssSCuAIbgWF1|rPNA?tB>05C%((YIm2%F;xXQX5 z5_C3%;7*~Vvmalvu@E{*lJ~nehQ&M$9kN#&_+%LPAgSdz)%N~(t=}g+;R`@`5@N=S zYx{)YsVD@W3uT27ypa%uJS<5B;u4i2B{5B3V~Bh4BkJMx8a%M;!5GX(#6 zlhtW8tAn}8yrmDIAL^83|FoJ0BvyhwCRZ-*yxqne;iF?z+$tCJsyEdOo%oG`N6Cy)SJ`9J9nKiZQ%wHyxg$Cgu z_(hTLJP{BlUsLhN97F_xQ1JVcM*iwfXKxuVp29UqV{;f3p z(%R?6O+RGq!!M)>hYx~yKzp+4r)Zcym4pC3I&J7L(W8L!;6O4!?z+O1s*mPXowIw+ z_!dtvd0NZV1M1WXY8EIXUc@X!LM{A;_=Sr}EM4&CFbt_0P^R~^FukR73SS*ZwnMre zu0^vW!ciM>ANPVUP`pYB{+5Y5s12~F4wz4`p(tuJh2zj2CTy#=r#`^Q$T;eE@eR1( zm?WM*`z@Si)TNe+i8xj9D6+1vaO6216`Ftx)TY;j*KtY-@rxzJqBfW$_#`Ny+l6qmG8{iktO?yNJe& zoB~HRL@e3H-^xJ~?*F0_3zOmCeSL*eCO#dj*ZV$Puy%>kw<9X4TBTC#PCtGX=Q4YR zN!^80BwP{5LyK*YKhz4*bkLYViS{UR_<8){1tu-Km|g=hvx&3J1mGUQhp371UEWp& z>W7C|MOFjn2FjA-O2Dcm3eaYL67|zSIq52Flx4Zqn#( ztNz<4w2X!C-cVs;c3Tk#vfS|oCG50S|B>F>iRy(BL_hNz*=Knf@lKjgeQMuU^AgQx zZ!JZ`LmLpS)+QzL!fUucRZ9lp2r{L&Qn}gt=bxaCVB)=m?G|PgLe+5@)qnbJTKqCO+Rej4wAmK zF6gL>R1!uX2gq#o#ry-IO4O`hd};XDYN}~ITm+}l5+~TP%GU-RYvBTOjdXz_)I|Pq z9m^KST8XZh3xTn(m~RYihsQzvJjT3Fv)DWPVi-RPh@c`At?}@6>MJG(LRo}~atWBs zy%;8+h5ZlMe!AsIH~VSyU?Qs>+fToMeZLk}>+h2Ts@-pXv4vo(X~KABp3VNoz{~rC z9w%B-3d|s{37Bx+9kUC0o&3&qs(W3~d^;#M@KA3Qi#`=gW9gnyBEgC71=)8`k#7SJ z!NFdqaqj>Rgx)~C`dODS1m#9od*FeiJ1}`r$AkyK1NRp)rD;l!Xf*TzID-KgL#V7^ zHl%j-X=XyYfGAO4)pyoqtGU2kxy<-;%v-S&{-p}*pOqk5N| zK7HRGu7z}@R&Ij#tN6MNq5@QsQ|*~Y=wP~C2!2wVxto4AA?g|Dz^Txw^~_m9bZ;Za z2PguQYA`2p(GNL6f!A#I!`BGE(D`KwonI6fArf^3 z&miJI>w}KJ}9BE^bH10BWKz7s8Aqa-%-}4jbH;e{N zWG0O(Uq$4bLVdxh*AHBx^E?-j+s&7@Cud@t2n|Np>NoyBjM>8Lj4}H=`7v}Gvy@OA z+#u=;FJbaW>?hHSP)`1b!~PKBtxH;nH=t&H&ZW&CzYIGG+a;#AsFm=erQX({9fJ3?FGk5E7165G3*HvR(kzv|I{)=fSPsK?^R z0&Ji(IT)MUvRn7slC`2GAc!`>&{#qxt?$ENt9gN@HZ;knupTh^Xh}pv#&~osyp7y3 zvAoXXkvX`aF{hs|Az2d_6ofKhdPE+pdA!p$Fc70M?7;AhsRW8FrDnk5t!> zZi*09c0Q+xDzh(Px_)01gqqVL+IxstJ#cr|ie(>kb!m;6BOAM0Z!G0fh*wL*tE^=o ze2W_GFb0|QEYcs5Cq?-twHbDWG28v#_3$huCG0x2n9sdP1GnbE0FIqW3E7viVsBtW z>$spfA()`+{{|T9=++TZrQSODnVDJeWLSSY)U%qaAt#9JvHIE1;NAH@4-E$%^~o&u z_i0A}x0VwBlF`P>f1f-Qx~+Ums9!r)zLnw1^Il(}%e~-=Fm!JZ=>0>ld4p-?++vJFo}b5utp7Yqr)EET!Gj-mZE zh4$AQf(b$MSbY~oR&L#1L3gl8dj)?Zd&RH@$OP14^v0M+E;#Sc|81xfjtKRFy8?ZA zpXRTv=GT4b&F{&>A)+^lbl#$+-)nyoG=Ty3m&pDk*nUHLfAlB8_FSL(lR^DCdP)7k z{KE+{qe%ShN@JdULXHQpggSA)FNPJqxFR7m>NL%h@SQ{#o!2w84d7P5H8y}l22L2I)I?RtQfy=FJxzAmoeb zK0xb?0eZGi1EiwK`bO?ZU*+>Y&9}^`uJmcX#q{XT3r2VTw@=+^fEPx6lH3CNxPFZJ zcE#n!eDeZK_xaW@^a|qr>dpTTyVlMW1McMnw;LZF5GowF#I#!wFvLtAQx&@Xnq?y zIP3obav%)(BzY%9L7oswCdjo+y1wfVwd9|CD9gIrY^x!=mnb^^Z5NVJmh-_3=UO_O zbwS;Zv^UXmCf`7exE$NcH)u`6E2SjW?_RIEH~AXL32IFFCVx2zR^{u0rnv7~LUG^4 zeMd1u){%h}HuvH2_Llx?`FcFxW`{q_>_BbM)DmjBt5YwL*WO}@+m0gqb`!rHV7%W%e$c?`QC70Ir$|QuX3c2^X_X zfhBJz!^0>r^O@wJd1x+tz~N`}?+f~QXb|qqz{yn<^3c9U!N5IF|I$O@ z-!P>h{Fe@0XY@rZ%SQ_>aA66C-a_&Eb+QM2)mIqu-WACPeY}9volnJtUV-mR{i?q6 zDO=57G`h&+Ks3VgOfrC4iawL{*T%Q|(ZpjMO~@x8`e^dRMUEy~%*sWMCQD!huCI~= z?Bo7ntJzQebkri8f#wv(_Av@?hJA}NYDjncr$z&Cz}eXBSdYRca_@4k^*dH0d19A& zNgiqk7LkXZuQ8=STf>n5f;pYOMmyMdlO6W;;N5M(*p|Z6!MjffbK2o#c6WO)r-S}> zct6NKzTi65xt;)x9}$?g7FQ<)JX;#ZY!Ai|>*)^x6W$!bIi229@KuPZTput?x4B)I zR=yvvjsZTnvyv1ui(vq&cU=;{mIB+cVa5a+&kh&e7uf9~1u3%X7c+JH&aW@N-_boY z$KvM!?j`6aR-sb;gMFXQ-k;Dk#VUVa{0$e>lXQ5Yg_{ZRSo!K#M;qbKG3Lvl`Lf(# zEV0r((A`kbn5^9kr#lpC#}uib-FMtVB$h!0dA=`F7*Vn}U^@;vRtK9t z+=J+Y#t;9+-}ZdCoAgMMN67$RI-A-cV1rFLHWs@=?-PrEtXGdO(v2;2iWNIGZU6)cMF7P3Xt7H>X_V4*>i*r!4s-Sx4)c!h+^f4Rl|7n+)!gCWfBI? z4FPup%M&nlJ@rC_Fg^x8wPZ=J&$tB1>{?B9$mln4I_n4TuL@J0* z>*vZ%&gBQnBzw8A6I;Cv@I4A@K9D6k@0wP^uBhb(PUXFKNOYyF2Dc*H0 zym6UQumDFxmXw-VlA_dUpih%V3s5ZlV1qGBNBiMZo|*}rK} zoBic0a9;6k>kLeM0-jQc6bLNY+K?AWS;H+QNmV_9`N{S7*BJMO+ zU+(GPm2n-x-1e5Z;3yTrnzKzgL`mLMzkt@WMP3 zeZ2VmFFvt8`LW~g&G@8yA0RLC`jvFOhe{Ng@;5v{b`Ws_$$yaHZ(^x<3O5i^8Zax)Q#G&Rb+@!HWk09( ztVpU!d0aXuKB*BYL2%J2QZM2EiZp-!Qe+7c-`Bt(TcNFnMztFly95Im?heG@M!`tY zV0<%xSs3L*k;k5HF!ufoh`Ob7oj+DfZCfHf{RL=UVn_d66^V*v&X_KW*|hVT^1 zd1IMLzr$rV`4SnDi&<*fU+LSctz` z$>4AC)on4Fj~p)YheCdzQcA*ehE9N-<_SosF_epkRL+!-?{YM3B(xc<4hc8}a{FkR zVg5yls&qd(Bo7=r?g)IH%G4}Rj@m_;rpoDp`7&$v9?!M#)x$lEhz0mdjISec(G=u) zN?Vl&2crO+b3(HH|s24Q#J)Dyblrl8pbvJSZJ8 z%sj2PS3Dr!G#*A~q|(SYYS*cs=b7lU6Q6hSiA9U_-GaaLJdz-wN0FL~gh%Sw%p+wh z%Dd3}?{n{EzE&jO2~18A!$4jNQoW3v!l$uQI5Jh6)#I%Qjqi%lDAQb3*=6!x%^93P zBP5zt{ui?>0@K=+;XcR`Mgkz2feH8!I%;xh8S;gdQVy=c$dyeP=~-9{Q;>`hR}3EX zjD)@WP9zl>qE4}9Pq%un#0`^!)vs{Jq`>{W*aaz5!Rn^l-@|{^yWy6-9oJeO@xG3{ zf0Rs@TI|YA%503th%4s@O^<^(u2EjI!gS1xwHN>`mz$cKzA@I5Fs_ki!NwTRS=?fg z!4v8<9q^``vj%xas0%3t(Ga?Pc{dVsA@dM&wZd^NuFKI0x6{hbm^rYnMa(08Oqz3H z6DN0R4JV=pt|iJ#%F45QtbwVPtf|mfwV_B!DV`!VD80BJN6x_1r0gaR7)i#BL`kXz z_v-o|GpmJWb%H<3KNcC^RVW#9%&H}OpC?^AUuU^2@F1UnTaW#7&8PvcbfqlYr1s0+ z=RFRvSyS!a7Xo>ftUR;lUT_9r(WjQ|+|pHjXo7m>eTi~{;p&TmWMp?W%Y)?Hodu~e z7%P3b$@NS39wOgx;RLYF(ts;P%|W_Wmq^_QPYb7AJzbjFsI0KzK81k0t=R8qLt1&i zqaC@Ou+YW#%E4m9_<=MLQzMr$4*`#VTEKZ!z{(H5x@N~wJ0LYXPSdc6JHSCBGlK!9 zI0tbb;DHl-8C_KMGgQ^}7w&dEDN;`V0zS`_Oj$gi#7m%x5+Q#?6U^D}QcTZ*DTrlw zg-Z>Pdzl**SAqy&=q~2}z8y)u%opIx$@M8=7H(b<#(4%llKCl=H&skYpay9PrPE~t z6Zl#KKQ3<}FHchdH`38P2l5vlYnQp)m0VU@ByQm2kri9nT)ALqJ|cY}#puX>h^c>~woDf)S5XbJNYO zgUN3@QRB97L(3O>_F>eN^&&AWU$fuWa^4wJQuJnkf$ZXyO)aFLucA1*z zA;ig>x;yow@@1QQ&6f=~Z^W&j{}Yjyky6E1!kL+AU}GB09o@vKDb3K+rl?4pI>$^Y zv7~-DiV!iX9eIC2h|xMB=q_Z8dQJwIELR+lD!BEdvz2f9`PaR3IV-!?0;jVNlXIX3 zWiOz#^5xA3)XNB5@jOnnc`vqF-e8^pFrb@Oy?2fiN473%umLSk2!Qj zL|_9L{J^D*T_e}sW(41mV--#Rlut2BSK`;C!6`3!vAyS1m!pEB*%>HzK% z$E8A?ahN@a!WoC3e1cP#WjQPh$k`0D18Gf3++dl*(uF*8NIBfZ;t!27a&zV>)Lyq? z2R<@eB4>67K3e~6H9q1m$igZ+$?&dF=>G(Ga^t(>|R zPctH);%+ZaT)U`%5_&!lKN{qj4a4$G27&Q=k1px9%vH6* z=+cASA-XZtY+Ci&uMqQt&pz!hO#Rv{&-X9Q)1!J5rhQ0H9rU*NQpzd$INpQ$khHs3$J7qi~7pU)lxQ zJ1@*xQ7|Lug#^#E{ClMraF0Q1Xbn$w7xe|W9|^a^1NLs#dL$v+E-3S)V`27oZ1dL3@Nj576Q`O`mDeJ&atBNyHy|@FSkf zzNJZYXT@};us;2d5%(#KnDLTc#(rhLz!$`t>QG&WysGF?2|S^*(NyXl{){20OT()gKOtairk}^kItRLygzc&0=*1< z!i2$6pOB1Lj`QggkbQB{2r!$%7Z7KcGGvBnd!3#Cx6uC;W0WcYQ8<6@*kvqu*3H=N zFl|pk`K$3s$0rXTT3htb7%%8ENFr-4V8IMqdQwHE1eONK;$KS{n13nQ6WswDkw2IB zgM7r>&BKN;ah|u3j>ARfvXWx)GmF$?&~*t&TxIP-n3ok)%`xNB3(<(T5TMGGv1q}! z(^4vy#_|(wUq=GlB4y@%)8)JS<-4dYU#@2>MUQnPcyEOq2}y*-vybTryTe*lX@|6K z@l+so2lvBSl!<7}C6WLQLxlo#4}C|xcO0;;h$~W7eU1aR^(n>!gFQ+uwQ@DW!zGTz zL{vi!oH#6uVzJm3`AQO3(zi%%P`DrPjA|Ko5ZcXZieU`P6Z%0nCw*g#*Ss;-8~b_; zm_$D;vJ=$@ZPh=covgr)dx%JJ0XP#%Fe6LZo|bt8x5roj0e$4_NVDdcmktjUSd$GjvYrO-SxWH%~t-`^eRQh&l5QXCx_y1cJZbXZr`Qe2~B2b?()PKh{a ziZM+lI7`h-+9Jdd&|j`k+ykiwd)?@NwSYHzEGq1lGV8pr!@A^pU&oMTX>=oN2?i|i z1VnFvD-XLAEA0Jc{zUO8n#3Wf^+vp-5wa_@(4{hQH$S(uUZ$FB3hfw7W&Huv5V`!^ zN@>_}1jo*gQ@9y2g<>Iq;%ZsVw=_B4R)ZJ-llHv7d~V3BV?6VG9T}eg@pW8F|J~;K z0os>Hi4VI-Qd=1r_MkEvWD&cU)OU=ET$_~^b4lHm$)an(7FXjTv4W=rVg z@#ABPXhtkEU2<8Pj3{T~0eN-~d+x}Nr)%H6nIQUdzKRZ)8e?XAuBJf6$+WEITA*Ax z3=@IuoIg&CWaN_MwKRDk{Q>$~WY6X+a#(fK>%Bs z4Hi-&n&q3!F1j2OZd(g)Hu4*()3%@Jee zcrfu!@$ieGMsLEKnbsbkr_M-G&jn_A5a&RbvINz5lL~%Abbwx#Dx!Vpm&3uf8Zy46 zb|^$7r=xxGJD8g$Ql{>lbVvJRlQ){>x5p=Mw8(FZCadl?G+q${@!-Atc>_ml zR2;dx+L6QcOOt0rz}a3DD7Em26pN`}^Kjr*3=Mk~kM1pas5;v~&TOZEcD<_dOVbL+ z7aj{0LuzXJYl131jb1>DkysG}h2m>SHj0t;Cu;2e^K(2RG_!~#ph#8a7befO8WTSt zUlRzZet{HYR3_^9Iqs9-(C&N1<3G>`g5@pbGq;uo#oI?|7Tk)^cbOEOl4?>;^Onn7 z@IqR%t`;U2DMy|wt`4O0DriS2+w8;Q{qyf1Ms;Rw|jKY%`WRTXO!eKrVICjk4!ow2`@hl7SEjaLos|m^NA7C4!%|T#} zl!%v698*%AhtPjAk|b-p>9h14$0Xjl&!f%b{!xmGGqkij0Iy8kL-qJl1K$%kM2=8S z^W%Ja%%?z|(QDhUff|2deogn~NsuW+31p%K*}b}w#P3@Fi@feQ(B&tq$<%=(p0do{ z*-e_vjT>p9-9^qITy?wja*Pp+-DP46YJsddsF6*o)XpWJ;=T#qg=h=1Gw4-R2qr29 z>-|#~&XWaZTwC9`^m1eW)ZjgYqPiI0rdYXp5mhg@1oG1XAS*x3R{dwpe#OKu$KxfV zou;FGpFA)0io0d$Rhs=mYwy3M_(ErtY3Or_$U!62=gBZ|5ly>1 zvsXooRVR&ACy!NBe@jGsZ~g7;HeRsLe~JDYCndeV$Ttx^UL|4+iW0^yPYdnMPky@x?`7hAVk6fl8T%4bxkHA{iZSZ{c%LiKzX8kR~-hEp#ikPz|@| z@Pe0EiCBTJ;c>HL+-9C{*hcdFED>%38$CZe^Y-aag|bEyHbQ187L}bupG-*XghM>^FlfA1pj5^7XIu*Es5+wxkUaM!tSr zf1S>+$rd7Or!(+-@j6T_n&grEsM{Pj_)&?t2DL6qFB26q=%w?cUg`A#%%fp?r7>nr zcosRoS1JFOXL=N$$MNyuvl5>*_(XDKtasq$TbyL7+i=oh^2FDz#UB^sTvn?TiT`1! zhLw%^H#C}bpAI?GT#lW#>a7*v118VlfWxk&C6RjPzp$7Cm#VkOQJ>y8?MgeaED}fb zH>Yd<0S zIJUA9;#`yB_=uW4gwT|ef=9}_AyyjTV2ZZe!-7;nSxVlUo zkL#3>0;p3{k`0EEj5Q05h^4{S)OrVLSFXkBBCP+C0t@5>8|l9oWWdqs!hMy{dC8yd z&SJ6e6wwK~Cm3Io)R_Zli8BpqnFg=XYrHTIP~8yrtbTU~OMAm01_9L$*2NWx6)1+c za6=;U*{Q1EZ5NL+@b(;#$G6=I(`oi(yY0!h$*0tdOV+K_*NrG#BqlQeO92Kc8-w)Z zy(mMY^Ug%d>H$CEfTIpqMj>f#gWu686by9Os9)-L?C^UxiK~fOLejk1@7TQ4vCE|1 z3G+T2r>d7>>>#(qBcU!V&S!l~tue^{SDM7C!ea6AuZjNH=94_Q;uX$jNq)zPXY!N$ zZUOP8*c@T=2_;k6fw?|7Tq;SvwYxysktk`Z~8>2>5|!)Fja*W;tFF{~FzV^zyAy`ZP9 z3|=CzHF*a4&Lw!Ej!nX_#CmT+J~KGILiJ1nB1B_v0`MB(87`hen2d{uoizc6xpnKD zx!sP=VfpG2{RT5wMtELg!^pvobharLcR@QWZ!YE^W^XJM9S&T0gp}KqH5rumJ9haU zd;JbPKje1^!m=ciIxWyn_lv>_>+SLQ z4FyBMyvy%}M258}2j}@=%fXmH^cUBzz(dnz6RwH z2m`ql>gps7NL4o=B-xJ5%Fn=+jqADfAIR1X`AJ#FkEhDVgp}s7wKT2OqKUJsG|<7iQVTQ`ptu|heRrqRhE9J|BoJi-lc!DakQ+qDd}MQm4;)23 zYZ=O(p|e(?lB#I8|l&2hnz3gC)=PtQaS!?YtoVF9d5E>T4r#B@tpNkvzYh=T;@ z+mWJfhjAi;EfKzaI%fOObxQIu432^=6Put5`g|;+>GmSUPLGRtC$(z^p$s5U5mzh? zLf^3JSg1m(e2NOjwkWLp%z|fOewYD%sLVtS+|b^J3(2Lj7ku_Dvdz6o ztdXof>ihM?7&j7MeAi!o$Y0)0Y7WGdnSK8vM%Vr|uFZCIp2QzSQMQ+WyJ0&aK8Ni@ zGB##j&5o1AE8)jjh(_UUl*4~ck0%r+)f{pa6)WlZF6I(4=)d>?+yqPlwpTF{UtLNn zz0SdF%otzy%rS>KNQ63}!hwz91<3 z^fzbE0X$+qy39-_F7X)NO1Tzby{`htE?Auk?3pCm4rLA@+}$uD&LZ;gh%h%3<|8B5 zo4Br9>H7%(Bs^mL;rJu*FN?xo+UI)3|FF^xfB3*^GC$*AkGB!{``+z}nG=ow8k7lB zlmv3|BvqSkLD?eVmhwd8Nb>Xy+kYn~xs+;j1de`FP?5SqmPQOehQe7AF%G(&(Y|z; z+9jzs95o{7ABF$9ha>Uda&J%SA4Z8V_EkjB9e4yfc3aHG{3}ydqYOk^@f(7T%Tg!X zUBZqi6yS?FTv|qRm@IK(3B$2K>|T@t{R}!Kjg*{~BkYaTUdn<`cFTgH>L8Gxe6Gx} zH{>JWpmmS33(HB|tfLfRs?higo5RFAa5a^-FcD996#%Ix5dXolf%xKwG#=6{iS+=( zi+ui1elAam=&|v98=m7gTgo7J%Tp%awhmM_5QTmx-%B8C^un;BIm1>onn$tEbHDI00txZAM_;^ZUdO6ZwqznUx!SJ$aCx4>TYB-yK6 zY_Ag8gyxJCq!2DZ`e4j2Txk@PJxJwO(l`Lx>9%HJ(UFdrC~~>+dW*JaZG>sYrEH=x z-S;4K-0%*@`>oQ5cUYL4@RlaKOxH`p1tCIuA4z$Fr|B~cLt8nr{vla^Ua$4ZxV4uW zFOrRSTXIZaYuLU;n`xQSM)1ywRM}G498Pi#tgtZkW;UK}(yTt5KMJBhnRw#cAImx0 z#CD(f_Q&y+4L|Yii*o24G6ujm`Xu4dlooNSh@sdvFt@u+?NC!ra5?>iUoU8XLW9Vodk`wLIM z$aCak(hOMW6li-YjWh#Y#Gi7K)M*pUMQl+Q@7xb;qys1#CoP_4aTYJp8{E5toicnh zrQ>V99Z`93IksdM+UNf{^e(`Yxg^@+AfxOkvII`%QHQXPc1%;_-M;bt~au+ zleeNYj}$Ab3BLybL^F$!S>md&KaPI0wLY7rSM?_f@2VMk+fvAs>uWs#Vm;Uiq-N@% zaTzX&dhR|RMaf^u(ji&f$9PQhHN4p6{svibBf&c(8mVF>gmyED+nVJ>yi8BoH<2tI ze2!qg`RsY%(S71dgM|1Ks>?E(rbg!KEWniD6$>!D>yrR>H|QF%?_WUv8jiXV`@eDg zlOo``xoDL2iszTVK0ukU1iGEh9Dn#HPCBJ0hZ5aP85#ozpe|RK5a-Nv+h(}l31C-4)=}yh*{#43e$__a? z2k=%OZ(X&l9~DVCEMAk<$znjNW2y3|gCxKGh5lAoEO)EBK!2<2mG!rzR~Bx(Wtop{ zCp`KkeV1Q{qjop?>9ARTJy#w{zgK&c|4<@4`n=9|;1Sa=;xH%IM{oLK)=i03T*new zgVraVR?M#EgpDNCzx5Fx8jHjipWq9Wn_@(ePL5V`!)#8_eK1$E2DE2PC+~+zaL@Qt zzDYT~G2c{?icnBT8^PAp52EEm1n4?WiyX92fp6{N>|tsGYM>5w9tt=Sgh!6Yj?)wi z!g!4)yx>D1?jgL~9mQgK3**(@$j|*DerDd8^AH^B5brg+40@Ynbqbk&i+zoYmD89_ zE-_Aa3q|Oe;AbCxK(KLkfL1c8hzh&J^Z&rJ>1JQkVqUF9qMiy>LMxqug)?|>EMA~ji7Irtkg|clguRzxKZ$pE4t5q1ZbI|h*OtOkLxm~eK3NRYu)`8?c2>ld z;+VQl(1}(cG81%a)1t2Y&UPGj$q!W=JHmv6r$!EjodQ8$!7cz@!3ZUNIC@zoTKVK^ zrHCK7;nVSNiWS}*FXr-bKo6OqO^)o%7UIBg0U4nr143z;_)`xE@KHrv%@jLy3@fv- zx3?gOa45|c#Vo5V~Nvi&h~)&bcMMTB1f}h$7uj+ zcI={#H#-hsJH%<`5DxSB0{Qf4v*QE|8|eQ(wf+O$M%nh)@CPJ~VMK?a^4u?;1x~oK z;jHHqc(Y7&iM#_m9-!5-ib!{&5hb*+tVng`Xj5~nq-PT3lRB83A=bMod8+sD`t=|}i*9YwzRWygDP{o<2I7gJ0zo!p%2dQN#zK?(F+hY&K z6M*&HvX-Bt5B2-`9!~jr=v)<&Zb7)T1dl%QcLaR z1Q~s3-n#tZlx3K*AwSh6%@%Te^?m%3(Ea5fbpgQg-Bo}9BDCh!vu3Q%DBOcNu>9j? zU?|J?m_P!5S&Hfq`huuA19bxF0T56-#aGPOh_$%QZO1y$N1bBtN@`Ts|CXNjTY;B}cmkg(XQgIMol7!P7Tr{L}MqJxs&TiIx zSK6W8uWZNSEQWKyOyCB43trwpea?YD;-duw0M08XeH~ritB9`_fd#IY;1@7>djxp+ z&pEUjZRG6j=S*d8jc^brsKuxxf;czJ(G!~^|bI&rD z6<1`4j8$490%VxS#890=b)PIN;p==(6v-?^k>^UeztQ-WMelDIwv(_*S0bfTMTr3^8}+RZr>L45^WEGaLl6&_wTrGrMcOyE9A znm8N-+s7JvDPX2<4T{G-wDhKX;NIR3sy9na%5`*N)iM&OF- z5<4@2x12q+Kr!^2P!U6a4336TLw{>UN~ySIx4s!(*=;klPUFomVycj@?9LEGO)RqWs!ZN3#WHRW291z_Az_Qx&5d`N0aps6~zooRXfD4fS&B)a2Yk1 z{BXDC9GhL#+{Xv?&i@$`mtd?S7#-Q)V2#g0b6Df2{>wuZfj+k(ekfbW-fpXYlxJ}} zi9}^+Yj0%N^zocX9)wnn|FF7-oP1kg$Hp`8q9Ajkb_g%vM30O#Bp1nvFskAf9a(R( zl8yqUC8Aizji<2{!tLoIC`(%L7;-RfX00y4yimPxORxq??b+LG)tPueFUH`nZ>Jq; z4f=s08HqV?sIWlj^mdXkl1PT_i<90=i{fiX;dVuxWs1P9d?|lS+yQw-t7|4wy-c zOT;5wJV{$E7-dIC7Ca%UWVs?`hb-oZf(jb@ADxZd2T1N5D99kvJvod?-<&%esF{4z z(__>UTJ7RohOs;VKOZL^yZ9vXnIf@xZY-SaC;A=haidkewgCMenwN9sUFKUnN zdO2cPs$)Hz=_y$d-|#xjCt__iB-CdWSZ!;XR!qCRq1BGVvwtSQB!Xr8CsFn>_51mh zmFhm~uVb^ywBNhKo6gP3EIdJST{;`% zx={dBCgBOPSqge0Yo*ItNM9%^EbnL>GmQ#pks1eX(x(gY4*JLPU6S;$4?;AD<_1De zMQkZW4?uUbHia0-X*omNp|-%bWD?gx?JmXf5sHEmn49^hcy8*_xJ8CQSj$}6`Yss* zJV=_Ip~h7pNW<5t)56`27Wd@yqLaL_Ojy51H{v3z6x?L~hNhJc^imP{PmI+{LYqPU zAT*IPS78barIG?WKgW81`37+aZf|l$-3Woa zs<JeOuR;!F>18V*2vH8miF5^5;>{Y6)3M{_?-A`<(TD31V8h*RHHo_NMOq3YbC zC8<^C9$z-f_V#XdWdQe#b-hF6egCtZewCec2Yu_Cwzrce;Ji|-O;D%W z#mCF&yXSIHL^*`2AjnNUs?zZ#P5cqncptD;KSVqpXFskodXB)$b6 zL3u6-hha?P9VEU7mhi))r~(zPe@z;}tbzF1<#(>ECt?E(!B_*t@MaOyUyQaL~$0G*RUD9`$?M;I{1d3cnW&uHElF34LpG4ON(iT*Uq@^Qh96 z#q__o%I{r)%$IOuok;Jz8{xRjo~@03@2=*WbQGe=!Dm~MZO*+8cdnF(dyE(TV6G;ueCw^Hff}NNs{&Di zx9jh1)yIjwIFCXCf&Kh;nr6@*!JQpD!~66qv0{Qtyo{h7wFSeQ{h@bix24>YMSq67Si=2H54fuP1R|*2Cuvcy;+3SOj&zw&)UvTB;OlOZVYw`WW>=GXWD(9_^d~*o(xjZyajcSKR*ND zurfN834l~oCWbMj$o1!|wBTZTXu(kX4g+30;N65LV|1K3zTuF_;~RcYwp+km%5c|7xPyDZEe$yK z2B5_AJNM!+9B`kgh{Y0uG=B)b-Qv$p`WA6H5KtBaN^zNZ_at>El9H^v*)Q_+*1d_! zER=1%UUi-z+FZ{s#-po=$^?1=jtxtXJVq!f5;;##uw7d|&NF?0&p;5F{%Z0g`Q2N= zdSLir8x&<6kODMhwgyS`Yjkkb3S>jdl0pI%Y--He$Sl)?Cy+F*#^kMtDHVI$`Dk<{ z9gRvTQ2j2X+(U9S;#Pa;3@CM|=AMaIvkOZ_)A-bkLqN~abmz$4V(Ez{t=hAo(d zjY{Ygg}<`R5B6QzF5X1Uuapc%D)v;~(hno|OXQe?pi+Z29pa(dl6@SzR~rZqg<);a zq6rmak&ki39n_!Wcoh3zq zvNY1Hzf8XiSlaRoC=;(>DS$7+{B}Nh8uUY7e&4I#>S}4sXo}IM5N+z=H7J5}Rn`m~ zvqsQPi=z`Ct!{spO79Iwxcj^$b;QP-FYS zT+Hfw{ya01D-0#Q_6$5zXK0%Ut`U(boqw%uAl67-goeMbEr<0r$Zri}li%G^LSla- z;;u;VO95ui1FW#MR3yNl(MS^kb`9QJ%J*{I#Zl}+{&L=D%G<;&NUZt}a{`4S^LUT; zV5Nx_<6YwK|0kK;cJHKa+r|c{?nozh7Q#oVD=b~aj-AdqGKOME{^MLkO8xC48WLk|;a~AuyB_nyTkvUkF zV0sYpNQjBHX`>3vNI_GSQ4$DBgb-7>59u+x4u(74ZM-A;pB#xM5=NnydPk@V;RAbd zPBIS5$OlWY8>O@$Avlu32uW0n7emT|DjcUgwC}LM%EsvtA+gDX%Cy!f?;+ANT5ziX zzG0(b+0DC!b^THLpm6__dhI{&&Pe4zDFv@naxh1giTF>fx{=oeCxHZtL)e~{^_T^D zA$O^eU%g+>9VbU zSejF+oS?Q}=l2%z4&H0+V2IGV-iuxyGMUp6| z`Hy+3kWb8T1$qpVvI&(H4?#FHMzZWi3{#Rm{fzm*NsVn!*IMDd|3+2acX{xf0F#-8 zFBId0bZVurMwvn?bItkSQI9P~S;p_&^|Hr|U!1MF86GrB zKcfr}%LlSd&;G^%9t$I?7cwy7Rse#BdpINeyXJiGsK2;7H?qG!iiBsfRo_PNE;q`oqBb4pgGczK8f6*3 z5s~oF-_PJxqg-W_;raL9>(0|(qTe;)vb6Yi%d)gQh7r58Rj(n4*BYe?3B%u?4JOdZ$5NTOv7huih6U1ALQp`t+q9KCqJZ6Vj`Iy3r_M6nwRK0#2)pr>6O@z_l z9`#ezyX{cIWy$*2BRCgl-9*%!Y}DkI52J70W-IimT*p@ZJc;7wGf)8Fx2QMl2rmIrPR!|Wae4^R0Vczt9}jn zk`-)uT7{}HsIXO52(M#s;eot|4p$yFit>bbHVj+G*;aio!BmWbjQ5YCVS;Gzig|7w zkFpKhDmlbd^G_%ge`3@Y-vdTtv}Q0l;KVfNhg|7eA`@WD;Gd{8JXDxFO;`aO$g zM47BMlTx_y6f2Mq@}b?Ms~z8yc^{kp-QV|dqV2W!dPJLLzlZVg8jV<}kzZ(ypgRTj z>^#i1avZ@Z*`-EN-dX-fmWrTgDh&q`PGUsh%!(^&hAT^rI*YFd=aDXzQIw?czoyjX)=^L&2%h z?Shz`6&5g88AaDp(JOVBL_cEADDn%V2(zBftBsMzq?-GnM!jdlr3lbJv{D#4;0GR+ z3*>%_RiQj*6y&-4sw@~WdUnxY2l|3hHkE)b*MK54KUX^_k}FB|qtIvJS_oTp1Vx0*)XUZq2O)hNY8yiISDNX=|p8{q#l$}tgbvK*a8Y}F@7qJ0eoLObw{1a1ua zjd}|&8a281A6$8!-v7=h$Gv}5D<^w@;y$hSzc)&8@1NF6_2~Tuqa62st}MsV{lk@) zjF&TM{POgd2=5!N{K0scMlY|CFT;b|^_MewrjPNt<%>MigZR9GPr{dZrc!+VfX`Wc z3fgfWB0itubL)TeOi$s{g3tHP=9#Qt<(b~bXGlk$$$l=+RFBWiU*m2Pe4IE0nPOu3 zUmX6K;}a4s{rV5E4jdHzH{3@5?EG)=;2}eX4jr15lr#*_E(@O?HUBF+A0e?`kx@8K z#m%3wa2-cXKkYLV-p{$Q?PW5=A6cmLEVM<-82^Pi6y%F}P^9_2XU*Jtdj7~#rIUoW zIlMj6d3N+J+~fYB3rA0^xq$)(7Gd*F|lSOt^_jkBO-_z(fU6nWQ@>8QPHeo7%u!V_-> zR=c#_X`cu*1FL-qB-d3GIKOJi4(6u&oT0(U}ikg6n z@L&jBz3uk*ypvhK0+b!l)@GA$Ri`%}w2}7}!bnUhzsz2~ylxuX1~PCd0N~sj3C8ob z(gGA)hZ&kGWi$PbSE>o~K|ljqJdi^i+zAE2VtROv_Z>3?iMR1gbWKNh^lKb6eFKi< zNa!c#!10ijnT^P?JdwKfwpMi??yJ@H4KK@Q;;(>Hib{`hC0KY#4Qc2vtjO(x4h>my zl~PNPJO-pJ1JZrkvjY2^?D#55ZaiF>gY8DLMTM%hj^YtCG@KfI+#-PJhjWN*!RWzd z&C1s(4F@@0rAl%pDw-L#RSX7}RH!T&5kN~{()#BeMMV+pkKzZYoey|Zf|rbw#*b)G zte4ek@j4fQ=~yiKn@)=t zDW8cPR3lQyGF>7_&6peWkMw7Rb)jYXN5qYmpR2;Y0#~R)bIoojw$8;Zy@OJLy|?^h ze*HDQwmnsc|CfJcN}&oSGoI97cH`c`@Ej`@gM|WKxS$W-x1BKM zb0l^FszQZJF0iA)Ty*mkl!aqs@)0Y|@8Px$7;ug}2BR=g1Pys_H(M(=P?Wwk&)0?!OQ~MoHrD`n}OB109C`CnDK|GaO zYTq=pjg?~1)O^3S_xsKz!1=fT?|VL;XUKcm@4l?P_S$Q$y)Jf?jN7bwdx(4b&7N4x zbk4?tg_ZfyBN?+Q^VQ**eNYAoj#atLS4KX@j2F6SjJ`jv+;JAI@-KsG6RV8zs9^C; z#t`EoENHNf_)^A)=Gk(xb8t)1jl_B1MX0P;^DvN`YwY_wEkeScs<`hSvXn>-=xO`n zbMA@G`;pvXxON;$yEHMpZH&>}jMEG7rx$8>B%P^5XBnJ;S3L#sNFOnrKPu&Oa!3c- z{0$gQnVXmbER6U}tligs$`~bg%{*0VZC&Ah&TS0$kLK}>5uW1AdMP&3xWgrRQSWfa zR=JEjys=eo;|^bpK>6U$CIU2OajtLN;x{nFtM*kzd;HNCb4zrEtDh||X&zbqEsU46 zA+*w%1HUa2JHH_)ks#}Vop}f=Owu@qg67Xyr$kj_^cSRI$X8LXNuPUSl|_>5l<5)# z@Lq(ylzx(!AF>ZZM#!UC6nOq%DFb=kjLFQ@&Z~R=1$}>~+y_hHit3+#TtB*99#t*~ zJl~=3C3K2WTV413r}TZL`ebqa^NaQU^{RXz@O**3zg(4vQ^^f^M~QrOFNhS__SW^Z z|FZFhiP?)B-nFjSDf_L3Kb#5@U26NVzt=aH&u1C|5HX}|tp=N}` ztXO%GF-cW8zW|r@P{^*0Kn{Pyh(Oo&TYMkX+&tZf9UpVqgKU0ZtJ=1AX4?b_(uCla+)C2QL;wzg?@Z8FSc--@Jff?zh>&Q8>J z^1;MN+sD?nmt44~f!jRkTV6`ve*U2ixBpDmHh*kwo9x=s`&KG_bKA86w{?lynv=CT z$JRE}t}PvI3#4zdF4RbY+m(shJjvSn*s{}R;T=@$dd;T6ty=mftICGkVa!7{hV(v= zfLqtt+8(xROYhra>6@%cyKnJCZEKRXEgV~0rCnP(+&B!Y4;`~>18z4bYP&31n|o|+ z!yGsyMoO%phB;fFWO-o)yX0e8#je1%^>7wyiT+e-gnDhe&3^Kq@`SLt+ZNbQ{#BmH zS9$i6`*_0IQM3i(Fnu^dU1ZsRR?06bFwS|5R$-bC{Y_r)72+eW7pjlF?A-Fe9Q;7u z_SkO=)LUohVTXGA3*M?8KWP`3D78y(zF|K(iD@f2XOTPVLJRa~UzJLsKT`GmcDdIm z2V6q!P(&JDZCAa@F0fT9lA$lPpL|Q6sQe6p&~5s&5>@p$s#g7)XBS-~MFo=6?I)j* zCk->V2p9nVeno?Q_SWMS7SdX#kgaVxX_EG)T+BGp@ zmd)-`Kd~PkkflcgZ0^sN`@M3n-)G7F1R+BD{rgk7uaHT(KD%K~_Wz#KNq0 z#8`%@)63?{zcLNt#x-^9KDT9(T2@Boae^aYrj-q%4J-3xpVQo+UTlh%O5r$ z#!^*wxjuHekqovtOh6DG`oZ_nQN?kfYlP(pJqleEmd*U6*tRORqqUbNh@vdjQub7`ZE@+28$SLFfq5IVF zl2gX)RwL8nm7&(lpv}jzR!tr6jsqIPXA2LJ3gD04KNEmUPt%|P_`H+`lK?Ip)1W|i zBYDL7mHoF`bb!}fd6MRUbXFj=>yH(Vy6x;T9FSm>XlYOE!1Sb z*d?qAfE}*C0KdD?JPrY>~WBkd?b3zSaPT1eGQpHvN={ z?wYRrcTcf5K~BK-q30XOw$b4W*IkYEgX?S&YC4C{Di_nZH(4`uZ}4occPI|dh1+Mp ziEGAa`=(6}B4BIoD(G!!%dQJONvrkSg~d0&ji(bxfC<{pr>JZ@zkYuE_&G$8sQzWx z7g@=x%)}y9@Cr8VSgO&7y)7MmUU=_J=#w$wRD2cmc~f<2?D{;eeWjD@6C9n?PNT5E z!tgFVV>|ykUbk~j2c_FG6-EZPPg3I-=VZ0Y$AO)vUF933h+5^JyjSpRI&+_%F0PpR zRroF~Ul>(OjY+bFU@iC{beRbB;JM)Q{R;2`A@g!I8oy1UH@c0cr9zZ9okh~PpCo|G z#hKx&>A}h&nm8>z*y1`BzCsV~Qf-f=2M=SSV?Ktqw96YM%G}+okrhp)ZK)>!=wh6+N{IZgh*>5CX-&b zT}}Ed)yu@BYZ`RFml^L(&bTO>hm4b~Hu>3Se(_Idn(Sw@HM}M{73pcH zvoQRp$_pCz0YpdjPiPyS#;=%PQ6gx8F-hnWxcXb6^Fak1p-W1#zDIrS7rE2^r}1$N zQMw+Y74sd);ijEAa#xT8i`YVeK76oZDYRv9A8^Y@1X_s zH^6Ttzfbe~96yKC{+D52I5QJhSvDxtU*I7qU7Z&laFE_(AX5y&UCjdrWcK8u1Qsiy z%~tE#HkLL{Vm|I`n-i*@FD9D&Xa3Qtrx8`LtK?;p!HgEKa)nn&a^jMgBkvnkd2P7? z^WbK|Mi-{(>Dc&`{+ejHE#9!NZJw^!Ar(KYU*R$n%O(;U8M9+EW9xE_KHwmVYt%C_ zzw)tg<6hCVjB78tvFC*T2={I-V7|~tIr~ce8L1|>yq9>7I5ne{xAKL;NshKqIBT@j zn_5-?Cgp`h@Qn_sYJGDQc=3sQRC1%Z9Vmv@pGG^mcdxiXqejQF@qE!;oYlT*GD_a| zO?;BwzG;#p;+%bWF!Py=?#fAcTjWtDd_EUbLq7#ILI=x%bT$8((JYI=xK5PjN*Up( zdJ|<{6`-~1GA-RZlMBEKZfPDxpu=9b&RnFn1y_nar|3m)ak8WwAT#rnYQAfY|74T- zPhSF6InBDeor**k7>HG3+%b=HD?i`iLlT>e3SP|=vKz+(VyB)~m%x+$#4GcQEA!~S ztcTFH1q`u+|IEiS^$=_GqJ8;B?~FbbRiJmYbO8r!%(;9n{b?XXOL=~Ad7h`^C2BCr z^Mb}ud{O=kHLX)V`1ScGE*&!F2Z;TQ8Z3Y-xy!tam22Cu-!GKj;= z*?!{dneufXDpg^$8ggSz-q9+2nk=t*!qS(N=SG};Rql+$Lp4tOzj#@GaakUyS>`Y7 z0SJlvTl78f(2pYHRZj%qj4xJ~t1(&QdjjNNptmU?zuM|pZEi`8i+(FRA2lOSO1~%T z*CGyJh^(f7`j~scs%k&yHBHFhdk`lQunl!2S_oBA#mf#o^jFNk!1saKF8d&-wXf3e z*d`KEDwe4JVo$A)&GIBzIMR}*<1pnoCXEhX5*{BNzSPsHrk()cvW&@_O}Ia>Qm<(V ze0$KkF8Osh8&6I5Am^`( z6K*DF6DH%oi>ajn%QHg{qe4|xCK9<>O$I1qxQXa+ljq~`hwri*SC>mwFwr(5yowP% zsOSyUDJSITv&6pLIUjh!0{I^#q_DU~d~ar`4)@k)Q%UA}rM zkEX;cXR2cl{bUNyRN&eA{z~!e9*qSTn71Qq#46_r4kj$QHHHbi#b2b-)m9xaui2o6 z2@qzd@eSif<++Lp%G5XmWNW!pK?I4jwJ%#+-vgYRXpc}KhivR+y^H<%*VbZxUYXaQ z{TL`gH{0AXSHG+q2c0#Ka)c`QBSD2PPd&gfpSlm4^xmf4R5B8^pvfG20z#&Tb@1WmTf)4{pDW00`X!Y_(KYy`KZ z_?i)!c0jpF5TQun0HHO)8{@Upi)-^E5#*$JFjwN5O=A^^KkixljV~Kf((;kSI%=17 z6#bi;0gm)1M@l5IY2>;l^A)B`92$Oq7d;}p!IC+$FX9eWq&ydxF~mjkhw5(XSUT(6 z#)V*KmF2$+9bAsai-mbPPN>GY;>$sv(Q{){`YY8)Z2|js01KK#o_ug_w%t z?hxdL4A2>)`z4KYxLEvOCS{mAhE>?{G|&V0bbLommeu`-Nb`fb#dBXfPa%L;C7`~v3aC#S(NHI+412t9?@!FAS&&Sc>N$W1-*zws*)Uo5^{1LiYAXL}lcb1Os$MJK9@_0BYx|vSP^tsGC6*l%cz8^>sY}R(KO8-&|lNtug(*X8caHH6Rh2h}B9?P=Ur-&KSMzp2JQ1_P z-!z}eXfmtrmOeT=4u{9v&XhY_TcW#1#S3<4;v#{MIzG816}-h4H20u;F^F7r94+p} zA-p23VZAEDI;_%iD^WnNUZbiMa)cE{12de56H@2?@Oii+ArYKqw9F)OY{1M>5+~u` zMT*We^Lm;FHR_AFlvS*g7}|!DJ%J1{z}IJqpt?Yt~q2j zX*IoZ7n5vA3LS#N%4Q-mkkL3)+~guO`>>J2W;!(RggiuKY03-Ka@pyKcm)vn?t3)W2yp+mKX`Zwd3M;$0)>wO=D23s#MrRebaV%xnm8#4g5O!LEo`| z5%ZVXV7QE=!d=HL<|)(Z63Ek6G2$>k&C71kFx3@T5nhn;ECkre5o``&DzcRjfy<$- zK~eSR#cPh3`-y&}oP4DTLMhIzTP6SB$Nf&PfN91N?t;wYOaL8OX>o#Z1J0dfcsZHioCM2<2g@Dv`H)Ig}G#$(aX zyD}o*F*XiM_&*gRMJ^g#u}o3kISH52SLM%039VT;I=~6dC^kwrIl{j;g7Bb4Z1ODk z-H@93@w(jNI)B&=n+tC{F4`~dzQh+_TNh&m?P z>x?azKtn)zB3%CpWwB={@2j@Vww%yy3(ojXi1 z6r3M?&K^TqTCsgrv7R{pg179HgT#Y_KM*5WdXWzc zH@KVKCeh~=blSEuOaffN8oqpLs85jbQ3es(z<*}FZd=kxdOETCb!c!ePIUE>w60!i zcQvLGKwpTIK6ri#bXHl=c>$IF;NikOOe@{T{U5YpcjW&GO@c0JqJIC+$%#r=B)k9* zAl%{UzUT8+*zJ~`Ms|Y$e+#uJzBN*x*46b^9TxEKN)#(fD^_O}vw{B?7it$UF)BlA zhwt2NE|Ig%gM&Xt6p)$U%6>5TS`xN$Wx?0eSs=KqFm`;R!Ox~Oc;t_IY&{JKbQ%!9 zZsQ~LLBeaLhiQGrD!fOOO$D+fro_r*{Ug3tI_aklvP)kF9+SyS;;DO)#?#qsCS3+C;IN(~4bYcO7MwoE!J$5I#owuoCo?J_H3#1!TFH zr=a243dbU7x=|#jmzd7ejY4$H3Vtq7Fse`x#uXRM9MBbfv(R-q12VsROaV_r_$ ziH2T5YKZ_@@~iOmMrQHM@XUrLTs3SHV1sZo%UrQmr?K8;5Yy=*%tKMK^p!a?q;%v! z>xxu$k|l3Tz+?8oM$9KrEyY(W>CTQ|d#BS_?us+nQmNDM$1eKdkZ>Suhox#eJb%xn zyJNG6z$6&qiYCvIeWh1sSj=5pF7a7EV^4Fsf%Mnl+_VVULGa=3){z!#6NPR{D zgXRx(amuEj*>~!)g`<+IB1R#5`mRf>vV~&wOpPQ!`sGnH2G+r$+GARkZOq_L;)`<4 zooM|8vfDpoM8xJ};hV1{%iCjOJl6S_aD_~)@N@z5=Lo2r_6U0x?a3kn#+S)blp@b~#|VgaBmGVdRr!bAyu$_e6(11P{L@`WvUw zi-5Y}x^jmd4W_&DMx8S;x+zaK#y6nc*2XB5rr1<)hYgR;b#VGwnNL@Dit2>}IpU6N z>#n@X{@(B4D56TOt1W6W<`(CK{aT){8e#Lq*Ge+AiaQmtscYwmd>brcE2uf%8l#5Vq83)7 z6{9N&EUr|0i>0yXCKu|xsi7Zc*~4`%X1EJ~uZAnI;N{bamq!E^SL>I;M`I9B>id~W zZtt4wiA?K2Kha&CF?UHuL?yTH&m^x*T5|hw-NDkqtnT2=aEiE$A-b@Sic+G|C;TkR zP81H6xoD;g^zX!Qugs4TX}xwj$zKe_?3y03{>EBz38V`}ZxLN-OsawF>1uq-AaN1Z z)#k^7zOIUcT@{Cnii3rtg-GwyW5I&hrkSx#{^Hs^2KBS_K`nb%jW~XHK@%aUFt&+d zKlUkMY8!lbHRnYB88l`BK83i?)Hh35%VmVM1j|GP=ZP$W`W1T+h3=8u*0!t^y~pjL zvDXrfJthzwMB~AF6QK^}0m}0wXePj0wsR$g2>%tHi#vk3|C20EjyWV0S2%6ieoxoI zF52jd%MnEy>3>!QtbYNQ52L0hh8r=tZ%|+mri_?22oS*nf*;420+K}p-B>fmDrX|J zz{ka4e`7(vj_u}jwB%=8iCwheRpC@c*tG7Q#0yxI1eEq~{XZ;SW zfDT&BQWRUE!Pl+*ju2q@LP!dqdQ)s7wXQ-CRp^Hyy4-LrI3ggf6cCpM&G`@@A!k4N zgg}s)h|Egs(3g)Y$O@|{8=+E>$fZ)2EOe@+2y3Fxk^0Nj&e>n;rJIhi5|2C^+@{tI z{b6y*5puON*i`Hycu}cf!KDPiqLW3@P3S^qE4Q!$7@@1NhT!dZ;WV-fPYiPCDq4MZ z#aiLixXhF*x|cZPQQA2CPLRlQiMTBwqiK@B zj8^(f!8r+Fs&dloGtUu?ooK}3RrvwYfzfSxKfihSr*?(PsAhAwiO;Qw&0Ot^P?YTuHH_pxQ#t{OpO|g zuRF#k6_UkbYHaCsICJ&D?P&Wtj)pyA(owj-c@9s9D4Ssh+j8s7Xp6mU7Nsql zTYsaMO;6#T{sn*Qp%DkcJ+pwlU@M}Us2b&Rf?Q=$H9|*UsWW5XQAnh%-i%eJs}1mW z8r+IvIZ_~FoQjRHAT5=`4(y@x$H3n-mJg0^kb`wNy^ey>wgzO~WDlBzij9Wq1x5rvR~U!QXae2xmU<3wU60 z>1m;f(}_jbSq%_L9AE~_>l5YD`NBz7IW0r(Gk*ZHWV4|Reqg2Wg(4P>`-74sw_3*I zw`1KoC^>qB={&Sj5QJ`EfpC7>T>ao}Yn%gLr~9%zX2tG6yhw+=rLq~k%c?JytS?-9 zrjKH)e1lc;fxpRImh!;`X&)%^zRG8X=p9TCW$d+k2X;4sG{V(G=)77;B~ulX5Kt&( z>BhBaglg@KZ-xu^6z&&fv!dFwp*8Lv#L|5?dmGBm_Iu_z!k@z+EOHE*`(fq=XW{-q zPjO@@+!Q^TxuIU=hA^NC(gI@Ha&&4+EIUuPErJ^ZR7eR6wM^+K&XZpIV`P+a#lpYr zkzF)Q4UN0|s+<`mFKrwbTQY}KhfQ<3oA(+Yv~MbML?*Xy+y(20k(IEZmW|J*IgYN% zB2VYj%#|$Qdsz6WRwq&_M=jz(U*~>L2N5?3s<{i1_bIMOP`%-AJ&t(zZ#|Km_6>jA zC0y8F`BKxPkg#aq`)`E?ENo19;106lWq#vMC(NKW4S+2$nui1RY!}}|a~`iir%Rr^ zw|GD{2pU17d5~Od<~?HKFSM75?<)t&ld&V=_*nTvRme8yWhn{QKaP3^cCcvR#<@L# znd*Q9w-CmYJoY`f6GMf2MT5I1eg}0FU+C%h7A?uCNs$~66SnCN4zP=>@*|&>qhfu~ z1o2)WmO+ifB@1Up0!DUm?3@E80_ZnPSP);_c6_ez!s`d6yXRoEK+%W&Lx-ZGWZPP3O@t@!W|ZY;lqLAQ+ZDA~U0CXwR8i3xl`_V6`S58o{ck1N?B+h#VHcQmOf(6aXJY13GtOOt|9snyL& ziWcq{lKi5lvx|R);sko8slp!Mh84wCWa~`eabG3j=$3 zS~ag80v5J3Zl3*FF%28ITXE1tpT(b>)YQBWn8QRv)AGrA74C7DLjN+IhNAbmLJ> zasEg^r7Z#&2I%J#3tD58^nX04>V-y-UXYZ(d5~IgcuC%1SU!Ba(S}UA9`8BpGic8% z=7$7VL!;Pb)Vc*KGuTPx@o&{*HRS&RD1-M311eS)(PQu=qM}%$$$x{Bc~VN%#Ex|Y zaS2&z6v>o@fQVF^r-Y__B{WTs)fONw&9ucOy^PfQS7bAEUl|UJ++(@1o+Rq>J2r85{m#5 zUfsaqmbhn3T#>B4$-G^V22^d!>nrnRm{*)cndRVh2M5M zl&xh_98}}c*$Ws82^|PRQ*K3oE>8xMkO75P+?rEsBmSVKkCn3wq%JTJU(b{`-`B2^K|Ch=<`=e z>{t#An~V=P|GphMvw5@~Lb3Mp&F?7W`_O?X9`U0#?%cm&O7z35d)!D9aukOU!QoD| z#PEW?VN0W*jGaHD!mBX^FC}B;_FVQYLSZcJ%8jk;LI>iCEqy-M6x%+rAkGkf0B>5n z3W-neYXZH*fNYj9HE;!0{*p?+r;{)=$}9$xtAI;)SY;pHta`n6d~r45&;G`6pk=b8 z>_TbpVb?g;l$ej^H_wrfUA8r{3Ix|}J^HbfN?BD9n<*T6&c`B3tb^GiRTf0-mB@=C z_}!%J5mrbrYgsT}F>W|t956*Y8zfbY9L%P?mdfGA^5Djry|Oy7%V;2x0SAe4qEF0Y zX;E1S)wlxgyUl~Y`xrI1%8NtJ6#1J(DeyabY-LJ5(ZU`@PSHn_lbR%7UeGRrA2Z#nf(E^VCA4(1+>2odsgc4Jl7Sf7sJl@JpLFJj|*G&8EK$Y+ll3P?pww! z`t!#qu>C5=F?j9vE9KAh?bGGY#oMotKhw4s$e**f&yYXv?bpbkaoexvkDOPx70607 zy=U82i&q&nk7LJS+>%?5KOvdfn57qSF_Oawm8$f<7x)q+cjDM2wgl?o>cm5%`EfB6 z+fMzsTwv}0Luskf7qD9TkF)HSdT_=t8VLHogdjP}>hsprb}mX*S@SG1%{2nqWh#2v zrP62Yz({+IJ_}Ns=-eM@S9i{6-o{#;A``X@%Q4BN()m{)7Tx$P{8l+vY?Xe?n2d$U z5_~p*%i2COEDAD}!AA}4Yso5AKfaLc$3H#T9@n_`daTI}1{PmOwSJx&9=&5qY$ zi=^UzM!lNoX=$Qb*Qec>z`uT5v zk^qD1vq$>8QUgJ@))e5Zw1ER-2csa6o}6e%auPoa7`4Ao}jDcr)s3*xw%Cq{n6@!!*`+_mut4wq+Tmm*oaPi3O6zp8>wP5S% zctu)kk`TATvb2o@zWMvH5q)0uLV>DOE)(PJ5L!w9RBxu>k-pFTEqcyGU$#A;4ywy! z@GDiC(rN0Os=P$m`;%oAc3ml85dZ=fRG}4H)wX6h?4`0YSzZBF5d($7k@Ey}Uj=nj z5wxRI9t3?hYnXMfcHwU zNWi;9gEs^4{`}RH#oxWnhL-gIS5leZFx1c(ZeP{<=i z)orO&Uz?~}cQ$osYh(^jGqjkRTftccT7}^nv?XJ^b`=k{iP5?O?phybwj5@~Dtb7> zB5{oQr)nX@a+Yyknke}5m*u&8z#{`_^2Td)ZsAv0)Cs%@!!X!XM^V3@N?~D+#}T29 z48*F<^4ylfU#u{z5{09~Ii60*U6eu|@0*kW*-?4ZAQ7Pzs%HbRV$gqJAJ4B^T<-W4 zzXNsUjw@@*9Y5sv>DqFKb4j`5A$~Un${pwN?i)OJWK5WlIpKf!Cs91pUlY^Q7+pmD z_57CeyN%yx_~!!p~a%l^$l`d_hGBsZv#~_m_kx2zP!1ZXmH7edwCp+SQfX z-?jbgd=ZX0XT|0fzL!vCm}Ayq2Pe8SVx6k^`2_#l#rCfFUv(;adj6O8 zB;EoX29^mE_=y1Z8lkvgL*Nh^jPrtqSX=|PaMNHG37{D7I4pNj z@{Q8Zaq%)`Nothl+QITNQBJZfii}LsJ=Vc51=e%O%h*U))1RKMMjMCP`jQOMWOGVO zEI%TZosSs(kljZ$e|}g|EX3KwS3#XEOCt68}^9 z+x9zgXeCQx%@eVTt)9-S(KG{Hk%TVhQliB%ZI=l{9&3L5#&$Z$=~=mxkdQz$Ym*20 zHRe(>O~;>wQ{-4Pw+TaG4$+?+eHE@5+ICH1r=BOKu)GobUr~XJYXO^Pu2s_0@xOT3 zRtmj?T$>Kru|XOF^iGgWPwz;wC(l!_V$Ff48Z63w&%HPE0XQI4h6BX1TsIT;b=5N1 z*Q(s;k*vX+_}gn{%4MOtbjl@``#jB-%L_vP!JsrW7uN<ly5B(c@?0mtOOPQRg$x zGG+@%2nZwGigBmE_%2suvU1-ycEA4H&Re|%VEvVGJ^1lE47@aZ`Z`RgMv}r4XuKZJ zryU0&FV9xW|JQ%td6zGoQCSu}>D({?0}E7v=(-!=uG^*m_3lFpp7z6u9aVL`UOH3myOvIRVQ^aL7l~mM$S}V2bLs0gAz-HgAtJ%Hl9xPR+9`V( zJgE8X0sxO;;L7=G^vqhisZb%+Q5V|8#;u%TS3J>&TX|xr=2m;CvQ-K9o{u(W@O5K! zAXx5rkKYKtoThTe^VaYC{N2M(tsm^sP>i8iX2}|U)_N@otcqocgD0CAmn?AWj8`r2 zJ7j^MNLk=n;aZME!?(x+$Am*I@W`+%@L^Od2+#7pJ~2P-IrpGQ&CooFwZd1pbG%~Q zta8JRM!ux`cA|88CYvv*&gc8I>b+DGF>O)MHU9!V*@}+oON)N#(H#=%FOE%X!6J=s z8)Tvm?bHh!g3sAhTKLwr(^3_5EWBi_*DICwP6^5<+kud$Q^ZOoEPL+X!X>!mdGJwr z*5ETT4P^0+ZeVvE0T&|EjW<5ne{sOeSiEASh?TuxPD-b-k3dWK*I%maBP1|G=bp&R zuoavWWdO!W#do;Ei*dVQP6*ggp4a9Lm{*j_5QL3MKMwu)MH^`r`N!Ig3m=0(=W>j{ zlTgdnbz0-%o4VdTXnU3@@}>3zL6+#ITmo{Bcsd`Tw-UP6)6u~d45sX>xg<~84;JAB z#2p(HI?B=Trw}S`6ZyT`i#wC~T9yi*&dj^aN7OYI6JSAIUVWS2T;sHOB2rqS7-{l1 zM1SL{6Jya^;N(HS9w~c^@04*VL-B+n5Jj1}yI4+r`?I$~tov|2HgAx{<_=)MWFEUo zfe6smhOQ9AaJ*XK2pxH)0(Zq;3wk1_>r7-jRA~Y9%(12aC0W`puFVQXHEMD~G`QVH zS?duRU<&E|Rjk3fD=#owSaq8)o`N-0dCvlg*6teHT7I%MyKk2yO0OJS`b3Y72iPKH zU|(AoM9#TipPv|}y)uHXe0E1=iVm~lKf=KjAlS|t95p5QptPJD&P z<(jDE2~JFj9`OVWrVjAceJJ|8|V3X69ll)@OX});lXNiecKxr^8GD^VLg^C}{YeO~t z^LdFj|BV{bgoQ`#&l%`gY&71M9LbUAHDeMq|9FGYd#uWEL%zVVB0M=Aobr&v4OR|z zVDvw7tGJ3pma-W(rk5PJ5W#QEqZ@gYwt~g~2+Nm6_|kig26v20e z$j%n+$9|c3kX+haTgp`1^DXwbr^o-21kmHBnYO$giD|Rfz=ie~k=0|-;x9k7O3MK- zYrvOW1IwInY!UF4ECFRLl?d?laWwKSSLjcfm-1BJ>!$aOh##ifhsSF%cLZ zj#d&i8pDoDRCt$MxZLum#gqr#9#Rr4tCq5|;I_3FyG`&Fyl?`8qaLwDmbzSn?B1Nk z4U76>3z!sa5{AUG@5jG)TzvjmiN(sEaGSJ+->Ve@@_s=>)n6qOd<%u0^p_Y0Y!R+# zpTrG14S3J_^Xb7miroYj1DPTLt30@#&VK@tQqRiNc=DM4BeM^iqqAkoUGbXZam>IH zE}hdG#Bubv6(-%hvQY5kIE)xV;lk*8923uB%cX0R+vP|fgA;dbVbL=g+U!q!WtFW~ zAdPmI--R#N)rj2N8+k4jt!(rZd;r)6*%FPS*~IJ)*XrZ7Y60jTfu2{%!`F!Lh+GrC zO!I;Y-nh{O%xR367Eq=UR!Ias(BiPQE}m^^rPY-1R;l#oRC(>1&^AC3dXoRlOoSJi z8wo}Lnq8}3Jua_)k3Nl82y00(%|3%*JR*`su4mQ2oMmd+a2+wf!xzi>Z^>#Gs?t}j ze5UH45=kM}9BKhwQ@q|49>)qL zpQhKqcV)FWYawsXPMaNzG2AZWq%Znd6Rpx^lcN3twV71f6*6f7A;w(s#; zq=;|xx8#FJWrO+B4Gu@3EoA-+hR5^_z~(BGywxuf`?4H`>PRb&C%LxbMBHajc_^Op zmASnG<9p5VI!g?wE;$kqGfrkjt`mLCqP)5`uUVj4fmsMoYzo3Wz5vUin8!t@?9~<* zYz3~eFkJY@u4^^_Si02WA3rEg@Q+W`tbudoZdl$>zn?k{vKhB%S@K>1q3mOq3LHMgfg;pm$ohOCfjbV$w|J*6V`d;#j zH&64$y5tuL{wfReB_<^xEhE8vni?!C7fsVpLEI=KTyCU_$p%sW>~{% z@rD%5NhL>X@M#4Zq8o=LPj@OcTCU%SVQ-Z?*6K3)2Z$RxmOYzh$L}dsCRhJ1ynyD- z{+Qs+to=C+A4Fkjaby`uj_d^3(W*F(6jKX@@oIgafgkIcl|YQs@na8R?K}qGAF#hT zl^^@0UHVjhY&USFBH_JGJ9Yne_%X|$C!k`>H70po;CTjK%!04PpAvrTH|hM?S@b%| zj|r_XAA~HQ%8x~lEnv&Ur2&pi@^BoFZQP4BXl&zw*v5k;uXs8Ru}8?xIWGv~F;wzF zc!7x0JWzVNk&=Eqq@@V<1h0`bD~9vUYh;U1mq+B%**lQU9h5OvV~Uec%Pxez@v6?qRwJ@kc8`7ZLgle3Il0NF_~+tqe6Obydf+H4d1b?U z(Yy0eh~iJH5REVk`RzAudorM6L(OYs3ToJ3)yQEnOwUTDs61aR$d7X*t|{@_G*a_2 zN<%^76H*RahrNk%x2Bc*u2rtbYR`zkE{87;&5=eA%Bj|5Y4MvY>Z1Z5UNyJx{`!AX@1KLQO+ z)y!EYz-gK}ym*}99Pmeu9|*aBy&@bZBDlC^|QGm(wUyjwusRz+u_mipgNW zrR-qT#;x|Zd?lh3o}eoju3N#Ih!Uc4dsuM0culSq??6j2xw0rkr_gboptEJ2m(=f} z{0oSo%s32X(7F@f{=E^gBPl;fOJ5i+GdLZg{q#T`$Fu8_x0HD3H!XyVC z+~iR2KqkvJ`mU^5R<72Ki_tw!Vt9xlA1ul%>^ae!5ysu;Ek&PB^kxFgrJcuOjYmpP z^g8XEqujWd?*+WUxevWAN`CS_-9l!^GqX%(vIB>z-|DZ-2W$@WI@L#*$5YjI`z>!CDkN~)5tK2`7Bnx=QI(>7QO;cxG$uvETtF#chZ zq8nX~um>XG!Kg*S+dViJsH9uPpFlUQc4qOFUWoEdLS66YZ$fs)qXeE~lxeUu&w6$S z_o?;tKkMVZj{%axm(%Ox?z9_E&d0js7pK$5RVBYr{GxF)8aZ^wwmuFVy)Ie9Df&2< z{rTziaUZE@hzWgMb3Qx5KcJ8Mg3F`}=ApiY|B_Rw#V+^GkMCIEq^Qk#Wyg^I9_KR&olD$qsr*(nW^6 z^3kPRVhh*uqX6aWmd2deD zug;{;67@QGrM4r{)gBaOl=&l}{e?0&(fDK-xL+KthpAfUi`VQmhc4jLb17GIG+wbcR&#{K z++VS`n%=8D*xrD}KVoX=OJJl1n$l~%^Y03tQoE<~tAeesm~VewyNlk(Z4x5otdQdZ zkqpHv;8*5F1`_bK5Mu{+_k zDqVz>m2SQz-MofwhIY$UK36F5XTm2STjX*`p-`bm-pP(CthqFJB65_aW38JeF*T6< z3xf|?9Fdyef`%Zj=@y+!5ICV##1rl-D?)5OSTKAc) zSU2kYqWAu%3|AsfUk1&EeAYG9n_Fp^?qZ!fp{QasGLDne!7BuQgBMGX-Pg{y&;trv zVa6*CDD*fW*hP%oh?^z|(f7WbBg*j&ewPvch(f-?+g&qS-{ms*(OsHNp%RP_G0hdP z7!8DutS@)eDI|Ul>o7%7##pQA{a77lrXIhzu*B3S`|sn$uk>Ge_H-7cP3OGt%5&7W z@mg_gBQ6Kzk4eNlRV1-~5H(>e5L@r+D|I^t4BEL(meQ9~^G ztoyvV(+D1NnBXDHGv?kZ!9#j8qc3LSBzv@Q&)~T8_e2j7hHDRj1<1#gvXGPWt=9YW zfH{R0PAO#L1N+|r^JaAYDf{06@A9<$57r(jvMmGbsF&#ygn5Ba)P~2tiVJI5QHwh= zLv0bK-&lARFsELorcF>GXinfp7L;JyN0FatN;ngL&|0O>PmdMIVFf5z5U^;Emo0P-;X>8;=l-~F_~ZG_31Yl-~qe>u`-`ocOIEL>~kx7&UoKn z=95`%9tco?`=q@i;1YYs-Rj`;jP{Net)Ho^GN%O00iV4gIk#ps@0{H;<~+sD$Ge5R z8lXyHPw2J{Bw2wFchR6W&@?;99K`ZhiFZV!^O~lh`QAkUdRPn>=KvaI z$1_xTSOPQeVmQSuK2JxC3vsbudx1iCcAj(>_L|2Ox(`mm%SK$&_WckA$w7%^wLpIX zy-SZea=!k8^NmyOidtLPw>Uk5F~FEsNY%G~q7D&Xg9s1qg8~)%@vd7ND!r9m*2#b7 zUd}04ZxX*;M_+&$5%Q_MfuRGbu#-7s`~*{xoyM)sL9tPgr%(OXT)Dyeo@A)NYf1E3QiA8Fo(Fvn2H(&3smOQ+zd)^2d)J$vBQLsL=j`v*=h2S za=+3QUTIZ$vC)KkoL%F!V{5F+)ww5V~5`N5WqeGkc%7YA74!+mvyq?2{N+U z>m(jOHX^gx2t~`5W4sORl?`#N%q4wSc44U}VhZ1v!BI8^QBRqFJ0JcbC5JbPW%O)} z#9@91x*MxFDprNnK%T$~o&I|4*D0|KJ_ZL%j_j9GbYBP${Cb zg-hi_A0v?fg!tnUL#A=0ZC<@ue4Zj6)NotcUg`aYS`JqGVjt#`AfhfMTRZKrc$SqT z_5lZ!Mh-1uqo}_{Daguwpap#%eY{HSnXfQ{)6uwE!3vkH(7_5n3zvvEMxn0@9eGq4 zJ=4?(%DO>ffn)DL|Es(>h&dzfe&;iCKOoaf9APn9n`+d%0=TX+H;T-~oX?og%3*@@ zndoh~5Ap{KI-DJ0wHZFHj9hSpkAl3;*Za=+Li^<`bOr8bj4~v$@tD#UR~*^EN!XF- zCvrcg4*Hj{xjZc-qVt|{5J*cbakW5~DMzT|_-fc0DFwMi8Mt>U-L|4&ZAb(678Eav zH8}&ED-IAB7a-TXWlX6oi3|f~&;8#KNv!c$oM>1TyU=RKYj*Wl$PqG!$$O1bMZ5^U z!@YIh#VD2u9cu(|5=Lhp{n31HdJMv|lf4BAuce`s@aRA$u1eo zz@cQX`73xIA%?&M9O|r+mIzTiU#vFYL&q-4*D1z_un5>pKhPz^Z9Jm%4|YjRa+^J|}^LI^a?o9-jAT0uQmoc`I$b8;u7fm<${mCdp@!@7?a$ z{hyI3sxZlq#qld@={j>YyD1^WL9P|d`&B}0a_h~#@L~$zwD)gX%isQ*YFS9U*loFB zZGz_4?GGXg(+aQFg`vGl6vx83lwkKF%;M?8A;A26PWx1R1$Z7oTZv&QXnUFTlw&;K zzY6BQ@Ps-t`iYznZRJ|)|7`0OOWugMuyr_T4iUZ>EXJ~?qGX+uI5y1*)cKU4&fAE+ z!t7M}0zr`eVvzn6#z$heIuRNrdimJB%-YYCJ&5QSI0a!doY@qMj6m8HA0&FACi63P zN3=D$cs@y{$gQGxlk<`*Lu(Q}Qx-ZEx@WPw{n}?du@RB4D=Shgr;vCBncUs51sC%#;W?O_Tu!)Gmjeloo* zu69S36fbf|7Q)MwH25O(g9N{4NnC@oV|IALy|;XJQr1sks(p6W)VxJ zrMSr-nPi1m8fSj+%MmfUIfZ%B@&bd52mHkWALj0*xpbsN5aN0jbZ4fDn8mxuyv|={=&&uKvr7-4>E)-#Q21(3$I9>m$M^R1WyQ|ZP z;OBLHY^Rtv6JsKmO{G=z8M)e5P3MRtveYtn*D^1eB4f+^gRf&Du3snMmzpoqo2Hdu z{3+^A@$lYfBCgu`BGIIzV<6>;-c?-YOUcKl?AFC--4KflCg?)NDcW~l@qLI)P?ST- z8!6^hvYr$Yi)mw>`SEzQ<*K5(UEU|;`C;HJ^3br-wElm|L(s{o+Q}$6KNoyCZGJ8i z;SRG-@Z4wdPcl0bY-N)GGJW_~e-U9hyeAe>HiW>_`3g9eI%F%eOSOu((kA=SZq}N3 zsH1IkaB3y-5dvOO*ou?GYjN%LpSzRKWR)GE0Ct@!rsMiq4cWuu#LQ z0D*k!z41jD;$TP@8DA`Ehn{2`EgUVr8{390Tw>5ye3#dA@9pY(XmA|yI3=<*+|4S0 z7c~Dg(E?t0xdj-4|N6Rx(P(%~R4;=~oSR7Dyr9`jVM`RC0_-O-S|tVmvG>HqMU=KsjKr8G}qb@WveY|Qyo z8s_Y_3Mm1yVh9uB)5?)}rPLfNMG!10^LoDYxS&MD#KBf%YxeO);%uwp3L{&Wy9Tc$ z_KB#V&WCAZ2DZrl|1D9LtyeB@08=pG^Bl^nhtZvw``}HH!m0?nrSWU2IzM^R{4-(C zMW4DWUem*Q;*&!Vd2w!U-bGYqvkoE*mLd$GQf=%(P9X^4lktik(x&VZ@AumX(r!e0 zjGMG>wL$cuMHg(BGeanz+w+`0D6|d=t>Jx@o-RFPJh{>_r$+{WI@UdjmRkD`-}O`2>5g)ek4jAhvNxPB*86w4x5d zd;&`$Zy?q@Y(5}p&`4NrKTa)mZO(dgF_Wmyn?VULupQs$ix&BMf} zBmfdA36%kJmZ=nwXls(7O*7LL5CbO>Hs1vE;x(_D?_@HY7XS2Wys>A8Y%g`O$g5cY znGwlF*EmvdjzBJDHh6AN$bh1t1WVtlY_3xdLv4KX%8n>3qR#R#7f{bQn3CZ(p?c92pqYk$^$ zDeOK?VU#_q&r_C?R3?Rc-*HOWnWrfW$F-V_Xb@5#&<+D8*IFFHCMKW35)J zwO$o}J71FgCHOHD}Rj>UgeZR6I4$GdS z=Sc0()&7!NVrhviE@9>ia9^;4FKzXX$6HI_I(W%sOR;h2JCkE9!m3dKim^KCO%s zKXb60lQf~c>94Y`lz?r8Cx}dOrg(s>H>z{%lA$#h(=p-!>0V`5!WK$Az|;m(dS@ec za{bWXXb;JOiM2$$Ym7@C=`AyQEk0J@FYocu#2|Cj^IVV0ad9Lw`Cbt((isO(iTr{x zfM#*LHeX@~?$Eb4#)Ad*+&-mmuZdSq7Y^nzeR~m`Lp9U5?q)&*I3F!{MEhon_v&W# zI((&tAktvGmf)}2zm-sghk8x+pCm?|;Wk@F{8 zrCCz$3@=Hp1BcXhVWPI*;y|Hmn_xY|JD+YTZbfj;O^R7+`;Tbf$l&+8D~_waSW3*g=oiX4hY9)!dn`zk&ZA3!-fgN zP**cY48!L4sRsW)?4`iPpgC6<-J0Xw%_9UoQFWSA)yY9#%V|9J)Ov9TWx?S0x#2n5 z9FhejrX=B_&FjtVDYrVB;_FQgMr%XE0+HPUk!QZ7AR?iRiO_;e!8#O7-c~-!imh_@ zXUk_qN+vaWDmJVAkLrbfyGdBX^kDEVjhzTjCM9st{6<7Wx(`uGKBa#_O7xkVZ;~p< z^x|sW3v0y(&7=3o*J1^e#pe=f0);gQl}nU_NEX@gFgE9wD=cuu1ClEYazsG(>h&P% z;ahkUIRQwhL*c8N=()Q`KX{LZLmPMbLpJ?QyF9N;m}UaL-r% z;=+gq$nRnPhQYEQ$}0qeN;&f#F9E4XU*&1gEdRXpoxB)n5YzJ`3Pe<(4r@NpMva}1 zOE)XHiKrUwH#gsW8elne5jb;NzD(jyWQ#8ddb~;ur^DDDsj!|Ze;jYbD7C-RD@1}> zCZx4oNs2~_rA>BPkFD`z7Bo(%+s@6K6b6l%w@AC5Yh^8v7e^*87Je5FUqJhXRvDt%0nw7*^0~ADcOeVvp#MzzewAH%e<&Wjwe znG#C$)b^#g@gg{o0e)FSgA~o^BYN*a69*F+j7@n29&C679|8_3<(s`TUM$(UCKFMI z*d`!+T zt<~*OgTyN2Vj=_~m)WqTe&vQP$}CZfX-ICB>H=1Ek~a7}A?QRwts`ytXH{3-id`f> zd187SX1vG(4a$hzM0v0JpSpT{qwZ=>eDQ@$%2%bQoN8iF7RhN@F`Ez+%!*f4R2g?) z6s$8pdsBwiA9-6=#OA`O>WNYCLCX*@pH^pt2|{2&koN+9Ci`qP1P*#lvDcOr5dgV*fE4R=q@PrP?VHZdy zBhdY4`G4-rw55N8wOapv!V&D(nPDxmVbKxu*C{>K0NT=nl!3n%Jz6fySlu(>SE@J! z$DTsD?GRc9od`L$lsmpF<;@@9ZKX;wij>9A_iFrjmtc|S4b;_}oe#4me zvlE$opN81FEhm-=P3I#lR0HLTALv7xY#^JS+yewcIB}EM1 zkaAZUY5g~zLx}WfDweqpEpzufd~_jWat0bt6cZ`6u`23`n z$JH!{5^di4uG|cBZQ{#|h{~s05toRX20+Rv+%Uv2Se^%6%Ih}Dn)$w9OyO9?fYm|9o8ZrwZ-E=W8^K!vr~&f`j5@J`Lx>TU=_( zY+}!RNRv_FrVyUvgw-Loj!#+SvL2d(b+K}vDKUFlUV!kh`L=8`w0mXP7Yb3Q`7^b} z!B8qmp;UUo0e)(P3&tbo$?y}hO%fgae3ptV?_d+EQB$1I(Z8xwe}(y!Zws?YKFm-U z2z@(CC4G0Jiw!tAD9iu=DLe(`n+FOwaIz+id%?%($KEyLb_nwqcm7p4zkvDgpORfb zwt(sE#O#i$Mm)qiPpmx`Fj@Tb_}DGZXs;{!r;Nz^)_h3Mu>xszt;HnG9b}!%EEx`8 zrs<(dHD)=31Y%Rnd7osRG1W9xG8{Qld^4DgT&tgw zV`O{T(|-x0E&>MeHv^-u74H84ZZ-S{T%$9-@(nkZZ_^|wJ4)mw&Uy-HC{0pEyYDI* zsu0tX-KbC5vnu#|apzgPpGLmjkqcMhiv-MJ6)*3)k)IYQq9f9@09g#O~y1G z=c%EteiYa!@Vf#30H2~8F9p(ITS=K~^(z*^x7WCgr_t3tVcR&2a>zM(F49`>yW_Hk zJUe>37iP@Q>Vxw>1|lT!i~WTNkk%9Vz6KlPk{Y+?5#%cF1^Yce{*rB2G@%_*lG2*e7gl9HI7q0*99IpLt@9#vutU z^K0b*h`;rS#NDCR$bY2{QTn5BiS+a?;;)P@aR*{coaQ5~3gk3YLQqZ@Nsx-yNK5~f zXvz60TDsqA>D*wf!DZg2KQcam&3p+2RXIAE2d1-#Q{dT#&4c-u{}9wtwu)W=Fk0qD zG6f0(FJXmU#uNr0s5d8yJfRKpuq;tSzZL;Vk2{amuE$*^x8h7*~P7>v`X0i&d zbD*^a=~nOxztoMck}5ax@-Iz%xmdp3rN5-aj4BBam^vTn{kdCc>p@vmhw0B6nTl%> z_VJ4WIz@?ERe!!<^=EW6d{*%$H(P|v2>sEbnL=>J_ zyv$APN-WhPe^q?wr>I2q9GJW~4RqLzipndy1aa0BS=k%oYmUC=hf_8W!bwm{ zBbuKp=Q@MJQczZjU0WHH9cdVR2&aTgg@!`w*Sa$*TdW2a`2 zcwtv_?E_Xaqx&P5VEPrqOQzpkLj%_M(5g8i-?K+&OhB6=0fPC9m1m|dz93mVb@+RO zLP|}iG;B$V1tG_E3ml=IC(0dddFJP^36lj8%QoNsE`@3VuWytzv&vw(FD)0i4Nn!0 z$ms|Y9Bj0~oJ-5l{^;FKN8~+?khx8AJb4odlUHD4ZSLWJnKW6J@3tBf>&&&lv%&nK zex8PdN^=<*x9uCZFL4M>vgwjNs5JjssuLj|Vt*0wHbp;nt|nS&Nk-(X=%3hDozWMaJX>>&RaN16F4OZ|@r?e+tmwxXYp?e_ zH$TJk+?^Rb$Rl^<+RJ!AfjcvK;E8^mwbsXjEYEYdWX$AO#@PY?S%pVydDY zLk4{9C$ElpO2O(Ezo#G#`dwIAa>E92Mpim8k>l>{63@mcyat+<1Xo4OMKu2U9v%{#v`YdDA@2YZp%c;2sJq837Pm= z^2C8{V1Bjw0fd=`3TB{jFKuJY+==O7?L}j91EQj z?ej)^z0r?Xt^RK&fOBvrV5dTViZOB2fded<=ik4b}brAqwJ+C*1+STN+)ffJv#hkbdq)d%xSeM7}FOh1E zK2+7Vy03mlzY6{IwECL3fU?@?k5MN5J)1og^&eXV3XunOk@VCvYJ5^&>8sxhJqAh# z^r^d9^BMYJ?Yc`Fn#|vW*n(Ry1B)%?rP2ub=E_PbSM(DHDQbcH+6S zl&4zR_jM*Axjroxit(h>w@+3lvn$E_l2GvI|G>)U0PAKO1_4V&@G z(KLE2^HbyM&cM0qL>Xe@#odkGZZ`1~8>Y_P8Of>~96$HP$T*~t@TBex3PgUVnTwWq znXo)+|AoQ@jh#(UG-K4(r$$_86Nl455QsZ(K9nrgbLZo2dBS)jz8d}UG`TrB z<5#WoGrla}3H3{Hz)|=~M4t?7ZtwJaSCf{@NqRfhc$agE&`Ev6)?wYNQsXE!n8icN z1w1=Ym1VtDXXdTc-AqzfOaCOB5schA(V3USD?)NkM2DxZxnau_KMvS(1$Jm#K~k_` zyr`GdsfO6?%_lzP@aU`Z%pCW7QT{sPzURamBWr)X`MpkQ)2R*%Wx+8XWqf#=_HzI6 z_8xiHYVWVI7H0fPw^^9dW?FmR!V^LBoRqhTv1a_^ZJ(#x4w}0CUBreBu*>%Br=Ij!w?WKz~#Bh2Pk<(aUo>Lp@UDr(u^M~@*-%NE+U zGH7mqJ{iMp*9LLcGQTJ{2ixWbMb-F8MY(XPhxN#2qg& zIkU)4u+y`{>H6&GS27$KSuYh1m+V{pj!Gew3RNZpb72`or3-Gf=2fJo_U_# zYy$SJ_jloweV%9j&zW=1oH=vmOvdz@j|K)ja~a}`WLo3^CHjlQq1CQ zre%V|)@;wPnK@=8Rj_mwwwCypfZy>lPWUpOoBz&uVjNfP%x&_t zFrIALFRjFKEObVo;A1E`&=AHlH~BlaMYiVBn$lXlxvvzb9Vk&FnV2Xiw?&NlR%FSg z8Zf)r_65y$D$rMJIIy>{%cr@y)Z1Q>ce+BaxiDD^ojtqMj*qp=jRjd-pZU#ieslUC z#w+_f_rL4ezhuZ(RE@FRMo-(aw8%KF^yOAeuX;n)Ru!m^P=Tkv`_Z#+&UirOZH-Q%_=L<&Rx|uR-fTzS>XklXxA1G!mFu0OJrogJZ%&f zPlBPn2X`!p3cU4t07Uof4_xRo?&%42+C$179_x8Ic-)$n6Y$sg1(BfOvU}Cs0xs*86wcZ8`D8&VSMdnW%ofPcwnL}fI)eC}34Sn<YBY^go~ zXX3~T!IA0U#Dq9bu+-@HodBJF0e&qRZPUG6#G9?5h%-U|$^;a%O(>46pN@@#tml$p zDFuY?BO5;HoJ|qEGX#9kSLCpGk+L{MVD4Y6EEA8L%3(_ow3?|4J50rzi-;Q2t6Jk) zTT0BD6#EGcr6R>hv%cU*Yp*!r2-VXrqlb5{M#Nn!6@;hFyWne)h{`@7;UIt%RQdDSell02)YEA9$c z`s*v_g;sb4duC56R$sE3vBDd!oK;^rDYRmoMESBylq()JE?habzA{_*nnk%Mmus90 zufW%Q=7Rc4yVYjEjq4A+Uz(J<*-U*NIydRt;X{%!j^|F#^fWC?SDi;p(#3iP@w1n9 z_Y-c?Za!3{Zxr0djx7xPR;`lGEGZSE^!k4?*9r@Uye9S~F9&C)gZs}*(s1WwlGdL| zglTcU^YNp_(yW!D6UhD8oI;p?Jja8hs$yv$i&Nttq9iKi)Z}Zbnm3F4J8i;{9IEFq zxnUEUCtVunNk`?ZVUdHbRcVR%T9Jr_AANA%#%s2b%#TDD0|+9O_W0xvgvyYjnc0{P zjz28JmtaDv#)xLSrK>h*Y;ahyf$bYn#pPzuF_hd2-^T0Q$0UzhZ0RA#2N zd)`=jiG-!%Ws?Krx%==B`kK0)k+S9xIw>>O%dy;jo&#`fXO^cGj{V^wbJ)d_C~4FW z5o|)|61i?s0NTujZGdKx#d5EeXqbrEvb`yUwR!6?N)&v33li^F<7dkMOY*m59Hsa~DdZ0w8>^RKe*3pD(+GB}%A3I> z(Oc}iGj3s0agg0ZHg9YbE_Ky5$+ThVJ59wDX0f5wf_xZ^h$VSy^a@L#bXOuctst6E zDNTF@mBvn4;~h-v;zU_kKVQq;TZ~^Qyl%JQJs`TeYuShp(~(U7ELtP>Bj(q*K400^ z7pi-b4>5`{t8o*?(Q%gL;&Y}YS-*yIZ8*pC+)OsQyb^YSpjxDh=0c}<>%;$svgvMe z{2=Kd65|0W2;EnutZJNxFsCktgC^FX#G9M{d546cOXCDxnOTMqr5-13RSXG=daIsN0lN}MHgnEGYeyg6>{EVJrvnT`tx8#j${ z9w4EdW`QerDn%@LCBZ~!zn<*0A{+j?+FhXSM_ahVV4qZUF24yKD=4k{T;3u7BH)eh zLnzh6_U`%$rE;mEDpo4K6Y=WNQn*X=n8F5OGA)H2X3E3$6?@bwR4A50uR(YOq>Lu7 zA+E`5(3-pk(d0E0E6)L~c?wl`xLeG^pt`wxN|Z7o|tafd6UT&ogN$$DwN5U290 zOfy+r4U|l8j4xdRgwId8R}ORL=Uvi5wvEJR?DUg8e&|EHI~V5G3xU0*pWQKF4K)fbCX0 zF82m9b>{AD>_!-bv9OM=T>~T5Mh8tg`~{fVO-OowT{1+yhtOf2ZAN6xoWPxuq2B{K zqjA4_QKxJ3v@dbS4;2^nMAOsc?6&9SCFyd|?qztCn#cSsvKuEii^TY#xbfrEvPkBm zAS_;C)VIMCHcmvQ_Svzq1dTI9n)W#&b`NrA#2I1;#h2`B>OIDV6#^%Ta$6hEq^6w_ z^{`hBU!=hYGmAK1jM#t5&IpID+10h6H=&`ri9|6>;htMum2&6`5S`Hum;zJpck>MF5SI^F_zXg#7aVCsdgMX2Q;Tbu&E_}_@T5`q# zTjvC4H4&8ZL&q|EH}h~Mz*?*^Fb91O9xBkMVl%+;+HyO-DxBER8Rd9ya2VyhJB@OD zIJo5qE0;yw@^GAAH({!`iP2tN=&VOhwDv@$p1w*x%4dJn zp1eN_YWcigum4eDbag$TiQh&7FVaQlT^Qu)AU2-*&Zpi;M3NRq9?F(UalLfj+%G*e zu`m4k@5eHk3d)_k6T8%vBDFE=AXoL@@AsN9UaP)wz4d*^tj~m_h98StLBhxb(zM8q zN&Ir2uH^yILd!pu(M4<7N#6+=!R$Z+ZK#y zU}GUZfl?oxah9!;-BeqZ-QNHd;RX*UYUn=&f1enOcoO4{*Gt3)CQVMjn2OU%IgT$_ zHU9&#zZ{L$ccl7}fTlV}bT(MxtAg)n@+7vUFvpx&v+FC|s`WkkAR`Y*%=XFEdqUqh z8m!Rt$=QCDLdhmIzZa)w6aV0;=$*Y5UvOjlF;T$TSG)k}MZ!=o3Xl31SpPL}zV6Vn z7i4K_wnrA!cwq2+ymX9I0XdC;5c*J*)%OLIeTy{l<7MrZ(PiKM^y638R-KPujXsxO zX#^BHrYRa8^hO;Qu>Fgk2=Sf>?zcK(Q7!GsYY>VJZ?S;@;Ri(RXKMEz5j|kNRt|*W|6WD8`j9%l7g!O zn-zYKy)3drF#JXSY$;DjVl%2Gt^K11Cr6KM=^rgC zqeSj~f9xMUG!cynVREx@;}+ilw1PFEwb<~gAQQ06qO&-)X7w+gxhmJ+Dnzwc?FAna zlCL=car(nKz!0WU@iSH;0sy`swAm^LZP{;Bo8JZ3O%3~OXR*rgYeW(KWn2~RL&dJ% z7c&bafw?TGFumk{J~#5OL&6q>WxMj6{SqeMGh(hZHq0)fJzQXKnIWTLlZH$!#ox)L zv_Rd^Tm5tt{6C}`DzGX?i!M2Q%^Z1CcbQSf3C{w1a3^%xcY4tJDP$q$y?fZia-w|j ze25xir|0#+&@$1FObFkIjtb8Wo}IxD7s#wP1;2St*|0zrG8kE^Pd9*{Y^=dgV^%r`1~~S0E=%%w@kT& z!m6E-+1cmKpzRUd1-Ys%7Sp^v~cB2?n<0>?tBL2op*n8`hVcR_$HI|$F;?Nqxbnc2=I?28=H%fIhWLys2`y{&~c%r z4E42}q$oL{IdHZ8#!0tviX4-_YsgeTZM>S!_FeEQqfXk#$=zaO=B&uv+7iE$@^Js% zZBwh~=%%Edl?H^qTayy3hiT^+5uIhODlv*@MG9-ZI!j42W!jX_%wyi=gukswc+P(VX`mBQb z3)$susF5J_OPhZ_j?X3kz!I&z_-c4$tqi^ z+I|EILfhR6&_VCqosmo&J>lE5hZ}fU9hG2Q_I16>Zsb$hQ(&>!tW&sgn~CKo>O`Tdxu4gau)rER--AGjCX;#d9fLRI8MmnG4zLLti@D?6utpLB{N9kX}io zHeIB}xZNHy(j@gAX^)AkC1d;Isx@9BbeM*Fz4{KLcv@}?GIv>8v)5M=YMi95pq&27 z4|BXlaGWwt@K=~>+K0XpuVna;p7mj^Qk~#Ou{QhA=Yt$cOqLPwm8l0|$Pwoj5wGo> zb&z#O0{8!&{2R$HnVqJ^(Q6U=kNT7%_*~|H7`##&ZwDNBJZ5Y?X9DSrNq7JkQ$n!m zOn6~;WEq=WfvZdrG0c9PCGgeD*7s}b^`q2;S11ugGhpQAVS>J`wdf(ccQEyuNmes? zhcMVOg;Z{mIVuaP8NgqpKP~xooFn<(L4_ihok7%R5i4>aYp2(^!cvG`T&CVcj|5YT zdPFM7dv(5A0MkrnPa6Kh;PoN&5u^kgiy1MMCJP9$S@>vy6vAGO9Uvj(>gn4$N18Ab z(_@)59?9bf63B!pljUpDR6SY7;R5{Q>tm5MStDavJu>vcNLd??A~_=E`_}q5UjF&p zE9wPl@6DgJy$m!ZE;Jk(4Hkxns9#m0MMh7Gj1Wi-%SEGX9i)a++S6w-r-;eDk4aj* z&9Qb4b177@v%PXOkn>huz{IYWL39W&12nuunzd=>D8do_4IP`%JN}x}9}gGqqwU;! z9Zbg!SoC5}Fyyvw{no;T3r}}8eq=XxHmXr+JBdO%5QaG(lQFGvdL?(Z{hV~qlP@E; z)w6d=mbwdlh$usZ;?*5v^ymY7`~|1Ah#pT*=KJ@*`=ZYChN+C&BO^@`lu<9^_gOY8 zrS4WyM*ZNgz!@efOxCRVU1{MPaNEY{sI)hXx%*1+ZWgisBI0c1%EZ^y#j;^g)Y@FQ z55~C9DBLG(!ApOAvibBPt1KN=w2xR2rL`pOEynwnm&UF@W=VgLP}ZZGvZNZX7(h z6%MnOXfO2HL;DUDaOKlM<@+C+!?Zrz5gGYX+9CNL$xMS|(OoVymWd=X_h1P#*IcV0 z4J30IbGtQIQqc~ia8k)qh8--Wr~We4FIHcFy=CO`M7jGhXQv^3oROP_7g5hi{9H0P^7Io+AIzZXZsg>4pv z-rk2o&rSLKSAUXofkmUO?osHmXh6nk#}lW6vEoMzXs3e;%w!*Yve+ak_C zNgH#K=MF|P>m$xj^yglae(U?v@BLqlgHGr-x!)$?LBWf0cMk=3sK8s)Wl^wM=39NJ z_@qh2x#FL(qr@z%&rs)bLy|))w(o=6ClPXoNytwj0tg}FJ?t>3-Jw#YMkK$HiR!#Y zciJIuu9(b(3lD35RpO1G>C#khcQ6=iu4-a#X295;h_F?o3C>-jS}%GFUQSDFTY%YsN-+O z6VA>oIj1$%tnJ zADf3|>Pc3!Fc;Loa#NZq0CQU@o(#&wZ5piM1K3X@BEheaANul#bFocxh>J9bNRI5! zBVv@Vd4wq}{sm64rXQ!E|ErE|011;>gwqmX@bi&Blp`k_SKK9ccNFasf3CX>Tk>{q zlDbp2d#?%=?y^ty3|;;ge;2Zanp~hoHghXkPud%E^yoH4ZcgzGsvgQ!AjX_E_L_-T zhv#l$L-=)$is+na=j2>$<*c=ky@{)*bTn~gb}za#$rnEAcO`WCmNVKZo3BIr@I z)C}5?2->E;VFo>%2zpp~&7kFppawOWAdYPmHk^KIL~PYNHdJHc|LsaqpbsK^oB0KU zldp$O-*DOT{-_xP8_j!tPbH?jj5%z@PrN$tXUxO)m#CYN84wh4Kese}YZ`blXi}Z~$6i}> zD;aTiBsV?G-OAsyaMDd>C4RZvtBU`uFLz`!vY21H9{dyCtf}5(!|_@5R-3DCGv9(a zFrRvsg;Tg)Le}=xU-J6D2>{eACJAj3vgs>QJtu(0@<5|Y_2nkITmPNMDV_6SRo0`QYv$3~W4bj6V{fi9@ zEHlCRW+p=whYn~I^Zc<|uXok1<3;>m zubv^s6eaHZ!hQ9Hd&KBr4?>*WYM3cDe*>@+X>n~qu9QR~-^E^cZNcVBJ_k0DOS0^X zhmVYxl@$8ij7xPWq($2bTg|l3&B#7C6xJ7+(c>vx@2V468HLYcAXV&^n@^-Z*K^&j z=UV!dV_ZrI6NFCa^oE+;;!-`Wj}?csP9$ux;&>Kil0yo0NTG#W`+n}~^BG)+l8mi~ zR%7mZX0XTL)9P_V6`y*iSO$jE;9>}(v2H-NiFHQdMr}^6jc3Lll0Iye>O@~mjovc9 zSMc}2D=9!Mnz{R^Bv#u;nI&0rsphu<_`|>Ax9cr_yGi)%rvE>FyD6F9 zzRKnpZA&7cNmc{S!*3r<=C?mRCugdaGnwB`+SQlejxoP``Rz7!u^H6MZ);VC8Pv;f zpH(NCbV0rRwqA9ZLB0HTqk5Gf;kO$iO?eSnw4_(Z*2Wvkb}p zWK;v+74EwZ?z@j~@dLR5!rBD))I{i4-$VTyu6Q_H@o2c>F(EThO;B6#T6KRO#?n-M zz1M&5w?Xh{;KCZgT{lV#ospt7Y6@%EBs@FFu7;>$j6y1itbGuDny`9qf-}pRDdl`4 zUQWy8L^)?R8YKUCvDa;S=^^c1$^`)0v{tC?2 zCkkgiA*-ZVeAI|M%9Hh%o`g24jz$siINj=c;OkJdg&!Nh030<5cZDSZiAB=TaN#zu zkrLbIdQL0p!$s@K_TV70g|^Fdg00lEuyC8}fz$j7W)wXurPy^T-MCSiX)lZI=Ps{- zMq8wA8dG6_8j92xe#@^hbhd+H{-4>p^ zEk3cjo-15$O<~()Vq?6(52NtGe$#D!^~0{(UjZ7U`eA0=-U(MYh|H5)b;f=ZZi6oR zJQHq%WN9!b(JeFL6K-;7?}VGwE?4h_n-m(Ka376NxSFDqCfqjHb4{RPQvYrwq?hzV zEpFii1Nuz3(z@ot20h_!=rg4jZtDBFuFq%1!zi)7!YFv&3gktWWXb+m=tjMBbIhw2 z->lJ~B|~G|^d60E(~sfpcywg8^6U*BELF43G)WWl-B|!$xXj%3q3?5=MNiEC0XiCm z>-tX2nZj>QTtX!>F_-0&ug}DsW0ho0%)Rq-DR%2$vEwLMwslTLas4mK%k!+Wa0RqC z_iOe(QP!HUdCB#74#p9+Lo6wZTV`l0kCqvk(o18noYqtKyb5x+j12!k7KgIc#456c zTa3{qzM@W|Dz<|AG*Ihva61-XB4(GWr~jml>u2;at}nxezALREt-%Pm@n&=~ZKq-L zba9OiSA=l1l#7}QyY>AXXvmjx)Fj(&RE}iV(iL*v~ev)9{QN7~DVuS%q_c(NpFyZ{hM3<7`=TrBu)Epxg7I ztM*3#!_(!e{UJ}*5Gmf0V(!mnuZ*nGpeX*S9n1CJ2C%c4=`E?^`siKSAm47>5Pg`X zy=R6aFxV@Gb5yDR`j+4WTlixuabj=N`)=rnefCmBzBf=HKy&!~XjAY1SvH)xLc<=; zB09`I7jE4-i7*ZiBpiYj{~Hn%&SZVx1#-KMvdozlWIf~DfewkE;cTBV+E|uzXa>%G zsx#WsyVJ!c2=jzPg}4KbhrD^Fy~5dE=zO#Nt&UT>rUdWe+(>K{oGLbIiK8Hm6Ypuu zyYRBZ`G?3YZfmpu4UkAS`-jE(og<7lXj#R{e!rwEkMHbdmBuG+PmFS!jo?gAN?@cn)WAJt+%Jrd!Z0`ZthnIOxFWNc zUbfEp8gkT6*(mOnX)Oe08|d}$_J=nE<;Nf8w=TA#z_9-`u0L3KuDSStso07ij(*;> z6(4HM`KeY7tlda%Ev=65Hz2sE&m*5`!d@|6*odPu=X0{MUXxV%_s%WdsY~}iN(s?z zA`tII0THiaeY}bRW`bWN?C~QJ>4GYFo_^HbCH>$EaQ|{j>0H9_k!}(17@(QyvPfri zhqo`1lrd7ylaya2WlP;-gvorH_qru-^g`o2#`BJ;p1F?YhoVdMg56Plx7FCdovhaH zs7k|wgMSW%`_#{`6)=b!K&M%WtlgtGR;Bs9I{y3pf+#1Ay{rxTCh zKaJRU$6D&v(R#vh5W7`?fT^&gO6ikIT})h9C#5xujflXtSPj)vxgGz=-h>I>&T!o( zA`8@(Z*$6glyNe=S!&>R@KLTE2TEqB$Ao=rpMduIOQUJc84FgAnvTDUw+&ss5s~bM z2DI4YnYGgDNlC3%;pg;9V=Q5H4e`FX*4F)oyy`9@4UJuO4JDCC17SoxBT*N!*7uJj zml>>n4`unCz28sDclX_i_#eyn(cbS>@_n%P`yTmj=>5J!zBl%M7t8mW-tQ^$9q9eO zPQK^$eqScv1-;)F%J&4m%bM$6q60WlXWvf?sKEjLY$Bpx_m7l#_4A|%heUkUZ_^R0 z`bUiQcYjxM_>&@z5)!@0-=QOJNkokC?;*qj*3s=WW>fF?LB7pqrF5?h6yS z^ZjdjQ~xKa4NWUv{~{gS1E2KE)hxwo+EnS4JF-^7N}{=18Ca&8E3D4C>P}(M=AYMF zT$waxQt$T+`OfV9{<2iJSqNMF$TZhIr=hobp+-Iq-vllXbuSGJ^7(D#>3l*;KYCZ9 zt7o>wVt}KyH{=~c%u-T}h;T0L+oxD9lLfU1;Ni!&63XfJ+B^!2L?-a18rg*NZ`GxI zQ@-C8)Z8qub*EgluhDnrqnaCSuG*cv`_z8u%;>7}_|yz37jHp&FZFR9nF$Z#d_GCM z%ySv~Yn^^v5TPrj)2k{%Lc2zX>x7+oPP;;RRN#5b70Tsl zXm;pnafL47t7gJPS6wDA`P-#PS4g~pMk13KCv}3whfh`O!tA+NT|^@DBs|(IuF&qZ z!kfIMR{8^k8=IvV`j?z*jpW))Z2op><&rNLYvoxpadL2kVK%a5$%RN}n9oNd0ZIKs zQiqN$ima8E7#t$GVUGlijMSL{UNxQ+k%+9+id8wgO{;bZXCwc{XC?nWvaKzk7S>V{ zLd1i76tAVKxNeR7YB;&-IOS|JPEYr#d0VKqtyI}~R;Byr{H@UDGdZy;y-IK%%QRPAD*y;J zr*mJLBnP|f9Hb0|Da8LQNLr>Ezd?DXQ$1I09jQGhaFKSxXy)uuStPQRF1FO|bF{C_;=n&6lV_wo7ie(aq_6oyn^v->7NwUzCeC zme5hE5h#~3o}GW?qbkGynDkOD5k<31ldig#2oE)9_*9tM68(FcP^*7$fBpRZGmjBQ zI%r!LZ+v9)kX3CNp7=$5y@1nDkfX~ z`_yvrK7*?yS6vx>Gd63?zcI&EdnMUxwrjTUs=ZD|T4RRM=Fzxe-kb>kD2=QY)_uEDo)hB&TgxjAk9MVsurif0G{UiR?w1^2M0Yig|7>$XYtB%;$eh z*j1g(n%?NOWufM2eS=2ov>d0MCdX+d!-JZ?NrqyzZ?6oq8zUpnLc!6%F zZh%+KwW`*KTb}BiPYve8o%^sH*C!A7C#4MQbnxhWK}p(W^ezAudQx%KZlRf0Q#R@ZFTW;qAQ15{*L6Qn zfHis=EL3ZBVF-D*KBC$W5DyAxNe0A}{H?;e=(%?}VDK)_zc(2s_a?yv`wpume%+D+ zDu(#Q@ajbHKm2Y2&4v|sjzMOPtksR&R3-4p)QyypqW^+rGF+x!q%@-21CP`w_AXko zz9_a;57h%!Gkwxb-*S*GfBGc0C|qn&?9HDp?VQfoMW#=acA5ZMN8QEhQ5Md|(n-=( z9Nk!(8uFTI+yv(_n^~)y`CVCKTPUVms8P)7wP^r*GfAxCWk8Bmz66+s1au*zr9Mqg zZ0G(l#psUHl&o9J`u4U5F}KfnlP*)F0sBF%HcvNp?70SB6q$U)ed>Uf!^Z|~yOZPXp+u_Pm+pO#On(ZelVlWwuaWPilqW9NvXBk%R3Rp)tDan_nP(_GUIHm0$rwGKaDuMa(24P5hE zcz_&xw!UlRTMj;3-;4N;4g-t=9ew(_SoLg_;dL4s2BGa^cL=Z|BY6NU{e(GdRP>8{1_Z0VGvli=|Vm+9K?1cVJ!iqKTL^+9 z%ghlSGte5*HF|@@**T7St?AB(Ze(p1-9t8$Wx7{w0HdSVg|^FDJ8kK(NJL_bBWoqL zM1B7#u|p$u5(q3Muvq=`O{yQhx{Wi)0!{PKcq&fVd8*l_OdJ zP-#ayk7Y8~-tF@@%S0}CD?zyXLQLdErPE#O_2xh5`v=M>QAe$Qh7!kc ziG%h1eZGylR+cFFn-B9Vg~?aEs9Pod?XM=%-^{m_^`+k=UULxQtS06oz;>PxdmwYB z)vMnU^+_pWrHmTd+8mRG8Eb`mP*JS_siaixK-E~PwvH2Y$uu_KOE9O*5~+n9ky_|V zHdoh>+NV}qsZESgk5G+KH;W`vl{T{T>lBdPBtpa6B`&<(tAFS4tLlZFMP!;UR+G%M z{stlRVS=}!-M#M$X^|s(QJH^(MDz@>B5v0aPK%8Hny<>eJkRhj;R zo4GnBgeqfe(XBSy!hBRH1-9UXCnxb(wN*a6g*IF8i_gop&%*rrEQ!82v^BtU$Wk|c za_beZ99{_*9gW&UcOFHzqEaZZ9PZ|*8maDv)0eBSe+%(e0!;sSznd~ zeg|-rUS6Nl`SHfaD;}}&N2RQusOCT6!j4e&QCkqNt#dB}D$DtaUL)5vb3JXi z=rAU)*8`LC@+RX>g#}qsdXJ=^&ku*jAq^C_9V+Cv*_zatDx0lyJz?e`9LwgwO@4(l zc!_%Fa#l<7uf@h3fGYhy8UIY2P>G?bI0-rIW9Nxlt5}8eR7epxXMZs7_a^W>Rx`xtu=Q-Q*cOjvd%w>WQY#u~bv#^xrPy{0jzw zg9Wg?U}*9|+?1vTzfxsaKl%YVWh{K^Ie85i9tDaQ;FqIKKFh66DyAr#hS--ur|3X( z{^0w>H~Ff7>}|gXzQaZ`bPV%wbq3%VU9n+V1bEfce1$X0)dCvOw8xm0IZ~cQbL_6fn0XGuQgK!|Ho)2 zUGNTW#|;eaO-70@hoULL_l#*d?)jAqnohS!!GYoNLR__v@@<9&-!%&fn2}^VHNTRK zjs;El!Edokoxgk`cJ}NFBO`5Js4JF-j}GitO^|FikLCArvjIr-U)@-0#12C zYP-T0MYC4@4ZdsRZ3u4!^M(r&T`CJ<%9T6U>6g^O#d?2FbJZ;qOtM@ok#_wXtmR%0qk1(j#h#g&Jj#zw@TfXT#wL=s-77<+u~80{gwA%je)uG5 zIN>@uo52Z9mXWgsvy`(8Ou1Cu%9$~fOh|&|LE#Ph`$E)$&Ge~HLL^iFO<0S~Nt5;EdAcWZV#9&KbLbU#d2pmMNK+>NEZQ2j zRMXa=rs&jD)19Hfm%(fb5U1wf0k3>Y+}(QB?X&}Gf{mn8QuIQ60KnY`detk;H0791 zhgUd_CfU+zVm#K#c+C4IS&EJ#SCqdl=A#W#bCPQiBCg zi>@k=FGjG&jk(xStQb>V8DEIBTXPwp7;7xPLAm$_}e#TI!`r*0@voxbp$WuoQbrIn+pS%#tM%{FV3%a z1T#-HrUqPIb*&W@OuGQqUEQOYcWu+7wRv3U-l2<&joai?PF+b;9QJI;z~US!3{)Tu zp09rUbs?h^^<##!T(Ce%&q@fz>3q;3a2hN%MZYMBjdK9H80?Yv-!Ta!4{Mw-=Szu_ zV6G&VvPH{O-n6v^#G&!DT%4#G=)pxUH+5+jYOAL z*?nOROm&I@?~O>W`ux1gro7jmmvW=&y31i_YN#=r3lmnIY51wvw*1|yvz4UqlA??Q zF5T&dy{-dtH$DozGpg~O48uM^pzFZP8G>;zHGCb}r>;7)i44nM6OXt}%0u^SCOdu$ z6G7Ohq;awF(l+(L8R=F6sdWE5U5hVYb#@(fFZ;aln)p9S$FF{|asu8}vz@jYdJr8L zYR>k>hULJWz$RS)6J)46vwAol_;L9a5EkcLHPcKl<~z<%L$=q<(wjr~+|#&t)MQ;@ z)~ef`v6bS?mX7Lzwk@H$iY7DfXsV0n#XZd#_EeqKL#;fzk&$zg>m5a7PL7i~4Ljh# zxAPiSGkxH|YPfYP`;gG&tw0pmbWQ*^;%@gN`{L_Pw{y#Gz?r*0J}m`L8Lf>S4t&h< zaPxSXYuB0J0vRWsq2PgLx_6l?%=w95yLIjwX-}VCYrsq0hrbIorcn3?DR|lVgs+yA z2?GM$rX@y{Jqvc5;H(o`@gC^eWFnz<;IN>Xs>Je$4Vb#qD9dnBuRMe#wO3MnnLR&XNp(!hdM+&>V z{xm2^x-p(=;dIf@88xj$W5M8h&OY->iPkrnbE{r==#E97SiKKTc5aa=j}fMIS@eSB zQ*?5emo9My)ro}MuN9&hO=`tZX+>3vG~o|x%_g|}G$GWH@~;~3xjqdbalHDv^H+bz z`Kq@|^?9FCz5TOP&s|Dp??0vbzp;iqr}qx2{@I7m-+RYrsh(>>|7G>x=v%#s0s|}* zxZY|(KNOJYf7OP5C?Lt>t@soaI3kPC{)kv+wPNE>&x?o>{TW&z$v>qPnJgzn_Q9P{ zxZ)%(=Fxgysvbn_s2X0WR~JZ87kyV+frI!?5A#P^RgM zlrP-1tyWYFZHR?8cy5Kv(?^C19;sRgf3QpRQ*7!3{ zxN{!VVPyQw=*~R@*D>B0(QXwLb?IO^;Qj_p9`OdYLX)@@<@U>kLn3iv5i=>&vMZbs zI)IKv$31)*?c_)kCpmvsWlQU>nl$tcvRo}$RW|&H`Tqq z@}J8|wB!R4MW&?;_*vBeGZ{i9DeD?mzP_sQyD4zx*&{;@qhhl&kuka4b`YS8zMvVX zPhIsG6>?L3U?}W@E9@X;v2`v#y|4TV_`S(zi;D$~V#CHT6LYd3Jx7%--B#21C4bE$ zkJ?u4zijr`&vInr63PmFG+_CVl>;VgoD{j#*a!T%WGg+K!g=7`BB?pPh7hu09+KLj za0M54qWIKqRk;^-q$(dOs|rxrT$8K6qp^Tym?!TO(Vi<2MX+xQ{3Wje=a~BS6?O0l zfGSJ%;9!-d3&@gAz6>2s7!}M`_C%poXY~Xnt8mr+ODWnJeaagPa$~gm(=X&3j~xk# zKQ0;;&{!=RPCT6uovI3$0fooPGJ#@nP!yROo8M&FR*8M0DRYz>ZO9MEB97BL(`Z&; z*y@3yohcJv3GC$#!eTQp7#-ABW;8Ya-R&FHW(<5uFKru*(|NC?b)}sN9goQxcW+*^ zh=^~?A~!hlO1;)SAdi%wW7R(>x+b^_S4VjbO~%xoiA{kUSaW|c@$Z2z)*cPK)2Q48 z4I}6v*c@vO#Q@s^vI(s%RgF1>a0(wlnVtqfQ+293Fe?U35-&| zyRh$2O+eA2hpMxiws0G4h12!8jMblIfV0>P6kQVVZo)WY-A-O zg6)V<_gRD#T@Mwx^*z+C1K;ito{#Im%j^J3)G8dYakg zY8I8&QME1`ic?<7W1z{slsEQ<@~e*qXR?&f$U8MX9OU{hQ6uo;D~oHEL{|Y~P-b@j zGG|Gdv0#U~N*9(HhZLIzEap0F!RwNA6H+MNk>kaV6<*VgQ zuinOt=L?;i(Gq=KGvP>KrdQ-Ek*I~AY-J!pO^f%gIyNsO*%%T^EXBZLBWpOO;l&!i z&!s0M-%6`Fbug@efu@;X^7q^$rAV+JUoD~q>R-}-nMbgJCOsyK^LgZGxSromBee$pG)1EOJ2Erc6u zC5eHt{j^)pmbcVx;)`C`7KXZS3tZ)Tt~EmV!qAy(10(Yvm&hfVF`a1UOxJT9i+g!t z=%d@XIkqWRhlcAmkS5f9#nO92+a>vhOYW+=Zk`$GH5-tC!2`dNR*Ip51%s=tW@~sR zl1=Yv}YF@H<|8J${Pp#I~zuGOgo6zc8ZPQZ{npEwN z%w)M53})pK`@GI)fmT&^zpg#=WWTPJoVShz{p-jzlbM||>!=z)=dgaT#=5wF$=wUi z*ZTDSCGR(rS?!)S@5A0A+ciLvdiv{lk$rIS5B-y^Fq8QYC*$IS{Zq{|Q<)v8Ld)tU zMY(8!ip?+_dr3&7wotk#(vm7z*AIL{<1OmLGP3*Eb&TyIn47;LxkVpoh$VHe*-RDN zENo6S5-sPHbmi)gd_`*0HZiE>p5}5hcgPl}|Lqh_;AT!U4i>lLm%7$o1ijO$ zAPJ$O8D=JuS5ZRiX7Bz|~F|5Tk7x-tEj>nRP;BpB>8llgB? zE^J@_RF7GyKF2!A?5^KU2Cpg*VSE>t?WF}>Rm0UPStKzld_IHVZhJ6ePiF@Z40We7 zYx2@5KUF7V!zRhR+m;vGA$mx;eECkcaPMHq&C*ROvLNM`d4vme7$ii6x`yTXrLkcX zC?M3G8oU}~79o5Ki}97jAe6_yNH|V2epHh`$c5EC@-8cnf>}<+FF35M%3h{w3DFy} zcRngzVS04;sa<^|o?z2|P{7>yS68QQj>@4}mMU^~cD@R+Tc;Nvei6lTXNi2O6~(fI zXl9$>Z2)7gJACp_ea8f>Xx0~~GZa~sJwL4prINC|M zGx*C^_&k(Zh(_uK^SewPB_WWC%Rv_abCDR|{+h@P50gqXo>bw|RW#`%5L|uBW^VdH zHc0W?Z!}s06!1i!r6dzSYvOe{Vdylk~M#=CoBaV$6}RM=zBukKmAGkTM2OF@iV zcw^D&yq)FkY;+QDpYZlc^m^WUcg6XNz`f$*$}rmBz5dhRp=kL5$e2X}qjzkmZ3ce zyeZzC#WX-&?lJYI-=ih5@nexQ)YUXmtBK@}N*0+qp}z)+%Pfuj!~Bc*WPLu%qA00q zpOsYb5&Mu>xvt+!iak{*X2EV&CJt4C0y(i4&=nnIpaKa14)FmRbS&`*j-U;$!hNp~>H*9k#&5etD`&U@cmwfx2c1DpwzFpf~F=i}2U;qn?z8 ziI6(gZ~x9T>>U97RxdFv_MBQt@C_1#CU>!GVJi=e@XL$Ju*!9!o#7VS*f0srYd|rV z<*yg&E}F?WI#jWAO~@qg&{y&=akCHNs{IpW628RAJ6DbVO7=!V)lQqM?s38~MUdjR zO(h#AZmRLV7`PY91PS~v9mv9m9jl}4l5xQ`@1E0(%T$P{{EWbReB2znK~?j~oz36n z5zdJH)hhH`I@BucRz4U@Sz4v%7j^`O=$*JW)?J3wU{tq7f9Zdg?r+^7Fj&B%rrf_x zzPHNvE%F^_A){z`sG2LyM~8J6>G#T8>3|G-56T?+F3|x85ep@vNiCTn>r=ru04Qjw znkcasxd_#o^WVlpg(jei$IWjx#x#*UWPKW#<*b}Sr%~Sh`A*UAH9sxCCs+pi)U&KY zeCpRaXo(_j*KT^~~6%NmvCY#Py z6PX{9+4Qb5$t}hjov#84lnz0sP8&EFu5gs9;r|1$;MJ$Tf`(yPsXDMwkmCPd!!S~< zqx$5QeaUJWd(!#Aqrodm)y*(znI+sZOR(I}zgbTYsQva3gAIOsP~-E$?m|XN4-m7L zMWrzHyxkuAs}lfMVCa<4nX4BckIZ~8bmqckL#hVPgX-y22lllV#1-WHxUALA!O~RVgFXKV$%^;_V8$N}dL=4?saoC~m7dkb%)Ha@+gM`!^ z{#F^LzrmdtA&%yq@|-otXoTjxRl^sACzvzoWgr4W#CrG6GWEdU&G86*%el8q6@o8% zG_EOA`R4oCz~yLGd1o&$GEQ%LmZ?i5uG~`ZWJJ@oX2-Q-roHCvPq+my4!1!X1JqAw z6p8{znKGm{vp*G`Go?S;0_&KYewn8V(XHSCwW24#+8wwozdAE8lEcEI)B%vY*KDCo zRiL|}50>iH2xeiaHW;MKd;N6KonM%_^fD2Z29=f-s~=J)#6*JUlM*c3hyzF0e^+O+ zOD{4GUR{j0@HR4C?x2kh;1(f0b71xSE}gIv1*V~MhJ#LaJvg2`#>bvE6gJ(S>K@k* zUm;mp?1q@^X?Lq@zG$;uwZfiqV@h>*?pp{;S5@~I)m@!yN#&_Hx!517K4}Y#dL9t0 z%zNF_zVrg4@pSN{(HI?IG|3CMb3_MmGA6c?3q`pd*2BFlKZIVHR)XC=_1HHU05rTC z1q=wOrs+9!+-ta% zbQDR=WO)r-N#ON%7D{4FDvXv~_S+e$&dFwoJ9-R8qXdJqVaA%#FXsm{1J~yV zvx4LMHs=p-o6UKVO{QcbFD$k2LR~^R&}x=i-(g}n@3CNJuUcmn%>#v!w9D!A2=Onf zvvo)|6IB!0s$xR?C4h;H)_e~AbH^?s>qvDCjnO1#wn%L)u^JQ2FtF9=$QD9H-9C$M z=0oLLk0`2GN8CClTfGZ6HnW?WpMY70@Kaef!_wc9?o^v9+GXs|++mUI|FMd8q*~Cg zDV@c-J7Ux$Q{~0y=w|N<)08B5#uczXDG>UX?F>U2Zvxf4NDikD_>RpHY9D0;Gf`}g zQty0Z(t6xR=^nG*IIVMI$lkyk7AZUP3*F0JWv>oWcE?E>gswiBpyqC&=I%H(za(Qk z+qvp(Z4q>>NzbEQ5B|4=Tl8EeM0|s~6!xWQ7`)GYE2X+8dW)x`d+{v@TbOgLIYd`r z-PN3ACuiUS48@_`ZZ41^yH9;hP#7H?OLGa)|8^2+;&gPVy{tsGI|v| zU)%=9Dt8ko0aGRARfy_BnjGV2*GQTVw~_mD>!xTDb$1@`M@i1kx8fnNuP9hHTCnWE zjY3RJ!GWuUoN{D3&WumpD_IOC)6NA5b(*KDx5)+(WGep=K{jD&Nrab@^_7b5=GPMaN24UkWWmR-}ZUhZSP)aFJ|Wy0$PO;#oY%m=+yl z_@Zv($F0N@fd#|VP=}oANnbr`Mzp2odX!`?)DUAF1eUSJMs&A7Jo5_$6qGAqAaeILh`)AD9pNLgCm%&1o9c6`)M7(sg48wXfV@502Q75}X|BNDW-DirIl(t7R9^%iR26&(bfba(38G z6=tQFoIC)idSX!*A&C0(K&7;1?x|y7WtkG5AmM?u(-l2^1`rg-(}tC1Y@evS1|0rc z<|a%N3HF?yE~Y0OZ63?wGs>~LXH0f2*N!Cqv4>~Jp2*tA3r;dpC#D3i8Q8!Y`i_*~ zl>?6kE|FcfDXGDW3A}LP9ce+g+`YQfKJaJ|Wj`BpYeqEe?+7)dG@X`nx3)mm>Qvba zObNb&c@UWnpWc}&;p-O~L`eCs5!x)}|B3RqhZ<9(^_CPfq0~h7R`oW_L6BWvjnX85 z!I0o;ePM&%^0y|4|3K{lvQMZuD7e1Q#Pz(_J8z=O{E9fXw`y$P$%+qGfn8WLtR65U zv_qqNePN6{Uvbms+EN%3l%KO0ln=HF%3mm9#zPwIvDyLW*(uyrQysfHT-|MN`jLxeEhi>etEbkGruS^_<2bg%uFEnz!{W9K@%J5am}kXw*L*dVg#*>uHVo#j6{~+%XBf zZv^jEc4X0RPcUz^i}ROBKy2xC zY7nPjlc;H6sHiIzDmod94%d`(LFmpdfP?@l5n<#&ZqX7}g}@ee=p;kwFc3K17TRw+ z-7ak_I$2YFP;*O-K@varq^Ni_TK-F-`buA-5`#JD$vvo5EYE`%i0Rzvw|Ba2rKjKK zCP-pWe={dD&3t=1?ZAAZ62!<$nXeS9(P=rEgBq$cXF#3q(`~2U2({V5goXJeZe%~6XCHWB!kLwEEJP$;t@GdcPax#f^?~m?p-~aCZwn2x2CyDQ(Q6n)i znU<4v`X6cg7Z34}Zkc2801s)Grp#tyZoVZr;Pe~7>zcryueZ5J?4>#j~yYIk9O<1meG)fY5H}PWZ1Vel{_}Iikll#H8JjsGN<1zF? zSQa+5q{v(6h+n}_WRZrIqZz3j1nKKE*p6Qf0mxAb?cqo#W4fm-v7Aqom54;XQKj2*^$XFhi3-sFZ|TZf#Ce(x1(%1ei1o+k)o3- zB4N{zaU;(OZx%J4=ZhnUX#iGdh4<@PV(T=DN{D=@vkpuQ1s!Ga8RL=QtzTPWaY>D@I>JA z97O4N45jhQBJSzi0(M)ITHFHmYT(U9B%!0-M@Hs+=o(|s+1(V6yD)Uj-aaX3-ojAF zO12zV1`g=N*`cFd?G5c<&Rd)edFw7{jdwwAAUo;J&brs{yR>~|j^WH%bzGR%Dh}?( zR)+9$4>E^dw?)TTv1WLi8UBWiD_I5kcS`Eu*7n2%c@aq6*nRJ`rO%Y31CFj#PTFmDMuDi>6Ao&Zs-BPPQz;>DCVbjGpx zODBFE%UOGJ@-*8TqvZv(v$jyDeKAX@w6xY(PMw2@SWd)#Bk?@zC0!Oj)A;lAcg6nI z8TA8JPfw|zk+OPvD&^MCNDVcog<5p!dlIE{WKMwB|+_}j-{D}N3AZRKwhe;fESrag2tJnctEc`BZY=P{ngcy{sZ;(3zi zNuJ$2yLtBT?1|VTblrx9fZN3ocMJQ^{%;zT4JZ$fph_{locP7Gv=7&%9uP%TSy^^*R1Eg zmA@|jR!>j6Vt@UNw9xw+dLL-${UNDnX`7X%cdXt|4Sk?Tp*|_)nxu5}fF4?7_I_IE z0~uM@{XXzCDF=xcT=0;Cr-P@Rr@imkm@ryLc^mlK%HJL-J3cnk(||zISm@PIDf$I%@Lg2`SdSswl!A% z!1bRcZ+hok^1`~0Wag-^qdr!HrS@IUrU>G<8cayZFQ_!|-G!?r<*by0l)L|v*4S)a zH!ZokU9~mx_qR89w|~^WyZuCHavM88X!x%o-wRSwWN;VrPiHRQ%O=nn4(?njZZ`%Y zZUn!GaUI<1NL#?(9*yp7e?PiI-B0P!5l>5+;D@2*Tv-x~9%(ytb-|Nf+gA7u##&Y# zFOxE<4t3zyHruU93yA**c-}{I|F`hGlDrl?KSvAu!gD)q><`cT2s7cC+XtS#(Ci?^ z3)nFMP1_?t^9bL|CiaKsRdHw@y832-6=-Phh;CEYllI?(=lA>8qC$xD|3~nA`kDVd zJm-?vg6B?J)EA!LCB%g14HkZ8v|nBS@GZ7>m4uD!NTn}&j0|=Q{2rHbF6Jltg>w;2 zV8?cettRji0DQ48&iVS5q{Lt)4x<+qk+ZY$chsfdCh?X;-g^@GSo%ll(Z5aKuDZ*~ z5Vf6ft$-OUbd4U?fb7Pzl|QbRU$Sr9Lf49hg|0d29XjHpeG6R&UVd6GnGDRD97EBy zyn3PQ#LJVfM`yQk&_dT=*jPOx2WJ+#u8I91=Y?a;!J%WOP<$}7Q-pa3fA%mu;S{f0aOA$pPm1m`NRJnzkW^LIR8V;?2BK62{G}@+Yi5Dzj&+TiSJ*M;6{^3 z`NHQkjb;mu<@0^$>eYgZyW9V%6L%kJZ;wS^Rlh_k`u9lk9a1J0s=C(oqT8Mq-Vl6y z=eH#Jh_~p;7e4hKa*+Vy!_*Su$x|HH2&z9#UeK2kvRay5^-<7D(FGwBXVb2Iq1HC12~ zmlW2KGN~^0GzJK_vgWentsj0yc;4E1^Yj0Ec>YskduID?R)0rev;sE^sF@;kIn|>y z&uI0E*p(2v<`5?Hd)G>ma0*G@OrN~!+eEo)AEFZ);I7(Jysn;=2 z3#1ou!yUo2Dbc() z8}$?!{S!e$9KkNW2T)pcv)sp%w>vKFxr1ir7s;$8mwgOt*GlmZ;L_sH%3#JIN)K+W z+Z}u{bSz-(DP~R*Al;VZ_{EWX@Z8Zv`*yj@kKExnk`me#kd4tlQJk*7b1I7iDL7uC z!&P^hU6Uhi1ZEN#TRDjJa$vGrDB!s($JOxOfYZ}*E~?=(FdP9Bw5feH0Dv^|bbd(Y z_V;UFb=BTM9qk>RxAHjB)~-5><-1W`O2+n%+TE_Y$8*_>HsSuk ziw+Mi0Mut2CG^d99hQ2wvFS)#LO<}omj8DHng1<)2L-B@{Lk)kU-}+Q$oc2Lv;F5k zQobM{i46AY`H%1O%ztNP{=@zvPPqSC#D9mBNrkGepC!$IR-=DQn!b&mM~H5;phKWI zK|^lBO%^k%{i6h;hop{l-SFF`;WcKeu9d+tCL6laWk!=bZR#`n ziNe3ow{UfBQU?iG|A%wMRHTJCs?X#I8=39Ef~XtEd^ zrm%v?nQNRDZSLv; zXn-c}3|z#Kt-;!l3LgVG!G5B0J}3N}%%J9AXJkce^&P1k=o&3SsS|evcdVY0My{;Y z3u9~;P23fDEBXvR0p>4Qy|eSXyD`R}5#yuDXwko-x?FW^bXxK;lT+#Y=v#^p!?A&? zgU!Wqb=}>v8%e-$mB(wjnIzR!`!Wy@*L9%V4@VBm@7gx`ef*&OZr&%q+vV!sg%7Un z){lr>^t1_EFvR1 zB?gpp_`pc|pKY<2soX_V`=kH@Z~9lvb)MdTMeCrK!-FNnGRG*^?s+0yeQurJS+bAW zq>Jh~P?W`XX<(>&0N>95ZlJ2>1&d^Emv4^mL57ZHW6r^jIcnfaqLb}8)L5Bav?C&% zSY)E{Mel3*9ilc%`|CB;zp=SE8*|5tjT^`K9}Hq*_Y*owWW32-IBl6F?z>pb9>u~@ z3?6$_1K&m$hjvf9?hi4l#+$isMY!gx+rD^Nnc5;<>*l-M)4gQoR$0yQg8Kq)Vr*IL z0s=j%?5m<>W+Q5NWQLp20v$TV3JqM>_;IQ?GVW1zD2sGYiNU3)K7yf$hrib8gQpqW#L#O^aU)^v?1Z6Vv;Ep>?xwPdT23#6YIVc$l=Ce?W`7Be@pBrPuM^l@06sLW(17&`G;wndm1 zaqqF{5>wfqy?{Mj*E9B<=yBBgIC~(R?cCKFI;uIv^^`ql$@@lQXje7^)GI;%zm&H) zQJ%H+FcyP0hnPROx#!(Dp96c=bto0RNSQlh^N@_&5-@xZ_d$RkGfr3hL{c&#G!*}-;g#vx?7Tpv8YdV>}4Fe zL}4G6CON!g_RhiP81+oCvxh&xNO`&dkvK58{rw{qc*qG%4UdZ6xM5YmRdeIjN78NU z*^#*jb;nR#I+5(s_V*7LyXCHfY2SB~L0zXib2&|oI*zm*nIeHTV&oR@$dSTs3v&Ro zSc>Vxb$c0o@WvtqHWT#qtf#r0qak{yxTzVT{`wdA#qi4TSkofv>sMF^!M^-?nZdyth!Y{Z^7807A1Z9l z4d7;k)8&=0n;3`syIflam?5(WfvwG8zst^bB(LXo!B@=|nQlcAo6^E!$7=(RvEmzO zlsW;KC$rk>Tn%g8h3E(|U^-k`(fJ3EMND;NV70x|E@vD}vVX@p`wbz^Lj5O&nHCmU ziABE^>i7Ulm=q4%2Z#975#W)68=O1c>?5j|H$#-uo#i-va)dg1#Oc%U4Jm=oZEysJ zJZ)nXg9EtAT+aUKk#+jicd(^uDp~W6VYb zCL!w8`!-Y4e0bwW#-9#HC$Lve-u(+)Xv@N6vguV0?-4QTak}?O`CK8jWp~*3bev0| zs?emzMblhNP1senv#9odrIf%{_|7XC z%L0St3w}bwe8~8Pl?n3@%Ba`%%FSW1z62w-Hg+$kq7Uyq>q;{crDYbDID5{p~Zi|Bd_Gy|<~m!j~kTJHt|W z9wp4d%MAWwcd~!){#Ht7Uyr4Y+y#E-{#Lc&Z{FWV%J?NkJ<9(h{I~Mo$p1$E*YaP> zKX-m7xbyp8-rq`Px+$H0mH(sspOld39pV3H_qVjg;-63K#$B{7>S48vj@EKb!vr{4+QI z7w&JRGTmIwZ!P~D`F~hKqI2`VxxZyo7?dTyU_47cqCvxU9MR6mG6w(q{B{4}wCK9; z1^+pd~5Mg>xxgi ziifesmtkaM&A8jf?h0|xx?-rS_)}W}C8EH!)`8EhI{Pj7PaG<*G}o#I8{vI2PSb=> z`3>3Nu@~`d@t{8$FTQ6mQj^*dX<}KQhFLc2;05^{HO%IrS&)-LO^$_{gaT1VD$ySk zqip}!c}6$Y!3bL-*1_mwJd9Z@_bw)`z|fdr#voxr$=h}Ay4 z8Wf}$0AevmxFF@_)*&jVUvwpgypuld;i&IVMqG7BGcQ>8AwOMvp{xoYFe&u2X^vX!a z?gG+av$ZRs_%}XC!i?4MC#c}E+T)Z{dk!+O(zrfWf;)Pw`<7KkrE&Wn_#G_PdF$s^ z8cX=lKJ?nV>g> zR{)ll!Q6`#fJW!I()eYH;1ThJRKg7DmCLt2@nf;HiBQ@8irifP82#wo$6Q*6%lgP|=em`bPU7 zX^{8GrvDK#)TVDzEo{6YuiAf&Al|K{CT$Wku|&)rT?_67s`!kp zgN8{8_ORt_KZUQWz;mW*kv-Kbeg}D|R}9<2lnb-f&64BO>2J|85ZH zm*q!mBsuUel;r5T(Nu=ol^3sGn$eaxFU#+kmmEke37=XLeosXlBtkUcX&|OrrGXwZ z4y|DB!s1H`8gE$cKO?QZtiL0U1w=J|7jA_b=UxJ&_l46qG#sNFbb>w{>O~i6+(K1( z{PG*=(7wRO(ii5?zf`r+NfQ>$OZG3oTWg+sce{_omm1})cvCa#A#XeaQeVdyZuyg$7Kq&~Qq9Rm( z+DHLy2y^2lS01&_zwahd1vq2gccVVo@qT>B;pPnYWuI{viU_VLY=|o&+3mwsl~TYy zSj<)drQ5{9eNb7uht*^UqDHt=TT5vemq(bAp5v!=RXN8{TIvj3ZN7mt?>WD#J3&$i zsD&@JOt));8v`kI@yoVJ1V)5a3GC)AO(fzB?zXZj+Yn%PNbs86i~VEr^J{W5181zq zC;FVV)COB8ySw7hV7{-aq5{=S^9|15jLMgA+hs6!Ca3OEND_fVYP8D5V44_Gptfd|cuS_$gI_FMBh#>we@Z?>eNKM*v%B(r z)Mb2^YFPL*8|BZ8HRR|mCb4LqRvAffGMIr#L_~hM?$+AOGS=ukTYk$MLXWe15xFz?5!n^+Ml_(K`n9ljN!Yi#=D!@<85Y% zld21~;uF{k>Dl!CoMZYacp&yUGE{n^91v2)GGAij5=UcrT~~>tiJdZ`u74Reg*!{d z$fVZ(SLRF^oEg+`7gh+$pAQs?1sU2lJ9vX4fyJ1Nl#(A#7Hc*RUY#SYs*SYDe;q9f zr%1Z)MAofYsGYOBAHGxINKLqzv5|6Fdt=$1#dAaiP*{n^>O{^7TrupNjS=zP@>9ja z>$=aa%l0DXFuEPy;dLLgIY_E`l1hI5PAZ{=%{eE3%wWuEreaw#{;69H0%UA1!1IMf zns1l~iE!$TgTP7n^4*W#j|bMMX%DgE|DSMS1!OR8LDYzq53%oS9uyW3*ia~O<6Cq! za>)6ASM|`}sQS8C)zAFBs?Cg6ItWG0*hG4TnMqmpZ2S|=IX+O7afdXHo118Yha~}e zAF&acz=$l9lwL{6kf+I5nOkL)WW>hM^+(90rKxf2Er9pLS$D3Wf!iHm`SV8(Ws!}~ zQxMA$R&965at~d|F&6|k3!OX78ccn%m`pK`1Rs*oua#b63sJshNP?T!c0I)QY%A<~ zNR%@RyGv@bwqWZ$&G;*oE88OG`dTyN2NV*uLBOU%vy9gz0eA@;eZi7@z?ROfVwIbB zbNxL=0qoD12@mchZN@vC2|8&WZKe1ZCJ+yM*Z42>!nm?5GNq|=WKgg#@?8P(gKC7A z)Cy|DYS4GMsgT<{thrv#IIH2CbE^!gT$nPX0!4B+^Rgm`&5XxnIF~p~EF)qr{~JFc zQBFTKJxcg0nH(xM8mLIsBQ9c=VnIOkZ^Qt^Y8m-=shTzmDLqI(^b*dN;^*ZODNHZ9 z%KA#TzGhoriPqOV>ud0zRmyzp>jUen$oe{NeU(~Y2duBi6@ zo+RXMP0N!+HsvE=+E!VU+azYItfTG($#}s%MNlP@O69ed^0vsDb2kh7!dk#SL16CY z-w|LWKTr4PNOoiVIeC>rRZ9)K`c~yhpmFM~#7ncbNuco_-`v@#%8VRXR7~w1wW(j{ zByJU$M*)E9wkV=3jY9WtucVh2bk9B?x>Kwylr&MG`+fPuThRz~gYd&i#`g%98#3z{ zDAc*L4wG8#wKk8KxyX1zhDUs^05|a~P-)BGCLUI}_pM!hFNz%I9QrPjVxA!CP9grY zd$>whM!K#k9?E&y7reuOX5l;>0W)YDtPQW(Ci&1F?^_d0lh^81kbby`Dj#(fteE8L zgdq$l{J>S}_c?Rsh@IjpJ+Z6U1i_pZFbzH6k!>|iU*fR8mgAah{Nl%~&m}HQ_gmjv zV-stMN{6I2sUTfM}E z$7$(xcpo<)O}UC!bA^_dwLkzft5%*y&T2WRIha8=k`{QDGczPy!`ok(%c!6+;L+S= zF8{b%YebIV<*m{R7FE?!*Jqpb{U2GQ5^a(u-}JH6N$+|~kl2wWoLk{?H{Zfbq}W%C zI125ZL`Y;VJeCc%I|kKJtD@?~C4bKU9g6_NU)}z+mQH{2z`<>EnWgaR%27tL14B97 z=VUwsNagfdpeWC$)i*E!xc!QE?rL(1`*Qj)O^~$vW=amHwwwy!Qv^>FseM5;{R3|V z=ST(WKF2zPiVhs6iQ%jSvBu7I;!_U>E-)_UI)*aW{X9FntMkk;B0;+(uHETwm^u=baP~_Pk-8uoeiJpt~LtOGH?5YOcB+ z`HcPooB}0k_j6{RW-fGWOx4G>#+xuo+rutSwD8N;tNoLD@L`kKX(n12g^S7XcorLM zT5L%hT%VcR4JIXVtZ#TfdT}glbk2Ew`dggp8_*@Xipt{>!`W?i6GQc{8TI5VBx7K_ zQO2#BHup;01ikk3d}ECi$VtB8_u}_RK|<5XjqE!LL~~wd5G}+ZmfGNDi3yER=n1y| z;Pz+acb5{*YS}68O1>)CB4Sy=79kIUElNOK;ruGzo=i(ef)^L<)fM?A@EfC90V8<^cB9i9p2jPeq8h$en?h^w#@2h7*)s z@9lDAzzxcNWz_q-GJh8eg2AY_n0z{8&AVmPJ6_+@pFa&LVj=7?g!PuYc?EB6dyji}qrtAK z^|*8T@dwtQ)9&8g+~NG@&9=IvjzKP}TYf+`Z-@I^zh;G@f9Pl`vS}e1IfnNU9>MKu z=(ejNwWQv*_o;9h%-;26qaN%E_;1n-yZ_6Y;q*^0E%j&cg$HJ$wUDHD_AZLOJ9_8G z-s5_6cyCf^WL@=6i$%rvX7b*6_R7Fj98|1%)*FVr!;X+8{94bM7Y%-Ir#S8D#^U}1SS+l0@;?W+3JNA8fm|$cV_H8 zt9L5zZT5Lz4oq%*AZ~Wxg2HH41}KtsI0>F(j!JN?O7Nr%vf03dDM;x3gCtnvZvMSI z?{YW)w>-ar9Jf3JIEwS{X0fiuDF~07WM+qD?PeDFMq5~--QMy_WVD3PIvNQ(N zSP4Cp69dcOE~(qy{96uf-r+#%) z&iqNAe=3omufjjey<@?UuU4dJLP~ZNqqBk*e8!{Cl0(_EzPMXqI;kW)zHPx!YedLY z(n+9|(P~xi94gYqC7{&@oNjr=2g(8eY^!?$zU~)o!H{&!pS~q~&!NFlo#^9iX8}m> zpLpGRI@VvG@!V5DOz#1LwZXOS@0_D{i{Q5jOuHSw3V1;ns08^gcagvW_vdZraOah2UCGtq34Y5StnSrs9IiZuR zeu0sSUON+Nbw#Ev7}`l_c$#M1hh;s`0^r>olsT8Z;aM_vt8M#o(w;Zxphza+E>gCs z1dj5qme(n2R%^@ed338y9aw;&N*X4O4DOaiQgXMWzaz_^X^l*O2PBXC#RWrQhb*2g z5HbsfB+$Nv+pfbSi6(mAXt-dL1K!wJ%$ppx4ZJ=>I&Gm+~VW5QC|*#cFfYw ztl1RfChlrT^cC}Ey0(>Ru2O4u{`72Gec6IgJ z6*ntCe8a*T!V~lJy$1rPvlU)CG#H+t5Z1^7wh&f0X<_4B%nM7}zglUninLwr%mO36 zoGH}RVuc>R))Hw=wx()kI1_q2@{t`*eJb8R){4oprjM*PUG3W0j|+Ore*7T678tk! z7hn^cPo&=Yt$@e8_OAlPE>n>p`mT{kTz!+oSWmo_*@;PA>&+1uS5;9r%PPdU+A2ZY zC3_mpmP-9KE$y4Xs;hyEY#Tcg&5#VbuP#wcqJ&x=<)efvt!sbFtO%A3%*a)NevI!+ zq*cBcQ~CHbjoc-7r|Chw-^`n zyou_9?>lOI_!_OZAZH_`sPO-denqh(ROT3^S)mqOFmzf*XW@{wpIM3%7dUL~-Kwzy zjv!?kYG%B^8McmV*)LF|VD?=w{E=8O=KlwKT&#`V3-I&0Iu!t5ctO|o0UxRFDTjOMnr{|VKQc8~mK)XMMVHS#-WwfyES=eOqJ zj8^qX+oT?om#Ig>t?Dt|ryesG^LXq#35`5-7(jmYbZpzmlVjtyX8CUEp}XA)?X*rb zP_|0sHa}n83AOwt%itv3qhcfT98~HiTjk&$RKsQs*0!A_f>nFfZ|D=kGfMiTb`8f2 zOZf!LH6%dfl{8LCQ!8bkH*885qAI8V#YdijLo)BLjz?)!U`ojGR~v7^x$0`foTYVV z8jC4PT{pQ(wBc!+4#U!d{iRJ)Ddj5UW8JLKCpR(~mAfT3-fH22j@Pgxiz^TFNR@G0 z3k&HoxT{^xreR^FZaS_~u2P1=lO<)q?lX^!#Q%Ba?bd9v2#^brV$BT8hbQd%R$&_d z>Lh13Sn>6^lggbeEH~_?UiJjG-j|Lb@K_jK**+J}NZFIuC2Q^JTqcLbjJX1GP1z{c3p~Q> zsnUnD??+y0sN*A80e9_l2xa?lToFqVM|=91g~2j5Yc79}5K$4Dbd5e%I&1{YS!~#qo}TBU6{} zEE-P6u49>V>V@G+p__VQF^}zhi3~(?kMEpX?SN6KS2*?C9V}*h+3DbI4v|^l_ZDZc z!b!7)Z!@aa6@%J)afnm9TfRd%*)U6240fDz)Xm5H)1sB$ch<-2@7NKPQMt(OeS?rU zyl>-w7!L#YI=uHf1K!=L&F8Z2yFh>C$cF=OO!d>=#db$vsx<1F@I|3TJu3VetF;oP z+Iug}q!g#V&>@~uRf+mSXK;y=K@QtRf&&RX40F95VO^E=g%OP z`+4cukq<)6s@=&RILX1pV9_jYk@`%hyX6$|TYI((huYnIln*`aAONM$c?w9YwdG?p z8_~H^*YAWjuP8?ZK*g&pk+PG0PW7qhd#p(9iB_3Xt6V~dOAD<8rJlz73vGd9ZM9=q zg=ibOa=b%abggxnZ>S)1t;kZ2axotPb7>=Bu4f3mXYUOy9(%GpRGJR!>yP)F( zx4!=~811xv^AKL<7J5GxLt*;G!7>l%-2H9w%iZ4znk(kT{uVMN-|_MW>ghP+00$0g zXXdX@teamgqIRns-c`;(p@rWtS$L7G#=+3yIECOI5d?RcpoPID_|dDdEXJfK_FYcyfPRX@+pqTjuI89XE#-UxTQqLb9v$6{ka! z&IMO^K#-Dug(q0;3@&mAMp@+K*IVrjRJAQm0*j0nERy8V%&hw+HP(+8Eb`hY{BU8Y z=#e7*wQ!b-^Mr2x4Dx7JjV3s{&OJ(aY$#N8E&8Ux#c@O6Hxw32;(|901&gj7?48HZ zVd;1-4|hmz3c%%8z%gDD7hE(HTAqWdi>G7Qv4q`&0Bu-xX=Oi`rS2Ahk*m%jiH=4v zINqCM8_KY3C01>7D0706>%>Q;6TAP0 z_h_I&pDYFcjWlnO=B>c(VV4HObyUtia$Xb3nS5T{TkHDBkzxD{o{)Z&dLpu{$wEdL z*Taph))#q#aeARgn``?26r8LYS?JL{pd9Tiye|D=1$g?VM~W^jlQzGGS5CQ!x8Sj~ zNY9P-WsF!E|86sbk4@z8`+{vgzw#G9Qj}v}dLS?^QZR+qWvv2l?px5Z54?$s-&@Z( z^ptGqo{uB&$8z5cO|ufMEf!4)SjUEW$0 zJ+ppC<#UBqHh5MUDuefED(eoccE%!TTLl zsDD!sgS$B-DkgRKh zu4P%D*2jeIj|<*_^yWq0$+FKf+|XKzSO_F((;XD7*3rq9P*C%VhP0HA~Ze+DU~%_X|V{h=?>*H z#FA&L?m{_EB#F^ux$GyjlYLX9w?$1Bx2#XeVdP@bR)ZqpdV8Yrq1@RDiy|URVYlIn6)heRK6@(p%^x|HNDehDu>+Uo z8e+0Bp3F*+KVtd&aV*TzF6q7k*QHyto|uzpk8FIcN%wXFwLeK*8qzjacIcT z5+^>cqZxLdxCr@=(?2lH5pD)o^Hdvbnf)h*Wcyt8JBwfRh?MwgFP94VtGL|w?iLcv zGB)rS-L|+`+j@7CROylG-6QT_xY~dJ;*R$d?cHt5ro|sScrLho2F15NemTF5=P&@- zcrGq5i%ogpkVr9KX3U@lS~SaWeWt1(K>;xgy@k|+fJBymtSD<*N-Qt`v*KFGm~MTH zsSz6c@pzyLba|RH)zCe9YbKBgD+uOT7NL8ZA{oPJ6Ir9yu`(?tbV-?s0-GMSQlkNdLGeYPl1f z)|RTPUgxwoo=FjD>=vm^XHc|_upTqoe6w4Zo^CDstB8o!#S23&ya-F?J|plW)fxZw zdPwTbe#KsfXnMYPulu1VDVVe^`Gg}ue;ZtN;iZXJ7rC4%G*v^w6A`z!65;D_RGJWJ zYHZ#^rf0eSuax$Rcp?d2>T;jA(Z;`3gZ495K;31=a z1<7<(wH^{cvUlWemjMd42ynR{&LCdfCH=Q?UB}vtl}Q^$71~vNI_T^GM20mQx<;3e_ z+QwV0Y`xVzTOSiFa?kA@LqyI#0Rcc6_(qiV0Dh*M+b?Q}nUy$X}6vsF*LtceE~Q+96_ zG1kIh$-7$)(Xm|VQW@bRU6OWaPfGsJb*V)Ep^CNU(!FC`K>?m|Qvwq-)vfrtwA*Wf znfdve>T`VLQ4{p!=Qk;s8J7NS|Hu3HRaTd-Mqs3Wx2Z5`$Eg0zm;U7wqdK%nl7v3j z5m~3DXH0XYOwT;4FLWYqyQH)qP+h?RnDoKk6{psV^-B-zT~-gC0`0APF{i(>vUX`2 zhrCc9ekRL9At^VzLtR_?^bTKTZSSXosMNweitn}NA2Zsq>BLu5moL;jM>2oW0`|M? z+htb0?=-v;c3IoB1^I+5w-&b5duu_fIZj~=!t<#kBw6u_;4!xgx-w@)0mh$U4W{;_ zEFxe*mdyF(Yr7=O7Pv>-rPBCk)+MaWRVx%nG3NK8d%BVIec6e^^CPP_mCx$%HIa3p z@O?g#XbJ)w=U$|E3Db-hRen^8@XO4rmZj8!T)JvVwgRG6w?j4M{P#*DeXVjg>Z#o; zB*qJGjv_I1E3dIO)|}{J{xc-TS4jYgQ5s8Ukr;;!wTJy9B*x+`=aU!{WLPcp4p$FK zDF|Mj2v0En^xfFV{Ds%x+%KXy=Ftg7ar{V174pfDzV*Bj>)Uwau~-s67P3_KTuQlmMm>p)r(Qjf#g@-l9_U zkC%m=uJg)@l=MV{YLhhTDs02}|G}1Ze6F-8O!$8?(lko+{G%oAvPuLZoJ)X+1Fu7U z9b@>p!}xFJS0=5_zA9MX}Sg_yGwjotT;Nsq~SMPu=8{F&+ zZgzFN>q+ehZT9@~m%n^Y?yy*WB+fqYqGW7KkAsl8IWQ1IWw^r5u4eUOldkR#S6ZXk-Ex9* z{)HCj?7Kp}>pzr`Q1ckcWj`3YElWFh;RaXZ;xW{62+_5$TRVH<2C5xH9fuk}$ZGY3 z?Oirof%i42O8j`sW$_EO5jWnY0_1BBLQOBjYJ@(xwFothmIZ75leLC>Y}o$UP>blQ z6M2ZAbH9wrim{2rohXZ3e?m}j&Vlg}Q$$$ajoHhF=)(c03Sw45rd}sgY`~iS;pv{#tvo^M)2b_M)}*#-RYyV?&j}Gp!H(*LVvBK583-A=~CXe7K)2VX^G%{a4;c6*Glm z*w-oM?tQaxfD`)dYMG?KiSU&;v|ydha6fy4NNqD@J#CGPiF6iuCsSJ70`K7Z57-Av zN<=OE5c7sEBUjj3eGh(}Pps?JyJ=c?p@^~Dj630l)FlQBU7Vc?8j=rG2S zgCe;lg;YV+!$MgWrg}gyRrsmgIRYc@mSvPHghkYs{f;}-B1o^Tl|`@$_}9vMOylPL zvJisx#|@Dw(O1>N+%W>IUUUS#g${Rfl}v-2ql~NpSrbR`@Td$RJl9IwSPuHRQ%`D_ z+EDa$8av5|dVO&Z6WAiyTMryJMcFN~LdNPPwRx6qmCu+>i>iYwYb*3TSrz7+{UvKT zq+!_3V4_3$TV7FPzuh6m0_AGa1h0bjb^>l4>@`N1%&g`S$A ztN1j-kRLWwOrGHE`n0yinUh*u^M4`{y;g**rg|_|reK)X*3!o$?$4%Lv9V^4S1UQz z@COj8uMSR@)m>q}86_YXB3pPCjh+2RqC3OWg`&%9I%jpa!YGzp#(#iVEcRO1q21BL zrDczC!K)yds2PNDb)OoQ%w2VNf~cg^D%s-H^}gJLIrWELkf38#s8@d@uLp~V{#yN^ zrwJoqC3@Po=@0F+zAoSkF@snC31E6wav7Pz)~VJX5;J8ak0kizNP_?Tp(HS$mGX@5 zkA%1KDjD0Yj75~3uRrt>Uo!s@bFGcEPcjM+y1sx;Q z?S7pvJt;3sI&nenqtdDX^xUK02Zvl|q?4?=IEDvki+xC&Vjt}zAE8yTW<6jvD_OTk5^4`%5Fv&28vX86?VxDsaDo&`MI+6TW{5hU zMuap?7R&!{%|gknd)10g*x%RD{G3W17pVRjRh%h11S;9_CRQ57KomkO)w1O&RY$hG zYFYaj2Zk^d8-uNaW(N1N*PeVC(CD-F+LE=G6c1~*2I zV)jRug#+AOecp0XVUw%?x*oNhG}yZ0Ojq$)EGMOixun6a;xjRGN$FxS2{XRs%KnU) zPy%`%5$Y)mdcZTcc*I01k_GAR9mPYJ7Q46(7e~B(h7RqBcgOj&kd8e$)yp%2@V2DfrdkBA+h%2SHw&V!tTeV0S)Gp@hlCq-56Yms;0883h_`yTowKKPyW(IV zg?Qc8x@wCbwcQ(psB8wY^le>SfMiTFI*x5xf zzIdF_}urE~&Ha9qooek0E zrdt#L0%v$8KAgaw(3%NqFzy!pn^{mJ#!~fWYYf*-k(sa?H$VJoQe;@?z%NwZXY<;ayW2t=v((t)Rx~p!ca&E+O=q4#_Lb}p5(SY zHS#fu5A-cV-^wQ0me4BmMU~#HTeGU94ihqidgqn_Q|B(f-jjV$e;Xs~TktQ4vCzSI z{mr`$e~oPRE_-LFIez+MrYV(U0{HIsr0hNR;!N+-%!Wk7CC-H7?R|LQO|Yaalt9|( z#!miRV*wnO-gv7t6&pXiX7TFn+gzl5m=vBry5r~ddgA8_O4es@S3OSRMS5!wOuBpD zJbPJ|`ki*yK4Ep)%Vwa37#Bzn&Y34TA}v3LDZ+OP1`WIHRf|N5)>S>$rL`U zCKS=OyV|9=xCBXe|F|agv@O3Z!Az6<;R|=lN3IIq-4nLQW(1(pb*nGHEEM zA5-W<#t&c&NR1JDY7bcT;apl>MlNF#^s01DWrf}h!EOPUH$!lpyE&7n+&O|T+|5Eb zxOXJHAs;)^4)XBv`FiAeSe`YxbN2EKWDxNxFO`zwfW+KVfud;Sy|VI_O5O#zR2WsP zSw0@*gHku~z!slmYm{s}H_MZP{X7E~5U`OKRq!_@#@vuz5gtRZ`l_ttTM8G1h68wr zeu@jyA@gCYd#e1;+BE3^|XT1kE z^?MIBeBwR0+37u0FG6^Rz5tn+dG-Yk`AxEB-FqmIhW2KHz>fRzj&Q1c2q3s0>%hR; zGnkjyE1Tkj?QDwJZayIca%Ekju?c)2R%s(asm3lC*=B;oM^T{=n8vrs*h%_zFtNmv zMy(;m7;!EK&B*;6D-ex0wx)VsA0k;eCOm>ndW^i zV}(^5Hxn;tgGrlG8vfFB=C#WTzQ5s56;-v3Iq$~#$_?kYC~U9RQ4(rWcqoFjLidA* z@PZwLKX_E{-m+={H`uk`htA7Bicnt+5rvBEAHk*!6+ExMjSh`*KZls??uke0Y`<$P zkF!+}R6~$nj}OqXOHT{>X(-#|Xff{-D*#R1(h63$=Yi1%WgW zYW2Vw5NbO7$OMH_pHnDO!V2u?BwzSi;Z;U5M{}n9-JD5GEK8GF!CnKq?df1idX-_L zl{oq?nY5+0@i)UJ?fy**7hzVThiuOa5)33fFKAIOnFJ}2d!wU1O+Q+YJE?8cS=HHv z!6lw-M_V0&pKwrJ6;OcYEaTrOrY=cqcT{f~I0N&hR(3=&dljtAG}J`#v_M z*13dKsA}uxNh;$`0+5&h*s}+NE3<+(jCMIsAEF`}Yd4-R266U)0v;^HV<0K*R@Oog zu0Zq-VN}NJK9jNIyo}5KcE;fi=hxVJUPj+Y#+_1o=T0fAbEkxN?(C6YF$c5uIiN!f z`?!tYP+nB>9<_qaMI8C+rWu`omL*zJ1P(r~mlUlWv2wwQs3_)mTe;TGi8|gEXV&6) zd#}D6C)ZIw*1d<0DaYIUaJ+p=Io`&J0A-{PL>+H?B96CR5y#sr#cOqRwQju?t}>{e zRm)A+5OU|>LVVhXB)m`8aN?9($WW*wjpiifZ~p9c2+X2P;0&-7NX$@Q-AVw}$h<~7|h zWWER>SmsH>*Gb^z$@SPkQT9s0mqqi8Yr<+kBO{nDAs+brj+}krBnjn%;bZh#_Jgr< zSM*s|&e3^-JglAl0EduF4k4gXVM$St4I(z01iO%dwbrcGCDhI(aivkCj&G#KC}&rK z)MInl!UgOt`6|9-bi7l=$J@eF>ym00tN6=e@e{Nz)lSZy(F!>MU1a>qe?G)~`4t5* z;VHF^43^kmDDJav>wHEC(LkVyRUx}#7NnnhN zA!8mW2$g)Q4SF_=3zc}df`Uz@PHS7Dxy;#5R~lC?BiOo8(;ZK%J2@AJyCxM}68^4m z7f*z1xxA~JYaACgx1J`qctOV)Rkga!Tc~tybnND3`HcM&A;zdlMF+;qt(~)+e9>FG z@Wj~Fo@mRcV0~U9)dW}JLc%|x=}rYRxCjWYat1FBu9~FX?1@Rk33;P;8(VkE2|$g_ zgUmp+U>rFBSZE|2XG)n%Z}F9v*Uoz`X2-|kjlUGc>+hQ2bjlISKC>|CO6sd}F4Wh$ z;M1e$ee1N@+Sy^O8Gf?<>d@@SO(Nmc)?E!}^@Ty`*!@)Fu1FSqJD^EV!`3OI~ z<~u@VG3S}gWhcct1_~TPoT$4oe-8CIu}71$*ZA|zCf0{*Gexmttp{7p#tjfP0Qw4* zhHeDocY=FtTw-D&S---(canK;rg`rSBO{U!+fz#`t19#l#9(L6VKHEA9zt;f4#Wrg z$9e}~lS->p>^|a6^Uqv}GDsr+R{I{~Qf~aydp0q!D|edrOmp5+Zu+OC8_%#Hr6qf? zMk^+gBNPx8YbG1N=Auf`J`sd@9XujHymx@6DzQR$^GRNx0!f{aXFMhWm64a;-}9;M z6(1RveHqM;z2^s1IOid6m}sugL>95qm=1da=NJEau?!=I)EsiO=e7#%c$jRBykKVJ z!NARx#yJ=S>f-q7O5-Ezeb|2qrSgs_VP$BZ5(_ns@QqQCYB42~M0LuHOk2KV+Jo~R z3?wxzQT`a3HY*n#feh)y`JOpE^lXf|#NmE6t{^xjJYLx`?D3$Al8nWi%?|kVvAcSF zJF)rXu1Lot#)Dk{jNV&ZaC;ak5tDeCZpaQL2Ub9Sn)ejxZ~096<6W`zuv9_wCvW6o zxqfN_2GBT2j<|*jCx#sJp=iy(B;_(H6W>uj%RN-EI34cIQbaOtG|NtG6gEX`CRZQf zv841>7?1B@6xA?ZBJsk!Xw8g9HpU_oKwe=^bjVlK1dBEgyB}{aEgdP`*oM2x|M;GoUsuzMVP!Q5*G>ja$DFWv#0NiSf?M(cXs_QEk9w z8K{4gODycQRnTbhTw?TcGmLyzvBxJC+^dZDK)DP=RfTakWc?S|hp(k_CGzoADMOA4 zrP3ysv`HiwXc*dHr=+${CS?~lP8O)EsWcYEn$`Os%m$Ksc*^o8!_gR{4dw@4<0U~} z+!*5tEf~(@q|vZGA-sc6?fv0k00>`yi!^@4P^Ix7Ac0Ebj@M-d5WqdP2RdtstH0Re zVAbq%gi5e;v?@H4tz6ntWi0;#DS35S+lWZCgeL>QPR_sKB&uM-lj7(znG%=N3nd@^PA@%Xy{VqG& zNbN3f*SeD!uC|vsS9&|{OOR-;_g9E5WwIN0{#t6N%c`xF@%`0*GQP5z1?!KB(%re# zhQ)|?b#ma$?(kp2zmxwp*&Tr*w0{`~_MM}MQ>f+g6|n4XY2sG-39mLcEZ2`1D_8JbcVZmF6Ty=QJZy%Ejh}H5KO4p6c+0qOeeZRI5K>!)Kq( zsD({d-KpZvZ`fG9INGX2?AZnvtjTFNmi$(>R6+Qtwy;eYkNuJngNd)@4KXMzGk1%K z#n5%b*91$o4{L*$Y}f_f(GQT$KYn0^vu@@x(ubDBM~~ZQSnZt80v^uz+S%mw z3EG}23|H@&#R;M&IJTf59~@acgnzL03EpDYx`XnQl+!NOWWFnpxP=RAbhub?q+VDP zOj@{Lf%nY1lcIic`@YyQtv)>k`W(Av^@)hIq=XYhR8DM{f$8KTx`&M;f_|dj8O+@J z^nl0v$ABld-W3>U71-(hBi201T;A6WoNKcX5pXz;6_<=P+ zd-!l&yxxhf@yeRqx&9=3msvIxI4$e??^RaC%8eZ00L^w?_)*xdN@e$X1 z6JcuM0S*XkwddC)>&yrWJbE_c(l)n;a8+B zdRKsZEa_Z+{*5WPInpJr z%VYjJYIJI=LG`FVyV!YX5Vwk|vuMMEWsrbNg01_bLJEG<#1}_nLGTh#xupyn2+>>rHylE`OoU#wpvipmU;b!w+G@% z+fwpxY?aLYjc5$7{A>%}`jASGXNq&nf^U9Cd9J)%hS5TZ{tM-9+IW(ESG4-DER7&5 z%mar|=uV_?zC#2I9=UnuxD@H1pwp;??=M)0+y=^;W3OQcOs_PqTP|0#mG*&3?s!#n z#6qrQbQ*Vneyj2AqafD`dU;4v_iakq!qwn_X-m}i@SP&xDUokm zNnC%zGS*z2KOOs1@J;QZ0%7mJ^@tRYT*0VOitKM{2DFn`jY#zYHjF*m^dPFrP}vE5 zJ-uFTaj_Qw3)tU!DIFUrnT7+QnJ6vsJ*xxwGyMjnfVXq~yEs7=0Vm~fFr9&|e_cj4 zyMsHKQ|^D^MT$j#wA?3qm_#!CD$3q%-&=01QJgJ`@;h2D4qvFwov&kFEs&{qvzk4| zkx!*lnK1#j{u^Q@e*~iBfI0%B7Dpp90&&{OX%Xl;&Y9PQ36dk+pIIz%BMdHKQ^J8{ zeL7f%?I7E@=qn0sM{i`FwJQ-q-UGNDU#-AR zj-xs^x~G{@6cc*WpEtQ5uDEnR)Y*P_%Og~d=v<4Env*l18E~YEPmlIt=}vlRWxNiUHNuf@3q7T2dgn>U+P}`!cd&PB2!AFl_RC0 zOJ6c@Y~nHPy`H9bvHZ}$Y<6Crb2zmlFqOn&-5{yyU2Z6CB?KiP#~n^%%!e7PFoj-I zqIZ?RKh9m69&jL=>*h=n!?nq+qN*Rwk3#kar+1J0q3yH^(RVn@@V#k$x@~hAwgS-z z*OS~YmLWlNx(PO-+h&XfsnsBA>fX^_qYdV+kGEqmdrwm32HkE&InY(~X3UjW%1`lIx&c-t}sEVE`0YBJgm4-irT=l0*aBd)} zvGaNu9m&{WKpb;8A3M7=bu4pPHw*ccLbWE@r9n@Pb8UfmPMXZbZ)ZnGcP)(+BZwu& zLh8&pHeKN5(j(c$Co8Ha9@^+?K%Q+~Vpn2zNjOEOXW;1gBLi=HkLbe;{HAHo$wfG6 zI@VoSQO=#xG|q&MSBYtQcp%Oz=mTQ9n@Q-(kFyb=4=^Q3Gea9N zG~mE46t?~lz%Z7bL1-Qzwge);tEnMj$qb*Up|6a=fY26B*3hV9g!KZrJQTu^W z7}ehGGbVyj*q$SZGy}{SDt=wO5qhu-y_#K@$QTm+ZEg&SYA0uXW>XM$B71L@wJ98o zYzo)Lntlph_m6ImHhr#94@X9t-rb8>DHzJ*eP#VS@C8a?cnH!zD6Z6i#`UlGQ`(Xipw4inb=9!iAr9iC zkQH@6Hi%}mL3qNGqA_ao=ptTXe=s188`(Z~%#HP2@b};y{#DvwvHv!0uqMFnlcjc) zD9Mwhh7IqI+Td6GQ?$VXzmKeHjW4Sj+gZv|C)g_^tX)TD+Yz8Oi(oC zK7={<%6_sY$jJZ5VOmnot<>r#bdkQ5}<>qPK<;E4H2xb~?9+4}TWG39$ z0uP!cBv&rwb$A4X0{f}}WSxdt(-k=mZ{!~SU?qJcF8PHRp>)@?puF~E11N{Y#Qop}#A*4}? z{~kHi+zBz~&Ns`DIZ(m`T}5LOQs%B0_Ak-hZHvcDmxP6q@P=r@#`qjNtqr^Nh)X^Np)EYdQpaGdi(SwE{4qvTZg4C^Z+Svsf+N$!)tj(;obeM zJ0&bB4ugCs|MuG&-OYan%}{T=yLkfjdS5|kv+Q(ZF0S4io!IDU%sPkpEl34>CkD81 zZ{j`b)(%oNn_FAlyo=n;zu{vZDu%80!U6`jSIBzOm*VL20uE#1s6C}XV!G@pNSGIU z!e29sv3DoRO=4&Q<@eF;j#{LFWm2pOZ8cw4n#!e|@aoMJ|8rgTG(D-U%*5nRLU_6t zF^NPK@iW+-2o=d;yP#6-q$=1!`a;?xW+CchS4_O z{p^1C?x1|aol7$gawTTD77l;2z`Hl#upbTQ#{gzpA#T}P%M&&ww~g1`t+$SuPJlfS z{kp6$`)GLFz|k%Ea`8#e?p&&R2DzEN;`AY~YXEsG%-q=`wg!e23h86;W?MSk7%q`J zIj!uZ$R!G`&fUtZvj_soV64a8q5}YoPp@V@^$R$ZcDjGqVdw6pFSvNZtZ)}lF$Sop z(f&SIm}=%d?j6n=?F^9dCf~fJ`Q0_a)WX92d?vqFbUnc0TE{RKTvM=_uS!irP>k5R z6lEkxz^IvYTCoSaG73;I#WMIe0p)fDC`+S&GK1sHV2b}gu@wSWSb$|vfJI);@G@Ob z>MBaSEG2xU08f&YxJ5w^B$d;!->Syg3dfC@6jB%ip@{-QnYugVALHmx6c8E{A9mL0 zHkFE50ju>Yw_?iE7?u+-+H--i4{;3({~3pP4bJKnYvbDB*W4}DykHuucR5dXXOaID zffXM+#Qq-%nI18!w1s?vxi`m(65J#PtKbxM#jFENHP)&MjLKL#i}vaHHwz7(Z&Yc} zvI?Y(D&<;6m7Wvy47!-OuK)yoiB+1&n^^qQ@Y6mccNt7l@$-q*rMXxUm@q;EZidu@ z=8}zUf^nGrKho{Dc@56`B8vf6&`WiFtVyYzuZnnEdMakGk<#$+?uv=GIT3H`(>n*& z5WZLMlBfMpc!3gk^B`m55o9%?I zQe)O;nKsoM$?)E&3{%g`z%{5qb4PMHoJpT?8p>keX!XSQ>ipPnAnZXB{`Vw*-EbE)lNVA?6SL9--$PDy}yTL$@nc-mX+ZUCwi3*N*kU3bm zBu2#uVPG72LM;YaL5+NK;U%OJh;Awuhm(zqK9l^3Sn_ZMj6bsh@J8j_9xOWn)0XpP z4~MLXGzm)qff9u1dyJp{SZeWLV)+zi!A3+uT$Y?j;D<743LYX{W=av>m&YOrjX6{W z_KABgP*54IN&QuztZ$3DR~68T?()rD_VX7RI9tS*QlhMNg$s3NFg z6+z#q$>-muBIS5@ z@{01_=))54>Nel0o#^|+q-m$zn;p{(Ar$v@*0{$NO~YN>xaqTgaI=l)NElVcvrQUeHI)JPsoNvvvowM8Weg~=M*507xPu$h} zguf?m%isFMU4E>_ee0Xr{|q&KV8cuTg}aun)uqPD-(#p^+7H*Va42u!6Zf*SWTB?& zLHtrp%I>xN4GA_wnCO%`%@%^0H6(rjONtz_Qb{=H(9wIKaza zY1Z;?UJl6%-C5qp{|EdJ^Z$`_<^1-|9HM_6w^zsmZeE+sctCR zTFPQbXH2$QymqLF**!rMUZduZ0Kk{qna^rwWZ5A`KJ97M*=pcnPgfk}d`bjUzqXxx z)o)T^g3Kj3SQEFtO2ly@mcL7DkC9*>?~Jnarusc1W$2d!Un|3EfR?eus-?95ktsPi zGE-841ijAx@A*H%KNI`885)A$pJ(Hu#r@z1Y791?5fIN};h&YYY&PuV?qGiQo>bU- z+-S6@MB{E1{IU5kNe@fXLvoQ|HfSHjH6g&>*Pxw2MEON)OqsH(_UHQ=6bS7HgsMB9 zzn&-#{%STjnL-b}uI-T*r}c0I)2A7qx+M#!$^%zT^>#FDG0tzsVNQDB?Hc#j&;CE; zy$?WCRo*u~Ff%a1;2jBy6qFK+4c#czBxJ=uW8_9*2r?z=?k2fZ`?zwiR*%TgWyix2mixGG?XLTjX_mPTA_k7Rye9t-GFRB})#EBbNTgIE8W6uTDz8KS`^_R&XpGb6uOy-C2 z{EkEmF%nAm?4VUFJE{@RVx5nUG)tq(m6xCt4mv-GbbdbY#th9={?3dm%H1zPq6qr_ zM1S8|^m3uW_nG_I2l4Vk=T7W8!92_g{58C=-h&;iVC(VL^R3?X-ZbGOXcB6Ull>dz zV`ICF`{(2T1B&sr@N#^g>BS@BPpsh2TEA`Gy?!?eUhfaXqV;6!$(Y7VaZ$bKIbTa> zJM4%cr1f;RceeY^Hn4}}jq9?Ep?WNls@f*sS+5Yr+?`uzIDN%Li+AKEO%o`f}} zVo!#~MH?{~4J|88=5{FM6S!wp?8AEs{Dt%HR_EY2GiLBkdtZ4?m8CjTH2NO0v<#n- zeRaP6j^n--pWoNzQ;&Il-*);Muo^JcoG{QFv$wh&LmJ=BHoerciS;i43$kCaql8R+tq1)^`eB&gc72K4Xb|F5%(q~{56f^ zzb_xHc%3nb6eoLf`RHMUF&q7Vl#dRebYka!Pd@U$LM7_*ksqj{sBrlR%2|kvGX-LB1Mt z5!DSdlP>jrgju+k+M`7H?lJ;6wqhe)L0 zlX4?UfoNUwoib2m1>_%y1?f{VS=k8?7}68-SU7z`A$vN4tV2kaa6rzZ))^-EP%G(j z4-Zg0 zH1kfffi@f@nbhGOQpzGCk1z0qbdsLPYqp{jXf2{NGMQ!8>F%M<2pwoeGZN8)T~$0YGG!G03 zO}!Y`5P;D9m941=)c-FEO*qE`cndElG=YQueW9rtH;&MW-zhZ3$E{#(juin04^o;{ zHi$?#EJhQT@D)?|Kxg0}?&+e?S0oD2anPZ7G&Y(Oow2*sSaX6zJ^8e)=7JxAl~%MV zB=`~6C_#*y0J+wZ>T6GP{mu#?*1eaLHaK157{nK3rVg2LS01)J2{4E!5Ol(J7 z~FofZ#zEdqE!frDJ{Qz%PB$27E;r%fQk}&am)`u<%lZfoA~eJIjSVN5Qmc z3FN@qVG(HS2+*QsA!y>p#8#vYEo&| zv>$lKLa@ji6Pp36@-D=f>kz_o(nkKo0=u*wRC{P*xo`oMUEA(4<>C9p-F4R&QbHtH zgq4G%6A4qcBNGNKMohv%GSvVYK$3d=61VVAt@H`+rrle3{0 z{$azTi6k^(TUbwR+TDt;4LdZF+h7k=U&18N5(YoEe#xb8jW&kM29h__TQGtj4`|n_ zKSaRSqFwDf?o-zXZpJ{V_kbJ?nlh!yd$hoiLg1tdZQ13s7C68wsJ{r~Ep*FbHfMvn6 zk0KSG#gA#7m*fs*9-}sV9m*Wx+(aZQ9gXw%)@kjR^Zf2d3KUKtC-&?}*S(EIXa7dqfENbl$X;_;2$MdgZpWVzDL z8VC&`jV-U)7sPU>Yyb*#+*}e~ZI5-^FSyHkjy}|*89VJ3YVRciI)AnBbRVLH+5rA4ZFC>4O<*nt=D`s-)$O!dsNIAB-f34A@8U1#iFWz) z2*Gt2Fq-V`)HzKs!)3(roM=x$duN${ey6dsOzn)qaUJF&MR2`>wCY1sX_M(%q!0WH z%iED;8kPyr7-0Q?gPvO8l zJf4u%9+v~7#XD~oXWTAk-Y%xfffO-b4j2U&bhT8Y6>&)PTLhdG_!R=Yj-6w*TKy&P zFoV~Qsn`(cMUVT`z&k8=s981w(ZET3sqrTDL&<&KDm?K5QUudH{XKK27>45?5uiG0 z8xdf&{0#z2soKsegl^T8qw1rL;3aTW2L`O3dWhg!uzyl8Qfc2#($VjVE}CE zmlafIGBpIB3PSS%X3y{5PawtT1dQrQnVIFeyK#zR7FronVqDi-OmLy)Ut%8%Piliy z0r4z8#kP&UEh14Z(ZIqat|he8)Z11iVG^LBM zI&d6DBIu7Dlo-MdX{JjjwQ?Y-2v6C9Fabhgz@oI2R*ke1fD%f9O6lJKaXBIvL4stO z@_ZYTLz7>METzx~m%fkRKK!sMNhCcZSHzbdhnRfd&;~?x2G=Q5(+Z7sMz*wxkIUng zMx$N zp_hgR^_O65fu|4`zy`B{V`fpCkV8{_r;oK{9aSH|hn_>aFe8po(^=u2?LGB*lBMS( zt}zQ#Ba0e`PshA5K`9Ey9=*^Jl4wM)?OwtKm{R>|?)g4?Wt$Okb!bPTkB$79*vg+N ze)a@SqumXL9Z%=M8fxpL4bu&V*j94mibF|qI$ML#E(P^rI#lP2@N_`$pFW|B<>zY; z!*(iz=x}WxtT`Q@;XQ8h_C+b6D_UTt|H{S^IQ$3$7^5{vxkR8eN)n-H|EDQV2Jk2} z8UHk80}CHUxU%<$$bh}8Qe-Uo2#G0^x2AqACZ?JTYoI_}eKkOl1{@!NLiiF)J`?|f zZ%rC(@51UtdCgvfu^g&*DE5@rw!RFY_fJz+u%bTs+Dx}Gplhc^!@0>Q>s(E}9))pM z*^Q_xOe9$2DS{nAUhZf)MtX@fiapjs98ZWhr9r<5jeb0cy4hHBocLkQdHP#ap?#gLJhH0Fq5~r#Ta8 zv8&xf?+(Ec?r4Icvs@JH8}V-)iOBO82QAk9VVjhWIxUx*__vgHOcK%p)bHTceG zk(325e@2?XvCmQL2WU8gjL4C`vvOaA6s507^irUt2L$@?1wI6Pe(f_XP+me_JP5hc zi&2P>1g6_Zwqc-5f%{pm&_`Z?k&ydKD2`YLnBZdMy_5+)i;w+7rLBLK7FfQP_Tz(b zSdVoPi2imTN$k>SUtLGsN&urc07RS^$2IoYKm*D2Z6_f~`>I4fBP!kaOS3iq`$8ui zu}uJB;Rr=%xur8oZWQSNi8)Y&YH%?)T&#Ez#i&m&`+l)v%6;D_R>Z2?emW#p%nrf& zZm}Yki4_}v_8nqH1cUH>Vnu9)O?{4)IVe_qKY!jq%?5s`(u58M^C1|_?)NDsZYc%~ zo+)+wIbj8VPI0p50`Qy?aMe;jGBg?{bb$pT^~SuNEZ6ozFFhA@f%igt;ONGa6o25Q zjz*+IuF^f&&!qkcMAV%B7TJX-==5k!0D3=|X!u&V;VU53<2@c@^uBGw7lteCkIo_1 zA7|qwfm5a@rm`^G$i`kRadT)%5eJrxcc`Tp&JG9*>HmEr#~(UU!ltwz7&Rju;IMqX zBqktkA7d8jsAeJ*vrKbI`g!Qw!x;$YF8~|Y3b5FHZbq$ldojQatMhTOLtI>Qet>3& z2ZvJX4V%atmNg`Fp!Kbkvz~H_U~hc@*RX?D*xFsl$`V62gvkPu9=`2hgpS^dkMpyV zvEjQP<0o({fGaoA!+aZ> z*eE7elpnSkEg0B_wYZTZ`UlT_X$D4bHps8gP(TF)nOP-N!w$scc702<5ua!nU^If$ zC^paoI|#G84qr;J)4Y2>L;^y#E@Hv}cqw{lx@+lfmT@8r80*mNlU*xX&=_B0X3J=k z1Gd<`d|ngeqbQY(w;6U+gP<^_f+)U0Z&tQi&IzZGH$E;O<)iFR5J|^Pb~ho}f(eA( z#YHE(oNbJnCb9q(T{_vd;X^{FWCGO#qybuAupjWCzpFen4)7ZA6_XnKy68Bse%tcUMCIq2Q!TAyTBgj{oK{HIZ zJgI92Mq&Mqjd@HWTQN)`I|`P#C)`iyDk|{67@+oF7HuIVF`f z677D_agr5#X%_=h-ooGxCz=7!5ZibGH7RBF&11=bK^r#EN#ZZ<#C^ zZO4#V3m#?zmJ6`Ns%%TeP;H@+&{Zwq@G3+Rey}7N(myqw#|#?m{kW!{1`aYXQS;E- z=RlDdDd@+_wghOb0qaZf&$D=*1MF3x?2qb|z1V$0wweo^W=QM8#!GGx1qrSvG4MjP z2;O0RyL%Aof;f(BWg8e5L61*a!LT2K&LF)V0h!kbgQjF$P`+SWxfp{umY}AD^NzrE zP<9}a?PJ7aF^5`%b?}2VSOSCuK{Uc+zXevp6J$q{>i@)t2n1-0gRuzoblvu@*^FN4 zTv7Zm7KQ%6l(m-R@58AG_yIw@8%?b({_8;|;&N3;NuemOlZlSHV!4ZX&z65@2B>_ROW z?!`BZmXjC>jXTbQ>H<$A5|Ge3=(oYS>mYCE*m~Ca)JU~X%$i6TSIWpS-n;=%^n1&W zWHd-1pMzl(MkI}tIw7*Qgm#0qrFW>61lR9bOM+PXVEZFPIwxpN+ckshLRom1Wb~;Q zcg|%1O2z1wdLv2(7Od7aUjfvv*f!9IQ2RVeqgKSI-Q8%^S^5m@3|__BYgk;R5pkX7 zrPR!5E}V9>)wAZ(en!+igeyClrZmTb+TzVbXgfyh#oS5>cckELXpF6%u+j{A!CH+@ zgI>g|%rteg#{8}mX-TxBBcHZlWvng_3<)5p)!KBd=1iELrh~9clvZ&38ZRBEt2yl? zgibgY?xN{RyDrxd*&h_1`U?FON~fo&sdqvQShx%6i8cGfX9?x&nzJ-}fHnWm&lUhm z({T9wuow6NZ12b33(<0Yq*9N=I7U$6!r*qARxqXXVM@Uil7PSe;Zq3M1XLxJy_lAM z0oBGTjQVqQh=H^ikPH@(P7HjFj$^JmiElXJN+(NfR10W1=#*q*uW<=tDFza1X@fjq zsJ?SCA&Vcha3mGetVZxiheH#>jwG}&7bj|M7*#v2#ycBhktCU3OdEj4pb*6GfwTv^ zEJKjUkJ2TOh)CD5;maoGI@Fz}jY6N2TGPTw=@%qxc1^k*nv9R^KCJKJ*PJHWMG0PG zR{bD9b4?;)9%{y*?n_aBY|!=JP&zZ+wff0IT7qugAmtB6Ey2C8jxs32xkma%`p^+) zgRXu)Q&;yvFjsG7iLjXDiOdy|rF5M+kKbu#rTEU4bQHr}Sys;{e!zew9cVfHSZQ}v zgL8JlIA4O4n_X;^s(osE8^0Dks`KMcA2bl=4S#@s@;KUrzI6JK83+ELxM>eC9fdE@ zjBnYn>otoY|%>l-BD~~c?1P}Q$hWW$`+`p8;Qwp-{5lRK z6=Ls{jR<2zVO8_LS)YG9jXbYvD$o7aDqV?&G^e7%mrP74Hr5OdEU)MWfg>g9l2n2A zTZ2J%w%{MpcMtB*q)sc(-E0w__=pJ)Tn(O=!fFp$eG=s9^u$8;&h!o`OIeuuG=9Ja1Ho7!%a1`K69 zvDl#tCUhvwhJ_%_go#+Gk*bBMUN9*wLYh)qTSEws-_G+TLU1YF{v2Q+4_33K+t;yh z>3N!KQk~Ad#)LN>~W8ReDMtYvlNp?Yw-{x0I0+`5kDrM&*~U6SrXBGq_>H8K#Un-IvGWaHHQBj+BlMF7iC&S?%C=9$`*UewCN9Nh zLo#BM<7Pkzo)A2TUF$h%sn`-oMQjpF3k|S%ReRhPQl_?qo=A}lfbDT_>e2kEM1hb0sxJa2%0Rh; z8TluxTEjnC!#?2z{IJ}M_1u&g2eBE6c$7i->|C-m9s8~W_~fZ-Sh<(W{jK^%GZH7tIpT*7gA zDD4oA2PnR9FfG^Fc>H`dxWe^r36I9wE z9fD;sbTC*JL*XDEpHN<0Tpxx9A`{fn!}6m1!8}JP&o^LX;kY9*K|MvBFbwypFfvJCwyq|YHn2#YP=eS;2kjuTXg>P)$|(kH-~5sO2re?o;Z_0!4mhL-F%g_n11O`ik*kNwzh&#h%9PBe4tOPj7i1ko z-YCd`!D=x^?F3=TjhXi}fVu!HNin6xBB%HWpZF0Aez7+a*wCf1v`}kOWvIJSnFyHs z9=dpSlDs#fBknK|q>}W|^fWDXFtc72mbtTiFa=;?77QWcgV+Up{-2@ShX1m3`?tSC zw}1Qpm2R3$rdnE!0jogYF(CtdX^2w)9r9_G0Q-?;|g*W|h+oeb~HzYB}B z0t*bOf3WI@75-APKm+4RW9ssxaq71t=v*t=31jwg)hBTASY{5+K17`GmjbKu6}*zb z+^8|DXD;)AA`kdi|6I;Jj1$yG>BsUOK|Tc^z+{*r$J~g>)wfib)X#Cf*Ws?}CnH2( zz>*aVlMVWIUP5hJb`nO}VNTToS1k9R9YCS5Trd5k1jgW|Ecz???M;RKC#4;ccVy?P zaQ6;()#|TtmX}Q5vJ>fKQ4`L83Q=WVg@7HwESLzl0s{r-aUAdfAjPqCViZrKG^j2Z zL?N?8`P4dDc!4dxGHRbs$g4{eOs0HpA&_KTg}2Htm#|iWg%zzRRP$*lBSNobk$M9Q z+5IprAFEXM%V$TprIVTw-f4CFfGTD*7#Q|THdw9GYiNOm7uW#Wqn;}OMnD|yIi!<- z`vH1^xvbi+pKnhKH|CiP3oqOgKw%bhwgd;&9c0k3&|ToiA<2I$0AFrQg`vF7CNb_E z1I9XYtfFd}c?+HV_Ou0nB__dD+a8wmt$UIcn>~J9}A#^raa^ z7(B10g*}vr9l?QtwZ>MtE0|R;drf~dL`2kxsxq@5Id85#DW=h^VGyq%1wv4a)ZX{Z z3{oi>-UiRifx*zXgQ0#s#F~y;3G4j)fTf6Gw#WQPH zH<{$)5#p{w^+BpB#vK{6${cRY>I`H&j52P_$~;(v8pjH~oH46Ks01@+^%gYM5{$5Sw|NtUuCCE249e-6&1mh@51HN$HF!z zQCCqgF#&B3cougqCD9Uj!;|U$m?kqt(L@D*Bx|q51q}@3+ovUomb{#OQjgq%22RNE z=94wq2-ssoxkwM<6>47xaPk)ZDxRQj!L=U&IC{)3OO@ab2;NrR_EcpGS(qcQC~0I4 zF#&@g#NaXQMp{@vh0)j}Fn08fP)pmeYiC#ZvksQ__5%LOTRd}S;4G*K^2ZhGJ=y5# zMi}T#Zo-LbY~ziBNip1JAaCmaafz$GXF`8xp~%`k0Eo+Im#fLtY_Xz>TxWywPA7R2NfBnwZ|mIG|%!h%zH zPG-U|XWv>oNB=8AKie~BgpU4|>I>6=em877RWwBr`tX;ejfQ&#>e68~P`WT2dXR7? zoB@*o_7HZVKD@T52pCDGq9QGdBSHz$vZ=vD@`Vn|S0yU#eL0X<{R;x{y5I;nSl5uL zIk=7Cy#vb$mSJ5*vj`4KfwIZaUyyu!FfRc)_Ee$vC@NkA!;uNha3qRTKSxrz5%w8i z3sXF-OtG;BMQfv1d4mEMn8}RJ>IsmEinY0NpMUi-(L~X6v*eb%1 z+{&W%c$WEbRR#Pz>wWcK5Y-a8Fa=OBOVOq70KP#f9l@ZK#;_S?vsg_B5|~SL6WK7o z4m0)PK;R>(OO*gbc#BM5!PN$Bj0xLJGucAsa`}ke!pAbE>Om(Gx$iQOa*^tpmUZJ0x;Mffz#q13aGfCe2(5g76v<>Zmvq11Fe@&O*1M-X1g z(<4g|>3Ag{Z{SK{4yAs?;^!d#W%`4bhC?YzMh>N3#K+(idV@o$rzz$Cj6*5H3vl63 z>J9>d^1~cT5q|gxhf+7{AHy60))x(>Eux794z}MX&)=C(?*M?S$9d`h~imzP>Go}7Z$vY zcS+~qPQtb>NqvLBT8nt;SIHD5Wmb&LtTxAYFi(*E)tE? zFw{6#tG^B_z#HB;@|n;`%*335K?Gkd-Rp}JY8OPLNMmKPlOI29SdE9#SuU0svE6;y z@nvEo4F27I3$nz8AKf7N{Q0Oj$wSNpp>1IaY!IruF_Xw2fYmoiqtvc%2Xy&FX;MDY z=7EEG3i`oT`*i7um{=2hwlZ^|AW#@SJb^q8xDeX|mztLqi(v1txPJ*50!>)HjzlBx zEMRpY=$1NQR#2CblGP^whh(G&hj7@V90|07n_MI$l_3R$q}hWBxsdceY{PlKW_ZF(xplQNIDKN$%9<2V6NmH;Q+~F?v zYopaS`$KJ~zKfuHnq1HklneZWj%jI)1#wy__Nyke0F$d0QxTjca}P|*4K`c?eFo}J zTm`haXOgTHC*N+hG|fz+PueKFm^?ER@Ci{Q94Rv`@=r_#cZA-}dW#C`wSyRuNp|LA zd{ER(R!#WIY^mxdO`p1(H6Q#CkH+mI|2VXvVr6Xzzo^1{b0SQ#KQGKD6OC#sNq6v2 zdQO5*nN?UCSin~z-AS08Wma2yH_Db^4G0l_F2|@(LD7mK6mmRsH7^vr1|AKPXeznk z_yEL$uI$nT!Sy0w;8JkH+d&HCcvnpYw-8WL>_Rx=xfx#IAkL~e0LhIKtC`?^w669xxi8{!b04^uE7E_i2vc~i#8}08h?YEI{4!@>$-*`F=EN}^iWD#Lgs(2Kr{0r? zg~=3oT2Rc?QIS$I_KCLJMa%8qfrV_1!YW-$R11c%C`Qno#E`f*gau!5C8^mQLv`$6 za-<6lf@}3gx(uNky@Z^EJv?mQl9xq1!biz+bPGs^R)Ud=f!2H0<(rAAoykRa!IEhc zRk>HU96y<@5_NB(aQnO1B2BG`QTKuF$iXYUk7lm1J#(?f{Od*%9B|th>x7fRxt5UP zAQSWlx4L2q1FoAm<_l2IoN2UhB|q6%ovW_{iH5ABzyqZy(2ESM*)AQ^o;eYeHywFV zjilwxRE-IMKr2CV#oAF3tCkTEpkzUf13$$`K%AAK5A&_?BpS>UJkt@aOx{WC*3~1_ zlFE!2yNSh^VWP~C(@Mrj zjA#v#3)yu~xvIk;UFBH}W8tjg1XLV@7pjT8Cr^6}E>0E6j{?@Aw;T;D!>K(;CXWne za74WWQD{xS*$AQgB>bTUrAKZHWMIfuxcw2&d^2{-0?pUtFGSshidOtTq;lgR*1Nrzk@9`*oYTPr&Vv1O((s@8? zR@3EH-KTQUi)iP)&`jwa2q|G`Q4LO>J;nAaM9;hAT+6=|8U`e@x_J(Kz0(U@9>Mr3 z=86??0M-Qurk(=JeDw5Wv=7R>U(Th>k~ zpc49|0fwANE&y!P#!B&=&vMV0@Dzya(8BC7Q7!s>6i74w{N9j21wst~xfo)A{)a@k6DaA?o8S7t0+?Y=(0SChB?(Wd66OIgxl3VealnN-Rt`H>w zbVbDQ(gYVJ(sry&k&Y5~jxik)(49u(+pCLQOZ;&r~=#mH7&b zG&3MfH$&$qNjK9(eM7n#6#=H3NkU^qGu=$mkZvZGbTc-lo3Re*W|Bg>nb(kc?ev;p z7vzi8lf(5g_1B}zF4D`qeDIR>d%NqX_;ZhGMq!1aNImuuYl($aBvb{YnL$Y)Cn%~D z3K0v%AXOJ~aFO~2ZmN?8Lz6Hdq4;3PLv@jyT^3doEZ^0UGa%;Cz=U%g?Y11O(8rR( z!UoA2EEvxCrXm3*>&7IE3`oV$Q4G!awEj;_L!r#_HVl`4`~j`@n>@?T3@+`rBPx7V z&X)F{pfXt0v!y+>48zy;S29XVzTEnOmI%biYcO_$t4wMIfCq8=^r!4;RqtU>n|e2U zCaCk+GfACAt-dreid*fUMdV9#`QJbO-5$FOIndIftRf=;5rK4!Gcdxa3%|G zpx{&%e1?JEO=F{i@=mS|HF=ll-x!~7MP%U;Ct2W)_IB01N;9b#^YGNlXG*4YU9*+N&3G$wmW zA0oseb$%ZCH-TMtmI8jf^T^4Zcq{R|hj2L>x)|;HLiMK<%xPM6wG!o=J}p-o1?8Ki zP(6>K2YDM~T#)yelqf(tL<@BA;3$Y!5n8uCd1ZnZ_tiO?)yC>B zd9*|XXpN~^5nxj}WK$Tuwe0|4Sa*M$6wx`}T{O*C=ZKkD_e{hN*f?Bdp#vU7|GBjP zF1Vna!b5O zN5A*BjW0-oD;x5iKxsDTiSacB-3Xa#3i`-rnq1I@%_JM(8AnugZ%z$;w`kmlH+xc%4G+UqKmYp-AzU6_LVQ}iYvVQfzzpyMA!=o{?jVAA$>hth6G*xYw z&W1UNvjGAH9PYuh2Y}=KjUIat2xJ0*T{IHkHspcOs%)eu^p9_n%p(eHnsEdyI@@jI zn{vG392`iB!1hb7ArFsh@fOM7@Srynm><5G3{uJ-`#^+t6^-@?&^e=n5r~V_j9?$V zb`WPYhRIeCFp$V|m#KnlGhQH7(A~be@m_#4r9}(m05d}IHYM-K3Hj?Wie0t!&v4&$GBz!>O;sYQM!SyE~SW~5b`OYqb zV&l8Y)Lk>so6LrB+Q?Zx_FCadZZ z{)sH6G1PUI1hg}n3O#djS*7PPow$`%+KK$ezU-#(NzR=Nfwz=CxLGF_~J16Y&OlB!g3mZE&X zh-nRDDys$uvCdX1jKo!HFyRHOG0RzliNvyi{g5ZE3>BQ?yUKxs%&F>xvuM@;owWrw zIS^J&<`vIv8mTle?Hbg&U8FiVJrV1k9xSJEnxZNxXMoO9?7`;u3)mcj-%87aB0Zu0Up`XNijWJ@}pIwSy%90(z}ecDr$R+dYEdKI4>tK28UJk1q$At>|%5zrOR$B2lesxs2 zaYceQ72zvaX5w$s>KhOxKnsJno-!cmteq;4Wb2(;B7jF z{bD|0h{F4|#p|y^9d11&em#T*Qs3q-=r7O7X9(mo1o9aI`3!-4hCn_?p#OUi=r4yl zqdez;bWJ%{Wg}3k;Hn2@hIa+@6-%J77*i+vBlGD4ocpjI)jq#uZBKk>XfuYCA)In( zFS{M>O8dp60Z+#{V)*aLUNVewMjvAKidlQ1D=#7hVhdIrAb&5e|xcC;{YMt9N=T?ABC6KgIzH0rIynoLTiFy5&^4R*h zE7{7SQ-6ka%2JF6%^m84e(_1YZ8Z6kKAb$xEm^oc;Qwr1XRtnSZRuhm)ZnTu) zY^sGUAGjm8lUUn;5)fr8E`&qcb`)}7kgh@*xN4;lvrC%kzE>y)snX%yR#{<{2ZG|Q z@|v`XK`|;vOq;lBl4tTN#rg(LAY0w}R(Z`EkSnfQ9)Yo<%z4A2-p+C(umk~Z8=u(47CyIxNt%SUmtBR`-uB?%5{y z1J>gCg{6)%$GteS4@bbPMSJqBd193OFcw*(G0|AmQDAEh$J;b5Q{R{&IF~g9qjY{* zf|DaqXFw5V3l><}#=rcdpaT%9tcL1Sp~Y#>ZPq;K2fGxXc#B*O74c0Vn}{e4{@;zk z0t@l|wdm>Dvnext`OU^okv#1N9N(IOPd~#a2d(?6Tj3Ut<5_ct1mht^7T{seBZ0^t zgUtr_%bv}c-rTNM`uoyJ`nz*G``gF<9%g^L*383<YJy<&^7?aHhc_f9`Pxp$sn zf8V9Q&#L%ap7RlOFi2Suxy0Bjvs4E6);fF=p8PrDJ+t6%qpx%|IAp!>o>P4U7UKK@ zZ4L|X)p{+D-estW_V&T2wCh#mf!z4S-*D^=chH0qI`$-csA8!7Mm*duRx=l?v5VE! z#oE9{bq&0Wj3`A`Q^k3*Y80p9_?I{#qe)D}o8Wp0pJflFw*-DQ7&Zl5gW-t4BM8^9 zG)~Z5paQQWc2btW5(LZT3pYp;!{$FF$l%f%OV4l5Th_$AE=AL zYynr%t#0-nh^NGxsAh&hR0!~O!vWJ*0(=Tue7zL{A0w=|=u0?AdJpWvC#rnk?czeY zZ@D;E?t4&7lKWP}I0-)SO3{u$;92}Bmw)u2bd|AJkA{fP`z(OrqBoK)@ZexLHGq8s zfR92~PL;-$%WESiOG(f~==srDdj4q)cwZJzbTd!1iCQpNjSggl5x9aUx=*Mb!9zb6 zYRQHcp#PIl`!^nvgj$V<9u{hk^H3>VoFXJ|B3eO95MAHx*-E6@#Atvxh59XC1Aj(3 z)*kl>Pv3}DlTcfSzj9xZ@bnm@64%P=Owk77aNuXjXcAm>@Kdf&ZDOQGfH;M7lF5^I zvhMP1?FaPjq&aYJ?LyG)q9Gx8HXx>nbq#Uj0O=5V8F6M(%ek5n$swf%-bHxmn-s0b zE35<=Bh|c%nhWI6!yu%FksB4s9XPv=O0h3@|EAF3c2T6fiSRHe3@IExdMXvwSsztf z2RFkAaV8?XRW~0lGCu|vB6Uy1+_^!9el{D|Ygz*uSdpxvnR|gh8igrGGQ2`<59TCl zq`gQ0RtMamTo0kQm4=_rnp`g;EY4cz+K;ElMXak(VUIno_wix~ZlV1O5Bpx|aZz&? zsx_zBl;^6e65Ly9kZaN9ZuX6*;B|Cwr8)-Y0tbaq;6*ky2g zs9nVP=QHYuh$9d|HQYo9!_G72zpy4m%N(NBgdfpz-wNUB3!nm__5}XQeanO=53upF&8MiCLA*vEd^mi;2?`de6DWNPPw#M)%R8yj@0XG>EW%RR zDAg;WRL&nwl1AxWf=bTiBe*1B0&(-IP_MZ?+W|^TlhsNbe89;<8VBo1CZk!T1sR)M zl;V1%9oFUGqUePRq^!t<3u9L^5-BXHTsI%@d-3kx*@3?SI}+){id=$=-iOA!n9Skk z@wO79gk7`yHIuMycK`F*Rr)tHvuJ!C6X`*oN{<%DxDHldwZ`PCs~iQVx(CSu86z5K zgF@7@0sZx{(kDe`9o1X5${I!^qh-dhdl{D-PA^JRY=aba4V!yCTff0L;L}l%P1CNr zYHV1?Hi(lHHU^;7!eP^YeFAm!X3FQY-7jsRCh1c?UK?d(t-NmJo!U;1ivVTpnX9)5 zMhoYvynjSuRnf`;XLhD|XOInQh5g+Vk(sAWWqh!2kPj-18x9S4ZNy#W@-#Rg%gb{G zrE?kVb6X!TKxU#6+J6}uM`6qsD%uR3?g!PGDkfTmI# zXSO)RF+60F;ujWGWb$=lsq7>^=iW*KAn2jL!`N$~luxDVyHGM4cTxgAtPGCoKWNFahqzNvyMniViH_1|NbJxB zzcr~k(&8m`{|%C%?()ue0R$H%f?Fw|zVQa+<4r8ip>VNr8+a4dq8#0RgW{p7USVRd z(i-?R>aTwJA?bff@sL$lNdE#iBle`BW~uBdY{wB^QhTvstl8FYPR)U+~{)GsGV#I7)wYB!SlI(b;ENmJSVmeX|a zMLH1v4JxZpRUZ2Hu&vbZ!Lw$^#X7&7yn)3U|h0fX~L zH%aE;Op})AS&IWNpY4O2$HIjrsx^`@v4tOjosa8G!nT=Fv|8@-erei40_*q-?EJX$ zi5n+kXPT4|!nSYT1MW^Je+8T`>c=UDD{?M~mYN0wRQp=`F1qon;i73yy%e9bR~ktw z3qW=kn%p+cUegePWbWdAz=6}`(}`YxY;0?6aX*s538HqTVo?fBiqCk^tBs32WNfKv z!eBDEEy(XWA|3~%*bkO0E_dgLc^%0dB4g++v9`3~Ol>P@*1~Bv1%uk*@YoOIa6!c= z+=}-|T}uC^P34=^W$EB>QmcEm1*-ZZZlkcvei#dGB6p}BOVrhnm*mDY3{*iMifZHa zyc0pG?n>)orGc(rz4sR)1G4PH|1B&j&I)FI0fhp*&Q~SgW+#0_Z+q{@aywnuv?F92bXA{(O%MV0|Ewgjh0Zz9!&J6i2-Wol}sq{ivuYQ3?WmS`zB4}ngx zVrO}T8j19fBF*agOv(ra7dr!Jn-6J7O@w?hQa$qnV%s>bhJ4DMBt75w@>1-O?O23A z*c(Kjj>@)36Cqi<=a~xCm_O4#91dDUP=FlVhqT%xhN>R{YJ<|M?FQ&==>QGoMv>An ze?E*9%Z;XDpUvXXo^-?J8% zkG9gQ`W%V$w68ARuFS?gIGpy9`>qsY<-QbXewNh@XgJqi*E!cFAOEzoY>V6i|MPVV zJ$KSkH3q@sB7`xJoP}yS1D3R$hGcLn#j9_iK>0_o5+^3;PNSsQ5;YZAK&XNKeyZ9B z^l*y0e+ivQ`}OP4s(x0cd`cQIt{%e3UtfSDX$x`K@nPIB@~5iY#SuR zIw+tN0tF8by=__f7WugCrhE&FGPdY3mQYMvK#wtnV!Q#P9u+whWoA+1_aR1I1qND6 zH#`a~I4*9(El@pZ*=z{~O|C4F@TDNZd)%C5sX6Y4?a7-cYD8&jc2z2Ut4bEHlb5C*hsio0c2_LEQf$iN z`%?Usmo7c-g9L!cLT$2=p9;Dn1oM$IsgqK7hNV{WmxjJC?WA0trG@HU&@T}0F5*Y> z5>0gIs=(4S(_+K6(scs}SSauf0wxOdA^$;X_->a)WsRqLie36C~6FtlYC0M|iL!#pUcOON5xX7Pp8j#_A+B9ve&C zwHOXync2%VC|oCp^>z!`fT_Z)T?H~QLn16|K);(RBC$k^5X}&(%Nn5N!cLbF*GY6i zJ{6L)b@yiM9^@2Q#ryKW-PfGW!XYA>~lGOC-Ah3GpPi8}46 z=%`Qwmyur#;&+MeaV5LRtGEwaA3hn ziXm&Hxb*{);ZZ>zMOIlsDg`6A_dz%x-%QTTOch4$H1lvqZ}GUy3|H=S{H@pmVl!z6 z=&};S4+E>%!UpG~(OCxr#AcM@ky$Oh^<=15dVpmWC~JX5EQ7_^9W>PVNF@5zfRUEa zw#?dVC*i~?;z5$r%-`3U<+vNy|F0J$(n z?`hZ0hq2U<#acR}?L7^D?6gcFrf`~CiAa6$qTLIfRs9g?`$LV2*P|!GBVO>~hCW^O zvy3mW_O_0<_s4p%v5B>g?;&e=!ujhl|9B(Bn4^=ngHIkUv%Ek@`)u$X!(-4(FW`m5 z6{KlI8j2w?WQ6Z5JpX*v*^W2N?>>z_;1-@`c_s;~IkD`Rx_LWAgj)@24cmWVifPA`WHVgWt25gstFeG2Qw+42HDp{%z(nS{Foxe zS99C|8h00*QSzf;MnlPu6t)?-9jO{EID^K4ZK1p1Bp6!FHxYH%OSnGkD2}fza`~k= z@IB+2ZfxXl!bF!<=c)3)_F6^cYo&o_@s8Folz1e+r|R&gO`DV{9cZ&VJ$FVZ-sfQw z)mTqAhT3XQj01_{a3xsdBj$PXUjHo58kfIfTvnYUV{hIeKTbrrqPaDD#omoeiib}0 z9&{~m`8BhQgfK$IkT|FPLfP|t#W=_KHU_!o6v2JOe5ZWCKbICI83(cs&N_6$bBD{X z++_S3wq2B)a0X}PwHScf7%WyYC>8rW%Cjzo z1AonF7oHaI%&>QPq{B)x8gLVDoK0A)_nCR?Y|Ue?VT73Tz%y@x&rTB$(m2gUup zAHjl(XVFW3B}+Ll{sT9zqwhTgNuxhj>UL)-QrDqVICDVLpEO?|as7m?sBJu7g#de}9J!_7<8vV=r%7kOYc$T_Myy2E4wftIEHx zt1O1BgBb?~yUH{D%AA3frko4Z4;JbNcQ*KkHV$1jcCfo}RaWmUBTQ|$Z&E(Uf8-dQ zNnu@NynGkoL@hdHW{4icTKqqy!7HFVFAdy-D(0jdCaPiR2~X1b!VuNe6!`Imqtcv8 z{tQi8~3jW6S*V z`8?Q8f&r-FlWvE}JxYs_&!C3)x>qMA5D@4q$=<#-x!hc%ps())j99!l+c86Mh?=zpAtt{GZ9l1>H| zT5yuuz79)-xmhg>-S!O-h}>mQx~1pbWpBF6HoMDSb(d{)m%ZpN+u|<6F~~HS^1B&3 zQsDzkc{o1Et@tD_*!&C@!Sf;44>;-(We%7|NGC9cBk(3;=_URE>26ljv; z*e1S$X4@mQS~@wN3w-@Kh#+mkCd&<5>}<)y%7i4LpLmHH4|~IIKzFmhLb-h1vy( zycKFH-02P~#jghvkR3Q^qo-$AkCv<6yt*-YVX|8fGpET2v7V1Kq^du z-(f-NnK$4rcs*2;)zK9r0#6`XZ{AciFYajJj6@D)u>>BYg=xWa!HQ@{AP?b+=)gbW z;g&XPMuxw5e&S8jEvvTA)6zpgSG{&?gSJzyN`=WH4%ag;h(g7BK>v3I_H;I56}!O= zE!oFd&{iasX4~IfWph^bn%5Wy?7erPZQS-Zsn){dpCE|)*!Ar$diy|lA_i~o?V3Sv2UcVK_>)>kXs_aUffXL30M!Kc_ZmHQV zH3rD^9hi)#s=dj+8H;{2`EyF~W@DYZ_(j*jwRd~wm>b>pS3R?#!P}_d|KeALZShzr z%gaC&f2mg%_IoBrVhLi(>7sSYn}BCv<773C)RYIKW&5j<@R;7(BkO>tt7YviN>zs|_;7|IwJY|+ZOaaO)p5!ZV^3_C_w+bi*N&~P z@v;qCi5eFZ+oc2>mS$lWi0MP z9`>FX*QUnS-wAsb=q;%&TiPO;%jJT@5v+6JfIGYR@aj=Y@nLej76H$J24{ppnk-ix z3F7p@vLmSB$56M+%RV;jAe@l?n1oYy_G2@(k>x@AG0hURe@x8f$ad;{D85#X$982) zc{awIy;*q1i;ldV3*b;TJA>8kg8fQ1 zsgsvA8}cWhnVn|JC@*USP4AbhUdP#+91KgvzF*i@(5Ogzl;XW!)u!S0UKK zerY#MT8TSG_`QYSH~3{$;tU9WzsJvmpH;NO?X=yn1z~;dU>%zGDx%1s#B!63>2mkj zFTmp4L~Ou7|7*tTRg0m|>gngOMT)Xv&aQF8-~kBv%;X_J(8MVPNf>mrC6DcR#ehxu z4os`G&sVVDjhVFSFznw7wM$S%mV00lz?P2x1& zK;)!_IPcPdto)`C^bjzw3!Pe^4Paqw6fKI2%EOFD!jvp5iey)v6x%(fsbn|sqq|j@2)nO@tENBg; zV)%&DVb@44yasA_GK2zjGLQr|L3B`ua3>SCg#79qPXk*tsul}7D?t%Vv(=3YR43H~ zXcibH^m~?({W;!eHY6qwU4@0XqE=yCj{4>;Ps$_fesn|a6*4i>z|5H7zBk=U#ho>g zjHrsZ(RSoz6Y=rzn8l$*C|#y0frU9tUSzjeze>~jYaG#M*Q&0>X_;`@Xe0ItARC3> zRbiK70_2I1-KrAzy+>>^Te7W6S3lY^Jo`^B%?=w@OL6@RhO49$oMu9MThv{+mWCdp zQs#s%rR0#x@hwnX7tRa61d|+CzAIhAThTm5L5$pJyA2m#L<{a6fsu;uXTV0V_BJ~+ zqc6Le4H)ZNxDcNWRUhqrG~Cz(B&k(34i-6h_}E-W=QCc8(G#0*&{om?Iour~)1G9wQ~e!oVgpfaDr~n<9DbJN z5yUfASjh;Cn!^&L;u5qiymYjmAlD7>C~n7vEX^=B6mEb8CgG?dbOkXvRL|;JsN|BR z0ql<|(YRo^jE@^??22GvNlEY!S;gBUE~tnoRL70w1EwDlv+)g<^I-h?7D|P2Hx)OP zaeA#9J_YHNc-5$Esb56B`qii>X%tEQa+8S)kzUq2n>b$&CHPE10_?Bj;?WtpfQVBI zM=K(5gB6=;P#TwYt4UiR0NPb{ZP#5)W>Q55yI+fD>;DT_RP%WF=&_Mk@0oM}p~{xg zHRgh_ZV$So8l)yXPO|+wbYs2HegN3;Rch;>Xa^B{J_dC+f{FnH zyQN_{i80hUiC~MwEnuT_O-!{Z=iEw@(tth8J&@vXjnks;zk*tquF;B9pQq9vj;cQ7 z>RJ5(RI}{zyhSAz=)kS?e)LKRg=C%G1nJtU8+^Lsy%aF~M$aXU;d( zzg&Z2D<43!gh)FARUf*_3_A(X+*{NGZ=j#ZCK4)1djq}g`Ojl}a(unJxEtt6KTuEN zzzDwzub!c^BVGLFy*moHj+eT@{rS;-6m=#jsRZ=be-1Co2T}r0rw8jbGPg#1pX_SC zCxMv;QzCT}($>uNGt(mL77A}YVuEm9^EsN-(AHP;jUf*^=Y@D8LY##s_AkWi=!x6r zW9f~S;&$5lQO*-J&b<-qMrqd%kA2L!H&RobKQUEnaYJ96*En6U;&!hT z&4e9&r^HZafI$Wntq%n7EDQwDWs180wc(7WgdONhsJOCJi&5fUr6W!jb}C9I)iA?V z%=%N$Tx;G!?!lu(Eggk!cxUr(I9vZ=iFzAF5Wl~+M9o1My8ja0ew>l3Ts|K($HHK#niU2eKUKaxNHNxS5PT>7=fFgw2e`SEYJTn8dH4M-n zF9P)ZC4gW(&MB6G7$B`wnE5HdsaqIN!T65`6NH3SmKDsd>ROu_ywmh>yb`tkj@<5b zIQ=8M6*1F2QX2_li@Duk6XUM=vvm+;I zCj3oR{s(*S17}rr-HRWX869A7CKeOgU_1tpQ2~efql}=A!T?qWNBJMc;WBfFxi~X- zynkRYf`g-}H#fBDt9{Qjw$*B0ZJV_ASDRq#&w%&<(Hdj&5|Y@Iq%=7Ml91FQG1PhA zwf6aY&$;L9bLY-57~yl~o^$rzYp=cbT5GSh_Mek}8=-2NyPJo_4|A|q{BjttjV(`f zV%g&#?|JXwjLD_yBa6oGUsN(~|Dw{G{fo*F=WjZ8F=lN$7rasV@RI2>Yb(e2=}-=Q=a1ev(Q5 zD6{>CnU=?}Gwq>2g(bdy@@{fakw@E*Y3A4T#qYu9$5v)v9sI%hdw*T>@GF%Mb>ZDT zuT+$@JeJ*?X?cOWv9qx}@uBR=UE5#&!WZB~!zJCHX?_7)4O@0&79rE}HYO8k+B5t0 zx>Y}Ukz5jdt9t;h->PS_t9~;5Thm|PRsW&Nue`@e@GL6_zl2)gc2*8Pjhh#ROZr~r z@BL4D5-#a`TdQdIzlH+{jH1AR>BI#u!4KU_ekh#-4=?R$C9{P6(DMeHKMOzfQTUX|E(sN*tU@q>w zl8sewf4%4Q-XC1@^`A}p1;CR#dTi36WtgHwXTcq9-p%glN!=Yi2+=tSceLdszI{&a z=&uZS^q1_8{t^v^$pClsl=8fAM_b-ycl6z*?2f)m?&v9UM}Miiqo*q${32SYyQI%x z^$xqFM{-@9t_joN0Lmp^_unmS-xz0o9JluHF z430dVmlHWS^2k+-?C-&b|GR_*GZW_P;CX7utl_|&CeueR1=%O7Zn=fk1rnS94tJ?Xq z_aF&Wy!j{SRt#K-oE^b8Zn7;$zaBk;*j35*CLtgJp&?DNcc|qBobd`&(udI*weNf% zyEIW|M>VqOrFt}qP#vdIM@TtnllCs>GDpyphj%R-QvoiEuCdmM-cXQr;`M;_v`Y26^$-N7k0? z$5}X_FV1<;V^GiUAWLUpK~1{s7D(19D*2t{ztp|inZZeA1JD)-6z^}M?tJOJLjymY zJn)kGNb7j)a@*g8{`>8X9R!uMeLseQD-_h8kjebCv1 z2i14>DOkEox8t*~{u8fqKD7Ep7~@K6Iy5l^I`!cNucszq2g+|v<|V%syw>-4887k8 zzDiNP60BQ7X5>zvH);Rz@snPGjvWH$|6kktWvfyh#>{TF!(RQ-3 z0cI!=Yr+o-s)&)JrjoYlU%&fKgg1d%>cjjyJ~a`GwJIkQ5%&!qY}z-uiSBgU9@~!A zU@6<_?E2GnZ!(28SA9ZI?hq(Plsp7V((36$<4^5V>31Aa^t_#i2*t{;yqewnA}=`K z|5ZXXHA5^F{)kvATn>-p!b#sgegU$B!pEr?C_MdZsVa~UZ_<>4SDbsW9p*@Qf?ZX&}TVX+IUEhYYhStEkdb{q;hhCxfd;+HzqKAoP z=paMUqC=&)6-_!c9=Ful#8WR4S`WW&@Ktv2^nJuiDw5G1P57xmMCd}jJ0{{6pdokP zn*O!HV@;`xcOKK5ag3S)mf~j6FExXH$7f&49;|DrnABYH&R)=;MO9G-I09lsWh@^H zL1+#g;ZU*Vs6JDZ=_}3jl_L&U`KcwqHCvTkTS^u>Jg_fh4`Eo?weZ4SQ$9NB>sf3B z`A^c)uS|L!eT=ijqbIPZ7`xI+ULigGYIgm}l2g#(-`=(GV}Oh8ZOh7eW!SIDq&NZK z2$p2#H)65*?_dF+wH^!yZTFSpwA<1fQ39KfV0iAD_957G-+>!%fC7HFQSZ-c2 z)I`hr#$jU$>fTjxL-yM=hAjN(q<6Ee0=r$)Fm9Aj`abr@^_OPWViVhia2a6kE%*h1 z{nEr_aQg`~J~eIEZ8VsC4TH(A#9)%au>xzS5xq(TQqFwn`n+B_x95`Vr-@3UxeG%tX_c# z=%iOtEfl@kUh$P1|KSr~RI?`}oh|Dq;@w&2`W z94Mn?VvC%wYtd_n0cHTIcF-AR_%dD`xFLX7m0dM;!MAsO4Ccfg8qLsV-&mJfHTC#~ z_#Vm7_8-FIeF+5z-yORD?d)U%Gx#e6VSa@=V9Y=C3;e=ehk^YqOsO?)r<0K{$li?O z#ipSuM76(N`7kZ!Zd_G`)%WAq9!mol{QN)Y!Ea-8)ec%BeoV~0;OJwTpFul5O=w<@ zNtp48BLmxihCKp5OMUy(t>YegGxf%&CtX{fD82U3mcMUm0uj^N@&CVZ`_vutDR&al zsHS5V0<=-;=c1Gb+w9X5P_X>kLzSOOp_QWW501Z{E921V6G~db|#xbw> zK;T38M$OPyNgX}>y&X;BT<-tGUgHGLp8jb0f&=&<*v_Cc^}a29R0w|@}q z$nny_=n;5pN1)iB0a%0*k8t4fEt(iYrF4$P{{W@vlqx=u?x=|k+ zwO3w4{j@*!6OM0JePL@Z3OE-R->yQ&dGxU{oOgHBtT*)$di704hyw3|oiM4kMmzO~ z;1Qbn`6+HNFS+g*8K2m6`n|^O_V0Ibzl%?;VJA|#HUYB0CA8Vb8fKJ5s1y{3cWMbDED|x&~cVu6_PT96H17 z!DIwFOV3|;UFzb8_N0E>IBNMj+5K0R(ZSApPh&*~%|BVs`fSJT*cFalMqdM;E@?bJ zH38p@9J#L8q|R)xfPqQTdifG0q8J& z4AJ-?RufM1T3EMde%m-WotOZ5lA46$v+*}QQEPy1d5YicOK-sD`_zoai}~#8Y1$wE z2Ot0PyILAm3reFlHYytF?8V2ROR?u}umm!vgGhZpGgXvN{}z(EIEldF@a26OoSaWJ zWzr{s>2p`o2UyQ&8_}ioDZ_R5-_iK7)bd^RFJgP_AKeQfKqcvqf+m>OXfDr8J@z2j z3nz-xUTGO4Cjaf{h=F@n>Ux@!=(gV`v&U7JPs;cb$mJF`9qXj@N2Bf`L|t5 z$7AWrXRbz>>!@7i;Fb7k-CU}d{a;4e%7-pQ0=^Bkt73QNLs(&qK``^%+(@EPKlZud zy9wIgWTBYXHMMFlW1@j54szdxjoW{uzh9%>`l!xh#v$9E$JwUnHVSAQxN?6<^NB~M zHqi=aoEd%ac8rV_Jffs42V34A($4%3BK#G=e~mVP-B(1C6lS*1XbC)lD(gVg=C_Y^ zfrj+<;tDOw_f3d*PbLNR(?15+fbFq=?sIhe&XNk+IIyPjp+Tx* zNqP4AUCYL2F32vQdgbXWU(H~z`p}MxNpLH)l^EyH#hCd!z8r2ZDm+HriN)VEf%wtE zU%iKuxc6cf1!mg2Wi%yI%Ev$-FWXJiIhY4gQx{<)?Ple6tppupOu^v*8`QhLyfZWP z_{E#Y^U=+ijQlmf!U@iAabTV5ZQOnayTuK%9X~(2kI(&WyOZ_+63zMi%yK>{@<#d| zWx4i11{j`PvRZqdI!W-#$C0pljW$ahTZ|!CKZ$({j!Y#cIY6ghK;TSUi>AJ-pzF0i z-@^S5&Al&Ot$p*ePTg=fR&}7fT`yw0SqgmcHhtFzr_W<=-USFutXqfga?lB@wK&`I zcbYy;2bNyXhnl{LqcA5OYHX=UPg-{T;>xdly>V4VYH||}yQEWDalmEz0DdX`0;&e* zNb~0xkMol?5AT@BW({A9opuDGv6*KJ(1j`~9v}W0hYk$35 z(Js@|S8EBRY9G-byEgnwv!c;r8H^fOJMeG+0J=~IkaIn5sI|1U>);Y-g+D;8<`*3? zSmQ&0+P}_%be(q+$@pCGdYmD7U>rRhTXl&JV|DfyB3-))udoemTng;^0fBE|9-!+q3M0O%t-2CTp?ykpJWR{8+CQS6u3NFMZCCTNt=f*Jp`q7|a-XMi z5fGq}a@Am*x$z)=z-)3KK!%NQSV60kUOIrS!;q?vA8qrLl|pd!s5ew1cZKb(Do zPHR6XzDHD2p^NMDEUq`scp&{Jl=ZhM>lE8b$t9)y`7l$iXAD$6jE`{hEPCaqC=z~j zjkb@*5*mWnX#KND1|g1YOkxKtv>bx;IQr#Xq+t8GzDrQU3KYV-Ra>!#AdBmYgiT5c@u$X>@) ztUr@k(2?QlXe0T%?3Q112AJ@PEEo*1Fh$sc1a7dB1VqK?Pc|jyROu915|hfA}52;1A2>)W;+flR$k>zajG~RU$gieYLbEkO>$wc4I z^qlT^lIhZX7y=~7d7$|qYC~8ROFLhq-K@=TXjQL+y$1&H8Ve(LHNV!1)S;T8Ro}$4 zG?pC>Za<@>K4NxDcKzW@iB2_~Q(yo_yx3T2bNdS3^}4JaffTJY2H@yJB7bMge_48Hh_qYCg>kc@AcYE>67$?;;ae}9aX!IfX z;!JB7QBr#n9S#PBxkHT8J}rBXI&=iJS?J*eB7DPbX;pSBFLus6)U4an{nqlq&eQ&a{I-F|h}ug^wMX%kd6u3?4+>7w9x$_Du|@d; z?0cRF`eBIwCHAd%mYbYOfZgP2i*mEg8FE7nJLht}hyV?RY0kM_^zre}sdk6cm zmgE=E@O$O~Q)FLOdi+ghVXQdf2*hAiqqUNCpa9qe!AFn@6QEO?5P13+xD@lsB&a%b zY4G6%bHQoCO06nwIhN~WG1H*G&hC9>U#os7G7dwoxUypgK5V}xQ=QfHfCt7Zh%Ov0 zERk=1TL23xl8K)5Duvjhelqg9Hj>c)Sbw`NpLFI2#;PC9CzV}|k-{9S=;7Gs8$k^g zWE!jJmG%f;8DrJN$E>kRWD`t;Zb>cO)mlDqt&+NdH2@}~aahgX^4ssw{?8wh!bA=_ z=X%De^AO2Db$)pYa~@S$g^pV|b^f^2Q5=njoAD{^Gj6iJvhwxYG*V0IHHH9j+SAlhR zK2SP<)KB`rk#aMSNNKZ*c!S6fD7HloOzf5}!6=9{rk&^6ffN5Z8quxJnbMjcOMYW0=>Rh>}}kLC%ujPvdYf+OquzE{Z%FD+U&9^ zJAb8?{n2kz)csQWE#LX8kK;G}k-`3H3PfZEO4q$|W9E^H@!-+DkS5wHKR{HfB4KGM z$41*Lb~ZB9k7sY3hR*va3m^Iv__q$-J5~GSufRghXUJ91E+ItW6Jn+DALGQKsHR;! z7iI~w2()>29Ep9&exlU20flkXdRb;2`qTue1I$Dl!q?E+6rF`h#Y1#8yvr9`$Xzg?x)FRn? zd(sncfmi(S_a1l)3v`-?#tmVx!V<>w@BjO|@BDN#q9B_~ch4Xb=#L)b($#nI`}C29h#4!<%&lK zqpvC1r5H)y8rm|Ic6n&Oz+oS>bnvkDI6)eC1RyZxXur=-pW&xBv;jP2o~1M`%@tN< z9-%a%KSTt9OK2Yvqk$1WWsP>juc^s6egsv5>*AP;(0%|iaCg)K#NZRu-LQnG0J)tz zN(b;jGH@Hoz-{H(yQ?TfhpEv8ODd96N%`-?F>wnH?P!ATe_#RmGPk}#9}|T4_?H|H zLV=@<5Sps90#1DbScQ*?r_XfK*(>{onvWd+OFQ0TZ)P6h zmS*|s4bjq_*E9d!G`Is?y)e6E%5}`t7hK0Yeg1XK(lZ9PzoyW~qmL@7si3g-Rj?%~ z8w`+DtF@URz`Awx=Qi9Rc8UIot7!#6xv;Lw;GF?bGbovJ;Dmc?5_o!JIxoL!;7J_w ze~+%j!qNw(lvY0cAOXU6yi)fM9w=XP{PD&$Q`7UcOZ2j-2oSo^cvuM_luOjAwJ|cS ztF@>Ac)U^j@p+;#smoFByT-#bYUgY8gnBAZonN|HSqm`-3m!dQrVZe@MZNFQ-^VWi zZ!*VC!~42DS{WpYluHwl{~w5vo2vwQv3!1g1%`G^SFEbob=QX~STm-l;22++kmQFf zVH*Y??7d`Jx*nfCT7skLfXe>{qp!n))-6+4Xs6!BW-LtKiO` zgE+EIXr{sKQ!z7%@tSrGlxwS@$!O6qc8%dNU9uX>hTx9;2>=aUBh25`+TVh`pk%se zk^$1!g!h>xWQk>Oq1_4P+JCVaR)bXMW0~R%6xI!z+bM2RzVmuS>cCpxMaQktKEIFj z%>eE(Zfd*mw2Pm#IeW31|NPXIJFn-VZ#n|Az=h+nx*5J&dl9f<;(_-b&H?~F05kYN z1&)Z(ep(G2)6?j9Co%|umbyke?-X7__nm=`SkQbrdFP4+*WAApW7`8aWtUcDZ>xeP zg|)ZrZK(e92Dagw1Xt`@d-7CCQyNi)8IS=$(IfK$gL3UFU&dNT6}354&LpY{IX{J* z+IP@V#)xsh_9~vTyLn95gIn+e)(Jk#&%aH2>7hO8+c0-<$&QP`L)lwPO1ql=8glU` zHA6#4n!IFiUln@g-?e|c46_0BX&$ZPG%k-h0@UDD#M?OmN5ygU2DnIpAP=G!&L=kg#6u~Fo$60P*5n`2-3$QqjKW2;}v+?}O zKiG-<3zn8Xa6jAz8g-YF^M%uYyR%DZT;7FgUW{ZX@MikZmT6h~G82}o9nrr2Uj&mz zgHktmE{`XhWx7%mHAJxa+)#)-wI;n*j+Tck- zXzJ!6h!?P|&>rPRR-xhAGk^`AAN*v6vgI%L2Z>N4| z=ew6d`=l<+R!#rbf^Q@yo@!F@QCb}DsGPd7v=cMC@QOslbP!mlw`0?X-nuWdvZ*@0 zd9WWkh5_t+mj>d*S~4nAcVKT$?clbmlEm!BbyK#?%HBRLdq+8@y)Ul(a(V`-AZSYg ztP0e+eF&Rd)#I0l_aKZdN!u$(0)-6{theT^ggQ4)+~t3XHe4?-i_rGGLs zgxKgCZFgt?bv@p#${xr14hTZJ?0M(_1ZRgn2W`9#F^&omzd{XkWDia-ho6AJ!m-U0 zA-^kUl<&H!BKx~vtUIXPvhKa1-7g?!cI?MLL!Y*sJhlzTvzb{=AWJo6nF7o2*vpi~ zC{0O|Dd`PL`YR;8_T+8|`_7pa+glX{2c?j4s_j1c-$PH)`>xyeVGoL?o%nCCL-|ux z$aJ7=DrLn#K?A+~414*0v;5Pisr)l~`D!j-<0#+tnO`9)G@e5RXUMH4woBi8`bGY$9S=|I^4{;p%#58*D;@LBw2sPF#F!1pLay@K$a`~;GB z{($KC)Ms!j@O_0y3Yh;4h6IR5k#L~wG5jr^g6E4L$6ba?W*VNsJ%j(e3I1(nj#qy| z4G$ z^~pEzXC~2lG7og74LCh=Q%ccAPD{;pz}M{$?oLYan>xM#?JXhJ^2koV%_8QF`J9n2U+=o84P zQ$i>7S4rkG4R0giK-p>hJ&y=|-5K0vxMZfG9OW5&tqJ}F6M7@SKUIpc~X;-|p31Gfex5I1AS=*GJPWqtU2C&NtPF2jW~ z4FkAm$o(edg$((b9}^`$i)2vZmw^(d8ZcpQJVWw)If>UvCM!KU90lxH_3 zT!jP-XVz%;+G|}^L(3IpdUA64+StV^S} zUG%nt-Y%xM6Fvkq?FNC(6ZG~V zy{(|Px6<3Pt`2&8gx;Q7Zs6F}fp+TSiPE*6n!1)+u^2hJo;K3P;j42IO6#MvYD#;~ zN*mX;k*iy7+Y0W~{$K9WI>UjW}3 zxE1)mqI^gfhS_*`psWUeV+^w%cNs2}X=uVdL;jEn`BsK}BSF5X70DQw3GzbR8hGwJ zGyve4>ux1T4U6&jK-n_<-AwSgP^Mump4%Aommybz6e}6@kN%zIEYolovOKjCf9}>r z;>j*NSoX>4r|6k0)%oEb6Vw-3d3_$BvXcjpOSewCjRK~1l4(fc-GQ=x{N0b$2pIBl zm*GO0hDUHO+HXQG740X;7d?h#-7t9ww}P^kVe%QgJ5csn`pb|X#a)IAWg4EqJwyJ= zkBsJ5FytTq5YLYz^~q=P$7Yz&qe0B3F%WKgYqrUCZq zXY?ZDyS_mQ&r(8$5;hn`O1fU7l!KHKr&Sr3lVS zN@L708oWVihbe6>r7fm3@xQF=Fr}TOw1rg1fwC!IYE>Rj+@?HFH^&+;p(V@boHu<;d&F-_i??A>w+~^%4N8kaIMDGhwDLHkK+0wu7AR{AJ;c=eIM5;T;~CoX}Icf z-Gr+Z*JfPz;d&a^Zd|Y7dJET2aJ`GGVqKM@;+l=?YFszrT8XO{*L}D?jqA^F{VlF< z;W~lqG_HxCs8T+Rs~XpQT+48+#npvt2d>ZJ`U_mo;d%+zo4AhRI)#h=)q^(1zb4GR z4B*;>>jcZ); zIOyM!M6|zOU8J@qqJ4>Ydo-DhC)6$T<~Gcor!I>3ZA-*9b*0qmMVG4^x2c?YO(YRj z=QTFgsdLoYnwr|V6BosM`eNOvWJR=3RqOC}UM+!dYg@8v`J%R4Z(iQ4<4MmeZ@z6g zKT`V5w~8d(o7t33!l}KlkMNtBoS78ASMkmCzC>hGPei46>0Y!Bzv7jm#CqGi(;ZPI z)+rKVogzJ&NW>G!7wzqcQT}LmlIa-j=0`=)NKqomWHgZi9Auh@d>@}#+i~s88vW15 zf#b@XTXcLsKC>>VB3+$X-+`_{+Tt5m8fj=e(7#sI5$ZtaQT+?kz4!FSxAv;kbJRQ6 zQyobvjLG6$92=BHct^HQuR4`}-2$BeV}`J@F2uBeo@mZb7^5 zi^f4)ohMPx!s{=)|1M=^Jg)Yn+q=}hbh2w>r2QV0yDgm}SUu66cw!r#*TfU|s2kIr zoza9E-x5uL23zr3+3N9L?TE*EHxZjppH6vnSjj#J3Hn6siL@u;Dp6jIBsLMg5m2Ae z6}Uutw^2&EC)%4zS|#imZ%S{vR=v5qJGv>-t+utwQNo5p7S!6ERAK93xwAq$jF+5yTF+H=0aARHuVF$y6j2n-5GCBq1SrTJsYDWJRk*>+kH_m1rn#nI%kUqa4~97 zp%%aiXzQ8;1X3@?%*p+1F$#60ADw^m82CSGaWgVbyjWE)N zY@|pgh)*C`Y0xy;7j2Jq#?W)AxGDtcQgu0~lTJoE=3R-Yo_PXrOpP=pch;(?QxEAOao6nre|fKR0h{EY)QSm0d)X6{$p|cN01X zIx2!{6KeI$j=7hskxsf7vgyvlJ!ob@Z$Ruf%_c4Yv<_xFw3pt`ojX@2#kC@jpU(-aB+LAC(?bn-sj*0cRs;Q%o9kz8Cn7`Q8ju=-Pj#(zlX+E zUG2qs`_d_ga5Uexgn*kewTk+^C)Nw8>wxejprp7RqC2ZE7yK|=?TxG40<+IicW!$P zT=k~*Y$UL{4x_vR=4{nL5}i4nuuyMuTW>1TFRDjfHa@w_pw4x`3Zl>rwF~5hm>{ci zQv|w1?+cxGO@NdR8HOl=N!5tnWGWmnNUF5Nl6~FK%N^>h8)m5xpjp?>nyq30*%FJV zlcLw5IZ zv~4^=3Y9bo2?ybB$^hDD*k06D7Rem&l)uMpi>Z!GLg`FG+FW%=jG;bI{*GvSI+2WR ziRz;X(=*0q9EL)|yn3;2&Ou+%^W_$fYz&!N2CzhFC@j5OfOaBA`p~4obdi$V{oplW zNaZG=?X#(~Q4BU7{#c`QS?BX z1Vrc`8lQS1+nDP*V^Vz7$=D4W&tv!uT}A$Z9V)hiC|d4 zFD&F
  1. >Q?%W6&A<1bsB^1kgzSgYtzuc^(a2daSxbMc*g{uSC23*TO)rG4YSD)?o zF6=X?R?Hy>jepAXeq;68W0lORaC)Jn&4m~;^38W^GuicjG zE|g3nR~vBaNB#t0x8s-H3k7DbayJa!D{ylau9>*5#5D)kLKwu?!!W)K_jlvEAJ+{q zp09+_JBN&4{IgoE!j7h`?nZ5Wz%Z@T;4;|Isw3}0N8WCLkz11(Tt*;6gcl~u~E_;37chgE+Uyv8_a5yc&~GmfxF6fjf3g6Kk&>P0#QRRr$15!?y}MBl)i#&CSVftwlI&C~q*qD!6Tm77+H@n&98isVl{iO5%cyPC zPU0-e*8z$c>C{$xSua{_M0r8mrJ&9VTy4rqWu4NhG~@0jOhnwqREtRFvvZ=jchfE` zeGCriWErFWiJ`B09egRc*iId~C%U$whe^T`c0anJWLoG4(WxP2sfBn`Q6 z+_{rFq-y*U<=b#=K|RF7)H7G0o<3XziST!(6Bh2?fMtswAfBYYCJiEZTLrI08N)98 zQjg9>PU_n(K(^y*a74E&h1$F&+TKPk5Zzx2>_|gInEz7@SHKc9i{d@$ifwv3!_mc% z?P{H#ZOTTb0#W8lTtrXOmqKm{A9_Qy>%m*1RTR=?ZyDX^>jkSelHsi=?_XO_B*k=S z!wuC<|2nxBh2FC$L$#7N?+2!IFKClOTVlYr4XqQrLwX{LHwJeJnB(wczv!*~neOSI z*E?WlKzh2jdMk~#J@5sCPCgrnFE;7s0y>Y2I|Ck=|y<#2k zT*#A+ve~1+PeC`f!~5H0hO|_2g4<#3ke|9?W^xt^&rG%@qA7|HDGKbwHW==RRKV10 zgPn|6juCr_fa=sg)N9n^Ru74Bp%dJYVD0BjC;Uj)+^qNZCWfFw2CV$5hkj52OYj$m z;1nY)N1la15a9&!J1C+c{GVR6o2`Gpyoo4+R4`{jDg;DSM1VTx#CyBRmDde$Kqb0> z7D}v_{*t^>t4aP4&orwi0wOdfOx+0iCL+pVc{#|Q(@wX2V5h4Ww?`5QSlSFcktT&I zs_cruET{ITErPHQ7VU>O-@Q$tm~u3dWSv948N<;vGW(^%#wUL-w}xve>c*i6vZ7~$ zYv8}&4je!uA?d9IIDzaG3Nq#6%H+Kq|+ttQ_&gY?3reFqnZE%48I@ zPsGZcK!r0C0qge8L9{EHh_$Pb;RuHp1YR6tGT|^{%ycFo46nYhb-d8YOK)9qt2%G) zyc*(36Ql@bz%^!7LB6&PG;0ggH<$Rl8oaiJ#EmSPSZ@-+-dKAKqhvB8Jw%8<{~a3Li^@xwHgr~ND~ZR zl>@Wn&B9?#c11ckh5{EpVyOg*39z~Vd{IEybsHYPNooCK_yN~hI^ChiJ;ne}o&Ud3 z9@ok1<>7eM^DOXr0{HX|0}kQG@t0o2MIi}Li>WRQ2;feR@<9W^`Pa3c&bLHkifO4P zC)uQh1HpaWG2OxDJ}~m3983;UYVP756;nMMBM4VHfH0qV=3W#}cX#mE5CdO;U!fR@ zwJ@x40wPox;k~C7lI5<5omJ?=B;>4NpT}c*Sg9vy;x<_pu=2bwgdU^ zShm8f!XPaICzwKtZi>Q!zBM3yBO>Rba}dT!Vo~@6V#VAR3qKid!EH}pEurzwnUf3KxD5+u`)#stQBiktWcyBs_>D(AJ zGgLMy+DISd5&aJZv#Gmn38sw~)4Ua6i21ABa>?9+JjCXf&H<$$q!H!GLx@7#jV+7G zq$S1!gKdeniJAyhh5bTkreELjpnq4#&eBW9_9HVM+u%c}4?pHbvvm&X`8l z0Xd-1v;Z&?fLu^Gev0nF)CggOH4M4EwSk6y>N3XG*>9aR*G~q3UNIx2ZqWN+Q5>Eg zHMB3*AMI{yM@G05rba{iv3McY+m`Nw?6-ACI|&7QS;9xBmyI$;Z$XGm1*#fT?uwn> z79DI|1Ad175PFC7o=JbIjq4LZcy70?9EunvH^h1wbZ=^wK3BFeNFemB_8XT zWm!e0Oy?Sf$ZPsETwhm&{FvT31OPf5#!0Uj=*R{K6Cu%fZB7o`Z8-*FVM@5LhXT`v z>xRrlp*+dr2P4H{`$8O2vEDSfHOfY~LNvF(p(6&lM&EIS-&HWD*O6afI!kaoP-GWu zHdSLb4`dd(h)_losV+y^tvrLvLp!zD4nS`jk%T~C$bg>cjL-xyW|Z1vP2rgbOeEf6-f&-c<2BZ29)oJv(-RaYMU^E;DjZymc^*cRA@=8XK>~Zp}m5TL*iAx?Z^G%!MWv z)HE9$RGHr|Csi@0i!1=!fXdV0wzVy)kR>$=%d9;mJd9zw{PcG44eVyJxr}r+n0DA=L^hLNfz3W=YYdi#uj z3x!{=Gq_Z*#w#(KPuh;Rk1aN@zQ!={P6^6Pf9=m`&a4pG`bW4L2fH|-=gnXh%4 zs_-ieHK%q#_OL*T;-tcWfSZVwOr}1^2xR6J+1N5g>%Ggo_Q;0wWi>TO$1^Kye{1ltkPseK{>JAp8ta3a#*s!K1;d zG@=Q0B#Ds)RSag())>kRL)4a&;N`$TaWf-#xnb$rn9CZCP(Ixo1HpSpFL97puiOGl z7&%PytMJCOso|^Xt_fhd%jzQ-^1IXYnrWOd6b94}nZ?~OT$vb1u}K^2L5c%9@^CBj zWCTtemg78;Zn6eohehrYAwXhJEXJWVjc}r&$dDcDT=6J;OfCg`oD`cLXCO|1QI4^Q z#x^_%x_Mz~j;a%63xmM^IldjV>v?$SF-04^L%Y9ee58zk{wy-GDX(GVapUcR>d$df zRN><$rOFa>!TCo|>MH@`@N=U!PhX!OGRX$9C8wU+hj@=kE>S1h#8#+8{A2lQ*4#ih{1nnt(4)i} z2CD2qdPuimJ)s1knLHq}#=v}nvH`>?DnQVl770@DAM1^6$YDQ0PhZLy=XexDURDs6 zw(f}}?t$o-jy-0)ykZ+Lt1wYWgF#?;(*G0*jfsG0L{z13}=q7QiLl&Pzn~iCn$emfVXV3f3XSda+=Yg@x1- zjR0(6n2?i>JbKWC0x0~R+F%ADtN{g0?L<5cGkrX=aptS_Q9Gi;1^&_0n^=NvOgL&yt9&s2u4 zcrrz)Wb%oSi$DXKn^z~ZaVxq`X~tdx%pdZ)Zhh8|yOsS+3148nswj8jqLWhSoQJn@ z(MDl9%7jj6ptBU{)B`$ugiZ;eGd)h=qQflc*a_PDOPh3QOYJmVGjPquMO(NR;#!RB zR$R1?`7T@?xahQi`*D2+7aa@mG_L1xy^M=?#-6}+1{ZDNq^+8?C6;!%(zaFFhuVjW zw%yW>SlZ)Cn^tKTD(%tzCNAS&)6pj7jlXG9SZMGv4by|tD5_7t@XN`Cqu)CHm)tmI zqn<#<90ffS5HGpkI1Vzw|z>zo%b%PrvjYT+i_7w;u`oiv;}E^&^FTkxe{{_x1Yw zdObgZG3>K>i>>=w$Ne1?2{QB5+0quJH)2hrm^z-fcm>Y^8_%__XM*F*L*?~1Cj5De zZ=_`v=5uY%vz~4iv+Cn=*87-=7-*^AQ^SmVYKU>q4M7`?X9Ef2*+3#~gK69oOyizl z8utcF;a=?}7aRw<%c7T-abAl_;>3TMA;zQU-6FB9+JwAK|&@UnVbJS{B8X}x8 zrhuxkf%=-7YZ|YvGm5j)$@iz47feQyu#KxtHG-P?A9bQlhY=4*_A6yo{TskphKqkl z^h4>PK=f%F`tZmf5`9^=X08rIzkY<#Hw42zERau-84yT;usoS=*m7`S=xgf35@NKWHNK%{b8&T^K&;hgMhH@|f@ zn_o$_nsZjq^J{dm1<|9?b*gWp>r}5svq;4;E~i5JdH|%P>%FjoqjATVg4UVexuf?rUPs zTwx4}n}pqB;%1|+`7Rv3di(Ahfrdy}Kqk^&4e@$cq{iv3-s;(EeSop^Tkp2f;WwHH zG|i>FUe^dQ)QD6r%LI8U*ZU&Z4u)Ns(;*`>++Q(qf^OluM{07ytf5 z@WP7Q;gyhEb3P13%^vNVQ!}@AUj5ZI^X8LR!tL{*ieA4I2A=+m7cD$9x+z~Xw`Ts; z4Od@%O)b$UPa#*AT#+ZIN8?;H^sd8=8E98iH?O9)v7y1Fol3oL{L3B2$ovv`1xA|K zQu8;bIg7V=agv;Lan_K+Wz_7HEm5hLXqk0@va*uJWpca5Em)kb0J-9F9%AKLty`*W z)p|53NT}?UJ7vnddQXP5iO=SMxdD2VaJ`%=OlDs50vaCr>${S?XK2Sp5PUV_il!j zkSDWpnd&_`*+u#*^9&)bjx9i*2whJs3P!(3@>Fb3IIldx;gyvqc)_9N32w57JP9wG z*(|5KMIGVf35K~n@SIPc;Q5Oh!`OY0L%j(uj&N7Y;B$3{QLQ&)_!@oo%4Mqe&rUCmw#*IT%+(fX;1F+g&yL{re}b>TEW|pjJBCR_lni5i>gH zXNqm8c!U@WjH|jDjls#@z4m*1SF@>buEteejV@MP75jH`IzN0|Wm_8^P}t_-{@LdQ z-2#enfP)vtl!pn&NN^QNB=6PJJOrMGEfJ9MPzGk2#U8oUkqo#{p&)|})IA;|#$x;% zuJ3Fj<65YZhlWDhb?n@D8woZNa)~??DujN*2$yC-5TZ`a zPe0)hxEYX(k##4MJZR*XHVpm?Wg8blKVk8OpMI2xuumcj&9y zw#G^|7FlgGVtt;e{UTNTt=3IHE2jY@VFJMkt#&2GvnJQuO-6gFcU0FuH-=0PeHNWF zpQfE{O2Y&8Hqv>j(F!O{v5iNqrkQXBsxr47@NfAakVLAD44%NS@6$w@5b=X%g9S!JtMawn)mn_-4$9;#wW*ssuYO)b zBVyY4S9mR$XP2(Us>Zsrh-G47Bw9&swoPv8HL~U52Fl^VR!*0i_{wa%JZWvlpQt9c z2aR=1hT@HbOF<#lln5(eOSmsn=OL10VtU9%bOnpIJU{ks@Qi@)2D_zw^ zzdF^_xn7BRiHkAZ=oGW%PR*6S<+eouIW4!PI9qP?-v|=dsNz1zm_^|Ht*}k~=d{9> z;%tR%|An(TjDB$UU%h?JpHnzsLm1^g=s(&1GgxG+B#YSAN#s;vOOap^$T;Mjf=u{l zUta;MpeslGEt^YrWxGwr4F+|MydH*5&0LxQr4iiz&uyY0W&!;P73BhYm8&#Ca_7Ua z?;4HBb~2>YY=9jRPe@)1L~|g~@aCyhi#~~KYZVV<)xi|yd|m|QgkXAdHaj^*#aJ5{ zj+$J|PE2n&d1)DHfHJ$c+O#rktc035bY*e~zmTJ49gZe)GbaO(q9w=Paw;x_md=&S zq5-*Z^3pQYU=c`5j)>Wtgaw6Cd|985mi4L>EqSSAPQ|%22-FuKopTvAzo2lXgTHlJ z3Y}`xr|r>L?gGj1>QpR06R3J}tZ)XYE(@u=Yu3Lt8b^@r%R~|}IWh$==QF$oV zmZ`ixZ{?ojD^76g>7$;snb!p}gu%K_16;5IFrR0RqwOZDK(J?_yHpBc*G zGshzUJDwpc_~+qNgl9wVHZueIG}%b^Z!zb}ZLoM*r1pmA{JiburOEla7)Wz^V0-IS zkM`nak=h$x*z&fQ7q9xXm(v5=Tkq9gyev|CL-Dg%_wL=`VhQmWW9d<9@>t^PQEKu? zGIjyGT)nwk-vpaaiuGiFA*M{ZI*Z>GLxgD;sH_ZgUccToGvsYAODBe{fEIfSv4CC_ z#YLcGM<&i2)N0?c$%GKxYPTGV!bNMf?D$00@&Hql$EGqf`1Q5K5GCNa_?xRQTC0o4 z;bK#J-ZqQm;C`-kOSItmV###zxVuO#K8HBFNG)~`P&%&{qmSv#7ct}n&QDNQKmBE- z=VNLk-Jh#DSFRX~mqlqWiHB^1S(Mn5^&XY^U>hPy-X$4UpT=fjL9Lc>q68dQSA!Nsa-*mM*>Q^V`f@h`3u?8*I3+6bYITvEDXO4&9InfJ zUIy3G-&g!yv^KlPD(aju$=yY3vwO7CIldt6Z3Y7Eap58yAA|3ocSj|HcsP>77LOB! ziV=_tte%7z=ikZJE^DSS`vo_iv&q*kt7HKd8d9e12o2|HyUr0#ei-x9uKM;9+f12= zQ{jchUo;)$JvYnQT!nk1IL5^`?aHxYcC%~|a$+ROk)N{K*C=?*KXVrQ^fSMZo0FrLVCBj!DocV;@)0;KH;gGxHzS~Nb#!XHqbpr}VC8a>piY$~K`0>&B*8Fd zCOt_|FGT`9my-nb`A9&j!mcM0@nn)j!6_Y~SR;}rioxBp(RV=MEOQJ;!Z9_(NsubB z674?Qx~mAy2l4Cs`fUr*P?L#Ben^fY7Nl+V3J4PYGnTa2=+&{Lqd$jS;iudB3`Biq z%BUiX`%!}M$*CD63Z=&U>m_KaWVNCABe2>!*=j?HYhbnY-qnK6Vi}WNPC%F3gJMRk z-)%fSn*A@9t{7`#riT5sl_*$nagy0TW$4`AEHOjWd_9Ex;1CQFX&L zb8)c8HS=p&BMe(51meY7p%`d|VjUT@9NPg4rdBA{l0l1&0K)*4L`!Eq`#6J-4Mgx+ z?i`IDp7HwfMXUrr^qyARmfn#16HTO%l>dM)k~v~ZmaC|-Bq40zKSp;`^T5PE&MB&t*W zNQBh9Btn`8iR|mj-8AAQfMx?+Jw8ThRPRe8q~@g&(!6M7Us>%Y60hw$3q)cKV%Hz> z)UZ_tD=)oUb5`yP_C^L9^*lUdkF!{)JQ~Py@IK!V0%Y~*f3c7i1EGzN@#*eJ?t)i7=5th;LmVu6ooxr9 zEN@WB@RpCa(8=)z*QgeXYj|@gFRl`-LAcfzjH|5gD|*jILzo%-RfNb^C}m~2fNJqo z5oU&9Z0ic9tt=l9GQK*(%n*$2$a4a%5zs$X;mx*YhG1-K3#P3sClE5eoM2`M#&+a6 zfspa#1T#Z0wj<98JRux3wau&&jP1yCf|w!o(O_nVU~EU86U5wR0Jg;)9o%+9f01@Y z1Y0)nBppVgh|CN(R?Fn`tDIGtbltK#$5J@~b>~da2y{IxdD05Lf;%5`RN?nmy7w9|)~ zw?+~j)Sts*i{&~?0E`)cvcAT3vv2Bhe00D<(7|ftkZ5badwiG6APo8 z!&4r4$}y(0gbO8(K7^}NeF#^lo-2gQnY;JlxKOIZhj8_NgsVSi2$wVCZxRmDs!wOy z$3pr5WSJXIJAVu;#9$zovRQF|RJZhZXN z4E+1GJrqOB)Lx&zcIFCOoDE-iZcpWO2X~%ie{kM_by6Y^*JKd{i)xB6pad?>sikjN zx7%i8^41%Q2LkH_14z~zs`mryMb~@Qi+-o|Kc>Bs?v2scsqsX`E+e%dO+ctY#@hJO6Kub)<&BViNOuy1?YOsNCmG+b1K1ka*9y zx)-;iChL;UQn(T5X2iqWjd`*e1kTuLiTSyYh(Y`bCz6;`DMtq`vQ_{c_>8? z*m62G)Yea~&H}=S_0hTQwjSh{;ai>`kX*~%B5I)Sp#cJ0PUn3Fv>a}~yX9WXvkC{~ z)pA1<*z^Ea`$SUF#L6z$amf_O4sV?p2)hU;9b3HKQhPk+J0214^B6sOhCtLTV@UbN zm<3-3P4se&YJsSRVmGEiUaCq*6$?aFmH{Z%UA&2g0+E$fVCFPJzIk3VgG_X}KxAc^ zz??scB%3dB}cW0>PYK8;~!kkS|hVk^rBMIJc{#8#FQiac}_ zh^;Iqm_tK8PB1f!1x_gP;2}d>9zAS+MywZKQb|VnGkQ*+JABkFFcc_a3izUh!*{6h z^c@QFa{PiGYza%(Ez59#s=F-#b@P`zaIFWl(@tfsJR)FKQQ1>!2JD2hB@6o{>?rZC5Ye44_{Af+h^#8#FMiacTzh^;Iq z6nV%f5L;PJFo%SEoM2`c3!G5oK|_YNhJ#@rH}EwRrv?t=zzMHM(#_;A5eGWCWUC4l zDKk~7o3(zP85_USb<6S^ph~!|oJ+cHSsenX5*{h%%2T&Tyd%De$!;5pN0Jdd7l`LD zA{sCJ^Vo<;A`#ivh6VdpJc>?AFjw2tF_FC19`!jF@9<~Z zJ&HTNW@;6$_Q>k^RH>QOXoKyWtd!BCyc<&tMwbr*Q!egRlN(dY3QWzVaE3Czk6*hx zSylqjk9B^XOka%5)5&$JS0@vZq-aMma~JLSAR3S2Bht&#sCss@JgVWlnT5*EkkY8) zpxoh5m5Y1zpPM5oYZ#7{Rg2(A`jTZ{wNsy;BkR36l8zbi;3>B_d$J@SLgZ0=WLQ!f zS5Kal$F&$dDUGWqQ_ABSo+;h(BaJJ4PuiuHnOG?hmmXzqlmiI}k@(+gdPLMa(yCRhp%5DpzhwA~49P;o@>5H)S1;bbH!v@|cDnbj}?;R4}HVcAGp+N6>Do3!^cS*-v9qa$W(V zL@xpQKx2ZWUTVUY?mB)c-4LXi!{0>wdA|I}Imq7{k>ii52FjkK`HVoFR`Fny6k zq$i5a+evRRr^z!Pm8B>9D=f-X5CiZUCs{<9&-_p|G6W!7IKT25rV!}*DlN$cQ6gKx z)Rkpfs>WAwnHhqqTPV*`$AqA+zw(k}+|lHP;footEl_!J?}eakz3;#vP1^!Ffxh7@ ziLCLZ;Jk~?q;R#qBpg=J^4dIET$$T^G#CRTHu0A+k*y$=Kt*MTT+Zvqv}T52bPHr# zszFwRao!+wS;YmTTPWXB2Zv$?Uwq|Qmzipmn4vi6jv6x*2VGfaU}w^K4g$W&P3$oI z<$Qvv0Lig(OVU8s{Yn3?>Ov?e5T1i>2!>`p^igg`y1(=ZZY~g2SfIje80QT_S3-jcI0aKT95eXhD>e2Kx&^8*DjJR% zii7T`F+*|Cl~rP%{^V%QPX;)gm@F1Kd?qljbnN>P_O$I&9qcN4WWgtA%{@e-Q1!gI zHT)0Dxy{3_QC!Se+x8ZD)iKXqX0-fVZyK_E3G97H$hn*p-4!aG znt-DvzVZab(eSwpm@8fMwQZaH7K4DfRY((Xv;|Nep=^4;(2OLT@+evu zs-Zf+IH=YYNYzl?UmR5B7{E|p_U|!5e|3^oSl|K*{rj+9Cs4%Gsmt}`m^BKSt1FDO zl**$Mmx+`wlWp)@bo9a(lSq)>!%e^u5rX385Qbjq$B9@l4 zs#RwHyrkmPn1P?;kRVR-Ae7xY%%PMhB0(rS40%d1csSCb2qi1SL@4jQQ_NGGnwL;@ zsu!W`hMb#HC?i8DJCIPMs#C*~N>+yusl4|<8lVnAA`e$(XMLyzRzL;nP?n{$R56K}t~`C_ z8AhPR#I%K0Y;u6j4rdfe6Wcn02+O^1J7Lis>#kS(bWExRtJty_gH*&EU|i$ZMz199 zQs^NApy8U>$CHTH(3V4KU}l2%g0ayDhHYG9C4pFNMzVL#S?EVYPE6^-!j8*@z0@c07JuK*63WvV`T7(GTG}M^-0V&IYU1Z0Z}T!)thaUktJB zMH}PiH8jx3K92|adGoKP5&xP-bC~y|d+uQfHaQUMB~_uH^VJK zVI+_+FN|;vu{o(>!bs?+ya?FHYMF?hl%SBa4P84WY_D^JVccCIqG5iP2^hx;a-nBT z4m0qz2gID2&9mSvzOtLj&dm6bK`t8hc)K(6Rx5L^WsQsi5Pk}gT^ZAQ%*bw?imuKj z8)VnsWp2?e%z_(64sR<-5yFa77|{uZK6) z5yvOz43CUkn)Arxlkiw=R79n+i@zwVR4a1#5!FBs+1$L5X@%^%EVM%3L>SN)xtn=L zpcTyOx$D+@|Mkz(?GO(cN3h%nZTU zjyxw2GQON(W(dYsk`uh`2Q2rGCR!8mj&ysjVMkw|7NiXHU|46QjUaiBd&7xaP(6Q@ z#IZqzKXBb+l(S8Y!6x_kG-MB6n=>wSW|H`dwcUK@%4}{*8bw^&sL9#TnWTU^(IZZm zA#a`b{nqw6bEi{!IFT^2`94G&>F)*sg*vss4!}2qyt;tqHwx|phm#ee52P#g>ICmf zhu;aZ>K&a>UvMYj>?seP%=h&xIZ1FhiD7zyCIzMX-m4qDYaMPk$bYGo#nDF=aQ1*9 z{<+GCzS8Q|4YK5*Sd1f@kXJR>&VB$k20qptZa>ZV7Tg7n!)DBm&({UUB(r>-bPk1F zJMCv4*xTu$0w<~U?iqKitm8M{0FrG3dmhAYG4xP7K|e ztLy1YxL%zvt9QMm-dpbmOTBEJUPA9(XRy%A*6G#l-gV~dc8l3$>lB|6v_<9fj-&RI zSOUfuPdy|5Y0jYW#h2B7Gfix(<419XDWFm>cJm(AhRtsBdd=6B@MAVlttPMLz4V&5 znh(}%^0j(tHt$-4HJf~`Ub@Y@)?nQxU#l0pdDj|_-Jsya2?w_Q?S1jBIVN?1Gt+`` z5uq>_Han)S(SJH?nzTRYOHJ{85#dyg-9+V1g8?CL7!5ITMkNSfn>u99|A)Ra*p+n{JCc z3SO?RnOigOn)-&i+Q!-jW?Yx=N{kembNx_b&MXpU;TbgmGsk#29GZpa%K*$As#P8{ ziwzxo813wixCRQj7;zO+ZU}E9W zsW8NXDhfd?k-NCWf_ysGFD9a$iO4AEGjH(~IwhJikB)H!X+-KhhUi;UbqFIEjA^Fo z>cN9r-siT15QeVwC}SIC2|Ft*be&sOTIh((4A`A7KO#CN?jl#HtU^TNypl~qU}3m< zuWMmLWBMVSQ%u*^dVR4@M{D_j?uAx0_n=C1I#wT0U={&}(c6GyEoJr2%CxmIxp1}Q zOM(bQehWVv89Yd55!Rh}rIjex;naa{Fg7mArL%tp$$JyF^|JR6MQNDje`YTmW9zUD z&zRX?PUnsXHw;=v#g38p1JTt@C%so(j2j@jjup{4++lUL2UGbK92N0pwjlpU6~dlh zf;p$30CNVLlt{_1C}h#dEq6r{UtdaF^?OPFum!l72Hyt)oT7tNbH^VXV`S5-ZZ3L1 z3otgn>H;hy#CDg!t?nR?4(DH1h;?7U4Nwd%?*kz&rX%u!5Pu-V_!f?-#2|I`4k4Bi zWV^fSmOBPnz-X-dscwMhsvu)n$ldpph^Kpt^u-R{p!V^3xU#nBmZ<&XN29ybFDwe7 z>=h2e`jLT$l&~m-(zY@v)T{m|7;NH*4-=m>qvuFp+g9_kCnu^Nmt(6u zt7%L5q@w-eV*qAc!2sl5INyp@pEw6pPq0miQv&&(9%25GZH{OSB+Vl>u`w1&dNsIz zV{sa65=^g%+s`_|qn~d~BqH02(Af-UqtgAu5QNO5zFc-i?eP7E+7b5~WG#i_I1VA( zGa?#Fw#BBr$m*lo#l`U-bU3oZd7-1#wj9^c@)>hREYbC*0pr2v#nQn=VGjzQsD3Kg z$WWM7D9t`5{}ifkYZn(o*A|7QB8pY0u9YTP9?hC({I6YH6uVHKKm|)$u3;=c*o?N? z4IFO^HVj=%AWsBSk~}rBhdwH%T^N!*yoW49<>Yl$jSNN7Ng-%!5;sUq<)QQF>Zm~e zESioAK|)`(<+h`17vJGtoDK#E8EXh zCi4(3Z1^Z2eTy^}h9T}*8xOtX_d+0wtNTNfV{GtR2<26f{*P@M{?w`Y0S#-K%e6ey zd5$hh;Gf6zRjBDw|9W{KmaI0^6lq|!b*f~wvf~5|DFGj1<}5PR;v6r**@5%obmEtP zTPcTBozxeywQ|1&)XRBfYnJU?adu&F&2rt#XA6dCb5IA1vkE=iOp-*Nm3_R94PUGy zy_>qDfSogg?IGIsbu*$+5u`h~dYuboYnSB%fW;Y?fsN;ENqhm>)Vq2a@3x1Mb*b9x zA$#7n^QfB34_(xe!&)NaFB&4Ufc0$VnmO?XD_^l=S8x%tlKA6Z0F0IE*mU834~Da7 zOgQ*tb1`Rcbd#enjXMGx8!3p9Bt?~Z&YuvR#ZCu)AwdSt=cWR`4kUt=%SHo!DNBM- z@)1Y^UZZTX0ubRf&_SHQ`8-Kbr^=8(&*dZmc410#K`0>&BmwV)wv&KYkV=q%*Nx`L z0w_~2MFKsSlLXjX=}iJs74~tXCmv6AB~#J9VQY(M$EIkFDfeD0hA788-yAj)n=6it zFS4YJlAaqC%~V6>xb;d;q~E^L&?h4XQ)4@rkt^rd4gD$)O@>_&MudSr2WZ?2O5ugA z&xG!@6%fR772@4MImkF3UFw+kVR#mEWi>V&34r-e8nG>6rf)^Nnh})lv0J2$c8hp} zG9^kMUwBi!MVORO@xxK_0`Tw{m{qSg|8kPapcebm8I%T3n8`+G+NsI_B-mHv3&*`& z#>u?=%EpTC6W--!(0j_O5u*`c{ej9X{-`)rDrFi}m;v@tH7Hzv!u zIGZh4@p4T)p*gosb#X2>Q(3sZe>m5%1uRGDGVy#Fn~9Rkk8YJ~0LsmoSL1p_bYxAc zBC)Q+jdrqby*KOHzsPFxb{?&Z^Gl_87x_Z-ZoQj#VF$h+d6(^COIX&diX{f8z{!Il5R@gwbp6-yFV#(NQQ%57(w(N}PKvJw^=-7fZ|97w85= zM*LY?Wbk3>(XcMuyllM5;b~!H7>WMBuA(kA9m>{VVxD_E9cWqjYH_AeuJZL%)8Pyc zL@HeSpXor89D{`I7cnXaPTdJxM{-N6^Y9c=h+^b9^`p;28AO4#6F^nI@=#-!Oy!uz zbDaC+*YZ$WMy7I1-sGvABC_svlEsS18bMRfEu6OTI`27{8*4pIDZAeGCAVB3TZH3= z!A+KDmF;&BzChF4S7xbT;E7&bVIa+H4EA z{Ax3L%yO)}g;-XOWXK*iQ1m_|yK(-#GXxg8lWj}*i_yul`bwsg!x}vwbaH=RBAQIb z;=L-L;Yiw%^@e088!Y9FOoe7C+vbmAuvDnQpH-o*2Xls+v#qUjHMpU*M_6rhwKi4m zsTwAfY zI-iMb8wVu0PWMP{>q1hI(OXaG3{40N#cQRT$AH)#Pg)Zu)^fbz`?4~t0c+h8IPh;h zmgqSU=ix8}-m>O9tAD9=gq{IT8NBP%5O{~uTT*y?PMFEyU7sIscD|i_KRW9suQH4! zGmd8u*$E+VuZz>o_u?*)l)ywB7V5?jD}OBcgVA|TEY1 zTiG5lPY??@Ban8_;CLc~BF+`El$dV^Y-ir%t_=DBY>lOe1ssoPV5mJRqtGm|$Hk1N zS|=lhY*#u&Z>2|}U5t;_9|gB7M6>idY8MAFAz;>?gKRjm4Lh5RII=A}d#qR|!-~AQ z{T$PXBipdE$%-S}va`pE^A_{@PVZCII0~&hn@l+h%{zOXsh=1o!I|fxrW}RVolVXh zh2|B`nH<@2tt-KCH41?ug7fy@WQJ$`Up0;Msdd0^Dtm3@5uBq z3_#|KvFI!fiyAT#VYXhL9L$LVvB2eMMfS0VMGhGWDu5hk(KYiW2fKGhue#!Lss6Df zEk*NuhDnhzBr#)!Bx6Quisq68@krgdGRBM*ii{zt87m|iGg4DrpUGEr&L!ilm{EXX z5oHX?&KP2qF(W?3b?kgO<=nE@WCchjSTRhpj3E&kQ|wYSA+iDp&iT?*IuWJ58`-dd zSm_e>Yc7s?Lmb;`e8b0yF0+nczd%j&uvpHj7G!9L`l19q9(1 zeHI<*7M^Vu4G{r3SDAF=n|SuwbmZH3wiz{CIObgC)lq5X*=N^LY3AAH*l-b|bCqL9 zrIlx&V@IW##pPIbQUzND&ifY@A1sh(h4*ZFP1Y1ds0gB2K7VMS01AW*D2@yTWJ8W4 zLxRu|$PprfY>aYbs8C4Aa)bzBMIn4+wIf4^LSmdFM2EZ#krM^=B!u7ku6c_I<8ya~ zSNP!ByrA9cLPwvq5HIzXdmWxGlSSyPVNXcQM+b`)lMjP(fdVMsC_fR)+i$nVJ4U(d z{OFMH_?d3G<7b@H6Si%YrlRqp!_q{gvBfVi3p8GhfO&D0+OUWc#!<18!G5Yd)7*P5j~xU_suXu3XjoJU z8nwfM-Pow0DFyy+0N=EAQUkydKDy(#Ua>; zSo9-Ku!7{VP=Xl_wU@n5eQoxXiu){!;?SH1{ ze2w889hmk`suU=`;PffxjvEnaPAIUNVbH@5Ty65caYG`_`fMR#t|jxU`8$qy=o$0{ zKt*jNb{pwalK6tsue#0J6j{Dhhe+vHB-@#aw?pj1le7Z;%1@W=YI{;Z#`|wt1n)Q&WGuJs`p~MgH2RRa3IV+v3K6 zc?>2D^)}3vk^@Bd0iZr4<@bn4VzXIA3)`+7U-*1Zgt2vnfy5oV_gu)-fQBgIvu&HQ z^tj=YCQ1e1mDlJbPxF#yQ3c>dIs#Uk&`wqwJYU9Gmm*?~#~B3?ZGxOJPq^%y(GOmE zIb)u9**T*vUh+CZ+7~|5+P< zGMi_AVCRgs{Q*Cm%*z?`#LLbZZShj~pGDOS6~WE6U}l>7#}6`Cb<)cO3&%u1mzE3c zM9}iMFd?fW7FbIyO#?!jcw#d%)xqF1@mN9r8k5o~3`|307l)dQeGd=q2pN4v&-@*P z*vixMZ>Xuu+T-sTzd^H@LenbGZP=d$1~*I~z{zm)^sE5~8jTP}GkcV7kWFiS73p!! zp}B>>=48E^HAiXp@z~kN`-;Vua!g zPM>)@<3>a}g3tPZO@y==q>mdC=^)(}5*7oq`P9suk1@C-T(%=o0T}V2#4vjl{ssBu z%$%285(9vB;+4u6%*!=DK(|F4|Ezn6L9&Ey?Xd4pPWO=8xzC)_5u&(@P|bIs zos4N8VhrIB!+dMR$#7Ll{2dH4I^l_7ZQy(iRiwne$FuD)(;6_8se01 zPcwc@qxwu^CULBUM^8_lG);-gq7s%>y6X-aY$zgdK z$;5dLrUt2=Bj8q2o4g)p+=xt|*NhvIiSrugJRQvbO!J%ZV={rBGk#De&UbulMdqBE zOkTG$5wJ|42TcSn6X!%eR&hH6`=E({WdfaOB5=vsiD=!=tYol#?(p$?qjN(4=7VAg z#OjUg`5j}Qeu-dsg>0bAE*L%wOi%nBO$kZsYf0$?inwJgxoI7w0WSP0ruzL`l zbC8-xWixZq0yB~ZVogmk+rl|w>rhLfb9HUJunqctEOH7b-C*`Mi1%3FCeq~66FE`Q zjXnSuKc6|UwA5?5zbjX4={?(_EOy$x{sLL}vDNO^InE$o?i45ETwIp5#w^Cud9pd=t)eD zcuu~zpJoPHtiM}4G8@CQS*4BYdUwsEHU1f{s3teY$CHIW(p4g@kFFZ5QxAV94D9hd z)KntwXxo#G_jsO#D)Dx=@YI8PsfpV^L=8mm>HB!c(a%Fa_EsW8Ik~x;d==LCeMZ3| z1&LQ2`L~d0+A(0VTJP3Zn*Cv(AtT{#$Wb5bc>og8b((41%ai0Lo^bX9BOS&=7Q;7Y;hT9iB1U$2sW*nojY+}ovrz5Rs9=swD7rF40zEA12yg zFb$%&*KnCqXV6aju1wTW8v2n9^-=CKXsCU!Bx-1(^}9qXHHq6K7_LLz$*7^@x7?yy zI&RZ-sDSVqRaL|$!E}pi==e>ysFse~bY0603HwzhS(9MB1-5nk23%lc$8E!|qx*yn zpBCwZTcyXSwd1$rLY3>+k}Zk~&b63?c6ISsGw9_fPKm~HqEd@!EMS3yb8#hsgWjh# zNLbcRJVD{7T9UxS(JnlqVLnLoKj_cajmUd@%pwN+6c5JhQ{85Nt=q0m_1BNump_J% zl-vY)600GWz}WW~2xMq{9((!35*ho>1%ZsYE9Edaw*-dBKI&~oCI7f;4=?8q5lB?} z6G#2}(&QjBan3Y3&`g*&tNB<2~JS4p%5M<7X8KF;pMqIl#fel?kGMwd3P z0%uGq+am3b+#5q9IkPtH^e^CedA8ly2Xr`Fh5nOkc#R_4^2e9TPlF@)bJ z7actaU_n{Z6r9IUr6aqTc>Mv4V&sjnGc#Ok@-j1dYwXMn*BWy(!xT>CZPA!nY8l-) zoZ;GHV`pxy(b<_(b8HOFtvNbFb83#o;1oZqmm8eXSX^drGzg|z?`et&egJOWMr82D zHqty~pa*i6qh57T8TD#x6)M?K4^bqri7+iMqSIo^BKF^KQMy z?j?P_Rr75OKkw#i4Buz-^RavvuUF?elD1oUeO{LD(t10~w`zV~mhaMhJIl9fzPaV2 z$DO&PIww=%O*V|nE$HXne4Xk0Y`=}|=iPpt?fYzh{&fmVAIPneffxZ;fMQtK$OjZ; zpC~GQ2vL!(M@*h~@9x$cq!qG}3d9*ae3qGv_I0qq zO9B{_6>0j=R;8hNcm>2}Cu=5c8$p?V$6<6vVa(}(UR){X^nuw&(C~wEUO{6r%-KiK z@Po5?(7@C}6q5vL9-`_2;|p{lgI*Ws1s2akQ+eMoV~9zzE-*DTIWr5u%FwLGSravi z1llHSoIVDv2^&QM4OU^8Y+ztkMCUjxNOO(&g2{**exft=EM!h+{QhOu>&Xx$hOq#g zy~GVaK<5=VCc~h;#0@_{o5zg;irBYBWx9i@08;rL+J~Gtqk6#?RgozgW9bO-lpy529GJcCj{BO6V-Er%sjKf0EUb0PBx~_`cZfll@3h^Vm`dm2C}@ovH&CV;gvR!nR_K> zoQbO|DZLT|o36!uo5eGRbX1Rf!I-3Uo?m>SH1^wcmlFe;#x?Up&Biw;1~rX$=7(B7 z?&%?(72}>Z5iKwGECe(!?rDQsUhY{4YF^ya1~qf{^jEUc^`6REYr3(f{j9ZIy3dJ0 zP3NDfl9*(WZewaT4mvTg=^Qja*et4O9%qlamxMIcHmlJmw)VzX)hv+oU60g-Jk5YX zgC#DDOZzSsOj^iHz7O85w|lFdUXwH`QM_EK_orDqwS{nUX>A1v0|lTl)o3m**SpOc zRIuo&{@_e)s^06hj;E_9nqBirf2VOplFLxr*hpQ)>%<~7)vY+ZQE zitv_L77LEsM;t*B0wJ*+;YAS9?OxhQgv_=P&C#Nb1CCSOCafL+8jQQwJ{2TuJ2UGh z*0Vk%w;!NX+n5%F_L6B(!oW+Q2Pkzjg#2A^$_E>WIuL1(%#`%APwEwW0- zzJ%O9=%KM$rI_QrIcAk4KxU&InxjP<2ORNPrGbygJ!GT$2fE+#)>Cc-k3_f80@V!^ z15$l6I_g-UY8rKB&H83#mR`mlO~uDTpJkS=t)p4=&EnWoe6&Mzw9nFQV~<51Ify;B z94++d$kD$HYu$rMq9JxXiHspvG5Yd*kj=(Vvgu6#G;Lk zUSiQkF~<`*jwp#MXGfH1juveka70If8M8>Bd`_`ZBSAT??DdCFEG=wS9DC4t4{>Y5 zr$1tj8zI`E+h~F628yq#{1qM1El@R$=q8z+Jg+Nbc{xtEnSCOTtms&N8uuRPHd>7D z#HgZU`DvV;quXc^S;hSonxlmt#T?PShlL&oy@zdoW#NyG94++d$k9TN1CEkW7Oaj2 z{{r~p<{82cG^u%FCQ~`tq{({s7#P9eDd3QObA7ejgopaDy$!pp-vwr)NowpaG7?P* zK;9lfK2oGFnrPY6s|>hfANm8`nHq*WJYT@K9h)iv_gNHo$eLu_0erBBb4MEy!KUXe zn0gBECuW_FEFwGWbTqFtv6oHrShv~i4NPK+X*fZT=z}U)M~*74p{K?ahM)#p-s!0^ z1t6%+3aEiKkI)=2b3=2W5>IF%s2QM%pk{z(mKuj^Hl_8Oayl zhq8V>6{SZKMXkMh`Vc_|49y2v14})Gw&SO@= z!!)*@T>@FyUHVCg6awa$7xrWX$6b0~;eD zFERQyjjBn~JSDSyUrA@ejI4xAn3X0~$XQwMmEAsX8>N+zUDNpNhJ&othFqoBERmB9 zfuzP(KiVs8&8QO~@AsFG89@f|tJ5tpGs0}K*;+0kGlFcXTVE`DPP1fVh3;_Wl+l8f zk}tmSMpG7Uw8k5=X}W96#3&cGWnwfMvt?pXY>^M3r`0NPM+@{i=0d=V>ys@BdWBdt zaf>rjMWy$%0SwanxzWu^eVvETd_0I`%d_zkqf3kCJ4T9!eTZ?7(1&ab)&TNV0COHC0{LnnD*)$~y?)cN-)%OIHC5mz zE6px_s+QcI?x(GgAU_tIVAMzFl>J(ohYeAz>tuggS&m5bq8nmt&@;mcxr_Kzn8>AGsXtyhJhd zeh+#XnW#jN(FJlzJUgX>BwlngYO;eQ3ddeMFcT#?%1++cKiS%J{I8p4iOP6l~z6CpNPxHgGb@hU>!` zoxUxI)M}u&r`iw~K;)D4j7*M%FCiDIDo;#^gUFbuo;Db@ggB3kiDKU2Vz<-l!F>s@ zf~MngDRQBLE8jHEHrk!;N`1L?ucJT9BOy^AMMIYlQavl_7-7LwAe;$nG;kWx;c#23 zFE*Dt-4pe0gV!0}RG4q=7uyOuxmR^^KP)>Sjgw}uON5{*k;p*L=|nKlm|TRJnp}jL znoa}*Wy?jFRfsT~7J;)9(9v?!buxjZ{jmX!Oq4f8GaHaFVS3)G;9;O-IS){ziid#~ zm^GZ9$cu-jVS z*;!e=b#1v1G!h*(*}I2Q)pc@olOIWXK+nk&9XO3s0=ZC@4A65*9ypYNjx^1o=aM`) z7?)x7fg{J$FKiw)i&YW?sg)-=^I9TIa1fFUWf0PHY9=@gfshnKdQQy*XK-ZqJ85do zPO91903(#7h_RDuHaN%#B`Id?WRi{0@aA8+R!>ccEUhmywSXU}Wc{eLzSKNLjrGCW z8+CZOxQu+{bzGGf({o8DE^UuM<`Vf5wpRwfsnP%wi7V;(^6z?^WtUr8T@hAi+gH#8 zP?qqslj<%Bmn9QQ(kz*sRI|akDxoCJlG({58!k(3clu=?QT7qZ;s&)C@GPi!tg2Ud zF-%fQZza8gi?`O>CsQDHI%I6CR~6x^nlW(Hgb;~ovI4OYAriGlgt)*|UrrC&O(Z<6 znhG&ErB$LVKWZgC5So%wucVVfQ&K3l-&}`%vYXR$e4Ekad+-Lpa#2ySBZPk;Da&ksL#O7ePb9e5-&J>T&Z1F7PR^nBXJMb|I zc#%X_vUBZd>M6dd4-pDlFN*OS#c4NujF=iBw3V)_oLKpFu#_n;FZDu7SC`%}e?_cS zi;LAXA|a^Z;x$k!*U`8z*;8o57pq7SSdD7AWzEawdvsW9S_849IG=X@Ddi@szZOErv@zX>&6_xAg(mE`+4tXXdaEO)b=$ax{uA@s3 zOU*>m8X4&&5>I1IJ0f|P2AmCgASE4xu1877D9VjWTAW{&tHByuS-Fm`W-F1T(Q?LC zuA^%j(aLpnjolMMez}gWVaHjnqib$v?(bA3<0PN9oT14^xsL8&s-$#i%O1leXRu`q z!zk;6yU7>-3Iu|QQK~CsLQGgaNHLVXyOw$9Q*C34T%&_Qk9o=}&_cUV7Sa+R+b(ZVs zrn)cYY~?z-;#AZE7rxIb*U=R&2IR??<#? z+|tj=qT&e%tnI!kC}cfOF&~m@aW8IUGBE=kE7|y)v!P_ezpapI4Q`~w&{y*Df*OL4 z7uXPdc-(k9FW1psu6LWYQJSgrOGAf|tfon`Ok#oZRb#!F291A&k6ey&9bHjjqS z+*YET(FJlVQ8;$FjxKB%EA08HS0ufh3y9@9y1YZsSXHj03xhv+Kao#4sE1M$)4ibt zAd;LyW{#?d4Mt3)&t|9=-DqWdV<(Iqac zTg28N9h5I(Tdt$KR~%1R29#VIHe>3zAs-FD5+?MVl81qkEDu|*qZ?NO%5`*Q?uuV^h-4z@ zRFRMDbQK&_P#{YiNmFZfQl9n_HaN#8l%&ZuJE>-ab8bROiWxhZWW)Jyynu7LOjumY zlOjn`P6An4ADP_eVtt9VOl`pgtw=qYo>OZK=g2@v>c{k)nhDO0flz6Cuyzz%Lk%6r zrI=|VU&8jv;8zB}*U^oKxMh;ku9F2W^Gi}nZ!Oo+9ZfEYqt>Xf!VTZcb#&>=UYa$Q2#BiL zS>(J~Uo}!k)?IOPN%(~$P$||l*<~GF&ccR*Y@9`F#qHnMN$m}qqb{h5 z#g7A)JIN)F#i9~b6(MfCcr04n+>IHr_O2elu`RtT(k2ncS(m<6<;`G67v+V8d8f*C zdC9^REHy+226AC7yJj$F27}YQ=iq1Fu&3eK)oOWqAc(=!R0K6#ZwhQ@1S{!gWW#lN z6wRz`9Gd02ysoRtmh1AmBIvxFXL`-rjK3K8vX+*CCu?aL_;H#R=f&l^yqfHvhC(%j zr60TcaoyRGC9fH>K3h3i)4;JSbAxjr9X;vz=vT|Ks63J4lsHh<;*X1qO<=tAN z8F6flmOjh!=xi42&*tWnK4kIb zx)!o<9==kp%PV{g;U2#SogM8o1(|WVE^oOmFNXlByUM*3F2KL^-1i+*V>KAoI&0lG*`v?F~!*0B}cN4YL9DaV)V z@{$ZPg#zc*-R9DAbFt6cAU>SXD`ktVvXja+a}6FP?3D&BvZCu~RwmyR(*0rGNwdJR ziid&A%G*KKWF565ttR(59}>>7nkY=^LK{1&S&`P87VSmwreu2&yx9O+1kOatb$JtW zwaayRM}Y*)DUn~$RY<6XAw~}PR58m07Zk{HdeYRIos>WC#;@W+C`prRc2dm-=iG#n z6f<@*$%gaaa$R20D?P$kNKsA#Sz2GYF7IGkyxJ^qZmja+()NTd=@R+Mb$QcScWHom zuer!|z2&;R@hmNA@=}I9A7RfnPa%n}G)rbD)%_lBcuezYS#_A5RI|Z#uY{7+(Adc& z8_reBb$L^-BMZ&4^j0A(hDl24t>wDBqsb+4)EX65xWH7d%S&F#)76v+h^i?%ZmiC0NsDBwjBdC-ib2hHd`D8|m0g&44O#m3!( z5W@O4X9JdQ_>66lb2s1ewUW6ii|HM&H##TWQ@q2JjylnUPRh57ZJ#q_Y-vagCih<4 zP+DJ+Xu43Cw$HhTBeY_D2PI?1juzz(6h!-X1r=k6dIcSo$ zB_R!JXo28D6=)`ObeNGK%VUNMy9ms1g!Gu9>1Z%R)6ro@Iusr=To;4D3`aP4AB-!4&fCGHH|)vyi@^{> zOAFnT!pb`BW6RA%)|QdWpodA*;=H)r*9o&kw;ICIk6rz^+}CNiHn4opC4V`moClwe z@=*sr=wunYV5=jZAj!w!2#gB!J_v94BQ|0(h_D!P20>Opj*GM9zD|?4Rxqcca$hIv zi=vmnB;_O6a)@4A3LqPzt&^%HAE|o0zbsDWmLiMQJ2+7}^4J8}Z zv<(t%sG@P1zLJk>HJ(-?UYYgYeKuGGx z^qiUr&W(YP)QjmkH51&xhGdU18s=%b@l33cpMYK{HV5`%vm0Lr_6TPG^Tv{Et8TsPpNg9SdTUU*D)DX(RPO2jU zuCE}JqOn}eC=noEYC35K22lX&WZzX?7Kz@q#5((Oah7gBoWA+ zwPM$lM77v{oNXPwjg(txi!IDqUi4m0KICOK=qxiD<5=l-@i@lV%b*2~vzyH2zC4Oa z&x*Q6xi1eXSfvN{blfT}@=?r4eJU~63GTpEtXRz;N!yYT9qs#}qpF~x8-~D)RN{Ed zaJ4xEW;jB6%+Pc+n4#%pe6!q_$IeKo{WY2}jif2v!hUd?H$!S&a0u9H9!D@c%GGZZ@++4ToU4FOMsN<-RSV}$k6kDaa1*^!lt%qa6@gWg)gg!bf09tORS zoQJ=hQ_h3WNBJJvw0{?DRl^fB>*6uwOmIeQ^JCD_3#8+Es&ZeRa$g?A7{hBQQHCS~ z+fLHqjJn*HhmIRX?<`3Q?y&b0>2DHc5YwodR0dDUESxIo7{pN}9ZyD9LIx&dU}fdL zJj5@JAS?IfDfi_m_vI<~<>}T}l#Za9j}9I1Bz2tSzC6agK)Ejuh0LhuEcfLZuDBst zmW@3)O1{pPN!*PRWw@Js@fjh4i9w}H(h@p6RW`&Z016vIqNsZBA9t{Thhm{TSW%u= zkog!**s@YZDVwEgkeeE>B3>oL5-G^Kr?%um*?Nfxg}B=@f{D99XPIz?nsQ&BNvuAW z7EQvi#Q!xGUGB>hFV|4+%OmPl^!v~F>OL&?pUF7BuU^K7EWSD;3t9L+tCjCwax{Ao zXVJ=CQQYl@rX=!bu+!t*76xQ1_vIO<0$9JNv_N+c1ud8R@+4Mqa0$rDjbHrD*-)}k zP1_*RhQ>PGNQqgVl8=|_CxVX`*bsbp+_>(iSMJMG?#t7Z??JmUiQ9nP`KeR=HO6>GG5FiUf>$(uS2vIgDDs#2+|o;J*xuF3e&+}jtM85J8i z>8UldDmHL3$%ZraMyKzlEp%Hyl$+|% z&LrLU4F<@4WwFV?ljRB^O12lln+>2v;39sxsgCWYI($?D9H-ZD=EN?QrBj2m@~n+s zfU_EQsge_)x@FolvyO|kzzHr@a3W`wZJJp}w+Sv)a?-SE7T+egRKbayRkmpsZxL{* zk`q5`h;!l28te)Q3)(c+7W)|m;?zg8)J1U=qvyKPu99e;h8|QlFXsU-_^Wu}j00qa zwRWWKm{s$@Ixx+}q?roX!L>&4Vt!S5W_kvaDjER zkT%9SD&6#SwbM(DN=cMPc@VjSa@v1eO0Uf}v`kW)H*py$-_qKtfrp*ahSJ^&+>q+>01Qq87N+be@#8T^tfDijm^ z%KZXMt1HCnY`a#PPs<8s?4&w~<2qMDN!nMilWI1&zJgGa=6394k`0%ql=}si`vsQ! z1=4VR8hC5DUm$t6TeB)9(W7e8jL{y8Bz&`C?G*f<>TgW;SR?^@L?|7DQ-nzi;E;#5 zk{$?6N!eJ^$)G7IT07jOk8d-YywiSx#qp$2iDwlYZPlgga1YUO-`MGN*~2hjoe)>j zZ?u3SEV<1V%Ija*MmMc{wO-+&u_^PrL_Cf%wF> zQy|N@m3WopZY41ac#%XNG?tzG+_3SpM;^k1W<2cZi4Zncq%U(eVCiN%W80O_&3=4s zy{EFEc<(efNzt2n#o@`92^llCG^BVtF*lgd`-u65$(XSdOk>`y&`n2Zi;AP66I5f~ zM$ru_v{gAm)!5Z=Tts6vF`&=188?2XqZ1_^+~^(Xz&mv+d2nNQG79JDa7hzDc9L%> z{zWsExGP0G6CqnV(Q5RMm!OH(AxatpXJ_S>m3FToms?hfN(MBhDT=SHUXujb#J&S0 zn!*u%`IQB=ByCGVz)@AQMhiqP1@?MJh_Ir8)fHgH65!4yOUHJm?C^FvTG05nUD>naAP`PQ4F zncdBir)P#Hf|>!E2xa!?z3Gr>Vg!$My!6uB2mN;z~LOww6Vxo zVOH*2Y1|8x`&LrOjLfXux3b)~vR&_!hF#hbDi^YMw~s+bDB}-v1ynC5cuOdR{F!Ac1;|$c z2m$idKvn?GEqnc@<6~0!&WMb4@^K^R$U5nl^8o|&H(^7`#^0O`B^$mxZwVShU&+S{ zY6w1FU_YfF zJQxj}m{F1;IF}bL(XCaMVAoIH9Lbi5Z?uJv zNGxO9D-N#gq;gwIgF=gh360=N9tO1(IgfJd%Tb`o1SM};q`^&GRBo1AU)K9I9tF;m zVdJB2Ykg;DW%bszZ6=gZ6X_E zDmfYKRYvwbledYS)o?=FcDePXdc#PZ!IM-My)9uj*dcc+rK2|a=7*Z?BC#$-QxrKD z%|?#c&HXfpY1)EyB~4q(tuOK2ta^J$EFImpiC8-PmWkFLHRwLnZ7a9F9G1KRFVbNs z@hZ2zY}VqLNUH3RZY_hdcN!}t=>R<^PX_324k#vUk2eXI4YdJWx%H*!^<8R2>A`Mk zeL`4>yGVx$>}1kqxq)%H^<`q?NfnNz?d55E<<^&RA1-y|(g3|1V7c{WX?4lzjrbhd zu*(I@P0XUiXUX(RS!s@)O!n+qHn_qZp(L%;vXg2yxUvDupX#Rj@?ayq7}BE*fgg%&q=V~&-HmPiz}#Z%=WD;tWqF1%_U$@3@W#F?ra+o8Z$2rI$WIb+ z_;|h1IpNx`$M)lF>*#GV-9lSzVb1cR_p0q$)aclD3H7<%%%t&=M@f3#)+Gw_|d;5_M!jrTu2?0k^ULIwu_H=`Ir%gaK_v`VAcc~Ne*8`HiKiStncsXt!U*Ii=ESl5`G|8CkMlA@k8?~(;-I#1P zgp-ZfYzQA4vDu^(-H`3xpk_|G$&ILQ*b&qwmJ723*wEEB#HZ-denCbK5%{y@$XkJ8 z=@8vPmK<4jASRdWBw%Mn8#rT9hINWjN5$WWKuF9Hfkk{{vemFT;s$Ir*+p{$Hk<5( zxdEF^cC*}o%}(q{xdB@byGm}5Rwp`;RvQd`wcf3-(9JkgogXWUlXLw<6r zs?TEQrCe3L*6%xB5bemZOYtum3Mzt?j2s@u8C^s5%hYCP;UPw`5G~^BygzUVKV)8jf!d1u} zs(zoH&r+0XncQI0XeB|LHuD6zj;g-y*!OEA zV#pmftu8w%YBaVXo1!i>8rzsnZB0s1Wi*7NAiH6Qr4&_0!%)eXp}N0Uc?tu?kf2SQ zRNh-xwZb;QPNk?U5)ZcFjvwhK5(JH}($g7`=ut60cB;Nk_u__LIXg*Hr4+cE z%{KcP!U8L$N2TmwadZ_sl??-7@?691r$|cCXDiyNxSy1V1a+WH$ zAS6|O!Omw{I_S{`R0no8fLgM%9~O(1N9oB!8tZrE9w_UVsmdiB**U3Gu%21XQs5Nq zHaSa`Q;>UAI%MZF7RnCGS*o0Z+^cd5c0S8e9^DX{RJjFVD1z0Ap$({J47rhi%jd{n z*iYBJJPRNN2C9G23n|kz855QI#M+}rMNDR-OjIfZaRmW$I(;S?(hu{`e5(;|`sg^5QOTAP(nB%w%5QH!^P zBC%XCMU^!&tw>1H^=|=Tvr&$cq+Pp}B$Ey2jB2IR=^wW@t*gbhMX=f~K4qhTq1k2F z4bNn_xm%=&*-TB?G+<_@G`Mk=k`ysxXGASasuMqwA6ZC-+vt>tovV!-va^G7)C5Cz zNidVXvD|DQ>-&07h)Ji3tU}*F+$jMJai^^9jaCm{l3IkFwnnRI=*Y42s}l5Aw~HdL zjwbcuEJ=3Qmf}oJND&U(Qk)f2gu^3>Nz-a{`sT=H@*xJEu$GF#HA9fXYDFO~?y+B&L+N(%s||&5V|$RS}C7h)TQl~ zan$BbqZ^ZLU#c%Qmpa`O^{&N~y!~k{GTrYLAEvw0o2O_L%?u}cG{cBp3tQcb0uqH! zsTQ*Ld)6*zY9c;xt(=cm86rNjLO!!RpQP@9|8jHDBHU!!!}PXaf|@FUR_Q@PPCI7E zh(|RilTM4Zh#a6glr9Bnx9%0vlsz$|$?oo!o*-(?bk=Tle5{pV*dA-`X!#`72AivP zTkAVJE33DzEprY5XH@1(PiHzKdQ{k1!Wk8E^t6baq_2eQRRGb`B67*DGLgo?^<`NUtF(=+Y@Oxuj%!c_mS{JAKLyfGFFSUf@3ToJLZz)x4ajeBRi0b$*FySb|xZ%WaD%(LA9w$@sl@L?NC5a z++?|gY7>=8D94cagWTq&63UxQ%vniLY&1y;leXUP*4w?+PLIpkHHJ=4ugG+)kd9is z>_!z%a3ee=l5kX;Dd7omM|QK?BuPu@X5(UeR+}FYTESUuYLv6Q&1$ovoXH;PVzJdG z1UD1vqnnfF5^qeM97eJ|tCTh=n9xCeN!U@c-JF#4^yAV*Z%%iAQdlK*!c1RAk4oiJ z^#ig8_4X|$6a`IYhov&A9E#j3=)l=wDMeMQWlv)5TP=IkO2LrIsA@H#C}=f1JfbKv zc)A&JY4viiB&H*9b9Q)yZOSiIeHpp6w0h{6$#Zb#3{o6DTYX{&_|oP}o99O~#1sXd z&JIg0RORW+xHDbw*lfNG_Eg2C;cp1Tr#s%4VZOBXGuGNuNvCQU!v?dNu81AB>fG3H zR!A{ffK17#O6b^tR!A{fCQc4x+MRycsg<1?)U|u5`t%u;&81vu1G;&=eUj_QI~`aK zO1gGo9P0#CLbA`i=1wv+x4V;+VB$NIL8`vYEnbC?K{EdXai@RjA;fanYod(`e7IFL zT#9>?7{ip^W4ey`)+GFc&Fzzo06|pLvfJ6Gf(v_kesHMmgruz0C^ycQ3vm+ERD!R$ z5ZBNikWOrHodN~!pRPG!VnZ7Xi4AQWB8d%;vxv;NA!0)ti--+v93tG#z}_*jqmD(z zjyekna<3oyWolnrG&o2Gnf*w8Ga&G2+b}COdYtiWpWD&x)=v(%{>`?)G0Ipoz?zUX z0~|opT7Vpbjx_@;K-LV9UNBIA)=nijA-N1%q2=P}4KhbyQXYg%hnttf4j*mRd--N3 zMr^T$v3<^KYq9<$V+!|^SYy;wZ2qUsM~t{)0rtxkhp#rzFls3lU%y=`hhrpbWLB34YjnP6#2jbXxID^;F*bVSz#41b zIk3jTjmye%fjbA*Sh#awjr3}hELD%XpyCBnz3=u}^#U_;9(rj~t+;-dD5zl-DbF3{ za^oCBNm-KJ;{%NX5eaQCh)8JT5K*R)l2H{F5gXcAL~Lk#KtzJI7epkqy&xi?jYCA4 z3QH(s5wW3-MZ|_SI^x?F3y=&DiJ}B~oKBUIFt?$yU#?g?@XOT$zC?5SJRs3?V!cV( zQe&=O@HOU&!&e*sbHUdyS1i7Mxq86YSf^O~RkqZas~3EYx#IBE_D#9iuV1cMeEo7o zcA$tNkFjcztdV`Uk%n`J{mQfl3--+yi?MIM9#9r(wg{9h_XxE09<(KjK%=~@cx`!<$BVW+ z%7fFEQ?HzhzKW9wtFhuF@}M)31p(P%=2*PWyh`LnXI>@3>C7o($VF$xNrcr|aS|bu z9_M_^NO4G^JY-^eu>{ZM_wn1CK_$s?5K{<-G z-w|G~OtI*CWr_n=8IJ@N8ZY2_Wr_vYD^nb}w(}t!ZPznfEWn=GGE4LI;*PL8kl>8u zjOe6H9SCPu4)YKtEyh;`FmC{vV2w2{|82%$?Jx<^5o`aPu~_@(jPxkyd6!AZ1?k-Z z`e@AO#7ow&Oopc}N8-IrHUrU$Emr-;Ii9+;SU;1s748=#dAh1A7Gu+tOUD-rvTwdP zludIW(%RggVF)@&9bYWUzT1nAW7^q-qDGI3#DdAzNY-{qiO#BV)@9X4tAhs-Otq}S zXw3$T#6-;+YhyXITGQy^dJnobi;N6t59_1?Gs6OIl_TiP3=4TK%#jY}kfW&W4X1RM z&RLk37ydqS0tF+1u*OjsLO6vvb@WC6;a%4u)iRO@tFq!S!s*N@Z7@OztFz)H!s@Iz ziO_-BG3hc=98xF`>6npNIQw=@S&T%&ns}i?VXeGSp>WD`PkwSyU%_Hw6XRoHS)V*{$ZGn+{0!GSV=Ttr8RLM~^jZ1Y zv3JH;p#3lwcX<9E`Y1c0RKJ|4b~seqEW0NoS+Ke)LKdu_$O;*nSd_*E*!ii679$T< zQ`ViYAwD>5S$9|hY4Uw0r3tWx@?f=96h1g@xpjSMh(^N}ry!_&-eKtTN|CTSD-b1| z+T1$QwA#GIMXll#dAXrbSk>i^R4N_muXUUIIt~Bn2&*|{MvUw*8QG)}RGL0+f73C}RB6hPh!lu>*5fJ=G(a^ZfzzrWJ>1kl+3`{y2BAm^629Lk zPA05rYtlHcIN>yx%uaGPC9L8K6bY-h0!2c`fPp2&PoiB_m-RTHxU|+@?6*4Y+F<)6 zvY0F+mOiI7>nz@B6la@=2$*6GMV=g5v=ryTN|u6`b4LkxTY<|fvZd& zmD!pDxL%oJ!S%}21GuL8#9FShou*8^fNRPW2d*-UHf4zg*DF&jxL%o}yWhCyt*@*u zH@kxV*A!zUXD<17;4JUo{TGhFVg+y3j5?x%>qcJ1!CI-Z$MlB|E;uNKQ5tUXs`4j} z7ghNa2d64!f2GVo(yF3n?_Mt|Odzbf3KPhK!i=n^2!;6+$cw^!3WQUbef}WuuzVjF z(*_w7(%^cPKv;zph7d9b8Z9Mcns=o&maTgvW|1PL8D(Uy(uf>hkf-hL*1Z;CSUV+V z)i~H#Pq&NR0B25)VPPS2fv{#S&x$-Fgo{hceoc@uQtJ_+6Q6L>Rx#3GRaJ~MI6Wz& zqaZ^Asxvi-p6CfDJryGjR!_x9gVU4wvO)Q3swjD|x++Q@WVbr%=YLm1%78|;#k!cC=yn21&V|W1gS^DCIM>bV0lGNIu*k*N?}8%WTfO$&K3`RWFsXR zcqh|j2JdRP4xZ9vnHGIXC)wKv>mOt=H5LJ}K`tvEjbR!1SY*rSmL1NjmLB(0Wlh6Z zgnU@_k^$H_I}MGsP#j3*C{XI+_8BSI{dO36?A_;MR zG8|h7nG!r5U1neFhrnZad!vCmT?khnr1eL)$#Zw#Oio_5+Wl_ zYGj8~wUs-If(=s00g8&KEqJuc4A0OWhe84nqB+XGpN~-?Gvk5*zGHYi=2sr9m&l)v z`IQH#Au@cWGy+2#tF}DK<3(E@<-uu7`M6HnO$l6!ni`adoeIIlNQ2c>G17R@lfY_X zbw~nuo_g{ojTb$6lLn_J`fZ1o{GT+nG_)&VhRAV?W~YOjRvmLX9NPF z418UYm-(#5Q;B4GStcY6K+O(v}*DOK`hK$_)cbV@zPupox@)UgPMRq9xTb5g3n-kA0#L8yv!y-37*(+f_x_TC!?`&lXdJb89dKEKlmwHAY>J zrbjDDv`Wucs724~ZY0fCC=prCEndPvC{SLDfhe?-l&L`FB-sj}fUM0}7?SCU++?lj>+IH~FUh7!9PPUq;Q32(i%GxIsLvyFR<@y^X z4cFhOY&QfJuHC9Yqi(nAPG!3_H_F?sxl!3}h>KjiRdG_?Zq=R2c57~ww_9@~-|nqJ zP@783Du*?gV9vh$7Rv2L^36FI!z2H_PAf!#p>t2OyI`GmYwp+Mqvo&eXfphheGP;ci(#iV7P1?)AjodiwtjSDve^($He$0O zd~C#KlTLI)wtIt`d3}T0`D*8c`S2+-znt}o!q-AETnv5Kx zJIIooO^{1=63z8h8#u*}=(JhYsG~|`D73Nif*?IDyAgp!ENZgV%bjBzu+^Yzt`dt& z4Q0@uPRibh&F;Oj+uwjj-fF`@rq|q{t*;;LZ4jL&IuNoxro8_kXN570yjr9RV(h&1 zR#mS~Zj}u0wJ$Wmt;wN$vfCmLRZ8_vHJXddb$F6E)oO38ok8k_{D-~gorDb6x_W(E|~o2kj@ znHf+_Z#F?M8G%=9=3j6KkhD|nLT9*%CdOXW5afd|u|KN8GczB(GR(|JLk~07On6^B zLJ`(-u>;UFJqoInq6)rvTq>X_sW)SXs{)G2l5@ghY+DV(c&}|%(NmcWLnIRrh+zoj zTT`11J)NOOkBZ4@JdUhMG7SZfltS2HDMgjhkXuPHLqJhtG}?7hfFh}J2q;R7hKVna zGwghpqFgJqQEGysMk@)b%!Xm2laTAE>J~3YWEiMpZP`%`%1C0bQG=&)8nMr)>8Z>| z>@f;@>Zn7`W=utD+qNN_f+~zTgrW*Qc0Ma1y-i9{1)wZ!Q(&bORsO+H$;v3}2yEM| zqG!`$8NITj>h^>^QbxrrmJ5w$BX(3!jbE{vMUX<9MKc(m-Ckc#=LUmw^>uPCex#qs zDru;ZcjxqUMvwHUm>)Z(Vy6mUaJL|Nphu)9+k42RkKqCJ|HZ} zFdemL4yPkSb3k1fT6V``^$}unV`2T0+!tj17FDZ+Av-6vPus2y$b#7m9iEX?w^F4- za=*YS*kL(Km0OT|Rer(FXQB+%mbi^tJ*vEduoFZX7j`y)k~Ubh&OX}^bEEX+=3?6~ zQs`?3XuS$pPypSarzEF$o7XQG?%@muQ8y7WA?2qOUi4a7OH|zf z+$czs=+O)lmRiWT_`*xg#TQ^{E=kMo^_vzWg=XVeGp!cJML0W)LM+dJ=xGtjfx^V2 z3#|?$6iE*)rl`eRLXl)OVu~tjWOzwP5<3->R5e>k(yrY~lF5d1MzzxE^pD${*41L$ zB3Nw~pOT@aQozvcGVF$DGThuPQp9YgCTtoovr`(}I7>;2n6WdWmL=7RAIXm_B*SfV zO2p39#tqroK{;xIA-g1)N#9s*wvX8?x+Ao3CY>g-+TJMv48c>@_C~7*FG(#zg@3df ziH;mQzbZk0b-O4`>S$6g&XQz@Z7IU4R2d?j6Cocl%`Cm-L(U|ki``DIm&BARROxSefs+i{o$g9~xpl9F zO9D%Q$NDrqPYbwlDR&ur$vSAdo_sqZemE+@1BsCfs+T-nE#myB{cV z6V{p4>=hs0-)+iv@Yd!Q8BSC?8AkM|f{!ZWqk0kXnW>5R%+wToIM`Dd0iW5Lh|jE$ z4_uqXEvY*=zTC8#dYWku)7ySg2S6d!xIu;<(}RSZRtX|<0Jnsk7HbhXq5+XR0Hk)a zc{5C6NK@Kphns!ba9HaJ8Ab!F4f$9r!H|!&cC>twp0HBycU$W_J1eWVt}XYIF%ZtE zAf=}>-55P8>}KJN3ORaOL{8Gn!u2YE=xGtTWG9+cH4%}U9s zeLyPTw3MLQR4Gy-3FQq|JCwA^atYNYDwR-9peOd4*4CsUFeRmKZ9!m}sIjcPL`JRy9@ZdRKlX(@yc+0AP6BSI@Ut4)n^ zmbY1LR+O_`Y_$o&&4l`>%}H}vZuWXdj`J%L9;I%fNo_L`nBF7|>V%#)FpB6U<9Q;^ z5_&4*qNhdlBt4m~y|PFA_AQn@#iu|?F;umgP!x3F?68!gs`n$$fCarbJ1nKB(lfbL z&~>xJQi`fplUoI?W`{=4mofc>Fp+S*=xUy z^eHd0?9<(Bz6|!%g5@b)8SGPLdO8RDW|`WQVII~)OI3dSnEMK1&CpJGbmmL5WE z@_{J>*A9FLRG1z`)NE=!=4%NcHPi-sgu~{(lHJ1DQ~HA<9kEiQT+)^c zaW?#u6JK*7jsr!xjr?@Y2@@OISV(MW;}B8q@IB*(hz)HlA~v*fh-mlQcCr#X>R43l zsI!0|cg&$*YIj4H7z~mDVz*j11_T~$8)n5uk29X_b33}-`bk;n1tN}7#+m`vgsd6h z0GieUBvCQ8YqDm51<0BK(hCL((Aud4CnT3aE3{l3y+P&(Ov;0hXbPs-9&Ocy8){-r zK%e>;vBesOXSP^>l0iI(HAYRvBCO3vjJRR}_RAHAuQtyxYAF_9zg)5S`sIql7m=~# zg0OGCSd4x1MTYzBbJ|Ex`V%9lk*twfT^_8_`JNGToMGegC?m$$=#c|!ta<0a8V5Hn zE6WA$99U!F&Ve=3t4*?0J?hDVtF9r)$y0bioI;_)@+>IGk8 zt~h+P@jn-Q{c^?P>zAtse2sOAjStF}8guo6uQ68~zS_Pi7yI?g6^pN5uE-7)QRFdJ zEs`~|?>5pf&Zf`Kt^FCj~8uu#0RG>r(W3zAFRHLlL)J^;w18*Gm!<+urwI^6t6R{5_!>?SBY>s zbIKTU(OGd4VRcrVM98GaIo~o;98xF`nV4QI!E^b2{Kn`wvzMnPthJe3i5*_SC2LqF!&8?d@!lqzfoR1RtA67gPu*IqpUK(^_Y0Cdf?@7Y ziY)kIK{ieGbnV5VY?=cRuDL(M5Ok6{zF3rfw-+79w6h6CjUE+=1(U6jtnHE#Kh|Z{ zN2`Me5lpqx(X%&W<%Bv8#7YhyXITGQykE9+L>v`*7lz;j`ag*+GLNC$JsQPlQ^ zQ@Ts%oHBpb;QSsGGWx3A$VecpaTJCSPGL?Ry%9io*L6s>j3mOUtT>EtI&(@Jj1a== ztT>6VIx9{hbYON&x{MTu6v{(7W+WEQzFkumBayHsUZ_x5D=$euvl0H z7AzJrEM$|&^qgw21@#b7uf$XVthv0a*Fv-(96T48>dtiySIt<01o)=cC{qbWzM z6U%Zi5-vq`CxF@!Re6?W&J&BPPo6kr<#`EdrNpNkk@d+Fi>yzcIAk?_p}7%}J3JJ3 z%o$@b_TFMmgK>qO{OnlMS(-D(0_}&fxWn`R&_~%Nr21uYZJuvr`I7~!E6c9Z2p6oM zSazamS%6)>&yqAD%1|DxrmQ<(LwRu8vhJ`1(&YP0N)zV{<-uyJD130*a_joi5P1rM z%4a-=KBg22tFr=8!l})zBTcK#TU^vCPLY=z3WZf&{z#?L5wg<#zD~n`IwE<_!VZ&> zO&UR^=@U1?CFQct*RMQSeah1kzw&6{8K&?ubf`~diY9VpdGo=71j6b|o}73_2&XW4 z?+f<}qLWf#`KBkH1;Q$BJk5eB)=<1M#d)xjrQqe1=lN658#^W6B`zk?KEZT1zc06IB=C&v?)t0xL%oJ!S%`%-TlTr zZ+&HTx!D!;zor-?IdjRs17~^v?!RyZ7Au%(FzSd3t{Zt32WzFuZrUF@xZt1^MrpXk ztID4^UR32z9Gt3@{gpBUNvn#Qz565L!UV#qt1y8)D9p%uicpwOfxIZpr$9J`+2;=e z56itGYl@FbAgsa)LkO7zjg}HJ&AZYX%ho*-vq+KBj50D;X+#b$$kTRr>t2g6teukj zY~x@fvzI)(0nVHp!@@%50%6Tuo)vjU2p5->{hAmOt=H5LJ}K`tvEjbRz(vdEUvEjyf5Ej{k1%9@6+ z2>Gz;B?GW=$Ojl8=A)5ehd?@UzXfA1k#^y*P`j#v8n!lJz@2 z39%X;pM>aaCQcV{iXNme8BZP@&$==z{fhcvq=cifAWlLWzJ;L%GMub@^m6D(L=xis zWH`1E$S0^DdPEQ#2gfHN)=$PKAx_7`VTeG-;_eQNE#oB2G|g-ftK;!Wh}H4W~ERJoV&F8ZUbCCJjzc%Ezi=S;qCq*_$+2Jr#ouGATkl#1sHz+gTxn8Vy{f&jx_2fHcd?=#+YnVL=S*sbdiitJJXw=cH7Dy)o@gf>QGp&QYoP3Wrmw zG@GYn!$M7BQZ?37$08h7sbdiinca<2PC=bepj)f1Ris&@e533WC!bkBp;vc?;t4WQ zNIDYci1QSZsEBiA*677frz_lK*C+YZy9a&GYw210>|S$P&JVOd(43RI2;3dq`wg&~=qIG!Xh zh~dwNx)5PqG?|{WizdqU&I~*S`V@g zCQ6x<%1O#ppl*_E1*(C>(pVUhj7oz^jDfXtp{QG#;f!T4QA!j$Mn3J0sav+!%I%cR zjnyj@NNa1>Zl{z<36e%8IxWrE1K4D?{CogOU#J9Kmr7_`*@cTxGA;Cu*BhM^b|a*C z;zxdJ7>#VTJj_(Vnhkx4vE_{hvs#g?Ba#6Rn`Upf48sU*#F4|M(nr@%YYK`5w z=?JaIJZzf2-7W`2D8#BuiapRO5+a~-5Q_PSm0$?8lsZ(0X=c4vf*}yI60F^6^_tt0 zVN_QXWarn1wT46l*4;{n%C>jT)NJpZP28Ex;Az{ZlWnI0%9oc`G+lG2yyf~EB@Nf# zsBHI4s@?GSYQ0-uY4)4lo-jTM;Rh*HcPiVhxl!J3&5g=-!%W3q>sY%^_FSlec&eF; zYJIEjRJL1lqrBak8~Ju`4cOPzxtS@qv@1EcmPP`Oz_F1P(7)kGqq(?T2ehVI?XB^^ zHBny|UdEssl!Xc1G#z#UiI-a$U-*CPxguEyV;;CFr8#z=A9<<548_e|qBx?{hS~y1 zYe#OPCTcc9QEb2y>3Y~d<}PlWT?m^aGR@p2@}lb*k|Vl_nkWmB^K1W^++HvR>SD@p(g(Vx}zVx8#Bwgi3*jCnE&{rHVsZ1daqCK+D_T-B{h)d?V zsNse2hdhx)z(4KBmQcx%q%Bk}a!ZO&pVZ{UEKl-cNQl;ud7wh%V{s*liBBh6<7P$( zVWnmiOJg9cIBoF)J1WbP!#;R5M5YybItjbDC8R$nsx>OT_-GADt-Q1anWN>Tn>c;* z(iC)hA@%TK*Cz3r;d!aC#SQXiYv@KvEp8~ZW23zFC+NggZghhcw`2iNJu{os*IV2{9AHn>Qg_B@GZ3dU8zxh(@()$jz`=Jo9c> zNPqFE2QDW_Hp{bdA)Dq|V_O4Z-P=njz}3DbalpOz84iuTDN5HMRa~=bk6R2th%2=w zD{(nj83tl6wuBhckcFR=9lIotiDR?0-ygQbn;{`u<1>W0nGr%*sTsxCIzm6=rzBC1 zCgZ1*pqFwqIb30h_3GYgsK}mN>f!FOH*S!(fK`qrGY{rnLmSgkIhyPV`|QEIf8@9; z|E`~mro4F*vQ^RmVPSf%DL^@zq|a3NIX)J8;8Nr`1ms{`$Uew(;zs6D3C5Gm-U~6o z_-!pV5}1-qmSO@Ce=bC*cp}J1s6yDrPs2xSrPk*|9;C@-!H`PjOF>Am?`2sRUNWMDq*2vM|5vz1zq4|$N*b4J-U%r~3A!YzSxIk#;XHP+L^v2APR4-zGJ8=SG#jktmm%&KxKp?#r#oR9I1f zJ>7jn;1`442HaFL+&5$JUbL{^rImqnmRc-dp;Nf5k*{c#?e$NI~*q{!f;@6ayet^J^UyvlSw`~(TA^> zH+D7F`HqBk*wlD*FC4S3eKqk)1W$>iBq%~OcTv)r!P1$jDe25&>CAF;I8y}3PVx;c zA!G0BC!yycTRPEd^pBUIrRt4f_Zd5bF}7eFF*C=5NA5(K^5Cg9Y95l`(Srd?+7fXw z7BO&O?DIcn*VZoEHuLOWZQHhO&%A@tgSJXQ9G`rBNo(MW?{aR-U_H=F6S6Yj;mF7yPd$QJQ z*N!bOuC6XL+dWta=V0 z7LY}FytdYE;N)0Xgr@dmK|lnJ+zX`11F@;VN9zqhiL_$WxWPpy`^_G`21j#vxm<>m zCl`)2`wQ*ndOs;ctGx zvA))84pj@k_iBgcpFh9zNU&7z*Oz%Ftu`!f)P|$fZmztt*=`WE4|uJ#dOZ*UabLSr zt1nW;E_Fb8L2xN0cv+9gufY#2abP>E&2GKl>5_X^yUo>ZXR+DqfgLaOJFjTA1F$># z3n4nRr26vkVCEQHclTQR6@(s;TdprQSDNkq!g8zEC&${I_Cll8h525vp#%I)Tpmug z$?vTOT-jP`fpyc%!IHZ~m`<2RJ@7v(AU4!5E?xKIt>-O$S9%t9i@1NTnUpv3= zFp-a5JHL+{X1~K-Alt%$Tb|GTz3aC9J7b>Ye{#!6${=93%>_FT+K6kfP#qc=?KK~6S{w4VQEqoq^&u_x#m*DdteBK0~SHWi)K6k-q z`1QPNue}bwuD|{U?(4=IZ<2i7eDjVSx9r?GH#a{&ziZd--FwK_UiBAn3xlvy0WC(= zv(Ap9uv(44kRoy{%6t(Miz-ni41-Eg39E1)d?UUHo64|h@XIa1&e{20&H7ynFW>*N zJMVb$OJDM$+Yi3*z>(YbKL7Bc#oc>euw?GM^w{9q;4v4Tv;D~zKjo=Ut3Ca) zXIygWGq-G=y5d=vPhS(98=SWZNM8S_VCK<5aOzYgm<^sCJco!Ed_SC+4|>79!3%*Z~IQYh?Yl0htcLZNObzSf~!EM3q!Ha?!dS>O6&+q3}Vrmx$@%PH9 zpQcCes@xR3p|T0MuAKS;{Yid1ukr@?J`%h*_|Wj)PY-^JDX9KmIdy&T5}>aGFJ zm%(2zAJYF~)XR0c*hUk!H2SULo9nx z#CdO$^W%QxwoT7J|9<^-FAO#vJU`H17X+J5Ag?b@O~CMt_hw?@PVH98Q>SD$vk6*jE?@EVPMx|CB*p4OF5hO_UeacaubEwqp-4DyLwLC^ z3aDd*Dt^c#i#XnlA`iItwE>@YL&rjr?qm;1x`9FeIQ#79T=U%PuD@Z&?mc_YzhKMM zl~-MT<4v1y*}Z8~b@TkLJ)1Xg-nD7dCOEW*W|y0@gf?HfbN8kzH_vaL+dT)DZ_8$( zo3`D&dDG_2JGX7$wt43!2tmD*?S6fol^L#p`VNebVcgwp)SyIgMUDMMDpsUoP=g8< z`Jc3WKIp=C2R_$A?45((+7Na7@cS!h#5)1M9fzaj|33U*gBaL_sMx00kRz{vSlNbX zcnRrkAcyNh{JaWc=Q8}hJos%9?po!3zY_kg!?iuQds}dl-dls8m+gJdY>WKA7zCHp z8Xc&vv^)LUF{mKa>a~07%dJL@t6kJ+$%5A1E~!B=taeFou-=2B+%fo#)Z!q&sV{ar z&|;|QEHBrN*L#4^(fV?|y$JZgV!lv`INpRh4yoO3x%AR4r1C?U)>l`X^=_>WMW7a3 z(S=$Nt=`mYE0iLwL6DLK+&E9_g4YgC0IOE}9;m4_YA4{%+GULz)R5LlaRe5+9;pVl zPXm_Fx6}bMqJ=A=7i$3~3()(l0ji6Datn?_Q3SqNJD^|)pwPM=X(VNE$?km%(0Z6; z2St=-_nu~h00IY9_bdo*2@W;s(3=$zp;Ee;Dl3tF1%6wm(i7{s z0lsU&e#qAM!8g$Zm6VjKE^RHH3-v3gR4(zy7UCks!UBMzv${ch{%!g6O3u7d*7;QUgzevH!>K;;af}#?m0kb+6 z236>VdbeArMhN%LA0F|D&yylny?tz%l&)g>jc)zKpv>3{h6UNt6OLG z*`rp(%qLkAgZeVFX;yfv)t8`NSi3X`8m)U;#I$NhPu8v`wabywgZGX|+}i}xUgFzjH4s5H0M1N*C1NjoOcU|!l>PUs7;AC~Jtm+>j^RT67PrvgwmGttzUWV|9+UAA`ZWouKHt!=%QZvriI zUR#r%KT+?tK}@&;YMS6JU9dVBw8GCG#H~8bVY&Xb(&PVVOnT;CW(qCP~SJBM-W zO0Z}`uLXA9f^lgRuDlaylIS+Niv7l-+nsRzDo}^O1z)$3!tY88R(*#cKrNmgh9Bp_ zH~IS0;FFLSZ-$@z_j+*8;K;-9|HH^{LhF;kp8)L(;OF@?<9saSpB0EC9cWb-e6tR5 zGL6z4xk0ZS?`0-{m?V52CoE;uQK5Jbm6s65*~dR>?tjs$=@I({dyey zyca%9aw0dO@&x+x=YsbNc+`T|4v)^!-`)_seRw1-!&`&*55`96GqS&5AABpN_T&^z zHqKh0N15#8=Slka#e?zH!@;ZJ?~8_azB_mzco6>jHu(GijOl(P_|f3Uf}eqr-aCVL z4X(N=_`$(%Y*Z(cD?a|V!PW8K?Elx$qdx^>!YiN`BFCOK6!I78-#<@(J`7c*w*(&; z{Lb!uZq`e>03h$z4AQInwt8FAx4#@SVeJ7`2CoeA(aM z1>@HE4Eg_;gI@`LHF4yp6Th?TUY9s>GyQ!B{2YBf4Arrx1m7F{dhi>;Zzirya(Os- zli-IVBA1JaKUA{c%1RLEby7JMI6M7JCc-x)GHqjZl!0TDh>U|%i`0CJ4RT>G#?HQ46cJ>EPVZ8@Ug-5@qNVqRUbl!oKN0Me#hRgqMbfRc*S2kp`QzaU$6dJ^*5>yRp)|-sy|YFu=@Jo zf$D36*9ET$-d+7Z=mB0GysP>axb8KOdEO6w>)Rod`ap1h^?~4bAd`MI^rH7v-wHkF zC*bdo1%DH~y85x;v%%+qTD9^}^~b6g!OsBxdZ_wX_$~eYH8^uBcw=x$Wrm(5vOQFN z$Kbjj7~I*do~W)?d)51^_f=QmxBEe&d#bJKQne4CMfh%2{|fro#cI2{P;J6rcf+0a z>T>nM$}8ZCL)E_xZm%|~FR6YZI9z>P<*w?{>cQ&1>XGUTtGlWPs{a(+T0LCd4}Z;9 z_f-E5vXHYXhv4@^)w3%vpt2mQyrA+TknsBI-s;WO7gS#iK<8P*L{@U@h}_g1>(o&i+Z|!}K_z_G@t6??oSuJ{Wx<`b_12 zS3U?=k>lj+1MnO9{1Tk|x#-si$A2FF|LMW+>^k=ISEA2XewiNsrRe9Q_=+EozF7H} z%D+|K7riHXfAk~K1JTb!?}G35!*B18egdxlaX9*(=xx#4;pmS=?}ndmfur9Sy>-ar zEpRpn-VBm`H$C^d=*{r=YogZ-t_*^IuaNuR8QmA%3uoRGy)kj`%qP_6FCwg9VRk#bz?2fLBu8p1p=U*5djIN5d!LftU z0r>g6=z91$4Pkg&G#5TpeF6No5blBBg5X)v<n@L;6g@Gz6uxJo>1ca&UbHzn7QQNcX826F{=De1(PN?~z&%fnE`sYe zM`uUR1j>*_MURTY=-eoP|Idyd37@m0{|x^ltirjAq6^_?HF~J}ERgCuK)xRiH^J3k z2`g~@m&4D8Uk?8v{AW1+PvIBCuZ4df{$u#{@N?l;!+(V{UxMHN1QJ2|p435!~@b`1$$pW8oje-$C#faMfqvs^1Sk9sXYU5jgf+;cvq6-wi(qKR*+G zH2huoKL|boKYtHC9}E8we*R+k>*3Fb9}jMe; z3r~a%_`WmzjmmxD&EZYqW#JPcs}Ep=_qECt;BtR>fZq3EnBwt2!FiQB99s%+4=<`* z3^sPKa%Y9ny&Gu$Je>Qk$}hmrcU0aD@_c9b#_%sIe_i=N_{(tYq3Z91AA;6D9w>ek z@Oe1=6H1x1d}maFPZZ2WbJ0%i_dHxNkNnP3+a;yH8_w*B&Id`@_ulA&;qT-K;fv>t zmC)?EST_Fu=Yw3VU3;jEYuZ~+lWaqz&l){!*Qes;g`QH~ynLj61GlZjFqd=)CF}IX9veUl|`` zf0Og0GqT@EFO>c!eG~a&GhZGFm78GE-;teGb%XE`%D*6BOT1gmc;X z1>}zG3?WhtX0%BC`r6>q=-T0Ip=qeAWWQ(O*s~Mg&ly~E4OClX-`k~UWOtC`+o48t zbMTDl7O2G}zYjpo?l!2`?1Wt6MwqE|0xGSe?>%%@((O=rCpFS_czUomcs`)tgnH>x z@KUHElG&1XLT&m!7=IoMz7dl13&B_6NzYxh_Iwnc_}mY7{43Pu7vbtx!Ly)!z^4J# z$mI8{;Tg(1;EBt%!DZ18!f2Mzc?~=R`XQ*_-whSi{qR)iyI`z)R`f>tB#E5w!PBwV z1|Np%^IC9u^kx|MzApH77z=+7T>bjsL8!ey2;<=Ig=+d6g118L{0D&g2jTPMP)Ged zJQa9b@af>o!B>L6gevX3pvwN<;Ln102Y*G+e*vB*{3!QL&hHBT4eHRz@2>^lge>{9 z!G8o-MDGjUN9F#hAo=|_!IjY;(RO?S>exhXQV;(m$Z<8al(g@`V0-i+$LmK)c?2fg zMyc7hNxDA;d0tdGyYkN9F_p(x&aZ5*Ov7mXUBRuD>FAR1-O#>G(KEuwRvv&6@l5ot z;L`B%(b<)E2baN2-fHDJ(F4IFD#>r2_L0hMmD?+el}4pmX;(Ux)yi2ZS@=IMj?Svw zQ#nytuRJe$dFADmr$p}w7Anc_B(FzQu7&gbk$WrmRqn5Rd*$^oZvV;3dn@m&yf;N5 zNo}F>%;>$rZ&rS*@=)a?Fk1eD%9bdqe6;e1m5)_^yYf4gk5~Sv@(CC@ey#HL%DLgA z!bgYy1Zdq9eOq{Q^o`2DSLTApgpUokhcN9PMkkwLhU@5iHheZ@*gL{k)1Mbd}0DaP&PFCclq_w?W3e6dntY(|gHX^Wo0$Mf9&0P?(B-BDf@aMYx>! z9#Ol6UiZvsXZY{oInlp|QxT!CCHiLA4!_B9nhQJO_a(lc8a*|7dQ^*6siaSfo(3bl zbE2*E{u`nv!)WcQ=&j+~xbNisgwIwOBhE(G&=K4dV0?Bx-0|$_xeM{~i8UNJfF*fHB0Sd@y`~j_%$GBfB38e=vMU_yghF!|xBj z2gY#U9li<1S>FYttv7_<5x$;|?7lVpmhgTU-Q63W4A)_dcTcz$_QPJ-4PP1F9X4Ua zw-_D`>)~DDLiqCVWibAGY50=x#o-;{;qXxS!tfxB(e{V8hWo-7gwGH6!nl1mjBw{+ ze0XDcLwJ37U3hKyyzsfMe72&hO%b|WS6>foX`P0K%__Xk;;Zwqk z!zYJN3ZEE0A-pKOAUq$&f1ASd!pDV=49^MA4$lf75mw<{fe_vT2*Oj9|Ec`H%70h> ztMZ>PL;RbSf31AA@|DV$p<46Ll`mEPZ{?pVU#xtg^7+a?R{o*#xys*H{;u+WDt`+V zqQ9wp7RH%>Rr$-xUsOI*`SZ%3RX$z$ROL@Ae^U8m<>AU7SN=bHUji3Z)&763-~wr3 zS-Ix8kl=!dyAEDxkWuS;vCHPUM7HEESpA+3~Nl~zd0rB|evv0AoNS|U9!JtsXYEtZ~bJ%NG_>Zx&!Mnc4?e+yJV9Jq_I-Ilq;E~9BB+@(W9hWrCX$ItUG34WpTKaCZ$SA zSckkxN|c64L!|^MUW$`qr5Gt%ijrh$h!iOqrNPo5X`nPf>M!+^`bvGIaH*#hCiRfI zOWmZdQm7Onb&+nAf~C$;2-?AN}--o`%fTiEY?1G~p-vER6wy@oy53bqof z$t&1$?5jTtnT98*EA!^k{xf#s1M&I%pLiNzFY$W60Gx=y zp!PrUG{X*NOFxnb*FPjZ-ik|#w}#BlHLMdr|IlfVR**+%jfXg2@*9eM%QhU^ay!Y; z2V)=d2JnI8-xi!$JN(bV(+>NZ!H6*%{_Wt`1$N@b+v)gm;><(f-V=MFJy~nNp4gWZ zZtcNGhr{)D*xO?Vvmt4M=l-xx^bJ3*>3^&2*_zfV5hSi%%OOPBGp0Q zEC+Eu_yMHb9h~jMcqYR&96VkE?BTExpG^LG4!tk;9|qo1&jpfwKKT7R@xQZQBDg&A zrMLFn3C^|z@+VJ#Yc1jaCEx=Iy80~uANVBrz-~48z$M^DU%*3e?IBK6d&vJ4q`L;P z9_!J&>3IS?cn`mG5^%4{@K`GZ6lsd|+pcft@ij(v!}g zhTtdlk0&44#;+kpZ+d3%r;VQp<2ya%_7H#G!q?<2e1+)w23+Y7zcCGDKXM!DM{bSr zeQS)b>o@S#9&)=D&u!pW3LCWbBMxy6o^x=y4R-QVAB}q?Q&;{(;tL!JjxLIGJMjqH zm2-}f-~-!Z{qj0+mikA}2NG9#BXT&2+=vex*I*p%C-G(f)r${|hmZDL13r*=v3Sm3 zk}VV~>Fxc9*E9Mx2Ok*f#eLd!T;yENABJG3peNSvRsL)cVvxNiA7}(07>V76XuqbM za~#Y$IkLyOpLjm&Pr#~Y0^gIk37p*rZyms&Xb=L+*}bj zb_aMm8|DUMF-P#^?QX#wVFYFmnLao=nR9W(!}V>@2lJH(%v)4muA7^W3vSREr}R2< zevY^~jgKQP?#c$uFbBG#K_GZJJtwE}alcBxV6Jo)bEY44e4L((BOZ?UHsaY-eob&| z8!_j42XnCv;MfGeM%$a7W-m@GL*c?wq-4&A zT`UjQ8#Cr!;KICluukB;RL)EAT-RWRE%>f0ym+qPF#jj6>nv6Ve#BZrl?VTI66*}! zJlGNJ!ym>f!$HoA?Zp~|;KoSO_9N`qf9S=RZNcitdsw&d=FZk}{!Hc0Ud4LF(^$n= z2<~hiU-g)Ub&-d#W-nsIW$;s!ExOtG)HDf*JHmvlF#(K}KSOv<)N>K*n!unvf>qch43fk3JVQY#Nx5kjA zYWP3H1;%2}uvWbkCY)d}o5tE*_F5I4Tuj^=%1PM8<>{@Y#8XF!4mmGHB^QO0P=MlA zRw8tJa4B{}54YA3pBhJ4q9STf`bBW`LOsf1D03ED3^~Crk})ep%P2&>ci=Ma+W882 zVTErH+6kT3p-?1`PUkXihndcixZpx-c64@UEX*}!-*b7(EBEQAp69s~xp+GNV*(cH zIiF(K=)?#~>6?K|7;vTE<&w)6`PY==CmDT`)u$h6JjIC%I_{I_EG#0GFop@%63Fk5 zb2!VOM@RUVOenJA7!P*(OC4Mf3l5_|Lj^x3L+3oWk{7t;L0ODAgo3nhFD)!0-905- zEehf~i%qE161|&Sr-~EGOYoyGl&(IE4axIFb&h#vm(^r9=UVMJbA>ZNc?CL8q~o&M zN$(0Yuz2UF_tTKmPHlLlqoOa=v_LORVG(Jd(L$LVPH5aILtk+gSxMiJD6Xe7i-J&N z&A7nDR#;@WYN-(o+-bn9BdJFqPJ5gN!}%A4FD}h1aZ{fwxT)c$;P2&5$A!G(6VbR% z8YQd?C+WDR8o~`{Tk`n99Mc`8$et9~uw1jtmS>_SVseK?@g3@+qS}0FxSJ?-=*jU& ziSTpcD3eu}qY_3#f#Db%&V`|&2t0H?LZ41?k<%{PkmhAKPr#6-C2O)-m=8CFa;%0Q z(IdaqZlB;TwuR?T?xa=-^{T5r!UOGEbwN8<^#pn0?xrE7qxorgYi?>{yc%_3Rd=E5 z$lYfPptcM3s7JGf6q6x)UC6>xC{Lp^d}x@SK8%&3_e?Ok$)?zK zk&!0adx6tpqEnqFrD}b+)u>)yVK9d28h}^YW35o)X3Nvsg{HhpbMwGL_npwW*Tkfj za9-HB+a6C##l|}>>QxZL6DO2K)u*MWUXjyPl5Z>5R|m#6TOmXP+tS==!uDFEh|e%OoG}o@KDjoX-V{V-hF{x$4x!6t4UYW?>RxhNfonLqbp+ zce9F2=CH&Jijx_SdVyv-ZoVZgo)o*qr(`9QJu5}2m!#+n3LKr0%#xySNmUD)MhAnV zO^GQZqSF(jaX>gaiQ}udr>12lCZmc>sR;?Jh8yZxaf?HL8Oj484^Oug&^Hr=rSgCt z3DL2HXnblCbisjIFstPy8iDNGO;uy(KCg^$8ChxZ>1n7poLt6>CCA4lW+kVwq|}jQ zMfyr1c-R;dN{l*0{ieH(EL&%R20gcj(EF#x08XS6P_ZVbYT=^eG;>_y2sH>x&cb1J zB|pj|6&NWm(*4Knq&ANbjUO)FLlryP5qFP^kL8BM6!8`~aW8=njL`I#6lcnaPeL~# zO2wq6CdH+O1LLQ-n9-V=HTO?v%-nP@wDhmpfXqa2Z%s5XDJ-}J0l z6xT^ z*jC+@q-(gl2Vf<>ih>%CP;f_b=ixbS;RbN=5mNj)+KQPE+U|JNUd7nPKLW|onSHYR zpncOD0~LQ`pu)Si;@(?v@0~5&BNX=t#XW-DGm=xGQWE1A1_xw;u?77nBaK=P4ciR8 z$}mcA8b;|&!zjyAJm^gx^d=AF z#>Z)TlRLf1Jw|b-H@VZB+%bMdXC-Aad?WanmN7ChGZy7YkI&44szVl+m=PPDj_(vk zVjvD(lOkLkMo6^%%*2!|9xn#^I{Ehpoj{ZVc`HWV7ZgY8L#jXTJBlSb6N)!uvc$j& zycp@~tLwK5p1VJ7ux0DN-rxDbj*qmU`wo1(|C7C%y@qL9gYA22IO-e@es<_Xo%O$C zlxo*Y>8&D1)gi}qG9(bLZ?e)hTNmn?nZ#bqzO{L1nbudb|E z_1fw+YhPct{*5=^+VJ)}?{3`m-e#&rrq`RfYzcH$0_Fhj1xyAM0SW-40oi~wKoVdW zAPO)55Do|d7yvB+L4YOz1~~UTbY%ig0xALf0lNV^02={o0LuYO01E(f0Mh~GfFeKv zAP0~QNCON5L;(f>!T})w1E2+<3E=#5$PZ8n*bUeKSPobSxEEjtE zrT_*w`z&;a0`>s505$+B0LuWRBXj}Y(*flGJ76>*319^D0fYbyfR=zDKobB1oLdas z04D*JfIWa6fDM2Oz!JcGz;wW5KoP(K$OfbVh5@1g0|4CtodGQYL4YOzf55qCkO!a= zunVvrumms@FbyynPy(<6EP&B~G{7)`5zq$^0%!{e0{8>YKMk4yP67@Cb_2EmHUKIB zO8^T1a{$u;(*WgwB0vEk2apX&0}KNU0E7Tq0Ga~)0p}J0Z@_WDVZd&{4#0Xq1z;Iq zF<=2;CSWqa4#)vy0)_#MfbM{{fFOWB;M_v!Mg<%O>;h~6EC(zG%mGXT*a6vqB!H@u zRn@~v`d3LW>r4RYa8-4+>UFv9hWjqSNx*5q8Ne{46-Pj3fU3`xbhw7Yy*r>Kz#nk( zDfA1#7QiyVe84n-9gqze1_%eV1e|>mc>&e{76WDi3IK6{a6nr?Q^1)gP-egmKm}kS zU?!jhFd7gC=niNBIKKdN2kZurF4+xuR{$0QrUME9*?=fO2%rVv+~a6tfL(w!fW?4& z0Y!jpfDzCg&=SxDaON?T5wISx1TY6s4zK`{00RKs0WAPc0B0XX`hdfLEr2C}`GCoQ z0zeXA%c*!a0PpUAmH>ai+4+bE*bP_@SOO5g!#I=rIV6(4fLxOLd+CYBnKk>A~erY?%tKEQ|)Ao@4=zymqo=%YD2*z`x$J2#NyM;pPtt*~x zc)H{1ft}beNX7MpY+Nrc%^blcntMZ9t`B79`a*I}efmR=u0N#dAXeqiNF=cVL=sUq z4N*7Z=ZCt02P{Hjk?S}{FmMV0?g1~7J5c_Vx2{?n!mRs|B4mFg*uc-PK|@HXLdP-v z{75k$@+H04@NR%?)p(Q>z0b*@Zo8l5O7&nZi%8oBbK&kM?7C`yh6?52KeK;k}&tHuY=j(_aGv zk}Z6mODUe@_-Ow=h8%uJ2!wQy$jyb_YKEQb8Q9%^2Bw9O=wAV8#MfY64H-5ALcI+6 zrx#%-Z5%Bii-iw7K+}XunmQbC=_K8O)Skjwg{f>Bb^%HI6n1PO@pct<${BXh>BIno zq@(zKhZkh=aUOv|vdj0cB|k&biiIiOLYGe@Yl88@U%D0&a{VCX))7*3^a}xyri>U! zPY%Ngh%}ZCDd`c|RlgOxp0{E5onee(DC0Stb|;BW=t$-x5{*U|xbCdU*u`hq&8OdZ zNM;VfZY$~X2*P;BF!r6sNJzTK7$gC3LKmX|UigtzgD^G6n>5!#3pTkk19!d=5_(iG zp^%j`W9Q$3T}n*{t(E1#m$ZLe>@NWQv9VMJIfF?&%0u{n77~D~xUC8!_v4UOfTk3T zZ7qS(4S*o&dDaYXp(}-9mzi{3)#E`$P?1}6FO6YwH!#KX5cK# zNXRIRLTGGDLgs-%`T=LU0Y3n)=PAR$f0EP|vVGxP^T}GS?}VJ`1PQ};0~%Wpx+%u* ztMK;2Xxu>R138FtNK@cEIiNL0X6S^G9$?pCgogukoRYk!A24WymK2CO75!4e4dk7l-rH7RS+g9E3c6+p9mT9>V5c_*eDZ z3r7L5tXZ?U7sT^B?DaoQ5c}_Z-sQO-RZ{KEzN|i8-H7+sJqkXAVPf^i)yJx@W+UM? zlb^x5SHb%vTs~CHu}UiUHruVlZ3!3Em#`Kg7D#07uPe#D&352~)Z7cFtG};KslHzE zS=D6jg<)_X(rE4l%FiD)z8ooE!LDST{6o-M+p+GAyRk0eJ9*R$v* z&RTw|iP8|IyqNzY)(D5IT5^eB3#qF>Q_?uBIZs!skH=)r&R za;x~{bALPP^fo2rSD@4%{-M0hXmnP?&%I#bxC!c!EA=xCzquEF0|s+1yvP6R-Sy_D z;5)l|UiAajo2wgQdh{%imQln>$2WTgz9wY5lBXNT*75i2 z)xTE1%}qbS_hsnkCw%r^NMz>fc^9_9R#9Dr5jK;@y}(0ic>Dra!X8>G(84ERBpiSd zo?(nXhp$eYB=n7!v8%wzHs$=>w=5c?V>aY)=VPQNJ><_yqk!4NY>;#}zF_mfnVe=Z z(gJ*~?qI|R7ULWItTdYqmZ~sv&%jq%!dJfo|9(Dz??5oPmq?tnXpFD-AkOO&k4wC# z;5$2Ve)}eAEY5vqNR!y(ICn8wNog*=<7Zep&TdQr@0_~O%-YPKXwG)L03%r9auOZT&p5>6>f-&I?r)758K zp>p=lhLb2~@J)&YM?DTFQ>>7J9E+1FV!l)Re-mZ0T-aMGB{;zA zMCi%CO`SMQG+-cvmkI1ZCia6;xlbv#b^O~q-OdvFG45ahFG;dIW!IIXh) z=X9RHxt))ymq>4c!&!>^BjRzM=LMXkS%H&)bS9@vI>ltzD{w}qTsnbMj%Ojk7>^S+ zb3J#l8NiW#Y5cp)jepZWk*@e(caq*=R6YE}qdpIwdnxdK z0emZQ*2KXscb`Z0eIo(!L7sOK(1~NAE7SW<0#&D^b}IqhauNrwlei{2n{X4xh*I!R zAicHV;SG$LNg_pi3{YN6Fy5obmJJzk2|&1gqo{OaQ^ z)Ntxs%nDSS@Ato3TIdZ#!r53wpxdne-O@5$X?^4C>H4eA`hTyqm)e$Z*3CLDrnEZZ z{6(YMmj7aOuV}vbWZxr%SRUVOZrbc z_omzBXy=pvp}9AiJ?xi*<|2dtMmxU_wf+C+c>dp``6K^d(A<+(ycE9Wa`B3nI$zPc zeeEmV!y&stcMH*d;M&(qi>a9|=IbTKmcNH%pwj+TjJ&zDzYimg9_n0F@ABU^>&Ny0 z>>kpskz=qkvlKfsPeD@UTiA&o|Gw^nru~@%*q1KC ze;1o7QCN{uF7~Xy#s1xJDO%bJ>7gBv9SM+r!~UC-r}!v#SDRzE?N-Fz$|bk9!hNx{ zkNe&O*HMtXS|)8niaP)^d5ONoZtZD=-^y?Iqml_aJcZrOMQk8)+6pN^qsT4@XRhDqkHC*=KTuXUK@Vxy$}d>6PgUO9YZMAnh*>fK1L2?3Qj-FrpL>U^n?5=@j;6_oLhgcnJ=$2bA5)Ex>XMa{o<{ zSEKX}u%{p~w-2s|0DFLC9`-u7C?&X3w?lh1G@_2cj^wA1a3fi*0|>tzDQ-h=OGCV= zFzts6x$cC03v62virlutw3W?)L{1W$C#A4QQPS;ffz%YfeXwKNUz!Dp*2Tc4FUoa4 zWW5rlG}Of@)(<*ehhxWEl18KDTnW8}!%>6T*y*G@jV1n{On=w!0iNQ67m@BluQ1g9 zJ?|f1AvJ@ffc|Sx+ek<)xVrl9-QOhHFfp3Zy<{|26OE|%)=w){ma4kiQETW)wffYb zz8Yc?(s<@?NJpf%MVFE)nW^UF`4-ZdHEXQ8`kxx}q?EVqpBmH45d71}Nc!2kjR^Zc zeatsq>UaHb_OXA)#QN*UJH+L$FMX|Oxl<2QZ7phDm%SXkMRoP%=PguTN-d%1ySDOb zq10OWJ7#dz)my+zscF~8Td3jGx0n^EHs9}mx3tyOqP%}kX{)QX()z~N)Af*>Hr3Vt z_ey)IZTV75>q)D>VpH4lUx`~YjxRpBwh=~)U0aV6v-iJy_VV|PFdFvWrvH`Mi`MUb z)kjys3g2?Mc*RSduV^%{eWiOm z^uw3qoZm#8-_|$=Ev9C=7>+@-^S_5nqtgCWjJ#Xe--nS#4|Oi8clmFd1^v}sRwviK zLT9(W#7@TX%7S>cjJu9et7 zCG9NNVHfiNk98FBNWV%e?CQ0ajzSv%oiIHJH?omlmH?dhz5-{_^*dZQ<8-IG+eAA} zTihBl#A>k6enGlxNNHtYb?j^$3A6KsGmzILMbLo32rWha%s@3g;7yW*t5fcBDw76aNT9fN&k z%J~p-KFSDVu~SO=S~@`s0__QtZyIYM-OM^;$G11iP1x;2oA5_n_e4!~!?{&|#6Q9H z`;cxQC_VuO^pI8`(&!`f`3Q|ZdRjtz3i8~}8X`a1d2I-~Y+*gQW*I8yQNSU%lg1OZ z)cX*M!ipG#&sN|chC0}f^RcuyP5BG|PQcF}ZcP!o6G8?{4xG&#f}T~3UHS3c?0|{x z9x&kMgh>2XwJ!W`-J3x7B9!1%X#vKDqMxJL;+auw_qk~36N_SJ@Ls$>iW!{6hF}+T zvrKT5n9B|Pa*6JSQU~-lL+8KMLZ00X!Ui?$JZ#!;(JW|L6w)T`6?V{q#t@=|c8A3O z=KT>ad;<%CvlCdGbogsDI#UtF2i6dToPgS<5p@)Fy+lCj+JL$@DCRMss{`p+P`v0E?nHQtK~<=4 zL4cu9N1Gl)D!!q29qRbaB_+kST$4Mv(Eo4Hw0-l7M+~@e*yOxq#N`+#2 zs~XOYqlTQdu&88$LA@k^h)p*d1S&er4LMX7#Wq|D5CRSLp)TEV^*mXalHwmSsi&cuErn8QQa!^tIHp1nN5nnnzY>sbiCsF z^s^M3%W%&Lp__+V6~AS2FwQ7y~2~`tVaOZB7I(9`VNpzta$*V2+!S#E~FFdQ2-hV zhzz|TRwr%%D5mDm)P_&yQgN3J3oacLTpAKw8ahaPGX@!$-mT1B?7-)OT%n^^x&Owk z&)<-1EijL_Vbq~Ms_F1o#s`PH`6`2yXc;Wl?4ZVt=88UmZ<2C50D3QDaA6jki>?=7 zRtJAEWiVre425yf6%aIl(G?K}lnY}XUd&bKbYcKO*=!gd3(1M)p=%dAG5EnucQxUK z@z4MeHuS~`^gSeZG47R?P@3+33NydQ1MgA?1{@3B2IO#BC=kBI^bMYZ9yke*Z??Ov zjP4*Pr56j%H-MG^rM(oztU!Un+VTyQ9ZUNonpGT$qC14RJrse< z3UH;7@MadLfmI?*(3dC&B8dBK2$M+^odvs;A%*h~C_Y@nQSPGWqS!RxU2zb2Bk$e2 zqgW?1F1W$C!EfFP4)25J#|(c)Gjrm+w}6d)T=1egxk4LAv4 zQ`1;WKsaC+AO}zmm;+b_2zHGME*(Sk9fkjR7b*54n8ODU=}`Ci`Si{=7c++y|L_}Y zH^tHCE}cGoX=deuAIzd~4+u3ntHXjiH1h!)+=0thG6C(x&M&<|+yv)XT_llSl5K23 zNm{Yff(w&)A9SJ9SYt&b#NqzQXz_MkAWwG<4}20aj+fZ-qD#=NOF6$mc-w7M0#8TY zukb0;C9zIdY-x#;7oOV{3z_4~i<}PhX-bpqao}?JomQ|HnCYVwF3C^fbxG4Mmv+xU;LkX}4s6vjPq-ypql3;%#&A zw}M-m6PLT_5i50>=|ZjIn9}@wD@upq)x+*(RmW#@ULNRTz;#x3ix|;y0UdgH57EQH zHW+$x`*=?CF!%RCTsbp{#|Z;ccB^A7#$~#x24g2!qEfU=;t%;{SYfKah-N4;kFyf@ z1K+Ww#HYEmG-zIC2G4Kjvp2fM&5AKa?XhB>WPOByXq%|;_PFnD z;zW$D!{gu=Iq`3=Nii~q z)5gDLmIMpu9q{I3Ql8U=+v6})fJ4K5UT!no$kN z2P@8l9XD%HICHKG0m}dj0doM;0n-5G1i+yLPz1083IM|ZMnD`O z3Xld!0@x8g2Vj9Y2QV6t3CIQv02n`tXMOMRed~O%{R3I&iVrNQC(_a5UROMCzd4{+5!zajSH0-d)0@5HtM)Xd{(aGlN}ls5>ZKMi465Bv zA7>ikUn&@$K-p~ccEvh$ z2)Gw=H)AC;l=CyhznHLA=@~i%zBT7e`k9h2|NHYL!Nuf(gCVZTirJVtJF2_>!iQeI z`cpbt6g8ot*Zzv{0{tqL_nGJty6+FnKJmn0zG-QM-k1YfF_Th%O`^owfN%w$!ow9? z1&4w+U5v{E4_uV~T*4QR$i-$0R_R={W?(H=<~wI&b6?1tk zg(BWniOTRBDU4V@`|0bEQ&dxiDGhn@4Dsz3xJRJJfLke%pZW4Iv=>y zc|Ztos9Y4|o(JgX1ea>QeEo~|Vd>s^`eLdpd-V0Q;VWo^s}ufOpR+s5iVUd7LaW7w zE7Zxz3b1fRCi-sDAZ36Vg9DayO~Dq}#flpAEQQiK8(&)GYpn2M*e?t38G<+=p)3TR zVrl3o>JPu zVZHd8-tw(o`Ui*gK;`ookDr74VvO6*!0mN}UlYTo05JpTrCUGd_;hkF?_+hN*6k<*b|3g+zmGV+ zx0LiTJoBKf%$i$J`tVrO<`2=X18;kOtuASEH5BFUj(5~{@Z*5Wt>87cfS#K{BR~`& zZ4<`OjW7ckVE4PACt&g0hy%#k0GhrDdcF~Zb{a*^LA$qHSh+iWw++~;A-qHQ+L?i9 zF6?TdLJe5wDa3vvHZ}}cC!8SKHeYMS?i!p}h}fRw`vlZ#LWk1TO2|QP_Tti?*l_cc#)^Tle=(Sxf^W}V?UCDAqe`Q z2pl3VLg#LwJoe@MzU#-I+D0ApSM*luJR$00HLwezl}r?nyNgX3&{T9-LOz5#B)!o= z`CI9UASDY63qvK86kvlFDbhaZpg;o#E-tWv&7nkxK}YRDJRRDLqWyciVV*X8DNR%X zSXQgWU?kTe*we8(@GS<{ip{KCGd6+9-GCKa(NM(g^zMB>O_D%KkXT6@mU1CZcQ>ByMi*jq=j9p_s^D)h zI?RREA)(l>2ZvgWy+5^l`o<>8N|ZP9Ti_j*A(|=FlLjudG3-_;;fN5Na2|BZx8c^v z8bK~PZ|Znz-Ke+H*Qg&K_zUE*O`*fyFv?w|G5U0sbzKc7vq3Zl#bYoeK}u0hDx5|$ z-WiQb5aa?03wtS%mysLQiw7M_3ak({$h{pcinkbI>XZ&zZ&-(DVAPo@EN~GuXaSzs zA;CT_Cy72q-XfI<%5cHr-Sw>vMh0{iqJ^$Q05gji*9)1 zDH=kIBxOLmlo-K=a5u_^uOIVa59T~)somn}QiAOdP#3ehJZuz=HE4;`M^%Ry#rL48 z8#zOXQwvBV2lisA#`qutKcW~fkroP-snsP9C%OkP=gI1D<_RKiY^k^fM0o$iz8W6_ z;O9;Y`$E>Sm~!gf9HoW1!buB8@!V=V@zv>)S(1g2+Vh3y|LEgt$g%H8Qr0WjPWXm!DugV(J+SpD3pjnba%H(MWDz~M5_cO zCE|gHCCxGcr8b0MH%zHNZ~t;He|O3uh+J-<6hgg%c;=Cm8pr+daZ-k@n*O;q%$o%s zxxVlqw$)jNiYi1mx8Vb!rO4}2|BWvycG7rF5-=9qcxoAxFwdRBy7A{ifo6vR4hqla zi5C}wvw_{yC4f=agFeazv6cfLmOaC8cEgPV4-oGjlWPvR>URs6nM<67eDS~|Pj_pe zwnLnhpsKrEEueDinOV=u+*mt0!041p@4))A89ZseA=l}&^Y(+Vyy9s^%{?w_{XbYp*n-dW5spVhHV|;L zyZAH$neyf{2vdsSBAQqjs2PzJKgFfQso32v?&gItyeJU$C}b?0s7+N$S;%jNV2z`g zuYfoZrVw>cdlN!lihM3-d!v03JMy>S4S5`08&h#o zlB;4ghz){d6s?z1ztwsKZ=QAZEAM))I|n)oqMim3J+8j=y~}&K)2F_suM-pMhtAy4 zC`zl~SZmgeq!ha5c;-!$`qR{p0cwpjYMN&Vy9#g(OII-(XY z6(8D-FT`jp_OS(Z#Xh?Bt-5#$*Or=|wij2v`ulOsbiCVXUA1RmH{vl|La(YTwYtma z3$IIS-}?4gcg#zzf8XPl0jEbM*GU~;Wvac-E{#5y-n;8g-+L_ZPG6-irJ~VKbyY+A z93q@?Wbn1RZ|~|bGsP;6HcPug0rOYFl9lHatiF?r+!B+uHFCjoYZ{O@?SdM z2`EP@i&ijK)4Lpa`=ZZZ$6KG8R)3cRZ#{)n`lxuTEkbp#KmW_$K4MUxsi;-@sd%aQ zUV8h`r>3P>e>uG=qhf$GicQKAz99+|GxwQIoSQPx*++-fZlHryH0j4;AT7_(NQa;ied#Cds)F)v3KDBq1d~kb!Dqn*?%fF@kMAv z=qb)kxfi#QDD4#G;z%UV7Sm9kFAwhyC8obPLBZG2d7{9LhatQO>9S%cme<8BRdJ%BNF-$AYVc>M7RjVJb3ih#$ zA|!7pT)pX7oL1#@0X7M3`4iAy+zmlQXDM`!!@bRmmZMqt1|X_Hr76#t^29m@S|Jv( zXtj}B0$Bn?`T3b*zKJ0gdvTmb9A@PKaVQKGtlKQnLW1t@_*(wR!)tSex89Vjq$F(r z@FQ@voWhq+m={8Xow~-NV90#s;fbPXeD3mkAV`A)e$nnVcd^DoZ8T|EhJFcO>5?u* zlz~nOmIS(Yj?xiW2q}To6LI_w{S66pr^DFr3q^5sc~H`5-NCNzhFo-0ZIzu|!$CJX z?`6h<3(huWViOsA^~qfF5bKmAQ<$j}i>whw?^#Ry8gYmQ2#fP${GG}-3)Adohjlo) z>+I=X_DnB(2HE2$Se3{kUDckh7*Y=pJr_->BD#@=+!Rk^7g=AOy&{1US z5!O3Fklj~49&wap$ZZ5avYi-5W@;zGF491oh$U?WJT3%_ZRh~pp}+7aVPm&jKOb&= zeYo}U;nv%STZ9icwe9KiRob1PkBH+{h6JcyaF>Jk3t{7Q5}x9yDwUJ>!vu34_T2>? z>0G07{E__AbVodyAM&H$F34-P9F)rKO<^Y)&L*%o;J(5??iCDdJ18^ZdROb~V1gVkev^{~bzt6raLxQ0x?b3+xq&oxA9g*x&khiFl^zz9pZwMIGZni^AERP-=cm}c>7}PX#U*`RBzJof`B7eEAN^ZA z+v8>5=w)B5vl|h9j?PZ;OT6saUiLm-_Lg4ubNxN>+3jUt?q#3uWzW{xiN3>h_65}` zY=F*A?a|<6Z=$nPeV*uR_MR1Qpcrs_gd|ELZVP+4Ayh30uQp_!2o{w}Wyg$sDa3}NG zzBo6jn2*C;shIb`d|okcfw|>$5q=HKeH8N&n9~&Ve3|uson}66z)_f`xP^_mthYHcdGmKika#)WTtSZI$NNasXaBBCETfPlq+Vc_mhg5 z>NNXd5vClt?NH1)Fb|k5+~Z(grkD*dx11x~seMj|nfe2@g%-e{=tlJ(u9&ILlN2-6 zcY$I?FpuBm+yC`Gr=;!q5&|Z^uI<8_zX|I@rI=sg3^M+cgf#6O+ps4<^QS`CNfw9p zu13LC=u;AVi|QOq+qpx1y7$w(H8lyI##~OH5t5C`5?VlnLI4tZ;@?hlxxzXo7MjOe z5e6y`@GZendYswGCBd@V{KcoNrmvdr2%$-&Mt&lmH#Q0f z4;sk)U9Mq{sr)>CeWSxAtK=9trXF&4fx&o<`5Js-OJ zeEF$sHW#ZWhV~|DosP;$at%a%I)g%TECoQPEw`hW z%efRY$>Llp5Z!#0iCQ4lxGz7#`Alob5&=~FD%)sga%1(BC#ZcaJA*iSd<}@Bw|kqT z5J#N%>j|I;ePxRP_5H`h6`eH_?+-ESMMGYTBN; zcz%Ctp3A0hHE||dX+6JZTB@Y&mpF`4l%AyXNG=JyEQ-kyJ(b}}32yy$VafJ+_z8%!0zGth_C<^&!&`E92xx5vcL0$3l9;?p`72nO> zcozY}6+49sQp^fk0`3BGZ_RBp^ z2)P+O_SDy$D31%Yx8bIMiM%Cgqlj<%t2Dio_g~WIkdE(G~jo|Gr`4C4F=A8M;~nmbST&8dqn6`8Rt2vAoT^7||FD#`%80NQMh<|riD zFMgMk9^QG9EI56QNpH@G<~Tn%CxGG^RCzj+|KJ@8WY#;v+2x+l7avTiSia5OeLCe2%1ZcESxh zayA0!%>dr|a@g&$3ZfzE8X}eL*!`2#=!iT06_Br9IW>?yDWu=Qhs9RWyjk z4m|41L-nt$1K;}c^yP2BkF;h$NfIQ!N+27AwSKG6*>AScxqY0sqCP>V%Y}LkIyX3u ztRw{mAttnc9)dSy6;EI9-4pAkb&=xl3(xx8eC0=OH2&w@AIo+F)G*|x0=cot!f%?_ zcu|+#fH>qIj<=X$P=8hLYaz3kv(j2D?JW_%D|#vM@pQ66oMyP3{m^?ZB)D)oqelB% zG#k|Vg2~2J61izabor~GryH9l=(KSvzVQI^D^lM2aA)p}BIH zZuTJhiSliw{G)Vc6`wh9t1a)^zRS~)R()_e`w6X|t7n77Y83U>BJ@$x^CfnL^?l`H z=&#bFuD5snSI&y9mw#G}Fl;8xPgTC(^V_fOzvVDcS9L8xm!(&95z4WTUR-}{VL{aW3AqA+C|i}cNl$qGKW8|r5*Gb#`Q-vdm8+T z02|>>ZIHkKfA2KIeYkmt$xIbI>d^G)gv`X0p=29dY|bw+(3cwwV(tXGDueaFKU`lz zpF?~Hc?j;V=fTt!F3+0Mhq%1_7`1L_EW$TvEKFu_lr`HleGf?DfxcYCC(&x9xD7*$ zyRkS~k^)G_IT`w0j{Zovk?wrr)ac7ZKjI#J?Qf}Tm|bfPf%c7FG7<4 z*VVqGNp9%#_C8Zit1rcT2U*a9c7RFQeAM%3W6ug$j5k3AAjiv{!fXUgQ`{+>8qaV= zKr>~9Iz1VNkh}tG-Z;Yqnn~b10$8^KtIOshQEil* z_RqDQU*dqttpt1roxm%AiRzkUUuaF4)?W3is()Yo(*8Ng*{FNyq74?pUI15G@1PYy zRrj!3@8U+32##X`>R7u)LD+~+^!rcXS=a3>goD6{sHqRBotG7^)b{9BI11;xM4CUf zdTMpFRxj2TH40ID&7bne{RQTdKIJ4XE6lyid%MkW<^FKtZ!A(~#%IT-rlxawmYAgY zl(>=ci9?5FGHy;xiA#*d5&{MnJGQ$D`ckhNPd*e zlpe_fl9|#YxlA%sdL+Y{3YkUqM`_TH(xo&A=tu5krnD%3vJ(!Jo@%E&C{5KK1T%%9 zumqg}gsW zLs}KFtP)VP3TwT99zA+cHL&2`7Oqq&7H5|R1q#DiOi zYsP1AHym@yv++PeLn?2V&{NsTmXD(?N%N5fx+R5PWW(20IRA zVO#l;3PJG! zCc0s4RIp`?Au>?tOJ!_Ylu~AjI-pz>UC_ZGoQS3)xiUt^a&fqW6m7eD!5_C}dr6 zA_jQJ39K`Zi13=>)w|(}pr;$_7KI?K+yUiEFrye2;@xsfZFcA|-d)ZKyMOKMXQ4(efpU86zU05m5hSRr&@hERHHb44(BROkk#rh+!< zj*cFt^85yo1lnByI#eHn?z94O${1l%hx)`na8HSjrJ&4V&a+b+#JzE) zG#AjvO-vPe+MLKwmu7TITzYC^9LERx66xAU4}3V?1#N4(tMx&7>FUaZZngPQ`Mhvc zXzGEVLN5%APD5%mgQEFFI!rVdCFyIDqA>880L|gXau?c7 zHXxrOW%Y_?^6Df1YgT)l@w#a40IuK{y8eAqIRQZq7y3tubAzq0@6I|_B*u@%=4%aY4BJ^=UI|ivyw%f*8kvb6o(*c~A zCFKD)hK+CASfUi+#HSdXRSxNyXD<%bv@dWx%^FgQQVZ-2;*WdA+3m^Trg+(@+!0i6 z+VHmGlH;)j80K+l5GNPi)DCW2M=(9TdU?^yU3T#2RC(!{C=cje0^K7}3ZDlR3>Qrg z%7<_Zr#vVn!cWVoZ`aB(i05_FX(^8yvL1KuYnX#D>t7E z(PS3;1dx>&4}B$CScOJzRk%bMeeVPwy*Pbz3X%)ypmqr^kws5LD;Vb;zIM7Okt{g% z1r(ZzD%Ul2-swqwwb1%OEhSwUWH76PY6M(0%C!q~1vO|nrH)b;5wOhsH+FfHIh@nb zXS=sLP-{-EG8<)}u$+cI!@94X)xLtr32Mih+idtm)+ zBdyEPuN}6{GtYvV*3Ibmu+BVNXP%=oKcX|w)tTq%%<&kfEmnSH-%1iDH{;8m zjvWh}CdcWl2=HfdFmcwE#o_hDvfOf&`)aM=ijhV<0b)tS2S&QS&s^$Ab~-Xkts`+7wV*Vi*p^`?iO-wNjs$CNGOp1sDo!>} zxT(}}Q>i_=bZmyTC^fGn#W@~?r!wT_xmZ?aLXQD3)4Nx{B)&kKm68~n8W+z%c!j?i z$!BdDw04H8t>K>KvK9+nE{WPlbtKY(Uy|8X63sP^r#XvCi@2Mxi)2_bW*s)zw3z6I}{Q&f)|szl0%8XthFso8!|{;*)w~ zWgTm#!_wGN@La@qscTO9_1AmhzZZUauEI(*7x&K(CPTw{t=tYC209QzzX7q?&whSv z*YC%Ttk;Ra4IL}w>%07X|M|gNjcoJE8$Zvjke}#&!?>~Mzc;cDEpMuRu0q~&w>7iZ z_g@;>qFxg^9;=Xl51Kgh{PkZOS-YV137uBSBW7Lq%zNh3M%H;ppgnJu-0b;zd&*y{ zG_p?|rE{NOCFgxMzVElKU_a67{2Rws$>ERx*(#+q?C*T>+|f?2$pM=-b!^gkzmetc zD{N|cO`bV+_?a9oRjm z^J;laRy%`y)ea*Y@KDyfmeum)DN}xWUjEF;`kubJYRPK(&TdaNIs7BiYk7S$!->^$ zX!wwoF)KbWvKPAyOAlTnztU>sU5PiYHnQ6W?YPgnMjq1P{fDo9|D=(*?2o*;bd7A? zoR@p&9UmFlp+hg8Ik84Ap7-+M_ouyQWC<@`6>{TR`PN^abohVyiIH{repgQZTDi|& z|Ngfh-DqTMcOQH5g|%`w+v@6otj$Jt+L^ugtF>~%GgVXF2r%p7FtTM9n zlfj!`S}*^Z-+q5o^-?42Ixi;ZoAt7J#m)m|8@@5Jp+Ek3Th}+_m4zYmjK6+mWOqdj zUU~Z)^5RB6r7ey>Vq^>MYA?O=hHTv1^PXjg5q{8>OESNGLry4}{m%6-zGTD@_2En1 z-jq}Bw&hMtL;cTv=4obsQ?57#KX_~Uo$bNAotv>yx{Ktlc zPYw;(U}Wz%?R8a;w`B9-Q&XP}0lrx+KC&0SCEGFszLOt8`)dAH*Ig^#l1Ci-sO!Gp zUpKO{{=<5F|CYSsx>?zy64n@5qfOoBgl&+sA2wV&&Vlgpa}Jz!Y>*FSz7#U68|c05 zNY<#88|1w++U#kx5dEdg*Go26ZIEv-?a*iaqrm^V6Yuv3e_P&r{jy)5t3vx4e(kO& zir$tRzIo#QcON`zWUsDW-gwp9@&gTCUoh$Lw`hM2?ZP_$(+3^Kub{g4ZvF%Rv zdPnXur@^-0Kb4Fu@wK(1i{Fty{_fSdUH*A!fAfZX^4dG{_EWFy{bUpBv#jfe#Gl@g zUt2oQ(WNu$tMaXg&As21C%*XH)#v*kFtSmzUKmpHuH0}$k7(N-w6D!4+H6?!uG~21 zwYbb&;CDl_#|QuXuAI^QndxCO(B3i|rB`>|D2J{}-}2QHpBh<2<+*#uZIrt&58i*^ zA(XfH!pB!G-zc}ph;1PUer{yLp8kH}>5cNOtp;ZoGi}?b)|URh#68S1ycd_|k7iHfPfA zr9I!1J1-m1^2ghLHnK4V-=`G4C+D`^kll55wUPa_bm#es_vDw_PI=t)(K|-=<~G;L zAKsIHeX~i?`z2?MY(~L_{D{r+y5~Btl}2E^I?`uSC)Z{G-4cMtp-7BvU?Py0S$*!V4SO2DBL z_y2_cvcAKN8`f=+k2Spg-L=2`WMt>Zhy4EQ7J21@iQiw>5%p>NzTcq%TV*yw?(p{8 zzZ;qH(QTV1Y?X&D|I&HGu`_7j_n%tv=2m%gxiw+OuSoyc$yLw%u~ptP^tbBFgJ>U% ze(LqOahp8itAK;kT7e$lpPDp($~JlFlPALOS&s2#WxMAde`lL~;Qc?%QTKoz4Xa*X zT)j6omxsPo!vcy|D(Ns*>cx*`QBw==GIwAzr(8d%J;U* zixMAQHvKHdr;oq*Q1ag)|F(B~z`A1}8`;L&pAC)QA*Z&uux9zD3uu2$KOK4h4teB) z@XxKGDDT4$m(JY2L%#6b{I3HucNp1AA3U|a$xivRk2WolXPiU*uE-9!X{X$waawBs zf#;3vLeF=HKeSW+d2qW^*-KEKo5mbnylbaCVvu#vo*#aM|M1U#Y4*NcHL`Ho;T(*o zxr1NHNPS=KlWDoW%L}N_!0fVhbKaMCPrK!apM>;UoJ;EX$@{Y9jkBM>l!5rBDf0Yl zK9JXCwp`Sx9O1W(%59eQf&BdFuP1i8>sO55t#;0O>;t*ihAXdm{2kQys+0$=-T#4n ztjv7h_3J^O-(IL#(rTCd=QlsJNg0Upnk%yhkJ=?a`SzS!x{NtyWKp~39ay+aZoOhh z+wbEMe?)5O)FZp(4jGSco|cXLuF7rR!|egI4cF|EN6TJn{0sWW%9@|9ZlK`W?7>)CZ^kC7%j-X!7yfwqyL>u;h)f zkK}uXI9uPo9Q`${!cq0nhNf4UKi(}5J#kfoB@w)>j|;ST=u~vup1@w3p{iEmyYtL~d{XJm6Jp<4E@C zy9qftpU7AD{Jqt6`IKKL>Bi?jkss}wQJC2W;YZ&8Jp1YsIeqQKb}OsiFfzl(51tA6 zR6cs-`q#$ag7&%baEo8YeJU4K-g4!)VOK=57bYxjzVcJ~z5%PdEVv8(@8;53u|Iw) z-+um@`Nm02BU!{^U8-Y`D91)^)n8^Kk9c|-iAH$i@~!; zogLUDk{xZn^2h2u^0@S%PZMV0`@Oqg+>^1N$y=WZJiOcley8uU*|$FMnY`oK8RHsu zMfe9lI@kMy&*WKMyOrBQ@cmjf^yH0K?Umo(UL0tj;2+5b9pBzNW3N21xnJM|xBrRp zV10v8kMEUNJ<;W^69>@#26t$<=+IudalyUM%-e?artUEQ-hQ7vh^OY|rVf;PW`AquE1M=YqmxacB0Q?tp@;~tL0eSoH-)`F6 z65sEtlX+9GKPbzFWf$)J80~H8+}R0Z4$2!Ay?Eo=qgO_<1pxs)pFb!M>@&Z`#(40X zav5acyoL6zQb}Gb3%juZ-Bldn%zF@hR@~snJe2qIRWEA`WJUsT0fVQ$MiV8 z+X{Z5^Rfn`R(vk^KKArCD}Kdz_T^jm{(1IudEwdNw>po5{*Kcx>@XgYd-VuR{H6S` zk>x)b@bY-gnSboEFlz(-n_MNZ&LVn0Gb>fWu=x_5w z4GYG6A-{O{6JHf+WTfjfG?fCqmS1aYGLSur8UT+o2LeozU|Ef|xeP;EfcYgQ*{B6>^3&X#Zf0(;2 zYj-<*AFr`|nKJ21`Hi>s=I!Z)^5p;d%(!h|%C^)s_e-HIBH7Z_g}*dED$lwhaOatH zv^V>x${)uZm2cS9dFw)3P$Vnsx!UsbQTd&7?bgTM1N@#0*_rz5QMvT)4ZV(kPWJnH zu8%t=H@w>LW~&?9MY44d7@nJZOtxK!?RCW%;1h3aboH0V6 z-_m&SsUJ>&{_PB79-DexzTv^=Un=|)_1Ah)#hQc6u8HoM`3oN-;h zf1UWYZ6v!QGHlBoC**E9Ge7e`1p5EhWYfmYC*-@ge;VAOFYx`{xuoE_ujHu*C#>7@ zHNx9g41dq|l{|iH|0iDC26{F8=BYhzeSc2g^4e{^R?XY2WQ&1QSh%gc*{4}o|KPHUG>qsei(lmOZPT) zoRmvH+`T|v4SEF69oK66N%_|JUwM6B^BW@B zqzx`ttJCs`5jXyP{Z!EVV5i;V?mR7zdZNkVfY#`*PaX9?d;GLKKBir>KVJOI$ol;< zy;Jgc@{jYHpXqQA<452PK`qvOC*NT@SJu1}_^G!ZKlo+G@8wTcJ@H)narCFVS6#Dw z&iC@TR*@^)$0EP0*Tp=_s^p;Qm8OO7V>~L|`pM?vD*49=`&!I?0p*V?TbKKFm3%&= zdwFvQ+Ox4^o8djr$Q!FS-Esbo&`5S_rgOCYjC>^YkEJIvZ;WKDzxl_PVGp|h+N6f) zUwh@r{k}aT|5S^IsJyx_i`?}y<%q+jTi7rv{KyBl8Z z-WKoq*Du*W`*f9@JnPIf3Gde*E)Txr+ba2)t%hw!zNwOXmVcOg6W%+f=l-$!RF(W) z>E_vO@D924)Ao0rtddWETk^_r;5})|gAoaM?>ztWnx$V=$)=wcMEK!7gW?hAMpOVU7EXS(khp%|=*7Zk`UQpXN0`MN0_+j%~zO0g4v|3|% zp|VQeKk3y~KYURoPj2$$xj}eeeWNJ(uAA44gRc3{(tPfc{o+w8$Y~-P{`OwgeXO(P#x}*RHQ)z(L@?F zAc{ui7*Zrj10qu?%`~gi*@xy*nKG0zh6au)8Is@Hd#~f^+xPoi?|Z%1_5Sm|?dy4b z`mB2m_nOz*Yp?q}JhMr5Ly-UkZ)SatE);;?xI6dn7YHELD|&x*z5v+0S7%8eOnO}X zYkZyn3hhO&&Uqt%8RVzM8(#|`;MuC?{jUU|eBUZKIadH1{ntrny%a#`!BdCcyb!>T zmYYQFa{-)KePDCPGXbm_TKjS!LZ?p&W0ao?z^~pVYJayb~Y;KK47!?0?@Dx+{)z%z;u7ONd_0CBg%dle@_5s z3&m6e?h3%nbTWI{Z2{Dt(w?AqQvf?+bjp8ZqIOUfu<+hB0hG`74)eVtfR>9!LE4v) zJ{?_C^3nxhHKO&Z&pFf{`k-RaSpjT6DDpf$MF5wB=55kS5jarW5+6z?|fOO;as zkaqigARBcWTK7#^lhlU zKN={@@<#Ew3^vgB6o79?WyP>fsNRDlM|G`7_4u~;WBwY{en%URPjwYQ?oh=a8&?Y8 zMhG!${4xO?GICU`bQHk3s`V=(7o+^b-q9xZ0;n#1@0dRqwF|ii1J>ILz)xI z9?7Q{{Hz3Ec$1aXY$<@#<6i!Bn}+JQF__FX6TrchTWa-81R!gFctfZGDi7(mHpLSK z5I1#lkm`5=*p?lWUojTd@5I+_N5=@@OUB)?q^bbs%c`BN86f~I$w!;}lm)=qvU-<- zf&g@t(x0oy3LxPYIFBAAfLCo#w1y2t{R#@lNemD`)63@7O}$OfIc3+4yFZ#>in7d< zMS><68(qKXSzQy%x^|{!oR{wo*($6VzL?b}sX4 z0@oF6e&?np7{7A%6Cc+m7(DmDn#T@JaCMHKciWsMnBkoBs0W(hE8%4J(WD7R)h$Up zHNFY#tfbx;jBWyL>$cO$3QgeQaR1}yflY8{rome2o<^{9o!sZ_F((^AS0-hiLs%o^ z?!GAgWltjvsr4vw@M?rX3-tnHT^qsj=ZJ#LMUCKi!a5?wx)HW4P1xpc+6WFU^>akW zHNtR9ve0)#BN*j|yuLrE5dsZex=VV#ftIe3^7C(KzTm{XkNofr=HD-o9RK~0gCZMVLFZNaX~&%(dJ*Z~(mSh#!vf%uFSuZ_OIvjyqL{lvdO zv1j%@{gTfx^w+#6?dLy3_(a(B##u7nqJW}9VdR{~E*Ufj>C0x~m$#w#882%a71;&+|=0NtWl@!a@w zxOmvV@Y#v?Fj0e7zcBb6e4P|4o8wjn_KwCq>S!M$!CM^G)Km;I-qno_C*Fc%;Ocu< zHHzTgkR=`}M+(5+=j$ewf;^D?H8|h--YbyzmTNvc@j1jPcxV)dJ%lyRH^RQ3x{cm< zDj92^JIWfaXT79nOc&-UT!u^W8F>npOR?$K=I9+hMhZG9yS%?4!SCw}_)Sj#(}8{- zlg9LOgS_MU{p^za+r^VZpaY^S?bh3fMnrZAGU#=?CCc z9Q8y1l{R{q^iaY~y29@#DuLm0gkVbdFDv~}HbIm;FmjWW#{T}$vzaoljhorh~+c?h-EX_{6}1jEA#j7dBflHhQH?xf6p8Ko;UnGZ}@xO z@b|po?|H-D^M=3Y4S&xY{+>7dJ#YAX-thOl;qQ6F-}8pQ=M8_)8~&a*{5@~@|JQi~ zeoM~z?QQx0JWmjw2MEszgy#YO@17t0-#$0M@BW(un6rYueiWXoU?dmO8F>rB{BFNE zD_YAo2QEib=NZq*@Q=pM`7`f;rgQM9r#@Wrh1Z>??{b+C7dvgxl*}6>ajs^PZS6(a zV5cNDOyw%c8yU7XMJ)}?4c|Jb4ofFfQ&nun%#MMVtp_zW+(n(uNQGF6^P7y3ZF%dJq5sJN^YA?k;h73C;Q!fKi}38FxsOS= zG61K~z(0RE=;#W`ILIF#As-?Aa9*_9`k?>+d6a9ywXH426}E;yPooi zF5wwc_gOr)xYJ07{?|XvVCd;NOh0QIIq~Lr?zv%EfV@@?*RkX>L7JgwqmszLE62#e z=QgtLc0Qxz{1KjR{qkiRr;mLZe2yHL^j3f1@d8Soe7L}`U;gIA=Fk-X8|0b`SI<@N zrOUapaiV*_e3wG^whdExut)k^0 z#vbaI_oiN2{7dE)S*$8Gwry@LE#D-upw) zIZb9h;Iv#f|3=9+US8rh1voSn=acjGKTCKg`XqUv59idC0nycv5?8{+Yw*J0O%k zyJPP`oIao8zdgeC|Bn+65C0OL#OcGoq)%e~$$!zG#QBGR$v=t95B{b6NL>Epzmz|T z>yP}G`Xh1ulmAlxByKA{l8!SNBg7XRR72E zSN_?4DLK{u`@{dy{^|Hp|L+g~NB^PYNBtkm^Zx9Aba>SN`{jT1UrJ8(f1Ey_;=et@ zdGH^nKgN$g!~Z${{Fy%dF@90<%HQ;dKgK^g{BQaHbNr;_zn35UG5*r=|5pBgj^A|r zzttc7G5*u?-|8R!m_KOwZ|w*En15*bZ|x8Mn7?TGZ|xWUnExm_HUHuIX@)=MPfGrK z|M_$NrR2Z&zdz@1I{x4Kukbq+${jtGq&)ouV)rx{nJj|-(h&W)%8fSBPx%T}~Ek^A^<)AF+nEZ-!)e-Na$x z^%5}Qh2P}}=b>hjk^k5CIGjKH_c6S=4}C&I|N9?gB>gKTn*Q@W3nMka{xu<@pSP1cxWPYZvTp%nvyB@7e9|NcHoAy$NG}u!`X%YL~+o`|9dvB$hw zd&%RotO~sgS5H}q5Vv8G+v0^6Si2YQW!>E>LXe9UAtLM$%kSluuglMf5H6FZTK@QU zight-gW-W95#sQ}bJo+hgtLkx+zw6~IDj~wo?g=%d6H%B=I6EBd;rl}uNFIDHiz}W zzk1!w%>xL-OH!UyKZ00QAJx8}P8>ko7$m(l$m|enuxRbM{RIPv+m|xt`OOPvDc><1 z^lP9fF{iU|<&+OcSbam+UYBHv665y{&yARr!g_IGs@ZuTQR2|5L)*p|oM&|;eKL7} zUX<{ht9#xiX+KNDL}Bi^kD`Ql^y#s)?xwTG>;D)tXs8&Wa5=}dam@^tUf60^$@yZ$ zF42^CRk>cQJXZFt)KD=Zz&Rm)7e|Z38^J2)m3YvSmT%2e2};#PE6*nols|V zoMkiSit?6vabi$Jb6ki*GAqPkYQ{b-bk)Cn8*!jHj-{pH5M=H)knnLxmYH`rj+INV zF9#B#vtNg1O-N(uk6g#PUNMlkB(p_5TKx=bo6ENbKQ#&B-1%XV8mp68&)lsXzq&{e zp-H1>UA9hTg^GOLrj#N}obKk3&=mcr|~abaU6i3*Wt zN=j-cSl^NdkEDnP`lp;sJmXnw zKds!eUV0G0iM@NuU*`mC#aPShq7H+I8_TwNg=`FAk-fVdHYW}u4j8|T-Z3(Qb)|4w zTvEdz;-sox`FgEXR=4tkyQ#*5iL2r#GWF$CShH63v~CX=OuYKwGN`1_msOB$7d1L} zFmXfrn!#1CZLEYv`#;2wkR~oWOXVM_3}M;jFV$~xmnJrhi1wJc*`2j9N>HwTN1C`1 zS79pUeT=myOk$3ngbZaRs7IilD+F4mbQvKp|?!!oy z&a%}_qq=2@rv3Sb7uJTe*fYJBZ?_*poPKq5-n6hCtkS5&!0huwaK9IhXaCpxab~>x z{aZb1Y%*ZISi4k=`k#>xA%r-De%o-wN{DC-r$hn$Xikk=bztEB^w`oieKamJ4-@{M zze0Bgh58EdKcz??JbnvNxNmI^U~CxtgAR{nq+-$jTyeBIO6(2kxA*P5#}1Fl^VBvT z?c*2k4vj_c4M2rXqLTcd=?BsK7J?9>B<4blruRhzAw=|jH64!-uhRP}f)Jt==0Yr` z_ho1>#klnkl*L?#m%lRc3voW?LTsh?fdnDMSj>fJg}D&FeP-el;wj99XoI;ByXk!> znvyW0?~dvG3egR7Ar8k}i0C_H+P@IPF&E-2%!N1rb0Ox?`(%O;Vi4v+w8C7712Grk zi%(4YLX5;*h>n;GaWv*atfTkw1R=x>%!Rlcb0N;cT!>1T3$eO}(MO2aF&APG=0aSA zxe&E57h*>>6Q2-YU@pW&%!TNSxe(`IE<|S( zF&Cl&=0g02ze5({3(SRh4s#)fU@k;A%!O!$xe(Pc7b1aqKQf~N^Ou#G&N~8%^Y>-y zJpYKs#+^gscPBwf{V1I>T`e@e*`W8Pg0b2u_iIVhJB=ZFh!f++?BfuF{2ZIZ!59zKfWL;^S=DdT7BTxEViT#@P!mcnW6*))jKx(7iskSn?_R=kR3myyfnr!Gg$>a}4W1 z_v9yt-TS)S48?cq<&VR;;59n(yHyj?M}70|1G=waq~w7eftuzPgh7*6>76$)qepYZ z8#UxVW6x)?v^=nu-dK0s0O=e1@~X=Ed^og8LYh#~L-!g5J%Qs3Anxady}PdsL-AE{ zt3MY&j_P3rX#mQwN9bOyQ$o(*)kX01)wJMwE+{>=+%Z+vw-A{i zliHmz*@9?JdZe2777AB&M_gj-SP-3awTAC6h7m1?Iwx%%XF*7o6T?|0z~8>)$9r{S zq|aG6_!-@UZk^%Ybq(d$AS}EvwiK358ZEKD1C@`f=s2-CWnjHIB7<9x^xr_XYqpeu z8oO0lJ(&G(3kW}4uyXhC2RTtiicP`y`N};>bpwpV$lca9oek6u+#{}x6`e_ z_aktZ9&enP^$Xcu(f1f4R{^DMW~X<&o{026mGJCx1$aD_m6Nd?it6imTF}@^h^UI4 z?=exsf+%ONkll*zM?ePQTaC)gd~*FFvJwgp6efh-LibMR>L-4cs)G8#mgC*up?jxA zcMFXjs^DQ^M!HHYYA z&w3lLfj?1r*7MPcJE~z<{N!!Mi%|KfgmjH3tKr+7!qw*C=w7Gv0+Xc@HDJ>0=GYKV zwciuzoVhjdz~u7JV{BCmBKOk=c61HgaJuv5{V`M?OGa)!RaygNjbT3(owWG?6yN_`zcA|(4!ZwGj|q5Pz_DgHUjn;lm@Sp1f_6NKUxWXW3FGjpBV5?(}*9Dx%cpVUj z(UU>`bc{n8BY`iXDU%?!&3;6B~=g-9MS_~4R7^|6io|DZW8{K1~^x*{J`QME}zHnWjh2`Q5 zvg?_7p7R{f_m>&u3)cl(8P0aV@+lZqvAYQ7cwNAM!OZjgYYeha;CX)!c6Y^mHiH~J z%!TWM9%f!=<8=Y&Ip&#ozK_E^kU`Ey>@HjvOv7BbE|9_g@VbCqiRX3Uy5J_m*?3*R zKZyA@jH@u(Vl-ipuZH__F>T(e{F<$O4^Pi(MU44VHl3Zl|x6u`=&&kcU@NN#`Z z%F_1*V3`xH`P~HB6(ElDoO}x5V|$HN{!mn287|f#1B<}(XOCS<{46y84o@jMRRn3d z1GbsHqRLCYdb!?Pu(LckWNq+Nl>Z?28uBeH+xx|0g`X|r+m7#BSPYNcr)rD~NA)Qu zh}NkthAC0|WVIHc^#_q3Q0h|x@4X5QuZ54bAiT$KK17tl_Ocfdcg4|s@0#W`HL?^c zeDs(0#i%2FHzwwfDg*Z?9krJCQGLkqE-gTe(5VtC_3k80$< zdGeL7J|Cg#L}aDZP-JI>ZC!Yy<0Et{4b@wIgN^d%n`pAT0@RO|1$ui??J*+JqqhQ1 zZw%F+>5l9yHSgMY0V<*C(1Ln}RcL)TZpmR^P9?k_^m^yCh-s+2-q;V#u7tEj@?RGX zL-oPQ)Rq*f0;d9r@aJbx`8Le?kjt)u?1FtG-n~HUaT{NYHJmD#zPnOlm;;*MV3c zUoz&R{7hCkedHavICjB;?_#qa5E(UB2P(fKIT6?2AM3MzKp3Qj*PbdPzxP@YC0?=* z2=$7kQ^u5$0WgZcX}Beli-l`kC?$hS55H08+CCuo3rR17Qu3s@jhFVbnGcAl0P(4J zOURjK)=59wCqE#Pf0~_}UP8(YZ%%3-%YHzxFV@GsEGBh{^KX|;nErssTioz{NilhT z>zoMUDN3JRc(kwLEqUTzRN?$3fa2R>9Jl!`xwZbDAzyXM1A+)%nbc84&bn$>;Mr!5 z!p|7v8eBvg?lL;%oKVRn*fQZ+az&)BSi?BhCS~M*U~TZ}Lefzzd&bZJ6ug1ETq;q{_Vl(&(Iphr|gpl)vOFt+oZ^f|Iv?N$u1{;iEj*W%;BL|GZ_% zER?^D1%;D0=96bb4x2n#I0mH;Q>A+H$g~+!#O2EqQ2g&AoFekbl!~1TCO(~k!na3g zsOFK=KPf)jx{-y-!)M<`mp5egqQ~mnl`T;DSxD^*eNFOz_O+ecVv6$b`OE(DD^g1R z$o-JDC_av5Lu_F#IptY&?W^zN4~WX;sw;lJB+YMG$wr0fARgS4to@R_vr+AH-10dn z{`<=s7rY?Vp15(mVvxQZ>*|?%pOXV#Ik>M;LFJ!pBX#A%GtyyM>)Lx^bCG@;XVu?6 zB`wk<^Q9L!lkE8Sd(15o;!yHh42&Yf?c5=y>>;s~zlTmwPcXS{6c8|1{{c`E0B2~T{ zZLhD&B4?MxUGLUG^~*_~eyr#Y>2UD}x3g(J3V-Y(YyNHWh2?0`f{TVo{-t2{lbht7 z1uNtq&G?GiQ|j>vRyWAuHSSYwN1^<%m%Z`hW|A?%iHg_vB7HdJo#|6E$Z<=qeI8?o z+8gIcd!*MDlDl&ILe_ZHK8Xz_ye$_=trGwD>s6@w49f1^d7d;{e62Oy%mm3DH1q?` zlCL};ADd-`+8f6-%{C~7v|C)^A~OoLS3WBO4=ukuQ$r7}*#JjC?UH$H>M=VC0KpIYu@{0waF_mSbdNBrx(t zupA>BBY}~R>>SYbkCBZLjTy8%CHwD(<3HYh3^=Sd=#Y{cV}azA6O2tjwcV&PVxbh` zeAgr%fY~(ZrQGLeJ%oO}(=2T!gkIBGO^ikBDT4oU-ex-})=lK9xuNwNVKDT0tUc&T zUYYo9H(JjUa%%_pF9x37g(W%_X#I>9l#5&(;hU0MOjt8o9}(WG?pZlQcv1JS_Lt`nqm|PU@BI3p!xdB%?z~;EX^VJechUwoSYQ-2 z%*GYHPa~2~AAYw6))~dzS^dip@#dn?x$D4)7eo$Ngw~%#Y|0_tdYIl}Jo2y$S`VWa zjtK@EU^zF~XydvCh-dWPN!9P}ni$)@}-eiq;dtGr>0Ni?-Tk$gO6%64dy zU)pd1D1BHGfvwwNLa1icY-dUzn~`;wc7Tt>3{KcXD*VA;_Um?nfx=+z_t9v5N;uuj z9=!`554iQnoKQwwiDh283&so^x5wg@4dUu2ZywzZ_ts9Ft(I+tcu|h2-5w}7-TGyw z6czvR9G;jz?BE$6G_0rE*Ub}idHz6lu99=oqv}7FRk>p?7^p-gj@eI@fAXDOhWo%@ z_D}@sA!W(9MC;%=kk)Ji#Y34 zu`dVS4$M8gb1>CDWQ{WOIk3a|jpNwq==~w_^Jb)eAna6|u+1!oDqnNWEr$XjdtIU6 z^m>Xn`!8w;1UvC&+XP4r8h_)Ige3ay8U*sHPm9%RV;n_pYKsr8<{w(AHFGWrKcJ|_;X?}-MU z*6PjVg&POY&(DxY+%on9KZzOkxU)^_cG*!OO=B_s1NG?B8 zc6s+KYCV|eK9aM6+{|h#WSdjwRL6 z$`m?C@dLiR;L{SqskIOP`Lod0|A|TC&Y$1vesS9^&@bO!U{1Lm%Eq zA8AU}7yD9~-x@ORqu39l&s2Npe6r_(8(DK}NzT#-Xgy814j3iwMpo({-`ci!DB?~l z@626IzA~NnIB_f5FA;eq_QzexmRHlBq{&j@y=z|IaUm~km;J)x=uvWqj#;b7x9vAi z9-2a>pD}QF@e1<6A@MW0sdW8(H(s}#Jow@M`OTJSKS`)-&S`fhm9!?4;2 zJCUBhN=^3LQu_(E**b-#q{@p0y~(MQsQ6Sjr8toBH*MoQda3xLrf)P@LIy7N8GO-? z(kD69ja)?55B2wKm`ar=pY1q*AqoDob9ig1`gAorcy9q|e)F|SX&Y4^ob^tnbIH`* z5v5jURQ)E)s&?3t-Xi0npms0V&J_|OqCMRWyD;^$0$=PLN z7fdI!vZl9A(V*mUN+?#1= ze@1ZRzbfgF`^^`9C_PT)hnO}(c^LUi_mI)b!eJEu^I^|c{z0t|_%j(~TQf+^V30E% zb2jFd46-d4J6L5?Wq1288r?^9yxqnAPUPt3b9?_!YXWRTN=`FG6Q7-Y9H$Zy76fO#Y4 z-xwsmGRXOic?0Hk46;8l$gjb?8uLm9ITZ{NA2Bb-{5|Gn46;iZjsVmU_kek>2c@?b2-$O*#kf!G}*o5OHU0G98=a*XV~ z*xetyV`T4PIA=GO@4|A7?44M?1IxEF$i~R=!|uKe5*XRr7|z*>B!iDnII zze6O85YH_2%Wr!ut)uow6wkNZ^#0HVHwkJ#LlB}wiDlf=Rkm|SQu`GmLyY)fdFIu) zjUn39{)gBg%Biw+ultZ>uS19T79(mc-__}k&+oCOQ8%gIwFSJ{}DD)M5E=xU7zp!U8VN>MDrkyz*0P6O-fdv9>pUDvRf<{g?vakJC)l1 z5O*c`t(H|o-DWvZm_ z+Rt}sxt0v4)3T_yYRc=<1(ZBjmgu&$;;PTTdy1Av$Z>isb2cSt2lvwHDJk%OT2_j2 zUg@8q_OEEi%>HF5?&@)D>rJ}+B!}|*EXPC&8a%d9?0|;f<(g-|88(pOzogkB z5H6=)EbmF@Ut5+K0Eh27_y#T1qU26P_yfRxqgCXdRdo8XavV{Zy}iV&>!cASua#$u zfzMTsst(Ty6d#~iDF$QC>TfdZnndxnO3C6-AU9Y2K_nf%NZEBDeD(ZUT_Q#Mw;!f1 z0h1S~tsNUDMfpEDoG$@22e&r2_aM9EXahEqBMG`MY}{8T)9F1K#g>9gGwvmf&ZX;j zt12-F-hbZ~Son216<$}3KM0~n&R(+d8qHJHT?a#$UDDe_>2!T>)lip)I&1Iiu0D#C z|G8R~((to&-}863yI@*7c4qF!9d@ULla++>GMdOJfpkv=G9`NEj zrQgR1{2{RZyGc&w8ajVHL)miRvs5(SYY(-*CMt$S$$`LqhI-;g>ir4PF}zt0hRZvZ z*+tXwD~+_5huPCIWg8Z0P;#?T8S;>9{yNZ@HJ9S6Rpb;v=EBxl1qbaYzDm_q0R%4M z4$sx-`Z_+EuK+pI0+xhVq3@5-21ZR?5sFU9KWTl5e%FB@#g&oHnOdw2zitpz{ z{!p+M+!&(pi*Dc3^yP+uR=!(y5TQWHd6T?{f&2Jz%l)0u_jaiN8RiXx%a-nrU7e~F zFEKJ04vGstTD|I|!|R%GhJ%~^QL*Wr!Bl=9Pp%vefwEWDoex3h>jbghj6DMUm+uMM zr%RWo?3CmY@GEUZU0D`gpT1L@N5Jfr#nruGbp7eD>_QY_OcWFv~$68$lZdv%{ zs=uQ9=aE?)70BJFeW6v4dcQ?@*i@=O$@eY1-Uzxr`)mzV!FGw3+3kfi|7;hf3VEmB zy;`xKdcQ`L&TCc$1K+$Dk#f5Izg}QJ8U|JCJb123>+iQPc{H5;Wipn1l^(ygFDBGL z_sSrj9o=;M-sj+|26pO-RW~2d{qN9Hz8cIbu=kpFm}(E4HxuR5;q%Irfj*WC>SKW0$k~;qh0gN{j zXWp(%>U|%laOwsPaGRm{?lhlnzeUrcG{8^flWNT(N{)WXg0BHa;l<@U_EO^k$J(-4 z0|w->$Mu-f;R8Wk6WVnWVye>V^di_cnqXo)G=!9)IOp~Botoe`f3L1sB-Q>oN;A?m zVLWfEne$faeHmw^b*Uz(ibm+$Sr6rm23|S+Vk?Jg9~}NH11&JNFl-85Mvu=5 zHm+K*!T*rtBMZ8|+-;+@pz2Hch52n%c@X3rz835^S(iLGhwkr{b`4t4SFkqw|~Y=%fv8 zi*mk&+0y!sb~=dUs{A2Rigf#palWe!q9N|jbQCE42*u?M+90E3-Kw#QZvS!xLxzz} zr;Ns*eWCRL$zK;#3?!z{Orciu987Pwq^)81DF46KGWopW#iTha7 z`ZPK{?RNqta$a=8w9Nfqaq!MX<(XelNh!w>H-XBpS4IlXpwR)*U@$uy@O61}D zR|h-ybaD~TFQ24DwjGN+Gf{0SCExj>Pm#>me;d3iM~~vFAKxgFZGp*x+i$7&O+@&| zYl@@<*;;hE)Ry9U6#(l6%%x$df1az747jq|0CA(=~ZA(=kr) z!HX`RW1j-#$%PJbt2%t?^t9?0$dmGlcLqKTX{E~JdYzg)`HnD^$OCb`Pa*L@CIUdqa&Ey*NU@-wZ9QkRiwT>zgRO>7wMi z?~-K5%G)7(gAUU2(eFWqoUO6RbC4zaegPdAlvhZTp}G~>SECnD{AYQ9G-)8Co;o#& z<_#azq{*cCD@Jx!X5Faa#YI6)uBG<@4%AgO^!T;ZIif4I+nJs5BKh zPPbp(Dsm8cKlEDbxr|wqd|3u@iS9mQ*kwXm=R%~$iMCHfnQ-vh?us*fI`zKvL+I0bv5~?#Aq-^VeLbCP|hQ zTz)e0yb2Zn?RwN&cUG!S+8}L4ar1@%33Be~r`uN!pGooV1~myX&N23b^nE(~-OuDe zQsjo!K>l`G|E*tK29ot_Qoh$^(&_1b?GqJSk zbou+YxC|f%yKWY*4W!$*LTjH0IaX)ud1)(J-*c@=BBT^|$?>d_bp8jnxrmVR3QxKR z%%yf<8*sn@rCT;-L|oM zFj{#s<=^#d-!Go)$FKMF4e9Z1#W(oHTbO=bQkJCkThbWN%lp7`w65%-%fq^f{K=d5 z=KAKT4s`#nMZem?Q&LWxsB>cg72h*KKo9Tkh7%>P9O(9w-b{A$9O6=+Jd36KM@UOw z7tc59fGE3xPT#2&x_HCePMk=7L$^<@wt!AvXl2-%;x;<|Z*Alc-mZ##nMtv9`Ce}C z>)<_=@Eu&Tgs$HW-=Tx|dBpV5FUQm6Q~90z&fEPdW6hiN`IJ7#JNnvrdqTVN^$t+y zEd=WawDV?%YH~oH*01tMKpXGeUcDVoe4qDSx_x*42>8nL{9rEEV@SuB*V*@(r;{3fuFjLzKe;QQffrX- zo6!7@ZVwx}`|5ahpPQTw`1JUu-V^YNmz(7CDDR6JmHxAyz8c<@?VqjIucP~e!Oy;G z-q;b>Pa8d@^Y`p$Ko#$G+OV0I66yIZxx24|SK^vxAzMMu7s)++<-C_Y@-r>`2T}2H ze)g5|{3;aZ9pp$*oZZ`3%!|7^rS=S;ZvV}_eT6)c*WLH0WSi3dfA!_@HV2k^mxSi)%TQlzq5LO)mpkd&_%;+-Z_QYrF?fff9$@#J3N;Sc`{?g zX?-|-edl@7vXP4y-=fDCq{2VX(7QL>iUJ-%)6%sk&pq5_x#s2}-P!iHNQvniXU)(r zCK;dqd|xoxxaWe!&}O*v>h7uWtK(U#>3iMHuu^jQ;@~JB?*0I;2IU#e;PrgR2$eHY zT;`s4GpxJmceZ-lVb;fv592p`H-k1Sv%2DF1edw@-3)yp*X?+rt69NqPhMCiHpArA zhQoK-9L4v*n_7lCn_|yJ@r;_P`GlfK_QeCRrW3~;BG6N z8EIZzK4?0Zxwqa5MbqCenLQwi8J5od z={=?m{KbYx)+dDHd+lwI=4=`=M&}r-B`MnFv11#In>Bw$(~3jfm-IdNHng6$BEL*M z$z5M6?s+w$4Y*=)tivY~xj*Q8?`=^1eRZ*EtsnPOy5d8~4d$F2^p-ycn)7eJ{Qpc19bhY;0S_jY+pJ`)=3{vAbMqK0FQN zGWX=$;SEP1wmaU2wUkh8oW7|Ywui6Hw>zGI@6ESEvs={dGuhi%9}7#GbY%*s^d?dEWYM6Y~tcHwt8^{G*iu;DP5xp$A`$5cfo-j8GT zK8-0-IQ$*zRZlIiIuV5L;UoF%S>khzPO|RIat_yi{vA?7HwKQfW8r)G-(h7P$Dr$6 zJWHy4dsdZr2h9HH7;ja5jJuz{r{4i5Z?gAg2Os0AKg>0mHKPNJ!cP0KY$CX0>3jPf zV65VNK~S2Xz$&n4dt_EX?@fb`%#cgL`; z+)4Dk{tmc!kcG@vZRUm?U)Z&`uLC+{L&pwb9pw7b_xyiA-0p*+v%LbjzJX~rr{D)n zd%Mn~EIo?*oWA$}0}4G2mpW@jabe}h1sgd(VB*jLgYK@6WgVdH0Q`VSabit7ltZ{i z*#;tw*+1azyrKDX6_T)BfFH1Lm-4*7K-wiD0^B}U3c zs&h|suRPV9HF9<*^t_sWCZzZvw~@9R&e%x6BrC%D)=;B2op7<{v(c)z-dx76Kqq*_)TAor?q@yeJ34r|QWt2Bb<*Ee ze46`-wlmNL_xIfjeCp!P9kS@zOY3D_Fr_)|q`%#Eu03scpbPT$kMdtW{51ET#0&41 zR*^dAK@}~47wpOccsazlo;0f+lR+X$o7C%EobickMZ0d z+O9zlNR)&atm3$Fr#gQ+yw$k}YCP}VukcCW&Zg}g^uW~1OZF{r^5f1Km|~ET)&u(E zm&g|WOyn|l4|*UZQEzviMG#ABbjk9Z)*jfJuo+(TCUO}&2tVP2jeXcUxj@$Lygrvp z?4K~`NpPjv%y?`U;V0@}HhuFBMze0!4?OO9KjFRY=lqwVeyr|? zD;)+`{DiHigBDLKJ!tPx&%(w~M)-V~#1Cx4T$Ntkkdu&c~89NHSFwksy z$$-WnR&4O|p*5UdXsBpBls)<=m$9qR3r4p*Hxil&EZ3VNZDR_1A!m5=&ZY07SuV7l zg0H+;dXw4>bdDc_Z5Y5#(gO1lGfZpUyLy9>YINbUtrSYj|Mc<$4lg}Z-2)nVxu z8gHXn?`S&=zu?%ogkhQqiQE?VNIjc3zaZj@{LQvw30%f5!!O9VeKxfH>1kHXz0GD5 z#`eLCNEtFMMAk zzqjSm^7iUgV$l<^c61_22AG{uRRIBIsL~!EpqA{ zYP5r}y~2O&LJK`r?p2nx@bm=6u3`3n#Z%)qVW#Q3rJ!;zWz@ZtOaCQj;`!%&k1$># z#=Fdz9}Fk@!_A8HVtw(A@8|M<%ipcJvLE6HYnD6tWx+wSm)eqw2VuYM&+X53i{YN+ z{T=)L{a}or*6q>enIJt(!}-K~KhU$8bs#t(2Mm^r%O9;-3+ijuTT0cPftq)pWhzA0 zz`z%(YFE>*L8{*Ji2J5lkoM!?eDS?bxSupb*~(+-)gOZU^$_ZNCQ)aZgvrHz_wIFi zGZu@S@8<(%jSLfro`%k}iN$3*UZD3DE;rVt#z41|(Ts&}N8Z+u&sA zQ2E{OIVd%NbK!UWetqp9e-st9I@_;@P+!Z%O2-~Y-tTwMGrcI)UU<8o_v+j%x1W*; z_cL~vt}=cLX$^y32i>>?+J;KIrr-MjMdK#8v@A*k&ylUpmz4A1#NHf@kk83*@kvsZ z$I?8oA3yO(EZTujY`wvEJN_8%o(&$Za{D;2LxbV2>_aGDvtqL3rb4iYd#yUp+mkwf zKujo{tp==d|Y-+kc}$BSb{p7-;W{<0Rv;*UW;zA?TGy&&~} zRPSQnnhl@EW}hr;M8Cs(f50-I6+BR%Xc~G)@*Olzwzjh>%z~qATe}DHWx#VhKb(l~gYRn7E$M#I$fxA+~?Ma8c`^(pChIH(Rj>r9a2=x{D zB$_*<bdJ%%V6-8nT}oP_mD5$ zP|Q0MQ36U`gURTYS}>?zJkJ%`10tdhfpJ_dNKU$2t!q>SlhaL|tI)mec$FuaJvRzK zJao1oaa|RBGm#u|XJi$88GHMconvHw`PK~En$coI+Y1+}N@Jew#0d!>Tl@8kM}*rWO2)W?PH+e+SiogwgWHS|O_Ij_%#n zpP*%Lg8Jihp&jmKc*6CbUW)7t{fDxMESq=fsn#k68Gnt~v^hTqarTrE zGfhsan6WQiq@F=+X8g5aGvlv3TTR{k{OkKx?19TO#Fu9%vzhUCHk%oLN8xz?YrGYv zNBsE|-nCiK^~Jb9A6uM$NPoGj-d_*$VPo^!?hPV8C)H|3EW1SNYb@4Nmg%ruczo!X z>swQRJ8$g$TZL7;$Z1{g-#-l@2d}v)zSj7a<@qb8nzW|)LQK${U0HYT@M3-_SAL(q zl60IivbJaC8Ow#KIklHkZGoulTK3xZH95k}H^TMqXbYi!Z`Rn1Iv!Ml^MV5_2soVi`GsNAwB&K&koynjvS)r9wdJAtL137QInR>Oak-P z+=asyzvW%dGHY+LbCKs1tUYMPSqHLqXIX{X z?cRCba|2>;GF{$F$hJPE$tq>nl=z@N|xtM8CchbbYtY z5pU!jm>J@vsGET96>V_PK2u^@++y6+j^=@bvE}Jg!bslTTSXUV{n$#T2nHMtI+AYr zW<2-ZxFC19do3*5u|0~{cvH>yOxrAS&H8`~Z?`@Jck>oe(!O?$}n8m3*(rf9o4#r#w<*vwXk42HUOl$k`(O`aV-P&njA5%^QB-<9@`Y<7D)_ z!v_yJ=2`j=+2$Ib84L0~nYH#^*Ll84Z!}(w*-V~mhB=A0NtUmJC-jzFTnpE>?OEe* z6U-awtnn$D4Xr+3mSG41MGo}hEr*jUX&WZCHOanqHaSw22I zB4g^Q7+73gF{#i$jkm>k{nCs6tI3DfQm)1ShrKTWtm*3Z--)Ooh&c$ZISB4N-@9+f zgpeQzf<$s7A(ITm95Y1)(S|CahO{+RwbdGOscN)AsG_PGQ)#IN$rVHS|Mt1(#7*RS zecyZkH+=6qC%^1-*4k$eYp=cc+UpE=;2LB3hs9g`kB_74_pX@u{`IuOwOxWP4}L7m zH(!78?p>!Sqwj`=`(wWDMTx2S>bSx^`LnYoIvrf!u%f(AE`IUrC$nEI@3!{4M_=e# zdRQo*-`0a~%-sB_qP**lG)ysi9y@IOA#qLV^=bJj_0#XQ%KFM!*5};H#*f~n@oi$1 zwG&q#p0heBEMK6k+1N>*Gz3Y@X~N&-9P24 zryT133SUUaHom`FUS7Tx<#QlkBQIa-K)yy^zSMzyjl6uR1Nl;3z7_i5NWQ%OR@Bph z{u+7xr4IDh$m=h4pua|5f2jlgrM&)D=z}Bu<;RDL@;VqFjQsdO9gGh~ete(~#s?!m zK2Qha1Lenuit;)dANcXNqPz~qUn4*MQU~L&ksp7lgYnnMkH6Hx_)Gcmx1zj`#$SGZ zt0=F7`OV1BZ`8s3X5{BL>R^5|^79*YFuzfLeyb?2qxp@uA1cc0zdk84(v0^+h^2)eP-nCGwQ%TGxGKsbzq-S-ab1d zjAxGQGv5BS2=N@)zXIRl!2Y%H_OHc({cGXvUyB3#H($t~4^36hD^B_Kg+(AZSYKH9 z^+mpe^@W9BU*tPjUs(9{g~h@8BA;Jh@as*->kEGUR#86(>$iM<{g&@w{g%(K-|`)- z-}3qOTfT$!TRy*jt5|P3TEFq@*IU}>*IWWeVp%LeVos)kMkX@kMsHU zF)!Z|>S%q;`yVRG>%jkz&-)+p9rz#edH+Mc1OG!l?|;a5;D5;H{SOuLb>x5G{W}%q zb>QF0=lwhR4*Wa$yniR(fqy5T_wVF8@bBdF{+$Z>I`Z%E{7u*~1kPhLw^ zyg5(n$Nk{UZ`$25j?d3iY#sBAyA>~tmwcFM3t#>&jqN;F(1+Q4Jn}|n=EBT5i0)ov zVdlcQnN4ce^z-vuuwX$=dX6}?q!v+$#UUY!ajnQJb8#lFA`!6> zv9YnPuC+3flcyvnySm~771(Pb7p}dzd!fG`3o0+y!6xMpRfEd7@ zm>8dsn3OyzB{eO5@|29J(?*4l9y2z=F@O4unX_j9ch~>FJOBT%{C#@&@%8f$2<+Rh zf6#z|!6AbN4+$MQY)*hK7LDmF4;K(FZN zUO2!OGJp^tz}FmQP8erSVYGoslPivcqtcQXd5AeVO(6QDk55lc!%MK~@mw1H(i6?> zI-lf}xOjvEB2%Jb5&E0QrKCru*y2Pca)-!=rB9G9OOqfimJX1J>!z|a*!ApM(l0WR z42eujPl*PDrI!-N9fiiGr=;?<;pXT>Gk+4AZaW%~l*n<1r1N298oQR@I)eBF@d)A& z@L95K+duTLjr6@Ky*qu}{}0|y%!Qpu_KhmrO})NT4*YZcW1hZ;(K~wF`_s)Ms7q+gqbUFj2?0!>pR-s+TOk9>Lxs$yPsU1KI$}G@l&_+^$MJMdJ&7CTekEJ4fs}kWa(Hh zp3dDjl}{P>J>Btj+?X*`pr2#$b9RbVL>&&Grw&du${)337hvuBx$XxH_lT6FSeQKW0{ho(9CgE3FV{iKeS7Upg&iyXP zvF+p*9rgAteboFeJe~V}k%JRg+@kICoNhM#z7tR9ewSolQH$I3=Ow0?!8?TXx!*T= zR<`jr-M1|C(29I5AOBA#Ppq4Mqq5H18v56D;_2Ldojj8J8`aOevV!^Jn;{DVR7RD!!iUpl(G2U<=_56CCgi= zlUjQ7<>BbQKX<%GYeyaG^<^DFAFM3CNi^dg%`VGO&B&AR@j3d8AB*l$&+|XF(YQ9^ z%g=qsELqgyPr9tH&+?_|20lJVFRGjRCtaLDe%#kU&c`oj=_h}T-?1@A$K-cD!S|y~ zj_%zU-{H+)6mwwDHXlCzV-`O)zgr2Ne81M0MOH!n9KGZCfq3uBFMNOfqW*mRCoKN4 z#*<2DmoZme&-C@<%fr!qPpvAU?{4fIx#4IaAO9(fAGGn461uc=|CH8){Q3AC-FwCN zCG_VGy|#3@E%e`KEdIr<5AeQQ*vTm87kq!rU~~WivFSB-i=-;y=)J3F1P zuZ5$B{+W#T;)cZZ-8@9lXJ?jv*r^2%Xm4fLCz5ygeqrM1<+61TsPWRAEr$=O`0{gf z*N(d$&{VIQTRhkD^|Eku)8-=&=&f-eJyUsY-(lOcS z!*4yHzkJhUZoly&K7Ee9IQ#JfdhmJs$V(x-9$GkhMnc_()O*O11(&u6!h(aG~359z6i-p!9T2u?R+$-nx z!Nk#bkZTXA-}&UP>&+5eCI{CbHez*J(qOs zYu8fRV=ZlV;A_5|CXODWZdyvSz2Yr1e&pqr$%Mg{}#2Tly15?``rC~3R}HQ99{pNZz+BBS>xlG7X&H=$WCTN~xyPX|jBsQ2shB{h|RerL@H-*Ry*S3;NH|vztvSr3b%S)%waG z!nnlIUG_{brSe~wo|gvj@hu!ZsMW$!`qkVIo?o5OiDn_hJ+40uve7d+x+Uz}QW})BdGWH(dHcj-qi1}Nc0AYW zbnaTgKB>pj&rQYqnM(h@zO5)vH*s`zzni6W+1if|k53iS=jhRY{ZUFAHqFVM>dxDT z7LI;~w@Vp4 zwd;#PH_!Fp<-^gBS$mdIP2G0;^6m-x!_l*sDa&Z9o?A|w{!P$Ncb2~E8^$u)Q&MZ? zz$jk-MI7A{&n|R znH*hxd1M)_Q!sb?q>psAa^`aM9Yv94bYN?1uLYxc{kL#*uO0XTL9-=>EuIOy+=@B6 zI4P-&t_*ZnDcTOOr9&FB@&~q@Tt-7aKi;#+<_9<|^(Q`k6GzYN zHm{8S(Lp}{fV8hIegsF)&RSANlUl9#;YJeQuQP4*;uU4Ip?w>%^2>wrQ2rHT z+toQNl%J!!%Xi^D-y8F^9p2*G(Ztb%T=$jHN#ozrc6Q~<8Nty5Pkd2E6+s<)Ua;`? zRVGIdpORlj>$W>2amnW8naj~{H~PAax*a)k`-@S+IKa_;*MD0^cYUeOG8dXrQx7UsSoA9Jp4KO-IWrT z1%{Tq{%~|lj~Z6`)vhbyZ9n1XSrbQhEvsdvHNX4o+i(LfhX{^dveV5lKlcw8>{!y2l|OBI2P=KC^}=o!Z$bVXU3|TZl`ipHBN{!2?~f*q?rrq8 z(p7h_ETm2O`6z;;=Pnal>4DvGeJ3>#=2MP-?3CO}e~pcNcwnc{e>r-Ai^fVHFZan> zc9Pd~3rD}v(_p2ATl)LInDUI*ACB%jz{g5YK5=RNDCZjQ2WZC1?-Ai=rIE=i`-*q* zc8iFk=Zx=brCZi&-@Et~Kfakb`rW7jR=V{;r>27%)wjtff}@*;4zkjqsftVMl7#Ye z^a9;bE1i64e6Dx}KdN=GoGHy(aF-uR@!|*S-rTo z1^waZrux&Y^v<~Zy}KBAeJkeZ5sPP9=}6ZTH%{IV#!nAc{>6_otyHqBWJ%6yo-X3( zmm}v}>ELU#nl8U^!`5CVj-Ga8k(CY_7+U+oyS%9E=^L!{&$l1MC64Cfn>hOV)tjueQ}$b{ zkI49OBZ8xce7MC*$GmmWzx^;?4w)Q1^Na0Px?twJGV#nFw({h1bkmU!t#r{W|JqZt z__TtOW(Qkjb$4Z~%g%_zJTzUOz$;wZ5eu91)J$~QXM|?UW zj@~5aGb_ES8!~y1iLaN5qw8mU0e$$rpzWjid^saHdiDssJw9XRI}LUD!n&BFdyDg} zben#%+tX|OJd(@NJCdX5r@QC$O8%<7tvnWvzU;&?D_#BcMYxxzF#d4#8Oy%0(ov}$ zKU!AC%Z;>R<#+G;=) z7q43B(`h~4@o^IDc8=a;F$F4#?hn89$Tr-Gu~?ai%%z$qtEaC%u4gdOrJb^4R5#Pa`b{XpF^KbBfeWRo0qeN zqnl2VM>KR%{NANmg8p#ya<>|f=#)0{#1=IK|4$oMeiBgg5q&#p;5x&4LH{{=?2KBE z=<}en)7$Rk$88fw*YB+Ti1u#0G_g&(pg$aa*^hM}(ZBYdi&*I0-6pq8jvnn){}Elc z?`GYa$NBiV9Q|BJ_eV6|>ErV)L?T;!3rD}vrxCs%GQ0bjcNX({Qq0kJjKTNQ&xG{1 z4Duzm_@pf>zju1GM|8~e+YLIT@%=)?(Pu33cto#{k@r9I9iP65qvx(^`G_vKC*K@g zhaaCKIC|bj&qp-O@6zh6B0>K-`j)M29#OAv#-ID*48QKq<>)!vMUU_u%pR!?k_G$6 zM&H{05ehzUI`Zl(=M`O+>vTQ_XxNpOloyskq3V_AYj_Dk*s?{w1cS zrKEF&IEaleYy=-?@;Fwe*Tuv$F@Gn$=&6a32`ExznmHpbO%!de$Q94Xh?satgb*h# zF)l4GGCppaIYq>CBh0ZvvH#5?*~NWr!K=!{u1t24K)GI#TeTu15y|n9xD#hiWYuFj zFlw|YDn2PSJ;iLRUsb*xHzFw^F;0Z0i%*Rk&)Qu`f$2@6dCI8KD2J_WCkj*DlF z^0F8e*;I~$HXj@s+Ly`JFOWo}N2iHW%(y9+7?+4lB3_YBMKZ)rhJw6b=4K}yyLi=# z&yH_jUb_@fw#jiRY3b0~=(yCEB1(u%h8zUldR-xeIMo(_)xAPLtE~cwNQK-ZQ*0uK zWbBla*GqFuWO{sB^%8%XKG$T`U2iM=%i^(mLH)T#VCAdSXZg;`=xONRNinuEOlG=) zHk&+-YkfwH;5C6A_b_$?2w{4{>kg+kV3Dz7(-YB~#wX(b>DaL;tmnl=u`zFKa$1T~ zjxZ`dg(c6$jfqT6vz?3`n-&|#WCO<7v8id%6>*Xy8QGRL9(Ra}2cHcT(O!(kHnm>} z5d$3o55Nr|K&fvCxeF8n=YZg^{KyVd2+0Cw0O5cMC$ z0KPyV5C((-;XpJH0qj8fxj+uE3`hfFflxpWGyzKcpq{`!APYzXLI5$~3f%1-LM{Ur zfg->HtOv4z#XtrS4(Nd95I2kGvjfsS*sVF%q6+<%ayI9~$tg+f3Cq;*)HIYYT$U1@9GQ|fHGJIon2hkA~eqr<1fCCa2@C#Ooq zVs-eqxWw?(*vM#eO4MKs&QR8#$_Jp^ zXad-EMc@gWJui&EmhsrNv3BVR@ma{Ow~xzcUYpR?Rj$v&`5vCe_`+tNr~NgIfB6Hn zyInf0ZY4N>1_*UyajL7E{dFv@XNczw9S}CwE_$2?0ru&!cq|{b*_X}!TE_GI5V~9? zy=6FGUnM;jue$W?uVv|(5UrubTcRT`Tje zUZ38*GXG+g{C9X)=2yKwtk>)LJH)T&uaw&O;aXc58f4Si2!t~Lwy`mUZ73Qyez@WI zEk3?5hS>8uVVrf;9@hrHzC3lqUe9kf^7Z`B##H7nvy9cgl`R5K* z=3A_Ya&%3^r)2W)z z#8H*`_U&-R>_?seY|Dbp$+qx8A%xip@dy_K!dS>`1hxs|9a})Sy=S|Y*&|hXXJN0h zP0WYINQ+&2Ww#$`UvqT}HmC0ct-6izSQ$#Hl!4h5Y_l&zSCoOBJMDRyuG?V8=?eN- zRbN6jRF+d!{$$wGY*Qob4G8Jj%d_oPtXBXN7t{9djcvB_u`{9E0-M#7VLi&rWWwy9 z9XMvRgH`IlXlxVm-G{{N&yCw{<=ch)J_m$&_WIE213%Igu)of}{D;9i%JVN{-N3f^ zA+~uj1EHV`%qC--P#-ogrtR`0-b39vI{O!h>|$&Dc|X(^0vsYy!gXzfS26F1PR z+oBPF7@wvq;$?-olZ80X0rG%-fCab+lmK;xxf2h-3s3_7Ksb;LWB_jhIlw;PEN}%V z1?mrXC!GNkFbqfr<^tKk4&Y1RIB*WQ0$71JP!>->4)g{>fC<1fU<053od1Oj0|EHDem0yYEtfTO@! z;09m?*d~W;*jA7D%6!9^<1;SaJcL_gk!V?ThGwi>)-#%U54aeE%`x#dnEEjlPJ(dG%msHlj@H; zup_dCOLef>mhLi_;YiZl2R^r?c=K>_ft81g3m*;9ajB$52co?3C{Y>X4oHelk2kY8 z10xe~33>dIYKsV3JC`BxW^*zTu@pj5lA?T~qv4@}E84}$4~|ksVy8xzp^33v>d}6} z(jG~3e(t6&L-5w2BldDz$yqr_>B|xbuTrj*+m9BV%Wrs#u)+GVOq(Of*OL zO^iz6ytVjA7gh>8?b^x8+b2CG1;PmBeCU0nF?QNtjh7*Wt2c6*(g&_~RFw>O8D?{5 zayf?97?f^KnHpkF;a&wzjDiZGnz%g?!|E9t7d4Tu_lI_Q@~w_cd$@#}Qxf75k+h%+ z_j(#MZCr-VR(P;e3|l!TW`AJPZjXfv;*^SD%O`V2=DSz~t&)kRHw zoc!a{Q)8K?^iGe7F{eN)M{%)2Si_LP?AV80+nCiQ*lz$k{s|?4+~cDAAdwKu{or97h(c8!2=EziNhLxpm>qE8@LsReD$HDoh zXc6I7K^5)rNsJzn9G7SlZp#`Kx)_=yC@6l|b1?3Xa2oM%gAa<9BlO^J05S#9?0{W1XEN8#O=-?Pz%{s6Yc->)R zCVXpz4Ze{n=8Dn}txQ2KMYdEbhJ;~}DRJzsgAeKNH+Z055Z+zpMs{uj_$T_u-dket zFR}NSZ0|Eo<=$^%?>Vveo!EO%?ENS99u#{YYW^`lk_pTJnBSTCpE-XtLgsg7erx8x zX8vgAV`jc)!G|sQq?tdO`K1N_vlz$T0P|6c01u!E;10L}t^fg?oJnM4TwL6U5k4AC z-@b#eNxHUc*CH8PM%~6-t2p6*IsC!Q1}sJBg77Xv=3~8q&>i7rgd&9J5SkDcBFsc+ zK`3l`(ts2a33tlgjdsD6&iK#Zf~(no+sae|C@_-B=1TX+u@{$z22Kgmk-Czfgcq&(A~ zxX#1*0)Mi9sXr-M3EFDV-bUP={-odl()t!@UqpT`0ff{FAX%;fWKa75lFAO!&dBr^!@Gstlp zW_}+)0x!R8OHt!MB5Glig}8SB@$yBx4@CF_(m9Xz{~h{q7dr5tsIQqx|26W+^S8+) zq`yrrmJnVxL;nr={A81n`W7!IJDuU=^0FZSz5K*UEE3Sb%L_5M=##h> zeFBL(GLVSV0!ilLKvJ|bkXQ;qyBbI`9)nh=FX41IfIW4Dmvi`W?%&%Uf2SS(Q9b^@ z*bdCLV*11ED>i;J8;gzK%+89y_-$`%G2LMH78|db%@vFBnzOqw$J^UpB8=P2{$k@c zv%%QhpEC^hS{UXDH|R$FSI?Pk5L;%m5BAit*$5$Bp--4Ag?WKJh=Y?jfI^!itRr;XK6GCY5*=kO`sdl$PQf)OGG-5 zc39LnaVfLZyAYN-Lo3pnv?XnbCzm=)yFIRGjvY%Gr1%C<3s<%ThjE3lK6lmtD=9{8 zNE#D2(u{QE&YI$^9%*8#OKM|1)kIW>>rL$6%P&(obFyIaVEMd(cy+MWsYmJ~#YUtF z@^6VUwc*O%871llx%DJsA|-O7Bx<51I-(~AJPeG_G7}%thxid#v!oyCPlCt*GLQt5 zL1YLCB}2(DGQ7$jMn;g4WE2S}qbv3?B!Y~qc8?}8mG<$(evcz@WCEF3&7MFKNFqtX zp3Lu)$Rv_R(#d4(Q}{gtK9CGD75g+Yo!@5=w$J2toA8`C>Dlg$RCmnQ$n5?QTek|R zF5W*vV`#A3O$@7Q40qz}EH+0inE& za9kajr{Et!6T9o0+8wj}g>tZCmNq+Y1_=2#$FT>{0%!@aIBbpg$&R@q9;;?kt#&nqd??M8d0-XGvybpmB+ikrij!Rjf1vwd<`XcsVqC&bIkU~4BHcri*THwDF z*Np^k48X?yc+400LN|}hjS#oFlN(AmgEVw%guT8~ZKnpfwyu+_ z(;H4ToLrn9W8^L4%5@@+m(ze(6-`uTLqt;ZRgK~kV(w(&SoHHSuks* zAx81W0JAZgLK4kjX?S2HZ&|UosyKQ{vp@30*e=4J4S99OI9?y)dOM8e-J#h%uy=;m zv0X}JuvmJ*Qjrh^Y!)4?mVU5J79&P~AOQC=dcs2K1->4ZOJBt7%Ei!u(;u7xh!YC? zhQ$qmKC>D!i-*N!R?jHJ2!icH$rut%dcy_^=Jv6~49g}M{La{Iv|tfU)~mdC zz#Le4XC++%*(@XrxKei}D)g;6B$LcWsa4$Wi}As>&*VdY*nE}ufw25$05A6_@^YUJ z8w>Y6uurY@P1O}-1#B?(U)Wc|LQ99OmP%5{O6+T3xvk;$Wc2JrSa$KS_~J+`Y{3{< zjghb(N5cjk3Cl7J*5)u+pRB#ui0DT&2<5P0yTX#~0xHwR2C#P>>+C} z!$HuPmH5vz`)%yYurCFT?KW*^+RgSUxRUAgo1E4!;q-a|^vjUU}b)k$4jDa(^FV zv9L28eIMiJ7HBH_FYH^%R%k8zFYMbYbl8kBb{j_4Xn^fDogRy^WpssB55;&i1e)!O zv8Fdh9ur0r14b_$`ezsPdQXg<9vEL6Vx+AH{buXGTK~yfzP8f+7k2Lj6J`aCEmW9o z^2!D}vx%zPhAp+NovP#gi}v3q0W;c#*}VT#wwi3w_^<7MoCHj>LSQEZbLC>kX)o}S zGq&=XA;incMrX$&yJHW#V;8&Q+k84Kexcp*4!iVy?b6rV9n0;G#dgPD{BhNCX4s_} zZc!GoY z$HoNVI(r_A#>R;1cuaTMm{A>1=$o;2`3N#)b!R$g&l6eVHApT9$dQ;mv;yZ^3JL3tz)q^cvpcDm*qnPOzg1 zhpY~4zMLo!s)TI*td7UpUF?9z+TF_m&!(SvQnyMz_NOawl50=Eu^?;4+w>Ym zyh*lfD*oHcTHp!!RmT(ZtBxn+R~=8t&|cP6^Q(?0Ucta)$tgOZPm$IkY{x~A;0Q)LVotV6k9eG|LtWh@Pz!T;|cjy#}o3ajwfVjFYBuL zRmT(ZtBxn+R~=8tkA*_}Rn4zDo{(R4JR!g8c#Ouj>SQg*vpSxTUv)eoKYN}q$JuhL zoS(p}EA=S=_!qao2mu2dLMK)@VRIJ_UWTlE_EBDPY)3-*tJ42<{x1nQl7J8HHl<>9lY-tE z2MaQhh~R68#Bn^R(YRkC!d;S7tm7EnMtw<%2PF~l7$ur}7RMzSeE=v=3MT0}groxY z+g1L1Bu*eU0|cFA{h1xZwC0|3sfn;20Q0@#Ss(UHk1N1J_M89<>j2EhUKbE}EM0aj z3mX6|UDll#ts&5e2cx$G7+nFdb07Y^4}Z>jC%a}aPandE!x6IdM*u8u<_}`&Bmg2H z8DP)kuyK`@mDPjA&jeVR=kVcNgp5BAVEp+2OJ^m}71+R^Z$ik*w*_GNZ3kGq&jD7x zQvl;%02to`LSgb@U~&;QHm1pEppCHgq&~y&J*u&h>`h=3zE@^4RpM2Ar;6vXYa*kP zQduZ$k*RT&+(GR7j{=W{RiYDoV$z7 zjgYm093j&!cZBS@svDDoIbGg?um#TNBV^BR1tDb5ZZ$#3bmVS&FzzqnJu-ys*{xWF zB7|au?GUQdg1Kk7a#Dl2HT`^qZ2g{wkolUT5k5m0fslQSAOs<+2kRHi2f)h8z7deg z4*tQ7UC%adTACJ2N~YR$h$ZL5rzwO&7Q(p@I-)z`|9j&L=?I~4{XcK$?r^i!S>$m0 z=a7lxABVKn&+(5J{&Uoy)xx0)a9tI%k;CnuM+T_L|8i9jt%d#X?Bcow19!ySsdL-$ zjkE0++rg%-ws6kIVm8#{ep)6M<{|!(_b#!-GLjJCHHdskDjw~RxNAsmX~>Cw8e2p+#~LUd%&QFAb%F0g{-aFTq=~t{x~z) zmTt*?8$V=7s1WTR3PXJVW7kJ)#5Y?3VOufMkNh17@&C7mFW;xH{;2BP^ELRbYJCMC zg1ybnK2tn44qpU;z0Gfy7cUe?W7}=M)Zhg7+kGIHP*)dMR|ewZW&@}-g%7N=3!U9b z{C!_?8({YB*9Zj&=T+@p7FUSR>|V+YQTr_`?(Ma1vvO*fTwsdF3LK}l#PZmec;X5v zAb;XZTwvP20uK%onry^UN17E^oi^#e$egAJ;S4 zXfIyWGd)uFam#68UBmryBFM$GhV8@iwkS?b$jZN7=6~inOP@B!KXf`5&J>36%N9%| znZoM@;1TUtc#O~erYOP^en=|OF)C{hTUgA8FJ3&KEpO^av;YPCfPO#-FboI>#sRZ{ zdB9p=1MnsAEpP?62h?xoM;Ze?04XpShyi8+tAM@0=fD}@JYWUtG{;xg03|RC7zLyQ z(|~orF5ozD33vj$09ttXkv4!47z|7RW&s<3_klyeQQ#V21?smz9zbs(0Eh%)fQ7(1 zU@stSC9{Piwq9am-!zQtY|HBsLbd?8z%a2#5erpb6j#5TLxXEq)2Y+dwgJ4k!dHz&>CPumi{imI0YSZ77N`rn51- zC(3`BjoqLB+nCL7Yz|;)uxnY!#`ZP{nG%fz*m~?8;8Wln@DON-h+<$MkN^nRXu)It z1-3GN8`uYY4?Fc~pCc?m$b2EU5wb2^jIcez%LqFl zyoj(P!gB~aAuL3QDiRAq+a~B^ITIzeKY9IRrRKIwA#}$;0r9adlfAmZ9Wy<6h7lP= zR&EpU0(MX)!Z}Edm67>WL;y>eedAB~&L2)~TduRoc7Xo{HD4Y-ajiHut#_+94*9A< z#c{{dM#6FC+d0jIW6{CGEo{dw`6pVvC1=N*{wO@v>ge|aO`?(wpC)(D+xhi-ai*ft ze|5Uq@~z+&cjlQUy?tR#pZYbIcip|g^f*7)_m4S^R?M0Eg(+YE!?x2e`nJtD`n@UX zc=58|GEW42xjN71;DU)myJ(g_N-mz!`{2)SU3vW8(>t?19MosiuamDAKIqzO{+!Of zUhd65EZ^mR{p({-eD7>O_wdo3tNo^}IqhdI{AOkSZM$+?Tz}ucp1HYO`kaO7lTQQ= z2yzevuny6?#*hu7_$Uui!>blFedhnY9 zwf7j<-#qTGc`J6mkv+5FjUHDvo;q9L^7FQfoOejDSE~96;kS#68f#`B6RhwC+S@eo z=EU)7v6Um(^OMrk#wNv#O^Hk#Zx#}$ng{bmR_AkM?f$Rrf3^fLWMXsT#&3*|ncOM< z33N8DVt9Rp&gR@e@WP7R$w)-HVY`6n@ykEvgmLjxMHvb4iK&M6_z@OuYE-N_Au_cG zeitVtDK#l3tw&T+f;KWWq32{tdl5c<85e^e>llU)@8KJkhW3)4;`YXRbwnaPey}Gs zjeSY)Z>A=*U56`E%~9$2kmXb^9p*{Vr(nNDgdr^9vPZaxBrJ;RHWPGZ*y;0w*BJIi-SEO$jah1xLn^$kf$-kC&b6sx9`A!urU7MKXT3tfoQbf6!8ji56LOX1gV=WL-vWR zT&`5yQuru`D#MlUD8E(yrF2mZR2^1*rTRftPpww_Y6G=F+7NAycD*)NyG5I)-J#v1 z-KX89+pjySE7YCW%`G)wx9w6UzEY>g~iu~@lGnWfBD<|x-IbCp|^dCDEiJ<5H`{mRSAV&x5G zp{huAPIXarSyimMp}MWQt13~Is>)Tdn$_Cry7zS9h6qEnA=VIYNH(MyG7K{enTGj> z#fD{uEJL;-$FSazYuIAQGwd+zG3+z!Hykur495%whC)M;;hf>3;j*FFaKj)mzHKZq zT8%ZRidyJN`a5MEfyr#NI7z%-GFVz5E0S$hj#B-h8mwNV&Q`yx-l4v%Dc0Q3+}7OH zlxP-cZ)ltA;&fTMcXfgKAbp5FR3D~~F(eprjO&fL#x2G?;|}8<<38hlqZ{o*2QZnL z*fY0)c#n9Wc)$3d*djhAE)W-ri^S)|7sZ#w#o`;{+v2<85^<@xT>MN-BrXzHiJQb- z(nR7RsS9~(q)((Tqzhzk%GC1d@(<-7%Zud-<#J`LDqfYWN>gR1W~hEweXcH1KT<2S zKH34=47;}U)P1A>Uf<9lHw-nbfK0xJH0~SpMw8Lk7-$SKI?)sKdwPkLHH5!^CT=9| zCGIUYi{r&J#OuXLvdOZV@*>4K#YM$sMX@49c}nS_KCk{+-AdD5b4*j9Dby5c+_di6 zCfdE)_jNz(R_lGxPJbFo4K<7sBSlUb#+k-t##P3*=plNPa7Y;y`x&Mx}|EWZmHI( zP3n#6v+4`#u9}{j;hJ#GOwC+PuJ(?$L>sCbfwo$s`&9R(?rr_M`fv1w`iJ^*eV}1L zg>DdIO=DMMPh)~H1+BN!c*S_#*p#-U>u3RVqWFz%dwN^tlX3Ydmu4b#|gyxi{nYNWS zUOPz}rW>u>pnG3;T6a#@Oy3IHM+`L$a}A3OR}9x7Ygc10<4WlHm&SbK4dZXdI8D%_t@}cGSouKtNa?M5qViDBRs z{GFsoVwO&jN@XfpeR*T~LwN&*La{)xUG<6Ttct4pt7Fw^>Oq>(kk1UwHqBnmNzIR% z$C{d2FRdJ7S(r8(+J8p-v-Y9(h1NsYQ76?IbxFGEkeE{6TR%`gQXi+!(y!O&>%Y_A z*Z-wg8TvqmZ(*dkXe7C|=T)L5v66U6vLsECA(edpHb`cX4VB-KKR^#?qZp$&rRb&%!WjCg zvaYI$>P_`t^<%ZOX1ew*?HAfY?S1V?T@U>mhP#G&#?DkpN6&roNo=c^a1m#MQbI_9X?t8>*Rw0kD%droO;K z9eGo^NZwtpl~a^{kGzJWuOdV-T(MoTA2Kgg{Gsqv4pi<|ex^LAysjL9G4L(b3DtP@ zT(wnQU(-&bf<}I*`BF1Yds|yy*G;!Xw*~XrV_lm5L;YQSkYOWch5ANUN{aDZIm%%a z|03Qhjgb8z8zGOEFP48TKaFUjXDo`~*HBB{FwMn&2 z^)0mWPs~?M)Si%_k2+Evr(U9d3vKkd`X_a<+C@`a(?cWG4AYF#%+}1;!NF-3(y7YqI7AxS-PdV9Nkvkk9v)9w(*XU zl;AmPlvg1MlkAmvN+YD(WOd~0uazJGx5KH&O_%3z3iy-(s}E|I=N1*)9Xw+UtORsNEf0D)rIN8brHH~U92u%myA+m z=w_g0=j#^hmSIHAMv2zzav{+?-45Lz-M$L_E`Y^Qgt6(O?v}1x*G{j-963Y3O#hkw zg5JZxoF!}w`bnH8*&*2@*@v<7AnXWcLlBHf-cp^kpLB#YRyswxP`XCCMf!>K8)>2R zvb0!wLwZ|!S6U)1m6l7N;q`hKnXAlA<}PajD`&PWUA{>Eu6(!rq`afTOW~~$E945b zLa%tBdZap`9*?o}uy!!&ldfB&Ypf5{N9ZT%7wX#>_8Gr0qCg@i&i3twSx+a96=#T- ziZ_W5iO-5}VLo<~?2=1VJ5;A(o4BbTs-L1~w?-Sa(sj}e(MMtg*=g8o=*Z*?=aDCD z=Mr(5SS=YU375=~Y?XW{xhiRnS#7X1QMyjLM|xGtX0v&U#fq+~o~r(;fx5A}sk*t4 zXFf)VySfrxDP;EypEz>SyXxKa?)oNr551>er0=Nr(tGR0dO75(*PHadsEJ^OgriQ; z`dEFuK3Sip&w$i3_4Du>09qi>YxOEE`2!_4Aha5cCY+zm|(9tKZ?$k5T?W$-qLVM(YBdV|T}YX~$1 z8A1%9hA@M@jkd>d!tmJ8$fz>vjUO1J>2FLnCMP!KlL&Dl=Fp|$_r)KJ55NvOC%!7K zEom$1B9TdaB?Bd+B;zsW_LeS@otBj;JTOaMR*F;^>LSf0O?_Qw)ZU~YppQcPO-Jpr z^_x(Od#pobIoW(+nvXR_xt(B1y0kn=xo3*W|EQ3C6% z+<;$-H@d)Xa5K6an;1Qeo<@#!zFJG29qoj5fv^rjG4yy#>KGhvW(froLB7NgGP(-n6bcEXe=_GGhQ@aHWtG&xox})TfEd*ZhVH1 zc)3tl>PFpZ6Y2qL1#P*li(=CRvKqUxo>&rHLLI;A?S?yg&nk;#IVF4UJ8o*0MIa2iKHp2Cv%xYPV>;SBvlk)b8Kv2GW^h`~)k2r>I#dokV}4+?|RdCuZu94q`9y z2yv=-tN26lAL0k%4iW?M{Xo(UmTweBJ{MVS*>>1redPn?e_;M!qPPOfx3jXla=vnj z@}%;tvb##GTA|8TmBIcRtsbZTN?oA7t^PwD0gG`HY@xH7mRJGo)!x(UbqN@s@94br z)AVc6*E<>f48zgtZpLOtQtU)>ag$)Z_?~!$^e{$Nk*pK!)vsg)vbu72d9XZGJ|F9h zoAR#|1&WDW?t7FcVEG?X9aUX}_1#I^O?zB>0W($^teg(I-v5Ew;$OY87%SBOxxLbp zir`80qTWT&Y+oeK3zY7|!0 zYp~Wh1`EoOXTqeOs9p*C?hTEnMxmLiSplo=fToUCsU4@Cquro=AN}tLRv>q^&+xHA z7oDrFyKb;^cW$B|K}uiJA2Cun zlTwJFt#~$8oiD^D$q>m1tV{Y!L!`T<`(R1@DxEEx&#f^_Wsha6riqo)+y_LO{ z?NweXwpI>RjZiI6Emdt+ZAZ^7P}Nk|RriLKKNpt#0kuVaTwRFu^F>&yH!zOeRo{oj zT2CX=BxFoOQKyYz?G>T{#Z*U#nZE-vt|EjA1p{B8Lz`6u!(Gdb*{FGm zx>Q}RPStEdYwpnO(a5yX+F00*$*9R>%qL>KCvOGC8}P$7Tsaqsw@Nz03THO!d$3qF zSoO!s;$_LQG+3rHWSO#yvY%xSWKHFs@^WUxw5IMy{bFfZYwPL1F8$E*6L1b3D#qI@JQ`Z?^9n^_t1_qRGq8GV@A$2 zo;QlnQ{{9h-Noc7cE-1E@I1A+uXrTZ*KU%A@LT*SxhA9xo0Y(c2T>k-PG<_?{v^~*BCUrG+$`G(!^_h z^#1yd@Wr(^b}X5Y3gETH_!x{g3netbMMT)FU}KdBu2>!Nw(yL#D$yptWtMb zmMj}{?t0E&G8!vZH$_9N_`(&J6!(=@rJKqfYhPPybyQ8jOn*kzSnUCQougT(`A%CK ztNbr@dkozu3329Z!A{D}su(pYAK}bBuYFr_S5X2_M!Dh{KFZ~ybXB@3-IYz09!fzo zyp>|595vS~O{l%iz6e!@!FL*=jK(TIUYV>+Q)Vbw~6F)EFHIR7KFD`y$!8E?W9IT-fR63i4Rd@hU=jQ?73 zxOlGkp|~E_2%WG(2$w9z+Ho)DfP0c!Qcr0osW0?rigdfwBCR27E|bbkvJtWb*+SVS z*owzs%@o3`D}oOpUOrd85i`O`xmGbm@g_V8MT#F_M?P1yLECz&B&sQ@w^h4TKVdCT zFha(vQ`O7i<@gT%t?`;9tldAr7;n)$tf-9^qr-BHd*`%nuz$wF!}Kxyd+vJ~n)9s0rIp1?zAkdg)B#LgNZp%UiHM`qKD4JR=R^w~3_bbOn0t zNz8*}k26uD{&mGZ;u!Ht*o*d_<2#rKpNb`t{t~m~6Uhbmr)(a0=Gp58-`*r{{rtJ~ z3Ve}mA&)WWRp(^)WnOY`xmYfjFOwgYpOBwN59_GtuFyd*!W3f_F^U95nqr~iL&XJ! zMma>eNVy4?^{>jB7$JQyFQz~`pQx^=+QCm0qn@VTr2Y_Ij)!U|O)X6bWHeWkgK_g) z%`fnn|EZ~m7ViKXQKD6Asn#Dh=?M6x--o=;z>nTeN8#U?tXl~$!d2Z1T?hE)60n-f z*I&i@(*x_vMTSod$Klts8k#|4`eNlV8CvqL@gw75j4JnFU)xp;p0Git(3!9@_AsBm z#hJTD@rJl3EQj&pMdG)iJ#{4=FmKM1JeD+uXK}uCnRJ8nQ}`Bsf@i^9<|Xr%iDh!x zPi2 zvQ*g$Bes_+2z@I@^`0sZ{aubZHUV?&7WFUcmhelj&|K8i#od+xm^JTdyTDq0AGWzS ztbmX7xAZ;Xk^0);YLvl8e#-c}u?HPQ^XVP<$(*@oRYdT`Uld;x|0(u@XJMoy4?cxe z@Q?JCO^~mJU#}C|Z>ge%Ql>Ox4tYm;LHS(S8TQLlHPJNHbkS%u{ozeMs;Q-QLyIW2 zP2j6r3U5t4_(FH+y$qv}dwpYntm@u{bYXuLJCph7h91cCme^gQg8a5gN+iM3iPH7( z$&^a9vKV+?R${HPN45{Wy%=7YT8f^E5zwHeiiVI*igJo_1H7W;${-tS!gF26_`KwO_?=z*CSc zNk?gRO9~_>C1tq()CzZ=`bmSOY^}Inx=C6fJqd5oeW{16H9XtQPDnu8u0$yh$u7&T za^84v_~XOmqhTw~k>_D%E|i~vxAiZ%r=lIV-iudEQsgM!Q|wY4R(z%S9X@b(WmBv- zhbrHM)mVt0!MxzDU^|#peyUV>Ah)PKzpC zPd-?)5%$Gl^pex)C-*R#xM-VeJ<%fnuf21R&$;gZ_{Fw1g$*mG$>e;h@A-6nuj?9? zLn+g}GMS8!P{yqqt(qckrxtPwErc@Kozrs2nTneww945?l13|%@_T;2o83yc+u^?N zet)b#`m0C2*XQtlzfSLu=2k1Kht=B}#i}eu*F9hzv8s7%dfRyK_x9(eOhR*W6rv;E zU9&azTSD@e=w1a(Re2si}fhIfPj=hQ-_C9@Kzpu1E)L#=`Z~L2F zGlzc|#Qr|GoWtM=a%)m;VLbZHJHl$=oKT*coFMk5Upgruaz-VW5G5Q%p(4gM~v+gzOgTFhQ-OLp8C38NQZ9UrRPv);?q*ask zY-@D^vA$+a#nW729YzcO8Jr+`HFVAn-WO0bC!wwW!@C2W;CpX%G&b38#*KIqWIhqK zY&rVaUi&y|SQ%e6Uww41*1m^*{phyi!L3VtALFH+#&?PE-$6%<@wf9of|Hc$ALXC! zUr0Be1kc$R@I(ahUJr9+LM>u%{`sV_)! zzO);Zdr|E)^yd0`DP?{<&l}=#(HT3p!=$=ifq)fEWG+9N_e*~mCoF4S9vRJvztrk7;^`>Yq@l_YUraF7P#@Oh(dM~2dp7x%> zJ=u;{dEPGNYv#KL_RybQnCuHjxAKD}x}ZwE1(y1n-VhPEH83RbGQD&W>f>qW+k_zA zKjrU17OH_&nh75W>xILx3(l|928=XZ`dHd7RhFaNdXXhBaqC2o5=KpPRyI{lQ-`A2 zj#ev!78T9Z+G%C<^7_;Iv-)ymCZ)pyS$+&w~6>mId&7Dh(g+tZkCP1 zRE}?TP}Op(JC9wtzE4w8a%=iT@pW;zcvAWv7o?W!9=o(^H98+RJ=W!}#SbBy^Y$S2kNrgx6(MEY>m`k*@} z_&WPW;xT^&s%;i%8R&-=;7JN{XD}0lO1RnUso3#S7rDDUnBEbB%hOZoqs&z@m6fpa zqiQ&4JX>3(9oN2db*_{8_j;I7&iDkk`2xK3nE9x;k9Q)c@dNLA@26V2=m-?Ha zL3C!nM}eb*T)xvsNM?7x6{>+7JBp8ppKzNlpswZ0<+w9R%9F}d$_sFva%vQJrYpO9 z7rS~7yE+9|wvPU&{(?SKpRX^2eH{iZccPY$#P!NDYT@O)h~w?(U&E|&pcmVI%U)nd z`l|X``tJ3;=9}tk&fQ1ZObc=~@15ut?Zt=072+CcqjW!d#TL1h(pE`U99?mpy4m$t zUj%PO>9zE1y|I}>660;F!1~E5i^|`|)_h)H7cvk(_|N$V1_lMD1ZFsAIz7n62AzeO zAn#ve2NxqT`2EZegt$cZ(0$}5p5s`1KSsXJ?xFBF>_{VvEqQ(F#C+oQEL22lOdjY;Ss zCk)9$rfl6v07I!WLI;l`3)zkmDRy| z3>SS24)!7|0$jA$TaDW_()Q#R-s^M1Q#kccDxWI1;!OtBPU>TLDJ+8uD#p77+G zsqb-mlIsPg>lu0$j4_8~O}<_R#(syfx9@AZ(+XMTt$}^e>5{#gE1B z#18bZ-O_i`n%3sK9l^*Icx>7Exxu9#hjk?iSe~vpgk}St;{ayM`h!JkIG43}W z>2+r{>p)R0XYx|v*wy+&1&hx6fbcX-DhK~DOWa7#pc|gtVZO4P{3NLGTe%0? z;WzA$$7p4IY@9OFtl`|lEX%|Po$U>W+4aO>OScz+*uS-ZvSU!NvdJ2qhSxqw?_c2$ z4KxjSqJupvS({s6u18Vr#*=NSE8R=dqBLBio%|FmBac6=E+=vW_cK*(t=$LT>VPNT zReMb9qxDCb9PDZgBek(^a%zS)Q(FP*G|}|>v1aM|6!vx2rL z;hDxtT!9=ky&nwKY;N{7`;(Oz0``ovI-}wpvc9%%@m9pmo#)-+-3OlhD`#xGe<_)$ zV7E`!78;?z{Y8k9_M)XphH132;;l!>pk&}ve~wdq5^ZmX_oVk7dp~~R1v|9JEA;su z^$jV;@{^0wStpC#rk?)(xJBcOyrQ*u+BGiImPZ!r#%}M93HIc&o)V~OGab9C*jQ{X zz9>lKX$j8$Zd@{CB+Fk8TKyO}f1hqE{T$Wx$`@}$)U;0UksZTB5Q3HzIW3Y>K*`bNILbf7|@I_lgZ zC!s;!D%izK5v~jRBdMZAxZ$6P?cu27rO9Z#eUuNh@%jv-5;vi@^@f#gt+qB7DXhO( zwY|+QbLwO=HZZMAaNbdJ`@eJ96W}u3`sIfEQ(ed)b=str;4vEU+RN3{)Hk8<}(KzSQ z(bs63v@I|uA8XrD?+#`fj)V0&$%$GdPkNFf8iSg!jx&3XWKTzPiaE>Nf{IYrdXTk# zpI?2*`pOFPmLtn!z+Btm<@W)cZXbSK`TU$_^q zuM5n5v@lLsDC`4qo}yCTCJqqWx@$L-mHPpfT2~fj6P|h>TxpQ}vNA@QtXk-f&ujar zmu2-1Rx9r(IP!IUBvw40v|yJ{T$&S%5~HcV0kMKqU1}h;fDLz(#&C+JNNo!-1kv5rvCX~&M$UNlGXWvWQo6`PW_(8`4p7dZB-vpsGwibqw zY@JK(4u=1ilLkoj7Dn6*|pp(*i-h4oQ~J*IlfM)oTYG}S>KFcCuZXrMfPzwd-g3_Td-K( zy#pQ49tMkJz*)z{8j=8-UL}RFYw4ib3Q8Rke(jZxN>?RCc@<4zDTrsI^0D$cDaMAX zrFK^Dz_Xr2Vo4%Dbbxe97`!0?u64pZZJyz)8=?>;(RC(+g=V=rz$R-OPEsBzuL@*N z?)9Fsf3>Ii=92e2;fsKUMd8-p38Q!f{__;d;!9MV9Gvz%|0(=+58ir2plaZbz?}gL zP33;lVO?>;2XM0g7MSEXZQ!e5SL-Q7f9xVWAq>WAn~L6;iN4fFp3VM$jqCn{{ImRb zB~^PH7x-(fJ-O3~B#l1933ifCUUGSk8@(3x___H3ny7BKvk%*oeP8jNr%>^3@~g14 zk?5W~{hyNpI6?;Cls}1Y>F0dInqXd*ceI{J7@CvBX@&2XD0CD0f?BMU#iEAb|996{%K&dV3%veh+|2Vt%pDyV!JpyV!EWw7@yI8P^(-x%{AxJF$R%MsQFZzQU~2=X&qT%GI< zs=y(XMv|ci3j2J#(3KT?4dwn*VJK`qOI$-8-z9dGdPq-5gGhs3kV553a!pQbFL^O% z;vki=jhdw<(9uWfqe;>&FqXh}ca!S7*}TmhNUvT%&CfOOwjM&icoQD(BpQ!e9lbqZ zd;3rh&v<3K8|vWzde3fj(xbkSXoqviA8+%2;Xmp>?Y|wLwl$b7312n^KQ^7pwJoqa z;N~v#gFShy_boy_K}Wk!5W2&dQpqT<7q*aaJw`6z0+p%;zaRGO;YU>2{dOW`ovaA_{6VOj<4cAS$gAklvKBty{3#%phA^U2Pw($1672-d^& z-#R%B-~i3^S$Z34MGvDt$+-!}+vtRq%$n$g`%S~To8NuX`qBE;@{=j;0}g!MdlTrZ zEP6};-(s=vSKnQrih2HxoUA;*h!%X#Ia5r%OK;SHfTxsy&Eg{1M;FAous^Y5c#VLtI`gg6gIV&2SE$5NGiF z!=(qMPSRuO00ojR`{c*vtyHU@luBwV^=VQr^4>B5NJ)?`~^9d-c8b3;6P0D(*1vao-v0)SV=TUiaS{crUOYj2YtkaTP^@ zZ0$HQa!bW8#oMHMAd0TiGSu53?#f_z<081j$K)HM_;sW3c#n{YX{`2EQ{d}kV0}x_ zWmsv zpJk22*Iw-X+*#+i5dO9oW-*0XFyWuXgL1f5Nvo_?*J^6DS zm+d`%Pg01h12q>qlMMPBZqIokM0$$OeGA@AZ}`Dj&YR=xUr=SeAx?0fvB~Vh`iFvu zYM`I*^gd%hK?bP-iSJo~x1F<;9O7yZ_X_Q)PNmRZT2qnUqV|O1|A!lujLJrJqoz@t z-E54qD&y&NCbzoI*lsK|SD7uWHrD+h{!ZwpsotaZ5B3+ngTBuASF5SpR=|@M!rx~@ zmQ<*XrrA??m)V7P#G&{q3-FUoxwHJZue|de=^<_p?r? zMUidiTj5(re&!qBeA0%gAU6Koj1b;R^LUPnHxd0WZnXdv zJDH5f$cm@HeMiuDrlaOA0LiZvH{nw5W-{P7ipWo}l`>Lg9Lol7_P#ASvqV;*m+M&! zhrdjc=Ae--s&&;+K8_7iR+$!Cl^q+!ayXI(GKe?j_TSHWbzP>Rv(nFXYo8 zFX>7rx%-&*`dx6?F3LZ5BmvD)?oZGiu{aoG84g4O( z`6l$cs+{zOobvYI*Um866zw^bt+Dih>CFDTtt~=vSq+BB(ROM3aTmWKeREzbrB`4I zqA3Z!HaLy_^&u$#6Hx}{x#)5$OkoeHvt#;?`pV+uN(XX9U z%Q$f69CVFkoaW8+)IG*gG@a8pVIgJ(5<9g_!PHFKY-zS7lbwXO>-5`Ksn&Dw5SHPR zZ6=?+$2{tyGLIEvRluRCWeK=6F*uoRt%vaydRzUh=gIhww#G3#H4~L!iM1YXoNMjF zXEZ!MXvXMm-OTEA1JH=SCixLqf!i>fjs|rT`4ZR$`P`5O7;&ed2LL6Tvy% zm0n~eJQ?LZsno=4$+_gBqdN0^$Fvh#KA!m5D|Y+=tO z(~1S=S@XQpIQ>`_4jy@xQzzVu{PHeVjZh=iD)=+eq*M~= zKTa~sLyAanIdTf$G>^<-E`L@S3BzeHv^*vl&Z5CJU``>1`2;7`G~tp7(KTqbY1fcf z=UaGbBRbgQ`B(QO8CNca3_%)c=@EDf>2%e}$}~FbY*Gc8xOI!+N|*W`J1b{S->Y1<0d;5rMoYDS0BDwK-lBnxSu3vRZ9nQ{6JZ?@sSO^o!qEto- zRfH%Znsj7qxON=b^#pXRB)EJpSVgihkomGyAx#)6j6fGo7bXak(HS#@*`#7KuX9Q~ z3iY>+*Z>DsKpQheTZ|!>(^_mR#)*H76t4LL?it7)I6ckjXL0aWr;jC*Rd@QA)4MWIg0s+5os7DZPj~v1 z)1y43^PS!l%`~LIBxDRzka0{vCgCt7Gx?ZCMkt+$#|-?xEI9re5?DF#?E|pVe9{LV zrt~6E6QY^U6PV14!LN_wU4SH#S;mUnUzmj(jKE#{fNv`Ao z{PzSiU1yo-3TB=wf>cZtvs?|BwgGzf0wqM}t$ieQ6R+T`M>(+Tx7Iqa=b_q8)OXG zt`GA&mGwrjg;ROMu4_IzjOwy@_?{eTqpMgC5YPY!qA8tjf@+P4S+ zI84>)y;a=K%YPFS;f(fru8t>N`8MYiGo?JxB#{mG>Q-HHk1B z1uEKovm@Spqa&5KInr^?oZ66uBH?Heg3I42U@m zRJ?}wkxrnwH*oQ69I9ub=9w%GMeEF94kC+JBsLVG%>pqDgc(KNHQ7at4py9pcbV(X zc~l|YtH_3{v?ZakB{QR!in8WOitrThfTmD9$rO7X*nKB&Ipy)K1-LiCyx){il()S) z6ua2X;;!L6o)7un9BC)tyyuGVUO2xdTCP((y>jJVo8rzQ{yAFWf4^@l?rR@cuaW%! zz55@M2*_b(@b?wqY>AdyqNTc%%K34SN&3Tx(CoRH#&-tud!Nc4a_#9=$(N!E(#nDt8MI`~}tvkM3GB4Gn zlFJxDCvrTu4BYKZw;!!^)euJuag-282XRyoM+0#b5J&%Tv=2x5h+#sbE&a;r77n&? z^bSYuaI_Amdu1@Kk;&vtHooxhyTdVF?TCPBwZ=0_!v)S}#xq|oi@y_#kCTcHy_lT+ z36NMF=FAh(iL=mvkEy}T!P~gA19?#_lhkV-xtu86m}GpGdAc*PxCZoa*6^f9xcQkq z#cvcA{N{zi7!;-m*H;phER^P)B3w7^cdtDDliBCt3>8qxg2@0y@@LjT^;K|zVsU`t zaeunw{0wB`d?;Ts!JSKL?TaDTlg$e&|fx&kxq2gqOMUwknF&p*P|Bs{`D zwYWlEEDf~a>{5EMH#!^S;Oy06_YJD!OcS3Levc4pU4Dt zY56AkX3~-s<=c4G@^<+S{P;#pw@I=lTVyAjlkK{PS+@sp=N~3R*$s!jH>vUgyq!2$ zeqMf&iR6)FD#tO=GgY3!M8q6kvsp-@WU0Jd{($!@Hj#AMMlx+TY59HfA^E6$oUF-d zW>L?{k$87k>)c&ix6S>{djw~T-dl{oLC9oBSK=FN1qts_^T5Cbq^5(JnU5rCQ-?Pu z6i!hrdB%9= #include +#include "glsl_optimizer.h" + #if BX_PLATFORM_WINDOWS # include # include @@ -1611,95 +1611,102 @@ int main(int _argc, const char* _argv[]) { entry[4] = '_'; - const char* brace = strstr(entry, "{"); - if (NULL != brace) + if (fragment) { - const char* end = strmb(brace, '{', '}'); - if (NULL != end) + preprocessor.writef("#define void_main() \\\n"); + preprocessor.writef("\tvoid main(vec4 gl_FragCoord : SV_POSITION \\\n"); + for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it) { - strins(const_cast(end), "__RETURN__;\n"); + VaryingMap::const_iterator varyingIt = varyingMap.find(*it); + if (varyingIt != varyingMap.end() ) + { + const Varying& var = varyingIt->second; + preprocessor.writef("\t, %s %s : %s \\\n", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() ); + } } - } - } - if (fragment) - { - preprocessor.writef("#define void_main() \\\n"); - preprocessor.writef("\tvec4 main(vec4 gl_FragCoord : SV_POSITION \\\n"); - for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it) - { - VaryingMap::const_iterator varyingIt = varyingMap.find(*it); - if (varyingIt != varyingMap.end() ) - { - const Varying& var = varyingIt->second; - preprocessor.writef("\t, %s %s : %s \\\n", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() ); - } - } - preprocessor.writef( - ") : SV_TARGET \\\n" - "{ \\\n" - "\tvec4 gl_FragColor;\n" - "#define __RETURN__ \\\n" - "\t} \\\n" - "\treturn gl_FragColor" - ); - } - else - { - preprocessor.writef( - "struct Output\n" - "{\n" - "\tvec4 gl_Position : SV_POSITION;\n" - "#define gl_Position _varying_.gl_Position\n" - ); - for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it) - { - VaryingMap::const_iterator varyingIt = varyingMap.find(*it); - if (varyingIt != varyingMap.end() ) - { - const Varying& var = varyingIt->second; - preprocessor.writef("\t%s %s : %s;\n", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() ); - preprocessor.writef("#define %s _varying_.%s\n", var.m_name.c_str(), var.m_name.c_str() ); - } - } - preprocessor.writef( - "};\n" - ); + preprocessor.writef( + ", out vec4 gl_FragColor : SV_TARGET \\\n" + ); - preprocessor.writef("#define void_main() \\\n"); - preprocessor.writef("Output main("); - bool first = true; - for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it) - { - VaryingMap::const_iterator varyingIt = varyingMap.find(*it); - if (varyingIt != varyingMap.end() ) + if (NULL != strstr(data, "gl_FragDepth") ) { - const Varying& var = varyingIt->second; - preprocessor.writef("%s%s %s : %s\\\n", first ? "" : "\t, ", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() ); - first = false; + preprocessor.writef( + ", out float gl_FragDepth : SV_DEPTH \\\n" + ); } - } - preprocessor.writef( - ") \\\n" - "{ \\\n" - "\tOutput _varying_;" - ); - for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it) + preprocessor.writef( + ")\n" + ); + } + else { - VaryingMap::const_iterator varyingIt = varyingMap.find(*it); - if (varyingIt != varyingMap.end() ) + const char* brace = strstr(entry, "{"); + if (NULL != brace) { - const Varying& var = varyingIt->second; - preprocessor.writef(" \\\n\t%s = %s;", var.m_name.c_str(), var.m_init.c_str() ); + const char* end = strmb(brace, '{', '}'); + if (NULL != end) + { + strins(const_cast(end), "__RETURN__;\n"); + } } - } - preprocessor.writef( - "\n#define __RETURN__ \\\n" - "\t} \\\n" - "\treturn _varying_" - ); + preprocessor.writef( + "struct Output\n" + "{\n" + "\tvec4 gl_Position : SV_POSITION;\n" + "#define gl_Position _varying_.gl_Position\n" + ); + for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it) + { + VaryingMap::const_iterator varyingIt = varyingMap.find(*it); + if (varyingIt != varyingMap.end() ) + { + const Varying& var = varyingIt->second; + preprocessor.writef("\t%s %s : %s;\n", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() ); + preprocessor.writef("#define %s _varying_.%s\n", var.m_name.c_str(), var.m_name.c_str() ); + } + } + preprocessor.writef( + "};\n" + ); + + preprocessor.writef("#define void_main() \\\n"); + preprocessor.writef("Output main("); + bool first = true; + for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it) + { + VaryingMap::const_iterator varyingIt = varyingMap.find(*it); + if (varyingIt != varyingMap.end() ) + { + const Varying& var = varyingIt->second; + preprocessor.writef("%s%s %s : %s\\\n", first ? "" : "\t, ", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() ); + first = false; + } + } + preprocessor.writef( + ") \\\n" + "{ \\\n" + "\tOutput _varying_;" + ); + + for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it) + { + VaryingMap::const_iterator varyingIt = varyingMap.find(*it); + if (varyingIt != varyingMap.end() ) + { + const Varying& var = varyingIt->second; + preprocessor.writef(" \\\n\t%s = %s;", var.m_name.c_str(), var.m_init.c_str() ); + } + } + + preprocessor.writef( + "\n#define __RETURN__ \\\n" + "\t} \\\n" + "\treturn _varying_" + ); + } } } @@ -1806,6 +1813,8 @@ int main(int _argc, const char* _argv[]) delete [] data; } + remove(outFilePath); + fprintf(stderr, "Failed to build shader.\n"); return EXIT_FAILURE; }
  2. 4fHVgwIz{asj>@jEWNDR3kiBEgy?wIjM4DrkB`-#PEi9=%e**j&g z2;m1PldSoFFtldlRZ$%%a~ZG`{j4&xEwjZTOEiIyP$h1U|9(UjfH@~pD)rolUZ0XK zovfZ~X2>Q!bfeC0rY=1AP^|>6mJPnA^C=LDe@`pd3y!3ASTAiv;Xo_z591ooeg?-t zItW{+sQlx0BW%| z_0!@j95}*}Fl=Y!6>l_VtQAIm(>K21>R^{AG}}8mplM9akF(EjG1LMArs2;qHOKTA zR7j1qpVRXJlj`kO<0;uWZ}chw0oq?*R8zt5!VA+r664ToU&>@2c)pZ@&s5>$sNihsV50f@1@2F;n;oJ?x4@-1Ucztd=lU?mqhrY_I**R|tVv;Bd zmdx4bv9P%7-T(X2(yG-Vwtz%l%}8JQ^IA4MjB%`yQVZF(PQ@mL^=z+tMCT9ZdxcdU zaHg)$Hu(M1!b*G)8(Z5a3TQ)hQpE}Epgp%&Kz>-2iLyLr9&G6l;qyA zR)3*9-uU?%X!7dn8jl}&>M8=;-9G%?aOy@4YBe=1ZH>u7e9BPUaR>hHj{=b2&wV20(z+cU`;|ExJ zGPq3eJN^*;TN?zOt~g;Xa|dOTJQo||XCGqc1s&d2da30r&gHopE(SXTjC;ijg{j&z z)4*&{yv`*VPit~Kzt78gBk@Nkc*UrLqvbQ=^UWNTQ!#O9Ji>e{A@M|+7XXR|5{|k8 zTw#=xLuDjwpSDLRGp;n#mjiVHAM7YXfRF5Y1H?0{h`b(zwzr(daX^@*!}-M0Z4ngB zu>)%3q8Ak(t?cyCj)$wGe6K`CHR%&byTITD;~y-eIe3~A)AS0kZ)Oe%S{lfG2789K z^X_l`7b|)#-o#xi8#;(6Qs;IwM~w#`d&JSwnY@{bHfkxNL*VI=x;7G4Q7wP6I|F?Q zmmjbl&zfE%UOc+&<3j9YwZ3Z@f+R!zida%v-CN_H|Nb210wx=kuH}_8oG3s&r*mc9 zWnZJ2MjFDMFwwI%tD|Fjd4QTxM{QG>{2IHM8492bU+k*L<02NEqZ{t#{sR_YprPxX zNaY|>LTayWf>0lNrZ{Li?Rhgy*M)KWTJ9W2{`Pn$^j9@%@G(V*HFMi~{+B-?gzD_J zAw}x?zXLUpEdQL?*oFjM?tsdw2K+QO9hbW%d?ECHtfv1cs==K5$F=P(%DN#}eR_U` zu>Yqd8Cz7A-&10)zr19u9@`R=8iYy|BQ%SQ13ny@;iQ5(cRknTB$q7L?iGRj6$=6J zgAmq}gO4+uZ*E|#F>k}FDANY#zCp)Txox=rr{=cTbv!-A?=iI*O!2>nrhZX-l=gg} zTaj=g5k?!uB0}>$h;nB_PP@OJj?pp9m@5~y0Jw+PcCB0)tB4Y`Se69d~wmRm>rREPbM!5)_@?$ zN2Zqq0G#KNyQ=yfT$6IFOIQe$(CiV)%P`E;X>Bn}P%Ddd)g)`uPUGAZ+dOCstl^x8vcx_pyU(Zt6WS zYSZRWPqg^8ri06(yP}D4;2$Gx+L0OAZA0amk+qfG5F<%t*$DeA7ePwuvMCfub+~g3 zsOrm+#)8t9NI2MD&uTpFiwb*I1yAhrjnIOW(*hsD*sdj}*SN{8cbuO<2CpSA9_Njz zSs5(CXyb4vm*wG($Apvc8CKzD?^NZ>K`*|mCd`Dz70PDas^tog#*f-XJ%f6{!*Qoz z_p1TtgMJx=0Mhk0uxzItIlXK5KY=Yf;G>bg20|cFoZRUm<00eR=z-hUTML zd|y>VA{lh~K-`ZPQkDq*0!ABB4i&B2_x#tpc zm1_hye4Ec5>=-QTeHuP4_xV|ZY~plgr2+L;ozQUsCZtdzNMak8s7gn?UWJdS+Lf;) z8jWi__N1`vsBG1jQ8cc&^<*C+OayhpbQY8ChXT_viDz$08g%to*%7_ROR6g^CGR1l zf&7&+i=!_okyHzCy{2$O#OEkb9&^Au?rbxr*x{?(J0eQ&#QtiK;1cTNHu^ne+|H5E zvFFE{qut`ukb#`sM>GMaW)M(W;&y+=x;qeEED3=82-vER%DEclcl0Yu8PGLgh`|Xy z$0P=1wM<^%m$~R)Ib*$J!DE78xSkZrH zagR$y9otuIo-Jd`Rs`DGORh}fGq$CULZKgoM%rR9eP2?8AZ~(thi`Xp{OW3?R!z%S zN|*B__T$k|8I)c|zCm7}|MmMM;k?2jjt?hMZeax|GC5QHh99R#Oy`fh^y58HMRhHr zIYd(K3e}{Z2C>;aY*zgYVk2o$+L&_)8}%kibxhbTX&}F`wfkmB+)wu(3&9$)hv8i? z3)GBwj(?kUpz=cBf)x@s1fDO$&Gx_S-*^sX8#GEwkVZAteH7Plm+PXod#Z(Lp)Hef zF20Iq@ZzjoyW%>K{-Q|8^J1Vy+yXJ{TYo|A#8@TkeUub_n^pju8QQ-%f6o)QLZjNF?1=v z-MXXcaB$cceWCNqN)s5=YGzti43jn+9jJHsH8%TL452}uc2ny@dSf^h4G3)b5lL5R zG?LIO6e{X7D#{BdeMhl3ua8zRtd>Y)8QL*efN@Wq)D()lq7UV^SnpQXWvw~bq~6*# zpUs^;xu4t|(zR(GH>W`1IS{zqvtm5?$-;BoiBG9|$Zg!hX?`|3t+cQN3n>{rdN!O% zS&QE5N|bc@<+&X8rXgKrG7GA;b;`il*dwXy2~6=R9;_zIn3eD27RPP=*(+lL=Sgv5 zIacK=#+O(cg{~RoSDM4j2}ZL8^$@-?H1x&qG~)2DFJvccF20~YItti+vw~o&pK6QC z&Q4`z?Kat^Q!7!{{GQoT^h7l!?@Dkouv4D+63c9GTxF)L&jekBStD90i;^=n#Kfpt z__S9LUEUlH@3y}!{Y?m=g>8naQU8edDDE}2$x^Oef~vb9HWe_z@rwUdVq|e(eF^2f zeFqMKtT!5WcMF17Fb$D2BV?;CcY^`PgHBDuueqBA(5-Q5iP7<`2|?I5@A6SD6GS3K z*<@bG7OsBk(y1%(X7-j#2DTcdp&}vJ0qzWFWoNI>%g-%{nC+E1W&mlBvU61GN8=E! zEgh+JUSe0_pz*{~9k{g-5|W1*MR<%X-eJLyify5dVxRzngzD6TO@fhD?sa9}@F%YZ zuu89Ssr})Uc3^7BGS&P))}WlBbIBm+6eu3c)wB0Je=>q$Pg#Z>f`LheNrUkZL6R^y z=H;jQbyd(XI9)Sfb@gclXHlDvIubh0zLG^mV+!|y3kb^%3dqSP@$A^{I-J@;uVA$V z0uC{N{sj)OCYi3{+$vRRI_l!%&1`=^oNH(9T8o}wAWE@5sB56V0A+!@QoJl!A_IPWKIy+GA^;fiLY-HeFMYtO)fVr-7 zJ{4wAPkbYCOtx?RQa8byvB4&Z)-ik8UY1=k*${~8e|j?BDj`8a7}atCy-9qs20epi zZ!HQL+U>bN_Xiw{ZB$**_tYUOu4Z|{UI$+1fKwoVQ9J(1&Q4`T^IXTx{KZymk$km} zA@cil8PpM(y*cG4qz>6|)~qlM9Q5{)Y+E%aH8%4vB_!G>P6rBys`!<8_pe1<39^)K zHy(Y4df>YY9_uAYV!yhrz;tY5lwVnWp|OgPmrs2Zf>Z^<_cCR~*j)<^aiT9I>H_Vh z(cmt*yOnKc4$bZGH_&1LX(%7_J9$cr7a0J`UAC9&mv^SHIn*oH!eK>qx8J2>jA%HAIBIhK zuOc7>1d zK8t8O^tc#j)@SHIAGXN5KLjM##ky^u6cb9@)qOXeAW$GW!#VH&S?6lMuIv9$6F{9RtO4pcf5lsCv| zErn26I^{r^OeC$w$m(8h%wcLkr}YyAH#Ph7m^rTfu7KI}ItB~K=Gte05h|hkC3vY1 zN3i(XpJ#kh9wvB(?Qj9^q-+|wky}h#AsH&104x4!5zi^0&=qjHh;73aqiV!_t{`Nw z_>AlWoGb%zP7;A4s9n+Esr!nXpcdf>FAWk8u>%S_C5U_0OccVT1Eo`!X_;iR(6GiL|W1mmlMbMRwB8IeX~e@gU2` z2pI`vudfZPvwIa`ZGHj1C6^{qFkiTEp}VDBoM1p2aMGKu8T0 z3em{CJZj%!TpS1xKCc)wOiz*_pjIc|g71p7d%SWp9Spji?6Yth@UU*t-XdXa$uk?O zE=HBNHhBTk7|Eg^rLelRALXtFn(Nly#<>P&LwMAkjzs*O4fBH3d(X23dQli90>VaG zGY9K)(U#{logSetqUa2AcZP?zd95Y`K=7qB3hw*7xRC0`?oAA0!pWBWIjg4EEV~qk zu}mcbM{DTG9S3;*C8zauyznLucL_?fEJ%g1_DOFoX`mVEQUTYsq}NVRwP42qWiaPy zTZVxt$PX`d!Uk`xZr-~}yG=bX^gaQdm4)Pd34PD7Kccwt;qGQ8HH(KL%lUTSH3p8l zK-k>s1;Rs%3DsFIsBl{J6ep5TV2Nxg45xP2tk9~!4?bv;#|`9V@DezOSl>&7!`ee6 za@rxF&pK<_x9xFKw@OwZu*WfT?gWum)}*Z|AUY55oj7X={l7xkvjfpb{Eg>)sdAaM zfk;%$I)`6(l?b!Q(p$F7v?s2QEXt>=P?wz^Yi!?a1hs`W@6NI$(gpqnfdJO+2z48M zi7|GdI4m4S#5~#UAG(XNpi+n%PE;tR(KyVWefJm@+iLu;=RgKh~?-I_P{W&!DVYnIX&jU$!HM$ zb=f^ApktAaf_oGPK--%&XHM2YbI3e8*ao14zi6~Z$nip5u6k|DCa~tbz?1DhG*VaT z{S)h=?epP67re1#D6)@gqRp$E_)z`bR8I{T7(JTYmqnP_Ujgp9+~?$BL}liNf%>qI znt+wB^RFmtb`CMwdL|@J!)NU~Q3Z7THlaY{^AkU)d>`;bZP1@mDqZhDQc_EB&EDk=XC-Vp{6FIuM)H^D|A5tO=;rYvD`Z0Mn3DCuO0K-u>C$Ts z*loNvG1Q}YTV^TgsYS-F`ToN)-n$G#77hcBOIP*3rY*&YMW}98FlZ>k@)P`Y% zNeAJ}=TdJg*k8a)@~9;abt6d*Ly?#L$!y16YXjnPcGx48QVa@?A%?&P=eAQ|^x)|s zZ*&tMZG533hxYysWHv`#&(Zt@FTZmjLj~iF5ip}0dUCIxI_+Nnj`Z{Pk?RD=?SpAS z3S|37*z~E^0k9Cm8V~$4c-4PwsGzec;cE~$+(HlBIuj0D$d+ij2F?m^K4{Bi+_18f zDkx&sV*qzD7b8NfyqfSXPYN+lIu`CL1|9@9QO+u|^Q8mmUPCDWhSy>IxR((d)e3T0 zwRn-`e-ww$iN?jx;F|@z2BLZa|h8F#MgY9_d_0(b(|*j6=}!ayu>u&eZB?zFXkozxF(g`#vsIf8~x zLc6M(>cYU1#KplssU{H39(*1NbK@Oj#-KhCBK3uqPPlCVfKEuHH^|o<7hTRg8X(Zt zo9;CeBK+A1uTT-PpSfHF0K`*eo@!#L8Zq}yoy0)y)-%^=VEip?Y^X_IcYA<8+$Nin z_h4r&;fZz5=qnOfA2Rg#*zf1}Q8&*CZ_=^9&1t4qpWF!V8*^}wFEax*ZQW5LUXLvX z>y3R_^q+H!ar&imB%utQ+;$so_rxJxp=ut*+I<KRVaU5aT^l z&PXCc=Q!`EvAuL5|)E3UH?4KI}Q=z=?8AVm{*ts?I$(#L7RJ-aU; zE&ngui5p~v5YZWQZ*EtwIzt~6q^!QYH_kU-BY5sttTr%@uWTjCm1p(jJ#}9u788~9 z%66e>?!#}L_;1+xKmm<0=g}}V3LfJLjhT$0A(Qmrs!9xCZ)8M#WH0sb3wBXLsHklU zbL8)8DoJ%SBn!h>W_f1E&E2+%&*~a(opy9xDljdv;Kwi{EVY%kBxD{3@L65bUJ<;2 zHe2ga1o*Yh%m1*Bi1&^af#v-&BNv?HC9et^&nS!iAaSZtNLoGcmDR?kZm?4>EVMkR z*_Wi&j8HW7sPirQi&QKW`@R|wFL`Mnv(n99`woViw%|&0MBnD=Z;pJDpC(@uDlZR$ zL<}ZzUNvbcbi1H_biQf~mfAbGVP~bMsOoc^Of?+jgKuaS`~~v=q`ZSNrC6dF1w73r zT~u~{@kD@e!MWF4SGVwe;4g)DNQhUb^IXrbT<8@$!*6%|V-X#^RMzyBBbLvL?06B} zpxW?J0a8-A64RS(1Ao^4;b79|q;Kh6;4j`<)y^t#Oh3j967m~5TexxMMKS!mb z8^Gngz2Z7c84-igHudK-l|yjs7?%8(5l(1vD%rLl?g{1dC9<}Fjp=;Y`l!%t3xrUY zV&T@&@0=^HOm6%$uj+^&h1EA57qUld=xE^NqWY#o96*qkF5%GD-|!gS1pjpuxI{;l z0(K4@Zbfv?x>IRob<`NBtKp(@82=9N0d0t755lUE;n4116&^gQ>HxI&Ht1I*I(~Eg z%Qnmq3HZi-$Q+81sj{9EJ$!WU@)}UUym$Do!>)tC?C9#GHIFyU_d*ca+Cfl09Ig6f zAG4W+HP7;EZuEF>QPn_=TbyraE}yE-hS!_mH_9WDw3ojWET51sj8KU}*mDCfr)j)b zYPR|o>?c|Hwg_DEhfQD*{bOrH@leBqPsn~N1Jd*zmZgUuac+6i`Ba82;TmowCKw-* z;vAB(u?wHx zB9h-PZXesYx2*NjU)3>c5#NayK(9|M=Ple-eGq41=S>hJ^ggHp+K!FyrJ#+*voi~g z0kx^DsiZkV=725ZuRWAvQLY-(BIJk4Rup{J;UjI6MFY|)oIg=Z*iiZbw=J1jyIFj} zgYxPz5d6g`3GAA{=Y1BAWA3qE{MoG2YO^o9s*~bqVO*6%iIE-c6=}@)EOqsJYUGmi z#w!w>FDf5-G{A+Rg20F37394SM6eh#{&UjZN9U|*m(&H~(s ze`T|qQ)wGM*|7XphDA1ss%>$Qu`DW}-fi6-Ar1&j{b)dW1eoSN z#H#9PZf8l9qU^mCWgY3*jpUWYjc?^h8*3h8ogoui%maVImDSISNrv|2McW)JUt@I( zbU(gk-$eD5ic>h6yA1COB7m8+(_%V4 zS!JsY_u~9bK^G5ZKM{YG0Fj0MEi|7VaN$SwmdZ)JNx83^oDhSO4CZ*MU7YJgN15}c z8P}5003d^dsmKOyG&CF4l_+Hsj1p(TH-1xh5DV^;wg15Ve<0OSh{M~V1G_ZW!kpHu zNhrbf10<(JGe(Nex;4-uDP`ktYvO+%)@G7*koHmRbHj;AE)TWEa8X)g5W2WxhpkOm zB1_4=S_jtb3Jb~Xu+hvsFDyy?mW-Zv%H=KFIRE{6uhOHbs*-f-M+$McTc>lH{aOpp zy5noyDK6^!bdB-~3+-jWNACgoc5#@&WK5?Yj3rX9k_8BO8 zj6F7AS{u))*PLghErP-XN1TV8m(f9e2a!{|2f^MD0of!tJ;Vc{G$smX$%8BQS7Kgi zB?W&weQF+n8E7;FTmPD;C&AFYGBt|7@VNy7f&>Z?eKLMUYcQ+n-!cTB<5x!grvFvr z%}!1=9gj=R#o+e<xujU9?`hz*vOC!xbi-rOXWF4py;h6Hi>+zg` zEvk)UAx$DMs~>RXidzMZMTi*hvq0UfFUXNNeom?ug#T*V#L8x{jbfVfK1Obk;XXWE z`zkRZf%d=jk8QBc983zgIx|6$&)q94UVS&~YOt+N6%7%|gn2DFp;ACkn z;`Fp>ge7F;6hTKE$XjE~pjmH&zJs|#9B!)+wWX!5*JytE!vT`3hcLNpM6=+0YnnKW z&kzEj5V0_Ku<1q2D68Ni+6u2;ef9;;TN#5zEmJlxb0r76@413r2d;cdEY-2* z%sakpK}&qD>@5_vMRdR3Y}0~%+SjPu*?qDYD_Ep|3d{L3V( z{qHVnX90Og-ziSTtBgdZzXMyL#Eo5wm=Wpb8o`qLX4&%T8L5JMk}(n;M%ik8su}^- z9Ov_Lgz7MrkBeR}E=ii)y62y$pGFYN;K^tP3Wc~l)dSrZ{NcNO5f`k4Ey1=Lt-eT zYWV>v>AYBovqPl%rkJo+3II;m3?afS_k{oTwQL;fx|_#ISSt=6Wc6Yu-mnIBL5S-n z0@*SHYV1p1Ov5_e*|GZbN0)TrO0%zgp*U0t3<~ssWI)6=x^&_5J`>3Rx^3aaKyJ0>JKZ|`o{i=ty zq3qzq&-Q2#C<-=tF2&ML+GCo!*y1AmcgGKpq|FPt|m1`RDWV z1dH?@>m{wO?UEe%;x;(#M)8ufw=FYSFNY{poN@TD*wPZ;zj&P2PlFK|;0mWFzAE}; z>B(9;8ddP8x_Wuw6Fwq6!E~0N5f&k0ERC z*+22pu$ujVijUiIbyPBPEK;h!GV3=V>bFp13cmltqVTOjAPZI5l~J6{I#;E#X-(E3 z=AEVUxQq6GfC$E38(_am?oM)c+Otv%7aY8A2jZyF%8wvie3LLB%f`WU>ay%C8=%Ad z&Y){{THkWGZ1n=4F39Bs4HKtq&dPA0dP3C;a~Errd2zsWzc+>_Rz*Zanga8T+Jp>T zY&l^4toH;N@yWS{V?KeSX>pq$)3sD_PnssV$WW<^%%{lj1zNzdFDbL1_T(evKlSbs7OCF|V8MTWf{Sk22 zf$`3nj3S!tDT5g|G`5?up~p5#1j?`#u#;)|n6$^7#I>;@M0|wCHr#`#imbY8F$^+{ zqb^s}HuSD=T2ZAG7Xmk};O)cjJ)F%h(_`;wm_>4^e}9}clIyR4p7KJZ)oW@~TfB{@ ztpRS7aO?TDwJkcmusIWn2F2F?hYEl18*mpS!TnVJfWF=v5B?t!iUBk8o>@!kX9Ze3H3f zGkWp8Yw}d~8?qm^Y>~krzJgB7qmBll2L60~FNXm+pc5bpM zqKDqeyQ_q=sru^Xc1dfQ?z9xR**|!ZO{N#QBFH29^v?#4`mt> zhO^*Q^POGkQuKF(P6_6$fMIvYk*9#uNHW&LM4fq$`Wrd4nMT)17RK1Ty=uSqaVk0X z=!=rp;$ku{{HHnvNWg&^Zw1TVKrc|ir#i+=9*f_2)0ms;ZYt z&2UPJgton#Il;ynhTSzMC=UnU6=_|`E10~VugU8%z|QoMI@W=G5OXxJ&7zRz)BPDDR6k#OQn@y3))z&GYVTlH!!#fWD`RnrEvBj*!ByBW&2wZY+Zy~U%e z?3~V^tr}R zuGq&4+KjLskwI!E2m~5-1?O0EhY&Yj+!13B5gR^0udSY{+@upa9P0LvKa8tl75#_sKU7b9(S~&SCI66YV zORF=oQxu0Uv=r6~?b;oq*Oc2~RxaKhtdD}*7;Q5G1UoM^*c9O;HTL#N=Z(Dq*x|Ic z$3&g~Z|k2`?(5E^pg#bOF1OwF{Uw98xjGQ9bb6y|+$9KKuHeJ>ht!#c7wQTaf3^w{ zw?FykW9+LST*|@rOt3@?rw&jK{`hAUpS~pEq@`QWeOV`2p1FBrdlVP!%6_1(7*!iV zFQmU5#oo~1T?V{>kTu>&|5qap$KEY>D$d`--FCU_)aFbQWINbXJX>kb6&!K=&&@S@ zyseXboE@0aViOy>%8fFF680l$=5@NwVg99@)F~~gf}leMo6WS@XTzt5PcrQO=jsN+ zNCO~n;dT;IV(ZHBEk;s46W+7kjMBBf@+#${(+mw37eg;(S?f_Kxh8;6=Jd9aSFexO z%}bQ?*3B!5^rq71@k?dKsd#bS@kDZ%+skV_!S3 zY|Ds|a&zW%Fm^CpgVznQJBnqxe5OJ}dY=28arKQht?cMF%C{Z({iiS41!EREdox5H zH}}j9A6JdVN0o2A6R}UbsVa0%(i!Clzaq&RSXP=?Qi@MKbQRcli^tnGLPIxW)Z*U} zssR$@4`u@)4zvEhQ*paREgQ06IuEv+FIX4u$-F#VQVj664xF>%va>;pSR(RC1*w{mzc*QN`F& zp@)LGi_94ai*1b=2MS4Qxv>znV#x1C2^FOek3v z8OvFC0%FVgquYwP+z`tb62EQ6c(66)Qt$K8*xhX}VdWv{N7I59DQao7D+0lWFJ;bY z*F&|?@R$B;iDf$iT}ZJ<1I-nc+@#*eLH=s=isup5{!Q=Z5oC(#NJ1dkrsKmRnnp!T zc~HN4qyp2&lW&|eA|5;%YU-xXV;Gw_A-gywlZy7bh~gJP&-RXr_=jzS8;a^Rd%7`6 z{d_Dg*{cJL4A(%x&ha0-tY_GR0EN^LO;y=_hX64s`oNFxlLn-1wPct&lO7s@{Q6Up z$^Q6YYztSZSJxz~PnCIor=>vH2x~ov(4N@Tnx-#5XbCHJKEU`!t%A{AbxdOnWj;EP z;}6n@+6-S~iD||NL>EH12c)Q~MI?ChrLn*re~jO7PMEMD(PjXEi~{0%GA%(}4pl)% zx#D#HD8zP%-d|p(oHtlqw=nmvX9XJkhPP2DSJL=?xTK@iFLa+VGac9-vQ~u6?tg+Q zwq~6J)6xA3EX~CeERSV)?<7|Paqys)Hon$vlxrO zbf5+h({~(I!j9HaljwqkR;C9vFnNm4g)btFW-&l=iipDUhRgXH3UWHvp1Zv$dMJa{ zx;6iO6T$r#30iU5Oz$>T&Unlm!d14Bp#{S!CA~uS5H>y#r2H0PZL3rbfo1z6HH+pi zWrGgMDA*7;)I+(Et3N=|k^%*{Z97~|Wj}KDrc2hafqJ?&w6QbOAig^wly7QjrDb)$ zkq!OsUg(LR-U9e!9O+IlTUf_8cIZHJOXI|Pi99+_wl{{WiWkcPpmSIqsJftYbfX-2 zYTy_Ax@e;Ad-It#V)T}I_Cqtc^7a|RaE@O&GAYN<$NWp{@0tJVt zQ|z2|d<1PgKL1eVhSd57B>4i*OTCEXBU%i2W)uLHQa+&X&xdmbuY;m0aqvtX*xU@a z)xf-|AWfrM&&OF)|z5#q{Fg3o@Vjm9qw*CUTf|!qMPxdQvUa+%a&dvPp*J1r4b_8W%0H*)u7? zFpc~d!hK$<>f^~_dE1anWQ}eUSKCRyqXx}tEwP(ZrGs0JyazakT>yb()}sFF#TW%V zEI}N}cvd`ijpiz94pf7LMr8!qH@Q-!U(yrWz` zx=$yp>_}?ycK~i(7dLTu-U$mS=vt^Gk`I^T&sYNQlrd3!^6MKltdT!MJFEs;6_@VZ zmc%nPpkP4fm*%`ui>UQaJFGX!hT9Ywi$w3H9GgY%W04{S=hh#ManV!|X?zYZbcel# z1rHxJKrMxg92lM_liXmAaAb5lgJ$s0!pfpo+;Q8K38ySi@;SL~I9fCY6sT{1Liuw6 zBoAr3d_KHw&AN)_eUV~DkL5@4MUP};va1RG?~nqS3t>I$`*C-_XCLX1&xl#Is`&B) z^HPDMHvD@%oMuNULXEDSV%;NP&^Y~xy!d;|$SM1sRu8~6J4j?LB7QY263(I$Rn-`k zNBHPy-ap(IbdzoxxZakVXk5zI`cfTsPB(Jp5XK*OZn+{k$A;yA{@H?*ZZWoLf$k)@ zF{3&Z(RMbqQ2=g^#PCJwW6))<={7}I)0d%d8wIUBnFs0`!iq!$HK-wU!jfbY9woaJ z#T*o?iH>5M?@$^F`+<;aw_)OIHEfR`=5fqap0=?z(y6030ONdyPJ?W%?ry>mM`7HnuVKm zKXR;7lmZ>oz&Sot<^7C=1DtRPHoLHBx=)VyVPV$BMt7q{l`Pb-5dq8dx{O8ZFcdUr zA7S^w14utO0E7u8U>i+&zKX8}|r*!kw`#)6jxZE^zI zw&t3*C#V!ST2}&Mr(NqTba&%_5~T!&K5-GS@W1k^qyGn{!zr879?wFA`JRoc2zovx zOi0&-1chsW2(x^=2Vt=PslGD=YmU*MuaZq;7YZ0lBj7p__MOF`MtLxF`ZkxUAo4~0 z?@InmJLkWgTSsdt+zU#_i}t&`KmL-6)7L6vomzz7mN58QZopTy=%Q~b_u6*1g8$I% z-(1n6_cU6+mLvt270S6QlYQ75E#?*Z(!{3us(3%>Q2iC3d6jY-PS@8GvOk)*KAQ}E zosY=L$O-eaZZK!Dk8hlnVXD)R)=JJqR;4W$LWpAnKzABJ765(w3;yfA!bd$Y#pf^! z-B>VN$Zm(#-WIXUZWXe;+?$ZZ8@Q4I9IRG%97r$zH4Hd=v}{&8hhpD@Ioj!l2e*du z&BiskiPgrLH3ejkpaUL|$4n6k*NL((J_AJlb#T*&Gh>FLQ{#Dw`p3$L8%q-nyf4@3 zHeHH-eq01xgAV_*w5NABT7#H8*#sWe^<0zeU7KgwOoq4oxTax3Mi@M76O9HBXL|;| zkPJWcWS^6*|y@?Y({U7?RL$ccSpDX!MG=otRmgj3i}f zY->1|C;&Q52?RJj_eXk3u+TE&9{UC}|4TV7oaQ@(>o;oLu>9*rHyIGEW;)z6Q`TXI z0J-9$D>fxlzorRh@t9}t+A7k@TuG9-$1vNDl!UAhx*OXW^ z$8tFmq0vYl7JtcLkLK=Yt)$|FJvU(=@o*k3C;@IFP4+vxM5&Ny7EK<;rW{e5y1S6Q ziB-~BS?;yuBGSfCBvGLg-tPbht{1cL-9n^gcLVspI3)a-F8E(IOZct9)nQMM(@)%j z1ivk3Y1zS~f|8$C1z;tqh}ZDh&Y+|u8z$iy;LHGlVNrNk>k-s5UT*JIs+DGjoptOo z5eDv+h{V7!##GvcHUAI@?^rfqf24gcHDmYg%u`I}m0quPlo!U))hxn}~b z<-0f&-@w6GW3%XR*%wS%gvpaZXx}=8FBaEO5m93#e=l)xcQ{fEuDZ@^(LsD9dgY)* zD>rMg5IA=_&eN?0!ab@uV6E=m0KDvyAU7XO^>~Ax?%Fqh?I6KM^{v^F3SFQNZ)3e{ zO*rZ-6w%eXR@HR{S4-JXV0&TgHhs z(F_yr3k1xZ6k1j~yvM+64$ZLxSq9E_dT^^b_FZ&deJq~Dta4Gza-ha$i0%c7B%5Jg z_r1xWGre+}3A_j+8X#zpb$pU#lHrm?-Drk8F#c6A25stC6}AF}1|077gTmU1lQMut1~$$C z;Y2{gmSqcNITdXN+Y&@8y}-!Qxs7*aD}-B;mxGe--uzGp607+@L|YtI+HcPoC(wOu z1Zor654YrPfm7y&Hl3GoD>#+FD6bZjI#%))q}YksjP)W`R!GgvPL=SYO4X<|gAo!z znP@1(EUhe-4g?|u6Cy-2#4N9D4YSD3u? za{df>c`uv?V!m!;JYu6?nCzwdoWyS|Gx6uy)6p6wA##0f7z8yICp@nFp785X>MGvf zie$eg=1lyJ>7akvvyODO*uVuu_vwZFEBBJzv$@%Il3MSK=>znx1;Dh2OhUf{!1<6k z;4o`B7HQ!b#PPV>$xAP6!u02tu%lD}T|1R~=|20xR}4qnG8gR${|K|ieB*yiv%;X{ zaI^Pk*uSgq7_pto9vZbXuotSkx|N+x}(=Pf>o-)S2Uda==eVQ z+aZ&lkm^D&HWXgv?zFvUb1=xVzCUJ;kTZ0}_q+6&$|opwaD5)-g(|eLkM~4aa9ajC zs--I;#m90Feu731sE~diH!yx$ErOY$HXEt>rwc+0-kS5sNv@s3)#JuY7WkdfA2s~( zL5p&M8Fyg&ekpDEA|iB1GKN%!F(idcbYh=3lMlD;m;HAbW zt8xC|OTv)|x0IyLe{C(G$;Mffk_R}C$yx5oB9(MFK3slI4S1F%f72RL1c-eKiYT(H ziMIN7;=#x1);Nk75s$>Ky!3=)w$hD?2qE1OcOI5&n(?3IGIf6#B;8rNmNP+?o9=sQ zY#Djbpb>t|FnUWd5H$o&U7EI5z9xd?ny%p>6U21OA$L{ew;%npO` zlWpCu9~vkJ9JZW51NEUP(#aeOfj{Halg&`sQ@^&At#l8;k#J0{zD>QZV|ZG3G^xu zWK*zTdkd_&)}7fFzrHhVmb-4p1Bo@&F3<_QeqPFlF0P?`r-A)b;?*Gx8ewzSGY6-T zS`SG%DktD)2yr#3b<*{zz{#AN_olObNMNjBn`ySRk9>i07e#7psJFKWh5-DPIV`{A zaX@@ID~Cv^TR9G$!5dk?NhtfeSTusJ3e_0Z|6W7ntQ$Cb9`Q5&iH_ExYYoQNOj6YC zKXt0N3_?zopg^~OA!5occEUiYmCKD_doOVmsy|u(5m-AbB9stnkYOr-89n7Y5+ULs z^@ZI*yT-C1A8ra3OeL%2Y$`oz0;awLA?<#(H-{*)q&SWXnqC^l6@+AvsSAtj%4uR# zU76WkRfFT-CBv}nR;lQf_L6Ie($Vmpl@)VI_U3l5=O!RmlS_X_8Yt=-ag2BzGpvc4 zRlhLT9A9*fH}bj}2G`mp*65L>+UC@r>1SXwvryG^R~-g1dH|84O%oP%pDq!DU~Q>We)@5NXXEXr3jYNgz>L(hP ztwhXi)k{?tU#goPcE1k57HfVlvzhou#U?Z05t+ynO;~59C2Y<@O|$2A{GN`(tpPQk z)!p6`aDJ9i zH4a|~D-CPf)(MC20SX7t2HmY#>L!0&{-W^ zDtjWTY>1xEtR8?h{Y!0?shrE3(Y$Y}5&D1&mS^``4;{7PU^5CPSd(gt&5or*NkWbK zRqR^H*_b&wxs)C6^ko}cj+u#VLazJ9sz~mx5g5ZS=|tJ@yn~;4E=d& zHp@&TmyK<@WM5Rd3+p!LC*4sQj0FzOh_&Z7X7_o0%e!0~u^id-hhc3L?=ejd891oJ z$C}2U0ONcl*qV@%3}f_^#jp+~IwSHNI#AD(UhkJ|jJKCpx85A9DuHR@JxSo(EmUG~ z9Ss;9AkK_hfaR8c#ha+_ktxl-P&(+|IYnr+3{kLoe^?*M%bYLs03`g;4)5wc7RyjQ zYp%| zIt#~@aCVP@ZQOnKeJi^oF}0^d$Fc~olMIBPLO-$E5jX@RMaqq~SmhgjI$IgIecXg9 zno!~~c08tJKf|1ItvD}Co3O6vI{8P36rO$=gYZ(RN)bv=_T!cn$LXDFnV0zRHl#L< zCz*IWF8@3*(m?w+rHyGSfT$wx-~|G}69cQm-p~Dol92Tkw;S2ni8AS9=|y$~ zzc3Li#e-ZRP3u{T)6`TXm?lDmHWa_0RzLFh-VPMA43b()jeCmRl<^TbtpWekcCHJT zP@ijDv`ab=&r-(na7XjGrn(1(QKDZ?ey`1^^CCJ1nMt7!v1RcFm2a-~cGlg{9@&dQ zMRzH7c87WpRtFaR_SB@0j zknMmzo&6@vf1B{4v<_IDQJlwwBSS@{C*W}Q8l#(g52!>AkuBMUF7#?lmRTfdy?Iv6 zo6DNp|9lFpVnk5R*C9dk|a9?r?z%x?fxJ!`g)MgxW0Ji$9jrcry8RU-` z%z3?`UKdYoPl9urUvvf!!>`-EfSOyS7`qH1Xz})=+hMv^$rK&y5bg=ydb@UJj;&a`i;sY4Y#AljC3j85n8*)xt`Nzy$;12$%Gx@%DwJCgzI!kGO*XT)5 z(Npi)Um+%+Tu~DPWhcnZ){|4NobFOo^ATM@2zALMlR9%kzr3XtQ`ei#D#VK<4gkCX zvmU-)ssfz&*9D*pv02j|D(iP)b`D}E&=VT<0Rnt{3b)i8Xm1r0HeqBAbXJ8^ZfZ*a zc5h(=NxT#FRuqpubGhh&W$Spa`_4qRf%`JJgvc$ohm>`}JmxXpf-*8H!yQ^qnMGu@skn~Ak<@|<{z0Ss8|1)kU(VOYZ zbt)ri&c|Kj(K4~P-X5l^8KHU03Z_8I968$U>&T7crmW#qc5cHK<^?9818JFU%6!2~ zsQ2H3adO;hwQ7pwQY_83vSVmh><$&{b#OA&BG4uibIsGC$#72FRNf65677P<5s|fZ zmiGJ@kndsV$sF8+h1YNCZ{WHyZGMiw%H2aHoaC>4xqpdQ{-yQNQu2p;#HP?<&S4Q3 zawP=)l;Vav)ta(98Etd+- zsa}@QJ8KK+=IILXm4T?M@KytNLQeL}bc_8#F)z@)kJm{FP9|B#zd1raiL_p%G|Gt?SMW#VB{5oQ>pwE#c!Ois(Xx5BNAvXo4yvh1io#O^0RXW>KaVH!Q#NbIoSV+-Kh$1HA`?Knt2LJXg zP1vnB#9&9b%ss+62+(SBWyA=*-Wf`#9W-+zg^)`zm0o>ef1>hfl_+#eZ@}bb$_4tG zcz5i^1&*+1?zk2f(v~06!oXSJ%D-FWX#k&Viaw`?km{#{2fDCXby>Coj%w_KjD~Gx zES**Vv%Zvij|3aPx~{D{SIa(f78y$U zhZT~UE1EFra;Q$aUO%2^S+9aDMEE z0Pm4s(@Z>mv5L-Elf#K3Zvp~#-AvYx5|s(AH;fL5)Dbz(w=SpJXei_f)luIcPL|7` zwu_lD=f&Gf>7T&Bokw5Z2NTg==6bx4zZ|BcJbwkF#_L{d2Lq3iMtM>N_5>J!WNjIstmSYL1g29{Z~8^`?yR|_fnT> zbaG{P`F6uXkOffI^7r8p=69MRJ=L5XCZ`!<=x*#lmkmy_S&P=G?6!k@ISq@!hqber zn`Wz;!O%02=O>cwy@1ZGYGvPSt4$9I&(+#q7x}2@$>f$tJ`E~@Wun_VWD+?T$XKM$ z46YHO8*)^u+WNYZ*s&uR^?LIgvl3`LlgU<@-kVD!^;i)Ac=3w`mvdxO*#z$XfB6d#3q^q~!8M1qUwE7s2p*Ow z&L^j%3z6RVPvujzf|6H#wrUIV!4gd^pRTa~{?4BvYkb6>8-@Rd)?jhKV z-*K#FN&;Kw+eL&09e8VjsGx5g=@{ue+h9Avjd_za5@K12R>{@wo$vj$SZZ!A2l3gk z(E=P<)L0D%4uxav{0Kar{C@24D-A7k3)0F9?f{I;DTyAPJ-BHWq++vMG+i@>Z08|$ZDrvyY_fEISy(_K^VhoN9CU-f|~kI*~pCqE20zlU$n4>a4= zpOSXM>dSQx|7Cc3^&E+DtSmsi8ZgW(7Pj9w`i>bv;^5!Z61qi}zF6NYC+2c>X=SUs zvp6n=0DuXiJ;}z-sNN8)NY#hFf;tcVMdw~H$&gzI?DDoq8YL=DzkRad;rPlWS9)AU zKDCRcoj48~7d%hS2Vc+|%2ivd z2RXW06Ou3^!RRVVK2@O<{}gs9Sd$;X$1$gw%k1LmiwwDGvj}A9*Xv;{^k0+#DsH1f ziiKWxkCFF&zgi24(vL}hiC|<1Ku0Z1=j;niuj4iRkvWq|Gi&$nZ z?VIZlXTiu((dz7FTdS%B{(+fQ>U@jMm*q(_gh1%4Iu^5C<#Q8RDL{1L#rsG;#Q5rO z9~t)2QnlE5(ce*2+oBb2C8_DpW0Lcr0(z^)GXoy{?*^78C%j%+F75ydg$nl1>q?q9 z2%mRJ(-r36ck2X4ykjK%@zvc9FfHMsyh){B8xkefYm&D{(kf{+B$x*aw}6Bt<2Kmd3t%0+ zP$Rz8T6V#1D{#z(;FW86z>q@cuXoq?=Vwrvj^0D#H!;ol=u`jE)@(?dsn&O~imqCF z<({|`j^dBp!0nnTx1d8Fmkl;wP7@t_8ii{J?>9M3-T`yyE0_#b%RX!k$;H~3q{aOW z1nS6|6r)Ue&vVA(q=;M2hI~|5Zub-I$*o5;+^}7%oY_YaGXwjIV8G zZ+mO@ZIELm9*`{PH#6H9;%Jic#G#^m_ z-{{6l1|^|Zcpz!pYDoH1)-P+D#OL?%g4PB8Nc$$jajsIq4BCsScjfJ;*RZ2!O6!+th(ar?W6hRvPsjE~YETze@! zGq*tLFz}qOJSuc!#@y$0pD|7CE`9gUcDUrHH`t6A<^Csb4cyUF+-`5q0S6(;T6(-IA*9MhZto;U@@H^(o*{hPACf73L%mdzty)P3|g<5J#_5ap4S#uL;e* zkB)1WE|Z3wV4jf3?2Bzyw04e$_TIOzyhkW6ZYCM-J%;+)j?1FCG6mnDTP>$ZEM)zx zB%Yw|t;mr5h*B7pNTLmVWrp4mLt7D=brRSC64%THKzKZoxFs-(;yEw`uz>lIfC;} z^ixu}46)+UxL@yOdJ~Zq3_sLPdE&Z-L5-GoGvJZ7M6a>Se^~bKu zE-icVM_$Y>m48`H3={Lc%78@c9Jv~LRH$v`)xN-A`B5L68RFa_crYC^W&3TR8q7V2 zZslB<0W2bn)6ZN38Z+g@=48b+Tbhj5GSzdsa+I~e>DHsP;S9jnu1nf~Vsu|3E1ju5Ep%I=cB5)LP$?&u! zr_e;?*$-7?L!d+{8@dvDn?G$AMI3SZ#TvP z{$>N8%=Tsto7I(j?wbTgSixLys%HR*ph%Ryltd?7)W!XKsl79LYNHz9Vb`0=Un6JX z6zo_4`z2R@2}liWZorZs%4HN|GR9w85;wZenM2=0vSCfg(WFHjbxlvQTPOj4r-yI5 zccy!ZmnwUOlB9;V;VCNUw64E`_BnGMd(i2p-aq;tfqaH~>36ZlOal^&8~YvJG%uH2 zG;lKhr^nc=L;&d?Wzfkn(P_-diP6BoPFDp`1c>oSfjZG(^+na;6_iG(M4(v9OE?)( z(Gv8AG6@3b!@en3R&=Q*<*uSEw7<@ErcI$`_KEUyONwaEf(R^_(#cVVdX01A=6+-J zyp&`Y*Apk{L%N9R6sPo?+k7ClIMU$vkm56!rv;9|inTurz?t1sOKyKQc~;z{wi;O! z|Lvx>cv}yV#KCnK|JPB@x0(;1b697Vo8y8vt7o?*Tewl{s4?V5^(eVe8cKJDuN4Viu?u4QCwru>jfwv-|*-eEkeI(88nqr-StJ1FQlv527Xk_z`XH^cD~et zm7Tx z_hF1{Rg^%SxA^V;3#uL*{wDXgrGV?z5QshSLC&uM7AKtQdjolQW?rVD&Cap@3}DQB zBG!J|_cDY~DbGTu0X;0QwG1&{PsYC1m?*FU;C4ZPA-w3&*rOsQZqXj8dV-yga@<9F z%-8{AJ(S$iu*3wETBKyf5+BQh+bORcgb%}NWP}IVy9fso&3Zl->?KvhNSB^^F*RYr z^|N&TsM${ThL&d26VeE#C~a4tDg~znYVEMdOwTb58o?F>3~5G zUOw5U!3A3WdgXF#ozDht@&}<~7sAzX0ud8JT#*hzt~?AU3%KJD-gZgUUSAJ6#n77jaHSD>Pz zhmu=NClLJ~>gc?1BGK_!tqV{e?$o7Rv2;W?DNaK^1HD9RicS171#zKZ5hZu&}q)C-Ov zKVimK2dA2^yENc&;|P^86z`v1U3YW;F<1>WKSD)xNu2Z`DVX?f&v^!8Vaddz3mdT z*2Q+<>azoIx_e7nY^ZxY%c*_o&JYJryKud4w`t`rK%t+1KGj2S$o}_jVEwBslxbM5>wY`t2>1fzbaxO?BvaH;z(;@3S$Nt*J4>w{jOd(Zn4JyPF023N`wK_l?ADvPKTxpu= zS{t7WIu<e)6vJ3P$BeF zyg34`P25aAE@6GCW#O)Fm5#b_1oEQ!^|lGZ_P{SQjD*c7872JGPxZI)v-kggjSNOX zoEX{^Idzh70?Hd5W8iF2^23lc;ZDy_5;NxDw4zHSkX3*MMKI zpn%PGke(<|@7!y;PgBOrQ!xF0T&tocbIop9j}4zT?^ z#-%&br~VTuNBNJH?RSi&DmAeI$9Jd{`HQ~m`8K#5KN&1d^G^KR`QAXGu}V=~O-jsD zYOE!~DF{$HSCx&?zU?9SnZI%}U)sMA{PsH9n2OA!Nue8vm1zDE1u75Yl z#`N}aB)Mwa5x4Pv*`dQAx%VvwK;8c=!V92zTQmNR&{YSV2|fDllBh|C2Ov7GOwph^ z`ZvFXGw$`5jbI%W@%eUd`_>3cf)>KCmbOzwpiBs(pEeS&D^`O6_Wh6ZY3#rjIskC& zNS?%b5ubKDD6lt6)cY(1@d=%3wv-@|AfL`@GRJLBy#<|pjd>P`rrN`r2Wx-#zpc9V z%S|FYN)N1ih1XQuj2U=d)FdJ`@>PiO6t|{GS}8;Cg|dopxN8c%_`@&6KR?M-k}vWw zg7p&vKT#(U0!y2Xra@zt;Z%rU$QV+$nvV${CtNqbJO{&*o;6oKm)vXc>E;WB$-JIa zf2iaBtrh^1Zg9oYck(~f{gT&&^jA@@n7q9WYeP+VgeEd2cp!w)$CgvWyj4h01{Zr) zwG5290`$mbgc|cP>!L_$7_^YM-j1kFZqN=I70E_?`i8%xBr|X!n|66S8 z3~YWQ zf2HXgQLB-PV`Cn)98Ho|Vl;xngofq7Ib+xZz|ZOtNi>>l7{)Mq@4$OC-?r^HrXWxS zP)`kOPgcF~GC0vtb+*3CJQHO6Zav{Mb5!e?AIB(msba?yZD~I;w9LA@iVA*k09${# z=}*Zy4g*IBKT;RM3we`QL$09T4NRuI02*aFm-1?iT5tnb9(+={)F{x@_Qm7RDq?vb zx@&_C(`?oFjVc;d>s%6)7$VCzF8zmZ$;slRbTn&<%Za)Q2^TfMnPL6Tv-&jv1Dv9?s2YZr*BG9 z7=HbpP(t5+`-fF?Z*Q!^VvuWtJLmhdkOt$95@{~i*w^(f!6S<_tbk$yi+wax9fk9+ z7h%u(10o$awHH>97Iy3E-?Hp*ARrP-%rx$+G>pc_mnNAZpm|IxXwR71We_gBosTGD zsKnhS&uE2RSzYVLi9bxf(&TAJs$SmiIO+VL5g5bfeL=|lyx z&C1*BD_u?ZH}$9>HPaN)hyW8tcdX^=fFo9%+_Q!c-h9vLFZb>?g~=#Y z!Ln*n@eGlUfLO-pxzy2OZwQ4^>eaygkMWa+YvQtE7ss5gGL)PJfvk= zE@H$VsI0qfG)M{a_W_YZR;Wh0N+80AFTH}v3C#ajJNj<~{oz1Vc?oeu)Zrf4xmP5u zzgdklj$>wc5{Rh)%pboukvH>Cud$M`JNwk&Do%1&+BKNCLn=TJ^ z?KBd0t;&H|zN!efx35xg1hk3K+p5es%3+?ey@8Z;j53%P?0QahgLuq)Q=QJ>bol@c ziQGiYrTT;7h!q5-CR2@yibtc)Ak%^Z)CrJHPx2*sl4^CXgyn|VVfcXVosOkAM%_X= z&}*@EA5@fg!fkfGbqiQic7#&K>W}KnOBpi}p|EQ+z`!sHdBweMnw71#*m${j0X$gU zllwQwun2$Y^;|HA7sGdr>i~95zI?hlk2^jRPFMe(gRVC(t>eK2J4Ha%{W?2o6(u!{+(wm-p6`JmPbjkv^0r6C9CSN)%?;0LlPUIBi!$ zD?sC26!+ySwjF@by<_VFHX1Qs)a7G~&ddQ_h9sGWxA~E-`Qucfy?OX@D`%XMPP7m{orJyizKvZI*K8JbEQzk^lh0lSQH))8`Ep}Ffe`ZUP%Kp3Gdz2J8=m~T?y&lBE8L)sp zB%^`pJ^M+;yTVnAGdDGVRCL zl<~WqPQz91Vue_;uPC0RIZYlfW zoI}J!!4>&ZGP)o%LXCSsD&JxA^RZAdUzYSC_+pEK8{x_T&nM29yrV)jtbg4?Yd z!mtfSo?*M;FV8KRf6s;`KY#8zB>bk!QC?-l-)X9DPd!oJ6nDIrldgkRK)v&>>!wby>z>>mX)4{0$R zsrVF)4cfGa;GSV*9^ufFNvwW-qSE5jaaQdXY3JbV`8uh2A3Ztxf=7F{dYYR6iWy{3 z%m=cHu(7`KR$G;a@l&C(Ks?kQXcF`AESS5p!C7BKoyMBtGklk#4+JDCG+wn=u|@}# zZWX&TAA^Ix;8I%U{a@uektR>_Lrap0dp@D#z(4N{x7}~ygRFf3-q;9RL%RXjx^Wq- zMy@6O@#=+u@ZLWQszCV#ab*S_m3#{nq9-#R!lS) zTM&GLwc;g__*{_$-71qCCz3}fnQlRsf5>h{HbN!@JHEeU{X;Yt%PvghD_JBZ{!R8u z{H(_zqc(?^!{X+MvrOIAP|12UP zNvVzkBBmz?+K(1jB8nT?dd1FOBy~}cUrB0RY+>=>&m0kAAGfTXXc(9c4*OW&P756) zU2z+<(*|3}&uUbE{y;4l6e}>STc}~?qYgmaf+@%RSRpBFT8waQ6q7y%UVM3ok9RLZ z8FFyCVnGneC`;8uc>i0&doE@kyuC=IygGp4(8I7@kKC+J@kRE9+8d|f3qqo1-2AW3 zX_`2z2{mZmzkds_69PgS%ZnJiq<~k^0*l}OKje%b#uVC4#4@R=;XvtfNMA_1{NTMz zH2Rtdt@^W0i&s`u)qB80jJZ&j2`B;{BxLN@D$+At>Y^L^e*3 zCmQNEwWtEMF3_^32il4SRKD2$e_C2pEfD9$PQWy9WlmpnUQLNdERm<2z2xXT z|Dk`!nhjoblhBLgoE>qea&@M2$F1!vuVZ!wGbi70vZD+Ck$uj3>%HbtABbx#DwU0s z2b&LK1a_5MORmOV$Gof-5M#UiE7y^tdxlvziV8%!tVZPC>Xm>#Nl1FRcR3JTd{_3{ z2Ea#Tlk}!oYbmZw*_GDRG=MOYG5_qj?h2%Cavss_yGv9&u2fozZjUWW@eM3IWJHBSh<&9M1Dn#TNt6ntern^3;fbFViO z2moLJEcFBM{XuR3?jsL60YXpig&idB|kT(tjRb&;l4P4q#WzIwb)wIVn2**S()0`GZ!T3f6&eYl`MHhZs&- zdVe#W56QH|lDe8duuC(0zr07y?x1f~PU2Sy2<#av%17-|$nt#oG!l?{-+x3?$p)Xc z!!e@OoRjC_yhW)z=Xc@f`NgX{(h6o=P?9%HN5`6IZN?-JwA4R3#2c$3ub!sOzL>xP7|h+)@X?=R z!a{VMDU)0g>jU ztt~X}#-BbgJzqpLCjwlZ8L!c2EXFyi=>LlD`Nq}?+JLv3)swk#y{5jrAL;;_T#gU+ z!N0M?v_D?V5BtK+N(iDf=z6po?{XvCCL}BAp2$pHXI{4h0tAiCLk@sl8f(24diR;S z0Xf%l_MMJZA~`Y$pq)AP%0%@FUUV)Iwld|G$DGB&MHhC8IoYN7cC5)kM7`*{A`9&( z76x?Ih^ZU7$s`qSacqx$6?tEy2u!v;VomrmMS~L129mIK|BCRXl58ST?^-buV-%AJ z9WDZ^z}s77d$D%1*iw4}eBpY49s9+f3#sy*6KxVQKFRAAzA^DHD?_KP)!Rz`V54!! zryP4NXJk$w;;GsRGLt=kYlVn}8W(2znJUmu@}rr6lTiFTxgGdHy_v}ZYo2T1S91$u zpX*_sF|dGtM{A0Xps%89ZgHnQdu{^y7&7o#H5ifs4s6e+j$RWxz~h;*=v^Hej#=*Y zjzwxJU`=uT+J*)6^}&$JB#}ZVNenLEj6BJb?y57*!w?K z8PXI9FmBAr*NbgXW6UXP7yB1+@_*vsX@~aR)&#xzFr5!%9A`S@HWn+LlM21H%iV=o zW|i4~4&^UeGnP887eEK#vw-t*C;qtcvWH7~Bf zNwfV>Bb0=`-?G+XPPm)Jd8a? zB-S3ksQ5rMg3YPAp|4Ha;}lrnbBOFUvhkWmtKLvweIJ8CC&r&UKXNT}nYjfG#OJXs z{eoFNs}#lWadY8`?#jOM3)5(nkpfnNos1i$b(0(N?Y#x<*T53`y7&;HgJerfJD7}% zm^+(bT;>?c1fh-B{16|oB%V}Zhepiu-sZzY3#=u@g^C*~rtc;8`1$W!CZ$^2kRQ{3 zf+a@`9r-cd<#G}nK5= zOZTx^OeDK+p>9&ng4utlTlt0USng_sUH%C+NWFK z*fC?C!6Vr?!to>JlvIzJ2u@YtZ3;c56bS*O+9^rer(2dgQEgNl4-_VSKfRRuO$a_1 zoySHJ9>Tq>X%i%05xuGR?8Drj_6E0xYd?hEvc-*T4g~Gxd>~-Pz!DnNMMZ+oPX~Sz zOZ^$%;z336ypB`e6&Vh&7=!$WzRt6tiJ=G@D$ge5=AbwT#bXEkl0iXDQ(=)9Tltgr zp7%elT9bxt-QJSGV01cFDuOP9p)wk@^euGFYN+Xd6qWu%DT`lZ4|_&n=udm0CS=8D z*71#{Wib!o{P0YEMQq~^()g&*Gt2%21XC#-CIi_G&@Okg z2usnDMSgts^jv#DtR|Yr(gbFQYu##~ww!NzFe5>`1W|(mogam7=x8@g$t2#OxOfS4 zos#}Jw~L(|{U&fi&fWL4kHpfnjL60fkMF2Sn+qvda|Vw<36>fw87A6d_8P?R9NQcV z)FePqk0o{uO{;DOy9sn-5C1f@H#cR7y*d7cMeT`b)s()6~^$!p^0>2%K+%J` zj|a}?*!;5<6Pd1R_r%bXK6ZkivA9`yz$_9G`8&2DnGtTCD#Izq)_0!PY%73^Jz2%o z&=*cHs1rA}Xt=rCl67BU22tGx6B8Ch$MORl#nnQ?qkkqW7%S3*C4lQnUo;_(ox`Ce zl$CqKB**R-rUB^v%=-!A(^>z7e^?37Lk%vctm38Wwy%GA-$SeFe&mR+YNQ+9+I1mO ze`R?~`}=(cY$ud-AV*?zj35`6I(Lp_IHh=B?t{^di<+D*4Fa^#7U2nI&WvoL)Nw=` z%FpUs#<5i5pMUM+A4Uu?2ck}s&DI6LNI>t?IkEQhRk(E-<97EkL1N?RRP8A-9Oy#* z%+On01sIMDPRi682}{R!o`qn)+wmaAp6r#fz`5ms{(Z;=h0hc>vb6ifRL@I^g5Q~+ zF?m*Pn=?WkS)zJaFQN7wJOGtmW*0!xSK5qK<(7mN!Pu>=Kq_)}i>*401Bwu4(dCMk zr`mKKhklvVjE~e0bH_S;3r|U7hn2qkQ`NLbND?JK=yPPkDZR;!vG?IIWlusl4hD9@ zVGZ^}&VL)F2d?XtdS84oQ?G$dzzpT554elQ)_pN8CDflpEb0CU1vV{xOR768f%_FX z9?K>pO#OXsf7ZyF)V{#EXxZZbC=$NP75!nI6>RYQMi&Q=A(uO`R?Q%g3~X>Iy?bOv3|*licK%04cULDM}x0Y9?DaiMyEnZrfaq$;H zdnwE7Uj1dxUISnY3!8p2Y&h^GPa*!=0A2Zvzc=xA)_qb4T39g{inkwXCZ|*MRA~%| zO`C)4x&AS_*$sObw0>*|Vkkc~D9X*+483UNspe&W^p$G4=09AtIbuNz{oYlU##W6( zHoZrkfH6l7*hTy}K-qF(>8IsmfV6-n^d>g}&9vM{8z70?TTH3?ov^4su(h8Rfc^s7HWI^Hl2@HXmAIZwG}4SD_qWC zI_ID^s`j)!Q(4DUbsds33hg<$y4S}^V=_rDcnMb3&VWWsJw#+S(#rg` zA^6TR`}e zDexadeN?u<=>P_Jd>rxRO}+9hNol&I4UO6pLKsvR94{EHc45cM@$}gl)cvkE2g8cu zYB;WWsSf?Gl;3g z9VpHt#!V1a-jN=Kb}wAo(CWDV5cCsT$brIy6`elxU1V9#$1ZoyNm9cijWo4xH~pIF z`uDskFgL#A18Vx9Wp_n$`L$+pLG5d%$<4aJe;A*+?jAq@oWG3cn*NgnvYFuG6kY9o zGPVMh$15yH`*9VL7x#aqJuNmcbmS*;#{HcUJ8uC*Bc)C-(lrz=pF=NI$P&Si*jpOP zN`gzXA-|=k#8zEA=s5-)oto7DNdt@ggB^SUmXl1kV>{l!xz${7)(D-WLn=%Oe3R4r zF~9@?_pb>0L}C>BI}(>rw3Cm7)uz=Oxp#e*v=papC^=fP*`B9cGGg3FQBzSld$~gz zxLYb#jle=mILz4c)g_)VO+2DI)5}W6?a8}WXgszI6p@HVIi9&8*dt&T0h@j$ohFF3 z1R?C55W-3=@f40+=Nx`z=Ce*$inTvDa@Fnfw1Ym&+H-39TbOHM>&T3P%1|GN$jIh6 zZYH5iU2ixBFs!!+Y%)+-HwSjdm1I$SlB-!$D(obhSenR)O21M$mm{*m2=pVTaK~N> zVJh+0i3Zlv6&~RNk4a0NKHq-r~m;*k;YdRwkp%ZbH&{r2Ce%VMlu0pAj#u6fwVa4_u{j$OJmqb36Mp@m| z^Z$;?(#m>xy4(fMZNct@U>k3he0rTR3JcOkv9*Jeao%x7Wv5KFZe0rm8T(dMsX~rI zN9gxDI~0S4@Mb~E*t>c~IVG)Jky}>eWtdQqa%Wz(Z8xIn~Y6 zjU@A7EmYtcB9%sXZS}FzboRu2nqVG$kwG4jCIqev14!`P8)<7f zIPUA z91!8!NTooHE6ek|?tk4W@=%A>$RbKSeBaoNRU5E2)#5%gj6pi3cwm{RXmErh zDhr9>&gz1o>_R2Q^NGfeKjA>6)s8KH^aJL6?mk-~w`NiaPb&_=S%E#?w`(Qz!+DIJ zph#yN8)3c`0yB||K*E|k`4&VN1)UKE&>*}hk2kXUgzMdyL9f_!@jOaS(^{*APoXEL zM`iG*F%8trRvJ7xJKO94zPp_VcjUnI6G?8Dn3&tsw5NZ<=!Qtu%9Dp=NmJkD=5q17 zm9C^oqJr7?O>etV!n{ zri<)@k|mE-$WRH!tYU$Yaq5yWRV`_KoxtdEkDK@ph(jNoKs%s8n%plNhQ-1=Lih|} zdal@|k)P!G-k?&ceZservI%`x%4(R~?GAjWja5uF_^-SfeYU>*+KxWUKlFa#_^ zNVz}}v_1;e`$Jplx-bZt5}S|^Wbgg1G~Y&;FYtbnUtDs>4~XLo!wM_G*jA6i)n6yj zR}lL`OLuS;9V6nl*X%Gp?%!-_l(RU!DY^hjXRSE?qwv5;m1DPq zVAG|{t1Ea)2CrJnC<0_E!33kS(NCB$eNDg^g8i$Y1!&8`m18#ce(|?T=ejtWEr`cIFJp+IUX$t3%q*WM1`@8zMci6AZ1Bbd%HYBXg;4si zhkzCNkq-2|Gamo0LM~6{+7~+tCcS@x=oWF^TAp^Vad2;P44lO-ZxL6O{@h5MI`eRG;^dHi~3TcL}iHx)bn{Onzs;L3J8S1 z%TllW1Emcs7eR?#dCwhx3j@uXvlh<*xxt}s1U^bbJ;JjsA&{AL(V>7Ia!1g=`S(>~ zj$-CyL<}$J8tk{E%G9@zh)Aq<*-azFH6LH|AFLVJ<;amg^t(vOktQP3^qMaSs4e9l z)p=rJrZ=74d(^~04ZoWegp;MgDkmwIrg>u7WzKa7#;v4PT$Qtru&?yW7i*y?C?(IQ zFMlHyt5z_;cnLTpq^>p-4vMdymOm%hE;QxJd`H+)QF9?M)ig;X3qm^OC!k-lgR~n~ z0#ms)07>g8ekegIyyLM*vY@yJg9|ThBc(S^@tMGw@ZR0;Am^;Ws3Bk#IR|g^(FS+N z4>sE=2E_trxvzyb(u_gcgo4tt5)W8%i03<7vx9yeiEgo*Zty&D=uv}8mPe|;Qudbm zu6W2L&!AWR^XA{lTe{dOo6+Ciqhdv{6S%z*$50?N9sdXZIWr8QQ9Amu!GvDWEiK#s zS55oMt%fw=Ku2wZymx$M+PWnR(FN+zpQ2Hr_m@W(U!Ru}LpAEwgBg8^on=Fd&9dZf z6QcdNkT4Q9(h%=04i+#oI3~g8C5U$)cCi%rk%m`d744P1y4Va=NlQ8c zT#Se`HUql&;iT`{QbSa?Tx(zEn@|ldR6T$+KiP(}`?)+$WPG1X!dLpz@=NFG!mt{B z5MKpl>gHTBef$$Vud?uep*YKok>Kg_ozBK4y%)foSq!IH}I*e@$40diu5VB7QASvL>X;EG6FJ)*}GCqemhg_G)m`= z%OwmbCy)(U=$<|;aZIA$LGpmkfw^i#&#sXdt9%7jj_T3z4bDi)a`4KC@zDqa@e)6nm_k(hmkkePlD8?I+06>Kiv z`Z4pLe^KNJ06=s(DT&DS@pODt=ts&JlQ5izTfn5BWLd{ULyOR?m48r%gD`tG!Q`e* zD*nK4Jw{>GW$<6T#@iF+Kct--E%PBHvgs>mM%UG5^~`0~#_oqPP~nMiDT)BcEGtk8 z7y|5$qXaaY(cj4;xt(XbZM$&I)DChF;)kULSF**_G{*D>;y4LxOB5EVHLCxc<1rTA z3YlSj7s@b+M6NH&`dj?8cR+@|aU&T7$QtdILMc@ZC*SwMe795q{D<&35iIo-NoLXM zCzhue!!u`Sr6}-MYO-OPQ7OL&rt;1ePDR;daxb|PJCf%LLpV|S-8p4*J=dsfzoW#j z`~b=r&u}AMR{-0R6@G$7z*D_Zq(oJ{x{Xl-pA3W7mum^sZyu=macpyEn)tcK`sY}5 z9hTxpc%zTbcHyY0)&}J%zCZsCm1-No(|4Ozr%+uuySD`C3!q-z5$=g}ZcI>L)GHcO z<6*4ybXw8r+fPJRj5EgfTZGFgUsMrCXG?zi24GHkO*t2Y~!NIWc>xII3+VCpUlN zbF~WqAa;)NRyMEW#=@ICV--545pbj3BwtQ?AiggtB{jLt(sUA77Vy6h3y2v5lw%QG z^-2uWHcQ4h%4j|9K*hrEhg-8pMt~lqmEJA!{KQ^g&=L3+RqaT2Lz;mIz5s?4tfH-1lPQKi!-Jj@@&b$P9d?N*1b$+}35%}GlnI^reKm#7nC~*hVh#vO zY8zo`M8;Rt8WRS|0=z9WuX{e6 zZZjYYoyJm2lt8RAhu2N!uNj~hAQ5B^J`Yz>sIg9Zkeq8U_>TF9cKiXwcDo4ywRPYb z4K;8>Cte_Z<7TDbR}Xf&8Er_R)wo>Ao@?Fzc{ zMQCf03=C#do#_1Miw>7Y6?zm;yz^`xoI1F6fUgo%1K`V0dki3<`GWIV`N<{kh*|u$ z_T4Gg%6F2rR=6Vx3$QoOB zmOSRFVO9vtdH}qeT=?7S`v%K3`oad9_6F#0=6f(D3d_N^hD? zN1-p>KVT@>1-wh++TgMo`xl4V^1tA-*a761DV)ol4QkbDlTa7=;v(5(#PqW#;TtZh z^O7p#JvnO9fJLi=J1|;BOGSav-Ob1F1dt$B+$(nkS1jp#Sex8TRLT?%B}IJrTD(t4 z%@MkCWIe{6in{X7EfkrY)Sm_MNpdGqc${WT&+HkS3yn$1iP=NHDkCAcXF&SXhtA26 zlL~2N9oPk{@)m|%=0I?FO}vrN->FyFK1B-8SAbJ9bI!zKpEQeqGxAD+)R0x8q=`xTU*3#3OpU zW<~Pcm*TU!2_^jKrKhdkLBODWz(2ug>J1^n#XrQ0&B;e7HFWuUW&dQT-=O>w;Qp4R z{f1!v#zx76zQFfIefoa3&hIlsZlSVrO6cAO?|PyIM*VOmC(FBmD(DIBqc%)e zvm;l!Xf(A^cM=Qckv3Hwi6VW-&eGim{XpPyt+JGFk0@vTyD0kyFnw+{?QD+oiW+lq zu`s|BPI0WOY$q@czmh_NbEbb*3wQuN;7a67`nR6Fj`rweDz`+Y_M=Cv3qCRMSSBr&j~t4+R$n$O&S zN>OUa{enX1FKOZJEH#6PfBuH-D6Ni{y7<9x5x;1fu424i!mC;Q!NN_U8dEWY-tG4K zU-KIs#)UIgKE9h0h<)?KZ()E|^>H)cZVMr0)m2XjXH(u=W>3pjZBu{QHY@J@3mlfb zQA^|kG(TKCitpF9?{mfv{CKIt_Xhl;w+)CZsKaSk_eAYFSiS#-j$=~ZBk5|Aq7P>i zi|OJj5Tm;=1z6NTdr}q@-~AeNZAmbM?7nI`h~yOnu$eIQ+6p0en_jqn~`kJ z(ngNaJ|gGqRvG9&ZdLG~Gy-Vu`AWRYDYUx-;8cQEd%jA^+Gi*aGbzDqRvnZ-MdfGE zhj(MgW_CFZ8c4GH6tJXbVaxOJp{6F{Dps`;bRo*F#M&X@VbSnNt=2HJPX`IzgG+76 zrlbivKV;JiOCVHG2Sdc#gX-VGv=$CPLGX6E0K|j3fEL~;@kaxu2-E1;*&4Fp1@y3E zpS?c*ks#J-4sHi8K~CpMu96*4e3zz;w^5>gZM$&7kkqmqVrB6HQSg%v2-VL5{)7nQ zU`_^IQ5WimH#1Sv8yedXG21EIO+M7fkZFI&#%)xck)bq2=R@5S5VQ1mLtd!b>$8t$ zVw{1weaSMWBfv>K&?*2JqTb+szlipwmZ#eE+xi%A{XEp2=EMN^b-;fsXUBs!W!T~z zZ#`y2+nSVoO>aKcrLFA@=?f=!eX*e%M~Cal6Nv*a>*4*!KL|Biq=IN$eFsJODJh$> zd%U8@O-SE@zg3~20)2~Cx7;B5rj}a(Um&1d>{52y!{_Ax`4d%o2Tb#So|%~$(F_Z{ zHfjKPU7=>-hI$hla&oh=5mt*kf#IDEDxNe{^f00lhy)&XRPJ|V(6uvP*8M&Tebf4` zipX6V_>K_&P*e0d@4`KjDY#-jaZPl|`5T_ke()JDG7Uar?BqwL@y?U##eVG6dWQSf zS3z1^xam5Iv7$NGTw}FR9-#%nPcWHi`xt)WM?UFKN$$T=u4Z5&H`p-AYAkY}2_684 zJ^x4pc57|*Y@h4t0*cLwpis7B9kpx4AFcJ_G;wQrCd-5N0@x3LE>3^fd&$w~w|nrw zNDg^HeJwx+y3I$hY}S*}$9~Z0k}%<(5Vj-kxxK-~nd@e}fZ>?j83(e^g|b?(3{kbUt;fzCoE;OxW8>7B>&;isZ@Z zk&MvQMyFD0L{DNOg<{ndF_*T1F5pTeinT7SkzfUdI;`_Mf2UKVsnfj_)2U>+3IE$LKZLGLQ+;q@maoYOj zf{}TB>nYbPv!b&ZVJ9W6?K)ph`>ZKXha4i*0M+fKQW>g|4HEc|aa8=Uftdf8MqpyQ zb=rHHSZF3M!I#8jcZ!c(mCGVv+g1B5hT(D~5P-l+_tNmP0QVa_nN>&;&b!oNvjG#0 z&x8GvRqjM+gc~}=QiEBi`9|~OAn!aJxq*2N8rmg4oJTz)H0hJ}bG^;b@;p`&v|&J| zI{x~6y3Ch3t0W1frM8$8)~kIl6LwIjNCWx#00Q>GlEU9?f7JSmGPOtynR{ywX^xnp z3G?Rnv>_dnjnhkxD0e0XB~>(yPYhjoP2@9J{yUbX$^`HFFmy#3u;-qU;3_cndN1rT zo~)TysmSlQW6amuPS`#TR)Fs2Vi98F7dg4ujIWabi#sAcVU=K8BJg{Cq&q!1nkZ?h zMZq2kn5}|%Spd9zb=ylgO-G1z6A6j_`j*d6h7WcqtDhRSLG15Ww^{4S}~xL6#2MthTq#(H|wLj~dWXs_j1N7luaLVmmAMdL$Vl^sFSifq`+r z%3Wxlayc^-48GjnYo>Rd>@Z0~eetL1d%#+IEqxHMStNRiwi)8b*jsT5Y5OX5SUywx zpI&|X;q)I`E}G?z2)nBv(n{2?D8`!e1KDrAqWR{{+Xp^*8x_ozF#~VVuOk^WK>^;F zrb03KBhAeFnPFn3rqZkXxHFJ3wco+3@j>wcJ#Z1uM~%#GqyX}(Wz$pb`N>{->RZ1S z_o48qMy4mhtDJ~lgo>7~ei8b;obcxQgf0@rdD~O_(}4y1x3ILF4B;bYLqOVaOi)`J z`u+!>1H&?Nx7VU5dc|*<34)gp>~rRaTg+(A;)w)MM2YpsdXPCM&wN?f&5?~=jQe2* ze^QF`1wF2I>#>RZlwKneG!pWFOF0Z$|JrX?- zsZU#kG*nrh%swv#gpi0>NNI-aL(9h@4iDig?a<# zaJQ@c;aohvfU9Ei{~SD7xtf$s|H>s(@oAU}9Ub~uJ?s@}M5xMT{LA_zuLuhwCl1mq zbfC|UELwpRsc9brKa=2!GY(9t>CwgNhaKZx`K7HC>_yOkHTD~~#m^4t z;MZ+J;T&>3NV#uF1@SeVocyGX%2t-8|5HjHT&%)w@jB56vxJc=3^AcF2k`ycH9`|d zo;iVt1k4QnHgpmFoDkT15oyny0iE?AHl5)g=1&`?f2xRpj(H^`*t{xKGcf32f*a0Q zPkE!?On|L*O{Oj;TSS2c5p=%uT_XymPkcKK!#5TgN)$r1T%Fk?{)>yLGj@o?MHs2_ zLIh10N){i?2(o2vIq9qo6QfBe`R~tRJrr`aJ7}M^qRT>^1R!?#Vi#mEZj01K(9Spb zr#)9XuqB$=GpC)9(mzT`Fu~*D`2!O zyflY^_0r59^%fzq4?=2yPZ)@t6^T0~0ez74wbFA)9^p-|2agFYOxR)6uS#cY*{kW{kcdR6 zx$EHIV{mCldQ|8|dNz&&W~0e4at}M%E@38bIUCi6j1>fOk_aFObqzGLMVa1Et|tiU zybpAIV%{!oN)K$`!xi}*KfaXlFx4uk1u~(TX0C`TZ!{wWA5tP3c7728I(rX6(a(X< z+%52DXEue=T6g^}x?*f}?rR7G8Ztxo;GFWUS)X(?T*e2_Psg4ALcigky@ZU|rw)>K zC?yGKb;3u|XF8e);rBinHkBSSAmdHHCSeL zB)w%dO~_21rkG!(se&t*GNmhTRmeSRuco8Ix$L4IQkVQ6@tJE=PI9WRM2yfWc0aLx z!M8r**3RqM6g+*pnUL;cApiC|AXd@m|74HmF{t{~j<~AXo<{igaNl0)u1dyI7*gy+ z`cvm>?WARUix?NsSTkyvfU&p$?ys~_bx-m@iDAbxkQd`Awc6>3YYmG4K!UT$(TmLA zVZHx+ZlK9*?HSVZAENH;yMr~y2h`wAQMQrV)iq4>fP#u(qlmcbUI@&*+(8M`6?ZN_kt+CGoGpVYB(Vm$cD3lt(3tkbbkkwqBSVFGQM|iP^BSpx z42sQohkMiHoMnpQZ)mxV#k7;4P1K*V6N1dVTXTWBx#gsr39@4$L{pPg$LgM0?y)Um zu}*fqfJ!)=|KyaMBRXAj@@oY;_=mU8u1yDDl7f!#7C06{$UMVyTW}K+vQJ5@#*(=> z0a~-QY&`)l072r@P%fRwfQURI8^55Trr^=5Vy8K#O}UON0J+RxDo)}(1Cz;{-Bp;NS^ylD zpthEi03KowhExv{W-`o!uv0vr`~^VTYoMpWc_1N*7FZyA3KstaRWC5!xT6D#PFMx3 z1XB7xXmJQ9$);vHR{_qQndHwc%33v(>J033BvY36gI1!A(4yaMJq|ePytwde7RE3a z&cc=E6QyTndGh7fzOVxufXhfV3r5l>E_P)c?|6lp$}bt~BX0uW`TL2i%G%=325C;@ zH4=RX(~N3k(;EYwDaw(Ar~V(N#dH2lBIHZ1lvSWq*drg~u%ab@nk|p+t%kT$j!w7J z9$TBm6wnIkeKzvjDNi3#d~#HxmRuI8F;eHOu8rNEmJL4OC~} z2T$0hq+q6Duf!n~r{BOw;$DN2+ANtC(^y)zgTWx{5<$4M& zfK8X76`SnCPH7$pC7le|ri-eEbBhT5Bm{8nj7&TwRLPA$8Oz9kaNN?7D23A#Q1??! zTs*OA45ULgx)tr)OAjX89L?T}=@fJ743%RYi-NS`AA>ij?>Z}|`>Y5Aa2yrqfo|~t z^D?);x5g%*?Km|(!upBBR$)739MfEQ#*qmYfXC9es{dHiRb(E52q1h+6w~yPadS9s zzr*URdt1=O;_x&^SsJ2(h>JxsBM$kO)y>wOo&~VpR9{CgRvjvk9?)Ans zIUvA;XNgE7hI-G(;rf9usW-A$6o*6jC7Z%I9L_0tK_eqbu#*;NoBD`vi3ClVJ#%3Z zXmtFX;0Oz6X9Aw!!IlIQ5=&R&0{&u}Zy3Gxf_pmy=}3#A1QY$jz?Kz71j^m-#Pk(- zKbJPG)Ja|&e7{Dk-UUFrSV<$oDE;qLM5TPWvhp{l&6eRk&+LV}XwC7yoBac-tL_S> z^kXnPXIdv`*r%?|Qj7Nc6;&En1-)_0*ay~>H+25La#y%y_dB~35-k{|H=N9&q8;Ef zF1mD1Ic99n6oU-2zZO!xAUXf|C21QxO%*w|WSg3$(6iuyn(^ zT1KWi?L?%YKL*IQ6jci@m%a(xOqX~e8gc6$+#u}U1#Q-jfp%D81F%#7?+$ zn&h@wtwq6~8P=lcWWA51N2Fk(?H-a3hnft$m~gzw7>MhGy5bIHQ?aYXPO3enz`0tW zlew#zJ71AO@~h0Ltyo955O-A5n=M>9SA+Yz2|st)R?!z9QwPHNh+*HX1NmGjo4}xM zH}CiOJoOCYKMlarF18N$IK&aV_TwX@@yncLGo$UNaojDAqZy>%&Hh4_lK_4=mp*|s z6Rgwo4lrGP#wF$DeZBjc{}Q=Byszxu1xdF9bS;xk%~gFEi`5rBHx2`15W`iu!Equ2 z{0@&jkK~CPba`)CQ6`0K+gVJTmww68xBoaZZDV&(R;rCKLL9t162g?*=$%(gBxE?Yk+6Nz)mil$Gl-lCwP}Z2 zLXu+n_&e|a-Zd5LXdjeROK#rdK}Dw7vo6iVJi$F`mLiNFd>JKOZ0E=D*qi8^hitDy z8Kw}O@j?L!ACJ5@TFGLJ`rQ!mjZ^t_UclV^ZfIE!Rd!@#&39ps(NNp$-wNb~@k6B< z$66hAyUO7E!6I#PpZ@EvW;pzi83K8$e|c!hi+ThvuMJ-r9aOFu3)QKXNC)N!UH|ko zOf`_fDe|p>t~ZR5Y&>>X#6ZF(g`EMgBPy++ zS+-<08YyYR+6DY0O>@$C3mIZkkBmsJofBBVPx8YJ-ga0ZDGPifY9;D`Ft(Yjl2l0> ze?F7g*;2UN-!v?0!KO)A`S1__B_fk+NU8@{&!D$i*JcfwdJDD0s#{F%D=2A z*FG0gNzxf|KCtowx)Mn^ruTil>c4;#lm|fv9639g(}O+`YIU$$aUUT0!b^1@Q|5WQ zlM}`arr^X6ZIM^a#UhGECF1AhTU7MBRELoWTy*$l(aAmvjyS+h^)3$T+|v6ugb-Wd zNR0`7jJK=ZJaarysDLq|Rep+`eardWw5yktc$ip%k_K4*+jt4u7nn}tvV;4kLV?nm zbrNX}MkpAJ)0W>n2#sHbQ%sbWep zC|w~O;^?4Ph3ss=9hD0T_9=b8_}0sK;P4jtWPF|h*4H?1)K0dHl3Z#<_&C0nTBC3sns||7Ne+8E~h=0yNo|e!(6V1m}MuX2i z(Qu>6uwK+N?n_Tjd2;Ozp!jjb%SDNH=T=;&6|ZC)VF2YP;Xh=`@=(wFvhuV3E*2vZS5B6L zOk2=(+i1m8k#B6jI%WpphMfBi3Li~Kq}e9|c`X62$&cODy>^M*UMJO=tfTV)00;=U z@rB5MsGpW8jRbZgzG+*T4=W-_V>stCXihSgk635w7HBd7>;`R#+MyWbfY-dz%_gAD zVyF)5zE%V}?5()f;wYT5^SxiUv>Ud*=ZCka3F8c;Cm=WFfF&9K)?aUQNaAt$u0XcJrFsVyeZ z7cFfs*v=reRXh^$mX(`Tm=n}nRSY>7AZkX-zjkO&Pl`w&2R$W|u~H{LLCC`JrK8Eo zM|aC8CoAtaRv6ZEGhg5tbd7MmKo32j6r0~Luz&IJ z7XK$*Z3t>YKFGqd5qn%SlWxhG^7~VT=*`71Ya*&VN$3nT`J^g7pc@2djo)8rB(sc_ zIn$~!coqd40$_rxqW;7fOtsG4<y&?oe+4x!QdDEmv1l@Atn}X@B zXdHUMK2Jaj$e}dIwJ3ptP7KS!kJBZiFe1%oR>PpU&nXX3q{g-3VW8WvkCN72T_RaS zNz?XkhO`1d_h)DyXR5?!uo)n8_}uHH$ncEo!k>3roR&rHXa=igT17=rQHAeEv=)zH z4eyG@WI=@}sc$I_*ZMfr{bQRA#=L!`0f!*F@J`hia>NC?=ZglAUh8EQ8p*2LAT)*r3N+0`@?L93vq;Pzp0OsNjTM<4X-iwWqWMhj;8rlLv?eXQB*aSz?$iN;QlZs|eRISa z?~9C~w9z%s4pdC7%xEZk=UfmcYD`utB~5nY&rXXhg;iFdaNt24l(IL>(~?;=8CI|uhypALEN0n z(NFB8y^s5GNh!&s0tl)X9-C&{(?`tORl|_f?oi`f-spG$? zjY_kDp5m@eXi+x3?;kHAP|l`?+&iW`%Q&GGmxl(VGi=Djl$~@f&|Y;-WZWeqPLMH~ z_SM@Fj4dmT9L1?N-h7A~9de%kVMiJb3>*5wc#$cB`1G{C6ZGKf<6ICF=uyI>$~smNCuhR|{ZtfGibF^+NaWHolQkkB zW!d(~at{Enk6h{>R8_G>JTWio6sO$j%bcS{w5LSLpAW8c=O`CzUI9&nBs_V?k^^S4 zlfXFk77rlwPD`oGYM_gVcW@Lm{9nDMka-uLi<+_OpJjpO2ofNVty)%e!RXg1F0S@< z36&)6L6}Ca*>;ytk)@QYp|WPHbrbmZ(&XzvV!YXh^!KrPoxF`{L|ZR3k(RRW^W6HR zi)tr8TWWZ&Xx6}>3I482(RhC2pG3AyH%UEe8W`>L?6TpJmqW7xC&cBN8~ci+F_B_K zXe1Vpt5qgxUH~&=ya&Ffuj!)}+}Z`}$WAm2yOJYZwJ<2cz9}uvlD!U@;>R28Q2X{1 zAp4TR=cVrpg66StAq47&alQ;#e*5e`=U;&g)2S}sv{_=B9L+kVy-k%|o?6QuO~@!p-~FYFyCk8N4MOdR0v`iaJ?~UL$1E&=e;6+;?<< z0KVP@zJPdV>(Y6hn+PSdvr{C3^X(u+E@2q0)&Y8xoP4SA-r|3Qnr@y;qEp#+`A52T zaQ|vimB(Tcs?u#qWnDYZ2Kb(&iJ|gmcYYz_=u^&3>ytq`X%a7@y%yo1}U0-mDAPJzlXQz2omv-a8o;=%X*Ve=+;5g zAVD>8TTWb2>ezZ1(Mc?s`aPy8s9abnpS27^OY5GU>k_wQ0WXaS{uEILMQGM!X%k?! zgPILe&{N%g=-lubokQfG4l!x3DbIS0zSO-F6MKy5vzxxka9h4os_Kj0H}>-P#DPIf zbx=eO9p8lypg|{#UBv3oPZj#!Co++reQwg^M~@xCnI+}dl%p1Kq{@me#m-vb7?R-z zP?xJnqhoD(hFZz{=2%ZoUS6>#4({iP8*L!K4PC^DM0o(ODq0du-Hy-4$FREIvSqQc K->Rou$YgjvZCro= literal 0 HcmV?d00001 diff --git a/examples/01-cubes/shaders/dx11/fs_cubes.bin b/examples/runtime/shaders/dx11/fs_cubes.bin similarity index 100% rename from examples/01-cubes/shaders/dx11/fs_cubes.bin rename to examples/runtime/shaders/dx11/fs_cubes.bin diff --git a/examples/runtime/shaders/dx11/fs_mesh.bin b/examples/runtime/shaders/dx11/fs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..b3a94b9fc9613336db22dac63a9703388a294f44 GIT binary patch literal 2266 zcmb7F&r4KM6h8CD-xxEvQw$!_LPZpv5)B>SIOC`^Ix;hufnb_bTFS)uqn3lX2_$Jz zV7M#V%pzzdZIU)27`SucKhUC8P}};xdG|~@j8sR?oO{3fopaAU=f11_`XvzeS3Gj; zsal_1TUtqP$$_Ur_G=>3L*b2+hn+KrpBE>7G`IIOzkBL|$9|1SCG0h5y@fgS8?+yI zA~GC328p~;C~Y%TDzMLUkv#zYoR<-DDOX39GxKxHtCG*>$wgSX17%zl+l(Cpw3vA> zEU{8N3_Mo`zX|-H41SC8Oe~B<k28prIW&D>kFTN17I zXe=4ClZ$f;>8u^jtUOv;#-OjGyRW0~dUr>ltE-EB7)y>!yg>l=o&Cr`DU9kZj6{5} z+Xf>3kos1{PQe*K6Nexej)%P2(uvZ9hgLi#RU1m{m9M7ZPpo7iyq3g3{_*o#FI?pEcvE z5MQ0<2Fqza@T(azYru+m zs4sFV`Zk@5;hwLw{>tgRpf{y_vroA30>0+0wN=a7>YDDUw%nTfv2Ue*%;C#XY|z*s zYgvxNcCc@}Uxi-b?$BBee#F7Asz_DNCRljK$1&YBwUc8J_J@ANIqx>}mz6Gl_HJq3 z%d#uC#&uc;{WdJ*cIrC} zo%+V0hnTr%R36XD`^vK;f1l!tSq}Sf6jTLGEQjZA98?7)>~Ezzazr{md=08{jrTfh ryK$A*18mb^tU2F`AU^+ODwJBotPRSykHY^Qd`l^;8})zWpZUK5kkjZ^ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/fs_metaballs.bin b/examples/runtime/shaders/dx11/fs_metaballs.bin new file mode 100644 index 0000000000000000000000000000000000000000..d6f9f05c3be3758a5ac3b68ab3096f57ea389925 GIT binary patch literal 889 zcmcIiO-lk%6uoJtN#)?C4T@f%4N8zot--~uZH$rIP=as@7#Oe#}G{jVSShoHN8q>KNtB7JwD&Ro5PEz#ihvC z;gq#PblbfNktQ>XlgeR-HFHJWSVAKFIKzA^#TDv^x*xl#t{OJ0MxN<4SZRYYf2g SJ6LbSI=}Bc6DRnL{}SH^C|_Uz literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/fs_raymarching.bin b/examples/runtime/shaders/dx11/fs_raymarching.bin new file mode 100644 index 0000000000000000000000000000000000000000..a23511c2be5c10f02915ed341794d2f988954bb8 GIT binary patch literal 10694 zcmd^_&u?5;702&9r;g)BjTKY`5wugQNKKH^#Nk&`6u;Pxlc=GNY%2;9QreJ&7&$U> z5NQvU(xk$5yIbfy)hEP=fq!}yEy;4-lKO} z7xW9d!hy$+!*4_Qw;12#eZxSP@%p9JwOjA4J_wteo9K?~dRJFlxE|M%a+w%6())X& z@ap^r;&&SOKNY{*!2cC^2}`qJ{6D~J;QvXyP6PkX;&pW$07T=jnlnBU{a9D2Ima^o zC*n z;mZ9xVKZotmi|0qmPqRSATF(_qoAkpt(EVtuRU11`>_4S;_>$7t4mkgOZVQpeP_Kr zyLSHvE32BEJvnvuJWwe)HPG(v{^a3-5&4g{upTVfo^X*@cD0xv;sQJ+CHR_WXt}k9^M=GezM) z)@Z#Hv6n9_Ub?u z!Dr@Kzb&4QbZ}k!M0rus{~W2P*NW~~`zp-L#@(<{oEJ6&>@>#Mmmyi_f~akPC&|H$ zz8qE$<88GcWaytuI&+DKo_X?NJR3akYdgM{>9GKXw3X(ghpMxAU*2P{#*3VrocjI2iO$bO*{>+|658GV75nSBb+MZ@MX8tC zz*pFf+9DS2gp%em2$tpgNX%Q(Mrv6t?Iejm5f6{|PE zok?r36Ma)~Ej#f<)D*m*8g`)6|;^7G{9 zA`Zxi1C;4jn(vH5r6By$aq#{*bsXRk2jfnq`Fx^937*fyJdU_OaoT17uJ=dJaW(b+ z$Xo}S_UgsFRw=IbKa*l_eSGe`%w>)}6y03r_%+GE!Us(<`zM!8CVbmz+3CzqY+pP2 zi*wcyeD8eN!m#Y?>H*{#!&sJCSN%KIE9V+d`?ClA;j<#_O|BsK8YpsIy}oFfG4gel zzr(b3UR9s69(`&(;gO#V_bJ}9k4DUSY%s4V@x#blV&xor?%`%@y%X@k3K3kL(=&gxPn)Uk`c+OwbA$dH|fALFEhVa%ue%1}yz}}e@FYG0! zO~JM7MADJC5x4T~puOah&tJ#2j2NQ>?zZ&@`+C;P=mER#-vx-_IOO~0=OPZshy#@A zR+`u2(9fGr3GQUl!~d)`bsXRw%W&5@!GamX;c5=rCP?knu&a}}lD^!jA^ zIc&n$&OQ2)WsYx?%rR<`!NZ0onSIbCJ5gH)1pddq2LFE`b|+mgT2FnyR+w`X3}}_g=>IZaZH^n>H}S4Lc!fgYaDx1a?mozO-pw3Lsnly zYfJv`lnbx?bOrNs0$QO;uX2-#Hx)!0}5(i|? zNlkmtOtqRdZdW?dUVJ?a*D~T@KWtln;F-f`0$wUH@~1^kPk8Us38Mt7qO((>Z2e z4{3iqLyh!migRLrtBiOXdGevbXD3u?mH`&Ad5rv6Of+$TQIS{LBv&lUDPv1!76 z*18Z}V_mX;<*QD~+;PayV>{fRkddcQrdw%VzxNkgHT0#Nxz5!~x#UIKqChzaX>~Kpc(^yfLD}y8S-46=Z15Sx^%8O zzD+XfiuFx0c>O7yB*Zn9~>V3?fPfc$m+t}MSK#7fI zS^wG5CtD?^k;}t+Q*}?MdU*fdkniQapP`R**&J-=FSza>rcc*LKyITK44H+WS2^)pqZh<~h_>={P)1ZLKT5zUL11qW*J* z;{Yyxvi|?mJ$god8g`GyKjaK@{FBqUhWn&{J4BD~#&dmPjqSkNXiGDM*Wzpc*~Rx= zQ+@Z|d#)c%pZBTBo=q7JHj{%4>%i{0RJ7iujy)k^x(0;w|FpP^Y?Jut}&1JUL6q#|YZyCQ~)Mf1Vw~ww) zCwiXqH0faHn~Hh;tn63kRc8pZpMQeB?Hf;iz&>Lg%Y1qF?%iqY==bKaTS->Pb`NTt zaY~_4KJD-wHc{vN_H2KAIm=<&!gGpP zzc&VVGOgL`a}oBs7uRr0&>7&8r?%7jPwL&)tKoJdXu{pt1=lii$bQ(izMfCv6{TJV zKDYHh=Qi&j_2VkX!FoA$9N-ZLs78!i&TEyht39!ev+}UMGkNbl znX@NUBkq~=S|#l2w`$^T8UDamyyx?&Wz;t^XkA7v4wKpMP3!EFTt?p77N}*a<#Efv zMio_%7O)OzRHKYi#ysJWX$Y^Dm#C=UnUUYOU_65ku!1<^QR$mjT5n{>Nt{>Drc~G7G-{ y7i<2Np6&rKtoO2}=XEVDUs!%9tSbT>6=e|P<9ZLpzg#1__BwPNsR3={?kA46J#n3zEk+F!#k2;amz@W1Y5_!W&j%Sck^JiCHifjP5&iNrhF5~=A zzHoOozbutXh1?kO4wAYWmZ@z6w3~SsMq&r?B=GVf_$csAgJT<_Iyb3jw1W6NF@u9q z|w1zM-JOc;eJgPiLyurUqw{uA3TAk4bmTO=0ut z;epgw2-$G=8{gc*bvn;2R3c}Q87xz5ZuaI{b072I?N~m}d6qoPgEf6CPOq%_4gD=( zTkPYkV=dzAG?XnM{%bv^x7b&sQY73ZOEPW#04-RarV zH}|>E_nHL-k)ufZ`Do75d1?`sMr74@Y|l4!7>@bA33b(X#P0!$(F5NzJusBd-=X>; zKHchTYhV2wT*vc+_s%`2CVg|A2(h4_w*5Sw$r^ZkBOx1qq}Aa%GgJuI?;|-q>K7t(|fwHIJ9Q$6$iULeDnVECXJnme1DpQeIVI(8tOyQ(=6dv@0&Y=IH zH4NV_0k$Q`)w)lsqgNjUL!cQ%#J$OW*@c#e=uxxE>Ld%MB0L{UWUB6J5j)&%%@<=gNnMHQQ{HexD8 z<9C6dBDSFvjjsY9BetOwjX!2RRV$mqU1ADP^LK!q&cRQ5@3B>h3^62!pOysYwnc4U zTfRctPjmDObwOZVo^|E*>Tg%9=*SwYZO)~Nf`M68Y z`DDhGuHqkeFowlq9Mhk`XFvKDeD-*QoQaumc-AKmvGy(a2(dX}a}dd7x^h79ry3`|@M3=Iqn{1X^~ OYz7W~Ap6M#unhpzE*>-h literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_mesh.bin b/examples/runtime/shaders/dx9/fs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..2600a8d0c59b13495c95f16dea9015b2df060a85 GIT binary patch literal 1270 zcmZ8f&ubG=5T3WY$%YE%;7JgSqF^tvX%L!2erPTgBBFJ{gAha;3|Lb73VH@ursLbym|S0_n_9F?Cp==!f4euTlLnx&3d!ZXvh810>1v@qJJFE+XDBiYOCHP}9E z%mt$hfG0M9fjs1}@AwoT|KJwL1 zjZsY7gP--5vDBGa=0hCP=%?O7qaltHt;F~)rYxydo*=&`whS)STn3iLOFwJ=uUU2A z#pIeZXkOM8)D6)`h}z1-KBIqlJl8uh35;;I>|J?OhxViSg}v0F`8qq!aW%i><`F_$ z3eI#^arX*h(iso5VKfzJ%3{W1_s*tI>oGRLelu`nc@MfvBgwRc`905f$~)&pOu3YI z$z36bJE}|l#EM#sg&@maU2=Mgn8wOFs6(xHPW18jO+L);%j808jE-x{DCn YE_3!3%~4x()YcsEBgW0mW*ON304&q?{r~^~ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_metaballs.bin b/examples/runtime/shaders/dx9/fs_metaballs.bin new file mode 100644 index 0000000000000000000000000000000000000000..880484781c364263c3307f2ee71adf7c8d0437e4 GIT binary patch literal 473 zcmXYuKTg9i6vn?escHej8xsTR`rB^249$cl?WHq7%JH$V?iwQu$}`u^IxI{W;+ zJOV@ykp}w4@eZIPC?h!?UA{FyYx=DD7@Cbj4b(MemvPjc1zn;}Lp@?IpsW?Of_28m zvmlp&6LJ$+lC5$51(X(Osc-6i>SO9@KzkPCGH^m}0!y;h3BX6`n0oI4+RY6f0}JOZ maN_0!mSn5_H!A8|7k3^Y-GA~PAiduCflQe99w5EGySXiHo>CV8 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_raymarching.bin b/examples/runtime/shaders/dx9/fs_raymarching.bin new file mode 100644 index 0000000000000000000000000000000000000000..94f0f6f467a216832bf33b3d7f044e82a7a064e8 GIT binary patch literal 47422 zcmeHQ&8wVO8Gq)TcRq6OaIbV%DR>tytRK;|bP)?lG+nreP^|-52&rE&fs~Xqh3+~R zL6Ewbt>R)XxSIPHs0*`+D5OH9P%Tsu#-gA*mEMix?{|LZnfHC~%}r(|A$0K!d2`SA z*Yi8iInQ&x3fp-7(zUDKzjE`1t2chwDy?Om*Dt+t^Nk<1%u0Le7uKH7|2O}fo&Uy{ zzWkJ#y@`)*1^&=(yJm0T&kOhp#6UEA5g&gq<72oI-xYlPRk_)I%i0LfPrsD0?eDkY zR_3(m^XhAtp1t%1`|8#2+_?VQ^~*PRKK1pdcfNArr3*VRUHR5`zjtHj{PkB}y?PCX z(?7(?)vd zp8w06w-|m??o9U<{Vrd=e3tHmMflMf zU;NufINEKDzazAJyCt_#8}41iZ&@F4<|D>0te4D4BZbZJVV+GG*X4ar$+ZO6K&h`CfPOCuNgY+pa+J`wUnHiU5V7suby7rG8w>(si z5^<+FuFQwycI^Eew|^*ZA90yB>mal0um$%S-BTT!<@g|_g&x*OOLnz~n^lf_{ol!P z3&cH0AM0Nl?W(_)Mr!w*vNq z^bxzn2{FMw(}Wx0Rd`eWCHySmv%(+4 z6Qk3>U*>nD+i|>4I3f=w{sVu3Kl0}XkH2-?1po8#HuztRzpKspG>*mi`>=8d+fi~z z%>O8NEGu&a{vM4S9Qb29t}gQi{sMoM{2lT~$R8npNXHWT7wV!pkD=a?`b6n5WY&0F z>7ir%jqz9d=g|LE{pP`IAM7_V{)YZp`rlap;5ulGzs+^e7=PIw&2?Y#%~*en^|u48 zH?P00C&h{|Nab_Wv#TWt>0KzMYUiLjJh_8Q}Uj8s{(L{N=jm&_n+h`~PD9-|BZCH2H7r zzYqOi=>J0h7y7@@|Aqdq+D9MyzqtP;&L8pomG8yUyfOAa$NuNo|BQYS>mRZH5$hkZ z{(-$kv-HLK2lbJfH^=@f-N)0${V0d;KyB*Z;{0Wtzm(kF~-y{`-f22PDSd*nbuK zuVVjIy#EpRkH`JvasDILKVtnu>m4C~g!~cjzs37ol(VV3kNY>Yj-j<+=_CC8wOId+ z_1{?k)gIGIkL`O-HIC{oK=qs0e;WHwWB)1oMeIL~_21Zk8v9RU|7pBGJ&O0wUFy-G`9w`CFLTZ))x#e}w!I z@<+%YA%BGY5%NbKH}xL6#!WYCz8U*ZF}HZDgZcL+#!bFI%K3Q5hLgDekL}UCe<{{K z^xhBWo7mgG+qHR;+qj+_>mRZH5$hk*)F0yfTbzH3^KaF@0pD{K`oHRZqu76?`MBT3 z(bWIO{;Sx375lG3{;(0>i;MS<{2jp(a@UmWWre?mROg#<|Hemi|CO)N6gJoNbcqf7SkIc$n^&QyD zIo@jL^#}H0jG9=1 z9WlJOQw#ZR*o%8^KZ+abFQoS)P3!IEG-kWGS?LG|jvH_P4SRQ=^B2;%na=&`-vh1{ zZ&~^eP`{(}@7bT%qW`9i*P?&V{<{+Wsb^(B-n2jFc*~ww-cIf5xN)2iJH$mN;fCir z94ARn2f9|c5>6CebQVq+UpShhP1T>BFCe{L(z~MX-HF>l-v$3UtUoS*>-zm^wBNfQ z%l$Bp2KLvr=s2(+uSLfV`_o!<+_3l8rX$4AB;_vhN{Vh%Zqvwa}{=R?3aiVeSZsI?g{~e1P^67g0kLTOs;T3Mw z9zDC3>9HCg-(28rIX>=m1N{@fBOh;;TYH@}-pH)>*jn`CI{kZgcP;w&^0=wBtpk+d z{`>Aa=KRO;R)R-x-AD5T(wnqrx!vsLWc@1sBb@j>Kjc50pOzU%Wx~-M>5Bh|uAJWp zXAJK+Ar9p~P2riJ#+o_OJj{P?KPLY3yNn~&YnHwq+T?gVdVl=vTKF5-Z*siV@HepE z=XlHFuNp_3uIitEOX;l2e>flIxVojK4MLpZMRh^mqQ#v)dUrA65Rt`KtKOCsV&q^43UmRPhAx!^Dfkt2l;|zd@KY z$|ghbjPY)n=amM2M;Xe%ODF>($rK*^biZrUeeg-Jx&r=&Zo<5c!3+!8O%Y0}OyUHQ_CdZ7J>Y3-loSN!3`%fY&AVvV<6Ru8j-a&UfV2-An$ zsB|S?vfiE-WmNJ`=0hIi{H88{5Dy$zT>fDF>f@2xMDnJay&Y5@$*mlZDGzi^@+YdA z(q-B`M5LWtPo2ghTm%0QzWN&N_HKd=AKZxLM^U z=EkW1`uv#b6t<0YIL?1OKq#Cu0D z(WL#&?7y5Wz`iG1JJy=*g_UxoH8huXSvF#&@>f}9XS)+Sb${_^;*r?w!f&?Qw|`ISJoE(WN30RM znb+(w4Z2ZB2mU@fk$BrIrIU4Z3)zOUj(C!ED~N_Tv-Gk4v@<=nubWjKxjX)Hx+CXp z%lApmNxSy*Oc%EC^13|dWvl9Px+XkHmaOV~TtBIJj_~BVhK>nOnsZm_96tw_Oz60L zly^#kE{Rr-KjNqUrUG?#O?=H8{s39SUwZ`9pEB)ti6vr7c$)%S(+P1WOe74}#(j>z z#Jr8R6Mi%v3%@d-!1%pIzkV-;OMdK}fjR+yHb1lg literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_mesh.bin b/examples/runtime/shaders/dx9/vs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..35b7db4a4ba3d8967180aa11392fb18fdd36396b GIT binary patch literal 954 zcmY*WJ&O}j6g~5iolH_pVI>F#LC_|cT@+HdpN+x_>N;W<#6*m2h-4FOpRA?ew2H-m zUHlVbC#=6rB01Mg-#dT^i^+;dc;U}A*hJNLFe>B(_+`*&qtJ(Bu`g-2E_4Ib-F#iXoQH;)9BCkY4q^dm*0!~fY}n?B2T={ z3cJVuZfx>v`8N5#CnuZVzFyrTXV3L=d;>&@F!y7e3iE>aOnd_l`JlqCaVxC*UWHr4 ze4dQ6aixx-pEfiwF&Jyo=T7J1+_V{{d0a BwzvQQ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_metaballs.bin b/examples/runtime/shaders/dx9/vs_metaballs.bin new file mode 100644 index 0000000000000000000000000000000000000000..8c80df245e869c4ea8af3e66f18d2ef209a20555 GIT binary patch literal 433 zcmZ8cyH3ME5S%;PSfTL`AmI{HSU3@dO9%ypks?BV8;0m?#+DmwsI$o1pp7~I?D1M9)8q&j* OVNdg|Eq6CvN5>xls8$XD literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_raymarching.bin b/examples/runtime/shaders/dx9/vs_raymarching.bin new file mode 100644 index 0000000000000000000000000000000000000000..ade8b1481ab3f74a17bc378fc8be11b822c2e628 GIT binary patch literal 347 zcmZ8cJ8r^26ddoGA~e20BrMS+jfFue+(Bqk5D5VxrG>yzj6jP_KCN?uJwoc7YKxo$ zGtUqSW#5k8ym`M}55ar7HLGkh&$G{QVb)h3;G^$BAF4yu#&9;czXtG3h{iM|#uqTA z>kx|Yi9R9c-$-bhPm^9bAN#bIcJP=l3$r&bZ{f}4HhdUON8$8!vC4{YXtuk2Ly|<@ zBuehOQ7?{Tv`(u^Ah5!lKMmu`VJbQn?fhWti^9JmZ7?!^L g(^Ref)EfUOeNOV4I{%}%-*Ju=uAm+3ZB=o~5$dW%2mk;8 literal 0 HcmV?d00001 diff --git a/examples/01-cubes/shaders/gles/fs_cubes.bin b/examples/runtime/shaders/gles/fs_cubes.bin similarity index 100% rename from examples/01-cubes/shaders/gles/fs_cubes.bin rename to examples/runtime/shaders/gles/fs_cubes.bin diff --git a/examples/runtime/shaders/gles/fs_mesh.bin b/examples/runtime/shaders/gles/fs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..601f8ef58a8cff2ecf4ee1c5b4a68e24e7fa68d7 GIT binary patch literal 1248 zcmah|+m4$s5bZNxG19)6ZPp9MK&oi_Qnh{QTR#Ay1hSR_MkGrvRsX#+zN9AUs)=N* zvCo+~hr@$vH%$xQe^g(8M#I>w)n4fyUe)$>fOe3>J!*bek4D= z^lkD0lJnCMQ6!F`)CG{<**S@DRAH~2U+{pLS(x`vz~>k8EhZs%lb|905Ksi&3ZkUn zUiG+66-EH(U zyrI_^mVt!Q#K9?Wz7ih{Hs7P+7%Jz{tk-r|eH-iT7y2^! z=}g!`AIWeZ&(fs6FzeEq4kd4jx6_!0q@9TSC7cRT`9ozr;u nq@eg)?if>r5fsKOyy51OIsFN6yR&(k38Oe;%T@F{iaz`SS4&=X literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/gles/fs_metaballs.bin b/examples/runtime/shaders/gles/fs_metaballs.bin new file mode 100644 index 0000000000000000000000000000000000000000..8814e5be9e268c4d0fdf5147a2c43681a0cdde14 GIT binary patch literal 358 zcmZ{ePfvs}5XC+BQ@ms^Qx{ow!4vUh)QdMi0BNAGlR!%iNDQP3$pCHPac#^n!*#(urt&=TY^WJM?hp}3AO NM*rVwf%;VH;tK=iW)}be literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/gles/fs_raymarching.bin b/examples/runtime/shaders/gles/fs_raymarching.bin new file mode 100644 index 000000000..d7c70816d --- /dev/null +++ b/examples/runtime/shaders/gles/fs_raymarching.bin @@ -0,0 +1,234 @@ +#ifdef GL_ES +precision highp float; +#endif // GL_ES + +uniform vec3 u_lightDir; +uniform mat4 u_mtx; +varying vec2 v_texcoord0; +varying vec4 v_color0; +void main () +{ + vec4 tmpvar_1; + tmpvar_1.zw = vec2(0.0, 1.0); + tmpvar_1.x = v_texcoord0.x; + tmpvar_1.y = v_texcoord0.y; + vec4 tmpvar_2; + tmpvar_2 = (u_mtx * tmpvar_1); + vec3 tmpvar_3; + tmpvar_3 = (tmpvar_2.xyz / tmpvar_2.w); + vec4 tmpvar_4; + tmpvar_4.zw = vec2(1.0, 1.0); + tmpvar_4.x = v_texcoord0.x; + tmpvar_4.y = v_texcoord0.y; + vec4 tmpvar_5; + tmpvar_5 = (u_mtx * tmpvar_4); + vec3 tmpvar_6; + tmpvar_6 = (tmpvar_5.xyz / tmpvar_5.w); + float tmpvar_7; + vec3 arg0_8; + arg0_8 = (tmpvar_6 - tmpvar_3); + tmpvar_7 = sqrt(dot (arg0_8, arg0_8)); + vec3 tmpvar_9; + tmpvar_9 = normalize((tmpvar_6 - tmpvar_3)); + vec3 _ray_10; + _ray_10 = tmpvar_3; + vec3 _dir_11; + _dir_11 = tmpvar_9; + int ii_12; + float tt_13; + tt_13 = 0.0; + ii_12 = 0; + for (int ii_12 = 0; ii_12 < 64; ) { + vec3 _pos_14; + _pos_14 = (_ray_10 + (_dir_11 * tt_13)); + vec3 tmpvar_15; + tmpvar_15 = max ((abs(_pos_14) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_16; + _pos_16 = (_pos_14 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_17; + _pos_17 = (_pos_14 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_18; + _pos_18 = (_pos_14 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_19; + _pos_19 = (_pos_14 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_20; + _pos_20 = (_pos_14 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_21; + _pos_21 = (_pos_14 + vec3(0.0, 0.0, -4.0)); + float tmpvar_22; + tmpvar_22 = min (min (min (min (min (min ((sqrt(dot (tmpvar_15, tmpvar_15)) - 0.5), (sqrt(dot (_pos_16, _pos_16)) - 1.0)), (sqrt(dot (_pos_17, _pos_17)) - 1.0)), (sqrt(dot (_pos_18, _pos_18)) - 1.0)), (sqrt(dot (_pos_19, _pos_19)) - 1.0)), (sqrt(dot (_pos_20, _pos_20)) - 1.0)), (sqrt(dot (_pos_21, _pos_21)) - 1.0)); + if ((tmpvar_22 > 0.001)) { + tt_13 = (tt_13 + tmpvar_22); + }; + ii_12 = (ii_12 + 1); + }; + float tmpvar_23; + if ((tt_13 < tmpvar_7)) { + tmpvar_23 = tt_13; + } else { + tmpvar_23 = 0.0; + }; + if ((tmpvar_23 > 0.5)) { + vec3 tmpvar_24; + tmpvar_24 = (tmpvar_3 + (tmpvar_9 * tmpvar_23)); + vec3 _pos_25; + _pos_25 = (tmpvar_24 + vec3(0.002, 0.0, 0.0)); + vec3 tmpvar_26; + tmpvar_26 = max ((abs(_pos_25) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_27; + _pos_27 = (_pos_25 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_28; + _pos_28 = (_pos_25 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_29; + _pos_29 = (_pos_25 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_30; + _pos_30 = (_pos_25 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_31; + _pos_31 = (_pos_25 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_32; + _pos_32 = (_pos_25 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_33; + _pos_33 = (tmpvar_24 - vec3(0.002, 0.0, 0.0)); + vec3 tmpvar_34; + tmpvar_34 = max ((abs(_pos_33) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_35; + _pos_35 = (_pos_33 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_36; + _pos_36 = (_pos_33 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_37; + _pos_37 = (_pos_33 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_38; + _pos_38 = (_pos_33 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_39; + _pos_39 = (_pos_33 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_40; + _pos_40 = (_pos_33 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_41; + _pos_41 = (tmpvar_24 + vec3(0.0, 0.002, 0.0)); + vec3 tmpvar_42; + tmpvar_42 = max ((abs(_pos_41) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_43; + _pos_43 = (_pos_41 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_44; + _pos_44 = (_pos_41 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_45; + _pos_45 = (_pos_41 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_46; + _pos_46 = (_pos_41 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_47; + _pos_47 = (_pos_41 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_48; + _pos_48 = (_pos_41 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_49; + _pos_49 = (tmpvar_24 - vec3(0.0, 0.002, 0.0)); + vec3 tmpvar_50; + tmpvar_50 = max ((abs(_pos_49) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_51; + _pos_51 = (_pos_49 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_52; + _pos_52 = (_pos_49 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_53; + _pos_53 = (_pos_49 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_54; + _pos_54 = (_pos_49 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_55; + _pos_55 = (_pos_49 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_56; + _pos_56 = (_pos_49 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_57; + _pos_57 = (tmpvar_24 + vec3(0.0, 0.0, 0.002)); + vec3 tmpvar_58; + tmpvar_58 = max ((abs(_pos_57) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_59; + _pos_59 = (_pos_57 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_60; + _pos_60 = (_pos_57 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_61; + _pos_61 = (_pos_57 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_62; + _pos_62 = (_pos_57 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_63; + _pos_63 = (_pos_57 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_64; + _pos_64 = (_pos_57 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_65; + _pos_65 = (tmpvar_24 - vec3(0.0, 0.0, 0.002)); + vec3 tmpvar_66; + tmpvar_66 = max ((abs(_pos_65) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_67; + _pos_67 = (_pos_65 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_68; + _pos_68 = (_pos_65 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_69; + _pos_69 = (_pos_65 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_70; + _pos_70 = (_pos_65 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_71; + _pos_71 = (_pos_65 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_72; + _pos_72 = (_pos_65 + vec3(0.0, 0.0, -4.0)); + vec3 tmpvar_73; + tmpvar_73.x = (min (min (min (min (min (min ((sqrt(dot (tmpvar_26, tmpvar_26)) - 0.5), (sqrt(dot (_pos_27, _pos_27)) - 1.0)), (sqrt(dot (_pos_28, _pos_28)) - 1.0)), (sqrt(dot (_pos_29, _pos_29)) - 1.0)), (sqrt(dot (_pos_30, _pos_30)) - 1.0)), (sqrt(dot (_pos_31, _pos_31)) - 1.0)), (sqrt(dot (_pos_32, _pos_32)) - 1.0)) - min (min (min (min (min (min ((sqrt(dot (tmpvar_34, tmpvar_34)) - 0.5), (sqrt(dot (_pos_35, _pos_35)) - 1.0)), (sqrt(dot (_pos_36, _pos_36)) - 1.0)), (sqrt(dot (_pos_37, _pos_37)) - 1.0)), (sqrt(dot (_pos_38, _pos_38)) - 1.0)), (sqrt(dot (_pos_39, _pos_39)) - 1.0)), (sqrt(dot (_pos_40, _pos_40)) - 1.0))); + tmpvar_73.y = (min (min (min (min (min (min ((sqrt(dot (tmpvar_42, tmpvar_42)) - 0.5), (sqrt(dot (_pos_43, _pos_43)) - 1.0)), (sqrt(dot (_pos_44, _pos_44)) - 1.0)), (sqrt(dot (_pos_45, _pos_45)) - 1.0)), (sqrt(dot (_pos_46, _pos_46)) - 1.0)), (sqrt(dot (_pos_47, _pos_47)) - 1.0)), (sqrt(dot (_pos_48, _pos_48)) - 1.0)) - min (min (min (min (min (min ((sqrt(dot (tmpvar_50, tmpvar_50)) - 0.5), (sqrt(dot (_pos_51, _pos_51)) - 1.0)), (sqrt(dot (_pos_52, _pos_52)) - 1.0)), (sqrt(dot (_pos_53, _pos_53)) - 1.0)), (sqrt(dot (_pos_54, _pos_54)) - 1.0)), (sqrt(dot (_pos_55, _pos_55)) - 1.0)), (sqrt(dot (_pos_56, _pos_56)) - 1.0))); + tmpvar_73.z = (min (min (min (min (min (min ((sqrt(dot (tmpvar_58, tmpvar_58)) - 0.5), (sqrt(dot (_pos_59, _pos_59)) - 1.0)), (sqrt(dot (_pos_60, _pos_60)) - 1.0)), (sqrt(dot (_pos_61, _pos_61)) - 1.0)), (sqrt(dot (_pos_62, _pos_62)) - 1.0)), (sqrt(dot (_pos_63, _pos_63)) - 1.0)), (sqrt(dot (_pos_64, _pos_64)) - 1.0)) - min (min (min (min (min (min ((sqrt(dot (tmpvar_66, tmpvar_66)) - 0.5), (sqrt(dot (_pos_67, _pos_67)) - 1.0)), (sqrt(dot (_pos_68, _pos_68)) - 1.0)), (sqrt(dot (_pos_69, _pos_69)) - 1.0)), (sqrt(dot (_pos_70, _pos_70)) - 1.0)), (sqrt(dot (_pos_71, _pos_71)) - 1.0)), (sqrt(dot (_pos_72, _pos_72)) - 1.0))); + vec3 tmpvar_74; + tmpvar_74 = normalize(tmpvar_73); + float tmpvar_75; + tmpvar_75 = dot (tmpvar_74, u_lightDir); + vec2 tmpvar_76; + tmpvar_76.x = tmpvar_75; + tmpvar_76.y = dot ((u_lightDir - ((2.0 * tmpvar_75) * tmpvar_74)), tmpvar_9); + float tmpvar_77; + tmpvar_77 = max (0.0, tmpvar_75); + vec4 tmpvar_78; + tmpvar_78.xw = vec2(1.0, 1.0); + tmpvar_78.y = tmpvar_77; + tmpvar_78.z = (float((tmpvar_75 >= 0.0)) * max (0.0, tmpvar_76.y)); + float tmpvar_79; + tmpvar_79 = ((0.9 * tmpvar_77) + (pow (tmpvar_78.z, 128.0) * max ((0.2 + (0.8 * pow ((1.0 - tmpvar_75), 5.0))), 0.0))); + vec3 _pos_80; + _pos_80 = tmpvar_24; + vec3 _normal_81; + _normal_81 = tmpvar_74; + int ii_82; + float occ_83; + occ_83 = 0.0; + ii_82 = 1; + for (int ii_82 = 1; ii_82 < 4; ) { + float tmpvar_84; + tmpvar_84 = float(ii_82); + vec3 _pos_85; + _pos_85 = (_pos_80 + ((_normal_81 * tmpvar_84) * 0.2)); + vec3 tmpvar_86; + tmpvar_86 = max ((abs(_pos_85) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_87; + _pos_87 = (_pos_85 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_88; + _pos_88 = (_pos_85 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_89; + _pos_89 = (_pos_85 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_90; + _pos_90 = (_pos_85 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_91; + _pos_91 = (_pos_85 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_92; + _pos_92 = (_pos_85 + vec3(0.0, 0.0, -4.0)); + occ_83 = (occ_83 + (((tmpvar_84 * 0.2) - min (min (min (min (min (min ((sqrt(dot (tmpvar_86, tmpvar_86)) - 0.5), (sqrt(dot (_pos_87, _pos_87)) - 1.0)), (sqrt(dot (_pos_88, _pos_88)) - 1.0)), (sqrt(dot (_pos_89, _pos_89)) - 1.0)), (sqrt(dot (_pos_90, _pos_90)) - 1.0)), (sqrt(dot (_pos_91, _pos_91)) - 1.0)), (sqrt(dot (_pos_92, _pos_92)) - 1.0))) / pow (2.0, tmpvar_84))); + ii_82 = (ii_82 + 1); + }; + float tmpvar_93; + tmpvar_93 = pow ((tmpvar_79 * (1.0 - occ_83)), 0.454545); + vec4 tmpvar_94; + tmpvar_94.w = 1.0; + tmpvar_94.x = tmpvar_93; + tmpvar_94.y = tmpvar_93; + tmpvar_94.z = tmpvar_93; + gl_FragColor = tmpvar_94; + gl_FragDepth = (tmpvar_23 / tmpvar_7); + } else { + gl_FragColor = v_color0; + gl_FragDepth = 1.0; + }; +} + + \ No newline at end of file diff --git a/examples/01-cubes/shaders/gles/vs_cubes.bin b/examples/runtime/shaders/gles/vs_cubes.bin similarity index 100% rename from examples/01-cubes/shaders/gles/vs_cubes.bin rename to examples/runtime/shaders/gles/vs_cubes.bin diff --git a/examples/runtime/shaders/gles/vs_mesh.bin b/examples/runtime/shaders/gles/vs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..d0530497316472bd13a7dab68b6c9aaaeaf479b5 GIT binary patch literal 1283 zcmb7EO>dh(5bb$?#Y(v>X|%y!{1KrXqg;B3RH;`)4LDl?>%yAEjq=|+v#>DO?x7dJ zZ+72%^Je55U1WK|pT8wf-`Szbce>T4=C6AHdf-KAQX8|Iyv}sN@9&3W>{#o`ZBza0V-YYY`sdN+NUV4|GF%kkxVF$W@ED!(D%CX?0sCNl=+IUNFqtf3K>Rm<lv4Xed*YDrk%5&{)^qUJ=j%* zT!G6+uS$DT@-!8w9VP#up|SN_e|zcLph6K5ity4D4n_h$`$0k{-Wmpj6e5)2`VPYJ zPsj|}pceVVD?-1LZy>Ocuq)$OR`UIXUI%XHhTdP3vum_>wx^S=enR^)c^S52Vs#`P z4xL~qeC~Eb)HYY#ZmzjaaHY?zO|~|{HK8pL+BzXfafbD=`1GAoKZ$t?lhk&Un(gTW z;e9}#qW#@ikr_K~h`RFwP{Z0s{o1cD2D+d&7vYtV03`cL)uBQb_N+p-z*YPo%QP~S I{$%XSUwylfivR!s literal 0 HcmV?d00001 diff --git a/examples/02-metaballs/shaders/gles/vs_metaballs.bin b/examples/runtime/shaders/gles/vs_metaballs.bin similarity index 100% rename from examples/02-metaballs/shaders/gles/vs_metaballs.bin rename to examples/runtime/shaders/gles/vs_metaballs.bin diff --git a/examples/runtime/shaders/gles/vs_raymarching.bin b/examples/runtime/shaders/gles/vs_raymarching.bin new file mode 100644 index 0000000000000000000000000000000000000000..a4f2dd24540da17fdb83b1186ff75154eaa14b6f GIT binary patch literal 393 zcmZ9Iy^g{#5QM4sDOREZ3V!a=MOU6^D3Fk@wM=Y>MTs{uPJlbzyR#$^1v>j1&+M$n z#RKaF+BKCNo{7|7QSjQB`)*EuTSUjFV?a6T{vD7iaT9s^U@k92!4SYo=@QwpD0RonZjhG z8hM;d;ScbhnqVv|DW+DbfaiIB#xGpWrNV$+uD?QufrxpbwvT+#CT}a_tWTWYqn?|! SG3}Ba?SG;b`dbSB0HYghAcO}1 literal 0 HcmV?d00001 diff --git a/examples/01-cubes/shaders/glsl/fs_cubes.bin b/examples/runtime/shaders/glsl/fs_cubes.bin similarity index 100% rename from examples/01-cubes/shaders/glsl/fs_cubes.bin rename to examples/runtime/shaders/glsl/fs_cubes.bin diff --git a/examples/runtime/shaders/glsl/fs_mesh.bin b/examples/runtime/shaders/glsl/fs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..eaf53d6b3b8975babb7dc53bd9c23c7c86588fb0 GIT binary patch literal 1209 zcmah|%TB{E5agV%Sc!`R#c~`cDXQRt#BW4V36-TLuF{e|5dY4uAH``ww31`3Ju|zL z$?ez@#nDXHmFx;3oL{^Jb`1^rd}g1Rzj9}6tndJgNiN{-j81>{S(?r! z^N>ZZlgT(LYDJ-5*Brnpg_c71D##QOq~M1=qG&jVqt1Zlot)DUo+{QV_z4e~?S%#Z zBs@QnZz&CO)d?E%%K&AhRuU!swz|i4tT6&;?;YgG3HLs0mR<0iDuP$^U~Fl&XTo3ByoAC!Fu z&aFrbL*+f1Xsy=u>(H!T=*#4XBVjjYPlkthRyOseUFXguPg~&#;iD#OlvL&Hw67bJ zC&^pE=Lm4@m?(_8=aHD|g4)9;1tr|_$CxUNptNS;4d0h4=ud#loy*f?Fp4uuE|RY# Gx%mbd*HN|r literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_metaballs.bin b/examples/runtime/shaders/glsl/fs_metaballs.bin new file mode 100644 index 0000000000000000000000000000000000000000..d5e35e888f8e578a47171bba756a56b5d7c498e7 GIT binary patch literal 319 zcmZ{e%?iRW5QIJFDF(c3w3gJyQ}HDD8YR?P0&P=bsekzHZdxjOkicel*q!;7L+LNp zwMeuQVle)0+X_QjXbgGbYUfq7A z^WqJ3ay@9ew~vx$FByf%lvJ!DjAfI=O0vv@3`SL*AHAs#fr!mIcLfoR-^@9BXxhfx j2tP$itUe?X>*;z%i;#wp2|+W0-h~&U|96t1UP3J17z 0.001)) { + tt_13 = (tt_13 + tmpvar_22); + }; + ii_12 = (ii_12 + 1); + }; + float tmpvar_23; + if ((tt_13 < tmpvar_7)) { + tmpvar_23 = tt_13; + } else { + tmpvar_23 = 0.0; + }; + if ((tmpvar_23 > 0.5)) { + vec3 tmpvar_24; + tmpvar_24 = (tmpvar_3 + (tmpvar_9 * tmpvar_23)); + vec3 _pos_25; + _pos_25 = (tmpvar_24 + vec3(0.002, 0.0, 0.0)); + vec3 tmpvar_26; + tmpvar_26 = max ((abs(_pos_25) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_27; + _pos_27 = (_pos_25 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_28; + _pos_28 = (_pos_25 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_29; + _pos_29 = (_pos_25 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_30; + _pos_30 = (_pos_25 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_31; + _pos_31 = (_pos_25 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_32; + _pos_32 = (_pos_25 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_33; + _pos_33 = (tmpvar_24 - vec3(0.002, 0.0, 0.0)); + vec3 tmpvar_34; + tmpvar_34 = max ((abs(_pos_33) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_35; + _pos_35 = (_pos_33 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_36; + _pos_36 = (_pos_33 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_37; + _pos_37 = (_pos_33 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_38; + _pos_38 = (_pos_33 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_39; + _pos_39 = (_pos_33 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_40; + _pos_40 = (_pos_33 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_41; + _pos_41 = (tmpvar_24 + vec3(0.0, 0.002, 0.0)); + vec3 tmpvar_42; + tmpvar_42 = max ((abs(_pos_41) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_43; + _pos_43 = (_pos_41 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_44; + _pos_44 = (_pos_41 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_45; + _pos_45 = (_pos_41 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_46; + _pos_46 = (_pos_41 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_47; + _pos_47 = (_pos_41 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_48; + _pos_48 = (_pos_41 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_49; + _pos_49 = (tmpvar_24 - vec3(0.0, 0.002, 0.0)); + vec3 tmpvar_50; + tmpvar_50 = max ((abs(_pos_49) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_51; + _pos_51 = (_pos_49 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_52; + _pos_52 = (_pos_49 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_53; + _pos_53 = (_pos_49 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_54; + _pos_54 = (_pos_49 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_55; + _pos_55 = (_pos_49 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_56; + _pos_56 = (_pos_49 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_57; + _pos_57 = (tmpvar_24 + vec3(0.0, 0.0, 0.002)); + vec3 tmpvar_58; + tmpvar_58 = max ((abs(_pos_57) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_59; + _pos_59 = (_pos_57 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_60; + _pos_60 = (_pos_57 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_61; + _pos_61 = (_pos_57 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_62; + _pos_62 = (_pos_57 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_63; + _pos_63 = (_pos_57 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_64; + _pos_64 = (_pos_57 + vec3(0.0, 0.0, -4.0)); + vec3 _pos_65; + _pos_65 = (tmpvar_24 - vec3(0.0, 0.0, 0.002)); + vec3 tmpvar_66; + tmpvar_66 = max ((abs(_pos_65) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_67; + _pos_67 = (_pos_65 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_68; + _pos_68 = (_pos_65 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_69; + _pos_69 = (_pos_65 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_70; + _pos_70 = (_pos_65 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_71; + _pos_71 = (_pos_65 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_72; + _pos_72 = (_pos_65 + vec3(0.0, 0.0, -4.0)); + vec3 tmpvar_73; + tmpvar_73.x = (min (min (min (min (min (min ((sqrt(dot (tmpvar_26, tmpvar_26)) - 0.5), (sqrt(dot (_pos_27, _pos_27)) - 1.0)), (sqrt(dot (_pos_28, _pos_28)) - 1.0)), (sqrt(dot (_pos_29, _pos_29)) - 1.0)), (sqrt(dot (_pos_30, _pos_30)) - 1.0)), (sqrt(dot (_pos_31, _pos_31)) - 1.0)), (sqrt(dot (_pos_32, _pos_32)) - 1.0)) - min (min (min (min (min (min ((sqrt(dot (tmpvar_34, tmpvar_34)) - 0.5), (sqrt(dot (_pos_35, _pos_35)) - 1.0)), (sqrt(dot (_pos_36, _pos_36)) - 1.0)), (sqrt(dot (_pos_37, _pos_37)) - 1.0)), (sqrt(dot (_pos_38, _pos_38)) - 1.0)), (sqrt(dot (_pos_39, _pos_39)) - 1.0)), (sqrt(dot (_pos_40, _pos_40)) - 1.0))); + tmpvar_73.y = (min (min (min (min (min (min ((sqrt(dot (tmpvar_42, tmpvar_42)) - 0.5), (sqrt(dot (_pos_43, _pos_43)) - 1.0)), (sqrt(dot (_pos_44, _pos_44)) - 1.0)), (sqrt(dot (_pos_45, _pos_45)) - 1.0)), (sqrt(dot (_pos_46, _pos_46)) - 1.0)), (sqrt(dot (_pos_47, _pos_47)) - 1.0)), (sqrt(dot (_pos_48, _pos_48)) - 1.0)) - min (min (min (min (min (min ((sqrt(dot (tmpvar_50, tmpvar_50)) - 0.5), (sqrt(dot (_pos_51, _pos_51)) - 1.0)), (sqrt(dot (_pos_52, _pos_52)) - 1.0)), (sqrt(dot (_pos_53, _pos_53)) - 1.0)), (sqrt(dot (_pos_54, _pos_54)) - 1.0)), (sqrt(dot (_pos_55, _pos_55)) - 1.0)), (sqrt(dot (_pos_56, _pos_56)) - 1.0))); + tmpvar_73.z = (min (min (min (min (min (min ((sqrt(dot (tmpvar_58, tmpvar_58)) - 0.5), (sqrt(dot (_pos_59, _pos_59)) - 1.0)), (sqrt(dot (_pos_60, _pos_60)) - 1.0)), (sqrt(dot (_pos_61, _pos_61)) - 1.0)), (sqrt(dot (_pos_62, _pos_62)) - 1.0)), (sqrt(dot (_pos_63, _pos_63)) - 1.0)), (sqrt(dot (_pos_64, _pos_64)) - 1.0)) - min (min (min (min (min (min ((sqrt(dot (tmpvar_66, tmpvar_66)) - 0.5), (sqrt(dot (_pos_67, _pos_67)) - 1.0)), (sqrt(dot (_pos_68, _pos_68)) - 1.0)), (sqrt(dot (_pos_69, _pos_69)) - 1.0)), (sqrt(dot (_pos_70, _pos_70)) - 1.0)), (sqrt(dot (_pos_71, _pos_71)) - 1.0)), (sqrt(dot (_pos_72, _pos_72)) - 1.0))); + vec3 tmpvar_74; + tmpvar_74 = normalize(tmpvar_73); + float tmpvar_75; + tmpvar_75 = dot (tmpvar_74, u_lightDir); + vec2 tmpvar_76; + tmpvar_76.x = tmpvar_75; + tmpvar_76.y = dot ((u_lightDir - ((2.0 * tmpvar_75) * tmpvar_74)), tmpvar_9); + float tmpvar_77; + tmpvar_77 = max (0.0, tmpvar_75); + vec4 tmpvar_78; + tmpvar_78.xw = vec2(1.0, 1.0); + tmpvar_78.y = tmpvar_77; + tmpvar_78.z = (float((tmpvar_75 >= 0.0)) * max (0.0, tmpvar_76.y)); + float tmpvar_79; + tmpvar_79 = ((0.9 * tmpvar_77) + (pow (tmpvar_78.z, 128.0) * max ((0.2 + (0.8 * pow ((1.0 - tmpvar_75), 5.0))), 0.0))); + vec3 _pos_80; + _pos_80 = tmpvar_24; + vec3 _normal_81; + _normal_81 = tmpvar_74; + int ii_82; + float occ_83; + occ_83 = 0.0; + ii_82 = 1; + for (int ii_82 = 1; ii_82 < 4; ) { + float tmpvar_84; + tmpvar_84 = float(ii_82); + vec3 _pos_85; + _pos_85 = (_pos_80 + ((_normal_81 * tmpvar_84) * 0.2)); + vec3 tmpvar_86; + tmpvar_86 = max ((abs(_pos_85) - vec3(2.5, 2.5, 2.5)), 0.0); + vec3 _pos_87; + _pos_87 = (_pos_85 + vec3(4.0, 0.0, 0.0)); + vec3 _pos_88; + _pos_88 = (_pos_85 + vec3(-4.0, 0.0, 0.0)); + vec3 _pos_89; + _pos_89 = (_pos_85 + vec3(0.0, 4.0, 0.0)); + vec3 _pos_90; + _pos_90 = (_pos_85 + vec3(0.0, -4.0, 0.0)); + vec3 _pos_91; + _pos_91 = (_pos_85 + vec3(0.0, 0.0, 4.0)); + vec3 _pos_92; + _pos_92 = (_pos_85 + vec3(0.0, 0.0, -4.0)); + occ_83 = (occ_83 + (((tmpvar_84 * 0.2) - min (min (min (min (min (min ((sqrt(dot (tmpvar_86, tmpvar_86)) - 0.5), (sqrt(dot (_pos_87, _pos_87)) - 1.0)), (sqrt(dot (_pos_88, _pos_88)) - 1.0)), (sqrt(dot (_pos_89, _pos_89)) - 1.0)), (sqrt(dot (_pos_90, _pos_90)) - 1.0)), (sqrt(dot (_pos_91, _pos_91)) - 1.0)), (sqrt(dot (_pos_92, _pos_92)) - 1.0))) / pow (2.0, tmpvar_84))); + ii_82 = (ii_82 + 1); + }; + float tmpvar_93; + tmpvar_93 = pow ((tmpvar_79 * (1.0 - occ_83)), 0.454545); + vec4 tmpvar_94; + tmpvar_94.w = 1.0; + tmpvar_94.x = tmpvar_93; + tmpvar_94.y = tmpvar_93; + tmpvar_94.z = tmpvar_93; + gl_FragColor = tmpvar_94; + gl_FragDepth = (tmpvar_23 / tmpvar_7); + } else { + gl_FragColor = v_color0; + gl_FragDepth = 1.0; + }; +} + + \ No newline at end of file diff --git a/examples/01-cubes/shaders/glsl/vs_cubes.bin b/examples/runtime/shaders/glsl/vs_cubes.bin similarity index 100% rename from examples/01-cubes/shaders/glsl/vs_cubes.bin rename to examples/runtime/shaders/glsl/vs_cubes.bin diff --git a/examples/runtime/shaders/glsl/vs_mesh.bin b/examples/runtime/shaders/glsl/vs_mesh.bin new file mode 100644 index 0000000000000000000000000000000000000000..1d181bb5d7d32f98289833c5b6a8a16efac878b7 GIT binary patch literal 1244 zcmb7E%Wi`(5bT++u+)obBg89^2<0Dg>J`z1M6Lj*;E>R&|K44|ut0j~1<0&DGdsJ= zbDfrzkOgym+c2($ILR_+r%Wb_U1KHkG#b!6Q9gjVJf_*3NN@X6e*9gHj5;YBQJh(w z9(-2E2bsyzp1>Z!1qdeD03?@;9zFc~`$Ao`o_80VEJIOj>M8LT^dVV-N*CVOSP3kDD$0MmpI+gf7HY(ZPme=Ot3Q2NI(o_+y=41>%7 literal 0 HcmV?d00001 diff --git a/examples/02-metaballs/shaders/glsl/vs_metaballs.bin b/examples/runtime/shaders/glsl/vs_metaballs.bin similarity index 100% rename from examples/02-metaballs/shaders/glsl/vs_metaballs.bin rename to examples/runtime/shaders/glsl/vs_metaballs.bin diff --git a/examples/runtime/shaders/glsl/vs_raymarching.bin b/examples/runtime/shaders/glsl/vs_raymarching.bin new file mode 100644 index 0000000000000000000000000000000000000000..a176305c3249217e5d527740cbe01e8a865e04bd GIT binary patch literal 354 zcmZ9I%?^Sv5QIJVDK_zf9tdb}#CPE2wW&}^4RlE%b|&+6rpHFvN~3|0 z2aMH5KhYLYNXMZT1*R&$Yt_aUUlD7h?X}6EQON}w;Z&C(+BDcWoSX!6v?NRCtbWu^ zO%b_{Y&;Hf3hgpi(o3wgqlWYf>XfQ!1Kx>!7z|Vnt|+OP2qO~av){rELZ2$Ew61@X mx&{JdxrqOK^1R(-I4{K0fSQ+$m~rH!E // uint32_t -#include // size_t - -#define BGFX_STATE_DEPTH_WRITE UINT64_C(0x0000000000000001) - -#define BGFX_STATE_ALPHA_TEST UINT64_C(0x0000000000000004) -#define BGFX_STATE_ALPHA_WRITE UINT64_C(0x0000000000000008) -#define BGFX_STATE_ALPHA_MASK UINT64_C(0x000000000000000c) - -#define BGFX_STATE_DEPTH_TEST_LESS UINT64_C(0x0000000000000010) -#define BGFX_STATE_DEPTH_TEST_LEQUAL UINT64_C(0x0000000000000020) -#define BGFX_STATE_DEPTH_TEST_EQUAL UINT64_C(0x0000000000000030) -#define BGFX_STATE_DEPTH_TEST_GEQUAL UINT64_C(0x0000000000000040) -#define BGFX_STATE_DEPTH_TEST_GREATER UINT64_C(0x0000000000000050) -#define BGFX_STATE_DEPTH_TEST_NOTEQUAL UINT64_C(0x0000000000000060) -#define BGFX_STATE_DEPTH_TEST_NEVER UINT64_C(0x0000000000000070) -#define BGFX_STATE_DEPTH_TEST_ALWAYS UINT64_C(0x0000000000000080) -#define BGFX_STATE_DEPTH_TEST_SHIFT 4 -#define BGFX_STATE_DEPTH_TEST_MASK UINT64_C(0x00000000000000f0) - -#define BGFX_STATE_ALPHA_TEST_LESS UINT64_C(0x0000000000000100) -#define BGFX_STATE_ALPHA_TEST_LEQUAL UINT64_C(0x0000000000000200) -#define BGFX_STATE_ALPHA_TEST_EQUAL UINT64_C(0x0000000000000300) -#define BGFX_STATE_ALPHA_TEST_GEQUAL UINT64_C(0x0000000000000400) -#define BGFX_STATE_ALPHA_TEST_GREATER UINT64_C(0x0000000000000500) -#define BGFX_STATE_ALPHA_TEST_NOTEQUAL UINT64_C(0x0000000000000600) -#define BGFX_STATE_ALPHA_TEST_NEVER UINT64_C(0x0000000000000700) -#define BGFX_STATE_ALPHA_TEST_ALWAYS UINT64_C(0x0000000000000800) -#define BGFX_STATE_ALPHA_TEST_SHIFT 8 -#define BGFX_STATE_ALPHA_TEST_MASK UINT64_C(0x0000000000000f00) - -#define BGFX_STATE_BLEND_ZERO UINT64_C(0x0000000000001000) -#define BGFX_STATE_BLEND_ONE UINT64_C(0x0000000000002000) -#define BGFX_STATE_BLEND_SRC_COLOR UINT64_C(0x0000000000003000) -#define BGFX_STATE_BLEND_INV_SRC_COLOR UINT64_C(0x0000000000004000) -#define BGFX_STATE_BLEND_SRC_ALPHA UINT64_C(0x0000000000005000) -#define BGFX_STATE_BLEND_INV_SRC_ALPHA UINT64_C(0x0000000000006000) -#define BGFX_STATE_BLEND_DST_ALPHA UINT64_C(0x0000000000007000) -#define BGFX_STATE_BLEND_INV_DST_ALPHA UINT64_C(0x0000000000008000) -#define BGFX_STATE_BLEND_DST_COLOR UINT64_C(0x0000000000009000) -#define BGFX_STATE_BLEND_INV_DST_COLOR UINT64_C(0x000000000000a000) -#define BGFX_STATE_BLEND_SRC_ALPHA_SAT UINT64_C(0x000000000000b000) -#define BGFX_STATE_BLEND_SHIFT 12 -#define BGFX_STATE_BLEND_MASK UINT64_C(0x000000000ffff000) - -#define BGFX_STATE_CULL_CW UINT64_C(0x0000000010000000) -#define BGFX_STATE_CULL_CCW UINT64_C(0x0000000020000000) -#define BGFX_STATE_CULL_SHIFT 28 -#define BGFX_STATE_CULL_MASK UINT64_C(0x0000000030000000) - -#define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000040000000) - -#define BGFX_STATE_ALPHA_REF_SHIFT 32 -#define BGFX_STATE_ALPHA_REF_MASK UINT64_C(0x000000ff00000000) - -#define BGFX_STATE_PT_LINES UINT64_C(0x0000010000000000) -#define BGFX_STATE_PT_POINTS UINT64_C(0x0000020000000000) -#define BGFX_STATE_PT_SHIFT 40 -#define BGFX_STATE_PT_MASK UINT64_C(0x0000030000000000) - -#define BGFX_STATE_POINT_SIZE_SHIFT 44 -#define BGFX_STATE_POINT_SIZE_MASK UINT64_C(0x000ff00000000000) - -#define BGFX_STATE_SRGBWRITE UINT64_C(0x0010000000000000) -#define BGFX_STATE_MSAA UINT64_C(0x0020000000000000) - -#define BGFX_STATE_RESERVED UINT64_C(0xff00000000000000) - -#define BGFX_STATE_NONE UINT64_C(0x0000000000000000) -#define BGFX_STATE_MASK UINT64_C(0xffffffffffffffff) -#define BGFX_STATE_DEFAULT (0 \ - | BGFX_STATE_RGB_WRITE \ - | BGFX_STATE_ALPHA_WRITE \ - | BGFX_STATE_DEPTH_TEST_LESS \ - | BGFX_STATE_DEPTH_WRITE \ - | BGFX_STATE_CULL_CW \ - | BGFX_STATE_MSAA \ - ) - -#define BGFX_CLEAR_NONE UINT8_C(0x00) -#define BGFX_CLEAR_COLOR_BIT UINT8_C(0x01) -#define BGFX_CLEAR_DEPTH_BIT UINT8_C(0x02) -#define BGFX_CLEAR_STENCIL_BIT UINT8_C(0x04) - -#define BGFX_DEBUG_NONE UINT32_C(0x00000000) -#define BGFX_DEBUG_WIREFRAME UINT32_C(0x00000001) -#define BGFX_DEBUG_IFH UINT32_C(0x00000002) -#define BGFX_DEBUG_STATS UINT32_C(0x00000004) -#define BGFX_DEBUG_TEXT UINT32_C(0x00000008) - -#define BGFX_TEXTURE_NONE UINT32_C(0x00000000) -#define BGFX_TEXTURE_U_REPEAT UINT32_C(0x00000000) -#define BGFX_TEXTURE_U_MIRROR UINT32_C(0x00000001) -#define BGFX_TEXTURE_U_CLAMP UINT32_C(0x00000002) -#define BGFX_TEXTURE_U_SHIFT 0 -#define BGFX_TEXTURE_U_MASK UINT32_C(0x00000003) -#define BGFX_TEXTURE_V_REPEAT UINT32_C(0x00000000) -#define BGFX_TEXTURE_V_MIRROR UINT32_C(0x00000010) -#define BGFX_TEXTURE_V_CLAMP UINT32_C(0x00000020) -#define BGFX_TEXTURE_V_SHIFT 4 -#define BGFX_TEXTURE_V_MASK UINT32_C(0x00000030) -#define BGFX_TEXTURE_W_REPEAT UINT32_C(0x00000000) -#define BGFX_TEXTURE_W_MIRROR UINT32_C(0x00000100) -#define BGFX_TEXTURE_W_CLAMP UINT32_C(0x00000200) -#define BGFX_TEXTURE_W_SHIFT 8 -#define BGFX_TEXTURE_W_MASK UINT32_C(0x00000300) -#define BGFX_TEXTURE_MIN_POINT UINT32_C(0x00001000) -#define BGFX_TEXTURE_MIN_SHIFT 12 -#define BGFX_TEXTURE_MIN_MASK UINT32_C(0x00001000) -#define BGFX_TEXTURE_MAG_POINT UINT32_C(0x00010000) -#define BGFX_TEXTURE_MAG_SHIFT 16 -#define BGFX_TEXTURE_MAG_MASK UINT32_C(0x00010000) -#define BGFX_TEXTURE_MIP_POINT UINT32_C(0x00100000) -#define BGFX_TEXTURE_MIP_SHIFT 20 -#define BGFX_TEXTURE_MIP_MASK UINT32_C(0x00100000) -#define BGFX_TEXTURE_SRGB UINT32_C(0x00200000) - -#define BGFX_RENDER_TARGET_NONE UINT32_C(0x00000000) -#define BGFX_RENDER_TARGET_COLOR_RGBA UINT32_C(0x00000001) -#define BGFX_RENDER_TARGET_COLOR_R32F UINT32_C(0x00000002) -#define BGFX_RENDER_TARGET_COLOR_SHIFT 0 -#define BGFX_RENDER_TARGET_COLOR_MASK UINT32_C(0x000000ff) -#define BGFX_RENDER_TARGET_DEPTH UINT32_C(0x00000100) -#define BGFX_RENDER_TARGET_DEPTH_SHIFT 8 -#define BGFX_RENDER_TARGET_DEPTH_MASK UINT32_C(0x0000ff00) -#define BGFX_RENDER_TARGET_MSAA_X2 UINT32_C(0x00010000) -#define BGFX_RENDER_TARGET_MSAA_X4 UINT32_C(0x00020000) -#define BGFX_RENDER_TARGET_MSAA_X8 UINT32_C(0x00030000) -#define BGFX_RENDER_TARGET_MSAA_X16 UINT32_C(0x00040000) -#define BGFX_RENDER_TARGET_MSAA_SHIFT 16 -#define BGFX_RENDER_TARGET_MSAA_MASK UINT32_C(0x00070000) -#define BGFX_RENDER_TARGET_SRGBWRITE UINT32_C(0x00080000) - -#define BGFX_RESET_NONE UINT32_C(0x00000000) -#define BGFX_RESET_FULLSCREEN UINT32_C(0x00000001) -#define BGFX_RESET_FULLSCREEN_FAKE UINT32_C(0x00000002) -#define BGFX_RESET_FULLSCREEN_SHIFT 0 -#define BGFX_RESET_FULLSCREEN_MASK UINT32_C(0x00000003) -#define BGFX_RESET_MSAA_X2 UINT32_C(0x00000010) -#define BGFX_RESET_MSAA_X4 UINT32_C(0x00000020) -#define BGFX_RESET_MSAA_X8 UINT32_C(0x00000030) -#define BGFX_RESET_MSAA_X16 UINT32_C(0x00000040) -#define BGFX_RESET_MSAA_SHIFT 4 -#define BGFX_RESET_MSAA_MASK UINT32_C(0x00000070) -#define BGFX_RESET_VSYNC UINT32_C(0x00000080) - -#define BGFX_INVALID_HANDLE { bgfx::invalidHandle } - -namespace bgfx -{ - struct Fatal - { - enum Enum - { - MinimumRequiredSpecs = 1, - D3D9_UnableToCreateInterface, - D3D9_UnableToCreateDevice, - D3D9_UnableToCreateRenderTarget, - D3D9_UnableToCreateTexture, - D3D11_UnableToInitialize, - OPENGL_UnableToCreateContext, - }; - }; - - struct RendererType - { - enum Enum - { - Null = 0, - Direct3D9, - Direct3D11, - OpenGLES2, - OpenGL, - }; - }; - - struct Attrib - { - enum Enum - { - Position = 0, - Normal, - Color0, - Color1, - Indices, - Weight, - TexCoord0, - TexCoord1, - TexCoord2, - TexCoord3, - TexCoord4, - TexCoord5, - TexCoord6, - TexCoord7, - - Count, - }; - }; - - struct AttribType - { - enum Enum - { - Uint8, - Uint16, - Float, - - Count, - }; - }; - - struct TextureFormat - { - enum Enum - { - Dxt1, - Dxt3, - Dxt5, - Unknown, - L8, - XRGB8, - ARGB8, - ABGR16, - - Count - }; - }; - - static const uint16_t invalidHandle = 0xffff; - - typedef struct { uint16_t idx; } DynamicIndexBufferHandle; - typedef struct { uint16_t idx; } DynamicVertexBufferHandle; - typedef struct { uint16_t idx; } FragmentShaderHandle; - typedef struct { uint16_t idx; } IndexBufferHandle; - typedef struct { uint16_t idx; } ProgramHandle; - typedef struct { uint16_t idx; } RenderTargetHandle; - typedef struct { uint16_t idx; } TextureHandle; - typedef struct { uint16_t idx; } UniformHandle; - typedef struct { uint16_t idx; } VertexBufferHandle; - typedef struct { uint16_t idx; } VertexDeclHandle; - typedef struct { uint16_t idx; } VertexShaderHandle; - - struct Memory - { - uint8_t* data; - uint32_t size; - }; - - struct TransientIndexBuffer - { - uint8_t* data; - uint32_t size; - IndexBufferHandle handle; - uint32_t startIndex; - }; - - struct TransientVertexBuffer - { - uint8_t* data; - uint32_t size; - uint32_t startVertex; - uint16_t stride; - VertexBufferHandle handle; - VertexDeclHandle decl; - }; - - struct InstanceDataBuffer - { - uint8_t* data; - uint32_t size; - uint32_t offset; - uint16_t stride; - uint16_t num; - VertexBufferHandle handle; - }; - - struct ConstantType - { - enum Enum - { - Uniform1i, - Uniform1f, - End, - - Uniform1iv, - Uniform1fv, - Uniform2fv, - Uniform3fv, - Uniform4fv, - Uniform3x3fv, - Uniform4x4fv, - - Count - }; - }; - - typedef void (*FatalFn)(Fatal::Enum _code, const char* _str); - typedef void* (*ReallocFn)(void* _ptr, size_t _size); - typedef void (*FreeFn)(void* _ptr); - typedef void (*CacheFn)(uint64_t _id, bool _store, void* _data, uint32_t& _length); - - struct VertexDecl - { - void begin(); - void end(); - void add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized = false); - void decode(Attrib::Enum _attrib, uint8_t& _num, AttribType::Enum& _type, bool& _normalized) const; - - uint32_t m_hash; - uint16_t m_stride; - uint16_t m_offset[Attrib::Count]; - uint8_t m_attributes[Attrib::Count]; - }; - - /// - RendererType::Enum getRendererType(); - - /// - void init(bool _createRenderThread = true, FatalFn _fatal = NULL, ReallocFn _realloc = NULL, FreeFn _free = NULL, CacheFn _cache = NULL); - - /// - void shutdown(); - - /// - void reset(uint32_t _width, uint32_t _height, uint32_t _flags = BGFX_RESET_NONE); - - /// - void frame(); - - /// - const Memory* alloc(uint32_t _size); - - /// - const Memory* makeRef(const void* _data, uint32_t _size); - - /// - void setDebug(uint32_t _debug); - - /// - void dbgTextClear(uint8_t _attr = 0, bool _small = false); - - /// - void dbgTextPrintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...); - - /// - IndexBufferHandle createIndexBuffer(const Memory* _mem); - - /// - void destroyIndexBuffer(IndexBufferHandle _handle); - - /// - VertexBufferHandle createVertexBuffer(const Memory* _mem, const VertexDecl& _decl); - - /// - void destroyVertexBuffer(VertexBufferHandle _handle); - - /// - DynamicIndexBufferHandle createDynamicIndexBuffer(uint16_t _num); - - /// - DynamicIndexBufferHandle createDynamicIndexBuffer(const Memory* _mem); - - /// - void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, const Memory* _mem); - - /// - void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle); - - /// - DynamicVertexBufferHandle createDynamicVertexBuffer(uint16_t _num, const VertexDecl& _decl); - - /// - DynamicVertexBufferHandle createDynamicVertexBuffer(const Memory* _mem, const VertexDecl& _decl); - - /// - void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem); - - /// - void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle); - - /// - bool checkAvailTransientIndexBuffer(uint16_t _num); - - /// - const TransientIndexBuffer* allocTransientIndexBuffer(uint16_t _num); - - /// - bool checkAvailTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl); - - /// - const TransientVertexBuffer* allocTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl); - - /// - const InstanceDataBuffer* allocInstanceDataBuffer(uint16_t _num, uint16_t _stride); - - /// - VertexShaderHandle createVertexShader(const Memory* _mem); - - /// - void destroyVertexShader(VertexShaderHandle _handle); - - /// - FragmentShaderHandle createFragmentShader(const Memory* _mem); - - /// - void destroyFragmentShader(FragmentShaderHandle _handle); - - /// - ProgramHandle createProgram(VertexShaderHandle _vsh, FragmentShaderHandle _fsh); - - /// - void destroyProgram(ProgramHandle _handle); - - /// - TextureHandle createTexture(const Memory* _mem, uint32_t _flags = BGFX_TEXTURE_NONE, uint16_t* _width = NULL, uint16_t* _height = NULL); - - /// +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#ifndef __BGFX_H__ +#define __BGFX_H__ + +#include // uint32_t +#include // size_t + +#define BGFX_STATE_DEPTH_WRITE UINT64_C(0x0000000000000001) + +#define BGFX_STATE_ALPHA_TEST UINT64_C(0x0000000000000004) +#define BGFX_STATE_ALPHA_WRITE UINT64_C(0x0000000000000008) +#define BGFX_STATE_ALPHA_MASK UINT64_C(0x000000000000000c) + +#define BGFX_STATE_DEPTH_TEST_LESS UINT64_C(0x0000000000000010) +#define BGFX_STATE_DEPTH_TEST_LEQUAL UINT64_C(0x0000000000000020) +#define BGFX_STATE_DEPTH_TEST_EQUAL UINT64_C(0x0000000000000030) +#define BGFX_STATE_DEPTH_TEST_GEQUAL UINT64_C(0x0000000000000040) +#define BGFX_STATE_DEPTH_TEST_GREATER UINT64_C(0x0000000000000050) +#define BGFX_STATE_DEPTH_TEST_NOTEQUAL UINT64_C(0x0000000000000060) +#define BGFX_STATE_DEPTH_TEST_NEVER UINT64_C(0x0000000000000070) +#define BGFX_STATE_DEPTH_TEST_ALWAYS UINT64_C(0x0000000000000080) +#define BGFX_STATE_DEPTH_TEST_SHIFT 4 +#define BGFX_STATE_DEPTH_TEST_MASK UINT64_C(0x00000000000000f0) + +#define BGFX_STATE_ALPHA_TEST_LESS UINT64_C(0x0000000000000100) +#define BGFX_STATE_ALPHA_TEST_LEQUAL UINT64_C(0x0000000000000200) +#define BGFX_STATE_ALPHA_TEST_EQUAL UINT64_C(0x0000000000000300) +#define BGFX_STATE_ALPHA_TEST_GEQUAL UINT64_C(0x0000000000000400) +#define BGFX_STATE_ALPHA_TEST_GREATER UINT64_C(0x0000000000000500) +#define BGFX_STATE_ALPHA_TEST_NOTEQUAL UINT64_C(0x0000000000000600) +#define BGFX_STATE_ALPHA_TEST_NEVER UINT64_C(0x0000000000000700) +#define BGFX_STATE_ALPHA_TEST_ALWAYS UINT64_C(0x0000000000000800) +#define BGFX_STATE_ALPHA_TEST_SHIFT 8 +#define BGFX_STATE_ALPHA_TEST_MASK UINT64_C(0x0000000000000f00) + +#define BGFX_STATE_BLEND_ZERO UINT64_C(0x0000000000001000) +#define BGFX_STATE_BLEND_ONE UINT64_C(0x0000000000002000) +#define BGFX_STATE_BLEND_SRC_COLOR UINT64_C(0x0000000000003000) +#define BGFX_STATE_BLEND_INV_SRC_COLOR UINT64_C(0x0000000000004000) +#define BGFX_STATE_BLEND_SRC_ALPHA UINT64_C(0x0000000000005000) +#define BGFX_STATE_BLEND_INV_SRC_ALPHA UINT64_C(0x0000000000006000) +#define BGFX_STATE_BLEND_DST_ALPHA UINT64_C(0x0000000000007000) +#define BGFX_STATE_BLEND_INV_DST_ALPHA UINT64_C(0x0000000000008000) +#define BGFX_STATE_BLEND_DST_COLOR UINT64_C(0x0000000000009000) +#define BGFX_STATE_BLEND_INV_DST_COLOR UINT64_C(0x000000000000a000) +#define BGFX_STATE_BLEND_SRC_ALPHA_SAT UINT64_C(0x000000000000b000) +#define BGFX_STATE_BLEND_SHIFT 12 +#define BGFX_STATE_BLEND_MASK UINT64_C(0x000000000ffff000) + +#define BGFX_STATE_CULL_CW UINT64_C(0x0000000010000000) +#define BGFX_STATE_CULL_CCW UINT64_C(0x0000000020000000) +#define BGFX_STATE_CULL_SHIFT 28 +#define BGFX_STATE_CULL_MASK UINT64_C(0x0000000030000000) + +#define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000040000000) + +#define BGFX_STATE_ALPHA_REF_SHIFT 32 +#define BGFX_STATE_ALPHA_REF_MASK UINT64_C(0x000000ff00000000) + +#define BGFX_STATE_PT_LINES UINT64_C(0x0000010000000000) +#define BGFX_STATE_PT_POINTS UINT64_C(0x0000020000000000) +#define BGFX_STATE_PT_SHIFT 40 +#define BGFX_STATE_PT_MASK UINT64_C(0x0000030000000000) + +#define BGFX_STATE_POINT_SIZE_SHIFT 44 +#define BGFX_STATE_POINT_SIZE_MASK UINT64_C(0x000ff00000000000) + +#define BGFX_STATE_SRGBWRITE UINT64_C(0x0010000000000000) +#define BGFX_STATE_MSAA UINT64_C(0x0020000000000000) + +#define BGFX_STATE_RESERVED UINT64_C(0xff00000000000000) + +#define BGFX_STATE_NONE UINT64_C(0x0000000000000000) +#define BGFX_STATE_MASK UINT64_C(0xffffffffffffffff) +#define BGFX_STATE_DEFAULT (0 \ + | BGFX_STATE_RGB_WRITE \ + | BGFX_STATE_ALPHA_WRITE \ + | BGFX_STATE_DEPTH_TEST_LESS \ + | BGFX_STATE_DEPTH_WRITE \ + | BGFX_STATE_CULL_CW \ + | BGFX_STATE_MSAA \ + ) + +#define BGFX_CLEAR_NONE UINT8_C(0x00) +#define BGFX_CLEAR_COLOR_BIT UINT8_C(0x01) +#define BGFX_CLEAR_DEPTH_BIT UINT8_C(0x02) +#define BGFX_CLEAR_STENCIL_BIT UINT8_C(0x04) + +#define BGFX_DEBUG_NONE UINT32_C(0x00000000) +#define BGFX_DEBUG_WIREFRAME UINT32_C(0x00000001) +#define BGFX_DEBUG_IFH UINT32_C(0x00000002) +#define BGFX_DEBUG_STATS UINT32_C(0x00000004) +#define BGFX_DEBUG_TEXT UINT32_C(0x00000008) + +#define BGFX_TEXTURE_NONE UINT32_C(0x00000000) +#define BGFX_TEXTURE_U_REPEAT UINT32_C(0x00000000) +#define BGFX_TEXTURE_U_MIRROR UINT32_C(0x00000001) +#define BGFX_TEXTURE_U_CLAMP UINT32_C(0x00000002) +#define BGFX_TEXTURE_U_SHIFT 0 +#define BGFX_TEXTURE_U_MASK UINT32_C(0x00000003) +#define BGFX_TEXTURE_V_REPEAT UINT32_C(0x00000000) +#define BGFX_TEXTURE_V_MIRROR UINT32_C(0x00000010) +#define BGFX_TEXTURE_V_CLAMP UINT32_C(0x00000020) +#define BGFX_TEXTURE_V_SHIFT 4 +#define BGFX_TEXTURE_V_MASK UINT32_C(0x00000030) +#define BGFX_TEXTURE_W_REPEAT UINT32_C(0x00000000) +#define BGFX_TEXTURE_W_MIRROR UINT32_C(0x00000100) +#define BGFX_TEXTURE_W_CLAMP UINT32_C(0x00000200) +#define BGFX_TEXTURE_W_SHIFT 8 +#define BGFX_TEXTURE_W_MASK UINT32_C(0x00000300) +#define BGFX_TEXTURE_MIN_POINT UINT32_C(0x00001000) +#define BGFX_TEXTURE_MIN_SHIFT 12 +#define BGFX_TEXTURE_MIN_MASK UINT32_C(0x00001000) +#define BGFX_TEXTURE_MAG_POINT UINT32_C(0x00010000) +#define BGFX_TEXTURE_MAG_SHIFT 16 +#define BGFX_TEXTURE_MAG_MASK UINT32_C(0x00010000) +#define BGFX_TEXTURE_MIP_POINT UINT32_C(0x00100000) +#define BGFX_TEXTURE_MIP_SHIFT 20 +#define BGFX_TEXTURE_MIP_MASK UINT32_C(0x00100000) +#define BGFX_TEXTURE_SRGB UINT32_C(0x00200000) + +#define BGFX_RENDER_TARGET_NONE UINT32_C(0x00000000) +#define BGFX_RENDER_TARGET_COLOR_RGBA UINT32_C(0x00000001) +#define BGFX_RENDER_TARGET_COLOR_R32F UINT32_C(0x00000002) +#define BGFX_RENDER_TARGET_COLOR_SHIFT 0 +#define BGFX_RENDER_TARGET_COLOR_MASK UINT32_C(0x000000ff) +#define BGFX_RENDER_TARGET_DEPTH UINT32_C(0x00000100) +#define BGFX_RENDER_TARGET_DEPTH_SHIFT 8 +#define BGFX_RENDER_TARGET_DEPTH_MASK UINT32_C(0x0000ff00) +#define BGFX_RENDER_TARGET_MSAA_X2 UINT32_C(0x00010000) +#define BGFX_RENDER_TARGET_MSAA_X4 UINT32_C(0x00020000) +#define BGFX_RENDER_TARGET_MSAA_X8 UINT32_C(0x00030000) +#define BGFX_RENDER_TARGET_MSAA_X16 UINT32_C(0x00040000) +#define BGFX_RENDER_TARGET_MSAA_SHIFT 16 +#define BGFX_RENDER_TARGET_MSAA_MASK UINT32_C(0x00070000) +#define BGFX_RENDER_TARGET_SRGBWRITE UINT32_C(0x00080000) + +#define BGFX_RESET_NONE UINT32_C(0x00000000) +#define BGFX_RESET_FULLSCREEN UINT32_C(0x00000001) +#define BGFX_RESET_FULLSCREEN_FAKE UINT32_C(0x00000002) +#define BGFX_RESET_FULLSCREEN_SHIFT 0 +#define BGFX_RESET_FULLSCREEN_MASK UINT32_C(0x00000003) +#define BGFX_RESET_MSAA_X2 UINT32_C(0x00000010) +#define BGFX_RESET_MSAA_X4 UINT32_C(0x00000020) +#define BGFX_RESET_MSAA_X8 UINT32_C(0x00000030) +#define BGFX_RESET_MSAA_X16 UINT32_C(0x00000040) +#define BGFX_RESET_MSAA_SHIFT 4 +#define BGFX_RESET_MSAA_MASK UINT32_C(0x00000070) +#define BGFX_RESET_VSYNC UINT32_C(0x00000080) + +#define BGFX_INVALID_HANDLE { bgfx::invalidHandle } + +namespace bgfx +{ + struct Fatal + { + enum Enum + { + MinimumRequiredSpecs = 1, + D3D9_UnableToCreateInterface, + D3D9_UnableToCreateDevice, + D3D9_UnableToCreateRenderTarget, + D3D9_UnableToCreateTexture, + D3D11_UnableToInitialize, + OPENGL_UnableToCreateContext, + }; + }; + + struct RendererType + { + enum Enum + { + Null = 0, + Direct3D9, + Direct3D11, + OpenGLES2, + OpenGL, + }; + }; + + struct Attrib + { + enum Enum + { + Position = 0, + Normal, + Color0, + Color1, + Indices, + Weight, + TexCoord0, + TexCoord1, + TexCoord2, + TexCoord3, + TexCoord4, + TexCoord5, + TexCoord6, + TexCoord7, + + Count, + }; + }; + + struct AttribType + { + enum Enum + { + Uint8, + Uint16, + Float, + + Count, + }; + }; + + struct TextureFormat + { + enum Enum + { + Dxt1, + Dxt3, + Dxt5, + Unknown, + L8, + XRGB8, + ARGB8, + ABGR16, + + Count + }; + }; + + static const uint16_t invalidHandle = 0xffff; + + typedef struct { uint16_t idx; } DynamicIndexBufferHandle; + typedef struct { uint16_t idx; } DynamicVertexBufferHandle; + typedef struct { uint16_t idx; } FragmentShaderHandle; + typedef struct { uint16_t idx; } IndexBufferHandle; + typedef struct { uint16_t idx; } ProgramHandle; + typedef struct { uint16_t idx; } RenderTargetHandle; + typedef struct { uint16_t idx; } TextureHandle; + typedef struct { uint16_t idx; } UniformHandle; + typedef struct { uint16_t idx; } VertexBufferHandle; + typedef struct { uint16_t idx; } VertexDeclHandle; + typedef struct { uint16_t idx; } VertexShaderHandle; + + struct Memory + { + uint8_t* data; + uint32_t size; + }; + + struct TransientIndexBuffer + { + uint8_t* data; + uint32_t size; + IndexBufferHandle handle; + uint32_t startIndex; + }; + + struct TransientVertexBuffer + { + uint8_t* data; + uint32_t size; + uint32_t startVertex; + uint16_t stride; + VertexBufferHandle handle; + VertexDeclHandle decl; + }; + + struct InstanceDataBuffer + { + uint8_t* data; + uint32_t size; + uint32_t offset; + uint16_t stride; + uint16_t num; + VertexBufferHandle handle; + }; + + struct ConstantType + { + enum Enum + { + Uniform1i, + Uniform1f, + End, + + Uniform1iv, + Uniform1fv, + Uniform2fv, + Uniform3fv, + Uniform4fv, + Uniform3x3fv, + Uniform4x4fv, + + Count + }; + }; + + typedef void (*FatalFn)(Fatal::Enum _code, const char* _str); + typedef void* (*ReallocFn)(void* _ptr, size_t _size); + typedef void (*FreeFn)(void* _ptr); + typedef void (*CacheFn)(uint64_t _id, bool _store, void* _data, uint32_t& _length); + + struct VertexDecl + { + void begin(); + void end(); + void add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized = false); + void decode(Attrib::Enum _attrib, uint8_t& _num, AttribType::Enum& _type, bool& _normalized) const; + bool has(Attrib::Enum _attrib) const; + uint16_t getOffset(Attrib::Enum _attrib) const; + + uint32_t m_hash; + uint16_t m_stride; + uint16_t m_offset[Attrib::Count]; + uint8_t m_attributes[Attrib::Count]; + }; + + /// Returns renderer backend API type. + RendererType::Enum getRendererType(); + + /// + void init(bool _createRenderThread = true, FatalFn _fatal = NULL, ReallocFn _realloc = NULL, FreeFn _free = NULL, CacheFn _cache = NULL); + + /// + void shutdown(); + + /// + void reset(uint32_t _width, uint32_t _height, uint32_t _flags = BGFX_RESET_NONE); + + /// Advance to next frame. When using multithreaded renderer, this call + /// just swaps internal buffers, kicks render thread, and returns. In + /// singlethreaded renderer this call does frame rendering. + void frame(); + + /// Allocate buffer to pass to bgfx calls. Data will be freed inside bgfx. + const Memory* alloc(uint32_t _size); + + /// Make reference to data to pass to bgfx. Unlike bgfx::alloc this call + /// doesn't allocate memory for data. It just copies pointer to data. + /// You must make sure data is available for at least 2 bgfx::frame calls. + const Memory* makeRef(const void* _data, uint32_t _size); + + /// Set debug flags. + /// + /// Available flags: + /// + /// BGFX_DEBUG_IFH - Infinitely fast hardware. When this flag is set + /// all rendering calls will be skipped. It's useful for quickly + /// assessing bottleneck between CPU and GPU. + /// + /// BGFX_DEBUG_STATS - Display internal statistics. + /// + /// BGFX_DEBUG_TEXT - Display debug text. + /// + /// BGFX_DEBUG_WIREFRAME - Wireframe rendering. All rendering + /// primitives will be rendered as lines. + /// + void setDebug(uint32_t _debug); + + /// + void dbgTextClear(uint8_t _attr = 0, bool _small = false); + + /// + void dbgTextPrintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...); + + /// + IndexBufferHandle createIndexBuffer(const Memory* _mem); + + /// + void destroyIndexBuffer(IndexBufferHandle _handle); + + /// + VertexBufferHandle createVertexBuffer(const Memory* _mem, const VertexDecl& _decl); + + /// + void destroyVertexBuffer(VertexBufferHandle _handle); + + /// + DynamicIndexBufferHandle createDynamicIndexBuffer(uint16_t _num); + + /// + DynamicIndexBufferHandle createDynamicIndexBuffer(const Memory* _mem); + + /// + void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, const Memory* _mem); + + /// + void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle); + + /// + DynamicVertexBufferHandle createDynamicVertexBuffer(uint16_t _num, const VertexDecl& _decl); + + /// + DynamicVertexBufferHandle createDynamicVertexBuffer(const Memory* _mem, const VertexDecl& _decl); + + /// + void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem); + + /// + void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle); + + /// + bool checkAvailTransientIndexBuffer(uint16_t _num); + + /// + const TransientIndexBuffer* allocTransientIndexBuffer(uint16_t _num); + + /// + bool checkAvailTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl); + + /// + const TransientVertexBuffer* allocTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl); + + /// + const InstanceDataBuffer* allocInstanceDataBuffer(uint16_t _num, uint16_t _stride); + + /// + VertexShaderHandle createVertexShader(const Memory* _mem); + + /// + void destroyVertexShader(VertexShaderHandle _handle); + + /// + FragmentShaderHandle createFragmentShader(const Memory* _mem); + + /// + void destroyFragmentShader(FragmentShaderHandle _handle); + + /// + ProgramHandle createProgram(VertexShaderHandle _vsh, FragmentShaderHandle _fsh); + + /// + void destroyProgram(ProgramHandle _handle); + + /// + TextureHandle createTexture(const Memory* _mem, uint32_t _flags = BGFX_TEXTURE_NONE, uint16_t* _width = NULL, uint16_t* _height = NULL); + + /// TextureHandle createTexture2D(uint16_t _width, uint16_t _height, uint8_t _numMips, TextureFormat::Enum _format, uint32_t _flags = BGFX_TEXTURE_NONE, const Memory* _mem = NULL); - - /// + + /// TextureHandle createTexture3D(uint16_t _width, uint16_t _height, uint16_t _depth, uint8_t _numMips, TextureFormat::Enum _format, uint32_t _flags = BGFX_TEXTURE_NONE, const Memory* _mem = NULL); - - /// + + /// TextureHandle createTextureCube(uint16_t _sides, uint16_t _width, uint8_t _numMips, TextureFormat::Enum _format, uint32_t _flags = BGFX_TEXTURE_NONE, const Memory* _mem = NULL); - - /// - void updateTexture2D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem); - - /// - void updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory* _mem); - - /// - void updateTextureCube(TextureHandle _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem); - - /// - void destroyTexture(TextureHandle _handle); - - /// - RenderTargetHandle createRenderTarget(uint16_t _width, uint16_t _height, uint32_t _flags = BGFX_RENDER_TARGET_COLOR_RGBA, uint32_t _textureFlags = BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP); - - /// - void destroyRenderTarget(RenderTargetHandle _handle); - - /// - UniformHandle createUniform(const char* _name, ConstantType::Enum _type, uint16_t _num = 1); - - /// - void destroyUniform(UniformHandle _handle); - - /// - void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); - - /// - void setViewRectMask(uint32_t _viewMask, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); - - /// - void setViewClear(uint8_t _id, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0); - - /// - void setViewClearMask(uint32_t _viewMask, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0); - - /// - void setViewSeq(uint8_t _id, bool _enabled); - - /// - void setViewSeqMask(uint32_t _viewMask, bool _enabled); - - /// - void setViewRenderTarget(uint8_t _id, RenderTargetHandle _handle); - - /// - void setViewRenderTargetMask(uint32_t _viewMask, RenderTargetHandle _handle); - - /// - void setViewTransform(uint8_t _id, const void* _view, const void* _proj, uint8_t _other = 0xff); - - /// - void setViewTransformMask(uint32_t _viewMask, const void* _view, const void* _proj, uint8_t _other = 0xff); - - /// - void setState(uint64_t _state); - - /// - uint32_t setTransform(const void* _mtx, uint16_t _num = 1); - - /// - void setTransform(uint32_t _cache = 0, uint16_t _num = 1); - - /// - void setUniform(UniformHandle _handle, const void* _value, uint16_t _num = 1); - - /// - void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices); - - /// - void setIndexBuffer(IndexBufferHandle _handle); - - /// - void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices); - - /// - void setIndexBuffer(DynamicIndexBufferHandle _handle); - - /// - void setIndexBuffer(const TransientIndexBuffer* _ib, uint32_t _numIndices = UINT32_MAX); - - /// - void setVertexBuffer(VertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX); - - /// - void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX); - - /// - void setVertexBuffer(const TransientVertexBuffer* _vb, uint32_t _numVertices = UINT32_MAX); - - /// - void setInstanceDataBuffer(const InstanceDataBuffer* _idb); - - /// - void setProgram(ProgramHandle _handle); - - /// - void setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle); - - /// - void setTexture(uint8_t _stage, UniformHandle _sampler, RenderTargetHandle _handle, bool _depth = false); - - /// - void submit(uint8_t _id); - - /// - void submitMask(uint32_t _viewMask); - - /// - void saveScreenShot(const char* _filePath); - -} // namespace bgfx - -#endif // __BGFX_H__ + + /// + void updateTexture2D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem); + + /// + void updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory* _mem); + + /// + void updateTextureCube(TextureHandle _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem); + + /// + void destroyTexture(TextureHandle _handle); + + /// + RenderTargetHandle createRenderTarget(uint16_t _width, uint16_t _height, uint32_t _flags = BGFX_RENDER_TARGET_COLOR_RGBA, uint32_t _textureFlags = BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP); + + /// + void destroyRenderTarget(RenderTargetHandle _handle); + + /// + UniformHandle createUniform(const char* _name, ConstantType::Enum _type, uint16_t _num = 1); + + /// + void destroyUniform(UniformHandle _handle); + + /// + void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); + + /// + void setViewRectMask(uint32_t _viewMask, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); + + /// + void setViewClear(uint8_t _id, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0); + + /// + void setViewClearMask(uint32_t _viewMask, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0); + + /// + void setViewSeq(uint8_t _id, bool _enabled); + + /// + void setViewSeqMask(uint32_t _viewMask, bool _enabled); + + /// + void setViewRenderTarget(uint8_t _id, RenderTargetHandle _handle); + + /// + void setViewRenderTargetMask(uint32_t _viewMask, RenderTargetHandle _handle); + + /// + void setViewTransform(uint8_t _id, const void* _view, const void* _proj, uint8_t _other = 0xff); + + /// + void setViewTransformMask(uint32_t _viewMask, const void* _view, const void* _proj, uint8_t _other = 0xff); + + /// + void setState(uint64_t _state); + + /// + uint32_t setTransform(const void* _mtx, uint16_t _num = 1); + + /// + void setTransform(uint32_t _cache = 0, uint16_t _num = 1); + + /// + void setUniform(UniformHandle _handle, const void* _value, uint16_t _num = 1); + + /// + void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices); + + /// + void setIndexBuffer(IndexBufferHandle _handle); + + /// + void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices); + + /// + void setIndexBuffer(DynamicIndexBufferHandle _handle); + + /// + void setIndexBuffer(const TransientIndexBuffer* _ib, uint32_t _numIndices = UINT32_MAX); + + /// + void setVertexBuffer(VertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX); + + /// + void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX); + + /// + void setVertexBuffer(const TransientVertexBuffer* _vb, uint32_t _numVertices = UINT32_MAX); + + /// + void setInstanceDataBuffer(const InstanceDataBuffer* _idb); + + /// + void setProgram(ProgramHandle _handle); + + /// + void setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle); + + /// + void setTexture(uint8_t _stage, UniformHandle _sampler, RenderTargetHandle _handle, bool _depth = false); + + /// + void submit(uint8_t _id); + + /// + void submitMask(uint32_t _viewMask); + + /// + void saveScreenShot(const char* _filePath); + +} // namespace bgfx + +#endif // __BGFX_H__ diff --git a/premake/example-01-cubes.lua b/premake/example-01-cubes.lua index 23b58738e..40f153d5d 100644 --- a/premake/example-01-cubes.lua +++ b/premake/example-01-cubes.lua @@ -2,7 +2,7 @@ project "example-01-cubes" uuid "fec3bc94-e1e5-11e1-9c59-c7eeec2c1c51" kind "WindowedApp" - debugdir (BGFX_DIR .. "examples/01-cubes/") + debugdir (BGFX_DIR .. "examples/runtime/") includedirs { BGFX_DIR .. "../bx/include", diff --git a/premake/example-02-metaballs.lua b/premake/example-02-metaballs.lua index d1edf320b..07ee4bc51 100644 --- a/premake/example-02-metaballs.lua +++ b/premake/example-02-metaballs.lua @@ -2,7 +2,7 @@ project "example-02-metaballs" uuid "413b2cb4-f7db-11e1-bf5f-a716de6a022f" kind "WindowedApp" - debugdir (BGFX_DIR .. "examples/02-metaballs/") + debugdir (BGFX_DIR .. "examples/runtime/") includedirs { BGFX_DIR .. "../bx/include", diff --git a/premake/example-03-raymarch.lua b/premake/example-03-raymarch.lua new file mode 100644 index 000000000..4d484f053 --- /dev/null +++ b/premake/example-03-raymarch.lua @@ -0,0 +1,36 @@ +project "example-03-raymarch" + uuid "1cede802-0220-11e2-91ba-e108de6a022f" + kind "WindowedApp" + + debugdir (BGFX_DIR .. "examples/runtime/") + + includedirs { + BGFX_DIR .. "../bx/include", + BGFX_DIR .. "include", + } + + files { + BGFX_DIR .. "examples/common/**.cpp", + BGFX_DIR .. "examples/common/**.h", + BGFX_DIR .. "examples/03-raymarch/**.cpp", + BGFX_DIR .. "examples/03-raymarch/**.h", + } + + links { + "bgfx", + } + + configuration { "nacl" } + targetextension ".nexe" + + configuration { "nacl", "Release" } + postbuildcommands { + "@echo Stripping symbols.", + "@$(NACL)/bin/x86_64-nacl-strip -s \"$(TARGET)\"" + } + + configuration { "linux" } + links { + "GL", + "pthread", + } diff --git a/premake/example-04-mesh.lua b/premake/example-04-mesh.lua new file mode 100644 index 000000000..f6245d5a7 --- /dev/null +++ b/premake/example-04-mesh.lua @@ -0,0 +1,42 @@ +project "example-04-mesh" + uuid "546bbc76-0c4a-11e2-ab09-debcdd6a022f" + kind "WindowedApp" + + debugdir (BGFX_DIR .. "examples/runtime/") + + defines { + "OPENCTM_STATIC", + } + + includedirs { + BGFX_DIR .. "../bx/include", + BGFX_DIR .. "include", + BGFX_DIR .. "3rdparty/openctm/lib", + } + + files { + BGFX_DIR .. "examples/common/**.cpp", + BGFX_DIR .. "examples/common/**.h", + BGFX_DIR .. "examples/04-mesh/**.cpp", + BGFX_DIR .. "examples/04-mesh/**.h", + } + + links { + "bgfx", + "openctm", + } + + configuration { "nacl" } + targetextension ".nexe" + + configuration { "nacl", "Release" } + postbuildcommands { + "@echo Stripping symbols.", + "@$(NACL)/bin/x86_64-nacl-strip -s \"$(TARGET)\"" + } + + configuration { "linux" } + links { + "GL", + "pthread", + } diff --git a/premake/openctm.lua b/premake/openctm.lua new file mode 100644 index 000000000..b333e2a31 --- /dev/null +++ b/premake/openctm.lua @@ -0,0 +1,74 @@ +local OPENCTM_DIR = (BGFX_DIR .. "3rdparty/openctm/") + +project "openctm" + uuid "e03096c4-0c53-11e2-ab09-debcdd6a022f" + kind "StaticLib" + + defines { + "OPENCTM_STATIC", + } + + includedirs { + OPENCTM_DIR .. "lib", + OPENCTM_DIR .. "lib/liblzma", + } + + files { + OPENCTM_DIR .. "lib/**.c", + OPENCTM_DIR .. "lib/**.h", + } + +project "ctmconv" + uuid "f50ee8be-0d1d-11e2-b721-905709e48fda" + kind "ConsoleApp" + + defines { + "OPENCTM_STATIC", + } + + includedirs { + OPENCTM_DIR .. "lib", + OPENCTM_DIR .. "lib/liblzma", + OPENCTM_DIR .. "tools/rply", + OPENCTM_DIR .. "tools/tinyxml", + } + + links { + "openctm", + } + + files { + OPENCTM_DIR .. "tools/ctmconv.cpp", + OPENCTM_DIR .. "tools/common.cpp", + OPENCTM_DIR .. "tools/common.h", + OPENCTM_DIR .. "tools/systimer.cpp", + OPENCTM_DIR .. "tools/systimer.h", + OPENCTM_DIR .. "tools/convoptions.cpp", + OPENCTM_DIR .. "tools/convoptions.h", + OPENCTM_DIR .. "tools/mesh.cpp", + OPENCTM_DIR .. "tools/mesh.h", + OPENCTM_DIR .. "tools/meshio.cpp", + OPENCTM_DIR .. "tools/meshio.h", + OPENCTM_DIR .. "tools/3ds.cpp", + OPENCTM_DIR .. "tools/3ds.h", + OPENCTM_DIR .. "tools/ctm.cpp", + OPENCTM_DIR .. "tools/ctm.h", + OPENCTM_DIR .. "tools/dae.cpp", + OPENCTM_DIR .. "tools/dae.h", + OPENCTM_DIR .. "tools/lwo.cpp", + OPENCTM_DIR .. "tools/lwo.h", + OPENCTM_DIR .. "tools/obj.cpp", + OPENCTM_DIR .. "tools/obj.h", + OPENCTM_DIR .. "tools/off.cpp", + OPENCTM_DIR .. "tools/off.h", + OPENCTM_DIR .. "tools/wrl.cpp", + OPENCTM_DIR .. "tools/wrl.h", + OPENCTM_DIR .. "tools/ply.cpp", + OPENCTM_DIR .. "tools/ply.h", + OPENCTM_DIR .. "tools/stl.cpp", + OPENCTM_DIR .. "tools/stl.h", + OPENCTM_DIR .. "tools/rply/rply.c", + OPENCTM_DIR .. "tools/rply/rply.h", + OPENCTM_DIR .. "tools/tinyxml/**.cpp", + OPENCTM_DIR .. "tools/tinyxml/**.h", + } diff --git a/premake/premake4.lua b/premake/premake4.lua index 051cd9609..e646a88a8 100644 --- a/premake/premake4.lua +++ b/premake/premake4.lua @@ -242,6 +242,9 @@ dofile "bgfx.lua" dofile "ddsdump.lua" dofile "makedisttex.lua" dofile "shaderc.lua" +dofile "openctm.lua" dofile "example-00-helloworld.lua" dofile "example-01-cubes.lua" dofile "example-02-metaballs.lua" +dofile "example-03-raymarch.lua" +dofile "example-04-mesh.lua" diff --git a/premake/shader.mk b/premake/shader.mk new file mode 100644 index 000000000..de365e44c --- /dev/null +++ b/premake/shader.mk @@ -0,0 +1,96 @@ +# +# Copyright 2011-2012 Branimir Karadzic. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +ifndef TARGET +.PHONY: all +all:;@echo Usage: make TARGET=# [clean] + @echo TARGET=0 (hlsl - dx9) + @echo TARGET=1 (hlsl - dx11) + @echo TARGET=2 (glsl - nacl) + @echo TARGET=3 (glsl - android) + @echo TARGET=4 (glsl - linux) +else +SHADERC="$(BGFX_DIR)/tools/bin/shaderc" + +ifeq ($(TARGET), 0) +VS_FLAGS=--platform windows -p vs_3_0 -O 3 +FS_FLAGS=--platform windows -p ps_3_0 -O 3 +SHADER_PATH=shaders/dx9 +else +ifeq ($(TARGET), 1) +VS_FLAGS=--platform windows -p vs_4_0 -O 3 +FS_FLAGS=--platform windows -p ps_4_0 -O 3 +SHADER_PATH=shaders/dx11 +else +ifeq ($(TARGET), 2) +VS_FLAGS=--platform nacl +FS_FLAGS=--platform nacl +SHADER_PATH=shaders/gles +else +ifeq ($(TARGET), 3) +VS_FLAGS=--platform android +FS_FLAGS=--platform android +SHADER_PATH=shaders/gles +else +ifeq ($(TARGET), 4) +VS_FLAGS=--platform linux -p 140 +FS_FLAGS=--platform linux -p 140 +SHADER_PATH=shaders/glsl +endif +endif +endif +endif +endif + +BUILD_OUTPUT_DIR=$(addprefix ./, $(RUNTIME_DIR)/$(SHADER_PATH)) +BUILD_INTERMEDIATE_DIR=$(addprefix $(BGFX_DIR)/.build/, $(SHADER_PATH)) + +VS_SOURCES=$(wildcard vs_*.sc) +VS_DEPS=$(addprefix $(BUILD_INTERMEDIATE_DIR)/,$(addsuffix .bin.d, $(basename $(VS_SOURCES)))) + +FS_SOURCES=$(wildcard fs_*.sc) +FS_DEPS=$(addprefix $(BUILD_INTERMEDIATE_DIR)/,$(addsuffix .bin.d, $(basename $(FS_SOURCES)))) + +CMD_MKDIR=cmd /C "if not exist "$(subst /,\,$(1))" mkdir "$(subst /,\,$(1))"" +CMD_RMDIR=cmd /C "if exist "$(subst /,\,$(1))" rmdir /S /Q "$(subst /,\,$(1))"" + +VS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(VS_SOURCES)))) +FS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(FS_SOURCES)))) + +BIN = $(VS_BIN) $(FS_BIN) +ASM = $(VS_ASM) $(FS_ASM) + +$(BUILD_INTERMEDIATE_DIR)/vs_%.bin : vs_%.sc + @echo [$(<)] + @$(SHADERC) $(VS_FLAGS) --type vertex --depends -o $(@) -f $(<) + @cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) + +$(BUILD_INTERMEDIATE_DIR)/fs_%.bin : fs_%.sc + @echo [$(<)] + @$(SHADERC) $(FS_FLAGS) --type fragment --depends -o $(@) -f $(<) + @cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) + +.PHONY: all +all: dirs $(BIN) + @echo Target $(SHADER_PATH) + +.PHONY: clean +clean: + @echo Cleaning... + @-rm -vf $(BIN) + @-$(call CMD_RMDIR,$(BUILD_INTERMEDIATE_DIR)) + +.PHONY: dirs +dirs: + @-$(call CMD_MKDIR,$(BUILD_INTERMEDIATE_DIR)) + @-$(call CMD_MKDIR,$(BUILD_OUTPUT_DIR)) + +.PHONY: rebuild +rebuild: clean all + +endif # TARGET + +-include $(VS_DEPS) +-include $(FS_DEPS) diff --git a/premake/shaderc.lua b/premake/shaderc.lua index 15edd1172..b471d17c0 100644 --- a/premake/shaderc.lua +++ b/premake/shaderc.lua @@ -56,6 +56,9 @@ project "shaderc" excludes { GLSL_OPTIMIZER .. "src/glsl/glcpp/glcpp.c", GLSL_OPTIMIZER .. "src/glsl/glcpp/tests/**", + GLSL_OPTIMIZER .. "src/glsl/glcpp/**.l", + GLSL_OPTIMIZER .. "src/glsl/glcpp/**.y", + GLSL_OPTIMIZER .. "src/glsl/ir_set_program_inouts.cpp", GLSL_OPTIMIZER .. "src/glsl/main.cpp", GLSL_OPTIMIZER .. "src/glsl/builtin_stubs.cpp", } diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 79c365b6f..4169e983d 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -85,7 +85,7 @@ namespace bgfx g_fatal(_code, temp); } - inline void vec_mul_mtx(float* __restrict _result, const float* __restrict _vec, const float* __restrict _mat) + inline void vec4MulMtx(float* __restrict _result, const float* __restrict _vec, const float* __restrict _mat) { _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _vec[3] * _mat[12]; _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _vec[3] * _mat[13]; @@ -93,15 +93,15 @@ namespace bgfx _result[3] = _vec[0] * _mat[ 3] + _vec[1] * _mat[7] + _vec[2] * _mat[11] + _vec[3] * _mat[15]; } - void matrix_mul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) + void mtxMul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) { - vec_mul_mtx(&_result[ 0], &_a[ 0], _b); - vec_mul_mtx(&_result[ 4], &_a[ 4], _b); - vec_mul_mtx(&_result[ 8], &_a[ 8], _b); - vec_mul_mtx(&_result[12], &_a[12], _b); + vec4MulMtx(&_result[ 0], &_a[ 0], _b); + vec4MulMtx(&_result[ 4], &_a[ 4], _b); + vec4MulMtx(&_result[ 8], &_a[ 8], _b); + vec4MulMtx(&_result[12], &_a[12], _b); } - void matrix_ortho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far) + void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far) { const float aa = 2.0f/(_right - _left); const float bb = 2.0f/(_top - _bottom); @@ -393,6 +393,7 @@ namespace bgfx "u_viewProj", "u_viewProjX", "u_model", + "u_modelView", "u_modelViewProj", "u_modelViewProjX", "u_alphaRef", @@ -590,6 +591,16 @@ namespace bgfx _normalized = !!(val&(1<<6) ); } + bool VertexDecl::has(Attrib::Enum _attrib) const + { + return 0xff != m_attributes[_attrib]; + } + + uint16_t VertexDecl::getOffset(Attrib::Enum _attrib) const + { + return m_offset[_attrib]; + } + const char* getAttribName(Attrib::Enum _attr) { static const char* attrName[Attrib::Count] = @@ -786,6 +797,7 @@ namespace bgfx void release(const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); g_free(const_cast(_mem) ); } @@ -834,11 +846,13 @@ namespace bgfx DynamicIndexBufferHandle createDynamicIndexBuffer(const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); return s_ctx.createDynamicIndexBuffer(_mem); } void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); s_ctx.updateDynamicIndexBuffer(_handle, _mem); } @@ -854,11 +868,13 @@ namespace bgfx DynamicVertexBufferHandle createDynamicVertexBuffer(const Memory* _mem, const VertexDecl& _decl) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); return s_ctx.createDynamicVertexBuffer(_mem, _decl); } void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); s_ctx.updateDynamicVertexBuffer(_handle, _mem); } @@ -894,6 +910,7 @@ namespace bgfx VertexShaderHandle createVertexShader(const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); return s_ctx.createVertexShader(_mem); } @@ -904,6 +921,7 @@ namespace bgfx FragmentShaderHandle createFragmentShader(const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); return s_ctx.createFragmentShader(_mem); } @@ -924,6 +942,7 @@ namespace bgfx TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint16_t* _width, uint16_t* _height) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); return s_ctx.createTexture(_mem, _flags, _width, _height); } @@ -1003,6 +1022,7 @@ namespace bgfx void updateTexture2D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); if (_width == 0 || _height == 0) { @@ -1016,6 +1036,7 @@ namespace bgfx void updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); if (_width == 0 || _height == 0 || _depth == 0) @@ -1030,6 +1051,7 @@ namespace bgfx void updateTextureCube(TextureHandle _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem) { + BX_CHECK(NULL != _mem, "_mem can't be NULL"); if (_width == 0 || _height == 0) { diff --git a/src/bgfx_p.h b/src/bgfx_p.h index 719c777e7..951846efe 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -386,6 +386,7 @@ namespace bgfx ViewProj, ViewProjX, Model, + ModelView, ModelViewProj, ModelViewProjX, AlphaRef, @@ -651,8 +652,8 @@ namespace bgfx } }; - void matrix_mul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b); - void matrix_ortho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far); + void mtxMul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b); + void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far); struct MatrixCache { diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 93d283391..6495658ee 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -977,7 +977,7 @@ namespace bgfx deviceCtx->IASetIndexBuffer(ib.m_ptr, DXGI_FORMAT_R16_UINT, 0); float proj[16]; - matrix_ortho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f); + mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f); PredefinedUniform& predefined = program.m_predefined[0]; uint8_t flags = predefined.m_type; @@ -1783,7 +1783,7 @@ namespace bgfx Matrix4 viewProj[BGFX_CONFIG_MAX_VIEWS]; for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - matrix_mul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val); + mtxMul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val); } bool wireframe = !!(m_render->m_debug&BGFX_DEBUG_WIREFRAME); @@ -1970,11 +1970,20 @@ namespace bgfx } break; + case PredefinedUniform::ModelView: + { + Matrix4 modelView; + const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix]; + mtxMul(modelView.val, model.val, m_render->m_view[view].val); + s_renderCtx.setShaderConstant(flags, predefined.m_loc, modelView.val, uint32_min(4, predefined.m_count) ); + } + break; + case PredefinedUniform::ModelViewProj: { Matrix4 modelViewProj; const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix]; - matrix_mul(modelViewProj.val, model.val, viewProj[view].val); + mtxMul(modelViewProj.val, model.val, viewProj[view].val); s_renderCtx.setShaderConstant(flags, predefined.m_loc, modelViewProj.val, uint32_min(4, predefined.m_count) ); } break; @@ -1993,10 +2002,10 @@ namespace bgfx uint8_t other = m_render->m_other[view]; Matrix4 viewProjBias; - matrix_mul(viewProjBias.val, viewProj[other].val, s_bias); + mtxMul(viewProjBias.val, viewProj[other].val, s_bias); Matrix4 modelViewProj; - matrix_mul(modelViewProj.val, model.val, viewProjBias.val); + mtxMul(modelViewProj.val, model.val, viewProjBias.val); s_renderCtx.setShaderConstant(flags, predefined.m_loc, modelViewProj.val, uint32_min(4, predefined.m_count) ); } @@ -2014,7 +2023,7 @@ namespace bgfx uint8_t other = m_render->m_other[view]; Matrix4 viewProjBias; - matrix_mul(viewProjBias.val, viewProj[other].val, s_bias); + mtxMul(viewProjBias.val, viewProj[other].val, s_bias); s_renderCtx.setShaderConstant(flags, predefined.m_loc, viewProjBias.val, uint32_min(4, predefined.m_count) ); } @@ -2032,7 +2041,8 @@ namespace bgfx } } - if (constantsChanged) + if (constantsChanged + || program.m_numPredefined > 0) { s_renderCtx.commitShaderConstants(); } diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index a2d6148ca..22512b5f5 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -1688,7 +1688,7 @@ namespace bgfx DX_CHECK(s_renderCtx.m_device->SetIndices(ib.m_ptr) ); float proj[16]; - matrix_ortho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f); + mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f); PredefinedUniform& predefined = program.m_predefined[0]; uint8_t flags = predefined.m_type; @@ -1898,7 +1898,7 @@ namespace bgfx Matrix4 viewProj[BGFX_CONFIG_MAX_VIEWS]; for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - matrix_mul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val); + mtxMul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val); } DX_CHECK(device->SetRenderState(D3DRS_FILLMODE, m_render->m_debug&BGFX_DEBUG_WIREFRAME ? D3DFILL_WIREFRAME : D3DFILL_SOLID) ); @@ -2169,11 +2169,20 @@ namespace bgfx } break; + case PredefinedUniform::ModelView: + { + Matrix4 modelView; + const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix]; + mtxMul(modelView.val, model.val, m_render->m_view[view].val); + s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelView.val, uint32_min(4, predefined.m_count) ); + } + break; + case PredefinedUniform::ModelViewProj: { Matrix4 modelViewProj; const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix]; - matrix_mul(modelViewProj.val, model.val, viewProj[view].val); + mtxMul(modelViewProj.val, model.val, viewProj[view].val); s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelViewProj.val, uint32_min(4, predefined.m_count) ); } break; @@ -2192,10 +2201,10 @@ namespace bgfx uint8_t other = m_render->m_other[view]; Matrix4 viewProjBias; - matrix_mul(viewProjBias.val, viewProj[other].val, s_bias); + mtxMul(viewProjBias.val, viewProj[other].val, s_bias); Matrix4 modelViewProj; - matrix_mul(modelViewProj.val, model.val, viewProjBias.val); + mtxMul(modelViewProj.val, model.val, viewProjBias.val); s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelViewProj.val, uint32_min(4, predefined.m_count) ); } @@ -2213,7 +2222,7 @@ namespace bgfx uint8_t other = m_render->m_other[view]; Matrix4 viewProjBias; - matrix_mul(viewProjBias.val, viewProj[other].val, s_bias); + mtxMul(viewProjBias.val, viewProj[other].val, s_bias); s_renderCtx.setShaderConstantF(flags, predefined.m_loc, viewProjBias.val, uint32_min(4, predefined.m_count) ); } diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index e8ebd582a..4a3690d7a 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -1074,7 +1074,7 @@ namespace bgfx } else { - GL_CHECK(glDisableVertexAttribArray(loc) ); +// GL_CHECK(glDisableVertexAttribArray(loc) ); switch (num) { @@ -1703,7 +1703,7 @@ namespace bgfx GL_CHECK(glUniform1i(program.m_sampler[0], 0) ); float proj[16]; - matrix_ortho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f); + mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f); GL_CHECK(glUniformMatrix4fv(program.m_predefined[0].m_loc , 1 @@ -2023,7 +2023,7 @@ namespace bgfx Matrix4 viewProj[BGFX_CONFIG_MAX_VIEWS]; for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - matrix_mul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val); + mtxMul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val); } uint16_t programIdx = invalidHandle; @@ -2315,11 +2315,25 @@ namespace bgfx } break; + case PredefinedUniform::ModelView: + { + Matrix4 modelView; + const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix]; + mtxMul(modelView.val, model.val, m_render->m_view[view].val); + + GL_CHECK(glUniformMatrix4fv(predefined.m_loc + , 1 + , GL_FALSE + , modelView.val + ) ); + } + break; + case PredefinedUniform::ModelViewProj: { Matrix4 modelViewProj; const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix]; - matrix_mul(modelViewProj.val, model.val, viewProj[view].val); + mtxMul(modelViewProj.val, model.val, viewProj[view].val); GL_CHECK(glUniformMatrix4fv(predefined.m_loc , 1 @@ -2343,10 +2357,10 @@ namespace bgfx uint8_t other = m_render->m_other[view]; Matrix4 viewProjBias; - matrix_mul(viewProjBias.val, viewProj[other].val, s_bias); + mtxMul(viewProjBias.val, viewProj[other].val, s_bias); Matrix4 modelViewProj; - matrix_mul(modelViewProj.val, model.val, viewProjBias.val); + mtxMul(modelViewProj.val, model.val, viewProjBias.val); GL_CHECK(glUniformMatrix4fv(predefined.m_loc , 1 @@ -2368,7 +2382,7 @@ namespace bgfx uint8_t other = m_render->m_other[view]; Matrix4 viewProjBias; - matrix_mul(viewProjBias.val, viewProj[other].val, s_bias); + mtxMul(viewProjBias.val, viewProj[other].val, s_bias); GL_CHECK(glUniformMatrix4fv(predefined.m_loc , 1 diff --git a/tools/bin/shaderc.exe b/tools/bin/shaderc.exe index 9073f7df85966defb526fddc9cdcc02f3444056d..2d522b55d36df0145e0e89d4891e3b356b45b9a0 100644 GIT binary patch literal 1077248 zcmeFaeRx#G`9FO2CCL&N&VnIC2oT;B1QiG>aZ#3+4FL@7X3Z{&NwihFZhgf)fJ$KF z$%Y(;MXdPJR*|;YVoQJ8mTI&Z6M_kd0)ka2R?%9Wb*VPO#*& zp6hw8A6#e8Idf+2nYrhld+xWHlwZF=vPhC-#g$4)QWNg<&n15U`%e;|`;U0JzqGy2 zn5ifw-gM`kcZG|7a7)or<<6qp?kt+K$X9g7T{quy zNxy!%V+_y>9(gVyf7RNQzW(@1ps63;v)5kRbT#hdroJrRZ>$eB^~d|)H&->~iu^52 zUXgEB)1SrN-4qjdkH}YX+Yf^T^MC4r$1O?Mn6jivj(a@mJjW!nsjsPzB>kT(Novj& z$?uK;W*m5IK^kF&p3Ra(Z}cyHms;=vS)ZCQ0Qhv(iHww&3W$5=Mv2mvW?AykgUcap zH_^jc|2z(9<-V(3&L`p7p8ctLKk$@3BHVul+7~Mxjf>x2y=``ODv<<3}RrWw^hLdyjuEK)7V- zy-R(pzr73mHENArUx`ZpYnvPQF=2k^g)9Ut*w=9cOM^ zq{$Alm%{n1@wiQrSf!msI`QDGNF7jj*{a&!NdH5AKU3_{li?|Av+G;J69cT)7I`&Y z{2?kXHy>bYdK6z%gj{P@lq-OwKjyK=#K#6vL1?t-eWdvtWR=4GgD22BKRuJ9SZN_%)fF~Lu74a*SXrKr9f|HyENrnOz?!cC^Nps$ zSF`=BEq3!5X|3bR0m_j2gW-W|J*F$YCZ)gHVpdzt^#_%Yi(3*|LtE6tsc1|18Widi z;J@upn6mo({Of6w6zrr1Y7GRGSD=|lUm#jr@ISP6lxS_ulJ3vnft`+0!5{t;JuG#U=1oCq-XTcBs+HQD9m=4ZCSq~b81>>e`Q!ccF=wTDE)U<7 z&S-abgx_tKq)77_F?@rA#B=y6<9mYyibt01k>+oW;Vs)q!#iZU1e9WUlOj2bzw{p< za_y!>P-qVo7%K(Lw|tt^aHHddfzVruX{{X~bg=n8yxw#m_< z*#xLW%$xj3^Ht)ZAM0oo1>)n8t+>T_Db&l<--D&W$f^wR^MB41{WR4!#=ijprja?j zq}m#`VNR4Rwkg?aZKHKn4!^D|l}d~sU)#813`0(Rn&z=yvnp56De~O+ei~mztbq{2 z))SuEtu{%=ScRW2{#Hy-Kc69n((1=h82GQ!Q+nY4>NLFnj(_yT&qthHI=mD3s(%-V z$56=i`|waw)wt>&1Ew+}-JP1=<548IPGTN=OmsoeV!PEWv1aNFruL<4bHH53cjF^p z#|N=i!JG`vymqc>F0s~F`8uzkKj-c-lF=49>czxm?sa;1&B~0}qcp}q(ZBVaU?c@B zMrqMKa&#ne7axt?XNtd$F+;iHqxwhZUO8&TM}Vv!joBbNI}h_gZf+z(KI8t$JoWTU zdCgCO0Qm*&+956}H6}I(H|Dp2(lD9%&eJ;EtbIh1qcPApE478Dcw*%ny?j}&VEFCs zb}7CTpMsMHx+ITY?jk`-cAY$_Q!7z%{2JtnG~Whn309$uGK%meF2X^N?B$ew7_y&n zKN2fDte&ov*L)$``EZkH=c7+hJIf>Nt(jVRBzjPe9>C{F?IUJ+J@^N@V2_pWj%^u( zXKAge(L8e&P<}Gf9HiP=wpQv0pT`#3y`Es9;2?*upe8ufW(Q@E>sR5o_-M(doAJ78 zcC0xMcP6t^du-nK=J)p5YKPS+K&))j@5=aK0qP6dMWwTc0qA2?V@0q_tW%SbqV6gH z7d2rl&y+usCdPbym8*jTT;rYi%qUbULl4t>4agY{~UdIZE3o*1cpm@wIH21^&>95}rx zJTO%2=POPL%1D(*h~uLr9Z^~efHf)Z#zUm`CuTY7#1ob2{)kqY;$x7^Vzi9V_=yJ^ z!hT37sf>Vb@jw8Sew3X6#J?ntgyF3n6RBNeR)(huakrQMD@PC_NTuEVjTGO7oGH-360LWQwU4hh8loq@A9rPFzk3Ya; zdT7oPKyvl5Sy-sv2LU4b8%!ZA#-L>>{&PG>n*Sr#s2NNEb+(1=p3r1J|MYS(2UwJv ztEW!!^S6vtcSKJr_VZ>vDbhS$@OTH-1Y*A??!Js5SeMikw-~GJ9+ zjikr&UDA!XcHm0jl1!HW)j#mT)N2JU>EiQU(iYtB!F?qz+hCV89Pe@5B~wn0Ij7gZ zvtE0BqZdn#^_;Yx30XPWLSFItgSP_-{94cg>nuJBJUG8ra;jsqO-riU0^%bCtDo4d zQmla%$Do7}X_rh|!;N^0t$!~EzYRCz*%ws>f;7 z6SYlKk*jeNEyRtRXvJ;Zbfx%pieDNQtzkQUI~t0>$KJzK?`W8crvu_?8lHBEr|Edw zE}mR?+JYx-(;Pf$)sFUtGCY{HO(Yg-o32Icv`ue|-^1efJrI$$>6rNaSp1SGt8F?V ze!2K1@vgmrL?Tn;rqkkuq+(NhLoN|adjknk_|%14<0g{08aLVSrEyaq{I)mrrCg0d zh-%zK0!!nje)M^SwuyKapVQY08K-&xkzFAPA!~pnR*A)fYj#Ss1^BIftXLHIc)YJ& zPXNK^8`l%TI@^>SwvRvbZ*T!I2ou^brjeofQ0V9H7K^-mEC8r2MIPQ_vr2q$`fVHN z7!{OM7pxjMP2gY2t*I6wCI-B?rKTD;Lji(3>xIJdrJp5vQ3-*yiq-JfXf7>}n{ZcC zw<+WNycM;^++Aq#@{2_Mw0J#*?pb z9byJTqXC%BLj16uIy|)H)ZyYibtwU4V=L4sXRA`sE{M^@ULY!r^tYx<*61H3n#us= z=i>mGYHNXH?dMmD+VVtgdDPin`je2~?Eu&t9+YM@Q~a}wf!G91(45ixYO zXp7>gUZM-;XG}WFP-`7hK(2q3Mzpk$t#E`c4e&#R{av=$qg{XiIpkW_IpI`np~)Ml z;6E~>U>ioaz5cTQ;IqVbuXVVf0-cV%LfI#@vM(3Kehzrj+C>n6_9#iVyESh9`Wd!c z{m}CD7AD%2=+D|F99nB@w3}VXb21jC!a(GwSb$JBjn`*@q0dzMC-SWK%btllO2Epceg41-fr1>73mxI-V#|kICZHn0QIpG zvoaQ=Hh2^EAg4Fc`wAYA&|%SL$PJlhl9@y_Gdx$XR&BBNY^D6*owSsA@xx*?5TPr) zJTXZWLi;h>)9nuve2hKDrKY<0&El3N{3atQt=RXZZ(fRZ0aT?^?{&@$^^&B^++AvN zdN^NAjtUoqvi$r$y~g4es-eT(bu}^t!1(-HGjTT_7vE``gvV~cNEcxQZqduojCc^) z{d`v@lk%RQHyCfPr%aC#4Awxu&W@$_wYJFVqHsKNx=;9Hx!L9{?}7}0Mx3}*bQ|2|KZJJKEpEOOS8*7?KxB8|rxW(@WT{RWb6NxEJdGvHEJyFNvH_(%v(kkf5 zN>62YN*gHju8{cywh!PaG{(;tT|!v08+u|)XqJjMHv93bj-ma_=gKcMa?#${dvp_= zT<7Pp$Et_`b}sD$)Oz9z@PZNc^IE~Stgs@bz~7eW%nSTUbxNy-gHo?51D_4&Tr~wZ zrC%u5&-?z1NWqrsOLW}w_)D}HU-c1wb3aP#x&dIcb7otlY?i$F(( z#E&l)gANjC@N7$gvu^Llol#f3JHB4s-S?pV2fcXpAtUR=*4=f*D z76J`w{PY5RfzY_irp?St3yjyGcYGLxdSZJs@M2)g&l?9)KTy3~e__w`qW&U1J`joe zFu-2oJSmwKcf@99>uH@?Yuaj(>pOwP$P5hgR;yxb&oRY6Ktg+t6n_`@bWx=bDTDFt z!1Y>bt2x}4hB9P|KZArZS<_A7!G09sznv^eDGS=83!j+HO}8NjmiI_fZ~TJ*YBWA% zhCObA7>4+dk!%u;GH7PKpqbWt3n80fv;pC21A?m?0<|f0xu5?@K(Q~WAOlNTeO8%aHtPWWsR~f4aWZpXtBy9sUWOri&e+(SAM%`Po7nYy?g`g^ED00z$cfP)Oj13w}c^67c^Sr^+ww z0pHKR1UQ;Od+-gjxURPAQlL?;Uk#e_^YbzcT&}+ZDWMDeyapxw{0K2bnxH6@!I(%$ zODN!TIipBTIB9+vt+iH^{1BZ`%7WQ^`N(cl8 zEFf^jCgxA1HU&k!nNo5fA<1i=!eeSo^oEOFFjS>X@t@JBxmK-#)Smb{ys4|LPz72W z*ONUdet#xqXX9g}BE^H56c}Ae?TPy{DJVr+R-9Bl9S%y7fD@mRNkJ*n!Qw@k6qF(j zE#5zqf>LBkh2Oerbh-FvnG}>FB`JzNLbq~((Dkad$}V43I;tl zt)lgJpe(eFtRjGbAA(jmYsXAG*49*<7Pa;U(w|N7Vya_3H6tb@dgpFgC5?~;tl9uo zvWi7*Z37wgr{~ErY9CuKcus51S-o=JpMFgtFachM4T6Oxb0)G%0mUz+?}+3ceqcG zzL2oZrYHQ9U+qUZoaHCNtJhj!4ZaV?-wNJ-My&FnT+8gl61myp>2N10Ki`)A5+22{ zwltp?vqxfc<{yxo7no*yHFuJ)P3KVFS8F?^aKBqwWfH`HtL8B$`rgXQlkoiAs?E2m zZhJP;?!%3Nkh%?#D-MJ=r4?chPt~Mn;Lm%_0L? zCKA_)3}l{2EEE~YI+2*2AzU(3B&M?UWN@YL8`qP`HPt}xiNZ{_+vv3)+JBLsZyzlh zt#;Vt=rk-}P?K7gkPwhI1kiJ6nx8X~(S~FwywI;Gxx~-InPdo4dh&+b$GfB@7rCSr zxDMcY57!kFT+%#T)wu4)wP2!4x&zk=T$^$I4p%F#H*mdx>k5>ahifdZ^KhAPeF3;H z;rctSy|{jZ>pw`R>rp%_xQ?Q%iu>2NKZ+~O!F2sb@GslRHAJW;rJSuH-Vl45enE>@ zVP=Le!Q>0@7+IA&G5w+^<$5xr2WfT&c(jnvWz$Nn9i?LOvDsF&4I-q{rbC6n_MbG& zYsgp?dy#(Cy`<-l6mTySwrMe=JCJRG+HTbr+gUaMd=Qd?8$=}zWD50Xo&5E$EnpQ; zjiX0(FDkX>A(V@`lO9;sj5hFD&}n1kNiQEr%55j}=fTL%7CP#7-kw7a<5*ryI;rQQ5E1qflR1b*fOAx@#huIth-LiP~Ii$6URO{h8nDg%nlc4c?40 z9=;g>)LnVsNh{s@G_5_lh1DFWy?_ZrUaZ-`b$-YM9(MsM2YJK9PpEEDK7+zbcx$F# zv_#KEfgrtdg-ilde*Vc&G~Oh70(lEBu=|s@UFfr3GS~!y&x<}!CCosjwMA1(pV-{2 z8bQJ7<kDm-75Dv7Y3ag@apACy-n@_Hq7kg+i zUbONq-Tp(X_aYlJe_y}(6xH2jo$Y*oWjoy0D5zl{pj(<9{A9D03>z+*L{@iGY${05R~uEsYtd4p2I8bmXj zMKe2=_6s@ve5l^cM4xu)29q$}`}vPX5p2o}j63%yeykgjXDVZZ$EJ|ulvj%85Pyw! zqUnAnjEL(SiVI+5~I;pr7!qg%>?m&o|>GfWaE8t!bY95pl^CjvBwPL z6;i7V{_p4SjZDLhPlgQEXiB%St@}d(KKS_`#gbt)`nX;|YhCIfXjh0&w)oR9T(uKw zsB7_u@us7!1_GwB9EYxg{;g-PY05^|^c5It=~rNTO?{ApDb>wZ+NDuzb77(lkJR}^ zo}G#&Bp5K?X~dqkS=6&?$V- z0gkI3g|Rg$N_b0ipMV#={u4AoexZ+04)97Q(^*<&r+T_jp+r;sWu(Mr)~U%NdCik} zE^eti{WKNY*aBXfLv5n`@zqX2K5}d|J~EwZ*z2)-Ol!}di4c?1YpYTd_8}t08oQ>C z*|J|NPeNF`cNt(5tzDFgEl*vUtK_rS**iUCtlFg7aV9YtrTVfC{sCb)nHYsk@18TC zSZy+4bJm`?cUGf37gL;7c2b|vJc<>dAP`tzA6x;U%jL^ZaUUby%?>O-lEwG!p3gZ!N+PQ6`$0eCXSCnAY#ZGa{T~2 zVD8KHHt{f8sR{70qE57DbU3$}GRFUbpAu1Y*>FgC03kP*rOF~NiO41;R}*Q@w&fp% zh6lK!H;!h{4JaPq9}Bi-jnf1$qDT-zGJE+_`Gtp1l(@)d{T^tm$cs`AXs?aZ6TOgvh>F znMqq%1QF>HZPQ_N8|wxplh#Zq(8L1BX4_+BS?X!4yk-Pw0f9ng(_M&rV-h$4Kh#wH4w1YHG2_KwV1=^dqYSPy7L7LI+tAk!i4hvr~1c2-5F$1o-rS z36jU4T4KwK)H64&%u+uOBrNLZlcFbA7Q*E3?5rImKX(`_lgIKtpOglbcu7qu;Vd;( zsn}V$&CBzRFNinbxuUODxRTn0Y>}pP{SJEf2Yel~#}Tgi`)Mw71GoedeEbch#LAwg zAvrx*Ub7jA2#DKpHF31q6Sy@4v68T$G*eIGZTM+MM1vH6iJk~O@#pBNA3c$8q?v@8 z_|NI7FFiespI0$gq~en-<>PAwA%OxWq5H{_RRh%|AtHI}DqGC+s`^dV@_FhPrWJEq zKS7?7)j4X*0ZV71Lp>&|Eq(CxO04XFdOBzMB?e42dBy6%RAQhn7VbR2FUr8L{n*Ek z>%O9d%sLZ&VHx=R!c*@LJvqA5$IZxRjOK;9>I|=G_(HW-cmG}L;~r7g-uj8nXF0_W z;w_zDIZ(sefmC!#f>Hq9bc3(To2*;DXw4P`aP}}aan*$$z-$H%(&>E1((&9 zWy`kZ^c*pamlxC*oAnot5{Vh z^mvw^>+yo{?V^%$Sc$(v7b8K4er!wwzK=~ z(6JuR$?oUTJ?iP(FHicm}3gq**zjC zrn|9V7gi)+e^xT#6&^7+>(S;@hr5fNI?(-Gya!BlV{6Z>737~9joA+lQ{2*>^_Li* zjmG7e0bd8MakwrsuKRG0;(8d@Q@EbR^=DkWaUI3=IW7~*=i#~#*VP8BO5;xOZ^NbF zs>5aQFUX@lK2@+@D|B|^r$c=FA2LiX`9A&t?r3KdZX(12(d{RFn$pG1nG&>0+yP1< z{zVomAI}#28Di=Qk}oKX2L=Gj=D?$ny>i6EI3?)gFX;?POb75Aet(C6QY-oFYmA8TE;z%Ys1w)8?Mg5KK^fTOMIyj!yr@+pi3EqE&`8Y zIPT5BC3*UHxBj94#`Txz=T;E+aQW5BF8Rfl4Nr{TiFoK}QW+}0IFmMB;H&c4sdmC- zcv!OpzMB{qD)4bt)M)EbW8Eh+AY}vHC*56>!rAI4|G_hRr|zQ^I&o|CppqXt-^Ul6 zQ|{JZke&Y}`k|)ep&7S24}>p71G3fDY-+$4)Vzw&2p_kf(^0eyeGF&IugH#u)5TAz+otCB4nQuY*FY}HlLpz*7ac@zaD(pi1qRDJ9LrK!2Z?fEmlz?%n^7L zgqe>Ax%qjL^3^j4o+W#$k3W+Zph3ss)#$}8HKqG(d01@lBWvQ zQIi)cMFC!kJ{TQvQ&rU+L?r1JhX(q1nt zr0`I_1bQ=d(7=nWLr^|IO1=Ax(Fqs&_(aqi%JcDE5UK>`GE@U-)g5MPj4`ff4W%tT zlt%hW*lTEr&r7HK_L`)+;A zY%%{=HO=~8zXGbUe$^c(FZ1Tt!LT8T$Nn6Kdn@)-7)+@>O25M!ql$Q0hF=MCH?=;I zt@8)D`2jP!B)lpuVqXpTv>aVR)2loQB~BTDa8~7ZI3clGP+HsYEga zVv!8>euP{<7zNeSCS?kJm!lOR3IhM=-Kg97m8{-G35~?OwEl1kp*2J{aRrkdo6h8i zNaB*4AKr$}u$}5LlU8{G^~=#)soc)Dl9Yt^=Gi9afz@;11f>qdW+kBRFCQYm5ZOMT zxJYy}Zfe33aSoEBKc=GX&`1JE;d?2Dm>i)eFn|zpw+q7^e6lpf64?1RNXf-pA@!>A z1S&GCZI)Q=3Fim0`Y$9l`b@H!d*8HIXl0*}L|@N%)gZNI%f%Gso{iI+@;X!<{Ycg2k<- zTFW(vRXsgSsYUzawBHXD8tUui$Fix7h^>jUjD;$hRDcwQy1Dep}LaJn7%gs5IU z6&QuuZ*@@4(CnMlyC&%>6X z#RV)oR#vFlSbpR6g_K}rb17gCTQjnltd&`jGf>z;VxVLw=;`&_i!oiB>+{1y#&*K8 zZI_$(xGYE3+7O6*V!}?#VPe~DV`o67yDzIu-QD8Cn6T}2Vq3xval`iAyY%^8Qf*VN zfK|EFp}&7mNv^gZ8GO&M%cCci9f{Gati>l2!_efxtQ7o#q7fZ$3+3F;bMyxa0*8l# zf-dtsJo#6kPu6V3d$b&MmaqlP-t8cKF1Ahhvga@fQh!j>0vN`!Z?yK zYaJ3110uiRM9maU{4;!rEvlOh?znu20s3(&+3_GuG;azRj>PQ&?tkB~b|{rftP0b%)Q1g?4(5^sBSI&PuSiAkZN#Khnj(UekvNsJA|-0uYok>KHGzh}rr7-j7)K(iEcW|F!nB_(QC`%Zr%(N?VX(tzDi9{w zb(LLuX&U4@CF`ZzkyEr|5bT@Yir`{V^0%U-BY|yrdBDDfl{ye)Va0CB>EioZ@jXv( z`t#^)b*&{ex1d{}5#bHsx-qxI!;g#H)|&K=9U3q4|B{0uwqX)}h5r|;1L&Sw+?0dq zlkxvjHhtr|fnq9OX=Afs>J5)b*%$%_3Z1*}?H8I=!6Q0^s+qAx96P4eWXwWQh7hXaQ@ch$oPRk2O$4 z6zZPG<~u0=_vFvY`NoFhDx9papiqQ$cvJ6c7C1p_ZN6AQPlC1c1B;~Pun(~QB4%EW zR#Bfs^^#nF8@0t~fm|1V%r034H`|54mYTd&j&8srD3~=o z?c?~*Fv5o2@S-rbrY+?{g1oGN4+BGA#^F? z=Xc;Sb&+BTB+T^wF1_z^7jp7evyKc3G@$rLsJo7flnY;qf~f} zsj4gSpr5bnE^(>yV7m5PEPA8#n#Wf`Iu`Orxvisg94eC7fVJl7@bBG&vhoWphF?&w zzlmVAGT1bVkgFOoCSvI|fXYz^1`+W9aU1R>t0v0PWk3M}7vv~exBOfZO(b8093`bc zz4M?C!JS`_awmHXHmkB}{=&os>HQ*h22&0nxnC@Da6xF~T?ywHFc^G6{FS{}d1jN$ zg)a~>evfy&`1lt3kah_<;K0%H^%)mk-_;|O4_OQhp#1pm$vikT3+uOjXaIaGm!k7} z$Hlbn-!lpRry&4|S`DnQq!{Kuzbr{{D!)sMxmD**UZVq=~ zKM6SjG1B>Gjr1P(AZjApQilyK!;=;Kt_*9C1)hU zBVO%MQfW5`2vBH?nJ6q;78(Ni6*&=KgV{dk%DZc&f!KeS?eE4$Qh9N`i*c?%VBEBWLkSMI>V zNq99Ho0yB9D0v9~6#n_x;zQ{Vm#E1J;TdZ3;_#Kik9GO-DXIrB%3!tjgcKeC zYl%(ii}B)p^^Ayo$>_*mEOtpB;`$6%7P_4NXG-tG*SC!P&wKLq?;9>a*~z$;5{&dV zlk_H&^t*BI{@!D9;8D<@Ej^`+TM!X|X$@1ER+~h?8KU^HhYXYa?URCwvcumo!JDC5 zXC^q-Iem`*5+!=i@m-kXE#HmKf5M6b5E*n*45u;S!+kQe%&NL9ADpEs?`R+q9TRr0 zSkFspNIza^gCZ&3znAi@4aaePA>N24oEJ2HFh%h+YK1s`?4J9E)BN zjUl#}u$+vwRhOrk3`%-jh#cTI;W1d~?|WbL6)dE{&sUQ93TJj%wVcSy#175jH;7i! zI*C3$I!pHmBng&2MMvY9ZdN&v7R5~`1ZX4J(;!Xb4eZhvK=t>3PV7!ZMW#e{?C+#~ zD~Q-eU{!bonGXHBJ|S#Tni=gLRI|hY0~LC=kQ=an2BM+dtTS;AH^K7&qH=O=j@A$_4P0=K4{8efY?b%Lm(B27h zK-}A59Cx$UG!rqnrzh;U?5#UZj-Hhxg@JvBpFc&Q$x3GLFp;8=X*Sfot_oBsws8me zV>^jt9f>7IJ0=`R+nX}G&qeJUjOs-!(}bO|Ig=*&a9|gy9egG&V%WNhNHq%vb0ctj zHL9nXK=1X?!M*$?RD?BV?3c((=(HRD)0!okxf;S-+Ru}ol^Ac*f3PG&nF0}rcL$UZ ze@J3qqH7*+1vW;$cGQH8PfzY6XGwL{PJ3p*fFGG~;){tnQU_US0W5a}$Q#^(tbEct zkh>NZu>s7CR#vBuz3~Q{X&W1XL@vA;FwxIM%`5w=Nz3YN;Uva!3c4f8Xdv>l19cx! zk-Bdp!0@u+V=2!4D#;4jcp#ex|1!#-{x9Xb^Dncj_gT$K&zdp~Fn@OgjQXj{x^Jk? zWkUpvyjGqQGO5RMJRvi`;$ss=*WUJviC-_2dNuzIV8(0Ju(f-pl?~7w9kkX+9Wwz) z5;+Oq126*q*gaO~JIZ-67`tqGF3p9==$%#xrCcI^%wr9(`)t|@8=Ho02h3&D95veH z4wy$_4xgvzP7iE1{~+jW5(+!N3Xc^4t^gD^34uWDZku+GO>MPm{ZR{u3~*eq22-^< zfU|}}rw^OxlY@C}Y@S_nkb%x)gN?4cSf&-|AL7*~!%gq*D#;Fe0uVizzmrv1V+%Vy zXqpFflVmx}a}5Y?f9fD6u9+plU$YQqkuVpxq;Sr_0w9GgKowTaq|LUm%T*le_h(GP zvreNB>x&mqvHVkK04yJ2R~|u*Asp_8opCgOU;r(*`@ONsu3!>`TEVjdpww~)n~bl3 zEq2(4$3b7ikwnl-y&lR+Co)v?*vLKN3nA-SO6P_hySYrA7R4;wd+%j z#;{uyp5UYbUmPDzQKRs zqR)!m(*;DIgxeu2HlH5%uz7{8@mw60L9QALTbNf;-nG(#O%>2xaKmXDOq$CMv7u<^ zE9fs`fgwYBcz?)DSX+9mW9YwnywJxAKm-8>1%8GEuCKu8|GY^ocHrp22!XG6sU*sN<)2XOAAQD7Q1`c1r`6w2H2suvz93S&2sQCQ3| zfnUnX7Udz#ncKmrVSx1F6{oXxYE_+l&)-a#2spkCyhmL*sJpR*#XCzE}?~`;SS&ns`ruPgo16h-Q1$ zPOQz?o49Oo?D047s$u&es0FPXz~;~K@H<6?;n7%{V&!MBvg~empTS8xs0lQQ13k}3 z%1{W?X2^Z+6RJCDb%6$)YY6tzKPQk3TDiel)fo=JPFWm+C;Nc~LKsAGS@e51zYgaS zz%d7kMkjIJ2F@7p2l%h9q;}eH=mOize_dpjw7aL`yp))~KyzRP(^*St;n`7r0>2al z2-m2`3l{Qo=&{h1$i30&584mF7+S#_;JWv7j~7kZjR{axB3k^HB*u=YXZ=IKMeL#7 zgb~c4mX*0g-)2@e2Qtkf8jcF?J7Pj!#QTI7vb*!ZTf(J@Ea*R&0v-pQ1-CHITjAk_ zR6Q6Ks!s-df+cw?csA+}@B@gXCC)SkrT_9V>Q-8*r3gvFo+g)$MQYBv`@2;e^bhfh z{IA!bsLugTjIn}qX%;q`!Dpi;aSUS(YlC>`+#Nm%ZXmDuF_sC6RSddF_>$}E(JPX| zme5B87Tfg~Sx{_W;5Jr5ltL3!@%&a+eG8H7By>3RNy1eHr+zsk+w zi$!BM8^x~ZE=Hk#dfTSx#a0@5&g;(eBax>cK=;@4EH?6d0b8T!pIkp%VH7EDn=Xh2}!MP>Mllv4q^*QK5u9M3fIEDjl!pZW6HU{JLgA80^uNMMMy?Y zpPutgBj?TCIh!b_0W%Ld$Ll$Ng=A{bwbY=A0v{WU!WX6shgYYoaG+o(h5{4o4r+-t zljVjq?19Mgrk-U!W%+P!h6KV_P{IKu=)+&&3lVDeqa~iuK$0&-n-T+Q?CJf_`a8|x zd^U?jgMFz3SZvI!opcqJ8g{Eo+J~$BM=t4oTxo$r%vYMM>~w$~=KsN{(P|I*Vh$*p z1Ptpv&dog;x3c1x5>uk19z`Rk-%mDyV3IqHWw z#Rpm2sV^BS>EwUt`GMgKB7CUo3I%=Ol6-q<8aIfQ-_37cAb!HGAoevy=)=JA4 z3^;D+kSgK62HS-=hqlhL>H^&%h$x|;hi`SKaX~CS;6-(VOlAuFg-)1}bo3Dy<9+up zGX7oWE`V`C?9L*SR%nh#tKFMg<|Pn^ zz8ymeP87pVbF7tyZdy7&Y~zQ@*6 zYmuWL5GlE^BSc>JHXez*9@VvKT9WK2+r8bVMI!44nRQz=wa- z)}Prx8i$#(o%AkW9&2sox#}^CbLUDkgU9mu)?>NFtz#uSn%^2Ktbm=I2XrvhJ%Z4b zohB~kMl~LOMdtemw*O_YAnDLYZ1?;Mj5YRCfZL*E79j@WI4j@GDmRnLU}N(Qyv(x2 z6M}JvTprE+gy!BBbMNqIRZUvelYH%8K#==L>Mq|}a=u*uBH$+mr2Xlvb|Wj_%Br4Z zmD^cGA-l(cu$|T}qfhPVQ#*BNr`{p-Z@V_D5CSulAJ*CWxfq6HIqD}EhR&FExU*xK zm7SXKHAz)-K>3gt}+jFmrGcIa3i_Y)?iiMnetDNm}?Kyq8b0yxWjJ9BSiUI(_yVxji%roWn`P%r=%bEhZmoFhtd*-mc#0=yptw5ka zwohzKIrJ&ugbF>24t>ghJu}^X2YO2k0O34@u0&3Udn<}zI6%1-yf%|@kUwMznTbbH zkCbj~=_Gz_CSw5xAb?y1wfP_C(01*{7&=V4EwpyctbzMiZewN)oEWfe`q8m8aSA>B zj7zi=yc6g<-)QP}7L1fQd3@L(K>8F4L2tz^yr1z7z4EKu5o>;jOLE{Efvd;*Mf>rK z`~fTse3K3zz`+Ua)Z!hdyNA=qS7p9aq?DiN1a)I zp1$`IT2*Fd3J+tI1%cRni#ImkjLYP$Aj+8xl&2}j$Ir{;9^1_$${q8;DasLqD*35( zcYb6_FC@KIg>>)4`cQW~f&uKwvdJDy{*t@^h8P^2xONrTNE3f*Mw$@D00FFWD{<}3 z;M&yHyFUjmU^U)CzErXn{Ysq9ex|$vh&Nw-Fc3(v;_mTaJ9*tC>eCcfhi7q_Ty%n~qfO3Kbox+U?;_0kR=R zhihnlVD;AY+CUWfSSDhXJ1W2n2p=sc2_Klj&>Cna@tRD|e#l7!^a@sb;^HAG;DMMm zypK@4GQ7RADfWO>o2HvuLWP>C0&U_288Dzi0cKf7JRuBV9{&5P^f=KhpjjxGPxZ0h z^Q&@e8n|x9!J$exm(x=BAz@zF1ra-8WB1#zz#{ZyCtHChT4&Q^mXaGzV|Y5;+dRN6 z*=KZ|D4F_YED?l^M+h0Z76@cuk*mmLLA>!6L9P#>`-<($DKvrAZZX(_Fg-ip8G7>6JEJ@Kzi_r4Of#DM$;>b~J7x7a5l__< zpvNPhgCa4PLqSYsFD5dk@ezLHhClD%Z(W(e0ptOiw=^_;zb4+$n+7qVwjeV(i4g-B zo=(#la`A=?09ey@^FN>@C>iFO{roi&>5_>&yhDYelt1Yy#0+!_tjLtsDG=MGk7$+kT4keFxz4$JSs!gqG~#l$Eq)KATr)cFpoWN6Cx!DUkjM+?un&E$abJ zmzOpI90V5+Id8V=3pwme+W?VL9@A4uy@qVCfDlvcwVm2YQy@H+su+`j2%35xmhy;@ z3I3JQ%PCXpigYg^R6Pmnn2;uK(~W%pZDt!x&AnNE@b3_R<8(eK!_p7o5$k~v>OZ8> z(aJY!?hTr6EdvkosaO$jhFta?)A;X~ zr!k~YIw5s##p2MDT){Zb5?Gw4mflR$7FGQ`10lVJpH7;@8jcKDd*Eo?0&y0EvK_8E zz5~VpoRHoFe9FD`Z1Bcv3gct#lR&%Ez46`~ooDWaB?nb{C!FFJ^r*D*d0I~E)0G0_ zm5|7>f;N#64#9yUC3idIh8I9Bnqt@O9p!nXxc_r%_k^DS(Hw{H zl4N+T&5CZp*Wj{a+^`hl?`P43zX1KkP684{C{_pYB&dIZZcBhBI}VzxfD09m0kY0H z2BTe=ax^-AEVey{9LMw7d$kyd&|tiP6KJRl7GUR0hx{NN%Pc%-yc{)n%;35(q^$);b zH0G^1j=QaCTsY<|$FVVhthKkllxZhw=~B|Kr*5zdbi zM-)~-_>|16gefpuPJCx}q3(bp6LNpDn~o8NT-u=PW$*LnxNv_#x2?}c5=5K0gnP+C zhg{!}%Gc(F=HR@UDc!_z3GD(QFFT+0G4SQX4hQUy$qDAYMLNztzV1ViEJbMN#7eP! zv-l*jC0h?si5AZQPABC{0aYgqVdOakla{`6l0Bia_s19Lqpm5y5itvK(I-Ad?P(gj zP~^4)PlG{Vh;}D&<14U!!ko}xkOnoY@?$8<@WsKLSIMC(yE&v4gu+Ov#IzpLmD!bkRv?e~HF(I7#f;J#E!0)5gQ^ZDq z#2hsJE`*wLHj=AsJvf+-WT-;@P*V>i-$^1^C-lyfAgn4|Xj}m2>!)*^kNJtAtq`il zc0`5tn4vmspKfDdmB(VWA4Ax8z8fA39QiO)k5SBknW`!MRqeeq`#kOoZ95Y+VVyp8ouqm93bImSteA*DV1>aE>XBIlb zO5e9$e+*D*!qEvdSy-XP)Y{L!=8sb>C;}G5j|eX_yV+ z=i3) zlmc`u6hwT{CFvnQ5BL>w^(~*BYY2gng^UHSBX@d*8ih8C6>0^w6O-(zzoXj}7v+2( zCXLxJX<(6I@1tShx4mr9$_b`$Fm;&P<@(OHo46>*|eeh&_TMDV z!{6;VZCakAzh%7~2D+jxO+nlc0C6L3SWX?-5;6&o{tA8)ydHnQghn;V1#Y4nnIjUs=0R~#vE2Bwg9&39a{M=j1DBGb6MuKE+NyqQMSg^mDE5kAJ&MHKO>ovP z68X-%o$nN8xfkZ^8K^nZ<=2JT+24a;>6@b}S zgr9fUu6~;(N9PmYblYQf(N|O;XVNRk+|nQVgPT@Uo^rW zyKyZ05uyilh7QBo2@+0DP(Fl3gb^}fM_dc!z|L6Zi3*kn5B9^rB<3sT>22^@_n--! z#;dwJ?X*k`#=HUqd*{+HmPV?XnWCsdyQrO>rMTGGi z0kbFr6Wcp$-{3O^Ya!+reFo+Q;+bqeOriVSgnBaLzRE03g7h<_NOerpM1nZkZq zpMYtEzR;*c>0CXL9frAqTt&j-fTM=6YL>qjt30fgAJ*LOY2fSbP9PW2EhSjc$N@_V z%G^$v9%G9-LDe>hhz#CWT?*_hse-wIlp5^II!8u%3h6voG%cKknV7Jo+{eM$P$gCo z)CHtKNCJO8#+D(dz{X~<1ElbxflzqKmvz8|qXlPRx+*kX74QO#w0hsTJCz$s+$ZFQ zC{?|WKXaJ+A1+JNbR#hA2T^WHE?iTr|${!;i&Ji)Q zs>5>qHktz#_AO9N>)TU!g}ny!ouzir(gb0Ztp0T$b;tV24Ywc{#rt7LyFP_rn&!6g zX?{Nn(HjW0A)Chz)Ji<{C}I&XrXc^c&7%`2BW%^^1BK~! z3(~|&jIDp=odnpN(A7S}bo)by9zEt*54gH%bubfd^ZlecbZRrF!)jH0^3*IF^=_FG ztFapE1*!vUzf7-Ata0I~v?{^ST$E`;E(w5dK@=5hWF;2g6W9{zffU)J30eVz8jDGe z)zhra#)joymZPN`anv?WT%?JQ6L|wT{XiRlFh-%69EbD(v>m6(C-$#b9cINON>KR7 zgTP-;5kmJeA+)I5Rv^R%;SBrT%dn&Hv3~~@CLv$Wx(2*bL>3-EQ*lg~zT`W<4Ug1^ zo|gR-t@VpU!w1t600X#HyU)tr7yFm%DF`Zj83r#Dtl)hwOb-ksjAX3*FhwzOCFA(O z)K9xUhzrn6uwfpNn^tgvq)Bl?0FEA9Ia&S20uJFmjD{iZ69P5A`h)bI1C+%EjTSz! zX9|dY*{q(nPGzdtPrdSDI44$*BcAL==oe(X%ERD;<2>p|7Vxjb5bVS;)M@?&VGRoa z#7k;ED;rmVNI%42-}uQ{`Q{c98@+p+R=Jycful~K{kyO@f{B5H9mDzo5lD0I(A>MQ zcQ}B>1YGTKhxr0b8&jcC`t!wpT9~BbkQsl+*byg5BYlXiPVW(wuYRB8qb;}TqYnL-ng}$230=@O@T;HL; zcI&r!->KhrS1I6mP%EmWb4XD6e}(7xZg><7YK0ny^V3NntWZ{R`1RLkpH@#uVAe&{7if|cE{%>{bM=@tAcc=HjVlO*FR+~^3NMMTkJ zBcjNx+!vbY<3~oPXUwgvKeUyAh-~^5#=J($ULsmT+5VWxHiPBEG7=DBO)JmN#xmIo z3}_V7RM|5d7)y4I4tU9wvm!(x$u)5iM}?ndOIIp2PBO zr8GE^^fY+zNP_YNy!=_n9YW4gCS%6o^g?651tcH(Yay6}j^OscLL^1Jd?&{sFP94ut*wkp7q>4mLo+eY_PZY(G|A z2Y*3)MDUS*mL&hR{(cC#_Uh#>0f-j;akTSP_$9O*_L<;fR0gH^ou8f6t_YpNM;SL5 z9VpW~@cXkfqK0R6uzu9ANq<~mw3qEe$korV=+Yl(6hg{=&Sy-^_50vh)kb=TRLbAMWAGQGo zSL%5SyYuFOD#)@3LPd5kJU#nGBKr+`_J2K*=@zmhhO>xBmS>AR6ZJfMdgXyC*odzn zv#Y><_)7hGvM@^6ialv3fexqnO={W+pb*`tI~$Helm$u;xu=?;&Vnp?9{&EL83c$wF0hwBDYA!ML9VBnO%F$4VVLcGAAYlqZ%F)Hx# zKkmoUDb9H#GbA*KPPEYj!u;u8e4rgLbkHbFzW7rMF+@tzZf251Orat;H0yp;I3h)7 zA3i{U4NK2ua4wK>f zD>@K#Daxfi=2wte?xqYNs8C5#p;o_bAmTir9EMYD1t9;+etr@zK*LxLNaK1yx||>l zJ_pieX-F`_lBa@z>7afGPy*R7>eDn$2%9!`1R=N{O3X!cTu{f5bQcHW)ck;tG>GE2 zboZ0ph}(i6suq8E4E8c;r4I7iup`b{@Y^^r?2uhNMS2)rcmOLaz}(3t8O`IEuX*A2 z%A@TpMIy?so@_QEi(DV4$4s{P-|(tc9v4`ATRbN>Fc%zENp^$HN;n;khNf`}qoISs zD(${ZU+;n`s;6a$iX_hOE+SgeyU27D(b01PGZY?6{QVa?{-LTjhMoZwod^a(eGLe= z=>Qy}NDjK*7%D#w#)1ii%_8=hTKREj8E|wta3l_x8&AWxI0NiF2nM_P6NiYJ07?*X zI!=x@lZk{4w{LVwJ+Btf=CMaz($A1C_&reM5Pt$9TvrI`7hJajJM(Jo@QA_^58eyC z!lDcl)&yEe^qq^4zr}7vND7u!K}?ZC`g>+qLl6>UT!03VNoJY70*Wv^B4ifApDeh( zUGOm28m&jjjCCB$C;wp*m~Bw8df))^V6HR5eAW8|9eU7w7R-L!W<1_ zXJQ_I`1gFVjUAs3AmJdEgKnZx*szvqKLwSwZ+dg0%ou)$N$ zt`YT}w3x`<3Li&l;Z_?C{VWCj!3bLRzF3HI9}=UG$X0h-5$w$@FN32>TN{)<$lRwS zFiEkh3kyvrEv~SokH7Gw#TuTZuAU@?FJgmezpCbUu(>$Ne$;yKK!R)2;r9^$yRV?Jw+LhE%8`|*r|gG9{xKmvw+CMqO@ICl*F**c`6zu@caH%7{J4$I#lyH#cI>p@HaU5d}$< zgF5L5-+uIpS`$;Ar8u;3pSp#G5@vs5)U)IT#H;(pF;~tYx==1xTLvVi0s{W{bD==f-hTRVUu~XNyTBbT8s0034|3uIR z8Zi!qS%=4)$a_}gA4CcW#-Qt{Q1qh$sGXt1(;&-Rr|e0X|6tl`$5Ttf{JaT`n*?QJ zA|$`aOTR@QrC<|E;_pvDFMkV`f-nFiuq_b&3O+3jj0~Iu$wEIs{m7(#XtKOcFAlu4 za@q1a=80u@bkC}rf%!-iZS#_pf=JWL;z16Up#q{4Ph3R`#`)E0NWlOP?q<*dlhU7# z00#E5 zb-)oiLvk2pX`w872aaKV0aE{=iMowtB_pxYdWaK{A+lnRd;qSm&mF}nIKRR{V|^r> zY91E(3Tq?w^g<&M-uB3<@e=l_pV4{xY-0J!+Ys5OsNb5FU5r1%2N^854vdr*btsjq z$&q+mEbO&nVXsYcuihd<>M&X)+G7XHOUvfei+OjSy(b~l4dkc&)pQJlh|00IyC$00 z!vBZ4vw@DPx)%Q=8DM~c8DNk>qC|-`3MvY=#6V4edebuV1wYJZ;)+!BEA$&9miU{aaT4}YGwkHj(Q4xct=KtI0-a8o(tX=Eh z*JiEB%suyfpMCb;XMdd_oSMa!h<`nC8J0{JPZ-S$E(#d6D>{m!E;acccE`M+iCkCA zUv3b6h;{=>S{@-$G)qLq5kSMQeB=j;X9$~uvIR2^vBO~k5ebV&wq%X;%c!dkqc_Dd z_SzPW2zr=AFO`JUSENbi#A-6OUhwW1VV@H7a_DM&VRjn%)CL4+oy99ydpam?^TVQf z4Yx#Hv5UoNtn@HvAs8j2^q_$fyi~X)EFsK!GvU3seX)%$SndDycD>o1L&NdZRnznM zAk+Ff5$gLGt(#JK?O^4(#Sa;z*AYos}9x)9M) zFMco~zX2Cfvx33q&htkv5^DfX7hRh{@Hp4b#qw|_%)D$$^ka1N#aE@H3XS!A-O*qj z4$D6r?Ql3%oaf}+@-3{6dlpE=*azLjTx2H-m7H6ylbUs%6_LB7u0n+hxbHSS=~CCS zWL?9l=K`q*D~FDvXqxE25bkLsr91g%nDKSf)8PsLR}?k3cq0*N#6E=cnyy#ubk-g+ z)*e>h(hYc}f&NigGwg#^hiYa@@QN|`3w65gw}jRnrp>^8d8@_pds4u-#z?;k=NcGP zTT4zLj!Nyx zw^#yJiwVRXh_O@m{xOzbHAdQ1#@xXflj&cZtm0Hwf$o`Igq5yPPhifKQql3+!IWuW z&;QqV^Y!P0`-wgNz@RUZ&F@-lFWbE)bq)_elxsAPQB;tmNT7KYzw?hC{$`qYPW0MC>6E$B|?w1FsecY zn`6(n5K|}=8U?AT@+CcW6EIJ6%Ag1>CYZ@p!p5T$uxm<9)%!neemR(A+c}m=EHqJ- z5N)OMc)nf7_enh#B=Ij(!zc+W{Ff2z2r;3+Yjd1=M+2jhJv{F@87V;^G42u2*iJSp z6Z$9KXZ*@K-SWOaw>Ic&f(ZcS2qH&uJl7otA}u?B%j;Z%eIOFCuz3rk(g?BG6S<#R z2P3m}L4M&1V=Y^k{o1Ske5*JJhSeh7rZDbfP>EvyL)ZW+>b{FU+6&OFMU(kK^A7m| z&Ayq#r6XU`&2e9H)nU=&>Xsrcy3s>eWQK9IRnpvQnnQ{WM`d0G7Lg34hlzg?=91}y z+LGpw#HA=Fn?yuDRgPYB8As6krqyVLI!hmEy$oIU*tdo|Ywk14*2rwW^K5b>Ax~MA zd@ski>WaDKuGMOEJE|Q3l>43aOh~j^ z(BmR67&4M?O*eCF4ZiBIMFrLBMq0j2vWvC?4QjqOlBH+iAhgP!2tlh%q*_R3W&zQO zu~~|!A9)Rj#Aq6tJ9!5IC3xIrtLGM#pFtgwHvMAhY3|_vpyWfKE#xv8^R(mn;}8v-7wz7gHv3fR*Y#UCxkLzs$>oNzwdN7$(KB1Cm+h#F1MR zy#DNrc20gopjkz5woJDyJ;$%ItWaG58Q?I8B!UvyS2(joz~Du~`!!Hf8n@H4ZbpIE zzy%SmttgAv1sF3KWkGEiZQ&QP3a6#_v$hw4gCM335qUcb|ITNC&j)PbJ{qRaRiKVA z7o9O*W~JEoVoMJ8kiZ8`zaYnvqD(B3e=NOR7ua;?>vFXD=gxnzp){P%|#ov^=dluHEx@BXx$_&pCY`5Md$XU%BQ%y`qq)@gnCdn zBd-8s1YNogpkwtYCnS(%q`sx%8)F}sKrD>*#om%CT8M5e_Z5lf58eOv!DVn%&to+;y6P8g#Z#wIq*uQd}Ix z4-rGVa`AH9iJ;G_gH=RD(vMP3c$%-l(@^mchr(BRF+@u`ND|1yqwYu+1uC>k>(Dlf zZG?gDXAue5HNh2|1$2lNcx^H}-e)wU4Ytocwi%}lXc4D+%HeZ%wpEVJE>mf@bSo`c zDuq;q0{gM?P%jNzA_y%Ps0kt(;JRfz3-t5}eZoS_DD5%|cNy9MIsX0yzT0n`0I}Nm zk`(`ig*}5PO{p+!me?Hv#lCJEpNW;eGmicNPwG zzjF$kWM!tX|BhD2(&%si-a&9_?iBU@PB4@QiG&9T(WSOXDLTH)>o5tGB6R7~Ws3ck zYX5I(3^~&N_|0w)Do!b-wttW=xJHiQa`mbl0K2CTw`!t&o9nL@u3x5r$Own5V`+R{ zaEQ!6=?*H|=G(ZfI+T#dLn`YP+OZp{){WHYMqv1TO}his%?wl>;`W3f7Tbx3|BO+9 z9G!xX>7z;a5&9tmq4_j9bjSgSfs|!Q+b9&RN2Dz%aM2>ZYu?Buyvuf|9OgtIXIcgR zX+3|JaS2I3-)XLt136kr?*?fxETI0-&%h$<1}A0~LqG|`iCI3pnMIu)JsQ!k7GF4a>n^*X)o+B{47(zoxD$JGgbbsYcl!Y#qY!zlW zSZ;S#>m84R59H*=7PGKH)gg0%Uy~llj<4xSnOTZ1@axA%coc~5mRlH;Z~;IgRB!;g z(ppU(rEl=al@$q*3-+oKk<}uFfMQYxuEic8M4fNE@E7A{<{!=GCO5lJ)<}whlcn{}o6+#~z-L@Qd zn`=&&@)e3Kk##EEfu1lD)ik3gTcQuHDiQ?}8XcjDmqeyXuF@UI_vh+d*w|JJlc>J; zz6>8s>uVav4TSo<`sx!Fpq6r1Baj;onr;nKZ0IJYy zZF7mA71*JcVUH@9dRjT4oJAMpB=6_kMaV)6II0loEeP7%M>}8s`X?5A$jP4CKr4f= zai3gbI|v)=c_g%A_g5tO1c=54c5^?*VeaJo<=i0i2S+fFX5Qcj=S{$>Ru(7n+Mk@+ za}Va}8LGMBq2|S+-jl#<)$b+evePefSt-$dyVPW>=iPsoI~74+s4Pnd$|DD;6&-(~ z>HxO7mDNU7(xSKUHT6Em#EGhbipYM+g-k|{zxy#RdR<YS|XvRW=AQ&6=(-Wd=PV*A7F zMZ#eOla)aWMdz$mJ}E2$OpXqR(bs2>F^WrWFVtLEgYB>e^wpu}DNa#VxC1)bo-9Yu z5^!XfI{lb>@8`W^eKB1EdwexnV5DBZ=Rw?ByygmtHD>78COH))7G!e{SdfF=kk#tk z9JRoy#MksojEe1+A4F0oo98V|n}q-@V;)#!2NVhqVDViI+Dd{#>1(PNyswuZtZYMr zuVfx-wbSDIhJG<&wA9M(wURP5&Im7c%K4gp z3ZD$X$n@Mz-2w`K9+dPkNUMzEz8_jGt(BI*KVsky(6w9m2b^+;u2ZPtox08}snacWT0ntbSg3%-SxAkg zc8yb|MvImCNKOi)n-g(TFYVQ1LFl3;(XhGfkVT2l(Lj4pI4A~Vu~0H)FIl)L(VPue z+Fj0Z%7zd-hv1rGxDAI&LG&}=gD50R>ieVm*S7iOB}vp6Yx z#JzA$uMo(C$1%=NjXdG_j%8d~DJcE%oY?dZ*2IP=(_W#LfA1d-aGV~Xat28FKH;yE1B6-m_8U~PP#6hK#TlsP>RuYb2nPvy zCy$!R+a~E$0Q8QLQ_BgNypu2+y&B5Q-wAv_{uX180cM;C#7MihTtqs`tWJgQFKN7Y z5IcdjoUIND`9mq0*sxp=|1;nHhr>Tb5C5Pud{J-g5w)hhzU;Vr{zfHb9~%D4axxhl zeix5=_}e9YkX$@&?Obrgi#YFT+He4xA>vEEpR&A$I8Y$)CjJq=d`49pezi=UXn+g% z%ekp6Tevc@!_qFTbPy9sE*ux>^jv&=)j1ezYatQbDVm76aHmXHNR4sQv8sT!aNw&t zjKw78wuoB`?+K~=2N3Vp)5S#TJy5B={{;@!CQvqWWmFwRJyUp4v#Cg>4r)`UQzFxJ z5#dq4LlK7)<3NFFqgKX9b7LS#&Lh6rL|_HVcq>y3TcjBx#++N#Cbr2QqR$aIOrdo@ zg#{nma8uCbYwE*;7BNiswU9HRg7@`mQeu(1^UT6tHek>9=(TJ>9VQ}^uCb#$>gxMs zTbzg_-XPr3LNOgqlEh-GUK)m8Xp(qwk1W>-m@8dYJk7=OINlM!(Rsg6)%o|aZ6Qtl zZ#dM>Ax&4plsLAu)#^a)mFky=oEk2kV}Y{;u04fP-oRuQLy zQg387ZxBd4TA?1J0y%Pm??f4Hp|X7%N%)$+B+BVkev^BOcdNT}d91k#Ju@lZGm*6U zr13nBXBuUBJ=y#ec^xmz-AMT7sd{>pbPdaUcGW^=OI;<2^|p5hF?&DBen)HRz z_D%lo{tqB^y9c`a_{N>us-y&4SrO{TCNR3luH@j-^x(WbXXldRO!0k|A&E46JQJ(s zE$Ch>QT=5`Niem-Y1s2Z?cA{`@wEyYIuTc*3hui)c3xyPEtKndfBv%?rZhx0bqNTJ z5)lI$Gh>0j`xhicf|7ZT))Nm!N>|bIj37hxc}gZTJLHx!ajB#zN7$!@Scm;>71_k~ z<%0O4OjQ4s>Yi?Aclc#<{QZ9{%)F3twwSB?QmLaXr##}OZQ86P{>Nt|bVU1qOLwtc z>+7B%d93K-3z9W%mQqyOrx9*n_Ysyz1EGqbLBK`f=D(R|mNe9rz^ zzU#|;dikt-EZ=qM&+}b7`26DWeAksvU{AznU{k*9@Gr12`enZBNj?jn%y*spRK6?w zY3`!jOdRB``L4h6IlL|3HEMgl>vJ9Xu4no5@)_Tm?<(MP9iKn(k^7_ha}OCZl)qua zJRZ;R5hJ~$MvwN59_{y!88c?=xN(8N_)|`s5S)1Gq)e?Z%og)V{QCCECcp~`_`VFS z-Slql6}PiC=@jPI&Jxu`Z)_6phy=lG2%Z3wDfXYjmTs+tKeKcK%os_BESC-8Z)2}P z$IF!#5s{~Og-3nQ znPz^lxgA@)2X$Vl07kRFCororJL-!>BsHXlF#>@A%teH5sbAbA&zL@?YHBR4t)36@ z&ytvKVi+ph?gxlo<&1)Z|A_cHEHci<%95}fn1zZ03W>j1TxO$ZIAocHsP7A6+Tl*M zgh;7BC|Y3b83NjpsyG-@<7q(~O!}I3V4fRaw?gdU7a?db3#hg)i&?3!=|{XVJGIS> z*IZ5bt9}XIhGl6L9ni~A?|)L`(HijR!z_@-qs`ypmoQ`b{@f+J5OgbgXLE@tn^%f1 z@<`tAVz+2+eh89Yl$Fm82r}P++=Ys<(7|@6gkW4=W3^vu;?|Ve4v2EbBM7+s3^xsu&aYGbs(5 ze?<2e z#zyYx5%hNu)Hcl?l4fAsylRkFRR#<;(u~&>F@ZT8#B=Yve zM#OJ~lam6cRVE69n0YLCO0bUDz+kroPVUPs_s2espx_eG!3rDxrZ{%S&ZZwn@`LGZ zvl*1Q;qWDFTX~R(SBC*?>N^c#00UCI}#9#kloWsD%q5LdGl?uSMTB|>43 z-Knt*c_djeWulWj4P48s%^t6VE*|t6rytke#_q{JW-* zRl|S2o$ujfz8pK>C(M$}BU{A-FchfJ?th8GE<~0d`~6UHSS!i2?6{=I&1JBf&OQ}; zPiXvQ8k)7os+P7%idOsT`-c3$TO%ox#C^`xzYU=wLb1osp9$rd2anNJd9{qc3!iDq%44wVTP%n~FVa#UZANn?XZBQ+ za>syRNy8Rl8COf^0Ul+?~fB-VLL`!P5;7 z8pr8^ke_x{^l0zFoMb+f^@PlD6F;;l5Q+$pAwKOYSKAlMc>Us{7yTR) zgKgC&iM{x+J36dQ5NgkiruG|$X*AQ51K}CgCfK#-w1@rt+`**ujCwfB*VMukx5D3HDqq_OZ72Wvn{hh4oQpT%7q9TKH7(r8t>_nVNU{zH%-+ z3(g+CJ0|EKL@EmM!(Q4|*^+x~WR|p|_wJEO4WagX->saGu#BMgdD^Y8} zY0wP%lH%Zbx+dpyEbq=p@86vDzW=ydM^YU=rUC_ed zk%D0UrUO(GbLdfIy;P~Eqf}QJNOn{h2D{3OtSWD^ALmJJi>AlBUD1W{?)2Dat*W!4 zSA-&qsjp|g#LV^GuHei!m5{)kKmlb5LBb$?zci}%@BRu6+T9X*-KxbO9T$qc_*bV_ zzt9={cCW7gg!qW%2OrLlX0q5pJ&|K04@!1D+bue~R|5^SK8O9-a5MuK=wgu|L?>F} zfU%KKvVpK&f_h7`2~=k7gXl6%p@<8S9<4CsH9x)eAFEqs;{1$O~?rDv(d7O zbPSBTl=pFcn3^K5+h)-KlyDkfp-Ar`XS}LhgElBaEkl6MI!&^M-2l++l5Bb{w(4xC zzWWgZfD&KhyjF?J-hs}-*H{)L^9R*w`od*GbK=?E8$A;)36nqWsDezhjSh%uNI4Yk zh(=^c9tci=Hce1SI*zWCB23{z*s6PytuC}WCwJ0qmc^eJw5_8<>a}IIbu?aPQmCFn zJ*Sf+GVM7=sQk5#A)!_2{A8s^Le_|5;&ey+3Rr%maD=+)<5Y?%p4@52&Ar^?RNAhq z4(OtfS2JA14o|5ktO~lnPnQ^>*iM^%2@^6#EY{_s4zRzZ5&CQ}DMOMZyya_o&qV9Q z3~z*-=Bf@*0-XgcfOzMmSyOw=#P(c@c7y$h`Cq@xA!HKdVy(+Lx-S95iuer*Pr4)d zYP3C0mJF*`d_)n8!9)0(TaOCzJ!BofpnNuWpzW3QeYBi^wbLK5Hr*)MM7e}Zi}qsV zoZcrVc`*!HkZntu)OJyPVinqt^=$!ooz6~#5l{A1IMQ1d>5awI6laF4Zfa)p3p(9z z``a_Zw>X~;i=8d*g~D^ZC6FrI?x%G|Z%6StX(?p8;g%d%bc$q-ofgTL%(~VwR_2t9 z@mn~%bF9uLOy)tAh9(oPm-)a_wun2nv?DuRRF~)K^LkxNlAU`=;eCz`!wFLm1i?Z9q*Fiq+v zOm;x2jEso8p32BmQn2(zYD9D>1qTg(RgKj(@Q``|X|+|%nvfP<48DAiQTU>s5EQOb zxNw&`+b+fx$7-rblF5d*sITdD(32(%e)T;7QG`g(3lilXWAvJ8(f*{=X)d%{CIga@ zi_n?f3p>XF!4s;Clt|MAMGkwly&{3133w?7gsMI25hTsR1|t6{_vcmh4X$9|BRafN zm-08Po96O05fT!ya{rOJ+1!>Zf&d2w`q_YD6n&y0&$MdjZY95%8Qre>gBl|Y zTq=_*Dl0jbj6zVWF}=XpE~#HnCce@L@U8ibb%_;rY>(QzK*LE2{t$9DsFpPseaP*+ zZ3k7hj=aQUyHhPpyQD5>>{TFT-ZQXB4pq8Ee#BVS3ZCjO9@In6PlDL zms_CAGv%Dhm4CPk^ozx-+S~}RmG;*fWzz>e0h6>uejrcfILl#IJHA+c_sAEKTo9DGK+(PrpV)Z z7L``XLtmL&^-8gx#l#J35C?3+;KG$yd*JQwv&xY@TjseU?fjc@B-|0dlUHemDd!n= z&4F|rXe*8QS9mghzFyMOpBHco$n`N|?>Wz~b|lxw;A&E-{;*p^Bd;f>7_;6(hXfd( zz@JQ}$%r>l7nz1QULVJ}jaWvT*ePtVYGbV9OjC*oBI{i*O%6(`M4P-KnNhpd%C*n> zR6G-ek+QcPuaCNjef8GNWH~~#Qg^iFxVjmVKba?WNG;^N0{wFmQsyFNS^A}VPc753rtV%afot1ut}&6s2n zo6R(3?aI|i5hJV>Qvz%8V=R6O3e@@$0Y=NE4uPKI{w}@{V&6G}PC55C=#{^W&<%o% z^~z%s)4j`C`Elk~8|>lD|EgrNZWj`}nH|YYe)C&02Lct7$z=8ly8piQnpwnMSrj{A zjl-@3ho#JH;siFGUrd%9JJ@>19a6C-)-m`~(O4zWPmm$mC3Y z)&b7ZVat9OkL1C*^Cn;GTXz2bD>)VDi49b%H=c3Ij@6s!f`^Wc!VnfJV;lM+?@09) z8;tZ&%Zd={0d#32OLJb<@zg=3QU`cHs6)m)jn|Gp@i2c5Wga#^qC!tN2 zd9X=glZbN<0S5NfO%JPclY&Ht9ns7ovAyp`&F=Ehu?8Gi#|wKsl?95xTx2Sj5nVPY-@ zJP}}X=z*dm*|2TIL~qc*;h$i$I$it6pDVmPEa*yaWcoWo?1jPBt`x$`$IvGqROc7y zMU{ipm$OCmybvDmsH`4ZT3MEU*jVBRmT_zora6__MsI9YL<n>S$0(m>xRp^ZzL!fT7<=P;E;qML3}5J*q_!jl81a()Xf9pQLp+Y+n&SYbS=3J(14iE+p1n*c&_2sw(U` zv3p>n>xtE(qCsI(pRf5^syi{X?AnEuh1PP66nnum(?75e>4vC*9^75%QohTy1W(&s zoD+G3eyjcxNpi>6fi8wyy2tc^J&}jy-D}pnniQ4mjP~4uAhC6wq<7O?@U*dv6Wx6v zU~HyY!3c-8by4GXD}>?Dwsv_qOIGXM{gc|ydQ=`Y)Pq0ib``gC_fC21T~r#w25Kax zw8%&zd&maNx6Ia)OU%w~0oS|Rbo8}hXAKNoI$)&9Bk|gXHWEjpb71%wp0iv$qxnOU z$Wy+4stRIEM<7uu(9I_QJ#c732vO%dz+v5rI#;BD$Ic;=D1Yj_Jee)OGkSdJv422p7+l7^J6N!eW)I4-w2tO39$acZCn~cq;%BemZ?j$K zxVT;hs>6wd6ciTK&xz9__QWwTYI2NI!yUIhLXBx1xBbNWYPY@^v@1wjk!=c5Fi5tEyZp6k+0>3adh_{S<;9+@_?%%vVE!u$Q3 z_tSPoBvTUBlTfYh)@8Uc$~vA6&ZR5@>mN2}J}uL(@4VvP5OiP{n#{cwk3cUFcIki6 za~3qLyr$`8kjCStFk=I8c}T{`7Unwsq$Ig~w@(7(;&b$R#!jnqso7w@($!_T zdX3{ZPfrh5Z@!vhvCP~Xa$=v1Ew&FpSr-c zsfD+R)qB;2)@$l<#U@*sfD>2b(d)=m@}guKP~K#w^v%~vQ>RJJPen?;EKS|NX|d#6 zw?Q2QYLacumTH!)rJD7+nlAM#>vd{df*>RNe?z8*|CP3ms{50f(l@V8Y3tEHNL%0B z^r+-pcZXV?+SaF~n)WxSM(JvHswCNrgPzBQ$-{WS|| zYyBqw%hJ~E%A4Aj%yp#wZmL-#uU9{${wmxT*ePWWWgR2+_g;>1kRJR9)s@VYzWFOD zZMBgpQFPlTwO`t5Q1@H;tflz8RCE7+s+s<4Y3pItXuWQDQg)LodTJY>;)=MAmby0W z_>E*4p=t(OicM*F@=={}P8;4xuE_Kc$oQhp=vEgyby-%fWH$Vi|=+W0VJSp}7(l4~sOw$B1Uam8GRYx+TD>b7AxBAn_ zc(u;xSNB>O+tR5bci!~a=?zalu4^41X~-g9z0NmQAqq)tS+GrVMjk$cjH`9VG3xSU zM%}WLQREzvuCvJ4qBHu`6f0xHlkIk0(uK&ZbIJ0c&N5!Pl6C3fcGwy9C|;XN#z*Xo zFC)EYUQ$OPx-4RFM(QshUz^T1LH*Rqr=f@Wv+~#z{pf{cY}Xl2QMXwcIm{#jUD^~u z@R5jDnw}O!Cx=PmlEXXt#S4bO&BRXyQ-@b1F*Rh@j_Zr=V^zSnv0?h#5^th8hp+g~ zG@|f|aZfmN#!hS$?%hgASkw`h;^A224r6t)_4lJkK0~Gy2VR1CJS$Gd?Fi%~D9?86 za)0+$zUv?#{?gbHN&2PF9}+LzK83BtZD*h^tvqc0MokCTnEM}?ercIdn;8RGrZ65% z1U{xsUes5d2;71Xywm_c-T}53CMz-Xmc+~_BrzsNkuWS`%yd{bs_=np5Bq-F8LA6b z8uO;BrOYF&>JG0lZzjiyy!U*!b(61Wn0+3SlTz5@yX{vb5)W*>xz3#d_o=U1>@ z@{bqPDH>~fYXMg~SD0MClw3G4x+}^F9>N`gmueIfkZcZsJTM;v`fBa~9l$xb+ zB9BRgz-sjX!LzNay!G{K6`0Tp!@w)7vQ%8Zl?`x;h#zP2ws8?`H)1AuiO$;X_7gHj z>)C3N@o~;ZOBWzo`Q@AZb72Ek%k-=Yk-q700nZWryqM>$e@owVK$5C-(h|w?lsp&e z=cV#|k337{G;`H*d2W(txIdn+mglSGdAvL?3PdiKhgl^$fVC$w|C42|P@A617t}tD zZM?^AdA)x;4Qss?Lub}tQ_MN2k(tGWuxn14xB-mismEi*JBxXI8?iWy^@q&u2pp!# z$`tk!3CkV77F&;3#Z>ppvp3D2hu^}>YAvtnqP+r|~kqrqYB_kZ+C>a50NQFoTiTq`5+m>V7ZT+;u6iR$-@$CaUb!hL ztywkgtxryq-P*v$;|KTS!92&d<_vDR3{JL)4DN!#<{sBor4H`1gH_qhtxsvr>e8nN z^BmipJ-Dl7aF5t4x3w=hxT2KSteOsg>G;8&nbMjCOM3?M*saOF1T3RpG>b~iQ7eE= zj)S=zlK_5#!Gp@Ho$dWLtqXWZx>8erE2)TYBaft}c1kM!inOGr{)|+@3TPYxW_}BS zCl4$hI)m^h$qc9KN^)#3523IYz2bi9&5=A!n}n?v zVO?3Dd2^t3UN#ETmO{>B^vEphwHb?kWLxIwBwqpT5@7P?;kCPeD!E1VX6&VH@8+)c_w0|fG9()p= zI)e{?NgiCUhuC`c*$YAt4TM98Ak1(d%OS#K)&o7CdH|`hy(HQ8WG9!T3a784e*EXQ zs&koVS&*FL76kiTcs+YfxDOgjK@oJ=%W*g@W?Fb@9qn(PK3fCFIDWSxYYq3cU|=G0 zZ8SL(KdK){c{Ry;g14(e-8!G)-w=?n z-jJs3M`fk(J;P8KC2|JFNOEbAh{28`p4aR`C{rZHL%0wWvrIW!8B5a&Q8Wcw{U+ko<3M$V?#za(r8D}RCwHv~s1{kEiiMXx#_0IsL>IRXbv=1j ztn4XPlM(^ZVcqsb99Siq`D~Sz?9?QiZ~G}3h|Q&vg~JF6G0Y z!0Gx9e(xH5c8&)6+k#*4NeJ7r_rk2&xf~E$@kyx(nB&{ve>nvMJQ7#vH70My&RM1X zc$QwKZS>OWhK3$^icBHPevzAl%JR+AteF)CRp2f6Co;LhdRUWtHF!X5jK<*GX4!~{ zv(s^t>v79UZ*cJ?le;jp@pIPX&a)`%#Hjpa5wgFO}o^1xz2%&gP<`Sf(9Y(s(*en*!S9o0C! z1?7${S(=p?+ni(z=IFsBvSctHxdq3ZWDEXfR`RYraO#xw0@pcw99VsW-|wV6Kb2A7 z+Q!Fzzl*D`P}t?f+wY0@<*b^8xaFYkQ1c$XxFqy|=BPY9rxQ93U|t4$4*>W09!={> zzo;GWh?muH0K8%ILsDh*6E@#m6JY%5bwkS|U96}&g5@HZ)y@?gj&Gv~8m~Xi9Ip>Z zPWFn({gS=Y%3gcb_VuN7;|e|zJ}daF;^T5Ve`(GS_u#MeWLm~C^nJZW-}UJgg)j8I zHqcrOeScQy`(l9OW6<{()GNAgCm<(lISLMvwL2H~1iN`S7&zx>0rML~wlikWd3m7v5KINuVQ8t!4>8`Q|); zPPki@^CJQ1tRzBk7z5W8G@x&kUR|1f0}X~O^6 z&pDe&%R9c2lEFHT6xbOCSpgZ2!^8d@jUOBjybjTo!n*L_K9Z>A!s?vA~j@ ztArnHMXQc!jb;@D+rP!k*$_76ICjP15s*x+A+V2dD+D(`3HumQ4-*h31+cy$;*U}L z1&-{&N0Z{g&G$*j ze3FR$`uj4bV>h3S>1Vit9Y@5jau~@&*8Cp)hx4m<-w7DW?2BagX%*7QsZ&#su_@IGPj~0mR78IGPxJ*AaAp1` z;nyIWkI5zw!R6vj!u61Hzod+^7>jcCT_F#MIcPX^pEg= zeQE`=Ol!=?_wRaU*ctYR`?vT*{TutC{<)6nU;2srH}VAiJBG(t2#?V;O15M33clbm zme@STg%*$TLz~Aq^HDC5XIjoddfPKzxQ{Q%FOJBaY6xdnM8pl7HwqLG@L%&0t#`<6 z84R2mORLMMi1ahDFxzV7AN87QoI0#Cf7Sug8#X^>m(@br*4v&=En6O$IiIp{2A3RH zHbA;{t@6*j1+J(0?BerlK7ZizH$JW*&R?4IV@P`PS4Q%e+k!94>0aMAuy>&&(*8W|oJH^2J7aykN1LyOCC4hn@H3Y+w9q zjHj}?^^~T4QLk^~zSh8ozMe(w;K$MuGhMzd-?^)I5#ik5%XrndC3D%HcNV$w_D84t zw%oS=%|)&`Qh3d<*1*$!Z=h~HS^n4_-xhbFRD=MZHZr!!bMS4RogNk0-MRG!maO)w z<3pTOCy@PZ*`)ijW%k;AbmOtKyuN5&r4?_%x218gKO=k_pJ@#wbe9H;ZTwBf`##F* zA@s$byUOVkxihx`iIM*Fr&!BvFw%4M28*YXd6FjA8v0Dsi-rX~0tEJ*$emOs* z+^WO#uCu^T2^We~OqM$4vVZjTFG%$|3o_Gq(^)W0GT`4G#`}@I>@{aT297+Ex4VW& zA0^&|w^i)(QMPG2eH3unMregOoWv4-xm(Aygo1-*(;5o45FFnN=BW=P0^c+* zGHcw48`AT3-%xLkHLrJ@6?i7lT42>)Zh-r;(#bD<-$3+ zSJ8C02@%Qbjq)$XJ^>ihn|d7)5v`NfGWF^u}kmxDxJ`=sDalvA{11W4=8GXK-38TVc9P9^9?zEk(i3 zqUqAnk$V5U}Y|D~bJjc|snp*Izo3T^w4f3E66?c#l)Uv2z0|fdaCV;WdU#kI9 z;IU{{Zqdv&x$*Xi32(F1E8z@_W|vF9)H=WJX3y}D3OjAh);)fh9(Q}Cts=bTXO`SO zbsGZiy?utel?56onwhv9hl#RjsoG*;Sh;N@JQL4g6Na ztwxPuc^$EUT1=+ePVxM6wb`?&v$1A##se0^*il6883tc#5Sy)@|9+!B+o;bm>Zcj? zGmZLLM*VD~K4jD{HtLrc^-GO$> zBQ}Pjz#n`>f$q0PWds`89kNHf>wzsi;N%WrT!#ht1@ir7I%cXMo$!YtKRLhQy6Gy1 zdno1N6*op?Bii}|_P1RDBw6Ilo!wjsPC`hPlYOncnWozc>mWc)Nzof<9VdbvEHl#cp>X;Av)8U@w zQs-(`#9LdV>sTUne2Y3d^YsKI8@8s`fnQmqYStNxQH`!*S?X5d+`{f~#FdW~g1SNQ zsJM>8wt8jD4g$+;0hR&v+q0OcApBDaYDqxHn9y0ABeOtO$6W-eIWV(cW8A*zh|c0H zJxz$atl}!0BgEgwxSXj+-eCQR+ODsIyo(G`^ph*B}L3)c{M{BJ9TSG z{H7d&GHE)!zcyc6f0+B5Us*Srb2_j*p}0VNVQYbXR%lwxhdBk_$is=F z+>M&kWv=#4eLwz28msM+HvSsM!*9Tqh1K(rE%Fs#ErETTC~ikQ0v4_llMuB$M?*@y zZy*Y73+v1U$^fhxEVs>mHu`_HzaFFK;_ zfI!YN`Xfd%WtrWA>DAFGf`8?YK3D@Jba*4)Gu0W}>(WB%MqL9})gcd#RpB2|<}O!_ z$!h1RUrhBC4i+)vr(#^8Nov>7%3U$(PsrV)n$mo4hOM zz;u{f_o|Go8QX!DuTP{`&b(o9oNSyjY-z$7xmdeLWUel(LN-$)#C ztg+DBj`?Fq(+J<1G^G41@Fq_&AhPKR2y~h`x_XNYVrnOp5;9rp7teJ!VW4jGN`%GB zvS15G$8)js?kt)%oSckm-82ae2|eX3ZWOIH%GTf@p_faxxUnt=RBYUsl^lj~BV5Ru z&bgYgjIRs1Vy8zut~8h0=+U5H6ooV%X&2~Rv>1TICpl)d!_YnILTC#}H@?o}ij7oL zgwnKUiHCs34=MQMBCP>V;*%+ys*b@YA9vfc>*1S(28|dbIvhNNsR$WmiwQFg7tKY= z7-X0OzKtVVGZS*qNMYltoatC2sIzaQ3`x#4)`{+Ob2-UwLdjk3kQ zjoUNi{86RP8{j|Pk-2nZj%M_mCCDdzBPQZvGc6I|oN?=(zbs<*mYPLNLB1n>TYkBZ zguKo*BL}$7a4Y+6anFn9x~0^*wy%4U>xY7iV_ETa%U!Wke<=7Ndiq%duS(z_UKATe z%Z+tQdw!Nzv^+YYSbjc)6w4@sZ-o_DVw7Fo<0GN7Xt|5Ovj(=X1bE=RFm*4)*a&B} zj%+ClcCel`**!xo{=FpLcY*KrTPI+Jo!z`-MuDppFQWISu3OPEE(ypW>P7LJ0E@}y zGZMy-FdvY47c7=T{5h8hBqyK2P#NLO+;H~F^VCgpyjCE&+sGk^bDmK&-7H#xAtjqY zxWv7E@%Cxm*E4&d=Zxotao(-sZw?HoGEq*3SFqRs>8HWi$f3LM76h-jX!(DIr%Bm? z8Mw~rvc;4IhNKaei3@D6p~wL3g|oXmbfIK3nUWPw1x~%x+xN|u^0=m2K6_r&UbO|nS(aW(0rpjt6_DC_Q+U65H`@(;9H_%l&zU7P9tmq zW-RbEvm%QmkqA2&J)D(Rp52k3@9M}eadr2L&_{QJd@E+`Ygm&;H!Qs3Zsb-k(UU%y zEsOlG>rGv{(;xL`tx9%xU+whEciRzW^rU_3-Y;+U04AR_lLdcpHw`!H+0-X3GqBz) zm~YI@YPeC)W_XQRaJexTbZJf9dULMevwQ;-%;X7!ic|u0x5h}f*9lzDY=*Ks3Yg7; z5?8!vCViRdYq=F!Af_;anMWt)k0qiMm%9;XxhVlBR9n+F5fFxPbJqW46aTN9ac92G zbt`t0Vlf2?owqO{_2HQY&w{*4fLMQh@nL#iW>gSs(b8haVri_0mu2;#M2 z_}@4NoVxt3?)#E}F!7{-@P9C&MJqye=bIgBv<`XW>HfBGupbXT|K+<~Os=^IB}^C7 z$}80K`cUof?h~UN-9_#RJ{b<+{@#Cm|D2QG0Q=0^hTiqHHJt?-|FoTwvTJ;|T`NfZ zWSFyi5pUb}%i->i3)zc$bf=#*yLI0F*N+btZ8S!0*RRLJE4*5SC+X%;2AHpTrZ$ng zB+pzH#hNpJxUrSN{(WV*f)QHqh{X>55|6soic5P^C*Zx!HYglTh{8$`g7`kSbsA9Z~OD{=tugk$IuTn z2ZJ#6@1P&a^F|TUC$UU*L}CAK`GZYw_ca_dUxR1b8T<0KA+LqXy>h&ubi1)6MP9qk zlD2-;Ts$1{rOv-D`q2k+)AR6h2 zyTv|&i>9sx&Y(OyDIz(g7Cnv_B-V7!)n**d8(VST)*wolXD&fBGO#ZbJM_~ETyOGO zc82xsIkUiZ>gffpJifd6JTj%gH9Nb&^*cW6&cbKp6a3~AJG;Oo<@b?yL{5S0`+P1r zr@-~UeCo~}{P?F9xbERIZCZirDL$8t9lwiz zaLK9(zKt6noGG?>Pu$5@D=!<4E{z4aA}gcCJ1f6u55J~~+Ph|Z^MGhqXJte)^BZOd zU9qDz+szlu&Z#fAded997Wl~2&Jq#_mQz(7pHee6Y8gPz^`c4mCU8-7i}7 zP4`e}>hAc_Jfrl{HB|Cwo>htI)paCd?M7+SFKNxSbVJiz zqE1w`sZWX+xAgIht$AC`(g!E)d-pfPs~(}xX2;ast%0-_e}2=x*b%d;Em4m|H>tZ&)*=-Nkit zvBxty@;W9RVRFpEN8bJ2$c`w15#n6~HR!8nJg0u&4LXnrMr-c@MrO}A(lVJEW;R@U zR_x4%8`ExxW#+xLHfSz=qDie5txi>2MqiQih!OV;DJI6lQ>|$&!-x*Ii;jt*psu#n zsaBq_2U0iM34`_&$m7$OZ4aB%SwBKFUd-*6&wkv99HY&Z?qY0Qp0#X^fF|^U>Bg*D z$B=18d-Kj%+IDj|y5EtqK9{-kN$In!1$XV@_Xs-hS)G47g_nfQ3#-jpbmUTz-!T`T zGJWRIkJ%x@tFI)CoS5DG3M099YcW@>5et@@?L-J;%)ozLPDow6n%PF*+9jYq=5C_^ z$3?sui0*lu!AYGbtUP3v*RwkF-2j~{{%LM7GKLa{1I-~8jYaOpOGVid%|MUr49uQi z%o@)((-~I|itm_@P%3k!j9Ecz9wzTrppR+<*BSA z#KwwM3}nBNXWZ;IZuXd;lzw8r`fhYNAx-2w6zi|csZ@oM?UTgW@N62v2r6-fd;9z9 z0!ifxryYKRblGFeld)wmwn{fjDPx|yG1ng3Jfi6J6GjxQ!HPXZ9FY@TxQC%2D?Lpc zf9lB+%fSWM2StNn-Jg2QHYTi<33ZztEYsgoqq_+__?pD_PwvloMtW*a1RBE4uMi7R zk_UWE64THeXO3t*Djnl;sjJ*QuVN%Oz3~G(;TCt#?!4Wx>l?Se!A2Jw`*NH$+b_{R z43G0gr}9cXv2x5n^FrR93kim2&h<$DJ}#V{LaV@8_vcUnfXRo|B#P7Ux2h3isqLEt zeKAM5=2nP#7Ya^u+jcXJNf={#toe)$(*apyZ|E>QcW%}2pOTs4(SYn1f8!;3RLT6@ zg{3PT%zPxb!1X6S=P)u?dYUUeeJ~!6c?v-Z>CW0Q6_JO*VJHT=*J%HQ?Ty<$klA@J z%Xj-<=&x_%*JsU^8QRdF#|(w>d@(xh|w! zxt!-&*8AR@?f$$DU5hNG(-9B<)UKgoI^x~_BIC~DY8CV*zfoFFUXYr2{Lrmyj+ zJjFatfS&l)SK~*o^4-2yuZ^+#(;9l0@)hr!9rH#+D5C%Mtc~~0@iqUDe32|klz%;u zc;BbVC87%bucun)ic2mzpX+};b4iR{ACUvH{?~J%Bzz_!Csh5fCoA6fiC8F-DGBng z#~1Hg6T37bXEgl}Z-O6K9tVKz*#t&Pa5Ws)LgM8d3Yg`XY;%zY#?P7NW&RqYB+Ift z8#YG{2+`4Vgzt?GnNmLU!SM{Guvjq|>|7s9XoM$86M{3{Avl)`!5Id@ z!8yIay$LuVqLUjtK*9Mtc>9%q4B~Ay7CGOnGv0=tAn(HYsajJse@pF#Q_hEA; z3SeHS>Ax=FF@jE)KTQAgbZ(*l0wdHTjF7KcUv6F4A01gk=pfF+7Uh;$qBVwnJHT=L z0{&M*);D}f&)h3@IpJi-8zl`29_}0_t#uZAxnA zH?(n1EeNgmhF8#5|-fI$PU!SO@bw;lw=U>bGDLBSUO83-L{G z8>PmGp(bYja=F8Z~Jukyp>+Pul?A6y-$UJ(?zD}1A#?E|? z^`#{Z>S{ad40Ez9*XOOwC)lERDzhD7(NnhQEpEmME7^RyfYVE=SUST&IApJ{$GP}> zy98XuJUhKSlEZ`ox8%7ILlIygIibfupqbCc=fDGfx9mNJn$Leso-#VpT8v2%=8z$BlIYh@Q!|D%H^gI%`M3GRfzR@dL#LmzcX|uAl z+gbdT>f$d7091!Nhq9zN<7if0T?)_(3e)}pMP4<)tb!1Tw)=S@h8z^KIFBtfhvp57 zT_BCiWnyJ+^(o96dCWA6MQo&Iu{J!83aj(KtoK4KL`61J6(O#ISJK@IHBaewt0|fo;|6f-0ZhhUtw+s$9BIAb46vwHa4 zl(p5)9S{*8{RIU4D=geqladV3T(M9oroY=4djP!|t7#}z%HYQ$_326VXi~s?i zL`EDqh2pW{TLdXv3G&O=^fU5chwjsNi`$uVi-OT{Rtamv8`v-FN<_~ay{U0PCMSA* zfT>Jb#)4U;Du+ht3kg853Fi2vfL4iT) zq53gS)P#XjM+EGMlawYja9$3Z*k7)GPoj)4A%8i|3c>Q;%^*65 zjbpZOd^f7Ssz}~wMl76U#4ggEglRZASCi67>k4Cat#(HOG@<<(?=hdkvV>;5QmJ0M zMp_An)w^8-1Cgu+^Iehk+%8m?rA~n+Y9@Y*tRT^Z#LY__!q(vshG$sNsL3>H#I^_L zFxB>7c5X6?pP2dq2^d*dM^=lYcZcOS)>4yitef9bQ)1LyuHJ#vR!1JaN?t3u5;VSJ zc6_ZjJ?5{DJZz=z)2W1m^$3M~nSRWwy)rtcE-kX&%J4HQ!>n4rPF-Q8e%nbMuTw9# zQk$LBGj-~8D^>ifS@&7BKArlg?yViKnp978GOY!yyz|J*Qy-v5moL^O{j=`7gMR74 z2do#FPL-2&YP*#>)JdJCQ}4G@dpY{heBE`CJFSFQtprWY2G>jc@uB@5Gw2+*@W+`J z3v^~6J8*T*^H^V+&N?yD!SdDS%^tAmRUCU9_>T>9*qaWO0n5#fs5C1*Ak}vOE{HfG zeV)BqfU>f>bC{g;j9QQSAz)JH4XdBY8-P-dNzUmYA@N%1TB(-{a*`*f!hTRfY?iQ* zc!_XZqL8)GOxtcKjopQ?+AC%IaG}kyLdb!&?2{K1T;j`x)$gn~cDevC@Ebqm=R{77 z7+5Rf;36UBYNf*7yjOiqKcdS76*-%D8U|5-^Nh6~kw7gc*@?djJ;IeFdY;3-6?t-3 zHl@sIuglAUsa85l#AXV68(k%@BSG$dy+$7}9 zb;sr)<1?S($ksE1Yb@Y@Dd;h|DwP1mas-m4f*(Y~fQ-$}a&>hUXf^|{ALf!G%UDK= z$Q@=L+QG%i6DQ`dulWZuEi$WTucvQ$g}u>~`IM2r1cH|NTxZWGJcO~(ld`NDH`(he z_;D?B0G3p9K5M}o$ND79og-;|=JvZm-EjF9#te|Ck5nHEJHjL{^T5ph#M*Fh24|SV z7~G^mQL)DSa1bKyU4)nbGEvW#VH9+Gkmms&+wKbD2{vvZ-F1wbCXrYJw_0g5D;hBp z5A#2<;gI}q_TZ|NNJI#{5jL77$~^k1H;oOC=!|#qe-i-fGJi8;Uv+2m<2*O;*xCFj zzqHkmZ|Lyw!4*9=9BH$ak14d#6 z-7pgM`hQgZZ&=NLGaV9Ul8~S^WyjnTJ>b%Z&uM{w!*41y{`kH&{cKou>FE^f+2Go7rBWZRq z%OY6r!4bRp$jU7I`S+S1X#V^fGc)}fBZy0`cs0Ih>e>>ECrxPkpCA3`NAJGA^)K#( zyTZ`DPt4v*>9fs*Ofj0e=gpVao0)02fG$mQbM%h4d&JB2kX?!QxAfj+)$@C)hj52a zOVPyamyM@oLaA+*nUDptY7=>HN_|wzHHRL)yv7nQUw$qihsEGCLUW5X_<8sGaO0O4!;xgf>F9#Y~*KZxa-PY6IJG;Ad9UCnRnJf+K+8gNX# z*oFowt7fZw^UhmFaG|oUt0%MZs8%xital=?N7YD-P?4Nu>~;F^Z61BMUqBz|U6m;Q z^7i_gC+j{*FDVyVgwAoN@2kxe^fd{q8$U|F#qj;zUmFR@W$NDfHs1Q^<%kjkzapp0 ze17UP<`o_z5tR&Fu#-5*5AG1k*g0cg#!jQTp2xgx#=Wn}`wm~zekN+_R+E?mdbYSS z+(5iF@r5|X%lmEosR?qyNY%sGL-f}hi@WmUMulUoC zOU4^kn_UU_a6`Yz>sp1+=YVWb{ZcT9##^}>VR2&IAc(6%r9EeXsm>NseY-7$-YjoH zoTJTzlsEMMo>LMV1os)b>>viSwgA@Pg?YM~RdbvXNG(K{*CSEG8GzNSsc~n87D9zA zh%Hw?l6Bb;>^aZeAb=dnTIPtU63sH{A=RRD_~RO*K%O2X{<;Om*7RkV8u-l(dSMbJ z6fzTfZ8lskzc=XRNrZHI7ype7i{*b}3IAh};BaOa^ z&z)$NsmRq6#Y;V{kG4r8i7t<_yQtZ&4;~4i@@Pqeybbr*q zs`yx{+uroNu~fenq~78mQ%H47=j)3-f2vSofa*=4acNQR6C{wimY$!H28i`6y%^C4 zSYo03Jf$uZPbNK0*cvAWD6!^kdjCI-{;#dA_xjsWCu;jrQ?d{tu!kzuGi7(1B$n@7 z&w1vdGKhg`K$8M2|AI5=o9A)hHs(*v#d;6^QY{J2V$PKm#012eJw(K4C`f+TpvMz( zu!O)8rSxvB+E8t=qhF?a4W9dn049>GUh_&V1{hTq)8BYX4Aue1-+r_C-tBl~1-DLx zTd{q{G%aW!>6wkaC@gqp+T}SvCmlD19|xLrZSFVbTD&TxU}9NmE-gZpvDJ-T-jPuo zsL0VWT9i#=`=@q;U1V*!ytfi195_VWnE{3`q)|L2SST8)-iPG~Qc$LZWCd*_{Y{zj zmw$sJNHNJE4;O^cmFvH+5{AnLmWU0Je%1gs&nGu3@nm7ra8S$w~ zb;uvyh%(y(tN z+S0p8lw{z(cfzdufz#XiO)$+eQ0$sr(c^@R)eXNRI_gf`gUe3oIL~;g5T(*}!A8 zAqK9x>X0d7$z;iW3Lh1c8UG=uNaNg@Nb9)o)Ii>%Z#;CQsrT^&i<{MyiXTi-VJXkNmY9to*I)}ZBFqb@KI@4u@IphiK+YsJ?86)Qdy&!8v zITmx^Me8rPd}Ix%y%a|tW#4gE-xPuTjk zF`P(&T=Q%syCKKo8{qi@WhU*#d-6x@vY&KkrwI?LsA#+zQbHvQ|CUbDQ@01Ekhn+u z%||d5`tjn1?@1;>+mx&x zAF6)lz;7`)_}(h`6^@KZ#cfK$9R`@0m;!;gFbJ^AMI?}#FVO<+txBzsTW&yT858C# z8A5GA3EBd4pf7~sl(P5n0!3-kTjgqdFr9=^(~iu)1Qi<3jYp{%>{tl00ZY=PVpjs4 z8iq)dz$4pP!$8_e4TBL_)G*X`^uol5wKL&k_|(z_Mi&yJL7o<_6DVDmd?$-;3hx3c zm<(Y|q$bw#*n?$99C9gV(3*_M-UOuuwT;S|EOr@-!An!MsBHuMS`$nSO5 z___>i1*t;5gLPTx2dS@sj-8LSS{4NR+6dx(h(j)BBw#G6y+U1jn#Js};(^=tS>^zp z-0?3xg`ty#FWTIBy#lcn6~}&OD1jC$Lq)V?j349&itv8I*-yL2PEn7gT)ej{FNPmY z%eCEO?YI(F0MM7=xYG4B;Kxy{0=)XeT2!_Gh=J_OWTKG|-dQrCr_{(7w__SIcv0fm zWnen5ub%||4L)gztcsgJqVNW?t;$rctDzVWH?A9T(XSM@S3tEe zt^gK#w@jBjh~>UDT!8g#Ec$GRB_YL%(C}tF^*lEdCSGqNWs{eF#9D3i^(oT8Dhu`p z<0|9{Uo%f>fA|zOgQRiQOw)X`hh}TOMVjwLLod>Nv&gr+E!T{tz2alJ#Rl)w8lOH|*!?`rCu(8e#8bRu zx#b4)O0t5oG#SlYZlZY^9rx0(c1N)8n}~o#3f8@2qp_ZeV67xu@hYw51EaC3BUty* zu`HFA|0o<9$Da`vT4MJx$t)j5Ng$VsqW!jTzY*kD**1JAQZ_`(jSIQ2o_x>Kd`;w= zh|?F+p5(pQEF2G2VKb!gKC-;vZo?Sn7#_itpZo{o_YuZU(fFwv{_i{EHyvU4&k#P; z#0;tJ5T0Ht@aG;CbJk_^aYu&VAj6 z@HqOybIg_Pik^%l57sADVMk?r83_}j*$#pV4bpfi5G@_1H@!;k^!S)r~FAdRUTuQ2-As4EPpB?JCu+YC!(5}V(Kx55eDmEJcqFhfd%p2s03&S!-*7P=0h%=gh6S~qb|Me#HT}!W3BYWr?Q@e z-Y+#j8q%|kr2@=UETYpC-i=W?4P)7G4Qga}v~K5Oprw>|Po`+u$3;p{l~J5$l*T#b zH{dIdCIYh!IoZmAQ>_JO+fL?MY&2lU%^1d3HFB_B8iyQ|7a=B%7PMU}r2`1@^Qx`e zc>1bLFn2(mi9LK5s+ksjY&X&0#&Op=rQaP#hl5j?%ppB(P`aHsRx2Mz;vp@c=Zljp z%2eNJl>%&@Uy!1#!QkNtz6Rq=3$t}H-kmeDO_L}qLV7yt*80b2hJR!sQs_}iSuWCy zd~JOo8Y7^@r9G4|d#{cWCTXh>6cVV@!!9NNVg08fEaqB#T>^*k_=LG6MOl%+k-T6F z({CfrxRs=Zbs(~7DsnA+6n{3sUZ@cMlD;zN>l6CAjK2OvU-!`0F8W$bU)$*GO8R=8 zzAmA!=jrQm`g)SShSS%>^mPS&1?h`khY9=XYZ(5tF4}Yz{rEOrOh0#QqC<|Yw{D_S zjIA>_jUmsQHeF9Y6`R;G$4Q%L>92MCrVHq2>?S(6*g9&{3_`hT(<1uG*u>5)4%^b@~{4l#-K)Y3?7olmO&kiNHg>F?{b3~*w9(3CH+u1>12 zhKGpL4s4kZn_7HjuD*`EvB1xk2x!p)i*szH5r!AZlAZ;JZ1b?cZ&&4jBM+C&(!Xe#l6J7$G1Ps5? zCfo^l3=jew2aLPPCd>hR2e|iVHX&sy?&kpdOvAkzKqKHZfaqA ztOh&-*bLYQ_!^Kj(Mn0IveJ0Nw{o`Grkr z05INB-{k%b?(YDje#yg&@cS^J3Gfl19Z){YCj1H@0oDO@H`|0{K!3ncz-54Jz*s;r zzyX*FxEXLK;4VNl;9kHgKs{g$;17W3051a?0NVh~fcF3&0uBN`2ZRA_fD-_9Lks&u z*idu1LwRFRh(d7o=-|RE+A+n<3P&<6=v_ToSgwFsOC7og9C8VkTJey!TkeNejjcxE z`~T40`FD=&df0~Vhcf!z61H=~>!`Dg5Z;IeNF^NXN;r4>yws{v&uUs!_2Q3Qd4O1> zHtb;gFDs1ICol5$u0EOMJyHVXeirL&jAv>6qrt@h@(t!^+r7ZI*|i zd%?_T7M|s#0?9sz!WiD>vInP}s*q2EGcE=oz1Z6DgCfp54I^J^=zkfkP)o z4=x#ione-j4*3BDO+tqdIJopH5C?6Hz>D4Tb8mC`X(u{h1NRvaq#{^&$}U$@La|xC z)5s01tL2#@m0Izll0z>06s-a_D+g9cZSr0WxnKu2QC|2wHV)-wv?y4VhQSV!)6a7X zh2?LAX-Zk71_yH`Sh*|3SxEV03Ang2kxq={4i&*smPvOB$GGI*;z%)U|I^NU)Omvy z;}bf@_`JsE!VY1~6rTaV*xUDaSbX|mQJkAz0s7}>AOjPE$S7T4AKycmSaVOtGAbX> zZ7XqR43FL5H3m6(3r!DDe4`6H%=L}&ZsfXhtky1HaF#%SN0M(?^r7M0Ka_L6Nt%eukTqm6K0nhX&9&#wg^BpzgBVQ2_o>}Q zCgOL&a^wD4*t3dzRR`;hxA-?&W|Uzrnjq%qiF3!pOncj}(Dtj=9NTKJch&A4+nTJL z9ia7H*mG=|T_%kEB?e@$AD>#k--8V*W~{xN$lRVI4^WIbu3docV2ZJb*Lt-Poya_0x8-_K^|-QLB_J3DYh?O#vZm+#6r zD*JZZJ(J1aSL>Uow~cvr`MTY#0$0V!kGxCQZt&=@OCGp~UH?gAjwwi6Z2-aMmX1eG6QZ=Q~uX!hTs6rJq9 zSIv@5ilE&1yBio?jK5dSLaSQ<4Z}41+$_IGti4ltlLEQ3&)vSe?7u zzPknKMqViP-OE`Zx9?tn@9($i&g{6SGQv157_lHu^_PuS9I^xY0+o%fU8??@}^IBt_F_T4W52Es8LfPN|{+ZakG`|i`Q z-VHQt+VXs$^80@K?(b1KMA>&2f?$3#DEEkc_exfTJPp%`(|1_p`5)}Nk0cszg2s=w z@7|Ag27Ziv_y2^DQDon}1^c<^5`VOP_st;igZAAc&DB}$yW?hoJ2;z$QlF9npjqFJ zY870l!}wOU_uj`bJcNA}dY>JGAZ_?W{Q<9${v$@k;=BE<7T+r=p=Y!Bz6X}XaWf-% z#h|*Os>OF^;~_YvPBL$zxnRysn#FfBS$yA2W2?JN!@s4oQM37dh8gM9e_hms6LaN; z;RpOn(FG01!GG9?#=tF6+SBxvUcUz^#3Kg|I(sZ^K`~6BK`C9XN(>eA#W&p1#uI{8z|2lUs8J6!Ku~W<~&;O~;kW@fcZkj1Z^h@xHL+B=gkb+%##DNy2KKX@xi^J!f7f48j*==FG#^ zggop;RPq8t&O9T`!CT?*!yJ5pF=w6?_i+%tz?w61HMZjZCErhFKgr z8xSV(2PW>v{nD%G2!}I$ML|kk93m1^D6}nAUyw7MaYK_15YhC-5w1|E~_bWl=srmZm7O-gA_6vTVd#~wruoA3R4 zCOhhq{udZIapHc+@B%v?O;R(t1UAZZ=47HeO|ampT&*DJm~Il!GZafGKNIZ>md$xa z(K8TwXKIc!ef}KewjNC-Gqe5xaLCO11!6&#RA8q&7zK)%_4oq_!`juYG?E|->Pu_>)8I>6hR9?oW5?0VecA>s$f zy#91#*&ur(|XXX#K{I}9aCkizh-H16mzjSLlJVuMKt>;4NacG9|y)DGZ? zFLV#BCe+;uyZEGg`X*dGK>GmAgHdG@*g1zVA5xNMUleAQQcV z&@dlm!|$!ffZ2jrGFu!=W=mqpY-uc+RmYN9O)Qu-+|~13Ffgc)3sVf}bEeUlM281E zXf?2hs~Xr=C84*A|A2ZsaK=kar*`-`m zO8F{mqN{gEf5KtK84Ag)^RrE?p5)R?OKnebp>kYK)F<0| zw)#XdP2fxi$26t)V=WyirL%ZFuPSu#ujjd(9}_MY#Dq&mOt{d(Z_k%YR?l;RJ;H?< z3(dtHU|R7_nyQ@?^uu0KrUF8y$ zAqhz9co@u4}|O9z2BAG-GPe6f6f<7#4(OICW6`)6WKwID6N`^#~V7&vRit$x7tl zysN7l8t{u}Evg&dVjn}R8`iOp0o4sV*+=i{hUe(RTs!1bR>;eGUP9#d^q6p&5fd(z zG2t>ZCR~0V6E44q3722Sgv+d$aJe}qT&Bi^%e0tqxg{oCZjA{SPfWP{Dkfa2V#4Lu zG2wDsOt{=06E1hegv*`h%4Hi29Kw3kOjt#t;YrjLk8{3vg5&s7!L$lHj6mQWHe8#S z1A7Zw>AIq7cwZe*e$Nrakd5RO zy+GxT$G*Qc+~Qb|V5$uDvDgdNfKtEuy!yu<8&0G8NkPsto0o9yA!n7yAvqjSzx`|P6BphnfI zqQr!yd07$~F0c*6nC)+Hdl77x$CxcWbOg5d#+dEXxXK8&bungpC1)$fj4fNi!0H5B zrZCsOi2IF5_KKMCrwVOeb}eTs#f&Z4k1{W7#KlCU))Hg36F6HkH2#xscbv7UGA|>u ztw`<47_*(q*#=|G_6vT9bybYn-p<+H7h|@^`RUo!F=o4zv%NpYY>k}l12JYxh8|FX z?ujwm!JO@HV$AjrFwcS1J{U8$q`c;3nVfBX%-HfC=yiT<_MsTFy`HmuIL2&4`~dAE zF=lJ$Y#)s=+XMVy>!KL5{RL?b{PfyUlKGsrosUWz9({0`s!U_s`JZ(wS%IMvv>PCgAg31&rTvhVrhj zJga~|MX{YV2hGcxxwfoVg^XRkcvY54!TE<{nUZfa48s>y@9@LB@$nO0UFkL>Xpz>u zYzto-o~%lxvhA@t%Ljj7a<(sYW!uBW{sCVSez7at9!~8^&i19QYJv} z7r@`@%C?77YvXJ;b!FSbslAM^L~riOwue*ePTQvwgKI z+a6ABDPM_h=*qT-Q@en(-Po0F52v=0uS9R{%C?77D{{8my0Y!z)Xw26(T!c%_Hb$+ z=WLt0vhCs2`uR%q+g;iAaB5%RY@55X?cvnc^OflBUD@_mYZ zGuXRXoetCVfc`t}=B;s>`3$^WM7QM{s*C9TkKc53tp3McHlgHhoA5`#3rlRm;H7vA z@*cbmxd?AP;` z1kwO-{}yjt0&Ks-JD-5zYi+_>K>sK4!UUiL;QhT#XazX_U=!X1-1HRQ&IDZiG~Vb0 z90j_~+Oj&0WHUWk`i@X5*1K@lP=>-gZ9(fFC1vu7&E?~?H$UDGC zfE!-Ko1_5yODIpk4GhlQB-c$u#vJrU=u)YQP0dbq~W+xB$Z4xeh@Ljij1^fF3`&)s(xhH+5y5)~D z_hb0mK$imEqB{hkHR15cC{J9`dp@N`NhjIUT_E0uhYxRQK&A*e zMONQ5ryI|rW*-bLNtKFH{O#j?eWW71a%*go6a9x1TYK5%$@8fE4Y~X0rAmolhfqA; zs`nam3XO~O^y;cVWN2-|LnW0{K@zWBmg0#vYqL(rb2`F5OXWXNDzgN3c?%NLRs8)ralWWW@Y zSZQsJ(@m|!lXH;A;c6~CEx48UQ}iQt)s=Qgqao0Zc%O_hnN3WN2Masw9?M@*r{#zC zmE8qo`FMr2Thd!&I58f-@`#LWV`DQ-%y?VV6tfep|N?!O=E zFVhKbdDornC7RlU=D=IDTf+uMQH7`GFKaPaX;h`yTDNKlJG! zY9ih$m%*2wcY-N1LrBPy(9jl|(C7-Sc$>%&io2ToppC`-HG_Y&;7fN%tEk=dyoN^5 zAwTvfB5x84EHj!5tb(+I4-Xl8x5t8rcKHoWghA3n6c;a1RY-j+ToCATC!Fn6p^g_? zb-!Iv-fksfXVM@L2Q-nICp_lAOn7QB15emUKE!<(acd$_LHSKH|AFO{BRjQip# z1*b*j&#+J5*U{mYJq7`p7Z*gr-yr5yCYSu$yCgN9S~ds10Rzvakkca|L7v0(&Rot6 z%4xhJN>66Z$*W!psU`;9rX07?n}lNeH+IXAr_6r@%J(`HW1)#!())=63e?Veh6?%D z@3Y*uBU08;wzr4Z&5)CLj#exgFFkAmV=&S0)9*uKcT-~hO(hQbU$>+CavG$234!u= zSslWNp*ip>zJg_joIYNMq~~2tg#)j(8Ku?49sBebmk?Kanl-ZyPx|Pky2FTr44R~7 zP_V=x8bhFsE;P?5wT1i9J-yjHsZ)Y3L(Ty25UJ3*S3bTcU1xry(Jtp<7sDl2<*)>? zq+dZggy)%;5nBiE3+1~|tB^O8;_KU#6q}gf4>r|d-|gYG;ORn9$@lFctrqbY_-Kl_ z>U2_Qv={y(i=IsDC>OHdh87@^Eb(-q~_cEdt?9Z-nZd7 zmQuC=Pp(xT{#_YRHsj&L!p)@CQt4)=lp0+3WSQX3?vU4)c65k^>%_v>#Kr4Fg-?0q zG9hq$ae~x*f+|Vl#tYD|41d4oDszJMQCl0m*p025DV9ugR5BVNAxX0Q>m~U(t%RxX7jdQxh=j5JcI5n z^?w`hbxWxM5>lL2Uz?xZ0g|!+S*6m~^i8=`sUo`A;*zHQsMd&pC&hZt(8;#EqL<0^i=kH@(ZJ(qh!fs@fvhj zW3rFe4MqHs)#EPqU08jWZk{hS_nXBj(zMrWG zXu}JQ=^~y`T#^w=co2CZy3&Hh2LBF=n8;s^6qg!N`Emw%2YS$aD=mN#nDVthV=Vwx z!9+YsVaA8(Fo^dU#Gy1+oH~8Gl?l*ETbVo!EkiJ<{L`#BA)>ayz#>#HF|Y=kyurXD z|LEwz(}A$EmA!RBrzdw5iL?ZaS7hwI4uS?<12TM`QEjVX?WA#_Pm-c6ll2=WzlZ- z*Nnz56H4DGvfr^3G(U+;%Fvj%^g5+bYH9k+fNF6=uS+V#*H^iU!ZN!gBoNdC71=o)KjaL6x zI^V|o#c%@eVF}_=r+I zleO|`F)yz}^URBpp0%X5Q>-Wanr|g2iMf`hP*RX|#((m(Zv?t0dyuJ&BUrx{z7?`z zC9;df5t(jDtn8IIJ57OIOOvv9iHt;RYRyU3{F-^N`3;d8;nsLIS;RAQ3hVRHvYPL; zfi($5En)6nbKq(w3JGW4W-4ub70vN3^L_QmbaO3*fi@HQVtk)CAO;!c8#VT4(H~gz zs2i2uAO4QyFp2etK?D;lvHlBu1g+KjePYl{eiN+tWO*ED6oWE(g^&s89)@qHk-t5K zS3;@SC0T<3kM8(%)bm{)X|=yWl?=Z?4^P4L-I!0zbi<&=I5${}#$k!3$NV z52}h1%SzE@@;95rAg@zTAxy+0v-Ruf!)26MuKPn)(Ja;PAwRc43Vui*|Y3n)DkrG5?N?&%Yt~k*Gm2`Tmj2$=g8;Nc%`ZiZ8OitpkGftd(SOBh4DG8G*+6<8m391=p&nARcyy z#8M;g!|tWR*0bhDXhVS7Jf~g0={g#Oq_ke@Nt=%G9SdXG>~zRuS(wGoY7a(MA7oP= zZAL_%ZF;Gms7So!tRGF^^{hC8W0*fHk@`I5e+YlY;CT95UxL5pK*|WUUZH~6%>g6a zTTu+)@fr|<^+)hGcRSVa*;gw$MTz2>$*aCw2`D{9{Z96KQ{_?cp>8*#TH%+j=DLeA zWQvss4da@+2;{^7>8ltZ4d%J&Z#+GA35$9R4 z7?2{pFPBW_OFlC(Gjqv*!Tbi}QK#G&&MFhmTQ*|w+vZ7=Z3rF1W^ZcDPbUe2Q!KE` z0fq1rAe`OEyyhxiD~Oltn6!QDL&%t=*LWxS1={OvzmaJl)7y4P5w;ChObEa_+pP4jZIf}MLm ztvk(6!F*kKK0YWaOC1;c4VKNp2zf`8Q*r)=HE2I0u7zRL9W za?H)HFTp$zqhO`M2^=OhDnWBal>&XFQZGtOSaITk_Kfhx%Q?v=XgXRIkld<}91fDL z#US|-v3ybs|E&_9iSTzR{5}e=(ZW@cu0Z(n6n-uu9Y~N^4{+dT8R1J5k*-upnrkmb zYo)Ng5@c@x*>HdONoB{xAf+>W^fI1~lWfvX>A=I~$E31DRYHZMDg%**sQazxDN>U7Lu9ck$V3%w8Q}tj z=%gs3u46>BqUvH0ou?AzeaG30GJGrtmEgNh*?C->k}W z%D)0vS~H0(V81hQj*&* zitM%0DA1dY`W7tC%-$DDTnVC~;uNTnfDs}l%xwBBx>H4Wn&?g!7i5U;(ZrDiY{8lp ztvnmiehwz_+z{`5`6y;6p#&yg(HPR<;}S36*O_=OMQ@~LF5ui{McxTz6{xKBCXQO^xdc(63mFSHIJw;9JG+63GW#Xv12ueD=07^O*o`h$K z;AKSNr33F8!t1Z#$(VvE^wu*xrFu9jfSF8~55qge(mN0u6aM4HG$o@_rpZJ25jct8 z+6bKnT9u>fgUS;RDu2J_bVvAUcoN>i2;LZlpX{ipN&wy#!n;h7%O1h=MA1tGUOnMW zQRrnv@Qx5(AIU}Z^uW8F@D3<=LIf`*ik<;@g@hNc;O)n9f|4I=qUafccRt~X3f_hY zUJDLQs_E?oyno*eyw~AL>8*?4O^%|M1ibeMFGry_GlI7;iXN?UK23NxEA&Q3@J#yL+Z))jXA4RVZ@U9@dM-{xr2;P1in^eg!cMQ|TfaZ!2EOIJ96`vl=GMgXr~DOA03E>vsVAaY)=IR}$- zh~~s9jSx0z&Qx;#XP6rId~$xRIWHjRUp41Ya_-TbY2<9uocIvJui!8GEdRoktGu^T zvR{5($wqC6brn)@@cMHc&wv*1?J>~vH)RH~7-f+hSgA0GaiYx_ehfve3^4AaQlDg% zx8*?u*D*d54i94jVE`j%mtd=5IG5>>)14Ns zq+%$Nc?8Y(a?;U}PI)(Wb68t|jjk5COikPmj%3utiMA97#ruk?G^c1!m3yfqeVJ9R zs5ScfBAPLoFgl%Nwab1RghiS+kw%On$;*zBhHSbU`TI##rc=HebkrVnF#41GvuG|7 zN-Uv;!Qxc0I87{0XQKu#Egv<|{G0WAA+1}k%79!Z`7>--sq`)ZJsYDZ7N>*~^FUGx zu*rRKsuX0C`|>nSn|1bgr|=}w4kPbnyB$^YC5-$O8kCl#qe3YiY-;!hXdoqOT9go! zsLhxdbe|~B=Bz^@N>qtSHbv2+MBT>dMG{rd66H>n0xVI*JW+fUdRGb`aZ3>RoD#K% z66HFirHbo!$d;xPP=2Z!i1zgG&8UCKgkEK`I*O*8bIJb36x4#UBQz;-wP9ou&LvD` zq)j+w$NbI52+b(D*y>)H5d|5x5}NB6wh1X02fPv~O3KCgcrE9D$;D>uH%6<*C5+yW z&&4uX#16mf2+5Cy$+9-4gQP)}$9<4};YnzyC<)FemXw57F|Y4F3FoHW`Y3v&2)|_X zB1t$`?Iz7d657=yoH{cJb!d9A`M`BM@C8jR12WCP?ol-FzC8`(FV1l>L(4L0U;(XXf7sWAqDkRo$+>CD^V&;;r&giH0h2s#8uyPENZpSPs8fTs(}s1ONjQ{;Hq9>YBb?g_2h#d9 zg6Bc&nYcO<_X)H)KPc{=9}@SEFDl}iYk$qAz;Z<9d!{Qg=aW32pbsT^{;tM|niE&) zsJ%^ACE{uZtvzElES2s2A&L5{^v$&gXaayqx0Z|HX^KP}uy_}qq)6mcV|cAJ@Yqv< zOkx7vjTVe$(f0||@IwOCzMy4M2@_~fM4%g0frgSmZ(-CyS+re^;T=E%9jcIAI~`T5 z)V@S>@Pnnc{)a?5x?U6Mb!rjHc1A>cd#aL0D{~;yrHV*bX(F*ak|~ccmTHk*szBeD zM?a`WGc|z%8>#vZ#h_g9uBSGm83Z>)h zC=D%vq1S;-7=Q1q;JGuT6Rr1DM00H`(Q-9V4lN*BpD47RQ&G57GD*csdoL|kYU%T< zXn4wjNd=~uUlFC=3ZYZyn2qC58qSi3;?^+V%6wmWdvF(n3+k=4BPu&+PYhQ(cYeS)QfXkKR- zjz#h6e$`7EePV84#}J8i&NPBLMQc0SqGEdZYb&x+oj^!M?IP=)rLt3e*DU-#3zwCx zwxT0yc$>1ThIY^3KVp)0Vvy#-xXa*l2l-ghZj}3eak_)nvL8kL3)g}YdfgV@=y5uH z6hQk}w;*)1|2Y(dx%O!q8zyX={7IpJ^KmOI*Y))cuHEPDx5BQw&Y|=5p{?MiIGlv| zBD=9Qen_K#KThiTOnibU7*YDyBl<{+J}dp4<)%P*lCdGtDnAo{}p zBD$c1$!;F~wjUAQq;SV6+}7*BdfJbOo214yU>lKTi+6JMri~DSvaXNAlLlhQy00)2 zk7S)Uqk7XO1!q8o=Zhl@r@0f3IpFF?*}IeQ%(aK{7qT4!s?_mg^A!pazK0X|5Cm4A zYkVzdEL@*AcWZq;RyqE`vr=Y#) zZU{ZvzYY|!ib_c=lN<67?Oc;MKqY99wpPVB0v`gc*M`Zw6_ zN#TX(8vRWxs4tWZP%Xy7g)Ww&Dp>73FsXw&eEw5HcctFDLIn~Nk;~vG+ z3D4?Hlujgf6sjrKDD0ligv28I6}%y=1~b)B7dmKS$j%5zIN{A^9=^+{n^T%Dqf}<} zu;RcR%#G=boXBXUgg-D7PgZE=+U;=AKrgDnQ(~1M7TP{(gE=AO9|0a+88w1?0}zMda8hD_qu1m_Z2}(M=eN zms+CmfNsJ{l(2768eRF>m9S5{37e^eZ9gNdcQuqz34IEoxC6izbixmlL(8XQ+HzcY z2?flTMYiPDdE4EID^mEY7ES^_md@fVlqZ! zf*S)E6J<9Nd2xZVyaqnuTY<}a)7MZt!z)0KJ5OQXJ$#SmH0*@)HqE)7kf&?Tj9fU& zG^d4}<22`?>)_1NoRcYZnC5(nNcGd4YsjhBoDY)oSh6bBN^<^PbJmjcBh9&poFUEW zC1-=?yp5dCYR*~Yd`xprBd4S}Zy@I)%{iHzw`)SLok&Uu+2pL$oHvrwt~v9_Y15op}=1d`{RdX82 z8Lv4{h2cEjOHKX}a(<~f50P`f=G;xrU7B+_ASwhZyIO!~lFBOMRmZ7bfcOE-tVniT@Sx$@)(ElpKSZYf8 zb`xPzro*E|xG*{b&4I#)F?jCE!I@d1MmUNdSmS_hM+m=!2sC4QbB#J@?#t)2Y^T(Q zo$Yg*H}}u_7shr)hp;$SVV4JGfb1irybFKGNv_V+(XVbhdFewYqA|JJ#rTq(W zlsMlIPC?vAcgFWMEMkI$O=;|MV?SjC4r_+LN#w$R`?%K5d1)c^XPB;_0X?Vb9-2^g z3Qa6lkIIyrX#FnBi9-YOT2SVDB}s0~TOF9&om+ljJDiQEC6|>pWkRVrBhEa)JpT%| zJtEn!HGrJF|23+;VbM2{;>SmD}iwG zbd*`RC7x%NdXIr#c)7yxg$T+Vcrm7gmIf>?AcJdPGeQqliMI88lB!hp+PX{KFHE+AYO zLAVZH%97eiG6X^kxud_VfRECoF$TAX-?U!ax~Ze=`Tna+nA;WtXn9p+u=nS7k*gF6&-m| z&OS{D|31JGS|SLC;ics4GD6v>pgbKx*%CqdfKXmiP?kkdic~f)62f)lLh1ZmMPOU4 z&S8q$Qgsg6Q|SOznsR_DEu4TjU7Ng=@PkAN1u{^hq^_)9qf+~x1!2YrJaCW)mn>N0 zpk^pt|Lw{yHGHum__~MGhJ*HqlT=pUvt`&_nv}Ae)D5eY@Z+Sx*cBVAvNG3B*^ey1 z{ESw;*-9vQUx~IVd_4jPw{HaZ&xBjH6HPTRX_Y(<$TWWoZ&8rHsMnO>)W@9g5v=gb zs2+!Kj)8PyFBR5j6sS&}qUyqf=usgHU+$v1!Ya-Z_>v+nk5HdT40%g(7)!+AG2{ly zFC!@TfQQn$Z6TD~$qkge2#SGIp=3NpD906)^CKusQfdSV$wx?g6{L0utDNt#a8`6w zsDe=96qG*$MO_ocrCj+MG)SSuTG|E=vBs3^(b-q%kw@wrCIzLWAf{3qdlFmSt+&$Q zf;&|~yjLObXhpk1a*mXeXo>L{^l+j9LMx;$8wK{m z;aN)!tv|HJEoWo=Pi-yVa(|uO6JS>aq~K<>Y0{QP{Ket@6Z?Y(o5b2Vu?&}CXaX#; zO9FJPA1Cj^>q}x+=x38Zj)G!-H4s=Fu!Rn-SbSDV15%5Q{rOY zW|(s2%kbECK)+)wzaTLfjr}b-rb4e%z9Iks!AeTSViRg8jdRP><%ZRr68kIc*q&RPz?7po4+oUA z#KL9`AMsv&W@2kE2=`vcesP`I7&?5^Je+;`V zs`K?zFGi{Ne3lmFvg;(~+O_Y2rCAKJdn#_MYH}e_)47ni#l*zJ%^^8X43dQAZASms zCjURJt+nhf(@{#adQ(XXJ_Quk&aI;l7g{xT7>XTiXZM&UQ!4olrFuJk^Giy>8wkJt zM&@&fzFBi91^I=UY0RIbqXv>)r;?b|xc9_dtkJBcc+f0<@2uQ}*0UVfxf&@NTDo6^ zc#HYadbEYS738;H_yrzd@*JmuG;{H|7h z8=zy-J&;05>r4*;G7YyfNnP`5|o z+|K|u1Kg)zkLN!&VaRElPzbmUa7_p7>;U=-`N9=|2>>2Dl1vJ>X8jTEJdFrZr!106c(IfU5raLJi=LfYbqze5brq%b>g8 zV&IO24pre-#cja%L4YtYU$_iV2)G3x0$v5|0+6mA#_wGz&<#K%;BSD0LHWX^fT@5v zfOi0g0oM%97bXD~0GOYOKsI@W%EOlcT~VA6f+)PqW`EL_m#1!L4nqzW zTFC+jc4on=Ip3#~YcS5njG~iy9hRQX_zvL9Q&e1{2ZI{Mp0 zhvswLd^QFb>cfA4^cz!tRJ{1$!noEuHd{1=Z%V{*!0<$!-y`?h4#6sn!F_9)^IpkYuFg?WxeK%Ej8o|P8 zM=E@M<*yNdtJV=dy%}S8C^AYUm(}H2%jMe2@GYuX&`szISuZ-C5a;dfc?1cPry6Ng zZ#bTygU?FxnV|X@;8RUL*Q!27_;|_ZV(x<_yrw4E;6JSMnvOT6c@sUiA+&V}PO|m( zcnI-SqC!3mJ~PSZE7d0tJ~xohe$}TMJ|*PS%zaKI;9!ja&ph&cS@Vozo}Lc^Co77OKQsA6%sbUQ!K$fUMuFSn4e&^SuxV(@@z&J?4689 z6ls1cat15GFoagrCRu`IZLr}sik61|>1iOs7jQn23h9!LGE;6>neWYql(;Q@64wc#aUe zmw<(pA_VWS%Y7rUA7-%`>26|!)8DVsIQ^Q@AQn3`4j!4PJECPUbnNkbLB6@nH=Rpn z=q#CM{l6jmpsw-Ok*}Wdp$JiY4im+2Jkq)(ld^Uk4wEFKh=Vh-l=)y;rqnci$BF$z z8ZTSvxTuOwGSg=aru z-VxjSYG*;WC#r{@btwuG~!1oxAP-$JuGo1 zcxZ|9jzGes?vwO4!}lfWZ5~QVTD|lNjCBCLuf+Hhzs~~-@$CZ~2K*b41mzkE$N@|R zyaYf$-@D5{@<4X0|KfByz1|R?kZA0clx(7|%YRpjfc5SPDX;`+>DcEvM%geL!tm3yKMktPE0>Fk6_sm`TDeki zHbHIz779I5xga0t1&d&GZ6sC@q%u`2QCmoO{EP5&qpB9Aq9N*|6xCct&gfr~h5}0W zUc!}k8fSvL&PFWXSfme-Xr{jfJfN}@`zZP#kIIZ(n$ht&=dJQDN^vVJJK{(gSUQ)a z3M$Jme3353a-b9kmU}qMJv_j_1jCIKkCAd}3sKP0S&4*p7Kn{!Ow_8KStN8Zq||~d zUg#1+f(hhAY$w>$r*F4t!xY$dI_Y1EGEbJum11gDx`BKyjkF+@3Tc!xSeYi#icD1f zY*Xv!00p;8E4gspA1qe-f|(a1cP{L;2NhW`%??h>k4tpN#V*kQL36)al!e zT1F{F?D9+o8v2KH@KH1yWeH(eOVo$?GPPj7q-en6D}iczz$hkl-OsCAbTvC0*+eM}iUv z`**(8GDWuLRioMY@`*oU($VDoPNPB|%j^O~JUJ!}HW-js|5_%M64h9CSR25~x zk4yRiew~{a*1o_LEG8#QXmV0Slaq0t^_1*aPE+1wDEb49TT8xc;LFMdiiWDe)C*y2 zD6E=?A>SD4obFMX;!f#A9E#$3kSJWQM(L*FU8sh2=FEDG1T_pT8Kg>AdK1R#tN%o& zqf_g7F7<)8XQ&Jq>tZAaDbb{fB^lgc9B*H6FqNgBIMEo6bu<0x{4j1YcIj#w2-5{j zreRb+U;3n5QCv*hEJ=iWmsF&jVzeIQ#gdZk5sX5-Nb z3%>FL2nX}!Ye7y**mMVekdWpgAFS*x6d$UCTYSg_*5ZteI#+u0^7Zf``#r(CXZd=I zOEQ{^(sgwYk#De$gc4V=*=k)i#Vi{mmB1Wyo>VegEE~^um`kL(r&!QrZp~6GvrBcm z!9c%Dze_B;K`O}<%WjlPU>|y#RFWZ<&6Mg!6aTVVQr%|u;UV)uy+^MeNjVcQPB*p2 zi;GRtUnOJiJ1`P-QtwNaR<{xA6l1F%W`S99UGg(`Q(hRwLW}fW?sVgVn_H9A`Z?W{ z`<*Xw6WI)EHE-IF!pdE2^u}+ZVIeap0X!wB8#RK3z&=;P|!L#UADl)fr?Bl8d-xAPZsRRvyVJX!)K^1HS2GJC8@6L<1j`i z&bHFUq}li%mg-C);V|TaZj8WePn>|=5}H-!e&ih_&9(ZsTijBPc)fJDLAshYStc4p zm|*SFCn@wZ&qANdQ2eB9?b^?AgYcC&^hiC?HDvzgC%LM;2gTri^J78 zm>NP424Yu>13;?KwPYYJ7%D3zQd2~7bUcxqX-7=T zs}T@?f>CQF&&W?L3XnsBfP-u-0wr|>_(eGJHuBKM*dtHS_*t*PZ@(q6S!S-^@4lD@3dl0OWn>ymjlT2m~Br~=pR_vIf zQ8ClWFQjpyK}=)@(z_XNNJm2n3!$BIzdEvvjD1yEzDtK+va=3Fi#9IJ`WwtY4HzE- z8~bk#S>jbo#gl9Z{1`@-mGL}tyCZJOUs(B^V6azpIOO*cfC(kd#`1WPA)Ga_MzT!y z!92A}z(_C@g#Lx{(2}8o^SZ%SF^UWoRULM@CP3I0Mod%VPV|<79tsXE0cu%4P7n1g zl!xlYn@783!*z5noNhUz*SUl_J^%H0m;?7Cj?)dh;8HP`4vP#VLl6lG{RX>AeNk8z&W8 z)TCX=QUc@kzRTdNX3`q&>tARPe0}{3v4WWlb))5?s5B))n$DTNFgnvEH)FyC+RW&& zLafZ|ob{}NLB1&cxj>Z(StAg`?5=C1o$Tw8Ln;FG=2x{@@Sfl1fwY2*KZ=yLi3;*%&IqL0$CO)Cr_?8LqSTvd{!! zYHl$S6E`^E$O)oa80qYe+z^Q093gH2@#R!8T$TzjU|6JxbLUWA!2+)pU2M)0%lrZ| zdF$VSZFj5WY!|I&so)g8?GCw^MYoFM2O41XUrH7yC!)bJWD@zGzv*5iVqn7q%<$F`&JUAeHM zVf0D*`w06>CAXvDDf$b2CVsDm+(El;g)tBI!B4{UY=5e*!5e!! zD`e~Ks8Q{x1gzbIb$)buB_@YwExK(SSL z55m=vUO#4hz7T{dWW(DslwvwIe&{<5nX7(RM}0RkCjM{Zd^eJ9b7$~|lGDNQeZTd$ z8y6IzlqQ2(LpzJmKuU&fy*mE0mj77zPXqti!+$vEh79ha!koTi^&bnc=Ly&bco*<* zz$t(pERq0y0V#l?fJ*>Z08m~vM{1FJ^V)tbo#zX#{SnBglRh#ENc6s}3 zre3Uxre_*1{5830WYODA?;^Z{trLEYUFyyBf|(FUYdPo+s0QO;cj0{jM%*ej!*+UQ z_Ioqrl!FM?9`&I1Me^Y=mWhuvOy{@(=j~P5K$8wM7wE0=jtkmf-w|i_LD=D)NsZ_N zYjB}qcr#k&Ry~aw`{bIke5JVMo$EIE3NdsnGW?kPu;<~O7&45E+11<)Q)xqS`i`lZ z2-H&Yf2_RfI+YjMf2To|#qN2HN`qxPD-DO-&k`qOA4E-&+Hxu_^NYnN7NUu(IZb6X zFNcnG1;|4(#W~(0KhFkG82(X3u=bio@VCo*&8TP$$5a3^`nKFk%iL{B(aN7fACT{8 zB`TR^-ZclJ^PVJzy#6C8)bp`jP$-Sd?F^R6@^9MFGw=olN@g#_LStGH&L`x_znagL zi~@m)?)6r6YUi5}r9d^%18~+9=rfP1Kz+ai8k7YViU##3VlJr57)Ht@H7oC{K|Y87 zE@CQb>_)frZOxa= zuY>$57hHi6bet~@-5(kdm^;?_tl1x(*j|lf`jV8I402Sj@S{u_I6rJCIafeG@rnZ0 z&&!OoV@l6E5fNOAF$DH4ibwmuWEec=UncF17REP-BlH8p(%vQ1^(LZGUpXmXU?Z>u zpHo_5g&p;aNs_Tt#e5d27(y=U1!VK8K4@exst8#5!OIRR^KxU&XDn?eDQ)wU{7VgS z=GreP=tOub)!(RK^Kv?|=x>iR2V}x1!qH+ph($^Gj8cIz85?wTK)wa%2Tc=#ruV3K zLNgji1Bso+5eM=1Ndky&q+SI6U!9Eje~oSOpk0Z~x;cuB8cC)b)yTVm#MB%9FGTs1 zF_p?0b<>RvNQJ6v+=J$eit-^GwS&g)sy3Ec;fEH@EmwkqzuhwbQw)>cvV+l!M5FPo zJ^LVz3{Y%wdV9_c%lvF=oAC_I7(ES6FF=%>!cz?s^?L*q%#*tO&3#nj-}#6 z@fSskAFBXDbZO2vN=poMA|i$TCYS?Q)5MI}D*vG$X^3~Jzas(9p&^m;Ev<=C^H%Dl z=-7G-3i?v^5?Z2C+~!DeLmOH%Spn16g-u~n4h78=LBkUTqy+3KuSD}p&34C#gYsWa zu%d>RSg5B6p>X`|3BCddMJ07{ufD#PL52pA$N?(d{6e2FsebP`GN@}?%*mKceDAzufGOLWPSu=$Z`r^XGSbG z`UgGMeUtxM<`3D&S4+!HG{1OAz~2g*UwwxsOXzG2 zO_t6wzresw!ajQA8nQA!1y<%)moqE#3-NTN&Xoekg7Ek1yiN7 z%kL;|9PNi2?FEX2!f~C}(-IPFWX zeHj!Dq5krS6{{As!|?x@dmH$us%znUl1#_|12ag_0i#BZ8Y_Cypd|)t0!$J<0+WPH zun@4lt(}{z_d%Qi6cU1yAcy0$v{zg0wXI%lOIxpEYi+35CO`?G0)nj>K?Ofg4Ar0% zgQn*BuYJy$OhQ0>-{*OMuRjktbN1KTYwx}G+Usiz3vFsc3!T-K6=GH5gqeUDWkM5c z!+%68>te<-Z$%_j>WrRng}=r2roX!SE!i+uf7SrdOTW=?%c;~~g2Zr1QrfCg$y=P; z`hEsNkqQp5u}i>A4f;!DG@hmzvboF_gNtLFnqpN)DvVj}GFskBV>BL0if@xyzE#Sc zNRLbxx2Xpg*?bgIs@!sM%{_h*6{*lv$eN;eIbEKnE&!wHKxid($I6aynM4=PP}JS= zSCT}r>S=sm-d5x;zvHaXJjqsdgrnU~mCcQP0s4O(Q~W!fL-fL2lnb6F8SG5~vYsJ} z6{(8_C*%jmhtCR)mj?VtxbPxmHBjRHlM;B{K&TZ3utNg;s~z zWQD#|d-In#Bk6jDw=*ret5+N#{kVnd-B^Y-Zjl^qCYj^x2-AHGmbv4n@>$TanO`ut zN6I_a^GWeDO5bXkF|jwbVQ7v}ntN8pj3+bF{3JF==nJ=7x%5#SW=nhbCMBsE#=#mB zHPm&1dFuYgTD?@F;I4jCO_xs_z#pfb@&wZ|i$ujNsq|h+U$peA{pQo#oZQF$)m zDd0J&{(02@0tuAVsr>*?Q%l{n_Hg5*+^^ z`CalwsQSA+5Ar<5b5i>^(Eh}#MEh1VI$g7xiPN|-lwMlD^I9g+LkkP0teUa<2X!OF zat!A=mq*&M|C8}I@p*(XOJ(mIgAEYPU+qskSp8|L|gf0(pBLhe{cl!@|hkeTI1MIgfQ;8N?iNLp1{fBR&<-2AnB8Pwqfn zTIM1&-I`7oqZBu1Y?Yvwf+_B7&+O!|}I+{}iE4-?vNU+rP;-gmCU5 z@de-Wb)F^P{-KyQzMZ{xTE4HiAmUo`T~94&ZpQDiVK!_mmIe8um5h4xt;VpOs6m6S;o`G_X9j1@}%**58G<|%PaLb zSJ3E1h(z{Qo0L0`tH>I_f=5{ z>uOjs;tO)T(+`Hd(yCTjCPVr@_TMO*}v5 zv2nnBqyIJRNq2f-g$h=9!^1FtwpeXW#z8q;T+etc^DfP0Jg3gnGdJo*GAI?spWrSf zWa6W$qdi=1rbgw}g(%FdD&$P@RsD9E5BiD);dht{m~f=WO5_ebLoqmTxYy2t2gH-?yrMf=g5MT z&Wq#Dk@1vQJKi{SeA~1Y=PXR>SxwKn1>=0zXL%zX(oB16r#hp*C1-TclkHQYt*sXZ}%+t;zI22+Qu(tc4IcM1K1Bw0qYT*b!TK%rt?v9~HoeR5_e za*(b1Vpr=28I^haqVHx@Bh;DajDHX#l=&X%o|o=zqkHY6%r1>y^jf;pk9huv#~%Ct&)_%u!QVK4Q20|6{M?s#68s?w$WzU8 z8_)k;__=_a6MtIx8b%IAKJPfJ{L=h*x|=;X+UnEW#Mo?{7@Lg|W3!?5P`JUjITF2* zW5qIkK3cMmZ>WxKWz7GT`BKRYk^9Hf)jR;`YJnOj8iBhqZUA%q1AVJNeT6`MsX%>B zytRF-nnHJ_m2_Tc_rbU5wfOwk+SN2n5qTSlPV@wZ)t~0q;;*$6Lamp(%suxB|0z2k z0eQFs9Xa2a5 z9p^<^S~+a*01H*xmo9Ki>q~hpt#7*W_Od!NL?xDWbueqXQbRo>)UC>;oDzB#LR$zI zaF<)L!}|{r>@K?%`V{ z?^$`lER^*?&wboMU*1l+o4U0&rSLvEy7LN8NJccH-c1P(?uq zYl8l+_bK|?#1rJnJLDhH+m?oy7f>x7Xo8(RZp}AjwczzTluv5O&`W! z!?%D*wyi+0ZHSi@q}BUSI;uV_^ct^MrZ`sLlJ&{=KJP^b3Gaz>p2)m;zoX*G)3AR|AWoa3`qA%+^pG`aY{Gu0`-Aof^Q?#(h7D2=p0Lj+o z9k^X=ZEjKjZdCuuabxTHzmnwu&tabTcoLJ>>OV&s4unH1^|6SGCb63>XYRYAEj{c< za<8*UQ@JISO|D37a-7CwgIb)W@6OwGyfr0Ku5ZzIw;JiK9qA(1KAcgoBb+JceOL>) z2-z~P60_>dx%F?$uN<7OBIlcBQzK*aHvLBZdHvj`-pE?CJS|FSFDHg6nQZt2*i#v= z81Qm_tqeBp3+L!p>o+;Ig--o;r#@CY-@I_Utwl zXbfayO5ZBqA|GGVvUOuhAFU9)tNG>CE@4p_>)pfgA1Ib|rDauM zCH_(4rF6y2cQHG2DRIN18XUS7D{MM>=exVwxH<7V7*PGM*1L?E>Z7Y*`^r=-6UdvW zTD?g93Hi>Xlj(%w zDn~p+Y>$1~Y{F6Hnr0EU*=PcYljg^eiq%B_Yrqx$MBkf*4mJS% zzfq?^B%)r#;oX?SD;Xijnp6l&mDlbRG(fCE=$Evcso`T##vSI_G|k=R{W_RM2hHAL zy+wP1D@N?7A@Nu2`jqjflCu?OKB88svO^JjmVUJnq_v(3i4-PCL+<3c=g*+g^UV6i zw}?>u{<-`?NQoE?Hm5d4)=i9V1@B2n z$F4To(#{O-k9zRFFoAcU=N<_X58mJYj>7v3{CPyWWpxDN?sn*_yn1ziVdu4+84Frh zUd4X9>T-zO!0daB6UYC_ZD3x^-3pDr^Ntqn>sr0Sj#=qRqw>munx*MB&d>o@NFkn zx}eRmm&GrJ(WBZ#M(SW6q>SvZit@;MOwgOGLFtWUaxFIRR48WJ=I&-z-Dj{k4$Bvc_D4LCU9-B3DF!zrS4vQ}ECl}^)2OSRHjT4_KlovTD#_DnVZDtOKu7%}3n zaG4-k9n{CHm62uB!3Thw(f{88^nU`LY5zZiN3GI;cU={32jFL{R(hURdf_cv=_PAR zFB>o>^q=!j-acry*nQ)IL(DkB%9%uiEx@K5vEl`7L)6@69-00*Y;iKLp~l7-v^Oj^ zOX^qxpS||qMZ)FQ=YG$}vh>-M5zDMu_wa@N#G;i|?l|JeMe&7+FMjvBSsA{yvwb$f zgfF^*>gMo#gXaz&dsYFz$nV4{;tr>FhbuO9LEBWt47R0N&`Q^U_-Z_g+NLUqwH01{ zj#I1Y5%%e8>=c1oXQff@7vm|n1_zY_&yzpF)A#}XgDYGyFBa(0GV^r=0M7ggkq;Iv z)VC`6mJ4&lbTp-9?tpRi$N$8>B9VYF8Nu94pO&H(Ik|*OE8-05)rvB?Qcw<~McIT$ z*NSqrqVZbM1g&VIRy0W~nyjZ5Y!9c!7Nd9XlPsBnB~KInI2adjBKO>ji896vX`b)Z z$~UZwClQSg#Tgr)OW)i2{xEjN=%*=5CyTX8gt3EUO@} z%Dv=ZzeY@ePf=qnH3Bm=#>f7jsnI7eik%?yYF*H`HZ!FVv%%!LIh4IA9V1u4mL&(0 zfhGLc7SkXD`G{vts|vH3@FINq%;~vT^zo^KS5*;=0#(E^YZH)t<;hR?lw;0)JmdJxR@EmcPJeI@<1Co~%r+7zbq--W&j zT|0S-VtPu3pGgLPPi)p&p9p1uNy+$2SuO6{31mSilcDbjNAK2BJFk(S>*Q(z$PChH z`T5yfDm6Z?6RFB><6ilRNdhN;R^M9ZDAh+-)bDnxekQMxB48}obq8AeLE)QP@T%wT z+vGH{)XDKPJ-S^^mB*8(x!qk*cejedS%cwKf`F|bbsILyJpan`d!8Fv{%cy8qp z8Z7&#-^G!*HWV;E{2E7etXmnU@D18Lkql__@N*LWbKnuZKd+>X>*JFw6VW<%ZDB0v ztE_-GH2lxVnb*xq8xqMk33kwU_(t_nE1oB|v=^D{VULkNjMyDPTd|GBLXM+Uk@_mt3$UaDW}#FIcn zy-yCLLBK;c^{K*z$f%5)nLjwsE174OKHW<^+WjUQQ;eh`jNc)jK2x7EZC0coesTuI zPxOcq7pNh65$mv|Q#GeCS^CA91J7h!vWX>9mz=Syj_FldnBY~!{9S0|0{ZT@A&Y_9 zl$?syo>9_)B`32_)Y}6*ruxA*;bizk*sbCP1OmPLIC*(LDb5m!Fzy%7PG+I9Dv_CN z{+Enzhw6-Y^VxsC4%eYZmO0HA+hm_XZ}z9-lJF!p7M$_G8Vf;z-2 zQZXZ~tV|hO5e7JsWt-Eh!uZvTGQI4BXVO_nTBJXWkC3c@acDB*U*%pmOlX#~;lwwz znl7#87?!KBhMs#@gO7$2cdc3(^!#aOwda{lKcd~dUl<6 zLE;sAv{}FJT0W(q%v*OuarATNl6{l1&W>DDn;kIr=PRill<{KrC%vpYSfN*OBXn68 ze<3{>HAx&%Q)jzX33eG?hC|tdnaDEX2V`}GRF1&PGn&Xu;(v^Lzwa|93XajYI~BQ! z-kkG!jDwo>lN7%EQ(HU{S7yl1a2fIb2+1=#UdbX8xoRcT`<@n zHlU3PGCD*6D2qQsp0ukVClX4Uyb3wHVL-tu{7_cmdl}Ug#>GU_rYDNHdWG?b z*0~(o9htvN@icuE=B?A!c)-&*T}G~^2X*DnynTNX3ZzfXx_J8rPk0`xw`CYy#SB6C z7C~@Y=cO^{{p7LG?SpSS